diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index 6aa0073bf95b..000000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -# https://github.com/microsoft/vscode-dev-containers/blob/main/containers/python-3/README.md -ARG VARIANT=3.12-bookworm -FROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT} -COPY requirements.txt /tmp/pip-tmp/ -RUN python3 -m pip install --upgrade pip \ - && python3 -m pip install --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \ - && pipx install pre-commit ruff \ - && pre-commit install diff --git a/.devcontainer/README.md b/.devcontainer/README.md deleted file mode 100644 index ec3cdb61de7a..000000000000 --- a/.devcontainer/README.md +++ /dev/null @@ -1 +0,0 @@ -https://code.visualstudio.com/docs/devcontainers/tutorial diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index ae1d4fb7494d..000000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "Python 3", - "build": { - "dockerfile": "Dockerfile", - "context": "..", - "args": { - // Update 'VARIANT' to pick a Python version: 3, 3.11, 3.10, 3.9, 3.8 - // Append -bullseye or -buster to pin to an OS version. - // Use -bullseye variants on local on arm64/Apple Silicon. - "VARIANT": "3.12-bookworm", - } - }, - - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "python.defaultInterpreterPath": "/usr/local/bin/python", - "python.linting.enabled": true, - "python.formatting.blackPath": "/usr/local/py-utils/bin/black", - "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy" - }, - - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "ms-python.python", - "ms-python.vscode-pylance" - ] - } - }, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "pip3 install --user -r requirements.txt", - - // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "vscode" -} diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 176a458f94e0..000000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index d2ac43c7df31..000000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,88 +0,0 @@ -# This is a comment. -# Each line is a file pattern followed by one or more owners. - -# More details are here: https://help.github.com/articles/about-codeowners/ - -# The '*' pattern is global owners. - -# Order is important. The last matching pattern has the most precedence. - -/.* @cclauss - -# /arithmetic_analysis/ - -# /backtracking/ - -# /bit_manipulation/ - -# /blockchain/ - -# /boolean_algebra/ - -# /cellular_automata/ - -# /ciphers/ - -# /compression/ - -# /computer_vision/ - -# /conversions/ - -# /data_structures/ - -# /digital_image_processing/ - -# /divide_and_conquer/ - -# /dynamic_programming/ - -# /file_transfer/ - -# /fuzzy_logic/ - -# /genetic_algorithm/ - -# /geodesy/ - -# /graphics/ - -# /graphs/ - -# /greedy_method/ - -# /hashes/ - -# /images/ - -# /linear_algebra/ - -# /machine_learning/ - -# /maths/ - -# /matrix/ - -# /networking_flow/ - -# /neural_network/ - -# /other/ - -# /project_euler/ - -# /quantum/ - -# /scheduling/ - -# /scripts/ - -# /searches/ - -# /sorts/ - -# /strings/ - -# /traversals/ - -/web_programming/ @cclauss diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 4ccdb52cad24..000000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Bug report -description: Create a bug report to help us address errors in the repository -labels: [bug] -body: - - type: markdown - attributes: - value: > - Before requesting please search [existing issues](https://github.com/TheAlgorithms/Python/labels/bug). - Usage questions such as "How do I...?" belong on the - [Discord](https://discord.gg/c7MnfGFGa6) and will be closed. - - - type: input - attributes: - label: "Repository commit" - description: > - The commit hash for `TheAlgorithms/Python` repository. You can get this - by running the command `git rev-parse HEAD` locally. - placeholder: "a0b0f414ae134aa1772d33bb930e5a960f9979e8" - validations: - required: true - - - type: input - attributes: - label: "Python version (python --version)" - placeholder: "Python 3.10.7" - validations: - required: true - - - type: textarea - attributes: - label: "Dependencies version (pip freeze)" - description: > - This is the output of the command `pip freeze --all`. Note that the - actual output might be different as compared to the placeholder text. - placeholder: | - appnope==0.1.3 - asttokens==2.0.8 - backcall==0.2.0 - ... - validations: - required: true - - - type: textarea - attributes: - label: "Expected behavior" - description: "Describe the behavior you expect. May include images or videos." - validations: - required: true - - - type: textarea - attributes: - label: "Actual behavior" - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 62019bb08938..000000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: Discord community - url: https://discord.gg/c7MnfGFGa6 - about: Have any questions or need any help? Please contact us via Discord diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 20823bd58ab1..000000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Feature request -description: Suggest features, propose improvements, discuss new ideas. -labels: [enhancement] -body: - - type: markdown - attributes: - value: > - Before requesting please search [existing issues](https://github.com/TheAlgorithms/Python/labels/enhancement). - Do not create issues to implement new algorithms as these will be closed. - Usage questions such as "How do I...?" belong on the - [Discord](https://discord.gg/c7MnfGFGa6) and will be closed. - - - type: textarea - attributes: - label: "Feature description" - description: > - This could include new topics or improving any existing implementations. - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/other.yml b/.github/ISSUE_TEMPLATE/other.yml deleted file mode 100644 index 44d6ff541506..000000000000 --- a/.github/ISSUE_TEMPLATE/other.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Other -description: Use this for any other issues. PLEASE do not create blank issues -labels: ["awaiting triage"] -body: - - type: textarea - id: issuedescription - attributes: - label: What would you like to share? - description: Provide a clear and concise explanation of your issue. - validations: - required: true - - - type: textarea - id: extrainfo - attributes: - label: Additional information - description: Is there anything else we should know about this issue? - validations: - required: false diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 15e494ec867e..000000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,8 +0,0 @@ -# Keep GitHub Actions up to date with Dependabot... -# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "daily" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index e2ae0966cda5..000000000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,21 +0,0 @@ -### Describe your change: - - - -* [ ] Add an algorithm? -* [ ] Fix a bug or typo in an existing algorithm? -* [ ] Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request. -* [ ] Documentation change? - -### Checklist: -* [ ] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Python/blob/master/CONTRIBUTING.md). -* [ ] This pull request is all my own work -- I have not plagiarized. -* [ ] I know that pull requests will not be merged if they fail the automated tests. -* [ ] This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms. -* [ ] All new Python files are placed inside an existing directory. -* [ ] All filenames are in all lowercase characters with no spaces or dashes. -* [ ] All functions and variable names follow Python naming conventions. -* [ ] All function parameters and return values are annotated with Python [type hints](https://docs.python.org/3/library/typing.html). -* [ ] All functions have [doctests](https://docs.python.org/3/library/doctest.html) that pass the automated testing. -* [ ] All new algorithms include at least one URL that points to Wikipedia or another similar explanation. -* [ ] If this pull request resolves one or more open issues then the description above includes the issue number(s) with a [closing keyword](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue): "Fixes #ISSUE-NUMBER". diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 0939e1f223ff..000000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,63 +0,0 @@ -# Configuration for probot-stale - https://github.com/probot/stale - -# Number of days of inactivity before an Issue or Pull Request becomes stale -daysUntilStale: 30 - -# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. -# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. -daysUntilClose: 7 - -# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) -onlyLabels: [] - -# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable -exemptLabels: - - "Status: on hold" - -# Set to true to ignore issues in a project (defaults to false) -exemptProjects: false - -# Set to true to ignore issues in a milestone (defaults to false) -exemptMilestones: false - -# Set to true to ignore issues with an assignee (defaults to false) -exemptAssignees: false - -# Label to use when marking as stale -staleLabel: stale - -# Limit the number of actions per hour, from 1-30. Default is 30 -limitPerRun: 5 - -# Comment to post when removing the stale label. -# unmarkComment: > -# Your comment here. - -# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': -pulls: - # Comment to post when marking as stale. Set to `false` to disable - markComment: > - This pull request has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. - - # Comment to post when closing a stale Pull Request. - closeComment: > - Please reopen this pull request once you commit the changes requested - or make improvements on the code. If this is not the case and you need - some help, feel free to seek help from our [Gitter](https://gitter.im/TheAlgorithms/community) - or ping one of the reviewers. Thank you for your contributions! - -issues: - # Comment to post when marking as stale. Set to `false` to disable - markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. - - # Comment to post when closing a stale Issue. - closeComment: > - Please reopen this issue once you add more information and updates here. - If this is not the case and you need some help, feel free to seek help - from our [Gitter](https://gitter.im/TheAlgorithms/community) or ping one of the - reviewers. Thank you for your contributions! diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index f54cc982d1ec..000000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: "build" - -on: - pull_request: - schedule: - - cron: "0 0 * * *" # Run everyday - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: 3.13 - allow-prereleases: true - - uses: actions/cache@v4 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip setuptools wheel - python -m pip install pytest-cov -r requirements.txt - - name: Run tests - # TODO: #8818 Re-enable quantum tests - run: pytest - --ignore=quantum/q_fourier_transform.py - --ignore=computer_vision/cnn_classification.py - --ignore=dynamic_programming/k_means_clustering_tensorflow.py - --ignore=machine_learning/lstm/lstm_prediction.py - --ignore=neural_network/input_data.py - --ignore=project_euler/ - --ignore=scripts/validate_solutions.py - --cov-report=term-missing:skip-covered - --cov=. . - - if: ${{ success() }} - run: scripts/build_directory_md.py 2>&1 | tee DIRECTORY.md diff --git a/.github/workflows/directory_writer.yml b/.github/workflows/directory_writer.yml deleted file mode 100644 index 55d89f455a25..000000000000 --- a/.github/workflows/directory_writer.yml +++ /dev/null @@ -1,25 +0,0 @@ -# The objective of this GitHub Action is to update the DIRECTORY.md file (if needed) -# when doing a git push -name: directory_writer -on: [push] -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: actions/setup-python@v5 - with: - python-version: 3.x - - name: Write DIRECTORY.md - run: | - scripts/build_directory_md.py 2>&1 | tee DIRECTORY.md - git config --global user.name "$GITHUB_ACTOR" - git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com" - git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY - - name: Update DIRECTORY.md - run: | - git add DIRECTORY.md - git commit -am "updating DIRECTORY.md" || true - git push --force origin HEAD:$GITHUB_REF || true diff --git a/.github/workflows/project_euler.yml b/.github/workflows/project_euler.yml deleted file mode 100644 index 59e1208a650d..000000000000 --- a/.github/workflows/project_euler.yml +++ /dev/null @@ -1,39 +0,0 @@ -on: - pull_request: - # Run only if a file is changed within the project_euler directory and related files - paths: - - "project_euler/**" - - ".github/workflows/project_euler.yml" - - "scripts/validate_solutions.py" - schedule: - - cron: "0 0 * * *" # Run everyday - -name: "Project Euler" - -jobs: - project-euler: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: 3.x - - name: Install pytest and pytest-cov - run: | - python -m pip install --upgrade pip - python -m pip install --upgrade numpy pytest pytest-cov - - run: pytest --doctest-modules --cov-report=term-missing:skip-covered --cov=project_euler/ project_euler/ - validate-solutions: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 - with: - python-version: 3.x - - name: Install pytest and requests - run: | - python -m pip install --upgrade pip - python -m pip install --upgrade numpy pytest requests - - run: pytest scripts/validate_solutions.py - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ruff.yml b/.github/workflows/ruff.yml deleted file mode 100644 index d354eba672ae..000000000000 --- a/.github/workflows/ruff.yml +++ /dev/null @@ -1,16 +0,0 @@ -# https://beta.ruff.rs -name: ruff -on: - push: - branches: - - master - pull_request: - branches: - - master -jobs: - ruff: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - run: pip install --user ruff - - run: ruff check --output-format=github . diff --git a/.gitignore b/.gitignore deleted file mode 100644 index baea84b8d1f1..000000000000 --- a/.gitignore +++ /dev/null @@ -1,110 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a Python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ - -.DS_Store -.idea -.try -.vscode/ -.vs/ diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 5975b8b8e983..000000000000 --- a/.gitpod.yml +++ /dev/null @@ -1,2 +0,0 @@ -tasks: - - init: pip3 install -r ./requirements.txt diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 77541027afb3..000000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,64 +0,0 @@ -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 - hooks: - - id: check-executables-have-shebangs - - id: check-toml - - id: check-yaml - - id: end-of-file-fixer - types: [python] - - id: trailing-whitespace - - id: requirements-txt-fixer - - - repo: https://github.com/MarcoGorelli/auto-walrus - rev: 0.3.4 - hooks: - - id: auto-walrus - - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.6.9 - hooks: - - id: ruff - - id: ruff-format - - - repo: https://github.com/codespell-project/codespell - rev: v2.3.0 - hooks: - - id: codespell - additional_dependencies: - - tomli - - - repo: https://github.com/tox-dev/pyproject-fmt - rev: "2.2.4" - hooks: - - id: pyproject-fmt - - - repo: local - hooks: - - id: validate-filenames - name: Validate filenames - entry: ./scripts/validate_filenames.py - language: script - pass_filenames: false - - - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.20.2 - hooks: - - id: validate-pyproject - - - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.11.2 - hooks: - - id: mypy - args: - - --explicit-package-bases - - --ignore-missing-imports - - --install-types # See mirrors-mypy README.md - - --non-interactive - additional_dependencies: [types-requests] - - - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v4.0.0-alpha.8" - hooks: - - id: prettier - types_or: [toml, yaml] diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ef16fa1aa7ac..000000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "githubPullRequests.ignoredPullRequestBranches": [ - "master" - ] -} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index b5113212929a..000000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,193 +0,0 @@ -# Contributing guidelines - -## Before contributing - -Welcome to [TheAlgorithms/Python](https://github.com/TheAlgorithms/Python)! Before submitting your pull requests, please ensure that you __read the whole guidelines__. If you have any doubts about the contributing guide, please feel free to [state it clearly in an issue](https://github.com/TheAlgorithms/Python/issues/new) or ask the community on [Gitter](https://gitter.im/TheAlgorithms/community). - -## Contributing - -### Contributor - -We are delighted that you are considering implementing algorithms and data structures for others! This repository is referenced and used by learners from all over the globe. By being one of our contributors, you agree and confirm that: - -- You did your work - no plagiarism allowed. - - Any plagiarized work will not be merged. -- Your work will be distributed under [MIT License](LICENSE.md) once your pull request is merged. -- Your submitted work fulfills or mostly fulfills our styles and standards. - -__New implementation__ is welcome! For example, new solutions for a problem, different representations for a graph data structure or algorithm designs with different complexity, but __identical implementation__ of an existing implementation is not allowed. Please check whether the solution is already implemented or not before submitting your pull request. - -__Improving comments__ and __writing proper tests__ are also highly welcome. - -### Contribution - -We appreciate any contribution, from fixing a grammar mistake in a comment to implementing complex algorithms. Please read this section if you are contributing your work. - -Your contribution will be tested by our [automated testing on GitHub Actions](https://github.com/TheAlgorithms/Python/actions) to save time and mental energy. After you have submitted your pull request, you should see the GitHub Actions tests start to run at the bottom of your submission page. If those tests fail, then click on the ___details___ button to read through the GitHub Actions output to understand the failure. If you do not understand, please leave a comment on your submission page and a community member will try to help. - -#### Issues - -If you are interested in resolving an [open issue](https://github.com/TheAlgorithms/Python/issues), simply make a pull request with your proposed fix. __We do not assign issues in this repo__ so please do not ask for permission to work on an issue. - -__Do not__ create an issue to contribute an algorithm. Please submit a pull request instead. - -Please help us keep our issue list small by adding `Fixes #{$ISSUE_NUMBER}` to the description of pull requests that resolve open issues. -For example, if your pull request fixes issue #10, then please add the following to its description: -``` -Fixes #10 -``` -GitHub will use this tag to [auto-close the issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) if and when the PR is merged. - -#### What is an Algorithm? - -An Algorithm is one or more functions (or classes) that: -* take one or more inputs, -* perform some internal calculations or data manipulations, -* return one or more outputs, -* have minimal side effects (Ex. `print()`, `plot()`, `read()`, `write()`). - -Algorithms should be packaged in a way that would make it easy for readers to put them into larger programs. - -Algorithms should: -* have intuitive class and function names that make their purpose clear to readers -* use Python naming conventions and intuitive variable names to ease comprehension -* be flexible to take different input values -* have Python type hints for their input parameters and return values -* raise Python exceptions (`ValueError`, etc.) on erroneous input values -* have docstrings with clear explanations and/or URLs to source materials -* contain doctests that test both valid and erroneous input values -* return all calculation results instead of printing or plotting them - -Algorithms in this repo should not be how-to examples for existing Python packages. Instead, they should perform internal calculations or manipulations to convert input values into different output values. Those calculations or manipulations can use data types, classes, or functions of existing Python packages but each algorithm in this repo should add unique value. - -#### Pre-commit plugin -Use [pre-commit](https://pre-commit.com/#installation) to automatically format your code to match our coding style: - -```bash -python3 -m pip install pre-commit # only required the first time -pre-commit install -``` -That's it! The plugin will run every time you commit any changes. If there are any errors found during the run, fix them and commit those changes. You can even run the plugin manually on all files: - -```bash -pre-commit run --all-files --show-diff-on-failure -``` - -#### Coding Style - -We want your work to be readable by others; therefore, we encourage you to note the following: - -- Please write in Python 3.12+. For instance: `print()` is a function in Python 3 so `print "Hello"` will *not* work but `print("Hello")` will. -- Please focus hard on the naming of functions, classes, and variables. Help your reader by using __descriptive names__ that can help you to remove redundant comments. - - Single letter variable names are *old school* so please avoid them unless their life only spans a few lines. - - Expand acronyms because `gcd()` is hard to understand but `greatest_common_divisor()` is not. - - Please follow the [Python Naming Conventions](https://pep8.org/#prescriptive-naming-conventions) so variable_names and function_names should be lower_case, CONSTANTS in UPPERCASE, ClassNames should be CamelCase, etc. - -- We encourage the use of Python [f-strings](https://realpython.com/python-f-strings/#f-strings-a-new-and-improved-way-to-format-strings-in-python) where they make the code easier to read. - -- Please consider running [__psf/black__](https://github.com/python/black) on your Python file(s) before submitting your pull request. This is not yet a requirement but it does make your code more readable and automatically aligns it with much of [PEP 8](https://www.python.org/dev/peps/pep-0008/). There are other code formatters (autopep8, yapf) but the __black__ formatter is now hosted by the Python Software Foundation. To use it, - - ```bash - python3 -m pip install black # only required the first time - black . - ``` - -- All submissions will need to pass the test `ruff .` before they will be accepted so if possible, try this test locally on your Python file(s) before submitting your pull request. - - ```bash - python3 -m pip install ruff # only required the first time - ruff check - ``` - -- Original code submission require docstrings or comments to describe your work. - -- More on docstrings and comments: - - If you used a Wikipedia article or some other source material to create your algorithm, please add the URL in a docstring or comment to help your reader. - - The following are considered to be bad and may be requested to be improved: - - ```python - x = x + 2 # increased by 2 - ``` - - This is too trivial. Comments are expected to be explanatory. For comments, you can write them above, on or below a line of code, as long as you are consistent within the same piece of code. - - We encourage you to put docstrings inside your functions but please pay attention to the indentation of docstrings. The following is a good example: - - ```python - def sum_ab(a, b): - """ - Return the sum of two integers a and b. - """ - return a + b - ``` - -- Write tests (especially [__doctests__](https://docs.python.org/3/library/doctest.html)) to illustrate and verify your work. We highly encourage the use of _doctests on all functions_. - - ```python - def sum_ab(a, b): - """ - Return the sum of two integers a and b - >>> sum_ab(2, 2) - 4 - >>> sum_ab(-2, 3) - 1 - >>> sum_ab(4.9, 5.1) - 10.0 - """ - return a + b - ``` - - These doctests will be run by pytest as part of our automated testing so please try to run your doctests locally and make sure that they are found and pass: - - ```bash - python3 -m doctest -v my_submission.py - ``` - - The use of the Python built-in `input()` function is __not__ encouraged: - - ```python - input('Enter your input:') - # Or even worse... - input = eval(input("Enter your input: ")) - ``` - - However, if your code uses `input()` then we encourage you to gracefully deal with leading and trailing whitespace in user input by adding `.strip()` as in: - - ```python - starting_value = int(input("Please enter a starting value: ").strip()) - ``` - - The use of [Python type hints](https://docs.python.org/3/library/typing.html) is encouraged for function parameters and return values. Our automated testing will run [mypy](http://mypy-lang.org) so run that locally before making your submission. - - ```python - def sum_ab(a: int, b: int) -> int: - return a + b - ``` - - Instructions on how to install mypy can be found [here](https://github.com/python/mypy). Please use the command `mypy --ignore-missing-imports .` to test all files or `mypy --ignore-missing-imports path/to/file.py` to test a specific file. - -- [__List comprehensions and generators__](https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions) are preferred over the use of `lambda`, `map`, `filter`, `reduce` but the important thing is to demonstrate the power of Python in code that is easy to read and maintain. - -- Avoid importing external libraries for basic algorithms. Only use those libraries for complicated algorithms. -- If you need a third-party module that is not in the file __requirements.txt__, please add it to that file as part of your submission. - -#### Other Requirements for Submissions -- If you are submitting code in the `project_euler/` directory, please also read [the dedicated Guideline](https://github.com/TheAlgorithms/Python/blob/master/project_euler/README.md) before contributing to our Project Euler library. -- The file extension for code files should be `.py`. Jupyter Notebooks should be submitted to [TheAlgorithms/Jupyter](https://github.com/TheAlgorithms/Jupyter). -- Strictly use snake_case (underscore_separated) in your file_name, as it will be easy to parse in future using scripts. -- Please avoid creating new directories if at all possible. Try to fit your work into the existing directory structure. -- If possible, follow the standard *within* the folder you are submitting to. -- If you have modified/added code work, make sure the code compiles before submitting. -- If you have modified/added documentation work, ensure your language is concise and contains no grammar errors. -- Do not update the README.md or DIRECTORY.md file which will be periodically autogenerated by our GitHub Actions processes. -- Add a corresponding explanation to [Algorithms-Explanation](https://github.com/TheAlgorithms/Algorithms-Explanation) (Optional but recommended). -- All submissions will be tested with [__mypy__](http://www.mypy-lang.org) so we encourage you to add [__Python type hints__](https://docs.python.org/3/library/typing.html) where it makes sense to do so. - -- Most importantly, - - __Be consistent in the use of these guidelines when submitting.__ - - __Join__ us on [Discord](https://discord.com/invite/c7MnfGFGa6) and [Gitter](https://gitter.im/TheAlgorithms/community) __now!__ - - Happy coding! - -Writer [@poyea](https://github.com/poyea), Jun 2019. diff --git a/DIRECTORY.md b/DIRECTORY.md deleted file mode 100644 index 0a3be2a06533..000000000000 --- a/DIRECTORY.md +++ /dev/null @@ -1,1364 +0,0 @@ - -## Audio Filters - * [Butterworth Filter](audio_filters/butterworth_filter.py) - * [Iir Filter](audio_filters/iir_filter.py) - * [Show Response](audio_filters/show_response.py) - -## Backtracking - * [All Combinations](backtracking/all_combinations.py) - * [All Permutations](backtracking/all_permutations.py) - * [All Subsequences](backtracking/all_subsequences.py) - * [Coloring](backtracking/coloring.py) - * [Combination Sum](backtracking/combination_sum.py) - * [Crossword Puzzle Solver](backtracking/crossword_puzzle_solver.py) - * [Generate Parentheses](backtracking/generate_parentheses.py) - * [Hamiltonian Cycle](backtracking/hamiltonian_cycle.py) - * [Knight Tour](backtracking/knight_tour.py) - * [Match Word Pattern](backtracking/match_word_pattern.py) - * [Minimax](backtracking/minimax.py) - * [N Queens](backtracking/n_queens.py) - * [N Queens Math](backtracking/n_queens_math.py) - * [Power Sum](backtracking/power_sum.py) - * [Rat In Maze](backtracking/rat_in_maze.py) - * [Sudoku](backtracking/sudoku.py) - * [Sum Of Subsets](backtracking/sum_of_subsets.py) - * [Word Break](backtracking/word_break.py) - * [Word Ladder](backtracking/word_ladder.py) - * [Word Search](backtracking/word_search.py) - -## Bit Manipulation - * [Binary And Operator](bit_manipulation/binary_and_operator.py) - * [Binary Coded Decimal](bit_manipulation/binary_coded_decimal.py) - * [Binary Count Setbits](bit_manipulation/binary_count_setbits.py) - * [Binary Count Trailing Zeros](bit_manipulation/binary_count_trailing_zeros.py) - * [Binary Or Operator](bit_manipulation/binary_or_operator.py) - * [Binary Shifts](bit_manipulation/binary_shifts.py) - * [Binary Twos Complement](bit_manipulation/binary_twos_complement.py) - * [Binary Xor Operator](bit_manipulation/binary_xor_operator.py) - * [Bitwise Addition Recursive](bit_manipulation/bitwise_addition_recursive.py) - * [Count 1S Brian Kernighan Method](bit_manipulation/count_1s_brian_kernighan_method.py) - * [Count Number Of One Bits](bit_manipulation/count_number_of_one_bits.py) - * [Excess 3 Code](bit_manipulation/excess_3_code.py) - * [Find Previous Power Of Two](bit_manipulation/find_previous_power_of_two.py) - * [Gray Code Sequence](bit_manipulation/gray_code_sequence.py) - * [Highest Set Bit](bit_manipulation/highest_set_bit.py) - * [Index Of Rightmost Set Bit](bit_manipulation/index_of_rightmost_set_bit.py) - * [Is Even](bit_manipulation/is_even.py) - * [Is Power Of Two](bit_manipulation/is_power_of_two.py) - * [Largest Pow Of Two Le Num](bit_manipulation/largest_pow_of_two_le_num.py) - * [Missing Number](bit_manipulation/missing_number.py) - * [Numbers Different Signs](bit_manipulation/numbers_different_signs.py) - * [Power Of 4](bit_manipulation/power_of_4.py) - * [Reverse Bits](bit_manipulation/reverse_bits.py) - * [Single Bit Manipulation Operations](bit_manipulation/single_bit_manipulation_operations.py) - * [Swap All Odd And Even Bits](bit_manipulation/swap_all_odd_and_even_bits.py) - -## Blockchain - * [Diophantine Equation](blockchain/diophantine_equation.py) - -## Boolean Algebra - * [And Gate](boolean_algebra/and_gate.py) - * [Imply Gate](boolean_algebra/imply_gate.py) - * [Karnaugh Map Simplification](boolean_algebra/karnaugh_map_simplification.py) - * [Multiplexer](boolean_algebra/multiplexer.py) - * [Nand Gate](boolean_algebra/nand_gate.py) - * [Nimply Gate](boolean_algebra/nimply_gate.py) - * [Nor Gate](boolean_algebra/nor_gate.py) - * [Not Gate](boolean_algebra/not_gate.py) - * [Or Gate](boolean_algebra/or_gate.py) - * [Quine Mc Cluskey](boolean_algebra/quine_mc_cluskey.py) - * [Xnor Gate](boolean_algebra/xnor_gate.py) - * [Xor Gate](boolean_algebra/xor_gate.py) - -## Cellular Automata - * [Conways Game Of Life](cellular_automata/conways_game_of_life.py) - * [Game Of Life](cellular_automata/game_of_life.py) - * [Langtons Ant](cellular_automata/langtons_ant.py) - * [Nagel Schrekenberg](cellular_automata/nagel_schrekenberg.py) - * [One Dimensional](cellular_automata/one_dimensional.py) - * [Wa Tor](cellular_automata/wa_tor.py) - -## Ciphers - * [A1Z26](ciphers/a1z26.py) - * [Affine Cipher](ciphers/affine_cipher.py) - * [Atbash](ciphers/atbash.py) - * [Autokey](ciphers/autokey.py) - * [Baconian Cipher](ciphers/baconian_cipher.py) - * [Base16](ciphers/base16.py) - * [Base32](ciphers/base32.py) - * [Base64](ciphers/base64.py) - * [Base85](ciphers/base85.py) - * [Beaufort Cipher](ciphers/beaufort_cipher.py) - * [Bifid](ciphers/bifid.py) - * [Brute Force Caesar Cipher](ciphers/brute_force_caesar_cipher.py) - * [Caesar Cipher](ciphers/caesar_cipher.py) - * [Cryptomath Module](ciphers/cryptomath_module.py) - * [Decrypt Caesar With Chi Squared](ciphers/decrypt_caesar_with_chi_squared.py) - * [Deterministic Miller Rabin](ciphers/deterministic_miller_rabin.py) - * [Diffie](ciphers/diffie.py) - * [Diffie Hellman](ciphers/diffie_hellman.py) - * [Elgamal Key Generator](ciphers/elgamal_key_generator.py) - * [Enigma Machine2](ciphers/enigma_machine2.py) - * [Fractionated Morse Cipher](ciphers/fractionated_morse_cipher.py) - * [Gronsfeld Cipher](ciphers/gronsfeld_cipher.py) - * [Hill Cipher](ciphers/hill_cipher.py) - * [Mixed Keyword Cypher](ciphers/mixed_keyword_cypher.py) - * [Mono Alphabetic Ciphers](ciphers/mono_alphabetic_ciphers.py) - * [Morse Code](ciphers/morse_code.py) - * [Onepad Cipher](ciphers/onepad_cipher.py) - * [Permutation Cipher](ciphers/permutation_cipher.py) - * [Playfair Cipher](ciphers/playfair_cipher.py) - * [Polybius](ciphers/polybius.py) - * [Porta Cipher](ciphers/porta_cipher.py) - * [Rabin Miller](ciphers/rabin_miller.py) - * [Rail Fence Cipher](ciphers/rail_fence_cipher.py) - * [Rot13](ciphers/rot13.py) - * [Rsa Cipher](ciphers/rsa_cipher.py) - * [Rsa Factorization](ciphers/rsa_factorization.py) - * [Rsa Key Generator](ciphers/rsa_key_generator.py) - * [Running Key Cipher](ciphers/running_key_cipher.py) - * [Shuffled Shift Cipher](ciphers/shuffled_shift_cipher.py) - * [Simple Keyword Cypher](ciphers/simple_keyword_cypher.py) - * [Simple Substitution Cipher](ciphers/simple_substitution_cipher.py) - * [Transposition Cipher](ciphers/transposition_cipher.py) - * [Transposition Cipher Encrypt Decrypt File](ciphers/transposition_cipher_encrypt_decrypt_file.py) - * [Trifid Cipher](ciphers/trifid_cipher.py) - * [Vernam Cipher](ciphers/vernam_cipher.py) - * [Vigenere Cipher](ciphers/vigenere_cipher.py) - * [Xor Cipher](ciphers/xor_cipher.py) - -## Compression - * [Burrows Wheeler](compression/burrows_wheeler.py) - * [Huffman](compression/huffman.py) - * [Lempel Ziv](compression/lempel_ziv.py) - * [Lempel Ziv Decompress](compression/lempel_ziv_decompress.py) - * [Lz77](compression/lz77.py) - * [Peak Signal To Noise Ratio](compression/peak_signal_to_noise_ratio.py) - * [Run Length Encoding](compression/run_length_encoding.py) - -## Computer Vision - * [Cnn Classification](computer_vision/cnn_classification.py) - * [Flip Augmentation](computer_vision/flip_augmentation.py) - * [Haralick Descriptors](computer_vision/haralick_descriptors.py) - * [Harris Corner](computer_vision/harris_corner.py) - * [Horn Schunck](computer_vision/horn_schunck.py) - * [Mean Threshold](computer_vision/mean_threshold.py) - * [Mosaic Augmentation](computer_vision/mosaic_augmentation.py) - * [Pooling Functions](computer_vision/pooling_functions.py) - -## Conversions - * [Astronomical Length Scale Conversion](conversions/astronomical_length_scale_conversion.py) - * [Binary To Decimal](conversions/binary_to_decimal.py) - * [Binary To Hexadecimal](conversions/binary_to_hexadecimal.py) - * [Binary To Octal](conversions/binary_to_octal.py) - * [Convert Number To Words](conversions/convert_number_to_words.py) - * [Decimal To Any](conversions/decimal_to_any.py) - * [Decimal To Binary](conversions/decimal_to_binary.py) - * [Decimal To Hexadecimal](conversions/decimal_to_hexadecimal.py) - * [Decimal To Octal](conversions/decimal_to_octal.py) - * [Energy Conversions](conversions/energy_conversions.py) - * [Excel Title To Column](conversions/excel_title_to_column.py) - * [Hex To Bin](conversions/hex_to_bin.py) - * [Hexadecimal To Decimal](conversions/hexadecimal_to_decimal.py) - * [Ipv4 Conversion](conversions/ipv4_conversion.py) - * [Length Conversion](conversions/length_conversion.py) - * [Molecular Chemistry](conversions/molecular_chemistry.py) - * [Octal To Binary](conversions/octal_to_binary.py) - * [Octal To Decimal](conversions/octal_to_decimal.py) - * [Octal To Hexadecimal](conversions/octal_to_hexadecimal.py) - * [Prefix Conversions](conversions/prefix_conversions.py) - * [Prefix Conversions String](conversions/prefix_conversions_string.py) - * [Pressure Conversions](conversions/pressure_conversions.py) - * [Rgb Cmyk Conversion](conversions/rgb_cmyk_conversion.py) - * [Rgb Hsv Conversion](conversions/rgb_hsv_conversion.py) - * [Roman Numerals](conversions/roman_numerals.py) - * [Speed Conversions](conversions/speed_conversions.py) - * [Temperature Conversions](conversions/temperature_conversions.py) - * [Time Conversions](conversions/time_conversions.py) - * [Volume Conversions](conversions/volume_conversions.py) - * [Weight Conversion](conversions/weight_conversion.py) - -## Data Structures - * Arrays - * [Equilibrium Index In Array](data_structures/arrays/equilibrium_index_in_array.py) - * [Find Triplets With 0 Sum](data_structures/arrays/find_triplets_with_0_sum.py) - * [Index 2D Array In 1D](data_structures/arrays/index_2d_array_in_1d.py) - * [Kth Largest Element](data_structures/arrays/kth_largest_element.py) - * [Median Two Array](data_structures/arrays/median_two_array.py) - * [Monotonic Array](data_structures/arrays/monotonic_array.py) - * [Pairs With Given Sum](data_structures/arrays/pairs_with_given_sum.py) - * [Permutations](data_structures/arrays/permutations.py) - * [Prefix Sum](data_structures/arrays/prefix_sum.py) - * [Product Sum](data_structures/arrays/product_sum.py) - * [Sparse Table](data_structures/arrays/sparse_table.py) - * [Sudoku Solver](data_structures/arrays/sudoku_solver.py) - * Binary Tree - * [Avl Tree](data_structures/binary_tree/avl_tree.py) - * [Basic Binary Tree](data_structures/binary_tree/basic_binary_tree.py) - * [Binary Search Tree](data_structures/binary_tree/binary_search_tree.py) - * [Binary Search Tree Recursive](data_structures/binary_tree/binary_search_tree_recursive.py) - * [Binary Tree Mirror](data_structures/binary_tree/binary_tree_mirror.py) - * [Binary Tree Node Sum](data_structures/binary_tree/binary_tree_node_sum.py) - * [Binary Tree Path Sum](data_structures/binary_tree/binary_tree_path_sum.py) - * [Binary Tree Traversals](data_structures/binary_tree/binary_tree_traversals.py) - * [Diameter Of Binary Tree](data_structures/binary_tree/diameter_of_binary_tree.py) - * [Diff Views Of Binary Tree](data_structures/binary_tree/diff_views_of_binary_tree.py) - * [Distribute Coins](data_structures/binary_tree/distribute_coins.py) - * [Fenwick Tree](data_structures/binary_tree/fenwick_tree.py) - * [Flatten Binarytree To Linkedlist](data_structures/binary_tree/flatten_binarytree_to_linkedlist.py) - * [Floor And Ceiling](data_structures/binary_tree/floor_and_ceiling.py) - * [Inorder Tree Traversal 2022](data_structures/binary_tree/inorder_tree_traversal_2022.py) - * [Is Sorted](data_structures/binary_tree/is_sorted.py) - * [Is Sum Tree](data_structures/binary_tree/is_sum_tree.py) - * [Lazy Segment Tree](data_structures/binary_tree/lazy_segment_tree.py) - * [Lowest Common Ancestor](data_structures/binary_tree/lowest_common_ancestor.py) - * [Maximum Fenwick Tree](data_structures/binary_tree/maximum_fenwick_tree.py) - * [Maximum Sum Bst](data_structures/binary_tree/maximum_sum_bst.py) - * [Merge Two Binary Trees](data_structures/binary_tree/merge_two_binary_trees.py) - * [Mirror Binary Tree](data_structures/binary_tree/mirror_binary_tree.py) - * [Non Recursive Segment Tree](data_structures/binary_tree/non_recursive_segment_tree.py) - * [Number Of Possible Binary Trees](data_structures/binary_tree/number_of_possible_binary_trees.py) - * [Red Black Tree](data_structures/binary_tree/red_black_tree.py) - * [Segment Tree](data_structures/binary_tree/segment_tree.py) - * [Segment Tree Other](data_structures/binary_tree/segment_tree_other.py) - * [Serialize Deserialize Binary Tree](data_structures/binary_tree/serialize_deserialize_binary_tree.py) - * [Symmetric Tree](data_structures/binary_tree/symmetric_tree.py) - * [Treap](data_structures/binary_tree/treap.py) - * [Wavelet Tree](data_structures/binary_tree/wavelet_tree.py) - * Disjoint Set - * [Alternate Disjoint Set](data_structures/disjoint_set/alternate_disjoint_set.py) - * [Disjoint Set](data_structures/disjoint_set/disjoint_set.py) - * Hashing - * [Bloom Filter](data_structures/hashing/bloom_filter.py) - * [Double Hash](data_structures/hashing/double_hash.py) - * [Hash Map](data_structures/hashing/hash_map.py) - * [Hash Table](data_structures/hashing/hash_table.py) - * [Hash Table With Linked List](data_structures/hashing/hash_table_with_linked_list.py) - * Number Theory - * [Prime Numbers](data_structures/hashing/number_theory/prime_numbers.py) - * [Quadratic Probing](data_structures/hashing/quadratic_probing.py) - * Tests - * [Test Hash Map](data_structures/hashing/tests/test_hash_map.py) - * Heap - * [Binomial Heap](data_structures/heap/binomial_heap.py) - * [Heap](data_structures/heap/heap.py) - * [Heap Generic](data_structures/heap/heap_generic.py) - * [Max Heap](data_structures/heap/max_heap.py) - * [Min Heap](data_structures/heap/min_heap.py) - * [Randomized Heap](data_structures/heap/randomized_heap.py) - * [Skew Heap](data_structures/heap/skew_heap.py) - * Kd Tree - * [Build Kdtree](data_structures/kd_tree/build_kdtree.py) - * Example - * [Example Usage](data_structures/kd_tree/example/example_usage.py) - * [Hypercube Points](data_structures/kd_tree/example/hypercube_points.py) - * [Kd Node](data_structures/kd_tree/kd_node.py) - * [Nearest Neighbour Search](data_structures/kd_tree/nearest_neighbour_search.py) - * Tests - * [Test Kdtree](data_structures/kd_tree/tests/test_kdtree.py) - * Linked List - * [Circular Linked List](data_structures/linked_list/circular_linked_list.py) - * [Deque Doubly](data_structures/linked_list/deque_doubly.py) - * [Doubly Linked List](data_structures/linked_list/doubly_linked_list.py) - * [Doubly Linked List Two](data_structures/linked_list/doubly_linked_list_two.py) - * [Floyds Cycle Detection](data_structures/linked_list/floyds_cycle_detection.py) - * [From Sequence](data_structures/linked_list/from_sequence.py) - * [Has Loop](data_structures/linked_list/has_loop.py) - * [Is Palindrome](data_structures/linked_list/is_palindrome.py) - * [Merge Two Lists](data_structures/linked_list/merge_two_lists.py) - * [Middle Element Of Linked List](data_structures/linked_list/middle_element_of_linked_list.py) - * [Print Reverse](data_structures/linked_list/print_reverse.py) - * [Reverse K Group](data_structures/linked_list/reverse_k_group.py) - * [Rotate To The Right](data_structures/linked_list/rotate_to_the_right.py) - * [Singly Linked List](data_structures/linked_list/singly_linked_list.py) - * [Skip List](data_structures/linked_list/skip_list.py) - * [Swap Nodes](data_structures/linked_list/swap_nodes.py) - * Queue - * [Circular Queue](data_structures/queue/circular_queue.py) - * [Circular Queue Linked List](data_structures/queue/circular_queue_linked_list.py) - * [Double Ended Queue](data_structures/queue/double_ended_queue.py) - * [Linked Queue](data_structures/queue/linked_queue.py) - * [Priority Queue Using List](data_structures/queue/priority_queue_using_list.py) - * [Queue By List](data_structures/queue/queue_by_list.py) - * [Queue By Two Stacks](data_structures/queue/queue_by_two_stacks.py) - * [Queue On Pseudo Stack](data_structures/queue/queue_on_pseudo_stack.py) - * Stacks - * [Balanced Parentheses](data_structures/stacks/balanced_parentheses.py) - * [Dijkstras Two Stack Algorithm](data_structures/stacks/dijkstras_two_stack_algorithm.py) - * [Infix To Postfix Conversion](data_structures/stacks/infix_to_postfix_conversion.py) - * [Infix To Prefix Conversion](data_structures/stacks/infix_to_prefix_conversion.py) - * [Lexicographical Numbers](data_structures/stacks/lexicographical_numbers.py) - * [Next Greater Element](data_structures/stacks/next_greater_element.py) - * [Postfix Evaluation](data_structures/stacks/postfix_evaluation.py) - * [Prefix Evaluation](data_structures/stacks/prefix_evaluation.py) - * [Stack](data_structures/stacks/stack.py) - * [Stack Using Two Queues](data_structures/stacks/stack_using_two_queues.py) - * [Stack With Doubly Linked List](data_structures/stacks/stack_with_doubly_linked_list.py) - * [Stack With Singly Linked List](data_structures/stacks/stack_with_singly_linked_list.py) - * [Stock Span Problem](data_structures/stacks/stock_span_problem.py) - * Suffix Tree - * Example - * [Example Usage](data_structures/suffix_tree/example/example_usage.py) - * [Suffix Tree](data_structures/suffix_tree/suffix_tree.py) - * [Suffix Tree Node](data_structures/suffix_tree/suffix_tree_node.py) - * Tests - * [Test Suffix Tree](data_structures/suffix_tree/tests/test_suffix_tree.py) - * Trie - * [Radix Tree](data_structures/trie/radix_tree.py) - * [Trie](data_structures/trie/trie.py) - -## Digital Image Processing - * [Change Brightness](digital_image_processing/change_brightness.py) - * [Change Contrast](digital_image_processing/change_contrast.py) - * [Convert To Negative](digital_image_processing/convert_to_negative.py) - * Dithering - * [Burkes](digital_image_processing/dithering/burkes.py) - * Edge Detection - * [Canny](digital_image_processing/edge_detection/canny.py) - * Filters - * [Bilateral Filter](digital_image_processing/filters/bilateral_filter.py) - * [Convolve](digital_image_processing/filters/convolve.py) - * [Gabor Filter](digital_image_processing/filters/gabor_filter.py) - * [Gaussian Filter](digital_image_processing/filters/gaussian_filter.py) - * [Laplacian Filter](digital_image_processing/filters/laplacian_filter.py) - * [Local Binary Pattern](digital_image_processing/filters/local_binary_pattern.py) - * [Median Filter](digital_image_processing/filters/median_filter.py) - * [Sobel Filter](digital_image_processing/filters/sobel_filter.py) - * Histogram Equalization - * [Histogram Stretch](digital_image_processing/histogram_equalization/histogram_stretch.py) - * [Index Calculation](digital_image_processing/index_calculation.py) - * Morphological Operations - * [Dilation Operation](digital_image_processing/morphological_operations/dilation_operation.py) - * [Erosion Operation](digital_image_processing/morphological_operations/erosion_operation.py) - * Resize - * [Resize](digital_image_processing/resize/resize.py) - * Rotation - * [Rotation](digital_image_processing/rotation/rotation.py) - * [Sepia](digital_image_processing/sepia.py) - * [Test Digital Image Processing](digital_image_processing/test_digital_image_processing.py) - -## Divide And Conquer - * [Closest Pair Of Points](divide_and_conquer/closest_pair_of_points.py) - * [Convex Hull](divide_and_conquer/convex_hull.py) - * [Heaps Algorithm](divide_and_conquer/heaps_algorithm.py) - * [Heaps Algorithm Iterative](divide_and_conquer/heaps_algorithm_iterative.py) - * [Inversions](divide_and_conquer/inversions.py) - * [Kth Order Statistic](divide_and_conquer/kth_order_statistic.py) - * [Max Difference Pair](divide_and_conquer/max_difference_pair.py) - * [Max Subarray](divide_and_conquer/max_subarray.py) - * [Mergesort](divide_and_conquer/mergesort.py) - * [Peak](divide_and_conquer/peak.py) - * [Power](divide_and_conquer/power.py) - * [Strassen Matrix Multiplication](divide_and_conquer/strassen_matrix_multiplication.py) - -## Dynamic Programming - * [Abbreviation](dynamic_programming/abbreviation.py) - * [All Construct](dynamic_programming/all_construct.py) - * [Bitmask](dynamic_programming/bitmask.py) - * [Catalan Numbers](dynamic_programming/catalan_numbers.py) - * [Climbing Stairs](dynamic_programming/climbing_stairs.py) - * [Combination Sum Iv](dynamic_programming/combination_sum_iv.py) - * [Edit Distance](dynamic_programming/edit_distance.py) - * [Factorial](dynamic_programming/factorial.py) - * [Fast Fibonacci](dynamic_programming/fast_fibonacci.py) - * [Fibonacci](dynamic_programming/fibonacci.py) - * [Fizz Buzz](dynamic_programming/fizz_buzz.py) - * [Floyd Warshall](dynamic_programming/floyd_warshall.py) - * [Integer Partition](dynamic_programming/integer_partition.py) - * [Iterating Through Submasks](dynamic_programming/iterating_through_submasks.py) - * [K Means Clustering Tensorflow](dynamic_programming/k_means_clustering_tensorflow.py) - * [Knapsack](dynamic_programming/knapsack.py) - * [Largest Divisible Subset](dynamic_programming/largest_divisible_subset.py) - * [Longest Common Subsequence](dynamic_programming/longest_common_subsequence.py) - * [Longest Common Substring](dynamic_programming/longest_common_substring.py) - * [Longest Increasing Subsequence](dynamic_programming/longest_increasing_subsequence.py) - * [Longest Increasing Subsequence O Nlogn](dynamic_programming/longest_increasing_subsequence_o_nlogn.py) - * [Longest Palindromic Subsequence](dynamic_programming/longest_palindromic_subsequence.py) - * [Matrix Chain Multiplication](dynamic_programming/matrix_chain_multiplication.py) - * [Matrix Chain Order](dynamic_programming/matrix_chain_order.py) - * [Max Non Adjacent Sum](dynamic_programming/max_non_adjacent_sum.py) - * [Max Product Subarray](dynamic_programming/max_product_subarray.py) - * [Max Subarray Sum](dynamic_programming/max_subarray_sum.py) - * [Min Distance Up Bottom](dynamic_programming/min_distance_up_bottom.py) - * [Minimum Coin Change](dynamic_programming/minimum_coin_change.py) - * [Minimum Cost Path](dynamic_programming/minimum_cost_path.py) - * [Minimum Partition](dynamic_programming/minimum_partition.py) - * [Minimum Size Subarray Sum](dynamic_programming/minimum_size_subarray_sum.py) - * [Minimum Squares To Represent A Number](dynamic_programming/minimum_squares_to_represent_a_number.py) - * [Minimum Steps To One](dynamic_programming/minimum_steps_to_one.py) - * [Minimum Tickets Cost](dynamic_programming/minimum_tickets_cost.py) - * [Optimal Binary Search Tree](dynamic_programming/optimal_binary_search_tree.py) - * [Palindrome Partitioning](dynamic_programming/palindrome_partitioning.py) - * [Regex Match](dynamic_programming/regex_match.py) - * [Rod Cutting](dynamic_programming/rod_cutting.py) - * [Smith Waterman](dynamic_programming/smith_waterman.py) - * [Subset Generation](dynamic_programming/subset_generation.py) - * [Sum Of Subset](dynamic_programming/sum_of_subset.py) - * [Trapped Water](dynamic_programming/trapped_water.py) - * [Tribonacci](dynamic_programming/tribonacci.py) - * [Viterbi](dynamic_programming/viterbi.py) - * [Wildcard Matching](dynamic_programming/wildcard_matching.py) - * [Word Break](dynamic_programming/word_break.py) - -## Electronics - * [Apparent Power](electronics/apparent_power.py) - * [Builtin Voltage](electronics/builtin_voltage.py) - * [Capacitor Equivalence](electronics/capacitor_equivalence.py) - * [Carrier Concentration](electronics/carrier_concentration.py) - * [Charging Capacitor](electronics/charging_capacitor.py) - * [Charging Inductor](electronics/charging_inductor.py) - * [Circular Convolution](electronics/circular_convolution.py) - * [Coulombs Law](electronics/coulombs_law.py) - * [Electric Conductivity](electronics/electric_conductivity.py) - * [Electric Power](electronics/electric_power.py) - * [Electrical Impedance](electronics/electrical_impedance.py) - * [Ic 555 Timer](electronics/ic_555_timer.py) - * [Ind Reactance](electronics/ind_reactance.py) - * [Ohms Law](electronics/ohms_law.py) - * [Real And Reactive Power](electronics/real_and_reactive_power.py) - * [Resistor Color Code](electronics/resistor_color_code.py) - * [Resistor Equivalence](electronics/resistor_equivalence.py) - * [Resonant Frequency](electronics/resonant_frequency.py) - * [Wheatstone Bridge](electronics/wheatstone_bridge.py) - -## File Transfer - * [Receive File](file_transfer/receive_file.py) - * [Send File](file_transfer/send_file.py) - * Tests - * [Test Send File](file_transfer/tests/test_send_file.py) - -## Financial - * [Equated Monthly Installments](financial/equated_monthly_installments.py) - * [Exponential Moving Average](financial/exponential_moving_average.py) - * [Interest](financial/interest.py) - * [Present Value](financial/present_value.py) - * [Price Plus Tax](financial/price_plus_tax.py) - * [Simple Moving Average](financial/simple_moving_average.py) - -## Fractals - * [Julia Sets](fractals/julia_sets.py) - * [Koch Snowflake](fractals/koch_snowflake.py) - * [Mandelbrot](fractals/mandelbrot.py) - * [Sierpinski Triangle](fractals/sierpinski_triangle.py) - * [Vicsek](fractals/vicsek.py) - -## Fuzzy Logic - * [Fuzzy Operations](fuzzy_logic/fuzzy_operations.py) - -## Genetic Algorithm - * [Basic String](genetic_algorithm/basic_string.py) - -## Geodesy - * [Haversine Distance](geodesy/haversine_distance.py) - * [Lamberts Ellipsoidal Distance](geodesy/lamberts_ellipsoidal_distance.py) - -## Geometry - * [Geometry](geometry/geometry.py) - -## Graphics - * [Bezier Curve](graphics/bezier_curve.py) - * [Vector3 For 2D Rendering](graphics/vector3_for_2d_rendering.py) - -## Graphs - * [A Star](graphs/a_star.py) - * [Ant Colony Optimization Algorithms](graphs/ant_colony_optimization_algorithms.py) - * [Articulation Points](graphs/articulation_points.py) - * [Basic Graphs](graphs/basic_graphs.py) - * [Bellman Ford](graphs/bellman_ford.py) - * [Bi Directional Dijkstra](graphs/bi_directional_dijkstra.py) - * [Bidirectional A Star](graphs/bidirectional_a_star.py) - * [Bidirectional Breadth First Search](graphs/bidirectional_breadth_first_search.py) - * [Boruvka](graphs/boruvka.py) - * [Breadth First Search](graphs/breadth_first_search.py) - * [Breadth First Search 2](graphs/breadth_first_search_2.py) - * [Breadth First Search Shortest Path](graphs/breadth_first_search_shortest_path.py) - * [Breadth First Search Shortest Path 2](graphs/breadth_first_search_shortest_path_2.py) - * [Breadth First Search Zero One Shortest Path](graphs/breadth_first_search_zero_one_shortest_path.py) - * [Check Bipatrite](graphs/check_bipatrite.py) - * [Check Cycle](graphs/check_cycle.py) - * [Connected Components](graphs/connected_components.py) - * [Deep Clone Graph](graphs/deep_clone_graph.py) - * [Depth First Search](graphs/depth_first_search.py) - * [Depth First Search 2](graphs/depth_first_search_2.py) - * [Dijkstra](graphs/dijkstra.py) - * [Dijkstra 2](graphs/dijkstra_2.py) - * [Dijkstra Algorithm](graphs/dijkstra_algorithm.py) - * [Dijkstra Alternate](graphs/dijkstra_alternate.py) - * [Dijkstra Binary Grid](graphs/dijkstra_binary_grid.py) - * [Dinic](graphs/dinic.py) - * [Directed And Undirected Weighted Graph](graphs/directed_and_undirected_weighted_graph.py) - * [Edmonds Karp Multiple Source And Sink](graphs/edmonds_karp_multiple_source_and_sink.py) - * [Eulerian Path And Circuit For Undirected Graph](graphs/eulerian_path_and_circuit_for_undirected_graph.py) - * [Even Tree](graphs/even_tree.py) - * [Finding Bridges](graphs/finding_bridges.py) - * [Frequent Pattern Graph Miner](graphs/frequent_pattern_graph_miner.py) - * [G Topological Sort](graphs/g_topological_sort.py) - * [Gale Shapley Bigraph](graphs/gale_shapley_bigraph.py) - * [Graph Adjacency List](graphs/graph_adjacency_list.py) - * [Graph Adjacency Matrix](graphs/graph_adjacency_matrix.py) - * [Graph List](graphs/graph_list.py) - * [Graphs Floyd Warshall](graphs/graphs_floyd_warshall.py) - * [Greedy Best First](graphs/greedy_best_first.py) - * [Greedy Min Vertex Cover](graphs/greedy_min_vertex_cover.py) - * [Kahns Algorithm Long](graphs/kahns_algorithm_long.py) - * [Kahns Algorithm Topo](graphs/kahns_algorithm_topo.py) - * [Karger](graphs/karger.py) - * [Markov Chain](graphs/markov_chain.py) - * [Matching Min Vertex Cover](graphs/matching_min_vertex_cover.py) - * [Minimum Path Sum](graphs/minimum_path_sum.py) - * [Minimum Spanning Tree Boruvka](graphs/minimum_spanning_tree_boruvka.py) - * [Minimum Spanning Tree Kruskal](graphs/minimum_spanning_tree_kruskal.py) - * [Minimum Spanning Tree Kruskal2](graphs/minimum_spanning_tree_kruskal2.py) - * [Minimum Spanning Tree Prims](graphs/minimum_spanning_tree_prims.py) - * [Minimum Spanning Tree Prims2](graphs/minimum_spanning_tree_prims2.py) - * [Multi Heuristic Astar](graphs/multi_heuristic_astar.py) - * [Page Rank](graphs/page_rank.py) - * [Prim](graphs/prim.py) - * [Random Graph Generator](graphs/random_graph_generator.py) - * [Scc Kosaraju](graphs/scc_kosaraju.py) - * [Strongly Connected Components](graphs/strongly_connected_components.py) - * [Tarjans Scc](graphs/tarjans_scc.py) - * Tests - * [Test Min Spanning Tree Kruskal](graphs/tests/test_min_spanning_tree_kruskal.py) - * [Test Min Spanning Tree Prim](graphs/tests/test_min_spanning_tree_prim.py) - -## Greedy Methods - * [Best Time To Buy And Sell Stock](greedy_methods/best_time_to_buy_and_sell_stock.py) - * [Fractional Cover Problem](greedy_methods/fractional_cover_problem.py) - * [Fractional Knapsack](greedy_methods/fractional_knapsack.py) - * [Fractional Knapsack 2](greedy_methods/fractional_knapsack_2.py) - * [Gas Station](greedy_methods/gas_station.py) - * [Minimum Coin Change](greedy_methods/minimum_coin_change.py) - * [Minimum Waiting Time](greedy_methods/minimum_waiting_time.py) - * [Optimal Merge Pattern](greedy_methods/optimal_merge_pattern.py) - * [Smallest Range](greedy_methods/smallest_range.py) - -## Hashes - * [Adler32](hashes/adler32.py) - * [Chaos Machine](hashes/chaos_machine.py) - * [Djb2](hashes/djb2.py) - * [Elf](hashes/elf.py) - * [Enigma Machine](hashes/enigma_machine.py) - * [Fletcher16](hashes/fletcher16.py) - * [Hamming Code](hashes/hamming_code.py) - * [Luhn](hashes/luhn.py) - * [Md5](hashes/md5.py) - * [Sdbm](hashes/sdbm.py) - * [Sha1](hashes/sha1.py) - * [Sha256](hashes/sha256.py) - -## Knapsack - * [Greedy Knapsack](knapsack/greedy_knapsack.py) - * [Knapsack](knapsack/knapsack.py) - * [Recursive Approach Knapsack](knapsack/recursive_approach_knapsack.py) - * Tests - * [Test Greedy Knapsack](knapsack/tests/test_greedy_knapsack.py) - * [Test Knapsack](knapsack/tests/test_knapsack.py) - -## Linear Algebra - * [Gaussian Elimination](linear_algebra/gaussian_elimination.py) - * [Jacobi Iteration Method](linear_algebra/jacobi_iteration_method.py) - * [Lu Decomposition](linear_algebra/lu_decomposition.py) - * Src - * [Conjugate Gradient](linear_algebra/src/conjugate_gradient.py) - * [Gaussian Elimination Pivoting](linear_algebra/src/gaussian_elimination_pivoting.py) - * [Lib](linear_algebra/src/lib.py) - * [Polynom For Points](linear_algebra/src/polynom_for_points.py) - * [Power Iteration](linear_algebra/src/power_iteration.py) - * [Rank Of Matrix](linear_algebra/src/rank_of_matrix.py) - * [Rayleigh Quotient](linear_algebra/src/rayleigh_quotient.py) - * [Schur Complement](linear_algebra/src/schur_complement.py) - * [Test Linear Algebra](linear_algebra/src/test_linear_algebra.py) - * [Transformations 2D](linear_algebra/src/transformations_2d.py) - -## Linear Programming - * [Simplex](linear_programming/simplex.py) - -## Machine Learning - * [Apriori Algorithm](machine_learning/apriori_algorithm.py) - * [Astar](machine_learning/astar.py) - * [Automatic Differentiation](machine_learning/automatic_differentiation.py) - * [Data Transformations](machine_learning/data_transformations.py) - * [Decision Tree](machine_learning/decision_tree.py) - * [Dimensionality Reduction](machine_learning/dimensionality_reduction.py) - * Forecasting - * [Run](machine_learning/forecasting/run.py) - * [Frequent Pattern Growth](machine_learning/frequent_pattern_growth.py) - * [Gradient Boosting Classifier](machine_learning/gradient_boosting_classifier.py) - * [Gradient Descent](machine_learning/gradient_descent.py) - * [K Means Clust](machine_learning/k_means_clust.py) - * [K Nearest Neighbours](machine_learning/k_nearest_neighbours.py) - * [Linear Discriminant Analysis](machine_learning/linear_discriminant_analysis.py) - * [Linear Regression](machine_learning/linear_regression.py) - * Local Weighted Learning - * [Local Weighted Learning](machine_learning/local_weighted_learning/local_weighted_learning.py) - * [Logistic Regression](machine_learning/logistic_regression.py) - * [Loss Functions](machine_learning/loss_functions.py) - * Lstm - * [Lstm Prediction](machine_learning/lstm/lstm_prediction.py) - * [Mfcc](machine_learning/mfcc.py) - * [Multilayer Perceptron Classifier](machine_learning/multilayer_perceptron_classifier.py) - * [Polynomial Regression](machine_learning/polynomial_regression.py) - * [Scoring Functions](machine_learning/scoring_functions.py) - * [Self Organizing Map](machine_learning/self_organizing_map.py) - * [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py) - * [Similarity Search](machine_learning/similarity_search.py) - * [Support Vector Machines](machine_learning/support_vector_machines.py) - * [Word Frequency Functions](machine_learning/word_frequency_functions.py) - * [Xgboost Classifier](machine_learning/xgboost_classifier.py) - * [Xgboost Regressor](machine_learning/xgboost_regressor.py) - -## Maths - * [Abs](maths/abs.py) - * [Addition Without Arithmetic](maths/addition_without_arithmetic.py) - * [Aliquot Sum](maths/aliquot_sum.py) - * [Allocation Number](maths/allocation_number.py) - * [Arc Length](maths/arc_length.py) - * [Area](maths/area.py) - * [Area Under Curve](maths/area_under_curve.py) - * [Average Absolute Deviation](maths/average_absolute_deviation.py) - * [Average Mean](maths/average_mean.py) - * [Average Median](maths/average_median.py) - * [Average Mode](maths/average_mode.py) - * [Bailey Borwein Plouffe](maths/bailey_borwein_plouffe.py) - * [Base Neg2 Conversion](maths/base_neg2_conversion.py) - * [Basic Maths](maths/basic_maths.py) - * [Binary Exponentiation](maths/binary_exponentiation.py) - * [Binary Multiplication](maths/binary_multiplication.py) - * [Binomial Coefficient](maths/binomial_coefficient.py) - * [Binomial Distribution](maths/binomial_distribution.py) - * [Ceil](maths/ceil.py) - * [Chebyshev Distance](maths/chebyshev_distance.py) - * [Check Polygon](maths/check_polygon.py) - * [Chinese Remainder Theorem](maths/chinese_remainder_theorem.py) - * [Chudnovsky Algorithm](maths/chudnovsky_algorithm.py) - * [Collatz Sequence](maths/collatz_sequence.py) - * [Combinations](maths/combinations.py) - * [Continued Fraction](maths/continued_fraction.py) - * [Decimal Isolate](maths/decimal_isolate.py) - * [Decimal To Fraction](maths/decimal_to_fraction.py) - * [Dodecahedron](maths/dodecahedron.py) - * [Double Factorial](maths/double_factorial.py) - * [Dual Number Automatic Differentiation](maths/dual_number_automatic_differentiation.py) - * [Entropy](maths/entropy.py) - * [Euclidean Distance](maths/euclidean_distance.py) - * [Euler Method](maths/euler_method.py) - * [Euler Modified](maths/euler_modified.py) - * [Eulers Totient](maths/eulers_totient.py) - * [Extended Euclidean Algorithm](maths/extended_euclidean_algorithm.py) - * [Factorial](maths/factorial.py) - * [Factors](maths/factors.py) - * [Fast Inverse Sqrt](maths/fast_inverse_sqrt.py) - * [Fermat Little Theorem](maths/fermat_little_theorem.py) - * [Fibonacci](maths/fibonacci.py) - * [Find Max](maths/find_max.py) - * [Find Min](maths/find_min.py) - * [Floor](maths/floor.py) - * [Gamma](maths/gamma.py) - * [Gaussian](maths/gaussian.py) - * [Gcd Of N Numbers](maths/gcd_of_n_numbers.py) - * [Germain Primes](maths/germain_primes.py) - * [Greatest Common Divisor](maths/greatest_common_divisor.py) - * [Hardy Ramanujanalgo](maths/hardy_ramanujanalgo.py) - * [Integer Square Root](maths/integer_square_root.py) - * [Interquartile Range](maths/interquartile_range.py) - * [Is Int Palindrome](maths/is_int_palindrome.py) - * [Is Ip V4 Address Valid](maths/is_ip_v4_address_valid.py) - * [Is Square Free](maths/is_square_free.py) - * [Jaccard Similarity](maths/jaccard_similarity.py) - * [Joint Probability Distribution](maths/joint_probability_distribution.py) - * [Josephus Problem](maths/josephus_problem.py) - * [Juggler Sequence](maths/juggler_sequence.py) - * [Karatsuba](maths/karatsuba.py) - * [Kth Lexicographic Permutation](maths/kth_lexicographic_permutation.py) - * [Largest Of Very Large Numbers](maths/largest_of_very_large_numbers.py) - * [Least Common Multiple](maths/least_common_multiple.py) - * [Line Length](maths/line_length.py) - * [Liouville Lambda](maths/liouville_lambda.py) - * [Lucas Lehmer Primality Test](maths/lucas_lehmer_primality_test.py) - * [Lucas Series](maths/lucas_series.py) - * [Maclaurin Series](maths/maclaurin_series.py) - * [Manhattan Distance](maths/manhattan_distance.py) - * [Matrix Exponentiation](maths/matrix_exponentiation.py) - * [Max Sum Sliding Window](maths/max_sum_sliding_window.py) - * [Minkowski Distance](maths/minkowski_distance.py) - * [Mobius Function](maths/mobius_function.py) - * [Modular Division](maths/modular_division.py) - * [Modular Exponential](maths/modular_exponential.py) - * [Monte Carlo](maths/monte_carlo.py) - * [Monte Carlo Dice](maths/monte_carlo_dice.py) - * [Number Of Digits](maths/number_of_digits.py) - * Numerical Analysis - * [Adams Bashforth](maths/numerical_analysis/adams_bashforth.py) - * [Bisection](maths/numerical_analysis/bisection.py) - * [Bisection 2](maths/numerical_analysis/bisection_2.py) - * [Integration By Simpson Approx](maths/numerical_analysis/integration_by_simpson_approx.py) - * [Intersection](maths/numerical_analysis/intersection.py) - * [Nevilles Method](maths/numerical_analysis/nevilles_method.py) - * [Newton Forward Interpolation](maths/numerical_analysis/newton_forward_interpolation.py) - * [Newton Raphson](maths/numerical_analysis/newton_raphson.py) - * [Numerical Integration](maths/numerical_analysis/numerical_integration.py) - * [Proper Fractions](maths/numerical_analysis/proper_fractions.py) - * [Runge Kutta](maths/numerical_analysis/runge_kutta.py) - * [Runge Kutta Fehlberg 45](maths/numerical_analysis/runge_kutta_fehlberg_45.py) - * [Runge Kutta Gills](maths/numerical_analysis/runge_kutta_gills.py) - * [Secant Method](maths/numerical_analysis/secant_method.py) - * [Simpson Rule](maths/numerical_analysis/simpson_rule.py) - * [Square Root](maths/numerical_analysis/square_root.py) - * [Odd Sieve](maths/odd_sieve.py) - * [Perfect Cube](maths/perfect_cube.py) - * [Perfect Number](maths/perfect_number.py) - * [Perfect Square](maths/perfect_square.py) - * [Persistence](maths/persistence.py) - * [Pi Generator](maths/pi_generator.py) - * [Pi Monte Carlo Estimation](maths/pi_monte_carlo_estimation.py) - * [Points Are Collinear 3D](maths/points_are_collinear_3d.py) - * [Pollard Rho](maths/pollard_rho.py) - * [Polynomial Evaluation](maths/polynomial_evaluation.py) - * Polynomials - * [Single Indeterminate Operations](maths/polynomials/single_indeterminate_operations.py) - * [Power Using Recursion](maths/power_using_recursion.py) - * [Prime Check](maths/prime_check.py) - * [Prime Factors](maths/prime_factors.py) - * [Prime Numbers](maths/prime_numbers.py) - * [Prime Sieve Eratosthenes](maths/prime_sieve_eratosthenes.py) - * [Primelib](maths/primelib.py) - * [Print Multiplication Table](maths/print_multiplication_table.py) - * [Pythagoras](maths/pythagoras.py) - * [Qr Decomposition](maths/qr_decomposition.py) - * [Quadratic Equations Complex Numbers](maths/quadratic_equations_complex_numbers.py) - * [Radians](maths/radians.py) - * [Radix2 Fft](maths/radix2_fft.py) - * [Remove Digit](maths/remove_digit.py) - * [Segmented Sieve](maths/segmented_sieve.py) - * Series - * [Arithmetic](maths/series/arithmetic.py) - * [Geometric](maths/series/geometric.py) - * [Geometric Series](maths/series/geometric_series.py) - * [Harmonic](maths/series/harmonic.py) - * [Harmonic Series](maths/series/harmonic_series.py) - * [Hexagonal Numbers](maths/series/hexagonal_numbers.py) - * [P Series](maths/series/p_series.py) - * [Sieve Of Eratosthenes](maths/sieve_of_eratosthenes.py) - * [Sigmoid](maths/sigmoid.py) - * [Signum](maths/signum.py) - * [Simultaneous Linear Equation Solver](maths/simultaneous_linear_equation_solver.py) - * [Sin](maths/sin.py) - * [Sock Merchant](maths/sock_merchant.py) - * [Softmax](maths/softmax.py) - * [Solovay Strassen Primality Test](maths/solovay_strassen_primality_test.py) - * [Spearman Rank Correlation Coefficient](maths/spearman_rank_correlation_coefficient.py) - * Special Numbers - * [Armstrong Numbers](maths/special_numbers/armstrong_numbers.py) - * [Automorphic Number](maths/special_numbers/automorphic_number.py) - * [Bell Numbers](maths/special_numbers/bell_numbers.py) - * [Carmichael Number](maths/special_numbers/carmichael_number.py) - * [Catalan Number](maths/special_numbers/catalan_number.py) - * [Hamming Numbers](maths/special_numbers/hamming_numbers.py) - * [Happy Number](maths/special_numbers/happy_number.py) - * [Harshad Numbers](maths/special_numbers/harshad_numbers.py) - * [Hexagonal Number](maths/special_numbers/hexagonal_number.py) - * [Krishnamurthy Number](maths/special_numbers/krishnamurthy_number.py) - * [Perfect Number](maths/special_numbers/perfect_number.py) - * [Polygonal Numbers](maths/special_numbers/polygonal_numbers.py) - * [Pronic Number](maths/special_numbers/pronic_number.py) - * [Proth Number](maths/special_numbers/proth_number.py) - * [Triangular Numbers](maths/special_numbers/triangular_numbers.py) - * [Ugly Numbers](maths/special_numbers/ugly_numbers.py) - * [Weird Number](maths/special_numbers/weird_number.py) - * [Sum Of Arithmetic Series](maths/sum_of_arithmetic_series.py) - * [Sum Of Digits](maths/sum_of_digits.py) - * [Sum Of Geometric Progression](maths/sum_of_geometric_progression.py) - * [Sum Of Harmonic Series](maths/sum_of_harmonic_series.py) - * [Sumset](maths/sumset.py) - * [Sylvester Sequence](maths/sylvester_sequence.py) - * [Tanh](maths/tanh.py) - * [Test Prime Check](maths/test_prime_check.py) - * [Three Sum](maths/three_sum.py) - * [Trapezoidal Rule](maths/trapezoidal_rule.py) - * [Triplet Sum](maths/triplet_sum.py) - * [Twin Prime](maths/twin_prime.py) - * [Two Pointer](maths/two_pointer.py) - * [Two Sum](maths/two_sum.py) - * [Volume](maths/volume.py) - * [Zellers Congruence](maths/zellers_congruence.py) - -## Matrix - * [Binary Search Matrix](matrix/binary_search_matrix.py) - * [Count Islands In Matrix](matrix/count_islands_in_matrix.py) - * [Count Negative Numbers In Sorted Matrix](matrix/count_negative_numbers_in_sorted_matrix.py) - * [Count Paths](matrix/count_paths.py) - * [Cramers Rule 2X2](matrix/cramers_rule_2x2.py) - * [Inverse Of Matrix](matrix/inverse_of_matrix.py) - * [Largest Square Area In Matrix](matrix/largest_square_area_in_matrix.py) - * [Matrix Class](matrix/matrix_class.py) - * [Matrix Equalization](matrix/matrix_equalization.py) - * [Matrix Multiplication Recursion](matrix/matrix_multiplication_recursion.py) - * [Matrix Operation](matrix/matrix_operation.py) - * [Max Area Of Island](matrix/max_area_of_island.py) - * [Median Matrix](matrix/median_matrix.py) - * [Nth Fibonacci Using Matrix Exponentiation](matrix/nth_fibonacci_using_matrix_exponentiation.py) - * [Pascal Triangle](matrix/pascal_triangle.py) - * [Rotate Matrix](matrix/rotate_matrix.py) - * [Searching In Sorted Matrix](matrix/searching_in_sorted_matrix.py) - * [Sherman Morrison](matrix/sherman_morrison.py) - * [Spiral Print](matrix/spiral_print.py) - * Tests - * [Test Matrix Operation](matrix/tests/test_matrix_operation.py) - * [Validate Sudoku Board](matrix/validate_sudoku_board.py) - -## Networking Flow - * [Ford Fulkerson](networking_flow/ford_fulkerson.py) - * [Minimum Cut](networking_flow/minimum_cut.py) - -## Neural Network - * Activation Functions - * [Binary Step](neural_network/activation_functions/binary_step.py) - * [Exponential Linear Unit](neural_network/activation_functions/exponential_linear_unit.py) - * [Gaussian Error Linear Unit](neural_network/activation_functions/gaussian_error_linear_unit.py) - * [Leaky Rectified Linear Unit](neural_network/activation_functions/leaky_rectified_linear_unit.py) - * [Mish](neural_network/activation_functions/mish.py) - * [Rectified Linear Unit](neural_network/activation_functions/rectified_linear_unit.py) - * [Scaled Exponential Linear Unit](neural_network/activation_functions/scaled_exponential_linear_unit.py) - * [Soboleva Modified Hyperbolic Tangent](neural_network/activation_functions/soboleva_modified_hyperbolic_tangent.py) - * [Softplus](neural_network/activation_functions/softplus.py) - * [Squareplus](neural_network/activation_functions/squareplus.py) - * [Swish](neural_network/activation_functions/swish.py) - * [Back Propagation Neural Network](neural_network/back_propagation_neural_network.py) - * [Convolution Neural Network](neural_network/convolution_neural_network.py) - * [Input Data](neural_network/input_data.py) - * [Simple Neural Network](neural_network/simple_neural_network.py) - * [Two Hidden Layers Neural Network](neural_network/two_hidden_layers_neural_network.py) - -## Other - * [Activity Selection](other/activity_selection.py) - * [Alternative List Arrange](other/alternative_list_arrange.py) - * [Bankers Algorithm](other/bankers_algorithm.py) - * [Davis Putnam Logemann Loveland](other/davis_putnam_logemann_loveland.py) - * [Doomsday](other/doomsday.py) - * [Fischer Yates Shuffle](other/fischer_yates_shuffle.py) - * [Gauss Easter](other/gauss_easter.py) - * [Graham Scan](other/graham_scan.py) - * [Greedy](other/greedy.py) - * [Guess The Number Search](other/guess_the_number_search.py) - * [H Index](other/h_index.py) - * [Least Recently Used](other/least_recently_used.py) - * [Lfu Cache](other/lfu_cache.py) - * [Linear Congruential Generator](other/linear_congruential_generator.py) - * [Lru Cache](other/lru_cache.py) - * [Magicdiamondpattern](other/magicdiamondpattern.py) - * [Majority Vote Algorithm](other/majority_vote_algorithm.py) - * [Maximum Subsequence](other/maximum_subsequence.py) - * [Nested Brackets](other/nested_brackets.py) - * [Number Container System](other/number_container_system.py) - * [Password](other/password.py) - * [Quine](other/quine.py) - * [Scoring Algorithm](other/scoring_algorithm.py) - * [Sdes](other/sdes.py) - * [Tower Of Hanoi](other/tower_of_hanoi.py) - * [Word Search](other/word_search.py) - -## Physics - * [Altitude Pressure](physics/altitude_pressure.py) - * [Archimedes Principle Of Buoyant Force](physics/archimedes_principle_of_buoyant_force.py) - * [Basic Orbital Capture](physics/basic_orbital_capture.py) - * [Casimir Effect](physics/casimir_effect.py) - * [Center Of Mass](physics/center_of_mass.py) - * [Centripetal Force](physics/centripetal_force.py) - * [Coulombs Law](physics/coulombs_law.py) - * [Doppler Frequency](physics/doppler_frequency.py) - * [Grahams Law](physics/grahams_law.py) - * [Horizontal Projectile Motion](physics/horizontal_projectile_motion.py) - * [Hubble Parameter](physics/hubble_parameter.py) - * [Ideal Gas Law](physics/ideal_gas_law.py) - * [In Static Equilibrium](physics/in_static_equilibrium.py) - * [Kinetic Energy](physics/kinetic_energy.py) - * [Lens Formulae](physics/lens_formulae.py) - * [Lorentz Transformation Four Vector](physics/lorentz_transformation_four_vector.py) - * [Malus Law](physics/malus_law.py) - * [Mass Energy Equivalence](physics/mass_energy_equivalence.py) - * [Mirror Formulae](physics/mirror_formulae.py) - * [N Body Simulation](physics/n_body_simulation.py) - * [Newtons Law Of Gravitation](physics/newtons_law_of_gravitation.py) - * [Newtons Second Law Of Motion](physics/newtons_second_law_of_motion.py) - * [Photoelectric Effect](physics/photoelectric_effect.py) - * [Potential Energy](physics/potential_energy.py) - * [Rainfall Intensity](physics/rainfall_intensity.py) - * [Reynolds Number](physics/reynolds_number.py) - * [Rms Speed Of Molecule](physics/rms_speed_of_molecule.py) - * [Shear Stress](physics/shear_stress.py) - * [Speed Of Sound](physics/speed_of_sound.py) - * [Speeds Of Gas Molecules](physics/speeds_of_gas_molecules.py) - * [Terminal Velocity](physics/terminal_velocity.py) - -## Project Euler - * Problem 001 - * [Sol1](project_euler/problem_001/sol1.py) - * [Sol2](project_euler/problem_001/sol2.py) - * [Sol3](project_euler/problem_001/sol3.py) - * [Sol4](project_euler/problem_001/sol4.py) - * [Sol5](project_euler/problem_001/sol5.py) - * [Sol6](project_euler/problem_001/sol6.py) - * [Sol7](project_euler/problem_001/sol7.py) - * Problem 002 - * [Sol1](project_euler/problem_002/sol1.py) - * [Sol2](project_euler/problem_002/sol2.py) - * [Sol3](project_euler/problem_002/sol3.py) - * [Sol4](project_euler/problem_002/sol4.py) - * [Sol5](project_euler/problem_002/sol5.py) - * Problem 003 - * [Sol1](project_euler/problem_003/sol1.py) - * [Sol2](project_euler/problem_003/sol2.py) - * [Sol3](project_euler/problem_003/sol3.py) - * Problem 004 - * [Sol1](project_euler/problem_004/sol1.py) - * [Sol2](project_euler/problem_004/sol2.py) - * Problem 005 - * [Sol1](project_euler/problem_005/sol1.py) - * [Sol2](project_euler/problem_005/sol2.py) - * Problem 006 - * [Sol1](project_euler/problem_006/sol1.py) - * [Sol2](project_euler/problem_006/sol2.py) - * [Sol3](project_euler/problem_006/sol3.py) - * [Sol4](project_euler/problem_006/sol4.py) - * Problem 007 - * [Sol1](project_euler/problem_007/sol1.py) - * [Sol2](project_euler/problem_007/sol2.py) - * [Sol3](project_euler/problem_007/sol3.py) - * Problem 008 - * [Sol1](project_euler/problem_008/sol1.py) - * [Sol2](project_euler/problem_008/sol2.py) - * [Sol3](project_euler/problem_008/sol3.py) - * Problem 009 - * [Sol1](project_euler/problem_009/sol1.py) - * [Sol2](project_euler/problem_009/sol2.py) - * [Sol3](project_euler/problem_009/sol3.py) - * Problem 010 - * [Sol1](project_euler/problem_010/sol1.py) - * [Sol2](project_euler/problem_010/sol2.py) - * [Sol3](project_euler/problem_010/sol3.py) - * Problem 011 - * [Sol1](project_euler/problem_011/sol1.py) - * [Sol2](project_euler/problem_011/sol2.py) - * Problem 012 - * [Sol1](project_euler/problem_012/sol1.py) - * [Sol2](project_euler/problem_012/sol2.py) - * Problem 013 - * [Sol1](project_euler/problem_013/sol1.py) - * Problem 014 - * [Sol1](project_euler/problem_014/sol1.py) - * [Sol2](project_euler/problem_014/sol2.py) - * Problem 015 - * [Sol1](project_euler/problem_015/sol1.py) - * Problem 016 - * [Sol1](project_euler/problem_016/sol1.py) - * [Sol2](project_euler/problem_016/sol2.py) - * Problem 017 - * [Sol1](project_euler/problem_017/sol1.py) - * Problem 018 - * [Solution](project_euler/problem_018/solution.py) - * Problem 019 - * [Sol1](project_euler/problem_019/sol1.py) - * Problem 020 - * [Sol1](project_euler/problem_020/sol1.py) - * [Sol2](project_euler/problem_020/sol2.py) - * [Sol3](project_euler/problem_020/sol3.py) - * [Sol4](project_euler/problem_020/sol4.py) - * Problem 021 - * [Sol1](project_euler/problem_021/sol1.py) - * Problem 022 - * [Sol1](project_euler/problem_022/sol1.py) - * [Sol2](project_euler/problem_022/sol2.py) - * Problem 023 - * [Sol1](project_euler/problem_023/sol1.py) - * Problem 024 - * [Sol1](project_euler/problem_024/sol1.py) - * Problem 025 - * [Sol1](project_euler/problem_025/sol1.py) - * [Sol2](project_euler/problem_025/sol2.py) - * [Sol3](project_euler/problem_025/sol3.py) - * Problem 026 - * [Sol1](project_euler/problem_026/sol1.py) - * Problem 027 - * [Sol1](project_euler/problem_027/sol1.py) - * Problem 028 - * [Sol1](project_euler/problem_028/sol1.py) - * Problem 029 - * [Sol1](project_euler/problem_029/sol1.py) - * Problem 030 - * [Sol1](project_euler/problem_030/sol1.py) - * Problem 031 - * [Sol1](project_euler/problem_031/sol1.py) - * [Sol2](project_euler/problem_031/sol2.py) - * Problem 032 - * [Sol32](project_euler/problem_032/sol32.py) - * Problem 033 - * [Sol1](project_euler/problem_033/sol1.py) - * Problem 034 - * [Sol1](project_euler/problem_034/sol1.py) - * Problem 035 - * [Sol1](project_euler/problem_035/sol1.py) - * Problem 036 - * [Sol1](project_euler/problem_036/sol1.py) - * Problem 037 - * [Sol1](project_euler/problem_037/sol1.py) - * Problem 038 - * [Sol1](project_euler/problem_038/sol1.py) - * Problem 039 - * [Sol1](project_euler/problem_039/sol1.py) - * Problem 040 - * [Sol1](project_euler/problem_040/sol1.py) - * Problem 041 - * [Sol1](project_euler/problem_041/sol1.py) - * Problem 042 - * [Solution42](project_euler/problem_042/solution42.py) - * Problem 043 - * [Sol1](project_euler/problem_043/sol1.py) - * Problem 044 - * [Sol1](project_euler/problem_044/sol1.py) - * Problem 045 - * [Sol1](project_euler/problem_045/sol1.py) - * Problem 046 - * [Sol1](project_euler/problem_046/sol1.py) - * Problem 047 - * [Sol1](project_euler/problem_047/sol1.py) - * Problem 048 - * [Sol1](project_euler/problem_048/sol1.py) - * Problem 049 - * [Sol1](project_euler/problem_049/sol1.py) - * Problem 050 - * [Sol1](project_euler/problem_050/sol1.py) - * Problem 051 - * [Sol1](project_euler/problem_051/sol1.py) - * Problem 052 - * [Sol1](project_euler/problem_052/sol1.py) - * Problem 053 - * [Sol1](project_euler/problem_053/sol1.py) - * Problem 054 - * [Sol1](project_euler/problem_054/sol1.py) - * [Test Poker Hand](project_euler/problem_054/test_poker_hand.py) - * Problem 055 - * [Sol1](project_euler/problem_055/sol1.py) - * Problem 056 - * [Sol1](project_euler/problem_056/sol1.py) - * Problem 057 - * [Sol1](project_euler/problem_057/sol1.py) - * Problem 058 - * [Sol1](project_euler/problem_058/sol1.py) - * Problem 059 - * [Sol1](project_euler/problem_059/sol1.py) - * Problem 062 - * [Sol1](project_euler/problem_062/sol1.py) - * Problem 063 - * [Sol1](project_euler/problem_063/sol1.py) - * Problem 064 - * [Sol1](project_euler/problem_064/sol1.py) - * Problem 065 - * [Sol1](project_euler/problem_065/sol1.py) - * Problem 067 - * [Sol1](project_euler/problem_067/sol1.py) - * [Sol2](project_euler/problem_067/sol2.py) - * Problem 068 - * [Sol1](project_euler/problem_068/sol1.py) - * Problem 069 - * [Sol1](project_euler/problem_069/sol1.py) - * Problem 070 - * [Sol1](project_euler/problem_070/sol1.py) - * Problem 071 - * [Sol1](project_euler/problem_071/sol1.py) - * Problem 072 - * [Sol1](project_euler/problem_072/sol1.py) - * [Sol2](project_euler/problem_072/sol2.py) - * Problem 073 - * [Sol1](project_euler/problem_073/sol1.py) - * Problem 074 - * [Sol1](project_euler/problem_074/sol1.py) - * [Sol2](project_euler/problem_074/sol2.py) - * Problem 075 - * [Sol1](project_euler/problem_075/sol1.py) - * Problem 076 - * [Sol1](project_euler/problem_076/sol1.py) - * Problem 077 - * [Sol1](project_euler/problem_077/sol1.py) - * Problem 078 - * [Sol1](project_euler/problem_078/sol1.py) - * Problem 079 - * [Sol1](project_euler/problem_079/sol1.py) - * Problem 080 - * [Sol1](project_euler/problem_080/sol1.py) - * Problem 081 - * [Sol1](project_euler/problem_081/sol1.py) - * Problem 082 - * [Sol1](project_euler/problem_082/sol1.py) - * Problem 085 - * [Sol1](project_euler/problem_085/sol1.py) - * Problem 086 - * [Sol1](project_euler/problem_086/sol1.py) - * Problem 087 - * [Sol1](project_euler/problem_087/sol1.py) - * Problem 089 - * [Sol1](project_euler/problem_089/sol1.py) - * Problem 091 - * [Sol1](project_euler/problem_091/sol1.py) - * Problem 092 - * [Sol1](project_euler/problem_092/sol1.py) - * Problem 094 - * [Sol1](project_euler/problem_094/sol1.py) - * Problem 097 - * [Sol1](project_euler/problem_097/sol1.py) - * Problem 099 - * [Sol1](project_euler/problem_099/sol1.py) - * Problem 100 - * [Sol1](project_euler/problem_100/sol1.py) - * Problem 101 - * [Sol1](project_euler/problem_101/sol1.py) - * Problem 102 - * [Sol1](project_euler/problem_102/sol1.py) - * Problem 104 - * [Sol1](project_euler/problem_104/sol1.py) - * Problem 107 - * [Sol1](project_euler/problem_107/sol1.py) - * Problem 109 - * [Sol1](project_euler/problem_109/sol1.py) - * Problem 112 - * [Sol1](project_euler/problem_112/sol1.py) - * Problem 113 - * [Sol1](project_euler/problem_113/sol1.py) - * Problem 114 - * [Sol1](project_euler/problem_114/sol1.py) - * Problem 115 - * [Sol1](project_euler/problem_115/sol1.py) - * Problem 116 - * [Sol1](project_euler/problem_116/sol1.py) - * Problem 117 - * [Sol1](project_euler/problem_117/sol1.py) - * Problem 119 - * [Sol1](project_euler/problem_119/sol1.py) - * Problem 120 - * [Sol1](project_euler/problem_120/sol1.py) - * Problem 121 - * [Sol1](project_euler/problem_121/sol1.py) - * Problem 123 - * [Sol1](project_euler/problem_123/sol1.py) - * Problem 125 - * [Sol1](project_euler/problem_125/sol1.py) - * Problem 129 - * [Sol1](project_euler/problem_129/sol1.py) - * Problem 131 - * [Sol1](project_euler/problem_131/sol1.py) - * Problem 135 - * [Sol1](project_euler/problem_135/sol1.py) - * Problem 144 - * [Sol1](project_euler/problem_144/sol1.py) - * Problem 145 - * [Sol1](project_euler/problem_145/sol1.py) - * Problem 173 - * [Sol1](project_euler/problem_173/sol1.py) - * Problem 174 - * [Sol1](project_euler/problem_174/sol1.py) - * Problem 180 - * [Sol1](project_euler/problem_180/sol1.py) - * Problem 187 - * [Sol1](project_euler/problem_187/sol1.py) - * Problem 188 - * [Sol1](project_euler/problem_188/sol1.py) - * Problem 191 - * [Sol1](project_euler/problem_191/sol1.py) - * Problem 203 - * [Sol1](project_euler/problem_203/sol1.py) - * Problem 205 - * [Sol1](project_euler/problem_205/sol1.py) - * Problem 206 - * [Sol1](project_euler/problem_206/sol1.py) - * Problem 207 - * [Sol1](project_euler/problem_207/sol1.py) - * Problem 234 - * [Sol1](project_euler/problem_234/sol1.py) - * Problem 301 - * [Sol1](project_euler/problem_301/sol1.py) - * Problem 493 - * [Sol1](project_euler/problem_493/sol1.py) - * Problem 551 - * [Sol1](project_euler/problem_551/sol1.py) - * Problem 587 - * [Sol1](project_euler/problem_587/sol1.py) - * Problem 686 - * [Sol1](project_euler/problem_686/sol1.py) - * Problem 800 - * [Sol1](project_euler/problem_800/sol1.py) - -## Quantum - * [Q Fourier Transform](quantum/q_fourier_transform.py) - -## Scheduling - * [First Come First Served](scheduling/first_come_first_served.py) - * [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py) - * [Job Sequence With Deadline](scheduling/job_sequence_with_deadline.py) - * [Job Sequencing With Deadline](scheduling/job_sequencing_with_deadline.py) - * [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py) - * [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py) - * [Round Robin](scheduling/round_robin.py) - * [Shortest Job First](scheduling/shortest_job_first.py) - -## Searches - * [Binary Search](searches/binary_search.py) - * [Binary Tree Traversal](searches/binary_tree_traversal.py) - * [Double Linear Search](searches/double_linear_search.py) - * [Double Linear Search Recursion](searches/double_linear_search_recursion.py) - * [Exponential Search](searches/exponential_search.py) - * [Fibonacci Search](searches/fibonacci_search.py) - * [Hill Climbing](searches/hill_climbing.py) - * [Interpolation Search](searches/interpolation_search.py) - * [Jump Search](searches/jump_search.py) - * [Linear Search](searches/linear_search.py) - * [Median Of Medians](searches/median_of_medians.py) - * [Quick Select](searches/quick_select.py) - * [Sentinel Linear Search](searches/sentinel_linear_search.py) - * [Simple Binary Search](searches/simple_binary_search.py) - * [Simulated Annealing](searches/simulated_annealing.py) - * [Tabu Search](searches/tabu_search.py) - * [Ternary Search](searches/ternary_search.py) - -## Sorts - * [Bead Sort](sorts/bead_sort.py) - * [Binary Insertion Sort](sorts/binary_insertion_sort.py) - * [Bitonic Sort](sorts/bitonic_sort.py) - * [Bogo Sort](sorts/bogo_sort.py) - * [Bubble Sort](sorts/bubble_sort.py) - * [Bucket Sort](sorts/bucket_sort.py) - * [Circle Sort](sorts/circle_sort.py) - * [Cocktail Shaker Sort](sorts/cocktail_shaker_sort.py) - * [Comb Sort](sorts/comb_sort.py) - * [Counting Sort](sorts/counting_sort.py) - * [Cycle Sort](sorts/cycle_sort.py) - * [Double Sort](sorts/double_sort.py) - * [Dutch National Flag Sort](sorts/dutch_national_flag_sort.py) - * [Exchange Sort](sorts/exchange_sort.py) - * [External Sort](sorts/external_sort.py) - * [Gnome Sort](sorts/gnome_sort.py) - * [Heap Sort](sorts/heap_sort.py) - * [Insertion Sort](sorts/insertion_sort.py) - * [Intro Sort](sorts/intro_sort.py) - * [Iterative Merge Sort](sorts/iterative_merge_sort.py) - * [Merge Insertion Sort](sorts/merge_insertion_sort.py) - * [Merge Sort](sorts/merge_sort.py) - * [Msd Radix Sort](sorts/msd_radix_sort.py) - * [Natural Sort](sorts/natural_sort.py) - * [Odd Even Sort](sorts/odd_even_sort.py) - * [Odd Even Transposition Parallel](sorts/odd_even_transposition_parallel.py) - * [Odd Even Transposition Single Threaded](sorts/odd_even_transposition_single_threaded.py) - * [Pancake Sort](sorts/pancake_sort.py) - * [Patience Sort](sorts/patience_sort.py) - * [Pigeon Sort](sorts/pigeon_sort.py) - * [Pigeonhole Sort](sorts/pigeonhole_sort.py) - * [Quick Sort](sorts/quick_sort.py) - * [Quick Sort 3 Partition](sorts/quick_sort_3_partition.py) - * [Radix Sort](sorts/radix_sort.py) - * [Recursive Insertion Sort](sorts/recursive_insertion_sort.py) - * [Recursive Mergesort Array](sorts/recursive_mergesort_array.py) - * [Recursive Quick Sort](sorts/recursive_quick_sort.py) - * [Selection Sort](sorts/selection_sort.py) - * [Shell Sort](sorts/shell_sort.py) - * [Shrink Shell Sort](sorts/shrink_shell_sort.py) - * [Slowsort](sorts/slowsort.py) - * [Stooge Sort](sorts/stooge_sort.py) - * [Strand Sort](sorts/strand_sort.py) - * [Tim Sort](sorts/tim_sort.py) - * [Topological Sort](sorts/topological_sort.py) - * [Tree Sort](sorts/tree_sort.py) - * [Unknown Sort](sorts/unknown_sort.py) - * [Wiggle Sort](sorts/wiggle_sort.py) - -## Strings - * [Aho Corasick](strings/aho_corasick.py) - * [Alternative String Arrange](strings/alternative_string_arrange.py) - * [Anagrams](strings/anagrams.py) - * [Autocomplete Using Trie](strings/autocomplete_using_trie.py) - * [Barcode Validator](strings/barcode_validator.py) - * [Bitap String Match](strings/bitap_string_match.py) - * [Boyer Moore Search](strings/boyer_moore_search.py) - * [Camel Case To Snake Case](strings/camel_case_to_snake_case.py) - * [Can String Be Rearranged As Palindrome](strings/can_string_be_rearranged_as_palindrome.py) - * [Capitalize](strings/capitalize.py) - * [Check Anagrams](strings/check_anagrams.py) - * [Count Vowels](strings/count_vowels.py) - * [Credit Card Validator](strings/credit_card_validator.py) - * [Damerau Levenshtein Distance](strings/damerau_levenshtein_distance.py) - * [Detecting English Programmatically](strings/detecting_english_programmatically.py) - * [Dna](strings/dna.py) - * [Edit Distance](strings/edit_distance.py) - * [Frequency Finder](strings/frequency_finder.py) - * [Hamming Distance](strings/hamming_distance.py) - * [Indian Phone Validator](strings/indian_phone_validator.py) - * [Is Contains Unique Chars](strings/is_contains_unique_chars.py) - * [Is Isogram](strings/is_isogram.py) - * [Is Pangram](strings/is_pangram.py) - * [Is Polish National Id](strings/is_polish_national_id.py) - * [Is Spain National Id](strings/is_spain_national_id.py) - * [Is Srilankan Phone Number](strings/is_srilankan_phone_number.py) - * [Is Valid Email Address](strings/is_valid_email_address.py) - * [Jaro Winkler](strings/jaro_winkler.py) - * [Join](strings/join.py) - * [Knuth Morris Pratt](strings/knuth_morris_pratt.py) - * [Levenshtein Distance](strings/levenshtein_distance.py) - * [Lower](strings/lower.py) - * [Manacher](strings/manacher.py) - * [Min Cost String Conversion](strings/min_cost_string_conversion.py) - * [Naive String Search](strings/naive_string_search.py) - * [Ngram](strings/ngram.py) - * [Palindrome](strings/palindrome.py) - * [Pig Latin](strings/pig_latin.py) - * [Prefix Function](strings/prefix_function.py) - * [Rabin Karp](strings/rabin_karp.py) - * [Remove Duplicate](strings/remove_duplicate.py) - * [Reverse Letters](strings/reverse_letters.py) - * [Reverse Words](strings/reverse_words.py) - * [Snake Case To Camel Pascal Case](strings/snake_case_to_camel_pascal_case.py) - * [Split](strings/split.py) - * [String Switch Case](strings/string_switch_case.py) - * [Strip](strings/strip.py) - * [Text Justification](strings/text_justification.py) - * [Title](strings/title.py) - * [Top K Frequent Words](strings/top_k_frequent_words.py) - * [Upper](strings/upper.py) - * [Wave](strings/wave.py) - * [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py) - * [Word Occurrence](strings/word_occurrence.py) - * [Word Patterns](strings/word_patterns.py) - * [Z Function](strings/z_function.py) - -## Web Programming - * [Co2 Emission](web_programming/co2_emission.py) - * [Covid Stats Via Xpath](web_programming/covid_stats_via_xpath.py) - * [Crawl Google Results](web_programming/crawl_google_results.py) - * [Crawl Google Scholar Citation](web_programming/crawl_google_scholar_citation.py) - * [Currency Converter](web_programming/currency_converter.py) - * [Current Stock Price](web_programming/current_stock_price.py) - * [Current Weather](web_programming/current_weather.py) - * [Daily Horoscope](web_programming/daily_horoscope.py) - * [Download Images From Google Query](web_programming/download_images_from_google_query.py) - * [Emails From Url](web_programming/emails_from_url.py) - * [Fetch Anime And Play](web_programming/fetch_anime_and_play.py) - * [Fetch Bbc News](web_programming/fetch_bbc_news.py) - * [Fetch Github Info](web_programming/fetch_github_info.py) - * [Fetch Jobs](web_programming/fetch_jobs.py) - * [Fetch Quotes](web_programming/fetch_quotes.py) - * [Fetch Well Rx Price](web_programming/fetch_well_rx_price.py) - * [Get Amazon Product Data](web_programming/get_amazon_product_data.py) - * [Get Imdb Top 250 Movies Csv](web_programming/get_imdb_top_250_movies_csv.py) - * [Get Ip Geolocation](web_programming/get_ip_geolocation.py) - * [Get Top Billionaires](web_programming/get_top_billionaires.py) - * [Get Top Hn Posts](web_programming/get_top_hn_posts.py) - * [Giphy](web_programming/giphy.py) - * [Instagram Crawler](web_programming/instagram_crawler.py) - * [Instagram Pic](web_programming/instagram_pic.py) - * [Instagram Video](web_programming/instagram_video.py) - * [Nasa Data](web_programming/nasa_data.py) - * [Open Google Results](web_programming/open_google_results.py) - * [Random Anime Character](web_programming/random_anime_character.py) - * [Recaptcha Verification](web_programming/recaptcha_verification.py) - * [Reddit](web_programming/reddit.py) - * [Search Books By Isbn](web_programming/search_books_by_isbn.py) - * [Slack Message](web_programming/slack_message.py) - * [Test Fetch Github Info](web_programming/test_fetch_github_info.py) - * [World Covid19 Stats](web_programming/world_covid19_stats.py) diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 2897d02e2a01..000000000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016-2022 TheAlgorithms and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index d8eba4e016fa..000000000000 --- a/README.md +++ /dev/null @@ -1,49 +0,0 @@ -<div align="center"> -<!-- Title: --> - <a href="https://github.com/TheAlgorithms/"> - <img src="https://raw.githubusercontent.com/TheAlgorithms/website/1cd824df116b27029f17c2d1b42d81731f28a920/public/logo.svg" height="100"> - </a> - <h1><a href="https://github.com/TheAlgorithms/">The Algorithms</a> - Python</h1> -<!-- Labels: --> - <!-- First row: --> - <a href="https://gitpod.io/#https://github.com/TheAlgorithms/Python"> - <img src="https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod&style=flat-square" height="20" alt="Gitpod Ready-to-Code"> - </a> - <a href="https://github.com/TheAlgorithms/Python/blob/master/CONTRIBUTING.md"> - <img src="https://img.shields.io/static/v1.svg?label=Contributions&message=Welcome&color=0059b3&style=flat-square" height="20" alt="Contributions Welcome"> - </a> - <img src="https://img.shields.io/github/repo-size/TheAlgorithms/Python.svg?label=Repo%20size&style=flat-square" height="20"> - <a href="https://the-algorithms.com/discord"> - <img src="https://img.shields.io/discord/808045925556682782.svg?logo=discord&colorB=7289DA&style=flat-square" height="20" alt="Discord chat"> - </a> - <a href="https://gitter.im/TheAlgorithms/community"> - <img src="https://img.shields.io/badge/Chat-Gitter-ff69b4.svg?label=Chat&logo=gitter&style=flat-square" height="20" alt="Gitter chat"> - </a> - <!-- Second row: --> - <br> - <a href="https://github.com/TheAlgorithms/Python/actions"> - <img src="https://img.shields.io/github/actions/workflow/status/TheAlgorithms/Python/build.yml?branch=master&label=CI&logo=github&style=flat-square" height="20" alt="GitHub Workflow Status"> - </a> - <a href="https://github.com/pre-commit/pre-commit"> - <img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=flat-square" height="20" alt="pre-commit"> - </a> - <a href="https://github.com/psf/black"> - <img src="https://img.shields.io/static/v1?label=code%20style&message=black&color=black&style=flat-square" height="20" alt="code style: black"> - </a> -<!-- Short description: --> - <h3>All algorithms implemented in Python - for education</h3> -</div> - -Implementations are for learning purposes only. They may be less efficient than the implementations in the Python standard library. Use them at your discretion. - -## Getting Started - -Read through our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. - -## Community Channels - -We are on [Discord](https://the-algorithms.com/discord) and [Gitter](https://gitter.im/TheAlgorithms/community)! Community channels are a great way for you to ask questions and get help. Please join us! - -## List of Algorithms - -See our [directory](DIRECTORY.md) for easier navigation and a better overview of the project. diff --git a/audio_filters/README.md b/audio_filters/README.md deleted file mode 100644 index 4419bd8bdbf9..000000000000 --- a/audio_filters/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Audio Filter - -Audio filters work on the frequency of an audio signal to attenuate unwanted frequency and amplify wanted ones. -They are used within anything related to sound, whether it is radio communication or a hi-fi system. - -* <https://www.masteringbox.com/filter-types/> -* <http://ethanwiner.com/filters.html> -* <https://en.wikipedia.org/wiki/Audio_filter> -* <https://en.wikipedia.org/wiki/Electronic_filter> diff --git a/audio_filters/__init__.py b/audio_filters/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/audio_filters/butterworth_filter.py b/audio_filters/butterworth_filter.py deleted file mode 100644 index 4e6ea1b18fb4..000000000000 --- a/audio_filters/butterworth_filter.py +++ /dev/null @@ -1,234 +0,0 @@ -from math import cos, sin, sqrt, tau - -from audio_filters.iir_filter import IIRFilter - -""" -Create 2nd-order IIR filters with Butterworth design. - -Code based on https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html -Alternatively you can use scipy.signal.butter, which should yield the same results. -""" - - -def make_lowpass( - frequency: int, - samplerate: int, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates a low-pass filter - - >>> filter = make_lowpass(1000, 48000) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.004277569313094809, - 0.008555138626189618, 0.004277569313094809] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - - b0 = (1 - _cos) / 2 - b1 = 1 - _cos - - a0 = 1 + alpha - a1 = -2 * _cos - a2 = 1 - alpha - - filt = IIRFilter(2) - filt.set_coefficients([a0, a1, a2], [b0, b1, b0]) - return filt - - -def make_highpass( - frequency: int, - samplerate: int, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates a high-pass filter - - >>> filter = make_highpass(1000, 48000) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.9957224306869052, - -1.9914448613738105, 0.9957224306869052] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - - b0 = (1 + _cos) / 2 - b1 = -1 - _cos - - a0 = 1 + alpha - a1 = -2 * _cos - a2 = 1 - alpha - - filt = IIRFilter(2) - filt.set_coefficients([a0, a1, a2], [b0, b1, b0]) - return filt - - -def make_bandpass( - frequency: int, - samplerate: int, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates a band-pass filter - - >>> filter = make_bandpass(1000, 48000) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.06526309611002579, - 0, -0.06526309611002579] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - - b0 = _sin / 2 - b1 = 0 - b2 = -b0 - - a0 = 1 + alpha - a1 = -2 * _cos - a2 = 1 - alpha - - filt = IIRFilter(2) - filt.set_coefficients([a0, a1, a2], [b0, b1, b2]) - return filt - - -def make_allpass( - frequency: int, - samplerate: int, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates an all-pass filter - - >>> filter = make_allpass(1000, 48000) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.9077040443587427, - -1.9828897227476208, 1.0922959556412573] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - - b0 = 1 - alpha - b1 = -2 * _cos - b2 = 1 + alpha - - filt = IIRFilter(2) - filt.set_coefficients([b2, b1, b0], [b0, b1, b2]) - return filt - - -def make_peak( - frequency: int, - samplerate: int, - gain_db: float, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates a peak filter - - >>> filter = make_peak(1000, 48000, 6) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [1.0653405327119334, -1.9828897227476208, 0.9346594672880666, 1.1303715025601122, - -1.9828897227476208, 0.8696284974398878] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - big_a = 10 ** (gain_db / 40) - - b0 = 1 + alpha * big_a - b1 = -2 * _cos - b2 = 1 - alpha * big_a - a0 = 1 + alpha / big_a - a1 = -2 * _cos - a2 = 1 - alpha / big_a - - filt = IIRFilter(2) - filt.set_coefficients([a0, a1, a2], [b0, b1, b2]) - return filt - - -def make_lowshelf( - frequency: int, - samplerate: int, - gain_db: float, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates a low-shelf filter - - >>> filter = make_lowshelf(1000, 48000, 6) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [3.0409336710888786, -5.608870992220748, 2.602157875636628, 3.139954022810743, - -5.591841778072785, 2.5201667380627257] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - big_a = 10 ** (gain_db / 40) - pmc = (big_a + 1) - (big_a - 1) * _cos - ppmc = (big_a + 1) + (big_a - 1) * _cos - mpc = (big_a - 1) - (big_a + 1) * _cos - pmpc = (big_a - 1) + (big_a + 1) * _cos - aa2 = 2 * sqrt(big_a) * alpha - - b0 = big_a * (pmc + aa2) - b1 = 2 * big_a * mpc - b2 = big_a * (pmc - aa2) - a0 = ppmc + aa2 - a1 = -2 * pmpc - a2 = ppmc - aa2 - - filt = IIRFilter(2) - filt.set_coefficients([a0, a1, a2], [b0, b1, b2]) - return filt - - -def make_highshelf( - frequency: int, - samplerate: int, - gain_db: float, - q_factor: float = 1 / sqrt(2), -) -> IIRFilter: - """ - Creates a high-shelf filter - - >>> filter = make_highshelf(1000, 48000, 6) - >>> filter.a_coeffs + filter.b_coeffs # doctest: +NORMALIZE_WHITESPACE - [2.2229172136088806, -3.9587208137297303, 1.7841414181566304, 4.295432981120543, - -7.922740859457287, 3.6756456963725253] - """ - w0 = tau * frequency / samplerate - _sin = sin(w0) - _cos = cos(w0) - alpha = _sin / (2 * q_factor) - big_a = 10 ** (gain_db / 40) - pmc = (big_a + 1) - (big_a - 1) * _cos - ppmc = (big_a + 1) + (big_a - 1) * _cos - mpc = (big_a - 1) - (big_a + 1) * _cos - pmpc = (big_a - 1) + (big_a + 1) * _cos - aa2 = 2 * sqrt(big_a) * alpha - - b0 = big_a * (ppmc + aa2) - b1 = -2 * big_a * pmpc - b2 = big_a * (ppmc - aa2) - a0 = pmc + aa2 - a1 = 2 * mpc - a2 = pmc - aa2 - - filt = IIRFilter(2) - filt.set_coefficients([a0, a1, a2], [b0, b1, b2]) - return filt diff --git a/audio_filters/equal_loudness_filter.py.broken.txt b/audio_filters/equal_loudness_filter.py.broken.txt deleted file mode 100644 index 88cba8533cf7..000000000000 --- a/audio_filters/equal_loudness_filter.py.broken.txt +++ /dev/null @@ -1,61 +0,0 @@ -from json import loads -from pathlib import Path - -import numpy as np -from yulewalker import yulewalk - -from audio_filters.butterworth_filter import make_highpass -from audio_filters.iir_filter import IIRFilter - -data = loads((Path(__file__).resolve().parent / "loudness_curve.json").read_text()) - - -class EqualLoudnessFilter: - r""" - An equal-loudness filter which compensates for the human ear's non-linear response - to sound. - This filter corrects this by cascading a yulewalk filter and a butterworth filter. - - Designed for use with samplerate of 44.1kHz and above. If you're using a lower - samplerate, use with caution. - - Code based on matlab implementation at https://bit.ly/3eqh2HU - (url shortened for ruff) - - Target curve: https://i.imgur.com/3g2VfaM.png - Yulewalk response: https://i.imgur.com/J9LnJ4C.png - Butterworth and overall response: https://i.imgur.com/3g2VfaM.png - - Images and original matlab implementation by David Robinson, 2001 - """ - - def __init__(self, samplerate: int = 44100) -> None: - self.yulewalk_filter = IIRFilter(10) - self.butterworth_filter = make_highpass(150, samplerate) - - # pad the data to nyquist - curve_freqs = np.array(data["frequencies"] + [max(20000.0, samplerate / 2)]) - curve_gains = np.array(data["gains"] + [140]) - - # Convert to angular frequency - freqs_normalized = curve_freqs / samplerate * 2 - # Invert the curve and normalize to 0dB - gains_normalized = np.power(10, (np.min(curve_gains) - curve_gains) / 20) - - # Scipy's `yulewalk` function is a stub, so we're using the - # `yulewalker` library instead. - # This function computes the coefficients using a least-squares - # fit to the specified curve. - ya, yb = yulewalk(10, freqs_normalized, gains_normalized) - self.yulewalk_filter.set_coefficients(ya, yb) - - def process(self, sample: float) -> float: - """ - Process a single sample through both filters - - >>> filt = EqualLoudnessFilter() - >>> filt.process(0.0) - 0.0 - """ - tmp = self.yulewalk_filter.process(sample) - return self.butterworth_filter.process(tmp) diff --git a/audio_filters/iir_filter.py b/audio_filters/iir_filter.py deleted file mode 100644 index f3c1ad43b001..000000000000 --- a/audio_filters/iir_filter.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import annotations - - -class IIRFilter: - r""" - N-Order IIR filter - Assumes working with float samples normalized on [-1, 1] - - --- - - Implementation details: - Based on the 2nd-order function from - https://en.wikipedia.org/wiki/Digital_biquad_filter, - this generalized N-order function was made. - - Using the following transfer function - H(z)=\frac{b_{0}+b_{1}z^{-1}+b_{2}z^{-2}+...+b_{k}z^{-k}}{a_{0}+a_{1}z^{-1}+a_{2}z^{-2}+...+a_{k}z^{-k}} - we can rewrite this to - y[n]={\frac{1}{a_{0}}}\left(\left(b_{0}x[n]+b_{1}x[n-1]+b_{2}x[n-2]+...+b_{k}x[n-k]\right)-\left(a_{1}y[n-1]+a_{2}y[n-2]+...+a_{k}y[n-k]\right)\right) - """ - - def __init__(self, order: int) -> None: - self.order = order - - # a_{0} ... a_{k} - self.a_coeffs = [1.0] + [0.0] * order - # b_{0} ... b_{k} - self.b_coeffs = [1.0] + [0.0] * order - - # x[n-1] ... x[n-k] - self.input_history = [0.0] * self.order - # y[n-1] ... y[n-k] - self.output_history = [0.0] * self.order - - def set_coefficients(self, a_coeffs: list[float], b_coeffs: list[float]) -> None: - """ - Set the coefficients for the IIR filter. These should both be of size order + 1. - a_0 may be left out, and it will use 1.0 as default value. - - This method works well with scipy's filter design functions - >>> # Make a 2nd-order 1000Hz butterworth lowpass filter - >>> import scipy.signal - >>> b_coeffs, a_coeffs = scipy.signal.butter(2, 1000, - ... btype='lowpass', - ... fs=48000) - >>> filt = IIRFilter(2) - >>> filt.set_coefficients(a_coeffs, b_coeffs) - """ - if len(a_coeffs) < self.order: - a_coeffs = [1.0, *a_coeffs] - - if len(a_coeffs) != self.order + 1: - msg = ( - f"Expected a_coeffs to have {self.order + 1} elements " - f"for {self.order}-order filter, got {len(a_coeffs)}" - ) - raise ValueError(msg) - - if len(b_coeffs) != self.order + 1: - msg = ( - f"Expected b_coeffs to have {self.order + 1} elements " - f"for {self.order}-order filter, got {len(a_coeffs)}" - ) - raise ValueError(msg) - - self.a_coeffs = a_coeffs - self.b_coeffs = b_coeffs - - def process(self, sample: float) -> float: - """ - Calculate y[n] - - >>> filt = IIRFilter(2) - >>> filt.process(0) - 0.0 - """ - result = 0.0 - - # Start at index 1 and do index 0 at the end. - for i in range(1, self.order + 1): - result += ( - self.b_coeffs[i] * self.input_history[i - 1] - - self.a_coeffs[i] * self.output_history[i - 1] - ) - - result = (result + self.b_coeffs[0] * sample) / self.a_coeffs[0] - - self.input_history[1:] = self.input_history[:-1] - self.output_history[1:] = self.output_history[:-1] - - self.input_history[0] = sample - self.output_history[0] = result - - return result diff --git a/audio_filters/loudness_curve.json b/audio_filters/loudness_curve.json deleted file mode 100644 index fc066a0810fc..000000000000 --- a/audio_filters/loudness_curve.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_comment": "The following is a representative average of the Equal Loudness Contours as measured by Robinson and Dadson, 1956", - "_doi": "10.1088/0508-3443/7/5/302", - "frequencies": [ - 0, - 20, - 30, - 40, - 50, - 60, - 70, - 80, - 90, - 100, - 200, - 300, - 400, - 500, - 600, - 700, - 800, - 900, - 1000, - 1500, - 2000, - 2500, - 3000, - 3700, - 4000, - 5000, - 6000, - 7000, - 8000, - 9000, - 10000, - 12000, - 15000, - 20000 - ], - "gains": [ - 120, - 113, - 103, - 97, - 93, - 91, - 89, - 87, - 86, - 85, - 78, - 76, - 76, - 76, - 76, - 77, - 78, - 79.5, - 80, - 79, - 77, - 74, - 71.5, - 70, - 70.5, - 74, - 79, - 84, - 86, - 86, - 85, - 95, - 110, - 125 - ] -} diff --git a/audio_filters/show_response.py b/audio_filters/show_response.py deleted file mode 100644 index f9c9537c047c..000000000000 --- a/audio_filters/show_response.py +++ /dev/null @@ -1,95 +0,0 @@ -from __future__ import annotations - -from abc import abstractmethod -from math import pi -from typing import Protocol - -import matplotlib.pyplot as plt -import numpy as np - - -class FilterType(Protocol): - @abstractmethod - def process(self, sample: float) -> float: - """ - Calculate y[n] - - >>> issubclass(FilterType, Protocol) - True - """ - - -def get_bounds( - fft_results: np.ndarray, samplerate: int -) -> tuple[int | float, int | float]: - """ - Get bounds for printing fft results - - >>> import numpy - >>> array = numpy.linspace(-20.0, 20.0, 1000) - >>> get_bounds(array, 1000) - (-20, 20) - """ - lowest = min([-20, np.min(fft_results[1 : samplerate // 2 - 1])]) - highest = max([20, np.max(fft_results[1 : samplerate // 2 - 1])]) - return lowest, highest - - -def show_frequency_response(filter_type: FilterType, samplerate: int) -> None: - """ - Show frequency response of a filter - - >>> from audio_filters.iir_filter import IIRFilter - >>> filt = IIRFilter(4) - >>> show_frequency_response(filt, 48000) - """ - - size = 512 - inputs = [1] + [0] * (size - 1) - outputs = [filter_type.process(item) for item in inputs] - - filler = [0] * (samplerate - size) # zero-padding - outputs += filler - fft_out = np.abs(np.fft.fft(outputs)) - fft_db = 20 * np.log10(fft_out) - - # Frequencies on log scale from 24 to nyquist frequency - plt.xlim(24, samplerate / 2 - 1) - plt.xlabel("Frequency (Hz)") - plt.xscale("log") - - # Display within reasonable bounds - bounds = get_bounds(fft_db, samplerate) - plt.ylim(max([-80, bounds[0]]), min([80, bounds[1]])) - plt.ylabel("Gain (dB)") - - plt.plot(fft_db) - plt.show() - - -def show_phase_response(filter_type: FilterType, samplerate: int) -> None: - """ - Show phase response of a filter - - >>> from audio_filters.iir_filter import IIRFilter - >>> filt = IIRFilter(4) - >>> show_phase_response(filt, 48000) - """ - - size = 512 - inputs = [1] + [0] * (size - 1) - outputs = [filter_type.process(item) for item in inputs] - - filler = [0] * (samplerate - size) # zero-padding - outputs += filler - fft_out = np.angle(np.fft.fft(outputs)) - - # Frequencies on log scale from 24 to nyquist frequency - plt.xlim(24, samplerate / 2 - 1) - plt.xlabel("Frequency (Hz)") - plt.xscale("log") - - plt.ylim(-2 * pi, 2 * pi) - plt.ylabel("Phase shift (Radians)") - plt.plot(np.unwrap(fft_out, -2 * pi)) - plt.show() diff --git a/backtracking/README.md b/backtracking/README.md deleted file mode 100644 index d4975dfb5ad7..000000000000 --- a/backtracking/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Backtracking - -Backtracking is a way to speed up the search process by removing candidates when they can't be the solution of a problem. - -* <https://en.wikipedia.org/wiki/Backtracking> -* <https://en.wikipedia.org/wiki/Decision_tree_pruning> -* <https://medium.com/@priyankmistry1999/backtracking-sudoku-6e4439e4825c> -* <https://www.geeksforgeeks.org/sudoku-backtracking-7/> diff --git a/backtracking/__init__.py b/backtracking/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/backtracking/all_combinations.py b/backtracking/all_combinations.py deleted file mode 100644 index 390decf3a05b..000000000000 --- a/backtracking/all_combinations.py +++ /dev/null @@ -1,82 +0,0 @@ -""" -In this problem, we want to determine all possible combinations of k -numbers out of 1 ... n. We use backtracking to solve this problem. - -Time complexity: O(C(n,k)) which is O(n choose k) = O((n!/(k! * (n - k)!))), -""" - -from __future__ import annotations - -from itertools import combinations - - -def combination_lists(n: int, k: int) -> list[list[int]]: - """ - >>> combination_lists(n=4, k=2) - [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] - """ - return [list(x) for x in combinations(range(1, n + 1), k)] - - -def generate_all_combinations(n: int, k: int) -> list[list[int]]: - """ - >>> generate_all_combinations(n=4, k=2) - [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]] - >>> generate_all_combinations(n=0, k=0) - [[]] - >>> generate_all_combinations(n=10, k=-1) - Traceback (most recent call last): - ... - ValueError: k must not be negative - >>> generate_all_combinations(n=-1, k=10) - Traceback (most recent call last): - ... - ValueError: n must not be negative - >>> generate_all_combinations(n=5, k=4) - [[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]] - >>> from itertools import combinations - >>> all(generate_all_combinations(n, k) == combination_lists(n, k) - ... for n in range(1, 6) for k in range(1, 6)) - True - """ - if k < 0: - raise ValueError("k must not be negative") - if n < 0: - raise ValueError("n must not be negative") - - result: list[list[int]] = [] - create_all_state(1, n, k, [], result) - return result - - -def create_all_state( - increment: int, - total_number: int, - level: int, - current_list: list[int], - total_list: list[list[int]], -) -> None: - if level == 0: - total_list.append(current_list[:]) - return - - for i in range(increment, total_number - level + 2): - current_list.append(i) - create_all_state(i + 1, total_number, level - 1, current_list, total_list) - current_list.pop() - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(generate_all_combinations(n=4, k=2)) - tests = ((n, k) for n in range(1, 5) for k in range(1, 5)) - for n, k in tests: - print(n, k, generate_all_combinations(n, k) == combination_lists(n, k)) - - print("Benchmark:") - from timeit import timeit - - for func in ("combination_lists", "generate_all_combinations"): - print(f"{func:>25}(): {timeit(f'{func}(n=4, k = 2)', globals=globals())}") diff --git a/backtracking/all_permutations.py b/backtracking/all_permutations.py deleted file mode 100644 index f376e6fa0945..000000000000 --- a/backtracking/all_permutations.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -In this problem, we want to determine all possible permutations -of the given sequence. We use backtracking to solve this problem. - -Time complexity: O(n! * n), -where n denotes the length of the given sequence. -""" - -from __future__ import annotations - - -def generate_all_permutations(sequence: list[int | str]) -> None: - create_state_space_tree(sequence, [], 0, [0 for i in range(len(sequence))]) - - -def create_state_space_tree( - sequence: list[int | str], - current_sequence: list[int | str], - index: int, - index_used: list[int], -) -> None: - """ - Creates a state space tree to iterate through each branch using DFS. - We know that each state has exactly len(sequence) - index children. - It terminates when it reaches the end of the given sequence. - - :param sequence: The input sequence for which permutations are generated. - :param current_sequence: The current permutation being built. - :param index: The current index in the sequence. - :param index_used: list to track which elements are used in permutation. - - Example 1: - >>> sequence = [1, 2, 3] - >>> current_sequence = [] - >>> index_used = [False, False, False] - >>> create_state_space_tree(sequence, current_sequence, 0, index_used) - [1, 2, 3] - [1, 3, 2] - [2, 1, 3] - [2, 3, 1] - [3, 1, 2] - [3, 2, 1] - - Example 2: - >>> sequence = ["A", "B", "C"] - >>> current_sequence = [] - >>> index_used = [False, False, False] - >>> create_state_space_tree(sequence, current_sequence, 0, index_used) - ['A', 'B', 'C'] - ['A', 'C', 'B'] - ['B', 'A', 'C'] - ['B', 'C', 'A'] - ['C', 'A', 'B'] - ['C', 'B', 'A'] - - Example 3: - >>> sequence = [1] - >>> current_sequence = [] - >>> index_used = [False] - >>> create_state_space_tree(sequence, current_sequence, 0, index_used) - [1] - """ - - if index == len(sequence): - print(current_sequence) - return - - for i in range(len(sequence)): - if not index_used[i]: - current_sequence.append(sequence[i]) - index_used[i] = True - create_state_space_tree(sequence, current_sequence, index + 1, index_used) - current_sequence.pop() - index_used[i] = False - - -""" -remove the comment to take an input from the user - -print("Enter the elements") -sequence = list(map(int, input().split())) -""" - -sequence: list[int | str] = [3, 1, 2, 4] -generate_all_permutations(sequence) - -sequence_2: list[int | str] = ["A", "B", "C"] -generate_all_permutations(sequence_2) diff --git a/backtracking/all_subsequences.py b/backtracking/all_subsequences.py deleted file mode 100644 index 18696054eb7e..000000000000 --- a/backtracking/all_subsequences.py +++ /dev/null @@ -1,93 +0,0 @@ -""" -In this problem, we want to determine all possible subsequences -of the given sequence. We use backtracking to solve this problem. - -Time complexity: O(2^n), -where n denotes the length of the given sequence. -""" - -from __future__ import annotations - -from typing import Any - - -def generate_all_subsequences(sequence: list[Any]) -> None: - create_state_space_tree(sequence, [], 0) - - -def create_state_space_tree( - sequence: list[Any], current_subsequence: list[Any], index: int -) -> None: - """ - Creates a state space tree to iterate through each branch using DFS. - We know that each state has exactly two children. - It terminates when it reaches the end of the given sequence. - - :param sequence: The input sequence for which subsequences are generated. - :param current_subsequence: The current subsequence being built. - :param index: The current index in the sequence. - - Example: - >>> sequence = [3, 2, 1] - >>> current_subsequence = [] - >>> create_state_space_tree(sequence, current_subsequence, 0) - [] - [1] - [2] - [2, 1] - [3] - [3, 1] - [3, 2] - [3, 2, 1] - - >>> sequence = ["A", "B"] - >>> current_subsequence = [] - >>> create_state_space_tree(sequence, current_subsequence, 0) - [] - ['B'] - ['A'] - ['A', 'B'] - - >>> sequence = [] - >>> current_subsequence = [] - >>> create_state_space_tree(sequence, current_subsequence, 0) - [] - - >>> sequence = [1, 2, 3, 4] - >>> current_subsequence = [] - >>> create_state_space_tree(sequence, current_subsequence, 0) - [] - [4] - [3] - [3, 4] - [2] - [2, 4] - [2, 3] - [2, 3, 4] - [1] - [1, 4] - [1, 3] - [1, 3, 4] - [1, 2] - [1, 2, 4] - [1, 2, 3] - [1, 2, 3, 4] - """ - - if index == len(sequence): - print(current_subsequence) - return - - create_state_space_tree(sequence, current_subsequence, index + 1) - current_subsequence.append(sequence[index]) - create_state_space_tree(sequence, current_subsequence, index + 1) - current_subsequence.pop() - - -if __name__ == "__main__": - seq: list[Any] = [1, 2, 3] - generate_all_subsequences(seq) - - seq.clear() - seq.extend(["A", "B", "C"]) - generate_all_subsequences(seq) diff --git a/backtracking/coloring.py b/backtracking/coloring.py deleted file mode 100644 index f10cdbcf9d26..000000000000 --- a/backtracking/coloring.py +++ /dev/null @@ -1,113 +0,0 @@ -""" -Graph Coloring also called "m coloring problem" -consists of coloring a given graph with at most m colors -such that no adjacent vertices are assigned the same color - -Wikipedia: https://en.wikipedia.org/wiki/Graph_coloring -""" - - -def valid_coloring( - neighbours: list[int], colored_vertices: list[int], color: int -) -> bool: - """ - For each neighbour check if the coloring constraint is satisfied - If any of the neighbours fail the constraint return False - If all neighbours validate the constraint return True - - >>> neighbours = [0,1,0,1,0] - >>> colored_vertices = [0, 2, 1, 2, 0] - - >>> color = 1 - >>> valid_coloring(neighbours, colored_vertices, color) - True - - >>> color = 2 - >>> valid_coloring(neighbours, colored_vertices, color) - False - """ - # Does any neighbour not satisfy the constraints - return not any( - neighbour == 1 and colored_vertices[i] == color - for i, neighbour in enumerate(neighbours) - ) - - -def util_color( - graph: list[list[int]], max_colors: int, colored_vertices: list[int], index: int -) -> bool: - """ - Pseudo-Code - - Base Case: - 1. Check if coloring is complete - 1.1 If complete return True (meaning that we successfully colored the graph) - - Recursive Step: - 2. Iterates over each color: - Check if the current coloring is valid: - 2.1. Color given vertex - 2.2. Do recursive call, check if this coloring leads to a solution - 2.4. if current coloring leads to a solution return - 2.5. Uncolor given vertex - - >>> graph = [[0, 1, 0, 0, 0], - ... [1, 0, 1, 0, 1], - ... [0, 1, 0, 1, 0], - ... [0, 1, 1, 0, 0], - ... [0, 1, 0, 0, 0]] - >>> max_colors = 3 - >>> colored_vertices = [0, 1, 0, 0, 0] - >>> index = 3 - - >>> util_color(graph, max_colors, colored_vertices, index) - True - - >>> max_colors = 2 - >>> util_color(graph, max_colors, colored_vertices, index) - False - """ - - # Base Case - if index == len(graph): - return True - - # Recursive Step - for i in range(max_colors): - if valid_coloring(graph[index], colored_vertices, i): - # Color current vertex - colored_vertices[index] = i - # Validate coloring - if util_color(graph, max_colors, colored_vertices, index + 1): - return True - # Backtrack - colored_vertices[index] = -1 - return False - - -def color(graph: list[list[int]], max_colors: int) -> list[int]: - """ - Wrapper function to call subroutine called util_color - which will either return True or False. - If True is returned colored_vertices list is filled with correct colorings - - >>> graph = [[0, 1, 0, 0, 0], - ... [1, 0, 1, 0, 1], - ... [0, 1, 0, 1, 0], - ... [0, 1, 1, 0, 0], - ... [0, 1, 0, 0, 0]] - - >>> max_colors = 3 - >>> color(graph, max_colors) - [0, 1, 0, 2, 0] - - >>> max_colors = 2 - >>> color(graph, max_colors) - [] - """ - colored_vertices = [-1] * len(graph) - - if util_color(graph, max_colors, colored_vertices, 0): - return colored_vertices - - return [] diff --git a/backtracking/combination_sum.py b/backtracking/combination_sum.py deleted file mode 100644 index 3c6ed81f44f0..000000000000 --- a/backtracking/combination_sum.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -In the Combination Sum problem, we are given a list consisting of distinct integers. -We need to find all the combinations whose sum equals to target given. -We can use an element more than one. - -Time complexity(Average Case): O(n!) - -Constraints: -1 <= candidates.length <= 30 -2 <= candidates[i] <= 40 -All elements of candidates are distinct. -1 <= target <= 40 -""" - - -def backtrack( - candidates: list, path: list, answer: list, target: int, previous_index: int -) -> None: - """ - A recursive function that searches for possible combinations. Backtracks in case - of a bigger current combination value than the target value. - - Parameters - ---------- - previous_index: Last index from the previous search - target: The value we need to obtain by summing our integers in the path list. - answer: A list of possible combinations - path: Current combination - candidates: A list of integers we can use. - """ - if target == 0: - answer.append(path.copy()) - else: - for index in range(previous_index, len(candidates)): - if target >= candidates[index]: - path.append(candidates[index]) - backtrack(candidates, path, answer, target - candidates[index], index) - path.pop(len(path) - 1) - - -def combination_sum(candidates: list, target: int) -> list: - """ - >>> combination_sum([2, 3, 5], 8) - [[2, 2, 2, 2], [2, 3, 3], [3, 5]] - >>> combination_sum([2, 3, 6, 7], 7) - [[2, 2, 3], [7]] - >>> combination_sum([-8, 2.3, 0], 1) - Traceback (most recent call last): - ... - RecursionError: maximum recursion depth exceeded - """ - path = [] # type: list[int] - answer = [] # type: list[int] - backtrack(candidates, path, answer, target, 0) - return answer - - -def main() -> None: - print(combination_sum([-8, 2.3, 0], 1)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/backtracking/crossword_puzzle_solver.py b/backtracking/crossword_puzzle_solver.py deleted file mode 100644 index e702c7e52153..000000000000 --- a/backtracking/crossword_puzzle_solver.py +++ /dev/null @@ -1,131 +0,0 @@ -# https://www.geeksforgeeks.org/solve-crossword-puzzle/ - - -def is_valid( - puzzle: list[list[str]], word: str, row: int, col: int, vertical: bool -) -> bool: - """ - Check if a word can be placed at the given position. - - >>> puzzle = [ - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''] - ... ] - >>> is_valid(puzzle, 'word', 0, 0, True) - True - >>> puzzle = [ - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''] - ... ] - >>> is_valid(puzzle, 'word', 0, 0, False) - True - """ - for i in range(len(word)): - if vertical: - if row + i >= len(puzzle) or puzzle[row + i][col] != "": - return False - elif col + i >= len(puzzle[0]) or puzzle[row][col + i] != "": - return False - return True - - -def place_word( - puzzle: list[list[str]], word: str, row: int, col: int, vertical: bool -) -> None: - """ - Place a word at the given position. - - >>> puzzle = [ - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''] - ... ] - >>> place_word(puzzle, 'word', 0, 0, True) - >>> puzzle - [['w', '', '', ''], ['o', '', '', ''], ['r', '', '', ''], ['d', '', '', '']] - """ - for i, char in enumerate(word): - if vertical: - puzzle[row + i][col] = char - else: - puzzle[row][col + i] = char - - -def remove_word( - puzzle: list[list[str]], word: str, row: int, col: int, vertical: bool -) -> None: - """ - Remove a word from the given position. - - >>> puzzle = [ - ... ['w', '', '', ''], - ... ['o', '', '', ''], - ... ['r', '', '', ''], - ... ['d', '', '', ''] - ... ] - >>> remove_word(puzzle, 'word', 0, 0, True) - >>> puzzle - [['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', '']] - """ - for i in range(len(word)): - if vertical: - puzzle[row + i][col] = "" - else: - puzzle[row][col + i] = "" - - -def solve_crossword(puzzle: list[list[str]], words: list[str]) -> bool: - """ - Solve the crossword puzzle using backtracking. - - >>> puzzle = [ - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''] - ... ] - - >>> words = ['word', 'four', 'more', 'last'] - >>> solve_crossword(puzzle, words) - True - >>> puzzle = [ - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''], - ... ['', '', '', ''] - ... ] - >>> words = ['word', 'four', 'more', 'paragraphs'] - >>> solve_crossword(puzzle, words) - False - """ - for row in range(len(puzzle)): - for col in range(len(puzzle[0])): - if puzzle[row][col] == "": - for word in words: - for vertical in [True, False]: - if is_valid(puzzle, word, row, col, vertical): - place_word(puzzle, word, row, col, vertical) - words.remove(word) - if solve_crossword(puzzle, words): - return True - words.append(word) - remove_word(puzzle, word, row, col, vertical) - return False - return True - - -if __name__ == "__main__": - PUZZLE = [[""] * 3 for _ in range(3)] - WORDS = ["cat", "dog", "car"] - - if solve_crossword(PUZZLE, WORDS): - print("Solution found:") - for row in PUZZLE: - print(" ".join(row)) - else: - print("No solution found:") diff --git a/backtracking/generate_parentheses.py b/backtracking/generate_parentheses.py deleted file mode 100644 index 18c21e2a9b51..000000000000 --- a/backtracking/generate_parentheses.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -author: Aayush Soni -Given n pairs of parentheses, write a function to generate all -combinations of well-formed parentheses. -Input: n = 2 -Output: ["(())","()()"] -Leetcode link: https://leetcode.com/problems/generate-parentheses/description/ -""" - - -def backtrack( - partial: str, open_count: int, close_count: int, n: int, result: list[str] -) -> None: - """ - Generate valid combinations of balanced parentheses using recursion. - - :param partial: A string representing the current combination. - :param open_count: An integer representing the count of open parentheses. - :param close_count: An integer representing the count of close parentheses. - :param n: An integer representing the total number of pairs. - :param result: A list to store valid combinations. - :return: None - - This function uses recursion to explore all possible combinations, - ensuring that at each step, the parentheses remain balanced. - - Example: - >>> result = [] - >>> backtrack("", 0, 0, 2, result) - >>> result - ['(())', '()()'] - """ - if len(partial) == 2 * n: - # When the combination is complete, add it to the result. - result.append(partial) - return - - if open_count < n: - # If we can add an open parenthesis, do so, and recurse. - backtrack(partial + "(", open_count + 1, close_count, n, result) - - if close_count < open_count: - # If we can add a close parenthesis (it won't make the combination invalid), - # do so, and recurse. - backtrack(partial + ")", open_count, close_count + 1, n, result) - - -def generate_parenthesis(n: int) -> list[str]: - """ - Generate valid combinations of balanced parentheses for a given n. - - :param n: An integer representing the number of pairs of parentheses. - :return: A list of strings with valid combinations. - - This function uses a recursive approach to generate the combinations. - - Time Complexity: O(2^(2n)) - In the worst case, we have 2^(2n) combinations. - Space Complexity: O(n) - where 'n' is the number of pairs. - - Example 1: - >>> generate_parenthesis(3) - ['((()))', '(()())', '(())()', '()(())', '()()()'] - - Example 2: - >>> generate_parenthesis(1) - ['()'] - """ - - result: list[str] = [] - backtrack("", 0, 0, n, result) - return result - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/backtracking/hamiltonian_cycle.py b/backtracking/hamiltonian_cycle.py deleted file mode 100644 index f6e4212e47f4..000000000000 --- a/backtracking/hamiltonian_cycle.py +++ /dev/null @@ -1,176 +0,0 @@ -""" -A Hamiltonian cycle (Hamiltonian circuit) is a graph cycle -through a graph that visits each node exactly once. -Determining whether such paths and cycles exist in graphs -is the 'Hamiltonian path problem', which is NP-complete. - -Wikipedia: https://en.wikipedia.org/wiki/Hamiltonian_path -""" - - -def valid_connection( - graph: list[list[int]], next_ver: int, curr_ind: int, path: list[int] -) -> bool: - """ - Checks whether it is possible to add next into path by validating 2 statements - 1. There should be path between current and next vertex - 2. Next vertex should not be in path - If both validations succeed we return True, saying that it is possible to connect - this vertices, otherwise we return False - - Case 1:Use exact graph as in main function, with initialized values - >>> graph = [[0, 1, 0, 1, 0], - ... [1, 0, 1, 1, 1], - ... [0, 1, 0, 0, 1], - ... [1, 1, 0, 0, 1], - ... [0, 1, 1, 1, 0]] - >>> path = [0, -1, -1, -1, -1, 0] - >>> curr_ind = 1 - >>> next_ver = 1 - >>> valid_connection(graph, next_ver, curr_ind, path) - True - - Case 2: Same graph, but trying to connect to node that is already in path - >>> path = [0, 1, 2, 4, -1, 0] - >>> curr_ind = 4 - >>> next_ver = 1 - >>> valid_connection(graph, next_ver, curr_ind, path) - False - """ - - # 1. Validate that path exists between current and next vertices - if graph[path[curr_ind - 1]][next_ver] == 0: - return False - - # 2. Validate that next vertex is not already in path - return not any(vertex == next_ver for vertex in path) - - -def util_hamilton_cycle(graph: list[list[int]], path: list[int], curr_ind: int) -> bool: - """ - Pseudo-Code - Base Case: - 1. Check if we visited all of vertices - 1.1 If last visited vertex has path to starting vertex return True either - return False - Recursive Step: - 2. Iterate over each vertex - Check if next vertex is valid for transiting from current vertex - 2.1 Remember next vertex as next transition - 2.2 Do recursive call and check if going to this vertex solves problem - 2.3 If next vertex leads to solution return True - 2.4 Else backtrack, delete remembered vertex - - Case 1: Use exact graph as in main function, with initialized values - >>> graph = [[0, 1, 0, 1, 0], - ... [1, 0, 1, 1, 1], - ... [0, 1, 0, 0, 1], - ... [1, 1, 0, 0, 1], - ... [0, 1, 1, 1, 0]] - >>> path = [0, -1, -1, -1, -1, 0] - >>> curr_ind = 1 - >>> util_hamilton_cycle(graph, path, curr_ind) - True - >>> path - [0, 1, 2, 4, 3, 0] - - Case 2: Use exact graph as in previous case, but in the properties taken from - middle of calculation - >>> graph = [[0, 1, 0, 1, 0], - ... [1, 0, 1, 1, 1], - ... [0, 1, 0, 0, 1], - ... [1, 1, 0, 0, 1], - ... [0, 1, 1, 1, 0]] - >>> path = [0, 1, 2, -1, -1, 0] - >>> curr_ind = 3 - >>> util_hamilton_cycle(graph, path, curr_ind) - True - >>> path - [0, 1, 2, 4, 3, 0] - """ - - # Base Case - if curr_ind == len(graph): - # return whether path exists between current and starting vertices - return graph[path[curr_ind - 1]][path[0]] == 1 - - # Recursive Step - for next_ver in range(len(graph)): - if valid_connection(graph, next_ver, curr_ind, path): - # Insert current vertex into path as next transition - path[curr_ind] = next_ver - # Validate created path - if util_hamilton_cycle(graph, path, curr_ind + 1): - return True - # Backtrack - path[curr_ind] = -1 - return False - - -def hamilton_cycle(graph: list[list[int]], start_index: int = 0) -> list[int]: - r""" - Wrapper function to call subroutine called util_hamilton_cycle, - which will either return array of vertices indicating hamiltonian cycle - or an empty list indicating that hamiltonian cycle was not found. - Case 1: - Following graph consists of 5 edges. - If we look closely, we can see that there are multiple Hamiltonian cycles. - For example one result is when we iterate like: - (0)->(1)->(2)->(4)->(3)->(0) - - (0)---(1)---(2) - | / \ | - | / \ | - | / \ | - |/ \| - (3)---------(4) - >>> graph = [[0, 1, 0, 1, 0], - ... [1, 0, 1, 1, 1], - ... [0, 1, 0, 0, 1], - ... [1, 1, 0, 0, 1], - ... [0, 1, 1, 1, 0]] - >>> hamilton_cycle(graph) - [0, 1, 2, 4, 3, 0] - - Case 2: - Same Graph as it was in Case 1, changed starting index from default to 3 - - (0)---(1)---(2) - | / \ | - | / \ | - | / \ | - |/ \| - (3)---------(4) - >>> graph = [[0, 1, 0, 1, 0], - ... [1, 0, 1, 1, 1], - ... [0, 1, 0, 0, 1], - ... [1, 1, 0, 0, 1], - ... [0, 1, 1, 1, 0]] - >>> hamilton_cycle(graph, 3) - [3, 0, 1, 2, 4, 3] - - Case 3: - Following Graph is exactly what it was before, but edge 3-4 is removed. - Result is that there is no Hamiltonian Cycle anymore. - - (0)---(1)---(2) - | / \ | - | / \ | - | / \ | - |/ \| - (3) (4) - >>> graph = [[0, 1, 0, 1, 0], - ... [1, 0, 1, 1, 1], - ... [0, 1, 0, 0, 1], - ... [1, 1, 0, 0, 0], - ... [0, 1, 1, 0, 0]] - >>> hamilton_cycle(graph,4) - [] - """ - - # Initialize path with -1, indicating that we have not visited them yet - path = [-1] * (len(graph) + 1) - # initialize start and end of path with starting index - path[0] = path[-1] = start_index - # evaluate and if we find answer return path either return empty array - return path if util_hamilton_cycle(graph, path, 1) else [] diff --git a/backtracking/knight_tour.py b/backtracking/knight_tour.py deleted file mode 100644 index 8906aaa1094c..000000000000 --- a/backtracking/knight_tour.py +++ /dev/null @@ -1,101 +0,0 @@ -# Knight Tour Intro: https://www.youtube.com/watch?v=ab_dY3dZFHM - -from __future__ import annotations - - -def get_valid_pos(position: tuple[int, int], n: int) -> list[tuple[int, int]]: - """ - Find all the valid positions a knight can move to from the current position. - - >>> get_valid_pos((1, 3), 4) - [(2, 1), (0, 1), (3, 2)] - """ - - y, x = position - positions = [ - (y + 1, x + 2), - (y - 1, x + 2), - (y + 1, x - 2), - (y - 1, x - 2), - (y + 2, x + 1), - (y + 2, x - 1), - (y - 2, x + 1), - (y - 2, x - 1), - ] - permissible_positions = [] - - for inner_position in positions: - y_test, x_test = inner_position - if 0 <= y_test < n and 0 <= x_test < n: - permissible_positions.append(inner_position) - - return permissible_positions - - -def is_complete(board: list[list[int]]) -> bool: - """ - Check if the board (matrix) has been completely filled with non-zero values. - - >>> is_complete([[1]]) - True - - >>> is_complete([[1, 2], [3, 0]]) - False - """ - - return not any(elem == 0 for row in board for elem in row) - - -def open_knight_tour_helper( - board: list[list[int]], pos: tuple[int, int], curr: int -) -> bool: - """ - Helper function to solve knight tour problem. - """ - - if is_complete(board): - return True - - for position in get_valid_pos(pos, len(board)): - y, x = position - - if board[y][x] == 0: - board[y][x] = curr + 1 - if open_knight_tour_helper(board, position, curr + 1): - return True - board[y][x] = 0 - - return False - - -def open_knight_tour(n: int) -> list[list[int]]: - """ - Find the solution for the knight tour problem for a board of size n. Raises - ValueError if the tour cannot be performed for the given size. - - >>> open_knight_tour(1) - [[1]] - - >>> open_knight_tour(2) - Traceback (most recent call last): - ... - ValueError: Open Knight Tour cannot be performed on a board of size 2 - """ - - board = [[0 for i in range(n)] for j in range(n)] - - for i in range(n): - for j in range(n): - board[i][j] = 1 - if open_knight_tour_helper(board, (i, j), 1): - return board - board[i][j] = 0 - - msg = f"Open Knight Tour cannot be performed on a board of size {n}" - raise ValueError(msg) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/backtracking/match_word_pattern.py b/backtracking/match_word_pattern.py deleted file mode 100644 index bfa9b1354d51..000000000000 --- a/backtracking/match_word_pattern.py +++ /dev/null @@ -1,61 +0,0 @@ -def match_word_pattern(pattern: str, input_string: str) -> bool: - """ - Determine if a given pattern matches a string using backtracking. - - pattern: The pattern to match. - input_string: The string to match against the pattern. - return: True if the pattern matches the string, False otherwise. - - >>> match_word_pattern("aba", "GraphTreesGraph") - True - - >>> match_word_pattern("xyx", "PythonRubyPython") - True - - >>> match_word_pattern("GG", "PythonJavaPython") - False - """ - - def backtrack(pattern_index: int, str_index: int) -> bool: - """ - >>> backtrack(0, 0) - True - - >>> backtrack(0, 1) - True - - >>> backtrack(0, 4) - False - """ - if pattern_index == len(pattern) and str_index == len(input_string): - return True - if pattern_index == len(pattern) or str_index == len(input_string): - return False - char = pattern[pattern_index] - if char in pattern_map: - mapped_str = pattern_map[char] - if input_string.startswith(mapped_str, str_index): - return backtrack(pattern_index + 1, str_index + len(mapped_str)) - else: - return False - for end in range(str_index + 1, len(input_string) + 1): - substr = input_string[str_index:end] - if substr in str_map: - continue - pattern_map[char] = substr - str_map[substr] = char - if backtrack(pattern_index + 1, end): - return True - del pattern_map[char] - del str_map[substr] - return False - - pattern_map: dict[str, str] = {} - str_map: dict[str, str] = {} - return backtrack(0, 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/backtracking/minimax.py b/backtracking/minimax.py deleted file mode 100644 index 4eef90b75483..000000000000 --- a/backtracking/minimax.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -Minimax helps to achieve maximum score in a game by checking all possible moves -depth is current depth in game tree. - -nodeIndex is index of current node in scores[]. -if move is of maximizer return true else false -leaves of game tree is stored in scores[] -height is maximum height of Game tree -""" - -from __future__ import annotations - -import math - - -def minimax( - depth: int, node_index: int, is_max: bool, scores: list[int], height: float -) -> int: - """ - This function implements the minimax algorithm, which helps achieve the optimal - score for a player in a two-player game by checking all possible moves. - If the player is the maximizer, then the score is maximized. - If the player is the minimizer, then the score is minimized. - - Parameters: - - depth: Current depth in the game tree. - - node_index: Index of the current node in the scores list. - - is_max: A boolean indicating whether the current move - is for the maximizer (True) or minimizer (False). - - scores: A list containing the scores of the leaves of the game tree. - - height: The maximum height of the game tree. - - Returns: - - An integer representing the optimal score for the current player. - - >>> import math - >>> scores = [90, 23, 6, 33, 21, 65, 123, 34423] - >>> height = math.log(len(scores), 2) - >>> minimax(0, 0, True, scores, height) - 65 - >>> minimax(-1, 0, True, scores, height) - Traceback (most recent call last): - ... - ValueError: Depth cannot be less than 0 - >>> minimax(0, 0, True, [], 2) - Traceback (most recent call last): - ... - ValueError: Scores cannot be empty - >>> scores = [3, 5, 2, 9, 12, 5, 23, 23] - >>> height = math.log(len(scores), 2) - >>> minimax(0, 0, True, scores, height) - 12 - """ - - if depth < 0: - raise ValueError("Depth cannot be less than 0") - if len(scores) == 0: - raise ValueError("Scores cannot be empty") - - # Base case: If the current depth equals the height of the tree, - # return the score of the current node. - if depth == height: - return scores[node_index] - - # If it's the maximizer's turn, choose the maximum score - # between the two possible moves. - if is_max: - return max( - minimax(depth + 1, node_index * 2, False, scores, height), - minimax(depth + 1, node_index * 2 + 1, False, scores, height), - ) - - # If it's the minimizer's turn, choose the minimum score - # between the two possible moves. - return min( - minimax(depth + 1, node_index * 2, True, scores, height), - minimax(depth + 1, node_index * 2 + 1, True, scores, height), - ) - - -def main() -> None: - # Sample scores and height calculation - scores = [90, 23, 6, 33, 21, 65, 123, 34423] - height = math.log(len(scores), 2) - - # Calculate and print the optimal value using the minimax algorithm - print("Optimal value : ", end="") - print(minimax(0, 0, True, scores, height)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/backtracking/n_queens.py b/backtracking/n_queens.py deleted file mode 100644 index 81668b17a0ac..000000000000 --- a/backtracking/n_queens.py +++ /dev/null @@ -1,94 +0,0 @@ -""" - -The nqueens problem is of placing N queens on a N * N -chess board such that no queen can attack any other queens placed -on that chess board. -This means that one queen cannot have any other queen on its horizontal, vertical and -diagonal lines. - -""" - -from __future__ import annotations - -solution = [] - - -def is_safe(board: list[list[int]], row: int, column: int) -> bool: - """ - This function returns a boolean value True if it is safe to place a queen there - considering the current state of the board. - - Parameters: - board (2D matrix): The chessboard - row, column: Coordinates of the cell on the board - - Returns: - Boolean Value - - >>> is_safe([[0, 0, 0], [0, 0, 0], [0, 0, 0]], 1, 1) - True - >>> is_safe([[1, 0, 0], [0, 0, 0], [0, 0, 0]], 1, 1) - False - """ - - n = len(board) # Size of the board - - # Check if there is any queen in the same row, column, - # left upper diagonal, and right upper diagonal - return ( - all(board[i][j] != 1 for i, j in zip(range(row, -1, -1), range(column, n))) - and all( - board[i][j] != 1 for i, j in zip(range(row, -1, -1), range(column, -1, -1)) - ) - and all(board[i][j] != 1 for i, j in zip(range(row, n), range(column, n))) - and all(board[i][j] != 1 for i, j in zip(range(row, n), range(column, -1, -1))) - ) - - -def solve(board: list[list[int]], row: int) -> bool: - """ - This function creates a state space tree and calls the safe function until it - receives a False Boolean and terminates that branch and backtracks to the next - possible solution branch. - """ - if row >= len(board): - """ - If the row number exceeds N, we have a board with a successful combination - and that combination is appended to the solution list and the board is printed. - """ - solution.append(board) - printboard(board) - print() - return True - for i in range(len(board)): - """ - For every row, it iterates through each column to check if it is feasible to - place a queen there. - If all the combinations for that particular branch are successful, the board is - reinitialized for the next possible combination. - """ - if is_safe(board, row, i): - board[row][i] = 1 - solve(board, row + 1) - board[row][i] = 0 - return False - - -def printboard(board: list[list[int]]) -> None: - """ - Prints the boards that have a successful combination. - """ - for i in range(len(board)): - for j in range(len(board)): - if board[i][j] == 1: - print("Q", end=" ") # Queen is present - else: - print(".", end=" ") # Empty cell - print() - - -# Number of queens (e.g., n=8 for an 8x8 board) -n = 8 -board = [[0 for i in range(n)] for j in range(n)] -solve(board, 0) -print("The total number of solutions are:", len(solution)) diff --git a/backtracking/n_queens_math.py b/backtracking/n_queens_math.py deleted file mode 100644 index 287d1f090373..000000000000 --- a/backtracking/n_queens_math.py +++ /dev/null @@ -1,158 +0,0 @@ -r""" -Problem: - -The n queens problem is: placing N queens on a N * N chess board such that no queen -can attack any other queens placed on that chess board. This means that one queen -cannot have any other queen on its horizontal, vertical and diagonal lines. - -Solution: - -To solve this problem we will use simple math. First we know the queen can move in all -the possible ways, we can simplify it in this: vertical, horizontal, diagonal left and - diagonal right. - -We can visualize it like this: - -left diagonal = \ -right diagonal = / - -On a chessboard vertical movement could be the rows and horizontal movement could be -the columns. - -In programming we can use an array, and in this array each index could be the rows and -each value in the array could be the column. For example: - - . Q . . We have this chessboard with one queen in each column and each queen - . . . Q can't attack to each other. - Q . . . The array for this example would look like this: [1, 3, 0, 2] - . . Q . - -So if we use an array and we verify that each value in the array is different to each -other we know that at least the queens can't attack each other in horizontal and -vertical. - -At this point we have it halfway completed and we will treat the chessboard as a -Cartesian plane. Hereinafter we are going to remember basic math, so in the school we -learned this formula: - - Slope of a line: - - y2 - y1 - m = ---------- - x2 - x1 - -This formula allow us to get the slope. For the angles 45º (right diagonal) and 135º -(left diagonal) this formula gives us m = 1, and m = -1 respectively. - -See:: -https://www.enotes.com/homework-help/write-equation-line-that-hits-origin-45-degree-1474860 - -Then we have this other formula: - -Slope intercept: - -y = mx + b - -b is where the line crosses the Y axis (to get more information see: -https://www.mathsisfun.com/y_intercept.html), if we change the formula to solve for b -we would have: - -y - mx = b - -And since we already have the m values for the angles 45º and 135º, this formula would -look like this: - -45º: y - (1)x = b -45º: y - x = b - -135º: y - (-1)x = b -135º: y + x = b - -y = row -x = column - -Applying these two formulas we can check if a queen in some position is being attacked -for another one or vice versa. - -""" - -from __future__ import annotations - - -def depth_first_search( - possible_board: list[int], - diagonal_right_collisions: list[int], - diagonal_left_collisions: list[int], - boards: list[list[str]], - n: int, -) -> None: - """ - >>> boards = [] - >>> depth_first_search([], [], [], boards, 4) - >>> for board in boards: - ... print(board) - ['. Q . . ', '. . . Q ', 'Q . . . ', '. . Q . '] - ['. . Q . ', 'Q . . . ', '. . . Q ', '. Q . . '] - """ - - # Get next row in the current board (possible_board) to fill it with a queen - row = len(possible_board) - - # If row is equal to the size of the board it means there are a queen in each row in - # the current board (possible_board) - if row == n: - # We convert the variable possible_board that looks like this: [1, 3, 0, 2] to - # this: ['. Q . . ', '. . . Q ', 'Q . . . ', '. . Q . '] - boards.append([". " * i + "Q " + ". " * (n - 1 - i) for i in possible_board]) - return - - # We iterate each column in the row to find all possible results in each row - for col in range(n): - # We apply that we learned previously. First we check that in the current board - # (possible_board) there are not other same value because if there is it means - # that there are a collision in vertical. Then we apply the two formulas we - # learned before: - # - # 45º: y - x = b or 45: row - col = b - # 135º: y + x = b or row + col = b. - # - # And we verify if the results of this two formulas not exist in their variables - # respectively. (diagonal_right_collisions, diagonal_left_collisions) - # - # If any or these are True it means there is a collision so we continue to the - # next value in the for loop. - if ( - col in possible_board - or row - col in diagonal_right_collisions - or row + col in diagonal_left_collisions - ): - continue - - # If it is False we call dfs function again and we update the inputs - depth_first_search( - [*possible_board, col], - [*diagonal_right_collisions, row - col], - [*diagonal_left_collisions, row + col], - boards, - n, - ) - - -def n_queens_solution(n: int) -> None: - boards: list[list[str]] = [] - depth_first_search([], [], [], boards, n) - - # Print all the boards - for board in boards: - for column in board: - print(column) - print("") - - print(len(boards), "solutions were found.") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - n_queens_solution(4) diff --git a/backtracking/power_sum.py b/backtracking/power_sum.py deleted file mode 100644 index ee2eac426ec7..000000000000 --- a/backtracking/power_sum.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Problem source: https://www.hackerrank.com/challenges/the-power-sum/problem -Find the number of ways that a given integer X, can be expressed as the sum -of the Nth powers of unique, natural numbers. For example, if X=13 and N=2. -We have to find all combinations of unique squares adding up to 13. -The only solution is 2^2+3^2. Constraints: 1<=X<=1000, 2<=N<=10. -""" - - -def backtrack( - needed_sum: int, - power: int, - current_number: int, - current_sum: int, - solutions_count: int, -) -> tuple[int, int]: - """ - >>> backtrack(13, 2, 1, 0, 0) - (0, 1) - >>> backtrack(10, 2, 1, 0, 0) - (0, 1) - >>> backtrack(10, 3, 1, 0, 0) - (0, 0) - >>> backtrack(20, 2, 1, 0, 0) - (0, 1) - >>> backtrack(15, 10, 1, 0, 0) - (0, 0) - >>> backtrack(16, 2, 1, 0, 0) - (0, 1) - >>> backtrack(20, 1, 1, 0, 0) - (0, 64) - """ - if current_sum == needed_sum: - # If the sum of the powers is equal to needed_sum, then we have a solution. - solutions_count += 1 - return current_sum, solutions_count - - i_to_n = current_number**power - if current_sum + i_to_n <= needed_sum: - # If the sum of the powers is less than needed_sum, then continue adding powers. - current_sum += i_to_n - current_sum, solutions_count = backtrack( - needed_sum, power, current_number + 1, current_sum, solutions_count - ) - current_sum -= i_to_n - if i_to_n < needed_sum: - # If the power of i is less than needed_sum, then try with the next power. - current_sum, solutions_count = backtrack( - needed_sum, power, current_number + 1, current_sum, solutions_count - ) - return current_sum, solutions_count - - -def solve(needed_sum: int, power: int) -> int: - """ - >>> solve(13, 2) - 1 - >>> solve(10, 2) - 1 - >>> solve(10, 3) - 0 - >>> solve(20, 2) - 1 - >>> solve(15, 10) - 0 - >>> solve(16, 2) - 1 - >>> solve(20, 1) - Traceback (most recent call last): - ... - ValueError: Invalid input - needed_sum must be between 1 and 1000, power between 2 and 10. - >>> solve(-10, 5) - Traceback (most recent call last): - ... - ValueError: Invalid input - needed_sum must be between 1 and 1000, power between 2 and 10. - """ - if not (1 <= needed_sum <= 1000 and 2 <= power <= 10): - raise ValueError( - "Invalid input\n" - "needed_sum must be between 1 and 1000, power between 2 and 10." - ) - - return backtrack(needed_sum, power, 1, 0, 0)[1] # Return the solutions_count - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/backtracking/rat_in_maze.py b/backtracking/rat_in_maze.py deleted file mode 100644 index 626c83cb4a15..000000000000 --- a/backtracking/rat_in_maze.py +++ /dev/null @@ -1,197 +0,0 @@ -from __future__ import annotations - - -def solve_maze( - maze: list[list[int]], - source_row: int, - source_column: int, - destination_row: int, - destination_column: int, -) -> list[list[int]]: - """ - This method solves the "rat in maze" problem. - Parameters : - - maze: A two dimensional matrix of zeros and ones. - - source_row: The row index of the starting point. - - source_column: The column index of the starting point. - - destination_row: The row index of the destination point. - - destination_column: The column index of the destination point. - Returns: - - solution: A 2D matrix representing the solution path if it exists. - Raises: - - ValueError: If no solution exists or if the source or - destination coordinates are invalid. - Description: - This method navigates through a maze represented as an n by n matrix, - starting from a specified source cell and - aiming to reach a destination cell. - The maze consists of walls (1s) and open paths (0s). - By providing custom row and column values, the source and destination - cells can be adjusted. - >>> maze = [[0, 1, 0, 1, 1], - ... [0, 0, 0, 0, 0], - ... [1, 0, 1, 0, 1], - ... [0, 0, 1, 0, 0], - ... [1, 0, 0, 1, 0]] - >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1) # doctest: +NORMALIZE_WHITESPACE - [[0, 1, 1, 1, 1], - [0, 0, 0, 0, 1], - [1, 1, 1, 0, 1], - [1, 1, 1, 0, 0], - [1, 1, 1, 1, 0]] - - Note: - In the output maze, the zeros (0s) represent one of the possible - paths from the source to the destination. - - >>> maze = [[0, 1, 0, 1, 1], - ... [0, 0, 0, 0, 0], - ... [0, 0, 0, 0, 1], - ... [0, 0, 0, 0, 0], - ... [0, 0, 0, 0, 0]] - >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1) # doctest: +NORMALIZE_WHITESPACE - [[0, 1, 1, 1, 1], - [0, 1, 1, 1, 1], - [0, 1, 1, 1, 1], - [0, 1, 1, 1, 1], - [0, 0, 0, 0, 0]] - - >>> maze = [[0, 0, 0], - ... [0, 1, 0], - ... [1, 0, 0]] - >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1) # doctest: +NORMALIZE_WHITESPACE - [[0, 0, 0], - [1, 1, 0], - [1, 1, 0]] - - >>> maze = [[1, 0, 0], - ... [0, 1, 0], - ... [1, 0, 0]] - >>> solve_maze(maze,0,1,len(maze)-1,len(maze)-1) # doctest: +NORMALIZE_WHITESPACE - [[1, 0, 0], - [1, 1, 0], - [1, 1, 0]] - - >>> maze = [[1, 1, 0, 0, 1, 0, 0, 1], - ... [1, 0, 1, 0, 0, 1, 1, 1], - ... [0, 1, 0, 1, 0, 0, 1, 0], - ... [1, 1, 1, 0, 0, 1, 0, 1], - ... [0, 1, 0, 0, 1, 0, 1, 1], - ... [0, 0, 0, 1, 1, 1, 0, 1], - ... [0, 1, 0, 1, 0, 1, 1, 1], - ... [1, 1, 0, 0, 0, 0, 0, 1]] - >>> solve_maze(maze,0,2,len(maze)-1,2) # doctest: +NORMALIZE_WHITESPACE - [[1, 1, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 1, 1, 1], - [1, 1, 1, 1, 0, 1, 1, 1], - [1, 1, 1, 0, 0, 1, 1, 1], - [1, 1, 0, 0, 1, 1, 1, 1], - [1, 1, 0, 1, 1, 1, 1, 1], - [1, 1, 0, 1, 1, 1, 1, 1], - [1, 1, 0, 1, 1, 1, 1, 1]] - >>> maze = [[1, 0, 0], - ... [0, 1, 1], - ... [1, 0, 1]] - >>> solve_maze(maze,0,1,len(maze)-1,len(maze)-1) - Traceback (most recent call last): - ... - ValueError: No solution exists! - - >>> maze = [[0, 0], - ... [1, 1]] - >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1) - Traceback (most recent call last): - ... - ValueError: No solution exists! - - >>> maze = [[0, 1], - ... [1, 0]] - >>> solve_maze(maze,2,0,len(maze)-1,len(maze)-1) - Traceback (most recent call last): - ... - ValueError: Invalid source or destination coordinates - - >>> maze = [[1, 0, 0], - ... [0, 1, 0], - ... [1, 0, 0]] - >>> solve_maze(maze,0,1,len(maze),len(maze)-1) - Traceback (most recent call last): - ... - ValueError: Invalid source or destination coordinates - """ - size = len(maze) - # Check if source and destination coordinates are Invalid. - if not (0 <= source_row <= size - 1 and 0 <= source_column <= size - 1) or ( - not (0 <= destination_row <= size - 1 and 0 <= destination_column <= size - 1) - ): - raise ValueError("Invalid source or destination coordinates") - # We need to create solution object to save path. - solutions = [[1 for _ in range(size)] for _ in range(size)] - solved = run_maze( - maze, source_row, source_column, destination_row, destination_column, solutions - ) - if solved: - return solutions - else: - raise ValueError("No solution exists!") - - -def run_maze( - maze: list[list[int]], - i: int, - j: int, - destination_row: int, - destination_column: int, - solutions: list[list[int]], -) -> bool: - """ - This method is recursive starting from (i, j) and going in one of four directions: - up, down, left, right. - If a path is found to destination it returns True otherwise it returns False. - Parameters - maze: A two dimensional matrix of zeros and ones. - i, j : coordinates of matrix - solutions: A two dimensional matrix of solutions. - Returns: - Boolean if path is found True, Otherwise False. - """ - size = len(maze) - # Final check point. - if i == destination_row and j == destination_column and maze[i][j] == 0: - solutions[i][j] = 0 - return True - - lower_flag = (not i < 0) and (not j < 0) # Check lower bounds - upper_flag = (i < size) and (j < size) # Check upper bounds - - if lower_flag and upper_flag: - # check for already visited and block points. - block_flag = (solutions[i][j]) and (not maze[i][j]) - if block_flag: - # check visited - solutions[i][j] = 0 - - # check for directions - if ( - run_maze(maze, i + 1, j, destination_row, destination_column, solutions) - or run_maze( - maze, i, j + 1, destination_row, destination_column, solutions - ) - or run_maze( - maze, i - 1, j, destination_row, destination_column, solutions - ) - or run_maze( - maze, i, j - 1, destination_row, destination_column, solutions - ) - ): - return True - - solutions[i][j] = 1 - return False - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE) diff --git a/backtracking/sudoku.py b/backtracking/sudoku.py deleted file mode 100644 index cabeebb90433..000000000000 --- a/backtracking/sudoku.py +++ /dev/null @@ -1,133 +0,0 @@ -""" -Given a partially filled 9x9 2D array, the objective is to fill a 9x9 -square grid with digits numbered 1 to 9, so that every row, column, and -and each of the nine 3x3 sub-grids contains all of the digits. - -This can be solved using Backtracking and is similar to n-queens. -We check to see if a cell is safe or not and recursively call the -function on the next column to see if it returns True. if yes, we -have solved the puzzle. else, we backtrack and place another number -in that cell and repeat this process. -""" - -from __future__ import annotations - -Matrix = list[list[int]] - -# assigning initial values to the grid -initial_grid: Matrix = [ - [3, 0, 6, 5, 0, 8, 4, 0, 0], - [5, 2, 0, 0, 0, 0, 0, 0, 0], - [0, 8, 7, 0, 0, 0, 0, 3, 1], - [0, 0, 3, 0, 1, 0, 0, 8, 0], - [9, 0, 0, 8, 6, 3, 0, 0, 5], - [0, 5, 0, 0, 9, 0, 6, 0, 0], - [1, 3, 0, 0, 0, 0, 2, 5, 0], - [0, 0, 0, 0, 0, 0, 0, 7, 4], - [0, 0, 5, 2, 0, 6, 3, 0, 0], -] - -# a grid with no solution -no_solution: Matrix = [ - [5, 0, 6, 5, 0, 8, 4, 0, 3], - [5, 2, 0, 0, 0, 0, 0, 0, 2], - [1, 8, 7, 0, 0, 0, 0, 3, 1], - [0, 0, 3, 0, 1, 0, 0, 8, 0], - [9, 0, 0, 8, 6, 3, 0, 0, 5], - [0, 5, 0, 0, 9, 0, 6, 0, 0], - [1, 3, 0, 0, 0, 0, 2, 5, 0], - [0, 0, 0, 0, 0, 0, 0, 7, 4], - [0, 0, 5, 2, 0, 6, 3, 0, 0], -] - - -def is_safe(grid: Matrix, row: int, column: int, n: int) -> bool: - """ - This function checks the grid to see if each row, - column, and the 3x3 subgrids contain the digit 'n'. - It returns False if it is not 'safe' (a duplicate digit - is found) else returns True if it is 'safe' - """ - for i in range(9): - if n in {grid[row][i], grid[i][column]}: - return False - - for i in range(3): - for j in range(3): - if grid[(row - row % 3) + i][(column - column % 3) + j] == n: - return False - - return True - - -def find_empty_location(grid: Matrix) -> tuple[int, int] | None: - """ - This function finds an empty location so that we can assign a number - for that particular row and column. - """ - for i in range(9): - for j in range(9): - if grid[i][j] == 0: - return i, j - return None - - -def sudoku(grid: Matrix) -> Matrix | None: - """ - Takes a partially filled-in grid and attempts to assign values to - all unassigned locations in such a way to meet the requirements - for Sudoku solution (non-duplication across rows, columns, and boxes) - - >>> sudoku(initial_grid) # doctest: +NORMALIZE_WHITESPACE - [[3, 1, 6, 5, 7, 8, 4, 9, 2], - [5, 2, 9, 1, 3, 4, 7, 6, 8], - [4, 8, 7, 6, 2, 9, 5, 3, 1], - [2, 6, 3, 4, 1, 5, 9, 8, 7], - [9, 7, 4, 8, 6, 3, 1, 2, 5], - [8, 5, 1, 7, 9, 2, 6, 4, 3], - [1, 3, 8, 9, 4, 7, 2, 5, 6], - [6, 9, 2, 3, 5, 1, 8, 7, 4], - [7, 4, 5, 2, 8, 6, 3, 1, 9]] - >>> sudoku(no_solution) is None - True - """ - if location := find_empty_location(grid): - row, column = location - else: - # If the location is ``None``, then the grid is solved. - return grid - - for digit in range(1, 10): - if is_safe(grid, row, column, digit): - grid[row][column] = digit - - if sudoku(grid) is not None: - return grid - - grid[row][column] = 0 - - return None - - -def print_solution(grid: Matrix) -> None: - """ - A function to print the solution in the form - of a 9x9 grid - """ - for row in grid: - for cell in row: - print(cell, end=" ") - print() - - -if __name__ == "__main__": - # make a copy of grid so that you can compare with the unmodified grid - for example_grid in (initial_grid, no_solution): - print("\nExample grid:\n" + "=" * 20) - print_solution(example_grid) - print("\nExample grid solution:") - solution = sudoku(example_grid) - if solution is not None: - print_solution(solution) - else: - print("Cannot find a solution.") diff --git a/backtracking/sum_of_subsets.py b/backtracking/sum_of_subsets.py deleted file mode 100644 index f34d3ca34339..000000000000 --- a/backtracking/sum_of_subsets.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -The sum-of-subsetsproblem states that a set of non-negative integers, and a -value M, determine all possible subsets of the given set whose summation sum -equal to given M. - -Summation of the chosen numbers must be equal to given number M and one number -can be used only once. -""" - -from __future__ import annotations - - -def generate_sum_of_subsets_soln(nums: list[int], max_sum: int) -> list[list[int]]: - result: list[list[int]] = [] - path: list[int] = [] - num_index = 0 - remaining_nums_sum = sum(nums) - create_state_space_tree(nums, max_sum, num_index, path, result, remaining_nums_sum) - return result - - -def create_state_space_tree( - nums: list[int], - max_sum: int, - num_index: int, - path: list[int], - result: list[list[int]], - remaining_nums_sum: int, -) -> None: - """ - Creates a state space tree to iterate through each branch using DFS. - It terminates the branching of a node when any of the two conditions - given below satisfy. - This algorithm follows depth-fist-search and backtracks when the node is not - branchable. - - """ - if sum(path) > max_sum or (remaining_nums_sum + sum(path)) < max_sum: - return - if sum(path) == max_sum: - result.append(path) - return - for index in range(num_index, len(nums)): - create_state_space_tree( - nums, - max_sum, - index + 1, - [*path, nums[index]], - result, - remaining_nums_sum - nums[index], - ) - - -""" -remove the comment to take an input from the user - -print("Enter the elements") -nums = list(map(int, input().split())) -print("Enter max_sum sum") -max_sum = int(input()) - -""" -nums = [3, 34, 4, 12, 5, 2] -max_sum = 9 -result = generate_sum_of_subsets_soln(nums, max_sum) -print(*result) diff --git a/backtracking/word_break.py b/backtracking/word_break.py deleted file mode 100644 index 1f2ab073f499..000000000000 --- a/backtracking/word_break.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -Word Break Problem is a well-known problem in computer science. -Given a string and a dictionary of words, the task is to determine if -the string can be segmented into a sequence of one or more dictionary words. - -Wikipedia: https://en.wikipedia.org/wiki/Word_break_problem -""" - - -def backtrack(input_string: str, word_dict: set[str], start: int) -> bool: - """ - Helper function that uses backtracking to determine if a valid - word segmentation is possible starting from index 'start'. - - Parameters: - input_string (str): The input string to be segmented. - word_dict (set[str]): A set of valid dictionary words. - start (int): The starting index of the substring to be checked. - - Returns: - bool: True if a valid segmentation is possible, otherwise False. - - Example: - >>> backtrack("leetcode", {"leet", "code"}, 0) - True - - >>> backtrack("applepenapple", {"apple", "pen"}, 0) - True - - >>> backtrack("catsandog", {"cats", "dog", "sand", "and", "cat"}, 0) - False - """ - - # Base case: if the starting index has reached the end of the string - if start == len(input_string): - return True - - # Try every possible substring from 'start' to 'end' - for end in range(start + 1, len(input_string) + 1): - if input_string[start:end] in word_dict and backtrack( - input_string, word_dict, end - ): - return True - - return False - - -def word_break(input_string: str, word_dict: set[str]) -> bool: - """ - Determines if the input string can be segmented into a sequence of - valid dictionary words using backtracking. - - Parameters: - input_string (str): The input string to segment. - word_dict (set[str]): The set of valid words. - - Returns: - bool: True if the string can be segmented into valid words, otherwise False. - - Example: - >>> word_break("leetcode", {"leet", "code"}) - True - - >>> word_break("applepenapple", {"apple", "pen"}) - True - - >>> word_break("catsandog", {"cats", "dog", "sand", "and", "cat"}) - False - """ - - return backtrack(input_string, word_dict, 0) diff --git a/backtracking/word_ladder.py b/backtracking/word_ladder.py deleted file mode 100644 index 7d9fd00f6669..000000000000 --- a/backtracking/word_ladder.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -Word Ladder is a classic problem in computer science. -The problem is to transform a start word into an end word -by changing one letter at a time. -Each intermediate word must be a valid word from a given list of words. -The goal is to find a transformation sequence -from the start word to the end word. - -Wikipedia: https://en.wikipedia.org/wiki/Word_ladder -""" - -import string - - -def backtrack( - current_word: str, path: list[str], end_word: str, word_set: set[str] -) -> list[str]: - """ - Helper function to perform backtracking to find the transformation - from the current_word to the end_word. - - Parameters: - current_word (str): The current word in the transformation sequence. - path (list[str]): The list of transformations from begin_word to current_word. - end_word (str): The target word for transformation. - word_set (set[str]): The set of valid words for transformation. - - Returns: - list[str]: The list of transformations from begin_word to end_word. - Returns an empty list if there is no valid - transformation from current_word to end_word. - - Example: - >>> backtrack("hit", ["hit"], "cog", {"hot", "dot", "dog", "lot", "log", "cog"}) - ['hit', 'hot', 'dot', 'lot', 'log', 'cog'] - - >>> backtrack("hit", ["hit"], "cog", {"hot", "dot", "dog", "lot", "log"}) - [] - - >>> backtrack("lead", ["lead"], "gold", {"load", "goad", "gold", "lead", "lord"}) - ['lead', 'lead', 'load', 'goad', 'gold'] - - >>> backtrack("game", ["game"], "code", {"came", "cage", "code", "cade", "gave"}) - ['game', 'came', 'cade', 'code'] - """ - - # Base case: If the current word is the end word, return the path - if current_word == end_word: - return path - - # Try all possible single-letter transformations - for i in range(len(current_word)): - for c in string.ascii_lowercase: # Try changing each letter - transformed_word = current_word[:i] + c + current_word[i + 1 :] - if transformed_word in word_set: - word_set.remove(transformed_word) - # Recur with the new word added to the path - result = backtrack( - transformed_word, [*path, transformed_word], end_word, word_set - ) - if result: # valid transformation found - return result - word_set.add(transformed_word) # backtrack - - return [] # No valid transformation found - - -def word_ladder(begin_word: str, end_word: str, word_set: set[str]) -> list[str]: - """ - Solve the Word Ladder problem using Backtracking and return - the list of transformations from begin_word to end_word. - - Parameters: - begin_word (str): The word from which the transformation starts. - end_word (str): The target word for transformation. - word_list (list[str]): The list of valid words for transformation. - - Returns: - list[str]: The list of transformations from begin_word to end_word. - Returns an empty list if there is no valid transformation. - - Example: - >>> word_ladder("hit", "cog", ["hot", "dot", "dog", "lot", "log", "cog"]) - ['hit', 'hot', 'dot', 'lot', 'log', 'cog'] - - >>> word_ladder("hit", "cog", ["hot", "dot", "dog", "lot", "log"]) - [] - - >>> word_ladder("lead", "gold", ["load", "goad", "gold", "lead", "lord"]) - ['lead', 'lead', 'load', 'goad', 'gold'] - - >>> word_ladder("game", "code", ["came", "cage", "code", "cade", "gave"]) - ['game', 'came', 'cade', 'code'] - """ - - if end_word not in word_set: # no valid transformation possible - return [] - - # Perform backtracking starting from the begin_word - return backtrack(begin_word, [begin_word], end_word, word_set) diff --git a/backtracking/word_search.py b/backtracking/word_search.py deleted file mode 100644 index 8a9b2f1b5359..000000000000 --- a/backtracking/word_search.py +++ /dev/null @@ -1,162 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : November 24, 2022 - -Task: -Given an m x n grid of characters board and a string word, -return true if word exists in the grid. - -The word can be constructed from letters of sequentially adjacent cells, -where adjacent cells are horizontally or vertically neighboring. -The same letter cell may not be used more than once. - -Example: - -Matrix: ---------- -|A|B|C|E| -|S|F|C|S| -|A|D|E|E| ---------- - -Word: -"ABCCED" - -Result: -True - -Implementation notes: Use backtracking approach. -At each point, check all neighbors to try to find the next letter of the word. - -leetcode: https://leetcode.com/problems/word-search/ - -""" - - -def get_point_key(len_board: int, len_board_column: int, row: int, column: int) -> int: - """ - Returns the hash key of matrix indexes. - - >>> get_point_key(10, 20, 1, 0) - 200 - """ - - return len_board * len_board_column * row + column - - -def exits_word( - board: list[list[str]], - word: str, - row: int, - column: int, - word_index: int, - visited_points_set: set[int], -) -> bool: - """ - Return True if it's possible to search the word suffix - starting from the word_index. - - >>> exits_word([["A"]], "B", 0, 0, 0, set()) - False - """ - - if board[row][column] != word[word_index]: - return False - - if word_index == len(word) - 1: - return True - - traverts_directions = [(0, 1), (0, -1), (-1, 0), (1, 0)] - len_board = len(board) - len_board_column = len(board[0]) - for direction in traverts_directions: - next_i = row + direction[0] - next_j = column + direction[1] - if not (0 <= next_i < len_board and 0 <= next_j < len_board_column): - continue - - key = get_point_key(len_board, len_board_column, next_i, next_j) - if key in visited_points_set: - continue - - visited_points_set.add(key) - if exits_word(board, word, next_i, next_j, word_index + 1, visited_points_set): - return True - - visited_points_set.remove(key) - - return False - - -def word_exists(board: list[list[str]], word: str) -> bool: - """ - >>> word_exists([["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], "ABCCED") - True - >>> word_exists([["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], "SEE") - True - >>> word_exists([["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], "ABCB") - False - >>> word_exists([["A"]], "A") - True - >>> word_exists([["B", "A", "A"], ["A", "A", "A"], ["A", "B", "A"]], "ABB") - False - >>> word_exists([["A"]], 123) - Traceback (most recent call last): - ... - ValueError: The word parameter should be a string of length greater than 0. - >>> word_exists([["A"]], "") - Traceback (most recent call last): - ... - ValueError: The word parameter should be a string of length greater than 0. - >>> word_exists([[]], "AB") - Traceback (most recent call last): - ... - ValueError: The board should be a non empty matrix of single chars strings. - >>> word_exists([], "AB") - Traceback (most recent call last): - ... - ValueError: The board should be a non empty matrix of single chars strings. - >>> word_exists([["A"], [21]], "AB") - Traceback (most recent call last): - ... - ValueError: The board should be a non empty matrix of single chars strings. - """ - - # Validate board - board_error_message = ( - "The board should be a non empty matrix of single chars strings." - ) - - len_board = len(board) - if not isinstance(board, list) or len(board) == 0: - raise ValueError(board_error_message) - - for row in board: - if not isinstance(row, list) or len(row) == 0: - raise ValueError(board_error_message) - - for item in row: - if not isinstance(item, str) or len(item) != 1: - raise ValueError(board_error_message) - - # Validate word - if not isinstance(word, str) or len(word) == 0: - raise ValueError( - "The word parameter should be a string of length greater than 0." - ) - - len_board_column = len(board[0]) - for i in range(len_board): - for j in range(len_board_column): - if exits_word( - board, word, i, j, 0, {get_point_key(len_board, len_board_column, i, j)} - ): - return True - - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/README.md b/bit_manipulation/README.md deleted file mode 100644 index 3f5e028beb8e..000000000000 --- a/bit_manipulation/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Bit manipulation - -Bit manipulation is the act of manipulating bits to detect errors (hamming code), encrypts and decrypts messages (more on that in the 'ciphers' folder) or just do anything at the lowest level of your computer. - -* <https://en.wikipedia.org/wiki/Bit_manipulation> -* <https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations> -* <https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations> -* <https://docs.python.org/3/library/stdtypes.html#bitwise-operations-on-integer-types> -* <https://wiki.python.org/moin/BitManipulation> -* <https://wiki.python.org/moin/BitwiseOperators> -* <https://www.tutorialspoint.com/python3/bitwise_operators_example.htm> diff --git a/bit_manipulation/__init__.py b/bit_manipulation/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/bit_manipulation/binary_and_operator.py b/bit_manipulation/binary_and_operator.py deleted file mode 100644 index f33b8b1c0ab4..000000000000 --- a/bit_manipulation/binary_and_operator.py +++ /dev/null @@ -1,52 +0,0 @@ -# https://www.tutorialspoint.com/python3/bitwise_operators_example.htm - - -def binary_and(a: int, b: int) -> str: - """ - Take in 2 integers, convert them to binary, - return a binary number that is the - result of a binary and operation on the integers provided. - - >>> binary_and(25, 32) - '0b000000' - >>> binary_and(37, 50) - '0b100000' - >>> binary_and(21, 30) - '0b10100' - >>> binary_and(58, 73) - '0b0001000' - >>> binary_and(0, 255) - '0b00000000' - >>> binary_and(256, 256) - '0b100000000' - >>> binary_and(0, -1) - Traceback (most recent call last): - ... - ValueError: the value of both inputs must be positive - >>> binary_and(0, 1.1) - Traceback (most recent call last): - ... - ValueError: Unknown format code 'b' for object of type 'float' - >>> binary_and("0", "1") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - """ - if a < 0 or b < 0: - raise ValueError("the value of both inputs must be positive") - - a_binary = format(a, "b") - b_binary = format(b, "b") - - max_len = max(len(a_binary), len(b_binary)) - - return "0b" + "".join( - str(int(char_a == "1" and char_b == "1")) - for char_a, char_b in zip(a_binary.zfill(max_len), b_binary.zfill(max_len)) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_coded_decimal.py b/bit_manipulation/binary_coded_decimal.py deleted file mode 100644 index 676fd6d54fc5..000000000000 --- a/bit_manipulation/binary_coded_decimal.py +++ /dev/null @@ -1,29 +0,0 @@ -def binary_coded_decimal(number: int) -> str: - """ - Find binary coded decimal (bcd) of integer base 10. - Each digit of the number is represented by a 4-bit binary. - Example: - >>> binary_coded_decimal(-2) - '0b0000' - >>> binary_coded_decimal(-1) - '0b0000' - >>> binary_coded_decimal(0) - '0b0000' - >>> binary_coded_decimal(3) - '0b0011' - >>> binary_coded_decimal(2) - '0b0010' - >>> binary_coded_decimal(12) - '0b00010010' - >>> binary_coded_decimal(987) - '0b100110000111' - """ - return "0b" + "".join( - str(bin(int(digit)))[2:].zfill(4) for digit in str(max(0, number)) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_count_setbits.py b/bit_manipulation/binary_count_setbits.py deleted file mode 100644 index 3c92694533aa..000000000000 --- a/bit_manipulation/binary_count_setbits.py +++ /dev/null @@ -1,41 +0,0 @@ -def binary_count_setbits(a: int) -> int: - """ - Take in 1 integer, return a number that is - the number of 1's in binary representation of that number. - - >>> binary_count_setbits(25) - 3 - >>> binary_count_setbits(36) - 2 - >>> binary_count_setbits(16) - 1 - >>> binary_count_setbits(58) - 4 - >>> binary_count_setbits(4294967295) - 32 - >>> binary_count_setbits(0) - 0 - >>> binary_count_setbits(-10) - Traceback (most recent call last): - ... - ValueError: Input value must be a positive integer - >>> binary_count_setbits(0.8) - Traceback (most recent call last): - ... - TypeError: Input value must be a 'int' type - >>> binary_count_setbits("0") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - """ - if a < 0: - raise ValueError("Input value must be a positive integer") - elif isinstance(a, float): - raise TypeError("Input value must be a 'int' type") - return bin(a).count("1") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_count_trailing_zeros.py b/bit_manipulation/binary_count_trailing_zeros.py deleted file mode 100644 index f401c4ab9266..000000000000 --- a/bit_manipulation/binary_count_trailing_zeros.py +++ /dev/null @@ -1,44 +0,0 @@ -from math import log2 - - -def binary_count_trailing_zeros(a: int) -> int: - """ - Take in 1 integer, return a number that is - the number of trailing zeros in binary representation of that number. - - >>> binary_count_trailing_zeros(25) - 0 - >>> binary_count_trailing_zeros(36) - 2 - >>> binary_count_trailing_zeros(16) - 4 - >>> binary_count_trailing_zeros(58) - 1 - >>> binary_count_trailing_zeros(4294967296) - 32 - >>> binary_count_trailing_zeros(0) - 0 - >>> binary_count_trailing_zeros(-10) - Traceback (most recent call last): - ... - ValueError: Input value must be a positive integer - >>> binary_count_trailing_zeros(0.8) - Traceback (most recent call last): - ... - TypeError: Input value must be a 'int' type - >>> binary_count_trailing_zeros("0") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - """ - if a < 0: - raise ValueError("Input value must be a positive integer") - elif isinstance(a, float): - raise TypeError("Input value must be a 'int' type") - return 0 if (a == 0) else int(log2(a & -a)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_or_operator.py b/bit_manipulation/binary_or_operator.py deleted file mode 100644 index 95f61f1da64e..000000000000 --- a/bit_manipulation/binary_or_operator.py +++ /dev/null @@ -1,48 +0,0 @@ -# https://www.tutorialspoint.com/python3/bitwise_operators_example.htm - - -def binary_or(a: int, b: int) -> str: - """ - Take in 2 integers, convert them to binary, and return a binary number that is the - result of a binary or operation on the integers provided. - - >>> binary_or(25, 32) - '0b111001' - >>> binary_or(37, 50) - '0b110111' - >>> binary_or(21, 30) - '0b11111' - >>> binary_or(58, 73) - '0b1111011' - >>> binary_or(0, 255) - '0b11111111' - >>> binary_or(0, 256) - '0b100000000' - >>> binary_or(0, -1) - Traceback (most recent call last): - ... - ValueError: the value of both inputs must be positive - >>> binary_or(0, 1.1) - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - >>> binary_or("0", "1") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - """ - if a < 0 or b < 0: - raise ValueError("the value of both inputs must be positive") - a_binary = str(bin(a))[2:] # remove the leading "0b" - b_binary = str(bin(b))[2:] - max_len = max(len(a_binary), len(b_binary)) - return "0b" + "".join( - str(int("1" in (char_a, char_b))) - for char_a, char_b in zip(a_binary.zfill(max_len), b_binary.zfill(max_len)) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_shifts.py b/bit_manipulation/binary_shifts.py deleted file mode 100644 index 50dc27ffeef6..000000000000 --- a/bit_manipulation/binary_shifts.py +++ /dev/null @@ -1,109 +0,0 @@ -# Information on binary shifts: -# https://docs.python.org/3/library/stdtypes.html#bitwise-operations-on-integer-types -# https://www.interviewcake.com/concept/java/bit-shift - - -def logical_left_shift(number: int, shift_amount: int) -> str: - """ - Take in 2 positive integers. - 'number' is the integer to be logically left shifted 'shift_amount' times. - i.e. (number << shift_amount) - Return the shifted binary representation. - - >>> logical_left_shift(0, 1) - '0b00' - >>> logical_left_shift(1, 1) - '0b10' - >>> logical_left_shift(1, 5) - '0b100000' - >>> logical_left_shift(17, 2) - '0b1000100' - >>> logical_left_shift(1983, 4) - '0b111101111110000' - >>> logical_left_shift(1, -1) - Traceback (most recent call last): - ... - ValueError: both inputs must be positive integers - """ - if number < 0 or shift_amount < 0: - raise ValueError("both inputs must be positive integers") - - binary_number = str(bin(number)) - binary_number += "0" * shift_amount - return binary_number - - -def logical_right_shift(number: int, shift_amount: int) -> str: - """ - Take in positive 2 integers. - 'number' is the integer to be logically right shifted 'shift_amount' times. - i.e. (number >>> shift_amount) - Return the shifted binary representation. - - >>> logical_right_shift(0, 1) - '0b0' - >>> logical_right_shift(1, 1) - '0b0' - >>> logical_right_shift(1, 5) - '0b0' - >>> logical_right_shift(17, 2) - '0b100' - >>> logical_right_shift(1983, 4) - '0b1111011' - >>> logical_right_shift(1, -1) - Traceback (most recent call last): - ... - ValueError: both inputs must be positive integers - """ - if number < 0 or shift_amount < 0: - raise ValueError("both inputs must be positive integers") - - binary_number = str(bin(number))[2:] - if shift_amount >= len(binary_number): - return "0b0" - shifted_binary_number = binary_number[: len(binary_number) - shift_amount] - return "0b" + shifted_binary_number - - -def arithmetic_right_shift(number: int, shift_amount: int) -> str: - """ - Take in 2 integers. - 'number' is the integer to be arithmetically right shifted 'shift_amount' times. - i.e. (number >> shift_amount) - Return the shifted binary representation. - - >>> arithmetic_right_shift(0, 1) - '0b00' - >>> arithmetic_right_shift(1, 1) - '0b00' - >>> arithmetic_right_shift(-1, 1) - '0b11' - >>> arithmetic_right_shift(17, 2) - '0b000100' - >>> arithmetic_right_shift(-17, 2) - '0b111011' - >>> arithmetic_right_shift(-1983, 4) - '0b111110000100' - """ - if number >= 0: # Get binary representation of positive number - binary_number = "0" + str(bin(number)).strip("-")[2:] - else: # Get binary (2's complement) representation of negative number - binary_number_length = len(bin(number)[3:]) # Find 2's complement of number - binary_number = bin(abs(number) - (1 << binary_number_length))[3:] - binary_number = ( - "1" + "0" * (binary_number_length - len(binary_number)) + binary_number - ) - - if shift_amount >= len(binary_number): - return "0b" + binary_number[0] * len(binary_number) - return ( - "0b" - + binary_number[0] * shift_amount - + binary_number[: len(binary_number) - shift_amount] - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_twos_complement.py b/bit_manipulation/binary_twos_complement.py deleted file mode 100644 index 2c064ec142d7..000000000000 --- a/bit_manipulation/binary_twos_complement.py +++ /dev/null @@ -1,43 +0,0 @@ -# Information on 2's complement: https://en.wikipedia.org/wiki/Two%27s_complement - - -def twos_complement(number: int) -> str: - """ - Take in a negative integer 'number'. - Return the two's complement representation of 'number'. - - >>> twos_complement(0) - '0b0' - >>> twos_complement(-1) - '0b11' - >>> twos_complement(-5) - '0b1011' - >>> twos_complement(-17) - '0b101111' - >>> twos_complement(-207) - '0b100110001' - >>> twos_complement(1) - Traceback (most recent call last): - ... - ValueError: input must be a negative integer - """ - if number > 0: - raise ValueError("input must be a negative integer") - binary_number_length = len(bin(number)[3:]) - twos_complement_number = bin(abs(number) - (1 << binary_number_length))[3:] - twos_complement_number = ( - ( - "1" - + "0" * (binary_number_length - len(twos_complement_number)) - + twos_complement_number - ) - if number < 0 - else "0" - ) - return "0b" + twos_complement_number - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/binary_xor_operator.py b/bit_manipulation/binary_xor_operator.py deleted file mode 100644 index 6206c70a99f6..000000000000 --- a/bit_manipulation/binary_xor_operator.py +++ /dev/null @@ -1,52 +0,0 @@ -# https://www.tutorialspoint.com/python3/bitwise_operators_example.htm - - -def binary_xor(a: int, b: int) -> str: - """ - Take in 2 integers, convert them to binary, - return a binary number that is the - result of a binary xor operation on the integers provided. - - >>> binary_xor(25, 32) - '0b111001' - >>> binary_xor(37, 50) - '0b010111' - >>> binary_xor(21, 30) - '0b01011' - >>> binary_xor(58, 73) - '0b1110011' - >>> binary_xor(0, 255) - '0b11111111' - >>> binary_xor(256, 256) - '0b000000000' - >>> binary_xor(0, -1) - Traceback (most recent call last): - ... - ValueError: the value of both inputs must be positive - >>> binary_xor(0, 1.1) - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - >>> binary_xor("0", "1") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - """ - if a < 0 or b < 0: - raise ValueError("the value of both inputs must be positive") - - a_binary = str(bin(a))[2:] # remove the leading "0b" - b_binary = str(bin(b))[2:] # remove the leading "0b" - - max_len = max(len(a_binary), len(b_binary)) - - return "0b" + "".join( - str(int(char_a != char_b)) - for char_a, char_b in zip(a_binary.zfill(max_len), b_binary.zfill(max_len)) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/bitwise_addition_recursive.py b/bit_manipulation/bitwise_addition_recursive.py deleted file mode 100644 index 70eaf6887b64..000000000000 --- a/bit_manipulation/bitwise_addition_recursive.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Calculates the sum of two non-negative integers using bitwise operators -Wikipedia explanation: https://en.wikipedia.org/wiki/Binary_number -""" - - -def bitwise_addition_recursive(number: int, other_number: int) -> int: - """ - >>> bitwise_addition_recursive(4, 5) - 9 - >>> bitwise_addition_recursive(8, 9) - 17 - >>> bitwise_addition_recursive(0, 4) - 4 - >>> bitwise_addition_recursive(4.5, 9) - Traceback (most recent call last): - ... - TypeError: Both arguments MUST be integers! - >>> bitwise_addition_recursive('4', 9) - Traceback (most recent call last): - ... - TypeError: Both arguments MUST be integers! - >>> bitwise_addition_recursive('4.5', 9) - Traceback (most recent call last): - ... - TypeError: Both arguments MUST be integers! - >>> bitwise_addition_recursive(-1, 9) - Traceback (most recent call last): - ... - ValueError: Both arguments MUST be non-negative! - >>> bitwise_addition_recursive(1, -9) - Traceback (most recent call last): - ... - ValueError: Both arguments MUST be non-negative! - """ - - if not isinstance(number, int) or not isinstance(other_number, int): - raise TypeError("Both arguments MUST be integers!") - - if number < 0 or other_number < 0: - raise ValueError("Both arguments MUST be non-negative!") - - bitwise_sum = number ^ other_number - carry = number & other_number - - if carry == 0: - return bitwise_sum - - return bitwise_addition_recursive(bitwise_sum, carry << 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/count_1s_brian_kernighan_method.py b/bit_manipulation/count_1s_brian_kernighan_method.py deleted file mode 100644 index 2ed81b09d675..000000000000 --- a/bit_manipulation/count_1s_brian_kernighan_method.py +++ /dev/null @@ -1,46 +0,0 @@ -def get_1s_count(number: int) -> int: - """ - Count the number of set bits in a 32 bit integer using Brian Kernighan's way. - Ref - https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan - >>> get_1s_count(25) - 3 - >>> get_1s_count(37) - 3 - >>> get_1s_count(21) - 3 - >>> get_1s_count(58) - 4 - >>> get_1s_count(0) - 0 - >>> get_1s_count(256) - 1 - >>> get_1s_count(-1) - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - >>> get_1s_count(0.8) - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - >>> get_1s_count("25") - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - """ - if not isinstance(number, int) or number < 0: - raise ValueError("Input must be a non-negative integer") - - count = 0 - while number: - # This way we arrive at next set bit (next 1) instead of looping - # through each bit and checking for 1s hence the - # loop won't run 32 times it will only run the number of `1` times - number &= number - 1 - count += 1 - return count - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/count_number_of_one_bits.py b/bit_manipulation/count_number_of_one_bits.py deleted file mode 100644 index f0c9f927620a..000000000000 --- a/bit_manipulation/count_number_of_one_bits.py +++ /dev/null @@ -1,93 +0,0 @@ -from timeit import timeit - - -def get_set_bits_count_using_brian_kernighans_algorithm(number: int) -> int: - """ - Count the number of set bits in a 32 bit integer - >>> get_set_bits_count_using_brian_kernighans_algorithm(25) - 3 - >>> get_set_bits_count_using_brian_kernighans_algorithm(37) - 3 - >>> get_set_bits_count_using_brian_kernighans_algorithm(21) - 3 - >>> get_set_bits_count_using_brian_kernighans_algorithm(58) - 4 - >>> get_set_bits_count_using_brian_kernighans_algorithm(0) - 0 - >>> get_set_bits_count_using_brian_kernighans_algorithm(256) - 1 - >>> get_set_bits_count_using_brian_kernighans_algorithm(-1) - Traceback (most recent call last): - ... - ValueError: the value of input must not be negative - """ - if number < 0: - raise ValueError("the value of input must not be negative") - result = 0 - while number: - number &= number - 1 - result += 1 - return result - - -def get_set_bits_count_using_modulo_operator(number: int) -> int: - """ - Count the number of set bits in a 32 bit integer - >>> get_set_bits_count_using_modulo_operator(25) - 3 - >>> get_set_bits_count_using_modulo_operator(37) - 3 - >>> get_set_bits_count_using_modulo_operator(21) - 3 - >>> get_set_bits_count_using_modulo_operator(58) - 4 - >>> get_set_bits_count_using_modulo_operator(0) - 0 - >>> get_set_bits_count_using_modulo_operator(256) - 1 - >>> get_set_bits_count_using_modulo_operator(-1) - Traceback (most recent call last): - ... - ValueError: the value of input must not be negative - """ - if number < 0: - raise ValueError("the value of input must not be negative") - result = 0 - while number: - if number % 2 == 1: - result += 1 - number >>= 1 - return result - - -def benchmark() -> None: - """ - Benchmark code for comparing 2 functions, with different length int values. - Brian Kernighan's algorithm is consistently faster than using modulo_operator. - """ - - def do_benchmark(number: int) -> None: - setup = "import __main__ as z" - print(f"Benchmark when {number = }:") - print(f"{get_set_bits_count_using_modulo_operator(number) = }") - timing = timeit( - f"z.get_set_bits_count_using_modulo_operator({number})", setup=setup - ) - print(f"timeit() runs in {timing} seconds") - print(f"{get_set_bits_count_using_brian_kernighans_algorithm(number) = }") - timing = timeit( - f"z.get_set_bits_count_using_brian_kernighans_algorithm({number})", - setup=setup, - ) - print(f"timeit() runs in {timing} seconds") - - for number in (25, 37, 58, 0): - do_benchmark(number) - print() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - benchmark() diff --git a/bit_manipulation/excess_3_code.py b/bit_manipulation/excess_3_code.py deleted file mode 100644 index 7beaabd90e8a..000000000000 --- a/bit_manipulation/excess_3_code.py +++ /dev/null @@ -1,27 +0,0 @@ -def excess_3_code(number: int) -> str: - """ - Find excess-3 code of integer base 10. - Add 3 to all digits in a decimal number then convert to a binary-coded decimal. - https://en.wikipedia.org/wiki/Excess-3 - - >>> excess_3_code(0) - '0b0011' - >>> excess_3_code(3) - '0b0110' - >>> excess_3_code(2) - '0b0101' - >>> excess_3_code(20) - '0b01010011' - >>> excess_3_code(120) - '0b010001010011' - """ - num = "" - for digit in str(max(0, number)): - num += str(bin(int(digit) + 3))[2:].zfill(4) - return "0b" + num - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/find_previous_power_of_two.py b/bit_manipulation/find_previous_power_of_two.py deleted file mode 100644 index 8ac74ac98478..000000000000 --- a/bit_manipulation/find_previous_power_of_two.py +++ /dev/null @@ -1,30 +0,0 @@ -def find_previous_power_of_two(number: int) -> int: - """ - Find the largest power of two that is less than or equal to a given integer. - https://stackoverflow.com/questions/1322510 - - >>> [find_previous_power_of_two(i) for i in range(18)] - [0, 1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16] - >>> find_previous_power_of_two(-5) - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - >>> find_previous_power_of_two(10.5) - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - """ - if not isinstance(number, int) or number < 0: - raise ValueError("Input must be a non-negative integer") - if number == 0: - return 0 - power = 1 - while power <= number: - power <<= 1 # Equivalent to multiplying by 2 - return power >> 1 if number > 1 else 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/gray_code_sequence.py b/bit_manipulation/gray_code_sequence.py deleted file mode 100644 index 636578d89754..000000000000 --- a/bit_manipulation/gray_code_sequence.py +++ /dev/null @@ -1,94 +0,0 @@ -def gray_code(bit_count: int) -> list: - """ - Takes in an integer n and returns a n-bit - gray code sequence - An n-bit gray code sequence is a sequence of 2^n - integers where: - - a) Every integer is between [0,2^n -1] inclusive - b) The sequence begins with 0 - c) An integer appears at most one times in the sequence - d)The binary representation of every pair of integers differ - by exactly one bit - e) The binary representation of first and last bit also - differ by exactly one bit - - >>> gray_code(2) - [0, 1, 3, 2] - - >>> gray_code(1) - [0, 1] - - >>> gray_code(3) - [0, 1, 3, 2, 6, 7, 5, 4] - - >>> gray_code(-1) - Traceback (most recent call last): - ... - ValueError: The given input must be positive - - >>> gray_code(10.6) - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for <<: 'int' and 'float' - """ - - # bit count represents no. of bits in the gray code - if bit_count < 0: - raise ValueError("The given input must be positive") - - # get the generated string sequence - sequence = gray_code_sequence_string(bit_count) - # - # convert them to integers - for i in range(len(sequence)): - sequence[i] = int(sequence[i], 2) - - return sequence - - -def gray_code_sequence_string(bit_count: int) -> list: - """ - Will output the n-bit grey sequence as a - string of bits - - >>> gray_code_sequence_string(2) - ['00', '01', '11', '10'] - - >>> gray_code_sequence_string(1) - ['0', '1'] - """ - - # The approach is a recursive one - # Base case achieved when either n = 0 or n=1 - if bit_count == 0: - return ["0"] - - if bit_count == 1: - return ["0", "1"] - - seq_len = 1 << bit_count # defines the length of the sequence - # 1<< n is equivalent to 2^n - - # recursive answer will generate answer for n-1 bits - smaller_sequence = gray_code_sequence_string(bit_count - 1) - - sequence = [] - - # append 0 to first half of the smaller sequence generated - for i in range(seq_len // 2): - generated_no = "0" + smaller_sequence[i] - sequence.append(generated_no) - - # append 1 to second half ... start from the end of the list - for i in reversed(range(seq_len // 2)): - generated_no = "1" + smaller_sequence[i] - sequence.append(generated_no) - - return sequence - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/highest_set_bit.py b/bit_manipulation/highest_set_bit.py deleted file mode 100644 index 21d92dcb9492..000000000000 --- a/bit_manipulation/highest_set_bit.py +++ /dev/null @@ -1,34 +0,0 @@ -def get_highest_set_bit_position(number: int) -> int: - """ - Returns position of the highest set bit of a number. - Ref - https://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious - >>> get_highest_set_bit_position(25) - 5 - >>> get_highest_set_bit_position(37) - 6 - >>> get_highest_set_bit_position(1) - 1 - >>> get_highest_set_bit_position(4) - 3 - >>> get_highest_set_bit_position(0) - 0 - >>> get_highest_set_bit_position(0.8) - Traceback (most recent call last): - ... - TypeError: Input value must be an 'int' type - """ - if not isinstance(number, int): - raise TypeError("Input value must be an 'int' type") - - position = 0 - while number: - position += 1 - number >>= 1 - - return position - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/index_of_rightmost_set_bit.py b/bit_manipulation/index_of_rightmost_set_bit.py deleted file mode 100644 index c9c911660b08..000000000000 --- a/bit_manipulation/index_of_rightmost_set_bit.py +++ /dev/null @@ -1,51 +0,0 @@ -# Reference: https://www.geeksforgeeks.org/position-of-rightmost-set-bit/ - - -def get_index_of_rightmost_set_bit(number: int) -> int: - """ - Take in a positive integer 'number'. - Returns the zero-based index of first set bit in that 'number' from right. - Returns -1, If no set bit found. - - >>> get_index_of_rightmost_set_bit(0) - -1 - >>> get_index_of_rightmost_set_bit(5) - 0 - >>> get_index_of_rightmost_set_bit(36) - 2 - >>> get_index_of_rightmost_set_bit(8) - 3 - >>> get_index_of_rightmost_set_bit(-18) - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - >>> get_index_of_rightmost_set_bit('test') - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - >>> get_index_of_rightmost_set_bit(1.25) - Traceback (most recent call last): - ... - ValueError: Input must be a non-negative integer - """ - - if not isinstance(number, int) or number < 0: - raise ValueError("Input must be a non-negative integer") - - intermediate = number & ~(number - 1) - index = 0 - while intermediate: - intermediate >>= 1 - index += 1 - return index - 1 - - -if __name__ == "__main__": - """ - Finding the index of rightmost set bit has some very peculiar use-cases, - especially in finding missing or/and repeating numbers in a list of - positive integers. - """ - import doctest - - doctest.testmod(verbose=True) diff --git a/bit_manipulation/is_even.py b/bit_manipulation/is_even.py deleted file mode 100644 index 6f95a1160797..000000000000 --- a/bit_manipulation/is_even.py +++ /dev/null @@ -1,37 +0,0 @@ -def is_even(number: int) -> bool: - """ - return true if the input integer is even - Explanation: Lets take a look at the following decimal to binary conversions - 2 => 10 - 14 => 1110 - 100 => 1100100 - 3 => 11 - 13 => 1101 - 101 => 1100101 - from the above examples we can observe that - for all the odd integers there is always 1 set bit at the end - also, 1 in binary can be represented as 001, 00001, or 0000001 - so for any odd integer n => n&1 is always equals 1 else the integer is even - - >>> is_even(1) - False - >>> is_even(4) - True - >>> is_even(9) - False - >>> is_even(15) - False - >>> is_even(40) - True - >>> is_even(100) - True - >>> is_even(101) - False - """ - return number & 1 == 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/is_power_of_two.py b/bit_manipulation/is_power_of_two.py deleted file mode 100644 index 023e979fe51c..000000000000 --- a/bit_manipulation/is_power_of_two.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : November 1, 2022 - -Task: -Given a positive int number. Return True if this number is power of 2 -or False otherwise. - -Implementation notes: Use bit manipulation. -For example if the number is the power of two it's bits representation: -n = 0..100..00 -n - 1 = 0..011..11 - -n & (n - 1) - no intersections = 0 -""" - - -def is_power_of_two(number: int) -> bool: - """ - Return True if this number is power of 2 or False otherwise. - - >>> is_power_of_two(0) - True - >>> is_power_of_two(1) - True - >>> is_power_of_two(2) - True - >>> is_power_of_two(4) - True - >>> is_power_of_two(6) - False - >>> is_power_of_two(8) - True - >>> is_power_of_two(17) - False - >>> is_power_of_two(-1) - Traceback (most recent call last): - ... - ValueError: number must not be negative - >>> is_power_of_two(1.2) - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for &: 'float' and 'float' - - # Test all powers of 2 from 0 to 10,000 - >>> all(is_power_of_two(int(2 ** i)) for i in range(10000)) - True - """ - if number < 0: - raise ValueError("number must not be negative") - return number & (number - 1) == 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/largest_pow_of_two_le_num.py b/bit_manipulation/largest_pow_of_two_le_num.py deleted file mode 100644 index 6ef827312199..000000000000 --- a/bit_manipulation/largest_pow_of_two_le_num.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Author : Naman Sharma -Date : October 2, 2023 - -Task: -To Find the largest power of 2 less than or equal to a given number. - -Implementation notes: Use bit manipulation. -We start from 1 & left shift the set bit to check if (res<<1)<=number. -Each left bit shift represents a pow of 2. - -For example: -number: 15 -res: 1 0b1 - 2 0b10 - 4 0b100 - 8 0b1000 - 16 0b10000 (Exit) -""" - - -def largest_pow_of_two_le_num(number: int) -> int: - """ - Return the largest power of two less than or equal to a number. - - >>> largest_pow_of_two_le_num(0) - 0 - >>> largest_pow_of_two_le_num(1) - 1 - >>> largest_pow_of_two_le_num(-1) - 0 - >>> largest_pow_of_two_le_num(3) - 2 - >>> largest_pow_of_two_le_num(15) - 8 - >>> largest_pow_of_two_le_num(99) - 64 - >>> largest_pow_of_two_le_num(178) - 128 - >>> largest_pow_of_two_le_num(999999) - 524288 - >>> largest_pow_of_two_le_num(99.9) - Traceback (most recent call last): - ... - TypeError: Input value must be a 'int' type - """ - if isinstance(number, float): - raise TypeError("Input value must be a 'int' type") - if number <= 0: - return 0 - res = 1 - while (res << 1) <= number: - res <<= 1 - return res - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/missing_number.py b/bit_manipulation/missing_number.py deleted file mode 100644 index 554887b17562..000000000000 --- a/bit_manipulation/missing_number.py +++ /dev/null @@ -1,40 +0,0 @@ -def find_missing_number(nums: list[int]) -> int: - """ - Finds the missing number in a list of consecutive integers. - - Args: - nums: A list of integers. - - Returns: - The missing number. - - Example: - >>> find_missing_number([0, 1, 3, 4]) - 2 - >>> find_missing_number([4, 3, 1, 0]) - 2 - >>> find_missing_number([-4, -3, -1, 0]) - -2 - >>> find_missing_number([-2, 2, 1, 3, 0]) - -1 - >>> find_missing_number([1, 3, 4, 5, 6]) - 2 - >>> find_missing_number([6, 5, 4, 2, 1]) - 3 - >>> find_missing_number([6, 1, 5, 3, 4]) - 2 - """ - low = min(nums) - high = max(nums) - missing_number = high - - for i in range(low, high): - missing_number ^= i ^ nums[i - low] - - return missing_number - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/numbers_different_signs.py b/bit_manipulation/numbers_different_signs.py deleted file mode 100644 index cf8b6d86f1eb..000000000000 --- a/bit_manipulation/numbers_different_signs.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : November 30, 2022 - -Task: -Given two int numbers. Return True these numbers have opposite signs -or False otherwise. - -Implementation notes: Use bit manipulation. -Use XOR for two numbers. -""" - - -def different_signs(num1: int, num2: int) -> bool: - """ - Return True if numbers have opposite signs False otherwise. - - >>> different_signs(1, -1) - True - >>> different_signs(1, 1) - False - >>> different_signs(1000000000000000000000000000, -1000000000000000000000000000) - True - >>> different_signs(-1000000000000000000000000000, 1000000000000000000000000000) - True - >>> different_signs(50, 278) - False - >>> different_signs(0, 2) - False - >>> different_signs(2, 0) - False - """ - return num1 ^ num2 < 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/power_of_4.py b/bit_manipulation/power_of_4.py deleted file mode 100644 index 09e6e28621df..000000000000 --- a/bit_manipulation/power_of_4.py +++ /dev/null @@ -1,67 +0,0 @@ -""" - -Task: -Given a positive int number. Return True if this number is power of 4 -or False otherwise. - -Implementation notes: Use bit manipulation. -For example if the number is the power of 2 it's bits representation: -n = 0..100..00 -n - 1 = 0..011..11 - -n & (n - 1) - no intersections = 0 -If the number is a power of 4 then it should be a power of 2 -and the set bit should be at an odd position. -""" - - -def power_of_4(number: int) -> bool: - """ - Return True if this number is power of 4 or False otherwise. - - >>> power_of_4(0) - Traceback (most recent call last): - ... - ValueError: number must be positive - >>> power_of_4(1) - True - >>> power_of_4(2) - False - >>> power_of_4(4) - True - >>> power_of_4(6) - False - >>> power_of_4(8) - False - >>> power_of_4(17) - False - >>> power_of_4(64) - True - >>> power_of_4(-1) - Traceback (most recent call last): - ... - ValueError: number must be positive - >>> power_of_4(1.2) - Traceback (most recent call last): - ... - TypeError: number must be an integer - - """ - if not isinstance(number, int): - raise TypeError("number must be an integer") - if number <= 0: - raise ValueError("number must be positive") - if number & (number - 1) == 0: - c = 0 - while number: - c += 1 - number >>= 1 - return c % 2 == 1 - else: - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/reverse_bits.py b/bit_manipulation/reverse_bits.py deleted file mode 100644 index 74b4f2563234..000000000000 --- a/bit_manipulation/reverse_bits.py +++ /dev/null @@ -1,86 +0,0 @@ -def get_reverse_bit_string(number: int) -> str: - """ - return the bit string of an integer - - >>> get_reverse_bit_string(9) - '10010000000000000000000000000000' - >>> get_reverse_bit_string(43) - '11010100000000000000000000000000' - >>> get_reverse_bit_string(2873) - '10011100110100000000000000000000' - >>> get_reverse_bit_string("this is not a number") - Traceback (most recent call last): - ... - TypeError: operation can not be conducted on a object of type str - """ - if not isinstance(number, int): - msg = ( - "operation can not be conducted on a object of type " - f"{type(number).__name__}" - ) - raise TypeError(msg) - bit_string = "" - for _ in range(32): - bit_string += str(number % 2) - number = number >> 1 - return bit_string - - -def reverse_bit(number: int) -> str: - """ - Take in an 32 bit integer, reverse its bits, - return a string of reverse bits - - result of a reverse_bit and operation on the integer provided. - - >>> reverse_bit(25) - '00000000000000000000000000011001' - >>> reverse_bit(37) - '00000000000000000000000000100101' - >>> reverse_bit(21) - '00000000000000000000000000010101' - >>> reverse_bit(58) - '00000000000000000000000000111010' - >>> reverse_bit(0) - '00000000000000000000000000000000' - >>> reverse_bit(256) - '00000000000000000000000100000000' - >>> reverse_bit(-1) - Traceback (most recent call last): - ... - ValueError: the value of input must be positive - - >>> reverse_bit(1.1) - Traceback (most recent call last): - ... - TypeError: Input value must be a 'int' type - - >>> reverse_bit("0") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - """ - if number < 0: - raise ValueError("the value of input must be positive") - elif isinstance(number, float): - raise TypeError("Input value must be a 'int' type") - elif isinstance(number, str): - raise TypeError("'<' not supported between instances of 'str' and 'int'") - result = 0 - # iterator over [1 to 32],since we are dealing with 32 bit integer - for _ in range(1, 33): - # left shift the bits by unity - result = result << 1 - # get the end bit - end_bit = number % 2 - # right shift the bits by unity - number = number >> 1 - # add that bit to our ans - result = result | end_bit - return get_reverse_bit_string(result) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/single_bit_manipulation_operations.py b/bit_manipulation/single_bit_manipulation_operations.py deleted file mode 100644 index fcbf033ccb24..000000000000 --- a/bit_manipulation/single_bit_manipulation_operations.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python3 - -"""Provide the functionality to manipulate a single bit.""" - - -def set_bit(number: int, position: int) -> int: - """ - Set the bit at position to 1. - - Details: perform bitwise or for given number and X. - Where X is a number with all the bits - zeroes and bit on given - position - one. - - >>> set_bit(0b1101, 1) # 0b1111 - 15 - >>> set_bit(0b0, 5) # 0b100000 - 32 - >>> set_bit(0b1111, 1) # 0b1111 - 15 - """ - return number | (1 << position) - - -def clear_bit(number: int, position: int) -> int: - """ - Set the bit at position to 0. - - Details: perform bitwise and for given number and X. - Where X is a number with all the bits - ones and bit on given - position - zero. - - >>> clear_bit(0b10010, 1) # 0b10000 - 16 - >>> clear_bit(0b0, 5) # 0b0 - 0 - """ - return number & ~(1 << position) - - -def flip_bit(number: int, position: int) -> int: - """ - Flip the bit at position. - - Details: perform bitwise xor for given number and X. - Where X is a number with all the bits - zeroes and bit on given - position - one. - - >>> flip_bit(0b101, 1) # 0b111 - 7 - >>> flip_bit(0b101, 0) # 0b100 - 4 - """ - return number ^ (1 << position) - - -def is_bit_set(number: int, position: int) -> bool: - """ - Is the bit at position set? - - Details: Shift the bit at position to be the first (smallest) bit. - Then check if the first bit is set by anding the shifted number with 1. - - >>> is_bit_set(0b1010, 0) - False - >>> is_bit_set(0b1010, 1) - True - >>> is_bit_set(0b1010, 2) - False - >>> is_bit_set(0b1010, 3) - True - >>> is_bit_set(0b0, 17) - False - """ - return ((number >> position) & 1) == 1 - - -def get_bit(number: int, position: int) -> int: - """ - Get the bit at the given position - - Details: perform bitwise and for the given number and X, - Where X is a number with all the bits - zeroes and bit on given position - one. - If the result is not equal to 0, then the bit on the given position is 1, else 0. - - >>> get_bit(0b1010, 0) - 0 - >>> get_bit(0b1010, 1) - 1 - >>> get_bit(0b1010, 2) - 0 - >>> get_bit(0b1010, 3) - 1 - """ - return int((number & (1 << position)) != 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/bit_manipulation/swap_all_odd_and_even_bits.py b/bit_manipulation/swap_all_odd_and_even_bits.py deleted file mode 100644 index 5ec84417bea6..000000000000 --- a/bit_manipulation/swap_all_odd_and_even_bits.py +++ /dev/null @@ -1,58 +0,0 @@ -def show_bits(before: int, after: int) -> str: - """ - >>> print(show_bits(0, 0xFFFF)) - 0: 00000000 - 65535: 1111111111111111 - """ - return f"{before:>5}: {before:08b}\n{after:>5}: {after:08b}" - - -def swap_odd_even_bits(num: int) -> int: - """ - 1. We use bitwise AND operations to separate the even bits (0, 2, 4, 6, etc.) and - odd bits (1, 3, 5, 7, etc.) in the input number. - 2. We then right-shift the even bits by 1 position and left-shift the odd bits by - 1 position to swap them. - 3. Finally, we combine the swapped even and odd bits using a bitwise OR operation - to obtain the final result. - >>> print(show_bits(0, swap_odd_even_bits(0))) - 0: 00000000 - 0: 00000000 - >>> print(show_bits(1, swap_odd_even_bits(1))) - 1: 00000001 - 2: 00000010 - >>> print(show_bits(2, swap_odd_even_bits(2))) - 2: 00000010 - 1: 00000001 - >>> print(show_bits(3, swap_odd_even_bits(3))) - 3: 00000011 - 3: 00000011 - >>> print(show_bits(4, swap_odd_even_bits(4))) - 4: 00000100 - 8: 00001000 - >>> print(show_bits(5, swap_odd_even_bits(5))) - 5: 00000101 - 10: 00001010 - >>> print(show_bits(6, swap_odd_even_bits(6))) - 6: 00000110 - 9: 00001001 - >>> print(show_bits(23, swap_odd_even_bits(23))) - 23: 00010111 - 43: 00101011 - """ - # Get all even bits - 0xAAAAAAAA is a 32-bit number with all even bits set to 1 - even_bits = num & 0xAAAAAAAA - - # Get all odd bits - 0x55555555 is a 32-bit number with all odd bits set to 1 - odd_bits = num & 0x55555555 - - # Right shift even bits and left shift odd bits and swap them - return even_bits >> 1 | odd_bits << 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - for i in (-1, 0, 1, 2, 3, 4, 23, 24): - print(show_bits(i, swap_odd_even_bits(i)), "\n") diff --git a/blockchain/README.md b/blockchain/README.md deleted file mode 100644 index b5fab7b36eaa..000000000000 --- a/blockchain/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Blockchain - -A Blockchain is a type of **distributed ledger** technology (DLT) that consists of growing list of records, called **blocks**, that are securely linked together using **cryptography**. - -Let's breakdown the terminologies in the above definition. We find below terminologies, - -- Digital Ledger Technology (DLT) -- Blocks -- Cryptography - -## Digital Ledger Technology - - It is otherwise called as distributed ledger technology. It is simply the opposite of centralized database. Firstly, what is a **ledger**? A ledger is a book or collection of accounts that records account transactions. - - *Why is Blockchain addressed as digital ledger if it can record more than account transactions? What other transaction details and information can it hold?* - -Digital Ledger Technology is just a ledger which is shared among multiple nodes. This way there exist no need for central authority to hold the info. Okay, how is it differentiated from central database and what are their benefits? - -There is an organization which has 4 branches whose data are stored in a centralized database. So even if one branch needs any data from ledger they need an approval from database in charge. And if one hacks the central database he gets to tamper and control all the data. - -Now lets assume every branch has a copy of the ledger and then once anything is added to the ledger by anyone branch it is gonna automatically reflect in all other ledgers available in other branch. This is done using Peer-to-peer network. - -So this means even if information is tampered in one branch we can find out. If one branch is hacked we can be alerted ,so we can safeguard other branches. Now, assume these branches as computers or nodes and the ledger is a transaction record or digital receipt. If one ledger is hacked in a node we can detect since there will be a mismatch in comparison with other node information. So this is the concept of Digital Ledger Technology. - -*Is it required for all nodes to have access to all information in other nodes? Wouldn't this require enormous storage space in each node?* - -## Blocks - -In short a block is nothing but collections of records with a labelled header. These are connected cryptographically. Once a new block is added to a chain, the previous block is connected, more precisely said as locked and hence, will remain unaltered. We can understand this concept once we get a clear understanding of working mechanism of blockchain. - -## Cryptography - -It is the practice and study of secure communication techniques in the midst of adversarial behavior. More broadly, cryptography is the creation and analysis of protocols that prevent third parties or the general public from accessing private messages. - -*Which cryptography technology is most widely used in blockchain and why?* - -So, in general, blockchain technology is a distributed record holder which records the information about ownership of an asset. To define precisely, -> Blockchain is a distributed, immutable ledger that makes it easier to record transactions and track assets in a corporate network. -An asset could be tangible (such as a house, car, cash, or land) or intangible (such as a business) (intellectual property, patents, copyrights, branding). A blockchain network can track and sell almost anything of value, lowering risk and costs for everyone involved. - -So this is all about introduction to blockchain technology. To learn more about the topic refer below links.... -* <https://en.wikipedia.org/wiki/Blockchain> -* <https://en.wikipedia.org/wiki/Chinese_remainder_theorem> -* <https://en.wikipedia.org/wiki/Diophantine_equation> -* <https://www.geeksforgeeks.org/modular-division/> diff --git a/blockchain/__init__.py b/blockchain/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/blockchain/diophantine_equation.py b/blockchain/diophantine_equation.py deleted file mode 100644 index ae6a145d2922..000000000000 --- a/blockchain/diophantine_equation.py +++ /dev/null @@ -1,109 +0,0 @@ -from __future__ import annotations - -from maths.greatest_common_divisor import greatest_common_divisor - - -def diophantine(a: int, b: int, c: int) -> tuple[float, float]: - """ - Diophantine Equation : Given integers a,b,c ( at least one of a and b != 0), the - diophantine equation a*x + b*y = c has a solution (where x and y are integers) - iff greatest_common_divisor(a,b) divides c. - - GCD ( Greatest Common Divisor ) or HCF ( Highest Common Factor ) - - >>> diophantine(10,6,14) - (-7.0, 14.0) - - >>> diophantine(391,299,-69) - (9.0, -12.0) - - But above equation has one more solution i.e., x = -4, y = 5. - That's why we need diophantine all solution function. - - """ - - assert ( - c % greatest_common_divisor(a, b) == 0 - ) # greatest_common_divisor(a,b) is in maths directory - (d, x, y) = extended_gcd(a, b) # extended_gcd(a,b) function implemented below - r = c / d - return (r * x, r * y) - - -def diophantine_all_soln(a: int, b: int, c: int, n: int = 2) -> None: - """ - Lemma : if n|ab and gcd(a,n) = 1, then n|b. - - Finding All solutions of Diophantine Equations: - - Theorem : Let gcd(a,b) = d, a = d*p, b = d*q. If (x0,y0) is a solution of - Diophantine Equation a*x + b*y = c. a*x0 + b*y0 = c, then all the - solutions have the form a(x0 + t*q) + b(y0 - t*p) = c, - where t is an arbitrary integer. - - n is the number of solution you want, n = 2 by default - - >>> diophantine_all_soln(10, 6, 14) - -7.0 14.0 - -4.0 9.0 - - >>> diophantine_all_soln(10, 6, 14, 4) - -7.0 14.0 - -4.0 9.0 - -1.0 4.0 - 2.0 -1.0 - - >>> diophantine_all_soln(391, 299, -69, n = 4) - 9.0 -12.0 - 22.0 -29.0 - 35.0 -46.0 - 48.0 -63.0 - - """ - (x0, y0) = diophantine(a, b, c) # Initial value - d = greatest_common_divisor(a, b) - p = a // d - q = b // d - - for i in range(n): - x = x0 + i * q - y = y0 - i * p - print(x, y) - - -def extended_gcd(a: int, b: int) -> tuple[int, int, int]: - """ - Extended Euclid's Algorithm : If d divides a and b and d = a*x + b*y for integers - x and y, then d = gcd(a,b) - - >>> extended_gcd(10, 6) - (2, -1, 2) - - >>> extended_gcd(7, 5) - (1, -2, 3) - - """ - assert a >= 0 - assert b >= 0 - - if b == 0: - d, x, y = a, 1, 0 - else: - (d, p, q) = extended_gcd(b, a % b) - x = q - y = p - q * (a // b) - - assert a % d == 0 - assert b % d == 0 - assert d == a * x + b * y - - return (d, x, y) - - -if __name__ == "__main__": - from doctest import testmod - - testmod(name="diophantine", verbose=True) - testmod(name="diophantine_all_soln", verbose=True) - testmod(name="extended_gcd", verbose=True) - testmod(name="greatest_common_divisor", verbose=True) diff --git a/boolean_algebra/README.md b/boolean_algebra/README.md deleted file mode 100644 index 45969c855f9c..000000000000 --- a/boolean_algebra/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Boolean Algebra - -Boolean algebra is used to do arithmetic with bits of values True (1) or False (0). -There are three basic operations: 'and', 'or' and 'not'. - -* <https://en.wikipedia.org/wiki/Boolean_algebra> -* <https://plato.stanford.edu/entries/boolalg-math/> diff --git a/boolean_algebra/__init__.py b/boolean_algebra/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/boolean_algebra/and_gate.py b/boolean_algebra/and_gate.py deleted file mode 100644 index 6ae66b5b0a77..000000000000 --- a/boolean_algebra/and_gate.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -An AND Gate is a logic gate in boolean algebra which results to 1 (True) if both the -inputs are 1, and 0 (False) otherwise. - -Following is the truth table of an AND Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 0 | - | 0 | 1 | 0 | - | 1 | 0 | 0 | - | 1 | 1 | 1 | - ------------------------------ - -Refer - https://www.geeksforgeeks.org/logic-gates-in-python/ -""" - - -def and_gate(input_1: int, input_2: int) -> int: - """ - Calculate AND of the input values - - >>> and_gate(0, 0) - 0 - >>> and_gate(0, 1) - 0 - >>> and_gate(1, 0) - 0 - >>> and_gate(1, 1) - 1 - """ - return int(input_1 and input_2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/imply_gate.py b/boolean_algebra/imply_gate.py deleted file mode 100644 index b64ebaceb306..000000000000 --- a/boolean_algebra/imply_gate.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -An IMPLY Gate is a logic gate in boolean algebra which results to 1 if -either input 1 is 0, or if input 1 is 1, then the output is 1 only if input 2 is 1. -It is true if input 1 implies input 2. - -Following is the truth table of an IMPLY Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 1 | - | 0 | 1 | 1 | - | 1 | 0 | 0 | - | 1 | 1 | 1 | - ------------------------------ - -Refer - https://en.wikipedia.org/wiki/IMPLY_gate -""" - - -def imply_gate(input_1: int, input_2: int) -> int: - """ - Calculate IMPLY of the input values - - >>> imply_gate(0, 0) - 1 - >>> imply_gate(0, 1) - 1 - >>> imply_gate(1, 0) - 0 - >>> imply_gate(1, 1) - 1 - """ - return int(input_1 == 0 or input_2 == 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/karnaugh_map_simplification.py b/boolean_algebra/karnaugh_map_simplification.py deleted file mode 100644 index c7f2d4c6b897..000000000000 --- a/boolean_algebra/karnaugh_map_simplification.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Karnaugh_map -https://www.allaboutcircuits.com/technical-articles/karnaugh-map-boolean-algebraic-simplification-technique -""" - - -def simplify_kmap(kmap: list[list[int]]) -> str: - """ - Simplify the Karnaugh map. - >>> simplify_kmap(kmap=[[0, 1], [1, 1]]) - "A'B + AB' + AB" - >>> simplify_kmap(kmap=[[0, 0], [0, 0]]) - '' - >>> simplify_kmap(kmap=[[0, 1], [1, -1]]) - "A'B + AB' + AB" - >>> simplify_kmap(kmap=[[0, 1], [1, 2]]) - "A'B + AB' + AB" - >>> simplify_kmap(kmap=[[0, 1], [1, 1.1]]) - "A'B + AB' + AB" - >>> simplify_kmap(kmap=[[0, 1], [1, 'a']]) - "A'B + AB' + AB" - """ - simplified_f = [] - for a, row in enumerate(kmap): - for b, item in enumerate(row): - if item: - term = ("A" if a else "A'") + ("B" if b else "B'") - simplified_f.append(term) - return " + ".join(simplified_f) - - -def main() -> None: - """ - Main function to create and simplify a K-Map. - - >>> main() - [0, 1] - [1, 1] - Simplified Expression: - A'B + AB' + AB - """ - kmap = [[0, 1], [1, 1]] - - # Manually generate the product of [0, 1] and [0, 1] - - for row in kmap: - print(row) - - print("Simplified Expression:") - print(simplify_kmap(kmap)) - - -if __name__ == "__main__": - main() - print(f"{simplify_kmap(kmap=[[0, 1], [1, 1]]) = }") diff --git a/boolean_algebra/multiplexer.py b/boolean_algebra/multiplexer.py deleted file mode 100644 index 7e65c785c829..000000000000 --- a/boolean_algebra/multiplexer.py +++ /dev/null @@ -1,42 +0,0 @@ -def mux(input0: int, input1: int, select: int) -> int: - """ - Implement a 2-to-1 Multiplexer. - - :param input0: The first input value (0 or 1). - :param input1: The second input value (0 or 1). - :param select: The select signal (0 or 1) to choose between input0 and input1. - :return: The output based on the select signal. input1 if select else input0. - - https://www.electrically4u.com/solved-problems-on-multiplexer - https://en.wikipedia.org/wiki/Multiplexer - - >>> mux(0, 1, 0) - 0 - >>> mux(0, 1, 1) - 1 - >>> mux(1, 0, 0) - 1 - >>> mux(1, 0, 1) - 0 - >>> mux(2, 1, 0) - Traceback (most recent call last): - ... - ValueError: Inputs and select signal must be 0 or 1 - >>> mux(0, -1, 0) - Traceback (most recent call last): - ... - ValueError: Inputs and select signal must be 0 or 1 - >>> mux(0, 1, 1.1) - Traceback (most recent call last): - ... - ValueError: Inputs and select signal must be 0 or 1 - """ - if all(i in (0, 1) for i in (input0, input1, select)): - return input1 if select else input0 - raise ValueError("Inputs and select signal must be 0 or 1") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/nand_gate.py b/boolean_algebra/nand_gate.py deleted file mode 100644 index ea7a6815dcc9..000000000000 --- a/boolean_algebra/nand_gate.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -A NAND Gate is a logic gate in boolean algebra which results to 0 (False) if both -the inputs are 1, and 1 (True) otherwise. It's similar to adding -a NOT gate along with an AND gate. -Following is the truth table of a NAND Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 1 | - | 0 | 1 | 1 | - | 1 | 0 | 1 | - | 1 | 1 | 0 | - ------------------------------ -Refer - https://www.geeksforgeeks.org/logic-gates-in-python/ -""" - - -def nand_gate(input_1: int, input_2: int) -> int: - """ - Calculate NAND of the input values - >>> nand_gate(0, 0) - 1 - >>> nand_gate(0, 1) - 1 - >>> nand_gate(1, 0) - 1 - >>> nand_gate(1, 1) - 0 - """ - return int(not (input_1 and input_2)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/nimply_gate.py b/boolean_algebra/nimply_gate.py deleted file mode 100644 index 68e82c8db8d9..000000000000 --- a/boolean_algebra/nimply_gate.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -An NIMPLY Gate is a logic gate in boolean algebra which results to 0 if -either input 1 is 0, or if input 1 is 1, then it is 0 only if input 2 is 1. -It is false if input 1 implies input 2. It is the negated form of imply - -Following is the truth table of an NIMPLY Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 0 | - | 0 | 1 | 0 | - | 1 | 0 | 1 | - | 1 | 1 | 0 | - ------------------------------ - -Refer - https://en.wikipedia.org/wiki/NIMPLY_gate -""" - - -def nimply_gate(input_1: int, input_2: int) -> int: - """ - Calculate NIMPLY of the input values - - >>> nimply_gate(0, 0) - 0 - >>> nimply_gate(0, 1) - 0 - >>> nimply_gate(1, 0) - 1 - >>> nimply_gate(1, 1) - 0 - """ - return int(input_1 == 1 and input_2 == 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/nor_gate.py b/boolean_algebra/nor_gate.py deleted file mode 100644 index d4d6f0da23ea..000000000000 --- a/boolean_algebra/nor_gate.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -A NOR Gate is a logic gate in boolean algebra which results in false(0) if any of the -inputs is 1, and True(1) if all inputs are 0. -Following is the truth table of a NOR Gate: - Truth Table of NOR Gate: - | Input 1 | Input 2 | Output | - | 0 | 0 | 1 | - | 0 | 1 | 0 | - | 1 | 0 | 0 | - | 1 | 1 | 0 | - - Code provided by Akshaj Vishwanathan -https://www.geeksforgeeks.org/logic-gates-in-python -""" - -from collections.abc import Callable - - -def nor_gate(input_1: int, input_2: int) -> int: - """ - >>> nor_gate(0, 0) - 1 - >>> nor_gate(0, 1) - 0 - >>> nor_gate(1, 0) - 0 - >>> nor_gate(1, 1) - 0 - >>> nor_gate(0.0, 0.0) - 1 - >>> nor_gate(0, -7) - 0 - """ - return int(input_1 == input_2 == 0) - - -def truth_table(func: Callable) -> str: - """ - >>> print(truth_table(nor_gate)) - Truth Table of NOR Gate: - | Input 1 | Input 2 | Output | - | 0 | 0 | 1 | - | 0 | 1 | 0 | - | 1 | 0 | 0 | - | 1 | 1 | 0 | - """ - - def make_table_row(items: list | tuple) -> str: - """ - >>> make_table_row(("One", "Two", "Three")) - '| One | Two | Three |' - """ - return f"| {' | '.join(f'{item:^8}' for item in items)} |" - - return "\n".join( - ( - "Truth Table of NOR Gate:", - make_table_row(("Input 1", "Input 2", "Output")), - *[make_table_row((i, j, func(i, j))) for i in (0, 1) for j in (0, 1)], - ) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(truth_table(nor_gate)) diff --git a/boolean_algebra/not_gate.py b/boolean_algebra/not_gate.py deleted file mode 100644 index cfa74cf42204..000000000000 --- a/boolean_algebra/not_gate.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -A NOT Gate is a logic gate in boolean algebra which results to 0 (False) if the -input is high, and 1 (True) if the input is low. -Following is the truth table of a XOR Gate: - ------------------------------ - | Input | Output | - ------------------------------ - | 0 | 1 | - | 1 | 0 | - ------------------------------ -Refer - https://www.geeksforgeeks.org/logic-gates-in-python/ -""" - - -def not_gate(input_1: int) -> int: - """ - Calculate NOT of the input values - >>> not_gate(0) - 1 - >>> not_gate(1) - 0 - """ - - return 1 if input_1 == 0 else 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/or_gate.py b/boolean_algebra/or_gate.py deleted file mode 100644 index 0fd4e5a5dc18..000000000000 --- a/boolean_algebra/or_gate.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -An OR Gate is a logic gate in boolean algebra which results to 0 (False) if both the -inputs are 0, and 1 (True) otherwise. -Following is the truth table of an AND Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 0 | - | 0 | 1 | 1 | - | 1 | 0 | 1 | - | 1 | 1 | 1 | - ------------------------------ -Refer - https://www.geeksforgeeks.org/logic-gates-in-python/ -""" - - -def or_gate(input_1: int, input_2: int) -> int: - """ - Calculate OR of the input values - >>> or_gate(0, 0) - 0 - >>> or_gate(0, 1) - 1 - >>> or_gate(1, 0) - 1 - >>> or_gate(1, 1) - 1 - """ - return int((input_1, input_2).count(1) != 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/quine_mc_cluskey.py b/boolean_algebra/quine_mc_cluskey.py deleted file mode 100644 index 8e22e66726d4..000000000000 --- a/boolean_algebra/quine_mc_cluskey.py +++ /dev/null @@ -1,163 +0,0 @@ -from __future__ import annotations - -from collections.abc import Sequence -from typing import Literal - - -def compare_string(string1: str, string2: str) -> str | Literal[False]: - """ - >>> compare_string('0010','0110') - '0_10' - - >>> compare_string('0110','1101') - False - """ - list1 = list(string1) - list2 = list(string2) - count = 0 - for i in range(len(list1)): - if list1[i] != list2[i]: - count += 1 - list1[i] = "_" - if count > 1: - return False - else: - return "".join(list1) - - -def check(binary: list[str]) -> list[str]: - """ - >>> check(['0.00.01.5']) - ['0.00.01.5'] - """ - pi = [] - while True: - check1 = ["$"] * len(binary) - temp = [] - for i in range(len(binary)): - for j in range(i + 1, len(binary)): - k = compare_string(binary[i], binary[j]) - if k is False: - check1[i] = "*" - check1[j] = "*" - temp.append("X") - for i in range(len(binary)): - if check1[i] == "$": - pi.append(binary[i]) - if len(temp) == 0: - return pi - binary = list(set(temp)) - - -def decimal_to_binary(no_of_variable: int, minterms: Sequence[float]) -> list[str]: - """ - >>> decimal_to_binary(3,[1.5]) - ['0.00.01.5'] - """ - temp = [] - for minterm in minterms: - string = "" - for _ in range(no_of_variable): - string = str(minterm % 2) + string - minterm //= 2 - temp.append(string) - return temp - - -def is_for_table(string1: str, string2: str, count: int) -> bool: - """ - >>> is_for_table('__1','011',2) - True - - >>> is_for_table('01_','001',1) - False - """ - list1 = list(string1) - list2 = list(string2) - count_n = sum(item1 != item2 for item1, item2 in zip(list1, list2)) - return count_n == count - - -def selection(chart: list[list[int]], prime_implicants: list[str]) -> list[str]: - """ - >>> selection([[1]],['0.00.01.5']) - ['0.00.01.5'] - - >>> selection([[1]],['0.00.01.5']) - ['0.00.01.5'] - """ - temp = [] - select = [0] * len(chart) - for i in range(len(chart[0])): - count = sum(row[i] == 1 for row in chart) - if count == 1: - rem = max(j for j, row in enumerate(chart) if row[i] == 1) - select[rem] = 1 - for i, item in enumerate(select): - if item != 1: - continue - for j in range(len(chart[0])): - if chart[i][j] != 1: - continue - for row in chart: - row[j] = 0 - temp.append(prime_implicants[i]) - while True: - counts = [chart[i].count(1) for i in range(len(chart))] - max_n = max(counts) - rem = counts.index(max_n) - - if max_n == 0: - return temp - - temp.append(prime_implicants[rem]) - - for j in range(len(chart[0])): - if chart[rem][j] != 1: - continue - for i in range(len(chart)): - chart[i][j] = 0 - - -def prime_implicant_chart( - prime_implicants: list[str], binary: list[str] -) -> list[list[int]]: - """ - >>> prime_implicant_chart(['0.00.01.5'],['0.00.01.5']) - [[1]] - """ - chart = [[0 for x in range(len(binary))] for x in range(len(prime_implicants))] - for i in range(len(prime_implicants)): - count = prime_implicants[i].count("_") - for j in range(len(binary)): - if is_for_table(prime_implicants[i], binary[j], count): - chart[i][j] = 1 - - return chart - - -def main() -> None: - no_of_variable = int(input("Enter the no. of variables\n")) - minterms = [ - float(x) - for x in input( - "Enter the decimal representation of Minterms 'Spaces Separated'\n" - ).split() - ] - binary = decimal_to_binary(no_of_variable, minterms) - - prime_implicants = check(binary) - print("Prime Implicants are:") - print(prime_implicants) - chart = prime_implicant_chart(prime_implicants, binary) - - essential_prime_implicants = selection(chart, prime_implicants) - print("Essential Prime Implicants are:") - print(essential_prime_implicants) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/boolean_algebra/xnor_gate.py b/boolean_algebra/xnor_gate.py deleted file mode 100644 index 05b756da2960..000000000000 --- a/boolean_algebra/xnor_gate.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -A XNOR Gate is a logic gate in boolean algebra which results to 0 (False) if both the -inputs are different, and 1 (True), if the inputs are same. -It's similar to adding a NOT gate to an XOR gate - -Following is the truth table of a XNOR Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 1 | - | 0 | 1 | 0 | - | 1 | 0 | 0 | - | 1 | 1 | 1 | - ------------------------------ -Refer - https://www.geeksforgeeks.org/logic-gates-in-python/ -""" - - -def xnor_gate(input_1: int, input_2: int) -> int: - """ - Calculate XOR of the input values - >>> xnor_gate(0, 0) - 1 - >>> xnor_gate(0, 1) - 0 - >>> xnor_gate(1, 0) - 0 - >>> xnor_gate(1, 1) - 1 - """ - return 1 if input_1 == input_2 else 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/boolean_algebra/xor_gate.py b/boolean_algebra/xor_gate.py deleted file mode 100644 index f3922e426e3d..000000000000 --- a/boolean_algebra/xor_gate.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -A XOR Gate is a logic gate in boolean algebra which results to 1 (True) if only one of -the two inputs is 1, and 0 (False) if an even number of inputs are 1. -Following is the truth table of a XOR Gate: - ------------------------------ - | Input 1 | Input 2 | Output | - ------------------------------ - | 0 | 0 | 0 | - | 0 | 1 | 1 | - | 1 | 0 | 1 | - | 1 | 1 | 0 | - ------------------------------ - -Refer - https://www.geeksforgeeks.org/logic-gates-in-python/ -""" - - -def xor_gate(input_1: int, input_2: int) -> int: - """ - calculate xor of the input values - - >>> xor_gate(0, 0) - 0 - >>> xor_gate(0, 1) - 1 - >>> xor_gate(1, 0) - 1 - >>> xor_gate(1, 1) - 0 - """ - return (input_1, input_2).count(0) % 2 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/cellular_automata/README.md b/cellular_automata/README.md deleted file mode 100644 index c5681b33906c..000000000000 --- a/cellular_automata/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Cellular Automata - -Cellular automata are a way to simulate the behavior of "life", no matter if it is a robot or cell. -They usually follow simple rules but can lead to the creation of complex forms. -The most popular cellular automaton is Conway's [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life). - -* <https://en.wikipedia.org/wiki/Cellular_automaton> -* <https://mathworld.wolfram.com/ElementaryCellularAutomaton.html> diff --git a/cellular_automata/__init__.py b/cellular_automata/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/cellular_automata/conways_game_of_life.py b/cellular_automata/conways_game_of_life.py deleted file mode 100644 index 364a34c3aba6..000000000000 --- a/cellular_automata/conways_game_of_life.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -Conway's Game of Life implemented in Python. -https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life -""" - -from __future__ import annotations - -from PIL import Image - -# Define glider example -GLIDER = [ - [0, 1, 0, 0, 0, 0, 0, 0], - [0, 0, 1, 0, 0, 0, 0, 0], - [1, 1, 1, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0], -] - -# Define blinker example -BLINKER = [[0, 1, 0], [0, 1, 0], [0, 1, 0]] - - -def new_generation(cells: list[list[int]]) -> list[list[int]]: - """ - Generates the next generation for a given state of Conway's Game of Life. - >>> new_generation(BLINKER) - [[0, 0, 0], [1, 1, 1], [0, 0, 0]] - """ - next_generation = [] - for i in range(len(cells)): - next_generation_row = [] - for j in range(len(cells[i])): - # Get the number of live neighbours - neighbour_count = 0 - if i > 0 and j > 0: - neighbour_count += cells[i - 1][j - 1] - if i > 0: - neighbour_count += cells[i - 1][j] - if i > 0 and j < len(cells[i]) - 1: - neighbour_count += cells[i - 1][j + 1] - if j > 0: - neighbour_count += cells[i][j - 1] - if j < len(cells[i]) - 1: - neighbour_count += cells[i][j + 1] - if i < len(cells) - 1 and j > 0: - neighbour_count += cells[i + 1][j - 1] - if i < len(cells) - 1: - neighbour_count += cells[i + 1][j] - if i < len(cells) - 1 and j < len(cells[i]) - 1: - neighbour_count += cells[i + 1][j + 1] - - # Rules of the game of life (excerpt from Wikipedia): - # 1. Any live cell with two or three live neighbours survives. - # 2. Any dead cell with three live neighbours becomes a live cell. - # 3. All other live cells die in the next generation. - # Similarly, all other dead cells stay dead. - alive = cells[i][j] == 1 - if ( - (alive and 2 <= neighbour_count <= 3) - or not alive - and neighbour_count == 3 - ): - next_generation_row.append(1) - else: - next_generation_row.append(0) - - next_generation.append(next_generation_row) - return next_generation - - -def generate_images(cells: list[list[int]], frames: int) -> list[Image.Image]: - """ - Generates a list of images of subsequent Game of Life states. - """ - images = [] - for _ in range(frames): - # Create output image - img = Image.new("RGB", (len(cells[0]), len(cells))) - pixels = img.load() - - # Save cells to image - for x in range(len(cells)): - for y in range(len(cells[0])): - colour = 255 - cells[y][x] * 255 - pixels[x, y] = (colour, colour, colour) - - # Save image - images.append(img) - cells = new_generation(cells) - return images - - -if __name__ == "__main__": - images = generate_images(GLIDER, 16) - images[0].save("out.gif", save_all=True, append_images=images[1:]) diff --git a/cellular_automata/game_of_life.py b/cellular_automata/game_of_life.py deleted file mode 100644 index 76276b272d65..000000000000 --- a/cellular_automata/game_of_life.py +++ /dev/null @@ -1,129 +0,0 @@ -"""Conway's Game Of Life, Author Anurag Kumar(mailto:anuragkumarak95@gmail.com) - -Requirements: - - numpy - - random - - time - - matplotlib - -Python: - - 3.5 - -Usage: - - $python3 game_of_life <canvas_size:int> - -Game-Of-Life Rules: - - 1. - Any live cell with fewer than two live neighbours - dies, as if caused by under-population. - 2. - Any live cell with two or three live neighbours lives - on to the next generation. - 3. - Any live cell with more than three live neighbours - dies, as if by over-population. - 4. - Any dead cell with exactly three live neighbours be- - comes a live cell, as if by reproduction. -""" - -import random -import sys - -import numpy as np -from matplotlib import pyplot as plt -from matplotlib.colors import ListedColormap - -usage_doc = "Usage of script: script_name <size_of_canvas:int>" - -choice = [0] * 100 + [1] * 10 -random.shuffle(choice) - - -def create_canvas(size: int) -> list[list[bool]]: - canvas = [[False for i in range(size)] for j in range(size)] - return canvas - - -def seed(canvas: list[list[bool]]) -> None: - for i, row in enumerate(canvas): - for j, _ in enumerate(row): - canvas[i][j] = bool(random.getrandbits(1)) - - -def run(canvas: list[list[bool]]) -> list[list[bool]]: - """ - This function runs the rules of game through all points, and changes their - status accordingly.(in the same canvas) - @Args: - -- - canvas : canvas of population to run the rules on. - - @returns: - -- - canvas of population after one step - """ - current_canvas = np.array(canvas) - next_gen_canvas = np.array(create_canvas(current_canvas.shape[0])) - for r, row in enumerate(current_canvas): - for c, pt in enumerate(row): - next_gen_canvas[r][c] = __judge_point( - pt, current_canvas[r - 1 : r + 2, c - 1 : c + 2] - ) - - return next_gen_canvas.tolist() - - -def __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool: - dead = 0 - alive = 0 - # finding dead or alive neighbours count. - for i in neighbours: - for status in i: - if status: - alive += 1 - else: - dead += 1 - - # handling duplicate entry for focus pt. - if pt: - alive -= 1 - else: - dead -= 1 - - # running the rules of game here. - state = pt - if pt: - if alive < 2: - state = False - elif alive in {2, 3}: - state = True - elif alive > 3: - state = False - elif alive == 3: - state = True - - return state - - -if __name__ == "__main__": - if len(sys.argv) != 2: - raise Exception(usage_doc) - - canvas_size = int(sys.argv[1]) - # main working structure of this module. - c = create_canvas(canvas_size) - seed(c) - fig, ax = plt.subplots() - fig.show() - cmap = ListedColormap(["w", "k"]) - try: - while True: - c = run(c) - ax.matshow(c, cmap=cmap) - fig.canvas.draw() - ax.cla() - except KeyboardInterrupt: - # do nothing. - pass diff --git a/cellular_automata/langtons_ant.py b/cellular_automata/langtons_ant.py deleted file mode 100644 index 9847c50a5c3e..000000000000 --- a/cellular_automata/langtons_ant.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Langton's ant - -@ https://en.wikipedia.org/wiki/Langton%27s_ant -@ https://upload.wikimedia.org/wikipedia/commons/0/09/LangtonsAntAnimated.gif -""" - -from functools import partial - -from matplotlib import pyplot as plt -from matplotlib.animation import FuncAnimation - -WIDTH = 80 -HEIGHT = 80 - - -class LangtonsAnt: - """ - Represents the main LangonsAnt algorithm. - - >>> la = LangtonsAnt(2, 2) - >>> la.board - [[True, True], [True, True]] - >>> la.ant_position - (1, 1) - """ - - def __init__(self, width: int, height: int) -> None: - # Each square is either True or False where True is white and False is black - self.board = [[True] * width for _ in range(height)] - self.ant_position: tuple[int, int] = (width // 2, height // 2) - - # Initially pointing left (similar to the wikipedia image) - # (0 = 0° | 1 = 90° | 2 = 180 ° | 3 = 270°) - self.ant_direction: int = 3 - - def move_ant(self, axes: plt.Axes | None, display: bool, _frame: int) -> None: - """ - Performs three tasks: - 1. The ant turns either clockwise or anti-clockwise according to the colour - of the square that it is currently on. If the square is white, the ant - turns clockwise, and if the square is black the ant turns anti-clockwise - 2. The ant moves one square in the direction that it is currently facing - 3. The square the ant was previously on is inverted (White -> Black and - Black -> White) - - If display is True, the board will also be displayed on the axes - - >>> la = LangtonsAnt(2, 2) - >>> la.move_ant(None, True, 0) - >>> la.board - [[True, True], [True, False]] - >>> la.move_ant(None, True, 0) - >>> la.board - [[True, False], [True, False]] - """ - directions = { - 0: (-1, 0), # 0° - 1: (0, 1), # 90° - 2: (1, 0), # 180° - 3: (0, -1), # 270° - } - x, y = self.ant_position - - # Turn clockwise or anti-clockwise according to colour of square - if self.board[x][y] is True: - # The square is white so turn 90° clockwise - self.ant_direction = (self.ant_direction + 1) % 4 - else: - # The square is black so turn 90° anti-clockwise - self.ant_direction = (self.ant_direction - 1) % 4 - - # Move ant - move_x, move_y = directions[self.ant_direction] - self.ant_position = (x + move_x, y + move_y) - - # Flip colour of square - self.board[x][y] = not self.board[x][y] - - if display and axes: - # Display the board on the axes - axes.get_xaxis().set_ticks([]) - axes.get_yaxis().set_ticks([]) - axes.imshow(self.board, cmap="gray", interpolation="nearest") - - def display(self, frames: int = 100_000) -> None: - """ - Displays the board without delay in a matplotlib plot - to visually understand and track the ant. - - >>> _ = LangtonsAnt(WIDTH, HEIGHT) - """ - fig, ax = plt.subplots() - # Assign animation to a variable to prevent it from getting garbage collected - self.animation = FuncAnimation( - fig, partial(self.move_ant, ax, True), frames=frames, interval=1 - ) - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - LangtonsAnt(WIDTH, HEIGHT).display() diff --git a/cellular_automata/nagel_schrekenberg.py b/cellular_automata/nagel_schrekenberg.py deleted file mode 100644 index bcdca902afee..000000000000 --- a/cellular_automata/nagel_schrekenberg.py +++ /dev/null @@ -1,140 +0,0 @@ -""" -Simulate the evolution of a highway with only one road that is a loop. -The highway is divided in cells, each cell can have at most one car in it. -The highway is a loop so when a car comes to one end, it will come out on the other. -Each car is represented by its speed (from 0 to 5). - -Some information about speed: - -1 means that the cell on the highway is empty - 0 to 5 are the speed of the cars with 0 being the lowest and 5 the highest - -highway: list[int] Where every position and speed of every car will be stored -probability The probability that a driver will slow down -initial_speed The speed of the cars a the start -frequency How many cells there are between two cars at the start -max_speed The maximum speed a car can go to -number_of_cells How many cell are there in the highway -number_of_update How many times will the position be updated - -More information here: https://en.wikipedia.org/wiki/Nagel%E2%80%93Schreckenberg_model - -Examples for doctest: ->>> simulate(construct_highway(6, 3, 0), 2, 0, 2) -[[0, -1, -1, 0, -1, -1], [-1, 1, -1, -1, 1, -1], [-1, -1, 1, -1, -1, 1]] ->>> simulate(construct_highway(5, 2, -2), 3, 0, 2) -[[0, -1, 0, -1, 0], [0, -1, 0, -1, -1], [0, -1, -1, 1, -1], [-1, 1, -1, 0, -1]] -""" - -from random import randint, random - - -def construct_highway( - number_of_cells: int, - frequency: int, - initial_speed: int, - random_frequency: bool = False, - random_speed: bool = False, - max_speed: int = 5, -) -> list: - """ - Build the highway following the parameters given - >>> construct_highway(10, 2, 6) - [[6, -1, 6, -1, 6, -1, 6, -1, 6, -1]] - >>> construct_highway(10, 10, 2) - [[2, -1, -1, -1, -1, -1, -1, -1, -1, -1]] - """ - - highway = [[-1] * number_of_cells] # Create a highway without any car - i = 0 - initial_speed = max(initial_speed, 0) - while i < number_of_cells: - highway[0][i] = ( - randint(0, max_speed) if random_speed else initial_speed - ) # Place the cars - i += ( - randint(1, max_speed * 2) if random_frequency else frequency - ) # Arbitrary number, may need tuning - return highway - - -def get_distance(highway_now: list, car_index: int) -> int: - """ - Get the distance between a car (at index car_index) and the next car - >>> get_distance([6, -1, 6, -1, 6], 2) - 1 - >>> get_distance([2, -1, -1, -1, 3, 1, 0, 1, 3, 2], 0) - 3 - >>> get_distance([-1, -1, -1, -1, 2, -1, -1, -1, 3], -1) - 4 - """ - - distance = 0 - cells = highway_now[car_index + 1 :] - for cell in range(len(cells)): # May need a better name for this - if cells[cell] != -1: # If the cell is not empty then - return distance # we have the distance we wanted - distance += 1 - # Here if the car is near the end of the highway - return distance + get_distance(highway_now, -1) - - -def update(highway_now: list, probability: float, max_speed: int) -> list: - """ - Update the speed of the cars - >>> update([-1, -1, -1, -1, -1, 2, -1, -1, -1, -1, 3], 0.0, 5) - [-1, -1, -1, -1, -1, 3, -1, -1, -1, -1, 4] - >>> update([-1, -1, 2, -1, -1, -1, -1, 3], 0.0, 5) - [-1, -1, 3, -1, -1, -1, -1, 1] - """ - - number_of_cells = len(highway_now) - # Beforce calculations, the highway is empty - next_highway = [-1] * number_of_cells - - for car_index in range(number_of_cells): - if highway_now[car_index] != -1: - # Add 1 to the current speed of the car and cap the speed - next_highway[car_index] = min(highway_now[car_index] + 1, max_speed) - # Number of empty cell before the next car - dn = get_distance(highway_now, car_index) - 1 - # We can't have the car causing an accident - next_highway[car_index] = min(next_highway[car_index], dn) - if random() < probability: - # Randomly, a driver will slow down - next_highway[car_index] = max(next_highway[car_index] - 1, 0) - return next_highway - - -def simulate( - highway: list, number_of_update: int, probability: float, max_speed: int -) -> list: - """ - The main function, it will simulate the evolution of the highway - >>> simulate([[-1, 2, -1, -1, -1, 3]], 2, 0.0, 3) - [[-1, 2, -1, -1, -1, 3], [-1, -1, -1, 2, -1, 0], [1, -1, -1, 0, -1, -1]] - >>> simulate([[-1, 2, -1, 3]], 4, 0.0, 3) - [[-1, 2, -1, 3], [-1, 0, -1, 0], [-1, 0, -1, 0], [-1, 0, -1, 0], [-1, 0, -1, 0]] - """ - - number_of_cells = len(highway[0]) - - for i in range(number_of_update): - next_speeds_calculated = update(highway[i], probability, max_speed) - real_next_speeds = [-1] * number_of_cells - - for car_index in range(number_of_cells): - speed = next_speeds_calculated[car_index] - if speed != -1: - # Change the position based on the speed (with % to create the loop) - index = (car_index + speed) % number_of_cells - # Commit the change of position - real_next_speeds[index] = speed - highway.append(real_next_speeds) - - return highway - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/cellular_automata/one_dimensional.py b/cellular_automata/one_dimensional.py deleted file mode 100644 index da77e444502f..000000000000 --- a/cellular_automata/one_dimensional.py +++ /dev/null @@ -1,74 +0,0 @@ -""" -Return an image of 16 generations of one-dimensional cellular automata based on a given -ruleset number -https://mathworld.wolfram.com/ElementaryCellularAutomaton.html -""" - -from __future__ import annotations - -from PIL import Image - -# Define the first generation of cells -# fmt: off -CELLS = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] -# fmt: on - - -def format_ruleset(ruleset: int) -> list[int]: - """ - >>> format_ruleset(11100) - [0, 0, 0, 1, 1, 1, 0, 0] - >>> format_ruleset(0) - [0, 0, 0, 0, 0, 0, 0, 0] - >>> format_ruleset(11111111) - [1, 1, 1, 1, 1, 1, 1, 1] - """ - return [int(c) for c in f"{ruleset:08}"[:8]] - - -def new_generation(cells: list[list[int]], rule: list[int], time: int) -> list[int]: - population = len(cells[0]) # 31 - next_generation = [] - for i in range(population): - # Get the neighbors of each cell - # Handle neighbours outside bounds by using 0 as their value - left_neighbor = 0 if i == 0 else cells[time][i - 1] - right_neighbor = 0 if i == population - 1 else cells[time][i + 1] - # Define a new cell and add it to the new generation - situation = 7 - int(f"{left_neighbor}{cells[time][i]}{right_neighbor}", 2) - next_generation.append(rule[situation]) - return next_generation - - -def generate_image(cells: list[list[int]]) -> Image.Image: - """ - Convert the cells into a greyscale PIL.Image.Image and return it to the caller. - >>> from random import random - >>> cells = [[random() for w in range(31)] for h in range(16)] - >>> img = generate_image(cells) - >>> isinstance(img, Image.Image) - True - >>> img.width, img.height - (31, 16) - """ - # Create the output image - img = Image.new("RGB", (len(cells[0]), len(cells))) - pixels = img.load() - # Generates image - for w in range(img.width): - for h in range(img.height): - color = 255 - int(255 * cells[h][w]) - pixels[w, h] = (color, color, color) - return img - - -if __name__ == "__main__": - rule_num = bin(int(input("Rule:\n").strip()))[2:] - rule = format_ruleset(int(rule_num)) - for time in range(16): - CELLS.append(new_generation(CELLS, rule, time)) - img = generate_image(CELLS) - # Uncomment to save the image - # img.save(f"rule_{rule_num}.png") - img.show() diff --git a/cellular_automata/wa_tor.py b/cellular_automata/wa_tor.py deleted file mode 100644 index e423d1595bdb..000000000000 --- a/cellular_automata/wa_tor.py +++ /dev/null @@ -1,550 +0,0 @@ -""" -Wa-Tor algorithm (1984) - -@ https://en.wikipedia.org/wiki/Wa-Tor -@ https://beltoforion.de/en/wator/ -@ https://beltoforion.de/en/wator/images/wator_medium.webm - -This solution aims to completely remove any systematic approach -to the Wa-Tor planet, and utilise fully random methods. - -The constants are a working set that allows the Wa-Tor planet -to result in one of the three possible results. -""" - -from collections.abc import Callable -from random import randint, shuffle -from time import sleep -from typing import Literal - -WIDTH = 50 # Width of the Wa-Tor planet -HEIGHT = 50 # Height of the Wa-Tor planet - -PREY_INITIAL_COUNT = 30 # The initial number of prey entities -PREY_REPRODUCTION_TIME = 5 # The chronons before reproducing - -PREDATOR_INITIAL_COUNT = 50 # The initial number of predator entities -# The initial energy value of predator entities -PREDATOR_INITIAL_ENERGY_VALUE = 15 -# The energy value provided when consuming prey -PREDATOR_FOOD_VALUE = 5 -PREDATOR_REPRODUCTION_TIME = 20 # The chronons before reproducing - -MAX_ENTITIES = 500 # The max number of organisms on the board -# The number of entities to delete from the unbalanced side -DELETE_UNBALANCED_ENTITIES = 50 - - -class Entity: - """ - Represents an entity (either prey or predator). - - >>> e = Entity(True, coords=(0, 0)) - >>> e.prey - True - >>> e.coords - (0, 0) - >>> e.alive - True - """ - - def __init__(self, prey: bool, coords: tuple[int, int]) -> None: - self.prey = prey - # The (row, col) pos of the entity - self.coords = coords - - self.remaining_reproduction_time = ( - PREY_REPRODUCTION_TIME if prey else PREDATOR_REPRODUCTION_TIME - ) - self.energy_value = None if prey is True else PREDATOR_INITIAL_ENERGY_VALUE - self.alive = True - - def reset_reproduction_time(self) -> None: - """ - >>> e = Entity(True, coords=(0, 0)) - >>> e.reset_reproduction_time() - >>> e.remaining_reproduction_time == PREY_REPRODUCTION_TIME - True - >>> e = Entity(False, coords=(0, 0)) - >>> e.reset_reproduction_time() - >>> e.remaining_reproduction_time == PREDATOR_REPRODUCTION_TIME - True - """ - self.remaining_reproduction_time = ( - PREY_REPRODUCTION_TIME if self.prey is True else PREDATOR_REPRODUCTION_TIME - ) - - def __repr__(self) -> str: - """ - >>> Entity(prey=True, coords=(1, 1)) - Entity(prey=True, coords=(1, 1), remaining_reproduction_time=5) - >>> Entity(prey=False, coords=(2, 1)) # doctest: +NORMALIZE_WHITESPACE - Entity(prey=False, coords=(2, 1), - remaining_reproduction_time=20, energy_value=15) - """ - repr_ = ( - f"Entity(prey={self.prey}, coords={self.coords}, " - f"remaining_reproduction_time={self.remaining_reproduction_time}" - ) - if self.energy_value is not None: - repr_ += f", energy_value={self.energy_value}" - return f"{repr_})" - - -class WaTor: - """ - Represents the main Wa-Tor algorithm. - - :attr time_passed: A function that is called every time - time passes (a chronon) in order to visually display - the new Wa-Tor planet. The time_passed function can block - using time.sleep to slow the algorithm progression. - - >>> wt = WaTor(10, 15) - >>> wt.width - 10 - >>> wt.height - 15 - >>> len(wt.planet) - 15 - >>> len(wt.planet[0]) - 10 - >>> len(wt.get_entities()) == PREDATOR_INITIAL_COUNT + PREY_INITIAL_COUNT - True - """ - - time_passed: Callable[["WaTor", int], None] | None - - def __init__(self, width: int, height: int) -> None: - self.width = width - self.height = height - self.time_passed = None - - self.planet: list[list[Entity | None]] = [[None] * width for _ in range(height)] - - # Populate planet with predators and prey randomly - for _ in range(PREY_INITIAL_COUNT): - self.add_entity(prey=True) - for _ in range(PREDATOR_INITIAL_COUNT): - self.add_entity(prey=False) - self.set_planet(self.planet) - - def set_planet(self, planet: list[list[Entity | None]]) -> None: - """ - Ease of access for testing - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> planet = [ - ... [None, None, None], - ... [None, Entity(True, coords=(1, 1)), None] - ... ] - >>> wt.set_planet(planet) - >>> wt.planet == planet - True - >>> wt.width - 3 - >>> wt.height - 2 - """ - self.planet = planet - self.width = len(planet[0]) - self.height = len(planet) - - def add_entity(self, prey: bool) -> None: - """ - Adds an entity, making sure the entity does - not override another entity - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> wt.set_planet([[None, None], [None, None]]) - >>> wt.add_entity(True) - >>> len(wt.get_entities()) - 1 - >>> wt.add_entity(False) - >>> len(wt.get_entities()) - 2 - """ - while True: - row, col = randint(0, self.height - 1), randint(0, self.width - 1) - if self.planet[row][col] is None: - self.planet[row][col] = Entity(prey=prey, coords=(row, col)) - return - - def get_entities(self) -> list[Entity]: - """ - Returns a list of all the entities within the planet. - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> len(wt.get_entities()) == PREDATOR_INITIAL_COUNT + PREY_INITIAL_COUNT - True - """ - return [entity for column in self.planet for entity in column if entity] - - def balance_predators_and_prey(self) -> None: - """ - Balances predators and preys so that prey - can not dominate the predators, blocking up - space for them to reproduce. - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> for i in range(2000): - ... row, col = i // HEIGHT, i % WIDTH - ... wt.planet[row][col] = Entity(True, coords=(row, col)) - >>> entities = len(wt.get_entities()) - >>> wt.balance_predators_and_prey() - >>> len(wt.get_entities()) == entities - False - """ - entities = self.get_entities() - shuffle(entities) - - if len(entities) >= MAX_ENTITIES - MAX_ENTITIES / 10: - prey = [entity for entity in entities if entity.prey] - predators = [entity for entity in entities if not entity.prey] - - prey_count, predator_count = len(prey), len(predators) - - entities_to_purge = ( - prey[:DELETE_UNBALANCED_ENTITIES] - if prey_count > predator_count - else predators[:DELETE_UNBALANCED_ENTITIES] - ) - for entity in entities_to_purge: - self.planet[entity.coords[0]][entity.coords[1]] = None - - def get_surrounding_prey(self, entity: Entity) -> list[Entity]: - """ - Returns all the prey entities around (N, S, E, W) a predator entity. - - Subtly different to the try_to_move_to_unoccupied square. - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> wt.set_planet([ - ... [None, Entity(True, (0, 1)), None], - ... [None, Entity(False, (1, 1)), None], - ... [None, Entity(True, (2, 1)), None]]) - >>> wt.get_surrounding_prey( - ... Entity(False, (1, 1))) # doctest: +NORMALIZE_WHITESPACE - [Entity(prey=True, coords=(0, 1), remaining_reproduction_time=5), - Entity(prey=True, coords=(2, 1), remaining_reproduction_time=5)] - >>> wt.set_planet([[Entity(False, (0, 0))]]) - >>> wt.get_surrounding_prey(Entity(False, (0, 0))) - [] - >>> wt.set_planet([ - ... [Entity(True, (0, 0)), Entity(False, (1, 0)), Entity(False, (2, 0))], - ... [None, Entity(False, (1, 1)), Entity(True, (2, 1))], - ... [None, None, None]]) - >>> wt.get_surrounding_prey(Entity(False, (1, 0))) - [Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5)] - """ - row, col = entity.coords - adjacent: list[tuple[int, int]] = [ - (row - 1, col), # North - (row + 1, col), # South - (row, col - 1), # West - (row, col + 1), # East - ] - - return [ - ent - for r, c in adjacent - if 0 <= r < self.height - and 0 <= c < self.width - and (ent := self.planet[r][c]) is not None - and ent.prey - ] - - def move_and_reproduce( - self, entity: Entity, direction_orders: list[Literal["N", "E", "S", "W"]] - ) -> None: - """ - Attempts to move to an unoccupied neighbouring square - in either of the four directions (North, South, East, West). - If the move was successful and the remaining_reproduction time is - equal to 0, then a new prey or predator can also be created - in the previous square. - - :param direction_orders: Ordered list (like priority queue) depicting - order to attempt to move. Removes any systematic - approach of checking neighbouring squares. - - >>> planet = [ - ... [None, None, None], - ... [None, Entity(True, coords=(1, 1)), None], - ... [None, None, None] - ... ] - >>> wt = WaTor(WIDTH, HEIGHT) - >>> wt.set_planet(planet) - >>> wt.move_and_reproduce(Entity(True, coords=(1, 1)), direction_orders=["N"]) - >>> wt.planet # doctest: +NORMALIZE_WHITESPACE - [[None, Entity(prey=True, coords=(0, 1), remaining_reproduction_time=4), None], - [None, None, None], - [None, None, None]] - >>> wt.planet[0][0] = Entity(True, coords=(0, 0)) - >>> wt.move_and_reproduce(Entity(True, coords=(0, 1)), - ... direction_orders=["N", "W", "E", "S"]) - >>> wt.planet # doctest: +NORMALIZE_WHITESPACE - [[Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5), None, - Entity(prey=True, coords=(0, 2), remaining_reproduction_time=4)], - [None, None, None], - [None, None, None]] - >>> wt.planet[0][1] = wt.planet[0][2] - >>> wt.planet[0][2] = None - >>> wt.move_and_reproduce(Entity(True, coords=(0, 1)), - ... direction_orders=["N", "W", "S", "E"]) - >>> wt.planet # doctest: +NORMALIZE_WHITESPACE - [[Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5), None, None], - [None, Entity(prey=True, coords=(1, 1), remaining_reproduction_time=4), None], - [None, None, None]] - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> reproducable_entity = Entity(False, coords=(0, 1)) - >>> reproducable_entity.remaining_reproduction_time = 0 - >>> wt.planet = [[None, reproducable_entity]] - >>> wt.move_and_reproduce(reproducable_entity, - ... direction_orders=["N", "W", "S", "E"]) - >>> wt.planet # doctest: +NORMALIZE_WHITESPACE - [[Entity(prey=False, coords=(0, 0), - remaining_reproduction_time=20, energy_value=15), - Entity(prey=False, coords=(0, 1), remaining_reproduction_time=20, - energy_value=15)]] - """ - row, col = coords = entity.coords - - adjacent_squares: dict[Literal["N", "E", "S", "W"], tuple[int, int]] = { - "N": (row - 1, col), # North - "S": (row + 1, col), # South - "W": (row, col - 1), # West - "E": (row, col + 1), # East - } - # Weight adjacent locations - adjacent: list[tuple[int, int]] = [] - for order in direction_orders: - adjacent.append(adjacent_squares[order]) - - for r, c in adjacent: - if ( - 0 <= r < self.height - and 0 <= c < self.width - and self.planet[r][c] is None - ): - # Move entity to empty adjacent square - self.planet[r][c] = entity - self.planet[row][col] = None - entity.coords = (r, c) - break - - # (2.) See if it possible to reproduce in previous square - if coords != entity.coords and entity.remaining_reproduction_time <= 0: - # Check if the entities on the planet is less than the max limit - if len(self.get_entities()) < MAX_ENTITIES: - # Reproduce in previous square - self.planet[row][col] = Entity(prey=entity.prey, coords=coords) - entity.reset_reproduction_time() - else: - entity.remaining_reproduction_time -= 1 - - def perform_prey_actions( - self, entity: Entity, direction_orders: list[Literal["N", "E", "S", "W"]] - ) -> None: - """ - Performs the actions for a prey entity - - For prey the rules are: - 1. At each chronon, a prey moves randomly to one of the adjacent unoccupied - squares. If there are no free squares, no movement takes place. - 2. Once a prey has survived a certain number of chronons it may reproduce. - This is done as it moves to a neighbouring square, - leaving behind a new prey in its old position. - Its reproduction time is also reset to zero. - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> reproducable_entity = Entity(True, coords=(0, 1)) - >>> reproducable_entity.remaining_reproduction_time = 0 - >>> wt.planet = [[None, reproducable_entity]] - >>> wt.perform_prey_actions(reproducable_entity, - ... direction_orders=["N", "W", "S", "E"]) - >>> wt.planet # doctest: +NORMALIZE_WHITESPACE - [[Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5), - Entity(prey=True, coords=(0, 1), remaining_reproduction_time=5)]] - """ - self.move_and_reproduce(entity, direction_orders) - - def perform_predator_actions( - self, - entity: Entity, - occupied_by_prey_coords: tuple[int, int] | None, - direction_orders: list[Literal["N", "E", "S", "W"]], - ) -> None: - """ - Performs the actions for a predator entity - - :param occupied_by_prey_coords: Move to this location if there is prey there - - For predators the rules are: - 1. At each chronon, a predator moves randomly to an adjacent square occupied - by a prey. If there is none, the predator moves to a random adjacent - unoccupied square. If there are no free squares, no movement takes place. - 2. At each chronon, each predator is deprived of a unit of energy. - 3. Upon reaching zero energy, a predator dies. - 4. If a predator moves to a square occupied by a prey, - it eats the prey and earns a certain amount of energy. - 5. Once a predator has survived a certain number of chronons - it may reproduce in exactly the same way as the prey. - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> wt.set_planet([[Entity(True, coords=(0, 0)), Entity(False, coords=(0, 1))]]) - >>> wt.perform_predator_actions(Entity(False, coords=(0, 1)), (0, 0), []) - >>> wt.planet # doctest: +NORMALIZE_WHITESPACE - [[Entity(prey=False, coords=(0, 0), - remaining_reproduction_time=20, energy_value=19), None]] - """ - assert entity.energy_value is not None # [type checking] - - # (3.) If the entity has 0 energy, it will die - if entity.energy_value == 0: - self.planet[entity.coords[0]][entity.coords[1]] = None - return - - # (1.) Move to entity if possible - if occupied_by_prey_coords is not None: - # Kill the prey - prey = self.planet[occupied_by_prey_coords[0]][occupied_by_prey_coords[1]] - assert prey is not None - prey.alive = False - - # Move onto prey - self.planet[occupied_by_prey_coords[0]][occupied_by_prey_coords[1]] = entity - self.planet[entity.coords[0]][entity.coords[1]] = None - - entity.coords = occupied_by_prey_coords - # (4.) Eats the prey and earns energy - entity.energy_value += PREDATOR_FOOD_VALUE - else: - # (5.) If it has survived the certain number of chronons it will also - # reproduce in this function - self.move_and_reproduce(entity, direction_orders) - - # (2.) Each chronon, the predator is deprived of a unit of energy - entity.energy_value -= 1 - - def run(self, *, iteration_count: int) -> None: - """ - Emulate time passing by looping iteration_count times - - >>> wt = WaTor(WIDTH, HEIGHT) - >>> wt.run(iteration_count=PREDATOR_INITIAL_ENERGY_VALUE - 1) - >>> len(list(filter(lambda entity: entity.prey is False, - ... wt.get_entities()))) >= PREDATOR_INITIAL_COUNT - True - """ - for iter_num in range(iteration_count): - # Generate list of all entities in order to randomly - # pop an entity at a time to simulate true randomness - # This removes the systematic approach of iterating - # through each entity width by height - all_entities = self.get_entities() - - for __ in range(len(all_entities)): - entity = all_entities.pop(randint(0, len(all_entities) - 1)) - if entity.alive is False: - continue - - directions: list[Literal["N", "E", "S", "W"]] = ["N", "E", "S", "W"] - shuffle(directions) # Randomly shuffle directions - - if entity.prey: - self.perform_prey_actions(entity, directions) - else: - # Create list of surrounding prey - surrounding_prey = self.get_surrounding_prey(entity) - surrounding_prey_coords = None - - if surrounding_prey: - # Again, randomly shuffle directions - shuffle(surrounding_prey) - surrounding_prey_coords = surrounding_prey[0].coords - - self.perform_predator_actions( - entity, surrounding_prey_coords, directions - ) - - # Balance out the predators and prey - self.balance_predators_and_prey() - - if self.time_passed is not None: - # Call time_passed function for Wa-Tor planet - # visualisation in a terminal or a graph. - self.time_passed(self, iter_num) - - -def visualise(wt: WaTor, iter_number: int, *, colour: bool = True) -> None: - """ - Visually displays the Wa-Tor planet using - an ascii code in terminal to clear and re-print - the Wa-Tor planet at intervals. - - Uses ascii colour codes to colourfully display - the predators and prey. - - (0x60f197) Prey = # - (0xfffff) Predator = x - - >>> wt = WaTor(30, 30) - >>> wt.set_planet([ - ... [Entity(True, coords=(0, 0)), Entity(False, coords=(0, 1)), None], - ... [Entity(False, coords=(1, 0)), None, Entity(False, coords=(1, 2))], - ... [None, Entity(True, coords=(2, 1)), None] - ... ]) - >>> visualise(wt, 0, colour=False) # doctest: +NORMALIZE_WHITESPACE - # x . - x . x - . # . - <BLANKLINE> - Iteration: 0 | Prey count: 2 | Predator count: 3 | - """ - if colour: - __import__("os").system("") - print("\x1b[0;0H\x1b[2J\x1b[?25l") - - reprint = "\x1b[0;0H" if colour else "" - ansi_colour_end = "\x1b[0m " if colour else " " - - planet = wt.planet - output = "" - - # Iterate over every entity in the planet - for row in planet: - for entity in row: - if entity is None: - output += " . " - else: - if colour is True: - output += ( - "\x1b[38;2;96;241;151m" - if entity.prey - else "\x1b[38;2;255;255;15m" - ) - output += f" {'#' if entity.prey else 'x'}{ansi_colour_end}" - - output += "\n" - - entities = wt.get_entities() - prey_count = sum(entity.prey for entity in entities) - - print( - f"{output}\n Iteration: {iter_number} | Prey count: {prey_count} | " - f"Predator count: {len(entities) - prey_count} | {reprint}" - ) - # Block the thread to be able to visualise seeing the algorithm - sleep(0.05) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - wt = WaTor(WIDTH, HEIGHT) - wt.time_passed = visualise - wt.run(iteration_count=100_000) diff --git a/ciphers/README.md b/ciphers/README.md deleted file mode 100644 index fa09874f38e5..000000000000 --- a/ciphers/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Ciphers - -Ciphers are used to protect data from people that are not allowed to have it. They are everywhere on the internet to protect your connections. - -* <https://en.wikipedia.org/wiki/Cipher> -* <http://practicalcryptography.com/ciphers/> -* <https://practicalcryptography.com/ciphers/classical-era/> diff --git a/ciphers/__init__.py b/ciphers/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/ciphers/a1z26.py b/ciphers/a1z26.py deleted file mode 100644 index a1377ea6d397..000000000000 --- a/ciphers/a1z26.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -Convert a string of characters to a sequence of numbers -corresponding to the character's position in the alphabet. - -https://www.dcode.fr/letter-number-cipher -http://bestcodes.weebly.com/a1z26.html -""" - -from __future__ import annotations - - -def encode(plain: str) -> list[int]: - """ - >>> encode("myname") - [13, 25, 14, 1, 13, 5] - """ - return [ord(elem) - 96 for elem in plain] - - -def decode(encoded: list[int]) -> str: - """ - >>> decode([13, 25, 14, 1, 13, 5]) - 'myname' - """ - return "".join(chr(elem + 96) for elem in encoded) - - -def main() -> None: - encoded = encode(input("-> ").strip().lower()) - print("Encoded: ", encoded) - print("Decoded:", decode(encoded)) - - -if __name__ == "__main__": - main() diff --git a/ciphers/affine_cipher.py b/ciphers/affine_cipher.py deleted file mode 100644 index 10d16367cced..000000000000 --- a/ciphers/affine_cipher.py +++ /dev/null @@ -1,109 +0,0 @@ -import random -import sys - -from maths.greatest_common_divisor import gcd_by_iterative - -from . import cryptomath_module as cryptomath - -SYMBOLS = ( - r""" !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`""" - r"""abcdefghijklmnopqrstuvwxyz{|}~""" -) - - -def check_keys(key_a: int, key_b: int, mode: str) -> None: - if mode == "encrypt": - if key_a == 1: - sys.exit( - "The affine cipher becomes weak when key " - "A is set to 1. Choose different key" - ) - if key_b == 0: - sys.exit( - "The affine cipher becomes weak when key " - "B is set to 0. Choose different key" - ) - if key_a < 0 or key_b < 0 or key_b > len(SYMBOLS) - 1: - sys.exit( - "Key A must be greater than 0 and key B must " - f"be between 0 and {len(SYMBOLS) - 1}." - ) - if gcd_by_iterative(key_a, len(SYMBOLS)) != 1: - sys.exit( - f"Key A {key_a} and the symbol set size {len(SYMBOLS)} " - "are not relatively prime. Choose a different key." - ) - - -def encrypt_message(key: int, message: str) -> str: - """ - >>> encrypt_message(4545, 'The affine cipher is a type of monoalphabetic ' - ... 'substitution cipher.') - 'VL}p MM{I}p~{HL}Gp{vp pFsH}pxMpyxIx JHL O}F{~pvuOvF{FuF{xIp~{HL}Gi' - """ - key_a, key_b = divmod(key, len(SYMBOLS)) - check_keys(key_a, key_b, "encrypt") - cipher_text = "" - for symbol in message: - if symbol in SYMBOLS: - sym_index = SYMBOLS.find(symbol) - cipher_text += SYMBOLS[(sym_index * key_a + key_b) % len(SYMBOLS)] - else: - cipher_text += symbol - return cipher_text - - -def decrypt_message(key: int, message: str) -> str: - """ - >>> decrypt_message(4545, 'VL}p MM{I}p~{HL}Gp{vp pFsH}pxMpyxIx JHL O}F{~pvuOvF{FuF' - ... '{xIp~{HL}Gi') - 'The affine cipher is a type of monoalphabetic substitution cipher.' - """ - key_a, key_b = divmod(key, len(SYMBOLS)) - check_keys(key_a, key_b, "decrypt") - plain_text = "" - mod_inverse_of_key_a = cryptomath.find_mod_inverse(key_a, len(SYMBOLS)) - for symbol in message: - if symbol in SYMBOLS: - sym_index = SYMBOLS.find(symbol) - plain_text += SYMBOLS[ - (sym_index - key_b) * mod_inverse_of_key_a % len(SYMBOLS) - ] - else: - plain_text += symbol - return plain_text - - -def get_random_key() -> int: - while True: - key_b = random.randint(2, len(SYMBOLS)) - key_b = random.randint(2, len(SYMBOLS)) - if gcd_by_iterative(key_b, len(SYMBOLS)) == 1 and key_b % len(SYMBOLS) != 0: - return key_b * len(SYMBOLS) + key_b - - -def main() -> None: - """ - >>> key = get_random_key() - >>> msg = "This is a test!" - >>> decrypt_message(key, encrypt_message(key, msg)) == msg - True - """ - message = input("Enter message: ").strip() - key = int(input("Enter key [2000 - 9000]: ").strip()) - mode = input("Encrypt/Decrypt [E/D]: ").strip().lower() - - if mode.startswith("e"): - mode = "encrypt" - translated = encrypt_message(key, message) - elif mode.startswith("d"): - mode = "decrypt" - translated = decrypt_message(key, message) - print(f"\n{mode.title()}ed text: \n{translated}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - # main() diff --git a/ciphers/atbash.py b/ciphers/atbash.py deleted file mode 100644 index 4e8f663ed02d..000000000000 --- a/ciphers/atbash.py +++ /dev/null @@ -1,54 +0,0 @@ -"""https://en.wikipedia.org/wiki/Atbash""" - -import string - - -def atbash_slow(sequence: str) -> str: - """ - >>> atbash_slow("ABCDEFG") - 'ZYXWVUT' - - >>> atbash_slow("aW;;123BX") - 'zD;;123YC' - """ - output = "" - for i in sequence: - extract = ord(i) - if 65 <= extract <= 90: - output += chr(155 - extract) - elif 97 <= extract <= 122: - output += chr(219 - extract) - else: - output += i - return output - - -def atbash(sequence: str) -> str: - """ - >>> atbash("ABCDEFG") - 'ZYXWVUT' - - >>> atbash("aW;;123BX") - 'zD;;123YC' - """ - letters = string.ascii_letters - letters_reversed = string.ascii_lowercase[::-1] + string.ascii_uppercase[::-1] - return "".join( - letters_reversed[letters.index(c)] if c in letters else c for c in sequence - ) - - -def benchmark() -> None: - """Let's benchmark our functions side-by-side...""" - from timeit import timeit - - print("Running performance benchmarks...") - setup = "from string import printable ; from __main__ import atbash, atbash_slow" - print(f"> atbash_slow(): {timeit('atbash_slow(printable)', setup=setup)} seconds") - print(f"> atbash(): {timeit('atbash(printable)', setup=setup)} seconds") - - -if __name__ == "__main__": - for example in ("ABCDEFGH", "123GGjj", "testStringtest", "with space"): - print(f"{example} encrypted in atbash: {atbash(example)}") - benchmark() diff --git a/ciphers/autokey.py b/ciphers/autokey.py deleted file mode 100644 index 05d8c066b139..000000000000 --- a/ciphers/autokey.py +++ /dev/null @@ -1,147 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Autokey_cipher -An autokey cipher (also known as the autoclave cipher) is a cipher that -incorporates the message (the plaintext) into the key. -The key is generated from the message in some automated fashion, -sometimes by selecting certain letters from the text or, more commonly, -by adding a short primer key to the front of the message. -""" - - -def encrypt(plaintext: str, key: str) -> str: - """ - Encrypt a given plaintext (string) and key (string), returning the - encrypted ciphertext. - >>> encrypt("hello world", "coffee") - 'jsqqs avvwo' - >>> encrypt("coffee is good as python", "TheAlgorithms") - 'vvjfpk wj ohvp su ddylsv' - >>> encrypt("coffee is good as python", 2) - Traceback (most recent call last): - ... - TypeError: key must be a string - >>> encrypt("", "TheAlgorithms") - Traceback (most recent call last): - ... - ValueError: plaintext is empty - >>> encrypt("coffee is good as python", "") - Traceback (most recent call last): - ... - ValueError: key is empty - >>> encrypt(527.26, "TheAlgorithms") - Traceback (most recent call last): - ... - TypeError: plaintext must be a string - """ - if not isinstance(plaintext, str): - raise TypeError("plaintext must be a string") - if not isinstance(key, str): - raise TypeError("key must be a string") - - if not plaintext: - raise ValueError("plaintext is empty") - if not key: - raise ValueError("key is empty") - - key += plaintext - plaintext = plaintext.lower() - key = key.lower() - plaintext_iterator = 0 - key_iterator = 0 - ciphertext = "" - while plaintext_iterator < len(plaintext): - if ( - ord(plaintext[plaintext_iterator]) < 97 - or ord(plaintext[plaintext_iterator]) > 122 - ): - ciphertext += plaintext[plaintext_iterator] - plaintext_iterator += 1 - elif ord(key[key_iterator]) < 97 or ord(key[key_iterator]) > 122: - key_iterator += 1 - else: - ciphertext += chr( - ( - (ord(plaintext[plaintext_iterator]) - 97 + ord(key[key_iterator])) - - 97 - ) - % 26 - + 97 - ) - key_iterator += 1 - plaintext_iterator += 1 - return ciphertext - - -def decrypt(ciphertext: str, key: str) -> str: - """ - Decrypt a given ciphertext (string) and key (string), returning the decrypted - ciphertext. - >>> decrypt("jsqqs avvwo", "coffee") - 'hello world' - >>> decrypt("vvjfpk wj ohvp su ddylsv", "TheAlgorithms") - 'coffee is good as python' - >>> decrypt("vvjfpk wj ohvp su ddylsv", "") - Traceback (most recent call last): - ... - ValueError: key is empty - >>> decrypt(527.26, "TheAlgorithms") - Traceback (most recent call last): - ... - TypeError: ciphertext must be a string - >>> decrypt("", "TheAlgorithms") - Traceback (most recent call last): - ... - ValueError: ciphertext is empty - >>> decrypt("vvjfpk wj ohvp su ddylsv", 2) - Traceback (most recent call last): - ... - TypeError: key must be a string - """ - if not isinstance(ciphertext, str): - raise TypeError("ciphertext must be a string") - if not isinstance(key, str): - raise TypeError("key must be a string") - - if not ciphertext: - raise ValueError("ciphertext is empty") - if not key: - raise ValueError("key is empty") - - key = key.lower() - ciphertext_iterator = 0 - key_iterator = 0 - plaintext = "" - while ciphertext_iterator < len(ciphertext): - if ( - ord(ciphertext[ciphertext_iterator]) < 97 - or ord(ciphertext[ciphertext_iterator]) > 122 - ): - plaintext += ciphertext[ciphertext_iterator] - else: - plaintext += chr( - (ord(ciphertext[ciphertext_iterator]) - ord(key[key_iterator])) % 26 - + 97 - ) - key += chr( - (ord(ciphertext[ciphertext_iterator]) - ord(key[key_iterator])) % 26 - + 97 - ) - key_iterator += 1 - ciphertext_iterator += 1 - return plaintext - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - operation = int(input("Type 1 to encrypt or 2 to decrypt:")) - if operation == 1: - plaintext = input("Typeplaintext to be encrypted:\n") - key = input("Type the key:\n") - print(encrypt(plaintext, key)) - elif operation == 2: - ciphertext = input("Type the ciphertext to be decrypted:\n") - key = input("Type the key:\n") - print(decrypt(ciphertext, key)) - decrypt("jsqqs avvwo", "coffee") diff --git a/ciphers/baconian_cipher.py b/ciphers/baconian_cipher.py deleted file mode 100644 index f146ba91b78f..000000000000 --- a/ciphers/baconian_cipher.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -Program to encode and decode Baconian or Bacon's Cipher -Wikipedia reference : https://en.wikipedia.org/wiki/Bacon%27s_cipher -""" - -encode_dict = { - "a": "AAAAA", - "b": "AAAAB", - "c": "AAABA", - "d": "AAABB", - "e": "AABAA", - "f": "AABAB", - "g": "AABBA", - "h": "AABBB", - "i": "ABAAA", - "j": "BBBAA", - "k": "ABAAB", - "l": "ABABA", - "m": "ABABB", - "n": "ABBAA", - "o": "ABBAB", - "p": "ABBBA", - "q": "ABBBB", - "r": "BAAAA", - "s": "BAAAB", - "t": "BAABA", - "u": "BAABB", - "v": "BBBAB", - "w": "BABAA", - "x": "BABAB", - "y": "BABBA", - "z": "BABBB", - " ": " ", -} - - -decode_dict = {value: key for key, value in encode_dict.items()} - - -def encode(word: str) -> str: - """ - Encodes to Baconian cipher - - >>> encode("hello") - 'AABBBAABAAABABAABABAABBAB' - >>> encode("hello world") - 'AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAABABAAAABB' - >>> encode("hello world!") - Traceback (most recent call last): - ... - Exception: encode() accepts only letters of the alphabet and spaces - """ - encoded = "" - for letter in word.lower(): - if letter.isalpha() or letter == " ": - encoded += encode_dict[letter] - else: - raise Exception("encode() accepts only letters of the alphabet and spaces") - return encoded - - -def decode(coded: str) -> str: - """ - Decodes from Baconian cipher - - >>> decode("AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAABABAAAABB") - 'hello world' - >>> decode("AABBBAABAAABABAABABAABBAB") - 'hello' - >>> decode("AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAABABAAAABB!") - Traceback (most recent call last): - ... - Exception: decode() accepts only 'A', 'B' and spaces - """ - if set(coded) - {"A", "B", " "} != set(): - raise Exception("decode() accepts only 'A', 'B' and spaces") - decoded = "" - for word in coded.split(): - while len(word) != 0: - decoded += decode_dict[word[:5]] - word = word[5:] - decoded += " " - return decoded.strip() - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/ciphers/base16.py b/ciphers/base16.py deleted file mode 100644 index 6cd62846fc87..000000000000 --- a/ciphers/base16.py +++ /dev/null @@ -1,66 +0,0 @@ -def base16_encode(data: bytes) -> str: - """ - Encodes the given bytes into base16. - - >>> base16_encode(b'Hello World!') - '48656C6C6F20576F726C6421' - >>> base16_encode(b'HELLO WORLD!') - '48454C4C4F20574F524C4421' - >>> base16_encode(b'') - '' - """ - # Turn the data into a list of integers (where each integer is a byte), - # Then turn each byte into its hexadecimal representation, make sure - # it is uppercase, and then join everything together and return it. - return "".join([hex(byte)[2:].zfill(2).upper() for byte in list(data)]) - - -def base16_decode(data: str) -> bytes: - """ - Decodes the given base16 encoded data into bytes. - - >>> base16_decode('48656C6C6F20576F726C6421') - b'Hello World!' - >>> base16_decode('48454C4C4F20574F524C4421') - b'HELLO WORLD!' - >>> base16_decode('') - b'' - >>> base16_decode('486') - Traceback (most recent call last): - ... - ValueError: Base16 encoded data is invalid: - Data does not have an even number of hex digits. - >>> base16_decode('48656c6c6f20576f726c6421') - Traceback (most recent call last): - ... - ValueError: Base16 encoded data is invalid: - Data is not uppercase hex or it contains invalid characters. - >>> base16_decode('This is not base64 encoded data.') - Traceback (most recent call last): - ... - ValueError: Base16 encoded data is invalid: - Data is not uppercase hex or it contains invalid characters. - """ - # Check data validity, following RFC3548 - # https://www.ietf.org/rfc/rfc3548.txt - if (len(data) % 2) != 0: - raise ValueError( - """Base16 encoded data is invalid: -Data does not have an even number of hex digits.""" - ) - # Check the character set - the standard base16 alphabet - # is uppercase according to RFC3548 section 6 - if not set(data) <= set("0123456789ABCDEF"): - raise ValueError( - """Base16 encoded data is invalid: -Data is not uppercase hex or it contains invalid characters.""" - ) - # For every two hexadecimal digits (= a byte), turn it into an integer. - # Then, string the result together into bytes, and return it. - return bytes(int(data[i] + data[i + 1], 16) for i in range(0, len(data), 2)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/base32.py b/ciphers/base32.py deleted file mode 100644 index 911afa2452c0..000000000000 --- a/ciphers/base32.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Base32 encoding and decoding - -https://en.wikipedia.org/wiki/Base32 -""" - -B32_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" - - -def base32_encode(data: bytes) -> bytes: - """ - >>> base32_encode(b"Hello World!") - b'JBSWY3DPEBLW64TMMQQQ====' - >>> base32_encode(b"123456") - b'GEZDGNBVGY======' - >>> base32_encode(b"some long complex string") - b'ONXW2ZJANRXW4ZZAMNXW24DMMV4CA43UOJUW4ZY=' - """ - binary_data = "".join(bin(ord(d))[2:].zfill(8) for d in data.decode("utf-8")) - binary_data = binary_data.ljust(5 * ((len(binary_data) // 5) + 1), "0") - b32_chunks = map("".join, zip(*[iter(binary_data)] * 5)) - b32_result = "".join(B32_CHARSET[int(chunk, 2)] for chunk in b32_chunks) - return bytes(b32_result.ljust(8 * ((len(b32_result) // 8) + 1), "="), "utf-8") - - -def base32_decode(data: bytes) -> bytes: - """ - >>> base32_decode(b'JBSWY3DPEBLW64TMMQQQ====') - b'Hello World!' - >>> base32_decode(b'GEZDGNBVGY======') - b'123456' - >>> base32_decode(b'ONXW2ZJANRXW4ZZAMNXW24DMMV4CA43UOJUW4ZY=') - b'some long complex string' - """ - binary_chunks = "".join( - bin(B32_CHARSET.index(_d))[2:].zfill(5) - for _d in data.decode("utf-8").strip("=") - ) - binary_data = list(map("".join, zip(*[iter(binary_chunks)] * 8))) - return bytes("".join([chr(int(_d, 2)) for _d in binary_data]), "utf-8") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/base64.py b/ciphers/base64.py deleted file mode 100644 index 2b950b1be37d..000000000000 --- a/ciphers/base64.py +++ /dev/null @@ -1,142 +0,0 @@ -B64_CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" - - -def base64_encode(data: bytes) -> bytes: - """Encodes data according to RFC4648. - - The data is first transformed to binary and appended with binary digits so that its - length becomes a multiple of 6, then each 6 binary digits will match a character in - the B64_CHARSET string. The number of appended binary digits would later determine - how many "=" signs should be added, the padding. - For every 2 binary digits added, a "=" sign is added in the output. - We can add any binary digits to make it a multiple of 6, for instance, consider the - following example: - "AA" -> 0010100100101001 -> 001010 010010 1001 - As can be seen above, 2 more binary digits should be added, so there's 4 - possibilities here: 00, 01, 10 or 11. - That being said, Base64 encoding can be used in Steganography to hide data in these - appended digits. - - >>> from base64 import b64encode - >>> a = b"This pull request is part of Hacktoberfest20!" - >>> b = b"https://tools.ietf.org/html/rfc4648" - >>> c = b"A" - >>> base64_encode(a) == b64encode(a) - True - >>> base64_encode(b) == b64encode(b) - True - >>> base64_encode(c) == b64encode(c) - True - >>> base64_encode("abc") - Traceback (most recent call last): - ... - TypeError: a bytes-like object is required, not 'str' - """ - # Make sure the supplied data is a bytes-like object - if not isinstance(data, bytes): - msg = f"a bytes-like object is required, not '{data.__class__.__name__}'" - raise TypeError(msg) - - binary_stream = "".join(bin(byte)[2:].zfill(8) for byte in data) - - padding_needed = len(binary_stream) % 6 != 0 - - if padding_needed: - # The padding that will be added later - padding = b"=" * ((6 - len(binary_stream) % 6) // 2) - - # Append binary_stream with arbitrary binary digits (0's by default) to make its - # length a multiple of 6. - binary_stream += "0" * (6 - len(binary_stream) % 6) - else: - padding = b"" - - # Encode every 6 binary digits to their corresponding Base64 character - return ( - "".join( - B64_CHARSET[int(binary_stream[index : index + 6], 2)] - for index in range(0, len(binary_stream), 6) - ).encode() - + padding - ) - - -def base64_decode(encoded_data: str) -> bytes: - """Decodes data according to RFC4648. - - This does the reverse operation of base64_encode. - We first transform the encoded data back to a binary stream, take off the - previously appended binary digits according to the padding, at this point we - would have a binary stream whose length is multiple of 8, the last step is - to convert every 8 bits to a byte. - - >>> from base64 import b64decode - >>> a = "VGhpcyBwdWxsIHJlcXVlc3QgaXMgcGFydCBvZiBIYWNrdG9iZXJmZXN0MjAh" - >>> b = "aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDg=" - >>> c = "QQ==" - >>> base64_decode(a) == b64decode(a) - True - >>> base64_decode(b) == b64decode(b) - True - >>> base64_decode(c) == b64decode(c) - True - >>> base64_decode("abc") - Traceback (most recent call last): - ... - AssertionError: Incorrect padding - """ - # Make sure encoded_data is either a string or a bytes-like object - if not isinstance(encoded_data, bytes) and not isinstance(encoded_data, str): - msg = ( - "argument should be a bytes-like object or ASCII string, " - f"not '{encoded_data.__class__.__name__}'" - ) - raise TypeError(msg) - - # In case encoded_data is a bytes-like object, make sure it contains only - # ASCII characters so we convert it to a string object - if isinstance(encoded_data, bytes): - try: - encoded_data = encoded_data.decode("utf-8") - except UnicodeDecodeError: - raise ValueError("base64 encoded data should only contain ASCII characters") - - padding = encoded_data.count("=") - - # Check if the encoded string contains non base64 characters - if padding: - assert all( - char in B64_CHARSET for char in encoded_data[:-padding] - ), "Invalid base64 character(s) found." - else: - assert all( - char in B64_CHARSET for char in encoded_data - ), "Invalid base64 character(s) found." - - # Check the padding - assert len(encoded_data) % 4 == 0 and padding < 3, "Incorrect padding" - - if padding: - # Remove padding if there is one - encoded_data = encoded_data[:-padding] - - binary_stream = "".join( - bin(B64_CHARSET.index(char))[2:].zfill(6) for char in encoded_data - )[: -padding * 2] - else: - binary_stream = "".join( - bin(B64_CHARSET.index(char))[2:].zfill(6) for char in encoded_data - ) - - data = [ - int(binary_stream[index : index + 8], 2) - for index in range(0, len(binary_stream), 8) - ] - - return bytes(data) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/base85.py b/ciphers/base85.py deleted file mode 100644 index f0228e5052dd..000000000000 --- a/ciphers/base85.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Base85 (Ascii85) encoding and decoding - -https://en.wikipedia.org/wiki/Ascii85 -""" - - -def _base10_to_85(d: int) -> str: - return "".join(chr(d % 85 + 33)) + _base10_to_85(d // 85) if d > 0 else "" - - -def _base85_to_10(digits: list) -> int: - return sum(char * 85**i for i, char in enumerate(reversed(digits))) - - -def ascii85_encode(data: bytes) -> bytes: - """ - >>> ascii85_encode(b"") - b'' - >>> ascii85_encode(b"12345") - b'0etOA2#' - >>> ascii85_encode(b"base 85") - b'@UX=h+?24' - """ - binary_data = "".join(bin(ord(d))[2:].zfill(8) for d in data.decode("utf-8")) - null_values = (32 * ((len(binary_data) // 32) + 1) - len(binary_data)) // 8 - binary_data = binary_data.ljust(32 * ((len(binary_data) // 32) + 1), "0") - b85_chunks = [int(_s, 2) for _s in map("".join, zip(*[iter(binary_data)] * 32))] - result = "".join(_base10_to_85(chunk)[::-1] for chunk in b85_chunks) - return bytes(result[:-null_values] if null_values % 4 != 0 else result, "utf-8") - - -def ascii85_decode(data: bytes) -> bytes: - """ - >>> ascii85_decode(b"") - b'' - >>> ascii85_decode(b"0etOA2#") - b'12345' - >>> ascii85_decode(b"@UX=h+?24") - b'base 85' - """ - null_values = 5 * ((len(data) // 5) + 1) - len(data) - binary_data = data.decode("utf-8") + "u" * null_values - b85_chunks = map("".join, zip(*[iter(binary_data)] * 5)) - b85_segments = [[ord(_s) - 33 for _s in chunk] for chunk in b85_chunks] - results = [bin(_base85_to_10(chunk))[2::].zfill(32) for chunk in b85_segments] - char_chunks = [ - [chr(int(_s, 2)) for _s in map("".join, zip(*[iter(r)] * 8))] for r in results - ] - result = "".join("".join(char) for char in char_chunks) - offset = int(null_values % 5 == 0) - return bytes(result[: offset - null_values], "utf-8") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/beaufort_cipher.py b/ciphers/beaufort_cipher.py deleted file mode 100644 index 788fc72b89c3..000000000000 --- a/ciphers/beaufort_cipher.py +++ /dev/null @@ -1,82 +0,0 @@ -""" -Author: Mohit Radadiya -""" - -from string import ascii_uppercase - -dict1 = {char: i for i, char in enumerate(ascii_uppercase)} -dict2 = dict(enumerate(ascii_uppercase)) - - -# This function generates the key in -# a cyclic manner until it's length isn't -# equal to the length of original text -def generate_key(message: str, key: str) -> str: - """ - >>> generate_key("THE GERMAN ATTACK","SECRET") - 'SECRETSECRETSECRE' - """ - x = len(message) - i = 0 - while True: - if x == i: - i = 0 - if len(key) == len(message): - break - key += key[i] - i += 1 - return key - - -# This function returns the encrypted text -# generated with the help of the key -def cipher_text(message: str, key_new: str) -> str: - """ - >>> cipher_text("THE GERMAN ATTACK","SECRETSECRETSECRE") - 'BDC PAYUWL JPAIYI' - """ - cipher_text = "" - i = 0 - for letter in message: - if letter == " ": - cipher_text += " " - else: - x = (dict1[letter] - dict1[key_new[i]]) % 26 - i += 1 - cipher_text += dict2[x] - return cipher_text - - -# This function decrypts the encrypted text -# and returns the original text -def original_text(cipher_text: str, key_new: str) -> str: - """ - >>> original_text("BDC PAYUWL JPAIYI","SECRETSECRETSECRE") - 'THE GERMAN ATTACK' - """ - or_txt = "" - i = 0 - for letter in cipher_text: - if letter == " ": - or_txt += " " - else: - x = (dict1[letter] + dict1[key_new[i]] + 26) % 26 - i += 1 - or_txt += dict2[x] - return or_txt - - -def main() -> None: - message = "THE GERMAN ATTACK" - key = "SECRET" - key_new = generate_key(message, key) - s = cipher_text(message, key_new) - print(f"Encrypted Text = {s}") - print(f"Original Text = {original_text(s, key_new)}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/bifid.py b/ciphers/bifid.py deleted file mode 100644 index a15b381640aa..000000000000 --- a/ciphers/bifid.py +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python3 - -""" -The Bifid Cipher uses a Polybius Square to encipher a message in a way that -makes it fairly difficult to decipher without knowing the secret. - -https://www.braingle.com/brainteasers/codes/bifid.php -""" - -import numpy as np - -SQUARE = [ - ["a", "b", "c", "d", "e"], - ["f", "g", "h", "i", "k"], - ["l", "m", "n", "o", "p"], - ["q", "r", "s", "t", "u"], - ["v", "w", "x", "y", "z"], -] - - -class BifidCipher: - def __init__(self) -> None: - self.SQUARE = np.array(SQUARE) - - def letter_to_numbers(self, letter: str) -> np.ndarray: - """ - Return the pair of numbers that represents the given letter in the - polybius square - - >>> np.array_equal(BifidCipher().letter_to_numbers('a'), [1,1]) - True - - >>> np.array_equal(BifidCipher().letter_to_numbers('u'), [4,5]) - True - """ - index1, index2 = np.where(letter == self.SQUARE) - indexes = np.concatenate([index1 + 1, index2 + 1]) - return indexes - - def numbers_to_letter(self, index1: int, index2: int) -> str: - """ - Return the letter corresponding to the position [index1, index2] in - the polybius square - - >>> BifidCipher().numbers_to_letter(4, 5) == "u" - True - - >>> BifidCipher().numbers_to_letter(1, 1) == "a" - True - """ - letter = self.SQUARE[index1 - 1, index2 - 1] - return letter - - def encode(self, message: str) -> str: - """ - Return the encoded version of message according to the polybius cipher - - >>> BifidCipher().encode('testmessage') == 'qtltbdxrxlk' - True - - >>> BifidCipher().encode('Test Message') == 'qtltbdxrxlk' - True - - >>> BifidCipher().encode('test j') == BifidCipher().encode('test i') - True - """ - message = message.lower() - message = message.replace(" ", "") - message = message.replace("j", "i") - - first_step = np.empty((2, len(message))) - for letter_index in range(len(message)): - numbers = self.letter_to_numbers(message[letter_index]) - - first_step[0, letter_index] = numbers[0] - first_step[1, letter_index] = numbers[1] - - second_step = first_step.reshape(2 * len(message)) - encoded_message = "" - for numbers_index in range(len(message)): - index1 = int(second_step[numbers_index * 2]) - index2 = int(second_step[(numbers_index * 2) + 1]) - letter = self.numbers_to_letter(index1, index2) - encoded_message = encoded_message + letter - - return encoded_message - - def decode(self, message: str) -> str: - """ - Return the decoded version of message according to the polybius cipher - - >>> BifidCipher().decode('qtltbdxrxlk') == 'testmessage' - True - """ - message = message.lower() - message.replace(" ", "") - first_step = np.empty(2 * len(message)) - for letter_index in range(len(message)): - numbers = self.letter_to_numbers(message[letter_index]) - first_step[letter_index * 2] = numbers[0] - first_step[letter_index * 2 + 1] = numbers[1] - - second_step = first_step.reshape((2, len(message))) - decoded_message = "" - for numbers_index in range(len(message)): - index1 = int(second_step[0, numbers_index]) - index2 = int(second_step[1, numbers_index]) - letter = self.numbers_to_letter(index1, index2) - decoded_message = decoded_message + letter - - return decoded_message diff --git a/ciphers/brute_force_caesar_cipher.py b/ciphers/brute_force_caesar_cipher.py deleted file mode 100644 index 458d08db2628..000000000000 --- a/ciphers/brute_force_caesar_cipher.py +++ /dev/null @@ -1,58 +0,0 @@ -import string - - -def decrypt(message: str) -> None: - """ - >>> decrypt('TMDETUX PMDVU') - Decryption using Key #0: TMDETUX PMDVU - Decryption using Key #1: SLCDSTW OLCUT - Decryption using Key #2: RKBCRSV NKBTS - Decryption using Key #3: QJABQRU MJASR - Decryption using Key #4: PIZAPQT LIZRQ - Decryption using Key #5: OHYZOPS KHYQP - Decryption using Key #6: NGXYNOR JGXPO - Decryption using Key #7: MFWXMNQ IFWON - Decryption using Key #8: LEVWLMP HEVNM - Decryption using Key #9: KDUVKLO GDUML - Decryption using Key #10: JCTUJKN FCTLK - Decryption using Key #11: IBSTIJM EBSKJ - Decryption using Key #12: HARSHIL DARJI - Decryption using Key #13: GZQRGHK CZQIH - Decryption using Key #14: FYPQFGJ BYPHG - Decryption using Key #15: EXOPEFI AXOGF - Decryption using Key #16: DWNODEH ZWNFE - Decryption using Key #17: CVMNCDG YVMED - Decryption using Key #18: BULMBCF XULDC - Decryption using Key #19: ATKLABE WTKCB - Decryption using Key #20: ZSJKZAD VSJBA - Decryption using Key #21: YRIJYZC URIAZ - Decryption using Key #22: XQHIXYB TQHZY - Decryption using Key #23: WPGHWXA SPGYX - Decryption using Key #24: VOFGVWZ ROFXW - Decryption using Key #25: UNEFUVY QNEWV - """ - for key in range(len(string.ascii_uppercase)): - translated = "" - for symbol in message: - if symbol in string.ascii_uppercase: - num = string.ascii_uppercase.find(symbol) - num = num - key - if num < 0: - num = num + len(string.ascii_uppercase) - translated = translated + string.ascii_uppercase[num] - else: - translated = translated + symbol - print(f"Decryption using Key #{key}: {translated}") - - -def main() -> None: - message = input("Encrypted message: ") - message = message.upper() - decrypt(message) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/caesar_cipher.py b/ciphers/caesar_cipher.py deleted file mode 100644 index d19b9a337221..000000000000 --- a/ciphers/caesar_cipher.py +++ /dev/null @@ -1,239 +0,0 @@ -from __future__ import annotations - -from string import ascii_letters - - -def encrypt(input_string: str, key: int, alphabet: str | None = None) -> str: - """ - encrypt - ======= - Encodes a given string with the caesar cipher and returns the encoded - message - - Parameters: - ----------- - * input_string: the plain-text that needs to be encoded - * key: the number of letters to shift the message by - - Optional: - * alphabet (None): the alphabet used to encode the cipher, if not - specified, the standard english alphabet with upper and lowercase - letters is used - - Returns: - * A string containing the encoded cipher-text - - More on the caesar cipher - ========================= - The caesar cipher is named after Julius Caesar who used it when sending - secret military messages to his troops. This is a simple substitution cipher - where every character in the plain-text is shifted by a certain number known - as the "key" or "shift". - - Example: - Say we have the following message: - "Hello, captain" - - And our alphabet is made up of lower and uppercase letters: - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - - And our shift is "2" - - We can then encode the message, one letter at a time. "H" would become "J", - since "J" is two letters away, and so on. If the shift is ever two large, or - our letter is at the end of the alphabet, we just start at the beginning - ("Z" would shift to "a" then "b" and so on). - - Our final message would be "Jgnnq, ecrvckp" - - Further reading - =============== - * https://en.m.wikipedia.org/wiki/Caesar_cipher - - Doctests - ======== - >>> encrypt('The quick brown fox jumps over the lazy dog', 8) - 'bpm yCqks jzwEv nwF rCuxA wDmz Bpm tiHG lwo' - - >>> encrypt('A very large key', 8000) - 's nWjq dSjYW cWq' - - >>> encrypt('a lowercase alphabet', 5, 'abcdefghijklmnopqrstuvwxyz') - 'f qtbjwhfxj fqumfgjy' - """ - # Set default alphabet to lower and upper case english chars - alpha = alphabet or ascii_letters - - # The final result string - result = "" - - for character in input_string: - if character not in alpha: - # Append without encryption if character is not in the alphabet - result += character - else: - # Get the index of the new key and make sure it isn't too large - new_key = (alpha.index(character) + key) % len(alpha) - - # Append the encoded character to the alphabet - result += alpha[new_key] - - return result - - -def decrypt(input_string: str, key: int, alphabet: str | None = None) -> str: - """ - decrypt - ======= - Decodes a given string of cipher-text and returns the decoded plain-text - - Parameters: - ----------- - * input_string: the cipher-text that needs to be decoded - * key: the number of letters to shift the message backwards by to decode - - Optional: - * alphabet (None): the alphabet used to decode the cipher, if not - specified, the standard english alphabet with upper and lowercase - letters is used - - Returns: - * A string containing the decoded plain-text - - More on the caesar cipher - ========================= - The caesar cipher is named after Julius Caesar who used it when sending - secret military messages to his troops. This is a simple substitution cipher - where very character in the plain-text is shifted by a certain number known - as the "key" or "shift". Please keep in mind, here we will be focused on - decryption. - - Example: - Say we have the following cipher-text: - "Jgnnq, ecrvckp" - - And our alphabet is made up of lower and uppercase letters: - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" - - And our shift is "2" - - To decode the message, we would do the same thing as encoding, but in - reverse. The first letter, "J" would become "H" (remember: we are decoding) - because "H" is two letters in reverse (to the left) of "J". We would - continue doing this. A letter like "a" would shift back to the end of - the alphabet, and would become "Z" or "Y" and so on. - - Our final message would be "Hello, captain" - - Further reading - =============== - * https://en.m.wikipedia.org/wiki/Caesar_cipher - - Doctests - ======== - >>> decrypt('bpm yCqks jzwEv nwF rCuxA wDmz Bpm tiHG lwo', 8) - 'The quick brown fox jumps over the lazy dog' - - >>> decrypt('s nWjq dSjYW cWq', 8000) - 'A very large key' - - >>> decrypt('f qtbjwhfxj fqumfgjy', 5, 'abcdefghijklmnopqrstuvwxyz') - 'a lowercase alphabet' - """ - # Turn on decode mode by making the key negative - key *= -1 - - return encrypt(input_string, key, alphabet) - - -def brute_force(input_string: str, alphabet: str | None = None) -> dict[int, str]: - """ - brute_force - =========== - Returns all the possible combinations of keys and the decoded strings in the - form of a dictionary - - Parameters: - ----------- - * input_string: the cipher-text that needs to be used during brute-force - - Optional: - * alphabet: (None): the alphabet used to decode the cipher, if not - specified, the standard english alphabet with upper and lowercase - letters is used - - More about brute force - ====================== - Brute force is when a person intercepts a message or password, not knowing - the key and tries every single combination. This is easy with the caesar - cipher since there are only all the letters in the alphabet. The more - complex the cipher, the larger amount of time it will take to do brute force - - Ex: - Say we have a 5 letter alphabet (abcde), for simplicity and we intercepted the - following message: - - "dbc" - - we could then just write out every combination: - ecd... and so on, until we reach a combination that makes sense: - "cab" - - Further reading - =============== - * https://en.wikipedia.org/wiki/Brute_force - - Doctests - ======== - >>> brute_force("jFyuMy xIH'N vLONy zILwy Gy!")[20] - "Please don't brute force me!" - - >>> brute_force(1) - Traceback (most recent call last): - TypeError: 'int' object is not iterable - """ - # Set default alphabet to lower and upper case english chars - alpha = alphabet or ascii_letters - - # To store data on all the combinations - brute_force_data = {} - - # Cycle through each combination - for key in range(1, len(alpha) + 1): - # Decrypt the message and store the result in the data - brute_force_data[key] = decrypt(input_string, key, alpha) - - return brute_force_data - - -if __name__ == "__main__": - while True: - print(f'\n{"-" * 10}\n Menu\n{"-" * 10}') - print(*["1.Encrypt", "2.Decrypt", "3.BruteForce", "4.Quit"], sep="\n") - - # get user input - choice = input("\nWhat would you like to do?: ").strip() or "4" - - # run functions based on what the user chose - if choice not in ("1", "2", "3", "4"): - print("Invalid choice, please enter a valid choice") - elif choice == "1": - input_string = input("Please enter the string to be encrypted: ") - key = int(input("Please enter off-set: ").strip()) - - print(encrypt(input_string, key)) - elif choice == "2": - input_string = input("Please enter the string to be decrypted: ") - key = int(input("Please enter off-set: ").strip()) - - print(decrypt(input_string, key)) - elif choice == "3": - input_string = input("Please enter the string to be decrypted: ") - brute_force_data = brute_force(input_string) - - for key, value in brute_force_data.items(): - print(f"Key: {key} | Message: {value}") - - elif choice == "4": - print("Goodbye.") - break diff --git a/ciphers/cryptomath_module.py b/ciphers/cryptomath_module.py deleted file mode 100644 index 02e94e4b9e92..000000000000 --- a/ciphers/cryptomath_module.py +++ /dev/null @@ -1,13 +0,0 @@ -from maths.greatest_common_divisor import gcd_by_iterative - - -def find_mod_inverse(a: int, m: int) -> int: - if gcd_by_iterative(a, m) != 1: - msg = f"mod inverse of {a!r} and {m!r} does not exist" - raise ValueError(msg) - u1, u2, u3 = 1, 0, a - v1, v2, v3 = 0, 1, m - while v3 != 0: - q = u3 // v3 - v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3 - return u1 % m diff --git a/ciphers/decrypt_caesar_with_chi_squared.py b/ciphers/decrypt_caesar_with_chi_squared.py deleted file mode 100644 index 10832203e531..000000000000 --- a/ciphers/decrypt_caesar_with_chi_squared.py +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - - -def decrypt_caesar_with_chi_squared( - ciphertext: str, - cipher_alphabet: list[str] | None = None, - frequencies_dict: dict[str, float] | None = None, - case_sensitive: bool = False, -) -> tuple[int, float, str]: - """ - Basic Usage - =========== - Arguments: - * ciphertext (str): the text to decode (encoded with the caesar cipher) - - Optional Arguments: - * cipher_alphabet (list): the alphabet used for the cipher (each letter is - a string separated by commas) - * frequencies_dict (dict): a dictionary of word frequencies where keys are - the letters and values are a percentage representation of the frequency as - a decimal/float - * case_sensitive (bool): a boolean value: True if the case matters during - decryption, False if it doesn't - - Returns: - * A tuple in the form of: - ( - most_likely_cipher, - most_likely_cipher_chi_squared_value, - decoded_most_likely_cipher - ) - - where... - - most_likely_cipher is an integer representing the shift of the smallest - chi-squared statistic (most likely key) - - most_likely_cipher_chi_squared_value is a float representing the - chi-squared statistic of the most likely shift - - decoded_most_likely_cipher is a string with the decoded cipher - (decoded by the most_likely_cipher key) - - - The Chi-squared test - ==================== - - The caesar cipher - ----------------- - The caesar cipher is a very insecure encryption algorithm, however it has - been used since Julius Caesar. The cipher is a simple substitution cipher - where each character in the plain text is replaced by a character in the - alphabet a certain number of characters after the original character. The - number of characters away is called the shift or key. For example: - - Plain text: hello - Key: 1 - Cipher text: ifmmp - (each letter in hello has been shifted one to the right in the eng. alphabet) - - As you can imagine, this doesn't provide lots of security. In fact - decrypting ciphertext by brute-force is extremely easy even by hand. However - one way to do that is the chi-squared test. - - The chi-squared test - ------------------- - Each letter in the english alphabet has a frequency, or the amount of times - it shows up compared to other letters (usually expressed as a decimal - representing the percentage likelihood). The most common letter in the - english language is "e" with a frequency of 0.11162 or 11.162%. The test is - completed in the following fashion. - - 1. The ciphertext is decoded in a brute force way (every combination of the - 26 possible combinations) - 2. For every combination, for each letter in the combination, the average - amount of times the letter should appear the message is calculated by - multiplying the total number of characters by the frequency of the letter - - For example: - In a message of 100 characters, e should appear around 11.162 times. - - 3. Then, to calculate the margin of error (the amount of times the letter - SHOULD appear with the amount of times the letter DOES appear), we use - the chi-squared test. The following formula is used: - - Let: - - n be the number of times the letter actually appears - - p be the predicted value of the number of times the letter should - appear (see #2) - - let v be the chi-squared test result (referred to here as chi-squared - value/statistic) - - (n - p)^2 - --------- = v - p - - 4. Each chi squared value for each letter is then added up to the total. - The total is the chi-squared statistic for that encryption key. - 5. The encryption key with the lowest chi-squared value is the most likely - to be the decoded answer. - - Further Reading - ================ - - * http://practicalcryptography.com/cryptanalysis/text-characterisation/chi-squared- - statistic/ - * https://en.wikipedia.org/wiki/Letter_frequency - * https://en.wikipedia.org/wiki/Chi-squared_test - * https://en.m.wikipedia.org/wiki/Caesar_cipher - - Doctests - ======== - >>> decrypt_caesar_with_chi_squared( - ... 'dof pz aol jhlzhy jpwoly zv wvwbshy? pa pz avv lhzf av jyhjr!' - ... ) # doctest: +NORMALIZE_WHITESPACE - (7, 3129.228005747531, - 'why is the caesar cipher so popular? it is too easy to crack!') - - >>> decrypt_caesar_with_chi_squared('crybd cdbsxq') - (10, 233.35343938980898, 'short string') - - >>> decrypt_caesar_with_chi_squared('Crybd Cdbsxq', case_sensitive=True) - (10, 233.35343938980898, 'Short String') - - >>> decrypt_caesar_with_chi_squared(12) - Traceback (most recent call last): - AttributeError: 'int' object has no attribute 'lower' - """ - alphabet_letters = cipher_alphabet or [chr(i) for i in range(97, 123)] - - # If the argument is None or the user provided an empty dictionary - if not frequencies_dict: - # Frequencies of letters in the english language (how much they show up) - frequencies = { - "a": 0.08497, - "b": 0.01492, - "c": 0.02202, - "d": 0.04253, - "e": 0.11162, - "f": 0.02228, - "g": 0.02015, - "h": 0.06094, - "i": 0.07546, - "j": 0.00153, - "k": 0.01292, - "l": 0.04025, - "m": 0.02406, - "n": 0.06749, - "o": 0.07507, - "p": 0.01929, - "q": 0.00095, - "r": 0.07587, - "s": 0.06327, - "t": 0.09356, - "u": 0.02758, - "v": 0.00978, - "w": 0.02560, - "x": 0.00150, - "y": 0.01994, - "z": 0.00077, - } - else: - # Custom frequencies dictionary - frequencies = frequencies_dict - - if not case_sensitive: - ciphertext = ciphertext.lower() - - # Chi squared statistic values - chi_squared_statistic_values: dict[int, tuple[float, str]] = {} - - # cycle through all of the shifts - for shift in range(len(alphabet_letters)): - decrypted_with_shift = "" - - # decrypt the message with the shift - for letter in ciphertext: - try: - # Try to index the letter in the alphabet - new_key = (alphabet_letters.index(letter.lower()) - shift) % len( - alphabet_letters - ) - decrypted_with_shift += ( - alphabet_letters[new_key].upper() - if case_sensitive and letter.isupper() - else alphabet_letters[new_key] - ) - except ValueError: - # Append the character if it isn't in the alphabet - decrypted_with_shift += letter - - chi_squared_statistic = 0.0 - - # Loop through each letter in the decoded message with the shift - for letter in decrypted_with_shift: - if case_sensitive: - letter = letter.lower() - if letter in frequencies: - # Get the amount of times the letter occurs in the message - occurrences = decrypted_with_shift.lower().count(letter) - - # Get the excepcted amount of times the letter should appear based - # on letter frequencies - expected = frequencies[letter] * occurrences - - # Complete the chi squared statistic formula - chi_letter_value = ((occurrences - expected) ** 2) / expected - - # Add the margin of error to the total chi squared statistic - chi_squared_statistic += chi_letter_value - elif letter.lower() in frequencies: - # Get the amount of times the letter occurs in the message - occurrences = decrypted_with_shift.count(letter) - - # Get the excepcted amount of times the letter should appear based - # on letter frequencies - expected = frequencies[letter] * occurrences - - # Complete the chi squared statistic formula - chi_letter_value = ((occurrences - expected) ** 2) / expected - - # Add the margin of error to the total chi squared statistic - chi_squared_statistic += chi_letter_value - - # Add the data to the chi_squared_statistic_values dictionary - chi_squared_statistic_values[shift] = ( - chi_squared_statistic, - decrypted_with_shift, - ) - - # Get the most likely cipher by finding the cipher with the smallest chi squared - # statistic - def chi_squared_statistic_values_sorting_key(key: int) -> tuple[float, str]: - return chi_squared_statistic_values[key] - - most_likely_cipher: int = min( - chi_squared_statistic_values, - key=chi_squared_statistic_values_sorting_key, - ) - - # Get all the data from the most likely cipher (key, decoded message) - ( - most_likely_cipher_chi_squared_value, - decoded_most_likely_cipher, - ) = chi_squared_statistic_values[most_likely_cipher] - - # Return the data on the most likely shift - return ( - most_likely_cipher, - most_likely_cipher_chi_squared_value, - decoded_most_likely_cipher, - ) diff --git a/ciphers/deterministic_miller_rabin.py b/ciphers/deterministic_miller_rabin.py deleted file mode 100644 index 2191caf630a7..000000000000 --- a/ciphers/deterministic_miller_rabin.py +++ /dev/null @@ -1,137 +0,0 @@ -"""Created by Nathan Damon, @bizzfitch on github ->>> test_miller_rabin() -""" - - -def miller_rabin(n: int, allow_probable: bool = False) -> bool: - """Deterministic Miller-Rabin algorithm for primes ~< 3.32e24. - - Uses numerical analysis results to return whether or not the passed number - is prime. If the passed number is above the upper limit, and - allow_probable is True, then a return value of True indicates that n is - probably prime. This test does not allow False negatives- a return value - of False is ALWAYS composite. - - Parameters - ---------- - n : int - The integer to be tested. Since we usually care if a number is prime, - n < 2 returns False instead of raising a ValueError. - allow_probable: bool, default False - Whether or not to test n above the upper bound of the deterministic test. - - Raises - ------ - ValueError - - Reference - --------- - https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test - """ - if n == 2: - return True - if not n % 2 or n < 2: - return False - if n > 5 and n % 10 not in (1, 3, 7, 9): # can quickly check last digit - return False - if n > 3_317_044_064_679_887_385_961_981 and not allow_probable: - raise ValueError( - "Warning: upper bound of deterministic test is exceeded. " - "Pass allow_probable=True to allow probabilistic test. " - "A return value of True indicates a probable prime." - ) - # array bounds provided by analysis - bounds = [ - 2_047, - 1_373_653, - 25_326_001, - 3_215_031_751, - 2_152_302_898_747, - 3_474_749_660_383, - 341_550_071_728_321, - 1, - 3_825_123_056_546_413_051, - 1, - 1, - 318_665_857_834_031_151_167_461, - 3_317_044_064_679_887_385_961_981, - ] - - primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41] - for idx, _p in enumerate(bounds, 1): - if n < _p: - # then we have our last prime to check - plist = primes[:idx] - break - d, s = n - 1, 0 - # break up n -1 into a power of 2 (s) and - # remaining odd component - # essentially, solve for d * 2 ** s == n - 1 - while d % 2 == 0: - d //= 2 - s += 1 - for prime in plist: - pr = False - for r in range(s): - m = pow(prime, d * 2**r, n) - # see article for analysis explanation for m - if (r == 0 and m == 1) or ((m + 1) % n == 0): - pr = True - # this loop will not determine compositeness - break - if pr: - continue - # if pr is False, then the above loop never evaluated to true, - # and the n MUST be composite - return False - return True - - -def test_miller_rabin() -> None: - """Testing a nontrivial (ends in 1, 3, 7, 9) composite - and a prime in each range. - """ - assert not miller_rabin(561) - assert miller_rabin(563) - # 2047 - - assert not miller_rabin(838_201) - assert miller_rabin(838_207) - # 1_373_653 - - assert not miller_rabin(17_316_001) - assert miller_rabin(17_316_017) - # 25_326_001 - - assert not miller_rabin(3_078_386_641) - assert miller_rabin(3_078_386_653) - # 3_215_031_751 - - assert not miller_rabin(1_713_045_574_801) - assert miller_rabin(1_713_045_574_819) - # 2_152_302_898_747 - - assert not miller_rabin(2_779_799_728_307) - assert miller_rabin(2_779_799_728_327) - # 3_474_749_660_383 - - assert not miller_rabin(113_850_023_909_441) - assert miller_rabin(113_850_023_909_527) - # 341_550_071_728_321 - - assert not miller_rabin(1_275_041_018_848_804_351) - assert miller_rabin(1_275_041_018_848_804_391) - # 3_825_123_056_546_413_051 - - assert not miller_rabin(79_666_464_458_507_787_791_867) - assert miller_rabin(79_666_464_458_507_787_791_951) - # 318_665_857_834_031_151_167_461 - - assert not miller_rabin(552_840_677_446_647_897_660_333) - assert miller_rabin(552_840_677_446_647_897_660_359) - # 3_317_044_064_679_887_385_961_981 - # upper limit for probabilistic test - - -if __name__ == "__main__": - test_miller_rabin() diff --git a/ciphers/diffie.py b/ciphers/diffie.py deleted file mode 100644 index 1e1e868999b6..000000000000 --- a/ciphers/diffie.py +++ /dev/null @@ -1,53 +0,0 @@ -from __future__ import annotations - - -def find_primitive(modulus: int) -> int | None: - """ - Find a primitive root modulo modulus, if one exists. - - Args: - modulus : The modulus for which to find a primitive root. - - Returns: - The primitive root if one exists, or None if there is none. - - Examples: - >>> find_primitive(7) # Modulo 7 has primitive root 3 - 3 - >>> find_primitive(11) # Modulo 11 has primitive root 2 - 2 - >>> find_primitive(8) == None # Modulo 8 has no primitive root - True - """ - for r in range(1, modulus): - li = [] - for x in range(modulus - 1): - val = pow(r, x, modulus) - if val in li: - break - li.append(val) - else: - return r - return None - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - prime = int(input("Enter a prime number q: ")) - primitive_root = find_primitive(prime) - if primitive_root is None: - print(f"Cannot find the primitive for the value: {primitive_root!r}") - else: - a_private = int(input("Enter private key of A: ")) - a_public = pow(primitive_root, a_private, prime) - b_private = int(input("Enter private key of B: ")) - b_public = pow(primitive_root, b_private, prime) - - a_secret = pow(b_public, a_private, prime) - b_secret = pow(a_public, b_private, prime) - - print("The key value generated by A is: ", a_secret) - print("The key value generated by B is: ", b_secret) diff --git a/ciphers/diffie_hellman.py b/ciphers/diffie_hellman.py deleted file mode 100644 index aec7fb3eaf17..000000000000 --- a/ciphers/diffie_hellman.py +++ /dev/null @@ -1,267 +0,0 @@ -from binascii import hexlify -from hashlib import sha256 -from os import urandom - -# RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for -# Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526 - -primes = { - # 1536-bit - 5: { - "prime": int( - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF", - base=16, - ), - "generator": 2, - }, - # 2048-bit - 14: { - "prime": int( - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AACAA68FFFFFFFFFFFFFFFF", - base=16, - ), - "generator": 2, - }, - # 3072-bit - 15: { - "prime": int( - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF", - base=16, - ), - "generator": 2, - }, - # 4096-bit - 16: { - "prime": int( - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" - "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" - "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" - "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" - "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" - "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199" - "FFFFFFFFFFFFFFFF", - base=16, - ), - "generator": 2, - }, - # 6144-bit - 17: { - "prime": int( - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08" - "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B" - "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9" - "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6" - "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8" - "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C" - "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718" - "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D" - "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D" - "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226" - "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC" - "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26" - "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB" - "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2" - "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127" - "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" - "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406" - "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918" - "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151" - "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03" - "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F" - "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" - "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B" - "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632" - "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E" - "6DCC4024FFFFFFFFFFFFFFFF", - base=16, - ), - "generator": 2, - }, - # 8192-bit - 18: { - "prime": int( - "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1" - "29024E088A67CC74020BBEA63B139B22514A08798E3404DD" - "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245" - "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED" - "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D" - "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F" - "83655D23DCA3AD961C62F356208552BB9ED529077096966D" - "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B" - "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9" - "DE2BCBF6955817183995497CEA956AE515D2261898FA0510" - "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64" - "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7" - "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B" - "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C" - "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31" - "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7" - "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA" - "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6" - "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED" - "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9" - "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492" - "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD" - "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831" - "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B" - "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF" - "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6" - "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3" - "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA" - "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328" - "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C" - "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE" - "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4" - "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300" - "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568" - "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9" - "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B" - "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A" - "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36" - "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1" - "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92" - "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47" - "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" - "60C980DD98EDD3DFFFFFFFFFFFFFFFFF", - base=16, - ), - "generator": 2, - }, -} - - -class DiffieHellman: - """ - Class to represent the Diffie-Hellman key exchange protocol - - - >>> alice = DiffieHellman() - >>> bob = DiffieHellman() - - >>> alice_private = alice.get_private_key() - >>> alice_public = alice.generate_public_key() - - >>> bob_private = bob.get_private_key() - >>> bob_public = bob.generate_public_key() - - >>> # generating shared key using the DH object - >>> alice_shared = alice.generate_shared_key(bob_public) - >>> bob_shared = bob.generate_shared_key(alice_public) - - >>> assert alice_shared == bob_shared - - >>> # generating shared key using static methods - >>> alice_shared = DiffieHellman.generate_shared_key_static( - ... alice_private, bob_public - ... ) - >>> bob_shared = DiffieHellman.generate_shared_key_static( - ... bob_private, alice_public - ... ) - - >>> assert alice_shared == bob_shared - """ - - # Current minimum recommendation is 2048 bit (group 14) - def __init__(self, group: int = 14) -> None: - if group not in primes: - raise ValueError("Unsupported Group") - self.prime = primes[group]["prime"] - self.generator = primes[group]["generator"] - - self.__private_key = int(hexlify(urandom(32)), base=16) - - def get_private_key(self) -> str: - return hex(self.__private_key)[2:] - - def generate_public_key(self) -> str: - public_key = pow(self.generator, self.__private_key, self.prime) - return hex(public_key)[2:] - - def is_valid_public_key(self, key: int) -> bool: - # check if the other public key is valid based on NIST SP800-56 - return ( - 2 <= key <= self.prime - 2 - and pow(key, (self.prime - 1) // 2, self.prime) == 1 - ) - - def generate_shared_key(self, other_key_str: str) -> str: - other_key = int(other_key_str, base=16) - if not self.is_valid_public_key(other_key): - raise ValueError("Invalid public key") - shared_key = pow(other_key, self.__private_key, self.prime) - return sha256(str(shared_key).encode()).hexdigest() - - @staticmethod - def is_valid_public_key_static(remote_public_key_str: int, prime: int) -> bool: - # check if the other public key is valid based on NIST SP800-56 - return ( - 2 <= remote_public_key_str <= prime - 2 - and pow(remote_public_key_str, (prime - 1) // 2, prime) == 1 - ) - - @staticmethod - def generate_shared_key_static( - local_private_key_str: str, remote_public_key_str: str, group: int = 14 - ) -> str: - local_private_key = int(local_private_key_str, base=16) - remote_public_key = int(remote_public_key_str, base=16) - prime = primes[group]["prime"] - if not DiffieHellman.is_valid_public_key_static(remote_public_key, prime): - raise ValueError("Invalid public key") - shared_key = pow(remote_public_key, local_private_key, prime) - return sha256(str(shared_key).encode()).hexdigest() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/elgamal_key_generator.py b/ciphers/elgamal_key_generator.py deleted file mode 100644 index 17ba55c0d013..000000000000 --- a/ciphers/elgamal_key_generator.py +++ /dev/null @@ -1,66 +0,0 @@ -import os -import random -import sys - -from . import cryptomath_module as cryptomath -from . import rabin_miller - -min_primitive_root = 3 - - -# I have written my code naively same as definition of primitive root -# however every time I run this program, memory exceeded... -# so I used 4.80 Algorithm in -# Handbook of Applied Cryptography(CRC Press, ISBN : 0-8493-8523-7, October 1996) -# and it seems to run nicely! -def primitive_root(p_val: int) -> int: - print("Generating primitive root of p") - while True: - g = random.randrange(3, p_val) - if pow(g, 2, p_val) == 1: - continue - if pow(g, p_val, p_val) == 1: - continue - return g - - -def generate_key(key_size: int) -> tuple[tuple[int, int, int, int], tuple[int, int]]: - print("Generating prime p...") - p = rabin_miller.generate_large_prime(key_size) # select large prime number. - e_1 = primitive_root(p) # one primitive root on modulo p. - d = random.randrange(3, p) # private_key -> have to be greater than 2 for safety. - e_2 = cryptomath.find_mod_inverse(pow(e_1, d, p), p) - - public_key = (key_size, e_1, e_2, p) - private_key = (key_size, d) - - return public_key, private_key - - -def make_key_files(name: str, key_size: int) -> None: - if os.path.exists(f"{name}_pubkey.txt") or os.path.exists(f"{name}_privkey.txt"): - print("\nWARNING:") - print( - f'"{name}_pubkey.txt" or "{name}_privkey.txt" already exists. \n' - "Use a different name or delete these files and re-run this program." - ) - sys.exit() - - public_key, private_key = generate_key(key_size) - print(f"\nWriting public key to file {name}_pubkey.txt...") - with open(f"{name}_pubkey.txt", "w") as fo: - fo.write(f"{public_key[0]},{public_key[1]},{public_key[2]},{public_key[3]}") - - print(f"Writing private key to file {name}_privkey.txt...") - with open(f"{name}_privkey.txt", "w") as fo: - fo.write(f"{private_key[0]},{private_key[1]}") - - -def main() -> None: - print("Making key files...") - make_key_files("elgamal", 2048) - print("Key files generation successful") - - -if __name__ == "__main__": - main() diff --git a/ciphers/enigma_machine2.py b/ciphers/enigma_machine2.py deleted file mode 100644 index 163aa7172c11..000000000000 --- a/ciphers/enigma_machine2.py +++ /dev/null @@ -1,295 +0,0 @@ -""" -Wikipedia: https://en.wikipedia.org/wiki/Enigma_machine -Video explanation: https://youtu.be/QwQVMqfoB2E -Also check out Numberphile's and Computerphile's videos on this topic - -This module contains function 'enigma' which emulates -the famous Enigma machine from WWII. -Module includes: -- enigma function -- showcase of function usage -- 9 randomly generated rotors -- reflector (aka static rotor) -- original alphabet - -Created by TrapinchO -""" - -from __future__ import annotations - -RotorPositionT = tuple[int, int, int] -RotorSelectionT = tuple[str, str, str] - - -# used alphabet -------------------------- -# from string.ascii_uppercase -abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - -# -------------------------- default selection -------------------------- -# rotors -------------------------- -rotor1 = "EGZWVONAHDCLFQMSIPJBYUKXTR" -rotor2 = "FOBHMDKEXQNRAULPGSJVTYICZW" -rotor3 = "ZJXESIUQLHAVRMDOYGTNFWPBKC" -# reflector -------------------------- -reflector = { - "A": "N", - "N": "A", - "B": "O", - "O": "B", - "C": "P", - "P": "C", - "D": "Q", - "Q": "D", - "E": "R", - "R": "E", - "F": "S", - "S": "F", - "G": "T", - "T": "G", - "H": "U", - "U": "H", - "I": "V", - "V": "I", - "J": "W", - "W": "J", - "K": "X", - "X": "K", - "L": "Y", - "Y": "L", - "M": "Z", - "Z": "M", -} - -# -------------------------- extra rotors -------------------------- -rotor4 = "RMDJXFUWGISLHVTCQNKYPBEZOA" -rotor5 = "SGLCPQWZHKXAREONTFBVIYJUDM" -rotor6 = "HVSICLTYKQUBXDWAJZOMFGPREN" -rotor7 = "RZWQHFMVDBKICJLNTUXAGYPSOE" -rotor8 = "LFKIJODBEGAMQPXVUHYSTCZRWN" -rotor9 = "KOAEGVDHXPQZMLFTYWJNBRCIUS" - - -def _validator( - rotpos: RotorPositionT, rotsel: RotorSelectionT, pb: str -) -> tuple[RotorPositionT, RotorSelectionT, dict[str, str]]: - """ - Checks if the values can be used for the 'enigma' function - - >>> _validator((1,1,1), (rotor1, rotor2, rotor3), 'POLAND') - ((1, 1, 1), ('EGZWVONAHDCLFQMSIPJBYUKXTR', 'FOBHMDKEXQNRAULPGSJVTYICZW', \ -'ZJXESIUQLHAVRMDOYGTNFWPBKC'), \ -{'P': 'O', 'O': 'P', 'L': 'A', 'A': 'L', 'N': 'D', 'D': 'N'}) - - :param rotpos: rotor_positon - :param rotsel: rotor_selection - :param pb: plugb -> validated and transformed - :return: (rotpos, rotsel, pb) - """ - # Checks if there are 3 unique rotors - - if (unique_rotsel := len(set(rotsel))) < 3: - msg = f"Please use 3 unique rotors (not {unique_rotsel})" - raise Exception(msg) - - # Checks if rotor positions are valid - rotorpos1, rotorpos2, rotorpos3 = rotpos - if not 0 < rotorpos1 <= len(abc): - msg = f"First rotor position is not within range of 1..26 ({rotorpos1}" - raise ValueError(msg) - if not 0 < rotorpos2 <= len(abc): - msg = f"Second rotor position is not within range of 1..26 ({rotorpos2})" - raise ValueError(msg) - if not 0 < rotorpos3 <= len(abc): - msg = f"Third rotor position is not within range of 1..26 ({rotorpos3})" - raise ValueError(msg) - - # Validates string and returns dict - pbdict = _plugboard(pb) - - return rotpos, rotsel, pbdict - - -def _plugboard(pbstring: str) -> dict[str, str]: - """ - https://en.wikipedia.org/wiki/Enigma_machine#Plugboard - - >>> _plugboard('PICTURES') - {'P': 'I', 'I': 'P', 'C': 'T', 'T': 'C', 'U': 'R', 'R': 'U', 'E': 'S', 'S': 'E'} - >>> _plugboard('POLAND') - {'P': 'O', 'O': 'P', 'L': 'A', 'A': 'L', 'N': 'D', 'D': 'N'} - - In the code, 'pb' stands for 'plugboard' - - Pairs can be separated by spaces - :param pbstring: string containing plugboard setting for the Enigma machine - :return: dictionary containing converted pairs - """ - - # tests the input string if it - # a) is type string - # b) has even length (so pairs can be made) - if not isinstance(pbstring, str): - msg = f"Plugboard setting isn't type string ({type(pbstring)})" - raise TypeError(msg) - elif len(pbstring) % 2 != 0: - msg = f"Odd number of symbols ({len(pbstring)})" - raise Exception(msg) - elif pbstring == "": - return {} - - pbstring.replace(" ", "") - - # Checks if all characters are unique - tmppbl = set() - for i in pbstring: - if i not in abc: - msg = f"'{i}' not in list of symbols" - raise Exception(msg) - elif i in tmppbl: - msg = f"Duplicate symbol ({i})" - raise Exception(msg) - else: - tmppbl.add(i) - del tmppbl - - # Created the dictionary - pb = {} - for j in range(0, len(pbstring) - 1, 2): - pb[pbstring[j]] = pbstring[j + 1] - pb[pbstring[j + 1]] = pbstring[j] - - return pb - - -def enigma( - text: str, - rotor_position: RotorPositionT, - rotor_selection: RotorSelectionT = (rotor1, rotor2, rotor3), - plugb: str = "", -) -> str: - """ - The only difference with real-world enigma is that I allowed string input. - All characters are converted to uppercase. (non-letter symbol are ignored) - How it works: - (for every letter in the message) - - - Input letter goes into the plugboard. - If it is connected to another one, switch it. - - - Letter goes through 3 rotors. - Each rotor can be represented as 2 sets of symbol, where one is shuffled. - Each symbol from the first set has corresponding symbol in - the second set and vice versa. - - example: - | ABCDEFGHIJKLMNOPQRSTUVWXYZ | e.g. F=D and D=F - | VKLEPDBGRNWTFCJOHQAMUZYIXS | - - - Symbol then goes through reflector (static rotor). - There it is switched with paired symbol - The reflector can be represented as2 sets, each with half of the alphanet. - There are usually 10 pairs of letters. - - Example: - | ABCDEFGHIJKLM | e.g. E is paired to X - | ZYXWVUTSRQPON | so when E goes in X goes out and vice versa - - - Letter then goes through the rotors again - - - If the letter is connected to plugboard, it is switched. - - - Return the letter - - >>> enigma('Hello World!', (1, 2, 1), plugb='pictures') - 'KORYH JUHHI!' - >>> enigma('KORYH, juhhi!', (1, 2, 1), plugb='pictures') - 'HELLO, WORLD!' - >>> enigma('hello world!', (1, 1, 1), plugb='pictures') - 'FPNCZ QWOBU!' - >>> enigma('FPNCZ QWOBU', (1, 1, 1), plugb='pictures') - 'HELLO WORLD' - - - :param text: input message - :param rotor_position: tuple with 3 values in range 1..26 - :param rotor_selection: tuple with 3 rotors () - :param plugb: string containing plugboard configuration (default '') - :return: en/decrypted string - """ - - text = text.upper() - rotor_position, rotor_selection, plugboard = _validator( - rotor_position, rotor_selection, plugb.upper() - ) - - rotorpos1, rotorpos2, rotorpos3 = rotor_position - rotor1, rotor2, rotor3 = rotor_selection - rotorpos1 -= 1 - rotorpos2 -= 1 - rotorpos3 -= 1 - - result = [] - - # encryption/decryption process -------------------------- - for symbol in text: - if symbol in abc: - # 1st plugboard -------------------------- - if symbol in plugboard: - symbol = plugboard[symbol] - - # rotor ra -------------------------- - index = abc.index(symbol) + rotorpos1 - symbol = rotor1[index % len(abc)] - - # rotor rb -------------------------- - index = abc.index(symbol) + rotorpos2 - symbol = rotor2[index % len(abc)] - - # rotor rc -------------------------- - index = abc.index(symbol) + rotorpos3 - symbol = rotor3[index % len(abc)] - - # reflector -------------------------- - # this is the reason you don't need another machine to decipher - - symbol = reflector[symbol] - - # 2nd rotors - symbol = abc[rotor3.index(symbol) - rotorpos3] - symbol = abc[rotor2.index(symbol) - rotorpos2] - symbol = abc[rotor1.index(symbol) - rotorpos1] - - # 2nd plugboard - if symbol in plugboard: - symbol = plugboard[symbol] - - # moves/resets rotor positions - rotorpos1 += 1 - if rotorpos1 >= len(abc): - rotorpos1 = 0 - rotorpos2 += 1 - if rotorpos2 >= len(abc): - rotorpos2 = 0 - rotorpos3 += 1 - if rotorpos3 >= len(abc): - rotorpos3 = 0 - - # else: - # pass - # Error could be also raised - # raise ValueError( - # 'Invalid symbol('+repr(symbol)+')') - result.append(symbol) - - return "".join(result) - - -if __name__ == "__main__": - message = "This is my Python script that emulates the Enigma machine from WWII." - rotor_pos = (1, 1, 1) - pb = "pictures" - rotor_sel = (rotor2, rotor4, rotor8) - en = enigma(message, rotor_pos, rotor_sel, pb) - - print("Encrypted message:", en) - print("Decrypted message:", enigma(en, rotor_pos, rotor_sel, pb)) diff --git a/ciphers/fractionated_morse_cipher.py b/ciphers/fractionated_morse_cipher.py deleted file mode 100644 index 6c4c415abac1..000000000000 --- a/ciphers/fractionated_morse_cipher.py +++ /dev/null @@ -1,168 +0,0 @@ -""" -Python program for the Fractionated Morse Cipher. - -The Fractionated Morse cipher first converts the plaintext to Morse code, -then enciphers fixed-size blocks of Morse code back to letters. -This procedure means plaintext letters are mixed into the ciphertext letters, -making it more secure than substitution ciphers. - -http://practicalcryptography.com/ciphers/fractionated-morse-cipher/ -""" - -import string - -MORSE_CODE_DICT = { - "A": ".-", - "B": "-...", - "C": "-.-.", - "D": "-..", - "E": ".", - "F": "..-.", - "G": "--.", - "H": "....", - "I": "..", - "J": ".---", - "K": "-.-", - "L": ".-..", - "M": "--", - "N": "-.", - "O": "---", - "P": ".--.", - "Q": "--.-", - "R": ".-.", - "S": "...", - "T": "-", - "U": "..-", - "V": "...-", - "W": ".--", - "X": "-..-", - "Y": "-.--", - "Z": "--..", - " ": "", -} - -# Define possible trigrams of Morse code -MORSE_COMBINATIONS = [ - "...", - "..-", - "..x", - ".-.", - ".--", - ".-x", - ".x.", - ".x-", - ".xx", - "-..", - "-.-", - "-.x", - "--.", - "---", - "--x", - "-x.", - "-x-", - "-xx", - "x..", - "x.-", - "x.x", - "x-.", - "x--", - "x-x", - "xx.", - "xx-", - "xxx", -] - -# Create a reverse dictionary for Morse code -REVERSE_DICT = {value: key for key, value in MORSE_CODE_DICT.items()} - - -def encode_to_morse(plaintext: str) -> str: - """Encode a plaintext message into Morse code. - - Args: - plaintext: The plaintext message to encode. - - Returns: - The Morse code representation of the plaintext message. - - Example: - >>> encode_to_morse("defend the east") - '-..x.x..-.x.x-.x-..xx-x....x.xx.x.-x...x-' - """ - return "x".join([MORSE_CODE_DICT.get(letter.upper(), "") for letter in plaintext]) - - -def encrypt_fractionated_morse(plaintext: str, key: str) -> str: - """Encrypt a plaintext message using Fractionated Morse Cipher. - - Args: - plaintext: The plaintext message to encrypt. - key: The encryption key. - - Returns: - The encrypted ciphertext. - - Example: - >>> encrypt_fractionated_morse("defend the east","Roundtable") - 'ESOAVVLJRSSTRX' - - """ - morse_code = encode_to_morse(plaintext) - key = key.upper() + string.ascii_uppercase - key = "".join(sorted(set(key), key=key.find)) - - # Ensure morse_code length is a multiple of 3 - padding_length = 3 - (len(morse_code) % 3) - morse_code += "x" * padding_length - - fractionated_morse_dict = {v: k for k, v in zip(key, MORSE_COMBINATIONS)} - fractionated_morse_dict["xxx"] = "" - encrypted_text = "".join( - [ - fractionated_morse_dict[morse_code[i : i + 3]] - for i in range(0, len(morse_code), 3) - ] - ) - return encrypted_text - - -def decrypt_fractionated_morse(ciphertext: str, key: str) -> str: - """Decrypt a ciphertext message encrypted with Fractionated Morse Cipher. - - Args: - ciphertext: The ciphertext message to decrypt. - key: The decryption key. - - Returns: - The decrypted plaintext message. - - Example: - >>> decrypt_fractionated_morse("ESOAVVLJRSSTRX","Roundtable") - 'DEFEND THE EAST' - """ - key = key.upper() + string.ascii_uppercase - key = "".join(sorted(set(key), key=key.find)) - - inverse_fractionated_morse_dict = dict(zip(key, MORSE_COMBINATIONS)) - morse_code = "".join( - [inverse_fractionated_morse_dict.get(letter, "") for letter in ciphertext] - ) - decrypted_text = "".join( - [REVERSE_DICT[code] for code in morse_code.split("x")] - ).strip() - return decrypted_text - - -if __name__ == "__main__": - """ - Example usage of Fractionated Morse Cipher. - """ - plaintext = "defend the east" - print("Plain Text:", plaintext) - key = "ROUNDTABLE" - - ciphertext = encrypt_fractionated_morse(plaintext, key) - print("Encrypted:", ciphertext) - - decrypted_text = decrypt_fractionated_morse(ciphertext, key) - print("Decrypted:", decrypted_text) diff --git a/ciphers/gronsfeld_cipher.py b/ciphers/gronsfeld_cipher.py deleted file mode 100644 index 8fbeab4307fc..000000000000 --- a/ciphers/gronsfeld_cipher.py +++ /dev/null @@ -1,45 +0,0 @@ -from string import ascii_uppercase - - -def gronsfeld(text: str, key: str) -> str: - """ - Encrypt plaintext with the Gronsfeld cipher - - >>> gronsfeld('hello', '412') - 'LFNPP' - >>> gronsfeld('hello', '123') - 'IGOMQ' - >>> gronsfeld('', '123') - '' - >>> gronsfeld('yes, ¥€$ - _!@#%?', '0') - 'YES, ¥€$ - _!@#%?' - >>> gronsfeld('yes, ¥€$ - _!@#%?', '01') - 'YFS, ¥€$ - _!@#%?' - >>> gronsfeld('yes, ¥€$ - _!@#%?', '012') - 'YFU, ¥€$ - _!@#%?' - >>> gronsfeld('yes, ¥€$ - _!@#%?', '') - Traceback (most recent call last): - ... - ZeroDivisionError: integer modulo by zero - """ - ascii_len = len(ascii_uppercase) - key_len = len(key) - encrypted_text = "" - keys = [int(char) for char in key] - upper_case_text = text.upper() - - for i, char in enumerate(upper_case_text): - if char in ascii_uppercase: - new_position = (ascii_uppercase.index(char) + keys[i % key_len]) % ascii_len - shifted_letter = ascii_uppercase[new_position] - encrypted_text += shifted_letter - else: - encrypted_text += char - - return encrypted_text - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/ciphers/hill_cipher.py b/ciphers/hill_cipher.py deleted file mode 100644 index 33b2529f017b..000000000000 --- a/ciphers/hill_cipher.py +++ /dev/null @@ -1,219 +0,0 @@ -""" - -Hill Cipher: -The 'HillCipher' class below implements the Hill Cipher algorithm which uses -modern linear algebra techniques to encode and decode text using an encryption -key matrix. - -Algorithm: -Let the order of the encryption key be N (as it is a square matrix). -Your text is divided into batches of length N and converted to numerical vectors -by a simple mapping starting with A=0 and so on. - -The key is then multiplied with the newly created batch vector to obtain the -encoded vector. After each multiplication modular 36 calculations are performed -on the vectors so as to bring the numbers between 0 and 36 and then mapped with -their corresponding alphanumerics. - -While decrypting, the decrypting key is found which is the inverse of the -encrypting key modular 36. The same process is repeated for decrypting to get -the original message back. - -Constraints: -The determinant of the encryption key matrix must be relatively prime w.r.t 36. - -Note: -This implementation only considers alphanumerics in the text. If the length of -the text to be encrypted is not a multiple of the break key(the length of one -batch of letters), the last character of the text is added to the text until the -length of the text reaches a multiple of the break_key. So the text after -decrypting might be a little different than the original text. - -References: -https://apprendre-en-ligne.net/crypto/hill/Hillciph.pdf -https://www.youtube.com/watch?v=kfmNeskzs2o -https://www.youtube.com/watch?v=4RhLNDqcjpA - -""" - -import string - -import numpy as np - -from maths.greatest_common_divisor import greatest_common_divisor - - -class HillCipher: - key_string = string.ascii_uppercase + string.digits - # This cipher takes alphanumerics into account - # i.e. a total of 36 characters - - # take x and return x % len(key_string) - modulus = np.vectorize(lambda x: x % 36) - - to_int = np.vectorize(round) - - def __init__(self, encrypt_key: np.ndarray) -> None: - """ - encrypt_key is an NxN numpy array - """ - self.encrypt_key = self.modulus(encrypt_key) # mod36 calc's on the encrypt key - self.check_determinant() # validate the determinant of the encryption key - self.break_key = encrypt_key.shape[0] - - def replace_letters(self, letter: str) -> int: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.replace_letters('T') - 19 - >>> hill_cipher.replace_letters('0') - 26 - """ - return self.key_string.index(letter) - - def replace_digits(self, num: int) -> str: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.replace_digits(19) - 'T' - >>> hill_cipher.replace_digits(26) - '0' - """ - return self.key_string[round(num)] - - def check_determinant(self) -> None: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.check_determinant() - """ - det = round(np.linalg.det(self.encrypt_key)) - - if det < 0: - det = det % len(self.key_string) - - req_l = len(self.key_string) - if greatest_common_divisor(det, len(self.key_string)) != 1: - msg = ( - f"determinant modular {req_l} of encryption key({det}) " - f"is not co prime w.r.t {req_l}.\nTry another key." - ) - raise ValueError(msg) - - def process_text(self, text: str) -> str: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.process_text('Testing Hill Cipher') - 'TESTINGHILLCIPHERR' - >>> hill_cipher.process_text('hello') - 'HELLOO' - """ - chars = [char for char in text.upper() if char in self.key_string] - - last = chars[-1] - while len(chars) % self.break_key != 0: - chars.append(last) - - return "".join(chars) - - def encrypt(self, text: str) -> str: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.encrypt('testing hill cipher') - 'WHXYJOLM9C6XT085LL' - >>> hill_cipher.encrypt('hello') - '85FF00' - """ - text = self.process_text(text.upper()) - encrypted = "" - - for i in range(0, len(text) - self.break_key + 1, self.break_key): - batch = text[i : i + self.break_key] - vec = [self.replace_letters(char) for char in batch] - batch_vec = np.array([vec]).T - batch_encrypted = self.modulus(self.encrypt_key.dot(batch_vec)).T.tolist()[ - 0 - ] - encrypted_batch = "".join( - self.replace_digits(num) for num in batch_encrypted - ) - encrypted += encrypted_batch - - return encrypted - - def make_decrypt_key(self) -> np.ndarray: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.make_decrypt_key() - array([[ 6, 25], - [ 5, 26]]) - """ - det = round(np.linalg.det(self.encrypt_key)) - - if det < 0: - det = det % len(self.key_string) - det_inv = None - for i in range(len(self.key_string)): - if (det * i) % len(self.key_string) == 1: - det_inv = i - break - - inv_key = ( - det_inv * np.linalg.det(self.encrypt_key) * np.linalg.inv(self.encrypt_key) - ) - - return self.to_int(self.modulus(inv_key)) - - def decrypt(self, text: str) -> str: - """ - >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]])) - >>> hill_cipher.decrypt('WHXYJOLM9C6XT085LL') - 'TESTINGHILLCIPHERR' - >>> hill_cipher.decrypt('85FF00') - 'HELLOO' - """ - decrypt_key = self.make_decrypt_key() - text = self.process_text(text.upper()) - decrypted = "" - - for i in range(0, len(text) - self.break_key + 1, self.break_key): - batch = text[i : i + self.break_key] - vec = [self.replace_letters(char) for char in batch] - batch_vec = np.array([vec]).T - batch_decrypted = self.modulus(decrypt_key.dot(batch_vec)).T.tolist()[0] - decrypted_batch = "".join( - self.replace_digits(num) for num in batch_decrypted - ) - decrypted += decrypted_batch - - return decrypted - - -def main() -> None: - n = int(input("Enter the order of the encryption key: ")) - hill_matrix = [] - - print("Enter each row of the encryption key with space separated integers") - for _ in range(n): - row = [int(x) for x in input().split()] - hill_matrix.append(row) - - hc = HillCipher(np.array(hill_matrix)) - - print("Would you like to encrypt or decrypt some text? (1 or 2)") - option = input("\n1. Encrypt\n2. Decrypt\n") - if option == "1": - text_e = input("What text would you like to encrypt?: ") - print("Your encrypted text is:") - print(hc.encrypt(text_e)) - elif option == "2": - text_d = input("What text would you like to decrypt?: ") - print("Your decrypted text is:") - print(hc.decrypt(text_d)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - main() diff --git a/ciphers/mixed_keyword_cypher.py b/ciphers/mixed_keyword_cypher.py deleted file mode 100644 index 1b186108a73e..000000000000 --- a/ciphers/mixed_keyword_cypher.py +++ /dev/null @@ -1,75 +0,0 @@ -from string import ascii_uppercase - - -def mixed_keyword( - keyword: str, plaintext: str, verbose: bool = False, alphabet: str = ascii_uppercase -) -> str: - """ - For keyword: hello - - H E L O - A B C D - F G I J - K M N P - Q R S T - U V W X - Y Z - and map vertically - - >>> mixed_keyword("college", "UNIVERSITY", True) # doctest: +NORMALIZE_WHITESPACE - {'A': 'C', 'B': 'A', 'C': 'I', 'D': 'P', 'E': 'U', 'F': 'Z', 'G': 'O', 'H': 'B', - 'I': 'J', 'J': 'Q', 'K': 'V', 'L': 'L', 'M': 'D', 'N': 'K', 'O': 'R', 'P': 'W', - 'Q': 'E', 'R': 'F', 'S': 'M', 'T': 'S', 'U': 'X', 'V': 'G', 'W': 'H', 'X': 'N', - 'Y': 'T', 'Z': 'Y'} - 'XKJGUFMJST' - - >>> mixed_keyword("college", "UNIVERSITY", False) # doctest: +NORMALIZE_WHITESPACE - 'XKJGUFMJST' - """ - keyword = keyword.upper() - plaintext = plaintext.upper() - alphabet_set = set(alphabet) - - # create a list of unique characters in the keyword - their order matters - # it determines how we will map plaintext characters to the ciphertext - unique_chars = [] - for char in keyword: - if char in alphabet_set and char not in unique_chars: - unique_chars.append(char) - # the number of those unique characters will determine the number of rows - num_unique_chars_in_keyword = len(unique_chars) - - # create a shifted version of the alphabet - shifted_alphabet = unique_chars + [ - char for char in alphabet if char not in unique_chars - ] - - # create a modified alphabet by splitting the shifted alphabet into rows - modified_alphabet = [ - shifted_alphabet[k : k + num_unique_chars_in_keyword] - for k in range(0, 26, num_unique_chars_in_keyword) - ] - - # map the alphabet characters to the modified alphabet characters - # going 'vertically' through the modified alphabet - consider columns first - mapping = {} - letter_index = 0 - for column in range(num_unique_chars_in_keyword): - for row in modified_alphabet: - # if current row (the last one) is too short, break out of loop - if len(row) <= column: - break - - # map current letter to letter in modified alphabet - mapping[alphabet[letter_index]] = row[column] - letter_index += 1 - - if verbose: - print(mapping) - # create the encrypted text by mapping the plaintext to the modified alphabet - return "".join(mapping.get(char, char) for char in plaintext) - - -if __name__ == "__main__": - # example use - print(mixed_keyword("college", "UNIVERSITY")) diff --git a/ciphers/mono_alphabetic_ciphers.py b/ciphers/mono_alphabetic_ciphers.py deleted file mode 100644 index 46013f4936bc..000000000000 --- a/ciphers/mono_alphabetic_ciphers.py +++ /dev/null @@ -1,63 +0,0 @@ -from typing import Literal - -LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - - -def translate_message( - key: str, message: str, mode: Literal["encrypt", "decrypt"] -) -> str: - """ - >>> translate_message("QWERTYUIOPASDFGHJKLZXCVBNM","Hello World","encrypt") - 'Pcssi Bidsm' - """ - chars_a = LETTERS if mode == "decrypt" else key - chars_b = key if mode == "decrypt" else LETTERS - translated = "" - # loop through each symbol in the message - for symbol in message: - if symbol.upper() in chars_a: - # encrypt/decrypt the symbol - sym_index = chars_a.find(symbol.upper()) - if symbol.isupper(): - translated += chars_b[sym_index].upper() - else: - translated += chars_b[sym_index].lower() - else: - # symbol is not in LETTERS, just add it - translated += symbol - return translated - - -def encrypt_message(key: str, message: str) -> str: - """ - >>> encrypt_message("QWERTYUIOPASDFGHJKLZXCVBNM", "Hello World") - 'Pcssi Bidsm' - """ - return translate_message(key, message, "encrypt") - - -def decrypt_message(key: str, message: str) -> str: - """ - >>> decrypt_message("QWERTYUIOPASDFGHJKLZXCVBNM", "Hello World") - 'Itssg Vgksr' - """ - return translate_message(key, message, "decrypt") - - -def main() -> None: - message = "Hello World" - key = "QWERTYUIOPASDFGHJKLZXCVBNM" - mode = "decrypt" # set to 'encrypt' or 'decrypt' - - if mode == "encrypt": - translated = encrypt_message(key, message) - elif mode == "decrypt": - translated = decrypt_message(key, message) - print(f"Using the key {key}, the {mode}ed message is: {translated}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/morse_code.py b/ciphers/morse_code.py deleted file mode 100644 index 0370c26fe4a6..000000000000 --- a/ciphers/morse_code.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -""" -Python program to translate to and from Morse code. - -https://en.wikipedia.org/wiki/Morse_code -""" - -# fmt: off -MORSE_CODE_DICT = { - "A": ".-", "B": "-...", "C": "-.-.", "D": "-..", "E": ".", "F": "..-.", "G": "--.", - "H": "....", "I": "..", "J": ".---", "K": "-.-", "L": ".-..", "M": "--", "N": "-.", - "O": "---", "P": ".--.", "Q": "--.-", "R": ".-.", "S": "...", "T": "-", "U": "..-", - "V": "...-", "W": ".--", "X": "-..-", "Y": "-.--", "Z": "--..", "1": ".----", - "2": "..---", "3": "...--", "4": "....-", "5": ".....", "6": "-....", "7": "--...", - "8": "---..", "9": "----.", "0": "-----", "&": ".-...", "@": ".--.-.", - ":": "---...", ",": "--..--", ".": ".-.-.-", "'": ".----.", '"': ".-..-.", - "?": "..--..", "/": "-..-.", "=": "-...-", "+": ".-.-.", "-": "-....-", - "(": "-.--.", ")": "-.--.-", "!": "-.-.--", " ": "/" -} # Exclamation mark is not in ITU-R recommendation -# fmt: on -REVERSE_DICT = {value: key for key, value in MORSE_CODE_DICT.items()} - - -def encrypt(message: str) -> str: - """ - >>> encrypt("Sos!") - '... --- ... -.-.--' - >>> encrypt("SOS!") == encrypt("sos!") - True - """ - return " ".join(MORSE_CODE_DICT[char] for char in message.upper()) - - -def decrypt(message: str) -> str: - """ - >>> decrypt('... --- ... -.-.--') - 'SOS!' - """ - return "".join(REVERSE_DICT[char] for char in message.split()) - - -def main() -> None: - """ - >>> s = "".join(MORSE_CODE_DICT) - >>> decrypt(encrypt(s)) == s - True - """ - message = "Morse code here!" - print(message) - message = encrypt(message) - print(message) - message = decrypt(message) - print(message) - - -if __name__ == "__main__": - main() diff --git a/ciphers/onepad_cipher.py b/ciphers/onepad_cipher.py deleted file mode 100644 index c4fb22e14a06..000000000000 --- a/ciphers/onepad_cipher.py +++ /dev/null @@ -1,64 +0,0 @@ -import random - - -class Onepad: - @staticmethod - def encrypt(text: str) -> tuple[list[int], list[int]]: - """ - Function to encrypt text using pseudo-random numbers - >>> Onepad().encrypt("") - ([], []) - >>> Onepad().encrypt([]) - ([], []) - >>> random.seed(1) - >>> Onepad().encrypt(" ") - ([6969], [69]) - >>> random.seed(1) - >>> Onepad().encrypt("Hello") - ([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) - >>> Onepad().encrypt(1) - Traceback (most recent call last): - ... - TypeError: 'int' object is not iterable - >>> Onepad().encrypt(1.1) - Traceback (most recent call last): - ... - TypeError: 'float' object is not iterable - """ - plain = [ord(i) for i in text] - key = [] - cipher = [] - for i in plain: - k = random.randint(1, 300) - c = (i + k) * k - cipher.append(c) - key.append(k) - return cipher, key - - @staticmethod - def decrypt(cipher: list[int], key: list[int]) -> str: - """ - Function to decrypt text using pseudo-random numbers. - >>> Onepad().decrypt([], []) - '' - >>> Onepad().decrypt([35], []) - '' - >>> Onepad().decrypt([], [35]) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> random.seed(1) - >>> Onepad().decrypt([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61]) - 'Hello' - """ - plain = [] - for i in range(len(key)): - p = int((cipher[i] - (key[i]) ** 2) / key[i]) - plain.append(chr(p)) - return "".join(plain) - - -if __name__ == "__main__": - c, k = Onepad().encrypt("Hello") - print(c, k) - print(Onepad().decrypt(c, k)) diff --git a/ciphers/permutation_cipher.py b/ciphers/permutation_cipher.py deleted file mode 100644 index 9e1c64a7b4ea..000000000000 --- a/ciphers/permutation_cipher.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -The permutation cipher, also called the transposition cipher, is a simple encryption -technique that rearranges the characters in a message based on a secret key. It -divides the message into blocks and applies a permutation to the characters within -each block according to the key. The key is a sequence of unique integers that -determine the order of character rearrangement. - -For more info: https://www.nku.edu/~christensen/1402%20permutation%20ciphers.pdf -""" - -import random - - -def generate_valid_block_size(message_length: int) -> int: - """ - Generate a valid block size that is a factor of the message length. - - Args: - message_length (int): The length of the message. - - Returns: - int: A valid block size. - - Example: - >>> random.seed(1) - >>> generate_valid_block_size(12) - 3 - """ - block_sizes = [ - block_size - for block_size in range(2, message_length + 1) - if message_length % block_size == 0 - ] - return random.choice(block_sizes) - - -def generate_permutation_key(block_size: int) -> list[int]: - """ - Generate a random permutation key of a specified block size. - - Args: - block_size (int): The size of each permutation block. - - Returns: - list[int]: A list containing a random permutation of digits. - - Example: - >>> random.seed(0) - >>> generate_permutation_key(4) - [2, 0, 1, 3] - """ - digits = list(range(block_size)) - random.shuffle(digits) - return digits - - -def encrypt( - message: str, key: list[int] | None = None, block_size: int | None = None -) -> tuple[str, list[int]]: - """ - Encrypt a message using a permutation cipher with block rearrangement using a key. - - Args: - message (str): The plaintext message to be encrypted. - key (list[int]): The permutation key for decryption. - block_size (int): The size of each permutation block. - - Returns: - tuple: A tuple containing the encrypted message and the encryption key. - - Example: - >>> encrypted_message, key = encrypt("HELLO WORLD") - >>> decrypted_message = decrypt(encrypted_message, key) - >>> decrypted_message - 'HELLO WORLD' - """ - message = message.upper() - message_length = len(message) - - if key is None or block_size is None: - block_size = generate_valid_block_size(message_length) - key = generate_permutation_key(block_size) - - encrypted_message = "" - - for i in range(0, message_length, block_size): - block = message[i : i + block_size] - rearranged_block = [block[digit] for digit in key] - encrypted_message += "".join(rearranged_block) - - return encrypted_message, key - - -def decrypt(encrypted_message: str, key: list[int]) -> str: - """ - Decrypt an encrypted message using a permutation cipher with block rearrangement. - - Args: - encrypted_message (str): The encrypted message. - key (list[int]): The permutation key for decryption. - - Returns: - str: The decrypted plaintext message. - - Example: - >>> encrypted_message, key = encrypt("HELLO WORLD") - >>> decrypted_message = decrypt(encrypted_message, key) - >>> decrypted_message - 'HELLO WORLD' - """ - key_length = len(key) - decrypted_message = "" - - for i in range(0, len(encrypted_message), key_length): - block = encrypted_message[i : i + key_length] - original_block = [""] * key_length - for j, digit in enumerate(key): - original_block[digit] = block[j] - decrypted_message += "".join(original_block) - - return decrypted_message - - -def main() -> None: - """ - Driver function to pass message to get encrypted, then decrypted. - - Example: - >>> main() - Decrypted message: HELLO WORLD - """ - message = "HELLO WORLD" - encrypted_message, key = encrypt(message) - - decrypted_message = decrypt(encrypted_message, key) - print(f"Decrypted message: {decrypted_message}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/playfair_cipher.py b/ciphers/playfair_cipher.py deleted file mode 100644 index 86b45bc4fb6a..000000000000 --- a/ciphers/playfair_cipher.py +++ /dev/null @@ -1,159 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Playfair_cipher#Description - -The Playfair cipher was developed by Charles Wheatstone in 1854 -It's use was heavily promotedby Lord Playfair, hence its name - -Some features of the Playfair cipher are: - -1) It was the first literal diagram substitution cipher -2) It is a manual symmetric encryption technique -3) It is a multiple letter encryption cipher - -The implementation in the code below encodes alphabets only. -It removes spaces, special characters and numbers from the -code. - -Playfair is no longer used by military forces because of known -insecurities and of the advent of automated encryption devices. -This cipher is regarded as insecure since before World War I. -""" - -import itertools -import string -from collections.abc import Generator, Iterable - - -def chunker(seq: Iterable[str], size: int) -> Generator[tuple[str, ...], None, None]: - it = iter(seq) - while True: - chunk = tuple(itertools.islice(it, size)) - if not chunk: - return - yield chunk - - -def prepare_input(dirty: str) -> str: - """ - Prepare the plaintext by up-casing it - and separating repeated letters with X's - """ - - dirty = "".join([c.upper() for c in dirty if c in string.ascii_letters]) - clean = "" - - if len(dirty) < 2: - return dirty - - for i in range(len(dirty) - 1): - clean += dirty[i] - - if dirty[i] == dirty[i + 1]: - clean += "X" - - clean += dirty[-1] - - if len(clean) & 1: - clean += "X" - - return clean - - -def generate_table(key: str) -> list[str]: - # I and J are used interchangeably to allow - # us to use a 5x5 table (25 letters) - alphabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ" - # we're using a list instead of a '2d' array because it makes the math - # for setting up the table and doing the actual encoding/decoding simpler - table = [] - - # copy key chars into the table if they are in `alphabet` ignoring duplicates - for char in key.upper(): - if char not in table and char in alphabet: - table.append(char) - - # fill the rest of the table in with the remaining alphabet chars - for char in alphabet: - if char not in table: - table.append(char) - - return table - - -def encode(plaintext: str, key: str) -> str: - """ - Encode the given plaintext using the Playfair cipher. - Takes the plaintext and the key as input and returns the encoded string. - - >>> encode("Hello", "MONARCHY") - 'CFSUPM' - >>> encode("attack on the left flank", "EMERGENCY") - 'DQZSBYFSDZFMFNLOHFDRSG' - >>> encode("Sorry!", "SPECIAL") - 'AVXETX' - >>> encode("Number 1", "NUMBER") - 'UMBENF' - >>> encode("Photosynthesis!", "THE SUN") - 'OEMHQHVCHESUKE' - """ - - table = generate_table(key) - plaintext = prepare_input(plaintext) - ciphertext = "" - - for char1, char2 in chunker(plaintext, 2): - row1, col1 = divmod(table.index(char1), 5) - row2, col2 = divmod(table.index(char2), 5) - - if row1 == row2: - ciphertext += table[row1 * 5 + (col1 + 1) % 5] - ciphertext += table[row2 * 5 + (col2 + 1) % 5] - elif col1 == col2: - ciphertext += table[((row1 + 1) % 5) * 5 + col1] - ciphertext += table[((row2 + 1) % 5) * 5 + col2] - else: # rectangle - ciphertext += table[row1 * 5 + col2] - ciphertext += table[row2 * 5 + col1] - - return ciphertext - - -def decode(ciphertext: str, key: str) -> str: - """ - Decode the input string using the provided key. - - >>> decode("BMZFAZRZDH", "HAZARD") - 'FIREHAZARD' - >>> decode("HNBWBPQT", "AUTOMOBILE") - 'DRIVINGX' - >>> decode("SLYSSAQS", "CASTLE") - 'ATXTACKX' - """ - - table = generate_table(key) - plaintext = "" - - for char1, char2 in chunker(ciphertext, 2): - row1, col1 = divmod(table.index(char1), 5) - row2, col2 = divmod(table.index(char2), 5) - - if row1 == row2: - plaintext += table[row1 * 5 + (col1 - 1) % 5] - plaintext += table[row2 * 5 + (col2 - 1) % 5] - elif col1 == col2: - plaintext += table[((row1 - 1) % 5) * 5 + col1] - plaintext += table[((row2 - 1) % 5) * 5 + col2] - else: # rectangle - plaintext += table[row1 * 5 + col2] - plaintext += table[row2 * 5 + col1] - - return plaintext - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print("Encoded:", encode("BYE AND THANKS", "GREETING")) - print("Decoded:", decode("CXRBANRLBALQ", "GREETING")) diff --git a/ciphers/polybius.py b/ciphers/polybius.py deleted file mode 100644 index d83badf4ac0a..000000000000 --- a/ciphers/polybius.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python3 - -""" -A Polybius Square is a table that allows someone to translate letters into numbers. - -https://www.braingle.com/brainteasers/codes/polybius.php -""" - -import numpy as np - -SQUARE = [ - ["a", "b", "c", "d", "e"], - ["f", "g", "h", "i", "k"], - ["l", "m", "n", "o", "p"], - ["q", "r", "s", "t", "u"], - ["v", "w", "x", "y", "z"], -] - - -class PolybiusCipher: - def __init__(self) -> None: - self.SQUARE = np.array(SQUARE) - - def letter_to_numbers(self, letter: str) -> np.ndarray: - """ - Return the pair of numbers that represents the given letter in the - polybius square - >>> np.array_equal(PolybiusCipher().letter_to_numbers('a'), [1,1]) - True - - >>> np.array_equal(PolybiusCipher().letter_to_numbers('u'), [4,5]) - True - """ - index1, index2 = np.where(letter == self.SQUARE) - indexes = np.concatenate([index1 + 1, index2 + 1]) - return indexes - - def numbers_to_letter(self, index1: int, index2: int) -> str: - """ - Return the letter corresponding to the position [index1, index2] in - the polybius square - - >>> PolybiusCipher().numbers_to_letter(4, 5) == "u" - True - - >>> PolybiusCipher().numbers_to_letter(1, 1) == "a" - True - """ - return self.SQUARE[index1 - 1, index2 - 1] - - def encode(self, message: str) -> str: - """ - Return the encoded version of message according to the polybius cipher - - >>> PolybiusCipher().encode("test message") == "44154344 32154343112215" - True - - >>> PolybiusCipher().encode("Test Message") == "44154344 32154343112215" - True - """ - message = message.lower() - message = message.replace("j", "i") - - encoded_message = "" - for letter_index in range(len(message)): - if message[letter_index] != " ": - numbers = self.letter_to_numbers(message[letter_index]) - encoded_message = encoded_message + str(numbers[0]) + str(numbers[1]) - elif message[letter_index] == " ": - encoded_message = encoded_message + " " - - return encoded_message - - def decode(self, message: str) -> str: - """ - Return the decoded version of message according to the polybius cipher - - >>> PolybiusCipher().decode("44154344 32154343112215") == "test message" - True - - >>> PolybiusCipher().decode("4415434432154343112215") == "testmessage" - True - """ - message = message.replace(" ", " ") - decoded_message = "" - for numbers_index in range(int(len(message) / 2)): - if message[numbers_index * 2] != " ": - index1 = message[numbers_index * 2] - index2 = message[numbers_index * 2 + 1] - - letter = self.numbers_to_letter(int(index1), int(index2)) - decoded_message = decoded_message + letter - elif message[numbers_index * 2] == " ": - decoded_message = decoded_message + " " - - return decoded_message diff --git a/ciphers/porta_cipher.py b/ciphers/porta_cipher.py deleted file mode 100644 index 498ae294041e..000000000000 --- a/ciphers/porta_cipher.py +++ /dev/null @@ -1,103 +0,0 @@ -alphabet = { - "A": ("ABCDEFGHIJKLM", "NOPQRSTUVWXYZ"), - "B": ("ABCDEFGHIJKLM", "NOPQRSTUVWXYZ"), - "C": ("ABCDEFGHIJKLM", "ZNOPQRSTUVWXY"), - "D": ("ABCDEFGHIJKLM", "ZNOPQRSTUVWXY"), - "E": ("ABCDEFGHIJKLM", "YZNOPQRSTUVWX"), - "F": ("ABCDEFGHIJKLM", "YZNOPQRSTUVWX"), - "G": ("ABCDEFGHIJKLM", "XYZNOPQRSTUVW"), - "H": ("ABCDEFGHIJKLM", "XYZNOPQRSTUVW"), - "I": ("ABCDEFGHIJKLM", "WXYZNOPQRSTUV"), - "J": ("ABCDEFGHIJKLM", "WXYZNOPQRSTUV"), - "K": ("ABCDEFGHIJKLM", "VWXYZNOPQRSTU"), - "L": ("ABCDEFGHIJKLM", "VWXYZNOPQRSTU"), - "M": ("ABCDEFGHIJKLM", "UVWXYZNOPQRST"), - "N": ("ABCDEFGHIJKLM", "UVWXYZNOPQRST"), - "O": ("ABCDEFGHIJKLM", "TUVWXYZNOPQRS"), - "P": ("ABCDEFGHIJKLM", "TUVWXYZNOPQRS"), - "Q": ("ABCDEFGHIJKLM", "STUVWXYZNOPQR"), - "R": ("ABCDEFGHIJKLM", "STUVWXYZNOPQR"), - "S": ("ABCDEFGHIJKLM", "RSTUVWXYZNOPQ"), - "T": ("ABCDEFGHIJKLM", "RSTUVWXYZNOPQ"), - "U": ("ABCDEFGHIJKLM", "QRSTUVWXYZNOP"), - "V": ("ABCDEFGHIJKLM", "QRSTUVWXYZNOP"), - "W": ("ABCDEFGHIJKLM", "PQRSTUVWXYZNO"), - "X": ("ABCDEFGHIJKLM", "PQRSTUVWXYZNO"), - "Y": ("ABCDEFGHIJKLM", "OPQRSTUVWXYZN"), - "Z": ("ABCDEFGHIJKLM", "OPQRSTUVWXYZN"), -} - - -def generate_table(key: str) -> list[tuple[str, str]]: - """ - >>> generate_table('marvin') # doctest: +NORMALIZE_WHITESPACE - [('ABCDEFGHIJKLM', 'UVWXYZNOPQRST'), ('ABCDEFGHIJKLM', 'NOPQRSTUVWXYZ'), - ('ABCDEFGHIJKLM', 'STUVWXYZNOPQR'), ('ABCDEFGHIJKLM', 'QRSTUVWXYZNOP'), - ('ABCDEFGHIJKLM', 'WXYZNOPQRSTUV'), ('ABCDEFGHIJKLM', 'UVWXYZNOPQRST')] - """ - return [alphabet[char] for char in key.upper()] - - -def encrypt(key: str, words: str) -> str: - """ - >>> encrypt('marvin', 'jessica') - 'QRACRWU' - """ - cipher = "" - count = 0 - table = generate_table(key) - for char in words.upper(): - cipher += get_opponent(table[count], char) - count = (count + 1) % len(table) - return cipher - - -def decrypt(key: str, words: str) -> str: - """ - >>> decrypt('marvin', 'QRACRWU') - 'JESSICA' - """ - return encrypt(key, words) - - -def get_position(table: tuple[str, str], char: str) -> tuple[int, int]: - """ - >>> get_position(generate_table('marvin')[0], 'M') - (0, 12) - """ - # `char` is either in the 0th row or the 1st row - row = 0 if char in table[0] else 1 - col = table[row].index(char) - return row, col - - -def get_opponent(table: tuple[str, str], char: str) -> str: - """ - >>> get_opponent(generate_table('marvin')[0], 'M') - 'T' - """ - row, col = get_position(table, char.upper()) - if row == 1: - return table[0][col] - else: - return table[1][col] if row == 0 else char - - -if __name__ == "__main__": - import doctest - - doctest.testmod() # Fist ensure that all our tests are passing... - """ - Demo: - - Enter key: marvin - Enter text to encrypt: jessica - Encrypted: QRACRWU - Decrypted with key: JESSICA - """ - key = input("Enter key: ").strip() - text = input("Enter text to encrypt: ").strip() - cipher_text = encrypt(key, text) - - print(f"Encrypted: {cipher_text}") - print(f"Decrypted with key: {decrypt(key, cipher_text)}") diff --git a/ciphers/prehistoric_men.txt b/ciphers/prehistoric_men.txt deleted file mode 100644 index 8d1b2bd8c8d1..000000000000 --- a/ciphers/prehistoric_men.txt +++ /dev/null @@ -1,7193 +0,0 @@ -The Project Gutenberg eBook, Prehistoric Men, by Robert J. (Robert John) -Braidwood, Illustrated by Susan T. Richert - - -This eBook is for the use of anyone anywhere in the United States and most -other parts of the world at no cost and with almost no restrictions -whatsoever. You may copy it, give it away or re-use it under the terms of -the Project Gutenberg License included with this eBook or online at -www.gutenberg.org. If you are not located in the United States, you'll have -to check the laws of the country where you are located before using this ebook. - - -Title: Prehistoric Men -Author: Robert J. (Robert John) Braidwood -Release Date: July 28, 2016 [eBook #52664] -Language: English -Character set encoding: UTF-8 - - -***START OF THE PROJECT GUTENBERG EBOOK PREHISTORIC MEN*** - - -E-text prepared by Stephen Hutcheson, Dave Morgan, Charlie Howard, and the -Online Distributed Proofreading Team (http://www.pgdp.net) - - - -Note: Project Gutenberg also has an HTML version of this - file which includes the original illustrations. - See 52664-h.htm or 52664-h.zip: - (http://www.gutenberg.org/files/52664/52664-h/52664-h.htm) - or - (http://www.gutenberg.org/files/52664/52664-h.zip) - - -Transcriber's note: - - Some characters might not display in this UTF-8 text - version. If so, the reader should consult the HTML - version referred to above. One example of this might - occur in the second paragraph under "Choppers and - Adze-like Tools", page 46, which contains the phrase - �an adze cutting edge is ? shaped�. The symbol before - �shaped� looks like a sharply-italicized sans-serif �L�. - Devices that cannot display that symbol may substitute - a question mark, a square, or other symbol. - - -PREHISTORIC MEN - -by - -ROBERT J. BRAIDWOOD - -Research Associate, Old World Prehistory - -Professor -Oriental Institute and Department of Anthropology -University of Chicago - -Drawings by Susan T. Richert - - -[Illustration] - -Chicago Natural History Museum -Popular Series -Anthropology, Number 37 - -Third Edition Issued in Co-operation with -The Oriental Institute, The University of Chicago - -Edited by Lillian A. Ross - -Printed in the United States of America -by Chicago Natural History Museum Press - -Copyright 1948, 1951, and 1957 by Chicago Natural History Museum - -First edition 1948 -Second edition 1951 -Third edition 1957 -Fourth edition 1959 - - -Preface - -[Illustration] - - -Like the writing of most professional archeologists, mine has been -confined to so-called learned papers. Good, bad, or indifferent, these -papers were in a jargon that only my colleagues and a few advanced -students could understand. Hence, when I was asked to do this little -book, I soon found it extremely difficult to say what I meant in simple -fashion. The style is new to me, but I hope the reader will not find it -forced or pedantic; at least I have done my very best to tell the story -simply and clearly. - -Many friends have aided in the preparation of the book. The whimsical -charm of Miss Susan Richert�s illustrations add enormously to the -spirit I wanted. She gave freely of her own time on the drawings and -in planning the book with me. My colleagues at the University of -Chicago, especially Professor Wilton M. Krogman (now of the University -of Pennsylvania), and also Mrs. Linda Braidwood, Associate of the -Oriental Institute, and Professors Fay-Cooper Cole and Sol Tax, of -the Department of Anthropology, gave me counsel in matters bearing on -their special fields, and the Department of Anthropology bore some of -the expense of the illustrations. From Mrs. Irma Hunter and Mr. Arnold -Maremont, who are not archeologists at all and have only an intelligent -layman�s notion of archeology, I had sound advice on how best to tell -the story. I am deeply indebted to all these friends. - -While I was preparing the second edition, I had the great fortune -to be able to rework the third chapter with Professor Sherwood L. -Washburn, now of the Department of Anthropology of the University of -California, and the fourth, fifth, and sixth chapters with Professor -Hallum L. Movius, Jr., of the Peabody Museum, Harvard University. The -book has gained greatly in accuracy thereby. In matters of dating, -Professor Movius and the indications of Professor W. F. Libby�s Carbon -14 chronology project have both encouraged me to choose the lowest -dates now current for the events of the Pleistocene Ice Age. There is -still no certain way of fixing a direct chronology for most of the -Pleistocene, but Professor Libby�s method appears very promising for -its end range and for proto-historic dates. In any case, this book -names �periods,� and new dates may be written in against mine, if new -and better dating systems appear. - -I wish to thank Dr. Clifford C. Gregg, Director of Chicago Natural -History Museum, for the opportunity to publish this book. My old -friend, Dr. Paul S. Martin, Chief Curator in the Department of -Anthropology, asked me to undertake the job and inspired me to complete -it. I am also indebted to Miss Lillian A. Ross, Associate Editor of -Scientific Publications, and to Mr. George I. Quimby, Curator of -Exhibits in Anthropology, for all the time they have given me in -getting the manuscript into proper shape. - - ROBERT J. BRAIDWOOD - _June 15, 1950_ - - - - -Preface to the Third Edition - - -In preparing the enlarged third edition, many of the above mentioned -friends have again helped me. I have picked the brains of Professor F. -Clark Howell of the Department of Anthropology of the University of -Chicago in reworking the earlier chapters, and he was very patient in -the matter, which I sincerely appreciate. - -All of Mrs. Susan Richert Allen�s original drawings appear, but a few -necessary corrections have been made in some of the charts and some new -drawings have been added by Mr. John Pfiffner, Staff Artist, Chicago -Natural History Museum. - - ROBERT J. BRAIDWOOD - _March 1, 1959_ - - - - -Contents - - - PAGE - How We Learn about Prehistoric Men 7 - - The Changing World in Which Prehistoric Men Lived 17 - - Prehistoric Men Themselves 22 - - Cultural Beginnings 38 - - More Evidence of Culture 56 - - Early Moderns 70 - - End and Prelude 92 - - The First Revolution 121 - - The Conquest of Civilization 144 - - End of Prehistory 162 - - Summary 176 - - List of Books 180 - - Index 184 - - - - -HOW WE LEARN about Prehistoric Men - -[Illustration] - - -Prehistory means the time before written history began. Actually, more -than 99 per cent of man�s story is prehistory. Man is at least half a -million years old, but he did not begin to write history (or to write -anything) until about 5,000 years ago. - -The men who lived in prehistoric times left us no history books, but -they did unintentionally leave a record of their presence and their way -of life. This record is studied and interpreted by different kinds of -scientists. - - -SCIENTISTS WHO FIND OUT ABOUT PREHISTORIC MEN - -The scientists who study the bones and teeth and any other parts -they find of the bodies of prehistoric men, are called _physical -anthropologists_. Physical anthropologists are trained, much like -doctors, to know all about the human body. They study living people, -too; they know more about the biological facts of human �races� than -anybody else. If the police find a badly decayed body in a trunk, -they ask a physical anthropologist to tell them what the person -originally looked like. The physical anthropologists who specialize in -prehistoric men work with fossils, so they are sometimes called _human -paleontologists_. - - -ARCHEOLOGISTS - -There is a kind of scientist who studies the things that prehistoric -men made and did. Such a scientist is called an _archeologist_. It is -the archeologist�s business to look for the stone and metal tools, the -pottery, the graves, and the caves or huts of the men who lived before -history began. - -But there is more to archeology than just looking for things. In -Professor V. Gordon Childe�s words, archeology �furnishes a sort of -history of human activity, provided always that the actions have -produced concrete results and left recognizable material traces.� You -will see that there are at least three points in what Childe says: - - 1. The archeologists have to find the traces of things left behind by - ancient man, and - - 2. Only a few objects may be found, for most of these were probably - too soft or too breakable to last through the years. However, - - 3. The archeologist must use whatever he can find to tell a story--to - make a �sort of history�--from the objects and living-places and - graves that have escaped destruction. - -What I mean is this: Let us say you are walking through a dump yard, -and you find a rusty old spark plug. If you want to think about what -the spark plug means, you quickly remember that it is a part of an -automobile motor. This tells you something about the man who threw -the spark plug on the dump. He either had an automobile, or he knew -or lived near someone who did. He can�t have lived so very long ago, -you�ll remember, because spark plugs and automobiles are only about -sixty years old. - -When you think about the old spark plug in this way you have -just been making the beginnings of what we call an archeological -_interpretation_; you have been making the spark plug tell a story. -It is the same way with the man-made things we archeologists find -and put in museums. Usually, only a few of these objects are pretty -to look at; but each of them has some sort of story to tell. Making -the interpretation of his finds is the most important part of the -archeologist�s job. It is the way he gets at the �sort of history of -human activity� which is expected of archeology. - - -SOME OTHER SCIENTISTS - -There are many other scientists who help the archeologist and the -physical anthropologist find out about prehistoric men. The geologists -help us tell the age of the rocks or caves or gravel beds in which -human bones or man-made objects are found. There are other scientists -with names which all begin with �paleo� (the Greek word for �old�). The -_paleontologists_ study fossil animals. There are also, for example, -such scientists as _paleobotanists_ and _paleoclimatologists_, who -study ancient plants and climates. These scientists help us to know -the kinds of animals and plants that were living in prehistoric times -and so could be used for food by ancient man; what the weather was -like; and whether there were glaciers. Also, when I tell you that -prehistoric men did not appear until long after the great dinosaurs had -disappeared, I go on the say-so of the paleontologists. They know that -fossils of men and of dinosaurs are not found in the same geological -period. The dinosaur fossils come in early periods, the fossils of men -much later. - -Since World War II even the atomic scientists have been helping the -archeologists. By testing the amount of radioactivity left in charcoal, -wood, or other vegetable matter obtained from archeological sites, they -have been able to date the sites. Shell has been used also, and even -the hair of Egyptian mummies. The dates of geological and climatic -events have also been discovered. Some of this work has been done from -drillings taken from the bottom of the sea. - -This dating by radioactivity has considerably shortened the dates which -the archeologists used to give. If you find that some of the dates -I give here are more recent than the dates you see in other books -on prehistory, it is because I am using one of the new lower dating -systems. - -[Illustration: RADIOCARBON CHART - -The rate of disappearance of radioactivity as time passes.[1]] - - [1] It is important that the limitations of the radioactive carbon - �dating� system be held in mind. As the statistics involved in - the system are used, there are two chances in three that the - �date� of the sample falls within the range given as plus or - minus an added number of years. For example, the �date� for the - Jarmo village (see chart), given as 6750 � 200 B.C., really - means that there are only two chances in three that the real - date of the charcoal sampled fell between 6950 and 6550 B.C. - We have also begun to suspect that there are ways in which the - samples themselves may have become �contaminated,� either on - the early or on the late side. We now tend to be suspicious of - single radioactive carbon determinations, or of determinations - from one site alone. But as a fabric of consistent - determinations for several or more sites of one archeological - period, we gain confidence in the dates. - - -HOW THE SCIENTISTS FIND OUT - -So far, this chapter has been mainly about the people who find out -about prehistoric men. We also need a word about _how_ they find out. - -All our finds came by accident until about a hundred years ago. Men -digging wells, or digging in caves for fertilizer, often turned up -ancient swords or pots or stone arrowheads. People also found some odd -pieces of stone that didn�t look like natural forms, but they also -didn�t look like any known tool. As a result, the people who found them -gave them queer names; for example, �thunderbolts.� The people thought -the strange stones came to earth as bolts of lightning. We know now -that these strange stones were prehistoric stone tools. - -Many important finds still come to us by accident. In 1935, a British -dentist, A. T. Marston, found the first of two fragments of a very -important fossil human skull, in a gravel pit at Swanscombe, on the -River Thames, England. He had to wait nine months, until the face of -the gravel pit had been dug eight yards farther back, before the second -fragment appeared. They fitted! Then, twenty years later, still another -piece appeared. In 1928 workmen who were blasting out rock for the -breakwater in the port of Haifa began to notice flint tools. Thus the -story of cave men on Mount Carmel, in Palestine, began to be known. - -Planned archeological digging is only about a century old. Even before -this, however, a few men realized the significance of objects they dug -from the ground; one of these early archeologists was our own Thomas -Jefferson. The first real mound-digger was a German grocer�s clerk, -Heinrich Schliemann. Schliemann made a fortune as a merchant, first -in Europe and then in the California gold-rush of 1849. He became an -American citizen. Then he retired and had both money and time to test -an old idea of his. He believed that the heroes of ancient Troy and -Mycenae were once real Trojans and Greeks. He proved it by going to -Turkey and Greece and digging up the remains of both cities. - -Schliemann had the great good fortune to find rich and spectacular -treasures, and he also had the common sense to keep notes and make -descriptions of what he found. He proved beyond doubt that many ancient -city mounds can be _stratified_. This means that there may be the -remains of many towns in a mound, one above another, like layers in a -cake. - -You might like to have an idea of how mounds come to be in layers. -The original settlers may have chosen the spot because it had a good -spring and there were good fertile lands nearby, or perhaps because -it was close to some road or river or harbor. These settlers probably -built their town of stone and mud-brick. Finally, something would have -happened to the town--a flood, or a burning, or a raid by enemies--and -the walls of the houses would have fallen in or would have melted down -as mud in the rain. Nothing would have remained but the mud and debris -of a low mound of _one_ layer. - -The second settlers would have wanted the spot for the same reasons -the first settlers did--good water, land, and roads. Also, the second -settlers would have found a nice low mound to build their houses on, -a protection from floods. But again, something would finally have -happened to the second town, and the walls of _its_ houses would have -come tumbling down. This makes the _second_ layer. And so on.... - -In Syria I once had the good fortune to dig on a large mound that had -no less than fifteen layers. Also, most of the layers were thick, and -there were signs of rebuilding and repairs within each layer. The mound -was more than a hundred feet high. In each layer, the building material -used had been a soft, unbaked mud-brick, and most of the debris -consisted of fallen or rain-melted mud from these mud-bricks. - -This idea of _stratification_, like the cake layers, was already a -familiar one to the geologists by Schliemann�s time. They could show -that their lowest layer of rock was oldest or earliest, and that the -overlying layers became more recent as one moved upward. Schliemann�s -digging proved the same thing at Troy. His first (lowest and earliest) -city had at least nine layers above it; he thought that the second -layer contained the remains of Homer�s Troy. We now know that Homeric -Troy was layer VIIa from the bottom; also, we count eleven layers or -sub-layers in total. - -Schliemann�s work marks the beginnings of modern archeology. Scholars -soon set out to dig on ancient sites, from Egypt to Central America. - - -ARCHEOLOGICAL INFORMATION - -As time went on, the study of archeological materials--found either -by accident or by digging on purpose--began to show certain things. -Archeologists began to get ideas as to the kinds of objects that -belonged together. If you compared a mail-order catalogue of 1890 with -one of today, you would see a lot of differences. If you really studied -the two catalogues hard, you would also begin to see that certain -objects �go together.� Horseshoes and metal buggy tires and pieces of -harness would begin to fit into a picture with certain kinds of coal -stoves and furniture and china dishes and kerosene lamps. Our friend -the spark plug, and radios and electric refrigerators and light bulbs -would fit into a picture with different kinds of furniture and dishes -and tools. You won�t be old enough to remember the kind of hats that -women wore in 1890, but you�ve probably seen pictures of them, and you -know very well they couldn�t be worn with the fashions of today. - -This is one of the ways that archeologists study their materials. -The various tools and weapons and jewelry, the pottery, the kinds -of houses, and even the ways of burying the dead tend to fit into -pictures. Some archeologists call all of the things that go together to -make such a picture an _assemblage_. The assemblage of the first layer -of Schliemann�s Troy was as different from that of the seventh layer as -our 1900 mail-order catalogue is from the one of today. - -The archeologists who came after Schliemann began to notice other -things and to compare them with occurrences in modern times. The -idea that people will buy better mousetraps goes back into very -ancient times. Today, if we make good automobiles or radios, we can -sell some of them in Turkey or even in Timbuktu. This means that a -few present-day types of American automobiles and radios form part -of present-day �assemblages� in both Turkey and Timbuktu. The total -present-day �assemblage� of Turkey is quite different from that of -Timbuktu or that of America, but they have at least some automobiles -and some radios in common. - -Now these automobiles and radios will eventually wear out. Let us -suppose we could go to some remote part of Turkey or to Timbuktu in a -dream. We don�t know what the date is, in our dream, but we see all -sorts of strange things and ways of living in both places. Nobody -tells us what the date is. But suddenly we see a 1936 Ford; so we -know that in our dream it has to be at least the year 1936, and only -as many years after that as we could reasonably expect a Ford to keep -in running order. The Ford would probably break down in twenty years� -time, so the Turkish or Timbuktu �assemblage� we�re seeing in our dream -has to date at about A.D. 1936-56. - -Archeologists not only �date� their ancient materials in this way; they -also see over what distances and between which peoples trading was -done. It turns out that there was a good deal of trading in ancient -times, probably all on a barter and exchange basis. - - -EVERYTHING BEGINS TO FIT TOGETHER - -Now we need to pull these ideas all together and see the complicated -structure the archeologists can build with their materials. - -Even the earliest archeologists soon found that there was a very long -range of prehistoric time which would yield only very simple things. -For this very long early part of prehistory, there was little to be -found but the flint tools which wandering, hunting and gathering -people made, and the bones of the wild animals they ate. Toward the -end of prehistoric time there was a general settling down with the -coming of agriculture, and all sorts of new things began to be made. -Archeologists soon got a general notion of what ought to appear with -what. Thus, it would upset a French prehistorian digging at the bottom -of a very early cave if he found a fine bronze sword, just as much as -it would upset him if he found a beer bottle. The people of his very -early cave layer simply could not have made bronze swords, which came -later, just as do beer bottles. Some accidental disturbance of the -layers of his cave must have happened. - -With any luck, archeologists do their digging in a layered, stratified -site. They find the remains of everything that would last through -time, in several different layers. They know that the assemblage in -the bottom layer was laid down earlier than the assemblage in the next -layer above, and so on up to the topmost layer, which is the latest. -They look at the results of other �digs� and find that some other -archeologist 900 miles away has found ax-heads in his lowest layer, -exactly like the ax-heads of their fifth layer. This means that their -fifth layer must have been lived in at about the same time as was the -first layer in the site 200 miles away. It also may mean that the -people who lived in the two layers knew and traded with each other. Or -it could mean that they didn�t necessarily know each other, but simply -that both traded with a third group at about the same time. - -You can see that the more we dig and find, the more clearly the main -facts begin to stand out. We begin to be more sure of which people -lived at the same time, which earlier and which later. We begin to -know who traded with whom, and which peoples seemed to live off by -themselves. We begin to find enough skeletons in burials so that the -physical anthropologists can tell us what the people looked like. We -get animal bones, and a paleontologist may tell us they are all bones -of wild animals; or he may tell us that some or most of the bones are -those of domesticated animals, for instance, sheep or cattle, and -therefore the people must have kept herds. - -More important than anything else--as our structure grows more -complicated and our materials increase--is the fact that �a sort -of history of human activity� does begin to appear. The habits or -traditions that men formed in the making of their tools and in the -ways they did things, begin to stand out for us. How characteristic -were these habits and traditions? What areas did they spread over? -How long did they last? We watch the different tools and the traces -of the way things were done--how the burials were arranged, what -the living-places were like, and so on. We wonder about the people -themselves, for the traces of habits and traditions are useful to us -only as clues to the men who once had them. So we ask the physical -anthropologists about the skeletons that we found in the burials. The -physical anthropologists tell us about the anatomy and the similarities -and differences which the skeletons show when compared with other -skeletons. The physical anthropologists are even working on a -method--chemical tests of the bones--that will enable them to discover -what the blood-type may have been. One thing is sure. We have never -found a group of skeletons so absolutely similar among themselves--so -cast from a single mould, so to speak--that we could claim to have a -�pure� race. I am sure we never shall. - -We become particularly interested in any signs of change--when new -materials and tool types and ways of doing things replace old ones. We -watch for signs of social change and progress in one way or another. - -We must do all this without one word of written history to aid us. -Everything we are concerned with goes back to the time _before_ men -learned to write. That is the prehistorian�s job--to find out what -happened before history began. - - - - -THE CHANGING WORLD in which Prehistoric Men Lived - -[Illustration] - - -Mankind, we�ll say, is at least a half million years old. It is very -hard to understand how long a time half a million years really is. -If we were to compare this whole length of time to one day, we�d get -something like this: The present time is midnight, and Jesus was -born just five minutes and thirty-six seconds ago. Earliest history -began less than fifteen minutes ago. Everything before 11:45 was in -prehistoric time. - -Or maybe we can grasp the length of time better in terms of -generations. As you know, primitive peoples tend to marry and have -children rather early in life. So suppose we say that twenty years -will make an average generation. At this rate there would be 25,000 -generations in a half-million years. But our United States is much less -than ten generations old, twenty-five generations take us back before -the time of Columbus, Julius Caesar was alive just 100 generations ago, -David was king of Israel less than 150 generations ago, 250 generations -take us back to the beginning of written history. And there were 24,750 -generations of men before written history began! - -I should probably tell you that there is a new method of prehistoric -dating which would cut the earliest dates in my reckoning almost -in half. Dr. Cesare Emiliani, combining radioactive (C14) and -chemical (oxygen isotope) methods in the study of deep-sea borings, -has developed a system which would lower the total range of human -prehistory to about 300,000 years. The system is still too new to have -had general examination and testing. Hence, I have not used it in this -book; it would mainly affect the dates earlier than 25,000 years ago. - - -CHANGES IN ENVIRONMENT - -The earth probably hasn�t changed much in the last 5,000 years (250 -generations). Men have built things on its surface and dug into it and -drawn boundaries on maps of it, but the places where rivers, lakes, -seas, and mountains now stand have changed very little. - -In earlier times the earth looked very different. Geologists call the -last great geological period the _Pleistocene_. It began somewhere -between a half million and a million years ago, and was a time of great -changes. Sometimes we call it the Ice Age, for in the Pleistocene -there were at least three or four times when large areas of earth -were covered with glaciers. The reason for my uncertainty is that -while there seem to have been four major mountain or alpine phases of -glaciation, there may only have been three general continental phases -in the Old World.[2] - - [2] This is a complicated affair and I do not want to bother you - with its details. Both the alpine and the continental ice sheets - seem to have had minor fluctuations during their _main_ phases, - and the advances of the later phases destroyed many of the - traces of the earlier phases. The general textbooks have tended - to follow the names and numbers established for the Alps early - in this century by two German geologists. I will not bother you - with the names, but there were _four_ major phases. It is the - second of these alpine phases which seems to fit the traces of - the earliest of the great continental glaciations. In this book, - I will use the four-part system, since it is the most familiar, - but will add the word _alpine_ so you may remember to make the - transition to the continental system if you wish to do so. - -Glaciers are great sheets of ice, sometimes over a thousand feet -thick, which are now known only in Greenland and Antarctica and in -high mountains. During several of the glacial periods in the Ice Age, -the glaciers covered most of Canada and the northern United States and -reached down to southern England and France in Europe. Smaller ice -sheets sat like caps on the Rockies, the Alps, and the Himalayas. The -continental glaciation only happened north of the equator, however, so -remember that �Ice Age� is only half true. - -As you know, the amount of water on and about the earth does not vary. -These large glaciers contained millions of tons of water frozen into -ice. Because so much water was frozen and contained in the glaciers, -the water level of lakes and oceans was lowered. Flooded areas were -drained and appeared as dry land. There were times in the Ice Age when -there was no English Channel, so that England was not an island, and a -land bridge at the Dardanelles probably divided the Mediterranean from -the Black Sea. - -A very important thing for people living during the time of a -glaciation was the region adjacent to the glacier. They could not, of -course, live on the ice itself. The questions would be how close could -they live to it, and how would they have had to change their way of -life to do so. - - -GLACIERS CHANGE THE WEATHER - -Great sheets of ice change the weather. When the front of a glacier -stood at Milwaukee, the weather must have been bitterly cold in -Chicago. The climate of the whole world would have been different, and -you can see how animals and men would have been forced to move from one -place to another in search of food and warmth. - -On the other hand, it looks as if only a minor proportion of the whole -Ice Age was really taken up by times of glaciation. In between came -the _interglacial_ periods. During these times the climate around -Chicago was as warm as it is now, and sometimes even warmer. It may -interest you to know that the last great glacier melted away less than -10,000 years ago. Professor Ernst Antevs thinks we may be living in an -interglacial period and that the Ice Age may not be over yet. So if you -want to make a killing in real estate for your several hundred times -great-grandchildren, you might buy some land in the Arizona desert or -the Sahara. - -We do not yet know just why the glaciers appeared and disappeared, as -they did. It surely had something to do with an increase in rainfall -and a fall in temperature. It probably also had to do with a general -tendency for the land to rise at the beginning of the Pleistocene. We -know there was some mountain-building at that time. Hence, rain-bearing -winds nourished the rising and cooler uplands with snow. An increase -in all three of these factors--if they came together--would only have -needed to be slight. But exactly why this happened we do not know. - -The reason I tell you about the glaciers is simply to remind you of the -changing world in which prehistoric men lived. Their surroundings--the -animals and plants they used for food, and the weather they had to -protect themselves from--were always changing. On the other hand, this -change happened over so long a period of time and was so slow that -individual people could not have noticed it. Glaciers, about which they -probably knew nothing, moved in hundreds of miles to the north of them. -The people must simply have wandered ever more southward in search -of the plants and animals on which they lived. Or some men may have -stayed where they were and learned to hunt different animals and eat -different foods. Prehistoric men had to keep adapting themselves to new -environments and those who were most adaptive were most successful. - - -OTHER CHANGES - -Changes took place in the men themselves as well as in the ways they -lived. As time went on, they made better tools and weapons. Then, too, -we begin to find signs of how they started thinking of other things -than food and the tools to get it with. We find that they painted on -the walls of caves, and decorated their tools; we find that they buried -their dead. - -At about the time when the last great glacier was finally melting away, -men in the Near East made the first basic change in human economy. -They began to plant grain, and they learned to raise and herd certain -animals. This meant that they could store food in granaries and �on the -hoof� against the bad times of the year. This first really basic change -in man�s way of living has been called the �food-producing revolution.� -By the time it happened, a modern kind of climate was beginning. Men -had already grown to look as they do now. Know-how in ways of living -had developed and progressed, slowly but surely, up to a point. It was -impossible for men to go beyond that point if they only hunted and -fished and gathered wild foods. Once the basic change was made--once -the food-producing revolution became effective--technology leaped ahead -and civilization and written history soon began. - - - - -Prehistoric Men THEMSELVES - -[Illustration] - - -DO WE KNOW WHERE MAN ORIGINATED? - -For a long time some scientists thought the �cradle of mankind� was in -central Asia. Other scientists insisted it was in Africa, and still -others said it might have been in Europe. Actually, we don�t know -where it was. We don�t even know that there was only _one_ �cradle.� -If we had to choose a �cradle� at this moment, we would probably say -Africa. But the southern portions of Asia and Europe may also have been -included in the general area. The scene of the early development of -mankind was certainly the Old World. It is pretty certain men didn�t -reach North or South America until almost the end of the Ice Age--had -they done so earlier we would certainly have found some trace of them -by now. - -The earliest tools we have yet found come from central and south -Africa. By the dating system I�m using, these tools must be over -500,000 years old. There are now reports that a few such early tools -have been found--at the Sterkfontein cave in South Africa--along with -the bones of small fossil men called �australopithecines.� - -Not all scientists would agree that the australopithecines were �men,� -or would agree that the tools were made by the australopithecines -themselves. For these sticklers, the earliest bones of men come from -the island of Java. The date would be about 450,000 years ago. So far, -we have not yet found the tools which we suppose these earliest men in -the Far East must have made. - -Let me say it another way. How old are the earliest traces of men we -now have? Over half a million years. This was a time when the first -alpine glaciation was happening in the north. What has been found so -far? The tools which the men of those times made, in different parts -of Africa. It is now fairly generally agreed that the �men� who made -the tools were the australopithecines. There is also a more �man-like� -jawbone at Kanam in Kenya, but its find-spot has been questioned. The -next earliest bones we have were found in Java, and they may be almost -a hundred thousand years younger than the earliest African finds. We -haven�t yet found the tools of these early Javanese. Our knowledge of -tool-using in Africa spreads quickly as time goes on: soon after the -appearance of tools in the south we shall have them from as far north -as Algeria. - -Very soon after the earliest Javanese come the bones of slightly more -developed people in Java, and the jawbone of a man who once lived in -what is now Germany. The same general glacial beds which yielded the -later Javanese bones and the German jawbone also include tools. These -finds come from the time of the second alpine glaciation. - -So this is the situation. By the time of the end of the second alpine -or first continental glaciation (say 400,000 years ago) we have traces -of men from the extremes of the more southerly portions of the Old -World--South Africa, eastern Asia, and western Europe. There are also -some traces of men in the middle ground. In fact, Professor Franz -Weidenreich believed that creatures who were the immediate ancestors -of men had already spread over Europe, Africa, and Asia by the time -the Ice Age began. We certainly have no reason to disbelieve this, but -fortunate accidents of discovery have not yet given us the evidence to -prove it. - - -MEN AND APES - -Many people used to get extremely upset at the ill-formed notion -that �man descended from the apes.� Such words were much more likely -to start fights or �monkey trials� than the correct notion that all -living animals, including man, ascended or evolved from a single-celled -organism which lived in the primeval seas hundreds of millions of years -ago. Men are mammals, of the order called Primates, and man�s living -relatives are the great apes. Men didn�t �descend� from the apes or -apes from men, and mankind must have had much closer relatives who have -since become extinct. - -Men stand erect. They also walk and run on their two feet. Apes are -happiest in trees, swinging with their arms from branch to branch. -Few branches of trees will hold the mighty gorilla, although he still -manages to sleep in trees. Apes can�t stand really erect in our sense, -and when they have to run on the ground, they use the knuckles of their -hands as well as their feet. - -A key group of fossil bones here are the south African -australopithecines. These are called the _Australopithecinae_ or -�man-apes� or sometimes even �ape-men.� We do not _know_ that they were -directly ancestral to men but they can hardly have been so to apes. -Presently I�ll describe them a bit more. The reason I mention them -here is that while they had brains no larger than those of apes, their -hipbones were enough like ours so that they must have stood erect. -There is no good reason to think they couldn�t have walked as we do. - - -BRAINS, HANDS, AND TOOLS - -Whether the australopithecines were our ancestors or not, the proper -ancestors of men must have been able to stand erect and to walk on -their two feet. Three further important things probably were involved, -next, before they could become men proper. These are: - - 1. The increasing size and development of the brain. - - 2. The increasing usefulness (specialization) of the thumb and hand. - - 3. The use of tools. - -Nobody knows which of these three is most important, or which came -first. Most probably the growth of all three things was very much -blended together. If you think about each of the things, you will see -what I mean. Unless your hand is more flexible than a paw, and your -thumb will work against (or oppose) your fingers, you can�t hold a tool -very well. But you wouldn�t get the idea of using a tool unless you had -enough brain to help you see cause and effect. And it is rather hard to -see how your hand and brain would develop unless they had something to -practice on--like using tools. In Professor Krogman�s words, �the hand -must become the obedient servant of the eye and the brain.� It is the -_co-ordination_ of these things that counts. - -Many other things must have been happening to the bodies of the -creatures who were the ancestors of men. Our ancestors had to develop -organs of speech. More than that, they had to get the idea of letting -_certain sounds_ made with these speech organs have _certain meanings_. - -All this must have gone very slowly. Probably everything was developing -little by little, all together. Men became men very slowly. - - -WHEN SHALL WE CALL MEN MEN? - -What do I mean when I say �men�? People who looked pretty much as we -do, and who used different tools to do different things, are men to me. -We�ll probably never know whether the earliest ones talked or not. They -probably had vocal cords, so they could make sounds, but did they know -how to make sounds work as symbols to carry meanings? But if the fossil -bones look like our skeletons, and if we find tools which we�ll agree -couldn�t have been made by nature or by animals, then I�d say we had -traces of _men_. - -The australopithecine finds of the Transvaal and Bechuanaland, in -south Africa, are bound to come into the discussion here. I�ve already -told you that the australopithecines could have stood upright and -walked on their two hind legs. They come from the very base of the -Pleistocene or Ice Age, and a few coarse stone tools have been found -with the australopithecine fossils. But there are three varieties -of the australopithecines and they last on until a time equal to -that of the second alpine glaciation. They are the best suggestion -we have yet as to what the ancestors of men _may_ have looked like. -They were certainly closer to men than to apes. Although their brain -size was no larger than the brains of modern apes their body size and -stature were quite small; hence, relative to their small size, their -brains were large. We have not been able to prove without doubt that -the australopithecines were _tool-making_ creatures, even though the -recent news has it that tools have been found with australopithecine -bones. The doubt as to whether the australopithecines used the tools -themselves goes like this--just suppose some man-like creature (whose -bones we have not yet found) made the tools and used them to kill -and butcher australopithecines. Hence a few experts tend to let -australopithecines still hang in limbo as �man-apes.� - - -THE EARLIEST MEN WE KNOW - -I�ll postpone talking about the tools of early men until the next -chapter. The men whose bones were the earliest of the Java lot have -been given the name _Meganthropus_. The bones are very fragmentary. We -would not understand them very well unless we had the somewhat later -Javanese lot--the more commonly known _Pithecanthropus_ or �Java -man�--against which to refer them for study. One of the less well-known -and earliest fragments, a piece of lower jaw and some teeth, rather -strongly resembles the lower jaws and teeth of the australopithecine -type. Was _Meganthropus_ a sort of half-way point between the -australopithecines and _Pithecanthropus_? It is still too early to say. -We shall need more finds before we can be definite one way or the other. - -Java man, _Pithecanthropus_, comes from geological beds equal in age -to the latter part of the second alpine glaciation; the _Meganthropus_ -finds refer to beds of the beginning of this glaciation. The first -finds of Java man were made in 1891-92 by Dr. Eugene Dubois, a Dutch -doctor in the colonial service. Finds have continued to be made. There -are now bones enough to account for four skulls. There are also four -jaws and some odd teeth and thigh bones. Java man, generally speaking, -was about five feet six inches tall, and didn�t hold his head very -erect. His skull was very thick and heavy and had room for little more -than two-thirds as large a brain as we have. He had big teeth and a big -jaw and enormous eyebrow ridges. - -No tools were found in the geological deposits where bones of Java man -appeared. There are some tools in the same general area, but they come -a bit later in time. One reason we accept the Java man as man--aside -from his general anatomical appearance--is that these tools probably -belonged to his near descendants. - -Remember that there are several varieties of men in the whole early -Java lot, at least two of which are earlier than the _Pithecanthropus_, -�Java man.� Some of the earlier ones seem to have gone in for -bigness, in tooth-size at least. _Meganthropus_ is one of these -earlier varieties. As we said, he _may_ turn out to be a link to -the australopithecines, who _may_ or _may not_ be ancestral to men. -_Meganthropus_ is best understandable in terms of _Pithecanthropus_, -who appeared later in the same general area. _Pithecanthropus_ is -pretty well understandable from the bones he left us, and also because -of his strong resemblance to the fully tool-using cave-dwelling �Peking -man,� _Sinanthropus_, about whom we shall talk next. But you can see -that the physical anthropologists and prehistoric archeologists still -have a lot of work to do on the problem of earliest men. - - -PEKING MEN AND SOME EARLY WESTERNERS - -The earliest known Chinese are called _Sinanthropus_, or �Peking man,� -because the finds were made near that city. In World War II, the United -States Marine guard at our Embassy in Peking tried to help get the -bones out of the city before the Japanese attack. Nobody knows where -these bones are now. The Red Chinese accuse us of having stolen them. -They were last seen on a dock-side at a Chinese port. But should you -catch a Marine with a sack of old bones, perhaps we could achieve peace -in Asia by returning them! Fortunately, there is a complete set of -casts of the bones. - -Peking man lived in a cave in a limestone hill, made tools, cracked -animal bones to get the marrow out, and used fire. Incidentally, the -bones of Peking man were found because Chinese dig for what they call -�dragon bones� and �dragon teeth.� Uneducated Chinese buy these things -in their drug stores and grind them into powder for medicine. The -�dragon teeth� and �bones� are really fossils of ancient animals, and -sometimes of men. The people who supply the drug stores have learned -where to dig for strange bones and teeth. Paleontologists who get to -China go to the drug stores to buy fossils. In a roundabout way, this -is how the fallen-in cave of Peking man at Choukoutien was discovered. - -Peking man was not quite as tall as Java man but he probably stood -straighter. His skull looked very much like that of the Java skull -except that it had room for a slightly larger brain. His face was less -brutish than was Java man�s face, but this isn�t saying much. - -Peking man dates from early in the interglacial period following the -second alpine glaciation. He probably lived close to 350,000 years -ago. There are several finds to account for in Europe by about this -time, and one from northwest Africa. The very large jawbone found -near Heidelberg in Germany is doubtless even earlier than Peking man. -The beds where it was found are of second alpine glacial times, and -recently some tools have been said to have come from the same beds. -There is not much I need tell you about the Heidelberg jaw save that it -seems certainly to have belonged to an early man, and that it is very -big. - -Another find in Germany was made at Steinheim. It consists of the -fragmentary skull of a man. It is very important because of its -relative completeness, but it has not yet been fully studied. The bone -is thick, but the back of the head is neither very low nor primitive, -and the face is also not primitive. The forehead does, however, have -big ridges over the eyes. The more fragmentary skull from Swanscombe in -England (p. 11) has been much more carefully studied. Only the top and -back of that skull have been found. Since the skull rounds up nicely, -it has been assumed that the face and forehead must have been quite -�modern.� Careful comparison with Steinheim shows that this was not -necessarily so. This is important because it bears on the question of -how early truly �modern� man appeared. - -Recently two fragmentary jaws were found at Ternafine in Algeria, -northwest Africa. They look like the jaws of Peking man. Tools were -found with them. Since no jaws have yet been found at Steinheim or -Swanscombe, but the time is the same, one wonders if these people had -jaws like those of Ternafine. - - -WHAT HAPPENED TO JAVA AND PEKING MEN - -Professor Weidenreich thought that there were at least a dozen ways in -which the Peking man resembled the modern Mongoloids. This would seem -to indicate that Peking man was really just a very early Chinese. - -Several later fossil men have been found in the Java-Australian area. -The best known of these is the so-called Solo man. There are some finds -from Australia itself which we now know to be quite late. But it looks -as if we may assume a line of evolution from Java man down to the -modern Australian natives. During parts of the Ice Age there was a land -bridge all the way from Java to Australia. - - -TWO ENGLISHMEN WHO WEREN�T OLD - -The older textbooks contain descriptions of two English finds which -were thought to be very old. These were called Piltdown (_Eoanthropus -dawsoni_) and Galley Hill. The skulls were very modern in appearance. -In 1948-49, British scientists began making chemical tests which proved -that neither of these finds is very old. It is now known that both -�Piltdown man� and the tools which were said to have been found with -him were part of an elaborate fake! - - -TYPICAL �CAVE MEN� - -The next men we have to talk about are all members of a related group. -These are the Neanderthal group. �Neanderthal man� himself was found in -the Neander Valley, near D�sseldorf, Germany, in 1856. He was the first -human fossil to be recognized as such. - -[Illustration: PRINCIPAL KNOWN TYPES OF FOSSIL MEN - - CRO-MAGNON - NEANDERTHAL - MODERN SKULL - COMBE-CAPELLE - SINANTHROPUS - PITHECANTHROPUS] - -Some of us think that the neanderthaloids proper are only those people -of western Europe who didn�t get out before the beginning of the last -great glaciation, and who found themselves hemmed in by the glaciers -in the Alps and northern Europe. Being hemmed in, they intermarried -a bit too much and developed into a special type. Professor F. Clark -Howell sees it this way. In Europe, the earliest trace of men we -now know is the Heidelberg jaw. Evolution continued in Europe, from -Heidelberg through the Swanscombe and Steinheim types to a group of -pre-neanderthaloids. There are traces of these pre-neanderthaloids -pretty much throughout Europe during the third interglacial period--say -100,000 years ago. The pre-neanderthaloids are represented by such -finds as the ones at Ehringsdorf in Germany and Saccopastore in Italy. -I won�t describe them for you, since they are simply less extreme than -the neanderthaloids proper--about half way between Steinheim and the -classic Neanderthal people. - -Professor Howell believes that the pre-neanderthaloids who happened to -get caught in the pocket of the southwest corner of Europe at the onset -of the last great glaciation became the classic Neanderthalers. Out in -the Near East, Howell thinks, it is possible to see traces of people -evolving from the pre-neanderthaloid type toward that of fully modern -man. Certainly, we don�t see such extreme cases of �neanderthaloidism� -outside of western Europe. - -There are at least a dozen good examples in the main or classic -Neanderthal group in Europe. They date to just before and in the -earlier part of the last great glaciation (85,000 to 40,000 years ago). -Many of the finds have been made in caves. The �cave men� the movies -and the cartoonists show you are probably meant to be Neanderthalers. -I�m not at all sure they dragged their women by the hair; the women -were probably pretty tough, too! - -Neanderthal men had large bony heads, but plenty of room for brains. -Some had brain cases even larger than the average for modern man. Their -faces were heavy, and they had eyebrow ridges of bone, but the ridges -were not as big as those of Java man. Their foreheads were very low, -and they didn�t have much chin. They were about five feet three inches -tall, but were heavy and barrel-chested. But the Neanderthalers didn�t -slouch as much as they�ve been blamed for, either. - -One important thing about the Neanderthal group is that there is a fair -number of them to study. Just as important is the fact that we know -something about how they lived, and about some of the tools they made. - - -OTHER MEN CONTEMPORARY WITH THE NEANDERTHALOIDS - -We have seen that the neanderthaloids seem to be a specialization -in a corner of Europe. What was going on elsewhere? We think that -the pre-neanderthaloid type was a generally widespread form of men. -From this type evolved other more or less extreme although generally -related men. The Solo finds in Java form one such case. Another was the -Rhodesian man of Africa, and the more recent Hopefield finds show more -of the general Rhodesian type. It is more confusing than it needs to be -if these cases outside western Europe are called neanderthaloids. They -lived during the same approximate time range but they were all somewhat -different-looking people. - - -EARLY MODERN MEN - -How early is modern man (_Homo sapiens_), the �wise man�? Some people -have thought that he was very early, a few still think so. Piltdown -and Galley Hill, which were quite modern in anatomical appearance and -_supposedly_ very early in date, were the best �evidence� for very -early modern men. Now that Piltdown has been liquidated and Galley Hill -is known to be very late, what is left of the idea? - -The backs of the skulls of the Swanscombe and Steinheim finds look -rather modern. Unless you pay attention to the face and forehead of the -Steinheim find--which not many people have--and perhaps also consider -the Ternafine jaws, you might come to the conclusion that the crown of -the Swanscombe head was that of a modern-like man. - -Two more skulls, again without faces, are available from a French -cave site, Font�chevade. They come from the time of the last great -interglacial, as did the pre-neanderthaloids. The crowns of the -Font�chevade skulls also look quite modern. There is a bit of the -forehead preserved on one of these skulls and the brow-ridge is not -heavy. Nevertheless, there is a suggestion that the bones belonged to -an immature individual. In this case, his (or even more so, if _her_) -brow-ridges would have been weak anyway. The case for the Font�chevade -fossils, as modern type men, is little stronger than that for -Swanscombe, although Professor Vallois believes it a good case. - -It seems to add up to the fact that there were people living in -Europe--before the classic neanderthaloids--who looked more modern, -in some features, than the classic western neanderthaloids did. Our -best suggestion of what men looked like--just before they became fully -modern--comes from a cave on Mount Carmel in Palestine. - - -THE FIRST MODERNS - -Professor T. D. McCown and the late Sir Arthur Keith, who studied the -Mount Carmel bones, figured out that one of the two groups involved -was as much as 70 per cent modern. There were, in fact, two groups or -varieties of men in the Mount Carmel caves and in at least two other -Palestinian caves of about the same time. The time would be about that -of the onset of colder weather, when the last glaciation was beginning -in the north--say 75,000 years ago. - -The 70 per cent modern group came from only one cave, Mugharet es-Skhul -(�cave of the kids�). The other group, from several caves, had bones of -men of the type we�ve been calling pre-neanderthaloid which we noted -were widespread in Europe and beyond. The tools which came with each -of these finds were generally similar, and McCown and Keith, and other -scholars since their study, have tended to assume that both the Skhul -group and the pre-neanderthaloid group came from exactly the same time. -The conclusion was quite natural: here was a population of men in the -act of evolving in two different directions. But the time may not be -exactly the same. It is very difficult to be precise, within say 10,000 -years, for a time some 75,000 years ago. If the Skhul men are in fact -later than the pre-neanderthaloid group of Palestine, as some of us -think, then they show how relatively modern some men were--men who -lived at the same time as the classic Neanderthalers of the European -pocket. - -Soon after the first extremely cold phase of the last glaciation, we -begin to get a number of bones of completely modern men in Europe. -We also get great numbers of the tools they made, and their living -places in caves. Completely modern skeletons begin turning up in caves -dating back to toward 40,000 years ago. The time is about that of the -beginning of the second phase of the last glaciation. These skeletons -belonged to people no different from many people we see today. Like -people today, not everybody looked alike. (The positions of the more -important fossil men of later Europe are shown in the chart on page -72.) - - -DIFFERENCES IN THE EARLY MODERNS - -The main early European moderns have been divided into two groups, the -Cro-Magnon group and the Combe Capelle-Br�nn group. Cro-Magnon people -were tall and big-boned, with large, long, and rugged heads. They -must have been built like many present-day Scandinavians. The Combe -Capelle-Br�nn people were shorter; they had narrow heads and faces, and -big eyebrow-ridges. Of course we don�t find the skin or hair of these -people. But there is little doubt they were Caucasoids (�Whites�). - -Another important find came in the Italian Riviera, near Monte Carlo. -Here, in a cave near Grimaldi, there was a grave containing a woman -and a young boy, buried together. The two skeletons were first called -�Negroid� because some features of their bones were thought to resemble -certain features of modern African Negro bones. But more recently, -Professor E. A. Hooton and other experts questioned the use of the word -�Negroid� in describing the Grimaldi skeletons. It is true that nothing -is known of the skin color, hair form, or any other fleshy feature of -the Grimaldi people, so that the word �Negroid� in its usual meaning is -not proper here. It is also not clear whether the features of the bones -claimed to be �Negroid� are really so at all. - -From a place called Wadjak, in Java, we have �proto-Australoid� skulls -which closely resemble those of modern Australian natives. Some of -the skulls found in South Africa, especially the Boskop skull, look -like those of modern Bushmen, but are much bigger. The ancestors of -the Bushmen seem to have once been very widespread south of the Sahara -Desert. True African Negroes were forest people who apparently expanded -out of the west central African area only in the last several thousand -years. Although dark in skin color, neither the Australians nor the -Bushmen are Negroes; neither the Wadjak nor the Boskop skulls are -�Negroid.� - -As we�ve already mentioned, Professor Weidenreich believed that Peking -man was already on the way to becoming a Mongoloid. Anyway, the -Mongoloids would seem to have been present by the time of the �Upper -Cave� at Choukoutien, the _Sinanthropus_ find-spot. - - -WHAT THE DIFFERENCES MEAN - -What does all this difference mean? It means that, at one moment in -time, within each different area, men tended to look somewhat alike. -From area to area, men tended to look somewhat different, just as -they do today. This is all quite natural. People _tended_ to mate -near home; in the anthropological jargon, they made up geographically -localized breeding populations. The simple continental division of -�stocks�--black = Africa, yellow = Asia, white = Europe--is too simple -a picture to fit the facts. People became accustomed to life in some -particular area within a continent (we might call it a �natural area�). -As they went on living there, they evolved towards some particular -physical variety. It would, of course, have been difficult to draw -a clear boundary between two adjacent areas. There must always have -been some mating across the boundaries in every case. One thing human -beings don�t do, and never have done, is to mate for �purity.� It is -self-righteous nonsense when we try to kid ourselves into thinking that -they do. - -I am not going to struggle with the whole business of modern stocks and -races. This is a book about prehistoric men, not recent historic or -modern men. My physical anthropologist friends have been very patient -in helping me to write and rewrite this chapter--I am not going to -break their patience completely. Races are their business, not mine, -and they must do the writing about races. I shall, however, give two -modern definitions of race, and then make one comment. - - Dr. William G. Boyd, professor of Immunochemistry, School of - Medicine, Boston University: �We may define a human race as a - population which differs significantly from other human populations - in regard to the frequency of one or more of the genes it - possesses.� - - Professor Sherwood L. Washburn, professor of Physical Anthropology, - Department of Anthropology, the University of California: �A �race� - is a group of genetically similar populations, and races intergrade - because there are always intermediate populations.� - -My comment is that the ideas involved here are all biological: they -concern groups, _not_ individuals. Boyd and Washburn may differ a bit -on what they want to consider a �population,� but a population is a -group nevertheless, and genetics is biology to the hilt. Now a lot of -people still think of race in terms of how people dress or fix their -food or of other habits or customs they have. The next step is to talk -about racial �purity.� None of this has anything whatever to do with -race proper, which is a matter of the biology of groups. - -Incidentally, I�m told that if man very carefully _controls_ -the breeding of certain animals over generations--dogs, cattle, -chickens--he might achieve a �pure� race of animals. But he doesn�t do -it. Some unfortunate genetic trait soon turns up, so this has just as -carefully to be bred out again, and so on. - - -SUMMARY OF PRESENT KNOWLEDGE OF FOSSIL MEN - -The earliest bones of men we now have--upon which all the experts -would probably agree--are those of _Meganthropus_, from Java, of about -450,000 years ago. The earlier australopithecines of Africa were -possibly not tool-users and may not have been ancestral to men at all. -But there is an alternate and evidently increasingly stronger chance -that some of them may have been. The Kanam jaw from Kenya, another -early possibility, is not only very incomplete but its find-spot is -very questionable. - -Java man proper, _Pithecanthropus_, comes next, at about 400,000 years -ago, and the big Heidelberg jaw in Germany must be of about the same -date. Next comes Swanscombe in England, Steinheim in Germany, the -Ternafine jaws in Algeria, and Peking man, _Sinanthropus_. They all -date to the second great interglacial period, about 350,000 years ago. - -Piltdown and Galley Hill are out, and with them, much of the starch -in the old idea that there were two distinct lines of development -in human evolution: (1) a line of �paleoanthropic� development from -Heidelberg to the Neanderthalers where it became extinct, and (2) a -very early �modern� line, through Piltdown, Galley Hill, Swanscombe, to -us. Swanscombe, Steinheim, and Ternafine are just as easily cases of -very early pre-neanderthaloids. - -The pre-neanderthaloids were very widespread during the third -interglacial: Ehringsdorf, Saccopastore, some of the Mount Carmel -people, and probably Font�chevade are cases in point. A variety of -their descendants can be seen, from Java (Solo), Africa (Rhodesian -man), and about the Mediterranean and in western Europe. As the acute -cold of the last glaciation set in, the western Europeans found -themselves surrounded by water, ice, or bitter cold tundra. To vastly -over-simplify it, they �bred in� and became classic neanderthaloids. -But on Mount Carmel, the Skhul cave-find with its 70 per cent modern -features shows what could happen elsewhere at the same time. - -Lastly, from about 40,000 or 35,000 years ago--the time of the onset -of the second phase of the last glaciation--we begin to find the fully -modern skeletons of men. The modern skeletons differ from place to -place, just as different groups of men living in different places still -look different. - -What became of the Neanderthalers? Nobody can tell me for sure. I�ve a -hunch they were simply �bred out� again when the cold weather was over. -Many Americans, as the years go by, are no longer ashamed to claim they -have �Indian blood in their veins.� Give us a few more generations -and there will not be very many other Americans left to whom we can -brag about it. It certainly isn�t inconceivable to me to imagine a -little Cro-Magnon boy bragging to his friends about his tough, strong, -Neanderthaler great-great-great-great-grandfather! - - - - -Cultural BEGINNINGS - -[Illustration] - - -Men, unlike the lower animals, are made up of much more than flesh and -blood and bones; for men have �culture.� - - -WHAT IS CULTURE? - -�Culture� is a word with many meanings. The doctors speak of making a -�culture� of a certain kind of bacteria, and ants are said to have a -�culture.� Then there is the Emily Post kind of �culture�--you say a -person is �cultured,� or that he isn�t, depending on such things as -whether or not he eats peas with his knife. - -The anthropologists use the word too, and argue heatedly over its finer -meanings; but they all agree that every human being is part of or has -some kind of culture. Each particular human group has a particular -culture; that is one of the ways in which we can tell one group of -men from another. In this sense, a CULTURE means the way the members -of a group of people think and believe and live, the tools they make, -and the way they do things. Professor Robert Redfield says a culture -is an organized or formalized body of conventional understandings. -�Conventional understandings� means the whole set of rules, beliefs, -and standards which a group of people lives by. These understandings -show themselves in art, and in the other things a people may make and -do. The understandings continue to last, through tradition, from one -generation to another. They are what really characterize different -human groups. - - -SOME CHARACTERISTICS OF CULTURE - -A culture lasts, although individual men in the group die off. On -the other hand, a culture changes as the different conventions and -understandings change. You could almost say that a culture lives in the -minds of the men who have it. But people are not born with it; they -get it as they grow up. Suppose a day-old Hungarian baby is adopted by -a family in Oshkosh, Wisconsin, and the child is not told that he is -Hungarian. He will grow up with no more idea of Hungarian culture than -anyone else in Oshkosh. - -So when I speak of ancient Egyptian culture, I mean the whole body -of understandings and beliefs and knowledge possessed by the ancient -Egyptians. I mean their beliefs as to why grain grew, as well as their -ability to make tools with which to reap the grain. I mean their -beliefs about life after death. What I am thinking about as culture is -a thing which lasted in time. If any one Egyptian, even the Pharaoh, -died, it didn�t affect the Egyptian culture of that particular moment. - - -PREHISTORIC CULTURES - -For that long period of man�s history that is all prehistory, we have -no written descriptions of cultures. We find only the tools men made, -the places where they lived, the graves in which they buried their -dead. Fortunately for us, these tools and living places and graves all -tell us something about the ways these men lived and the things they -believed. But the story we learn of the very early cultures must be -only a very small part of the whole, for we find so few things. The -rest of the story is gone forever. We have to do what we can with what -we find. - -For all of the time up to about 75,000 years ago, which was the time -of the classic European Neanderthal group of men, we have found few -cave-dwelling places of very early prehistoric men. First, there is the -fallen-in cave where Peking man was found, near Peking. Then there are -two or three other _early_, but not _very early_, possibilities. The -finds at the base of the French cave of Font�chevade, those in one of -the Makapan caves in South Africa, and several open sites such as Dr. -L. S. B. Leakey�s Olorgesailie in Kenya doubtless all lie earlier than -the time of the main European Neanderthal group, but none are so early -as the Peking finds. - -You can see that we know very little about the home life of earlier -prehistoric men. We find different kinds of early stone tools, but we -can�t even be really sure which tools may have been used together. - - -WHY LITTLE HAS LASTED FROM EARLY TIMES - -Except for the rare find-spots mentioned above, all our very early -finds come from geological deposits, or from the wind-blown surfaces -of deserts. Here is what the business of geological deposits really -means. Let us say that a group of people was living in England about -300,000 years ago. They made the tools they needed, lived in some sort -of camp, almost certainly built fires, and perhaps buried their dead. -While the climate was still warm, many generations may have lived in -the same place, hunting, and gathering nuts and berries; but after some -few thousand years, the weather began very gradually to grow colder. -These early Englishmen would not have known that a glacier was forming -over northern Europe. They would only have noticed that the animals -they hunted seemed to be moving south, and that the berries grew larger -toward the south. So they would have moved south, too. - -The camp site they left is the place we archeologists would really have -liked to find. All of the different tools the people used would have -been there together--many broken, some whole. The graves, and traces -of fire, and the tools would have been there. But the glacier got -there first! The front of this enormous sheet of ice moved down over -the country, crushing and breaking and plowing up everything, like a -gigantic bulldozer. You can see what happened to our camp site. - -Everything the glacier couldn�t break, it pushed along in front of it -or plowed beneath it. Rocks were ground to gravel, and soil was caught -into the ice, which afterwards melted and ran off as muddy water. Hard -tools of flint sometimes remained whole. Human bones weren�t so hard; -it�s a wonder _any_ of them lasted. Gushing streams of melt water -flushed out the debris from underneath the glacier, and water flowed -off the surface and through great crevasses. The hard materials these -waters carried were even more rolled and ground up. Finally, such -materials were dropped by the rushing waters as gravels, miles from -the front of the glacier. At last the glacier reached its greatest -extent; then it melted backward toward the north. Debris held in the -ice was dropped where the ice melted, or was flushed off by more melt -water. When the glacier, leaving the land, had withdrawn to the sea, -great hunks of ice were broken off as icebergs. These icebergs probably -dropped the materials held in their ice wherever they floated and -melted. There must be many tools and fragmentary bones of prehistoric -men on the bottom of the Atlantic Ocean and the North Sea. - -Remember, too, that these glaciers came and went at least three or four -times during the Ice Age. Then you will realize why the earlier things -we find are all mixed up. Stone tools from one camp site got mixed up -with stone tools from many other camp sites--tools which may have been -made tens of thousands or more years apart. The glaciers mixed them -all up, and so we cannot say which particular sets of tools belonged -together in the first place. - - -�EOLITHS� - -But what sort of tools do we find earliest? For almost a century, -people have been picking up odd bits of flint and other stone in the -oldest Ice Age gravels in England and France. It is now thought these -odd bits of stone weren�t actually worked by prehistoric men. The -stones were given a name, _eoliths_, or �dawn stones.� You can see them -in many museums; but you can be pretty sure that very few of them were -actually fashioned by men. - -It is impossible to pick out �eoliths� that seem to be made in any -one _tradition_. By �tradition� I mean a set of habits for making one -kind of tool for some particular job. No two �eoliths� look very much -alike: tools made as part of some one tradition all look much alike. -Now it�s easy to suppose that the very earliest prehistoric men picked -up and used almost any sort of stone. This wouldn�t be surprising; you -and I do it when we go camping. In other words, some of these �eoliths� -may actually have been used by prehistoric men. They must have used -anything that might be handy when they needed it. We could have figured -that out without the �eoliths.� - - -THE ROAD TO STANDARDIZATION - -Reasoning from what we know or can easily imagine, there should have -been three major steps in the prehistory of tool-making. The first step -would have been simple _utilization_ of what was at hand. This is the -step into which the �eoliths� would fall. The second step would have -been _fashioning_--the haphazard preparation of a tool when there was a -need for it. Probably many of the earlier pebble tools, which I shall -describe next, fall into this group. The third step would have been -_standardization_. Here, men began to make tools according to certain -set traditions. Counting the better-made pebble tools, there are four -such traditions or sets of habits for the production of stone tools in -earliest prehistoric times. Toward the end of the Pleistocene, a fifth -tradition appears. - - -PEBBLE TOOLS - -At the beginning of the last chapter, you�ll remember that I said there -were tools from very early geological beds. The earliest bones of men -have not yet been found in such early beds although the Sterkfontein -australopithecine cave approaches this early date. The earliest tools -come from Africa. They date back to the time of the first great -alpine glaciation and are at least 500,000 years old. The earliest -ones are made of split pebbles, about the size of your fist or a bit -bigger. They go under the name of pebble tools. There are many natural -exposures of early Pleistocene geological beds in Africa, and the -prehistoric archeologists of south and central Africa have concentrated -on searching for early tools. Other finds of early pebble tools have -recently been made in Algeria and Morocco. - -[Illustration: SOUTH AFRICAN PEBBLE TOOL] - -There are probably early pebble tools to be found in areas of the -Old World besides Africa; in fact, some prehistorians already claim -to have identified a few. Since the forms and the distinct ways of -making the earlier pebble tools had not yet sufficiently jelled into -a set tradition, they are difficult for us to recognize. It is not -so difficult, however, if there are great numbers of �possibles� -available. A little later in time the tradition becomes more clearly -set, and pebble tools are easier to recognize. So far, really large -collections of pebble tools have only been found and examined in Africa. - - -CORE-BIFACE TOOLS - -The next tradition we�ll look at is the _core_ or biface one. The tools -are large pear-shaped pieces of stone trimmed flat on the two opposite -sides or �faces.� Hence �biface� has been used to describe these tools. -The front view is like that of a pear with a rather pointed top, and -the back view looks almost exactly the same. Look at them side on, and -you can see that the front and back faces are the same and have been -trimmed to a thin tip. The real purpose in trimming down the two faces -was to get a good cutting edge all around. You can see all this in the -illustration. - -[Illustration: ABBEVILLIAN BIFACE] - -We have very little idea of the way in which these core-bifaces were -used. They have been called �hand axes,� but this probably gives the -wrong idea, for an ax, to us, is not a pointed tool. All of these early -tools must have been used for a number of jobs--chopping, scraping, -cutting, hitting, picking, and prying. Since the core-bifaces tend to -be pointed, it seems likely that they were used for hitting, picking, -and prying. But they have rough cutting edges, so they could have been -used for chopping, scraping, and cutting. - - -FLAKE TOOLS - -The third tradition is the _flake_ tradition. The idea was to get a -tool with a good cutting edge by simply knocking a nice large flake off -a big block of stone. You had to break off the flake in such a way that -it was broad and thin, and also had a good sharp cutting edge. Once you -really got on to the trick of doing it, this was probably a simpler way -to make a good cutting tool than preparing a biface. You have to know -how, though; I�ve tried it and have mashed my fingers more than once. - -The flake tools look as if they were meant mainly for chopping, -scraping, and cutting jobs. When one made a flake tool, the idea seems -to have been to produce a broad, sharp, cutting edge. - -[Illustration: CLACTONIAN FLAKE] - -The core-biface and the flake traditions were spread, from earliest -times, over much of Europe, Africa, and western Asia. The map on page -52 shows the general area. Over much of this great region there was -flint. Both of these traditions seem well adapted to flint, although -good core-bifaces and flakes were made from other kinds of stone, -especially in Africa south of the Sahara. - - -CHOPPERS AND ADZE-LIKE TOOLS - -The fourth early tradition is found in southern and eastern Asia, from -northwestern India through Java and Burma into China. Father Maringer -recently reported an early group of tools in Japan, which most resemble -those of Java, called Patjitanian. The prehistoric men in this general -area mostly used quartz and tuff and even petrified wood for their -stone tools (see illustration, p. 46). - -This fourth early tradition is called the _chopper-chopping tool_ -tradition. It probably has its earliest roots in the pebble tool -tradition of African type. There are several kinds of tools in this -tradition, but all differ from the western core-bifaces and flakes. -There are broad, heavy scrapers or cleavers, and tools with an -adze-like cutting edge. These last-named tools are called �hand adzes,� -just as the core-bifaces of the west have often been called �hand -axes.� The section of an adze cutting edge is ? shaped; the section of -an ax is < shaped. - -[Illustration: ANYATHIAN ADZE-LIKE TOOL] - -There are also pointed pebble tools. Thus the tool kit of these early -south and east Asiatic peoples seems to have included tools for doing -as many different jobs as did the tools of the Western traditions. - -Dr. H. L. Movius has emphasized that the tools which were found in the -Peking cave with Peking man belong to the chopper-tool tradition. This -is the only case as yet where the tools and the man have been found -together from very earliest times--if we except Sterkfontein. - - -DIFFERENCES WITHIN THE TOOL-MAKING TRADITIONS - -The latter three great traditions in the manufacture of stone -tools--and the less clear-cut pebble tools before them--are all we have -to show of the cultures of the men of those times. Changes happened in -each of the traditions. As time went on, the tools in each tradition -were better made. There could also be slight regional differences in -the tools within one tradition. Thus, tools with small differences, but -all belonging to one tradition, can be given special group (facies) -names. - -This naming of special groups has been going on for some time. Here are -some of these names, since you may see them used in museum displays -of flint tools, or in books. Within each tradition of tool-making -(save the chopper tools), the earliest tool type is at the bottom -of the list, just as it appears in the lowest beds of a geological -stratification.[3] - - [3] Archeologists usually make their charts and lists with the - earliest materials at the bottom and the latest on top, since - this is the way they find them in the ground. - - Chopper tool (all about equally early): - Anyathian (Burma) - Choukoutienian (China) - Patjitanian (Java) - Soan (India) - - Flake: - �Typical Mousterian� - Levalloiso-Mousterian - Levalloisian - Tayacian - Clactonian (localized in England) - - Core-biface: - Some blended elements in �Mousterian� - Micoquian (= Acheulean 6 and 7) - Acheulean - Abbevillian (once called �Chellean�) - - Pebble tool: - Oldowan - Ain Hanech - pre-Stellenbosch - Kafuan - -The core-biface and the flake traditions appear in the chart (p. 65). - -The early archeologists had many of the tool groups named before they -ever realized that there were broader tool preparation traditions. This -was understandable, for in dealing with the mixture of things that come -out of glacial gravels the easiest thing to do first is to isolate -individual types of tools into groups. First you put a bushel-basketful -of tools on a table and begin matching up types. Then you give names to -the groups of each type. The groups and the types are really matters of -the archeologists� choice; in real life, they were probably less exact -than the archeologists� lists of them. We now know pretty well in which -of the early traditions the various early groups belong. - - -THE MEANING OF THE DIFFERENT TRADITIONS - -What do the traditions really mean? I see them as the standardization -of ways to make tools for particular jobs. We may not know exactly what -job the maker of a particular core-biface or flake tool had in mind. We -can easily see, however, that he already enjoyed a know-how, a set of -persistent habits of tool preparation, which would always give him the -same type of tool when he wanted to make it. Therefore, the traditions -show us that persistent habits already existed for the preparation of -one type of tool or another. - -This tells us that one of the characteristic aspects of human culture -was already present. There must have been, in the minds of these -early men, a notion of the ideal type of tool for a particular job. -Furthermore, since we find so many thousands upon thousands of tools -of one type or another, the notion of the ideal types of tools _and_ -the know-how for the making of each type must have been held in common -by many men. The notions of the ideal types and the know-how for their -production must have been passed on from one generation to another. - -I could even guess that the notions of the ideal type of one or the -other of these tools stood out in the minds of men of those times -somewhat like a symbol of �perfect tool for good job.� If this were -so--remember it�s only a wild guess of mine--then men were already -symbol users. Now let�s go on a further step to the fact that the words -men speak are simply sounds, each different sound being a symbol for a -different meaning. If standardized tool-making suggests symbol-making, -is it also possible that crude word-symbols were also being made? I -suppose that it is not impossible. - -There may, of course, be a real question whether tool-utilizing -creatures--our first step, on page 42--were actually men. Other -animals utilize things at hand as tools. The tool-fashioning creature -of our second step is more suggestive, although we may not yet feel -sure that many of the earlier pebble tools were man-made products. But -with the step to standardization and the appearance of the traditions, -I believe we must surely be dealing with the traces of culture-bearing -_men_. The �conventional understandings� which Professor Redfield�s -definition of culture suggests are now evidenced for us in the -persistent habits for the preparation of stone tools. Were we able to -see the other things these prehistoric men must have made--in materials -no longer preserved for the archeologist to find--I believe there would -be clear signs of further conventional understandings. The men may have -been physically primitive and pretty shaggy in appearance, but I think -we must surely call them men. - - -AN OLDER INTERPRETATION OF THE WESTERN TRADITIONS - -In the last chapter, I told you that many of the older archeologists -and human paleontologists used to think that modern man was very old. -The supposed ages of Piltdown and Galley Hill were given as evidence -of the great age of anatomically modern man, and some interpretations -of the Swanscombe and Font�chevade fossils were taken to support -this view. The conclusion was that there were two parallel lines or -�phyla� of men already present well back in the Pleistocene. The -first of these, the more primitive or �paleoanthropic� line, was -said to include Heidelberg, the proto-neanderthaloids and classic -Neanderthal. The more anatomically modern or �neanthropic� line was -thought to consist of Piltdown and the others mentioned above. The -Neanderthaler or paleoanthropic line was thought to have become extinct -after the first phase of the last great glaciation. Of course, the -modern or neanthropic line was believed to have persisted into the -present, as the basis for the world�s population today. But with -Piltdown liquidated, Galley Hill known to be very late, and Swanscombe -and Font�chevade otherwise interpreted, there is little left of the -so-called parallel phyla theory. - -While the theory was in vogue, however, and as long as the European -archeological evidence was looked at in one short-sighted way, the -archeological materials _seemed_ to fit the parallel phyla theory. It -was simply necessary to believe that the flake tools were made only -by the paleoanthropic Neanderthaler line, and that the more handsome -core-biface tools were the product of the neanthropic modern-man line. - -Remember that _almost_ all of the early prehistoric European tools -came only from the redeposited gravel beds. This means that the tools -were not normally found in the remains of camp sites or work shops -where they had actually been dropped by the men who made and used -them. The tools came, rather, from the secondary hodge-podge of the -glacial gravels. I tried to give you a picture of the bulldozing action -of glaciers (p. 40) and of the erosion and weathering that were -side-effects of a glacially conditioned climate on the earth�s surface. -As we said above, if one simply plucks tools out of the redeposited -gravels, his natural tendency is to �type� the tools by groups, and to -think that the groups stand for something _on their own_. - -In 1906, M. Victor Commont actually made a rare find of what seems -to have been a kind of workshop site, on a terrace above the Somme -river in France. Here, Commont realized, flake tools appeared clearly -in direct association with core-biface tools. Few prehistorians paid -attention to Commont or his site, however. It was easier to believe -that flake tools represented a distinct �culture� and that this -�culture� was that of the Neanderthaler or paleoanthropic line, and -that the core-bifaces stood for another �culture� which was that of the -supposed early modern or neanthropic line. Of course, I am obviously -skipping many details here. Some later sites with Neanderthal fossils -do seem to have only flake tools, but other such sites have both types -of tools. The flake tools which appeared _with_ the core-bifaces -in the Swanscombe gravels were never made much of, although it -was embarrassing for the parallel phyla people that Font�chevade -ran heavily to flake tools. All in all, the parallel phyla theory -flourished because it seemed so neat and easy to understand. - - -TRADITIONS ARE TOOL-MAKING HABITS, NOT CULTURES - -In case you think I simply enjoy beating a dead horse, look in any -standard book on prehistory written twenty (or even ten) years ago, or -in most encyclopedias. You�ll find that each of the individual tool -types, of the West, at least, was supposed to represent a �culture.� -The �cultures� were believed to correspond to parallel lines of human -evolution. - -In 1937, Mr. Harper Kelley strongly re-emphasized the importance -of Commont�s workshop site and the presence of flake tools with -core-bifaces. Next followed Dr. Movius� clear delineation of the -chopper-chopping tool tradition of the Far East. This spoiled the nice -symmetry of the flake-tool = paleoanthropic, core-biface = neanthropic -equations. Then came increasing understanding of the importance of -the pebble tools in Africa, and the location of several more workshop -sites there, especially at Olorgesailie in Kenya. Finally came the -liquidation of Piltdown and the deflation of Galley Hill�s date. So it -is at last possible to picture an individual prehistoric man making a -flake tool to do one job and a core-biface tool to do another. Commont -showed us this picture in 1906, but few believed him. - -[Illustration: DISTRIBUTION OF TOOL-PREPARATION TRADITIONS - -Time approximately 100,000 years ago] - -There are certainly a few cases in which flake tools did appear with -few or no core-bifaces. The flake-tool group called Clactonian in -England is such a case. Another good, but certainly later case is -that of the cave on Mount Carmel in Palestine, where the blended -pre-neanderthaloid, 70 per cent modern-type skulls were found. Here, in -the same level with the skulls, were 9,784 flint tools. Of these, only -three--doubtless strays--were core-bifaces; all the rest were flake -tools or flake chips. We noted above how the Font�chevade cave ran to -flake tools. The only conclusion I would draw from this is that times -and circumstances did exist in which prehistoric men needed only flake -tools. So they only made flake tools for those particular times and -circumstances. - - -LIFE IN EARLIEST TIMES - -What do we actually know of life in these earliest times? In the -glacial gravels, or in the terrace gravels of rivers once swollen by -floods of melt water or heavy rains, or on the windswept deserts, we -find stone tools. The earliest and coarsest of these are the pebble -tools. We do not yet know what the men who made them looked like, -although the Sterkfontein australopithecines probably give us a good -hint. Then begin the more formal tool preparation traditions of the -west--the core-bifaces and the flake tools--and the chopper-chopping -tool series of the farther east. There is an occasional roughly worked -piece of bone. From the gravels which yield the Clactonian flakes of -England comes the fire-hardened point of a wooden spear. There are -also the chance finds of the fossil human bones themselves, of which -we spoke in the last chapter. Aside from the cave of Peking man, none -of the earliest tools have been found in caves. Open air or �workshop� -sites which do not seem to have been disturbed later by some geological -agency are very rare. - -The chart on page 65 shows graphically what the situation in -west-central Europe seems to have been. It is not yet certain whether -there were pebble tools there or not. The Font�chevade cave comes -into the picture about 100,000 years ago or more. But for the earlier -hundreds of thousands of years--below the red-dotted line on the -chart--the tools we find come almost entirely from the haphazard -mixture within the geological contexts. - -The stone tools of each of the earlier traditions are the simplest -kinds of all-purpose tools. Almost any one of them could be used for -hacking, chopping, cutting, and scraping; so the men who used them must -have been living in a rough and ready sort of way. They found or hunted -their food wherever they could. In the anthropological jargon, they -were �food-gatherers,� pure and simple. - -Because of the mixture in the gravels and in the materials they -carried, we can�t be sure which animals these men hunted. Bones of -the larger animals turn up in the gravels, but they could just as -well belong to the animals who hunted the men, rather than the other -way about. We don�t know. This is why camp sites like Commont�s and -Olorgesailie in Kenya are so important when we do find them. The animal -bones at Olorgesailie belonged to various mammals of extremely large -size. Probably they were taken in pit-traps, but there are a number of -groups of three round stones on the site which suggest that the people -used bolas. The South American Indians used three-ball bolas, with the -stones in separate leather bags connected by thongs. These were whirled -and then thrown through the air so as to entangle the feet of a fleeing -animal. - -Professor F. Clark Howell recently returned from excavating another -important open air site at Isimila in Tanganyika. The site yielded -the bones of many fossil animals and also thousands of core-bifaces, -flakes, and choppers. But Howell�s reconstruction of the food-getting -habits of the Isimila people certainly suggests that the word �hunting� -is too dignified for what they did; �scavenging� would be much nearer -the mark. - -During a great part of this time the climate was warm and pleasant. The -second interglacial period (the time between the second and third great -alpine glaciations) lasted a long time, and during much of this time -the climate may have been even better than ours is now. We don�t know -that earlier prehistoric men in Europe or Africa lived in caves. They -may not have needed to; much of the weather may have been so nice that -they lived in the open. Perhaps they didn�t wear clothes, either. - - -WHAT THE PEKING CAVE-FINDS TELL US - -The one early cave-dwelling we have found is that of Peking man, in -China. Peking man had fire. He probably cooked his meat, or used -the fire to keep dangerous animals away from his den. In the cave -were bones of dangerous animals, members of the wolf, bear, and cat -families. Some of the cat bones belonged to beasts larger than tigers. -There were also bones of other wild animals: buffalo, camel, deer, -elephants, horses, sheep, and even ostriches. Seventy per cent of the -animals Peking man killed were fallow deer. It�s much too cold and dry -in north China for all these animals to live there today. So this list -helps us know that the weather was reasonably warm, and that there was -enough rain to grow grass for the grazing animals. The list also helps -the paleontologists to date the find. - -Peking man also seems to have eaten plant food, for there are hackberry -seeds in the debris of the cave. His tools were made of sandstone and -quartz and sometimes of a rather bad flint. As we�ve already seen, they -belong in the chopper-tool tradition. It seems fairly clear that some -of the edges were chipped by right-handed people. There are also many -split pieces of heavy bone. Peking man probably split them so he could -eat the bone marrow, but he may have used some of them as tools. - -Many of these split bones were the bones of Peking men. Each one of the -skulls had already had the base broken out of it. In no case were any -of the bones resting together in their natural relation to one another. -There is nothing like a burial; all of the bones are scattered. Now -it�s true that animals could have scattered bodies that were not cared -for or buried. But splitting bones lengthwise and carefully removing -the base of a skull call for both the tools and the people to use them. -It�s pretty clear who the people were. Peking man was a cannibal. - - * * * * * - -This rounds out about all we can say of the life and times of early -prehistoric men. In those days life was rough. You evidently had to -watch out not only for dangerous animals but also for your fellow men. -You ate whatever you could catch or find growing. But you had sense -enough to build fires, and you had already formed certain habits for -making the kinds of stone tools you needed. That�s about all we know. -But I think we�ll have to admit that cultural beginnings had been made, -and that these early people were really _men_. - - - - -MORE EVIDENCE of Culture - -[Illustration] - - -While the dating is not yet sure, the material that we get from caves -in Europe must go back to about 100,000 years ago; the time of the -classic Neanderthal group followed soon afterwards. We don�t know why -there is no earlier material in the caves; apparently they were not -used before the last interglacial phase (the period just before the -last great glaciation). We know that men of the classic Neanderthal -group were living in caves from about 75,000 to 45,000 years ago. -New radioactive carbon dates even suggest that some of the traces of -culture we�ll describe in this chapter may have lasted to about 35,000 -years ago. Probably some of the pre-neanderthaloid types of men had -also lived in caves. But we have so far found their bones in caves only -in Palestine and at Font�chevade. - - -THE CAVE LAYERS - -In parts of France, some peasants still live in caves. In prehistoric -time, many generations of people lived in them. As a result, many -caves have deep layers of debris. The first people moved in and lived -on the rock floor. They threw on the floor whatever they didn�t want, -and they tracked in mud; nobody bothered to clean house in those days. -Their debris--junk and mud and garbage and what not--became packed -into a layer. As time went on, and generations passed, the layer grew -thicker. Then there might have been a break in the occupation of the -cave for a while. Perhaps the game animals got scarce and the people -moved away; or maybe the cave became flooded. Later on, other people -moved in and began making a new layer of their own on top of the first -layer. Perhaps this process of layering went on in the same cave for a -hundred thousand years; you can see what happened. The drawing on this -page shows a section through such a cave. The earliest layer is on the -bottom, the latest one on top. They go in order from bottom to top, -earliest to latest. This is the _stratification_ we talked about (p. -12). - -[Illustration: SECTION OF SHELTER ON LOWER TERRACE, LE MOUSTIER] - -While we may find a mix-up in caves, it�s not nearly as bad as the -mixing up that was done by glaciers. The animal bones and shells, the -fireplaces, the bones of men, and the tools the men made all belong -together, if they come from one layer. That�s the reason why the cave -of Peking man is so important. It is also the reason why the caves in -Europe and the Near East are so important. We can get an idea of which -things belong together and which lot came earliest and which latest. - -In most cases, prehistoric men lived only in the mouths of caves. -They didn�t like the dark inner chambers as places to live in. They -preferred rock-shelters, at the bases of overhanging cliffs, if there -was enough overhang to give shelter. When the weather was good, they no -doubt lived in the open air as well. I�ll go on using the term �cave� -since it�s more familiar, but remember that I really mean rock-shelter, -as a place in which people actually lived. - -The most important European cave sites are in Spain, France, and -central Europe; there are also sites in England and Italy. A few caves -are known in the Near East and Africa, and no doubt more sites will be -found when the out-of-the-way parts of Europe, Africa, and Asia are -studied. - - -AN �INDUSTRY� DEFINED - -We have already seen that the earliest European cave materials are -those from the cave of Font�chevade. Movius feels certain that the -lowest materials here date back well into the third interglacial stage, -that which lay between the Riss (next to the last) and the W�rm I -(first stage of the last) alpine glaciations. This material consists -of an _industry_ of stone tools, apparently all made in the flake -tradition. This is the first time we have used the word �industry.� -It is useful to call all of the different tools found together in one -layer and made of _one kind of material_ an industry; that is, the -tools must be found together as men left them. Tools taken from the -glacial gravels (or from windswept desert surfaces or river gravels -or any geological deposit) are not �together� in this sense. We might -say the latter have only �geological,� not �archeological� context. -Archeological context means finding things just as men left them. We -can tell what tools go together in an �industrial� sense only if we -have archeological context. - -Up to now, the only things we could have called �industries� were the -worked stone industry and perhaps the worked (?) bone industry of the -Peking cave. We could add some of the very clear cases of open air -sites, like Olorgesailie. We couldn�t use the term for the stone tools -from the glacial gravels, because we do not know which tools belonged -together. But when the cave materials begin to appear in Europe, we can -begin to speak of industries. Most of the European caves of this time -contain industries of flint tools alone. - - -THE EARLIEST EUROPEAN CAVE LAYERS - -We�ve just mentioned the industry from what is said to be the oldest -inhabited cave in Europe; that is, the industry from the deepest layer -of the site at Font�chevade. Apparently it doesn�t amount to much. The -tools are made of stone, in the flake tradition, and are very poorly -worked. This industry is called _Tayacian_. Its type tool seems to be -a smallish flake tool, but there are also larger flakes which seem to -have been fashioned for hacking. In fact, the type tool seems to be -simply a smaller edition of the Clactonian tool (pictured on p. 45). - -None of the Font�chevade tools are really good. There are scrapers, -and more or less pointed tools, and tools that may have been used -for hacking and chopping. Many of the tools from the earlier glacial -gravels are better made than those of this first industry we see in -a European cave. There is so little of this material available that -we do not know which is really typical and which is not. You would -probably find it hard to see much difference between this industry and -a collection of tools of the type called Clactonian, taken from the -glacial gravels, especially if the Clactonian tools were small-sized. - -The stone industry of the bottommost layer of the Mount Carmel cave, -in Palestine, where somewhat similar tools were found, has also been -called Tayacian. - -I shall have to bring in many unfamiliar words for the names of the -industries. The industries are usually named after the places where -they were first found, and since these were in most cases in France, -most of the names which follow will be of French origin. However, -the names have simply become handles and are in use far beyond the -boundaries of France. It would be better if we had a non-place-name -terminology, but archeologists have not yet been able to agree on such -a terminology. - - -THE ACHEULEAN INDUSTRY - -Both in France and in Palestine, as well as in some African cave -sites, the next layers in the deep caves have an industry in both the -core-biface and the flake traditions. The core-biface tools usually -make up less than half of all the tools in the industry. However, -the name of the biface type of tool is generally given to the whole -industry. It is called the _Acheulean_, actually a late form of it, as -�Acheulean� is also used for earlier core-biface tools taken from the -glacial gravels. In western Europe, the name used is _Upper Acheulean_ -or _Micoquian_. The same terms have been borrowed to name layers E and -F in the Tabun cave, on Mount Carmel in Palestine. - -The Acheulean core-biface type of tool is worked on two faces so as -to give a cutting edge all around. The outline of its front view may -be oval, or egg-shaped, or a quite pointed pear shape. The large -chip-scars of the Acheulean core-bifaces are shallow and flat. It is -suspected that this resulted from the removal of the chips with a -wooden club; the deep chip-scars of the earlier Abbevillian core-biface -came from beating the tool against a stone anvil. These tools are -really the best and also the final products of the core-biface -tradition. We first noticed the tradition in the early glacial gravels -(p. 43); now we see its end, but also its finest examples, in the -deeper cave levels. - -The flake tools, which really make up the greater bulk of this -industry, are simple scrapers and chips with sharp cutting edges. The -habits used to prepare them must have been pretty much the same as -those used for at least one of the flake industries we shall mention -presently. - -There is very little else in these early cave layers. We do not have -a proper �industry� of bone tools. There are traces of fire, and of -animal bones, and a few shells. In Palestine, there are many more -bones of deer than of gazelle in these layers; the deer lives in a -wetter climate than does the gazelle. In the European cave layers, the -animal bones are those of beasts that live in a warm climate. They -belonged in the last interglacial period. We have not yet found the -bones of fossil men definitely in place with this industry. - -[Illustration: ACHEULEAN BIFACE] - - -FLAKE INDUSTRIES FROM THE CAVES - -Two more stone industries--the _Levalloisian_ and the -�_Mousterian_�--turn up at approximately the same time in the European -cave layers. Their tools seem to be mainly in the flake tradition, -but according to some of the authorities their preparation also shows -some combination with the habits by which the core-biface tools were -prepared. - -Now notice that I don�t tell you the Levalloisian and the �Mousterian� -layers are both above the late Acheulean layers. Look at the cave -section (p. 57) and you�ll find that some �Mousterian of Acheulean -tradition� appears above some �typical Mousterian.� This means that -there may be some kinds of Acheulean industries that are later than -some kinds of �Mousterian.� The same is true of the Levalloisian. - -There were now several different kinds of habits that men used in -making stone tools. These habits were based on either one or the other -of the two traditions--core-biface or flake--or on combinations of -the habits used in the preparation techniques of both traditions. All -were popular at about the same time. So we find that people who made -one kind of stone tool industry lived in a cave for a while. Then they -gave up the cave for some reason, and people with another industry -moved in. Then the first people came back--or at least somebody with -the same tool-making habits as the first people. Or maybe a third group -of tool-makers moved in. The people who had these different habits for -making their stone tools seem to have moved around a good deal. They no -doubt borrowed and exchanged tricks of the trade with each other. There -were no patent laws in those days. - -The extremely complicated interrelationships of the different habits -used by the tool-makers of this range of time are at last being -systematically studied. M. Fran�ois Bordes has developed a statistical -method of great importance for understanding these tool preparation -habits. - - -THE LEVALLOISIAN AND MOUSTERIAN - -The easiest Levalloisian tool to spot is a big flake tool. The trick -in making it was to fashion carefully a big chunk of stone (called -the Levalloisian �tortoise core,� because it resembles the shape of -a turtle-shell) and then to whack this in such a way that a large -flake flew off. This large thin flake, with sharp cutting edges, is -the finished Levalloisian tool. There were various other tools in a -Levalloisian industry, but this is the characteristic _Levalloisian_ -tool. - -There are several �typical Mousterian� stone tools. Different from -the tools of the Levalloisian type, these were made from �disc-like -cores.� There are medium-sized flake �side scrapers.� There are also -some small pointed tools and some small �hand axes.� The last of these -tool types is often a flake worked on both of the flat sides (that -is, bifacially). There are also pieces of flint worked into the form -of crude balls. The pointed tools may have been fixed on shafts to -make short jabbing spears; the round flint balls may have been used as -bolas. Actually, we don�t _know_ what either tool was used for. The -points and side scrapers are illustrated (pp. 64 and 66). - -[Illustration: LEVALLOIS FLAKE] - - -THE MIXING OF TRADITIONS - -Nowadays the archeologists are less and less sure of the importance -of any one specific tool type and name. Twenty years ago, they used -to speak simply of Acheulean or Levalloisian or Mousterian tools. -Now, more and more, _all_ of the tools from some one layer in a -cave are called an �industry,� which is given a mixed name. Thus we -have �Levalloiso-Mousterian,� and �Acheuleo-Levalloisian,� and even -�Acheuleo-Mousterian� (or �Mousterian of Acheulean tradition�). Bordes� -systematic work is beginning to clear up some of our confusion. - -The time of these late Acheuleo-Levalloiso-Mousterioid industries -is from perhaps as early as 100,000 years ago. It may have lasted -until well past 50,000 years ago. This was the time of the first -phase of the last great glaciation. It was also the time that the -classic group of Neanderthal men was living in Europe. A number of -the Neanderthal fossil finds come from these cave layers. Before the -different habits of tool preparation were understood it used to be -popular to say Neanderthal man was �Mousterian man.� I think this is -wrong. What used to be called �Mousterian� is now known to be a variety -of industries with tools of both core-biface and flake habits, and -so mixed that the word �Mousterian� used alone really doesn�t mean -anything. The Neanderthalers doubtless understood the tool preparation -habits by means of which Acheulean, Levalloisian and Mousterian type -tools were produced. We also have the more modern-like Mount Carmel -people, found in a cave layer of Palestine with tools almost entirely -in the flake tradition, called �Levalloiso-Mousterian,� and the -Font�chevade-Tayacian (p. 59). - -[Illustration: MOUSTERIAN POINT] - - -OTHER SUGGESTIONS OF LIFE IN THE EARLY CAVE LAYERS - -Except for the stone tools, what do we know of the way men lived in the -time range after 100,000 to perhaps 40,000 years ago or even later? -We know that in the area from Europe to Palestine, at least some of -the people (some of the time) lived in the fronts of caves and warmed -themselves over fires. In Europe, in the cave layers of these times, -we find the bones of different animals; the bones in the lowest layers -belong to animals that lived in a warm climate; above them are the -bones of those who could stand the cold, like the reindeer and mammoth. -Thus, the meat diet must have been changing, as the glacier crept -farther south. Shells and possibly fish bones have lasted in these -cave layers, but there is not a trace of the vegetable foods and the -nuts and berries and other wild fruits that must have been eaten when -they could be found. - -[Illustration: CHART SHOWING PRESENT UNDERSTANDING OF RELATIONSHIPS AND -SUCCESSION OF TOOL-PREPARATION TRADITIONS, INDUSTRIES, AND ASSEMBLAGES -OF WEST-CENTRAL EUROPE - -Wavy lines indicate transitions in industrial habits. These transitions -are not yet understood in detail. The glacial and climatic scheme shown -is the alpine one.] - -Bone tools have also been found from this period. Some are called -scrapers, and there are also long chisel-like leg-bone fragments -believed to have been used for skinning animals. Larger hunks of bone, -which seem to have served as anvils or chopping blocks, are fairly -common. - -Bits of mineral, used as coloring matter, have also been found. We -don�t know what the color was used for. - -[Illustration: MOUSTERIAN SIDE SCRAPER] - -There is a small but certain number of cases of intentional burials. -These burials have been found on the floors of the caves; in other -words, the people dug graves in the places where they lived. The holes -made for the graves were small. For this reason (or perhaps for some -other?) the bodies were in a curled-up or contracted position. Flint or -bone tools or pieces of meat seem to have been put in with some of the -bodies. In several cases, flat stones had been laid over the graves. - - -TOOLS FROM AFRICA AND ASIA ABOUT 100,000 YEARS AGO - -Professor Movius characterizes early prehistoric Africa as a continent -showing a variety of stone industries. Some of these industries were -purely local developments and some were practically identical with -industries found in Europe at the same time. From northwest Africa -to Capetown--excepting the tropical rain forest region of the west -center--tools of developed Acheulean, Levalloisian, and Mousterian -types have been recognized. Often they are named after African place -names. - -In east and south Africa lived people whose industries show a -development of the Levalloisian technique. Such industries are -called Stillbay. Another industry, developed on the basis of the -Acheulean technique, is called Fauresmith. From the northwest comes -an industry with tanged points and flake-blades; this is called the -Aterian. The tropical rain forest region contained people whose stone -tools apparently show adjustment to this peculiar environment; the -so-called Sangoan industry includes stone picks, adzes, core-bifaces -of specialized Acheulean type, and bifacial points which were probably -spearheads. - -In western Asia, even as far as the east coast of India, the tools of -the Eurafrican core-biface and flake tool traditions continued to be -used. But in the Far East, as we noted in the last chapter, men had -developed characteristic stone chopper and chopping tools. This tool -preparation tradition--basically a pebble tool tradition--lasted to the -very end of the Ice Age. - -When more intact open air sites such as that of an earlier time at -Olorgesailie, and more stratified cave sites are found and excavated -in Asia and Africa, we shall be able to get a more complete picture. -So far, our picture of the general cultural level of the Old World at -about 100,000 years ago--and soon afterwards--is best from Europe, but -it is still far from complete there, too. - - -CULTURE AT THE BEGINNING OF THE LAST GREAT GLACIAL PERIOD - -The few things we have found must indicate only a very small part -of the total activities of the people who lived at the time. All of -the things they made of wood and bark, of skins, of anything soft, -are gone. The fact that burials were made, at least in Europe and -Palestine, is pretty clear proof that the people had some notion of a -life after death. But what this notion really was, or what gods (if -any) men believed in, we cannot know. Dr. Movius has also reminded me -of the so-called bear cults--cases in which caves have been found which -contain the skulls of bears in apparently purposeful arrangement. This -might suggest some notion of hoarding up the spirits or the strength of -bears killed in the hunt. Probably the people lived in small groups, -as hunting and food-gathering seldom provide enough food for large -groups of people. These groups probably had some kind of leader or -�chief.� Very likely the rude beginnings of rules for community life -and politics, and even law, were being made. But what these were, we -do not know. We can only guess about such things, as we can only guess -about many others; for example, how the idea of a family must have been -growing, and how there may have been witch doctors who made beginnings -in medicine or in art, in the materials they gathered for their trade. - -The stone tools help us most. They have lasted, and we can find -them. As they come to us, from this cave or that, and from this -layer or that, the tool industries show a variety of combinations -of the different basic habits or traditions of tool preparation. -This seems only natural, as the groups of people must have been very -small. The mixtures and blendings of the habits used in making stone -tools must mean that there were also mixtures and blends in many of -the other ideas and beliefs of these small groups. And what this -probably means is that there was no one _culture_ of the time. It is -certainly unlikely that there were simply three cultures, �Acheulean,� -�Levalloisian,� and �Mousterian,� as has been thought in the past. -Rather there must have been a great variety of loosely related cultures -at about the same stage of advancement. We could say, too, that here -we really begin to see, for the first time, that remarkable ability -of men to adapt themselves to a variety of conditions. We shall see -this adaptive ability even more clearly as time goes on and the record -becomes more complete. - -Over how great an area did these loosely related cultures reach in -the time 75,000 to 45,000 or even as late as 35,000 years ago? We -have described stone tools made in one or another of the flake and -core-biface habits, for an enormous area. It covers all of Europe, all -of Africa, the Near East, and parts of India. It is perfectly possible -that the flake and core-biface habits lasted on after 35,000 years ago, -in some places outside of Europe. In northern Africa, for example, we -are certain that they did (see chart, p. 72). - -On the other hand, in the Far East (China, Burma, Java) and in northern -India, the tools of the old chopper-tool tradition were still being -made. Out there, we must assume, there was a different set of loosely -related cultures. At least, there was a different set of loosely -related habits for the making of tools. But the men who made them must -have looked much like the men of the West. Their tools were different, -but just as useful. - -As to what the men of the West looked like, I�ve already hinted at all -we know so far (pp. 29 ff.). The Neanderthalers were present at -the time. Some more modern-like men must have been about, too, since -fossils of them have turned up at Mount Carmel in Palestine, and at -Teshik Tash, in Trans-caspian Russia. It is still too soon to know -whether certain combinations of tools within industries were made -only by certain physical types of men. But since tools of both the -core-biface and the flake traditions, and their blends, turn up from -South Africa to England to India, it is most unlikely that only one -type of man used only one particular habit in the preparation of tools. -What seems perfectly clear is that men in Africa and men in India were -making just as good tools as the men who lived in western Europe. - - - - -EARLY MODERNS - -[Illustration] - - -From some time during the first inter-stadial of the last great -glaciation (say some time after about 40,000 years ago), we have -more accurate dates for the European-Mediterranean area and less -accurate ones for the rest of the Old World. This is probably -because the effects of the last glaciation have been studied in the -European-Mediterranean area more than they have been elsewhere. - - -A NEW TRADITION APPEARS - -Something new was probably beginning to happen in the -European-Mediterranean area about 40,000 years ago, though all the -rest of the Old World seems to have been going on as it had been. I -can�t be sure of this because the information we are using as a basis -for dates is very inaccurate for the areas outside of Europe and the -Mediterranean. - -We can at least make a guess. In Egypt and north Africa, men were still -using the old methods of making stone tools. This was especially true -of flake tools of the Levalloisian type, save that they were growing -smaller and smaller as time went on. But at the same time, a new -tradition was becoming popular in westernmost Asia and in Europe. This -was the blade-tool tradition. - - -BLADE TOOLS - -A stone blade is really just a long parallel-sided flake, as the -drawing shows. It has sharp cutting edges, and makes a very useful -knife. The real trick is to be able to make one. It is almost -impossible to make a blade out of any stone but flint or a natural -volcanic glass called obsidian. And even if you have flint or obsidian, -you first have to work up a special cone-shaped �blade-core,� from -which to whack off blades. - -[Illustration: PLAIN BLADE] - -You whack with a hammer stone against a bone or antler punch which is -directed at the proper place on the blade-core. The blade-core has to -be well supported or gripped while this is going on. To get a good -flint blade tool takes a great deal of know-how. - -Remember that a tradition in stone tools means no more than that some -particular way of making the tools got started and lasted a long time. -Men who made some tools in one tradition or set of habits would also -make other tools for different purposes by means of another tradition -or set of habits. It was even possible for the two sets of habits to -become combined. - - -THE EARLIEST BLADE TOOLS - -The oldest blade tools we have found were deep down in the layers of -the Mount Carmel caves, in Tabun Eb and Ea. Similar tools have been -found in equally early cave levels in Syria; their popularity there -seems to fluctuate a bit. Some more or less parallel-sided flakes are -known in the Levalloisian industry in France, but they are probably -no earlier than Tabun E. The Tabun blades are part of a local late -�Acheulean� industry, which is characterized by core-biface �hand -axes,� but which has many flake tools as well. Professor F. E. -Zeuner believes that this industry may be more than 120,000 years old; -actually its date has not yet been fixed, but it is very old--older -than the fossil finds of modern-like men in the same caves. - -[Illustration: SUCCESSION OF ICE AGE FLINT TYPES, INDUSTRIES, AND -ASSEMBLAGES, AND OF FOSSIL MEN, IN NORTHWESTERN EURAFRASIA] - -For some reason, the habit of making blades in Palestine and Syria was -interrupted. Blades only reappeared there at about the same time they -were first made in Europe, some time after 45,000 years ago; that is, -after the first phase of the last glaciation was ended. - -[Illustration: BACKED BLADE] - -We are not sure just where the earliest _persisting_ habits for the -production of blade tools developed. Impressed by the very early -momentary appearance of blades at Tabun on Mount Carmel, Professor -Dorothy A. Garrod first favored the Near East as a center of origin. -She spoke of �some as yet unidentified Asiatic centre,� which she -thought might be in the highlands of Iran or just beyond. But more -recent work has been done in this area, especially by Professor Coon, -and the blade tools do not seem to have an early appearance there. When -the blade tools reappear in the Syro-Palestinian area, they do so in -industries which also include Levalloiso-Mousterian flake tools. From -the point of view of form and workmanship, the blade tools themselves -are not so fine as those which seem to be making their appearance -in western Europe about the same time. There is a characteristic -Syro-Palestinian flake point, possibly a projectile tip, called the -Emiran, which is not known from Europe. The appearance of blade tools, -together with Levalloiso-Mousterian flakes, continues even after the -Emiran point has gone out of use. - -It seems clear that the production of blade tools did not immediately -swamp the set of older habits in Europe, too; the use of flake -tools also continued there. This was not so apparent to the older -archeologists, whose attention was focused on individual tool types. It -is not, in fact, impossible--although it is certainly not proved--that -the technique developed in the preparation of the Levalloisian tortoise -core (and the striking of the Levalloisian flake from it) might have -followed through to the conical core and punch technique for the -production of blades. Professor Garrod is much impressed with the speed -of change during the later phases of the last glaciation, and its -probable consequences. She speaks of �the greater number of industries -having enough individual character to be classified as distinct ... -since evolution now starts to outstrip diffusion.� Her �evolution� here -is of course an industrial evolution rather than a biological one. -Certainly the people of Europe had begun to make blade tools during -the warm spell after the first phase of the last glaciation. By about -40,000 years ago blades were well established. The bones of the blade -tool makers we�ve found so far indicate that anatomically modern men -had now certainly appeared. Unfortunately, only a few fossil men have -so far been found from the very beginning of the blade tool range in -Europe (or elsewhere). What I certainly shall _not_ tell you is that -conquering bands of fine, strong, anatomically modern men, armed with -superior blade tools, came sweeping out of the East to exterminate the -lowly Neanderthalers. Even if we don�t know exactly what happened, I�d -lay a good bet it wasn�t that simple. - -We do know a good deal about different blade industries in Europe. -Almost all of them come from cave layers. There is a great deal of -complication in what we find. The chart (p. 72) tries to simplify -this complication; in fact, it doubtless simplifies it too much. But -it may suggest all the complication of industries which is going -on at this time. You will note that the upper portion of my much -simpler chart (p. 65) covers the same material (in the section -marked �Various Blade-Tool Industries�). That chart is certainly too -simplified. - -You will realize that all this complication comes not only from -the fact that we are finding more material. It is due also to the -increasing ability of men to adapt themselves to a great variety of -situations. Their tools indicate this adaptiveness. We know there was -a good deal of climatic change at this time. The plants and animals -that men used for food were changing, too. The great variety of tools -and industries we now find reflect these changes and the ability of men -to keep up with the times. Now, for example, is the first time we are -sure that there are tools to _make_ other tools. They also show men�s -increasing ability to adapt themselves. - - -SPECIAL TYPES OF BLADE TOOLS - -The most useful tools that appear at this time were made from blades. - - 1. The �backed� blade. This is a knife made of a flint blade, with - one edge purposely blunted, probably to save the user�s fingers - from being cut. There are several shapes of backed blades (p. - 73). - - [Illustration: TWO BURINS] - - 2. The _burin_ or �graver.� The burin was the original chisel. Its - cutting edge is _transverse_, like a chisel�s. Some burins are - made like a screw-driver, save that burins are sharp. Others have - edges more like the blade of a chisel or a push plane, with - only one bevel. Burins were probably used to make slots in wood - and bone; that is, to make handles or shafts for other tools. - They must also be the tools with which much of the engraving on - bone (see p. 83) was done. There is a bewildering variety of - different kinds of burins. - -[Illustration: TANGED POINT] - - 3. The �tanged� point. These stone points were used to tip arrows or - light spears. They were made from blades, and they had a long tang - at the bottom where they were fixed to the shaft. At the place - where the tang met the main body of the stone point, there was - a marked �shoulder,� the beginnings of a barb. Such points had - either one or two shoulders. - -[Illustration: NOTCHED BLADE] - - 4. The �notched� or �strangulated� blade. Along with the points for - arrows or light spears must go a tool to prepare the arrow or - spear shaft. Today, such a tool would be called a �draw-knife� or - a �spoke-shave,� and this is what the notched blades probably are. - Our spoke-shaves have sharp straight cutting blades and really - �shave.� Notched blades of flint probably scraped rather than cut. - - 5. The �awl,� �drill,� or �borer.� These blade tools are worked out - to a spike-like point. They must have been used for making holes - in wood, bone, shell, skin, or other things. - -[Illustration: DRILL OR AWL] - - 6. The �end-scraper on a blade� is a tool with one or both ends - worked so as to give a good scraping edge. It could have been used - to hollow out wood or bone, scrape hides, remove bark from trees, - and a number of other things (p. 78). - -There is one very special type of flint tool, which is best known from -western Europe in an industry called the Solutrean. These tools were -usually made of blades, but the best examples are so carefully worked -on both sides (bifacially) that it is impossible to see the original -blade. This tool is - - 7. The �laurel leaf� point. Some of these tools were long and - dagger-like, and must have been used as knives or daggers. Others - were small, called �willow leaf,� and must have been mounted on - spear or arrow shafts. Another typical Solutrean tool is the - �shouldered� point. Both the �laurel leaf� and �shouldered� point - types are illustrated (see above and p. 79). - -[Illustration: END-SCRAPER ON A BLADE] - -[Illustration: LAUREL LEAF POINT] - -The industries characterized by tools in the blade tradition also -yield some flake and core tools. We will end this list with two types -of tools that appear at this time. The first is made of a flake; the -second is a core tool. - -[Illustration: SHOULDERED POINT] - - 8. The �keel-shaped round scraper� is usually small and quite round, - and has had chips removed up to a peak in the center. It is called - �keel-shaped� because it is supposed to look (when upside down) - like a section through a boat. Actually, it looks more like a tent - or an umbrella. Its outer edges are sharp all the way around, and - it was probably a general purpose scraping tool (see illustration, - p. 81). - - 9. The �keel-shaped nosed scraper� is a much larger and heavier tool - than the round scraper. It was made on a core with a flat bottom, - and has one nicely worked end or �nose.� Such tools are usually - large enough to be easily grasped, and probably were used like - push planes (see illustration, p. 81). - -[Illustration: KEEL-SHAPED ROUND SCRAPER] - -[Illustration: KEEL-SHAPED NOSED SCRAPER] - -The stone tools (usually made of flint) we have just listed are among -the most easily recognized blade tools, although they show differences -in detail at different times. There are also many other kinds. Not -all of these tools appear in any one industry at one time. Thus the -different industries shown in the chart (p. 72) each have only some -of the blade tools we�ve just listed, and also a few flake tools. Some -industries even have a few core tools. The particular types of blade -tools appearing in one cave layer or another, and the frequency of -appearance of the different types, tell which industry we have in each -layer. - - -OTHER KINDS OF TOOLS - -By this time in Europe--say from about 40,000 to about 10,000 years -ago--we begin to find other kinds of material too. Bone tools begin -to appear. There are knives, pins, needles with eyes, and little -double-pointed straight bars of bone that were probably fish-hooks. The -fish-line would have been fastened in the center of the bar; when the -fish swallowed the bait, the bar would have caught cross-wise in the -fish�s mouth. - -One quite special kind of bone tool is a long flat point for a light -spear. It has a deep notch cut up into the breadth of its base, and is -called a �split-based bone point� (p. 82). We know examples of bone -beads from these times, and of bone handles for flint tools. Pierced -teeth of some animals were worn as beads or pendants, but I am not sure -that elks� teeth were worn this early. There are even spool-shaped -�buttons� or toggles. - -[Illustration: SPLIT-BASED BONE POINT] - -[Illustration: SPEAR-THROWER] - -[Illustration: BONE HARPOON] - -Antler came into use for tools, especially in central and western -Europe. We do not know the use of one particular antler tool that -has a large hole bored in one end. One suggestion is that it was -a thong-stropper used to strop or work up hide thongs (see -illustration, below); another suggestion is that it was an arrow-shaft -straightener. - -Another interesting tool, usually of antler, is the spear-thrower, -which is little more than a stick with a notch or hook on one end. -The hook fits into the butt end of the spear, and the length of the -spear-thrower allows you to put much more power into the throw (p. -82). It works on pretty much the same principle as the sling. - -Very fancy harpoons of antler were also made in the latter half of -the period in western Europe. These harpoons had barbs on one or both -sides and a base which would slip out of the shaft (p. 82). Some have -engraved decoration. - - -THE BEGINNING OF ART - -[Illustration: THONG-STROPPER] - -In western Europe, at least, the period saw the beginning of several -kinds of art work. It is handy to break the art down into two great -groups: the movable art, and the cave paintings and sculpture. The -movable art group includes the scratchings, engravings, and modeling -which decorate tools and weapons. Knives, stroppers, spear-throwers, -harpoons, and sometimes just plain fragments of bone or antler are -often carved. There is also a group of large flat pebbles which seem -almost to have served as sketch blocks. The surfaces of these various -objects may show animals, or rather abstract floral designs, or -geometric designs. - -[Illustration: �VENUS� FIGURINE FROM WILLENDORF] - -Some of the movable art is not done on tools. The most remarkable -examples of this class are little figures of women. These women seem to -be pregnant, and their most female characteristics are much emphasized. -It is thought that these �Venus� or �Mother-goddess� figurines may be -meant to show the great forces of nature--fertility and the birth of -life. - - -CAVE PAINTINGS - -In the paintings on walls and ceilings of caves we have some examples -that compare with the best art of any time. The subjects were usually -animals, the great cold-weather beasts of the end of the Ice Age: the -mammoth, the wooly rhinoceros, the bison, the reindeer, the wild horse, -the bear, the wild boar, and wild cattle. As in the movable art, there -are different styles in the cave art. The really great cave art is -pretty well restricted to southern France and Cantabrian (northwestern) -Spain. - -There are several interesting things about the �Franco-Cantabrian� cave -art. It was done deep down in the darkest and most dangerous parts of -the caves, although the men lived only in the openings of caves. If you -think what they must have had for lights--crude lamps of hollowed stone -have been found, which must have burned some kind of oil or grease, -with a matted hair or fiber wick--and of the animals that may have -lurked in the caves, you�ll understand the part about danger. Then, -too, we�re sure the pictures these people painted were not simply to be -looked at and admired, for they painted one picture right over other -pictures which had been done earlier. Clearly, it was the _act_ of -_painting_ that counted. The painter had to go way down into the most -mysterious depths of the earth and create an animal in paint. Possibly -he believed that by doing this he gained some sort of magic power over -the same kind of animal when he hunted it in the open air. It certainly -doesn�t look as if he cared very much about the picture he painted--as -a finished product to be admired--for he or somebody else soon went -down and painted another animal right over the one he had done. - -The cave art of the Franco-Cantabrian style is one of the great -artistic achievements of all time. The subjects drawn are almost always -the larger animals of the time: the bison, wild cattle and horses, the -wooly rhinoceros, the mammoth, the wild boar, and the bear. In some of -the best examples, the beasts are drawn in full color and the paintings -are remarkably alive and charged with energy. They come from the hands -of men who knew the great animals well--knew the feel of their fur, the -tremendous drive of their muscles, and the danger one faced when he -hunted them. - -Another artistic style has been found in eastern Spain. It includes -lively drawings, often of people hunting with bow and arrow. The East -Spanish art is found on open rock faces and in rock-shelters. It is -less spectacular and apparently more recent than the Franco-Cantabrian -cave art. - - -LIFE AT THE END OF THE ICE AGE IN EUROPE - -Life in these times was probably as good as a hunter could expect it -to be. Game and fish seem to have been plentiful; berries and wild -fruits probably were, too. From France to Russia, great pits or -piles of animal bones have been found. Some of this killing was done -as our Plains Indians killed the buffalo--by stampeding them over -steep river banks or cliffs. There were also good tools for hunting, -however. In western Europe, people lived in the openings of caves and -under overhanging rocks. On the great plains of eastern Europe, very -crude huts were being built, half underground. The first part of this -time must have been cold, for it was the middle and end phases of the -last great glaciation. Northern Europe from Scotland to Scandinavia, -northern Germany and Russia, and also the higher mountains to the -south, were certainly covered with ice. But people had fire, and the -needles and tools that were used for scraping hides must mean that they -wore clothing. - -It is clear that men were thinking of a great variety of things beside -the tools that helped them get food and shelter. Such burials as we -find have more grave-gifts than before. Beads and ornaments and often -flint, bone, or antler tools are included in the grave, and sometimes -the body is sprinkled with red ochre. Red is the color of blood, which -means life, and of fire, which means heat. Professor Childe wonders if -the red ochre was a pathetic attempt at magic--to give back to the body -the heat that had gone from it. But pathetic or not, it is sure proof -that these people were already moved by death as men still are moved by -it. - -Their art is another example of the direction the human mind was -taking. And when I say human, I mean it in the fullest sense, for this -is the time in which fully modern man has appeared. On page 34, we -spoke of the Cro-Magnon group and of the Combe Capelle-Br�nn group of -Caucasoids and of the Grimaldi �Negroids,� who are no longer believed -to be Negroid. I doubt that any one of these groups produced most of -the achievements of the times. It�s not yet absolutely sure which -particular group produced the great cave art. The artists were almost -certainly a blend of several (no doubt already mixed) groups. The pair -of Grimaldians were buried in a grave with a sprinkling of red ochre, -and were provided with shell beads and ornaments and with some blade -tools of flint. Regardless of the different names once given them by -the human paleontologists, each of these groups seems to have shared -equally in the cultural achievements of the times, for all that the -archeologists can say. - - -MICROLITHS - -One peculiar set of tools seems to serve as a marker for the very last -phase of the Ice Age in southwestern Europe. This tool-making habit is -also found about the shore of the Mediterranean basin, and it moved -into northern Europe as the last glaciation pulled northward. People -began making blade tools of very small size. They learned how to chip -very slender and tiny blades from a prepared core. Then they made these -little blades into tiny triangles, half-moons (�lunates�), trapezoids, -and several other geometric forms. These little tools are called -�microliths.� They are so small that most of them must have been fixed -in handles or shafts. - -[Illustration: MICROLITHS - - BLADE FRAGMENT - BURIN - LUNATE - TRAPEZOID - SCALENE TRIANGLE - ARROWHEAD] - -We have found several examples of microliths mounted in shafts. In -northern Europe, where their use soon spread, the microlithic triangles -or lunates were set in rows down each side of a bone or wood point. -One corner of each little triangle stuck out, and the whole thing -made a fine barbed harpoon. In historic times in Egypt, geometric -trapezoidal microliths were still in use as arrowheads. They were -fastened--broad end out--on the end of an arrow shaft. It seems queer -to give an arrow a point shaped like a �T.� Actually, the little points -were very sharp, and must have pierced the hides of animals very -easily. We also think that the broader cutting edge of the point may -have caused more bleeding than a pointed arrowhead would. In hunting -fleet-footed animals like the gazelle, which might run for miles after -being shot with an arrow, it was an advantage to cause as much bleeding -as possible, for the animal would drop sooner. - -We are not really sure where the microliths were first invented. There -is some evidence that they appear early in the Near East. Their use -was very common in northwest Africa but this came later. The microlith -makers who reached south Russia and central Europe possibly moved up -out of the Near East. Or it may have been the other way around; we -simply don�t yet know. - -Remember that the microliths we are talking about here were made from -carefully prepared little blades, and are often geometric in outline. -Each microlithic industry proper was made up, in good part, of such -tiny blade tools. But there were also some normal-sized blade tools and -even some flake scrapers, in most microlithic industries. I emphasize -this bladelet and the geometric character of the microlithic industries -of the western Old World, since there has sometimes been confusion in -the matter. Sometimes small flake chips, utilized as minute pointed -tools, have been called �microliths.� They may be _microlithic_ in size -in terms of the general meaning of the word, but they do not seem to -belong to the sub-tradition of the blade tool preparation habits which -we have been discussing here. - - -LATER BLADE-TOOL INDUSTRIES OF THE NEAR EAST AND AFRICA - -The blade-tool industries of normal size we talked about earlier spread -from Europe to central Siberia. We noted that blade tools were made -in western Asia too, and early, although Professor Garrod is no longer -sure that the whole tradition originated in the Near East. If you look -again at my chart (p. 72) you will note that in western Asia I list -some of the names of the western European industries, but with the -qualification �-like� (for example, �Gravettian-like�). The western -Asiatic blade-tool industries do vaguely recall some aspects of those -of western Europe, but we would probably be better off if we used -completely local names for them. The �Emiran� of my chart is such an -example; its industry includes a long spike-like blade point which has -no western European counterpart. - -When we last spoke of Africa (p. 66), I told you that stone tools -there were continuing in the Levalloisian flake tradition, and were -becoming smaller. At some time during this process, two new tool -types appeared in northern Africa: one was the Aterian point with -a tang (p. 67), and the other was a sort of �laurel leaf� point, -called the �Sbaikian.� These two tool types were both produced from -flakes. The Sbaikian points, especially, are roughly similar to some -of the Solutrean points of Europe. It has been suggested that both the -Sbaikian and Aterian points may be seen on their way to France through -their appearance in the Spanish cave deposits of Parpallo, but there is -also a rival �pre-Solutrean� in central Europe. We still do not know -whether there was any contact between the makers of these north African -tools and the Solutrean tool-makers. What does seem clear is that the -blade-tool tradition itself arrived late in northern Africa. - - -NETHER AFRICA - -Blade tools and �laurel leaf� points and some other probably late -stone tool types also appear in central and southern Africa. There -are geometric microliths on bladelets and even some coarse pottery in -east Africa. There is as yet no good way of telling just where these -items belong in time; in broad geological terms they are �late.� -Some people have guessed that they are as early as similar European -and Near Eastern examples, but I doubt it. The makers of small-sized -Levalloisian flake tools occupied much of Africa until very late in -time. - - -THE FAR EAST - -India and the Far East still seem to be going their own way. In India, -some blade tools have been found. These are not well dated, save that -we believe they must be post-Pleistocene. In the Far East it looks as -if the old chopper-tool tradition was still continuing. For Burma, -Dr. Movius feels this is fairly certain; for China he feels even more -certain. Actually, we know very little about the Far East at about the -time of the last glaciation. This is a shame, too, as you will soon -agree. - - -THE NEW WORLD BECOMES INHABITED - -At some time toward the end of the last great glaciation--almost -certainly after 20,000 years ago--people began to move over Bering -Strait, from Asia into America. As you know, the American Indians have -been assumed to be basically Mongoloids. New studies of blood group -types make this somewhat uncertain, but there is no doubt that the -ancestors of the American Indians came from Asia. - -The stone-tool traditions of Europe, Africa, the Near and Middle East, -and central Siberia, did _not_ move into the New World. With only a -very few special or late exceptions, there are _no_ core-bifaces, -flakes, or blade tools of the Old World. Such things just haven�t been -found here. - -This is why I say it�s a shame we don�t know more of the end of the -chopper-tool tradition in the Far East. According to Weidenreich, -the Mongoloids were in the Far East long before the end of the last -glaciation. If the genetics of the blood group types do demand a -non-Mongoloid ancestry for the American Indians, who else may have been -in the Far East 25,000 years ago? We know a little about the habits -for making stone tools which these first people brought with them, -and these habits don�t conform with those of the western Old World. -We�d better keep our eyes open for whatever happened to the end of -the chopper-tool tradition in northern China; already there are hints -that it lasted late there. Also we should watch future excavations -in eastern Siberia. Perhaps we shall find the chopper-tool tradition -spreading up that far. - - -THE NEW ERA - -Perhaps it comes in part from the way I read the evidence and perhaps -in part it is only intuition, but I feel that the materials of this -chapter suggest a new era in the ways of life. Before about 40,000 -years ago, people simply �gathered� their food, wandering over large -areas to scavenge or to hunt in a simple sort of way. But here we -have seen them �settling-in� more, perhaps restricting themselves in -their wanderings and adapting themselves to a given locality in more -intensive ways. This intensification might be suggested by the word -�collecting.� The ways of life we described in the earlier chapters -were �food-gathering� ways, but now an era of �food-collecting� has -begun. We shall see further intensifications of it in the next chapter. - - - - -End and PRELUDE - -[Illustration] - - -Up to the end of the last glaciation, we prehistorians have a -relatively comfortable time schedule. The farther back we go the less -exact we can be about time and details. Elbow-room of five, ten, -even fifty or more thousands of years becomes available for us to -maneuver in as we work backward in time. But now our story has come -forward to the point where more exact methods of dating are at hand. -The radioactive carbon method reaches back into the span of the last -glaciation. There are other methods, developed by the geologists and -paleobotanists, which supplement and extend the usefulness of the -radioactive carbon dates. And, happily, as our means of being more -exact increases, our story grows more exciting. There are also more -details of culture for us to deal with, which add to the interest. - - -CHANGES AT THE END OF THE ICE AGE - -The last great glaciation of the Ice Age was a two-part affair, with a -sub-phase at the end of the second part. In Europe the last sub-phase -of this glaciation commenced somewhere around 15,000 years ago. Then -the glaciers began to melt back, for the last time. Remember that -Professor Antevs (p. 19) isn�t sure the Ice Age is over yet! This -melting sometimes went by fits and starts, and the weather wasn�t -always changing for the better; but there was at least one time when -European weather was even better than it is now. - -The melting back of the glaciers and the weather fluctuations caused -other changes, too. We know a fair amount about these changes in -Europe. In an earlier chapter, we said that the whole Ice Age was a -matter of continual change over long periods of time. As the last -glaciers began to melt back some interesting things happened to mankind. - -In Europe, along with the melting of the last glaciers, geography -itself was changing. Britain and Ireland had certainly become islands -by 5000 B.C. The Baltic was sometimes a salt sea, sometimes a large -fresh-water lake. Forests began to grow where the glaciers had been, -and in what had once been the cold tundra areas in front of the -glaciers. The great cold-weather animals--the mammoth and the wooly -rhinoceros--retreated northward and finally died out. It is probable -that the efficient hunting of the earlier people of 20,000 or 25,000 -to about 12,000 years ago had helped this process along (see p. 86). -Europeans, especially those of the post-glacial period, had to keep -changing to keep up with the times. - -The archeological materials for the time from 10,000 to 6000 B.C. seem -simpler than those of the previous five thousand years. The great cave -art of France and Spain had gone; so had the fine carving in bone and -antler. Smaller, speedier animals were moving into the new forests. New -ways of hunting them, or ways of getting other food, had to be found. -Hence, new tools and weapons were necessary. Some of the people who -moved into northern Germany were successful reindeer hunters. Then the -reindeer moved off to the north, and again new sources of food had to -be found. - - -THE READJUSTMENTS COMPLETED IN EUROPE - -After a few thousand years, things began to look better. Or at least -we can say this: By about 6000 B.C. we again get hotter archeological -materials. The best of these come from the north European area: -Britain, Belgium, Holland, Denmark, north Germany, southern Norway and -Sweden. Much of this north European material comes from bogs and swamps -where it had become water-logged and has kept very well. Thus we have -much more complete _assemblages_[4] than for any time earlier. - - [4] �Assemblage� is a useful word when there are different kinds of - archeological materials belonging together, from one area and of - one time. An assemblage is made up of a number of �industries� - (that is, all the tools in chipped stone, all the tools in - bone, all the tools in wood, the traces of houses, etc.) and - everything else that manages to survive, such as the art, the - burials, the bones of the animals used as food, and the traces - of plant foods; in fact, everything that has been left to us - and can be used to help reconstruct the lives of the people to - whom it once belonged. Our own present-day �assemblage� would be - the sum total of all the objects in our mail-order catalogues, - department stores and supply houses of every sort, our churches, - our art galleries and other buildings, together with our roads, - canals, dams, irrigation ditches, and any other traces we might - leave of ourselves, from graves to garbage dumps. Not everything - would last, so that an archeologist digging us up--say 2,000 - years from now--would find only the most durable items in our - assemblage. - -The best known of these assemblages is the _Maglemosian_, named after a -great Danish peat-swamp where much has been found. - -[Illustration: SKETCH OF MAGLEMOSIAN ASSEMBLAGE - - CHIPPED STONE - HEMP - GROUND STONE - BONE AND ANTLER - WOOD] - -In the Maglemosian assemblage the flint industry was still very -important. Blade tools, tanged arrow points, and burins were still -made, but there were also axes for cutting the trees in the new -forests. Moreover, the tiny microlithic blades, in a variety of -geometric forms, are also found. Thus, a specialized tradition that -possibly began east of the Mediterranean had reached northern Europe. -There was also a ground stone industry; some axes and club-heads were -made by grinding and polishing rather than by chipping. The industries -in bone and antler show a great variety of tools: axes, fish-hooks, -fish spears, handles and hafts for other tools, harpoons, and clubs. -A remarkable industry in wood has been preserved. Paddles, sled -runners, handles for tools, and bark floats for fish-nets have been -found. There are even fish-nets made of plant fibers. Canoes of some -kind were no doubt made. Bone and antler tools were decorated with -simple patterns, and amber was collected. Wooden bows and arrows are -found. - -It seems likely that the Maglemosian bog finds are remains of summer -camps, and that in winter the people moved to higher and drier regions. -Childe calls them the �Forest folk�; they probably lived much the -same sort of life as did our pre-agricultural Indians of the north -central states. They hunted small game or deer; they did a great deal -of fishing; they collected what plant food they could find. In fact, -their assemblage shows us again that remarkable ability of men to adapt -themselves to change. They had succeeded in domesticating the dog; he -was still a very wolf-like dog, but his long association with mankind -had now begun. Professor Coon believes that these people were direct -descendants of the men of the glacial age and that they had much the -same appearance. He believes that most of the Ice Age survivors still -extant are living today in the northwestern European area. - - -SOUTH AND CENTRAL EUROPE PERHAPS AS READJUSTED AS THE NORTH - -There is always one trouble with things that come from areas where -preservation is exceptionally good: The very quantity of materials in -such an assemblage tends to make things from other areas look poor -and simple, although they may not have been so originally at all. The -assemblages of the people who lived to the south of the Maglemosian -area may also have been quite large and varied; but, unfortunately, -relatively little of the southern assemblages has lasted. The -water-logged sites of the Maglemosian area preserved a great deal -more. Hence the Maglemosian itself _looks_ quite advanced to us, when -we compare it with the few things that have happened to last in other -areas. If we could go back and wander over the Europe of eight thousand -years ago, we would probably find that the peoples of France, central -Europe, and south central Russia were just as advanced as those of the -north European-Baltic belt. - -South of the north European belt the hunting-food-collecting peoples -were living on as best they could during this time. One interesting -group, which seems to have kept to the regions of sandy soil and scrub -forest, made great quantities of geometric microliths. These are the -materials called _Tardenoisian_. The materials of the �Forest folk� of -France and central Europe generally are called _Azilian_; Dr. Movius -believes the term might best be restricted to the area south of the -Loire River. - - -HOW MUCH REAL CHANGE WAS THERE? - -You can see that no really _basic_ change in the way of life has yet -been described. Childe sees the problem that faced the Europeans of -10,000 to 3000 B.C. as a problem in readaptation to the post-glacial -forest environment. By 6000 B.C. some quite successful solutions of -the problem--like the Maglemosian--had been made. The upsets that came -with the melting of the last ice gradually brought about all sorts of -changes in the tools and food-getting habits, but the people themselves -were still just as much simple hunters, fishers, and food-collectors as -they had been in 25,000 B.C. It could be said that they changed just -enough so that they would not have to change. But there is a bit more -to it than this. - -Professor Mathiassen of Copenhagen, who knows the archeological remains -of this time very well, poses a question. He speaks of the material -as being neither rich nor progressive, in fact �rather stagnant,� but -he goes on to add that the people had a certain �receptiveness� and -were able to adapt themselves quickly when the next change did come. -My own understanding of the situation is that the �Forest folk� made -nothing as spectacular as had the producers of the earlier Magdalenian -assemblage and the Franco-Cantabrian art. On the other hand, they -_seem_ to have been making many more different kinds of tools for many -more different kinds of tasks than had their Ice Age forerunners. I -emphasize �seem� because the preservation in the Maglemosian bogs -is very complete; certainly we cannot list anywhere near as many -different things for earlier times as we did for the Maglemosians -(p. 94). I believe this experimentation with all kinds of new tools -and gadgets, this intensification of adaptiveness (p. 91), this -�receptiveness,� even if it is still only pointed toward hunting, -fishing, and food-collecting, is an important thing. - -Remember that the only marker we have handy for the _beginning_ of -this tendency toward �receptiveness� and experimentation is the -little microlithic blade tools of various geometric forms. These, we -saw, began before the last ice had melted away, and they lasted on -in use for a very long time. I wish there were a better marker than -the microliths but I do not know of one. Remember, too, that as yet -we can only use the microliths as a marker in Europe and about the -Mediterranean. - - -CHANGES IN OTHER AREAS? - -All this last section was about Europe. How about the rest of the world -when the last glaciers were melting away? - -We simply don�t know much about this particular time in other parts -of the world except in Europe, the Mediterranean basin and the Middle -East. People were certainly continuing to move into the New World by -way of Siberia and the Bering Strait about this time. But for the -greater part of Africa and Asia, we do not know exactly what was -happening. Some day, we shall no doubt find out; today we are without -clear information. - - -REAL CHANGE AND PRELUDE IN THE NEAR EAST - -The appearance of the microliths and the developments made by the -�Forest folk� of northwestern Europe also mark an end. They show us -the terminal phase of the old food-collecting way of life. It grows -increasingly clear that at about the same time that the Maglemosian and -other �Forest folk� were adapting themselves to hunting, fishing, and -collecting in new ways to fit the post-glacial environment, something -completely new was being made ready in western Asia. - -Unfortunately, we do not have as much understanding of the climate and -environment of the late Ice Age in western Asia as we have for most -of Europe. Probably the weather was never so violent or life quite -so rugged as it was in northern Europe. We know that the microliths -made their appearance in western Asia at least by 10,000 B.C. and -possibly earlier, marking the beginning of the terminal phase of -food-collecting. Then, gradually, we begin to see the build-up towards -the first _basic change_ in human life. - -This change amounted to a revolution just as important as the -Industrial Revolution. In it, men first learned to domesticate -plants and animals. They began _producing_ their food instead of -simply gathering or collecting it. When their food-production -became reasonably effective, people could and did settle down in -village-farming communities. With the appearance of the little farming -villages, a new way of life was actually under way. Professor Childe -has good reason to speak of the �food-producing revolution,� for it was -indeed a revolution. - - -QUESTIONS ABOUT CAUSE - -We do not yet know _how_ and _why_ this great revolution took place. We -are only just beginning to put the questions properly. I suspect the -answers will concern some delicate and subtle interplay between man and -nature. Clearly, both the level of culture and the natural condition of -the environment must have been ready for the great change, before the -change itself could come about. - -It is going to take years of co-operative field work by both -archeologists and the natural scientists who are most helpful to them -before the _how_ and _why_ answers begin to appear. Anthropologically -trained archeologists are fascinated with the cultures of men in times -of great change. About ten or twelve thousand years ago, the general -level of culture in many parts of the world seems to have been ready -for change. In northwestern Europe, we saw that cultures �changed -just enough so that they would not have to change.� We linked this to -environmental changes with the coming of post-glacial times. - -In western Asia, we archeologists can prove that the food-producing -revolution actually took place. We can see _the_ important consequence -of effective domestication of plants and animals in the appearance of -the settled village-farming community. And within the village-farming -community was the seed of civilization. The way in which effective -domestication of plants and animals came about, however, must also be -linked closely with the natural environment. Thus the archeologists -will not solve the _how_ and _why_ questions alone--they will need the -help of interested natural scientists in the field itself. - - -PRECONDITIONS FOR THE REVOLUTION - -Especially at this point in our story, we must remember how culture and -environment go hand in hand. Neither plants nor animals domesticate -themselves; men domesticate them. Furthermore, men usually domesticate -only those plants and animals which are useful. There is a good -question here: What is cultural usefulness? But I shall side-step it to -save time. Men cannot domesticate plants and animals that do not exist -in the environment where the men live. Also, there are certainly some -animals and probably some plants that resist domestication, although -they might be useful. - -This brings me back again to the point that _both_ the level of culture -and the natural condition of the environment--with the proper plants -and animals in it--must have been ready before domestication could -have happened. But this is precondition, not cause. Why did effective -food-production happen first in the Near East? Why did it happen -independently in the New World slightly later? Why also in the Far -East? Why did it happen at all? Why are all human beings not still -living as the Maglemosians did? These are the questions we still have -to face. - - -CULTURAL �RECEPTIVENESS� AND PROMISING ENVIRONMENTS - -Until the archeologists and the natural scientists--botanists, -geologists, zoologists, and general ecologists--have spent many more -years on the problem, we shall not have full _how_ and _why_ answers. I -do think, however, that we are beginning to understand what to look for. - -We shall have to learn much more of what makes the cultures of men -�receptive� and experimental. Did change in the environment alone -force it? Was it simply a case of Professor Toynbee�s �challenge and -response?� I cannot believe the answer is quite that simple. Were it -so simple, we should want to know why the change hadn�t come earlier, -along with earlier environmental changes. We shall not know the answer, -however, until we have excavated the traces of many more cultures of -the time in question. We shall doubtless also have to learn more about, -and think imaginatively about, the simpler cultures still left today. -The �mechanics� of culture in general will be bound to interest us. - -It will also be necessary to learn much more of the environments of -10,000 to 12,000 years ago. In which regions of the world were the -natural conditions most promising? Did this promise include plants and -animals which could be domesticated, or did it only offer new ways of -food-collecting? There is much work to do on this problem, but we are -beginning to get some general hints. - -Before I begin to detail the hints we now have from western Asia, I -want to do two things. First, I shall tell you of an old theory as to -how food-production might have appeared. Second, I will bother you with -some definitions which should help us in our thinking as the story goes -on. - - -AN OLD THEORY AS TO THE CAUSE OF THE REVOLUTION - -The idea that change would result, if the balance between nature -and culture became upset, is of course not a new one. For at least -twenty-five years, there has been a general theory as to _how_ the -food-producing revolution happened. This theory depends directly on the -idea of natural change in the environment. - -The five thousand years following about 10,000 B.C. must have been -very difficult ones, the theory begins. These were the years when -the most marked melting of the last glaciers was going on. While the -glaciers were in place, the climate to the south of them must have been -different from the climate in those areas today. You have no doubt read -that people once lived in regions now covered by the Sahara Desert. -This is true; just when is not entirely clear. The theory is that -during the time of the glaciers, there was a broad belt of rain winds -south of the glaciers. These rain winds would have kept north Africa, -the Nile Valley, and the Middle East green and fertile. But when the -glaciers melted back to the north, the belt of rain winds is supposed -to have moved north too. Then the people living south and east of the -Mediterranean would have found that their water supply was drying up, -that the animals they hunted were dying or moving away, and that the -plant foods they collected were dried up and scarce. - -According to the theory, all this would have been true except in the -valleys of rivers and in oases in the growing deserts. Here, in the -only places where water was left, the men and animals and plants would -have clustered. They would have been forced to live close to one -another, in order to live at all. Presently the men would have seen -that some animals were more useful or made better food than others, -and so they would have begun to protect these animals from their -natural enemies. The men would also have been forced to try new plant -foods--foods which possibly had to be prepared before they could be -eaten. Thus, with trials and errors, but by being forced to live close -to plants and animals, men would have learned to domesticate them. - - -THE OLD THEORY TOO SIMPLE FOR THE FACTS - -This theory was set up before we really knew anything in detail about -the later prehistory of the Near and Middle East. We now know that -the facts which have been found don�t fit the old theory at all well. -Also, I have yet to find an American meteorologist who feels that we -know enough about the changes in the weather pattern to say that it can -have been so simple and direct. And, of course, the glacial ice which -began melting after 12,000 years ago was merely the last sub-phase of -the last great glaciation. There had also been three earlier periods -of great alpine glaciers, and long periods of warm weather in between. -If the rain belt moved north as the glaciers melted for the last time, -it must have moved in the same direction in earlier times. Thus, the -forced neighborliness of men, plants, and animals in river valleys and -oases must also have happened earlier. Why didn�t domestication happen -earlier, then? - -Furthermore, it does not seem to be in the oases and river valleys -that we have our first or only traces of either food-production -or the earliest farming villages. These traces are also in the -hill-flanks of the mountains of western Asia. Our earliest sites of the -village-farmers do not seem to indicate a greatly different climate -from that which the same region now shows. In fact, everything we now -know suggests that the old theory was just too simple an explanation to -have been the true one. The only reason I mention it--beyond correcting -the ideas you may get in the general texts--is that it illustrates the -kind of thinking we shall have to do, even if it is doubtless wrong in -detail. - -We archeologists shall have to depend much more than we ever have on -the natural scientists who can really help us. I can tell you this from -experience. I had the great good fortune to have on my expedition staff -in Iraq in 1954-55, a geologist, a botanist, and a zoologist. Their -studies added whole new bands of color to my spectrum of thinking about -_how_ and _why_ the revolution took place and how the village-farming -community began. But it was only a beginning; as I said earlier, we are -just now learning to ask the proper questions. - - -ABOUT STAGES AND ERAS - -Now come some definitions, so I may describe my material more easily. -Archeologists have always loved to make divisions and subdivisions -within the long range of materials which they have found. They often -disagree violently about which particular assemblage of material -goes into which subdivision, about what the subdivisions should be -named, about what the subdivisions really mean culturally. Some -archeologists, probably through habit, favor an old scheme of Grecized -names for the subdivisions: paleolithic, mesolithic, neolithic. I -refuse to use these words myself. They have meant too many different -things to too many different people and have tended to hide some pretty -fuzzy thinking. Probably you haven�t even noticed my own scheme of -subdivision up to now, but I�d better tell you in general what it is. - -I think of the earliest great group of archeological materials, from -which we can deduce only a food-gathering way of culture, as the -_food-gathering stage_. I say �stage� rather than �age,� because it -is not quite over yet; there are still a few primitive people in -out-of-the-way parts of the world who remain in the _food-gathering -stage_. In fact, Professor Julian Steward would probably prefer to call -it a food-gathering _level_ of existence, rather than a stage. This -would be perfectly acceptable to me. I also tend to find myself using -_collecting_, rather than _gathering_, for the more recent aspects or -era of the stage, as the word �collecting� appears to have more sense -of purposefulness and specialization than does �gathering� (see p. -91). - -Now, while I think we could make several possible subdivisions of the -food-gathering stage--I call my subdivisions of stages _eras_[5]--I -believe the only one which means much to us here is the last or -_terminal sub-era of food-collecting_ of the whole food-gathering -stage. The microliths seem to mark its approach in the northwestern -part of the Old World. It is really shown best in the Old World by -the materials of the �Forest folk,� the cultural adaptation to the -post-glacial environment in northwestern Europe. We talked about -the �Forest folk� at the beginning of this chapter, and I used the -Maglemosian assemblage of Denmark as an example. - - [5] It is difficult to find words which have a sequence or gradation - of meaning with respect to both development and a range of time - in the past, or with a range of time from somewhere in the past - which is perhaps not yet ended. One standard Webster definition - of _stage_ is: �One of the steps into which the material - development of man ... is divided.� I cannot find any dictionary - definition that suggests which of the words, _stage_ or _era_, - has the meaning of a longer span of time. Therefore, I have - chosen to let my eras be shorter, and to subdivide my stages - into eras. Webster gives _era_ as: �A signal stage of history, - an epoch.� When I want to subdivide my eras, I find myself using - _sub-eras_. Thus I speak of the _eras_ within a _stage_ and of - the _sub-eras_ within an _era_; that is, I do so when I feel - that I really have to, and when the evidence is clear enough to - allow it. - -The food-producing revolution ushers in the _food-producing stage_. -This stage began to be replaced by the _industrial stage_ only about -two hundred years ago. Now notice that my stage divisions are in terms -of technology and economics. We must think sharply to be sure that the -subdivisions of the stages, the eras, are in the same terms. This does -not mean that I think technology and economics are the only important -realms of culture. It is rather that for most of prehistoric time the -materials left to the archeologists tend to limit our deductions to -technology and economics. - -I�m so soon out of my competence, as conventional ancient history -begins, that I shall only suggest the earlier eras of the -food-producing stage to you. This book is about prehistory, and I�m not -a universal historian. - - -THE TWO EARLIEST ERAS OF THE FOOD-PRODUCING STAGE - -The food-producing stage seems to appear in western Asia with really -revolutionary suddenness. It is seen by the relative speed with which -the traces of new crafts appear in the earliest village-farming -community sites we�ve dug. It is seen by the spread and multiplication -of these sites themselves, and the remarkable growth in human -population we deduce from this increase in sites. We�ll look at some -of these sites and the archeological traces they yield in the next -chapter. When such village sites begin to appear, I believe we are in -the _era of the primary village-farming community_. I also believe this -is the second era of the food-producing stage. - -The first era of the food-producing stage, I believe, was an _era of -incipient cultivation and animal domestication_. I keep saying �I -believe� because the actual evidence for this earlier era is so slight -that one has to set it up mainly by playing a hunch for it. The reason -for playing the hunch goes about as follows. - -One thing we seem to be able to see, in the food-collecting era in -general, is a tendency for people to begin to settle down. This -settling down seemed to become further intensified in the terminal -era. How this is connected with Professor Mathiassen�s �receptiveness� -and the tendency to be experimental, we do not exactly know. The -evidence from the New World comes into play here as well as that from -the Old World. With this settling down in one place, the people of the -terminal era--especially the �Forest folk� whom we know best--began -making a great variety of new things. I remarked about this earlier in -the chapter. Dr. Robert M. Adams is of the opinion that this atmosphere -of experimentation with new tools--with new ways of collecting food--is -the kind of atmosphere in which one might expect trials at planting -and at animal domestication to have been made. We first begin to find -traces of more permanent life in outdoor camp sites, although caves -were still inhabited at the beginning of the terminal era. It is not -surprising at all that the �Forest folk� had already domesticated the -dog. In this sense, the whole era of food-collecting was becoming ready -and almost �incipient� for cultivation and animal domestication. - -Northwestern Europe was not the place for really effective beginnings -in agriculture and animal domestication. These would have had to take -place in one of those natural environments of promise, where a variety -of plants and animals, each possible of domestication, was available in -the wild state. Let me spell this out. Really effective food-production -must include a variety of items to make up a reasonably well-rounded -diet. The food-supply so produced must be trustworthy, even though -the food-producing peoples themselves might be happy to supplement -it with fish and wild strawberries, just as we do when such things -are available. So, as we said earlier, part of our problem is that -of finding a region with a natural environment which includes--and -did include, some ten thousand years ago--a variety of possibly -domesticable wild plants and animals. - - -NUCLEAR AREAS - -Now comes the last of my definitions. A region with a natural -environment which included a variety of wild plants and animals, -both possible and ready for domestication, would be a central -or core or _nuclear area_, that is, it would be when and _if_ -food-production took place within it. It is pretty hard for me to -imagine food-production having ever made an independent start outside -such a nuclear area, although there may be some possible nuclear areas -in which food-production never took place (possibly in parts of Africa, -for example). - -We know of several such nuclear areas. In the New World, Middle America -and the Andean highlands make up one or two; it is my understanding -that the evidence is not yet clear as to which. There seems to have -been a nuclear area somewhere in southeastern Asia, in the Malay -peninsula or Burma perhaps, connected with the early cultivation of -taro, breadfruit, the banana and the mango. Possibly the cultivation -of rice and the domestication of the chicken and of zebu cattle and -the water buffalo belong to this southeast Asiatic nuclear area. We -know relatively little about it archeologically, as yet. The nuclear -area which was the scene of the earliest experiment in effective -food-production was in western Asia. Since I know it best, I shall use -it as my example. - - -THE NUCLEAR NEAR EAST - -The nuclear area of western Asia is naturally the one of greatest -interest to people of the western cultural tradition. Our cultural -heritage began within it. The area itself is the region of the hilly -flanks of rain-watered grass-land which build up to the high mountain -ridges of Iran, Iraq, Turkey, Syria, and Palestine. The map on page -125 indicates the region. If you have a good atlas, try to locate the -zone which surrounds the drainage basin of the Tigris and Euphrates -Rivers at elevations of from approximately 2,000 to 5,000 feet. The -lower alluvial land of the Tigris-Euphrates basin itself has very -little rainfall. Some years ago Professor James Henry Breasted called -the alluvial lands of the Tigris-Euphrates a part of the �fertile -crescent.� These alluvial lands are very fertile if irrigated. Breasted -was most interested in the oriental civilizations of conventional -ancient history, and irrigation had been discovered before they -appeared. - -The country of hilly flanks above Breasted�s crescent receives from -10 to 20 or more inches of winter rainfall each year, which is about -what Kansas has. Above the hilly-flanks zone tower the peaks and ridges -of the Lebanon-Amanus chain bordering the coast-line from Palestine -to Turkey, the Taurus Mountains of southern Turkey, and the Zagros -range of the Iraq-Iran borderland. This rugged mountain frame for our -hilly-flanks zone rises to some magnificent alpine scenery, with peaks -of from ten to fifteen thousand feet in elevation. There are several -gaps in the Mediterranean coastal portion of the frame, through which -the winter�s rain-bearing winds from the sea may break so as to carry -rain to the foothills of the Taurus and the Zagros. - -The picture I hope you will have from this description is that of an -intermediate hilly-flanks zone lying between two regions of extremes. -The lower Tigris-Euphrates basin land is low and far too dry and hot -for agriculture based on rainfall alone; to the south and southwest, it -merges directly into the great desert of Arabia. The mountains which -lie above the hilly-flanks zone are much too high and rugged to have -encouraged farmers. - - -THE NATURAL ENVIRONMENT OF THE NUCLEAR NEAR EAST - -The more we learn of this hilly-flanks zone that I describe, the -more it seems surely to have been a nuclear area. This is where we -archeologists need, and are beginning to get, the help of natural -scientists. They are coming to the conclusion that the natural -environment of the hilly-flanks zone today is much as it was some eight -to ten thousand years ago. There are still two kinds of wild wheat and -a wild barley, and the wild sheep, goat, and pig. We have discovered -traces of each of these at about nine thousand years ago, also traces -of wild ox, horse, and dog, each of which appears to be the probable -ancestor of the domesticated form. In fact, at about nine thousand -years ago, the two wheats, the barley, and at least the goat, were -already well on the road to domestication. - -The wild wheats give us an interesting clue. They are only available -together with the wild barley within the hilly-flanks zone. While the -wild barley grows in a variety of elevations and beyond the zone, -at least one of the wild wheats does not seem to grow below the hill -country. As things look at the moment, the domestication of both the -wheats together could _only_ have taken place within the hilly-flanks -zone. Barley seems to have first come into cultivation due to its -presence as a weed in already cultivated wheat fields. There is also -a suggestion--there is still much more to learn in the matter--that -the animals which were first domesticated were most at home up in the -hilly-flanks zone in their wild state. - -With a single exception--that of the dog--the earliest positive -evidence of domestication includes the two forms of wheat, the barley, -and the goat. The evidence comes from within the hilly-flanks zone. -However, it comes from a settled village proper, Jarmo (which I�ll -describe in the next chapter), and is thus from the era of the primary -village-farming community. We are still without positive evidence of -domesticated grain and animals in the first era of the food-producing -stage, that of incipient cultivation and animal domestication. - - -THE ERA OF INCIPIENT CULTIVATION AND ANIMAL DOMESTICATION - -I said above (p. 105) that my era of incipient cultivation and animal -domestication is mainly set up by playing a hunch. Although we cannot -really demonstrate it--and certainly not in the Near East--it would -be very strange for food-collectors not to have known a great deal -about the plants and animals most useful to them. They do seem to have -domesticated the dog. We can easily imagine them remembering to go -back, season after season, to a particular patch of ground where seeds -or acorns or berries grew particularly well. Most human beings, unless -they are extremely hungry, are attracted to baby animals, and many wild -pups or fawns or piglets must have been brought back alive by hunting -parties. - -In this last sense, man has probably always been an incipient -cultivator and domesticator. But I believe that Adams is right in -suggesting that this would be doubly true with the experimenters of -the terminal era of food-collecting. We noticed that they also seem -to have had a tendency to settle down. Now my hunch goes that _when_ -this experimentation and settling down took place within a potential -nuclear area--where a whole constellation of plants and animals -possible of domestication was available--the change was easily made. -Professor Charles A. Reed, our field colleague in zoology, agrees that -year-round settlement with plant domestication probably came before -there were important animal domestications. - - -INCIPIENT ERAS AND NUCLEAR AREAS - -I have put this scheme into a simple chart (p. 111) with the names -of a few of the sites we are going to talk about. You will see that my -hunch means that there are eras of incipient cultivation _only_ within -nuclear areas. In a nuclear area, the terminal era of food-collecting -would probably have been quite short. I do not know for how long a time -the era of incipient cultivation and domestication would have lasted, -but perhaps for several thousand years. Then it passed on into the era -of the primary village-farming community. - -Outside a nuclear area, the terminal era of food-collecting would last -for a long time; in a few out-of-the-way parts of the world, it still -hangs on. It would end in any particular place through contact with -and the spread of ideas of people who had passed on into one of the -more developed eras. In many cases, the terminal era of food-collecting -was ended by the incoming of the food-producing peoples themselves. -For example, the practices of food-production were carried into Europe -by the actual movement of some numbers of peoples (we don�t know how -many) who had reached at least the level of the primary village-farming -community. The �Forest folk� learned food-production from them. There -was never an era of incipient cultivation and domestication proper in -Europe, if my hunch is right. - - -ARCHEOLOGICAL DIFFICULTIES IN SEEING THE INCIPIENT ERA - -The way I see it, two things were required in order that an era of -incipient cultivation and domestication could begin. First, there had -to be the natural environment of a nuclear area, with its whole group -of plants and animals capable of domestication. This is the aspect of -the matter which we�ve said is directly given by nature. But it is -quite possible that such an environment with such a group of plants -and animals in it may have existed well before ten thousand years ago -in the Near East. It is also quite possible that the same promising -condition may have existed in regions which never developed into -nuclear areas proper. Here, again, we come back to the cultural factor. -I think it was that �atmosphere of experimentation� we�ve talked about -once or twice before. I can�t define it for you, other than to say that -by the end of the Ice Age, the general level of many cultures was ready -for change. Ask me how and why this was so, and I�ll tell you we don�t -know yet, and that if we did understand this kind of question, there -would be no need for me to go on being a prehistorian! - -[Illustration: POSSIBLE RELATIONSHIPS OF STAGES AND ERAS IN WESTERN -ASIA AND NORTHEASTERN AFRICA] - -Now since this was an era of incipience, of the birth of new ideas, -and of experimentation, it is very difficult to see its traces -archeologically. New tools having to do with the new ways of getting -and, in fact, producing food would have taken some time to develop. -It need not surprise us too much if we cannot find hoes for planting -and sickles for reaping grain at the very beginning. We might expect -a time of making-do with some of the older tools, or with make-shift -tools, for some of the new jobs. The present-day wild cousin of the -domesticated sheep still lives in the mountains of western Asia. It has -no wool, only a fine down under hair like that of a deer, so it need -not surprise us to find neither the whorls used for spinning nor traces -of woolen cloth. It must have taken some time for a wool-bearing sheep -to develop and also time for the invention of the new tools which go -with weaving. It would have been the same with other kinds of tools for -the new way of life. - -It is difficult even for an experienced comparative zoologist to tell -which are the bones of domesticated animals and which are those of -their wild cousins. This is especially so because the animal bones the -archeologists find are usually fragmentary. Furthermore, we do not have -a sort of library collection of the skeletons of the animals or an -herbarium of the plants of those times, against which the traces which -the archeologists find may be checked. We are only beginning to get -such collections for the modern wild forms of animals and plants from -some of our nuclear areas. In the nuclear area in the Near East, some -of the wild animals, at least, have already become extinct. There are -no longer wild cattle or wild horses in western Asia. We know they were -there from the finds we�ve made in caves of late Ice Age times, and -from some slightly later sites. - - -SITES WITH ANTIQUITIES OF THE INCIPIENT ERA - -So far, we know only a very few sites which would suit my notion of the -incipient era of cultivation and animal domestication. I am closing -this chapter with descriptions of two of the best Near Eastern examples -I know of. You may not be satisfied that what I am able to describe -makes a full-bodied era of development at all. Remember, however, that -I�ve told you I�m largely playing a kind of a hunch, and also that the -archeological materials of this era will always be extremely difficult -to interpret. At the beginning of any new way of life, there will be a -great tendency for people to make-do, at first, with tools and habits -they are already used to. I would suspect that a great deal of this -making-do went on almost to the end of this era. - - -THE NATUFIAN, AN ASSEMBLAGE OF THE INCIPIENT ERA - -The assemblage called the Natufian comes from the upper layers of a -number of caves in Palestine. Traces of its flint industry have also -turned up in Syria and Lebanon. We don�t know just how old it is. I -guess that it probably falls within five hundred years either way of -about 5000 B.C. - -Until recently, the people who produced the Natufian assemblage were -thought to have been only cave dwellers, but now at least three open -air Natufian sites have been briefly described. In their best-known -dwelling place, on Mount Carmel, the Natufian folk lived in the open -mouth of a large rock-shelter and on the terrace in front of it. On the -terrace, they had set at least two short curving lines of stones; but -these were hardly architecture; they seem more like benches or perhaps -the low walls of open pens. There were also one or two small clusters -of stones laid like paving, and a ring of stones around a hearth or -fireplace. One very round and regular basin-shaped depression had been -cut into the rocky floor of the terrace, and there were other less -regular basin-like depressions. In the newly reported open air sites, -there seem to have been huts with rounded corners. - -Most of the finds in the Natufian layer of the Mount Carmel cave were -flints. About 80 per cent of these flint tools were microliths made -by the regular working of tiny blades into various tools, some having -geometric forms. The larger flint tools included backed blades, burins, -scrapers, a few arrow points, some larger hacking or picking tools, and -one special type. This last was the sickle blade. - -We know a sickle blade of flint when we see one, because of a strange -polish or sheen which seems to develop on the cutting edge when the -blade has been used to cut grasses or grain, or--perhaps--reeds. In -the Natufian, we have even found the straight bone handles in which a -number of flint sickle blades were set in a line. - -There was a small industry in ground or pecked stone (that is, abraded -not chipped) in the Natufian. This included some pestle and mortar -fragments. The mortars are said to have a deep and narrow hole, -and some of the pestles show traces of red ochre. We are not sure -that these mortars and pestles were also used for grinding food. In -addition, there were one or two bits of carving in stone. - - -NATUFIAN ANTIQUITIES IN OTHER MATERIALS; BURIALS AND PEOPLE - -The Natufian industry in bone was quite rich. It included, beside the -sickle hafts mentioned above, points and harpoons, straight and curved -types of fish-hooks, awls, pins and needles, and a variety of beads and -pendants. There were also beads and pendants of pierced teeth and shell. - -A number of Natufian burials have been found in the caves; some burials -were grouped together in one grave. The people who were buried within -the Mount Carmel cave were laid on their backs in an extended position, -while those on the terrace seem to have been �flexed� (placed in their -graves in a curled-up position). This may mean no more than that it was -easier to dig a long hole in cave dirt than in the hard-packed dirt of -the terrace. The people often had some kind of object buried with them, -and several of the best collections of beads come from the burials. On -two of the skulls there were traces of elaborate head-dresses of shell -beads. - -[Illustration: SKETCH OF NATUFIAN ASSEMBLAGE - - MICROLITHS - ARCHITECTURE? - BURIAL - CHIPPED STONE - GROUND STONE - BONE] - -The animal bones of the Natufian layers show beasts of a �modern� type, -but with some differences from those of present-day Palestine. The -bones of the gazelle far outnumber those of the deer; since gazelles -like a much drier climate than deer, Palestine must then have had much -the same climate that it has today. Some of the animal bones were those -of large or dangerous beasts: the hyena, the bear, the wild boar, -and the leopard. But the Natufian people may have had the help of a -large domesticated dog. If our guess at a date for the Natufian is -right (about 7750 B.C.), this is an earlier dog than was that in the -Maglemosian of northern Europe. More recently, it has been reported -that a domesticated goat is also part of the Natufian finds. - -The study of the human bones from the Natufian burials is not yet -complete. Until Professor McCown�s study becomes available, we may note -Professor Coon�s assessment that these people were of a �basically -Mediterranean type.� - - -THE KARIM SHAHIR ASSEMBLAGE - -Karim Shahir differs from the Natufian sites in that it shows traces -of a temporary open site or encampment. It lies on the top of a bluff -in the Kurdish hill-country of northeastern Iraq. It was dug by Dr. -Bruce Howe of the expedition I directed in 1950-51 for the Oriental -Institute and the American Schools of Oriental Research. In 1954-55, -our expedition located another site, M�lefaat, with general resemblance -to Karim Shahir, but about a hundred miles north of it. In 1956, Dr. -Ralph Solecki located still another Karim Shahir type of site called -Zawi Chemi Shanidar. The Zawi Chemi site has a radiocarbon date of 8900 -� 300 B.C. - -Karim Shahir has evidence of only one very shallow level of occupation. -It was probably not lived on very long, although the people who lived -on it spread out over about three acres of area. In spots, the single -layer yielded great numbers of fist-sized cracked pieces of limestone, -which had been carried up from the bed of a stream at the bottom of the -bluff. We think these cracked stones had something to do with a kind of -architecture, but we were unable to find positive traces of hut plans. -At M�lefaat and Zawi Chemi, there were traces of rounded hut plans. - -As in the Natufian, the great bulk of small objects of the Karim Shahir -assemblage was in chipped flint. A large proportion of the flint tools -were microlithic bladelets and geometric forms. The flint sickle blade -was almost non-existent, being far scarcer than in the Natufian. The -people of Karim Shahir did a modest amount of work in the grinding of -stone; there were milling stone fragments of both the mortar and the -quern type, and stone hoes or axes with polished bits. Beads, pendants, -rings, and bracelets were made of finer quality stone. We found a few -simple points and needles of bone, and even two rather formless unbaked -clay figurines which seemed to be of animal form. - -[Illustration: SKETCH OF KARIM SHAHIR ASSEMBLAGE - - CHIPPED STONE - GROUND STONE - UNBAKED CLAY - SHELL - BONE - �ARCHITECTURE�] - -Karim Shahir did not yield direct evidence of the kind of vegetable -food its people ate. The animal bones showed a considerable -increase in the proportion of the bones of the species capable of -domestication--sheep, goat, cattle, horse, dog--as compared with animal -bones from the earlier cave sites of the area, which have a high -proportion of bones of wild forms like deer and gazelle. But we do not -know that any of the Karim Shahir animals were actually domesticated. -Some of them may have been, in an �incipient� way, but we have no means -at the moment that will tell us from the bones alone. - - -WERE THE NATUFIAN AND KARIM SHAHIR PEOPLES FOOD-PRODUCERS? - -It is clear that a great part of the food of the Natufian people -must have been hunted or collected. Shells of land, fresh-water, and -sea animals occur in their cave layers. The same is true as regards -Karim Shahir, save for sea shells. But on the other hand, we have -the sickles, the milling stones, the possible Natufian dog, and the -goat, and the general animal situation at Karim Shahir to hint at an -incipient approach to food-production. At Karim Shahir, there was the -tendency to settle down out in the open; this is echoed by the new -reports of open air Natufian sites. The large number of cracked stones -certainly indicates that it was worth the peoples� while to have some -kind of structure, even if the site as a whole was short-lived. - -It is a part of my hunch that these things all point toward -food-production--that the hints we seek are there. But in the sense -that the peoples of the era of the primary village-farming community, -which we shall look at next, are fully food-producing, the Natufian -and Karim Shahir folk had not yet arrived. I think they were part of -a general build-up to full scale food-production. They were possibly -controlling a few animals of several kinds and perhaps one or two -plants, without realizing the full possibilities of this �control� as a -new way of life. - -This is why I think of the Karim Shahir and Natufian folk as being at -a level, or in an era, of incipient cultivation and domestication. But -we shall have to do a great deal more excavation in this range of time -before we�ll get the kind of positive information we need. - - -SUMMARY - -I am sorry that this chapter has had to be so much more about ideas -than about the archeological traces of prehistoric men themselves. -But the antiquities of the incipient era of cultivation and animal -domestication will not be spectacular, even when we do have them -excavated in quantity. Few museums will be interested in these -antiquities for exhibition purposes. The charred bits or impressions -of plants, the fragments of animal bone and shell, and the varied -clues to climate and environment will be as important as the artifacts -themselves. It will be the ideas to which these traces lead us that -will be important. I am sure that this unspectacular material--when we -have much more of it, and learn how to understand what it says--will -lead us to how and why answers about the first great change in human -history. - -We know the earliest village-farming communities appeared in western -Asia, in a nuclear area. We do not yet know why the Near Eastern -experiment came first, or why it didn�t happen earlier in some other -nuclear area. Apparently, the level of culture and the promise of the -natural environment were ready first in western Asia. The next sites -we look at will show a simple but effective food-production already -in existence. Without effective food-production and the settled -village-farming communities, civilization never could have followed. -How effective food-production came into being by the end of the -incipient era, is, I believe, one of the most fascinating questions any -archeologist could face. - -It now seems probable--from possibly two of the Palestinian sites with -varieties of the Natufian (Jericho and Nahal Oren)--that there were -one or more local Palestinian developments out of the Natufian into -later times. In the same way, what followed after the Karim Shahir type -of assemblage in northeastern Iraq was in some ways a reflection of -beginnings made at Karim Shahir and Zawi Chemi. - - - - -THE First Revolution - -[Illustration] - - -As the incipient era of cultivation and animal domestication passed -onward into the era of the primary village-farming community, the first -basic change in human economy was fully achieved. In southwestern Asia, -this seems to have taken place about nine thousand years ago. I am -going to restrict my description to this earliest Near Eastern case--I -do not know enough about the later comparable experiments in the Far -East and in the New World. Let us first, once again, think of the -contrast between food-collecting and food-producing as ways of life. - - -THE DIFFERENCE BETWEEN FOOD-COLLECTORS AND FOOD-PRODUCERS - -Childe used the word �revolution� because of the radical change that -took place in the habits and customs of man. Food-collectors--that is, -hunters, fishers, berry- and nut-gatherers--had to live in small groups -or bands, for they had to be ready to move wherever their food supply -moved. Not many people can be fed in this way in one area, and small -children and old folks are a burden. There is not enough food to store, -and it is not the kind that can be stored for long. - -Do you see how this all fits into a picture? Small groups of people -living now in this cave, now in that--or out in the open--as they moved -after the animals they hunted; no permanent villages, a few half-buried -huts at best; no breakable utensils; no pottery; no signs of anything -for clothing beyond the tools that were probably used to dress the -skins of animals; no time to think of much of anything but food and -protection and disposal of the dead when death did come: an existence -which takes nature as it finds it, which does little or nothing to -modify nature--all in all, a savage�s existence, and a very tough one. -A man who spends his whole life following animals just to kill them to -eat, or moving from one berry patch to another, is really living just -like an animal himself. - - -THE FOOD-PRODUCING ECONOMY - -Against this picture let me try to draw another--that of man�s life -after food-production had begun. His meat was stored �on the hoof,� -his grain in silos or great pottery jars. He lived in a house: it was -worth his while to build one, because he couldn�t move far from his -fields and flocks. In his neighborhood enough food could be grown -and enough animals bred so that many people were kept busy. They all -lived close to their flocks and fields, in a village. The village was -already of a fair size, and it was growing, too. Everybody had more to -eat; they were presumably all stronger, and there were more children. -Children and old men could shepherd the animals by day or help with -the lighter work in the fields. After the crops had been harvested the -younger men might go hunting and some of them would fish, but the food -they brought in was only an addition to the food in the village; the -villagers wouldn�t starve, even if the hunters and fishermen came home -empty-handed. - -There was more time to do different things, too. They began to modify -nature. They made pottery out of raw clay, and textiles out of hair -or fiber. People who became good at pottery-making traded their pots -for food and spent all of their time on pottery alone. Other people -were learning to weave cloth or to make new tools. There were already -people in the village who were becoming full-time craftsmen. - -Other things were changing, too. The villagers must have had -to agree on new rules for living together. The head man of the -village had problems different from those of the chief of the small -food-collectors� band. If somebody�s flock of sheep spoiled a wheat -field, the owner wanted payment for the grain he lost. The chief of -the hunters was never bothered with such questions. Even the gods -had changed. The spirits and the magic that had been used by hunters -weren�t of any use to the villagers. They needed gods who would watch -over the fields and the flocks, and they eventually began to erect -buildings where their gods might dwell, and where the men who knew most -about the gods might live. - - -WAS FOOD-PRODUCTION A �REVOLUTION�? - -If you can see the difference between these two pictures--between -life in the food-collecting stage and life after food-production -had begun--you�ll see why Professor Childe speaks of a revolution. -By revolution, he doesn�t mean that it happened over night or that -it happened only once. We don�t know exactly how long it took. Some -people think that all these changes may have occurred in less than -500 years, but I doubt that. The incipient era was probably an affair -of some duration. Once the level of the village-farming community had -been established, however, things did begin to move very fast. By -six thousand years ago, the descendants of the first villagers had -developed irrigation and plow agriculture in the relatively rainless -Mesopotamian alluvium and were living in towns with temples. Relative -to the half million years of food-gathering which lay behind, this had -been achieved with truly revolutionary suddenness. - - -GAPS IN OUR KNOWLEDGE OF THE NEAR EAST - -If you�ll look again at the chart (p. 111) you�ll see that I have -very few sites and assemblages to name in the incipient era of -cultivation and domestication, and not many in the earlier part of -the primary village-farming level either. Thanks in no small part -to the intelligent co-operation given foreign excavators by the -Iraq Directorate General of Antiquities, our understanding of the -sequence in Iraq is growing more complete. I shall use Iraq as my main -yard-stick here. But I am far from being able to show you a series of -Sears Roebuck catalogues, even century by century, for any part of -the nuclear area. There is still a great deal of earth to move, and a -great mass of material to recover and interpret before we even begin to -understand �how� and �why.� - -Perhaps here, because this kind of archeology is really my specialty, -you�ll excuse it if I become personal for a moment. I very much look -forward to having further part in closing some of the gaps in knowledge -of the Near East. This is not, as I�ve told you, the spectacular -range of Near Eastern archeology. There are no royal tombs, no gold, -no great buildings or sculpture, no writing, in fact nothing to -excite the normal museum at all. Nevertheless it is a range which, -idea-wise, gives the archeologist tremendous satisfaction. The country -of the hilly flanks is an exciting combination of green grasslands -and mountainous ridges. The Kurds, who inhabit the part of the area -in which I�ve worked most recently, are an extremely interesting and -hospitable people. Archeologists don�t become rich, but I�ll forego -the Cadillac for any bright spring morning in the Kurdish hills, on a -good site with a happy crew of workmen and an interested and efficient -staff. It is probably impossible to convey the full feeling which life -on such a dig holds--halcyon days for the body and acute pleasurable -stimulation for the mind. Old things coming newly out of the good dirt, -and the pieces of the human puzzle fitting into place! I think I am -an honest man; I cannot tell you that I am sorry the job is not yet -finished and that there are still gaps in this part of the Near Eastern -archeological sequence. - - -EARLIEST SITES OF THE VILLAGE FARMERS - -So far, the Karim Shahir type of assemblage, which we looked at in the -last chapter, is the earliest material available in what I take to -be the nuclear area. We do not believe that Karim Shahir was a village -site proper: it looks more like the traces of a temporary encampment. -Two caves, called Belt and Hotu, which are outside the nuclear area -and down on the foreshore of the Caspian Sea, have been excavated -by Professor Coon. These probably belong in the later extension of -the terminal era of food-gathering; in their upper layers are traits -like the use of pottery borrowed from the more developed era of the -same time in the nuclear area. The same general explanation doubtless -holds true for certain materials in Egypt, along the upper Nile and in -the Kharga oasis: these materials, called Sebilian III, the Khartoum -�neolithic,� and the Khargan microlithic, are from surface sites, -not from caves. The chart (p. 111) shows where I would place these -materials in era and time. - -[Illustration: THE HILLY FLANKS OF THE CRESCENT AND EARLY SITES OF THE -NEAR EAST] - -Both M�lefaat and Dr. Solecki�s Zawi Chemi Shanidar site appear to have -been slightly more �settled in� than was Karim Shahir itself. But I do -not think they belong to the era of farming-villages proper. The first -site of this era, in the hills of Iraqi Kurdistan, is Jarmo, on which -we have spent three seasons of work. Following Jarmo comes a variety of -sites and assemblages which lie along the hilly flanks of the crescent -and just below it. I am going to describe and illustrate some of these -for you. - -Since not very much archeological excavation has yet been done on sites -of this range of time, I shall have to mention the names of certain -single sites which now alone stand for an assemblage. This does not -mean that I think the individual sites I mention were unique. In the -times when their various cultures flourished, there must have been -many little villages which shared the same general assemblage. We are -only now beginning to locate them again. Thus, if I speak of Jarmo, -or Jericho, or Sialk as single examples of their particular kinds of -assemblages, I don�t mean that they were unique at all. I think I could -take you to the sites of at least three more Jarmos, within twenty -miles of the original one. They are there, but they simply haven�t yet -been excavated. In 1956, a Danish expedition discovered material of -Jarmo type at Shimshara, only two dozen miles northeast of Jarmo, and -below an assemblage of Hassunan type (which I shall describe presently). - - -THE GAP BETWEEN KARIM SHAHIR AND JARMO - -As we see the matter now, there is probably still a gap in the -available archeological record between the Karim Shahir-M�lefaat-Zawi -Chemi group (of the incipient era) and that of Jarmo (of the -village-farming era). Although some items of the Jarmo type materials -do reflect the beginnings of traditions set in the Karim Shahir group -(see p. 120), there is not a clear continuity. Moreover--to the -degree that we may trust a few radiocarbon dates--there would appear -to be around two thousand years of difference in time. The single -available Zawi Chemi �date� is 8900 � 300 B.C.; the most reasonable -group of �dates� from Jarmo average to about 6750 � 200 B.C. I am -uncertain about this two thousand years--I do not think it can have -been so long. - -This suggests that we still have much work to do in Iraq. You can -imagine how earnestly we await the return of political stability in the -Republic of Iraq. - - -JARMO, IN THE KURDISH HILLS, IRAQ - -The site of Jarmo has a depth of deposit of about twenty-seven feet, -and approximately a dozen layers of architectural renovation and -change. Nevertheless it is a �one period� site: its assemblage remains -essentially the same throughout, although one or two new items are -added in later levels. It covers about four acres of the top of a -bluff, below which runs a small stream. Jarmo lies in the hill country -east of the modern oil town of Kirkuk. The Iraq Directorate General of -Antiquities suggested that we look at it in 1948, and we have had three -seasons of digging on it since. - -The people of Jarmo grew the barley plant and two different kinds of -wheat. They made flint sickles with which to reap their grain, mortars -or querns on which to crack it, ovens in which it might be parched, and -stone bowls out of which they might eat their porridge. We are sure -that they had the domesticated goat, but Professor Reed (the staff -zoologist) is not convinced that the bones of the other potentially -domesticable animals of Jarmo--sheep, cattle, pig, horse, dog--show -sure signs of domestication. We had first thought that all of these -animals were domesticated ones, but Reed feels he must find out much -more before he can be sure. As well as their grain and the meat from -their animals, the people of Jarmo consumed great quantities of land -snails. Botanically, the Jarmo wheat stands about half way between -fully bred wheat and the wild forms. - - -ARCHITECTURE: HALL-MARK OF THE VILLAGE - -The sure sign of the village proper is in its traces of architectural -permanence. The houses of Jarmo were only the size of a small cottage -by our standards, but each was provided with several rectangular rooms. -The walls of the houses were made of puddled mud, often set on crude -foundations of stone. (The puddled mud wall, which the Arabs call -_touf_, is built by laying a three to six inch course of soft mud, -letting this sun-dry for a day or two, then adding the next course, -etc.) The village probably looked much like the simple Kurdish farming -village of today, with its mud-walled houses and low mud-on-brush -roofs. I doubt that the Jarmo village had more than twenty houses at -any one moment of its existence. Today, an average of about seven -people live in a comparable Kurdish house; probably the population of -Jarmo was about 150 people. - -[Illustration: SKETCH OF JARMO ASSEMBLAGE - - CHIPPED STONE - UNBAKED CLAY - GROUND STONE - POTTERY _UPPER THIRD OF SITE ONLY._ - REED MATTING - BONE - ARCHITECTURE] - -It is interesting that portable pottery does not appear until the -last third of the life of the Jarmo village. Throughout the duration -of the village, however, its people had experimented with the plastic -qualities of clay. They modeled little figurines of animals and of -human beings in clay; one type of human figurine they favored was that -of a markedly pregnant woman, probably the expression of some sort of -fertility spirit. They provided their house floors with baked-in-place -depressions, either as basins or hearths, and later with domed ovens of -clay. As we�ve noted, the houses themselves were of clay or mud; one -could almost say they were built up like a house-sized pot. Then, -finally, the idea of making portable pottery itself appeared, although -I very much doubt that the people of the Jarmo village discovered the -art. - -On the other hand, the old tradition of making flint blades and -microlithic tools was still very strong at Jarmo. The sickle-blade was -made in quantities, but so also were many of the much older tool types. -Strangely enough, it is within this age-old category of chipped stone -tools that we see one of the clearest pointers to a newer age. Many of -the Jarmo chipped stone tools--microliths--were made of obsidian, a -black volcanic natural glass. The obsidian beds nearest to Jarmo are -over three hundred miles to the north. Already a bulk carrying trade -had been established--the forerunner of commerce--and the routes were -set by which, in later times, the metal trade was to move. - -There are now twelve radioactive carbon �dates� from Jarmo. The most -reasonable cluster of determinations averages to about 6750 � 200 -B.C., although there is a completely unreasonable range of �dates� -running from 3250 to 9250 B.C.! _If_ I am right in what I take to be -�reasonable,� the first flush of the food-producing revolution had been -achieved almost nine thousand years ago. - - -HASSUNA, IN UPPER MESOPOTAMIAN IRAQ - -We are not sure just how soon after Jarmo the next assemblage of Iraqi -material is to be placed. I do not think the time was long, and there -are a few hints that detailed habits in the making of pottery and -ground stone tools were actually continued from Jarmo times into the -time of the next full assemblage. This is called after a site named -Hassuna, a few miles to the south and west of modern Mosul. We also -have Hassunan type materials from several other sites in the same -general region. It is probably too soon to make generalizations about -it, but the Hassunan sites seem to cluster at slightly lower elevations -than those we have been talking about so far. - -The catalogue of the Hassuna assemblage is of course more full and -elaborate than that of Jarmo. The Iraqi government�s archeologists -who dug Hassuna itself, exposed evidence of increasing architectural -know-how. The walls of houses were still formed of puddled mud; -sun-dried bricks appear only in later periods. There were now several -different ways of making and decorating pottery vessels. One style of -pottery painting, called the Samarran style, is an extremely handsome -one and must have required a great deal of concentration and excellence -of draftsmanship. On the other hand, the old habits for the preparation -of good chipped stone tools--still apparent at Jarmo--seem to have -largely disappeared by Hassunan times. The flint work of the Hassunan -catalogue is, by and large, a wretched affair. We might guess that the -kinaesthetic concentration of the Hassuna craftsmen now went into other -categories; that is, they suddenly discovered they might have more fun -working with the newer materials. It�s a shame, for example, that none -of their weaving is preserved for us. - -The two available radiocarbon determinations from Hassunan contexts -stand at about 5100 and 5600 B.C. � 250 years. - - -OTHER EARLY VILLAGE SITES IN THE NUCLEAR AREA - -I�ll now name and very briefly describe a few of the other early -village assemblages either in or adjacent to the hilly flanks of the -crescent. Unfortunately, we do not have radioactive carbon dates for -many of these materials. We may guess that some particular assemblage, -roughly comparable to that of Hassuna, for example, must reflect a -culture which lived at just about the same time as that of Hassuna. We -do this guessing on the basis of the general similarity and degree of -complexity of the Sears Roebuck catalogues of the particular assemblage -and that of Hassuna. We suppose that for sites near at hand and of a -comparable cultural level, as indicated by their generally similar -assemblages, the dating must be about the same. We may also know that -in a general stratigraphic sense, the sites in question may both appear -at the bottom of the ascending village sequence in their respective -areas. Without a number of consistent radioactive carbon dates, we -cannot be precise about priorities. - -[Illustration: SKETCH OF HASSUNA ASSEMBLAGE - - POTTERY - POTTERY OBJECTS - CHIPPED STONE - BONE - GROUND STONE - ARCHITECTURE - REED MATTING - BURIAL] - -The ancient mound at Jericho, in the Dead Sea valley in Palestine, -yields some very interesting material. Its catalogue somewhat resembles -that of Jarmo, especially in the sense that there is a fair depth -of deposit without portable pottery vessels. On the other hand, the -architecture of Jericho is surprisingly complex, with traces of massive -stone fortification walls and the general use of formed sun-dried -mud brick. Jericho lies in a somewhat strange and tropically lush -ecological niche, some seven hundred feet below sea level; it is -geographically within the hilly-flanks zone but environmentally not -part of it. - -Several radiocarbon �dates� for Jericho fall within the range of those -I find reasonable for Jarmo, and their internal statistical consistency -is far better than that for the Jarmo determinations. It is not yet -clear exactly what this means. - -The mound at Jericho (Tell es-Sultan) contains a remarkably -fine sequence, which perhaps does not have the gap we noted in -Iraqi-Kurdistan between the Karim Shahir group and Jarmo. While I am -not sure that the Jericho sequence will prove valid for those parts -of Palestine outside the special Dead Sea environmental niche, the -sequence does appear to proceed from the local variety of Natufian into -that of a very well settled community. So far, we have little direct -evidence for the food-production basis upon which the Jericho people -subsisted. - -There is an early village assemblage with strong characteristics of its -own in the land bordering the northeast corner of the Mediterranean -Sea, where Syria and the Cilician province of Turkey join. This early -Syro-Cilician assemblage must represent a general cultural pattern -which was at least in part contemporary with that of the Hassuna -assemblage. These materials from the bases of the mounds at Mersin, and -from Judaidah in the Amouq plain, as well as from a few other sites, -represent the remains of true villages. The walls of their houses were -built of puddled mud, but some of the house foundations were of stone. -Several different kinds of pottery were made by the people of these -villages. None of it resembles the pottery from Hassuna or from the -upper levels of Jarmo or Jericho. The Syro-Cilician people had not -lost their touch at working flint. An important southern variation of -the Syro-Cilician assemblage has been cleared recently at Byblos, a -port town famous in later Phoenician times. There are three radiocarbon -determinations which suggest that the time range for these developments -was in the sixth or early fifth millennium B.C. - -It would be fascinating to search for traces of even earlier -village-farming communities and for the remains of the incipient -cultivation era, in the Syro-Cilician region. - - -THE IRANIAN PLATEAU AND THE NILE VALLEY - -The map on page 125 shows some sites which lie either outside or in -an extension of the hilly-flanks zone proper. From the base of the -great mound at Sialk on the Iranian plateau came an assemblage of -early village material, generally similar, in the kinds of things it -contained, to the catalogues of Hassuna and Judaidah. The details of -how things were made are different; the Sialk assemblage represents -still another cultural pattern. I suspect it appeared a bit later -in time than did that of Hassuna. There is an important new item in -the Sialk catalogue. The Sialk people made small drills or pins of -hammered copper. Thus the metallurgist�s specialized craft had made its -appearance. - -There is at least one very early Iranian site on the inward slopes -of the hilly-flanks zone. It is the earlier of two mounds at a place -called Bakun, in southwestern Iran; the results of the excavations -there are not yet published and we only know of its coarse and -primitive pottery. I only mention Bakun because it helps us to plot the -extent of the hilly-flanks zone villages on the map. - -The Nile Valley lies beyond the peculiar environmental zone of the -hilly flanks of the crescent, and it is probable that the earliest -village-farming communities in Egypt were established by a few people -who wandered into the Nile delta area from the nuclear area. The -assemblage which is most closely comparable to the catalogue of Hassuna -or Judaidah, for example, is that from little settlements along the -shore of the Fayum lake. The Fayum materials come mainly from grain -bins or silos. Another site, Merimde, in the western part of the Nile -delta, shows the remains of a true village, but it may be slightly -later than the settlement of the Fayum. There are radioactive carbon -�dates� for the Fayum materials at about 4275 B.C. � 320 years, which -is almost fifteen hundred years later than the determinations suggested -for the Hassunan or Syro-Cilician assemblages. I suspect that this -is a somewhat over-extended indication of the time it took for the -generalized cultural pattern of village-farming community life to -spread from the nuclear area down into Egypt, but as yet we have no way -of testing these matters. - -In this same vein, we have two radioactive carbon dates for an -assemblage from sites near Khartoum in the Sudan, best represented by -the mound called Shaheinab. The Shaheinab catalogue roughly corresponds -to that of the Fayum; the distance between the two places, as the Nile -flows, is roughly 1,500 miles. Thus it took almost a thousand years for -the new way of life to be carried as far south into Africa as Khartoum; -the two Shaheinab �dates� average about 3300 B.C. � 400 years. - -If the movement was up the Nile (southward), as these dates suggest, -then I suspect that the earliest available village material of middle -Egypt, the so-called Tasian, is also later than that of the Fayum. The -Tasian materials come from a few graves near a village called Deir -Tasa, and I have an uncomfortable feeling that the Tasian �assemblage� -may be mainly an artificial selection of poor examples of objects which -belong in the following range of time. - - -SPREAD IN TIME AND SPACE - -There are now two things we can do; in fact, we have already begun to -do them. We can watch the spread of the new way of life upward through -time in the nuclear area. We can also see how the new way of life -spread outward in space from the nuclear area, as time went on. There -is good archeological evidence that both these processes took place. -For the hill country of northeastern Iraq, in the nuclear area, we -have already noticed how the succession (still with gaps) from Karim -Shahir, through M�lefaat and Jarmo, to Hassuna can be charted (see -chart, p. 111). In the next chapter, we shall continue this charting -and description of what happened in Iraq upward through time. We also -watched traces of the new way of life move through space up the Nile -into Africa, to reach Khartoum in the Sudan some thirty-five hundred -years later than we had seen it at Jarmo or Jericho. We caught glimpses -of it in the Fayum and perhaps at Tasa along the way. - -For the remainder of this chapter, I shall try to suggest briefly for -you the directions taken by the spread of the new way of life from the -nuclear area in the Near East. First, let me make clear again that -I _do not_ believe that the village-farming community way of life -was invented only once and in the Near East. It seems to me that the -evidence is very clear that a separate experiment arose in the New -World. For China, the question of independence or borrowing--in the -appearance of the village-farming community there--is still an open -one. In the last chapter, we noted the probability of an independent -nuclear area in southeastern Asia. Professor Carl Sauer strongly -champions the great importance of this area as _the_ original center -of agricultural pursuits, as a kind of �cradle� of all incipient eras -of the Old World at least. While there is certainly not the slightest -archeological evidence to allow us to go that far, we may easily expect -that an early southeast Asian development would have been felt in -China. However, the appearance of the village-farming community in the -northwest of India, at least, seems to have depended on the earlier -development in the Near East. It is also probable that ideas of the new -way of life moved well beyond Khartoum in Africa. - - -THE SPREAD OF THE VILLAGE-FARMING COMMUNITY WAY OF LIFE INTO EUROPE - -How about Europe? I won�t give you many details. You can easily imagine -that the late prehistoric prelude to European history is a complicated -affair. We all know very well how complicated an area Europe is now, -with its welter of different languages and cultures. Remember, however, -that a great deal of archeology has been done on the late prehistory of -Europe, and very little on that of further Asia and Africa. If we knew -as much about these areas as we do of Europe, I expect we�d find them -just as complicated. - -This much is clear for Europe, as far as the spread of the -village-community way of life is concerned. The general idea and much -of the know-how and the basic tools of food-production moved from the -Near East to Europe. So did the plants and animals which had been -domesticated; they were not naturally at home in Europe, as they were -in western Asia. I do not, of course, mean that there were traveling -salesmen who carried these ideas and things to Europe with a commercial -gleam in their eyes. The process took time, and the ideas and things -must have been passed on from one group of people to the next. There -was also some actual movement of peoples, but we don�t know the size of -the groups that moved. - -The story of the �colonization� of Europe by the first farmers is -thus one of (1) the movement from the eastern Mediterranean lands -of some people who were farmers; (2) the spread of ideas and things -beyond the Near East itself and beyond the paths along which the -�colonists� moved; and (3) the adaptations of the ideas and things -by the indigenous �Forest folk�, about whose �receptiveness� Professor -Mathiassen speaks (p. 97). It is important to note that the resulting -cultures in the new European environment were European, not Near -Eastern. The late Professor Childe remarked that �the peoples of the -West were not slavish imitators; they adapted the gifts from the East -... into a new and organic whole capable of developing on its own -original lines.� - - -THE WAYS TO EUROPE - -Suppose we want to follow the traces of those earliest village-farmers -who did travel from western Asia into Europe. Let us start from -Syro-Cilicia, that part of the hilly-flanks zone proper which lies in -the very northeastern corner of the Mediterranean. Three ways would be -open to us (of course we could not be worried about permission from the -Soviet authorities!). We would go north, or north and slightly east, -across Anatolian Turkey, and skirt along either shore of the Black Sea -or even to the east of the Caucasus Mountains along the Caspian Sea, -to reach the plains of Ukrainian Russia. From here, we could march -across eastern Europe to the Baltic and Scandinavia, or even hook back -southwestward to Atlantic Europe. - -Our second way from Syro-Cilicia would also lie over Anatolia, to the -northwest, where we would have to swim or raft ourselves over the -Dardanelles or the Bosphorus to the European shore. Then we would bear -left toward Greece, but some of us might turn right again in Macedonia, -going up the valley of the Vardar River to its divide and on down -the valley of the Morava beyond, to reach the Danube near Belgrade -in Jugoslavia. Here we would turn left, following the great river -valley of the Danube up into central Europe. We would have a number of -tributary valleys to explore, or we could cross the divide and go down -the valley of the Rhine to the North Sea. - -Our third way from Syro-Cilicia would be by sea. We would coast along -southern Anatolia and visit Cyprus, Crete, and the Aegean islands on -our way to Greece, where, in the north, we might meet some of those who -had taken the second route. From Greece, we would sail on to Italy and -the western isles, to reach southern France and the coasts of Spain. -Eventually a few of us would sail up the Atlantic coast of Europe, to -reach western Britain and even Ireland. - -[Illustration: PROBABLE ROUTES AND TIMING IN THE SPREAD OF THE -VILLAGE-FARMING COMMUNITY WAY OF LIFE FROM THE NEAR EAST TO EUROPE] - -Of course none of us could ever take these journeys as the first -farmers took them, since the whole course of each journey must have -lasted many lifetimes. The date given to the assemblage called Windmill -Hill, the earliest known trace of village-farming communities in -England, is about 2500 B.C. I would expect about 5500 B.C. to be a -safe date to give for the well-developed early village communities of -Syro-Cilicia. We suspect that the spread throughout Europe did not -proceed at an even rate. Professor Piggott writes that �at a date -probably about 2600 B.C., simple agricultural communities were being -established in Spain and southern France, and from the latter region a -spread northwards can be traced ... from points on the French seaboard -of the [English] Channel ... there were emigrations of a certain number -of these tribes by boat, across to the chalk lands of Wessex and Sussex -[in England], probably not more than three or four generations later -than the formation of the south French colonies.� - -New radiocarbon determinations are becoming available all the -time--already several suggest that the food-producing way of life -had reached the lower Rhine and Holland by 4000 B.C. But not all -prehistorians accept these �dates,� so I do not show them on my map -(p. 139). - - -THE EARLIEST FARMERS OF ENGLAND - -To describe the later prehistory of all Europe for you would take -another book and a much larger one than this is. Therefore, I have -decided to give you only a few impressions of the later prehistory of -Britain. Of course the British Isles lie at the other end of Europe -from our base-line in western Asia. Also, they received influences -along at least two of the three ways in which the new way of life -moved into Europe. We will look at more of their late prehistory in a -following chapter: here, I shall speak only of the first farmers. - -The assemblage called Windmill Hill, which appears in the south of -England, exhibits three different kinds of structures, evidence of -grain-growing and of stock-breeding, and some distinctive types of -pottery and stone implements. The most remarkable type of structure -is the earthwork enclosures which seem to have served as seasonal -cattle corrals. These enclosures were roughly circular, reached over -a thousand feet in diameter, and sometimes included two or three -concentric sets of banks and ditches. Traces of oblong timber houses -have been found, but not within the enclosures. The second type of -structure is mine-shafts, dug down into the chalk beds where good -flint for the making of axes or hoes could be found. The third type -of structure is long simple mounds or �unchambered barrows,� in one -end of which burials were made. It has been commonly believed that the -Windmill Hill assemblage belonged entirely to the cultural tradition -which moved up through France to the Channel. Professor Piggott is now -convinced, however, that important elements of Windmill Hill stem from -northern Germany and Denmark--products of the first way into Europe -from the east. - -The archeological traces of a second early culture are to be found -in the west of England, western and northern Scotland, and most of -Ireland. The bearers of this culture had come up the Atlantic coast -by sea from southern France and Spain. The evidence they have left us -consists mainly of tombs and the contents of tombs, with only very -rare settlement sites. The tombs were of some size and received the -bodies of many people. The tombs themselves were built of stone, heaped -over with earth; the stones enclosed a passage to a central chamber -(�passage graves�), or to a simple long gallery, along the sides of -which the bodies were laid (�gallery graves�). The general type of -construction is called �megalithic� (= great stone), and the whole -earth-mounded structure is often called a _barrow_. Since many have -proper chambers, in one sense or another, we used the term �unchambered -barrow� above to distinguish those of the Windmill Hill type from these -megalithic structures. There is some evidence for sacrifice, libations, -and ceremonial fires, and it is clear that some form of community -ritual was focused on the megalithic tombs. - -The cultures of the people who produced the Windmill Hill assemblage -and of those who made the megalithic tombs flourished, at least in -part, at the same time. Although the distributions of the two different -types of archeological traces are in quite different parts of the -country, there is Windmill Hill pottery in some of the megalithic -tombs. But the tombs also contain pottery which seems to have arrived -with the tomb builders themselves. - -The third early British group of antiquities of this general time -(following 2500 B.C.) comes from sites in southern and eastern England. -It is not so certain that the people who made this assemblage, called -Peterborough, were actually farmers. While they may on occasion have -practiced a simple agriculture, many items of their assemblage link -them closely with that of the �Forest folk� of earlier times in -England and in the Baltic countries. Their pottery is decorated with -impressions of cords and is quite different from that of Windmill Hill -and the megalithic builders. In addition, the distribution of their -finds extends into eastern Britain, where the other cultures have left -no trace. The Peterborough people had villages with semi-subterranean -huts, and the bones of oxen, pigs, and sheep have been found in a few -of these. On the whole, however, hunting and fishing seem to have been -their vital occupations. They also established trade routes especially -to acquire the raw material for stone axes. - -A probably slightly later culture, whose traces are best known from -Skara Brae on Orkney, also had its roots in those cultures of the -Baltic area which fused out of the meeting of the �Forest folk� and -the peoples who took the eastern way into Europe. Skara Brae is very -well preserved, having been built of thin stone slabs about which -dune-sand drifted after the village died. The individual houses, the -bedsteads, the shelves, the chests for clothes and oddments--all built -of thin stone-slabs--may still be seen in place. But the Skara Brae -people lived entirely by sheep- and cattle-breeding, and by catching -shellfish. Neither grain nor the instruments of agriculture appeared at -Skara Brae. - - -THE EUROPEAN ACHIEVEMENT - -The above is only a very brief description of what went on in Britain -with the arrival of the first farmers. There are many interesting -details which I have omitted in order to shorten the story. - -I believe some of the difficulty we have in understanding the -establishment of the first farming communities in Europe is with -the word �colonization.� We have a natural tendency to think of -�colonization� as it has happened within the last few centuries. In the -case of the colonization of the Americas, for example, the colonists -came relatively quickly, and in increasingly vast numbers. They had -vastly superior technical, political, and war-making skills, compared -with those of the Indians. There was not much mixing with the Indians. -The case in Europe five or six thousand years ago must have been very -different. I wonder if it is even proper to call people �colonists� -who move some miles to a new region, settle down and farm it for some -years, then move on again, generation after generation? The ideas and -the things which these new people carried were only _potentially_ -superior. The ideas and things and the people had to prove themselves -in their adaptation to each new environment. Once this was done another -link to the chain would be added, and then the forest-dwellers and -other indigenous folk of Europe along the way might accept the new -ideas and things. It is quite reasonable to expect that there must have -been much mixture of the migrants and the indigenes along the way; the -Peterborough and Skara Brae assemblages we mentioned above would seem -to be clear traces of such fused cultures. Sometimes, especially if the -migrants were moving by boat, long distances may have been covered in -a short time. Remember, however, we seem to have about three thousand -years between the early Syro-Cilician villages and Windmill Hill. - -Let me repeat Professor Childe again. �The peoples of the West were -not slavish imitators: they adapted the gifts from the East ... into -a new and organic whole capable of developing on its own original -lines.� Childe is of course completely conscious of the fact that his -�peoples of the West� were in part the descendants of migrants who came -originally from the �East,� bringing their �gifts� with them. This -was the late prehistoric achievement of Europe--to take new ideas and -things and some migrant peoples and, by mixing them with the old in its -own environments, to forge a new and unique series of cultures. - -What we know of the ways of men suggests to us that when the details -of the later prehistory of further Asia and Africa are learned, their -stories will be just as exciting. - - - - -THE Conquest of Civilization - -[Illustration] - - -Now we must return to the Near East again. We are coming to the point -where history is about to begin. I am going to stick pretty close -to Iraq and Egypt in this chapter. These countries will perhaps be -the most interesting to most of us, for the foundations of western -civilization were laid in the river lands of the Tigris and Euphrates -and of the Nile. I shall probably stick closest of all to Iraq, because -things first happened there and also because I know it best. - -There is another interesting thing, too. We have seen that the first -experiment in village-farming took place in the Near East. So did -the first experiment in civilization. Both experiments �took.� The -traditions we live by today are based, ultimately, on those ancient -beginnings in food-production and civilization in the Near East. - - -WHAT �CIVILIZATION� MEANS - -I shall not try to define �civilization� for you; rather, I shall -tell you what the word brings to my mind. To me civilization means -urbanization: the fact that there are cities. It means a formal -political set-up--that there are kings or governing bodies that the -people have set up. It means formal laws--rules of conduct--which the -government (if not the people) believes are necessary. It probably -means that there are formalized projects--roads, harbors, irrigation -canals, and the like--and also some sort of army or police force -to protect them. It means quite new and different art forms. It -also usually means there is writing. (The people of the Andes--the -Incas--had everything which goes to make up a civilization but formal -writing. I can see no reason to say they were not civilized.) Finally, -as the late Professor Redfield reminded us, civilization seems to bring -with it the dawn of a new kind of moral order. - -In different civilizations, there may be important differences in the -way such things as the above are managed. In early civilizations, it is -usual to find religion very closely tied in with government, law, and -so forth. The king may also be a high priest, or he may even be thought -of as a god. The laws are usually thought to have been given to the -people by the gods. The temples are protected just as carefully as the -other projects. - - -CIVILIZATION IMPOSSIBLE WITHOUT FOOD-PRODUCTION - -Civilizations have to be made up of many people. Some of the people -live in the country; some live in very large towns or cities. Classes -of society have begun. There are officials and government people; there -are priests or religious officials; there are merchants and traders; -there are craftsmen, metal-workers, potters, builders, and so on; there -are also farmers, and these are the people who produce the food for the -whole population. It must be obvious that civilization cannot exist -without food-production and that food-production must also be at a -pretty efficient level of village-farming before civilization can even -begin. - -But people can be food-producing without being civilized. In many -parts of the world this is still the case. When the white men first -came to America, the Indians in most parts of this hemisphere were -food-producers. They grew corn, potatoes, tomatoes, squash, and many -other things the white men had never eaten before. But only the Aztecs -of Mexico, the Mayas of Yucatan and Guatemala, and the Incas of the -Andes were civilized. - - -WHY DIDN�T CIVILIZATION COME TO ALL FOOD-PRODUCERS? - -Once you have food-production, even at the well-advanced level of -the village-farming community, what else has to happen before you -get civilization? Many men have asked this question and have failed -to give a full and satisfactory answer. There is probably no _one_ -answer. I shall give you my own idea about how civilization _may_ have -come about in the Near East alone. Remember, it is only a guess--a -putting together of hunches from incomplete evidence. It is _not_ meant -to explain how civilization began in any of the other areas--China, -southeast Asia, the Americas--where other early experiments in -civilization went on. The details in those areas are quite different. -Whether certain general principles hold, for the appearance of any -early civilization, is still an open and very interesting question. - - -WHERE CIVILIZATION FIRST APPEARED IN THE NEAR EAST - -You remember that our earliest village-farming communities lay along -the hilly flanks of a great �crescent.� (See map on p. 125.) -Professor Breasted�s �fertile crescent� emphasized the rich river -valleys of the Nile and the Tigris-Euphrates Rivers. Our hilly-flanks -area of the crescent zone arches up from Egypt through Palestine and -Syria, along southern Turkey into northern Iraq, and down along the -southwestern fringe of Iran. The earliest food-producing villages we -know already existed in this area by about 6750 B.C. (� 200 years). - -Now notice that this hilly-flanks zone does not include southern -Mesopotamia, the alluvial land of the lower Tigris and Euphrates in -Iraq, or the Nile Valley proper. The earliest known villages of classic -Mesopotamia and Egypt seem to appear fifteen hundred or more years -after those of the hilly-flanks zone. For example, the early Fayum -village which lies near a lake west of the Nile Valley proper (see p. -135) has a radiocarbon date of 4275 B.C. � 320 years. It was in the -river lands, however, that the immediate beginnings of civilization -were made. - -We know that by about 3200 B.C. the Early Dynastic period had begun -in southern Mesopotamia. The beginnings of writing go back several -hundred years earlier, but we can safely say that civilization had -begun in Mesopotamia by 3200 B.C. In Egypt, the beginning of the First -Dynasty is slightly later, at about 3100 B.C., and writing probably -did not appear much earlier. There is no question but that history and -civilization were well under way in both Mesopotamia and Egypt by 3000 -B.C.--about five thousand years ago. - - -THE HILLY-FLANKS ZONE VERSUS THE RIVER LANDS - -Why did these two civilizations spring up in these two river -lands which apparently were not even part of the area where the -village-farming community began? Why didn�t we have the first -civilizations in Palestine, Syria, north Iraq, or Iran, where we�re -sure food-production had had a long time to develop? I think the -probable answer gives a clue to the ways in which civilization began in -Egypt and Mesopotamia. - -The land in the hilly flanks is of a sort which people can farm without -too much trouble. There is a fairly fertile coastal strip in Palestine -and Syria. There are pleasant mountain slopes, streams running out to -the sea, and rain, at least in the winter months. The rain belt and the -foothills of the Turkish mountains also extend to northern Iraq and on -to the Iranian plateau. The Iranian plateau has its mountain valleys, -streams, and some rain. These hilly flanks of the �crescent,� through -most of its arc, are almost made-to-order for beginning farmers. The -grassy slopes of the higher hills would be pasture for their herds -and flocks. As soon as the earliest experiments with agriculture and -domestic animals had been successful, a pleasant living could be -made--and without too much trouble. - -I should add here again, that our evidence points increasingly to a -climate for those times which is very little different from that for -the area today. Now look at Egypt and southern Mesopotamia. Both are -lands without rain, for all intents and purposes. Both are lands with -rivers that have laid down very fertile soil--soil perhaps superior to -that in the hilly flanks. But in both lands, the rivers are of no great -aid without some control. - -The Nile floods its banks once a year, in late September or early -October. It not only soaks the narrow fertile strip of land on either -side; it lays down a fresh layer of new soil each year. Beyond the -fertile strip on either side rise great cliffs, and behind them is the -desert. In its natural, uncontrolled state, the yearly flood of the -Nile must have caused short-lived swamps that were full of crocodiles. -After a short time, the flood level would have dropped, the water and -the crocodiles would have run back into the river, and the swamp plants -would have become parched and dry. - -The Tigris and the Euphrates of Mesopotamia are less likely to flood -regularly than the Nile. The Tigris has a shorter and straighter course -than the Euphrates; it is also the more violent river. Its banks are -high, and when the snows melt and flow into all of its tributary rivers -it is swift and dangerous. The Euphrates has a much longer and more -curving course and few important tributaries. Its banks are lower and -it is less likely to flood dangerously. The land on either side and -between the two rivers is very fertile, south of the modern city of -Baghdad. Unlike the Nile Valley, neither the Tigris nor the Euphrates -is flanked by cliffs. The land on either side of the rivers stretches -out for miles and is not much rougher than a poor tennis court. - - -THE RIVERS MUST BE CONTROLLED - -The real trick in both Egypt and Mesopotamia is to make the rivers work -for you. In Egypt, this is a matter of building dikes and reservoirs -that will catch and hold the Nile flood. In this way, the water is held -and allowed to run off over the fields as it is needed. In Mesopotamia, -it is a matter of taking advantage of natural river channels and branch -channels, and of leading ditches from these onto the fields. - -Obviously, we can no longer find the first dikes or reservoirs of -the Nile Valley, or the first canals or ditches of Mesopotamia. The -same land has been lived on far too long for any traces of the first -attempts to be left; or, especially in Egypt, it has been covered by -the yearly deposits of silt, dropped by the river floods. But we�re -pretty sure the first food-producers of Egypt and southern Mesopotamia -must have made such dikes, canals, and ditches. In the first place, -there can�t have been enough rain for them to grow things otherwise. -In the second place, the patterns for such projects seem to have been -pretty well set by historic times. - - -CONTROL OF THE RIVERS THE BUSINESS OF EVERYONE - -Here, then, is a _part_ of the reason why civilization grew in Egypt -and Mesopotamia first--not in Palestine, Syria, or Iran. In the latter -areas, people could manage to produce their food as individuals. It -wasn�t too hard; there were rain and some streams, and good pasturage -for the animals even if a crop or two went wrong. In Egypt and -Mesopotamia, people had to put in a much greater amount of work, and -this work couldn�t be individual work. Whole villages or groups of -people had to turn out to fix dikes or dig ditches. The dikes had to be -repaired and the ditches carefully cleared of silt each year, or they -would become useless. - -There also had to be hard and fast rules. The person who lived nearest -the ditch or the reservoir must not be allowed to take all the water -and leave none for his neighbors. It was not only a business of -learning to control the rivers and of making their waters do the -farmer�s work. It also meant controlling men. But once these men had -managed both kinds of controls, what a wonderful yield they had! The -soil was already fertile, and the silt which came in the floods and -ditches kept adding fertile soil. - - -THE GERM OF CIVILIZATION IN EGYPT AND MESOPOTAMIA - -This learning to work together for the common good was the real germ of -the Egyptian and the Mesopotamian civilizations. The bare elements of -civilization were already there: the need for a governing hand and for -laws to see that the communities� work was done and that the water was -justly shared. You may object that there is a sort of chicken and egg -paradox in this idea. How could the people set up the rules until they -had managed to get a way to live, and how could they manage to get a -way to live until they had set up the rules? I think that small groups -must have moved down along the mud-flats of the river banks quite -early, making use of naturally favorable spots, and that the rules grew -out of such cases. It would have been like the hand-in-hand growth of -automobiles and paved highways in the United States. - -Once the rules and the know-how did get going, there must have been a -constant interplay of the two. Thus, the more the crops yielded, the -richer and better-fed the people would have been, and the more the -population would have grown. As the population grew, more land would -have needed to be flooded or irrigated, and more complex systems of -dikes, reservoirs, canals, and ditches would have been built. The more -complex the system, the more necessity for work on new projects and for -the control of their use.... And so on.... - -What I have just put down for you is a guess at the manner of growth of -some of the formalized systems that go to make up a civilized society. -My explanation has been pointed particularly at Egypt and Mesopotamia. -I have already told you that the irrigation and water-control part of -it does not apply to the development of the Aztecs or the Mayas, or -perhaps anybody else. But I think that a fair part of the story of -Egypt and Mesopotamia must be as I�ve just told you. - -I am particularly anxious that you do _not_ understand me to mean that -irrigation _caused_ civilization. I am sure it was not that simple at -all. For, in fact, a complex and highly engineered irrigation system -proper did not come until later times. Let�s say rather that the simple -beginnings of irrigation allowed and in fact encouraged a great number -of things in the technological, political, social, and moral realms of -culture. We do not yet understand what all these things were or how -they worked. But without these other aspects of culture, I do not -think that urbanization and civilization itself could have come into -being. - - -THE ARCHEOLOGICAL SEQUENCE TO CIVILIZATION IN IRAQ - -We last spoke of the archeological materials of Iraq on page 130, -where I described the village-farming community of Hassunan type. The -Hassunan type villages appear in the hilly-flanks zone and in the -rolling land adjacent to the Tigris in northern Iraq. It is probable -that even before the Hassuna pattern of culture lived its course, a -new assemblage had been established in northern Iraq and Syria. This -assemblage is called Halaf, after a site high on a tributary of the -Euphrates, on the Syro-Turkish border. - -[Illustration: SKETCH OF SELECTED ITEMS OF HALAFIAN ASSEMBLAGE - - BEADS AND PENDANTS - POTTERY MOTIFS - POTTERY] - -The Halafian assemblage is incompletely known. The culture it -represents included a remarkably handsome painted pottery. -Archeologists have tended to be so fascinated with this pottery that -they have bothered little with the rest of the Halafian assemblage. We -do know that strange stone-founded houses, with plans like those of the -popular notion of an Eskimo igloo, were built. Like the pottery of the -Samarran style, which appears as part of the Hassunan assemblage (see -p. 131), the Halafian painted pottery implies great concentration and -excellence of draftsmanship on the part of the people who painted it. - -We must mention two very interesting sites adjacent to the mud-flats of -the rivers, half way down from northern Iraq to the classic alluvial -Mesopotamian area. One is Baghouz on the Euphrates; the other is -Samarra on the Tigris (see map, p. 125). Both these sites yield the -handsome painted pottery of the style called Samarran: in fact it -is Samarra which gives its name to the pottery. Neither Baghouz nor -Samarra have completely Hassunan types of assemblages, and at Samarra -there are a few pots of proper Halafian style. I suppose that Samarra -and Baghouz give us glimpses of those early farmers who had begun to -finger their way down the mud-flats of the river banks toward the -fertile but yet untilled southland. - - -CLASSIC SOUTHERN MESOPOTAMIA FIRST OCCUPIED - -Our next step is into the southland proper. Here, deep in the core of -the mound which later became the holy Sumerian city of Eridu, Iraqi -archeologists uncovered a handsome painted pottery. Pottery of the same -type had been noticed earlier by German archeologists on the surface -of a small mound, awash in the spring floods, near the remains of the -Biblical city of Erich (Sumerian = Uruk; Arabic = Warka). This �Eridu� -pottery, which is about all we have of the assemblage of the people who -once produced it, may be seen as a blend of the Samarran and Halafian -painted pottery styles. This may over-simplify the case, but as yet we -do not have much evidence to go on. The idea does at least fit with my -interpretation of the meaning of Baghouz and Samarra as way-points on -the mud-flats of the rivers half way down from the north. - -My colleague, Robert Adams, believes that there were certainly -riverine-adapted food-collectors living in lower Mesopotamia. The -presence of such would explain why the Eridu assemblage is not simply -the sum of the Halafian and Samarran assemblages. But the domesticated -plants and animals and the basic ways of food-production must have -come from the hilly-flanks country in the north. - -Above the basal Eridu levels, and at a number of other sites in the -south, comes a full-fledged assemblage called Ubaid. Incidentally, -there is an aspect of the Ubaidian assemblage in the north as well. It -seems to move into place before the Halaf manifestation is finished, -and to blend with it. The Ubaidian assemblage in the south is by far -the more spectacular. The development of the temple has been traced -at Eridu from a simple little structure to a monumental building some -62 feet long, with a pilaster-decorated fa�ade and an altar in its -central chamber. There is painted Ubaidian pottery, but the style is -hurried and somewhat careless and gives the _impression_ of having been -a cheap mass-production means of decoration when compared with the -carefully drafted styles of Samarra and Halaf. The Ubaidian people made -other items of baked clay: sickles and axes of very hard-baked clay -are found. The northern Ubaidian sites have yielded tools of copper, -but metal tools of unquestionable Ubaidian find-spots are not yet -available from the south. Clay figurines of human beings with monstrous -turtle-like faces are another item in the southern Ubaidian assemblage. - -[Illustration: SKETCH OF SELECTED ITEMS OF UBAIDIAN ASSEMBLAGE] - -There is a large Ubaid cemetery at Eridu, much of it still awaiting -excavation. The few skeletons so far tentatively studied reveal a -completely modern type of �Mediterraneanoid�; the individuals whom the -skeletons represent would undoubtedly blend perfectly into the modern -population of southern Iraq. What the Ubaidian assemblage says to us is -that these people had already adapted themselves and their culture to -the peculiar riverine environment of classic southern Mesopotamia. For -example, hard-baked clay axes will chop bundles of reeds very well, or -help a mason dress his unbaked mud bricks, and there were only a few -soft and pithy species of trees available. The Ubaidian levels of Eridu -yield quantities of date pits; that excellent and characteristically -Iraqi fruit was already in use. The excavators also found the clay -model of a ship, with the stepping-point for a mast, so that Sinbad the -Sailor must have had his antecedents as early as the time of Ubaid. -The bones of fish, which must have flourished in the larger canals as -well as in the rivers, are common in the Ubaidian levels and thereafter. - - -THE UBAIDIAN ACHIEVEMENT - -On present evidence, my tendency is to see the Ubaidian assemblage -in southern Iraq as the trace of a new era. I wish there were more -evidence, but what we have suggests this to me. The culture of southern -Ubaid soon became a culture of towns--of centrally located towns with -some rural villages about them. The town had a temple and there must -have been priests. These priests probably had political and economic -functions as well as religious ones, if the somewhat later history of -Mesopotamia may suggest a pattern for us. Presently the temple and its -priesthood were possibly the focus of the market; the temple received -its due, and may already have had its own lands and herds and flocks. -The people of the town, undoubtedly at least in consultation with the -temple administration, planned and maintained the simple irrigation -ditches. As the system flourished, the community of rural farmers would -have produced more than sufficient food. The tendency for specialized -crafts to develop--tentative at best at the cultural level of the -earlier village-farming community era--would now have been achieved, -and probably many other specialists in temple administration, water -control, architecture, and trade would also have appeared, as the -surplus food-supply was assured. - -Southern Mesopotamia is not a land rich in natural resources other -than its fertile soil. Stone, good wood for construction, metal, and -innumerable other things would have had to be imported. Grain and -dates--although both are bulky and difficult to transport--and wool and -woven stuffs must have been the mediums of exchange. Over what area did -the trading net-work of Ubaid extend? We start with the idea that the -Ubaidian assemblage is most richly developed in the south. We assume, I -think, correctly, that it represents a cultural flowering of the south. -On the basis of the pottery of the still elusive �Eridu� immigrants -who had first followed the rivers into alluvial Mesopotamia, we get -the notion that the characteristic painted pottery style of Ubaid -was developed in the southland. If this reconstruction is correct -then we may watch with interest where the Ubaid pottery-painting -tradition spread. We have already mentioned that there is a substantial -assemblage of (and from the southern point of view, _fairly_ pure) -Ubaidian material in northern Iraq. The pottery appears all along the -Iranian flanks, even well east of the head of the Persian Gulf, and -ends in a later and spectacular flourish in an extremely handsome -painted style called the �Susa� style. Ubaidian pottery has been noted -up the valleys of both of the great rivers, well north of the Iraqi -and Syrian borders on the southern flanks of the Anatolian plateau. -It reaches the Mediterranean Sea and the valley of the Orontes in -Syria, and it may be faintly reflected in the painted style of a -site called Ghassul, on the east bank of the Jordan in the Dead Sea -Valley. Over this vast area--certainly in all of the great basin of -the Tigris-Euphrates drainage system and its natural extensions--I -believe we may lay our fingers on the traces of a peculiar way of -decorating pottery, which we call Ubaidian. This cursive and even -slap-dash decoration, it appears to me, was part of a new cultural -tradition which arose from the adjustments which immigrant northern -farmers first made to the new and challenging environment of southern -Mesopotamia. But exciting as the idea of the spread of influences of -the Ubaid tradition in space may be, I believe you will agree that the -consequences of the growth of that tradition in southern Mesopotamia -itself, as time passed, are even more important. - - -THE WARKA PHASE IN THE SOUTH - -So far, there are only two radiocarbon determinations for the Ubaidian -assemblage, one from Tepe Gawra in the north and one from Warka in the -south. My hunch would be to use the dates 4500 to 3750 B.C., with a -plus or more probably a minus factor of about two hundred years for -each, as the time duration of the Ubaidian assemblage in southern -Mesopotamia. - -Next, much to our annoyance, we have what is almost a temporary -black-out. According to the system of terminology I favor, our next -�assemblage� after that of Ubaid is called the _Warka_ phase, from -the Arabic name for the site of Uruk or Erich. We know it only from -six or seven levels in a narrow test-pit at Warka, and from an even -smaller hole at another site. This �assemblage,� so far, is known only -by its pottery, some of which still bears Ubaidian style painting. The -characteristic Warkan pottery is unpainted, with smoothed red or gray -surfaces and peculiar shapes. Unquestionably, there must be a great -deal more to say about the Warkan assemblage, but someone will first -have to excavate it! - - -THE DAWN OF CIVILIZATION - -After our exasperation with the almost unknown Warka interlude, -following the brilliant �false dawn� of Ubaid, we move next to an -assemblage which yields traces of a preponderance of those elements -which we noted (p. 144) as meaning civilization. This assemblage -is that called _Proto-Literate_; it already contains writing. On -the somewhat shaky principle that writing, however early, means -history--and no longer prehistory--the assemblage is named for the -historical implications of its content, and no longer after the name of -the site where it was first found. Since some of the older books used -site-names for this assemblage, I will tell you that the Proto-Literate -includes the latter half of what used to be called the �Uruk period� -_plus_ all of what used to be called the �Jemdet Nasr period.� It shows -a consistent development from beginning to end. - -I shall, in fact, leave much of the description and the historic -implications of the Proto-Literate assemblage to the conventional -historians. Professor T. J. Jacobsen, reaching backward from the -legends he finds in the cuneiform writings of slightly later times, can -in fact tell you a more complete story of Proto-Literate culture than -I can. It should be enough here if I sum up briefly what the excavated -archeological evidence shows. - -We have yet to dig a Proto-Literate site in its entirety, but the -indications are that the sites cover areas the size of small cities. -In architecture, we know of large and monumental temple structures, -which were built on elaborate high terraces. The plans and decoration -of these temples follow the pattern set in the Ubaid phase: the chief -difference is one of size. The German excavators at the site of Warka -reckoned that the construction of only one of the Proto-Literate temple -complexes there must have taken 1,500 men, each working a ten-hour day, -five years to build. - - -ART AND WRITING - -If the architecture, even in its monumental forms, can be seen to -stem from Ubaidian developments, this is not so with our other -evidence of Proto-Literate artistic expression. In relief and applied -sculpture, in sculpture in the round, and on the engraved cylinder -seals--all of which now make their appearance--several completely -new artistic principles are apparent. These include the composition -of subject-matter in groups, commemorative scenes, and especially -the ability and apparent desire to render the human form and face. -Excellent as the animals of the Franco-Cantabrian art may have been -(see p. 85), and however handsome were the carefully drafted -geometric designs and conventionalized figures on the pottery of the -early farmers, there seems to have been, up to this time, a mental -block about the drawing of the human figure and especially the human -face. We do not yet know what caused this self-consciousness about -picturing themselves which seems characteristic of men before the -appearance of civilization. We do know that with civilization, the -mental block seems to have been removed. - -Clay tablets bearing pictographic signs are the Proto-Literate -forerunners of cuneiform writing. The earliest examples are not well -understood but they seem to be �devices for making accounts and -for remembering accounts.� Different from the later case in Egypt, -where writing appears fully formed in the earliest examples, the -development from simple pictographic signs to proper cuneiform writing -may be traced, step by step, in Mesopotamia. It is most probable -that the development of writing was connected with the temple and -the need for keeping account of the temple�s possessions. Professor -Jacobsen sees writing as a means for overcoming space, time, and the -increasing complications of human affairs: �Literacy, which began -with ... civilization, enhanced mightily those very tendencies in its -development which characterize it as a civilization and mark it off as -such from other types of culture.� - -[Illustration: RELIEF ON A PROTO-LITERATE STONE VASE, WARKA - -Unrolled drawing, with restoration suggested by figures from -contemporary cylinder seals] - -While the new principles in art and the idea of writing are not -foreshadowed in the Ubaid phase, or in what little we know of the -Warkan, I do not think we need to look outside southern Mesopotamia -for their beginnings. We do know something of the adjacent areas, -too, and these beginnings are not there. I think we must accept them -as completely new discoveries, made by the people who were developing -the whole new culture pattern of classic southern Mesopotamia. Full -description of the art, architecture, and writing of the Proto-Literate -phase would call for many details. Men like Professor Jacobsen and Dr. -Adams can give you these details much better than I can. Nor shall I do -more than tell you that the common pottery of the Proto-Literate phase -was so well standardized that it looks factory made. There was also -some handsome painted pottery, and there were stone bowls with inlaid -decoration. Well-made tools in metal had by now become fairly common, -and the metallurgist was experimenting with the casting process. Signs -for plows have been identified in the early pictographs, and a wheeled -chariot is shown on a cylinder seal engraving. But if I were forced to -a guess in the matter, I would say that the development of plows and -draft-animals probably began in the Ubaid period and was another of the -great innovations of that time. - -The Proto-Literate assemblage clearly suggests a highly developed and -sophisticated culture. While perhaps not yet fully urban, it is on -the threshold of urbanization. There seems to have been a very dense -settlement of Proto-Literate sites in classic southern Mesopotamia, -many of them newly founded on virgin soil where no earlier settlements -had been. When we think for a moment of what all this implies, of the -growth of an irrigation system which must have existed to allow the -flourish of this culture, and of the social and political organization -necessary to maintain the irrigation system, I think we will agree that -at last we are dealing with civilization proper. - - -FROM PREHISTORY TO HISTORY - -Now it is time for the conventional ancient historians to take over -the story from me. Remember this when you read what they write. Their -real base-line is with cultures ruled over by later kings and emperors, -whose writings describe military campaigns and the administration of -laws and fully organized trading ventures. To these historians, the -Proto-Literate phase is still a simple beginning for what is to follow. -If they mention the Ubaid assemblage at all--the one I was so lyrical -about--it will be as some dim and fumbling step on the path to the -civilized way of life. - -I suppose you could say that the difference in the approach is that as -a prehistorian I have been looking forward or upward in time, while the -historians look backward to glimpse what I�ve been describing here. My -base-line was half a million years ago with a being who had little more -than the capacity to make tools and fire to distinguish him from the -animals about him. Thus my point of view and that of the conventional -historian are bound to be different. You will need both if you want to -understand all of the story of men, as they lived through time to the -present. - - - - -End of PREHISTORY - -[Illustration] - - -You�ll doubtless easily recall your general course in ancient history: -how the Sumerian dynasties of Mesopotamia were supplanted by those of -Babylonia, how the Hittite kingdom appeared in Anatolian Turkey, and -about the three great phases of Egyptian history. The literate kingdom -of Crete arose, and by 1500 B.C. there were splendid fortified Mycenean -towns on the mainland of Greece. This was the time--about the whole -eastern end of the Mediterranean--of what Professor Breasted called the -�first great internationalism,� with flourishing trade, international -treaties, and royal marriages between Egyptians, Babylonians, and -Hittites. By 1200 B.C., the whole thing had fragmented: �the peoples of -the sea were restless in their isles,� and the great ancient centers in -Egypt, Mesopotamia, and Anatolia were eclipsed. Numerous smaller states -arose--Assyria, Phoenicia, Israel--and the Trojan war was fought. -Finally Assyria became the paramount power of all the Near East, -presently to be replaced by Persia. - -A new culture, partaking of older west Asiatic and Egyptian elements, -but casting them with its own tradition into a new mould, arose in -mainland Greece. - -I once shocked my Classical colleagues to the core by referring to -Greece as �a second degree derived civilization,� but there is much -truth in this. The principles of bronze- and then of iron-working, of -the alphabet, and of many other elements in Greek culture were borrowed -from western Asia. Our debt to the Greeks is too well known for me even -to mention it, beyond recalling to you that it is to Greece we owe the -beginnings of rational or empirical science and thought in general. But -Greece fell in its turn to Rome, and in 55 B.C. Caesar invaded Britain. - -I last spoke of Britain on page 142; I had chosen it as my single -example for telling you something of how the earliest farming -communities were established in Europe. Now I will continue with -Britain�s later prehistory, so you may sense something of the end of -prehistory itself. Remember that Britain is simply a single example -we select; the same thing could be done for all the other countries -of Europe, and will be possible also, some day, for further Asia and -Africa. Remember, too, that prehistory in most of Europe runs on for -three thousand or more years _after_ conventional ancient history -begins in the Near East. Britain is a good example to use in showing -how prehistory ended in Europe. As we said earlier, it lies at the -opposite end of Europe from the area of highest cultural achievement in -those times, and should you care to read more of the story in detail, -you may do so in the English language. - - -METAL USERS REACH ENGLAND - -We left the story of Britain with the peoples who made three different -assemblages--the Windmill Hill, the megalith-builders, and the -Peterborough--making adjustments to their environments, to the original -inhabitants of the island, and to each other. They had first arrived -about 2500 B.C., and were simple pastoralists and hoe cultivators who -lived in little village communities. Some of them planted little if any -grain. By 2000 B.C., they were well settled in. Then, somewhere in the -range from about 1900 to 1800 B.C., the traces of the invasion of a new -series of peoples began to appear. - -The first newcomers are called the Beaker folk, after the name of a -peculiar form of pottery they made. The beaker type of pottery seems -oldest in Spain, where it occurs with great collective tombs of -megalithic construction and with copper tools. But the Beaker folk who -reached England seem already to have moved first from Spain(?) to the -Rhineland and Holland. While in the Rhineland, and before leaving for -England, the Beaker folk seem to have mixed with the local population -and also with incomers from northeastern Europe whose culture included -elements brought originally from the Near East by the eastern way -through the steppes. This last group has also been named for a peculiar -article in its assemblage; the group is called the Battle-axe folk. A -few Battle-axe folk elements, including, in fact, stone battle-axes, -reached England with the earliest Beaker folk,[6] coming from the -Rhineland. - - [6] The British authors use the term �Beaker folk� to mean both - archeological assemblage and human physical type. They speak - of a �... tall, heavy-boned, rugged, and round-headed� strain - which they take to have developed, apparently in the Rhineland, - by a mixture of the original (Spanish?) beaker-makers and - the northeast European battle-axe makers. However, since the - science of physical anthropology is very much in flux at the - moment, and since I am not able to assess the evidence for these - physical types, I _do not_ use the term �folk� in this book with - its usual meaning of standardized physical type. When I use - �folk� here, I mean simply _the makers of a given archeological - assemblage_. The difficulty only comes when assemblages are - named for some item in them; it is too clumsy to make an - adjective of the item and refer to a �beakerian� assemblage. - -The Beaker folk settled earliest in the agriculturally fertile south -and east. There seem to have been several phases of Beaker folk -invasions, and it is not clear whether these all came strictly from the -Rhineland or Holland. We do know that their copper daggers and awls -and armlets are more of Irish or Atlantic European than of Rhineland -origin. A few simple habitation sites and many burials of the Beaker -folk are known. They buried their dead singly, sometimes in conspicuous -individual barrows with the dead warrior in his full trappings. The -spectacular element in the assemblage of the Beaker folk is a group -of large circular monuments with ditches and with uprights of wood or -stone. These �henges� became truly monumental several hundred years -later; while they were occasionally dedicated with a burial, they were -not primarily tombs. The effect of the invasion of the Beaker folk -seems to cut across the whole fabric of life in Britain. - -[Illustration: BEAKER] - -There was, however, a second major element in British life at this -time. It shows itself in the less well understood traces of a group -again called after one of the items in their catalogue, the Food-vessel -folk. There are many burials in these �food-vessel� pots in northern -England, Scotland, and Ireland, and the pottery itself seems to -link back to that of the Peterborough assemblage. Like the earlier -Peterborough people in the highland zone before them, the makers of -the food-vessels seem to have been heavily involved in trade. It is -quite proper to wonder whether the food-vessel pottery itself was made -by local women who were married to traders who were middlemen in the -transmission of Irish metal objects to north Germany and Scandinavia. -The belt of high, relatively woodless country, from southwest to -northeast, was already established as a natural route for inland trade. - - -MORE INVASIONS - -About 1500 B.C., the situation became further complicated by the -arrival of new people in the region of southern England anciently -called Wessex. The traces suggest the Brittany coast of France as a -source, and the people seem at first to have been a small but �heroic� -group of aristocrats. Their �heroes� are buried with wealth and -ceremony, surrounded by their axes and daggers of bronze, their gold -ornaments, and amber and jet beads. These rich finds show that the -trade-linkage these warriors patronized spread from the Baltic sources -of amber to Mycenean Greece or even Egypt, as evidenced by glazed blue -beads. - -The great visual trace of Wessex achievement is the final form of -the spectacular sanctuary at Stonehenge. A wooden henge or circular -monument was first made several hundred years earlier, but the site -now received its great circles of stone uprights and lintels. The -diameter of the surrounding ditch at Stonehenge is about 350 feet, the -diameter of the inner circle of large stones is about 100 feet, and -the tallest stone of the innermost horseshoe-shaped enclosure is 29 -feet 8 inches high. One circle is made of blue stones which must have -been transported from Pembrokeshire, 145 miles away as the crow flies. -Recently, many carvings representing the profile of a standard type of -bronze axe of the time, and several profiles of bronze daggers--one of -which has been called Mycenean in type--have been found carved in the -stones. We cannot, of course, describe the details of the religious -ceremonies which must have been staged in Stonehenge, but we can -certainly imagine the well-integrated and smoothly working culture -which must have been necessary before such a great monument could have -been built. - - -�THIS ENGLAND� - -The range from 1900 to about 1400 B.C. includes the time of development -of the archeological features usually called the �Early Bronze Age� -in Britain. In fact, traces of the Wessex warriors persisted down to -about 1200 B.C. The main regions of the island were populated, and the -adjustments to the highland and lowland zones were distinct and well -marked. The different aspects of the assemblages of the Beaker folk and -the clearly expressed activities of the Food-vessel folk and the Wessex -warriors show that Britain was already taking on her characteristic -trading role, separated from the European continent but conveniently -adjacent to it. The tin of Cornwall--so important in the production -of good bronze--as well as the copper of the west and of Ireland, -taken with the gold of Ireland and the general excellence of Irish -metal work, assured Britain a trader�s place in the then known world. -Contacts with the eastern Mediterranean may have been by sea, with -Cornish tin as the attraction, or may have been made by the Food-vessel -middlemen on their trips to the Baltic coast. There they would have -encountered traders who traveled the great north-south European road, -by which Baltic amber moved southward to Greece and the Levant, and -ideas and things moved northward again. - -There was, however, the Channel between England and Europe, and this -relative isolation gave some peace and also gave time for a leveling -and further fusion of culture. The separate cultural traditions began -to have more in common. The growing of barley, the herding of sheep and -cattle, and the production of woolen garments were already features -common to all Britain�s inhabitants save a few in the remote highlands, -the far north, and the distant islands not yet fully touched by -food-production. The �personality of Britain� was being formed. - - -CREMATION BURIALS BEGIN - -Along with people of certain religious faiths, archeologists are -against cremation (for other people!). Individuals to be cremated seem -in past times to have been dressed in their trappings and put upon a -large pyre: it takes a lot of wood and a very hot fire for a thorough -cremation. When the burning had been completed, the few fragile scraps -of bone and such odd beads of stone or other rare items as had resisted -the great heat seem to have been whisked into a pot and the pot buried. -The archeologist is left with the pot and the unsatisfactory scraps in -it. - -Tentatively, after about 1400 B.C. and almost completely over the whole -island by 1200 B.C., Britain became the scene of cremation burials -in urns. We know very little of the people themselves. None of their -settlements have been identified, although there is evidence that they -grew barley and made enclosures for cattle. The urns used for the -burials seem to have antecedents in the pottery of the Food-vessel -folk, and there are some other links with earlier British traditions. -In Lancashire, a wooden circle seems to have been built about a grave -with cremated burials in urns. Even occasional instances of cremation -may be noticed earlier in Britain, and it is not clear what, if any, -connection the British cremation burials in urns have with the classic -_Urnfields_ which were now beginning in the east Mediterranean and -which we shall mention below. - -The British cremation-burial-in-urns folk survived a long time in the -highland zone. In the general British scheme, they make up what is -called the �Middle Bronze Age,� but in the highland zone they last -until after 900 B.C. and are considered to be a specialized highland -�Late Bronze Age.� In the highland zone, these later cremation-burial -folk seem to have continued the older Food-vessel tradition of being -middlemen in the metal market. - -Granting that our knowledge of this phase of British prehistory is -very restricted because the cremations have left so little for the -archeologist, it does not appear that the cremation-burial-urn folk can -be sharply set off from their immediate predecessors. But change on a -grander scale was on the way. - - -REVERBERATIONS FROM CENTRAL EUROPE - -In the centuries immediately following 1000 B.C., we see with fair -clarity two phases of a cultural process which must have been going -on for some time. Certainly several of the invasions we have already -described in this chapter were due to earlier phases of the same -cultural process, but we could not see the details. - -[Illustration: SLASHING SWORD] - -Around 1200 B.C. central Europe was upset by the spread of the -so-called Urnfield folk, who practiced cremation burial in urns and -whom we also know to have been possessors of long, slashing swords and -the horse. I told you above that we have no idea that the Urnfield -folk proper were in any way connected with the people who made -cremation-burial-urn cemeteries a century or so earlier in Britain. It -has been supposed that the Urnfield folk themselves may have shared -ideas with the people who sacked Troy. We know that the Urnfield -pressure from central Europe displaced other people in northern France, -and perhaps in northwestern Germany, and that this reverberated into -Britain about 1000 B.C. - -Soon after 750 B.C., the same thing happened again. This time, the -pressure from central Europe came from the Hallstatt folk who were iron -tool makers: the reverberation brought people from the western Alpine -region across the Channel into Britain. - -At first it is possible to see the separate results of these folk -movements, but the developing cultures soon fused with each other and -with earlier British elements. Presently there were also strains of -other northern and western European pottery and traces of Urnfield -practices themselves which appeared in the finished British product. I -hope you will sense that I am vastly over-simplifying the details. - -The result seems to have been--among other things--a new kind of -agricultural system. The land was marked off by ditched divisions. -Rectangular fields imply the plow rather than hoe cultivation. We seem -to get a picture of estate or tribal boundaries which included village -communities; we find a variety of tools in bronze, and even whetstones -which show that iron has been honed on them (although the scarce iron -has not been found). Let me give you the picture in Professor S. -Piggott�s words: �The ... Late Bronze Age of southern England was but -the forerunner of the earliest Iron Age in the same region, not only in -the techniques of agriculture, but almost certainly in terms of ethnic -kinship ... we can with some assurance talk of the Celts ... the great -early Celtic expansion of the Continent is recognized to be that of the -Urnfield people.� - -Thus, certainly by 500 B.C., there were people in Britain, some of -whose descendants we may recognize today in name or language in remote -parts of Wales, Scotland, and the Hebrides. - - -THE COMING OF IRON - -Iron--once the know-how of reducing it from its ore in a very hot, -closed fire has been achieved--produces a far cheaper and much more -efficient set of tools than does bronze. Iron tools seem first to -have been made in quantity in Hittite Anatolia about 1500 B.C. In -continental Europe, the earliest, so-called Hallstatt, iron-using -cultures appeared in Germany soon after 750 B.C. Somewhat later, -Greek and especially Etruscan exports of _objets d�art_--which moved -with a flourishing trans-Alpine wine trade--influenced the Hallstatt -iron-working tradition. Still later new classical motifs, together with -older Hallstatt, oriental, and northern nomad motifs, gave rise to a -new style in metal decoration which characterizes the so-called La T�ne -phase. - -A few iron users reached Britain a little before 400 B.C. Not long -after that, a number of allied groups appeared in southern and -southeastern England. They came over the Channel from France and must -have been Celts with dialects related to those already in England. A -second wave of Celts arrived from the Marne district in France about -250 B.C. Finally, in the second quarter of the first century B.C., -there were several groups of newcomers, some of whom were Belgae of -a mixed Teutonic-Celtic confederacy of tribes in northern France and -Belgium. The Belgae preceded the Romans by only a few years. - - -HILL-FORTS AND FARMS - -The earliest iron-users seem to have entrenched themselves temporarily -within hill-top forts, mainly in the south. Gradually, they moved -inland, establishing _individual_ farm sites with extensive systems -of rectangular fields. We recognize these fields by the �lynchets� or -lines of soil-creep which plowing left on the slopes of hills. New -crops appeared; there were now bread wheat, oats, and rye, as well as -barley. - -At Little Woodbury, near the town of Salisbury, a farmstead has been -rather completely excavated. The rustic buildings were within a -palisade, the round house itself was built of wood, and there were -various outbuildings and pits for the storage of grain. Weaving was -done on the farm, but not blacksmithing, which must have been a -specialized trade. Save for the lack of firearms, the place might -almost be taken for a farmstead on the American frontier in the early -1800�s. - -Toward 250 B.C. there seems to have been a hasty attempt to repair the -hill-forts and to build new ones, evidently in response to signs of -restlessness being shown by remote relatives in France. - - -THE SECOND PHASE - -Perhaps the hill-forts were not entirely effective or perhaps a -compromise was reached. In any case, the newcomers from the Marne -district did establish themselves, first in the southeast and then to -the north and west. They brought iron with decoration of the La T�ne -type and also the two-wheeled chariot. Like the Wessex warriors of -over a thousand years earlier, they made �heroes�� graves, with their -warriors buried in the war-chariots and dressed in full trappings. - -[Illustration: CELTIC BUCKLE] - -The metal work of these Marnian newcomers is excellent. The peculiar -Celtic art style, based originally on the classic tendril motif, -is colorful and virile, and fits with Greek and Roman descriptions -of Celtic love of color in dress. There is a strong trace of these -newcomers northward in Yorkshire, linked by Ptolemy�s description to -the Parisii, doubtless part of the Celtic tribe which originally gave -its name to Paris on the Seine. Near Glastonbury, in Somerset, two -villages in swamps have been excavated. They seem to date toward the -middle of the first century B.C., which was a troubled time in Britain. -The circular houses were built on timber platforms surrounded with -palisades. The preservation of antiquities by the water-logged peat of -the swamp has yielded us a long catalogue of the materials of these -villagers. - -In Scotland, which yields its first iron tools at a date of about 100 -B.C., and in northern Ireland even slightly earlier, the effects of the -two phases of newcomers tend especially to blend. Hill-forts, �brochs� -(stone-built round towers) and a variety of other strange structures -seem to appear as the new ideas develop in the comparative isolation of -northern Britain. - - -THE THIRD PHASE - -For the time of about the middle of the first century B.C., we again -see traces of frantic hill-fort construction. This simple military -architecture now took some new forms. Its multiple ramparts must -reflect the use of slings as missiles, rather than spears. We probably -know the reason. In 56 B.C., Julius Caesar chastised the Veneti of -Brittany for outraging the dignity of Roman ambassadors. The Veneti -were famous slingers, and doubtless the reverberations of escaping -Veneti were felt across the Channel. The military architecture suggests -that some Veneti did escape to Britain. - -Also, through Caesar, we learn the names of newcomers who arrived in -two waves, about 75 B.C. and about 50 B.C. These were the Belgae. Now, -at last, we can even begin to speak of dynasties and individuals. -Some time before 55 B.C., the Catuvellauni, originally from the Marne -district in France, had possessed themselves of a large part of -southeastern England. They evidently sailed up the Thames and built a -town of over a hundred acres in area. Here ruled Cassivellaunus, �the -first man in England whose name we know,� and whose town Caesar sacked. -The town sprang up elsewhere again, however. - - -THE END OF PREHISTORY - -Prehistory, strictly speaking, is now over in southern Britain. -Claudius� effective invasion took place in 43 A.D.; by 83 A.D., a raid -had been made as far north as Aberdeen in Scotland. But by 127 A.D., -Hadrian had completed his wall from the Solway to the Tyne, and the -Romans settled behind it. In Scotland, Romanization can have affected -the countryside very little. Professor Piggott adds that �... it is -when the pressure of Romanization is relaxed by the break-up of the -Dark Ages that we see again the Celtic metal-smiths handling their -material with the same consummate skill as they had before the Roman -Conquest, and with traditional styles that had not even then forgotten -their Marnian and Belgic heritage.� - -In fact, many centuries go by, in Britain as well as in the rest of -Europe, before the archeologist�s task is complete and the historian on -his own is able to describe the ways of men in the past. - - -BRITAIN AS A SAMPLE OF THE GENERAL COURSE OF PREHISTORY IN EUROPE - -In giving this very brief outline of the later prehistory of Britain, -you will have noticed how often I had to refer to the European -continent itself. Britain, beyond the English Channel for all of her -later prehistory, had a much simpler course of events than did most of -the rest of Europe in later prehistoric times. This holds, in spite -of all the �invasions� and �reverberations� from the continent. Most -of Europe was the scene of an even more complicated ebb and flow of -cultural change, save in some of its more remote mountain valleys and -peninsulas. - -The whole course of later prehistory in Europe is, in fact, so very -complicated that there is no single good book to cover it all; -certainly there is none in English. There are some good regional -accounts and some good general accounts of part of the range from about -3000 B.C. to A.D. 1. I suspect that the difficulty of making a good -book that covers all of its later prehistory is another aspect of what -makes Europe so very complicated a continent today. The prehistoric -foundations for Europe�s very complicated set of civilizations, -cultures, and sub-cultures--which begin to appear as history -proceeds--were in themselves very complicated. - -Hence, I selected the case of Britain as a single example of how -prehistory ends in Europe. It could have been more complicated than we -found it to be. Even in the subject matter on Britain in the chapter -before the last, we did not see direct traces of the effect on Britain -of the very important developments which took place in the Danubian -way from the Near East. Apparently Britain was not affected. Britain -received the impulses which brought copper, bronze, and iron tools from -an original east Mediterranean homeland into Europe, almost at the ends -of their journeys. But by the same token, they had had time en route to -take on their characteristic European aspects. - -Some time ago, Sir Cyril Fox wrote a famous book called _The -Personality of Britain_, sub-titled �Its Influence on Inhabitant and -Invader in Prehistoric and Early Historic Times.� We have not gone -into the post-Roman early historic period here; there are still the -Anglo-Saxons and Normans to account for as well as the effects of -the Romans. But what I have tried to do was to begin the story of -how the personality of Britain was formed. The principles that Fox -used, in trying to balance cultural and environmental factors and -interrelationships would not be greatly different for other lands. - - - - -Summary - -[Illustration] - - -In the pages you have read so far, you have been brought through the -earliest 99 per cent of the story of man�s life on this planet. I have -left only 1 per cent of the story for the historians to tell. - - -THE DRAMA OF THE PAST - -Men first became men when evolution had carried them to a certain -point. This was the point where the eye-hand-brain co-ordination was -good enough so that tools could be made. When tools began to be made -according to sets of lasting habits, we know that men had appeared. -This happened over a half million years ago. The stage for the play -may have been as broad as all of Europe, Africa, and Asia. At least, -it seems unlikely that it was only one little region that saw the -beginning of the drama. - -Glaciers and different climates came and went, to change the settings. -But the play went on in the same first act for a very long time. The -men who were the players had simple roles. They had to feed themselves -and protect themselves as best they could. They did this by hunting, -catching, and finding food wherever they could, and by taking such -protection as caves, fire, and their simple tools would give them. -Before the first act was over, the last of the glaciers was melting -away, and the players had added the New World to their stage. If -we want a special name for the first act, we could call it _The -Food-Gatherers_. - -There were not many climaxes in the first act, so far as we can see. -But I think there may have been a few. Certainly the pace of the -first act accelerated with the swing from simple gathering to more -intensified collecting. The great cave art of France and Spain was -probably an expression of a climax. Even the ideas of burying the dead -and of the �Venus� figurines must also point to levels of human thought -and activity that were over and above pure food-getting. - - -THE SECOND ACT - -The second act began only about ten thousand years ago. A few of the -players started it by themselves near the center of the Old World part -of the stage, in the Near East. It began as a plant and animal act, but -it soon became much more complicated. - -But the players in this one part of the stage--in the Near East--were -not the only ones to start off on the second act by themselves. Other -players, possibly in several places in the Far East, and certainly in -the New World, also started second acts that began as plant and animal -acts, and then became complicated. We can call the whole second act -_The Food-Producers_. - - -THE FIRST GREAT CLIMAX OF THE SECOND ACT - -In the Near East, the first marked climax of the second act happened -in Mesopotamia and Egypt. The play and the players reached that great -climax that we call civilization. This seems to have come less than -five thousand years after the second act began. But it could never have -happened in the first act at all. - -There is another curious thing about the first act. Many of the players -didn�t know it was over and they kept on with their roles long after -the second act had begun. On the edges of the stage there are today -some players who are still going on with the first act. The Eskimos, -and the native Australians, and certain tribes in the Amazon jungle are -some of these players. They seem perfectly happy to keep on with the -first act. - -The second act moved from climax to climax. The civilizations of -Mesopotamia and Egypt were only the earliest of these climaxes. The -players to the west caught the spirit of the thing, and climaxes -followed there. So also did climaxes come in the Far Eastern and New -World portions of the stage. - -The greater part of the second act should really be described to you -by a historian. Although it was a very short act when compared to the -first one, the climaxes complicate it a great deal. I, a prehistorian, -have told you about only the first act, and the very beginning of the -second. - - -THE THIRD ACT - -Also, as a prehistorian I probably should not even mention the third -act--it began so recently. The third act is _The Industrialization_. -It is the one in which we ourselves are players. If the pace of the -second act was so much faster than that of the first, the pace of the -third act is terrific. The danger is that it may wear down the players -completely. - -What sort of climaxes will the third act have, and are we already in -one? You have seen by now that the acts of my play are given in terms -of modes or basic patterns of human economy--ways in which people -get food and protection and safety. The climaxes involve more than -human economy. Economics and technological factors may be part of the -climaxes, but they are not all. The climaxes may be revolutions in -their own way, intellectual and social revolutions if you like. - -If the third act follows the pattern of the second act, a climax should -come soon after the act begins. We may be due for one soon if we are -not already in it. Remember the terrific pace of this third act. - - -WHY BOTHER WITH PREHISTORY? - -Why do we bother about prehistory? The main reason is that we think it -may point to useful ideas for the present. We are in the troublesome -beginnings of the third act of the play. The beginnings of the second -act may have lessons for us and give depth to our thinking. I know -there are at least _some_ lessons, even in the present incomplete -state of our knowledge. The players who began the second act--that of -food-production--separately, in different parts of the world, were not -all of one �pure race� nor did they have �pure� cultural traditions. -Some apparently quite mixed Mediterraneans got off to the first start -on the second act and brought it to its first two climaxes as well. -Peoples of quite different physical type achieved the first climaxes in -China and in the New World. - -In our British example of how the late prehistory of Europe worked, we -listed a continuous series of �invasions� and �reverberations.� After -each of these came fusion. Even though the Channel protected Britain -from some of the extreme complications of the mixture and fusion of -continental Europe, you can see how silly it would be to refer to a -�pure� British race or a �pure� British culture. We speak of the United -States as a �melting pot.� But this is nothing new. Actually, Britain -and all the rest of the world have been �melting pots� at one time or -another. - -By the time the written records of Mesopotamia and Egypt begin to turn -up in number, the climaxes there are well under way. To understand the -beginnings of the climaxes, and the real beginnings of the second act -itself, we are thrown back on prehistoric archeology. And this is as -true for China, India, Middle America, and the Andes, as it is for the -Near East. - -There are lessons to be learned from all of man�s past, not simply -lessons of how to fight battles or win peace conferences, but of how -human society evolves from one stage to another. Many of these lessons -can only be looked for in the prehistoric past. So far, we have only -made a beginning. There is much still to do, and many gaps in the story -are yet to be filled. The prehistorian�s job is to find the evidence, -to fill the gaps, and to discover the lessons men have learned in the -past. As I see it, this is not only an exciting but a very practical -goal for which to strive. - - - - -List of Books - - -BOOKS OF GENERAL INTEREST - -(Chosen from a variety of the increasingly useful list of cheap -paperbound books.) - - Childe, V. Gordon - _What Happened in History._ 1954. Penguin. - _Man Makes Himself._ 1955. Mentor. - _The Prehistory of European Society._ 1958. Penguin. - - Dunn, L. C., and Dobzhansky, Th. - _Heredity, Race, and Society._ 1952. Mentor. - - Frankfort, Henri, Frankfort, H. A., Jacobsen, Thorkild, and Wilson, - John A. - _Before Philosophy._ 1954. Penguin. - - Simpson, George G. - _The Meaning of Evolution._ 1955. Mentor. - - Wheeler, Sir Mortimer - _Archaeology from the Earth._ 1956. Penguin. - - -GEOCHRONOLOGY AND THE ICE AGE - -(Two general books. Some Pleistocene geologists disagree with Zeuner�s -interpretation of the dating evidence, but their points of view appear -in professional journals, in articles too cumbersome to list here.) - - Flint, R. F. - _Glacial Geology and the Pleistocene Epoch._ 1947. John Wiley - and Sons. - - Zeuner, F. E. - _Dating the Past._ 1952 (3rd ed.). Methuen and Co. - - -FOSSIL MEN AND RACE - -(The points of view of physical anthropologists and human -paleontologists are changing very quickly. Two of the different points -of view are listed here.) - - Clark, W. E. Le Gros - _History of the Primates._ 1956 (5th ed.). British Museum - (Natural History). (Also in Phoenix edition, 1957.) - - Howells, W. W. - _Mankind So Far._ 1944. Doubleday, Doran. - - -GENERAL ANTHROPOLOGY - -(These are standard texts not absolutely up to date in every detail, or -interpretative essays concerned with cultural change through time as -well as in space.) - - Kroeber, A. L. - _Anthropology._ 1948. Harcourt, Brace. - - Linton, Ralph - _The Tree of Culture._ 1955. Alfred A. Knopf, Inc. - - Redfield, Robert - _The Primitive World and Its Transformations._ 1953. Cornell - University Press. - - Steward, Julian H. - _Theory of Culture Change._ 1955. University of Illinois Press. - - White, Leslie - _The Science of Culture._ 1949. Farrar, Strauss. - - -GENERAL PREHISTORY - -(A sampling of the more useful and current standard works in English.) - - Childe, V. Gordon - _The Dawn of European Civilization._ 1957. Kegan Paul, Trench, - Trubner. - _Prehistoric Migrations in Europe._ 1950. Instituttet for - Sammenlignende Kulturforskning. - - Clark, Grahame - _Archaeology and Society._ 1957. Harvard University Press. - - Clark, J. G. D. - _Prehistoric Europe: The Economic Basis._ 1952. Methuen and Co. - - Garrod, D. A. E. - _Environment, Tools, and Man._ 1946. Cambridge University - Press. - - Movius, Hallam L., Jr. - �Old World Prehistory: Paleolithic� in _Anthropology Today_. - Kroeber, A. L., ed. 1953. University of Chicago Press. - - Oakley, Kenneth P. - _Man the Tool-Maker._ 1956. British Museum (Natural History). - (Also in Phoenix edition, 1957.) - - Piggott, Stuart - _British Prehistory._ 1949. Oxford University Press. - - Pittioni, Richard - _Die Urgeschichtlichen Grundlagen der Europ�ischen Kultur._ - 1949. Deuticke. (A single book which does attempt to cover the - whole range of European prehistory to ca. 1 A.D.) - - -THE NEAR EAST - - Adams, Robert M. - �Developmental Stages in Ancient Mesopotamia,� _in_ Steward, - Julian, _et al_, _Irrigation Civilizations: A Comparative - Study_. 1955. Pan American Union. - - Braidwood, Robert J. - _The Near East and the Foundations for Civilization._ 1952. - University of Oregon. - - Childe, V. Gordon - _New Light on the Most Ancient East._ 1952. Oriental Dept., - Routledge and Kegan Paul. - - Frankfort, Henri - _The Birth of Civilization in the Near East._ 1951. University - of Indiana Press. (Also in Anchor edition, 1956.) - - Pallis, Svend A. - _The Antiquity of Iraq._ 1956. Munksgaard. - - Wilson, John A. - _The Burden of Egypt._ 1951. University of Chicago Press. (Also - in Phoenix edition, called _The Culture of Ancient Egypt_, - 1956.) - - -HOW DIGGING IS DONE - - Braidwood, Linda - _Digging beyond the Tigris._ 1953. Schuman, New York. - - Wheeler, Sir Mortimer - _Archaeology from the Earth._ 1954. Oxford, London. - - - - -Index - - - Abbevillian, 48; - core-biface tool, 44, 48 - - Acheulean, 48, 60 - - Acheuleo-Levalloisian, 63 - - Acheuleo-Mousterian, 63 - - Adams, R. M., 106 - - Adzes, 45 - - Africa, east, 67, 89; - north, 70, 89; - south, 22, 25, 34, 40, 67 - - Agriculture, incipient, in England, 140; - in Near East, 123 - - Ain Hanech, 48 - - Amber, taken from Baltic to Greece, 167 - - American Indians, 90, 142 - - Anatolia, used as route to Europe, 138 - - Animals, in caves, 54, 64; - in cave art, 85 - - Antevs, Ernst, 19 - - Anyathian, 47 - - Archeological interpretation, 8 - - Archeology, defined, 8 - - Architecture, at Jarmo, 128; - at Jericho, 133 - - Arrow, points, 94; - shaft straightener, 83 - - Art, in caves, 84; - East Spanish, 85; - figurines, 84; - Franco-Cantabrian, 84, 85; - movable (engravings, modeling, scratchings), 83; - painting, 83; - sculpture, 83 - - Asia, western, 67 - - Assemblage, defined, 13, 14; - European, 94; - Jarmo, 129; - Maglemosian, 94; - Natufian, 113 - - Aterian, industry, 67; - point, 89 - - Australopithecinae, 24 - - Australopithecine, 25, 26 - - Awls, 77 - - Axes, 62, 94 - - Ax-heads, 15 - - Azilian, 97 - - Aztecs, 145 - - - Baghouz, 152 - - Bakun, 134 - - Baltic sea, 93 - - Banana, 107 - - Barley, wild, 108 - - Barrow, 141 - - Battle-axe folk, 164; - assemblage, 164 - - Beads, 80; - bone, 114 - - Beaker folk, 164; - assemblage, 164-165 - - Bear, in cave art, 85; - cult, 68 - - Belgium, 94 - - Belt cave, 126 - - Bering Strait, used as route to New World, 98 - - Bison, in cave art, 85 - - Blade, awl, 77; - backed, 75; - blade-core, 71; - end-scraper, 77; - stone, defined, 71; - strangulated (notched), 76; - tanged point, 76; - tools, 71, 75-80, 90; - tool tradition, 70 - - Boar, wild, in cave art, 85 - - Bogs, source of archeological materials, 94 - - Bolas, 54 - - Bordes, Fran�ois, 62 - - Borer, 77 - - Boskop skull, 34 - - Boyd, William C., 35 - - Bracelets, 118 - - Brain, development of, 24 - - Breadfruit, 107 - - Breasted, James H., 107 - - Brick, at Jericho, 133 - - Britain, 94; - late prehistory, 163-175; - invaders, 173 - - Broch, 172 - - Buffalo, in China, 54; - killed by stampede, 86 - - Burials, 66, 86; - in �henges,� 164; - in urns, 168 - - Burins, 75 - - Burma, 90 - - Byblos, 134 - - - Camel, 54 - - Cannibalism, 55 - - Cattle, wild, 85, 112; - in cave art, 85; - domesticated, 15; - at Skara Brae, 142 - - Caucasoids, 34 - - Cave men, 29 - - Caves, 62; - art in, 84 - - Celts, 170 - - Chariot, 160 - - Chicken, domestication of, 107 - - Chiefs, in food-gathering groups, 68 - - Childe, V. Gordon, 8 - - China, 136 - - Choukoutien, 28, 35 - - Choukoutienian, 47 - - Civilization, beginnings, 144, 149, 157; - meaning of, 144 - - Clactonian, 45, 47 - - Clay, used in modeling, 128; - baked, used for tools, 153 - - Club-heads, 82, 94 - - Colonization, in America, 142; - in Europe, 142 - - Combe Capelle, 30 - - Combe Capelle-Br�nn group, 34 - - Commont, Victor, 51 - - Coon, Carlton S., 73 - - Copper, 134 - - Corn, in America, 145 - - Corrals for cattle, 140 - - �Cradle of mankind,� 136 - - Cremation, 167 - - Crete, 162 - - Cro-Magnon, 30, 34 - - Cultivation, incipient, 105, 109, 111 - - Culture, change, 99; - characteristics, defined, 38, 49; - prehistoric, 39 - - - Danube Valley, used as route from Asia, 138 - - Dates, 153 - - Deer, 54, 96 - - Dog, domesticated, 96 - - Domestication, of animals, 100, 105, 107; - of plants, 100 - - �Dragon teeth� fossils in China, 28 - - Drill, 77 - - Dubois, Eugene, 26 - - - Early Dynastic Period, Mesopotamia, 147 - - East Spanish art, 72, 85 - - Egypt, 70, 126 - - Ehringsdorf, 31 - - Elephant, 54 - - Emiliani, Cesare, 18 - - Emiran flake point, 73 - - England, 163-168; - prehistoric, 19, 40; - farmers in, 140 - - Eoanthropus dawsoni, 29 - - Eoliths, 41 - - Erich, 152 - - Eridu, 152 - - Euphrates River, floods in, 148 - - Europe, cave dwellings, 58; - at end of Ice Age, 93; - early farmers, 140; - glaciers in, 40; - huts in, 86; - routes into, 137-140; - spread of food-production to, 136 - - - Far East, 69, 90 - - Farmers, 103 - - Fauresmith industry, 67 - - Fayum, 135; - radiocarbon date, 146 - - �Fertile Crescent,� 107, 146 - - Figurines, �Venus,� 84; - at Jarmo, 128; - at Ubaid, 153 - - Fire, used by Peking man, 54 - - First Dynasty, Egypt, 147 - - Fish-hooks, 80, 94 - - Fishing, 80; - by food-producers, 122 - - Fish-lines, 80 - - Fish spears, 94 - - Flint industry, 127 - - Font�chevade, 32, 56, 58 - - Food-collecting, 104, 121; - end of, 104 - - Food-gatherers, 53, 176 - - Food-gathering, 99, 104; - in Old World, 104; - stages of, 104 - - Food-producers, 176 - - Food-producing economy, 122; - in America, 145; - in Asia, 105 - - Food-producing revolution, 99, 105; - causes of, 101; - preconditions for, 100 - - Food-production, beginnings of, 99; - carried to Europe, 110 - - Food-vessel folk, 164 - - �Forest folk,� 97, 98, 104, 110 - - Fox, Sir Cyril, 174 - - France, caves in, 56 - - - Galley Hill (fossil type), 29 - - Garrod, D. A., 73 - - Gazelle, 114 - - Germany, 94 - - Ghassul, 156 - - Glaciers, 18, 30; - destruction by, 40 - - Goat, wild, 108; - domesticated, 128 - - Grain, first planted, 20 - - Graves, passage, 141; - gallery, 141 - - Greece, civilization in, 163; - as route to western Europe, 138; - towns in, 162 - - Grimaldi skeletons, 34 - - - Hackberry seeds used as food, 55 - - Halaf, 151; - assemblage, 151 - - Hallstatt, tradition, 169 - - Hand, development of, 24, 25 - - Hand adzes, 46 - - Hand axes, 44 - - Harpoons, antler, 83, 94; - bone, 82, 94 - - Hassuna, 131; - assemblage, 131, 132 - - Heidelberg, fossil type, 28 - - Hill-forts, in England, 171; - in Scotland, 172 - - Hilly flanks of Near East, 107, 108, 125, 131, 146, 147 - - History, beginning of, 7, 17 - - Hoes, 112 - - Holland, 164 - - Homo sapiens, 32 - - Hooton, E. A., 34 - - Horse, 112; - wild, in cave art, 85; - in China, 54 - - Hotu cave, 126 - - Houses, 122; - at Jarmo, 128; - at Halaf, 151 - - Howe, Bruce, 116 - - Howell, F. Clark, 30 - - Hunting, 93 - - - Ice Age, in Asia, 99; - beginning of, 18; - glaciers in, 41; - last glaciation, 93 - - Incas, 145 - - India, 90, 136 - - Industrialization, 178 - - Industry, blade-tool, 88; - defined, 58; - ground stone, 94 - - Internationalism, 162 - - Iran, 107, 147 - - Iraq, 107, 124, 127, 136, 147 - - Iron, introduction of, 170 - - Irrigation, 123, 149, 155 - - Italy, 138 - - - Jacobsen, T. J., 157 - - Jarmo, 109, 126, 128, 130; - assemblage, 129 - - Java, 23, 29 - - Java man, 26, 27, 29 - - Jefferson, Thomas, 11 - - Jericho, 119, 133 - - Judaidah, 134 - - - Kafuan, 48 - - Kanam, 23, 36 - - Karim Shahir, 116-119, 124; - assemblage, 116, 117 - - Keith, Sir Arthur, 33 - - Kelley, Harper, 51 - - Kharga, 126 - - Khartoum, 136 - - Knives, 80 - - Krogman, W. M., 3, 25 - - - Lamps, 85 - - Land bridges in Mediterranean, 19 - - La T�ne phase, 170 - - Laurel leaf point, 78, 89 - - Leakey, L. S. B., 40 - - Le Moustier, 57 - - Levalloisian, 47, 61, 62 - - Levalloiso-Mousterian, 47, 63 - - Little Woodbury, 170 - - - Magic, used by hunters, 123 - - Maglemosian, assemblage, 94, 95; - folk, 98 - - Makapan, 40 - - Mammoth, 93; - in cave art, 85 - - �Man-apes,� 26 - - Mango, 107 - - Mankind, age, 17 - - Maringer, J., 45 - - Markets, 155 - - Marston, A. T., 11 - - Mathiassen, T., 97 - - McCown, T. D., 33 - - Meganthropus, 26, 27, 36 - - Men, defined, 25; - modern, 32 - - Merimde, 135 - - Mersin, 133 - - Metal-workers, 160, 163, 167, 172 - - Micoquian, 48, 60 - - Microliths, 87; - at Jarmo, 130; - �lunates,� 87; - trapezoids, 87; - triangles, 87 - - Minerals used as coloring matter, 66 - - Mine-shafts, 140 - - M�lefaat, 126, 127 - - Mongoloids, 29, 90 - - Mortars, 114, 118, 127 - - Mounds, how formed, 12 - - Mount Carmel, 11, 33, 52, 59, 64, 69, 113, 114 - - �Mousterian man,� 64 - - �Mousterian� tools, 61, 62; - of Acheulean tradition, 62 - - Movius, H. L., 47 - - - Natufian, animals in, 114; - assemblage, 113, 114, 115; - burials, 114; - date of, 113 - - Neanderthal man, 29, 30, 31, 56 - - Near East, beginnings of civilization in, 20, 144; - cave sites, 58; - climate in Ice Age, 99; - �Fertile Crescent,� 107, 146; - food-production in, 99; - Natufian assemblage in, 113-115; - stone tools, 114 - - Needles, 80 - - Negroid, 34 - - New World, 90 - - Nile River valley, 102, 134; - floods in, 148 - - Nuclear area, 106, 110; - in Near East, 107 - - - Obsidian, used for blade tools, 71; - at Jarmo, 130 - - Ochre, red, with burials, 86 - - Oldowan, 48 - - Old World, 67, 70, 90; - continental phases in, 18 - - Olorgesailie, 40, 51 - - Ostrich, in China, 54 - - Ovens, 128 - - Oxygen isotopes, 18 - - - Paintings in caves, 83 - - Paleoanthropic man, 50 - - Palestine, burials, 56; - cave sites, 52; - types of man, 69 - - Parpallo, 89 - - Patjitanian, 45, 47 - - Pebble tools, 42 - - Peking cave, 54; - animals in, 54 - - Peking man, 27, 28, 29, 54, 58 - - Pendants, 80; - bone, 114 - - Pestle, 114 - - Peterborough, 141; - assemblage, 141 - - Pictographic signs, 158 - - Pig, wild, 108 - - �Piltdown man,� 29 - - Pins, 80 - - Pithecanthropus, 26, 27, 30, 36 - - Pleistocene, 18, 25 - - Plows developed, 123 - - Points, arrow, 76; - laurel leaf, 78; - shouldered, 78, 79; - split-based bone, 80, 82; - tanged, 76; - willow leaf, 78 - - Potatoes, in America, 145 - - Pottery, 122, 130, 156; - decorated, 142; - painted, 131, 151, 152; - Susa style, 156; - in tombs, 141 - - Prehistory, defined, 7; - range of, 18 - - Pre-neanderthaloids, 30, 31, 37 - - Pre-Solutrean point, 89 - - Pre-Stellenbosch, 48 - - Proto-Literate assemblage, 157-160 - - - Race, 35; - biological, 36; - �pure,� 16 - - Radioactivity, 9, 10 - - Radioactive carbon dates, 18, 92, 120, 130, 135, 156 - - Redfield, Robert, 38, 49 - - Reed, C. A., 128 - - Reindeer, 94 - - Rhinoceros, 93; - in cave art, 85 - - Rhodesian man, 32 - - Riss glaciation, 58 - - Rock-shelters, 58; - art in, 85 - - - Saccopastore, 31 - - Sahara Desert, 34, 102 - - Samarra, 152; - pottery, 131, 152 - - Sangoan industry, 67 - - Sauer, Carl, 136 - - Sbaikian point, 89 - - Schliemann, H., 11, 12 - - Scotland, 171 - - Scraper, flake, 79; - end-scraper on blade, 77, 78; - keel-shaped, 79, 80, 81 - - Sculpture in caves, 83 - - Sebilian III, 126 - - Shaheinab, 135 - - Sheep, wild, 108; - at Skara Brae, 142; - in China, 54 - - Shellfish, 142 - - Ship, Ubaidian, 153 - - Sialk, 126, 134; - assemblage, 134 - - Siberia, 88; - pathway to New World, 98 - - Sickle, 112, 153; - blade, 113, 130 - - Silo, 122 - - Sinanthropus, 27, 30, 35 - - Skara Brae, 142 - - Snails used as food, 128 - - Soan, 47 - - Solecki, R., 116 - - Solo (fossil type), 29, 32 - - Solutrean industry, 77 - - Spear, shaft, 78; - thrower, 82, 83 - - Speech, development of organs of, 25 - - Squash, in America, 145 - - Steinheim fossil skull, 28 - - Stillbay industry, 67 - - Stonehenge, 166 - - Stratification, in caves, 12, 57; - in sites, 12 - - Swanscombe (fossil type), 11, 28 - - Syria, 107 - - - Tabun, 60, 71 - - Tardenoisian, 97 - - Taro, 107 - - Tasa, 135 - - Tayacian, 47, 59 - - Teeth, pierced, in beads and pendants, 114 - - Temples, 123, 155 - - Tepe Gawra, 156 - - Ternafine, 29 - - Teshik Tash, 69 - - Textiles, 122 - - Thong-stropper, 80 - - Tigris River, floods in, 148 - - Toggle, 80 - - Tomatoes, in America, 145 - - Tombs, megalithic, 141 - - Tool-making, 42, 49 - - Tool-preparation traditions, 65 - - Tools, 62; - antler, 80; - blade, 70, 71, 75; - bone, 66; - chopper, 47; - core-biface, 43, 48, 60, 61; - flake, 44, 47, 51, 60, 64; - flint, 80, 127; - ground stone, 68, 127; - handles, 94; - pebble, 42, 43, 48, 53; - use of, 24 - - Touf (mud wall), 128 - - Toynbee, A. J., 101 - - Trade, 130, 155, 162 - - Traders, 167 - - Traditions, 15; - blade tool, 70; - definition of, 51; - interpretation of, 49; - tool-making, 42, 48; - chopper-tool, 47; - chopper-chopping tool, 45; - core-biface, 43, 48; - flake, 44, 47; - pebble tool, 42, 48 - - Tool-making, prehistory of, 42 - - Turkey, 107, 108 - - - Ubaid, 153; - assemblage, 153-155 - - Urnfields, 168, 169 - - - Village-farming community era, 105, 119 - - - Wad B, 72 - - Wadjak, 34 - - Warka phase, 156; - assemblage, 156 - - Washburn, Sherwood L., 36 - - Water buffalo, domestication of, 107 - - Weidenreich, F., 29, 34 - - Wessex, 166, 167 - - Wheat, wild, 108; - partially domesticated, 127 - - Willow leaf point, 78 - - Windmill Hill, 138; - assemblage, 138, 140 - - Witch doctors, 68 - - Wool, 112; - in garments, 167 - - Writing, 158; - cuneiform, 158 - - W�rm I glaciation, 58 - - - Zebu cattle, domestication of, 107 - - Zeuner, F. E., 73 - - - - - * * * * * * - - - - -Transcriber�s note: - -Punctuation, hyphenation, and spelling were made consistent when a -predominant preference was found in this book; otherwise they were not -changed. - -Simple typographical errors were corrected; occasional unbalanced -quotation marks retained. - -Ambiguous hyphens at the ends of lines were retained. - -Index not checked for proper alphabetization or correct page references. - -In the original book, chapter headings were accompanied by -illustrations, sometimes above, sometimes below, and sometimes -adjacent. In this eBook those ilustrations always appear below the -headings. - - - -***END OF THE PROJECT GUTENBERG EBOOK PREHISTORIC MEN*** - - -******* This file should be named 52664-0.txt or 52664-0.zip ******* - - -This and all associated files of various formats will be found in: -http://www.gutenberg.org/dirs/5/2/6/6/52664 - - -Updated editions will replace the previous one--the old editions will -be renamed. - -Creating the works from print editions not protected by U.S. copyright -law means that no one owns a United States copyright in these works, -so the Foundation (and you!) can copy and distribute it in the United -States without permission and without paying copyright -royalties. Special rules, set forth in the General Terms of Use part -of this license, apply to copying and distributing Project -Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm -concept and trademark. Project Gutenberg is a registered trademark, -and may not be used if you charge for the eBooks, unless you receive -specific permission. If you do not charge anything for copies of this -eBook, complying with the rules is very easy. You may use this eBook -for nearly any purpose such as creation of derivative works, reports, -performances and research. They may be modified and printed and given -away--you may do practically ANYTHING in the United States with eBooks -not protected by U.S. copyright law. Redistribution is subject to the -trademark license, especially commercial redistribution. - -START: FULL LICENSE - -THE FULL PROJECT GUTENBERG LICENSE -PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK - -To protect the Project Gutenberg-tm mission of promoting the free -distribution of electronic works, by using or distributing this work -(or any other work associated in any way with the phrase "Project -Gutenberg"), you agree to comply with all the terms of the Full -Project Gutenberg-tm License available with this file or online at -www.gutenberg.org/license. - -Section 1. General Terms of Use and Redistributing Project -Gutenberg-tm electronic works - -1.A. By reading or using any part of this Project Gutenberg-tm -electronic work, you indicate that you have read, understand, agree to -and accept all the terms of this license and intellectual property -(trademark/copyright) agreement. If you do not agree to abide by all -the terms of this agreement, you must cease using and return or -destroy all copies of Project Gutenberg-tm electronic works in your -possession. If you paid a fee for obtaining a copy of or access to a -Project Gutenberg-tm electronic work and you do not agree to be bound -by the terms of this agreement, you may obtain a refund from the -person or entity to whom you paid the fee as set forth in paragraph -1.E.8. - -1.B. "Project Gutenberg" is a registered trademark. It may only be -used on or associated in any way with an electronic work by people who -agree to be bound by the terms of this agreement. There are a few -things that you can do with most Project Gutenberg-tm electronic works -even without complying with the full terms of this agreement. See -paragraph 1.C below. There are a lot of things you can do with Project -Gutenberg-tm electronic works if you follow the terms of this -agreement and help preserve free future access to Project Gutenberg-tm -electronic works. See paragraph 1.E below. - -1.C. The Project Gutenberg Literary Archive Foundation ("the -Foundation" or PGLAF), owns a compilation copyright in the collection -of Project Gutenberg-tm electronic works. Nearly all the individual -works in the collection are in the public domain in the United -States. If an individual work is unprotected by copyright law in the -United States and you are located in the United States, we do not -claim a right to prevent you from copying, distributing, performing, -displaying or creating derivative works based on the work as long as -all references to Project Gutenberg are removed. Of course, we hope -that you will support the Project Gutenberg-tm mission of promoting -free access to electronic works by freely sharing Project Gutenberg-tm -works in compliance with the terms of this agreement for keeping the -Project Gutenberg-tm name associated with the work. You can easily -comply with the terms of this agreement by keeping this work in the -same format with its attached full Project Gutenberg-tm License when -you share it without charge with others. - -1.D. The copyright laws of the place where you are located also govern -what you can do with this work. Copyright laws in most countries are -in a constant state of change. If you are outside the United States, -check the laws of your country in addition to the terms of this -agreement before downloading, copying, displaying, performing, -distributing or creating derivative works based on this work or any -other Project Gutenberg-tm work. The Foundation makes no -representations concerning the copyright status of any work in any -country outside the United States. - -1.E. Unless you have removed all references to Project Gutenberg: - -1.E.1. The following sentence, with active links to, or other -immediate access to, the full Project Gutenberg-tm License must appear -prominently whenever any copy of a Project Gutenberg-tm work (any work -on which the phrase "Project Gutenberg" appears, or with which the -phrase "Project Gutenberg" is associated) is accessed, displayed, -performed, viewed, copied or distributed: - - This eBook is for the use of anyone anywhere in the United States and - most other parts of the world at no cost and with almost no - restrictions whatsoever. You may copy it, give it away or re-use it - under the terms of the Project Gutenberg License included with this - eBook or online at www.gutenberg.org. If you are not located in the - United States, you'll have to check the laws of the country where you - are located before using this ebook. - -1.E.2. If an individual Project Gutenberg-tm electronic work is -derived from texts not protected by U.S. copyright law (does not -contain a notice indicating that it is posted with permission of the -copyright holder), the work can be copied and distributed to anyone in -the United States without paying any fees or charges. If you are -redistributing or providing access to a work with the phrase "Project -Gutenberg" associated with or appearing on the work, you must comply -either with the requirements of paragraphs 1.E.1 through 1.E.7 or -obtain permission for the use of the work and the Project Gutenberg-tm -trademark as set forth in paragraphs 1.E.8 or 1.E.9. - -1.E.3. If an individual Project Gutenberg-tm electronic work is posted -with the permission of the copyright holder, your use and distribution -must comply with both paragraphs 1.E.1 through 1.E.7 and any -additional terms imposed by the copyright holder. Additional terms -will be linked to the Project Gutenberg-tm License for all works -posted with the permission of the copyright holder found at the -beginning of this work. - -1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm -License terms from this work, or any files containing a part of this -work or any other work associated with Project Gutenberg-tm. - -1.E.5. Do not copy, display, perform, distribute or redistribute this -electronic work, or any part of this electronic work, without -prominently displaying the sentence set forth in paragraph 1.E.1 with -active links or immediate access to the full terms of the Project -Gutenberg-tm License. - -1.E.6. You may convert to and distribute this work in any binary, -compressed, marked up, nonproprietary or proprietary form, including -any word processing or hypertext form. However, if you provide access -to or distribute copies of a Project Gutenberg-tm work in a format -other than "Plain Vanilla ASCII" or other format used in the official -version posted on the official Project Gutenberg-tm web site -(www.gutenberg.org), you must, at no additional cost, fee or expense -to the user, provide a copy, a means of exporting a copy, or a means -of obtaining a copy upon request, of the work in its original "Plain -Vanilla ASCII" or other form. Any alternate format must include the -full Project Gutenberg-tm License as specified in paragraph 1.E.1. - -1.E.7. Do not charge a fee for access to, viewing, displaying, -performing, copying or distributing any Project Gutenberg-tm works -unless you comply with paragraph 1.E.8 or 1.E.9. - -1.E.8. You may charge a reasonable fee for copies of or providing -access to or distributing Project Gutenberg-tm electronic works -provided that - -* You pay a royalty fee of 20% of the gross profits you derive from - the use of Project Gutenberg-tm works calculated using the method - you already use to calculate your applicable taxes. The fee is owed - to the owner of the Project Gutenberg-tm trademark, but he has - agreed to donate royalties under this paragraph to the Project - Gutenberg Literary Archive Foundation. Royalty payments must be paid - within 60 days following each date on which you prepare (or are - legally required to prepare) your periodic tax returns. Royalty - payments should be clearly marked as such and sent to the Project - Gutenberg Literary Archive Foundation at the address specified in - Section 4, "Information about donations to the Project Gutenberg - Literary Archive Foundation." - -* You provide a full refund of any money paid by a user who notifies - you in writing (or by e-mail) within 30 days of receipt that s/he - does not agree to the terms of the full Project Gutenberg-tm - License. You must require such a user to return or destroy all - copies of the works possessed in a physical medium and discontinue - all use of and all access to other copies of Project Gutenberg-tm - works. - -* You provide, in accordance with paragraph 1.F.3, a full refund of - any money paid for a work or a replacement copy, if a defect in the - electronic work is discovered and reported to you within 90 days of - receipt of the work. - -* You comply with all other terms of this agreement for free - distribution of Project Gutenberg-tm works. - -1.E.9. If you wish to charge a fee or distribute a Project -Gutenberg-tm electronic work or group of works on different terms than -are set forth in this agreement, you must obtain permission in writing -from both the Project Gutenberg Literary Archive Foundation and The -Project Gutenberg Trademark LLC, the owner of the Project Gutenberg-tm -trademark. Contact the Foundation as set forth in Section 3 below. - -1.F. - -1.F.1. Project Gutenberg volunteers and employees expend considerable -effort to identify, do copyright research on, transcribe and proofread -works not protected by U.S. copyright law in creating the Project -Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm -electronic works, and the medium on which they may be stored, may -contain "Defects," such as, but not limited to, incomplete, inaccurate -or corrupt data, transcription errors, a copyright or other -intellectual property infringement, a defective or damaged disk or -other medium, a computer virus, or computer codes that damage or -cannot be read by your equipment. - -1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right -of Replacement or Refund" described in paragraph 1.F.3, the Project -Gutenberg Literary Archive Foundation, the owner of the Project -Gutenberg-tm trademark, and any other party distributing a Project -Gutenberg-tm electronic work under this agreement, disclaim all -liability to you for damages, costs and expenses, including legal -fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT -LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE -PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE -TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE -LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR -INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH -DAMAGE. - -1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a -defect in this electronic work within 90 days of receiving it, you can -receive a refund of the money (if any) you paid for it by sending a -written explanation to the person you received the work from. If you -received the work on a physical medium, you must return the medium -with your written explanation. The person or entity that provided you -with the defective work may elect to provide a replacement copy in -lieu of a refund. If you received the work electronically, the person -or entity providing it to you may choose to give you a second -opportunity to receive the work electronically in lieu of a refund. If -the second copy is also defective, you may demand a refund in writing -without further opportunities to fix the problem. - -1.F.4. Except for the limited right of replacement or refund set forth -in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO -OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE. - -1.F.5. Some states do not allow disclaimers of certain implied -warranties or the exclusion or limitation of certain types of -damages. If any disclaimer or limitation set forth in this agreement -violates the law of the state applicable to this agreement, the -agreement shall be interpreted to make the maximum disclaimer or -limitation permitted by the applicable state law. The invalidity or -unenforceability of any provision of this agreement shall not void the -remaining provisions. - -1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the -trademark owner, any agent or employee of the Foundation, anyone -providing copies of Project Gutenberg-tm electronic works in -accordance with this agreement, and any volunteers associated with the -production, promotion and distribution of Project Gutenberg-tm -electronic works, harmless from all liability, costs and expenses, -including legal fees, that arise directly or indirectly from any of -the following which you do or cause to occur: (a) distribution of this -or any Project Gutenberg-tm work, (b) alteration, modification, or -additions or deletions to any Project Gutenberg-tm work, and (c) any -Defect you cause. - -Section 2. Information about the Mission of Project Gutenberg-tm - -Project Gutenberg-tm is synonymous with the free distribution of -electronic works in formats readable by the widest variety of -computers including obsolete, old, middle-aged and new computers. It -exists because of the efforts of hundreds of volunteers and donations -from people in all walks of life. - -Volunteers and financial support to provide volunteers with the -assistance they need are critical to reaching Project Gutenberg-tm's -goals and ensuring that the Project Gutenberg-tm collection will -remain freely available for generations to come. In 2001, the Project -Gutenberg Literary Archive Foundation was created to provide a secure -and permanent future for Project Gutenberg-tm and future -generations. To learn more about the Project Gutenberg Literary -Archive Foundation and how your efforts and donations can help, see -Sections 3 and 4 and the Foundation information page at -www.gutenberg.org - -Section 3. Information about the Project Gutenberg Literary -Archive Foundation - -The Project Gutenberg Literary Archive Foundation is a non profit -501(c)(3) educational corporation organized under the laws of the -state of Mississippi and granted tax exempt status by the Internal -Revenue Service. The Foundation's EIN or federal tax identification -number is 64-6221541. Contributions to the Project Gutenberg Literary -Archive Foundation are tax deductible to the full extent permitted by -U.S. federal laws and your state's laws. - -The Foundation's principal office is in Fairbanks, Alaska, with the -mailing address: PO Box 750175, Fairbanks, AK 99775, but its -volunteers and employees are scattered throughout numerous -locations. Its business office is located at 809 North 1500 West, Salt -Lake City, UT 84116, (801) 596-1887. Email contact links and up to -date contact information can be found at the Foundation's web site and -official page at www.gutenberg.org/contact - -For additional contact information: - - Dr. Gregory B. Newby - Chief Executive and Director - gbnewby@pglaf.org - -Section 4. Information about Donations to the Project Gutenberg -Literary Archive Foundation - -Project Gutenberg-tm depends upon and cannot survive without wide -spread public support and donations to carry out its mission of -increasing the number of public domain and licensed works that can be -freely distributed in machine readable form accessible by the widest -array of equipment including outdated equipment. Many small donations -($1 to $5,000) are particularly important to maintaining tax exempt -status with the IRS. - -The Foundation is committed to complying with the laws regulating -charities and charitable donations in all 50 states of the United -States. Compliance requirements are not uniform and it takes a -considerable effort, much paperwork and many fees to meet and keep up -with these requirements. We do not solicit donations in locations -where we have not received written confirmation of compliance. To SEND -DONATIONS or determine the status of compliance for any particular -state visit www.gutenberg.org/donate - -While we cannot and do not solicit contributions from states where we -have not met the solicitation requirements, we know of no prohibition -against accepting unsolicited donations from donors in such states who -approach us with offers to donate. - -International donations are gratefully accepted, but we cannot make -any statements concerning tax treatment of donations received from -outside the United States. U.S. laws alone swamp our small staff. - -Please check the Project Gutenberg Web pages for current donation -methods and addresses. Donations are accepted in a number of other -ways including checks, online payments and credit card donations. To -donate, please visit: www.gutenberg.org/donate - -Section 5. General Information About Project Gutenberg-tm electronic works. - -Professor Michael S. Hart was the originator of the Project -Gutenberg-tm concept of a library of electronic works that could be -freely shared with anyone. For forty years, he produced and -distributed Project Gutenberg-tm eBooks with only a loose network of -volunteer support. - -Project Gutenberg-tm eBooks are often created from several printed -editions, all of which are confirmed as not protected by copyright in -the U.S. unless a copyright notice is included. Thus, we do not -necessarily keep eBooks in compliance with any particular paper -edition. - -Most people start at our Web site which has the main PG search -facility: www.gutenberg.org - -This Web site includes information about Project Gutenberg-tm, -including how to make donations to the Project Gutenberg Literary -Archive Foundation, how to help produce our new eBooks, and how to -subscribe to our email newsletter to hear about new eBooks. diff --git a/ciphers/rabin_miller.py b/ciphers/rabin_miller.py deleted file mode 100644 index 410d559d4315..000000000000 --- a/ciphers/rabin_miller.py +++ /dev/null @@ -1,223 +0,0 @@ -# Primality Testing with the Rabin-Miller Algorithm - -import random - - -def rabin_miller(num: int) -> bool: - s = num - 1 - t = 0 - - while s % 2 == 0: - s = s // 2 - t += 1 - - for _ in range(5): - a = random.randrange(2, num - 1) - v = pow(a, s, num) - if v != 1: - i = 0 - while v != (num - 1): - if i == t - 1: - return False - else: - i = i + 1 - v = (v**2) % num - return True - - -def is_prime_low_num(num: int) -> bool: - if num < 2: - return False - - low_primes = [ - 2, - 3, - 5, - 7, - 11, - 13, - 17, - 19, - 23, - 29, - 31, - 37, - 41, - 43, - 47, - 53, - 59, - 61, - 67, - 71, - 73, - 79, - 83, - 89, - 97, - 101, - 103, - 107, - 109, - 113, - 127, - 131, - 137, - 139, - 149, - 151, - 157, - 163, - 167, - 173, - 179, - 181, - 191, - 193, - 197, - 199, - 211, - 223, - 227, - 229, - 233, - 239, - 241, - 251, - 257, - 263, - 269, - 271, - 277, - 281, - 283, - 293, - 307, - 311, - 313, - 317, - 331, - 337, - 347, - 349, - 353, - 359, - 367, - 373, - 379, - 383, - 389, - 397, - 401, - 409, - 419, - 421, - 431, - 433, - 439, - 443, - 449, - 457, - 461, - 463, - 467, - 479, - 487, - 491, - 499, - 503, - 509, - 521, - 523, - 541, - 547, - 557, - 563, - 569, - 571, - 577, - 587, - 593, - 599, - 601, - 607, - 613, - 617, - 619, - 631, - 641, - 643, - 647, - 653, - 659, - 661, - 673, - 677, - 683, - 691, - 701, - 709, - 719, - 727, - 733, - 739, - 743, - 751, - 757, - 761, - 769, - 773, - 787, - 797, - 809, - 811, - 821, - 823, - 827, - 829, - 839, - 853, - 857, - 859, - 863, - 877, - 881, - 883, - 887, - 907, - 911, - 919, - 929, - 937, - 941, - 947, - 953, - 967, - 971, - 977, - 983, - 991, - 997, - ] - - if num in low_primes: - return True - - for prime in low_primes: - if (num % prime) == 0: - return False - - return rabin_miller(num) - - -def generate_large_prime(keysize: int = 1024) -> int: - while True: - num = random.randrange(2 ** (keysize - 1), 2 ** (keysize)) - if is_prime_low_num(num): - return num - - -if __name__ == "__main__": - num = generate_large_prime() - print(("Prime number:", num)) - print(("is_prime_low_num:", is_prime_low_num(num))) diff --git a/ciphers/rail_fence_cipher.py b/ciphers/rail_fence_cipher.py deleted file mode 100644 index 5b2311a115e4..000000000000 --- a/ciphers/rail_fence_cipher.py +++ /dev/null @@ -1,102 +0,0 @@ -"""https://en.wikipedia.org/wiki/Rail_fence_cipher""" - - -def encrypt(input_string: str, key: int) -> str: - """ - Shuffles the character of a string by placing each of them - in a grid (the height is dependent on the key) in a zigzag - formation and reading it left to right. - - >>> encrypt("Hello World", 4) - 'HWe olordll' - - >>> encrypt("This is a message", 0) - Traceback (most recent call last): - ... - ValueError: Height of grid can't be 0 or negative - - >>> encrypt(b"This is a byte string", 5) - Traceback (most recent call last): - ... - TypeError: sequence item 0: expected str instance, int found - """ - temp_grid: list[list[str]] = [[] for _ in range(key)] - lowest = key - 1 - - if key <= 0: - raise ValueError("Height of grid can't be 0 or negative") - if key == 1 or len(input_string) <= key: - return input_string - - for position, character in enumerate(input_string): - num = position % (lowest * 2) # puts it in bounds - num = min(num, lowest * 2 - num) # creates zigzag pattern - temp_grid[num].append(character) - grid = ["".join(row) for row in temp_grid] - output_string = "".join(grid) - - return output_string - - -def decrypt(input_string: str, key: int) -> str: - """ - Generates a template based on the key and fills it in with - the characters of the input string and then reading it in - a zigzag formation. - - >>> decrypt("HWe olordll", 4) - 'Hello World' - - >>> decrypt("This is a message", -10) - Traceback (most recent call last): - ... - ValueError: Height of grid can't be 0 or negative - - >>> decrypt("My key is very big", 100) - 'My key is very big' - """ - grid = [] - lowest = key - 1 - - if key <= 0: - raise ValueError("Height of grid can't be 0 or negative") - if key == 1: - return input_string - - temp_grid: list[list[str]] = [[] for _ in range(key)] # generates template - for position in range(len(input_string)): - num = position % (lowest * 2) # puts it in bounds - num = min(num, lowest * 2 - num) # creates zigzag pattern - temp_grid[num].append("*") - - counter = 0 - for row in temp_grid: # fills in the characters - splice = input_string[counter : counter + len(row)] - grid.append(list(splice)) - counter += len(row) - - output_string = "" # reads as zigzag - for position in range(len(input_string)): - num = position % (lowest * 2) # puts it in bounds - num = min(num, lowest * 2 - num) # creates zigzag pattern - output_string += grid[num][0] - grid[num].pop(0) - return output_string - - -def bruteforce(input_string: str) -> dict[int, str]: - """Uses decrypt function by guessing every key - - >>> bruteforce("HWe olordll")[4] - 'Hello World' - """ - results = {} - for key_guess in range(1, len(input_string)): # tries every key - results[key_guess] = decrypt(input_string, key_guess) - return results - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/rot13.py b/ciphers/rot13.py deleted file mode 100644 index b367c3215127..000000000000 --- a/ciphers/rot13.py +++ /dev/null @@ -1,37 +0,0 @@ -def dencrypt(s: str, n: int = 13) -> str: - """ - https://en.wikipedia.org/wiki/ROT13 - - >>> msg = "My secret bank account number is 173-52946 so don't tell anyone!!" - >>> s = dencrypt(msg) - >>> s - "Zl frperg onax nppbhag ahzore vf 173-52946 fb qba'g gryy nalbar!!" - >>> dencrypt(s) == msg - True - """ - out = "" - for c in s: - if "A" <= c <= "Z": - out += chr(ord("A") + (ord(c) - ord("A") + n) % 26) - elif "a" <= c <= "z": - out += chr(ord("a") + (ord(c) - ord("a") + n) % 26) - else: - out += c - return out - - -def main() -> None: - s0 = input("Enter message: ") - - s1 = dencrypt(s0, 13) - print("Encryption:", s1) - - s2 = dencrypt(s1, 13) - print("Decryption: ", s2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/rsa_cipher.py b/ciphers/rsa_cipher.py deleted file mode 100644 index ac9782a49fff..000000000000 --- a/ciphers/rsa_cipher.py +++ /dev/null @@ -1,149 +0,0 @@ -import os -import sys - -from . import rsa_key_generator as rkg - -DEFAULT_BLOCK_SIZE = 128 -BYTE_SIZE = 256 - - -def get_blocks_from_text( - message: str, block_size: int = DEFAULT_BLOCK_SIZE -) -> list[int]: - message_bytes = message.encode("ascii") - - block_ints = [] - for block_start in range(0, len(message_bytes), block_size): - block_int = 0 - for i in range(block_start, min(block_start + block_size, len(message_bytes))): - block_int += message_bytes[i] * (BYTE_SIZE ** (i % block_size)) - block_ints.append(block_int) - return block_ints - - -def get_text_from_blocks( - block_ints: list[int], message_length: int, block_size: int = DEFAULT_BLOCK_SIZE -) -> str: - message: list[str] = [] - for block_int in block_ints: - block_message: list[str] = [] - for i in range(block_size - 1, -1, -1): - if len(message) + i < message_length: - ascii_number = block_int // (BYTE_SIZE**i) - block_int = block_int % (BYTE_SIZE**i) - block_message.insert(0, chr(ascii_number)) - message.extend(block_message) - return "".join(message) - - -def encrypt_message( - message: str, key: tuple[int, int], block_size: int = DEFAULT_BLOCK_SIZE -) -> list[int]: - encrypted_blocks = [] - n, e = key - - for block in get_blocks_from_text(message, block_size): - encrypted_blocks.append(pow(block, e, n)) - return encrypted_blocks - - -def decrypt_message( - encrypted_blocks: list[int], - message_length: int, - key: tuple[int, int], - block_size: int = DEFAULT_BLOCK_SIZE, -) -> str: - decrypted_blocks = [] - n, d = key - for block in encrypted_blocks: - decrypted_blocks.append(pow(block, d, n)) - return get_text_from_blocks(decrypted_blocks, message_length, block_size) - - -def read_key_file(key_filename: str) -> tuple[int, int, int]: - with open(key_filename) as fo: - content = fo.read() - key_size, n, eor_d = content.split(",") - return (int(key_size), int(n), int(eor_d)) - - -def encrypt_and_write_to_file( - message_filename: str, - key_filename: str, - message: str, - block_size: int = DEFAULT_BLOCK_SIZE, -) -> str: - key_size, n, e = read_key_file(key_filename) - if key_size < block_size * 8: - sys.exit( - f"ERROR: Block size is {block_size * 8} bits and key size is {key_size} " - "bits. The RSA cipher requires the block size to be equal to or greater " - "than the key size. Either decrease the block size or use different keys." - ) - - encrypted_blocks = [str(i) for i in encrypt_message(message, (n, e), block_size)] - - encrypted_content = ",".join(encrypted_blocks) - encrypted_content = f"{len(message)}_{block_size}_{encrypted_content}" - with open(message_filename, "w") as fo: - fo.write(encrypted_content) - return encrypted_content - - -def read_from_file_and_decrypt(message_filename: str, key_filename: str) -> str: - key_size, n, d = read_key_file(key_filename) - with open(message_filename) as fo: - content = fo.read() - message_length_str, block_size_str, encrypted_message = content.split("_") - message_length = int(message_length_str) - block_size = int(block_size_str) - - if key_size < block_size * 8: - sys.exit( - f"ERROR: Block size is {block_size * 8} bits and key size is {key_size} " - "bits. The RSA cipher requires the block size to be equal to or greater " - "than the key size. Were the correct key file and encrypted file specified?" - ) - - encrypted_blocks = [] - for block in encrypted_message.split(","): - encrypted_blocks.append(int(block)) - - return decrypt_message(encrypted_blocks, message_length, (n, d), block_size) - - -def main() -> None: - filename = "encrypted_file.txt" - response = input(r"Encrypt\Decrypt [e\d]: ") - - if response.lower().startswith("e"): - mode = "encrypt" - elif response.lower().startswith("d"): - mode = "decrypt" - - if mode == "encrypt": - if not os.path.exists("rsa_pubkey.txt"): - rkg.make_key_files("rsa", 1024) - - message = input("\nEnter message: ") - pubkey_filename = "rsa_pubkey.txt" - print(f"Encrypting and writing to {filename}...") - encrypted_text = encrypt_and_write_to_file(filename, pubkey_filename, message) - - print("\nEncrypted text:") - print(encrypted_text) - - elif mode == "decrypt": - privkey_filename = "rsa_privkey.txt" - print(f"Reading from {filename} and decrypting...") - decrypted_text = read_from_file_and_decrypt(filename, privkey_filename) - print("writing decryption to rsa_decryption.txt...") - with open("rsa_decryption.txt", "w") as dec: - dec.write(decrypted_text) - - print("\nDecryption:") - print(decrypted_text) - - -if __name__ == "__main__": - main() diff --git a/ciphers/rsa_factorization.py b/ciphers/rsa_factorization.py deleted file mode 100644 index 0a358a4fc2d4..000000000000 --- a/ciphers/rsa_factorization.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -An RSA prime factor algorithm. - -The program can efficiently factor RSA prime number given the private key d and -public key e. -Source: on page 3 of https://crypto.stanford.edu/~dabo/papers/RSA-survey.pdf -More readable source: https://www.di-mgt.com.au/rsa_factorize_n.html -large number can take minutes to factor, therefore are not included in doctest. -""" - -from __future__ import annotations - -import math -import random - - -def rsafactor(d: int, e: int, n: int) -> list[int]: - """ - This function returns the factors of N, where p*q=N - Return: [p, q] - - We call N the RSA modulus, e the encryption exponent, and d the decryption exponent. - The pair (N, e) is the public key. As its name suggests, it is public and is used to - encrypt messages. - The pair (N, d) is the secret key or private key and is known only to the recipient - of encrypted messages. - - >>> rsafactor(3, 16971, 25777) - [149, 173] - >>> rsafactor(7331, 11, 27233) - [113, 241] - >>> rsafactor(4021, 13, 17711) - [89, 199] - """ - k = d * e - 1 - p = 0 - q = 0 - while p == 0: - g = random.randint(2, n - 1) - t = k - while True: - if t % 2 == 0: - t = t // 2 - x = (g**t) % n - y = math.gcd(x - 1, n) - if x > 1 and y > 1: - p = y - q = n // y - break # find the correct factors - else: - break # t is not divisible by 2, break and choose another g - return sorted([p, q]) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/rsa_key_generator.py b/ciphers/rsa_key_generator.py deleted file mode 100644 index 44970e8cbc15..000000000000 --- a/ciphers/rsa_key_generator.py +++ /dev/null @@ -1,63 +0,0 @@ -import os -import random -import sys - -from maths.greatest_common_divisor import gcd_by_iterative - -from . import cryptomath_module, rabin_miller - - -def main() -> None: - print("Making key files...") - make_key_files("rsa", 1024) - print("Key files generation successful.") - - -def generate_key(key_size: int) -> tuple[tuple[int, int], tuple[int, int]]: - """ - >>> random.seed(0) # for repeatability - >>> public_key, private_key = generate_key(8) - >>> public_key - (26569, 239) - >>> private_key - (26569, 2855) - """ - p = rabin_miller.generate_large_prime(key_size) - q = rabin_miller.generate_large_prime(key_size) - n = p * q - - # Generate e that is relatively prime to (p - 1) * (q - 1) - while True: - e = random.randrange(2 ** (key_size - 1), 2 ** (key_size)) - if gcd_by_iterative(e, (p - 1) * (q - 1)) == 1: - break - - # Calculate d that is mod inverse of e - d = cryptomath_module.find_mod_inverse(e, (p - 1) * (q - 1)) - - public_key = (n, e) - private_key = (n, d) - return (public_key, private_key) - - -def make_key_files(name: str, key_size: int) -> None: - if os.path.exists(f"{name}_pubkey.txt") or os.path.exists(f"{name}_privkey.txt"): - print("\nWARNING:") - print( - f'"{name}_pubkey.txt" or "{name}_privkey.txt" already exists. \n' - "Use a different name or delete these files and re-run this program." - ) - sys.exit() - - public_key, private_key = generate_key(key_size) - print(f"\nWriting public key to file {name}_pubkey.txt...") - with open(f"{name}_pubkey.txt", "w") as out_file: - out_file.write(f"{key_size},{public_key[0]},{public_key[1]}") - - print(f"Writing private key to file {name}_privkey.txt...") - with open(f"{name}_privkey.txt", "w") as out_file: - out_file.write(f"{key_size},{private_key[0]},{private_key[1]}") - - -if __name__ == "__main__": - main() diff --git a/ciphers/running_key_cipher.py b/ciphers/running_key_cipher.py deleted file mode 100644 index 6bda417be898..000000000000 --- a/ciphers/running_key_cipher.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Running_key_cipher -""" - - -def running_key_encrypt(key: str, plaintext: str) -> str: - """ - Encrypts the plaintext using the Running Key Cipher. - - :param key: The running key (long piece of text). - :param plaintext: The plaintext to be encrypted. - :return: The ciphertext. - """ - plaintext = plaintext.replace(" ", "").upper() - key = key.replace(" ", "").upper() - key_length = len(key) - ciphertext = [] - ord_a = ord("A") - - for i, char in enumerate(plaintext): - p = ord(char) - ord_a - k = ord(key[i % key_length]) - ord_a - c = (p + k) % 26 - ciphertext.append(chr(c + ord_a)) - - return "".join(ciphertext) - - -def running_key_decrypt(key: str, ciphertext: str) -> str: - """ - Decrypts the ciphertext using the Running Key Cipher. - - :param key: The running key (long piece of text). - :param ciphertext: The ciphertext to be decrypted. - :return: The plaintext. - """ - ciphertext = ciphertext.replace(" ", "").upper() - key = key.replace(" ", "").upper() - key_length = len(key) - plaintext = [] - ord_a = ord("A") - - for i, char in enumerate(ciphertext): - c = ord(char) - ord_a - k = ord(key[i % key_length]) - ord_a - p = (c - k) % 26 - plaintext.append(chr(p + ord_a)) - - return "".join(plaintext) - - -def test_running_key_encrypt() -> None: - """ - >>> key = "How does the duck know that? said Victor" - >>> ciphertext = running_key_encrypt(key, "DEFEND THIS") - >>> running_key_decrypt(key, ciphertext) == "DEFENDTHIS" - True - """ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - test_running_key_encrypt() - - plaintext = input("Enter the plaintext: ").upper() - print(f"\n{plaintext = }") - - key = "How does the duck know that? said Victor" - encrypted_text = running_key_encrypt(key, plaintext) - print(f"{encrypted_text = }") - - decrypted_text = running_key_decrypt(key, encrypted_text) - print(f"{decrypted_text = }") diff --git a/ciphers/shuffled_shift_cipher.py b/ciphers/shuffled_shift_cipher.py deleted file mode 100644 index 08b2cab97c69..000000000000 --- a/ciphers/shuffled_shift_cipher.py +++ /dev/null @@ -1,184 +0,0 @@ -from __future__ import annotations - -import random -import string - - -class ShuffledShiftCipher: - """ - This algorithm uses the Caesar Cipher algorithm but removes the option to - use brute force to decrypt the message. - - The passcode is a random password from the selection buffer of - 1. uppercase letters of the English alphabet - 2. lowercase letters of the English alphabet - 3. digits from 0 to 9 - - Using unique characters from the passcode, the normal list of characters, - that can be allowed in the plaintext, is pivoted and shuffled. Refer to docstring - of __make_key_list() to learn more about the shuffling. - - Then, using the passcode, a number is calculated which is used to encrypt the - plaintext message with the normal shift cipher method, only in this case, the - reference, to look back at while decrypting, is shuffled. - - Each cipher object can possess an optional argument as passcode, without which a - new passcode is generated for that object automatically. - cip1 = ShuffledShiftCipher('d4usr9TWxw9wMD') - cip2 = ShuffledShiftCipher() - """ - - def __init__(self, passcode: str | None = None) -> None: - """ - Initializes a cipher object with a passcode as it's entity - Note: No new passcode is generated if user provides a passcode - while creating the object - """ - self.__passcode = passcode or self.__passcode_creator() - self.__key_list = self.__make_key_list() - self.__shift_key = self.__make_shift_key() - - def __str__(self) -> str: - """ - :return: passcode of the cipher object - """ - return "".join(self.__passcode) - - def __neg_pos(self, iterlist: list[int]) -> list[int]: - """ - Mutates the list by changing the sign of each alternate element - - :param iterlist: takes a list iterable - :return: the mutated list - - """ - for i in range(1, len(iterlist), 2): - iterlist[i] *= -1 - return iterlist - - def __passcode_creator(self) -> list[str]: - """ - Creates a random password from the selection buffer of - 1. uppercase letters of the English alphabet - 2. lowercase letters of the English alphabet - 3. digits from 0 to 9 - - :rtype: list - :return: a password of a random length between 10 to 20 - """ - choices = string.ascii_letters + string.digits - password = [random.choice(choices) for _ in range(random.randint(10, 20))] - return password - - def __make_key_list(self) -> list[str]: - """ - Shuffles the ordered character choices by pivoting at breakpoints - Breakpoints are the set of characters in the passcode - - eg: - if, ABCDEFGHIJKLMNOPQRSTUVWXYZ are the possible characters - and CAMERA is the passcode - then, breakpoints = [A,C,E,M,R] # sorted set of characters from passcode - shuffled parts: [A,CB,ED,MLKJIHGF,RQPON,ZYXWVUTS] - shuffled __key_list : ACBEDMLKJIHGFRQPONZYXWVUTS - - Shuffling only 26 letters of the english alphabet can generate 26! - combinations for the shuffled list. In the program we consider, a set of - 97 characters (including letters, digits, punctuation and whitespaces), - thereby creating a possibility of 97! combinations (which is a 152 digit number - in itself), thus diminishing the possibility of a brute force approach. - Moreover, shift keys even introduce a multiple of 26 for a brute force approach - for each of the already 97! combinations. - """ - # key_list_options contain nearly all printable except few elements from - # string.whitespace - key_list_options = ( - string.ascii_letters + string.digits + string.punctuation + " \t\n" - ) - - keys_l = [] - - # creates points known as breakpoints to break the key_list_options at those - # points and pivot each substring - breakpoints = sorted(set(self.__passcode)) - temp_list: list[str] = [] - - # algorithm for creating a new shuffled list, keys_l, out of key_list_options - for i in key_list_options: - temp_list.extend(i) - - # checking breakpoints at which to pivot temporary sublist and add it into - # keys_l - if i in breakpoints or i == key_list_options[-1]: - keys_l.extend(temp_list[::-1]) - temp_list.clear() - - # returning a shuffled keys_l to prevent brute force guessing of shift key - return keys_l - - def __make_shift_key(self) -> int: - """ - sum() of the mutated list of ascii values of all characters where the - mutated list is the one returned by __neg_pos() - """ - num = sum(self.__neg_pos([ord(x) for x in self.__passcode])) - return num if num > 0 else len(self.__passcode) - - def decrypt(self, encoded_message: str) -> str: - """ - Performs shifting of the encoded_message w.r.t. the shuffled __key_list - to create the decoded_message - - >>> ssc = ShuffledShiftCipher('4PYIXyqeQZr44') - >>> ssc.decrypt("d>**-1z6&'5z'5z:z+-='$'>=zp:>5:#z<'.&>#") - 'Hello, this is a modified Caesar cipher' - - """ - decoded_message = "" - - # decoding shift like Caesar cipher algorithm implementing negative shift or - # reverse shift or left shift - for i in encoded_message: - position = self.__key_list.index(i) - decoded_message += self.__key_list[ - (position - self.__shift_key) % -len(self.__key_list) - ] - - return decoded_message - - def encrypt(self, plaintext: str) -> str: - """ - Performs shifting of the plaintext w.r.t. the shuffled __key_list - to create the encoded_message - - >>> ssc = ShuffledShiftCipher('4PYIXyqeQZr44') - >>> ssc.encrypt('Hello, this is a modified Caesar cipher') - "d>**-1z6&'5z'5z:z+-='$'>=zp:>5:#z<'.&>#" - - """ - encoded_message = "" - - # encoding shift like Caesar cipher algorithm implementing positive shift or - # forward shift or right shift - for i in plaintext: - position = self.__key_list.index(i) - encoded_message += self.__key_list[ - (position + self.__shift_key) % len(self.__key_list) - ] - - return encoded_message - - -def test_end_to_end(msg: str = "Hello, this is a modified Caesar cipher") -> str: - """ - >>> test_end_to_end() - 'Hello, this is a modified Caesar cipher' - """ - cip1 = ShuffledShiftCipher() - return cip1.decrypt(cip1.encrypt(msg)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/ciphers/simple_keyword_cypher.py b/ciphers/simple_keyword_cypher.py deleted file mode 100644 index 1635471aebd1..000000000000 --- a/ciphers/simple_keyword_cypher.py +++ /dev/null @@ -1,90 +0,0 @@ -def remove_duplicates(key: str) -> str: - """ - Removes duplicate alphabetic characters in a keyword (letter is ignored after its - first appearance). - :param key: Keyword to use - :return: String with duplicates removed - >>> remove_duplicates('Hello World!!') - 'Helo Wrd' - """ - - key_no_dups = "" - for ch in key: - if ch == " " or ch not in key_no_dups and ch.isalpha(): - key_no_dups += ch - return key_no_dups - - -def create_cipher_map(key: str) -> dict[str, str]: - """ - Returns a cipher map given a keyword. - :param key: keyword to use - :return: dictionary cipher map - """ - # Create a list of the letters in the alphabet - alphabet = [chr(i + 65) for i in range(26)] - # Remove duplicate characters from key - key = remove_duplicates(key.upper()) - offset = len(key) - # First fill cipher with key characters - cipher_alphabet = {alphabet[i]: char for i, char in enumerate(key)} - # Then map remaining characters in alphabet to - # the alphabet from the beginning - for i in range(len(cipher_alphabet), 26): - char = alphabet[i - offset] - # Ensure we are not mapping letters to letters previously mapped - while char in key: - offset -= 1 - char = alphabet[i - offset] - cipher_alphabet[alphabet[i]] = char - return cipher_alphabet - - -def encipher(message: str, cipher_map: dict[str, str]) -> str: - """ - Enciphers a message given a cipher map. - :param message: Message to encipher - :param cipher_map: Cipher map - :return: enciphered string - >>> encipher('Hello World!!', create_cipher_map('Goodbye!!')) - 'CYJJM VMQJB!!' - """ - return "".join(cipher_map.get(ch, ch) for ch in message.upper()) - - -def decipher(message: str, cipher_map: dict[str, str]) -> str: - """ - Deciphers a message given a cipher map - :param message: Message to decipher - :param cipher_map: Dictionary mapping to use - :return: Deciphered string - >>> cipher_map = create_cipher_map('Goodbye!!') - >>> decipher(encipher('Hello World!!', cipher_map), cipher_map) - 'HELLO WORLD!!' - """ - # Reverse our cipher mappings - rev_cipher_map = {v: k for k, v in cipher_map.items()} - return "".join(rev_cipher_map.get(ch, ch) for ch in message.upper()) - - -def main() -> None: - """ - Handles I/O - :return: void - """ - message = input("Enter message to encode or decode: ").strip() - key = input("Enter keyword: ").strip() - option = input("Encipher or decipher? E/D:").strip()[0].lower() - try: - func = {"e": encipher, "d": decipher}[option] - except KeyError: - raise KeyError("invalid input option") - cipher_map = create_cipher_map(key) - print(func(message, cipher_map)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/simple_substitution_cipher.py b/ciphers/simple_substitution_cipher.py deleted file mode 100644 index 291a9bccd771..000000000000 --- a/ciphers/simple_substitution_cipher.py +++ /dev/null @@ -1,78 +0,0 @@ -import random -import sys - -LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - - -def main() -> None: - message = input("Enter message: ") - key = "LFWOAYUISVKMNXPBDCRJTQEGHZ" - resp = input("Encrypt/Decrypt [e/d]: ") - - check_valid_key(key) - - if resp.lower().startswith("e"): - mode = "encrypt" - translated = encrypt_message(key, message) - elif resp.lower().startswith("d"): - mode = "decrypt" - translated = decrypt_message(key, message) - - print(f"\n{mode.title()}ion: \n{translated}") - - -def check_valid_key(key: str) -> None: - key_list = list(key) - letters_list = list(LETTERS) - key_list.sort() - letters_list.sort() - - if key_list != letters_list: - sys.exit("Error in the key or symbol set.") - - -def encrypt_message(key: str, message: str) -> str: - """ - >>> encrypt_message('LFWOAYUISVKMNXPBDCRJTQEGHZ', 'Harshil Darji') - 'Ilcrism Olcvs' - """ - return translate_message(key, message, "encrypt") - - -def decrypt_message(key: str, message: str) -> str: - """ - >>> decrypt_message('LFWOAYUISVKMNXPBDCRJTQEGHZ', 'Ilcrism Olcvs') - 'Harshil Darji' - """ - return translate_message(key, message, "decrypt") - - -def translate_message(key: str, message: str, mode: str) -> str: - translated = "" - chars_a = LETTERS - chars_b = key - - if mode == "decrypt": - chars_a, chars_b = chars_b, chars_a - - for symbol in message: - if symbol.upper() in chars_a: - sym_index = chars_a.find(symbol.upper()) - if symbol.isupper(): - translated += chars_b[sym_index].upper() - else: - translated += chars_b[sym_index].lower() - else: - translated += symbol - - return translated - - -def get_random_key() -> str: - key = list(LETTERS) - random.shuffle(key) - return "".join(key) - - -if __name__ == "__main__": - main() diff --git a/ciphers/transposition_cipher.py b/ciphers/transposition_cipher.py deleted file mode 100644 index f1f07ddc3f35..000000000000 --- a/ciphers/transposition_cipher.py +++ /dev/null @@ -1,70 +0,0 @@ -import math - -""" -In cryptography, the TRANSPOSITION cipher is a method of encryption where the -positions of plaintext are shifted a certain number(determined by the key) that -follows a regular system that results in the permuted text, known as the encrypted -text. The type of transposition cipher demonstrated under is the ROUTE cipher. -""" - - -def main() -> None: - message = input("Enter message: ") - key = int(input(f"Enter key [2-{len(message) - 1}]: ")) - mode = input("Encryption/Decryption [e/d]: ") - - if mode.lower().startswith("e"): - text = encrypt_message(key, message) - elif mode.lower().startswith("d"): - text = decrypt_message(key, message) - - # Append pipe symbol (vertical bar) to identify spaces at the end. - print(f"Output:\n{text + '|'}") - - -def encrypt_message(key: int, message: str) -> str: - """ - >>> encrypt_message(6, 'Harshil Darji') - 'Hlia rDsahrij' - """ - cipher_text = [""] * key - for col in range(key): - pointer = col - while pointer < len(message): - cipher_text[col] += message[pointer] - pointer += key - return "".join(cipher_text) - - -def decrypt_message(key: int, message: str) -> str: - """ - >>> decrypt_message(6, 'Hlia rDsahrij') - 'Harshil Darji' - """ - num_cols = math.ceil(len(message) / key) - num_rows = key - num_shaded_boxes = (num_cols * num_rows) - len(message) - plain_text = [""] * num_cols - col = 0 - row = 0 - - for symbol in message: - plain_text[col] += symbol - col += 1 - - if ( - (col == num_cols) - or (col == num_cols - 1) - and (row >= num_rows - num_shaded_boxes) - ): - col = 0 - row += 1 - - return "".join(plain_text) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/ciphers/transposition_cipher_encrypt_decrypt_file.py b/ciphers/transposition_cipher_encrypt_decrypt_file.py deleted file mode 100644 index b9630243d7f3..000000000000 --- a/ciphers/transposition_cipher_encrypt_decrypt_file.py +++ /dev/null @@ -1,41 +0,0 @@ -import os -import sys -import time - -from . import transposition_cipher as trans_cipher - - -def main() -> None: - input_file = "./prehistoric_men.txt" - output_file = "./Output.txt" - key = int(input("Enter key: ")) - mode = input("Encrypt/Decrypt [e/d]: ") - - if not os.path.exists(input_file): - print(f"File {input_file} does not exist. Quitting...") - sys.exit() - if os.path.exists(output_file): - print(f"Overwrite {output_file}? [y/n]") - response = input("> ") - if not response.lower().startswith("y"): - sys.exit() - - start_time = time.time() - if mode.lower().startswith("e"): - with open(input_file) as f: - content = f.read() - translated = trans_cipher.encrypt_message(key, content) - elif mode.lower().startswith("d"): - with open(output_file) as f: - content = f.read() - translated = trans_cipher.decrypt_message(key, content) - - with open(output_file, "w") as output_obj: - output_obj.write(translated) - - total_time = round(time.time() - start_time, 2) - print(("Done (", total_time, "seconds )")) - - -if __name__ == "__main__": - main() diff --git a/ciphers/trifid_cipher.py b/ciphers/trifid_cipher.py deleted file mode 100644 index 16b9faf67688..000000000000 --- a/ciphers/trifid_cipher.py +++ /dev/null @@ -1,210 +0,0 @@ -""" -The trifid cipher uses a table to fractionate each plaintext letter into a trigram, -mixes the constituents of the trigrams, and then applies the table in reverse to turn -these mixed trigrams into ciphertext letters. - -https://en.wikipedia.org/wiki/Trifid_cipher -""" - -from __future__ import annotations - -# fmt: off -TEST_CHARACTER_TO_NUMBER = { - "A": "111", "B": "112", "C": "113", "D": "121", "E": "122", "F": "123", "G": "131", - "H": "132", "I": "133", "J": "211", "K": "212", "L": "213", "M": "221", "N": "222", - "O": "223", "P": "231", "Q": "232", "R": "233", "S": "311", "T": "312", "U": "313", - "V": "321", "W": "322", "X": "323", "Y": "331", "Z": "332", "+": "333", -} -# fmt: off - -TEST_NUMBER_TO_CHARACTER = {val: key for key, val in TEST_CHARACTER_TO_NUMBER.items()} - - -def __encrypt_part(message_part: str, character_to_number: dict[str, str]) -> str: - """ - Arrange the triagram value of each letter of 'message_part' vertically and join - them horizontally. - - >>> __encrypt_part('ASK', TEST_CHARACTER_TO_NUMBER) - '132111112' - """ - one, two, three = "", "", "" - for each in (character_to_number[character] for character in message_part): - one += each[0] - two += each[1] - three += each[2] - - return one + two + three - - -def __decrypt_part( - message_part: str, character_to_number: dict[str, str] -) -> tuple[str, str, str]: - """ - Convert each letter of the input string into their respective trigram values, join - them and split them into three equal groups of strings which are returned. - - >>> __decrypt_part('ABCDE', TEST_CHARACTER_TO_NUMBER) - ('11111', '21131', '21122') - """ - this_part = "".join(character_to_number[character] for character in message_part) - result = [] - tmp = "" - for digit in this_part: - tmp += digit - if len(tmp) == len(message_part): - result.append(tmp) - tmp = "" - - return result[0], result[1], result[2] - - -def __prepare( - message: str, alphabet: str -) -> tuple[str, str, dict[str, str], dict[str, str]]: - """ - A helper function that generates the triagrams and assigns each letter of the - alphabet to its corresponding triagram and stores this in a dictionary - ("character_to_number" and "number_to_character") after confirming if the - alphabet's length is 27. - - >>> test = __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVwxYZ+') - >>> expected = ('IAMABOY','ABCDEFGHIJKLMNOPQRSTUVWXYZ+', - ... TEST_CHARACTER_TO_NUMBER, TEST_NUMBER_TO_CHARACTER) - >>> test == expected - True - - Testing with incomplete alphabet - >>> __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVw') - Traceback (most recent call last): - ... - KeyError: 'Length of alphabet has to be 27.' - - Testing with extra long alphabets - >>> __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVwxyzzwwtyyujjgfd') - Traceback (most recent call last): - ... - KeyError: 'Length of alphabet has to be 27.' - - Testing with punctuations that are not in the given alphabet - >>> __prepare('am i a boy?','abCdeFghijkLmnopqrStuVwxYZ+') - Traceback (most recent call last): - ... - ValueError: Each message character has to be included in alphabet! - - Testing with numbers - >>> __prepare(500,'abCdeFghijkLmnopqrStuVwxYZ+') - Traceback (most recent call last): - ... - AttributeError: 'int' object has no attribute 'replace' - """ - # Validate message and alphabet, set to upper and remove spaces - alphabet = alphabet.replace(" ", "").upper() - message = message.replace(" ", "").upper() - - # Check length and characters - if len(alphabet) != 27: - raise KeyError("Length of alphabet has to be 27.") - if any(char not in alphabet for char in message): - raise ValueError("Each message character has to be included in alphabet!") - - # Generate dictionares - character_to_number = dict(zip(alphabet, TEST_CHARACTER_TO_NUMBER.values())) - number_to_character = { - number: letter for letter, number in character_to_number.items() - } - - return message, alphabet, character_to_number, number_to_character - - -def encrypt_message( - message: str, alphabet: str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.", period: int = 5 -) -> str: - """ - encrypt_message - =============== - - Encrypts a message using the trifid_cipher. Any punctuatuions that - would be used should be added to the alphabet. - - PARAMETERS - ---------- - - * message: The message you want to encrypt. - * alphabet (optional): The characters to be used for the cipher . - * period (optional): The number of characters you want in a group whilst - encrypting. - - >>> encrypt_message('I am a boy') - 'BCDGBQY' - - >>> encrypt_message(' ') - '' - - >>> encrypt_message(' aide toi le c iel ta id era ', - ... 'FELIXMARDSTBCGHJKNOPQUVWYZ+',5) - 'FMJFVOISSUFTFPUFEQQC' - - """ - message, alphabet, character_to_number, number_to_character = __prepare( - message, alphabet - ) - - encrypted_numeric = "" - for i in range(0, len(message) + 1, period): - encrypted_numeric += __encrypt_part( - message[i : i + period], character_to_number - ) - - encrypted = "" - for i in range(0, len(encrypted_numeric), 3): - encrypted += number_to_character[encrypted_numeric[i : i + 3]] - return encrypted - - -def decrypt_message( - message: str, alphabet: str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.", period: int = 5 -) -> str: - """ - decrypt_message - =============== - - Decrypts a trifid_cipher encrypted message . - - PARAMETERS - ---------- - - * message: The message you want to decrypt . - * alphabet (optional): The characters used for the cipher. - * period (optional): The number of characters used in grouping when it - was encrypted. - - >>> decrypt_message('BCDGBQY') - 'IAMABOY' - - Decrypting with your own alphabet and period - >>> decrypt_message('FMJFVOISSUFTFPUFEQQC','FELIXMARDSTBCGHJKNOPQUVWYZ+',5) - 'AIDETOILECIELTAIDERA' - """ - message, alphabet, character_to_number, number_to_character = __prepare( - message, alphabet - ) - - decrypted_numeric = [] - for i in range(0, len(message), period): - a, b, c = __decrypt_part(message[i : i + period], character_to_number) - - for j in range(len(a)): - decrypted_numeric.append(a[j] + b[j] + c[j]) - - return "".join(number_to_character[each] for each in decrypted_numeric) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - msg = "DEFEND THE EAST WALL OF THE CASTLE." - encrypted = encrypt_message(msg, "EPSDUCVWYM.ZLKXNBTFGORIJHAQ") - decrypted = decrypt_message(encrypted, "EPSDUCVWYM.ZLKXNBTFGORIJHAQ") - print(f"Encrypted: {encrypted}\nDecrypted: {decrypted}") diff --git a/ciphers/vernam_cipher.py b/ciphers/vernam_cipher.py deleted file mode 100644 index 197f28635a1c..000000000000 --- a/ciphers/vernam_cipher.py +++ /dev/null @@ -1,42 +0,0 @@ -def vernam_encrypt(plaintext: str, key: str) -> str: - """ - >>> vernam_encrypt("HELLO","KEY") - 'RIJVS' - """ - ciphertext = "" - for i in range(len(plaintext)): - ct = ord(key[i % len(key)]) - 65 + ord(plaintext[i]) - 65 - while ct > 25: - ct = ct - 26 - ciphertext += chr(65 + ct) - return ciphertext - - -def vernam_decrypt(ciphertext: str, key: str) -> str: - """ - >>> vernam_decrypt("RIJVS","KEY") - 'HELLO' - """ - decrypted_text = "" - for i in range(len(ciphertext)): - ct = ord(ciphertext[i]) - ord(key[i % len(key)]) - while ct < 0: - ct = 26 + ct - decrypted_text += chr(65 + ct) - return decrypted_text - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - # Example usage - plaintext = "HELLO" - key = "KEY" - encrypted_text = vernam_encrypt(plaintext, key) - decrypted_text = vernam_decrypt(encrypted_text, key) - print("\n\n") - print("Plaintext:", plaintext) - print("Encrypted:", encrypted_text) - print("Decrypted:", decrypted_text) diff --git a/ciphers/vigenere_cipher.py b/ciphers/vigenere_cipher.py deleted file mode 100644 index e76161351fb1..000000000000 --- a/ciphers/vigenere_cipher.py +++ /dev/null @@ -1,65 +0,0 @@ -LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - - -def main() -> None: - message = input("Enter message: ") - key = input("Enter key [alphanumeric]: ") - mode = input("Encrypt/Decrypt [e/d]: ") - - if mode.lower().startswith("e"): - mode = "encrypt" - translated = encrypt_message(key, message) - elif mode.lower().startswith("d"): - mode = "decrypt" - translated = decrypt_message(key, message) - - print(f"\n{mode.title()}ed message:") - print(translated) - - -def encrypt_message(key: str, message: str) -> str: - """ - >>> encrypt_message('HDarji', 'This is Harshil Darji from Dharmaj.') - 'Akij ra Odrjqqs Gaisq muod Mphumrs.' - """ - return translate_message(key, message, "encrypt") - - -def decrypt_message(key: str, message: str) -> str: - """ - >>> decrypt_message('HDarji', 'Akij ra Odrjqqs Gaisq muod Mphumrs.') - 'This is Harshil Darji from Dharmaj.' - """ - return translate_message(key, message, "decrypt") - - -def translate_message(key: str, message: str, mode: str) -> str: - translated = [] - key_index = 0 - key = key.upper() - - for symbol in message: - num = LETTERS.find(symbol.upper()) - if num != -1: - if mode == "encrypt": - num += LETTERS.find(key[key_index]) - elif mode == "decrypt": - num -= LETTERS.find(key[key_index]) - - num %= len(LETTERS) - - if symbol.isupper(): - translated.append(LETTERS[num]) - elif symbol.islower(): - translated.append(LETTERS[num].lower()) - - key_index += 1 - if key_index == len(key): - key_index = 0 - else: - translated.append(symbol) - return "".join(translated) - - -if __name__ == "__main__": - main() diff --git a/ciphers/xor_cipher.py b/ciphers/xor_cipher.py deleted file mode 100644 index 24d88a0fd588..000000000000 --- a/ciphers/xor_cipher.py +++ /dev/null @@ -1,268 +0,0 @@ -""" -author: Christian Bender -date: 21.12.2017 -class: XORCipher - -This class implements the XOR-cipher algorithm and provides -some useful methods for encrypting and decrypting strings and -files. - -Overview about methods - -- encrypt : list of char -- decrypt : list of char -- encrypt_string : str -- decrypt_string : str -- encrypt_file : boolean -- decrypt_file : boolean -""" - -from __future__ import annotations - - -class XORCipher: - def __init__(self, key: int = 0): - """ - simple constructor that receives a key or uses - default key = 0 - """ - - # private field - self.__key = key - - def encrypt(self, content: str, key: int) -> list[str]: - """ - input: 'content' of type string and 'key' of type int - output: encrypted string 'content' as a list of chars - if key not passed the method uses the key by the constructor. - otherwise key = 1 - - Empty list - >>> XORCipher().encrypt("", 5) - [] - - One key - >>> XORCipher().encrypt("hallo welt", 1) - ['i', '`', 'm', 'm', 'n', '!', 'v', 'd', 'm', 'u'] - - Normal key - >>> XORCipher().encrypt("HALLO WELT", 32) - ['h', 'a', 'l', 'l', 'o', '\\x00', 'w', 'e', 'l', 't'] - - Key greater than 255 - >>> XORCipher().encrypt("hallo welt", 256) - ['h', 'a', 'l', 'l', 'o', ' ', 'w', 'e', 'l', 't'] - """ - - # precondition - assert isinstance(key, int) - assert isinstance(content, str) - - key = key or self.__key or 1 - - # make sure key is an appropriate size - key %= 256 - - return [chr(ord(ch) ^ key) for ch in content] - - def decrypt(self, content: str, key: int) -> list[str]: - """ - input: 'content' of type list and 'key' of type int - output: decrypted string 'content' as a list of chars - if key not passed the method uses the key by the constructor. - otherwise key = 1 - - Empty list - >>> XORCipher().decrypt("", 5) - [] - - One key - >>> XORCipher().decrypt("hallo welt", 1) - ['i', '`', 'm', 'm', 'n', '!', 'v', 'd', 'm', 'u'] - - Normal key - >>> XORCipher().decrypt("HALLO WELT", 32) - ['h', 'a', 'l', 'l', 'o', '\\x00', 'w', 'e', 'l', 't'] - - Key greater than 255 - >>> XORCipher().decrypt("hallo welt", 256) - ['h', 'a', 'l', 'l', 'o', ' ', 'w', 'e', 'l', 't'] - """ - - # precondition - assert isinstance(key, int) - assert isinstance(content, str) - - key = key or self.__key or 1 - - # make sure key is an appropriate size - key %= 256 - - return [chr(ord(ch) ^ key) for ch in content] - - def encrypt_string(self, content: str, key: int = 0) -> str: - """ - input: 'content' of type string and 'key' of type int - output: encrypted string 'content' - if key not passed the method uses the key by the constructor. - otherwise key = 1 - - Empty list - >>> XORCipher().encrypt_string("", 5) - '' - - One key - >>> XORCipher().encrypt_string("hallo welt", 1) - 'i`mmn!vdmu' - - Normal key - >>> XORCipher().encrypt_string("HALLO WELT", 32) - 'hallo\\x00welt' - - Key greater than 255 - >>> XORCipher().encrypt_string("hallo welt", 256) - 'hallo welt' - """ - - # precondition - assert isinstance(key, int) - assert isinstance(content, str) - - key = key or self.__key or 1 - - # make sure key is an appropriate size - key %= 256 - - # This will be returned - ans = "" - - for ch in content: - ans += chr(ord(ch) ^ key) - - return ans - - def decrypt_string(self, content: str, key: int = 0) -> str: - """ - input: 'content' of type string and 'key' of type int - output: decrypted string 'content' - if key not passed the method uses the key by the constructor. - otherwise key = 1 - - Empty list - >>> XORCipher().decrypt_string("", 5) - '' - - One key - >>> XORCipher().decrypt_string("hallo welt", 1) - 'i`mmn!vdmu' - - Normal key - >>> XORCipher().decrypt_string("HALLO WELT", 32) - 'hallo\\x00welt' - - Key greater than 255 - >>> XORCipher().decrypt_string("hallo welt", 256) - 'hallo welt' - """ - - # precondition - assert isinstance(key, int) - assert isinstance(content, str) - - key = key or self.__key or 1 - - # make sure key is an appropriate size - key %= 256 - - # This will be returned - ans = "" - - for ch in content: - ans += chr(ord(ch) ^ key) - - return ans - - def encrypt_file(self, file: str, key: int = 0) -> bool: - """ - input: filename (str) and a key (int) - output: returns true if encrypt process was - successful otherwise false - if key not passed the method uses the key by the constructor. - otherwise key = 1 - """ - - # precondition - assert isinstance(file, str) - assert isinstance(key, int) - - # make sure key is an appropriate size - key %= 256 - - try: - with open(file) as fin, open("encrypt.out", "w+") as fout: - # actual encrypt-process - for line in fin: - fout.write(self.encrypt_string(line, key)) - - except OSError: - return False - - return True - - def decrypt_file(self, file: str, key: int) -> bool: - """ - input: filename (str) and a key (int) - output: returns true if decrypt process was - successful otherwise false - if key not passed the method uses the key by the constructor. - otherwise key = 1 - """ - - # precondition - assert isinstance(file, str) - assert isinstance(key, int) - - # make sure key is an appropriate size - key %= 256 - - try: - with open(file) as fin, open("decrypt.out", "w+") as fout: - # actual encrypt-process - for line in fin: - fout.write(self.decrypt_string(line, key)) - - except OSError: - return False - - return True - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - -# Tests -# crypt = XORCipher() -# key = 67 - -# # test encrypt -# print(crypt.encrypt("hallo welt",key)) -# # test decrypt -# print(crypt.decrypt(crypt.encrypt("hallo welt",key), key)) - -# # test encrypt_string -# print(crypt.encrypt_string("hallo welt",key)) - -# # test decrypt_string -# print(crypt.decrypt_string(crypt.encrypt_string("hallo welt",key),key)) - -# if (crypt.encrypt_file("test.txt",key)): -# print("encrypt successful") -# else: -# print("encrypt unsuccessful") - -# if (crypt.decrypt_file("encrypt.out",key)): -# print("decrypt successful") -# else: -# print("decrypt unsuccessful") diff --git a/compression/README.md b/compression/README.md deleted file mode 100644 index bad7ae1a2f76..000000000000 --- a/compression/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Compression - -Data compression is everywhere, you need it to store data without taking too much space. -Either the compression loses some data (then we talk about lossy compression, such as .jpg) or it does not (and then it is lossless compression, such as .png) - -Lossless compression is mainly used for archive purpose as it allows storing data without losing information about the file archived. On the other hand, lossy compression is used for transfer of file where quality isn't necessarily what is required (i.e: images on Twitter). - -* <https://www.sciencedirect.com/topics/computer-science/compression-algorithm> -* <https://en.wikipedia.org/wiki/Data_compression> -* <https://en.wikipedia.org/wiki/Pigeonhole_principle> diff --git a/compression/__init__.py b/compression/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/compression/burrows_wheeler.py b/compression/burrows_wheeler.py deleted file mode 100644 index 857d677c904e..000000000000 --- a/compression/burrows_wheeler.py +++ /dev/null @@ -1,177 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform - -The Burrows-Wheeler transform (BWT, also called block-sorting compression) -rearranges a character string into runs of similar characters. This is useful -for compression, since it tends to be easy to compress a string that has runs -of repeated characters by techniques such as move-to-front transform and -run-length encoding. More importantly, the transformation is reversible, -without needing to store any additional data except the position of the first -original character. The BWT is thus a "free" method of improving the efficiency -of text compression algorithms, costing only some extra computation. -""" - -from __future__ import annotations - -from typing import TypedDict - - -class BWTTransformDict(TypedDict): - bwt_string: str - idx_original_string: int - - -def all_rotations(s: str) -> list[str]: - """ - :param s: The string that will be rotated len(s) times. - :return: A list with the rotations. - :raises TypeError: If s is not an instance of str. - Examples: - - >>> all_rotations("^BANANA|") # doctest: +NORMALIZE_WHITESPACE - ['^BANANA|', 'BANANA|^', 'ANANA|^B', 'NANA|^BA', 'ANA|^BAN', 'NA|^BANA', - 'A|^BANAN', '|^BANANA'] - >>> all_rotations("a_asa_da_casa") # doctest: +NORMALIZE_WHITESPACE - ['a_asa_da_casa', '_asa_da_casaa', 'asa_da_casaa_', 'sa_da_casaa_a', - 'a_da_casaa_as', '_da_casaa_asa', 'da_casaa_asa_', 'a_casaa_asa_d', - '_casaa_asa_da', 'casaa_asa_da_', 'asaa_asa_da_c', 'saa_asa_da_ca', - 'aa_asa_da_cas'] - >>> all_rotations("panamabanana") # doctest: +NORMALIZE_WHITESPACE - ['panamabanana', 'anamabananap', 'namabananapa', 'amabananapan', - 'mabananapana', 'abananapanam', 'bananapanama', 'ananapanamab', - 'nanapanamaba', 'anapanamaban', 'napanamabana', 'apanamabanan'] - >>> all_rotations(5) - Traceback (most recent call last): - ... - TypeError: The parameter s type must be str. - """ - if not isinstance(s, str): - raise TypeError("The parameter s type must be str.") - - return [s[i:] + s[:i] for i in range(len(s))] - - -def bwt_transform(s: str) -> BWTTransformDict: - """ - :param s: The string that will be used at bwt algorithm - :return: the string composed of the last char of each row of the ordered - rotations and the index of the original string at ordered rotations list - :raises TypeError: If the s parameter type is not str - :raises ValueError: If the s parameter is empty - Examples: - - >>> bwt_transform("^BANANA") - {'bwt_string': 'BNN^AAA', 'idx_original_string': 6} - >>> bwt_transform("a_asa_da_casa") - {'bwt_string': 'aaaadss_c__aa', 'idx_original_string': 3} - >>> bwt_transform("panamabanana") - {'bwt_string': 'mnpbnnaaaaaa', 'idx_original_string': 11} - >>> bwt_transform(4) - Traceback (most recent call last): - ... - TypeError: The parameter s type must be str. - >>> bwt_transform('') - Traceback (most recent call last): - ... - ValueError: The parameter s must not be empty. - """ - if not isinstance(s, str): - raise TypeError("The parameter s type must be str.") - if not s: - raise ValueError("The parameter s must not be empty.") - - rotations = all_rotations(s) - rotations.sort() # sort the list of rotations in alphabetically order - # make a string composed of the last char of each rotation - response: BWTTransformDict = { - "bwt_string": "".join([word[-1] for word in rotations]), - "idx_original_string": rotations.index(s), - } - return response - - -def reverse_bwt(bwt_string: str, idx_original_string: int) -> str: - """ - :param bwt_string: The string returned from bwt algorithm execution - :param idx_original_string: A 0-based index of the string that was used to - generate bwt_string at ordered rotations list - :return: The string used to generate bwt_string when bwt was executed - :raises TypeError: If the bwt_string parameter type is not str - :raises ValueError: If the bwt_string parameter is empty - :raises TypeError: If the idx_original_string type is not int or if not - possible to cast it to int - :raises ValueError: If the idx_original_string value is lower than 0 or - greater than len(bwt_string) - 1 - - >>> reverse_bwt("BNN^AAA", 6) - '^BANANA' - >>> reverse_bwt("aaaadss_c__aa", 3) - 'a_asa_da_casa' - >>> reverse_bwt("mnpbnnaaaaaa", 11) - 'panamabanana' - >>> reverse_bwt(4, 11) - Traceback (most recent call last): - ... - TypeError: The parameter bwt_string type must be str. - >>> reverse_bwt("", 11) - Traceback (most recent call last): - ... - ValueError: The parameter bwt_string must not be empty. - >>> reverse_bwt("mnpbnnaaaaaa", "asd") # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - TypeError: The parameter idx_original_string type must be int or passive - of cast to int. - >>> reverse_bwt("mnpbnnaaaaaa", -1) - Traceback (most recent call last): - ... - ValueError: The parameter idx_original_string must not be lower than 0. - >>> reverse_bwt("mnpbnnaaaaaa", 12) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: The parameter idx_original_string must be lower than - len(bwt_string). - >>> reverse_bwt("mnpbnnaaaaaa", 11.0) - 'panamabanana' - >>> reverse_bwt("mnpbnnaaaaaa", 11.4) - 'panamabanana' - """ - if not isinstance(bwt_string, str): - raise TypeError("The parameter bwt_string type must be str.") - if not bwt_string: - raise ValueError("The parameter bwt_string must not be empty.") - try: - idx_original_string = int(idx_original_string) - except ValueError: - raise TypeError( - "The parameter idx_original_string type must be int or passive" - " of cast to int." - ) - if idx_original_string < 0: - raise ValueError("The parameter idx_original_string must not be lower than 0.") - if idx_original_string >= len(bwt_string): - raise ValueError( - "The parameter idx_original_string must be lower than len(bwt_string)." - ) - - ordered_rotations = [""] * len(bwt_string) - for _ in range(len(bwt_string)): - for i in range(len(bwt_string)): - ordered_rotations[i] = bwt_string[i] + ordered_rotations[i] - ordered_rotations.sort() - return ordered_rotations[idx_original_string] - - -if __name__ == "__main__": - entry_msg = "Provide a string that I will generate its BWT transform: " - s = input(entry_msg).strip() - result = bwt_transform(s) - print( - f"Burrows Wheeler transform for string '{s}' results " - f"in '{result['bwt_string']}'" - ) - original_string = reverse_bwt(result["bwt_string"], result["idx_original_string"]) - print( - f"Reversing Burrows Wheeler transform for entry '{result['bwt_string']}' " - f"we get original string '{original_string}'" - ) diff --git a/compression/huffman.py b/compression/huffman.py deleted file mode 100644 index 44eda6c03180..000000000000 --- a/compression/huffman.py +++ /dev/null @@ -1,92 +0,0 @@ -from __future__ import annotations - -import sys - - -class Letter: - def __init__(self, letter: str, freq: int): - self.letter: str = letter - self.freq: int = freq - self.bitstring: dict[str, str] = {} - - def __repr__(self) -> str: - return f"{self.letter}:{self.freq}" - - -class TreeNode: - def __init__(self, freq: int, left: Letter | TreeNode, right: Letter | TreeNode): - self.freq: int = freq - self.left: Letter | TreeNode = left - self.right: Letter | TreeNode = right - - -def parse_file(file_path: str) -> list[Letter]: - """ - Read the file and build a dict of all letters and their - frequencies, then convert the dict into a list of Letters. - """ - chars: dict[str, int] = {} - with open(file_path) as f: - while True: - c = f.read(1) - if not c: - break - chars[c] = chars[c] + 1 if c in chars else 1 - return sorted((Letter(c, f) for c, f in chars.items()), key=lambda x: x.freq) - - -def build_tree(letters: list[Letter]) -> Letter | TreeNode: - """ - Run through the list of Letters and build the min heap - for the Huffman Tree. - """ - response: list[Letter | TreeNode] = list(letters) - while len(response) > 1: - left = response.pop(0) - right = response.pop(0) - total_freq = left.freq + right.freq - node = TreeNode(total_freq, left, right) - response.append(node) - response.sort(key=lambda x: x.freq) - return response[0] - - -def traverse_tree(root: Letter | TreeNode, bitstring: str) -> list[Letter]: - """ - Recursively traverse the Huffman Tree to set each - Letter's bitstring dictionary, and return the list of Letters - """ - if isinstance(root, Letter): - root.bitstring[root.letter] = bitstring - return [root] - treenode: TreeNode = root - letters = [] - letters += traverse_tree(treenode.left, bitstring + "0") - letters += traverse_tree(treenode.right, bitstring + "1") - return letters - - -def huffman(file_path: str) -> None: - """ - Parse the file, build the tree, then run through the file - again, using the letters dictionary to find and print out the - bitstring for each letter. - """ - letters_list = parse_file(file_path) - root = build_tree(letters_list) - letters = { - k: v for letter in traverse_tree(root, "") for k, v in letter.bitstring.items() - } - print(f"Huffman Coding of {file_path}: ") - with open(file_path) as f: - while True: - c = f.read(1) - if not c: - break - print(letters[c], end=" ") - print() - - -if __name__ == "__main__": - # pass the file path to the huffman function - huffman(sys.argv[1]) diff --git a/compression/image_data/PSNR-example-base.png b/compression/image_data/PSNR-example-base.png deleted file mode 100644 index bf12a5450b96..000000000000 Binary files a/compression/image_data/PSNR-example-base.png and /dev/null differ diff --git a/compression/image_data/PSNR-example-comp-10.jpg b/compression/image_data/PSNR-example-comp-10.jpg deleted file mode 100644 index a137ebb1100f..000000000000 Binary files a/compression/image_data/PSNR-example-comp-10.jpg and /dev/null differ diff --git a/compression/image_data/__init__.py b/compression/image_data/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/compression/image_data/compressed_image.png b/compression/image_data/compressed_image.png deleted file mode 100644 index 75c41c21c7b5..000000000000 Binary files a/compression/image_data/compressed_image.png and /dev/null differ diff --git a/compression/image_data/example_image.jpg b/compression/image_data/example_image.jpg deleted file mode 100644 index 3a58ba3a8c33..000000000000 Binary files a/compression/image_data/example_image.jpg and /dev/null differ diff --git a/compression/image_data/example_wikipedia_image.jpg b/compression/image_data/example_wikipedia_image.jpg deleted file mode 100644 index 1e983e845651..000000000000 Binary files a/compression/image_data/example_wikipedia_image.jpg and /dev/null differ diff --git a/compression/image_data/original_image.png b/compression/image_data/original_image.png deleted file mode 100644 index 09a76ffa8ce1..000000000000 Binary files a/compression/image_data/original_image.png and /dev/null differ diff --git a/compression/lempel_ziv.py b/compression/lempel_ziv.py deleted file mode 100644 index 2751a0ebcdb6..000000000000 --- a/compression/lempel_ziv.py +++ /dev/null @@ -1,125 +0,0 @@ -""" -One of the several implementations of Lempel-Ziv-Welch compression algorithm -https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch -""" - -import math -import os -import sys - - -def read_file_binary(file_path: str) -> str: - """ - Reads given file as bytes and returns them as a long string - """ - result = "" - try: - with open(file_path, "rb") as binary_file: - data = binary_file.read() - for dat in data: - curr_byte = f"{dat:08b}" - result += curr_byte - return result - except OSError: - print("File not accessible") - sys.exit() - - -def add_key_to_lexicon( - lexicon: dict[str, str], curr_string: str, index: int, last_match_id: str -) -> None: - """ - Adds new strings (curr_string + "0", curr_string + "1") to the lexicon - """ - lexicon.pop(curr_string) - lexicon[curr_string + "0"] = last_match_id - - if math.log2(index).is_integer(): - for curr_key in lexicon: - lexicon[curr_key] = "0" + lexicon[curr_key] - - lexicon[curr_string + "1"] = bin(index)[2:] - - -def compress_data(data_bits: str) -> str: - """ - Compresses given data_bits using Lempel-Ziv-Welch compression algorithm - and returns the result as a string - """ - lexicon = {"0": "0", "1": "1"} - result, curr_string = "", "" - index = len(lexicon) - - for i in range(len(data_bits)): - curr_string += data_bits[i] - if curr_string not in lexicon: - continue - - last_match_id = lexicon[curr_string] - result += last_match_id - add_key_to_lexicon(lexicon, curr_string, index, last_match_id) - index += 1 - curr_string = "" - - while curr_string != "" and curr_string not in lexicon: - curr_string += "0" - - if curr_string != "": - last_match_id = lexicon[curr_string] - result += last_match_id - - return result - - -def add_file_length(source_path: str, compressed: str) -> str: - """ - Adds given file's length in front (using Elias gamma coding) of the compressed - string - """ - file_length = os.path.getsize(source_path) - file_length_binary = bin(file_length)[2:] - length_length = len(file_length_binary) - - return "0" * (length_length - 1) + file_length_binary + compressed - - -def write_file_binary(file_path: str, to_write: str) -> None: - """ - Writes given to_write string (should only consist of 0's and 1's) as bytes in the - file - """ - byte_length = 8 - try: - with open(file_path, "wb") as opened_file: - result_byte_array = [ - to_write[i : i + byte_length] - for i in range(0, len(to_write), byte_length) - ] - - if len(result_byte_array[-1]) % byte_length == 0: - result_byte_array.append("10000000") - else: - result_byte_array[-1] += "1" + "0" * ( - byte_length - len(result_byte_array[-1]) - 1 - ) - - for elem in result_byte_array: - opened_file.write(int(elem, 2).to_bytes(1, byteorder="big")) - except OSError: - print("File not accessible") - sys.exit() - - -def compress(source_path: str, destination_path: str) -> None: - """ - Reads source file, compresses it and writes the compressed result in destination - file - """ - data_bits = read_file_binary(source_path) - compressed = compress_data(data_bits) - compressed = add_file_length(source_path, compressed) - write_file_binary(destination_path, compressed) - - -if __name__ == "__main__": - compress(sys.argv[1], sys.argv[2]) diff --git a/compression/lempel_ziv_decompress.py b/compression/lempel_ziv_decompress.py deleted file mode 100644 index 225e96236c2c..000000000000 --- a/compression/lempel_ziv_decompress.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -One of the several implementations of Lempel-Ziv-Welch decompression algorithm -https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch -""" - -import math -import sys - - -def read_file_binary(file_path: str) -> str: - """ - Reads given file as bytes and returns them as a long string - """ - result = "" - try: - with open(file_path, "rb") as binary_file: - data = binary_file.read() - for dat in data: - curr_byte = f"{dat:08b}" - result += curr_byte - return result - except OSError: - print("File not accessible") - sys.exit() - - -def decompress_data(data_bits: str) -> str: - """ - Decompresses given data_bits using Lempel-Ziv-Welch compression algorithm - and returns the result as a string - """ - lexicon = {"0": "0", "1": "1"} - result, curr_string = "", "" - index = len(lexicon) - - for i in range(len(data_bits)): - curr_string += data_bits[i] - if curr_string not in lexicon: - continue - - last_match_id = lexicon[curr_string] - result += last_match_id - lexicon[curr_string] = last_match_id + "0" - - if math.log2(index).is_integer(): - new_lex = {} - for curr_key in list(lexicon): - new_lex["0" + curr_key] = lexicon.pop(curr_key) - lexicon = new_lex - - lexicon[bin(index)[2:]] = last_match_id + "1" - index += 1 - curr_string = "" - return result - - -def write_file_binary(file_path: str, to_write: str) -> None: - """ - Writes given to_write string (should only consist of 0's and 1's) as bytes in the - file - """ - byte_length = 8 - try: - with open(file_path, "wb") as opened_file: - result_byte_array = [ - to_write[i : i + byte_length] - for i in range(0, len(to_write), byte_length) - ] - - if len(result_byte_array[-1]) % byte_length == 0: - result_byte_array.append("10000000") - else: - result_byte_array[-1] += "1" + "0" * ( - byte_length - len(result_byte_array[-1]) - 1 - ) - - for elem in result_byte_array[:-1]: - opened_file.write(int(elem, 2).to_bytes(1, byteorder="big")) - except OSError: - print("File not accessible") - sys.exit() - - -def remove_prefix(data_bits: str) -> str: - """ - Removes size prefix, that compressed file should have - Returns the result - """ - counter = 0 - for letter in data_bits: - if letter == "1": - break - counter += 1 - - data_bits = data_bits[counter:] - data_bits = data_bits[counter + 1 :] - return data_bits - - -def compress(source_path: str, destination_path: str) -> None: - """ - Reads source file, decompresses it and writes the result in destination file - """ - data_bits = read_file_binary(source_path) - data_bits = remove_prefix(data_bits) - decompressed = decompress_data(data_bits) - write_file_binary(destination_path, decompressed) - - -if __name__ == "__main__": - compress(sys.argv[1], sys.argv[2]) diff --git a/compression/lz77.py b/compression/lz77.py deleted file mode 100644 index 09b8b021e9d5..000000000000 --- a/compression/lz77.py +++ /dev/null @@ -1,225 +0,0 @@ -""" -LZ77 compression algorithm -- lossless data compression published in papers by Abraham Lempel and Jacob Ziv in 1977 -- also known as LZ1 or sliding-window compression -- form the basis for many variations including LZW, LZSS, LZMA and others - -It uses a “sliding window” method. Within the sliding window we have: - - search buffer - - look ahead buffer -len(sliding_window) = len(search_buffer) + len(look_ahead_buffer) - -LZ77 manages a dictionary that uses triples composed of: - - Offset into search buffer, it's the distance between the start of a phrase and - the beginning of a file. - - Length of the match, it's the number of characters that make up a phrase. - - The indicator is represented by a character that is going to be encoded next. - -As a file is parsed, the dictionary is dynamically updated to reflect the compressed -data contents and size. - -Examples: -"cabracadabrarrarrad" <-> [(0, 0, 'c'), (0, 0, 'a'), (0, 0, 'b'), (0, 0, 'r'), - (3, 1, 'c'), (2, 1, 'd'), (7, 4, 'r'), (3, 5, 'd')] -"ababcbababaa" <-> [(0, 0, 'a'), (0, 0, 'b'), (2, 2, 'c'), (4, 3, 'a'), (2, 2, 'a')] -"aacaacabcabaaac" <-> [(0, 0, 'a'), (1, 1, 'c'), (3, 4, 'b'), (3, 3, 'a'), (1, 2, 'c')] - -Sources: -en.wikipedia.org/wiki/LZ77_and_LZ78 -""" - -from dataclasses import dataclass - -__version__ = "0.1" -__author__ = "Lucia Harcekova" - - -@dataclass -class Token: - """ - Dataclass representing triplet called token consisting of length, offset - and indicator. This triplet is used during LZ77 compression. - """ - - offset: int - length: int - indicator: str - - def __repr__(self) -> str: - """ - >>> token = Token(1, 2, "c") - >>> repr(token) - '(1, 2, c)' - >>> str(token) - '(1, 2, c)' - """ - return f"({self.offset}, {self.length}, {self.indicator})" - - -class LZ77Compressor: - """ - Class containing compress and decompress methods using LZ77 compression algorithm. - """ - - def __init__(self, window_size: int = 13, lookahead_buffer_size: int = 6) -> None: - self.window_size = window_size - self.lookahead_buffer_size = lookahead_buffer_size - self.search_buffer_size = self.window_size - self.lookahead_buffer_size - - def compress(self, text: str) -> list[Token]: - """ - Compress the given string text using LZ77 compression algorithm. - - Args: - text: string to be compressed - - Returns: - output: the compressed text as a list of Tokens - - >>> lz77_compressor = LZ77Compressor() - >>> str(lz77_compressor.compress("ababcbababaa")) - '[(0, 0, a), (0, 0, b), (2, 2, c), (4, 3, a), (2, 2, a)]' - >>> str(lz77_compressor.compress("aacaacabcabaaac")) - '[(0, 0, a), (1, 1, c), (3, 4, b), (3, 3, a), (1, 2, c)]' - """ - - output = [] - search_buffer = "" - - # while there are still characters in text to compress - while text: - # find the next encoding phrase - # - triplet with offset, length, indicator (the next encoding character) - token = self._find_encoding_token(text, search_buffer) - - # update the search buffer: - # - add new characters from text into it - # - check if size exceed the max search buffer size, if so, drop the - # oldest elements - search_buffer += text[: token.length + 1] - if len(search_buffer) > self.search_buffer_size: - search_buffer = search_buffer[-self.search_buffer_size :] - - # update the text - text = text[token.length + 1 :] - - # append the token to output - output.append(token) - - return output - - def decompress(self, tokens: list[Token]) -> str: - """ - Convert the list of tokens into an output string. - - Args: - tokens: list containing triplets (offset, length, char) - - Returns: - output: decompressed text - - Tests: - >>> lz77_compressor = LZ77Compressor() - >>> lz77_compressor.decompress([Token(0, 0, 'c'), Token(0, 0, 'a'), - ... Token(0, 0, 'b'), Token(0, 0, 'r'), Token(3, 1, 'c'), - ... Token(2, 1, 'd'), Token(7, 4, 'r'), Token(3, 5, 'd')]) - 'cabracadabrarrarrad' - >>> lz77_compressor.decompress([Token(0, 0, 'a'), Token(0, 0, 'b'), - ... Token(2, 2, 'c'), Token(4, 3, 'a'), Token(2, 2, 'a')]) - 'ababcbababaa' - >>> lz77_compressor.decompress([Token(0, 0, 'a'), Token(1, 1, 'c'), - ... Token(3, 4, 'b'), Token(3, 3, 'a'), Token(1, 2, 'c')]) - 'aacaacabcabaaac' - """ - - output = "" - - for token in tokens: - for _ in range(token.length): - output += output[-token.offset] - output += token.indicator - - return output - - def _find_encoding_token(self, text: str, search_buffer: str) -> Token: - """Finds the encoding token for the first character in the text. - - Tests: - >>> lz77_compressor = LZ77Compressor() - >>> lz77_compressor._find_encoding_token("abrarrarrad", "abracad").offset - 7 - >>> lz77_compressor._find_encoding_token("adabrarrarrad", "cabrac").length - 1 - >>> lz77_compressor._find_encoding_token("abc", "xyz").offset - 0 - >>> lz77_compressor._find_encoding_token("", "xyz").offset - Traceback (most recent call last): - ... - ValueError: We need some text to work with. - >>> lz77_compressor._find_encoding_token("abc", "").offset - 0 - """ - - if not text: - raise ValueError("We need some text to work with.") - - # Initialise result parameters to default values - length, offset = 0, 0 - - if not search_buffer: - return Token(offset, length, text[length]) - - for i, character in enumerate(search_buffer): - found_offset = len(search_buffer) - i - if character == text[0]: - found_length = self._match_length_from_index(text, search_buffer, 0, i) - # if the found length is bigger than the current or if it's equal, - # which means it's offset is smaller: update offset and length - if found_length >= length: - offset, length = found_offset, found_length - - return Token(offset, length, text[length]) - - def _match_length_from_index( - self, text: str, window: str, text_index: int, window_index: int - ) -> int: - """Calculate the longest possible match of text and window characters from - text_index in text and window_index in window. - - Args: - text: _description_ - window: sliding window - text_index: index of character in text - window_index: index of character in sliding window - - Returns: - The maximum match between text and window, from given indexes. - - Tests: - >>> lz77_compressor = LZ77Compressor(13, 6) - >>> lz77_compressor._match_length_from_index("rarrad", "adabrar", 0, 4) - 5 - >>> lz77_compressor._match_length_from_index("adabrarrarrad", - ... "cabrac", 0, 1) - 1 - """ - if not text or text[text_index] != window[window_index]: - return 0 - return 1 + self._match_length_from_index( - text, window + text[text_index], text_index + 1, window_index + 1 - ) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - # Initialize compressor class - lz77_compressor = LZ77Compressor(window_size=13, lookahead_buffer_size=6) - - # Example - TEXT = "cabracadabrarrarrad" - compressed_text = lz77_compressor.compress(TEXT) - print(lz77_compressor.compress("ababcbababaa")) - decompressed_text = lz77_compressor.decompress(compressed_text) - assert decompressed_text == TEXT, "The LZ77 algorithm returned the invalid result." diff --git a/compression/peak_signal_to_noise_ratio.py b/compression/peak_signal_to_noise_ratio.py deleted file mode 100644 index 284f2904a21d..000000000000 --- a/compression/peak_signal_to_noise_ratio.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Peak signal-to-noise ratio - PSNR - https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio -Source: -https://tutorials.techonical.com/how-to-calculate-psnr-value-of-two-images-using-python -""" - -import math -import os - -import cv2 -import numpy as np - -PIXEL_MAX = 255.0 - - -def peak_signal_to_noise_ratio(original: float, contrast: float) -> float: - mse = np.mean((original - contrast) ** 2) - if mse == 0: - return 100 - - return 20 * math.log10(PIXEL_MAX / math.sqrt(mse)) - - -def main() -> None: - dir_path = os.path.dirname(os.path.realpath(__file__)) - # Loading images (original image and compressed image) - original = cv2.imread(os.path.join(dir_path, "image_data/original_image.png")) - contrast = cv2.imread(os.path.join(dir_path, "image_data/compressed_image.png"), 1) - - original2 = cv2.imread(os.path.join(dir_path, "image_data/PSNR-example-base.png")) - contrast2 = cv2.imread( - os.path.join(dir_path, "image_data/PSNR-example-comp-10.jpg"), 1 - ) - - # Value expected: 29.73dB - print("-- First Test --") - print(f"PSNR value is {peak_signal_to_noise_ratio(original, contrast)} dB") - - # # Value expected: 31.53dB (Wikipedia Example) - print("\n-- Second Test --") - print(f"PSNR value is {peak_signal_to_noise_ratio(original2, contrast2)} dB") - - -if __name__ == "__main__": - main() diff --git a/compression/run_length_encoding.py b/compression/run_length_encoding.py deleted file mode 100644 index 691e19095dc6..000000000000 --- a/compression/run_length_encoding.py +++ /dev/null @@ -1,48 +0,0 @@ -# https://en.wikipedia.org/wiki/Run-length_encoding - - -def run_length_encode(text: str) -> list: - """ - Performs Run Length Encoding - >>> run_length_encode("AAAABBBCCDAA") - [('A', 4), ('B', 3), ('C', 2), ('D', 1), ('A', 2)] - >>> run_length_encode("A") - [('A', 1)] - >>> run_length_encode("AA") - [('A', 2)] - >>> run_length_encode("AAADDDDDDFFFCCCAAVVVV") - [('A', 3), ('D', 6), ('F', 3), ('C', 3), ('A', 2), ('V', 4)] - """ - encoded = [] - count = 1 - - for i in range(len(text)): - if i + 1 < len(text) and text[i] == text[i + 1]: - count += 1 - else: - encoded.append((text[i], count)) - count = 1 - - return encoded - - -def run_length_decode(encoded: list) -> str: - """ - Performs Run Length Decoding - >>> run_length_decode([('A', 4), ('B', 3), ('C', 2), ('D', 1), ('A', 2)]) - 'AAAABBBCCDAA' - >>> run_length_decode([('A', 1)]) - 'A' - >>> run_length_decode([('A', 2)]) - 'AA' - >>> run_length_decode([('A', 3), ('D', 6), ('F', 3), ('C', 3), ('A', 2), ('V', 4)]) - 'AAADDDDDDFFFCCCAAVVVV' - """ - return "".join(char * length for char, length in encoded) - - -if __name__ == "__main__": - from doctest import testmod - - testmod(name="run_length_encode", verbose=True) - testmod(name="run_length_decode", verbose=True) diff --git a/computer_vision/README.md b/computer_vision/README.md deleted file mode 100644 index 1657128fd25e..000000000000 --- a/computer_vision/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Computer Vision - -Computer vision is a field of computer science that works on enabling computers to see, identify and process images in the same way that human does, and provide appropriate output. - -It is like imparting human intelligence and instincts to a computer. -Image processing and computer vision are a little different from each other. Image processing means applying some algorithms for transforming image from one form to the other like smoothing, contrasting, stretching, etc. - -While computer vision comes from modelling image processing using the techniques of machine learning, computer vision applies machine learning to recognize patterns for interpretation of images (much like the process of visual reasoning of human vision). - -* <https://en.wikipedia.org/wiki/Computer_vision> -* <https://www.datarobot.com/blog/introduction-to-computer-vision-what-it-is-and-how-it-works/> diff --git a/computer_vision/__init__.py b/computer_vision/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/computer_vision/cnn_classification.py b/computer_vision/cnn_classification.py deleted file mode 100644 index 115333eba0d1..000000000000 --- a/computer_vision/cnn_classification.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -Convolutional Neural Network - -Objective : To train a CNN model detect if TB is present in Lung X-ray or not. - -Resources CNN Theory : - https://en.wikipedia.org/wiki/Convolutional_neural_network -Resources Tensorflow : https://www.tensorflow.org/tutorials/images/cnn - -Download dataset from : -https://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html - -1. Download the dataset folder and create two folder training set and test set -in the parent dataset folder -2. Move 30-40 image from both TB positive and TB Negative folder -in the test set folder -3. The labels of the images will be extracted from the folder name -the image is present in. - -""" - -# Part 1 - Building the CNN - -import numpy as np - -# Importing the Keras libraries and packages -import tensorflow as tf -from keras import layers, models - -if __name__ == "__main__": - # Initialising the CNN - # (Sequential- Building the model layer by layer) - classifier = models.Sequential() - - # Step 1 - Convolution - # Here 64,64 is the length & breadth of dataset images and 3 is for the RGB channel - # (3,3) is the kernel size (filter matrix) - classifier.add( - layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation="relu") - ) - - # Step 2 - Pooling - classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) - - # Adding a second convolutional layer - classifier.add(layers.Conv2D(32, (3, 3), activation="relu")) - classifier.add(layers.MaxPooling2D(pool_size=(2, 2))) - - # Step 3 - Flattening - classifier.add(layers.Flatten()) - - # Step 4 - Full connection - classifier.add(layers.Dense(units=128, activation="relu")) - classifier.add(layers.Dense(units=1, activation="sigmoid")) - - # Compiling the CNN - classifier.compile( - optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"] - ) - - # Part 2 - Fitting the CNN to the images - - # Load Trained model weights - - # from keras.models import load_model - # regressor=load_model('cnn.h5') - - train_datagen = tf.keras.preprocessing.image.ImageDataGenerator( - rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True - ) - - test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255) - - training_set = train_datagen.flow_from_directory( - "dataset/training_set", target_size=(64, 64), batch_size=32, class_mode="binary" - ) - - test_set = test_datagen.flow_from_directory( - "dataset/test_set", target_size=(64, 64), batch_size=32, class_mode="binary" - ) - - classifier.fit_generator( - training_set, steps_per_epoch=5, epochs=30, validation_data=test_set - ) - - classifier.save("cnn.h5") - - # Part 3 - Making new predictions - - test_image = tf.keras.preprocessing.image.load_img( - "dataset/single_prediction/image.png", target_size=(64, 64) - ) - test_image = tf.keras.preprocessing.image.img_to_array(test_image) - test_image = np.expand_dims(test_image, axis=0) - result = classifier.predict(test_image) - # training_set.class_indices - if result[0][0] == 0: - prediction = "Normal" - if result[0][0] == 1: - prediction = "Abnormality detected" diff --git a/computer_vision/flip_augmentation.py b/computer_vision/flip_augmentation.py deleted file mode 100644 index 77a8cbd7b14f..000000000000 --- a/computer_vision/flip_augmentation.py +++ /dev/null @@ -1,128 +0,0 @@ -import glob -import os -import random -from string import ascii_lowercase, digits - -import cv2 - -""" -Flip image and bounding box for computer vision task -https://paperswithcode.com/method/randomhorizontalflip -""" - -# Params -LABEL_DIR = "" -IMAGE_DIR = "" -OUTPUT_DIR = "" -FLIP_TYPE = 1 # (0 is vertical, 1 is horizontal) - - -def main() -> None: - """ - Get images list and annotations list from input dir. - Update new images and annotations. - Save images and annotations in output dir. - """ - img_paths, annos = get_dataset(LABEL_DIR, IMAGE_DIR) - print("Processing...") - new_images, new_annos, paths = update_image_and_anno(img_paths, annos, FLIP_TYPE) - - for index, image in enumerate(new_images): - # Get random string code: '7b7ad245cdff75241935e4dd860f3bad' - letter_code = random_chars(32) - file_name = paths[index].split(os.sep)[-1].rsplit(".", 1)[0] - file_root = f"{OUTPUT_DIR}/{file_name}_FLIP_{letter_code}" - cv2.imwrite(f"{file_root}.jpg", image, [cv2.IMWRITE_JPEG_QUALITY, 85]) - print(f"Success {index+1}/{len(new_images)} with {file_name}") - annos_list = [] - for anno in new_annos[index]: - obj = f"{anno[0]} {anno[1]} {anno[2]} {anno[3]} {anno[4]}" - annos_list.append(obj) - with open(f"{file_root}.txt", "w") as outfile: - outfile.write("\n".join(line for line in annos_list)) - - -def get_dataset(label_dir: str, img_dir: str) -> tuple[list, list]: - """ - - label_dir <type: str>: Path to label include annotation of images - - img_dir <type: str>: Path to folder contain images - Return <type: list>: List of images path and labels - """ - img_paths = [] - labels = [] - for label_file in glob.glob(os.path.join(label_dir, "*.txt")): - label_name = label_file.split(os.sep)[-1].rsplit(".", 1)[0] - with open(label_file) as in_file: - obj_lists = in_file.readlines() - img_path = os.path.join(img_dir, f"{label_name}.jpg") - - boxes = [] - for obj_list in obj_lists: - obj = obj_list.rstrip("\n").split(" ") - boxes.append( - [ - int(obj[0]), - float(obj[1]), - float(obj[2]), - float(obj[3]), - float(obj[4]), - ] - ) - if not boxes: - continue - img_paths.append(img_path) - labels.append(boxes) - return img_paths, labels - - -def update_image_and_anno( - img_list: list, anno_list: list, flip_type: int = 1 -) -> tuple[list, list, list]: - """ - - img_list <type: list>: list of all images - - anno_list <type: list>: list of all annotations of specific image - - flip_type <type: int>: 0 is vertical, 1 is horizontal - Return: - - new_imgs_list <type: narray>: image after resize - - new_annos_lists <type: list>: list of new annotation after scale - - path_list <type: list>: list the name of image file - """ - new_annos_lists = [] - path_list = [] - new_imgs_list = [] - for idx in range(len(img_list)): - new_annos = [] - path = img_list[idx] - path_list.append(path) - img_annos = anno_list[idx] - img = cv2.imread(path) - if flip_type == 1: - new_img = cv2.flip(img, flip_type) - for bbox in img_annos: - x_center_new = 1 - bbox[1] - new_annos.append([bbox[0], x_center_new, bbox[2], bbox[3], bbox[4]]) - elif flip_type == 0: - new_img = cv2.flip(img, flip_type) - for bbox in img_annos: - y_center_new = 1 - bbox[2] - new_annos.append([bbox[0], bbox[1], y_center_new, bbox[3], bbox[4]]) - new_annos_lists.append(new_annos) - new_imgs_list.append(new_img) - return new_imgs_list, new_annos_lists, path_list - - -def random_chars(number_char: int = 32) -> str: - """ - Automatic generate random 32 characters. - Get random string code: '7b7ad245cdff75241935e4dd860f3bad' - >>> len(random_chars(32)) - 32 - """ - assert number_char > 1, "The number of character should greater than 1" - letter_code = ascii_lowercase + digits - return "".join(random.choice(letter_code) for _ in range(number_char)) - - -if __name__ == "__main__": - main() - print("DONE ✅") diff --git a/computer_vision/haralick_descriptors.py b/computer_vision/haralick_descriptors.py deleted file mode 100644 index 54632160dcf2..000000000000 --- a/computer_vision/haralick_descriptors.py +++ /dev/null @@ -1,434 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Image_texture -https://en.wikipedia.org/wiki/Co-occurrence_matrix#Application_to_image_analysis -""" - -import imageio.v2 as imageio -import numpy as np - - -def root_mean_square_error(original: np.ndarray, reference: np.ndarray) -> float: - """Simple implementation of Root Mean Squared Error - for two N dimensional numpy arrays. - - Examples: - >>> root_mean_square_error(np.array([1, 2, 3]), np.array([1, 2, 3])) - 0.0 - >>> root_mean_square_error(np.array([1, 2, 3]), np.array([2, 2, 2])) - 0.816496580927726 - >>> root_mean_square_error(np.array([1, 2, 3]), np.array([6, 4, 2])) - 3.1622776601683795 - """ - return float(np.sqrt(((original - reference) ** 2).mean())) - - -def normalize_image( - image: np.ndarray, cap: float = 255.0, data_type: np.dtype = np.uint8 -) -> np.ndarray: - """ - Normalizes image in Numpy 2D array format, between ranges 0-cap, - as to fit uint8 type. - - Args: - image: 2D numpy array representing image as matrix, with values in any range - cap: Maximum cap amount for normalization - data_type: numpy data type to set output variable to - Returns: - return 2D numpy array of type uint8, corresponding to limited range matrix - - Examples: - >>> normalize_image(np.array([[1, 2, 3], [4, 5, 10]]), - ... cap=1.0, data_type=np.float64) - array([[0. , 0.11111111, 0.22222222], - [0.33333333, 0.44444444, 1. ]]) - >>> normalize_image(np.array([[4, 4, 3], [1, 7, 2]])) - array([[127, 127, 85], - [ 0, 255, 42]], dtype=uint8) - """ - normalized = (image - np.min(image)) / (np.max(image) - np.min(image)) * cap - return normalized.astype(data_type) - - -def normalize_array(array: np.ndarray, cap: float = 1) -> np.ndarray: - """Normalizes a 1D array, between ranges 0-cap. - - Args: - array: List containing values to be normalized between cap range. - cap: Maximum cap amount for normalization. - Returns: - return 1D numpy array, corresponding to limited range array - - Examples: - >>> normalize_array(np.array([2, 3, 5, 7])) - array([0. , 0.2, 0.6, 1. ]) - >>> normalize_array(np.array([[5], [7], [11], [13]])) - array([[0. ], - [0.25], - [0.75], - [1. ]]) - """ - diff = np.max(array) - np.min(array) - return (array - np.min(array)) / (1 if diff == 0 else diff) * cap - - -def grayscale(image: np.ndarray) -> np.ndarray: - """ - Uses luminance weights to transform RGB channel to greyscale, by - taking the dot product between the channel and the weights. - - Example: - >>> grayscale(np.array([[[108, 201, 72], [255, 11, 127]], - ... [[56, 56, 56], [128, 255, 107]]])) - array([[158, 97], - [ 56, 200]], dtype=uint8) - """ - return np.dot(image[:, :, 0:3], [0.299, 0.587, 0.114]).astype(np.uint8) - - -def binarize(image: np.ndarray, threshold: float = 127.0) -> np.ndarray: - """ - Binarizes a grayscale image based on a given threshold value, - setting values to 1 or 0 accordingly. - - Examples: - >>> binarize(np.array([[128, 255], [101, 156]])) - array([[1, 1], - [0, 1]]) - >>> binarize(np.array([[0.07, 1], [0.51, 0.3]]), threshold=0.5) - array([[0, 1], - [1, 0]]) - """ - return np.where(image > threshold, 1, 0) - - -def transform( - image: np.ndarray, kind: str, kernel: np.ndarray | None = None -) -> np.ndarray: - """ - Simple image transformation using one of two available filter functions: - Erosion and Dilation. - - Args: - image: binarized input image, onto which to apply transformation - kind: Can be either 'erosion', in which case the :func:np.max - function is called, or 'dilation', when :func:np.min is used instead. - kernel: n x n kernel with shape < :attr:image.shape, - to be used when applying convolution to original image - - Returns: - returns a numpy array with same shape as input image, - corresponding to applied binary transformation. - - Examples: - >>> img = np.array([[1, 0.5], [0.2, 0.7]]) - >>> img = binarize(img, threshold=0.5) - >>> transform(img, 'erosion') - array([[1, 1], - [1, 1]], dtype=uint8) - >>> transform(img, 'dilation') - array([[0, 0], - [0, 0]], dtype=uint8) - """ - if kernel is None: - kernel = np.ones((3, 3)) - - if kind == "erosion": - constant = 1 - apply = np.max - else: - constant = 0 - apply = np.min - - center_x, center_y = (x // 2 for x in kernel.shape) - - # Use padded image when applying convolution - # to not go out of bounds of the original the image - transformed = np.zeros(image.shape, dtype=np.uint8) - padded = np.pad(image, 1, "constant", constant_values=constant) - - for x in range(center_x, padded.shape[0] - center_x): - for y in range(center_y, padded.shape[1] - center_y): - center = padded[ - x - center_x : x + center_x + 1, y - center_y : y + center_y + 1 - ] - # Apply transformation method to the centered section of the image - transformed[x - center_x, y - center_y] = apply(center[kernel == 1]) - - return transformed - - -def opening_filter(image: np.ndarray, kernel: np.ndarray | None = None) -> np.ndarray: - """ - Opening filter, defined as the sequence of - erosion and then a dilation filter on the same image. - - Examples: - >>> img = np.array([[1, 0.5], [0.2, 0.7]]) - >>> img = binarize(img, threshold=0.5) - >>> opening_filter(img) - array([[1, 1], - [1, 1]], dtype=uint8) - """ - if kernel is None: - np.ones((3, 3)) - - return transform(transform(image, "dilation", kernel), "erosion", kernel) - - -def closing_filter(image: np.ndarray, kernel: np.ndarray | None = None) -> np.ndarray: - """ - Opening filter, defined as the sequence of - dilation and then erosion filter on the same image. - - Examples: - >>> img = np.array([[1, 0.5], [0.2, 0.7]]) - >>> img = binarize(img, threshold=0.5) - >>> closing_filter(img) - array([[0, 0], - [0, 0]], dtype=uint8) - """ - if kernel is None: - kernel = np.ones((3, 3)) - return transform(transform(image, "erosion", kernel), "dilation", kernel) - - -def binary_mask( - image_gray: np.ndarray, image_map: np.ndarray -) -> tuple[np.ndarray, np.ndarray]: - """ - Apply binary mask, or thresholding based - on bit mask value (mapping mask is binary). - - Returns the mapped true value mask and its complementary false value mask. - - Example: - >>> img = np.array([[[108, 201, 72], [255, 11, 127]], - ... [[56, 56, 56], [128, 255, 107]]]) - >>> gray = grayscale(img) - >>> binary = binarize(gray) - >>> morphological = opening_filter(binary) - >>> binary_mask(gray, morphological) - (array([[1, 1], - [1, 1]], dtype=uint8), array([[158, 97], - [ 56, 200]], dtype=uint8)) - """ - true_mask, false_mask = image_gray.copy(), image_gray.copy() - true_mask[image_map == 1] = 1 - false_mask[image_map == 0] = 0 - - return true_mask, false_mask - - -def matrix_concurrency(image: np.ndarray, coordinate: tuple[int, int]) -> np.ndarray: - """ - Calculate sample co-occurrence matrix based on input image - as well as selected coordinates on image. - - Implementation is made using basic iteration, - as function to be performed (np.max) is non-linear and therefore - not callable on the frequency domain. - - Example: - >>> img = np.array([[[108, 201, 72], [255, 11, 127]], - ... [[56, 56, 56], [128, 255, 107]]]) - >>> gray = grayscale(img) - >>> binary = binarize(gray) - >>> morphological = opening_filter(binary) - >>> mask_1 = binary_mask(gray, morphological)[0] - >>> matrix_concurrency(mask_1, (0, 1)) - array([[0., 0.], - [0., 0.]]) - """ - matrix = np.zeros([np.max(image) + 1, np.max(image) + 1]) - - offset_x, offset_y = coordinate - - for x in range(1, image.shape[0] - 1): - for y in range(1, image.shape[1] - 1): - base_pixel = image[x, y] - offset_pixel = image[x + offset_x, y + offset_y] - - matrix[base_pixel, offset_pixel] += 1 - matrix_sum = np.sum(matrix) - return matrix / (1 if matrix_sum == 0 else matrix_sum) - - -def haralick_descriptors(matrix: np.ndarray) -> list[float]: - """Calculates all 8 Haralick descriptors based on co-occurrence input matrix. - All descriptors are as follows: - Maximum probability, Inverse Difference, Homogeneity, Entropy, - Energy, Dissimilarity, Contrast and Correlation - - Args: - matrix: Co-occurrence matrix to use as base for calculating descriptors. - - Returns: - Reverse ordered list of resulting descriptors - - Example: - >>> img = np.array([[[108, 201, 72], [255, 11, 127]], - ... [[56, 56, 56], [128, 255, 107]]]) - >>> gray = grayscale(img) - >>> binary = binarize(gray) - >>> morphological = opening_filter(binary) - >>> mask_1 = binary_mask(gray, morphological)[0] - >>> concurrency = matrix_concurrency(mask_1, (0, 1)) - >>> [float(f) for f in haralick_descriptors(concurrency)] - [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - """ - # Function np.indices could be used for bigger input types, - # but np.ogrid works just fine - i, j = np.ogrid[0 : matrix.shape[0], 0 : matrix.shape[1]] # np.indices() - - # Pre-calculate frequent multiplication and subtraction - prod = np.multiply(i, j) - sub = np.subtract(i, j) - - # Calculate numerical value of Maximum Probability - maximum_prob = np.max(matrix) - # Using the definition for each descriptor individually to calculate its matrix - correlation = prod * matrix - energy = np.power(matrix, 2) - contrast = matrix * np.power(sub, 2) - - dissimilarity = matrix * np.abs(sub) - inverse_difference = matrix / (1 + np.abs(sub)) - homogeneity = matrix / (1 + np.power(sub, 2)) - entropy = -(matrix[matrix > 0] * np.log(matrix[matrix > 0])) - - # Sum values for descriptors ranging from the first one to the last, - # as all are their respective origin matrix and not the resulting value yet. - return [ - maximum_prob, - correlation.sum(), - energy.sum(), - contrast.sum(), - dissimilarity.sum(), - inverse_difference.sum(), - homogeneity.sum(), - entropy.sum(), - ] - - -def get_descriptors( - masks: tuple[np.ndarray, np.ndarray], coordinate: tuple[int, int] -) -> np.ndarray: - """ - Calculate all Haralick descriptors for a sequence of - different co-occurrence matrices, given input masks and coordinates. - - Example: - >>> img = np.array([[[108, 201, 72], [255, 11, 127]], - ... [[56, 56, 56], [128, 255, 107]]]) - >>> gray = grayscale(img) - >>> binary = binarize(gray) - >>> morphological = opening_filter(binary) - >>> get_descriptors(binary_mask(gray, morphological), (0, 1)) - array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) - """ - descriptors = np.array( - [haralick_descriptors(matrix_concurrency(mask, coordinate)) for mask in masks] - ) - - # Concatenate each individual descriptor into - # one single list containing sequence of descriptors - return np.concatenate(descriptors, axis=None) - - -def euclidean(point_1: np.ndarray, point_2: np.ndarray) -> float: - """ - Simple method for calculating the euclidean distance between two points, - with type np.ndarray. - - Example: - >>> a = np.array([1, 0, -2]) - >>> b = np.array([2, -1, 1]) - >>> euclidean(a, b) - 3.3166247903554 - """ - return float(np.sqrt(np.sum(np.square(point_1 - point_2)))) - - -def get_distances(descriptors: np.ndarray, base: int) -> list[tuple[int, float]]: - """ - Calculate all Euclidean distances between a selected base descriptor - and all other Haralick descriptors - The resulting comparison is return in decreasing order, - showing which descriptor is the most similar to the selected base. - - Args: - descriptors: Haralick descriptors to compare with base index - base: Haralick descriptor index to use as base when calculating respective - euclidean distance to other descriptors. - - Returns: - Ordered distances between descriptors - - Example: - >>> index = 1 - >>> img = np.array([[[108, 201, 72], [255, 11, 127]], - ... [[56, 56, 56], [128, 255, 107]]]) - >>> gray = grayscale(img) - >>> binary = binarize(gray) - >>> morphological = opening_filter(binary) - >>> get_distances(get_descriptors( - ... binary_mask(gray, morphological), (0, 1)), - ... index) - [(0, 0.0), (1, 0.0), (2, 0.0), (3, 0.0), (4, 0.0), (5, 0.0), \ -(6, 0.0), (7, 0.0), (8, 0.0), (9, 0.0), (10, 0.0), (11, 0.0), (12, 0.0), \ -(13, 0.0), (14, 0.0), (15, 0.0)] - """ - distances = np.array( - [euclidean(descriptor, descriptors[base]) for descriptor in descriptors] - ) - # Normalize distances between range [0, 1] - normalized_distances: list[float] = normalize_array(distances, 1).tolist() - enum_distances = list(enumerate(normalized_distances)) - enum_distances.sort(key=lambda tup: tup[1], reverse=True) - return enum_distances - - -if __name__ == "__main__": - # Index to compare haralick descriptors to - index = int(input()) - q_value_list = [int(value) for value in input().split()] - q_value = (q_value_list[0], q_value_list[1]) - - # Format is the respective filter to apply, - # can be either 1 for the opening filter or else for the closing - parameters = {"format": int(input()), "threshold": int(input())} - - # Number of images to perform methods on - b_number = int(input()) - - files, descriptors = [], [] - - for _ in range(b_number): - file = input().rstrip() - files.append(file) - - # Open given image and calculate morphological filter, - # respective masks and correspondent Harralick Descriptors. - image = imageio.imread(file).astype(np.float32) - gray = grayscale(image) - threshold = binarize(gray, parameters["threshold"]) - - morphological = ( - opening_filter(threshold) - if parameters["format"] == 1 - else closing_filter(threshold) - ) - masks = binary_mask(gray, morphological) - descriptors.append(get_descriptors(masks, q_value)) - - # Transform ordered distances array into a sequence of indexes - # corresponding to original file position - distances = get_distances(np.array(descriptors), index) - indexed_distances = np.array(distances).astype(np.uint8)[:, 0] - - # Finally, print distances considering the Haralick descriptions from the base - # file to all other images using the morphology method of choice. - print(f"Query: {files[index]}") - print("Ranking:") - for idx, file_idx in enumerate(indexed_distances): - print(f"({idx}) {files[file_idx]}", end="\n") diff --git a/computer_vision/harris_corner.py b/computer_vision/harris_corner.py deleted file mode 100644 index 0cc7522bc3af..000000000000 --- a/computer_vision/harris_corner.py +++ /dev/null @@ -1,71 +0,0 @@ -import cv2 -import numpy as np - -""" -Harris Corner Detector -https://en.wikipedia.org/wiki/Harris_Corner_Detector -""" - - -class HarrisCorner: - def __init__(self, k: float, window_size: int): - """ - k : is an empirically determined constant in [0.04,0.06] - window_size : neighbourhoods considered - """ - - if k in (0.04, 0.06): - self.k = k - self.window_size = window_size - else: - raise ValueError("invalid k value") - - def __str__(self) -> str: - return str(self.k) - - def detect(self, img_path: str) -> tuple[cv2.Mat, list[list[int]]]: - """ - Returns the image with corners identified - img_path : path of the image - output : list of the corner positions, image - """ - - img = cv2.imread(img_path, 0) - h, w = img.shape - corner_list: list[list[int]] = [] - color_img = img.copy() - color_img = cv2.cvtColor(color_img, cv2.COLOR_GRAY2RGB) - dy, dx = np.gradient(img) - ixx = dx**2 - iyy = dy**2 - ixy = dx * dy - k = 0.04 - offset = self.window_size // 2 - for y in range(offset, h - offset): - for x in range(offset, w - offset): - wxx = ixx[ - y - offset : y + offset + 1, x - offset : x + offset + 1 - ].sum() - wyy = iyy[ - y - offset : y + offset + 1, x - offset : x + offset + 1 - ].sum() - wxy = ixy[ - y - offset : y + offset + 1, x - offset : x + offset + 1 - ].sum() - - det = (wxx * wyy) - (wxy**2) - trace = wxx + wyy - r = det - k * (trace**2) - # Can change the value - if r > 0.5: - corner_list.append([x, y, r]) - color_img.itemset((y, x, 0), 0) - color_img.itemset((y, x, 1), 0) - color_img.itemset((y, x, 2), 255) - return color_img, corner_list - - -if __name__ == "__main__": - edge_detect = HarrisCorner(0.04, 3) - color_img, _ = edge_detect.detect("path_to_image") - cv2.imwrite("detect.png", color_img) diff --git a/computer_vision/horn_schunck.py b/computer_vision/horn_schunck.py deleted file mode 100644 index f33b5b1c794b..000000000000 --- a/computer_vision/horn_schunck.py +++ /dev/null @@ -1,131 +0,0 @@ -""" -The Horn-Schunck method estimates the optical flow for every single pixel of -a sequence of images. -It works by assuming brightness constancy between two consecutive frames -and smoothness in the optical flow. - -Useful resources: -Wikipedia: https://en.wikipedia.org/wiki/Horn%E2%80%93Schunck_method -Paper: http://image.diku.dk/imagecanon/material/HornSchunckOptical_Flow.pdf -""" - -from typing import SupportsIndex - -import numpy as np -from scipy.ndimage import convolve - - -def warp( - image: np.ndarray, horizontal_flow: np.ndarray, vertical_flow: np.ndarray -) -> np.ndarray: - """ - Warps the pixels of an image into a new image using the horizontal and vertical - flows. - Pixels that are warped from an invalid location are set to 0. - - Parameters: - image: Grayscale image - horizontal_flow: Horizontal flow - vertical_flow: Vertical flow - - Returns: Warped image - - >>> warp(np.array([[0, 1, 2], [0, 3, 0], [2, 2, 2]]), \ - np.array([[0, 1, -1], [-1, 0, 0], [1, 1, 1]]), \ - np.array([[0, 0, 0], [0, 1, 0], [0, 0, 1]])) - array([[0, 0, 0], - [3, 1, 0], - [0, 2, 3]]) - """ - flow = np.stack((horizontal_flow, vertical_flow), 2) - - # Create a grid of all pixel coordinates and subtract the flow to get the - # target pixels coordinates - grid = np.stack( - np.meshgrid(np.arange(0, image.shape[1]), np.arange(0, image.shape[0])), 2 - ) - grid = np.round(grid - flow).astype(np.int32) - - # Find the locations outside of the original image - invalid = (grid < 0) | (grid >= np.array([image.shape[1], image.shape[0]])) - grid[invalid] = 0 - - warped = image[grid[:, :, 1], grid[:, :, 0]] - - # Set pixels at invalid locations to 0 - warped[invalid[:, :, 0] | invalid[:, :, 1]] = 0 - - return warped - - -def horn_schunck( - image0: np.ndarray, - image1: np.ndarray, - num_iter: SupportsIndex, - alpha: float | None = None, -) -> tuple[np.ndarray, np.ndarray]: - """ - This function performs the Horn-Schunck algorithm and returns the estimated - optical flow. It is assumed that the input images are grayscale and - normalized to be in [0, 1]. - - Parameters: - image0: First image of the sequence - image1: Second image of the sequence - alpha: Regularization constant - num_iter: Number of iterations performed - - Returns: estimated horizontal & vertical flow - - >>> np.round(horn_schunck(np.array([[0, 0, 2], [0, 0, 2]]), \ - np.array([[0, 2, 0], [0, 2, 0]]), alpha=0.1, num_iter=110)).\ - astype(np.int32) - array([[[ 0, -1, -1], - [ 0, -1, -1]], - <BLANKLINE> - [[ 0, 0, 0], - [ 0, 0, 0]]], dtype=int32) - """ - if alpha is None: - alpha = 0.1 - - # Initialize flow - horizontal_flow = np.zeros_like(image0) - vertical_flow = np.zeros_like(image0) - - # Prepare kernels for the calculation of the derivatives and the average velocity - kernel_x = np.array([[-1, 1], [-1, 1]]) * 0.25 - kernel_y = np.array([[-1, -1], [1, 1]]) * 0.25 - kernel_t = np.array([[1, 1], [1, 1]]) * 0.25 - kernel_laplacian = np.array( - [[1 / 12, 1 / 6, 1 / 12], [1 / 6, 0, 1 / 6], [1 / 12, 1 / 6, 1 / 12]] - ) - - # Iteratively refine the flow - for _ in range(num_iter): - warped_image = warp(image0, horizontal_flow, vertical_flow) - derivative_x = convolve(warped_image, kernel_x) + convolve(image1, kernel_x) - derivative_y = convolve(warped_image, kernel_y) + convolve(image1, kernel_y) - derivative_t = convolve(warped_image, kernel_t) + convolve(image1, -kernel_t) - - avg_horizontal_velocity = convolve(horizontal_flow, kernel_laplacian) - avg_vertical_velocity = convolve(vertical_flow, kernel_laplacian) - - # This updates the flow as proposed in the paper (Step 12) - update = ( - derivative_x * avg_horizontal_velocity - + derivative_y * avg_vertical_velocity - + derivative_t - ) - update = update / (alpha**2 + derivative_x**2 + derivative_y**2) - - horizontal_flow = avg_horizontal_velocity - derivative_x * update - vertical_flow = avg_vertical_velocity - derivative_y * update - - return horizontal_flow, vertical_flow - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/computer_vision/mean_threshold.py b/computer_vision/mean_threshold.py deleted file mode 100644 index 76657933d6a9..000000000000 --- a/computer_vision/mean_threshold.py +++ /dev/null @@ -1,30 +0,0 @@ -from PIL import Image - -""" -Mean thresholding algorithm for image processing -https://en.wikipedia.org/wiki/Thresholding_(image_processing) -""" - - -def mean_threshold(image: Image) -> Image: - """ - image: is a grayscale PIL image object - """ - height, width = image.size - mean = 0 - pixels = image.load() - for i in range(width): - for j in range(height): - pixel = pixels[j, i] - mean += pixel - mean //= width * height - - for j in range(width): - for i in range(height): - pixels[i, j] = 255 if pixels[i, j] > mean else 0 - return image - - -if __name__ == "__main__": - image = mean_threshold(Image.open("path_to_image").convert("L")) - image.save("output_image_path") diff --git a/computer_vision/mosaic_augmentation.py b/computer_vision/mosaic_augmentation.py deleted file mode 100644 index cd923dfe095f..000000000000 --- a/computer_vision/mosaic_augmentation.py +++ /dev/null @@ -1,186 +0,0 @@ -"""Source: https://github.com/jason9075/opencv-mosaic-data-aug""" - -import glob -import os -import random -from string import ascii_lowercase, digits - -import cv2 -import numpy as np - -# Parameters -OUTPUT_SIZE = (720, 1280) # Height, Width -SCALE_RANGE = (0.4, 0.6) # if height or width lower than this scale, drop it. -FILTER_TINY_SCALE = 1 / 100 -LABEL_DIR = "" -IMG_DIR = "" -OUTPUT_DIR = "" -NUMBER_IMAGES = 250 - - -def main() -> None: - """ - Get images list and annotations list from input dir. - Update new images and annotations. - Save images and annotations in output dir. - """ - img_paths, annos = get_dataset(LABEL_DIR, IMG_DIR) - for index in range(NUMBER_IMAGES): - idxs = random.sample(range(len(annos)), 4) - new_image, new_annos, path = update_image_and_anno( - img_paths, - annos, - idxs, - OUTPUT_SIZE, - SCALE_RANGE, - filter_scale=FILTER_TINY_SCALE, - ) - - # Get random string code: '7b7ad245cdff75241935e4dd860f3bad' - letter_code = random_chars(32) - file_name = path.split(os.sep)[-1].rsplit(".", 1)[0] - file_root = f"{OUTPUT_DIR}/{file_name}_MOSAIC_{letter_code}" - cv2.imwrite(f"{file_root}.jpg", new_image, [cv2.IMWRITE_JPEG_QUALITY, 85]) - print(f"Succeeded {index+1}/{NUMBER_IMAGES} with {file_name}") - annos_list = [] - for anno in new_annos: - width = anno[3] - anno[1] - height = anno[4] - anno[2] - x_center = anno[1] + width / 2 - y_center = anno[2] + height / 2 - obj = f"{anno[0]} {x_center} {y_center} {width} {height}" - annos_list.append(obj) - with open(f"{file_root}.txt", "w") as outfile: - outfile.write("\n".join(line for line in annos_list)) - - -def get_dataset(label_dir: str, img_dir: str) -> tuple[list, list]: - """ - - label_dir <type: str>: Path to label include annotation of images - - img_dir <type: str>: Path to folder contain images - Return <type: list>: List of images path and labels - """ - img_paths = [] - labels = [] - for label_file in glob.glob(os.path.join(label_dir, "*.txt")): - label_name = label_file.split(os.sep)[-1].rsplit(".", 1)[0] - with open(label_file) as in_file: - obj_lists = in_file.readlines() - img_path = os.path.join(img_dir, f"{label_name}.jpg") - - boxes = [] - for obj_list in obj_lists: - obj = obj_list.rstrip("\n").split(" ") - xmin = float(obj[1]) - float(obj[3]) / 2 - ymin = float(obj[2]) - float(obj[4]) / 2 - xmax = float(obj[1]) + float(obj[3]) / 2 - ymax = float(obj[2]) + float(obj[4]) / 2 - - boxes.append([int(obj[0]), xmin, ymin, xmax, ymax]) - if not boxes: - continue - img_paths.append(img_path) - labels.append(boxes) - return img_paths, labels - - -def update_image_and_anno( - all_img_list: list, - all_annos: list, - idxs: list[int], - output_size: tuple[int, int], - scale_range: tuple[float, float], - filter_scale: float = 0.0, -) -> tuple[list, list, str]: - """ - - all_img_list <type: list>: list of all images - - all_annos <type: list>: list of all annotations of specific image - - idxs <type: list>: index of image in list - - output_size <type: tuple>: size of output image (Height, Width) - - scale_range <type: tuple>: range of scale image - - filter_scale <type: float>: the condition of downscale image and bounding box - Return: - - output_img <type: narray>: image after resize - - new_anno <type: list>: list of new annotation after scale - - path[0] <type: string>: get the name of image file - """ - output_img = np.zeros([output_size[0], output_size[1], 3], dtype=np.uint8) - scale_x = scale_range[0] + random.random() * (scale_range[1] - scale_range[0]) - scale_y = scale_range[0] + random.random() * (scale_range[1] - scale_range[0]) - divid_point_x = int(scale_x * output_size[1]) - divid_point_y = int(scale_y * output_size[0]) - - new_anno = [] - path_list = [] - for i, index in enumerate(idxs): - path = all_img_list[index] - path_list.append(path) - img_annos = all_annos[index] - img = cv2.imread(path) - if i == 0: # top-left - img = cv2.resize(img, (divid_point_x, divid_point_y)) - output_img[:divid_point_y, :divid_point_x, :] = img - for bbox in img_annos: - xmin = bbox[1] * scale_x - ymin = bbox[2] * scale_y - xmax = bbox[3] * scale_x - ymax = bbox[4] * scale_y - new_anno.append([bbox[0], xmin, ymin, xmax, ymax]) - elif i == 1: # top-right - img = cv2.resize(img, (output_size[1] - divid_point_x, divid_point_y)) - output_img[:divid_point_y, divid_point_x : output_size[1], :] = img - for bbox in img_annos: - xmin = scale_x + bbox[1] * (1 - scale_x) - ymin = bbox[2] * scale_y - xmax = scale_x + bbox[3] * (1 - scale_x) - ymax = bbox[4] * scale_y - new_anno.append([bbox[0], xmin, ymin, xmax, ymax]) - elif i == 2: # bottom-left - img = cv2.resize(img, (divid_point_x, output_size[0] - divid_point_y)) - output_img[divid_point_y : output_size[0], :divid_point_x, :] = img - for bbox in img_annos: - xmin = bbox[1] * scale_x - ymin = scale_y + bbox[2] * (1 - scale_y) - xmax = bbox[3] * scale_x - ymax = scale_y + bbox[4] * (1 - scale_y) - new_anno.append([bbox[0], xmin, ymin, xmax, ymax]) - else: # bottom-right - img = cv2.resize( - img, (output_size[1] - divid_point_x, output_size[0] - divid_point_y) - ) - output_img[ - divid_point_y : output_size[0], divid_point_x : output_size[1], : - ] = img - for bbox in img_annos: - xmin = scale_x + bbox[1] * (1 - scale_x) - ymin = scale_y + bbox[2] * (1 - scale_y) - xmax = scale_x + bbox[3] * (1 - scale_x) - ymax = scale_y + bbox[4] * (1 - scale_y) - new_anno.append([bbox[0], xmin, ymin, xmax, ymax]) - - # Remove bounding box small than scale of filter - if filter_scale > 0: - new_anno = [ - anno - for anno in new_anno - if filter_scale < (anno[3] - anno[1]) and filter_scale < (anno[4] - anno[2]) - ] - - return output_img, new_anno, path_list[0] - - -def random_chars(number_char: int) -> str: - """ - Automatic generate random 32 characters. - Get random string code: '7b7ad245cdff75241935e4dd860f3bad' - >>> len(random_chars(32)) - 32 - """ - assert number_char > 1, "The number of character should greater than 1" - letter_code = ascii_lowercase + digits - return "".join(random.choice(letter_code) for _ in range(number_char)) - - -if __name__ == "__main__": - main() - print("DONE ✅") diff --git a/computer_vision/pooling_functions.py b/computer_vision/pooling_functions.py deleted file mode 100644 index 09beabcba82d..000000000000 --- a/computer_vision/pooling_functions.py +++ /dev/null @@ -1,135 +0,0 @@ -# Source : https://computersciencewiki.org/index.php/Max-pooling_/_Pooling -# Importing the libraries -import numpy as np -from PIL import Image - - -# Maxpooling Function -def maxpooling(arr: np.ndarray, size: int, stride: int) -> np.ndarray: - """ - This function is used to perform maxpooling on the input array of 2D matrix(image) - Args: - arr: numpy array - size: size of pooling matrix - stride: the number of pixels shifts over the input matrix - Returns: - numpy array of maxpooled matrix - Sample Input Output: - >>> maxpooling([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 2, 2) - array([[ 6., 8.], - [14., 16.]]) - >>> maxpooling([[147, 180, 122],[241, 76, 32],[126, 13, 157]], 2, 1) - array([[241., 180.], - [241., 157.]]) - """ - arr = np.array(arr) - if arr.shape[0] != arr.shape[1]: - raise ValueError("The input array is not a square matrix") - i = 0 - j = 0 - mat_i = 0 - mat_j = 0 - - # compute the shape of the output matrix - maxpool_shape = (arr.shape[0] - size) // stride + 1 - # initialize the output matrix with zeros of shape maxpool_shape - updated_arr = np.zeros((maxpool_shape, maxpool_shape)) - - while i < arr.shape[0]: - if i + size > arr.shape[0]: - # if the end of the matrix is reached, break - break - while j < arr.shape[1]: - # if the end of the matrix is reached, break - if j + size > arr.shape[1]: - break - # compute the maximum of the pooling matrix - updated_arr[mat_i][mat_j] = np.max(arr[i : i + size, j : j + size]) - # shift the pooling matrix by stride of column pixels - j += stride - mat_j += 1 - - # shift the pooling matrix by stride of row pixels - i += stride - mat_i += 1 - - # reset the column index to 0 - j = 0 - mat_j = 0 - - return updated_arr - - -# Averagepooling Function -def avgpooling(arr: np.ndarray, size: int, stride: int) -> np.ndarray: - """ - This function is used to perform avgpooling on the input array of 2D matrix(image) - Args: - arr: numpy array - size: size of pooling matrix - stride: the number of pixels shifts over the input matrix - Returns: - numpy array of avgpooled matrix - Sample Input Output: - >>> avgpooling([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 2, 2) - array([[ 3., 5.], - [11., 13.]]) - >>> avgpooling([[147, 180, 122],[241, 76, 32],[126, 13, 157]], 2, 1) - array([[161., 102.], - [114., 69.]]) - """ - arr = np.array(arr) - if arr.shape[0] != arr.shape[1]: - raise ValueError("The input array is not a square matrix") - i = 0 - j = 0 - mat_i = 0 - mat_j = 0 - - # compute the shape of the output matrix - avgpool_shape = (arr.shape[0] - size) // stride + 1 - # initialize the output matrix with zeros of shape avgpool_shape - updated_arr = np.zeros((avgpool_shape, avgpool_shape)) - - while i < arr.shape[0]: - # if the end of the matrix is reached, break - if i + size > arr.shape[0]: - break - while j < arr.shape[1]: - # if the end of the matrix is reached, break - if j + size > arr.shape[1]: - break - # compute the average of the pooling matrix - updated_arr[mat_i][mat_j] = int(np.average(arr[i : i + size, j : j + size])) - # shift the pooling matrix by stride of column pixels - j += stride - mat_j += 1 - - # shift the pooling matrix by stride of row pixels - i += stride - mat_i += 1 - # reset the column index to 0 - j = 0 - mat_j = 0 - - return updated_arr - - -# Main Function -if __name__ == "__main__": - from doctest import testmod - - testmod(name="avgpooling", verbose=True) - - # Loading the image - image = Image.open("path_to_image") - - # Converting the image to numpy array and maxpooling, displaying the result - # Ensure that the image is a square matrix - - Image.fromarray(maxpooling(np.array(image), size=3, stride=2)).show() - - # Converting the image to numpy array and averagepooling, displaying the result - # Ensure that the image is a square matrix - - Image.fromarray(avgpooling(np.array(image), size=3, stride=2)).show() diff --git a/conversions/README.md b/conversions/README.md deleted file mode 100644 index ec3d931fd828..000000000000 --- a/conversions/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Conversion - -Conversion programs convert a type of data, a number from a numerical base or unit into one of another type, base or unit, e.g. binary to decimal, integer to string or foot to meters. - -* <https://en.wikipedia.org/wiki/Data_conversion> -* <https://en.wikipedia.org/wiki/Transcoding> diff --git a/conversions/__init__.py b/conversions/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/conversions/astronomical_length_scale_conversion.py b/conversions/astronomical_length_scale_conversion.py deleted file mode 100644 index 0f413644906d..000000000000 --- a/conversions/astronomical_length_scale_conversion.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Conversion of length units. -Available Units: -Metre, Kilometre, Megametre, Gigametre, -Terametre, Petametre, Exametre, Zettametre, Yottametre - -USAGE : --> Import this file into their respective project. --> Use the function length_conversion() for conversion of length units. --> Parameters : - -> value : The number of from units you want to convert - -> from_type : From which type you want to convert - -> to_type : To which type you want to convert - -REFERENCES : --> Wikipedia reference: https://en.wikipedia.org/wiki/Meter --> Wikipedia reference: https://en.wikipedia.org/wiki/Kilometer --> Wikipedia reference: https://en.wikipedia.org/wiki/Orders_of_magnitude_(length) -""" - -UNIT_SYMBOL = { - "meter": "m", - "kilometer": "km", - "megametre": "Mm", - "gigametre": "Gm", - "terametre": "Tm", - "petametre": "Pm", - "exametre": "Em", - "zettametre": "Zm", - "yottametre": "Ym", -} -# Exponent of the factor(meter) -METRIC_CONVERSION = { - "m": 0, - "km": 3, - "Mm": 6, - "Gm": 9, - "Tm": 12, - "Pm": 15, - "Em": 18, - "Zm": 21, - "Ym": 24, -} - - -def length_conversion(value: float, from_type: str, to_type: str) -> float: - """ - Conversion between astronomical length units. - - >>> length_conversion(1, "meter", "kilometer") - 0.001 - >>> length_conversion(1, "meter", "megametre") - 1e-06 - >>> length_conversion(1, "gigametre", "meter") - 1000000000 - >>> length_conversion(1, "gigametre", "terametre") - 0.001 - >>> length_conversion(1, "petametre", "terametre") - 1000 - >>> length_conversion(1, "petametre", "exametre") - 0.001 - >>> length_conversion(1, "terametre", "zettametre") - 1e-09 - >>> length_conversion(1, "yottametre", "zettametre") - 1000 - >>> length_conversion(4, "wrongUnit", "inch") - Traceback (most recent call last): - ... - ValueError: Invalid 'from_type' value: 'wrongUnit'. - Conversion abbreviations are: m, km, Mm, Gm, Tm, Pm, Em, Zm, Ym - """ - - from_sanitized = from_type.lower().strip("s") - to_sanitized = to_type.lower().strip("s") - - from_sanitized = UNIT_SYMBOL.get(from_sanitized, from_sanitized) - to_sanitized = UNIT_SYMBOL.get(to_sanitized, to_sanitized) - - if from_sanitized not in METRIC_CONVERSION: - msg = ( - f"Invalid 'from_type' value: {from_type!r}.\n" - f"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}" - ) - raise ValueError(msg) - if to_sanitized not in METRIC_CONVERSION: - msg = ( - f"Invalid 'to_type' value: {to_type!r}.\n" - f"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}" - ) - raise ValueError(msg) - from_exponent = METRIC_CONVERSION[from_sanitized] - to_exponent = METRIC_CONVERSION[to_sanitized] - exponent = 1 - - if from_exponent > to_exponent: - exponent = from_exponent - to_exponent - else: - exponent = -(to_exponent - from_exponent) - - return value * pow(10, exponent) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/binary_to_decimal.py b/conversions/binary_to_decimal.py deleted file mode 100644 index 914a9318c225..000000000000 --- a/conversions/binary_to_decimal.py +++ /dev/null @@ -1,43 +0,0 @@ -def bin_to_decimal(bin_string: str) -> int: - """ - Convert a binary value to its decimal equivalent - - >>> bin_to_decimal("101") - 5 - >>> bin_to_decimal(" 1010 ") - 10 - >>> bin_to_decimal("-11101") - -29 - >>> bin_to_decimal("0") - 0 - >>> bin_to_decimal("a") - Traceback (most recent call last): - ... - ValueError: Non-binary value was passed to the function - >>> bin_to_decimal("") - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - >>> bin_to_decimal("39") - Traceback (most recent call last): - ... - ValueError: Non-binary value was passed to the function - """ - bin_string = str(bin_string).strip() - if not bin_string: - raise ValueError("Empty string was passed to the function") - is_negative = bin_string[0] == "-" - if is_negative: - bin_string = bin_string[1:] - if not all(char in "01" for char in bin_string): - raise ValueError("Non-binary value was passed to the function") - decimal_number = 0 - for char in bin_string: - decimal_number = 2 * decimal_number + int(char) - return -decimal_number if is_negative else decimal_number - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/binary_to_hexadecimal.py b/conversions/binary_to_hexadecimal.py deleted file mode 100644 index a3855bb70b52..000000000000 --- a/conversions/binary_to_hexadecimal.py +++ /dev/null @@ -1,66 +0,0 @@ -BITS_TO_HEX = { - "0000": "0", - "0001": "1", - "0010": "2", - "0011": "3", - "0100": "4", - "0101": "5", - "0110": "6", - "0111": "7", - "1000": "8", - "1001": "9", - "1010": "a", - "1011": "b", - "1100": "c", - "1101": "d", - "1110": "e", - "1111": "f", -} - - -def bin_to_hexadecimal(binary_str: str) -> str: - """ - Converting a binary string into hexadecimal using Grouping Method - - >>> bin_to_hexadecimal('101011111') - '0x15f' - >>> bin_to_hexadecimal(' 1010 ') - '0x0a' - >>> bin_to_hexadecimal('-11101') - '-0x1d' - >>> bin_to_hexadecimal('a') - Traceback (most recent call last): - ... - ValueError: Non-binary value was passed to the function - >>> bin_to_hexadecimal('') - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - """ - # Sanitising parameter - binary_str = str(binary_str).strip() - - # Exceptions - if not binary_str: - raise ValueError("Empty string was passed to the function") - is_negative = binary_str[0] == "-" - binary_str = binary_str[1:] if is_negative else binary_str - if not all(char in "01" for char in binary_str): - raise ValueError("Non-binary value was passed to the function") - - binary_str = ( - "0" * (4 * (divmod(len(binary_str), 4)[0] + 1) - len(binary_str)) + binary_str - ) - - hexadecimal = [] - for x in range(0, len(binary_str), 4): - hexadecimal.append(BITS_TO_HEX[binary_str[x : x + 4]]) - hexadecimal_str = "0x" + "".join(hexadecimal) - - return "-" + hexadecimal_str if is_negative else hexadecimal_str - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/binary_to_octal.py b/conversions/binary_to_octal.py deleted file mode 100644 index 82f81e06234a..000000000000 --- a/conversions/binary_to_octal.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -The function below will convert any binary string to the octal equivalent. - ->>> bin_to_octal("1111") -'17' - ->>> bin_to_octal("101010101010011") -'52523' - ->>> bin_to_octal("") -Traceback (most recent call last): - ... -ValueError: Empty string was passed to the function ->>> bin_to_octal("a-1") -Traceback (most recent call last): - ... -ValueError: Non-binary value was passed to the function -""" - - -def bin_to_octal(bin_string: str) -> str: - if not all(char in "01" for char in bin_string): - raise ValueError("Non-binary value was passed to the function") - if not bin_string: - raise ValueError("Empty string was passed to the function") - oct_string = "" - while len(bin_string) % 3 != 0: - bin_string = "0" + bin_string - bin_string_in_3_list = [ - bin_string[index : index + 3] - for index in range(len(bin_string)) - if index % 3 == 0 - ] - for bin_group in bin_string_in_3_list: - oct_val = 0 - for index, val in enumerate(bin_group): - oct_val += int(2 ** (2 - index) * int(val)) - oct_string += str(oct_val) - return oct_string - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/convert_number_to_words.py b/conversions/convert_number_to_words.py deleted file mode 100644 index dbab44c72e1f..000000000000 --- a/conversions/convert_number_to_words.py +++ /dev/null @@ -1,205 +0,0 @@ -from enum import Enum -from typing import ClassVar, Literal - - -class NumberingSystem(Enum): - SHORT = ( - (15, "quadrillion"), - (12, "trillion"), - (9, "billion"), - (6, "million"), - (3, "thousand"), - (2, "hundred"), - ) - - LONG = ( - (15, "billiard"), - (9, "milliard"), - (6, "million"), - (3, "thousand"), - (2, "hundred"), - ) - - INDIAN = ( - (14, "crore crore"), - (12, "lakh crore"), - (7, "crore"), - (5, "lakh"), - (3, "thousand"), - (2, "hundred"), - ) - - @classmethod - def max_value(cls, system: str) -> int: - """ - Gets the max value supported by the given number system. - - >>> NumberingSystem.max_value("short") == 10**18 - 1 - True - >>> NumberingSystem.max_value("long") == 10**21 - 1 - True - >>> NumberingSystem.max_value("indian") == 10**19 - 1 - True - """ - match system_enum := cls[system.upper()]: - case cls.SHORT: - max_exp = system_enum.value[0][0] + 3 - case cls.LONG: - max_exp = system_enum.value[0][0] + 6 - case cls.INDIAN: - max_exp = 19 - case _: - raise ValueError("Invalid numbering system") - return 10**max_exp - 1 - - -class NumberWords(Enum): - ONES: ClassVar[dict[int, str]] = { - 0: "", - 1: "one", - 2: "two", - 3: "three", - 4: "four", - 5: "five", - 6: "six", - 7: "seven", - 8: "eight", - 9: "nine", - } - - TEENS: ClassVar[dict[int, str]] = { - 0: "ten", - 1: "eleven", - 2: "twelve", - 3: "thirteen", - 4: "fourteen", - 5: "fifteen", - 6: "sixteen", - 7: "seventeen", - 8: "eighteen", - 9: "nineteen", - } - - TENS: ClassVar[dict[int, str]] = { - 2: "twenty", - 3: "thirty", - 4: "forty", - 5: "fifty", - 6: "sixty", - 7: "seventy", - 8: "eighty", - 9: "ninety", - } - - -def convert_small_number(num: int) -> str: - """ - Converts small, non-negative integers with irregular constructions in English (i.e., - numbers under 100) into words. - - >>> convert_small_number(0) - 'zero' - >>> convert_small_number(5) - 'five' - >>> convert_small_number(10) - 'ten' - >>> convert_small_number(15) - 'fifteen' - >>> convert_small_number(20) - 'twenty' - >>> convert_small_number(25) - 'twenty-five' - >>> convert_small_number(-1) - Traceback (most recent call last): - ... - ValueError: This function only accepts non-negative integers - >>> convert_small_number(123) - Traceback (most recent call last): - ... - ValueError: This function only converts numbers less than 100 - """ - if num < 0: - raise ValueError("This function only accepts non-negative integers") - if num >= 100: - raise ValueError("This function only converts numbers less than 100") - tens, ones = divmod(num, 10) - if tens == 0: - return NumberWords.ONES.value[ones] or "zero" - if tens == 1: - return NumberWords.TEENS.value[ones] - return ( - NumberWords.TENS.value[tens] - + ("-" if NumberWords.ONES.value[ones] else "") - + NumberWords.ONES.value[ones] - ) - - -def convert_number( - num: int, system: Literal["short", "long", "indian"] = "short" -) -> str: - """ - Converts an integer to English words. - - :param num: The integer to be converted - :param system: The numbering system (short, long, or Indian) - - >>> convert_number(0) - 'zero' - >>> convert_number(1) - 'one' - >>> convert_number(100) - 'one hundred' - >>> convert_number(-100) - 'negative one hundred' - >>> convert_number(123_456_789_012_345) # doctest: +NORMALIZE_WHITESPACE - 'one hundred twenty-three trillion four hundred fifty-six billion - seven hundred eighty-nine million twelve thousand three hundred forty-five' - >>> convert_number(123_456_789_012_345, "long") # doctest: +NORMALIZE_WHITESPACE - 'one hundred twenty-three thousand four hundred fifty-six milliard - seven hundred eighty-nine million twelve thousand three hundred forty-five' - >>> convert_number(12_34_56_78_90_12_345, "indian") # doctest: +NORMALIZE_WHITESPACE - 'one crore crore twenty-three lakh crore - forty-five thousand six hundred seventy-eight crore - ninety lakh twelve thousand three hundred forty-five' - >>> convert_number(10**18) - Traceback (most recent call last): - ... - ValueError: Input number is too large - >>> convert_number(10**21, "long") - Traceback (most recent call last): - ... - ValueError: Input number is too large - >>> convert_number(10**19, "indian") - Traceback (most recent call last): - ... - ValueError: Input number is too large - """ - word_groups = [] - - if num < 0: - word_groups.append("negative") - num *= -1 - - if num > NumberingSystem.max_value(system): - raise ValueError("Input number is too large") - - for power, unit in NumberingSystem[system.upper()].value: - digit_group, num = divmod(num, 10**power) - if digit_group > 0: - word_group = ( - convert_number(digit_group, system) - if digit_group >= 100 - else convert_small_number(digit_group) - ) - word_groups.append(f"{word_group} {unit}") - if num > 0 or not word_groups: # word_groups is only empty if input num was 0 - word_groups.append(convert_small_number(num)) - return " ".join(word_groups) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(f"{convert_number(123456789) = }") diff --git a/conversions/decimal_to_any.py b/conversions/decimal_to_any.py deleted file mode 100644 index c9c2e9a5fb71..000000000000 --- a/conversions/decimal_to_any.py +++ /dev/null @@ -1,105 +0,0 @@ -"""Convert a positive Decimal Number to Any Other Representation""" - -from string import ascii_uppercase - -ALPHABET_VALUES = {str(ord(c) - 55): c for c in ascii_uppercase} - - -def decimal_to_any(num: int, base: int) -> str: - """ - Convert a positive integer to another base as str. - >>> decimal_to_any(0, 2) - '0' - >>> decimal_to_any(5, 4) - '11' - >>> decimal_to_any(20, 3) - '202' - >>> decimal_to_any(58, 16) - '3A' - >>> decimal_to_any(243, 17) - 'E5' - >>> decimal_to_any(34923, 36) - 'QY3' - >>> decimal_to_any(10, 11) - 'A' - >>> decimal_to_any(16, 16) - '10' - >>> decimal_to_any(36, 36) - '10' - >>> # negatives will error - >>> decimal_to_any(-45, 8) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: parameter must be positive int - >>> # floats will error - >>> decimal_to_any(34.4, 6) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: int() can't convert non-string with explicit base - >>> # a float base will error - >>> decimal_to_any(5, 2.5) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - >>> # a str base will error - >>> decimal_to_any(10, '16') # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: 'str' object cannot be interpreted as an integer - >>> # a base less than 2 will error - >>> decimal_to_any(7, 0) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: base must be >= 2 - >>> # a base greater than 36 will error - >>> decimal_to_any(34, 37) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: base must be <= 36 - """ - if isinstance(num, float): - raise TypeError("int() can't convert non-string with explicit base") - if num < 0: - raise ValueError("parameter must be positive int") - if isinstance(base, str): - raise TypeError("'str' object cannot be interpreted as an integer") - if isinstance(base, float): - raise TypeError("'float' object cannot be interpreted as an integer") - if base in (0, 1): - raise ValueError("base must be >= 2") - if base > 36: - raise ValueError("base must be <= 36") - new_value = "" - mod = 0 - div = 0 - while div != 1: - div, mod = divmod(num, base) - if base >= 11 and 9 < mod < 36: - actual_value = ALPHABET_VALUES[str(mod)] - else: - actual_value = str(mod) - new_value += actual_value - div = num // base - num = div - if div == 0: - return str(new_value[::-1]) - elif div == 1: - new_value += str(div) - return str(new_value[::-1]) - - return new_value[::-1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - for base in range(2, 37): - for num in range(1000): - assert int(decimal_to_any(num, base), base) == num, ( - num, - base, - decimal_to_any(num, base), - int(decimal_to_any(num, base), base), - ) diff --git a/conversions/decimal_to_binary.py b/conversions/decimal_to_binary.py deleted file mode 100644 index cf2b6040ec2a..000000000000 --- a/conversions/decimal_to_binary.py +++ /dev/null @@ -1,109 +0,0 @@ -"""Convert a Decimal Number to a Binary Number.""" - - -def decimal_to_binary_iterative(num: int) -> str: - """ - Convert an Integer Decimal Number to a Binary Number as str. - >>> decimal_to_binary_iterative(0) - '0b0' - >>> decimal_to_binary_iterative(2) - '0b10' - >>> decimal_to_binary_iterative(7) - '0b111' - >>> decimal_to_binary_iterative(35) - '0b100011' - >>> # negatives work too - >>> decimal_to_binary_iterative(-2) - '-0b10' - >>> # other floats will error - >>> decimal_to_binary_iterative(16.16) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - >>> # strings will error as well - >>> decimal_to_binary_iterative('0xfffff') # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: 'str' object cannot be interpreted as an integer - """ - - if isinstance(num, float): - raise TypeError("'float' object cannot be interpreted as an integer") - if isinstance(num, str): - raise TypeError("'str' object cannot be interpreted as an integer") - - if num == 0: - return "0b0" - - negative = False - - if num < 0: - negative = True - num = -num - - binary: list[int] = [] - while num > 0: - binary.insert(0, num % 2) - num >>= 1 - - if negative: - return "-0b" + "".join(str(e) for e in binary) - - return "0b" + "".join(str(e) for e in binary) - - -def decimal_to_binary_recursive_helper(decimal: int) -> str: - """ - Take a positive integer value and return its binary equivalent. - >>> decimal_to_binary_recursive_helper(1000) - '1111101000' - >>> decimal_to_binary_recursive_helper("72") - '1001000' - >>> decimal_to_binary_recursive_helper("number") - Traceback (most recent call last): - ... - ValueError: invalid literal for int() with base 10: 'number' - """ - decimal = int(decimal) - if decimal in (0, 1): # Exit cases for the recursion - return str(decimal) - div, mod = divmod(decimal, 2) - return decimal_to_binary_recursive_helper(div) + str(mod) - - -def decimal_to_binary_recursive(number: str) -> str: - """ - Take an integer value and raise ValueError for wrong inputs, - call the function above and return the output with prefix "0b" & "-0b" - for positive and negative integers respectively. - >>> decimal_to_binary_recursive(0) - '0b0' - >>> decimal_to_binary_recursive(40) - '0b101000' - >>> decimal_to_binary_recursive(-40) - '-0b101000' - >>> decimal_to_binary_recursive(40.8) - Traceback (most recent call last): - ... - ValueError: Input value is not an integer - >>> decimal_to_binary_recursive("forty") - Traceback (most recent call last): - ... - ValueError: Input value is not an integer - """ - number = str(number).strip() - if not number: - raise ValueError("No input value was provided") - negative = "-" if number.startswith("-") else "" - number = number.lstrip("-") - if not number.isnumeric(): - raise ValueError("Input value is not an integer") - return f"{negative}0b{decimal_to_binary_recursive_helper(int(number))}" - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(decimal_to_binary_recursive(input("Input a decimal number: "))) diff --git a/conversions/decimal_to_hexadecimal.py b/conversions/decimal_to_hexadecimal.py deleted file mode 100644 index ee79592de5ca..000000000000 --- a/conversions/decimal_to_hexadecimal.py +++ /dev/null @@ -1,80 +0,0 @@ -"""Convert Base 10 (Decimal) Values to Hexadecimal Representations""" - -# set decimal value for each hexadecimal digit -values = { - 0: "0", - 1: "1", - 2: "2", - 3: "3", - 4: "4", - 5: "5", - 6: "6", - 7: "7", - 8: "8", - 9: "9", - 10: "a", - 11: "b", - 12: "c", - 13: "d", - 14: "e", - 15: "f", -} - - -def decimal_to_hexadecimal(decimal: float) -> str: - """ - take integer decimal value, return hexadecimal representation as str beginning - with 0x - >>> decimal_to_hexadecimal(5) - '0x5' - >>> decimal_to_hexadecimal(15) - '0xf' - >>> decimal_to_hexadecimal(37) - '0x25' - >>> decimal_to_hexadecimal(255) - '0xff' - >>> decimal_to_hexadecimal(4096) - '0x1000' - >>> decimal_to_hexadecimal(999098) - '0xf3eba' - >>> # negatives work too - >>> decimal_to_hexadecimal(-256) - '-0x100' - >>> # floats are acceptable if equivalent to an int - >>> decimal_to_hexadecimal(17.0) - '0x11' - >>> # other floats will error - >>> decimal_to_hexadecimal(16.16) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - AssertionError - >>> # strings will error as well - >>> decimal_to_hexadecimal('0xfffff') # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - AssertionError - >>> # results are the same when compared to Python's default hex function - >>> decimal_to_hexadecimal(-256) == hex(-256) - True - """ - assert isinstance(decimal, (int, float)) - assert decimal == int(decimal) - decimal = int(decimal) - hexadecimal = "" - negative = False - if decimal < 0: - negative = True - decimal *= -1 - while decimal > 0: - decimal, remainder = divmod(decimal, 16) - hexadecimal = values[remainder] + hexadecimal - hexadecimal = "0x" + hexadecimal - if negative: - hexadecimal = "-" + hexadecimal - return hexadecimal - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/decimal_to_octal.py b/conversions/decimal_to_octal.py deleted file mode 100644 index 4c313bddf64c..000000000000 --- a/conversions/decimal_to_octal.py +++ /dev/null @@ -1,43 +0,0 @@ -"""Convert a Decimal Number to an Octal Number.""" - -import math - -# Modified from: -# https://github.com/TheAlgorithms/Javascript/blob/master/Conversions/DecimalToOctal.js - - -def decimal_to_octal(num: int) -> str: - """Convert a Decimal Number to an Octal Number. - - >>> all(decimal_to_octal(i) == oct(i) for i - ... in (0, 2, 8, 64, 65, 216, 255, 256, 512)) - True - """ - octal = 0 - counter = 0 - while num > 0: - remainder = num % 8 - octal = octal + (remainder * math.floor(math.pow(10, counter))) - counter += 1 - num = math.floor(num / 8) # basically /= 8 without remainder if any - # This formatting removes trailing '.0' from `octal`. - return f"0o{int(octal)}" - - -def main() -> None: - """Print octal equivalents of decimal numbers.""" - print("\n2 in octal is:") - print(decimal_to_octal(2)) # = 2 - print("\n8 in octal is:") - print(decimal_to_octal(8)) # = 10 - print("\n65 in octal is:") - print(decimal_to_octal(65)) # = 101 - print("\n216 in octal is:") - print(decimal_to_octal(216)) # = 330 - print("\n512 in octal is:") - print(decimal_to_octal(512)) # = 1000 - print("\n") - - -if __name__ == "__main__": - main() diff --git a/conversions/energy_conversions.py b/conversions/energy_conversions.py deleted file mode 100644 index 51de6b313928..000000000000 --- a/conversions/energy_conversions.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -Conversion of energy units. - -Available units: joule, kilojoule, megajoule, gigajoule,\ - wattsecond, watthour, kilowatthour, newtonmeter, calorie_nutr,\ - kilocalorie_nutr, electronvolt, britishthermalunit_it, footpound - -USAGE : --> Import this file into their respective project. --> Use the function energy_conversion() for conversion of energy units. --> Parameters : - -> from_type : From which type you want to convert - -> to_type : To which type you want to convert - -> value : the value which you want to convert - -REFERENCES : --> Wikipedia reference: https://en.wikipedia.org/wiki/Units_of_energy --> Wikipedia reference: https://en.wikipedia.org/wiki/Joule --> Wikipedia reference: https://en.wikipedia.org/wiki/Kilowatt-hour --> Wikipedia reference: https://en.wikipedia.org/wiki/Newton-metre --> Wikipedia reference: https://en.wikipedia.org/wiki/Calorie --> Wikipedia reference: https://en.wikipedia.org/wiki/Electronvolt --> Wikipedia reference: https://en.wikipedia.org/wiki/British_thermal_unit --> Wikipedia reference: https://en.wikipedia.org/wiki/Foot-pound_(energy) --> Unit converter reference: https://www.unitconverters.net/energy-converter.html -""" - -ENERGY_CONVERSION: dict[str, float] = { - "joule": 1.0, - "kilojoule": 1_000, - "megajoule": 1_000_000, - "gigajoule": 1_000_000_000, - "wattsecond": 1.0, - "watthour": 3_600, - "kilowatthour": 3_600_000, - "newtonmeter": 1.0, - "calorie_nutr": 4_186.8, - "kilocalorie_nutr": 4_186_800.00, - "electronvolt": 1.602_176_634e-19, - "britishthermalunit_it": 1_055.055_85, - "footpound": 1.355_818, -} - - -def energy_conversion(from_type: str, to_type: str, value: float) -> float: - """ - Conversion of energy units. - >>> energy_conversion("joule", "joule", 1) - 1.0 - >>> energy_conversion("joule", "kilojoule", 1) - 0.001 - >>> energy_conversion("joule", "megajoule", 1) - 1e-06 - >>> energy_conversion("joule", "gigajoule", 1) - 1e-09 - >>> energy_conversion("joule", "wattsecond", 1) - 1.0 - >>> energy_conversion("joule", "watthour", 1) - 0.0002777777777777778 - >>> energy_conversion("joule", "kilowatthour", 1) - 2.7777777777777776e-07 - >>> energy_conversion("joule", "newtonmeter", 1) - 1.0 - >>> energy_conversion("joule", "calorie_nutr", 1) - 0.00023884589662749592 - >>> energy_conversion("joule", "kilocalorie_nutr", 1) - 2.388458966274959e-07 - >>> energy_conversion("joule", "electronvolt", 1) - 6.241509074460763e+18 - >>> energy_conversion("joule", "britishthermalunit_it", 1) - 0.0009478171226670134 - >>> energy_conversion("joule", "footpound", 1) - 0.7375621211696556 - >>> energy_conversion("joule", "megajoule", 1000) - 0.001 - >>> energy_conversion("calorie_nutr", "kilocalorie_nutr", 1000) - 1.0 - >>> energy_conversion("kilowatthour", "joule", 10) - 36000000.0 - >>> energy_conversion("britishthermalunit_it", "footpound", 1) - 778.1692306784539 - >>> energy_conversion("watthour", "joule", "a") # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for /: 'str' and 'float' - >>> energy_conversion("wrongunit", "joule", 1) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: Incorrect 'from_type' or 'to_type' value: 'wrongunit', 'joule' - Valid values are: joule, ... footpound - >>> energy_conversion("joule", "wrongunit", 1) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: Incorrect 'from_type' or 'to_type' value: 'joule', 'wrongunit' - Valid values are: joule, ... footpound - >>> energy_conversion("123", "abc", 1) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: Incorrect 'from_type' or 'to_type' value: '123', 'abc' - Valid values are: joule, ... footpound - """ - if to_type not in ENERGY_CONVERSION or from_type not in ENERGY_CONVERSION: - msg = ( - f"Incorrect 'from_type' or 'to_type' value: {from_type!r}, {to_type!r}\n" - f"Valid values are: {', '.join(ENERGY_CONVERSION)}" - ) - raise ValueError(msg) - return value * ENERGY_CONVERSION[from_type] / ENERGY_CONVERSION[to_type] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/excel_title_to_column.py b/conversions/excel_title_to_column.py deleted file mode 100644 index d77031ec26f2..000000000000 --- a/conversions/excel_title_to_column.py +++ /dev/null @@ -1,33 +0,0 @@ -def excel_title_to_column(column_title: str) -> int: - """ - Given a string column_title that represents - the column title in an Excel sheet, return - its corresponding column number. - - >>> excel_title_to_column("A") - 1 - >>> excel_title_to_column("B") - 2 - >>> excel_title_to_column("AB") - 28 - >>> excel_title_to_column("Z") - 26 - """ - assert column_title.isupper() - answer = 0 - index = len(column_title) - 1 - power = 0 - - while index >= 0: - value = (ord(column_title[index]) - 64) * pow(26, power) - answer += value - power += 1 - index -= 1 - - return answer - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/hex_to_bin.py b/conversions/hex_to_bin.py deleted file mode 100644 index b872ab5cbce6..000000000000 --- a/conversions/hex_to_bin.py +++ /dev/null @@ -1,56 +0,0 @@ -def hex_to_bin(hex_num: str) -> int: - """ - Convert a hexadecimal value to its binary equivalent - #https://stackoverflow.com/questions/1425493/convert-hex-to-binary - Here, we have used the bitwise right shift operator: >> - Shifts the bits of the number to the right and fills 0 on voids left as a result. - Similar effect as of dividing the number with some power of two. - Example: - a = 10 - a >> 1 = 5 - - >>> hex_to_bin("AC") - 10101100 - >>> hex_to_bin("9A4") - 100110100100 - >>> hex_to_bin(" 12f ") - 100101111 - >>> hex_to_bin("FfFf") - 1111111111111111 - >>> hex_to_bin("-fFfF") - -1111111111111111 - >>> hex_to_bin("F-f") - Traceback (most recent call last): - ... - ValueError: Invalid value was passed to the function - >>> hex_to_bin("") - Traceback (most recent call last): - ... - ValueError: No value was passed to the function - """ - - hex_num = hex_num.strip() - if not hex_num: - raise ValueError("No value was passed to the function") - - is_negative = hex_num[0] == "-" - if is_negative: - hex_num = hex_num[1:] - - try: - int_num = int(hex_num, 16) - except ValueError: - raise ValueError("Invalid value was passed to the function") - - bin_str = "" - while int_num > 0: - bin_str = str(int_num % 2) + bin_str - int_num >>= 1 - - return int(("-" + bin_str) if is_negative else bin_str) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/hexadecimal_to_decimal.py b/conversions/hexadecimal_to_decimal.py deleted file mode 100644 index 209e4aebb368..000000000000 --- a/conversions/hexadecimal_to_decimal.py +++ /dev/null @@ -1,49 +0,0 @@ -hex_table = {hex(i)[2:]: i for i in range(16)} # Use [:2] to strip off the leading '0x' - - -def hex_to_decimal(hex_string: str) -> int: - """ - Convert a hexadecimal value to its decimal equivalent - #https://www.programiz.com/python-programming/methods/built-in/hex - - >>> hex_to_decimal("a") - 10 - >>> hex_to_decimal("12f") - 303 - >>> hex_to_decimal(" 12f ") - 303 - >>> hex_to_decimal("FfFf") - 65535 - >>> hex_to_decimal("-Ff") - -255 - >>> hex_to_decimal("F-f") - Traceback (most recent call last): - ... - ValueError: Non-hexadecimal value was passed to the function - >>> hex_to_decimal("") - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - >>> hex_to_decimal("12m") - Traceback (most recent call last): - ... - ValueError: Non-hexadecimal value was passed to the function - """ - hex_string = hex_string.strip().lower() - if not hex_string: - raise ValueError("Empty string was passed to the function") - is_negative = hex_string[0] == "-" - if is_negative: - hex_string = hex_string[1:] - if not all(char in hex_table for char in hex_string): - raise ValueError("Non-hexadecimal value was passed to the function") - decimal_number = 0 - for char in hex_string: - decimal_number = 16 * decimal_number + hex_table[char] - return -decimal_number if is_negative else decimal_number - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/ipv4_conversion.py b/conversions/ipv4_conversion.py deleted file mode 100644 index 862309b7251e..000000000000 --- a/conversions/ipv4_conversion.py +++ /dev/null @@ -1,85 +0,0 @@ -# https://www.geeksforgeeks.org/convert-ip-address-to-integer-and-vice-versa/ - - -def ipv4_to_decimal(ipv4_address: str) -> int: - """ - Convert an IPv4 address to its decimal representation. - - Args: - ip_address: A string representing an IPv4 address (e.g., "192.168.0.1"). - - Returns: - int: The decimal representation of the IP address. - - >>> ipv4_to_decimal("192.168.0.1") - 3232235521 - >>> ipv4_to_decimal("10.0.0.255") - 167772415 - >>> ipv4_to_decimal("10.0.255") - Traceback (most recent call last): - ... - ValueError: Invalid IPv4 address format - >>> ipv4_to_decimal("10.0.0.256") - Traceback (most recent call last): - ... - ValueError: Invalid IPv4 octet 256 - """ - - octets = [int(octet) for octet in ipv4_address.split(".")] - if len(octets) != 4: - raise ValueError("Invalid IPv4 address format") - - decimal_ipv4 = 0 - for octet in octets: - if not 0 <= octet <= 255: - raise ValueError(f"Invalid IPv4 octet {octet}") # noqa: EM102 - decimal_ipv4 = (decimal_ipv4 << 8) + int(octet) - - return decimal_ipv4 - - -def alt_ipv4_to_decimal(ipv4_address: str) -> int: - """ - >>> alt_ipv4_to_decimal("192.168.0.1") - 3232235521 - >>> alt_ipv4_to_decimal("10.0.0.255") - 167772415 - """ - return int("0x" + "".join(f"{int(i):02x}" for i in ipv4_address.split(".")), 16) - - -def decimal_to_ipv4(decimal_ipv4: int) -> str: - """ - Convert a decimal representation of an IP address to its IPv4 format. - - Args: - decimal_ipv4: An integer representing the decimal IP address. - - Returns: - The IPv4 representation of the decimal IP address. - - >>> decimal_to_ipv4(3232235521) - '192.168.0.1' - >>> decimal_to_ipv4(167772415) - '10.0.0.255' - >>> decimal_to_ipv4(-1) - Traceback (most recent call last): - ... - ValueError: Invalid decimal IPv4 address - """ - - if not (0 <= decimal_ipv4 <= 4294967295): - raise ValueError("Invalid decimal IPv4 address") - - ip_parts = [] - for _ in range(4): - ip_parts.append(str(decimal_ipv4 & 255)) - decimal_ipv4 >>= 8 - - return ".".join(reversed(ip_parts)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/length_conversion.py b/conversions/length_conversion.py deleted file mode 100644 index 07fa93a198c7..000000000000 --- a/conversions/length_conversion.py +++ /dev/null @@ -1,132 +0,0 @@ -""" -Conversion of length units. -Available Units:- Metre,Kilometre,Feet,Inch,Centimeter,Yard,Foot,Mile,Millimeter - -USAGE : --> Import this file into their respective project. --> Use the function length_conversion() for conversion of length units. --> Parameters : - -> value : The number of from units you want to convert - -> from_type : From which type you want to convert - -> to_type : To which type you want to convert - -REFERENCES : --> Wikipedia reference: https://en.wikipedia.org/wiki/Meter --> Wikipedia reference: https://en.wikipedia.org/wiki/Kilometer --> Wikipedia reference: https://en.wikipedia.org/wiki/Feet --> Wikipedia reference: https://en.wikipedia.org/wiki/Inch --> Wikipedia reference: https://en.wikipedia.org/wiki/Centimeter --> Wikipedia reference: https://en.wikipedia.org/wiki/Yard --> Wikipedia reference: https://en.wikipedia.org/wiki/Foot --> Wikipedia reference: https://en.wikipedia.org/wiki/Mile --> Wikipedia reference: https://en.wikipedia.org/wiki/Millimeter -""" - -from typing import NamedTuple - - -class FromTo(NamedTuple): - from_factor: float - to_factor: float - - -TYPE_CONVERSION = { - "millimeter": "mm", - "centimeter": "cm", - "meter": "m", - "kilometer": "km", - "inch": "in", - "inche": "in", # Trailing 's' has been stripped off - "feet": "ft", - "foot": "ft", - "yard": "yd", - "mile": "mi", -} - -METRIC_CONVERSION = { - "mm": FromTo(0.001, 1000), - "cm": FromTo(0.01, 100), - "m": FromTo(1, 1), - "km": FromTo(1000, 0.001), - "in": FromTo(0.0254, 39.3701), - "ft": FromTo(0.3048, 3.28084), - "yd": FromTo(0.9144, 1.09361), - "mi": FromTo(1609.34, 0.000621371), -} - - -def length_conversion(value: float, from_type: str, to_type: str) -> float: - """ - Conversion between length units. - - >>> length_conversion(4, "METER", "FEET") - 13.12336 - >>> length_conversion(4, "M", "FT") - 13.12336 - >>> length_conversion(1, "meter", "kilometer") - 0.001 - >>> length_conversion(1, "kilometer", "inch") - 39370.1 - >>> length_conversion(3, "kilometer", "mile") - 1.8641130000000001 - >>> length_conversion(2, "feet", "meter") - 0.6096 - >>> length_conversion(4, "feet", "yard") - 1.333329312 - >>> length_conversion(1, "inch", "meter") - 0.0254 - >>> length_conversion(2, "inch", "mile") - 3.15656468e-05 - >>> length_conversion(2, "centimeter", "millimeter") - 20.0 - >>> length_conversion(2, "centimeter", "yard") - 0.0218722 - >>> length_conversion(4, "yard", "meter") - 3.6576 - >>> length_conversion(4, "yard", "kilometer") - 0.0036576 - >>> length_conversion(3, "foot", "meter") - 0.9144000000000001 - >>> length_conversion(3, "foot", "inch") - 36.00001944 - >>> length_conversion(4, "mile", "kilometer") - 6.43736 - >>> length_conversion(2, "miles", "InChEs") - 126719.753468 - >>> length_conversion(3, "millimeter", "centimeter") - 0.3 - >>> length_conversion(3, "mm", "in") - 0.1181103 - >>> length_conversion(4, "wrongUnit", "inch") - Traceback (most recent call last): - ... - ValueError: Invalid 'from_type' value: 'wrongUnit'. - Conversion abbreviations are: mm, cm, m, km, in, ft, yd, mi - """ - new_from = from_type.lower().rstrip("s") - new_from = TYPE_CONVERSION.get(new_from, new_from) - new_to = to_type.lower().rstrip("s") - new_to = TYPE_CONVERSION.get(new_to, new_to) - if new_from not in METRIC_CONVERSION: - msg = ( - f"Invalid 'from_type' value: {from_type!r}.\n" - f"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}" - ) - raise ValueError(msg) - if new_to not in METRIC_CONVERSION: - msg = ( - f"Invalid 'to_type' value: {to_type!r}.\n" - f"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}" - ) - raise ValueError(msg) - return ( - value - * METRIC_CONVERSION[new_from].from_factor - * METRIC_CONVERSION[new_to].to_factor - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/molecular_chemistry.py b/conversions/molecular_chemistry.py deleted file mode 100644 index 51ffe534dd0d..000000000000 --- a/conversions/molecular_chemistry.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Functions useful for doing molecular chemistry: -* molarity_to_normality -* moles_to_pressure -* moles_to_volume -* pressure_and_volume_to_temperature -""" - - -def molarity_to_normality(nfactor: int, moles: float, volume: float) -> float: - """ - Convert molarity to normality. - Volume is taken in litres. - - Wikipedia reference: https://en.wikipedia.org/wiki/Equivalent_concentration - Wikipedia reference: https://en.wikipedia.org/wiki/Molar_concentration - - >>> molarity_to_normality(2, 3.1, 0.31) - 20 - >>> molarity_to_normality(4, 11.4, 5.7) - 8 - """ - return round(float(moles / volume) * nfactor) - - -def moles_to_pressure(volume: float, moles: float, temperature: float) -> float: - """ - Convert moles to pressure. - Ideal gas laws are used. - Temperature is taken in kelvin. - Volume is taken in litres. - Pressure has atm as SI unit. - - Wikipedia reference: https://en.wikipedia.org/wiki/Gas_laws - Wikipedia reference: https://en.wikipedia.org/wiki/Pressure - Wikipedia reference: https://en.wikipedia.org/wiki/Temperature - - >>> moles_to_pressure(0.82, 3, 300) - 90 - >>> moles_to_pressure(8.2, 5, 200) - 10 - """ - return round(float((moles * 0.0821 * temperature) / (volume))) - - -def moles_to_volume(pressure: float, moles: float, temperature: float) -> float: - """ - Convert moles to volume. - Ideal gas laws are used. - Temperature is taken in kelvin. - Volume is taken in litres. - Pressure has atm as SI unit. - - Wikipedia reference: https://en.wikipedia.org/wiki/Gas_laws - Wikipedia reference: https://en.wikipedia.org/wiki/Pressure - Wikipedia reference: https://en.wikipedia.org/wiki/Temperature - - >>> moles_to_volume(0.82, 3, 300) - 90 - >>> moles_to_volume(8.2, 5, 200) - 10 - """ - return round(float((moles * 0.0821 * temperature) / (pressure))) - - -def pressure_and_volume_to_temperature( - pressure: float, moles: float, volume: float -) -> float: - """ - Convert pressure and volume to temperature. - Ideal gas laws are used. - Temperature is taken in kelvin. - Volume is taken in litres. - Pressure has atm as SI unit. - - Wikipedia reference: https://en.wikipedia.org/wiki/Gas_laws - Wikipedia reference: https://en.wikipedia.org/wiki/Pressure - Wikipedia reference: https://en.wikipedia.org/wiki/Temperature - - >>> pressure_and_volume_to_temperature(0.82, 1, 2) - 20 - >>> pressure_and_volume_to_temperature(8.2, 5, 3) - 60 - """ - return round(float((pressure * volume) / (0.0821 * moles))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/octal_to_binary.py b/conversions/octal_to_binary.py deleted file mode 100644 index 84e1e85f33ca..000000000000 --- a/conversions/octal_to_binary.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -* Author: Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi) -* Description: Convert a Octal number to Binary. - -References for better understanding: -https://en.wikipedia.org/wiki/Binary_number -https://en.wikipedia.org/wiki/Octal -""" - - -def octal_to_binary(octal_number: str) -> str: - """ - Convert an Octal number to Binary. - - >>> octal_to_binary("17") - '001111' - >>> octal_to_binary("7") - '111' - >>> octal_to_binary("Av") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> octal_to_binary("@#") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> octal_to_binary("") - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - """ - if not octal_number: - raise ValueError("Empty string was passed to the function") - - binary_number = "" - octal_digits = "01234567" - for digit in octal_number: - if digit not in octal_digits: - raise ValueError("Non-octal value was passed to the function") - - binary_digit = "" - value = int(digit) - for _ in range(3): - binary_digit = str(value % 2) + binary_digit - value //= 2 - binary_number += binary_digit - - return binary_number - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/octal_to_decimal.py b/conversions/octal_to_decimal.py deleted file mode 100644 index 7f006f20e0c8..000000000000 --- a/conversions/octal_to_decimal.py +++ /dev/null @@ -1,79 +0,0 @@ -def oct_to_decimal(oct_string: str) -> int: - """ - Convert a octal value to its decimal equivalent - - >>> oct_to_decimal("") - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - >>> oct_to_decimal("-") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("e") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("8") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("-e") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("-8") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("1") - 1 - >>> oct_to_decimal("-1") - -1 - >>> oct_to_decimal("12") - 10 - >>> oct_to_decimal(" 12 ") - 10 - >>> oct_to_decimal("-45") - -37 - >>> oct_to_decimal("-") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("0") - 0 - >>> oct_to_decimal("-4055") - -2093 - >>> oct_to_decimal("2-0Fm") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - >>> oct_to_decimal("") - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - >>> oct_to_decimal("19") - Traceback (most recent call last): - ... - ValueError: Non-octal value was passed to the function - """ - oct_string = str(oct_string).strip() - if not oct_string: - raise ValueError("Empty string was passed to the function") - is_negative = oct_string[0] == "-" - if is_negative: - oct_string = oct_string[1:] - if not oct_string.isdigit() or not all(0 <= int(char) <= 7 for char in oct_string): - raise ValueError("Non-octal value was passed to the function") - decimal_number = 0 - for char in oct_string: - decimal_number = 8 * decimal_number + int(char) - if is_negative: - decimal_number = -decimal_number - return decimal_number - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/octal_to_hexadecimal.py b/conversions/octal_to_hexadecimal.py deleted file mode 100644 index 0615d79b5c53..000000000000 --- a/conversions/octal_to_hexadecimal.py +++ /dev/null @@ -1,65 +0,0 @@ -def octal_to_hex(octal: str) -> str: - """ - Convert an Octal number to Hexadecimal number. - For more information: https://en.wikipedia.org/wiki/Octal - - >>> octal_to_hex("100") - '0x40' - >>> octal_to_hex("235") - '0x9D' - >>> octal_to_hex(17) - Traceback (most recent call last): - ... - TypeError: Expected a string as input - >>> octal_to_hex("Av") - Traceback (most recent call last): - ... - ValueError: Not a Valid Octal Number - >>> octal_to_hex("") - Traceback (most recent call last): - ... - ValueError: Empty string was passed to the function - """ - - if not isinstance(octal, str): - raise TypeError("Expected a string as input") - if octal.startswith("0o"): - octal = octal[2:] - if octal == "": - raise ValueError("Empty string was passed to the function") - if any(char not in "01234567" for char in octal): - raise ValueError("Not a Valid Octal Number") - - decimal = 0 - for char in octal: - decimal <<= 3 - decimal |= int(char) - - hex_char = "0123456789ABCDEF" - - revhex = "" - while decimal: - revhex += hex_char[decimal & 15] - decimal >>= 4 - - return "0x" + revhex[::-1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - nums = ["030", "100", "247", "235", "007"] - - ## Main Tests - - for num in nums: - hexadecimal = octal_to_hex(num) - expected = "0x" + hex(int(num, 8))[2:].upper() - - assert hexadecimal == expected - - print(f"Hex of '0o{num}' is: {hexadecimal}") - print(f"Expected was: {expected}") - print("---") diff --git a/conversions/prefix_conversions.py b/conversions/prefix_conversions.py deleted file mode 100644 index 714677f3b242..000000000000 --- a/conversions/prefix_conversions.py +++ /dev/null @@ -1,104 +0,0 @@ -""" -Convert International System of Units (SI) and Binary prefixes -""" - -from __future__ import annotations - -from enum import Enum - - -class SIUnit(Enum): - yotta = 24 - zetta = 21 - exa = 18 - peta = 15 - tera = 12 - giga = 9 - mega = 6 - kilo = 3 - hecto = 2 - deca = 1 - deci = -1 - centi = -2 - milli = -3 - micro = -6 - nano = -9 - pico = -12 - femto = -15 - atto = -18 - zepto = -21 - yocto = -24 - - -class BinaryUnit(Enum): - yotta = 8 - zetta = 7 - exa = 6 - peta = 5 - tera = 4 - giga = 3 - mega = 2 - kilo = 1 - - -def convert_si_prefix( - known_amount: float, - known_prefix: str | SIUnit, - unknown_prefix: str | SIUnit, -) -> float: - """ - Wikipedia reference: https://en.wikipedia.org/wiki/Binary_prefix - Wikipedia reference: https://en.wikipedia.org/wiki/International_System_of_Units - >>> convert_si_prefix(1, SIUnit.giga, SIUnit.mega) - 1000 - >>> convert_si_prefix(1, SIUnit.mega, SIUnit.giga) - 0.001 - >>> convert_si_prefix(1, SIUnit.kilo, SIUnit.kilo) - 1 - >>> convert_si_prefix(1, 'giga', 'mega') - 1000 - >>> convert_si_prefix(1, 'gIGa', 'mEGa') - 1000 - """ - if isinstance(known_prefix, str): - known_prefix = SIUnit[known_prefix.lower()] - if isinstance(unknown_prefix, str): - unknown_prefix = SIUnit[unknown_prefix.lower()] - unknown_amount: float = known_amount * ( - 10 ** (known_prefix.value - unknown_prefix.value) - ) - return unknown_amount - - -def convert_binary_prefix( - known_amount: float, - known_prefix: str | BinaryUnit, - unknown_prefix: str | BinaryUnit, -) -> float: - """ - Wikipedia reference: https://en.wikipedia.org/wiki/Metric_prefix - >>> convert_binary_prefix(1, BinaryUnit.giga, BinaryUnit.mega) - 1024 - >>> convert_binary_prefix(1, BinaryUnit.mega, BinaryUnit.giga) - 0.0009765625 - >>> convert_binary_prefix(1, BinaryUnit.kilo, BinaryUnit.kilo) - 1 - >>> convert_binary_prefix(1, 'giga', 'mega') - 1024 - >>> convert_binary_prefix(1, 'gIGa', 'mEGa') - 1024 - """ - if isinstance(known_prefix, str): - known_prefix = BinaryUnit[known_prefix.lower()] - if isinstance(unknown_prefix, str): - unknown_prefix = BinaryUnit[unknown_prefix.lower()] - unknown_amount: float = known_amount * ( - 2 ** ((known_prefix.value - unknown_prefix.value) * 10) - ) - return unknown_amount - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/prefix_conversions_string.py b/conversions/prefix_conversions_string.py deleted file mode 100644 index 9344c9672a1f..000000000000 --- a/conversions/prefix_conversions_string.py +++ /dev/null @@ -1,121 +0,0 @@ -""" -* Author: Manuel Di Lullo (https://github.com/manueldilullo) -* Description: Convert a number to use the correct SI or Binary unit prefix. - -Inspired by prefix_conversion.py file in this repository by lance-pyles - -URL: https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes -URL: https://en.wikipedia.org/wiki/Binary_prefix -""" - -from __future__ import annotations - -from enum import Enum, unique -from typing import TypeVar - -# Create a generic variable that can be 'Enum', or any subclass. -T = TypeVar("T", bound="Enum") - - -@unique -class BinaryUnit(Enum): - yotta = 80 - zetta = 70 - exa = 60 - peta = 50 - tera = 40 - giga = 30 - mega = 20 - kilo = 10 - - -@unique -class SIUnit(Enum): - yotta = 24 - zetta = 21 - exa = 18 - peta = 15 - tera = 12 - giga = 9 - mega = 6 - kilo = 3 - hecto = 2 - deca = 1 - deci = -1 - centi = -2 - milli = -3 - micro = -6 - nano = -9 - pico = -12 - femto = -15 - atto = -18 - zepto = -21 - yocto = -24 - - @classmethod - def get_positive(cls: type[T]) -> dict: - """ - Returns a dictionary with only the elements of this enum - that has a positive value - >>> from itertools import islice - >>> positive = SIUnit.get_positive() - >>> inc = iter(positive.items()) - >>> dict(islice(inc, len(positive) // 2)) - {'yotta': 24, 'zetta': 21, 'exa': 18, 'peta': 15, 'tera': 12} - >>> dict(inc) - {'giga': 9, 'mega': 6, 'kilo': 3, 'hecto': 2, 'deca': 1} - """ - return {unit.name: unit.value for unit in cls if unit.value > 0} - - @classmethod - def get_negative(cls: type[T]) -> dict: - """ - Returns a dictionary with only the elements of this enum - that has a negative value - @example - >>> from itertools import islice - >>> negative = SIUnit.get_negative() - >>> inc = iter(negative.items()) - >>> dict(islice(inc, len(negative) // 2)) - {'deci': -1, 'centi': -2, 'milli': -3, 'micro': -6, 'nano': -9} - >>> dict(inc) - {'pico': -12, 'femto': -15, 'atto': -18, 'zepto': -21, 'yocto': -24} - """ - return {unit.name: unit.value for unit in cls if unit.value < 0} - - -def add_si_prefix(value: float) -> str: - """ - Function that converts a number to his version with SI prefix - @input value (an integer) - @example: - >>> add_si_prefix(10000) - '10.0 kilo' - """ - prefixes = SIUnit.get_positive() if value > 0 else SIUnit.get_negative() - for name_prefix, value_prefix in prefixes.items(): - numerical_part = value / (10**value_prefix) - if numerical_part > 1: - return f"{numerical_part!s} {name_prefix}" - return str(value) - - -def add_binary_prefix(value: float) -> str: - """ - Function that converts a number to his version with Binary prefix - @input value (an integer) - @example: - >>> add_binary_prefix(65536) - '64.0 kilo' - """ - for prefix in BinaryUnit: - numerical_part = value / (2**prefix.value) - if numerical_part > 1: - return f"{numerical_part!s} {prefix.name}" - return str(value) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/pressure_conversions.py b/conversions/pressure_conversions.py deleted file mode 100644 index fe78b1382677..000000000000 --- a/conversions/pressure_conversions.py +++ /dev/null @@ -1,87 +0,0 @@ -""" -Conversion of pressure units. -Available Units:- Pascal,Bar,Kilopascal,Megapascal,psi(pound per square inch), -inHg(in mercury column),torr,atm -USAGE : --> Import this file into their respective project. --> Use the function pressure_conversion() for conversion of pressure units. --> Parameters : - -> value : The number of from units you want to convert - -> from_type : From which type you want to convert - -> to_type : To which type you want to convert -REFERENCES : --> Wikipedia reference: https://en.wikipedia.org/wiki/Pascal_(unit) --> Wikipedia reference: https://en.wikipedia.org/wiki/Pound_per_square_inch --> Wikipedia reference: https://en.wikipedia.org/wiki/Inch_of_mercury --> Wikipedia reference: https://en.wikipedia.org/wiki/Torr --> https://en.wikipedia.org/wiki/Standard_atmosphere_(unit) --> https://msestudent.com/what-are-the-units-of-pressure/ --> https://www.unitconverters.net/pressure-converter.html -""" - -from typing import NamedTuple - - -class FromTo(NamedTuple): - from_factor: float - to_factor: float - - -PRESSURE_CONVERSION = { - "atm": FromTo(1, 1), - "pascal": FromTo(0.0000098, 101325), - "bar": FromTo(0.986923, 1.01325), - "kilopascal": FromTo(0.00986923, 101.325), - "megapascal": FromTo(9.86923, 0.101325), - "psi": FromTo(0.068046, 14.6959), - "inHg": FromTo(0.0334211, 29.9213), - "torr": FromTo(0.00131579, 760), -} - - -def pressure_conversion(value: float, from_type: str, to_type: str) -> float: - """ - Conversion between pressure units. - >>> pressure_conversion(4, "atm", "pascal") - 405300 - >>> pressure_conversion(1, "pascal", "psi") - 0.00014401981999999998 - >>> pressure_conversion(1, "bar", "atm") - 0.986923 - >>> pressure_conversion(3, "kilopascal", "bar") - 0.029999991892499998 - >>> pressure_conversion(2, "megapascal", "psi") - 290.074434314 - >>> pressure_conversion(4, "psi", "torr") - 206.85984 - >>> pressure_conversion(1, "inHg", "atm") - 0.0334211 - >>> pressure_conversion(1, "torr", "psi") - 0.019336718261000002 - >>> pressure_conversion(4, "wrongUnit", "atm") - Traceback (most recent call last): - ... - ValueError: Invalid 'from_type' value: 'wrongUnit' Supported values are: - atm, pascal, bar, kilopascal, megapascal, psi, inHg, torr - """ - if from_type not in PRESSURE_CONVERSION: - raise ValueError( - f"Invalid 'from_type' value: {from_type!r} Supported values are:\n" - + ", ".join(PRESSURE_CONVERSION) - ) - if to_type not in PRESSURE_CONVERSION: - raise ValueError( - f"Invalid 'to_type' value: {to_type!r}. Supported values are:\n" - + ", ".join(PRESSURE_CONVERSION) - ) - return ( - value - * PRESSURE_CONVERSION[from_type].from_factor - * PRESSURE_CONVERSION[to_type].to_factor - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/rgb_cmyk_conversion.py b/conversions/rgb_cmyk_conversion.py deleted file mode 100644 index 07d65b704c44..000000000000 --- a/conversions/rgb_cmyk_conversion.py +++ /dev/null @@ -1,71 +0,0 @@ -def rgb_to_cmyk(r_input: int, g_input: int, b_input: int) -> tuple[int, int, int, int]: - """ - Simple RGB to CMYK conversion. Returns percentages of CMYK paint. - https://www.programmingalgorithms.com/algorithm/rgb-to-cmyk/ - - Note: this is a very popular algorithm that converts colors linearly and gives - only approximate results. Actual preparation for printing requires advanced color - conversion considering the color profiles and parameters of the target device. - - >>> rgb_to_cmyk(255, 200, "a") - Traceback (most recent call last): - ... - ValueError: Expected int, found (<class 'int'>, <class 'int'>, <class 'str'>) - - >>> rgb_to_cmyk(255, 255, 999) - Traceback (most recent call last): - ... - ValueError: Expected int of the range 0..255 - - >>> rgb_to_cmyk(255, 255, 255) # white - (0, 0, 0, 0) - - >>> rgb_to_cmyk(128, 128, 128) # gray - (0, 0, 0, 50) - - >>> rgb_to_cmyk(0, 0, 0) # black - (0, 0, 0, 100) - - >>> rgb_to_cmyk(255, 0, 0) # red - (0, 100, 100, 0) - - >>> rgb_to_cmyk(0, 255, 0) # green - (100, 0, 100, 0) - - >>> rgb_to_cmyk(0, 0, 255) # blue - (100, 100, 0, 0) - """ - - if ( - not isinstance(r_input, int) - or not isinstance(g_input, int) - or not isinstance(b_input, int) - ): - msg = f"Expected int, found {type(r_input), type(g_input), type(b_input)}" - raise ValueError(msg) - - if not 0 <= r_input < 256 or not 0 <= g_input < 256 or not 0 <= b_input < 256: - raise ValueError("Expected int of the range 0..255") - - # changing range from 0..255 to 0..1 - r = r_input / 255 - g = g_input / 255 - b = b_input / 255 - - k = 1 - max(r, g, b) - - if k == 1: # pure black - return 0, 0, 0, 100 - - c = round(100 * (1 - r - k) / (1 - k)) - m = round(100 * (1 - g - k) / (1 - k)) - y = round(100 * (1 - b - k) / (1 - k)) - k = round(100 * k) - - return c, m, y, k - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/conversions/rgb_hsv_conversion.py b/conversions/rgb_hsv_conversion.py deleted file mode 100644 index 74b3d33e49e7..000000000000 --- a/conversions/rgb_hsv_conversion.py +++ /dev/null @@ -1,159 +0,0 @@ -""" -The RGB color model is an additive color model in which red, green, and blue light -are added together in various ways to reproduce a broad array of colors. The name -of the model comes from the initials of the three additive primary colors, red, -green, and blue. Meanwhile, the HSV representation models how colors appear under -light. In it, colors are represented using three components: hue, saturation and -(brightness-)value. This file provides functions for converting colors from one -representation to the other. - -(description adapted from https://en.wikipedia.org/wiki/RGB_color_model and -https://en.wikipedia.org/wiki/HSL_and_HSV). -""" - - -def hsv_to_rgb(hue: float, saturation: float, value: float) -> list[int]: - """ - Conversion from the HSV-representation to the RGB-representation. - Expected RGB-values taken from - https://www.rapidtables.com/convert/color/hsv-to-rgb.html - - >>> hsv_to_rgb(0, 0, 0) - [0, 0, 0] - >>> hsv_to_rgb(0, 0, 1) - [255, 255, 255] - >>> hsv_to_rgb(0, 1, 1) - [255, 0, 0] - >>> hsv_to_rgb(60, 1, 1) - [255, 255, 0] - >>> hsv_to_rgb(120, 1, 1) - [0, 255, 0] - >>> hsv_to_rgb(240, 1, 1) - [0, 0, 255] - >>> hsv_to_rgb(300, 1, 1) - [255, 0, 255] - >>> hsv_to_rgb(180, 0.5, 0.5) - [64, 128, 128] - >>> hsv_to_rgb(234, 0.14, 0.88) - [193, 196, 224] - >>> hsv_to_rgb(330, 0.75, 0.5) - [128, 32, 80] - """ - if hue < 0 or hue > 360: - raise Exception("hue should be between 0 and 360") - - if saturation < 0 or saturation > 1: - raise Exception("saturation should be between 0 and 1") - - if value < 0 or value > 1: - raise Exception("value should be between 0 and 1") - - chroma = value * saturation - hue_section = hue / 60 - second_largest_component = chroma * (1 - abs(hue_section % 2 - 1)) - match_value = value - chroma - - if hue_section >= 0 and hue_section <= 1: - red = round(255 * (chroma + match_value)) - green = round(255 * (second_largest_component + match_value)) - blue = round(255 * (match_value)) - elif hue_section > 1 and hue_section <= 2: - red = round(255 * (second_largest_component + match_value)) - green = round(255 * (chroma + match_value)) - blue = round(255 * (match_value)) - elif hue_section > 2 and hue_section <= 3: - red = round(255 * (match_value)) - green = round(255 * (chroma + match_value)) - blue = round(255 * (second_largest_component + match_value)) - elif hue_section > 3 and hue_section <= 4: - red = round(255 * (match_value)) - green = round(255 * (second_largest_component + match_value)) - blue = round(255 * (chroma + match_value)) - elif hue_section > 4 and hue_section <= 5: - red = round(255 * (second_largest_component + match_value)) - green = round(255 * (match_value)) - blue = round(255 * (chroma + match_value)) - else: - red = round(255 * (chroma + match_value)) - green = round(255 * (match_value)) - blue = round(255 * (second_largest_component + match_value)) - - return [red, green, blue] - - -def rgb_to_hsv(red: int, green: int, blue: int) -> list[float]: - """ - Conversion from the RGB-representation to the HSV-representation. - The tested values are the reverse values from the hsv_to_rgb-doctests. - Function "approximately_equal_hsv" is needed because of small deviations due to - rounding for the RGB-values. - - >>> approximately_equal_hsv(rgb_to_hsv(0, 0, 0), [0, 0, 0]) - True - >>> approximately_equal_hsv(rgb_to_hsv(255, 255, 255), [0, 0, 1]) - True - >>> approximately_equal_hsv(rgb_to_hsv(255, 0, 0), [0, 1, 1]) - True - >>> approximately_equal_hsv(rgb_to_hsv(255, 255, 0), [60, 1, 1]) - True - >>> approximately_equal_hsv(rgb_to_hsv(0, 255, 0), [120, 1, 1]) - True - >>> approximately_equal_hsv(rgb_to_hsv(0, 0, 255), [240, 1, 1]) - True - >>> approximately_equal_hsv(rgb_to_hsv(255, 0, 255), [300, 1, 1]) - True - >>> approximately_equal_hsv(rgb_to_hsv(64, 128, 128), [180, 0.5, 0.5]) - True - >>> approximately_equal_hsv(rgb_to_hsv(193, 196, 224), [234, 0.14, 0.88]) - True - >>> approximately_equal_hsv(rgb_to_hsv(128, 32, 80), [330, 0.75, 0.5]) - True - """ - if red < 0 or red > 255: - raise Exception("red should be between 0 and 255") - - if green < 0 or green > 255: - raise Exception("green should be between 0 and 255") - - if blue < 0 or blue > 255: - raise Exception("blue should be between 0 and 255") - - float_red = red / 255 - float_green = green / 255 - float_blue = blue / 255 - value = max(float_red, float_green, float_blue) - chroma = value - min(float_red, float_green, float_blue) - saturation = 0 if value == 0 else chroma / value - - if chroma == 0: - hue = 0.0 - elif value == float_red: - hue = 60 * (0 + (float_green - float_blue) / chroma) - elif value == float_green: - hue = 60 * (2 + (float_blue - float_red) / chroma) - else: - hue = 60 * (4 + (float_red - float_green) / chroma) - - hue = (hue + 360) % 360 - - return [hue, saturation, value] - - -def approximately_equal_hsv(hsv_1: list[float], hsv_2: list[float]) -> bool: - """ - Utility-function to check that two hsv-colors are approximately equal - - >>> approximately_equal_hsv([0, 0, 0], [0, 0, 0]) - True - >>> approximately_equal_hsv([180, 0.5, 0.3], [179.9999, 0.500001, 0.30001]) - True - >>> approximately_equal_hsv([0, 0, 0], [1, 0, 0]) - False - >>> approximately_equal_hsv([180, 0.5, 0.3], [179.9999, 0.6, 0.30001]) - False - """ - check_hue = abs(hsv_1[0] - hsv_2[0]) < 0.2 - check_saturation = abs(hsv_1[1] - hsv_2[1]) < 0.002 - check_value = abs(hsv_1[2] - hsv_2[2]) < 0.002 - - return check_hue and check_saturation and check_value diff --git a/conversions/roman_numerals.py b/conversions/roman_numerals.py deleted file mode 100644 index 75af2ac72882..000000000000 --- a/conversions/roman_numerals.py +++ /dev/null @@ -1,61 +0,0 @@ -ROMAN = [ - (1000, "M"), - (900, "CM"), - (500, "D"), - (400, "CD"), - (100, "C"), - (90, "XC"), - (50, "L"), - (40, "XL"), - (10, "X"), - (9, "IX"), - (5, "V"), - (4, "IV"), - (1, "I"), -] - - -def roman_to_int(roman: str) -> int: - """ - LeetCode No. 13 Roman to Integer - Given a roman numeral, convert it to an integer. - Input is guaranteed to be within the range from 1 to 3999. - https://en.wikipedia.org/wiki/Roman_numerals - >>> tests = {"III": 3, "CLIV": 154, "MIX": 1009, "MMD": 2500, "MMMCMXCIX": 3999} - >>> all(roman_to_int(key) == value for key, value in tests.items()) - True - """ - vals = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} - total = 0 - place = 0 - while place < len(roman): - if (place + 1 < len(roman)) and (vals[roman[place]] < vals[roman[place + 1]]): - total += vals[roman[place + 1]] - vals[roman[place]] - place += 2 - else: - total += vals[roman[place]] - place += 1 - return total - - -def int_to_roman(number: int) -> str: - """ - Given a integer, convert it to an roman numeral. - https://en.wikipedia.org/wiki/Roman_numerals - >>> tests = {"III": 3, "CLIV": 154, "MIX": 1009, "MMD": 2500, "MMMCMXCIX": 3999} - >>> all(int_to_roman(value) == key for key, value in tests.items()) - True - """ - result = [] - for arabic, roman in ROMAN: - (factor, number) = divmod(number, arabic) - result.append(roman * factor) - if number == 0: - break - return "".join(result) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/speed_conversions.py b/conversions/speed_conversions.py deleted file mode 100644 index ba497119d3f5..000000000000 --- a/conversions/speed_conversions.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -Convert speed units - -https://en.wikipedia.org/wiki/Kilometres_per_hour -https://en.wikipedia.org/wiki/Miles_per_hour -https://en.wikipedia.org/wiki/Knot_(unit) -https://en.wikipedia.org/wiki/Metre_per_second -""" - -speed_chart: dict[str, float] = { - "km/h": 1.0, - "m/s": 3.6, - "mph": 1.609344, - "knot": 1.852, -} - -speed_chart_inverse: dict[str, float] = { - "km/h": 1.0, - "m/s": 0.277777778, - "mph": 0.621371192, - "knot": 0.539956803, -} - - -def convert_speed(speed: float, unit_from: str, unit_to: str) -> float: - """ - Convert speed from one unit to another using the speed_chart above. - - "km/h": 1.0, - "m/s": 3.6, - "mph": 1.609344, - "knot": 1.852, - - >>> convert_speed(100, "km/h", "m/s") - 27.778 - >>> convert_speed(100, "km/h", "mph") - 62.137 - >>> convert_speed(100, "km/h", "knot") - 53.996 - >>> convert_speed(100, "m/s", "km/h") - 360.0 - >>> convert_speed(100, "m/s", "mph") - 223.694 - >>> convert_speed(100, "m/s", "knot") - 194.384 - >>> convert_speed(100, "mph", "km/h") - 160.934 - >>> convert_speed(100, "mph", "m/s") - 44.704 - >>> convert_speed(100, "mph", "knot") - 86.898 - >>> convert_speed(100, "knot", "km/h") - 185.2 - >>> convert_speed(100, "knot", "m/s") - 51.444 - >>> convert_speed(100, "knot", "mph") - 115.078 - """ - if unit_to not in speed_chart or unit_from not in speed_chart_inverse: - msg = ( - f"Incorrect 'from_type' or 'to_type' value: {unit_from!r}, {unit_to!r}\n" - f"Valid values are: {', '.join(speed_chart_inverse)}" - ) - raise ValueError(msg) - return round(speed * speed_chart[unit_from] * speed_chart_inverse[unit_to], 3) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/temperature_conversions.py b/conversions/temperature_conversions.py deleted file mode 100644 index dde1d2f0f166..000000000000 --- a/conversions/temperature_conversions.py +++ /dev/null @@ -1,385 +0,0 @@ -"""Convert between different units of temperature""" - - -def celsius_to_fahrenheit(celsius: float, ndigits: int = 2) -> float: - """ - Convert a given value from Celsius to Fahrenheit and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Celsius - Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit - - >>> celsius_to_fahrenheit(273.354, 3) - 524.037 - >>> celsius_to_fahrenheit(273.354, 0) - 524.0 - >>> celsius_to_fahrenheit(-40.0) - -40.0 - >>> celsius_to_fahrenheit(-20.0) - -4.0 - >>> celsius_to_fahrenheit(0) - 32.0 - >>> celsius_to_fahrenheit(20) - 68.0 - >>> celsius_to_fahrenheit("40") - 104.0 - >>> celsius_to_fahrenheit("celsius") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'celsius' - """ - return round((float(celsius) * 9 / 5) + 32, ndigits) - - -def celsius_to_kelvin(celsius: float, ndigits: int = 2) -> float: - """ - Convert a given value from Celsius to Kelvin and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Celsius - Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin - - >>> celsius_to_kelvin(273.354, 3) - 546.504 - >>> celsius_to_kelvin(273.354, 0) - 547.0 - >>> celsius_to_kelvin(0) - 273.15 - >>> celsius_to_kelvin(20.0) - 293.15 - >>> celsius_to_kelvin("40") - 313.15 - >>> celsius_to_kelvin("celsius") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'celsius' - """ - return round(float(celsius) + 273.15, ndigits) - - -def celsius_to_rankine(celsius: float, ndigits: int = 2) -> float: - """ - Convert a given value from Celsius to Rankine and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Celsius - Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale - - >>> celsius_to_rankine(273.354, 3) - 983.707 - >>> celsius_to_rankine(273.354, 0) - 984.0 - >>> celsius_to_rankine(0) - 491.67 - >>> celsius_to_rankine(20.0) - 527.67 - >>> celsius_to_rankine("40") - 563.67 - >>> celsius_to_rankine("celsius") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'celsius' - """ - return round((float(celsius) * 9 / 5) + 491.67, ndigits) - - -def fahrenheit_to_celsius(fahrenheit: float, ndigits: int = 2) -> float: - """ - Convert a given value from Fahrenheit to Celsius and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit - Wikipedia reference: https://en.wikipedia.org/wiki/Celsius - - >>> fahrenheit_to_celsius(273.354, 3) - 134.086 - >>> fahrenheit_to_celsius(273.354, 0) - 134.0 - >>> fahrenheit_to_celsius(0) - -17.78 - >>> fahrenheit_to_celsius(20.0) - -6.67 - >>> fahrenheit_to_celsius(40.0) - 4.44 - >>> fahrenheit_to_celsius(60) - 15.56 - >>> fahrenheit_to_celsius(80) - 26.67 - >>> fahrenheit_to_celsius("100") - 37.78 - >>> fahrenheit_to_celsius("fahrenheit") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'fahrenheit' - """ - return round((float(fahrenheit) - 32) * 5 / 9, ndigits) - - -def fahrenheit_to_kelvin(fahrenheit: float, ndigits: int = 2) -> float: - """ - Convert a given value from Fahrenheit to Kelvin and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit - Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin - - >>> fahrenheit_to_kelvin(273.354, 3) - 407.236 - >>> fahrenheit_to_kelvin(273.354, 0) - 407.0 - >>> fahrenheit_to_kelvin(0) - 255.37 - >>> fahrenheit_to_kelvin(20.0) - 266.48 - >>> fahrenheit_to_kelvin(40.0) - 277.59 - >>> fahrenheit_to_kelvin(60) - 288.71 - >>> fahrenheit_to_kelvin(80) - 299.82 - >>> fahrenheit_to_kelvin("100") - 310.93 - >>> fahrenheit_to_kelvin("fahrenheit") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'fahrenheit' - """ - return round(((float(fahrenheit) - 32) * 5 / 9) + 273.15, ndigits) - - -def fahrenheit_to_rankine(fahrenheit: float, ndigits: int = 2) -> float: - """ - Convert a given value from Fahrenheit to Rankine and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit - Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale - - >>> fahrenheit_to_rankine(273.354, 3) - 733.024 - >>> fahrenheit_to_rankine(273.354, 0) - 733.0 - >>> fahrenheit_to_rankine(0) - 459.67 - >>> fahrenheit_to_rankine(20.0) - 479.67 - >>> fahrenheit_to_rankine(40.0) - 499.67 - >>> fahrenheit_to_rankine(60) - 519.67 - >>> fahrenheit_to_rankine(80) - 539.67 - >>> fahrenheit_to_rankine("100") - 559.67 - >>> fahrenheit_to_rankine("fahrenheit") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'fahrenheit' - """ - return round(float(fahrenheit) + 459.67, ndigits) - - -def kelvin_to_celsius(kelvin: float, ndigits: int = 2) -> float: - """ - Convert a given value from Kelvin to Celsius and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin - Wikipedia reference: https://en.wikipedia.org/wiki/Celsius - - >>> kelvin_to_celsius(273.354, 3) - 0.204 - >>> kelvin_to_celsius(273.354, 0) - 0.0 - >>> kelvin_to_celsius(273.15) - 0.0 - >>> kelvin_to_celsius(300) - 26.85 - >>> kelvin_to_celsius("315.5") - 42.35 - >>> kelvin_to_celsius("kelvin") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'kelvin' - """ - return round(float(kelvin) - 273.15, ndigits) - - -def kelvin_to_fahrenheit(kelvin: float, ndigits: int = 2) -> float: - """ - Convert a given value from Kelvin to Fahrenheit and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin - Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit - - >>> kelvin_to_fahrenheit(273.354, 3) - 32.367 - >>> kelvin_to_fahrenheit(273.354, 0) - 32.0 - >>> kelvin_to_fahrenheit(273.15) - 32.0 - >>> kelvin_to_fahrenheit(300) - 80.33 - >>> kelvin_to_fahrenheit("315.5") - 108.23 - >>> kelvin_to_fahrenheit("kelvin") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'kelvin' - """ - return round(((float(kelvin) - 273.15) * 9 / 5) + 32, ndigits) - - -def kelvin_to_rankine(kelvin: float, ndigits: int = 2) -> float: - """ - Convert a given value from Kelvin to Rankine and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin - Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale - - >>> kelvin_to_rankine(273.354, 3) - 492.037 - >>> kelvin_to_rankine(273.354, 0) - 492.0 - >>> kelvin_to_rankine(0) - 0.0 - >>> kelvin_to_rankine(20.0) - 36.0 - >>> kelvin_to_rankine("40") - 72.0 - >>> kelvin_to_rankine("kelvin") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'kelvin' - """ - return round((float(kelvin) * 9 / 5), ndigits) - - -def rankine_to_celsius(rankine: float, ndigits: int = 2) -> float: - """ - Convert a given value from Rankine to Celsius and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale - Wikipedia reference: https://en.wikipedia.org/wiki/Celsius - - >>> rankine_to_celsius(273.354, 3) - -121.287 - >>> rankine_to_celsius(273.354, 0) - -121.0 - >>> rankine_to_celsius(273.15) - -121.4 - >>> rankine_to_celsius(300) - -106.48 - >>> rankine_to_celsius("315.5") - -97.87 - >>> rankine_to_celsius("rankine") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'rankine' - """ - return round((float(rankine) - 491.67) * 5 / 9, ndigits) - - -def rankine_to_fahrenheit(rankine: float, ndigits: int = 2) -> float: - """ - Convert a given value from Rankine to Fahrenheit and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale - Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit - - >>> rankine_to_fahrenheit(273.15) - -186.52 - >>> rankine_to_fahrenheit(300) - -159.67 - >>> rankine_to_fahrenheit("315.5") - -144.17 - >>> rankine_to_fahrenheit("rankine") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'rankine' - """ - return round(float(rankine) - 459.67, ndigits) - - -def rankine_to_kelvin(rankine: float, ndigits: int = 2) -> float: - """ - Convert a given value from Rankine to Kelvin and round it to 2 decimal places. - Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale - Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin - - >>> rankine_to_kelvin(0) - 0.0 - >>> rankine_to_kelvin(20.0) - 11.11 - >>> rankine_to_kelvin("40") - 22.22 - >>> rankine_to_kelvin("rankine") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'rankine' - """ - return round((float(rankine) * 5 / 9), ndigits) - - -def reaumur_to_kelvin(reaumur: float, ndigits: int = 2) -> float: - """ - Convert a given value from reaumur to Kelvin and round it to 2 decimal places. - Reference:- http://www.csgnetwork.com/temp2conv.html - - >>> reaumur_to_kelvin(0) - 273.15 - >>> reaumur_to_kelvin(20.0) - 298.15 - >>> reaumur_to_kelvin(40) - 323.15 - >>> reaumur_to_kelvin("reaumur") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'reaumur' - """ - return round((float(reaumur) * 1.25 + 273.15), ndigits) - - -def reaumur_to_fahrenheit(reaumur: float, ndigits: int = 2) -> float: - """ - Convert a given value from reaumur to fahrenheit and round it to 2 decimal places. - Reference:- http://www.csgnetwork.com/temp2conv.html - - >>> reaumur_to_fahrenheit(0) - 32.0 - >>> reaumur_to_fahrenheit(20.0) - 77.0 - >>> reaumur_to_fahrenheit(40) - 122.0 - >>> reaumur_to_fahrenheit("reaumur") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'reaumur' - """ - return round((float(reaumur) * 2.25 + 32), ndigits) - - -def reaumur_to_celsius(reaumur: float, ndigits: int = 2) -> float: - """ - Convert a given value from reaumur to celsius and round it to 2 decimal places. - Reference:- http://www.csgnetwork.com/temp2conv.html - - >>> reaumur_to_celsius(0) - 0.0 - >>> reaumur_to_celsius(20.0) - 25.0 - >>> reaumur_to_celsius(40) - 50.0 - >>> reaumur_to_celsius("reaumur") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'reaumur' - """ - return round((float(reaumur) * 1.25), ndigits) - - -def reaumur_to_rankine(reaumur: float, ndigits: int = 2) -> float: - """ - Convert a given value from reaumur to rankine and round it to 2 decimal places. - Reference:- http://www.csgnetwork.com/temp2conv.html - - >>> reaumur_to_rankine(0) - 491.67 - >>> reaumur_to_rankine(20.0) - 536.67 - >>> reaumur_to_rankine(40) - 581.67 - >>> reaumur_to_rankine("reaumur") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'reaumur' - """ - return round((float(reaumur) * 2.25 + 32 + 459.67), ndigits) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/time_conversions.py b/conversions/time_conversions.py deleted file mode 100644 index 8c30f5bc4a45..000000000000 --- a/conversions/time_conversions.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -A unit of time is any particular time interval, used as a standard way of measuring or -expressing duration. The base unit of time in the International System of Units (SI), -and by extension most of the Western world, is the second, defined as about 9 billion -oscillations of the caesium atom. - -https://en.wikipedia.org/wiki/Unit_of_time -""" - -time_chart: dict[str, float] = { - "seconds": 1.0, - "minutes": 60.0, # 1 minute = 60 sec - "hours": 3600.0, # 1 hour = 60 minutes = 3600 seconds - "days": 86400.0, # 1 day = 24 hours = 1440 min = 86400 sec - "weeks": 604800.0, # 1 week=7d=168hr=10080min = 604800 sec - "months": 2629800.0, # Approximate value for a month in seconds - "years": 31557600.0, # Approximate value for a year in seconds -} - -time_chart_inverse: dict[str, float] = { - key: 1 / value for key, value in time_chart.items() -} - - -def convert_time(time_value: float, unit_from: str, unit_to: str) -> float: - """ - Convert time from one unit to another using the time_chart above. - - >>> convert_time(3600, "seconds", "hours") - 1.0 - >>> convert_time(3500, "Seconds", "Hours") - 0.972 - >>> convert_time(1, "DaYs", "hours") - 24.0 - >>> convert_time(120, "minutes", "SeCoNdS") - 7200.0 - >>> convert_time(2, "WEEKS", "days") - 14.0 - >>> convert_time(0.5, "hours", "MINUTES") - 30.0 - >>> convert_time(-3600, "seconds", "hours") - Traceback (most recent call last): - ... - ValueError: 'time_value' must be a non-negative number. - >>> convert_time("Hello", "hours", "minutes") - Traceback (most recent call last): - ... - ValueError: 'time_value' must be a non-negative number. - >>> convert_time([0, 1, 2], "weeks", "days") - Traceback (most recent call last): - ... - ValueError: 'time_value' must be a non-negative number. - >>> convert_time(1, "cool", "century") # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: Invalid unit cool is not in seconds, minutes, hours, days, weeks, ... - >>> convert_time(1, "seconds", "hot") # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: Invalid unit hot is not in seconds, minutes, hours, days, weeks, ... - """ - if not isinstance(time_value, (int, float)) or time_value < 0: - msg = "'time_value' must be a non-negative number." - raise ValueError(msg) - - unit_from = unit_from.lower() - unit_to = unit_to.lower() - if unit_from not in time_chart or unit_to not in time_chart: - invalid_unit = unit_from if unit_from not in time_chart else unit_to - msg = f"Invalid unit {invalid_unit} is not in {', '.join(time_chart)}." - raise ValueError(msg) - - return round( - time_value * time_chart[unit_from] * time_chart_inverse[unit_to], - 3, - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{convert_time(3600,'seconds', 'hours') = :,}") - print(f"{convert_time(360, 'days', 'months') = :,}") - print(f"{convert_time(360, 'months', 'years') = :,}") - print(f"{convert_time(1, 'years', 'seconds') = :,}") diff --git a/conversions/volume_conversions.py b/conversions/volume_conversions.py deleted file mode 100644 index cb240380534b..000000000000 --- a/conversions/volume_conversions.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Conversion of volume units. -Available Units:- Cubic metre,Litre,KiloLitre,Gallon,Cubic yard,Cubic foot,cup -USAGE : --> Import this file into their respective project. --> Use the function length_conversion() for conversion of volume units. --> Parameters : - -> value : The number of from units you want to convert - -> from_type : From which type you want to convert - -> to_type : To which type you want to convert -REFERENCES : --> Wikipedia reference: https://en.wikipedia.org/wiki/Cubic_metre --> Wikipedia reference: https://en.wikipedia.org/wiki/Litre --> Wikipedia reference: https://en.wiktionary.org/wiki/kilolitre --> Wikipedia reference: https://en.wikipedia.org/wiki/Gallon --> Wikipedia reference: https://en.wikipedia.org/wiki/Cubic_yard --> Wikipedia reference: https://en.wikipedia.org/wiki/Cubic_foot --> Wikipedia reference: https://en.wikipedia.org/wiki/Cup_(unit) -""" - -from typing import NamedTuple - - -class FromTo(NamedTuple): - from_factor: float - to_factor: float - - -METRIC_CONVERSION = { - "cubic meter": FromTo(1, 1), - "litre": FromTo(0.001, 1000), - "kilolitre": FromTo(1, 1), - "gallon": FromTo(0.00454, 264.172), - "cubic yard": FromTo(0.76455, 1.30795), - "cubic foot": FromTo(0.028, 35.3147), - "cup": FromTo(0.000236588, 4226.75), -} - - -def volume_conversion(value: float, from_type: str, to_type: str) -> float: - """ - Conversion between volume units. - >>> volume_conversion(4, "cubic meter", "litre") - 4000 - >>> volume_conversion(1, "litre", "gallon") - 0.264172 - >>> volume_conversion(1, "kilolitre", "cubic meter") - 1 - >>> volume_conversion(3, "gallon", "cubic yard") - 0.017814279 - >>> volume_conversion(2, "cubic yard", "litre") - 1529.1 - >>> volume_conversion(4, "cubic foot", "cup") - 473.396 - >>> volume_conversion(1, "cup", "kilolitre") - 0.000236588 - >>> volume_conversion(4, "wrongUnit", "litre") - Traceback (most recent call last): - ... - ValueError: Invalid 'from_type' value: 'wrongUnit' Supported values are: - cubic meter, litre, kilolitre, gallon, cubic yard, cubic foot, cup - """ - if from_type not in METRIC_CONVERSION: - raise ValueError( - f"Invalid 'from_type' value: {from_type!r} Supported values are:\n" - + ", ".join(METRIC_CONVERSION) - ) - if to_type not in METRIC_CONVERSION: - raise ValueError( - f"Invalid 'to_type' value: {to_type!r}. Supported values are:\n" - + ", ".join(METRIC_CONVERSION) - ) - return ( - value - * METRIC_CONVERSION[from_type].from_factor - * METRIC_CONVERSION[to_type].to_factor - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/conversions/weight_conversion.py b/conversions/weight_conversion.py deleted file mode 100644 index 0777aead9f02..000000000000 --- a/conversions/weight_conversion.py +++ /dev/null @@ -1,319 +0,0 @@ -""" -Conversion of weight units. - -__author__ = "Anubhav Solanki" -__license__ = "MIT" -__version__ = "1.1.0" -__maintainer__ = "Anubhav Solanki" -__email__ = "anubhavsolanki0@gmail.com" - -USAGE : --> Import this file into their respective project. --> Use the function weight_conversion() for conversion of weight units. --> Parameters : - -> from_type : From which type you want to convert - -> to_type : To which type you want to convert - -> value : the value which you want to convert - -REFERENCES : - --> Wikipedia reference: https://en.wikipedia.org/wiki/Kilogram --> Wikipedia reference: https://en.wikipedia.org/wiki/Gram --> Wikipedia reference: https://en.wikipedia.org/wiki/Millimetre --> Wikipedia reference: https://en.wikipedia.org/wiki/Tonne --> Wikipedia reference: https://en.wikipedia.org/wiki/Long_ton --> Wikipedia reference: https://en.wikipedia.org/wiki/Short_ton --> Wikipedia reference: https://en.wikipedia.org/wiki/Pound --> Wikipedia reference: https://en.wikipedia.org/wiki/Ounce --> Wikipedia reference: https://en.wikipedia.org/wiki/Fineness#Karat --> Wikipedia reference: https://en.wikipedia.org/wiki/Dalton_(unit) --> Wikipedia reference: https://en.wikipedia.org/wiki/Stone_(unit) -""" - -KILOGRAM_CHART: dict[str, float] = { - "kilogram": 1, - "gram": pow(10, 3), - "milligram": pow(10, 6), - "metric-ton": pow(10, -3), - "long-ton": 0.0009842073, - "short-ton": 0.0011023122, - "pound": 2.2046244202, - "stone": 0.1574731728, - "ounce": 35.273990723, - "carrat": 5000, - "atomic-mass-unit": 6.022136652e26, -} - -WEIGHT_TYPE_CHART: dict[str, float] = { - "kilogram": 1, - "gram": pow(10, -3), - "milligram": pow(10, -6), - "metric-ton": pow(10, 3), - "long-ton": 1016.04608, - "short-ton": 907.184, - "pound": 0.453592, - "stone": 6.35029, - "ounce": 0.0283495, - "carrat": 0.0002, - "atomic-mass-unit": 1.660540199e-27, -} - - -def weight_conversion(from_type: str, to_type: str, value: float) -> float: - """ - Conversion of weight unit with the help of KILOGRAM_CHART - - "kilogram" : 1, - "gram" : pow(10, 3), - "milligram" : pow(10, 6), - "metric-ton" : pow(10, -3), - "long-ton" : 0.0009842073, - "short-ton" : 0.0011023122, - "pound" : 2.2046244202, - "stone": 0.1574731728, - "ounce" : 35.273990723, - "carrat" : 5000, - "atomic-mass-unit" : 6.022136652E+26 - - >>> weight_conversion("kilogram","kilogram",4) - 4 - >>> weight_conversion("kilogram","gram",1) - 1000 - >>> weight_conversion("kilogram","milligram",4) - 4000000 - >>> weight_conversion("kilogram","metric-ton",4) - 0.004 - >>> weight_conversion("kilogram","long-ton",3) - 0.0029526219 - >>> weight_conversion("kilogram","short-ton",1) - 0.0011023122 - >>> weight_conversion("kilogram","pound",4) - 8.8184976808 - >>> weight_conversion("kilogram","stone",5) - 0.7873658640000001 - >>> weight_conversion("kilogram","ounce",4) - 141.095962892 - >>> weight_conversion("kilogram","carrat",3) - 15000 - >>> weight_conversion("kilogram","atomic-mass-unit",1) - 6.022136652e+26 - >>> weight_conversion("gram","kilogram",1) - 0.001 - >>> weight_conversion("gram","gram",3) - 3.0 - >>> weight_conversion("gram","milligram",2) - 2000.0 - >>> weight_conversion("gram","metric-ton",4) - 4e-06 - >>> weight_conversion("gram","long-ton",3) - 2.9526219e-06 - >>> weight_conversion("gram","short-ton",3) - 3.3069366000000003e-06 - >>> weight_conversion("gram","pound",3) - 0.0066138732606 - >>> weight_conversion("gram","stone",4) - 0.0006298926912000001 - >>> weight_conversion("gram","ounce",1) - 0.035273990723 - >>> weight_conversion("gram","carrat",2) - 10.0 - >>> weight_conversion("gram","atomic-mass-unit",1) - 6.022136652e+23 - >>> weight_conversion("milligram","kilogram",1) - 1e-06 - >>> weight_conversion("milligram","gram",2) - 0.002 - >>> weight_conversion("milligram","milligram",3) - 3.0 - >>> weight_conversion("milligram","metric-ton",3) - 3e-09 - >>> weight_conversion("milligram","long-ton",3) - 2.9526219e-09 - >>> weight_conversion("milligram","short-ton",1) - 1.1023122e-09 - >>> weight_conversion("milligram","pound",3) - 6.6138732605999995e-06 - >>> weight_conversion("milligram","ounce",2) - 7.054798144599999e-05 - >>> weight_conversion("milligram","carrat",1) - 0.005 - >>> weight_conversion("milligram","atomic-mass-unit",1) - 6.022136652e+20 - >>> weight_conversion("metric-ton","kilogram",2) - 2000 - >>> weight_conversion("metric-ton","gram",2) - 2000000 - >>> weight_conversion("metric-ton","milligram",3) - 3000000000 - >>> weight_conversion("metric-ton","metric-ton",2) - 2.0 - >>> weight_conversion("metric-ton","long-ton",3) - 2.9526219 - >>> weight_conversion("metric-ton","short-ton",2) - 2.2046244 - >>> weight_conversion("metric-ton","pound",3) - 6613.8732606 - >>> weight_conversion("metric-ton","ounce",4) - 141095.96289199998 - >>> weight_conversion("metric-ton","carrat",4) - 20000000 - >>> weight_conversion("metric-ton","atomic-mass-unit",1) - 6.022136652e+29 - >>> weight_conversion("long-ton","kilogram",4) - 4064.18432 - >>> weight_conversion("long-ton","gram",4) - 4064184.32 - >>> weight_conversion("long-ton","milligram",3) - 3048138240.0 - >>> weight_conversion("long-ton","metric-ton",4) - 4.06418432 - >>> weight_conversion("long-ton","long-ton",3) - 2.999999907217152 - >>> weight_conversion("long-ton","short-ton",1) - 1.119999989746176 - >>> weight_conversion("long-ton","pound",3) - 6720.000000049448 - >>> weight_conversion("long-ton","ounce",1) - 35840.000000060514 - >>> weight_conversion("long-ton","carrat",4) - 20320921.599999998 - >>> weight_conversion("long-ton","atomic-mass-unit",4) - 2.4475073353955697e+30 - >>> weight_conversion("short-ton","kilogram",3) - 2721.5519999999997 - >>> weight_conversion("short-ton","gram",3) - 2721552.0 - >>> weight_conversion("short-ton","milligram",1) - 907184000.0 - >>> weight_conversion("short-ton","metric-ton",4) - 3.628736 - >>> weight_conversion("short-ton","long-ton",3) - 2.6785713457296 - >>> weight_conversion("short-ton","short-ton",3) - 2.9999999725344 - >>> weight_conversion("short-ton","pound",2) - 4000.0000000294335 - >>> weight_conversion("short-ton","ounce",4) - 128000.00000021611 - >>> weight_conversion("short-ton","carrat",4) - 18143680.0 - >>> weight_conversion("short-ton","atomic-mass-unit",1) - 5.463186016507968e+29 - >>> weight_conversion("pound","kilogram",4) - 1.814368 - >>> weight_conversion("pound","gram",2) - 907.184 - >>> weight_conversion("pound","milligram",3) - 1360776.0 - >>> weight_conversion("pound","metric-ton",3) - 0.001360776 - >>> weight_conversion("pound","long-ton",2) - 0.0008928571152432 - >>> weight_conversion("pound","short-ton",1) - 0.0004999999954224 - >>> weight_conversion("pound","pound",3) - 3.0000000000220752 - >>> weight_conversion("pound","ounce",1) - 16.000000000027015 - >>> weight_conversion("pound","carrat",1) - 2267.96 - >>> weight_conversion("pound","atomic-mass-unit",4) - 1.0926372033015936e+27 - >>> weight_conversion("stone","kilogram",5) - 31.751450000000002 - >>> weight_conversion("stone","gram",2) - 12700.58 - >>> weight_conversion("stone","milligram",3) - 19050870.0 - >>> weight_conversion("stone","metric-ton",3) - 0.01905087 - >>> weight_conversion("stone","long-ton",3) - 0.018750005325351003 - >>> weight_conversion("stone","short-ton",3) - 0.021000006421614002 - >>> weight_conversion("stone","pound",2) - 28.00000881870372 - >>> weight_conversion("stone","ounce",1) - 224.00007054835967 - >>> weight_conversion("stone","carrat",2) - 63502.9 - >>> weight_conversion("ounce","kilogram",3) - 0.0850485 - >>> weight_conversion("ounce","gram",3) - 85.0485 - >>> weight_conversion("ounce","milligram",4) - 113398.0 - >>> weight_conversion("ounce","metric-ton",4) - 0.000113398 - >>> weight_conversion("ounce","long-ton",4) - 0.0001116071394054 - >>> weight_conversion("ounce","short-ton",4) - 0.0001249999988556 - >>> weight_conversion("ounce","pound",1) - 0.0625000000004599 - >>> weight_conversion("ounce","ounce",2) - 2.000000000003377 - >>> weight_conversion("ounce","carrat",1) - 141.7475 - >>> weight_conversion("ounce","atomic-mass-unit",1) - 1.70724563015874e+25 - >>> weight_conversion("carrat","kilogram",1) - 0.0002 - >>> weight_conversion("carrat","gram",4) - 0.8 - >>> weight_conversion("carrat","milligram",2) - 400.0 - >>> weight_conversion("carrat","metric-ton",2) - 4.0000000000000003e-07 - >>> weight_conversion("carrat","long-ton",3) - 5.9052438e-07 - >>> weight_conversion("carrat","short-ton",4) - 8.818497600000002e-07 - >>> weight_conversion("carrat","pound",1) - 0.00044092488404000004 - >>> weight_conversion("carrat","ounce",2) - 0.0141095962892 - >>> weight_conversion("carrat","carrat",4) - 4.0 - >>> weight_conversion("carrat","atomic-mass-unit",4) - 4.8177093216e+23 - >>> weight_conversion("atomic-mass-unit","kilogram",4) - 6.642160796e-27 - >>> weight_conversion("atomic-mass-unit","gram",2) - 3.321080398e-24 - >>> weight_conversion("atomic-mass-unit","milligram",2) - 3.3210803980000002e-21 - >>> weight_conversion("atomic-mass-unit","metric-ton",3) - 4.9816205970000004e-30 - >>> weight_conversion("atomic-mass-unit","long-ton",3) - 4.9029473573977584e-30 - >>> weight_conversion("atomic-mass-unit","short-ton",1) - 1.830433719948128e-30 - >>> weight_conversion("atomic-mass-unit","pound",3) - 1.0982602420317504e-26 - >>> weight_conversion("atomic-mass-unit","ounce",2) - 1.1714775914938915e-25 - >>> weight_conversion("atomic-mass-unit","carrat",2) - 1.660540199e-23 - >>> weight_conversion("atomic-mass-unit","atomic-mass-unit",2) - 1.999999998903455 - >>> weight_conversion("slug", "kilogram", 1) - Traceback (most recent call last): - ... - ValueError: Invalid 'from_type' or 'to_type' value: 'slug', 'kilogram' - Supported values are: kilogram, gram, milligram, metric-ton, long-ton, short-ton, \ -pound, stone, ounce, carrat, atomic-mass-unit - """ - if to_type not in KILOGRAM_CHART or from_type not in WEIGHT_TYPE_CHART: - msg = ( - f"Invalid 'from_type' or 'to_type' value: {from_type!r}, {to_type!r}\n" - f"Supported values are: {', '.join(WEIGHT_TYPE_CHART)}" - ) - raise ValueError(msg) - return value * KILOGRAM_CHART[to_type] * WEIGHT_TYPE_CHART[from_type] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/__init__.py b/data_structures/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/arrays/__init__.py b/data_structures/arrays/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/arrays/equilibrium_index_in_array.py b/data_structures/arrays/equilibrium_index_in_array.py deleted file mode 100644 index 0717a45d9f4b..000000000000 --- a/data_structures/arrays/equilibrium_index_in_array.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Find the Equilibrium Index of an Array. -Reference: https://www.geeksforgeeks.org/equilibrium-index-of-an-array/ - -Python doctest can be run with the following command: -python -m doctest -v equilibrium_index_in_array.py - -Given a sequence arr[] of size n, this function returns -an equilibrium index (if any) or -1 if no equilibrium index exists. - -The equilibrium index of an array is an index such that the sum of -elements at lower indexes is equal to the sum of elements at higher indexes. - - - -Example Input: -arr = [-7, 1, 5, 2, -4, 3, 0] -Output: 3 - -""" - - -def equilibrium_index(arr: list[int]) -> int: - """ - Find the equilibrium index of an array. - - Args: - arr (list[int]): The input array of integers. - - Returns: - int: The equilibrium index or -1 if no equilibrium index exists. - - Examples: - >>> equilibrium_index([-7, 1, 5, 2, -4, 3, 0]) - 3 - >>> equilibrium_index([1, 2, 3, 4, 5]) - -1 - >>> equilibrium_index([1, 1, 1, 1, 1]) - 2 - >>> equilibrium_index([2, 4, 6, 8, 10, 3]) - -1 - """ - total_sum = sum(arr) - left_sum = 0 - - for i, value in enumerate(arr): - total_sum -= value - if left_sum == total_sum: - return i - left_sum += value - - return -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/arrays/find_triplets_with_0_sum.py b/data_structures/arrays/find_triplets_with_0_sum.py deleted file mode 100644 index 52e521906873..000000000000 --- a/data_structures/arrays/find_triplets_with_0_sum.py +++ /dev/null @@ -1,87 +0,0 @@ -from itertools import combinations - - -def find_triplets_with_0_sum(nums: list[int]) -> list[list[int]]: - """ - Given a list of integers, return elements a, b, c such that a + b + c = 0. - Args: - nums: list of integers - Returns: - list of lists of integers where sum(each_list) == 0 - Examples: - >>> find_triplets_with_0_sum([-1, 0, 1, 2, -1, -4]) - [[-1, -1, 2], [-1, 0, 1]] - >>> find_triplets_with_0_sum([]) - [] - >>> find_triplets_with_0_sum([0, 0, 0]) - [[0, 0, 0]] - >>> find_triplets_with_0_sum([1, 2, 3, 0, -1, -2, -3]) - [[-3, 0, 3], [-3, 1, 2], [-2, -1, 3], [-2, 0, 2], [-1, 0, 1]] - """ - return [ - list(x) - for x in sorted({abc for abc in combinations(sorted(nums), 3) if not sum(abc)}) - ] - - -def find_triplets_with_0_sum_hashing(arr: list[int]) -> list[list[int]]: - """ - Function for finding the triplets with a given sum in the array using hashing. - - Given a list of integers, return elements a, b, c such that a + b + c = 0. - - Args: - nums: list of integers - Returns: - list of lists of integers where sum(each_list) == 0 - Examples: - >>> find_triplets_with_0_sum_hashing([-1, 0, 1, 2, -1, -4]) - [[-1, 0, 1], [-1, -1, 2]] - >>> find_triplets_with_0_sum_hashing([]) - [] - >>> find_triplets_with_0_sum_hashing([0, 0, 0]) - [[0, 0, 0]] - >>> find_triplets_with_0_sum_hashing([1, 2, 3, 0, -1, -2, -3]) - [[-1, 0, 1], [-3, 1, 2], [-2, 0, 2], [-2, -1, 3], [-3, 0, 3]] - - Time complexity: O(N^2) - Auxiliary Space: O(N) - - """ - target_sum = 0 - - # Initialize the final output array with blank. - output_arr = [] - - # Set the initial element as arr[i]. - for index, item in enumerate(arr[:-2]): - # to store second elements that can complement the final sum. - set_initialize = set() - - # current sum needed for reaching the target sum - current_sum = target_sum - item - - # Traverse the subarray arr[i+1:]. - for other_item in arr[index + 1 :]: - # required value for the second element - required_value = current_sum - other_item - - # Verify if the desired value exists in the set. - if required_value in set_initialize: - # finding triplet elements combination. - combination_array = sorted([item, other_item, required_value]) - if combination_array not in output_arr: - output_arr.append(combination_array) - - # Include the current element in the set - # for subsequent complement verification. - set_initialize.add(other_item) - - # Return all the triplet combinations. - return output_arr - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/arrays/index_2d_array_in_1d.py b/data_structures/arrays/index_2d_array_in_1d.py deleted file mode 100644 index 27a9fa5f9121..000000000000 --- a/data_structures/arrays/index_2d_array_in_1d.py +++ /dev/null @@ -1,105 +0,0 @@ -""" -Retrieves the value of an 0-indexed 1D index from a 2D array. -There are two ways to retrieve value(s): - -1. Index2DArrayIterator(matrix) -> Iterator[int] -This iterator allows you to iterate through a 2D array by passing in the matrix and -calling next(your_iterator). You can also use the iterator in a loop. -Examples: -list(Index2DArrayIterator(matrix)) -set(Index2DArrayIterator(matrix)) -tuple(Index2DArrayIterator(matrix)) -sum(Index2DArrayIterator(matrix)) --5 in Index2DArrayIterator(matrix) - -2. index_2d_array_in_1d(array: list[int], index: int) -> int -This function allows you to provide a 2D array and a 0-indexed 1D integer index, -and retrieves the integer value at that index. - -Python doctests can be run using this command: -python3 -m doctest -v index_2d_array_in_1d.py -""" - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Index2DArrayIterator: - matrix: list[list[int]] - - def __iter__(self) -> Iterator[int]: - """ - >>> tuple(Index2DArrayIterator([[5], [-523], [-1], [34], [0]])) - (5, -523, -1, 34, 0) - >>> tuple(Index2DArrayIterator([[5, -523, -1], [34, 0]])) - (5, -523, -1, 34, 0) - >>> tuple(Index2DArrayIterator([[5, -523, -1, 34, 0]])) - (5, -523, -1, 34, 0) - >>> t = Index2DArrayIterator([[5, 2, 25], [23, 14, 5], [324, -1, 0]]) - >>> tuple(t) - (5, 2, 25, 23, 14, 5, 324, -1, 0) - >>> list(t) - [5, 2, 25, 23, 14, 5, 324, -1, 0] - >>> sorted(t) - [-1, 0, 2, 5, 5, 14, 23, 25, 324] - >>> tuple(t)[3] - 23 - >>> sum(t) - 397 - >>> -1 in t - True - >>> t = iter(Index2DArrayIterator([[5], [-523], [-1], [34], [0]])) - >>> next(t) - 5 - >>> next(t) - -523 - """ - for row in self.matrix: - yield from row - - -def index_2d_array_in_1d(array: list[list[int]], index: int) -> int: - """ - Retrieves the value of the one-dimensional index from a two-dimensional array. - - Args: - array: A 2D array of integers where all rows are the same size and all - columns are the same size. - index: A 1D index. - - Returns: - int: The 0-indexed value of the 1D index in the array. - - Examples: - >>> index_2d_array_in_1d([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], 5) - 5 - >>> index_2d_array_in_1d([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], -1) - Traceback (most recent call last): - ... - ValueError: index out of range - >>> index_2d_array_in_1d([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], 12) - Traceback (most recent call last): - ... - ValueError: index out of range - >>> index_2d_array_in_1d([[]], 0) - Traceback (most recent call last): - ... - ValueError: no items in array - """ - rows = len(array) - cols = len(array[0]) - - if rows == 0 or cols == 0: - raise ValueError("no items in array") - - if index < 0 or index >= rows * cols: - raise ValueError("index out of range") - - return array[index // cols][index % cols] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/arrays/kth_largest_element.py b/data_structures/arrays/kth_largest_element.py deleted file mode 100644 index f25cc68e9b72..000000000000 --- a/data_structures/arrays/kth_largest_element.py +++ /dev/null @@ -1,117 +0,0 @@ -""" -Given an array of integers and an integer k, find the kth largest element in the array. - -https://stackoverflow.com/questions/251781 -""" - - -def partition(arr: list[int], low: int, high: int) -> int: - """ - Partitions list based on the pivot element. - - This function rearranges the elements in the input list 'elements' such that - all elements greater than or equal to the chosen pivot are on the right side - of the pivot, and all elements smaller than the pivot are on the left side. - - Args: - arr: The list to be partitioned - low: The lower index of the list - high: The higher index of the list - - Returns: - int: The index of pivot element after partitioning - - Examples: - >>> partition([3, 1, 4, 5, 9, 2, 6, 5, 3, 5], 0, 9) - 4 - >>> partition([7, 1, 4, 5, 9, 2, 6, 5, 8], 0, 8) - 1 - >>> partition(['apple', 'cherry', 'date', 'banana'], 0, 3) - 2 - >>> partition([3.1, 1.2, 5.6, 4.7], 0, 3) - 1 - """ - pivot = arr[high] - i = low - 1 - for j in range(low, high): - if arr[j] >= pivot: - i += 1 - arr[i], arr[j] = arr[j], arr[i] - arr[i + 1], arr[high] = arr[high], arr[i + 1] - return i + 1 - - -def kth_largest_element(arr: list[int], position: int) -> int: - """ - Finds the kth largest element in a list. - Should deliver similar results to: - ```python - def kth_largest_element(arr, position): - return sorted(arr)[-position] - ``` - - Args: - nums: The list of numbers. - k: The position of the desired kth largest element. - - Returns: - int: The kth largest element. - - Examples: - >>> kth_largest_element([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5], 3) - 5 - >>> kth_largest_element([2, 5, 6, 1, 9, 3, 8, 4, 7, 3, 5], 1) - 9 - >>> kth_largest_element([2, 5, 6, 1, 9, 3, 8, 4, 7, 3, 5], -2) - Traceback (most recent call last): - ... - ValueError: Invalid value of 'position' - >>> kth_largest_element([9, 1, 3, 6, 7, 9, 8, 4, 2, 4, 9], 110) - Traceback (most recent call last): - ... - ValueError: Invalid value of 'position' - >>> kth_largest_element([1, 2, 4, 3, 5, 9, 7, 6, 5, 9, 3], 0) - Traceback (most recent call last): - ... - ValueError: Invalid value of 'position' - >>> kth_largest_element(['apple', 'cherry', 'date', 'banana'], 2) - 'cherry' - >>> kth_largest_element([3.1, 1.2, 5.6, 4.7,7.9,5,0], 2) - 5.6 - >>> kth_largest_element([-2, -5, -4, -1], 1) - -1 - >>> kth_largest_element([], 1) - -1 - >>> kth_largest_element([3.1, 1.2, 5.6, 4.7, 7.9, 5, 0], 1.5) - Traceback (most recent call last): - ... - ValueError: The position should be an integer - >>> kth_largest_element((4, 6, 1, 2), 4) - Traceback (most recent call last): - ... - TypeError: 'tuple' object does not support item assignment - """ - if not arr: - return -1 - if not isinstance(position, int): - raise ValueError("The position should be an integer") - if not 1 <= position <= len(arr): - raise ValueError("Invalid value of 'position'") - low, high = 0, len(arr) - 1 - while low <= high: - if low > len(arr) - 1 or high < 0: - return -1 - pivot_index = partition(arr, low, high) - if pivot_index == position - 1: - return arr[pivot_index] - elif pivot_index > position - 1: - high = pivot_index - 1 - else: - low = pivot_index + 1 - return -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/arrays/median_two_array.py b/data_structures/arrays/median_two_array.py deleted file mode 100644 index 972b0ee44201..000000000000 --- a/data_structures/arrays/median_two_array.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -https://www.enjoyalgorithms.com/blog/median-of-two-sorted-arrays -""" - - -def find_median_sorted_arrays(nums1: list[int], nums2: list[int]) -> float: - """ - Find the median of two arrays. - - Args: - nums1: The first array. - nums2: The second array. - - Returns: - The median of the two arrays. - - Examples: - >>> find_median_sorted_arrays([1, 3], [2]) - 2.0 - - >>> find_median_sorted_arrays([1, 2], [3, 4]) - 2.5 - - >>> find_median_sorted_arrays([0, 0], [0, 0]) - 0.0 - - >>> find_median_sorted_arrays([], []) - Traceback (most recent call last): - ... - ValueError: Both input arrays are empty. - - >>> find_median_sorted_arrays([], [1]) - 1.0 - - >>> find_median_sorted_arrays([-1000], [1000]) - 0.0 - - >>> find_median_sorted_arrays([-1.1, -2.2], [-3.3, -4.4]) - -2.75 - """ - if not nums1 and not nums2: - raise ValueError("Both input arrays are empty.") - - # Merge the arrays into a single sorted array. - merged = sorted(nums1 + nums2) - total = len(merged) - - if total % 2 == 1: # If the total number of elements is odd - return float(merged[total // 2]) # then return the middle element - - # If the total number of elements is even, calculate - # the average of the two middle elements as the median. - middle1 = merged[total // 2 - 1] - middle2 = merged[total // 2] - return (float(middle1) + float(middle2)) / 2.0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/arrays/monotonic_array.py b/data_structures/arrays/monotonic_array.py deleted file mode 100644 index c50a21530814..000000000000 --- a/data_structures/arrays/monotonic_array.py +++ /dev/null @@ -1,23 +0,0 @@ -# https://leetcode.com/problems/monotonic-array/ -def is_monotonic(nums: list[int]) -> bool: - """ - Check if a list is monotonic. - - >>> is_monotonic([1, 2, 2, 3]) - True - >>> is_monotonic([6, 5, 4, 4]) - True - >>> is_monotonic([1, 3, 2]) - False - """ - return all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)) or all( - nums[i] >= nums[i + 1] for i in range(len(nums) - 1) - ) - - -# Test the function with your examples -if __name__ == "__main__": - # Test the function with your examples - print(is_monotonic([1, 2, 2, 3])) # Output: True - print(is_monotonic([6, 5, 4, 4])) # Output: True - print(is_monotonic([1, 3, 2])) # Output: False diff --git a/data_structures/arrays/pairs_with_given_sum.py b/data_structures/arrays/pairs_with_given_sum.py deleted file mode 100644 index b27bd78e1e0f..000000000000 --- a/data_structures/arrays/pairs_with_given_sum.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python3 - -""" -Given an array of integers and an integer req_sum, find the number of pairs of array -elements whose sum is equal to req_sum. - -https://practice.geeksforgeeks.org/problems/count-pairs-with-given-sum5022/0 -""" - -from itertools import combinations - - -def pairs_with_sum(arr: list, req_sum: int) -> int: - """ - Return the no. of pairs with sum "sum" - >>> pairs_with_sum([1, 5, 7, 1], 6) - 2 - >>> pairs_with_sum([1, 1, 1, 1, 1, 1, 1, 1], 2) - 28 - >>> pairs_with_sum([1, 7, 6, 2, 5, 4, 3, 1, 9, 8], 7) - 4 - """ - return len([1 for a, b in combinations(arr, 2) if a + b == req_sum]) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/arrays/permutations.py b/data_structures/arrays/permutations.py deleted file mode 100644 index 4906dd5c2ae1..000000000000 --- a/data_structures/arrays/permutations.py +++ /dev/null @@ -1,48 +0,0 @@ -def permute_recursive(nums: list[int]) -> list[list[int]]: - """ - Return all permutations. - - >>> permute_recursive([1, 2, 3]) - [[3, 2, 1], [2, 3, 1], [1, 3, 2], [3, 1, 2], [2, 1, 3], [1, 2, 3]] - """ - result: list[list[int]] = [] - if len(nums) == 0: - return [[]] - for _ in range(len(nums)): - n = nums.pop(0) - permutations = permute_recursive(nums.copy()) - for perm in permutations: - perm.append(n) - result.extend(permutations) - nums.append(n) - return result - - -def permute_backtrack(nums: list[int]) -> list[list[int]]: - """ - Return all permutations of the given list. - - >>> permute_backtrack([1, 2, 3]) - [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]] - """ - - def backtrack(start: int) -> None: - if start == len(nums) - 1: - output.append(nums[:]) - else: - for i in range(start, len(nums)): - nums[start], nums[i] = nums[i], nums[start] - backtrack(start + 1) - nums[start], nums[i] = nums[i], nums[start] # backtrack - - output: list[list[int]] = [] - backtrack(0) - return output - - -if __name__ == "__main__": - import doctest - - result = permute_backtrack([1, 2, 3]) - print(result) - doctest.testmod() diff --git a/data_structures/arrays/prefix_sum.py b/data_structures/arrays/prefix_sum.py deleted file mode 100644 index 2243a5308937..000000000000 --- a/data_structures/arrays/prefix_sum.py +++ /dev/null @@ -1,78 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : November 3, 2022 - -Implement the class of prefix sum with useful functions based on it. - -""" - - -class PrefixSum: - def __init__(self, array: list[int]) -> None: - len_array = len(array) - self.prefix_sum = [0] * len_array - - if len_array > 0: - self.prefix_sum[0] = array[0] - - for i in range(1, len_array): - self.prefix_sum[i] = self.prefix_sum[i - 1] + array[i] - - def get_sum(self, start: int, end: int) -> int: - """ - The function returns the sum of array from the start to the end indexes. - Runtime : O(1) - Space: O(1) - - >>> PrefixSum([1,2,3]).get_sum(0, 2) - 6 - >>> PrefixSum([1,2,3]).get_sum(1, 2) - 5 - >>> PrefixSum([1,2,3]).get_sum(2, 2) - 3 - >>> PrefixSum([1,2,3]).get_sum(2, 3) - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - if start == 0: - return self.prefix_sum[end] - - return self.prefix_sum[end] - self.prefix_sum[start - 1] - - def contains_sum(self, target_sum: int) -> bool: - """ - The function returns True if array contains the target_sum, - False otherwise. - - Runtime : O(n) - Space: O(n) - - >>> PrefixSum([1,2,3]).contains_sum(6) - True - >>> PrefixSum([1,2,3]).contains_sum(5) - True - >>> PrefixSum([1,2,3]).contains_sum(3) - True - >>> PrefixSum([1,2,3]).contains_sum(4) - False - >>> PrefixSum([1,2,3]).contains_sum(7) - False - >>> PrefixSum([1,-2,3]).contains_sum(2) - True - """ - - sums = {0} - for sum_item in self.prefix_sum: - if sum_item - target_sum in sums: - return True - - sums.add(sum_item) - - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/arrays/product_sum.py b/data_structures/arrays/product_sum.py deleted file mode 100644 index 4fb906f369ab..000000000000 --- a/data_structures/arrays/product_sum.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -Calculate the Product Sum from a Special Array. -reference: https://dev.to/sfrasica/algorithms-product-sum-from-an-array-dc6 - -Python doctests can be run with the following command: -python -m doctest -v product_sum.py - -Calculate the product sum of a "special" array which can contain integers or nested -arrays. The product sum is obtained by adding all elements and multiplying by their -respective depths. - -For example, in the array [x, y], the product sum is (x + y). In the array [x, [y, z]], -the product sum is x + 2 * (y + z). In the array [x, [y, [z]]], -the product sum is x + 2 * (y + 3z). - -Example Input: -[5, 2, [-7, 1], 3, [6, [-13, 8], 4]] -Output: 12 - -""" - - -def product_sum(arr: list[int | list], depth: int) -> int: - """ - Recursively calculates the product sum of an array. - - The product sum of an array is defined as the sum of its elements multiplied by - their respective depths. If an element is a list, its product sum is calculated - recursively by multiplying the sum of its elements with its depth plus one. - - Args: - arr: The array of integers and nested lists. - depth: The current depth level. - - Returns: - int: The product sum of the array. - - Examples: - >>> product_sum([1, 2, 3], 1) - 6 - >>> product_sum([-1, 2, [-3, 4]], 2) - 8 - >>> product_sum([1, 2, 3], -1) - -6 - >>> product_sum([1, 2, 3], 0) - 0 - >>> product_sum([1, 2, 3], 7) - 42 - >>> product_sum((1, 2, 3), 7) - 42 - >>> product_sum({1, 2, 3}, 7) - 42 - >>> product_sum([1, -1], 1) - 0 - >>> product_sum([1, -2], 1) - -1 - >>> product_sum([-3.5, [1, [0.5]]], 1) - 1.5 - - """ - total_sum = 0 - for ele in arr: - total_sum += product_sum(ele, depth + 1) if isinstance(ele, list) else ele - return total_sum * depth - - -def product_sum_array(array: list[int | list]) -> int: - """ - Calculates the product sum of an array. - - Args: - array (List[Union[int, List]]): The array of integers and nested lists. - - Returns: - int: The product sum of the array. - - Examples: - >>> product_sum_array([1, 2, 3]) - 6 - >>> product_sum_array([1, [2, 3]]) - 11 - >>> product_sum_array([1, [2, [3, 4]]]) - 47 - >>> product_sum_array([0]) - 0 - >>> product_sum_array([-3.5, [1, [0.5]]]) - 1.5 - >>> product_sum_array([1, -2]) - -1 - - """ - return product_sum(array, 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/arrays/sparse_table.py b/data_structures/arrays/sparse_table.py deleted file mode 100644 index 4606fe908607..000000000000 --- a/data_structures/arrays/sparse_table.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -Sparse table is a data structure that allows answering range queries on -a static number list, i.e. the elements do not change throughout all the queries. - -The implementation below will solve the problem of Range Minimum Query: -Finding the minimum value of a subset [L..R] of a static number list. - -Overall time complexity: O(nlogn) -Overall space complexity: O(nlogn) - -Wikipedia link: https://en.wikipedia.org/wiki/Range_minimum_query -""" - -from math import log2 - - -def build_sparse_table(number_list: list[int]) -> list[list[int]]: - """ - Precompute range minimum queries with power of two length and store the precomputed - values in a table. - - >>> build_sparse_table([8, 1, 0, 3, 4, 9, 3]) - [[8, 1, 0, 3, 4, 9, 3], [1, 0, 0, 3, 4, 3, 0], [0, 0, 0, 3, 0, 0, 0]] - >>> build_sparse_table([3, 1, 9]) - [[3, 1, 9], [1, 1, 0]] - >>> build_sparse_table([]) - Traceback (most recent call last): - ... - ValueError: empty number list not allowed - """ - if not number_list: - raise ValueError("empty number list not allowed") - - length = len(number_list) - # Initialise sparse_table -- sparse_table[j][i] represents the minimum value of the - # subset of length (2 ** j) of number_list, starting from index i. - - # smallest power of 2 subset length that fully covers number_list - row = int(log2(length)) + 1 - sparse_table = [[0 for i in range(length)] for j in range(row)] - - # minimum of subset of length 1 is that value itself - for i, value in enumerate(number_list): - sparse_table[0][i] = value - j = 1 - - # compute the minimum value for all intervals with size (2 ** j) - while (1 << j) <= length: - i = 0 - # while subset starting from i still have at least (2 ** j) elements - while (i + (1 << j) - 1) < length: - # split range [i, i + 2 ** j] and find minimum of 2 halves - sparse_table[j][i] = min( - sparse_table[j - 1][i + (1 << (j - 1))], sparse_table[j - 1][i] - ) - i += 1 - j += 1 - return sparse_table - - -def query(sparse_table: list[list[int]], left_bound: int, right_bound: int) -> int: - """ - >>> query(build_sparse_table([8, 1, 0, 3, 4, 9, 3]), 0, 4) - 0 - >>> query(build_sparse_table([8, 1, 0, 3, 4, 9, 3]), 4, 6) - 3 - >>> query(build_sparse_table([3, 1, 9]), 2, 2) - 9 - >>> query(build_sparse_table([3, 1, 9]), 0, 1) - 1 - >>> query(build_sparse_table([8, 1, 0, 3, 4, 9, 3]), 0, 11) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> query(build_sparse_table([]), 0, 0) - Traceback (most recent call last): - ... - ValueError: empty number list not allowed - """ - if left_bound < 0 or right_bound >= len(sparse_table[0]): - raise IndexError("list index out of range") - - # highest subset length of power of 2 that is within range [left_bound, right_bound] - j = int(log2(right_bound - left_bound + 1)) - - # minimum of 2 overlapping smaller subsets: - # [left_bound, left_bound + 2 ** j - 1] and [right_bound - 2 ** j + 1, right_bound] - return min(sparse_table[j][right_bound - (1 << j) + 1], sparse_table[j][left_bound]) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"{query(build_sparse_table([3, 1, 9]), 2, 2) = }") diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py deleted file mode 100644 index a8157a520c97..000000000000 --- a/data_structures/arrays/sudoku_solver.py +++ /dev/null @@ -1,220 +0,0 @@ -""" -Please do not modify this file! It is published at https://norvig.com/sudoku.html with -only minimal changes to work with modern versions of Python. If you have improvements, -please make them in a separate file. -""" - -import random -import time - - -def cross(items_a, items_b): - "Cross product of elements in A and elements in B." - return [a + b for a in items_a for b in items_b] - - -digits = "123456789" -rows = "ABCDEFGHI" -cols = digits -squares = cross(rows, cols) -unitlist = ( - [cross(rows, c) for c in cols] - + [cross(r, cols) for r in rows] - + [cross(rs, cs) for rs in ("ABC", "DEF", "GHI") for cs in ("123", "456", "789")] -) -units = {s: [u for u in unitlist if s in u] for s in squares} -peers = {s: set(sum(units[s], [])) - {s} for s in squares} # noqa: RUF017 - - -def test(): - "A set of unit tests." - assert len(squares) == 81 - assert len(unitlist) == 27 - assert all(len(units[s]) == 3 for s in squares) - assert all(len(peers[s]) == 20 for s in squares) - assert units["C2"] == [ - ["A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2"], - ["C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9"], - ["A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3"], - ] - # fmt: off - assert peers["C2"] == { - "A2", "B2", "D2", "E2", "F2", "G2", "H2", "I2", "C1", "C3", - "C4", "C5", "C6", "C7", "C8", "C9", "A1", "A3", "B1", "B3" - } - # fmt: on - print("All tests pass.") - - -def parse_grid(grid): - """Convert grid to a dict of possible values, {square: digits}, or - return False if a contradiction is detected.""" - ## To start, every square can be any digit; then assign values from the grid. - values = {s: digits for s in squares} - for s, d in grid_values(grid).items(): - if d in digits and not assign(values, s, d): - return False ## (Fail if we can't assign d to square s.) - return values - - -def grid_values(grid): - "Convert grid into a dict of {square: char} with '0' or '.' for empties." - chars = [c for c in grid if c in digits or c in "0."] - assert len(chars) == 81 - return dict(zip(squares, chars)) - - -def assign(values, s, d): - """Eliminate all the other values (except d) from values[s] and propagate. - Return values, except return False if a contradiction is detected.""" - other_values = values[s].replace(d, "") - if all(eliminate(values, s, d2) for d2 in other_values): - return values - else: - return False - - -def eliminate(values, s, d): - """Eliminate d from values[s]; propagate when values or places <= 2. - Return values, except return False if a contradiction is detected.""" - if d not in values[s]: - return values ## Already eliminated - values[s] = values[s].replace(d, "") - ## (1) If a square s is reduced to one value d2, then eliminate d2 from the peers. - if len(values[s]) == 0: - return False ## Contradiction: removed last value - elif len(values[s]) == 1: - d2 = values[s] - if not all(eliminate(values, s2, d2) for s2 in peers[s]): - return False - ## (2) If a unit u is reduced to only one place for a value d, then put it there. - for u in units[s]: - dplaces = [s for s in u if d in values[s]] - if len(dplaces) == 0: - return False ## Contradiction: no place for this value - # d can only be in one place in unit; assign it there - elif len(dplaces) == 1 and not assign(values, dplaces[0], d): - return False - return values - - -def display(values): - "Display these values as a 2-D grid." - width = 1 + max(len(values[s]) for s in squares) - line = "+".join(["-" * (width * 3)] * 3) - for r in rows: - print( - "".join( - values[r + c].center(width) + ("|" if c in "36" else "") for c in cols - ) - ) - if r in "CF": - print(line) - print() - - -def solve(grid): - return search(parse_grid(grid)) - - -def some(seq): - "Return some element of seq that is true." - for e in seq: - if e: - return e - return False - - -def search(values): - "Using depth-first search and propagation, try all possible values." - if values is False: - return False ## Failed earlier - if all(len(values[s]) == 1 for s in squares): - return values ## Solved! - ## Chose the unfilled square s with the fewest possibilities - n, s = min((len(values[s]), s) for s in squares if len(values[s]) > 1) - return some(search(assign(values.copy(), s, d)) for d in values[s]) - - -def solve_all(grids, name="", showif=0.0): - """Attempt to solve a sequence of grids. Report results. - When showif is a number of seconds, display puzzles that take longer. - When showif is None, don't display any puzzles.""" - - def time_solve(grid): - start = time.monotonic() - values = solve(grid) - t = time.monotonic() - start - ## Display puzzles that take long enough - if showif is not None and t > showif: - display(grid_values(grid)) - if values: - display(values) - print(f"({t:.5f} seconds)\n") - return (t, solved(values)) - - times, results = zip(*[time_solve(grid) for grid in grids]) - if (n := len(grids)) > 1: - print( - "Solved %d of %d %s puzzles (avg %.2f secs (%d Hz), max %.2f secs)." - % (sum(results), n, name, sum(times) / n, n / sum(times), max(times)) - ) - - -def solved(values): - "A puzzle is solved if each unit is a permutation of the digits 1 to 9." - - def unitsolved(unit): - return {values[s] for s in unit} == set(digits) - - return values is not False and all(unitsolved(unit) for unit in unitlist) - - -def from_file(filename, sep="\n"): - "Parse a file into a list of strings, separated by sep." - return open(filename).read().strip().split(sep) # noqa: SIM115 - - -def random_puzzle(assignments=17): - """Make a random puzzle with N or more assignments. Restart on contradictions. - Note the resulting puzzle is not guaranteed to be solvable, but empirically - about 99.8% of them are solvable. Some have multiple solutions.""" - values = {s: digits for s in squares} - for s in shuffled(squares): - if not assign(values, s, random.choice(values[s])): - break - ds = [values[s] for s in squares if len(values[s]) == 1] - if len(ds) >= assignments and len(set(ds)) >= 8: - return "".join(values[s] if len(values[s]) == 1 else "." for s in squares) - return random_puzzle(assignments) ## Give up and make a new puzzle - - -def shuffled(seq): - "Return a randomly shuffled copy of the input sequence." - seq = list(seq) - random.shuffle(seq) - return seq - - -grid1 = ( - "003020600900305001001806400008102900700000008006708200002609500800203009005010300" -) -grid2 = ( - "4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4......" -) -hard1 = ( - ".....6....59.....82....8....45........3........6..3.54...325..6.................." -) - -if __name__ == "__main__": - test() - # solve_all(from_file("easy50.txt", '========'), "easy", None) - # solve_all(from_file("top95.txt"), "hard", None) - # solve_all(from_file("hardest.txt"), "hardest", None) - solve_all([random_puzzle() for _ in range(99)], "random", 100.0) - for puzzle in (grid1, grid2): # , hard1): # Takes 22 sec to solve on my M1 Mac. - display(parse_grid(puzzle)) - start = time.monotonic() - solve(puzzle) - t = time.monotonic() - start - print(f"Solved: {t:.5f} sec") diff --git a/data_structures/binary_tree/README.md b/data_structures/binary_tree/README.md deleted file mode 100644 index ebe727b6589d..000000000000 --- a/data_structures/binary_tree/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# Binary Tree Traversal - -## Overview - -The combination of binary trees being data structures and traversal being an algorithm relates to classic problems, either directly or indirectly. - -> If you can grasp the traversal of binary trees, the traversal of other complicated trees will be easy for you. - -The following are some common ways to traverse trees. - -- Depth First Traversals (DFS): In-order, Pre-order, Post-order - -- Level Order Traversal or Breadth First or Traversal (BFS) - -There are applications for both DFS and BFS. - -Stack can be used to simplify the process of DFS traversal. Besides, since tree is a recursive data structure, recursion and stack are two key points for DFS. - -Graph for DFS: - - - -The key point of BFS is how to determine whether the traversal of each level has been completed. The answer is to use a variable as a flag to represent the end of the traversal of current level. - -## Pre-order Traversal - -The traversal order of pre-order traversal is `root-left-right`. - -Algorithm Pre-order - -1. Visit the root node and push it into a stack. - -2. Pop a node from the stack, and push its right and left child node into the stack respectively. - -3. Repeat step 2. - -Conclusion: This problem involves the classic recursive data structure (i.e. a binary tree), and the algorithm above demonstrates how a simplified solution can be reached by using a stack. - -If you look at the bigger picture, you'll find that the process of traversal is as followed. `Visit the left subtrees respectively from top to bottom, and visit the right subtrees respectively from bottom to top`. If we are to implement it from this perspective, things will be somewhat different. For the `top to bottom` part we can simply use recursion, and for the `bottom to top` part we can turn to stack. - -## In-order Traversal - -The traversal order of in-order traversal is `left-root-right`. - -So the root node is not printed first. Things are getting a bit complicated here. - -Algorithm In-order - -1. Visit the root and push it into a stack. - -2. If there is a left child node, push it into the stack. Repeat this process until a leaf node reached. - - > At this point the root node and all the left nodes are in the stack. - -3. Start popping nodes from the stack. If a node has a right child node, push the child node into the stack. Repeat step 2. - -It's worth pointing out that the in-order traversal of a binary search tree (BST) is a sorted array, which is helpful for coming up simplified solutions for some problems. - -## Post-order Traversal - -The traversal order of post-order traversal is `left-right-root`. - -This one is a bit of a challenge. It deserves the `hard` tag of LeetCode. - -In this case, the root node is printed not as the first but the last one. A cunning way to do it is to: - -Record whether the current node has been visited. If 1) it's a leaf node or 2) both its left and right subtrees have been traversed, then it can be popped from the stack. - -As for `1) it's a leaf node`, you can easily tell whether a node is a leaf if both its left and right are `null`. - -As for `2) both its left and right subtrees have been traversed`, we only need a variable to record whether a node has been visited or not. In the worst case, we need to record the status for every single node and the space complexity is `O(n)`. But if you come to think about it, as we are using a stack and start printing the result from the leaf nodes, it makes sense that we only record the status for the current node popping from the stack, reducing the space complexity to `O(1)`. - -## Level Order Traversal - -The key point of level order traversal is how do we know whether the traversal of each level is done. The answer is that we use a variable as a flag representing the end of the traversal of the current level. - - - -Algorithm Level-order - -1. Visit the root node, put it in a FIFO queue, put in the queue a special flag (we are using `null` here). - -2. Dequeue a node. - -3. If the node equals `null`, it means that all nodes of the current level have been visited. If the queue is empty, we do nothing. Or else we put in another `null`. - -4. If the node is not `null`, meaning the traversal of current level has not finished yet, we enqueue its left subtree and right subtree respectively. - -## Bi-color marking - -We know that there is a tri-color marking in garbage collection algorithm, which works as described below. - -- The white color represents "not visited". - -- The gray color represents "not all child nodes visited". - -- The black color represents "all child nodes visited". - -Enlightened by tri-color marking, a bi-color marking method can be invented to solve all three traversal problems with one solution. - -The core idea is as follow. - -- Use a color to mark whether a node has been visited or not. Nodes yet to be visited are marked as white and visited nodes are marked as gray. - -- If we are visiting a white node, turn it into gray, and push its right child node, itself, and it's left child node into the stack respectively. - -- If we are visiting a gray node, print it. - -Implementation of pre-order and post-order traversal algorithms can be easily done by changing the order of pushing the child nodes into the stack. - -Reference: [LeetCode](https://github.com/azl397985856/leetcode/blob/master/thinkings/binary-tree-traversal.en.md) diff --git a/data_structures/binary_tree/__init__.py b/data_structures/binary_tree/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/binary_tree/avl_tree.py b/data_structures/binary_tree/avl_tree.py deleted file mode 100644 index 9fca7237404c..000000000000 --- a/data_structures/binary_tree/avl_tree.py +++ /dev/null @@ -1,345 +0,0 @@ -""" -Implementation of an auto-balanced binary tree! -For doctests run following command: -python3 -m doctest -v avl_tree.py -For testing run: -python avl_tree.py -""" - -from __future__ import annotations - -import math -import random -from typing import Any - - -class MyQueue: - def __init__(self) -> None: - self.data: list[Any] = [] - self.head: int = 0 - self.tail: int = 0 - - def is_empty(self) -> bool: - return self.head == self.tail - - def push(self, data: Any) -> None: - self.data.append(data) - self.tail = self.tail + 1 - - def pop(self) -> Any: - ret = self.data[self.head] - self.head = self.head + 1 - return ret - - def count(self) -> int: - return self.tail - self.head - - def print_queue(self) -> None: - print(self.data) - print("**************") - print(self.data[self.head : self.tail]) - - -class MyNode: - def __init__(self, data: Any) -> None: - self.data = data - self.left: MyNode | None = None - self.right: MyNode | None = None - self.height: int = 1 - - def get_data(self) -> Any: - return self.data - - def get_left(self) -> MyNode | None: - return self.left - - def get_right(self) -> MyNode | None: - return self.right - - def get_height(self) -> int: - return self.height - - def set_data(self, data: Any) -> None: - self.data = data - - def set_left(self, node: MyNode | None) -> None: - self.left = node - - def set_right(self, node: MyNode | None) -> None: - self.right = node - - def set_height(self, height: int) -> None: - self.height = height - - -def get_height(node: MyNode | None) -> int: - if node is None: - return 0 - return node.get_height() - - -def my_max(a: int, b: int) -> int: - if a > b: - return a - return b - - -def right_rotation(node: MyNode) -> MyNode: - r""" - A B - / \ / \ - B C Bl A - / \ --> / / \ - Bl Br UB Br C - / - UB - UB = unbalanced node - """ - print("left rotation node:", node.get_data()) - ret = node.get_left() - assert ret is not None - node.set_left(ret.get_right()) - ret.set_right(node) - h1 = my_max(get_height(node.get_right()), get_height(node.get_left())) + 1 - node.set_height(h1) - h2 = my_max(get_height(ret.get_right()), get_height(ret.get_left())) + 1 - ret.set_height(h2) - return ret - - -def left_rotation(node: MyNode) -> MyNode: - """ - a mirror symmetry rotation of the left_rotation - """ - print("right rotation node:", node.get_data()) - ret = node.get_right() - assert ret is not None - node.set_right(ret.get_left()) - ret.set_left(node) - h1 = my_max(get_height(node.get_right()), get_height(node.get_left())) + 1 - node.set_height(h1) - h2 = my_max(get_height(ret.get_right()), get_height(ret.get_left())) + 1 - ret.set_height(h2) - return ret - - -def lr_rotation(node: MyNode) -> MyNode: - r""" - A A Br - / \ / \ / \ - B C LR Br C RR B A - / \ --> / \ --> / / \ - Bl Br B UB Bl UB C - \ / - UB Bl - RR = right_rotation LR = left_rotation - """ - left_child = node.get_left() - assert left_child is not None - node.set_left(left_rotation(left_child)) - return right_rotation(node) - - -def rl_rotation(node: MyNode) -> MyNode: - right_child = node.get_right() - assert right_child is not None - node.set_right(right_rotation(right_child)) - return left_rotation(node) - - -def insert_node(node: MyNode | None, data: Any) -> MyNode | None: - if node is None: - return MyNode(data) - if data < node.get_data(): - node.set_left(insert_node(node.get_left(), data)) - if ( - get_height(node.get_left()) - get_height(node.get_right()) == 2 - ): # an unbalance detected - left_child = node.get_left() - assert left_child is not None - if ( - data < left_child.get_data() - ): # new node is the left child of the left child - node = right_rotation(node) - else: - node = lr_rotation(node) - else: - node.set_right(insert_node(node.get_right(), data)) - if get_height(node.get_right()) - get_height(node.get_left()) == 2: - right_child = node.get_right() - assert right_child is not None - if data < right_child.get_data(): - node = rl_rotation(node) - else: - node = left_rotation(node) - h1 = my_max(get_height(node.get_right()), get_height(node.get_left())) + 1 - node.set_height(h1) - return node - - -def get_right_most(root: MyNode) -> Any: - while True: - right_child = root.get_right() - if right_child is None: - break - root = right_child - return root.get_data() - - -def get_left_most(root: MyNode) -> Any: - while True: - left_child = root.get_left() - if left_child is None: - break - root = left_child - return root.get_data() - - -def del_node(root: MyNode, data: Any) -> MyNode | None: - left_child = root.get_left() - right_child = root.get_right() - if root.get_data() == data: - if left_child is not None and right_child is not None: - temp_data = get_left_most(right_child) - root.set_data(temp_data) - root.set_right(del_node(right_child, temp_data)) - elif left_child is not None: - root = left_child - elif right_child is not None: - root = right_child - else: - return None - elif root.get_data() > data: - if left_child is None: - print("No such data") - return root - else: - root.set_left(del_node(left_child, data)) - # root.get_data() < data - elif right_child is None: - return root - else: - root.set_right(del_node(right_child, data)) - - if get_height(right_child) - get_height(left_child) == 2: - assert right_child is not None - if get_height(right_child.get_right()) > get_height(right_child.get_left()): - root = left_rotation(root) - else: - root = rl_rotation(root) - elif get_height(right_child) - get_height(left_child) == -2: - assert left_child is not None - if get_height(left_child.get_left()) > get_height(left_child.get_right()): - root = right_rotation(root) - else: - root = lr_rotation(root) - height = my_max(get_height(root.get_right()), get_height(root.get_left())) + 1 - root.set_height(height) - return root - - -class AVLtree: - """ - An AVL tree doctest - Examples: - >>> t = AVLtree() - >>> t.insert(4) - insert:4 - >>> print(str(t).replace(" \\n","\\n")) - 4 - ************************************* - >>> t.insert(2) - insert:2 - >>> print(str(t).replace(" \\n","\\n").replace(" \\n","\\n")) - 4 - 2 * - ************************************* - >>> t.insert(3) - insert:3 - right rotation node: 2 - left rotation node: 4 - >>> print(str(t).replace(" \\n","\\n").replace(" \\n","\\n")) - 3 - 2 4 - ************************************* - >>> t.get_height() - 2 - >>> t.del_node(3) - delete:3 - >>> print(str(t).replace(" \\n","\\n").replace(" \\n","\\n")) - 4 - 2 * - ************************************* - """ - - def __init__(self) -> None: - self.root: MyNode | None = None - - def get_height(self) -> int: - return get_height(self.root) - - def insert(self, data: Any) -> None: - print("insert:" + str(data)) - self.root = insert_node(self.root, data) - - def del_node(self, data: Any) -> None: - print("delete:" + str(data)) - if self.root is None: - print("Tree is empty!") - return - self.root = del_node(self.root, data) - - def __str__( - self, - ) -> str: # a level traversale, gives a more intuitive look on the tree - output = "" - q = MyQueue() - q.push(self.root) - layer = self.get_height() - if layer == 0: - return output - cnt = 0 - while not q.is_empty(): - node = q.pop() - space = " " * int(math.pow(2, layer - 1)) - output += space - if node is None: - output += "*" - q.push(None) - q.push(None) - else: - output += str(node.get_data()) - q.push(node.get_left()) - q.push(node.get_right()) - output += space - cnt = cnt + 1 - for i in range(100): - if cnt == math.pow(2, i) - 1: - layer = layer - 1 - if layer == 0: - output += "\n*************************************" - return output - output += "\n" - break - output += "\n*************************************" - return output - - -def _test() -> None: - import doctest - - doctest.testmod() - - -if __name__ == "__main__": - _test() - t = AVLtree() - lst = list(range(10)) - random.shuffle(lst) - for i in lst: - t.insert(i) - print(str(t)) - random.shuffle(lst) - for i in lst: - t.del_node(i) - print(str(t)) diff --git a/data_structures/binary_tree/basic_binary_tree.py b/data_structures/binary_tree/basic_binary_tree.py deleted file mode 100644 index 9d4c1bdbb57a..000000000000 --- a/data_structures/binary_tree/basic_binary_tree.py +++ /dev/null @@ -1,110 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - data: int - left: Node | None = None - right: Node | None = None - - def __iter__(self) -> Iterator[int]: - if self.left: - yield from self.left - yield self.data - if self.right: - yield from self.right - - def __len__(self) -> int: - return sum(1 for _ in self) - - def is_full(self) -> bool: - if not self or (not self.left and not self.right): - return True - if self.left and self.right: - return self.left.is_full() and self.right.is_full() - return False - - -@dataclass -class BinaryTree: - root: Node - - def __iter__(self) -> Iterator[int]: - return iter(self.root) - - def __len__(self) -> int: - return len(self.root) - - @classmethod - def small_tree(cls) -> BinaryTree: - """ - Return a small binary tree with 3 nodes. - >>> binary_tree = BinaryTree.small_tree() - >>> len(binary_tree) - 3 - >>> list(binary_tree) - [1, 2, 3] - """ - binary_tree = BinaryTree(Node(2)) - binary_tree.root.left = Node(1) - binary_tree.root.right = Node(3) - return binary_tree - - @classmethod - def medium_tree(cls) -> BinaryTree: - """ - Return a medium binary tree with 3 nodes. - >>> binary_tree = BinaryTree.medium_tree() - >>> len(binary_tree) - 7 - >>> list(binary_tree) - [1, 2, 3, 4, 5, 6, 7] - """ - binary_tree = BinaryTree(Node(4)) - binary_tree.root.left = two = Node(2) - two.left = Node(1) - two.right = Node(3) - binary_tree.root.right = five = Node(5) - five.right = six = Node(6) - six.right = Node(7) - return binary_tree - - def depth(self) -> int: - """ - Returns the depth of the tree - - >>> BinaryTree(Node(1)).depth() - 1 - >>> BinaryTree.small_tree().depth() - 2 - >>> BinaryTree.medium_tree().depth() - 4 - """ - return self._depth(self.root) - - def _depth(self, node: Node | None) -> int: - if not node: - return 0 - return 1 + max(self._depth(node.left), self._depth(node.right)) - - def is_full(self) -> bool: - """ - Returns True if the tree is full - - >>> BinaryTree(Node(1)).is_full() - True - >>> BinaryTree.small_tree().is_full() - True - >>> BinaryTree.medium_tree().is_full() - False - """ - return self.root.is_full() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/binary_search_tree.py b/data_structures/binary_tree/binary_search_tree.py deleted file mode 100644 index 3f214d0113a4..000000000000 --- a/data_structures/binary_tree/binary_search_tree.py +++ /dev/null @@ -1,356 +0,0 @@ -r""" -A binary search Tree - -Example - 8 - / \ - 3 10 - / \ \ - 1 6 14 - / \ / - 4 7 13 - ->>> t = BinarySearchTree().insert(8, 3, 6, 1, 10, 14, 13, 4, 7) ->>> print(" ".join(repr(i.value) for i in t.traversal_tree())) -8 3 1 6 4 7 10 14 13 - ->>> tuple(i.value for i in t.traversal_tree(inorder)) -(1, 3, 4, 6, 7, 8, 10, 13, 14) ->>> tuple(t) -(1, 3, 4, 6, 7, 8, 10, 13, 14) ->>> t.find_kth_smallest(3, t.root) -4 ->>> tuple(t)[3-1] -4 - ->>> print(" ".join(repr(i.value) for i in t.traversal_tree(postorder))) -1 4 7 6 3 13 14 10 8 ->>> t.remove(20) -Traceback (most recent call last): - ... -ValueError: Value 20 not found ->>> BinarySearchTree().search(6) -Traceback (most recent call last): - ... -IndexError: Warning: Tree is empty! please use another. - -Other example: - ->>> testlist = (8, 3, 6, 1, 10, 14, 13, 4, 7) ->>> t = BinarySearchTree() ->>> for i in testlist: -... t.insert(i) # doctest: +ELLIPSIS -BinarySearchTree(root=8) -BinarySearchTree(root={'8': (3, None)}) -BinarySearchTree(root={'8': ({'3': (None, 6)}, None)}) -BinarySearchTree(root={'8': ({'3': (1, 6)}, None)}) -BinarySearchTree(root={'8': ({'3': (1, 6)}, 10)}) -BinarySearchTree(root={'8': ({'3': (1, 6)}, {'10': (None, 14)})}) -BinarySearchTree(root={'8': ({'3': (1, 6)}, {'10': (None, {'14': (13, None)})})}) -BinarySearchTree(root={'8': ({'3': (1, {'6': (4, None)})}, {'10': (None, {'14': ... -BinarySearchTree(root={'8': ({'3': (1, {'6': (4, 7)})}, {'10': (None, {'14': (13, ... - -Prints all the elements of the list in order traversal ->>> print(t) -{'8': ({'3': (1, {'6': (4, 7)})}, {'10': (None, {'14': (13, None)})})} - -Test existence ->>> t.search(6) is not None -True ->>> 6 in t -True ->>> t.search(-1) is not None -False ->>> -1 in t -False - ->>> t.search(6).is_right -True ->>> t.search(1).is_right -False - ->>> t.get_max().value -14 ->>> max(t) -14 ->>> t.get_min().value -1 ->>> min(t) -1 ->>> t.empty() -False ->>> not t -False ->>> for i in testlist: -... t.remove(i) ->>> t.empty() -True ->>> not t -True -""" - -from __future__ import annotations - -from collections.abc import Iterable, Iterator -from dataclasses import dataclass -from typing import Any, Self - - -@dataclass -class Node: - value: int - left: Node | None = None - right: Node | None = None - parent: Node | None = None # Added in order to delete a node easier - - def __iter__(self) -> Iterator[int]: - """ - >>> list(Node(0)) - [0] - >>> list(Node(0, Node(-1), Node(1), None)) - [-1, 0, 1] - """ - yield from self.left or [] - yield self.value - yield from self.right or [] - - def __repr__(self) -> str: - from pprint import pformat - - if self.left is None and self.right is None: - return str(self.value) - return pformat({f"{self.value}": (self.left, self.right)}, indent=1) - - @property - def is_right(self) -> bool: - return bool(self.parent and self is self.parent.right) - - -@dataclass -class BinarySearchTree: - root: Node | None = None - - def __bool__(self) -> bool: - return bool(self.root) - - def __iter__(self) -> Iterator[int]: - yield from self.root or [] - - def __str__(self) -> str: - """ - Return a string of all the Nodes using in order traversal - """ - return str(self.root) - - def __reassign_nodes(self, node: Node, new_children: Node | None) -> None: - if new_children is not None: # reset its kids - new_children.parent = node.parent - if node.parent is not None: # reset its parent - if node.is_right: # If it is the right child - node.parent.right = new_children - else: - node.parent.left = new_children - else: - self.root = new_children - - def empty(self) -> bool: - """ - Returns True if the tree does not have any element(s). - False if the tree has element(s). - - >>> BinarySearchTree().empty() - True - >>> BinarySearchTree().insert(1).empty() - False - >>> BinarySearchTree().insert(8, 3, 6, 1, 10, 14, 13, 4, 7).empty() - False - """ - return not self.root - - def __insert(self, value) -> None: - """ - Insert a new node in Binary Search Tree with value label - """ - new_node = Node(value) # create a new Node - if self.empty(): # if Tree is empty - self.root = new_node # set its root - else: # Tree is not empty - parent_node = self.root # from root - if parent_node is None: - return - while True: # While we don't get to a leaf - if value < parent_node.value: # We go left - if parent_node.left is None: - parent_node.left = new_node # We insert the new node in a leaf - break - else: - parent_node = parent_node.left - elif parent_node.right is None: - parent_node.right = new_node - break - else: - parent_node = parent_node.right - new_node.parent = parent_node - - def insert(self, *values) -> Self: - for value in values: - self.__insert(value) - return self - - def search(self, value) -> Node | None: - """ - >>> tree = BinarySearchTree().insert(10, 20, 30, 40, 50) - >>> tree.search(10) - {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})} - >>> tree.search(20) - {'20': (None, {'30': (None, {'40': (None, 50)})})} - >>> tree.search(30) - {'30': (None, {'40': (None, 50)})} - >>> tree.search(40) - {'40': (None, 50)} - >>> tree.search(50) - 50 - >>> tree.search(5) is None # element not present - True - >>> tree.search(0) is None # element not present - True - >>> tree.search(-5) is None # element not present - True - >>> BinarySearchTree().search(10) - Traceback (most recent call last): - ... - IndexError: Warning: Tree is empty! please use another. - """ - - if self.empty(): - raise IndexError("Warning: Tree is empty! please use another.") - else: - node = self.root - # use lazy evaluation here to avoid NoneType Attribute error - while node is not None and node.value is not value: - node = node.left if value < node.value else node.right - return node - - def get_max(self, node: Node | None = None) -> Node | None: - """ - We go deep on the right branch - - >>> BinarySearchTree().insert(10, 20, 30, 40, 50).get_max() - 50 - >>> BinarySearchTree().insert(-5, -1, 0.1, -0.3, -4.5).get_max() - {'0.1': (-0.3, None)} - >>> BinarySearchTree().insert(1, 78.3, 30, 74.0, 1).get_max() - {'78.3': ({'30': (1, 74.0)}, None)} - >>> BinarySearchTree().insert(1, 783, 30, 740, 1).get_max() - {'783': ({'30': (1, 740)}, None)} - """ - if node is None: - if self.root is None: - return None - node = self.root - - if not self.empty(): - while node.right is not None: - node = node.right - return node - - def get_min(self, node: Node | None = None) -> Node | None: - """ - We go deep on the left branch - - >>> BinarySearchTree().insert(10, 20, 30, 40, 50).get_min() - {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})} - >>> BinarySearchTree().insert(-5, -1, 0, -0.3, -4.5).get_min() - {'-5': (None, {'-1': (-4.5, {'0': (-0.3, None)})})} - >>> BinarySearchTree().insert(1, 78.3, 30, 74.0, 1).get_min() - {'1': (None, {'78.3': ({'30': (1, 74.0)}, None)})} - >>> BinarySearchTree().insert(1, 783, 30, 740, 1).get_min() - {'1': (None, {'783': ({'30': (1, 740)}, None)})} - """ - if node is None: - node = self.root - if self.root is None: - return None - if not self.empty(): - node = self.root - while node.left is not None: - node = node.left - return node - - def remove(self, value: int) -> None: - # Look for the node with that label - node = self.search(value) - if node is None: - msg = f"Value {value} not found" - raise ValueError(msg) - - if node.left is None and node.right is None: # If it has no children - self.__reassign_nodes(node, None) - elif node.left is None: # Has only right children - self.__reassign_nodes(node, node.right) - elif node.right is None: # Has only left children - self.__reassign_nodes(node, node.left) - else: - predecessor = self.get_max( - node.left - ) # Gets the max value of the left branch - self.remove(predecessor.value) # type: ignore[union-attr] - node.value = ( - predecessor.value # type: ignore[union-attr] - ) # Assigns the value to the node to delete and keep tree structure - - def preorder_traverse(self, node: Node | None) -> Iterable: - if node is not None: - yield node # Preorder Traversal - yield from self.preorder_traverse(node.left) - yield from self.preorder_traverse(node.right) - - def traversal_tree(self, traversal_function=None) -> Any: - """ - This function traversal the tree. - You can pass a function to traversal the tree as needed by client code - """ - if traversal_function is None: - return self.preorder_traverse(self.root) - else: - return traversal_function(self.root) - - def inorder(self, arr: list, node: Node | None) -> None: - """Perform an inorder traversal and append values of the nodes to - a list named arr""" - if node: - self.inorder(arr, node.left) - arr.append(node.value) - self.inorder(arr, node.right) - - def find_kth_smallest(self, k: int, node: Node) -> int: - """Return the kth smallest element in a binary search tree""" - arr: list[int] = [] - self.inorder(arr, node) # append all values to list using inorder traversal - return arr[k - 1] - - -def inorder(curr_node: Node | None) -> list[Node]: - """ - inorder (left, self, right) - """ - node_list = [] - if curr_node is not None: - node_list = [*inorder(curr_node.left), curr_node, *inorder(curr_node.right)] - return node_list - - -def postorder(curr_node: Node | None) -> list[Node]: - """ - postOrder (left, right, self) - """ - node_list = [] - if curr_node is not None: - node_list = postorder(curr_node.left) + postorder(curr_node.right) + [curr_node] - return node_list - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) diff --git a/data_structures/binary_tree/binary_search_tree_recursive.py b/data_structures/binary_tree/binary_search_tree_recursive.py deleted file mode 100644 index d94ac5253360..000000000000 --- a/data_structures/binary_tree/binary_search_tree_recursive.py +++ /dev/null @@ -1,641 +0,0 @@ -""" -This is a python3 implementation of binary search tree using recursion - -To run tests: -python -m unittest binary_search_tree_recursive.py - -To run an example: -python binary_search_tree_recursive.py -""" - -from __future__ import annotations - -import unittest -from collections.abc import Iterator - -import pytest - - -class Node: - def __init__(self, label: int, parent: Node | None) -> None: - self.label = label - self.parent = parent - self.left: Node | None = None - self.right: Node | None = None - - -class BinarySearchTree: - def __init__(self) -> None: - self.root: Node | None = None - - def empty(self) -> None: - """ - Empties the tree - - >>> t = BinarySearchTree() - >>> assert t.root is None - >>> t.put(8) - >>> assert t.root is not None - """ - self.root = None - - def is_empty(self) -> bool: - """ - Checks if the tree is empty - - >>> t = BinarySearchTree() - >>> t.is_empty() - True - >>> t.put(8) - >>> t.is_empty() - False - """ - return self.root is None - - def put(self, label: int) -> None: - """ - Put a new node in the tree - - >>> t = BinarySearchTree() - >>> t.put(8) - >>> assert t.root.parent is None - >>> assert t.root.label == 8 - - >>> t.put(10) - >>> assert t.root.right.parent == t.root - >>> assert t.root.right.label == 10 - - >>> t.put(3) - >>> assert t.root.left.parent == t.root - >>> assert t.root.left.label == 3 - """ - self.root = self._put(self.root, label) - - def _put(self, node: Node | None, label: int, parent: Node | None = None) -> Node: - if node is None: - node = Node(label, parent) - elif label < node.label: - node.left = self._put(node.left, label, node) - elif label > node.label: - node.right = self._put(node.right, label, node) - else: - msg = f"Node with label {label} already exists" - raise ValueError(msg) - - return node - - def search(self, label: int) -> Node: - """ - Searches a node in the tree - - >>> t = BinarySearchTree() - >>> t.put(8) - >>> t.put(10) - >>> node = t.search(8) - >>> assert node.label == 8 - - >>> node = t.search(3) - Traceback (most recent call last): - ... - ValueError: Node with label 3 does not exist - """ - return self._search(self.root, label) - - def _search(self, node: Node | None, label: int) -> Node: - if node is None: - msg = f"Node with label {label} does not exist" - raise ValueError(msg) - elif label < node.label: - node = self._search(node.left, label) - elif label > node.label: - node = self._search(node.right, label) - - return node - - def remove(self, label: int) -> None: - """ - Removes a node in the tree - - >>> t = BinarySearchTree() - >>> t.put(8) - >>> t.put(10) - >>> t.remove(8) - >>> assert t.root.label == 10 - - >>> t.remove(3) - Traceback (most recent call last): - ... - ValueError: Node with label 3 does not exist - """ - node = self.search(label) - if node.right and node.left: - lowest_node = self._get_lowest_node(node.right) - lowest_node.left = node.left - lowest_node.right = node.right - node.left.parent = lowest_node - if node.right: - node.right.parent = lowest_node - self._reassign_nodes(node, lowest_node) - elif not node.right and node.left: - self._reassign_nodes(node, node.left) - elif node.right and not node.left: - self._reassign_nodes(node, node.right) - else: - self._reassign_nodes(node, None) - - def _reassign_nodes(self, node: Node, new_children: Node | None) -> None: - if new_children: - new_children.parent = node.parent - - if node.parent: - if node.parent.right == node: - node.parent.right = new_children - else: - node.parent.left = new_children - else: - self.root = new_children - - def _get_lowest_node(self, node: Node) -> Node: - if node.left: - lowest_node = self._get_lowest_node(node.left) - else: - lowest_node = node - self._reassign_nodes(node, node.right) - - return lowest_node - - def exists(self, label: int) -> bool: - """ - Checks if a node exists in the tree - - >>> t = BinarySearchTree() - >>> t.put(8) - >>> t.put(10) - >>> t.exists(8) - True - - >>> t.exists(3) - False - """ - try: - self.search(label) - return True - except ValueError: - return False - - def get_max_label(self) -> int: - """ - Gets the max label inserted in the tree - - >>> t = BinarySearchTree() - >>> t.get_max_label() - Traceback (most recent call last): - ... - ValueError: Binary search tree is empty - - >>> t.put(8) - >>> t.put(10) - >>> t.get_max_label() - 10 - """ - if self.root is None: - raise ValueError("Binary search tree is empty") - - node = self.root - while node.right is not None: - node = node.right - - return node.label - - def get_min_label(self) -> int: - """ - Gets the min label inserted in the tree - - >>> t = BinarySearchTree() - >>> t.get_min_label() - Traceback (most recent call last): - ... - ValueError: Binary search tree is empty - - >>> t.put(8) - >>> t.put(10) - >>> t.get_min_label() - 8 - """ - if self.root is None: - raise ValueError("Binary search tree is empty") - - node = self.root - while node.left is not None: - node = node.left - - return node.label - - def inorder_traversal(self) -> Iterator[Node]: - """ - Return the inorder traversal of the tree - - >>> t = BinarySearchTree() - >>> [i.label for i in t.inorder_traversal()] - [] - - >>> t.put(8) - >>> t.put(10) - >>> t.put(9) - >>> [i.label for i in t.inorder_traversal()] - [8, 9, 10] - """ - return self._inorder_traversal(self.root) - - def _inorder_traversal(self, node: Node | None) -> Iterator[Node]: - if node is not None: - yield from self._inorder_traversal(node.left) - yield node - yield from self._inorder_traversal(node.right) - - def preorder_traversal(self) -> Iterator[Node]: - """ - Return the preorder traversal of the tree - - >>> t = BinarySearchTree() - >>> [i.label for i in t.preorder_traversal()] - [] - - >>> t.put(8) - >>> t.put(10) - >>> t.put(9) - >>> [i.label for i in t.preorder_traversal()] - [8, 10, 9] - """ - return self._preorder_traversal(self.root) - - def _preorder_traversal(self, node: Node | None) -> Iterator[Node]: - if node is not None: - yield node - yield from self._preorder_traversal(node.left) - yield from self._preorder_traversal(node.right) - - -class BinarySearchTreeTest(unittest.TestCase): - @staticmethod - def _get_binary_search_tree() -> BinarySearchTree: - r""" - 8 - / \ - 3 10 - / \ \ - 1 6 14 - / \ / - 4 7 13 - \ - 5 - """ - t = BinarySearchTree() - t.put(8) - t.put(3) - t.put(6) - t.put(1) - t.put(10) - t.put(14) - t.put(13) - t.put(4) - t.put(7) - t.put(5) - - return t - - def test_put(self) -> None: - t = BinarySearchTree() - assert t.is_empty() - - t.put(8) - r""" - 8 - """ - assert t.root is not None - assert t.root.parent is None - assert t.root.label == 8 - - t.put(10) - r""" - 8 - \ - 10 - """ - assert t.root.right is not None - assert t.root.right.parent == t.root - assert t.root.right.label == 10 - - t.put(3) - r""" - 8 - / \ - 3 10 - """ - assert t.root.left is not None - assert t.root.left.parent == t.root - assert t.root.left.label == 3 - - t.put(6) - r""" - 8 - / \ - 3 10 - \ - 6 - """ - assert t.root.left.right is not None - assert t.root.left.right.parent == t.root.left - assert t.root.left.right.label == 6 - - t.put(1) - r""" - 8 - / \ - 3 10 - / \ - 1 6 - """ - assert t.root.left.left is not None - assert t.root.left.left.parent == t.root.left - assert t.root.left.left.label == 1 - - with pytest.raises(ValueError): - t.put(1) - - def test_search(self) -> None: - t = self._get_binary_search_tree() - - node = t.search(6) - assert node.label == 6 - - node = t.search(13) - assert node.label == 13 - - with pytest.raises(ValueError): - t.search(2) - - def test_remove(self) -> None: - t = self._get_binary_search_tree() - - t.remove(13) - r""" - 8 - / \ - 3 10 - / \ \ - 1 6 14 - / \ - 4 7 - \ - 5 - """ - assert t.root is not None - assert t.root.right is not None - assert t.root.right.right is not None - assert t.root.right.right.right is None - assert t.root.right.right.left is None - - t.remove(7) - r""" - 8 - / \ - 3 10 - / \ \ - 1 6 14 - / - 4 - \ - 5 - """ - assert t.root.left is not None - assert t.root.left.right is not None - assert t.root.left.right.left is not None - assert t.root.left.right.right is None - assert t.root.left.right.left.label == 4 - - t.remove(6) - r""" - 8 - / \ - 3 10 - / \ \ - 1 4 14 - \ - 5 - """ - assert t.root.left.left is not None - assert t.root.left.right.right is not None - assert t.root.left.left.label == 1 - assert t.root.left.right.label == 4 - assert t.root.left.right.right.label == 5 - assert t.root.left.right.left is None - assert t.root.left.left.parent == t.root.left - assert t.root.left.right.parent == t.root.left - - t.remove(3) - r""" - 8 - / \ - 4 10 - / \ \ - 1 5 14 - """ - assert t.root is not None - assert t.root.left.label == 4 - assert t.root.left.right.label == 5 - assert t.root.left.left.label == 1 - assert t.root.left.parent == t.root - assert t.root.left.left.parent == t.root.left - assert t.root.left.right.parent == t.root.left - - t.remove(4) - r""" - 8 - / \ - 5 10 - / \ - 1 14 - """ - assert t.root.left is not None - assert t.root.left.left is not None - assert t.root.left.label == 5 - assert t.root.left.right is None - assert t.root.left.left.label == 1 - assert t.root.left.parent == t.root - assert t.root.left.left.parent == t.root.left - - def test_remove_2(self) -> None: - t = self._get_binary_search_tree() - - t.remove(3) - r""" - 8 - / \ - 4 10 - / \ \ - 1 6 14 - / \ / - 5 7 13 - """ - assert t.root is not None - assert t.root.left is not None - assert t.root.left.left is not None - assert t.root.left.right is not None - assert t.root.left.right.left is not None - assert t.root.left.right.right is not None - assert t.root.left.label == 4 - assert t.root.left.right.label == 6 - assert t.root.left.left.label == 1 - assert t.root.left.right.right.label == 7 - assert t.root.left.right.left.label == 5 - assert t.root.left.parent == t.root - assert t.root.left.right.parent == t.root.left - assert t.root.left.left.parent == t.root.left - assert t.root.left.right.left.parent == t.root.left.right - - def test_empty(self) -> None: - t = self._get_binary_search_tree() - t.empty() - assert t.root is None - - def test_is_empty(self) -> None: - t = self._get_binary_search_tree() - assert not t.is_empty() - - t.empty() - assert t.is_empty() - - def test_exists(self) -> None: - t = self._get_binary_search_tree() - - assert t.exists(6) - assert not t.exists(-1) - - def test_get_max_label(self) -> None: - t = self._get_binary_search_tree() - - assert t.get_max_label() == 14 - - t.empty() - with pytest.raises(ValueError): - t.get_max_label() - - def test_get_min_label(self) -> None: - t = self._get_binary_search_tree() - - assert t.get_min_label() == 1 - - t.empty() - with pytest.raises(ValueError): - t.get_min_label() - - def test_inorder_traversal(self) -> None: - t = self._get_binary_search_tree() - - inorder_traversal_nodes = [i.label for i in t.inorder_traversal()] - assert inorder_traversal_nodes == [1, 3, 4, 5, 6, 7, 8, 10, 13, 14] - - def test_preorder_traversal(self) -> None: - t = self._get_binary_search_tree() - - preorder_traversal_nodes = [i.label for i in t.preorder_traversal()] - assert preorder_traversal_nodes == [8, 3, 1, 6, 4, 5, 7, 10, 14, 13] - - -def binary_search_tree_example() -> None: - r""" - Example - 8 - / \ - 3 10 - / \ \ - 1 6 14 - / \ / - 4 7 13 - \ - 5 - - Example After Deletion - 4 - / \ - 1 7 - \ - 5 - - """ - - t = BinarySearchTree() - t.put(8) - t.put(3) - t.put(6) - t.put(1) - t.put(10) - t.put(14) - t.put(13) - t.put(4) - t.put(7) - t.put(5) - - print( - """ - 8 - / \\ - 3 10 - / \\ \\ - 1 6 14 - / \\ / - 4 7 13 - \\ - 5 - """ - ) - - print("Label 6 exists:", t.exists(6)) - print("Label 13 exists:", t.exists(13)) - print("Label -1 exists:", t.exists(-1)) - print("Label 12 exists:", t.exists(12)) - - # Prints all the elements of the list in inorder traversal - inorder_traversal_nodes = [i.label for i in t.inorder_traversal()] - print("Inorder traversal:", inorder_traversal_nodes) - - # Prints all the elements of the list in preorder traversal - preorder_traversal_nodes = [i.label for i in t.preorder_traversal()] - print("Preorder traversal:", preorder_traversal_nodes) - - print("Max. label:", t.get_max_label()) - print("Min. label:", t.get_min_label()) - - # Delete elements - print("\nDeleting elements 13, 10, 8, 3, 6, 14") - print( - """ - 4 - / \\ - 1 7 - \\ - 5 - """ - ) - t.remove(13) - t.remove(10) - t.remove(8) - t.remove(3) - t.remove(6) - t.remove(14) - - # Prints all the elements of the list in inorder traversal after delete - inorder_traversal_nodes = [i.label for i in t.inorder_traversal()] - print("Inorder traversal after delete:", inorder_traversal_nodes) - - # Prints all the elements of the list in preorder traversal after delete - preorder_traversal_nodes = [i.label for i in t.preorder_traversal()] - print("Preorder traversal after delete:", preorder_traversal_nodes) - - print("Max. label:", t.get_max_label()) - print("Min. label:", t.get_min_label()) - - -if __name__ == "__main__": - binary_search_tree_example() diff --git a/data_structures/binary_tree/binary_tree_mirror.py b/data_structures/binary_tree/binary_tree_mirror.py deleted file mode 100644 index b8548f4ec515..000000000000 --- a/data_structures/binary_tree/binary_tree_mirror.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Problem Description: -Given a binary tree, return its mirror. -""" - - -def binary_tree_mirror_dict(binary_tree_mirror_dictionary: dict, root: int): - if not root or root not in binary_tree_mirror_dictionary: - return - left_child, right_child = binary_tree_mirror_dictionary[root][:2] - binary_tree_mirror_dictionary[root] = [right_child, left_child] - binary_tree_mirror_dict(binary_tree_mirror_dictionary, left_child) - binary_tree_mirror_dict(binary_tree_mirror_dictionary, right_child) - - -def binary_tree_mirror(binary_tree: dict, root: int = 1) -> dict: - """ - >>> binary_tree_mirror({ 1: [2,3], 2: [4,5], 3: [6,7], 7: [8,9]}, 1) - {1: [3, 2], 2: [5, 4], 3: [7, 6], 7: [9, 8]} - >>> binary_tree_mirror({ 1: [2,3], 2: [4,5], 3: [6,7], 4: [10,11]}, 1) - {1: [3, 2], 2: [5, 4], 3: [7, 6], 4: [11, 10]} - >>> binary_tree_mirror({ 1: [2,3], 2: [4,5], 3: [6,7], 4: [10,11]}, 5) - Traceback (most recent call last): - ... - ValueError: root 5 is not present in the binary_tree - >>> binary_tree_mirror({}, 5) - Traceback (most recent call last): - ... - ValueError: binary tree cannot be empty - """ - if not binary_tree: - raise ValueError("binary tree cannot be empty") - if root not in binary_tree: - msg = f"root {root} is not present in the binary_tree" - raise ValueError(msg) - binary_tree_mirror_dictionary = dict(binary_tree) - binary_tree_mirror_dict(binary_tree_mirror_dictionary, root) - return binary_tree_mirror_dictionary - - -if __name__ == "__main__": - binary_tree = {1: [2, 3], 2: [4, 5], 3: [6, 7], 7: [8, 9]} - print(f"Binary tree: {binary_tree}") - binary_tree_mirror_dictionary = binary_tree_mirror(binary_tree, 5) - print(f"Binary tree mirror: {binary_tree_mirror_dictionary}") diff --git a/data_structures/binary_tree/binary_tree_node_sum.py b/data_structures/binary_tree/binary_tree_node_sum.py deleted file mode 100644 index 066617b616c4..000000000000 --- a/data_structures/binary_tree/binary_tree_node_sum.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Sum of all nodes in a binary tree. - -Python implementation: - O(n) time complexity - Recurses through :meth:`depth_first_search` - with each element. - O(n) space complexity - At any point in time maximum number of stack - frames that could be in memory is `n` -""" - -from __future__ import annotations - -from collections.abc import Iterator - - -class Node: - """ - A Node has a value variable and pointers to Nodes to its left and right. - """ - - def __init__(self, value: int) -> None: - self.value = value - self.left: Node | None = None - self.right: Node | None = None - - -class BinaryTreeNodeSum: - r""" - The below tree looks like this - 10 - / \ - 5 -3 - / / \ - 12 8 0 - - >>> tree = Node(10) - >>> sum(BinaryTreeNodeSum(tree)) - 10 - - >>> tree.left = Node(5) - >>> sum(BinaryTreeNodeSum(tree)) - 15 - - >>> tree.right = Node(-3) - >>> sum(BinaryTreeNodeSum(tree)) - 12 - - >>> tree.left.left = Node(12) - >>> sum(BinaryTreeNodeSum(tree)) - 24 - - >>> tree.right.left = Node(8) - >>> tree.right.right = Node(0) - >>> sum(BinaryTreeNodeSum(tree)) - 32 - """ - - def __init__(self, tree: Node) -> None: - self.tree = tree - - def depth_first_search(self, node: Node | None) -> int: - if node is None: - return 0 - return node.value + ( - self.depth_first_search(node.left) + self.depth_first_search(node.right) - ) - - def __iter__(self) -> Iterator[int]: - yield self.depth_first_search(self.tree) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/binary_tree_path_sum.py b/data_structures/binary_tree/binary_tree_path_sum.py deleted file mode 100644 index a3fe9ca7a7e2..000000000000 --- a/data_structures/binary_tree/binary_tree_path_sum.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -Given the root of a binary tree and an integer target, -find the number of paths where the sum of the values -along the path equals target. - - -Leetcode reference: https://leetcode.com/problems/path-sum-iii/ -""" - -from __future__ import annotations - - -class Node: - """ - A Node has value variable and pointers to Nodes to its left and right. - """ - - def __init__(self, value: int) -> None: - self.value = value - self.left: Node | None = None - self.right: Node | None = None - - -class BinaryTreePathSum: - r""" - The below tree looks like this - 10 - / \ - 5 -3 - / \ \ - 3 2 11 - / \ \ - 3 -2 1 - - - >>> tree = Node(10) - >>> tree.left = Node(5) - >>> tree.right = Node(-3) - >>> tree.left.left = Node(3) - >>> tree.left.right = Node(2) - >>> tree.right.right = Node(11) - >>> tree.left.left.left = Node(3) - >>> tree.left.left.right = Node(-2) - >>> tree.left.right.right = Node(1) - - >>> BinaryTreePathSum().path_sum(tree, 8) - 3 - >>> BinaryTreePathSum().path_sum(tree, 7) - 2 - >>> tree.right.right = Node(10) - >>> BinaryTreePathSum().path_sum(tree, 8) - 2 - """ - - target: int - - def __init__(self) -> None: - self.paths = 0 - - def depth_first_search(self, node: Node | None, path_sum: int) -> None: - if node is None: - return - - if path_sum == self.target: - self.paths += 1 - - if node.left: - self.depth_first_search(node.left, path_sum + node.left.value) - if node.right: - self.depth_first_search(node.right, path_sum + node.right.value) - - def path_sum(self, node: Node | None, target: int | None = None) -> int: - if node is None: - return 0 - if target is not None: - self.target = target - - self.depth_first_search(node, node.value) - self.path_sum(node.left) - self.path_sum(node.right) - - return self.paths - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/binary_tree_traversals.py b/data_structures/binary_tree/binary_tree_traversals.py deleted file mode 100644 index 49c208335b2c..000000000000 --- a/data_structures/binary_tree/binary_tree_traversals.py +++ /dev/null @@ -1,217 +0,0 @@ -from __future__ import annotations - -from collections import deque -from collections.abc import Generator -from dataclasses import dataclass - - -# https://en.wikipedia.org/wiki/Tree_traversal -@dataclass -class Node: - data: int - left: Node | None = None - right: Node | None = None - - -def make_tree() -> Node | None: - r""" - The below tree - 1 - / \ - 2 3 - / \ - 4 5 - """ - tree = Node(1) - tree.left = Node(2) - tree.right = Node(3) - tree.left.left = Node(4) - tree.left.right = Node(5) - return tree - - -def preorder(root: Node | None) -> Generator[int, None, None]: - """ - Pre-order traversal visits root node, left subtree, right subtree. - >>> list(preorder(make_tree())) - [1, 2, 4, 5, 3] - """ - if not root: - return - yield root.data - yield from preorder(root.left) - yield from preorder(root.right) - - -def postorder(root: Node | None) -> Generator[int, None, None]: - """ - Post-order traversal visits left subtree, right subtree, root node. - >>> list(postorder(make_tree())) - [4, 5, 2, 3, 1] - """ - if not root: - return - yield from postorder(root.left) - yield from postorder(root.right) - yield root.data - - -def inorder(root: Node | None) -> Generator[int, None, None]: - """ - In-order traversal visits left subtree, root node, right subtree. - >>> list(inorder(make_tree())) - [4, 2, 5, 1, 3] - """ - if not root: - return - yield from inorder(root.left) - yield root.data - yield from inorder(root.right) - - -def reverse_inorder(root: Node | None) -> Generator[int, None, None]: - """ - Reverse in-order traversal visits right subtree, root node, left subtree. - >>> list(reverse_inorder(make_tree())) - [3, 1, 5, 2, 4] - """ - if not root: - return - yield from reverse_inorder(root.right) - yield root.data - yield from reverse_inorder(root.left) - - -def height(root: Node | None) -> int: - """ - Recursive function for calculating the height of the binary tree. - >>> height(None) - 0 - >>> height(make_tree()) - 3 - """ - return (max(height(root.left), height(root.right)) + 1) if root else 0 - - -def level_order(root: Node | None) -> Generator[int, None, None]: - """ - Returns a list of nodes value from a whole binary tree in Level Order Traverse. - Level Order traverse: Visit nodes of the tree level-by-level. - >>> list(level_order(make_tree())) - [1, 2, 3, 4, 5] - """ - - if root is None: - return - - process_queue = deque([root]) - - while process_queue: - node = process_queue.popleft() - yield node.data - - if node.left: - process_queue.append(node.left) - if node.right: - process_queue.append(node.right) - - -def get_nodes_from_left_to_right( - root: Node | None, level: int -) -> Generator[int, None, None]: - """ - Returns a list of nodes value from a particular level: - Left to right direction of the binary tree. - >>> list(get_nodes_from_left_to_right(make_tree(), 1)) - [1] - >>> list(get_nodes_from_left_to_right(make_tree(), 2)) - [2, 3] - """ - - def populate_output(root: Node | None, level: int) -> Generator[int, None, None]: - if not root: - return - if level == 1: - yield root.data - elif level > 1: - yield from populate_output(root.left, level - 1) - yield from populate_output(root.right, level - 1) - - yield from populate_output(root, level) - - -def get_nodes_from_right_to_left( - root: Node | None, level: int -) -> Generator[int, None, None]: - """ - Returns a list of nodes value from a particular level: - Right to left direction of the binary tree. - >>> list(get_nodes_from_right_to_left(make_tree(), 1)) - [1] - >>> list(get_nodes_from_right_to_left(make_tree(), 2)) - [3, 2] - """ - - def populate_output(root: Node | None, level: int) -> Generator[int, None, None]: - if not root: - return - if level == 1: - yield root.data - elif level > 1: - yield from populate_output(root.right, level - 1) - yield from populate_output(root.left, level - 1) - - yield from populate_output(root, level) - - -def zigzag(root: Node | None) -> Generator[int, None, None]: - """ - ZigZag traverse: - Returns a list of nodes value from left to right and right to left, alternatively. - >>> list(zigzag(make_tree())) - [1, 3, 2, 4, 5] - """ - if root is None: - return - - flag = 0 - height_tree = height(root) - - for h in range(1, height_tree + 1): - if not flag: - yield from get_nodes_from_left_to_right(root, h) - flag = 1 - else: - yield from get_nodes_from_right_to_left(root, h) - flag = 0 - - -def main() -> None: # Main function for testing. - # Create binary tree. - root = make_tree() - - # All Traversals of the binary are as follows: - print(f"In-order Traversal: {list(inorder(root))}") - print(f"Reverse In-order Traversal: {list(reverse_inorder(root))}") - print(f"Pre-order Traversal: {list(preorder(root))}") - print(f"Post-order Traversal: {list(postorder(root))}", "\n") - - print(f"Height of Tree: {height(root)}", "\n") - - print("Complete Level Order Traversal: ") - print(f"{list(level_order(root))} \n") - - print("Level-wise order Traversal: ") - - for level in range(1, height(root) + 1): - print(f"Level {level}:", list(get_nodes_from_left_to_right(root, level=level))) - - print("\nZigZag order Traversal: ") - print(f"{list(zigzag(root))}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/data_structures/binary_tree/diameter_of_binary_tree.py b/data_structures/binary_tree/diameter_of_binary_tree.py deleted file mode 100644 index 75e5e7373323..000000000000 --- a/data_structures/binary_tree/diameter_of_binary_tree.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -The diameter/width of a tree is defined as the number of nodes on the longest path -between two end nodes. -""" - -from __future__ import annotations - -from dataclasses import dataclass - - -@dataclass -class Node: - data: int - left: Node | None = None - right: Node | None = None - - def depth(self) -> int: - """ - >>> root = Node(1) - >>> root.depth() - 1 - >>> root.left = Node(2) - >>> root.depth() - 2 - >>> root.left.depth() - 1 - >>> root.right = Node(3) - >>> root.depth() - 2 - """ - left_depth = self.left.depth() if self.left else 0 - right_depth = self.right.depth() if self.right else 0 - return max(left_depth, right_depth) + 1 - - def diameter(self) -> int: - """ - >>> root = Node(1) - >>> root.diameter() - 1 - >>> root.left = Node(2) - >>> root.diameter() - 2 - >>> root.left.diameter() - 1 - >>> root.right = Node(3) - >>> root.diameter() - 3 - """ - left_depth = self.left.depth() if self.left else 0 - right_depth = self.right.depth() if self.right else 0 - return left_depth + right_depth + 1 - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - root = Node(1) - root.left = Node(2) - root.right = Node(3) - root.left.left = Node(4) - root.left.right = Node(5) - r""" - Constructed binary tree is - 1 - / \ - 2 3 - / \ - 4 5 - """ - print(f"{root.diameter() = }") # 4 - print(f"{root.left.diameter() = }") # 3 - print(f"{root.right.diameter() = }") # 1 diff --git a/data_structures/binary_tree/diff_views_of_binary_tree.py b/data_structures/binary_tree/diff_views_of_binary_tree.py deleted file mode 100644 index 3198d8065918..000000000000 --- a/data_structures/binary_tree/diff_views_of_binary_tree.py +++ /dev/null @@ -1,210 +0,0 @@ -r""" -Problem: Given root of a binary tree, return the: -1. binary-tree-right-side-view -2. binary-tree-left-side-view -3. binary-tree-top-side-view -4. binary-tree-bottom-side-view -""" - -from __future__ import annotations - -from collections import defaultdict -from dataclasses import dataclass - - -@dataclass -class TreeNode: - val: int - left: TreeNode | None = None - right: TreeNode | None = None - - -def make_tree() -> TreeNode: - """ - >>> make_tree().val - 3 - """ - return TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7))) - - -def binary_tree_right_side_view(root: TreeNode) -> list[int]: - r""" - Function returns the right side view of binary tree. - - 3 <- 3 - / \ - 9 20 <- 20 - / \ - 15 7 <- 7 - - >>> binary_tree_right_side_view(make_tree()) - [3, 20, 7] - >>> binary_tree_right_side_view(None) - [] - """ - - def depth_first_search( - root: TreeNode | None, depth: int, right_view: list[int] - ) -> None: - """ - A depth first search preorder traversal to append the values at - right side of tree. - """ - if not root: - return - - if depth == len(right_view): - right_view.append(root.val) - - depth_first_search(root.right, depth + 1, right_view) - depth_first_search(root.left, depth + 1, right_view) - - right_view: list = [] - if not root: - return right_view - - depth_first_search(root, 0, right_view) - return right_view - - -def binary_tree_left_side_view(root: TreeNode) -> list[int]: - r""" - Function returns the left side view of binary tree. - - 3 -> 3 - / \ - 9 -> 9 20 - / \ - 15 -> 15 7 - - >>> binary_tree_left_side_view(make_tree()) - [3, 9, 15] - >>> binary_tree_left_side_view(None) - [] - """ - - def depth_first_search( - root: TreeNode | None, depth: int, left_view: list[int] - ) -> None: - """ - A depth first search preorder traversal to append the values - at left side of tree. - """ - if not root: - return - - if depth == len(left_view): - left_view.append(root.val) - - depth_first_search(root.left, depth + 1, left_view) - depth_first_search(root.right, depth + 1, left_view) - - left_view: list = [] - if not root: - return left_view - - depth_first_search(root, 0, left_view) - return left_view - - -def binary_tree_top_side_view(root: TreeNode) -> list[int]: - r""" - Function returns the top side view of binary tree. - - 9 3 20 7 - ⬇ ⬇ ⬇ ⬇ - - 3 - / \ - 9 20 - / \ - 15 7 - - >>> binary_tree_top_side_view(make_tree()) - [9, 3, 20, 7] - >>> binary_tree_top_side_view(None) - [] - """ - - def breadth_first_search(root: TreeNode, top_view: list[int]) -> None: - """ - A breadth first search traversal with defaultdict ds to append - the values of tree from top view - """ - queue = [(root, 0)] - lookup = defaultdict(list) - - while queue: - first = queue.pop(0) - node, hd = first - - lookup[hd].append(node.val) - - if node.left: - queue.append((node.left, hd - 1)) - if node.right: - queue.append((node.right, hd + 1)) - - for pair in sorted(lookup.items(), key=lambda each: each[0]): - top_view.append(pair[1][0]) - - top_view: list = [] - if not root: - return top_view - - breadth_first_search(root, top_view) - return top_view - - -def binary_tree_bottom_side_view(root: TreeNode) -> list[int]: - r""" - Function returns the bottom side view of binary tree - - 3 - / \ - 9 20 - / \ - 15 7 - ↑ ↑ ↑ ↑ - 9 15 20 7 - - >>> binary_tree_bottom_side_view(make_tree()) - [9, 15, 20, 7] - >>> binary_tree_bottom_side_view(None) - [] - """ - from collections import defaultdict - - def breadth_first_search(root: TreeNode, bottom_view: list[int]) -> None: - """ - A breadth first search traversal with defaultdict ds to append - the values of tree from bottom view - """ - queue = [(root, 0)] - lookup = defaultdict(list) - - while queue: - first = queue.pop(0) - node, hd = first - lookup[hd].append(node.val) - - if node.left: - queue.append((node.left, hd - 1)) - if node.right: - queue.append((node.right, hd + 1)) - - for pair in sorted(lookup.items(), key=lambda each: each[0]): - bottom_view.append(pair[1][-1]) - - bottom_view: list = [] - if not root: - return bottom_view - - breadth_first_search(root, bottom_view) - return bottom_view - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/distribute_coins.py b/data_structures/binary_tree/distribute_coins.py deleted file mode 100644 index 5712604cb87c..000000000000 --- a/data_structures/binary_tree/distribute_coins.py +++ /dev/null @@ -1,137 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : November 7, 2022 - -Task: -You are given a tree root of a binary tree with n nodes, where each node has -node.data coins. There are exactly n coins in whole tree. - -In one move, we may choose two adjacent nodes and move one coin from one node -to another. A move may be from parent to child, or from child to parent. - -Return the minimum number of moves required to make every node have exactly one coin. - -Example 1: - - 3 - / \ - 0 0 - -Result: 2 - -Example 2: - - 0 - / \ - 3 0 - -Result 3 - -leetcode: https://leetcode.com/problems/distribute-coins-in-binary-tree/ - -Implementation notes: -User depth-first search approach. - -Let n is the number of nodes in tree -Runtime: O(n) -Space: O(1) -""" - -from __future__ import annotations - -from dataclasses import dataclass -from typing import NamedTuple - - -@dataclass -class TreeNode: - data: int - left: TreeNode | None = None - right: TreeNode | None = None - - -class CoinsDistribResult(NamedTuple): - moves: int - excess: int - - -def distribute_coins(root: TreeNode | None) -> int: - """ - >>> distribute_coins(TreeNode(3, TreeNode(0), TreeNode(0))) - 2 - >>> distribute_coins(TreeNode(0, TreeNode(3), TreeNode(0))) - 3 - >>> distribute_coins(TreeNode(0, TreeNode(0), TreeNode(3))) - 3 - >>> distribute_coins(None) - 0 - >>> distribute_coins(TreeNode(0, TreeNode(0), TreeNode(0))) - Traceback (most recent call last): - ... - ValueError: The nodes number should be same as the number of coins - >>> distribute_coins(TreeNode(0, TreeNode(1), TreeNode(1))) - Traceback (most recent call last): - ... - ValueError: The nodes number should be same as the number of coins - """ - - if root is None: - return 0 - - # Validation - def count_nodes(node: TreeNode | None) -> int: - """ - >>> count_nodes(None) - 0 - """ - if node is None: - return 0 - - return count_nodes(node.left) + count_nodes(node.right) + 1 - - def count_coins(node: TreeNode | None) -> int: - """ - >>> count_coins(None) - 0 - """ - if node is None: - return 0 - - return count_coins(node.left) + count_coins(node.right) + node.data - - if count_nodes(root) != count_coins(root): - raise ValueError("The nodes number should be same as the number of coins") - - # Main calculation - def get_distrib(node: TreeNode | None) -> CoinsDistribResult: - """ - >>> get_distrib(None) - namedtuple("CoinsDistribResult", "0 2") - """ - - if node is None: - return CoinsDistribResult(0, 1) - - left_distrib_moves, left_distrib_excess = get_distrib(node.left) - right_distrib_moves, right_distrib_excess = get_distrib(node.right) - - coins_to_left = 1 - left_distrib_excess - coins_to_right = 1 - right_distrib_excess - - result_moves = ( - left_distrib_moves - + right_distrib_moves - + abs(coins_to_left) - + abs(coins_to_right) - ) - result_excess = node.data - coins_to_left - coins_to_right - - return CoinsDistribResult(result_moves, result_excess) - - return get_distrib(root)[0] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/fenwick_tree.py b/data_structures/binary_tree/fenwick_tree.py deleted file mode 100644 index 88b0873a10fb..000000000000 --- a/data_structures/binary_tree/fenwick_tree.py +++ /dev/null @@ -1,247 +0,0 @@ -from copy import deepcopy - - -class FenwickTree: - """ - Fenwick Tree - - More info: https://en.wikipedia.org/wiki/Fenwick_tree - """ - - def __init__(self, arr: list[int] | None = None, size: int | None = None) -> None: - """ - Constructor for the Fenwick tree - - Parameters: - arr (list): list of elements to initialize the tree with (optional) - size (int): size of the Fenwick tree (if arr is None) - """ - - if arr is None and size is not None: - self.size = size - self.tree = [0] * size - elif arr is not None: - self.init(arr) - else: - raise ValueError("Either arr or size must be specified") - - def init(self, arr: list[int]) -> None: - """ - Initialize the Fenwick tree with arr in O(N) - - Parameters: - arr (list): list of elements to initialize the tree with - - Returns: - None - - >>> a = [1, 2, 3, 4, 5] - >>> f1 = FenwickTree(a) - >>> f2 = FenwickTree(size=len(a)) - >>> for index, value in enumerate(a): - ... f2.add(index, value) - >>> f1.tree == f2.tree - True - """ - self.size = len(arr) - self.tree = deepcopy(arr) - for i in range(1, self.size): - j = self.next_(i) - if j < self.size: - self.tree[j] += self.tree[i] - - def get_array(self) -> list[int]: - """ - Get the Normal Array of the Fenwick tree in O(N) - - Returns: - list: Normal Array of the Fenwick tree - - >>> a = [i for i in range(128)] - >>> f = FenwickTree(a) - >>> f.get_array() == a - True - """ - arr = self.tree[:] - for i in range(self.size - 1, 0, -1): - j = self.next_(i) - if j < self.size: - arr[j] -= arr[i] - return arr - - @staticmethod - def next_(index: int) -> int: - return index + (index & (-index)) - - @staticmethod - def prev(index: int) -> int: - return index - (index & (-index)) - - def add(self, index: int, value: int) -> None: - """ - Add a value to index in O(lg N) - - Parameters: - index (int): index to add value to - value (int): value to add to index - - Returns: - None - - >>> f = FenwickTree([1, 2, 3, 4, 5]) - >>> f.add(0, 1) - >>> f.add(1, 2) - >>> f.add(2, 3) - >>> f.add(3, 4) - >>> f.add(4, 5) - >>> f.get_array() - [2, 4, 6, 8, 10] - """ - if index == 0: - self.tree[0] += value - return - while index < self.size: - self.tree[index] += value - index = self.next_(index) - - def update(self, index: int, value: int) -> None: - """ - Set the value of index in O(lg N) - - Parameters: - index (int): index to set value to - value (int): value to set in index - - Returns: - None - - >>> f = FenwickTree([5, 4, 3, 2, 1]) - >>> f.update(0, 1) - >>> f.update(1, 2) - >>> f.update(2, 3) - >>> f.update(3, 4) - >>> f.update(4, 5) - >>> f.get_array() - [1, 2, 3, 4, 5] - """ - self.add(index, value - self.get(index)) - - def prefix(self, right: int) -> int: - """ - Prefix sum of all elements in [0, right) in O(lg N) - - Parameters: - right (int): right bound of the query (exclusive) - - Returns: - int: sum of all elements in [0, right) - - >>> a = [i for i in range(128)] - >>> f = FenwickTree(a) - >>> res = True - >>> for i in range(len(a)): - ... res = res and f.prefix(i) == sum(a[:i]) - >>> res - True - """ - if right == 0: - return 0 - result = self.tree[0] - right -= 1 # make right inclusive - while right > 0: - result += self.tree[right] - right = self.prev(right) - return result - - def query(self, left: int, right: int) -> int: - """ - Query the sum of all elements in [left, right) in O(lg N) - - Parameters: - left (int): left bound of the query (inclusive) - right (int): right bound of the query (exclusive) - - Returns: - int: sum of all elements in [left, right) - - >>> a = [i for i in range(128)] - >>> f = FenwickTree(a) - >>> res = True - >>> for i in range(len(a)): - ... for j in range(i + 1, len(a)): - ... res = res and f.query(i, j) == sum(a[i:j]) - >>> res - True - """ - return self.prefix(right) - self.prefix(left) - - def get(self, index: int) -> int: - """ - Get value at index in O(lg N) - - Parameters: - index (int): index to get the value - - Returns: - int: Value of element at index - - >>> a = [i for i in range(128)] - >>> f = FenwickTree(a) - >>> res = True - >>> for i in range(len(a)): - ... res = res and f.get(i) == a[i] - >>> res - True - """ - return self.query(index, index + 1) - - def rank_query(self, value: int) -> int: - """ - Find the largest index with prefix(i) <= value in O(lg N) - NOTE: Requires that all values are non-negative! - - Parameters: - value (int): value to find the largest index of - - Returns: - -1: if value is smaller than all elements in prefix sum - int: largest index with prefix(i) <= value - - >>> f = FenwickTree([1, 2, 0, 3, 0, 5]) - >>> f.rank_query(0) - -1 - >>> f.rank_query(2) - 0 - >>> f.rank_query(1) - 0 - >>> f.rank_query(3) - 2 - >>> f.rank_query(5) - 2 - >>> f.rank_query(6) - 4 - >>> f.rank_query(11) - 5 - """ - value -= self.tree[0] - if value < 0: - return -1 - - j = 1 # Largest power of 2 <= size - while j * 2 < self.size: - j *= 2 - - i = 0 - - while j > 0: - if i + j < self.size and self.tree[i + j] <= value: - value -= self.tree[i + j] - i += j - j //= 2 - return i - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/flatten_binarytree_to_linkedlist.py b/data_structures/binary_tree/flatten_binarytree_to_linkedlist.py deleted file mode 100644 index 9b2c7b9af24b..000000000000 --- a/data_structures/binary_tree/flatten_binarytree_to_linkedlist.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -Binary Tree Flattening Algorithm - -This code defines an algorithm to flatten a binary tree into a linked list -represented using the right pointers of the tree nodes. It uses in-place -flattening and demonstrates the flattening process along with a display -function to visualize the flattened linked list. -https://www.geeksforgeeks.org/flatten-a-binary-tree-into-linked-list - -Author: Arunkumar A -Date: 04/09/2023 -""" - -from __future__ import annotations - - -class TreeNode: - """ - A TreeNode has data variable and pointers to TreeNode objects - for its left and right children. - """ - - def __init__(self, data: int) -> None: - self.data = data - self.left: TreeNode | None = None - self.right: TreeNode | None = None - - -def build_tree() -> TreeNode: - """ - Build and return a sample binary tree. - - Returns: - TreeNode: The root of the binary tree. - - Examples: - >>> root = build_tree() - >>> root.data - 1 - >>> root.left.data - 2 - >>> root.right.data - 5 - >>> root.left.left.data - 3 - >>> root.left.right.data - 4 - >>> root.right.right.data - 6 - """ - root = TreeNode(1) - root.left = TreeNode(2) - root.right = TreeNode(5) - root.left.left = TreeNode(3) - root.left.right = TreeNode(4) - root.right.right = TreeNode(6) - return root - - -def flatten(root: TreeNode | None) -> None: - """ - Flatten a binary tree into a linked list in-place, where the linked list is - represented using the right pointers of the tree nodes. - - Args: - root (TreeNode): The root of the binary tree to be flattened. - - Examples: - >>> root = TreeNode(1) - >>> root.left = TreeNode(2) - >>> root.right = TreeNode(5) - >>> root.left.left = TreeNode(3) - >>> root.left.right = TreeNode(4) - >>> root.right.right = TreeNode(6) - >>> flatten(root) - >>> root.data - 1 - >>> root.right.right is None - False - >>> root.right.right = TreeNode(3) - >>> root.right.right.right is None - True - """ - if not root: - return - - # Flatten the left subtree - flatten(root.left) - - # Save the right subtree - right_subtree = root.right - - # Make the left subtree the new right subtree - root.right = root.left - root.left = None - - # Find the end of the new right subtree - current = root - while current.right: - current = current.right - - # Append the original right subtree to the end - current.right = right_subtree - - # Flatten the updated right subtree - flatten(right_subtree) - - -def display_linked_list(root: TreeNode | None) -> None: - """ - Display the flattened linked list. - - Args: - root (TreeNode | None): The root of the flattened linked list. - - Examples: - >>> root = TreeNode(1) - >>> root.right = TreeNode(2) - >>> root.right.right = TreeNode(3) - >>> display_linked_list(root) - 1 2 3 - >>> root = None - >>> display_linked_list(root) - - """ - current = root - while current: - if current.right is None: - print(current.data, end="") - break - print(current.data, end=" ") - current = current.right - - -if __name__ == "__main__": - print("Flattened Linked List:") - root = build_tree() - flatten(root) - display_linked_list(root) diff --git a/data_structures/binary_tree/floor_and_ceiling.py b/data_structures/binary_tree/floor_and_ceiling.py deleted file mode 100644 index b464aefad3a2..000000000000 --- a/data_structures/binary_tree/floor_and_ceiling.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -In a binary search tree (BST): -* The floor of key 'k' is the maximum value that is smaller than or equal to 'k'. -* The ceiling of key 'k' is the minimum value that is greater than or equal to 'k'. - -Reference: -https://bit.ly/46uB0a2 - -Author : Arunkumar -Date : 14th October 2023 -""" - -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - key: int - left: Node | None = None - right: Node | None = None - - def __iter__(self) -> Iterator[int]: - if self.left: - yield from self.left - yield self.key - if self.right: - yield from self.right - - def __len__(self) -> int: - return sum(1 for _ in self) - - -def floor_ceiling(root: Node | None, key: int) -> tuple[int | None, int | None]: - """ - Find the floor and ceiling values for a given key in a Binary Search Tree (BST). - - Args: - root: The root of the binary search tree. - key: The key for which to find the floor and ceiling. - - Returns: - A tuple containing the floor and ceiling values, respectively. - - Examples: - >>> root = Node(10) - >>> root.left = Node(5) - >>> root.right = Node(20) - >>> root.left.left = Node(3) - >>> root.left.right = Node(7) - >>> root.right.left = Node(15) - >>> root.right.right = Node(25) - >>> tuple(root) - (3, 5, 7, 10, 15, 20, 25) - >>> floor_ceiling(root, 8) - (7, 10) - >>> floor_ceiling(root, 14) - (10, 15) - >>> floor_ceiling(root, -1) - (None, 3) - >>> floor_ceiling(root, 30) - (25, None) - """ - floor_val = None - ceiling_val = None - - while root: - if root.key == key: - floor_val = root.key - ceiling_val = root.key - break - - if key < root.key: - ceiling_val = root.key - root = root.left - else: - floor_val = root.key - root = root.right - - return floor_val, ceiling_val - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/inorder_tree_traversal_2022.py b/data_structures/binary_tree/inorder_tree_traversal_2022.py deleted file mode 100644 index 1357527d2953..000000000000 --- a/data_structures/binary_tree/inorder_tree_traversal_2022.py +++ /dev/null @@ -1,82 +0,0 @@ -""" -Illustrate how to implement inorder traversal in binary search tree. -Author: Gurneet Singh -https://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/ -""" - - -class BinaryTreeNode: - """Defining the structure of BinaryTreeNode""" - - def __init__(self, data: int) -> None: - self.data = data - self.left_child: BinaryTreeNode | None = None - self.right_child: BinaryTreeNode | None = None - - -def insert(node: BinaryTreeNode | None, new_value: int) -> BinaryTreeNode | None: - """ - If the binary search tree is empty, make a new node and declare it as root. - >>> node_a = BinaryTreeNode(12345) - >>> node_b = insert(node_a, 67890) - >>> node_a.left_child == node_b.left_child - True - >>> node_a.right_child == node_b.right_child - True - >>> node_a.data == node_b.data - True - """ - if node is None: - node = BinaryTreeNode(new_value) - return node - - # binary search tree is not empty, - # so we will insert it into the tree - # if new_value is less than value of data in node, - # add it to left subtree and proceed recursively - if new_value < node.data: - node.left_child = insert(node.left_child, new_value) - else: - # if new_value is greater than value of data in node, - # add it to right subtree and proceed recursively - node.right_child = insert(node.right_child, new_value) - return node - - -def inorder(node: None | BinaryTreeNode) -> list[int]: # if node is None,return - """ - >>> inorder(make_tree()) - [6, 10, 14, 15, 20, 25, 60] - """ - if node: - inorder_array = inorder(node.left_child) - inorder_array = [*inorder_array, node.data] - inorder_array = inorder_array + inorder(node.right_child) - else: - inorder_array = [] - return inorder_array - - -def make_tree() -> BinaryTreeNode | None: - root = insert(None, 15) - insert(root, 10) - insert(root, 25) - insert(root, 6) - insert(root, 14) - insert(root, 20) - insert(root, 60) - return root - - -def main() -> None: - # main function - root = make_tree() - print("Printing values of binary search tree in Inorder Traversal.") - inorder(root) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/data_structures/binary_tree/is_sorted.py b/data_structures/binary_tree/is_sorted.py deleted file mode 100644 index 91fc8ca82633..000000000000 --- a/data_structures/binary_tree/is_sorted.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -Given the root of a binary tree, determine if it is a valid binary search tree (BST). - -A valid binary search tree is defined as follows: -- The left subtree of a node contains only nodes with keys less than the node's key. -- The right subtree of a node contains only nodes with keys greater than the node's key. -- Both the left and right subtrees must also be binary search trees. - -In effect, a binary tree is a valid BST if its nodes are sorted in ascending order. -leetcode: https://leetcode.com/problems/validate-binary-search-tree/ - -If n is the number of nodes in the tree then: -Runtime: O(n) -Space: O(1) -""" - -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - data: float - left: Node | None = None - right: Node | None = None - - def __iter__(self) -> Iterator[float]: - """ - >>> root = Node(data=2.1) - >>> list(root) - [2.1] - >>> root.left=Node(data=2.0) - >>> list(root) - [2.0, 2.1] - >>> root.right=Node(data=2.2) - >>> list(root) - [2.0, 2.1, 2.2] - """ - if self.left: - yield from self.left - yield self.data - if self.right: - yield from self.right - - @property - def is_sorted(self) -> bool: - """ - >>> Node(data='abc').is_sorted - True - >>> Node(data=2, - ... left=Node(data=1.999), - ... right=Node(data=3)).is_sorted - True - >>> Node(data=0, - ... left=Node(data=0), - ... right=Node(data=0)).is_sorted - True - >>> Node(data=0, - ... left=Node(data=-11), - ... right=Node(data=3)).is_sorted - True - >>> Node(data=5, - ... left=Node(data=1), - ... right=Node(data=4, left=Node(data=3))).is_sorted - False - >>> Node(data='a', - ... left=Node(data=1), - ... right=Node(data=4, left=Node(data=3))).is_sorted - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - >>> Node(data=2, - ... left=Node([]), - ... right=Node(data=4, left=Node(data=3))).is_sorted - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'int' and 'list' - """ - if self.left and (self.data < self.left.data or not self.left.is_sorted): - return False - return not ( - self.right and (self.data > self.right.data or not self.right.is_sorted) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - tree = Node(data=2.1, left=Node(data=2.0), right=Node(data=2.2)) - print(f"Tree {list(tree)} is sorted: {tree.is_sorted = }.") - assert tree.right - tree.right.data = 2.0 - print(f"Tree {list(tree)} is sorted: {tree.is_sorted = }.") - tree.right.data = 2.1 - print(f"Tree {list(tree)} is sorted: {tree.is_sorted = }.") diff --git a/data_structures/binary_tree/is_sum_tree.py b/data_structures/binary_tree/is_sum_tree.py deleted file mode 100644 index 846bea0fe0f2..000000000000 --- a/data_structures/binary_tree/is_sum_tree.py +++ /dev/null @@ -1,162 +0,0 @@ -""" -Is a binary tree a sum tree where the value of every non-leaf node is equal to the sum -of the values of its left and right subtrees? -https://www.geeksforgeeks.org/check-if-a-given-binary-tree-is-sumtree -""" - -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - data: int - left: Node | None = None - right: Node | None = None - - def __iter__(self) -> Iterator[int]: - """ - >>> root = Node(2) - >>> list(root) - [2] - >>> root.left = Node(1) - >>> tuple(root) - (1, 2) - """ - if self.left: - yield from self.left - yield self.data - if self.right: - yield from self.right - - def __len__(self) -> int: - """ - >>> root = Node(2) - >>> len(root) - 1 - >>> root.left = Node(1) - >>> len(root) - 2 - """ - return sum(1 for _ in self) - - @property - def is_sum_node(self) -> bool: - """ - >>> root = Node(3) - >>> root.is_sum_node - True - >>> root.left = Node(1) - >>> root.is_sum_node - False - >>> root.right = Node(2) - >>> root.is_sum_node - True - """ - if not self.left and not self.right: - return True # leaf nodes are considered sum nodes - left_sum = sum(self.left) if self.left else 0 - right_sum = sum(self.right) if self.right else 0 - return all( - ( - self.data == left_sum + right_sum, - self.left.is_sum_node if self.left else True, - self.right.is_sum_node if self.right else True, - ) - ) - - -@dataclass -class BinaryTree: - root: Node - - def __iter__(self) -> Iterator[int]: - """ - >>> list(BinaryTree.build_a_tree()) - [1, 2, 7, 11, 15, 29, 35, 40] - """ - return iter(self.root) - - def __len__(self) -> int: - """ - >>> len(BinaryTree.build_a_tree()) - 8 - """ - return len(self.root) - - def __str__(self) -> str: - """ - Returns a string representation of the inorder traversal of the binary tree. - - >>> str(list(BinaryTree.build_a_tree())) - '[1, 2, 7, 11, 15, 29, 35, 40]' - """ - return str(list(self)) - - @property - def is_sum_tree(self) -> bool: - """ - >>> BinaryTree.build_a_tree().is_sum_tree - False - >>> BinaryTree.build_a_sum_tree().is_sum_tree - True - """ - return self.root.is_sum_node - - @classmethod - def build_a_tree(cls) -> BinaryTree: - r""" - Create a binary tree with the specified structure: - 11 - / \ - 2 29 - / \ / \ - 1 7 15 40 - \ - 35 - >>> list(BinaryTree.build_a_tree()) - [1, 2, 7, 11, 15, 29, 35, 40] - """ - tree = BinaryTree(Node(11)) - root = tree.root - root.left = Node(2) - root.right = Node(29) - root.left.left = Node(1) - root.left.right = Node(7) - root.right.left = Node(15) - root.right.right = Node(40) - root.right.right.left = Node(35) - return tree - - @classmethod - def build_a_sum_tree(cls) -> BinaryTree: - r""" - Create a binary tree with the specified structure: - 26 - / \ - 10 3 - / \ \ - 4 6 3 - >>> list(BinaryTree.build_a_sum_tree()) - [4, 10, 6, 26, 3, 3] - """ - tree = BinaryTree(Node(26)) - root = tree.root - root.left = Node(10) - root.right = Node(3) - root.left.left = Node(4) - root.left.right = Node(6) - root.right.right = Node(3) - return tree - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - tree = BinaryTree.build_a_tree() - print(f"{tree} has {len(tree)} nodes and {tree.is_sum_tree = }.") - tree = BinaryTree.build_a_sum_tree() - print(f"{tree} has {len(tree)} nodes and {tree.is_sum_tree = }.") diff --git a/data_structures/binary_tree/lazy_segment_tree.py b/data_structures/binary_tree/lazy_segment_tree.py deleted file mode 100644 index c26b0619380c..000000000000 --- a/data_structures/binary_tree/lazy_segment_tree.py +++ /dev/null @@ -1,136 +0,0 @@ -from __future__ import annotations - -import math - - -class SegmentTree: - def __init__(self, size: int) -> None: - self.size = size - # approximate the overall size of segment tree with given value - self.segment_tree = [0 for i in range(4 * size)] - # create array to store lazy update - self.lazy = [0 for i in range(4 * size)] - self.flag = [0 for i in range(4 * size)] # flag for lazy update - - def left(self, idx: int) -> int: - """ - >>> segment_tree = SegmentTree(15) - >>> segment_tree.left(1) - 2 - >>> segment_tree.left(2) - 4 - >>> segment_tree.left(12) - 24 - """ - return idx * 2 - - def right(self, idx: int) -> int: - """ - >>> segment_tree = SegmentTree(15) - >>> segment_tree.right(1) - 3 - >>> segment_tree.right(2) - 5 - >>> segment_tree.right(12) - 25 - """ - return idx * 2 + 1 - - def build( - self, idx: int, left_element: int, right_element: int, a: list[int] - ) -> None: - if left_element == right_element: - self.segment_tree[idx] = a[left_element - 1] - else: - mid = (left_element + right_element) // 2 - self.build(self.left(idx), left_element, mid, a) - self.build(self.right(idx), mid + 1, right_element, a) - self.segment_tree[idx] = max( - self.segment_tree[self.left(idx)], self.segment_tree[self.right(idx)] - ) - - def update( - self, idx: int, left_element: int, right_element: int, a: int, b: int, val: int - ) -> bool: - """ - update with O(lg n) (Normal segment tree without lazy update will take O(nlg n) - for each update) - - update(1, 1, size, a, b, v) for update val v to [a,b] - """ - if self.flag[idx] is True: - self.segment_tree[idx] = self.lazy[idx] - self.flag[idx] = False - if left_element != right_element: - self.lazy[self.left(idx)] = self.lazy[idx] - self.lazy[self.right(idx)] = self.lazy[idx] - self.flag[self.left(idx)] = True - self.flag[self.right(idx)] = True - - if right_element < a or left_element > b: - return True - if left_element >= a and right_element <= b: - self.segment_tree[idx] = val - if left_element != right_element: - self.lazy[self.left(idx)] = val - self.lazy[self.right(idx)] = val - self.flag[self.left(idx)] = True - self.flag[self.right(idx)] = True - return True - mid = (left_element + right_element) // 2 - self.update(self.left(idx), left_element, mid, a, b, val) - self.update(self.right(idx), mid + 1, right_element, a, b, val) - self.segment_tree[idx] = max( - self.segment_tree[self.left(idx)], self.segment_tree[self.right(idx)] - ) - return True - - # query with O(lg n) - def query( - self, idx: int, left_element: int, right_element: int, a: int, b: int - ) -> int | float: - """ - query(1, 1, size, a, b) for query max of [a,b] - >>> A = [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8] - >>> segment_tree = SegmentTree(15) - >>> segment_tree.build(1, 1, 15, A) - >>> segment_tree.query(1, 1, 15, 4, 6) - 7 - >>> segment_tree.query(1, 1, 15, 7, 11) - 14 - >>> segment_tree.query(1, 1, 15, 7, 12) - 15 - """ - if self.flag[idx] is True: - self.segment_tree[idx] = self.lazy[idx] - self.flag[idx] = False - if left_element != right_element: - self.lazy[self.left(idx)] = self.lazy[idx] - self.lazy[self.right(idx)] = self.lazy[idx] - self.flag[self.left(idx)] = True - self.flag[self.right(idx)] = True - if right_element < a or left_element > b: - return -math.inf - if left_element >= a and right_element <= b: - return self.segment_tree[idx] - mid = (left_element + right_element) // 2 - q1 = self.query(self.left(idx), left_element, mid, a, b) - q2 = self.query(self.right(idx), mid + 1, right_element, a, b) - return max(q1, q2) - - def __str__(self) -> str: - return str([self.query(1, 1, self.size, i, i) for i in range(1, self.size + 1)]) - - -if __name__ == "__main__": - A = [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8] - size = 15 - segt = SegmentTree(size) - segt.build(1, 1, size, A) - print(segt.query(1, 1, size, 4, 6)) - print(segt.query(1, 1, size, 7, 11)) - print(segt.query(1, 1, size, 7, 12)) - segt.update(1, 1, size, 1, 3, 111) - print(segt.query(1, 1, size, 1, 15)) - segt.update(1, 1, size, 7, 8, 235) - print(segt) diff --git a/data_structures/binary_tree/lowest_common_ancestor.py b/data_structures/binary_tree/lowest_common_ancestor.py deleted file mode 100644 index 651037703b95..000000000000 --- a/data_structures/binary_tree/lowest_common_ancestor.py +++ /dev/null @@ -1,117 +0,0 @@ -# https://en.wikipedia.org/wiki/Lowest_common_ancestor -# https://en.wikipedia.org/wiki/Breadth-first_search - -from __future__ import annotations - -from queue import Queue - - -def swap(a: int, b: int) -> tuple[int, int]: - """ - Return a tuple (b, a) when given two integers a and b - >>> swap(2,3) - (3, 2) - >>> swap(3,4) - (4, 3) - >>> swap(67, 12) - (12, 67) - """ - a ^= b - b ^= a - a ^= b - return a, b - - -def create_sparse(max_node: int, parent: list[list[int]]) -> list[list[int]]: - """ - creating sparse table which saves each nodes 2^i-th parent - """ - j = 1 - while (1 << j) < max_node: - for i in range(1, max_node + 1): - parent[j][i] = parent[j - 1][parent[j - 1][i]] - j += 1 - return parent - - -# returns lca of node u,v -def lowest_common_ancestor( - u: int, v: int, level: list[int], parent: list[list[int]] -) -> int: - # u must be deeper in the tree than v - if level[u] < level[v]: - u, v = swap(u, v) - # making depth of u same as depth of v - for i in range(18, -1, -1): - if level[u] - (1 << i) >= level[v]: - u = parent[i][u] - # at the same depth if u==v that mean lca is found - if u == v: - return u - # moving both nodes upwards till lca in found - for i in range(18, -1, -1): - if parent[i][u] not in [0, parent[i][v]]: - u, v = parent[i][u], parent[i][v] - # returning longest common ancestor of u,v - return parent[0][u] - - -# runs a breadth first search from root node of the tree -def breadth_first_search( - level: list[int], - parent: list[list[int]], - max_node: int, - graph: dict[int, list[int]], - root: int = 1, -) -> tuple[list[int], list[list[int]]]: - """ - sets every nodes direct parent - parent of root node is set to 0 - calculates depth of each node from root node - """ - level[root] = 0 - q: Queue[int] = Queue(maxsize=max_node) - q.put(root) - while q.qsize() != 0: - u = q.get() - for v in graph[u]: - if level[v] == -1: - level[v] = level[u] + 1 - q.put(v) - parent[0][v] = u - return level, parent - - -def main() -> None: - max_node = 13 - # initializing with 0 - parent = [[0 for _ in range(max_node + 10)] for _ in range(20)] - # initializing with -1 which means every node is unvisited - level = [-1 for _ in range(max_node + 10)] - graph: dict[int, list[int]] = { - 1: [2, 3, 4], - 2: [5], - 3: [6, 7], - 4: [8], - 5: [9, 10], - 6: [11], - 7: [], - 8: [12, 13], - 9: [], - 10: [], - 11: [], - 12: [], - 13: [], - } - level, parent = breadth_first_search(level, parent, max_node, graph, 1) - parent = create_sparse(max_node, parent) - print("LCA of node 1 and 3 is: ", lowest_common_ancestor(1, 3, level, parent)) - print("LCA of node 5 and 6 is: ", lowest_common_ancestor(5, 6, level, parent)) - print("LCA of node 7 and 11 is: ", lowest_common_ancestor(7, 11, level, parent)) - print("LCA of node 6 and 7 is: ", lowest_common_ancestor(6, 7, level, parent)) - print("LCA of node 4 and 12 is: ", lowest_common_ancestor(4, 12, level, parent)) - print("LCA of node 8 and 8 is: ", lowest_common_ancestor(8, 8, level, parent)) - - -if __name__ == "__main__": - main() diff --git a/data_structures/binary_tree/maximum_fenwick_tree.py b/data_structures/binary_tree/maximum_fenwick_tree.py deleted file mode 100644 index 84967a70cc73..000000000000 --- a/data_structures/binary_tree/maximum_fenwick_tree.py +++ /dev/null @@ -1,114 +0,0 @@ -class MaxFenwickTree: - """ - Maximum Fenwick Tree - - More info: https://cp-algorithms.com/data_structures/fenwick.html - --------- - >>> ft = MaxFenwickTree(5) - >>> ft.query(0, 5) - 0 - >>> ft.update(4, 100) - >>> ft.query(0, 5) - 100 - >>> ft.update(4, 0) - >>> ft.update(2, 20) - >>> ft.query(0, 5) - 20 - >>> ft.update(4, 10) - >>> ft.query(2, 5) - 20 - >>> ft.query(1, 5) - 20 - >>> ft.update(2, 0) - >>> ft.query(0, 5) - 10 - >>> ft = MaxFenwickTree(10000) - >>> ft.update(255, 30) - >>> ft.query(0, 10000) - 30 - >>> ft = MaxFenwickTree(6) - >>> ft.update(5, 1) - >>> ft.query(5, 6) - 1 - >>> ft = MaxFenwickTree(6) - >>> ft.update(0, 1000) - >>> ft.query(0, 1) - 1000 - """ - - def __init__(self, size: int) -> None: - """ - Create empty Maximum Fenwick Tree with specified size - - Parameters: - size: size of Array - - Returns: - None - """ - self.size = size - self.arr = [0] * size - self.tree = [0] * size - - @staticmethod - def get_next(index: int) -> int: - """ - Get next index in O(1) - """ - return index | (index + 1) - - @staticmethod - def get_prev(index: int) -> int: - """ - Get previous index in O(1) - """ - return (index & (index + 1)) - 1 - - def update(self, index: int, value: int) -> None: - """ - Set index to value in O(lg^2 N) - - Parameters: - index: index to update - value: value to set - - Returns: - None - """ - self.arr[index] = value - while index < self.size: - current_left_border = self.get_prev(index) + 1 - if current_left_border == index: - self.tree[index] = value - else: - self.tree[index] = max(value, current_left_border, index) - index = self.get_next(index) - - def query(self, left: int, right: int) -> int: - """ - Answer the query of maximum range [l, r) in O(lg^2 N) - - Parameters: - left: left index of query range (inclusive) - right: right index of query range (exclusive) - - Returns: - Maximum value of range [left, right) - """ - right -= 1 # Because of right is exclusive - result = 0 - while left <= right: - current_left = self.get_prev(right) - if left <= current_left: - result = max(result, self.tree[right]) - right = current_left - else: - result = max(result, self.arr[right]) - right -= 1 - return result - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/maximum_sum_bst.py b/data_structures/binary_tree/maximum_sum_bst.py deleted file mode 100644 index 7dadc7b95920..000000000000 --- a/data_structures/binary_tree/maximum_sum_bst.py +++ /dev/null @@ -1,78 +0,0 @@ -from __future__ import annotations - -import sys -from dataclasses import dataclass - -INT_MIN = -sys.maxsize + 1 -INT_MAX = sys.maxsize - 1 - - -@dataclass -class TreeNode: - val: int = 0 - left: TreeNode | None = None - right: TreeNode | None = None - - -def max_sum_bst(root: TreeNode | None) -> int: - """ - The solution traverses a binary tree to find the maximum sum of - keys in any subtree that is a Binary Search Tree (BST). It uses - recursion to validate BST properties and calculates sums, returning - the highest sum found among all valid BST subtrees. - - >>> t1 = TreeNode(4) - >>> t1.left = TreeNode(3) - >>> t1.left.left = TreeNode(1) - >>> t1.left.right = TreeNode(2) - >>> print(max_sum_bst(t1)) - 2 - >>> t2 = TreeNode(-4) - >>> t2.left = TreeNode(-2) - >>> t2.right = TreeNode(-5) - >>> print(max_sum_bst(t2)) - 0 - >>> t3 = TreeNode(1) - >>> t3.left = TreeNode(4) - >>> t3.left.left = TreeNode(2) - >>> t3.left.right = TreeNode(4) - >>> t3.right = TreeNode(3) - >>> t3.right.left = TreeNode(2) - >>> t3.right.right = TreeNode(5) - >>> t3.right.right.left = TreeNode(4) - >>> t3.right.right.right = TreeNode(6) - >>> print(max_sum_bst(t3)) - 20 - """ - ans: int = 0 - - def solver(node: TreeNode | None) -> tuple[bool, int, int, int]: - """ - Returns the maximum sum by making recursive calls - >>> t1 = TreeNode(1) - >>> print(solver(t1)) - 1 - """ - nonlocal ans - - if not node: - return True, INT_MAX, INT_MIN, 0 # Valid BST, min, max, sum - - is_left_valid, min_left, max_left, sum_left = solver(node.left) - is_right_valid, min_right, max_right, sum_right = solver(node.right) - - if is_left_valid and is_right_valid and max_left < node.val < min_right: - total_sum = sum_left + sum_right + node.val - ans = max(ans, total_sum) - return True, min(min_left, node.val), max(max_right, node.val), total_sum - - return False, -1, -1, -1 # Not a valid BST - - solver(root) - return ans - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/merge_two_binary_trees.py b/data_structures/binary_tree/merge_two_binary_trees.py deleted file mode 100644 index 6bbb30428704..000000000000 --- a/data_structures/binary_tree/merge_two_binary_trees.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/local/bin/python3 -""" -Problem Description: Given two binary tree, return the merged tree. -The rule for merging is that if two nodes overlap, then put the value sum of -both nodes to the new value of the merged node. Otherwise, the NOT null node -will be used as the node of new tree. -""" - -from __future__ import annotations - - -class Node: - """ - A binary node has value variable and pointers to its left and right node. - """ - - def __init__(self, value: int = 0) -> None: - self.value = value - self.left: Node | None = None - self.right: Node | None = None - - -def merge_two_binary_trees(tree1: Node | None, tree2: Node | None) -> Node | None: - """ - Returns root node of the merged tree. - - >>> tree1 = Node(5) - >>> tree1.left = Node(6) - >>> tree1.right = Node(7) - >>> tree1.left.left = Node(2) - >>> tree2 = Node(4) - >>> tree2.left = Node(5) - >>> tree2.right = Node(8) - >>> tree2.left.right = Node(1) - >>> tree2.right.right = Node(4) - >>> merged_tree = merge_two_binary_trees(tree1, tree2) - >>> print_preorder(merged_tree) - 9 - 11 - 2 - 1 - 15 - 4 - """ - if tree1 is None: - return tree2 - if tree2 is None: - return tree1 - - tree1.value = tree1.value + tree2.value - tree1.left = merge_two_binary_trees(tree1.left, tree2.left) - tree1.right = merge_two_binary_trees(tree1.right, tree2.right) - return tree1 - - -def print_preorder(root: Node | None) -> None: - """ - Print pre-order traversal of the tree. - - >>> root = Node(1) - >>> root.left = Node(2) - >>> root.right = Node(3) - >>> print_preorder(root) - 1 - 2 - 3 - >>> print_preorder(root.right) - 3 - """ - if root: - print(root.value) - print_preorder(root.left) - print_preorder(root.right) - - -if __name__ == "__main__": - tree1 = Node(1) - tree1.left = Node(2) - tree1.right = Node(3) - tree1.left.left = Node(4) - - tree2 = Node(2) - tree2.left = Node(4) - tree2.right = Node(6) - tree2.left.right = Node(9) - tree2.right.right = Node(5) - - print("Tree1 is: ") - print_preorder(tree1) - print("Tree2 is: ") - print_preorder(tree2) - merged_tree = merge_two_binary_trees(tree1, tree2) - print("Merged Tree is: ") - print_preorder(merged_tree) diff --git a/data_structures/binary_tree/mirror_binary_tree.py b/data_structures/binary_tree/mirror_binary_tree.py deleted file mode 100644 index 62e2f08dd4e0..000000000000 --- a/data_structures/binary_tree/mirror_binary_tree.py +++ /dev/null @@ -1,154 +0,0 @@ -""" -Given the root of a binary tree, mirror the tree, and return its root. - -Leetcode problem reference: https://leetcode.com/problems/mirror-binary-tree/ -""" - -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - """ - A Node has value variable and pointers to Nodes to its left and right. - """ - - value: int - left: Node | None = None - right: Node | None = None - - def __iter__(self) -> Iterator[int]: - if self.left: - yield from self.left - yield self.value - if self.right: - yield from self.right - - def __len__(self) -> int: - return sum(1 for _ in self) - - def mirror(self) -> Node: - """ - Mirror the binary tree rooted at this node by swapping left and right children. - - >>> tree = Node(0) - >>> list(tree) - [0] - >>> list(tree.mirror()) - [0] - >>> tree = Node(1, Node(0), Node(3, Node(2), Node(4, None, Node(5)))) - >>> tuple(tree) - (0, 1, 2, 3, 4, 5) - >>> tuple(tree.mirror()) - (5, 4, 3, 2, 1, 0) - """ - self.left, self.right = self.right, self.left - if self.left: - self.left.mirror() - if self.right: - self.right.mirror() - return self - - -def make_tree_seven() -> Node: - r""" - Return a binary tree with 7 nodes that looks like this: - 1 - / \ - 2 3 - / \ / \ - 4 5 6 7 - - >>> tree_seven = make_tree_seven() - >>> len(tree_seven) - 7 - >>> list(tree_seven) - [4, 2, 5, 1, 6, 3, 7] - """ - tree = Node(1) - tree.left = Node(2) - tree.right = Node(3) - tree.left.left = Node(4) - tree.left.right = Node(5) - tree.right.left = Node(6) - tree.right.right = Node(7) - return tree - - -def make_tree_nine() -> Node: - r""" - Return a binary tree with 9 nodes that looks like this: - 1 - / \ - 2 3 - / \ \ - 4 5 6 - / \ \ - 7 8 9 - - >>> tree_nine = make_tree_nine() - >>> len(tree_nine) - 9 - >>> list(tree_nine) - [7, 4, 8, 2, 5, 9, 1, 3, 6] - """ - tree = Node(1) - tree.left = Node(2) - tree.right = Node(3) - tree.left.left = Node(4) - tree.left.right = Node(5) - tree.right.right = Node(6) - tree.left.left.left = Node(7) - tree.left.left.right = Node(8) - tree.left.right.right = Node(9) - return tree - - -def main() -> None: - r""" - Mirror binary trees with the given root and returns the root - - >>> tree = make_tree_nine() - >>> tuple(tree) - (7, 4, 8, 2, 5, 9, 1, 3, 6) - >>> tuple(tree.mirror()) - (6, 3, 1, 9, 5, 2, 8, 4, 7) - - nine_tree: - 1 - / \ - 2 3 - / \ \ - 4 5 6 - / \ \ - 7 8 9 - - The mirrored tree looks like this: - 1 - / \ - 3 2 - / / \ - 6 5 4 - / / \ - 9 8 7 - """ - trees = {"zero": Node(0), "seven": make_tree_seven(), "nine": make_tree_nine()} - for name, tree in trees.items(): - print(f" The {name} tree: {tuple(tree)}") - # (0,) - # (4, 2, 5, 1, 6, 3, 7) - # (7, 4, 8, 2, 5, 9, 1, 3, 6) - print(f"Mirror of {name} tree: {tuple(tree.mirror())}") - # (0,) - # (7, 3, 6, 1, 5, 2, 4) - # (6, 3, 1, 9, 5, 2, 8, 4, 7) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/data_structures/binary_tree/non_recursive_segment_tree.py b/data_structures/binary_tree/non_recursive_segment_tree.py deleted file mode 100644 index ca0d5c111c4f..000000000000 --- a/data_structures/binary_tree/non_recursive_segment_tree.py +++ /dev/null @@ -1,163 +0,0 @@ -""" -A non-recursive Segment Tree implementation with range query and single element update, -works virtually with any list of the same type of elements with a "commutative" -combiner. - -Explanation: -https://www.geeksforgeeks.org/iterative-segment-tree-range-minimum-query/ -https://www.geeksforgeeks.org/segment-tree-efficient-implementation/ - ->>> SegmentTree([1, 2, 3], lambda a, b: a + b).query(0, 2) -6 ->>> SegmentTree([3, 1, 2], min).query(0, 2) -1 ->>> SegmentTree([2, 3, 1], max).query(0, 2) -3 ->>> st = SegmentTree([1, 5, 7, -1, 6], lambda a, b: a + b) ->>> st.update(1, -1) ->>> st.update(2, 3) ->>> st.query(1, 2) -2 ->>> st.query(1, 1) --1 ->>> st.update(4, 1) ->>> st.query(3, 4) -0 ->>> st = SegmentTree([[1, 2, 3], [3, 2, 1], [1, 1, 1]], lambda a, b: [a[i] + b[i] for i -... in range(len(a))]) ->>> st.query(0, 1) -[4, 4, 4] ->>> st.query(1, 2) -[4, 3, 2] ->>> st.update(1, [-1, -1, -1]) ->>> st.query(1, 2) -[0, 0, 0] ->>> st.query(0, 2) -[1, 2, 3] -""" - -from __future__ import annotations - -from collections.abc import Callable -from typing import Any, Generic, TypeVar - -T = TypeVar("T") - - -class SegmentTree(Generic[T]): - def __init__(self, arr: list[T], fnc: Callable[[T, T], T]) -> None: - """ - Segment Tree constructor, it works just with commutative combiner. - :param arr: list of elements for the segment tree - :param fnc: commutative function for combine two elements - - >>> SegmentTree(['a', 'b', 'c'], lambda a, b: f'{a}{b}').query(0, 2) - 'abc' - >>> SegmentTree([(1, 2), (2, 3), (3, 4)], - ... lambda a, b: (a[0] + b[0], a[1] + b[1])).query(0, 2) - (6, 9) - """ - any_type: Any | T = None - - self.N: int = len(arr) - self.st: list[T] = [any_type for _ in range(self.N)] + arr - self.fn = fnc - self.build() - - def build(self) -> None: - for p in range(self.N - 1, 0, -1): - self.st[p] = self.fn(self.st[p * 2], self.st[p * 2 + 1]) - - def update(self, p: int, v: T) -> None: - """ - Update an element in log(N) time - :param p: position to be update - :param v: new value - - >>> st = SegmentTree([3, 1, 2, 4], min) - >>> st.query(0, 3) - 1 - >>> st.update(2, -1) - >>> st.query(0, 3) - -1 - """ - p += self.N - self.st[p] = v - while p > 1: - p = p // 2 - self.st[p] = self.fn(self.st[p * 2], self.st[p * 2 + 1]) - - def query(self, left: int, right: int) -> T | None: - """ - Get range query value in log(N) time - :param left: left element index - :param right: right element index - :return: element combined in the range [left, right] - - >>> st = SegmentTree([1, 2, 3, 4], lambda a, b: a + b) - >>> st.query(0, 2) - 6 - >>> st.query(1, 2) - 5 - >>> st.query(0, 3) - 10 - >>> st.query(2, 3) - 7 - """ - left, right = left + self.N, right + self.N - - res: T | None = None - while left <= right: - if left % 2 == 1: - res = self.st[left] if res is None else self.fn(res, self.st[left]) - if right % 2 == 0: - res = self.st[right] if res is None else self.fn(res, self.st[right]) - left, right = (left + 1) // 2, (right - 1) // 2 - return res - - -if __name__ == "__main__": - from functools import reduce - - test_array = [1, 10, -2, 9, -3, 8, 4, -7, 5, 6, 11, -12] - - test_updates = { - 0: 7, - 1: 2, - 2: 6, - 3: -14, - 4: 5, - 5: 4, - 6: 7, - 7: -10, - 8: 9, - 9: 10, - 10: 12, - 11: 1, - } - - min_segment_tree = SegmentTree(test_array, min) - max_segment_tree = SegmentTree(test_array, max) - sum_segment_tree = SegmentTree(test_array, lambda a, b: a + b) - - def test_all_segments() -> None: - """ - Test all possible segments - """ - for i in range(len(test_array)): - for j in range(i, len(test_array)): - min_range = reduce(min, test_array[i : j + 1]) - max_range = reduce(max, test_array[i : j + 1]) - sum_range = reduce(lambda a, b: a + b, test_array[i : j + 1]) - assert min_range == min_segment_tree.query(i, j) - assert max_range == max_segment_tree.query(i, j) - assert sum_range == sum_segment_tree.query(i, j) - - test_all_segments() - - for index, value in test_updates.items(): - test_array[index] = value - min_segment_tree.update(index, value) - max_segment_tree.update(index, value) - sum_segment_tree.update(index, value) - test_all_segments() diff --git a/data_structures/binary_tree/number_of_possible_binary_trees.py b/data_structures/binary_tree/number_of_possible_binary_trees.py deleted file mode 100644 index b39cbafd0a61..000000000000 --- a/data_structures/binary_tree/number_of_possible_binary_trees.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -Hey, we are going to find an exciting number called Catalan number which is use to find -the number of possible binary search trees from tree of a given number of nodes. - -We will use the formula: t(n) = SUMMATION(i = 1 to n)t(i-1)t(n-i) - -Further details at Wikipedia: https://en.wikipedia.org/wiki/Catalan_number -""" - -""" -Our Contribution: -Basically we Create the 2 function: - 1. catalan_number(node_count: int) -> int - Returns the number of possible binary search trees for n nodes. - 2. binary_tree_count(node_count: int) -> int - Returns the number of possible binary trees for n nodes. -""" - - -def binomial_coefficient(n: int, k: int) -> int: - """ - Since Here we Find the Binomial Coefficient: - https://en.wikipedia.org/wiki/Binomial_coefficient - C(n,k) = n! / k!(n-k)! - :param n: 2 times of Number of nodes - :param k: Number of nodes - :return: Integer Value - - >>> binomial_coefficient(4, 2) - 6 - """ - result = 1 # To kept the Calculated Value - # Since C(n, k) = C(n, n-k) - k = min(k, n - k) - # Calculate C(n,k) - for i in range(k): - result *= n - i - result //= i + 1 - return result - - -def catalan_number(node_count: int) -> int: - """ - We can find Catalan number many ways but here we use Binomial Coefficient because it - does the job in O(n) - - return the Catalan number of n using 2nCn/(n+1). - :param n: number of nodes - :return: Catalan number of n nodes - - >>> catalan_number(5) - 42 - >>> catalan_number(6) - 132 - """ - return binomial_coefficient(2 * node_count, node_count) // (node_count + 1) - - -def factorial(n: int) -> int: - """ - Return the factorial of a number. - :param n: Number to find the Factorial of. - :return: Factorial of n. - - >>> import math - >>> all(factorial(i) == math.factorial(i) for i in range(10)) - True - >>> factorial(-5) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - ValueError: factorial() not defined for negative values - """ - if n < 0: - raise ValueError("factorial() not defined for negative values") - result = 1 - for i in range(1, n + 1): - result *= i - return result - - -def binary_tree_count(node_count: int) -> int: - """ - Return the number of possible of binary trees. - :param n: number of nodes - :return: Number of possible binary trees - - >>> binary_tree_count(5) - 5040 - >>> binary_tree_count(6) - 95040 - """ - return catalan_number(node_count) * factorial(node_count) - - -if __name__ == "__main__": - node_count = int(input("Enter the number of nodes: ").strip() or 0) - if node_count <= 0: - raise ValueError("We need some nodes to work with.") - print( - f"Given {node_count} nodes, there are {binary_tree_count(node_count)} " - f"binary trees and {catalan_number(node_count)} binary search trees." - ) diff --git a/data_structures/binary_tree/red_black_tree.py b/data_structures/binary_tree/red_black_tree.py deleted file mode 100644 index 752db1e7026c..000000000000 --- a/data_structures/binary_tree/red_black_tree.py +++ /dev/null @@ -1,716 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterator - - -class RedBlackTree: - """ - A Red-Black tree, which is a self-balancing BST (binary search - tree). - This tree has similar performance to AVL trees, but the balancing is - less strict, so it will perform faster for writing/deleting nodes - and slower for reading in the average case, though, because they're - both balanced binary search trees, both will get the same asymptotic - performance. - To read more about them, https://en.wikipedia.org/wiki/Red-black_tree - Unless otherwise specified, all asymptotic runtimes are specified in - terms of the size of the tree. - """ - - def __init__( - self, - label: int | None = None, - color: int = 0, - parent: RedBlackTree | None = None, - left: RedBlackTree | None = None, - right: RedBlackTree | None = None, - ) -> None: - """Initialize a new Red-Black Tree node with the given values: - label: The value associated with this node - color: 0 if black, 1 if red - parent: The parent to this node - left: This node's left child - right: This node's right child - """ - self.label = label - self.parent = parent - self.left = left - self.right = right - self.color = color - - # Here are functions which are specific to red-black trees - - def rotate_left(self) -> RedBlackTree: - """Rotate the subtree rooted at this node to the left and - returns the new root to this subtree. - Performing one rotation can be done in O(1). - """ - parent = self.parent - right = self.right - if right is None: - return self - self.right = right.left - if self.right: - self.right.parent = self - self.parent = right - right.left = self - if parent is not None: - if parent.left == self: - parent.left = right - else: - parent.right = right - right.parent = parent - return right - - def rotate_right(self) -> RedBlackTree: - """Rotate the subtree rooted at this node to the right and - returns the new root to this subtree. - Performing one rotation can be done in O(1). - """ - if self.left is None: - return self - parent = self.parent - left = self.left - self.left = left.right - if self.left: - self.left.parent = self - self.parent = left - left.right = self - if parent is not None: - if parent.right is self: - parent.right = left - else: - parent.left = left - left.parent = parent - return left - - def insert(self, label: int) -> RedBlackTree: - """Inserts label into the subtree rooted at self, performs any - rotations necessary to maintain balance, and then returns the - new root to this subtree (likely self). - This is guaranteed to run in O(log(n)) time. - """ - if self.label is None: - # Only possible with an empty tree - self.label = label - return self - if self.label == label: - return self - elif self.label > label: - if self.left: - self.left.insert(label) - else: - self.left = RedBlackTree(label, 1, self) - self.left._insert_repair() - elif self.right: - self.right.insert(label) - else: - self.right = RedBlackTree(label, 1, self) - self.right._insert_repair() - return self.parent or self - - def _insert_repair(self) -> None: - """Repair the coloring from inserting into a tree.""" - if self.parent is None: - # This node is the root, so it just needs to be black - self.color = 0 - elif color(self.parent) == 0: - # If the parent is black, then it just needs to be red - self.color = 1 - else: - uncle = self.parent.sibling - if color(uncle) == 0: - if self.is_left() and self.parent.is_right(): - self.parent.rotate_right() - if self.right: - self.right._insert_repair() - elif self.is_right() and self.parent.is_left(): - self.parent.rotate_left() - if self.left: - self.left._insert_repair() - elif self.is_left(): - if self.grandparent: - self.grandparent.rotate_right() - self.parent.color = 0 - if self.parent.right: - self.parent.right.color = 1 - else: - if self.grandparent: - self.grandparent.rotate_left() - self.parent.color = 0 - if self.parent.left: - self.parent.left.color = 1 - else: - self.parent.color = 0 - if uncle and self.grandparent: - uncle.color = 0 - self.grandparent.color = 1 - self.grandparent._insert_repair() - - def remove(self, label: int) -> RedBlackTree: - """Remove label from this tree.""" - if self.label == label: - if self.left and self.right: - # It's easier to balance a node with at most one child, - # so we replace this node with the greatest one less than - # it and remove that. - value = self.left.get_max() - if value is not None: - self.label = value - self.left.remove(value) - else: - # This node has at most one non-None child, so we don't - # need to replace - child = self.left or self.right - if self.color == 1: - # This node is red, and its child is black - # The only way this happens to a node with one child - # is if both children are None leaves. - # We can just remove this node and call it a day. - if self.parent: - if self.is_left(): - self.parent.left = None - else: - self.parent.right = None - # The node is black - elif child is None: - # This node and its child are black - if self.parent is None: - # The tree is now empty - return RedBlackTree(None) - else: - self._remove_repair() - if self.is_left(): - self.parent.left = None - else: - self.parent.right = None - self.parent = None - else: - # This node is black and its child is red - # Move the child node here and make it black - self.label = child.label - self.left = child.left - self.right = child.right - if self.left: - self.left.parent = self - if self.right: - self.right.parent = self - elif self.label is not None and self.label > label: - if self.left: - self.left.remove(label) - elif self.right: - self.right.remove(label) - return self.parent or self - - def _remove_repair(self) -> None: - """Repair the coloring of the tree that may have been messed up.""" - if ( - self.parent is None - or self.sibling is None - or self.parent.sibling is None - or self.grandparent is None - ): - return - if color(self.sibling) == 1: - self.sibling.color = 0 - self.parent.color = 1 - if self.is_left(): - self.parent.rotate_left() - else: - self.parent.rotate_right() - if ( - color(self.parent) == 0 - and color(self.sibling) == 0 - and color(self.sibling.left) == 0 - and color(self.sibling.right) == 0 - ): - self.sibling.color = 1 - self.parent._remove_repair() - return - if ( - color(self.parent) == 1 - and color(self.sibling) == 0 - and color(self.sibling.left) == 0 - and color(self.sibling.right) == 0 - ): - self.sibling.color = 1 - self.parent.color = 0 - return - if ( - self.is_left() - and color(self.sibling) == 0 - and color(self.sibling.right) == 0 - and color(self.sibling.left) == 1 - ): - self.sibling.rotate_right() - self.sibling.color = 0 - if self.sibling.right: - self.sibling.right.color = 1 - if ( - self.is_right() - and color(self.sibling) == 0 - and color(self.sibling.right) == 1 - and color(self.sibling.left) == 0 - ): - self.sibling.rotate_left() - self.sibling.color = 0 - if self.sibling.left: - self.sibling.left.color = 1 - if ( - self.is_left() - and color(self.sibling) == 0 - and color(self.sibling.right) == 1 - ): - self.parent.rotate_left() - self.grandparent.color = self.parent.color - self.parent.color = 0 - self.parent.sibling.color = 0 - if ( - self.is_right() - and color(self.sibling) == 0 - and color(self.sibling.left) == 1 - ): - self.parent.rotate_right() - self.grandparent.color = self.parent.color - self.parent.color = 0 - self.parent.sibling.color = 0 - - def check_color_properties(self) -> bool: - """Check the coloring of the tree, and return True iff the tree - is colored in a way which matches these five properties: - (wording stolen from wikipedia article) - 1. Each node is either red or black. - 2. The root node is black. - 3. All leaves are black. - 4. If a node is red, then both its children are black. - 5. Every path from any node to all of its descendent NIL nodes - has the same number of black nodes. - This function runs in O(n) time, because properties 4 and 5 take - that long to check. - """ - # I assume property 1 to hold because there is nothing that can - # make the color be anything other than 0 or 1. - # Property 2 - if self.color: - # The root was red - print("Property 2") - return False - # Property 3 does not need to be checked, because None is assumed - # to be black and is all the leaves. - # Property 4 - if not self.check_coloring(): - print("Property 4") - return False - # Property 5 - if self.black_height() is None: - print("Property 5") - return False - # All properties were met - return True - - def check_coloring(self) -> bool: - """A helper function to recursively check Property 4 of a - Red-Black Tree. See check_color_properties for more info. - """ - if self.color == 1 and 1 in (color(self.left), color(self.right)): - return False - if self.left and not self.left.check_coloring(): - return False - return not (self.right and not self.right.check_coloring()) - - def black_height(self) -> int | None: - """Returns the number of black nodes from this node to the - leaves of the tree, or None if there isn't one such value (the - tree is color incorrectly). - """ - if self is None or self.left is None or self.right is None: - # If we're already at a leaf, there is no path - return 1 - left = RedBlackTree.black_height(self.left) - right = RedBlackTree.black_height(self.right) - if left is None or right is None: - # There are issues with coloring below children nodes - return None - if left != right: - # The two children have unequal depths - return None - # Return the black depth of children, plus one if this node is - # black - return left + (1 - self.color) - - # Here are functions which are general to all binary search trees - - def __contains__(self, label: int) -> bool: - """Search through the tree for label, returning True iff it is - found somewhere in the tree. - Guaranteed to run in O(log(n)) time. - """ - return self.search(label) is not None - - def search(self, label: int) -> RedBlackTree | None: - """Search through the tree for label, returning its node if - it's found, and None otherwise. - This method is guaranteed to run in O(log(n)) time. - """ - if self.label == label: - return self - elif self.label is not None and label > self.label: - if self.right is None: - return None - else: - return self.right.search(label) - elif self.left is None: - return None - else: - return self.left.search(label) - - def floor(self, label: int) -> int | None: - """Returns the largest element in this tree which is at most label. - This method is guaranteed to run in O(log(n)) time.""" - if self.label == label: - return self.label - elif self.label is not None and self.label > label: - if self.left: - return self.left.floor(label) - else: - return None - else: - if self.right: - attempt = self.right.floor(label) - if attempt is not None: - return attempt - return self.label - - def ceil(self, label: int) -> int | None: - """Returns the smallest element in this tree which is at least label. - This method is guaranteed to run in O(log(n)) time. - """ - if self.label == label: - return self.label - elif self.label is not None and self.label < label: - if self.right: - return self.right.ceil(label) - else: - return None - else: - if self.left: - attempt = self.left.ceil(label) - if attempt is not None: - return attempt - return self.label - - def get_max(self) -> int | None: - """Returns the largest element in this tree. - This method is guaranteed to run in O(log(n)) time. - """ - if self.right: - # Go as far right as possible - return self.right.get_max() - else: - return self.label - - def get_min(self) -> int | None: - """Returns the smallest element in this tree. - This method is guaranteed to run in O(log(n)) time. - """ - if self.left: - # Go as far left as possible - return self.left.get_min() - else: - return self.label - - @property - def grandparent(self) -> RedBlackTree | None: - """Get the current node's grandparent, or None if it doesn't exist.""" - if self.parent is None: - return None - else: - return self.parent.parent - - @property - def sibling(self) -> RedBlackTree | None: - """Get the current node's sibling, or None if it doesn't exist.""" - if self.parent is None: - return None - elif self.parent.left is self: - return self.parent.right - else: - return self.parent.left - - def is_left(self) -> bool: - """Returns true iff this node is the left child of its parent.""" - if self.parent is None: - return False - return self.parent.left is self - - def is_right(self) -> bool: - """Returns true iff this node is the right child of its parent.""" - if self.parent is None: - return False - return self.parent.right is self - - def __bool__(self) -> bool: - return True - - def __len__(self) -> int: - """ - Return the number of nodes in this tree. - """ - ln = 1 - if self.left: - ln += len(self.left) - if self.right: - ln += len(self.right) - return ln - - def preorder_traverse(self) -> Iterator[int | None]: - yield self.label - if self.left: - yield from self.left.preorder_traverse() - if self.right: - yield from self.right.preorder_traverse() - - def inorder_traverse(self) -> Iterator[int | None]: - if self.left: - yield from self.left.inorder_traverse() - yield self.label - if self.right: - yield from self.right.inorder_traverse() - - def postorder_traverse(self) -> Iterator[int | None]: - if self.left: - yield from self.left.postorder_traverse() - if self.right: - yield from self.right.postorder_traverse() - yield self.label - - def __repr__(self) -> str: - from pprint import pformat - - if self.left is None and self.right is None: - return f"'{self.label} {(self.color and 'red') or 'blk'}'" - return pformat( - { - f"{self.label} {(self.color and 'red') or 'blk'}": ( - self.left, - self.right, - ) - }, - indent=1, - ) - - def __eq__(self, other: object) -> bool: - """Test if two trees are equal.""" - if not isinstance(other, RedBlackTree): - return NotImplemented - if self.label == other.label: - return self.left == other.left and self.right == other.right - else: - return False - - -def color(node: RedBlackTree | None) -> int: - """Returns the color of a node, allowing for None leaves.""" - if node is None: - return 0 - else: - return node.color - - -""" -Code for testing the various -functions of the red-black tree. -""" - - -def test_rotations() -> bool: - """Test that the rotate_left and rotate_right functions work.""" - # Make a tree to test on - tree = RedBlackTree(0) - tree.left = RedBlackTree(-10, parent=tree) - tree.right = RedBlackTree(10, parent=tree) - tree.left.left = RedBlackTree(-20, parent=tree.left) - tree.left.right = RedBlackTree(-5, parent=tree.left) - tree.right.left = RedBlackTree(5, parent=tree.right) - tree.right.right = RedBlackTree(20, parent=tree.right) - # Make the right rotation - left_rot = RedBlackTree(10) - left_rot.left = RedBlackTree(0, parent=left_rot) - left_rot.left.left = RedBlackTree(-10, parent=left_rot.left) - left_rot.left.right = RedBlackTree(5, parent=left_rot.left) - left_rot.left.left.left = RedBlackTree(-20, parent=left_rot.left.left) - left_rot.left.left.right = RedBlackTree(-5, parent=left_rot.left.left) - left_rot.right = RedBlackTree(20, parent=left_rot) - tree = tree.rotate_left() - if tree != left_rot: - return False - tree = tree.rotate_right() - tree = tree.rotate_right() - # Make the left rotation - right_rot = RedBlackTree(-10) - right_rot.left = RedBlackTree(-20, parent=right_rot) - right_rot.right = RedBlackTree(0, parent=right_rot) - right_rot.right.left = RedBlackTree(-5, parent=right_rot.right) - right_rot.right.right = RedBlackTree(10, parent=right_rot.right) - right_rot.right.right.left = RedBlackTree(5, parent=right_rot.right.right) - right_rot.right.right.right = RedBlackTree(20, parent=right_rot.right.right) - return tree == right_rot - - -def test_insertion_speed() -> bool: - """Test that the tree balances inserts to O(log(n)) by doing a lot - of them. - """ - tree = RedBlackTree(-1) - for i in range(300000): - tree = tree.insert(i) - return True - - -def test_insert() -> bool: - """Test the insert() method of the tree correctly balances, colors, - and inserts. - """ - tree = RedBlackTree(0) - tree.insert(8) - tree.insert(-8) - tree.insert(4) - tree.insert(12) - tree.insert(10) - tree.insert(11) - ans = RedBlackTree(0, 0) - ans.left = RedBlackTree(-8, 0, ans) - ans.right = RedBlackTree(8, 1, ans) - ans.right.left = RedBlackTree(4, 0, ans.right) - ans.right.right = RedBlackTree(11, 0, ans.right) - ans.right.right.left = RedBlackTree(10, 1, ans.right.right) - ans.right.right.right = RedBlackTree(12, 1, ans.right.right) - return tree == ans - - -def test_insert_and_search() -> bool: - """Tests searching through the tree for values.""" - tree = RedBlackTree(0) - tree.insert(8) - tree.insert(-8) - tree.insert(4) - tree.insert(12) - tree.insert(10) - tree.insert(11) - if any(i in tree for i in (5, -6, -10, 13)): - # Found something not in there - return False - # Find all these things in there - return all(i in tree for i in (11, 12, -8, 0)) - - -def test_insert_delete() -> bool: - """Test the insert() and delete() method of the tree, verifying the - insertion and removal of elements, and the balancing of the tree. - """ - tree = RedBlackTree(0) - tree = tree.insert(-12) - tree = tree.insert(8) - tree = tree.insert(-8) - tree = tree.insert(15) - tree = tree.insert(4) - tree = tree.insert(12) - tree = tree.insert(10) - tree = tree.insert(9) - tree = tree.insert(11) - tree = tree.remove(15) - tree = tree.remove(-12) - tree = tree.remove(9) - if not tree.check_color_properties(): - return False - return list(tree.inorder_traverse()) == [-8, 0, 4, 8, 10, 11, 12] - - -def test_floor_ceil() -> bool: - """Tests the floor and ceiling functions in the tree.""" - tree = RedBlackTree(0) - tree.insert(-16) - tree.insert(16) - tree.insert(8) - tree.insert(24) - tree.insert(20) - tree.insert(22) - tuples = [(-20, None, -16), (-10, -16, 0), (8, 8, 8), (50, 24, None)] - for val, floor, ceil in tuples: - if tree.floor(val) != floor or tree.ceil(val) != ceil: - return False - return True - - -def test_min_max() -> bool: - """Tests the min and max functions in the tree.""" - tree = RedBlackTree(0) - tree.insert(-16) - tree.insert(16) - tree.insert(8) - tree.insert(24) - tree.insert(20) - tree.insert(22) - return not (tree.get_max() != 22 or tree.get_min() != -16) - - -def test_tree_traversal() -> bool: - """Tests the three different tree traversal functions.""" - tree = RedBlackTree(0) - tree = tree.insert(-16) - tree.insert(16) - tree.insert(8) - tree.insert(24) - tree.insert(20) - tree.insert(22) - if list(tree.inorder_traverse()) != [-16, 0, 8, 16, 20, 22, 24]: - return False - if list(tree.preorder_traverse()) != [0, -16, 16, 8, 22, 20, 24]: - return False - return list(tree.postorder_traverse()) == [-16, 8, 20, 24, 22, 16, 0] - - -def test_tree_chaining() -> bool: - """Tests the three different tree chaining functions.""" - tree = RedBlackTree(0) - tree = tree.insert(-16).insert(16).insert(8).insert(24).insert(20).insert(22) - if list(tree.inorder_traverse()) != [-16, 0, 8, 16, 20, 22, 24]: - return False - if list(tree.preorder_traverse()) != [0, -16, 16, 8, 22, 20, 24]: - return False - return list(tree.postorder_traverse()) == [-16, 8, 20, 24, 22, 16, 0] - - -def print_results(msg: str, passes: bool) -> None: - print(str(msg), "works!" if passes else "doesn't work :(") - - -def pytests() -> None: - assert test_rotations() - assert test_insert() - assert test_insert_and_search() - assert test_insert_delete() - assert test_floor_ceil() - assert test_tree_traversal() - assert test_tree_chaining() - - -def main() -> None: - """ - >>> pytests() - """ - print_results("Rotating right and left", test_rotations()) - print_results("Inserting", test_insert()) - print_results("Searching", test_insert_and_search()) - print_results("Deleting", test_insert_delete()) - print_results("Floor and ceil", test_floor_ceil()) - print_results("Tree traversal", test_tree_traversal()) - print_results("Tree traversal", test_tree_chaining()) - print("Testing tree balancing...") - print("This should only be a few seconds.") - test_insertion_speed() - print("Done!") - - -if __name__ == "__main__": - main() diff --git a/data_structures/binary_tree/segment_tree.py b/data_structures/binary_tree/segment_tree.py deleted file mode 100644 index 084fcf84955d..000000000000 --- a/data_structures/binary_tree/segment_tree.py +++ /dev/null @@ -1,116 +0,0 @@ -import math - - -class SegmentTree: - def __init__(self, a): - self.A = a - self.N = len(self.A) - self.st = [0] * ( - 4 * self.N - ) # approximate the overall size of segment tree with array N - if self.N: - self.build(1, 0, self.N - 1) - - def left(self, idx): - """ - Returns the left child index for a given index in a binary tree. - - >>> s = SegmentTree([1, 2, 3]) - >>> s.left(1) - 2 - >>> s.left(2) - 4 - """ - return idx * 2 - - def right(self, idx): - """ - Returns the right child index for a given index in a binary tree. - - >>> s = SegmentTree([1, 2, 3]) - >>> s.right(1) - 3 - >>> s.right(2) - 5 - """ - return idx * 2 + 1 - - def build(self, idx, left, right): - if left == right: - self.st[idx] = self.A[left] - else: - mid = (left + right) // 2 - self.build(self.left(idx), left, mid) - self.build(self.right(idx), mid + 1, right) - self.st[idx] = max(self.st[self.left(idx)], self.st[self.right(idx)]) - - def update(self, a, b, val): - """ - Update the values in the segment tree in the range [a,b] with the given value. - - >>> s = SegmentTree([1, 2, 3, 4, 5]) - >>> s.update(2, 4, 10) - True - >>> s.query(1, 5) - 10 - """ - return self.update_recursive(1, 0, self.N - 1, a - 1, b - 1, val) - - def update_recursive(self, idx, left, right, a, b, val): - """ - update(1, 1, N, a, b, v) for update val v to [a,b] - """ - if right < a or left > b: - return True - if left == right: - self.st[idx] = val - return True - mid = (left + right) // 2 - self.update_recursive(self.left(idx), left, mid, a, b, val) - self.update_recursive(self.right(idx), mid + 1, right, a, b, val) - self.st[idx] = max(self.st[self.left(idx)], self.st[self.right(idx)]) - return True - - def query(self, a, b): - """ - Query the maximum value in the range [a,b]. - - >>> s = SegmentTree([1, 2, 3, 4, 5]) - >>> s.query(1, 3) - 3 - >>> s.query(1, 5) - 5 - """ - return self.query_recursive(1, 0, self.N - 1, a - 1, b - 1) - - def query_recursive(self, idx, left, right, a, b): - """ - query(1, 1, N, a, b) for query max of [a,b] - """ - if right < a or left > b: - return -math.inf - if left >= a and right <= b: - return self.st[idx] - mid = (left + right) // 2 - q1 = self.query_recursive(self.left(idx), left, mid, a, b) - q2 = self.query_recursive(self.right(idx), mid + 1, right, a, b) - return max(q1, q2) - - def show_data(self): - show_list = [] - for i in range(1, self.N + 1): - show_list += [self.query(i, i)] - print(show_list) - - -if __name__ == "__main__": - A = [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8] - N = 15 - segt = SegmentTree(A) - print(segt.query(4, 6)) - print(segt.query(7, 11)) - print(segt.query(7, 12)) - segt.update(1, 3, 111) - print(segt.query(1, 15)) - segt.update(7, 8, 235) - segt.show_data() diff --git a/data_structures/binary_tree/segment_tree_other.py b/data_structures/binary_tree/segment_tree_other.py deleted file mode 100644 index 95f21ddd4777..000000000000 --- a/data_structures/binary_tree/segment_tree_other.py +++ /dev/null @@ -1,237 +0,0 @@ -""" -Segment_tree creates a segment tree with a given array and function, -allowing queries to be done later in log(N) time -function takes 2 values and returns a same type value -""" - -from collections.abc import Sequence -from queue import Queue - - -class SegmentTreeNode: - def __init__(self, start, end, val, left=None, right=None): - self.start = start - self.end = end - self.val = val - self.mid = (start + end) // 2 - self.left = left - self.right = right - - def __repr__(self): - return f"SegmentTreeNode(start={self.start}, end={self.end}, val={self.val})" - - -class SegmentTree: - """ - >>> import operator - >>> num_arr = SegmentTree([2, 1, 5, 3, 4], operator.add) - >>> tuple(num_arr.traverse()) # doctest: +NORMALIZE_WHITESPACE - (SegmentTreeNode(start=0, end=4, val=15), - SegmentTreeNode(start=0, end=2, val=8), - SegmentTreeNode(start=3, end=4, val=7), - SegmentTreeNode(start=0, end=1, val=3), - SegmentTreeNode(start=2, end=2, val=5), - SegmentTreeNode(start=3, end=3, val=3), - SegmentTreeNode(start=4, end=4, val=4), - SegmentTreeNode(start=0, end=0, val=2), - SegmentTreeNode(start=1, end=1, val=1)) - >>> - >>> num_arr.update(1, 5) - >>> tuple(num_arr.traverse()) # doctest: +NORMALIZE_WHITESPACE - (SegmentTreeNode(start=0, end=4, val=19), - SegmentTreeNode(start=0, end=2, val=12), - SegmentTreeNode(start=3, end=4, val=7), - SegmentTreeNode(start=0, end=1, val=7), - SegmentTreeNode(start=2, end=2, val=5), - SegmentTreeNode(start=3, end=3, val=3), - SegmentTreeNode(start=4, end=4, val=4), - SegmentTreeNode(start=0, end=0, val=2), - SegmentTreeNode(start=1, end=1, val=5)) - >>> - >>> num_arr.query_range(3, 4) - 7 - >>> num_arr.query_range(2, 2) - 5 - >>> num_arr.query_range(1, 3) - 13 - >>> - >>> max_arr = SegmentTree([2, 1, 5, 3, 4], max) - >>> for node in max_arr.traverse(): - ... print(node) - ... - SegmentTreeNode(start=0, end=4, val=5) - SegmentTreeNode(start=0, end=2, val=5) - SegmentTreeNode(start=3, end=4, val=4) - SegmentTreeNode(start=0, end=1, val=2) - SegmentTreeNode(start=2, end=2, val=5) - SegmentTreeNode(start=3, end=3, val=3) - SegmentTreeNode(start=4, end=4, val=4) - SegmentTreeNode(start=0, end=0, val=2) - SegmentTreeNode(start=1, end=1, val=1) - >>> - >>> max_arr.update(1, 5) - >>> for node in max_arr.traverse(): - ... print(node) - ... - SegmentTreeNode(start=0, end=4, val=5) - SegmentTreeNode(start=0, end=2, val=5) - SegmentTreeNode(start=3, end=4, val=4) - SegmentTreeNode(start=0, end=1, val=5) - SegmentTreeNode(start=2, end=2, val=5) - SegmentTreeNode(start=3, end=3, val=3) - SegmentTreeNode(start=4, end=4, val=4) - SegmentTreeNode(start=0, end=0, val=2) - SegmentTreeNode(start=1, end=1, val=5) - >>> - >>> max_arr.query_range(3, 4) - 4 - >>> max_arr.query_range(2, 2) - 5 - >>> max_arr.query_range(1, 3) - 5 - >>> - >>> min_arr = SegmentTree([2, 1, 5, 3, 4], min) - >>> for node in min_arr.traverse(): - ... print(node) - ... - SegmentTreeNode(start=0, end=4, val=1) - SegmentTreeNode(start=0, end=2, val=1) - SegmentTreeNode(start=3, end=4, val=3) - SegmentTreeNode(start=0, end=1, val=1) - SegmentTreeNode(start=2, end=2, val=5) - SegmentTreeNode(start=3, end=3, val=3) - SegmentTreeNode(start=4, end=4, val=4) - SegmentTreeNode(start=0, end=0, val=2) - SegmentTreeNode(start=1, end=1, val=1) - >>> - >>> min_arr.update(1, 5) - >>> for node in min_arr.traverse(): - ... print(node) - ... - SegmentTreeNode(start=0, end=4, val=2) - SegmentTreeNode(start=0, end=2, val=2) - SegmentTreeNode(start=3, end=4, val=3) - SegmentTreeNode(start=0, end=1, val=2) - SegmentTreeNode(start=2, end=2, val=5) - SegmentTreeNode(start=3, end=3, val=3) - SegmentTreeNode(start=4, end=4, val=4) - SegmentTreeNode(start=0, end=0, val=2) - SegmentTreeNode(start=1, end=1, val=5) - >>> - >>> min_arr.query_range(3, 4) - 3 - >>> min_arr.query_range(2, 2) - 5 - >>> min_arr.query_range(1, 3) - 3 - >>> - """ - - def __init__(self, collection: Sequence, function): - self.collection = collection - self.fn = function - if self.collection: - self.root = self._build_tree(0, len(collection) - 1) - - def update(self, i, val): - """ - Update an element in log(N) time - :param i: position to be update - :param val: new value - >>> import operator - >>> num_arr = SegmentTree([2, 1, 5, 3, 4], operator.add) - >>> num_arr.update(1, 5) - >>> num_arr.query_range(1, 3) - 13 - """ - self._update_tree(self.root, i, val) - - def query_range(self, i, j): - """ - Get range query value in log(N) time - :param i: left element index - :param j: right element index - :return: element combined in the range [i, j] - >>> import operator - >>> num_arr = SegmentTree([2, 1, 5, 3, 4], operator.add) - >>> num_arr.update(1, 5) - >>> num_arr.query_range(3, 4) - 7 - >>> num_arr.query_range(2, 2) - 5 - >>> num_arr.query_range(1, 3) - 13 - >>> - """ - return self._query_range(self.root, i, j) - - def _build_tree(self, start, end): - if start == end: - return SegmentTreeNode(start, end, self.collection[start]) - mid = (start + end) // 2 - left = self._build_tree(start, mid) - right = self._build_tree(mid + 1, end) - return SegmentTreeNode(start, end, self.fn(left.val, right.val), left, right) - - def _update_tree(self, node, i, val): - if node.start == i and node.end == i: - node.val = val - return - if i <= node.mid: - self._update_tree(node.left, i, val) - else: - self._update_tree(node.right, i, val) - node.val = self.fn(node.left.val, node.right.val) - - def _query_range(self, node, i, j): - if node.start == i and node.end == j: - return node.val - - if i <= node.mid: - if j <= node.mid: - # range in left child tree - return self._query_range(node.left, i, j) - else: - # range in left child tree and right child tree - return self.fn( - self._query_range(node.left, i, node.mid), - self._query_range(node.right, node.mid + 1, j), - ) - else: - # range in right child tree - return self._query_range(node.right, i, j) - - def traverse(self): - if self.root is not None: - queue = Queue() - queue.put(self.root) - while not queue.empty(): - node = queue.get() - yield node - - if node.left is not None: - queue.put(node.left) - - if node.right is not None: - queue.put(node.right) - - -if __name__ == "__main__": - import operator - - for fn in [operator.add, max, min]: - print("*" * 50) - arr = SegmentTree([2, 1, 5, 3, 4], fn) - for node in arr.traverse(): - print(node) - print() - - arr.update(1, 5) - for node in arr.traverse(): - print(node) - print() - - print(arr.query_range(3, 4)) # 7 - print(arr.query_range(2, 2)) # 5 - print(arr.query_range(1, 3)) # 13 - print() diff --git a/data_structures/binary_tree/serialize_deserialize_binary_tree.py b/data_structures/binary_tree/serialize_deserialize_binary_tree.py deleted file mode 100644 index 7d3e0c61f96d..000000000000 --- a/data_structures/binary_tree/serialize_deserialize_binary_tree.py +++ /dev/null @@ -1,140 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class TreeNode: - """ - A binary tree node has a value, left child, and right child. - - Props: - value: The value of the node. - left: The left child of the node. - right: The right child of the node. - """ - - value: int = 0 - left: TreeNode | None = None - right: TreeNode | None = None - - def __post_init__(self): - if not isinstance(self.value, int): - raise TypeError("Value must be an integer.") - - def __iter__(self) -> Iterator[TreeNode]: - """ - Iterate through the tree in preorder. - - Returns: - An iterator of the tree nodes. - - >>> list(TreeNode(1)) - [1,null,null] - >>> tuple(TreeNode(1, TreeNode(2), TreeNode(3))) - (1,2,null,null,3,null,null, 2,null,null, 3,null,null) - """ - yield self - yield from self.left or () - yield from self.right or () - - def __len__(self) -> int: - """ - Count the number of nodes in the tree. - - Returns: - The number of nodes in the tree. - - >>> len(TreeNode(1)) - 1 - >>> len(TreeNode(1, TreeNode(2), TreeNode(3))) - 3 - """ - return sum(1 for _ in self) - - def __repr__(self) -> str: - """ - Represent the tree as a string. - - Returns: - A string representation of the tree. - - >>> repr(TreeNode(1)) - '1,null,null' - >>> repr(TreeNode(1, TreeNode(2), TreeNode(3))) - '1,2,null,null,3,null,null' - >>> repr(TreeNode(1, TreeNode(2), TreeNode(3, TreeNode(4), TreeNode(5)))) - '1,2,null,null,3,4,null,null,5,null,null' - """ - return f"{self.value},{self.left!r},{self.right!r}".replace("None", "null") - - @classmethod - def five_tree(cls) -> TreeNode: - """ - >>> repr(TreeNode.five_tree()) - '1,2,null,null,3,4,null,null,5,null,null' - """ - root = TreeNode(1) - root.left = TreeNode(2) - root.right = TreeNode(3) - root.right.left = TreeNode(4) - root.right.right = TreeNode(5) - return root - - -def deserialize(data: str) -> TreeNode | None: - """ - Deserialize a string to a binary tree. - - Args: - data(str): The serialized string. - - Returns: - The root of the binary tree. - - >>> root = TreeNode.five_tree() - >>> serialzed_data = repr(root) - >>> deserialized = deserialize(serialzed_data) - >>> root == deserialized - True - >>> root is deserialized # two separate trees - False - >>> root.right.right.value = 6 - >>> root == deserialized - False - >>> serialzed_data = repr(root) - >>> deserialized = deserialize(serialzed_data) - >>> root == deserialized - True - >>> deserialize("") - Traceback (most recent call last): - ... - ValueError: Data cannot be empty. - """ - - if not data: - raise ValueError("Data cannot be empty.") - - # Split the serialized string by a comma to get node values - nodes = data.split(",") - - def build_tree() -> TreeNode | None: - # Get the next value from the list - value = nodes.pop(0) - - if value == "null": - return None - - node = TreeNode(int(value)) - node.left = build_tree() # Recursively build left subtree - node.right = build_tree() # Recursively build right subtree - return node - - return build_tree() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/binary_tree/symmetric_tree.py b/data_structures/binary_tree/symmetric_tree.py deleted file mode 100644 index 2bfeac98b2c9..000000000000 --- a/data_structures/binary_tree/symmetric_tree.py +++ /dev/null @@ -1,159 +0,0 @@ -""" -Given the root of a binary tree, check whether it is a mirror of itself -(i.e., symmetric around its center). - -Leetcode reference: https://leetcode.com/problems/symmetric-tree/ -""" - -from __future__ import annotations - -from dataclasses import dataclass - - -@dataclass -class Node: - """ - A Node represents an element of a binary tree, which contains: - - Attributes: - data: The value stored in the node (int). - left: Pointer to the left child node (Node or None). - right: Pointer to the right child node (Node or None). - - Example: - >>> node = Node(1, Node(2), Node(3)) - >>> node.data - 1 - >>> node.left.data - 2 - >>> node.right.data - 3 - """ - - data: int - left: Node | None = None - right: Node | None = None - - -def make_symmetric_tree() -> Node: - r""" - Create a symmetric tree for testing. - - The tree looks like this: - 1 - / \ - 2 2 - / \ / \ - 3 4 4 3 - - Returns: - Node: Root node of a symmetric tree. - - Example: - >>> tree = make_symmetric_tree() - >>> tree.data - 1 - >>> tree.left.data == tree.right.data - True - >>> tree.left.left.data == tree.right.right.data - True - """ - root = Node(1) - root.left = Node(2) - root.right = Node(2) - root.left.left = Node(3) - root.left.right = Node(4) - root.right.left = Node(4) - root.right.right = Node(3) - return root - - -def make_asymmetric_tree() -> Node: - r""" - Create an asymmetric tree for testing. - - The tree looks like this: - 1 - / \ - 2 2 - / \ / \ - 3 4 3 4 - - Returns: - Node: Root node of an asymmetric tree. - - Example: - >>> tree = make_asymmetric_tree() - >>> tree.data - 1 - >>> tree.left.data == tree.right.data - True - >>> tree.left.left.data == tree.right.right.data - False - """ - root = Node(1) - root.left = Node(2) - root.right = Node(2) - root.left.left = Node(3) - root.left.right = Node(4) - root.right.left = Node(3) - root.right.right = Node(4) - return root - - -def is_symmetric_tree(tree: Node) -> bool: - """ - Check if a binary tree is symmetric (i.e., a mirror of itself). - - Parameters: - tree: The root node of the binary tree. - - Returns: - bool: True if the tree is symmetric, False otherwise. - - Example: - >>> is_symmetric_tree(make_symmetric_tree()) - True - >>> is_symmetric_tree(make_asymmetric_tree()) - False - """ - if tree: - return is_mirror(tree.left, tree.right) - return True # An empty tree is considered symmetric. - - -def is_mirror(left: Node | None, right: Node | None) -> bool: - """ - Check if two subtrees are mirror images of each other. - - Parameters: - left: The root node of the left subtree. - right: The root node of the right subtree. - - Returns: - bool: True if the two subtrees are mirrors of each other, False otherwise. - - Example: - >>> tree1 = make_symmetric_tree() - >>> is_mirror(tree1.left, tree1.right) - True - >>> tree2 = make_asymmetric_tree() - >>> is_mirror(tree2.left, tree2.right) - False - """ - if left is None and right is None: - # Both sides are empty, which is symmetric. - return True - if left is None or right is None: - # One side is empty while the other is not, which is not symmetric. - return False - if left.data == right.data: - # The values match, so check the subtrees recursively. - return is_mirror(left.left, right.right) and is_mirror(left.right, right.left) - return False - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/binary_tree/treap.py b/data_structures/binary_tree/treap.py deleted file mode 100644 index 3114c6fa1c26..000000000000 --- a/data_structures/binary_tree/treap.py +++ /dev/null @@ -1,179 +0,0 @@ -from __future__ import annotations - -from random import random - - -class Node: - """ - Treap's node - Treap is a binary tree by value and heap by priority - """ - - def __init__(self, value: int | None = None): - self.value = value - self.prior = random() - self.left: Node | None = None - self.right: Node | None = None - - def __repr__(self) -> str: - from pprint import pformat - - if self.left is None and self.right is None: - return f"'{self.value}: {self.prior:.5}'" - else: - return pformat( - {f"{self.value}: {self.prior:.5}": (self.left, self.right)}, indent=1 - ) - - def __str__(self) -> str: - value = str(self.value) + " " - left = str(self.left or "") - right = str(self.right or "") - return value + left + right - - -def split(root: Node | None, value: int) -> tuple[Node | None, Node | None]: - """ - We split current tree into 2 trees with value: - - Left tree contains all values less than split value. - Right tree contains all values greater or equal, than split value - """ - if root is None or root.value is None: # None tree is split into 2 Nones - return None, None - elif value < root.value: - """ - Right tree's root will be current node. - Now we split(with the same value) current node's left son - Left tree: left part of that split - Right tree's left son: right part of that split - """ - left, root.left = split(root.left, value) - return left, root - else: - """ - Just symmetric to previous case - """ - root.right, right = split(root.right, value) - return root, right - - -def merge(left: Node | None, right: Node | None) -> Node | None: - """ - We merge 2 trees into one. - Note: all left tree's values must be less than all right tree's - """ - if (not left) or (not right): # If one node is None, return the other - return left or right - elif left.prior < right.prior: - """ - Left will be root because it has more priority - Now we need to merge left's right son and right tree - """ - left.right = merge(left.right, right) - return left - else: - """ - Symmetric as well - """ - right.left = merge(left, right.left) - return right - - -def insert(root: Node | None, value: int) -> Node | None: - """ - Insert element - - Split current tree with a value into left, right, - Insert new node into the middle - Merge left, node, right into root - """ - node = Node(value) - left, right = split(root, value) - return merge(merge(left, node), right) - - -def erase(root: Node | None, value: int) -> Node | None: - """ - Erase element - - Split all nodes with values less into left, - Split all nodes with values greater into right. - Merge left, right - """ - left, right = split(root, value - 1) - _, right = split(right, value) - return merge(left, right) - - -def inorder(root: Node | None) -> None: - """ - Just recursive print of a tree - """ - if not root: # None - return - else: - inorder(root.left) - print(root.value, end=",") - inorder(root.right) - - -def interact_treap(root: Node | None, args: str) -> Node | None: - """ - Commands: - + value to add value into treap - - value to erase all nodes with value - - >>> root = interact_treap(None, "+1") - >>> inorder(root) - 1, - >>> root = interact_treap(root, "+3 +5 +17 +19 +2 +16 +4 +0") - >>> inorder(root) - 0,1,2,3,4,5,16,17,19, - >>> root = interact_treap(root, "+4 +4 +4") - >>> inorder(root) - 0,1,2,3,4,4,4,4,5,16,17,19, - >>> root = interact_treap(root, "-0") - >>> inorder(root) - 1,2,3,4,4,4,4,5,16,17,19, - >>> root = interact_treap(root, "-4") - >>> inorder(root) - 1,2,3,5,16,17,19, - >>> root = interact_treap(root, "=0") - Unknown command - """ - for arg in args.split(): - if arg[0] == "+": - root = insert(root, int(arg[1:])) - - elif arg[0] == "-": - root = erase(root, int(arg[1:])) - - else: - print("Unknown command") - - return root - - -def main() -> None: - """After each command, program prints treap""" - root = None - print( - "enter numbers to create a tree, + value to add value into treap, " - "- value to erase all nodes with value. 'q' to quit. " - ) - - args = input() - while args != "q": - root = interact_treap(root, args) - print(root) - args = input() - - print("good by!") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/data_structures/binary_tree/wavelet_tree.py b/data_structures/binary_tree/wavelet_tree.py deleted file mode 100644 index 2da571e8d326..000000000000 --- a/data_structures/binary_tree/wavelet_tree.py +++ /dev/null @@ -1,210 +0,0 @@ -""" -Wavelet tree is a data-structure designed to efficiently answer various range queries -for arrays. Wavelets trees are different from other binary trees in the sense that -the nodes are split based on the actual values of the elements and not on indices, -such as the with segment trees or fenwick trees. You can read more about them here: -1. https://users.dcc.uchile.cl/~jperez/papers/ioiconf16.pdf -2. https://www.youtube.com/watch?v=4aSv9PcecDw&t=811s -3. https://www.youtube.com/watch?v=CybAgVF-MMc&t=1178s -""" - -from __future__ import annotations - -test_array = [2, 1, 4, 5, 6, 0, 8, 9, 1, 2, 0, 6, 4, 2, 0, 6, 5, 3, 2, 7] - - -class Node: - def __init__(self, length: int) -> None: - self.minn: int = -1 - self.maxx: int = -1 - self.map_left: list[int] = [-1] * length - self.left: Node | None = None - self.right: Node | None = None - - def __repr__(self) -> str: - """ - >>> node = Node(length=27) - >>> repr(node) - 'Node(min_value=-1 max_value=-1)' - >>> repr(node) == str(node) - True - """ - return f"Node(min_value={self.minn} max_value={self.maxx})" - - -def build_tree(arr: list[int]) -> Node | None: - """ - Builds the tree for arr and returns the root - of the constructed tree - - >>> build_tree(test_array) - Node(min_value=0 max_value=9) - """ - root = Node(len(arr)) - root.minn, root.maxx = min(arr), max(arr) - # Leaf node case where the node contains only one unique value - if root.minn == root.maxx: - return root - """ - Take the mean of min and max element of arr as the pivot and - partition arr into left_arr and right_arr with all elements <= pivot in the - left_arr and the rest in right_arr, maintaining the order of the elements, - then recursively build trees for left_arr and right_arr - """ - pivot = (root.minn + root.maxx) // 2 - - left_arr: list[int] = [] - right_arr: list[int] = [] - - for index, num in enumerate(arr): - if num <= pivot: - left_arr.append(num) - else: - right_arr.append(num) - root.map_left[index] = len(left_arr) - root.left = build_tree(left_arr) - root.right = build_tree(right_arr) - return root - - -def rank_till_index(node: Node | None, num: int, index: int) -> int: - """ - Returns the number of occurrences of num in interval [0, index] in the list - - >>> root = build_tree(test_array) - >>> rank_till_index(root, 6, 6) - 1 - >>> rank_till_index(root, 2, 0) - 1 - >>> rank_till_index(root, 1, 10) - 2 - >>> rank_till_index(root, 17, 7) - 0 - >>> rank_till_index(root, 0, 9) - 1 - """ - if index < 0 or node is None: - return 0 - # Leaf node cases - if node.minn == node.maxx: - return index + 1 if node.minn == num else 0 - pivot = (node.minn + node.maxx) // 2 - if num <= pivot: - # go the left subtree and map index to the left subtree - return rank_till_index(node.left, num, node.map_left[index] - 1) - else: - # go to the right subtree and map index to the right subtree - return rank_till_index(node.right, num, index - node.map_left[index]) - - -def rank(node: Node | None, num: int, start: int, end: int) -> int: - """ - Returns the number of occurrences of num in interval [start, end] in the list - - >>> root = build_tree(test_array) - >>> rank(root, 6, 3, 13) - 2 - >>> rank(root, 2, 0, 19) - 4 - >>> rank(root, 9, 2 ,2) - 0 - >>> rank(root, 0, 5, 10) - 2 - """ - if start > end: - return 0 - rank_till_end = rank_till_index(node, num, end) - rank_before_start = rank_till_index(node, num, start - 1) - return rank_till_end - rank_before_start - - -def quantile(node: Node | None, index: int, start: int, end: int) -> int: - """ - Returns the index'th smallest element in interval [start, end] in the list - index is 0-indexed - - >>> root = build_tree(test_array) - >>> quantile(root, 2, 2, 5) - 5 - >>> quantile(root, 5, 2, 13) - 4 - >>> quantile(root, 0, 6, 6) - 8 - >>> quantile(root, 4, 2, 5) - -1 - """ - if index > (end - start) or start > end or node is None: - return -1 - # Leaf node case - if node.minn == node.maxx: - return node.minn - # Number of elements in the left subtree in interval [start, end] - num_elements_in_left_tree = node.map_left[end] - ( - node.map_left[start - 1] if start else 0 - ) - if num_elements_in_left_tree > index: - return quantile( - node.left, - index, - (node.map_left[start - 1] if start else 0), - node.map_left[end] - 1, - ) - else: - return quantile( - node.right, - index - num_elements_in_left_tree, - start - (node.map_left[start - 1] if start else 0), - end - node.map_left[end], - ) - - -def range_counting( - node: Node | None, start: int, end: int, start_num: int, end_num: int -) -> int: - """ - Returns the number of elements in range [start_num, end_num] - in interval [start, end] in the list - - >>> root = build_tree(test_array) - >>> range_counting(root, 1, 10, 3, 7) - 3 - >>> range_counting(root, 2, 2, 1, 4) - 1 - >>> range_counting(root, 0, 19, 0, 100) - 20 - >>> range_counting(root, 1, 0, 1, 100) - 0 - >>> range_counting(root, 0, 17, 100, 1) - 0 - """ - if ( - start > end - or node is None - or start_num > end_num - or node.minn > end_num - or node.maxx < start_num - ): - return 0 - if start_num <= node.minn and node.maxx <= end_num: - return end - start + 1 - left = range_counting( - node.left, - (node.map_left[start - 1] if start else 0), - node.map_left[end] - 1, - start_num, - end_num, - ) - right = range_counting( - node.right, - start - (node.map_left[start - 1] if start else 0), - end - node.map_left[end], - start_num, - end_num, - ) - return left + right - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/disjoint_set/__init__.py b/data_structures/disjoint_set/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/disjoint_set/alternate_disjoint_set.py b/data_structures/disjoint_set/alternate_disjoint_set.py deleted file mode 100644 index 5103335bc80a..000000000000 --- a/data_structures/disjoint_set/alternate_disjoint_set.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Implements a disjoint set using Lists and some added heuristics for efficiency -Union by Rank Heuristic and Path Compression -""" - - -class DisjointSet: - def __init__(self, set_counts: list) -> None: - """ - Initialize with a list of the number of items in each set - and with rank = 1 for each set - """ - self.set_counts = set_counts - self.max_set = max(set_counts) - num_sets = len(set_counts) - self.ranks = [1] * num_sets - self.parents = list(range(num_sets)) - - def merge(self, src: int, dst: int) -> bool: - """ - Merge two sets together using Union by rank heuristic - Return True if successful - Merge two disjoint sets - >>> A = DisjointSet([1, 1, 1]) - >>> A.merge(1, 2) - True - >>> A.merge(0, 2) - True - >>> A.merge(0, 1) - False - """ - src_parent = self.get_parent(src) - dst_parent = self.get_parent(dst) - - if src_parent == dst_parent: - return False - - if self.ranks[dst_parent] >= self.ranks[src_parent]: - self.set_counts[dst_parent] += self.set_counts[src_parent] - self.set_counts[src_parent] = 0 - self.parents[src_parent] = dst_parent - if self.ranks[dst_parent] == self.ranks[src_parent]: - self.ranks[dst_parent] += 1 - joined_set_size = self.set_counts[dst_parent] - else: - self.set_counts[src_parent] += self.set_counts[dst_parent] - self.set_counts[dst_parent] = 0 - self.parents[dst_parent] = src_parent - joined_set_size = self.set_counts[src_parent] - - self.max_set = max(self.max_set, joined_set_size) - return True - - def get_parent(self, disj_set: int) -> int: - """ - Find the Parent of a given set - >>> A = DisjointSet([1, 1, 1]) - >>> A.merge(1, 2) - True - >>> A.get_parent(0) - 0 - >>> A.get_parent(1) - 2 - """ - if self.parents[disj_set] == disj_set: - return disj_set - self.parents[disj_set] = self.get_parent(self.parents[disj_set]) - return self.parents[disj_set] diff --git a/data_structures/disjoint_set/disjoint_set.py b/data_structures/disjoint_set/disjoint_set.py deleted file mode 100644 index edc4736b6132..000000000000 --- a/data_structures/disjoint_set/disjoint_set.py +++ /dev/null @@ -1,85 +0,0 @@ -""" -Disjoint set. -Reference: https://en.wikipedia.org/wiki/Disjoint-set_data_structure -""" - - -class Node: - def __init__(self, data: int) -> None: - self.data = data - self.rank: int - self.parent: Node - - -def make_set(x: Node) -> None: - """ - Make x as a set. - """ - # rank is the distance from x to its' parent - # root's rank is 0 - x.rank = 0 - x.parent = x - - -def union_set(x: Node, y: Node) -> None: - """ - Union of two sets. - set with bigger rank should be parent, so that the - disjoint set tree will be more flat. - """ - x, y = find_set(x), find_set(y) - if x == y: - return - - elif x.rank > y.rank: - y.parent = x - else: - x.parent = y - if x.rank == y.rank: - y.rank += 1 - - -def find_set(x: Node) -> Node: - """ - Return the parent of x - """ - if x != x.parent: - x.parent = find_set(x.parent) - return x.parent - - -def find_python_set(node: Node) -> set: - """ - Return a Python Standard Library set that contains i. - """ - sets = ({0, 1, 2}, {3, 4, 5}) - for s in sets: - if node.data in s: - return s - msg = f"{node.data} is not in {sets}" - raise ValueError(msg) - - -def test_disjoint_set() -> None: - """ - >>> test_disjoint_set() - """ - vertex = [Node(i) for i in range(6)] - for v in vertex: - make_set(v) - - union_set(vertex[0], vertex[1]) - union_set(vertex[1], vertex[2]) - union_set(vertex[3], vertex[4]) - union_set(vertex[3], vertex[5]) - - for node0 in vertex: - for node1 in vertex: - if find_python_set(node0).isdisjoint(find_python_set(node1)): - assert find_set(node0) != find_set(node1) - else: - assert find_set(node0) == find_set(node1) - - -if __name__ == "__main__": - test_disjoint_set() diff --git a/data_structures/hashing/__init__.py b/data_structures/hashing/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/hashing/bloom_filter.py b/data_structures/hashing/bloom_filter.py deleted file mode 100644 index eb2cb4b79c46..000000000000 --- a/data_structures/hashing/bloom_filter.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -See https://en.wikipedia.org/wiki/Bloom_filter - -The use of this data structure is to test membership in a set. -Compared to Python's built-in set() it is more space-efficient. -In the following example, only 8 bits of memory will be used: ->>> bloom = Bloom(size=8) - -Initially, the filter contains all zeros: ->>> bloom.bitstring -'00000000' - -When an element is added, two bits are set to 1 -since there are 2 hash functions in this implementation: ->>> "Titanic" in bloom -False ->>> bloom.add("Titanic") ->>> bloom.bitstring -'01100000' ->>> "Titanic" in bloom -True - -However, sometimes only one bit is added -because both hash functions return the same value ->>> bloom.add("Avatar") ->>> "Avatar" in bloom -True ->>> bloom.format_hash("Avatar") -'00000100' ->>> bloom.bitstring -'01100100' - -Not added elements should return False ... ->>> not_present_films = ("The Godfather", "Interstellar", "Parasite", "Pulp Fiction") ->>> { -... film: bloom.format_hash(film) for film in not_present_films -... } # doctest: +NORMALIZE_WHITESPACE -{'The Godfather': '00000101', - 'Interstellar': '00000011', - 'Parasite': '00010010', - 'Pulp Fiction': '10000100'} ->>> any(film in bloom for film in not_present_films) -False - -but sometimes there are false positives: ->>> "Ratatouille" in bloom -True ->>> bloom.format_hash("Ratatouille") -'01100000' - -The probability increases with the number of elements added. -The probability decreases with the number of bits in the bitarray. ->>> bloom.estimated_error_rate -0.140625 ->>> bloom.add("The Godfather") ->>> bloom.estimated_error_rate -0.25 ->>> bloom.bitstring -'01100101' -""" - -from hashlib import md5, sha256 - -HASH_FUNCTIONS = (sha256, md5) - - -class Bloom: - def __init__(self, size: int = 8) -> None: - self.bitarray = 0b0 - self.size = size - - def add(self, value: str) -> None: - h = self.hash_(value) - self.bitarray |= h - - def exists(self, value: str) -> bool: - h = self.hash_(value) - return (h & self.bitarray) == h - - def __contains__(self, other: str) -> bool: - return self.exists(other) - - def format_bin(self, bitarray: int) -> str: - res = bin(bitarray)[2:] - return res.zfill(self.size) - - @property - def bitstring(self) -> str: - return self.format_bin(self.bitarray) - - def hash_(self, value: str) -> int: - res = 0b0 - for func in HASH_FUNCTIONS: - position = ( - int.from_bytes(func(value.encode()).digest(), "little") % self.size - ) - res |= 2**position - return res - - def format_hash(self, value: str) -> str: - return self.format_bin(self.hash_(value)) - - @property - def estimated_error_rate(self) -> float: - n_ones = bin(self.bitarray).count("1") - return (n_ones / self.size) ** len(HASH_FUNCTIONS) diff --git a/data_structures/hashing/double_hash.py b/data_structures/hashing/double_hash.py deleted file mode 100644 index 324282cbfd8d..000000000000 --- a/data_structures/hashing/double_hash.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python3 -""" -Double hashing is a collision resolving technique in Open Addressed Hash tables. -Double hashing uses the idea of applying a second hash function to key when a collision -occurs. The advantage of Double hashing is that it is one of the best form of probing, -producing a uniform distribution of records throughout a hash table. This technique -does not yield any clusters. It is one of effective method for resolving collisions. - -Double hashing can be done using: (hash1(key) + i * hash2(key)) % TABLE_SIZE -Where hash1() and hash2() are hash functions and TABLE_SIZE is size of hash table. - -Reference: https://en.wikipedia.org/wiki/Double_hashing -""" - -from .hash_table import HashTable -from .number_theory.prime_numbers import is_prime, next_prime - - -class DoubleHash(HashTable): - """ - Hash Table example with open addressing and Double Hash - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def __hash_function_2(self, value, data): - next_prime_gt = ( - next_prime(value % self.size_table) - if not is_prime(value % self.size_table) - else value % self.size_table - ) # gt = bigger than - return next_prime_gt - (data % next_prime_gt) - - def __hash_double_function(self, key, data, increment): - return (increment * self.__hash_function_2(key, data)) % self.size_table - - def _collision_resolution(self, key, data=None): - """ - Examples: - - 1. Try to add three data elements when the size is three - >>> dh = DoubleHash(3) - >>> dh.insert_data(10) - >>> dh.insert_data(20) - >>> dh.insert_data(30) - >>> dh.keys() - {1: 10, 2: 20, 0: 30} - - 2. Try to add three data elements when the size is two - >>> dh = DoubleHash(2) - >>> dh.insert_data(10) - >>> dh.insert_data(20) - >>> dh.insert_data(30) - >>> dh.keys() - {10: 10, 9: 20, 8: 30} - - 3. Try to add three data elements when the size is four - >>> dh = DoubleHash(4) - >>> dh.insert_data(10) - >>> dh.insert_data(20) - >>> dh.insert_data(30) - >>> dh.keys() - {9: 20, 10: 10, 8: 30} - """ - i = 1 - new_key = self.hash_function(data) - - while self.values[new_key] is not None and self.values[new_key] != key: - new_key = ( - self.__hash_double_function(key, data, i) - if self.balanced_factor() >= self.lim_charge - else None - ) - if new_key is None: - break - else: - i += 1 - - return new_key - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/hashing/hash_map.py b/data_structures/hashing/hash_map.py deleted file mode 100644 index 9213d6930f67..000000000000 --- a/data_structures/hashing/hash_map.py +++ /dev/null @@ -1,305 +0,0 @@ -""" -Hash map with open addressing. - -https://en.wikipedia.org/wiki/Hash_table - -Another hash map implementation, with a good explanation. -Modern Dictionaries by Raymond Hettinger -https://www.youtube.com/watch?v=p33CVV29OG8 -""" - -from collections.abc import Iterator, MutableMapping -from dataclasses import dataclass -from typing import Generic, TypeVar - -KEY = TypeVar("KEY") -VAL = TypeVar("VAL") - - -@dataclass(frozen=True, slots=True) -class _Item(Generic[KEY, VAL]): - key: KEY - val: VAL - - -class _DeletedItem(_Item): - def __init__(self) -> None: - super().__init__(None, None) - - def __bool__(self) -> bool: - return False - - -_deleted = _DeletedItem() - - -class HashMap(MutableMapping[KEY, VAL]): - """ - Hash map with open addressing. - """ - - def __init__( - self, initial_block_size: int = 8, capacity_factor: float = 0.75 - ) -> None: - self._initial_block_size = initial_block_size - self._buckets: list[_Item | None] = [None] * initial_block_size - assert 0.0 < capacity_factor < 1.0 - self._capacity_factor = capacity_factor - self._len = 0 - - def _get_bucket_index(self, key: KEY) -> int: - return hash(key) % len(self._buckets) - - def _get_next_ind(self, ind: int) -> int: - """ - Get next index. - - Implements linear open addressing. - >>> HashMap(5)._get_next_ind(3) - 4 - >>> HashMap(5)._get_next_ind(5) - 1 - >>> HashMap(5)._get_next_ind(6) - 2 - >>> HashMap(5)._get_next_ind(9) - 0 - """ - return (ind + 1) % len(self._buckets) - - def _try_set(self, ind: int, key: KEY, val: VAL) -> bool: - """ - Try to add value to the bucket. - - If bucket is empty or key is the same, does insert and return True. - - If bucket has another key or deleted placeholder, - that means that we need to check next bucket. - """ - stored = self._buckets[ind] - if not stored: - self._buckets[ind] = _Item(key, val) - self._len += 1 - return True - elif stored.key == key: - self._buckets[ind] = _Item(key, val) - return True - else: - return False - - def _is_full(self) -> bool: - """ - Return true if we have reached safe capacity. - - So we need to increase the number of buckets to avoid collisions. - - >>> hm = HashMap(2) - >>> hm._add_item(1, 10) - >>> hm._add_item(2, 20) - >>> hm._is_full() - True - >>> HashMap(2)._is_full() - False - """ - limit = len(self._buckets) * self._capacity_factor - return len(self) >= int(limit) - - def _is_sparse(self) -> bool: - """Return true if we need twice fewer buckets when we have now.""" - if len(self._buckets) <= self._initial_block_size: - return False - limit = len(self._buckets) * self._capacity_factor / 2 - return len(self) < limit - - def _resize(self, new_size: int) -> None: - old_buckets = self._buckets - self._buckets = [None] * new_size - self._len = 0 - for item in old_buckets: - if item: - self._add_item(item.key, item.val) - - def _size_up(self) -> None: - self._resize(len(self._buckets) * 2) - - def _size_down(self) -> None: - self._resize(len(self._buckets) // 2) - - def _iterate_buckets(self, key: KEY) -> Iterator[int]: - ind = self._get_bucket_index(key) - for _ in range(len(self._buckets)): - yield ind - ind = self._get_next_ind(ind) - - def _add_item(self, key: KEY, val: VAL) -> None: - """ - Try to add 3 elements when the size is 5 - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm._add_item(2, 20) - >>> hm._add_item(3, 30) - >>> hm - HashMap(1: 10, 2: 20, 3: 30) - - Try to add 3 elements when the size is 5 - >>> hm = HashMap(5) - >>> hm._add_item(-5, 10) - >>> hm._add_item(6, 30) - >>> hm._add_item(-7, 20) - >>> hm - HashMap(-5: 10, 6: 30, -7: 20) - - Try to add 3 elements when size is 1 - >>> hm = HashMap(1) - >>> hm._add_item(10, 13.2) - >>> hm._add_item(6, 5.26) - >>> hm._add_item(7, 5.155) - >>> hm - HashMap(10: 13.2) - - Trying to add an element with a key that is a floating point value - >>> hm = HashMap(5) - >>> hm._add_item(1.5, 10) - >>> hm - HashMap(1.5: 10) - - 5. Trying to add an item with the same key - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm._add_item(1, 20) - >>> hm - HashMap(1: 20) - """ - for ind in self._iterate_buckets(key): - if self._try_set(ind, key, val): - break - - def __setitem__(self, key: KEY, val: VAL) -> None: - """ - 1. Changing value of item whose key is present - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm.__setitem__(1, 20) - >>> hm - HashMap(1: 20) - - 2. Changing value of item whose key is not present - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm.__setitem__(0, 20) - >>> hm - HashMap(0: 20, 1: 10) - - 3. Changing the value of the same item multiple times - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm.__setitem__(1, 20) - >>> hm.__setitem__(1, 30) - >>> hm - HashMap(1: 30) - """ - if self._is_full(): - self._size_up() - - self._add_item(key, val) - - def __delitem__(self, key: KEY) -> None: - """ - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm._add_item(2, 20) - >>> hm._add_item(3, 30) - >>> hm.__delitem__(3) - >>> hm - HashMap(1: 10, 2: 20) - >>> hm = HashMap(5) - >>> hm._add_item(-5, 10) - >>> hm._add_item(6, 30) - >>> hm._add_item(-7, 20) - >>> hm.__delitem__(-5) - >>> hm - HashMap(6: 30, -7: 20) - - # Trying to remove a non-existing item - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm._add_item(2, 20) - >>> hm._add_item(3, 30) - >>> hm.__delitem__(4) - Traceback (most recent call last): - ... - KeyError: 4 - """ - for ind in self._iterate_buckets(key): - item = self._buckets[ind] - if item is None: - raise KeyError(key) - if item is _deleted: - continue - if item.key == key: - self._buckets[ind] = _deleted - self._len -= 1 - break - if self._is_sparse(): - self._size_down() - - def __getitem__(self, key: KEY) -> VAL: - """ - Returns the item at the given key - - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm.__getitem__(1) - 10 - - >>> hm = HashMap(5) - >>> hm._add_item(10, -10) - >>> hm._add_item(20, -20) - >>> hm.__getitem__(20) - -20 - - >>> hm = HashMap(5) - >>> hm._add_item(-1, 10) - >>> hm.__getitem__(-1) - 10 - """ - for ind in self._iterate_buckets(key): - item = self._buckets[ind] - if item is None: - break - if item is _deleted: - continue - if item.key == key: - return item.val - raise KeyError(key) - - def __len__(self) -> int: - """ - Returns the number of items present in hashmap - - >>> hm = HashMap(5) - >>> hm._add_item(1, 10) - >>> hm._add_item(2, 20) - >>> hm._add_item(3, 30) - >>> hm.__len__() - 3 - - >>> hm = HashMap(5) - >>> hm.__len__() - 0 - """ - return self._len - - def __iter__(self) -> Iterator[KEY]: - yield from (item.key for item in self._buckets if item) - - def __repr__(self) -> str: - val_string = ", ".join( - f"{item.key}: {item.val}" for item in self._buckets if item - ) - return f"HashMap({val_string})" - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/hashing/hash_table.py b/data_structures/hashing/hash_table.py deleted file mode 100644 index 40fcad9a3dab..000000000000 --- a/data_structures/hashing/hash_table.py +++ /dev/null @@ -1,283 +0,0 @@ -#!/usr/bin/env python3 -from abc import abstractmethod - -from .number_theory.prime_numbers import next_prime - - -class HashTable: - """ - Basic Hash Table example with open addressing and linear probing - """ - - def __init__( - self, - size_table: int, - charge_factor: int | None = None, - lim_charge: float | None = None, - ) -> None: - self.size_table = size_table - self.values = [None] * self.size_table - self.lim_charge = 0.75 if lim_charge is None else lim_charge - self.charge_factor = 1 if charge_factor is None else charge_factor - self.__aux_list: list = [] - self._keys: dict = {} - - def keys(self): - """ - The keys function returns a dictionary containing the key value pairs. - key being the index number in hash table and value being the data value. - - Examples: - 1. creating HashTable with size 10 and inserting 3 elements - >>> ht = HashTable(10) - >>> ht.insert_data(10) - >>> ht.insert_data(20) - >>> ht.insert_data(30) - >>> ht.keys() - {0: 10, 1: 20, 2: 30} - - 2. creating HashTable with size 5 and inserting 5 elements - >>> ht = HashTable(5) - >>> ht.insert_data(5) - >>> ht.insert_data(4) - >>> ht.insert_data(3) - >>> ht.insert_data(2) - >>> ht.insert_data(1) - >>> ht.keys() - {0: 5, 4: 4, 3: 3, 2: 2, 1: 1} - """ - return self._keys - - def balanced_factor(self): - return sum(1 for slot in self.values if slot is not None) / ( - self.size_table * self.charge_factor - ) - - def hash_function(self, key): - """ - Generates hash for the given key value - - Examples: - - Creating HashTable with size 5 - >>> ht = HashTable(5) - >>> ht.hash_function(10) - 0 - >>> ht.hash_function(20) - 0 - >>> ht.hash_function(4) - 4 - >>> ht.hash_function(18) - 3 - >>> ht.hash_function(-18) - 2 - >>> ht.hash_function(18.5) - 3.5 - >>> ht.hash_function(0) - 0 - >>> ht.hash_function(-0) - 0 - """ - return key % self.size_table - - def _step_by_step(self, step_ord): - print(f"step {step_ord}") - print(list(range(len(self.values)))) - print(self.values) - - def bulk_insert(self, values): - """ - bulk_insert is used for entering more than one element at a time - in the HashTable. - - Examples: - 1. - >>> ht = HashTable(5) - >>> ht.bulk_insert((10,20,30)) - step 1 - [0, 1, 2, 3, 4] - [10, None, None, None, None] - step 2 - [0, 1, 2, 3, 4] - [10, 20, None, None, None] - step 3 - [0, 1, 2, 3, 4] - [10, 20, 30, None, None] - - 2. - >>> ht = HashTable(5) - >>> ht.bulk_insert([5,4,3,2,1]) - step 1 - [0, 1, 2, 3, 4] - [5, None, None, None, None] - step 2 - [0, 1, 2, 3, 4] - [5, None, None, None, 4] - step 3 - [0, 1, 2, 3, 4] - [5, None, None, 3, 4] - step 4 - [0, 1, 2, 3, 4] - [5, None, 2, 3, 4] - step 5 - [0, 1, 2, 3, 4] - [5, 1, 2, 3, 4] - """ - i = 1 - self.__aux_list = values - for value in values: - self.insert_data(value) - self._step_by_step(i) - i += 1 - - def _set_value(self, key, data): - """ - _set_value functions allows to update value at a particular hash - - Examples: - 1. _set_value in HashTable of size 5 - >>> ht = HashTable(5) - >>> ht.insert_data(10) - >>> ht.insert_data(20) - >>> ht.insert_data(30) - >>> ht._set_value(0,15) - >>> ht.keys() - {0: 15, 1: 20, 2: 30} - - 2. _set_value in HashTable of size 2 - >>> ht = HashTable(2) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99) - >>> ht._set_value(3,15) - >>> ht.keys() - {3: 15, 2: 17, 4: 99} - - 3. _set_value in HashTable when hash is not present - >>> ht = HashTable(2) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99) - >>> ht._set_value(0,15) - >>> ht.keys() - {3: 18, 2: 17, 4: 99, 0: 15} - - 4. _set_value in HashTable when multiple hash are not present - >>> ht = HashTable(2) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99) - >>> ht._set_value(0,15) - >>> ht._set_value(1,20) - >>> ht.keys() - {3: 18, 2: 17, 4: 99, 0: 15, 1: 20} - """ - self.values[key] = data - self._keys[key] = data - - @abstractmethod - def _collision_resolution(self, key, data=None): - """ - This method is a type of open addressing which is used for handling collision. - - In this implementation the concept of linear probing has been used. - - The hash table is searched sequentially from the original location of the - hash, if the new hash/location we get is already occupied we check for the next - hash/location. - - references: - - https://en.wikipedia.org/wiki/Linear_probing - - Examples: - 1. The collision will be with keys 18 & 99, so new hash will be created for 99 - >>> ht = HashTable(3) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99) - >>> ht.keys() - {2: 17, 0: 18, 1: 99} - - 2. The collision will be with keys 17 & 101, so new hash - will be created for 101 - >>> ht = HashTable(4) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99) - >>> ht.insert_data(101) - >>> ht.keys() - {1: 17, 2: 18, 3: 99, 0: 101} - - 2. The collision will be with all keys, so new hash will be created for all - >>> ht = HashTable(1) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99) - >>> ht.keys() - {2: 17, 3: 18, 4: 99} - - 3. Trying to insert float key in hash - >>> ht = HashTable(1) - >>> ht.insert_data(17) - >>> ht.insert_data(18) - >>> ht.insert_data(99.99) - Traceback (most recent call last): - ... - TypeError: list indices must be integers or slices, not float - """ - new_key = self.hash_function(key + 1) - - while self.values[new_key] is not None and self.values[new_key] != key: - if self.values.count(None) > 0: - new_key = self.hash_function(new_key + 1) - else: - new_key = None - break - - return new_key - - def rehashing(self): - survivor_values = [value for value in self.values if value is not None] - self.size_table = next_prime(self.size_table, factor=2) - self._keys.clear() - self.values = [None] * self.size_table # hell's pointers D: don't DRY ;/ - for value in survivor_values: - self.insert_data(value) - - def insert_data(self, data): - """ - insert_data is used for inserting a single element at a time in the HashTable. - - Examples: - - >>> ht = HashTable(3) - >>> ht.insert_data(5) - >>> ht.keys() - {2: 5} - >>> ht = HashTable(5) - >>> ht.insert_data(30) - >>> ht.insert_data(50) - >>> ht.keys() - {0: 30, 1: 50} - """ - key = self.hash_function(data) - - if self.values[key] is None: - self._set_value(key, data) - - elif self.values[key] == data: - pass - - else: - collision_resolution = self._collision_resolution(key, data) - if collision_resolution is not None: - self._set_value(collision_resolution, data) - else: - self.rehashing() - self.insert_data(data) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/hashing/hash_table_with_linked_list.py b/data_structures/hashing/hash_table_with_linked_list.py deleted file mode 100644 index f404c5251246..000000000000 --- a/data_structures/hashing/hash_table_with_linked_list.py +++ /dev/null @@ -1,27 +0,0 @@ -from collections import deque - -from .hash_table import HashTable - - -class HashTableWithLinkedList(HashTable): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def _set_value(self, key, data): - self.values[key] = deque([]) if self.values[key] is None else self.values[key] - self.values[key].appendleft(data) - self._keys[key] = self.values[key] - - def balanced_factor(self): - return ( - sum(self.charge_factor - len(slot) for slot in self.values) - / self.size_table - * self.charge_factor - ) - - def _collision_resolution(self, key, data=None): - if not ( - len(self.values[key]) == self.charge_factor and self.values.count(None) == 0 - ): - return key - return super()._collision_resolution(key, data) diff --git a/data_structures/hashing/number_theory/__init__.py b/data_structures/hashing/number_theory/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/hashing/number_theory/prime_numbers.py b/data_structures/hashing/number_theory/prime_numbers.py deleted file mode 100644 index 2549a1477b2b..000000000000 --- a/data_structures/hashing/number_theory/prime_numbers.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 -""" -module to operations with prime numbers -""" - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - """ - - # precondition - assert isinstance(number, int) and ( - number >= 0 - ), "'number' must been an int and positive" - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or not number % 2: - # Negatives, 0, 1 and all even numbers are not primes - return False - - odd_numbers = range(3, int(math.sqrt(number) + 1), 2) - return not any(not number % i for i in odd_numbers) - - -def next_prime(value, factor=1, **kwargs): - value = factor * value - first_value_val = value - - while not is_prime(value): - value += 1 if not ("desc" in kwargs and kwargs["desc"] is True) else -1 - - if value == first_value_val: - return next_prime(value + 1, **kwargs) - return value diff --git a/data_structures/hashing/quadratic_probing.py b/data_structures/hashing/quadratic_probing.py deleted file mode 100644 index 56d4926eee9b..000000000000 --- a/data_structures/hashing/quadratic_probing.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python3 - -from .hash_table import HashTable - - -class QuadraticProbing(HashTable): - """ - Basic Hash Table example with open addressing using Quadratic Probing - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def _collision_resolution(self, key, data=None): # noqa: ARG002 - """ - Quadratic probing is an open addressing scheme used for resolving - collisions in hash table. - - It works by taking the original hash index and adding successive - values of an arbitrary quadratic polynomial until open slot is found. - - Hash + 1², Hash + 2², Hash + 3² .... Hash + n² - - reference: - - https://en.wikipedia.org/wiki/Quadratic_probing - e.g: - 1. Create hash table with size 7 - >>> qp = QuadraticProbing(7) - >>> qp.insert_data(90) - >>> qp.insert_data(340) - >>> qp.insert_data(24) - >>> qp.insert_data(45) - >>> qp.insert_data(99) - >>> qp.insert_data(73) - >>> qp.insert_data(7) - >>> qp.keys() - {11: 45, 14: 99, 7: 24, 0: 340, 5: 73, 6: 90, 8: 7} - - 2. Create hash table with size 8 - >>> qp = QuadraticProbing(8) - >>> qp.insert_data(0) - >>> qp.insert_data(999) - >>> qp.insert_data(111) - >>> qp.keys() - {0: 0, 7: 999, 3: 111} - - 3. Try to add three data elements when the size is two - >>> qp = QuadraticProbing(2) - >>> qp.insert_data(0) - >>> qp.insert_data(999) - >>> qp.insert_data(111) - >>> qp.keys() - {0: 0, 4: 999, 1: 111} - - 4. Try to add three data elements when the size is one - >>> qp = QuadraticProbing(1) - >>> qp.insert_data(0) - >>> qp.insert_data(999) - >>> qp.insert_data(111) - >>> qp.keys() - {4: 999, 1: 111} - """ - - i = 1 - new_key = self.hash_function(key + i * i) - - while self.values[new_key] is not None and self.values[new_key] != key: - i += 1 - new_key = ( - self.hash_function(key + i * i) - if not self.balanced_factor() >= self.lim_charge - else None - ) - - if new_key is None: - break - - return new_key - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/hashing/tests/__init__.py b/data_structures/hashing/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/hashing/tests/test_hash_map.py b/data_structures/hashing/tests/test_hash_map.py deleted file mode 100644 index 4292c0178b7b..000000000000 --- a/data_structures/hashing/tests/test_hash_map.py +++ /dev/null @@ -1,97 +0,0 @@ -from operator import delitem, getitem, setitem - -import pytest - -from data_structures.hashing.hash_map import HashMap - - -def _get(k): - return getitem, k - - -def _set(k, v): - return setitem, k, v - - -def _del(k): - return delitem, k - - -def _run_operation(obj, fun, *args): - try: - return fun(obj, *args), None - except Exception as e: - return None, e - - -_add_items = ( - _set("key_a", "val_a"), - _set("key_b", "val_b"), -) - -_overwrite_items = [ - _set("key_a", "val_a"), - _set("key_a", "val_b"), -] - -_delete_items = [ - _set("key_a", "val_a"), - _set("key_b", "val_b"), - _del("key_a"), - _del("key_b"), - _set("key_a", "val_a"), - _del("key_a"), -] - -_access_absent_items = [ - _get("key_a"), - _del("key_a"), - _set("key_a", "val_a"), - _del("key_a"), - _del("key_a"), - _get("key_a"), -] - -_add_with_resize_up = [ - *[_set(x, x) for x in range(5)], # guaranteed upsize -] - -_add_with_resize_down = [ - *[_set(x, x) for x in range(5)], # guaranteed upsize - *[_del(x) for x in range(5)], - _set("key_a", "val_b"), -] - - -@pytest.mark.parametrize( - "operations", - [ - pytest.param(_add_items, id="add items"), - pytest.param(_overwrite_items, id="overwrite items"), - pytest.param(_delete_items, id="delete items"), - pytest.param(_access_absent_items, id="access absent items"), - pytest.param(_add_with_resize_up, id="add with resize up"), - pytest.param(_add_with_resize_down, id="add with resize down"), - ], -) -def test_hash_map_is_the_same_as_dict(operations): - my = HashMap(initial_block_size=4) - py = {} - for _, (fun, *args) in enumerate(operations): - my_res, my_exc = _run_operation(my, fun, *args) - py_res, py_exc = _run_operation(py, fun, *args) - assert my_res == py_res - assert str(my_exc) == str(py_exc) - assert set(py) == set(my) - assert len(py) == len(my) - assert set(my.items()) == set(py.items()) - - -def test_no_new_methods_was_added_to_api(): - def is_public(name: str) -> bool: - return not name.startswith("_") - - dict_public_names = {name for name in dir({}) if is_public(name)} - hash_public_names = {name for name in dir(HashMap()) if is_public(name)} - - assert dict_public_names > hash_public_names diff --git a/data_structures/heap/__init__.py b/data_structures/heap/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/heap/binomial_heap.py b/data_structures/heap/binomial_heap.py deleted file mode 100644 index 9cfdf0c12fe0..000000000000 --- a/data_structures/heap/binomial_heap.py +++ /dev/null @@ -1,401 +0,0 @@ -""" -Binomial Heap -Reference: Advanced Data Structures, Peter Brass -""" - - -class Node: - """ - Node in a doubly-linked binomial tree, containing: - - value - - size of left subtree - - link to left, right and parent nodes - """ - - def __init__(self, val): - self.val = val - # Number of nodes in left subtree - self.left_tree_size = 0 - self.left = None - self.right = None - self.parent = None - - def merge_trees(self, other): - """ - In-place merge of two binomial trees of equal size. - Returns the root of the resulting tree - """ - assert self.left_tree_size == other.left_tree_size, "Unequal Sizes of Blocks" - - if self.val < other.val: - other.left = self.right - other.parent = None - if self.right: - self.right.parent = other - self.right = other - self.left_tree_size = self.left_tree_size * 2 + 1 - return self - else: - self.left = other.right - self.parent = None - if other.right: - other.right.parent = self - other.right = self - other.left_tree_size = other.left_tree_size * 2 + 1 - return other - - -class BinomialHeap: - r""" - Min-oriented priority queue implemented with the Binomial Heap data - structure implemented with the BinomialHeap class. It supports: - - Insert element in a heap with n elements: Guaranteed logn, amoratized 1 - - Merge (meld) heaps of size m and n: O(logn + logm) - - Delete Min: O(logn) - - Peek (return min without deleting it): O(1) - - Example: - - Create a random permutation of 30 integers to be inserted and 19 of them deleted - >>> import numpy as np - >>> permutation = np.random.permutation(list(range(30))) - - Create a Heap and insert the 30 integers - __init__() test - >>> first_heap = BinomialHeap() - - 30 inserts - insert() test - >>> for number in permutation: - ... first_heap.insert(number) - - Size test - >>> first_heap.size - 30 - - Deleting - delete() test - >>> [int(first_heap.delete_min()) for _ in range(20)] - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] - - Create a new Heap - >>> second_heap = BinomialHeap() - >>> vals = [17, 20, 31, 34] - >>> for value in vals: - ... second_heap.insert(value) - - - The heap should have the following structure: - - 17 - / \ - # 31 - / \ - 20 34 - / \ / \ - # # # # - - preOrder() test - >>> " ".join(str(x) for x in second_heap.pre_order()) - "(17, 0) ('#', 1) (31, 1) (20, 2) ('#', 3) ('#', 3) (34, 2) ('#', 3) ('#', 3)" - - printing Heap - __str__() test - >>> print(second_heap) - 17 - -# - -31 - --20 - ---# - ---# - --34 - ---# - ---# - - mergeHeaps() test - >>> - >>> merged = second_heap.merge_heaps(first_heap) - >>> merged.peek() - 17 - - values in merged heap; (merge is inplace) - >>> results = [] - >>> while not first_heap.is_empty(): - ... results.append(int(first_heap.delete_min())) - >>> results - [17, 20, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 34] - """ - - def __init__(self, bottom_root=None, min_node=None, heap_size=0): - self.size = heap_size - self.bottom_root = bottom_root - self.min_node = min_node - - def merge_heaps(self, other): - """ - In-place merge of two binomial heaps. - Both of them become the resulting merged heap - """ - - # Empty heaps corner cases - if other.size == 0: - return None - if self.size == 0: - self.size = other.size - self.bottom_root = other.bottom_root - self.min_node = other.min_node - return None - # Update size - self.size = self.size + other.size - - # Update min.node - if self.min_node.val > other.min_node.val: - self.min_node = other.min_node - # Merge - - # Order roots by left_subtree_size - combined_roots_list = [] - i, j = self.bottom_root, other.bottom_root - while i or j: - if i and ((not j) or i.left_tree_size < j.left_tree_size): - combined_roots_list.append((i, True)) - i = i.parent - else: - combined_roots_list.append((j, False)) - j = j.parent - # Insert links between them - for i in range(len(combined_roots_list) - 1): - if combined_roots_list[i][1] != combined_roots_list[i + 1][1]: - combined_roots_list[i][0].parent = combined_roots_list[i + 1][0] - combined_roots_list[i + 1][0].left = combined_roots_list[i][0] - # Consecutively merge roots with same left_tree_size - i = combined_roots_list[0][0] - while i.parent: - if ( - (i.left_tree_size == i.parent.left_tree_size) and (not i.parent.parent) - ) or ( - i.left_tree_size == i.parent.left_tree_size - and i.left_tree_size != i.parent.parent.left_tree_size - ): - # Neighbouring Nodes - previous_node = i.left - next_node = i.parent.parent - - # Merging trees - i = i.merge_trees(i.parent) - - # Updating links - i.left = previous_node - i.parent = next_node - if previous_node: - previous_node.parent = i - if next_node: - next_node.left = i - else: - i = i.parent - # Updating self.bottom_root - while i.left: - i = i.left - self.bottom_root = i - - # Update other - other.size = self.size - other.bottom_root = self.bottom_root - other.min_node = self.min_node - - # Return the merged heap - return self - - def insert(self, val): - """ - insert a value in the heap - """ - if self.size == 0: - self.bottom_root = Node(val) - self.size = 1 - self.min_node = self.bottom_root - else: - # Create new node - new_node = Node(val) - - # Update size - self.size += 1 - - # update min_node - if val < self.min_node.val: - self.min_node = new_node - # Put new_node as a bottom_root in heap - self.bottom_root.left = new_node - new_node.parent = self.bottom_root - self.bottom_root = new_node - - # Consecutively merge roots with same left_tree_size - while ( - self.bottom_root.parent - and self.bottom_root.left_tree_size - == self.bottom_root.parent.left_tree_size - ): - # Next node - next_node = self.bottom_root.parent.parent - - # Merge - self.bottom_root = self.bottom_root.merge_trees(self.bottom_root.parent) - - # Update Links - self.bottom_root.parent = next_node - self.bottom_root.left = None - if next_node: - next_node.left = self.bottom_root - - def peek(self): - """ - return min element without deleting it - """ - return self.min_node.val - - def is_empty(self): - return self.size == 0 - - def delete_min(self): - """ - delete min element and return it - """ - # assert not self.isEmpty(), "Empty Heap" - - # Save minimal value - min_value = self.min_node.val - - # Last element in heap corner case - if self.size == 1: - # Update size - self.size = 0 - - # Update bottom root - self.bottom_root = None - - # Update min_node - self.min_node = None - - return min_value - # No right subtree corner case - # The structure of the tree implies that this should be the bottom root - # and there is at least one other root - if self.min_node.right is None: - # Update size - self.size -= 1 - - # Update bottom root - self.bottom_root = self.bottom_root.parent - self.bottom_root.left = None - - # Update min_node - self.min_node = self.bottom_root - i = self.bottom_root.parent - while i: - if i.val < self.min_node.val: - self.min_node = i - i = i.parent - return min_value - # General case - # Find the BinomialHeap of the right subtree of min_node - bottom_of_new = self.min_node.right - bottom_of_new.parent = None - min_of_new = bottom_of_new - size_of_new = 1 - - # Size, min_node and bottom_root - while bottom_of_new.left: - size_of_new = size_of_new * 2 + 1 - bottom_of_new = bottom_of_new.left - if bottom_of_new.val < min_of_new.val: - min_of_new = bottom_of_new - # Corner case of single root on top left path - if (not self.min_node.left) and (not self.min_node.parent): - self.size = size_of_new - self.bottom_root = bottom_of_new - self.min_node = min_of_new - # print("Single root, multiple nodes case") - return min_value - # Remaining cases - # Construct heap of right subtree - new_heap = BinomialHeap( - bottom_root=bottom_of_new, min_node=min_of_new, heap_size=size_of_new - ) - - # Update size - self.size = self.size - 1 - size_of_new - - # Neighbour nodes - previous_node = self.min_node.left - next_node = self.min_node.parent - - # Initialize new bottom_root and min_node - self.min_node = previous_node or next_node - self.bottom_root = next_node - - # Update links of previous_node and search below for new min_node and - # bottom_root - if previous_node: - previous_node.parent = next_node - - # Update bottom_root and search for min_node below - self.bottom_root = previous_node - self.min_node = previous_node - while self.bottom_root.left: - self.bottom_root = self.bottom_root.left - if self.bottom_root.val < self.min_node.val: - self.min_node = self.bottom_root - if next_node: - next_node.left = previous_node - - # Search for new min_node above min_node - i = next_node - while i: - if i.val < self.min_node.val: - self.min_node = i - i = i.parent - # Merge heaps - self.merge_heaps(new_heap) - - return int(min_value) - - def pre_order(self): - """ - Returns the Pre-order representation of the heap including - values of nodes plus their level distance from the root; - Empty nodes appear as # - """ - # Find top root - top_root = self.bottom_root - while top_root.parent: - top_root = top_root.parent - # preorder - heap_pre_order = [] - self.__traversal(top_root, heap_pre_order) - return heap_pre_order - - def __traversal(self, curr_node, preorder, level=0): - """ - Pre-order traversal of nodes - """ - if curr_node: - preorder.append((curr_node.val, level)) - self.__traversal(curr_node.left, preorder, level + 1) - self.__traversal(curr_node.right, preorder, level + 1) - else: - preorder.append(("#", level)) - - def __str__(self): - """ - Overwriting str for a pre-order print of nodes in heap; - Performance is poor, so use only for small examples - """ - if self.is_empty(): - return "" - preorder_heap = self.pre_order() - - return "\n".join(("-" * level + str(value)) for value, level in preorder_heap) - - -# Unit Tests -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/heap/heap.py b/data_structures/heap/heap.py deleted file mode 100644 index 7b15e69f13ca..000000000000 --- a/data_structures/heap/heap.py +++ /dev/null @@ -1,276 +0,0 @@ -from __future__ import annotations - -from abc import abstractmethod -from collections.abc import Iterable -from typing import Generic, Protocol, TypeVar - - -class Comparable(Protocol): - @abstractmethod - def __lt__(self: T, other: T) -> bool: - pass - - @abstractmethod - def __gt__(self: T, other: T) -> bool: - pass - - @abstractmethod - def __eq__(self: T, other: object) -> bool: - pass - - -T = TypeVar("T", bound=Comparable) - - -class Heap(Generic[T]): - """A Max Heap Implementation - - >>> unsorted = [103, 9, 1, 7, 11, 15, 25, 201, 209, 107, 5] - >>> h = Heap() - >>> h.build_max_heap(unsorted) - >>> h - [209, 201, 25, 103, 107, 15, 1, 9, 7, 11, 5] - >>> - >>> h.extract_max() - 209 - >>> h - [201, 107, 25, 103, 11, 15, 1, 9, 7, 5] - >>> - >>> h.insert(100) - >>> h - [201, 107, 25, 103, 100, 15, 1, 9, 7, 5, 11] - >>> - >>> h.heap_sort() - >>> h - [1, 5, 7, 9, 11, 15, 25, 100, 103, 107, 201] - """ - - def __init__(self) -> None: - self.h: list[T] = [] - self.heap_size: int = 0 - - def __repr__(self) -> str: - return str(self.h) - - def parent_index(self, child_idx: int) -> int | None: - """ - returns the parent index based on the given child index - - >>> h = Heap() - >>> h.build_max_heap([103, 9, 1, 7, 11, 15, 25, 201, 209, 107, 5]) - >>> h - [209, 201, 25, 103, 107, 15, 1, 9, 7, 11, 5] - - >>> h.parent_index(-1) # returns none if index is <=0 - - >>> h.parent_index(0) # returns none if index is <=0 - - >>> h.parent_index(1) - 0 - >>> h.parent_index(2) - 0 - >>> h.parent_index(3) - 1 - >>> h.parent_index(4) - 1 - >>> h.parent_index(5) - 2 - >>> h.parent_index(10.5) - 4.0 - >>> h.parent_index(209.0) - 104.0 - >>> h.parent_index("Test") - Traceback (most recent call last): - ... - TypeError: '>' not supported between instances of 'str' and 'int' - """ - if child_idx > 0: - return (child_idx - 1) // 2 - return None - - def left_child_idx(self, parent_idx: int) -> int | None: - """ - return the left child index if the left child exists. - if not, return None. - """ - left_child_index = 2 * parent_idx + 1 - if left_child_index < self.heap_size: - return left_child_index - return None - - def right_child_idx(self, parent_idx: int) -> int | None: - """ - return the right child index if the right child exists. - if not, return None. - """ - right_child_index = 2 * parent_idx + 2 - if right_child_index < self.heap_size: - return right_child_index - return None - - def max_heapify(self, index: int) -> None: - """ - correct a single violation of the heap property in a subtree's root. - - It is the function that is responsible for restoring the property - of Max heap i.e the maximum element is always at top. - """ - if index < self.heap_size: - violation: int = index - left_child = self.left_child_idx(index) - right_child = self.right_child_idx(index) - # check which child is larger than its parent - if left_child is not None and self.h[left_child] > self.h[violation]: - violation = left_child - if right_child is not None and self.h[right_child] > self.h[violation]: - violation = right_child - # if violation indeed exists - if violation != index: - # swap to fix the violation - self.h[violation], self.h[index] = self.h[index], self.h[violation] - # fix the subsequent violation recursively if any - self.max_heapify(violation) - - def build_max_heap(self, collection: Iterable[T]) -> None: - """ - build max heap from an unsorted array - - >>> h = Heap() - >>> h.build_max_heap([20,40,50,20,10]) - >>> h - [50, 40, 20, 20, 10] - - >>> h = Heap() - >>> h.build_max_heap([1,2,3,4,5,6,7,8,9,0]) - >>> h - [9, 8, 7, 4, 5, 6, 3, 2, 1, 0] - - >>> h = Heap() - >>> h.build_max_heap([514,5,61,57,8,99,105]) - >>> h - [514, 57, 105, 5, 8, 99, 61] - - >>> h = Heap() - >>> h.build_max_heap([514,5,61.6,57,8,9.9,105]) - >>> h - [514, 57, 105, 5, 8, 9.9, 61.6] - """ - self.h = list(collection) - self.heap_size = len(self.h) - if self.heap_size > 1: - # max_heapify from right to left but exclude leaves (last level) - for i in range(self.heap_size // 2 - 1, -1, -1): - self.max_heapify(i) - - def extract_max(self) -> T: - """ - get and remove max from heap - - >>> h = Heap() - >>> h.build_max_heap([20,40,50,20,10]) - >>> h.extract_max() - 50 - - >>> h = Heap() - >>> h.build_max_heap([514,5,61,57,8,99,105]) - >>> h.extract_max() - 514 - - >>> h = Heap() - >>> h.build_max_heap([1,2,3,4,5,6,7,8,9,0]) - >>> h.extract_max() - 9 - """ - if self.heap_size >= 2: - me = self.h[0] - self.h[0] = self.h.pop(-1) - self.heap_size -= 1 - self.max_heapify(0) - return me - elif self.heap_size == 1: - self.heap_size -= 1 - return self.h.pop(-1) - else: - raise Exception("Empty heap") - - def insert(self, value: T) -> None: - """ - insert a new value into the max heap - - >>> h = Heap() - >>> h.insert(10) - >>> h - [10] - - >>> h = Heap() - >>> h.insert(10) - >>> h.insert(10) - >>> h - [10, 10] - - >>> h = Heap() - >>> h.insert(10) - >>> h.insert(10.1) - >>> h - [10.1, 10] - - >>> h = Heap() - >>> h.insert(0.1) - >>> h.insert(0) - >>> h.insert(9) - >>> h.insert(5) - >>> h - [9, 5, 0.1, 0] - """ - self.h.append(value) - idx = (self.heap_size - 1) // 2 - self.heap_size += 1 - while idx >= 0: - self.max_heapify(idx) - idx = (idx - 1) // 2 - - def heap_sort(self) -> None: - size = self.heap_size - for j in range(size - 1, 0, -1): - self.h[0], self.h[j] = self.h[j], self.h[0] - self.heap_size -= 1 - self.max_heapify(0) - self.heap_size = size - - -if __name__ == "__main__": - import doctest - - # run doc test - doctest.testmod() - - # demo - for unsorted in [ - [0], - [2], - [3, 5], - [5, 3], - [5, 5], - [0, 0, 0, 0], - [1, 1, 1, 1], - [2, 2, 3, 5], - [0, 2, 2, 3, 5], - [2, 5, 3, 0, 2, 3, 0, 3], - [6, 1, 2, 7, 9, 3, 4, 5, 10, 8], - [103, 9, 1, 7, 11, 15, 25, 201, 209, 107, 5], - [-45, -2, -5], - ]: - print(f"unsorted array: {unsorted}") - - heap: Heap[int] = Heap() - heap.build_max_heap(unsorted) - print(f"after build heap: {heap}") - - print(f"max value: {heap.extract_max()}") - print(f"after max value removed: {heap}") - - heap.insert(100) - print(f"after new value 100 inserted: {heap}") - - heap.heap_sort() - print(f"heap-sorted array: {heap}\n") diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py deleted file mode 100644 index ee92149e25a9..000000000000 --- a/data_structures/heap/heap_generic.py +++ /dev/null @@ -1,174 +0,0 @@ -from collections.abc import Callable - - -class Heap: - """ - A generic Heap class, can be used as min or max by passing the key function - accordingly. - """ - - def __init__(self, key: Callable | None = None) -> None: - # Stores actual heap items. - self.arr: list = [] - # Stores indexes of each item for supporting updates and deletion. - self.pos_map: dict = {} - # Stores current size of heap. - self.size = 0 - # Stores function used to evaluate the score of an item on which basis ordering - # will be done. - self.key = key or (lambda x: x) - - def _parent(self, i: int) -> int | None: - """Returns parent index of given index if exists else None""" - return int((i - 1) / 2) if i > 0 else None - - def _left(self, i: int) -> int | None: - """Returns left-child-index of given index if exists else None""" - left = int(2 * i + 1) - return left if 0 < left < self.size else None - - def _right(self, i: int) -> int | None: - """Returns right-child-index of given index if exists else None""" - right = int(2 * i + 2) - return right if 0 < right < self.size else None - - def _swap(self, i: int, j: int) -> None: - """Performs changes required for swapping two elements in the heap""" - # First update the indexes of the items in index map. - self.pos_map[self.arr[i][0]], self.pos_map[self.arr[j][0]] = ( - self.pos_map[self.arr[j][0]], - self.pos_map[self.arr[i][0]], - ) - # Then swap the items in the list. - self.arr[i], self.arr[j] = self.arr[j], self.arr[i] - - def _cmp(self, i: int, j: int) -> bool: - """Compares the two items using default comparison""" - return self.arr[i][1] < self.arr[j][1] - - def _get_valid_parent(self, i: int) -> int: - """ - Returns index of valid parent as per desired ordering among given index and - both it's children - """ - left = self._left(i) - right = self._right(i) - valid_parent = i - - if left is not None and not self._cmp(left, valid_parent): - valid_parent = left - if right is not None and not self._cmp(right, valid_parent): - valid_parent = right - - return valid_parent - - def _heapify_up(self, index: int) -> None: - """Fixes the heap in upward direction of given index""" - parent = self._parent(index) - while parent is not None and not self._cmp(index, parent): - self._swap(index, parent) - index, parent = parent, self._parent(parent) - - def _heapify_down(self, index: int) -> None: - """Fixes the heap in downward direction of given index""" - valid_parent = self._get_valid_parent(index) - while valid_parent != index: - self._swap(index, valid_parent) - index, valid_parent = valid_parent, self._get_valid_parent(valid_parent) - - def update_item(self, item: int, item_value: int) -> None: - """Updates given item value in heap if present""" - if item not in self.pos_map: - return - index = self.pos_map[item] - self.arr[index] = [item, self.key(item_value)] - # Make sure heap is right in both up and down direction. - # Ideally only one of them will make any change. - self._heapify_up(index) - self._heapify_down(index) - - def delete_item(self, item: int) -> None: - """Deletes given item from heap if present""" - if item not in self.pos_map: - return - index = self.pos_map[item] - del self.pos_map[item] - self.arr[index] = self.arr[self.size - 1] - self.pos_map[self.arr[self.size - 1][0]] = index - self.size -= 1 - # Make sure heap is right in both up and down direction. Ideally only one - # of them will make any change- so no performance loss in calling both. - if self.size > index: - self._heapify_up(index) - self._heapify_down(index) - - def insert_item(self, item: int, item_value: int) -> None: - """Inserts given item with given value in heap""" - arr_len = len(self.arr) - if arr_len == self.size: - self.arr.append([item, self.key(item_value)]) - else: - self.arr[self.size] = [item, self.key(item_value)] - self.pos_map[item] = self.size - self.size += 1 - self._heapify_up(self.size - 1) - - def get_top(self) -> tuple | None: - """Returns top item tuple (Calculated value, item) from heap if present""" - return self.arr[0] if self.size else None - - def extract_top(self) -> tuple | None: - """ - Return top item tuple (Calculated value, item) from heap and removes it as well - if present - """ - top_item_tuple = self.get_top() - if top_item_tuple: - self.delete_item(top_item_tuple[0]) - return top_item_tuple - - -def test_heap() -> None: - """ - >>> h = Heap() # Max-heap - >>> h.insert_item(5, 34) - >>> h.insert_item(6, 31) - >>> h.insert_item(7, 37) - >>> h.get_top() - [7, 37] - >>> h.extract_top() - [7, 37] - >>> h.extract_top() - [5, 34] - >>> h.extract_top() - [6, 31] - >>> h = Heap(key=lambda x: -x) # Min heap - >>> h.insert_item(5, 34) - >>> h.insert_item(6, 31) - >>> h.insert_item(7, 37) - >>> h.get_top() - [6, -31] - >>> h.extract_top() - [6, -31] - >>> h.extract_top() - [5, -34] - >>> h.extract_top() - [7, -37] - >>> h.insert_item(8, 45) - >>> h.insert_item(9, 40) - >>> h.insert_item(10, 50) - >>> h.get_top() - [9, -40] - >>> h.update_item(10, 30) - >>> h.get_top() - [10, -30] - >>> h.delete_item(10) - >>> h.get_top() - [9, -40] - """ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/heap/max_heap.py b/data_structures/heap/max_heap.py deleted file mode 100644 index 589f2595a8da..000000000000 --- a/data_structures/heap/max_heap.py +++ /dev/null @@ -1,86 +0,0 @@ -class BinaryHeap: - """ - A max-heap implementation in Python - >>> binary_heap = BinaryHeap() - >>> binary_heap.insert(6) - >>> binary_heap.insert(10) - >>> binary_heap.insert(15) - >>> binary_heap.insert(12) - >>> binary_heap.pop() - 15 - >>> binary_heap.pop() - 12 - >>> binary_heap.get_list - [10, 6] - >>> len(binary_heap) - 2 - """ - - def __init__(self): - self.__heap = [0] - self.__size = 0 - - def __swap_up(self, i: int) -> None: - """Swap the element up""" - temporary = self.__heap[i] - while i // 2 > 0: - if self.__heap[i] > self.__heap[i // 2]: - self.__heap[i] = self.__heap[i // 2] - self.__heap[i // 2] = temporary - i //= 2 - - def insert(self, value: int) -> None: - """Insert new element""" - self.__heap.append(value) - self.__size += 1 - self.__swap_up(self.__size) - - def __swap_down(self, i: int) -> None: - """Swap the element down""" - while self.__size >= 2 * i: - if 2 * i + 1 > self.__size: # noqa: SIM114 - bigger_child = 2 * i - elif self.__heap[2 * i] > self.__heap[2 * i + 1]: - bigger_child = 2 * i - else: - bigger_child = 2 * i + 1 - temporary = self.__heap[i] - if self.__heap[i] < self.__heap[bigger_child]: - self.__heap[i] = self.__heap[bigger_child] - self.__heap[bigger_child] = temporary - i = bigger_child - - def pop(self) -> int: - """Pop the root element""" - max_value = self.__heap[1] - self.__heap[1] = self.__heap[self.__size] - self.__size -= 1 - self.__heap.pop() - self.__swap_down(1) - return max_value - - @property - def get_list(self): - return self.__heap[1:] - - def __len__(self): - """Length of the array""" - return self.__size - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - # create an instance of BinaryHeap - binary_heap = BinaryHeap() - binary_heap.insert(6) - binary_heap.insert(10) - binary_heap.insert(15) - binary_heap.insert(12) - # pop root(max-values because it is max heap) - print(binary_heap.pop()) # 15 - print(binary_heap.pop()) # 12 - # get the list and size after operations - print(binary_heap.get_list) - print(len(binary_heap)) diff --git a/data_structures/heap/min_heap.py b/data_structures/heap/min_heap.py deleted file mode 100644 index ce7ed570a58d..000000000000 --- a/data_structures/heap/min_heap.py +++ /dev/null @@ -1,170 +0,0 @@ -# Min heap data structure -# with decrease key functionality - in O(log(n)) time - - -class Node: - def __init__(self, name, val): - self.name = name - self.val = val - - def __str__(self): - return f"{self.__class__.__name__}({self.name}, {self.val})" - - def __lt__(self, other): - return self.val < other.val - - -class MinHeap: - """ - >>> r = Node("R", -1) - >>> b = Node("B", 6) - >>> a = Node("A", 3) - >>> x = Node("X", 1) - >>> e = Node("E", 4) - >>> print(b) - Node(B, 6) - >>> myMinHeap = MinHeap([r, b, a, x, e]) - >>> myMinHeap.decrease_key(b, -17) - >>> print(b) - Node(B, -17) - >>> myMinHeap["B"] - -17 - """ - - def __init__(self, array): - self.idx_of_element = {} - self.heap_dict = {} - self.heap = self.build_heap(array) - - def __getitem__(self, key): - return self.get_value(key) - - def get_parent_idx(self, idx): - return (idx - 1) // 2 - - def get_left_child_idx(self, idx): - return idx * 2 + 1 - - def get_right_child_idx(self, idx): - return idx * 2 + 2 - - def get_value(self, key): - return self.heap_dict[key] - - def build_heap(self, array): - last_idx = len(array) - 1 - start_from = self.get_parent_idx(last_idx) - - for idx, i in enumerate(array): - self.idx_of_element[i] = idx - self.heap_dict[i.name] = i.val - - for i in range(start_from, -1, -1): - self.sift_down(i, array) - return array - - # this is min-heapify method - def sift_down(self, idx, array): - while True: - left = self.get_left_child_idx(idx) - right = self.get_right_child_idx(idx) - - smallest = idx - if left < len(array) and array[left] < array[idx]: - smallest = left - if right < len(array) and array[right] < array[smallest]: - smallest = right - - if smallest != idx: - array[idx], array[smallest] = array[smallest], array[idx] - ( - self.idx_of_element[array[idx]], - self.idx_of_element[array[smallest]], - ) = ( - self.idx_of_element[array[smallest]], - self.idx_of_element[array[idx]], - ) - idx = smallest - else: - break - - def sift_up(self, idx): - p = self.get_parent_idx(idx) - while p >= 0 and self.heap[p] > self.heap[idx]: - self.heap[p], self.heap[idx] = self.heap[idx], self.heap[p] - self.idx_of_element[self.heap[p]], self.idx_of_element[self.heap[idx]] = ( - self.idx_of_element[self.heap[idx]], - self.idx_of_element[self.heap[p]], - ) - idx = p - p = self.get_parent_idx(idx) - - def peek(self): - return self.heap[0] - - def remove(self): - self.heap[0], self.heap[-1] = self.heap[-1], self.heap[0] - self.idx_of_element[self.heap[0]], self.idx_of_element[self.heap[-1]] = ( - self.idx_of_element[self.heap[-1]], - self.idx_of_element[self.heap[0]], - ) - - x = self.heap.pop() - del self.idx_of_element[x] - self.sift_down(0, self.heap) - return x - - def insert(self, node): - self.heap.append(node) - self.idx_of_element[node] = len(self.heap) - 1 - self.heap_dict[node.name] = node.val - self.sift_up(len(self.heap) - 1) - - def is_empty(self): - return len(self.heap) == 0 - - def decrease_key(self, node, new_value): - assert ( - self.heap[self.idx_of_element[node]].val > new_value - ), "newValue must be less that current value" - node.val = new_value - self.heap_dict[node.name] = new_value - self.sift_up(self.idx_of_element[node]) - - -# USAGE - -r = Node("R", -1) -b = Node("B", 6) -a = Node("A", 3) -x = Node("X", 1) -e = Node("E", 4) - -# Use one of these two ways to generate Min-Heap - -# Generating Min-Heap from array -my_min_heap = MinHeap([r, b, a, x, e]) - -# Generating Min-Heap by Insert method -# myMinHeap.insert(a) -# myMinHeap.insert(b) -# myMinHeap.insert(x) -# myMinHeap.insert(r) -# myMinHeap.insert(e) - -# Before -print("Min Heap - before decrease key") -for i in my_min_heap.heap: - print(i) - -print("Min Heap - After decrease key of node [B -> -17]") -my_min_heap.decrease_key(b, -17) - -# After -for i in my_min_heap.heap: - print(i) - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/heap/randomized_heap.py b/data_structures/heap/randomized_heap.py deleted file mode 100644 index 12888c1f4089..000000000000 --- a/data_structures/heap/randomized_heap.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python3 - -from __future__ import annotations - -import random -from collections.abc import Iterable -from typing import Any, Generic, TypeVar - -T = TypeVar("T", bound=bool) - - -class RandomizedHeapNode(Generic[T]): - """ - One node of the randomized heap. Contains the value and references to - two children. - """ - - def __init__(self, value: T) -> None: - self._value: T = value - self.left: RandomizedHeapNode[T] | None = None - self.right: RandomizedHeapNode[T] | None = None - - @property - def value(self) -> T: - """ - Return the value of the node. - - >>> rhn = RandomizedHeapNode(10) - >>> rhn.value - 10 - >>> rhn = RandomizedHeapNode(-10) - >>> rhn.value - -10 - """ - return self._value - - @staticmethod - def merge( - root1: RandomizedHeapNode[T] | None, root2: RandomizedHeapNode[T] | None - ) -> RandomizedHeapNode[T] | None: - """ - Merge 2 nodes together. - - >>> rhn1 = RandomizedHeapNode(10) - >>> rhn2 = RandomizedHeapNode(20) - >>> RandomizedHeapNode.merge(rhn1, rhn2).value - 10 - - >>> rhn1 = RandomizedHeapNode(20) - >>> rhn2 = RandomizedHeapNode(10) - >>> RandomizedHeapNode.merge(rhn1, rhn2).value - 10 - - >>> rhn1 = RandomizedHeapNode(5) - >>> rhn2 = RandomizedHeapNode(0) - >>> RandomizedHeapNode.merge(rhn1, rhn2).value - 0 - """ - if not root1: - return root2 - - if not root2: - return root1 - - if root1.value > root2.value: - root1, root2 = root2, root1 - - if random.choice([True, False]): - root1.left, root1.right = root1.right, root1.left - - root1.left = RandomizedHeapNode.merge(root1.left, root2) - - return root1 - - -class RandomizedHeap(Generic[T]): - """ - A data structure that allows inserting a new value and to pop the smallest - values. Both operations take O(logN) time where N is the size of the - structure. - Wiki: https://en.wikipedia.org/wiki/Randomized_meldable_heap - - >>> RandomizedHeap([2, 3, 1, 5, 1, 7]).to_sorted_list() - [1, 1, 2, 3, 5, 7] - - >>> rh = RandomizedHeap() - >>> rh.pop() - Traceback (most recent call last): - ... - IndexError: Can't get top element for the empty heap. - - >>> rh.insert(1) - >>> rh.insert(-1) - >>> rh.insert(0) - >>> rh.to_sorted_list() - [-1, 0, 1] - """ - - def __init__(self, data: Iterable[T] | None = ()) -> None: - """ - >>> rh = RandomizedHeap([3, 1, 3, 7]) - >>> rh.to_sorted_list() - [1, 3, 3, 7] - """ - self._root: RandomizedHeapNode[T] | None = None - - if data: - for item in data: - self.insert(item) - - def insert(self, value: T) -> None: - """ - Insert the value into the heap. - - >>> rh = RandomizedHeap() - >>> rh.insert(3) - >>> rh.insert(1) - >>> rh.insert(3) - >>> rh.insert(7) - >>> rh.to_sorted_list() - [1, 3, 3, 7] - """ - self._root = RandomizedHeapNode.merge(self._root, RandomizedHeapNode(value)) - - def pop(self) -> T | None: - """ - Pop the smallest value from the heap and return it. - - >>> rh = RandomizedHeap([3, 1, 3, 7]) - >>> rh.pop() - 1 - >>> rh.pop() - 3 - >>> rh.pop() - 3 - >>> rh.pop() - 7 - >>> rh.pop() - Traceback (most recent call last): - ... - IndexError: Can't get top element for the empty heap. - """ - - result = self.top() - - if self._root is None: - return None - - self._root = RandomizedHeapNode.merge(self._root.left, self._root.right) - - return result - - def top(self) -> T: - """ - Return the smallest value from the heap. - - >>> rh = RandomizedHeap() - >>> rh.insert(3) - >>> rh.top() - 3 - >>> rh.insert(1) - >>> rh.top() - 1 - >>> rh.insert(3) - >>> rh.top() - 1 - >>> rh.insert(7) - >>> rh.top() - 1 - """ - if not self._root: - raise IndexError("Can't get top element for the empty heap.") - return self._root.value - - def clear(self) -> None: - """ - Clear the heap. - - >>> rh = RandomizedHeap([3, 1, 3, 7]) - >>> rh.clear() - >>> rh.pop() - Traceback (most recent call last): - ... - IndexError: Can't get top element for the empty heap. - """ - self._root = None - - def to_sorted_list(self) -> list[Any]: - """ - Returns sorted list containing all the values in the heap. - - >>> rh = RandomizedHeap([3, 1, 3, 7]) - >>> rh.to_sorted_list() - [1, 3, 3, 7] - """ - result = [] - while self: - result.append(self.pop()) - - return result - - def __bool__(self) -> bool: - """ - Check if the heap is not empty. - - >>> rh = RandomizedHeap() - >>> bool(rh) - False - >>> rh.insert(1) - >>> bool(rh) - True - >>> rh.clear() - >>> bool(rh) - False - """ - return self._root is not None - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/heap/skew_heap.py b/data_structures/heap/skew_heap.py deleted file mode 100644 index 0839db711cb1..000000000000 --- a/data_structures/heap/skew_heap.py +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/env python3 - -from __future__ import annotations - -from collections.abc import Iterable, Iterator -from typing import Any, Generic, TypeVar - -T = TypeVar("T", bound=bool) - - -class SkewNode(Generic[T]): - """ - One node of the skew heap. Contains the value and references to - two children. - """ - - def __init__(self, value: T) -> None: - self._value: T = value - self.left: SkewNode[T] | None = None - self.right: SkewNode[T] | None = None - - @property - def value(self) -> T: - """ - Return the value of the node. - - >>> SkewNode(0).value - 0 - >>> SkewNode(3.14159).value - 3.14159 - >>> SkewNode("hello").value - 'hello' - >>> SkewNode(None).value - - >>> SkewNode(True).value - True - >>> SkewNode([]).value - [] - >>> SkewNode({}).value - {} - >>> SkewNode(set()).value - set() - >>> SkewNode(0.0).value - 0.0 - >>> SkewNode(-1e-10).value - -1e-10 - >>> SkewNode(10).value - 10 - >>> SkewNode(-10.5).value - -10.5 - >>> SkewNode().value - Traceback (most recent call last): - ... - TypeError: SkewNode.__init__() missing 1 required positional argument: 'value' - """ - return self._value - - @staticmethod - def merge( - root1: SkewNode[T] | None, root2: SkewNode[T] | None - ) -> SkewNode[T] | None: - """ - Merge 2 nodes together. - >>> SkewNode.merge(SkewNode(10),SkewNode(-10.5)).value - -10.5 - >>> SkewNode.merge(SkewNode(10),SkewNode(10.5)).value - 10 - >>> SkewNode.merge(SkewNode(10),SkewNode(10)).value - 10 - >>> SkewNode.merge(SkewNode(-100),SkewNode(-10.5)).value - -100 - """ - if not root1: - return root2 - - if not root2: - return root1 - - if root1.value > root2.value: - root1, root2 = root2, root1 - - result = root1 - temp = root1.right - result.right = root1.left - result.left = SkewNode.merge(temp, root2) - - return result - - -class SkewHeap(Generic[T]): - """ - A data structure that allows inserting a new value and to pop the smallest - values. Both operations take O(logN) time where N is the size of the - structure. - Wiki: https://en.wikipedia.org/wiki/Skew_heap - Visualization: https://www.cs.usfca.edu/~galles/visualization/SkewHeap.html - - >>> list(SkewHeap([2, 3, 1, 5, 1, 7])) - [1, 1, 2, 3, 5, 7] - - >>> sh = SkewHeap() - >>> sh.pop() - Traceback (most recent call last): - ... - IndexError: Can't get top element for the empty heap. - - >>> sh.insert(1) - >>> sh.insert(-1) - >>> sh.insert(0) - >>> list(sh) - [-1, 0, 1] - """ - - def __init__(self, data: Iterable[T] | None = ()) -> None: - """ - >>> sh = SkewHeap([3, 1, 3, 7]) - >>> list(sh) - [1, 3, 3, 7] - """ - self._root: SkewNode[T] | None = None - if data: - for item in data: - self.insert(item) - - def __bool__(self) -> bool: - """ - Check if the heap is not empty. - - >>> sh = SkewHeap() - >>> bool(sh) - False - >>> sh.insert(1) - >>> bool(sh) - True - >>> sh.clear() - >>> bool(sh) - False - """ - return self._root is not None - - def __iter__(self) -> Iterator[T]: - """ - Returns sorted list containing all the values in the heap. - - >>> sh = SkewHeap([3, 1, 3, 7]) - >>> list(sh) - [1, 3, 3, 7] - """ - result: list[Any] = [] - while self: - result.append(self.pop()) - - # Pushing items back to the heap not to clear it. - for item in result: - self.insert(item) - - return iter(result) - - def insert(self, value: T) -> None: - """ - Insert the value into the heap. - - >>> sh = SkewHeap() - >>> sh.insert(3) - >>> sh.insert(1) - >>> sh.insert(3) - >>> sh.insert(7) - >>> list(sh) - [1, 3, 3, 7] - """ - self._root = SkewNode.merge(self._root, SkewNode(value)) - - def pop(self) -> T | None: - """ - Pop the smallest value from the heap and return it. - - >>> sh = SkewHeap([3, 1, 3, 7]) - >>> sh.pop() - 1 - >>> sh.pop() - 3 - >>> sh.pop() - 3 - >>> sh.pop() - 7 - >>> sh.pop() - Traceback (most recent call last): - ... - IndexError: Can't get top element for the empty heap. - """ - result = self.top() - self._root = ( - SkewNode.merge(self._root.left, self._root.right) if self._root else None - ) - - return result - - def top(self) -> T: - """ - Return the smallest value from the heap. - - >>> sh = SkewHeap() - >>> sh.insert(3) - >>> sh.top() - 3 - >>> sh.insert(1) - >>> sh.top() - 1 - >>> sh.insert(3) - >>> sh.top() - 1 - >>> sh.insert(7) - >>> sh.top() - 1 - """ - if not self._root: - raise IndexError("Can't get top element for the empty heap.") - return self._root.value - - def clear(self) -> None: - """ - Clear the heap. - - >>> sh = SkewHeap([3, 1, 3, 7]) - >>> sh.clear() - >>> sh.pop() - Traceback (most recent call last): - ... - IndexError: Can't get top element for the empty heap. - """ - self._root = None - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/kd_tree/__init__.py b/data_structures/kd_tree/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/kd_tree/build_kdtree.py b/data_structures/kd_tree/build_kdtree.py deleted file mode 100644 index 074a5dac4d42..000000000000 --- a/data_structures/kd_tree/build_kdtree.py +++ /dev/null @@ -1,43 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11532 -# https://github.com/TheAlgorithms/Python/pull/11532 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -from data_structures.kd_tree.kd_node import KDNode - - -def build_kdtree(points: list[list[float]], depth: int = 0) -> KDNode | None: - """ - Builds a KD-Tree from a list of points. - - Args: - points: The list of points to build the KD-Tree from. - depth: The current depth in the tree - (used to determine axis for splitting). - - Returns: - The root node of the KD-Tree, - or None if no points are provided. - """ - if not points: - return None - - k = len(points[0]) # Dimensionality of the points - axis = depth % k - - # Sort point list and choose median as pivot element - points.sort(key=lambda point: point[axis]) - median_idx = len(points) // 2 - - # Create node and construct subtrees - left_points = points[:median_idx] - right_points = points[median_idx + 1 :] - - return KDNode( - point=points[median_idx], - left=build_kdtree(left_points, depth + 1), - right=build_kdtree(right_points, depth + 1), - ) diff --git a/data_structures/kd_tree/example/__init__.py b/data_structures/kd_tree/example/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/kd_tree/example/example_usage.py b/data_structures/kd_tree/example/example_usage.py deleted file mode 100644 index 892c3b8c4a2a..000000000000 --- a/data_structures/kd_tree/example/example_usage.py +++ /dev/null @@ -1,46 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11532 -# https://github.com/TheAlgorithms/Python/pull/11532 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -import numpy as np - -from data_structures.kd_tree.build_kdtree import build_kdtree -from data_structures.kd_tree.example.hypercube_points import hypercube_points -from data_structures.kd_tree.nearest_neighbour_search import nearest_neighbour_search - - -def main() -> None: - """ - Demonstrates the use of KD-Tree by building it from random points - in a 10-dimensional hypercube and performing a nearest neighbor search. - """ - num_points: int = 5000 - cube_size: float = 10.0 # Size of the hypercube (edge length) - num_dimensions: int = 10 - - # Generate random points within the hypercube - points: np.ndarray = hypercube_points(num_points, cube_size, num_dimensions) - hypercube_kdtree = build_kdtree(points.tolist()) - - # Generate a random query point within the same space - rng = np.random.default_rng() - query_point: list[float] = rng.random(num_dimensions).tolist() - - # Perform nearest neighbor search - nearest_point, nearest_dist, nodes_visited = nearest_neighbour_search( - hypercube_kdtree, query_point - ) - - # Print the results - print(f"Query point: {query_point}") - print(f"Nearest point: {nearest_point}") - print(f"Distance: {nearest_dist:.4f}") - print(f"Nodes visited: {nodes_visited}") - - -if __name__ == "__main__": - main() diff --git a/data_structures/kd_tree/example/hypercube_points.py b/data_structures/kd_tree/example/hypercube_points.py deleted file mode 100644 index 66744856e6d5..000000000000 --- a/data_structures/kd_tree/example/hypercube_points.py +++ /dev/null @@ -1,29 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11532 -# https://github.com/TheAlgorithms/Python/pull/11532 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -import numpy as np - - -def hypercube_points( - num_points: int, hypercube_size: float, num_dimensions: int -) -> np.ndarray: - """ - Generates random points uniformly distributed within an n-dimensional hypercube. - - Args: - num_points: Number of points to generate. - hypercube_size: Size of the hypercube. - num_dimensions: Number of dimensions of the hypercube. - - Returns: - An array of shape (num_points, num_dimensions) - with generated points. - """ - rng = np.random.default_rng() - shape = (num_points, num_dimensions) - return hypercube_size * rng.random(shape) diff --git a/data_structures/kd_tree/kd_node.py b/data_structures/kd_tree/kd_node.py deleted file mode 100644 index 5a22ef609077..000000000000 --- a/data_structures/kd_tree/kd_node.py +++ /dev/null @@ -1,38 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11532 -# https://github.com/TheAlgorithms/Python/pull/11532 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -from __future__ import annotations - - -class KDNode: - """ - Represents a node in a KD-Tree. - - Attributes: - point: The point stored in this node. - left: The left child node. - right: The right child node. - """ - - def __init__( - self, - point: list[float], - left: KDNode | None = None, - right: KDNode | None = None, - ) -> None: - """ - Initializes a KDNode with the given point and child nodes. - - Args: - point (list[float]): The point stored in this node. - left (Optional[KDNode]): The left child node. - right (Optional[KDNode]): The right child node. - """ - self.point = point - self.left = left - self.right = right diff --git a/data_structures/kd_tree/nearest_neighbour_search.py b/data_structures/kd_tree/nearest_neighbour_search.py deleted file mode 100644 index 8104944c08f0..000000000000 --- a/data_structures/kd_tree/nearest_neighbour_search.py +++ /dev/null @@ -1,79 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11532 -# https://github.com/TheAlgorithms/Python/pull/11532 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -from data_structures.kd_tree.kd_node import KDNode - - -def nearest_neighbour_search( - root: KDNode | None, query_point: list[float] -) -> tuple[list[float] | None, float, int]: - """ - Performs a nearest neighbor search in a KD-Tree for a given query point. - - Args: - root (KDNode | None): The root node of the KD-Tree. - query_point (list[float]): The point for which the nearest neighbor - is being searched. - - Returns: - tuple[list[float] | None, float, int]: - - The nearest point found in the KD-Tree to the query point, - or None if no point is found. - - The squared distance to the nearest point. - - The number of nodes visited during the search. - """ - nearest_point: list[float] | None = None - nearest_dist: float = float("inf") - nodes_visited: int = 0 - - def search(node: KDNode | None, depth: int = 0) -> None: - """ - Recursively searches for the nearest neighbor in the KD-Tree. - - Args: - node: The current node in the KD-Tree. - depth: The current depth in the KD-Tree. - """ - nonlocal nearest_point, nearest_dist, nodes_visited - if node is None: - return - - nodes_visited += 1 - - # Calculate the current distance (squared distance) - current_point = node.point - current_dist = sum( - (query_coord - point_coord) ** 2 - for query_coord, point_coord in zip(query_point, current_point) - ) - - # Update nearest point if the current node is closer - if nearest_point is None or current_dist < nearest_dist: - nearest_point = current_point - nearest_dist = current_dist - - # Determine which subtree to search first (based on axis and query point) - k = len(query_point) # Dimensionality of points - axis = depth % k - - if query_point[axis] <= current_point[axis]: - nearer_subtree = node.left - further_subtree = node.right - else: - nearer_subtree = node.right - further_subtree = node.left - - # Search the nearer subtree first - search(nearer_subtree, depth + 1) - - # If the further subtree has a closer point - if (query_point[axis] - current_point[axis]) ** 2 < nearest_dist: - search(further_subtree, depth + 1) - - search(root, 0) - return nearest_point, nearest_dist, nodes_visited diff --git a/data_structures/kd_tree/tests/__init__.py b/data_structures/kd_tree/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/kd_tree/tests/test_kdtree.py b/data_structures/kd_tree/tests/test_kdtree.py deleted file mode 100644 index dce5e4f34ff4..000000000000 --- a/data_structures/kd_tree/tests/test_kdtree.py +++ /dev/null @@ -1,108 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11532 -# https://github.com/TheAlgorithms/Python/pull/11532 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -import numpy as np -import pytest - -from data_structures.kd_tree.build_kdtree import build_kdtree -from data_structures.kd_tree.example.hypercube_points import hypercube_points -from data_structures.kd_tree.kd_node import KDNode -from data_structures.kd_tree.nearest_neighbour_search import nearest_neighbour_search - - -@pytest.mark.parametrize( - ("num_points", "cube_size", "num_dimensions", "depth", "expected_result"), - [ - (0, 10.0, 2, 0, None), # Empty points list - (10, 10.0, 2, 2, KDNode), # Depth = 2, 2D points - (10, 10.0, 3, -2, KDNode), # Depth = -2, 3D points - ], -) -def test_build_kdtree(num_points, cube_size, num_dimensions, depth, expected_result): - """ - Test that KD-Tree is built correctly. - - Cases: - - Empty points list. - - Positive depth value. - - Negative depth value. - """ - points = ( - hypercube_points(num_points, cube_size, num_dimensions).tolist() - if num_points > 0 - else [] - ) - - kdtree = build_kdtree(points, depth=depth) - - if expected_result is None: - # Empty points list case - assert kdtree is None, f"Expected None for empty points list, got {kdtree}" - else: - # Check if root node is not None - assert kdtree is not None, "Expected a KDNode, got None" - - # Check if root has correct dimensions - assert ( - len(kdtree.point) == num_dimensions - ), f"Expected point dimension {num_dimensions}, got {len(kdtree.point)}" - - # Check that the tree is balanced to some extent (simplistic check) - assert isinstance( - kdtree, KDNode - ), f"Expected KDNode instance, got {type(kdtree)}" - - -def test_nearest_neighbour_search(): - """ - Test the nearest neighbor search function. - """ - num_points = 10 - cube_size = 10.0 - num_dimensions = 2 - points = hypercube_points(num_points, cube_size, num_dimensions) - kdtree = build_kdtree(points.tolist()) - - rng = np.random.default_rng() - query_point = rng.random(num_dimensions).tolist() - - nearest_point, nearest_dist, nodes_visited = nearest_neighbour_search( - kdtree, query_point - ) - - # Check that nearest point is not None - assert nearest_point is not None - - # Check that distance is a non-negative number - assert nearest_dist >= 0 - - # Check that nodes visited is a non-negative integer - assert nodes_visited >= 0 - - -def test_edge_cases(): - """ - Test edge cases such as an empty KD-Tree. - """ - empty_kdtree = build_kdtree([]) - query_point = [0.0] * 2 # Using a default 2D query point - - nearest_point, nearest_dist, nodes_visited = nearest_neighbour_search( - empty_kdtree, query_point - ) - - # With an empty KD-Tree, nearest_point should be None - assert nearest_point is None - assert nearest_dist == float("inf") - assert nodes_visited == 0 - - -if __name__ == "__main__": - import pytest - - pytest.main() diff --git a/data_structures/linked_list/__init__.py b/data_structures/linked_list/__init__.py deleted file mode 100644 index 00ef337a1211..000000000000 --- a/data_structures/linked_list/__init__.py +++ /dev/null @@ -1,133 +0,0 @@ -""" -Linked Lists consists of Nodes. -Nodes contain data and also may link to other nodes: - - Head Node: First node, the address of the - head node gives us access of the complete list - - Last node: points to null -""" - -from __future__ import annotations - -from typing import Any - - -class Node: - def __init__(self, item: Any, next: Any) -> None: # noqa: A002 - self.item = item - self.next = next - - -class LinkedList: - def __init__(self) -> None: - self.head: Node | None = None - self.size = 0 - - def add(self, item: Any, position: int = 0) -> None: - """ - Add an item to the LinkedList at the specified position. - Default position is 0 (the head). - - Args: - item (Any): The item to add to the LinkedList. - position (int, optional): The position at which to add the item. - Defaults to 0. - - Raises: - ValueError: If the position is negative or out of bounds. - - >>> linked_list = LinkedList() - >>> linked_list.add(1) - >>> linked_list.add(2) - >>> linked_list.add(3) - >>> linked_list.add(4, 2) - >>> print(linked_list) - 3 --> 2 --> 4 --> 1 - - # Test adding to a negative position - >>> linked_list.add(5, -3) - Traceback (most recent call last): - ... - ValueError: Position must be non-negative - - # Test adding to an out-of-bounds position - >>> linked_list.add(5,7) - Traceback (most recent call last): - ... - ValueError: Out of bounds - >>> linked_list.add(5, 4) - >>> print(linked_list) - 3 --> 2 --> 4 --> 1 --> 5 - """ - if position < 0: - raise ValueError("Position must be non-negative") - - if position == 0 or self.head is None: - new_node = Node(item, self.head) - self.head = new_node - else: - current = self.head - for _ in range(position - 1): - current = current.next - if current is None: - raise ValueError("Out of bounds") - new_node = Node(item, current.next) - current.next = new_node - self.size += 1 - - def remove(self) -> Any: - # Switched 'self.is_empty()' to 'self.head is None' - # because mypy was considering the possibility that 'self.head' - # can be None in below else part and giving error - if self.head is None: - return None - else: - item = self.head.item - self.head = self.head.next - self.size -= 1 - return item - - def is_empty(self) -> bool: - return self.head is None - - def __str__(self) -> str: - """ - >>> linked_list = LinkedList() - >>> linked_list.add(23) - >>> linked_list.add(14) - >>> linked_list.add(9) - >>> print(linked_list) - 9 --> 14 --> 23 - """ - if self.is_empty(): - return "" - else: - iterate = self.head - item_str = "" - item_list: list[str] = [] - while iterate: - item_list.append(str(iterate.item)) - iterate = iterate.next - - item_str = " --> ".join(item_list) - - return item_str - - def __len__(self) -> int: - """ - >>> linked_list = LinkedList() - >>> len(linked_list) - 0 - >>> linked_list.add("a") - >>> len(linked_list) - 1 - >>> linked_list.add("b") - >>> len(linked_list) - 2 - >>> _ = linked_list.remove() - >>> len(linked_list) - 1 - >>> _ = linked_list.remove() - >>> len(linked_list) - 0 - """ - return self.size diff --git a/data_structures/linked_list/circular_linked_list.py b/data_structures/linked_list/circular_linked_list.py deleted file mode 100644 index bb64441d4560..000000000000 --- a/data_structures/linked_list/circular_linked_list.py +++ /dev/null @@ -1,210 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass -from typing import Any - - -@dataclass -class Node: - data: Any - next_node: Node | None = None - - -@dataclass -class CircularLinkedList: - head: Node | None = None # Reference to the head (first node) - tail: Node | None = None # Reference to the tail (last node) - - def __iter__(self) -> Iterator[Any]: - """ - Iterate through all nodes in the Circular Linked List yielding their data. - Yields: - The data of each node in the linked list. - """ - node = self.head - while node: - yield node.data - node = node.next_node - if node == self.head: - break - - def __len__(self) -> int: - """ - Get the length (number of nodes) in the Circular Linked List. - """ - return sum(1 for _ in self) - - def __repr__(self) -> str: - """ - Generate a string representation of the Circular Linked List. - Returns: - A string of the format "1->2->....->N". - """ - return "->".join(str(item) for item in iter(self)) - - def insert_tail(self, data: Any) -> None: - """ - Insert a node with the given data at the end of the Circular Linked List. - """ - self.insert_nth(len(self), data) - - def insert_head(self, data: Any) -> None: - """ - Insert a node with the given data at the beginning of the Circular Linked List. - """ - self.insert_nth(0, data) - - def insert_nth(self, index: int, data: Any) -> None: - """ - Insert the data of the node at the nth pos in the Circular Linked List. - Args: - index: The index at which the data should be inserted. - data: The data to be inserted. - - Raises: - IndexError: If the index is out of range. - """ - if index < 0 or index > len(self): - raise IndexError("list index out of range.") - new_node: Node = Node(data) - if self.head is None: - new_node.next_node = new_node # First node points to itself - self.tail = self.head = new_node - elif index == 0: # Insert at the head - new_node.next_node = self.head - assert self.tail is not None # List is not empty, tail exists - self.head = self.tail.next_node = new_node - else: - temp: Node | None = self.head - for _ in range(index - 1): - assert temp is not None - temp = temp.next_node - assert temp is not None - new_node.next_node = temp.next_node - temp.next_node = new_node - if index == len(self) - 1: # Insert at the tail - self.tail = new_node - - def delete_front(self) -> Any: - """ - Delete and return the data of the node at the front of the Circular Linked List. - Raises: - IndexError: If the list is empty. - """ - return self.delete_nth(0) - - def delete_tail(self) -> Any: - """ - Delete and return the data of the node at the end of the Circular Linked List. - Returns: - Any: The data of the deleted node. - Raises: - IndexError: If the index is out of range. - """ - return self.delete_nth(len(self) - 1) - - def delete_nth(self, index: int = 0) -> Any: - """ - Delete and return the data of the node at the nth pos in Circular Linked List. - Args: - index (int): The index of the node to be deleted. Defaults to 0. - Returns: - Any: The data of the deleted node. - Raises: - IndexError: If the index is out of range. - """ - if not 0 <= index < len(self): - raise IndexError("list index out of range.") - - assert self.head is not None - assert self.tail is not None - delete_node: Node = self.head - if self.head == self.tail: # Just one node - self.head = self.tail = None - elif index == 0: # Delete head node - assert self.tail.next_node is not None - self.tail.next_node = self.tail.next_node.next_node - self.head = self.head.next_node - else: - temp: Node | None = self.head - for _ in range(index - 1): - assert temp is not None - temp = temp.next_node - assert temp is not None - assert temp.next_node is not None - delete_node = temp.next_node - temp.next_node = temp.next_node.next_node - if index == len(self) - 1: # Delete at tail - self.tail = temp - return delete_node.data - - def is_empty(self) -> bool: - """ - Check if the Circular Linked List is empty. - Returns: - bool: True if the list is empty, False otherwise. - """ - return len(self) == 0 - - -def test_circular_linked_list() -> None: - """ - Test cases for the CircularLinkedList class. - >>> test_circular_linked_list() - """ - circular_linked_list = CircularLinkedList() - assert len(circular_linked_list) == 0 - assert circular_linked_list.is_empty() is True - assert str(circular_linked_list) == "" - - try: - circular_linked_list.delete_front() - raise AssertionError # This should not happen - except IndexError: - assert True # This should happen - - try: - circular_linked_list.delete_tail() - raise AssertionError # This should not happen - except IndexError: - assert True # This should happen - - try: - circular_linked_list.delete_nth(-1) - raise AssertionError - except IndexError: - assert True - - try: - circular_linked_list.delete_nth(0) - raise AssertionError - except IndexError: - assert True - - assert circular_linked_list.is_empty() is True - for i in range(5): - assert len(circular_linked_list) == i - circular_linked_list.insert_nth(i, i + 1) - assert str(circular_linked_list) == "->".join(str(i) for i in range(1, 6)) - - circular_linked_list.insert_tail(6) - assert str(circular_linked_list) == "->".join(str(i) for i in range(1, 7)) - circular_linked_list.insert_head(0) - assert str(circular_linked_list) == "->".join(str(i) for i in range(7)) - - assert circular_linked_list.delete_front() == 0 - assert circular_linked_list.delete_tail() == 6 - assert str(circular_linked_list) == "->".join(str(i) for i in range(1, 6)) - assert circular_linked_list.delete_nth(2) == 3 - - circular_linked_list.insert_nth(2, 3) - assert str(circular_linked_list) == "->".join(str(i) for i in range(1, 6)) - - assert circular_linked_list.is_empty() is False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/linked_list/deque_doubly.py b/data_structures/linked_list/deque_doubly.py deleted file mode 100644 index 2b9d70c223c4..000000000000 --- a/data_structures/linked_list/deque_doubly.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -Implementing Deque using DoublyLinkedList ... -Operations: - 1. insertion in the front -> O(1) - 2. insertion in the end -> O(1) - 3. remove from the front -> O(1) - 4. remove from the end -> O(1) -""" - - -class _DoublyLinkedBase: - """A Private class (to be inherited)""" - - class _Node: - __slots__ = "_prev", "_data", "_next" - - def __init__(self, link_p, element, link_n): - self._prev = link_p - self._data = element - self._next = link_n - - def has_next_and_prev(self): - return ( - f" Prev -> {self._prev is not None}, Next -> {self._next is not None}" - ) - - def __init__(self): - self._header = self._Node(None, None, None) - self._trailer = self._Node(None, None, None) - self._header._next = self._trailer - self._trailer._prev = self._header - self._size = 0 - - def __len__(self): - return self._size - - def is_empty(self): - return self.__len__() == 0 - - def _insert(self, predecessor, e, successor): - # Create new_node by setting it's prev.link -> header - # setting it's next.link -> trailer - new_node = self._Node(predecessor, e, successor) - predecessor._next = new_node - successor._prev = new_node - self._size += 1 - return self - - def _delete(self, node): - predecessor = node._prev - successor = node._next - - predecessor._next = successor - successor._prev = predecessor - self._size -= 1 - temp = node._data - node._prev = node._next = node._data = None - del node - return temp - - -class LinkedDeque(_DoublyLinkedBase): - def first(self): - """return first element - >>> d = LinkedDeque() - >>> d.add_first('A').first() - 'A' - >>> d.add_first('B').first() - 'B' - """ - if self.is_empty(): - raise Exception("List is empty") - return self._header._next._data - - def last(self): - """return last element - >>> d = LinkedDeque() - >>> d.add_last('A').last() - 'A' - >>> d.add_last('B').last() - 'B' - """ - if self.is_empty(): - raise Exception("List is empty") - return self._trailer._prev._data - - # DEque Insert Operations (At the front, At the end) - - def add_first(self, element): - """insertion in the front - >>> LinkedDeque().add_first('AV').first() - 'AV' - """ - return self._insert(self._header, element, self._header._next) - - def add_last(self, element): - """insertion in the end - >>> LinkedDeque().add_last('B').last() - 'B' - """ - return self._insert(self._trailer._prev, element, self._trailer) - - # DEqueu Remove Operations (At the front, At the end) - - def remove_first(self): - """removal from the front - >>> d = LinkedDeque() - >>> d.is_empty() - True - >>> d.remove_first() - Traceback (most recent call last): - ... - IndexError: remove_first from empty list - >>> d.add_first('A') # doctest: +ELLIPSIS - <data_structures.linked_list.deque_doubly.LinkedDeque object at ... - >>> d.remove_first() - 'A' - >>> d.is_empty() - True - """ - if self.is_empty(): - raise IndexError("remove_first from empty list") - return self._delete(self._header._next) - - def remove_last(self): - """removal in the end - >>> d = LinkedDeque() - >>> d.is_empty() - True - >>> d.remove_last() - Traceback (most recent call last): - ... - IndexError: remove_first from empty list - >>> d.add_first('A') # doctest: +ELLIPSIS - <data_structures.linked_list.deque_doubly.LinkedDeque object at ... - >>> d.remove_last() - 'A' - >>> d.is_empty() - True - """ - if self.is_empty(): - raise IndexError("remove_first from empty list") - return self._delete(self._trailer._prev) diff --git a/data_structures/linked_list/doubly_linked_list.py b/data_structures/linked_list/doubly_linked_list.py deleted file mode 100644 index bd3445f9f6c5..000000000000 --- a/data_structures/linked_list/doubly_linked_list.py +++ /dev/null @@ -1,230 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Doubly_linked_list -""" - - -class Node: - def __init__(self, data): - self.data = data - self.previous = None - self.next = None - - def __str__(self): - return f"{self.data}" - - -class DoublyLinkedList: - def __init__(self): - self.head = None - self.tail = None - - def __iter__(self): - """ - >>> linked_list = DoublyLinkedList() - >>> linked_list.insert_at_head('b') - >>> linked_list.insert_at_head('a') - >>> linked_list.insert_at_tail('c') - >>> tuple(linked_list) - ('a', 'b', 'c') - """ - node = self.head - while node: - yield node.data - node = node.next - - def __str__(self): - """ - >>> linked_list = DoublyLinkedList() - >>> linked_list.insert_at_tail('a') - >>> linked_list.insert_at_tail('b') - >>> linked_list.insert_at_tail('c') - >>> str(linked_list) - 'a->b->c' - """ - return "->".join([str(item) for item in self]) - - def __len__(self): - """ - >>> linked_list = DoublyLinkedList() - >>> for i in range(0, 5): - ... linked_list.insert_at_nth(i, i + 1) - >>> len(linked_list) == 5 - True - """ - return sum(1 for _ in self) - - def insert_at_head(self, data): - self.insert_at_nth(0, data) - - def insert_at_tail(self, data): - self.insert_at_nth(len(self), data) - - def insert_at_nth(self, index: int, data): - """ - >>> linked_list = DoublyLinkedList() - >>> linked_list.insert_at_nth(-1, 666) - Traceback (most recent call last): - .... - IndexError: list index out of range - >>> linked_list.insert_at_nth(1, 666) - Traceback (most recent call last): - .... - IndexError: list index out of range - >>> linked_list.insert_at_nth(0, 2) - >>> linked_list.insert_at_nth(0, 1) - >>> linked_list.insert_at_nth(2, 4) - >>> linked_list.insert_at_nth(2, 3) - >>> str(linked_list) - '1->2->3->4' - >>> linked_list.insert_at_nth(5, 5) - Traceback (most recent call last): - .... - IndexError: list index out of range - """ - length = len(self) - - if not 0 <= index <= length: - raise IndexError("list index out of range") - new_node = Node(data) - if self.head is None: - self.head = self.tail = new_node - elif index == 0: - self.head.previous = new_node - new_node.next = self.head - self.head = new_node - elif index == length: - self.tail.next = new_node - new_node.previous = self.tail - self.tail = new_node - else: - temp = self.head - for _ in range(index): - temp = temp.next - temp.previous.next = new_node - new_node.previous = temp.previous - new_node.next = temp - temp.previous = new_node - - def delete_head(self): - return self.delete_at_nth(0) - - def delete_tail(self): - return self.delete_at_nth(len(self) - 1) - - def delete_at_nth(self, index: int): - """ - >>> linked_list = DoublyLinkedList() - >>> linked_list.delete_at_nth(0) - Traceback (most recent call last): - .... - IndexError: list index out of range - >>> for i in range(0, 5): - ... linked_list.insert_at_nth(i, i + 1) - >>> linked_list.delete_at_nth(0) == 1 - True - >>> linked_list.delete_at_nth(3) == 5 - True - >>> linked_list.delete_at_nth(1) == 3 - True - >>> str(linked_list) - '2->4' - >>> linked_list.delete_at_nth(2) - Traceback (most recent call last): - .... - IndexError: list index out of range - """ - length = len(self) - - if not 0 <= index <= length - 1: - raise IndexError("list index out of range") - delete_node = self.head # default first node - if length == 1: - self.head = self.tail = None - elif index == 0: - self.head = self.head.next - self.head.previous = None - elif index == length - 1: - delete_node = self.tail - self.tail = self.tail.previous - self.tail.next = None - else: - temp = self.head - for _ in range(index): - temp = temp.next - delete_node = temp - temp.next.previous = temp.previous - temp.previous.next = temp.next - return delete_node.data - - def delete(self, data) -> str: - current = self.head - - while current.data != data: # Find the position to delete - if current.next: - current = current.next - else: # We have reached the end an no value matches - raise ValueError("No data matching given value") - - if current == self.head: - self.delete_head() - - elif current == self.tail: - self.delete_tail() - - else: # Before: 1 <--> 2(current) <--> 3 - current.previous.next = current.next # 1 --> 3 - current.next.previous = current.previous # 1 <--> 3 - return data - - def is_empty(self): - """ - >>> linked_list = DoublyLinkedList() - >>> linked_list.is_empty() - True - >>> linked_list.insert_at_tail(1) - >>> linked_list.is_empty() - False - """ - return len(self) == 0 - - -def test_doubly_linked_list() -> None: - """ - >>> test_doubly_linked_list() - """ - linked_list = DoublyLinkedList() - assert linked_list.is_empty() is True - assert str(linked_list) == "" - - try: - linked_list.delete_head() - raise AssertionError # This should not happen. - except IndexError: - assert True # This should happen. - - try: - linked_list.delete_tail() - raise AssertionError # This should not happen. - except IndexError: - assert True # This should happen. - - for i in range(10): - assert len(linked_list) == i - linked_list.insert_at_nth(i, i + 1) - assert str(linked_list) == "->".join(str(i) for i in range(1, 11)) - - linked_list.insert_at_head(0) - linked_list.insert_at_tail(11) - assert str(linked_list) == "->".join(str(i) for i in range(12)) - - assert linked_list.delete_head() == 0 - assert linked_list.delete_at_nth(9) == 10 - assert linked_list.delete_tail() == 11 - assert len(linked_list) == 9 - assert str(linked_list) == "->".join(str(i) for i in range(1, 10)) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/linked_list/doubly_linked_list_two.py b/data_structures/linked_list/doubly_linked_list_two.py deleted file mode 100644 index e993cc5a20af..000000000000 --- a/data_structures/linked_list/doubly_linked_list_two.py +++ /dev/null @@ -1,250 +0,0 @@ -""" -- A linked list is similar to an array, it holds values. However, links in a linked - list do not have indexes. -- This is an example of a double ended, doubly linked list. -- Each link references the next link and the previous one. -- A Doubly Linked List (DLL) contains an extra pointer, typically called previous - pointer, together with next pointer and data which are there in singly linked list. - - Advantages over SLL - It can be traversed in both forward and backward direction. - Delete operation is more efficient -""" - - -class Node: - def __init__(self, data: int, previous=None, next_node=None): - self.data = data - self.previous = previous - self.next = next_node - - def __str__(self) -> str: - return f"{self.data}" - - def get_data(self) -> int: - return self.data - - def get_next(self): - return self.next - - def get_previous(self): - return self.previous - - -class LinkedListIterator: - def __init__(self, head): - self.current = head - - def __iter__(self): - return self - - def __next__(self): - if not self.current: - raise StopIteration - else: - value = self.current.get_data() - self.current = self.current.get_next() - return value - - -class LinkedList: - def __init__(self): - self.head = None # First node in list - self.tail = None # Last node in list - - def __str__(self): - current = self.head - nodes = [] - while current is not None: - nodes.append(current.get_data()) - current = current.get_next() - return " ".join(str(node) for node in nodes) - - def __contains__(self, value: int): - current = self.head - while current: - if current.get_data() == value: - return True - current = current.get_next() - return False - - def __iter__(self): - return LinkedListIterator(self.head) - - def get_head_data(self): - if self.head: - return self.head.get_data() - return None - - def get_tail_data(self): - if self.tail: - return self.tail.get_data() - return None - - def set_head(self, node: Node) -> None: - if self.head is None: - self.head = node - self.tail = node - else: - self.insert_before_node(self.head, node) - - def set_tail(self, node: Node) -> None: - if self.head is None: - self.set_head(node) - else: - self.insert_after_node(self.tail, node) - - def insert(self, value: int) -> None: - node = Node(value) - if self.head is None: - self.set_head(node) - else: - self.set_tail(node) - - def insert_before_node(self, node: Node, node_to_insert: Node) -> None: - node_to_insert.next = node - node_to_insert.previous = node.previous - - if node.get_previous() is None: - self.head = node_to_insert - else: - node.previous.next = node_to_insert - - node.previous = node_to_insert - - def insert_after_node(self, node: Node, node_to_insert: Node) -> None: - node_to_insert.previous = node - node_to_insert.next = node.next - - if node.get_next() is None: - self.tail = node_to_insert - else: - node.next.previous = node_to_insert - - node.next = node_to_insert - - def insert_at_position(self, position: int, value: int) -> None: - current_position = 1 - new_node = Node(value) - node = self.head - while node: - if current_position == position: - self.insert_before_node(node, new_node) - return - current_position += 1 - node = node.next - self.insert_after_node(self.tail, new_node) - - def get_node(self, item: int) -> Node: - node = self.head - while node: - if node.get_data() == item: - return node - node = node.get_next() - raise Exception("Node not found") - - def delete_value(self, value): - if (node := self.get_node(value)) is not None: - if node == self.head: - self.head = self.head.get_next() - - if node == self.tail: - self.tail = self.tail.get_previous() - - self.remove_node_pointers(node) - - @staticmethod - def remove_node_pointers(node: Node) -> None: - if node.get_next(): - node.next.previous = node.previous - - if node.get_previous(): - node.previous.next = node.next - - node.next = None - node.previous = None - - def is_empty(self): - return self.head is None - - -def create_linked_list() -> None: - """ - >>> new_linked_list = LinkedList() - >>> new_linked_list.get_head_data() is None - True - >>> new_linked_list.get_tail_data() is None - True - >>> new_linked_list.is_empty() - True - >>> new_linked_list.insert(10) - >>> new_linked_list.get_head_data() - 10 - >>> new_linked_list.get_tail_data() - 10 - >>> new_linked_list.insert_at_position(position=3, value=20) - >>> new_linked_list.get_head_data() - 10 - >>> new_linked_list.get_tail_data() - 20 - >>> new_linked_list.set_head(Node(1000)) - >>> new_linked_list.get_head_data() - 1000 - >>> new_linked_list.get_tail_data() - 20 - >>> new_linked_list.set_tail(Node(2000)) - >>> new_linked_list.get_head_data() - 1000 - >>> new_linked_list.get_tail_data() - 2000 - >>> for value in new_linked_list: - ... print(value) - 1000 - 10 - 20 - 2000 - >>> new_linked_list.is_empty() - False - >>> for value in new_linked_list: - ... print(value) - 1000 - 10 - 20 - 2000 - >>> 10 in new_linked_list - True - >>> new_linked_list.delete_value(value=10) - >>> 10 in new_linked_list - False - >>> new_linked_list.delete_value(value=2000) - >>> new_linked_list.get_tail_data() - 20 - >>> new_linked_list.delete_value(value=1000) - >>> new_linked_list.get_tail_data() - 20 - >>> new_linked_list.get_head_data() - 20 - >>> for value in new_linked_list: - ... print(value) - 20 - >>> new_linked_list.delete_value(value=20) - >>> for value in new_linked_list: - ... print(value) - >>> for value in range(1,10): - ... new_linked_list.insert(value=value) - >>> for value in new_linked_list: - ... print(value) - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - """ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/linked_list/floyds_cycle_detection.py b/data_structures/linked_list/floyds_cycle_detection.py deleted file mode 100644 index 6c3f13760260..000000000000 --- a/data_structures/linked_list/floyds_cycle_detection.py +++ /dev/null @@ -1,150 +0,0 @@ -""" -Floyd's cycle detection algorithm is a popular algorithm used to detect cycles -in a linked list. It uses two pointers, a slow pointer and a fast pointer, -to traverse the linked list. The slow pointer moves one node at a time while the fast -pointer moves two nodes at a time. If there is a cycle in the linked list, -the fast pointer will eventually catch up to the slow pointer and they will -meet at the same node. If there is no cycle, the fast pointer will reach the end of -the linked list and the algorithm will terminate. - -For more information: https://en.wikipedia.org/wiki/Cycle_detection#Floyd's_tortoise_and_hare -""" - -from collections.abc import Iterator -from dataclasses import dataclass -from typing import Any, Self - - -@dataclass -class Node: - """ - A class representing a node in a singly linked list. - """ - - data: Any - next_node: Self | None = None - - -@dataclass -class LinkedList: - """ - A class representing a singly linked list. - """ - - head: Node | None = None - - def __iter__(self) -> Iterator: - """ - Iterates through the linked list. - - Returns: - Iterator: An iterator over the linked list. - - Examples: - >>> linked_list = LinkedList() - >>> list(linked_list) - [] - >>> linked_list.add_node(1) - >>> tuple(linked_list) - (1,) - """ - visited = [] - node = self.head - while node: - # Avoid infinite loop in there's a cycle - if node in visited: - return - visited.append(node) - yield node.data - node = node.next_node - - def add_node(self, data: Any) -> None: - """ - Adds a new node to the end of the linked list. - - Args: - data (Any): The data to be stored in the new node. - - Examples: - >>> linked_list = LinkedList() - >>> linked_list.add_node(1) - >>> linked_list.add_node(2) - >>> linked_list.add_node(3) - >>> linked_list.add_node(4) - >>> tuple(linked_list) - (1, 2, 3, 4) - """ - new_node = Node(data) - - if self.head is None: - self.head = new_node - return - - current_node = self.head - while current_node.next_node is not None: - current_node = current_node.next_node - - current_node.next_node = new_node - - def detect_cycle(self) -> bool: - """ - Detects if there is a cycle in the linked list using - Floyd's cycle detection algorithm. - - Returns: - bool: True if there is a cycle, False otherwise. - - Examples: - >>> linked_list = LinkedList() - >>> linked_list.add_node(1) - >>> linked_list.add_node(2) - >>> linked_list.add_node(3) - >>> linked_list.add_node(4) - - >>> linked_list.detect_cycle() - False - - # Create a cycle in the linked list - >>> linked_list.head.next_node.next_node.next_node = linked_list.head.next_node - - >>> linked_list.detect_cycle() - True - """ - if self.head is None: - return False - - slow_pointer: Node | None = self.head - fast_pointer: Node | None = self.head - - while fast_pointer is not None and fast_pointer.next_node is not None: - slow_pointer = slow_pointer.next_node if slow_pointer else None - fast_pointer = fast_pointer.next_node.next_node - if slow_pointer == fast_pointer: - return True - - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - linked_list = LinkedList() - linked_list.add_node(1) - linked_list.add_node(2) - linked_list.add_node(3) - linked_list.add_node(4) - - # Create a cycle in the linked list - # It first checks if the head, next_node, and next_node.next_node attributes of the - # linked list are not None to avoid any potential type errors. - if ( - linked_list.head - and linked_list.head.next_node - and linked_list.head.next_node.next_node - ): - linked_list.head.next_node.next_node.next_node = linked_list.head.next_node - - has_cycle = linked_list.detect_cycle() - print(has_cycle) # Output: True diff --git a/data_structures/linked_list/from_sequence.py b/data_structures/linked_list/from_sequence.py deleted file mode 100644 index 94b44f15037f..000000000000 --- a/data_structures/linked_list/from_sequence.py +++ /dev/null @@ -1,44 +0,0 @@ -# Recursive Prorgam to create a Linked List from a sequence and -# print a string representation of it. - - -class Node: - def __init__(self, data=None): - self.data = data - self.next = None - - def __repr__(self): - """Returns a visual representation of the node and all its following nodes.""" - string_rep = "" - temp = self - while temp: - string_rep += f"<{temp.data}> ---> " - temp = temp.next - string_rep += "<END>" - return string_rep - - -def make_linked_list(elements_list): - """Creates a Linked List from the elements of the given sequence - (list/tuple) and returns the head of the Linked List.""" - - # if elements_list is empty - if not elements_list: - raise Exception("The Elements List is empty") - - # Set first element as Head - head = Node(elements_list[0]) - current = head - # Loop through elements from position 1 - for data in elements_list[1:]: - current.next = Node(data) - current = current.next - return head - - -list_data = [1, 3, 5, 32, 44, 12, 43] -print(f"List: {list_data}") -print("Creating Linked List from List.") -linked_list = make_linked_list(list_data) -print("Linked List:") -print(linked_list) diff --git a/data_structures/linked_list/has_loop.py b/data_structures/linked_list/has_loop.py deleted file mode 100644 index f49e01579adc..000000000000 --- a/data_structures/linked_list/has_loop.py +++ /dev/null @@ -1,62 +0,0 @@ -from __future__ import annotations - -from typing import Any - - -class ContainsLoopError(Exception): - pass - - -class Node: - def __init__(self, data: Any) -> None: - self.data: Any = data - self.next_node: Node | None = None - - def __iter__(self): - node = self - visited = set() - while node: - if node in visited: - raise ContainsLoopError - visited.add(node) - yield node.data - node = node.next_node - - @property - def has_loop(self) -> bool: - """ - A loop is when the exact same Node appears more than once in a linked list. - >>> root_node = Node(1) - >>> root_node.next_node = Node(2) - >>> root_node.next_node.next_node = Node(3) - >>> root_node.next_node.next_node.next_node = Node(4) - >>> root_node.has_loop - False - >>> root_node.next_node.next_node.next_node = root_node.next_node - >>> root_node.has_loop - True - """ - try: - list(self) - return False - except ContainsLoopError: - return True - - -if __name__ == "__main__": - root_node = Node(1) - root_node.next_node = Node(2) - root_node.next_node.next_node = Node(3) - root_node.next_node.next_node.next_node = Node(4) - print(root_node.has_loop) # False - root_node.next_node.next_node.next_node = root_node.next_node - print(root_node.has_loop) # True - - root_node = Node(5) - root_node.next_node = Node(6) - root_node.next_node.next_node = Node(5) - root_node.next_node.next_node.next_node = Node(6) - print(root_node.has_loop) # False - - root_node = Node(1) - print(root_node.has_loop) # False diff --git a/data_structures/linked_list/is_palindrome.py b/data_structures/linked_list/is_palindrome.py deleted file mode 100644 index da788e3e5045..000000000000 --- a/data_structures/linked_list/is_palindrome.py +++ /dev/null @@ -1,185 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass - - -@dataclass -class ListNode: - val: int = 0 - next_node: ListNode | None = None - - -def is_palindrome(head: ListNode | None) -> bool: - """ - Check if a linked list is a palindrome. - - Args: - head: The head of the linked list. - - Returns: - bool: True if the linked list is a palindrome, False otherwise. - - Examples: - >>> is_palindrome(None) - True - - >>> is_palindrome(ListNode(1)) - True - - >>> is_palindrome(ListNode(1, ListNode(2))) - False - - >>> is_palindrome(ListNode(1, ListNode(2, ListNode(1)))) - True - - >>> is_palindrome(ListNode(1, ListNode(2, ListNode(2, ListNode(1))))) - True - """ - if not head: - return True - # split the list to two parts - fast: ListNode | None = head.next_node - slow: ListNode | None = head - while fast and fast.next_node: - fast = fast.next_node.next_node - slow = slow.next_node if slow else None - if slow: - # slow will always be defined, - # adding this check to resolve mypy static check - second = slow.next_node - slow.next_node = None # Don't forget here! But forget still works! - # reverse the second part - node: ListNode | None = None - while second: - nxt = second.next_node - second.next_node = node - node = second - second = nxt - # compare two parts - # second part has the same or one less node - while node and head: - if node.val != head.val: - return False - node = node.next_node - head = head.next_node - return True - - -def is_palindrome_stack(head: ListNode | None) -> bool: - """ - Check if a linked list is a palindrome using a stack. - - Args: - head (ListNode): The head of the linked list. - - Returns: - bool: True if the linked list is a palindrome, False otherwise. - - Examples: - >>> is_palindrome_stack(None) - True - - >>> is_palindrome_stack(ListNode(1)) - True - - >>> is_palindrome_stack(ListNode(1, ListNode(2))) - False - - >>> is_palindrome_stack(ListNode(1, ListNode(2, ListNode(1)))) - True - - >>> is_palindrome_stack(ListNode(1, ListNode(2, ListNode(2, ListNode(1))))) - True - """ - if not head or not head.next_node: - return True - - # 1. Get the midpoint (slow) - slow: ListNode | None = head - fast: ListNode | None = head - while fast and fast.next_node: - fast = fast.next_node.next_node - slow = slow.next_node if slow else None - - # slow will always be defined, - # adding this check to resolve mypy static check - if slow: - stack = [slow.val] - - # 2. Push the second half into the stack - while slow.next_node: - slow = slow.next_node - stack.append(slow.val) - - # 3. Comparison - cur: ListNode | None = head - while stack and cur: - if stack.pop() != cur.val: - return False - cur = cur.next_node - - return True - - -def is_palindrome_dict(head: ListNode | None) -> bool: - """ - Check if a linked list is a palindrome using a dictionary. - - Args: - head (ListNode): The head of the linked list. - - Returns: - bool: True if the linked list is a palindrome, False otherwise. - - Examples: - >>> is_palindrome_dict(None) - True - - >>> is_palindrome_dict(ListNode(1)) - True - - >>> is_palindrome_dict(ListNode(1, ListNode(2))) - False - - >>> is_palindrome_dict(ListNode(1, ListNode(2, ListNode(1)))) - True - - >>> is_palindrome_dict(ListNode(1, ListNode(2, ListNode(2, ListNode(1))))) - True - - >>> is_palindrome_dict( - ... ListNode( - ... 1, ListNode(2, ListNode(1, ListNode(3, ListNode(2, ListNode(1))))) - ... ) - ... ) - False - """ - if not head or not head.next_node: - return True - d: dict[int, list[int]] = {} - pos = 0 - while head: - if head.val in d: - d[head.val].append(pos) - else: - d[head.val] = [pos] - head = head.next_node - pos += 1 - checksum = pos - 1 - middle = 0 - for v in d.values(): - if len(v) % 2 != 0: - middle += 1 - else: - for step, i in enumerate(range(len(v))): - if v[i] + v[len(v) - 1 - step] != checksum: - return False - if middle > 1: - return False - return True - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/linked_list/merge_two_lists.py b/data_structures/linked_list/merge_two_lists.py deleted file mode 100644 index e47dbdadcf39..000000000000 --- a/data_structures/linked_list/merge_two_lists.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Algorithm that merges two sorted linked lists into one sorted linked list. -""" - -from __future__ import annotations - -from collections.abc import Iterable, Iterator -from dataclasses import dataclass - -test_data_odd = (3, 9, -11, 0, 7, 5, 1, -1) -test_data_even = (4, 6, 2, 0, 8, 10, 3, -2) - - -@dataclass -class Node: - data: int - next_node: Node | None - - -class SortedLinkedList: - def __init__(self, ints: Iterable[int]) -> None: - self.head: Node | None = None - for i in sorted(ints, reverse=True): - self.head = Node(i, self.head) - - def __iter__(self) -> Iterator[int]: - """ - >>> tuple(SortedLinkedList(test_data_odd)) == tuple(sorted(test_data_odd)) - True - >>> tuple(SortedLinkedList(test_data_even)) == tuple(sorted(test_data_even)) - True - """ - node = self.head - while node: - yield node.data - node = node.next_node - - def __len__(self) -> int: - """ - >>> for i in range(3): - ... len(SortedLinkedList(range(i))) == i - True - True - True - >>> len(SortedLinkedList(test_data_odd)) - 8 - """ - return sum(1 for _ in self) - - def __str__(self) -> str: - """ - >>> str(SortedLinkedList([])) - '' - >>> str(SortedLinkedList(test_data_odd)) - '-11 -> -1 -> 0 -> 1 -> 3 -> 5 -> 7 -> 9' - >>> str(SortedLinkedList(test_data_even)) - '-2 -> 0 -> 2 -> 3 -> 4 -> 6 -> 8 -> 10' - """ - return " -> ".join([str(node) for node in self]) - - -def merge_lists( - sll_one: SortedLinkedList, sll_two: SortedLinkedList -) -> SortedLinkedList: - """ - >>> SSL = SortedLinkedList - >>> merged = merge_lists(SSL(test_data_odd), SSL(test_data_even)) - >>> len(merged) - 16 - >>> str(merged) - '-11 -> -2 -> -1 -> 0 -> 0 -> 1 -> 2 -> 3 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10' - >>> list(merged) == list(sorted(test_data_odd + test_data_even)) - True - """ - return SortedLinkedList(list(sll_one) + list(sll_two)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - SSL = SortedLinkedList - print(merge_lists(SSL(test_data_odd), SSL(test_data_even))) diff --git a/data_structures/linked_list/middle_element_of_linked_list.py b/data_structures/linked_list/middle_element_of_linked_list.py deleted file mode 100644 index 86dad6b41d73..000000000000 --- a/data_structures/linked_list/middle_element_of_linked_list.py +++ /dev/null @@ -1,68 +0,0 @@ -from __future__ import annotations - - -class Node: - def __init__(self, data: int) -> None: - self.data = data - self.next = None - - -class LinkedList: - def __init__(self): - self.head = None - - def push(self, new_data: int) -> int: - new_node = Node(new_data) - new_node.next = self.head - self.head = new_node - return self.head.data - - def middle_element(self) -> int | None: - """ - >>> link = LinkedList() - >>> link.middle_element() - No element found. - >>> link.push(5) - 5 - >>> link.push(6) - 6 - >>> link.push(8) - 8 - >>> link.push(8) - 8 - >>> link.push(10) - 10 - >>> link.push(12) - 12 - >>> link.push(17) - 17 - >>> link.push(7) - 7 - >>> link.push(3) - 3 - >>> link.push(20) - 20 - >>> link.push(-20) - -20 - >>> link.middle_element() - 12 - >>> - """ - slow_pointer = self.head - fast_pointer = self.head - if self.head: - while fast_pointer and fast_pointer.next: - fast_pointer = fast_pointer.next.next - slow_pointer = slow_pointer.next - return slow_pointer.data - else: - print("No element found.") - return None - - -if __name__ == "__main__": - link = LinkedList() - for _ in range(int(input().strip())): - data = int(input().strip()) - link.push(data) - print(link.middle_element()) diff --git a/data_structures/linked_list/print_reverse.py b/data_structures/linked_list/print_reverse.py deleted file mode 100644 index a023745dee69..000000000000 --- a/data_structures/linked_list/print_reverse.py +++ /dev/null @@ -1,126 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterable, Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - data: int - next_node: Node | None = None - - -class LinkedList: - """A class to represent a Linked List. - Use a tail pointer to speed up the append() operation. - """ - - def __init__(self) -> None: - """Initialize a LinkedList with the head node set to None. - >>> linked_list = LinkedList() - >>> (linked_list.head, linked_list.tail) - (None, None) - """ - self.head: Node | None = None - self.tail: Node | None = None # Speeds up the append() operation - - def __iter__(self) -> Iterator[int]: - """Iterate the LinkedList yielding each Node's data. - >>> linked_list = LinkedList() - >>> items = (1, 2, 3, 4, 5) - >>> linked_list.extend(items) - >>> tuple(linked_list) == items - True - """ - node = self.head - while node: - yield node.data - node = node.next_node - - def __repr__(self) -> str: - """Returns a string representation of the LinkedList. - >>> linked_list = LinkedList() - >>> str(linked_list) - '' - >>> linked_list.append(1) - >>> str(linked_list) - '1' - >>> linked_list.extend([2, 3, 4, 5]) - >>> str(linked_list) - '1 -> 2 -> 3 -> 4 -> 5' - """ - return " -> ".join([str(data) for data in self]) - - def append(self, data: int) -> None: - """Appends a new node with the given data to the end of the LinkedList. - >>> linked_list = LinkedList() - >>> str(linked_list) - '' - >>> linked_list.append(1) - >>> str(linked_list) - '1' - >>> linked_list.append(2) - >>> str(linked_list) - '1 -> 2' - """ - if self.tail: - self.tail.next_node = self.tail = Node(data) - else: - self.head = self.tail = Node(data) - - def extend(self, items: Iterable[int]) -> None: - """Appends each item to the end of the LinkedList. - >>> linked_list = LinkedList() - >>> linked_list.extend([]) - >>> str(linked_list) - '' - >>> linked_list.extend([1, 2]) - >>> str(linked_list) - '1 -> 2' - >>> linked_list.extend([3,4]) - >>> str(linked_list) - '1 -> 2 -> 3 -> 4' - """ - for item in items: - self.append(item) - - -def make_linked_list(elements_list: Iterable[int]) -> LinkedList: - """Creates a Linked List from the elements of the given sequence - (list/tuple) and returns the head of the Linked List. - >>> make_linked_list([]) - Traceback (most recent call last): - ... - Exception: The Elements List is empty - >>> make_linked_list([7]) - 7 - >>> make_linked_list(['abc']) - abc - >>> make_linked_list([7, 25]) - 7 -> 25 - """ - if not elements_list: - raise Exception("The Elements List is empty") - - linked_list = LinkedList() - linked_list.extend(elements_list) - return linked_list - - -def in_reverse(linked_list: LinkedList) -> str: - """Prints the elements of the given Linked List in reverse order - >>> in_reverse(LinkedList()) - '' - >>> in_reverse(make_linked_list([69, 88, 73])) - '73 <- 88 <- 69' - """ - return " <- ".join(str(line) for line in reversed(tuple(linked_list))) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - linked_list = make_linked_list((14, 52, 14, 12, 43)) - print(f"Linked List: {linked_list}") - print(f"Reverse List: {in_reverse(linked_list)}") diff --git a/data_structures/linked_list/reverse_k_group.py b/data_structures/linked_list/reverse_k_group.py deleted file mode 100644 index 5fc45491a540..000000000000 --- a/data_structures/linked_list/reverse_k_group.py +++ /dev/null @@ -1,118 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterable, Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - data: int - next_node: Node | None = None - - -class LinkedList: - def __init__(self, ints: Iterable[int]) -> None: - self.head: Node | None = None - for i in ints: - self.append(i) - - def __iter__(self) -> Iterator[int]: - """ - >>> ints = [] - >>> list(LinkedList(ints)) == ints - True - >>> ints = tuple(range(5)) - >>> tuple(LinkedList(ints)) == ints - True - """ - node = self.head - while node: - yield node.data - node = node.next_node - - def __len__(self) -> int: - """ - >>> for i in range(3): - ... len(LinkedList(range(i))) == i - True - True - True - >>> len(LinkedList("abcdefgh")) - 8 - """ - return sum(1 for _ in self) - - def __str__(self) -> str: - """ - >>> str(LinkedList([])) - '' - >>> str(LinkedList(range(5))) - '0 -> 1 -> 2 -> 3 -> 4' - """ - return " -> ".join([str(node) for node in self]) - - def append(self, data: int) -> None: - """ - >>> ll = LinkedList([1, 2]) - >>> tuple(ll) - (1, 2) - >>> ll.append(3) - >>> tuple(ll) - (1, 2, 3) - >>> ll.append(4) - >>> tuple(ll) - (1, 2, 3, 4) - >>> len(ll) - 4 - """ - if not self.head: - self.head = Node(data) - return - node = self.head - while node.next_node: - node = node.next_node - node.next_node = Node(data) - - def reverse_k_nodes(self, group_size: int) -> None: - """ - reverse nodes within groups of size k - >>> ll = LinkedList([1, 2, 3, 4, 5]) - >>> ll.reverse_k_nodes(2) - >>> tuple(ll) - (2, 1, 4, 3, 5) - >>> str(ll) - '2 -> 1 -> 4 -> 3 -> 5' - """ - if self.head is None or self.head.next_node is None: - return - - length = len(self) - dummy_head = Node(0) - dummy_head.next_node = self.head - previous_node = dummy_head - - while length >= group_size: - current_node = previous_node.next_node - assert current_node - next_node = current_node.next_node - for _ in range(1, group_size): - assert next_node, current_node - current_node.next_node = next_node.next_node - assert previous_node - next_node.next_node = previous_node.next_node - previous_node.next_node = next_node - next_node = current_node.next_node - previous_node = current_node - length -= group_size - self.head = dummy_head.next_node - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - ll = LinkedList([1, 2, 3, 4, 5]) - print(f"Original Linked List: {ll}") - k = 2 - ll.reverse_k_nodes(k) - print(f"After reversing groups of size {k}: {ll}") diff --git a/data_structures/linked_list/rotate_to_the_right.py b/data_structures/linked_list/rotate_to_the_right.py deleted file mode 100644 index 6b1c54f4be4d..000000000000 --- a/data_structures/linked_list/rotate_to_the_right.py +++ /dev/null @@ -1,156 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass - - -@dataclass -class Node: - data: int - next_node: Node | None = None - - -def print_linked_list(head: Node | None) -> None: - """ - Print the entire linked list iteratively. - - This function prints the elements of a linked list separated by '->'. - - Parameters: - head (Node | None): The head of the linked list to be printed, - or None if the linked list is empty. - - >>> head = insert_node(None, 0) - >>> head = insert_node(head, 2) - >>> head = insert_node(head, 1) - >>> print_linked_list(head) - 0->2->1 - >>> head = insert_node(head, 4) - >>> head = insert_node(head, 5) - >>> print_linked_list(head) - 0->2->1->4->5 - """ - if head is None: - return - while head.next_node is not None: - print(head.data, end="->") - head = head.next_node - print(head.data) - - -def insert_node(head: Node | None, data: int) -> Node: - """ - Insert a new node at the end of a linked list and return the new head. - - Parameters: - head (Node | None): The head of the linked list. - data (int): The data to be inserted into the new node. - - Returns: - Node: The new head of the linked list. - - >>> head = insert_node(None, 10) - >>> head = insert_node(head, 9) - >>> head = insert_node(head, 8) - >>> print_linked_list(head) - 10->9->8 - """ - new_node = Node(data) - # If the linked list is empty, the new_node becomes the head - if head is None: - return new_node - - temp_node = head - while temp_node.next_node: - temp_node = temp_node.next_node - - temp_node.next_node = new_node - return head - - -def rotate_to_the_right(head: Node, places: int) -> Node: - """ - Rotate a linked list to the right by places times. - - Parameters: - head: The head of the linked list. - places: The number of places to rotate. - - Returns: - Node: The head of the rotated linked list. - - >>> rotate_to_the_right(None, places=1) - Traceback (most recent call last): - ... - ValueError: The linked list is empty. - >>> head = insert_node(None, 1) - >>> rotate_to_the_right(head, places=1) == head - True - >>> head = insert_node(None, 1) - >>> head = insert_node(head, 2) - >>> head = insert_node(head, 3) - >>> head = insert_node(head, 4) - >>> head = insert_node(head, 5) - >>> new_head = rotate_to_the_right(head, places=2) - >>> print_linked_list(new_head) - 4->5->1->2->3 - """ - # Check if the list is empty or has only one element - if not head: - raise ValueError("The linked list is empty.") - - if head.next_node is None: - return head - - # Calculate the length of the linked list - length = 1 - temp_node = head - while temp_node.next_node is not None: - length += 1 - temp_node = temp_node.next_node - - # Adjust the value of places to avoid places longer than the list. - places %= length - - if places == 0: - return head # As no rotation is needed. - - # Find the new head position after rotation. - new_head_index = length - places - - # Traverse to the new head position - temp_node = head - for _ in range(new_head_index - 1): - assert temp_node.next_node - temp_node = temp_node.next_node - - # Update pointers to perform rotation - assert temp_node.next_node - new_head = temp_node.next_node - temp_node.next_node = None - temp_node = new_head - while temp_node.next_node: - temp_node = temp_node.next_node - temp_node.next_node = head - - assert new_head - return new_head - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - head = insert_node(None, 5) - head = insert_node(head, 1) - head = insert_node(head, 2) - head = insert_node(head, 4) - head = insert_node(head, 3) - - print("Original list: ", end="") - print_linked_list(head) - - places = 3 - new_head = rotate_to_the_right(head, places) - - print(f"After {places} iterations: ", end="") - print_linked_list(new_head) diff --git a/data_structures/linked_list/singly_linked_list.py b/data_structures/linked_list/singly_linked_list.py deleted file mode 100644 index 2c6713a47ad9..000000000000 --- a/data_structures/linked_list/singly_linked_list.py +++ /dev/null @@ -1,529 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass -from typing import Any - - -@dataclass -class Node: - """ - Create and initialize Node class instance. - >>> Node(20) - Node(20) - >>> Node("Hello, world!") - Node(Hello, world!) - >>> Node(None) - Node(None) - >>> Node(True) - Node(True) - """ - - data: Any - next_node: Node | None = None - - def __repr__(self) -> str: - """ - Get the string representation of this node. - >>> Node(10).__repr__() - 'Node(10)' - >>> repr(Node(10)) - 'Node(10)' - >>> str(Node(10)) - 'Node(10)' - >>> Node(10) - Node(10) - """ - return f"Node({self.data})" - - -class LinkedList: - def __init__(self): - """ - Create and initialize LinkedList class instance. - >>> linked_list = LinkedList() - >>> linked_list.head is None - True - """ - self.head = None - - def __iter__(self) -> Iterator[Any]: - """ - This function is intended for iterators to access - and iterate through data inside linked list. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("tail") - >>> linked_list.insert_tail("tail_1") - >>> linked_list.insert_tail("tail_2") - >>> for node in linked_list: # __iter__ used here. - ... node - 'tail' - 'tail_1' - 'tail_2' - """ - node = self.head - while node: - yield node.data - node = node.next_node - - def __len__(self) -> int: - """ - Return length of linked list i.e. number of nodes - >>> linked_list = LinkedList() - >>> len(linked_list) - 0 - >>> linked_list.insert_tail("tail") - >>> len(linked_list) - 1 - >>> linked_list.insert_head("head") - >>> len(linked_list) - 2 - >>> _ = linked_list.delete_tail() - >>> len(linked_list) - 1 - >>> _ = linked_list.delete_head() - >>> len(linked_list) - 0 - """ - return sum(1 for _ in self) - - def __repr__(self) -> str: - """ - String representation/visualization of a Linked Lists - >>> linked_list = LinkedList() - >>> linked_list.insert_tail(1) - >>> linked_list.insert_tail(3) - >>> linked_list.__repr__() - '1 -> 3' - >>> repr(linked_list) - '1 -> 3' - >>> str(linked_list) - '1 -> 3' - >>> linked_list.insert_tail(5) - >>> f"{linked_list}" - '1 -> 3 -> 5' - """ - return " -> ".join([str(item) for item in self]) - - def __getitem__(self, index: int) -> Any: - """ - Indexing Support. Used to get a node at particular position - >>> linked_list = LinkedList() - >>> for i in range(0, 10): - ... linked_list.insert_nth(i, i) - >>> all(str(linked_list[i]) == str(i) for i in range(0, 10)) - True - >>> linked_list[-10] - Traceback (most recent call last): - ... - ValueError: list index out of range. - >>> linked_list[len(linked_list)] - Traceback (most recent call last): - ... - ValueError: list index out of range. - """ - if not 0 <= index < len(self): - raise ValueError("list index out of range.") - for i, node in enumerate(self): - if i == index: - return node - return None - - # Used to change the data of a particular node - def __setitem__(self, index: int, data: Any) -> None: - """ - >>> linked_list = LinkedList() - >>> for i in range(0, 10): - ... linked_list.insert_nth(i, i) - >>> linked_list[0] = 666 - >>> linked_list[0] - 666 - >>> linked_list[5] = -666 - >>> linked_list[5] - -666 - >>> linked_list[-10] = 666 - Traceback (most recent call last): - ... - ValueError: list index out of range. - >>> linked_list[len(linked_list)] = 666 - Traceback (most recent call last): - ... - ValueError: list index out of range. - """ - if not 0 <= index < len(self): - raise ValueError("list index out of range.") - current = self.head - for _ in range(index): - current = current.next_node - current.data = data - - def insert_tail(self, data: Any) -> None: - """ - Insert data to the end of linked list. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("tail") - >>> linked_list - tail - >>> linked_list.insert_tail("tail_2") - >>> linked_list - tail -> tail_2 - >>> linked_list.insert_tail("tail_3") - >>> linked_list - tail -> tail_2 -> tail_3 - """ - self.insert_nth(len(self), data) - - def insert_head(self, data: Any) -> None: - """ - Insert data to the beginning of linked list. - >>> linked_list = LinkedList() - >>> linked_list.insert_head("head") - >>> linked_list - head - >>> linked_list.insert_head("head_2") - >>> linked_list - head_2 -> head - >>> linked_list.insert_head("head_3") - >>> linked_list - head_3 -> head_2 -> head - """ - self.insert_nth(0, data) - - def insert_nth(self, index: int, data: Any) -> None: - """ - Insert data at given index. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("first") - >>> linked_list.insert_tail("second") - >>> linked_list.insert_tail("third") - >>> linked_list - first -> second -> third - >>> linked_list.insert_nth(1, "fourth") - >>> linked_list - first -> fourth -> second -> third - >>> linked_list.insert_nth(3, "fifth") - >>> linked_list - first -> fourth -> second -> fifth -> third - """ - if not 0 <= index <= len(self): - raise IndexError("list index out of range") - new_node = Node(data) - if self.head is None: - self.head = new_node - elif index == 0: - new_node.next_node = self.head # link new_node to head - self.head = new_node - else: - temp = self.head - for _ in range(index - 1): - temp = temp.next_node - new_node.next_node = temp.next_node - temp.next_node = new_node - - def print_list(self) -> None: # print every node data - """ - This method prints every node data. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("first") - >>> linked_list.insert_tail("second") - >>> linked_list.insert_tail("third") - >>> linked_list - first -> second -> third - """ - print(self) - - def delete_head(self) -> Any: - """ - Delete the first node and return the - node's data. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("first") - >>> linked_list.insert_tail("second") - >>> linked_list.insert_tail("third") - >>> linked_list - first -> second -> third - >>> linked_list.delete_head() - 'first' - >>> linked_list - second -> third - >>> linked_list.delete_head() - 'second' - >>> linked_list - third - >>> linked_list.delete_head() - 'third' - >>> linked_list.delete_head() - Traceback (most recent call last): - ... - IndexError: List index out of range. - """ - return self.delete_nth(0) - - def delete_tail(self) -> Any: # delete from tail - """ - Delete the tail end node and return the - node's data. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("first") - >>> linked_list.insert_tail("second") - >>> linked_list.insert_tail("third") - >>> linked_list - first -> second -> third - >>> linked_list.delete_tail() - 'third' - >>> linked_list - first -> second - >>> linked_list.delete_tail() - 'second' - >>> linked_list - first - >>> linked_list.delete_tail() - 'first' - >>> linked_list.delete_tail() - Traceback (most recent call last): - ... - IndexError: List index out of range. - """ - return self.delete_nth(len(self) - 1) - - def delete_nth(self, index: int = 0) -> Any: - """ - Delete node at given index and return the - node's data. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("first") - >>> linked_list.insert_tail("second") - >>> linked_list.insert_tail("third") - >>> linked_list - first -> second -> third - >>> linked_list.delete_nth(1) # delete middle - 'second' - >>> linked_list - first -> third - >>> linked_list.delete_nth(5) # this raises error - Traceback (most recent call last): - ... - IndexError: List index out of range. - >>> linked_list.delete_nth(-1) # this also raises error - Traceback (most recent call last): - ... - IndexError: List index out of range. - """ - if not 0 <= index <= len(self) - 1: # test if index is valid - raise IndexError("List index out of range.") - delete_node = self.head # default first node - if index == 0: - self.head = self.head.next_node - else: - temp = self.head - for _ in range(index - 1): - temp = temp.next_node - delete_node = temp.next_node - temp.next_node = temp.next_node.next_node - return delete_node.data - - def is_empty(self) -> bool: - """ - Check if linked list is empty. - >>> linked_list = LinkedList() - >>> linked_list.is_empty() - True - >>> linked_list.insert_head("first") - >>> linked_list.is_empty() - False - """ - return self.head is None - - def reverse(self) -> None: - """ - This reverses the linked list order. - >>> linked_list = LinkedList() - >>> linked_list.insert_tail("first") - >>> linked_list.insert_tail("second") - >>> linked_list.insert_tail("third") - >>> linked_list - first -> second -> third - >>> linked_list.reverse() - >>> linked_list - third -> second -> first - """ - prev = None - current = self.head - - while current: - # Store the current node's next node. - next_node = current.next_node - # Make the current node's next_node point backwards - current.next_node = prev - # Make the previous node be the current node - prev = current - # Make the current node the next_node node (to progress iteration) - current = next_node - # Return prev in order to put the head at the end - self.head = prev - - -def test_singly_linked_list() -> None: - """ - >>> test_singly_linked_list() - """ - linked_list = LinkedList() - assert linked_list.is_empty() is True - assert str(linked_list) == "" - - try: - linked_list.delete_head() - raise AssertionError # This should not happen. - except IndexError: - assert True # This should happen. - - try: - linked_list.delete_tail() - raise AssertionError # This should not happen. - except IndexError: - assert True # This should happen. - - for i in range(10): - assert len(linked_list) == i - linked_list.insert_nth(i, i + 1) - assert str(linked_list) == " -> ".join(str(i) for i in range(1, 11)) - - linked_list.insert_head(0) - linked_list.insert_tail(11) - assert str(linked_list) == " -> ".join(str(i) for i in range(12)) - - assert linked_list.delete_head() == 0 - assert linked_list.delete_nth(9) == 10 - assert linked_list.delete_tail() == 11 - assert len(linked_list) == 9 - assert str(linked_list) == " -> ".join(str(i) for i in range(1, 10)) - - assert all(linked_list[i] == i + 1 for i in range(9)) is True - - for i in range(9): - linked_list[i] = -i - assert all(linked_list[i] == -i for i in range(9)) is True - - linked_list.reverse() - assert str(linked_list) == " -> ".join(str(i) for i in range(-8, 1)) - - -def test_singly_linked_list_2() -> None: - """ - This section of the test used varying data types for input. - >>> test_singly_linked_list_2() - """ - test_input = [ - -9, - 100, - Node(77345112), - "dlrow olleH", - 7, - 5555, - 0, - -192.55555, - "Hello, world!", - 77.9, - Node(10), - None, - None, - 12.20, - ] - linked_list = LinkedList() - - for i in test_input: - linked_list.insert_tail(i) - - # Check if it's empty or not - assert linked_list.is_empty() is False - assert ( - str(linked_list) - == "-9 -> 100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> " - "0 -> -192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None -> 12.2" - ) - - # Delete the head - result = linked_list.delete_head() - assert result == -9 - assert ( - str(linked_list) == "100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> 0 -> " - "-192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None -> 12.2" - ) - - # Delete the tail - result = linked_list.delete_tail() - assert result == 12.2 - assert ( - str(linked_list) == "100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> 0 -> " - "-192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None" - ) - - # Delete a node in specific location in linked list - result = linked_list.delete_nth(10) - assert result is None - assert ( - str(linked_list) == "100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> 0 -> " - "-192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None" - ) - - # Add a Node instance to its head - linked_list.insert_head(Node("Hello again, world!")) - assert ( - str(linked_list) - == "Node(Hello again, world!) -> 100 -> Node(77345112) -> dlrow olleH -> " - "7 -> 5555 -> 0 -> -192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None" - ) - - # Add None to its tail - linked_list.insert_tail(None) - assert ( - str(linked_list) - == "Node(Hello again, world!) -> 100 -> Node(77345112) -> dlrow olleH -> 7 -> " - "5555 -> 0 -> -192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None" - ) - - # Reverse the linked list - linked_list.reverse() - assert ( - str(linked_list) - == "None -> None -> Node(10) -> 77.9 -> Hello, world! -> -192.55555 -> 0 -> " - "5555 -> 7 -> dlrow olleH -> Node(77345112) -> 100 -> Node(Hello again, world!)" - ) - - -def main(): - from doctest import testmod - - testmod() - - linked_list = LinkedList() - linked_list.insert_head(input("Inserting 1st at head ").strip()) - linked_list.insert_head(input("Inserting 2nd at head ").strip()) - print("\nPrint list:") - linked_list.print_list() - linked_list.insert_tail(input("\nInserting 1st at tail ").strip()) - linked_list.insert_tail(input("Inserting 2nd at tail ").strip()) - print("\nPrint list:") - linked_list.print_list() - print("\nDelete head") - linked_list.delete_head() - print("Delete tail") - linked_list.delete_tail() - print("\nPrint list:") - linked_list.print_list() - print("\nReverse linked list") - linked_list.reverse() - print("\nPrint list:") - linked_list.print_list() - print("\nString representation of linked list:") - print(linked_list) - print("\nReading/changing Node data using indexing:") - print(f"Element at Position 1: {linked_list[1]}") - linked_list[1] = input("Enter New Value: ").strip() - print("New list:") - print(linked_list) - print(f"length of linked_list is : {len(linked_list)}") - - -if __name__ == "__main__": - main() diff --git a/data_structures/linked_list/skip_list.py b/data_structures/linked_list/skip_list.py deleted file mode 100644 index 13e9a94a8698..000000000000 --- a/data_structures/linked_list/skip_list.py +++ /dev/null @@ -1,448 +0,0 @@ -""" -Based on "Skip Lists: A Probabilistic Alternative to Balanced Trees" by William Pugh -https://epaperpress.com/sortsearch/download/skiplist.pdf -""" - -from __future__ import annotations - -from itertools import pairwise -from random import random -from typing import Generic, TypeVar - -KT = TypeVar("KT") -VT = TypeVar("VT") - - -class Node(Generic[KT, VT]): - def __init__(self, key: KT | str = "root", value: VT | None = None): - self.key = key - self.value = value - self.forward: list[Node[KT, VT]] = [] - - def __repr__(self) -> str: - """ - :return: Visual representation of Node - - >>> node = Node("Key", 2) - >>> repr(node) - 'Node(Key: 2)' - """ - - return f"Node({self.key}: {self.value})" - - @property - def level(self) -> int: - """ - :return: Number of forward references - - >>> node = Node("Key", 2) - >>> node.level - 0 - >>> node.forward.append(Node("Key2", 4)) - >>> node.level - 1 - >>> node.forward.append(Node("Key3", 6)) - >>> node.level - 2 - """ - - return len(self.forward) - - -class SkipList(Generic[KT, VT]): - def __init__(self, p: float = 0.5, max_level: int = 16): - self.head: Node[KT, VT] = Node[KT, VT]() - self.level = 0 - self.p = p - self.max_level = max_level - - def __str__(self) -> str: - """ - :return: Visual representation of SkipList - - >>> skip_list = SkipList() - >>> print(skip_list) - SkipList(level=0) - >>> skip_list.insert("Key1", "Value") - >>> print(skip_list) # doctest: +ELLIPSIS - SkipList(level=... - [root]--... - [Key1]--Key1... - None *... - >>> skip_list.insert("Key2", "OtherValue") - >>> print(skip_list) # doctest: +ELLIPSIS - SkipList(level=... - [root]--... - [Key1]--Key1... - [Key2]--Key2... - None *... - """ - - items = list(self) - - if len(items) == 0: - return f"SkipList(level={self.level})" - - label_size = max((len(str(item)) for item in items), default=4) - label_size = max(label_size, 4) + 4 - - node = self.head - lines = [] - - forwards = node.forward.copy() - lines.append(f"[{node.key}]".ljust(label_size, "-") + "* " * len(forwards)) - lines.append(" " * label_size + "| " * len(forwards)) - - while len(node.forward) != 0: - node = node.forward[0] - - lines.append( - f"[{node.key}]".ljust(label_size, "-") - + " ".join(str(n.key) if n.key == node.key else "|" for n in forwards) - ) - lines.append(" " * label_size + "| " * len(forwards)) - forwards[: node.level] = node.forward - - lines.append("None".ljust(label_size) + "* " * len(forwards)) - return f"SkipList(level={self.level})\n" + "\n".join(lines) - - def __iter__(self): - node = self.head - - while len(node.forward) != 0: - yield node.forward[0].key - node = node.forward[0] - - def random_level(self) -> int: - """ - :return: Random level from [1, self.max_level] interval. - Higher values are less likely. - """ - - level = 1 - while random() < self.p and level < self.max_level: - level += 1 - - return level - - def _locate_node(self, key) -> tuple[Node[KT, VT] | None, list[Node[KT, VT]]]: - """ - :param key: Searched key, - :return: Tuple with searched node (or None if given key is not present) - and list of nodes that refer (if key is present) of should refer to - given node. - """ - - # Nodes with refer or should refer to output node - update_vector = [] - - node = self.head - - for i in reversed(range(self.level)): - # i < node.level - When node level is lesser than `i` decrement `i`. - # node.forward[i].key < key - Jumping to node with key value higher - # or equal to searched key would result - # in skipping searched key. - while i < node.level and node.forward[i].key < key: - node = node.forward[i] - # Each leftmost node (relative to searched node) will potentially have to - # be updated. - update_vector.append(node) - - update_vector.reverse() # Note that we were inserting values in reverse order. - - # len(node.forward) != 0 - If current node doesn't contain any further - # references then searched key is not present. - # node.forward[0].key == key - Next node key should be equal to search key - # if key is present. - if len(node.forward) != 0 and node.forward[0].key == key: - return node.forward[0], update_vector - else: - return None, update_vector - - def delete(self, key: KT): - """ - :param key: Key to remove from list. - - >>> skip_list = SkipList() - >>> skip_list.insert(2, "Two") - >>> skip_list.insert(1, "One") - >>> skip_list.insert(3, "Three") - >>> list(skip_list) - [1, 2, 3] - >>> skip_list.delete(2) - >>> list(skip_list) - [1, 3] - """ - - node, update_vector = self._locate_node(key) - - if node is not None: - for i, update_node in enumerate(update_vector): - # Remove or replace all references to removed node. - if update_node.level > i and update_node.forward[i].key == key: - if node.level > i: - update_node.forward[i] = node.forward[i] - else: - update_node.forward = update_node.forward[:i] - - def insert(self, key: KT, value: VT): - """ - :param key: Key to insert. - :param value: Value associated with given key. - - >>> skip_list = SkipList() - >>> skip_list.insert(2, "Two") - >>> skip_list.find(2) - 'Two' - >>> list(skip_list) - [2] - """ - - node, update_vector = self._locate_node(key) - if node is not None: - node.value = value - else: - level = self.random_level() - - if level > self.level: - # After level increase we have to add additional nodes to head. - for _ in range(self.level - 1, level): - update_vector.append(self.head) - self.level = level - - new_node = Node(key, value) - - for i, update_node in enumerate(update_vector[:level]): - # Change references to pass through new node. - if update_node.level > i: - new_node.forward.append(update_node.forward[i]) - - if update_node.level < i + 1: - update_node.forward.append(new_node) - else: - update_node.forward[i] = new_node - - def find(self, key: VT) -> VT | None: - """ - :param key: Search key. - :return: Value associated with given key or None if given key is not present. - - >>> skip_list = SkipList() - >>> skip_list.find(2) - >>> skip_list.insert(2, "Two") - >>> skip_list.find(2) - 'Two' - >>> skip_list.insert(2, "Three") - >>> skip_list.find(2) - 'Three' - """ - - node, _ = self._locate_node(key) - - if node is not None: - return node.value - - return None - - -def test_insert(): - skip_list = SkipList() - skip_list.insert("Key1", 3) - skip_list.insert("Key2", 12) - skip_list.insert("Key3", 41) - skip_list.insert("Key4", -19) - - node = skip_list.head - all_values = {} - while node.level != 0: - node = node.forward[0] - all_values[node.key] = node.value - - assert len(all_values) == 4 - assert all_values["Key1"] == 3 - assert all_values["Key2"] == 12 - assert all_values["Key3"] == 41 - assert all_values["Key4"] == -19 - - -def test_insert_overrides_existing_value(): - skip_list = SkipList() - skip_list.insert("Key1", 10) - skip_list.insert("Key1", 12) - - skip_list.insert("Key5", 7) - skip_list.insert("Key7", 10) - skip_list.insert("Key10", 5) - - skip_list.insert("Key7", 7) - skip_list.insert("Key5", 5) - skip_list.insert("Key10", 10) - - node = skip_list.head - all_values = {} - while node.level != 0: - node = node.forward[0] - all_values[node.key] = node.value - - if len(all_values) != 4: - print() - assert len(all_values) == 4 - assert all_values["Key1"] == 12 - assert all_values["Key7"] == 7 - assert all_values["Key5"] == 5 - assert all_values["Key10"] == 10 - - -def test_searching_empty_list_returns_none(): - skip_list = SkipList() - assert skip_list.find("Some key") is None - - -def test_search(): - skip_list = SkipList() - - skip_list.insert("Key2", 20) - assert skip_list.find("Key2") == 20 - - skip_list.insert("Some Key", 10) - skip_list.insert("Key2", 8) - skip_list.insert("V", 13) - - assert skip_list.find("Y") is None - assert skip_list.find("Key2") == 8 - assert skip_list.find("Some Key") == 10 - assert skip_list.find("V") == 13 - - -def test_deleting_item_from_empty_list_do_nothing(): - skip_list = SkipList() - skip_list.delete("Some key") - - assert len(skip_list.head.forward) == 0 - - -def test_deleted_items_are_not_founded_by_find_method(): - skip_list = SkipList() - - skip_list.insert("Key1", 12) - skip_list.insert("V", 13) - skip_list.insert("X", 14) - skip_list.insert("Key2", 15) - - skip_list.delete("V") - skip_list.delete("Key2") - - assert skip_list.find("V") is None - assert skip_list.find("Key2") is None - - -def test_delete_removes_only_given_key(): - skip_list = SkipList() - - skip_list.insert("Key1", 12) - skip_list.insert("V", 13) - skip_list.insert("X", 14) - skip_list.insert("Key2", 15) - - skip_list.delete("V") - assert skip_list.find("V") is None - assert skip_list.find("X") == 14 - assert skip_list.find("Key1") == 12 - assert skip_list.find("Key2") == 15 - - skip_list.delete("X") - assert skip_list.find("V") is None - assert skip_list.find("X") is None - assert skip_list.find("Key1") == 12 - assert skip_list.find("Key2") == 15 - - skip_list.delete("Key1") - assert skip_list.find("V") is None - assert skip_list.find("X") is None - assert skip_list.find("Key1") is None - assert skip_list.find("Key2") == 15 - - skip_list.delete("Key2") - assert skip_list.find("V") is None - assert skip_list.find("X") is None - assert skip_list.find("Key1") is None - assert skip_list.find("Key2") is None - - -def test_delete_doesnt_leave_dead_nodes(): - skip_list = SkipList() - - skip_list.insert("Key1", 12) - skip_list.insert("V", 13) - skip_list.insert("X", 142) - skip_list.insert("Key2", 15) - - skip_list.delete("X") - - def traverse_keys(node): - yield node.key - for forward_node in node.forward: - yield from traverse_keys(forward_node) - - assert len(set(traverse_keys(skip_list.head))) == 4 - - -def test_iter_always_yields_sorted_values(): - def is_sorted(lst): - return all(next_item >= item for item, next_item in pairwise(lst)) - - skip_list = SkipList() - for i in range(10): - skip_list.insert(i, i) - assert is_sorted(list(skip_list)) - skip_list.delete(5) - skip_list.delete(8) - skip_list.delete(2) - assert is_sorted(list(skip_list)) - skip_list.insert(-12, -12) - skip_list.insert(77, 77) - assert is_sorted(list(skip_list)) - - -def pytests(): - for _ in range(100): - # Repeat test 100 times due to the probabilistic nature of skip list - # random values == random bugs - test_insert() - test_insert_overrides_existing_value() - - test_searching_empty_list_returns_none() - test_search() - - test_deleting_item_from_empty_list_do_nothing() - test_deleted_items_are_not_founded_by_find_method() - test_delete_removes_only_given_key() - test_delete_doesnt_leave_dead_nodes() - - test_iter_always_yields_sorted_values() - - -def main(): - """ - >>> pytests() - """ - - skip_list = SkipList() - skip_list.insert(2, "2") - skip_list.insert(4, "4") - skip_list.insert(6, "4") - skip_list.insert(4, "5") - skip_list.insert(8, "4") - skip_list.insert(9, "4") - - skip_list.delete(4) - - print(skip_list) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/data_structures/linked_list/swap_nodes.py b/data_structures/linked_list/swap_nodes.py deleted file mode 100644 index d66512087d2d..000000000000 --- a/data_structures/linked_list/swap_nodes.py +++ /dev/null @@ -1,148 +0,0 @@ -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass -from typing import Any - - -@dataclass -class Node: - data: Any - next_node: Node | None = None - - -@dataclass -class LinkedList: - head: Node | None = None - - def __iter__(self) -> Iterator: - """ - >>> linked_list = LinkedList() - >>> list(linked_list) - [] - >>> linked_list.push(0) - >>> tuple(linked_list) - (0,) - """ - node = self.head - while node: - yield node.data - node = node.next_node - - def __len__(self) -> int: - """ - >>> linked_list = LinkedList() - >>> len(linked_list) - 0 - >>> linked_list.push(0) - >>> len(linked_list) - 1 - """ - return sum(1 for _ in self) - - def push(self, new_data: Any) -> None: - """ - Add a new node with the given data to the beginning of the Linked List. - - Args: - new_data (Any): The data to be added to the new node. - - Returns: - None - - Examples: - >>> linked_list = LinkedList() - >>> linked_list.push(5) - >>> linked_list.push(4) - >>> linked_list.push(3) - >>> linked_list.push(2) - >>> linked_list.push(1) - >>> list(linked_list) - [1, 2, 3, 4, 5] - """ - new_node = Node(new_data) - new_node.next_node = self.head - self.head = new_node - - def swap_nodes(self, node_data_1: Any, node_data_2: Any) -> None: - """ - Swap the positions of two nodes in the Linked List based on their data values. - - Args: - node_data_1: Data value of the first node to be swapped. - node_data_2: Data value of the second node to be swapped. - - - Note: - If either of the specified data values isn't found then, no swapping occurs. - - Examples: - When both values are present in a linked list. - >>> linked_list = LinkedList() - >>> linked_list.push(5) - >>> linked_list.push(4) - >>> linked_list.push(3) - >>> linked_list.push(2) - >>> linked_list.push(1) - >>> list(linked_list) - [1, 2, 3, 4, 5] - >>> linked_list.swap_nodes(1, 5) - >>> tuple(linked_list) - (5, 2, 3, 4, 1) - - When one value is present and the other isn't in the linked list. - >>> second_list = LinkedList() - >>> second_list.push(6) - >>> second_list.push(7) - >>> second_list.push(8) - >>> second_list.push(9) - >>> second_list.swap_nodes(1, 6) is None - True - - When both values are absent in the linked list. - >>> second_list = LinkedList() - >>> second_list.push(10) - >>> second_list.push(9) - >>> second_list.push(8) - >>> second_list.push(7) - >>> second_list.swap_nodes(1, 3) is None - True - - When linkedlist is empty. - >>> second_list = LinkedList() - >>> second_list.swap_nodes(1, 3) is None - True - - Returns: - None - """ - if node_data_1 == node_data_2: - return - - node_1 = self.head - while node_1 and node_1.data != node_data_1: - node_1 = node_1.next_node - node_2 = self.head - while node_2 and node_2.data != node_data_2: - node_2 = node_2.next_node - if node_1 is None or node_2 is None: - return - # Swap the data values of the two nodes - node_1.data, node_2.data = node_2.data, node_1.data - - -if __name__ == "__main__": - """ - Python script that outputs the swap of nodes in a linked list. - """ - from doctest import testmod - - testmod() - linked_list = LinkedList() - for i in range(5, 0, -1): - linked_list.push(i) - - print(f"Original Linked List: {list(linked_list)}") - linked_list.swap_nodes(1, 4) - print(f"Modified Linked List: {list(linked_list)}") - print("After swapping the nodes whose data is 1 and 4.") diff --git a/data_structures/queue/__init__.py b/data_structures/queue/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/queue/circular_queue.py b/data_structures/queue/circular_queue.py deleted file mode 100644 index f2fb4c01e467..000000000000 --- a/data_structures/queue/circular_queue.py +++ /dev/null @@ -1,97 +0,0 @@ -# Implementation of Circular Queue (using Python lists) - - -class CircularQueue: - """Circular FIFO queue with a fixed capacity""" - - def __init__(self, n: int): - self.n = n - self.array = [None] * self.n - self.front = 0 # index of the first element - self.rear = 0 - self.size = 0 - - def __len__(self) -> int: - """ - >>> cq = CircularQueue(5) - >>> len(cq) - 0 - >>> cq.enqueue("A") # doctest: +ELLIPSIS - <data_structures.queue.circular_queue.CircularQueue object at ... - >>> len(cq) - 1 - """ - return self.size - - def is_empty(self) -> bool: - """ - Checks whether the queue is empty or not - >>> cq = CircularQueue(5) - >>> cq.is_empty() - True - >>> cq.enqueue("A").is_empty() - False - """ - return self.size == 0 - - def first(self): - """ - Returns the first element of the queue - >>> cq = CircularQueue(5) - >>> cq.first() - False - >>> cq.enqueue("A").first() - 'A' - """ - return False if self.is_empty() else self.array[self.front] - - def enqueue(self, data): - """ - This function inserts an element at the end of the queue using self.rear value - as an index. - >>> cq = CircularQueue(5) - >>> cq.enqueue("A") # doctest: +ELLIPSIS - <data_structures.queue.circular_queue.CircularQueue object at ... - >>> (cq.size, cq.first()) - (1, 'A') - >>> cq.enqueue("B") # doctest: +ELLIPSIS - <data_structures.queue.circular_queue.CircularQueue object at ... - >>> (cq.size, cq.first()) - (2, 'A') - """ - if self.size >= self.n: - raise Exception("QUEUE IS FULL") - - self.array[self.rear] = data - self.rear = (self.rear + 1) % self.n - self.size += 1 - return self - - def dequeue(self): - """ - This function removes an element from the queue using on self.front value as an - index and returns it - >>> cq = CircularQueue(5) - >>> cq.dequeue() - Traceback (most recent call last): - ... - Exception: UNDERFLOW - >>> cq.enqueue("A").enqueue("B").dequeue() - 'A' - >>> (cq.size, cq.first()) - (1, 'B') - >>> cq.dequeue() - 'B' - >>> cq.dequeue() - Traceback (most recent call last): - ... - Exception: UNDERFLOW - """ - if self.size == 0: - raise Exception("UNDERFLOW") - - temp = self.array[self.front] - self.array[self.front] = None - self.front = (self.front + 1) % self.n - self.size -= 1 - return temp diff --git a/data_structures/queue/circular_queue_linked_list.py b/data_structures/queue/circular_queue_linked_list.py deleted file mode 100644 index da8629678e52..000000000000 --- a/data_structures/queue/circular_queue_linked_list.py +++ /dev/null @@ -1,161 +0,0 @@ -# Implementation of Circular Queue using linked lists -# https://en.wikipedia.org/wiki/Circular_buffer - -from __future__ import annotations - -from typing import Any - - -class CircularQueueLinkedList: - """ - Circular FIFO list with the given capacity (default queue length : 6) - - >>> cq = CircularQueueLinkedList(2) - >>> cq.enqueue('a') - >>> cq.enqueue('b') - >>> cq.enqueue('c') - Traceback (most recent call last): - ... - Exception: Full Queue - """ - - def __init__(self, initial_capacity: int = 6) -> None: - self.front: Node | None = None - self.rear: Node | None = None - self.create_linked_list(initial_capacity) - - def create_linked_list(self, initial_capacity: int) -> None: - current_node = Node() - self.front = current_node - self.rear = current_node - previous_node = current_node - for _ in range(1, initial_capacity): - current_node = Node() - previous_node.next = current_node - current_node.prev = previous_node - previous_node = current_node - previous_node.next = self.front - self.front.prev = previous_node - - def is_empty(self) -> bool: - """ - Checks whether the queue is empty or not - >>> cq = CircularQueueLinkedList() - >>> cq.is_empty() - True - >>> cq.enqueue('a') - >>> cq.is_empty() - False - >>> cq.dequeue() - 'a' - >>> cq.is_empty() - True - """ - - return ( - self.front == self.rear - and self.front is not None - and self.front.data is None - ) - - def first(self) -> Any | None: - """ - Returns the first element of the queue - >>> cq = CircularQueueLinkedList() - >>> cq.first() - Traceback (most recent call last): - ... - Exception: Empty Queue - >>> cq.enqueue('a') - >>> cq.first() - 'a' - >>> cq.dequeue() - 'a' - >>> cq.first() - Traceback (most recent call last): - ... - Exception: Empty Queue - >>> cq.enqueue('b') - >>> cq.enqueue('c') - >>> cq.first() - 'b' - """ - self.check_can_perform_operation() - return self.front.data if self.front else None - - def enqueue(self, data: Any) -> None: - """ - Saves data at the end of the queue - - >>> cq = CircularQueueLinkedList() - >>> cq.enqueue('a') - >>> cq.enqueue('b') - >>> cq.dequeue() - 'a' - >>> cq.dequeue() - 'b' - >>> cq.dequeue() - Traceback (most recent call last): - ... - Exception: Empty Queue - """ - if self.rear is None: - return - - self.check_is_full() - if not self.is_empty(): - self.rear = self.rear.next - if self.rear: - self.rear.data = data - - def dequeue(self) -> Any: - """ - Removes and retrieves the first element of the queue - - >>> cq = CircularQueueLinkedList() - >>> cq.dequeue() - Traceback (most recent call last): - ... - Exception: Empty Queue - >>> cq.enqueue('a') - >>> cq.dequeue() - 'a' - >>> cq.dequeue() - Traceback (most recent call last): - ... - Exception: Empty Queue - """ - self.check_can_perform_operation() - if self.rear is None or self.front is None: - return None - if self.front == self.rear: - data = self.front.data - self.front.data = None - return data - - old_front = self.front - self.front = old_front.next - data = old_front.data - old_front.data = None - return data - - def check_can_perform_operation(self) -> None: - if self.is_empty(): - raise Exception("Empty Queue") - - def check_is_full(self) -> None: - if self.rear and self.rear.next == self.front: - raise Exception("Full Queue") - - -class Node: - def __init__(self) -> None: - self.data: Any | None = None - self.next: Node | None = None - self.prev: Node | None = None - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/data_structures/queue/double_ended_queue.py b/data_structures/queue/double_ended_queue.py deleted file mode 100644 index 607d0bda3df4..000000000000 --- a/data_structures/queue/double_ended_queue.py +++ /dev/null @@ -1,463 +0,0 @@ -""" -Implementation of double ended queue. -""" - -from __future__ import annotations - -from collections.abc import Iterable -from dataclasses import dataclass -from typing import Any - - -class Deque: - """ - Deque data structure. - Operations - ---------- - append(val: Any) -> None - appendleft(val: Any) -> None - extend(iterable: Iterable) -> None - extendleft(iterable: Iterable) -> None - pop() -> Any - popleft() -> Any - Observers - --------- - is_empty() -> bool - Attributes - ---------- - _front: _Node - front of the deque a.k.a. the first element - _back: _Node - back of the element a.k.a. the last element - _len: int - the number of nodes - """ - - __slots__ = ("_front", "_back", "_len") - - @dataclass - class _Node: - """ - Representation of a node. - Contains a value and a pointer to the next node as well as to the previous one. - """ - - val: Any = None - next_node: Deque._Node | None = None - prev_node: Deque._Node | None = None - - class _Iterator: - """ - Helper class for iteration. Will be used to implement iteration. - Attributes - ---------- - _cur: _Node - the current node of the iteration. - """ - - __slots__ = ("_cur",) - - def __init__(self, cur: Deque._Node | None) -> None: - self._cur = cur - - def __iter__(self) -> Deque._Iterator: - """ - >>> our_deque = Deque([1, 2, 3]) - >>> iterator = iter(our_deque) - """ - return self - - def __next__(self) -> Any: - """ - >>> our_deque = Deque([1, 2, 3]) - >>> iterator = iter(our_deque) - >>> next(iterator) - 1 - >>> next(iterator) - 2 - >>> next(iterator) - 3 - """ - if self._cur is None: - # finished iterating - raise StopIteration - val = self._cur.val - self._cur = self._cur.next_node - - return val - - def __init__(self, iterable: Iterable[Any] | None = None) -> None: - self._front: Any = None - self._back: Any = None - self._len: int = 0 - - if iterable is not None: - # append every value to the deque - for val in iterable: - self.append(val) - - def append(self, val: Any) -> None: - """ - Adds val to the end of the deque. - Time complexity: O(1) - >>> our_deque_1 = Deque([1, 2, 3]) - >>> our_deque_1.append(4) - >>> our_deque_1 - [1, 2, 3, 4] - >>> our_deque_2 = Deque('ab') - >>> our_deque_2.append('c') - >>> our_deque_2 - ['a', 'b', 'c'] - >>> from collections import deque - >>> deque_collections_1 = deque([1, 2, 3]) - >>> deque_collections_1.append(4) - >>> deque_collections_1 - deque([1, 2, 3, 4]) - >>> deque_collections_2 = deque('ab') - >>> deque_collections_2.append('c') - >>> deque_collections_2 - deque(['a', 'b', 'c']) - >>> list(our_deque_1) == list(deque_collections_1) - True - >>> list(our_deque_2) == list(deque_collections_2) - True - """ - node = self._Node(val, None, None) - if self.is_empty(): - # front = back - self._front = self._back = node - self._len = 1 - else: - # connect nodes - self._back.next_node = node - node.prev_node = self._back - self._back = node # assign new back to the new node - - self._len += 1 - - # make sure there were no errors - assert not self.is_empty(), "Error on appending value." - - def appendleft(self, val: Any) -> None: - """ - Adds val to the beginning of the deque. - Time complexity: O(1) - >>> our_deque_1 = Deque([2, 3]) - >>> our_deque_1.appendleft(1) - >>> our_deque_1 - [1, 2, 3] - >>> our_deque_2 = Deque('bc') - >>> our_deque_2.appendleft('a') - >>> our_deque_2 - ['a', 'b', 'c'] - >>> from collections import deque - >>> deque_collections_1 = deque([2, 3]) - >>> deque_collections_1.appendleft(1) - >>> deque_collections_1 - deque([1, 2, 3]) - >>> deque_collections_2 = deque('bc') - >>> deque_collections_2.appendleft('a') - >>> deque_collections_2 - deque(['a', 'b', 'c']) - >>> list(our_deque_1) == list(deque_collections_1) - True - >>> list(our_deque_2) == list(deque_collections_2) - True - """ - node = self._Node(val, None, None) - if self.is_empty(): - # front = back - self._front = self._back = node - self._len = 1 - else: - # connect nodes - node.next_node = self._front - self._front.prev_node = node - self._front = node # assign new front to the new node - - self._len += 1 - - # make sure there were no errors - assert not self.is_empty(), "Error on appending value." - - def extend(self, iterable: Iterable[Any]) -> None: - """ - Appends every value of iterable to the end of the deque. - Time complexity: O(n) - >>> our_deque_1 = Deque([1, 2, 3]) - >>> our_deque_1.extend([4, 5]) - >>> our_deque_1 - [1, 2, 3, 4, 5] - >>> our_deque_2 = Deque('ab') - >>> our_deque_2.extend('cd') - >>> our_deque_2 - ['a', 'b', 'c', 'd'] - >>> from collections import deque - >>> deque_collections_1 = deque([1, 2, 3]) - >>> deque_collections_1.extend([4, 5]) - >>> deque_collections_1 - deque([1, 2, 3, 4, 5]) - >>> deque_collections_2 = deque('ab') - >>> deque_collections_2.extend('cd') - >>> deque_collections_2 - deque(['a', 'b', 'c', 'd']) - >>> list(our_deque_1) == list(deque_collections_1) - True - >>> list(our_deque_2) == list(deque_collections_2) - True - """ - for val in iterable: - self.append(val) - - def extendleft(self, iterable: Iterable[Any]) -> None: - """ - Appends every value of iterable to the beginning of the deque. - Time complexity: O(n) - >>> our_deque_1 = Deque([1, 2, 3]) - >>> our_deque_1.extendleft([0, -1]) - >>> our_deque_1 - [-1, 0, 1, 2, 3] - >>> our_deque_2 = Deque('cd') - >>> our_deque_2.extendleft('ba') - >>> our_deque_2 - ['a', 'b', 'c', 'd'] - >>> from collections import deque - >>> deque_collections_1 = deque([1, 2, 3]) - >>> deque_collections_1.extendleft([0, -1]) - >>> deque_collections_1 - deque([-1, 0, 1, 2, 3]) - >>> deque_collections_2 = deque('cd') - >>> deque_collections_2.extendleft('ba') - >>> deque_collections_2 - deque(['a', 'b', 'c', 'd']) - >>> list(our_deque_1) == list(deque_collections_1) - True - >>> list(our_deque_2) == list(deque_collections_2) - True - """ - for val in iterable: - self.appendleft(val) - - def pop(self) -> Any: - """ - Removes the last element of the deque and returns it. - Time complexity: O(1) - @returns topop.val: the value of the node to pop. - >>> our_deque1 = Deque([1]) - >>> our_popped1 = our_deque1.pop() - >>> our_popped1 - 1 - >>> our_deque1 - [] - - >>> our_deque2 = Deque([1, 2, 3, 15182]) - >>> our_popped2 = our_deque2.pop() - >>> our_popped2 - 15182 - >>> our_deque2 - [1, 2, 3] - - >>> from collections import deque - >>> deque_collections = deque([1, 2, 3, 15182]) - >>> collections_popped = deque_collections.pop() - >>> collections_popped - 15182 - >>> deque_collections - deque([1, 2, 3]) - >>> list(our_deque2) == list(deque_collections) - True - >>> our_popped2 == collections_popped - True - """ - # make sure the deque has elements to pop - assert not self.is_empty(), "Deque is empty." - - topop = self._back - # if only one element in the queue: point the front and back to None - # else remove one element from back - if self._front == self._back: - self._front = None - self._back = None - else: - self._back = self._back.prev_node # set new back - # drop the last node, python will deallocate memory automatically - self._back.next_node = None - - self._len -= 1 - - return topop.val - - def popleft(self) -> Any: - """ - Removes the first element of the deque and returns it. - Time complexity: O(1) - @returns topop.val: the value of the node to pop. - >>> our_deque1 = Deque([1]) - >>> our_popped1 = our_deque1.pop() - >>> our_popped1 - 1 - >>> our_deque1 - [] - >>> our_deque2 = Deque([15182, 1, 2, 3]) - >>> our_popped2 = our_deque2.popleft() - >>> our_popped2 - 15182 - >>> our_deque2 - [1, 2, 3] - >>> from collections import deque - >>> deque_collections = deque([15182, 1, 2, 3]) - >>> collections_popped = deque_collections.popleft() - >>> collections_popped - 15182 - >>> deque_collections - deque([1, 2, 3]) - >>> list(our_deque2) == list(deque_collections) - True - >>> our_popped2 == collections_popped - True - """ - # make sure the deque has elements to pop - assert not self.is_empty(), "Deque is empty." - - topop = self._front - # if only one element in the queue: point the front and back to None - # else remove one element from front - if self._front == self._back: - self._front = None - self._back = None - else: - self._front = self._front.next_node # set new front and drop the first node - self._front.prev_node = None - - self._len -= 1 - - return topop.val - - def is_empty(self) -> bool: - """ - Checks if the deque is empty. - Time complexity: O(1) - >>> our_deque = Deque([1, 2, 3]) - >>> our_deque.is_empty() - False - >>> our_empty_deque = Deque() - >>> our_empty_deque.is_empty() - True - >>> from collections import deque - >>> empty_deque_collections = deque() - >>> list(our_empty_deque) == list(empty_deque_collections) - True - """ - return self._front is None - - def __len__(self) -> int: - """ - Implements len() function. Returns the length of the deque. - Time complexity: O(1) - >>> our_deque = Deque([1, 2, 3]) - >>> len(our_deque) - 3 - >>> our_empty_deque = Deque() - >>> len(our_empty_deque) - 0 - >>> from collections import deque - >>> deque_collections = deque([1, 2, 3]) - >>> len(deque_collections) - 3 - >>> empty_deque_collections = deque() - >>> len(empty_deque_collections) - 0 - >>> len(our_empty_deque) == len(empty_deque_collections) - True - """ - return self._len - - def __eq__(self, other: object) -> bool: - """ - Implements "==" operator. Returns if *self* is equal to *other*. - Time complexity: O(n) - >>> our_deque_1 = Deque([1, 2, 3]) - >>> our_deque_2 = Deque([1, 2, 3]) - >>> our_deque_1 == our_deque_2 - True - >>> our_deque_3 = Deque([1, 2]) - >>> our_deque_1 == our_deque_3 - False - >>> from collections import deque - >>> deque_collections_1 = deque([1, 2, 3]) - >>> deque_collections_2 = deque([1, 2, 3]) - >>> deque_collections_1 == deque_collections_2 - True - >>> deque_collections_3 = deque([1, 2]) - >>> deque_collections_1 == deque_collections_3 - False - >>> (our_deque_1 == our_deque_2) == (deque_collections_1 == deque_collections_2) - True - >>> (our_deque_1 == our_deque_3) == (deque_collections_1 == deque_collections_3) - True - """ - - if not isinstance(other, Deque): - return NotImplemented - - me = self._front - oth = other._front - - # if the length of the dequeues are not the same, they are not equal - if len(self) != len(other): - return False - - while me is not None and oth is not None: - # compare every value - if me.val != oth.val: - return False - me = me.next_node - oth = oth.next_node - - return True - - def __iter__(self) -> Deque._Iterator: - """ - Implements iteration. - Time complexity: O(1) - >>> our_deque = Deque([1, 2, 3]) - >>> for v in our_deque: - ... print(v) - 1 - 2 - 3 - >>> from collections import deque - >>> deque_collections = deque([1, 2, 3]) - >>> for v in deque_collections: - ... print(v) - 1 - 2 - 3 - """ - return Deque._Iterator(self._front) - - def __repr__(self) -> str: - """ - Implements representation of the deque. - Represents it as a list, with its values between '[' and ']'. - Time complexity: O(n) - >>> our_deque = Deque([1, 2, 3]) - >>> our_deque - [1, 2, 3] - """ - values_list = [] - aux = self._front - while aux is not None: - # append the values in a list to display - values_list.append(aux.val) - aux = aux.next_node - - return f"[{', '.join(repr(val) for val in values_list)}]" - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - dq = Deque([3]) - dq.pop() diff --git a/data_structures/queue/linked_queue.py b/data_structures/queue/linked_queue.py deleted file mode 100644 index 80f6d309af9a..000000000000 --- a/data_structures/queue/linked_queue.py +++ /dev/null @@ -1,156 +0,0 @@ -"""A Queue using a linked list like structure""" - -from __future__ import annotations - -from collections.abc import Iterator -from typing import Any - - -class Node: - def __init__(self, data: Any) -> None: - self.data: Any = data - self.next: Node | None = None - - def __str__(self) -> str: - return f"{self.data}" - - -class LinkedQueue: - """ - >>> queue = LinkedQueue() - >>> queue.is_empty() - True - >>> queue.put(5) - >>> queue.put(9) - >>> queue.put('python') - >>> queue.is_empty() - False - >>> queue.get() - 5 - >>> queue.put('algorithms') - >>> queue.get() - 9 - >>> queue.get() - 'python' - >>> queue.get() - 'algorithms' - >>> queue.is_empty() - True - >>> queue.get() - Traceback (most recent call last): - ... - IndexError: dequeue from empty queue - """ - - def __init__(self) -> None: - self.front: Node | None = None - self.rear: Node | None = None - - def __iter__(self) -> Iterator[Any]: - node = self.front - while node: - yield node.data - node = node.next - - def __len__(self) -> int: - """ - >>> queue = LinkedQueue() - >>> for i in range(1, 6): - ... queue.put(i) - >>> len(queue) - 5 - >>> for i in range(1, 6): - ... assert len(queue) == 6 - i - ... _ = queue.get() - >>> len(queue) - 0 - """ - return len(tuple(iter(self))) - - def __str__(self) -> str: - """ - >>> queue = LinkedQueue() - >>> for i in range(1, 4): - ... queue.put(i) - >>> queue.put("Python") - >>> queue.put(3.14) - >>> queue.put(True) - >>> str(queue) - '1 <- 2 <- 3 <- Python <- 3.14 <- True' - """ - return " <- ".join(str(item) for item in self) - - def is_empty(self) -> bool: - """ - >>> queue = LinkedQueue() - >>> queue.is_empty() - True - >>> for i in range(1, 6): - ... queue.put(i) - >>> queue.is_empty() - False - """ - return len(self) == 0 - - def put(self, item: Any) -> None: - """ - >>> queue = LinkedQueue() - >>> queue.get() - Traceback (most recent call last): - ... - IndexError: dequeue from empty queue - >>> for i in range(1, 6): - ... queue.put(i) - >>> str(queue) - '1 <- 2 <- 3 <- 4 <- 5' - """ - node = Node(item) - if self.is_empty(): - self.front = self.rear = node - else: - assert isinstance(self.rear, Node) - self.rear.next = node - self.rear = node - - def get(self) -> Any: - """ - >>> queue = LinkedQueue() - >>> queue.get() - Traceback (most recent call last): - ... - IndexError: dequeue from empty queue - >>> queue = LinkedQueue() - >>> for i in range(1, 6): - ... queue.put(i) - >>> for i in range(1, 6): - ... assert queue.get() == i - >>> len(queue) - 0 - """ - if self.is_empty(): - raise IndexError("dequeue from empty queue") - assert isinstance(self.front, Node) - node = self.front - self.front = self.front.next - if self.front is None: - self.rear = None - return node.data - - def clear(self) -> None: - """ - >>> queue = LinkedQueue() - >>> for i in range(1, 6): - ... queue.put(i) - >>> queue.clear() - >>> len(queue) - 0 - >>> str(queue) - '' - """ - self.front = self.rear = None - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/queue/priority_queue_using_list.py b/data_structures/queue/priority_queue_using_list.py deleted file mode 100644 index f61b5e8e664d..000000000000 --- a/data_structures/queue/priority_queue_using_list.py +++ /dev/null @@ -1,232 +0,0 @@ -""" -Pure Python implementations of a Fixed Priority Queue and an Element Priority Queue -using Python lists. -""" - - -class OverFlowError(Exception): - pass - - -class UnderFlowError(Exception): - pass - - -class FixedPriorityQueue: - """ - Tasks can be added to a Priority Queue at any time and in any order but when Tasks - are removed then the Task with the highest priority is removed in FIFO order. In - code we will use three levels of priority with priority zero Tasks being the most - urgent (high priority) and priority 2 tasks being the least urgent. - - Examples - >>> fpq = FixedPriorityQueue() - >>> fpq.enqueue(0, 10) - >>> fpq.enqueue(1, 70) - >>> fpq.enqueue(0, 100) - >>> fpq.enqueue(2, 1) - >>> fpq.enqueue(2, 5) - >>> fpq.enqueue(1, 7) - >>> fpq.enqueue(2, 4) - >>> fpq.enqueue(1, 64) - >>> fpq.enqueue(0, 128) - >>> print(fpq) - Priority 0: [10, 100, 128] - Priority 1: [70, 7, 64] - Priority 2: [1, 5, 4] - >>> fpq.dequeue() - 10 - >>> fpq.dequeue() - 100 - >>> fpq.dequeue() - 128 - >>> fpq.dequeue() - 70 - >>> fpq.dequeue() - 7 - >>> print(fpq) - Priority 0: [] - Priority 1: [64] - Priority 2: [1, 5, 4] - >>> fpq.dequeue() - 64 - >>> fpq.dequeue() - 1 - >>> fpq.dequeue() - 5 - >>> fpq.dequeue() - 4 - >>> fpq.dequeue() - Traceback (most recent call last): - ... - data_structures.queue.priority_queue_using_list.UnderFlowError: All queues are empty - >>> print(fpq) - Priority 0: [] - Priority 1: [] - Priority 2: [] - """ - - def __init__(self): - self.queues = [ - [], - [], - [], - ] - - def enqueue(self, priority: int, data: int) -> None: - """ - Add an element to a queue based on its priority. - If the priority is invalid ValueError is raised. - If the queue is full an OverFlowError is raised. - """ - try: - if len(self.queues[priority]) >= 100: - raise OverflowError("Maximum queue size is 100") - self.queues[priority].append(data) - except IndexError: - raise ValueError("Valid priorities are 0, 1, and 2") - - def dequeue(self) -> int: - """ - Return the highest priority element in FIFO order. - If the queue is empty then an under flow exception is raised. - """ - for queue in self.queues: - if queue: - return queue.pop(0) - raise UnderFlowError("All queues are empty") - - def __str__(self) -> str: - return "\n".join(f"Priority {i}: {q}" for i, q in enumerate(self.queues)) - - -class ElementPriorityQueue: - """ - Element Priority Queue is the same as Fixed Priority Queue except that the value of - the element itself is the priority. The rules for priorities are the same the as - Fixed Priority Queue. - - >>> epq = ElementPriorityQueue() - >>> epq.enqueue(10) - >>> epq.enqueue(70) - >>> epq.enqueue(4) - >>> epq.enqueue(1) - >>> epq.enqueue(5) - >>> epq.enqueue(7) - >>> epq.enqueue(4) - >>> epq.enqueue(64) - >>> epq.enqueue(128) - >>> print(epq) - [10, 70, 4, 1, 5, 7, 4, 64, 128] - >>> epq.dequeue() - 1 - >>> epq.dequeue() - 4 - >>> epq.dequeue() - 4 - >>> epq.dequeue() - 5 - >>> epq.dequeue() - 7 - >>> epq.dequeue() - 10 - >>> print(epq) - [70, 64, 128] - >>> epq.dequeue() - 64 - >>> epq.dequeue() - 70 - >>> epq.dequeue() - 128 - >>> epq.dequeue() - Traceback (most recent call last): - ... - data_structures.queue.priority_queue_using_list.UnderFlowError: The queue is empty - >>> print(epq) - [] - """ - - def __init__(self): - self.queue = [] - - def enqueue(self, data: int) -> None: - """ - This function enters the element into the queue - If the queue is full an Exception is raised saying Over Flow! - """ - if len(self.queue) == 100: - raise OverFlowError("Maximum queue size is 100") - self.queue.append(data) - - def dequeue(self) -> int: - """ - Return the highest priority element in FIFO order. - If the queue is empty then an under flow exception is raised. - """ - if not self.queue: - raise UnderFlowError("The queue is empty") - else: - data = min(self.queue) - self.queue.remove(data) - return data - - def __str__(self) -> str: - """ - Prints all the elements within the Element Priority Queue - """ - return str(self.queue) - - -def fixed_priority_queue(): - fpq = FixedPriorityQueue() - fpq.enqueue(0, 10) - fpq.enqueue(1, 70) - fpq.enqueue(0, 100) - fpq.enqueue(2, 1) - fpq.enqueue(2, 5) - fpq.enqueue(1, 7) - fpq.enqueue(2, 4) - fpq.enqueue(1, 64) - fpq.enqueue(0, 128) - print(fpq) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq.dequeue()) - print(fpq.dequeue()) - - -def element_priority_queue(): - epq = ElementPriorityQueue() - epq.enqueue(10) - epq.enqueue(70) - epq.enqueue(100) - epq.enqueue(1) - epq.enqueue(5) - epq.enqueue(7) - epq.enqueue(4) - epq.enqueue(64) - epq.enqueue(128) - print(epq) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq.dequeue()) - print(epq.dequeue()) - - -if __name__ == "__main__": - fixed_priority_queue() - element_priority_queue() diff --git a/data_structures/queue/queue_by_list.py b/data_structures/queue/queue_by_list.py deleted file mode 100644 index 4b05be9fd08e..000000000000 --- a/data_structures/queue/queue_by_list.py +++ /dev/null @@ -1,141 +0,0 @@ -"""Queue represented by a Python list""" - -from collections.abc import Iterable -from typing import Generic, TypeVar - -_T = TypeVar("_T") - - -class QueueByList(Generic[_T]): - def __init__(self, iterable: Iterable[_T] | None = None) -> None: - """ - >>> QueueByList() - Queue(()) - >>> QueueByList([10, 20, 30]) - Queue((10, 20, 30)) - >>> QueueByList((i**2 for i in range(1, 4))) - Queue((1, 4, 9)) - """ - self.entries: list[_T] = list(iterable or []) - - def __len__(self) -> int: - """ - >>> len(QueueByList()) - 0 - >>> from string import ascii_lowercase - >>> len(QueueByList(ascii_lowercase)) - 26 - >>> queue = QueueByList() - >>> for i in range(1, 11): - ... queue.put(i) - >>> len(queue) - 10 - >>> for i in range(2): - ... queue.get() - 1 - 2 - >>> len(queue) - 8 - """ - - return len(self.entries) - - def __repr__(self) -> str: - """ - >>> queue = QueueByList() - >>> queue - Queue(()) - >>> str(queue) - 'Queue(())' - >>> queue.put(10) - >>> queue - Queue((10,)) - >>> queue.put(20) - >>> queue.put(30) - >>> queue - Queue((10, 20, 30)) - """ - - return f"Queue({tuple(self.entries)})" - - def put(self, item: _T) -> None: - """Put `item` to the Queue - - >>> queue = QueueByList() - >>> queue.put(10) - >>> queue.put(20) - >>> len(queue) - 2 - >>> queue - Queue((10, 20)) - """ - - self.entries.append(item) - - def get(self) -> _T: - """ - Get `item` from the Queue - - >>> queue = QueueByList((10, 20, 30)) - >>> queue.get() - 10 - >>> queue.put(40) - >>> queue.get() - 20 - >>> queue.get() - 30 - >>> len(queue) - 1 - >>> queue.get() - 40 - >>> queue.get() - Traceback (most recent call last): - ... - IndexError: Queue is empty - """ - - if not self.entries: - raise IndexError("Queue is empty") - return self.entries.pop(0) - - def rotate(self, rotation: int) -> None: - """Rotate the items of the Queue `rotation` times - - >>> queue = QueueByList([10, 20, 30, 40]) - >>> queue - Queue((10, 20, 30, 40)) - >>> queue.rotate(1) - >>> queue - Queue((20, 30, 40, 10)) - >>> queue.rotate(2) - >>> queue - Queue((40, 10, 20, 30)) - """ - - put = self.entries.append - get = self.entries.pop - - for _ in range(rotation): - put(get(0)) - - def get_front(self) -> _T: - """Get the front item from the Queue - - >>> queue = QueueByList((10, 20, 30)) - >>> queue.get_front() - 10 - >>> queue - Queue((10, 20, 30)) - >>> queue.get() - 10 - >>> queue.get_front() - 20 - """ - - return self.entries[0] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/queue/queue_by_two_stacks.py b/data_structures/queue/queue_by_two_stacks.py deleted file mode 100644 index cd62f155a63b..000000000000 --- a/data_structures/queue/queue_by_two_stacks.py +++ /dev/null @@ -1,115 +0,0 @@ -"""Queue implementation using two stacks""" - -from collections.abc import Iterable -from typing import Generic, TypeVar - -_T = TypeVar("_T") - - -class QueueByTwoStacks(Generic[_T]): - def __init__(self, iterable: Iterable[_T] | None = None) -> None: - """ - >>> QueueByTwoStacks() - Queue(()) - >>> QueueByTwoStacks([10, 20, 30]) - Queue((10, 20, 30)) - >>> QueueByTwoStacks((i**2 for i in range(1, 4))) - Queue((1, 4, 9)) - """ - self._stack1: list[_T] = list(iterable or []) - self._stack2: list[_T] = [] - - def __len__(self) -> int: - """ - >>> len(QueueByTwoStacks()) - 0 - >>> from string import ascii_lowercase - >>> len(QueueByTwoStacks(ascii_lowercase)) - 26 - >>> queue = QueueByTwoStacks() - >>> for i in range(1, 11): - ... queue.put(i) - ... - >>> len(queue) - 10 - >>> for i in range(2): - ... queue.get() - 1 - 2 - >>> len(queue) - 8 - """ - - return len(self._stack1) + len(self._stack2) - - def __repr__(self) -> str: - """ - >>> queue = QueueByTwoStacks() - >>> queue - Queue(()) - >>> str(queue) - 'Queue(())' - >>> queue.put(10) - >>> queue - Queue((10,)) - >>> queue.put(20) - >>> queue.put(30) - >>> queue - Queue((10, 20, 30)) - """ - return f"Queue({tuple(self._stack2[::-1] + self._stack1)})" - - def put(self, item: _T) -> None: - """ - Put `item` into the Queue - - >>> queue = QueueByTwoStacks() - >>> queue.put(10) - >>> queue.put(20) - >>> len(queue) - 2 - >>> queue - Queue((10, 20)) - """ - - self._stack1.append(item) - - def get(self) -> _T: - """ - Get `item` from the Queue - - >>> queue = QueueByTwoStacks((10, 20, 30)) - >>> queue.get() - 10 - >>> queue.put(40) - >>> queue.get() - 20 - >>> queue.get() - 30 - >>> len(queue) - 1 - >>> queue.get() - 40 - >>> queue.get() - Traceback (most recent call last): - ... - IndexError: Queue is empty - """ - - # To reduce number of attribute look-ups in `while` loop. - stack1_pop = self._stack1.pop - stack2_append = self._stack2.append - - if not self._stack2: - while self._stack1: - stack2_append(stack1_pop()) - - if not self._stack2: - raise IndexError("Queue is empty") - return self._stack2.pop() - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/queue/queue_on_pseudo_stack.py b/data_structures/queue/queue_on_pseudo_stack.py deleted file mode 100644 index 2da67ecc263c..000000000000 --- a/data_structures/queue/queue_on_pseudo_stack.py +++ /dev/null @@ -1,59 +0,0 @@ -"""Queue represented by a pseudo stack (represented by a list with pop and append)""" - -from typing import Any - - -class Queue: - def __init__(self): - self.stack = [] - self.length = 0 - - def __str__(self): - printed = "<" + str(self.stack)[1:-1] + ">" - return printed - - """Enqueues {@code item} - @param item - item to enqueue""" - - def put(self, item: Any) -> None: - self.stack.append(item) - self.length = self.length + 1 - - """Dequeues {@code item} - @requirement: |self.length| > 0 - @return dequeued - item that was dequeued""" - - def get(self) -> Any: - self.rotate(1) - dequeued = self.stack[self.length - 1] - self.stack = self.stack[:-1] - self.rotate(self.length - 1) - self.length = self.length - 1 - return dequeued - - """Rotates the queue {@code rotation} times - @param rotation - number of times to rotate queue""" - - def rotate(self, rotation: int) -> None: - for _ in range(rotation): - temp = self.stack[0] - self.stack = self.stack[1:] - self.put(temp) - self.length = self.length - 1 - - """Reports item at the front of self - @return item at front of self.stack""" - - def front(self) -> Any: - front = self.get() - self.put(front) - self.rotate(self.length - 1) - return front - - """Returns the length of this.stack""" - - def size(self) -> int: - return self.length diff --git a/data_structures/stacks/__init__.py b/data_structures/stacks/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/stacks/balanced_parentheses.py b/data_structures/stacks/balanced_parentheses.py deleted file mode 100644 index 928815bb2111..000000000000 --- a/data_structures/stacks/balanced_parentheses.py +++ /dev/null @@ -1,38 +0,0 @@ -from .stack import Stack - - -def balanced_parentheses(parentheses: str) -> bool: - """Use a stack to check if a string of parentheses is balanced. - >>> balanced_parentheses("([]{})") - True - >>> balanced_parentheses("[()]{}{[()()]()}") - True - >>> balanced_parentheses("[(])") - False - >>> balanced_parentheses("1+2*3-4") - True - >>> balanced_parentheses("") - True - """ - stack: Stack[str] = Stack() - bracket_pairs = {"(": ")", "[": "]", "{": "}"} - for bracket in parentheses: - if bracket in bracket_pairs: - stack.push(bracket) - elif bracket in (")", "]", "}") and ( - stack.is_empty() or bracket_pairs[stack.pop()] != bracket - ): - return False - return stack.is_empty() - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - examples = ["((()))", "((())", "(()))"] - print("Balanced parentheses demonstration:\n") - for example in examples: - not_str = "" if balanced_parentheses(example) else "not " - print(f"{example} is {not_str}balanced") diff --git a/data_structures/stacks/dijkstras_two_stack_algorithm.py b/data_structures/stacks/dijkstras_two_stack_algorithm.py deleted file mode 100644 index 94d19156f1c3..000000000000 --- a/data_structures/stacks/dijkstras_two_stack_algorithm.py +++ /dev/null @@ -1,84 +0,0 @@ -""" -Author: Alexander Joslin -GitHub: github.com/echoaj - -Explanation: https://medium.com/@haleesammar/implemented-in-js-dijkstras-2-stack- - algorithm-for-evaluating-mathematical-expressions-fc0837dae1ea - -We can use Dijkstra's two stack algorithm to solve an equation -such as: (5 + ((4 * 2) * (2 + 3))) - -THESE ARE THE ALGORITHM'S RULES: -RULE 1: Scan the expression from left to right. When an operand is encountered, - push it onto the operand stack. - -RULE 2: When an operator is encountered in the expression, - push it onto the operator stack. - -RULE 3: When a left parenthesis is encountered in the expression, ignore it. - -RULE 4: When a right parenthesis is encountered in the expression, - pop an operator off the operator stack. The two operands it must - operate on must be the last two operands pushed onto the operand stack. - We therefore pop the operand stack twice, perform the operation, - and push the result back onto the operand stack so it will be available - for use as an operand of the next operator popped off the operator stack. - -RULE 5: When the entire infix expression has been scanned, the value left on - the operand stack represents the value of the expression. - -NOTE: It only works with whole numbers. -""" - -__author__ = "Alexander Joslin" - -import operator as op - -from .stack import Stack - - -def dijkstras_two_stack_algorithm(equation: str) -> int: - """ - DocTests - >>> dijkstras_two_stack_algorithm("(5 + 3)") - 8 - >>> dijkstras_two_stack_algorithm("((9 - (2 + 9)) + (8 - 1))") - 5 - >>> dijkstras_two_stack_algorithm("((((3 - 2) - (2 + 3)) + (2 - 4)) + 3)") - -3 - - :param equation: a string - :return: result: an integer - """ - operators = {"*": op.mul, "/": op.truediv, "+": op.add, "-": op.sub} - - operand_stack: Stack[int] = Stack() - operator_stack: Stack[str] = Stack() - - for i in equation: - if i.isdigit(): - # RULE 1 - operand_stack.push(int(i)) - elif i in operators: - # RULE 2 - operator_stack.push(i) - elif i == ")": - # RULE 4 - opr = operator_stack.peek() - operator_stack.pop() - num1 = operand_stack.peek() - operand_stack.pop() - num2 = operand_stack.peek() - operand_stack.pop() - - total = operators[opr](num2, num1) - operand_stack.push(total) - - # RULE 5 - return operand_stack.peek() - - -if __name__ == "__main__": - equation = "(5 + ((4 * 2) * (2 + 3)))" - # answer = 45 - print(f"{equation} = {dijkstras_two_stack_algorithm(equation)}") diff --git a/data_structures/stacks/infix_to_postfix_conversion.py b/data_structures/stacks/infix_to_postfix_conversion.py deleted file mode 100644 index e697061937c9..000000000000 --- a/data_structures/stacks/infix_to_postfix_conversion.py +++ /dev/null @@ -1,113 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Infix_notation -https://en.wikipedia.org/wiki/Reverse_Polish_notation -https://en.wikipedia.org/wiki/Shunting-yard_algorithm -""" - -from typing import Literal - -from .balanced_parentheses import balanced_parentheses -from .stack import Stack - -PRECEDENCES: dict[str, int] = { - "+": 1, - "-": 1, - "*": 2, - "/": 2, - "^": 3, -} -ASSOCIATIVITIES: dict[str, Literal["LR", "RL"]] = { - "+": "LR", - "-": "LR", - "*": "LR", - "/": "LR", - "^": "RL", -} - - -def precedence(char: str) -> int: - """ - Return integer value representing an operator's precedence, or - order of operation. - https://en.wikipedia.org/wiki/Order_of_operations - """ - return PRECEDENCES.get(char, -1) - - -def associativity(char: str) -> Literal["LR", "RL"]: - """ - Return the associativity of the operator `char`. - https://en.wikipedia.org/wiki/Operator_associativity - """ - return ASSOCIATIVITIES[char] - - -def infix_to_postfix(expression_str: str) -> str: - """ - >>> infix_to_postfix("(1*(2+3)+4))") - Traceback (most recent call last): - ... - ValueError: Mismatched parentheses - >>> infix_to_postfix("") - '' - >>> infix_to_postfix("3+2") - '3 2 +' - >>> infix_to_postfix("(3+4)*5-6") - '3 4 + 5 * 6 -' - >>> infix_to_postfix("(1+2)*3/4-5") - '1 2 + 3 * 4 / 5 -' - >>> infix_to_postfix("a+b*c+(d*e+f)*g") - 'a b c * + d e * f + g * +' - >>> infix_to_postfix("x^y/(5*z)+2") - 'x y ^ 5 z * / 2 +' - >>> infix_to_postfix("2^3^2") - '2 3 2 ^ ^' - """ - if not balanced_parentheses(expression_str): - raise ValueError("Mismatched parentheses") - stack: Stack[str] = Stack() - postfix = [] - for char in expression_str: - if char.isalpha() or char.isdigit(): - postfix.append(char) - elif char == "(": - stack.push(char) - elif char == ")": - while not stack.is_empty() and stack.peek() != "(": - postfix.append(stack.pop()) - stack.pop() - else: - while True: - if stack.is_empty(): - stack.push(char) - break - - char_precedence = precedence(char) - tos_precedence = precedence(stack.peek()) - - if char_precedence > tos_precedence: - stack.push(char) - break - if char_precedence < tos_precedence: - postfix.append(stack.pop()) - continue - # Precedences are equal - if associativity(char) == "RL": - stack.push(char) - break - postfix.append(stack.pop()) - - while not stack.is_empty(): - postfix.append(stack.pop()) - return " ".join(postfix) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - expression = "a+b*(c^d-e)^(f+g*h)-i" - - print("Infix to Postfix Notation demonstration:\n") - print("Infix notation: " + expression) - print("Postfix notation: " + infix_to_postfix(expression)) diff --git a/data_structures/stacks/infix_to_prefix_conversion.py b/data_structures/stacks/infix_to_prefix_conversion.py deleted file mode 100644 index 878473b93c19..000000000000 --- a/data_structures/stacks/infix_to_prefix_conversion.py +++ /dev/null @@ -1,192 +0,0 @@ -""" -Output: - -Enter an Infix Equation = a + b ^c - Symbol | Stack | Postfix ----------------------------- - c | | c - ^ | ^ | c - b | ^ | cb - + | + | cb^ - a | + | cb^a - | | cb^a+ - - a+b^c (Infix) -> +a^bc (Prefix) -""" - - -def infix_2_postfix(infix: str) -> str: - """ - >>> infix_2_postfix("a+b^c") # doctest: +NORMALIZE_WHITESPACE - Symbol | Stack | Postfix - ---------------------------- - a | | a - + | + | a - b | + | ab - ^ | +^ | ab - c | +^ | abc - | + | abc^ - | | abc^+ - 'abc^+' - - >>> infix_2_postfix("1*((-a)*2+b)") # doctest: +NORMALIZE_WHITESPACE - Symbol | Stack | Postfix - ------------------------------------------- - 1 | | 1 - * | * | 1 - ( | *( | 1 - ( | *(( | 1 - - | *((- | 1 - a | *((- | 1a - ) | *( | 1a- - * | *(* | 1a- - 2 | *(* | 1a-2 - + | *(+ | 1a-2* - b | *(+ | 1a-2*b - ) | * | 1a-2*b+ - | | 1a-2*b+* - '1a-2*b+*' - - >>> infix_2_postfix("") - Symbol | Stack | Postfix - ---------------------------- - '' - - >>> infix_2_postfix("(()") - Traceback (most recent call last): - ... - ValueError: invalid expression - - >>> infix_2_postfix("())") - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - stack = [] - post_fix = [] - priority = { - "^": 3, - "*": 2, - "/": 2, - "%": 2, - "+": 1, - "-": 1, - } # Priority of each operator - print_width = max(len(infix), 7) - - # Print table header for output - print( - "Symbol".center(8), - "Stack".center(print_width), - "Postfix".center(print_width), - sep=" | ", - ) - print("-" * (print_width * 3 + 7)) - - for x in infix: - if x.isalpha() or x.isdigit(): - post_fix.append(x) # if x is Alphabet / Digit, add it to Postfix - elif x == "(": - stack.append(x) # if x is "(" push to Stack - elif x == ")": # if x is ")" pop stack until "(" is encountered - if len(stack) == 0: # close bracket without open bracket - raise IndexError("list index out of range") - - while stack[-1] != "(": - post_fix.append(stack.pop()) # Pop stack & add the content to Postfix - stack.pop() - elif len(stack) == 0: - stack.append(x) # If stack is empty, push x to stack - else: # while priority of x is not > priority of element in the stack - while stack and stack[-1] != "(" and priority[x] <= priority[stack[-1]]: - post_fix.append(stack.pop()) # pop stack & add to Postfix - stack.append(x) # push x to stack - - print( - x.center(8), - ("".join(stack)).ljust(print_width), - ("".join(post_fix)).ljust(print_width), - sep=" | ", - ) # Output in tabular format - - while len(stack) > 0: # while stack is not empty - if stack[-1] == "(": # open bracket with no close bracket - raise ValueError("invalid expression") - - post_fix.append(stack.pop()) # pop stack & add to Postfix - print( - " ".center(8), - ("".join(stack)).ljust(print_width), - ("".join(post_fix)).ljust(print_width), - sep=" | ", - ) # Output in tabular format - - return "".join(post_fix) # return Postfix as str - - -def infix_2_prefix(infix: str) -> str: - """ - >>> infix_2_prefix("a+b^c") # doctest: +NORMALIZE_WHITESPACE - Symbol | Stack | Postfix - ---------------------------- - c | | c - ^ | ^ | c - b | ^ | cb - + | + | cb^ - a | + | cb^a - | | cb^a+ - '+a^bc' - - >>> infix_2_prefix("1*((-a)*2+b)") # doctest: +NORMALIZE_WHITESPACE - Symbol | Stack | Postfix - ------------------------------------------- - ( | ( | - b | ( | b - + | (+ | b - 2 | (+ | b2 - * | (+* | b2 - ( | (+*( | b2 - a | (+*( | b2a - - | (+*(- | b2a - ) | (+* | b2a- - ) | | b2a-*+ - * | * | b2a-*+ - 1 | * | b2a-*+1 - | | b2a-*+1* - '*1+*-a2b' - - >>> infix_2_prefix('') - Symbol | Stack | Postfix - ---------------------------- - '' - - >>> infix_2_prefix('(()') - Traceback (most recent call last): - ... - IndexError: list index out of range - - >>> infix_2_prefix('())') - Traceback (most recent call last): - ... - ValueError: invalid expression - """ - reversed_infix = list(infix[::-1]) # reverse the infix equation - - for i in range(len(reversed_infix)): - if reversed_infix[i] == "(": - reversed_infix[i] = ")" # change "(" to ")" - elif reversed_infix[i] == ")": - reversed_infix[i] = "(" # change ")" to "(" - - # call infix_2_postfix on Infix, return reverse of Postfix - return (infix_2_postfix("".join(reversed_infix)))[::-1] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - Infix = input("\nEnter an Infix Equation = ") # Input an Infix equation - Infix = "".join(Infix.split()) # Remove spaces from the input - print("\n\t", Infix, "(Infix) -> ", infix_2_prefix(Infix), "(Prefix)") diff --git a/data_structures/stacks/lexicographical_numbers.py b/data_structures/stacks/lexicographical_numbers.py deleted file mode 100644 index 6a174e7d9e95..000000000000 --- a/data_structures/stacks/lexicographical_numbers.py +++ /dev/null @@ -1,38 +0,0 @@ -from collections.abc import Iterator - - -def lexical_order(max_number: int) -> Iterator[int]: - """ - Generate numbers in lexical order from 1 to max_number. - - >>> " ".join(map(str, lexical_order(13))) - '1 10 11 12 13 2 3 4 5 6 7 8 9' - >>> list(lexical_order(1)) - [1] - >>> " ".join(map(str, lexical_order(20))) - '1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9' - >>> " ".join(map(str, lexical_order(25))) - '1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 3 4 5 6 7 8 9' - >>> list(lexical_order(12)) - [1, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9] - """ - - stack = [1] - - while stack: - num = stack.pop() - if num > max_number: - continue - - yield num - if (num % 10) != 9: - stack.append(num + 1) - - stack.append(num * 10) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"Numbers from 1 to 25 in lexical order: {list(lexical_order(26))}") diff --git a/data_structures/stacks/next_greater_element.py b/data_structures/stacks/next_greater_element.py deleted file mode 100644 index 216850b4b894..000000000000 --- a/data_structures/stacks/next_greater_element.py +++ /dev/null @@ -1,133 +0,0 @@ -from __future__ import annotations - -arr = [-10, -5, 0, 5, 5.1, 11, 13, 21, 3, 4, -21, -10, -5, -1, 0] -expect = [-5, 0, 5, 5.1, 11, 13, 21, -1, 4, -1, -10, -5, -1, 0, -1] - - -def next_greatest_element_slow(arr: list[float]) -> list[float]: - """ - Get the Next Greatest Element (NGE) for each element in the array - by checking all subsequent elements to find the next greater one. - - This is a brute-force implementation, and it has a time complexity - of O(n^2), where n is the size of the array. - - Args: - arr: List of numbers for which the NGE is calculated. - - Returns: - List containing the next greatest elements. If no - greater element is found, -1 is placed in the result. - - Example: - >>> next_greatest_element_slow(arr) == expect - True - """ - - result = [] - arr_size = len(arr) - - for i in range(arr_size): - next_element: float = -1 - for j in range(i + 1, arr_size): - if arr[i] < arr[j]: - next_element = arr[j] - break - result.append(next_element) - return result - - -def next_greatest_element_fast(arr: list[float]) -> list[float]: - """ - Find the Next Greatest Element (NGE) for each element in the array - using a more readable approach. This implementation utilizes - enumerate() for the outer loop and slicing for the inner loop. - - While this improves readability over next_greatest_element_slow(), - it still has a time complexity of O(n^2). - - Args: - arr: List of numbers for which the NGE is calculated. - - Returns: - List containing the next greatest elements. If no - greater element is found, -1 is placed in the result. - - Example: - >>> next_greatest_element_fast(arr) == expect - True - """ - result = [] - for i, outer in enumerate(arr): - next_item: float = -1 - for inner in arr[i + 1 :]: - if outer < inner: - next_item = inner - break - result.append(next_item) - return result - - -def next_greatest_element(arr: list[float]) -> list[float]: - """ - Efficient solution to find the Next Greatest Element (NGE) for all elements - using a stack. The time complexity is reduced to O(n), making it suitable - for larger arrays. - - The stack keeps track of elements for which the next greater element hasn't - been found yet. By iterating through the array in reverse (from the last - element to the first), the stack is used to efficiently determine the next - greatest element for each element. - - Args: - arr: List of numbers for which the NGE is calculated. - - Returns: - List containing the next greatest elements. If no - greater element is found, -1 is placed in the result. - - Example: - >>> next_greatest_element(arr) == expect - True - """ - arr_size = len(arr) - stack: list[float] = [] - result: list[float] = [-1] * arr_size - - for index in reversed(range(arr_size)): - if stack: - while stack[-1] <= arr[index]: - stack.pop() - if not stack: - break - if stack: - result[index] = stack[-1] - stack.append(arr[index]) - return result - - -if __name__ == "__main__": - from doctest import testmod - from timeit import timeit - - testmod() - print(next_greatest_element_slow(arr)) - print(next_greatest_element_fast(arr)) - print(next_greatest_element(arr)) - - setup = ( - "from __main__ import arr, next_greatest_element_slow, " - "next_greatest_element_fast, next_greatest_element" - ) - print( - "next_greatest_element_slow():", - timeit("next_greatest_element_slow(arr)", setup=setup), - ) - print( - "next_greatest_element_fast():", - timeit("next_greatest_element_fast(arr)", setup=setup), - ) - print( - " next_greatest_element():", - timeit("next_greatest_element(arr)", setup=setup), - ) diff --git a/data_structures/stacks/postfix_evaluation.py b/data_structures/stacks/postfix_evaluation.py deleted file mode 100644 index 03a87b9e0fa3..000000000000 --- a/data_structures/stacks/postfix_evaluation.py +++ /dev/null @@ -1,200 +0,0 @@ -""" -Reverse Polish Nation is also known as Polish postfix notation or simply postfix -notation. -https://en.wikipedia.org/wiki/Reverse_Polish_notation -Classic examples of simple stack implementations. -Valid operators are +, -, *, /. -Each operand may be an integer or another expression. - -Output: - -Enter a Postfix Equation (space separated) = 5 6 9 * + - Symbol | Action | Stack ------------------------------------ - 5 | push(5) | 5 - 6 | push(6) | 5,6 - 9 | push(9) | 5,6,9 - | pop(9) | 5,6 - | pop(6) | 5 - * | push(6*9) | 5,54 - | pop(54) | 5 - | pop(5) | - + | push(5+54) | 59 - - Result = 59 -""" - -# Defining valid unary operator symbols -UNARY_OP_SYMBOLS = ("-", "+") - -# operators & their respective operation -OPERATORS = { - "^": lambda p, q: p**q, - "*": lambda p, q: p * q, - "/": lambda p, q: p / q, - "+": lambda p, q: p + q, - "-": lambda p, q: p - q, -} - - -def parse_token(token: str | float) -> float | str: - """ - Converts the given data to the appropriate number if it is indeed a number, else - returns the data as it is with a False flag. This function also serves as a check - of whether the input is a number or not. - - Parameters - ---------- - token: The data that needs to be converted to the appropriate operator or number. - - Returns - ------- - float or str - Returns a float if `token` is a number or a str if `token` is an operator - """ - if token in OPERATORS: - return token - try: - return float(token) - except ValueError: - msg = f"{token} is neither a number nor a valid operator" - raise ValueError(msg) - - -def evaluate(post_fix: list[str], verbose: bool = False) -> float: - """ - Evaluate postfix expression using a stack. - >>> evaluate(["0"]) - 0.0 - >>> evaluate(["-0"]) - -0.0 - >>> evaluate(["1"]) - 1.0 - >>> evaluate(["-1"]) - -1.0 - >>> evaluate(["-1.1"]) - -1.1 - >>> evaluate(["2", "1", "+", "3", "*"]) - 9.0 - >>> evaluate(["2", "1.9", "+", "3", "*"]) - 11.7 - >>> evaluate(["2", "-1.9", "+", "3", "*"]) - 0.30000000000000027 - >>> evaluate(["4", "13", "5", "/", "+"]) - 6.6 - >>> evaluate(["2", "-", "3", "+"]) - 1.0 - >>> evaluate(["-4", "5", "*", "6", "-"]) - -26.0 - >>> evaluate([]) - 0 - >>> evaluate(["4", "-", "6", "7", "/", "9", "8"]) - Traceback (most recent call last): - ... - ArithmeticError: Input is not a valid postfix expression - - Parameters - ---------- - post_fix: - The postfix expression is tokenized into operators and operands and stored - as a Python list - - verbose: - Display stack contents while evaluating the expression if verbose is True - - Returns - ------- - float - The evaluated value - """ - if not post_fix: - return 0 - # Checking the list to find out whether the postfix expression is valid - valid_expression = [parse_token(token) for token in post_fix] - if verbose: - # print table header - print("Symbol".center(8), "Action".center(12), "Stack", sep=" | ") - print("-" * (30 + len(post_fix))) - stack = [] - for x in valid_expression: - if x not in OPERATORS: - stack.append(x) # append x to stack - if verbose: - # output in tabular format - print( - f"{x}".rjust(8), - f"push({x})".ljust(12), - stack, - sep=" | ", - ) - continue - # If x is operator - # If only 1 value is inside the stack and + or - is encountered - # then this is unary + or - case - if x in UNARY_OP_SYMBOLS and len(stack) < 2: - b = stack.pop() # pop stack - if x == "-": - b *= -1 # negate b - stack.append(b) - if verbose: - # output in tabular format - print( - "".rjust(8), - f"pop({b})".ljust(12), - stack, - sep=" | ", - ) - print( - str(x).rjust(8), - f"push({x}{b})".ljust(12), - stack, - sep=" | ", - ) - continue - b = stack.pop() # pop stack - if verbose: - # output in tabular format - print( - "".rjust(8), - f"pop({b})".ljust(12), - stack, - sep=" | ", - ) - - a = stack.pop() # pop stack - if verbose: - # output in tabular format - print( - "".rjust(8), - f"pop({a})".ljust(12), - stack, - sep=" | ", - ) - # evaluate the 2 values popped from stack & push result to stack - stack.append(OPERATORS[x](a, b)) # type: ignore[index] - if verbose: - # output in tabular format - print( - f"{x}".rjust(8), - f"push({a}{x}{b})".ljust(12), - stack, - sep=" | ", - ) - # If everything is executed correctly, the stack will contain - # only one element which is the result - if len(stack) != 1: - raise ArithmeticError("Input is not a valid postfix expression") - return float(stack[0]) - - -if __name__ == "__main__": - # Create a loop so that the user can evaluate postfix expressions multiple times - while True: - expression = input("Enter a Postfix Expression (space separated): ").split(" ") - prompt = "Do you want to see stack contents while evaluating? [y/N]: " - verbose = input(prompt).strip().lower() == "y" - output = evaluate(expression, verbose) - print("Result = ", output) - prompt = "Do you want to enter another expression? [y/N]: " - if input(prompt).strip().lower() != "y": - break diff --git a/data_structures/stacks/prefix_evaluation.py b/data_structures/stacks/prefix_evaluation.py deleted file mode 100644 index f48eca23d7b5..000000000000 --- a/data_structures/stacks/prefix_evaluation.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -Python3 program to evaluate a prefix expression. -""" - -calc = { - "+": lambda x, y: x + y, - "-": lambda x, y: x - y, - "*": lambda x, y: x * y, - "/": lambda x, y: x / y, -} - - -def is_operand(c): - """ - Return True if the given char c is an operand, e.g. it is a number - - >>> is_operand("1") - True - >>> is_operand("+") - False - """ - return c.isdigit() - - -def evaluate(expression): - """ - Evaluate a given expression in prefix notation. - Asserts that the given expression is valid. - - >>> evaluate("+ 9 * 2 6") - 21 - >>> evaluate("/ * 10 2 + 4 1 ") - 4.0 - """ - stack = [] - - # iterate over the string in reverse order - for c in expression.split()[::-1]: - # push operand to stack - if is_operand(c): - stack.append(int(c)) - - else: - # pop values from stack can calculate the result - # push the result onto the stack again - o1 = stack.pop() - o2 = stack.pop() - stack.append(calc[c](o1, o2)) - - return stack.pop() - - -# Driver code -if __name__ == "__main__": - test_expression = "+ 9 * 2 6" - print(evaluate(test_expression)) - - test_expression = "/ * 10 2 + 4 1 " - print(evaluate(test_expression)) diff --git a/data_structures/stacks/stack.py b/data_structures/stacks/stack.py deleted file mode 100644 index 93698f5aa116..000000000000 --- a/data_structures/stacks/stack.py +++ /dev/null @@ -1,215 +0,0 @@ -from __future__ import annotations - -from typing import Generic, TypeVar - -T = TypeVar("T") - - -class StackOverflowError(BaseException): - pass - - -class StackUnderflowError(BaseException): - pass - - -class Stack(Generic[T]): - """A stack is an abstract data type that serves as a collection of - elements with two principal operations: push() and pop(). push() adds an - element to the top of the stack, and pop() removes an element from the top - of a stack. The order in which elements come off of a stack are - Last In, First Out (LIFO). - https://en.wikipedia.org/wiki/Stack_(abstract_data_type) - """ - - def __init__(self, limit: int = 10): - self.stack: list[T] = [] - self.limit = limit - - def __bool__(self) -> bool: - return bool(self.stack) - - def __str__(self) -> str: - return str(self.stack) - - def push(self, data: T) -> None: - """ - Push an element to the top of the stack. - - >>> S = Stack(2) # stack size = 2 - >>> S.push(10) - >>> S.push(20) - >>> print(S) - [10, 20] - - >>> S = Stack(1) # stack size = 1 - >>> S.push(10) - >>> S.push(20) - Traceback (most recent call last): - ... - data_structures.stacks.stack.StackOverflowError - - """ - if len(self.stack) >= self.limit: - raise StackOverflowError - self.stack.append(data) - - def pop(self) -> T: - """ - Pop an element off of the top of the stack. - - >>> S = Stack() - >>> S.push(-5) - >>> S.push(10) - >>> S.pop() - 10 - - >>> Stack().pop() - Traceback (most recent call last): - ... - data_structures.stacks.stack.StackUnderflowError - """ - if not self.stack: - raise StackUnderflowError - return self.stack.pop() - - def peek(self) -> T: - """ - Peek at the top-most element of the stack. - - >>> S = Stack() - >>> S.push(-5) - >>> S.push(10) - >>> S.peek() - 10 - - >>> Stack().peek() - Traceback (most recent call last): - ... - data_structures.stacks.stack.StackUnderflowError - """ - if not self.stack: - raise StackUnderflowError - return self.stack[-1] - - def is_empty(self) -> bool: - """ - Check if a stack is empty. - - >>> S = Stack() - >>> S.is_empty() - True - - >>> S = Stack() - >>> S.push(10) - >>> S.is_empty() - False - """ - return not bool(self.stack) - - def is_full(self) -> bool: - """ - >>> S = Stack() - >>> S.is_full() - False - - >>> S = Stack(1) - >>> S.push(10) - >>> S.is_full() - True - """ - return self.size() == self.limit - - def size(self) -> int: - """ - Return the size of the stack. - - >>> S = Stack(3) - >>> S.size() - 0 - - >>> S = Stack(3) - >>> S.push(10) - >>> S.size() - 1 - - >>> S = Stack(3) - >>> S.push(10) - >>> S.push(20) - >>> S.size() - 2 - """ - return len(self.stack) - - def __contains__(self, item: T) -> bool: - """ - Check if item is in stack - - >>> S = Stack(3) - >>> S.push(10) - >>> 10 in S - True - - >>> S = Stack(3) - >>> S.push(10) - >>> 20 in S - False - """ - return item in self.stack - - -def test_stack() -> None: - """ - >>> test_stack() - """ - stack: Stack[int] = Stack(10) - assert bool(stack) is False - assert stack.is_empty() is True - assert stack.is_full() is False - assert str(stack) == "[]" - - try: - _ = stack.pop() - raise AssertionError # This should not happen - except StackUnderflowError: - assert True # This should happen - - try: - _ = stack.peek() - raise AssertionError # This should not happen - except StackUnderflowError: - assert True # This should happen - - for i in range(10): - assert stack.size() == i - stack.push(i) - - assert bool(stack) - assert not stack.is_empty() - assert stack.is_full() - assert str(stack) == str(list(range(10))) - assert stack.pop() == 9 - assert stack.peek() == 8 - - stack.push(100) - assert str(stack) == str([0, 1, 2, 3, 4, 5, 6, 7, 8, 100]) - - try: - stack.push(200) - raise AssertionError # This should not happen - except StackOverflowError: - assert True # This should happen - - assert not stack.is_empty() - assert stack.size() == 10 - - assert 5 in stack - assert 55 not in stack - - -if __name__ == "__main__": - test_stack() - - import doctest - - doctest.testmod() diff --git a/data_structures/stacks/stack_using_two_queues.py b/data_structures/stacks/stack_using_two_queues.py deleted file mode 100644 index 4b73246a045c..000000000000 --- a/data_structures/stacks/stack_using_two_queues.py +++ /dev/null @@ -1,85 +0,0 @@ -from __future__ import annotations - -from collections import deque -from dataclasses import dataclass, field - - -@dataclass -class StackWithQueues: - """ - https://www.geeksforgeeks.org/implement-stack-using-queue/ - - >>> stack = StackWithQueues() - >>> stack.push(1) - >>> stack.push(2) - >>> stack.push(3) - >>> stack.peek() - 3 - >>> stack.pop() - 3 - >>> stack.peek() - 2 - >>> stack.pop() - 2 - >>> stack.pop() - 1 - >>> stack.peek() is None - True - >>> stack.pop() - Traceback (most recent call last): - ... - IndexError: pop from an empty deque - """ - - main_queue: deque[int] = field(default_factory=deque) - temp_queue: deque[int] = field(default_factory=deque) - - def push(self, item: int) -> None: - self.temp_queue.append(item) - while self.main_queue: - self.temp_queue.append(self.main_queue.popleft()) - self.main_queue, self.temp_queue = self.temp_queue, self.main_queue - - def pop(self) -> int: - return self.main_queue.popleft() - - def peek(self) -> int | None: - return self.main_queue[0] if self.main_queue else None - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - stack: StackWithQueues | None = StackWithQueues() - while stack: - print("\nChoose operation:") - print("1. Push") - print("2. Pop") - print("3. Peek") - print("4. Quit") - - choice = input("Enter choice (1/2/3/4): ") - - if choice == "1": - element = int(input("Enter an integer to push: ").strip()) - stack.push(element) - print(f"{element} pushed onto the stack.") - elif choice == "2": - popped_element = stack.pop() - if popped_element is not None: - print(f"Popped element: {popped_element}") - else: - print("Stack is empty.") - elif choice == "3": - peeked_element = stack.peek() - if peeked_element is not None: - print(f"Top element: {peeked_element}") - else: - print("Stack is empty.") - elif choice == "4": - del stack - stack = None - else: - print("Invalid choice. Please try again.") diff --git a/data_structures/stacks/stack_with_doubly_linked_list.py b/data_structures/stacks/stack_with_doubly_linked_list.py deleted file mode 100644 index 50c5236e073c..000000000000 --- a/data_structures/stacks/stack_with_doubly_linked_list.py +++ /dev/null @@ -1,130 +0,0 @@ -# A complete working Python program to demonstrate all -# stack operations using a doubly linked list - -from __future__ import annotations - -from typing import Generic, TypeVar - -T = TypeVar("T") - - -class Node(Generic[T]): - def __init__(self, data: T): - self.data = data # Assign data - self.next: Node[T] | None = None # Initialize next as null - self.prev: Node[T] | None = None # Initialize prev as null - - -class Stack(Generic[T]): - """ - >>> stack = Stack() - >>> stack.is_empty() - True - >>> stack.print_stack() - stack elements are: - >>> for i in range(4): - ... stack.push(i) - ... - >>> stack.is_empty() - False - >>> stack.print_stack() - stack elements are: - 3->2->1->0-> - >>> stack.top() - 3 - >>> len(stack) - 4 - >>> stack.pop() - 3 - >>> stack.print_stack() - stack elements are: - 2->1->0-> - """ - - def __init__(self) -> None: - self.head: Node[T] | None = None - - def push(self, data: T) -> None: - """add a Node to the stack""" - if self.head is None: - self.head = Node(data) - else: - new_node = Node(data) - self.head.prev = new_node - new_node.next = self.head - new_node.prev = None - self.head = new_node - - def pop(self) -> T | None: - """pop the top element off the stack""" - if self.head is None: - return None - else: - assert self.head is not None - temp = self.head.data - self.head = self.head.next - if self.head is not None: - self.head.prev = None - return temp - - def top(self) -> T | None: - """return the top element of the stack""" - return self.head.data if self.head is not None else None - - def __len__(self) -> int: - temp = self.head - count = 0 - while temp is not None: - count += 1 - temp = temp.next - return count - - def is_empty(self) -> bool: - return self.head is None - - def print_stack(self) -> None: - print("stack elements are:") - temp = self.head - while temp is not None: - print(temp.data, end="->") - temp = temp.next - - -# Code execution starts here -if __name__ == "__main__": - # Start with the empty stack - stack: Stack[int] = Stack() - - # Insert 4 at the beginning. So stack becomes 4->None - print("Stack operations using Doubly LinkedList") - stack.push(4) - - # Insert 5 at the beginning. So stack becomes 4->5->None - stack.push(5) - - # Insert 6 at the beginning. So stack becomes 4->5->6->None - stack.push(6) - - # Insert 7 at the beginning. So stack becomes 4->5->6->7->None - stack.push(7) - - # Print the stack - stack.print_stack() - - # Print the top element - print("\nTop element is ", stack.top()) - - # Print the stack size - print("Size of the stack is ", len(stack)) - - # pop the top element - stack.pop() - - # pop the top element - stack.pop() - - # two elements have now been popped off - stack.print_stack() - - # Print True if the stack is empty else False - print("\nstack is empty:", stack.is_empty()) diff --git a/data_structures/stacks/stack_with_singly_linked_list.py b/data_structures/stacks/stack_with_singly_linked_list.py deleted file mode 100644 index 8e77c2b967ef..000000000000 --- a/data_structures/stacks/stack_with_singly_linked_list.py +++ /dev/null @@ -1,165 +0,0 @@ -"""A Stack using a linked list like structure""" - -from __future__ import annotations - -from collections.abc import Iterator -from typing import Generic, TypeVar - -T = TypeVar("T") - - -class Node(Generic[T]): - def __init__(self, data: T): - self.data = data - self.next: Node[T] | None = None - - def __str__(self) -> str: - return f"{self.data}" - - -class LinkedStack(Generic[T]): - """ - Linked List Stack implementing push (to top), - pop (from top) and is_empty - - >>> stack = LinkedStack() - >>> stack.is_empty() - True - >>> stack.push(5) - >>> stack.push(9) - >>> stack.push('python') - >>> stack.is_empty() - False - >>> stack.pop() - 'python' - >>> stack.push('algorithms') - >>> stack.pop() - 'algorithms' - >>> stack.pop() - 9 - >>> stack.pop() - 5 - >>> stack.is_empty() - True - >>> stack.pop() - Traceback (most recent call last): - ... - IndexError: pop from empty stack - """ - - def __init__(self) -> None: - self.top: Node[T] | None = None - - def __iter__(self) -> Iterator[T]: - node = self.top - while node: - yield node.data - node = node.next - - def __str__(self) -> str: - """ - >>> stack = LinkedStack() - >>> stack.push("c") - >>> stack.push("b") - >>> stack.push("a") - >>> str(stack) - 'a->b->c' - """ - return "->".join([str(item) for item in self]) - - def __len__(self) -> int: - """ - >>> stack = LinkedStack() - >>> len(stack) == 0 - True - >>> stack.push("c") - >>> stack.push("b") - >>> stack.push("a") - >>> len(stack) == 3 - True - """ - return len(tuple(iter(self))) - - def is_empty(self) -> bool: - """ - >>> stack = LinkedStack() - >>> stack.is_empty() - True - >>> stack.push(1) - >>> stack.is_empty() - False - """ - return self.top is None - - def push(self, item: T) -> None: - """ - >>> stack = LinkedStack() - >>> stack.push("Python") - >>> stack.push("Java") - >>> stack.push("C") - >>> str(stack) - 'C->Java->Python' - """ - node = Node(item) - if not self.is_empty(): - node.next = self.top - self.top = node - - def pop(self) -> T: - """ - >>> stack = LinkedStack() - >>> stack.pop() - Traceback (most recent call last): - ... - IndexError: pop from empty stack - >>> stack.push("c") - >>> stack.push("b") - >>> stack.push("a") - >>> stack.pop() == 'a' - True - >>> stack.pop() == 'b' - True - >>> stack.pop() == 'c' - True - """ - if self.is_empty(): - raise IndexError("pop from empty stack") - assert isinstance(self.top, Node) - pop_node = self.top - self.top = self.top.next - return pop_node.data - - def peek(self) -> T: - """ - >>> stack = LinkedStack() - >>> stack.push("Java") - >>> stack.push("C") - >>> stack.push("Python") - >>> stack.peek() - 'Python' - """ - if self.is_empty(): - raise IndexError("peek from empty stack") - - assert self.top is not None - return self.top.data - - def clear(self) -> None: - """ - >>> stack = LinkedStack() - >>> stack.push("Java") - >>> stack.push("C") - >>> stack.push("Python") - >>> str(stack) - 'Python->C->Java' - >>> stack.clear() - >>> len(stack) == 0 - True - """ - self.top = None - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/data_structures/stacks/stock_span_problem.py b/data_structures/stacks/stock_span_problem.py deleted file mode 100644 index 5efe58d25798..000000000000 --- a/data_structures/stacks/stock_span_problem.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -The stock span problem is a financial problem where we have a series of n daily -price quotes for a stock and we need to calculate span of stock's price for all n days. - -The span Si of the stock's price on a given day i is defined as the maximum -number of consecutive days just before the given day, for which the price of the stock -on the current day is less than or equal to its price on the given day. -""" - - -def calculation_span(price, s): - n = len(price) - # Create a stack and push index of fist element to it - st = [] - st.append(0) - - # Span value of first element is always 1 - s[0] = 1 - - # Calculate span values for rest of the elements - for i in range(1, n): - # Pop elements from stack while stack is not - # empty and top of stack is smaller than price[i] - while len(st) > 0 and price[st[0]] <= price[i]: - st.pop() - - # If stack becomes empty, then price[i] is greater - # than all elements on left of it, i.e. price[0], - # price[1], ..price[i-1]. Else the price[i] is - # greater than elements after top of stack - s[i] = i + 1 if len(st) <= 0 else (i - st[0]) - - # Push this element to stack - st.append(i) - - -# A utility function to print elements of array -def print_array(arr, n): - for i in range(n): - print(arr[i], end=" ") - - -# Driver program to test above function -price = [10, 4, 5, 90, 120, 80] -S = [0 for i in range(len(price) + 1)] - -# Fill the span values in array S[] -calculation_span(price, S) - -# Print the calculated span values -print_array(S, len(price)) diff --git a/data_structures/suffix_tree/__init__.py b/data_structures/suffix_tree/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/suffix_tree/example/__init__.py b/data_structures/suffix_tree/example/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/suffix_tree/example/example_usage.py b/data_structures/suffix_tree/example/example_usage.py deleted file mode 100644 index 724ac57e8bfb..000000000000 --- a/data_structures/suffix_tree/example/example_usage.py +++ /dev/null @@ -1,37 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11554 -# https://github.com/TheAlgorithms/Python/pull/11554 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -from data_structures.suffix_tree.suffix_tree import SuffixTree - - -def main() -> None: - """ - Demonstrate the usage of the SuffixTree class. - - - Initializes a SuffixTree with a predefined text. - - Defines a list of patterns to search for within the suffix tree. - - Searches for each pattern in the suffix tree. - - Patterns tested: - - "ana" (found) --> True - - "ban" (found) --> True - - "na" (found) --> True - - "xyz" (not found) --> False - - "mon" (found) --> True - """ - text = "monkey banana" - suffix_tree = SuffixTree(text) - - patterns = ["ana", "ban", "na", "xyz", "mon"] - for pattern in patterns: - found = suffix_tree.search(pattern) - print(f"Pattern '{pattern}' found: {found}") - - -if __name__ == "__main__": - main() diff --git a/data_structures/suffix_tree/suffix_tree.py b/data_structures/suffix_tree/suffix_tree.py deleted file mode 100644 index ad54fb0ba009..000000000000 --- a/data_structures/suffix_tree/suffix_tree.py +++ /dev/null @@ -1,66 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11554 -# https://github.com/TheAlgorithms/Python/pull/11554 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -from data_structures.suffix_tree.suffix_tree_node import SuffixTreeNode - - -class SuffixTree: - def __init__(self, text: str) -> None: - """ - Initializes the suffix tree with the given text. - - Args: - text (str): The text for which the suffix tree is to be built. - """ - self.text: str = text - self.root: SuffixTreeNode = SuffixTreeNode() - self.build_suffix_tree() - - def build_suffix_tree(self) -> None: - """ - Builds the suffix tree for the given text by adding all suffixes. - """ - text = self.text - n = len(text) - for i in range(n): - suffix = text[i:] - self._add_suffix(suffix, i) - - def _add_suffix(self, suffix: str, index: int) -> None: - """ - Adds a suffix to the suffix tree. - - Args: - suffix (str): The suffix to add. - index (int): The starting index of the suffix in the original text. - """ - node = self.root - for char in suffix: - if char not in node.children: - node.children[char] = SuffixTreeNode() - node = node.children[char] - node.is_end_of_string = True - node.start = index - node.end = index + len(suffix) - 1 - - def search(self, pattern: str) -> bool: - """ - Searches for a pattern in the suffix tree. - - Args: - pattern (str): The pattern to search for. - - Returns: - bool: True if the pattern is found, False otherwise. - """ - node = self.root - for char in pattern: - if char not in node.children: - return False - node = node.children[char] - return True diff --git a/data_structures/suffix_tree/suffix_tree_node.py b/data_structures/suffix_tree/suffix_tree_node.py deleted file mode 100644 index e5b628645063..000000000000 --- a/data_structures/suffix_tree/suffix_tree_node.py +++ /dev/null @@ -1,36 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11554 -# https://github.com/TheAlgorithms/Python/pull/11554 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -from __future__ import annotations - - -class SuffixTreeNode: - def __init__( - self, - children: dict[str, SuffixTreeNode] | None = None, - is_end_of_string: bool = False, - start: int | None = None, - end: int | None = None, - suffix_link: SuffixTreeNode | None = None, - ) -> None: - """ - Initializes a suffix tree node. - - Parameters: - children (dict[str, SuffixTreeNode] | None): The children of this node. - is_end_of_string (bool): Indicates if this node represents - the end of a string. - start (int | None): The start index of the suffix in the text. - end (int | None): The end index of the suffix in the text. - suffix_link (SuffixTreeNode | None): Link to another suffix tree node. - """ - self.children = children or {} - self.is_end_of_string = is_end_of_string - self.start = start - self.end = end - self.suffix_link = suffix_link diff --git a/data_structures/suffix_tree/tests/__init__.py b/data_structures/suffix_tree/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/suffix_tree/tests/test_suffix_tree.py b/data_structures/suffix_tree/tests/test_suffix_tree.py deleted file mode 100644 index 45c6790ac48a..000000000000 --- a/data_structures/suffix_tree/tests/test_suffix_tree.py +++ /dev/null @@ -1,59 +0,0 @@ -# Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed) -# in Pull Request: #11554 -# https://github.com/TheAlgorithms/Python/pull/11554 -# -# Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request -# addressing bugs/corrections to this file. -# Thank you! - -import unittest - -from data_structures.suffix_tree.suffix_tree import SuffixTree - - -class TestSuffixTree(unittest.TestCase): - def setUp(self) -> None: - """Set up the initial conditions for each test.""" - self.text = "banana" - self.suffix_tree = SuffixTree(self.text) - - def test_search_existing_patterns(self) -> None: - """Test searching for patterns that exist in the suffix tree.""" - patterns = ["ana", "ban", "na"] - for pattern in patterns: - with self.subTest(pattern=pattern): - assert self.suffix_tree.search( - pattern - ), f"Pattern '{pattern}' should be found." - - def test_search_non_existing_patterns(self) -> None: - """Test searching for patterns that do not exist in the suffix tree.""" - patterns = ["xyz", "apple", "cat"] - for pattern in patterns: - with self.subTest(pattern=pattern): - assert not self.suffix_tree.search( - pattern - ), f"Pattern '{pattern}' should not be found." - - def test_search_empty_pattern(self) -> None: - """Test searching for an empty pattern.""" - assert self.suffix_tree.search(""), "An empty pattern should be found." - - def test_search_full_text(self) -> None: - """Test searching for the full text.""" - assert self.suffix_tree.search( - self.text - ), "The full text should be found in the suffix tree." - - def test_search_substrings(self) -> None: - """Test searching for substrings of the full text.""" - substrings = ["ban", "ana", "a", "na"] - for substring in substrings: - with self.subTest(substring=substring): - assert self.suffix_tree.search( - substring - ), f"Substring '{substring}' should be found." - - -if __name__ == "__main__": - unittest.main() diff --git a/data_structures/trie/__init__.py b/data_structures/trie/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/data_structures/trie/radix_tree.py b/data_structures/trie/radix_tree.py deleted file mode 100644 index caf566a6ce30..000000000000 --- a/data_structures/trie/radix_tree.py +++ /dev/null @@ -1,229 +0,0 @@ -""" -A Radix Tree is a data structure that represents a space-optimized -trie (prefix tree) in whicheach node that is the only child is merged -with its parent [https://en.wikipedia.org/wiki/Radix_tree] -""" - - -class RadixNode: - def __init__(self, prefix: str = "", is_leaf: bool = False) -> None: - # Mapping from the first character of the prefix of the node - self.nodes: dict[str, RadixNode] = {} - - # A node will be a leaf if the tree contains its word - self.is_leaf = is_leaf - - self.prefix = prefix - - def match(self, word: str) -> tuple[str, str, str]: - """Compute the common substring of the prefix of the node and a word - - Args: - word (str): word to compare - - Returns: - (str, str, str): common substring, remaining prefix, remaining word - - >>> RadixNode("myprefix").match("mystring") - ('my', 'prefix', 'string') - """ - x = 0 - for q, w in zip(self.prefix, word): - if q != w: - break - - x += 1 - - return self.prefix[:x], self.prefix[x:], word[x:] - - def insert_many(self, words: list[str]) -> None: - """Insert many words in the tree - - Args: - words (list[str]): list of words - - >>> RadixNode("myprefix").insert_many(["mystring", "hello"]) - """ - for word in words: - self.insert(word) - - def insert(self, word: str) -> None: - """Insert a word into the tree - - Args: - word (str): word to insert - - >>> RadixNode("myprefix").insert("mystring") - - >>> root = RadixNode() - >>> root.insert_many(['myprefix', 'myprefixA', 'myprefixAA']) - >>> root.print_tree() - - myprefix (leaf) - -- A (leaf) - --- A (leaf) - """ - # Case 1: If the word is the prefix of the node - # Solution: We set the current node as leaf - if self.prefix == word and not self.is_leaf: - self.is_leaf = True - - # Case 2: The node has no edges that have a prefix to the word - # Solution: We create an edge from the current node to a new one - # containing the word - elif word[0] not in self.nodes: - self.nodes[word[0]] = RadixNode(prefix=word, is_leaf=True) - - else: - incoming_node = self.nodes[word[0]] - matching_string, remaining_prefix, remaining_word = incoming_node.match( - word - ) - - # Case 3: The node prefix is equal to the matching - # Solution: We insert remaining word on the next node - if remaining_prefix == "": - self.nodes[matching_string[0]].insert(remaining_word) - - # Case 4: The word is greater equal to the matching - # Solution: Create a node in between both nodes, change - # prefixes and add the new node for the remaining word - else: - incoming_node.prefix = remaining_prefix - - aux_node = self.nodes[matching_string[0]] - self.nodes[matching_string[0]] = RadixNode(matching_string, False) - self.nodes[matching_string[0]].nodes[remaining_prefix[0]] = aux_node - - if remaining_word == "": - self.nodes[matching_string[0]].is_leaf = True - else: - self.nodes[matching_string[0]].insert(remaining_word) - - def find(self, word: str) -> bool: - """Returns if the word is on the tree - - Args: - word (str): word to check - - Returns: - bool: True if the word appears on the tree - - >>> RadixNode("myprefix").find("mystring") - False - """ - incoming_node = self.nodes.get(word[0], None) - if not incoming_node: - return False - else: - matching_string, remaining_prefix, remaining_word = incoming_node.match( - word - ) - # If there is remaining prefix, the word can't be on the tree - if remaining_prefix != "": - return False - # This applies when the word and the prefix are equal - elif remaining_word == "": - return incoming_node.is_leaf - # We have word remaining so we check the next node - else: - return incoming_node.find(remaining_word) - - def delete(self, word: str) -> bool: - """Deletes a word from the tree if it exists - - Args: - word (str): word to be deleted - - Returns: - bool: True if the word was found and deleted. False if word is not found - - >>> RadixNode("myprefix").delete("mystring") - False - """ - incoming_node = self.nodes.get(word[0], None) - if not incoming_node: - return False - else: - matching_string, remaining_prefix, remaining_word = incoming_node.match( - word - ) - # If there is remaining prefix, the word can't be on the tree - if remaining_prefix != "": - return False - # We have word remaining so we check the next node - elif remaining_word != "": - return incoming_node.delete(remaining_word) - # If it is not a leaf, we don't have to delete - elif not incoming_node.is_leaf: - return False - else: - # We delete the nodes if no edges go from it - if len(incoming_node.nodes) == 0: - del self.nodes[word[0]] - # We merge the current node with its only child - if len(self.nodes) == 1 and not self.is_leaf: - merging_node = next(iter(self.nodes.values())) - self.is_leaf = merging_node.is_leaf - self.prefix += merging_node.prefix - self.nodes = merging_node.nodes - # If there is more than 1 edge, we just mark it as non-leaf - elif len(incoming_node.nodes) > 1: - incoming_node.is_leaf = False - # If there is 1 edge, we merge it with its child - else: - merging_node = next(iter(incoming_node.nodes.values())) - incoming_node.is_leaf = merging_node.is_leaf - incoming_node.prefix += merging_node.prefix - incoming_node.nodes = merging_node.nodes - - return True - - def print_tree(self, height: int = 0) -> None: - """Print the tree - - Args: - height (int, optional): Height of the printed node - """ - if self.prefix != "": - print("-" * height, self.prefix, " (leaf)" if self.is_leaf else "") - - for value in self.nodes.values(): - value.print_tree(height + 1) - - -def test_trie() -> bool: - words = "banana bananas bandana band apple all beast".split() - root = RadixNode() - root.insert_many(words) - - assert all(root.find(word) for word in words) - assert not root.find("bandanas") - assert not root.find("apps") - root.delete("all") - assert not root.find("all") - root.delete("banana") - assert not root.find("banana") - assert root.find("bananas") - - return True - - -def pytests() -> None: - assert test_trie() - - -def main() -> None: - """ - >>> pytests() - """ - root = RadixNode() - words = "banana bananas bandanas bandana band apple all beast".split() - root.insert_many(words) - - print("Words:", words) - print("Tree:") - root.print_tree() - - -if __name__ == "__main__": - main() diff --git a/data_structures/trie/trie.py b/data_structures/trie/trie.py deleted file mode 100644 index 46b93a499d14..000000000000 --- a/data_structures/trie/trie.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -A Trie/Prefix Tree is a kind of search tree used to provide quick lookup -of words/patterns in a set of words. A basic Trie however has O(n^2) space complexity -making it impractical in practice. It however provides O(max(search_string, length of -longest word)) lookup time making it an optimal approach when space is not an issue. -""" - - -class TrieNode: - def __init__(self) -> None: - self.nodes: dict[str, TrieNode] = {} # Mapping from char to TrieNode - self.is_leaf = False - - def insert_many(self, words: list[str]) -> None: - """ - Inserts a list of words into the Trie - :param words: list of string words - :return: None - """ - for word in words: - self.insert(word) - - def insert(self, word: str) -> None: - """ - Inserts a word into the Trie - :param word: word to be inserted - :return: None - """ - curr = self - for char in word: - if char not in curr.nodes: - curr.nodes[char] = TrieNode() - curr = curr.nodes[char] - curr.is_leaf = True - - def find(self, word: str) -> bool: - """ - Tries to find word in a Trie - :param word: word to look for - :return: Returns True if word is found, False otherwise - """ - curr = self - for char in word: - if char not in curr.nodes: - return False - curr = curr.nodes[char] - return curr.is_leaf - - def delete(self, word: str) -> None: - """ - Deletes a word in a Trie - :param word: word to delete - :return: None - """ - - def _delete(curr: TrieNode, word: str, index: int) -> bool: - if index == len(word): - # If word does not exist - if not curr.is_leaf: - return False - curr.is_leaf = False - return len(curr.nodes) == 0 - char = word[index] - char_node = curr.nodes.get(char) - # If char not in current trie node - if not char_node: - return False - # Flag to check if node can be deleted - delete_curr = _delete(char_node, word, index + 1) - if delete_curr: - del curr.nodes[char] - return len(curr.nodes) == 0 - return delete_curr - - _delete(self, word, 0) - - -def print_words(node: TrieNode, word: str) -> None: - """ - Prints all the words in a Trie - :param node: root node of Trie - :param word: Word variable should be empty at start - :return: None - """ - if node.is_leaf: - print(word, end=" ") - - for key, value in node.nodes.items(): - print_words(value, word + key) - - -def test_trie() -> bool: - words = "banana bananas bandana band apple all beast".split() - root = TrieNode() - root.insert_many(words) - # print_words(root, "") - assert all(root.find(word) for word in words) - assert root.find("banana") - assert not root.find("bandanas") - assert not root.find("apps") - assert root.find("apple") - assert root.find("all") - root.delete("all") - assert not root.find("all") - root.delete("banana") - assert not root.find("banana") - assert root.find("bananas") - return True - - -def print_results(msg: str, passes: bool) -> None: - print(str(msg), "works!" if passes else "doesn't work :(") - - -def pytests() -> None: - assert test_trie() - - -def main() -> None: - """ - >>> pytests() - """ - print_results("Testing trie functionality", test_trie()) - - -if __name__ == "__main__": - main() diff --git a/digital_image_processing/__init__.py b/digital_image_processing/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/change_brightness.py b/digital_image_processing/change_brightness.py deleted file mode 100644 index 97493f1a399e..000000000000 --- a/digital_image_processing/change_brightness.py +++ /dev/null @@ -1,26 +0,0 @@ -from PIL import Image - - -def change_brightness(img: Image, level: float) -> Image: - """ - Change the brightness of a PIL Image to a given level. - """ - - def brightness(c: int) -> float: - """ - Fundamental Transformation/Operation that'll be performed on - every bit. - """ - return 128 + level + (c - 128) - - if not -255.0 <= level <= 255.0: - raise ValueError("level must be between -255.0 (black) and 255.0 (white)") - return img.point(brightness) - - -if __name__ == "__main__": - # Load image - with Image.open("image_data/lena.jpg") as img: - # Change brightness to 100 - brigt_img = change_brightness(img, 100) - brigt_img.save("image_data/lena_brightness.png", format="png") diff --git a/digital_image_processing/change_contrast.py b/digital_image_processing/change_contrast.py deleted file mode 100644 index 7e49694708f8..000000000000 --- a/digital_image_processing/change_contrast.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -Changing contrast with PIL - -This algorithm is used in -https://noivce.pythonanywhere.com/ Python web app. - -psf/black: True -ruff : True -""" - -from PIL import Image - - -def change_contrast(img: Image, level: int) -> Image: - """ - Function to change contrast - """ - factor = (259 * (level + 255)) / (255 * (259 - level)) - - def contrast(c: int) -> int: - """ - Fundamental Transformation/Operation that'll be performed on - every bit. - """ - return int(128 + factor * (c - 128)) - - return img.point(contrast) - - -if __name__ == "__main__": - # Load image - with Image.open("image_data/lena.jpg") as img: - # Change contrast to 170 - cont_img = change_contrast(img, 170) - cont_img.save("image_data/lena_high_contrast.png", format="png") diff --git a/digital_image_processing/convert_to_negative.py b/digital_image_processing/convert_to_negative.py deleted file mode 100644 index 9bf2d8f2c075..000000000000 --- a/digital_image_processing/convert_to_negative.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Implemented an algorithm using opencv to convert a colored image into its negative -""" - -from cv2 import destroyAllWindows, imread, imshow, waitKey - - -def convert_to_negative(img): - # getting number of pixels in the image - pixel_h, pixel_v = img.shape[0], img.shape[1] - - # converting each pixel's color to its negative - for i in range(pixel_h): - for j in range(pixel_v): - img[i][j] = [255, 255, 255] - img[i][j] - - return img - - -if __name__ == "__main__": - # read original image - img = imread("image_data/lena.jpg", 1) - - # convert to its negative - neg = convert_to_negative(img) - - # show result image - imshow("negative of original image", img) - waitKey(0) - destroyAllWindows() diff --git a/digital_image_processing/dithering/__init__.py b/digital_image_processing/dithering/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/dithering/burkes.py b/digital_image_processing/dithering/burkes.py deleted file mode 100644 index 4b59356d8f08..000000000000 --- a/digital_image_processing/dithering/burkes.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -Implementation Burke's algorithm (dithering) -""" - -import numpy as np -from cv2 import destroyAllWindows, imread, imshow, waitKey - - -class Burkes: - """ - Burke's algorithm is using for converting grayscale image to black and white version - Source: Source: https://en.wikipedia.org/wiki/Dither - - Note: - * Best results are given with threshold= ~1/2 * max greyscale value. - * This implementation get RGB image and converts it to greyscale in runtime. - """ - - def __init__(self, input_img, threshold: int): - self.min_threshold = 0 - # max greyscale value for #FFFFFF - self.max_threshold = int(self.get_greyscale(255, 255, 255)) - - if not self.min_threshold < threshold < self.max_threshold: - msg = f"Factor value should be from 0 to {self.max_threshold}" - raise ValueError(msg) - - self.input_img = input_img - self.threshold = threshold - self.width, self.height = self.input_img.shape[1], self.input_img.shape[0] - - # error table size (+4 columns and +1 row) greater than input image because of - # lack of if statements - self.error_table = [ - [0 for _ in range(self.height + 4)] for __ in range(self.width + 1) - ] - self.output_img = np.ones((self.width, self.height, 3), np.uint8) * 255 - - @classmethod - def get_greyscale(cls, blue: int, green: int, red: int) -> float: - """ - >>> Burkes.get_greyscale(3, 4, 5) - 4.185 - >>> Burkes.get_greyscale(0, 0, 0) - 0.0 - >>> Burkes.get_greyscale(255, 255, 255) - 255.0 - """ - """ - Formula from https://en.wikipedia.org/wiki/HSL_and_HSV - cf Lightness section, and Fig 13c. - We use the first of four possible. - """ - return 0.114 * blue + 0.587 * green + 0.299 * red - - def process(self) -> None: - for y in range(self.height): - for x in range(self.width): - greyscale = int(self.get_greyscale(*self.input_img[y][x])) - if self.threshold > greyscale + self.error_table[y][x]: - self.output_img[y][x] = (0, 0, 0) - current_error = greyscale + self.error_table[y][x] - else: - self.output_img[y][x] = (255, 255, 255) - current_error = greyscale + self.error_table[y][x] - 255 - """ - Burkes error propagation (`*` is current pixel): - - * 8/32 4/32 - 2/32 4/32 8/32 4/32 2/32 - """ - self.error_table[y][x + 1] += int(8 / 32 * current_error) - self.error_table[y][x + 2] += int(4 / 32 * current_error) - self.error_table[y + 1][x] += int(8 / 32 * current_error) - self.error_table[y + 1][x + 1] += int(4 / 32 * current_error) - self.error_table[y + 1][x + 2] += int(2 / 32 * current_error) - self.error_table[y + 1][x - 1] += int(4 / 32 * current_error) - self.error_table[y + 1][x - 2] += int(2 / 32 * current_error) - - -if __name__ == "__main__": - # create Burke's instances with original images in greyscale - burkes_instances = [ - Burkes(imread("image_data/lena.jpg", 1), threshold) - for threshold in (1, 126, 130, 140) - ] - - for burkes in burkes_instances: - burkes.process() - - for burkes in burkes_instances: - imshow( - f"Original image with dithering threshold: {burkes.threshold}", - burkes.output_img, - ) - - waitKey(0) - destroyAllWindows() diff --git a/digital_image_processing/edge_detection/__init__.py b/digital_image_processing/edge_detection/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/edge_detection/canny.py b/digital_image_processing/edge_detection/canny.py deleted file mode 100644 index 944161c31cfc..000000000000 --- a/digital_image_processing/edge_detection/canny.py +++ /dev/null @@ -1,143 +0,0 @@ -import cv2 -import numpy as np - -from digital_image_processing.filters.convolve import img_convolve -from digital_image_processing.filters.sobel_filter import sobel_filter - -PI = 180 - - -def gen_gaussian_kernel(k_size, sigma): - center = k_size // 2 - x, y = np.mgrid[0 - center : k_size - center, 0 - center : k_size - center] - g = ( - 1 - / (2 * np.pi * sigma) - * np.exp(-(np.square(x) + np.square(y)) / (2 * np.square(sigma))) - ) - return g - - -def suppress_non_maximum(image_shape, gradient_direction, sobel_grad): - """ - Non-maximum suppression. If the edge strength of the current pixel is the largest - compared to the other pixels in the mask with the same direction, the value will be - preserved. Otherwise, the value will be suppressed. - """ - destination = np.zeros(image_shape) - - for row in range(1, image_shape[0] - 1): - for col in range(1, image_shape[1] - 1): - direction = gradient_direction[row, col] - - if ( - 0 <= direction < PI / 8 - or 15 * PI / 8 <= direction <= 2 * PI - or 7 * PI / 8 <= direction <= 9 * PI / 8 - ): - w = sobel_grad[row, col - 1] - e = sobel_grad[row, col + 1] - if sobel_grad[row, col] >= w and sobel_grad[row, col] >= e: - destination[row, col] = sobel_grad[row, col] - - elif ( - PI / 8 <= direction < 3 * PI / 8 - or 9 * PI / 8 <= direction < 11 * PI / 8 - ): - sw = sobel_grad[row + 1, col - 1] - ne = sobel_grad[row - 1, col + 1] - if sobel_grad[row, col] >= sw and sobel_grad[row, col] >= ne: - destination[row, col] = sobel_grad[row, col] - - elif ( - 3 * PI / 8 <= direction < 5 * PI / 8 - or 11 * PI / 8 <= direction < 13 * PI / 8 - ): - n = sobel_grad[row - 1, col] - s = sobel_grad[row + 1, col] - if sobel_grad[row, col] >= n and sobel_grad[row, col] >= s: - destination[row, col] = sobel_grad[row, col] - - elif ( - 5 * PI / 8 <= direction < 7 * PI / 8 - or 13 * PI / 8 <= direction < 15 * PI / 8 - ): - nw = sobel_grad[row - 1, col - 1] - se = sobel_grad[row + 1, col + 1] - if sobel_grad[row, col] >= nw and sobel_grad[row, col] >= se: - destination[row, col] = sobel_grad[row, col] - - return destination - - -def detect_high_low_threshold( - image_shape, destination, threshold_low, threshold_high, weak, strong -): - """ - High-Low threshold detection. If an edge pixel's gradient value is higher - than the high threshold value, it is marked as a strong edge pixel. If an - edge pixel's gradient value is smaller than the high threshold value and - larger than the low threshold value, it is marked as a weak edge pixel. If - an edge pixel's value is smaller than the low threshold value, it will be - suppressed. - """ - for row in range(1, image_shape[0] - 1): - for col in range(1, image_shape[1] - 1): - if destination[row, col] >= threshold_high: - destination[row, col] = strong - elif destination[row, col] <= threshold_low: - destination[row, col] = 0 - else: - destination[row, col] = weak - - -def track_edge(image_shape, destination, weak, strong): - """ - Edge tracking. Usually a weak edge pixel caused from true edges will be connected - to a strong edge pixel while noise responses are unconnected. As long as there is - one strong edge pixel that is involved in its 8-connected neighborhood, that weak - edge point can be identified as one that should be preserved. - """ - for row in range(1, image_shape[0]): - for col in range(1, image_shape[1]): - if destination[row, col] == weak: - if 255 in ( - destination[row, col + 1], - destination[row, col - 1], - destination[row - 1, col], - destination[row + 1, col], - destination[row - 1, col - 1], - destination[row + 1, col - 1], - destination[row - 1, col + 1], - destination[row + 1, col + 1], - ): - destination[row, col] = strong - else: - destination[row, col] = 0 - - -def canny(image, threshold_low=15, threshold_high=30, weak=128, strong=255): - # gaussian_filter - gaussian_out = img_convolve(image, gen_gaussian_kernel(9, sigma=1.4)) - # get the gradient and degree by sobel_filter - sobel_grad, sobel_theta = sobel_filter(gaussian_out) - gradient_direction = PI + np.rad2deg(sobel_theta) - - destination = suppress_non_maximum(image.shape, gradient_direction, sobel_grad) - - detect_high_low_threshold( - image.shape, destination, threshold_low, threshold_high, weak, strong - ) - - track_edge(image.shape, destination, weak, strong) - - return destination - - -if __name__ == "__main__": - # read original image in gray mode - lena = cv2.imread(r"../image_data/lena.jpg", 0) - # canny edge detection - canny_destination = canny(lena) - cv2.imshow("canny", canny_destination) - cv2.waitKey(0) diff --git a/digital_image_processing/filters/__init__.py b/digital_image_processing/filters/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/filters/bilateral_filter.py b/digital_image_processing/filters/bilateral_filter.py deleted file mode 100644 index 6ef4434d959c..000000000000 --- a/digital_image_processing/filters/bilateral_filter.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -Implementation of Bilateral filter - -Inputs: - img: A 2d image with values in between 0 and 1 - varS: variance in space dimension. - varI: variance in Intensity. - N: Kernel size(Must be an odd number) -Output: - img:A 2d zero padded image with values in between 0 and 1 -""" - -import math -import sys - -import cv2 -import numpy as np - - -def vec_gaussian(img: np.ndarray, variance: float) -> np.ndarray: - # For applying gaussian function for each element in matrix. - sigma = math.sqrt(variance) - cons = 1 / (sigma * math.sqrt(2 * math.pi)) - return cons * np.exp(-((img / sigma) ** 2) * 0.5) - - -def get_slice(img: np.ndarray, x: int, y: int, kernel_size: int) -> np.ndarray: - half = kernel_size // 2 - return img[x - half : x + half + 1, y - half : y + half + 1] - - -def get_gauss_kernel(kernel_size: int, spatial_variance: float) -> np.ndarray: - # Creates a gaussian kernel of given dimension. - arr = np.zeros((kernel_size, kernel_size)) - for i in range(kernel_size): - for j in range(kernel_size): - arr[i, j] = math.sqrt( - abs(i - kernel_size // 2) ** 2 + abs(j - kernel_size // 2) ** 2 - ) - return vec_gaussian(arr, spatial_variance) - - -def bilateral_filter( - img: np.ndarray, - spatial_variance: float, - intensity_variance: float, - kernel_size: int, -) -> np.ndarray: - img2 = np.zeros(img.shape) - gauss_ker = get_gauss_kernel(kernel_size, spatial_variance) - size_x, size_y = img.shape - for i in range(kernel_size // 2, size_x - kernel_size // 2): - for j in range(kernel_size // 2, size_y - kernel_size // 2): - img_s = get_slice(img, i, j, kernel_size) - img_i = img_s - img_s[kernel_size // 2, kernel_size // 2] - img_ig = vec_gaussian(img_i, intensity_variance) - weights = np.multiply(gauss_ker, img_ig) - vals = np.multiply(img_s, weights) - val = np.sum(vals) / np.sum(weights) - img2[i, j] = val - return img2 - - -def parse_args(args: list) -> tuple: - filename = args[1] if args[1:] else "../image_data/lena.jpg" - spatial_variance = float(args[2]) if args[2:] else 1.0 - intensity_variance = float(args[3]) if args[3:] else 1.0 - if args[4:]: - kernel_size = int(args[4]) - kernel_size = kernel_size + abs(kernel_size % 2 - 1) - else: - kernel_size = 5 - return filename, spatial_variance, intensity_variance, kernel_size - - -if __name__ == "__main__": - filename, spatial_variance, intensity_variance, kernel_size = parse_args(sys.argv) - img = cv2.imread(filename, 0) - cv2.imshow("input image", img) - - out = img / 255 - out = out.astype("float32") - out = bilateral_filter(out, spatial_variance, intensity_variance, kernel_size) - out = out * 255 - out = np.uint8(out) - cv2.imshow("output image", out) - cv2.waitKey(0) - cv2.destroyAllWindows() diff --git a/digital_image_processing/filters/convolve.py b/digital_image_processing/filters/convolve.py deleted file mode 100644 index 004402f29ba9..000000000000 --- a/digital_image_processing/filters/convolve.py +++ /dev/null @@ -1,49 +0,0 @@ -# @Author : lightXu -# @File : convolve.py -# @Time : 2019/7/8 0008 下午 16:13 -from cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey -from numpy import array, dot, pad, ravel, uint8, zeros - - -def im2col(image, block_size): - rows, cols = image.shape - dst_height = cols - block_size[1] + 1 - dst_width = rows - block_size[0] + 1 - image_array = zeros((dst_height * dst_width, block_size[1] * block_size[0])) - row = 0 - for i in range(dst_height): - for j in range(dst_width): - window = ravel(image[i : i + block_size[0], j : j + block_size[1]]) - image_array[row, :] = window - row += 1 - - return image_array - - -def img_convolve(image, filter_kernel): - height, width = image.shape[0], image.shape[1] - k_size = filter_kernel.shape[0] - pad_size = k_size // 2 - # Pads image with the edge values of array. - image_tmp = pad(image, pad_size, mode="edge") - - # im2col, turn the k_size*k_size pixels into a row and np.vstack all rows - image_array = im2col(image_tmp, (k_size, k_size)) - - # turn the kernel into shape(k*k, 1) - kernel_array = ravel(filter_kernel) - # reshape and get the dst image - dst = dot(image_array, kernel_array).reshape(height, width) - return dst - - -if __name__ == "__main__": - # read original image - img = imread(r"../image_data/lena.jpg") - # turn image in gray scale value - gray = cvtColor(img, COLOR_BGR2GRAY) - # Laplace operator - Laplace_kernel = array([[0, 1, 0], [1, -4, 1], [0, 1, 0]]) - out = img_convolve(gray, Laplace_kernel).astype(uint8) - imshow("Laplacian", out) - waitKey(0) diff --git a/digital_image_processing/filters/gabor_filter.py b/digital_image_processing/filters/gabor_filter.py deleted file mode 100644 index aaec567f4c99..000000000000 --- a/digital_image_processing/filters/gabor_filter.py +++ /dev/null @@ -1,85 +0,0 @@ -# Implementation of the Gaborfilter -# https://en.wikipedia.org/wiki/Gabor_filter -import numpy as np -from cv2 import COLOR_BGR2GRAY, CV_8UC3, cvtColor, filter2D, imread, imshow, waitKey - - -def gabor_filter_kernel( - ksize: int, sigma: int, theta: int, lambd: int, gamma: int, psi: int -) -> np.ndarray: - """ - :param ksize: The kernelsize of the convolutional filter (ksize x ksize) - :param sigma: standard deviation of the gaussian bell curve - :param theta: The orientation of the normal to the parallel stripes - of Gabor function. - :param lambd: Wavelength of the sinusoidal component. - :param gamma: The spatial aspect ratio and specifies the ellipticity - of the support of Gabor function. - :param psi: The phase offset of the sinusoidal function. - - >>> gabor_filter_kernel(3, 8, 0, 10, 0, 0).tolist() - [[0.8027212023735046, 1.0, 0.8027212023735046], [0.8027212023735046, 1.0, \ -0.8027212023735046], [0.8027212023735046, 1.0, 0.8027212023735046]] - - """ - - # prepare kernel - # the kernel size have to be odd - if (ksize % 2) == 0: - ksize = ksize + 1 - gabor = np.zeros((ksize, ksize), dtype=np.float32) - - # each value - for y in range(ksize): - for x in range(ksize): - # distance from center - px = x - ksize // 2 - py = y - ksize // 2 - - # degree to radiant - _theta = theta / 180 * np.pi - cos_theta = np.cos(_theta) - sin_theta = np.sin(_theta) - - # get kernel x - _x = cos_theta * px + sin_theta * py - - # get kernel y - _y = -sin_theta * px + cos_theta * py - - # fill kernel - gabor[y, x] = np.exp(-(_x**2 + gamma**2 * _y**2) / (2 * sigma**2)) * np.cos( - 2 * np.pi * _x / lambd + psi - ) - - return gabor - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - # read original image - img = imread("../image_data/lena.jpg") - # turn image in gray scale value - gray = cvtColor(img, COLOR_BGR2GRAY) - - # Apply multiple Kernel to detect edges - out = np.zeros(gray.shape[:2]) - for theta in [0, 30, 60, 90, 120, 150]: - """ - ksize = 10 - sigma = 8 - lambd = 10 - gamma = 0 - psi = 0 - """ - kernel_10 = gabor_filter_kernel(10, 8, theta, 10, 0, 0) - out += filter2D(gray, CV_8UC3, kernel_10) - out = out / out.max() * 255 - out = out.astype(np.uint8) - - imshow("Original", gray) - imshow("Gabor filter with 20x20 mask and 6 directions", out) - - waitKey(0) diff --git a/digital_image_processing/filters/gaussian_filter.py b/digital_image_processing/filters/gaussian_filter.py deleted file mode 100644 index 0c34e59fafe5..000000000000 --- a/digital_image_processing/filters/gaussian_filter.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Implementation of gaussian filter algorithm -""" - -from itertools import product - -from cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey -from numpy import dot, exp, mgrid, pi, ravel, square, uint8, zeros - - -def gen_gaussian_kernel(k_size, sigma): - center = k_size // 2 - x, y = mgrid[0 - center : k_size - center, 0 - center : k_size - center] - g = 1 / (2 * pi * sigma) * exp(-(square(x) + square(y)) / (2 * square(sigma))) - return g - - -def gaussian_filter(image, k_size, sigma): - height, width = image.shape[0], image.shape[1] - # dst image height and width - dst_height = height - k_size + 1 - dst_width = width - k_size + 1 - - # im2col, turn the k_size*k_size pixels into a row and np.vstack all rows - image_array = zeros((dst_height * dst_width, k_size * k_size)) - for row, (i, j) in enumerate(product(range(dst_height), range(dst_width))): - window = ravel(image[i : i + k_size, j : j + k_size]) - image_array[row, :] = window - - # turn the kernel into shape(k*k, 1) - gaussian_kernel = gen_gaussian_kernel(k_size, sigma) - filter_array = ravel(gaussian_kernel) - - # reshape and get the dst image - dst = dot(image_array, filter_array).reshape(dst_height, dst_width).astype(uint8) - - return dst - - -if __name__ == "__main__": - # read original image - img = imread(r"../image_data/lena.jpg") - # turn image in gray scale value - gray = cvtColor(img, COLOR_BGR2GRAY) - - # get values with two different mask size - gaussian3x3 = gaussian_filter(gray, 3, sigma=1) - gaussian5x5 = gaussian_filter(gray, 5, sigma=0.8) - - # show result images - imshow("gaussian filter with 3x3 mask", gaussian3x3) - imshow("gaussian filter with 5x5 mask", gaussian5x5) - waitKey() diff --git a/digital_image_processing/filters/laplacian_filter.py b/digital_image_processing/filters/laplacian_filter.py deleted file mode 100644 index 69b9616e4d30..000000000000 --- a/digital_image_processing/filters/laplacian_filter.py +++ /dev/null @@ -1,81 +0,0 @@ -# @Author : ojas-wani -# @File : laplacian_filter.py -# @Date : 10/04/2023 - -import numpy as np -from cv2 import ( - BORDER_DEFAULT, - COLOR_BGR2GRAY, - CV_64F, - cvtColor, - filter2D, - imread, - imshow, - waitKey, -) - -from digital_image_processing.filters.gaussian_filter import gaussian_filter - - -def my_laplacian(src: np.ndarray, ksize: int) -> np.ndarray: - """ - :param src: the source image, which should be a grayscale or color image. - :param ksize: the size of the kernel used to compute the Laplacian filter, - which can be 1, 3, 5, or 7. - - >>> my_laplacian(src=np.array([]), ksize=0) - Traceback (most recent call last): - ... - ValueError: ksize must be in (1, 3, 5, 7) - """ - kernels = { - 1: np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]]), - 3: np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]]), - 5: np.array( - [ - [0, 0, -1, 0, 0], - [0, -1, -2, -1, 0], - [-1, -2, 16, -2, -1], - [0, -1, -2, -1, 0], - [0, 0, -1, 0, 0], - ] - ), - 7: np.array( - [ - [0, 0, 0, -1, 0, 0, 0], - [0, 0, -2, -3, -2, 0, 0], - [0, -2, -7, -10, -7, -2, 0], - [-1, -3, -10, 68, -10, -3, -1], - [0, -2, -7, -10, -7, -2, 0], - [0, 0, -2, -3, -2, 0, 0], - [0, 0, 0, -1, 0, 0, 0], - ] - ), - } - if ksize not in kernels: - msg = f"ksize must be in {tuple(kernels)}" - raise ValueError(msg) - - # Apply the Laplacian kernel using convolution - return filter2D( - src, CV_64F, kernels[ksize], 0, borderType=BORDER_DEFAULT, anchor=(0, 0) - ) - - -if __name__ == "__main__": - # read original image - img = imread(r"../image_data/lena.jpg") - - # turn image in gray scale value - gray = cvtColor(img, COLOR_BGR2GRAY) - - # Applying gaussian filter - blur_image = gaussian_filter(gray, 3, sigma=1) - - # Apply multiple Kernel to detect edges - laplacian_image = my_laplacian(ksize=3, src=blur_image) - - imshow("Original image", img) - imshow("Detected edges using laplacian filter", laplacian_image) - - waitKey(0) diff --git a/digital_image_processing/filters/local_binary_pattern.py b/digital_image_processing/filters/local_binary_pattern.py deleted file mode 100644 index 861369ba6a32..000000000000 --- a/digital_image_processing/filters/local_binary_pattern.py +++ /dev/null @@ -1,80 +0,0 @@ -import cv2 -import numpy as np - - -def get_neighbors_pixel( - image: np.ndarray, x_coordinate: int, y_coordinate: int, center: int -) -> int: - """ - Comparing local neighborhood pixel value with threshold value of centre pixel. - Exception is required when neighborhood value of a center pixel value is null. - i.e. values present at boundaries. - - :param image: The image we're working with - :param x_coordinate: x-coordinate of the pixel - :param y_coordinate: The y coordinate of the pixel - :param center: center pixel value - :return: The value of the pixel is being returned. - """ - - try: - return int(image[x_coordinate][y_coordinate] >= center) - except (IndexError, TypeError): - return 0 - - -def local_binary_value(image: np.ndarray, x_coordinate: int, y_coordinate: int) -> int: - """ - It takes an image, an x and y coordinate, and returns the - decimal value of the local binary patternof the pixel - at that coordinate - - :param image: the image to be processed - :param x_coordinate: x coordinate of the pixel - :param y_coordinate: the y coordinate of the pixel - :return: The decimal value of the binary value of the pixels - around the center pixel. - """ - center = image[x_coordinate][y_coordinate] - powers = [1, 2, 4, 8, 16, 32, 64, 128] - - # skip get_neighbors_pixel if center is null - if center is None: - return 0 - - # Starting from the top right, assigning value to pixels clockwise - binary_values = [ - get_neighbors_pixel(image, x_coordinate - 1, y_coordinate + 1, center), - get_neighbors_pixel(image, x_coordinate, y_coordinate + 1, center), - get_neighbors_pixel(image, x_coordinate - 1, y_coordinate, center), - get_neighbors_pixel(image, x_coordinate + 1, y_coordinate + 1, center), - get_neighbors_pixel(image, x_coordinate + 1, y_coordinate, center), - get_neighbors_pixel(image, x_coordinate + 1, y_coordinate - 1, center), - get_neighbors_pixel(image, x_coordinate, y_coordinate - 1, center), - get_neighbors_pixel(image, x_coordinate - 1, y_coordinate - 1, center), - ] - - # Converting the binary value to decimal. - return sum( - binary_value * power for binary_value, power in zip(binary_values, powers) - ) - - -if __name__ == "__main__": - # Reading the image and converting it to grayscale. - image = cv2.imread( - "digital_image_processing/image_data/lena.jpg", cv2.IMREAD_GRAYSCALE - ) - - # Create a numpy array as the same height and width of read image - lbp_image = np.zeros((image.shape[0], image.shape[1])) - - # Iterating through the image and calculating the - # local binary pattern value for each pixel. - for i in range(image.shape[0]): - for j in range(image.shape[1]): - lbp_image[i][j] = local_binary_value(image, i, j) - - cv2.imshow("local binary pattern", lbp_image) - cv2.waitKey(0) - cv2.destroyAllWindows() diff --git a/digital_image_processing/filters/median_filter.py b/digital_image_processing/filters/median_filter.py deleted file mode 100644 index fc8b582ef67a..000000000000 --- a/digital_image_processing/filters/median_filter.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Implementation of median filter algorithm -""" - -from cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey -from numpy import divide, int8, multiply, ravel, sort, zeros_like - - -def median_filter(gray_img, mask=3): - """ - :param gray_img: gray image - :param mask: mask size - :return: image with median filter - """ - # set image borders - bd = int(mask / 2) - # copy image size - median_img = zeros_like(gray_img) - for i in range(bd, gray_img.shape[0] - bd): - for j in range(bd, gray_img.shape[1] - bd): - # get mask according with mask - kernel = ravel(gray_img[i - bd : i + bd + 1, j - bd : j + bd + 1]) - # calculate mask median - median = sort(kernel)[int8(divide((multiply(mask, mask)), 2) + 1)] - median_img[i, j] = median - return median_img - - -if __name__ == "__main__": - # read original image - img = imread("../image_data/lena.jpg") - # turn image in gray scale value - gray = cvtColor(img, COLOR_BGR2GRAY) - - # get values with two different mask size - median3x3 = median_filter(gray, 3) - median5x5 = median_filter(gray, 5) - - # show result images - imshow("median filter with 3x3 mask", median3x3) - imshow("median filter with 5x5 mask", median5x5) - waitKey(0) diff --git a/digital_image_processing/filters/sobel_filter.py b/digital_image_processing/filters/sobel_filter.py deleted file mode 100644 index 33284a32f424..000000000000 --- a/digital_image_processing/filters/sobel_filter.py +++ /dev/null @@ -1,39 +0,0 @@ -# @Author : lightXu -# @File : sobel_filter.py -# @Time : 2019/7/8 0008 下午 16:26 -import numpy as np -from cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey - -from digital_image_processing.filters.convolve import img_convolve - - -def sobel_filter(image): - kernel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) - kernel_y = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]]) - - dst_x = np.abs(img_convolve(image, kernel_x)) - dst_y = np.abs(img_convolve(image, kernel_y)) - # modify the pix within [0, 255] - dst_x = dst_x * 255 / np.max(dst_x) - dst_y = dst_y * 255 / np.max(dst_y) - - dst_xy = np.sqrt((np.square(dst_x)) + (np.square(dst_y))) - dst_xy = dst_xy * 255 / np.max(dst_xy) - dst = dst_xy.astype(np.uint8) - - theta = np.arctan2(dst_y, dst_x) - return dst, theta - - -if __name__ == "__main__": - # read original image - img = imread("../image_data/lena.jpg") - # turn image in gray scale value - gray = cvtColor(img, COLOR_BGR2GRAY) - - sobel_grad, sobel_theta = sobel_filter(gray) - - # show result images - imshow("sobel filter", sobel_grad) - imshow("sobel theta", sobel_theta) - waitKey(0) diff --git a/digital_image_processing/histogram_equalization/__init__.py b/digital_image_processing/histogram_equalization/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/histogram_equalization/histogram_stretch.py b/digital_image_processing/histogram_equalization/histogram_stretch.py deleted file mode 100644 index 1270c964dee6..000000000000 --- a/digital_image_processing/histogram_equalization/histogram_stretch.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -Created on Fri Sep 28 15:22:29 2018 - -@author: Binish125 -""" - -import copy -import os - -import cv2 -import numpy as np -from matplotlib import pyplot as plt - - -class ConstantStretch: - def __init__(self): - self.img = "" - self.original_image = "" - self.last_list = [] - self.rem = 0 - self.L = 256 - self.sk = 0 - self.k = 0 - self.number_of_rows = 0 - self.number_of_cols = 0 - - def stretch(self, input_image): - self.img = cv2.imread(input_image, 0) - self.original_image = copy.deepcopy(self.img) - x, _, _ = plt.hist(self.img.ravel(), 256, [0, 256], label="x") - self.k = np.sum(x) - for i in range(len(x)): - prk = x[i] / self.k - self.sk += prk - last = (self.L - 1) * self.sk - if self.rem != 0: - self.rem = int(last % last) - last = int(last + 1 if self.rem >= 0.5 else last) - self.last_list.append(last) - self.number_of_rows = int(np.ma.count(self.img) / self.img[1].size) - self.number_of_cols = self.img[1].size - for i in range(self.number_of_cols): - for j in range(self.number_of_rows): - num = self.img[j][i] - if num != self.last_list[num]: - self.img[j][i] = self.last_list[num] - cv2.imwrite("output_data/output.jpg", self.img) - - def plot_histogram(self): - plt.hist(self.img.ravel(), 256, [0, 256]) - - def show_image(self): - cv2.imshow("Output-Image", self.img) - cv2.imshow("Input-Image", self.original_image) - cv2.waitKey(5000) - cv2.destroyAllWindows() - - -if __name__ == "__main__": - file_path = os.path.join(os.path.basename(__file__), "image_data/input.jpg") - stretcher = ConstantStretch() - stretcher.stretch(file_path) - stretcher.plot_histogram() - stretcher.show_image() diff --git a/digital_image_processing/histogram_equalization/image_data/__init__.py b/digital_image_processing/histogram_equalization/image_data/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/histogram_equalization/image_data/input.jpg b/digital_image_processing/histogram_equalization/image_data/input.jpg deleted file mode 100644 index 483da6fd97f4..000000000000 Binary files a/digital_image_processing/histogram_equalization/image_data/input.jpg and /dev/null differ diff --git a/digital_image_processing/histogram_equalization/output_data/__init__.py b/digital_image_processing/histogram_equalization/output_data/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/histogram_equalization/output_data/output.jpg b/digital_image_processing/histogram_equalization/output_data/output.jpg deleted file mode 100644 index 48c70d8ae17d..000000000000 Binary files a/digital_image_processing/histogram_equalization/output_data/output.jpg and /dev/null differ diff --git a/digital_image_processing/image_data/__init__.py b/digital_image_processing/image_data/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/image_data/lena.jpg b/digital_image_processing/image_data/lena.jpg deleted file mode 100644 index 15c4d9764eff..000000000000 Binary files a/digital_image_processing/image_data/lena.jpg and /dev/null differ diff --git a/digital_image_processing/image_data/lena_small.jpg b/digital_image_processing/image_data/lena_small.jpg deleted file mode 100644 index b85144e9f65c..000000000000 Binary files a/digital_image_processing/image_data/lena_small.jpg and /dev/null differ diff --git a/digital_image_processing/index_calculation.py b/digital_image_processing/index_calculation.py deleted file mode 100644 index 988f8e72b9a8..000000000000 --- a/digital_image_processing/index_calculation.py +++ /dev/null @@ -1,575 +0,0 @@ -# Author: João Gustavo A. Amorim -# Author email: joaogustavoamorim@gmail.com -# Coding date: jan 2019 -# python/black: True - -# Imports -import numpy as np - - -# Class implemented to calculus the index -class IndexCalculation: - """ - # Class Summary - This algorithm consists in calculating vegetation indices, these - indices can be used for precision agriculture for example (or remote - sensing). There are functions to define the data and to calculate the - implemented indices. - - # Vegetation index - https://en.wikipedia.org/wiki/Vegetation_Index - A Vegetation Index (VI) is a spectral transformation of two or more bands - designed to enhance the contribution of vegetation properties and allow - reliable spatial and temporal inter-comparisons of terrestrial - photosynthetic activity and canopy structural variations - - # Information about channels (Wavelength range for each) - * nir - near-infrared - https://www.malvernpanalytical.com/br/products/technology/near-infrared-spectroscopy - Wavelength Range 700 nm to 2500 nm - * Red Edge - https://en.wikipedia.org/wiki/Red_edge - Wavelength Range 680 nm to 730 nm - * red - https://en.wikipedia.org/wiki/Color - Wavelength Range 635 nm to 700 nm - * blue - https://en.wikipedia.org/wiki/Color - Wavelength Range 450 nm to 490 nm - * green - https://en.wikipedia.org/wiki/Color - Wavelength Range 520 nm to 560 nm - - - # Implemented index list - #"abbreviationOfIndexName" -- list of channels used - - #"ARVI2" -- red, nir - #"CCCI" -- red, redEdge, nir - #"CVI" -- red, green, nir - #"GLI" -- red, green, blue - #"NDVI" -- red, nir - #"BNDVI" -- blue, nir - #"redEdgeNDVI" -- red, redEdge - #"GNDVI" -- green, nir - #"GBNDVI" -- green, blue, nir - #"GRNDVI" -- red, green, nir - #"RBNDVI" -- red, blue, nir - #"PNDVI" -- red, green, blue, nir - #"ATSAVI" -- red, nir - #"BWDRVI" -- blue, nir - #"CIgreen" -- green, nir - #"CIrededge" -- redEdge, nir - #"CI" -- red, blue - #"CTVI" -- red, nir - #"GDVI" -- green, nir - #"EVI" -- red, blue, nir - #"GEMI" -- red, nir - #"GOSAVI" -- green, nir - #"GSAVI" -- green, nir - #"Hue" -- red, green, blue - #"IVI" -- red, nir - #"IPVI" -- red, nir - #"I" -- red, green, blue - #"RVI" -- red, nir - #"MRVI" -- red, nir - #"MSAVI" -- red, nir - #"NormG" -- red, green, nir - #"NormNIR" -- red, green, nir - #"NormR" -- red, green, nir - #"NGRDI" -- red, green - #"RI" -- red, green - #"S" -- red, green, blue - #"IF" -- red, green, blue - #"DVI" -- red, nir - #"TVI" -- red, nir - #"NDRE" -- redEdge, nir - - #list of all index implemented - #allIndex = ["ARVI2", "CCCI", "CVI", "GLI", "NDVI", "BNDVI", "redEdgeNDVI", - "GNDVI", "GBNDVI", "GRNDVI", "RBNDVI", "PNDVI", "ATSAVI", - "BWDRVI", "CIgreen", "CIrededge", "CI", "CTVI", "GDVI", "EVI", - "GEMI", "GOSAVI", "GSAVI", "Hue", "IVI", "IPVI", "I", "RVI", - "MRVI", "MSAVI", "NormG", "NormNIR", "NormR", "NGRDI", "RI", - "S", "IF", "DVI", "TVI", "NDRE"] - - #list of index with not blue channel - #notBlueIndex = ["ARVI2", "CCCI", "CVI", "NDVI", "redEdgeNDVI", "GNDVI", - "GRNDVI", "ATSAVI", "CIgreen", "CIrededge", "CTVI", "GDVI", - "GEMI", "GOSAVI", "GSAVI", "IVI", "IPVI", "RVI", "MRVI", - "MSAVI", "NormG", "NormNIR", "NormR", "NGRDI", "RI", "DVI", - "TVI", "NDRE"] - - #list of index just with RGB channels - #RGBIndex = ["GLI", "CI", "Hue", "I", "NGRDI", "RI", "S", "IF"] - """ - - def __init__(self, red=None, green=None, blue=None, red_edge=None, nir=None): - self.set_matricies(red=red, green=green, blue=blue, red_edge=red_edge, nir=nir) - - def set_matricies(self, red=None, green=None, blue=None, red_edge=None, nir=None): - if red is not None: - self.red = red - if green is not None: - self.green = green - if blue is not None: - self.blue = blue - if red_edge is not None: - self.redEdge = red_edge - if nir is not None: - self.nir = nir - return True - - def calculation( - self, index="", red=None, green=None, blue=None, red_edge=None, nir=None - ): - """ - performs the calculation of the index with the values instantiated in the class - :str index: abbreviation of index name to perform - """ - self.set_matricies(red=red, green=green, blue=blue, red_edge=red_edge, nir=nir) - funcs = { - "ARVI2": self.arv12, - "CCCI": self.ccci, - "CVI": self.cvi, - "GLI": self.gli, - "NDVI": self.ndvi, - "BNDVI": self.bndvi, - "redEdgeNDVI": self.red_edge_ndvi, - "GNDVI": self.gndvi, - "GBNDVI": self.gbndvi, - "GRNDVI": self.grndvi, - "RBNDVI": self.rbndvi, - "PNDVI": self.pndvi, - "ATSAVI": self.atsavi, - "BWDRVI": self.bwdrvi, - "CIgreen": self.ci_green, - "CIrededge": self.ci_rededge, - "CI": self.ci, - "CTVI": self.ctvi, - "GDVI": self.gdvi, - "EVI": self.evi, - "GEMI": self.gemi, - "GOSAVI": self.gosavi, - "GSAVI": self.gsavi, - "Hue": self.hue, - "IVI": self.ivi, - "IPVI": self.ipvi, - "I": self.i, - "RVI": self.rvi, - "MRVI": self.mrvi, - "MSAVI": self.m_savi, - "NormG": self.norm_g, - "NormNIR": self.norm_nir, - "NormR": self.norm_r, - "NGRDI": self.ngrdi, - "RI": self.ri, - "S": self.s, - "IF": self._if, - "DVI": self.dvi, - "TVI": self.tvi, - "NDRE": self.ndre, - } - - try: - return funcs[index]() - except KeyError: - print("Index not in the list!") - return False - - def arv12(self): - """ - Atmospherically Resistant Vegetation Index 2 - https://www.indexdatabase.de/db/i-single.php?id=396 - :return: index - -0.18+1.17*(self.nir-self.red)/(self.nir+self.red) - """ - return -0.18 + (1.17 * ((self.nir - self.red) / (self.nir + self.red))) - - def ccci(self): - """ - Canopy Chlorophyll Content Index - https://www.indexdatabase.de/db/i-single.php?id=224 - :return: index - """ - return ((self.nir - self.redEdge) / (self.nir + self.redEdge)) / ( - (self.nir - self.red) / (self.nir + self.red) - ) - - def cvi(self): - """ - Chlorophyll vegetation index - https://www.indexdatabase.de/db/i-single.php?id=391 - :return: index - """ - return self.nir * (self.red / (self.green**2)) - - def gli(self): - """ - self.green leaf index - https://www.indexdatabase.de/db/i-single.php?id=375 - :return: index - """ - return (2 * self.green - self.red - self.blue) / ( - 2 * self.green + self.red + self.blue - ) - - def ndvi(self): - """ - Normalized Difference self.nir/self.red Normalized Difference Vegetation - Index, Calibrated NDVI - CDVI - https://www.indexdatabase.de/db/i-single.php?id=58 - :return: index - """ - return (self.nir - self.red) / (self.nir + self.red) - - def bndvi(self): - """ - Normalized Difference self.nir/self.blue self.blue-normalized difference - vegetation index - https://www.indexdatabase.de/db/i-single.php?id=135 - :return: index - """ - return (self.nir - self.blue) / (self.nir + self.blue) - - def red_edge_ndvi(self): - """ - Normalized Difference self.rededge/self.red - https://www.indexdatabase.de/db/i-single.php?id=235 - :return: index - """ - return (self.redEdge - self.red) / (self.redEdge + self.red) - - def gndvi(self): - """ - Normalized Difference self.nir/self.green self.green NDVI - https://www.indexdatabase.de/db/i-single.php?id=401 - :return: index - """ - return (self.nir - self.green) / (self.nir + self.green) - - def gbndvi(self): - """ - self.green-self.blue NDVI - https://www.indexdatabase.de/db/i-single.php?id=186 - :return: index - """ - return (self.nir - (self.green + self.blue)) / ( - self.nir + (self.green + self.blue) - ) - - def grndvi(self): - """ - self.green-self.red NDVI - https://www.indexdatabase.de/db/i-single.php?id=185 - :return: index - """ - return (self.nir - (self.green + self.red)) / ( - self.nir + (self.green + self.red) - ) - - def rbndvi(self): - """ - self.red-self.blue NDVI - https://www.indexdatabase.de/db/i-single.php?id=187 - :return: index - """ - return (self.nir - (self.blue + self.red)) / (self.nir + (self.blue + self.red)) - - def pndvi(self): - """ - Pan NDVI - https://www.indexdatabase.de/db/i-single.php?id=188 - :return: index - """ - return (self.nir - (self.green + self.red + self.blue)) / ( - self.nir + (self.green + self.red + self.blue) - ) - - def atsavi(self, x=0.08, a=1.22, b=0.03): - """ - Adjusted transformed soil-adjusted VI - https://www.indexdatabase.de/db/i-single.php?id=209 - :return: index - """ - return a * ( - (self.nir - a * self.red - b) - / (a * self.nir + self.red - a * b + x * (1 + a**2)) - ) - - def bwdrvi(self): - """ - self.blue-wide dynamic range vegetation index - https://www.indexdatabase.de/db/i-single.php?id=136 - :return: index - """ - return (0.1 * self.nir - self.blue) / (0.1 * self.nir + self.blue) - - def ci_green(self): - """ - Chlorophyll Index self.green - https://www.indexdatabase.de/db/i-single.php?id=128 - :return: index - """ - return (self.nir / self.green) - 1 - - def ci_rededge(self): - """ - Chlorophyll Index self.redEdge - https://www.indexdatabase.de/db/i-single.php?id=131 - :return: index - """ - return (self.nir / self.redEdge) - 1 - - def ci(self): - """ - Coloration Index - https://www.indexdatabase.de/db/i-single.php?id=11 - :return: index - """ - return (self.red - self.blue) / self.red - - def ctvi(self): - """ - Corrected Transformed Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=244 - :return: index - """ - ndvi = self.ndvi() - return ((ndvi + 0.5) / (abs(ndvi + 0.5))) * (abs(ndvi + 0.5) ** (1 / 2)) - - def gdvi(self): - """ - Difference self.nir/self.green self.green Difference Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=27 - :return: index - """ - return self.nir - self.green - - def evi(self): - """ - Enhanced Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=16 - :return: index - """ - return 2.5 * ( - (self.nir - self.red) / (self.nir + 6 * self.red - 7.5 * self.blue + 1) - ) - - def gemi(self): - """ - Global Environment Monitoring Index - https://www.indexdatabase.de/db/i-single.php?id=25 - :return: index - """ - n = (2 * (self.nir**2 - self.red**2) + 1.5 * self.nir + 0.5 * self.red) / ( - self.nir + self.red + 0.5 - ) - return n * (1 - 0.25 * n) - (self.red - 0.125) / (1 - self.red) - - def gosavi(self, y=0.16): - """ - self.green Optimized Soil Adjusted Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=29 - mit Y = 0,16 - :return: index - """ - return (self.nir - self.green) / (self.nir + self.green + y) - - def gsavi(self, n=0.5): - """ - self.green Soil Adjusted Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=31 - mit N = 0,5 - :return: index - """ - return ((self.nir - self.green) / (self.nir + self.green + n)) * (1 + n) - - def hue(self): - """ - Hue - https://www.indexdatabase.de/db/i-single.php?id=34 - :return: index - """ - return np.arctan( - ((2 * self.red - self.green - self.blue) / 30.5) * (self.green - self.blue) - ) - - def ivi(self, a=None, b=None): - """ - Ideal vegetation index - https://www.indexdatabase.de/db/i-single.php?id=276 - b=intercept of vegetation line - a=soil line slope - :return: index - """ - return (self.nir - b) / (a * self.red) - - def ipvi(self): - """ - Infraself.red percentage vegetation index - https://www.indexdatabase.de/db/i-single.php?id=35 - :return: index - """ - return (self.nir / ((self.nir + self.red) / 2)) * (self.ndvi() + 1) - - def i(self): - """ - Intensity - https://www.indexdatabase.de/db/i-single.php?id=36 - :return: index - """ - return (self.red + self.green + self.blue) / 30.5 - - def rvi(self): - """ - Ratio-Vegetation-Index - http://www.seos-project.eu/modules/remotesensing/remotesensing-c03-s01-p01.html - :return: index - """ - return self.nir / self.red - - def mrvi(self): - """ - Modified Normalized Difference Vegetation Index RVI - https://www.indexdatabase.de/db/i-single.php?id=275 - :return: index - """ - return (self.rvi() - 1) / (self.rvi() + 1) - - def m_savi(self): - """ - Modified Soil Adjusted Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=44 - :return: index - """ - return ( - (2 * self.nir + 1) - - ((2 * self.nir + 1) ** 2 - 8 * (self.nir - self.red)) ** (1 / 2) - ) / 2 - - def norm_g(self): - """ - Norm G - https://www.indexdatabase.de/db/i-single.php?id=50 - :return: index - """ - return self.green / (self.nir + self.red + self.green) - - def norm_nir(self): - """ - Norm self.nir - https://www.indexdatabase.de/db/i-single.php?id=51 - :return: index - """ - return self.nir / (self.nir + self.red + self.green) - - def norm_r(self): - """ - Norm R - https://www.indexdatabase.de/db/i-single.php?id=52 - :return: index - """ - return self.red / (self.nir + self.red + self.green) - - def ngrdi(self): - """ - Normalized Difference self.green/self.red Normalized self.green self.red - difference index, Visible Atmospherically Resistant Indices self.green - (VIself.green) - https://www.indexdatabase.de/db/i-single.php?id=390 - :return: index - """ - return (self.green - self.red) / (self.green + self.red) - - def ri(self): - """ - Normalized Difference self.red/self.green self.redness Index - https://www.indexdatabase.de/db/i-single.php?id=74 - :return: index - """ - return (self.red - self.green) / (self.red + self.green) - - def s(self): - """ - Saturation - https://www.indexdatabase.de/db/i-single.php?id=77 - :return: index - """ - max_value = np.max([np.max(self.red), np.max(self.green), np.max(self.blue)]) - min_value = np.min([np.min(self.red), np.min(self.green), np.min(self.blue)]) - return (max_value - min_value) / max_value - - def _if(self): - """ - Shape Index - https://www.indexdatabase.de/db/i-single.php?id=79 - :return: index - """ - return (2 * self.red - self.green - self.blue) / (self.green - self.blue) - - def dvi(self): - """ - Simple Ratio self.nir/self.red Difference Vegetation Index, Vegetation Index - Number (VIN) - https://www.indexdatabase.de/db/i-single.php?id=12 - :return: index - """ - return self.nir / self.red - - def tvi(self): - """ - Transformed Vegetation Index - https://www.indexdatabase.de/db/i-single.php?id=98 - :return: index - """ - return (self.ndvi() + 0.5) ** (1 / 2) - - def ndre(self): - return (self.nir - self.redEdge) / (self.nir + self.redEdge) - - -""" -# genering a random matrices to test this class -red = np.ones((1000,1000, 1),dtype="float64") * 46787 -green = np.ones((1000,1000, 1),dtype="float64") * 23487 -blue = np.ones((1000,1000, 1),dtype="float64") * 14578 -redEdge = np.ones((1000,1000, 1),dtype="float64") * 51045 -nir = np.ones((1000,1000, 1),dtype="float64") * 52200 - -# Examples of how to use the class - -# instantiating the class -cl = IndexCalculation() - -# instantiating the class with the values -#cl = indexCalculation(red=red, green=green, blue=blue, redEdge=redEdge, nir=nir) - -# how set the values after instantiate the class cl, (for update the data or when don't -# instantiating the class with the values) -cl.setMatrices(red=red, green=green, blue=blue, redEdge=redEdge, nir=nir) - -# calculating the indices for the instantiated values in the class - # Note: the CCCI index can be changed to any index implemented in the class. -indexValue_form1 = cl.calculation("CCCI", red=red, green=green, blue=blue, - redEdge=redEdge, nir=nir).astype(np.float64) -indexValue_form2 = cl.CCCI() - -# calculating the index with the values directly -- you can set just the values -# preferred note: the *calculation* function performs the function *setMatrices* -indexValue_form3 = cl.calculation("CCCI", red=red, green=green, blue=blue, - redEdge=redEdge, nir=nir).astype(np.float64) - -print("Form 1: "+np.array2string(indexValue_form1, precision=20, separator=', ', - floatmode='maxprec_equal')) -print("Form 2: "+np.array2string(indexValue_form2, precision=20, separator=', ', - floatmode='maxprec_equal')) -print("Form 3: "+np.array2string(indexValue_form3, precision=20, separator=', ', - floatmode='maxprec_equal')) - -# A list of examples results for different type of data at NDVI -# float16 -> 0.31567383 #NDVI (red = 50, nir = 100) -# float32 -> 0.31578946 #NDVI (red = 50, nir = 100) -# float64 -> 0.3157894736842105 #NDVI (red = 50, nir = 100) -# longdouble -> 0.3157894736842105 #NDVI (red = 50, nir = 100) -""" diff --git a/digital_image_processing/morphological_operations/__init__.py b/digital_image_processing/morphological_operations/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/morphological_operations/dilation_operation.py b/digital_image_processing/morphological_operations/dilation_operation.py deleted file mode 100644 index e49b955c1480..000000000000 --- a/digital_image_processing/morphological_operations/dilation_operation.py +++ /dev/null @@ -1,75 +0,0 @@ -from pathlib import Path - -import numpy as np -from PIL import Image - - -def rgb_to_gray(rgb: np.ndarray) -> np.ndarray: - """ - Return gray image from rgb image - >>> rgb_to_gray(np.array([[[127, 255, 0]]])) - array([[187.6453]]) - >>> rgb_to_gray(np.array([[[0, 0, 0]]])) - array([[0.]]) - >>> rgb_to_gray(np.array([[[2, 4, 1]]])) - array([[3.0598]]) - >>> rgb_to_gray(np.array([[[26, 255, 14], [5, 147, 20], [1, 200, 0]]])) - array([[159.0524, 90.0635, 117.6989]]) - """ - r, g, b = rgb[:, :, 0], rgb[:, :, 1], rgb[:, :, 2] - return 0.2989 * r + 0.5870 * g + 0.1140 * b - - -def gray_to_binary(gray: np.ndarray) -> np.ndarray: - """ - Return binary image from gray image - >>> gray_to_binary(np.array([[127, 255, 0]])) - array([[False, True, False]]) - >>> gray_to_binary(np.array([[0]])) - array([[False]]) - >>> gray_to_binary(np.array([[26.2409, 4.9315, 1.4729]])) - array([[False, False, False]]) - >>> gray_to_binary(np.array([[26, 255, 14], [5, 147, 20], [1, 200, 0]])) - array([[False, True, False], - [False, True, False], - [False, True, False]]) - """ - return (gray > 127) & (gray <= 255) - - -def dilation(image: np.ndarray, kernel: np.ndarray) -> np.ndarray: - """ - Return dilated image - >>> dilation(np.array([[True, False, True]]), np.array([[0, 1, 0]])) - array([[False, False, False]]) - >>> dilation(np.array([[False, False, True]]), np.array([[1, 0, 1]])) - array([[False, False, False]]) - """ - output = np.zeros_like(image) - image_padded = np.zeros( - (image.shape[0] + kernel.shape[0] - 1, image.shape[1] + kernel.shape[1] - 1) - ) - - # Copy image to padded image - image_padded[kernel.shape[0] - 2 : -1 :, kernel.shape[1] - 2 : -1 :] = image - - # Iterate over image & apply kernel - for x in range(image.shape[1]): - for y in range(image.shape[0]): - summation = ( - kernel * image_padded[y : y + kernel.shape[0], x : x + kernel.shape[1]] - ).sum() - output[y, x] = int(summation > 0) - return output - - -if __name__ == "__main__": - # read original image - lena_path = Path(__file__).resolve().parent / "image_data" / "lena.jpg" - lena = np.array(Image.open(lena_path)) - # kernel to be applied - structuring_element = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]]) - output = dilation(gray_to_binary(rgb_to_gray(lena)), structuring_element) - # Save the output image - pil_img = Image.fromarray(output).convert("RGB") - pil_img.save("result_dilation.png") diff --git a/digital_image_processing/morphological_operations/erosion_operation.py b/digital_image_processing/morphological_operations/erosion_operation.py deleted file mode 100644 index 53001da83468..000000000000 --- a/digital_image_processing/morphological_operations/erosion_operation.py +++ /dev/null @@ -1,82 +0,0 @@ -from pathlib import Path - -import numpy as np -from PIL import Image - - -def rgb_to_gray(rgb: np.ndarray) -> np.ndarray: - """ - Return gray image from rgb image - - >>> rgb_to_gray(np.array([[[127, 255, 0]]])) - array([[187.6453]]) - >>> rgb_to_gray(np.array([[[0, 0, 0]]])) - array([[0.]]) - >>> rgb_to_gray(np.array([[[2, 4, 1]]])) - array([[3.0598]]) - >>> rgb_to_gray(np.array([[[26, 255, 14], [5, 147, 20], [1, 200, 0]]])) - array([[159.0524, 90.0635, 117.6989]]) - """ - r, g, b = rgb[:, :, 0], rgb[:, :, 1], rgb[:, :, 2] - return 0.2989 * r + 0.5870 * g + 0.1140 * b - - -def gray_to_binary(gray: np.ndarray) -> np.ndarray: - """ - Return binary image from gray image - - >>> gray_to_binary(np.array([[127, 255, 0]])) - array([[False, True, False]]) - >>> gray_to_binary(np.array([[0]])) - array([[False]]) - >>> gray_to_binary(np.array([[26.2409, 4.9315, 1.4729]])) - array([[False, False, False]]) - >>> gray_to_binary(np.array([[26, 255, 14], [5, 147, 20], [1, 200, 0]])) - array([[False, True, False], - [False, True, False], - [False, True, False]]) - """ - return (gray > 127) & (gray <= 255) - - -def erosion(image: np.ndarray, kernel: np.ndarray) -> np.ndarray: - """ - Return eroded image - - >>> erosion(np.array([[True, True, False]]), np.array([[0, 1, 0]])) - array([[False, False, False]]) - >>> erosion(np.array([[True, False, False]]), np.array([[1, 1, 0]])) - array([[False, False, False]]) - """ - output = np.zeros_like(image) - image_padded = np.zeros( - (image.shape[0] + kernel.shape[0] - 1, image.shape[1] + kernel.shape[1] - 1) - ) - - # Copy image to padded image - image_padded[kernel.shape[0] - 2 : -1 :, kernel.shape[1] - 2 : -1 :] = image - - # Iterate over image & apply kernel - for x in range(image.shape[1]): - for y in range(image.shape[0]): - summation = ( - kernel * image_padded[y : y + kernel.shape[0], x : x + kernel.shape[1]] - ).sum() - output[y, x] = int(summation == 5) - return output - - -if __name__ == "__main__": - # read original image - lena_path = Path(__file__).resolve().parent / "image_data" / "lena.jpg" - lena = np.array(Image.open(lena_path)) - - # kernel to be applied - structuring_element = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]]) - - # Apply erosion operation to a binary image - output = erosion(gray_to_binary(rgb_to_gray(lena)), structuring_element) - - # Save the output image - pil_img = Image.fromarray(output).convert("RGB") - pil_img.save("result_erosion.png") diff --git a/digital_image_processing/resize/__init__.py b/digital_image_processing/resize/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/resize/resize.py b/digital_image_processing/resize/resize.py deleted file mode 100644 index 7bde118da69b..000000000000 --- a/digital_image_processing/resize/resize.py +++ /dev/null @@ -1,72 +0,0 @@ -"""Multiple image resizing techniques""" - -import numpy as np -from cv2 import destroyAllWindows, imread, imshow, waitKey - - -class NearestNeighbour: - """ - Simplest and fastest version of image resizing. - Source: https://en.wikipedia.org/wiki/Nearest-neighbor_interpolation - """ - - def __init__(self, img, dst_width: int, dst_height: int): - if dst_width < 0 or dst_height < 0: - raise ValueError("Destination width/height should be > 0") - - self.img = img - self.src_w = img.shape[1] - self.src_h = img.shape[0] - self.dst_w = dst_width - self.dst_h = dst_height - - self.ratio_x = self.src_w / self.dst_w - self.ratio_y = self.src_h / self.dst_h - - self.output = self.output_img = ( - np.ones((self.dst_h, self.dst_w, 3), np.uint8) * 255 - ) - - def process(self): - for i in range(self.dst_h): - for j in range(self.dst_w): - self.output[i][j] = self.img[self.get_y(i)][self.get_x(j)] - - def get_x(self, x: int) -> int: - """ - Get parent X coordinate for destination X - :param x: Destination X coordinate - :return: Parent X coordinate based on `x ratio` - >>> nn = NearestNeighbour(imread("digital_image_processing/image_data/lena.jpg", - ... 1), 100, 100) - >>> nn.ratio_x = 0.5 - >>> nn.get_x(4) - 2 - """ - return int(self.ratio_x * x) - - def get_y(self, y: int) -> int: - """ - Get parent Y coordinate for destination Y - :param y: Destination X coordinate - :return: Parent X coordinate based on `y ratio` - >>> nn = NearestNeighbour(imread("digital_image_processing/image_data/lena.jpg", - ... 1), 100, 100) - >>> nn.ratio_y = 0.5 - >>> nn.get_y(4) - 2 - """ - return int(self.ratio_y * y) - - -if __name__ == "__main__": - dst_w, dst_h = 800, 600 - im = imread("image_data/lena.jpg", 1) - n = NearestNeighbour(im, dst_w, dst_h) - n.process() - - imshow( - f"Image resized from: {im.shape[1]}x{im.shape[0]} to {dst_w}x{dst_h}", n.output - ) - waitKey(0) - destroyAllWindows() diff --git a/digital_image_processing/rotation/__init__.py b/digital_image_processing/rotation/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/digital_image_processing/rotation/rotation.py b/digital_image_processing/rotation/rotation.py deleted file mode 100644 index 0f5e36ddd5be..000000000000 --- a/digital_image_processing/rotation/rotation.py +++ /dev/null @@ -1,56 +0,0 @@ -from pathlib import Path - -import cv2 -import numpy as np -from matplotlib import pyplot as plt - - -def get_rotation( - img: np.ndarray, pt1: np.ndarray, pt2: np.ndarray, rows: int, cols: int -) -> np.ndarray: - """ - Get image rotation - :param img: np.ndarray - :param pt1: 3x2 list - :param pt2: 3x2 list - :param rows: columns image shape - :param cols: rows image shape - :return: np.ndarray - """ - matrix = cv2.getAffineTransform(pt1, pt2) - return cv2.warpAffine(img, matrix, (rows, cols)) - - -if __name__ == "__main__": - # read original image - image = cv2.imread( - str(Path(__file__).resolve().parent.parent / "image_data" / "lena.jpg") - ) - # turn image in gray scale value - gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) - # get image shape - img_rows, img_cols = gray_img.shape - - # set different points to rotate image - pts1 = np.array([[50, 50], [200, 50], [50, 200]], np.float32) - pts2 = np.array([[10, 100], [200, 50], [100, 250]], np.float32) - pts3 = np.array([[50, 50], [150, 50], [120, 200]], np.float32) - pts4 = np.array([[10, 100], [80, 50], [180, 250]], np.float32) - - # add all rotated images in a list - images = [ - gray_img, - get_rotation(gray_img, pts1, pts2, img_rows, img_cols), - get_rotation(gray_img, pts2, pts3, img_rows, img_cols), - get_rotation(gray_img, pts2, pts4, img_rows, img_cols), - ] - - # plot different image rotations - fig = plt.figure(1) - titles = ["Original", "Rotation 1", "Rotation 2", "Rotation 3"] - for i, image in enumerate(images): - plt.subplot(2, 2, i + 1), plt.imshow(image, "gray") - plt.title(titles[i]) - plt.axis("off") - plt.subplots_adjust(left=0.0, bottom=0.05, right=1.0, top=0.95) - plt.show() diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py deleted file mode 100644 index 1924a80451e5..000000000000 --- a/digital_image_processing/sepia.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -Implemented an algorithm using opencv to tone an image with sepia technique -""" - -from cv2 import destroyAllWindows, imread, imshow, waitKey - - -def make_sepia(img, factor: int): - """ - Function create sepia tone. - Source: https://en.wikipedia.org/wiki/Sepia_(color) - """ - pixel_h, pixel_v = img.shape[0], img.shape[1] - - def to_grayscale(blue, green, red): - """ - Helper function to create pixel's greyscale representation - Src: https://pl.wikipedia.org/wiki/YUV - """ - return 0.2126 * red + 0.587 * green + 0.114 * blue - - def normalize(value): - """Helper function to normalize R/G/B value -> return 255 if value > 255""" - return min(value, 255) - - for i in range(pixel_h): - for j in range(pixel_v): - greyscale = int(to_grayscale(*img[i][j])) - img[i][j] = [ - normalize(greyscale), - normalize(greyscale + factor), - normalize(greyscale + 2 * factor), - ] - - return img - - -if __name__ == "__main__": - # read original image - images = { - percentage: imread("image_data/lena.jpg", 1) for percentage in (10, 20, 30, 40) - } - - for percentage, img in images.items(): - make_sepia(img, percentage) - - for percentage, img in images.items(): - imshow(f"Original image with sepia (factor: {percentage})", img) - - waitKey(0) - destroyAllWindows() diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py deleted file mode 100644 index d1200f4d65ca..000000000000 --- a/digital_image_processing/test_digital_image_processing.py +++ /dev/null @@ -1,134 +0,0 @@ -""" -PyTest's for Digital Image Processing -""" - -import numpy as np -from cv2 import COLOR_BGR2GRAY, cvtColor, imread -from numpy import array, uint8 -from PIL import Image - -from digital_image_processing import change_contrast as cc -from digital_image_processing import convert_to_negative as cn -from digital_image_processing import sepia as sp -from digital_image_processing.dithering import burkes as bs -from digital_image_processing.edge_detection import canny -from digital_image_processing.filters import convolve as conv -from digital_image_processing.filters import gaussian_filter as gg -from digital_image_processing.filters import local_binary_pattern as lbp -from digital_image_processing.filters import median_filter as med -from digital_image_processing.filters import sobel_filter as sob -from digital_image_processing.resize import resize as rs - -img = imread(r"digital_image_processing/image_data/lena_small.jpg") -gray = cvtColor(img, COLOR_BGR2GRAY) - - -# Test: convert_to_negative() -def test_convert_to_negative(): - negative_img = cn.convert_to_negative(img) - # assert negative_img array for at least one True - assert negative_img.any() - - -# Test: change_contrast() -def test_change_contrast(): - with Image.open("digital_image_processing/image_data/lena_small.jpg") as img: - # Work around assertion for response - assert str(cc.change_contrast(img, 110)).startswith( - "<PIL.Image.Image image mode=RGB size=100x100 at" - ) - - -# canny.gen_gaussian_kernel() -def test_gen_gaussian_kernel(): - resp = canny.gen_gaussian_kernel(9, sigma=1.4) - # Assert ambiguous array - assert resp.all() - - -# canny.py -def test_canny(): - canny_img = imread("digital_image_processing/image_data/lena_small.jpg", 0) - # assert ambiguous array for all == True - assert canny_img.all() - canny_array = canny.canny(canny_img) - # assert canny array for at least one True - assert canny_array.any() - - -# filters/gaussian_filter.py -def test_gen_gaussian_kernel_filter(): - assert gg.gaussian_filter(gray, 5, sigma=0.9).all() - - -def test_convolve_filter(): - # laplace diagonals - laplace = array([[0.25, 0.5, 0.25], [0.5, -3, 0.5], [0.25, 0.5, 0.25]]) - res = conv.img_convolve(gray, laplace).astype(uint8) - assert res.any() - - -def test_median_filter(): - assert med.median_filter(gray, 3).any() - - -def test_sobel_filter(): - grad, theta = sob.sobel_filter(gray) - assert grad.any() - assert theta.any() - - -def test_sepia(): - sepia = sp.make_sepia(img, 20) - assert sepia.all() - - -def test_burkes(file_path: str = "digital_image_processing/image_data/lena_small.jpg"): - burkes = bs.Burkes(imread(file_path, 1), 120) - burkes.process() - assert burkes.output_img.any() - - -def test_nearest_neighbour( - file_path: str = "digital_image_processing/image_data/lena_small.jpg", -): - nn = rs.NearestNeighbour(imread(file_path, 1), 400, 200) - nn.process() - assert nn.output.any() - - -def test_local_binary_pattern(): - # pull request 10161 before: - # "digital_image_processing/image_data/lena.jpg" - # after: "digital_image_processing/image_data/lena_small.jpg" - - from os import getenv # Speed up our Continuous Integration tests - - file_name = "lena_small.jpg" if getenv("CI") else "lena.jpg" - file_path = f"digital_image_processing/image_data/{file_name}" - - # Reading the image and converting it to grayscale - image = imread(file_path, 0) - - # Test for get_neighbors_pixel function() return not None - x_coordinate = 0 - y_coordinate = 0 - center = image[x_coordinate][y_coordinate] - - neighbors_pixels = lbp.get_neighbors_pixel( - image, x_coordinate, y_coordinate, center - ) - - assert neighbors_pixels is not None - - # Test for local_binary_pattern function() - # Create a numpy array as the same height and width of read image - lbp_image = np.zeros((image.shape[0], image.shape[1])) - - # Iterating through the image and calculating the local binary pattern value - # for each pixel. - for i in range(image.shape[0]): - for j in range(image.shape[1]): - lbp_image[i][j] = lbp.local_binary_value(image, i, j) - - assert lbp_image.any() diff --git a/divide_and_conquer/__init__.py b/divide_and_conquer/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/divide_and_conquer/closest_pair_of_points.py b/divide_and_conquer/closest_pair_of_points.py deleted file mode 100644 index 534cbba9b718..000000000000 --- a/divide_and_conquer/closest_pair_of_points.py +++ /dev/null @@ -1,141 +0,0 @@ -""" -The algorithm finds distance between closest pair of points -in the given n points. -Approach used -> Divide and conquer -The points are sorted based on Xco-ords and -then based on Yco-ords separately. -And by applying divide and conquer approach, -minimum distance is obtained recursively. - ->> Closest points can lie on different sides of partition. -This case handled by forming a strip of points -whose Xco-ords distance is less than closest_pair_dis -from mid-point's Xco-ords. Points sorted based on Yco-ords -are used in this step to reduce sorting time. -Closest pair distance is found in the strip of points. (closest_in_strip) - -min(closest_pair_dis, closest_in_strip) would be the final answer. - -Time complexity: O(n * log n) -""" - - -def euclidean_distance_sqr(point1, point2): - """ - >>> euclidean_distance_sqr([1,2],[2,4]) - 5 - """ - return (point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2 - - -def column_based_sort(array, column=0): - """ - >>> column_based_sort([(5, 1), (4, 2), (3, 0)], 1) - [(3, 0), (5, 1), (4, 2)] - """ - return sorted(array, key=lambda x: x[column]) - - -def dis_between_closest_pair(points, points_counts, min_dis=float("inf")): - """ - brute force approach to find distance between closest pair points - - Parameters : - points, points_count, min_dis (list(tuple(int, int)), int, int) - - Returns : - min_dis (float): distance between closest pair of points - - >>> dis_between_closest_pair([[1,2],[2,4],[5,7],[8,9],[11,0]],5) - 5 - - """ - - for i in range(points_counts - 1): - for j in range(i + 1, points_counts): - current_dis = euclidean_distance_sqr(points[i], points[j]) - min_dis = min(min_dis, current_dis) - return min_dis - - -def dis_between_closest_in_strip(points, points_counts, min_dis=float("inf")): - """ - closest pair of points in strip - - Parameters : - points, points_count, min_dis (list(tuple(int, int)), int, int) - - Returns : - min_dis (float): distance btw closest pair of points in the strip (< min_dis) - - >>> dis_between_closest_in_strip([[1,2],[2,4],[5,7],[8,9],[11,0]],5) - 85 - """ - - for i in range(min(6, points_counts - 1), points_counts): - for j in range(max(0, i - 6), i): - current_dis = euclidean_distance_sqr(points[i], points[j]) - min_dis = min(min_dis, current_dis) - return min_dis - - -def closest_pair_of_points_sqr(points_sorted_on_x, points_sorted_on_y, points_counts): - """divide and conquer approach - - Parameters : - points, points_count (list(tuple(int, int)), int) - - Returns : - (float): distance btw closest pair of points - - >>> closest_pair_of_points_sqr([(1, 2), (3, 4)], [(5, 6), (7, 8)], 2) - 8 - """ - - # base case - if points_counts <= 3: - return dis_between_closest_pair(points_sorted_on_x, points_counts) - - # recursion - mid = points_counts // 2 - closest_in_left = closest_pair_of_points_sqr( - points_sorted_on_x, points_sorted_on_y[:mid], mid - ) - closest_in_right = closest_pair_of_points_sqr( - points_sorted_on_y, points_sorted_on_y[mid:], points_counts - mid - ) - closest_pair_dis = min(closest_in_left, closest_in_right) - - """ - cross_strip contains the points, whose Xcoords are at a - distance(< closest_pair_dis) from mid's Xcoord - """ - - cross_strip = [] - for point in points_sorted_on_x: - if abs(point[0] - points_sorted_on_x[mid][0]) < closest_pair_dis: - cross_strip.append(point) - - closest_in_strip = dis_between_closest_in_strip( - cross_strip, len(cross_strip), closest_pair_dis - ) - return min(closest_pair_dis, closest_in_strip) - - -def closest_pair_of_points(points, points_counts): - """ - >>> closest_pair_of_points([(2, 3), (12, 30)], len([(2, 3), (12, 30)])) - 28.792360097775937 - """ - points_sorted_on_x = column_based_sort(points, column=0) - points_sorted_on_y = column_based_sort(points, column=1) - return ( - closest_pair_of_points_sqr( - points_sorted_on_x, points_sorted_on_y, points_counts - ) - ) ** 0.5 - - -if __name__ == "__main__": - points = [(2, 3), (12, 30), (40, 50), (5, 1), (12, 10), (3, 4)] - print("Distance:", closest_pair_of_points(points, len(points))) diff --git a/divide_and_conquer/convex_hull.py b/divide_and_conquer/convex_hull.py deleted file mode 100644 index 93f6daf1f88c..000000000000 --- a/divide_and_conquer/convex_hull.py +++ /dev/null @@ -1,507 +0,0 @@ -""" -The convex hull problem is problem of finding all the vertices of convex polygon, P of -a set of points in a plane such that all the points are either on the vertices of P or -inside P. TH convex hull problem has several applications in geometrical problems, -computer graphics and game development. - -Two algorithms have been implemented for the convex hull problem here. -1. A brute-force algorithm which runs in O(n^3) -2. A divide-and-conquer algorithm which runs in O(n log(n)) - -There are other several other algorithms for the convex hull problem -which have not been implemented here, yet. - -""" - -from __future__ import annotations - -from collections.abc import Iterable - - -class Point: - """ - Defines a 2-d point for use by all convex-hull algorithms. - - Parameters - ---------- - x: an int or a float, the x-coordinate of the 2-d point - y: an int or a float, the y-coordinate of the 2-d point - - Examples - -------- - >>> Point(1, 2) - (1.0, 2.0) - >>> Point("1", "2") - (1.0, 2.0) - >>> Point(1, 2) > Point(0, 1) - True - >>> Point(1, 1) == Point(1, 1) - True - >>> Point(-0.5, 1) == Point(0.5, 1) - False - >>> Point("pi", "e") - Traceback (most recent call last): - ... - ValueError: could not convert string to float: 'pi' - """ - - def __init__(self, x, y): - self.x, self.y = float(x), float(y) - - def __eq__(self, other): - return self.x == other.x and self.y == other.y - - def __ne__(self, other): - return not self == other - - def __gt__(self, other): - if self.x > other.x: - return True - elif self.x == other.x: - return self.y > other.y - return False - - def __lt__(self, other): - return not self > other - - def __ge__(self, other): - if self.x > other.x: - return True - elif self.x == other.x: - return self.y >= other.y - return False - - def __le__(self, other): - if self.x < other.x: - return True - elif self.x == other.x: - return self.y <= other.y - return False - - def __repr__(self): - return f"({self.x}, {self.y})" - - def __hash__(self): - return hash(self.x) - - -def _construct_points( - list_of_tuples: list[Point] | list[list[float]] | Iterable[list[float]], -) -> list[Point]: - """ - constructs a list of points from an array-like object of numbers - - Arguments - --------- - - list_of_tuples: array-like object of type numbers. Acceptable types so far - are lists, tuples and sets. - - Returns - -------- - points: a list where each item is of type Point. This contains only objects - which can be converted into a Point. - - Examples - ------- - >>> _construct_points([[1, 1], [2, -1], [0.3, 4]]) - [(1.0, 1.0), (2.0, -1.0), (0.3, 4.0)] - >>> _construct_points([1, 2]) - Ignoring deformed point 1. All points must have at least 2 coordinates. - Ignoring deformed point 2. All points must have at least 2 coordinates. - [] - >>> _construct_points([]) - [] - >>> _construct_points(None) - [] - """ - - points: list[Point] = [] - if list_of_tuples: - for p in list_of_tuples: - if isinstance(p, Point): - points.append(p) - else: - try: - points.append(Point(p[0], p[1])) - except (IndexError, TypeError): - print( - f"Ignoring deformed point {p}. All points" - " must have at least 2 coordinates." - ) - return points - - -def _validate_input(points: list[Point] | list[list[float]]) -> list[Point]: - """ - validates an input instance before a convex-hull algorithms uses it - - Parameters - --------- - points: array-like, the 2d points to validate before using with - a convex-hull algorithm. The elements of points must be either lists, tuples or - Points. - - Returns - ------- - points: array_like, an iterable of all well-defined Points constructed passed in. - - - Exception - --------- - ValueError: if points is empty or None, or if a wrong data structure like a scalar - is passed - - TypeError: if an iterable but non-indexable object (eg. dictionary) is passed. - The exception to this a set which we'll convert to a list before using - - - Examples - ------- - >>> _validate_input([[1, 2]]) - [(1.0, 2.0)] - >>> _validate_input([(1, 2)]) - [(1.0, 2.0)] - >>> _validate_input([Point(2, 1), Point(-1, 2)]) - [(2.0, 1.0), (-1.0, 2.0)] - >>> _validate_input([]) - Traceback (most recent call last): - ... - ValueError: Expecting a list of points but got [] - >>> _validate_input(1) - Traceback (most recent call last): - ... - ValueError: Expecting an iterable object but got an non-iterable type 1 - """ - - if not hasattr(points, "__iter__"): - msg = f"Expecting an iterable object but got an non-iterable type {points}" - raise ValueError(msg) - - if not points: - msg = f"Expecting a list of points but got {points}" - raise ValueError(msg) - - return _construct_points(points) - - -def _det(a: Point, b: Point, c: Point) -> float: - """ - Computes the sign perpendicular distance of a 2d point c from a line segment - ab. The sign indicates the direction of c relative to ab. - A Positive value means c is above ab (to the left), while a negative value - means c is below ab (to the right). 0 means all three points are on a straight line. - - As a side note, 0.5 * abs|det| is the area of triangle abc - - Parameters - ---------- - a: point, the point on the left end of line segment ab - b: point, the point on the right end of line segment ab - c: point, the point for which the direction and location is desired. - - Returns - -------- - det: float, abs(det) is the distance of c from ab. The sign - indicates which side of line segment ab c is. det is computed as - (a_xb_y + c_xa_y + b_xc_y) - (a_yb_x + c_ya_x + b_yc_x) - - Examples - ---------- - >>> _det(Point(1, 1), Point(1, 2), Point(1, 5)) - 0.0 - >>> _det(Point(0, 0), Point(10, 0), Point(0, 10)) - 100.0 - >>> _det(Point(0, 0), Point(10, 0), Point(0, -10)) - -100.0 - """ - - det = (a.x * b.y + b.x * c.y + c.x * a.y) - (a.y * b.x + b.y * c.x + c.y * a.x) - return det - - -def convex_hull_bf(points: list[Point]) -> list[Point]: - """ - Constructs the convex hull of a set of 2D points using a brute force algorithm. - The algorithm basically considers all combinations of points (i, j) and uses the - definition of convexity to determine whether (i, j) is part of the convex hull or - not. (i, j) is part of the convex hull if and only iff there are no points on both - sides of the line segment connecting the ij, and there is no point k such that k is - on either end of the ij. - - Runtime: O(n^3) - definitely horrible - - Parameters - --------- - points: array-like of object of Points, lists or tuples. - The set of 2d points for which the convex-hull is needed - - Returns - ------ - convex_set: list, the convex-hull of points sorted in non-decreasing order. - - See Also - -------- - convex_hull_recursive, - - Examples - --------- - >>> convex_hull_bf([[0, 0], [1, 0], [10, 1]]) - [(0.0, 0.0), (1.0, 0.0), (10.0, 1.0)] - >>> convex_hull_bf([[0, 0], [1, 0], [10, 0]]) - [(0.0, 0.0), (10.0, 0.0)] - >>> convex_hull_bf([[-1, 1],[-1, -1], [0, 0], [0.5, 0.5], [1, -1], [1, 1], - ... [-0.75, 1]]) - [(-1.0, -1.0), (-1.0, 1.0), (1.0, -1.0), (1.0, 1.0)] - >>> convex_hull_bf([(0, 3), (2, 2), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3), - ... (2, -1), (2, -4), (1, -3)]) - [(0.0, 0.0), (0.0, 3.0), (1.0, -3.0), (2.0, -4.0), (3.0, 0.0), (3.0, 3.0)] - """ - - points = sorted(_validate_input(points)) - n = len(points) - convex_set = set() - - for i in range(n - 1): - for j in range(i + 1, n): - points_left_of_ij = points_right_of_ij = False - ij_part_of_convex_hull = True - for k in range(n): - if k not in {i, j}: - det_k = _det(points[i], points[j], points[k]) - - if det_k > 0: - points_left_of_ij = True - elif det_k < 0: - points_right_of_ij = True - # point[i], point[j], point[k] all lie on a straight line - # if point[k] is to the left of point[i] or it's to the - # right of point[j], then point[i], point[j] cannot be - # part of the convex hull of A - elif points[k] < points[i] or points[k] > points[j]: - ij_part_of_convex_hull = False - break - - if points_left_of_ij and points_right_of_ij: - ij_part_of_convex_hull = False - break - - if ij_part_of_convex_hull: - convex_set.update([points[i], points[j]]) - - return sorted(convex_set) - - -def convex_hull_recursive(points: list[Point]) -> list[Point]: - """ - Constructs the convex hull of a set of 2D points using a divide-and-conquer strategy - The algorithm exploits the geometric properties of the problem by repeatedly - partitioning the set of points into smaller hulls, and finding the convex hull of - these smaller hulls. The union of the convex hull from smaller hulls is the - solution to the convex hull of the larger problem. - - Parameter - --------- - points: array-like of object of Points, lists or tuples. - The set of 2d points for which the convex-hull is needed - - Runtime: O(n log n) - - Returns - ------- - convex_set: list, the convex-hull of points sorted in non-decreasing order. - - Examples - --------- - >>> convex_hull_recursive([[0, 0], [1, 0], [10, 1]]) - [(0.0, 0.0), (1.0, 0.0), (10.0, 1.0)] - >>> convex_hull_recursive([[0, 0], [1, 0], [10, 0]]) - [(0.0, 0.0), (10.0, 0.0)] - >>> convex_hull_recursive([[-1, 1],[-1, -1], [0, 0], [0.5, 0.5], [1, -1], [1, 1], - ... [-0.75, 1]]) - [(-1.0, -1.0), (-1.0, 1.0), (1.0, -1.0), (1.0, 1.0)] - >>> convex_hull_recursive([(0, 3), (2, 2), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3), - ... (2, -1), (2, -4), (1, -3)]) - [(0.0, 0.0), (0.0, 3.0), (1.0, -3.0), (2.0, -4.0), (3.0, 0.0), (3.0, 3.0)] - - """ - points = sorted(_validate_input(points)) - n = len(points) - - # divide all the points into an upper hull and a lower hull - # the left most point and the right most point are definitely - # members of the convex hull by definition. - # use these two anchors to divide all the points into two hulls, - # an upper hull and a lower hull. - - # all points to the left (above) the line joining the extreme points belong to the - # upper hull - # all points to the right (below) the line joining the extreme points below to the - # lower hull - # ignore all points on the line joining the extreme points since they cannot be - # part of the convex hull - - left_most_point = points[0] - right_most_point = points[n - 1] - - convex_set = {left_most_point, right_most_point} - upper_hull = [] - lower_hull = [] - - for i in range(1, n - 1): - det = _det(left_most_point, right_most_point, points[i]) - - if det > 0: - upper_hull.append(points[i]) - elif det < 0: - lower_hull.append(points[i]) - - _construct_hull(upper_hull, left_most_point, right_most_point, convex_set) - _construct_hull(lower_hull, right_most_point, left_most_point, convex_set) - - return sorted(convex_set) - - -def _construct_hull( - points: list[Point], left: Point, right: Point, convex_set: set[Point] -) -> None: - """ - - Parameters - --------- - points: list or None, the hull of points from which to choose the next convex-hull - point - left: Point, the point to the left of line segment joining left and right - right: The point to the right of the line segment joining left and right - convex_set: set, the current convex-hull. The state of convex-set gets updated by - this function - - Note - ---- - For the line segment 'ab', 'a' is on the left and 'b' on the right. - but the reverse is true for the line segment 'ba'. - - Returns - ------- - Nothing, only updates the state of convex-set - """ - if points: - extreme_point = None - extreme_point_distance = float("-inf") - candidate_points = [] - - for p in points: - det = _det(left, right, p) - - if det > 0: - candidate_points.append(p) - - if det > extreme_point_distance: - extreme_point_distance = det - extreme_point = p - - if extreme_point: - _construct_hull(candidate_points, left, extreme_point, convex_set) - convex_set.add(extreme_point) - _construct_hull(candidate_points, extreme_point, right, convex_set) - - -def convex_hull_melkman(points: list[Point]) -> list[Point]: - """ - Constructs the convex hull of a set of 2D points using the melkman algorithm. - The algorithm works by iteratively inserting points of a simple polygonal chain - (meaning that no line segments between two consecutive points cross each other). - Sorting the points yields such a polygonal chain. - - For a detailed description, see http://cgm.cs.mcgill.ca/~athens/cs601/Melkman.html - - Runtime: O(n log n) - O(n) if points are already sorted in the input - - Parameters - --------- - points: array-like of object of Points, lists or tuples. - The set of 2d points for which the convex-hull is needed - - Returns - ------ - convex_set: list, the convex-hull of points sorted in non-decreasing order. - - See Also - -------- - - Examples - --------- - >>> convex_hull_melkman([[0, 0], [1, 0], [10, 1]]) - [(0.0, 0.0), (1.0, 0.0), (10.0, 1.0)] - >>> convex_hull_melkman([[0, 0], [1, 0], [10, 0]]) - [(0.0, 0.0), (10.0, 0.0)] - >>> convex_hull_melkman([[-1, 1],[-1, -1], [0, 0], [0.5, 0.5], [1, -1], [1, 1], - ... [-0.75, 1]]) - [(-1.0, -1.0), (-1.0, 1.0), (1.0, -1.0), (1.0, 1.0)] - >>> convex_hull_melkman([(0, 3), (2, 2), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3), - ... (2, -1), (2, -4), (1, -3)]) - [(0.0, 0.0), (0.0, 3.0), (1.0, -3.0), (2.0, -4.0), (3.0, 0.0), (3.0, 3.0)] - """ - points = sorted(_validate_input(points)) - n = len(points) - - convex_hull = points[:2] - for i in range(2, n): - det = _det(convex_hull[1], convex_hull[0], points[i]) - if det > 0: - convex_hull.insert(0, points[i]) - break - elif det < 0: - convex_hull.append(points[i]) - break - else: - convex_hull[1] = points[i] - i += 1 - - for j in range(i, n): - if ( - _det(convex_hull[0], convex_hull[-1], points[j]) > 0 - and _det(convex_hull[-1], convex_hull[0], points[1]) < 0 - ): - # The point lies within the convex hull - continue - - convex_hull.insert(0, points[j]) - convex_hull.append(points[j]) - while _det(convex_hull[0], convex_hull[1], convex_hull[2]) >= 0: - del convex_hull[1] - while _det(convex_hull[-1], convex_hull[-2], convex_hull[-3]) <= 0: - del convex_hull[-2] - - # `convex_hull` is contains the convex hull in circular order - return sorted(convex_hull[1:] if len(convex_hull) > 3 else convex_hull) - - -def main(): - points = [ - (0, 3), - (2, 2), - (1, 1), - (2, 1), - (3, 0), - (0, 0), - (3, 3), - (2, -1), - (2, -4), - (1, -3), - ] - # the convex set of points is - # [(0, 0), (0, 3), (1, -3), (2, -4), (3, 0), (3, 3)] - results_bf = convex_hull_bf(points) - - results_recursive = convex_hull_recursive(points) - assert results_bf == results_recursive - - results_melkman = convex_hull_melkman(points) - assert results_bf == results_melkman - - print(results_bf) - - -if __name__ == "__main__": - main() diff --git a/divide_and_conquer/heaps_algorithm.py b/divide_and_conquer/heaps_algorithm.py deleted file mode 100644 index af30ad664101..000000000000 --- a/divide_and_conquer/heaps_algorithm.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -Heap's algorithm returns the list of all permutations possible from a list. -It minimizes movement by generating each permutation from the previous one -by swapping only two elements. -More information: -https://en.wikipedia.org/wiki/Heap%27s_algorithm. -""" - - -def heaps(arr: list) -> list: - """ - Pure python implementation of the Heap's algorithm (recursive version), - returning all permutations of a list. - >>> heaps([]) - [()] - >>> heaps([0]) - [(0,)] - >>> heaps([-1, 1]) - [(-1, 1), (1, -1)] - >>> heaps([1, 2, 3]) - [(1, 2, 3), (2, 1, 3), (3, 1, 2), (1, 3, 2), (2, 3, 1), (3, 2, 1)] - >>> from itertools import permutations - >>> sorted(heaps([1,2,3])) == sorted(permutations([1,2,3])) - True - >>> all(sorted(heaps(x)) == sorted(permutations(x)) - ... for x in ([], [0], [-1, 1], [1, 2, 3])) - True - """ - - if len(arr) <= 1: - return [tuple(arr)] - - res = [] - - def generate(k: int, arr: list): - if k == 1: - res.append(tuple(arr[:])) - return - - generate(k - 1, arr) - - for i in range(k - 1): - if k % 2 == 0: # k is even - arr[i], arr[k - 1] = arr[k - 1], arr[i] - else: # k is odd - arr[0], arr[k - 1] = arr[k - 1], arr[0] - generate(k - 1, arr) - - generate(len(arr), arr) - return res - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - arr = [int(item) for item in user_input.split(",")] - print(heaps(arr)) diff --git a/divide_and_conquer/heaps_algorithm_iterative.py b/divide_and_conquer/heaps_algorithm_iterative.py deleted file mode 100644 index 4dab41f539c0..000000000000 --- a/divide_and_conquer/heaps_algorithm_iterative.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Heap's (iterative) algorithm returns the list of all permutations possible from a list. -It minimizes movement by generating each permutation from the previous one -by swapping only two elements. -More information: -https://en.wikipedia.org/wiki/Heap%27s_algorithm. -""" - - -def heaps(arr: list) -> list: - """ - Pure python implementation of the iterative Heap's algorithm, - returning all permutations of a list. - >>> heaps([]) - [()] - >>> heaps([0]) - [(0,)] - >>> heaps([-1, 1]) - [(-1, 1), (1, -1)] - >>> heaps([1, 2, 3]) - [(1, 2, 3), (2, 1, 3), (3, 1, 2), (1, 3, 2), (2, 3, 1), (3, 2, 1)] - >>> from itertools import permutations - >>> sorted(heaps([1,2,3])) == sorted(permutations([1,2,3])) - True - >>> all(sorted(heaps(x)) == sorted(permutations(x)) - ... for x in ([], [0], [-1, 1], [1, 2, 3])) - True - """ - - if len(arr) <= 1: - return [tuple(arr)] - - res = [] - - def generate(n: int, arr: list): - c = [0] * n - res.append(tuple(arr)) - - i = 0 - while i < n: - if c[i] < i: - if i % 2 == 0: - arr[0], arr[i] = arr[i], arr[0] - else: - arr[c[i]], arr[i] = arr[i], arr[c[i]] - res.append(tuple(arr)) - c[i] += 1 - i = 0 - else: - c[i] = 0 - i += 1 - - generate(len(arr), arr) - return res - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - arr = [int(item) for item in user_input.split(",")] - print(heaps(arr)) diff --git a/divide_and_conquer/inversions.py b/divide_and_conquer/inversions.py deleted file mode 100644 index 35f78fe5cf1e..000000000000 --- a/divide_and_conquer/inversions.py +++ /dev/null @@ -1,153 +0,0 @@ -""" -Given an array-like data structure A[1..n], how many pairs -(i, j) for all 1 <= i < j <= n such that A[i] > A[j]? These pairs are -called inversions. Counting the number of such inversions in an array-like -object is the important. Among other things, counting inversions can help -us determine how close a given array is to being sorted. -In this implementation, I provide two algorithms, a divide-and-conquer -algorithm which runs in nlogn and the brute-force n^2 algorithm. -""" - - -def count_inversions_bf(arr): - """ - Counts the number of inversions using a naive brute-force algorithm - Parameters - ---------- - arr: arr: array-like, the list containing the items for which the number - of inversions is desired. The elements of `arr` must be comparable. - Returns - ------- - num_inversions: The total number of inversions in `arr` - Examples - --------- - >>> count_inversions_bf([1, 4, 2, 4, 1]) - 4 - >>> count_inversions_bf([1, 1, 2, 4, 4]) - 0 - >>> count_inversions_bf([]) - 0 - """ - - num_inversions = 0 - n = len(arr) - - for i in range(n - 1): - for j in range(i + 1, n): - if arr[i] > arr[j]: - num_inversions += 1 - - return num_inversions - - -def count_inversions_recursive(arr): - """ - Counts the number of inversions using a divide-and-conquer algorithm - Parameters - ----------- - arr: array-like, the list containing the items for which the number - of inversions is desired. The elements of `arr` must be comparable. - Returns - ------- - C: a sorted copy of `arr`. - num_inversions: int, the total number of inversions in 'arr' - Examples - -------- - >>> count_inversions_recursive([1, 4, 2, 4, 1]) - ([1, 1, 2, 4, 4], 4) - >>> count_inversions_recursive([1, 1, 2, 4, 4]) - ([1, 1, 2, 4, 4], 0) - >>> count_inversions_recursive([]) - ([], 0) - """ - if len(arr) <= 1: - return arr, 0 - mid = len(arr) // 2 - p = arr[0:mid] - q = arr[mid:] - - a, inversion_p = count_inversions_recursive(p) - b, inversions_q = count_inversions_recursive(q) - c, cross_inversions = _count_cross_inversions(a, b) - - num_inversions = inversion_p + inversions_q + cross_inversions - return c, num_inversions - - -def _count_cross_inversions(p, q): - """ - Counts the inversions across two sorted arrays. - And combine the two arrays into one sorted array - For all 1<= i<=len(P) and for all 1 <= j <= len(Q), - if P[i] > Q[j], then (i, j) is a cross inversion - Parameters - ---------- - P: array-like, sorted in non-decreasing order - Q: array-like, sorted in non-decreasing order - Returns - ------ - R: array-like, a sorted array of the elements of `P` and `Q` - num_inversion: int, the number of inversions across `P` and `Q` - Examples - -------- - >>> _count_cross_inversions([1, 2, 3], [0, 2, 5]) - ([0, 1, 2, 2, 3, 5], 4) - >>> _count_cross_inversions([1, 2, 3], [3, 4, 5]) - ([1, 2, 3, 3, 4, 5], 0) - """ - - r = [] - i = j = num_inversion = 0 - while i < len(p) and j < len(q): - if p[i] > q[j]: - # if P[1] > Q[j], then P[k] > Q[k] for all i < k <= len(P) - # These are all inversions. The claim emerges from the - # property that P is sorted. - num_inversion += len(p) - i - r.append(q[j]) - j += 1 - else: - r.append(p[i]) - i += 1 - - if i < len(p): - r.extend(p[i:]) - else: - r.extend(q[j:]) - - return r, num_inversion - - -def main(): - arr_1 = [10, 2, 1, 5, 5, 2, 11] - - # this arr has 8 inversions: - # (10, 2), (10, 1), (10, 5), (10, 5), (10, 2), (2, 1), (5, 2), (5, 2) - - num_inversions_bf = count_inversions_bf(arr_1) - _, num_inversions_recursive = count_inversions_recursive(arr_1) - - assert num_inversions_bf == num_inversions_recursive == 8 - - print("number of inversions = ", num_inversions_bf) - - # testing an array with zero inversion (a sorted arr_1) - - arr_1.sort() - num_inversions_bf = count_inversions_bf(arr_1) - _, num_inversions_recursive = count_inversions_recursive(arr_1) - - assert num_inversions_bf == num_inversions_recursive == 0 - print("number of inversions = ", num_inversions_bf) - - # an empty list should also have zero inversions - arr_1 = [] - num_inversions_bf = count_inversions_bf(arr_1) - _, num_inversions_recursive = count_inversions_recursive(arr_1) - - assert num_inversions_bf == num_inversions_recursive == 0 - print("number of inversions = ", num_inversions_bf) - - -if __name__ == "__main__": - main() diff --git a/divide_and_conquer/kth_order_statistic.py b/divide_and_conquer/kth_order_statistic.py deleted file mode 100644 index 23fd8be5ea47..000000000000 --- a/divide_and_conquer/kth_order_statistic.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Find the kth smallest element in linear time using divide and conquer. -Recall we can do this trivially in O(nlogn) time. Sort the list and -access kth element in constant time. - -This is a divide and conquer algorithm that can find a solution in O(n) time. - -For more information of this algorithm: -https://web.stanford.edu/class/archive/cs/cs161/cs161.1138/lectures/08/Small08.pdf -""" - -from __future__ import annotations - -from random import choice - - -def random_pivot(lst): - """ - Choose a random pivot for the list. - We can use a more sophisticated algorithm here, such as the median-of-medians - algorithm. - """ - return choice(lst) - - -def kth_number(lst: list[int], k: int) -> int: - """ - Return the kth smallest number in lst. - >>> kth_number([2, 1, 3, 4, 5], 3) - 3 - >>> kth_number([2, 1, 3, 4, 5], 1) - 1 - >>> kth_number([2, 1, 3, 4, 5], 5) - 5 - >>> kth_number([3, 2, 5, 6, 7, 8], 2) - 3 - >>> kth_number([25, 21, 98, 100, 76, 22, 43, 60, 89, 87], 4) - 43 - """ - # pick a pivot and separate into list based on pivot. - pivot = random_pivot(lst) - - # partition based on pivot - # linear time - small = [e for e in lst if e < pivot] - big = [e for e in lst if e > pivot] - - # if we get lucky, pivot might be the element we want. - # we can easily see this: - # small (elements smaller than k) - # + pivot (kth element) - # + big (elements larger than k) - if len(small) == k - 1: - return pivot - # pivot is in elements bigger than k - elif len(small) < k - 1: - return kth_number(big, k - len(small) - 1) - # pivot is in elements smaller than k - else: - return kth_number(small, k) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/divide_and_conquer/max_difference_pair.py b/divide_and_conquer/max_difference_pair.py deleted file mode 100644 index ffc4b76a7154..000000000000 --- a/divide_and_conquer/max_difference_pair.py +++ /dev/null @@ -1,44 +0,0 @@ -def max_difference(a: list[int]) -> tuple[int, int]: - """ - We are given an array A[1..n] of integers, n >= 1. We want to - find a pair of indices (i, j) such that - 1 <= i <= j <= n and A[j] - A[i] is as large as possible. - - Explanation: - https://www.geeksforgeeks.org/maximum-difference-between-two-elements/ - - >>> max_difference([5, 11, 2, 1, 7, 9, 0, 7]) - (1, 9) - """ - # base case - if len(a) == 1: - return a[0], a[0] - else: - # split A into half. - first = a[: len(a) // 2] - second = a[len(a) // 2 :] - - # 2 sub problems, 1/2 of original size. - small1, big1 = max_difference(first) - small2, big2 = max_difference(second) - - # get min of first and max of second - # linear time - min_first = min(first) - max_second = max(second) - - # 3 cases, either (small1, big1), - # (min_first, max_second), (small2, big2) - # constant comparisons - if big2 - small2 > max_second - min_first and big2 - small2 > big1 - small1: - return small2, big2 - elif big1 - small1 > max_second - min_first: - return small1, big1 - else: - return min_first, max_second - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/divide_and_conquer/max_subarray.py b/divide_and_conquer/max_subarray.py deleted file mode 100644 index 0fad7ab5d920..000000000000 --- a/divide_and_conquer/max_subarray.py +++ /dev/null @@ -1,113 +0,0 @@ -""" -The maximum subarray problem is the task of finding the continuous subarray that has the -maximum sum within a given array of numbers. For example, given the array -[-2, 1, -3, 4, -1, 2, 1, -5, 4], the contiguous subarray with the maximum sum is -[4, -1, 2, 1], which has a sum of 6. - -This divide-and-conquer algorithm finds the maximum subarray in O(n log n) time. -""" - -from __future__ import annotations - -import time -from collections.abc import Sequence -from random import randint - -from matplotlib import pyplot as plt - - -def max_subarray( - arr: Sequence[float], low: int, high: int -) -> tuple[int | None, int | None, float]: - """ - Solves the maximum subarray problem using divide and conquer. - :param arr: the given array of numbers - :param low: the start index - :param high: the end index - :return: the start index of the maximum subarray, the end index of the - maximum subarray, and the maximum subarray sum - - >>> nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4] - >>> max_subarray(nums, 0, len(nums) - 1) - (3, 6, 6) - >>> nums = [2, 8, 9] - >>> max_subarray(nums, 0, len(nums) - 1) - (0, 2, 19) - >>> nums = [0, 0] - >>> max_subarray(nums, 0, len(nums) - 1) - (0, 0, 0) - >>> nums = [-1.0, 0.0, 1.0] - >>> max_subarray(nums, 0, len(nums) - 1) - (2, 2, 1.0) - >>> nums = [-2, -3, -1, -4, -6] - >>> max_subarray(nums, 0, len(nums) - 1) - (2, 2, -1) - >>> max_subarray([], 0, 0) - (None, None, 0) - """ - if not arr: - return None, None, 0 - if low == high: - return low, high, arr[low] - - mid = (low + high) // 2 - left_low, left_high, left_sum = max_subarray(arr, low, mid) - right_low, right_high, right_sum = max_subarray(arr, mid + 1, high) - cross_left, cross_right, cross_sum = max_cross_sum(arr, low, mid, high) - if left_sum >= right_sum and left_sum >= cross_sum: - return left_low, left_high, left_sum - elif right_sum >= left_sum and right_sum >= cross_sum: - return right_low, right_high, right_sum - return cross_left, cross_right, cross_sum - - -def max_cross_sum( - arr: Sequence[float], low: int, mid: int, high: int -) -> tuple[int, int, float]: - left_sum, max_left = float("-inf"), -1 - right_sum, max_right = float("-inf"), -1 - - summ: int | float = 0 - for i in range(mid, low - 1, -1): - summ += arr[i] - if summ > left_sum: - left_sum = summ - max_left = i - - summ = 0 - for i in range(mid + 1, high + 1): - summ += arr[i] - if summ > right_sum: - right_sum = summ - max_right = i - - return max_left, max_right, (left_sum + right_sum) - - -def time_max_subarray(input_size: int) -> float: - arr = [randint(1, input_size) for _ in range(input_size)] - start = time.time() - max_subarray(arr, 0, input_size - 1) - end = time.time() - return end - start - - -def plot_runtimes() -> None: - input_sizes = [10, 100, 1000, 10000, 50000, 100000, 200000, 300000, 400000, 500000] - runtimes = [time_max_subarray(input_size) for input_size in input_sizes] - print("No of Inputs\t\tTime Taken") - for input_size, runtime in zip(input_sizes, runtimes): - print(input_size, "\t\t", runtime) - plt.plot(input_sizes, runtimes) - plt.xlabel("Number of Inputs") - plt.ylabel("Time taken in seconds") - plt.show() - - -if __name__ == "__main__": - """ - A random simulation of this algorithm. - """ - from doctest import testmod - - testmod() diff --git a/divide_and_conquer/mergesort.py b/divide_and_conquer/mergesort.py deleted file mode 100644 index 628080cefc9b..000000000000 --- a/divide_and_conquer/mergesort.py +++ /dev/null @@ -1,112 +0,0 @@ -from __future__ import annotations - - -def merge(left_half: list, right_half: list) -> list: - """Helper function for mergesort. - - >>> left_half = [-2] - >>> right_half = [-1] - >>> merge(left_half, right_half) - [-2, -1] - - >>> left_half = [1,2,3] - >>> right_half = [4,5,6] - >>> merge(left_half, right_half) - [1, 2, 3, 4, 5, 6] - - >>> left_half = [-2] - >>> right_half = [-1] - >>> merge(left_half, right_half) - [-2, -1] - - >>> left_half = [12, 15] - >>> right_half = [13, 14] - >>> merge(left_half, right_half) - [12, 13, 14, 15] - - >>> left_half = [] - >>> right_half = [] - >>> merge(left_half, right_half) - [] - """ - sorted_array = [None] * (len(right_half) + len(left_half)) - - pointer1 = 0 # pointer to current index for left Half - pointer2 = 0 # pointer to current index for the right Half - index = 0 # pointer to current index for the sorted array Half - - while pointer1 < len(left_half) and pointer2 < len(right_half): - if left_half[pointer1] < right_half[pointer2]: - sorted_array[index] = left_half[pointer1] - pointer1 += 1 - index += 1 - else: - sorted_array[index] = right_half[pointer2] - pointer2 += 1 - index += 1 - while pointer1 < len(left_half): - sorted_array[index] = left_half[pointer1] - pointer1 += 1 - index += 1 - - while pointer2 < len(right_half): - sorted_array[index] = right_half[pointer2] - pointer2 += 1 - index += 1 - - return sorted_array - - -def merge_sort(array: list) -> list: - """Returns a list of sorted array elements using merge sort. - - >>> from random import shuffle - >>> array = [-2, 3, -10, 11, 99, 100000, 100, -200] - >>> shuffle(array) - >>> merge_sort(array) - [-200, -10, -2, 3, 11, 99, 100, 100000] - - >>> shuffle(array) - >>> merge_sort(array) - [-200, -10, -2, 3, 11, 99, 100, 100000] - - >>> array = [-200] - >>> merge_sort(array) - [-200] - - >>> array = [-2, 3, -10, 11, 99, 100000, 100, -200] - >>> shuffle(array) - >>> sorted(array) == merge_sort(array) - True - - >>> array = [-2] - >>> merge_sort(array) - [-2] - - >>> array = [] - >>> merge_sort(array) - [] - - >>> array = [10000000, 1, -1111111111, 101111111112, 9000002] - >>> sorted(array) == merge_sort(array) - True - """ - if len(array) <= 1: - return array - # the actual formula to calculate the middle element = left + (right - left) // 2 - # this avoids integer overflow in case of large N - middle = 0 + (len(array) - 0) // 2 - - # Split the array into halves till the array length becomes equal to One - # merge the arrays of single length returned by mergeSort function and - # pass them into the merge arrays function which merges the array - left_half = array[:middle] - right_half = array[middle:] - - return merge(merge_sort(left_half), merge_sort(right_half)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/divide_and_conquer/peak.py b/divide_and_conquer/peak.py deleted file mode 100644 index 71ab5ac86574..000000000000 --- a/divide_and_conquer/peak.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Finding the peak of a unimodal list using divide and conquer. -A unimodal array is defined as follows: array is increasing up to index p, -then decreasing afterwards. (for p >= 1) -An obvious solution can be performed in O(n), -to find the maximum of the array. -(From Kleinberg and Tardos. Algorithm Design. -Addison Wesley 2006: Chapter 5 Solved Exercise 1) -""" - -from __future__ import annotations - - -def peak(lst: list[int]) -> int: - """ - Return the peak value of `lst`. - >>> peak([1, 2, 3, 4, 5, 4, 3, 2, 1]) - 5 - >>> peak([1, 10, 9, 8, 7, 6, 5, 4]) - 10 - >>> peak([1, 9, 8, 7]) - 9 - >>> peak([1, 2, 3, 4, 5, 6, 7, 0]) - 7 - >>> peak([1, 2, 3, 4, 3, 2, 1, 0, -1, -2]) - 4 - """ - # middle index - m = len(lst) // 2 - - # choose the middle 3 elements - three = lst[m - 1 : m + 2] - - # if middle element is peak - if three[1] > three[0] and three[1] > three[2]: - return three[1] - - # if increasing, recurse on right - elif three[0] < three[2]: - if len(lst[:m]) == 2: - m -= 1 - return peak(lst[m:]) - - # decreasing - else: - if len(lst[:m]) == 2: - m += 1 - return peak(lst[:m]) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/divide_and_conquer/power.py b/divide_and_conquer/power.py deleted file mode 100644 index faf6a3476d40..000000000000 --- a/divide_and_conquer/power.py +++ /dev/null @@ -1,51 +0,0 @@ -def actual_power(a: int, b: int): - """ - Function using divide and conquer to calculate a^b. - It only works for integer a,b. - - :param a: The base of the power operation, an integer. - :param b: The exponent of the power operation, a non-negative integer. - :return: The result of a^b. - - Examples: - >>> actual_power(3, 2) - 9 - >>> actual_power(5, 3) - 125 - >>> actual_power(2, 5) - 32 - >>> actual_power(7, 0) - 1 - """ - if b == 0: - return 1 - if (b % 2) == 0: - return actual_power(a, int(b / 2)) * actual_power(a, int(b / 2)) - else: - return a * actual_power(a, int(b / 2)) * actual_power(a, int(b / 2)) - - -def power(a: int, b: int) -> float: - """ - :param a: The base (integer). - :param b: The exponent (integer). - :return: The result of a^b, as a float for negative exponents. - - >>> power(4,6) - 4096 - >>> power(2,3) - 8 - >>> power(-2,3) - -8 - >>> power(2,-3) - 0.125 - >>> power(-2,-3) - -0.125 - """ - if b < 0: - return 1 / actual_power(a, b) - return actual_power(a, b) - - -if __name__ == "__main__": - print(power(-2, -3)) diff --git a/divide_and_conquer/strassen_matrix_multiplication.py b/divide_and_conquer/strassen_matrix_multiplication.py deleted file mode 100644 index f529a255d2ef..000000000000 --- a/divide_and_conquer/strassen_matrix_multiplication.py +++ /dev/null @@ -1,172 +0,0 @@ -from __future__ import annotations - -import math - - -def default_matrix_multiplication(a: list, b: list) -> list: - """ - Multiplication only for 2x2 matrices - """ - if len(a) != 2 or len(a[0]) != 2 or len(b) != 2 or len(b[0]) != 2: - raise Exception("Matrices are not 2x2") - new_matrix = [ - [a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]], - [a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]], - ] - return new_matrix - - -def matrix_addition(matrix_a: list, matrix_b: list): - return [ - [matrix_a[row][col] + matrix_b[row][col] for col in range(len(matrix_a[row]))] - for row in range(len(matrix_a)) - ] - - -def matrix_subtraction(matrix_a: list, matrix_b: list): - return [ - [matrix_a[row][col] - matrix_b[row][col] for col in range(len(matrix_a[row]))] - for row in range(len(matrix_a)) - ] - - -def split_matrix(a: list) -> tuple[list, list, list, list]: - """ - Given an even length matrix, returns the top_left, top_right, bot_left, bot_right - quadrant. - - >>> split_matrix([[4,3,2,4],[2,3,1,1],[6,5,4,3],[8,4,1,6]]) - ([[4, 3], [2, 3]], [[2, 4], [1, 1]], [[6, 5], [8, 4]], [[4, 3], [1, 6]]) - >>> split_matrix([ - ... [4,3,2,4,4,3,2,4],[2,3,1,1,2,3,1,1],[6,5,4,3,6,5,4,3],[8,4,1,6,8,4,1,6], - ... [4,3,2,4,4,3,2,4],[2,3,1,1,2,3,1,1],[6,5,4,3,6,5,4,3],[8,4,1,6,8,4,1,6] - ... ]) # doctest: +NORMALIZE_WHITESPACE - ([[4, 3, 2, 4], [2, 3, 1, 1], [6, 5, 4, 3], [8, 4, 1, 6]], [[4, 3, 2, 4], - [2, 3, 1, 1], [6, 5, 4, 3], [8, 4, 1, 6]], [[4, 3, 2, 4], [2, 3, 1, 1], - [6, 5, 4, 3], [8, 4, 1, 6]], [[4, 3, 2, 4], [2, 3, 1, 1], [6, 5, 4, 3], - [8, 4, 1, 6]]) - """ - if len(a) % 2 != 0 or len(a[0]) % 2 != 0: - raise Exception("Odd matrices are not supported!") - - matrix_length = len(a) - mid = matrix_length // 2 - - top_right = [[a[i][j] for j in range(mid, matrix_length)] for i in range(mid)] - bot_right = [ - [a[i][j] for j in range(mid, matrix_length)] for i in range(mid, matrix_length) - ] - - top_left = [[a[i][j] for j in range(mid)] for i in range(mid)] - bot_left = [[a[i][j] for j in range(mid)] for i in range(mid, matrix_length)] - - return top_left, top_right, bot_left, bot_right - - -def matrix_dimensions(matrix: list) -> tuple[int, int]: - return len(matrix), len(matrix[0]) - - -def print_matrix(matrix: list) -> None: - print("\n".join(str(line) for line in matrix)) - - -def actual_strassen(matrix_a: list, matrix_b: list) -> list: - """ - Recursive function to calculate the product of two matrices, using the Strassen - Algorithm. It only supports square matrices of any size that is a power of 2. - """ - if matrix_dimensions(matrix_a) == (2, 2): - return default_matrix_multiplication(matrix_a, matrix_b) - - a, b, c, d = split_matrix(matrix_a) - e, f, g, h = split_matrix(matrix_b) - - t1 = actual_strassen(a, matrix_subtraction(f, h)) - t2 = actual_strassen(matrix_addition(a, b), h) - t3 = actual_strassen(matrix_addition(c, d), e) - t4 = actual_strassen(d, matrix_subtraction(g, e)) - t5 = actual_strassen(matrix_addition(a, d), matrix_addition(e, h)) - t6 = actual_strassen(matrix_subtraction(b, d), matrix_addition(g, h)) - t7 = actual_strassen(matrix_subtraction(a, c), matrix_addition(e, f)) - - top_left = matrix_addition(matrix_subtraction(matrix_addition(t5, t4), t2), t6) - top_right = matrix_addition(t1, t2) - bot_left = matrix_addition(t3, t4) - bot_right = matrix_subtraction(matrix_subtraction(matrix_addition(t1, t5), t3), t7) - - # construct the new matrix from our 4 quadrants - new_matrix = [] - for i in range(len(top_right)): - new_matrix.append(top_left[i] + top_right[i]) - for i in range(len(bot_right)): - new_matrix.append(bot_left[i] + bot_right[i]) - return new_matrix - - -def strassen(matrix1: list, matrix2: list) -> list: - """ - >>> strassen([[2,1,3],[3,4,6],[1,4,2],[7,6,7]], [[4,2,3,4],[2,1,1,1],[8,6,4,2]]) - [[34, 23, 19, 15], [68, 46, 37, 28], [28, 18, 15, 12], [96, 62, 55, 48]] - >>> strassen([[3,7,5,6,9],[1,5,3,7,8],[1,4,4,5,7]], [[2,4],[5,2],[1,7],[5,5],[7,8]]) - [[139, 163], [121, 134], [100, 121]] - """ - if matrix_dimensions(matrix1)[1] != matrix_dimensions(matrix2)[0]: - msg = ( - "Unable to multiply these matrices, please check the dimensions.\n" - f"Matrix A: {matrix1}\n" - f"Matrix B: {matrix2}" - ) - raise Exception(msg) - dimension1 = matrix_dimensions(matrix1) - dimension2 = matrix_dimensions(matrix2) - - if dimension1[0] == dimension1[1] and dimension2[0] == dimension2[1]: - return [matrix1, matrix2] - - maximum = max(*dimension1, *dimension2) - maxim = int(math.pow(2, math.ceil(math.log2(maximum)))) - new_matrix1 = matrix1 - new_matrix2 = matrix2 - - # Adding zeros to the matrices to convert them both into square matrices of equal - # dimensions that are a power of 2 - for i in range(maxim): - if i < dimension1[0]: - for _ in range(dimension1[1], maxim): - new_matrix1[i].append(0) - else: - new_matrix1.append([0] * maxim) - if i < dimension2[0]: - for _ in range(dimension2[1], maxim): - new_matrix2[i].append(0) - else: - new_matrix2.append([0] * maxim) - - final_matrix = actual_strassen(new_matrix1, new_matrix2) - - # Removing the additional zeros - for i in range(maxim): - if i < dimension1[0]: - for _ in range(dimension2[1], maxim): - final_matrix[i].pop() - else: - final_matrix.pop() - return final_matrix - - -if __name__ == "__main__": - matrix1 = [ - [2, 3, 4, 5], - [6, 4, 3, 1], - [2, 3, 6, 7], - [3, 1, 2, 4], - [2, 3, 4, 5], - [6, 4, 3, 1], - [2, 3, 6, 7], - [3, 1, 2, 4], - [2, 3, 4, 5], - [6, 2, 3, 1], - ] - matrix2 = [[0, 2, 1, 1], [16, 2, 3, 3], [2, 2, 7, 7], [13, 11, 22, 4]] - print(strassen(matrix1, matrix2)) diff --git a/docs/source/__init__.py b/docs/source/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/dynamic_programming/__init__.py b/dynamic_programming/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/dynamic_programming/abbreviation.py b/dynamic_programming/abbreviation.py deleted file mode 100644 index 5175aa9ed92f..000000000000 --- a/dynamic_programming/abbreviation.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -https://www.hackerrank.com/challenges/abbr/problem -You can perform the following operation on some string, : - -1. Capitalize zero or more of 's lowercase letters at some index i - (i.e., make them uppercase). -2. Delete all of the remaining lowercase letters in . - -Example: -a=daBcd and b="ABC" -daBcd -> capitalize a and c(dABCd) -> remove d (ABC) -""" - - -def abbr(a: str, b: str) -> bool: - """ - >>> abbr("daBcd", "ABC") - True - >>> abbr("dBcd", "ABC") - False - """ - n = len(a) - m = len(b) - dp = [[False for _ in range(m + 1)] for _ in range(n + 1)] - dp[0][0] = True - for i in range(n): - for j in range(m + 1): - if dp[i][j]: - if j < m and a[i].upper() == b[j]: - dp[i + 1][j + 1] = True - if a[i].islower(): - dp[i + 1][j] = True - return dp[n][m] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/all_construct.py b/dynamic_programming/all_construct.py deleted file mode 100644 index 5d585fc7fcec..000000000000 --- a/dynamic_programming/all_construct.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -Program to list all the ways a target string can be -constructed from the given list of substrings -""" - -from __future__ import annotations - - -def all_construct(target: str, word_bank: list[str] | None = None) -> list[list[str]]: - """ - returns the list containing all the possible - combinations a string(target) can be constructed from - the given list of substrings(word_bank) - >>> all_construct("hello", ["he", "l", "o"]) - [['he', 'l', 'l', 'o']] - >>> all_construct("purple",["purp","p","ur","le","purpl"]) - [['purp', 'le'], ['p', 'ur', 'p', 'le']] - """ - - word_bank = word_bank or [] - # create a table - table_size: int = len(target) + 1 - - table: list[list[list[str]]] = [] - for _ in range(table_size): - table.append([]) - # seed value - table[0] = [[]] # because empty string has empty combination - - # iterate through the indices - for i in range(table_size): - # condition - if table[i] != []: - for word in word_bank: - # slice condition - if target[i : i + len(word)] == word: - new_combinations: list[list[str]] = [ - [word, *way] for way in table[i] - ] - # adds the word to every combination the current position holds - # now,push that combination to the table[i+len(word)] - table[i + len(word)] += new_combinations - - # combinations are in reverse order so reverse for better output - for combination in table[len(target)]: - combination.reverse() - - return table[len(target)] - - -if __name__ == "__main__": - print(all_construct("jwajalapa", ["jwa", "j", "w", "a", "la", "lapa"])) - print(all_construct("rajamati", ["s", "raj", "amat", "raja", "ma", "i", "t"])) - print( - all_construct( - "hexagonosaurus", - ["h", "ex", "hex", "ag", "ago", "ru", "auru", "rus", "go", "no", "o", "s"], - ) - ) diff --git a/dynamic_programming/bitmask.py b/dynamic_programming/bitmask.py deleted file mode 100644 index a6e6a0cda7bf..000000000000 --- a/dynamic_programming/bitmask.py +++ /dev/null @@ -1,89 +0,0 @@ -""" - -This is a Python implementation for questions involving task assignments between people. -Here Bitmasking and DP are used for solving this. - -Question :- -We have N tasks and M people. Each person in M can do only certain of these tasks. Also -a person can do only one task and a task is performed only by one person. -Find the total no of ways in which the tasks can be distributed. -""" - -from collections import defaultdict - - -class AssignmentUsingBitmask: - def __init__(self, task_performed, total): - self.total_tasks = total # total no of tasks (N) - - # DP table will have a dimension of (2^M)*N - # initially all values are set to -1 - self.dp = [ - [-1 for i in range(total + 1)] for j in range(2 ** len(task_performed)) - ] - - self.task = defaultdict(list) # stores the list of persons for each task - - # final_mask is used to check if all persons are included by setting all bits - # to 1 - self.final_mask = (1 << len(task_performed)) - 1 - - def count_ways_until(self, mask, task_no): - # if mask == self.finalmask all persons are distributed tasks, return 1 - if mask == self.final_mask: - return 1 - - # if not everyone gets the task and no more tasks are available, return 0 - if task_no > self.total_tasks: - return 0 - - # if case already considered - if self.dp[mask][task_no] != -1: - return self.dp[mask][task_no] - - # Number of ways when we don't this task in the arrangement - total_ways_util = self.count_ways_until(mask, task_no + 1) - - # now assign the tasks one by one to all possible persons and recursively - # assign for the remaining tasks. - if task_no in self.task: - for p in self.task[task_no]: - # if p is already given a task - if mask & (1 << p): - continue - - # assign this task to p and change the mask value. And recursively - # assign tasks with the new mask value. - total_ways_util += self.count_ways_until(mask | (1 << p), task_no + 1) - - # save the value. - self.dp[mask][task_no] = total_ways_util - - return self.dp[mask][task_no] - - def count_no_of_ways(self, task_performed): - # Store the list of persons for each task - for i in range(len(task_performed)): - for j in task_performed[i]: - self.task[j].append(i) - - # call the function to fill the DP table, final answer is stored in dp[0][1] - return self.count_ways_until(0, 1) - - -if __name__ == "__main__": - total_tasks = 5 # total no of tasks (the value of N) - - # the list of tasks that can be done by M persons. - task_performed = [[1, 3, 4], [1, 2, 5], [3, 4]] - print( - AssignmentUsingBitmask(task_performed, total_tasks).count_no_of_ways( - task_performed - ) - ) - """ - For the particular example the tasks can be distributed as - (1,2,3), (1,2,4), (1,5,3), (1,5,4), (3,1,4), - (3,2,4), (3,5,4), (4,1,3), (4,2,3), (4,5,3) - total 10 - """ diff --git a/dynamic_programming/catalan_numbers.py b/dynamic_programming/catalan_numbers.py deleted file mode 100644 index 7b74f2763d43..000000000000 --- a/dynamic_programming/catalan_numbers.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Print all the Catalan numbers from 0 to n, n being the user input. - - * The Catalan numbers are a sequence of positive integers that - * appear in many counting problems in combinatorics [1]. Such - * problems include counting [2]: - * - The number of Dyck words of length 2n - * - The number well-formed expressions with n pairs of parentheses - * (e.g., `()()` is valid but `())(` is not) - * - The number of different ways n + 1 factors can be completely - * parenthesized (e.g., for n = 2, C(n) = 2 and (ab)c and a(bc) - * are the two valid ways to parenthesize. - * - The number of full binary trees with n + 1 leaves - - * A Catalan number satisfies the following recurrence relation - * which we will use in this algorithm [1]. - * C(0) = C(1) = 1 - * C(n) = sum(C(i).C(n-i-1)), from i = 0 to n-1 - - * In addition, the n-th Catalan number can be calculated using - * the closed form formula below [1]: - * C(n) = (1 / (n + 1)) * (2n choose n) - - * Sources: - * [1] https://brilliant.org/wiki/catalan-numbers/ - * [2] https://en.wikipedia.org/wiki/Catalan_number -""" - - -def catalan_numbers(upper_limit: int) -> "list[int]": - """ - Return a list of the Catalan number sequence from 0 through `upper_limit`. - - >>> catalan_numbers(5) - [1, 1, 2, 5, 14, 42] - >>> catalan_numbers(2) - [1, 1, 2] - >>> catalan_numbers(-1) - Traceback (most recent call last): - ValueError: Limit for the Catalan sequence must be ≥ 0 - """ - if upper_limit < 0: - raise ValueError("Limit for the Catalan sequence must be ≥ 0") - - catalan_list = [0] * (upper_limit + 1) - - # Base case: C(0) = C(1) = 1 - catalan_list[0] = 1 - if upper_limit > 0: - catalan_list[1] = 1 - - # Recurrence relation: C(i) = sum(C(j).C(i-j-1)), from j = 0 to i - for i in range(2, upper_limit + 1): - for j in range(i): - catalan_list[i] += catalan_list[j] * catalan_list[i - j - 1] - - return catalan_list - - -if __name__ == "__main__": - print("\n********* Catalan Numbers Using Dynamic Programming ************\n") - print("\n*** Enter -1 at any time to quit ***") - print("\nEnter the upper limit (≥ 0) for the Catalan number sequence: ", end="") - try: - while True: - N = int(input().strip()) - if N < 0: - print("\n********* Goodbye!! ************") - break - else: - print(f"The Catalan numbers from 0 through {N} are:") - print(catalan_numbers(N)) - print("Try another upper limit for the sequence: ", end="") - except (NameError, ValueError): - print("\n********* Invalid input, goodbye! ************\n") - - import doctest - - doctest.testmod() diff --git a/dynamic_programming/climbing_stairs.py b/dynamic_programming/climbing_stairs.py deleted file mode 100644 index d6273d025f08..000000000000 --- a/dynamic_programming/climbing_stairs.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 - - -def climb_stairs(number_of_steps: int) -> int: - """ - LeetCdoe No.70: Climbing Stairs - Distinct ways to climb a number_of_steps staircase where each time you can either - climb 1 or 2 steps. - - Args: - number_of_steps: number of steps on the staircase - - Returns: - Distinct ways to climb a number_of_steps staircase - - Raises: - AssertionError: number_of_steps not positive integer - - >>> climb_stairs(3) - 3 - >>> climb_stairs(1) - 1 - >>> climb_stairs(-7) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - AssertionError: number_of_steps needs to be positive integer, your input -7 - """ - assert ( - isinstance(number_of_steps, int) and number_of_steps > 0 - ), f"number_of_steps needs to be positive integer, your input {number_of_steps}" - if number_of_steps == 1: - return 1 - previous, current = 1, 1 - for _ in range(number_of_steps - 1): - current, previous = current + previous, current - return current - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/combination_sum_iv.py b/dynamic_programming/combination_sum_iv.py deleted file mode 100644 index 113c06a27a9e..000000000000 --- a/dynamic_programming/combination_sum_iv.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -Question: -You are given an array of distinct integers and you have to tell how many -different ways of selecting the elements from the array are there such that -the sum of chosen elements is equal to the target number tar. - -Example - -Input: -N = 3 -target = 5 -array = [1, 2, 5] - -Output: -9 - -Approach: -The basic idea is to go over recursively to find the way such that the sum -of chosen elements is “tar”. For every element, we have two choices - 1. Include the element in our set of chosen elements. - 2. Don't include the element in our set of chosen elements. -""" - - -def combination_sum_iv(array: list[int], target: int) -> int: - """ - Function checks the all possible combinations, and returns the count - of possible combination in exponential Time Complexity. - - >>> combination_sum_iv([1,2,5], 5) - 9 - """ - - def count_of_possible_combinations(target: int) -> int: - if target < 0: - return 0 - if target == 0: - return 1 - return sum(count_of_possible_combinations(target - item) for item in array) - - return count_of_possible_combinations(target) - - -def combination_sum_iv_dp_array(array: list[int], target: int) -> int: - """ - Function checks the all possible combinations, and returns the count - of possible combination in O(N^2) Time Complexity as we are using Dynamic - programming array here. - - >>> combination_sum_iv_dp_array([1,2,5], 5) - 9 - """ - - def count_of_possible_combinations_with_dp_array( - target: int, dp_array: list[int] - ) -> int: - if target < 0: - return 0 - if target == 0: - return 1 - if dp_array[target] != -1: - return dp_array[target] - answer = sum( - count_of_possible_combinations_with_dp_array(target - item, dp_array) - for item in array - ) - dp_array[target] = answer - return answer - - dp_array = [-1] * (target + 1) - return count_of_possible_combinations_with_dp_array(target, dp_array) - - -def combination_sum_iv_bottom_up(n: int, array: list[int], target: int) -> int: - """ - Function checks the all possible combinations with using bottom up approach, - and returns the count of possible combination in O(N^2) Time Complexity - as we are using Dynamic programming array here. - - >>> combination_sum_iv_bottom_up(3, [1,2,5], 5) - 9 - """ - - dp_array = [0] * (target + 1) - dp_array[0] = 1 - - for i in range(1, target + 1): - for j in range(n): - if i - array[j] >= 0: - dp_array[i] += dp_array[i - array[j]] - - return dp_array[target] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - target = 5 - array = [1, 2, 5] - print(combination_sum_iv(array, target)) diff --git a/dynamic_programming/edit_distance.py b/dynamic_programming/edit_distance.py deleted file mode 100644 index 774aa047326e..000000000000 --- a/dynamic_programming/edit_distance.py +++ /dev/null @@ -1,103 +0,0 @@ -""" -Author : Turfa Auliarachman -Date : October 12, 2016 - -This is a pure Python implementation of Dynamic Programming solution to the edit -distance problem. - -The problem is : -Given two strings A and B. Find the minimum number of operations to string B such that -A = B. The permitted operations are removal, insertion, and substitution. -""" - - -class EditDistance: - """ - Use : - solver = EditDistance() - editDistanceResult = solver.solve(firstString, secondString) - """ - - def __init__(self): - self.word1 = "" - self.word2 = "" - self.dp = [] - - def __min_dist_top_down_dp(self, m: int, n: int) -> int: - if m == -1: - return n + 1 - elif n == -1: - return m + 1 - elif self.dp[m][n] > -1: - return self.dp[m][n] - else: - if self.word1[m] == self.word2[n]: - self.dp[m][n] = self.__min_dist_top_down_dp(m - 1, n - 1) - else: - insert = self.__min_dist_top_down_dp(m, n - 1) - delete = self.__min_dist_top_down_dp(m - 1, n) - replace = self.__min_dist_top_down_dp(m - 1, n - 1) - self.dp[m][n] = 1 + min(insert, delete, replace) - - return self.dp[m][n] - - def min_dist_top_down(self, word1: str, word2: str) -> int: - """ - >>> EditDistance().min_dist_top_down("intention", "execution") - 5 - >>> EditDistance().min_dist_top_down("intention", "") - 9 - >>> EditDistance().min_dist_top_down("", "") - 0 - """ - self.word1 = word1 - self.word2 = word2 - self.dp = [[-1 for _ in range(len(word2))] for _ in range(len(word1))] - - return self.__min_dist_top_down_dp(len(word1) - 1, len(word2) - 1) - - def min_dist_bottom_up(self, word1: str, word2: str) -> int: - """ - >>> EditDistance().min_dist_bottom_up("intention", "execution") - 5 - >>> EditDistance().min_dist_bottom_up("intention", "") - 9 - >>> EditDistance().min_dist_bottom_up("", "") - 0 - """ - self.word1 = word1 - self.word2 = word2 - m = len(word1) - n = len(word2) - self.dp = [[0 for _ in range(n + 1)] for _ in range(m + 1)] - - for i in range(m + 1): - for j in range(n + 1): - if i == 0: # first string is empty - self.dp[i][j] = j - elif j == 0: # second string is empty - self.dp[i][j] = i - elif word1[i - 1] == word2[j - 1]: # last characters are equal - self.dp[i][j] = self.dp[i - 1][j - 1] - else: - insert = self.dp[i][j - 1] - delete = self.dp[i - 1][j] - replace = self.dp[i - 1][j - 1] - self.dp[i][j] = 1 + min(insert, delete, replace) - return self.dp[m][n] - - -if __name__ == "__main__": - solver = EditDistance() - - print("****************** Testing Edit Distance DP Algorithm ******************") - print() - - S1 = input("Enter the first string: ").strip() - S2 = input("Enter the second string: ").strip() - - print() - print(f"The minimum edit distance is: {solver.min_dist_top_down(S1, S2)}") - print(f"The minimum edit distance is: {solver.min_dist_bottom_up(S1, S2)}") - print() - print("*************** End of Testing Edit Distance DP Algorithm ***************") diff --git a/dynamic_programming/factorial.py b/dynamic_programming/factorial.py deleted file mode 100644 index 1c9c927f5af3..000000000000 --- a/dynamic_programming/factorial.py +++ /dev/null @@ -1,27 +0,0 @@ -# Factorial of a number using memoization - -from functools import lru_cache - - -@lru_cache -def factorial(num: int) -> int: - """ - >>> factorial(7) - 5040 - >>> factorial(-1) - Traceback (most recent call last): - ... - ValueError: Number should not be negative. - >>> [factorial(i) for i in range(10)] - [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880] - """ - if num < 0: - raise ValueError("Number should not be negative.") - - return 1 if num in (0, 1) else num * factorial(num - 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/fast_fibonacci.py b/dynamic_programming/fast_fibonacci.py deleted file mode 100644 index d04a5ac8249b..000000000000 --- a/dynamic_programming/fast_fibonacci.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python3 - -""" -This program calculates the nth Fibonacci number in O(log(n)). -It's possible to calculate F(1_000_000) in less than a second. -""" - -from __future__ import annotations - -import sys - - -def fibonacci(n: int) -> int: - """ - return F(n) - >>> [fibonacci(i) for i in range(13)] - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] - """ - if n < 0: - raise ValueError("Negative arguments are not supported") - return _fib(n)[0] - - -# returns (F(n), F(n-1)) -def _fib(n: int) -> tuple[int, int]: - if n == 0: # (F(0), F(1)) - return (0, 1) - - # F(2n) = F(n)[2F(n+1) - F(n)] - # F(2n+1) = F(n+1)^2+F(n)^2 - a, b = _fib(n // 2) - c = a * (b * 2 - a) - d = a * a + b * b - return (d, c + d) if n % 2 else (c, d) - - -if __name__ == "__main__": - n = int(sys.argv[1]) - print(f"fibonacci({n}) is {fibonacci(n)}") diff --git a/dynamic_programming/fibonacci.py b/dynamic_programming/fibonacci.py deleted file mode 100644 index c102493aa00b..000000000000 --- a/dynamic_programming/fibonacci.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -This is a pure Python implementation of Dynamic Programming solution to the fibonacci -sequence problem. -""" - - -class Fibonacci: - def __init__(self) -> None: - self.sequence = [0, 1] - - def get(self, index: int) -> list: - """ - Get the Fibonacci number of `index`. If the number does not exist, - calculate all missing numbers leading up to the number of `index`. - - >>> Fibonacci().get(10) - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] - >>> Fibonacci().get(5) - [0, 1, 1, 2, 3] - """ - if (difference := index - (len(self.sequence) - 2)) >= 1: - for _ in range(difference): - self.sequence.append(self.sequence[-1] + self.sequence[-2]) - return self.sequence[:index] - - -def main() -> None: - print( - "Fibonacci Series Using Dynamic Programming\n", - "Enter the index of the Fibonacci number you want to calculate ", - "in the prompt below. (To exit enter exit or Ctrl-C)\n", - sep="", - ) - fibonacci = Fibonacci() - - while True: - prompt: str = input(">> ") - if prompt in {"exit", "quit"}: - break - - try: - index: int = int(prompt) - except ValueError: - print("Enter a number or 'exit'") - continue - - print(fibonacci.get(index)) - - -if __name__ == "__main__": - main() diff --git a/dynamic_programming/fizz_buzz.py b/dynamic_programming/fizz_buzz.py deleted file mode 100644 index e29116437a93..000000000000 --- a/dynamic_programming/fizz_buzz.py +++ /dev/null @@ -1,64 +0,0 @@ -# https://en.wikipedia.org/wiki/Fizz_buzz#Programming - - -def fizz_buzz(number: int, iterations: int) -> str: - """ - Plays FizzBuzz. - Prints Fizz if number is a multiple of 3. - Prints Buzz if its a multiple of 5. - Prints FizzBuzz if its a multiple of both 3 and 5 or 15. - Else Prints The Number Itself. - >>> fizz_buzz(1,7) - '1 2 Fizz 4 Buzz Fizz 7 ' - >>> fizz_buzz(1,0) - Traceback (most recent call last): - ... - ValueError: Iterations must be done more than 0 times to play FizzBuzz - >>> fizz_buzz(-5,5) - Traceback (most recent call last): - ... - ValueError: starting number must be - and integer and be more than 0 - >>> fizz_buzz(10,-5) - Traceback (most recent call last): - ... - ValueError: Iterations must be done more than 0 times to play FizzBuzz - >>> fizz_buzz(1.5,5) - Traceback (most recent call last): - ... - ValueError: starting number must be - and integer and be more than 0 - >>> fizz_buzz(1,5.5) - Traceback (most recent call last): - ... - ValueError: iterations must be defined as integers - """ - if not isinstance(iterations, int): - raise ValueError("iterations must be defined as integers") - if not isinstance(number, int) or not number >= 1: - raise ValueError( - """starting number must be - and integer and be more than 0""" - ) - if not iterations >= 1: - raise ValueError("Iterations must be done more than 0 times to play FizzBuzz") - - out = "" - while number <= iterations: - if number % 3 == 0: - out += "Fizz" - if number % 5 == 0: - out += "Buzz" - if 0 not in (number % 3, number % 5): - out += str(number) - - # print(out) - number += 1 - out += " " - return out - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/floyd_warshall.py b/dynamic_programming/floyd_warshall.py deleted file mode 100644 index b92c6667fb5c..000000000000 --- a/dynamic_programming/floyd_warshall.py +++ /dev/null @@ -1,85 +0,0 @@ -import math - - -class Graph: - def __init__(self, n=0): # a graph with Node 0,1,...,N-1 - self.n = n - self.w = [ - [math.inf for j in range(n)] for i in range(n) - ] # adjacency matrix for weight - self.dp = [ - [math.inf for j in range(n)] for i in range(n) - ] # dp[i][j] stores minimum distance from i to j - - def add_edge(self, u, v, w): - """ - Adds a directed edge from node u - to node v with weight w. - - >>> g = Graph(3) - >>> g.add_edge(0, 1, 5) - >>> g.dp[0][1] - 5 - """ - self.dp[u][v] = w - - def floyd_warshall(self): - """ - Computes the shortest paths between all pairs of - nodes using the Floyd-Warshall algorithm. - - >>> g = Graph(3) - >>> g.add_edge(0, 1, 1) - >>> g.add_edge(1, 2, 2) - >>> g.floyd_warshall() - >>> g.show_min(0, 2) - 3 - >>> g.show_min(2, 0) - inf - """ - for k in range(self.n): - for i in range(self.n): - for j in range(self.n): - self.dp[i][j] = min(self.dp[i][j], self.dp[i][k] + self.dp[k][j]) - - def show_min(self, u, v): - """ - Returns the minimum distance from node u to node v. - - >>> g = Graph(3) - >>> g.add_edge(0, 1, 3) - >>> g.add_edge(1, 2, 4) - >>> g.floyd_warshall() - >>> g.show_min(0, 2) - 7 - >>> g.show_min(1, 0) - inf - """ - return self.dp[u][v] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Example usage - graph = Graph(5) - graph.add_edge(0, 2, 9) - graph.add_edge(0, 4, 10) - graph.add_edge(1, 3, 5) - graph.add_edge(2, 3, 7) - graph.add_edge(3, 0, 10) - graph.add_edge(3, 1, 2) - graph.add_edge(3, 2, 1) - graph.add_edge(3, 4, 6) - graph.add_edge(4, 1, 3) - graph.add_edge(4, 2, 4) - graph.add_edge(4, 3, 9) - graph.floyd_warshall() - print( - graph.show_min(1, 4) - ) # Should output the minimum distance from node 1 to node 4 - print( - graph.show_min(0, 3) - ) # Should output the minimum distance from node 0 to node 3 diff --git a/dynamic_programming/integer_partition.py b/dynamic_programming/integer_partition.py deleted file mode 100644 index 145bc29d0fca..000000000000 --- a/dynamic_programming/integer_partition.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -The number of partitions of a number n into at least k parts equals the number of -partitions into exactly k parts plus the number of partitions into at least k-1 parts. -Subtracting 1 from each part of a partition of n into k parts gives a partition of n-k -into k parts. These two facts together are used for this algorithm. -* https://en.wikipedia.org/wiki/Partition_(number_theory) -* https://en.wikipedia.org/wiki/Partition_function_(number_theory) -""" - - -def partition(m: int) -> int: - """ - >>> partition(5) - 7 - >>> partition(7) - 15 - >>> partition(100) - 190569292 - >>> partition(1_000) - 24061467864032622473692149727991 - >>> partition(-7) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> partition(0) - Traceback (most recent call last): - ... - IndexError: list assignment index out of range - >>> partition(7.8) - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - """ - memo: list[list[int]] = [[0 for _ in range(m)] for _ in range(m + 1)] - for i in range(m + 1): - memo[i][0] = 1 - - for n in range(m + 1): - for k in range(1, m): - memo[n][k] += memo[n][k - 1] - if n - k > 0: - memo[n][k] += memo[n - k - 1][k] - - return memo[m][m - 1] - - -if __name__ == "__main__": - import sys - - if len(sys.argv) == 1: - try: - n = int(input("Enter a number: ").strip()) - print(partition(n)) - except ValueError: - print("Please enter a number.") - else: - try: - n = int(sys.argv[1]) - print(partition(n)) - except ValueError: - print("Please pass a number.") diff --git a/dynamic_programming/iterating_through_submasks.py b/dynamic_programming/iterating_through_submasks.py deleted file mode 100644 index 372dd2c74a71..000000000000 --- a/dynamic_programming/iterating_through_submasks.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Author : Syed Faizan (3rd Year Student IIIT Pune) -github : faizan2700 -You are given a bitmask m and you want to efficiently iterate through all of -its submasks. The mask s is submask of m if only bits that were included in -bitmask are set -""" - -from __future__ import annotations - - -def list_of_submasks(mask: int) -> list[int]: - """ - Args: - mask : number which shows mask ( always integer > 0, zero does not have any - submasks ) - - Returns: - all_submasks : the list of submasks of mask (mask s is called submask of mask - m if only bits that were included in original mask are set - - Raises: - AssertionError: mask not positive integer - - >>> list_of_submasks(15) - [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] - >>> list_of_submasks(13) - [13, 12, 9, 8, 5, 4, 1] - >>> list_of_submasks(-7) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - AssertionError: mask needs to be positive integer, your input -7 - >>> list_of_submasks(0) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - AssertionError: mask needs to be positive integer, your input 0 - - """ - - assert ( - isinstance(mask, int) and mask > 0 - ), f"mask needs to be positive integer, your input {mask}" - - """ - first submask iterated will be mask itself then operation will be performed - to get other submasks till we reach empty submask that is zero ( zero is not - included in final submasks list ) - """ - all_submasks = [] - submask = mask - - while submask: - all_submasks.append(submask) - submask = (submask - 1) & mask - - return all_submasks - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/k_means_clustering_tensorflow.py b/dynamic_programming/k_means_clustering_tensorflow.py deleted file mode 100644 index 8d3f6f0dfbcb..000000000000 --- a/dynamic_programming/k_means_clustering_tensorflow.py +++ /dev/null @@ -1,146 +0,0 @@ -from random import shuffle - -import tensorflow as tf -from numpy import array - - -def tf_k_means_cluster(vectors, noofclusters): - """ - K-Means Clustering using TensorFlow. - 'vectors' should be a n*k 2-D NumPy array, where n is the number - of vectors of dimensionality k. - 'noofclusters' should be an integer. - """ - - noofclusters = int(noofclusters) - assert noofclusters < len(vectors) - - # Find out the dimensionality - dim = len(vectors[0]) - - # Will help select random centroids from among the available vectors - vector_indices = list(range(len(vectors))) - shuffle(vector_indices) - - # GRAPH OF COMPUTATION - # We initialize a new graph and set it as the default during each run - # of this algorithm. This ensures that as this function is called - # multiple times, the default graph doesn't keep getting crowded with - # unused ops and Variables from previous function calls. - - graph = tf.Graph() - - with graph.as_default(): - # SESSION OF COMPUTATION - - sess = tf.Session() - - ##CONSTRUCTING THE ELEMENTS OF COMPUTATION - - ##First lets ensure we have a Variable vector for each centroid, - ##initialized to one of the vectors from the available data points - centroids = [ - tf.Variable(vectors[vector_indices[i]]) for i in range(noofclusters) - ] - ##These nodes will assign the centroid Variables the appropriate - ##values - centroid_value = tf.placeholder("float64", [dim]) - cent_assigns = [] - for centroid in centroids: - cent_assigns.append(tf.assign(centroid, centroid_value)) - - ##Variables for cluster assignments of individual vectors(initialized - ##to 0 at first) - assignments = [tf.Variable(0) for i in range(len(vectors))] - ##These nodes will assign an assignment Variable the appropriate - ##value - assignment_value = tf.placeholder("int32") - cluster_assigns = [] - for assignment in assignments: - cluster_assigns.append(tf.assign(assignment, assignment_value)) - - ##Now lets construct the node that will compute the mean - # The placeholder for the input - mean_input = tf.placeholder("float", [None, dim]) - # The Node/op takes the input and computes a mean along the 0th - # dimension, i.e. the list of input vectors - mean_op = tf.reduce_mean(mean_input, 0) - - ##Node for computing Euclidean distances - # Placeholders for input - v1 = tf.placeholder("float", [dim]) - v2 = tf.placeholder("float", [dim]) - euclid_dist = tf.sqrt(tf.reduce_sum(tf.pow(tf.sub(v1, v2), 2))) - - ##This node will figure out which cluster to assign a vector to, - ##based on Euclidean distances of the vector from the centroids. - # Placeholder for input - centroid_distances = tf.placeholder("float", [noofclusters]) - cluster_assignment = tf.argmin(centroid_distances, 0) - - ##INITIALIZING STATE VARIABLES - - ##This will help initialization of all Variables defined with respect - ##to the graph. The Variable-initializer should be defined after - ##all the Variables have been constructed, so that each of them - ##will be included in the initialization. - init_op = tf.initialize_all_variables() - - # Initialize all variables - sess.run(init_op) - - ##CLUSTERING ITERATIONS - - # Now perform the Expectation-Maximization steps of K-Means clustering - # iterations. To keep things simple, we will only do a set number of - # iterations, instead of using a Stopping Criterion. - noofiterations = 100 - for _ in range(noofiterations): - ##EXPECTATION STEP - ##Based on the centroid locations till last iteration, compute - ##the _expected_ centroid assignments. - # Iterate over each vector - for vector_n in range(len(vectors)): - vect = vectors[vector_n] - # Compute Euclidean distance between this vector and each - # centroid. Remember that this list cannot be named - #'centroid_distances', since that is the input to the - # cluster assignment node. - distances = [ - sess.run(euclid_dist, feed_dict={v1: vect, v2: sess.run(centroid)}) - for centroid in centroids - ] - # Now use the cluster assignment node, with the distances - # as the input - assignment = sess.run( - cluster_assignment, feed_dict={centroid_distances: distances} - ) - # Now assign the value to the appropriate state variable - sess.run( - cluster_assigns[vector_n], feed_dict={assignment_value: assignment} - ) - - ##MAXIMIZATION STEP - # Based on the expected state computed from the Expectation Step, - # compute the locations of the centroids so as to maximize the - # overall objective of minimizing within-cluster Sum-of-Squares - for cluster_n in range(noofclusters): - # Collect all the vectors assigned to this cluster - assigned_vects = [ - vectors[i] - for i in range(len(vectors)) - if sess.run(assignments[i]) == cluster_n - ] - # Compute new centroid location - new_location = sess.run( - mean_op, feed_dict={mean_input: array(assigned_vects)} - ) - # Assign value to appropriate variable - sess.run( - cent_assigns[cluster_n], feed_dict={centroid_value: new_location} - ) - - # Return centroids and assignments - centroids = sess.run(centroids) - assignments = sess.run(assignments) - return centroids, assignments diff --git a/dynamic_programming/knapsack.py b/dynamic_programming/knapsack.py deleted file mode 100644 index 489b5ada450a..000000000000 --- a/dynamic_programming/knapsack.py +++ /dev/null @@ -1,151 +0,0 @@ -""" -Given weights and values of n items, put these items in a knapsack of -capacity W to get the maximum total value in the knapsack. - -Note that only the integer weights 0-1 knapsack problem is solvable -using dynamic programming. -""" - - -def mf_knapsack(i, wt, val, j): - """ - This code involves the concept of memory functions. Here we solve the subproblems - which are needed unlike the below example - F is a 2D array with -1s filled up - """ - global f # a global dp table for knapsack - if f[i][j] < 0: - if j < wt[i - 1]: - val = mf_knapsack(i - 1, wt, val, j) - else: - val = max( - mf_knapsack(i - 1, wt, val, j), - mf_knapsack(i - 1, wt, val, j - wt[i - 1]) + val[i - 1], - ) - f[i][j] = val - return f[i][j] - - -def knapsack(w, wt, val, n): - dp = [[0] * (w + 1) for _ in range(n + 1)] - - for i in range(1, n + 1): - for w_ in range(1, w + 1): - if wt[i - 1] <= w_: - dp[i][w_] = max(val[i - 1] + dp[i - 1][w_ - wt[i - 1]], dp[i - 1][w_]) - else: - dp[i][w_] = dp[i - 1][w_] - - return dp[n][w_], dp - - -def knapsack_with_example_solution(w: int, wt: list, val: list): - """ - Solves the integer weights knapsack problem returns one of - the several possible optimal subsets. - - Parameters - --------- - - W: int, the total maximum weight for the given knapsack problem. - wt: list, the vector of weights for all items where wt[i] is the weight - of the i-th item. - val: list, the vector of values for all items where val[i] is the value - of the i-th item - - Returns - ------- - optimal_val: float, the optimal value for the given knapsack problem - example_optional_set: set, the indices of one of the optimal subsets - which gave rise to the optimal value. - - Examples - ------- - >>> knapsack_with_example_solution(10, [1, 3, 5, 2], [10, 20, 100, 22]) - (142, {2, 3, 4}) - >>> knapsack_with_example_solution(6, [4, 3, 2, 3], [3, 2, 4, 4]) - (8, {3, 4}) - >>> knapsack_with_example_solution(6, [4, 3, 2, 3], [3, 2, 4]) - Traceback (most recent call last): - ... - ValueError: The number of weights must be the same as the number of values. - But got 4 weights and 3 values - """ - if not (isinstance(wt, (list, tuple)) and isinstance(val, (list, tuple))): - raise ValueError( - "Both the weights and values vectors must be either lists or tuples" - ) - - num_items = len(wt) - if num_items != len(val): - msg = ( - "The number of weights must be the same as the number of values.\n" - f"But got {num_items} weights and {len(val)} values" - ) - raise ValueError(msg) - for i in range(num_items): - if not isinstance(wt[i], int): - msg = ( - "All weights must be integers but got weight of " - f"type {type(wt[i])} at index {i}" - ) - raise TypeError(msg) - - optimal_val, dp_table = knapsack(w, wt, val, num_items) - example_optional_set: set = set() - _construct_solution(dp_table, wt, num_items, w, example_optional_set) - - return optimal_val, example_optional_set - - -def _construct_solution(dp: list, wt: list, i: int, j: int, optimal_set: set): - """ - Recursively reconstructs one of the optimal subsets given - a filled DP table and the vector of weights - - Parameters - --------- - - dp: list of list, the table of a solved integer weight dynamic programming problem - - wt: list or tuple, the vector of weights of the items - i: int, the index of the item under consideration - j: int, the current possible maximum weight - optimal_set: set, the optimal subset so far. This gets modified by the function. - - Returns - ------- - None - - """ - # for the current item i at a maximum weight j to be part of an optimal subset, - # the optimal value at (i, j) must be greater than the optimal value at (i-1, j). - # where i - 1 means considering only the previous items at the given maximum weight - if i > 0 and j > 0: - if dp[i - 1][j] == dp[i][j]: - _construct_solution(dp, wt, i - 1, j, optimal_set) - else: - optimal_set.add(i) - _construct_solution(dp, wt, i - 1, j - wt[i - 1], optimal_set) - - -if __name__ == "__main__": - """ - Adding test case for knapsack - """ - val = [3, 2, 4, 4] - wt = [4, 3, 2, 3] - n = 4 - w = 6 - f = [[0] * (w + 1)] + [[0] + [-1] * (w + 1) for _ in range(n + 1)] - optimal_solution, _ = knapsack(w, wt, val, n) - print(optimal_solution) - print(mf_knapsack(n, wt, val, w)) # switched the n and w - - # testing the dynamic programming problem with example - # the optimal subset for the above example are items 3 and 4 - optimal_solution, optimal_subset = knapsack_with_example_solution(w, wt, val) - assert optimal_solution == 8 - assert optimal_subset == {3, 4} - print("optimal_value = ", optimal_solution) - print("An optimal subset corresponding to the optimal value", optimal_subset) diff --git a/dynamic_programming/largest_divisible_subset.py b/dynamic_programming/largest_divisible_subset.py deleted file mode 100644 index db38636e29db..000000000000 --- a/dynamic_programming/largest_divisible_subset.py +++ /dev/null @@ -1,74 +0,0 @@ -from __future__ import annotations - - -def largest_divisible_subset(items: list[int]) -> list[int]: - """ - Algorithm to find the biggest subset in the given array such that for any 2 elements - x and y in the subset, either x divides y or y divides x. - >>> largest_divisible_subset([1, 16, 7, 8, 4]) - [16, 8, 4, 1] - >>> largest_divisible_subset([1, 2, 3]) - [2, 1] - >>> largest_divisible_subset([-1, -2, -3]) - [-3] - >>> largest_divisible_subset([1, 2, 4, 8]) - [8, 4, 2, 1] - >>> largest_divisible_subset((1, 2, 4, 8)) - [8, 4, 2, 1] - >>> largest_divisible_subset([1, 1, 1]) - [1, 1, 1] - >>> largest_divisible_subset([0, 0, 0]) - [0, 0, 0] - >>> largest_divisible_subset([-1, -1, -1]) - [-1, -1, -1] - >>> largest_divisible_subset([]) - [] - """ - # Sort the array in ascending order as the sequence does not matter we only have to - # pick up a subset. - items = sorted(items) - - number_of_items = len(items) - - # Initialize memo with 1s and hash with increasing numbers - memo = [1] * number_of_items - hash_array = list(range(number_of_items)) - - # Iterate through the array - for i, item in enumerate(items): - for prev_index in range(i): - if ((items[prev_index] != 0 and item % items[prev_index]) == 0) and ( - (1 + memo[prev_index]) > memo[i] - ): - memo[i] = 1 + memo[prev_index] - hash_array[i] = prev_index - - ans = -1 - last_index = -1 - - # Find the maximum length and its corresponding index - for i, memo_item in enumerate(memo): - if memo_item > ans: - ans = memo_item - last_index = i - - # Reconstruct the divisible subset - if last_index == -1: - return [] - result = [items[last_index]] - while hash_array[last_index] != last_index: - last_index = hash_array[last_index] - result.append(items[last_index]) - - return result - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - items = [1, 16, 7, 8, 4] - print( - f"The longest divisible subset of {items} is {largest_divisible_subset(items)}." - ) diff --git a/dynamic_programming/longest_common_subsequence.py b/dynamic_programming/longest_common_subsequence.py deleted file mode 100644 index 4a6c880aff61..000000000000 --- a/dynamic_programming/longest_common_subsequence.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -LCS Problem Statement: Given two sequences, find the length of longest subsequence -present in both of them. A subsequence is a sequence that appears in the same relative -order, but not necessarily continuous. -Example:"abc", "abg" are subsequences of "abcdefgh". -""" - - -def longest_common_subsequence(x: str, y: str): - """ - Finds the longest common subsequence between two strings. Also returns the - The subsequence found - - Parameters - ---------- - - x: str, one of the strings - y: str, the other string - - Returns - ------- - L[m][n]: int, the length of the longest subsequence. Also equal to len(seq) - Seq: str, the subsequence found - - >>> longest_common_subsequence("programming", "gaming") - (6, 'gaming') - >>> longest_common_subsequence("physics", "smartphone") - (2, 'ph') - >>> longest_common_subsequence("computer", "food") - (1, 'o') - >>> longest_common_subsequence("", "abc") # One string is empty - (0, '') - >>> longest_common_subsequence("abc", "") # Other string is empty - (0, '') - >>> longest_common_subsequence("", "") # Both strings are empty - (0, '') - >>> longest_common_subsequence("abc", "def") # No common subsequence - (0, '') - >>> longest_common_subsequence("abc", "abc") # Identical strings - (3, 'abc') - >>> longest_common_subsequence("a", "a") # Single character match - (1, 'a') - >>> longest_common_subsequence("a", "b") # Single character no match - (0, '') - >>> longest_common_subsequence("abcdef", "ace") # Interleaved subsequence - (3, 'ace') - >>> longest_common_subsequence("ABCD", "ACBD") # No repeated characters - (3, 'ABD') - """ - # find the length of strings - - assert x is not None - assert y is not None - - m = len(x) - n = len(y) - - # declaring the array for storing the dp values - dp = [[0] * (n + 1) for _ in range(m + 1)] - - for i in range(1, m + 1): - for j in range(1, n + 1): - match = 1 if x[i - 1] == y[j - 1] else 0 - - dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1] + match) - - seq = "" - i, j = m, n - while i > 0 and j > 0: - match = 1 if x[i - 1] == y[j - 1] else 0 - - if dp[i][j] == dp[i - 1][j - 1] + match: - if match == 1: - seq = x[i - 1] + seq - i -= 1 - j -= 1 - elif dp[i][j] == dp[i - 1][j]: - i -= 1 - else: - j -= 1 - - return dp[m][n], seq - - -if __name__ == "__main__": - a = "AGGTAB" - b = "GXTXAYB" - expected_ln = 4 - expected_subseq = "GTAB" - - ln, subseq = longest_common_subsequence(a, b) - print("len =", ln, ", sub-sequence =", subseq) - import doctest - - doctest.testmod() diff --git a/dynamic_programming/longest_common_substring.py b/dynamic_programming/longest_common_substring.py deleted file mode 100644 index e2f944a5e336..000000000000 --- a/dynamic_programming/longest_common_substring.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Longest Common Substring Problem Statement: Given two sequences, find the -longest common substring present in both of them. A substring is -necessarily continuous. -Example: "abcdef" and "xabded" have two longest common substrings, "ab" or "de". -Therefore, algorithm should return any one of them. -""" - - -def longest_common_substring(text1: str, text2: str) -> str: - """ - Finds the longest common substring between two strings. - >>> longest_common_substring("", "") - '' - >>> longest_common_substring("a","") - '' - >>> longest_common_substring("", "a") - '' - >>> longest_common_substring("a", "a") - 'a' - >>> longest_common_substring("abcdef", "bcd") - 'bcd' - >>> longest_common_substring("abcdef", "xabded") - 'ab' - >>> longest_common_substring("GeeksforGeeks", "GeeksQuiz") - 'Geeks' - >>> longest_common_substring("abcdxyz", "xyzabcd") - 'abcd' - >>> longest_common_substring("zxabcdezy", "yzabcdezx") - 'abcdez' - >>> longest_common_substring("OldSite:GeeksforGeeks.org", "NewSite:GeeksQuiz.com") - 'Site:Geeks' - >>> longest_common_substring(1, 1) - Traceback (most recent call last): - ... - ValueError: longest_common_substring() takes two strings for inputs - """ - - if not (isinstance(text1, str) and isinstance(text2, str)): - raise ValueError("longest_common_substring() takes two strings for inputs") - - text1_length = len(text1) - text2_length = len(text2) - - dp = [[0] * (text2_length + 1) for _ in range(text1_length + 1)] - ans_index = 0 - ans_length = 0 - - for i in range(1, text1_length + 1): - for j in range(1, text2_length + 1): - if text1[i - 1] == text2[j - 1]: - dp[i][j] = 1 + dp[i - 1][j - 1] - if dp[i][j] > ans_length: - ans_index = i - ans_length = dp[i][j] - - return text1[ans_index - ans_length : ans_index] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/longest_increasing_subsequence.py b/dynamic_programming/longest_increasing_subsequence.py deleted file mode 100644 index 2a78e2e7ad1d..000000000000 --- a/dynamic_programming/longest_increasing_subsequence.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Author : Mehdi ALAOUI - -This is a pure Python implementation of Dynamic Programming solution to the longest -increasing subsequence of a given sequence. - -The problem is : -Given an array, to find the longest and increasing sub-array in that given array and -return it. -Example: [10, 22, 9, 33, 21, 50, 41, 60, 80] as input will return - [10, 22, 33, 41, 60, 80] as output -""" - -from __future__ import annotations - - -def longest_subsequence(array: list[int]) -> list[int]: # This function is recursive - """ - Some examples - >>> longest_subsequence([10, 22, 9, 33, 21, 50, 41, 60, 80]) - [10, 22, 33, 41, 60, 80] - >>> longest_subsequence([4, 8, 7, 5, 1, 12, 2, 3, 9]) - [1, 2, 3, 9] - >>> longest_subsequence([9, 8, 7, 6, 5, 7]) - [8] - >>> longest_subsequence([1, 1, 1]) - [1, 1, 1] - >>> longest_subsequence([]) - [] - """ - array_length = len(array) - # If the array contains only one element, we return it (it's the stop condition of - # recursion) - if array_length <= 1: - return array - # Else - pivot = array[0] - is_found = False - i = 1 - longest_subseq: list[int] = [] - while not is_found and i < array_length: - if array[i] < pivot: - is_found = True - temp_array = [element for element in array[i:] if element >= array[i]] - temp_array = longest_subsequence(temp_array) - if len(temp_array) > len(longest_subseq): - longest_subseq = temp_array - else: - i += 1 - - temp_array = [element for element in array[1:] if element >= pivot] - temp_array = [pivot, *longest_subsequence(temp_array)] - if len(temp_array) > len(longest_subseq): - return temp_array - else: - return longest_subseq - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/longest_increasing_subsequence_o_nlogn.py b/dynamic_programming/longest_increasing_subsequence_o_nlogn.py deleted file mode 100644 index bbc7a62b6b5c..000000000000 --- a/dynamic_programming/longest_increasing_subsequence_o_nlogn.py +++ /dev/null @@ -1,55 +0,0 @@ -############################# -# Author: Aravind Kashyap -# File: lis.py -# comments: This programme outputs the Longest Strictly Increasing Subsequence in -# O(NLogN) Where N is the Number of elements in the list -############################# -from __future__ import annotations - - -def ceil_index(v, left, right, key): - while right - left > 1: - middle = (left + right) // 2 - if v[middle] >= key: - right = middle - else: - left = middle - return right - - -def longest_increasing_subsequence_length(v: list[int]) -> int: - """ - >>> longest_increasing_subsequence_length([2, 5, 3, 7, 11, 8, 10, 13, 6]) - 6 - >>> longest_increasing_subsequence_length([]) - 0 - >>> longest_increasing_subsequence_length([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, - ... 3, 11, 7, 15]) - 6 - >>> longest_increasing_subsequence_length([5, 4, 3, 2, 1]) - 1 - """ - if len(v) == 0: - return 0 - - tail = [0] * len(v) - length = 1 - - tail[0] = v[0] - - for i in range(1, len(v)): - if v[i] < tail[0]: - tail[0] = v[i] - elif v[i] > tail[length - 1]: - tail[length] = v[i] - length += 1 - else: - tail[ceil_index(tail, -1, length - 1, v[i])] = v[i] - - return length - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/longest_palindromic_subsequence.py b/dynamic_programming/longest_palindromic_subsequence.py deleted file mode 100644 index a60d95e460e6..000000000000 --- a/dynamic_programming/longest_palindromic_subsequence.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -author: Sanket Kittad -Given a string s, find the longest palindromic subsequence's length in s. -Input: s = "bbbab" -Output: 4 -Explanation: One possible longest palindromic subsequence is "bbbb". -Leetcode link: https://leetcode.com/problems/longest-palindromic-subsequence/description/ -""" - - -def longest_palindromic_subsequence(input_string: str) -> int: - """ - This function returns the longest palindromic subsequence in a string - >>> longest_palindromic_subsequence("bbbab") - 4 - >>> longest_palindromic_subsequence("bbabcbcab") - 7 - """ - n = len(input_string) - rev = input_string[::-1] - m = len(rev) - dp = [[-1] * (m + 1) for i in range(n + 1)] - for i in range(n + 1): - dp[i][0] = 0 - for i in range(m + 1): - dp[0][i] = 0 - - # create and initialise dp array - for i in range(1, n + 1): - for j in range(1, m + 1): - # If characters at i and j are the same - # include them in the palindromic subsequence - if input_string[i - 1] == rev[j - 1]: - dp[i][j] = 1 + dp[i - 1][j - 1] - else: - dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) - - return dp[n][m] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/matrix_chain_multiplication.py b/dynamic_programming/matrix_chain_multiplication.py deleted file mode 100644 index da6e525ce816..000000000000 --- a/dynamic_programming/matrix_chain_multiplication.py +++ /dev/null @@ -1,144 +0,0 @@ -""" -Find the minimum number of multiplications needed to multiply chain of matrices. -Reference: https://www.geeksforgeeks.org/matrix-chain-multiplication-dp-8/ - -The algorithm has interesting real-world applications. Example: -1. Image transformations in Computer Graphics as images are composed of matrix. -2. Solve complex polynomial equations in the field of algebra using least processing - power. -3. Calculate overall impact of macroeconomic decisions as economic equations involve a - number of variables. -4. Self-driving car navigation can be made more accurate as matrix multiplication can - accurately determine position and orientation of obstacles in short time. - -Python doctests can be run with the following command: -python -m doctest -v matrix_chain_multiply.py - -Given a sequence arr[] that represents chain of 2D matrices such that the dimension of -the ith matrix is arr[i-1]*arr[i]. -So suppose arr = [40, 20, 30, 10, 30] means we have 4 matrices of dimensions -40*20, 20*30, 30*10 and 10*30. - -matrix_chain_multiply() returns an integer denoting minimum number of multiplications to -multiply the chain. - -We do not need to perform actual multiplication here. -We only need to decide the order in which to perform the multiplication. - -Hints: -1. Number of multiplications (ie cost) to multiply 2 matrices -of size m*p and p*n is m*p*n. -2. Cost of matrix multiplication is associative ie (M1*M2)*M3 != M1*(M2*M3) -3. Matrix multiplication is not commutative. So, M1*M2 does not mean M2*M1 can be done. -4. To determine the required order, we can try different combinations. -So, this problem has overlapping sub-problems and can be solved using recursion. -We use Dynamic Programming for optimal time complexity. - -Example input: -arr = [40, 20, 30, 10, 30] -output: 26000 -""" - -from collections.abc import Iterator -from contextlib import contextmanager -from functools import cache -from sys import maxsize - - -def matrix_chain_multiply(arr: list[int]) -> int: - """ - Find the minimum number of multiplcations required to multiply the chain of matrices - - Args: - arr: The input array of integers. - - Returns: - Minimum number of multiplications needed to multiply the chain - - Examples: - >>> matrix_chain_multiply([1, 2, 3, 4, 3]) - 30 - >>> matrix_chain_multiply([10]) - 0 - >>> matrix_chain_multiply([10, 20]) - 0 - >>> matrix_chain_multiply([19, 2, 19]) - 722 - >>> matrix_chain_multiply(list(range(1, 100))) - 323398 - - # >>> matrix_chain_multiply(list(range(1, 251))) - # 2626798 - """ - if len(arr) < 2: - return 0 - # initialising 2D dp matrix - n = len(arr) - dp = [[maxsize for j in range(n)] for i in range(n)] - # we want minimum cost of multiplication of matrices - # of dimension (i*k) and (k*j). This cost is arr[i-1]*arr[k]*arr[j]. - for i in range(n - 1, 0, -1): - for j in range(i, n): - if i == j: - dp[i][j] = 0 - continue - for k in range(i, j): - dp[i][j] = min( - dp[i][j], dp[i][k] + dp[k + 1][j] + arr[i - 1] * arr[k] * arr[j] - ) - - return dp[1][n - 1] - - -def matrix_chain_order(dims: list[int]) -> int: - """ - Source: https://en.wikipedia.org/wiki/Matrix_chain_multiplication - The dynamic programming solution is faster than cached the recursive solution and - can handle larger inputs. - >>> matrix_chain_order([1, 2, 3, 4, 3]) - 30 - >>> matrix_chain_order([10]) - 0 - >>> matrix_chain_order([10, 20]) - 0 - >>> matrix_chain_order([19, 2, 19]) - 722 - >>> matrix_chain_order(list(range(1, 100))) - 323398 - - # >>> matrix_chain_order(list(range(1, 251))) # Max before RecursionError is raised - # 2626798 - """ - - @cache - def a(i: int, j: int) -> int: - return min( - (a(i, k) + dims[i] * dims[k] * dims[j] + a(k, j) for k in range(i + 1, j)), - default=0, - ) - - return a(0, len(dims) - 1) - - -@contextmanager -def elapsed_time(msg: str) -> Iterator: - # print(f"Starting: {msg}") - from time import perf_counter_ns - - start = perf_counter_ns() - yield - print(f"Finished: {msg} in {(perf_counter_ns() - start) / 10 ** 9} seconds.") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - with elapsed_time("matrix_chain_order"): - print(f"{matrix_chain_order(list(range(1, 251))) = }") - with elapsed_time("matrix_chain_multiply"): - print(f"{matrix_chain_multiply(list(range(1, 251))) = }") - with elapsed_time("matrix_chain_order"): - print(f"{matrix_chain_order(list(range(1, 251))) = }") - with elapsed_time("matrix_chain_multiply"): - print(f"{matrix_chain_multiply(list(range(1, 251))) = }") diff --git a/dynamic_programming/matrix_chain_order.py b/dynamic_programming/matrix_chain_order.py deleted file mode 100644 index d612aea7b99d..000000000000 --- a/dynamic_programming/matrix_chain_order.py +++ /dev/null @@ -1,54 +0,0 @@ -import sys - -""" -Dynamic Programming -Implementation of Matrix Chain Multiplication -Time Complexity: O(n^3) -Space Complexity: O(n^2) -""" - - -def matrix_chain_order(array): - n = len(array) - matrix = [[0 for x in range(n)] for x in range(n)] - sol = [[0 for x in range(n)] for x in range(n)] - - for chain_length in range(2, n): - for a in range(1, n - chain_length + 1): - b = a + chain_length - 1 - - matrix[a][b] = sys.maxsize - for c in range(a, b): - cost = ( - matrix[a][c] + matrix[c + 1][b] + array[a - 1] * array[c] * array[b] - ) - if cost < matrix[a][b]: - matrix[a][b] = cost - sol[a][b] = c - return matrix, sol - - -# Print order of matrix with Ai as Matrix -def print_optiomal_solution(optimal_solution, i, j): - if i == j: - print("A" + str(i), end=" ") - else: - print("(", end=" ") - print_optiomal_solution(optimal_solution, i, optimal_solution[i][j]) - print_optiomal_solution(optimal_solution, optimal_solution[i][j] + 1, j) - print(")", end=" ") - - -def main(): - array = [30, 35, 15, 5, 10, 20, 25] - n = len(array) - # Size of matrix created from above array will be - # 30*35 35*15 15*5 5*10 10*20 20*25 - matrix, optimal_solution = matrix_chain_order(array) - - print("No. of Operation required: " + str(matrix[1][n - 1])) - print_optiomal_solution(optimal_solution, 1, n - 1) - - -if __name__ == "__main__": - main() diff --git a/dynamic_programming/max_non_adjacent_sum.py b/dynamic_programming/max_non_adjacent_sum.py deleted file mode 100644 index e3cc23f4983e..000000000000 --- a/dynamic_programming/max_non_adjacent_sum.py +++ /dev/null @@ -1,34 +0,0 @@ -# Video Explanation: https://www.youtube.com/watch?v=6w60Zi1NtL8&feature=emb_logo - -from __future__ import annotations - - -def maximum_non_adjacent_sum(nums: list[int]) -> int: - """ - Find the maximum non-adjacent sum of the integers in the nums input list - - >>> maximum_non_adjacent_sum([1, 2, 3]) - 4 - >>> maximum_non_adjacent_sum([1, 5, 3, 7, 2, 2, 6]) - 18 - >>> maximum_non_adjacent_sum([-1, -5, -3, -7, -2, -2, -6]) - 0 - >>> maximum_non_adjacent_sum([499, 500, -3, -7, -2, -2, -6]) - 500 - """ - if not nums: - return 0 - max_including = nums[0] - max_excluding = 0 - for num in nums[1:]: - max_including, max_excluding = ( - max_excluding + num, - max(max_including, max_excluding), - ) - return max(max_excluding, max_including) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/max_product_subarray.py b/dynamic_programming/max_product_subarray.py deleted file mode 100644 index 425859bc03e3..000000000000 --- a/dynamic_programming/max_product_subarray.py +++ /dev/null @@ -1,53 +0,0 @@ -def max_product_subarray(numbers: list[int]) -> int: - """ - Returns the maximum product that can be obtained by multiplying a - contiguous subarray of the given integer list `nums`. - - Example: - >>> max_product_subarray([2, 3, -2, 4]) - 6 - >>> max_product_subarray((-2, 0, -1)) - 0 - >>> max_product_subarray([2, 3, -2, 4, -1]) - 48 - >>> max_product_subarray([-1]) - -1 - >>> max_product_subarray([0]) - 0 - >>> max_product_subarray([]) - 0 - >>> max_product_subarray("") - 0 - >>> max_product_subarray(None) - 0 - >>> max_product_subarray([2, 3, -2, 4.5, -1]) - Traceback (most recent call last): - ... - ValueError: numbers must be an iterable of integers - >>> max_product_subarray("ABC") - Traceback (most recent call last): - ... - ValueError: numbers must be an iterable of integers - """ - if not numbers: - return 0 - - if not isinstance(numbers, (list, tuple)) or not all( - isinstance(number, int) for number in numbers - ): - raise ValueError("numbers must be an iterable of integers") - - max_till_now = min_till_now = max_prod = numbers[0] - - for i in range(1, len(numbers)): - # update the maximum and minimum subarray products - number = numbers[i] - if number < 0: - max_till_now, min_till_now = min_till_now, max_till_now - max_till_now = max(number, max_till_now * number) - min_till_now = min(number, min_till_now * number) - - # update the maximum product found till now - max_prod = max(max_prod, max_till_now) - - return max_prod diff --git a/dynamic_programming/max_subarray_sum.py b/dynamic_programming/max_subarray_sum.py deleted file mode 100644 index 8c1dc0889a85..000000000000 --- a/dynamic_programming/max_subarray_sum.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -The maximum subarray sum problem is the task of finding the maximum sum that can be -obtained from a contiguous subarray within a given array of numbers. For example, given -the array [-2, 1, -3, 4, -1, 2, 1, -5, 4], the contiguous subarray with the maximum sum -is [4, -1, 2, 1], so the maximum subarray sum is 6. - -Kadane's algorithm is a simple dynamic programming algorithm that solves the maximum -subarray sum problem in O(n) time and O(1) space. - -Reference: https://en.wikipedia.org/wiki/Maximum_subarray_problem -""" - -from collections.abc import Sequence - - -def max_subarray_sum( - arr: Sequence[float], allow_empty_subarrays: bool = False -) -> float: - """ - Solves the maximum subarray sum problem using Kadane's algorithm. - :param arr: the given array of numbers - :param allow_empty_subarrays: if True, then the algorithm considers empty subarrays - - >>> max_subarray_sum([2, 8, 9]) - 19 - >>> max_subarray_sum([0, 0]) - 0 - >>> max_subarray_sum([-1.0, 0.0, 1.0]) - 1.0 - >>> max_subarray_sum([1, 2, 3, 4, -2]) - 10 - >>> max_subarray_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4]) - 6 - >>> max_subarray_sum([2, 3, -9, 8, -2]) - 8 - >>> max_subarray_sum([-2, -3, -1, -4, -6]) - -1 - >>> max_subarray_sum([-2, -3, -1, -4, -6], allow_empty_subarrays=True) - 0 - >>> max_subarray_sum([]) - 0 - """ - if not arr: - return 0 - - max_sum = 0 if allow_empty_subarrays else float("-inf") - curr_sum = 0.0 - for num in arr: - curr_sum = max(0 if allow_empty_subarrays else num, curr_sum + num) - max_sum = max(max_sum, curr_sum) - - return max_sum - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4] - print(f"{max_subarray_sum(nums) = }") diff --git a/dynamic_programming/min_distance_up_bottom.py b/dynamic_programming/min_distance_up_bottom.py deleted file mode 100644 index 6b38a41a1c0a..000000000000 --- a/dynamic_programming/min_distance_up_bottom.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : October 14, 2022 -This is an implementation of the up-bottom approach to find edit distance. -The implementation was tested on Leetcode: https://leetcode.com/problems/edit-distance/ - -Levinstein distance -Dynamic Programming: up -> down. -""" - -import functools - - -def min_distance_up_bottom(word1: str, word2: str) -> int: - """ - >>> min_distance_up_bottom("intention", "execution") - 5 - >>> min_distance_up_bottom("intention", "") - 9 - >>> min_distance_up_bottom("", "") - 0 - >>> min_distance_up_bottom("zooicoarchaeologist", "zoologist") - 10 - """ - len_word1 = len(word1) - len_word2 = len(word2) - - @functools.cache - def min_distance(index1: int, index2: int) -> int: - # if first word index overflows - delete all from the second word - if index1 >= len_word1: - return len_word2 - index2 - # if second word index overflows - delete all from the first word - if index2 >= len_word2: - return len_word1 - index1 - diff = int(word1[index1] != word2[index2]) # current letters not identical - return min( - 1 + min_distance(index1 + 1, index2), - 1 + min_distance(index1, index2 + 1), - diff + min_distance(index1 + 1, index2 + 1), - ) - - return min_distance(0, 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/minimum_coin_change.py b/dynamic_programming/minimum_coin_change.py deleted file mode 100644 index 848bd654d3b9..000000000000 --- a/dynamic_programming/minimum_coin_change.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -You have m types of coins available in infinite quantities -where the value of each coins is given in the array S=[S0,... Sm-1] -Can you determine number of ways of making change for n units using -the given types of coins? -https://www.hackerrank.com/challenges/coin-change/problem -""" - - -def dp_count(s, n): - """ - >>> dp_count([1, 2, 3], 4) - 4 - >>> dp_count([1, 2, 3], 7) - 8 - >>> dp_count([2, 5, 3, 6], 10) - 5 - >>> dp_count([10], 99) - 0 - >>> dp_count([4, 5, 6], 0) - 1 - >>> dp_count([1, 2, 3], -5) - 0 - """ - if n < 0: - return 0 - # table[i] represents the number of ways to get to amount i - table = [0] * (n + 1) - - # There is exactly 1 way to get to zero(You pick no coins). - table[0] = 1 - - # Pick all coins one by one and update table[] values - # after the index greater than or equal to the value of the - # picked coin - for coin_val in s: - for j in range(coin_val, n + 1): - table[j] += table[j - coin_val] - - return table[n] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/minimum_cost_path.py b/dynamic_programming/minimum_cost_path.py deleted file mode 100644 index 3ad24b5528d1..000000000000 --- a/dynamic_programming/minimum_cost_path.py +++ /dev/null @@ -1,37 +0,0 @@ -# Youtube Explanation: https://www.youtube.com/watch?v=lBRtnuxg-gU - -from __future__ import annotations - - -def minimum_cost_path(matrix: list[list[int]]) -> int: - """ - Find the minimum cost traced by all possible paths from top left to bottom right in - a given matrix - - >>> minimum_cost_path([[2, 1], [3, 1], [4, 2]]) - 6 - - >>> minimum_cost_path([[2, 1, 4], [2, 1, 3], [3, 2, 1]]) - 7 - """ - - # preprocessing the first row - for i in range(1, len(matrix[0])): - matrix[0][i] += matrix[0][i - 1] - - # preprocessing the first column - for i in range(1, len(matrix)): - matrix[i][0] += matrix[i - 1][0] - - # updating the path cost for current position - for i in range(1, len(matrix)): - for j in range(1, len(matrix[0])): - matrix[i][j] += min(matrix[i - 1][j], matrix[i][j - 1]) - - return matrix[-1][-1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/minimum_partition.py b/dynamic_programming/minimum_partition.py deleted file mode 100644 index 748c0599efb0..000000000000 --- a/dynamic_programming/minimum_partition.py +++ /dev/null @@ -1,76 +0,0 @@ -""" -Partition a set into two subsets such that the difference of subset sums is minimum -""" - - -def find_min(numbers: list[int]) -> int: - """ - >>> find_min([1, 2, 3, 4, 5]) - 1 - >>> find_min([5, 5, 5, 5, 5]) - 5 - >>> find_min([5, 5, 5, 5]) - 0 - >>> find_min([3]) - 3 - >>> find_min([]) - 0 - >>> find_min([1, 2, 3, 4]) - 0 - >>> find_min([0, 0, 0, 0]) - 0 - >>> find_min([-1, -5, 5, 1]) - 0 - >>> find_min([-1, -5, 5, 1]) - 0 - >>> find_min([9, 9, 9, 9, 9]) - 9 - >>> find_min([1, 5, 10, 3]) - 1 - >>> find_min([-1, 0, 1]) - 0 - >>> find_min(range(10, 0, -1)) - 1 - >>> find_min([-1]) - Traceback (most recent call last): - -- - IndexError: list assignment index out of range - >>> find_min([0, 0, 0, 1, 2, -4]) - Traceback (most recent call last): - ... - IndexError: list assignment index out of range - >>> find_min([-1, -5, -10, -3]) - Traceback (most recent call last): - ... - IndexError: list assignment index out of range - """ - n = len(numbers) - s = sum(numbers) - - dp = [[False for x in range(s + 1)] for y in range(n + 1)] - - for i in range(n + 1): - dp[i][0] = True - - for i in range(1, s + 1): - dp[0][i] = False - - for i in range(1, n + 1): - for j in range(1, s + 1): - dp[i][j] = dp[i - 1][j] - - if numbers[i - 1] <= j: - dp[i][j] = dp[i][j] or dp[i - 1][j - numbers[i - 1]] - - for j in range(int(s / 2), -1, -1): - if dp[n][j] is True: - diff = s - 2 * j - break - - return diff - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/dynamic_programming/minimum_size_subarray_sum.py b/dynamic_programming/minimum_size_subarray_sum.py deleted file mode 100644 index 3868d73535fb..000000000000 --- a/dynamic_programming/minimum_size_subarray_sum.py +++ /dev/null @@ -1,62 +0,0 @@ -import sys - - -def minimum_subarray_sum(target: int, numbers: list[int]) -> int: - """ - Return the length of the shortest contiguous subarray in a list of numbers whose sum - is at least target. Reference: https://stackoverflow.com/questions/8269916 - - >>> minimum_subarray_sum(7, [2, 3, 1, 2, 4, 3]) - 2 - >>> minimum_subarray_sum(7, [2, 3, -1, 2, 4, -3]) - 4 - >>> minimum_subarray_sum(11, [1, 1, 1, 1, 1, 1, 1, 1]) - 0 - >>> minimum_subarray_sum(10, [1, 2, 3, 4, 5, 6, 7]) - 2 - >>> minimum_subarray_sum(5, [1, 1, 1, 1, 1, 5]) - 1 - >>> minimum_subarray_sum(0, []) - 0 - >>> minimum_subarray_sum(0, [1, 2, 3]) - 1 - >>> minimum_subarray_sum(10, [10, 20, 30]) - 1 - >>> minimum_subarray_sum(7, [1, 1, 1, 1, 1, 1, 10]) - 1 - >>> minimum_subarray_sum(6, []) - 0 - >>> minimum_subarray_sum(2, [1, 2, 3]) - 1 - >>> minimum_subarray_sum(-6, []) - 0 - >>> minimum_subarray_sum(-6, [3, 4, 5]) - 1 - >>> minimum_subarray_sum(8, None) - 0 - >>> minimum_subarray_sum(2, "ABC") - Traceback (most recent call last): - ... - ValueError: numbers must be an iterable of integers - """ - if not numbers: - return 0 - if target == 0 and target in numbers: - return 0 - if not isinstance(numbers, (list, tuple)) or not all( - isinstance(number, int) for number in numbers - ): - raise ValueError("numbers must be an iterable of integers") - - left = right = curr_sum = 0 - min_len = sys.maxsize - - while right < len(numbers): - curr_sum += numbers[right] - while curr_sum >= target and left <= right: - min_len = min(min_len, right - left + 1) - curr_sum -= numbers[left] - left += 1 - right += 1 - - return 0 if min_len == sys.maxsize else min_len diff --git a/dynamic_programming/minimum_squares_to_represent_a_number.py b/dynamic_programming/minimum_squares_to_represent_a_number.py deleted file mode 100644 index bf5849f5bcb3..000000000000 --- a/dynamic_programming/minimum_squares_to_represent_a_number.py +++ /dev/null @@ -1,48 +0,0 @@ -import math -import sys - - -def minimum_squares_to_represent_a_number(number: int) -> int: - """ - Count the number of minimum squares to represent a number - >>> minimum_squares_to_represent_a_number(25) - 1 - >>> minimum_squares_to_represent_a_number(37) - 2 - >>> minimum_squares_to_represent_a_number(21) - 3 - >>> minimum_squares_to_represent_a_number(58) - 2 - >>> minimum_squares_to_represent_a_number(-1) - Traceback (most recent call last): - ... - ValueError: the value of input must not be a negative number - >>> minimum_squares_to_represent_a_number(0) - 1 - >>> minimum_squares_to_represent_a_number(12.34) - Traceback (most recent call last): - ... - ValueError: the value of input must be a natural number - """ - if number != int(number): - raise ValueError("the value of input must be a natural number") - if number < 0: - raise ValueError("the value of input must not be a negative number") - if number == 0: - return 1 - answers = [-1] * (number + 1) - answers[0] = 0 - for i in range(1, number + 1): - answer = sys.maxsize - root = int(math.sqrt(i)) - for j in range(1, root + 1): - current_answer = 1 + answers[i - (j**2)] - answer = min(answer, current_answer) - answers[i] = answer - return answers[number] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/minimum_steps_to_one.py b/dynamic_programming/minimum_steps_to_one.py deleted file mode 100644 index 68eaf56e21a7..000000000000 --- a/dynamic_programming/minimum_steps_to_one.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -YouTube Explanation: https://www.youtube.com/watch?v=f2xi3c1S95M - -Given an integer n, return the minimum steps from n to 1 - -AVAILABLE STEPS: - * Decrement by 1 - * if n is divisible by 2, divide by 2 - * if n is divisible by 3, divide by 3 - - -Example 1: n = 10 -10 -> 9 -> 3 -> 1 -Result: 3 steps - -Example 2: n = 15 -15 -> 5 -> 4 -> 2 -> 1 -Result: 4 steps - -Example 3: n = 6 -6 -> 2 -> 1 -Result: 2 step -""" - -from __future__ import annotations - -__author__ = "Alexander Joslin" - - -def min_steps_to_one(number: int) -> int: - """ - Minimum steps to 1 implemented using tabulation. - >>> min_steps_to_one(10) - 3 - >>> min_steps_to_one(15) - 4 - >>> min_steps_to_one(6) - 2 - - :param number: - :return int: - """ - - if number <= 0: - msg = f"n must be greater than 0. Got n = {number}" - raise ValueError(msg) - - table = [number + 1] * (number + 1) - - # starting position - table[1] = 0 - for i in range(1, number): - table[i + 1] = min(table[i + 1], table[i] + 1) - # check if out of bounds - if i * 2 <= number: - table[i * 2] = min(table[i * 2], table[i] + 1) - # check if out of bounds - if i * 3 <= number: - table[i * 3] = min(table[i * 3], table[i] + 1) - return table[number] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/minimum_tickets_cost.py b/dynamic_programming/minimum_tickets_cost.py deleted file mode 100644 index 6790c21f16ed..000000000000 --- a/dynamic_programming/minimum_tickets_cost.py +++ /dev/null @@ -1,129 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : November 1, 2022 - -Task: -Given a list of days when you need to travel. Each day is integer from 1 to 365. -You are able to use tickets for 1 day, 7 days and 30 days. -Each ticket has a cost. - -Find the minimum cost you need to travel every day in the given list of days. - -Implementation notes: -implementation Dynamic Programming up bottom approach. - -Runtime complexity: O(n) - -The implementation was tested on the -leetcode: https://leetcode.com/problems/minimum-cost-for-tickets/ - - -Minimum Cost For Tickets -Dynamic Programming: up -> down. -""" - -import functools - - -def mincost_tickets(days: list[int], costs: list[int]) -> int: - """ - >>> mincost_tickets([1, 4, 6, 7, 8, 20], [2, 7, 15]) - 11 - - >>> mincost_tickets([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 7, 15]) - 17 - - >>> mincost_tickets([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 90, 150]) - 24 - - >>> mincost_tickets([2], [2, 90, 150]) - 2 - - >>> mincost_tickets([], [2, 90, 150]) - 0 - - >>> mincost_tickets('hello', [2, 90, 150]) - Traceback (most recent call last): - ... - ValueError: The parameter days should be a list of integers - - >>> mincost_tickets([], 'world') - Traceback (most recent call last): - ... - ValueError: The parameter costs should be a list of three integers - - >>> mincost_tickets([0.25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 90, 150]) - Traceback (most recent call last): - ... - ValueError: The parameter days should be a list of integers - - >>> mincost_tickets([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 0.9, 150]) - Traceback (most recent call last): - ... - ValueError: The parameter costs should be a list of three integers - - >>> mincost_tickets([-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 90, 150]) - Traceback (most recent call last): - ... - ValueError: All days elements should be greater than 0 - - >>> mincost_tickets([2, 367], [2, 90, 150]) - Traceback (most recent call last): - ... - ValueError: All days elements should be less than 366 - - >>> mincost_tickets([2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], []) - Traceback (most recent call last): - ... - ValueError: The parameter costs should be a list of three integers - - >>> mincost_tickets([], []) - Traceback (most recent call last): - ... - ValueError: The parameter costs should be a list of three integers - - >>> mincost_tickets([2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [1, 2, 3, 4]) - Traceback (most recent call last): - ... - ValueError: The parameter costs should be a list of three integers - """ - - # Validation - if not isinstance(days, list) or not all(isinstance(day, int) for day in days): - raise ValueError("The parameter days should be a list of integers") - - if len(costs) != 3 or not all(isinstance(cost, int) for cost in costs): - raise ValueError("The parameter costs should be a list of three integers") - - if len(days) == 0: - return 0 - - if min(days) <= 0: - raise ValueError("All days elements should be greater than 0") - - if max(days) >= 366: - raise ValueError("All days elements should be less than 366") - - days_set = set(days) - - @functools.cache - def dynamic_programming(index: int) -> int: - if index > 365: - return 0 - - if index not in days_set: - return dynamic_programming(index + 1) - - return min( - costs[0] + dynamic_programming(index + 1), - costs[1] + dynamic_programming(index + 7), - costs[2] + dynamic_programming(index + 30), - ) - - return dynamic_programming(1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/optimal_binary_search_tree.py b/dynamic_programming/optimal_binary_search_tree.py deleted file mode 100644 index b4f1181ac11c..000000000000 --- a/dynamic_programming/optimal_binary_search_tree.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python3 - -# This Python program implements an optimal binary search tree (abbreviated BST) -# building dynamic programming algorithm that delivers O(n^2) performance. -# -# The goal of the optimal BST problem is to build a low-cost BST for a -# given set of nodes, each with its own key and frequency. The frequency -# of the node is defined as how many time the node is being searched. -# The search cost of binary search tree is given by this formula: -# -# cost(1, n) = sum{i = 1 to n}((depth(node_i) + 1) * node_i_freq) -# -# where n is number of nodes in the BST. The characteristic of low-cost -# BSTs is having a faster overall search time than other implementations. -# The reason for their fast search time is that the nodes with high -# frequencies will be placed near the root of the tree while the nodes -# with low frequencies will be placed near the leaves of the tree thus -# reducing search time in the most frequent instances. -import sys -from random import randint - - -class Node: - """Binary Search Tree Node""" - - def __init__(self, key, freq): - self.key = key - self.freq = freq - - def __str__(self): - """ - >>> str(Node(1, 2)) - 'Node(key=1, freq=2)' - """ - return f"Node(key={self.key}, freq={self.freq})" - - -def print_binary_search_tree(root, key, i, j, parent, is_left): - """ - Recursive function to print a BST from a root table. - - >>> key = [3, 8, 9, 10, 17, 21] - >>> root = [[0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 3], [0, 0, 2, 3, 3, 3], \ - [0, 0, 0, 3, 3, 3], [0, 0, 0, 0, 4, 5], [0, 0, 0, 0, 0, 5]] - >>> print_binary_search_tree(root, key, 0, 5, -1, False) - 8 is the root of the binary search tree. - 3 is the left child of key 8. - 10 is the right child of key 8. - 9 is the left child of key 10. - 21 is the right child of key 10. - 17 is the left child of key 21. - """ - if i > j or i < 0 or j > len(root) - 1: - return - - node = root[i][j] - if parent == -1: # root does not have a parent - print(f"{key[node]} is the root of the binary search tree.") - elif is_left: - print(f"{key[node]} is the left child of key {parent}.") - else: - print(f"{key[node]} is the right child of key {parent}.") - - print_binary_search_tree(root, key, i, node - 1, key[node], True) - print_binary_search_tree(root, key, node + 1, j, key[node], False) - - -def find_optimal_binary_search_tree(nodes): - """ - This function calculates and prints the optimal binary search tree. - The dynamic programming algorithm below runs in O(n^2) time. - Implemented from CLRS (Introduction to Algorithms) book. - https://en.wikipedia.org/wiki/Introduction_to_Algorithms - - >>> find_optimal_binary_search_tree([Node(12, 8), Node(10, 34), Node(20, 50), \ - Node(42, 3), Node(25, 40), Node(37, 30)]) - Binary search tree nodes: - Node(key=10, freq=34) - Node(key=12, freq=8) - Node(key=20, freq=50) - Node(key=25, freq=40) - Node(key=37, freq=30) - Node(key=42, freq=3) - <BLANKLINE> - The cost of optimal BST for given tree nodes is 324. - 20 is the root of the binary search tree. - 10 is the left child of key 20. - 12 is the right child of key 10. - 25 is the right child of key 20. - 37 is the right child of key 25. - 42 is the right child of key 37. - """ - # Tree nodes must be sorted first, the code below sorts the keys in - # increasing order and rearrange its frequencies accordingly. - nodes.sort(key=lambda node: node.key) - - n = len(nodes) - - keys = [nodes[i].key for i in range(n)] - freqs = [nodes[i].freq for i in range(n)] - - # This 2D array stores the overall tree cost (which's as minimized as possible); - # for a single key, cost is equal to frequency of the key. - dp = [[freqs[i] if i == j else 0 for j in range(n)] for i in range(n)] - # sum[i][j] stores the sum of key frequencies between i and j inclusive in nodes - # array - total = [[freqs[i] if i == j else 0 for j in range(n)] for i in range(n)] - # stores tree roots that will be used later for constructing binary search tree - root = [[i if i == j else 0 for j in range(n)] for i in range(n)] - - for interval_length in range(2, n + 1): - for i in range(n - interval_length + 1): - j = i + interval_length - 1 - - dp[i][j] = sys.maxsize # set the value to "infinity" - total[i][j] = total[i][j - 1] + freqs[j] - - # Apply Knuth's optimization - # Loop without optimization: for r in range(i, j + 1): - for r in range(root[i][j - 1], root[i + 1][j] + 1): # r is a temporal root - left = dp[i][r - 1] if r != i else 0 # optimal cost for left subtree - right = dp[r + 1][j] if r != j else 0 # optimal cost for right subtree - cost = left + total[i][j] + right - - if dp[i][j] > cost: - dp[i][j] = cost - root[i][j] = r - - print("Binary search tree nodes:") - for node in nodes: - print(node) - - print(f"\nThe cost of optimal BST for given tree nodes is {dp[0][n - 1]}.") - print_binary_search_tree(root, keys, 0, n - 1, -1, False) - - -def main(): - # A sample binary search tree - nodes = [Node(i, randint(1, 50)) for i in range(10, 0, -1)] - find_optimal_binary_search_tree(nodes) - - -if __name__ == "__main__": - main() diff --git a/dynamic_programming/palindrome_partitioning.py b/dynamic_programming/palindrome_partitioning.py deleted file mode 100644 index c1629440ef2e..000000000000 --- a/dynamic_programming/palindrome_partitioning.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Given a string s, partition s such that every substring of the -partition is a palindrome. -Find the minimum cuts needed for a palindrome partitioning of s. - -Time Complexity: O(n^2) -Space Complexity: O(n^2) -For other explanations refer to: https://www.youtube.com/watch?v=_H8V5hJUGd0 -""" - - -def find_minimum_partitions(string: str) -> int: - """ - Returns the minimum cuts needed for a palindrome partitioning of string - - >>> find_minimum_partitions("aab") - 1 - >>> find_minimum_partitions("aaa") - 0 - >>> find_minimum_partitions("ababbbabbababa") - 3 - """ - length = len(string) - cut = [0] * length - is_palindromic = [[False for i in range(length)] for j in range(length)] - for i, c in enumerate(string): - mincut = i - for j in range(i + 1): - if c == string[j] and (i - j < 2 or is_palindromic[j + 1][i - 1]): - is_palindromic[j][i] = True - mincut = min(mincut, 0 if j == 0 else (cut[j - 1] + 1)) - cut[i] = mincut - return cut[length - 1] - - -if __name__ == "__main__": - s = input("Enter the string: ").strip() - ans = find_minimum_partitions(s) - print(f"Minimum number of partitions required for the '{s}' is {ans}") diff --git a/dynamic_programming/regex_match.py b/dynamic_programming/regex_match.py deleted file mode 100644 index 200a882831c0..000000000000 --- a/dynamic_programming/regex_match.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -Regex matching check if a text matches pattern or not. -Pattern: - '.' Matches any single character. - '*' Matches zero or more of the preceding element. -More info: - https://medium.com/trick-the-interviwer/regular-expression-matching-9972eb74c03 -""" - - -def recursive_match(text: str, pattern: str) -> bool: - """ - Recursive matching algorithm. - - Time complexity: O(2 ^ (|text| + |pattern|)) - Space complexity: Recursion depth is O(|text| + |pattern|). - - :param text: Text to match. - :param pattern: Pattern to match. - :return: True if text matches pattern, False otherwise. - - >>> recursive_match('abc', 'a.c') - True - >>> recursive_match('abc', 'af*.c') - True - >>> recursive_match('abc', 'a.c*') - True - >>> recursive_match('abc', 'a.c*d') - False - >>> recursive_match('aa', '.*') - True - """ - if not pattern: - return not text - - if not text: - return pattern[-1] == "*" and recursive_match(text, pattern[:-2]) - - if text[-1] == pattern[-1] or pattern[-1] == ".": - return recursive_match(text[:-1], pattern[:-1]) - - if pattern[-1] == "*": - return recursive_match(text[:-1], pattern) or recursive_match( - text, pattern[:-2] - ) - - return False - - -def dp_match(text: str, pattern: str) -> bool: - """ - Dynamic programming matching algorithm. - - Time complexity: O(|text| * |pattern|) - Space complexity: O(|text| * |pattern|) - - :param text: Text to match. - :param pattern: Pattern to match. - :return: True if text matches pattern, False otherwise. - - >>> dp_match('abc', 'a.c') - True - >>> dp_match('abc', 'af*.c') - True - >>> dp_match('abc', 'a.c*') - True - >>> dp_match('abc', 'a.c*d') - False - >>> dp_match('aa', '.*') - True - """ - m = len(text) - n = len(pattern) - dp = [[False for _ in range(n + 1)] for _ in range(m + 1)] - dp[0][0] = True - - for j in range(1, n + 1): - dp[0][j] = pattern[j - 1] == "*" and dp[0][j - 2] - - for i in range(1, m + 1): - for j in range(1, n + 1): - if pattern[j - 1] in {".", text[i - 1]}: - dp[i][j] = dp[i - 1][j - 1] - elif pattern[j - 1] == "*": - dp[i][j] = dp[i][j - 2] - if pattern[j - 2] in {".", text[i - 1]}: - dp[i][j] |= dp[i - 1][j] - else: - dp[i][j] = False - - return dp[m][n] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/rod_cutting.py b/dynamic_programming/rod_cutting.py deleted file mode 100644 index f80fa440ae86..000000000000 --- a/dynamic_programming/rod_cutting.py +++ /dev/null @@ -1,209 +0,0 @@ -""" -This module provides two implementations for the rod-cutting problem: -1. A naive recursive implementation which has an exponential runtime -2. Two dynamic programming implementations which have quadratic runtime - -The rod-cutting problem is the problem of finding the maximum possible revenue -obtainable from a rod of length ``n`` given a list of prices for each integral piece -of the rod. The maximum revenue can thus be obtained by cutting the rod and selling the -pieces separately or not cutting it at all if the price of it is the maximum obtainable. - -""" - - -def naive_cut_rod_recursive(n: int, prices: list): - """ - Solves the rod-cutting problem via naively without using the benefit of dynamic - programming. The results is the same sub-problems are solved several times - leading to an exponential runtime - - Runtime: O(2^n) - - Arguments - ------- - n: int, the length of the rod - prices: list, the prices for each piece of rod. ``p[i-i]`` is the - price for a rod of length ``i`` - - Returns - ------- - The maximum revenue obtainable for a rod of length n given the list of prices - for each piece. - - Examples - -------- - >>> naive_cut_rod_recursive(4, [1, 5, 8, 9]) - 10 - >>> naive_cut_rod_recursive(10, [1, 5, 8, 9, 10, 17, 17, 20, 24, 30]) - 30 - """ - - _enforce_args(n, prices) - if n == 0: - return 0 - max_revue = float("-inf") - for i in range(1, n + 1): - max_revue = max( - max_revue, prices[i - 1] + naive_cut_rod_recursive(n - i, prices) - ) - - return max_revue - - -def top_down_cut_rod(n: int, prices: list): - """ - Constructs a top-down dynamic programming solution for the rod-cutting - problem via memoization. This function serves as a wrapper for - _top_down_cut_rod_recursive - - Runtime: O(n^2) - - Arguments - -------- - n: int, the length of the rod - prices: list, the prices for each piece of rod. ``p[i-i]`` is the - price for a rod of length ``i`` - - Note - ---- - For convenience and because Python's lists using 0-indexing, length(max_rev) = - n + 1, to accommodate for the revenue obtainable from a rod of length 0. - - Returns - ------- - The maximum revenue obtainable for a rod of length n given the list of prices - for each piece. - - Examples - ------- - >>> top_down_cut_rod(4, [1, 5, 8, 9]) - 10 - >>> top_down_cut_rod(10, [1, 5, 8, 9, 10, 17, 17, 20, 24, 30]) - 30 - """ - _enforce_args(n, prices) - max_rev = [float("-inf") for _ in range(n + 1)] - return _top_down_cut_rod_recursive(n, prices, max_rev) - - -def _top_down_cut_rod_recursive(n: int, prices: list, max_rev: list): - """ - Constructs a top-down dynamic programming solution for the rod-cutting problem - via memoization. - - Runtime: O(n^2) - - Arguments - -------- - n: int, the length of the rod - prices: list, the prices for each piece of rod. ``p[i-i]`` is the - price for a rod of length ``i`` - max_rev: list, the computed maximum revenue for a piece of rod. - ``max_rev[i]`` is the maximum revenue obtainable for a rod of length ``i`` - - Returns - ------- - The maximum revenue obtainable for a rod of length n given the list of prices - for each piece. - """ - if max_rev[n] >= 0: - return max_rev[n] - elif n == 0: - return 0 - else: - max_revenue = float("-inf") - for i in range(1, n + 1): - max_revenue = max( - max_revenue, - prices[i - 1] + _top_down_cut_rod_recursive(n - i, prices, max_rev), - ) - - max_rev[n] = max_revenue - - return max_rev[n] - - -def bottom_up_cut_rod(n: int, prices: list): - """ - Constructs a bottom-up dynamic programming solution for the rod-cutting problem - - Runtime: O(n^2) - - Arguments - ---------- - n: int, the maximum length of the rod. - prices: list, the prices for each piece of rod. ``p[i-i]`` is the - price for a rod of length ``i`` - - Returns - ------- - The maximum revenue obtainable from cutting a rod of length n given - the prices for each piece of rod p. - - Examples - ------- - >>> bottom_up_cut_rod(4, [1, 5, 8, 9]) - 10 - >>> bottom_up_cut_rod(10, [1, 5, 8, 9, 10, 17, 17, 20, 24, 30]) - 30 - """ - _enforce_args(n, prices) - - # length(max_rev) = n + 1, to accommodate for the revenue obtainable from a rod of - # length 0. - max_rev = [float("-inf") for _ in range(n + 1)] - max_rev[0] = 0 - - for i in range(1, n + 1): - max_revenue_i = max_rev[i] - for j in range(1, i + 1): - max_revenue_i = max(max_revenue_i, prices[j - 1] + max_rev[i - j]) - - max_rev[i] = max_revenue_i - - return max_rev[n] - - -def _enforce_args(n: int, prices: list): - """ - Basic checks on the arguments to the rod-cutting algorithms - - n: int, the length of the rod - prices: list, the price list for each piece of rod. - - Throws ValueError: - - if n is negative or there are fewer items in the price list than the length of - the rod - """ - if n < 0: - msg = f"n must be greater than or equal to 0. Got n = {n}" - raise ValueError(msg) - - if n > len(prices): - msg = ( - "Each integral piece of rod must have a corresponding price. " - f"Got n = {n} but length of prices = {len(prices)}" - ) - raise ValueError(msg) - - -def main(): - prices = [6, 10, 12, 15, 20, 23] - n = len(prices) - - # the best revenue comes from cutting the rod into 6 pieces, each - # of length 1 resulting in a revenue of 6 * 6 = 36. - expected_max_revenue = 36 - - max_rev_top_down = top_down_cut_rod(n, prices) - max_rev_bottom_up = bottom_up_cut_rod(n, prices) - max_rev_naive = naive_cut_rod_recursive(n, prices) - - assert expected_max_revenue == max_rev_top_down - assert max_rev_top_down == max_rev_bottom_up - assert max_rev_bottom_up == max_rev_naive - - -if __name__ == "__main__": - main() diff --git a/dynamic_programming/smith_waterman.py b/dynamic_programming/smith_waterman.py deleted file mode 100644 index 4c5d58379f07..000000000000 --- a/dynamic_programming/smith_waterman.py +++ /dev/null @@ -1,193 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm -The Smith-Waterman algorithm is a dynamic programming algorithm used for sequence -alignment. It is particularly useful for finding similarities between two sequences, -such as DNA or protein sequences. In this implementation, gaps are penalized -linearly, meaning that the score is reduced by a fixed amount for each gap introduced -in the alignment. However, it's important to note that the Smith-Waterman algorithm -supports other gap penalty methods as well. -""" - - -def score_function( - source_char: str, - target_char: str, - match: int = 1, - mismatch: int = -1, - gap: int = -2, -) -> int: - """ - Calculate the score for a character pair based on whether they match or mismatch. - Returns 1 if the characters match, -1 if they mismatch, and -2 if either of the - characters is a gap. - >>> score_function('A', 'A') - 1 - >>> score_function('A', 'C') - -1 - >>> score_function('-', 'A') - -2 - >>> score_function('A', '-') - -2 - >>> score_function('-', '-') - -2 - """ - if "-" in (source_char, target_char): - return gap - return match if source_char == target_char else mismatch - - -def smith_waterman( - query: str, - subject: str, - match: int = 1, - mismatch: int = -1, - gap: int = -2, -) -> list[list[int]]: - """ - Perform the Smith-Waterman local sequence alignment algorithm. - Returns a 2D list representing the score matrix. Each value in the matrix - corresponds to the score of the best local alignment ending at that point. - >>> smith_waterman('ACAC', 'CA') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - >>> smith_waterman('acac', 'ca') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - >>> smith_waterman('ACAC', 'ca') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - >>> smith_waterman('acac', 'CA') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - >>> smith_waterman('ACAC', '') - [[0], [0], [0], [0], [0]] - >>> smith_waterman('', 'CA') - [[0, 0, 0]] - >>> smith_waterman('ACAC', 'CA') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - - >>> smith_waterman('acac', 'ca') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - - >>> smith_waterman('ACAC', 'ca') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - - >>> smith_waterman('acac', 'CA') - [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]] - - >>> smith_waterman('ACAC', '') - [[0], [0], [0], [0], [0]] - - >>> smith_waterman('', 'CA') - [[0, 0, 0]] - - >>> smith_waterman('AGT', 'AGT') - [[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3]] - - >>> smith_waterman('AGT', 'GTA') - [[0, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 2, 0]] - - >>> smith_waterman('AGT', 'GTC') - [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0]] - - >>> smith_waterman('AGT', 'G') - [[0, 0], [0, 0], [0, 1], [0, 0]] - - >>> smith_waterman('G', 'AGT') - [[0, 0, 0, 0], [0, 0, 1, 0]] - - >>> smith_waterman('AGT', 'AGTCT') - [[0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0], [0, 0, 0, 3, 1, 1]] - - >>> smith_waterman('AGTCT', 'AGT') - [[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3], [0, 0, 0, 1], [0, 0, 0, 1]] - - >>> smith_waterman('AGTCT', 'GTC') - [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3], [0, 0, 1, 1]] - """ - # make both query and subject uppercase - query = query.upper() - subject = subject.upper() - - # Initialize score matrix - m = len(query) - n = len(subject) - score = [[0] * (n + 1) for _ in range(m + 1)] - kwargs = {"match": match, "mismatch": mismatch, "gap": gap} - - for i in range(1, m + 1): - for j in range(1, n + 1): - # Calculate scores for each cell - match = score[i - 1][j - 1] + score_function( - query[i - 1], subject[j - 1], **kwargs - ) - delete = score[i - 1][j] + gap - insert = score[i][j - 1] + gap - - # Take maximum score - score[i][j] = max(0, match, delete, insert) - - return score - - -def traceback(score: list[list[int]], query: str, subject: str) -> str: - r""" - Perform traceback to find the optimal local alignment. - Starts from the highest scoring cell in the matrix and traces back recursively - until a 0 score is found. Returns the alignment strings. - >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'ACAC', 'CA') - 'CA\nCA' - >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'acac', 'ca') - 'CA\nCA' - >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'ACAC', 'ca') - 'CA\nCA' - >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'acac', 'CA') - 'CA\nCA' - >>> traceback([[0, 0, 0]], 'ACAC', '') - '' - """ - # make both query and subject uppercase - query = query.upper() - subject = subject.upper() - # find the indices of the maximum value in the score matrix - max_value = float("-inf") - i_max = j_max = 0 - for i, row in enumerate(score): - for j, value in enumerate(row): - if value > max_value: - max_value = value - i_max, j_max = i, j - # Traceback logic to find optimal alignment - i = i_max - j = j_max - align1 = "" - align2 = "" - gap = score_function("-", "-") - # guard against empty query or subject - if i == 0 or j == 0: - return "" - while i > 0 and j > 0: - if score[i][j] == score[i - 1][j - 1] + score_function( - query[i - 1], subject[j - 1] - ): - # optimal path is a diagonal take both letters - align1 = query[i - 1] + align1 - align2 = subject[j - 1] + align2 - i -= 1 - j -= 1 - elif score[i][j] == score[i - 1][j] + gap: - # optimal path is a vertical - align1 = query[i - 1] + align1 - align2 = f"-{align2}" - i -= 1 - else: - # optimal path is a horizontal - align1 = f"-{align1}" - align2 = subject[j - 1] + align2 - j -= 1 - - return f"{align1}\n{align2}" - - -if __name__ == "__main__": - query = "HEAGAWGHEE" - subject = "PAWHEAE" - - score = smith_waterman(query, subject, match=1, mismatch=-1, gap=-2) - print(traceback(score, query, subject)) diff --git a/dynamic_programming/subset_generation.py b/dynamic_programming/subset_generation.py deleted file mode 100644 index d490bca737ba..000000000000 --- a/dynamic_programming/subset_generation.py +++ /dev/null @@ -1,60 +0,0 @@ -def subset_combinations(elements: list[int], n: int) -> list: - """ - Compute n-element combinations from a given list using dynamic programming. - Args: - elements: The list of elements from which combinations will be generated. - n: The number of elements in each combination. - Returns: - A list of tuples, each representing a combination of n elements. - >>> subset_combinations(elements=[10, 20, 30, 40], n=2) - [(10, 20), (10, 30), (10, 40), (20, 30), (20, 40), (30, 40)] - >>> subset_combinations(elements=[1, 2, 3], n=1) - [(1,), (2,), (3,)] - >>> subset_combinations(elements=[1, 2, 3], n=3) - [(1, 2, 3)] - >>> subset_combinations(elements=[42], n=1) - [(42,)] - >>> subset_combinations(elements=[6, 7, 8, 9], n=4) - [(6, 7, 8, 9)] - >>> subset_combinations(elements=[10, 20, 30, 40, 50], n=0) - [()] - >>> subset_combinations(elements=[1, 2, 3, 4], n=2) - [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] - >>> subset_combinations(elements=[1, 'apple', 3.14], n=2) - [(1, 'apple'), (1, 3.14), ('apple', 3.14)] - >>> subset_combinations(elements=['single'], n=0) - [()] - >>> subset_combinations(elements=[], n=9) - [] - >>> from itertools import combinations - >>> all(subset_combinations(items, n) == list(combinations(items, n)) - ... for items, n in ( - ... ([10, 20, 30, 40], 2), ([1, 2, 3], 1), ([1, 2, 3], 3), ([42], 1), - ... ([6, 7, 8, 9], 4), ([10, 20, 30, 40, 50], 1), ([1, 2, 3, 4], 2), - ... ([1, 'apple', 3.14], 2), (['single'], 0), ([], 9))) - True - """ - r = len(elements) - if n > r: - return [] - - dp: list[list[tuple]] = [[] for _ in range(r + 1)] - - dp[0].append(()) - - for i in range(1, r + 1): - for j in range(i, 0, -1): - for prev_combination in dp[j - 1]: - dp[j].append((*prev_combination, elements[i - 1])) - - try: - return sorted(dp[n]) - except TypeError: - return dp[n] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"{subset_combinations(elements=[10, 20, 30, 40], n=2) = }") diff --git a/dynamic_programming/sum_of_subset.py b/dynamic_programming/sum_of_subset.py deleted file mode 100644 index 96ebcf583a4b..000000000000 --- a/dynamic_programming/sum_of_subset.py +++ /dev/null @@ -1,35 +0,0 @@ -def is_sum_subset(arr: list[int], required_sum: int) -> bool: - """ - >>> is_sum_subset([2, 4, 6, 8], 5) - False - >>> is_sum_subset([2, 4, 6, 8], 14) - True - """ - # a subset value says 1 if that subset sum can be formed else 0 - # initially no subsets can be formed hence False/0 - arr_len = len(arr) - subset = [[False] * (required_sum + 1) for _ in range(arr_len + 1)] - - # for each arr value, a sum of zero(0) can be formed by not taking any element - # hence True/1 - for i in range(arr_len + 1): - subset[i][0] = True - - # sum is not zero and set is empty then false - for i in range(1, required_sum + 1): - subset[0][i] = False - - for i in range(1, arr_len + 1): - for j in range(1, required_sum + 1): - if arr[i - 1] > j: - subset[i][j] = subset[i - 1][j] - if arr[i - 1] <= j: - subset[i][j] = subset[i - 1][j] or subset[i - 1][j - arr[i - 1]] - - return subset[arr_len][required_sum] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/trapped_water.py b/dynamic_programming/trapped_water.py deleted file mode 100644 index 8bec9fac5fef..000000000000 --- a/dynamic_programming/trapped_water.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Given an array of non-negative integers representing an elevation map where the width -of each bar is 1, this program calculates how much rainwater can be trapped. - -Example - height = (0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1) -Output: 6 -This problem can be solved using the concept of "DYNAMIC PROGRAMMING". - -We calculate the maximum height of bars on the left and right of every bar in array. -Then iterate over the width of structure and at each index. -The amount of water that will be stored is equal to minimum of maximum height of bars -on both sides minus height of bar at current position. -""" - - -def trapped_rainwater(heights: tuple[int, ...]) -> int: - """ - The trapped_rainwater function calculates the total amount of rainwater that can be - trapped given an array of bar heights. - It uses a dynamic programming approach, determining the maximum height of bars on - both sides for each bar, and then computing the trapped water above each bar. - The function returns the total trapped water. - - >>> trapped_rainwater((0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1)) - 6 - >>> trapped_rainwater((7, 1, 5, 3, 6, 4)) - 9 - >>> trapped_rainwater((7, 1, 5, 3, 6, -1)) - Traceback (most recent call last): - ... - ValueError: No height can be negative - """ - if not heights: - return 0 - if any(h < 0 for h in heights): - raise ValueError("No height can be negative") - length = len(heights) - - left_max = [0] * length - left_max[0] = heights[0] - for i, height in enumerate(heights[1:], start=1): - left_max[i] = max(height, left_max[i - 1]) - - right_max = [0] * length - right_max[-1] = heights[-1] - for i in range(length - 2, -1, -1): - right_max[i] = max(heights[i], right_max[i + 1]) - - return sum( - min(left, right) - height - for left, right, height in zip(left_max, right_max, heights) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{trapped_rainwater((0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1)) = }") - print(f"{trapped_rainwater((7, 1, 5, 3, 6, 4)) = }") diff --git a/dynamic_programming/tribonacci.py b/dynamic_programming/tribonacci.py deleted file mode 100644 index 58e15da918e2..000000000000 --- a/dynamic_programming/tribonacci.py +++ /dev/null @@ -1,24 +0,0 @@ -# Tribonacci sequence using Dynamic Programming - - -def tribonacci(num: int) -> list[int]: - """ - Given a number, return first n Tribonacci Numbers. - >>> tribonacci(5) - [0, 0, 1, 1, 2] - >>> tribonacci(8) - [0, 0, 1, 1, 2, 4, 7, 13] - """ - dp = [0] * num - dp[2] = 1 - - for i in range(3, num): - dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] - - return dp - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/dynamic_programming/viterbi.py b/dynamic_programming/viterbi.py deleted file mode 100644 index 764d45dc2c05..000000000000 --- a/dynamic_programming/viterbi.py +++ /dev/null @@ -1,403 +0,0 @@ -from typing import Any - - -def viterbi( - observations_space: list, - states_space: list, - initial_probabilities: dict, - transition_probabilities: dict, - emission_probabilities: dict, -) -> list: - """ - Viterbi Algorithm, to find the most likely path of - states from the start and the expected output. - https://en.wikipedia.org/wiki/Viterbi_algorithm - sdafads - Wikipedia example - >>> observations = ["normal", "cold", "dizzy"] - >>> states = ["Healthy", "Fever"] - >>> start_p = {"Healthy": 0.6, "Fever": 0.4} - >>> trans_p = { - ... "Healthy": {"Healthy": 0.7, "Fever": 0.3}, - ... "Fever": {"Healthy": 0.4, "Fever": 0.6}, - ... } - >>> emit_p = { - ... "Healthy": {"normal": 0.5, "cold": 0.4, "dizzy": 0.1}, - ... "Fever": {"normal": 0.1, "cold": 0.3, "dizzy": 0.6}, - ... } - >>> viterbi(observations, states, start_p, trans_p, emit_p) - ['Healthy', 'Healthy', 'Fever'] - - >>> viterbi((), states, start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - - >>> viterbi(observations, (), start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - - >>> viterbi(observations, states, {}, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - - >>> viterbi(observations, states, start_p, {}, emit_p) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - - >>> viterbi(observations, states, start_p, trans_p, {}) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - - >>> viterbi("invalid", states, start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: observations_space must be a list - - >>> viterbi(["valid", 123], states, start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: observations_space must be a list of strings - - >>> viterbi(observations, "invalid", start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: states_space must be a list - - >>> viterbi(observations, ["valid", 123], start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: states_space must be a list of strings - - >>> viterbi(observations, states, "invalid", trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: initial_probabilities must be a dict - - >>> viterbi(observations, states, {2:2}, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: initial_probabilities all keys must be strings - - >>> viterbi(observations, states, {"a":2}, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: initial_probabilities all values must be float - - >>> viterbi(observations, states, start_p, "invalid", emit_p) - Traceback (most recent call last): - ... - ValueError: transition_probabilities must be a dict - - >>> viterbi(observations, states, start_p, {"a":2}, emit_p) - Traceback (most recent call last): - ... - ValueError: transition_probabilities all values must be dict - - >>> viterbi(observations, states, start_p, {2:{2:2}}, emit_p) - Traceback (most recent call last): - ... - ValueError: transition_probabilities all keys must be strings - - >>> viterbi(observations, states, start_p, {"a":{2:2}}, emit_p) - Traceback (most recent call last): - ... - ValueError: transition_probabilities all keys must be strings - - >>> viterbi(observations, states, start_p, {"a":{"b":2}}, emit_p) - Traceback (most recent call last): - ... - ValueError: transition_probabilities nested dictionary all values must be float - - >>> viterbi(observations, states, start_p, trans_p, "invalid") - Traceback (most recent call last): - ... - ValueError: emission_probabilities must be a dict - - >>> viterbi(observations, states, start_p, trans_p, None) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - - """ - _validation( - observations_space, - states_space, - initial_probabilities, - transition_probabilities, - emission_probabilities, - ) - # Creates data structures and fill initial step - probabilities: dict = {} - pointers: dict = {} - for state in states_space: - observation = observations_space[0] - probabilities[(state, observation)] = ( - initial_probabilities[state] * emission_probabilities[state][observation] - ) - pointers[(state, observation)] = None - - # Fills the data structure with the probabilities of - # different transitions and pointers to previous states - for o in range(1, len(observations_space)): - observation = observations_space[o] - prior_observation = observations_space[o - 1] - for state in states_space: - # Calculates the argmax for probability function - arg_max = "" - max_probability = -1 - for k_state in states_space: - probability = ( - probabilities[(k_state, prior_observation)] - * transition_probabilities[k_state][state] - * emission_probabilities[state][observation] - ) - if probability > max_probability: - max_probability = probability - arg_max = k_state - - # Update probabilities and pointers dicts - probabilities[(state, observation)] = ( - probabilities[(arg_max, prior_observation)] - * transition_probabilities[arg_max][state] - * emission_probabilities[state][observation] - ) - - pointers[(state, observation)] = arg_max - - # The final observation - final_observation = observations_space[len(observations_space) - 1] - - # argmax for given final observation - arg_max = "" - max_probability = -1 - for k_state in states_space: - probability = probabilities[(k_state, final_observation)] - if probability > max_probability: - max_probability = probability - arg_max = k_state - last_state = arg_max - - # Process pointers backwards - previous = last_state - result = [] - for o in range(len(observations_space) - 1, -1, -1): - result.append(previous) - previous = pointers[previous, observations_space[o]] - result.reverse() - - return result - - -def _validation( - observations_space: Any, - states_space: Any, - initial_probabilities: Any, - transition_probabilities: Any, - emission_probabilities: Any, -) -> None: - """ - >>> observations = ["normal", "cold", "dizzy"] - >>> states = ["Healthy", "Fever"] - >>> start_p = {"Healthy": 0.6, "Fever": 0.4} - >>> trans_p = { - ... "Healthy": {"Healthy": 0.7, "Fever": 0.3}, - ... "Fever": {"Healthy": 0.4, "Fever": 0.6}, - ... } - >>> emit_p = { - ... "Healthy": {"normal": 0.5, "cold": 0.4, "dizzy": 0.1}, - ... "Fever": {"normal": 0.1, "cold": 0.3, "dizzy": 0.6}, - ... } - >>> _validation(observations, states, start_p, trans_p, emit_p) - - >>> _validation([], states, start_p, trans_p, emit_p) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - """ - _validate_not_empty( - observations_space, - states_space, - initial_probabilities, - transition_probabilities, - emission_probabilities, - ) - _validate_lists(observations_space, states_space) - _validate_dicts( - initial_probabilities, transition_probabilities, emission_probabilities - ) - - -def _validate_not_empty( - observations_space: Any, - states_space: Any, - initial_probabilities: Any, - transition_probabilities: Any, - emission_probabilities: Any, -) -> None: - """ - >>> _validate_not_empty(["a"], ["b"], {"c":0.5}, - ... {"d": {"e": 0.6}}, {"f": {"g": 0.7}}) - - >>> _validate_not_empty(["a"], ["b"], {"c":0.5}, {}, {"f": {"g": 0.7}}) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - >>> _validate_not_empty(["a"], ["b"], None, {"d": {"e": 0.6}}, {"f": {"g": 0.7}}) - Traceback (most recent call last): - ... - ValueError: There's an empty parameter - """ - if not all( - [ - observations_space, - states_space, - initial_probabilities, - transition_probabilities, - emission_probabilities, - ] - ): - raise ValueError("There's an empty parameter") - - -def _validate_lists(observations_space: Any, states_space: Any) -> None: - """ - >>> _validate_lists(["a"], ["b"]) - - >>> _validate_lists(1234, ["b"]) - Traceback (most recent call last): - ... - ValueError: observations_space must be a list - - >>> _validate_lists(["a"], [3]) - Traceback (most recent call last): - ... - ValueError: states_space must be a list of strings - """ - _validate_list(observations_space, "observations_space") - _validate_list(states_space, "states_space") - - -def _validate_list(_object: Any, var_name: str) -> None: - """ - >>> _validate_list(["a"], "mock_name") - - >>> _validate_list("a", "mock_name") - Traceback (most recent call last): - ... - ValueError: mock_name must be a list - >>> _validate_list([0.5], "mock_name") - Traceback (most recent call last): - ... - ValueError: mock_name must be a list of strings - - """ - if not isinstance(_object, list): - msg = f"{var_name} must be a list" - raise ValueError(msg) - else: - for x in _object: - if not isinstance(x, str): - msg = f"{var_name} must be a list of strings" - raise ValueError(msg) - - -def _validate_dicts( - initial_probabilities: Any, - transition_probabilities: Any, - emission_probabilities: Any, -) -> None: - """ - >>> _validate_dicts({"c":0.5}, {"d": {"e": 0.6}}, {"f": {"g": 0.7}}) - - >>> _validate_dicts("invalid", {"d": {"e": 0.6}}, {"f": {"g": 0.7}}) - Traceback (most recent call last): - ... - ValueError: initial_probabilities must be a dict - >>> _validate_dicts({"c":0.5}, {2: {"e": 0.6}}, {"f": {"g": 0.7}}) - Traceback (most recent call last): - ... - ValueError: transition_probabilities all keys must be strings - >>> _validate_dicts({"c":0.5}, {"d": {"e": 0.6}}, {"f": {2: 0.7}}) - Traceback (most recent call last): - ... - ValueError: emission_probabilities all keys must be strings - >>> _validate_dicts({"c":0.5}, {"d": {"e": 0.6}}, {"f": {"g": "h"}}) - Traceback (most recent call last): - ... - ValueError: emission_probabilities nested dictionary all values must be float - """ - _validate_dict(initial_probabilities, "initial_probabilities", float) - _validate_nested_dict(transition_probabilities, "transition_probabilities") - _validate_nested_dict(emission_probabilities, "emission_probabilities") - - -def _validate_nested_dict(_object: Any, var_name: str) -> None: - """ - >>> _validate_nested_dict({"a":{"b": 0.5}}, "mock_name") - - >>> _validate_nested_dict("invalid", "mock_name") - Traceback (most recent call last): - ... - ValueError: mock_name must be a dict - >>> _validate_nested_dict({"a": 8}, "mock_name") - Traceback (most recent call last): - ... - ValueError: mock_name all values must be dict - >>> _validate_nested_dict({"a":{2: 0.5}}, "mock_name") - Traceback (most recent call last): - ... - ValueError: mock_name all keys must be strings - >>> _validate_nested_dict({"a":{"b": 4}}, "mock_name") - Traceback (most recent call last): - ... - ValueError: mock_name nested dictionary all values must be float - """ - _validate_dict(_object, var_name, dict) - for x in _object.values(): - _validate_dict(x, var_name, float, True) - - -def _validate_dict( - _object: Any, var_name: str, value_type: type, nested: bool = False -) -> None: - """ - >>> _validate_dict({"b": 0.5}, "mock_name", float) - - >>> _validate_dict("invalid", "mock_name", float) - Traceback (most recent call last): - ... - ValueError: mock_name must be a dict - >>> _validate_dict({"a": 8}, "mock_name", dict) - Traceback (most recent call last): - ... - ValueError: mock_name all values must be dict - >>> _validate_dict({2: 0.5}, "mock_name",float, True) - Traceback (most recent call last): - ... - ValueError: mock_name all keys must be strings - >>> _validate_dict({"b": 4}, "mock_name", float,True) - Traceback (most recent call last): - ... - ValueError: mock_name nested dictionary all values must be float - """ - if not isinstance(_object, dict): - msg = f"{var_name} must be a dict" - raise ValueError(msg) - if not all(isinstance(x, str) for x in _object): - msg = f"{var_name} all keys must be strings" - raise ValueError(msg) - if not all(isinstance(x, value_type) for x in _object.values()): - nested_text = "nested dictionary " if nested else "" - msg = f"{var_name} {nested_text}all values must be {value_type.__name__}" - raise ValueError(msg) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/dynamic_programming/wildcard_matching.py b/dynamic_programming/wildcard_matching.py deleted file mode 100644 index d9a1392720bd..000000000000 --- a/dynamic_programming/wildcard_matching.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Author : ilyas dahhou -Date : Oct 7, 2023 - -Task: -Given an input string and a pattern, implement wildcard pattern matching with support -for '?' and '*' where: -'?' matches any single character. -'*' matches any sequence of characters (including the empty sequence). -The matching should cover the entire input string (not partial). - -Runtime complexity: O(m * n) - -The implementation was tested on the -leetcode: https://leetcode.com/problems/wildcard-matching/ -""" - - -def is_match(string: str, pattern: str) -> bool: - """ - >>> is_match("", "") - True - >>> is_match("aa", "a") - False - >>> is_match("abc", "abc") - True - >>> is_match("abc", "*c") - True - >>> is_match("abc", "a*") - True - >>> is_match("abc", "*a*") - True - >>> is_match("abc", "?b?") - True - >>> is_match("abc", "*?") - True - >>> is_match("abc", "a*d") - False - >>> is_match("abc", "a*c?") - False - >>> is_match('baaabab','*****ba*****ba') - False - >>> is_match('baaabab','*****ba*****ab') - True - >>> is_match('aa','*') - True - """ - dp = [[False] * (len(pattern) + 1) for _ in string + "1"] - dp[0][0] = True - # Fill in the first row - for j, char in enumerate(pattern, 1): - if char == "*": - dp[0][j] = dp[0][j - 1] - # Fill in the rest of the DP table - for i, s_char in enumerate(string, 1): - for j, p_char in enumerate(pattern, 1): - if p_char in (s_char, "?"): - dp[i][j] = dp[i - 1][j - 1] - elif pattern[j - 1] == "*": - dp[i][j] = dp[i - 1][j] or dp[i][j - 1] - return dp[len(string)][len(pattern)] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{is_match('baaabab','*****ba*****ab') = }") diff --git a/dynamic_programming/word_break.py b/dynamic_programming/word_break.py deleted file mode 100644 index 4d7ac869080c..000000000000 --- a/dynamic_programming/word_break.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -Author : Alexander Pantyukhin -Date : December 12, 2022 - -Task: -Given a string and a list of words, return true if the string can be -segmented into a space-separated sequence of one or more words. - -Note that the same word may be reused -multiple times in the segmentation. - -Implementation notes: Trie + Dynamic programming up -> down. -The Trie will be used to store the words. It will be useful for scanning -available words for the current position in the string. - -Leetcode: -https://leetcode.com/problems/word-break/description/ - -Runtime: O(n * n) -Space: O(n) -""" - -import functools -from typing import Any - - -def word_break(string: str, words: list[str]) -> bool: - """ - Return True if numbers have opposite signs False otherwise. - - >>> word_break("applepenapple", ["apple","pen"]) - True - >>> word_break("catsandog", ["cats","dog","sand","and","cat"]) - False - >>> word_break("cars", ["car","ca","rs"]) - True - >>> word_break('abc', []) - False - >>> word_break(123, ['a']) - Traceback (most recent call last): - ... - ValueError: the string should be not empty string - >>> word_break('', ['a']) - Traceback (most recent call last): - ... - ValueError: the string should be not empty string - >>> word_break('abc', [123]) - Traceback (most recent call last): - ... - ValueError: the words should be a list of non-empty strings - >>> word_break('abc', ['']) - Traceback (most recent call last): - ... - ValueError: the words should be a list of non-empty strings - """ - - # Validation - if not isinstance(string, str) or len(string) == 0: - raise ValueError("the string should be not empty string") - - if not isinstance(words, list) or not all( - isinstance(item, str) and len(item) > 0 for item in words - ): - raise ValueError("the words should be a list of non-empty strings") - - # Build trie - trie: dict[str, Any] = {} - word_keeper_key = "WORD_KEEPER" - - for word in words: - trie_node = trie - for c in word: - if c not in trie_node: - trie_node[c] = {} - - trie_node = trie_node[c] - - trie_node[word_keeper_key] = True - - len_string = len(string) - - # Dynamic programming method - @functools.cache - def is_breakable(index: int) -> bool: - """ - >>> string = 'a' - >>> is_breakable(1) - True - """ - if index == len_string: - return True - - trie_node = trie - for i in range(index, len_string): - trie_node = trie_node.get(string[i], None) - - if trie_node is None: - return False - - if trie_node.get(word_keeper_key, False) and is_breakable(i + 1): - return True - - return False - - return is_breakable(0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/__init__.py b/electronics/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/electronics/apparent_power.py b/electronics/apparent_power.py deleted file mode 100644 index 0ce1c2aa95b9..000000000000 --- a/electronics/apparent_power.py +++ /dev/null @@ -1,37 +0,0 @@ -import cmath -import math - - -def apparent_power( - voltage: float, current: float, voltage_angle: float, current_angle: float -) -> complex: - """ - Calculate the apparent power in a single-phase AC circuit. - - Reference: https://en.wikipedia.org/wiki/AC_power#Apparent_power - - >>> apparent_power(100, 5, 0, 0) - (500+0j) - >>> apparent_power(100, 5, 90, 0) - (3.061616997868383e-14+500j) - >>> apparent_power(100, 5, -45, -60) - (-129.40952255126027-482.9629131445341j) - >>> apparent_power(200, 10, -30, -90) - (-999.9999999999998-1732.0508075688776j) - """ - # Convert angles from degrees to radians - voltage_angle_rad = math.radians(voltage_angle) - current_angle_rad = math.radians(current_angle) - - # Convert voltage and current to rectangular form - voltage_rect = cmath.rect(voltage, voltage_angle_rad) - current_rect = cmath.rect(current, current_angle_rad) - - # Calculate apparent power - return voltage_rect * current_rect - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/builtin_voltage.py b/electronics/builtin_voltage.py deleted file mode 100644 index 38fde4524d1a..000000000000 --- a/electronics/builtin_voltage.py +++ /dev/null @@ -1,67 +0,0 @@ -from math import log - -from scipy.constants import Boltzmann, physical_constants - -T = 300 # TEMPERATURE (unit = K) - - -def builtin_voltage( - donor_conc: float, # donor concentration - acceptor_conc: float, # acceptor concentration - intrinsic_conc: float, # intrinsic concentration -) -> float: - """ - This function can calculate the Builtin Voltage of a pn junction diode. - This is calculated from the given three values. - Examples - - >>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10) - 0.833370010652644 - >>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200) - Traceback (most recent call last): - ... - ValueError: Donor concentration should be positive - >>> builtin_voltage(donor_conc=1000, acceptor_conc=0, intrinsic_conc=1200) - Traceback (most recent call last): - ... - ValueError: Acceptor concentration should be positive - >>> builtin_voltage(donor_conc=1000, acceptor_conc=1000, intrinsic_conc=0) - Traceback (most recent call last): - ... - ValueError: Intrinsic concentration should be positive - >>> builtin_voltage(donor_conc=1000, acceptor_conc=3000, intrinsic_conc=2000) - Traceback (most recent call last): - ... - ValueError: Donor concentration should be greater than intrinsic concentration - >>> builtin_voltage(donor_conc=3000, acceptor_conc=1000, intrinsic_conc=2000) - Traceback (most recent call last): - ... - ValueError: Acceptor concentration should be greater than intrinsic concentration - """ - - if donor_conc <= 0: - raise ValueError("Donor concentration should be positive") - elif acceptor_conc <= 0: - raise ValueError("Acceptor concentration should be positive") - elif intrinsic_conc <= 0: - raise ValueError("Intrinsic concentration should be positive") - elif donor_conc <= intrinsic_conc: - raise ValueError( - "Donor concentration should be greater than intrinsic concentration" - ) - elif acceptor_conc <= intrinsic_conc: - raise ValueError( - "Acceptor concentration should be greater than intrinsic concentration" - ) - else: - return ( - Boltzmann - * T - * log((donor_conc * acceptor_conc) / intrinsic_conc**2) - / physical_constants["electron volt"][0] - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/capacitor_equivalence.py b/electronics/capacitor_equivalence.py deleted file mode 100644 index 274b18afb3ef..000000000000 --- a/electronics/capacitor_equivalence.py +++ /dev/null @@ -1,53 +0,0 @@ -# https://farside.ph.utexas.edu/teaching/316/lectures/node46.html - -from __future__ import annotations - - -def capacitor_parallel(capacitors: list[float]) -> float: - """ - Ceq = C1 + C2 + ... + Cn - Calculate the equivalent resistance for any number of capacitors in parallel. - >>> capacitor_parallel([5.71389, 12, 3]) - 20.71389 - >>> capacitor_parallel([5.71389, 12, -3]) - Traceback (most recent call last): - ... - ValueError: Capacitor at index 2 has a negative value! - """ - sum_c = 0.0 - for index, capacitor in enumerate(capacitors): - if capacitor < 0: - msg = f"Capacitor at index {index} has a negative value!" - raise ValueError(msg) - sum_c += capacitor - return sum_c - - -def capacitor_series(capacitors: list[float]) -> float: - """ - Ceq = 1/ (1/C1 + 1/C2 + ... + 1/Cn) - >>> capacitor_series([5.71389, 12, 3]) - 1.6901062252507735 - >>> capacitor_series([5.71389, 12, -3]) - Traceback (most recent call last): - ... - ValueError: Capacitor at index 2 has a negative or zero value! - >>> capacitor_series([5.71389, 12, 0.000]) - Traceback (most recent call last): - ... - ValueError: Capacitor at index 2 has a negative or zero value! - """ - - first_sum = 0.0 - for index, capacitor in enumerate(capacitors): - if capacitor <= 0: - msg = f"Capacitor at index {index} has a negative or zero value!" - raise ValueError(msg) - first_sum += 1 / capacitor - return 1 / first_sum - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/carrier_concentration.py b/electronics/carrier_concentration.py deleted file mode 100644 index 1fb9f2430dcd..000000000000 --- a/electronics/carrier_concentration.py +++ /dev/null @@ -1,75 +0,0 @@ -# https://en.wikipedia.org/wiki/Charge_carrier_density -# https://www.pveducation.org/pvcdrom/pn-junctions/equilibrium-carrier-concentration -# http://www.ece.utep.edu/courses/ee3329/ee3329/Studyguide/ToC/Fundamentals/Carriers/concentrations.html - -from __future__ import annotations - - -def carrier_concentration( - electron_conc: float, - hole_conc: float, - intrinsic_conc: float, -) -> tuple: - """ - This function can calculate any one of the three - - 1. Electron Concentration - 2, Hole Concentration - 3. Intrinsic Concentration - given the other two. - Examples - - >>> carrier_concentration(electron_conc=25, hole_conc=100, intrinsic_conc=0) - ('intrinsic_conc', 50.0) - >>> carrier_concentration(electron_conc=0, hole_conc=1600, intrinsic_conc=200) - ('electron_conc', 25.0) - >>> carrier_concentration(electron_conc=1000, hole_conc=0, intrinsic_conc=1200) - ('hole_conc', 1440.0) - >>> carrier_concentration(electron_conc=1000, hole_conc=400, intrinsic_conc=1200) - Traceback (most recent call last): - ... - ValueError: You cannot supply more or less than 2 values - >>> carrier_concentration(electron_conc=-1000, hole_conc=0, intrinsic_conc=1200) - Traceback (most recent call last): - ... - ValueError: Electron concentration cannot be negative in a semiconductor - >>> carrier_concentration(electron_conc=0, hole_conc=-400, intrinsic_conc=1200) - Traceback (most recent call last): - ... - ValueError: Hole concentration cannot be negative in a semiconductor - >>> carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200) - Traceback (most recent call last): - ... - ValueError: Intrinsic concentration cannot be negative in a semiconductor - """ - if (electron_conc, hole_conc, intrinsic_conc).count(0) != 1: - raise ValueError("You cannot supply more or less than 2 values") - elif electron_conc < 0: - raise ValueError("Electron concentration cannot be negative in a semiconductor") - elif hole_conc < 0: - raise ValueError("Hole concentration cannot be negative in a semiconductor") - elif intrinsic_conc < 0: - raise ValueError( - "Intrinsic concentration cannot be negative in a semiconductor" - ) - elif electron_conc == 0: - return ( - "electron_conc", - intrinsic_conc**2 / hole_conc, - ) - elif hole_conc == 0: - return ( - "hole_conc", - intrinsic_conc**2 / electron_conc, - ) - elif intrinsic_conc == 0: - return ( - "intrinsic_conc", - (electron_conc * hole_conc) ** 0.5, - ) - else: - return (-1, -1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/charging_capacitor.py b/electronics/charging_capacitor.py deleted file mode 100644 index 0021e4e345e0..000000000000 --- a/electronics/charging_capacitor.py +++ /dev/null @@ -1,72 +0,0 @@ -# source - The ARRL Handbook for Radio Communications -# https://en.wikipedia.org/wiki/RC_time_constant - -""" -Description ------------ -When a capacitor is connected with a potential source (AC or DC). It starts to charge -at a general speed but when a resistor is connected in the circuit with in series to -a capacitor then the capacitor charges slowly means it will take more time than usual. -while the capacitor is being charged, the voltage is in exponential function with time. - -'resistance(ohms) * capacitance(farads)' is called RC-timeconstant which may also be -represented as τ (tau). By using this RC-timeconstant we can find the voltage at any -time 't' from the initiation of charging a capacitor with the help of the exponential -function containing RC. Both at charging and discharging of a capacitor. -""" - -from math import exp # value of exp = 2.718281828459… - - -def charging_capacitor( - source_voltage: float, # voltage in volts. - resistance: float, # resistance in ohms. - capacitance: float, # capacitance in farads. - time_sec: float, # time in seconds after charging initiation of capacitor. -) -> float: - """ - Find capacitor voltage at any nth second after initiating its charging. - - Examples - -------- - >>> charging_capacitor(source_voltage=.2,resistance=.9,capacitance=8.4,time_sec=.5) - 0.013 - - >>> charging_capacitor(source_voltage=2.2,resistance=3.5,capacitance=2.4,time_sec=9) - 1.446 - - >>> charging_capacitor(source_voltage=15,resistance=200,capacitance=20,time_sec=2) - 0.007 - - >>> charging_capacitor(20, 2000, 30*pow(10,-5), 4) - 19.975 - - >>> charging_capacitor(source_voltage=0,resistance=10.0,capacitance=.30,time_sec=3) - Traceback (most recent call last): - ... - ValueError: Source voltage must be positive. - - >>> charging_capacitor(source_voltage=20,resistance=-2000,capacitance=30,time_sec=4) - Traceback (most recent call last): - ... - ValueError: Resistance must be positive. - - >>> charging_capacitor(source_voltage=30,resistance=1500,capacitance=0,time_sec=4) - Traceback (most recent call last): - ... - ValueError: Capacitance must be positive. - """ - - if source_voltage <= 0: - raise ValueError("Source voltage must be positive.") - if resistance <= 0: - raise ValueError("Resistance must be positive.") - if capacitance <= 0: - raise ValueError("Capacitance must be positive.") - return round(source_voltage * (1 - exp(-time_sec / (resistance * capacitance))), 3) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/charging_inductor.py b/electronics/charging_inductor.py deleted file mode 100644 index 8a3bbc0bbfcd..000000000000 --- a/electronics/charging_inductor.py +++ /dev/null @@ -1,97 +0,0 @@ -# source - The ARRL Handbook for Radio Communications -# https://en.wikipedia.org/wiki/RL_circuit - -""" -Description ------------ -Inductor is a passive electronic device which stores energy but unlike capacitor, it -stores energy in its 'magnetic field' or 'magnetostatic field'. - -When inductor is connected to 'DC' current source nothing happens it just works like a -wire because it's real effect cannot be seen while 'DC' is connected, its not even -going to store energy. Inductor stores energy only when it is working on 'AC' current. - -Connecting a inductor in series with a resistor(when R = 0) to a 'AC' potential source, -from zero to a finite value causes a sudden voltage to induced in inductor which -opposes the current. which results in initially slowly current rise. However it would -cease if there is no further changes in current. With resistance zero current will never -stop rising. - -'Resistance(ohms) / Inductance(henrys)' is known as RL-timeconstant. It also represents -as τ (tau). While the charging of a inductor with a resistor results in -a exponential function. - -when inductor is connected across 'AC' potential source. It starts to store the energy -in its 'magnetic field'.with the help 'RL-time-constant' we can find current at any time -in inductor while it is charging. -""" - -from math import exp # value of exp = 2.718281828459… - - -def charging_inductor( - source_voltage: float, # source_voltage should be in volts. - resistance: float, # resistance should be in ohms. - inductance: float, # inductance should be in henrys. - time: float, # time should in seconds. -) -> float: - """ - Find inductor current at any nth second after initiating its charging. - - Examples - -------- - >>> charging_inductor(source_voltage=5.8,resistance=1.5,inductance=2.3,time=2) - 2.817 - - >>> charging_inductor(source_voltage=8,resistance=5,inductance=3,time=2) - 1.543 - - >>> charging_inductor(source_voltage=8,resistance=5*pow(10,2),inductance=3,time=2) - 0.016 - - >>> charging_inductor(source_voltage=-8,resistance=100,inductance=15,time=12) - Traceback (most recent call last): - ... - ValueError: Source voltage must be positive. - - >>> charging_inductor(source_voltage=80,resistance=-15,inductance=100,time=5) - Traceback (most recent call last): - ... - ValueError: Resistance must be positive. - - >>> charging_inductor(source_voltage=12,resistance=200,inductance=-20,time=5) - Traceback (most recent call last): - ... - ValueError: Inductance must be positive. - - >>> charging_inductor(source_voltage=0,resistance=200,inductance=20,time=5) - Traceback (most recent call last): - ... - ValueError: Source voltage must be positive. - - >>> charging_inductor(source_voltage=10,resistance=0,inductance=20,time=5) - Traceback (most recent call last): - ... - ValueError: Resistance must be positive. - - >>> charging_inductor(source_voltage=15, resistance=25, inductance=0, time=5) - Traceback (most recent call last): - ... - ValueError: Inductance must be positive. - """ - - if source_voltage <= 0: - raise ValueError("Source voltage must be positive.") - if resistance <= 0: - raise ValueError("Resistance must be positive.") - if inductance <= 0: - raise ValueError("Inductance must be positive.") - return round( - source_voltage / resistance * (1 - exp((-time * resistance) / inductance)), 3 - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/circular_convolution.py b/electronics/circular_convolution.py deleted file mode 100644 index d06e76be759b..000000000000 --- a/electronics/circular_convolution.py +++ /dev/null @@ -1,98 +0,0 @@ -# https://en.wikipedia.org/wiki/Circular_convolution - -""" -Circular convolution, also known as cyclic convolution, -is a special case of periodic convolution, which is the convolution of two -periodic functions that have the same period. Periodic convolution arises, -for example, in the context of the discrete-time Fourier transform (DTFT). -In particular, the DTFT of the product of two discrete sequences is the periodic -convolution of the DTFTs of the individual sequences. And each DTFT is a periodic -summation of a continuous Fourier transform function. - -Source: https://en.wikipedia.org/wiki/Circular_convolution -""" - -import doctest -from collections import deque - -import numpy as np - - -class CircularConvolution: - """ - This class stores the first and second signal and performs the circular convolution - """ - - def __init__(self) -> None: - """ - First signal and second signal are stored as 1-D array - """ - - self.first_signal = [2, 1, 2, -1] - self.second_signal = [1, 2, 3, 4] - - def circular_convolution(self) -> list[float]: - """ - This function performs the circular convolution of the first and second signal - using matrix method - - Usage: - >>> convolution = CircularConvolution() - >>> convolution.circular_convolution() - [10.0, 10.0, 6.0, 14.0] - - >>> convolution.first_signal = [0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6] - >>> convolution.second_signal = [0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5] - >>> convolution.circular_convolution() - [5.2, 6.0, 6.48, 6.64, 6.48, 6.0, 5.2, 4.08] - - >>> convolution.first_signal = [-1, 1, 2, -2] - >>> convolution.second_signal = [0.5, 1, -1, 2, 0.75] - >>> convolution.circular_convolution() - [6.25, -3.0, 1.5, -2.0, -2.75] - - >>> convolution.first_signal = [1, -1, 2, 3, -1] - >>> convolution.second_signal = [1, 2, 3] - >>> convolution.circular_convolution() - [8.0, -2.0, 3.0, 4.0, 11.0] - - """ - - length_first_signal = len(self.first_signal) - length_second_signal = len(self.second_signal) - - max_length = max(length_first_signal, length_second_signal) - - # create a zero matrix of max_length x max_length - matrix = [[0] * max_length for i in range(max_length)] - - # fills the smaller signal with zeros to make both signals of same length - if length_first_signal < length_second_signal: - self.first_signal += [0] * (max_length - length_first_signal) - elif length_first_signal > length_second_signal: - self.second_signal += [0] * (max_length - length_second_signal) - - """ - Fills the matrix in the following way assuming 'x' is the signal of length 4 - [ - [x[0], x[3], x[2], x[1]], - [x[1], x[0], x[3], x[2]], - [x[2], x[1], x[0], x[3]], - [x[3], x[2], x[1], x[0]] - ] - """ - for i in range(max_length): - rotated_signal = deque(self.second_signal) - rotated_signal.rotate(i) - for j, item in enumerate(rotated_signal): - matrix[i][j] += item - - # multiply the matrix with the first signal - final_signal = np.matmul(np.transpose(matrix), np.transpose(self.first_signal)) - - # rounding-off to two decimal places - return [float(round(i, 2)) for i in final_signal] - - -if __name__ == "__main__": - doctest.testmod() diff --git a/electronics/coulombs_law.py b/electronics/coulombs_law.py deleted file mode 100644 index 74bbea5ea8ec..000000000000 --- a/electronics/coulombs_law.py +++ /dev/null @@ -1,85 +0,0 @@ -# https://en.wikipedia.org/wiki/Coulomb%27s_law - -from __future__ import annotations - -COULOMBS_CONSTANT = 8.988e9 # units = N * m^s * C^-2 - - -def couloumbs_law( - force: float, charge1: float, charge2: float, distance: float -) -> dict[str, float]: - """ - Apply Coulomb's Law on any three given values. These can be force, charge1, - charge2, or distance, and then in a Python dict return name/value pair of - the zero value. - - Coulomb's Law states that the magnitude of the electrostatic force of - attraction or repulsion between two point charges is directly proportional - to the product of the magnitudes of charges and inversely proportional to - the square of the distance between them. - - Reference - ---------- - Coulomb (1785) "Premier mémoire sur l'électricité et le magnétisme," - Histoire de l'Académie Royale des Sciences, pp. 569-577. - - Parameters - ---------- - force : float with units in Newtons - - charge1 : float with units in Coulombs - - charge2 : float with units in Coulombs - - distance : float with units in meters - - Returns - ------- - result : dict name/value pair of the zero value - - >>> couloumbs_law(force=0, charge1=3, charge2=5, distance=2000) - {'force': 33705.0} - - >>> couloumbs_law(force=10, charge1=3, charge2=5, distance=0) - {'distance': 116112.01488218177} - - >>> couloumbs_law(force=10, charge1=0, charge2=5, distance=2000) - {'charge1': 0.0008900756564307966} - - >>> couloumbs_law(force=0, charge1=0, charge2=5, distance=2000) - Traceback (most recent call last): - ... - ValueError: One and only one argument must be 0 - - >>> couloumbs_law(force=0, charge1=3, charge2=5, distance=-2000) - Traceback (most recent call last): - ... - ValueError: Distance cannot be negative - - """ - - charge_product = abs(charge1 * charge2) - - if (force, charge1, charge2, distance).count(0) != 1: - raise ValueError("One and only one argument must be 0") - if distance < 0: - raise ValueError("Distance cannot be negative") - if force == 0: - force = COULOMBS_CONSTANT * charge_product / (distance**2) - return {"force": force} - elif charge1 == 0: - charge1 = abs(force) * (distance**2) / (COULOMBS_CONSTANT * charge2) - return {"charge1": charge1} - elif charge2 == 0: - charge2 = abs(force) * (distance**2) / (COULOMBS_CONSTANT * charge1) - return {"charge2": charge2} - elif distance == 0: - distance = (COULOMBS_CONSTANT * charge_product / abs(force)) ** 0.5 - return {"distance": distance} - raise ValueError("Exactly one argument must be 0") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/electric_conductivity.py b/electronics/electric_conductivity.py deleted file mode 100644 index 11f2a607d214..000000000000 --- a/electronics/electric_conductivity.py +++ /dev/null @@ -1,53 +0,0 @@ -from __future__ import annotations - -ELECTRON_CHARGE = 1.6021e-19 # units = C - - -def electric_conductivity( - conductivity: float, - electron_conc: float, - mobility: float, -) -> tuple[str, float]: - """ - This function can calculate any one of the three - - 1. Conductivity - 2. Electron Concentration - 3. Electron Mobility - This is calculated from the other two provided values - Examples - - >>> electric_conductivity(conductivity=25, electron_conc=100, mobility=0) - ('mobility', 1.5604519068722301e+18) - >>> electric_conductivity(conductivity=0, electron_conc=1600, mobility=200) - ('conductivity', 5.12672e-14) - >>> electric_conductivity(conductivity=1000, electron_conc=0, mobility=1200) - ('electron_conc', 5.201506356240767e+18) - """ - if (conductivity, electron_conc, mobility).count(0) != 1: - raise ValueError("You cannot supply more or less than 2 values") - elif conductivity < 0: - raise ValueError("Conductivity cannot be negative") - elif electron_conc < 0: - raise ValueError("Electron concentration cannot be negative") - elif mobility < 0: - raise ValueError("mobility cannot be negative") - elif conductivity == 0: - return ( - "conductivity", - mobility * electron_conc * ELECTRON_CHARGE, - ) - elif electron_conc == 0: - return ( - "electron_conc", - conductivity / (mobility * ELECTRON_CHARGE), - ) - else: - return ( - "mobility", - conductivity / (electron_conc * ELECTRON_CHARGE), - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/electric_power.py b/electronics/electric_power.py deleted file mode 100644 index 8b92e320ace3..000000000000 --- a/electronics/electric_power.py +++ /dev/null @@ -1,57 +0,0 @@ -# https://en.m.wikipedia.org/wiki/Electric_power -from __future__ import annotations - -from typing import NamedTuple - - -class Result(NamedTuple): - name: str - value: float - - -def electric_power(voltage: float, current: float, power: float) -> tuple: - """ - This function can calculate any one of the three (voltage, current, power), - fundamental value of electrical system. - examples are below: - >>> electric_power(voltage=0, current=2, power=5) - Result(name='voltage', value=2.5) - >>> electric_power(voltage=2, current=2, power=0) - Result(name='power', value=4.0) - >>> electric_power(voltage=-2, current=3, power=0) - Result(name='power', value=6.0) - >>> electric_power(voltage=2, current=4, power=2) - Traceback (most recent call last): - ... - ValueError: Only one argument must be 0 - >>> electric_power(voltage=0, current=0, power=2) - Traceback (most recent call last): - ... - ValueError: Only one argument must be 0 - >>> electric_power(voltage=0, current=2, power=-4) - Traceback (most recent call last): - ... - ValueError: Power cannot be negative in any electrical/electronics system - >>> electric_power(voltage=2.2, current=2.2, power=0) - Result(name='power', value=4.84) - """ - if (voltage, current, power).count(0) != 1: - raise ValueError("Only one argument must be 0") - elif power < 0: - raise ValueError( - "Power cannot be negative in any electrical/electronics system" - ) - elif voltage == 0: - return Result("voltage", power / current) - elif current == 0: - return Result("current", power / voltage) - elif power == 0: - return Result("power", float(round(abs(voltage * current), 2))) - else: - raise ValueError("Exactly one argument must be 0") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/electrical_impedance.py b/electronics/electrical_impedance.py deleted file mode 100644 index 44041ff790b6..000000000000 --- a/electronics/electrical_impedance.py +++ /dev/null @@ -1,46 +0,0 @@ -"""Electrical impedance is the measure of the opposition that a -circuit presents to a current when a voltage is applied. -Impedance extends the concept of resistance to alternating current (AC) circuits. -Source: https://en.wikipedia.org/wiki/Electrical_impedance -""" - -from __future__ import annotations - -from math import pow, sqrt - - -def electrical_impedance( - resistance: float, reactance: float, impedance: float -) -> dict[str, float]: - """ - Apply Electrical Impedance formula, on any two given electrical values, - which can be resistance, reactance, and impedance, and then in a Python dict - return name/value pair of the zero value. - - >>> electrical_impedance(3,4,0) - {'impedance': 5.0} - >>> electrical_impedance(0,4,5) - {'resistance': 3.0} - >>> electrical_impedance(3,0,5) - {'reactance': 4.0} - >>> electrical_impedance(3,4,5) - Traceback (most recent call last): - ... - ValueError: One and only one argument must be 0 - """ - if (resistance, reactance, impedance).count(0) != 1: - raise ValueError("One and only one argument must be 0") - if resistance == 0: - return {"resistance": sqrt(pow(impedance, 2) - pow(reactance, 2))} - elif reactance == 0: - return {"reactance": sqrt(pow(impedance, 2) - pow(resistance, 2))} - elif impedance == 0: - return {"impedance": sqrt(pow(resistance, 2) + pow(reactance, 2))} - else: - raise ValueError("Exactly one argument must be 0") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/ic_555_timer.py b/electronics/ic_555_timer.py deleted file mode 100644 index e187e1928dca..000000000000 --- a/electronics/ic_555_timer.py +++ /dev/null @@ -1,75 +0,0 @@ -from __future__ import annotations - -""" - Calculate the frequency and/or duty cycle of an astable 555 timer. - * https://en.wikipedia.org/wiki/555_timer_IC#Astable - - These functions take in the value of the external resistances (in ohms) - and capacitance (in Microfarad), and calculates the following: - - ------------------------------------- - | Freq = 1.44 /[( R1+ 2 x R2) x C1] | ... in Hz - ------------------------------------- - where Freq is the frequency, - R1 is the first resistance in ohms, - R2 is the second resistance in ohms, - C1 is the capacitance in Microfarads. - - ------------------------------------------------ - | Duty Cycle = (R1 + R2) / (R1 + 2 x R2) x 100 | ... in % - ------------------------------------------------ - where R1 is the first resistance in ohms, - R2 is the second resistance in ohms. -""" - - -def astable_frequency( - resistance_1: float, resistance_2: float, capacitance: float -) -> float: - """ - Usage examples: - >>> astable_frequency(resistance_1=45, resistance_2=45, capacitance=7) - 1523.8095238095239 - >>> astable_frequency(resistance_1=356, resistance_2=234, capacitance=976) - 1.7905459175553078 - >>> astable_frequency(resistance_1=2, resistance_2=-1, capacitance=2) - Traceback (most recent call last): - ... - ValueError: All values must be positive - >>> astable_frequency(resistance_1=45, resistance_2=45, capacitance=0) - Traceback (most recent call last): - ... - ValueError: All values must be positive - """ - - if resistance_1 <= 0 or resistance_2 <= 0 or capacitance <= 0: - raise ValueError("All values must be positive") - return (1.44 / ((resistance_1 + 2 * resistance_2) * capacitance)) * 10**6 - - -def astable_duty_cycle(resistance_1: float, resistance_2: float) -> float: - """ - Usage examples: - >>> astable_duty_cycle(resistance_1=45, resistance_2=45) - 66.66666666666666 - >>> astable_duty_cycle(resistance_1=356, resistance_2=234) - 71.60194174757282 - >>> astable_duty_cycle(resistance_1=2, resistance_2=-1) - Traceback (most recent call last): - ... - ValueError: All values must be positive - >>> astable_duty_cycle(resistance_1=0, resistance_2=0) - Traceback (most recent call last): - ... - ValueError: All values must be positive - """ - - if resistance_1 <= 0 or resistance_2 <= 0: - raise ValueError("All values must be positive") - return (resistance_1 + resistance_2) / (resistance_1 + 2 * resistance_2) * 100 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/ind_reactance.py b/electronics/ind_reactance.py deleted file mode 100644 index 3f77ef628203..000000000000 --- a/electronics/ind_reactance.py +++ /dev/null @@ -1,69 +0,0 @@ -# https://en.wikipedia.org/wiki/Electrical_reactance#Inductive_reactance -from __future__ import annotations - -from math import pi - - -def ind_reactance( - inductance: float, frequency: float, reactance: float -) -> dict[str, float]: - """ - Calculate inductive reactance, frequency or inductance from two given electrical - properties then return name/value pair of the zero value in a Python dict. - - Parameters - ---------- - inductance : float with units in Henries - - frequency : float with units in Hertz - - reactance : float with units in Ohms - - >>> ind_reactance(-35e-6, 1e3, 0) - Traceback (most recent call last): - ... - ValueError: Inductance cannot be negative - - >>> ind_reactance(35e-6, -1e3, 0) - Traceback (most recent call last): - ... - ValueError: Frequency cannot be negative - - >>> ind_reactance(35e-6, 0, -1) - Traceback (most recent call last): - ... - ValueError: Inductive reactance cannot be negative - - >>> ind_reactance(0, 10e3, 50) - {'inductance': 0.0007957747154594767} - - >>> ind_reactance(35e-3, 0, 50) - {'frequency': 227.36420441699332} - - >>> ind_reactance(35e-6, 1e3, 0) - {'reactance': 0.2199114857512855} - - """ - - if (inductance, frequency, reactance).count(0) != 1: - raise ValueError("One and only one argument must be 0") - if inductance < 0: - raise ValueError("Inductance cannot be negative") - if frequency < 0: - raise ValueError("Frequency cannot be negative") - if reactance < 0: - raise ValueError("Inductive reactance cannot be negative") - if inductance == 0: - return {"inductance": reactance / (2 * pi * frequency)} - elif frequency == 0: - return {"frequency": reactance / (2 * pi * inductance)} - elif reactance == 0: - return {"reactance": 2 * pi * frequency * inductance} - else: - raise ValueError("Exactly one argument must be 0") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/ohms_law.py b/electronics/ohms_law.py deleted file mode 100644 index 66e737c1f909..000000000000 --- a/electronics/ohms_law.py +++ /dev/null @@ -1,42 +0,0 @@ -# https://en.wikipedia.org/wiki/Ohm%27s_law -from __future__ import annotations - - -def ohms_law(voltage: float, current: float, resistance: float) -> dict[str, float]: - """ - Apply Ohm's Law, on any two given electrical values, which can be voltage, current, - and resistance, and then in a Python dict return name/value pair of the zero value. - - >>> ohms_law(voltage=10, resistance=5, current=0) - {'current': 2.0} - >>> ohms_law(voltage=0, current=0, resistance=10) - Traceback (most recent call last): - ... - ValueError: One and only one argument must be 0 - >>> ohms_law(voltage=0, current=1, resistance=-2) - Traceback (most recent call last): - ... - ValueError: Resistance cannot be negative - >>> ohms_law(resistance=0, voltage=-10, current=1) - {'resistance': -10.0} - >>> ohms_law(voltage=0, current=-1.5, resistance=2) - {'voltage': -3.0} - """ - if (voltage, current, resistance).count(0) != 1: - raise ValueError("One and only one argument must be 0") - if resistance < 0: - raise ValueError("Resistance cannot be negative") - if voltage == 0: - return {"voltage": float(current * resistance)} - elif current == 0: - return {"current": voltage / resistance} - elif resistance == 0: - return {"resistance": voltage / current} - else: - raise ValueError("Exactly one argument must be 0") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/real_and_reactive_power.py b/electronics/real_and_reactive_power.py deleted file mode 100644 index 81dcba800e82..000000000000 --- a/electronics/real_and_reactive_power.py +++ /dev/null @@ -1,49 +0,0 @@ -import math - - -def real_power(apparent_power: float, power_factor: float) -> float: - """ - Calculate real power from apparent power and power factor. - - Examples: - >>> real_power(100, 0.9) - 90.0 - >>> real_power(0, 0.8) - 0.0 - >>> real_power(100, -0.9) - -90.0 - """ - if ( - not isinstance(power_factor, (int, float)) - or power_factor < -1 - or power_factor > 1 - ): - raise ValueError("power_factor must be a valid float value between -1 and 1.") - return apparent_power * power_factor - - -def reactive_power(apparent_power: float, power_factor: float) -> float: - """ - Calculate reactive power from apparent power and power factor. - - Examples: - >>> reactive_power(100, 0.9) - 43.58898943540673 - >>> reactive_power(0, 0.8) - 0.0 - >>> reactive_power(100, -0.9) - 43.58898943540673 - """ - if ( - not isinstance(power_factor, (int, float)) - or power_factor < -1 - or power_factor > 1 - ): - raise ValueError("power_factor must be a valid float value between -1 and 1.") - return apparent_power * math.sqrt(1 - power_factor**2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/resistor_color_code.py b/electronics/resistor_color_code.py deleted file mode 100644 index 189d19946d9d..000000000000 --- a/electronics/resistor_color_code.py +++ /dev/null @@ -1,374 +0,0 @@ -""" -Title : Calculating the resistance of a n band resistor using the color codes - -Description : - Resistors resist the flow of electrical current.Each one has a value that tells how - strongly it resists current flow.This value's unit is the ohm, often noted with the - Greek letter omega: Ω. - - The colored bands on a resistor can tell you everything you need to know about its - value and tolerance, as long as you understand how to read them. The order in which - the colors are arranged is very important, and each value of resistor has its own - unique combination. - - The color coding for resistors is an international standard that is defined in IEC - 60062. - - The number of bands present in a resistor varies from three to six. These represent - significant figures, multiplier, tolerance, reliability, and temperature coefficient - Each color used for a type of band has a value assigned to it. It is read from left - to right. - All resistors will have significant figures and multiplier bands. In a three band - resistor first two bands from the left represent significant figures and the third - represents the multiplier band. - - Significant figures - The number of significant figures band in a resistor can vary - from two to three. - Colors and values associated with significant figure bands - - (Black = 0, Brown = 1, Red = 2, Orange = 3, Yellow = 4, Green = 5, Blue = 6, - Violet = 7, Grey = 8, White = 9) - - Multiplier - There will be one multiplier band in a resistor. It is multiplied with - the significant figures obtained from previous bands. - Colors and values associated with multiplier band - - (Black = 100, Brown = 10^1, Red = 10^2, Orange = 10^3, Yellow = 10^4, Green = 10^5, - Blue = 10^6, Violet = 10^7, Grey = 10^8, White = 10^9, Gold = 10^-1, Silver = 10^-2) - Note that multiplier bands use Gold and Silver which are not used for significant - figure bands. - - Tolerance - The tolerance band is not always present. It can be seen in four band - resistors and above. This is a percentage by which the resistor value can vary. - Colors and values associated with tolerance band - - (Brown = 1%, Red = 2%, Orange = 0.05%, Yellow = 0.02%, Green = 0.5%,Blue = 0.25%, - Violet = 0.1%, Grey = 0.01%, Gold = 5%, Silver = 10%) - If no color is mentioned then by default tolerance is 20% - Note that tolerance band does not use Black and White colors. - - Temperature Coeffecient - Indicates the change in resistance of the component as - a function of ambient temperature in terms of ppm/K. - It is present in six band resistors. - Colors and values associated with Temperature coeffecient - - (Black = 250 ppm/K, Brown = 100 ppm/K, Red = 50 ppm/K, Orange = 15 ppm/K, - Yellow = 25 ppm/K, Green = 20 ppm/K, Blue = 10 ppm/K, Violet = 5 ppm/K, - Grey = 1 ppm/K) - Note that temperature coeffecient band does not use White, Gold, Silver colors. - -Sources : - https://www.calculator.net/resistor-calculator.html - https://learn.parallax.com/support/reference/resistor-color-codes - https://byjus.com/physics/resistor-colour-codes/ -""" - -valid_colors: list = [ - "Black", - "Brown", - "Red", - "Orange", - "Yellow", - "Green", - "Blue", - "Violet", - "Grey", - "White", - "Gold", - "Silver", -] - -significant_figures_color_values: dict[str, int] = { - "Black": 0, - "Brown": 1, - "Red": 2, - "Orange": 3, - "Yellow": 4, - "Green": 5, - "Blue": 6, - "Violet": 7, - "Grey": 8, - "White": 9, -} - -multiplier_color_values: dict[str, float] = { - "Black": 10**0, - "Brown": 10**1, - "Red": 10**2, - "Orange": 10**3, - "Yellow": 10**4, - "Green": 10**5, - "Blue": 10**6, - "Violet": 10**7, - "Grey": 10**8, - "White": 10**9, - "Gold": 10**-1, - "Silver": 10**-2, -} - -tolerance_color_values: dict[str, float] = { - "Brown": 1, - "Red": 2, - "Orange": 0.05, - "Yellow": 0.02, - "Green": 0.5, - "Blue": 0.25, - "Violet": 0.1, - "Grey": 0.01, - "Gold": 5, - "Silver": 10, -} - -temperature_coeffecient_color_values: dict[str, int] = { - "Black": 250, - "Brown": 100, - "Red": 50, - "Orange": 15, - "Yellow": 25, - "Green": 20, - "Blue": 10, - "Violet": 5, - "Grey": 1, -} - -band_types: dict[int, dict[str, int]] = { - 3: {"significant": 2, "multiplier": 1}, - 4: {"significant": 2, "multiplier": 1, "tolerance": 1}, - 5: {"significant": 3, "multiplier": 1, "tolerance": 1}, - 6: {"significant": 3, "multiplier": 1, "tolerance": 1, "temp_coeffecient": 1}, -} - - -def get_significant_digits(colors: list) -> str: - """ - Function returns the digit associated with the color. Function takes a - list containing colors as input and returns digits as string - - >>> get_significant_digits(['Black','Blue']) - '06' - - >>> get_significant_digits(['Aqua','Blue']) - Traceback (most recent call last): - ... - ValueError: Aqua is not a valid color for significant figure bands - - """ - digit = "" - for color in colors: - if color not in significant_figures_color_values: - msg = f"{color} is not a valid color for significant figure bands" - raise ValueError(msg) - digit = digit + str(significant_figures_color_values[color]) - return str(digit) - - -def get_multiplier(color: str) -> float: - """ - Function returns the multiplier value associated with the color. - Function takes color as input and returns multiplier value - - >>> get_multiplier('Gold') - 0.1 - - >>> get_multiplier('Ivory') - Traceback (most recent call last): - ... - ValueError: Ivory is not a valid color for multiplier band - - """ - if color not in multiplier_color_values: - msg = f"{color} is not a valid color for multiplier band" - raise ValueError(msg) - return multiplier_color_values[color] - - -def get_tolerance(color: str) -> float: - """ - Function returns the tolerance value associated with the color. - Function takes color as input and returns tolerance value. - - >>> get_tolerance('Green') - 0.5 - - >>> get_tolerance('Indigo') - Traceback (most recent call last): - ... - ValueError: Indigo is not a valid color for tolerance band - - """ - if color not in tolerance_color_values: - msg = f"{color} is not a valid color for tolerance band" - raise ValueError(msg) - return tolerance_color_values[color] - - -def get_temperature_coeffecient(color: str) -> int: - """ - Function returns the temperature coeffecient value associated with the color. - Function takes color as input and returns temperature coeffecient value. - - >>> get_temperature_coeffecient('Yellow') - 25 - - >>> get_temperature_coeffecient('Cyan') - Traceback (most recent call last): - ... - ValueError: Cyan is not a valid color for temperature coeffecient band - - """ - if color not in temperature_coeffecient_color_values: - msg = f"{color} is not a valid color for temperature coeffecient band" - raise ValueError(msg) - return temperature_coeffecient_color_values[color] - - -def get_band_type_count(total_number_of_bands: int, type_of_band: str) -> int: - """ - Function returns the number of bands of a given type in a resistor with n bands - Function takes total_number_of_bands and type_of_band as input and returns - number of bands belonging to that type in the given resistor - - >>> get_band_type_count(3,'significant') - 2 - - >>> get_band_type_count(2,'significant') - Traceback (most recent call last): - ... - ValueError: 2 is not a valid number of bands - - >>> get_band_type_count(3,'sign') - Traceback (most recent call last): - ... - ValueError: sign is not valid for a 3 band resistor - - >>> get_band_type_count(3,'tolerance') - Traceback (most recent call last): - ... - ValueError: tolerance is not valid for a 3 band resistor - - >>> get_band_type_count(5,'temp_coeffecient') - Traceback (most recent call last): - ... - ValueError: temp_coeffecient is not valid for a 5 band resistor - - """ - if total_number_of_bands not in band_types: - msg = f"{total_number_of_bands} is not a valid number of bands" - raise ValueError(msg) - if type_of_band not in band_types[total_number_of_bands]: - msg = f"{type_of_band} is not valid for a {total_number_of_bands} band resistor" - raise ValueError(msg) - return band_types[total_number_of_bands][type_of_band] - - -def check_validity(number_of_bands: int, colors: list) -> bool: - """ - Function checks if the input provided is valid or not. - Function takes number_of_bands and colors as input and returns - True if it is valid - - >>> check_validity(3, ["Black","Blue","Orange"]) - True - - >>> check_validity(4, ["Black","Blue","Orange"]) - Traceback (most recent call last): - ... - ValueError: Expecting 4 colors, provided 3 colors - - >>> check_validity(3, ["Cyan","Red","Yellow"]) - Traceback (most recent call last): - ... - ValueError: Cyan is not a valid color - - """ - if number_of_bands >= 3 and number_of_bands <= 6: - if number_of_bands == len(colors): - for color in colors: - if color not in valid_colors: - msg = f"{color} is not a valid color" - raise ValueError(msg) - return True - else: - msg = f"Expecting {number_of_bands} colors, provided {len(colors)} colors" - raise ValueError(msg) - else: - msg = "Invalid number of bands. Resistor bands must be 3 to 6" - raise ValueError(msg) - - -def calculate_resistance(number_of_bands: int, color_code_list: list) -> dict: - """ - Function calculates the total resistance of the resistor using the color codes. - Function takes number_of_bands, color_code_list as input and returns - resistance - - >>> calculate_resistance(3, ["Black","Blue","Orange"]) - {'resistance': '6000Ω ±20% '} - - >>> calculate_resistance(4, ["Orange","Green","Blue","Gold"]) - {'resistance': '35000000Ω ±5% '} - - >>> calculate_resistance(5, ["Violet","Brown","Grey","Silver","Green"]) - {'resistance': '7.18Ω ±0.5% '} - - >>> calculate_resistance(6, ["Red","Green","Blue","Yellow","Orange","Grey"]) - {'resistance': '2560000Ω ±0.05% 1 ppm/K'} - - >>> calculate_resistance(0, ["Violet","Brown","Grey","Silver","Green"]) - Traceback (most recent call last): - ... - ValueError: Invalid number of bands. Resistor bands must be 3 to 6 - - >>> calculate_resistance(4, ["Violet","Brown","Grey","Silver","Green"]) - Traceback (most recent call last): - ... - ValueError: Expecting 4 colors, provided 5 colors - - >>> calculate_resistance(4, ["Violet","Silver","Brown","Grey"]) - Traceback (most recent call last): - ... - ValueError: Silver is not a valid color for significant figure bands - - >>> calculate_resistance(4, ["Violet","Blue","Lime","Grey"]) - Traceback (most recent call last): - ... - ValueError: Lime is not a valid color - - """ - is_valid = check_validity(number_of_bands, color_code_list) - if is_valid: - number_of_significant_bands = get_band_type_count( - number_of_bands, "significant" - ) - significant_colors = color_code_list[:number_of_significant_bands] - significant_digits = int(get_significant_digits(significant_colors)) - multiplier_color = color_code_list[number_of_significant_bands] - multiplier = get_multiplier(multiplier_color) - if number_of_bands == 3: - tolerance_color = None - else: - tolerance_color = color_code_list[number_of_significant_bands + 1] - tolerance = ( - 20 if tolerance_color is None else get_tolerance(str(tolerance_color)) - ) - if number_of_bands != 6: - temperature_coeffecient_color = None - else: - temperature_coeffecient_color = color_code_list[ - number_of_significant_bands + 2 - ] - temperature_coeffecient = ( - 0 - if temperature_coeffecient_color is None - else get_temperature_coeffecient(str(temperature_coeffecient_color)) - ) - resisitance = significant_digits * multiplier - if temperature_coeffecient == 0: - answer = f"{resisitance}Ω ±{tolerance}% " - else: - answer = f"{resisitance}Ω ±{tolerance}% {temperature_coeffecient} ppm/K" - return {"resistance": answer} - else: - raise ValueError("Input is invalid") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/resistor_equivalence.py b/electronics/resistor_equivalence.py deleted file mode 100644 index c4ea7d4b757e..000000000000 --- a/electronics/resistor_equivalence.py +++ /dev/null @@ -1,56 +0,0 @@ -# https://byjus.com/equivalent-resistance-formula/ - -from __future__ import annotations - - -def resistor_parallel(resistors: list[float]) -> float: - """ - Req = 1/ (1/R1 + 1/R2 + ... + 1/Rn) - - >>> resistor_parallel([3.21389, 2, 3]) - 0.8737571620498019 - >>> resistor_parallel([3.21389, 2, -3]) - Traceback (most recent call last): - ... - ValueError: Resistor at index 2 has a negative or zero value! - >>> resistor_parallel([3.21389, 2, 0.000]) - Traceback (most recent call last): - ... - ValueError: Resistor at index 2 has a negative or zero value! - """ - - first_sum = 0.00 - for index, resistor in enumerate(resistors): - if resistor <= 0: - msg = f"Resistor at index {index} has a negative or zero value!" - raise ValueError(msg) - first_sum += 1 / float(resistor) - return 1 / first_sum - - -def resistor_series(resistors: list[float]) -> float: - """ - Req = R1 + R2 + ... + Rn - - Calculate the equivalent resistance for any number of resistors in parallel. - - >>> resistor_series([3.21389, 2, 3]) - 8.21389 - >>> resistor_series([3.21389, 2, -3]) - Traceback (most recent call last): - ... - ValueError: Resistor at index 2 has a negative value! - """ - sum_r = 0.00 - for index, resistor in enumerate(resistors): - sum_r += resistor - if resistor < 0: - msg = f"Resistor at index {index} has a negative value!" - raise ValueError(msg) - return sum_r - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/resonant_frequency.py b/electronics/resonant_frequency.py deleted file mode 100644 index 4f95043b600a..000000000000 --- a/electronics/resonant_frequency.py +++ /dev/null @@ -1,50 +0,0 @@ -# https://en.wikipedia.org/wiki/LC_circuit - -"""An LC circuit, also called a resonant circuit, tank circuit, or tuned circuit, -is an electric circuit consisting of an inductor, represented by the letter L, -and a capacitor, represented by the letter C, connected together. -The circuit can act as an electrical resonator, an electrical analogue of a -tuning fork, storing energy oscillating at the circuit's resonant frequency. -Source: https://en.wikipedia.org/wiki/LC_circuit -""" - -from __future__ import annotations - -from math import pi, sqrt - - -def resonant_frequency(inductance: float, capacitance: float) -> tuple: - """ - This function can calculate the resonant frequency of LC circuit, - for the given value of inductance and capacitnace. - - Examples are given below: - >>> resonant_frequency(inductance=10, capacitance=5) - ('Resonant frequency', 0.022507907903927652) - >>> resonant_frequency(inductance=0, capacitance=5) - Traceback (most recent call last): - ... - ValueError: Inductance cannot be 0 or negative - >>> resonant_frequency(inductance=10, capacitance=0) - Traceback (most recent call last): - ... - ValueError: Capacitance cannot be 0 or negative - """ - - if inductance <= 0: - raise ValueError("Inductance cannot be 0 or negative") - - elif capacitance <= 0: - raise ValueError("Capacitance cannot be 0 or negative") - - else: - return ( - "Resonant frequency", - float(1 / (2 * pi * (sqrt(inductance * capacitance)))), - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/electronics/wheatstone_bridge.py b/electronics/wheatstone_bridge.py deleted file mode 100644 index 3529a09339c4..000000000000 --- a/electronics/wheatstone_bridge.py +++ /dev/null @@ -1,41 +0,0 @@ -# https://en.wikipedia.org/wiki/Wheatstone_bridge -from __future__ import annotations - - -def wheatstone_solver( - resistance_1: float, resistance_2: float, resistance_3: float -) -> float: - """ - This function can calculate the unknown resistance in an wheatstone network, - given that the three other resistances in the network are known. - The formula to calculate the same is: - - --------------- - |Rx=(R2/R1)*R3| - --------------- - - Usage examples: - >>> wheatstone_solver(resistance_1=2, resistance_2=4, resistance_3=5) - 10.0 - >>> wheatstone_solver(resistance_1=356, resistance_2=234, resistance_3=976) - 641.5280898876405 - >>> wheatstone_solver(resistance_1=2, resistance_2=-1, resistance_3=2) - Traceback (most recent call last): - ... - ValueError: All resistance values must be positive - >>> wheatstone_solver(resistance_1=0, resistance_2=0, resistance_3=2) - Traceback (most recent call last): - ... - ValueError: All resistance values must be positive - """ - - if resistance_1 <= 0 or resistance_2 <= 0 or resistance_3 <= 0: - raise ValueError("All resistance values must be positive") - else: - return float((resistance_2 / resistance_1) * resistance_3) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/file_transfer/__init__.py b/file_transfer/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/file_transfer/mytext.txt b/file_transfer/mytext.txt deleted file mode 100644 index 54cfa7f766c7..000000000000 --- a/file_transfer/mytext.txt +++ /dev/null @@ -1,6 +0,0 @@ -Hello -This is sample data -«küßî» -“ЌύБЇ” -😀😉 -😋 diff --git a/file_transfer/receive_file.py b/file_transfer/receive_file.py deleted file mode 100644 index f50ad9fe1107..000000000000 --- a/file_transfer/receive_file.py +++ /dev/null @@ -1,27 +0,0 @@ -import socket - - -def main(): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - host = socket.gethostname() - port = 12312 - - sock.connect((host, port)) - sock.send(b"Hello server!") - - with open("Received_file", "wb") as out_file: - print("File opened") - print("Receiving data...") - while True: - data = sock.recv(1024) - if not data: - break - out_file.write(data) - - print("Successfully received the file") - sock.close() - print("Connection closed") - - -if __name__ == "__main__": - main() diff --git a/file_transfer/send_file.py b/file_transfer/send_file.py deleted file mode 100644 index 1c56e48f47a1..000000000000 --- a/file_transfer/send_file.py +++ /dev/null @@ -1,35 +0,0 @@ -def send_file(filename: str = "mytext.txt", testing: bool = False) -> None: - import socket - - port = 12312 # Reserve a port for your service. - sock = socket.socket() # Create a socket object - host = socket.gethostname() # Get local machine name - sock.bind((host, port)) # Bind to the port - sock.listen(5) # Now wait for client connection. - - print("Server listening....") - - while True: - conn, addr = sock.accept() # Establish connection with client. - print(f"Got connection from {addr}") - data = conn.recv(1024) - print(f"Server received: {data = }") - - with open(filename, "rb") as in_file: - data = in_file.read(1024) - while data: - conn.send(data) - print(f"Sent {data!r}") - data = in_file.read(1024) - - print("Done sending") - conn.close() - if testing: # Allow the test to complete - break - - sock.shutdown(1) - sock.close() - - -if __name__ == "__main__": - send_file() diff --git a/file_transfer/tests/__init__.py b/file_transfer/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/file_transfer/tests/test_send_file.py b/file_transfer/tests/test_send_file.py deleted file mode 100644 index 2a6008448362..000000000000 --- a/file_transfer/tests/test_send_file.py +++ /dev/null @@ -1,31 +0,0 @@ -from unittest.mock import Mock, patch - -from file_transfer.send_file import send_file - - -@patch("socket.socket") -@patch("builtins.open") -def test_send_file_running_as_expected(file, sock): - # ===== initialization ===== - conn = Mock() - sock.return_value.accept.return_value = conn, Mock() - f = iter([1, None]) - file.return_value.__enter__.return_value.read.side_effect = lambda _: next(f) - - # ===== invoke ===== - send_file(filename="mytext.txt", testing=True) - - # ===== ensurance ===== - sock.assert_called_once() - sock.return_value.bind.assert_called_once() - sock.return_value.listen.assert_called_once() - sock.return_value.accept.assert_called_once() - conn.recv.assert_called_once() - - file.return_value.__enter__.assert_called_once() - file.return_value.__enter__.return_value.read.assert_called() - - conn.send.assert_called_once() - conn.close.assert_called_once() - sock.return_value.shutdown.assert_called_once() - sock.return_value.close.assert_called_once() diff --git a/financial/ABOUT.md b/financial/ABOUT.md deleted file mode 100644 index f6b0647f8201..000000000000 --- a/financial/ABOUT.md +++ /dev/null @@ -1,4 +0,0 @@ -### Interest - -* Compound Interest: "Compound interest is calculated by multiplying the initial principal amount by one plus the annual interest rate raised to the number of compound periods minus one." [Compound Interest](https://www.investopedia.com/) -* Simple Interest: "Simple interest paid or received over a certain period is a fixed percentage of the principal amount that was borrowed or lent. " [Simple Interest](https://www.investopedia.com/) diff --git a/financial/__init__.py b/financial/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/financial/equated_monthly_installments.py b/financial/equated_monthly_installments.py deleted file mode 100644 index 3af9224930b5..000000000000 --- a/financial/equated_monthly_installments.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Program to calculate the amortization amount per month, given -- Principal borrowed -- Rate of interest per annum -- Years to repay the loan - -Wikipedia Reference: https://en.wikipedia.org/wiki/Equated_monthly_installment -""" - - -def equated_monthly_installments( - principal: float, rate_per_annum: float, years_to_repay: int -) -> float: - """ - Formula for amortization amount per month: - A = p * r * (1 + r)^n / ((1 + r)^n - 1) - where p is the principal, r is the rate of interest per month - and n is the number of payments - - >>> equated_monthly_installments(25000, 0.12, 3) - 830.3577453212793 - >>> equated_monthly_installments(25000, 0.12, 10) - 358.67737100646826 - >>> equated_monthly_installments(0, 0.12, 3) - Traceback (most recent call last): - ... - Exception: Principal borrowed must be > 0 - >>> equated_monthly_installments(25000, -1, 3) - Traceback (most recent call last): - ... - Exception: Rate of interest must be >= 0 - >>> equated_monthly_installments(25000, 0.12, 0) - Traceback (most recent call last): - ... - Exception: Years to repay must be an integer > 0 - """ - if principal <= 0: - raise Exception("Principal borrowed must be > 0") - if rate_per_annum < 0: - raise Exception("Rate of interest must be >= 0") - if years_to_repay <= 0 or not isinstance(years_to_repay, int): - raise Exception("Years to repay must be an integer > 0") - - # Yearly rate is divided by 12 to get monthly rate - rate_per_month = rate_per_annum / 12 - - # Years to repay is multiplied by 12 to get number of payments as payment is monthly - number_of_payments = years_to_repay * 12 - - return ( - principal - * rate_per_month - * (1 + rate_per_month) ** number_of_payments - / ((1 + rate_per_month) ** number_of_payments - 1) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/financial/exponential_moving_average.py b/financial/exponential_moving_average.py deleted file mode 100644 index b56eb2712415..000000000000 --- a/financial/exponential_moving_average.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -Calculate the exponential moving average (EMA) on the series of stock prices. -Wikipedia Reference: https://en.wikipedia.org/wiki/Exponential_smoothing -https://www.investopedia.com/terms/e/ema.asp#toc-what-is-an-exponential --moving-average-ema - -Exponential moving average is used in finance to analyze changes stock prices. -EMA is used in conjunction with Simple moving average (SMA), EMA reacts to the -changes in the value quicker than SMA, which is one of the advantages of using EMA. -""" - -from collections.abc import Iterator - - -def exponential_moving_average( - stock_prices: Iterator[float], window_size: int -) -> Iterator[float]: - """ - Yields exponential moving averages of the given stock prices. - >>> tuple(exponential_moving_average(iter([2, 5, 3, 8.2, 6, 9, 10]), 3)) - (2, 3.5, 3.25, 5.725, 5.8625, 7.43125, 8.715625) - - :param stock_prices: A stream of stock prices - :param window_size: The number of stock prices that will trigger a new calculation - of the exponential average (window_size > 0) - :return: Yields a sequence of exponential moving averages - - Formula: - - st = alpha * xt + (1 - alpha) * st_prev - - Where, - st : Exponential moving average at timestamp t - xt : stock price in from the stock prices at timestamp t - st_prev : Exponential moving average at timestamp t-1 - alpha : 2/(1 + window_size) - smoothing factor - - Exponential moving average (EMA) is a rule of thumb technique for - smoothing time series data using an exponential window function. - """ - - if window_size <= 0: - raise ValueError("window_size must be > 0") - - # Calculating smoothing factor - alpha = 2 / (1 + window_size) - - # Exponential average at timestamp t - moving_average = 0.0 - - for i, stock_price in enumerate(stock_prices): - if i <= window_size: - # Assigning simple moving average till the window_size for the first time - # is reached - moving_average = (moving_average + stock_price) * 0.5 if i else stock_price - else: - # Calculating exponential moving average based on current timestamp data - # point and previous exponential average value - moving_average = (alpha * stock_price) + ((1 - alpha) * moving_average) - yield moving_average - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - stock_prices = [2.0, 5, 3, 8.2, 6, 9, 10] - window_size = 3 - result = tuple(exponential_moving_average(iter(stock_prices), window_size)) - print(f"{stock_prices = }") - print(f"{window_size = }") - print(f"{result = }") diff --git a/financial/interest.py b/financial/interest.py deleted file mode 100644 index 33d02e27ccb3..000000000000 --- a/financial/interest.py +++ /dev/null @@ -1,120 +0,0 @@ -# https://www.investopedia.com - -from __future__ import annotations - - -def simple_interest( - principal: float, daily_interest_rate: float, days_between_payments: float -) -> float: - """ - >>> simple_interest(18000.0, 0.06, 3) - 3240.0 - >>> simple_interest(0.5, 0.06, 3) - 0.09 - >>> simple_interest(18000.0, 0.01, 10) - 1800.0 - >>> simple_interest(18000.0, 0.0, 3) - 0.0 - >>> simple_interest(5500.0, 0.01, 100) - 5500.0 - >>> simple_interest(10000.0, -0.06, 3) - Traceback (most recent call last): - ... - ValueError: daily_interest_rate must be >= 0 - >>> simple_interest(-10000.0, 0.06, 3) - Traceback (most recent call last): - ... - ValueError: principal must be > 0 - >>> simple_interest(5500.0, 0.01, -5) - Traceback (most recent call last): - ... - ValueError: days_between_payments must be > 0 - """ - if days_between_payments <= 0: - raise ValueError("days_between_payments must be > 0") - if daily_interest_rate < 0: - raise ValueError("daily_interest_rate must be >= 0") - if principal <= 0: - raise ValueError("principal must be > 0") - return principal * daily_interest_rate * days_between_payments - - -def compound_interest( - principal: float, - nominal_annual_interest_rate_percentage: float, - number_of_compounding_periods: float, -) -> float: - """ - >>> compound_interest(10000.0, 0.05, 3) - 1576.2500000000014 - >>> compound_interest(10000.0, 0.05, 1) - 500.00000000000045 - >>> compound_interest(0.5, 0.05, 3) - 0.07881250000000006 - >>> compound_interest(10000.0, 0.06, -4) - Traceback (most recent call last): - ... - ValueError: number_of_compounding_periods must be > 0 - >>> compound_interest(10000.0, -3.5, 3.0) - Traceback (most recent call last): - ... - ValueError: nominal_annual_interest_rate_percentage must be >= 0 - >>> compound_interest(-5500.0, 0.01, 5) - Traceback (most recent call last): - ... - ValueError: principal must be > 0 - """ - if number_of_compounding_periods <= 0: - raise ValueError("number_of_compounding_periods must be > 0") - if nominal_annual_interest_rate_percentage < 0: - raise ValueError("nominal_annual_interest_rate_percentage must be >= 0") - if principal <= 0: - raise ValueError("principal must be > 0") - - return principal * ( - (1 + nominal_annual_interest_rate_percentage) ** number_of_compounding_periods - - 1 - ) - - -def apr_interest( - principal: float, - nominal_annual_percentage_rate: float, - number_of_years: float, -) -> float: - """ - >>> apr_interest(10000.0, 0.05, 3) - 1618.223072263547 - >>> apr_interest(10000.0, 0.05, 1) - 512.6749646744732 - >>> apr_interest(0.5, 0.05, 3) - 0.08091115361317736 - >>> apr_interest(10000.0, 0.06, -4) - Traceback (most recent call last): - ... - ValueError: number_of_years must be > 0 - >>> apr_interest(10000.0, -3.5, 3.0) - Traceback (most recent call last): - ... - ValueError: nominal_annual_percentage_rate must be >= 0 - >>> apr_interest(-5500.0, 0.01, 5) - Traceback (most recent call last): - ... - ValueError: principal must be > 0 - """ - if number_of_years <= 0: - raise ValueError("number_of_years must be > 0") - if nominal_annual_percentage_rate < 0: - raise ValueError("nominal_annual_percentage_rate must be >= 0") - if principal <= 0: - raise ValueError("principal must be > 0") - - return compound_interest( - principal, nominal_annual_percentage_rate / 365, number_of_years * 365 - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/financial/present_value.py b/financial/present_value.py deleted file mode 100644 index f74612b923af..000000000000 --- a/financial/present_value.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Reference: https://www.investopedia.com/terms/p/presentvalue.asp - -An algorithm that calculates the present value of a stream of yearly cash flows given... -1. The discount rate (as a decimal, not a percent) -2. An array of cash flows, with the index of the cash flow being the associated year - -Note: This algorithm assumes that cash flows are paid at the end of the specified year -""" - - -def present_value(discount_rate: float, cash_flows: list[float]) -> float: - """ - >>> present_value(0.13, [10, 20.70, -293, 297]) - 4.69 - >>> present_value(0.07, [-109129.39, 30923.23, 15098.93, 29734,39]) - -42739.63 - >>> present_value(0.07, [109129.39, 30923.23, 15098.93, 29734,39]) - 175519.15 - >>> present_value(-1, [109129.39, 30923.23, 15098.93, 29734,39]) - Traceback (most recent call last): - ... - ValueError: Discount rate cannot be negative - >>> present_value(0.03, []) - Traceback (most recent call last): - ... - ValueError: Cash flows list cannot be empty - """ - if discount_rate < 0: - raise ValueError("Discount rate cannot be negative") - if not cash_flows: - raise ValueError("Cash flows list cannot be empty") - present_value = sum( - cash_flow / ((1 + discount_rate) ** i) for i, cash_flow in enumerate(cash_flows) - ) - return round(present_value, ndigits=2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/financial/price_plus_tax.py b/financial/price_plus_tax.py deleted file mode 100644 index 43876d35e57c..000000000000 --- a/financial/price_plus_tax.py +++ /dev/null @@ -1,18 +0,0 @@ -""" -Calculate price plus tax of a good or service given its price and a tax rate. -""" - - -def price_plus_tax(price: float, tax_rate: float) -> float: - """ - >>> price_plus_tax(100, 0.25) - 125.0 - >>> price_plus_tax(125.50, 0.05) - 131.775 - """ - return price * (1 + tax_rate) - - -if __name__ == "__main__": - print(f"{price_plus_tax(100, 0.25) = }") - print(f"{price_plus_tax(125.50, 0.05) = }") diff --git a/financial/simple_moving_average.py b/financial/simple_moving_average.py deleted file mode 100644 index f5ae444fd027..000000000000 --- a/financial/simple_moving_average.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -The Simple Moving Average (SMA) is a statistical calculation used to analyze data points -by creating a constantly updated average price over a specific time period. -In finance, SMA is often used in time series analysis to smooth out price data -and identify trends. - -Reference: https://en.wikipedia.org/wiki/Moving_average -""" - -from collections.abc import Sequence - - -def simple_moving_average( - data: Sequence[float], window_size: int -) -> list[float | None]: - """ - Calculate the simple moving average (SMA) for some given time series data. - - :param data: A list of numerical data points. - :param window_size: An integer representing the size of the SMA window. - :return: A list of SMA values with the same length as the input data. - - Examples: - >>> sma = simple_moving_average([10, 12, 15, 13, 14, 16, 18, 17, 19, 21], 3) - >>> [round(value, 2) if value is not None else None for value in sma] - [None, None, 12.33, 13.33, 14.0, 14.33, 16.0, 17.0, 18.0, 19.0] - >>> simple_moving_average([10, 12, 15], 5) - [None, None, None] - >>> simple_moving_average([10, 12, 15, 13, 14, 16, 18, 17, 19, 21], 0) - Traceback (most recent call last): - ... - ValueError: Window size must be a positive integer - """ - if window_size < 1: - raise ValueError("Window size must be a positive integer") - - sma: list[float | None] = [] - - for i in range(len(data)): - if i < window_size - 1: - sma.append(None) # SMA not available for early data points - else: - window = data[i - window_size + 1 : i + 1] - sma_value = sum(window) / window_size - sma.append(sma_value) - return sma - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Example data (replace with your own time series data) - data = [10, 12, 15, 13, 14, 16, 18, 17, 19, 21] - - # Specify the window size for the SMA - window_size = 3 - - # Calculate the Simple Moving Average - sma_values = simple_moving_average(data, window_size) - - # Print the SMA values - print("Simple Moving Average (SMA) Values:") - for i, value in enumerate(sma_values): - if value is not None: - print(f"Day {i + 1}: {value:.2f}") - else: - print(f"Day {i + 1}: Not enough data for SMA") diff --git a/fractals/__init__.py b/fractals/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/fractals/julia_sets.py b/fractals/julia_sets.py deleted file mode 100644 index bea599d44339..000000000000 --- a/fractals/julia_sets.py +++ /dev/null @@ -1,217 +0,0 @@ -"""Author Alexandre De Zotti - -Draws Julia sets of quadratic polynomials and exponential maps. - More specifically, this iterates the function a fixed number of times - then plots whether the absolute value of the last iterate is greater than - a fixed threshold (named "escape radius"). For the exponential map this is not - really an escape radius but rather a convenient way to approximate the Julia - set with bounded orbits. - -The examples presented here are: -- The Cauliflower Julia set, see e.g. -https://en.wikipedia.org/wiki/File:Julia_z2%2B0,25.png -- Other examples from https://en.wikipedia.org/wiki/Julia_set -- An exponential map Julia set, ambiantly homeomorphic to the examples in -https://www.math.univ-toulouse.fr/~cheritat/GalII/galery.html - and -https://ddd.uab.cat/pub/pubmat/02141493v43n1/02141493v43n1p27.pdf - -Remark: Some overflow runtime warnings are suppressed. This is because of the - way the iteration loop is implemented, using numpy's efficient computations. - Overflows and infinites are replaced after each step by a large number. -""" - -import warnings -from collections.abc import Callable -from typing import Any - -import matplotlib.pyplot as plt -import numpy as np - -c_cauliflower = 0.25 + 0.0j -c_polynomial_1 = -0.4 + 0.6j -c_polynomial_2 = -0.1 + 0.651j -c_exponential = -2.0 -nb_iterations = 56 -window_size = 2.0 -nb_pixels = 666 - - -def eval_exponential(c_parameter: complex, z_values: np.ndarray) -> np.ndarray: - """ - Evaluate $e^z + c$. - >>> float(eval_exponential(0, 0)) - 1.0 - >>> bool(abs(eval_exponential(1, np.pi*1.j)) < 1e-15) - True - >>> bool(abs(eval_exponential(1.j, 0)-1-1.j) < 1e-15) - True - """ - return np.exp(z_values) + c_parameter - - -def eval_quadratic_polynomial(c_parameter: complex, z_values: np.ndarray) -> np.ndarray: - """ - >>> eval_quadratic_polynomial(0, 2) - 4 - >>> eval_quadratic_polynomial(-1, 1) - 0 - >>> round(eval_quadratic_polynomial(1.j, 0).imag) - 1 - >>> round(eval_quadratic_polynomial(1.j, 0).real) - 0 - """ - return z_values * z_values + c_parameter - - -def prepare_grid(window_size: float, nb_pixels: int) -> np.ndarray: - """ - Create a grid of complex values of size nb_pixels*nb_pixels with real and - imaginary parts ranging from -window_size to window_size (inclusive). - Returns a numpy array. - - >>> prepare_grid(1,3) - array([[-1.-1.j, -1.+0.j, -1.+1.j], - [ 0.-1.j, 0.+0.j, 0.+1.j], - [ 1.-1.j, 1.+0.j, 1.+1.j]]) - """ - x = np.linspace(-window_size, window_size, nb_pixels) - x = x.reshape((nb_pixels, 1)) - y = np.linspace(-window_size, window_size, nb_pixels) - y = y.reshape((1, nb_pixels)) - return x + 1.0j * y - - -def iterate_function( - eval_function: Callable[[Any, np.ndarray], np.ndarray], - function_params: Any, - nb_iterations: int, - z_0: np.ndarray, - infinity: float | None = None, -) -> np.ndarray: - """ - Iterate the function "eval_function" exactly nb_iterations times. - The first argument of the function is a parameter which is contained in - function_params. The variable z_0 is an array that contains the initial - values to iterate from. - This function returns the final iterates. - - >>> iterate_function(eval_quadratic_polynomial, 0, 3, np.array([0,1,2])).shape - (3,) - >>> complex(np.round(iterate_function(eval_quadratic_polynomial, - ... 0, - ... 3, - ... np.array([0,1,2]))[0])) - 0j - >>> complex(np.round(iterate_function(eval_quadratic_polynomial, - ... 0, - ... 3, - ... np.array([0,1,2]))[1])) - (1+0j) - >>> complex(np.round(iterate_function(eval_quadratic_polynomial, - ... 0, - ... 3, - ... np.array([0,1,2]))[2])) - (256+0j) - """ - - z_n = z_0.astype("complex64") - for _ in range(nb_iterations): - z_n = eval_function(function_params, z_n) - if infinity is not None: - np.nan_to_num(z_n, copy=False, nan=infinity) - z_n[abs(z_n) == np.inf] = infinity - return z_n - - -def show_results( - function_label: str, - function_params: Any, - escape_radius: float, - z_final: np.ndarray, -) -> None: - """ - Plots of whether the absolute value of z_final is greater than - the value of escape_radius. Adds the function_label and function_params to - the title. - - >>> show_results('80', 0, 1, np.array([[0,1,.5],[.4,2,1.1],[.2,1,1.3]])) - """ - - abs_z_final = (abs(z_final)).transpose() - abs_z_final[:, :] = abs_z_final[::-1, :] - plt.matshow(abs_z_final < escape_radius) - plt.title(f"Julia set of ${function_label}$, $c={function_params}$") - plt.show() - - -def ignore_overflow_warnings() -> None: - """ - Ignore some overflow and invalid value warnings. - - >>> ignore_overflow_warnings() - """ - warnings.filterwarnings( - "ignore", category=RuntimeWarning, message="overflow encountered in multiply" - ) - warnings.filterwarnings( - "ignore", - category=RuntimeWarning, - message="invalid value encountered in multiply", - ) - warnings.filterwarnings( - "ignore", category=RuntimeWarning, message="overflow encountered in absolute" - ) - warnings.filterwarnings( - "ignore", category=RuntimeWarning, message="overflow encountered in exp" - ) - - -if __name__ == "__main__": - z_0 = prepare_grid(window_size, nb_pixels) - - ignore_overflow_warnings() # See file header for explanations - - nb_iterations = 24 - escape_radius = 2 * abs(c_cauliflower) + 1 - z_final = iterate_function( - eval_quadratic_polynomial, - c_cauliflower, - nb_iterations, - z_0, - infinity=1.1 * escape_radius, - ) - show_results("z^2+c", c_cauliflower, escape_radius, z_final) - - nb_iterations = 64 - escape_radius = 2 * abs(c_polynomial_1) + 1 - z_final = iterate_function( - eval_quadratic_polynomial, - c_polynomial_1, - nb_iterations, - z_0, - infinity=1.1 * escape_radius, - ) - show_results("z^2+c", c_polynomial_1, escape_radius, z_final) - - nb_iterations = 161 - escape_radius = 2 * abs(c_polynomial_2) + 1 - z_final = iterate_function( - eval_quadratic_polynomial, - c_polynomial_2, - nb_iterations, - z_0, - infinity=1.1 * escape_radius, - ) - show_results("z^2+c", c_polynomial_2, escape_radius, z_final) - - nb_iterations = 12 - escape_radius = 10000.0 - z_final = iterate_function( - eval_exponential, - c_exponential, - nb_iterations, - z_0 + 2, - infinity=1.0e10, - ) - show_results("e^z+c", c_exponential, escape_radius, z_final) diff --git a/fractals/koch_snowflake.py b/fractals/koch_snowflake.py deleted file mode 100644 index 724b78f41a69..000000000000 --- a/fractals/koch_snowflake.py +++ /dev/null @@ -1,115 +0,0 @@ -""" -Description - The Koch snowflake is a fractal curve and one of the earliest fractals to - have been described. The Koch snowflake can be built up iteratively, in a - sequence of stages. The first stage is an equilateral triangle, and each - successive stage is formed by adding outward bends to each side of the - previous stage, making smaller equilateral triangles. - This can be achieved through the following steps for each line: - 1. divide the line segment into three segments of equal length. - 2. draw an equilateral triangle that has the middle segment from step 1 - as its base and points outward. - 3. remove the line segment that is the base of the triangle from step 2. - (description adapted from https://en.wikipedia.org/wiki/Koch_snowflake ) - (for a more detailed explanation and an implementation in the - Processing language, see https://natureofcode.com/book/chapter-8-fractals/ - #84-the-koch-curve-and-the-arraylist-technique ) - -Requirements (pip): - - matplotlib - - numpy -""" - -from __future__ import annotations - -import matplotlib.pyplot as plt -import numpy as np - -# initial triangle of Koch snowflake -VECTOR_1 = np.array([0, 0]) -VECTOR_2 = np.array([0.5, 0.8660254]) -VECTOR_3 = np.array([1, 0]) -INITIAL_VECTORS = [VECTOR_1, VECTOR_2, VECTOR_3, VECTOR_1] - -# uncomment for simple Koch curve instead of Koch snowflake -# INITIAL_VECTORS = [VECTOR_1, VECTOR_3] - - -def iterate(initial_vectors: list[np.ndarray], steps: int) -> list[np.ndarray]: - """ - Go through the number of iterations determined by the argument "steps". - Be careful with high values (above 5) since the time to calculate increases - exponentially. - >>> iterate([np.array([0, 0]), np.array([1, 0])], 1) - [array([0, 0]), array([0.33333333, 0. ]), array([0.5 , \ -0.28867513]), array([0.66666667, 0. ]), array([1, 0])] - """ - vectors = initial_vectors - for _ in range(steps): - vectors = iteration_step(vectors) - return vectors - - -def iteration_step(vectors: list[np.ndarray]) -> list[np.ndarray]: - """ - Loops through each pair of adjacent vectors. Each line between two adjacent - vectors is divided into 4 segments by adding 3 additional vectors in-between - the original two vectors. The vector in the middle is constructed through a - 60 degree rotation so it is bent outwards. - >>> iteration_step([np.array([0, 0]), np.array([1, 0])]) - [array([0, 0]), array([0.33333333, 0. ]), array([0.5 , \ -0.28867513]), array([0.66666667, 0. ]), array([1, 0])] - """ - new_vectors = [] - for i, start_vector in enumerate(vectors[:-1]): - end_vector = vectors[i + 1] - new_vectors.append(start_vector) - difference_vector = end_vector - start_vector - new_vectors.append(start_vector + difference_vector / 3) - new_vectors.append( - start_vector + difference_vector / 3 + rotate(difference_vector / 3, 60) - ) - new_vectors.append(start_vector + difference_vector * 2 / 3) - new_vectors.append(vectors[-1]) - return new_vectors - - -def rotate(vector: np.ndarray, angle_in_degrees: float) -> np.ndarray: - """ - Standard rotation of a 2D vector with a rotation matrix - (see https://en.wikipedia.org/wiki/Rotation_matrix ) - >>> rotate(np.array([1, 0]), 60) - array([0.5 , 0.8660254]) - >>> rotate(np.array([1, 0]), 90) - array([6.123234e-17, 1.000000e+00]) - """ - theta = np.radians(angle_in_degrees) - c, s = np.cos(theta), np.sin(theta) - rotation_matrix = np.array(((c, -s), (s, c))) - return np.dot(rotation_matrix, vector) - - -def plot(vectors: list[np.ndarray]) -> None: - """ - Utility function to plot the vectors using matplotlib.pyplot - No doctest was implemented since this function does not have a return value - """ - # avoid stretched display of graph - axes = plt.gca() - axes.set_aspect("equal") - - # matplotlib.pyplot.plot takes a list of all x-coordinates and a list of all - # y-coordinates as inputs, which are constructed from the vector-list using - # zip() - x_coordinates, y_coordinates = zip(*vectors) - plt.plot(x_coordinates, y_coordinates) - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - processed_vectors = iterate(INITIAL_VECTORS, 5) - plot(processed_vectors) diff --git a/fractals/mandelbrot.py b/fractals/mandelbrot.py deleted file mode 100644 index 359d965a882d..000000000000 --- a/fractals/mandelbrot.py +++ /dev/null @@ -1,150 +0,0 @@ -""" -The Mandelbrot set is the set of complex numbers "c" for which the series -"z_(n+1) = z_n * z_n + c" does not diverge, i.e. remains bounded. Thus, a -complex number "c" is a member of the Mandelbrot set if, when starting with -"z_0 = 0" and applying the iteration repeatedly, the absolute value of -"z_n" remains bounded for all "n > 0". Complex numbers can be written as -"a + b*i": "a" is the real component, usually drawn on the x-axis, and "b*i" -is the imaginary component, usually drawn on the y-axis. Most visualizations -of the Mandelbrot set use a color-coding to indicate after how many steps in -the series the numbers outside the set diverge. Images of the Mandelbrot set -exhibit an elaborate and infinitely complicated boundary that reveals -progressively ever-finer recursive detail at increasing magnifications, making -the boundary of the Mandelbrot set a fractal curve. -(description adapted from https://en.wikipedia.org/wiki/Mandelbrot_set ) -(see also https://en.wikipedia.org/wiki/Plotting_algorithms_for_the_Mandelbrot_set ) -""" - -import colorsys - -from PIL import Image - - -def get_distance(x: float, y: float, max_step: int) -> float: - """ - Return the relative distance (= step/max_step) after which the complex number - constituted by this x-y-pair diverges. Members of the Mandelbrot set do not - diverge so their distance is 1. - - >>> get_distance(0, 0, 50) - 1.0 - >>> get_distance(0.5, 0.5, 50) - 0.061224489795918366 - >>> get_distance(2, 0, 50) - 0.0 - """ - a = x - b = y - for step in range(max_step): # noqa: B007 - a_new = a * a - b * b + x - b = 2 * a * b + y - a = a_new - - # divergence happens for all complex number with an absolute value - # greater than 4 - if a * a + b * b > 4: - break - return step / (max_step - 1) - - -def get_black_and_white_rgb(distance: float) -> tuple: - """ - Black&white color-coding that ignores the relative distance. The Mandelbrot - set is black, everything else is white. - - >>> get_black_and_white_rgb(0) - (255, 255, 255) - >>> get_black_and_white_rgb(0.5) - (255, 255, 255) - >>> get_black_and_white_rgb(1) - (0, 0, 0) - """ - if distance == 1: - return (0, 0, 0) - else: - return (255, 255, 255) - - -def get_color_coded_rgb(distance: float) -> tuple: - """ - Color-coding taking the relative distance into account. The Mandelbrot set - is black. - - >>> get_color_coded_rgb(0) - (255, 0, 0) - >>> get_color_coded_rgb(0.5) - (0, 255, 255) - >>> get_color_coded_rgb(1) - (0, 0, 0) - """ - if distance == 1: - return (0, 0, 0) - else: - return tuple(round(i * 255) for i in colorsys.hsv_to_rgb(distance, 1, 1)) - - -def get_image( - image_width: int = 800, - image_height: int = 600, - figure_center_x: float = -0.6, - figure_center_y: float = 0, - figure_width: float = 3.2, - max_step: int = 50, - use_distance_color_coding: bool = True, -) -> Image.Image: - """ - Function to generate the image of the Mandelbrot set. Two types of coordinates - are used: image-coordinates that refer to the pixels and figure-coordinates - that refer to the complex numbers inside and outside the Mandelbrot set. The - figure-coordinates in the arguments of this function determine which section - of the Mandelbrot set is viewed. The main area of the Mandelbrot set is - roughly between "-1.5 < x < 0.5" and "-1 < y < 1" in the figure-coordinates. - - Commenting out tests that slow down pytest... - # 13.35s call fractals/mandelbrot.py::mandelbrot.get_image - # >>> get_image().load()[0,0] - (255, 0, 0) - # >>> get_image(use_distance_color_coding = False).load()[0,0] - (255, 255, 255) - """ - img = Image.new("RGB", (image_width, image_height)) - pixels = img.load() - - # loop through the image-coordinates - for image_x in range(image_width): - for image_y in range(image_height): - # determine the figure-coordinates based on the image-coordinates - figure_height = figure_width / image_width * image_height - figure_x = figure_center_x + (image_x / image_width - 0.5) * figure_width - figure_y = figure_center_y + (image_y / image_height - 0.5) * figure_height - - distance = get_distance(figure_x, figure_y, max_step) - - # color the corresponding pixel based on the selected coloring-function - if use_distance_color_coding: - pixels[image_x, image_y] = get_color_coded_rgb(distance) - else: - pixels[image_x, image_y] = get_black_and_white_rgb(distance) - - return img - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # colored version, full figure - img = get_image() - - # uncomment for colored version, different section, zoomed in - # img = get_image(figure_center_x = -0.6, figure_center_y = -0.4, - # figure_width = 0.8) - - # uncomment for black and white version, full figure - # img = get_image(use_distance_color_coding = False) - - # uncomment to save the image - # img.save("mandelbrot.png") - - img.show() diff --git a/fractals/sierpinski_triangle.py b/fractals/sierpinski_triangle.py deleted file mode 100644 index ceb2001b681d..000000000000 --- a/fractals/sierpinski_triangle.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Author Anurag Kumar | anuragkumarak95@gmail.com | git/anuragkumarak95 - -Simple example of fractal generation using recursion. - -What is the Sierpiński Triangle? - The Sierpiński triangle (sometimes spelled Sierpinski), also called the -Sierpiński gasket or Sierpiński sieve, is a fractal attractive fixed set with -the overall shape of an equilateral triangle, subdivided recursively into -smaller equilateral triangles. Originally constructed as a curve, this is one of -the basic examples of self-similar sets—that is, it is a mathematically -generated pattern that is reproducible at any magnification or reduction. It is -named after the Polish mathematician Wacław Sierpiński, but appeared as a -decorative pattern many centuries before the work of Sierpiński. - - -Usage: python sierpinski_triangle.py <int:depth_for_fractal> - -Credits: - The above description is taken from - https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle - This code was written by editing the code from - https://www.riannetrujillo.com/blog/python-fractal/ -""" - -import sys -import turtle - - -def get_mid(p1: tuple[float, float], p2: tuple[float, float]) -> tuple[float, float]: - """ - Find the midpoint of two points - - >>> get_mid((0, 0), (2, 2)) - (1.0, 1.0) - >>> get_mid((-3, -3), (3, 3)) - (0.0, 0.0) - >>> get_mid((1, 0), (3, 2)) - (2.0, 1.0) - >>> get_mid((0, 0), (1, 1)) - (0.5, 0.5) - >>> get_mid((0, 0), (0, 0)) - (0.0, 0.0) - """ - return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2 - - -def triangle( - vertex1: tuple[float, float], - vertex2: tuple[float, float], - vertex3: tuple[float, float], - depth: int, -) -> None: - """ - Recursively draw the Sierpinski triangle given the vertices of the triangle - and the recursion depth - """ - my_pen.up() - my_pen.goto(vertex1[0], vertex1[1]) - my_pen.down() - my_pen.goto(vertex2[0], vertex2[1]) - my_pen.goto(vertex3[0], vertex3[1]) - my_pen.goto(vertex1[0], vertex1[1]) - - if depth == 0: - return - - triangle(vertex1, get_mid(vertex1, vertex2), get_mid(vertex1, vertex3), depth - 1) - triangle(vertex2, get_mid(vertex1, vertex2), get_mid(vertex2, vertex3), depth - 1) - triangle(vertex3, get_mid(vertex3, vertex2), get_mid(vertex1, vertex3), depth - 1) - - -if __name__ == "__main__": - if len(sys.argv) != 2: - raise ValueError( - "Correct format for using this script: " - "python fractals.py <int:depth_for_fractal>" - ) - my_pen = turtle.Turtle() - my_pen.ht() - my_pen.speed(5) - my_pen.pencolor("red") - - vertices = [(-175, -125), (0, 175), (175, -125)] # vertices of triangle - triangle(vertices[0], vertices[1], vertices[2], int(sys.argv[1])) - turtle.Screen().exitonclick() diff --git a/fractals/vicsek.py b/fractals/vicsek.py deleted file mode 100644 index 290fe95b79b4..000000000000 --- a/fractals/vicsek.py +++ /dev/null @@ -1,76 +0,0 @@ -"""Authors Bastien Capiaux & Mehdi Oudghiri - -The Vicsek fractal algorithm is a recursive algorithm that creates a -pattern known as the Vicsek fractal or the Vicsek square. -It is based on the concept of self-similarity, where the pattern at each -level of recursion resembles the overall pattern. -The algorithm involves dividing a square into 9 equal smaller squares, -removing the center square, and then repeating this process on the remaining 8 squares. -This results in a pattern that exhibits self-similarity and has a -square-shaped outline with smaller squares within it. - -Source: https://en.wikipedia.org/wiki/Vicsek_fractal -""" - -import turtle - - -def draw_cross(x: float, y: float, length: float): - """ - Draw a cross at the specified position and with the specified length. - """ - turtle.up() - turtle.goto(x - length / 2, y - length / 6) - turtle.down() - turtle.seth(0) - turtle.begin_fill() - for _ in range(4): - turtle.fd(length / 3) - turtle.right(90) - turtle.fd(length / 3) - turtle.left(90) - turtle.fd(length / 3) - turtle.left(90) - turtle.end_fill() - - -def draw_fractal_recursive(x: float, y: float, length: float, depth: float): - """ - Recursively draw the Vicsek fractal at the specified position, with the - specified length and depth. - """ - if depth == 0: - draw_cross(x, y, length) - return - - draw_fractal_recursive(x, y, length / 3, depth - 1) - draw_fractal_recursive(x + length / 3, y, length / 3, depth - 1) - draw_fractal_recursive(x - length / 3, y, length / 3, depth - 1) - draw_fractal_recursive(x, y + length / 3, length / 3, depth - 1) - draw_fractal_recursive(x, y - length / 3, length / 3, depth - 1) - - -def set_color(rgb: str): - turtle.color(rgb) - - -def draw_vicsek_fractal(x: float, y: float, length: float, depth: float, color="blue"): - """ - Draw the Vicsek fractal at the specified position, with the specified - length and depth. - """ - turtle.speed(0) - turtle.hideturtle() - set_color(color) - draw_fractal_recursive(x, y, length, depth) - turtle.Screen().update() - - -def main(): - draw_vicsek_fractal(0, 0, 800, 4) - - turtle.done() - - -if __name__ == "__main__": - main() diff --git a/fuzzy_logic/__init__.py b/fuzzy_logic/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/fuzzy_logic/fuzzy_operations.py b/fuzzy_logic/fuzzy_operations.py deleted file mode 100644 index c5e4cbde019d..000000000000 --- a/fuzzy_logic/fuzzy_operations.py +++ /dev/null @@ -1,195 +0,0 @@ -""" -By @Shreya123714 - -https://en.wikipedia.org/wiki/Fuzzy_set -""" - -from __future__ import annotations - -from dataclasses import dataclass - -import matplotlib.pyplot as plt -import numpy as np - - -@dataclass -class FuzzySet: - """ - A class for representing and manipulating triangular fuzzy sets. - Attributes: - name: The name or label of the fuzzy set. - left_boundary: The left boundary of the fuzzy set. - peak: The peak (central) value of the fuzzy set. - right_boundary: The right boundary of the fuzzy set. - Methods: - membership(x): Calculate the membership value of an input 'x' in the fuzzy set. - union(other): Calculate the union of this fuzzy set with another fuzzy set. - intersection(other): Calculate the intersection of this fuzzy set with another. - complement(): Calculate the complement (negation) of this fuzzy set. - plot(): Plot the membership function of the fuzzy set. - - >>> sheru = FuzzySet("Sheru", 0.4, 1, 0.6) - >>> sheru - FuzzySet(name='Sheru', left_boundary=0.4, peak=1, right_boundary=0.6) - >>> str(sheru) - 'Sheru: [0.4, 1, 0.6]' - - >>> siya = FuzzySet("Siya", 0.5, 1, 0.7) - >>> siya - FuzzySet(name='Siya', left_boundary=0.5, peak=1, right_boundary=0.7) - - # Complement Operation - >>> sheru.complement() - FuzzySet(name='¬Sheru', left_boundary=0.4, peak=0.6, right_boundary=0) - >>> siya.complement() # doctest: +NORMALIZE_WHITESPACE - FuzzySet(name='¬Siya', left_boundary=0.30000000000000004, peak=0.5, - right_boundary=0) - - # Intersection Operation - >>> siya.intersection(sheru) - FuzzySet(name='Siya ∩ Sheru', left_boundary=0.5, peak=0.6, right_boundary=1.0) - - # Membership Operation - >>> sheru.membership(0.5) - 0.16666666666666663 - >>> sheru.membership(0.6) - 0.0 - - # Union Operations - >>> siya.union(sheru) - FuzzySet(name='Siya U Sheru', left_boundary=0.4, peak=0.7, right_boundary=1.0) - """ - - name: str - left_boundary: float - peak: float - right_boundary: float - - def __str__(self) -> str: - """ - >>> FuzzySet("fuzzy_set", 0.1, 0.2, 0.3) - FuzzySet(name='fuzzy_set', left_boundary=0.1, peak=0.2, right_boundary=0.3) - """ - return ( - f"{self.name}: [{self.left_boundary}, {self.peak}, {self.right_boundary}]" - ) - - def complement(self) -> FuzzySet: - """ - Calculate the complement (negation) of this fuzzy set. - Returns: - FuzzySet: A new fuzzy set representing the complement. - - >>> FuzzySet("fuzzy_set", 0.1, 0.2, 0.3).complement() - FuzzySet(name='¬fuzzy_set', left_boundary=0.7, peak=0.9, right_boundary=0.8) - """ - return FuzzySet( - f"¬{self.name}", - 1 - self.right_boundary, - 1 - self.left_boundary, - 1 - self.peak, - ) - - def intersection(self, other) -> FuzzySet: - """ - Calculate the intersection of this fuzzy set - with another fuzzy set. - Args: - other: Another fuzzy set to intersect with. - Returns: - A new fuzzy set representing the intersection. - - >>> FuzzySet("a", 0.1, 0.2, 0.3).intersection(FuzzySet("b", 0.4, 0.5, 0.6)) - FuzzySet(name='a ∩ b', left_boundary=0.4, peak=0.3, right_boundary=0.35) - """ - return FuzzySet( - f"{self.name} ∩ {other.name}", - max(self.left_boundary, other.left_boundary), - min(self.right_boundary, other.right_boundary), - (self.peak + other.peak) / 2, - ) - - def membership(self, x: float) -> float: - """ - Calculate the membership value of an input 'x' in the fuzzy set. - Returns: - The membership value of 'x' in the fuzzy set. - - >>> a = FuzzySet("a", 0.1, 0.2, 0.3) - >>> a.membership(0.09) - 0.0 - >>> a.membership(0.1) - 0.0 - >>> a.membership(0.11) - 0.09999999999999995 - >>> a.membership(0.4) - 0.0 - >>> FuzzySet("A", 0, 0.5, 1).membership(0.1) - 0.2 - >>> FuzzySet("B", 0.2, 0.7, 1).membership(0.6) - 0.8 - """ - if x <= self.left_boundary or x >= self.right_boundary: - return 0.0 - elif self.left_boundary < x <= self.peak: - return (x - self.left_boundary) / (self.peak - self.left_boundary) - elif self.peak < x < self.right_boundary: - return (self.right_boundary - x) / (self.right_boundary - self.peak) - msg = f"Invalid value {x} for fuzzy set {self}" - raise ValueError(msg) - - def union(self, other) -> FuzzySet: - """ - Calculate the union of this fuzzy set with another fuzzy set. - Args: - other (FuzzySet): Another fuzzy set to union with. - Returns: - FuzzySet: A new fuzzy set representing the union. - - >>> FuzzySet("a", 0.1, 0.2, 0.3).union(FuzzySet("b", 0.4, 0.5, 0.6)) - FuzzySet(name='a U b', left_boundary=0.1, peak=0.6, right_boundary=0.35) - """ - return FuzzySet( - f"{self.name} U {other.name}", - min(self.left_boundary, other.left_boundary), - max(self.right_boundary, other.right_boundary), - (self.peak + other.peak) / 2, - ) - - def plot(self): - """ - Plot the membership function of the fuzzy set. - """ - x = np.linspace(0, 1, 1000) - y = [self.membership(xi) for xi in x] - - plt.plot(x, y, label=self.name) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - a = FuzzySet("A", 0, 0.5, 1) - b = FuzzySet("B", 0.2, 0.7, 1) - - a.plot() - b.plot() - - plt.xlabel("x") - plt.ylabel("Membership") - plt.legend() - plt.show() - - union_ab = a.union(b) - intersection_ab = a.intersection(b) - complement_a = a.complement() - - union_ab.plot() - intersection_ab.plot() - complement_a.plot() - - plt.xlabel("x") - plt.ylabel("Membership") - plt.legend() - plt.show() diff --git a/fuzzy_logic/fuzzy_operations.py.DISABLED.txt b/fuzzy_logic/fuzzy_operations.py.DISABLED.txt deleted file mode 100644 index 67fd587f4baf..000000000000 --- a/fuzzy_logic/fuzzy_operations.py.DISABLED.txt +++ /dev/null @@ -1,103 +0,0 @@ -""" -README, Author - Jigyasa Gandhi(mailto:jigsgandhi97@gmail.com) -Requirements: - - scikit-fuzzy - - numpy - - matplotlib -Python: - - 3.5 -""" -import numpy as np -import skfuzzy as fuzz - -if __name__ == "__main__": - # Create universe of discourse in Python using linspace () - X = np.linspace(start=0, stop=75, num=75, endpoint=True, retstep=False) - - # Create two fuzzy sets by defining any membership function - # (trapmf(), gbellmf(), gaussmf(), etc). - abc1 = [0, 25, 50] - abc2 = [25, 50, 75] - young = fuzz.membership.trimf(X, abc1) - middle_aged = fuzz.membership.trimf(X, abc2) - - # Compute the different operations using inbuilt functions. - one = np.ones(75) - zero = np.zeros((75,)) - # 1. Union = max(µA(x), µB(x)) - union = fuzz.fuzzy_or(X, young, X, middle_aged)[1] - # 2. Intersection = min(µA(x), µB(x)) - intersection = fuzz.fuzzy_and(X, young, X, middle_aged)[1] - # 3. Complement (A) = (1 - min(µA(x))) - complement_a = fuzz.fuzzy_not(young) - # 4. Difference (A/B) = min(µA(x),(1- µB(x))) - difference = fuzz.fuzzy_and(X, young, X, fuzz.fuzzy_not(middle_aged)[1])[1] - # 5. Algebraic Sum = [µA(x) + µB(x) – (µA(x) * µB(x))] - alg_sum = young + middle_aged - (young * middle_aged) - # 6. Algebraic Product = (µA(x) * µB(x)) - alg_product = young * middle_aged - # 7. Bounded Sum = min[1,(µA(x), µB(x))] - bdd_sum = fuzz.fuzzy_and(X, one, X, young + middle_aged)[1] - # 8. Bounded difference = min[0,(µA(x), µB(x))] - bdd_difference = fuzz.fuzzy_or(X, zero, X, young - middle_aged)[1] - - # max-min composition - # max-product composition - - # Plot each set A, set B and each operation result using plot() and subplot(). - from matplotlib import pyplot as plt - - plt.figure() - - plt.subplot(4, 3, 1) - plt.plot(X, young) - plt.title("Young") - plt.grid(True) - - plt.subplot(4, 3, 2) - plt.plot(X, middle_aged) - plt.title("Middle aged") - plt.grid(True) - - plt.subplot(4, 3, 3) - plt.plot(X, union) - plt.title("union") - plt.grid(True) - - plt.subplot(4, 3, 4) - plt.plot(X, intersection) - plt.title("intersection") - plt.grid(True) - - plt.subplot(4, 3, 5) - plt.plot(X, complement_a) - plt.title("complement_a") - plt.grid(True) - - plt.subplot(4, 3, 6) - plt.plot(X, difference) - plt.title("difference a/b") - plt.grid(True) - - plt.subplot(4, 3, 7) - plt.plot(X, alg_sum) - plt.title("alg_sum") - plt.grid(True) - - plt.subplot(4, 3, 8) - plt.plot(X, alg_product) - plt.title("alg_product") - plt.grid(True) - - plt.subplot(4, 3, 9) - plt.plot(X, bdd_sum) - plt.title("bdd_sum") - plt.grid(True) - - plt.subplot(4, 3, 10) - plt.plot(X, bdd_difference) - plt.title("bdd_difference") - plt.grid(True) - - plt.subplots_adjust(hspace=0.5) - plt.show() diff --git a/genetic_algorithm/__init__.py b/genetic_algorithm/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/genetic_algorithm/basic_string.py b/genetic_algorithm/basic_string.py deleted file mode 100644 index a906ce85a779..000000000000 --- a/genetic_algorithm/basic_string.py +++ /dev/null @@ -1,208 +0,0 @@ -""" -Simple multithreaded algorithm to show how the 4 phases of a genetic algorithm works -(Evaluation, Selection, Crossover and Mutation) -https://en.wikipedia.org/wiki/Genetic_algorithm -Author: D4rkia -""" - -from __future__ import annotations - -import random - -# Maximum size of the population. Bigger could be faster but is more memory expensive. -N_POPULATION = 200 -# Number of elements selected in every generation of evolution. The selection takes -# place from best to worst of that generation and must be smaller than N_POPULATION. -N_SELECTED = 50 -# Probability that an element of a generation can mutate, changing one of its genes. -# This will guarantee that all genes will be used during evolution. -MUTATION_PROBABILITY = 0.4 -# Just a seed to improve randomness required by the algorithm. -random.seed(random.randint(0, 1000)) - - -def evaluate(item: str, main_target: str) -> tuple[str, float]: - """ - Evaluate how similar the item is with the target by just - counting each char in the right position - >>> evaluate("Helxo Worlx", "Hello World") - ('Helxo Worlx', 9.0) - """ - score = len([g for position, g in enumerate(item) if g == main_target[position]]) - return (item, float(score)) - - -def crossover(parent_1: str, parent_2: str) -> tuple[str, str]: - """ - Slice and combine two strings at a random point. - >>> random.seed(42) - >>> crossover("123456", "abcdef") - ('12345f', 'abcde6') - """ - random_slice = random.randint(0, len(parent_1) - 1) - child_1 = parent_1[:random_slice] + parent_2[random_slice:] - child_2 = parent_2[:random_slice] + parent_1[random_slice:] - return (child_1, child_2) - - -def mutate(child: str, genes: list[str]) -> str: - """ - Mutate a random gene of a child with another one from the list. - >>> random.seed(123) - >>> mutate("123456", list("ABCDEF")) - '12345A' - """ - child_list = list(child) - if random.uniform(0, 1) < MUTATION_PROBABILITY: - child_list[random.randint(0, len(child)) - 1] = random.choice(genes) - return "".join(child_list) - - -# Select, crossover and mutate a new population. -def select( - parent_1: tuple[str, float], - population_score: list[tuple[str, float]], - genes: list[str], -) -> list[str]: - """ - Select the second parent and generate new population - - >>> random.seed(42) - >>> parent_1 = ("123456", 8.0) - >>> population_score = [("abcdef", 4.0), ("ghijkl", 5.0), ("mnopqr", 7.0)] - >>> genes = list("ABCDEF") - >>> child_n = int(min(parent_1[1] + 1, 10)) - >>> population = [] - >>> for _ in range(child_n): - ... parent_2 = population_score[random.randrange(len(population_score))][0] - ... child_1, child_2 = crossover(parent_1[0], parent_2) - ... population.extend((mutate(child_1, genes), mutate(child_2, genes))) - >>> len(population) == (int(parent_1[1]) + 1) * 2 - True - """ - pop = [] - # Generate more children proportionally to the fitness score. - child_n = int(parent_1[1] * 100) + 1 - child_n = 10 if child_n >= 10 else child_n - for _ in range(child_n): - parent_2 = population_score[random.randint(0, N_SELECTED)][0] - - child_1, child_2 = crossover(parent_1[0], parent_2) - # Append new string to the population list. - pop.append(mutate(child_1, genes)) - pop.append(mutate(child_2, genes)) - return pop - - -def basic(target: str, genes: list[str], debug: bool = True) -> tuple[int, int, str]: - """ - Verify that the target contains no genes besides the ones inside genes variable. - - >>> from string import ascii_lowercase - >>> basic("doctest", ascii_lowercase, debug=False)[2] - 'doctest' - >>> genes = list(ascii_lowercase) - >>> genes.remove("e") - >>> basic("test", genes) - Traceback (most recent call last): - ... - ValueError: ['e'] is not in genes list, evolution cannot converge - >>> genes.remove("s") - >>> basic("test", genes) - Traceback (most recent call last): - ... - ValueError: ['e', 's'] is not in genes list, evolution cannot converge - >>> genes.remove("t") - >>> basic("test", genes) - Traceback (most recent call last): - ... - ValueError: ['e', 's', 't'] is not in genes list, evolution cannot converge - """ - - # Verify if N_POPULATION is bigger than N_SELECTED - if N_POPULATION < N_SELECTED: - msg = f"{N_POPULATION} must be bigger than {N_SELECTED}" - raise ValueError(msg) - # Verify that the target contains no genes besides the ones inside genes variable. - not_in_genes_list = sorted({c for c in target if c not in genes}) - if not_in_genes_list: - msg = f"{not_in_genes_list} is not in genes list, evolution cannot converge" - raise ValueError(msg) - - # Generate random starting population. - population = [] - for _ in range(N_POPULATION): - population.append("".join([random.choice(genes) for i in range(len(target))])) - - # Just some logs to know what the algorithms is doing. - generation, total_population = 0, 0 - - # This loop will end when we find a perfect match for our target. - while True: - generation += 1 - total_population += len(population) - - # Random population created. Now it's time to evaluate. - - # Adding a bit of concurrency can make everything faster, - # - # import concurrent.futures - # population_score: list[tuple[str, float]] = [] - # with concurrent.futures.ThreadPoolExecutor( - # max_workers=NUM_WORKERS) as executor: - # futures = {executor.submit(evaluate, item) for item in population} - # concurrent.futures.wait(futures) - # population_score = [item.result() for item in futures] - # - # but with a simple algorithm like this, it will probably be slower. - # We just need to call evaluate for every item inside the population. - population_score = [evaluate(item, target) for item in population] - - # Check if there is a matching evolution. - population_score = sorted(population_score, key=lambda x: x[1], reverse=True) - if population_score[0][0] == target: - return (generation, total_population, population_score[0][0]) - - # Print the best result every 10 generation. - # Just to know that the algorithm is working. - if debug and generation % 10 == 0: - print( - f"\nGeneration: {generation}" - f"\nTotal Population:{total_population}" - f"\nBest score: {population_score[0][1]}" - f"\nBest string: {population_score[0][0]}" - ) - - # Flush the old population, keeping some of the best evolutions. - # Keeping this avoid regression of evolution. - population_best = population[: int(N_POPULATION / 3)] - population.clear() - population.extend(population_best) - # Normalize population score to be between 0 and 1. - population_score = [ - (item, score / len(target)) for item, score in population_score - ] - - # This is selection - for i in range(N_SELECTED): - population.extend(select(population_score[int(i)], population_score, genes)) - # Check if the population has already reached the maximum value and if so, - # break the cycle. If this check is disabled, the algorithm will take - # forever to compute large strings, but will also calculate small strings in - # a far fewer generations. - if len(population) > N_POPULATION: - break - - -if __name__ == "__main__": - target_str = ( - "This is a genetic algorithm to evaluate, combine, evolve, and mutate a string!" - ) - genes_list = list( - " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm" - "nopqrstuvwxyz.,;!?+-*#@^'èéòà€ù=)(&%$£/\\" - ) - generation, population, target = basic(target_str, genes_list) - print( - f"\nGeneration: {generation}\nTotal Population: {population}\nTarget: {target}" - ) diff --git a/geodesy/__init__.py b/geodesy/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/geodesy/haversine_distance.py b/geodesy/haversine_distance.py deleted file mode 100644 index 93e625770f9d..000000000000 --- a/geodesy/haversine_distance.py +++ /dev/null @@ -1,57 +0,0 @@ -from math import asin, atan, cos, radians, sin, sqrt, tan - -AXIS_A = 6378137.0 -AXIS_B = 6356752.314245 -RADIUS = 6378137 - - -def haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float: - """ - Calculate great circle distance between two points in a sphere, - given longitudes and latitudes https://en.wikipedia.org/wiki/Haversine_formula - - We know that the globe is "sort of" spherical, so a path between two points - isn't exactly a straight line. We need to account for the Earth's curvature - when calculating distance from point A to B. This effect is negligible for - small distances but adds up as distance increases. The Haversine method treats - the earth as a sphere which allows us to "project" the two points A and B - onto the surface of that sphere and approximate the spherical distance between - them. Since the Earth is not a perfect sphere, other methods which model the - Earth's ellipsoidal nature are more accurate but a quick and modifiable - computation like Haversine can be handy for shorter range distances. - - Args: - lat1, lon1: latitude and longitude of coordinate 1 - lat2, lon2: latitude and longitude of coordinate 2 - Returns: - geographical distance between two points in metres - >>> from collections import namedtuple - >>> point_2d = namedtuple("point_2d", "lat lon") - >>> SAN_FRANCISCO = point_2d(37.774856, -122.424227) - >>> YOSEMITE = point_2d(37.864742, -119.537521) - >>> f"{haversine_distance(*SAN_FRANCISCO, *YOSEMITE):0,.0f} meters" - '254,352 meters' - """ - # CONSTANTS per WGS84 https://en.wikipedia.org/wiki/World_Geodetic_System - # Distance in metres(m) - # Equation parameters - # Equation https://en.wikipedia.org/wiki/Haversine_formula#Formulation - flattening = (AXIS_A - AXIS_B) / AXIS_A - phi_1 = atan((1 - flattening) * tan(radians(lat1))) - phi_2 = atan((1 - flattening) * tan(radians(lat2))) - lambda_1 = radians(lon1) - lambda_2 = radians(lon2) - # Equation - sin_sq_phi = sin((phi_2 - phi_1) / 2) - sin_sq_lambda = sin((lambda_2 - lambda_1) / 2) - # Square both values - sin_sq_phi *= sin_sq_phi - sin_sq_lambda *= sin_sq_lambda - h_value = sqrt(sin_sq_phi + (cos(phi_1) * cos(phi_2) * sin_sq_lambda)) - return 2 * RADIUS * asin(h_value) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/geodesy/lamberts_ellipsoidal_distance.py b/geodesy/lamberts_ellipsoidal_distance.py deleted file mode 100644 index 4805674e51ab..000000000000 --- a/geodesy/lamberts_ellipsoidal_distance.py +++ /dev/null @@ -1,85 +0,0 @@ -from math import atan, cos, radians, sin, tan - -from .haversine_distance import haversine_distance - -AXIS_A = 6378137.0 -AXIS_B = 6356752.314245 -EQUATORIAL_RADIUS = 6378137 - - -def lamberts_ellipsoidal_distance( - lat1: float, lon1: float, lat2: float, lon2: float -) -> float: - """ - Calculate the shortest distance along the surface of an ellipsoid between - two points on the surface of earth given longitudes and latitudes - https://en.wikipedia.org/wiki/Geographical_distance#Lambert's_formula_for_long_lines - - NOTE: This algorithm uses geodesy/haversine_distance.py to compute central angle, - sigma - - Representing the earth as an ellipsoid allows us to approximate distances between - points on the surface much better than a sphere. Ellipsoidal formulas treat the - Earth as an oblate ellipsoid which means accounting for the flattening that happens - at the North and South poles. Lambert's formulae provide accuracy on the order of - 10 meteres over thousands of kilometeres. Other methods can provide - millimeter-level accuracy but this is a simpler method to calculate long range - distances without increasing computational intensity. - - Args: - lat1, lon1: latitude and longitude of coordinate 1 - lat2, lon2: latitude and longitude of coordinate 2 - Returns: - geographical distance between two points in metres - - >>> from collections import namedtuple - >>> point_2d = namedtuple("point_2d", "lat lon") - >>> SAN_FRANCISCO = point_2d(37.774856, -122.424227) - >>> YOSEMITE = point_2d(37.864742, -119.537521) - >>> NEW_YORK = point_2d(40.713019, -74.012647) - >>> VENICE = point_2d(45.443012, 12.313071) - >>> f"{lamberts_ellipsoidal_distance(*SAN_FRANCISCO, *YOSEMITE):0,.0f} meters" - '254,351 meters' - >>> f"{lamberts_ellipsoidal_distance(*SAN_FRANCISCO, *NEW_YORK):0,.0f} meters" - '4,138,992 meters' - >>> f"{lamberts_ellipsoidal_distance(*SAN_FRANCISCO, *VENICE):0,.0f} meters" - '9,737,326 meters' - """ - - # CONSTANTS per WGS84 https://en.wikipedia.org/wiki/World_Geodetic_System - # Distance in metres(m) - # Equation Parameters - # https://en.wikipedia.org/wiki/Geographical_distance#Lambert's_formula_for_long_lines - flattening = (AXIS_A - AXIS_B) / AXIS_A - # Parametric latitudes - # https://en.wikipedia.org/wiki/Latitude#Parametric_(or_reduced)_latitude - b_lat1 = atan((1 - flattening) * tan(radians(lat1))) - b_lat2 = atan((1 - flattening) * tan(radians(lat2))) - - # Compute central angle between two points - # using haversine theta. sigma = haversine_distance / equatorial radius - sigma = haversine_distance(lat1, lon1, lat2, lon2) / EQUATORIAL_RADIUS - - # Intermediate P and Q values - p_value = (b_lat1 + b_lat2) / 2 - q_value = (b_lat2 - b_lat1) / 2 - - # Intermediate X value - # X = (sigma - sin(sigma)) * sin^2Pcos^2Q / cos^2(sigma/2) - x_numerator = (sin(p_value) ** 2) * (cos(q_value) ** 2) - x_demonimator = cos(sigma / 2) ** 2 - x_value = (sigma - sin(sigma)) * (x_numerator / x_demonimator) - - # Intermediate Y value - # Y = (sigma + sin(sigma)) * cos^2Psin^2Q / sin^2(sigma/2) - y_numerator = (cos(p_value) ** 2) * (sin(q_value) ** 2) - y_denominator = sin(sigma / 2) ** 2 - y_value = (sigma + sin(sigma)) * (y_numerator / y_denominator) - - return EQUATORIAL_RADIUS * (sigma - ((flattening / 2) * (x_value + y_value))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/geometry/__init__.py b/geometry/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/geometry/geometry.py b/geometry/geometry.py deleted file mode 100644 index 9e353dee17a7..000000000000 --- a/geometry/geometry.py +++ /dev/null @@ -1,259 +0,0 @@ -from __future__ import annotations - -import math -from dataclasses import dataclass, field -from types import NoneType -from typing import Self - -# Building block classes - - -@dataclass -class Angle: - """ - An Angle in degrees (unit of measurement) - - >>> Angle() - Angle(degrees=90) - >>> Angle(45.5) - Angle(degrees=45.5) - >>> Angle(-1) - Traceback (most recent call last): - ... - TypeError: degrees must be a numeric value between 0 and 360. - >>> Angle(361) - Traceback (most recent call last): - ... - TypeError: degrees must be a numeric value between 0 and 360. - """ - - degrees: float = 90 - - def __post_init__(self) -> None: - if not isinstance(self.degrees, (int, float)) or not 0 <= self.degrees <= 360: - raise TypeError("degrees must be a numeric value between 0 and 360.") - - -@dataclass -class Side: - """ - A side of a two dimensional Shape such as Polygon, etc. - adjacent_sides: a list of sides which are adjacent to the current side - angle: the angle in degrees between each adjacent side - length: the length of the current side in meters - - >>> Side(5) - Side(length=5, angle=Angle(degrees=90), next_side=None) - >>> Side(5, Angle(45.6)) - Side(length=5, angle=Angle(degrees=45.6), next_side=None) - >>> Side(5, Angle(45.6), Side(1, Angle(2))) # doctest: +ELLIPSIS - Side(length=5, angle=Angle(degrees=45.6), next_side=Side(length=1, angle=Angle(d... - """ - - length: float - angle: Angle = field(default_factory=Angle) - next_side: Side | None = None - - def __post_init__(self) -> None: - if not isinstance(self.length, (int, float)) or self.length <= 0: - raise TypeError("length must be a positive numeric value.") - if not isinstance(self.angle, Angle): - raise TypeError("angle must be an Angle object.") - if not isinstance(self.next_side, (Side, NoneType)): - raise TypeError("next_side must be a Side or None.") - - -@dataclass -class Ellipse: - """ - A geometric Ellipse on a 2D surface - - >>> Ellipse(5, 10) - Ellipse(major_radius=5, minor_radius=10) - >>> Ellipse(5, 10) is Ellipse(5, 10) - False - >>> Ellipse(5, 10) == Ellipse(5, 10) - True - """ - - major_radius: float - minor_radius: float - - @property - def area(self) -> float: - """ - >>> Ellipse(5, 10).area - 157.07963267948966 - """ - return math.pi * self.major_radius * self.minor_radius - - @property - def perimeter(self) -> float: - """ - >>> Ellipse(5, 10).perimeter - 47.12388980384689 - """ - return math.pi * (self.major_radius + self.minor_radius) - - -class Circle(Ellipse): - """ - A geometric Circle on a 2D surface - - >>> Circle(5) - Circle(radius=5) - >>> Circle(5) is Circle(5) - False - >>> Circle(5) == Circle(5) - True - >>> Circle(5).area - 78.53981633974483 - >>> Circle(5).perimeter - 31.41592653589793 - """ - - def __init__(self, radius: float) -> None: - super().__init__(radius, radius) - self.radius = radius - - def __repr__(self) -> str: - return f"Circle(radius={self.radius})" - - @property - def diameter(self) -> float: - """ - >>> Circle(5).diameter - 10 - """ - return self.radius * 2 - - def max_parts(self, num_cuts: float) -> float: - """ - Return the maximum number of parts that circle can be divided into if cut - 'num_cuts' times. - - >>> circle = Circle(5) - >>> circle.max_parts(0) - 1.0 - >>> circle.max_parts(7) - 29.0 - >>> circle.max_parts(54) - 1486.0 - >>> circle.max_parts(22.5) - 265.375 - >>> circle.max_parts(-222) - Traceback (most recent call last): - ... - TypeError: num_cuts must be a positive numeric value. - >>> circle.max_parts("-222") - Traceback (most recent call last): - ... - TypeError: num_cuts must be a positive numeric value. - """ - if not isinstance(num_cuts, (int, float)) or num_cuts < 0: - raise TypeError("num_cuts must be a positive numeric value.") - return (num_cuts + 2 + num_cuts**2) * 0.5 - - -@dataclass -class Polygon: - """ - An abstract class which represents Polygon on a 2D surface. - - >>> Polygon() - Polygon(sides=[]) - """ - - sides: list[Side] = field(default_factory=list) - - def add_side(self, side: Side) -> Self: - """ - >>> Polygon().add_side(Side(5)) - Polygon(sides=[Side(length=5, angle=Angle(degrees=90), next_side=None)]) - """ - self.sides.append(side) - return self - - def get_side(self, index: int) -> Side: - """ - >>> Polygon().get_side(0) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> Polygon().add_side(Side(5)).get_side(-1) - Side(length=5, angle=Angle(degrees=90), next_side=None) - """ - return self.sides[index] - - def set_side(self, index: int, side: Side) -> Self: - """ - >>> Polygon().set_side(0, Side(5)) - Traceback (most recent call last): - ... - IndexError: list assignment index out of range - >>> Polygon().add_side(Side(5)).set_side(0, Side(10)) - Polygon(sides=[Side(length=10, angle=Angle(degrees=90), next_side=None)]) - """ - self.sides[index] = side - return self - - -class Rectangle(Polygon): - """ - A geometric rectangle on a 2D surface. - - >>> rectangle_one = Rectangle(5, 10) - >>> rectangle_one.perimeter() - 30 - >>> rectangle_one.area() - 50 - """ - - def __init__(self, short_side_length: float, long_side_length: float) -> None: - super().__init__() - self.short_side_length = short_side_length - self.long_side_length = long_side_length - self.post_init() - - def post_init(self) -> None: - """ - >>> Rectangle(5, 10) # doctest: +NORMALIZE_WHITESPACE - Rectangle(sides=[Side(length=5, angle=Angle(degrees=90), next_side=None), - Side(length=10, angle=Angle(degrees=90), next_side=None)]) - """ - self.short_side = Side(self.short_side_length) - self.long_side = Side(self.long_side_length) - super().add_side(self.short_side) - super().add_side(self.long_side) - - def perimeter(self) -> float: - return (self.short_side.length + self.long_side.length) * 2 - - def area(self) -> float: - return self.short_side.length * self.long_side.length - - -@dataclass -class Square(Rectangle): - """ - a structure which represents a - geometrical square on a 2D surface - >>> square_one = Square(5) - >>> square_one.perimeter() - 20 - >>> square_one.area() - 25 - """ - - def __init__(self, side_length: float) -> None: - super().__init__(side_length, side_length) - - def perimeter(self) -> float: - return super().perimeter() - - def area(self) -> float: - return super().area() - - -if __name__ == "__main__": - __import__("doctest").testmod() diff --git a/graphics/__init__.py b/graphics/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/graphics/bezier_curve.py b/graphics/bezier_curve.py deleted file mode 100644 index 6c7dcd4f06e7..000000000000 --- a/graphics/bezier_curve.py +++ /dev/null @@ -1,114 +0,0 @@ -# https://en.wikipedia.org/wiki/B%C3%A9zier_curve -# https://www.tutorialspoint.com/computer_graphics/computer_graphics_curves.htm -from __future__ import annotations - -from scipy.special import comb - - -class BezierCurve: - """ - Bezier curve is a weighted sum of a set of control points. - Generate Bezier curves from a given set of control points. - This implementation works only for 2d coordinates in the xy plane. - """ - - def __init__(self, list_of_points: list[tuple[float, float]]): - """ - list_of_points: Control points in the xy plane on which to interpolate. These - points control the behavior (shape) of the Bezier curve. - """ - self.list_of_points = list_of_points - # Degree determines the flexibility of the curve. - # Degree = 1 will produce a straight line. - self.degree = len(list_of_points) - 1 - - def basis_function(self, t: float) -> list[float]: - """ - The basis function determines the weight of each control point at time t. - t: time value between 0 and 1 inclusive at which to evaluate the basis of - the curve. - returns the x, y values of basis function at time t - - >>> curve = BezierCurve([(1,1), (1,2)]) - >>> [float(x) for x in curve.basis_function(0)] - [1.0, 0.0] - >>> [float(x) for x in curve.basis_function(1)] - [0.0, 1.0] - """ - assert 0 <= t <= 1, "Time t must be between 0 and 1." - output_values: list[float] = [] - for i in range(len(self.list_of_points)): - # basis function for each i - output_values.append( - comb(self.degree, i) * ((1 - t) ** (self.degree - i)) * (t**i) - ) - # the basis must sum up to 1 for it to produce a valid Bezier curve. - assert round(sum(output_values), 5) == 1 - return output_values - - def bezier_curve_function(self, t: float) -> tuple[float, float]: - """ - The function to produce the values of the Bezier curve at time t. - t: the value of time t at which to evaluate the Bezier function - Returns the x, y coordinates of the Bezier curve at time t. - The first point in the curve is when t = 0. - The last point in the curve is when t = 1. - - >>> curve = BezierCurve([(1,1), (1,2)]) - >>> tuple(float(x) for x in curve.bezier_curve_function(0)) - (1.0, 1.0) - >>> tuple(float(x) for x in curve.bezier_curve_function(1)) - (1.0, 2.0) - """ - - assert 0 <= t <= 1, "Time t must be between 0 and 1." - - basis_function = self.basis_function(t) - x = 0.0 - y = 0.0 - for i in range(len(self.list_of_points)): - # For all points, sum up the product of i-th basis function and i-th point. - x += basis_function[i] * self.list_of_points[i][0] - y += basis_function[i] * self.list_of_points[i][1] - return (x, y) - - def plot_curve(self, step_size: float = 0.01): - """ - Plots the Bezier curve using matplotlib plotting capabilities. - step_size: defines the step(s) at which to evaluate the Bezier curve. - The smaller the step size, the finer the curve produced. - """ - from matplotlib import pyplot as plt - - to_plot_x: list[float] = [] # x coordinates of points to plot - to_plot_y: list[float] = [] # y coordinates of points to plot - - t = 0.0 - while t <= 1: - value = self.bezier_curve_function(t) - to_plot_x.append(value[0]) - to_plot_y.append(value[1]) - t += step_size - - x = [i[0] for i in self.list_of_points] - y = [i[1] for i in self.list_of_points] - - plt.plot( - to_plot_x, - to_plot_y, - color="blue", - label="Curve of Degree " + str(self.degree), - ) - plt.scatter(x, y, color="red", label="Control Points") - plt.legend() - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - BezierCurve([(1, 2), (3, 5)]).plot_curve() # degree 1 - BezierCurve([(0, 0), (5, 5), (5, 0)]).plot_curve() # degree 2 - BezierCurve([(0, 0), (5, 5), (5, 0), (2.5, -2.5)]).plot_curve() # degree 3 diff --git a/graphics/vector3_for_2d_rendering.py b/graphics/vector3_for_2d_rendering.py deleted file mode 100644 index a332206e67b6..000000000000 --- a/graphics/vector3_for_2d_rendering.py +++ /dev/null @@ -1,102 +0,0 @@ -""" -render 3d points for 2d surfaces. -""" - -from __future__ import annotations - -import math - -__version__ = "2020.9.26" -__author__ = "xcodz-dot, cclaus, dhruvmanila" - - -def convert_to_2d( - x: float, y: float, z: float, scale: float, distance: float -) -> tuple[float, float]: - """ - Converts 3d point to a 2d drawable point - - >>> convert_to_2d(1.0, 2.0, 3.0, 10.0, 10.0) - (7.6923076923076925, 15.384615384615385) - - >>> convert_to_2d(1, 2, 3, 10, 10) - (7.6923076923076925, 15.384615384615385) - - >>> convert_to_2d("1", 2, 3, 10, 10) # '1' is str - Traceback (most recent call last): - ... - TypeError: Input values must either be float or int: ['1', 2, 3, 10, 10] - """ - if not all(isinstance(val, (float, int)) for val in locals().values()): - msg = f"Input values must either be float or int: {list(locals().values())}" - raise TypeError(msg) - projected_x = ((x * distance) / (z + distance)) * scale - projected_y = ((y * distance) / (z + distance)) * scale - return projected_x, projected_y - - -def rotate( - x: float, y: float, z: float, axis: str, angle: float -) -> tuple[float, float, float]: - """ - rotate a point around a certain axis with a certain angle - angle can be any integer between 1, 360 and axis can be any one of - 'x', 'y', 'z' - - >>> rotate(1.0, 2.0, 3.0, 'y', 90.0) - (3.130524675073759, 2.0, 0.4470070007889556) - - >>> rotate(1, 2, 3, "z", 180) - (0.999736015495891, -2.0001319704760485, 3) - - >>> rotate('1', 2, 3, "z", 90.0) # '1' is str - Traceback (most recent call last): - ... - TypeError: Input values except axis must either be float or int: ['1', 2, 3, 90.0] - - >>> rotate(1, 2, 3, "n", 90) # 'n' is not a valid axis - Traceback (most recent call last): - ... - ValueError: not a valid axis, choose one of 'x', 'y', 'z' - - >>> rotate(1, 2, 3, "x", -90) - (1, -2.5049096187183877, -2.5933429780983657) - - >>> rotate(1, 2, 3, "x", 450) # 450 wrap around to 90 - (1, 3.5776792428178217, -0.44744970165427644) - """ - if not isinstance(axis, str): - raise TypeError("Axis must be a str") - input_variables = locals() - del input_variables["axis"] - if not all(isinstance(val, (float, int)) for val in input_variables.values()): - msg = ( - "Input values except axis must either be float or int: " - f"{list(input_variables.values())}" - ) - raise TypeError(msg) - angle = (angle % 360) / 450 * 180 / math.pi - if axis == "z": - new_x = x * math.cos(angle) - y * math.sin(angle) - new_y = y * math.cos(angle) + x * math.sin(angle) - new_z = z - elif axis == "x": - new_y = y * math.cos(angle) - z * math.sin(angle) - new_z = z * math.cos(angle) + y * math.sin(angle) - new_x = x - elif axis == "y": - new_x = x * math.cos(angle) - z * math.sin(angle) - new_z = z * math.cos(angle) + x * math.sin(angle) - new_y = y - else: - raise ValueError("not a valid axis, choose one of 'x', 'y', 'z'") - - return new_x, new_y, new_z - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{convert_to_2d(1.0, 2.0, 3.0, 10.0, 10.0) = }") - print(f"{rotate(1.0, 2.0, 3.0, 'y', 90.0) = }") diff --git a/graphs/__init__.py b/graphs/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/graphs/a_star.py b/graphs/a_star.py deleted file mode 100644 index 1d7063ccc55a..000000000000 --- a/graphs/a_star.py +++ /dev/null @@ -1,138 +0,0 @@ -from __future__ import annotations - -DIRECTIONS = [ - [-1, 0], # left - [0, -1], # down - [1, 0], # right - [0, 1], # up -] - - -# function to search the path -def search( - grid: list[list[int]], - init: list[int], - goal: list[int], - cost: int, - heuristic: list[list[int]], -) -> tuple[list[list[int]], list[list[int]]]: - """ - Search for a path on a grid avoiding obstacles. - >>> grid = [[0, 1, 0, 0, 0, 0], - ... [0, 1, 0, 0, 0, 0], - ... [0, 1, 0, 0, 0, 0], - ... [0, 1, 0, 0, 1, 0], - ... [0, 0, 0, 0, 1, 0]] - >>> init = [0, 0] - >>> goal = [len(grid) - 1, len(grid[0]) - 1] - >>> cost = 1 - >>> heuristic = [[0] * len(grid[0]) for _ in range(len(grid))] - >>> heuristic = [[0 for row in range(len(grid[0]))] for col in range(len(grid))] - >>> for i in range(len(grid)): - ... for j in range(len(grid[0])): - ... heuristic[i][j] = abs(i - goal[0]) + abs(j - goal[1]) - ... if grid[i][j] == 1: - ... heuristic[i][j] = 99 - >>> path, action = search(grid, init, goal, cost, heuristic) - >>> path # doctest: +NORMALIZE_WHITESPACE - [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [4, 1], [4, 2], [4, 3], [3, 3], - [2, 3], [2, 4], [2, 5], [3, 5], [4, 5]] - >>> action # doctest: +NORMALIZE_WHITESPACE - [[0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0], [2, 0, 0, 0, 3, 3], - [2, 0, 0, 0, 0, 2], [2, 3, 3, 3, 0, 2]] - """ - closed = [ - [0 for col in range(len(grid[0]))] for row in range(len(grid)) - ] # the reference grid - closed[init[0]][init[1]] = 1 - action = [ - [0 for col in range(len(grid[0]))] for row in range(len(grid)) - ] # the action grid - - x = init[0] - y = init[1] - g = 0 - f = g + heuristic[x][y] # cost from starting cell to destination cell - cell = [[f, g, x, y]] - - found = False # flag that is set when search is complete - resign = False # flag set if we can't find expand - - while not found and not resign: - if len(cell) == 0: - raise ValueError("Algorithm is unable to find solution") - else: # to choose the least costliest action so as to move closer to the goal - cell.sort() - cell.reverse() - next_cell = cell.pop() - x = next_cell[2] - y = next_cell[3] - g = next_cell[1] - - if x == goal[0] and y == goal[1]: - found = True - else: - for i in range(len(DIRECTIONS)): # to try out different valid actions - x2 = x + DIRECTIONS[i][0] - y2 = y + DIRECTIONS[i][1] - if ( - x2 >= 0 - and x2 < len(grid) - and y2 >= 0 - and y2 < len(grid[0]) - and closed[x2][y2] == 0 - and grid[x2][y2] == 0 - ): - g2 = g + cost - f2 = g2 + heuristic[x2][y2] - cell.append([f2, g2, x2, y2]) - closed[x2][y2] = 1 - action[x2][y2] = i - invpath = [] - x = goal[0] - y = goal[1] - invpath.append([x, y]) # we get the reverse path from here - while x != init[0] or y != init[1]: - x2 = x - DIRECTIONS[action[x][y]][0] - y2 = y - DIRECTIONS[action[x][y]][1] - x = x2 - y = y2 - invpath.append([x, y]) - - path = [] - for i in range(len(invpath)): - path.append(invpath[len(invpath) - 1 - i]) - return path, action - - -if __name__ == "__main__": - grid = [ - [0, 1, 0, 0, 0, 0], - [0, 1, 0, 0, 0, 0], # 0 are free path whereas 1's are obstacles - [0, 1, 0, 0, 0, 0], - [0, 1, 0, 0, 1, 0], - [0, 0, 0, 0, 1, 0], - ] - - init = [0, 0] - # all coordinates are given in format [y,x] - goal = [len(grid) - 1, len(grid[0]) - 1] - cost = 1 - - # the cost map which pushes the path closer to the goal - heuristic = [[0 for row in range(len(grid[0]))] for col in range(len(grid))] - for i in range(len(grid)): - for j in range(len(grid[0])): - heuristic[i][j] = abs(i - goal[0]) + abs(j - goal[1]) - if grid[i][j] == 1: - # added extra penalty in the heuristic map - heuristic[i][j] = 99 - - path, action = search(grid, init, goal, cost, heuristic) - - print("ACTION MAP") - for i in range(len(action)): - print(action[i]) - - for i in range(len(path)): - print(path[i]) diff --git a/graphs/ant_colony_optimization_algorithms.py b/graphs/ant_colony_optimization_algorithms.py deleted file mode 100644 index 13637da44874..000000000000 --- a/graphs/ant_colony_optimization_algorithms.py +++ /dev/null @@ -1,226 +0,0 @@ -""" -Use an ant colony optimization algorithm to solve the travelling salesman problem (TSP) -which asks the following question: -"Given a list of cities and the distances between each pair of cities, what is the - shortest possible route that visits each city exactly once and returns to the origin - city?" - -https://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms -https://en.wikipedia.org/wiki/Travelling_salesman_problem - -Author: Clark -""" - -import copy -import random - -cities = { - 0: [0, 0], - 1: [0, 5], - 2: [3, 8], - 3: [8, 10], - 4: [12, 8], - 5: [12, 4], - 6: [8, 0], - 7: [6, 2], -} - - -def main( - cities: dict[int, list[int]], - ants_num: int, - iterations_num: int, - pheromone_evaporation: float, - alpha: float, - beta: float, - q: float, # Pheromone system parameters Q, which is a constant -) -> tuple[list[int], float]: - """ - Ant colony algorithm main function - >>> main(cities=cities, ants_num=10, iterations_num=20, - ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) - ([0, 1, 2, 3, 4, 5, 6, 7, 0], 37.909778143828696) - >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, - ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) - ([0, 1, 0], 5.656854249492381) - >>> main(cities={0: [0, 0], 1: [2, 2], 4: [4, 4]}, ants_num=5, iterations_num=5, - ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> main(cities={}, ants_num=5, iterations_num=5, - ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) - Traceback (most recent call last): - ... - StopIteration - >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=0, iterations_num=5, - ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) - ([], inf) - >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=0, - ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) - ([], inf) - >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, - ... pheromone_evaporation=1, alpha=1.0, beta=5.0, q=10) - ([0, 1, 0], 5.656854249492381) - >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, - ... pheromone_evaporation=0, alpha=1.0, beta=5.0, q=10) - ([0, 1, 0], 5.656854249492381) - """ - # Initialize the pheromone matrix - cities_num = len(cities) - pheromone = [[1.0] * cities_num] * cities_num - - best_path: list[int] = [] - best_distance = float("inf") - for _ in range(iterations_num): - ants_route = [] - for _ in range(ants_num): - unvisited_cities = copy.deepcopy(cities) - current_city = {next(iter(cities.keys())): next(iter(cities.values()))} - del unvisited_cities[next(iter(current_city.keys()))] - ant_route = [next(iter(current_city.keys()))] - while unvisited_cities: - current_city, unvisited_cities = city_select( - pheromone, current_city, unvisited_cities, alpha, beta - ) - ant_route.append(next(iter(current_city.keys()))) - ant_route.append(0) - ants_route.append(ant_route) - - pheromone, best_path, best_distance = pheromone_update( - pheromone, - cities, - pheromone_evaporation, - ants_route, - q, - best_path, - best_distance, - ) - return best_path, best_distance - - -def distance(city1: list[int], city2: list[int]) -> float: - """ - Calculate the distance between two coordinate points - >>> distance([0, 0], [3, 4] ) - 5.0 - >>> distance([0, 0], [-3, 4] ) - 5.0 - >>> distance([0, 0], [-3, -4] ) - 5.0 - """ - return (((city1[0] - city2[0]) ** 2) + ((city1[1] - city2[1]) ** 2)) ** 0.5 - - -def pheromone_update( - pheromone: list[list[float]], - cities: dict[int, list[int]], - pheromone_evaporation: float, - ants_route: list[list[int]], - q: float, # Pheromone system parameters Q, which is a constant - best_path: list[int], - best_distance: float, -) -> tuple[list[list[float]], list[int], float]: - """ - Update pheromones on the route and update the best route - >>> - >>> pheromone_update(pheromone=[[1.0, 1.0], [1.0, 1.0]], - ... cities={0: [0,0], 1: [2,2]}, pheromone_evaporation=0.7, - ... ants_route=[[0, 1, 0]], q=10, best_path=[], - ... best_distance=float("inf")) - ([[0.7, 4.235533905932737], [4.235533905932737, 0.7]], [0, 1, 0], 5.656854249492381) - >>> pheromone_update(pheromone=[], - ... cities={0: [0,0], 1: [2,2]}, pheromone_evaporation=0.7, - ... ants_route=[[0, 1, 0]], q=10, best_path=[], - ... best_distance=float("inf")) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> pheromone_update(pheromone=[[1.0, 1.0], [1.0, 1.0]], - ... cities={}, pheromone_evaporation=0.7, - ... ants_route=[[0, 1, 0]], q=10, best_path=[], - ... best_distance=float("inf")) - Traceback (most recent call last): - ... - KeyError: 0 - """ - for a in range(len(cities)): # Update the volatilization of pheromone on all routes - for b in range(len(cities)): - pheromone[a][b] *= pheromone_evaporation - for ant_route in ants_route: - total_distance = 0.0 - for i in range(len(ant_route) - 1): # Calculate total distance - total_distance += distance(cities[ant_route[i]], cities[ant_route[i + 1]]) - delta_pheromone = q / total_distance - for i in range(len(ant_route) - 1): # Update pheromones - pheromone[ant_route[i]][ant_route[i + 1]] += delta_pheromone - pheromone[ant_route[i + 1]][ant_route[i]] = pheromone[ant_route[i]][ - ant_route[i + 1] - ] - - if total_distance < best_distance: - best_path = ant_route - best_distance = total_distance - - return pheromone, best_path, best_distance - - -def city_select( - pheromone: list[list[float]], - current_city: dict[int, list[int]], - unvisited_cities: dict[int, list[int]], - alpha: float, - beta: float, -) -> tuple[dict[int, list[int]], dict[int, list[int]]]: - """ - Choose the next city for ants - >>> city_select(pheromone=[[1.0, 1.0], [1.0, 1.0]], current_city={0: [0, 0]}, - ... unvisited_cities={1: [2, 2]}, alpha=1.0, beta=5.0) - ({1: [2, 2]}, {}) - >>> city_select(pheromone=[], current_city={0: [0,0]}, - ... unvisited_cities={1: [2, 2]}, alpha=1.0, beta=5.0) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> city_select(pheromone=[[1.0, 1.0], [1.0, 1.0]], current_city={}, - ... unvisited_cities={1: [2, 2]}, alpha=1.0, beta=5.0) - Traceback (most recent call last): - ... - StopIteration - >>> city_select(pheromone=[[1.0, 1.0], [1.0, 1.0]], current_city={0: [0, 0]}, - ... unvisited_cities={}, alpha=1.0, beta=5.0) - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - probabilities = [] - for city in unvisited_cities: - city_distance = distance( - unvisited_cities[city], next(iter(current_city.values())) - ) - probability = (pheromone[city][next(iter(current_city.keys()))] ** alpha) * ( - (1 / city_distance) ** beta - ) - probabilities.append(probability) - - chosen_city_i = random.choices( - list(unvisited_cities.keys()), weights=probabilities - )[0] - chosen_city = {chosen_city_i: unvisited_cities[chosen_city_i]} - del unvisited_cities[next(iter(chosen_city.keys()))] - return chosen_city, unvisited_cities - - -if __name__ == "__main__": - best_path, best_distance = main( - cities=cities, - ants_num=10, - iterations_num=20, - pheromone_evaporation=0.7, - alpha=1.0, - beta=5.0, - q=10, - ) - - print(f"{best_path = }") - print(f"{best_distance = }") diff --git a/graphs/articulation_points.py b/graphs/articulation_points.py deleted file mode 100644 index 0bf16e55bc04..000000000000 --- a/graphs/articulation_points.py +++ /dev/null @@ -1,55 +0,0 @@ -# Finding Articulation Points in Undirected Graph -def compute_ap(graph): - n = len(graph) - out_edge_count = 0 - low = [0] * n - visited = [False] * n - is_art = [False] * n - - def dfs(root, at, parent, out_edge_count): - if parent == root: - out_edge_count += 1 - visited[at] = True - low[at] = at - - for to in graph[at]: - if to == parent: - pass - elif not visited[to]: - out_edge_count = dfs(root, to, at, out_edge_count) - low[at] = min(low[at], low[to]) - - # AP found via bridge - if at < low[to]: - is_art[at] = True - # AP found via cycle - if at == low[to]: - is_art[at] = True - else: - low[at] = min(low[at], to) - return out_edge_count - - for i in range(n): - if not visited[i]: - out_edge_count = 0 - out_edge_count = dfs(i, i, -1, out_edge_count) - is_art[i] = out_edge_count > 1 - - for x in range(len(is_art)): - if is_art[x] is True: - print(x) - - -# Adjacency list of graph -graph = { - 0: [1, 2], - 1: [0, 2], - 2: [0, 1, 3, 5], - 3: [2, 4], - 4: [3], - 5: [2, 6, 8], - 6: [5, 7], - 7: [6, 8], - 8: [5, 7], -} -compute_ap(graph) diff --git a/graphs/basic_graphs.py b/graphs/basic_graphs.py deleted file mode 100644 index 25c8045b3d2b..000000000000 --- a/graphs/basic_graphs.py +++ /dev/null @@ -1,377 +0,0 @@ -from collections import deque - - -def _input(message): - return input(message).strip().split(" ") - - -def initialize_unweighted_directed_graph( - node_count: int, edge_count: int -) -> dict[int, list[int]]: - graph: dict[int, list[int]] = {} - for i in range(node_count): - graph[i + 1] = [] - - for e in range(edge_count): - x, y = (int(i) for i in _input(f"Edge {e + 1}: <node1> <node2> ")) - graph[x].append(y) - return graph - - -def initialize_unweighted_undirected_graph( - node_count: int, edge_count: int -) -> dict[int, list[int]]: - graph: dict[int, list[int]] = {} - for i in range(node_count): - graph[i + 1] = [] - - for e in range(edge_count): - x, y = (int(i) for i in _input(f"Edge {e + 1}: <node1> <node2> ")) - graph[x].append(y) - graph[y].append(x) - return graph - - -def initialize_weighted_undirected_graph( - node_count: int, edge_count: int -) -> dict[int, list[tuple[int, int]]]: - graph: dict[int, list[tuple[int, int]]] = {} - for i in range(node_count): - graph[i + 1] = [] - - for e in range(edge_count): - x, y, w = (int(i) for i in _input(f"Edge {e + 1}: <node1> <node2> <weight> ")) - graph[x].append((y, w)) - graph[y].append((x, w)) - return graph - - -if __name__ == "__main__": - n, m = (int(i) for i in _input("Number of nodes and edges: ")) - - graph_choice = int( - _input( - "Press 1 or 2 or 3 \n" - "1. Unweighted directed \n" - "2. Unweighted undirected \n" - "3. Weighted undirected \n" - )[0] - ) - - g = { - 1: initialize_unweighted_directed_graph, - 2: initialize_unweighted_undirected_graph, - 3: initialize_weighted_undirected_graph, - }[graph_choice](n, m) - - -""" --------------------------------------------------------------------------------- - Depth First Search. - Args : G - Dictionary of edges - s - Starting Node - Vars : vis - Set of visited nodes - S - Traversal Stack --------------------------------------------------------------------------------- -""" - - -def dfs(g, s): - vis, _s = {s}, [s] - print(s) - while _s: - flag = 0 - for i in g[_s[-1]]: - if i not in vis: - _s.append(i) - vis.add(i) - flag = 1 - print(i) - break - if not flag: - _s.pop() - - -""" --------------------------------------------------------------------------------- - Breadth First Search. - Args : G - Dictionary of edges - s - Starting Node - Vars : vis - Set of visited nodes - Q - Traversal Stack --------------------------------------------------------------------------------- -""" - - -def bfs(g, s): - vis, q = {s}, deque([s]) - print(s) - while q: - u = q.popleft() - for v in g[u]: - if v not in vis: - vis.add(v) - q.append(v) - print(v) - - -""" --------------------------------------------------------------------------------- - Dijkstra's shortest path Algorithm - Args : G - Dictionary of edges - s - Starting Node - Vars : dist - Dictionary storing shortest distance from s to every other node - known - Set of knows nodes - path - Preceding node in path --------------------------------------------------------------------------------- -""" - - -def dijk(g, s): - dist, known, path = {s: 0}, set(), {s: 0} - while True: - if len(known) == len(g) - 1: - break - mini = 100000 - for i in dist: - if i not in known and dist[i] < mini: - mini = dist[i] - u = i - known.add(u) - for v in g[u]: - if v[0] not in known and dist[u] + v[1] < dist.get(v[0], 100000): - dist[v[0]] = dist[u] + v[1] - path[v[0]] = u - for i in dist: - if i != s: - print(dist[i]) - - -""" --------------------------------------------------------------------------------- - Topological Sort --------------------------------------------------------------------------------- -""" - - -def topo(g, ind=None, q=None): - if q is None: - q = [1] - if ind is None: - ind = [0] * (len(g) + 1) # SInce oth Index is ignored - for u in g: - for v in g[u]: - ind[v] += 1 - q = deque() - for i in g: - if ind[i] == 0: - q.append(i) - if len(q) == 0: - return - v = q.popleft() - print(v) - for w in g[v]: - ind[w] -= 1 - if ind[w] == 0: - q.append(w) - topo(g, ind, q) - - -""" --------------------------------------------------------------------------------- - Reading an Adjacency matrix --------------------------------------------------------------------------------- -""" - - -def adjm(): - r""" - Reading an Adjacency matrix - - Parameters: - None - - Returns: - tuple: A tuple containing a list of edges and number of edges - - Example: - >>> # Simulate user input for 3 nodes - >>> input_data = "4\n0 1 0 1\n1 0 1 0\n0 1 0 1\n1 0 1 0\n" - >>> import sys,io - >>> original_input = sys.stdin - >>> sys.stdin = io.StringIO(input_data) # Redirect stdin for testing - >>> adjm() - ([(0, 1, 0, 1), (1, 0, 1, 0), (0, 1, 0, 1), (1, 0, 1, 0)], 4) - >>> sys.stdin = original_input # Restore original stdin - """ - n = int(input().strip()) - a = [] - for _ in range(n): - a.append(tuple(map(int, input().strip().split()))) - return a, n - - -""" --------------------------------------------------------------------------------- - Floyd Warshall's algorithm - Args : G - Dictionary of edges - s - Starting Node - Vars : dist - Dictionary storing shortest distance from s to every other node - known - Set of knows nodes - path - Preceding node in path - --------------------------------------------------------------------------------- -""" - - -def floy(a_and_n): - (a, n) = a_and_n - dist = list(a) - path = [[0] * n for i in range(n)] - for k in range(n): - for i in range(n): - for j in range(n): - if dist[i][j] > dist[i][k] + dist[k][j]: - dist[i][j] = dist[i][k] + dist[k][j] - path[i][k] = k - print(dist) - - -""" --------------------------------------------------------------------------------- - Prim's MST Algorithm - Args : G - Dictionary of edges - s - Starting Node - Vars : dist - Dictionary storing shortest distance from s to nearest node - known - Set of knows nodes - path - Preceding node in path --------------------------------------------------------------------------------- -""" - - -def prim(g, s): - dist, known, path = {s: 0}, set(), {s: 0} - while True: - if len(known) == len(g) - 1: - break - mini = 100000 - for i in dist: - if i not in known and dist[i] < mini: - mini = dist[i] - u = i - known.add(u) - for v in g[u]: - if v[0] not in known and v[1] < dist.get(v[0], 100000): - dist[v[0]] = v[1] - path[v[0]] = u - return dist - - -""" --------------------------------------------------------------------------------- - Accepting Edge list - Vars : n - Number of nodes - m - Number of edges - Returns : l - Edge list - n - Number of Nodes --------------------------------------------------------------------------------- -""" - - -def edglist(): - r""" - Get the edges and number of edges from the user - - Parameters: - None - - Returns: - tuple: A tuple containing a list of edges and number of edges - - Example: - >>> # Simulate user input for 3 edges and 4 vertices: (1, 2), (2, 3), (3, 4) - >>> input_data = "4 3\n1 2\n2 3\n3 4\n" - >>> import sys,io - >>> original_input = sys.stdin - >>> sys.stdin = io.StringIO(input_data) # Redirect stdin for testing - >>> edglist() - ([(1, 2), (2, 3), (3, 4)], 4) - >>> sys.stdin = original_input # Restore original stdin - """ - n, m = tuple(map(int, input().split(" "))) - edges = [] - for _ in range(m): - edges.append(tuple(map(int, input().split(" ")))) - return edges, n - - -""" --------------------------------------------------------------------------------- - Kruskal's MST Algorithm - Args : E - Edge list - n - Number of Nodes - Vars : s - Set of all nodes as unique disjoint sets (initially) --------------------------------------------------------------------------------- -""" - - -def krusk(e_and_n): - """ - Sort edges on the basis of distance - """ - (e, n) = e_and_n - e.sort(reverse=True, key=lambda x: x[2]) - s = [{i} for i in range(1, n + 1)] - while True: - if len(s) == 1: - break - print(s) - x = e.pop() - for i in range(len(s)): - if x[0] in s[i]: - break - for j in range(len(s)): - if x[1] in s[j]: - if i == j: - break - s[j].update(s[i]) - s.pop(i) - break - - -def find_isolated_nodes(graph): - """ - Find the isolated node in the graph - - Parameters: - graph (dict): A dictionary representing a graph. - - Returns: - list: A list of isolated nodes. - - Examples: - >>> graph1 = {1: [2, 3], 2: [1, 3], 3: [1, 2], 4: []} - >>> find_isolated_nodes(graph1) - [4] - - >>> graph2 = {'A': ['B', 'C'], 'B': ['A'], 'C': ['A'], 'D': []} - >>> find_isolated_nodes(graph2) - ['D'] - - >>> graph3 = {'X': [], 'Y': [], 'Z': []} - >>> find_isolated_nodes(graph3) - ['X', 'Y', 'Z'] - - >>> graph4 = {1: [2, 3], 2: [1, 3], 3: [1, 2]} - >>> find_isolated_nodes(graph4) - [] - - >>> graph5 = {} - >>> find_isolated_nodes(graph5) - [] - """ - isolated = [] - for node in graph: - if not graph[node]: - isolated.append(node) - return isolated diff --git a/graphs/bellman_ford.py b/graphs/bellman_ford.py deleted file mode 100644 index 9ac8bae85d4f..000000000000 --- a/graphs/bellman_ford.py +++ /dev/null @@ -1,73 +0,0 @@ -from __future__ import annotations - - -def print_distance(distance: list[float], src): - print(f"Vertex\tShortest Distance from vertex {src}") - for i, d in enumerate(distance): - print(f"{i}\t\t{d}") - - -def check_negative_cycle( - graph: list[dict[str, int]], distance: list[float], edge_count: int -): - for j in range(edge_count): - u, v, w = (graph[j][k] for k in ["src", "dst", "weight"]) - if distance[u] != float("inf") and distance[u] + w < distance[v]: - return True - return False - - -def bellman_ford( - graph: list[dict[str, int]], vertex_count: int, edge_count: int, src: int -) -> list[float]: - """ - Returns shortest paths from a vertex src to all - other vertices. - >>> edges = [(2, 1, -10), (3, 2, 3), (0, 3, 5), (0, 1, 4)] - >>> g = [{"src": s, "dst": d, "weight": w} for s, d, w in edges] - >>> bellman_ford(g, 4, 4, 0) - [0.0, -2.0, 8.0, 5.0] - >>> g = [{"src": s, "dst": d, "weight": w} for s, d, w in edges + [(1, 3, 5)]] - >>> bellman_ford(g, 4, 5, 0) - Traceback (most recent call last): - ... - Exception: Negative cycle found - """ - distance = [float("inf")] * vertex_count - distance[src] = 0.0 - - for _ in range(vertex_count - 1): - for j in range(edge_count): - u, v, w = (graph[j][k] for k in ["src", "dst", "weight"]) - - if distance[u] != float("inf") and distance[u] + w < distance[v]: - distance[v] = distance[u] + w - - negative_cycle_exists = check_negative_cycle(graph, distance, edge_count) - if negative_cycle_exists: - raise Exception("Negative cycle found") - - return distance - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - V = int(input("Enter number of vertices: ").strip()) - E = int(input("Enter number of edges: ").strip()) - - graph: list[dict[str, int]] = [{} for _ in range(E)] - - for i in range(E): - print("Edge ", i + 1) - src, dest, weight = ( - int(x) - for x in input("Enter source, destination, weight: ").strip().split(" ") - ) - graph[i] = {"src": src, "dst": dest, "weight": weight} - - source = int(input("\nEnter shortest path source:").strip()) - shortest_distance = bellman_ford(graph, V, E, source) - print_distance(shortest_distance, 0) diff --git a/graphs/bi_directional_dijkstra.py b/graphs/bi_directional_dijkstra.py deleted file mode 100644 index d2c4030b921b..000000000000 --- a/graphs/bi_directional_dijkstra.py +++ /dev/null @@ -1,140 +0,0 @@ -""" -Bi-directional Dijkstra's algorithm. - -A bi-directional approach is an efficient and -less time consuming optimization for Dijkstra's -searching algorithm - -Reference: shorturl.at/exHM7 -""" - -# Author: Swayam Singh (https://github.com/practice404) - -from queue import PriorityQueue -from typing import Any - -import numpy as np - - -def pass_and_relaxation( - graph: dict, - v: str, - visited_forward: set, - visited_backward: set, - cst_fwd: dict, - cst_bwd: dict, - queue: PriorityQueue, - parent: dict, - shortest_distance: float, -) -> float: - for nxt, d in graph[v]: - if nxt in visited_forward: - continue - old_cost_f = cst_fwd.get(nxt, np.inf) - new_cost_f = cst_fwd[v] + d - if new_cost_f < old_cost_f: - queue.put((new_cost_f, nxt)) - cst_fwd[nxt] = new_cost_f - parent[nxt] = v - if ( - nxt in visited_backward - and cst_fwd[v] + d + cst_bwd[nxt] < shortest_distance - ): - shortest_distance = cst_fwd[v] + d + cst_bwd[nxt] - return shortest_distance - - -def bidirectional_dij( - source: str, destination: str, graph_forward: dict, graph_backward: dict -) -> int: - """ - Bi-directional Dijkstra's algorithm. - - Returns: - shortest_path_distance (int): length of the shortest path. - - Warnings: - If the destination is not reachable, function returns -1 - - >>> bidirectional_dij("E", "F", graph_fwd, graph_bwd) - 3 - """ - shortest_path_distance = -1 - - visited_forward = set() - visited_backward = set() - cst_fwd = {source: 0} - cst_bwd = {destination: 0} - parent_forward = {source: None} - parent_backward = {destination: None} - queue_forward: PriorityQueue[Any] = PriorityQueue() - queue_backward: PriorityQueue[Any] = PriorityQueue() - - shortest_distance = np.inf - - queue_forward.put((0, source)) - queue_backward.put((0, destination)) - - if source == destination: - return 0 - - while not queue_forward.empty() and not queue_backward.empty(): - _, v_fwd = queue_forward.get() - visited_forward.add(v_fwd) - - _, v_bwd = queue_backward.get() - visited_backward.add(v_bwd) - - shortest_distance = pass_and_relaxation( - graph_forward, - v_fwd, - visited_forward, - visited_backward, - cst_fwd, - cst_bwd, - queue_forward, - parent_forward, - shortest_distance, - ) - - shortest_distance = pass_and_relaxation( - graph_backward, - v_bwd, - visited_backward, - visited_forward, - cst_bwd, - cst_fwd, - queue_backward, - parent_backward, - shortest_distance, - ) - - if cst_fwd[v_fwd] + cst_bwd[v_bwd] >= shortest_distance: - break - - if shortest_distance != np.inf: - shortest_path_distance = shortest_distance - return shortest_path_distance - - -graph_fwd = { - "B": [["C", 1]], - "C": [["D", 1]], - "D": [["F", 1]], - "E": [["B", 1], ["G", 2]], - "F": [], - "G": [["F", 1]], -} -graph_bwd = { - "B": [["E", 1]], - "C": [["B", 1]], - "D": [["C", 1]], - "F": [["D", 1], ["G", 1]], - "E": [[None, np.inf]], - "G": [["E", 2]], -} - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/bidirectional_a_star.py b/graphs/bidirectional_a_star.py deleted file mode 100644 index 00f623de3493..000000000000 --- a/graphs/bidirectional_a_star.py +++ /dev/null @@ -1,259 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Bidirectional_search -""" - -from __future__ import annotations - -import time -from math import sqrt - -# 1 for manhattan, 0 for euclidean -HEURISTIC = 0 - -grid = [ - [0, 0, 0, 0, 0, 0, 0], - [0, 1, 0, 0, 0, 0, 0], # 0 are free path whereas 1's are obstacles - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 1, 0, 0, 0, 0], - [1, 0, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0], -] - -delta = [[-1, 0], [0, -1], [1, 0], [0, 1]] # up, left, down, right - -TPosition = tuple[int, int] - - -class Node: - """ - >>> k = Node(0, 0, 4, 3, 0, None) - >>> k.calculate_heuristic() - 5.0 - >>> n = Node(1, 4, 3, 4, 2, None) - >>> n.calculate_heuristic() - 2.0 - >>> l = [k, n] - >>> n == l[0] - False - >>> l.sort() - >>> n == l[0] - True - """ - - def __init__( - self, - pos_x: int, - pos_y: int, - goal_x: int, - goal_y: int, - g_cost: int, - parent: Node | None, - ) -> None: - self.pos_x = pos_x - self.pos_y = pos_y - self.pos = (pos_y, pos_x) - self.goal_x = goal_x - self.goal_y = goal_y - self.g_cost = g_cost - self.parent = parent - self.h_cost = self.calculate_heuristic() - self.f_cost = self.g_cost + self.h_cost - - def calculate_heuristic(self) -> float: - """ - Heuristic for the A* - """ - dy = self.pos_x - self.goal_x - dx = self.pos_y - self.goal_y - if HEURISTIC == 1: - return abs(dx) + abs(dy) - else: - return sqrt(dy**2 + dx**2) - - def __lt__(self, other: Node) -> bool: - return self.f_cost < other.f_cost - - -class AStar: - """ - >>> astar = AStar((0, 0), (len(grid) - 1, len(grid[0]) - 1)) - >>> (astar.start.pos_y + delta[3][0], astar.start.pos_x + delta[3][1]) - (0, 1) - >>> [x.pos for x in astar.get_successors(astar.start)] - [(1, 0), (0, 1)] - >>> (astar.start.pos_y + delta[2][0], astar.start.pos_x + delta[2][1]) - (1, 0) - >>> astar.retrace_path(astar.start) - [(0, 0)] - >>> astar.search() # doctest: +NORMALIZE_WHITESPACE - [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (2, 3), (3, 3), - (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)] - """ - - def __init__(self, start: TPosition, goal: TPosition): - self.start = Node(start[1], start[0], goal[1], goal[0], 0, None) - self.target = Node(goal[1], goal[0], goal[1], goal[0], 99999, None) - - self.open_nodes = [self.start] - self.closed_nodes: list[Node] = [] - - self.reached = False - - def search(self) -> list[TPosition]: - while self.open_nodes: - # Open Nodes are sorted using __lt__ - self.open_nodes.sort() - current_node = self.open_nodes.pop(0) - - if current_node.pos == self.target.pos: - return self.retrace_path(current_node) - - self.closed_nodes.append(current_node) - successors = self.get_successors(current_node) - - for child_node in successors: - if child_node in self.closed_nodes: - continue - - if child_node not in self.open_nodes: - self.open_nodes.append(child_node) - else: - # retrieve the best current path - better_node = self.open_nodes.pop(self.open_nodes.index(child_node)) - - if child_node.g_cost < better_node.g_cost: - self.open_nodes.append(child_node) - else: - self.open_nodes.append(better_node) - - return [self.start.pos] - - def get_successors(self, parent: Node) -> list[Node]: - """ - Returns a list of successors (both in the grid and free spaces) - """ - successors = [] - for action in delta: - pos_x = parent.pos_x + action[1] - pos_y = parent.pos_y + action[0] - if not (0 <= pos_x <= len(grid[0]) - 1 and 0 <= pos_y <= len(grid) - 1): - continue - - if grid[pos_y][pos_x] != 0: - continue - - successors.append( - Node( - pos_x, - pos_y, - self.target.pos_y, - self.target.pos_x, - parent.g_cost + 1, - parent, - ) - ) - return successors - - def retrace_path(self, node: Node | None) -> list[TPosition]: - """ - Retrace the path from parents to parents until start node - """ - current_node = node - path = [] - while current_node is not None: - path.append((current_node.pos_y, current_node.pos_x)) - current_node = current_node.parent - path.reverse() - return path - - -class BidirectionalAStar: - """ - >>> bd_astar = BidirectionalAStar((0, 0), (len(grid) - 1, len(grid[0]) - 1)) - >>> bd_astar.fwd_astar.start.pos == bd_astar.bwd_astar.target.pos - True - >>> bd_astar.retrace_bidirectional_path(bd_astar.fwd_astar.start, - ... bd_astar.bwd_astar.start) - [(0, 0)] - >>> bd_astar.search() # doctest: +NORMALIZE_WHITESPACE - [(0, 0), (0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (2, 4), - (2, 5), (3, 5), (4, 5), (5, 5), (5, 6), (6, 6)] - """ - - def __init__(self, start: TPosition, goal: TPosition) -> None: - self.fwd_astar = AStar(start, goal) - self.bwd_astar = AStar(goal, start) - self.reached = False - - def search(self) -> list[TPosition]: - while self.fwd_astar.open_nodes or self.bwd_astar.open_nodes: - self.fwd_astar.open_nodes.sort() - self.bwd_astar.open_nodes.sort() - current_fwd_node = self.fwd_astar.open_nodes.pop(0) - current_bwd_node = self.bwd_astar.open_nodes.pop(0) - - if current_bwd_node.pos == current_fwd_node.pos: - return self.retrace_bidirectional_path( - current_fwd_node, current_bwd_node - ) - - self.fwd_astar.closed_nodes.append(current_fwd_node) - self.bwd_astar.closed_nodes.append(current_bwd_node) - - self.fwd_astar.target = current_bwd_node - self.bwd_astar.target = current_fwd_node - - successors = { - self.fwd_astar: self.fwd_astar.get_successors(current_fwd_node), - self.bwd_astar: self.bwd_astar.get_successors(current_bwd_node), - } - - for astar in [self.fwd_astar, self.bwd_astar]: - for child_node in successors[astar]: - if child_node in astar.closed_nodes: - continue - - if child_node not in astar.open_nodes: - astar.open_nodes.append(child_node) - else: - # retrieve the best current path - better_node = astar.open_nodes.pop( - astar.open_nodes.index(child_node) - ) - - if child_node.g_cost < better_node.g_cost: - astar.open_nodes.append(child_node) - else: - astar.open_nodes.append(better_node) - - return [self.fwd_astar.start.pos] - - def retrace_bidirectional_path( - self, fwd_node: Node, bwd_node: Node - ) -> list[TPosition]: - fwd_path = self.fwd_astar.retrace_path(fwd_node) - bwd_path = self.bwd_astar.retrace_path(bwd_node) - bwd_path.pop() - bwd_path.reverse() - path = fwd_path + bwd_path - return path - - -if __name__ == "__main__": - # all coordinates are given in format [y,x] - init = (0, 0) - goal = (len(grid) - 1, len(grid[0]) - 1) - for elem in grid: - print(elem) - - start_time = time.time() - a_star = AStar(init, goal) - path = a_star.search() - end_time = time.time() - start_time - print(f"AStar execution time = {end_time:f} seconds") - - bd_start_time = time.time() - bidir_astar = BidirectionalAStar(init, goal) - bd_end_time = time.time() - bd_start_time - print(f"BidirectionalAStar execution time = {bd_end_time:f} seconds") diff --git a/graphs/bidirectional_breadth_first_search.py b/graphs/bidirectional_breadth_first_search.py deleted file mode 100644 index 71c5a9aff08f..000000000000 --- a/graphs/bidirectional_breadth_first_search.py +++ /dev/null @@ -1,188 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Bidirectional_search -""" - -from __future__ import annotations - -import time - -Path = list[tuple[int, int]] - -grid = [ - [0, 0, 0, 0, 0, 0, 0], - [0, 1, 0, 0, 0, 0, 0], # 0 are free path whereas 1's are obstacles - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 1, 0, 0, 0, 0], - [1, 0, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0], -] - -delta = [[-1, 0], [0, -1], [1, 0], [0, 1]] # up, left, down, right - - -class Node: - def __init__( - self, pos_x: int, pos_y: int, goal_x: int, goal_y: int, parent: Node | None - ): - self.pos_x = pos_x - self.pos_y = pos_y - self.pos = (pos_y, pos_x) - self.goal_x = goal_x - self.goal_y = goal_y - self.parent = parent - - -class BreadthFirstSearch: - """ - # Comment out slow pytests... - # 9.15s call graphs/bidirectional_breadth_first_search.py:: \ - # graphs.bidirectional_breadth_first_search.BreadthFirstSearch - # >>> bfs = BreadthFirstSearch((0, 0), (len(grid) - 1, len(grid[0]) - 1)) - # >>> (bfs.start.pos_y + delta[3][0], bfs.start.pos_x + delta[3][1]) - (0, 1) - # >>> [x.pos for x in bfs.get_successors(bfs.start)] - [(1, 0), (0, 1)] - # >>> (bfs.start.pos_y + delta[2][0], bfs.start.pos_x + delta[2][1]) - (1, 0) - # >>> bfs.retrace_path(bfs.start) - [(0, 0)] - # >>> bfs.search() # doctest: +NORMALIZE_WHITESPACE - [(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1), - (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)] - """ - - def __init__(self, start: tuple[int, int], goal: tuple[int, int]): - self.start = Node(start[1], start[0], goal[1], goal[0], None) - self.target = Node(goal[1], goal[0], goal[1], goal[0], None) - - self.node_queue = [self.start] - self.reached = False - - def search(self) -> Path | None: - while self.node_queue: - current_node = self.node_queue.pop(0) - - if current_node.pos == self.target.pos: - self.reached = True - return self.retrace_path(current_node) - - successors = self.get_successors(current_node) - - for node in successors: - self.node_queue.append(node) - - if not self.reached: - return [self.start.pos] - return None - - def get_successors(self, parent: Node) -> list[Node]: - """ - Returns a list of successors (both in the grid and free spaces) - """ - successors = [] - for action in delta: - pos_x = parent.pos_x + action[1] - pos_y = parent.pos_y + action[0] - if not (0 <= pos_x <= len(grid[0]) - 1 and 0 <= pos_y <= len(grid) - 1): - continue - - if grid[pos_y][pos_x] != 0: - continue - - successors.append( - Node(pos_x, pos_y, self.target.pos_y, self.target.pos_x, parent) - ) - return successors - - def retrace_path(self, node: Node | None) -> Path: - """ - Retrace the path from parents to parents until start node - """ - current_node = node - path = [] - while current_node is not None: - path.append((current_node.pos_y, current_node.pos_x)) - current_node = current_node.parent - path.reverse() - return path - - -class BidirectionalBreadthFirstSearch: - """ - >>> bd_bfs = BidirectionalBreadthFirstSearch((0, 0), (len(grid) - 1, - ... len(grid[0]) - 1)) - >>> bd_bfs.fwd_bfs.start.pos == bd_bfs.bwd_bfs.target.pos - True - >>> bd_bfs.retrace_bidirectional_path(bd_bfs.fwd_bfs.start, - ... bd_bfs.bwd_bfs.start) - [(0, 0)] - >>> bd_bfs.search() # doctest: +NORMALIZE_WHITESPACE - [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2), (2, 3), - (2, 4), (3, 4), (3, 5), (3, 6), (4, 6), (5, 6), (6, 6)] - """ - - def __init__(self, start, goal): - self.fwd_bfs = BreadthFirstSearch(start, goal) - self.bwd_bfs = BreadthFirstSearch(goal, start) - self.reached = False - - def search(self) -> Path | None: - while self.fwd_bfs.node_queue or self.bwd_bfs.node_queue: - current_fwd_node = self.fwd_bfs.node_queue.pop(0) - current_bwd_node = self.bwd_bfs.node_queue.pop(0) - - if current_bwd_node.pos == current_fwd_node.pos: - self.reached = True - return self.retrace_bidirectional_path( - current_fwd_node, current_bwd_node - ) - - self.fwd_bfs.target = current_bwd_node - self.bwd_bfs.target = current_fwd_node - - successors = { - self.fwd_bfs: self.fwd_bfs.get_successors(current_fwd_node), - self.bwd_bfs: self.bwd_bfs.get_successors(current_bwd_node), - } - - for bfs in [self.fwd_bfs, self.bwd_bfs]: - for node in successors[bfs]: - bfs.node_queue.append(node) - - if not self.reached: - return [self.fwd_bfs.start.pos] - return None - - def retrace_bidirectional_path(self, fwd_node: Node, bwd_node: Node) -> Path: - fwd_path = self.fwd_bfs.retrace_path(fwd_node) - bwd_path = self.bwd_bfs.retrace_path(bwd_node) - bwd_path.pop() - bwd_path.reverse() - path = fwd_path + bwd_path - return path - - -if __name__ == "__main__": - # all coordinates are given in format [y,x] - import doctest - - doctest.testmod() - init = (0, 0) - goal = (len(grid) - 1, len(grid[0]) - 1) - for elem in grid: - print(elem) - - start_bfs_time = time.time() - bfs = BreadthFirstSearch(init, goal) - path = bfs.search() - bfs_time = time.time() - start_bfs_time - - print("Unidirectional BFS computation time : ", bfs_time) - - start_bd_bfs_time = time.time() - bd_bfs = BidirectionalBreadthFirstSearch(init, goal) - bd_path = bd_bfs.search() - bd_bfs_time = time.time() - start_bd_bfs_time - - print("Bidirectional BFS computation time : ", bd_bfs_time) diff --git a/graphs/boruvka.py b/graphs/boruvka.py deleted file mode 100644 index 3dc059ff6a62..000000000000 --- a/graphs/boruvka.py +++ /dev/null @@ -1,176 +0,0 @@ -"""Borůvka's algorithm. - -Determines the minimum spanning tree (MST) of a graph using the Borůvka's algorithm. -Borůvka's algorithm is a greedy algorithm for finding a minimum spanning tree in a -connected graph, or a minimum spanning forest if a graph that is not connected. - -The time complexity of this algorithm is O(ELogV), where E represents the number -of edges, while V represents the number of nodes. -O(number_of_edges Log number_of_nodes) - -The space complexity of this algorithm is O(V + E), since we have to keep a couple -of lists whose sizes are equal to the number of nodes, as well as keep all the -edges of a graph inside of the data structure itself. - -Borůvka's algorithm gives us pretty much the same result as other MST Algorithms - -they all find the minimum spanning tree, and the time complexity is approximately -the same. - -One advantage that Borůvka's algorithm has compared to the alternatives is that it -doesn't need to presort the edges or maintain a priority queue in order to find the -minimum spanning tree. -Even though that doesn't help its complexity, since it still passes the edges logE -times, it is a bit simpler to code. - -Details: https://en.wikipedia.org/wiki/Bor%C5%AFvka%27s_algorithm -""" - -from __future__ import annotations - -from typing import Any - - -class Graph: - def __init__(self, num_of_nodes: int) -> None: - """ - Arguments: - num_of_nodes - the number of nodes in the graph - Attributes: - m_num_of_nodes - the number of nodes in the graph. - m_edges - the list of edges. - m_component - the dictionary which stores the index of the component which - a node belongs to. - """ - - self.m_num_of_nodes = num_of_nodes - self.m_edges: list[list[int]] = [] - self.m_component: dict[int, int] = {} - - def add_edge(self, u_node: int, v_node: int, weight: int) -> None: - """Adds an edge in the format [first, second, edge weight] to graph.""" - - self.m_edges.append([u_node, v_node, weight]) - - def find_component(self, u_node: int) -> int: - """Propagates a new component throughout a given component.""" - - if self.m_component[u_node] == u_node: - return u_node - return self.find_component(self.m_component[u_node]) - - def set_component(self, u_node: int) -> None: - """Finds the component index of a given node""" - - if self.m_component[u_node] != u_node: - for k in self.m_component: - self.m_component[k] = self.find_component(k) - - def union(self, component_size: list[int], u_node: int, v_node: int) -> None: - """Union finds the roots of components for two nodes, compares the components - in terms of size, and attaches the smaller one to the larger one to form - single component""" - - if component_size[u_node] <= component_size[v_node]: - self.m_component[u_node] = v_node - component_size[v_node] += component_size[u_node] - self.set_component(u_node) - - elif component_size[u_node] >= component_size[v_node]: - self.m_component[v_node] = self.find_component(u_node) - component_size[u_node] += component_size[v_node] - self.set_component(v_node) - - def boruvka(self) -> None: - """Performs Borůvka's algorithm to find MST.""" - - # Initialize additional lists required to algorithm. - component_size = [] - mst_weight = 0 - - minimum_weight_edge: list[Any] = [-1] * self.m_num_of_nodes - - # A list of components (initialized to all of the nodes) - for node in range(self.m_num_of_nodes): - self.m_component.update({node: node}) - component_size.append(1) - - num_of_components = self.m_num_of_nodes - - while num_of_components > 1: - for edge in self.m_edges: - u, v, w = edge - - u_component = self.m_component[u] - v_component = self.m_component[v] - - if u_component != v_component: - """If the current minimum weight edge of component u doesn't - exist (is -1), or if it's greater than the edge we're - observing right now, we will assign the value of the edge - we're observing to it. - - If the current minimum weight edge of component v doesn't - exist (is -1), or if it's greater than the edge we're - observing right now, we will assign the value of the edge - we're observing to it""" - - for component in (u_component, v_component): - if ( - minimum_weight_edge[component] == -1 - or minimum_weight_edge[component][2] > w - ): - minimum_weight_edge[component] = [u, v, w] - - for edge in minimum_weight_edge: - if isinstance(edge, list): - u, v, w = edge - - u_component = self.m_component[u] - v_component = self.m_component[v] - - if u_component != v_component: - mst_weight += w - self.union(component_size, u_component, v_component) - print(f"Added edge [{u} - {v}]\nAdded weight: {w}\n") - num_of_components -= 1 - - minimum_weight_edge = [-1] * self.m_num_of_nodes - print(f"The total weight of the minimal spanning tree is: {mst_weight}") - - -def test_vector() -> None: - """ - >>> g = Graph(8) - >>> for u_v_w in ((0, 1, 10), (0, 2, 6), (0, 3, 5), (1, 3, 15), (2, 3, 4), - ... (3, 4, 8), (4, 5, 10), (4, 6, 6), (4, 7, 5), (5, 7, 15), (6, 7, 4)): - ... g.add_edge(*u_v_w) - >>> g.boruvka() - Added edge [0 - 3] - Added weight: 5 - <BLANKLINE> - Added edge [0 - 1] - Added weight: 10 - <BLANKLINE> - Added edge [2 - 3] - Added weight: 4 - <BLANKLINE> - Added edge [4 - 7] - Added weight: 5 - <BLANKLINE> - Added edge [4 - 5] - Added weight: 10 - <BLANKLINE> - Added edge [6 - 7] - Added weight: 4 - <BLANKLINE> - Added edge [3 - 4] - Added weight: 8 - <BLANKLINE> - The total weight of the minimal spanning tree is: 46 - """ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/breadth_first_search.py b/graphs/breadth_first_search.py deleted file mode 100644 index cab79be39ed3..000000000000 --- a/graphs/breadth_first_search.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/python - -"""Author: OMKAR PATHAK""" - -from __future__ import annotations - -from queue import Queue - - -class Graph: - def __init__(self) -> None: - self.vertices: dict[int, list[int]] = {} - - def print_graph(self) -> None: - """ - prints adjacency list representation of graaph - >>> g = Graph() - >>> g.print_graph() - >>> g.add_edge(0, 1) - >>> g.print_graph() - 0 : 1 - """ - for i in self.vertices: - print(i, " : ", " -> ".join([str(j) for j in self.vertices[i]])) - - def add_edge(self, from_vertex: int, to_vertex: int) -> None: - """ - adding the edge between two vertices - >>> g = Graph() - >>> g.print_graph() - >>> g.add_edge(0, 1) - >>> g.print_graph() - 0 : 1 - """ - if from_vertex in self.vertices: - self.vertices[from_vertex].append(to_vertex) - else: - self.vertices[from_vertex] = [to_vertex] - - def bfs(self, start_vertex: int) -> set[int]: - """ - >>> g = Graph() - >>> g.add_edge(0, 1) - >>> g.add_edge(0, 1) - >>> g.add_edge(0, 2) - >>> g.add_edge(1, 2) - >>> g.add_edge(2, 0) - >>> g.add_edge(2, 3) - >>> g.add_edge(3, 3) - >>> sorted(g.bfs(2)) - [0, 1, 2, 3] - """ - # initialize set for storing already visited vertices - visited = set() - - # create a first in first out queue to store all the vertices for BFS - queue: Queue = Queue() - - # mark the source node as visited and enqueue it - visited.add(start_vertex) - queue.put(start_vertex) - - while not queue.empty(): - vertex = queue.get() - - # loop through all adjacent vertex and enqueue it if not yet visited - for adjacent_vertex in self.vertices[vertex]: - if adjacent_vertex not in visited: - queue.put(adjacent_vertex) - visited.add(adjacent_vertex) - return visited - - -if __name__ == "__main__": - from doctest import testmod - - testmod(verbose=True) - - g = Graph() - g.add_edge(0, 1) - g.add_edge(0, 2) - g.add_edge(1, 2) - g.add_edge(2, 0) - g.add_edge(2, 3) - g.add_edge(3, 3) - - g.print_graph() - # 0 : 1 -> 2 - # 1 : 2 - # 2 : 0 -> 3 - # 3 : 3 - - assert sorted(g.bfs(2)) == [0, 1, 2, 3] diff --git a/graphs/breadth_first_search_2.py b/graphs/breadth_first_search_2.py deleted file mode 100644 index ccadfa346bf1..000000000000 --- a/graphs/breadth_first_search_2.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Breadth-first_search -pseudo-code: -breadth_first_search(graph G, start vertex s): -// all nodes initially unexplored -mark s as explored -let Q = queue data structure, initialized with s -while Q is non-empty: - remove the first node of Q, call it v - for each edge(v, w): // for w in graph[v] - if w unexplored: - mark w as explored - add w to Q (at the end) -""" - -from __future__ import annotations - -from collections import deque -from queue import Queue -from timeit import timeit - -G = { - "A": ["B", "C"], - "B": ["A", "D", "E"], - "C": ["A", "F"], - "D": ["B"], - "E": ["B", "F"], - "F": ["C", "E"], -} - - -def breadth_first_search(graph: dict, start: str) -> list[str]: - """ - Implementation of breadth first search using queue.Queue. - - >>> ''.join(breadth_first_search(G, 'A')) - 'ABCDEF' - """ - explored = {start} - result = [start] - queue: Queue = Queue() - queue.put(start) - while not queue.empty(): - v = queue.get() - for w in graph[v]: - if w not in explored: - explored.add(w) - result.append(w) - queue.put(w) - return result - - -def breadth_first_search_with_deque(graph: dict, start: str) -> list[str]: - """ - Implementation of breadth first search using collection.queue. - - >>> ''.join(breadth_first_search_with_deque(G, 'A')) - 'ABCDEF' - """ - visited = {start} - result = [start] - queue = deque([start]) - while queue: - v = queue.popleft() - for child in graph[v]: - if child not in visited: - visited.add(child) - result.append(child) - queue.append(child) - return result - - -def benchmark_function(name: str) -> None: - setup = f"from __main__ import G, {name}" - number = 10000 - res = timeit(f"{name}(G, 'A')", setup=setup, number=number) - print(f"{name:<35} finished {number} runs in {res:.5f} seconds") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - benchmark_function("breadth_first_search") - benchmark_function("breadth_first_search_with_deque") - # breadth_first_search finished 10000 runs in 0.20999 seconds - # breadth_first_search_with_deque finished 10000 runs in 0.01421 seconds diff --git a/graphs/breadth_first_search_shortest_path.py b/graphs/breadth_first_search_shortest_path.py deleted file mode 100644 index c06440bccef3..000000000000 --- a/graphs/breadth_first_search_shortest_path.py +++ /dev/null @@ -1,90 +0,0 @@ -"""Breath First Search (BFS) can be used when finding the shortest path -from a given source node to a target node in an unweighted graph. -""" - -from __future__ import annotations - -graph = { - "A": ["B", "C", "E"], - "B": ["A", "D", "E"], - "C": ["A", "F", "G"], - "D": ["B"], - "E": ["A", "B", "D"], - "F": ["C"], - "G": ["C"], -} - - -class Graph: - def __init__(self, graph: dict[str, list[str]], source_vertex: str) -> None: - """ - Graph is implemented as dictionary of adjacency lists. Also, - Source vertex have to be defined upon initialization. - """ - self.graph = graph - # mapping node to its parent in resulting breadth first tree - self.parent: dict[str, str | None] = {} - self.source_vertex = source_vertex - - def breath_first_search(self) -> None: - """ - This function is a helper for running breath first search on this graph. - >>> g = Graph(graph, "G") - >>> g.breath_first_search() - >>> g.parent - {'G': None, 'C': 'G', 'A': 'C', 'F': 'C', 'B': 'A', 'E': 'A', 'D': 'B'} - """ - visited = {self.source_vertex} - self.parent[self.source_vertex] = None - queue = [self.source_vertex] # first in first out queue - - while queue: - vertex = queue.pop(0) - for adjacent_vertex in self.graph[vertex]: - if adjacent_vertex not in visited: - visited.add(adjacent_vertex) - self.parent[adjacent_vertex] = vertex - queue.append(adjacent_vertex) - - def shortest_path(self, target_vertex: str) -> str: - """ - This shortest path function returns a string, describing the result: - 1.) No path is found. The string is a human readable message to indicate this. - 2.) The shortest path is found. The string is in the form - `v1(->v2->v3->...->vn)`, where v1 is the source vertex and vn is the target - vertex, if it exists separately. - - >>> g = Graph(graph, "G") - >>> g.breath_first_search() - - Case 1 - No path is found. - >>> g.shortest_path("Foo") - Traceback (most recent call last): - ... - ValueError: No path from vertex: G to vertex: Foo - - Case 2 - The path is found. - >>> g.shortest_path("D") - 'G->C->A->B->D' - >>> g.shortest_path("G") - 'G' - """ - if target_vertex == self.source_vertex: - return self.source_vertex - - target_vertex_parent = self.parent.get(target_vertex) - if target_vertex_parent is None: - msg = ( - f"No path from vertex: {self.source_vertex} to vertex: {target_vertex}" - ) - raise ValueError(msg) - - return self.shortest_path(target_vertex_parent) + f"->{target_vertex}" - - -if __name__ == "__main__": - g = Graph(graph, "G") - g.breath_first_search() - print(g.shortest_path("D")) - print(g.shortest_path("G")) - print(g.shortest_path("Foo")) diff --git a/graphs/breadth_first_search_shortest_path_2.py b/graphs/breadth_first_search_shortest_path_2.py deleted file mode 100644 index 4f9b6e65bdf3..000000000000 --- a/graphs/breadth_first_search_shortest_path_2.py +++ /dev/null @@ -1,111 +0,0 @@ -"""Breadth-first search shortest path implementations. -doctest: -python -m doctest -v bfs_shortest_path.py -Manual test: -python bfs_shortest_path.py -""" - -demo_graph = { - "A": ["B", "C", "E"], - "B": ["A", "D", "E"], - "C": ["A", "F", "G"], - "D": ["B"], - "E": ["A", "B", "D"], - "F": ["C"], - "G": ["C"], -} - - -def bfs_shortest_path(graph: dict, start, goal) -> list[str]: - """Find shortest path between `start` and `goal` nodes. - Args: - graph (dict): node/list of neighboring nodes key/value pairs. - start: start node. - goal: target node. - Returns: - Shortest path between `start` and `goal` nodes as a string of nodes. - 'Not found' string if no path found. - Example: - >>> bfs_shortest_path(demo_graph, "G", "D") - ['G', 'C', 'A', 'B', 'D'] - >>> bfs_shortest_path(demo_graph, "G", "G") - ['G'] - >>> bfs_shortest_path(demo_graph, "G", "Unknown") - [] - """ - # keep track of explored nodes - explored = set() - # keep track of all the paths to be checked - queue = [[start]] - - # return path if start is goal - if start == goal: - return [start] - - # keeps looping until all possible paths have been checked - while queue: - # pop the first path from the queue - path = queue.pop(0) - # get the last node from the path - node = path[-1] - if node not in explored: - neighbours = graph[node] - # go through all neighbour nodes, construct a new path and - # push it into the queue - for neighbour in neighbours: - new_path = list(path) - new_path.append(neighbour) - queue.append(new_path) - # return path if neighbour is goal - if neighbour == goal: - return new_path - - # mark node as explored - explored.add(node) - - # in case there's no path between the 2 nodes - return [] - - -def bfs_shortest_path_distance(graph: dict, start, target) -> int: - """Find shortest path distance between `start` and `target` nodes. - Args: - graph: node/list of neighboring nodes key/value pairs. - start: node to start search from. - target: node to search for. - Returns: - Number of edges in shortest path between `start` and `target` nodes. - -1 if no path exists. - Example: - >>> bfs_shortest_path_distance(demo_graph, "G", "D") - 4 - >>> bfs_shortest_path_distance(demo_graph, "A", "A") - 0 - >>> bfs_shortest_path_distance(demo_graph, "A", "Unknown") - -1 - """ - if not graph or start not in graph or target not in graph: - return -1 - if start == target: - return 0 - queue = [start] - visited = set(start) - # Keep tab on distances from `start` node. - dist = {start: 0, target: -1} - while queue: - node = queue.pop(0) - if node == target: - dist[target] = ( - dist[node] if dist[target] == -1 else min(dist[target], dist[node]) - ) - for adjacent in graph[node]: - if adjacent not in visited: - visited.add(adjacent) - queue.append(adjacent) - dist[adjacent] = dist[node] + 1 - return dist[target] - - -if __name__ == "__main__": - print(bfs_shortest_path(demo_graph, "G", "D")) # returns ['G', 'C', 'A', 'B', 'D'] - print(bfs_shortest_path_distance(demo_graph, "G", "D")) # returns 4 diff --git a/graphs/breadth_first_search_zero_one_shortest_path.py b/graphs/breadth_first_search_zero_one_shortest_path.py deleted file mode 100644 index d3a255bac1ef..000000000000 --- a/graphs/breadth_first_search_zero_one_shortest_path.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -Finding the shortest path in 0-1-graph in O(E + V) which is faster than dijkstra. -0-1-graph is the weighted graph with the weights equal to 0 or 1. -Link: https://codeforces.com/blog/entry/22276 -""" - -from __future__ import annotations - -from collections import deque -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Edge: - """Weighted directed graph edge.""" - - destination_vertex: int - weight: int - - -class AdjacencyList: - """Graph adjacency list.""" - - def __init__(self, size: int): - self._graph: list[list[Edge]] = [[] for _ in range(size)] - self._size = size - - def __getitem__(self, vertex: int) -> Iterator[Edge]: - """Get all the vertices adjacent to the given one.""" - return iter(self._graph[vertex]) - - @property - def size(self): - return self._size - - def add_edge(self, from_vertex: int, to_vertex: int, weight: int): - """ - >>> g = AdjacencyList(2) - >>> g.add_edge(0, 1, 0) - >>> g.add_edge(1, 0, 1) - >>> list(g[0]) - [Edge(destination_vertex=1, weight=0)] - >>> list(g[1]) - [Edge(destination_vertex=0, weight=1)] - >>> g.add_edge(0, 1, 2) - Traceback (most recent call last): - ... - ValueError: Edge weight must be either 0 or 1. - >>> g.add_edge(0, 2, 1) - Traceback (most recent call last): - ... - ValueError: Vertex indexes must be in [0; size). - """ - if weight not in (0, 1): - raise ValueError("Edge weight must be either 0 or 1.") - - if to_vertex < 0 or to_vertex >= self.size: - raise ValueError("Vertex indexes must be in [0; size).") - - self._graph[from_vertex].append(Edge(to_vertex, weight)) - - def get_shortest_path(self, start_vertex: int, finish_vertex: int) -> int | None: - """ - Return the shortest distance from start_vertex to finish_vertex in 0-1-graph. - 1 1 1 - 0--------->3 6--------7>------->8 - | ^ ^ ^ |1 - | | | |0 v - 0| |0 1| 9-------->10 - | | | ^ 1 - v | | |0 - 1--------->2<-------4------->5 - 0 1 1 - >>> g = AdjacencyList(11) - >>> g.add_edge(0, 1, 0) - >>> g.add_edge(0, 3, 1) - >>> g.add_edge(1, 2, 0) - >>> g.add_edge(2, 3, 0) - >>> g.add_edge(4, 2, 1) - >>> g.add_edge(4, 5, 1) - >>> g.add_edge(4, 6, 1) - >>> g.add_edge(5, 9, 0) - >>> g.add_edge(6, 7, 1) - >>> g.add_edge(7, 8, 1) - >>> g.add_edge(8, 10, 1) - >>> g.add_edge(9, 7, 0) - >>> g.add_edge(9, 10, 1) - >>> g.add_edge(1, 2, 2) - Traceback (most recent call last): - ... - ValueError: Edge weight must be either 0 or 1. - >>> g.get_shortest_path(0, 3) - 0 - >>> g.get_shortest_path(0, 4) - Traceback (most recent call last): - ... - ValueError: No path from start_vertex to finish_vertex. - >>> g.get_shortest_path(4, 10) - 2 - >>> g.get_shortest_path(4, 8) - 2 - >>> g.get_shortest_path(0, 1) - 0 - >>> g.get_shortest_path(1, 0) - Traceback (most recent call last): - ... - ValueError: No path from start_vertex to finish_vertex. - """ - queue = deque([start_vertex]) - distances: list[int | None] = [None] * self.size - distances[start_vertex] = 0 - - while queue: - current_vertex = queue.popleft() - current_distance = distances[current_vertex] - if current_distance is None: - continue - - for edge in self[current_vertex]: - new_distance = current_distance + edge.weight - dest_vertex_distance = distances[edge.destination_vertex] - if ( - isinstance(dest_vertex_distance, int) - and new_distance >= dest_vertex_distance - ): - continue - distances[edge.destination_vertex] = new_distance - if edge.weight == 0: - queue.appendleft(edge.destination_vertex) - else: - queue.append(edge.destination_vertex) - - if distances[finish_vertex] is None: - raise ValueError("No path from start_vertex to finish_vertex.") - - return distances[finish_vertex] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/check_bipatrite.py b/graphs/check_bipatrite.py deleted file mode 100644 index 10b9cc965251..000000000000 --- a/graphs/check_bipatrite.py +++ /dev/null @@ -1,179 +0,0 @@ -from collections import defaultdict, deque - - -def is_bipartite_dfs(graph: defaultdict[int, list[int]]) -> bool: - """ - Check if a graph is bipartite using depth-first search (DFS). - - Args: - graph: Adjacency list representing the graph. - - Returns: - True if bipartite, False otherwise. - - Checks if the graph can be divided into two sets of vertices, such that no two - vertices within the same set are connected by an edge. - - Examples: - # FIXME: This test should pass. - >>> is_bipartite_dfs(defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4]})) - Traceback (most recent call last): - ... - RuntimeError: dictionary changed size during iteration - >>> is_bipartite_dfs(defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 1]})) - False - >>> is_bipartite_dfs({}) - True - >>> is_bipartite_dfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]}) - True - >>> is_bipartite_dfs({0: [1, 2, 3], 1: [0, 2], 2: [0, 1, 3], 3: [0, 2]}) - False - >>> is_bipartite_dfs({0: [4], 1: [], 2: [4], 3: [4], 4: [0, 2, 3]}) - True - >>> is_bipartite_dfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]}) - False - >>> is_bipartite_dfs({7: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]}) - Traceback (most recent call last): - ... - KeyError: 0 - - # FIXME: This test should fails with KeyError: 4. - >>> is_bipartite_dfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 9: [0]}) - False - >>> is_bipartite_dfs({0: [-1, 3], 1: [0, -2]}) - Traceback (most recent call last): - ... - KeyError: -1 - >>> is_bipartite_dfs({-1: [0, 2], 0: [-1, 1], 1: [0, 2], 2: [-1, 1]}) - True - >>> is_bipartite_dfs({0.9: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]}) - Traceback (most recent call last): - ... - KeyError: 0 - - # FIXME: This test should fails with TypeError: list indices must be integers or... - >>> is_bipartite_dfs({0: [1.0, 3.0], 1.0: [0, 2.0], 2.0: [1.0, 3.0], 3.0: [0, 2.0]}) - True - >>> is_bipartite_dfs({"a": [1, 3], "b": [0, 2], "c": [1, 3], "d": [0, 2]}) - Traceback (most recent call last): - ... - KeyError: 1 - >>> is_bipartite_dfs({0: ["b", "d"], 1: ["a", "c"], 2: ["b", "d"], 3: ["a", "c"]}) - Traceback (most recent call last): - ... - KeyError: 'b' - """ - - def depth_first_search(node: int, color: int) -> bool: - """ - Perform Depth-First Search (DFS) on the graph starting from a node. - - Args: - node: The current node being visited. - color: The color assigned to the current node. - - Returns: - True if the graph is bipartite starting from the current node, - False otherwise. - """ - if visited[node] == -1: - visited[node] = color - for neighbor in graph[node]: - if not depth_first_search(neighbor, 1 - color): - return False - return visited[node] == color - - visited: defaultdict[int, int] = defaultdict(lambda: -1) - for node in graph: - if visited[node] == -1 and not depth_first_search(node, 0): - return False - return True - - -def is_bipartite_bfs(graph: defaultdict[int, list[int]]) -> bool: - """ - Check if a graph is bipartite using a breadth-first search (BFS). - - Args: - graph: Adjacency list representing the graph. - - Returns: - True if bipartite, False otherwise. - - Check if the graph can be divided into two sets of vertices, such that no two - vertices within the same set are connected by an edge. - - Examples: - # FIXME: This test should pass. - >>> is_bipartite_bfs(defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4]})) - Traceback (most recent call last): - ... - RuntimeError: dictionary changed size during iteration - >>> is_bipartite_bfs(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]})) - False - >>> is_bipartite_bfs({}) - True - >>> is_bipartite_bfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]}) - True - >>> is_bipartite_bfs({0: [1, 2, 3], 1: [0, 2], 2: [0, 1, 3], 3: [0, 2]}) - False - >>> is_bipartite_bfs({0: [4], 1: [], 2: [4], 3: [4], 4: [0, 2, 3]}) - True - >>> is_bipartite_bfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]}) - False - >>> is_bipartite_bfs({7: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]}) - Traceback (most recent call last): - ... - KeyError: 0 - - # FIXME: This test should fails with KeyError: 4. - >>> is_bipartite_bfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 9: [0]}) - False - >>> is_bipartite_bfs({0: [-1, 3], 1: [0, -2]}) - Traceback (most recent call last): - ... - KeyError: -1 - >>> is_bipartite_bfs({-1: [0, 2], 0: [-1, 1], 1: [0, 2], 2: [-1, 1]}) - True - >>> is_bipartite_bfs({0.9: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]}) - Traceback (most recent call last): - ... - KeyError: 0 - - # FIXME: This test should fails with TypeError: list indices must be integers or... - >>> is_bipartite_bfs({0: [1.0, 3.0], 1.0: [0, 2.0], 2.0: [1.0, 3.0], 3.0: [0, 2.0]}) - True - >>> is_bipartite_bfs({"a": [1, 3], "b": [0, 2], "c": [1, 3], "d": [0, 2]}) - Traceback (most recent call last): - ... - KeyError: 1 - >>> is_bipartite_bfs({0: ["b", "d"], 1: ["a", "c"], 2: ["b", "d"], 3: ["a", "c"]}) - Traceback (most recent call last): - ... - KeyError: 'b' - """ - visited: defaultdict[int, int] = defaultdict(lambda: -1) - for node in graph: - if visited[node] == -1: - queue: deque[int] = deque() - queue.append(node) - visited[node] = 0 - while queue: - curr_node = queue.popleft() - for neighbor in graph[curr_node]: - if visited[neighbor] == -1: - visited[neighbor] = 1 - visited[curr_node] - queue.append(neighbor) - elif visited[neighbor] == visited[curr_node]: - return False - return True - - -if __name__ == "__main": - import doctest - - result = doctest.testmod() - if result.failed: - print(f"{result.failed} test(s) failed.") - else: - print("All tests passed!") diff --git a/graphs/check_cycle.py b/graphs/check_cycle.py deleted file mode 100644 index 9fd1cd80f116..000000000000 --- a/graphs/check_cycle.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Program to check if a cycle is present in a given graph -""" - - -def check_cycle(graph: dict) -> bool: - """ - Returns True if graph is cyclic else False - >>> check_cycle(graph={0:[], 1:[0, 3], 2:[0, 4], 3:[5], 4:[5], 5:[]}) - False - >>> check_cycle(graph={0:[1, 2], 1:[2], 2:[0, 3], 3:[3]}) - True - """ - # Keep track of visited nodes - visited: set[int] = set() - # To detect a back edge, keep track of vertices currently in the recursion stack - rec_stk: set[int] = set() - return any( - node not in visited and depth_first_search(graph, node, visited, rec_stk) - for node in graph - ) - - -def depth_first_search(graph: dict, vertex: int, visited: set, rec_stk: set) -> bool: - """ - Recur for all neighbours. - If any neighbour is visited and in rec_stk then graph is cyclic. - >>> graph = {0:[], 1:[0, 3], 2:[0, 4], 3:[5], 4:[5], 5:[]} - >>> vertex, visited, rec_stk = 0, set(), set() - >>> depth_first_search(graph, vertex, visited, rec_stk) - False - """ - # Mark current node as visited and add to recursion stack - visited.add(vertex) - rec_stk.add(vertex) - - for node in graph[vertex]: - if node not in visited: - if depth_first_search(graph, node, visited, rec_stk): - return True - elif node in rec_stk: - return True - - # The node needs to be removed from recursion stack before function ends - rec_stk.remove(vertex) - return False - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/graphs/connected_components.py b/graphs/connected_components.py deleted file mode 100644 index 15c7633e13e8..000000000000 --- a/graphs/connected_components.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Component_(graph_theory) - -Finding connected components in graph - -""" - -test_graph_1 = {0: [1, 2], 1: [0, 3], 2: [0], 3: [1], 4: [5, 6], 5: [4, 6], 6: [4, 5]} - -test_graph_2 = {0: [1, 2, 3], 1: [0, 3], 2: [0], 3: [0, 1], 4: [], 5: []} - - -def dfs(graph: dict, vert: int, visited: list) -> list: - """ - Use depth first search to find all vertices - being in the same component as initial vertex - >>> dfs(test_graph_1, 0, 5 * [False]) - [0, 1, 3, 2] - >>> dfs(test_graph_2, 0, 6 * [False]) - [0, 1, 3, 2] - """ - - visited[vert] = True - connected_verts = [] - - for neighbour in graph[vert]: - if not visited[neighbour]: - connected_verts += dfs(graph, neighbour, visited) - - return [vert, *connected_verts] - - -def connected_components(graph: dict) -> list: - """ - This function takes graph as a parameter - and then returns the list of connected components - >>> connected_components(test_graph_1) - [[0, 1, 3, 2], [4, 5, 6]] - >>> connected_components(test_graph_2) - [[0, 1, 3, 2], [4], [5]] - """ - - graph_size = len(graph) - visited = graph_size * [False] - components_list = [] - - for i in range(graph_size): - if not visited[i]: - i_connected = dfs(graph, i, visited) - components_list.append(i_connected) - - return components_list - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/deep_clone_graph.py b/graphs/deep_clone_graph.py deleted file mode 100644 index 18ea99c6a52d..000000000000 --- a/graphs/deep_clone_graph.py +++ /dev/null @@ -1,78 +0,0 @@ -""" -LeetCode 133. Clone Graph -https://leetcode.com/problems/clone-graph/ - -Given a reference of a node in a connected undirected graph. - -Return a deep copy (clone) of the graph. - -Each node in the graph contains a value (int) and a list (List[Node]) of its -neighbors. -""" - -from dataclasses import dataclass - - -@dataclass -class Node: - value: int = 0 - neighbors: list["Node"] | None = None - - def __post_init__(self) -> None: - """ - >>> Node(3).neighbors - [] - """ - self.neighbors = self.neighbors or [] - - def __hash__(self) -> int: - """ - >>> hash(Node(3)) != 0 - True - """ - return id(self) - - -def clone_graph(node: Node | None) -> Node | None: - """ - This function returns a clone of a connected undirected graph. - >>> clone_graph(Node(1)) - Node(value=1, neighbors=[]) - >>> clone_graph(Node(1, [Node(2)])) - Node(value=1, neighbors=[Node(value=2, neighbors=[])]) - >>> clone_graph(None) is None - True - """ - if not node: - return None - - originals_to_clones = {} # map nodes to clones - - stack = [node] - - while stack: - original = stack.pop() - - if original in originals_to_clones: - continue - - originals_to_clones[original] = Node(original.value) - - stack.extend(original.neighbors or []) - - for original, clone in originals_to_clones.items(): - for neighbor in original.neighbors or []: - cloned_neighbor = originals_to_clones[neighbor] - - if not clone.neighbors: - clone.neighbors = [] - - clone.neighbors.append(cloned_neighbor) - - return originals_to_clones[node] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/depth_first_search.py b/graphs/depth_first_search.py deleted file mode 100644 index a666e74ce607..000000000000 --- a/graphs/depth_first_search.py +++ /dev/null @@ -1,48 +0,0 @@ -"""Non recursive implementation of a DFS algorithm.""" - -from __future__ import annotations - - -def depth_first_search(graph: dict, start: str) -> set[str]: - """Depth First Search on Graph - :param graph: directed graph in dictionary format - :param start: starting vertex as a string - :returns: the trace of the search - >>> input_G = { "A": ["B", "C", "D"], "B": ["A", "D", "E"], - ... "C": ["A", "F"], "D": ["B", "D"], "E": ["B", "F"], - ... "F": ["C", "E", "G"], "G": ["F"] } - >>> output_G = list({'A', 'B', 'C', 'D', 'E', 'F', 'G'}) - >>> all(x in output_G for x in list(depth_first_search(input_G, "A"))) - True - >>> all(x in output_G for x in list(depth_first_search(input_G, "G"))) - True - """ - explored, stack = set(start), [start] - - while stack: - v = stack.pop() - explored.add(v) - # Differences from BFS: - # 1) pop last element instead of first one - # 2) add adjacent elements to stack without exploring them - for adj in reversed(graph[v]): - if adj not in explored: - stack.append(adj) - return explored - - -G = { - "A": ["B", "C", "D"], - "B": ["A", "D", "E"], - "C": ["A", "F"], - "D": ["B", "D"], - "E": ["B", "F"], - "F": ["C", "E", "G"], - "G": ["F"], -} - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(depth_first_search(G, "A")) diff --git a/graphs/depth_first_search_2.py b/graphs/depth_first_search_2.py deleted file mode 100644 index 8fe48b7f2b42..000000000000 --- a/graphs/depth_first_search_2.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/python - -"""Author: OMKAR PATHAK""" - - -class Graph: - def __init__(self): - self.vertex = {} - - # for printing the Graph vertices - def print_graph(self) -> None: - """ - Print the graph vertices. - - Example: - >>> g = Graph() - >>> g.add_edge(0, 1) - >>> g.add_edge(0, 2) - >>> g.add_edge(1, 2) - >>> g.add_edge(2, 0) - >>> g.add_edge(2, 3) - >>> g.add_edge(3, 3) - >>> g.print_graph() - {0: [1, 2], 1: [2], 2: [0, 3], 3: [3]} - 0 -> 1 -> 2 - 1 -> 2 - 2 -> 0 -> 3 - 3 -> 3 - """ - print(self.vertex) - for i in self.vertex: - print(i, " -> ", " -> ".join([str(j) for j in self.vertex[i]])) - - # for adding the edge between two vertices - def add_edge(self, from_vertex: int, to_vertex: int) -> None: - """ - Add an edge between two vertices. - - :param from_vertex: The source vertex. - :param to_vertex: The destination vertex. - - Example: - >>> g = Graph() - >>> g.add_edge(0, 1) - >>> g.add_edge(0, 2) - >>> g.print_graph() - {0: [1, 2]} - 0 -> 1 -> 2 - """ - # check if vertex is already present, - if from_vertex in self.vertex: - self.vertex[from_vertex].append(to_vertex) - else: - # else make a new vertex - self.vertex[from_vertex] = [to_vertex] - - def dfs(self) -> None: - """ - Perform depth-first search (DFS) traversal on the graph - and print the visited vertices. - - Example: - >>> g = Graph() - >>> g.add_edge(0, 1) - >>> g.add_edge(0, 2) - >>> g.add_edge(1, 2) - >>> g.add_edge(2, 0) - >>> g.add_edge(2, 3) - >>> g.add_edge(3, 3) - >>> g.dfs() - 0 1 2 3 - """ - # visited array for storing already visited nodes - visited = [False] * len(self.vertex) - - # call the recursive helper function - for i in range(len(self.vertex)): - if not visited[i]: - self.dfs_recursive(i, visited) - - def dfs_recursive(self, start_vertex: int, visited: list) -> None: - """ - Perform a recursive depth-first search (DFS) traversal on the graph. - - :param start_vertex: The starting vertex for the traversal. - :param visited: A list to track visited vertices. - - Example: - >>> g = Graph() - >>> g.add_edge(0, 1) - >>> g.add_edge(0, 2) - >>> g.add_edge(1, 2) - >>> g.add_edge(2, 0) - >>> g.add_edge(2, 3) - >>> g.add_edge(3, 3) - >>> visited = [False] * len(g.vertex) - >>> g.dfs_recursive(0, visited) - 0 1 2 3 - """ - # mark start vertex as visited - visited[start_vertex] = True - - print(start_vertex, end="") - - # Recur for all the vertices that are adjacent to this node - for i in self.vertex: - if not visited[i]: - print(" ", end="") - self.dfs_recursive(i, visited) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - g = Graph() - g.add_edge(0, 1) - g.add_edge(0, 2) - g.add_edge(1, 2) - g.add_edge(2, 0) - g.add_edge(2, 3) - g.add_edge(3, 3) - - g.print_graph() - print("DFS:") - g.dfs() diff --git a/graphs/dijkstra.py b/graphs/dijkstra.py deleted file mode 100644 index 87e9d2233bb2..000000000000 --- a/graphs/dijkstra.py +++ /dev/null @@ -1,119 +0,0 @@ -""" -pseudo-code - -DIJKSTRA(graph G, start vertex s, destination vertex d): - -//all nodes initially unexplored - -1 - let H = min heap data structure, initialized with 0 and s [here 0 indicates - the distance from start vertex s] -2 - while H is non-empty: -3 - remove the first node and cost of H, call it U and cost -4 - if U has been previously explored: -5 - go to the while loop, line 2 //Once a node is explored there is no need - to make it again -6 - mark U as explored -7 - if U is d: -8 - return cost // total cost from start to destination vertex -9 - for each edge(U, V): c=cost of edge(U,V) // for V in graph[U] -10 - if V explored: -11 - go to next V in line 9 -12 - total_cost = cost + c -13 - add (total_cost,V) to H - -You can think at cost as a distance where Dijkstra finds the shortest distance -between vertices s and v in a graph G. The use of a min heap as H guarantees -that if a vertex has already been explored there will be no other path with -shortest distance, that happens because heapq.heappop will always return the -next vertex with the shortest distance, considering that the heap stores not -only the distance between previous vertex and current vertex but the entire -distance between each vertex that makes up the path from start vertex to target -vertex. -""" - -import heapq - - -def dijkstra(graph, start, end): - """Return the cost of the shortest path between vertices start and end. - - >>> dijkstra(G, "E", "C") - 6 - >>> dijkstra(G2, "E", "F") - 3 - >>> dijkstra(G3, "E", "F") - 3 - """ - - heap = [(0, start)] # cost from start node,end node - visited = set() - while heap: - (cost, u) = heapq.heappop(heap) - if u in visited: - continue - visited.add(u) - if u == end: - return cost - for v, c in graph[u]: - if v in visited: - continue - next_item = cost + c - heapq.heappush(heap, (next_item, v)) - return -1 - - -G = { - "A": [["B", 2], ["C", 5]], - "B": [["A", 2], ["D", 3], ["E", 1], ["F", 1]], - "C": [["A", 5], ["F", 3]], - "D": [["B", 3]], - "E": [["B", 4], ["F", 3]], - "F": [["C", 3], ["E", 3]], -} - -r""" -Layout of G2: - -E -- 1 --> B -- 1 --> C -- 1 --> D -- 1 --> F - \ /\ - \ || - ----------------- 3 -------------------- -""" -G2 = { - "B": [["C", 1]], - "C": [["D", 1]], - "D": [["F", 1]], - "E": [["B", 1], ["F", 3]], - "F": [], -} - -r""" -Layout of G3: - -E -- 1 --> B -- 1 --> C -- 1 --> D -- 1 --> F - \ /\ - \ || - -------- 2 ---------> G ------- 1 ------ -""" -G3 = { - "B": [["C", 1]], - "C": [["D", 1]], - "D": [["F", 1]], - "E": [["B", 1], ["G", 2]], - "F": [], - "G": [["F", 1]], -} - -short_distance = dijkstra(G, "E", "C") -print(short_distance) # E -- 3 --> F -- 3 --> C == 6 - -short_distance = dijkstra(G2, "E", "F") -print(short_distance) # E -- 3 --> F == 3 - -short_distance = dijkstra(G3, "E", "F") -print(short_distance) # E -- 2 --> G -- 1 --> F == 3 - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/dijkstra_2.py b/graphs/dijkstra_2.py deleted file mode 100644 index f548463ff7bd..000000000000 --- a/graphs/dijkstra_2.py +++ /dev/null @@ -1,58 +0,0 @@ -def print_dist(dist, v): - print("\nVertex Distance") - for i in range(v): - if dist[i] != float("inf"): - print(i, "\t", int(dist[i]), end="\t") - else: - print(i, "\t", "INF", end="\t") - print() - - -def min_dist(mdist, vset, v): - min_val = float("inf") - min_ind = -1 - for i in range(v): - if (not vset[i]) and mdist[i] < min_val: - min_ind = i - min_val = mdist[i] - return min_ind - - -def dijkstra(graph, v, src): - mdist = [float("inf") for _ in range(v)] - vset = [False for _ in range(v)] - mdist[src] = 0.0 - - for _ in range(v - 1): - u = min_dist(mdist, vset, v) - vset[u] = True - - for i in range(v): - if ( - (not vset[i]) - and graph[u][i] != float("inf") - and mdist[u] + graph[u][i] < mdist[i] - ): - mdist[i] = mdist[u] + graph[u][i] - - print_dist(mdist, i) - - -if __name__ == "__main__": - V = int(input("Enter number of vertices: ").strip()) - E = int(input("Enter number of edges: ").strip()) - - graph = [[float("inf") for i in range(V)] for j in range(V)] - - for i in range(V): - graph[i][i] = 0.0 - - for i in range(E): - print("\nEdge ", i + 1) - src = int(input("Enter source:").strip()) - dst = int(input("Enter destination:").strip()) - weight = float(input("Enter weight:").strip()) - graph[src][dst] = weight - - gsrc = int(input("\nEnter shortest path source:").strip()) - dijkstra(graph, V, gsrc) diff --git a/graphs/dijkstra_algorithm.py b/graphs/dijkstra_algorithm.py deleted file mode 100644 index 51412b790bac..000000000000 --- a/graphs/dijkstra_algorithm.py +++ /dev/null @@ -1,496 +0,0 @@ -# Title: Dijkstra's Algorithm for finding single source shortest path from scratch -# Author: Shubham Malik -# References: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm - -import math -import sys - -# For storing the vertex set to retrieve node with the lowest distance - - -class PriorityQueue: - # Based on Min Heap - def __init__(self): - """ - Priority queue class constructor method. - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.cur_size - 0 - >>> priority_queue_test.array - [] - >>> priority_queue_test.pos - {} - """ - self.cur_size = 0 - self.array = [] - self.pos = {} # To store the pos of node in array - - def is_empty(self): - """ - Conditional boolean method to determine if the priority queue is empty or not. - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.is_empty() - True - >>> priority_queue_test.insert((2, 'A')) - >>> priority_queue_test.is_empty() - False - """ - return self.cur_size == 0 - - def min_heapify(self, idx): - """ - Sorts the queue array so that the minimum element is root. - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.cur_size = 3 - >>> priority_queue_test.pos = {'A': 0, 'B': 1, 'C': 2} - - >>> priority_queue_test.array = [(5, 'A'), (10, 'B'), (15, 'C')] - >>> priority_queue_test.min_heapify(0) - Traceback (most recent call last): - ... - TypeError: 'list' object is not callable - >>> priority_queue_test.array - [(5, 'A'), (10, 'B'), (15, 'C')] - - >>> priority_queue_test.array = [(10, 'A'), (5, 'B'), (15, 'C')] - >>> priority_queue_test.min_heapify(0) - Traceback (most recent call last): - ... - TypeError: 'list' object is not callable - >>> priority_queue_test.array - [(10, 'A'), (5, 'B'), (15, 'C')] - - >>> priority_queue_test.array = [(10, 'A'), (15, 'B'), (5, 'C')] - >>> priority_queue_test.min_heapify(0) - Traceback (most recent call last): - ... - TypeError: 'list' object is not callable - >>> priority_queue_test.array - [(10, 'A'), (15, 'B'), (5, 'C')] - - >>> priority_queue_test.array = [(10, 'A'), (5, 'B')] - >>> priority_queue_test.cur_size = len(priority_queue_test.array) - >>> priority_queue_test.pos = {'A': 0, 'B': 1} - >>> priority_queue_test.min_heapify(0) - Traceback (most recent call last): - ... - TypeError: 'list' object is not callable - >>> priority_queue_test.array - [(10, 'A'), (5, 'B')] - """ - lc = self.left(idx) - rc = self.right(idx) - if lc < self.cur_size and self.array(lc)[0] < self.array[idx][0]: - smallest = lc - else: - smallest = idx - if rc < self.cur_size and self.array(rc)[0] < self.array[smallest][0]: - smallest = rc - if smallest != idx: - self.swap(idx, smallest) - self.min_heapify(smallest) - - def insert(self, tup): - """ - Inserts a node into the Priority Queue. - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.insert((10, 'A')) - >>> priority_queue_test.array - [(10, 'A')] - >>> priority_queue_test.insert((15, 'B')) - >>> priority_queue_test.array - [(10, 'A'), (15, 'B')] - >>> priority_queue_test.insert((5, 'C')) - >>> priority_queue_test.array - [(5, 'C'), (10, 'A'), (15, 'B')] - """ - self.pos[tup[1]] = self.cur_size - self.cur_size += 1 - self.array.append((sys.maxsize, tup[1])) - self.decrease_key((sys.maxsize, tup[1]), tup[0]) - - def extract_min(self): - """ - Removes and returns the min element at top of priority queue. - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.array = [(10, 'A'), (15, 'B')] - >>> priority_queue_test.cur_size = len(priority_queue_test.array) - >>> priority_queue_test.pos = {'A': 0, 'B': 1} - >>> priority_queue_test.insert((5, 'C')) - >>> priority_queue_test.extract_min() - 'C' - >>> priority_queue_test.array[0] - (15, 'B') - """ - min_node = self.array[0][1] - self.array[0] = self.array[self.cur_size - 1] - self.cur_size -= 1 - self.min_heapify(1) - del self.pos[min_node] - return min_node - - def left(self, i): - """ - Returns the index of left child - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.left(0) - 1 - >>> priority_queue_test.left(1) - 3 - """ - return 2 * i + 1 - - def right(self, i): - """ - Returns the index of right child - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.right(0) - 2 - >>> priority_queue_test.right(1) - 4 - """ - return 2 * i + 2 - - def par(self, i): - """ - Returns the index of parent - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.par(1) - 0 - >>> priority_queue_test.par(2) - 1 - >>> priority_queue_test.par(4) - 2 - """ - return math.floor(i / 2) - - def swap(self, i, j): - """ - Swaps array elements at indices i and j, update the pos{} - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.array = [(10, 'A'), (15, 'B')] - >>> priority_queue_test.cur_size = len(priority_queue_test.array) - >>> priority_queue_test.pos = {'A': 0, 'B': 1} - >>> priority_queue_test.swap(0, 1) - >>> priority_queue_test.array - [(15, 'B'), (10, 'A')] - >>> priority_queue_test.pos - {'A': 1, 'B': 0} - """ - self.pos[self.array[i][1]] = j - self.pos[self.array[j][1]] = i - temp = self.array[i] - self.array[i] = self.array[j] - self.array[j] = temp - - def decrease_key(self, tup, new_d): - """ - Decrease the key value for a given tuple, assuming the new_d is at most old_d. - - Examples: - >>> priority_queue_test = PriorityQueue() - >>> priority_queue_test.array = [(10, 'A'), (15, 'B')] - >>> priority_queue_test.cur_size = len(priority_queue_test.array) - >>> priority_queue_test.pos = {'A': 0, 'B': 1} - >>> priority_queue_test.decrease_key((10, 'A'), 5) - >>> priority_queue_test.array - [(5, 'A'), (15, 'B')] - """ - idx = self.pos[tup[1]] - # assuming the new_d is at most old_d - self.array[idx] = (new_d, tup[1]) - while idx > 0 and self.array[self.par(idx)][0] > self.array[idx][0]: - self.swap(idx, self.par(idx)) - idx = self.par(idx) - - -class Graph: - def __init__(self, num): - """ - Graph class constructor - - Examples: - >>> graph_test = Graph(1) - >>> graph_test.num_nodes - 1 - >>> graph_test.dist - [0] - >>> graph_test.par - [-1] - >>> graph_test.adjList - {} - """ - self.adjList = {} # To store graph: u -> (v,w) - self.num_nodes = num # Number of nodes in graph - # To store the distance from source vertex - self.dist = [0] * self.num_nodes - self.par = [-1] * self.num_nodes # To store the path - - def add_edge(self, u, v, w): - """ - Add edge going from node u to v and v to u with weight w: u (w)-> v, v (w) -> u - - Examples: - >>> graph_test = Graph(1) - >>> graph_test.add_edge(1, 2, 1) - >>> graph_test.add_edge(2, 3, 2) - >>> graph_test.adjList - {1: [(2, 1)], 2: [(1, 1), (3, 2)], 3: [(2, 2)]} - """ - # Check if u already in graph - if u in self.adjList: - self.adjList[u].append((v, w)) - else: - self.adjList[u] = [(v, w)] - - # Assuming undirected graph - if v in self.adjList: - self.adjList[v].append((u, w)) - else: - self.adjList[v] = [(u, w)] - - def show_graph(self): - """ - Show the graph: u -> v(w) - - Examples: - >>> graph_test = Graph(1) - >>> graph_test.add_edge(1, 2, 1) - >>> graph_test.show_graph() - 1 -> 2(1) - 2 -> 1(1) - >>> graph_test.add_edge(2, 3, 2) - >>> graph_test.show_graph() - 1 -> 2(1) - 2 -> 1(1) -> 3(2) - 3 -> 2(2) - """ - for u in self.adjList: - print(u, "->", " -> ".join(str(f"{v}({w})") for v, w in self.adjList[u])) - - def dijkstra(self, src): - """ - Dijkstra algorithm - - Examples: - >>> graph_test = Graph(3) - >>> graph_test.add_edge(0, 1, 2) - >>> graph_test.add_edge(1, 2, 2) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 2 - Node 2 has distance: 4 - >>> graph_test.dist - [0, 2, 4] - - >>> graph_test = Graph(2) - >>> graph_test.add_edge(0, 1, 2) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 2 - >>> graph_test.dist - [0, 2] - - >>> graph_test = Graph(3) - >>> graph_test.add_edge(0, 1, 2) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 2 - Node 2 has distance: 0 - >>> graph_test.dist - [0, 2, 0] - - >>> graph_test = Graph(3) - >>> graph_test.add_edge(0, 1, 2) - >>> graph_test.add_edge(1, 2, 2) - >>> graph_test.add_edge(0, 2, 1) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 2 - Node 2 has distance: 1 - >>> graph_test.dist - [0, 2, 1] - - >>> graph_test = Graph(4) - >>> graph_test.add_edge(0, 1, 4) - >>> graph_test.add_edge(1, 2, 2) - >>> graph_test.add_edge(2, 3, 1) - >>> graph_test.add_edge(0, 2, 3) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 4 - Node 2 has distance: 3 - Node 3 has distance: 4 - >>> graph_test.dist - [0, 4, 3, 4] - - >>> graph_test = Graph(4) - >>> graph_test.add_edge(0, 1, 4) - >>> graph_test.add_edge(1, 2, 2) - >>> graph_test.add_edge(2, 3, 1) - >>> graph_test.add_edge(0, 2, 7) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 4 - Node 2 has distance: 6 - Node 3 has distance: 7 - >>> graph_test.dist - [0, 4, 6, 7] - """ - # Flush old junk values in par[] - self.par = [-1] * self.num_nodes - # src is the source node - self.dist[src] = 0 - q = PriorityQueue() - q.insert((0, src)) # (dist from src, node) - for u in self.adjList: - if u != src: - self.dist[u] = sys.maxsize # Infinity - self.par[u] = -1 - - while not q.is_empty(): - u = q.extract_min() # Returns node with the min dist from source - # Update the distance of all the neighbours of u and - # if their prev dist was INFINITY then push them in Q - for v, w in self.adjList[u]: - new_dist = self.dist[u] + w - if self.dist[v] > new_dist: - if self.dist[v] == sys.maxsize: - q.insert((new_dist, v)) - else: - q.decrease_key((self.dist[v], v), new_dist) - self.dist[v] = new_dist - self.par[v] = u - - # Show the shortest distances from src - self.show_distances(src) - - def show_distances(self, src): - """ - Show the distances from src to all other nodes in a graph - - Examples: - >>> graph_test = Graph(1) - >>> graph_test.show_distances(0) - Distance from node: 0 - Node 0 has distance: 0 - """ - print(f"Distance from node: {src}") - for u in range(self.num_nodes): - print(f"Node {u} has distance: {self.dist[u]}") - - def show_path(self, src, dest): - """ - Shows the shortest path from src to dest. - WARNING: Use it *after* calling dijkstra. - - Examples: - >>> graph_test = Graph(4) - >>> graph_test.add_edge(0, 1, 1) - >>> graph_test.add_edge(1, 2, 2) - >>> graph_test.add_edge(2, 3, 3) - >>> graph_test.dijkstra(0) - Distance from node: 0 - Node 0 has distance: 0 - Node 1 has distance: 1 - Node 2 has distance: 3 - Node 3 has distance: 6 - >>> graph_test.show_path(0, 3) # doctest: +NORMALIZE_WHITESPACE - ----Path to reach 3 from 0---- - 0 -> 1 -> 2 -> 3 - Total cost of path: 6 - """ - path = [] - cost = 0 - temp = dest - # Backtracking from dest to src - while self.par[temp] != -1: - path.append(temp) - if temp != src: - for v, w in self.adjList[temp]: - if v == self.par[temp]: - cost += w - break - temp = self.par[temp] - path.append(src) - path.reverse() - - print(f"----Path to reach {dest} from {src}----") - for u in path: - print(f"{u}", end=" ") - if u != dest: - print("-> ", end="") - - print("\nTotal cost of path: ", cost) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - graph = Graph(9) - graph.add_edge(0, 1, 4) - graph.add_edge(0, 7, 8) - graph.add_edge(1, 2, 8) - graph.add_edge(1, 7, 11) - graph.add_edge(2, 3, 7) - graph.add_edge(2, 8, 2) - graph.add_edge(2, 5, 4) - graph.add_edge(3, 4, 9) - graph.add_edge(3, 5, 14) - graph.add_edge(4, 5, 10) - graph.add_edge(5, 6, 2) - graph.add_edge(6, 7, 1) - graph.add_edge(6, 8, 6) - graph.add_edge(7, 8, 7) - graph.show_graph() - graph.dijkstra(0) - graph.show_path(0, 4) - -# OUTPUT -# 0 -> 1(4) -> 7(8) -# 1 -> 0(4) -> 2(8) -> 7(11) -# 7 -> 0(8) -> 1(11) -> 6(1) -> 8(7) -# 2 -> 1(8) -> 3(7) -> 8(2) -> 5(4) -# 3 -> 2(7) -> 4(9) -> 5(14) -# 8 -> 2(2) -> 6(6) -> 7(7) -# 5 -> 2(4) -> 3(14) -> 4(10) -> 6(2) -# 4 -> 3(9) -> 5(10) -# 6 -> 5(2) -> 7(1) -> 8(6) -# Distance from node: 0 -# Node 0 has distance: 0 -# Node 1 has distance: 4 -# Node 2 has distance: 12 -# Node 3 has distance: 19 -# Node 4 has distance: 21 -# Node 5 has distance: 11 -# Node 6 has distance: 9 -# Node 7 has distance: 8 -# Node 8 has distance: 14 -# ----Path to reach 4 from 0---- -# 0 -> 7 -> 6 -> 5 -> 4 -# Total cost of path: 21 diff --git a/graphs/dijkstra_alternate.py b/graphs/dijkstra_alternate.py deleted file mode 100644 index 7beef6b04da1..000000000000 --- a/graphs/dijkstra_alternate.py +++ /dev/null @@ -1,98 +0,0 @@ -from __future__ import annotations - - -class Graph: - def __init__(self, vertices: int) -> None: - """ - >>> graph = Graph(2) - >>> graph.vertices - 2 - >>> len(graph.graph) - 2 - >>> len(graph.graph[0]) - 2 - """ - self.vertices = vertices - self.graph = [[0] * vertices for _ in range(vertices)] - - def print_solution(self, distances_from_source: list[int]) -> None: - """ - >>> Graph(0).print_solution([]) # doctest: +NORMALIZE_WHITESPACE - Vertex Distance from Source - """ - print("Vertex \t Distance from Source") - for vertex in range(self.vertices): - print(vertex, "\t\t", distances_from_source[vertex]) - - def minimum_distance( - self, distances_from_source: list[int], visited: list[bool] - ) -> int: - """ - A utility function to find the vertex with minimum distance value, from the set - of vertices not yet included in shortest path tree. - - >>> Graph(3).minimum_distance([1, 2, 3], [False, False, True]) - 0 - """ - - # Initialize minimum distance for next node - minimum = 1e7 - min_index = 0 - - # Search not nearest vertex not in the shortest path tree - for vertex in range(self.vertices): - if distances_from_source[vertex] < minimum and visited[vertex] is False: - minimum = distances_from_source[vertex] - min_index = vertex - return min_index - - def dijkstra(self, source: int) -> None: - """ - Function that implements Dijkstra's single source shortest path algorithm for a - graph represented using adjacency matrix representation. - - >>> Graph(4).dijkstra(1) # doctest: +NORMALIZE_WHITESPACE - Vertex Distance from Source - 0 10000000 - 1 0 - 2 10000000 - 3 10000000 - """ - - distances = [int(1e7)] * self.vertices # distances from the source - distances[source] = 0 - visited = [False] * self.vertices - - for _ in range(self.vertices): - u = self.minimum_distance(distances, visited) - visited[u] = True - - # Update dist value of the adjacent vertices - # of the picked vertex only if the current - # distance is greater than new distance and - # the vertex in not in the shortest path tree - for v in range(self.vertices): - if ( - self.graph[u][v] > 0 - and visited[v] is False - and distances[v] > distances[u] + self.graph[u][v] - ): - distances[v] = distances[u] + self.graph[u][v] - - self.print_solution(distances) - - -if __name__ == "__main__": - graph = Graph(9) - graph.graph = [ - [0, 4, 0, 0, 0, 0, 0, 8, 0], - [4, 0, 8, 0, 0, 0, 0, 11, 0], - [0, 8, 0, 7, 0, 4, 0, 0, 2], - [0, 0, 7, 0, 9, 14, 0, 0, 0], - [0, 0, 0, 9, 0, 10, 0, 0, 0], - [0, 0, 4, 14, 10, 0, 2, 0, 0], - [0, 0, 0, 0, 0, 2, 0, 1, 6], - [8, 11, 0, 0, 0, 0, 1, 0, 7], - [0, 0, 2, 0, 0, 0, 6, 7, 0], - ] - graph.dijkstra(0) diff --git a/graphs/dijkstra_binary_grid.py b/graphs/dijkstra_binary_grid.py deleted file mode 100644 index 06293a87da2d..000000000000 --- a/graphs/dijkstra_binary_grid.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -This script implements the Dijkstra algorithm on a binary grid. -The grid consists of 0s and 1s, where 1 represents -a walkable node and 0 represents an obstacle. -The algorithm finds the shortest path from a start node to a destination node. -Diagonal movement can be allowed or disallowed. -""" - -from heapq import heappop, heappush - -import numpy as np - - -def dijkstra( - grid: np.ndarray, - source: tuple[int, int], - destination: tuple[int, int], - allow_diagonal: bool, -) -> tuple[float | int, list[tuple[int, int]]]: - """ - Implements Dijkstra's algorithm on a binary grid. - - Args: - grid (np.ndarray): A 2D numpy array representing the grid. - 1 represents a walkable node and 0 represents an obstacle. - source (Tuple[int, int]): A tuple representing the start node. - destination (Tuple[int, int]): A tuple representing the - destination node. - allow_diagonal (bool): A boolean determining whether - diagonal movements are allowed. - - Returns: - Tuple[Union[float, int], List[Tuple[int, int]]]: - The shortest distance from the start node to the destination node - and the shortest path as a list of nodes. - - >>> dijkstra(np.array([[1, 1, 1], [0, 1, 0], [0, 1, 1]]), (0, 0), (2, 2), False) - (4.0, [(0, 0), (0, 1), (1, 1), (2, 1), (2, 2)]) - - >>> dijkstra(np.array([[1, 1, 1], [0, 1, 0], [0, 1, 1]]), (0, 0), (2, 2), True) - (2.0, [(0, 0), (1, 1), (2, 2)]) - - >>> dijkstra(np.array([[1, 1, 1], [0, 0, 1], [0, 1, 1]]), (0, 0), (2, 2), False) - (4.0, [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2)]) - """ - rows, cols = grid.shape - dx = [-1, 1, 0, 0] - dy = [0, 0, -1, 1] - if allow_diagonal: - dx += [-1, -1, 1, 1] - dy += [-1, 1, -1, 1] - - queue, visited = [(0, source)], set() - matrix = np.full((rows, cols), np.inf) - matrix[source] = 0 - predecessors = np.empty((rows, cols), dtype=object) - predecessors[source] = None - - while queue: - (dist, (x, y)) = heappop(queue) - if (x, y) in visited: - continue - visited.add((x, y)) - - if (x, y) == destination: - path = [] - while (x, y) != source: - path.append((x, y)) - x, y = predecessors[x, y] - path.append(source) # add the source manually - path.reverse() - return float(matrix[destination]), path - - for i in range(len(dx)): - nx, ny = x + dx[i], y + dy[i] - if 0 <= nx < rows and 0 <= ny < cols: - next_node = grid[nx][ny] - if next_node == 1 and matrix[nx, ny] > dist + 1: - heappush(queue, (dist + 1, (nx, ny))) - matrix[nx, ny] = dist + 1 - predecessors[nx, ny] = (x, y) - - return np.inf, [] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/dinic.py b/graphs/dinic.py deleted file mode 100644 index 7919e6bc060a..000000000000 --- a/graphs/dinic.py +++ /dev/null @@ -1,94 +0,0 @@ -INF = float("inf") - - -class Dinic: - def __init__(self, n): - self.lvl = [0] * n - self.ptr = [0] * n - self.q = [0] * n - self.adj = [[] for _ in range(n)] - - """ - Here we will add our edges containing with the following parameters: - vertex closest to source, vertex closest to sink and flow capacity - through that edge ... - """ - - def add_edge(self, a, b, c, rcap=0): - self.adj[a].append([b, len(self.adj[b]), c, 0]) - self.adj[b].append([a, len(self.adj[a]) - 1, rcap, 0]) - - # This is a sample depth first search to be used at max_flow - def depth_first_search(self, vertex, sink, flow): - if vertex == sink or not flow: - return flow - - for i in range(self.ptr[vertex], len(self.adj[vertex])): - e = self.adj[vertex][i] - if self.lvl[e[0]] == self.lvl[vertex] + 1: - p = self.depth_first_search(e[0], sink, min(flow, e[2] - e[3])) - if p: - self.adj[vertex][i][3] += p - self.adj[e[0]][e[1]][3] -= p - return p - self.ptr[vertex] = self.ptr[vertex] + 1 - return 0 - - # Here we calculate the flow that reaches the sink - def max_flow(self, source, sink): - flow, self.q[0] = 0, source - for l in range(31): # l = 30 maybe faster for random data # noqa: E741 - while True: - self.lvl, self.ptr = [0] * len(self.q), [0] * len(self.q) - qi, qe, self.lvl[source] = 0, 1, 1 - while qi < qe and not self.lvl[sink]: - v = self.q[qi] - qi += 1 - for e in self.adj[v]: - if not self.lvl[e[0]] and (e[2] - e[3]) >> (30 - l): - self.q[qe] = e[0] - qe += 1 - self.lvl[e[0]] = self.lvl[v] + 1 - - p = self.depth_first_search(source, sink, INF) - while p: - flow += p - p = self.depth_first_search(source, sink, INF) - - if not self.lvl[sink]: - break - - return flow - - -# Example to use - -""" -Will be a bipartite graph, than it has the vertices near the source(4) -and the vertices near the sink(4) -""" -# Here we make a graphs with 10 vertex(source and sink includes) -graph = Dinic(10) -source = 0 -sink = 9 -""" -Now we add the vertices next to the font in the font with 1 capacity in this edge -(source -> source vertices) -""" -for vertex in range(1, 5): - graph.add_edge(source, vertex, 1) -""" -We will do the same thing for the vertices near the sink, but from vertex to sink -(sink vertices -> sink) -""" -for vertex in range(5, 9): - graph.add_edge(vertex, sink, 1) -""" -Finally we add the verices near the sink to the vertices near the source. -(source vertices -> sink vertices) -""" -for vertex in range(1, 5): - graph.add_edge(vertex, vertex + 4, 1) - -# Now we can know that is the maximum flow(source -> sink) -print(graph.max_flow(source, sink)) diff --git a/graphs/directed_and_undirected_weighted_graph.py b/graphs/directed_and_undirected_weighted_graph.py deleted file mode 100644 index 8ca645fdace8..000000000000 --- a/graphs/directed_and_undirected_weighted_graph.py +++ /dev/null @@ -1,489 +0,0 @@ -from collections import deque -from math import floor -from random import random -from time import time - -# the default weight is 1 if not assigned but all the implementation is weighted - - -class DirectedGraph: - def __init__(self): - self.graph = {} - - # adding vertices and edges - # adding the weight is optional - # handles repetition - def add_pair(self, u, v, w=1): - if self.graph.get(u): - if self.graph[u].count([w, v]) == 0: - self.graph[u].append([w, v]) - else: - self.graph[u] = [[w, v]] - if not self.graph.get(v): - self.graph[v] = [] - - def all_nodes(self): - return list(self.graph) - - # handles if the input does not exist - def remove_pair(self, u, v): - if self.graph.get(u): - for _ in self.graph[u]: - if _[1] == v: - self.graph[u].remove(_) - - # if no destination is meant the default value is -1 - def dfs(self, s=-2, d=-1): - if s == d: - return [] - stack = [] - visited = [] - if s == -2: - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - ss = s - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if visited.count(node[1]) < 1: - if node[1] == d: - visited.append(d) - return visited - else: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - stack.pop() - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return visited - - # c is the count of nodes you want and if you leave it or pass -1 to the function - # the count will be random from 10 to 10000 - def fill_graph_randomly(self, c=-1): - if c == -1: - c = floor(random() * 10000) + 10 - for i in range(c): - # every vertex has max 100 edges - for _ in range(floor(random() * 102) + 1): - n = floor(random() * c) + 1 - if n != i: - self.add_pair(i, n, 1) - - def bfs(self, s=-2): - d = deque() - visited = [] - if s == -2: - s = next(iter(self.graph)) - d.append(s) - visited.append(s) - while d: - s = d.popleft() - if len(self.graph[s]) != 0: - for node in self.graph[s]: - if visited.count(node[1]) < 1: - d.append(node[1]) - visited.append(node[1]) - return visited - - def in_degree(self, u): - count = 0 - for x in self.graph: - for y in self.graph[x]: - if y[1] == u: - count += 1 - return count - - def out_degree(self, u): - return len(self.graph[u]) - - def topological_sort(self, s=-2): - stack = [] - visited = [] - if s == -2: - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - ss = s - sorted_nodes = [] - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if visited.count(node[1]) < 1: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - sorted_nodes.append(stack.pop()) - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return sorted_nodes - - def cycle_nodes(self): - stack = [] - visited = [] - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - parent = -2 - indirect_parents = [] - ss = s - on_the_way_back = False - anticipating_nodes = set() - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if ( - visited.count(node[1]) > 0 - and node[1] != parent - and indirect_parents.count(node[1]) > 0 - and not on_the_way_back - ): - len_stack = len(stack) - 1 - while len_stack >= 0: - if stack[len_stack] == node[1]: - anticipating_nodes.add(node[1]) - break - else: - anticipating_nodes.add(stack[len_stack]) - len_stack -= 1 - if visited.count(node[1]) < 1: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - stack.pop() - on_the_way_back = True - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - on_the_way_back = False - indirect_parents.append(parent) - parent = s - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return list(anticipating_nodes) - - def has_cycle(self): - stack = [] - visited = [] - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - parent = -2 - indirect_parents = [] - ss = s - on_the_way_back = False - anticipating_nodes = set() - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if ( - visited.count(node[1]) > 0 - and node[1] != parent - and indirect_parents.count(node[1]) > 0 - and not on_the_way_back - ): - len_stack_minus_one = len(stack) - 1 - while len_stack_minus_one >= 0: - if stack[len_stack_minus_one] == node[1]: - anticipating_nodes.add(node[1]) - break - else: - return True - if visited.count(node[1]) < 1: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - stack.pop() - on_the_way_back = True - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - on_the_way_back = False - indirect_parents.append(parent) - parent = s - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return False - - def dfs_time(self, s=-2, e=-1): - begin = time() - self.dfs(s, e) - end = time() - return end - begin - - def bfs_time(self, s=-2): - begin = time() - self.bfs(s) - end = time() - return end - begin - - -class Graph: - def __init__(self): - self.graph = {} - - # adding vertices and edges - # adding the weight is optional - # handles repetition - def add_pair(self, u, v, w=1): - # check if the u exists - if self.graph.get(u): - # if there already is a edge - if self.graph[u].count([w, v]) == 0: - self.graph[u].append([w, v]) - else: - # if u does not exist - self.graph[u] = [[w, v]] - # add the other way - if self.graph.get(v): - # if there already is a edge - if self.graph[v].count([w, u]) == 0: - self.graph[v].append([w, u]) - else: - # if u does not exist - self.graph[v] = [[w, u]] - - # handles if the input does not exist - def remove_pair(self, u, v): - if self.graph.get(u): - for _ in self.graph[u]: - if _[1] == v: - self.graph[u].remove(_) - # the other way round - if self.graph.get(v): - for _ in self.graph[v]: - if _[1] == u: - self.graph[v].remove(_) - - # if no destination is meant the default value is -1 - def dfs(self, s=-2, d=-1): - if s == d: - return [] - stack = [] - visited = [] - if s == -2: - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - ss = s - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if visited.count(node[1]) < 1: - if node[1] == d: - visited.append(d) - return visited - else: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - stack.pop() - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return visited - - # c is the count of nodes you want and if you leave it or pass -1 to the function - # the count will be random from 10 to 10000 - def fill_graph_randomly(self, c=-1): - if c == -1: - c = floor(random() * 10000) + 10 - for i in range(c): - # every vertex has max 100 edges - for _ in range(floor(random() * 102) + 1): - n = floor(random() * c) + 1 - if n != i: - self.add_pair(i, n, 1) - - def bfs(self, s=-2): - d = deque() - visited = [] - if s == -2: - s = next(iter(self.graph)) - d.append(s) - visited.append(s) - while d: - s = d.popleft() - if len(self.graph[s]) != 0: - for node in self.graph[s]: - if visited.count(node[1]) < 1: - d.append(node[1]) - visited.append(node[1]) - return visited - - def degree(self, u): - return len(self.graph[u]) - - def cycle_nodes(self): - stack = [] - visited = [] - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - parent = -2 - indirect_parents = [] - ss = s - on_the_way_back = False - anticipating_nodes = set() - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if ( - visited.count(node[1]) > 0 - and node[1] != parent - and indirect_parents.count(node[1]) > 0 - and not on_the_way_back - ): - len_stack = len(stack) - 1 - while len_stack >= 0: - if stack[len_stack] == node[1]: - anticipating_nodes.add(node[1]) - break - else: - anticipating_nodes.add(stack[len_stack]) - len_stack -= 1 - if visited.count(node[1]) < 1: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - stack.pop() - on_the_way_back = True - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - on_the_way_back = False - indirect_parents.append(parent) - parent = s - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return list(anticipating_nodes) - - def has_cycle(self): - stack = [] - visited = [] - s = next(iter(self.graph)) - stack.append(s) - visited.append(s) - parent = -2 - indirect_parents = [] - ss = s - on_the_way_back = False - anticipating_nodes = set() - - while True: - # check if there is any non isolated nodes - if len(self.graph[s]) != 0: - ss = s - for node in self.graph[s]: - if ( - visited.count(node[1]) > 0 - and node[1] != parent - and indirect_parents.count(node[1]) > 0 - and not on_the_way_back - ): - len_stack_minus_one = len(stack) - 1 - while len_stack_minus_one >= 0: - if stack[len_stack_minus_one] == node[1]: - anticipating_nodes.add(node[1]) - break - else: - return True - if visited.count(node[1]) < 1: - stack.append(node[1]) - visited.append(node[1]) - ss = node[1] - break - - # check if all the children are visited - if s == ss: - stack.pop() - on_the_way_back = True - if len(stack) != 0: - s = stack[len(stack) - 1] - else: - on_the_way_back = False - indirect_parents.append(parent) - parent = s - s = ss - - # check if se have reached the starting point - if len(stack) == 0: - return False - - def all_nodes(self): - return list(self.graph) - - def dfs_time(self, s=-2, e=-1): - begin = time() - self.dfs(s, e) - end = time() - return end - begin - - def bfs_time(self, s=-2): - begin = time() - self.bfs(s) - end = time() - return end - begin diff --git a/graphs/edmonds_karp_multiple_source_and_sink.py b/graphs/edmonds_karp_multiple_source_and_sink.py deleted file mode 100644 index 5c774f4b812b..000000000000 --- a/graphs/edmonds_karp_multiple_source_and_sink.py +++ /dev/null @@ -1,193 +0,0 @@ -class FlowNetwork: - def __init__(self, graph, sources, sinks): - self.source_index = None - self.sink_index = None - self.graph = graph - - self._normalize_graph(sources, sinks) - self.vertices_count = len(graph) - self.maximum_flow_algorithm = None - - # make only one source and one sink - def _normalize_graph(self, sources, sinks): - if sources is int: - sources = [sources] - if sinks is int: - sinks = [sinks] - - if len(sources) == 0 or len(sinks) == 0: - return - - self.source_index = sources[0] - self.sink_index = sinks[0] - - # make fake vertex if there are more - # than one source or sink - if len(sources) > 1 or len(sinks) > 1: - max_input_flow = 0 - for i in sources: - max_input_flow += sum(self.graph[i]) - - size = len(self.graph) + 1 - for room in self.graph: - room.insert(0, 0) - self.graph.insert(0, [0] * size) - for i in sources: - self.graph[0][i + 1] = max_input_flow - self.source_index = 0 - - size = len(self.graph) + 1 - for room in self.graph: - room.append(0) - self.graph.append([0] * size) - for i in sinks: - self.graph[i + 1][size - 1] = max_input_flow - self.sink_index = size - 1 - - def find_maximum_flow(self): - if self.maximum_flow_algorithm is None: - raise Exception("You need to set maximum flow algorithm before.") - if self.source_index is None or self.sink_index is None: - return 0 - - self.maximum_flow_algorithm.execute() - return self.maximum_flow_algorithm.getMaximumFlow() - - def set_maximum_flow_algorithm(self, algorithm): - self.maximum_flow_algorithm = algorithm(self) - - -class FlowNetworkAlgorithmExecutor: - def __init__(self, flow_network): - self.flow_network = flow_network - self.verticies_count = flow_network.verticesCount - self.source_index = flow_network.sourceIndex - self.sink_index = flow_network.sinkIndex - # it's just a reference, so you shouldn't change - # it in your algorithms, use deep copy before doing that - self.graph = flow_network.graph - self.executed = False - - def execute(self): - if not self.executed: - self._algorithm() - self.executed = True - - # You should override it - def _algorithm(self): - pass - - -class MaximumFlowAlgorithmExecutor(FlowNetworkAlgorithmExecutor): - def __init__(self, flow_network): - super().__init__(flow_network) - # use this to save your result - self.maximum_flow = -1 - - def get_maximum_flow(self): - if not self.executed: - raise Exception("You should execute algorithm before using its result!") - - return self.maximum_flow - - -class PushRelabelExecutor(MaximumFlowAlgorithmExecutor): - def __init__(self, flow_network): - super().__init__(flow_network) - - self.preflow = [[0] * self.verticies_count for i in range(self.verticies_count)] - - self.heights = [0] * self.verticies_count - self.excesses = [0] * self.verticies_count - - def _algorithm(self): - self.heights[self.source_index] = self.verticies_count - - # push some substance to graph - for nextvertex_index, bandwidth in enumerate(self.graph[self.source_index]): - self.preflow[self.source_index][nextvertex_index] += bandwidth - self.preflow[nextvertex_index][self.source_index] -= bandwidth - self.excesses[nextvertex_index] += bandwidth - - # Relabel-to-front selection rule - vertices_list = [ - i - for i in range(self.verticies_count) - if i not in {self.source_index, self.sink_index} - ] - - # move through list - i = 0 - while i < len(vertices_list): - vertex_index = vertices_list[i] - previous_height = self.heights[vertex_index] - self.process_vertex(vertex_index) - if self.heights[vertex_index] > previous_height: - # if it was relabeled, swap elements - # and start from 0 index - vertices_list.insert(0, vertices_list.pop(i)) - i = 0 - else: - i += 1 - - self.maximum_flow = sum(self.preflow[self.source_index]) - - def process_vertex(self, vertex_index): - while self.excesses[vertex_index] > 0: - for neighbour_index in range(self.verticies_count): - # if it's neighbour and current vertex is higher - if ( - self.graph[vertex_index][neighbour_index] - - self.preflow[vertex_index][neighbour_index] - > 0 - and self.heights[vertex_index] > self.heights[neighbour_index] - ): - self.push(vertex_index, neighbour_index) - - self.relabel(vertex_index) - - def push(self, from_index, to_index): - preflow_delta = min( - self.excesses[from_index], - self.graph[from_index][to_index] - self.preflow[from_index][to_index], - ) - self.preflow[from_index][to_index] += preflow_delta - self.preflow[to_index][from_index] -= preflow_delta - self.excesses[from_index] -= preflow_delta - self.excesses[to_index] += preflow_delta - - def relabel(self, vertex_index): - min_height = None - for to_index in range(self.verticies_count): - if ( - self.graph[vertex_index][to_index] - - self.preflow[vertex_index][to_index] - > 0 - ) and (min_height is None or self.heights[to_index] < min_height): - min_height = self.heights[to_index] - - if min_height is not None: - self.heights[vertex_index] = min_height + 1 - - -if __name__ == "__main__": - entrances = [0] - exits = [3] - # graph = [ - # [0, 0, 4, 6, 0, 0], - # [0, 0, 5, 2, 0, 0], - # [0, 0, 0, 0, 4, 4], - # [0, 0, 0, 0, 6, 6], - # [0, 0, 0, 0, 0, 0], - # [0, 0, 0, 0, 0, 0], - # ] - graph = [[0, 7, 0, 0], [0, 0, 6, 0], [0, 0, 0, 8], [9, 0, 0, 0]] - - # prepare our network - flow_network = FlowNetwork(graph, entrances, exits) - # set algorithm - flow_network.set_maximum_flow_algorithm(PushRelabelExecutor) - # and calculate - maximum_flow = flow_network.find_maximum_flow() - - print(f"maximum flow is {maximum_flow}") diff --git a/graphs/eulerian_path_and_circuit_for_undirected_graph.py b/graphs/eulerian_path_and_circuit_for_undirected_graph.py deleted file mode 100644 index 5b146eaa845b..000000000000 --- a/graphs/eulerian_path_and_circuit_for_undirected_graph.py +++ /dev/null @@ -1,71 +0,0 @@ -# Eulerian Path is a path in graph that visits every edge exactly once. -# Eulerian Circuit is an Eulerian Path which starts and ends on the same -# vertex. -# time complexity is O(V+E) -# space complexity is O(VE) - - -# using dfs for finding eulerian path traversal -def dfs(u, graph, visited_edge, path=None): - path = (path or []) + [u] - for v in graph[u]: - if visited_edge[u][v] is False: - visited_edge[u][v], visited_edge[v][u] = True, True - path = dfs(v, graph, visited_edge, path) - return path - - -# for checking in graph has euler path or circuit -def check_circuit_or_path(graph, max_node): - odd_degree_nodes = 0 - odd_node = -1 - for i in range(max_node): - if i not in graph: - continue - if len(graph[i]) % 2 == 1: - odd_degree_nodes += 1 - odd_node = i - if odd_degree_nodes == 0: - return 1, odd_node - if odd_degree_nodes == 2: - return 2, odd_node - return 3, odd_node - - -def check_euler(graph, max_node): - visited_edge = [[False for _ in range(max_node + 1)] for _ in range(max_node + 1)] - check, odd_node = check_circuit_or_path(graph, max_node) - if check == 3: - print("graph is not Eulerian") - print("no path") - return - start_node = 1 - if check == 2: - start_node = odd_node - print("graph has a Euler path") - if check == 1: - print("graph has a Euler cycle") - path = dfs(start_node, graph, visited_edge) - print(path) - - -def main(): - g1 = {1: [2, 3, 4], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [4]} - g2 = {1: [2, 3, 4, 5], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [1, 4]} - g3 = {1: [2, 3, 4], 2: [1, 3, 4], 3: [1, 2], 4: [1, 2, 5], 5: [4]} - g4 = {1: [2, 3], 2: [1, 3], 3: [1, 2]} - g5 = { - 1: [], - 2: [], - # all degree is zero - } - max_node = 10 - check_euler(g1, max_node) - check_euler(g2, max_node) - check_euler(g3, max_node) - check_euler(g4, max_node) - check_euler(g5, max_node) - - -if __name__ == "__main__": - main() diff --git a/graphs/even_tree.py b/graphs/even_tree.py deleted file mode 100644 index 7d47899527a7..000000000000 --- a/graphs/even_tree.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -You are given a tree(a simple connected graph with no cycles). The tree has N -nodes numbered from 1 to N and is rooted at node 1. - -Find the maximum number of edges you can remove from the tree to get a forest -such that each connected component of the forest contains an even number of -nodes. - -Constraints -2 <= 2 <= 100 - -Note: The tree input will be such that it can always be decomposed into -components containing an even number of nodes. -""" - -# pylint: disable=invalid-name -from collections import defaultdict - - -def dfs(start: int) -> int: - """DFS traversal""" - # pylint: disable=redefined-outer-name - ret = 1 - visited[start] = True - for v in tree[start]: - if v not in visited: - ret += dfs(v) - if ret % 2 == 0: - cuts.append(start) - return ret - - -def even_tree(): - """ - 2 1 - 3 1 - 4 3 - 5 2 - 6 1 - 7 2 - 8 6 - 9 8 - 10 8 - On removing edges (1,3) and (1,6), we can get the desired result 2. - """ - dfs(1) - - -if __name__ == "__main__": - n, m = 10, 9 - tree = defaultdict(list) - visited: dict[int, bool] = {} - cuts: list[int] = [] - count = 0 - edges = [(2, 1), (3, 1), (4, 3), (5, 2), (6, 1), (7, 2), (8, 6), (9, 8), (10, 8)] - for u, v in edges: - tree[u].append(v) - tree[v].append(u) - even_tree() - print(len(cuts) - 1) diff --git a/graphs/finding_bridges.py b/graphs/finding_bridges.py deleted file mode 100644 index c17606745ad8..000000000000 --- a/graphs/finding_bridges.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -An edge is a bridge if, after removing it count of connected components in graph will -be increased by one. Bridges represent vulnerabilities in a connected network and are -useful for designing reliable networks. For example, in a wired computer network, an -articulation point indicates the critical computers and a bridge indicates the critical -wires or connections. - -For more details, refer this article: -https://www.geeksforgeeks.org/bridge-in-a-graph/ -""" - - -def __get_demo_graph(index): - return [ - { - 0: [1, 2], - 1: [0, 2], - 2: [0, 1, 3, 5], - 3: [2, 4], - 4: [3], - 5: [2, 6, 8], - 6: [5, 7], - 7: [6, 8], - 8: [5, 7], - }, - { - 0: [6], - 1: [9], - 2: [4, 5], - 3: [4], - 4: [2, 3], - 5: [2], - 6: [0, 7], - 7: [6], - 8: [], - 9: [1], - }, - { - 0: [4], - 1: [6], - 2: [], - 3: [5, 6, 7], - 4: [0, 6], - 5: [3, 8, 9], - 6: [1, 3, 4, 7], - 7: [3, 6, 8, 9], - 8: [5, 7], - 9: [5, 7], - }, - { - 0: [1, 3], - 1: [0, 2, 4], - 2: [1, 3, 4], - 3: [0, 2, 4], - 4: [1, 2, 3], - }, - ][index] - - -def compute_bridges(graph: dict[int, list[int]]) -> list[tuple[int, int]]: - """ - Return the list of undirected graph bridges [(a1, b1), ..., (ak, bk)]; ai <= bi - >>> compute_bridges(__get_demo_graph(0)) - [(3, 4), (2, 3), (2, 5)] - >>> compute_bridges(__get_demo_graph(1)) - [(6, 7), (0, 6), (1, 9), (3, 4), (2, 4), (2, 5)] - >>> compute_bridges(__get_demo_graph(2)) - [(1, 6), (4, 6), (0, 4)] - >>> compute_bridges(__get_demo_graph(3)) - [] - >>> compute_bridges({}) - [] - """ - - id_ = 0 - n = len(graph) # No of vertices in graph - low = [0] * n - visited = [False] * n - - def dfs(at, parent, bridges, id_): - visited[at] = True - low[at] = id_ - id_ += 1 - for to in graph[at]: - if to == parent: - pass - elif not visited[to]: - dfs(to, at, bridges, id_) - low[at] = min(low[at], low[to]) - if id_ <= low[to]: - bridges.append((at, to) if at < to else (to, at)) - else: - # This edge is a back edge and cannot be a bridge - low[at] = min(low[at], low[to]) - - bridges: list[tuple[int, int]] = [] - for i in range(n): - if not visited[i]: - dfs(i, -1, bridges, id_) - return bridges - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/frequent_pattern_graph_miner.py b/graphs/frequent_pattern_graph_miner.py deleted file mode 100644 index f8da73f3438e..000000000000 --- a/graphs/frequent_pattern_graph_miner.py +++ /dev/null @@ -1,233 +0,0 @@ -""" -FP-GraphMiner - A Fast Frequent Pattern Mining Algorithm for Network Graphs - -A novel Frequent Pattern Graph Mining algorithm, FP-GraphMiner, that compactly -represents a set of network graphs as a Frequent Pattern Graph (or FP-Graph). -This graph can be used to efficiently mine frequent subgraphs including maximal -frequent subgraphs and maximum common subgraphs. - -URL: https://www.researchgate.net/publication/235255851 -""" - -# fmt: off -edge_array = [ - ['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'be-e6', 'bh-e12', 'cd-e2', 'ce-e4', - 'de-e1', 'df-e8', 'dg-e5', 'dh-e10', 'ef-e3', 'eg-e2', 'fg-e6', 'gh-e6', 'hi-e3'], - ['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'be-e6', 'cd-e2', 'de-e1', 'df-e8', - 'ef-e3', 'eg-e2', 'fg-e6'], - ['ab-e1', 'ac-e3', 'bc-e4', 'bd-e2', 'de-e1', 'df-e8', 'dg-e5', 'ef-e3', 'eg-e2', - 'eh-e12', 'fg-e6', 'fh-e10', 'gh-e6'], - ['ab-e1', 'ac-e3', 'bc-e4', 'bd-e2', 'bh-e12', 'cd-e2', 'df-e8', 'dh-e10'], - ['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'cd-e2', 'ce-e4', 'de-e1', 'df-e8', - 'dg-e5', 'ef-e3', 'eg-e2', 'fg-e6'] -] -# fmt: on - - -def get_distinct_edge(edge_array): - """ - Return Distinct edges from edge array of multiple graphs - >>> sorted(get_distinct_edge(edge_array)) - ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] - """ - distinct_edge = set() - for row in edge_array: - for item in row: - distinct_edge.add(item[0]) - return list(distinct_edge) - - -def get_bitcode(edge_array, distinct_edge): - """ - Return bitcode of distinct_edge - """ - bitcode = ["0"] * len(edge_array) - for i, row in enumerate(edge_array): - for item in row: - if distinct_edge in item[0]: - bitcode[i] = "1" - break - return "".join(bitcode) - - -def get_frequency_table(edge_array): - """ - Returns Frequency Table - """ - distinct_edge = get_distinct_edge(edge_array) - frequency_table = {} - - for item in distinct_edge: - bit = get_bitcode(edge_array, item) - # print('bit',bit) - # bt=''.join(bit) - s = bit.count("1") - frequency_table[item] = [s, bit] - # Store [Distinct edge, WT(Bitcode), Bitcode] in descending order - sorted_frequency_table = [ - [k, v[0], v[1]] - for k, v in sorted(frequency_table.items(), key=lambda v: v[1][0], reverse=True) - ] - return sorted_frequency_table - - -def get_nodes(frequency_table): - """ - Returns nodes - format nodes={bitcode:edges that represent the bitcode} - >>> get_nodes([['ab', 5, '11111'], ['ac', 5, '11111'], ['df', 5, '11111'], - ... ['bd', 5, '11111'], ['bc', 5, '11111']]) - {'11111': ['ab', 'ac', 'df', 'bd', 'bc']} - """ - nodes = {} - for _, item in enumerate(frequency_table): - nodes.setdefault(item[2], []).append(item[0]) - return nodes - - -def get_cluster(nodes): - """ - Returns cluster - format cluster:{WT(bitcode):nodes with same WT} - """ - cluster = {} - for key, value in nodes.items(): - cluster.setdefault(key.count("1"), {})[key] = value - return cluster - - -def get_support(cluster): - """ - Returns support - >>> get_support({5: {'11111': ['ab', 'ac', 'df', 'bd', 'bc']}, - ... 4: {'11101': ['ef', 'eg', 'de', 'fg'], '11011': ['cd']}, - ... 3: {'11001': ['ad'], '10101': ['dg']}, - ... 2: {'10010': ['dh', 'bh'], '11000': ['be'], '10100': ['gh'], - ... '10001': ['ce']}, - ... 1: {'00100': ['fh', 'eh'], '10000': ['hi']}}) - [100.0, 80.0, 60.0, 40.0, 20.0] - """ - return [i * 100 / len(cluster) for i in cluster] - - -def print_all() -> None: - print("\nNodes\n") - for key, value in nodes.items(): - print(key, value) - print("\nSupport\n") - print(support) - print("\n Cluster \n") - for key, value in sorted(cluster.items(), reverse=True): - print(key, value) - print("\n Graph\n") - for key, value in graph.items(): - print(key, value) - print("\n Edge List of Frequent subgraphs \n") - for edge_list in freq_subgraph_edge_list: - print(edge_list) - - -def create_edge(nodes, graph, cluster, c1): - """ - create edge between the nodes - """ - for i in cluster[c1]: - count = 0 - c2 = c1 + 1 - while c2 < max(cluster.keys()): - for j in cluster[c2]: - """ - creates edge only if the condition satisfies - """ - if int(i, 2) & int(j, 2) == int(i, 2): - if tuple(nodes[i]) in graph: - graph[tuple(nodes[i])].append(nodes[j]) - else: - graph[tuple(nodes[i])] = [nodes[j]] - count += 1 - if count == 0: - c2 = c2 + 1 - else: - break - - -def construct_graph(cluster, nodes): - x = cluster[max(cluster.keys())] - cluster[max(cluster.keys()) + 1] = "Header" - graph = {} - for i in x: - if (["Header"],) in graph: - graph[(["Header"],)].append(x[i]) - else: - graph[(["Header"],)] = [x[i]] - for i in x: - graph[(x[i],)] = [["Header"]] - i = 1 - while i < max(cluster) - 1: - create_edge(nodes, graph, cluster, i) - i = i + 1 - return graph - - -def my_dfs(graph, start, end, path=None): - """ - find different DFS walk from given node to Header node - """ - path = (path or []) + [start] - if start == end: - paths.append(path) - for node in graph[start]: - if tuple(node) not in path: - my_dfs(graph, tuple(node), end, path) - - -def find_freq_subgraph_given_support(s, cluster, graph): - """ - find edges of multiple frequent subgraphs - """ - k = int(s / 100 * (len(cluster) - 1)) - for i in cluster[k]: - my_dfs(graph, tuple(cluster[k][i]), (["Header"],)) - - -def freq_subgraphs_edge_list(paths): - """ - returns Edge list for frequent subgraphs - """ - freq_sub_el = [] - for edges in paths: - el = [] - for j in range(len(edges) - 1): - temp = list(edges[j]) - for e in temp: - edge = (e[0], e[1]) - el.append(edge) - freq_sub_el.append(el) - return freq_sub_el - - -def preprocess(edge_array): - """ - Preprocess the edge array - >>> preprocess([['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'be-e6', 'bh-e12', - ... 'cd-e2', 'ce-e4', 'de-e1', 'df-e8', 'dg-e5', 'dh-e10', 'ef-e3', - ... 'eg-e2', 'fg-e6', 'gh-e6', 'hi-e3']]) - - """ - for i in range(len(edge_array)): - for j in range(len(edge_array[i])): - t = edge_array[i][j].split("-") - edge_array[i][j] = t - - -if __name__ == "__main__": - preprocess(edge_array) - frequency_table = get_frequency_table(edge_array) - nodes = get_nodes(frequency_table) - cluster = get_cluster(nodes) - support = get_support(cluster) - graph = construct_graph(cluster, nodes) - find_freq_subgraph_given_support(60, cluster, graph) - paths: list = [] - freq_subgraph_edge_list = freq_subgraphs_edge_list(paths) - print_all() diff --git a/graphs/g_topological_sort.py b/graphs/g_topological_sort.py deleted file mode 100644 index 77543d51f61d..000000000000 --- a/graphs/g_topological_sort.py +++ /dev/null @@ -1,47 +0,0 @@ -# Author: Phyllipe Bezerra (https://github.com/pmba) - -clothes = { - 0: "underwear", - 1: "pants", - 2: "belt", - 3: "suit", - 4: "shoe", - 5: "socks", - 6: "shirt", - 7: "tie", - 8: "watch", -} - -graph = [[1, 4], [2, 4], [3], [], [], [4], [2, 7], [3], []] - -visited = [0 for x in range(len(graph))] -stack = [] - - -def print_stack(stack, clothes): - order = 1 - while stack: - current_clothing = stack.pop() - print(order, clothes[current_clothing]) - order += 1 - - -def depth_first_search(u, visited, graph): - visited[u] = 1 - for v in graph[u]: - if not visited[v]: - depth_first_search(v, visited, graph) - - stack.append(u) - - -def topological_sort(graph, visited): - for v in range(len(graph)): - if not visited[v]: - depth_first_search(v, visited, graph) - - -if __name__ == "__main__": - topological_sort(graph, visited) - print(stack) - print_stack(stack, clothes) diff --git a/graphs/gale_shapley_bigraph.py b/graphs/gale_shapley_bigraph.py deleted file mode 100644 index f4b3153817c4..000000000000 --- a/graphs/gale_shapley_bigraph.py +++ /dev/null @@ -1,49 +0,0 @@ -from __future__ import annotations - - -def stable_matching( - donor_pref: list[list[int]], recipient_pref: list[list[int]] -) -> list[int]: - """ - Finds the stable match in any bipartite graph, i.e a pairing where no 2 objects - prefer each other over their partner. The function accepts the preferences of - oegan donors and recipients (where both are assigned numbers from 0 to n-1) and - returns a list where the index position corresponds to the donor and value at the - index is the organ recipient. - - To better understand the algorithm, see also: - https://github.com/akashvshroff/Gale_Shapley_Stable_Matching (README). - https://www.youtube.com/watch?v=Qcv1IqHWAzg&t=13s (Numberphile YouTube). - - >>> donor_pref = [[0, 1, 3, 2], [0, 2, 3, 1], [1, 0, 2, 3], [0, 3, 1, 2]] - >>> recipient_pref = [[3, 1, 2, 0], [3, 1, 0, 2], [0, 3, 1, 2], [1, 0, 3, 2]] - >>> stable_matching(donor_pref, recipient_pref) - [1, 2, 3, 0] - """ - assert len(donor_pref) == len(recipient_pref) - - n = len(donor_pref) - unmatched_donors = list(range(n)) - donor_record = [-1] * n # who the donor has donated to - rec_record = [-1] * n # who the recipient has received from - num_donations = [0] * n - - while unmatched_donors: - donor = unmatched_donors[0] - donor_preference = donor_pref[donor] - recipient = donor_preference[num_donations[donor]] - num_donations[donor] += 1 - rec_preference = recipient_pref[recipient] - prev_donor = rec_record[recipient] - - if prev_donor != -1: - if rec_preference.index(prev_donor) > rec_preference.index(donor): - rec_record[recipient] = donor - donor_record[donor] = recipient - unmatched_donors.append(prev_donor) - unmatched_donors.remove(donor) - else: - rec_record[recipient] = donor - donor_record[donor] = recipient - unmatched_donors.remove(donor) - return donor_record diff --git a/graphs/graph_adjacency_list.py b/graphs/graph_adjacency_list.py deleted file mode 100644 index abc75311cd60..000000000000 --- a/graphs/graph_adjacency_list.py +++ /dev/null @@ -1,588 +0,0 @@ -#!/usr/bin/env python3 -""" -Author: Vikram Nithyanandam - -Description: -The following implementation is a robust unweighted Graph data structure -implemented using an adjacency list. This vertices and edges of this graph can be -effectively initialized and modified while storing your chosen generic -value in each vertex. - -Adjacency List: https://en.wikipedia.org/wiki/Adjacency_list - -Potential Future Ideas: -- Add a flag to set edge weights on and set edge weights -- Make edge weights and vertex values customizable to store whatever the client wants -- Support multigraph functionality if the client wants it -""" - -from __future__ import annotations - -import random -import unittest -from pprint import pformat -from typing import Generic, TypeVar - -import pytest - -T = TypeVar("T") - - -class GraphAdjacencyList(Generic[T]): - def __init__( - self, vertices: list[T], edges: list[list[T]], directed: bool = True - ) -> None: - """ - Parameters: - - vertices: (list[T]) The list of vertex names the client wants to - pass in. Default is empty. - - edges: (list[list[T]]) The list of edges the client wants to - pass in. Each edge is a 2-element list. Default is empty. - - directed: (bool) Indicates if graph is directed or undirected. - Default is True. - """ - self.adj_list: dict[T, list[T]] = {} # dictionary of lists of T - self.directed = directed - - # Falsey checks - edges = edges or [] - vertices = vertices or [] - - for vertex in vertices: - self.add_vertex(vertex) - - for edge in edges: - if len(edge) != 2: - msg = f"Invalid input: {edge} is the wrong length." - raise ValueError(msg) - self.add_edge(edge[0], edge[1]) - - def add_vertex(self, vertex: T) -> None: - """ - Adds a vertex to the graph. If the given vertex already exists, - a ValueError will be thrown. - """ - if self.contains_vertex(vertex): - msg = f"Incorrect input: {vertex} is already in the graph." - raise ValueError(msg) - self.adj_list[vertex] = [] - - def add_edge(self, source_vertex: T, destination_vertex: T) -> None: - """ - Creates an edge from source vertex to destination vertex. If any - given vertex doesn't exist or the edge already exists, a ValueError - will be thrown. - """ - if not ( - self.contains_vertex(source_vertex) - and self.contains_vertex(destination_vertex) - ): - msg = ( - f"Incorrect input: Either {source_vertex} or " - f"{destination_vertex} does not exist" - ) - raise ValueError(msg) - if self.contains_edge(source_vertex, destination_vertex): - msg = ( - "Incorrect input: The edge already exists between " - f"{source_vertex} and {destination_vertex}" - ) - raise ValueError(msg) - - # add the destination vertex to the list associated with the source vertex - # and vice versa if not directed - self.adj_list[source_vertex].append(destination_vertex) - if not self.directed: - self.adj_list[destination_vertex].append(source_vertex) - - def remove_vertex(self, vertex: T) -> None: - """ - Removes the given vertex from the graph and deletes all incoming and - outgoing edges from the given vertex as well. If the given vertex - does not exist, a ValueError will be thrown. - """ - if not self.contains_vertex(vertex): - msg = f"Incorrect input: {vertex} does not exist in this graph." - raise ValueError(msg) - - if not self.directed: - # If not directed, find all neighboring vertices and delete all references - # of edges connecting to the given vertex - for neighbor in self.adj_list[vertex]: - self.adj_list[neighbor].remove(vertex) - else: - # If directed, search all neighbors of all vertices and delete all - # references of edges connecting to the given vertex - for edge_list in self.adj_list.values(): - if vertex in edge_list: - edge_list.remove(vertex) - - # Finally, delete the given vertex and all of its outgoing edge references - self.adj_list.pop(vertex) - - def remove_edge(self, source_vertex: T, destination_vertex: T) -> None: - """ - Removes the edge between the two vertices. If any given vertex - doesn't exist or the edge does not exist, a ValueError will be thrown. - """ - if not ( - self.contains_vertex(source_vertex) - and self.contains_vertex(destination_vertex) - ): - msg = ( - f"Incorrect input: Either {source_vertex} or " - f"{destination_vertex} does not exist" - ) - raise ValueError(msg) - if not self.contains_edge(source_vertex, destination_vertex): - msg = ( - "Incorrect input: The edge does NOT exist between " - f"{source_vertex} and {destination_vertex}" - ) - raise ValueError(msg) - - # remove the destination vertex from the list associated with the source - # vertex and vice versa if not directed - self.adj_list[source_vertex].remove(destination_vertex) - if not self.directed: - self.adj_list[destination_vertex].remove(source_vertex) - - def contains_vertex(self, vertex: T) -> bool: - """ - Returns True if the graph contains the vertex, False otherwise. - """ - return vertex in self.adj_list - - def contains_edge(self, source_vertex: T, destination_vertex: T) -> bool: - """ - Returns True if the graph contains the edge from the source_vertex to the - destination_vertex, False otherwise. If any given vertex doesn't exist, a - ValueError will be thrown. - """ - if not ( - self.contains_vertex(source_vertex) - and self.contains_vertex(destination_vertex) - ): - msg = ( - f"Incorrect input: Either {source_vertex} " - f"or {destination_vertex} does not exist." - ) - raise ValueError(msg) - - return destination_vertex in self.adj_list[source_vertex] - - def clear_graph(self) -> None: - """ - Clears all vertices and edges. - """ - self.adj_list = {} - - def __repr__(self) -> str: - return pformat(self.adj_list) - - -class TestGraphAdjacencyList(unittest.TestCase): - def __assert_graph_edge_exists_check( - self, - undirected_graph: GraphAdjacencyList, - directed_graph: GraphAdjacencyList, - edge: list[int], - ) -> None: - assert undirected_graph.contains_edge(edge[0], edge[1]) - assert undirected_graph.contains_edge(edge[1], edge[0]) - assert directed_graph.contains_edge(edge[0], edge[1]) - - def __assert_graph_edge_does_not_exist_check( - self, - undirected_graph: GraphAdjacencyList, - directed_graph: GraphAdjacencyList, - edge: list[int], - ) -> None: - assert not undirected_graph.contains_edge(edge[0], edge[1]) - assert not undirected_graph.contains_edge(edge[1], edge[0]) - assert not directed_graph.contains_edge(edge[0], edge[1]) - - def __assert_graph_vertex_exists_check( - self, - undirected_graph: GraphAdjacencyList, - directed_graph: GraphAdjacencyList, - vertex: int, - ) -> None: - assert undirected_graph.contains_vertex(vertex) - assert directed_graph.contains_vertex(vertex) - - def __assert_graph_vertex_does_not_exist_check( - self, - undirected_graph: GraphAdjacencyList, - directed_graph: GraphAdjacencyList, - vertex: int, - ) -> None: - assert not undirected_graph.contains_vertex(vertex) - assert not directed_graph.contains_vertex(vertex) - - def __generate_random_edges( - self, vertices: list[int], edge_pick_count: int - ) -> list[list[int]]: - assert edge_pick_count <= len(vertices) - - random_source_vertices: list[int] = random.sample( - vertices[0 : int(len(vertices) / 2)], edge_pick_count - ) - random_destination_vertices: list[int] = random.sample( - vertices[int(len(vertices) / 2) :], edge_pick_count - ) - random_edges: list[list[int]] = [] - - for source in random_source_vertices: - for dest in random_destination_vertices: - random_edges.append([source, dest]) - - return random_edges - - def __generate_graphs( - self, vertex_count: int, min_val: int, max_val: int, edge_pick_count: int - ) -> tuple[GraphAdjacencyList, GraphAdjacencyList, list[int], list[list[int]]]: - if max_val - min_val + 1 < vertex_count: - raise ValueError( - "Will result in duplicate vertices. Either increase range " - "between min_val and max_val or decrease vertex count." - ) - - # generate graph input - random_vertices: list[int] = random.sample( - range(min_val, max_val + 1), vertex_count - ) - random_edges: list[list[int]] = self.__generate_random_edges( - random_vertices, edge_pick_count - ) - - # build graphs - undirected_graph = GraphAdjacencyList( - vertices=random_vertices, edges=random_edges, directed=False - ) - directed_graph = GraphAdjacencyList( - vertices=random_vertices, edges=random_edges, directed=True - ) - - return undirected_graph, directed_graph, random_vertices, random_edges - - def test_init_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - # test graph initialization with vertices and edges - for num in random_vertices: - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, num - ) - - for edge in random_edges: - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - assert not undirected_graph.directed - assert directed_graph.directed - - def test_contains_vertex(self) -> None: - random_vertices: list[int] = random.sample(range(101), 20) - - # Build graphs WITHOUT edges - undirected_graph = GraphAdjacencyList( - vertices=random_vertices, edges=[], directed=False - ) - directed_graph = GraphAdjacencyList( - vertices=random_vertices, edges=[], directed=True - ) - - # Test contains_vertex - for num in range(101): - assert (num in random_vertices) == undirected_graph.contains_vertex(num) - assert (num in random_vertices) == directed_graph.contains_vertex(num) - - def test_add_vertices(self) -> None: - random_vertices: list[int] = random.sample(range(101), 20) - - # build empty graphs - undirected_graph: GraphAdjacencyList = GraphAdjacencyList( - vertices=[], edges=[], directed=False - ) - directed_graph: GraphAdjacencyList = GraphAdjacencyList( - vertices=[], edges=[], directed=True - ) - - # run add_vertex - for num in random_vertices: - undirected_graph.add_vertex(num) - - for num in random_vertices: - directed_graph.add_vertex(num) - - # test add_vertex worked - for num in random_vertices: - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, num - ) - - def test_remove_vertices(self) -> None: - random_vertices: list[int] = random.sample(range(101), 20) - - # build graphs WITHOUT edges - undirected_graph = GraphAdjacencyList( - vertices=random_vertices, edges=[], directed=False - ) - directed_graph = GraphAdjacencyList( - vertices=random_vertices, edges=[], directed=True - ) - - # test remove_vertex worked - for num in random_vertices: - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, num - ) - - undirected_graph.remove_vertex(num) - directed_graph.remove_vertex(num) - - self.__assert_graph_vertex_does_not_exist_check( - undirected_graph, directed_graph, num - ) - - def test_add_and_remove_vertices_repeatedly(self) -> None: - random_vertices1: list[int] = random.sample(range(51), 20) - random_vertices2: list[int] = random.sample(range(51, 101), 20) - - # build graphs WITHOUT edges - undirected_graph = GraphAdjacencyList( - vertices=random_vertices1, edges=[], directed=False - ) - directed_graph = GraphAdjacencyList( - vertices=random_vertices1, edges=[], directed=True - ) - - # test adding and removing vertices - for i, _ in enumerate(random_vertices1): - undirected_graph.add_vertex(random_vertices2[i]) - directed_graph.add_vertex(random_vertices2[i]) - - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, random_vertices2[i] - ) - - undirected_graph.remove_vertex(random_vertices1[i]) - directed_graph.remove_vertex(random_vertices1[i]) - - self.__assert_graph_vertex_does_not_exist_check( - undirected_graph, directed_graph, random_vertices1[i] - ) - - # remove all vertices - for i, _ in enumerate(random_vertices1): - undirected_graph.remove_vertex(random_vertices2[i]) - directed_graph.remove_vertex(random_vertices2[i]) - - self.__assert_graph_vertex_does_not_exist_check( - undirected_graph, directed_graph, random_vertices2[i] - ) - - def test_contains_edge(self) -> None: - # generate graphs and graph input - vertex_count = 20 - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(vertex_count, 0, 100, 4) - - # generate all possible edges for testing - all_possible_edges: list[list[int]] = [] - for i in range(vertex_count - 1): - for j in range(i + 1, vertex_count): - all_possible_edges.append([random_vertices[i], random_vertices[j]]) - all_possible_edges.append([random_vertices[j], random_vertices[i]]) - - # test contains_edge function - for edge in all_possible_edges: - if edge in random_edges: - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - elif [edge[1], edge[0]] in random_edges: - # since this edge exists for undirected but the reverse - # may not exist for directed - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, [edge[1], edge[0]] - ) - else: - self.__assert_graph_edge_does_not_exist_check( - undirected_graph, directed_graph, edge - ) - - def test_add_edge(self) -> None: - # generate graph input - random_vertices: list[int] = random.sample(range(101), 15) - random_edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4) - - # build graphs WITHOUT edges - undirected_graph = GraphAdjacencyList( - vertices=random_vertices, edges=[], directed=False - ) - directed_graph = GraphAdjacencyList( - vertices=random_vertices, edges=[], directed=True - ) - - # run and test add_edge - for edge in random_edges: - undirected_graph.add_edge(edge[0], edge[1]) - directed_graph.add_edge(edge[0], edge[1]) - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - - def test_remove_edge(self) -> None: - # generate graph input and graphs - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - # run and test remove_edge - for edge in random_edges: - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - undirected_graph.remove_edge(edge[0], edge[1]) - directed_graph.remove_edge(edge[0], edge[1]) - self.__assert_graph_edge_does_not_exist_check( - undirected_graph, directed_graph, edge - ) - - def test_add_and_remove_edges_repeatedly(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - # make some more edge options! - more_random_edges: list[list[int]] = [] - - while len(more_random_edges) != len(random_edges): - edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4) - for edge in edges: - if len(more_random_edges) == len(random_edges): - break - elif edge not in more_random_edges and edge not in random_edges: - more_random_edges.append(edge) - - for i, _ in enumerate(random_edges): - undirected_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1]) - directed_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1]) - - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, more_random_edges[i] - ) - - undirected_graph.remove_edge(random_edges[i][0], random_edges[i][1]) - directed_graph.remove_edge(random_edges[i][0], random_edges[i][1]) - - self.__assert_graph_edge_does_not_exist_check( - undirected_graph, directed_graph, random_edges[i] - ) - - def test_add_vertex_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for vertex in random_vertices: - with pytest.raises(ValueError): - undirected_graph.add_vertex(vertex) - with pytest.raises(ValueError): - directed_graph.add_vertex(vertex) - - def test_remove_vertex_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for i in range(101): - if i not in random_vertices: - with pytest.raises(ValueError): - undirected_graph.remove_vertex(i) - with pytest.raises(ValueError): - directed_graph.remove_vertex(i) - - def test_add_edge_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for edge in random_edges: - with pytest.raises(ValueError): - undirected_graph.add_edge(edge[0], edge[1]) - with pytest.raises(ValueError): - directed_graph.add_edge(edge[0], edge[1]) - - def test_remove_edge_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - more_random_edges: list[list[int]] = [] - - while len(more_random_edges) != len(random_edges): - edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4) - for edge in edges: - if len(more_random_edges) == len(random_edges): - break - elif edge not in more_random_edges and edge not in random_edges: - more_random_edges.append(edge) - - for edge in more_random_edges: - with pytest.raises(ValueError): - undirected_graph.remove_edge(edge[0], edge[1]) - with pytest.raises(ValueError): - directed_graph.remove_edge(edge[0], edge[1]) - - def test_contains_edge_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for vertex in random_vertices: - with pytest.raises(ValueError): - undirected_graph.contains_edge(vertex, 102) - with pytest.raises(ValueError): - directed_graph.contains_edge(vertex, 102) - - with pytest.raises(ValueError): - undirected_graph.contains_edge(103, 102) - with pytest.raises(ValueError): - directed_graph.contains_edge(103, 102) - - -if __name__ == "__main__": - unittest.main() diff --git a/graphs/graph_adjacency_matrix.py b/graphs/graph_adjacency_matrix.py deleted file mode 100644 index 568c84166e4b..000000000000 --- a/graphs/graph_adjacency_matrix.py +++ /dev/null @@ -1,609 +0,0 @@ -#!/usr/bin/env python3 -""" -Author: Vikram Nithyanandam - -Description: -The following implementation is a robust unweighted Graph data structure -implemented using an adjacency matrix. This vertices and edges of this graph can be -effectively initialized and modified while storing your chosen generic -value in each vertex. - -Adjacency Matrix: https://mathworld.wolfram.com/AdjacencyMatrix.html - -Potential Future Ideas: -- Add a flag to set edge weights on and set edge weights -- Make edge weights and vertex values customizable to store whatever the client wants -- Support multigraph functionality if the client wants it -""" - -from __future__ import annotations - -import random -import unittest -from pprint import pformat -from typing import Generic, TypeVar - -import pytest - -T = TypeVar("T") - - -class GraphAdjacencyMatrix(Generic[T]): - def __init__( - self, vertices: list[T], edges: list[list[T]], directed: bool = True - ) -> None: - """ - Parameters: - - vertices: (list[T]) The list of vertex names the client wants to - pass in. Default is empty. - - edges: (list[list[T]]) The list of edges the client wants to - pass in. Each edge is a 2-element list. Default is empty. - - directed: (bool) Indicates if graph is directed or undirected. - Default is True. - """ - self.directed = directed - self.vertex_to_index: dict[T, int] = {} - self.adj_matrix: list[list[int]] = [] - - # Falsey checks - edges = edges or [] - vertices = vertices or [] - - for vertex in vertices: - self.add_vertex(vertex) - - for edge in edges: - if len(edge) != 2: - msg = f"Invalid input: {edge} must have length 2." - raise ValueError(msg) - self.add_edge(edge[0], edge[1]) - - def add_edge(self, source_vertex: T, destination_vertex: T) -> None: - """ - Creates an edge from source vertex to destination vertex. If any - given vertex doesn't exist or the edge already exists, a ValueError - will be thrown. - """ - if not ( - self.contains_vertex(source_vertex) - and self.contains_vertex(destination_vertex) - ): - msg = ( - f"Incorrect input: Either {source_vertex} or " - f"{destination_vertex} does not exist" - ) - raise ValueError(msg) - if self.contains_edge(source_vertex, destination_vertex): - msg = ( - "Incorrect input: The edge already exists between " - f"{source_vertex} and {destination_vertex}" - ) - raise ValueError(msg) - - # Get the indices of the corresponding vertices and set their edge value to 1. - u: int = self.vertex_to_index[source_vertex] - v: int = self.vertex_to_index[destination_vertex] - self.adj_matrix[u][v] = 1 - if not self.directed: - self.adj_matrix[v][u] = 1 - - def remove_edge(self, source_vertex: T, destination_vertex: T) -> None: - """ - Removes the edge between the two vertices. If any given vertex - doesn't exist or the edge does not exist, a ValueError will be thrown. - """ - if not ( - self.contains_vertex(source_vertex) - and self.contains_vertex(destination_vertex) - ): - msg = ( - f"Incorrect input: Either {source_vertex} or " - f"{destination_vertex} does not exist" - ) - raise ValueError(msg) - if not self.contains_edge(source_vertex, destination_vertex): - msg = ( - "Incorrect input: The edge does NOT exist between " - f"{source_vertex} and {destination_vertex}" - ) - raise ValueError(msg) - - # Get the indices of the corresponding vertices and set their edge value to 0. - u: int = self.vertex_to_index[source_vertex] - v: int = self.vertex_to_index[destination_vertex] - self.adj_matrix[u][v] = 0 - if not self.directed: - self.adj_matrix[v][u] = 0 - - def add_vertex(self, vertex: T) -> None: - """ - Adds a vertex to the graph. If the given vertex already exists, - a ValueError will be thrown. - """ - if self.contains_vertex(vertex): - msg = f"Incorrect input: {vertex} already exists in this graph." - raise ValueError(msg) - - # build column for vertex - for row in self.adj_matrix: - row.append(0) - - # build row for vertex and update other data structures - self.adj_matrix.append([0] * (len(self.adj_matrix) + 1)) - self.vertex_to_index[vertex] = len(self.adj_matrix) - 1 - - def remove_vertex(self, vertex: T) -> None: - """ - Removes the given vertex from the graph and deletes all incoming and - outgoing edges from the given vertex as well. If the given vertex - does not exist, a ValueError will be thrown. - """ - if not self.contains_vertex(vertex): - msg = f"Incorrect input: {vertex} does not exist in this graph." - raise ValueError(msg) - - # first slide up the rows by deleting the row corresponding to - # the vertex being deleted. - start_index = self.vertex_to_index[vertex] - self.adj_matrix.pop(start_index) - - # next, slide the columns to the left by deleting the values in - # the column corresponding to the vertex being deleted - for lst in self.adj_matrix: - lst.pop(start_index) - - # final clean up - self.vertex_to_index.pop(vertex) - - # decrement indices for vertices shifted by the deleted vertex in the adj matrix - for inner_vertex in self.vertex_to_index: - if self.vertex_to_index[inner_vertex] >= start_index: - self.vertex_to_index[inner_vertex] = ( - self.vertex_to_index[inner_vertex] - 1 - ) - - def contains_vertex(self, vertex: T) -> bool: - """ - Returns True if the graph contains the vertex, False otherwise. - """ - return vertex in self.vertex_to_index - - def contains_edge(self, source_vertex: T, destination_vertex: T) -> bool: - """ - Returns True if the graph contains the edge from the source_vertex to the - destination_vertex, False otherwise. If any given vertex doesn't exist, a - ValueError will be thrown. - """ - if not ( - self.contains_vertex(source_vertex) - and self.contains_vertex(destination_vertex) - ): - msg = ( - f"Incorrect input: Either {source_vertex} " - f"or {destination_vertex} does not exist." - ) - raise ValueError(msg) - - u = self.vertex_to_index[source_vertex] - v = self.vertex_to_index[destination_vertex] - return self.adj_matrix[u][v] == 1 - - def clear_graph(self) -> None: - """ - Clears all vertices and edges. - """ - self.vertex_to_index = {} - self.adj_matrix = [] - - def __repr__(self) -> str: - first = "Adj Matrix:\n" + pformat(self.adj_matrix) - second = "\nVertex to index mapping:\n" + pformat(self.vertex_to_index) - return first + second - - -class TestGraphMatrix(unittest.TestCase): - def __assert_graph_edge_exists_check( - self, - undirected_graph: GraphAdjacencyMatrix, - directed_graph: GraphAdjacencyMatrix, - edge: list[int], - ) -> None: - assert undirected_graph.contains_edge(edge[0], edge[1]) - assert undirected_graph.contains_edge(edge[1], edge[0]) - assert directed_graph.contains_edge(edge[0], edge[1]) - - def __assert_graph_edge_does_not_exist_check( - self, - undirected_graph: GraphAdjacencyMatrix, - directed_graph: GraphAdjacencyMatrix, - edge: list[int], - ) -> None: - assert not undirected_graph.contains_edge(edge[0], edge[1]) - assert not undirected_graph.contains_edge(edge[1], edge[0]) - assert not directed_graph.contains_edge(edge[0], edge[1]) - - def __assert_graph_vertex_exists_check( - self, - undirected_graph: GraphAdjacencyMatrix, - directed_graph: GraphAdjacencyMatrix, - vertex: int, - ) -> None: - assert undirected_graph.contains_vertex(vertex) - assert directed_graph.contains_vertex(vertex) - - def __assert_graph_vertex_does_not_exist_check( - self, - undirected_graph: GraphAdjacencyMatrix, - directed_graph: GraphAdjacencyMatrix, - vertex: int, - ) -> None: - assert not undirected_graph.contains_vertex(vertex) - assert not directed_graph.contains_vertex(vertex) - - def __generate_random_edges( - self, vertices: list[int], edge_pick_count: int - ) -> list[list[int]]: - assert edge_pick_count <= len(vertices) - - random_source_vertices: list[int] = random.sample( - vertices[0 : int(len(vertices) / 2)], edge_pick_count - ) - random_destination_vertices: list[int] = random.sample( - vertices[int(len(vertices) / 2) :], edge_pick_count - ) - random_edges: list[list[int]] = [] - - for source in random_source_vertices: - for dest in random_destination_vertices: - random_edges.append([source, dest]) - - return random_edges - - def __generate_graphs( - self, vertex_count: int, min_val: int, max_val: int, edge_pick_count: int - ) -> tuple[GraphAdjacencyMatrix, GraphAdjacencyMatrix, list[int], list[list[int]]]: - if max_val - min_val + 1 < vertex_count: - raise ValueError( - "Will result in duplicate vertices. Either increase " - "range between min_val and max_val or decrease vertex count" - ) - - # generate graph input - random_vertices: list[int] = random.sample( - range(min_val, max_val + 1), vertex_count - ) - random_edges: list[list[int]] = self.__generate_random_edges( - random_vertices, edge_pick_count - ) - - # build graphs - undirected_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=random_edges, directed=False - ) - directed_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=random_edges, directed=True - ) - - return undirected_graph, directed_graph, random_vertices, random_edges - - def test_init_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - # test graph initialization with vertices and edges - for num in random_vertices: - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, num - ) - - for edge in random_edges: - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - - assert not undirected_graph.directed - assert directed_graph.directed - - def test_contains_vertex(self) -> None: - random_vertices: list[int] = random.sample(range(101), 20) - - # Build graphs WITHOUT edges - undirected_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=[], directed=False - ) - directed_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=[], directed=True - ) - - # Test contains_vertex - for num in range(101): - assert (num in random_vertices) == undirected_graph.contains_vertex(num) - assert (num in random_vertices) == directed_graph.contains_vertex(num) - - def test_add_vertices(self) -> None: - random_vertices: list[int] = random.sample(range(101), 20) - - # build empty graphs - undirected_graph: GraphAdjacencyMatrix = GraphAdjacencyMatrix( - vertices=[], edges=[], directed=False - ) - directed_graph: GraphAdjacencyMatrix = GraphAdjacencyMatrix( - vertices=[], edges=[], directed=True - ) - - # run add_vertex - for num in random_vertices: - undirected_graph.add_vertex(num) - - for num in random_vertices: - directed_graph.add_vertex(num) - - # test add_vertex worked - for num in random_vertices: - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, num - ) - - def test_remove_vertices(self) -> None: - random_vertices: list[int] = random.sample(range(101), 20) - - # build graphs WITHOUT edges - undirected_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=[], directed=False - ) - directed_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=[], directed=True - ) - - # test remove_vertex worked - for num in random_vertices: - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, num - ) - - undirected_graph.remove_vertex(num) - directed_graph.remove_vertex(num) - - self.__assert_graph_vertex_does_not_exist_check( - undirected_graph, directed_graph, num - ) - - def test_add_and_remove_vertices_repeatedly(self) -> None: - random_vertices1: list[int] = random.sample(range(51), 20) - random_vertices2: list[int] = random.sample(range(51, 101), 20) - - # build graphs WITHOUT edges - undirected_graph = GraphAdjacencyMatrix( - vertices=random_vertices1, edges=[], directed=False - ) - directed_graph = GraphAdjacencyMatrix( - vertices=random_vertices1, edges=[], directed=True - ) - - # test adding and removing vertices - for i, _ in enumerate(random_vertices1): - undirected_graph.add_vertex(random_vertices2[i]) - directed_graph.add_vertex(random_vertices2[i]) - - self.__assert_graph_vertex_exists_check( - undirected_graph, directed_graph, random_vertices2[i] - ) - - undirected_graph.remove_vertex(random_vertices1[i]) - directed_graph.remove_vertex(random_vertices1[i]) - - self.__assert_graph_vertex_does_not_exist_check( - undirected_graph, directed_graph, random_vertices1[i] - ) - - # remove all vertices - for i, _ in enumerate(random_vertices1): - undirected_graph.remove_vertex(random_vertices2[i]) - directed_graph.remove_vertex(random_vertices2[i]) - - self.__assert_graph_vertex_does_not_exist_check( - undirected_graph, directed_graph, random_vertices2[i] - ) - - def test_contains_edge(self) -> None: - # generate graphs and graph input - vertex_count = 20 - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(vertex_count, 0, 100, 4) - - # generate all possible edges for testing - all_possible_edges: list[list[int]] = [] - for i in range(vertex_count - 1): - for j in range(i + 1, vertex_count): - all_possible_edges.append([random_vertices[i], random_vertices[j]]) - all_possible_edges.append([random_vertices[j], random_vertices[i]]) - - # test contains_edge function - for edge in all_possible_edges: - if edge in random_edges: - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - elif [edge[1], edge[0]] in random_edges: - # since this edge exists for undirected but the reverse may - # not exist for directed - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, [edge[1], edge[0]] - ) - else: - self.__assert_graph_edge_does_not_exist_check( - undirected_graph, directed_graph, edge - ) - - def test_add_edge(self) -> None: - # generate graph input - random_vertices: list[int] = random.sample(range(101), 15) - random_edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4) - - # build graphs WITHOUT edges - undirected_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=[], directed=False - ) - directed_graph = GraphAdjacencyMatrix( - vertices=random_vertices, edges=[], directed=True - ) - - # run and test add_edge - for edge in random_edges: - undirected_graph.add_edge(edge[0], edge[1]) - directed_graph.add_edge(edge[0], edge[1]) - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - - def test_remove_edge(self) -> None: - # generate graph input and graphs - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - # run and test remove_edge - for edge in random_edges: - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, edge - ) - undirected_graph.remove_edge(edge[0], edge[1]) - directed_graph.remove_edge(edge[0], edge[1]) - self.__assert_graph_edge_does_not_exist_check( - undirected_graph, directed_graph, edge - ) - - def test_add_and_remove_edges_repeatedly(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - # make some more edge options! - more_random_edges: list[list[int]] = [] - - while len(more_random_edges) != len(random_edges): - edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4) - for edge in edges: - if len(more_random_edges) == len(random_edges): - break - elif edge not in more_random_edges and edge not in random_edges: - more_random_edges.append(edge) - - for i, _ in enumerate(random_edges): - undirected_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1]) - directed_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1]) - - self.__assert_graph_edge_exists_check( - undirected_graph, directed_graph, more_random_edges[i] - ) - - undirected_graph.remove_edge(random_edges[i][0], random_edges[i][1]) - directed_graph.remove_edge(random_edges[i][0], random_edges[i][1]) - - self.__assert_graph_edge_does_not_exist_check( - undirected_graph, directed_graph, random_edges[i] - ) - - def test_add_vertex_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for vertex in random_vertices: - with pytest.raises(ValueError): - undirected_graph.add_vertex(vertex) - with pytest.raises(ValueError): - directed_graph.add_vertex(vertex) - - def test_remove_vertex_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for i in range(101): - if i not in random_vertices: - with pytest.raises(ValueError): - undirected_graph.remove_vertex(i) - with pytest.raises(ValueError): - directed_graph.remove_vertex(i) - - def test_add_edge_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for edge in random_edges: - with pytest.raises(ValueError): - undirected_graph.add_edge(edge[0], edge[1]) - with pytest.raises(ValueError): - directed_graph.add_edge(edge[0], edge[1]) - - def test_remove_edge_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - more_random_edges: list[list[int]] = [] - - while len(more_random_edges) != len(random_edges): - edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4) - for edge in edges: - if len(more_random_edges) == len(random_edges): - break - elif edge not in more_random_edges and edge not in random_edges: - more_random_edges.append(edge) - - for edge in more_random_edges: - with pytest.raises(ValueError): - undirected_graph.remove_edge(edge[0], edge[1]) - with pytest.raises(ValueError): - directed_graph.remove_edge(edge[0], edge[1]) - - def test_contains_edge_exception_check(self) -> None: - ( - undirected_graph, - directed_graph, - random_vertices, - random_edges, - ) = self.__generate_graphs(20, 0, 100, 4) - - for vertex in random_vertices: - with pytest.raises(ValueError): - undirected_graph.contains_edge(vertex, 102) - with pytest.raises(ValueError): - directed_graph.contains_edge(vertex, 102) - - with pytest.raises(ValueError): - undirected_graph.contains_edge(103, 102) - with pytest.raises(ValueError): - directed_graph.contains_edge(103, 102) - - -if __name__ == "__main__": - unittest.main() diff --git a/graphs/graph_list.py b/graphs/graph_list.py deleted file mode 100644 index 6563cbb76132..000000000000 --- a/graphs/graph_list.py +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env python3 - -# Author: OMKAR PATHAK, Nwachukwu Chidiebere - -# Use a Python dictionary to construct the graph. -from __future__ import annotations - -from pprint import pformat -from typing import Generic, TypeVar - -T = TypeVar("T") - - -class GraphAdjacencyList(Generic[T]): - """ - Adjacency List type Graph Data Structure that accounts for directed and undirected - Graphs. Initialize graph object indicating whether it's directed or undirected. - - Directed graph example: - >>> d_graph = GraphAdjacencyList() - >>> print(d_graph) - {} - >>> d_graph.add_edge(0, 1) - {0: [1], 1: []} - >>> d_graph.add_edge(1, 2).add_edge(1, 4).add_edge(1, 5) - {0: [1], 1: [2, 4, 5], 2: [], 4: [], 5: []} - >>> d_graph.add_edge(2, 0).add_edge(2, 6).add_edge(2, 7) - {0: [1], 1: [2, 4, 5], 2: [0, 6, 7], 4: [], 5: [], 6: [], 7: []} - >>> d_graph - {0: [1], 1: [2, 4, 5], 2: [0, 6, 7], 4: [], 5: [], 6: [], 7: []} - >>> print(repr(d_graph)) - {0: [1], 1: [2, 4, 5], 2: [0, 6, 7], 4: [], 5: [], 6: [], 7: []} - - Undirected graph example: - >>> u_graph = GraphAdjacencyList(directed=False) - >>> u_graph.add_edge(0, 1) - {0: [1], 1: [0]} - >>> u_graph.add_edge(1, 2).add_edge(1, 4).add_edge(1, 5) - {0: [1], 1: [0, 2, 4, 5], 2: [1], 4: [1], 5: [1]} - >>> u_graph.add_edge(2, 0).add_edge(2, 6).add_edge(2, 7) - {0: [1, 2], 1: [0, 2, 4, 5], 2: [1, 0, 6, 7], 4: [1], 5: [1], 6: [2], 7: [2]} - >>> u_graph.add_edge(4, 5) - {0: [1, 2], - 1: [0, 2, 4, 5], - 2: [1, 0, 6, 7], - 4: [1, 5], - 5: [1, 4], - 6: [2], - 7: [2]} - >>> print(u_graph) - {0: [1, 2], - 1: [0, 2, 4, 5], - 2: [1, 0, 6, 7], - 4: [1, 5], - 5: [1, 4], - 6: [2], - 7: [2]} - >>> print(repr(u_graph)) - {0: [1, 2], - 1: [0, 2, 4, 5], - 2: [1, 0, 6, 7], - 4: [1, 5], - 5: [1, 4], - 6: [2], - 7: [2]} - >>> char_graph = GraphAdjacencyList(directed=False) - >>> char_graph.add_edge('a', 'b') - {'a': ['b'], 'b': ['a']} - >>> char_graph.add_edge('b', 'c').add_edge('b', 'e').add_edge('b', 'f') - {'a': ['b'], 'b': ['a', 'c', 'e', 'f'], 'c': ['b'], 'e': ['b'], 'f': ['b']} - >>> char_graph - {'a': ['b'], 'b': ['a', 'c', 'e', 'f'], 'c': ['b'], 'e': ['b'], 'f': ['b']} - """ - - def __init__(self, directed: bool = True) -> None: - """ - Parameters: - directed: (bool) Indicates if graph is directed or undirected. Default is True. - """ - - self.adj_list: dict[T, list[T]] = {} # dictionary of lists - self.directed = directed - - def add_edge( - self, source_vertex: T, destination_vertex: T - ) -> GraphAdjacencyList[T]: - """ - Connects vertices together. Creates and Edge from source vertex to destination - vertex. - Vertices will be created if not found in graph - """ - - if not self.directed: # For undirected graphs - # if both source vertex and destination vertex are both present in the - # adjacency list, add destination vertex to source vertex list of adjacent - # vertices and add source vertex to destination vertex list of adjacent - # vertices. - if source_vertex in self.adj_list and destination_vertex in self.adj_list: - self.adj_list[source_vertex].append(destination_vertex) - self.adj_list[destination_vertex].append(source_vertex) - # if only source vertex is present in adjacency list, add destination vertex - # to source vertex list of adjacent vertices, then create a new vertex with - # destination vertex as key and assign a list containing the source vertex - # as it's first adjacent vertex. - elif source_vertex in self.adj_list: - self.adj_list[source_vertex].append(destination_vertex) - self.adj_list[destination_vertex] = [source_vertex] - # if only destination vertex is present in adjacency list, add source vertex - # to destination vertex list of adjacent vertices, then create a new vertex - # with source vertex as key and assign a list containing the source vertex - # as it's first adjacent vertex. - elif destination_vertex in self.adj_list: - self.adj_list[destination_vertex].append(source_vertex) - self.adj_list[source_vertex] = [destination_vertex] - # if both source vertex and destination vertex are not present in adjacency - # list, create a new vertex with source vertex as key and assign a list - # containing the destination vertex as it's first adjacent vertex also - # create a new vertex with destination vertex as key and assign a list - # containing the source vertex as it's first adjacent vertex. - else: - self.adj_list[source_vertex] = [destination_vertex] - self.adj_list[destination_vertex] = [source_vertex] - # For directed graphs - # if both source vertex and destination vertex are present in adjacency - # list, add destination vertex to source vertex list of adjacent vertices. - elif source_vertex in self.adj_list and destination_vertex in self.adj_list: - self.adj_list[source_vertex].append(destination_vertex) - # if only source vertex is present in adjacency list, add destination - # vertex to source vertex list of adjacent vertices and create a new vertex - # with destination vertex as key, which has no adjacent vertex - elif source_vertex in self.adj_list: - self.adj_list[source_vertex].append(destination_vertex) - self.adj_list[destination_vertex] = [] - # if only destination vertex is present in adjacency list, create a new - # vertex with source vertex as key and assign a list containing destination - # vertex as first adjacent vertex - elif destination_vertex in self.adj_list: - self.adj_list[source_vertex] = [destination_vertex] - # if both source vertex and destination vertex are not present in adjacency - # list, create a new vertex with source vertex as key and a list containing - # destination vertex as it's first adjacent vertex. Then create a new vertex - # with destination vertex as key, which has no adjacent vertex - else: - self.adj_list[source_vertex] = [destination_vertex] - self.adj_list[destination_vertex] = [] - - return self - - def __repr__(self) -> str: - return pformat(self.adj_list) diff --git a/graphs/graphs_floyd_warshall.py b/graphs/graphs_floyd_warshall.py deleted file mode 100644 index aaed9ac5df8b..000000000000 --- a/graphs/graphs_floyd_warshall.py +++ /dev/null @@ -1,102 +0,0 @@ -# floyd_warshall.py -""" -The problem is to find the shortest distance between all pairs of vertices in a -weighted directed graph that can have negative edge weights. -""" - - -def _print_dist(dist, v): - print("\nThe shortest path matrix using Floyd Warshall algorithm\n") - for i in range(v): - for j in range(v): - if dist[i][j] != float("inf"): - print(int(dist[i][j]), end="\t") - else: - print("INF", end="\t") - print() - - -def floyd_warshall(graph, v): - """ - :param graph: 2D array calculated from weight[edge[i, j]] - :type graph: List[List[float]] - :param v: number of vertices - :type v: int - :return: shortest distance between all vertex pairs - distance[u][v] will contain the shortest distance from vertex u to v. - - 1. For all edges from v to n, distance[i][j] = weight(edge(i, j)). - 3. The algorithm then performs distance[i][j] = min(distance[i][j], distance[i][k] + - distance[k][j]) for each possible pair i, j of vertices. - 4. The above is repeated for each vertex k in the graph. - 5. Whenever distance[i][j] is given a new minimum value, next vertex[i][j] is - updated to the next vertex[i][k]. - """ - - dist = [[float("inf") for _ in range(v)] for _ in range(v)] - - for i in range(v): - for j in range(v): - dist[i][j] = graph[i][j] - - # check vertex k against all other vertices (i, j) - for k in range(v): - # looping through rows of graph array - for i in range(v): - # looping through columns of graph array - for j in range(v): - if ( - dist[i][k] != float("inf") - and dist[k][j] != float("inf") - and dist[i][k] + dist[k][j] < dist[i][j] - ): - dist[i][j] = dist[i][k] + dist[k][j] - - _print_dist(dist, v) - return dist, v - - -if __name__ == "__main__": - v = int(input("Enter number of vertices: ")) - e = int(input("Enter number of edges: ")) - - graph = [[float("inf") for i in range(v)] for j in range(v)] - - for i in range(v): - graph[i][i] = 0.0 - - # src and dst are indices that must be within the array size graph[e][v] - # failure to follow this will result in an error - for i in range(e): - print("\nEdge ", i + 1) - src = int(input("Enter source:")) - dst = int(input("Enter destination:")) - weight = float(input("Enter weight:")) - graph[src][dst] = weight - - floyd_warshall(graph, v) - - # Example Input - # Enter number of vertices: 3 - # Enter number of edges: 2 - - # # generated graph from vertex and edge inputs - # [[inf, inf, inf], [inf, inf, inf], [inf, inf, inf]] - # [[0.0, inf, inf], [inf, 0.0, inf], [inf, inf, 0.0]] - - # specify source, destination and weight for edge #1 - # Edge 1 - # Enter source:1 - # Enter destination:2 - # Enter weight:2 - - # specify source, destination and weight for edge #2 - # Edge 2 - # Enter source:2 - # Enter destination:1 - # Enter weight:1 - - # # Expected Output from the vertice, edge and src, dst, weight inputs!! - # 0 INF INF - # INF 0 2 - # INF 1 0 diff --git a/graphs/greedy_best_first.py b/graphs/greedy_best_first.py deleted file mode 100644 index bb3160047e34..000000000000 --- a/graphs/greedy_best_first.py +++ /dev/null @@ -1,199 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Best-first_search#Greedy_BFS -""" - -from __future__ import annotations - -Path = list[tuple[int, int]] - -# 0's are free path whereas 1's are obstacles -TEST_GRIDS = [ - [ - [0, 0, 0, 0, 0, 0, 0], - [0, 1, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 1, 0, 0, 0, 0], - [1, 0, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 1, 0, 0], - ], - [ - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 1, 0, 1], - [0, 0, 0, 1, 1, 0, 0], - [0, 1, 0, 0, 1, 0, 0], - [1, 0, 0, 1, 1, 0, 1], - [0, 0, 0, 0, 0, 0, 0], - ], - [ - [0, 0, 1, 0, 0], - [0, 1, 0, 0, 0], - [0, 0, 1, 0, 1], - [1, 0, 0, 1, 1], - [0, 0, 0, 0, 0], - ], -] - -delta = ([-1, 0], [0, -1], [1, 0], [0, 1]) # up, left, down, right - - -class Node: - """ - >>> k = Node(0, 0, 4, 5, 0, None) - >>> k.calculate_heuristic() - 9 - >>> n = Node(1, 4, 3, 4, 2, None) - >>> n.calculate_heuristic() - 2 - >>> l = [k, n] - >>> n == l[0] - False - >>> l.sort() - >>> n == l[0] - True - """ - - def __init__( - self, - pos_x: int, - pos_y: int, - goal_x: int, - goal_y: int, - g_cost: float, - parent: Node | None, - ): - self.pos_x = pos_x - self.pos_y = pos_y - self.pos = (pos_y, pos_x) - self.goal_x = goal_x - self.goal_y = goal_y - self.g_cost = g_cost - self.parent = parent - self.f_cost = self.calculate_heuristic() - - def calculate_heuristic(self) -> float: - """ - The heuristic here is the Manhattan Distance - Could elaborate to offer more than one choice - """ - dx = abs(self.pos_x - self.goal_x) - dy = abs(self.pos_y - self.goal_y) - return dx + dy - - def __lt__(self, other) -> bool: - return self.f_cost < other.f_cost - - def __eq__(self, other) -> bool: - return self.pos == other.pos - - -class GreedyBestFirst: - """ - >>> grid = TEST_GRIDS[2] - >>> gbf = GreedyBestFirst(grid, (0, 0), (len(grid) - 1, len(grid[0]) - 1)) - >>> [x.pos for x in gbf.get_successors(gbf.start)] - [(1, 0), (0, 1)] - >>> (gbf.start.pos_y + delta[3][0], gbf.start.pos_x + delta[3][1]) - (0, 1) - >>> (gbf.start.pos_y + delta[2][0], gbf.start.pos_x + delta[2][1]) - (1, 0) - >>> gbf.retrace_path(gbf.start) - [(0, 0)] - >>> gbf.search() # doctest: +NORMALIZE_WHITESPACE - [(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3), - (4, 4)] - """ - - def __init__( - self, grid: list[list[int]], start: tuple[int, int], goal: tuple[int, int] - ): - self.grid = grid - self.start = Node(start[1], start[0], goal[1], goal[0], 0, None) - self.target = Node(goal[1], goal[0], goal[1], goal[0], 99999, None) - - self.open_nodes = [self.start] - self.closed_nodes: list[Node] = [] - - self.reached = False - - def search(self) -> Path | None: - """ - Search for the path, - if a path is not found, only the starting position is returned - """ - while self.open_nodes: - # Open Nodes are sorted using __lt__ - self.open_nodes.sort() - current_node = self.open_nodes.pop(0) - - if current_node.pos == self.target.pos: - self.reached = True - return self.retrace_path(current_node) - - self.closed_nodes.append(current_node) - successors = self.get_successors(current_node) - - for child_node in successors: - if child_node in self.closed_nodes: - continue - - if child_node not in self.open_nodes: - self.open_nodes.append(child_node) - - if not self.reached: - return [self.start.pos] - return None - - def get_successors(self, parent: Node) -> list[Node]: - """ - Returns a list of successors (both in the grid and free spaces) - """ - return [ - Node( - pos_x, - pos_y, - self.target.pos_x, - self.target.pos_y, - parent.g_cost + 1, - parent, - ) - for action in delta - if ( - 0 <= (pos_x := parent.pos_x + action[1]) < len(self.grid[0]) - and 0 <= (pos_y := parent.pos_y + action[0]) < len(self.grid) - and self.grid[pos_y][pos_x] == 0 - ) - ] - - def retrace_path(self, node: Node | None) -> Path: - """ - Retrace the path from parents to parents until start node - """ - current_node = node - path = [] - while current_node is not None: - path.append((current_node.pos_y, current_node.pos_x)) - current_node = current_node.parent - path.reverse() - return path - - -if __name__ == "__main__": - for idx, grid in enumerate(TEST_GRIDS): - print(f"==grid-{idx + 1}==") - - init = (0, 0) - goal = (len(grid) - 1, len(grid[0]) - 1) - for elem in grid: - print(elem) - - print("------") - - greedy_bf = GreedyBestFirst(grid, init, goal) - path = greedy_bf.search() - if path: - for pos_x, pos_y in path: - grid[pos_x][pos_y] = 2 - - for elem in grid: - print(elem) diff --git a/graphs/greedy_min_vertex_cover.py b/graphs/greedy_min_vertex_cover.py deleted file mode 100644 index cdef69141bd6..000000000000 --- a/graphs/greedy_min_vertex_cover.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -* Author: Manuel Di Lullo (https://github.com/manueldilullo) -* Description: Approximization algorithm for minimum vertex cover problem. - Greedy Approach. Uses graphs represented with an adjacency list -URL: https://mathworld.wolfram.com/MinimumVertexCover.html -URL: https://cs.stackexchange.com/questions/129017/greedy-algorithm-for-vertex-cover -""" - -import heapq - - -def greedy_min_vertex_cover(graph: dict) -> set[int]: - """ - Greedy APX Algorithm for min Vertex Cover - @input: graph (graph stored in an adjacency list where each vertex - is represented with an integer) - @example: - >>> graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]} - >>> greedy_min_vertex_cover(graph) - {0, 1, 2, 4} - """ - # queue used to store nodes and their rank - queue: list[list] = [] - - # for each node and his adjacency list add them and the rank of the node to queue - # using heapq module the queue will be filled like a Priority Queue - # heapq works with a min priority queue, so I used -1*len(v) to build it - for key, value in graph.items(): - # O(log(n)) - heapq.heappush(queue, [-1 * len(value), (key, value)]) - - # chosen_vertices = set of chosen vertices - chosen_vertices = set() - - # while queue isn't empty and there are still edges - # (queue[0][0] is the rank of the node with max rank) - while queue and queue[0][0] != 0: - # extract vertex with max rank from queue and add it to chosen_vertices - argmax = heapq.heappop(queue)[1][0] - chosen_vertices.add(argmax) - - # Remove all arcs adjacent to argmax - for elem in queue: - # if v haven't adjacent node, skip - if elem[0] == 0: - continue - # if argmax is reachable from elem - # remove argmax from elem's adjacent list and update his rank - if argmax in elem[1][1]: - index = elem[1][1].index(argmax) - del elem[1][1][index] - elem[0] += 1 - # re-order the queue - heapq.heapify(queue) - return chosen_vertices - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]} - print(f"Minimum vertex cover:\n{greedy_min_vertex_cover(graph)}") diff --git a/graphs/kahns_algorithm_long.py b/graphs/kahns_algorithm_long.py deleted file mode 100644 index 1f16b90c0745..000000000000 --- a/graphs/kahns_algorithm_long.py +++ /dev/null @@ -1,30 +0,0 @@ -# Finding longest distance in Directed Acyclic Graph using KahnsAlgorithm -def longest_distance(graph): - indegree = [0] * len(graph) - queue = [] - long_dist = [1] * len(graph) - - for values in graph.values(): - for i in values: - indegree[i] += 1 - - for i in range(len(indegree)): - if indegree[i] == 0: - queue.append(i) - - while queue: - vertex = queue.pop(0) - for x in graph[vertex]: - indegree[x] -= 1 - - long_dist[x] = max(long_dist[x], long_dist[vertex] + 1) - - if indegree[x] == 0: - queue.append(x) - - print(max(long_dist)) - - -# Adjacency list of Graph -graph = {0: [2, 3, 4], 1: [2, 7], 2: [5], 3: [5, 7], 4: [7], 5: [6], 6: [7], 7: []} -longest_distance(graph) diff --git a/graphs/kahns_algorithm_topo.py b/graphs/kahns_algorithm_topo.py deleted file mode 100644 index c956cf9f48fd..000000000000 --- a/graphs/kahns_algorithm_topo.py +++ /dev/null @@ -1,61 +0,0 @@ -def topological_sort(graph: dict[int, list[int]]) -> list[int] | None: - """ - Perform topological sorting of a Directed Acyclic Graph (DAG) - using Kahn's Algorithm via Breadth-First Search (BFS). - - Topological sorting is a linear ordering of vertices in a graph such that for - every directed edge u → v, vertex u comes before vertex v in the ordering. - - Parameters: - graph: Adjacency list representing the directed graph where keys are - vertices, and values are lists of adjacent vertices. - - Returns: - The topologically sorted order of vertices if the graph is a DAG. - Returns None if the graph contains a cycle. - - Example: - >>> graph = {0: [1, 2], 1: [3], 2: [3], 3: [4, 5], 4: [], 5: []} - >>> topological_sort(graph) - [0, 1, 2, 3, 4, 5] - - >>> graph_with_cycle = {0: [1], 1: [2], 2: [0]} - >>> topological_sort(graph_with_cycle) - """ - - indegree = [0] * len(graph) - queue = [] - topo_order = [] - processed_vertices_count = 0 - - # Calculate the indegree of each vertex - for values in graph.values(): - for i in values: - indegree[i] += 1 - - # Add all vertices with 0 indegree to the queue - for i in range(len(indegree)): - if indegree[i] == 0: - queue.append(i) - - # Perform BFS - while queue: - vertex = queue.pop(0) - processed_vertices_count += 1 - topo_order.append(vertex) - - # Traverse neighbors - for neighbor in graph[vertex]: - indegree[neighbor] -= 1 - if indegree[neighbor] == 0: - queue.append(neighbor) - - if processed_vertices_count != len(graph): - return None # no topological ordering exists due to cycle - return topo_order # valid topological ordering - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/karger.py b/graphs/karger.py deleted file mode 100644 index 3ef65c0d6d32..000000000000 --- a/graphs/karger.py +++ /dev/null @@ -1,85 +0,0 @@ -""" -An implementation of Karger's Algorithm for partitioning a graph. -""" - -from __future__ import annotations - -import random - -# Adjacency list representation of this graph: -# https://en.wikipedia.org/wiki/File:Single_run_of_Karger%E2%80%99s_Mincut_algorithm.svg -TEST_GRAPH = { - "1": ["2", "3", "4", "5"], - "2": ["1", "3", "4", "5"], - "3": ["1", "2", "4", "5", "10"], - "4": ["1", "2", "3", "5", "6"], - "5": ["1", "2", "3", "4", "7"], - "6": ["7", "8", "9", "10", "4"], - "7": ["6", "8", "9", "10", "5"], - "8": ["6", "7", "9", "10"], - "9": ["6", "7", "8", "10"], - "10": ["6", "7", "8", "9", "3"], -} - - -def partition_graph(graph: dict[str, list[str]]) -> set[tuple[str, str]]: - """ - Partitions a graph using Karger's Algorithm. Implemented from - pseudocode found here: - https://en.wikipedia.org/wiki/Karger%27s_algorithm. - This function involves random choices, meaning it will not give - consistent outputs. - - Args: - graph: A dictionary containing adacency lists for the graph. - Nodes must be strings. - - Returns: - The cutset of the cut found by Karger's Algorithm. - - >>> graph = {'0':['1'], '1':['0']} - >>> partition_graph(graph) - {('0', '1')} - """ - # Dict that maps contracted nodes to a list of all the nodes it "contains." - contracted_nodes = {node: {node} for node in graph} - - graph_copy = {node: graph[node][:] for node in graph} - - while len(graph_copy) > 2: - # Choose a random edge. - u = random.choice(list(graph_copy.keys())) - v = random.choice(graph_copy[u]) - - # Contract edge (u, v) to new node uv - uv = u + v - uv_neighbors = list(set(graph_copy[u] + graph_copy[v])) - uv_neighbors.remove(u) - uv_neighbors.remove(v) - graph_copy[uv] = uv_neighbors - for neighbor in uv_neighbors: - graph_copy[neighbor].append(uv) - - contracted_nodes[uv] = set(contracted_nodes[u].union(contracted_nodes[v])) - - # Remove nodes u and v. - del graph_copy[u] - del graph_copy[v] - for neighbor in uv_neighbors: - if u in graph_copy[neighbor]: - graph_copy[neighbor].remove(u) - if v in graph_copy[neighbor]: - graph_copy[neighbor].remove(v) - - # Find cutset. - groups = [contracted_nodes[node] for node in graph_copy] - return { - (node, neighbor) - for node in groups[0] - for neighbor in graph[node] - if neighbor in groups[1] - } - - -if __name__ == "__main__": - print(partition_graph(TEST_GRAPH)) diff --git a/graphs/markov_chain.py b/graphs/markov_chain.py deleted file mode 100644 index 0b6659822dc4..000000000000 --- a/graphs/markov_chain.py +++ /dev/null @@ -1,84 +0,0 @@ -from __future__ import annotations - -from collections import Counter -from random import random - - -class MarkovChainGraphUndirectedUnweighted: - """ - Undirected Unweighted Graph for running Markov Chain Algorithm - """ - - def __init__(self): - self.connections = {} - - def add_node(self, node: str) -> None: - self.connections[node] = {} - - def add_transition_probability( - self, node1: str, node2: str, probability: float - ) -> None: - if node1 not in self.connections: - self.add_node(node1) - if node2 not in self.connections: - self.add_node(node2) - self.connections[node1][node2] = probability - - def get_nodes(self) -> list[str]: - return list(self.connections) - - def transition(self, node: str) -> str: - current_probability = 0 - random_value = random() - - for dest in self.connections[node]: - current_probability += self.connections[node][dest] - if current_probability > random_value: - return dest - return "" - - -def get_transitions( - start: str, transitions: list[tuple[str, str, float]], steps: int -) -> dict[str, int]: - """ - Running Markov Chain algorithm and calculating the number of times each node is - visited - - >>> transitions = [ - ... ('a', 'a', 0.9), - ... ('a', 'b', 0.075), - ... ('a', 'c', 0.025), - ... ('b', 'a', 0.15), - ... ('b', 'b', 0.8), - ... ('b', 'c', 0.05), - ... ('c', 'a', 0.25), - ... ('c', 'b', 0.25), - ... ('c', 'c', 0.5) - ... ] - - >>> result = get_transitions('a', transitions, 5000) - - >>> result['a'] > result['b'] > result['c'] - True - """ - - graph = MarkovChainGraphUndirectedUnweighted() - - for node1, node2, probability in transitions: - graph.add_transition_probability(node1, node2, probability) - - visited = Counter(graph.get_nodes()) - node = start - - for _ in range(steps): - node = graph.transition(node) - visited[node] += 1 - - return visited - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/matching_min_vertex_cover.py b/graphs/matching_min_vertex_cover.py deleted file mode 100644 index 5ac944ec1a07..000000000000 --- a/graphs/matching_min_vertex_cover.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -* Author: Manuel Di Lullo (https://github.com/manueldilullo) -* Description: Approximization algorithm for minimum vertex cover problem. - Matching Approach. Uses graphs represented with an adjacency list - -URL: https://mathworld.wolfram.com/MinimumVertexCover.html -URL: https://www.princeton.edu/~aaa/Public/Teaching/ORF523/ORF523_Lec6.pdf -""" - - -def matching_min_vertex_cover(graph: dict) -> set: - """ - APX Algorithm for min Vertex Cover using Matching Approach - @input: graph (graph stored in an adjacency list where each vertex - is represented as an integer) - @example: - >>> graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]} - >>> matching_min_vertex_cover(graph) - {0, 1, 2, 4} - """ - # chosen_vertices = set of chosen vertices - chosen_vertices = set() - # edges = list of graph's edges - edges = get_edges(graph) - - # While there are still elements in edges list, take an arbitrary edge - # (from_node, to_node) and add his extremity to chosen_vertices and then - # remove all arcs adjacent to the from_node and to_node - while edges: - from_node, to_node = edges.pop() - chosen_vertices.add(from_node) - chosen_vertices.add(to_node) - for edge in edges.copy(): - if from_node in edge or to_node in edge: - edges.discard(edge) - return chosen_vertices - - -def get_edges(graph: dict) -> set: - """ - Return a set of couples that represents all of the edges. - @input: graph (graph stored in an adjacency list where each vertex is - represented as an integer) - @example: - >>> graph = {0: [1, 3], 1: [0, 3], 2: [0, 3], 3: [0, 1, 2]} - >>> get_edges(graph) - {(0, 1), (3, 1), (0, 3), (2, 0), (3, 0), (2, 3), (1, 0), (3, 2), (1, 3)} - """ - edges = set() - for from_node, to_nodes in graph.items(): - for to_node in to_nodes: - edges.add((from_node, to_node)) - return edges - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]} - # print(f"Matching vertex cover:\n{matching_min_vertex_cover(graph)}") diff --git a/graphs/minimum_path_sum.py b/graphs/minimum_path_sum.py deleted file mode 100644 index df1e545df3d0..000000000000 --- a/graphs/minimum_path_sum.py +++ /dev/null @@ -1,63 +0,0 @@ -def min_path_sum(grid: list) -> int: - """ - Find the path from top left to bottom right of array of numbers - with the lowest possible sum and return the sum along this path. - >>> min_path_sum([ - ... [1, 3, 1], - ... [1, 5, 1], - ... [4, 2, 1], - ... ]) - 7 - - >>> min_path_sum([ - ... [1, 0, 5, 6, 7], - ... [8, 9, 0, 4, 2], - ... [4, 4, 4, 5, 1], - ... [9, 6, 3, 1, 0], - ... [8, 4, 3, 2, 7], - ... ]) - 20 - - >>> min_path_sum(None) - Traceback (most recent call last): - ... - TypeError: The grid does not contain the appropriate information - - >>> min_path_sum([[]]) - Traceback (most recent call last): - ... - TypeError: The grid does not contain the appropriate information - """ - - if not grid or not grid[0]: - raise TypeError("The grid does not contain the appropriate information") - - for cell_n in range(1, len(grid[0])): - grid[0][cell_n] += grid[0][cell_n - 1] - row_above = grid[0] - - for row_n in range(1, len(grid)): - current_row = grid[row_n] - grid[row_n] = fill_row(current_row, row_above) - row_above = grid[row_n] - - return grid[-1][-1] - - -def fill_row(current_row: list, row_above: list) -> list: - """ - >>> fill_row([2, 2, 2], [1, 2, 3]) - [3, 4, 5] - """ - - current_row[0] += row_above[0] - for cell_n in range(1, len(current_row)): - current_row[cell_n] += min(current_row[cell_n - 1], row_above[cell_n]) - - return current_row - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/minimum_spanning_tree_boruvka.py b/graphs/minimum_spanning_tree_boruvka.py deleted file mode 100644 index 3c6888037948..000000000000 --- a/graphs/minimum_spanning_tree_boruvka.py +++ /dev/null @@ -1,196 +0,0 @@ -class Graph: - """ - Data structure to store graphs (based on adjacency lists) - """ - - def __init__(self): - self.num_vertices = 0 - self.num_edges = 0 - self.adjacency = {} - - def add_vertex(self, vertex): - """ - Adds a vertex to the graph - - """ - if vertex not in self.adjacency: - self.adjacency[vertex] = {} - self.num_vertices += 1 - - def add_edge(self, head, tail, weight): - """ - Adds an edge to the graph - - """ - - self.add_vertex(head) - self.add_vertex(tail) - - if head == tail: - return - - self.adjacency[head][tail] = weight - self.adjacency[tail][head] = weight - - def distinct_weight(self): - """ - For Boruvks's algorithm the weights should be distinct - Converts the weights to be distinct - - """ - edges = self.get_edges() - for edge in edges: - head, tail, weight = edge - edges.remove((tail, head, weight)) - for i in range(len(edges)): - edges[i] = list(edges[i]) - - edges.sort(key=lambda e: e[2]) - for i in range(len(edges) - 1): - if edges[i][2] >= edges[i + 1][2]: - edges[i + 1][2] = edges[i][2] + 1 - for edge in edges: - head, tail, weight = edge - self.adjacency[head][tail] = weight - self.adjacency[tail][head] = weight - - def __str__(self): - """ - Returns string representation of the graph - """ - string = "" - for tail in self.adjacency: - for head in self.adjacency[tail]: - weight = self.adjacency[head][tail] - string += f"{head} -> {tail} == {weight}\n" - return string.rstrip("\n") - - def get_edges(self): - """ - Returna all edges in the graph - """ - output = [] - for tail in self.adjacency: - for head in self.adjacency[tail]: - output.append((tail, head, self.adjacency[head][tail])) - return output - - def get_vertices(self): - """ - Returns all vertices in the graph - """ - return self.adjacency.keys() - - @staticmethod - def build(vertices=None, edges=None): - """ - Builds a graph from the given set of vertices and edges - - """ - g = Graph() - if vertices is None: - vertices = [] - if edges is None: - edge = [] - for vertex in vertices: - g.add_vertex(vertex) - for edge in edges: - g.add_edge(*edge) - return g - - class UnionFind: - """ - Disjoint set Union and Find for Boruvka's algorithm - """ - - def __init__(self): - self.parent = {} - self.rank = {} - - def __len__(self): - return len(self.parent) - - def make_set(self, item): - if item in self.parent: - return self.find(item) - - self.parent[item] = item - self.rank[item] = 0 - return item - - def find(self, item): - if item not in self.parent: - return self.make_set(item) - if item != self.parent[item]: - self.parent[item] = self.find(self.parent[item]) - return self.parent[item] - - def union(self, item1, item2): - root1 = self.find(item1) - root2 = self.find(item2) - - if root1 == root2: - return root1 - - if self.rank[root1] > self.rank[root2]: - self.parent[root2] = root1 - return root1 - - if self.rank[root1] < self.rank[root2]: - self.parent[root1] = root2 - return root2 - - if self.rank[root1] == self.rank[root2]: - self.rank[root1] += 1 - self.parent[root2] = root1 - return root1 - return None - - @staticmethod - def boruvka_mst(graph): - """ - Implementation of Boruvka's algorithm - >>> g = Graph() - >>> g = Graph.build([0, 1, 2, 3], [[0, 1, 1], [0, 2, 1],[2, 3, 1]]) - >>> g.distinct_weight() - >>> bg = Graph.boruvka_mst(g) - >>> print(bg) - 1 -> 0 == 1 - 2 -> 0 == 2 - 0 -> 1 == 1 - 0 -> 2 == 2 - 3 -> 2 == 3 - 2 -> 3 == 3 - """ - num_components = graph.num_vertices - - union_find = Graph.UnionFind() - mst_edges = [] - while num_components > 1: - cheap_edge = {} - for vertex in graph.get_vertices(): - cheap_edge[vertex] = -1 - - edges = graph.get_edges() - for edge in edges: - head, tail, weight = edge - edges.remove((tail, head, weight)) - for edge in edges: - head, tail, weight = edge - set1 = union_find.find(head) - set2 = union_find.find(tail) - if set1 != set2: - if cheap_edge[set1] == -1 or cheap_edge[set1][2] > weight: - cheap_edge[set1] = [head, tail, weight] - - if cheap_edge[set2] == -1 or cheap_edge[set2][2] > weight: - cheap_edge[set2] = [head, tail, weight] - for vertex in cheap_edge: - if cheap_edge[vertex] != -1: - head, tail, weight = cheap_edge[vertex] - if union_find.find(head) != union_find.find(tail): - union_find.union(head, tail) - mst_edges.append(cheap_edge[vertex]) - num_components = num_components - 1 - mst = Graph.build(edges=mst_edges) - return mst diff --git a/graphs/minimum_spanning_tree_kruskal.py b/graphs/minimum_spanning_tree_kruskal.py deleted file mode 100644 index 85d937010489..000000000000 --- a/graphs/minimum_spanning_tree_kruskal.py +++ /dev/null @@ -1,46 +0,0 @@ -def kruskal( - num_nodes: int, edges: list[tuple[int, int, int]] -) -> list[tuple[int, int, int]]: - """ - >>> kruskal(4, [(0, 1, 3), (1, 2, 5), (2, 3, 1)]) - [(2, 3, 1), (0, 1, 3), (1, 2, 5)] - - >>> kruskal(4, [(0, 1, 3), (1, 2, 5), (2, 3, 1), (0, 2, 1), (0, 3, 2)]) - [(2, 3, 1), (0, 2, 1), (0, 1, 3)] - - >>> kruskal(4, [(0, 1, 3), (1, 2, 5), (2, 3, 1), (0, 2, 1), (0, 3, 2), - ... (2, 1, 1)]) - [(2, 3, 1), (0, 2, 1), (2, 1, 1)] - """ - edges = sorted(edges, key=lambda edge: edge[2]) - - parent = list(range(num_nodes)) - - def find_parent(i): - if i != parent[i]: - parent[i] = find_parent(parent[i]) - return parent[i] - - minimum_spanning_tree_cost = 0 - minimum_spanning_tree = [] - - for edge in edges: - parent_a = find_parent(edge[0]) - parent_b = find_parent(edge[1]) - if parent_a != parent_b: - minimum_spanning_tree_cost += edge[2] - minimum_spanning_tree.append(edge) - parent[parent_a] = parent_b - - return minimum_spanning_tree - - -if __name__ == "__main__": # pragma: no cover - num_nodes, num_edges = list(map(int, input().strip().split())) - edges = [] - - for _ in range(num_edges): - node1, node2, cost = (int(x) for x in input().strip().split()) - edges.append((node1, node2, cost)) - - kruskal(num_nodes, edges) diff --git a/graphs/minimum_spanning_tree_kruskal2.py b/graphs/minimum_spanning_tree_kruskal2.py deleted file mode 100644 index 0ddb43ce8e6e..000000000000 --- a/graphs/minimum_spanning_tree_kruskal2.py +++ /dev/null @@ -1,121 +0,0 @@ -from __future__ import annotations - -from typing import Generic, TypeVar - -T = TypeVar("T") - - -class DisjointSetTreeNode(Generic[T]): - # Disjoint Set Node to store the parent and rank - def __init__(self, data: T) -> None: - self.data = data - self.parent = self - self.rank = 0 - - -class DisjointSetTree(Generic[T]): - # Disjoint Set DataStructure - def __init__(self) -> None: - # map from node name to the node object - self.map: dict[T, DisjointSetTreeNode[T]] = {} - - def make_set(self, data: T) -> None: - # create a new set with x as its member - self.map[data] = DisjointSetTreeNode(data) - - def find_set(self, data: T) -> DisjointSetTreeNode[T]: - # find the set x belongs to (with path-compression) - elem_ref = self.map[data] - if elem_ref != elem_ref.parent: - elem_ref.parent = self.find_set(elem_ref.parent.data) - return elem_ref.parent - - def link( - self, node1: DisjointSetTreeNode[T], node2: DisjointSetTreeNode[T] - ) -> None: - # helper function for union operation - if node1.rank > node2.rank: - node2.parent = node1 - else: - node1.parent = node2 - if node1.rank == node2.rank: - node2.rank += 1 - - def union(self, data1: T, data2: T) -> None: - # merge 2 disjoint sets - self.link(self.find_set(data1), self.find_set(data2)) - - -class GraphUndirectedWeighted(Generic[T]): - def __init__(self) -> None: - # connections: map from the node to the neighbouring nodes (with weights) - self.connections: dict[T, dict[T, int]] = {} - - def add_node(self, node: T) -> None: - # add a node ONLY if its not present in the graph - if node not in self.connections: - self.connections[node] = {} - - def add_edge(self, node1: T, node2: T, weight: int) -> None: - # add an edge with the given weight - self.add_node(node1) - self.add_node(node2) - self.connections[node1][node2] = weight - self.connections[node2][node1] = weight - - def kruskal(self) -> GraphUndirectedWeighted[T]: - # Kruskal's Algorithm to generate a Minimum Spanning Tree (MST) of a graph - """ - Details: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm - - Example: - >>> g1 = GraphUndirectedWeighted[int]() - >>> g1.add_edge(1, 2, 1) - >>> g1.add_edge(2, 3, 2) - >>> g1.add_edge(3, 4, 1) - >>> g1.add_edge(3, 5, 100) # Removed in MST - >>> g1.add_edge(4, 5, 5) - >>> assert 5 in g1.connections[3] - >>> mst = g1.kruskal() - >>> assert 5 not in mst.connections[3] - - >>> g2 = GraphUndirectedWeighted[str]() - >>> g2.add_edge('A', 'B', 1) - >>> g2.add_edge('B', 'C', 2) - >>> g2.add_edge('C', 'D', 1) - >>> g2.add_edge('C', 'E', 100) # Removed in MST - >>> g2.add_edge('D', 'E', 5) - >>> assert 'E' in g2.connections["C"] - >>> mst = g2.kruskal() - >>> assert 'E' not in mst.connections['C'] - """ - - # getting the edges in ascending order of weights - edges = [] - seen = set() - for start in self.connections: - for end in self.connections[start]: - if (start, end) not in seen: - seen.add((end, start)) - edges.append((start, end, self.connections[start][end])) - edges.sort(key=lambda x: x[2]) - - # creating the disjoint set - disjoint_set = DisjointSetTree[T]() - for node in self.connections: - disjoint_set.make_set(node) - - # MST generation - num_edges = 0 - index = 0 - graph = GraphUndirectedWeighted[T]() - while num_edges < len(self.connections) - 1: - u, v, w = edges[index] - index += 1 - parent_u = disjoint_set.find_set(u) - parent_v = disjoint_set.find_set(v) - if parent_u != parent_v: - num_edges += 1 - graph.add_edge(u, v, w) - disjoint_set.union(u, v) - return graph diff --git a/graphs/minimum_spanning_tree_prims.py b/graphs/minimum_spanning_tree_prims.py deleted file mode 100644 index d0b45d7ef139..000000000000 --- a/graphs/minimum_spanning_tree_prims.py +++ /dev/null @@ -1,135 +0,0 @@ -import sys -from collections import defaultdict - - -class Heap: - def __init__(self): - self.node_position = [] - - def get_position(self, vertex): - return self.node_position[vertex] - - def set_position(self, vertex, pos): - self.node_position[vertex] = pos - - def top_to_bottom(self, heap, start, size, positions): - if start > size // 2 - 1: - return - else: - if 2 * start + 2 >= size: # noqa: SIM114 - smallest_child = 2 * start + 1 - elif heap[2 * start + 1] < heap[2 * start + 2]: - smallest_child = 2 * start + 1 - else: - smallest_child = 2 * start + 2 - if heap[smallest_child] < heap[start]: - temp, temp1 = heap[smallest_child], positions[smallest_child] - heap[smallest_child], positions[smallest_child] = ( - heap[start], - positions[start], - ) - heap[start], positions[start] = temp, temp1 - - temp = self.get_position(positions[smallest_child]) - self.set_position( - positions[smallest_child], self.get_position(positions[start]) - ) - self.set_position(positions[start], temp) - - self.top_to_bottom(heap, smallest_child, size, positions) - - # Update function if value of any node in min-heap decreases - def bottom_to_top(self, val, index, heap, position): - temp = position[index] - - while index != 0: - parent = int((index - 2) / 2) if index % 2 == 0 else int((index - 1) / 2) - - if val < heap[parent]: - heap[index] = heap[parent] - position[index] = position[parent] - self.set_position(position[parent], index) - else: - heap[index] = val - position[index] = temp - self.set_position(temp, index) - break - index = parent - else: - heap[0] = val - position[0] = temp - self.set_position(temp, 0) - - def heapify(self, heap, positions): - start = len(heap) // 2 - 1 - for i in range(start, -1, -1): - self.top_to_bottom(heap, i, len(heap), positions) - - def delete_minimum(self, heap, positions): - temp = positions[0] - heap[0] = sys.maxsize - self.top_to_bottom(heap, 0, len(heap), positions) - return temp - - -def prisms_algorithm(adjacency_list): - """ - >>> adjacency_list = {0: [[1, 1], [3, 3]], - ... 1: [[0, 1], [2, 6], [3, 5], [4, 1]], - ... 2: [[1, 6], [4, 5], [5, 2]], - ... 3: [[0, 3], [1, 5], [4, 1]], - ... 4: [[1, 1], [2, 5], [3, 1], [5, 4]], - ... 5: [[2, 2], [4, 4]]} - >>> prisms_algorithm(adjacency_list) - [(0, 1), (1, 4), (4, 3), (4, 5), (5, 2)] - """ - - heap = Heap() - - visited = [0] * len(adjacency_list) - nbr_tv = [-1] * len(adjacency_list) # Neighboring Tree Vertex of selected vertex - # Minimum Distance of explored vertex with neighboring vertex of partial tree - # formed in graph - distance_tv = [] # Heap of Distance of vertices from their neighboring vertex - positions = [] - - for vertex in range(len(adjacency_list)): - distance_tv.append(sys.maxsize) - positions.append(vertex) - heap.node_position.append(vertex) - - tree_edges = [] - visited[0] = 1 - distance_tv[0] = sys.maxsize - for neighbor, distance in adjacency_list[0]: - nbr_tv[neighbor] = 0 - distance_tv[neighbor] = distance - heap.heapify(distance_tv, positions) - - for _ in range(1, len(adjacency_list)): - vertex = heap.delete_minimum(distance_tv, positions) - if visited[vertex] == 0: - tree_edges.append((nbr_tv[vertex], vertex)) - visited[vertex] = 1 - for neighbor, distance in adjacency_list[vertex]: - if ( - visited[neighbor] == 0 - and distance < distance_tv[heap.get_position(neighbor)] - ): - distance_tv[heap.get_position(neighbor)] = distance - heap.bottom_to_top( - distance, heap.get_position(neighbor), distance_tv, positions - ) - nbr_tv[neighbor] = vertex - return tree_edges - - -if __name__ == "__main__": # pragma: no cover - # < --------- Prims Algorithm --------- > - edges_number = int(input("Enter number of edges: ").strip()) - adjacency_list = defaultdict(list) - for _ in range(edges_number): - edge = [int(x) for x in input().strip().split()] - adjacency_list[edge[0]].append([edge[1], edge[2]]) - adjacency_list[edge[1]].append([edge[0], edge[2]]) - print(prisms_algorithm(adjacency_list)) diff --git a/graphs/minimum_spanning_tree_prims2.py b/graphs/minimum_spanning_tree_prims2.py deleted file mode 100644 index cc918f81dfe8..000000000000 --- a/graphs/minimum_spanning_tree_prims2.py +++ /dev/null @@ -1,269 +0,0 @@ -""" -Prim's (also known as Jarník's) algorithm is a greedy algorithm that finds a minimum -spanning tree for a weighted undirected graph. This means it finds a subset of the -edges that forms a tree that includes every vertex, where the total weight of all the -edges in the tree is minimized. The algorithm operates by building this tree one vertex -at a time, from an arbitrary starting vertex, at each step adding the cheapest possible -connection from the tree to another vertex. -""" - -from __future__ import annotations - -from sys import maxsize -from typing import Generic, TypeVar - -T = TypeVar("T") - - -def get_parent_position(position: int) -> int: - """ - heap helper function get the position of the parent of the current node - - >>> get_parent_position(1) - 0 - >>> get_parent_position(2) - 0 - """ - return (position - 1) // 2 - - -def get_child_left_position(position: int) -> int: - """ - heap helper function get the position of the left child of the current node - - >>> get_child_left_position(0) - 1 - """ - return (2 * position) + 1 - - -def get_child_right_position(position: int) -> int: - """ - heap helper function get the position of the right child of the current node - - >>> get_child_right_position(0) - 2 - """ - return (2 * position) + 2 - - -class MinPriorityQueue(Generic[T]): - """ - Minimum Priority Queue Class - - Functions: - is_empty: function to check if the priority queue is empty - push: function to add an element with given priority to the queue - extract_min: function to remove and return the element with lowest weight (highest - priority) - update_key: function to update the weight of the given key - _bubble_up: helper function to place a node at the proper position (upward - movement) - _bubble_down: helper function to place a node at the proper position (downward - movement) - _swap_nodes: helper function to swap the nodes at the given positions - - >>> queue = MinPriorityQueue() - - >>> queue.push(1, 1000) - >>> queue.push(2, 100) - >>> queue.push(3, 4000) - >>> queue.push(4, 3000) - - >>> queue.extract_min() - 2 - - >>> queue.update_key(4, 50) - - >>> queue.extract_min() - 4 - >>> queue.extract_min() - 1 - >>> queue.extract_min() - 3 - """ - - def __init__(self) -> None: - self.heap: list[tuple[T, int]] = [] - self.position_map: dict[T, int] = {} - self.elements: int = 0 - - def __len__(self) -> int: - return self.elements - - def __repr__(self) -> str: - return str(self.heap) - - def is_empty(self) -> bool: - # Check if the priority queue is empty - return self.elements == 0 - - def push(self, elem: T, weight: int) -> None: - # Add an element with given priority to the queue - self.heap.append((elem, weight)) - self.position_map[elem] = self.elements - self.elements += 1 - self._bubble_up(elem) - - def extract_min(self) -> T: - # Remove and return the element with lowest weight (highest priority) - if self.elements > 1: - self._swap_nodes(0, self.elements - 1) - elem, _ = self.heap.pop() - del self.position_map[elem] - self.elements -= 1 - if self.elements > 0: - bubble_down_elem, _ = self.heap[0] - self._bubble_down(bubble_down_elem) - return elem - - def update_key(self, elem: T, weight: int) -> None: - # Update the weight of the given key - position = self.position_map[elem] - self.heap[position] = (elem, weight) - if position > 0: - parent_position = get_parent_position(position) - _, parent_weight = self.heap[parent_position] - if parent_weight > weight: - self._bubble_up(elem) - else: - self._bubble_down(elem) - else: - self._bubble_down(elem) - - def _bubble_up(self, elem: T) -> None: - # Place a node at the proper position (upward movement) [to be used internally - # only] - curr_pos = self.position_map[elem] - if curr_pos == 0: - return None - parent_position = get_parent_position(curr_pos) - _, weight = self.heap[curr_pos] - _, parent_weight = self.heap[parent_position] - if parent_weight > weight: - self._swap_nodes(parent_position, curr_pos) - return self._bubble_up(elem) - return None - - def _bubble_down(self, elem: T) -> None: - # Place a node at the proper position (downward movement) [to be used - # internally only] - curr_pos = self.position_map[elem] - _, weight = self.heap[curr_pos] - child_left_position = get_child_left_position(curr_pos) - child_right_position = get_child_right_position(curr_pos) - if child_left_position < self.elements and child_right_position < self.elements: - _, child_left_weight = self.heap[child_left_position] - _, child_right_weight = self.heap[child_right_position] - if child_right_weight < child_left_weight and child_right_weight < weight: - self._swap_nodes(child_right_position, curr_pos) - return self._bubble_down(elem) - if child_left_position < self.elements: - _, child_left_weight = self.heap[child_left_position] - if child_left_weight < weight: - self._swap_nodes(child_left_position, curr_pos) - return self._bubble_down(elem) - else: - return None - if child_right_position < self.elements: - _, child_right_weight = self.heap[child_right_position] - if child_right_weight < weight: - self._swap_nodes(child_right_position, curr_pos) - return self._bubble_down(elem) - return None - - def _swap_nodes(self, node1_pos: int, node2_pos: int) -> None: - # Swap the nodes at the given positions - node1_elem = self.heap[node1_pos][0] - node2_elem = self.heap[node2_pos][0] - self.heap[node1_pos], self.heap[node2_pos] = ( - self.heap[node2_pos], - self.heap[node1_pos], - ) - self.position_map[node1_elem] = node2_pos - self.position_map[node2_elem] = node1_pos - - -class GraphUndirectedWeighted(Generic[T]): - """ - Graph Undirected Weighted Class - - Functions: - add_node: function to add a node in the graph - add_edge: function to add an edge between 2 nodes in the graph - """ - - def __init__(self) -> None: - self.connections: dict[T, dict[T, int]] = {} - self.nodes: int = 0 - - def __repr__(self) -> str: - return str(self.connections) - - def __len__(self) -> int: - return self.nodes - - def add_node(self, node: T) -> None: - # Add a node in the graph if it is not in the graph - if node not in self.connections: - self.connections[node] = {} - self.nodes += 1 - - def add_edge(self, node1: T, node2: T, weight: int) -> None: - # Add an edge between 2 nodes in the graph - self.add_node(node1) - self.add_node(node2) - self.connections[node1][node2] = weight - self.connections[node2][node1] = weight - - -def prims_algo( - graph: GraphUndirectedWeighted[T], -) -> tuple[dict[T, int], dict[T, T | None]]: - """ - >>> graph = GraphUndirectedWeighted() - - >>> graph.add_edge("a", "b", 3) - >>> graph.add_edge("b", "c", 10) - >>> graph.add_edge("c", "d", 5) - >>> graph.add_edge("a", "c", 15) - >>> graph.add_edge("b", "d", 100) - - >>> dist, parent = prims_algo(graph) - - >>> abs(dist["a"] - dist["b"]) - 3 - >>> abs(dist["d"] - dist["b"]) - 15 - >>> abs(dist["a"] - dist["c"]) - 13 - """ - # prim's algorithm for minimum spanning tree - dist: dict[T, int] = {node: maxsize for node in graph.connections} - parent: dict[T, T | None] = {node: None for node in graph.connections} - - priority_queue: MinPriorityQueue[T] = MinPriorityQueue() - for node, weight in dist.items(): - priority_queue.push(node, weight) - - if priority_queue.is_empty(): - return dist, parent - - # initialization - node = priority_queue.extract_min() - dist[node] = 0 - for neighbour in graph.connections[node]: - if dist[neighbour] > dist[node] + graph.connections[node][neighbour]: - dist[neighbour] = dist[node] + graph.connections[node][neighbour] - priority_queue.update_key(neighbour, dist[neighbour]) - parent[neighbour] = node - - # running prim's algorithm - while not priority_queue.is_empty(): - node = priority_queue.extract_min() - for neighbour in graph.connections[node]: - if dist[neighbour] > dist[node] + graph.connections[node][neighbour]: - dist[neighbour] = dist[node] + graph.connections[node][neighbour] - priority_queue.update_key(neighbour, dist[neighbour]) - parent[neighbour] = node - return dist, parent diff --git a/graphs/multi_heuristic_astar.py b/graphs/multi_heuristic_astar.py deleted file mode 100644 index 38b07e1ca675..000000000000 --- a/graphs/multi_heuristic_astar.py +++ /dev/null @@ -1,312 +0,0 @@ -import heapq -import sys - -import numpy as np - -TPos = tuple[int, int] - - -class PriorityQueue: - def __init__(self): - self.elements = [] - self.set = set() - - def minkey(self): - if not self.empty(): - return self.elements[0][0] - else: - return float("inf") - - def empty(self): - return len(self.elements) == 0 - - def put(self, item, priority): - if item not in self.set: - heapq.heappush(self.elements, (priority, item)) - self.set.add(item) - else: - # update - # print("update", item) - temp = [] - (pri, x) = heapq.heappop(self.elements) - while x != item: - temp.append((pri, x)) - (pri, x) = heapq.heappop(self.elements) - temp.append((priority, item)) - for pro, xxx in temp: - heapq.heappush(self.elements, (pro, xxx)) - - def remove_element(self, item): - if item in self.set: - self.set.remove(item) - temp = [] - (pro, x) = heapq.heappop(self.elements) - while x != item: - temp.append((pro, x)) - (pro, x) = heapq.heappop(self.elements) - for prito, yyy in temp: - heapq.heappush(self.elements, (prito, yyy)) - - def top_show(self): - return self.elements[0][1] - - def get(self): - (priority, item) = heapq.heappop(self.elements) - self.set.remove(item) - return (priority, item) - - -def consistent_heuristic(p: TPos, goal: TPos): - # euclidean distance - a = np.array(p) - b = np.array(goal) - return np.linalg.norm(a - b) - - -def heuristic_2(p: TPos, goal: TPos): - # integer division by time variable - return consistent_heuristic(p, goal) // t - - -def heuristic_1(p: TPos, goal: TPos): - # manhattan distance - return abs(p[0] - goal[0]) + abs(p[1] - goal[1]) - - -def key(start: TPos, i: int, goal: TPos, g_function: dict[TPos, float]): - ans = g_function[start] + W1 * heuristics[i](start, goal) - return ans - - -def do_something(back_pointer, goal, start): - grid = np.char.chararray((n, n)) - for i in range(n): - for j in range(n): - grid[i][j] = "*" - - for i in range(n): - for j in range(n): - if (j, (n - 1) - i) in blocks: - grid[i][j] = "#" - - grid[0][(n - 1)] = "-" - x = back_pointer[goal] - while x != start: - (x_c, y_c) = x - # print(x) - grid[(n - 1) - y_c][x_c] = "-" - x = back_pointer[x] - grid[(n - 1)][0] = "-" - - for i in range(n): - for j in range(n): - if (i, j) == (0, n - 1): - print(grid[i][j], end=" ") - print("<-- End position", end=" ") - else: - print(grid[i][j], end=" ") - print() - print("^") - print("Start position") - print() - print("# is an obstacle") - print("- is the path taken by algorithm") - print("PATH TAKEN BY THE ALGORITHM IS:-") - x = back_pointer[goal] - while x != start: - print(x, end=" ") - x = back_pointer[x] - print(x) - sys.exit() - - -def valid(p: TPos): - if p[0] < 0 or p[0] > n - 1: - return False - return not (p[1] < 0 or p[1] > n - 1) - - -def expand_state( - s, - j, - visited, - g_function, - close_list_anchor, - close_list_inad, - open_list, - back_pointer, -): - for itera in range(n_heuristic): - open_list[itera].remove_element(s) - # print("s", s) - # print("j", j) - (x, y) = s - left = (x - 1, y) - right = (x + 1, y) - up = (x, y + 1) - down = (x, y - 1) - - for neighbours in [left, right, up, down]: - if neighbours not in blocks: - if valid(neighbours) and neighbours not in visited: - # print("neighbour", neighbours) - visited.add(neighbours) - back_pointer[neighbours] = -1 - g_function[neighbours] = float("inf") - - if valid(neighbours) and g_function[neighbours] > g_function[s] + 1: - g_function[neighbours] = g_function[s] + 1 - back_pointer[neighbours] = s - if neighbours not in close_list_anchor: - open_list[0].put(neighbours, key(neighbours, 0, goal, g_function)) - if neighbours not in close_list_inad: - for var in range(1, n_heuristic): - if key(neighbours, var, goal, g_function) <= W2 * key( - neighbours, 0, goal, g_function - ): - open_list[j].put( - neighbours, key(neighbours, var, goal, g_function) - ) - - -def make_common_ground(): - some_list = [] - for x in range(1, 5): - for y in range(1, 6): - some_list.append((x, y)) - - for x in range(15, 20): - some_list.append((x, 17)) - - for x in range(10, 19): - for y in range(1, 15): - some_list.append((x, y)) - - # L block - for x in range(1, 4): - for y in range(12, 19): - some_list.append((x, y)) - for x in range(3, 13): - for y in range(16, 19): - some_list.append((x, y)) - return some_list - - -heuristics = {0: consistent_heuristic, 1: heuristic_1, 2: heuristic_2} - -blocks_blk = [ - (0, 1), - (1, 1), - (2, 1), - (3, 1), - (4, 1), - (5, 1), - (6, 1), - (7, 1), - (8, 1), - (9, 1), - (10, 1), - (11, 1), - (12, 1), - (13, 1), - (14, 1), - (15, 1), - (16, 1), - (17, 1), - (18, 1), - (19, 1), -] -blocks_all = make_common_ground() - - -blocks = blocks_blk -# hyper parameters -W1 = 1 -W2 = 1 -n = 20 -n_heuristic = 3 # one consistent and two other inconsistent - -# start and end destination -start = (0, 0) -goal = (n - 1, n - 1) - -t = 1 - - -def multi_a_star(start: TPos, goal: TPos, n_heuristic: int): - g_function = {start: 0, goal: float("inf")} - back_pointer = {start: -1, goal: -1} - open_list = [] - visited = set() - - for i in range(n_heuristic): - open_list.append(PriorityQueue()) - open_list[i].put(start, key(start, i, goal, g_function)) - - close_list_anchor: list[int] = [] - close_list_inad: list[int] = [] - while open_list[0].minkey() < float("inf"): - for i in range(1, n_heuristic): - # print(open_list[0].minkey(), open_list[i].minkey()) - if open_list[i].minkey() <= W2 * open_list[0].minkey(): - global t - t += 1 - if g_function[goal] <= open_list[i].minkey(): - if g_function[goal] < float("inf"): - do_something(back_pointer, goal, start) - else: - _, get_s = open_list[i].top_show() - visited.add(get_s) - expand_state( - get_s, - i, - visited, - g_function, - close_list_anchor, - close_list_inad, - open_list, - back_pointer, - ) - close_list_inad.append(get_s) - elif g_function[goal] <= open_list[0].minkey(): - if g_function[goal] < float("inf"): - do_something(back_pointer, goal, start) - else: - get_s = open_list[0].top_show() - visited.add(get_s) - expand_state( - get_s, - 0, - visited, - g_function, - close_list_anchor, - close_list_inad, - open_list, - back_pointer, - ) - close_list_anchor.append(get_s) - print("No path found to goal") - print() - for i in range(n - 1, -1, -1): - for j in range(n): - if (j, i) in blocks: - print("#", end=" ") - elif (j, i) in back_pointer: - if (j, i) == (n - 1, n - 1): - print("*", end=" ") - else: - print("-", end=" ") - else: - print("*", end=" ") - if (j, i) == (n - 1, n - 1): - print("<-- End position", end=" ") - print() - print("^") - print("Start position") - print() - print("# is an obstacle") - print("- is the path taken by algorithm") - - -if __name__ == "__main__": - multi_a_star(start, goal, n_heuristic) diff --git a/graphs/page_rank.py b/graphs/page_rank.py deleted file mode 100644 index c0ce3a94c76b..000000000000 --- a/graphs/page_rank.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -Author: https://github.com/bhushan-borole -""" - -""" -The input graph for the algorithm is: - - A B C -A 0 1 1 -B 0 0 1 -C 1 0 0 - -""" - -graph = [[0, 1, 1], [0, 0, 1], [1, 0, 0]] - - -class Node: - def __init__(self, name): - self.name = name - self.inbound = [] - self.outbound = [] - - def add_inbound(self, node): - self.inbound.append(node) - - def add_outbound(self, node): - self.outbound.append(node) - - def __repr__(self): - return f"<node={self.name} inbound={self.inbound} outbound={self.outbound}>" - - -def page_rank(nodes, limit=3, d=0.85): - ranks = {} - for node in nodes: - ranks[node.name] = 1 - - outbounds = {} - for node in nodes: - outbounds[node.name] = len(node.outbound) - - for i in range(limit): - print(f"======= Iteration {i + 1} =======") - for _, node in enumerate(nodes): - ranks[node.name] = (1 - d) + d * sum( - ranks[ib] / outbounds[ib] for ib in node.inbound - ) - print(ranks) - - -def main(): - names = list(input("Enter Names of the Nodes: ").split()) - - nodes = [Node(name) for name in names] - - for ri, row in enumerate(graph): - for ci, col in enumerate(row): - if col == 1: - nodes[ci].add_inbound(names[ri]) - nodes[ri].add_outbound(names[ci]) - - print("======= Nodes =======") - for node in nodes: - print(node) - - page_rank(nodes) - - -if __name__ == "__main__": - main() diff --git a/graphs/prim.py b/graphs/prim.py deleted file mode 100644 index 5b3ce04441ec..000000000000 --- a/graphs/prim.py +++ /dev/null @@ -1,152 +0,0 @@ -"""Prim's Algorithm. - -Determines the minimum spanning tree(MST) of a graph using the Prim's Algorithm. - -Details: https://en.wikipedia.org/wiki/Prim%27s_algorithm -""" - -import heapq as hq -import math -from collections.abc import Iterator - - -class Vertex: - """Class Vertex.""" - - def __init__(self, id_): - """ - Arguments: - id - input an id to identify the vertex - Attributes: - neighbors - a list of the vertices it is linked to - edges - a dict to store the edges's weight - """ - self.id = str(id_) - self.key = None - self.pi = None - self.neighbors = [] - self.edges = {} # {vertex:distance} - - def __lt__(self, other): - """Comparison rule to < operator.""" - return self.key < other.key - - def __repr__(self): - """Return the vertex id.""" - return self.id - - def add_neighbor(self, vertex): - """Add a pointer to a vertex at neighbor's list.""" - self.neighbors.append(vertex) - - def add_edge(self, vertex, weight): - """Destination vertex and weight.""" - self.edges[vertex.id] = weight - - -def connect(graph, a, b, edge): - # add the neighbors: - graph[a - 1].add_neighbor(graph[b - 1]) - graph[b - 1].add_neighbor(graph[a - 1]) - # add the edges: - graph[a - 1].add_edge(graph[b - 1], edge) - graph[b - 1].add_edge(graph[a - 1], edge) - - -def prim(graph: list, root: Vertex) -> list: - """Prim's Algorithm. - - Runtime: - O(mn) with `m` edges and `n` vertices - - Return: - List with the edges of a Minimum Spanning Tree - - Usage: - prim(graph, graph[0]) - """ - a = [] - for u in graph: - u.key = math.inf - u.pi = None - root.key = 0 - q = graph[:] - while q: - u = min(q) - q.remove(u) - for v in u.neighbors: - if (v in q) and (u.edges[v.id] < v.key): - v.pi = u - v.key = u.edges[v.id] - for i in range(1, len(graph)): - a.append((int(graph[i].id) + 1, int(graph[i].pi.id) + 1)) - return a - - -def prim_heap(graph: list, root: Vertex) -> Iterator[tuple]: - """Prim's Algorithm with min heap. - - Runtime: - O((m + n)log n) with `m` edges and `n` vertices - - Yield: - Edges of a Minimum Spanning Tree - - Usage: - prim(graph, graph[0]) - """ - for u in graph: - u.key = math.inf - u.pi = None - root.key = 0 - - h = list(graph) - hq.heapify(h) - - while h: - u = hq.heappop(h) - for v in u.neighbors: - if (v in h) and (u.edges[v.id] < v.key): - v.pi = u - v.key = u.edges[v.id] - hq.heapify(h) - - for i in range(1, len(graph)): - yield (int(graph[i].id) + 1, int(graph[i].pi.id) + 1) - - -def test_vector() -> None: - """ - # Creates a list to store x vertices. - >>> x = 5 - >>> G = [Vertex(n) for n in range(x)] - - >>> connect(G, 1, 2, 15) - >>> connect(G, 1, 3, 12) - >>> connect(G, 2, 4, 13) - >>> connect(G, 2, 5, 5) - >>> connect(G, 3, 2, 6) - >>> connect(G, 3, 4, 6) - >>> connect(G, 0, 0, 0) # Generate the minimum spanning tree: - >>> G_heap = G[:] - >>> MST = prim(G, G[0]) - >>> MST_heap = prim_heap(G, G[0]) - >>> for i in MST: - ... print(i) - (2, 3) - (3, 1) - (4, 3) - (5, 2) - >>> for i in MST_heap: - ... print(i) - (2, 3) - (3, 1) - (4, 3) - (5, 2) - """ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/random_graph_generator.py b/graphs/random_graph_generator.py deleted file mode 100644 index 0e7e18bc8fd9..000000000000 --- a/graphs/random_graph_generator.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -* Author: Manuel Di Lullo (https://github.com/manueldilullo) -* Description: Random graphs generator. - Uses graphs represented with an adjacency list. - -URL: https://en.wikipedia.org/wiki/Random_graph -""" - -import random - - -def random_graph( - vertices_number: int, probability: float, directed: bool = False -) -> dict: - """ - Generate a random graph - @input: vertices_number (number of vertices), - probability (probability that a generic edge (u,v) exists), - directed (if True: graph will be a directed graph, - otherwise it will be an undirected graph) - @examples: - >>> random.seed(1) - >>> random_graph(4, 0.5) - {0: [1], 1: [0, 2, 3], 2: [1, 3], 3: [1, 2]} - >>> random.seed(1) - >>> random_graph(4, 0.5, True) - {0: [1], 1: [2, 3], 2: [3], 3: []} - """ - graph: dict = {i: [] for i in range(vertices_number)} - - # if probability is greater or equal than 1, then generate a complete graph - if probability >= 1: - return complete_graph(vertices_number) - # if probability is lower or equal than 0, then return a graph without edges - if probability <= 0: - return graph - - # for each couple of nodes, add an edge from u to v - # if the number randomly generated is greater than probability probability - for i in range(vertices_number): - for j in range(i + 1, vertices_number): - if random.random() < probability: - graph[i].append(j) - if not directed: - # if the graph is undirected, add an edge in from j to i, either - graph[j].append(i) - return graph - - -def complete_graph(vertices_number: int) -> dict: - """ - Generate a complete graph with vertices_number vertices. - @input: vertices_number (number of vertices), - directed (False if the graph is undirected, True otherwise) - @example: - >>> complete_graph(3) - {0: [1, 2], 1: [0, 2], 2: [0, 1]} - """ - return { - i: [j for j in range(vertices_number) if i != j] for i in range(vertices_number) - } - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/graphs/scc_kosaraju.py b/graphs/scc_kosaraju.py deleted file mode 100644 index 39211c64b687..000000000000 --- a/graphs/scc_kosaraju.py +++ /dev/null @@ -1,54 +0,0 @@ -from __future__ import annotations - - -def dfs(u): - global graph, reversed_graph, scc, component, visit, stack - if visit[u]: - return - visit[u] = True - for v in graph[u]: - dfs(v) - stack.append(u) - - -def dfs2(u): - global graph, reversed_graph, scc, component, visit, stack - if visit[u]: - return - visit[u] = True - component.append(u) - for v in reversed_graph[u]: - dfs2(v) - - -def kosaraju(): - global graph, reversed_graph, scc, component, visit, stack - for i in range(n): - dfs(i) - visit = [False] * n - for i in stack[::-1]: - if visit[i]: - continue - component = [] - dfs2(i) - scc.append(component) - return scc - - -if __name__ == "__main__": - # n - no of nodes, m - no of edges - n, m = list(map(int, input().strip().split())) - - graph: list[list[int]] = [[] for _ in range(n)] # graph - reversed_graph: list[list[int]] = [[] for i in range(n)] # reversed graph - # input graph data (edges) - for _ in range(m): - u, v = list(map(int, input().strip().split())) - graph[u].append(v) - reversed_graph[v].append(u) - - stack: list[int] = [] - visit: list[bool] = [False] * n - scc: list[int] = [] - component: list[int] = [] - print(kosaraju()) diff --git a/graphs/strongly_connected_components.py b/graphs/strongly_connected_components.py deleted file mode 100644 index 4d4cf88035b5..000000000000 --- a/graphs/strongly_connected_components.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Strongly_connected_component - -Finding strongly connected components in directed graph - -""" - -test_graph_1 = {0: [2, 3], 1: [0], 2: [1], 3: [4], 4: []} - -test_graph_2 = {0: [1, 2, 3], 1: [2], 2: [0], 3: [4], 4: [5], 5: [3]} - - -def topology_sort( - graph: dict[int, list[int]], vert: int, visited: list[bool] -) -> list[int]: - """ - Use depth first search to sort graph - At this time graph is the same as input - >>> topology_sort(test_graph_1, 0, 5 * [False]) - [1, 2, 4, 3, 0] - >>> topology_sort(test_graph_2, 0, 6 * [False]) - [2, 1, 5, 4, 3, 0] - """ - - visited[vert] = True - order = [] - - for neighbour in graph[vert]: - if not visited[neighbour]: - order += topology_sort(graph, neighbour, visited) - - order.append(vert) - - return order - - -def find_components( - reversed_graph: dict[int, list[int]], vert: int, visited: list[bool] -) -> list[int]: - """ - Use depth first search to find strongly connected - vertices. Now graph is reversed - >>> find_components({0: [1], 1: [2], 2: [0]}, 0, 5 * [False]) - [0, 1, 2] - >>> find_components({0: [2], 1: [0], 2: [0, 1]}, 0, 6 * [False]) - [0, 2, 1] - """ - - visited[vert] = True - component = [vert] - - for neighbour in reversed_graph[vert]: - if not visited[neighbour]: - component += find_components(reversed_graph, neighbour, visited) - - return component - - -def strongly_connected_components(graph: dict[int, list[int]]) -> list[list[int]]: - """ - This function takes graph as a parameter - and then returns the list of strongly connected components - >>> strongly_connected_components(test_graph_1) - [[0, 1, 2], [3], [4]] - >>> strongly_connected_components(test_graph_2) - [[0, 2, 1], [3, 5, 4]] - """ - - visited = len(graph) * [False] - reversed_graph: dict[int, list[int]] = {vert: [] for vert in range(len(graph))} - - for vert, neighbours in graph.items(): - for neighbour in neighbours: - reversed_graph[neighbour].append(vert) - - order = [] - for i, was_visited in enumerate(visited): - if not was_visited: - order += topology_sort(graph, i, visited) - - components_list = [] - visited = len(graph) * [False] - - for i in range(len(graph)): - vert = order[len(graph) - i - 1] - if not visited[vert]: - component = find_components(reversed_graph, vert, visited) - components_list.append(component) - - return components_list diff --git a/graphs/tarjans_scc.py b/graphs/tarjans_scc.py deleted file mode 100644 index b4a3bd5c4c35..000000000000 --- a/graphs/tarjans_scc.py +++ /dev/null @@ -1,106 +0,0 @@ -from collections import deque - - -def tarjan(g: list[list[int]]) -> list[list[int]]: - """ - Tarjan's algo for finding strongly connected components in a directed graph - - Uses two main attributes of each node to track reachability, the index of that node - within a component(index), and the lowest index reachable from that node(lowlink). - - We then perform a dfs of the each component making sure to update these parameters - for each node and saving the nodes we visit on the way. - - If ever we find that the lowest reachable node from a current node is equal to the - index of the current node then it must be the root of a strongly connected - component and so we save it and it's equireachable vertices as a strongly - connected component. - - Complexity: strong_connect() is called at most once for each node and has a - complexity of O(|E|) as it is DFS. - Therefore this has complexity O(|V| + |E|) for a graph G = (V, E) - - >>> tarjan([[2, 3, 4], [2, 3, 4], [0, 1, 3], [0, 1, 2], [1]]) - [[4, 3, 1, 2, 0]] - >>> tarjan([[], [], [], []]) - [[0], [1], [2], [3]] - >>> a = [0, 1, 2, 3, 4, 5, 4] - >>> b = [1, 0, 3, 2, 5, 4, 0] - >>> n = 7 - >>> sorted(tarjan(create_graph(n, list(zip(a, b))))) == sorted( - ... tarjan(create_graph(n, list(zip(a[::-1], b[::-1]))))) - True - >>> a = [0, 1, 2, 3, 4, 5, 6] - >>> b = [0, 1, 2, 3, 4, 5, 6] - >>> sorted(tarjan(create_graph(n, list(zip(a, b))))) - [[0], [1], [2], [3], [4], [5], [6]] - """ - - n = len(g) - stack: deque[int] = deque() - on_stack = [False for _ in range(n)] - index_of = [-1 for _ in range(n)] - lowlink_of = index_of[:] - - def strong_connect(v: int, index: int, components: list[list[int]]) -> int: - index_of[v] = index # the number when this node is seen - lowlink_of[v] = index # lowest rank node reachable from here - index += 1 - stack.append(v) - on_stack[v] = True - - for w in g[v]: - if index_of[w] == -1: - index = strong_connect(w, index, components) - lowlink_of[v] = ( - lowlink_of[w] if lowlink_of[w] < lowlink_of[v] else lowlink_of[v] - ) - elif on_stack[w]: - lowlink_of[v] = ( - lowlink_of[w] if lowlink_of[w] < lowlink_of[v] else lowlink_of[v] - ) - - if lowlink_of[v] == index_of[v]: - component = [] - w = stack.pop() - on_stack[w] = False - component.append(w) - while w != v: - w = stack.pop() - on_stack[w] = False - component.append(w) - components.append(component) - return index - - components: list[list[int]] = [] - for v in range(n): - if index_of[v] == -1: - strong_connect(v, 0, components) - - return components - - -def create_graph(n: int, edges: list[tuple[int, int]]) -> list[list[int]]: - """ - >>> n = 7 - >>> source = [0, 0, 1, 2, 3, 3, 4, 4, 6] - >>> target = [1, 3, 2, 0, 1, 4, 5, 6, 5] - >>> edges = list(zip(source, target)) - >>> create_graph(n, edges) - [[1, 3], [2], [0], [1, 4], [5, 6], [], [5]] - """ - g: list[list[int]] = [[] for _ in range(n)] - for u, v in edges: - g[u].append(v) - return g - - -if __name__ == "__main__": - # Test - n_vertices = 7 - source = [0, 0, 1, 2, 3, 3, 4, 4, 6] - target = [1, 3, 2, 0, 1, 4, 5, 6, 5] - edges = list(zip(source, target)) - g = create_graph(n_vertices, edges) - - assert tarjan(g) == [[5], [6], [4], [3, 2, 1, 0]] diff --git a/graphs/tests/__init__.py b/graphs/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/graphs/tests/test_min_spanning_tree_kruskal.py b/graphs/tests/test_min_spanning_tree_kruskal.py deleted file mode 100644 index d6df242ec6d1..000000000000 --- a/graphs/tests/test_min_spanning_tree_kruskal.py +++ /dev/null @@ -1,36 +0,0 @@ -from graphs.minimum_spanning_tree_kruskal import kruskal - - -def test_kruskal_successful_result(): - num_nodes = 9 - edges = [ - [0, 1, 4], - [0, 7, 8], - [1, 2, 8], - [7, 8, 7], - [7, 6, 1], - [2, 8, 2], - [8, 6, 6], - [2, 3, 7], - [2, 5, 4], - [6, 5, 2], - [3, 5, 14], - [3, 4, 9], - [5, 4, 10], - [1, 7, 11], - ] - - result = kruskal(num_nodes, edges) - - expected = [ - [7, 6, 1], - [2, 8, 2], - [6, 5, 2], - [0, 1, 4], - [2, 5, 4], - [2, 3, 7], - [0, 7, 8], - [3, 4, 9], - ] - - assert sorted(expected) == sorted(result) diff --git a/graphs/tests/test_min_spanning_tree_prim.py b/graphs/tests/test_min_spanning_tree_prim.py deleted file mode 100644 index 66e5706dadb1..000000000000 --- a/graphs/tests/test_min_spanning_tree_prim.py +++ /dev/null @@ -1,46 +0,0 @@ -from collections import defaultdict - -from graphs.minimum_spanning_tree_prims import prisms_algorithm as mst - - -def test_prim_successful_result(): - num_nodes, num_edges = 9, 14 # noqa: F841 - edges = [ - [0, 1, 4], - [0, 7, 8], - [1, 2, 8], - [7, 8, 7], - [7, 6, 1], - [2, 8, 2], - [8, 6, 6], - [2, 3, 7], - [2, 5, 4], - [6, 5, 2], - [3, 5, 14], - [3, 4, 9], - [5, 4, 10], - [1, 7, 11], - ] - - adjacency = defaultdict(list) - for node1, node2, cost in edges: - adjacency[node1].append([node2, cost]) - adjacency[node2].append([node1, cost]) - - result = mst(adjacency) - - expected = [ - [7, 6, 1], - [2, 8, 2], - [6, 5, 2], - [0, 1, 4], - [2, 5, 4], - [2, 3, 7], - [0, 7, 8], - [3, 4, 9], - ] - - for answer in expected: - edge = tuple(answer[:2]) - reverse = tuple(edge[::-1]) - assert edge in result or reverse in result diff --git a/greedy_methods/__init__.py b/greedy_methods/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/greedy_methods/best_time_to_buy_and_sell_stock.py b/greedy_methods/best_time_to_buy_and_sell_stock.py deleted file mode 100644 index 4aea19172ece..000000000000 --- a/greedy_methods/best_time_to_buy_and_sell_stock.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Given a list of stock prices calculate the maximum profit that can be made from a -single buy and sell of one share of stock. We only allowed to complete one buy -transaction and one sell transaction but must buy before we sell. - -Example : prices = [7, 1, 5, 3, 6, 4] -max_profit will return 5 - which is by buying at price 1 and selling at price 6. - -This problem can be solved using the concept of "GREEDY ALGORITHM". - -We iterate over the price array once, keeping track of the lowest price point -(buy) and the maximum profit we can get at each point. The greedy choice at each point -is to either buy at the current price if it's less than our current buying price, or -sell at the current price if the profit is more than our current maximum profit. -""" - - -def max_profit(prices: list[int]) -> int: - """ - >>> max_profit([7, 1, 5, 3, 6, 4]) - 5 - >>> max_profit([7, 6, 4, 3, 1]) - 0 - """ - if not prices: - return 0 - - min_price = prices[0] - max_profit: int = 0 - - for price in prices: - min_price = min(price, min_price) - max_profit = max(price - min_price, max_profit) - - return max_profit - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(max_profit([7, 1, 5, 3, 6, 4])) diff --git a/greedy_methods/fractional_cover_problem.py b/greedy_methods/fractional_cover_problem.py deleted file mode 100644 index e37c363f1db9..000000000000 --- a/greedy_methods/fractional_cover_problem.py +++ /dev/null @@ -1,102 +0,0 @@ -# https://en.wikipedia.org/wiki/Set_cover_problem - -from dataclasses import dataclass -from operator import attrgetter - - -@dataclass -class Item: - weight: int - value: int - - @property - def ratio(self) -> float: - """ - Return the value-to-weight ratio for the item. - - Returns: - float: The value-to-weight ratio for the item. - - Examples: - >>> Item(10, 65).ratio - 6.5 - - >>> Item(20, 100).ratio - 5.0 - - >>> Item(30, 120).ratio - 4.0 - """ - return self.value / self.weight - - -def fractional_cover(items: list[Item], capacity: int) -> float: - """ - Solve the Fractional Cover Problem. - - Args: - items: A list of items, where each item has weight and value attributes. - capacity: The maximum weight capacity of the knapsack. - - Returns: - The maximum value that can be obtained by selecting fractions of items to cover - the knapsack's capacity. - - Raises: - ValueError: If capacity is negative. - - Examples: - >>> fractional_cover((Item(10, 60), Item(20, 100), Item(30, 120)), capacity=50) - 240.0 - - >>> fractional_cover([Item(20, 100), Item(30, 120), Item(10, 60)], capacity=25) - 135.0 - - >>> fractional_cover([Item(10, 60), Item(20, 100), Item(30, 120)], capacity=60) - 280.0 - - >>> fractional_cover(items=[Item(5, 30), Item(10, 60), Item(15, 90)], capacity=30) - 180.0 - - >>> fractional_cover(items=[], capacity=50) - 0.0 - - >>> fractional_cover(items=[Item(10, 60)], capacity=5) - 30.0 - - >>> fractional_cover(items=[Item(10, 60)], capacity=1) - 6.0 - - >>> fractional_cover(items=[Item(10, 60)], capacity=0) - 0.0 - - >>> fractional_cover(items=[Item(10, 60)], capacity=-1) - Traceback (most recent call last): - ... - ValueError: Capacity cannot be negative - """ - if capacity < 0: - raise ValueError("Capacity cannot be negative") - - total_value = 0.0 - remaining_capacity = capacity - - # Sort the items by their value-to-weight ratio in descending order - for item in sorted(items, key=attrgetter("ratio"), reverse=True): - if remaining_capacity == 0: - break - - weight_taken = min(item.weight, remaining_capacity) - total_value += weight_taken * item.ratio - remaining_capacity -= weight_taken - - return total_value - - -if __name__ == "__main__": - import doctest - - if result := doctest.testmod().failed: - print(f"{result} test(s) failed") - else: - print("All tests passed") diff --git a/greedy_methods/fractional_knapsack.py b/greedy_methods/fractional_knapsack.py deleted file mode 100644 index d52b56f23569..000000000000 --- a/greedy_methods/fractional_knapsack.py +++ /dev/null @@ -1,51 +0,0 @@ -from bisect import bisect -from itertools import accumulate - - -def frac_knapsack(vl, wt, w, n): - """ - >>> frac_knapsack([60, 100, 120], [10, 20, 30], 50, 3) - 240.0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 10, 4) - 105.0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, 4) - 95.0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6], 8, 4) - 60.0 - >>> frac_knapsack([10, 40, 30], [5, 4, 6, 3], 8, 4) - 60.0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 0, 4) - 0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, 0) - 95.0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], -8, 4) - 0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, -4) - 95.0 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 800, 4) - 130 - >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, 400) - 95.0 - >>> frac_knapsack("ABCD", [5, 4, 6, 3], 8, 400) - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for /: 'str' and 'int' - """ - - r = sorted(zip(vl, wt), key=lambda x: x[0] / x[1], reverse=True) - vl, wt = [i[0] for i in r], [i[1] for i in r] - acc = list(accumulate(wt)) - k = bisect(acc, w) - return ( - 0 - if k == 0 - else sum(vl[:k]) + (w - acc[k - 1]) * (vl[k]) / (wt[k]) - if k != n - else sum(vl[:k]) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/greedy_methods/fractional_knapsack_2.py b/greedy_methods/fractional_knapsack_2.py deleted file mode 100644 index 6d9ed2ec3b6b..000000000000 --- a/greedy_methods/fractional_knapsack_2.py +++ /dev/null @@ -1,53 +0,0 @@ -# https://en.wikipedia.org/wiki/Continuous_knapsack_problem -# https://www.guru99.com/fractional-knapsack-problem-greedy.html -# https://medium.com/walkinthecode/greedy-algorithm-fractional-knapsack-problem-9aba1daecc93 - -from __future__ import annotations - - -def fractional_knapsack( - value: list[int], weight: list[int], capacity: int -) -> tuple[float, list[float]]: - """ - >>> value = [1, 3, 5, 7, 9] - >>> weight = [0.9, 0.7, 0.5, 0.3, 0.1] - >>> fractional_knapsack(value, weight, 5) - (25, [1, 1, 1, 1, 1]) - >>> fractional_knapsack(value, weight, 15) - (25, [1, 1, 1, 1, 1]) - >>> fractional_knapsack(value, weight, 25) - (25, [1, 1, 1, 1, 1]) - >>> fractional_knapsack(value, weight, 26) - (25, [1, 1, 1, 1, 1]) - >>> fractional_knapsack(value, weight, -1) - (-90.0, [0, 0, 0, 0, -10.0]) - >>> fractional_knapsack([1, 3, 5, 7], weight, 30) - (16, [1, 1, 1, 1]) - >>> fractional_knapsack(value, [0.9, 0.7, 0.5, 0.3, 0.1], 30) - (25, [1, 1, 1, 1, 1]) - >>> fractional_knapsack([], [], 30) - (0, []) - """ - index = list(range(len(value))) - ratio = [v / w for v, w in zip(value, weight)] - index.sort(key=lambda i: ratio[i], reverse=True) - - max_value: float = 0 - fractions: list[float] = [0] * len(value) - for i in index: - if weight[i] <= capacity: - fractions[i] = 1 - max_value += value[i] - capacity -= weight[i] - else: - fractions[i] = capacity / weight[i] - max_value += value[i] * capacity / weight[i] - break - - return max_value, fractions - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/greedy_methods/gas_station.py b/greedy_methods/gas_station.py deleted file mode 100644 index 6391ce379329..000000000000 --- a/greedy_methods/gas_station.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -Task: -There are n gas stations along a circular route, where the amount of gas -at the ith station is gas_quantities[i]. - -You have a car with an unlimited gas tank and it costs costs[i] of gas -to travel from the ith station to its next (i + 1)th station. -You begin the journey with an empty tank at one of the gas stations. - -Given two integer arrays gas_quantities and costs, return the starting -gas station's index if you can travel around the circuit once -in the clockwise direction otherwise, return -1. -If there exists a solution, it is guaranteed to be unique - -Reference: https://leetcode.com/problems/gas-station/description - -Implementation notes: -First, check whether the total gas is enough to complete the journey. If not, return -1. -However, if there is enough gas, it is guaranteed that there is a valid -starting index to reach the end of the journey. -Greedily calculate the net gain (gas_quantity - cost) at each station. -If the net gain ever goes below 0 while iterating through the stations, -start checking from the next station. - -""" - -from dataclasses import dataclass - - -@dataclass -class GasStation: - gas_quantity: int - cost: int - - -def get_gas_stations( - gas_quantities: list[int], costs: list[int] -) -> tuple[GasStation, ...]: - """ - This function returns a tuple of gas stations. - - Args: - gas_quantities: Amount of gas available at each station - costs: The cost of gas required to move from one station to the next - - Returns: - A tuple of gas stations - - >>> gas_stations = get_gas_stations([1, 2, 3, 4, 5], [3, 4, 5, 1, 2]) - >>> len(gas_stations) - 5 - >>> gas_stations[0] - GasStation(gas_quantity=1, cost=3) - >>> gas_stations[-1] - GasStation(gas_quantity=5, cost=2) - """ - return tuple( - GasStation(quantity, cost) for quantity, cost in zip(gas_quantities, costs) - ) - - -def can_complete_journey(gas_stations: tuple[GasStation, ...]) -> int: - """ - This function returns the index from which to start the journey - in order to reach the end. - - Args: - gas_quantities [list]: Amount of gas available at each station - cost [list]: The cost of gas required to move from one station to the next - - Returns: - start [int]: start index needed to complete the journey - - Examples: - >>> can_complete_journey(get_gas_stations([1, 2, 3, 4, 5], [3, 4, 5, 1, 2])) - 3 - >>> can_complete_journey(get_gas_stations([2, 3, 4], [3, 4, 3])) - -1 - """ - total_gas = sum(gas_station.gas_quantity for gas_station in gas_stations) - total_cost = sum(gas_station.cost for gas_station in gas_stations) - if total_gas < total_cost: - return -1 - - start = 0 - net = 0 - for i, gas_station in enumerate(gas_stations): - net += gas_station.gas_quantity - gas_station.cost - if net < 0: - start = i + 1 - net = 0 - return start - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/greedy_methods/minimum_coin_change.py b/greedy_methods/minimum_coin_change.py deleted file mode 100644 index db2c381bc84a..000000000000 --- a/greedy_methods/minimum_coin_change.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -Test cases: -Do you want to enter your denominations ? (Y/N) :N -Enter the change you want to make in Indian Currency: 987 -Following is minimal change for 987 : -500 100 100 100 100 50 20 10 5 2 - -Do you want to enter your denominations ? (Y/N) :Y -Enter number of denomination:10 -1 -5 -10 -20 -50 -100 -200 -500 -1000 -2000 -Enter the change you want to make: 18745 -Following is minimal change for 18745 : -2000 2000 2000 2000 2000 2000 2000 2000 2000 500 200 20 20 5 - -Do you want to enter your denominations ? (Y/N) :N -Enter the change you want to make: 0 -The total value cannot be zero or negative. -Do you want to enter your denominations ? (Y/N) :N -Enter the change you want to make: -98 -The total value cannot be zero or negative. - -Do you want to enter your denominations ? (Y/N) :Y -Enter number of denomination:5 -1 -5 -100 -500 -1000 -Enter the change you want to make: 456 -Following is minimal change for 456 : -100 100 100 100 5 5 5 5 5 5 5 5 5 5 5 1 -""" - - -def find_minimum_change(denominations: list[int], value: str) -> list[int]: - """ - Find the minimum change from the given denominations and value - >>> find_minimum_change([1, 5, 10, 20, 50, 100, 200, 500, 1000,2000], 18745) - [2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 500, 200, 20, 20, 5] - >>> find_minimum_change([1, 2, 5, 10, 20, 50, 100, 500, 2000], 987) - [500, 100, 100, 100, 100, 50, 20, 10, 5, 2] - >>> find_minimum_change([1, 2, 5, 10, 20, 50, 100, 500, 2000], 0) - [] - >>> find_minimum_change([1, 2, 5, 10, 20, 50, 100, 500, 2000], -98) - [] - >>> find_minimum_change([1, 5, 100, 500, 1000], 456) - [100, 100, 100, 100, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1] - """ - total_value = int(value) - - # Initialize Result - answer = [] - - # Traverse through all denomination - for denomination in reversed(denominations): - # Find denominations - while int(total_value) >= int(denomination): - total_value -= int(denomination) - answer.append(denomination) # Append the "answers" array - - return answer - - -# Driver Code -if __name__ == "__main__": - denominations = [] - value = "0" - - if ( - input("Do you want to enter your denominations ? (yY/n): ").strip().lower() - == "y" - ): - n = int(input("Enter the number of denominations you want to add: ").strip()) - - for i in range(n): - denominations.append(int(input(f"Denomination {i}: ").strip())) - value = input("Enter the change you want to make in Indian Currency: ").strip() - else: - # All denominations of Indian Currency if user does not enter - denominations = [1, 2, 5, 10, 20, 50, 100, 500, 2000] - value = input("Enter the change you want to make: ").strip() - - if int(value) == 0 or int(value) < 0: - print("The total value cannot be zero or negative.") - - else: - print(f"Following is minimal change for {value}: ") - answer = find_minimum_change(denominations, value) - # Print result - for i in range(len(answer)): - print(answer[i], end=" ") diff --git a/greedy_methods/minimum_waiting_time.py b/greedy_methods/minimum_waiting_time.py deleted file mode 100644 index aaae8cf8f720..000000000000 --- a/greedy_methods/minimum_waiting_time.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Calculate the minimum waiting time using a greedy algorithm. -reference: https://www.youtube.com/watch?v=Sf3eiO12eJs - -For doctests run following command: -python -m doctest -v minimum_waiting_time.py - -The minimum_waiting_time function uses a greedy algorithm to calculate the minimum -time for queries to complete. It sorts the list in non-decreasing order, calculates -the waiting time for each query by multiplying its position in the list with the -sum of all remaining query times, and returns the total waiting time. A doctest -ensures that the function produces the correct output. -""" - - -def minimum_waiting_time(queries: list[int]) -> int: - """ - This function takes a list of query times and returns the minimum waiting time - for all queries to be completed. - - Args: - queries: A list of queries measured in picoseconds - - Returns: - total_waiting_time: Minimum waiting time measured in picoseconds - - Examples: - >>> minimum_waiting_time([3, 2, 1, 2, 6]) - 17 - >>> minimum_waiting_time([3, 2, 1]) - 4 - >>> minimum_waiting_time([1, 2, 3, 4]) - 10 - >>> minimum_waiting_time([5, 5, 5, 5]) - 30 - >>> minimum_waiting_time([]) - 0 - """ - n = len(queries) - if n in (0, 1): - return 0 - return sum(query * (n - i - 1) for i, query in enumerate(sorted(queries))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/greedy_methods/optimal_merge_pattern.py b/greedy_methods/optimal_merge_pattern.py deleted file mode 100644 index a1c934f84498..000000000000 --- a/greedy_methods/optimal_merge_pattern.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -This is a pure Python implementation of the greedy-merge-sort algorithm -reference: https://www.geeksforgeeks.org/optimal-file-merge-patterns/ - -For doctests run following command: -python3 -m doctest -v greedy_merge_sort.py - -Objective -Merge a set of sorted files of different length into a single sorted file. -We need to find an optimal solution, where the resultant file -will be generated in minimum time. - -Approach -If the number of sorted files are given, there are many ways -to merge them into a single sorted file. -This merge can be performed pair wise. -To merge a m-record file and a n-record file requires possibly m+n record moves -the optimal choice being, -merge the two smallest files together at each step (greedy approach). -""" - - -def optimal_merge_pattern(files: list) -> float: - """Function to merge all the files with optimum cost - - Args: - files [list]: A list of sizes of different files to be merged - - Returns: - optimal_merge_cost [int]: Optimal cost to merge all those files - - Examples: - >>> optimal_merge_pattern([2, 3, 4]) - 14 - >>> optimal_merge_pattern([5, 10, 20, 30, 30]) - 205 - >>> optimal_merge_pattern([8, 8, 8, 8, 8]) - 96 - """ - optimal_merge_cost = 0 - while len(files) > 1: - temp = 0 - # Consider two files with minimum cost to be merged - for _ in range(2): - min_index = files.index(min(files)) - temp += files[min_index] - files.pop(min_index) - files.append(temp) - optimal_merge_cost += temp - return optimal_merge_cost - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/greedy_methods/smallest_range.py b/greedy_methods/smallest_range.py deleted file mode 100644 index e2b7f8d7e96a..000000000000 --- a/greedy_methods/smallest_range.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -smallest_range function takes a list of sorted integer lists and finds the smallest -range that includes at least one number from each list, using a min heap for efficiency. -""" - -from heapq import heappop, heappush -from sys import maxsize - - -def smallest_range(nums: list[list[int]]) -> list[int]: - """ - Find the smallest range from each list in nums. - - Uses min heap for efficiency. The range includes at least one number from each list. - - Args: - nums: List of k sorted integer lists. - - Returns: - list: Smallest range as a two-element list. - - Examples: - >>> smallest_range([[4, 10, 15, 24, 26], [0, 9, 12, 20], [5, 18, 22, 30]]) - [20, 24] - >>> smallest_range([[1, 2, 3], [1, 2, 3], [1, 2, 3]]) - [1, 1] - >>> smallest_range(((1, 2, 3), (1, 2, 3), (1, 2, 3))) - [1, 1] - >>> smallest_range(((-3, -2, -1), (0, 0, 0), (1, 2, 3))) - [-1, 1] - >>> smallest_range([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) - [3, 7] - >>> smallest_range([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) - [0, 0] - >>> smallest_range([[], [], []]) - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - - min_heap: list[tuple[int, int, int]] = [] - current_max = -maxsize - 1 - - for i, items in enumerate(nums): - heappush(min_heap, (items[0], i, 0)) - current_max = max(current_max, items[0]) - - # Initialize smallest_range with large integer values - smallest_range = [-maxsize - 1, maxsize] - - while min_heap: - current_min, list_index, element_index = heappop(min_heap) - - if current_max - current_min < smallest_range[1] - smallest_range[0]: - smallest_range = [current_min, current_max] - - if element_index == len(nums[list_index]) - 1: - break - - next_element = nums[list_index][element_index + 1] - heappush(min_heap, (next_element, list_index, element_index + 1)) - current_max = max(current_max, next_element) - - return smallest_range - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"{smallest_range([[1, 2, 3], [1, 2, 3], [1, 2, 3]])}") # Output: [1, 1] diff --git a/hashes/README.md b/hashes/README.md deleted file mode 100644 index 0237260eaa67..000000000000 --- a/hashes/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Hashes -Hashing is the process of mapping any amount of data to a specified size using an algorithm. This is known as a hash value (or, if you're feeling fancy, a hash code, hash sums, or even a hash digest). Hashing is a one-way function, whereas encryption is a two-way function. While it is functionally conceivable to reverse-hash stuff, the required computing power makes it impractical. Hashing is a one-way street. -Unlike encryption, which is intended to protect data in transit, hashing is intended to authenticate that a file or piece of data has not been altered—that it is authentic. In other words, it functions as a checksum. - -## Common hashing algorithms -### MD5 -This is one of the first algorithms that has gained widespread acceptance. MD5 is hashing algorithm made by Ray Rivest that is known to suffer vulnerabilities. It was created in 1992 as the successor to MD4. Currently MD6 is in the works, but as of 2009 Rivest had removed it from NIST consideration for SHA-3. - -### SHA -SHA stands for Security Hashing Algorithm and it’s probably best known as the hashing algorithm used in most SSL/TLS cipher suites. A cipher suite is a collection of ciphers and algorithms that are used for SSL/TLS connections. SHA handles the hashing aspects. SHA-1, as we mentioned earlier, is now deprecated. SHA-2 is now mandatory. SHA-2 is sometimes known as SHA-256, though variants with longer bit lengths are also available. - -### SHA256 -SHA 256 is a member of the SHA 2 algorithm family, under which SHA stands for Secure Hash Algorithm. It was a collaborative effort between both the NSA and NIST to implement a successor to the SHA 1 family, which was beginning to lose potency against brute force attacks. It was published in 2001. -The importance of the 256 in the name refers to the final hash digest value, i.e. the hash value will remain 256 bits regardless of the size of the plaintext/cleartext. Other algorithms in the SHA family are similar to SHA 256 in some ways. - -### Luhn -The Luhn algorithm, also renowned as the modulus 10 or mod 10 algorithm, is a straightforward checksum formula used to validate a wide range of identification numbers, including credit card numbers, IMEI numbers, and Canadian Social Insurance Numbers. A community of mathematicians developed the LUHN formula in the late 1960s. Companies offering credit cards quickly followed suit. Since the algorithm is in the public interest, anyone can use it. The algorithm is used by most credit cards and many government identification numbers as a simple method of differentiating valid figures from mistyped or otherwise incorrect numbers. It was created to guard against unintentional errors, not malicious attacks. diff --git a/hashes/__init__.py b/hashes/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/hashes/adler32.py b/hashes/adler32.py deleted file mode 100644 index 38d76ab12aa0..000000000000 --- a/hashes/adler32.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Adler-32 is a checksum algorithm which was invented by Mark Adler in 1995. -Compared to a cyclic redundancy check of the same length, it trades reliability for -speed (preferring the latter). -Adler-32 is more reliable than Fletcher-16, and slightly less reliable than -Fletcher-32.[2] - -source: https://en.wikipedia.org/wiki/Adler-32 -""" - -MOD_ADLER = 65521 - - -def adler32(plain_text: str) -> int: - """ - Function implements adler-32 hash. - Iterates and evaluates a new value for each character - - >>> adler32('Algorithms') - 363791387 - - >>> adler32('go adler em all') - 708642122 - """ - a = 1 - b = 0 - for plain_chr in plain_text: - a = (a + ord(plain_chr)) % MOD_ADLER - b = (b + a) % MOD_ADLER - return (b << 16) | a diff --git a/hashes/chaos_machine.py b/hashes/chaos_machine.py deleted file mode 100644 index d2fde2f5e371..000000000000 --- a/hashes/chaos_machine.py +++ /dev/null @@ -1,102 +0,0 @@ -"""example of simple chaos machine""" - -# Chaos Machine (K, t, m) -K = [0.33, 0.44, 0.55, 0.44, 0.33] -t = 3 -m = 5 - -# Buffer Space (with Parameters Space) -buffer_space: list[float] = [] -params_space: list[float] = [] - -# Machine Time -machine_time = 0 - - -def push(seed): - global buffer_space, params_space, machine_time, K, m, t - - # Choosing Dynamical Systems (All) - for key, value in enumerate(buffer_space): - # Evolution Parameter - e = float(seed / value) - - # Control Theory: Orbit Change - value = (buffer_space[(key + 1) % m] + e) % 1 - - # Control Theory: Trajectory Change - r = (params_space[key] + e) % 1 + 3 - - # Modification (Transition Function) - Jumps - buffer_space[key] = round(float(r * value * (1 - value)), 10) - params_space[key] = r # Saving to Parameters Space - - # Logistic Map - assert max(buffer_space) < 1 - assert max(params_space) < 4 - - # Machine Time - machine_time += 1 - - -def pull(): - global buffer_space, params_space, machine_time, K, m, t - - # PRNG (Xorshift by George Marsaglia) - def xorshift(x, y): - x ^= y >> 13 - y ^= x << 17 - x ^= y >> 5 - return x - - # Choosing Dynamical Systems (Increment) - key = machine_time % m - - # Evolution (Time Length) - for _ in range(t): - # Variables (Position + Parameters) - r = params_space[key] - value = buffer_space[key] - - # Modification (Transition Function) - Flow - buffer_space[key] = round(float(r * value * (1 - value)), 10) - params_space[key] = (machine_time * 0.01 + r * 1.01) % 1 + 3 - - # Choosing Chaotic Data - x = int(buffer_space[(key + 2) % m] * (10**10)) - y = int(buffer_space[(key - 2) % m] * (10**10)) - - # Machine Time - machine_time += 1 - - return xorshift(x, y) % 0xFFFFFFFF - - -def reset(): - global buffer_space, params_space, machine_time, K, m, t - - buffer_space = K - params_space = [0] * m - machine_time = 0 - - -if __name__ == "__main__": - # Initialization - reset() - - # Pushing Data (Input) - import random - - message = random.sample(range(0xFFFFFFFF), 100) - for chunk in message: - push(chunk) - - # for controlling - inp = "" - - # Pulling Data (Output) - while inp in ("e", "E"): - print(f"{format(pull(), '#04x')}") - print(buffer_space) - print(params_space) - inp = input("(e)exit? ").strip() diff --git a/hashes/djb2.py b/hashes/djb2.py deleted file mode 100644 index 4c84635098f2..000000000000 --- a/hashes/djb2.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -This algorithm (k=33) was first reported by Dan Bernstein many years ago in comp.lang.c -Another version of this algorithm (now favored by Bernstein) uses xor: - hash(i) = hash(i - 1) * 33 ^ str[i]; - - First Magic constant 33: - It has never been adequately explained. - It's magic because it works better than many other constants, prime or not. - - Second Magic Constant 5381: - - 1. odd number - 2. prime number - 3. deficient number - 4. 001/010/100/000/101 b - - source: http://www.cse.yorku.ca/~oz/hash.html -""" - - -def djb2(s: str) -> int: - """ - Implementation of djb2 hash algorithm that - is popular because of it's magic constants. - - >>> djb2('Algorithms') - 3782405311 - - >>> djb2('scramble bits') - 1609059040 - """ - hash_value = 5381 - for x in s: - hash_value = ((hash_value << 5) + hash_value) + ord(x) - return hash_value & 0xFFFFFFFF diff --git a/hashes/elf.py b/hashes/elf.py deleted file mode 100644 index e4bfcec22c22..000000000000 --- a/hashes/elf.py +++ /dev/null @@ -1,21 +0,0 @@ -def elf_hash(data: str) -> int: - """ - Implementation of ElfHash Algorithm, a variant of PJW hash function. - - >>> elf_hash('lorem ipsum') - 253956621 - """ - hash_ = x = 0 - for letter in data: - hash_ = (hash_ << 4) + ord(letter) - x = hash_ & 0xF0000000 - if x != 0: - hash_ ^= x >> 24 - hash_ &= ~x - return hash_ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/hashes/enigma_machine.py b/hashes/enigma_machine.py deleted file mode 100644 index d95437d12c34..000000000000 --- a/hashes/enigma_machine.py +++ /dev/null @@ -1,59 +0,0 @@ -alphabets = [chr(i) for i in range(32, 126)] -gear_one = list(range(len(alphabets))) -gear_two = list(range(len(alphabets))) -gear_three = list(range(len(alphabets))) -reflector = list(reversed(range(len(alphabets)))) -code = [] -gear_one_pos = gear_two_pos = gear_three_pos = 0 - - -def rotator(): - global gear_one_pos - global gear_two_pos - global gear_three_pos - i = gear_one[0] - gear_one.append(i) - del gear_one[0] - gear_one_pos += 1 - if gear_one_pos % int(len(alphabets)) == 0: - i = gear_two[0] - gear_two.append(i) - del gear_two[0] - gear_two_pos += 1 - if gear_two_pos % int(len(alphabets)) == 0: - i = gear_three[0] - gear_three.append(i) - del gear_three[0] - gear_three_pos += 1 - - -def engine(input_character): - target = alphabets.index(input_character) - target = gear_one[target] - target = gear_two[target] - target = gear_three[target] - target = reflector[target] - target = gear_three.index(target) - target = gear_two.index(target) - target = gear_one.index(target) - code.append(alphabets[target]) - rotator() - - -if __name__ == "__main__": - decode = list(input("Type your message:\n")) - while True: - try: - token = int(input("Please set token:(must be only digits)\n")) - break - except Exception as error: - print(error) - for _ in range(token): - rotator() - for j in decode: - engine(j) - print("\n" + "".join(code)) - print( - f"\nYour Token is {token} please write it down.\nIf you want to decode " - "this message again you should input same digits as token!" - ) diff --git a/hashes/fletcher16.py b/hashes/fletcher16.py deleted file mode 100644 index add8e185bc06..000000000000 --- a/hashes/fletcher16.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -The Fletcher checksum is an algorithm for computing a position-dependent -checksum devised by John G. Fletcher (1934-2012) at Lawrence Livermore Labs -in the late 1970s.[1] The objective of the Fletcher checksum was to -provide error-detection properties approaching those of a cyclic -redundancy check but with the lower computational effort associated -with summation techniques. - -Source: https://en.wikipedia.org/wiki/Fletcher%27s_checksum -""" - - -def fletcher16(text: str) -> int: - """ - Loop through every character in the data and add to two sums. - - >>> fletcher16('hello world') - 6752 - >>> fletcher16('onethousandfourhundredthirtyfour') - 28347 - >>> fletcher16('The quick brown fox jumps over the lazy dog.') - 5655 - """ - data = bytes(text, "ascii") - sum1 = 0 - sum2 = 0 - for character in data: - sum1 = (sum1 + character) % 255 - sum2 = (sum1 + sum2) % 255 - return (sum2 << 8) | sum1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/hashes/hamming_code.py b/hashes/hamming_code.py deleted file mode 100644 index b3095852ac51..000000000000 --- a/hashes/hamming_code.py +++ /dev/null @@ -1,292 +0,0 @@ -# Author: João Gustavo A. Amorim & Gabriel Kunz -# Author email: joaogustavoamorim@gmail.com and gabriel-kunz@uergs.edu.br -# Coding date: apr 2019 -# Black: True - -""" -* This code implement the Hamming code: - https://en.wikipedia.org/wiki/Hamming_code - In telecommunication, -Hamming codes are a family of linear error-correcting codes. Hamming -codes can detect up to two-bit errors or correct one-bit errors -without detection of uncorrected errors. By contrast, the simple -parity code cannot correct errors, and can detect only an odd number -of bits in error. Hamming codes are perfect codes, that is, they -achieve the highest possible rate for codes with their block length -and minimum distance of three. - -* the implemented code consists of: - * a function responsible for encoding the message (emitterConverter) - * return the encoded message - * a function responsible for decoding the message (receptorConverter) - * return the decoded message and a ack of data integrity - -* how to use: - to be used you must declare how many parity bits (sizePari) - you want to include in the message. - it is desired (for test purposes) to select a bit to be set - as an error. This serves to check whether the code is working correctly. - Lastly, the variable of the message/word that must be desired to be - encoded (text). - -* how this work: - declaration of variables (sizePari, be, text) - - converts the message/word (text) to binary using the - text_to_bits function - encodes the message using the rules of hamming encoding - decodes the message using the rules of hamming encoding - print the original message, the encoded message and the - decoded message - - forces an error in the coded text variable - decodes the message that was forced the error - print the original message, the encoded message, the bit changed - message and the decoded message -""" - -# Imports -import numpy as np - - -# Functions of binary conversion-------------------------------------- -def text_to_bits(text, encoding="utf-8", errors="surrogatepass"): - """ - >>> text_to_bits("msg") - '011011010111001101100111' - """ - bits = bin(int.from_bytes(text.encode(encoding, errors), "big"))[2:] - return bits.zfill(8 * ((len(bits) + 7) // 8)) - - -def text_from_bits(bits, encoding="utf-8", errors="surrogatepass"): - """ - >>> text_from_bits('011011010111001101100111') - 'msg' - """ - n = int(bits, 2) - return n.to_bytes((n.bit_length() + 7) // 8, "big").decode(encoding, errors) or "\0" - - -# Functions of hamming code------------------------------------------- -def emitter_converter(size_par, data): - """ - :param size_par: how many parity bits the message must have - :param data: information bits - :return: message to be transmitted by unreliable medium - - bits of information merged with parity bits - - >>> emitter_converter(4, "101010111111") - ['1', '1', '1', '1', '0', '1', '0', '0', '1', '0', '1', '1', '1', '1', '1', '1'] - >>> emitter_converter(5, "101010111111") - Traceback (most recent call last): - ... - ValueError: size of parity don't match with size of data - """ - if size_par + len(data) <= 2**size_par - (len(data) - 1): - raise ValueError("size of parity don't match with size of data") - - data_out = [] - parity = [] - bin_pos = [bin(x)[2:] for x in range(1, size_par + len(data) + 1)] - - # sorted information data for the size of the output data - data_ord = [] - # data position template + parity - data_out_gab = [] - # parity bit counter - qtd_bp = 0 - # counter position of data bits - cont_data = 0 - - for x in range(1, size_par + len(data) + 1): - # Performs a template of bit positions - who should be given, - # and who should be parity - if qtd_bp < size_par: - if (np.log(x) / np.log(2)).is_integer(): - data_out_gab.append("P") - qtd_bp = qtd_bp + 1 - else: - data_out_gab.append("D") - else: - data_out_gab.append("D") - - # Sorts the data to the new output size - if data_out_gab[-1] == "D": - data_ord.append(data[cont_data]) - cont_data += 1 - else: - data_ord.append(None) - - # Calculates parity - qtd_bp = 0 # parity bit counter - for bp in range(1, size_par + 1): - # Bit counter one for a given parity - cont_bo = 0 - # counter to control the loop reading - for cont_loop, x in enumerate(data_ord): - if x is not None: - try: - aux = (bin_pos[cont_loop])[-1 * (bp)] - except IndexError: - aux = "0" - if aux == "1" and x == "1": - cont_bo += 1 - parity.append(cont_bo % 2) - - qtd_bp += 1 - - # Mount the message - cont_bp = 0 # parity bit counter - for x in range(size_par + len(data)): - if data_ord[x] is None: - data_out.append(str(parity[cont_bp])) - cont_bp += 1 - else: - data_out.append(data_ord[x]) - - return data_out - - -def receptor_converter(size_par, data): - """ - >>> receptor_converter(4, "1111010010111111") - (['1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '1', '1'], True) - """ - # data position template + parity - data_out_gab = [] - # Parity bit counter - qtd_bp = 0 - # Counter p data bit reading - cont_data = 0 - # list of parity received - parity_received = [] - data_output = [] - - for i, item in enumerate(data, 1): - # Performs a template of bit positions - who should be given, - # and who should be parity - if qtd_bp < size_par and (np.log(i) / np.log(2)).is_integer(): - data_out_gab.append("P") - qtd_bp = qtd_bp + 1 - else: - data_out_gab.append("D") - - # Sorts the data to the new output size - if data_out_gab[-1] == "D": - data_output.append(item) - else: - parity_received.append(item) - - # -----------calculates the parity with the data - data_out = [] - parity = [] - bin_pos = [bin(x)[2:] for x in range(1, size_par + len(data_output) + 1)] - - # sorted information data for the size of the output data - data_ord = [] - # Data position feedback + parity - data_out_gab = [] - # Parity bit counter - qtd_bp = 0 - # Counter p data bit reading - cont_data = 0 - - for x in range(1, size_par + len(data_output) + 1): - # Performs a template position of bits - who should be given, - # and who should be parity - if qtd_bp < size_par and (np.log(x) / np.log(2)).is_integer(): - data_out_gab.append("P") - qtd_bp = qtd_bp + 1 - else: - data_out_gab.append("D") - - # Sorts the data to the new output size - if data_out_gab[-1] == "D": - data_ord.append(data_output[cont_data]) - cont_data += 1 - else: - data_ord.append(None) - - # Calculates parity - qtd_bp = 0 # parity bit counter - for bp in range(1, size_par + 1): - # Bit counter one for a certain parity - cont_bo = 0 - for cont_loop, x in enumerate(data_ord): - if x is not None: - try: - aux = (bin_pos[cont_loop])[-1 * (bp)] - except IndexError: - aux = "0" - if aux == "1" and x == "1": - cont_bo += 1 - parity.append(str(cont_bo % 2)) - - qtd_bp += 1 - - # Mount the message - cont_bp = 0 # Parity bit counter - for x in range(size_par + len(data_output)): - if data_ord[x] is None: - data_out.append(str(parity[cont_bp])) - cont_bp += 1 - else: - data_out.append(data_ord[x]) - - ack = parity_received == parity - return data_output, ack - - -# --------------------------------------------------------------------- -""" -# Example how to use - -# number of parity bits -sizePari = 4 - -# location of the bit that will be forced an error -be = 2 - -# Message/word to be encoded and decoded with hamming -# text = input("Enter the word to be read: ") -text = "Message01" - -# Convert the message to binary -binaryText = text_to_bits(text) - -# Prints the binary of the string -print("Text input in binary is '" + binaryText + "'") - -# total transmitted bits -totalBits = len(binaryText) + sizePari -print("Size of data is " + str(totalBits)) - -print("\n --Message exchange--") -print("Data to send ------------> " + binaryText) -dataOut = emitterConverter(sizePari, binaryText) -print("Data converted ----------> " + "".join(dataOut)) -dataReceiv, ack = receptorConverter(sizePari, dataOut) -print( - "Data receive ------------> " - + "".join(dataReceiv) - + "\t\t -- Data integrity: " - + str(ack) -) - - -print("\n --Force error--") -print("Data to send ------------> " + binaryText) -dataOut = emitterConverter(sizePari, binaryText) -print("Data converted ----------> " + "".join(dataOut)) - -# forces error -dataOut[-be] = "1" * (dataOut[-be] == "0") + "0" * (dataOut[-be] == "1") -print("Data after transmission -> " + "".join(dataOut)) -dataReceiv, ack = receptorConverter(sizePari, dataOut) -print( - "Data receive ------------> " - + "".join(dataReceiv) - + "\t\t -- Data integrity: " - + str(ack) -) -""" diff --git a/hashes/luhn.py b/hashes/luhn.py deleted file mode 100644 index a29bf39e3d82..000000000000 --- a/hashes/luhn.py +++ /dev/null @@ -1,43 +0,0 @@ -"""Luhn Algorithm""" - -from __future__ import annotations - - -def is_luhn(string: str) -> bool: - """ - Perform Luhn validation on an input string - Algorithm: - * Double every other digit starting from 2nd last digit. - * Subtract 9 if number is greater than 9. - * Sum the numbers - * - >>> test_cases = (79927398710, 79927398711, 79927398712, 79927398713, - ... 79927398714, 79927398715, 79927398716, 79927398717, 79927398718, - ... 79927398719) - >>> [is_luhn(str(test_case)) for test_case in test_cases] - [False, False, False, True, False, False, False, False, False, False] - """ - check_digit: int - _vector: list[str] = list(string) - __vector, check_digit = _vector[:-1], int(_vector[-1]) - vector: list[int] = [int(digit) for digit in __vector] - - vector.reverse() - for i, digit in enumerate(vector): - if i & 1 == 0: - doubled: int = digit * 2 - if doubled > 9: - doubled -= 9 - check_digit += doubled - else: - check_digit += digit - - return check_digit % 10 == 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - assert is_luhn("79927398713") - assert not is_luhn("79927398714") diff --git a/hashes/md5.py b/hashes/md5.py deleted file mode 100644 index 622a50d290e1..000000000000 --- a/hashes/md5.py +++ /dev/null @@ -1,444 +0,0 @@ -""" -The MD5 algorithm is a hash function that's commonly used as a checksum to -detect data corruption. The algorithm works by processing a given message in -blocks of 512 bits, padding the message as needed. It uses the blocks to operate -a 128-bit state and performs a total of 64 such operations. Note that all values -are little-endian, so inputs are converted as needed. - -Although MD5 was used as a cryptographic hash function in the past, it's since -been cracked, so it shouldn't be used for security purposes. - -For more info, see https://en.wikipedia.org/wiki/MD5 -""" - -from collections.abc import Generator -from math import sin - - -def to_little_endian(string_32: bytes) -> bytes: - """ - Converts the given string to little-endian in groups of 8 chars. - - Arguments: - string_32 {[string]} -- [32-char string] - - Raises: - ValueError -- [input is not 32 char] - - Returns: - 32-char little-endian string - >>> to_little_endian(b'1234567890abcdfghijklmnopqrstuvw') - b'pqrstuvwhijklmno90abcdfg12345678' - >>> to_little_endian(b'1234567890') - Traceback (most recent call last): - ... - ValueError: Input must be of length 32 - """ - if len(string_32) != 32: - raise ValueError("Input must be of length 32") - - little_endian = b"" - for i in [3, 2, 1, 0]: - little_endian += string_32[8 * i : 8 * i + 8] - return little_endian - - -def reformat_hex(i: int) -> bytes: - """ - Converts the given non-negative integer to hex string. - - Example: Suppose the input is the following: - i = 1234 - - The input is 0x000004d2 in hex, so the little-endian hex string is - "d2040000". - - Arguments: - i {[int]} -- [integer] - - Raises: - ValueError -- [input is negative] - - Returns: - 8-char little-endian hex string - - >>> reformat_hex(1234) - b'd2040000' - >>> reformat_hex(666) - b'9a020000' - >>> reformat_hex(0) - b'00000000' - >>> reformat_hex(1234567890) - b'd2029649' - >>> reformat_hex(1234567890987654321) - b'b11c6cb1' - >>> reformat_hex(-1) - Traceback (most recent call last): - ... - ValueError: Input must be non-negative - """ - if i < 0: - raise ValueError("Input must be non-negative") - - hex_rep = format(i, "08x")[-8:] - little_endian_hex = b"" - for j in [3, 2, 1, 0]: - little_endian_hex += hex_rep[2 * j : 2 * j + 2].encode("utf-8") - return little_endian_hex - - -def preprocess(message: bytes) -> bytes: - """ - Preprocesses the message string: - - Convert message to bit string - - Pad bit string to a multiple of 512 chars: - - Append a 1 - - Append 0's until length = 448 (mod 512) - - Append length of original message (64 chars) - - Example: Suppose the input is the following: - message = "a" - - The message bit string is "01100001", which is 8 bits long. Thus, the - bit string needs 439 bits of padding so that - (bit_string + "1" + padding) = 448 (mod 512). - The message length is "000010000...0" in 64-bit little-endian binary. - The combined bit string is then 512 bits long. - - Arguments: - message {[string]} -- [message string] - - Returns: - processed bit string padded to a multiple of 512 chars - - >>> preprocess(b"a") == (b"01100001" + b"1" + - ... (b"0" * 439) + b"00001000" + (b"0" * 56)) - True - >>> preprocess(b"") == b"1" + (b"0" * 447) + (b"0" * 64) - True - """ - bit_string = b"" - for char in message: - bit_string += format(char, "08b").encode("utf-8") - start_len = format(len(bit_string), "064b").encode("utf-8") - - # Pad bit_string to a multiple of 512 chars - bit_string += b"1" - while len(bit_string) % 512 != 448: - bit_string += b"0" - bit_string += to_little_endian(start_len[32:]) + to_little_endian(start_len[:32]) - - return bit_string - - -def get_block_words(bit_string: bytes) -> Generator[list[int], None, None]: - """ - Splits bit string into blocks of 512 chars and yields each block as a list - of 32-bit words - - Example: Suppose the input is the following: - bit_string = - "000000000...0" + # 0x00 (32 bits, padded to the right) - "000000010...0" + # 0x01 (32 bits, padded to the right) - "000000100...0" + # 0x02 (32 bits, padded to the right) - "000000110...0" + # 0x03 (32 bits, padded to the right) - ... - "000011110...0" # 0x0a (32 bits, padded to the right) - - Then len(bit_string) == 512, so there'll be 1 block. The block is split - into 32-bit words, and each word is converted to little endian. The - first word is interpreted as 0 in decimal, the second word is - interpreted as 1 in decimal, etc. - - Thus, block_words == [[0, 1, 2, 3, ..., 15]]. - - Arguments: - bit_string {[string]} -- [bit string with multiple of 512 as length] - - Raises: - ValueError -- [length of bit string isn't multiple of 512] - - Yields: - a list of 16 32-bit words - - >>> test_string = ("".join(format(n << 24, "032b") for n in range(16)) - ... .encode("utf-8")) - >>> list(get_block_words(test_string)) - [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]] - >>> list(get_block_words(test_string * 4)) == [list(range(16))] * 4 - True - >>> list(get_block_words(b"1" * 512)) == [[4294967295] * 16] - True - >>> list(get_block_words(b"")) - [] - >>> list(get_block_words(b"1111")) - Traceback (most recent call last): - ... - ValueError: Input must have length that's a multiple of 512 - """ - if len(bit_string) % 512 != 0: - raise ValueError("Input must have length that's a multiple of 512") - - for pos in range(0, len(bit_string), 512): - block = bit_string[pos : pos + 512] - block_words = [] - for i in range(0, 512, 32): - block_words.append(int(to_little_endian(block[i : i + 32]), 2)) - yield block_words - - -def not_32(i: int) -> int: - """ - Perform bitwise NOT on given int. - - Arguments: - i {[int]} -- [given int] - - Raises: - ValueError -- [input is negative] - - Returns: - Result of bitwise NOT on i - - >>> not_32(34) - 4294967261 - >>> not_32(1234) - 4294966061 - >>> not_32(4294966061) - 1234 - >>> not_32(0) - 4294967295 - >>> not_32(1) - 4294967294 - >>> not_32(-1) - Traceback (most recent call last): - ... - ValueError: Input must be non-negative - """ - if i < 0: - raise ValueError("Input must be non-negative") - - i_str = format(i, "032b") - new_str = "" - for c in i_str: - new_str += "1" if c == "0" else "0" - return int(new_str, 2) - - -def sum_32(a: int, b: int) -> int: - """ - Add two numbers as 32-bit ints. - - Arguments: - a {[int]} -- [first given int] - b {[int]} -- [second given int] - - Returns: - (a + b) as an unsigned 32-bit int - - >>> sum_32(1, 1) - 2 - >>> sum_32(2, 3) - 5 - >>> sum_32(0, 0) - 0 - >>> sum_32(-1, -1) - 4294967294 - >>> sum_32(4294967295, 1) - 0 - """ - return (a + b) % 2**32 - - -def left_rotate_32(i: int, shift: int) -> int: - """ - Rotate the bits of a given int left by a given amount. - - Arguments: - i {[int]} -- [given int] - shift {[int]} -- [shift amount] - - Raises: - ValueError -- [either given int or shift is negative] - - Returns: - `i` rotated to the left by `shift` bits - - >>> left_rotate_32(1234, 1) - 2468 - >>> left_rotate_32(1111, 4) - 17776 - >>> left_rotate_32(2147483648, 1) - 1 - >>> left_rotate_32(2147483648, 3) - 4 - >>> left_rotate_32(4294967295, 4) - 4294967295 - >>> left_rotate_32(1234, 0) - 1234 - >>> left_rotate_32(0, 0) - 0 - >>> left_rotate_32(-1, 0) - Traceback (most recent call last): - ... - ValueError: Input must be non-negative - >>> left_rotate_32(0, -1) - Traceback (most recent call last): - ... - ValueError: Shift must be non-negative - """ - if i < 0: - raise ValueError("Input must be non-negative") - if shift < 0: - raise ValueError("Shift must be non-negative") - return ((i << shift) ^ (i >> (32 - shift))) % 2**32 - - -def md5_me(message: bytes) -> bytes: - """ - Returns the 32-char MD5 hash of a given message. - - Reference: https://en.wikipedia.org/wiki/MD5#Algorithm - - Arguments: - message {[string]} -- [message] - - Returns: - 32-char MD5 hash string - - >>> md5_me(b"") - b'd41d8cd98f00b204e9800998ecf8427e' - >>> md5_me(b"The quick brown fox jumps over the lazy dog") - b'9e107d9d372bb6826bd81d3542a419d6' - >>> md5_me(b"The quick brown fox jumps over the lazy dog.") - b'e4d909c290d0fb1ca068ffaddf22cbd0' - - >>> import hashlib - >>> from string import ascii_letters - >>> msgs = [b"", ascii_letters.encode("utf-8"), "Üñîçø∂é".encode("utf-8"), - ... b"The quick brown fox jumps over the lazy dog."] - >>> all(md5_me(msg) == hashlib.md5(msg).hexdigest().encode("utf-8") for msg in msgs) - True - """ - - # Convert to bit string, add padding and append message length - bit_string = preprocess(message) - - added_consts = [int(2**32 * abs(sin(i + 1))) for i in range(64)] - - # Starting states - a0 = 0x67452301 - b0 = 0xEFCDAB89 - c0 = 0x98BADCFE - d0 = 0x10325476 - - shift_amounts = [ - 7, - 12, - 17, - 22, - 7, - 12, - 17, - 22, - 7, - 12, - 17, - 22, - 7, - 12, - 17, - 22, - 5, - 9, - 14, - 20, - 5, - 9, - 14, - 20, - 5, - 9, - 14, - 20, - 5, - 9, - 14, - 20, - 4, - 11, - 16, - 23, - 4, - 11, - 16, - 23, - 4, - 11, - 16, - 23, - 4, - 11, - 16, - 23, - 6, - 10, - 15, - 21, - 6, - 10, - 15, - 21, - 6, - 10, - 15, - 21, - 6, - 10, - 15, - 21, - ] - - # Process bit string in chunks, each with 16 32-char words - for block_words in get_block_words(bit_string): - a = a0 - b = b0 - c = c0 - d = d0 - - # Hash current chunk - for i in range(64): - if i <= 15: - # f = (b & c) | (not_32(b) & d) # Alternate definition for f - f = d ^ (b & (c ^ d)) - g = i - elif i <= 31: - # f = (d & b) | (not_32(d) & c) # Alternate definition for f - f = c ^ (d & (b ^ c)) - g = (5 * i + 1) % 16 - elif i <= 47: - f = b ^ c ^ d - g = (3 * i + 5) % 16 - else: - f = c ^ (b | not_32(d)) - g = (7 * i) % 16 - f = (f + a + added_consts[i] + block_words[g]) % 2**32 - a = d - d = c - c = b - b = sum_32(b, left_rotate_32(f, shift_amounts[i])) - - # Add hashed chunk to running total - a0 = sum_32(a0, a) - b0 = sum_32(b0, b) - c0 = sum_32(c0, c) - d0 = sum_32(d0, d) - - digest = reformat_hex(a0) + reformat_hex(b0) + reformat_hex(c0) + reformat_hex(d0) - return digest - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/hashes/sdbm.py b/hashes/sdbm.py deleted file mode 100644 index a5abc6f3185b..000000000000 --- a/hashes/sdbm.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -This algorithm was created for sdbm (a public-domain reimplementation of ndbm) -database library. -It was found to do well in scrambling bits, causing better distribution of the keys -and fewer splits. -It also happens to be a good general hashing function with good distribution. -The actual function (pseudo code) is: - for i in i..len(str): - hash(i) = hash(i - 1) * 65599 + str[i]; - -What is included below is the faster version used in gawk. [there is even a faster, -duff-device version] -The magic constant 65599 was picked out of thin air while experimenting with -different constants. -It turns out to be a prime. -This is one of the algorithms used in berkeley db (see sleepycat) and elsewhere. - -source: http://www.cse.yorku.ca/~oz/hash.html -""" - - -def sdbm(plain_text: str) -> int: - """ - Function implements sdbm hash, easy to use, great for bits scrambling. - iterates over each character in the given string and applies function to each of - them. - - >>> sdbm('Algorithms') - 1462174910723540325254304520539387479031000036 - - >>> sdbm('scramble bits') - 730247649148944819640658295400555317318720608290373040936089 - """ - hash_value = 0 - for plain_chr in plain_text: - hash_value = ( - ord(plain_chr) + (hash_value << 6) + (hash_value << 16) - hash_value - ) - return hash_value diff --git a/hashes/sha1.py b/hashes/sha1.py deleted file mode 100644 index 75a1423e9b5f..000000000000 --- a/hashes/sha1.py +++ /dev/null @@ -1,168 +0,0 @@ -""" -Implementation of the SHA1 hash function and gives utilities to find hash of string or -hash of text from a file. Also contains a Test class to verify that the generated hash -matches what is returned by the hashlib library - -Usage: python sha1.py --string "Hello World!!" - python sha1.py --file "hello_world.txt" - When run without any arguments, it prints the hash of the string "Hello World!! - Welcome to Cryptography" - -SHA1 hash or SHA1 sum of a string is a cryptographic function, which means it is easy -to calculate forwards but extremely difficult to calculate backwards. What this means -is you can easily calculate the hash of a string, but it is extremely difficult to know -the original string if you have its hash. This property is useful for communicating -securely, send encrypted messages and is very useful in payment systems, blockchain and -cryptocurrency etc. - -The algorithm as described in the reference: -First we start with a message. The message is padded and the length of the message -is added to the end. It is then split into blocks of 512 bits or 64 bytes. The blocks -are then processed one at a time. Each block must be expanded and compressed. -The value after each compression is added to a 160-bit buffer called the current hash -state. After the last block is processed, the current hash state is returned as -the final hash. - -Reference: https://deadhacker.com/2006/02/21/sha-1-illustrated/ -""" - -import argparse -import hashlib # hashlib is only used inside the Test class -import struct - - -class SHA1Hash: - """ - Class to contain the entire pipeline for SHA1 hashing algorithm - >>> SHA1Hash(bytes('Allan', 'utf-8')).final_hash() - '872af2d8ac3d8695387e7c804bf0e02c18df9e6e' - """ - - def __init__(self, data): - """ - Initiates the variables data and h. h is a list of 5 8-digit hexadecimal - numbers corresponding to - (1732584193, 4023233417, 2562383102, 271733878, 3285377520) - respectively. We will start with this as a message digest. 0x is how you write - hexadecimal numbers in Python - """ - self.data = data - self.h = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0] - - @staticmethod - def rotate(n, b): - """ - Static method to be used inside other methods. Left rotates n by b. - >>> SHA1Hash('').rotate(12,2) - 48 - """ - return ((n << b) | (n >> (32 - b))) & 0xFFFFFFFF - - def padding(self): - """ - Pads the input message with zeros so that padded_data has 64 bytes or 512 bits - """ - padding = b"\x80" + b"\x00" * (63 - (len(self.data) + 8) % 64) - padded_data = self.data + padding + struct.pack(">Q", 8 * len(self.data)) - return padded_data - - def split_blocks(self): - """ - Returns a list of bytestrings each of length 64 - """ - return [ - self.padded_data[i : i + 64] for i in range(0, len(self.padded_data), 64) - ] - - # @staticmethod - def expand_block(self, block): - """ - Takes a bytestring-block of length 64, unpacks it to a list of integers and - returns a list of 80 integers after some bit operations - """ - w = list(struct.unpack(">16L", block)) + [0] * 64 - for i in range(16, 80): - w[i] = self.rotate((w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]), 1) - return w - - def final_hash(self): - """ - Calls all the other methods to process the input. Pads the data, then splits - into blocks and then does a series of operations for each block (including - expansion). - For each block, the variable h that was initialized is copied to a,b,c,d,e - and these 5 variables a,b,c,d,e undergo several changes. After all the blocks - are processed, these 5 variables are pairwise added to h ie a to h[0], b to h[1] - and so on. This h becomes our final hash which is returned. - """ - self.padded_data = self.padding() - self.blocks = self.split_blocks() - for block in self.blocks: - expanded_block = self.expand_block(block) - a, b, c, d, e = self.h - for i in range(80): - if 0 <= i < 20: - f = (b & c) | ((~b) & d) - k = 0x5A827999 - elif 20 <= i < 40: - f = b ^ c ^ d - k = 0x6ED9EBA1 - elif 40 <= i < 60: - f = (b & c) | (b & d) | (c & d) - k = 0x8F1BBCDC - elif 60 <= i < 80: - f = b ^ c ^ d - k = 0xCA62C1D6 - a, b, c, d, e = ( - self.rotate(a, 5) + f + e + k + expanded_block[i] & 0xFFFFFFFF, - a, - self.rotate(b, 30), - c, - d, - ) - self.h = ( - self.h[0] + a & 0xFFFFFFFF, - self.h[1] + b & 0xFFFFFFFF, - self.h[2] + c & 0xFFFFFFFF, - self.h[3] + d & 0xFFFFFFFF, - self.h[4] + e & 0xFFFFFFFF, - ) - return ("{:08x}" * 5).format(*self.h) - - -def test_sha1_hash(): - msg = b"Test String" - assert SHA1Hash(msg).final_hash() == hashlib.sha1(msg).hexdigest() # noqa: S324 - - -def main(): - """ - Provides option 'string' or 'file' to take input and prints the calculated SHA1 - hash. unittest.main() has been commented out because we probably don't want to run - the test each time. - """ - # unittest.main() - parser = argparse.ArgumentParser(description="Process some strings or files") - parser.add_argument( - "--string", - dest="input_string", - default="Hello World!! Welcome to Cryptography", - help="Hash the string", - ) - parser.add_argument("--file", dest="input_file", help="Hash contents of a file") - args = parser.parse_args() - input_string = args.input_string - # In any case hash input should be a bytestring - if args.input_file: - with open(args.input_file, "rb") as f: - hash_input = f.read() - else: - hash_input = bytes(input_string, "utf-8") - print(SHA1Hash(hash_input).final_hash()) - - -if __name__ == "__main__": - main() - import doctest - - doctest.testmod() diff --git a/hashes/sha256.py b/hashes/sha256.py deleted file mode 100644 index bcc83edca480..000000000000 --- a/hashes/sha256.py +++ /dev/null @@ -1,248 +0,0 @@ -# Author: M. Yathurshan -# Black Formatter: True - -""" -Implementation of SHA256 Hash function in a Python class and provides utilities -to find hash of string or hash of text from a file. - -Usage: python sha256.py --string "Hello World!!" - python sha256.py --file "hello_world.txt" - When run without any arguments, - it prints the hash of the string "Hello World!! Welcome to Cryptography" - -References: -https://qvault.io/cryptography/how-sha-2-works-step-by-step-sha-256/ -https://en.wikipedia.org/wiki/SHA-2 -""" - -import argparse -import struct -import unittest - - -class SHA256: - """ - Class to contain the entire pipeline for SHA1 Hashing Algorithm - - >>> SHA256(b'Python').hash - '18885f27b5af9012df19e496460f9294d5ab76128824c6f993787004f6d9a7db' - - >>> SHA256(b'hello world').hash - 'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9' - """ - - def __init__(self, data: bytes) -> None: - self.data = data - - # Initialize hash values - self.hashes = [ - 0x6A09E667, - 0xBB67AE85, - 0x3C6EF372, - 0xA54FF53A, - 0x510E527F, - 0x9B05688C, - 0x1F83D9AB, - 0x5BE0CD19, - ] - - # Initialize round constants - self.round_constants = [ - 0x428A2F98, - 0x71374491, - 0xB5C0FBCF, - 0xE9B5DBA5, - 0x3956C25B, - 0x59F111F1, - 0x923F82A4, - 0xAB1C5ED5, - 0xD807AA98, - 0x12835B01, - 0x243185BE, - 0x550C7DC3, - 0x72BE5D74, - 0x80DEB1FE, - 0x9BDC06A7, - 0xC19BF174, - 0xE49B69C1, - 0xEFBE4786, - 0x0FC19DC6, - 0x240CA1CC, - 0x2DE92C6F, - 0x4A7484AA, - 0x5CB0A9DC, - 0x76F988DA, - 0x983E5152, - 0xA831C66D, - 0xB00327C8, - 0xBF597FC7, - 0xC6E00BF3, - 0xD5A79147, - 0x06CA6351, - 0x14292967, - 0x27B70A85, - 0x2E1B2138, - 0x4D2C6DFC, - 0x53380D13, - 0x650A7354, - 0x766A0ABB, - 0x81C2C92E, - 0x92722C85, - 0xA2BFE8A1, - 0xA81A664B, - 0xC24B8B70, - 0xC76C51A3, - 0xD192E819, - 0xD6990624, - 0xF40E3585, - 0x106AA070, - 0x19A4C116, - 0x1E376C08, - 0x2748774C, - 0x34B0BCB5, - 0x391C0CB3, - 0x4ED8AA4A, - 0x5B9CCA4F, - 0x682E6FF3, - 0x748F82EE, - 0x78A5636F, - 0x84C87814, - 0x8CC70208, - 0x90BEFFFA, - 0xA4506CEB, - 0xBEF9A3F7, - 0xC67178F2, - ] - - self.preprocessed_data = self.preprocessing(self.data) - self.final_hash() - - @staticmethod - def preprocessing(data: bytes) -> bytes: - padding = b"\x80" + (b"\x00" * (63 - (len(data) + 8) % 64)) - big_endian_integer = struct.pack(">Q", (len(data) * 8)) - return data + padding + big_endian_integer - - def final_hash(self) -> None: - # Convert into blocks of 64 bytes - self.blocks = [ - self.preprocessed_data[x : x + 64] - for x in range(0, len(self.preprocessed_data), 64) - ] - - for block in self.blocks: - # Convert the given block into a list of 4 byte integers - words = list(struct.unpack(">16L", block)) - # add 48 0-ed integers - words += [0] * 48 - - a, b, c, d, e, f, g, h = self.hashes - - for index in range(64): - if index > 15: - # modify the zero-ed indexes at the end of the array - s0 = ( - self.ror(words[index - 15], 7) - ^ self.ror(words[index - 15], 18) - ^ (words[index - 15] >> 3) - ) - s1 = ( - self.ror(words[index - 2], 17) - ^ self.ror(words[index - 2], 19) - ^ (words[index - 2] >> 10) - ) - - words[index] = ( - words[index - 16] + s0 + words[index - 7] + s1 - ) % 0x100000000 - - # Compression - s1 = self.ror(e, 6) ^ self.ror(e, 11) ^ self.ror(e, 25) - ch = (e & f) ^ ((~e & (0xFFFFFFFF)) & g) - temp1 = ( - h + s1 + ch + self.round_constants[index] + words[index] - ) % 0x100000000 - s0 = self.ror(a, 2) ^ self.ror(a, 13) ^ self.ror(a, 22) - maj = (a & b) ^ (a & c) ^ (b & c) - temp2 = (s0 + maj) % 0x100000000 - - h, g, f, e, d, c, b, a = ( - g, - f, - e, - ((d + temp1) % 0x100000000), - c, - b, - a, - ((temp1 + temp2) % 0x100000000), - ) - - mutated_hash_values = [a, b, c, d, e, f, g, h] - - # Modify final values - self.hashes = [ - ((element + mutated_hash_values[index]) % 0x100000000) - for index, element in enumerate(self.hashes) - ] - - self.hash = "".join([hex(value)[2:].zfill(8) for value in self.hashes]) - - def ror(self, value: int, rotations: int) -> int: - """ - Right rotate a given unsigned number by a certain amount of rotations - """ - return 0xFFFFFFFF & (value << (32 - rotations)) | (value >> rotations) - - -class SHA256HashTest(unittest.TestCase): - """ - Test class for the SHA256 class. Inherits the TestCase class from unittest - """ - - def test_match_hashes(self) -> None: - import hashlib - - msg = bytes("Test String", "utf-8") - assert SHA256(msg).hash == hashlib.sha256(msg).hexdigest() - - -def main() -> None: - """ - Provides option 'string' or 'file' to take input - and prints the calculated SHA-256 hash - """ - - # unittest.main() - - import doctest - - doctest.testmod() - - parser = argparse.ArgumentParser() - parser.add_argument( - "-s", - "--string", - dest="input_string", - default="Hello World!! Welcome to Cryptography", - help="Hash the string", - ) - parser.add_argument( - "-f", "--file", dest="input_file", help="Hash contents of a file" - ) - - args = parser.parse_args() - - input_string = args.input_string - - # hash input should be a bytestring - if args.input_file: - with open(args.input_file, "rb") as f: - hash_input = f.read() - else: - hash_input = bytes(input_string, "utf-8") - - print(SHA256(hash_input).hash) - - -if __name__ == "__main__": - main() diff --git a/knapsack/README.md b/knapsack/README.md deleted file mode 100644 index f31e5f591412..000000000000 --- a/knapsack/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# A naive recursive implementation of 0-1 Knapsack Problem - -This overview is taken from: - - https://en.wikipedia.org/wiki/Knapsack_problem - ---- - -## Overview - -The knapsack problem is a problem in combinatorial optimization: Given a set of items, each with a weight and a value, determine the number of each item to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible. It derives its name from the problem faced by someone who is constrained by a fixed-size knapsack and must fill it with the most valuable items. The problem often arises in resource allocation where the decision makers have to choose from a set of non-divisible projects or tasks under a fixed budget or time constraint, respectively. - -The knapsack problem has been studied for more than a century, with early works dating as far back as 1897 The name "knapsack problem" dates back to the early works of mathematician Tobias Dantzig (1884–1956), and refers to the commonplace problem of packing the most valuable or useful items without overloading the luggage. - ---- - -## Documentation - -This module uses docstrings to enable the use of Python's in-built `help(...)` function. -For instance, try `help(Vector)`, `help(unit_basis_vector)`, and `help(CLASSNAME.METHODNAME)`. - ---- - -## Usage - -Import the module `knapsack.py` from the **.** directory into your project. - ---- - -## Tests - -`.` contains Python unit tests which can be run with `python3 -m unittest -v`. diff --git a/knapsack/__init__.py b/knapsack/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/knapsack/greedy_knapsack.py b/knapsack/greedy_knapsack.py deleted file mode 100644 index ed6399c740c8..000000000000 --- a/knapsack/greedy_knapsack.py +++ /dev/null @@ -1,98 +0,0 @@ -# To get an insight into Greedy Algorithm through the Knapsack problem - - -""" -A shopkeeper has bags of wheat that each have different weights and different profits. -eg. -profit 5 8 7 1 12 3 4 -weight 2 7 1 6 4 2 5 -max_weight 100 - -Constraints: -max_weight > 0 -profit[i] >= 0 -weight[i] >= 0 -Calculate the maximum profit that the shopkeeper can make given maxmum weight that can -be carried. -""" - - -def calc_profit(profit: list, weight: list, max_weight: int) -> int: - """ - Function description is as follows- - :param profit: Take a list of profits - :param weight: Take a list of weight if bags corresponding to the profits - :param max_weight: Maximum weight that could be carried - :return: Maximum expected gain - - >>> calc_profit([1, 2, 3], [3, 4, 5], 15) - 6 - >>> calc_profit([10, 9 , 8], [3 ,4 , 5], 25) - 27 - """ - if len(profit) != len(weight): - raise ValueError("The length of profit and weight must be same.") - if max_weight <= 0: - raise ValueError("max_weight must greater than zero.") - if any(p < 0 for p in profit): - raise ValueError("Profit can not be negative.") - if any(w < 0 for w in weight): - raise ValueError("Weight can not be negative.") - - # List created to store profit gained for the 1kg in case of each weight - # respectively. Calculate and append profit/weight for each element. - profit_by_weight = [p / w for p, w in zip(profit, weight)] - - # Creating a copy of the list and sorting profit/weight in ascending order - sorted_profit_by_weight = sorted(profit_by_weight) - - # declaring useful variables - length = len(sorted_profit_by_weight) - limit = 0 - gain = 0 - i = 0 - - # loop till the total weight do not reach max limit e.g. 15 kg and till i<length - while limit <= max_weight and i < length: - # flag value for encountered greatest element in sorted_profit_by_weight - biggest_profit_by_weight = sorted_profit_by_weight[length - i - 1] - """ - Calculate the index of the biggest_profit_by_weight in profit_by_weight list. - This will give the index of the first encountered element which is same as of - biggest_profit_by_weight. There may be one or more values same as that of - biggest_profit_by_weight but index always encounter the very first element - only. To curb this alter the values in profit_by_weight once they are used - here it is done to -1 because neither profit nor weight can be in negative. - """ - index = profit_by_weight.index(biggest_profit_by_weight) - profit_by_weight[index] = -1 - - # check if the weight encountered is less than the total weight - # encountered before. - if max_weight - limit >= weight[index]: - limit += weight[index] - # Adding profit gained for the given weight 1 === - # weight[index]/weight[index] - gain += 1 * profit[index] - else: - # Since the weight encountered is greater than limit, therefore take the - # required number of remaining kgs and calculate profit for it. - # weight remaining / weight[index] - gain += (max_weight - limit) / weight[index] * profit[index] - break - i += 1 - return gain - - -if __name__ == "__main__": - print( - "Input profits, weights, and then max_weight (all positive ints) separated by " - "spaces." - ) - - profit = [int(x) for x in input("Input profits separated by spaces: ").split()] - weight = [int(x) for x in input("Input weights separated by spaces: ").split()] - max_weight = int(input("Max weight allowed: ")) - - # Function Call - calc_profit(profit, weight, max_weight) diff --git a/knapsack/knapsack.py b/knapsack/knapsack.py deleted file mode 100644 index bb507be1ba3c..000000000000 --- a/knapsack/knapsack.py +++ /dev/null @@ -1,47 +0,0 @@ -"""A naive recursive implementation of 0-1 Knapsack Problem -https://en.wikipedia.org/wiki/Knapsack_problem -""" - -from __future__ import annotations - - -def knapsack(capacity: int, weights: list[int], values: list[int], counter: int) -> int: - """ - Returns the maximum value that can be put in a knapsack of a capacity cap, - whereby each weight w has a specific value val. - - >>> cap = 50 - >>> val = [60, 100, 120] - >>> w = [10, 20, 30] - >>> c = len(val) - >>> knapsack(cap, w, val, c) - 220 - - The result is 220 cause the values of 100 and 120 got the weight of 50 - which is the limit of the capacity. - """ - - # Base Case - if counter == 0 or capacity == 0: - return 0 - - # If weight of the nth item is more than Knapsack of capacity, - # then this item cannot be included in the optimal solution, - # else return the maximum of two cases: - # (1) nth item included - # (2) not included - if weights[counter - 1] > capacity: - return knapsack(capacity, weights, values, counter - 1) - else: - left_capacity = capacity - weights[counter - 1] - new_value_included = values[counter - 1] + knapsack( - left_capacity, weights, values, counter - 1 - ) - without_new_value = knapsack(capacity, weights, values, counter - 1) - return max(new_value_included, without_new_value) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/knapsack/recursive_approach_knapsack.py b/knapsack/recursive_approach_knapsack.py deleted file mode 100644 index 9a8ed1886a5b..000000000000 --- a/knapsack/recursive_approach_knapsack.py +++ /dev/null @@ -1,51 +0,0 @@ -# To get an insight into naive recursive way to solve the Knapsack problem - - -""" -A shopkeeper has bags of wheat that each have different weights and different profits. -eg. -no_of_items 4 -profit 5 4 8 6 -weight 1 2 4 5 -max_weight 5 -Constraints: -max_weight > 0 -profit[i] >= 0 -weight[i] >= 0 -Calculate the maximum profit that the shopkeeper can make given maxmum weight that can -be carried. -""" - - -def knapsack( - weights: list, values: list, number_of_items: int, max_weight: int, index: int -) -> int: - """ - Function description is as follows- - :param weights: Take a list of weights - :param values: Take a list of profits corresponding to the weights - :param number_of_items: number of items available to pick from - :param max_weight: Maximum weight that could be carried - :param index: the element we are looking at - :return: Maximum expected gain - >>> knapsack([1, 2, 4, 5], [5, 4, 8, 6], 4, 5, 0) - 13 - >>> knapsack([3 ,4 , 5], [10, 9 , 8], 3, 25, 0) - 27 - """ - if index == number_of_items: - return 0 - ans1 = 0 - ans2 = 0 - ans1 = knapsack(weights, values, number_of_items, max_weight, index + 1) - if weights[index] <= max_weight: - ans2 = values[index] + knapsack( - weights, values, number_of_items, max_weight - weights[index], index + 1 - ) - return max(ans1, ans2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/knapsack/tests/__init__.py b/knapsack/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/knapsack/tests/test_greedy_knapsack.py b/knapsack/tests/test_greedy_knapsack.py deleted file mode 100644 index e6a40084109e..000000000000 --- a/knapsack/tests/test_greedy_knapsack.py +++ /dev/null @@ -1,75 +0,0 @@ -import unittest - -import pytest - -from knapsack import greedy_knapsack as kp - - -class TestClass(unittest.TestCase): - """ - Test cases for knapsack - """ - - def test_sorted(self): - """ - kp.calc_profit takes the required argument (profit, weight, max_weight) - and returns whether the answer matches to the expected ones - """ - profit = [10, 20, 30, 40, 50, 60] - weight = [2, 4, 6, 8, 10, 12] - max_weight = 100 - assert kp.calc_profit(profit, weight, max_weight) == 210 - - def test_negative_max_weight(self): - """ - Returns ValueError for any negative max_weight value - :return: ValueError - """ - # profit = [10, 20, 30, 40, 50, 60] - # weight = [2, 4, 6, 8, 10, 12] - # max_weight = -15 - pytest.raises(ValueError, match="max_weight must greater than zero.") - - def test_negative_profit_value(self): - """ - Returns ValueError for any negative profit value in the list - :return: ValueError - """ - # profit = [10, -20, 30, 40, 50, 60] - # weight = [2, 4, 6, 8, 10, 12] - # max_weight = 15 - pytest.raises(ValueError, match="Weight can not be negative.") - - def test_negative_weight_value(self): - """ - Returns ValueError for any negative weight value in the list - :return: ValueError - """ - # profit = [10, 20, 30, 40, 50, 60] - # weight = [2, -4, 6, -8, 10, 12] - # max_weight = 15 - pytest.raises(ValueError, match="Profit can not be negative.") - - def test_null_max_weight(self): - """ - Returns ValueError for any zero max_weight value - :return: ValueError - """ - # profit = [10, 20, 30, 40, 50, 60] - # weight = [2, 4, 6, 8, 10, 12] - # max_weight = null - pytest.raises(ValueError, match="max_weight must greater than zero.") - - def test_unequal_list_length(self): - """ - Returns IndexError if length of lists (profit and weight) are unequal. - :return: IndexError - """ - # profit = [10, 20, 30, 40, 50] - # weight = [2, 4, 6, 8, 10, 12] - # max_weight = 100 - pytest.raises(IndexError, match="The length of profit and weight must be same.") - - -if __name__ == "__main__": - unittest.main() diff --git a/knapsack/tests/test_knapsack.py b/knapsack/tests/test_knapsack.py deleted file mode 100644 index 7bfb8780627b..000000000000 --- a/knapsack/tests/test_knapsack.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Created on Fri Oct 16 09:31:07 2020 - -@author: Dr. Tobias Schröder -@license: MIT-license - -This file contains the test-suite for the knapsack problem. -""" - -import unittest - -from knapsack import knapsack as k - - -class Test(unittest.TestCase): - def test_base_case(self): - """ - test for the base case - """ - cap = 0 - val = [0] - w = [0] - c = len(val) - assert k.knapsack(cap, w, val, c) == 0 - - val = [60] - w = [10] - c = len(val) - assert k.knapsack(cap, w, val, c) == 0 - - def test_easy_case(self): - """ - test for the base case - """ - cap = 3 - val = [1, 2, 3] - w = [3, 2, 1] - c = len(val) - assert k.knapsack(cap, w, val, c) == 5 - - def test_knapsack(self): - """ - test for the knapsack - """ - cap = 50 - val = [60, 100, 120] - w = [10, 20, 30] - c = len(val) - assert k.knapsack(cap, w, val, c) == 220 - - -if __name__ == "__main__": - unittest.main() diff --git a/linear_algebra/README.md b/linear_algebra/README.md deleted file mode 100644 index 35b50b5e0f0a..000000000000 --- a/linear_algebra/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Linear algebra library for Python - -This module contains classes and functions for doing linear algebra. - ---- - -## Overview - -### class Vector -- - - This class represents a vector of arbitrary size and related operations. - - **Overview of the methods:** - - - constructor(components) : init the vector - - set(components) : changes the vector components. - - \_\_str\_\_() : toString method - - component(i): gets the i-th component (0-indexed) - - \_\_len\_\_() : gets the size / length of the vector (number of components) - - euclidean_length() : returns the eulidean length of the vector - - operator + : vector addition - - operator - : vector subtraction - - operator * : scalar multiplication and dot product - - copy() : copies this vector and returns it - - change_component(pos,value) : changes the specified component - -- function zero_vector(dimension) - - returns a zero vector of 'dimension' -- function unit_basis_vector(dimension, pos) - - returns a unit basis vector with a one at index 'pos' (0-indexed) -- function axpy(scalar, vector1, vector2) - - computes the axpy operation -- function random_vector(N, a, b) - - returns a random vector of size N, with random integer components between 'a' and 'b' inclusive - -### class Matrix -- - - This class represents a matrix of arbitrary size and operations on it. - - **Overview of the methods:** - - - \_\_str\_\_() : returns a string representation - - operator * : implements the matrix vector multiplication - implements the matrix-scalar multiplication. - - change_component(x, y, value) : changes the specified component. - - component(x, y) : returns the specified component. - - width() : returns the width of the matrix - - height() : returns the height of the matrix - - determinant() : returns the determinant of the matrix if it is square - - operator + : implements the matrix-addition. - - operator - : implements the matrix-subtraction - -- function square_zero_matrix(N) - - returns a square zero-matrix of dimension NxN -- function random_matrix(W, H, a, b) - - returns a random matrix WxH with integer components between 'a' and 'b' inclusive ---- - -## Documentation - -This module uses docstrings to enable the use of Python's in-built `help(...)` function. -For instance, try `help(Vector)`, `help(unit_basis_vector)`, and `help(CLASSNAME.METHODNAME)`. - ---- - -## Usage - -Import the module `lib.py` from the **src** directory into your project. -Alternatively, you can directly use the Python bytecode file `lib.pyc`. - ---- - -## Tests - -`src/tests.py` contains Python unit tests which can be run with `python3 -m unittest -v`. diff --git a/linear_algebra/__init__.py b/linear_algebra/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/linear_algebra/gaussian_elimination.py b/linear_algebra/gaussian_elimination.py deleted file mode 100644 index 724773c0db98..000000000000 --- a/linear_algebra/gaussian_elimination.py +++ /dev/null @@ -1,85 +0,0 @@ -""" -Gaussian elimination method for solving a system of linear equations. -Gaussian elimination - https://en.wikipedia.org/wiki/Gaussian_elimination -""" - -import numpy as np -from numpy import float64 -from numpy.typing import NDArray - - -def retroactive_resolution( - coefficients: NDArray[float64], vector: NDArray[float64] -) -> NDArray[float64]: - """ - This function performs a retroactive linear system resolution - for triangular matrix - - Examples: - 2x1 + 2x2 - 1x3 = 5 2x1 + 2x2 = -1 - 0x1 - 2x2 - 1x3 = -7 0x1 - 2x2 = -1 - 0x1 + 0x2 + 5x3 = 15 - >>> gaussian_elimination([[2, 2, -1], [0, -2, -1], [0, 0, 5]], [[5], [-7], [15]]) - array([[2.], - [2.], - [3.]]) - >>> gaussian_elimination([[2, 2], [0, -2]], [[-1], [-1]]) - array([[-1. ], - [ 0.5]]) - """ - - rows, columns = np.shape(coefficients) - - x: NDArray[float64] = np.zeros((rows, 1), dtype=float) - for row in reversed(range(rows)): - total = np.dot(coefficients[row, row + 1 :], x[row + 1 :]) - x[row, 0] = (vector[row][0] - total[0]) / coefficients[row, row] - - return x - - -def gaussian_elimination( - coefficients: NDArray[float64], vector: NDArray[float64] -) -> NDArray[float64]: - """ - This function performs Gaussian elimination method - - Examples: - 1x1 - 4x2 - 2x3 = -2 1x1 + 2x2 = 5 - 5x1 + 2x2 - 2x3 = -3 5x1 + 2x2 = 5 - 1x1 - 1x2 + 0x3 = 4 - >>> gaussian_elimination([[1, -4, -2], [5, 2, -2], [1, -1, 0]], [[-2], [-3], [4]]) - array([[ 2.3 ], - [-1.7 ], - [ 5.55]]) - >>> gaussian_elimination([[1, 2], [5, 2]], [[5], [5]]) - array([[0. ], - [2.5]]) - """ - # coefficients must to be a square matrix so we need to check first - rows, columns = np.shape(coefficients) - if rows != columns: - return np.array((), dtype=float) - - # augmented matrix - augmented_mat: NDArray[float64] = np.concatenate((coefficients, vector), axis=1) - augmented_mat = augmented_mat.astype("float64") - - # scale the matrix leaving it triangular - for row in range(rows - 1): - pivot = augmented_mat[row, row] - for col in range(row + 1, columns): - factor = augmented_mat[col, row] / pivot - augmented_mat[col, :] -= factor * augmented_mat[row, :] - - x = retroactive_resolution( - augmented_mat[:, 0:columns], augmented_mat[:, columns : columns + 1] - ) - - return x - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/linear_algebra/jacobi_iteration_method.py b/linear_algebra/jacobi_iteration_method.py deleted file mode 100644 index 2cc9c103018b..000000000000 --- a/linear_algebra/jacobi_iteration_method.py +++ /dev/null @@ -1,204 +0,0 @@ -""" -Jacobi Iteration Method - https://en.wikipedia.org/wiki/Jacobi_method -""" - -from __future__ import annotations - -import numpy as np -from numpy import float64 -from numpy.typing import NDArray - - -# Method to find solution of system of linear equations -def jacobi_iteration_method( - coefficient_matrix: NDArray[float64], - constant_matrix: NDArray[float64], - init_val: list[float], - iterations: int, -) -> list[float]: - """ - Jacobi Iteration Method: - An iterative algorithm to determine the solutions of strictly diagonally dominant - system of linear equations - - 4x1 + x2 + x3 = 2 - x1 + 5x2 + 2x3 = -6 - x1 + 2x2 + 4x3 = -4 - - x_init = [0.5, -0.5 , -0.5] - - Examples: - - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) - >>> constant = np.array([[2], [-6], [-4]]) - >>> init_val = [0.5, -0.5, -0.5] - >>> iterations = 3 - >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) - [0.909375, -1.14375, -0.7484375] - - - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2]]) - >>> constant = np.array([[2], [-6], [-4]]) - >>> init_val = [0.5, -0.5, -0.5] - >>> iterations = 3 - >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) - Traceback (most recent call last): - ... - ValueError: Coefficient matrix dimensions must be nxn but received 2x3 - - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) - >>> constant = np.array([[2], [-6]]) - >>> init_val = [0.5, -0.5, -0.5] - >>> iterations = 3 - >>> jacobi_iteration_method( - ... coefficient, constant, init_val, iterations - ... ) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Coefficient and constant matrices dimensions must be nxn and nx1 but - received 3x3 and 2x1 - - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) - >>> constant = np.array([[2], [-6], [-4]]) - >>> init_val = [0.5, -0.5] - >>> iterations = 3 - >>> jacobi_iteration_method( - ... coefficient, constant, init_val, iterations - ... ) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Number of initial values must be equal to number of rows in coefficient - matrix but received 2 and 3 - - >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]]) - >>> constant = np.array([[2], [-6], [-4]]) - >>> init_val = [0.5, -0.5, -0.5] - >>> iterations = 0 - >>> jacobi_iteration_method(coefficient, constant, init_val, iterations) - Traceback (most recent call last): - ... - ValueError: Iterations must be at least 1 - """ - - rows1, cols1 = coefficient_matrix.shape - rows2, cols2 = constant_matrix.shape - - if rows1 != cols1: - msg = f"Coefficient matrix dimensions must be nxn but received {rows1}x{cols1}" - raise ValueError(msg) - - if cols2 != 1: - msg = f"Constant matrix must be nx1 but received {rows2}x{cols2}" - raise ValueError(msg) - - if rows1 != rows2: - msg = ( - "Coefficient and constant matrices dimensions must be nxn and nx1 but " - f"received {rows1}x{cols1} and {rows2}x{cols2}" - ) - raise ValueError(msg) - - if len(init_val) != rows1: - msg = ( - "Number of initial values must be equal to number of rows in coefficient " - f"matrix but received {len(init_val)} and {rows1}" - ) - raise ValueError(msg) - - if iterations <= 0: - raise ValueError("Iterations must be at least 1") - - table: NDArray[float64] = np.concatenate( - (coefficient_matrix, constant_matrix), axis=1 - ) - - rows, cols = table.shape - - strictly_diagonally_dominant(table) - - """ - # Iterates the whole matrix for given number of times - for _ in range(iterations): - new_val = [] - for row in range(rows): - temp = 0 - for col in range(cols): - if col == row: - denom = table[row][col] - elif col == cols - 1: - val = table[row][col] - else: - temp += (-1) * table[row][col] * init_val[col] - temp = (temp + val) / denom - new_val.append(temp) - init_val = new_val - """ - - # denominator - a list of values along the diagonal - denominator = np.diag(coefficient_matrix) - - # val_last - values of the last column of the table array - val_last = table[:, -1] - - # masks - boolean mask of all strings without diagonal - # elements array coefficient_matrix - masks = ~np.eye(coefficient_matrix.shape[0], dtype=bool) - - # no_diagonals - coefficient_matrix array values without diagonal elements - no_diagonals = coefficient_matrix[masks].reshape(-1, rows - 1) - - # Here we get 'i_col' - these are the column numbers, for each row - # without diagonal elements, except for the last column. - i_row, i_col = np.where(masks) - ind = i_col.reshape(-1, rows - 1) - - #'i_col' is converted to a two-dimensional list 'ind', which will be - # used to make selections from 'init_val' ('arr' array see below). - - # Iterates the whole matrix for given number of times - for _ in range(iterations): - arr = np.take(init_val, ind) - sum_product_rows = np.sum((-1) * no_diagonals * arr, axis=1) - new_val = (sum_product_rows + val_last) / denominator - init_val = new_val - - return new_val.tolist() - - -# Checks if the given matrix is strictly diagonally dominant -def strictly_diagonally_dominant(table: NDArray[float64]) -> bool: - """ - >>> table = np.array([[4, 1, 1, 2], [1, 5, 2, -6], [1, 2, 4, -4]]) - >>> strictly_diagonally_dominant(table) - True - - >>> table = np.array([[4, 1, 1, 2], [1, 5, 2, -6], [1, 2, 3, -4]]) - >>> strictly_diagonally_dominant(table) - Traceback (most recent call last): - ... - ValueError: Coefficient matrix is not strictly diagonally dominant - """ - - rows, cols = table.shape - - is_diagonally_dominant = True - - for i in range(rows): - total = 0 - for j in range(cols - 1): - if i == j: - continue - else: - total += table[i][j] - - if table[i][i] <= total: - raise ValueError("Coefficient matrix is not strictly diagonally dominant") - - return is_diagonally_dominant - - -# Test Cases -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/linear_algebra/lu_decomposition.py b/linear_algebra/lu_decomposition.py deleted file mode 100644 index 3620674835cd..000000000000 --- a/linear_algebra/lu_decomposition.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -Lower-upper (LU) decomposition factors a matrix as a product of a lower -triangular matrix and an upper triangular matrix. A square matrix has an LU -decomposition under the following conditions: - - If the matrix is invertible, then it has an LU decomposition if and only - if all of its leading principal minors are non-zero (see - https://en.wikipedia.org/wiki/Minor_(linear_algebra) for an explanation of - leading principal minors of a matrix). - - If the matrix is singular (i.e., not invertible) and it has a rank of k - (i.e., it has k linearly independent columns), then it has an LU - decomposition if its first k leading principal minors are non-zero. - -This algorithm will simply attempt to perform LU decomposition on any square -matrix and raise an error if no such decomposition exists. - -Reference: https://en.wikipedia.org/wiki/LU_decomposition -""" - -from __future__ import annotations - -import numpy as np - - -def lower_upper_decomposition(table: np.ndarray) -> tuple[np.ndarray, np.ndarray]: - """ - Perform LU decomposition on a given matrix and raises an error if the matrix - isn't square or if no such decomposition exists - >>> matrix = np.array([[2, -2, 1], [0, 1, 2], [5, 3, 1]]) - >>> lower_mat, upper_mat = lower_upper_decomposition(matrix) - >>> lower_mat - array([[1. , 0. , 0. ], - [0. , 1. , 0. ], - [2.5, 8. , 1. ]]) - >>> upper_mat - array([[ 2. , -2. , 1. ], - [ 0. , 1. , 2. ], - [ 0. , 0. , -17.5]]) - - >>> matrix = np.array([[4, 3], [6, 3]]) - >>> lower_mat, upper_mat = lower_upper_decomposition(matrix) - >>> lower_mat - array([[1. , 0. ], - [1.5, 1. ]]) - >>> upper_mat - array([[ 4. , 3. ], - [ 0. , -1.5]]) - - # Matrix is not square - >>> matrix = np.array([[2, -2, 1], [0, 1, 2]]) - >>> lower_mat, upper_mat = lower_upper_decomposition(matrix) - Traceback (most recent call last): - ... - ValueError: 'table' has to be of square shaped array but got a 2x3 array: - [[ 2 -2 1] - [ 0 1 2]] - - # Matrix is invertible, but its first leading principal minor is 0 - >>> matrix = np.array([[0, 1], [1, 0]]) - >>> lower_mat, upper_mat = lower_upper_decomposition(matrix) - Traceback (most recent call last): - ... - ArithmeticError: No LU decomposition exists - - # Matrix is singular, but its first leading principal minor is 1 - >>> matrix = np.array([[1, 0], [1, 0]]) - >>> lower_mat, upper_mat = lower_upper_decomposition(matrix) - >>> lower_mat - array([[1., 0.], - [1., 1.]]) - >>> upper_mat - array([[1., 0.], - [0., 0.]]) - - # Matrix is singular, but its first leading principal minor is 0 - >>> matrix = np.array([[0, 1], [0, 1]]) - >>> lower_mat, upper_mat = lower_upper_decomposition(matrix) - Traceback (most recent call last): - ... - ArithmeticError: No LU decomposition exists - """ - # Ensure that table is a square array - rows, columns = np.shape(table) - if rows != columns: - msg = ( - "'table' has to be of square shaped array but got a " - f"{rows}x{columns} array:\n{table}" - ) - raise ValueError(msg) - - lower = np.zeros((rows, columns)) - upper = np.zeros((rows, columns)) - - # in 'total', the necessary data is extracted through slices - # and the sum of the products is obtained. - - for i in range(columns): - for j in range(i): - total = np.sum(lower[i, :i] * upper[:i, j]) - if upper[j][j] == 0: - raise ArithmeticError("No LU decomposition exists") - lower[i][j] = (table[i][j] - total) / upper[j][j] - lower[i][i] = 1 - for j in range(i, columns): - total = np.sum(lower[i, :i] * upper[:i, j]) - upper[i][j] = table[i][j] - total - return lower, upper - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/linear_algebra/src/__init__.py b/linear_algebra/src/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/linear_algebra/src/conjugate_gradient.py b/linear_algebra/src/conjugate_gradient.py deleted file mode 100644 index 45da35813978..000000000000 --- a/linear_algebra/src/conjugate_gradient.py +++ /dev/null @@ -1,180 +0,0 @@ -""" -Resources: -- https://en.wikipedia.org/wiki/Conjugate_gradient_method -- https://en.wikipedia.org/wiki/Definite_symmetric_matrix -""" - -from typing import Any - -import numpy as np - - -def _is_matrix_spd(matrix: np.ndarray) -> bool: - """ - Returns True if input matrix is symmetric positive definite. - Returns False otherwise. - - For a matrix to be SPD, all eigenvalues must be positive. - - >>> import numpy as np - >>> matrix = np.array([ - ... [4.12401784, -5.01453636, -0.63865857], - ... [-5.01453636, 12.33347422, -3.40493586], - ... [-0.63865857, -3.40493586, 5.78591885]]) - >>> _is_matrix_spd(matrix) - True - >>> matrix = np.array([ - ... [0.34634879, 1.96165514, 2.18277744], - ... [0.74074469, -1.19648894, -1.34223498], - ... [-0.7687067 , 0.06018373, -1.16315631]]) - >>> _is_matrix_spd(matrix) - False - """ - # Ensure matrix is square. - assert np.shape(matrix)[0] == np.shape(matrix)[1] - - # If matrix not symmetric, exit right away. - if np.allclose(matrix, matrix.T) is False: - return False - - # Get eigenvalues and eignevectors for a symmetric matrix. - eigen_values, _ = np.linalg.eigh(matrix) - - # Check sign of all eigenvalues. - # np.all returns a value of type np.bool_ - return bool(np.all(eigen_values > 0)) - - -def _create_spd_matrix(dimension: int) -> Any: - """ - Returns a symmetric positive definite matrix given a dimension. - - Input: - dimension gives the square matrix dimension. - - Output: - spd_matrix is an diminesion x dimensions symmetric positive definite (SPD) matrix. - - >>> import numpy as np - >>> dimension = 3 - >>> spd_matrix = _create_spd_matrix(dimension) - >>> _is_matrix_spd(spd_matrix) - True - """ - rng = np.random.default_rng() - random_matrix = rng.normal(size=(dimension, dimension)) - spd_matrix = np.dot(random_matrix, random_matrix.T) - assert _is_matrix_spd(spd_matrix) - return spd_matrix - - -def conjugate_gradient( - spd_matrix: np.ndarray, - load_vector: np.ndarray, - max_iterations: int = 1000, - tol: float = 1e-8, -) -> Any: - """ - Returns solution to the linear system np.dot(spd_matrix, x) = b. - - Input: - spd_matrix is an NxN Symmetric Positive Definite (SPD) matrix. - load_vector is an Nx1 vector. - - Output: - x is an Nx1 vector that is the solution vector. - - >>> import numpy as np - >>> spd_matrix = np.array([ - ... [8.73256573, -5.02034289, -2.68709226], - ... [-5.02034289, 3.78188322, 0.91980451], - ... [-2.68709226, 0.91980451, 1.94746467]]) - >>> b = np.array([ - ... [-5.80872761], - ... [ 3.23807431], - ... [ 1.95381422]]) - >>> conjugate_gradient(spd_matrix, b) - array([[-0.63114139], - [-0.01561498], - [ 0.13979294]]) - """ - # Ensure proper dimensionality. - assert np.shape(spd_matrix)[0] == np.shape(spd_matrix)[1] - assert np.shape(load_vector)[0] == np.shape(spd_matrix)[0] - assert _is_matrix_spd(spd_matrix) - - # Initialize solution guess, residual, search direction. - x0 = np.zeros((np.shape(load_vector)[0], 1)) - r0 = np.copy(load_vector) - p0 = np.copy(r0) - - # Set initial errors in solution guess and residual. - error_residual = 1e9 - error_x_solution = 1e9 - error = 1e9 - - # Set iteration counter to threshold number of iterations. - iterations = 0 - - while error > tol: - # Save this value so we only calculate the matrix-vector product once. - w = np.dot(spd_matrix, p0) - - # The main algorithm. - - # Update search direction magnitude. - alpha = np.dot(r0.T, r0) / np.dot(p0.T, w) - # Update solution guess. - x = x0 + alpha * p0 - # Calculate new residual. - r = r0 - alpha * w - # Calculate new Krylov subspace scale. - beta = np.dot(r.T, r) / np.dot(r0.T, r0) - # Calculate new A conjuage search direction. - p = r + beta * p0 - - # Calculate errors. - error_residual = np.linalg.norm(r - r0) - error_x_solution = np.linalg.norm(x - x0) - error = np.maximum(error_residual, error_x_solution) - - # Update variables. - x0 = np.copy(x) - r0 = np.copy(r) - p0 = np.copy(p) - - # Update number of iterations. - iterations += 1 - if iterations > max_iterations: - break - - return x - - -def test_conjugate_gradient() -> None: - """ - >>> test_conjugate_gradient() # self running tests - """ - # Create linear system with SPD matrix and known solution x_true. - dimension = 3 - spd_matrix = _create_spd_matrix(dimension) - rng = np.random.default_rng() - x_true = rng.normal(size=(dimension, 1)) - b = np.dot(spd_matrix, x_true) - - # Numpy solution. - x_numpy = np.linalg.solve(spd_matrix, b) - - # Our implementation. - x_conjugate_gradient = conjugate_gradient(spd_matrix, b) - - # Ensure both solutions are close to x_true (and therefore one another). - assert np.linalg.norm(x_numpy - x_true) <= 1e-6 - assert np.linalg.norm(x_conjugate_gradient - x_true) <= 1e-6 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - test_conjugate_gradient() diff --git a/linear_algebra/src/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting.py deleted file mode 100644 index ecaacce19a31..000000000000 --- a/linear_algebra/src/gaussian_elimination_pivoting.py +++ /dev/null @@ -1,94 +0,0 @@ -import numpy as np - - -def solve_linear_system(matrix: np.ndarray) -> np.ndarray: - """ - Solve a linear system of equations using Gaussian elimination with partial pivoting - - Args: - - matrix: Coefficient matrix with the last column representing the constants. - - Returns: - - Solution vector. - - Raises: - - ValueError: If the matrix is not correct (i.e., singular). - - https://courses.engr.illinois.edu/cs357/su2013/lect.htm Lecture 7 - - Example: - >>> A = np.array([[2, 1, -1], [-3, -1, 2], [-2, 1, 2]], dtype=float) - >>> B = np.array([8, -11, -3], dtype=float) - >>> solution = solve_linear_system(np.column_stack((A, B))) - >>> np.allclose(solution, np.array([2., 3., -1.])) - True - >>> solve_linear_system(np.array([[0, 0], [0, 0]], dtype=float)) - array([nan, nan]) - """ - ab = np.copy(matrix) - num_of_rows = ab.shape[0] - num_of_columns = ab.shape[1] - 1 - x_lst: list[float] = [] - - # Lead element search - for column_num in range(num_of_rows): - for i in range(column_num, num_of_columns): - if abs(ab[i][column_num]) > abs(ab[column_num][column_num]): - ab[[column_num, i]] = ab[[i, column_num]] - if ab[column_num, column_num] == 0.0: - raise ValueError("Matrix is not correct") - else: - pass - if column_num != 0: - for i in range(column_num, num_of_rows): - ab[i, :] -= ( - ab[i, column_num - 1] - / ab[column_num - 1, column_num - 1] - * ab[column_num - 1, :] - ) - - # Upper triangular matrix - for column_num in range(num_of_rows): - for i in range(column_num, num_of_columns): - if abs(ab[i][column_num]) > abs(ab[column_num][column_num]): - ab[[column_num, i]] = ab[[i, column_num]] - if ab[column_num, column_num] == 0.0: - raise ValueError("Matrix is not correct") - else: - pass - if column_num != 0: - for i in range(column_num, num_of_rows): - ab[i, :] -= ( - ab[i, column_num - 1] - / ab[column_num - 1, column_num - 1] - * ab[column_num - 1, :] - ) - - # Find x vector (Back Substitution) - for column_num in range(num_of_rows - 1, -1, -1): - x = ab[column_num, -1] / ab[column_num, column_num] - x_lst.insert(0, x) - for i in range(column_num - 1, -1, -1): - ab[i, -1] -= ab[i, column_num] * x - - # Return the solution vector - return np.asarray(x_lst) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - example_matrix = np.array( - [ - [5.0, -5.0, -3.0, 4.0, -11.0], - [1.0, -4.0, 6.0, -4.0, -10.0], - [-2.0, -5.0, 4.0, -5.0, -12.0], - [-3.0, -3.0, 5.0, -5.0, 8.0], - ], - dtype=float, - ) - - print(f"Matrix:\n{example_matrix}") - print(f"{solve_linear_system(example_matrix) = }") diff --git a/linear_algebra/src/lib.py b/linear_algebra/src/lib.py deleted file mode 100644 index 5af6c62e3ad4..000000000000 --- a/linear_algebra/src/lib.py +++ /dev/null @@ -1,435 +0,0 @@ -""" -Created on Mon Feb 26 14:29:11 2018 - -@author: Christian Bender -@license: MIT-license - -This module contains some useful classes and functions for dealing -with linear algebra in python. - -Overview: - -- class Vector -- function zero_vector(dimension) -- function unit_basis_vector(dimension, pos) -- function axpy(scalar, vector1, vector2) -- function random_vector(N, a, b) -- class Matrix -- function square_zero_matrix(N) -- function random_matrix(W, H, a, b) -""" - -from __future__ import annotations - -import math -import random -from collections.abc import Collection -from typing import overload - - -class Vector: - """ - This class represents a vector of arbitrary size. - You need to give the vector components. - - Overview of the methods: - - __init__(components: Collection[float] | None): init the vector - __len__(): gets the size of the vector (number of components) - __str__(): returns a string representation - __add__(other: Vector): vector addition - __sub__(other: Vector): vector subtraction - __mul__(other: float): scalar multiplication - __mul__(other: Vector): dot product - copy(): copies this vector and returns it - component(i): gets the i-th component (0-indexed) - change_component(pos: int, value: float): changes specified component - euclidean_length(): returns the euclidean length of the vector - angle(other: Vector, deg: bool): returns the angle between two vectors - TODO: compare-operator - """ - - def __init__(self, components: Collection[float] | None = None) -> None: - """ - input: components or nothing - simple constructor for init the vector - """ - if components is None: - components = [] - self.__components = list(components) - - def __len__(self) -> int: - """ - returns the size of the vector - """ - return len(self.__components) - - def __str__(self) -> str: - """ - returns a string representation of the vector - """ - return "(" + ",".join(map(str, self.__components)) + ")" - - def __add__(self, other: Vector) -> Vector: - """ - input: other vector - assumes: other vector has the same size - returns a new vector that represents the sum. - """ - size = len(self) - if size == len(other): - result = [self.__components[i] + other.component(i) for i in range(size)] - return Vector(result) - else: - raise Exception("must have the same size") - - def __sub__(self, other: Vector) -> Vector: - """ - input: other vector - assumes: other vector has the same size - returns a new vector that represents the difference. - """ - size = len(self) - if size == len(other): - result = [self.__components[i] - other.component(i) for i in range(size)] - return Vector(result) - else: # error case - raise Exception("must have the same size") - - @overload - def __mul__(self, other: float) -> Vector: ... - - @overload - def __mul__(self, other: Vector) -> float: ... - - def __mul__(self, other: float | Vector) -> float | Vector: - """ - mul implements the scalar multiplication - and the dot-product - """ - if isinstance(other, (float, int)): - ans = [c * other for c in self.__components] - return Vector(ans) - elif isinstance(other, Vector) and len(self) == len(other): - size = len(self) - prods = [self.__components[i] * other.component(i) for i in range(size)] - return sum(prods) - else: # error case - raise Exception("invalid operand!") - - def copy(self) -> Vector: - """ - copies this vector and returns it. - """ - return Vector(self.__components) - - def component(self, i: int) -> float: - """ - input: index (0-indexed) - output: the i-th component of the vector. - """ - if isinstance(i, int) and -len(self.__components) <= i < len(self.__components): - return self.__components[i] - else: - raise Exception("index out of range") - - def change_component(self, pos: int, value: float) -> None: - """ - input: an index (pos) and a value - changes the specified component (pos) with the - 'value' - """ - # precondition - assert -len(self.__components) <= pos < len(self.__components) - self.__components[pos] = value - - def euclidean_length(self) -> float: - """ - returns the euclidean length of the vector - - >>> Vector([2, 3, 4]).euclidean_length() - 5.385164807134504 - >>> Vector([1]).euclidean_length() - 1.0 - >>> Vector([0, -1, -2, -3, 4, 5, 6]).euclidean_length() - 9.539392014169456 - >>> Vector([]).euclidean_length() - Traceback (most recent call last): - ... - Exception: Vector is empty - """ - if len(self.__components) == 0: - raise Exception("Vector is empty") - squares = [c**2 for c in self.__components] - return math.sqrt(sum(squares)) - - def angle(self, other: Vector, deg: bool = False) -> float: - """ - find angle between two Vector (self, Vector) - - >>> Vector([3, 4, -1]).angle(Vector([2, -1, 1])) - 1.4906464636572374 - >>> Vector([3, 4, -1]).angle(Vector([2, -1, 1]), deg = True) - 85.40775111366095 - >>> Vector([3, 4, -1]).angle(Vector([2, -1])) - Traceback (most recent call last): - ... - Exception: invalid operand! - """ - num = self * other - den = self.euclidean_length() * other.euclidean_length() - if deg: - return math.degrees(math.acos(num / den)) - else: - return math.acos(num / den) - - -def zero_vector(dimension: int) -> Vector: - """ - returns a zero-vector of size 'dimension' - """ - # precondition - assert isinstance(dimension, int) - return Vector([0] * dimension) - - -def unit_basis_vector(dimension: int, pos: int) -> Vector: - """ - returns a unit basis vector with a One - at index 'pos' (indexing at 0) - """ - # precondition - assert isinstance(dimension, int) - assert isinstance(pos, int) - ans = [0] * dimension - ans[pos] = 1 - return Vector(ans) - - -def axpy(scalar: float, x: Vector, y: Vector) -> Vector: - """ - input: a 'scalar' and two vectors 'x' and 'y' - output: a vector - computes the axpy operation - """ - # precondition - assert isinstance(x, Vector) - assert isinstance(y, Vector) - assert isinstance(scalar, (int, float)) - return x * scalar + y - - -def random_vector(n: int, a: int, b: int) -> Vector: - """ - input: size (N) of the vector. - random range (a,b) - output: returns a random vector of size N, with - random integer components between 'a' and 'b'. - """ - random.seed(None) - ans = [random.randint(a, b) for _ in range(n)] - return Vector(ans) - - -class Matrix: - """ - class: Matrix - This class represents an arbitrary matrix. - - Overview of the methods: - - __init__(): - __str__(): returns a string representation - __add__(other: Matrix): matrix addition - __sub__(other: Matrix): matrix subtraction - __mul__(other: float): scalar multiplication - __mul__(other: Vector): vector multiplication - height() : returns height - width() : returns width - component(x: int, y: int): returns specified component - change_component(x: int, y: int, value: float): changes specified component - minor(x: int, y: int): returns minor along (x, y) - cofactor(x: int, y: int): returns cofactor along (x, y) - determinant() : returns determinant - """ - - def __init__(self, matrix: list[list[float]], w: int, h: int) -> None: - """ - simple constructor for initializing the matrix with components. - """ - self.__matrix = matrix - self.__width = w - self.__height = h - - def __str__(self) -> str: - """ - returns a string representation of this matrix. - """ - ans = "" - for i in range(self.__height): - ans += "|" - for j in range(self.__width): - if j < self.__width - 1: - ans += str(self.__matrix[i][j]) + "," - else: - ans += str(self.__matrix[i][j]) + "|\n" - return ans - - def __add__(self, other: Matrix) -> Matrix: - """ - implements matrix addition. - """ - if self.__width == other.width() and self.__height == other.height(): - matrix = [] - for i in range(self.__height): - row = [ - self.__matrix[i][j] + other.component(i, j) - for j in range(self.__width) - ] - matrix.append(row) - return Matrix(matrix, self.__width, self.__height) - else: - raise Exception("matrix must have the same dimension!") - - def __sub__(self, other: Matrix) -> Matrix: - """ - implements matrix subtraction. - """ - if self.__width == other.width() and self.__height == other.height(): - matrix = [] - for i in range(self.__height): - row = [ - self.__matrix[i][j] - other.component(i, j) - for j in range(self.__width) - ] - matrix.append(row) - return Matrix(matrix, self.__width, self.__height) - else: - raise Exception("matrices must have the same dimension!") - - @overload - def __mul__(self, other: float) -> Matrix: ... - - @overload - def __mul__(self, other: Vector) -> Vector: ... - - def __mul__(self, other: float | Vector) -> Vector | Matrix: - """ - implements the matrix-vector multiplication. - implements the matrix-scalar multiplication - """ - if isinstance(other, Vector): # matrix-vector - if len(other) == self.__width: - ans = zero_vector(self.__height) - for i in range(self.__height): - prods = [ - self.__matrix[i][j] * other.component(j) - for j in range(self.__width) - ] - ans.change_component(i, sum(prods)) - return ans - else: - raise Exception( - "vector must have the same size as the " - "number of columns of the matrix!" - ) - elif isinstance(other, (int, float)): # matrix-scalar - matrix = [ - [self.__matrix[i][j] * other for j in range(self.__width)] - for i in range(self.__height) - ] - return Matrix(matrix, self.__width, self.__height) - return None - - def height(self) -> int: - """ - getter for the height - """ - return self.__height - - def width(self) -> int: - """ - getter for the width - """ - return self.__width - - def component(self, x: int, y: int) -> float: - """ - returns the specified (x,y) component - """ - if 0 <= x < self.__height and 0 <= y < self.__width: - return self.__matrix[x][y] - else: - raise Exception("change_component: indices out of bounds") - - def change_component(self, x: int, y: int, value: float) -> None: - """ - changes the x-y component of this matrix - """ - if 0 <= x < self.__height and 0 <= y < self.__width: - self.__matrix[x][y] = value - else: - raise Exception("change_component: indices out of bounds") - - def minor(self, x: int, y: int) -> float: - """ - returns the minor along (x, y) - """ - if self.__height != self.__width: - raise Exception("Matrix is not square") - minor = self.__matrix[:x] + self.__matrix[x + 1 :] - for i in range(len(minor)): - minor[i] = minor[i][:y] + minor[i][y + 1 :] - return Matrix(minor, self.__width - 1, self.__height - 1).determinant() - - def cofactor(self, x: int, y: int) -> float: - """ - returns the cofactor (signed minor) along (x, y) - """ - if self.__height != self.__width: - raise Exception("Matrix is not square") - if 0 <= x < self.__height and 0 <= y < self.__width: - return (-1) ** (x + y) * self.minor(x, y) - else: - raise Exception("Indices out of bounds") - - def determinant(self) -> float: - """ - returns the determinant of an nxn matrix using Laplace expansion - """ - if self.__height != self.__width: - raise Exception("Matrix is not square") - if self.__height < 1: - raise Exception("Matrix has no element") - elif self.__height == 1: - return self.__matrix[0][0] - elif self.__height == 2: - return ( - self.__matrix[0][0] * self.__matrix[1][1] - - self.__matrix[0][1] * self.__matrix[1][0] - ) - else: - cofactor_prods = [ - self.__matrix[0][y] * self.cofactor(0, y) for y in range(self.__width) - ] - return sum(cofactor_prods) - - -def square_zero_matrix(n: int) -> Matrix: - """ - returns a square zero-matrix of dimension NxN - """ - ans: list[list[float]] = [[0] * n for _ in range(n)] - return Matrix(ans, n, n) - - -def random_matrix(width: int, height: int, a: int, b: int) -> Matrix: - """ - returns a random matrix WxH with integer components - between 'a' and 'b' - """ - random.seed(None) - matrix: list[list[float]] = [ - [random.randint(a, b) for _ in range(width)] for _ in range(height) - ] - return Matrix(matrix, width, height) diff --git a/linear_algebra/src/polynom_for_points.py b/linear_algebra/src/polynom_for_points.py deleted file mode 100644 index 452f3edd4aee..000000000000 --- a/linear_algebra/src/polynom_for_points.py +++ /dev/null @@ -1,103 +0,0 @@ -def points_to_polynomial(coordinates: list[list[int]]) -> str: - """ - coordinates is a two dimensional matrix: [[x, y], [x, y], ...] - number of points you want to use - - >>> points_to_polynomial([]) - Traceback (most recent call last): - ... - ValueError: The program cannot work out a fitting polynomial. - >>> points_to_polynomial([[]]) - Traceback (most recent call last): - ... - ValueError: The program cannot work out a fitting polynomial. - >>> points_to_polynomial([[1, 0], [2, 0], [3, 0]]) - 'f(x)=x^2*0.0+x^1*-0.0+x^0*0.0' - >>> points_to_polynomial([[1, 1], [2, 1], [3, 1]]) - 'f(x)=x^2*0.0+x^1*-0.0+x^0*1.0' - >>> points_to_polynomial([[1, 3], [2, 3], [3, 3]]) - 'f(x)=x^2*0.0+x^1*-0.0+x^0*3.0' - >>> points_to_polynomial([[1, 1], [2, 2], [3, 3]]) - 'f(x)=x^2*0.0+x^1*1.0+x^0*0.0' - >>> points_to_polynomial([[1, 1], [2, 4], [3, 9]]) - 'f(x)=x^2*1.0+x^1*-0.0+x^0*0.0' - >>> points_to_polynomial([[1, 3], [2, 6], [3, 11]]) - 'f(x)=x^2*1.0+x^1*-0.0+x^0*2.0' - >>> points_to_polynomial([[1, -3], [2, -6], [3, -11]]) - 'f(x)=x^2*-1.0+x^1*-0.0+x^0*-2.0' - >>> points_to_polynomial([[1, 5], [2, 2], [3, 9]]) - 'f(x)=x^2*5.0+x^1*-18.0+x^0*18.0' - >>> points_to_polynomial([[1, 1], [1, 2], [1, 3]]) - 'x=1' - >>> points_to_polynomial([[1, 1], [2, 2], [2, 2]]) - Traceback (most recent call last): - ... - ValueError: The program cannot work out a fitting polynomial. - """ - if len(coordinates) == 0 or not all(len(pair) == 2 for pair in coordinates): - raise ValueError("The program cannot work out a fitting polynomial.") - - if len({tuple(pair) for pair in coordinates}) != len(coordinates): - raise ValueError("The program cannot work out a fitting polynomial.") - - set_x = {x for x, _ in coordinates} - if len(set_x) == 1: - return f"x={coordinates[0][0]}" - - if len(set_x) != len(coordinates): - raise ValueError("The program cannot work out a fitting polynomial.") - - x = len(coordinates) - - # put the x and x to the power values in a matrix - matrix: list[list[float]] = [ - [ - coordinates[count_of_line][0] ** (x - (count_in_line + 1)) - for count_in_line in range(x) - ] - for count_of_line in range(x) - ] - - # put the y values into a vector - vector: list[float] = [coordinates[count_of_line][1] for count_of_line in range(x)] - - for count in range(x): - for number in range(x): - if count == number: - continue - fraction = matrix[number][count] / matrix[count][count] - for counting_columns, item in enumerate(matrix[count]): - # manipulating all the values in the matrix - matrix[number][counting_columns] -= item * fraction - # manipulating the values in the vector - vector[number] -= vector[count] * fraction - - # make solutions - solution: list[str] = [ - str(vector[count] / matrix[count][count]) for count in range(x) - ] - - solved = "f(x)=" - - for count in range(x): - remove_e: list[str] = solution[count].split("E") - if len(remove_e) > 1: - solution[count] = f"{remove_e[0]}*10^{remove_e[1]}" - solved += f"x^{x - (count + 1)}*{solution[count]}" - if count + 1 != x: - solved += "+" - - return solved - - -if __name__ == "__main__": - print(points_to_polynomial([])) - print(points_to_polynomial([[]])) - print(points_to_polynomial([[1, 0], [2, 0], [3, 0]])) - print(points_to_polynomial([[1, 1], [2, 1], [3, 1]])) - print(points_to_polynomial([[1, 3], [2, 3], [3, 3]])) - print(points_to_polynomial([[1, 1], [2, 2], [3, 3]])) - print(points_to_polynomial([[1, 1], [2, 4], [3, 9]])) - print(points_to_polynomial([[1, 3], [2, 6], [3, 11]])) - print(points_to_polynomial([[1, -3], [2, -6], [3, -11]])) - print(points_to_polynomial([[1, 5], [2, 2], [3, 9]])) diff --git a/linear_algebra/src/power_iteration.py b/linear_algebra/src/power_iteration.py deleted file mode 100644 index 83c2ce48c3a0..000000000000 --- a/linear_algebra/src/power_iteration.py +++ /dev/null @@ -1,128 +0,0 @@ -import numpy as np - - -def power_iteration( - input_matrix: np.ndarray, - vector: np.ndarray, - error_tol: float = 1e-12, - max_iterations: int = 100, -) -> tuple[float, np.ndarray]: - """ - Power Iteration. - Find the largest eigenvalue and corresponding eigenvector - of matrix input_matrix given a random vector in the same space. - Will work so long as vector has component of largest eigenvector. - input_matrix must be either real or Hermitian. - - Input - input_matrix: input matrix whose largest eigenvalue we will find. - Numpy array. np.shape(input_matrix) == (N,N). - vector: random initial vector in same space as matrix. - Numpy array. np.shape(vector) == (N,) or (N,1) - - Output - largest_eigenvalue: largest eigenvalue of the matrix input_matrix. - Float. Scalar. - largest_eigenvector: eigenvector corresponding to largest_eigenvalue. - Numpy array. np.shape(largest_eigenvector) == (N,) or (N,1). - - >>> import numpy as np - >>> input_matrix = np.array([ - ... [41, 4, 20], - ... [ 4, 26, 30], - ... [20, 30, 50] - ... ]) - >>> vector = np.array([41,4,20]) - >>> power_iteration(input_matrix,vector) - (79.66086378788381, array([0.44472726, 0.46209842, 0.76725662])) - """ - - # Ensure matrix is square. - assert np.shape(input_matrix)[0] == np.shape(input_matrix)[1] - # Ensure proper dimensionality. - assert np.shape(input_matrix)[0] == np.shape(vector)[0] - # Ensure inputs are either both complex or both real - assert np.iscomplexobj(input_matrix) == np.iscomplexobj(vector) - is_complex = np.iscomplexobj(input_matrix) - if is_complex: - # Ensure complex input_matrix is Hermitian - assert np.array_equal(input_matrix, input_matrix.conj().T) - - # Set convergence to False. Will define convergence when we exceed max_iterations - # or when we have small changes from one iteration to next. - - convergence = False - lambda_previous = 0 - iterations = 0 - error = 1e12 - - while not convergence: - # Multiple matrix by the vector. - w = np.dot(input_matrix, vector) - # Normalize the resulting output vector. - vector = w / np.linalg.norm(w) - # Find rayleigh quotient - # (faster than usual b/c we know vector is normalized already) - vector_h = vector.conj().T if is_complex else vector.T - lambda_ = np.dot(vector_h, np.dot(input_matrix, vector)) - - # Check convergence. - error = np.abs(lambda_ - lambda_previous) / lambda_ - iterations += 1 - - if error <= error_tol or iterations >= max_iterations: - convergence = True - - lambda_previous = lambda_ - - if is_complex: - lambda_ = np.real(lambda_) - - return float(lambda_), vector - - -def test_power_iteration() -> None: - """ - >>> test_power_iteration() # self running tests - """ - real_input_matrix = np.array([[41, 4, 20], [4, 26, 30], [20, 30, 50]]) - real_vector = np.array([41, 4, 20]) - complex_input_matrix = real_input_matrix.astype(np.complex128) - imag_matrix = np.triu(1j * complex_input_matrix, 1) - complex_input_matrix += imag_matrix - complex_input_matrix += -1 * imag_matrix.T - complex_vector = np.array([41, 4, 20]).astype(np.complex128) - - for problem_type in ["real", "complex"]: - if problem_type == "real": - input_matrix = real_input_matrix - vector = real_vector - elif problem_type == "complex": - input_matrix = complex_input_matrix - vector = complex_vector - - # Our implementation. - eigen_value, eigen_vector = power_iteration(input_matrix, vector) - - # Numpy implementation. - - # Get eigenvalues and eigenvectors using built-in numpy - # eigh (eigh used for symmetric or hermetian matrices). - eigen_values, eigen_vectors = np.linalg.eigh(input_matrix) - # Last eigenvalue is the maximum one. - eigen_value_max = eigen_values[-1] - # Last column in this matrix is eigenvector corresponding to largest eigenvalue. - eigen_vector_max = eigen_vectors[:, -1] - - # Check our implementation and numpy gives close answers. - assert np.abs(eigen_value - eigen_value_max) <= 1e-6 - # Take absolute values element wise of each eigenvector. - # as they are only unique to a minus sign. - assert np.linalg.norm(np.abs(eigen_vector) - np.abs(eigen_vector_max)) <= 1e-6 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - test_power_iteration() diff --git a/linear_algebra/src/rank_of_matrix.py b/linear_algebra/src/rank_of_matrix.py deleted file mode 100644 index 7ff3c1699a69..000000000000 --- a/linear_algebra/src/rank_of_matrix.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -Calculate the rank of a matrix. - -See: https://en.wikipedia.org/wiki/Rank_(linear_algebra) -""" - - -def rank_of_matrix(matrix: list[list[int | float]]) -> int: - """ - Finds the rank of a matrix. - Args: - matrix: The matrix as a list of lists. - Returns: - The rank of the matrix. - Example: - >>> matrix1 = [[1, 2, 3], - ... [4, 5, 6], - ... [7, 8, 9]] - >>> rank_of_matrix(matrix1) - 2 - >>> matrix2 = [[1, 0, 0], - ... [0, 1, 0], - ... [0, 0, 0]] - >>> rank_of_matrix(matrix2) - 2 - >>> matrix3 = [[1, 2, 3, 4], - ... [5, 6, 7, 8], - ... [9, 10, 11, 12]] - >>> rank_of_matrix(matrix3) - 2 - >>> rank_of_matrix([[2,3,-1,-1], - ... [1,-1,-2,4], - ... [3,1,3,-2], - ... [6,3,0,-7]]) - 4 - >>> rank_of_matrix([[2,1,-3,-6], - ... [3,-3,1,2], - ... [1,1,1,2]]) - 3 - >>> rank_of_matrix([[2,-1,0], - ... [1,3,4], - ... [4,1,-3]]) - 3 - >>> rank_of_matrix([[3,2,1], - ... [-6,-4,-2]]) - 1 - >>> rank_of_matrix([[],[]]) - 0 - >>> rank_of_matrix([[1]]) - 1 - >>> rank_of_matrix([[]]) - 0 - """ - - rows = len(matrix) - columns = len(matrix[0]) - rank = min(rows, columns) - - for row in range(rank): - # Check if diagonal element is not zero - if matrix[row][row] != 0: - # Eliminate all the elements below the diagonal - for col in range(row + 1, rows): - multiplier = matrix[col][row] / matrix[row][row] - for i in range(row, columns): - matrix[col][i] -= multiplier * matrix[row][i] - else: - # Find a non-zero diagonal element to swap rows - reduce = True - for i in range(row + 1, rows): - if matrix[i][row] != 0: - matrix[row], matrix[i] = matrix[i], matrix[row] - reduce = False - break - if reduce: - rank -= 1 - for i in range(rows): - matrix[i][row] = matrix[i][rank] - - # Reduce the row pointer by one to stay on the same row - row -= 1 - - return rank - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/linear_algebra/src/rayleigh_quotient.py b/linear_algebra/src/rayleigh_quotient.py deleted file mode 100644 index 46bf1671d2b1..000000000000 --- a/linear_algebra/src/rayleigh_quotient.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Rayleigh_quotient -""" - -from typing import Any - -import numpy as np - - -def is_hermitian(matrix: np.ndarray) -> bool: - """ - Checks if a matrix is Hermitian. - >>> import numpy as np - >>> A = np.array([ - ... [2, 2+1j, 4], - ... [2-1j, 3, 1j], - ... [4, -1j, 1]]) - >>> is_hermitian(A) - True - >>> A = np.array([ - ... [2, 2+1j, 4+1j], - ... [2-1j, 3, 1j], - ... [4, -1j, 1]]) - >>> is_hermitian(A) - False - """ - return np.array_equal(matrix, matrix.conjugate().T) - - -def rayleigh_quotient(a: np.ndarray, v: np.ndarray) -> Any: - """ - Returns the Rayleigh quotient of a Hermitian matrix A and - vector v. - >>> import numpy as np - >>> A = np.array([ - ... [1, 2, 4], - ... [2, 3, -1], - ... [4, -1, 1] - ... ]) - >>> v = np.array([ - ... [1], - ... [2], - ... [3] - ... ]) - >>> rayleigh_quotient(A, v) - array([[3.]]) - """ - v_star = v.conjugate().T - v_star_dot = v_star.dot(a) - assert isinstance(v_star_dot, np.ndarray) - return (v_star_dot.dot(v)) / (v_star.dot(v)) - - -def tests() -> None: - a = np.array([[2, 2 + 1j, 4], [2 - 1j, 3, 1j], [4, -1j, 1]]) - v = np.array([[1], [2], [3]]) - assert is_hermitian(a), f"{a} is not hermitian." - print(rayleigh_quotient(a, v)) - - a = np.array([[1, 2, 4], [2, 3, -1], [4, -1, 1]]) - assert is_hermitian(a), f"{a} is not hermitian." - assert rayleigh_quotient(a, v) == float(3) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - tests() diff --git a/linear_algebra/src/schur_complement.py b/linear_algebra/src/schur_complement.py deleted file mode 100644 index 7c79bb70abfc..000000000000 --- a/linear_algebra/src/schur_complement.py +++ /dev/null @@ -1,97 +0,0 @@ -import unittest - -import numpy as np -import pytest - - -def schur_complement( - mat_a: np.ndarray, - mat_b: np.ndarray, - mat_c: np.ndarray, - pseudo_inv: np.ndarray | None = None, -) -> np.ndarray: - """ - Schur complement of a symmetric matrix X given as a 2x2 block matrix - consisting of matrices A, B and C. - Matrix A must be quadratic and non-singular. - In case A is singular, a pseudo-inverse may be provided using - the pseudo_inv argument. - - Link to Wiki: https://en.wikipedia.org/wiki/Schur_complement - See also Convex Optimization - Boyd and Vandenberghe, A.5.5 - >>> import numpy as np - >>> a = np.array([[1, 2], [2, 1]]) - >>> b = np.array([[0, 3], [3, 0]]) - >>> c = np.array([[2, 1], [6, 3]]) - >>> schur_complement(a, b, c) - array([[ 5., -5.], - [ 0., 6.]]) - """ - shape_a = np.shape(mat_a) - shape_b = np.shape(mat_b) - shape_c = np.shape(mat_c) - - if shape_a[0] != shape_b[0]: - msg = ( - "Expected the same number of rows for A and B. " - f"Instead found A of size {shape_a} and B of size {shape_b}" - ) - raise ValueError(msg) - - if shape_b[1] != shape_c[1]: - msg = ( - "Expected the same number of columns for B and C. " - f"Instead found B of size {shape_b} and C of size {shape_c}" - ) - raise ValueError(msg) - - a_inv = pseudo_inv - if a_inv is None: - try: - a_inv = np.linalg.inv(mat_a) - except np.linalg.LinAlgError: - raise ValueError( - "Input matrix A is not invertible. Cannot compute Schur complement." - ) - - return mat_c - mat_b.T @ a_inv @ mat_b - - -class TestSchurComplement(unittest.TestCase): - def test_schur_complement(self) -> None: - a = np.array([[1, 2, 1], [2, 1, 2], [3, 2, 4]]) - b = np.array([[0, 3], [3, 0], [2, 3]]) - c = np.array([[2, 1], [6, 3]]) - - s = schur_complement(a, b, c) - - input_matrix = np.block([[a, b], [b.T, c]]) - - det_x = np.linalg.det(input_matrix) - det_a = np.linalg.det(a) - det_s = np.linalg.det(s) - - assert np.is_close(det_x, det_a * det_s) - - def test_improper_a_b_dimensions(self) -> None: - a = np.array([[1, 2, 1], [2, 1, 2], [3, 2, 4]]) - b = np.array([[0, 3], [3, 0], [2, 3]]) - c = np.array([[2, 1], [6, 3]]) - - with pytest.raises(ValueError): - schur_complement(a, b, c) - - def test_improper_b_c_dimensions(self) -> None: - a = np.array([[1, 2, 1], [2, 1, 2], [3, 2, 4]]) - b = np.array([[0, 3], [3, 0], [2, 3]]) - c = np.array([[2, 1, 3], [6, 3, 5]]) - - with pytest.raises(ValueError): - schur_complement(a, b, c) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - unittest.main() diff --git a/linear_algebra/src/test_linear_algebra.py b/linear_algebra/src/test_linear_algebra.py deleted file mode 100644 index fc5f90fd5cbe..000000000000 --- a/linear_algebra/src/test_linear_algebra.py +++ /dev/null @@ -1,212 +0,0 @@ -""" -Created on Mon Feb 26 15:40:07 2018 - -@author: Christian Bender -@license: MIT-license - -This file contains the test-suite for the linear algebra library. -""" - -import unittest - -import pytest - -from .lib import ( - Matrix, - Vector, - axpy, - square_zero_matrix, - unit_basis_vector, - zero_vector, -) - - -class Test(unittest.TestCase): - def test_component(self) -> None: - """ - test for method component() - """ - x = Vector([1, 2, 3]) - assert x.component(0) == 1 - assert x.component(2) == 3 - _ = Vector() - - def test_str(self) -> None: - """ - test for method toString() - """ - x = Vector([0, 0, 0, 0, 0, 1]) - assert str(x) == "(0,0,0,0,0,1)" - - def test_size(self) -> None: - """ - test for method size() - """ - x = Vector([1, 2, 3, 4]) - assert len(x) == 4 - - def test_euclidean_length(self) -> None: - """ - test for method euclidean_length() - """ - x = Vector([1, 2]) - y = Vector([1, 2, 3, 4, 5]) - z = Vector([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) - w = Vector([1, -1, 1, -1, 2, -3, 4, -5]) - assert x.euclidean_length() == pytest.approx(2.236, abs=1e-3) - assert y.euclidean_length() == pytest.approx(7.416, abs=1e-3) - assert z.euclidean_length() == 0 - assert w.euclidean_length() == pytest.approx(7.616, abs=1e-3) - - def test_add(self) -> None: - """ - test for + operator - """ - x = Vector([1, 2, 3]) - y = Vector([1, 1, 1]) - assert (x + y).component(0) == 2 - assert (x + y).component(1) == 3 - assert (x + y).component(2) == 4 - - def test_sub(self) -> None: - """ - test for - operator - """ - x = Vector([1, 2, 3]) - y = Vector([1, 1, 1]) - assert (x - y).component(0) == 0 - assert (x - y).component(1) == 1 - assert (x - y).component(2) == 2 - - def test_mul(self) -> None: - """ - test for * operator - """ - x = Vector([1, 2, 3]) - a = Vector([2, -1, 4]) # for test of dot product - b = Vector([1, -2, -1]) - assert str(x * 3.0) == "(3.0,6.0,9.0)" - assert a * b == 0 - - def test_zero_vector(self) -> None: - """ - test for global function zero_vector() - """ - assert str(zero_vector(10)).count("0") == 10 - - def test_unit_basis_vector(self) -> None: - """ - test for global function unit_basis_vector() - """ - assert str(unit_basis_vector(3, 1)) == "(0,1,0)" - - def test_axpy(self) -> None: - """ - test for global function axpy() (operation) - """ - x = Vector([1, 2, 3]) - y = Vector([1, 0, 1]) - assert str(axpy(2, x, y)) == "(3,4,7)" - - def test_copy(self) -> None: - """ - test for method copy() - """ - x = Vector([1, 0, 0, 0, 0, 0]) - y = x.copy() - assert str(x) == str(y) - - def test_change_component(self) -> None: - """ - test for method change_component() - """ - x = Vector([1, 0, 0]) - x.change_component(0, 0) - x.change_component(1, 1) - assert str(x) == "(0,1,0)" - - def test_str_matrix(self) -> None: - """ - test for Matrix method str() - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - assert str(a) == "|1,2,3|\n|2,4,5|\n|6,7,8|\n" - - def test_minor(self) -> None: - """ - test for Matrix method minor() - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - minors = [[-3, -14, -10], [-5, -10, -5], [-2, -1, 0]] - for x in range(a.height()): - for y in range(a.width()): - assert minors[x][y] == a.minor(x, y) - - def test_cofactor(self) -> None: - """ - test for Matrix method cofactor() - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - cofactors = [[-3, 14, -10], [5, -10, 5], [-2, 1, 0]] - for x in range(a.height()): - for y in range(a.width()): - assert cofactors[x][y] == a.cofactor(x, y) - - def test_determinant(self) -> None: - """ - test for Matrix method determinant() - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - assert a.determinant() == -5 - - def test__mul__matrix(self) -> None: - """ - test for Matrix * operator - """ - a = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 3, 3) - x = Vector([1, 2, 3]) - assert str(a * x) == "(14,32,50)" - assert str(a * 2) == "|2,4,6|\n|8,10,12|\n|14,16,18|\n" - - def test_change_component_matrix(self) -> None: - """ - test for Matrix method change_component() - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - a.change_component(0, 2, 5) - assert str(a) == "|1,2,5|\n|2,4,5|\n|6,7,8|\n" - - def test_component_matrix(self) -> None: - """ - test for Matrix method component() - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - assert a.component(2, 1) == 7, 0.01 - - def test__add__matrix(self) -> None: - """ - test for Matrix + operator - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - b = Matrix([[1, 2, 7], [2, 4, 5], [6, 7, 10]], 3, 3) - assert str(a + b) == "|2,4,10|\n|4,8,10|\n|12,14,18|\n" - - def test__sub__matrix(self) -> None: - """ - test for Matrix - operator - """ - a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3) - b = Matrix([[1, 2, 7], [2, 4, 5], [6, 7, 10]], 3, 3) - assert str(a - b) == "|0,0,-4|\n|0,0,0|\n|0,0,-2|\n" - - def test_square_zero_matrix(self) -> None: - """ - test for global function square_zero_matrix() - """ - assert str(square_zero_matrix(5)) == ( - "|0,0,0,0,0|\n|0,0,0,0,0|\n|0,0,0,0,0|\n|0,0,0,0,0|\n|0,0,0,0,0|\n" - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/linear_algebra/src/transformations_2d.py b/linear_algebra/src/transformations_2d.py deleted file mode 100644 index b4185cd2848f..000000000000 --- a/linear_algebra/src/transformations_2d.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -2D Transformations are regularly used in Linear Algebra. - -I have added the codes for reflection, projection, scaling and rotation 2D matrices. - - scaling(5) = [[5.0, 0.0], [0.0, 5.0]] - rotation(45) = [[0.5253219888177297, -0.8509035245341184], - [0.8509035245341184, 0.5253219888177297]] -projection(45) = [[0.27596319193541496, 0.446998331800279], - [0.446998331800279, 0.7240368080645851]] -reflection(45) = [[0.05064397763545947, 0.893996663600558], - [0.893996663600558, 0.7018070490682369]] -""" - -from math import cos, sin - - -def scaling(scaling_factor: float) -> list[list[float]]: - """ - >>> scaling(5) - [[5.0, 0.0], [0.0, 5.0]] - """ - scaling_factor = float(scaling_factor) - return [[scaling_factor * int(x == y) for x in range(2)] for y in range(2)] - - -def rotation(angle: float) -> list[list[float]]: - """ - >>> rotation(45) # doctest: +NORMALIZE_WHITESPACE - [[0.5253219888177297, -0.8509035245341184], - [0.8509035245341184, 0.5253219888177297]] - """ - c, s = cos(angle), sin(angle) - return [[c, -s], [s, c]] - - -def projection(angle: float) -> list[list[float]]: - """ - >>> projection(45) # doctest: +NORMALIZE_WHITESPACE - [[0.27596319193541496, 0.446998331800279], - [0.446998331800279, 0.7240368080645851]] - """ - c, s = cos(angle), sin(angle) - cs = c * s - return [[c * c, cs], [cs, s * s]] - - -def reflection(angle: float) -> list[list[float]]: - """ - >>> reflection(45) # doctest: +NORMALIZE_WHITESPACE - [[0.05064397763545947, 0.893996663600558], - [0.893996663600558, 0.7018070490682369]] - """ - c, s = cos(angle), sin(angle) - cs = c * s - return [[2 * c - 1, 2 * cs], [2 * cs, 2 * s - 1]] - - -print(f" {scaling(5) = }") -print(f" {rotation(45) = }") -print(f"{projection(45) = }") -print(f"{reflection(45) = }") diff --git a/linear_programming/__init__.py b/linear_programming/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/linear_programming/simplex.py b/linear_programming/simplex.py deleted file mode 100644 index a8affe1b72d2..000000000000 --- a/linear_programming/simplex.py +++ /dev/null @@ -1,339 +0,0 @@ -""" -Python implementation of the simplex algorithm for solving linear programs in -tabular form with -- `>=`, `<=`, and `=` constraints and -- each variable `x1, x2, ...>= 0`. - -See https://gist.github.com/imengus/f9619a568f7da5bc74eaf20169a24d98 for how to -convert linear programs to simplex tableaus, and the steps taken in the simplex -algorithm. - -Resources: -https://en.wikipedia.org/wiki/Simplex_algorithm -https://tinyurl.com/simplex4beginners -""" - -from typing import Any - -import numpy as np - - -class Tableau: - """Operate on simplex tableaus - - >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4]]), 2, 2) - Traceback (most recent call last): - ... - TypeError: Tableau must have type float64 - - >>> Tableau(np.array([[-1,-1,0,0,-1],[1,3,1,0,4],[3,1,0,1,4.]]), 2, 2) - Traceback (most recent call last): - ... - ValueError: RHS must be > 0 - - >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4.]]), -2, 2) - Traceback (most recent call last): - ... - ValueError: number of (artificial) variables must be a natural number - """ - - # Max iteration number to prevent cycling - maxiter = 100 - - def __init__( - self, tableau: np.ndarray, n_vars: int, n_artificial_vars: int - ) -> None: - if tableau.dtype != "float64": - raise TypeError("Tableau must have type float64") - - # Check if RHS is negative - if not (tableau[:, -1] >= 0).all(): - raise ValueError("RHS must be > 0") - - if n_vars < 2 or n_artificial_vars < 0: - raise ValueError( - "number of (artificial) variables must be a natural number" - ) - - self.tableau = tableau - self.n_rows, n_cols = tableau.shape - - # Number of decision variables x1, x2, x3... - self.n_vars, self.n_artificial_vars = n_vars, n_artificial_vars - - # 2 if there are >= or == constraints (nonstandard), 1 otherwise (std) - self.n_stages = (self.n_artificial_vars > 0) + 1 - - # Number of slack variables added to make inequalities into equalities - self.n_slack = n_cols - self.n_vars - self.n_artificial_vars - 1 - - # Objectives for each stage - self.objectives = ["max"] - - # In two stage simplex, first minimise then maximise - if self.n_artificial_vars: - self.objectives.append("min") - - self.col_titles = self.generate_col_titles() - - # Index of current pivot row and column - self.row_idx = None - self.col_idx = None - - # Does objective row only contain (non)-negative values? - self.stop_iter = False - - def generate_col_titles(self) -> list[str]: - """Generate column titles for tableau of specific dimensions - - >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4.]]), - ... 2, 0).generate_col_titles() - ['x1', 'x2', 's1', 's2', 'RHS'] - - >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4.]]), - ... 2, 2).generate_col_titles() - ['x1', 'x2', 'RHS'] - """ - args = (self.n_vars, self.n_slack) - - # decision | slack - string_starts = ["x", "s"] - titles = [] - for i in range(2): - for j in range(args[i]): - titles.append(string_starts[i] + str(j + 1)) - titles.append("RHS") - return titles - - def find_pivot(self) -> tuple[Any, Any]: - """Finds the pivot row and column. - >>> tuple(int(x) for x in Tableau(np.array([[-2,1,0,0,0], [3,1,1,0,6], - ... [1,2,0,1,7.]]), 2, 0).find_pivot()) - (1, 0) - """ - objective = self.objectives[-1] - - # Find entries of highest magnitude in objective rows - sign = (objective == "min") - (objective == "max") - col_idx = np.argmax(sign * self.tableau[0, :-1]) - - # Choice is only valid if below 0 for maximise, and above for minimise - if sign * self.tableau[0, col_idx] <= 0: - self.stop_iter = True - return 0, 0 - - # Pivot row is chosen as having the lowest quotient when elements of - # the pivot column divide the right-hand side - - # Slice excluding the objective rows - s = slice(self.n_stages, self.n_rows) - - # RHS - dividend = self.tableau[s, -1] - - # Elements of pivot column within slice - divisor = self.tableau[s, col_idx] - - # Array filled with nans - nans = np.full(self.n_rows - self.n_stages, np.nan) - - # If element in pivot column is greater than zero, return - # quotient or nan otherwise - quotients = np.divide(dividend, divisor, out=nans, where=divisor > 0) - - # Arg of minimum quotient excluding the nan values. n_stages is added - # to compensate for earlier exclusion of objective columns - row_idx = np.nanargmin(quotients) + self.n_stages - return row_idx, col_idx - - def pivot(self, row_idx: int, col_idx: int) -> np.ndarray: - """Pivots on value on the intersection of pivot row and column. - - >>> Tableau(np.array([[-2,-3,0,0,0],[1,3,1,0,4],[3,1,0,1,4.]]), - ... 2, 2).pivot(1, 0).tolist() - ... # doctest: +NORMALIZE_WHITESPACE - [[0.0, 3.0, 2.0, 0.0, 8.0], - [1.0, 3.0, 1.0, 0.0, 4.0], - [0.0, -8.0, -3.0, 1.0, -8.0]] - """ - # Avoid changes to original tableau - piv_row = self.tableau[row_idx].copy() - - piv_val = piv_row[col_idx] - - # Entry becomes 1 - piv_row *= 1 / piv_val - - # Variable in pivot column becomes basic, ie the only non-zero entry - for idx, coeff in enumerate(self.tableau[:, col_idx]): - self.tableau[idx] += -coeff * piv_row - self.tableau[row_idx] = piv_row - return self.tableau - - def change_stage(self) -> np.ndarray: - """Exits first phase of the two-stage method by deleting artificial - rows and columns, or completes the algorithm if exiting the standard - case. - - >>> Tableau(np.array([ - ... [3, 3, -1, -1, 0, 0, 4], - ... [2, 1, 0, 0, 0, 0, 0.], - ... [1, 2, -1, 0, 1, 0, 2], - ... [2, 1, 0, -1, 0, 1, 2] - ... ]), 2, 2).change_stage().tolist() - ... # doctest: +NORMALIZE_WHITESPACE - [[2.0, 1.0, 0.0, 0.0, 0.0], - [1.0, 2.0, -1.0, 0.0, 2.0], - [2.0, 1.0, 0.0, -1.0, 2.0]] - """ - # Objective of original objective row remains - self.objectives.pop() - - if not self.objectives: - return self.tableau - - # Slice containing ids for artificial columns - s = slice(-self.n_artificial_vars - 1, -1) - - # Delete the artificial variable columns - self.tableau = np.delete(self.tableau, s, axis=1) - - # Delete the objective row of the first stage - self.tableau = np.delete(self.tableau, 0, axis=0) - - self.n_stages = 1 - self.n_rows -= 1 - self.n_artificial_vars = 0 - self.stop_iter = False - return self.tableau - - def run_simplex(self) -> dict[Any, Any]: - """Operate on tableau until objective function cannot be - improved further. - - # Standard linear program: - Max: x1 + x2 - ST: x1 + 3x2 <= 4 - 3x1 + x2 <= 4 - >>> {key: float(value) for key, value in Tableau(np.array([[-1,-1,0,0,0], - ... [1,3,1,0,4],[3,1,0,1,4.]]), 2, 0).run_simplex().items()} - {'P': 2.0, 'x1': 1.0, 'x2': 1.0} - - # Standard linear program with 3 variables: - Max: 3x1 + x2 + 3x3 - ST: 2x1 + x2 + x3 ≤ 2 - x1 + 2x2 + 3x3 ≤ 5 - 2x1 + 2x2 + x3 ≤ 6 - >>> {key: float(value) for key, value in Tableau(np.array([ - ... [-3,-1,-3,0,0,0,0], - ... [2,1,1,1,0,0,2], - ... [1,2,3,0,1,0,5], - ... [2,2,1,0,0,1,6.] - ... ]),3,0).run_simplex().items()} # doctest: +ELLIPSIS - {'P': 5.4, 'x1': 0.199..., 'x3': 1.6} - - - # Optimal tableau input: - >>> {key: float(value) for key, value in Tableau(np.array([ - ... [0, 0, 0.25, 0.25, 2], - ... [0, 1, 0.375, -0.125, 1], - ... [1, 0, -0.125, 0.375, 1] - ... ]), 2, 0).run_simplex().items()} - {'P': 2.0, 'x1': 1.0, 'x2': 1.0} - - # Non-standard: >= constraints - Max: 2x1 + 3x2 + x3 - ST: x1 + x2 + x3 <= 40 - 2x1 + x2 - x3 >= 10 - - x2 + x3 >= 10 - >>> {key: float(value) for key, value in Tableau(np.array([ - ... [2, 0, 0, 0, -1, -1, 0, 0, 20], - ... [-2, -3, -1, 0, 0, 0, 0, 0, 0], - ... [1, 1, 1, 1, 0, 0, 0, 0, 40], - ... [2, 1, -1, 0, -1, 0, 1, 0, 10], - ... [0, -1, 1, 0, 0, -1, 0, 1, 10.] - ... ]), 3, 2).run_simplex().items()} - {'P': 70.0, 'x1': 10.0, 'x2': 10.0, 'x3': 20.0} - - # Non standard: minimisation and equalities - Min: x1 + x2 - ST: 2x1 + x2 = 12 - 6x1 + 5x2 = 40 - >>> {key: float(value) for key, value in Tableau(np.array([ - ... [8, 6, 0, 0, 52], - ... [1, 1, 0, 0, 0], - ... [2, 1, 1, 0, 12], - ... [6, 5, 0, 1, 40.], - ... ]), 2, 2).run_simplex().items()} - {'P': 7.0, 'x1': 5.0, 'x2': 2.0} - - - # Pivot on slack variables - Max: 8x1 + 6x2 - ST: x1 + 3x2 <= 33 - 4x1 + 2x2 <= 48 - 2x1 + 4x2 <= 48 - x1 + x2 >= 10 - x1 >= 2 - >>> {key: float(value) for key, value in Tableau(np.array([ - ... [2, 1, 0, 0, 0, -1, -1, 0, 0, 12.0], - ... [-8, -6, 0, 0, 0, 0, 0, 0, 0, 0.0], - ... [1, 3, 1, 0, 0, 0, 0, 0, 0, 33.0], - ... [4, 2, 0, 1, 0, 0, 0, 0, 0, 60.0], - ... [2, 4, 0, 0, 1, 0, 0, 0, 0, 48.0], - ... [1, 1, 0, 0, 0, -1, 0, 1, 0, 10.0], - ... [1, 0, 0, 0, 0, 0, -1, 0, 1, 2.0] - ... ]), 2, 2).run_simplex().items()} # doctest: +ELLIPSIS - {'P': 132.0, 'x1': 12.000... 'x2': 5.999...} - """ - # Stop simplex algorithm from cycling. - for _ in range(Tableau.maxiter): - # Completion of each stage removes an objective. If both stages - # are complete, then no objectives are left - if not self.objectives: - # Find the values of each variable at optimal solution - return self.interpret_tableau() - - row_idx, col_idx = self.find_pivot() - - # If there are no more negative values in objective row - if self.stop_iter: - # Delete artificial variable columns and rows. Update attributes - self.tableau = self.change_stage() - else: - self.tableau = self.pivot(row_idx, col_idx) - return {} - - def interpret_tableau(self) -> dict[str, float]: - """Given the final tableau, add the corresponding values of the basic - decision variables to the `output_dict` - >>> {key: float(value) for key, value in Tableau(np.array([ - ... [0,0,0.875,0.375,5], - ... [0,1,0.375,-0.125,1], - ... [1,0,-0.125,0.375,1] - ... ]),2, 0).interpret_tableau().items()} - {'P': 5.0, 'x1': 1.0, 'x2': 1.0} - """ - # P = RHS of final tableau - output_dict = {"P": abs(self.tableau[0, -1])} - - for i in range(self.n_vars): - # Gives indices of nonzero entries in the ith column - nonzero = np.nonzero(self.tableau[:, i]) - n_nonzero = len(nonzero[0]) - - # First entry in the nonzero indices - nonzero_rowidx = nonzero[0][0] - nonzero_val = self.tableau[nonzero_rowidx, i] - - # If there is only one nonzero value in column, which is one - if n_nonzero == 1 and nonzero_val == 1: - rhs_val = self.tableau[nonzero_rowidx, -1] - output_dict[self.col_titles[i]] = rhs_val - return output_dict - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/__init__.py b/machine_learning/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/machine_learning/apriori_algorithm.py b/machine_learning/apriori_algorithm.py deleted file mode 100644 index 09a89ac236bd..000000000000 --- a/machine_learning/apriori_algorithm.py +++ /dev/null @@ -1,113 +0,0 @@ -""" -Apriori Algorithm is a Association rule mining technique, also known as market basket -analysis, aims to discover interesting relationships or associations among a set of -items in a transactional or relational database. - -For example, Apriori Algorithm states: "If a customer buys item A and item B, then they -are likely to buy item C." This rule suggests a relationship between items A, B, and C, -indicating that customers who purchased A and B are more likely to also purchase item C. - -WIKI: https://en.wikipedia.org/wiki/Apriori_algorithm -Examples: https://www.kaggle.com/code/earthian/apriori-association-rules-mining -""" - -from itertools import combinations - - -def load_data() -> list[list[str]]: - """ - Returns a sample transaction dataset. - - >>> load_data() - [['milk'], ['milk', 'butter'], ['milk', 'bread'], ['milk', 'bread', 'chips']] - """ - return [["milk"], ["milk", "butter"], ["milk", "bread"], ["milk", "bread", "chips"]] - - -def prune(itemset: list, candidates: list, length: int) -> list: - """ - Prune candidate itemsets that are not frequent. - The goal of pruning is to filter out candidate itemsets that are not frequent. This - is done by checking if all the (k-1) subsets of a candidate itemset are present in - the frequent itemsets of the previous iteration (valid subsequences of the frequent - itemsets from the previous iteration). - - Prunes candidate itemsets that are not frequent. - - >>> itemset = ['X', 'Y', 'Z'] - >>> candidates = [['X', 'Y'], ['X', 'Z'], ['Y', 'Z']] - >>> prune(itemset, candidates, 2) - [['X', 'Y'], ['X', 'Z'], ['Y', 'Z']] - - >>> itemset = ['1', '2', '3', '4'] - >>> candidates = ['1', '2', '4'] - >>> prune(itemset, candidates, 3) - [] - """ - pruned = [] - for candidate in candidates: - is_subsequence = True - for item in candidate: - if item not in itemset or itemset.count(item) < length - 1: - is_subsequence = False - break - if is_subsequence: - pruned.append(candidate) - return pruned - - -def apriori(data: list[list[str]], min_support: int) -> list[tuple[list[str], int]]: - """ - Returns a list of frequent itemsets and their support counts. - - >>> data = [['A', 'B', 'C'], ['A', 'B'], ['A', 'C'], ['A', 'D'], ['B', 'C']] - >>> apriori(data, 2) - [(['A', 'B'], 1), (['A', 'C'], 2), (['B', 'C'], 2)] - - >>> data = [['1', '2', '3'], ['1', '2'], ['1', '3'], ['1', '4'], ['2', '3']] - >>> apriori(data, 3) - [] - """ - itemset = [list(transaction) for transaction in data] - frequent_itemsets = [] - length = 1 - - while itemset: - # Count itemset support - counts = [0] * len(itemset) - for transaction in data: - for j, candidate in enumerate(itemset): - if all(item in transaction for item in candidate): - counts[j] += 1 - - # Prune infrequent itemsets - itemset = [item for i, item in enumerate(itemset) if counts[i] >= min_support] - - # Append frequent itemsets (as a list to maintain order) - for i, item in enumerate(itemset): - frequent_itemsets.append((sorted(item), counts[i])) - - length += 1 - itemset = prune(itemset, list(combinations(itemset, length)), length) - - return frequent_itemsets - - -if __name__ == "__main__": - """ - Apriori algorithm for finding frequent itemsets. - - Args: - data: A list of transactions, where each transaction is a list of items. - min_support: The minimum support threshold for frequent itemsets. - - Returns: - A list of frequent itemsets along with their support counts. - """ - import doctest - - doctest.testmod() - - # user-defined threshold or minimum support level - frequent_itemsets = apriori(data=load_data(), min_support=2) - print("\n".join(f"{itemset}: {support}" for itemset, support in frequent_itemsets)) diff --git a/machine_learning/astar.py b/machine_learning/astar.py deleted file mode 100644 index a5859e51fe70..000000000000 --- a/machine_learning/astar.py +++ /dev/null @@ -1,148 +0,0 @@ -""" -The A* algorithm combines features of uniform-cost search and pure heuristic search to -efficiently compute optimal solutions. - -The A* algorithm is a best-first search algorithm in which the cost associated with a -node is f(n) = g(n) + h(n), where g(n) is the cost of the path from the initial state to -node n and h(n) is the heuristic estimate or the cost or a path from node n to a goal. - -The A* algorithm introduces a heuristic into a regular graph-searching algorithm, -essentially planning ahead at each step so a more optimal decision is made. For this -reason, A* is known as an algorithm with brains. - -https://en.wikipedia.org/wiki/A*_search_algorithm -""" - -import numpy as np - - -class Cell: - """ - Class cell represents a cell in the world which have the properties: - position: represented by tuple of x and y coordinates initially set to (0,0). - parent: Contains the parent cell object visited before we arrived at this cell. - g, h, f: Parameters used when calling our heuristic function. - """ - - def __init__(self): - self.position = (0, 0) - self.parent = None - self.g = 0 - self.h = 0 - self.f = 0 - - """ - Overrides equals method because otherwise cell assign will give - wrong results. - """ - - def __eq__(self, cell): - return self.position == cell.position - - def showcell(self): - print(self.position) - - -class Gridworld: - """ - Gridworld class represents the external world here a grid M*M - matrix. - world_size: create a numpy array with the given world_size default is 5. - """ - - def __init__(self, world_size=(5, 5)): - self.w = np.zeros(world_size) - self.world_x_limit = world_size[0] - self.world_y_limit = world_size[1] - - def show(self): - print(self.w) - - def get_neighbours(self, cell): - """ - Return the neighbours of cell - """ - neughbour_cord = [ - (-1, -1), - (-1, 0), - (-1, 1), - (0, -1), - (0, 1), - (1, -1), - (1, 0), - (1, 1), - ] - current_x = cell.position[0] - current_y = cell.position[1] - neighbours = [] - for n in neughbour_cord: - x = current_x + n[0] - y = current_y + n[1] - if 0 <= x < self.world_x_limit and 0 <= y < self.world_y_limit: - c = Cell() - c.position = (x, y) - c.parent = cell - neighbours.append(c) - return neighbours - - -def astar(world, start, goal): - """ - Implementation of a start algorithm. - world : Object of the world object. - start : Object of the cell as start position. - stop : Object of the cell as goal position. - - >>> p = Gridworld() - >>> start = Cell() - >>> start.position = (0,0) - >>> goal = Cell() - >>> goal.position = (4,4) - >>> astar(p, start, goal) - [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] - """ - _open = [] - _closed = [] - _open.append(start) - - while _open: - min_f = np.argmin([n.f for n in _open]) - current = _open[min_f] - _closed.append(_open.pop(min_f)) - if current == goal: - break - for n in world.get_neighbours(current): - for c in _closed: - if c == n: - continue - n.g = current.g + 1 - x1, y1 = n.position - x2, y2 = goal.position - n.h = (y2 - y1) ** 2 + (x2 - x1) ** 2 - n.f = n.h + n.g - - for c in _open: - if c == n and c.f < n.f: - continue - _open.append(n) - path = [] - while current.parent is not None: - path.append(current.position) - current = current.parent - path.append(current.position) - return path[::-1] - - -if __name__ == "__main__": - world = Gridworld() - # Start position and goal - start = Cell() - start.position = (0, 0) - goal = Cell() - goal.position = (4, 4) - print(f"path from {start.position} to {goal.position}") - s = astar(world, start, goal) - # Just for visual reasons. - for i in s: - world.w[i] = 1 - print(world.w) diff --git a/machine_learning/automatic_differentiation.py b/machine_learning/automatic_differentiation.py deleted file mode 100644 index 5c2708247c21..000000000000 --- a/machine_learning/automatic_differentiation.py +++ /dev/null @@ -1,328 +0,0 @@ -""" -Demonstration of the Automatic Differentiation (Reverse mode). - -Reference: https://en.wikipedia.org/wiki/Automatic_differentiation - -Author: Poojan Smart -Email: smrtpoojan@gmail.com -""" - -from __future__ import annotations - -from collections import defaultdict -from enum import Enum -from types import TracebackType -from typing import Any - -import numpy as np -from typing_extensions import Self # noqa: UP035 - - -class OpType(Enum): - """ - Class represents list of supported operations on Variable for gradient calculation. - """ - - ADD = 0 - SUB = 1 - MUL = 2 - DIV = 3 - MATMUL = 4 - POWER = 5 - NOOP = 6 - - -class Variable: - """ - Class represents n-dimensional object which is used to wrap numpy array on which - operations will be performed and the gradient will be calculated. - - Examples: - >>> Variable(5.0) - Variable(5.0) - >>> Variable([5.0, 2.9]) - Variable([5. 2.9]) - >>> Variable([5.0, 2.9]) + Variable([1.0, 5.5]) - Variable([6. 8.4]) - >>> Variable([[8.0, 10.0]]) - Variable([[ 8. 10.]]) - """ - - def __init__(self, value: Any) -> None: - self.value = np.array(value) - - # pointers to the operations to which the Variable is input - self.param_to: list[Operation] = [] - # pointer to the operation of which the Variable is output of - self.result_of: Operation = Operation(OpType.NOOP) - - def __repr__(self) -> str: - return f"Variable({self.value})" - - def to_ndarray(self) -> np.ndarray: - return self.value - - def __add__(self, other: Variable) -> Variable: - result = Variable(self.value + other.value) - - with GradientTracker() as tracker: - # if tracker is enabled, computation graph will be updated - if tracker.enabled: - tracker.append(OpType.ADD, params=[self, other], output=result) - return result - - def __sub__(self, other: Variable) -> Variable: - result = Variable(self.value - other.value) - - with GradientTracker() as tracker: - # if tracker is enabled, computation graph will be updated - if tracker.enabled: - tracker.append(OpType.SUB, params=[self, other], output=result) - return result - - def __mul__(self, other: Variable) -> Variable: - result = Variable(self.value * other.value) - - with GradientTracker() as tracker: - # if tracker is enabled, computation graph will be updated - if tracker.enabled: - tracker.append(OpType.MUL, params=[self, other], output=result) - return result - - def __truediv__(self, other: Variable) -> Variable: - result = Variable(self.value / other.value) - - with GradientTracker() as tracker: - # if tracker is enabled, computation graph will be updated - if tracker.enabled: - tracker.append(OpType.DIV, params=[self, other], output=result) - return result - - def __matmul__(self, other: Variable) -> Variable: - result = Variable(self.value @ other.value) - - with GradientTracker() as tracker: - # if tracker is enabled, computation graph will be updated - if tracker.enabled: - tracker.append(OpType.MATMUL, params=[self, other], output=result) - return result - - def __pow__(self, power: int) -> Variable: - result = Variable(self.value**power) - - with GradientTracker() as tracker: - # if tracker is enabled, computation graph will be updated - if tracker.enabled: - tracker.append( - OpType.POWER, - params=[self], - output=result, - other_params={"power": power}, - ) - return result - - def add_param_to(self, param_to: Operation) -> None: - self.param_to.append(param_to) - - def add_result_of(self, result_of: Operation) -> None: - self.result_of = result_of - - -class Operation: - """ - Class represents operation between single or two Variable objects. - Operation objects contains type of operation, pointers to input Variable - objects and pointer to resulting Variable from the operation. - """ - - def __init__( - self, - op_type: OpType, - other_params: dict | None = None, - ) -> None: - self.op_type = op_type - self.other_params = {} if other_params is None else other_params - - def add_params(self, params: list[Variable]) -> None: - self.params = params - - def add_output(self, output: Variable) -> None: - self.output = output - - def __eq__(self, value) -> bool: - return self.op_type == value if isinstance(value, OpType) else False - - -class GradientTracker: - """ - Class contains methods to compute partial derivatives of Variable - based on the computation graph. - - Examples: - - >>> with GradientTracker() as tracker: - ... a = Variable([2.0, 5.0]) - ... b = Variable([1.0, 2.0]) - ... m = Variable([1.0, 2.0]) - ... c = a + b - ... d = a * b - ... e = c / d - >>> tracker.gradient(e, a) - array([-0.25, -0.04]) - >>> tracker.gradient(e, b) - array([-1. , -0.25]) - >>> tracker.gradient(e, m) is None - True - - >>> with GradientTracker() as tracker: - ... a = Variable([[2.0, 5.0]]) - ... b = Variable([[1.0], [2.0]]) - ... c = a @ b - >>> tracker.gradient(c, a) - array([[1., 2.]]) - >>> tracker.gradient(c, b) - array([[2.], - [5.]]) - - >>> with GradientTracker() as tracker: - ... a = Variable([[2.0, 5.0]]) - ... b = a ** 3 - >>> tracker.gradient(b, a) - array([[12., 75.]]) - """ - - instance = None - - def __new__(cls) -> Self: - """ - Executes at the creation of class object and returns if - object is already created. This class follows singleton - design pattern. - """ - if cls.instance is None: - cls.instance = super().__new__(cls) - return cls.instance - - def __init__(self) -> None: - self.enabled = False - - def __enter__(self) -> Self: - self.enabled = True - return self - - def __exit__( - self, - exc_type: type[BaseException] | None, - exc: BaseException | None, - traceback: TracebackType | None, - ) -> None: - self.enabled = False - - def append( - self, - op_type: OpType, - params: list[Variable], - output: Variable, - other_params: dict | None = None, - ) -> None: - """ - Adds Operation object to the related Variable objects for - creating computational graph for calculating gradients. - - Args: - op_type: Operation type - params: Input parameters to the operation - output: Output variable of the operation - """ - operation = Operation(op_type, other_params=other_params) - param_nodes = [] - for param in params: - param.add_param_to(operation) - param_nodes.append(param) - output.add_result_of(operation) - - operation.add_params(param_nodes) - operation.add_output(output) - - def gradient(self, target: Variable, source: Variable) -> np.ndarray | None: - """ - Reverse accumulation of partial derivatives to calculate gradients - of target variable with respect to source variable. - - Args: - target: target variable for which gradients are calculated. - source: source variable with respect to which the gradients are - calculated. - - Returns: - Gradient of the source variable with respect to the target variable - """ - - # partial derivatives with respect to target - partial_deriv = defaultdict(lambda: 0) - partial_deriv[target] = np.ones_like(target.to_ndarray()) - - # iterating through each operations in the computation graph - operation_queue = [target.result_of] - while len(operation_queue) > 0: - operation = operation_queue.pop() - for param in operation.params: - # as per the chain rule, multiplying partial derivatives - # of variables with respect to the target - dparam_doutput = self.derivative(param, operation) - dparam_dtarget = dparam_doutput * partial_deriv[operation.output] - partial_deriv[param] += dparam_dtarget - - if param.result_of and param.result_of != OpType.NOOP: - operation_queue.append(param.result_of) - - return partial_deriv.get(source) - - def derivative(self, param: Variable, operation: Operation) -> np.ndarray: - """ - Compute the derivative of given operation/function - - Args: - param: variable to be differentiated - operation: function performed on the input variable - - Returns: - Derivative of input variable with respect to the output of - the operation - """ - params = operation.params - - if operation == OpType.ADD: - return np.ones_like(params[0].to_ndarray(), dtype=np.float64) - if operation == OpType.SUB: - if params[0] == param: - return np.ones_like(params[0].to_ndarray(), dtype=np.float64) - return -np.ones_like(params[1].to_ndarray(), dtype=np.float64) - if operation == OpType.MUL: - return ( - params[1].to_ndarray().T - if params[0] == param - else params[0].to_ndarray().T - ) - if operation == OpType.DIV: - if params[0] == param: - return 1 / params[1].to_ndarray() - return -params[0].to_ndarray() / (params[1].to_ndarray() ** 2) - if operation == OpType.MATMUL: - return ( - params[1].to_ndarray().T - if params[0] == param - else params[0].to_ndarray().T - ) - if operation == OpType.POWER: - power = operation.other_params["power"] - return power * (params[0].to_ndarray() ** (power - 1)) - - err_msg = f"invalid operation type: {operation.op_type}" - raise ValueError(err_msg) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/data_transformations.py b/machine_learning/data_transformations.py deleted file mode 100644 index a1c28d514fd5..000000000000 --- a/machine_learning/data_transformations.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -Normalization. - -Wikipedia: https://en.wikipedia.org/wiki/Normalization -Normalization is the process of converting numerical data to a standard range of values. -This range is typically between [0, 1] or [-1, 1]. The equation for normalization is -x_norm = (x - x_min)/(x_max - x_min) where x_norm is the normalized value, x is the -value, x_min is the minimum value within the column or list of data, and x_max is the -maximum value within the column or list of data. Normalization is used to speed up the -training of data and put all of the data on a similar scale. This is useful because -variance in the range of values of a dataset can heavily impact optimization -(particularly Gradient Descent). - -Standardization Wikipedia: https://en.wikipedia.org/wiki/Standardization -Standardization is the process of converting numerical data to a normally distributed -range of values. This range will have a mean of 0 and standard deviation of 1. This is -also known as z-score normalization. The equation for standardization is -x_std = (x - mu)/(sigma) where mu is the mean of the column or list of values and sigma -is the standard deviation of the column or list of values. - -Choosing between Normalization & Standardization is more of an art of a science, but it -is often recommended to run experiments with both to see which performs better. -Additionally, a few rules of thumb are: - 1. gaussian (normal) distributions work better with standardization - 2. non-gaussian (non-normal) distributions work better with normalization - 3. If a column or list of values has extreme values / outliers, use standardization -""" - -from statistics import mean, stdev - - -def normalization(data: list, ndigits: int = 3) -> list: - """ - Return a normalized list of values. - - @params: data, a list of values to normalize - @returns: a list of normalized values (rounded to ndigits decimal places) - @examples: - >>> normalization([2, 7, 10, 20, 30, 50]) - [0.0, 0.104, 0.167, 0.375, 0.583, 1.0] - >>> normalization([5, 10, 15, 20, 25]) - [0.0, 0.25, 0.5, 0.75, 1.0] - """ - # variables for calculation - x_min = min(data) - x_max = max(data) - # normalize data - return [round((x - x_min) / (x_max - x_min), ndigits) for x in data] - - -def standardization(data: list, ndigits: int = 3) -> list: - """ - Return a standardized list of values. - - @params: data, a list of values to standardize - @returns: a list of standardized values (rounded to ndigits decimal places) - @examples: - >>> standardization([2, 7, 10, 20, 30, 50]) - [-0.999, -0.719, -0.551, 0.009, 0.57, 1.69] - >>> standardization([5, 10, 15, 20, 25]) - [-1.265, -0.632, 0.0, 0.632, 1.265] - """ - # variables for calculation - mu = mean(data) - sigma = stdev(data) - # standardize data - return [round((x - mu) / (sigma), ndigits) for x in data] diff --git a/machine_learning/decision_tree.py b/machine_learning/decision_tree.py deleted file mode 100644 index 72970431c3fc..000000000000 --- a/machine_learning/decision_tree.py +++ /dev/null @@ -1,204 +0,0 @@ -""" -Implementation of a basic regression decision tree. -Input data set: The input data set must be 1-dimensional with continuous labels. -Output: The decision tree maps a real number input to a real number output. -""" - -import numpy as np - - -class DecisionTree: - def __init__(self, depth=5, min_leaf_size=5): - self.depth = depth - self.decision_boundary = 0 - self.left = None - self.right = None - self.min_leaf_size = min_leaf_size - self.prediction = None - - def mean_squared_error(self, labels, prediction): - """ - mean_squared_error: - @param labels: a one-dimensional numpy array - @param prediction: a floating point value - return value: mean_squared_error calculates the error if prediction is used to - estimate the labels - >>> tester = DecisionTree() - >>> test_labels = np.array([1,2,3,4,5,6,7,8,9,10]) - >>> test_prediction = float(6) - >>> bool(tester.mean_squared_error(test_labels, test_prediction) == ( - ... TestDecisionTree.helper_mean_squared_error_test(test_labels, - ... test_prediction))) - True - >>> test_labels = np.array([1,2,3]) - >>> test_prediction = float(2) - >>> bool(tester.mean_squared_error(test_labels, test_prediction) == ( - ... TestDecisionTree.helper_mean_squared_error_test(test_labels, - ... test_prediction))) - True - """ - if labels.ndim != 1: - print("Error: Input labels must be one dimensional") - - return np.mean((labels - prediction) ** 2) - - def train(self, x, y): - """ - train: - @param x: a one-dimensional numpy array - @param y: a one-dimensional numpy array. - The contents of y are the labels for the corresponding X values - - train() does not have a return value - - Examples: - 1. Try to train when x & y are of same length & 1 dimensions (No errors) - >>> dt = DecisionTree() - >>> dt.train(np.array([10,20,30,40,50]),np.array([0,0,0,1,1])) - - 2. Try to train when x is 2 dimensions - >>> dt = DecisionTree() - >>> dt.train(np.array([[1,2,3,4,5],[1,2,3,4,5]]),np.array([0,0,0,1,1])) - Traceback (most recent call last): - ... - ValueError: Input data set must be one-dimensional - - 3. Try to train when x and y are not of the same length - >>> dt = DecisionTree() - >>> dt.train(np.array([1,2,3,4,5]),np.array([[0,0,0,1,1],[0,0,0,1,1]])) - Traceback (most recent call last): - ... - ValueError: x and y have different lengths - - 4. Try to train when x & y are of the same length but different dimensions - >>> dt = DecisionTree() - >>> dt.train(np.array([1,2,3,4,5]),np.array([[1],[2],[3],[4],[5]])) - Traceback (most recent call last): - ... - ValueError: Data set labels must be one-dimensional - - This section is to check that the inputs conform to our dimensionality - constraints - """ - if x.ndim != 1: - raise ValueError("Input data set must be one-dimensional") - if len(x) != len(y): - raise ValueError("x and y have different lengths") - if y.ndim != 1: - raise ValueError("Data set labels must be one-dimensional") - - if len(x) < 2 * self.min_leaf_size: - self.prediction = np.mean(y) - return - - if self.depth == 1: - self.prediction = np.mean(y) - return - - best_split = 0 - min_error = self.mean_squared_error(x, np.mean(y)) * 2 - - """ - loop over all possible splits for the decision tree. find the best split. - if no split exists that is less than 2 * error for the entire array - then the data set is not split and the average for the entire array is used as - the predictor - """ - for i in range(len(x)): - if len(x[:i]) < self.min_leaf_size: # noqa: SIM114 - continue - elif len(x[i:]) < self.min_leaf_size: - continue - else: - error_left = self.mean_squared_error(x[:i], np.mean(y[:i])) - error_right = self.mean_squared_error(x[i:], np.mean(y[i:])) - error = error_left + error_right - if error < min_error: - best_split = i - min_error = error - - if best_split != 0: - left_x = x[:best_split] - left_y = y[:best_split] - right_x = x[best_split:] - right_y = y[best_split:] - - self.decision_boundary = x[best_split] - self.left = DecisionTree( - depth=self.depth - 1, min_leaf_size=self.min_leaf_size - ) - self.right = DecisionTree( - depth=self.depth - 1, min_leaf_size=self.min_leaf_size - ) - self.left.train(left_x, left_y) - self.right.train(right_x, right_y) - else: - self.prediction = np.mean(y) - - return - - def predict(self, x): - """ - predict: - @param x: a floating point value to predict the label of - the prediction function works by recursively calling the predict function - of the appropriate subtrees based on the tree's decision boundary - """ - if self.prediction is not None: - return self.prediction - elif self.left or self.right is not None: - if x >= self.decision_boundary: - return self.right.predict(x) - else: - return self.left.predict(x) - else: - print("Error: Decision tree not yet trained") - return None - - -class TestDecisionTree: - """Decision Tres test class""" - - @staticmethod - def helper_mean_squared_error_test(labels, prediction): - """ - helper_mean_squared_error_test: - @param labels: a one dimensional numpy array - @param prediction: a floating point value - return value: helper_mean_squared_error_test calculates the mean squared error - """ - squared_error_sum = float(0) - for label in labels: - squared_error_sum += (label - prediction) ** 2 - - return float(squared_error_sum / labels.size) - - -def main(): - """ - In this demonstration we're generating a sample data set from the sin function in - numpy. We then train a decision tree on the data set and use the decision tree to - predict the label of 10 different test values. Then the mean squared error over - this test is displayed. - """ - x = np.arange(-1.0, 1.0, 0.005) - y = np.sin(x) - - tree = DecisionTree(depth=10, min_leaf_size=10) - tree.train(x, y) - - rng = np.random.default_rng() - test_cases = (rng.random(10) * 2) - 1 - predictions = np.array([tree.predict(x) for x in test_cases]) - avg_error = np.mean((predictions - test_cases) ** 2) - - print("Test values: " + str(test_cases)) - print("Predictions: " + str(predictions)) - print("Average error: " + str(avg_error)) - - -if __name__ == "__main__": - main() - import doctest - - doctest.testmod(name="mean_squarred_error", verbose=True) diff --git a/machine_learning/dimensionality_reduction.py b/machine_learning/dimensionality_reduction.py deleted file mode 100644 index 50d442ecc3de..000000000000 --- a/machine_learning/dimensionality_reduction.py +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2023 Diego Gasco (diego.gasco99@gmail.com), Diegomangasco on GitHub - -""" -Requirements: - - numpy version 1.21 - - scipy version 1.3.3 -Notes: - - Each column of the features matrix corresponds to a class item -""" - -import logging - -import numpy as np -import pytest -from scipy.linalg import eigh - -logging.basicConfig(level=logging.INFO, format="%(message)s") - - -def column_reshape(input_array: np.ndarray) -> np.ndarray: - """Function to reshape a row Numpy array into a column Numpy array - >>> input_array = np.array([1, 2, 3]) - >>> column_reshape(input_array) - array([[1], - [2], - [3]]) - """ - - return input_array.reshape((input_array.size, 1)) - - -def covariance_within_classes( - features: np.ndarray, labels: np.ndarray, classes: int -) -> np.ndarray: - """Function to compute the covariance matrix inside each class. - >>> features = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) - >>> labels = np.array([0, 1, 0]) - >>> covariance_within_classes(features, labels, 2) - array([[0.66666667, 0.66666667, 0.66666667], - [0.66666667, 0.66666667, 0.66666667], - [0.66666667, 0.66666667, 0.66666667]]) - """ - - covariance_sum = np.nan - for i in range(classes): - data = features[:, labels == i] - data_mean = data.mean(1) - # Centralize the data of class i - centered_data = data - column_reshape(data_mean) - if i > 0: - # If covariance_sum is not None - covariance_sum += np.dot(centered_data, centered_data.T) - else: - # If covariance_sum is np.nan (i.e. first loop) - covariance_sum = np.dot(centered_data, centered_data.T) - - return covariance_sum / features.shape[1] - - -def covariance_between_classes( - features: np.ndarray, labels: np.ndarray, classes: int -) -> np.ndarray: - """Function to compute the covariance matrix between multiple classes - >>> features = np.array([[9, 2, 3], [4, 3, 6], [1, 8, 9]]) - >>> labels = np.array([0, 1, 0]) - >>> covariance_between_classes(features, labels, 2) - array([[ 3.55555556, 1.77777778, -2.66666667], - [ 1.77777778, 0.88888889, -1.33333333], - [-2.66666667, -1.33333333, 2. ]]) - """ - - general_data_mean = features.mean(1) - covariance_sum = np.nan - for i in range(classes): - data = features[:, labels == i] - device_data = data.shape[1] - data_mean = data.mean(1) - if i > 0: - # If covariance_sum is not None - covariance_sum += device_data * np.dot( - column_reshape(data_mean) - column_reshape(general_data_mean), - (column_reshape(data_mean) - column_reshape(general_data_mean)).T, - ) - else: - # If covariance_sum is np.nan (i.e. first loop) - covariance_sum = device_data * np.dot( - column_reshape(data_mean) - column_reshape(general_data_mean), - (column_reshape(data_mean) - column_reshape(general_data_mean)).T, - ) - - return covariance_sum / features.shape[1] - - -def principal_component_analysis(features: np.ndarray, dimensions: int) -> np.ndarray: - """ - Principal Component Analysis. - - For more details, see: https://en.wikipedia.org/wiki/Principal_component_analysis. - Parameters: - * features: the features extracted from the dataset - * dimensions: to filter the projected data for the desired dimension - - >>> test_principal_component_analysis() - """ - - # Check if the features have been loaded - if features.any(): - data_mean = features.mean(1) - # Center the dataset - centered_data = features - np.reshape(data_mean, (data_mean.size, 1)) - covariance_matrix = np.dot(centered_data, centered_data.T) / features.shape[1] - _, eigenvectors = np.linalg.eigh(covariance_matrix) - # Take all the columns in the reverse order (-1), and then takes only the first - filtered_eigenvectors = eigenvectors[:, ::-1][:, 0:dimensions] - # Project the database on the new space - projected_data = np.dot(filtered_eigenvectors.T, features) - logging.info("Principal Component Analysis computed") - - return projected_data - else: - logging.basicConfig(level=logging.ERROR, format="%(message)s", force=True) - logging.error("Dataset empty") - raise AssertionError - - -def linear_discriminant_analysis( - features: np.ndarray, labels: np.ndarray, classes: int, dimensions: int -) -> np.ndarray: - """ - Linear Discriminant Analysis. - - For more details, see: https://en.wikipedia.org/wiki/Linear_discriminant_analysis. - Parameters: - * features: the features extracted from the dataset - * labels: the class labels of the features - * classes: the number of classes present in the dataset - * dimensions: to filter the projected data for the desired dimension - - >>> test_linear_discriminant_analysis() - """ - - # Check if the dimension desired is less than the number of classes - assert classes > dimensions - - # Check if features have been already loaded - if features.any: - _, eigenvectors = eigh( - covariance_between_classes(features, labels, classes), - covariance_within_classes(features, labels, classes), - ) - filtered_eigenvectors = eigenvectors[:, ::-1][:, :dimensions] - svd_matrix, _, _ = np.linalg.svd(filtered_eigenvectors) - filtered_svd_matrix = svd_matrix[:, 0:dimensions] - projected_data = np.dot(filtered_svd_matrix.T, features) - logging.info("Linear Discriminant Analysis computed") - - return projected_data - else: - logging.basicConfig(level=logging.ERROR, format="%(message)s", force=True) - logging.error("Dataset empty") - raise AssertionError - - -def test_linear_discriminant_analysis() -> None: - # Create dummy dataset with 2 classes and 3 features - features = np.array([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7]]) - labels = np.array([0, 0, 0, 1, 1]) - classes = 2 - dimensions = 2 - - # Assert that the function raises an AssertionError if dimensions > classes - with pytest.raises(AssertionError) as error_info: # noqa: PT012 - projected_data = linear_discriminant_analysis( - features, labels, classes, dimensions - ) - if isinstance(projected_data, np.ndarray): - raise AssertionError( - "Did not raise AssertionError for dimensions > classes" - ) - assert error_info.type is AssertionError - - -def test_principal_component_analysis() -> None: - features = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) - dimensions = 2 - expected_output = np.array([[6.92820323, 8.66025404, 10.39230485], [3.0, 3.0, 3.0]]) - - with pytest.raises(AssertionError) as error_info: # noqa: PT012 - output = principal_component_analysis(features, dimensions) - if not np.allclose(expected_output, output): - raise AssertionError - assert error_info.type is AssertionError - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/forecasting/__init__.py b/machine_learning/forecasting/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/machine_learning/forecasting/ex_data.csv b/machine_learning/forecasting/ex_data.csv deleted file mode 100644 index e6e73c4a1ca4..000000000000 --- a/machine_learning/forecasting/ex_data.csv +++ /dev/null @@ -1,114 +0,0 @@ -total_users,total_events,days -18231,0.0,1 -22621,1.0,2 -15675,0.0,3 -23583,1.0,4 -68351,5.0,5 -34338,3.0,6 -19238,0.0,0 -24192,0.0,1 -70349,0.0,2 -103510,0.0,3 -128355,1.0,4 -148484,6.0,5 -153489,3.0,6 -162667,1.0,0 -311430,3.0,1 -435663,7.0,2 -273526,0.0,3 -628588,2.0,4 -454989,13.0,5 -539040,3.0,6 -52974,1.0,0 -103451,2.0,1 -810020,5.0,2 -580982,3.0,3 -216515,0.0,4 -134694,10.0,5 -93563,1.0,6 -55432,1.0,0 -169634,1.0,1 -254908,4.0,2 -315285,3.0,3 -191764,0.0,4 -514284,7.0,5 -181214,4.0,6 -78459,2.0,0 -161620,3.0,1 -245610,4.0,2 -326722,5.0,3 -214578,0.0,4 -312365,5.0,5 -232454,4.0,6 -178368,1.0,0 -97152,1.0,1 -222813,4.0,2 -285852,4.0,3 -192149,1.0,4 -142241,1.0,5 -173011,2.0,6 -56488,3.0,0 -89572,2.0,1 -356082,2.0,2 -172799,0.0,3 -142300,1.0,4 -78432,2.0,5 -539023,9.0,6 -62389,1.0,0 -70247,1.0,1 -89229,0.0,2 -94583,1.0,3 -102455,0.0,4 -129270,0.0,5 -311409,1.0,6 -1837026,0.0,0 -361824,0.0,1 -111379,2.0,2 -76337,2.0,3 -96747,0.0,4 -92058,0.0,5 -81929,2.0,6 -143423,0.0,0 -82939,0.0,1 -74403,1.0,2 -68234,0.0,3 -94556,1.0,4 -80311,0.0,5 -75283,3.0,6 -77724,0.0,0 -49229,2.0,1 -65708,2.0,2 -273864,1.0,3 -1711281,0.0,4 -1900253,5.0,5 -343071,1.0,6 -1551326,0.0,0 -56636,1.0,1 -272782,2.0,2 -1785678,0.0,3 -241866,0.0,4 -461904,0.0,5 -2191901,2.0,6 -102925,0.0,0 -242778,1.0,1 -298608,0.0,2 -322458,10.0,3 -216027,9.0,4 -916052,12.0,5 -193278,12.0,6 -263207,8.0,0 -672948,10.0,1 -281909,1.0,2 -384562,1.0,3 -1027375,2.0,4 -828905,9.0,5 -624188,22.0,6 -392218,8.0,0 -292581,10.0,1 -299869,12.0,2 -769455,20.0,3 -316443,8.0,4 -1212864,24.0,5 -1397338,28.0,6 -223249,8.0,0 -191264,14.0,1 diff --git a/machine_learning/forecasting/run.py b/machine_learning/forecasting/run.py deleted file mode 100644 index 9d81b03cd09e..000000000000 --- a/machine_learning/forecasting/run.py +++ /dev/null @@ -1,162 +0,0 @@ -""" -this is code for forecasting -but I modified it and used it for safety checker of data -for ex: you have an online shop and for some reason some data are -missing (the amount of data that u expected are not supposed to be) - then we can use it -*ps : 1. ofc we can use normal statistic method but in this case - the data is quite absurd and only a little^^ - 2. ofc u can use this and modified it for forecasting purpose - for the next 3 months sales or something, - u can just adjust it for ur own purpose -""" - -from warnings import simplefilter - -import numpy as np -import pandas as pd -from sklearn.preprocessing import Normalizer -from sklearn.svm import SVR -from statsmodels.tsa.statespace.sarimax import SARIMAX - - -def linear_regression_prediction( - train_dt: list, train_usr: list, train_mtch: list, test_dt: list, test_mtch: list -) -> float: - """ - First method: linear regression - input : training data (date, total_user, total_event) in list of float - output : list of total user prediction in float - >>> n = linear_regression_prediction([2,3,4,5], [5,3,4,6], [3,1,2,4], [2,1], [2,2]) - >>> bool(abs(n - 5.0) < 1e-6) # Checking precision because of floating point errors - True - """ - x = np.array([[1, item, train_mtch[i]] for i, item in enumerate(train_dt)]) - y = np.array(train_usr) - beta = np.dot(np.dot(np.linalg.inv(np.dot(x.transpose(), x)), x.transpose()), y) - return abs(beta[0] + test_dt[0] * beta[1] + test_mtch[0] + beta[2]) - - -def sarimax_predictor(train_user: list, train_match: list, test_match: list) -> float: - """ - second method: Sarimax - sarimax is a statistic method which using previous input - and learn its pattern to predict future data - input : training data (total_user, with exog data = total_event) in list of float - output : list of total user prediction in float - >>> sarimax_predictor([4,2,6,8], [3,1,2,4], [2]) - 6.6666671111109626 - """ - # Suppress the User Warning raised by SARIMAX due to insufficient observations - simplefilter("ignore", UserWarning) - order = (1, 2, 1) - seasonal_order = (1, 1, 1, 7) - model = SARIMAX( - train_user, exog=train_match, order=order, seasonal_order=seasonal_order - ) - model_fit = model.fit(disp=False, maxiter=600, method="nm") - result = model_fit.predict(1, len(test_match), exog=[test_match]) - return float(result[0]) - - -def support_vector_regressor(x_train: list, x_test: list, train_user: list) -> float: - """ - Third method: Support vector regressor - svr is quite the same with svm(support vector machine) - it uses the same principles as the SVM for classification, - with only a few minor differences and the only different is that - it suits better for regression purpose - input : training data (date, total_user, total_event) in list of float - where x = list of set (date and total event) - output : list of total user prediction in float - >>> support_vector_regressor([[5,2],[1,5],[6,2]], [[3,2]], [2,1,4]) - 1.634932078116079 - """ - regressor = SVR(kernel="rbf", C=1, gamma=0.1, epsilon=0.1) - regressor.fit(x_train, train_user) - y_pred = regressor.predict(x_test) - return float(y_pred[0]) - - -def interquartile_range_checker(train_user: list) -> float: - """ - Optional method: interquatile range - input : list of total user in float - output : low limit of input in float - this method can be used to check whether some data is outlier or not - >>> interquartile_range_checker([1,2,3,4,5,6,7,8,9,10]) - 2.8 - """ - train_user.sort() - q1 = np.percentile(train_user, 25) - q3 = np.percentile(train_user, 75) - iqr = q3 - q1 - low_lim = q1 - (iqr * 0.1) - return float(low_lim) - - -def data_safety_checker(list_vote: list, actual_result: float) -> bool: - """ - Used to review all the votes (list result prediction) - and compare it to the actual result. - input : list of predictions - output : print whether it's safe or not - >>> data_safety_checker([2, 3, 4], 5.0) - False - """ - safe = 0 - not_safe = 0 - - if not isinstance(actual_result, float): - raise TypeError("Actual result should be float. Value passed is a list") - - for i in list_vote: - if i > actual_result: - safe = not_safe + 1 - elif abs(abs(i) - abs(actual_result)) <= 0.1: - safe += 1 - else: - not_safe += 1 - return safe > not_safe - - -if __name__ == "__main__": - """ - data column = total user in a day, how much online event held in one day, - what day is that(sunday-saturday) - """ - data_input_df = pd.read_csv("ex_data.csv") - - # start normalization - normalize_df = Normalizer().fit_transform(data_input_df.values) - # split data - total_date = normalize_df[:, 2].tolist() - total_user = normalize_df[:, 0].tolist() - total_match = normalize_df[:, 1].tolist() - - # for svr (input variable = total date and total match) - x = normalize_df[:, [1, 2]].tolist() - x_train = x[: len(x) - 1] - x_test = x[len(x) - 1 :] - - # for linear regression & sarimax - train_date = total_date[: len(total_date) - 1] - train_user = total_user[: len(total_user) - 1] - train_match = total_match[: len(total_match) - 1] - - test_date = total_date[len(total_date) - 1 :] - test_user = total_user[len(total_user) - 1 :] - test_match = total_match[len(total_match) - 1 :] - - # voting system with forecasting - res_vote = [ - linear_regression_prediction( - train_date, train_user, train_match, test_date, test_match - ), - sarimax_predictor(train_user, train_match, test_match), - support_vector_regressor(x_train, x_test, train_user), - ] - - # check the safety of today's data - not_str = "" if data_safety_checker(res_vote, test_user[0]) else "not " - print(f"Today's data is {not_str}safe.") diff --git a/machine_learning/frequent_pattern_growth.py b/machine_learning/frequent_pattern_growth.py deleted file mode 100644 index 947f8692f298..000000000000 --- a/machine_learning/frequent_pattern_growth.py +++ /dev/null @@ -1,350 +0,0 @@ -""" -The Frequent Pattern Growth algorithm (FP-Growth) is a widely used data mining -technique for discovering frequent itemsets in large transaction databases. - -It overcomes some of the limitations of traditional methods such as Apriori by -efficiently constructing the FP-Tree - -WIKI: https://athena.ecs.csus.edu/~mei/associationcw/FpGrowth.html - -Examples: https://www.javatpoint.com/fp-growth-algorithm-in-data-mining -""" - -from __future__ import annotations - -from dataclasses import dataclass, field - - -@dataclass -class TreeNode: - """ - A node in a Frequent Pattern tree. - - Args: - name: The name of this node. - num_occur: The number of occurrences of the node. - parent_node: The parent node. - - Example: - >>> parent = TreeNode("Parent", 1, None) - >>> child = TreeNode("Child", 2, parent) - >>> child.name - 'Child' - >>> child.count - 2 - """ - - name: str - count: int - parent: TreeNode | None = None - children: dict[str, TreeNode] = field(default_factory=dict) - node_link: TreeNode | None = None - - def __repr__(self) -> str: - return f"TreeNode({self.name!r}, {self.count!r}, {self.parent!r})" - - def inc(self, num_occur: int) -> None: - self.count += num_occur - - def disp(self, ind: int = 1) -> None: - print(f"{' ' * ind} {self.name} {self.count}") - for child in self.children.values(): - child.disp(ind + 1) - - -def create_tree(data_set: list, min_sup: int = 1) -> tuple[TreeNode, dict]: - """ - Create Frequent Pattern tree - - Args: - data_set: A list of transactions, where each transaction is a list of items. - min_sup: The minimum support threshold. - Items with support less than this will be pruned. Default is 1. - - Returns: - The root of the FP-Tree. - header_table: The header table dictionary with item information. - - Example: - >>> data_set = [ - ... ['A', 'B', 'C'], - ... ['A', 'C'], - ... ['A', 'B', 'E'], - ... ['A', 'B', 'C', 'E'], - ... ['B', 'E'] - ... ] - >>> min_sup = 2 - >>> fp_tree, header_table = create_tree(data_set, min_sup) - >>> fp_tree - TreeNode('Null Set', 1, None) - >>> len(header_table) - 4 - >>> header_table["A"] - [[4, None], TreeNode('A', 4, TreeNode('Null Set', 1, None))] - >>> header_table["E"][1] # doctest: +NORMALIZE_WHITESPACE - TreeNode('E', 1, TreeNode('B', 3, TreeNode('A', 4, TreeNode('Null Set', 1, None)))) - >>> sorted(header_table) - ['A', 'B', 'C', 'E'] - >>> fp_tree.name - 'Null Set' - >>> sorted(fp_tree.children) - ['A', 'B'] - >>> fp_tree.children['A'].name - 'A' - >>> sorted(fp_tree.children['A'].children) - ['B', 'C'] - """ - header_table: dict = {} - for trans in data_set: - for item in trans: - header_table[item] = header_table.get(item, [0, None]) - header_table[item][0] += 1 - - for k in list(header_table): - if header_table[k][0] < min_sup: - del header_table[k] - - if not (freq_item_set := set(header_table)): - return TreeNode("Null Set", 1, None), {} - - for k in header_table: - header_table[k] = [header_table[k], None] - - fp_tree = TreeNode("Null Set", 1, None) # Parent is None for the root node - for tran_set in data_set: - local_d = { - item: header_table[item][0] for item in tran_set if item in freq_item_set - } - if local_d: - sorted_items = sorted( - local_d.items(), key=lambda item_info: item_info[1], reverse=True - ) - ordered_items = [item[0] for item in sorted_items] - update_tree(ordered_items, fp_tree, header_table, 1) - - return fp_tree, header_table - - -def update_tree(items: list, in_tree: TreeNode, header_table: dict, count: int) -> None: - """ - Update the FP-Tree with a transaction. - - Args: - items: List of items in the transaction. - in_tree: The current node in the FP-Tree. - header_table: The header table dictionary with item information. - count: The count of the transaction. - - Example: - >>> data_set = [ - ... ['A', 'B', 'C'], - ... ['A', 'C'], - ... ['A', 'B', 'E'], - ... ['A', 'B', 'C', 'E'], - ... ['B', 'E'] - ... ] - >>> min_sup = 2 - >>> fp_tree, header_table = create_tree(data_set, min_sup) - >>> fp_tree - TreeNode('Null Set', 1, None) - >>> transaction = ['A', 'B', 'E'] - >>> update_tree(transaction, fp_tree, header_table, 1) - >>> fp_tree - TreeNode('Null Set', 1, None) - >>> fp_tree.children['A'].children['B'].children['E'].children - {} - >>> fp_tree.children['A'].children['B'].children['E'].count - 2 - >>> header_table['E'][1].name - 'E' - """ - if items[0] in in_tree.children: - in_tree.children[items[0]].inc(count) - else: - in_tree.children[items[0]] = TreeNode(items[0], count, in_tree) - if header_table[items[0]][1] is None: - header_table[items[0]][1] = in_tree.children[items[0]] - else: - update_header(header_table[items[0]][1], in_tree.children[items[0]]) - if len(items) > 1: - update_tree(items[1:], in_tree.children[items[0]], header_table, count) - - -def update_header(node_to_test: TreeNode, target_node: TreeNode) -> TreeNode: - """ - Update the header table with a node link. - - Args: - node_to_test: The node to be updated in the header table. - target_node: The node to link to. - - Example: - >>> data_set = [ - ... ['A', 'B', 'C'], - ... ['A', 'C'], - ... ['A', 'B', 'E'], - ... ['A', 'B', 'C', 'E'], - ... ['B', 'E'] - ... ] - >>> min_sup = 2 - >>> fp_tree, header_table = create_tree(data_set, min_sup) - >>> fp_tree - TreeNode('Null Set', 1, None) - >>> node1 = TreeNode("A", 3, None) - >>> node2 = TreeNode("B", 4, None) - >>> node1 - TreeNode('A', 3, None) - >>> node1 = update_header(node1, node2) - >>> node1 - TreeNode('A', 3, None) - >>> node1.node_link - TreeNode('B', 4, None) - >>> node2.node_link is None - True - """ - while node_to_test.node_link is not None: - node_to_test = node_to_test.node_link - if node_to_test.node_link is None: - node_to_test.node_link = target_node - # Return the updated node - return node_to_test - - -def ascend_tree(leaf_node: TreeNode, prefix_path: list[str]) -> None: - """ - Ascend the FP-Tree from a leaf node to its root, adding item names to the prefix - path. - - Args: - leaf_node: The leaf node to start ascending from. - prefix_path: A list to store the item as they are ascended. - - Example: - >>> data_set = [ - ... ['A', 'B', 'C'], - ... ['A', 'C'], - ... ['A', 'B', 'E'], - ... ['A', 'B', 'C', 'E'], - ... ['B', 'E'] - ... ] - >>> min_sup = 2 - >>> fp_tree, header_table = create_tree(data_set, min_sup) - - >>> path = [] - >>> ascend_tree(fp_tree.children['A'], path) - >>> path # ascending from a leaf node 'A' - ['A'] - """ - if leaf_node.parent is not None: - prefix_path.append(leaf_node.name) - ascend_tree(leaf_node.parent, prefix_path) - - -def find_prefix_path(base_pat: frozenset, tree_node: TreeNode | None) -> dict: # noqa: ARG001 - """ - Find the conditional pattern base for a given base pattern. - - Args: - base_pat: The base pattern for which to find the conditional pattern base. - tree_node: The node in the FP-Tree. - - Example: - >>> data_set = [ - ... ['A', 'B', 'C'], - ... ['A', 'C'], - ... ['A', 'B', 'E'], - ... ['A', 'B', 'C', 'E'], - ... ['B', 'E'] - ... ] - >>> min_sup = 2 - >>> fp_tree, header_table = create_tree(data_set, min_sup) - >>> fp_tree - TreeNode('Null Set', 1, None) - >>> len(header_table) - 4 - >>> base_pattern = frozenset(['A']) - >>> sorted(find_prefix_path(base_pattern, fp_tree.children['A'])) - [] - """ - cond_pats: dict = {} - while tree_node is not None: - prefix_path: list = [] - ascend_tree(tree_node, prefix_path) - if len(prefix_path) > 1: - cond_pats[frozenset(prefix_path[1:])] = tree_node.count - tree_node = tree_node.node_link - return cond_pats - - -def mine_tree( - in_tree: TreeNode, # noqa: ARG001 - header_table: dict, - min_sup: int, - pre_fix: set, - freq_item_list: list, -) -> None: - """ - Mine the FP-Tree recursively to discover frequent itemsets. - - Args: - in_tree: The FP-Tree to mine. - header_table: The header table dictionary with item information. - min_sup: The minimum support threshold. - pre_fix: A set of items as a prefix for the itemsets being mined. - freq_item_list: A list to store the frequent itemsets. - - Example: - >>> data_set = [ - ... ['A', 'B', 'C'], - ... ['A', 'C'], - ... ['A', 'B', 'E'], - ... ['A', 'B', 'C', 'E'], - ... ['B', 'E'] - ... ] - >>> min_sup = 2 - >>> fp_tree, header_table = create_tree(data_set, min_sup) - >>> fp_tree - TreeNode('Null Set', 1, None) - >>> frequent_itemsets = [] - >>> mine_tree(fp_tree, header_table, min_sup, set([]), frequent_itemsets) - >>> expe_itm = [{'C'}, {'C', 'A'}, {'E'}, {'A', 'E'}, {'E', 'B'}, {'A'}, {'B'}] - >>> all(expected in frequent_itemsets for expected in expe_itm) - True - """ - sorted_items = sorted(header_table.items(), key=lambda item_info: item_info[1][0]) - big_l = [item[0] for item in sorted_items] - for base_pat in big_l: - new_freq_set = pre_fix.copy() - new_freq_set.add(base_pat) - freq_item_list.append(new_freq_set) - cond_patt_bases = find_prefix_path(base_pat, header_table[base_pat][1]) - my_cond_tree, my_head = create_tree(list(cond_patt_bases), min_sup) - if my_head is not None: - # Pass header_table[base_pat][1] as node_to_test to update_header - header_table[base_pat][1] = update_header( - header_table[base_pat][1], my_cond_tree - ) - mine_tree(my_cond_tree, my_head, min_sup, new_freq_set, freq_item_list) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - data_set: list[frozenset] = [ - frozenset(["bread", "milk", "cheese"]), - frozenset(["bread", "milk"]), - frozenset(["bread", "diapers"]), - frozenset(["bread", "milk", "diapers"]), - frozenset(["milk", "diapers"]), - frozenset(["milk", "cheese"]), - frozenset(["diapers", "cheese"]), - frozenset(["bread", "milk", "cheese", "diapers"]), - ] - print(f"{len(data_set) = }") - fp_tree, header_table = create_tree(data_set, min_sup=3) - print(f"{fp_tree = }") - print(f"{len(header_table) = }") - freq_items: list = [] - mine_tree(fp_tree, header_table, 3, set(), freq_items) - print(f"{freq_items = }") diff --git a/machine_learning/gaussian_naive_bayes.py.broken.txt b/machine_learning/gaussian_naive_bayes.py.broken.txt deleted file mode 100644 index 7e9a8d7f6dcf..000000000000 --- a/machine_learning/gaussian_naive_bayes.py.broken.txt +++ /dev/null @@ -1,52 +0,0 @@ -# Gaussian Naive Bayes Example -import time - -from matplotlib import pyplot as plt -from sklearn.datasets import load_iris -from sklearn.metrics import accuracy_score, plot_confusion_matrix -from sklearn.model_selection import train_test_split -from sklearn.naive_bayes import GaussianNB - - -def main(): - - """ - Gaussian Naive Bayes Example using sklearn function. - Iris type dataset is used to demonstrate algorithm. - """ - - # Load Iris dataset - iris = load_iris() - - # Split dataset into train and test data - x = iris["data"] # features - y = iris["target"] - x_train, x_test, y_train, y_test = train_test_split( - x, y, test_size=0.3, random_state=1 - ) - - # Gaussian Naive Bayes - nb_model = GaussianNB() - time.sleep(2.9) - model_fit = nb_model.fit(x_train, y_train) - y_pred = model_fit.predict(x_test) # Predictions on the test set - - # Display Confusion Matrix - plot_confusion_matrix( - nb_model, - x_test, - y_test, - display_labels=iris["target_names"], - cmap="Blues", # although, Greys_r has a better contrast... - normalize="true", - ) - plt.title("Normalized Confusion Matrix - IRIS Dataset") - plt.show() - - time.sleep(1.8) - final_accuracy = 100 * accuracy_score(y_true=y_test, y_pred=y_pred) - print(f"The overall accuracy of the model is: {round(final_accuracy, 2)}%") - - -if __name__ == "__main__": - main() diff --git a/machine_learning/gradient_boosting_classifier.py b/machine_learning/gradient_boosting_classifier.py deleted file mode 100644 index 2902394d8226..000000000000 --- a/machine_learning/gradient_boosting_classifier.py +++ /dev/null @@ -1,118 +0,0 @@ -import numpy as np -from sklearn.datasets import load_iris -from sklearn.metrics import accuracy_score -from sklearn.model_selection import train_test_split -from sklearn.tree import DecisionTreeRegressor - - -class GradientBoostingClassifier: - def __init__(self, n_estimators: int = 100, learning_rate: float = 0.1) -> None: - """ - Initialize a GradientBoostingClassifier. - - Parameters: - - n_estimators (int): The number of weak learners to train. - - learning_rate (float): The learning rate for updating the model. - - Attributes: - - n_estimators (int): The number of weak learners. - - learning_rate (float): The learning rate. - - models (list): A list to store the trained weak learners. - """ - self.n_estimators = n_estimators - self.learning_rate = learning_rate - self.models: list[tuple[DecisionTreeRegressor, float]] = [] - - def fit(self, features: np.ndarray, target: np.ndarray) -> None: - """ - Fit the GradientBoostingClassifier to the training data. - - Parameters: - - features (np.ndarray): The training features. - - target (np.ndarray): The target values. - - Returns: - None - - >>> import numpy as np - >>> from sklearn.datasets import load_iris - >>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1) - >>> iris = load_iris() - >>> X, y = iris.data, iris.target - >>> clf.fit(X, y) - >>> # Check if the model is trained - >>> len(clf.models) == 100 - True - """ - for _ in range(self.n_estimators): - # Calculate the pseudo-residuals - residuals = -self.gradient(target, self.predict(features)) - # Fit a weak learner (e.g., decision tree) to the residuals - model = DecisionTreeRegressor(max_depth=1) - model.fit(features, residuals) - # Update the model by adding the weak learner with a learning rate - self.models.append((model, self.learning_rate)) - - def predict(self, features: np.ndarray) -> np.ndarray: - """ - Make predictions on input data. - - Parameters: - - features (np.ndarray): The input data for making predictions. - - Returns: - - np.ndarray: An array of binary predictions (-1 or 1). - - >>> import numpy as np - >>> from sklearn.datasets import load_iris - >>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1) - >>> iris = load_iris() - >>> X, y = iris.data, iris.target - >>> clf.fit(X, y) - >>> y_pred = clf.predict(X) - >>> # Check if the predictions have the correct shape - >>> y_pred.shape == y.shape - True - """ - # Initialize predictions with zeros - predictions = np.zeros(features.shape[0]) - for model, learning_rate in self.models: - predictions += learning_rate * model.predict(features) - return np.sign(predictions) # Convert to binary predictions (-1 or 1) - - def gradient(self, target: np.ndarray, y_pred: np.ndarray) -> np.ndarray: - """ - Calculate the negative gradient (pseudo-residuals) for logistic loss. - - Parameters: - - target (np.ndarray): The target values. - - y_pred (np.ndarray): The predicted values. - - Returns: - - np.ndarray: An array of pseudo-residuals. - - >>> import numpy as np - >>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1) - >>> target = np.array([0, 1, 0, 1]) - >>> y_pred = np.array([0.2, 0.8, 0.3, 0.7]) - >>> residuals = clf.gradient(target, y_pred) - >>> # Check if residuals have the correct shape - >>> residuals.shape == target.shape - True - """ - return -target / (1 + np.exp(target * y_pred)) - - -if __name__ == "__main__": - iris = load_iris() - X, y = iris.data, iris.target - X_train, X_test, y_train, y_test = train_test_split( - X, y, test_size=0.2, random_state=42 - ) - - clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1) - clf.fit(X_train, y_train) - - y_pred = clf.predict(X_test) - accuracy = accuracy_score(y_test, y_pred) - print(f"Accuracy: {accuracy:.2f}") diff --git a/machine_learning/gradient_boosting_regressor.py.broken.txt b/machine_learning/gradient_boosting_regressor.py.broken.txt deleted file mode 100644 index c082f3cafe10..000000000000 --- a/machine_learning/gradient_boosting_regressor.py.broken.txt +++ /dev/null @@ -1,66 +0,0 @@ -"""Implementation of GradientBoostingRegressor in sklearn using the - boston dataset which is very popular for regression problem to - predict house price. -""" - -import matplotlib.pyplot as plt -import pandas as pd -from sklearn.datasets import load_boston -from sklearn.ensemble import GradientBoostingRegressor -from sklearn.metrics import mean_squared_error, r2_score -from sklearn.model_selection import train_test_split - - -def main(): - - # loading the dataset from the sklearn - df = load_boston() - print(df.keys()) - # now let construct a data frame - df_boston = pd.DataFrame(df.data, columns=df.feature_names) - # let add the target to the dataframe - df_boston["Price"] = df.target - # print the first five rows using the head function - print(df_boston.head()) - # Summary statistics - print(df_boston.describe().T) - # Feature selection - - x = df_boston.iloc[:, :-1] - y = df_boston.iloc[:, -1] # target variable - # split the data with 75% train and 25% test sets. - x_train, x_test, y_train, y_test = train_test_split( - x, y, random_state=0, test_size=0.25 - ) - - model = GradientBoostingRegressor( - n_estimators=500, max_depth=5, min_samples_split=4, learning_rate=0.01 - ) - # training the model - model.fit(x_train, y_train) - # to see how good the model fit the data - training_score = model.score(x_train, y_train).round(3) - test_score = model.score(x_test, y_test).round(3) - print("Training score of GradientBoosting is :", training_score) - print("The test score of GradientBoosting is :", test_score) - # Let us evaluation the model by finding the errors - y_pred = model.predict(x_test) - - # The mean squared error - print(f"Mean squared error: {mean_squared_error(y_test, y_pred):.2f}") - # Explained variance score: 1 is perfect prediction - print(f"Test Variance score: {r2_score(y_test, y_pred):.2f}") - - # So let's run the model against the test data - fig, ax = plt.subplots() - ax.scatter(y_test, y_pred, edgecolors=(0, 0, 0)) - ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], "k--", lw=4) - ax.set_xlabel("Actual") - ax.set_ylabel("Predicted") - ax.set_title("Truth vs Predicted") - # this show function will display the plotting - plt.show() - - -if __name__ == "__main__": - main() diff --git a/machine_learning/gradient_descent.py b/machine_learning/gradient_descent.py deleted file mode 100644 index 95463faf5635..000000000000 --- a/machine_learning/gradient_descent.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -Implementation of gradient descent algorithm for minimizing cost of a linear hypothesis -function. -""" - -import numpy as np - -# List of input, output pairs -train_data = ( - ((5, 2, 3), 15), - ((6, 5, 9), 25), - ((11, 12, 13), 41), - ((1, 1, 1), 8), - ((11, 12, 13), 41), -) -test_data = (((515, 22, 13), 555), ((61, 35, 49), 150)) -parameter_vector = [2, 4, 1, 5] -m = len(train_data) -LEARNING_RATE = 0.009 - - -def _error(example_no, data_set="train"): - """ - :param data_set: train data or test data - :param example_no: example number whose error has to be checked - :return: error in example pointed by example number. - """ - return calculate_hypothesis_value(example_no, data_set) - output( - example_no, data_set - ) - - -def _hypothesis_value(data_input_tuple): - """ - Calculates hypothesis function value for a given input - :param data_input_tuple: Input tuple of a particular example - :return: Value of hypothesis function at that point. - Note that there is an 'biased input' whose value is fixed as 1. - It is not explicitly mentioned in input data.. But, ML hypothesis functions use it. - So, we have to take care of it separately. Line 36 takes care of it. - """ - hyp_val = 0 - for i in range(len(parameter_vector) - 1): - hyp_val += data_input_tuple[i] * parameter_vector[i + 1] - hyp_val += parameter_vector[0] - return hyp_val - - -def output(example_no, data_set): - """ - :param data_set: test data or train data - :param example_no: example whose output is to be fetched - :return: output for that example - """ - if data_set == "train": - return train_data[example_no][1] - elif data_set == "test": - return test_data[example_no][1] - return None - - -def calculate_hypothesis_value(example_no, data_set): - """ - Calculates hypothesis value for a given example - :param data_set: test data or train_data - :param example_no: example whose hypothesis value is to be calculated - :return: hypothesis value for that example - """ - if data_set == "train": - return _hypothesis_value(train_data[example_no][0]) - elif data_set == "test": - return _hypothesis_value(test_data[example_no][0]) - return None - - -def summation_of_cost_derivative(index, end=m): - """ - Calculates the sum of cost function derivative - :param index: index wrt derivative is being calculated - :param end: value where summation ends, default is m, number of examples - :return: Returns the summation of cost derivative - Note: If index is -1, this means we are calculating summation wrt to biased - parameter. - """ - summation_value = 0 - for i in range(end): - if index == -1: - summation_value += _error(i) - else: - summation_value += _error(i) * train_data[i][0][index] - return summation_value - - -def get_cost_derivative(index): - """ - :param index: index of the parameter vector wrt to derivative is to be calculated - :return: derivative wrt to that index - Note: If index is -1, this means we are calculating summation wrt to biased - parameter. - """ - cost_derivative_value = summation_of_cost_derivative(index, m) / m - return cost_derivative_value - - -def run_gradient_descent(): - global parameter_vector - # Tune these values to set a tolerance value for predicted output - absolute_error_limit = 0.000002 - relative_error_limit = 0 - j = 0 - while True: - j += 1 - temp_parameter_vector = [0, 0, 0, 0] - for i in range(len(parameter_vector)): - cost_derivative = get_cost_derivative(i - 1) - temp_parameter_vector[i] = ( - parameter_vector[i] - LEARNING_RATE * cost_derivative - ) - if np.allclose( - parameter_vector, - temp_parameter_vector, - atol=absolute_error_limit, - rtol=relative_error_limit, - ): - break - parameter_vector = temp_parameter_vector - print(("Number of iterations:", j)) - - -def test_gradient_descent(): - for i in range(len(test_data)): - print(("Actual output value:", output(i, "test"))) - print(("Hypothesis output:", calculate_hypothesis_value(i, "test"))) - - -if __name__ == "__main__": - run_gradient_descent() - print("\nTesting gradient descent for a linear hypothesis function.\n") - test_gradient_descent() diff --git a/machine_learning/k_means_clust.py b/machine_learning/k_means_clust.py deleted file mode 100644 index a926362fc18b..000000000000 --- a/machine_learning/k_means_clust.py +++ /dev/null @@ -1,343 +0,0 @@ -"""README, Author - Anurag Kumar(mailto:anuragkumarak95@gmail.com) -Requirements: - - sklearn - - numpy - - matplotlib -Python: - - 3.5 -Inputs: - - X , a 2D numpy array of features. - - k , number of clusters to create. - - initial_centroids , initial centroid values generated by utility function(mentioned - in usage). - - maxiter , maximum number of iterations to process. - - heterogeneity , empty list that will be filled with heterogeneity values if passed - to kmeans func. -Usage: - 1. define 'k' value, 'X' features array and 'heterogeneity' empty list - 2. create initial_centroids, - initial_centroids = get_initial_centroids( - X, - k, - seed=0 # seed value for initial centroid generation, - # None for randomness(default=None) - ) - 3. find centroids and clusters using kmeans function. - centroids, cluster_assignment = kmeans( - X, - k, - initial_centroids, - maxiter=400, - record_heterogeneity=heterogeneity, - verbose=True # whether to print logs in console or not.(default=False) - ) - 4. Plot the loss function and heterogeneity values for every iteration saved in - heterogeneity list. - plot_heterogeneity( - heterogeneity, - k - ) - 5. Transfers Dataframe into excel format it must have feature called - 'Clust' with k means clustering numbers in it. -""" - -import warnings - -import numpy as np -import pandas as pd -from matplotlib import pyplot as plt -from sklearn.metrics import pairwise_distances - -warnings.filterwarnings("ignore") - -TAG = "K-MEANS-CLUST/ " - - -def get_initial_centroids(data, k, seed=None): - """Randomly choose k data points as initial centroids""" - # useful for obtaining consistent results - rng = np.random.default_rng(seed) - n = data.shape[0] # number of data points - - # Pick K indices from range [0, N). - rand_indices = rng.integers(0, n, k) - - # Keep centroids as dense format, as many entries will be nonzero due to averaging. - # As long as at least one document in a cluster contains a word, - # it will carry a nonzero weight in the TF-IDF vector of the centroid. - centroids = data[rand_indices, :] - - return centroids - - -def centroid_pairwise_dist(x, centroids): - return pairwise_distances(x, centroids, metric="euclidean") - - -def assign_clusters(data, centroids): - # Compute distances between each data point and the set of centroids: - # Fill in the blank (RHS only) - distances_from_centroids = centroid_pairwise_dist(data, centroids) - - # Compute cluster assignments for each data point: - # Fill in the blank (RHS only) - cluster_assignment = np.argmin(distances_from_centroids, axis=1) - - return cluster_assignment - - -def revise_centroids(data, k, cluster_assignment): - new_centroids = [] - for i in range(k): - # Select all data points that belong to cluster i. Fill in the blank (RHS only) - member_data_points = data[cluster_assignment == i] - # Compute the mean of the data points. Fill in the blank (RHS only) - centroid = member_data_points.mean(axis=0) - new_centroids.append(centroid) - new_centroids = np.array(new_centroids) - - return new_centroids - - -def compute_heterogeneity(data, k, centroids, cluster_assignment): - heterogeneity = 0.0 - for i in range(k): - # Select all data points that belong to cluster i. Fill in the blank (RHS only) - member_data_points = data[cluster_assignment == i, :] - - if member_data_points.shape[0] > 0: # check if i-th cluster is non-empty - # Compute distances from centroid to data points (RHS only) - distances = pairwise_distances( - member_data_points, [centroids[i]], metric="euclidean" - ) - squared_distances = distances**2 - heterogeneity += np.sum(squared_distances) - - return heterogeneity - - -def plot_heterogeneity(heterogeneity, k): - plt.figure(figsize=(7, 4)) - plt.plot(heterogeneity, linewidth=4) - plt.xlabel("# Iterations") - plt.ylabel("Heterogeneity") - plt.title(f"Heterogeneity of clustering over time, K={k:d}") - plt.rcParams.update({"font.size": 16}) - plt.show() - - -def kmeans( - data, k, initial_centroids, maxiter=500, record_heterogeneity=None, verbose=False -): - """Runs k-means on given data and initial set of centroids. - maxiter: maximum number of iterations to run.(default=500) - record_heterogeneity: (optional) a list, to store the history of heterogeneity - as function of iterations - if None, do not store the history. - verbose: if True, print how many data points changed their cluster labels in - each iteration""" - centroids = initial_centroids[:] - prev_cluster_assignment = None - - for itr in range(maxiter): - if verbose: - print(itr, end="") - - # 1. Make cluster assignments using nearest centroids - cluster_assignment = assign_clusters(data, centroids) - - # 2. Compute a new centroid for each of the k clusters, averaging all data - # points assigned to that cluster. - centroids = revise_centroids(data, k, cluster_assignment) - - # Check for convergence: if none of the assignments changed, stop - if ( - prev_cluster_assignment is not None - and (prev_cluster_assignment == cluster_assignment).all() - ): - break - - # Print number of new assignments - if prev_cluster_assignment is not None: - num_changed = np.sum(prev_cluster_assignment != cluster_assignment) - if verbose: - print( - f" {num_changed:5d} elements changed their cluster assignment." - ) - - # Record heterogeneity convergence metric - if record_heterogeneity is not None: - # YOUR CODE HERE - score = compute_heterogeneity(data, k, centroids, cluster_assignment) - record_heterogeneity.append(score) - - prev_cluster_assignment = cluster_assignment[:] - - return centroids, cluster_assignment - - -# Mock test below -if False: # change to true to run this test case. - from sklearn import datasets as ds - - dataset = ds.load_iris() - k = 3 - heterogeneity = [] - initial_centroids = get_initial_centroids(dataset["data"], k, seed=0) - centroids, cluster_assignment = kmeans( - dataset["data"], - k, - initial_centroids, - maxiter=400, - record_heterogeneity=heterogeneity, - verbose=True, - ) - plot_heterogeneity(heterogeneity, k) - - -def report_generator( - predicted: pd.DataFrame, clustering_variables: np.ndarray, fill_missing_report=None -) -> pd.DataFrame: - """ - Generate a clustering report given these two arguments: - predicted - dataframe with predicted cluster column - fill_missing_report - dictionary of rules on how we are going to fill in missing - values for final generated report (not included in modelling); - >>> predicted = pd.DataFrame() - >>> predicted['numbers'] = [1, 2, 3] - >>> predicted['col1'] = [0.5, 2.5, 4.5] - >>> predicted['col2'] = [100, 200, 300] - >>> predicted['col3'] = [10, 20, 30] - >>> predicted['Cluster'] = [1, 1, 2] - >>> report_generator(predicted, ['col1', 'col2'], 0) - Features Type Mark 1 2 - 0 # of Customers ClusterSize False 2.000000 1.000000 - 1 % of Customers ClusterProportion False 0.666667 0.333333 - 2 col1 mean_with_zeros True 1.500000 4.500000 - 3 col2 mean_with_zeros True 150.000000 300.000000 - 4 numbers mean_with_zeros False 1.500000 3.000000 - .. ... ... ... ... ... - 99 dummy 5% False 1.000000 1.000000 - 100 dummy 95% False 1.000000 1.000000 - 101 dummy stdev False 0.000000 NaN - 102 dummy mode False 1.000000 1.000000 - 103 dummy median False 1.000000 1.000000 - <BLANKLINE> - [104 rows x 5 columns] - """ - # Fill missing values with given rules - if fill_missing_report: - predicted = predicted.fillna(value=fill_missing_report) - predicted["dummy"] = 1 - numeric_cols = predicted.select_dtypes(np.number).columns - report = ( - predicted.groupby(["Cluster"])[ # construct report dataframe - numeric_cols - ] # group by cluster number - .agg( - [ - ("sum", "sum"), - ("mean_with_zeros", lambda x: np.mean(np.nan_to_num(x))), - ("mean_without_zeros", lambda x: x.replace(0, np.nan).mean()), - ( - "mean_25-75", - lambda x: np.mean( - np.nan_to_num( - sorted(x)[ - round(len(x) * 25 / 100) : round(len(x) * 75 / 100) - ] - ) - ), - ), - ("mean_with_na", "mean"), - ("min", lambda x: x.min()), - ("5%", lambda x: x.quantile(0.05)), - ("25%", lambda x: x.quantile(0.25)), - ("50%", lambda x: x.quantile(0.50)), - ("75%", lambda x: x.quantile(0.75)), - ("95%", lambda x: x.quantile(0.95)), - ("max", lambda x: x.max()), - ("count", lambda x: x.count()), - ("stdev", lambda x: x.std()), - ("mode", lambda x: x.mode()[0]), - ("median", lambda x: x.median()), - ("# > 0", lambda x: (x > 0).sum()), - ] - ) - .T.reset_index() - .rename(index=str, columns={"level_0": "Features", "level_1": "Type"}) - ) # rename columns - # calculate the size of cluster(count of clientID's) - # avoid SettingWithCopyWarning - clustersize = report[ - (report["Features"] == "dummy") & (report["Type"] == "count") - ].copy() - # rename created predicted cluster to match report column names - clustersize.Type = "ClusterSize" - clustersize.Features = "# of Customers" - # calculating the proportion of cluster - clusterproportion = pd.DataFrame( - clustersize.iloc[:, 2:].to_numpy() / clustersize.iloc[:, 2:].to_numpy().sum() - ) - # rename created predicted cluster to match report column names - clusterproportion["Type"] = "% of Customers" - clusterproportion["Features"] = "ClusterProportion" - cols = clusterproportion.columns.tolist() - cols = cols[-2:] + cols[:-2] - clusterproportion = clusterproportion[cols] # rearrange columns to match report - clusterproportion.columns = report.columns - # generating dataframe with count of nan values - a = pd.DataFrame( - abs( - report[report["Type"] == "count"].iloc[:, 2:].to_numpy() - - clustersize.iloc[:, 2:].to_numpy() - ) - ) - a["Features"] = 0 - a["Type"] = "# of nan" - # filling values in order to match report - a.Features = report[report["Type"] == "count"].Features.tolist() - cols = a.columns.tolist() - cols = cols[-2:] + cols[:-2] - a = a[cols] # rearrange columns to match report - a.columns = report.columns # rename columns to match report - # drop count values except for cluster size - report = report.drop(report[report.Type == "count"].index) - # concat report with cluster size and nan values - report = pd.concat([report, a, clustersize, clusterproportion], axis=0) - report["Mark"] = report["Features"].isin(clustering_variables) - cols = report.columns.tolist() - cols = cols[0:2] + cols[-1:] + cols[2:-1] - report = report[cols] - sorter1 = { - "ClusterSize": 9, - "ClusterProportion": 8, - "mean_with_zeros": 7, - "mean_with_na": 6, - "max": 5, - "50%": 4, - "min": 3, - "25%": 2, - "75%": 1, - "# of nan": 0, - "# > 0": -1, - "sum_with_na": -2, - } - report = ( - report.assign( - Sorter1=lambda x: x.Type.map(sorter1), - Sorter2=lambda x: list(reversed(range(len(x)))), - ) - .sort_values(["Sorter1", "Mark", "Sorter2"], ascending=False) - .drop(["Sorter1", "Sorter2"], axis=1) - ) - report.columns.name = "" - report = report.reset_index() - report = report.drop(columns=["index"]) - return report - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/k_nearest_neighbours.py b/machine_learning/k_nearest_neighbours.py deleted file mode 100644 index fbc1b8bd227e..000000000000 --- a/machine_learning/k_nearest_neighbours.py +++ /dev/null @@ -1,88 +0,0 @@ -""" -k-Nearest Neighbours (kNN) is a simple non-parametric supervised learning -algorithm used for classification. Given some labelled training data, a given -point is classified using its k nearest neighbours according to some distance -metric. The most commonly occurring label among the neighbours becomes the label -of the given point. In effect, the label of the given point is decided by a -majority vote. - -This implementation uses the commonly used Euclidean distance metric, but other -distance metrics can also be used. - -Reference: https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm -""" - -from collections import Counter -from heapq import nsmallest - -import numpy as np -from sklearn import datasets -from sklearn.model_selection import train_test_split - - -class KNN: - def __init__( - self, - train_data: np.ndarray[float], - train_target: np.ndarray[int], - class_labels: list[str], - ) -> None: - """ - Create a kNN classifier using the given training data and class labels - """ - self.data = zip(train_data, train_target) - self.labels = class_labels - - @staticmethod - def _euclidean_distance(a: np.ndarray[float], b: np.ndarray[float]) -> float: - """ - Calculate the Euclidean distance between two points - >>> KNN._euclidean_distance(np.array([0, 0]), np.array([3, 4])) - 5.0 - >>> KNN._euclidean_distance(np.array([1, 2, 3]), np.array([1, 8, 11])) - 10.0 - """ - return float(np.linalg.norm(a - b)) - - def classify(self, pred_point: np.ndarray[float], k: int = 5) -> str: - """ - Classify a given point using the kNN algorithm - >>> train_X = np.array( - ... [[0, 0], [1, 0], [0, 1], [0.5, 0.5], [3, 3], [2, 3], [3, 2]] - ... ) - >>> train_y = np.array([0, 0, 0, 0, 1, 1, 1]) - >>> classes = ['A', 'B'] - >>> knn = KNN(train_X, train_y, classes) - >>> point = np.array([1.2, 1.2]) - >>> knn.classify(point) - 'A' - """ - # Distances of all points from the point to be classified - distances = ( - (self._euclidean_distance(data_point[0], pred_point), data_point[1]) - for data_point in self.data - ) - - # Choosing k points with the shortest distances - votes = (i[1] for i in nsmallest(k, distances)) - - # Most commonly occurring class is the one into which the point is classified - result = Counter(votes).most_common(1)[0][0] - return self.labels[result] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - iris = datasets.load_iris() - - X = np.array(iris["data"]) - y = np.array(iris["target"]) - iris_classes = iris["target_names"] - - X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) - iris_point = np.array([4.4, 3.1, 1.3, 1.4]) - classifier = KNN(X_train, y_train, iris_classes) - print(classifier.classify(iris_point, k=3)) diff --git a/machine_learning/linear_discriminant_analysis.py b/machine_learning/linear_discriminant_analysis.py deleted file mode 100644 index 86f28aef671a..000000000000 --- a/machine_learning/linear_discriminant_analysis.py +++ /dev/null @@ -1,407 +0,0 @@ -""" -Linear Discriminant Analysis - - - -Assumptions About Data : - 1. The input variables has a gaussian distribution. - 2. The variance calculated for each input variables by class grouping is the - same. - 3. The mix of classes in your training set is representative of the problem. - - -Learning The Model : - The LDA model requires the estimation of statistics from the training data : - 1. Mean of each input value for each class. - 2. Probability of an instance belong to each class. - 3. Covariance for the input data for each class - - Calculate the class means : - mean(x) = 1/n ( for i = 1 to i = n --> sum(xi)) - - Calculate the class probabilities : - P(y = 0) = count(y = 0) / (count(y = 0) + count(y = 1)) - P(y = 1) = count(y = 1) / (count(y = 0) + count(y = 1)) - - Calculate the variance : - We can calculate the variance for dataset in two steps : - 1. Calculate the squared difference for each input variable from the - group mean. - 2. Calculate the mean of the squared difference. - ------------------------------------------------ - Squared_Difference = (x - mean(k)) ** 2 - Variance = (1 / (count(x) - count(classes))) * - (for i = 1 to i = n --> sum(Squared_Difference(xi))) - -Making Predictions : - discriminant(x) = x * (mean / variance) - - ((mean ** 2) / (2 * variance)) + Ln(probability) - --------------------------------------------------------------------------- - After calculating the discriminant value for each class, the class with the - largest discriminant value is taken as the prediction. - -Author: @EverLookNeverSee -""" - -from collections.abc import Callable -from math import log -from os import name, system -from random import gauss, seed -from typing import TypeVar - - -# Make a training dataset drawn from a gaussian distribution -def gaussian_distribution(mean: float, std_dev: float, instance_count: int) -> list: - """ - Generate gaussian distribution instances based-on given mean and standard deviation - :param mean: mean value of class - :param std_dev: value of standard deviation entered by usr or default value of it - :param instance_count: instance number of class - :return: a list containing generated values based-on given mean, std_dev and - instance_count - - >>> gaussian_distribution(5.0, 1.0, 20) # doctest: +NORMALIZE_WHITESPACE - [6.288184753155463, 6.4494456086997705, 5.066335808938262, 4.235456349028368, - 3.9078267848958586, 5.031334516831717, 3.977896829989127, 3.56317055489747, - 5.199311976483754, 5.133374604658605, 5.546468300338232, 4.086029056264687, - 5.005005283626573, 4.935258239627312, 3.494170998739258, 5.537997178661033, - 5.320711100998849, 7.3891120432406865, 5.202969177309964, 4.855297691835079] - """ - seed(1) - return [gauss(mean, std_dev) for _ in range(instance_count)] - - -# Make corresponding Y flags to detecting classes -def y_generator(class_count: int, instance_count: list) -> list: - """ - Generate y values for corresponding classes - :param class_count: Number of classes(data groupings) in dataset - :param instance_count: number of instances in class - :return: corresponding values for data groupings in dataset - - >>> y_generator(1, [10]) - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - >>> y_generator(2, [5, 10]) - [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] - >>> y_generator(4, [10, 5, 15, 20]) # doctest: +NORMALIZE_WHITESPACE - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] - """ - - return [k for k in range(class_count) for _ in range(instance_count[k])] - - -# Calculate the class means -def calculate_mean(instance_count: int, items: list) -> float: - """ - Calculate given class mean - :param instance_count: Number of instances in class - :param items: items that related to specific class(data grouping) - :return: calculated actual mean of considered class - - >>> items = gaussian_distribution(5.0, 1.0, 20) - >>> calculate_mean(len(items), items) - 5.011267842911003 - """ - # the sum of all items divided by number of instances - return sum(items) / instance_count - - -# Calculate the class probabilities -def calculate_probabilities(instance_count: int, total_count: int) -> float: - """ - Calculate the probability that a given instance will belong to which class - :param instance_count: number of instances in class - :param total_count: the number of all instances - :return: value of probability for considered class - - >>> calculate_probabilities(20, 60) - 0.3333333333333333 - >>> calculate_probabilities(30, 100) - 0.3 - """ - # number of instances in specific class divided by number of all instances - return instance_count / total_count - - -# Calculate the variance -def calculate_variance(items: list, means: list, total_count: int) -> float: - """ - Calculate the variance - :param items: a list containing all items(gaussian distribution of all classes) - :param means: a list containing real mean values of each class - :param total_count: the number of all instances - :return: calculated variance for considered dataset - - >>> items = gaussian_distribution(5.0, 1.0, 20) - >>> means = [5.011267842911003] - >>> total_count = 20 - >>> calculate_variance([items], means, total_count) - 0.9618530973487491 - """ - squared_diff = [] # An empty list to store all squared differences - # iterate over number of elements in items - for i in range(len(items)): - # for loop iterates over number of elements in inner layer of items - for j in range(len(items[i])): - # appending squared differences to 'squared_diff' list - squared_diff.append((items[i][j] - means[i]) ** 2) - - # one divided by (the number of all instances - number of classes) multiplied by - # sum of all squared differences - n_classes = len(means) # Number of classes in dataset - return 1 / (total_count - n_classes) * sum(squared_diff) - - -# Making predictions -def predict_y_values( - x_items: list, means: list, variance: float, probabilities: list -) -> list: - """This function predicts new indexes(groups for our data) - :param x_items: a list containing all items(gaussian distribution of all classes) - :param means: a list containing real mean values of each class - :param variance: calculated value of variance by calculate_variance function - :param probabilities: a list containing all probabilities of classes - :return: a list containing predicted Y values - - >>> x_items = [[6.288184753155463, 6.4494456086997705, 5.066335808938262, - ... 4.235456349028368, 3.9078267848958586, 5.031334516831717, - ... 3.977896829989127, 3.56317055489747, 5.199311976483754, - ... 5.133374604658605, 5.546468300338232, 4.086029056264687, - ... 5.005005283626573, 4.935258239627312, 3.494170998739258, - ... 5.537997178661033, 5.320711100998849, 7.3891120432406865, - ... 5.202969177309964, 4.855297691835079], [11.288184753155463, - ... 11.44944560869977, 10.066335808938263, 9.235456349028368, - ... 8.907826784895859, 10.031334516831716, 8.977896829989128, - ... 8.56317055489747, 10.199311976483754, 10.133374604658606, - ... 10.546468300338232, 9.086029056264687, 10.005005283626572, - ... 9.935258239627313, 8.494170998739259, 10.537997178661033, - ... 10.320711100998848, 12.389112043240686, 10.202969177309964, - ... 9.85529769183508], [16.288184753155463, 16.449445608699772, - ... 15.066335808938263, 14.235456349028368, 13.907826784895859, - ... 15.031334516831716, 13.977896829989128, 13.56317055489747, - ... 15.199311976483754, 15.133374604658606, 15.546468300338232, - ... 14.086029056264687, 15.005005283626572, 14.935258239627313, - ... 13.494170998739259, 15.537997178661033, 15.320711100998848, - ... 17.389112043240686, 15.202969177309964, 14.85529769183508]] - - >>> means = [5.011267842911003, 10.011267842911003, 15.011267842911002] - >>> variance = 0.9618530973487494 - >>> probabilities = [0.3333333333333333, 0.3333333333333333, 0.3333333333333333] - >>> predict_y_values(x_items, means, variance, - ... probabilities) # doctest: +NORMALIZE_WHITESPACE - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2] - - """ - # An empty list to store generated discriminant values of all items in dataset for - # each class - results = [] - # for loop iterates over number of elements in list - for i in range(len(x_items)): - # for loop iterates over number of inner items of each element - for j in range(len(x_items[i])): - temp = [] # to store all discriminant values of each item as a list - # for loop iterates over number of classes we have in our dataset - for k in range(len(x_items)): - # appending values of discriminants for each class to 'temp' list - temp.append( - x_items[i][j] * (means[k] / variance) - - (means[k] ** 2 / (2 * variance)) - + log(probabilities[k]) - ) - # appending discriminant values of each item to 'results' list - results.append(temp) - - return [result.index(max(result)) for result in results] - - -# Calculating Accuracy -def accuracy(actual_y: list, predicted_y: list) -> float: - """ - Calculate the value of accuracy based-on predictions - :param actual_y:a list containing initial Y values generated by 'y_generator' - function - :param predicted_y: a list containing predicted Y values generated by - 'predict_y_values' function - :return: percentage of accuracy - - >>> actual_y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, - ... 1, 1 ,1 ,1 ,1 ,1 ,1] - >>> predicted_y = [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, - ... 0, 0, 1, 1, 1, 0, 1, 1, 1] - >>> accuracy(actual_y, predicted_y) - 50.0 - - >>> actual_y = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, - ... 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] - >>> predicted_y = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, - ... 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] - >>> accuracy(actual_y, predicted_y) - 100.0 - """ - # iterate over one element of each list at a time (zip mode) - # prediction is correct if actual Y value equals to predicted Y value - correct = sum(1 for i, j in zip(actual_y, predicted_y) if i == j) - # percentage of accuracy equals to number of correct predictions divided by number - # of all data and multiplied by 100 - return (correct / len(actual_y)) * 100 - - -num = TypeVar("num") - - -def valid_input( - input_type: Callable[[object], num], # Usually float or int - input_msg: str, - err_msg: str, - condition: Callable[[num], bool] = lambda _: True, - default: str | None = None, -) -> num: - """ - Ask for user value and validate that it fulfill a condition. - - :input_type: user input expected type of value - :input_msg: message to show user in the screen - :err_msg: message to show in the screen in case of error - :condition: function that represents the condition that user input is valid. - :default: Default value in case the user does not type anything - :return: user's input - """ - while True: - try: - user_input = input_type(input(input_msg).strip() or default) - if condition(user_input): - return user_input - else: - print(f"{user_input}: {err_msg}") - continue - except ValueError: - print( - f"{user_input}: Incorrect input type, expected {input_type.__name__!r}" - ) - - -# Main Function -def main(): - """This function starts execution phase""" - while True: - print(" Linear Discriminant Analysis ".center(50, "*")) - print("*" * 50, "\n") - print("First of all we should specify the number of classes that") - print("we want to generate as training dataset") - # Trying to get number of classes - n_classes = valid_input( - input_type=int, - condition=lambda x: x > 0, - input_msg="Enter the number of classes (Data Groupings): ", - err_msg="Number of classes should be positive!", - ) - - print("-" * 100) - - # Trying to get the value of standard deviation - std_dev = valid_input( - input_type=float, - condition=lambda x: x >= 0, - input_msg=( - "Enter the value of standard deviation" - "(Default value is 1.0 for all classes): " - ), - err_msg="Standard deviation should not be negative!", - default="1.0", - ) - - print("-" * 100) - - # Trying to get number of instances in classes and theirs means to generate - # dataset - counts = [] # An empty list to store instance counts of classes in dataset - for i in range(n_classes): - user_count = valid_input( - input_type=int, - condition=lambda x: x > 0, - input_msg=(f"Enter The number of instances for class_{i+1}: "), - err_msg="Number of instances should be positive!", - ) - counts.append(user_count) - print("-" * 100) - - # An empty list to store values of user-entered means of classes - user_means = [] - for a in range(n_classes): - user_mean = valid_input( - input_type=float, - input_msg=(f"Enter the value of mean for class_{a+1}: "), - err_msg="This is an invalid value.", - ) - user_means.append(user_mean) - print("-" * 100) - - print("Standard deviation: ", std_dev) - # print out the number of instances in classes in separated line - for i, count in enumerate(counts, 1): - print(f"Number of instances in class_{i} is: {count}") - print("-" * 100) - - # print out mean values of classes separated line - for i, user_mean in enumerate(user_means, 1): - print(f"Mean of class_{i} is: {user_mean}") - print("-" * 100) - - # Generating training dataset drawn from gaussian distribution - x = [ - gaussian_distribution(user_means[j], std_dev, counts[j]) - for j in range(n_classes) - ] - print("Generated Normal Distribution: \n", x) - print("-" * 100) - - # Generating Ys to detecting corresponding classes - y = y_generator(n_classes, counts) - print("Generated Corresponding Ys: \n", y) - print("-" * 100) - - # Calculating the value of actual mean for each class - actual_means = [calculate_mean(counts[k], x[k]) for k in range(n_classes)] - # for loop iterates over number of elements in 'actual_means' list and print - # out them in separated line - for i, actual_mean in enumerate(actual_means, 1): - print(f"Actual(Real) mean of class_{i} is: {actual_mean}") - print("-" * 100) - - # Calculating the value of probabilities for each class - probabilities = [ - calculate_probabilities(counts[i], sum(counts)) for i in range(n_classes) - ] - - # for loop iterates over number of elements in 'probabilities' list and print - # out them in separated line - for i, probability in enumerate(probabilities, 1): - print(f"Probability of class_{i} is: {probability}") - print("-" * 100) - - # Calculating the values of variance for each class - variance = calculate_variance(x, actual_means, sum(counts)) - print("Variance: ", variance) - print("-" * 100) - - # Predicting Y values - # storing predicted Y values in 'pre_indexes' variable - pre_indexes = predict_y_values(x, actual_means, variance, probabilities) - print("-" * 100) - - # Calculating Accuracy of the model - print(f"Accuracy: {accuracy(y, pre_indexes)}") - print("-" * 100) - print(" DONE ".center(100, "+")) - - if input("Press any key to restart or 'q' for quit: ").strip().lower() == "q": - print("\n" + "GoodBye!".center(100, "-") + "\n") - break - system("cls" if name == "nt" else "clear") # noqa: S605 - - -if __name__ == "__main__": - main() diff --git a/machine_learning/linear_regression.py b/machine_learning/linear_regression.py deleted file mode 100644 index 839a5366d1cc..000000000000 --- a/machine_learning/linear_regression.py +++ /dev/null @@ -1,117 +0,0 @@ -""" -Linear regression is the most basic type of regression commonly used for -predictive analysis. The idea is pretty simple: we have a dataset and we have -features associated with it. Features should be chosen very cautiously -as they determine how much our model will be able to make future predictions. -We try to set the weight of these features, over many iterations, so that they best -fit our dataset. In this particular code, I had used a CSGO dataset (ADR vs -Rating). We try to best fit a line through dataset and estimate the parameters. -""" - -import numpy as np -import requests - - -def collect_dataset(): - """Collect dataset of CSGO - The dataset contains ADR vs Rating of a Player - :return : dataset obtained from the link, as matrix - """ - response = requests.get( - "https://raw.githubusercontent.com/yashLadha/The_Math_of_Intelligence/" - "master/Week1/ADRvsRating.csv", - timeout=10, - ) - lines = response.text.splitlines() - data = [] - for item in lines: - item = item.split(",") - data.append(item) - data.pop(0) # This is for removing the labels from the list - dataset = np.matrix(data) - return dataset - - -def run_steep_gradient_descent(data_x, data_y, len_data, alpha, theta): - """Run steep gradient descent and updates the Feature vector accordingly_ - :param data_x : contains the dataset - :param data_y : contains the output associated with each data-entry - :param len_data : length of the data_ - :param alpha : Learning rate of the model - :param theta : Feature vector (weight's for our model) - ;param return : Updated Feature's, using - curr_features - alpha_ * gradient(w.r.t. feature) - """ - n = len_data - - prod = np.dot(theta, data_x.transpose()) - prod -= data_y.transpose() - sum_grad = np.dot(prod, data_x) - theta = theta - (alpha / n) * sum_grad - return theta - - -def sum_of_square_error(data_x, data_y, len_data, theta): - """Return sum of square error for error calculation - :param data_x : contains our dataset - :param data_y : contains the output (result vector) - :param len_data : len of the dataset - :param theta : contains the feature vector - :return : sum of square error computed from given feature's - """ - prod = np.dot(theta, data_x.transpose()) - prod -= data_y.transpose() - sum_elem = np.sum(np.square(prod)) - error = sum_elem / (2 * len_data) - return error - - -def run_linear_regression(data_x, data_y): - """Implement Linear regression over the dataset - :param data_x : contains our dataset - :param data_y : contains the output (result vector) - :return : feature for line of best fit (Feature vector) - """ - iterations = 100000 - alpha = 0.0001550 - - no_features = data_x.shape[1] - len_data = data_x.shape[0] - 1 - - theta = np.zeros((1, no_features)) - - for i in range(iterations): - theta = run_steep_gradient_descent(data_x, data_y, len_data, alpha, theta) - error = sum_of_square_error(data_x, data_y, len_data, theta) - print(f"At Iteration {i + 1} - Error is {error:.5f}") - - return theta - - -def mean_absolute_error(predicted_y, original_y): - """Return sum of square error for error calculation - :param predicted_y : contains the output of prediction (result vector) - :param original_y : contains values of expected outcome - :return : mean absolute error computed from given feature's - """ - total = sum(abs(y - predicted_y[i]) for i, y in enumerate(original_y)) - return total / len(original_y) - - -def main(): - """Driver function""" - data = collect_dataset() - - len_data = data.shape[0] - data_x = np.c_[np.ones(len_data), data[:, :-1]].astype(float) - data_y = data[:, -1].astype(float) - - theta = run_linear_regression(data_x, data_y) - len_result = theta.shape[1] - print("Resultant Feature vector : ") - for i in range(len_result): - print(f"{theta[0, i]:.5f}") - - -if __name__ == "__main__": - main() diff --git a/machine_learning/local_weighted_learning/__init__.py b/machine_learning/local_weighted_learning/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/machine_learning/local_weighted_learning/local_weighted_learning.md b/machine_learning/local_weighted_learning/local_weighted_learning.md deleted file mode 100644 index ef4dbc958600..000000000000 --- a/machine_learning/local_weighted_learning/local_weighted_learning.md +++ /dev/null @@ -1,66 +0,0 @@ -# Locally Weighted Linear Regression -It is a non-parametric ML algorithm that does not learn on a fixed set of parameters such as **linear regression**. \ -So, here comes a question of what is *linear regression*? \ -**Linear regression** is a supervised learning algorithm used for computing linear relationships between input (X) and output (Y). \ - -### Terminology Involved - -number_of_features(i) = Number of features involved. \ -number_of_training_examples(m) = Number of training examples. \ -output_sequence(y) = Output Sequence. \ -$\theta$ $^T$ x = predicted point. \ -J($\theta$) = COst function of point. - -The steps involved in ordinary linear regression are: - -Training phase: Compute \theta to minimize the cost. \ -J($\theta$) = $\sum_{i=1}^m$ (($\theta$)$^T$ $x^i$ - $y^i$)$^2$ - -Predict output: for given query point x, \ - return: ($\theta$)$^T$ x - -<img src="https://miro.medium.com/max/700/1*FZsLp8yTULf77qrp0Qd91g.png" alt="Linear Regression"> - -This training phase is possible when data points are linear, but there again comes a question can we predict non-linear relationship between x and y ? as shown below - -<img src="https://miro.medium.com/max/700/1*DHYvJg55uN-Kj8jHaxDKvQ.png" alt="Non-linear Data"> -<br /> -<br /> -So, here comes the role of non-parametric algorithm which doesn't compute predictions based on fixed set of params. Rather parameters $\theta$ are computed individually for each query point/data point x. -<br /> -<br /> -While Computing $\theta$ , a higher preference is given to points in the vicinity of x than points farther from x. - -Cost Function J($\theta$) = $\sum_{i=1}^m$ $w^i$ (($\theta$)$^T$ $x^i$ - $y^i$)$^2$ - -$w^i$ is non-negative weight associated to training point $x^i$. \ -$w^i$ is large fr $x^i$'s lying closer to query point $x_i$. \ -$w^i$ is small for $x^i$'s lying farther to query point $x_i$. - -A Typical weight can be computed using \ - -$w^i$ = $\exp$(-$\frac{(x^i-x)(x^i-x)^T}{2\tau^2}$) - -Where $\tau$ is the bandwidth parameter that controls $w^i$ distance from x. - -Let's look at a example : - -Suppose, we had a query point x=5.0 and training points $x^1$=4.9 and $x^2$=5.0 than we can calculate weights as : - -$w^i$ = $\exp$(-$\frac{(x^i-x)(x^i-x)^T}{2\tau^2}$) with $\tau$=0.5 - -$w^1$ = $\exp$(-$\frac{(4.9-5)^2}{2(0.5)^2}$) = 0.9802 - -$w^2$ = $\exp$(-$\frac{(3-5)^2}{2(0.5)^2}$) = 0.000335 - -So, J($\theta$) = 0.9802*($\theta$ $^T$ $x^1$ - $y^1$) + 0.000335*($\theta$ $^T$ $x^2$ - $y^2$) - -So, here by we can conclude that the weight fall exponentially as the distance between x & $x^i$ increases and So, does the contribution of error in prediction for $x^i$ to the cost. - -Steps involved in LWL are : \ -Compute \theta to minimize the cost. -J($\theta$) = $\sum_{i=1}^m$ $w^i$ (($\theta$)$^T$ $x^i$ - $y^i$)$^2$ \ -Predict Output: for given query point x, \ -return : $\theta$ $^T$ x - -<img src="https://miro.medium.com/max/700/1*H3QS05Q1GJtY-tiBL00iug.png" alt="LWL"> diff --git a/machine_learning/local_weighted_learning/local_weighted_learning.py b/machine_learning/local_weighted_learning/local_weighted_learning.py deleted file mode 100644 index f3056da40e24..000000000000 --- a/machine_learning/local_weighted_learning/local_weighted_learning.py +++ /dev/null @@ -1,185 +0,0 @@ -""" -Locally weighted linear regression, also called local regression, is a type of -non-parametric linear regression that prioritizes data closest to a given -prediction point. The algorithm estimates the vector of model coefficients β -using weighted least squares regression: - -β = (XᵀWX)⁻¹(XᵀWy), - -where X is the design matrix, y is the response vector, and W is the diagonal -weight matrix. - -This implementation calculates wᵢ, the weight of the ith training sample, using -the Gaussian weight: - -wᵢ = exp(-‖xᵢ - x‖²/(2τ²)), - -where xᵢ is the ith training sample, x is the prediction point, τ is the -"bandwidth", and ‖x‖ is the Euclidean norm (also called the 2-norm or the L² -norm). The bandwidth τ controls how quickly the weight of a training sample -decreases as its distance from the prediction point increases. One can think of -the Gaussian weight as a bell curve centered around the prediction point: a -training sample is weighted lower if it's farther from the center, and τ -controls the spread of the bell curve. - -Other types of locally weighted regression such as locally estimated scatterplot -smoothing (LOESS) typically use different weight functions. - -References: - - https://en.wikipedia.org/wiki/Local_regression - - https://en.wikipedia.org/wiki/Weighted_least_squares - - https://cs229.stanford.edu/notes2022fall/main_notes.pdf -""" - -import matplotlib.pyplot as plt -import numpy as np - - -def weight_matrix(point: np.ndarray, x_train: np.ndarray, tau: float) -> np.ndarray: - """ - Calculate the weight of every point in the training data around a given - prediction point - - Args: - point: x-value at which the prediction is being made - x_train: ndarray of x-values for training - tau: bandwidth value, controls how quickly the weight of training values - decreases as the distance from the prediction point increases - - Returns: - m x m weight matrix around the prediction point, where m is the size of - the training set - >>> weight_matrix( - ... np.array([1., 1.]), - ... np.array([[16.99, 10.34], [21.01,23.68], [24.59,25.69]]), - ... 0.6 - ... ) - array([[1.43807972e-207, 0.00000000e+000, 0.00000000e+000], - [0.00000000e+000, 0.00000000e+000, 0.00000000e+000], - [0.00000000e+000, 0.00000000e+000, 0.00000000e+000]]) - """ - m = len(x_train) # Number of training samples - weights = np.eye(m) # Initialize weights as identity matrix - for j in range(m): - diff = point - x_train[j] - weights[j, j] = np.exp(diff @ diff.T / (-2.0 * tau**2)) - - return weights - - -def local_weight( - point: np.ndarray, x_train: np.ndarray, y_train: np.ndarray, tau: float -) -> np.ndarray: - """ - Calculate the local weights at a given prediction point using the weight - matrix for that point - - Args: - point: x-value at which the prediction is being made - x_train: ndarray of x-values for training - y_train: ndarray of y-values for training - tau: bandwidth value, controls how quickly the weight of training values - decreases as the distance from the prediction point increases - Returns: - ndarray of local weights - >>> local_weight( - ... np.array([1., 1.]), - ... np.array([[16.99, 10.34], [21.01,23.68], [24.59,25.69]]), - ... np.array([[1.01, 1.66, 3.5]]), - ... 0.6 - ... ) - array([[0.00873174], - [0.08272556]]) - """ - weight_mat = weight_matrix(point, x_train, tau) - weight = np.linalg.inv(x_train.T @ weight_mat @ x_train) @ ( - x_train.T @ weight_mat @ y_train.T - ) - - return weight - - -def local_weight_regression( - x_train: np.ndarray, y_train: np.ndarray, tau: float -) -> np.ndarray: - """ - Calculate predictions for each point in the training data - - Args: - x_train: ndarray of x-values for training - y_train: ndarray of y-values for training - tau: bandwidth value, controls how quickly the weight of training values - decreases as the distance from the prediction point increases - - Returns: - ndarray of predictions - >>> local_weight_regression( - ... np.array([[16.99, 10.34], [21.01, 23.68], [24.59, 25.69]]), - ... np.array([[1.01, 1.66, 3.5]]), - ... 0.6 - ... ) - array([1.07173261, 1.65970737, 3.50160179]) - """ - y_pred = np.zeros(len(x_train)) # Initialize array of predictions - for i, item in enumerate(x_train): - y_pred[i] = np.dot(item, local_weight(item, x_train, y_train, tau)).item() - - return y_pred - - -def load_data( - dataset_name: str, x_name: str, y_name: str -) -> tuple[np.ndarray, np.ndarray, np.ndarray]: - """ - Load data from seaborn and split it into x and y points - >>> pass # No doctests, function is for demo purposes only - """ - import seaborn as sns - - data = sns.load_dataset(dataset_name) - x_data = np.array(data[x_name]) - y_data = np.array(data[y_name]) - - one = np.ones(len(y_data)) - - # pairing elements of one and x_data - x_train = np.column_stack((one, x_data)) - - return x_train, x_data, y_data - - -def plot_preds( - x_train: np.ndarray, - preds: np.ndarray, - x_data: np.ndarray, - y_data: np.ndarray, - x_name: str, - y_name: str, -) -> None: - """ - Plot predictions and display the graph - >>> pass # No doctests, function is for demo purposes only - """ - x_train_sorted = np.sort(x_train, axis=0) - plt.scatter(x_data, y_data, color="blue") - plt.plot( - x_train_sorted[:, 1], - preds[x_train[:, 1].argsort(0)], - color="yellow", - linewidth=5, - ) - plt.title("Local Weighted Regression") - plt.xlabel(x_name) - plt.ylabel(y_name) - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Demo with a dataset from the seaborn module - training_data_x, total_bill, tip = load_data("tips", "total_bill", "tip") - predictions = local_weight_regression(training_data_x, tip, 5) - plot_preds(training_data_x, predictions, total_bill, tip, "total_bill", "tip") diff --git a/machine_learning/logistic_regression.py b/machine_learning/logistic_regression.py deleted file mode 100644 index 496026631fbe..000000000000 --- a/machine_learning/logistic_regression.py +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/python - -# Logistic Regression from scratch - -# In[62]: - -# In[63]: - -# importing all the required libraries - -""" -Implementing logistic regression for classification problem -Helpful resources: -Coursera ML course -https://medium.com/@martinpella/logistic-regression-from-scratch-in-python-124c5636b8ac -""" - -import numpy as np -from matplotlib import pyplot as plt -from sklearn import datasets - -# get_ipython().run_line_magic('matplotlib', 'inline') - - -# In[67]: - -# sigmoid function or logistic function is used as a hypothesis function in -# classification problems - - -def sigmoid_function(z: float | np.ndarray) -> float | np.ndarray: - """ - Also known as Logistic Function. - - 1 - f(x) = ------- - 1 + e⁻ˣ - - The sigmoid function approaches a value of 1 as its input 'x' becomes - increasing positive. Opposite for negative values. - - Reference: https://en.wikipedia.org/wiki/Sigmoid_function - - @param z: input to the function - @returns: returns value in the range 0 to 1 - - Examples: - >>> float(sigmoid_function(4)) - 0.9820137900379085 - >>> sigmoid_function(np.array([-3, 3])) - array([0.04742587, 0.95257413]) - >>> sigmoid_function(np.array([-3, 3, 1])) - array([0.04742587, 0.95257413, 0.73105858]) - >>> sigmoid_function(np.array([-0.01, -2, -1.9])) - array([0.49750002, 0.11920292, 0.13010847]) - >>> sigmoid_function(np.array([-1.3, 5.3, 12])) - array([0.21416502, 0.9950332 , 0.99999386]) - >>> sigmoid_function(np.array([0.01, 0.02, 4.1])) - array([0.50249998, 0.50499983, 0.9836975 ]) - >>> sigmoid_function(np.array([0.8])) - array([0.68997448]) - """ - return 1 / (1 + np.exp(-z)) - - -def cost_function(h: np.ndarray, y: np.ndarray) -> float: - """ - Cost function quantifies the error between predicted and expected values. - The cost function used in Logistic Regression is called Log Loss - or Cross Entropy Function. - - J(θ) = (1/m) * Σ [ -y * log(hθ(x)) - (1 - y) * log(1 - hθ(x)) ] - - Where: - - J(θ) is the cost that we want to minimize during training - - m is the number of training examples - - Σ represents the summation over all training examples - - y is the actual binary label (0 or 1) for a given example - - hθ(x) is the predicted probability that x belongs to the positive class - - @param h: the output of sigmoid function. It is the estimated probability - that the input example 'x' belongs to the positive class - - @param y: the actual binary label associated with input example 'x' - - Examples: - >>> estimations = sigmoid_function(np.array([0.3, -4.3, 8.1])) - >>> cost_function(h=estimations,y=np.array([1, 0, 1])) - 0.18937868932131605 - >>> estimations = sigmoid_function(np.array([4, 3, 1])) - >>> cost_function(h=estimations,y=np.array([1, 0, 0])) - 1.459999655669926 - >>> estimations = sigmoid_function(np.array([4, -3, -1])) - >>> cost_function(h=estimations,y=np.array([1,0,0])) - 0.1266663223365915 - >>> estimations = sigmoid_function(0) - >>> cost_function(h=estimations,y=np.array([1])) - 0.6931471805599453 - - References: - - https://en.wikipedia.org/wiki/Logistic_regression - """ - return float((-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()) - - -def log_likelihood(x, y, weights): - scores = np.dot(x, weights) - return np.sum(y * scores - np.log(1 + np.exp(scores))) - - -# here alpha is the learning rate, X is the feature matrix,y is the target matrix -def logistic_reg(alpha, x, y, max_iterations=70000): - theta = np.zeros(x.shape[1]) - - for iterations in range(max_iterations): - z = np.dot(x, theta) - h = sigmoid_function(z) - gradient = np.dot(x.T, h - y) / y.size - theta = theta - alpha * gradient # updating the weights - z = np.dot(x, theta) - h = sigmoid_function(z) - j = cost_function(h, y) - if iterations % 100 == 0: - print(f"loss: {j} \t") # printing the loss after every 100 iterations - return theta - - -# In[68]: - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - iris = datasets.load_iris() - x = iris.data[:, :2] - y = (iris.target != 0) * 1 - - alpha = 0.1 - theta = logistic_reg(alpha, x, y, max_iterations=70000) - print("theta: ", theta) # printing the theta i.e our weights vector - - def predict_prob(x): - return sigmoid_function( - np.dot(x, theta) - ) # predicting the value of probability from the logistic regression algorithm - - plt.figure(figsize=(10, 6)) - plt.scatter(x[y == 0][:, 0], x[y == 0][:, 1], color="b", label="0") - plt.scatter(x[y == 1][:, 0], x[y == 1][:, 1], color="r", label="1") - (x1_min, x1_max) = (x[:, 0].min(), x[:, 0].max()) - (x2_min, x2_max) = (x[:, 1].min(), x[:, 1].max()) - (xx1, xx2) = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max)) - grid = np.c_[xx1.ravel(), xx2.ravel()] - probs = predict_prob(grid).reshape(xx1.shape) - plt.contour(xx1, xx2, probs, [0.5], linewidths=1, colors="black") - - plt.legend() - plt.show() diff --git a/machine_learning/loss_functions.py b/machine_learning/loss_functions.py deleted file mode 100644 index 0bd9aa8b5401..000000000000 --- a/machine_learning/loss_functions.py +++ /dev/null @@ -1,669 +0,0 @@ -import numpy as np - - -def binary_cross_entropy( - y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-15 -) -> float: - """ - Calculate the mean binary cross-entropy (BCE) loss between true labels and predicted - probabilities. - - BCE loss quantifies dissimilarity between true labels (0 or 1) and predicted - probabilities. It's widely used in binary classification tasks. - - BCE = -Σ(y_true * ln(y_pred) + (1 - y_true) * ln(1 - y_pred)) - - Reference: https://en.wikipedia.org/wiki/Cross_entropy - - Parameters: - - y_true: True binary labels (0 or 1) - - y_pred: Predicted probabilities for class 1 - - epsilon: Small constant to avoid numerical instability - - >>> true_labels = np.array([0, 1, 1, 0, 1]) - >>> predicted_probs = np.array([0.2, 0.7, 0.9, 0.3, 0.8]) - >>> float(binary_cross_entropy(true_labels, predicted_probs)) - 0.2529995012327421 - >>> true_labels = np.array([0, 1, 1, 0, 1]) - >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2]) - >>> binary_cross_entropy(true_labels, predicted_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - - y_pred = np.clip(y_pred, epsilon, 1 - epsilon) # Clip predictions to avoid log(0) - bce_loss = -(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) - return np.mean(bce_loss) - - -def binary_focal_cross_entropy( - y_true: np.ndarray, - y_pred: np.ndarray, - gamma: float = 2.0, - alpha: float = 0.25, - epsilon: float = 1e-15, -) -> float: - """ - Calculate the mean binary focal cross-entropy (BFCE) loss between true labels - and predicted probabilities. - - BFCE loss quantifies dissimilarity between true labels (0 or 1) and predicted - probabilities. It's a variation of binary cross-entropy that addresses class - imbalance by focusing on hard examples. - - BCFE = -Σ(alpha * (1 - y_pred)**gamma * y_true * log(y_pred) - + (1 - alpha) * y_pred**gamma * (1 - y_true) * log(1 - y_pred)) - - Reference: [Lin et al., 2018](https://arxiv.org/pdf/1708.02002.pdf) - - Parameters: - - y_true: True binary labels (0 or 1). - - y_pred: Predicted probabilities for class 1. - - gamma: Focusing parameter for modulating the loss (default: 2.0). - - alpha: Weighting factor for class 1 (default: 0.25). - - epsilon: Small constant to avoid numerical instability. - - >>> true_labels = np.array([0, 1, 1, 0, 1]) - >>> predicted_probs = np.array([0.2, 0.7, 0.9, 0.3, 0.8]) - >>> float(binary_focal_cross_entropy(true_labels, predicted_probs)) - 0.008257977659239775 - >>> true_labels = np.array([0, 1, 1, 0, 1]) - >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2]) - >>> binary_focal_cross_entropy(true_labels, predicted_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - # Clip predicted probabilities to avoid log(0) - y_pred = np.clip(y_pred, epsilon, 1 - epsilon) - - bcfe_loss = -( - alpha * (1 - y_pred) ** gamma * y_true * np.log(y_pred) - + (1 - alpha) * y_pred**gamma * (1 - y_true) * np.log(1 - y_pred) - ) - - return np.mean(bcfe_loss) - - -def categorical_cross_entropy( - y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-15 -) -> float: - """ - Calculate categorical cross-entropy (CCE) loss between true class labels and - predicted class probabilities. - - CCE = -Σ(y_true * ln(y_pred)) - - Reference: https://en.wikipedia.org/wiki/Cross_entropy - - Parameters: - - y_true: True class labels (one-hot encoded) - - y_pred: Predicted class probabilities - - epsilon: Small constant to avoid numerical instability - - >>> true_labels = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1], [0.0, 0.1, 0.9]]) - >>> float(categorical_cross_entropy(true_labels, pred_probs)) - 0.567395975254385 - >>> true_labels = np.array([[1, 0], [0, 1]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]]) - >>> categorical_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same shape. - >>> true_labels = np.array([[2, 0, 1], [1, 0, 0]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]]) - >>> categorical_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: y_true must be one-hot encoded. - >>> true_labels = np.array([[1, 0, 1], [1, 0, 0]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]]) - >>> categorical_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: y_true must be one-hot encoded. - >>> true_labels = np.array([[1, 0, 0], [0, 1, 0]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.1], [0.2, 0.7, 0.1]]) - >>> categorical_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: Predicted probabilities must sum to approximately 1. - """ - if y_true.shape != y_pred.shape: - raise ValueError("Input arrays must have the same shape.") - - if np.any((y_true != 0) & (y_true != 1)) or np.any(y_true.sum(axis=1) != 1): - raise ValueError("y_true must be one-hot encoded.") - - if not np.all(np.isclose(np.sum(y_pred, axis=1), 1, rtol=epsilon, atol=epsilon)): - raise ValueError("Predicted probabilities must sum to approximately 1.") - - y_pred = np.clip(y_pred, epsilon, 1) # Clip predictions to avoid log(0) - return -np.sum(y_true * np.log(y_pred)) - - -def categorical_focal_cross_entropy( - y_true: np.ndarray, - y_pred: np.ndarray, - alpha: np.ndarray = None, - gamma: float = 2.0, - epsilon: float = 1e-15, -) -> float: - """ - Calculate the mean categorical focal cross-entropy (CFCE) loss between true - labels and predicted probabilities for multi-class classification. - - CFCE loss is a generalization of binary focal cross-entropy for multi-class - classification. It addresses class imbalance by focusing on hard examples. - - CFCE = -Σ alpha * (1 - y_pred)**gamma * y_true * log(y_pred) - - Reference: [Lin et al., 2018](https://arxiv.org/pdf/1708.02002.pdf) - - Parameters: - - y_true: True labels in one-hot encoded form. - - y_pred: Predicted probabilities for each class. - - alpha: Array of weighting factors for each class. - - gamma: Focusing parameter for modulating the loss (default: 2.0). - - epsilon: Small constant to avoid numerical instability. - - Returns: - - The mean categorical focal cross-entropy loss. - - >>> true_labels = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1], [0.0, 0.1, 0.9]]) - >>> alpha = np.array([0.6, 0.2, 0.7]) - >>> float(categorical_focal_cross_entropy(true_labels, pred_probs, alpha)) - 0.0025966118981496423 - - >>> true_labels = np.array([[0, 1, 0], [0, 0, 1]]) - >>> pred_probs = np.array([[0.05, 0.95, 0], [0.1, 0.8, 0.1]]) - >>> alpha = np.array([0.25, 0.25, 0.25]) - >>> float(categorical_focal_cross_entropy(true_labels, pred_probs, alpha)) - 0.23315276982014324 - - >>> true_labels = np.array([[1, 0], [0, 1]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]]) - >>> categorical_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same shape. - - >>> true_labels = np.array([[2, 0, 1], [1, 0, 0]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]]) - >>> categorical_focal_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: y_true must be one-hot encoded. - - >>> true_labels = np.array([[1, 0, 1], [1, 0, 0]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]]) - >>> categorical_focal_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: y_true must be one-hot encoded. - - >>> true_labels = np.array([[1, 0, 0], [0, 1, 0]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.1], [0.2, 0.7, 0.1]]) - >>> categorical_focal_cross_entropy(true_labels, pred_probs) - Traceback (most recent call last): - ... - ValueError: Predicted probabilities must sum to approximately 1. - - >>> true_labels = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1], [0.0, 0.1, 0.9]]) - >>> alpha = np.array([0.6, 0.2]) - >>> categorical_focal_cross_entropy(true_labels, pred_probs, alpha) - Traceback (most recent call last): - ... - ValueError: Length of alpha must match the number of classes. - """ - if y_true.shape != y_pred.shape: - raise ValueError("Shape of y_true and y_pred must be the same.") - - if alpha is None: - alpha = np.ones(y_true.shape[1]) - - if np.any((y_true != 0) & (y_true != 1)) or np.any(y_true.sum(axis=1) != 1): - raise ValueError("y_true must be one-hot encoded.") - - if len(alpha) != y_true.shape[1]: - raise ValueError("Length of alpha must match the number of classes.") - - if not np.all(np.isclose(np.sum(y_pred, axis=1), 1, rtol=epsilon, atol=epsilon)): - raise ValueError("Predicted probabilities must sum to approximately 1.") - - # Clip predicted probabilities to avoid log(0) - y_pred = np.clip(y_pred, epsilon, 1 - epsilon) - - # Calculate loss for each class and sum across classes - cfce_loss = -np.sum( - alpha * np.power(1 - y_pred, gamma) * y_true * np.log(y_pred), axis=1 - ) - - return np.mean(cfce_loss) - - -def hinge_loss(y_true: np.ndarray, y_pred: np.ndarray) -> float: - """ - Calculate the mean hinge loss for between true labels and predicted probabilities - for training support vector machines (SVMs). - - Hinge loss = max(0, 1 - true * pred) - - Reference: https://en.wikipedia.org/wiki/Hinge_loss - - Args: - - y_true: actual values (ground truth) encoded as -1 or 1 - - y_pred: predicted values - - >>> true_labels = np.array([-1, 1, 1, -1, 1]) - >>> pred = np.array([-4, -0.3, 0.7, 5, 10]) - >>> float(hinge_loss(true_labels, pred)) - 1.52 - >>> true_labels = np.array([-1, 1, 1, -1, 1, 1]) - >>> pred = np.array([-4, -0.3, 0.7, 5, 10]) - >>> hinge_loss(true_labels, pred) - Traceback (most recent call last): - ... - ValueError: Length of predicted and actual array must be same. - >>> true_labels = np.array([-1, 1, 10, -1, 1]) - >>> pred = np.array([-4, -0.3, 0.7, 5, 10]) - >>> hinge_loss(true_labels, pred) - Traceback (most recent call last): - ... - ValueError: y_true can have values -1 or 1 only. - """ - if len(y_true) != len(y_pred): - raise ValueError("Length of predicted and actual array must be same.") - - if np.any((y_true != -1) & (y_true != 1)): - raise ValueError("y_true can have values -1 or 1 only.") - - hinge_losses = np.maximum(0, 1.0 - (y_true * y_pred)) - return np.mean(hinge_losses) - - -def huber_loss(y_true: np.ndarray, y_pred: np.ndarray, delta: float) -> float: - """ - Calculate the mean Huber loss between the given ground truth and predicted values. - - The Huber loss describes the penalty incurred by an estimation procedure, and it - serves as a measure of accuracy for regression models. - - Huber loss = - 0.5 * (y_true - y_pred)^2 if |y_true - y_pred| <= delta - delta * |y_true - y_pred| - 0.5 * delta^2 otherwise - - Reference: https://en.wikipedia.org/wiki/Huber_loss - - Parameters: - - y_true: The true values (ground truth) - - y_pred: The predicted values - - >>> true_values = np.array([0.9, 10.0, 2.0, 1.0, 5.2]) - >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2]) - >>> bool(np.isclose(huber_loss(true_values, predicted_values, 1.0), 2.102)) - True - >>> true_labels = np.array([11.0, 21.0, 3.32, 4.0, 5.0]) - >>> predicted_probs = np.array([8.3, 20.8, 2.9, 11.2, 5.0]) - >>> bool(np.isclose(huber_loss(true_labels, predicted_probs, 1.0), 1.80164)) - True - >>> true_labels = np.array([11.0, 21.0, 3.32, 4.0]) - >>> predicted_probs = np.array([8.3, 20.8, 2.9, 11.2, 5.0]) - >>> huber_loss(true_labels, predicted_probs, 1.0) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - - huber_mse = 0.5 * (y_true - y_pred) ** 2 - huber_mae = delta * (np.abs(y_true - y_pred) - 0.5 * delta) - return np.where(np.abs(y_true - y_pred) <= delta, huber_mse, huber_mae).mean() - - -def mean_squared_error(y_true: np.ndarray, y_pred: np.ndarray) -> float: - """ - Calculate the mean squared error (MSE) between ground truth and predicted values. - - MSE measures the squared difference between true values and predicted values, and it - serves as a measure of accuracy for regression models. - - MSE = (1/n) * Σ(y_true - y_pred)^2 - - Reference: https://en.wikipedia.org/wiki/Mean_squared_error - - Parameters: - - y_true: The true values (ground truth) - - y_pred: The predicted values - - >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2]) - >>> bool(np.isclose(mean_squared_error(true_values, predicted_values), 0.028)) - True - >>> true_labels = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2]) - >>> mean_squared_error(true_labels, predicted_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - - squared_errors = (y_true - y_pred) ** 2 - return np.mean(squared_errors) - - -def mean_absolute_error(y_true: np.ndarray, y_pred: np.ndarray) -> float: - """ - Calculates the Mean Absolute Error (MAE) between ground truth (observed) - and predicted values. - - MAE measures the absolute difference between true values and predicted values. - - Equation: - MAE = (1/n) * Σ(abs(y_true - y_pred)) - - Reference: https://en.wikipedia.org/wiki/Mean_absolute_error - - Parameters: - - y_true: The true values (ground truth) - - y_pred: The predicted values - - >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2]) - >>> bool(np.isclose(mean_absolute_error(true_values, predicted_values), 0.16)) - True - >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2]) - >>> bool(np.isclose(mean_absolute_error(true_values, predicted_values), 2.16)) - False - >>> true_labels = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_probs = np.array([0.3, 0.8, 0.9, 5.2]) - >>> mean_absolute_error(true_labels, predicted_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - - return np.mean(abs(y_true - y_pred)) - - -def mean_squared_logarithmic_error(y_true: np.ndarray, y_pred: np.ndarray) -> float: - """ - Calculate the mean squared logarithmic error (MSLE) between ground truth and - predicted values. - - MSLE measures the squared logarithmic difference between true values and predicted - values for regression models. It's particularly useful for dealing with skewed or - large-value data, and it's often used when the relative differences between - predicted and true values are more important than absolute differences. - - MSLE = (1/n) * Σ(log(1 + y_true) - log(1 + y_pred))^2 - - Reference: https://insideaiml.com/blog/MeanSquared-Logarithmic-Error-Loss-1035 - - Parameters: - - y_true: The true values (ground truth) - - y_pred: The predicted values - - >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2]) - >>> float(mean_squared_logarithmic_error(true_values, predicted_values)) - 0.0030860877925181344 - >>> true_labels = np.array([1.0, 2.0, 3.0, 4.0, 5.0]) - >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2]) - >>> mean_squared_logarithmic_error(true_labels, predicted_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - - squared_logarithmic_errors = (np.log1p(y_true) - np.log1p(y_pred)) ** 2 - return np.mean(squared_logarithmic_errors) - - -def mean_absolute_percentage_error( - y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-15 -) -> float: - """ - Calculate the Mean Absolute Percentage Error between y_true and y_pred. - - Mean Absolute Percentage Error calculates the average of the absolute - percentage differences between the predicted and true values. - - Formula = (Σ|y_true[i]-Y_pred[i]/y_true[i]|)/n - - Source: https://stephenallwright.com/good-mape-score/ - - Parameters: - y_true (np.ndarray): Numpy array containing true/target values. - y_pred (np.ndarray): Numpy array containing predicted values. - - Returns: - float: The Mean Absolute Percentage error between y_true and y_pred. - - Examples: - >>> y_true = np.array([10, 20, 30, 40]) - >>> y_pred = np.array([12, 18, 33, 45]) - >>> float(mean_absolute_percentage_error(y_true, y_pred)) - 0.13125 - - >>> y_true = np.array([1, 2, 3, 4]) - >>> y_pred = np.array([2, 3, 4, 5]) - >>> float(mean_absolute_percentage_error(y_true, y_pred)) - 0.5208333333333333 - - >>> y_true = np.array([34, 37, 44, 47, 48, 48, 46, 43, 32, 27, 26, 24]) - >>> y_pred = np.array([37, 40, 46, 44, 46, 50, 45, 44, 34, 30, 22, 23]) - >>> float(mean_absolute_percentage_error(y_true, y_pred)) - 0.064671076436071 - """ - if len(y_true) != len(y_pred): - raise ValueError("The length of the two arrays should be the same.") - - y_true = np.where(y_true == 0, epsilon, y_true) - absolute_percentage_diff = np.abs((y_true - y_pred) / y_true) - - return np.mean(absolute_percentage_diff) - - -def perplexity_loss( - y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-7 -) -> float: - """ - Calculate the perplexity for the y_true and y_pred. - - Compute the Perplexity which useful in predicting language model - accuracy in Natural Language Processing (NLP.) - Perplexity is measure of how certain the model in its predictions. - - Perplexity Loss = exp(-1/N (Σ ln(p(x))) - - Reference: - https://en.wikipedia.org/wiki/Perplexity - - Args: - y_true: Actual label encoded sentences of shape (batch_size, sentence_length) - y_pred: Predicted sentences of shape (batch_size, sentence_length, vocab_size) - epsilon: Small floating point number to avoid getting inf for log(0) - - Returns: - Perplexity loss between y_true and y_pred. - - >>> y_true = np.array([[1, 4], [2, 3]]) - >>> y_pred = np.array( - ... [[[0.28, 0.19, 0.21 , 0.15, 0.15], - ... [0.24, 0.19, 0.09, 0.18, 0.27]], - ... [[0.03, 0.26, 0.21, 0.18, 0.30], - ... [0.28, 0.10, 0.33, 0.15, 0.12]]] - ... ) - >>> float(perplexity_loss(y_true, y_pred)) - 5.0247347775367945 - >>> y_true = np.array([[1, 4], [2, 3]]) - >>> y_pred = np.array( - ... [[[0.28, 0.19, 0.21 , 0.15, 0.15], - ... [0.24, 0.19, 0.09, 0.18, 0.27], - ... [0.30, 0.10, 0.20, 0.15, 0.25]], - ... [[0.03, 0.26, 0.21, 0.18, 0.30], - ... [0.28, 0.10, 0.33, 0.15, 0.12], - ... [0.30, 0.10, 0.20, 0.15, 0.25]],] - ... ) - >>> perplexity_loss(y_true, y_pred) - Traceback (most recent call last): - ... - ValueError: Sentence length of y_true and y_pred must be equal. - >>> y_true = np.array([[1, 4], [2, 11]]) - >>> y_pred = np.array( - ... [[[0.28, 0.19, 0.21 , 0.15, 0.15], - ... [0.24, 0.19, 0.09, 0.18, 0.27]], - ... [[0.03, 0.26, 0.21, 0.18, 0.30], - ... [0.28, 0.10, 0.33, 0.15, 0.12]]] - ... ) - >>> perplexity_loss(y_true, y_pred) - Traceback (most recent call last): - ... - ValueError: Label value must not be greater than vocabulary size. - >>> y_true = np.array([[1, 4]]) - >>> y_pred = np.array( - ... [[[0.28, 0.19, 0.21 , 0.15, 0.15], - ... [0.24, 0.19, 0.09, 0.18, 0.27]], - ... [[0.03, 0.26, 0.21, 0.18, 0.30], - ... [0.28, 0.10, 0.33, 0.15, 0.12]]] - ... ) - >>> perplexity_loss(y_true, y_pred) - Traceback (most recent call last): - ... - ValueError: Batch size of y_true and y_pred must be equal. - """ - - vocab_size = y_pred.shape[2] - - if y_true.shape[0] != y_pred.shape[0]: - raise ValueError("Batch size of y_true and y_pred must be equal.") - if y_true.shape[1] != y_pred.shape[1]: - raise ValueError("Sentence length of y_true and y_pred must be equal.") - if np.max(y_true) > vocab_size: - raise ValueError("Label value must not be greater than vocabulary size.") - - # Matrix to select prediction value only for true class - filter_matrix = np.array( - [[list(np.eye(vocab_size)[word]) for word in sentence] for sentence in y_true] - ) - - # Getting the matrix containing prediction for only true class - true_class_pred = np.sum(y_pred * filter_matrix, axis=2).clip(epsilon, 1) - - # Calculating perplexity for each sentence - perp_losses = np.exp(np.negative(np.mean(np.log(true_class_pred), axis=1))) - - return np.mean(perp_losses) - - -def smooth_l1_loss(y_true: np.ndarray, y_pred: np.ndarray, beta: float = 1.0) -> float: - """ - Calculate the Smooth L1 Loss between y_true and y_pred. - - The Smooth L1 Loss is less sensitive to outliers than the L2 Loss and is often used - in regression problems, such as object detection. - - Smooth L1 Loss = - 0.5 * (x - y)^2 / beta, if |x - y| < beta - |x - y| - 0.5 * beta, otherwise - - Reference: - https://pytorch.org/docs/stable/generated/torch.nn.SmoothL1Loss.html - - Args: - y_true: Array of true values. - y_pred: Array of predicted values. - beta: Specifies the threshold at which to change between L1 and L2 loss. - - Returns: - The calculated Smooth L1 Loss between y_true and y_pred. - - Raises: - ValueError: If the length of the two arrays is not the same. - - >>> y_true = np.array([3, 5, 2, 7]) - >>> y_pred = np.array([2.9, 4.8, 2.1, 7.2]) - >>> float(smooth_l1_loss(y_true, y_pred, 1.0)) - 0.012500000000000022 - - >>> y_true = np.array([2, 4, 6]) - >>> y_pred = np.array([1, 5, 7]) - >>> float(smooth_l1_loss(y_true, y_pred, 1.0)) - 0.5 - - >>> y_true = np.array([1, 3, 5, 7]) - >>> y_pred = np.array([1, 3, 5, 7]) - >>> float(smooth_l1_loss(y_true, y_pred, 1.0)) - 0.0 - - >>> y_true = np.array([1, 3, 5]) - >>> y_pred = np.array([1, 3, 5, 7]) - >>> smooth_l1_loss(y_true, y_pred, 1.0) - Traceback (most recent call last): - ... - ValueError: The length of the two arrays should be the same. - """ - - if len(y_true) != len(y_pred): - raise ValueError("The length of the two arrays should be the same.") - - diff = np.abs(y_true - y_pred) - loss = np.where(diff < beta, 0.5 * diff**2 / beta, diff - 0.5 * beta) - return np.mean(loss) - - -def kullback_leibler_divergence(y_true: np.ndarray, y_pred: np.ndarray) -> float: - """ - Calculate the Kullback-Leibler divergence (KL divergence) loss between true labels - and predicted probabilities. - - KL divergence loss quantifies dissimilarity between true labels and predicted - probabilities. It's often used in training generative models. - - KL = Σ(y_true * ln(y_true / y_pred)) - - Reference: https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence - - Parameters: - - y_true: True class probabilities - - y_pred: Predicted class probabilities - - >>> true_labels = np.array([0.2, 0.3, 0.5]) - >>> predicted_probs = np.array([0.3, 0.3, 0.4]) - >>> float(kullback_leibler_divergence(true_labels, predicted_probs)) - 0.030478754035472025 - >>> true_labels = np.array([0.2, 0.3, 0.5]) - >>> predicted_probs = np.array([0.3, 0.3, 0.4, 0.5]) - >>> kullback_leibler_divergence(true_labels, predicted_probs) - Traceback (most recent call last): - ... - ValueError: Input arrays must have the same length. - """ - if len(y_true) != len(y_pred): - raise ValueError("Input arrays must have the same length.") - - kl_loss = y_true * np.log(y_true / y_pred) - return np.sum(kl_loss) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/lstm/__init__.py b/machine_learning/lstm/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/machine_learning/lstm/lstm_prediction.py b/machine_learning/lstm/lstm_prediction.py deleted file mode 100644 index 81ac5f01d3d6..000000000000 --- a/machine_learning/lstm/lstm_prediction.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Create a Long Short Term Memory (LSTM) network model -An LSTM is a type of Recurrent Neural Network (RNN) as discussed at: -* https://colah.github.io/posts/2015-08-Understanding-LSTMs -* https://en.wikipedia.org/wiki/Long_short-term_memory -""" - -import numpy as np -import pandas as pd -from keras.layers import LSTM, Dense -from keras.models import Sequential -from sklearn.preprocessing import MinMaxScaler - -if __name__ == "__main__": - """ - First part of building a model is to get the data and prepare - it for our model. You can use any dataset for stock prediction - make sure you set the price column on line number 21. Here we - use a dataset which have the price on 3rd column. - """ - sample_data = pd.read_csv("sample_data.csv", header=None) - len_data = sample_data.shape[:1][0] - # If you're using some other dataset input the target column - actual_data = sample_data.iloc[:, 1:2] - actual_data = actual_data.to_numpy().reshape(len_data, 1) - actual_data = MinMaxScaler().fit_transform(actual_data) - look_back = 10 - forward_days = 5 - periods = 20 - division = len_data - periods * look_back - train_data = actual_data[:division] - test_data = actual_data[division - look_back :] - train_x, train_y = [], [] - test_x, test_y = [], [] - - for i in range(len(train_data) - forward_days - look_back + 1): - train_x.append(train_data[i : i + look_back]) - train_y.append(train_data[i + look_back : i + look_back + forward_days]) - for i in range(len(test_data) - forward_days - look_back + 1): - test_x.append(test_data[i : i + look_back]) - test_y.append(test_data[i + look_back : i + look_back + forward_days]) - x_train = np.array(train_x) - x_test = np.array(test_x) - y_train = np.array([list(i.ravel()) for i in train_y]) - y_test = np.array([list(i.ravel()) for i in test_y]) - - model = Sequential() - model.add(LSTM(128, input_shape=(look_back, 1), return_sequences=True)) - model.add(LSTM(64, input_shape=(128, 1))) - model.add(Dense(forward_days)) - model.compile(loss="mean_squared_error", optimizer="adam") - history = model.fit( - x_train, y_train, epochs=150, verbose=1, shuffle=True, batch_size=4 - ) - pred = model.predict(x_test) diff --git a/machine_learning/lstm/sample_data.csv b/machine_learning/lstm/sample_data.csv deleted file mode 100644 index f94db621f619..000000000000 --- a/machine_learning/lstm/sample_data.csv +++ /dev/null @@ -1,1259 +0,0 @@ -04/24/2020, 1279.31, 1640394, 1261.17, 1280.4, 1249.45 -04/23/2020, 1276.31, 1566203, 1271.55, 1293.31, 1265.67 -04/22/2020, 1263.21, 2093140, 1245.54, 1285.6133, 1242 -04/21/2020, 1216.34, 2153003, 1247, 1254.27, 1209.71 -04/20/2020, 1266.61, 1695488, 1271, 1281.6, 1261.37 -04/17/2020, 1283.25, 1949042, 1284.85, 1294.43, 1271.23 -04/16/2020, 1263.47, 2518099, 1274.1, 1279, 1242.62 -04/15/2020, 1262.47, 1671703, 1245.61, 1280.46, 1240.4 -04/14/2020, 1269.23, 2470353, 1245.09, 1282.07, 1236.93 -04/13/2020, 1217.56, 1739828, 1209.18, 1220.51, 1187.5984 -04/09/2020, 1211.45, 2175421, 1224.08, 1225.57, 1196.7351 -04/08/2020, 1210.28, 1975135, 1206.5, 1219.07, 1188.16 -04/07/2020, 1186.51, 2387329, 1221, 1225, 1182.23 -04/06/2020, 1186.92, 2664723, 1138, 1194.66, 1130.94 -04/03/2020, 1097.88, 2313400, 1119.015, 1123.54, 1079.81 -04/02/2020, 1120.84, 1964881, 1098.26, 1126.86, 1096.4 -04/01/2020, 1105.62, 2344173, 1122, 1129.69, 1097.45 -03/31/2020, 1162.81, 2487983, 1147.3, 1175.31, 1138.14 -03/30/2020, 1146.82, 2574061, 1125.04, 1151.63, 1096.48 -03/27/2020, 1110.71, 3208495, 1125.67, 1150.6702, 1105.91 -03/26/2020, 1161.75, 3573755, 1111.8, 1169.97, 1093.53 -03/25/2020, 1102.49, 4081528, 1126.47, 1148.9, 1086.01 -03/24/2020, 1134.46, 3344450, 1103.77, 1135, 1090.62 -03/23/2020, 1056.62, 4044137, 1061.32, 1071.32, 1013.5361 -03/20/2020, 1072.32, 3601750, 1135.72, 1143.99, 1065.49 -03/19/2020, 1115.29, 3651106, 1093.05, 1157.9699, 1060.1075 -03/18/2020, 1096.8, 4233435, 1056.51, 1106.5, 1037.28 -03/17/2020, 1119.8, 3861489, 1093.11, 1130.86, 1056.01 -03/16/2020, 1084.33, 4252365, 1096, 1152.2665, 1074.44 -03/13/2020, 1219.73, 3700125, 1179, 1219.76, 1117.1432 -03/12/2020, 1114.91, 4226748, 1126, 1193.87, 1113.3 -03/11/2020, 1215.41, 2611229, 1249.7, 1260.96, 1196.07 -03/10/2020, 1280.39, 2611373, 1260, 1281.15, 1218.77 -03/09/2020, 1215.56, 3365365, 1205.3, 1254.7599, 1200 -03/06/2020, 1298.41, 2660628, 1277.06, 1306.22, 1261.05 -03/05/2020, 1319.04, 2561288, 1350.2, 1358.91, 1305.1 -03/04/2020, 1386.52, 1913315, 1359.23, 1388.09, 1343.11 -03/03/2020, 1341.39, 2402326, 1399.42, 1410.15, 1332 -03/02/2020, 1389.11, 2431468, 1351.61, 1390.87, 1326.815 -02/28/2020, 1339.33, 3790618, 1277.5, 1341.14, 1271 -02/27/2020, 1318.09, 2978300, 1362.06, 1371.7037, 1317.17 -02/26/2020, 1393.18, 2204037, 1396.14, 1415.7, 1379 -02/25/2020, 1388.45, 2478278, 1433, 1438.14, 1382.4 -02/24/2020, 1421.59, 2867053, 1426.11, 1436.97, 1411.39 -02/21/2020, 1485.11, 1732273, 1508.03, 1512.215, 1480.44 -02/20/2020, 1518.15, 1096552, 1522, 1529.64, 1506.82 -02/19/2020, 1526.69, 949268, 1525.07, 1532.1063, 1521.4 -02/18/2020, 1519.67, 1121140, 1515, 1531.63, 1512.59 -02/14/2020, 1520.74, 1197836, 1515.6, 1520.74, 1507.34 -02/13/2020, 1514.66, 929730, 1512.69, 1527.18, 1504.6 -02/12/2020, 1518.27, 1167565, 1514.48, 1520.695, 1508.11 -02/11/2020, 1508.79, 1344633, 1511.81, 1529.63, 1505.6378 -02/10/2020, 1508.68, 1419876, 1474.32, 1509.5, 1474.32 -02/07/2020, 1479.23, 1172270, 1467.3, 1485.84, 1466.35 -02/06/2020, 1476.23, 1679384, 1450.33, 1481.9997, 1449.57 -02/05/2020, 1448.23, 1986157, 1462.42, 1463.84, 1430.56 -02/04/2020, 1447.07, 3932954, 1457.07, 1469.5, 1426.3 -02/03/2020, 1485.94, 3055216, 1462, 1490, 1458.99 -01/31/2020, 1434.23, 2417214, 1468.9, 1470.13, 1428.53 -01/30/2020, 1455.84, 1339421, 1439.96, 1457.28, 1436.4 -01/29/2020, 1458.63, 1078667, 1458.8, 1465.43, 1446.74 -01/28/2020, 1452.56, 1577422, 1443, 1456, 1432.47 -01/27/2020, 1433.9, 1755201, 1431, 1438.07, 1421.2 -01/24/2020, 1466.71, 1784644, 1493.59, 1495.495, 1465.25 -01/23/2020, 1486.65, 1351354, 1487.64, 1495.52, 1482.1 -01/22/2020, 1485.95, 1610846, 1491, 1503.2143, 1484.93 -01/21/2020, 1484.4, 2036780, 1479.12, 1491.85, 1471.2 -01/17/2020, 1480.39, 2396215, 1462.91, 1481.2954, 1458.22 -01/16/2020, 1451.7, 1173688, 1447.44, 1451.99, 1440.92 -01/15/2020, 1439.2, 1282685, 1430.21, 1441.395, 1430.21 -01/14/2020, 1430.88, 1560453, 1439.01, 1441.8, 1428.37 -01/13/2020, 1439.23, 1653482, 1436.13, 1440.52, 1426.02 -01/10/2020, 1429.73, 1821566, 1427.56, 1434.9292, 1418.35 -01/09/2020, 1419.83, 1502664, 1420.57, 1427.33, 1410.27 -01/08/2020, 1404.32, 1529177, 1392.08, 1411.58, 1390.84 -01/07/2020, 1393.34, 1511693, 1397.94, 1402.99, 1390.38 -01/06/2020, 1394.21, 1733149, 1350, 1396.5, 1350 -01/03/2020, 1360.66, 1187006, 1347.86, 1372.5, 1345.5436 -01/02/2020, 1367.37, 1406731, 1341.55, 1368.14, 1341.55 -12/31/2019, 1337.02, 962468, 1330.11, 1338, 1329.085 -12/30/2019, 1336.14, 1051323, 1350, 1353, 1334.02 -12/27/2019, 1351.89, 1038718, 1362.99, 1364.53, 1349.31 -12/26/2019, 1360.4, 667754, 1346.17, 1361.3269, 1344.47 -12/24/2019, 1343.56, 347518, 1348.5, 1350.26, 1342.78 -12/23/2019, 1348.84, 883200, 1355.87, 1359.7999, 1346.51 -12/20/2019, 1349.59, 3316905, 1363.35, 1363.64, 1349 -12/19/2019, 1356.04, 1470112, 1351.82, 1358.1, 1348.985 -12/18/2019, 1352.62, 1657069, 1356.6, 1360.47, 1351 -12/17/2019, 1355.12, 1855259, 1362.89, 1365, 1351.3231 -12/16/2019, 1361.17, 1397451, 1356.5, 1364.68, 1352.67 -12/13/2019, 1347.83, 1550028, 1347.95, 1353.0931, 1343.87 -12/12/2019, 1350.27, 1281722, 1345.94, 1355.775, 1340.5 -12/11/2019, 1345.02, 850796, 1350.84, 1351.2, 1342.67 -12/10/2019, 1344.66, 1094653, 1341.5, 1349.975, 1336.04 -12/09/2019, 1343.56, 1355795, 1338.04, 1359.45, 1337.84 -12/06/2019, 1340.62, 1315510, 1333.44, 1344, 1333.44 -12/05/2019, 1328.13, 1212818, 1328, 1329.3579, 1316.44 -12/04/2019, 1320.54, 1538110, 1307.01, 1325.8, 1304.87 -12/03/2019, 1295.28, 1268647, 1279.57, 1298.461, 1279 -12/02/2019, 1289.92, 1511851, 1301, 1305.83, 1281 -11/29/2019, 1304.96, 586981, 1307.12, 1310.205, 1303.97 -11/27/2019, 1312.99, 996329, 1315, 1318.36, 1309.63 -11/26/2019, 1313.55, 1069795, 1309.86, 1314.8, 1305.09 -11/25/2019, 1306.69, 1036487, 1299.18, 1311.31, 1298.13 -11/22/2019, 1295.34, 1386506, 1305.62, 1308.73, 1291.41 -11/21/2019, 1301.35, 995499, 1301.48, 1312.59, 1293 -11/20/2019, 1303.05, 1309835, 1311.74, 1315, 1291.15 -11/19/2019, 1315.46, 1269372, 1327.7, 1327.7, 1312.8 -11/18/2019, 1320.7, 1488083, 1332.22, 1335.5288, 1317.5 -11/15/2019, 1334.87, 1782955, 1318.94, 1334.88, 1314.2796 -11/14/2019, 1311.46, 1194305, 1297.5, 1317, 1295.65 -11/13/2019, 1298, 853861, 1294.07, 1304.3, 1293.51 -11/12/2019, 1298.8, 1085859, 1300, 1310, 1295.77 -11/11/2019, 1299.19, 1012429, 1303.18, 1306.425, 1297.41 -11/08/2019, 1311.37, 1251916, 1305.28, 1318, 1304.365 -11/07/2019, 1308.86, 2029970, 1294.28, 1323.74, 1294.245 -11/06/2019, 1291.8, 1152977, 1289.46, 1293.73, 1282.5 -11/05/2019, 1292.03, 1282711, 1292.89, 1298.93, 1291.2289 -11/04/2019, 1291.37, 1500964, 1276.45, 1294.13, 1276.355 -11/01/2019, 1273.74, 1670072, 1265, 1274.62, 1260.5 -10/31/2019, 1260.11, 1455651, 1261.28, 1267.67, 1250.8428 -10/30/2019, 1261.29, 1408851, 1252.97, 1269.36, 1252 -10/29/2019, 1262.62, 1886380, 1276.23, 1281.59, 1257.2119 -10/28/2019, 1290, 2613237, 1275.45, 1299.31, 1272.54 -10/25/2019, 1265.13, 1213051, 1251.03, 1269.6, 1250.01 -10/24/2019, 1260.99, 1039868, 1260.9, 1264, 1253.715 -10/23/2019, 1259.13, 928595, 1242.36, 1259.89, 1242.36 -10/22/2019, 1242.8, 1047851, 1247.85, 1250.6, 1241.38 -10/21/2019, 1246.15, 1038042, 1252.26, 1254.6287, 1240.6 -10/18/2019, 1245.49, 1352839, 1253.46, 1258.89, 1241.08 -10/17/2019, 1253.07, 980510, 1250.93, 1263.325, 1249.94 -10/16/2019, 1243.64, 1168174, 1241.17, 1254.74, 1238.45 -10/15/2019, 1243.01, 1395259, 1220.4, 1247.33, 1220.4 -10/14/2019, 1217.14, 882039, 1212.34, 1226.33, 1211.76 -10/11/2019, 1215.45, 1277144, 1222.21, 1228.39, 1213.74 -10/10/2019, 1208.67, 932531, 1198.58, 1215, 1197.34 -10/09/2019, 1202.31, 876632, 1199.35, 1208.35, 1197.63 -10/08/2019, 1189.13, 1141784, 1197.59, 1206.08, 1189.01 -10/07/2019, 1207.68, 867149, 1204.4, 1218.2036, 1203.75 -10/04/2019, 1209, 1183264, 1191.89, 1211.44, 1189.17 -10/03/2019, 1187.83, 1663656, 1180, 1189.06, 1162.43 -10/02/2019, 1176.63, 1639237, 1196.98, 1196.99, 1171.29 -10/01/2019, 1205.1, 1358279, 1219, 1231.23, 1203.58 -09/30/2019, 1219, 1419676, 1220.97, 1226, 1212.3 -09/27/2019, 1225.09, 1354432, 1243.01, 1244.02, 1214.45 -09/26/2019, 1241.39, 1561882, 1241.96, 1245, 1232.268 -09/25/2019, 1246.52, 1593875, 1215.82, 1248.3, 1210.09 -09/24/2019, 1218.76, 1591786, 1240, 1246.74, 1210.68 -09/23/2019, 1234.03, 1075253, 1226, 1239.09, 1224.17 -09/20/2019, 1229.93, 2337269, 1233.12, 1243.32, 1223.08 -09/19/2019, 1238.71, 1000155, 1232.06, 1244.44, 1232.02 -09/18/2019, 1232.41, 1144333, 1227.51, 1235.61, 1216.53 -09/17/2019, 1229.15, 958112, 1230.4, 1235, 1223.69 -09/16/2019, 1231.3, 1053299, 1229.52, 1239.56, 1225.61 -09/13/2019, 1239.56, 1301350, 1231.35, 1240.88, 1227.01 -09/12/2019, 1234.25, 1725908, 1224.3, 1241.86, 1223.02 -09/11/2019, 1220.17, 1307033, 1203.41, 1222.6, 1202.2 -09/10/2019, 1206, 1260115, 1195.15, 1210, 1194.58 -09/09/2019, 1204.41, 1471880, 1204, 1220, 1192.62 -09/06/2019, 1204.93, 1072143, 1208.13, 1212.015, 1202.5222 -09/05/2019, 1211.38, 1408601, 1191.53, 1213.04, 1191.53 -09/04/2019, 1181.41, 1068968, 1176.71, 1183.48, 1171 -09/03/2019, 1168.39, 1480420, 1177.03, 1186.89, 1163.2 -08/30/2019, 1188.1, 1129959, 1198.5, 1198.5, 1183.8026 -08/29/2019, 1192.85, 1088858, 1181.12, 1196.06, 1181.12 -08/28/2019, 1171.02, 802243, 1161.71, 1176.4199, 1157.3 -08/27/2019, 1167.84, 1077452, 1180.53, 1182.4, 1161.45 -08/26/2019, 1168.89, 1226441, 1157.26, 1169.47, 1152.96 -08/23/2019, 1151.29, 1688271, 1181.99, 1194.08, 1147.75 -08/22/2019, 1189.53, 947906, 1194.07, 1198.0115, 1178.58 -08/21/2019, 1191.25, 741053, 1193.15, 1199, 1187.43 -08/20/2019, 1182.69, 915605, 1195.25, 1196.06, 1182.11 -08/19/2019, 1198.45, 1232517, 1190.09, 1206.99, 1190.09 -08/16/2019, 1177.6, 1349436, 1179.55, 1182.72, 1171.81 -08/15/2019, 1167.26, 1224739, 1163.5, 1175.84, 1162.11 -08/14/2019, 1164.29, 1578668, 1176.31, 1182.3, 1160.54 -08/13/2019, 1197.27, 1318009, 1171.46, 1204.78, 1171.46 -08/12/2019, 1174.71, 1003187, 1179.21, 1184.96, 1167.6723 -08/09/2019, 1188.01, 1065658, 1197.99, 1203.88, 1183.603 -08/08/2019, 1204.8, 1467997, 1182.83, 1205.01, 1173.02 -08/07/2019, 1173.99, 1444324, 1156, 1178.4451, 1149.6239 -08/06/2019, 1169.95, 1709374, 1163.31, 1179.96, 1160 -08/05/2019, 1152.32, 2597455, 1170.04, 1175.24, 1140.14 -08/02/2019, 1193.99, 1645067, 1200.74, 1206.9, 1188.94 -08/01/2019, 1209.01, 1698510, 1214.03, 1234.11, 1205.72 -07/31/2019, 1216.68, 1725454, 1223, 1234, 1207.7635 -07/30/2019, 1225.14, 1453263, 1225.41, 1234.87, 1223.3 -07/29/2019, 1239.41, 2223731, 1241.05, 1247.37, 1228.23 -07/26/2019, 1250.41, 4805752, 1224.04, 1265.5499, 1224 -07/25/2019, 1132.12, 2209823, 1137.82, 1141.7, 1120.92 -07/24/2019, 1137.81, 1590101, 1131.9, 1144, 1126.99 -07/23/2019, 1146.21, 1093688, 1144, 1146.9, 1131.8 -07/22/2019, 1138.07, 1301846, 1133.45, 1139.25, 1124.24 -07/19/2019, 1130.1, 1647245, 1148.19, 1151.14, 1129.62 -07/18/2019, 1146.33, 1291281, 1141.74, 1147.605, 1132.73 -07/17/2019, 1146.35, 1170047, 1150.97, 1158.36, 1145.77 -07/16/2019, 1153.58, 1238807, 1146, 1158.58, 1145 -07/15/2019, 1150.34, 903780, 1146.86, 1150.82, 1139.4 -07/12/2019, 1144.9, 863973, 1143.99, 1147.34, 1138.78 -07/11/2019, 1144.21, 1195569, 1143.25, 1153.07, 1139.58 -07/10/2019, 1140.48, 1209466, 1131.22, 1142.05, 1130.97 -07/09/2019, 1124.83, 1330370, 1111.8, 1128.025, 1107.17 -07/08/2019, 1116.35, 1236419, 1125.17, 1125.98, 1111.21 -07/05/2019, 1131.59, 1264540, 1117.8, 1132.88, 1116.14 -07/03/2019, 1121.58, 767011, 1117.41, 1126.76, 1113.86 -07/02/2019, 1111.25, 991755, 1102.24, 1111.77, 1098.17 -07/01/2019, 1097.95, 1438504, 1098, 1107.58, 1093.703 -06/28/2019, 1080.91, 1693450, 1076.39, 1081, 1073.37 -06/27/2019, 1076.01, 1004477, 1084, 1087.1, 1075.29 -06/26/2019, 1079.8, 1810869, 1086.5, 1092.97, 1072.24 -06/25/2019, 1086.35, 1546913, 1112.66, 1114.35, 1083.8 -06/24/2019, 1115.52, 1395696, 1119.61, 1122, 1111.01 -06/21/2019, 1121.88, 1947591, 1109.24, 1124.11, 1108.08 -06/20/2019, 1111.42, 1262011, 1119.99, 1120.12, 1104.74 -06/19/2019, 1102.33, 1339218, 1105.6, 1107, 1093.48 -06/18/2019, 1103.6, 1386684, 1109.69, 1116.39, 1098.99 -06/17/2019, 1092.5, 941602, 1086.28, 1099.18, 1086.28 -06/14/2019, 1085.35, 1111643, 1086.42, 1092.69, 1080.1721 -06/13/2019, 1088.77, 1058000, 1083.64, 1094.17, 1080.15 -06/12/2019, 1077.03, 1061255, 1078, 1080.93, 1067.54 -06/11/2019, 1078.72, 1437063, 1093.98, 1101.99, 1077.6025 -06/10/2019, 1080.38, 1464248, 1072.98, 1092.66, 1072.3216 -06/07/2019, 1066.04, 1802370, 1050.63, 1070.92, 1048.4 -06/06/2019, 1044.34, 1703244, 1044.99, 1047.49, 1033.7 -06/05/2019, 1042.22, 2168439, 1051.54, 1053.55, 1030.49 -06/04/2019, 1053.05, 2833483, 1042.9, 1056.05, 1033.69 -06/03/2019, 1036.23, 5130576, 1065.5, 1065.5, 1025 -05/31/2019, 1103.63, 1508203, 1101.29, 1109.6, 1100.18 -05/30/2019, 1117.95, 951873, 1115.54, 1123.13, 1112.12 -05/29/2019, 1116.46, 1538212, 1127.52, 1129.1, 1108.2201 -05/28/2019, 1134.15, 1365166, 1134, 1151.5871, 1133.12 -05/24/2019, 1133.47, 1112341, 1147.36, 1149.765, 1131.66 -05/23/2019, 1140.77, 1199300, 1140.5, 1145.9725, 1129.224 -05/22/2019, 1151.42, 914839, 1146.75, 1158.52, 1145.89 -05/21/2019, 1149.63, 1160158, 1148.49, 1152.7077, 1137.94 -05/20/2019, 1138.85, 1353292, 1144.5, 1146.7967, 1131.4425 -05/17/2019, 1162.3, 1208623, 1168.47, 1180.15, 1160.01 -05/16/2019, 1178.98, 1531404, 1164.51, 1188.16, 1162.84 -05/15/2019, 1164.21, 2289302, 1117.87, 1171.33, 1116.6657 -05/14/2019, 1120.44, 1836604, 1137.21, 1140.42, 1119.55 -05/13/2019, 1132.03, 1860648, 1141.96, 1147.94, 1122.11 -05/10/2019, 1164.27, 1314546, 1163.59, 1172.6, 1142.5 -05/09/2019, 1162.38, 1185973, 1159.03, 1169.66, 1150.85 -05/08/2019, 1166.27, 1309514, 1172.01, 1180.4243, 1165.74 -05/07/2019, 1174.1, 1551368, 1180.47, 1190.44, 1161.04 -05/06/2019, 1189.39, 1563943, 1166.26, 1190.85, 1166.26 -05/03/2019, 1185.4, 1980653, 1173.65, 1186.8, 1169 -05/02/2019, 1162.61, 1944817, 1167.76, 1174.1895, 1155.0018 -05/01/2019, 1168.08, 2642983, 1188.05, 1188.05, 1167.18 -04/30/2019, 1188.48, 6194691, 1185, 1192.81, 1175 -04/29/2019, 1287.58, 2412788, 1274, 1289.27, 1266.2949 -04/26/2019, 1272.18, 1228276, 1269, 1273.07, 1260.32 -04/25/2019, 1263.45, 1099614, 1264.77, 1267.4083, 1252.03 -04/24/2019, 1256, 1015006, 1264.12, 1268.01, 1255 -04/23/2019, 1264.55, 1271195, 1250.69, 1269, 1246.38 -04/22/2019, 1248.84, 806577, 1235.99, 1249.09, 1228.31 -04/18/2019, 1236.37, 1315676, 1239.18, 1242, 1234.61 -04/17/2019, 1236.34, 1211866, 1233, 1240.56, 1227.82 -04/16/2019, 1227.13, 855258, 1225, 1230.82, 1220.12 -04/15/2019, 1221.1, 1187353, 1218, 1224.2, 1209.1101 -04/12/2019, 1217.87, 926799, 1210, 1218.35, 1208.11 -04/11/2019, 1204.62, 709417, 1203.96, 1207.96, 1200.13 -04/10/2019, 1202.16, 724524, 1200.68, 1203.785, 1196.435 -04/09/2019, 1197.25, 865416, 1196, 1202.29, 1193.08 -04/08/2019, 1203.84, 859969, 1207.89, 1208.69, 1199.86 -04/05/2019, 1207.15, 900950, 1214.99, 1216.22, 1205.03 -04/04/2019, 1215, 949962, 1205.94, 1215.67, 1204.13 -04/03/2019, 1205.92, 1014195, 1207.48, 1216.3, 1200.5 -04/02/2019, 1200.49, 800820, 1195.32, 1201.35, 1185.71 -04/01/2019, 1194.43, 1188235, 1184.1, 1196.66, 1182 -03/29/2019, 1173.31, 1269573, 1174.9, 1178.99, 1162.88 -03/28/2019, 1168.49, 966843, 1171.54, 1171.565, 1159.4312 -03/27/2019, 1173.02, 1362217, 1185.5, 1187.559, 1159.37 -03/26/2019, 1184.62, 1894639, 1198.53, 1202.83, 1176.72 -03/25/2019, 1193, 1493841, 1196.93, 1206.3975, 1187.04 -03/22/2019, 1205.5, 1668910, 1226.32, 1230, 1202.825 -03/21/2019, 1231.54, 1195899, 1216, 1231.79, 1213.15 -03/20/2019, 1223.97, 2089367, 1197.35, 1227.14, 1196.17 -03/19/2019, 1198.85, 1404863, 1188.81, 1200, 1185.87 -03/18/2019, 1184.26, 1212506, 1183.3, 1190, 1177.4211 -03/15/2019, 1184.46, 2457597, 1193.38, 1196.57, 1182.61 -03/14/2019, 1185.55, 1150950, 1194.51, 1197.88, 1184.48 -03/13/2019, 1193.32, 1434816, 1200.645, 1200.93, 1191.94 -03/12/2019, 1193.2, 2012306, 1178.26, 1200, 1178.26 -03/11/2019, 1175.76, 1569332, 1144.45, 1176.19, 1144.45 -03/08/2019, 1142.32, 1212271, 1126.73, 1147.08, 1123.3 -03/07/2019, 1143.3, 1166076, 1155.72, 1156.755, 1134.91 -03/06/2019, 1157.86, 1094100, 1162.49, 1167.5658, 1155.49 -03/05/2019, 1162.03, 1422357, 1150.06, 1169.61, 1146.195 -03/04/2019, 1147.8, 1444774, 1146.99, 1158.2804, 1130.69 -03/01/2019, 1140.99, 1447454, 1124.9, 1142.97, 1124.75 -02/28/2019, 1119.92, 1541068, 1111.3, 1127.65, 1111.01 -02/27/2019, 1116.05, 968362, 1106.95, 1117.98, 1101 -02/26/2019, 1115.13, 1469761, 1105.75, 1119.51, 1099.92 -02/25/2019, 1109.4, 1395281, 1116, 1118.54, 1107.27 -02/22/2019, 1110.37, 1048361, 1100.9, 1111.24, 1095.6 -02/21/2019, 1096.97, 1414744, 1110.84, 1111.94, 1092.52 -02/20/2019, 1113.8, 1080144, 1119.99, 1123.41, 1105.28 -02/19/2019, 1118.56, 1046315, 1110, 1121.89, 1110 -02/15/2019, 1113.65, 1442461, 1130.08, 1131.67, 1110.65 -02/14/2019, 1121.67, 941678, 1118.05, 1128.23, 1110.445 -02/13/2019, 1120.16, 1048630, 1124.99, 1134.73, 1118.5 -02/12/2019, 1121.37, 1608658, 1106.8, 1125.295, 1105.85 -02/11/2019, 1095.01, 1063825, 1096.95, 1105.945, 1092.86 -02/08/2019, 1095.06, 1072031, 1087, 1098.91, 1086.55 -02/07/2019, 1098.71, 2040615, 1104.16, 1104.84, 1086 -02/06/2019, 1115.23, 2101674, 1139.57, 1147, 1112.77 -02/05/2019, 1145.99, 3529974, 1124.84, 1146.85, 1117.248 -02/04/2019, 1132.8, 2518184, 1112.66, 1132.8, 1109.02 -02/01/2019, 1110.75, 1455609, 1112.4, 1125, 1104.89 -01/31/2019, 1116.37, 1531463, 1103, 1117.33, 1095.41 -01/30/2019, 1089.06, 1241760, 1068.43, 1091, 1066.85 -01/29/2019, 1060.62, 1006731, 1072.68, 1075.15, 1055.8647 -01/28/2019, 1070.08, 1277745, 1080.11, 1083, 1063.8 -01/25/2019, 1090.99, 1114785, 1085, 1094, 1081.82 -01/24/2019, 1073.9, 1317718, 1076.48, 1079.475, 1060.7 -01/23/2019, 1075.57, 956526, 1077.35, 1084.93, 1059.75 -01/22/2019, 1070.52, 1607398, 1088, 1091.51, 1063.47 -01/18/2019, 1098.26, 1933754, 1100, 1108.352, 1090.9 -01/17/2019, 1089.9, 1223674, 1079.47, 1091.8, 1073.5 -01/16/2019, 1080.97, 1320530, 1080, 1092.375, 1079.34 -01/15/2019, 1077.15, 1452238, 1050.17, 1080.05, 1047.34 -01/14/2019, 1044.69, 1127417, 1046.92, 1051.53, 1041.255 -01/11/2019, 1057.19, 1512651, 1063.18, 1063.775, 1048.48 -01/10/2019, 1070.33, 1444976, 1067.66, 1071.15, 1057.71 -01/09/2019, 1074.66, 1198369, 1081.65, 1082.63, 1066.4 -01/08/2019, 1076.28, 1748371, 1076.11, 1084.56, 1060.53 -01/07/2019, 1068.39, 1978077, 1071.5, 1073.9999, 1054.76 -01/04/2019, 1070.71, 2080144, 1032.59, 1070.84, 1027.4179 -01/03/2019, 1016.06, 1829379, 1041, 1056.98, 1014.07 -01/02/2019, 1045.85, 1516681, 1016.57, 1052.32, 1015.71 -12/31/2018, 1035.61, 1492541, 1050.96, 1052.7, 1023.59 -12/28/2018, 1037.08, 1399218, 1049.62, 1055.56, 1033.1 -12/27/2018, 1043.88, 2102069, 1017.15, 1043.89, 997 -12/26/2018, 1039.46, 2337212, 989.01, 1040, 983 -12/24/2018, 976.22, 1590328, 973.9, 1003.54, 970.11 -12/21/2018, 979.54, 4560424, 1015.3, 1024.02, 973.69 -12/20/2018, 1009.41, 2659047, 1018.13, 1034.22, 996.36 -12/19/2018, 1023.01, 2419322, 1033.99, 1062, 1008.05 -12/18/2018, 1028.71, 2101854, 1026.09, 1049.48, 1021.44 -12/17/2018, 1016.53, 2337631, 1037.51, 1053.15, 1007.9 -12/14/2018, 1042.1, 1685802, 1049.98, 1062.6, 1040.79 -12/13/2018, 1061.9, 1329198, 1068.07, 1079.7597, 1053.93 -12/12/2018, 1063.68, 1523276, 1068, 1081.65, 1062.79 -12/11/2018, 1051.75, 1354751, 1056.49, 1060.6, 1039.84 -12/10/2018, 1039.55, 1793465, 1035.05, 1048.45, 1023.29 -12/07/2018, 1036.58, 2098526, 1060.01, 1075.26, 1028.5 -12/06/2018, 1068.73, 2758098, 1034.26, 1071.2, 1030.7701 -12/04/2018, 1050.82, 2278200, 1103.12, 1104.42, 1049.98 -12/03/2018, 1106.43, 1900355, 1123.14, 1124.65, 1103.6645 -11/30/2018, 1094.43, 2554416, 1089.07, 1095.57, 1077.88 -11/29/2018, 1088.3, 1403540, 1076.08, 1094.245, 1076 -11/28/2018, 1086.23, 2399374, 1048.76, 1086.84, 1035.76 -11/27/2018, 1044.41, 1801334, 1041, 1057.58, 1038.49 -11/26/2018, 1048.62, 1846430, 1038.35, 1049.31, 1033.91 -11/23/2018, 1023.88, 691462, 1030, 1037.59, 1022.3992 -11/21/2018, 1037.61, 1531676, 1036.76, 1048.56, 1033.47 -11/20/2018, 1025.76, 2447254, 1000, 1031.74, 996.02 -11/19/2018, 1020, 1837207, 1057.2, 1060.79, 1016.2601 -11/16/2018, 1061.49, 1641232, 1059.41, 1067, 1048.98 -11/15/2018, 1064.71, 1819132, 1044.71, 1071.85, 1031.78 -11/14/2018, 1043.66, 1561656, 1050, 1054.5643, 1031 -11/13/2018, 1036.05, 1496534, 1043.29, 1056.605, 1031.15 -11/12/2018, 1038.63, 1429319, 1061.39, 1062.12, 1031 -11/09/2018, 1066.15, 1343154, 1073.99, 1075.56, 1053.11 -11/08/2018, 1082.4, 1463022, 1091.38, 1093.27, 1072.2048 -11/07/2018, 1093.39, 2057155, 1069, 1095.46, 1065.9 -11/06/2018, 1055.81, 1225197, 1039.48, 1064.345, 1038.07 -11/05/2018, 1040.09, 2436742, 1055, 1058.47, 1021.24 -11/02/2018, 1057.79, 1829295, 1073.73, 1082.975, 1054.61 -11/01/2018, 1070, 1456222, 1075.8, 1083.975, 1062.46 -10/31/2018, 1076.77, 2528584, 1059.81, 1091.94, 1057 -10/30/2018, 1036.21, 3209126, 1008.46, 1037.49, 1000.75 -10/29/2018, 1020.08, 3873644, 1082.47, 1097.04, 995.83 -10/26/2018, 1071.47, 4185201, 1037.03, 1106.53, 1034.09 -10/25/2018, 1095.57, 2511884, 1071.79, 1110.98, 1069.55 -10/24/2018, 1050.71, 1910060, 1104.25, 1106.12, 1048.74 -10/23/2018, 1103.69, 1847798, 1080.89, 1107.89, 1070 -10/22/2018, 1101.16, 1494285, 1103.06, 1112.23, 1091 -10/19/2018, 1096.46, 1264605, 1093.37, 1110.36, 1087.75 -10/18/2018, 1087.97, 2056606, 1121.84, 1121.84, 1077.09 -10/17/2018, 1115.69, 1397613, 1126.46, 1128.99, 1102.19 -10/16/2018, 1121.28, 1845491, 1104.59, 1124.22, 1102.5 -10/15/2018, 1092.25, 1343231, 1108.91, 1113.4464, 1089 -10/12/2018, 1110.08, 2029872, 1108, 1115, 1086.402 -10/11/2018, 1079.32, 2939514, 1072.94, 1106.4, 1068.27 -10/10/2018, 1081.22, 2574985, 1131.08, 1132.17, 1081.13 -10/09/2018, 1138.82, 1308706, 1146.15, 1154.35, 1137.572 -10/08/2018, 1148.97, 1877142, 1150.11, 1168, 1127.3636 -10/05/2018, 1157.35, 1184245, 1167.5, 1173.4999, 1145.12 -10/04/2018, 1168.19, 2151762, 1195.33, 1197.51, 1155.576 -10/03/2018, 1202.95, 1207280, 1205, 1206.41, 1193.83 -10/02/2018, 1200.11, 1655602, 1190.96, 1209.96, 1186.63 -10/01/2018, 1195.31, 1345250, 1199.89, 1209.9, 1190.3 -09/28/2018, 1193.47, 1306822, 1191.87, 1195.41, 1184.5 -09/27/2018, 1194.64, 1244278, 1186.73, 1202.1, 1183.63 -09/26/2018, 1180.49, 1346434, 1185.15, 1194.23, 1174.765 -09/25/2018, 1184.65, 937577, 1176.15, 1186.88, 1168 -09/24/2018, 1173.37, 1218532, 1157.17, 1178, 1146.91 -09/21/2018, 1166.09, 4363929, 1192, 1192.21, 1166.04 -09/20/2018, 1186.87, 1209855, 1179.99, 1189.89, 1173.36 -09/19/2018, 1171.09, 1185321, 1164.98, 1173.21, 1154.58 -09/18/2018, 1161.22, 1184407, 1157.09, 1176.08, 1157.09 -09/17/2018, 1156.05, 1279147, 1170.14, 1177.24, 1154.03 -09/14/2018, 1172.53, 934300, 1179.1, 1180.425, 1168.3295 -09/13/2018, 1175.33, 1402005, 1170.74, 1178.61, 1162.85 -09/12/2018, 1162.82, 1291304, 1172.72, 1178.61, 1158.36 -09/11/2018, 1177.36, 1209171, 1161.63, 1178.68, 1156.24 -09/10/2018, 1164.64, 1115259, 1172.19, 1174.54, 1160.11 -09/07/2018, 1164.83, 1401034, 1158.67, 1175.26, 1157.215 -09/06/2018, 1171.44, 1886690, 1186.3, 1186.3, 1152 -09/05/2018, 1186.48, 2043732, 1193.8, 1199.0096, 1162 -09/04/2018, 1197, 1800509, 1204.27, 1212.99, 1192.5 -08/31/2018, 1218.19, 1812366, 1234.98, 1238.66, 1211.2854 -08/30/2018, 1239.12, 1320261, 1244.23, 1253.635, 1232.59 -08/29/2018, 1249.3, 1295939, 1237.45, 1250.66, 1236.3588 -08/28/2018, 1231.15, 1296532, 1241.29, 1242.545, 1228.69 -08/27/2018, 1241.82, 1154962, 1227.6, 1243.09, 1225.716 -08/24/2018, 1220.65, 946529, 1208.82, 1221.65, 1206.3588 -08/23/2018, 1205.38, 988509, 1207.14, 1221.28, 1204.24 -08/22/2018, 1207.33, 881463, 1200, 1211.84, 1199 -08/21/2018, 1201.62, 1187884, 1208, 1217.26, 1200.3537 -08/20/2018, 1207.77, 864462, 1205.02, 1211, 1194.6264 -08/17/2018, 1200.96, 1381724, 1202.03, 1209.02, 1188.24 -08/16/2018, 1206.49, 1319985, 1224.73, 1225.9999, 1202.55 -08/15/2018, 1214.38, 1815642, 1229.26, 1235.24, 1209.51 -08/14/2018, 1242.1, 1342534, 1235.19, 1245.8695, 1225.11 -08/13/2018, 1235.01, 957153, 1236.98, 1249.2728, 1233.6405 -08/10/2018, 1237.61, 1107323, 1243, 1245.695, 1232 -08/09/2018, 1249.1, 805227, 1249.9, 1255.542, 1246.01 -08/08/2018, 1245.61, 1369650, 1240.47, 1256.5, 1238.0083 -08/07/2018, 1242.22, 1493073, 1237, 1251.17, 1236.17 -08/06/2018, 1224.77, 1080923, 1225, 1226.0876, 1215.7965 -08/03/2018, 1223.71, 1072524, 1229.62, 1230, 1215.06 -08/02/2018, 1226.15, 1520488, 1205.9, 1229.88, 1204.79 -08/01/2018, 1220.01, 1567142, 1228, 1233.47, 1210.21 -07/31/2018, 1217.26, 1632823, 1220.01, 1227.5877, 1205.6 -07/30/2018, 1219.74, 1822782, 1228.01, 1234.916, 1211.47 -07/27/2018, 1238.5, 2115802, 1271, 1273.89, 1231 -07/26/2018, 1268.33, 2334881, 1251, 1269.7707, 1249.02 -07/25/2018, 1263.7, 2115890, 1239.13, 1265.86, 1239.13 -07/24/2018, 1248.08, 3303268, 1262.59, 1266, 1235.56 -07/23/2018, 1205.5, 2584034, 1181.01, 1206.49, 1181 -07/20/2018, 1184.91, 1246898, 1186.96, 1196.86, 1184.22 -07/19/2018, 1186.96, 1256113, 1191, 1200, 1183.32 -07/18/2018, 1195.88, 1391232, 1196.56, 1204.5, 1190.34 -07/17/2018, 1198.8, 1585091, 1172.22, 1203.04, 1170.6 -07/16/2018, 1183.86, 1049560, 1189.39, 1191, 1179.28 -07/13/2018, 1188.82, 1221687, 1185, 1195.4173, 1180 -07/12/2018, 1183.48, 1251083, 1159.89, 1184.41, 1155.935 -07/11/2018, 1153.9, 1094301, 1144.59, 1164.29, 1141.0003 -07/10/2018, 1152.84, 789249, 1156.98, 1159.59, 1149.59 -07/09/2018, 1154.05, 906073, 1148.48, 1154.67, 1143.42 -07/06/2018, 1140.17, 966155, 1123.58, 1140.93, 1120.7371 -07/05/2018, 1124.27, 1060752, 1110.53, 1127.5, 1108.48 -07/03/2018, 1102.89, 679034, 1135.82, 1135.82, 1100.02 -07/02/2018, 1127.46, 1188616, 1099, 1128, 1093.8 -06/29/2018, 1115.65, 1275979, 1120, 1128.2265, 1115 -06/28/2018, 1114.22, 1072438, 1102.09, 1122.31, 1096.01 -06/27/2018, 1103.98, 1287698, 1121.34, 1131.8362, 1103.62 -06/26/2018, 1118.46, 1559791, 1128, 1133.21, 1116.6589 -06/25/2018, 1124.81, 2155276, 1143.6, 1143.91, 1112.78 -06/22/2018, 1155.48, 1310164, 1159.14, 1162.4965, 1147.26 -06/21/2018, 1157.66, 1232352, 1174.85, 1177.295, 1152.232 -06/20/2018, 1169.84, 1648248, 1175.31, 1186.2856, 1169.16 -06/19/2018, 1168.06, 1616125, 1158.5, 1171.27, 1154.01 -06/18/2018, 1173.46, 1400641, 1143.65, 1174.31, 1143.59 -06/15/2018, 1152.26, 2119134, 1148.86, 1153.42, 1143.485 -06/14/2018, 1152.12, 1350085, 1143.85, 1155.47, 1140.64 -06/13/2018, 1134.79, 1490017, 1141.12, 1146.5, 1133.38 -06/12/2018, 1139.32, 899231, 1131.07, 1139.79, 1130.735 -06/11/2018, 1129.99, 1071114, 1118.6, 1137.26, 1118.6 -06/08/2018, 1120.87, 1289859, 1118.18, 1126.67, 1112.15 -06/07/2018, 1123.86, 1519860, 1131.32, 1135.82, 1116.52 -06/06/2018, 1136.88, 1697489, 1142.17, 1143, 1125.7429 -06/05/2018, 1139.66, 1538169, 1140.99, 1145.738, 1133.19 -06/04/2018, 1139.29, 1881046, 1122.33, 1141.89, 1122.005 -06/01/2018, 1119.5, 2416755, 1099.35, 1120, 1098.5 -05/31/2018, 1084.99, 3085325, 1067.56, 1097.19, 1067.56 -05/30/2018, 1067.8, 1129958, 1063.03, 1069.21, 1056.83 -05/29/2018, 1060.32, 1858676, 1064.89, 1073.37, 1055.22 -05/25/2018, 1075.66, 878903, 1079.02, 1082.56, 1073.775 -05/24/2018, 1079.24, 757752, 1079, 1080.47, 1066.15 -05/23/2018, 1079.69, 1057712, 1065.13, 1080.78, 1061.71 -05/22/2018, 1069.73, 1088700, 1083.56, 1086.59, 1066.69 -05/21/2018, 1079.58, 1012258, 1074.06, 1088, 1073.65 -05/18/2018, 1066.36, 1496448, 1061.86, 1069.94, 1060.68 -05/17/2018, 1078.59, 1031190, 1079.89, 1086.87, 1073.5 -05/16/2018, 1081.77, 989819, 1077.31, 1089.27, 1076.26 -05/15/2018, 1079.23, 1494306, 1090, 1090.05, 1073.47 -05/14/2018, 1100.2, 1450140, 1100, 1110.75, 1099.11 -05/11/2018, 1098.26, 1253205, 1093.6, 1101.3295, 1090.91 -05/10/2018, 1097.57, 1441456, 1086.03, 1100.44, 1085.64 -05/09/2018, 1082.76, 2032319, 1058.1, 1085.44, 1056.365 -05/08/2018, 1053.91, 1217260, 1058.54, 1060.55, 1047.145 -05/07/2018, 1054.79, 1464008, 1049.23, 1061.68, 1047.1 -05/04/2018, 1048.21, 1936797, 1016.9, 1048.51, 1016.9 -05/03/2018, 1023.72, 1813623, 1019, 1029.675, 1006.29 -05/02/2018, 1024.38, 1534094, 1028.1, 1040.389, 1022.87 -05/01/2018, 1037.31, 1427171, 1013.66, 1038.47, 1008.21 -04/30/2018, 1017.33, 1664084, 1030.01, 1037, 1016.85 -04/27/2018, 1030.05, 1617452, 1046, 1049.5, 1025.59 -04/26/2018, 1040.04, 1984448, 1029.51, 1047.98, 1018.19 -04/25/2018, 1021.18, 2225495, 1025.52, 1032.49, 1015.31 -04/24/2018, 1019.98, 4750851, 1052, 1057, 1010.59 -04/23/2018, 1067.45, 2278846, 1077.86, 1082.72, 1060.7 -04/20/2018, 1072.96, 1887698, 1082, 1092.35, 1069.57 -04/19/2018, 1087.7, 1741907, 1069.4, 1094.165, 1068.18 -04/18/2018, 1072.08, 1336678, 1077.43, 1077.43, 1066.225 -04/17/2018, 1074.16, 2311903, 1051.37, 1077.88, 1048.26 -04/16/2018, 1037.98, 1194144, 1037, 1043.24, 1026.74 -04/13/2018, 1029.27, 1175754, 1040.88, 1046.42, 1022.98 -04/12/2018, 1032.51, 1357599, 1025.04, 1040.69, 1021.4347 -04/11/2018, 1019.97, 1476133, 1027.99, 1031.3641, 1015.87 -04/10/2018, 1031.64, 1983510, 1026.44, 1036.28, 1011.34 -04/09/2018, 1015.45, 1738682, 1016.8, 1039.6, 1014.08 -04/06/2018, 1007.04, 1740896, 1020, 1031.42, 1003.03 -04/05/2018, 1027.81, 1345681, 1041.33, 1042.79, 1020.1311 -04/04/2018, 1025.14, 2464418, 993.41, 1028.7175, 993 -04/03/2018, 1013.41, 2271858, 1013.91, 1020.99, 994.07 -04/02/2018, 1006.47, 2679214, 1022.82, 1034.8, 990.37 -03/29/2018, 1031.79, 2714402, 1011.63, 1043, 1002.9 -03/28/2018, 1004.56, 3345046, 998, 1024.23, 980.64 -03/27/2018, 1005.1, 3081612, 1063, 1064.8393, 996.92 -03/26/2018, 1053.21, 2593808, 1046, 1055.63, 1008.4 -03/23/2018, 1021.57, 2147097, 1047.03, 1063.36, 1021.22 -03/22/2018, 1049.08, 2584639, 1081.88, 1082.9, 1045.91 -03/21/2018, 1090.88, 1878294, 1092.74, 1106.2999, 1085.15 -03/20/2018, 1097.71, 1802209, 1099, 1105.2, 1083.46 -03/19/2018, 1099.82, 2355186, 1120.01, 1121.99, 1089.01 -03/16/2018, 1135.73, 2614871, 1154.14, 1155.88, 1131.96 -03/15/2018, 1149.58, 1397767, 1149.96, 1161.08, 1134.54 -03/14/2018, 1149.49, 1290638, 1145.21, 1158.59, 1141.44 -03/13/2018, 1138.17, 1874176, 1170, 1176.76, 1133.33 -03/12/2018, 1164.5, 2106548, 1163.85, 1177.05, 1157.42 -03/09/2018, 1160.04, 2121425, 1136, 1160.8, 1132.4606 -03/08/2018, 1126, 1393529, 1115.32, 1127.6, 1112.8 -03/07/2018, 1109.64, 1277439, 1089.19, 1112.22, 1085.4823 -03/06/2018, 1095.06, 1497087, 1099.22, 1101.85, 1089.775 -03/05/2018, 1090.93, 1141932, 1075.14, 1097.1, 1069.0001 -03/02/2018, 1078.92, 2271394, 1053.08, 1081.9986, 1048.115 -03/01/2018, 1069.52, 2511872, 1107.87, 1110.12, 1067.001 -02/28/2018, 1104.73, 1873737, 1123.03, 1127.53, 1103.24 -02/27/2018, 1118.29, 1772866, 1141.24, 1144.04, 1118 -02/26/2018, 1143.75, 1514920, 1127.8, 1143.96, 1126.695 -02/23/2018, 1126.79, 1190432, 1112.64, 1127.28, 1104.7135 -02/22/2018, 1106.63, 1309536, 1116.19, 1122.82, 1102.59 -02/21/2018, 1111.34, 1507152, 1106.47, 1133.97, 1106.33 -02/20/2018, 1102.46, 1389491, 1090.57, 1113.95, 1088.52 -02/16/2018, 1094.8, 1680283, 1088.41, 1104.67, 1088.3134 -02/15/2018, 1089.52, 1785552, 1079.07, 1091.4794, 1064.34 -02/14/2018, 1069.7, 1547665, 1048.95, 1071.72, 1046.75 -02/13/2018, 1052.1, 1213800, 1045, 1058.37, 1044.0872 -02/12/2018, 1051.94, 2054002, 1048, 1061.5, 1040.928 -02/09/2018, 1037.78, 3503970, 1017.25, 1043.97, 992.56 -02/08/2018, 1001.52, 2809890, 1055.41, 1058.62, 1000.66 -02/07/2018, 1048.58, 2353003, 1081.54, 1081.78, 1048.26 -02/06/2018, 1080.6, 3432313, 1027.18, 1081.71, 1023.1367 -02/05/2018, 1055.8, 3769453, 1090.6, 1110, 1052.03 -02/02/2018, 1111.9, 4837979, 1122, 1123.07, 1107.2779 -02/01/2018, 1167.7, 2380221, 1162.61, 1174, 1157.52 -01/31/2018, 1169.94, 1523820, 1170.57, 1173, 1159.13 -01/30/2018, 1163.69, 1541771, 1167.83, 1176.52, 1163.52 -01/29/2018, 1175.58, 1337324, 1176.48, 1186.89, 1171.98 -01/26/2018, 1175.84, 1981173, 1175.08, 1175.84, 1158.11 -01/25/2018, 1170.37, 1461518, 1172.53, 1175.94, 1162.76 -01/24/2018, 1164.24, 1382904, 1177.33, 1179.86, 1161.05 -01/23/2018, 1169.97, 1309862, 1159.85, 1171.6266, 1158.75 -01/22/2018, 1155.81, 1616120, 1137.49, 1159.88, 1135.1101 -01/19/2018, 1137.51, 1390118, 1131.83, 1137.86, 1128.3 -01/18/2018, 1129.79, 1194943, 1131.41, 1132.51, 1117.5 -01/17/2018, 1131.98, 1200476, 1126.22, 1132.6, 1117.01 -01/16/2018, 1121.76, 1566662, 1132.51, 1139.91, 1117.8316 -01/12/2018, 1122.26, 1718491, 1102.41, 1124.29, 1101.15 -01/11/2018, 1105.52, 977727, 1106.3, 1106.525, 1099.59 -01/10/2018, 1102.61, 1042273, 1097.1, 1104.6, 1096.11 -01/09/2018, 1106.26, 900089, 1109.4, 1110.57, 1101.2307 -01/08/2018, 1106.94, 1046767, 1102.23, 1111.27, 1101.62 -01/05/2018, 1102.23, 1279990, 1094, 1104.25, 1092 -01/04/2018, 1086.4, 1002945, 1088, 1093.5699, 1084.0017 -01/03/2018, 1082.48, 1429757, 1064.31, 1086.29, 1063.21 -01/02/2018, 1065, 1236401, 1048.34, 1066.94, 1045.23 -12/29/2017, 1046.4, 886845, 1046.72, 1049.7, 1044.9 -12/28/2017, 1048.14, 833011, 1051.6, 1054.75, 1044.77 -12/27/2017, 1049.37, 1271780, 1057.39, 1058.37, 1048.05 -12/26/2017, 1056.74, 761097, 1058.07, 1060.12, 1050.2 -12/22/2017, 1060.12, 755089, 1061.11, 1064.2, 1059.44 -12/21/2017, 1063.63, 986548, 1064.95, 1069.33, 1061.7938 -12/20/2017, 1064.95, 1268285, 1071.78, 1073.38, 1061.52 -12/19/2017, 1070.68, 1307894, 1075.2, 1076.84, 1063.55 -12/18/2017, 1077.14, 1552016, 1066.08, 1078.49, 1062 -12/15/2017, 1064.19, 3275091, 1054.61, 1067.62, 1049.5 -12/14/2017, 1049.15, 1558684, 1045, 1058.5, 1043.11 -12/13/2017, 1040.61, 1220364, 1046.12, 1046.665, 1038.38 -12/12/2017, 1040.48, 1279511, 1039.63, 1050.31, 1033.6897 -12/11/2017, 1041.1, 1190527, 1035.5, 1043.8, 1032.0504 -12/08/2017, 1037.05, 1288419, 1037.49, 1042.05, 1032.5222 -12/07/2017, 1030.93, 1458145, 1020.43, 1034.24, 1018.071 -12/06/2017, 1018.38, 1258496, 1001.5, 1024.97, 1001.14 -12/05/2017, 1005.15, 2066247, 995.94, 1020.61, 988.28 -12/04/2017, 998.68, 1906058, 1012.66, 1016.1, 995.57 -12/01/2017, 1010.17, 1908962, 1015.8, 1022.4897, 1002.02 -11/30/2017, 1021.41, 1723003, 1022.37, 1028.4899, 1015 -11/29/2017, 1021.66, 2442974, 1042.68, 1044.08, 1015.65 -11/28/2017, 1047.41, 1421027, 1055.09, 1062.375, 1040 -11/27/2017, 1054.21, 1307471, 1040, 1055.46, 1038.44 -11/24/2017, 1040.61, 536996, 1035.87, 1043.178, 1035 -11/22/2017, 1035.96, 746351, 1035, 1039.706, 1031.43 -11/21/2017, 1034.49, 1096161, 1023.31, 1035.11, 1022.655 -11/20/2017, 1018.38, 898389, 1020.26, 1022.61, 1017.5 -11/17/2017, 1019.09, 1366936, 1034.01, 1034.42, 1017.75 -11/16/2017, 1032.5, 1129424, 1022.52, 1035.92, 1022.52 -11/15/2017, 1020.91, 847932, 1019.21, 1024.09, 1015.42 -11/14/2017, 1026, 958708, 1022.59, 1026.81, 1014.15 -11/13/2017, 1025.75, 885565, 1023.42, 1031.58, 1022.57 -11/10/2017, 1028.07, 720674, 1026.46, 1030.76, 1025.28 -11/09/2017, 1031.26, 1244701, 1033.99, 1033.99, 1019.6656 -11/08/2017, 1039.85, 1088395, 1030.52, 1043.522, 1028.45 -11/07/2017, 1033.33, 1112123, 1027.27, 1033.97, 1025.13 -11/06/2017, 1025.9, 1124757, 1028.99, 1034.87, 1025 -11/03/2017, 1032.48, 1075134, 1022.11, 1032.65, 1020.31 -11/02/2017, 1025.58, 1048584, 1021.76, 1028.09, 1013.01 -11/01/2017, 1025.5, 1371619, 1017.21, 1029.67, 1016.95 -10/31/2017, 1016.64, 1331265, 1015.22, 1024, 1010.42 -10/30/2017, 1017.11, 2083490, 1014, 1024.97, 1007.5 -10/27/2017, 1019.27, 5165922, 1009.19, 1048.39, 1008.2 -10/26/2017, 972.56, 2027218, 980, 987.6, 972.2 -10/25/2017, 973.33, 1210368, 968.37, 976.09, 960.5201 -10/24/2017, 970.54, 1206074, 970, 972.23, 961 -10/23/2017, 968.45, 1471544, 989.52, 989.52, 966.12 -10/20/2017, 988.2, 1176177, 989.44, 991, 984.58 -10/19/2017, 984.45, 1312706, 986, 988.88, 978.39 -10/18/2017, 992.81, 1057285, 991.77, 996.72, 986.9747 -10/17/2017, 992.18, 1290152, 990.29, 996.44, 988.59 -10/16/2017, 992, 910246, 992.1, 993.9065, 984 -10/13/2017, 989.68, 1169584, 992, 997.21, 989 -10/12/2017, 987.83, 1278357, 987.45, 994.12, 985 -10/11/2017, 989.25, 1692843, 973.72, 990.71, 972.25 -10/10/2017, 972.6, 968113, 980, 981.57, 966.0801 -10/09/2017, 977, 890620, 980, 985.425, 976.11 -10/06/2017, 978.89, 1146207, 966.7, 979.46, 963.36 -10/05/2017, 969.96, 1210427, 955.49, 970.91, 955.18 -10/04/2017, 951.68, 951766, 957, 960.39, 950.69 -10/03/2017, 957.79, 888303, 954, 958, 949.14 -10/02/2017, 953.27, 1282850, 959.98, 962.54, 947.84 -09/29/2017, 959.11, 1576365, 952, 959.7864, 951.51 -09/28/2017, 949.5, 997036, 941.36, 950.69, 940.55 -09/27/2017, 944.49, 2237538, 927.74, 949.9, 927.74 -09/26/2017, 924.86, 1666749, 923.72, 930.82, 921.14 -09/25/2017, 920.97, 1855742, 925.45, 926.4, 909.7 -09/22/2017, 928.53, 1052170, 927.75, 934.73, 926.48 -09/21/2017, 932.45, 1227059, 933, 936.53, 923.83 -09/20/2017, 931.58, 1535626, 922.98, 933.88, 922 -09/19/2017, 921.81, 912967, 917.42, 922.4199, 912.55 -09/18/2017, 915, 1300759, 920.01, 922.08, 910.6 -09/15/2017, 920.29, 2499466, 924.66, 926.49, 916.36 -09/14/2017, 925.11, 1395497, 931.25, 932.77, 924 -09/13/2017, 935.09, 1101145, 930.66, 937.25, 929.86 -09/12/2017, 932.07, 1133638, 932.59, 933.48, 923.861 -09/11/2017, 929.08, 1266020, 934.25, 938.38, 926.92 -09/08/2017, 926.5, 997699, 936.49, 936.99, 924.88 -09/07/2017, 935.95, 1211472, 931.73, 936.41, 923.62 -09/06/2017, 927.81, 1526209, 930.15, 930.915, 919.27 -09/05/2017, 928.45, 1346791, 933.08, 937, 921.96 -09/01/2017, 937.34, 943657, 941.13, 942.48, 935.15 -08/31/2017, 939.33, 1566888, 931.76, 941.98, 931.76 -08/30/2017, 929.57, 1300616, 920.05, 930.819, 919.65 -08/29/2017, 921.29, 1181391, 905.1, 923.33, 905 -08/28/2017, 913.81, 1085014, 916, 919.245, 911.87 -08/25/2017, 915.89, 1052764, 923.49, 925.555, 915.5 -08/24/2017, 921.28, 1266191, 928.66, 930.84, 915.5 -08/23/2017, 927, 1088575, 921.93, 929.93, 919.36 -08/22/2017, 924.69, 1166320, 912.72, 925.86, 911.4751 -08/21/2017, 906.66, 942328, 910, 913, 903.4 -08/18/2017, 910.67, 1341990, 910.31, 915.275, 907.1543 -08/17/2017, 910.98, 1241782, 925.78, 926.86, 910.98 -08/16/2017, 926.96, 1005261, 925.29, 932.7, 923.445 -08/15/2017, 922.22, 882479, 924.23, 926.5499, 919.82 -08/14/2017, 922.67, 1063404, 922.53, 924.668, 918.19 -08/11/2017, 914.39, 1205652, 907.97, 917.78, 905.58 -08/10/2017, 907.24, 1755521, 917.55, 919.26, 906.13 -08/09/2017, 922.9, 1191332, 920.61, 925.98, 917.2501 -08/08/2017, 926.79, 1057351, 927.09, 935.814, 925.6095 -08/07/2017, 929.36, 1031710, 929.06, 931.7, 926.5 -08/04/2017, 927.96, 1081814, 926.75, 930.3068, 923.03 -08/03/2017, 923.65, 1201519, 930.34, 932.24, 922.24 -08/02/2017, 930.39, 1822272, 928.61, 932.6, 916.68 -08/01/2017, 930.83, 1234612, 932.38, 937.447, 929.26 -07/31/2017, 930.5, 1964748, 941.89, 943.59, 926.04 -07/28/2017, 941.53, 1802343, 929.4, 943.83, 927.5 -07/27/2017, 934.09, 3128819, 951.78, 951.78, 920 -07/26/2017, 947.8, 2069349, 954.68, 955, 942.2788 -07/25/2017, 950.7, 4656609, 953.81, 959.7, 945.4 -07/24/2017, 980.34, 3205374, 972.22, 986.2, 970.77 -07/21/2017, 972.92, 1697190, 962.25, 973.23, 960.15 -07/20/2017, 968.15, 1620636, 975, 975.9, 961.51 -07/19/2017, 970.89, 1221155, 967.84, 973.04, 964.03 -07/18/2017, 965.4, 1152741, 953, 968.04, 950.6 -07/17/2017, 953.42, 1164141, 957, 960.74, 949.2407 -07/14/2017, 955.99, 1052855, 952, 956.91, 948.005 -07/13/2017, 947.16, 1294674, 946.29, 954.45, 943.01 -07/12/2017, 943.83, 1517168, 938.68, 946.3, 934.47 -07/11/2017, 930.09, 1112417, 929.54, 931.43, 922 -07/10/2017, 928.8, 1190237, 921.77, 930.38, 919.59 -07/07/2017, 918.59, 1590456, 908.85, 921.54, 908.85 -07/06/2017, 906.69, 1424290, 904.12, 914.9444, 899.7 -07/05/2017, 911.71, 1813309, 901.76, 914.51, 898.5 -07/03/2017, 898.7, 1710373, 912.18, 913.94, 894.79 -06/30/2017, 908.73, 2086340, 926.05, 926.05, 908.31 -06/29/2017, 917.79, 3287991, 929.92, 931.26, 910.62 -06/28/2017, 940.49, 2719213, 929, 942.75, 916 -06/27/2017, 927.33, 2566047, 942.46, 948.29, 926.85 -06/26/2017, 952.27, 1596664, 969.9, 973.31, 950.79 -06/23/2017, 965.59, 1527513, 956.83, 966, 954.2 -06/22/2017, 957.09, 941639, 958.7, 960.72, 954.55 -06/21/2017, 959.45, 1201971, 953.64, 960.1, 950.76 -06/20/2017, 950.63, 1125520, 957.52, 961.62, 950.01 -06/19/2017, 957.37, 1520715, 949.96, 959.99, 949.05 -06/16/2017, 939.78, 3061794, 940, 942.04, 931.595 -06/15/2017, 942.31, 2065271, 933.97, 943.339, 924.44 -06/14/2017, 950.76, 1487378, 959.92, 961.15, 942.25 -06/13/2017, 953.4, 2012980, 951.91, 959.98, 944.09 -06/12/2017, 942.9, 3762434, 939.56, 949.355, 915.2328 -06/09/2017, 949.83, 3305545, 984.5, 984.5, 935.63 -06/08/2017, 983.41, 1477151, 982.35, 984.57, 977.2 -06/07/2017, 981.08, 1447172, 979.65, 984.15, 975.77 -06/06/2017, 976.57, 1814323, 983.16, 988.25, 975.14 -06/05/2017, 983.68, 1251903, 976.55, 986.91, 975.1 -06/02/2017, 975.6, 1750723, 969.46, 975.88, 966 -06/01/2017, 966.95, 1408958, 968.95, 971.5, 960.01 -05/31/2017, 964.86, 2447176, 975.02, 979.27, 960.18 -05/30/2017, 975.88, 1466288, 970.31, 976.2, 969.49 -05/26/2017, 971.47, 1251425, 969.7, 974.98, 965.03 -05/25/2017, 969.54, 1659422, 957.33, 972.629, 955.47 -05/24/2017, 954.96, 1031408, 952.98, 955.09, 949.5 -05/23/2017, 948.82, 1269438, 947.92, 951.4666, 942.575 -05/22/2017, 941.86, 1118456, 935, 941.8828, 935 -05/19/2017, 934.01, 1389848, 931.47, 937.755, 931 -05/18/2017, 930.24, 1596058, 921, 933.17, 918.75 -05/17/2017, 919.62, 2357922, 935.67, 939.3325, 918.14 -05/16/2017, 943, 968288, 940, 943.11, 937.58 -05/15/2017, 937.08, 1104595, 932.95, 938.25, 929.34 -05/12/2017, 932.22, 1050377, 931.53, 933.44, 927.85 -05/11/2017, 930.6, 834997, 925.32, 932.53, 923.0301 -05/10/2017, 928.78, 1173887, 931.98, 932, 925.16 -05/09/2017, 932.17, 1581236, 936.95, 937.5, 929.53 -05/08/2017, 934.3, 1328885, 926.12, 936.925, 925.26 -05/05/2017, 927.13, 1910317, 933.54, 934.9, 925.2 -05/04/2017, 931.66, 1421938, 926.07, 935.93, 924.59 -05/03/2017, 927.04, 1497565, 914.86, 928.1, 912.5426 -05/02/2017, 916.44, 1543696, 909.62, 920.77, 909.4526 -05/01/2017, 912.57, 2114629, 901.94, 915.68, 901.45 -04/28/2017, 905.96, 3223850, 910.66, 916.85, 905.77 -04/27/2017, 874.25, 2009509, 873.6, 875.4, 870.38 -04/26/2017, 871.73, 1233724, 874.23, 876.05, 867.7481 -04/25/2017, 872.3, 1670095, 865, 875, 862.81 -04/24/2017, 862.76, 1371722, 851.2, 863.45, 849.86 -04/21/2017, 843.19, 1323364, 842.88, 843.88, 840.6 -04/20/2017, 841.65, 957994, 841.44, 845.2, 839.32 -04/19/2017, 838.21, 954324, 839.79, 842.22, 836.29 -04/18/2017, 836.82, 835433, 834.22, 838.93, 832.71 -04/17/2017, 837.17, 894540, 825.01, 837.75, 824.47 -04/13/2017, 823.56, 1118221, 822.14, 826.38, 821.44 -04/12/2017, 824.32, 900059, 821.93, 826.66, 821.02 -04/11/2017, 823.35, 1078951, 824.71, 827.4267, 817.0201 -04/10/2017, 824.73, 978825, 825.39, 829.35, 823.77 -04/07/2017, 824.67, 1056692, 827.96, 828.485, 820.5127 -04/06/2017, 827.88, 1254235, 832.4, 836.39, 826.46 -04/05/2017, 831.41, 1553163, 835.51, 842.45, 830.72 -04/04/2017, 834.57, 1044455, 831.36, 835.18, 829.0363 -04/03/2017, 838.55, 1670349, 829.22, 840.85, 829.22 -03/31/2017, 829.56, 1401756, 828.97, 831.64, 827.39 -03/30/2017, 831.5, 1055263, 833.5, 833.68, 829 -03/29/2017, 831.41, 1785006, 825, 832.765, 822.3801 -03/28/2017, 820.92, 1620532, 820.41, 825.99, 814.027 -03/27/2017, 819.51, 1894735, 806.95, 821.63, 803.37 -03/24/2017, 814.43, 1980415, 820.08, 821.93, 808.89 -03/23/2017, 817.58, 3485390, 821, 822.57, 812.257 -03/22/2017, 829.59, 1399409, 831.91, 835.55, 827.1801 -03/21/2017, 830.46, 2461375, 851.4, 853.5, 829.02 -03/20/2017, 848.4, 1217560, 850.01, 850.22, 845.15 -03/17/2017, 852.12, 1712397, 851.61, 853.4, 847.11 -03/16/2017, 848.78, 977384, 849.03, 850.85, 846.13 -03/15/2017, 847.2, 1381328, 847.59, 848.63, 840.77 -03/14/2017, 845.62, 779920, 843.64, 847.24, 840.8 -03/13/2017, 845.54, 1149928, 844, 848.685, 843.25 -03/10/2017, 843.25, 1702731, 843.28, 844.91, 839.5 -03/09/2017, 838.68, 1261393, 836, 842, 834.21 -03/08/2017, 835.37, 988900, 833.51, 838.15, 831.79 -03/07/2017, 831.91, 1037573, 827.4, 833.41, 826.52 -03/06/2017, 827.78, 1108799, 826.95, 828.88, 822.4 -03/03/2017, 829.08, 890640, 830.56, 831.36, 825.751 -03/02/2017, 830.63, 937824, 833.85, 834.51, 829.64 -03/01/2017, 835.24, 1495934, 828.85, 836.255, 827.26 -02/28/2017, 823.21, 2258695, 825.61, 828.54, 820.2 -02/27/2017, 829.28, 1101120, 824.55, 830.5, 824 -02/24/2017, 828.64, 1392039, 827.73, 829, 824.2 -02/23/2017, 831.33, 1471342, 830.12, 832.46, 822.88 -02/22/2017, 830.76, 983058, 828.66, 833.25, 828.64 -02/21/2017, 831.66, 1259841, 828.66, 833.45, 828.35 -02/17/2017, 828.07, 1602549, 823.02, 828.07, 821.655 -02/16/2017, 824.16, 1285919, 819.93, 824.4, 818.98 -02/15/2017, 818.98, 1311316, 819.36, 823, 818.47 -02/14/2017, 820.45, 1054472, 819, 823, 816 -02/13/2017, 819.24, 1205835, 816, 820.959, 815.49 -02/10/2017, 813.67, 1134701, 811.7, 815.25, 809.78 -02/09/2017, 809.56, 990260, 809.51, 810.66, 804.54 -02/08/2017, 808.38, 1155892, 807, 811.84, 803.1903 -02/07/2017, 806.97, 1240257, 803.99, 810.5, 801.78 -02/06/2017, 801.34, 1182882, 799.7, 801.67, 795.2501 -02/03/2017, 801.49, 1461217, 802.99, 806, 800.37 -02/02/2017, 798.53, 1530827, 793.8, 802.7, 792 -02/01/2017, 795.695, 2027708, 799.68, 801.19, 791.19 -01/31/2017, 796.79, 2153957, 796.86, 801.25, 790.52 -01/30/2017, 802.32, 3243568, 814.66, 815.84, 799.8 -01/27/2017, 823.31, 2964989, 834.71, 841.95, 820.44 -01/26/2017, 832.15, 2944642, 837.81, 838, 827.01 -01/25/2017, 835.67, 1612854, 829.62, 835.77, 825.06 -01/24/2017, 823.87, 1472228, 822.3, 825.9, 817.821 -01/23/2017, 819.31, 1962506, 807.25, 820.87, 803.74 -01/20/2017, 805.02, 1668638, 806.91, 806.91, 801.69 -01/19/2017, 802.175, 917085, 805.12, 809.48, 801.8 -01/18/2017, 806.07, 1293893, 805.81, 806.205, 800.99 -01/17/2017, 804.61, 1361935, 807.08, 807.14, 800.37 -01/13/2017, 807.88, 1098154, 807.48, 811.2244, 806.69 -01/12/2017, 806.36, 1352872, 807.14, 807.39, 799.17 -01/11/2017, 807.91, 1065360, 805, 808.15, 801.37 -01/10/2017, 804.79, 1176637, 807.86, 809.1299, 803.51 -01/09/2017, 806.65, 1274318, 806.4, 809.9664, 802.83 -01/06/2017, 806.15, 1639246, 795.26, 807.9, 792.2041 -01/05/2017, 794.02, 1334028, 786.08, 794.48, 785.02 -01/04/2017, 786.9, 1071198, 788.36, 791.34, 783.16 -01/03/2017, 786.14, 1657291, 778.81, 789.63, 775.8 -12/30/2016, 771.82, 1769809, 782.75, 782.78, 770.41 -12/29/2016, 782.79, 743808, 783.33, 785.93, 778.92 -12/28/2016, 785.05, 1142148, 793.7, 794.23, 783.2 -12/27/2016, 791.55, 789151, 790.68, 797.86, 787.657 -12/23/2016, 789.91, 623682, 790.9, 792.74, 787.28 -12/22/2016, 791.26, 972147, 792.36, 793.32, 788.58 -12/21/2016, 794.56, 1208770, 795.84, 796.6757, 787.1 -12/20/2016, 796.42, 950345, 796.76, 798.65, 793.27 -12/19/2016, 794.2, 1231966, 790.22, 797.66, 786.27 -12/16/2016, 790.8, 2435100, 800.4, 800.8558, 790.29 -12/15/2016, 797.85, 1623709, 797.34, 803, 792.92 -12/14/2016, 797.07, 1700875, 797.4, 804, 794.01 -12/13/2016, 796.1, 2122735, 793.9, 804.3799, 793.34 -12/12/2016, 789.27, 2102288, 785.04, 791.25, 784.3554 -12/09/2016, 789.29, 1821146, 780, 789.43, 779.021 -12/08/2016, 776.42, 1487517, 772.48, 778.18, 767.23 -12/07/2016, 771.19, 1757710, 761, 771.36, 755.8 -12/06/2016, 759.11, 1690365, 764.73, 768.83, 757.34 -12/05/2016, 762.52, 1393566, 757.71, 763.9, 752.9 -12/02/2016, 750.5, 1452181, 744.59, 754, 743.1 -12/01/2016, 747.92, 3017001, 757.44, 759.85, 737.0245 -11/30/2016, 758.04, 2386628, 770.07, 772.99, 754.83 -11/29/2016, 770.84, 1616427, 771.53, 778.5, 768.24 -11/28/2016, 768.24, 2177039, 760, 779.53, 759.8 -11/25/2016, 761.68, 587421, 764.26, 765, 760.52 -11/23/2016, 760.99, 1477501, 767.73, 768.2825, 755.25 -11/22/2016, 768.27, 1592372, 772.63, 776.96, 767 -11/21/2016, 769.2, 1324431, 762.61, 769.7, 760.6 -11/18/2016, 760.54, 1528555, 771.37, 775, 760 -11/17/2016, 771.23, 1298484, 766.92, 772.7, 764.23 -11/16/2016, 764.48, 1468196, 755.2, 766.36, 750.51 -11/15/2016, 758.49, 2375056, 746.97, 764.4162, 746.97 -11/14/2016, 736.08, 3644965, 755.6, 757.85, 727.54 -11/11/2016, 754.02, 2421889, 756.54, 760.78, 750.38 -11/10/2016, 762.56, 4733916, 791.17, 791.17, 752.18 -11/09/2016, 785.31, 2603860, 779.94, 791.2265, 771.67 -11/08/2016, 790.51, 1361472, 783.4, 795.633, 780.19 -11/07/2016, 782.52, 1574426, 774.5, 785.19, 772.55 -11/04/2016, 762.02, 2131948, 750.66, 770.36, 750.5611 -11/03/2016, 762.13, 1933937, 767.25, 769.95, 759.03 -11/02/2016, 768.7, 1905814, 778.2, 781.65, 763.4496 -11/01/2016, 783.61, 2404898, 782.89, 789.49, 775.54 -10/31/2016, 784.54, 2420892, 795.47, 796.86, 784 -10/28/2016, 795.37, 4261912, 808.35, 815.49, 793.59 -10/27/2016, 795.35, 2723097, 801, 803.49, 791.5 -10/26/2016, 799.07, 1645403, 806.34, 806.98, 796.32 -10/25/2016, 807.67, 1575020, 816.68, 816.68, 805.14 -10/24/2016, 813.11, 1693162, 804.9, 815.18, 804.82 -10/21/2016, 799.37, 1262042, 795, 799.5, 794 -10/20/2016, 796.97, 1755546, 803.3, 803.97, 796.03 -10/19/2016, 801.56, 1762990, 798.86, 804.63, 797.635 -10/18/2016, 795.26, 2046338, 787.85, 801.61, 785.565 -10/17/2016, 779.96, 1091524, 779.8, 785.85, 777.5 -10/14/2016, 778.53, 851512, 781.65, 783.95, 776 -10/13/2016, 778.19, 1360619, 781.22, 781.22, 773 -10/12/2016, 786.14, 935138, 783.76, 788.13, 782.06 -10/11/2016, 783.07, 1371461, 786.66, 792.28, 780.58 -10/10/2016, 785.94, 1161410, 777.71, 789.38, 775.87 -10/07/2016, 775.08, 932444, 779.66, 779.66, 770.75 -10/06/2016, 776.86, 1066910, 779, 780.48, 775.54 -10/05/2016, 776.47, 1457661, 779.31, 782.07, 775.65 -10/04/2016, 776.43, 1198361, 776.03, 778.71, 772.89 -10/03/2016, 772.56, 1276614, 774.25, 776.065, 769.5 -09/30/2016, 777.29, 1583293, 776.33, 780.94, 774.09 -09/29/2016, 775.01, 1310252, 781.44, 785.8, 774.232 -09/28/2016, 781.56, 1108249, 777.85, 781.81, 774.97 -09/27/2016, 783.01, 1152760, 775.5, 785.9899, 774.308 -09/26/2016, 774.21, 1531788, 782.74, 782.74, 773.07 -09/23/2016, 786.9, 1411439, 786.59, 788.93, 784.15 -09/22/2016, 787.21, 1483899, 780, 789.85, 778.44 -09/21/2016, 776.22, 1166290, 772.66, 777.16, 768.301 -09/20/2016, 771.41, 975434, 769, 773.33, 768.53 -09/19/2016, 765.7, 1171969, 772.42, 774, 764.4406 -09/16/2016, 768.88, 2047036, 769.75, 769.75, 764.66 -09/15/2016, 771.76, 1344945, 762.89, 773.8, 759.96 -09/14/2016, 762.49, 1093723, 759.61, 767.68, 759.11 -09/13/2016, 759.69, 1394158, 764.48, 766.2195, 755.8 -09/12/2016, 769.02, 1310493, 755.13, 770.29, 754.0001 -09/09/2016, 759.66, 1879903, 770.1, 773.245, 759.66 -09/08/2016, 775.32, 1268663, 778.59, 780.35, 773.58 -09/07/2016, 780.35, 893874, 780, 782.73, 776.2 -09/06/2016, 780.08, 1441864, 773.45, 782, 771 -09/02/2016, 771.46, 1070725, 773.01, 773.9199, 768.41 -09/01/2016, 768.78, 925019, 769.25, 771.02, 764.3 -08/31/2016, 767.05, 1247937, 767.01, 769.09, 765.38 -08/30/2016, 769.09, 1129932, 769.33, 774.466, 766.84 -08/29/2016, 772.15, 847537, 768.74, 774.99, 766.615 -08/26/2016, 769.54, 1164713, 769, 776.0799, 765.85 -08/25/2016, 769.41, 926856, 767, 771.89, 763.1846 -08/24/2016, 769.64, 1071569, 770.58, 774.5, 767.07 -08/23/2016, 772.08, 925356, 775.48, 776.44, 771.785 -08/22/2016, 772.15, 950417, 773.27, 774.54, 770.0502 -08/19/2016, 775.42, 860899, 775, 777.1, 773.13 -08/18/2016, 777.5, 718882, 780.01, 782.86, 777 -08/17/2016, 779.91, 921666, 777.32, 780.81, 773.53 -08/16/2016, 777.14, 1027836, 780.3, 780.98, 773.444 -08/15/2016, 782.44, 938183, 783.75, 787.49, 780.11 -08/12/2016, 783.22, 739761, 781.5, 783.395, 780.4 -08/11/2016, 784.85, 971742, 785, 789.75, 782.97 -08/10/2016, 784.68, 784559, 783.75, 786.8123, 782.778 -08/09/2016, 784.26, 1318457, 781.1, 788.94, 780.57 -08/08/2016, 781.76, 1106693, 782, 782.63, 778.091 -08/05/2016, 782.22, 1799478, 773.78, 783.04, 772.34 -08/04/2016, 771.61, 1139972, 772.22, 774.07, 768.795 -08/03/2016, 773.18, 1283186, 767.18, 773.21, 766.82 -08/02/2016, 771.07, 1782822, 768.69, 775.84, 767.85 -08/01/2016, 772.88, 2697699, 761.09, 780.43, 761.09 -07/29/2016, 768.79, 3830103, 772.71, 778.55, 766.77 -07/28/2016, 745.91, 3473040, 747.04, 748.65, 739.3 -07/27/2016, 741.77, 1509133, 738.28, 744.46, 737 -07/26/2016, 738.42, 1182993, 739.04, 741.69, 734.27 -07/25/2016, 739.77, 1031643, 740.67, 742.61, 737.5 -07/22/2016, 742.74, 1256741, 741.86, 743.24, 736.56 -07/21/2016, 738.63, 1022229, 740.36, 741.69, 735.831 -07/20/2016, 741.19, 1283931, 737.33, 742.13, 737.1 -07/19/2016, 736.96, 1225467, 729.89, 736.99, 729 -07/18/2016, 733.78, 1284740, 722.71, 736.13, 721.19 -07/15/2016, 719.85, 1277514, 725.73, 725.74, 719.055 -07/14/2016, 720.95, 949456, 721.58, 722.21, 718.03 -07/13/2016, 716.98, 933352, 723.62, 724, 716.85 -07/12/2016, 720.64, 1336112, 719.12, 722.94, 715.91 -07/11/2016, 715.09, 1107039, 708.05, 716.51, 707.24 -07/08/2016, 705.63, 1573909, 699.5, 705.71, 696.435 -07/07/2016, 695.36, 1303661, 698.08, 698.2, 688.215 -07/06/2016, 697.77, 1411080, 689.98, 701.68, 689.09 -07/05/2016, 694.49, 1462879, 696.06, 696.94, 688.88 -07/01/2016, 699.21, 1344387, 692.2, 700.65, 692.1301 -06/30/2016, 692.1, 1597298, 685.47, 692.32, 683.65 -06/29/2016, 684.11, 1931436, 683, 687.4292, 681.41 -06/28/2016, 680.04, 2169704, 678.97, 680.33, 673 -06/27/2016, 668.26, 2632011, 671, 672.3, 663.284 -06/24/2016, 675.22, 4442943, 675.17, 689.4, 673.45 -06/23/2016, 701.87, 2166183, 697.45, 701.95, 687 -06/22/2016, 697.46, 1182161, 699.06, 700.86, 693.0819 -06/21/2016, 695.94, 1464836, 698.4, 702.77, 692.01 -06/20/2016, 693.71, 2080645, 698.77, 702.48, 693.41 -06/17/2016, 691.72, 3397720, 708.65, 708.82, 688.4515 -06/16/2016, 710.36, 1981657, 714.91, 716.65, 703.26 -06/15/2016, 718.92, 1213386, 719, 722.98, 717.31 -06/14/2016, 718.27, 1303808, 716.48, 722.47, 713.12 -06/13/2016, 718.36, 1255199, 716.51, 725.44, 716.51 -06/10/2016, 719.41, 1213989, 719.47, 725.89, 716.43 -06/09/2016, 728.58, 987635, 722.87, 729.54, 722.3361 -06/08/2016, 728.28, 1583325, 723.96, 728.57, 720.58 -06/07/2016, 716.65, 1336348, 719.84, 721.98, 716.55 -06/06/2016, 716.55, 1565955, 724.91, 724.91, 714.61 -06/03/2016, 722.34, 1225924, 729.27, 729.49, 720.56 -06/02/2016, 730.4, 1340664, 732.5, 733.02, 724.17 -06/01/2016, 734.15, 1251468, 734.53, 737.21, 730.66 -05/31/2016, 735.72, 2128358, 731.74, 739.73, 731.26 -05/27/2016, 732.66, 1974425, 724.01, 733.936, 724 -05/26/2016, 724.12, 1573635, 722.87, 728.33, 720.28 -05/25/2016, 725.27, 1629790, 720.76, 727.51, 719.7047 -05/24/2016, 720.09, 1926828, 706.86, 720.97, 706.86 -05/23/2016, 704.24, 1326386, 706.53, 711.4781, 704.18 -05/20/2016, 709.74, 1825830, 701.62, 714.58, 700.52 -05/19/2016, 700.32, 1668887, 702.36, 706, 696.8 -05/18/2016, 706.63, 1765632, 703.67, 711.6, 700.63 -05/17/2016, 706.23, 1999883, 715.99, 721.52, 704.11 -05/16/2016, 716.49, 1316719, 709.13, 718.48, 705.65 -05/13/2016, 710.83, 1307559, 711.93, 716.6619, 709.26 -05/12/2016, 713.31, 1361170, 717.06, 719.25, 709 -05/11/2016, 715.29, 1690862, 723.41, 724.48, 712.8 -05/10/2016, 723.18, 1568621, 716.75, 723.5, 715.72 -05/09/2016, 712.9, 1509892, 712, 718.71, 710 -05/06/2016, 711.12, 1828508, 698.38, 711.86, 698.1067 -05/05/2016, 701.43, 1680220, 697.7, 702.3199, 695.72 -05/04/2016, 695.7, 1692757, 690.49, 699.75, 689.01 -05/03/2016, 692.36, 1541297, 696.87, 697.84, 692 -05/02/2016, 698.21, 1645013, 697.63, 700.64, 691 -04/29/2016, 693.01, 2486584, 690.7, 697.62, 689 -04/28/2016, 691.02, 2859790, 708.26, 714.17, 689.55 -04/27/2016, 705.84, 3094905, 707.29, 708.98, 692.3651 -04/26/2016, 708.14, 2739133, 725.42, 725.766, 703.0264 -04/25/2016, 723.15, 1956956, 716.1, 723.93, 715.59 -04/22/2016, 718.77, 5949699, 726.3, 736.12, 713.61 -04/21/2016, 759.14, 2995094, 755.38, 760.45, 749.55 -04/20/2016, 752.67, 1526776, 758, 758.1315, 750.01 -04/19/2016, 753.93, 2027962, 769.51, 769.9, 749.33 -04/18/2016, 766.61, 1557199, 760.46, 768.05, 757.3 -04/15/2016, 759, 1807062, 753.98, 761, 752.6938 -04/14/2016, 753.2, 1134056, 754.01, 757.31, 752.705 -04/13/2016, 751.72, 1707397, 749.16, 754.38, 744.261 -04/12/2016, 743.09, 1349780, 738, 743.83, 731.01 -04/11/2016, 736.1, 1218789, 743.02, 745, 736.05 -04/08/2016, 739.15, 1289869, 743.97, 745.45, 735.55 -04/07/2016, 740.28, 1452369, 745.37, 746.9999, 736.28 -04/06/2016, 745.69, 1052171, 735.77, 746.24, 735.56 -04/05/2016, 737.8, 1130817, 738, 742.8, 735.37 -04/04/2016, 745.29, 1134214, 750.06, 752.8, 742.43 -04/01/2016, 749.91, 1576240, 738.6, 750.34, 737 -03/31/2016, 744.95, 1718638, 749.25, 750.85, 740.94 -03/30/2016, 750.53, 1782278, 750.1, 757.88, 748.74 -03/29/2016, 744.77, 1902254, 734.59, 747.25, 728.76 -03/28/2016, 733.53, 1300817, 736.79, 738.99, 732.5 -03/24/2016, 735.3, 1570474, 732.01, 737.747, 731 -03/23/2016, 738.06, 1431130, 742.36, 745.7199, 736.15 -03/22/2016, 740.75, 1269263, 737.46, 745, 737.46 -03/21/2016, 742.09, 1835963, 736.5, 742.5, 733.5157 -03/18/2016, 737.6, 2982194, 741.86, 742, 731.83 -03/17/2016, 737.78, 1859562, 736.45, 743.07, 736 -03/16/2016, 736.09, 1621412, 726.37, 737.47, 724.51 -03/15/2016, 728.33, 1720790, 726.92, 732.29, 724.77 -03/14/2016, 730.49, 1717002, 726.81, 735.5, 725.15 -03/11/2016, 726.82, 1968164, 720, 726.92, 717.125 -03/10/2016, 712.82, 2830630, 708.12, 716.44, 703.36 -03/09/2016, 705.24, 1419661, 698.47, 705.68, 694 -03/08/2016, 693.97, 2075305, 688.59, 703.79, 685.34 -03/07/2016, 695.16, 2986064, 706.9, 708.0912, 686.9 -03/04/2016, 710.89, 1971379, 714.99, 716.49, 706.02 -03/03/2016, 712.42, 1956958, 718.68, 719.45, 706.02 -03/02/2016, 718.85, 1629501, 719, 720, 712 -03/01/2016, 718.81, 2148608, 703.62, 718.81, 699.77 -02/29/2016, 697.77, 2478214, 700.32, 710.89, 697.68 -02/26/2016, 705.07, 2241785, 708.58, 713.43, 700.86 -02/25/2016, 705.75, 1640430, 700.01, 705.98, 690.585 -02/24/2016, 699.56, 1961258, 688.92, 700, 680.78 -02/23/2016, 695.85, 2006572, 701.45, 708.4, 693.58 -02/22/2016, 706.46, 1949046, 707.45, 713.24, 702.51 -02/19/2016, 700.91, 1585152, 695.03, 703.0805, 694.05 -02/18/2016, 697.35, 1880306, 710, 712.35, 696.03 -02/17/2016, 708.4, 2490021, 699, 709.75, 691.38 -02/16/2016, 691, 2517324, 692.98, 698, 685.05 -02/12/2016, 682.4, 2138937, 690.26, 693.75, 678.6 -02/11/2016, 683.11, 3021587, 675, 689.35, 668.8675 -02/10/2016, 684.12, 2629130, 686.86, 701.31, 682.13 -02/09/2016, 678.11, 3605792, 672.32, 699.9, 668.77 -02/08/2016, 682.74, 4241416, 667.85, 684.03, 663.06 -02/05/2016, 683.57, 5098357, 703.87, 703.99, 680.15 -02/04/2016, 708.01, 5157988, 722.81, 727, 701.86 -02/03/2016, 726.95, 6166731, 770.22, 774.5, 720.5 -02/02/2016, 764.65, 6340548, 784.5, 789.8699, 764.65 -02/01/2016, 752, 5065235, 750.46, 757.86, 743.27 -01/29/2016, 742.95, 3464432, 731.53, 744.9899, 726.8 -01/28/2016, 730.96, 2664956, 722.22, 733.69, 712.35 -01/27/2016, 699.99, 2175913, 713.67, 718.235, 694.39 -01/26/2016, 713.04, 1329141, 713.85, 718.28, 706.48 -01/25/2016, 711.67, 1709777, 723.58, 729.68, 710.01 -01/22/2016, 725.25, 2009951, 723.6, 728.13, 720.121 -01/21/2016, 706.59, 2411079, 702.18, 719.19, 694.46 -01/20/2016, 698.45, 3441642, 688.61, 706.85, 673.26 -01/19/2016, 701.79, 2264747, 703.3, 709.98, 693.4101 -01/15/2016, 694.45, 3604137, 692.29, 706.74, 685.37 -01/14/2016, 714.72, 2225495, 705.38, 721.925, 689.1 -01/13/2016, 700.56, 2497086, 730.85, 734.74, 698.61 -01/12/2016, 726.07, 2010026, 721.68, 728.75, 717.3165 -01/11/2016, 716.03, 2089495, 716.61, 718.855, 703.54 -01/08/2016, 714.47, 2449420, 731.45, 733.23, 713 -01/07/2016, 726.39, 2960578, 730.31, 738.5, 719.06 -01/06/2016, 743.62, 1943685, 730, 747.18, 728.92 -01/05/2016, 742.58, 1949386, 746.45, 752, 738.64 -01/04/2016, 741.84, 3271348, 743, 744.06, 731.2577 -12/31/2015, 758.88, 1500129, 769.5, 769.5, 758.34 -12/30/2015, 771, 1293514, 776.6, 777.6, 766.9 -12/29/2015, 776.6, 1764044, 766.69, 779.98, 766.43 -12/28/2015, 762.51, 1515574, 752.92, 762.99, 749.52 -12/24/2015, 748.4, 527223, 749.55, 751.35, 746.62 -12/23/2015, 750.31, 1566723, 753.47, 754.21, 744 -12/22/2015, 750, 1365420, 751.65, 754.85, 745.53 -12/21/2015, 747.77, 1524535, 746.13, 750, 740 -12/18/2015, 739.31, 3140906, 746.51, 754.13, 738.15 -12/17/2015, 749.43, 1551087, 762.42, 762.68, 749 -12/16/2015, 758.09, 1986319, 750, 760.59, 739.435 -12/15/2015, 743.4, 2661199, 753, 758.08, 743.01 -12/14/2015, 747.77, 2417778, 741.79, 748.73, 724.17 -12/11/2015, 738.87, 2223284, 741.16, 745.71, 736.75 -12/10/2015, 749.46, 1988035, 752.85, 755.85, 743.83 -12/09/2015, 751.61, 2697978, 759.17, 764.23, 737.001 -12/08/2015, 762.37, 1829004, 757.89, 764.8, 754.2 -12/07/2015, 763.25, 1811336, 767.77, 768.73, 755.09 -12/04/2015, 766.81, 2756194, 753.1, 768.49, 750 -12/03/2015, 752.54, 2589641, 766.01, 768.995, 745.63 -12/02/2015, 762.38, 2196721, 768.9, 775.955, 758.96 -12/01/2015, 767.04, 2131827, 747.11, 768.95, 746.7 -11/30/2015, 742.6, 2045584, 748.81, 754.93, 741.27 -11/27/2015, 750.26, 838528, 748.46, 753.41, 747.49 -11/25/2015, 748.15, 1122224, 748.14, 752, 746.06 -11/24/2015, 748.28, 2333700, 752, 755.279, 737.63 -11/23/2015, 755.98, 1414640, 757.45, 762.7075, 751.82 -11/20/2015, 756.6, 2212934, 746.53, 757.92, 743 -11/19/2015, 738.41, 1327265, 738.74, 742, 737.43 -11/18/2015, 740, 1683978, 727.58, 741.41, 727 -11/17/2015, 725.3, 1507449, 729.29, 731.845, 723.027 -11/16/2015, 728.96, 1904395, 715.6, 729.49, 711.33 -11/13/2015, 717, 2072392, 729.17, 731.15, 716.73 -11/12/2015, 731.23, 1836567, 731, 737.8, 728.645 -11/11/2015, 735.4, 1366611, 732.46, 741, 730.23 -11/10/2015, 728.32, 1606499, 724.4, 730.59, 718.5001 -11/09/2015, 724.89, 2068920, 730.2, 734.71, 719.43 -11/06/2015, 733.76, 1510586, 731.5, 735.41, 727.01 -11/05/2015, 731.25, 1861100, 729.47, 739.48, 729.47 -11/04/2015, 728.11, 1705745, 722, 733.1, 721.9 -11/03/2015, 722.16, 1565355, 718.86, 724.65, 714.72 -11/02/2015, 721.11, 1885155, 711.06, 721.62, 705.85 -10/30/2015, 710.81, 1907732, 715.73, 718, 710.05 -10/29/2015, 716.92, 1455508, 710.5, 718.26, 710.01 -10/28/2015, 712.95, 2178841, 707.33, 712.98, 703.08 -10/27/2015, 708.49, 2232183, 707.38, 713.62, 704.55 -10/26/2015, 712.78, 2709292, 701.55, 719.15, 701.26 -10/23/2015, 702, 6651909, 727.5, 730, 701.5 -10/22/2015, 651.79, 3994360, 646.7, 657.8, 644.01 -10/21/2015, 642.61, 1792869, 654.15, 655.87, 641.73 -10/20/2015, 650.28, 2498077, 664.04, 664.7197, 644.195 -10/19/2015, 666.1, 1465691, 661.18, 666.82, 659.58 -10/16/2015, 662.2, 1610712, 664.11, 664.97, 657.2 -10/15/2015, 661.74, 1832832, 654.66, 663.13, 654.46 -10/14/2015, 651.16, 1413798, 653.21, 659.39, 648.85 -10/13/2015, 652.3, 1806003, 643.15, 657.8125, 643.15 -10/12/2015, 646.67, 1275565, 642.09, 648.5, 639.01 -10/09/2015, 643.61, 1648656, 640, 645.99, 635.318 -10/08/2015, 639.16, 2181990, 641.36, 644.45, 625.56 -10/07/2015, 642.36, 2092536, 649.24, 650.609, 632.15 -10/06/2015, 645.44, 2235078, 638.84, 649.25, 636.5295 -10/05/2015, 641.47, 1802263, 632, 643.01, 627 -10/02/2015, 626.91, 2681241, 607.2, 627.34, 603.13 -10/01/2015, 611.29, 1866223, 608.37, 612.09, 599.85 -09/30/2015, 608.42, 2412754, 603.28, 608.76, 600.73 -09/29/2015, 594.97, 2310065, 597.28, 605, 590.22 -09/28/2015, 594.89, 3118693, 610.34, 614.605, 589.38 -09/25/2015, 611.97, 2173134, 629.77, 629.77, 611 -09/24/2015, 625.8, 2238097, 616.64, 627.32, 612.4 -09/23/2015, 622.36, 1470633, 622.05, 628.93, 620 -09/22/2015, 622.69, 2561551, 627, 627.55, 615.43 -09/21/2015, 635.44, 1786543, 634.4, 636.49, 625.94 -09/18/2015, 629.25, 5123314, 636.79, 640, 627.02 -09/17/2015, 642.9, 2259404, 637.79, 650.9, 635.02 -09/16/2015, 635.98, 1276250, 635.47, 637.95, 632.32 -09/15/2015, 635.14, 2082426, 626.7, 638.7, 623.78 -09/14/2015, 623.24, 1701618, 625.7, 625.86, 619.43 -09/11/2015, 625.77, 1372803, 619.75, 625.78, 617.42 -09/10/2015, 621.35, 1903334, 613.1, 624.16, 611.43 -09/09/2015, 612.72, 1699686, 621.22, 626.52, 609.6 -09/08/2015, 614.66, 2277487, 612.49, 616.31, 604.12 -09/04/2015, 600.7, 2087028, 600, 603.47, 595.25 -09/03/2015, 606.25, 1757851, 617, 619.71, 602.8213 -09/02/2015, 614.34, 2573982, 605.59, 614.34, 599.71 -09/01/2015, 597.79, 3699844, 602.36, 612.86, 594.1 -08/31/2015, 618.25, 2172168, 627.54, 635.8, 617.68 -08/28/2015, 630.38, 1975818, 632.82, 636.88, 624.56 -08/27/2015, 637.61, 3485906, 639.4, 643.59, 622 -08/26/2015, 628.62, 4187276, 610.35, 631.71, 599.05 -08/25/2015, 582.06, 3521916, 614.91, 617.45, 581.11 -08/24/2015, 589.61, 5727282, 573, 614, 565.05 -08/21/2015, 612.48, 4261666, 639.78, 640.05, 612.33 -08/20/2015, 646.83, 2854028, 655.46, 662.99, 642.9 -08/19/2015, 660.9, 2132265, 656.6, 667, 654.19 -08/18/2015, 656.13, 1455664, 661.9, 664, 653.46 -08/17/2015, 660.87, 1050553, 656.8, 661.38, 651.24 -08/14/2015, 657.12, 1071333, 655.01, 659.855, 652.66 -08/13/2015, 656.45, 1807182, 659.323, 664.5, 651.661 -08/12/2015, 659.56, 2938651, 663.08, 665, 652.29 -08/11/2015, 660.78, 5016425, 669.2, 674.9, 654.27 -08/10/2015, 633.73, 1653836, 639.48, 643.44, 631.249 -08/07/2015, 635.3, 1403441, 640.23, 642.68, 629.71 -08/06/2015, 642.68, 1572150, 645, 645.379, 632.25 -08/05/2015, 643.78, 2331720, 634.33, 647.86, 633.16 -08/04/2015, 629.25, 1486858, 628.42, 634.81, 627.16 -08/03/2015, 631.21, 1301439, 625.34, 633.0556, 625.34 -07/31/2015, 625.61, 1705286, 631.38, 632.91, 625.5 -07/30/2015, 632.59, 1472286, 630, 635.22, 622.05 -07/29/2015, 631.93, 1573146, 628.8, 633.36, 622.65 -07/28/2015, 628, 1713684, 632.83, 632.83, 623.31 -07/27/2015, 627.26, 2673801, 621, 634.3, 620.5 -07/24/2015, 623.56, 3622089, 647, 648.17, 622.52 -07/23/2015, 644.28, 3014035, 661.27, 663.63, 641 -07/22/2015, 662.1, 3707818, 660.89, 678.64, 659 -07/21/2015, 662.3, 3363342, 655.21, 673, 654.3 -07/20/2015, 663.02, 5857092, 659.24, 668.88, 653.01 -07/17/2015, 672.93, 11153500, 649, 674.468, 645 -07/16/2015, 579.85, 4559712, 565.12, 580.68, 565 -07/15/2015, 560.22, 1782264, 560.13, 566.5029, 556.79 -07/14/2015, 561.1, 3231284, 546.76, 565.8487, 546.71 -07/13/2015, 546.55, 2204610, 532.88, 547.11, 532.4001 -07/10/2015, 530.13, 1954951, 526.29, 532.56, 525.55 -07/09/2015, 520.68, 1840155, 523.12, 523.77, 520.35 -07/08/2015, 516.83, 1293372, 521.05, 522.734, 516.11 -07/07/2015, 525.02, 1595672, 523.13, 526.18, 515.18 -07/06/2015, 522.86, 1278587, 519.5, 525.25, 519 -07/02/2015, 523.4, 1235773, 521.08, 524.65, 521.08 -07/01/2015, 521.84, 1961197, 524.73, 525.69, 518.2305 -06/30/2015, 520.51, 2234284, 526.02, 526.25, 520.5 -06/29/2015, 521.52, 1935361, 525.01, 528.61, 520.54 -06/26/2015, 531.69, 2108629, 537.26, 537.76, 531.35 -06/25/2015, 535.23, 1332412, 538.87, 540.9, 535.23 -06/24/2015, 537.84, 1286576, 540, 540, 535.66 -06/23/2015, 540.48, 1196115, 539.64, 541.499, 535.25 -06/22/2015, 538.19, 1243535, 539.59, 543.74, 537.53 -06/19/2015, 536.69, 1890916, 537.21, 538.25, 533.01 -06/18/2015, 536.73, 1832450, 531, 538.15, 530.79 -06/17/2015, 529.26, 1269113, 529.37, 530.98, 525.1 -06/16/2015, 528.15, 1071728, 528.4, 529.6399, 525.56 -06/15/2015, 527.2, 1632675, 528, 528.3, 524 -06/12/2015, 532.33, 955489, 531.6, 533.12, 530.16 -06/11/2015, 534.61, 1208632, 538.425, 538.98, 533.02 -06/10/2015, 536.69, 1813775, 529.36, 538.36, 529.35 -06/09/2015, 526.69, 1454172, 527.56, 529.2, 523.01 -06/08/2015, 526.83, 1523960, 533.31, 534.12, 526.24 -06/05/2015, 533.33, 1375008, 536.35, 537.2, 532.52 -06/04/2015, 536.7, 1346044, 537.76, 540.59, 534.32 -06/03/2015, 540.31, 1716836, 539.91, 543.5, 537.11 -06/02/2015, 539.18, 1936721, 532.93, 543, 531.33 -06/01/2015, 533.99, 1900257, 536.79, 536.79, 529.76 -05/29/2015, 532.11, 2590445, 537.37, 538.63, 531.45 -05/28/2015, 539.78, 1029764, 538.01, 540.61, 536.25 -05/27/2015, 539.79, 1524783, 532.8, 540.55, 531.71 -05/26/2015, 532.32, 2404462, 538.12, 539, 529.88 -05/22/2015, 540.11, 1175065, 540.15, 544.19, 539.51 -05/21/2015, 542.51, 1461431, 537.95, 543.8399, 535.98 -05/20/2015, 539.27, 1430565, 538.49, 542.92, 532.972 -05/19/2015, 537.36, 1964037, 533.98, 540.66, 533.04 -05/18/2015, 532.3, 2001117, 532.01, 534.82, 528.85 -05/15/2015, 533.85, 1965088, 539.18, 539.2743, 530.38 -05/14/2015, 538.4, 1401005, 533.77, 539, 532.41 -05/13/2015, 529.62, 1253005, 530.56, 534.3215, 528.655 -05/12/2015, 529.04, 1633180, 531.6, 533.2089, 525.26 -05/11/2015, 535.7, 904465, 538.37, 541.98, 535.4 -05/08/2015, 538.22, 1527181, 536.65, 541.15, 536 -05/07/2015, 530.7, 1543986, 523.99, 533.46, 521.75 -05/06/2015, 524.22, 1566865, 531.24, 532.38, 521.085 -05/05/2015, 530.8, 1380519, 538.21, 539.74, 530.3906 -05/04/2015, 540.78, 1303830, 538.53, 544.07, 535.06 -05/01/2015, 537.9, 1758085, 538.43, 539.54, 532.1 -04/30/2015, 537.34, 2080834, 547.87, 548.59, 535.05 -04/29/2015, 549.08, 1696886, 550.47, 553.68, 546.905 -04/28/2015, 553.68, 1490735, 554.64, 556.02, 550.366 -04/27/2015, 555.37, 2390696, 563.39, 565.95, 553.2001 diff --git a/machine_learning/mfcc.py b/machine_learning/mfcc.py deleted file mode 100644 index dcc3151d5a1a..000000000000 --- a/machine_learning/mfcc.py +++ /dev/null @@ -1,479 +0,0 @@ -""" -Mel Frequency Cepstral Coefficients (MFCC) Calculation - -MFCC is an algorithm widely used in audio and speech processing to represent the -short-term power spectrum of a sound signal in a more compact and -discriminative way. It is particularly popular in speech and audio processing -tasks such as speech recognition and speaker identification. - -How Mel Frequency Cepstral Coefficients are Calculated: -1. Preprocessing: - - Load an audio signal and normalize it to ensure that the values fall - within a specific range (e.g., between -1 and 1). - - Frame the audio signal into overlapping, fixed-length segments, typically - using a technique like windowing to reduce spectral leakage. - -2. Fourier Transform: - - Apply a Fast Fourier Transform (FFT) to each audio frame to convert it - from the time domain to the frequency domain. This results in a - representation of the audio frame as a sequence of frequency components. - -3. Power Spectrum: - - Calculate the power spectrum by taking the squared magnitude of each - frequency component obtained from the FFT. This step measures the energy - distribution across different frequency bands. - -4. Mel Filterbank: - - Apply a set of triangular filterbanks spaced in the Mel frequency scale - to the power spectrum. These filters mimic the human auditory system's - frequency response. Each filterbank sums the power spectrum values within - its band. - -5. Logarithmic Compression: - - Take the logarithm (typically base 10) of the filterbank values to - compress the dynamic range. This step mimics the logarithmic response of - the human ear to sound intensity. - -6. Discrete Cosine Transform (DCT): - - Apply the Discrete Cosine Transform to the log filterbank energies to - obtain the MFCC coefficients. This transformation helps decorrelate the - filterbank energies and captures the most important features of the audio - signal. - -7. Feature Extraction: - - Select a subset of the DCT coefficients to form the feature vector. - Often, the first few coefficients (e.g., 12-13) are used for most - applications. - -References: -- Mel-Frequency Cepstral Coefficients (MFCCs): - https://en.wikipedia.org/wiki/Mel-frequency_cepstrum -- Speech and Language Processing by Daniel Jurafsky & James H. Martin: - https://web.stanford.edu/~jurafsky/slp3/ -- Mel Frequency Cepstral Coefficient (MFCC) tutorial - http://practicalcryptography.com/miscellaneous/machine-learning - /guide-mel-frequency-cepstral-coefficients-mfccs/ - -Author: Amir Lavasani -""" - -import logging - -import numpy as np -import scipy.fftpack as fft -from scipy.signal import get_window - -logging.basicConfig(filename=f"{__file__}.log", level=logging.INFO) - - -def mfcc( - audio: np.ndarray, - sample_rate: int, - ftt_size: int = 1024, - hop_length: int = 20, - mel_filter_num: int = 10, - dct_filter_num: int = 40, -) -> np.ndarray: - """ - Calculate Mel Frequency Cepstral Coefficients (MFCCs) from an audio signal. - - Args: - audio: The input audio signal. - sample_rate: The sample rate of the audio signal (in Hz). - ftt_size: The size of the FFT window (default is 1024). - hop_length: The hop length for frame creation (default is 20ms). - mel_filter_num: The number of Mel filters (default is 10). - dct_filter_num: The number of DCT filters (default is 40). - - Returns: - A matrix of MFCCs for the input audio. - - Raises: - ValueError: If the input audio is empty. - - Example: - >>> sample_rate = 44100 # Sample rate of 44.1 kHz - >>> duration = 2.0 # Duration of 1 second - >>> t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False) - >>> audio = 0.5 * np.sin(2 * np.pi * 440.0 * t) # Generate a 440 Hz sine wave - >>> mfccs = mfcc(audio, sample_rate) - >>> mfccs.shape - (40, 101) - """ - logging.info(f"Sample rate: {sample_rate}Hz") - logging.info(f"Audio duration: {len(audio) / sample_rate}s") - logging.info(f"Audio min: {np.min(audio)}") - logging.info(f"Audio max: {np.max(audio)}") - - # normalize audio - audio_normalized = normalize(audio) - - logging.info(f"Normalized audio min: {np.min(audio_normalized)}") - logging.info(f"Normalized audio max: {np.max(audio_normalized)}") - - # frame audio into - audio_framed = audio_frames( - audio_normalized, sample_rate, ftt_size=ftt_size, hop_length=hop_length - ) - - logging.info(f"Framed audio shape: {audio_framed.shape}") - logging.info(f"First frame: {audio_framed[0]}") - - # convert to frequency domain - # For simplicity we will choose the Hanning window. - window = get_window("hann", ftt_size, fftbins=True) - audio_windowed = audio_framed * window - - logging.info(f"Windowed audio shape: {audio_windowed.shape}") - logging.info(f"First frame: {audio_windowed[0]}") - - audio_fft = calculate_fft(audio_windowed, ftt_size) - logging.info(f"fft audio shape: {audio_fft.shape}") - logging.info(f"First frame: {audio_fft[0]}") - - audio_power = calculate_signal_power(audio_fft) - logging.info(f"power audio shape: {audio_power.shape}") - logging.info(f"First frame: {audio_power[0]}") - - filters = mel_spaced_filterbank(sample_rate, mel_filter_num, ftt_size) - logging.info(f"filters shape: {filters.shape}") - - audio_filtered = np.dot(filters, np.transpose(audio_power)) - audio_log = 10.0 * np.log10(audio_filtered) - logging.info(f"audio_log shape: {audio_log.shape}") - - dct_filters = discrete_cosine_transform(dct_filter_num, mel_filter_num) - cepstral_coefficents = np.dot(dct_filters, audio_log) - - logging.info(f"cepstral_coefficents shape: {cepstral_coefficents.shape}") - return cepstral_coefficents - - -def normalize(audio: np.ndarray) -> np.ndarray: - """ - Normalize an audio signal by scaling it to have values between -1 and 1. - - Args: - audio: The input audio signal. - - Returns: - The normalized audio signal. - - Examples: - >>> audio = np.array([1, 2, 3, 4, 5]) - >>> normalized_audio = normalize(audio) - >>> float(np.max(normalized_audio)) - 1.0 - >>> float(np.min(normalized_audio)) - 0.2 - """ - # Divide the entire audio signal by the maximum absolute value - return audio / np.max(np.abs(audio)) - - -def audio_frames( - audio: np.ndarray, - sample_rate: int, - hop_length: int = 20, - ftt_size: int = 1024, -) -> np.ndarray: - """ - Split an audio signal into overlapping frames. - - Args: - audio: The input audio signal. - sample_rate: The sample rate of the audio signal. - hop_length: The length of the hopping (default is 20ms). - ftt_size: The size of the FFT window (default is 1024). - - Returns: - An array of overlapping frames. - - Examples: - >>> audio = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]*1000) - >>> sample_rate = 8000 - >>> frames = audio_frames(audio, sample_rate, hop_length=10, ftt_size=512) - >>> frames.shape - (126, 512) - """ - - hop_size = np.round(sample_rate * hop_length / 1000).astype(int) - - # Pad the audio signal to handle edge cases - audio = np.pad(audio, int(ftt_size / 2), mode="reflect") - - # Calculate the number of frames - frame_count = int((len(audio) - ftt_size) / hop_size) + 1 - - # Initialize an array to store the frames - frames = np.zeros((frame_count, ftt_size)) - - # Split the audio signal into frames - for n in range(frame_count): - frames[n] = audio[n * hop_size : n * hop_size + ftt_size] - - return frames - - -def calculate_fft(audio_windowed: np.ndarray, ftt_size: int = 1024) -> np.ndarray: - """ - Calculate the Fast Fourier Transform (FFT) of windowed audio data. - - Args: - audio_windowed: The windowed audio signal. - ftt_size: The size of the FFT (default is 1024). - - Returns: - The FFT of the audio data. - - Examples: - >>> audio_windowed = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) - >>> audio_fft = calculate_fft(audio_windowed, ftt_size=4) - >>> bool(np.allclose(audio_fft[0], np.array([6.0+0.j, -1.5+0.8660254j, - ... -1.5-0.8660254j]))) - True - """ - # Transpose the audio data to have time in rows and channels in columns - audio_transposed = np.transpose(audio_windowed) - - # Initialize an array to store the FFT results - audio_fft = np.empty( - (int(1 + ftt_size // 2), audio_transposed.shape[1]), - dtype=np.complex64, - order="F", - ) - - # Compute FFT for each channel - for n in range(audio_fft.shape[1]): - audio_fft[:, n] = fft.fft(audio_transposed[:, n], axis=0)[: audio_fft.shape[0]] - - # Transpose the FFT results back to the original shape - return np.transpose(audio_fft) - - -def calculate_signal_power(audio_fft: np.ndarray) -> np.ndarray: - """ - Calculate the power of the audio signal from its FFT. - - Args: - audio_fft: The FFT of the audio signal. - - Returns: - The power of the audio signal. - - Examples: - >>> audio_fft = np.array([1+2j, 2+3j, 3+4j, 4+5j]) - >>> power = calculate_signal_power(audio_fft) - >>> np.allclose(power, np.array([5, 13, 25, 41])) - True - """ - # Calculate the power by squaring the absolute values of the FFT coefficients - return np.square(np.abs(audio_fft)) - - -def freq_to_mel(freq: float) -> float: - """ - Convert a frequency in Hertz to the mel scale. - - Args: - freq: The frequency in Hertz. - - Returns: - The frequency in mel scale. - - Examples: - >>> float(round(freq_to_mel(1000), 2)) - 999.99 - """ - # Use the formula to convert frequency to the mel scale - return 2595.0 * np.log10(1.0 + freq / 700.0) - - -def mel_to_freq(mels: float) -> float: - """ - Convert a frequency in the mel scale to Hertz. - - Args: - mels: The frequency in mel scale. - - Returns: - The frequency in Hertz. - - Examples: - >>> round(mel_to_freq(999.99), 2) - 1000.01 - """ - # Use the formula to convert mel scale to frequency - return 700.0 * (10.0 ** (mels / 2595.0) - 1.0) - - -def mel_spaced_filterbank( - sample_rate: int, mel_filter_num: int = 10, ftt_size: int = 1024 -) -> np.ndarray: - """ - Create a Mel-spaced filter bank for audio processing. - - Args: - sample_rate: The sample rate of the audio. - mel_filter_num: The number of mel filters (default is 10). - ftt_size: The size of the FFT (default is 1024). - - Returns: - Mel-spaced filter bank. - - Examples: - >>> float(round(mel_spaced_filterbank(8000, 10, 1024)[0][1], 10)) - 0.0004603981 - """ - freq_min = 0 - freq_high = sample_rate // 2 - - logging.info(f"Minimum frequency: {freq_min}") - logging.info(f"Maximum frequency: {freq_high}") - - # Calculate filter points and mel frequencies - filter_points, mel_freqs = get_filter_points( - sample_rate, - freq_min, - freq_high, - mel_filter_num, - ftt_size, - ) - - filters = get_filters(filter_points, ftt_size) - - # normalize filters - # taken from the librosa library - enorm = 2.0 / (mel_freqs[2 : mel_filter_num + 2] - mel_freqs[:mel_filter_num]) - return filters * enorm[:, np.newaxis] - - -def get_filters(filter_points: np.ndarray, ftt_size: int) -> np.ndarray: - """ - Generate filters for audio processing. - - Args: - filter_points: A list of filter points. - ftt_size: The size of the FFT. - - Returns: - A matrix of filters. - - Examples: - >>> get_filters(np.array([0, 20, 51, 95, 161, 256], dtype=int), 512).shape - (4, 257) - """ - num_filters = len(filter_points) - 2 - filters = np.zeros((num_filters, int(ftt_size / 2) + 1)) - - for n in range(num_filters): - start = filter_points[n] - mid = filter_points[n + 1] - end = filter_points[n + 2] - - # Linearly increase values from 0 to 1 - filters[n, start:mid] = np.linspace(0, 1, mid - start) - - # Linearly decrease values from 1 to 0 - filters[n, mid:end] = np.linspace(1, 0, end - mid) - - return filters - - -def get_filter_points( - sample_rate: int, - freq_min: int, - freq_high: int, - mel_filter_num: int = 10, - ftt_size: int = 1024, -) -> tuple[np.ndarray, np.ndarray]: - """ - Calculate the filter points and frequencies for mel frequency filters. - - Args: - sample_rate: The sample rate of the audio. - freq_min: The minimum frequency in Hertz. - freq_high: The maximum frequency in Hertz. - mel_filter_num: The number of mel filters (default is 10). - ftt_size: The size of the FFT (default is 1024). - - Returns: - Filter points and corresponding frequencies. - - Examples: - >>> filter_points = get_filter_points(8000, 0, 4000, mel_filter_num=4, ftt_size=512) - >>> filter_points[0] - array([ 0, 20, 51, 95, 161, 256]) - >>> filter_points[1] - array([ 0. , 324.46707094, 799.33254207, 1494.30973963, - 2511.42581671, 4000. ]) - """ - # Convert minimum and maximum frequencies to mel scale - fmin_mel = freq_to_mel(freq_min) - fmax_mel = freq_to_mel(freq_high) - - logging.info(f"MEL min: {fmin_mel}") - logging.info(f"MEL max: {fmax_mel}") - - # Generate equally spaced mel frequencies - mels = np.linspace(fmin_mel, fmax_mel, num=mel_filter_num + 2) - - # Convert mel frequencies back to Hertz - freqs = mel_to_freq(mels) - - # Calculate filter points as integer values - filter_points = np.floor((ftt_size + 1) / sample_rate * freqs).astype(int) - - return filter_points, freqs - - -def discrete_cosine_transform(dct_filter_num: int, filter_num: int) -> np.ndarray: - """ - Compute the Discrete Cosine Transform (DCT) basis matrix. - - Args: - dct_filter_num: The number of DCT filters to generate. - filter_num: The number of the fbank filters. - - Returns: - The DCT basis matrix. - - Examples: - >>> float(round(discrete_cosine_transform(3, 5)[0][0], 5)) - 0.44721 - """ - basis = np.empty((dct_filter_num, filter_num)) - basis[0, :] = 1.0 / np.sqrt(filter_num) - - samples = np.arange(1, 2 * filter_num, 2) * np.pi / (2.0 * filter_num) - - for i in range(1, dct_filter_num): - basis[i, :] = np.cos(i * samples) * np.sqrt(2.0 / filter_num) - - return basis - - -def example(wav_file_path: str = "./path-to-file/sample.wav") -> np.ndarray: - """ - Example function to calculate Mel Frequency Cepstral Coefficients - (MFCCs) from an audio file. - - Args: - wav_file_path: The path to the WAV audio file. - - Returns: - np.ndarray: The computed MFCCs for the audio. - """ - from scipy.io import wavfile - - # Load the audio from the WAV file - sample_rate, audio = wavfile.read(wav_file_path) - - # Calculate MFCCs - return mfcc(audio, sample_rate) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/multilayer_perceptron_classifier.py b/machine_learning/multilayer_perceptron_classifier.py deleted file mode 100644 index 40f998c7dfa2..000000000000 --- a/machine_learning/multilayer_perceptron_classifier.py +++ /dev/null @@ -1,29 +0,0 @@ -from sklearn.neural_network import MLPClassifier - -X = [[0.0, 0.0], [1.0, 1.0], [1.0, 0.0], [0.0, 1.0]] -y = [0, 1, 0, 0] - - -clf = MLPClassifier( - solver="lbfgs", alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1 -) - -clf.fit(X, y) - - -test = [[0.0, 0.0], [0.0, 1.0], [1.0, 1.0]] -Y = clf.predict(test) - - -def wrapper(y): - """ - >>> [int(x) for x in wrapper(Y)] - [0, 0, 1] - """ - return list(y) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/polynomial_regression.py b/machine_learning/polynomial_regression.py deleted file mode 100644 index 212f40bea197..000000000000 --- a/machine_learning/polynomial_regression.py +++ /dev/null @@ -1,213 +0,0 @@ -""" -Polynomial regression is a type of regression analysis that models the relationship -between a predictor x and the response y as an mth-degree polynomial: - -y = β₀ + β₁x + β₂x² + ... + βₘxᵐ + ε - -By treating x, x², ..., xᵐ as distinct variables, we see that polynomial regression is a -special case of multiple linear regression. Therefore, we can use ordinary least squares -(OLS) estimation to estimate the vector of model parameters β = (β₀, β₁, β₂, ..., βₘ) -for polynomial regression: - -β = (XᵀX)⁻¹Xᵀy = X⁺y - -where X is the design matrix, y is the response vector, and X⁺ denotes the Moore-Penrose -pseudoinverse of X. In the case of polynomial regression, the design matrix is - - |1 x₁ x₁² ⋯ x₁ᵐ| -X = |1 x₂ x₂² ⋯ x₂ᵐ| - |⋮ ⋮ ⋮ ⋱ ⋮ | - |1 xₙ xₙ² ⋯ xₙᵐ| - -In OLS estimation, inverting XᵀX to compute X⁺ can be very numerically unstable. This -implementation sidesteps this need to invert XᵀX by computing X⁺ using singular value -decomposition (SVD): - -β = VΣ⁺Uᵀy - -where UΣVᵀ is an SVD of X. - -References: - - https://en.wikipedia.org/wiki/Polynomial_regression - - https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse - - https://en.wikipedia.org/wiki/Numerical_methods_for_linear_least_squares - - https://en.wikipedia.org/wiki/Singular_value_decomposition -""" - -import matplotlib.pyplot as plt -import numpy as np - - -class PolynomialRegression: - __slots__ = "degree", "params" - - def __init__(self, degree: int) -> None: - """ - @raises ValueError: if the polynomial degree is negative - """ - if degree < 0: - raise ValueError("Polynomial degree must be non-negative") - - self.degree = degree - self.params = None - - @staticmethod - def _design_matrix(data: np.ndarray, degree: int) -> np.ndarray: - """ - Constructs a polynomial regression design matrix for the given input data. For - input data x = (x₁, x₂, ..., xₙ) and polynomial degree m, the design matrix is - the Vandermonde matrix - - |1 x₁ x₁² ⋯ x₁ᵐ| - X = |1 x₂ x₂² ⋯ x₂ᵐ| - |⋮ ⋮ ⋮ ⋱ ⋮ | - |1 xₙ xₙ² ⋯ xₙᵐ| - - Reference: https://en.wikipedia.org/wiki/Vandermonde_matrix - - @param data: the input predictor values x, either for model fitting or for - prediction - @param degree: the polynomial degree m - @returns: the Vandermonde matrix X (see above) - @raises ValueError: if input data is not N x 1 - - >>> x = np.array([0, 1, 2]) - >>> PolynomialRegression._design_matrix(x, degree=0) - array([[1], - [1], - [1]]) - >>> PolynomialRegression._design_matrix(x, degree=1) - array([[1, 0], - [1, 1], - [1, 2]]) - >>> PolynomialRegression._design_matrix(x, degree=2) - array([[1, 0, 0], - [1, 1, 1], - [1, 2, 4]]) - >>> PolynomialRegression._design_matrix(x, degree=3) - array([[1, 0, 0, 0], - [1, 1, 1, 1], - [1, 2, 4, 8]]) - >>> PolynomialRegression._design_matrix(np.array([[0, 0], [0 , 0]]), degree=3) - Traceback (most recent call last): - ... - ValueError: Data must have dimensions N x 1 - """ - rows, *remaining = data.shape - if remaining: - raise ValueError("Data must have dimensions N x 1") - - return np.vander(data, N=degree + 1, increasing=True) - - def fit(self, x_train: np.ndarray, y_train: np.ndarray) -> None: - """ - Computes the polynomial regression model parameters using ordinary least squares - (OLS) estimation: - - β = (XᵀX)⁻¹Xᵀy = X⁺y - - where X⁺ denotes the Moore-Penrose pseudoinverse of the design matrix X. This - function computes X⁺ using singular value decomposition (SVD). - - References: - - https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse - - https://en.wikipedia.org/wiki/Singular_value_decomposition - - https://en.wikipedia.org/wiki/Multicollinearity - - @param x_train: the predictor values x for model fitting - @param y_train: the response values y for model fitting - @raises ArithmeticError: if X isn't full rank, then XᵀX is singular and β - doesn't exist - - >>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) - >>> y = x**3 - 2 * x**2 + 3 * x - 5 - >>> poly_reg = PolynomialRegression(degree=3) - >>> poly_reg.fit(x, y) - >>> poly_reg.params - array([-5., 3., -2., 1.]) - >>> poly_reg = PolynomialRegression(degree=20) - >>> poly_reg.fit(x, y) - Traceback (most recent call last): - ... - ArithmeticError: Design matrix is not full rank, can't compute coefficients - - Make sure errors don't grow too large: - >>> coefs = np.array([-250, 50, -2, 36, 20, -12, 10, 2, -1, -15, 1]) - >>> y = PolynomialRegression._design_matrix(x, len(coefs) - 1) @ coefs - >>> poly_reg = PolynomialRegression(degree=len(coefs) - 1) - >>> poly_reg.fit(x, y) - >>> np.allclose(poly_reg.params, coefs, atol=10e-3) - True - """ - X = PolynomialRegression._design_matrix(x_train, self.degree) # noqa: N806 - _, cols = X.shape - if np.linalg.matrix_rank(X) < cols: - raise ArithmeticError( - "Design matrix is not full rank, can't compute coefficients" - ) - - # np.linalg.pinv() computes the Moore-Penrose pseudoinverse using SVD - self.params = np.linalg.pinv(X) @ y_train - - def predict(self, data: np.ndarray) -> np.ndarray: - """ - Computes the predicted response values y for the given input data by - constructing the design matrix X and evaluating y = Xβ. - - @param data: the predictor values x for prediction - @returns: the predicted response values y = Xβ - @raises ArithmeticError: if this function is called before the model - parameters are fit - - >>> x = np.array([0, 1, 2, 3, 4]) - >>> y = x**3 - 2 * x**2 + 3 * x - 5 - >>> poly_reg = PolynomialRegression(degree=3) - >>> poly_reg.fit(x, y) - >>> poly_reg.predict(np.array([-1])) - array([-11.]) - >>> poly_reg.predict(np.array([-2])) - array([-27.]) - >>> poly_reg.predict(np.array([6])) - array([157.]) - >>> PolynomialRegression(degree=3).predict(x) - Traceback (most recent call last): - ... - ArithmeticError: Predictor hasn't been fit yet - """ - if self.params is None: - raise ArithmeticError("Predictor hasn't been fit yet") - - return PolynomialRegression._design_matrix(data, self.degree) @ self.params - - -def main() -> None: - """ - Fit a polynomial regression model to predict fuel efficiency using seaborn's mpg - dataset - - >>> pass # Placeholder, function is only for demo purposes - """ - import seaborn as sns - - mpg_data = sns.load_dataset("mpg") - - poly_reg = PolynomialRegression(degree=2) - poly_reg.fit(mpg_data.weight, mpg_data.mpg) - - weight_sorted = np.sort(mpg_data.weight) - predictions = poly_reg.predict(weight_sorted) - - plt.scatter(mpg_data.weight, mpg_data.mpg, color="gray", alpha=0.5) - plt.plot(weight_sorted, predictions, color="red", linewidth=3) - plt.title("Predicting Fuel Efficiency Using Polynomial Regression") - plt.xlabel("Weight (lbs)") - plt.ylabel("Fuel Efficiency (mpg)") - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - main() diff --git a/machine_learning/random_forest_classifier.py.broken.txt b/machine_learning/random_forest_classifier.py.broken.txt deleted file mode 100644 index 3267fa209660..000000000000 --- a/machine_learning/random_forest_classifier.py.broken.txt +++ /dev/null @@ -1,44 +0,0 @@ -# Random Forest Classifier Example -from matplotlib import pyplot as plt -from sklearn.datasets import load_iris -from sklearn.ensemble import RandomForestClassifier -from sklearn.metrics import plot_confusion_matrix -from sklearn.model_selection import train_test_split - - -def main(): - - """ - Random Forest Classifier Example using sklearn function. - Iris type dataset is used to demonstrate algorithm. - """ - - # Load Iris dataset - iris = load_iris() - - # Split dataset into train and test data - x = iris["data"] # features - y = iris["target"] - x_train, x_test, y_train, y_test = train_test_split( - x, y, test_size=0.3, random_state=1 - ) - - # Random Forest Classifier - rand_for = RandomForestClassifier(random_state=42, n_estimators=100) - rand_for.fit(x_train, y_train) - - # Display Confusion Matrix of Classifier - plot_confusion_matrix( - rand_for, - x_test, - y_test, - display_labels=iris["target_names"], - cmap="Blues", - normalize="true", - ) - plt.title("Normalized Confusion Matrix - IRIS Dataset") - plt.show() - - -if __name__ == "__main__": - main() diff --git a/machine_learning/random_forest_regressor.py.broken.txt b/machine_learning/random_forest_regressor.py.broken.txt deleted file mode 100644 index 1001931a109d..000000000000 --- a/machine_learning/random_forest_regressor.py.broken.txt +++ /dev/null @@ -1,40 +0,0 @@ -# Random Forest Regressor Example -from sklearn.datasets import load_boston -from sklearn.ensemble import RandomForestRegressor -from sklearn.metrics import mean_absolute_error, mean_squared_error -from sklearn.model_selection import train_test_split - - -def main(): - - """ - Random Forest Regressor Example using sklearn function. - Boston house price dataset is used to demonstrate the algorithm. - """ - - # Load Boston house price dataset - boston = load_boston() - print(boston.keys()) - - # Split dataset into train and test data - x = boston["data"] # features - y = boston["target"] - x_train, x_test, y_train, y_test = train_test_split( - x, y, test_size=0.3, random_state=1 - ) - - # Random Forest Regressor - rand_for = RandomForestRegressor(random_state=42, n_estimators=300) - rand_for.fit(x_train, y_train) - - # Predict target for test data - predictions = rand_for.predict(x_test) - predictions = predictions.reshape(len(predictions), 1) - - # Error printing - print(f"Mean Absolute Error:\t {mean_absolute_error(y_test, predictions)}") - print(f"Mean Square Error :\t {mean_squared_error(y_test, predictions)}") - - -if __name__ == "__main__": - main() diff --git a/machine_learning/scoring_functions.py b/machine_learning/scoring_functions.py deleted file mode 100644 index f6b685f4f98a..000000000000 --- a/machine_learning/scoring_functions.py +++ /dev/null @@ -1,139 +0,0 @@ -import numpy as np - -""" Here I implemented the scoring functions. - MAE, MSE, RMSE, RMSLE are included. - - Those are used for calculating differences between - predicted values and actual values. - - Metrics are slightly differentiated. Sometimes squared, rooted, - even log is used. - - Using log and roots can be perceived as tools for penalizing big - errors. However, using appropriate metrics depends on the situations, - and types of data -""" - - -# Mean Absolute Error -def mae(predict, actual): - """ - Examples(rounded for precision): - >>> actual = [1,2,3];predict = [1,4,3] - >>> float(np.around(mae(predict,actual),decimals = 2)) - 0.67 - - >>> actual = [1,1,1];predict = [1,1,1] - >>> float(mae(predict,actual)) - 0.0 - """ - predict = np.array(predict) - actual = np.array(actual) - - difference = abs(predict - actual) - score = difference.mean() - - return score - - -# Mean Squared Error -def mse(predict, actual): - """ - Examples(rounded for precision): - >>> actual = [1,2,3];predict = [1,4,3] - >>> float(np.around(mse(predict,actual),decimals = 2)) - 1.33 - - >>> actual = [1,1,1];predict = [1,1,1] - >>> float(mse(predict,actual)) - 0.0 - """ - predict = np.array(predict) - actual = np.array(actual) - - difference = predict - actual - square_diff = np.square(difference) - - score = square_diff.mean() - return score - - -# Root Mean Squared Error -def rmse(predict, actual): - """ - Examples(rounded for precision): - >>> actual = [1,2,3];predict = [1,4,3] - >>> float(np.around(rmse(predict,actual),decimals = 2)) - 1.15 - - >>> actual = [1,1,1];predict = [1,1,1] - >>> float(rmse(predict,actual)) - 0.0 - """ - predict = np.array(predict) - actual = np.array(actual) - - difference = predict - actual - square_diff = np.square(difference) - mean_square_diff = square_diff.mean() - score = np.sqrt(mean_square_diff) - return score - - -# Root Mean Square Logarithmic Error -def rmsle(predict, actual): - """ - Examples(rounded for precision): - >>> float(np.around(rmsle(predict=[10, 2, 30], actual=[10, 10, 30]), decimals=2)) - 0.75 - - >>> float(rmsle(predict=[1, 1, 1], actual=[1, 1, 1])) - 0.0 - """ - predict = np.array(predict) - actual = np.array(actual) - - log_predict = np.log(predict + 1) - log_actual = np.log(actual + 1) - - difference = log_predict - log_actual - square_diff = np.square(difference) - mean_square_diff = square_diff.mean() - - score = np.sqrt(mean_square_diff) - - return score - - -# Mean Bias Deviation -def mbd(predict, actual): - """ - This value is Negative, if the model underpredicts, - positive, if it overpredicts. - - Example(rounded for precision): - - Here the model overpredicts - >>> actual = [1,2,3];predict = [2,3,4] - >>> float(np.around(mbd(predict,actual),decimals = 2)) - 50.0 - - Here the model underpredicts - >>> actual = [1,2,3];predict = [0,1,1] - >>> float(np.around(mbd(predict,actual),decimals = 2)) - -66.67 - """ - predict = np.array(predict) - actual = np.array(actual) - - difference = predict - actual - numerator = np.sum(difference) / len(predict) - denumerator = np.sum(actual) / len(predict) - # print(numerator, denumerator) - score = float(numerator) / denumerator * 100 - - return score - - -def manual_accuracy(predict, actual): - return np.mean(np.array(actual) == np.array(predict)) diff --git a/machine_learning/self_organizing_map.py b/machine_learning/self_organizing_map.py deleted file mode 100644 index fb9d0074e791..000000000000 --- a/machine_learning/self_organizing_map.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Self-organizing_map -""" - -import math - - -class SelfOrganizingMap: - def get_winner(self, weights: list[list[float]], sample: list[int]) -> int: - """ - Compute the winning vector by Euclidean distance - - >>> SelfOrganizingMap().get_winner([[1, 2, 3], [4, 5, 6]], [1, 2, 3]) - 1 - """ - d0 = 0.0 - d1 = 0.0 - for i in range(len(sample)): - d0 += math.pow((sample[i] - weights[0][i]), 2) - d1 += math.pow((sample[i] - weights[1][i]), 2) - return 0 if d0 > d1 else 1 - return 0 - - def update( - self, weights: list[list[int | float]], sample: list[int], j: int, alpha: float - ) -> list[list[int | float]]: - """ - Update the winning vector. - - >>> SelfOrganizingMap().update([[1, 2, 3], [4, 5, 6]], [1, 2, 3], 1, 0.1) - [[1, 2, 3], [3.7, 4.7, 6]] - """ - for i in range(len(weights)): - weights[j][i] += alpha * (sample[i] - weights[j][i]) - return weights - - -# Driver code -def main() -> None: - # Training Examples ( m, n ) - training_samples = [[1, 1, 0, 0], [0, 0, 0, 1], [1, 0, 0, 0], [0, 0, 1, 1]] - - # weight initialization ( n, C ) - weights = [[0.2, 0.6, 0.5, 0.9], [0.8, 0.4, 0.7, 0.3]] - - # training - self_organizing_map = SelfOrganizingMap() - epochs = 3 - alpha = 0.5 - - for _ in range(epochs): - for j in range(len(training_samples)): - # training sample - sample = training_samples[j] - - # Compute the winning vector - winner = self_organizing_map.get_winner(weights, sample) - - # Update the winning vector - weights = self_organizing_map.update(weights, sample, winner, alpha) - - # classify test sample - sample = [0, 0, 0, 1] - winner = self_organizing_map.get_winner(weights, sample) - - # results - print(f"Clusters that the test sample belongs to : {winner}") - print(f"Weights that have been trained : {weights}") - - -# running the main() function -if __name__ == "__main__": - main() diff --git a/machine_learning/sequential_minimum_optimization.py b/machine_learning/sequential_minimum_optimization.py deleted file mode 100644 index 625fc28fe60c..000000000000 --- a/machine_learning/sequential_minimum_optimization.py +++ /dev/null @@ -1,622 +0,0 @@ -""" -Sequential minimal optimization (SMO) for support vector machines (SVM) - -Sequential minimal optimization (SMO) is an algorithm for solving the quadratic -programming (QP) problem that arises during the training of SVMs. It was invented by -John Platt in 1998. - -Input: - 0: type: numpy.ndarray. - 1: first column of ndarray must be tags of samples, must be 1 or -1. - 2: rows of ndarray represent samples. - -Usage: - Command: - python3 sequential_minimum_optimization.py - Code: - from sequential_minimum_optimization import SmoSVM, Kernel - - kernel = Kernel(kernel='poly', degree=3., coef0=1., gamma=0.5) - init_alphas = np.zeros(train.shape[0]) - SVM = SmoSVM(train=train, alpha_list=init_alphas, kernel_func=kernel, cost=0.4, - b=0.0, tolerance=0.001) - SVM.fit() - predict = SVM.predict(test_samples) - -Reference: - https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/smo-book.pdf - https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-98-14.pdf -""" - -import os -import sys -import urllib.request - -import numpy as np -import pandas as pd -from matplotlib import pyplot as plt -from sklearn.datasets import make_blobs, make_circles -from sklearn.preprocessing import StandardScaler - -CANCER_DATASET_URL = ( - "https://archive.ics.uci.edu/ml/machine-learning-databases/" - "breast-cancer-wisconsin/wdbc.data" -) - - -class SmoSVM: - def __init__( - self, - train, - kernel_func, - alpha_list=None, - cost=0.4, - b=0.0, - tolerance=0.001, - auto_norm=True, - ): - self._init = True - self._auto_norm = auto_norm - self._c = np.float64(cost) - self._b = np.float64(b) - self._tol = np.float64(tolerance) if tolerance > 0.0001 else np.float64(0.001) - - self.tags = train[:, 0] - self.samples = self._norm(train[:, 1:]) if self._auto_norm else train[:, 1:] - self.alphas = alpha_list if alpha_list is not None else np.zeros(train.shape[0]) - self.Kernel = kernel_func - - self._eps = 0.001 - self._all_samples = list(range(self.length)) - self._K_matrix = self._calculate_k_matrix() - self._error = np.zeros(self.length) - self._unbound = [] - - self.choose_alpha = self._choose_alphas() - - # Calculate alphas using SMO algorithm - def fit(self): - k = self._k - state = None - while True: - # 1: Find alpha1, alpha2 - try: - i1, i2 = self.choose_alpha.send(state) - state = None - except StopIteration: - print("Optimization done!\nEvery sample satisfy the KKT condition!") - break - - # 2: calculate new alpha2 and new alpha1 - y1, y2 = self.tags[i1], self.tags[i2] - a1, a2 = self.alphas[i1].copy(), self.alphas[i2].copy() - e1, e2 = self._e(i1), self._e(i2) - args = (i1, i2, a1, a2, e1, e2, y1, y2) - a1_new, a2_new = self._get_new_alpha(*args) - if not a1_new and not a2_new: - state = False - continue - self.alphas[i1], self.alphas[i2] = a1_new, a2_new - - # 3: update threshold(b) - b1_new = np.float64( - -e1 - - y1 * k(i1, i1) * (a1_new - a1) - - y2 * k(i2, i1) * (a2_new - a2) - + self._b - ) - b2_new = np.float64( - -e2 - - y2 * k(i2, i2) * (a2_new - a2) - - y1 * k(i1, i2) * (a1_new - a1) - + self._b - ) - if 0.0 < a1_new < self._c: - b = b1_new - if 0.0 < a2_new < self._c: - b = b2_new - if not (np.float64(0) < a2_new < self._c) and not ( - np.float64(0) < a1_new < self._c - ): - b = (b1_new + b2_new) / 2.0 - b_old = self._b - self._b = b - - # 4: update error, here we only calculate the error for non-bound samples - self._unbound = [i for i in self._all_samples if self._is_unbound(i)] - for s in self.unbound: - if s in (i1, i2): - continue - self._error[s] += ( - y1 * (a1_new - a1) * k(i1, s) - + y2 * (a2_new - a2) * k(i2, s) - + (self._b - b_old) - ) - - # if i1 or i2 is non-bound, update their error value to zero - if self._is_unbound(i1): - self._error[i1] = 0 - if self._is_unbound(i2): - self._error[i2] = 0 - - # Predict test samples - def predict(self, test_samples, classify=True): - if test_samples.shape[1] > self.samples.shape[1]: - raise ValueError( - "Test samples' feature length does not equal to that of train samples" - ) - - if self._auto_norm: - test_samples = self._norm(test_samples) - - results = [] - for test_sample in test_samples: - result = self._predict(test_sample) - if classify: - results.append(1 if result > 0 else -1) - else: - results.append(result) - return np.array(results) - - # Check if alpha violates the KKT condition - def _check_obey_kkt(self, index): - alphas = self.alphas - tol = self._tol - r = self._e(index) * self.tags[index] - c = self._c - - return (r < -tol and alphas[index] < c) or (r > tol and alphas[index] > 0.0) - - # Get value calculated from kernel function - def _k(self, i1, i2): - # for test samples, use kernel function - if isinstance(i2, np.ndarray): - return self.Kernel(self.samples[i1], i2) - # for training samples, kernel values have been saved in matrix - else: - return self._K_matrix[i1, i2] - - # Get error for sample - def _e(self, index): - """ - Two cases: - 1: Sample[index] is non-bound, fetch error from list: _error - 2: sample[index] is bound, use predicted value minus true value: g(xi) - yi - """ - # get from error data - if self._is_unbound(index): - return self._error[index] - # get by g(xi) - yi - else: - gx = np.dot(self.alphas * self.tags, self._K_matrix[:, index]) + self._b - yi = self.tags[index] - return gx - yi - - # Calculate kernel matrix of all possible i1, i2, saving time - def _calculate_k_matrix(self): - k_matrix = np.zeros([self.length, self.length]) - for i in self._all_samples: - for j in self._all_samples: - k_matrix[i, j] = np.float64( - self.Kernel(self.samples[i, :], self.samples[j, :]) - ) - return k_matrix - - # Predict tag for test sample - def _predict(self, sample): - k = self._k - predicted_value = ( - np.sum( - [ - self.alphas[i1] * self.tags[i1] * k(i1, sample) - for i1 in self._all_samples - ] - ) - + self._b - ) - return predicted_value - - # Choose alpha1 and alpha2 - def _choose_alphas(self): - loci = yield from self._choose_a1() - if not loci: - return None - return loci - - def _choose_a1(self): - """ - Choose first alpha - Steps: - 1: First loop over all samples - 2: Second loop over all non-bound samples until no non-bound samples violate - the KKT condition. - 3: Repeat these two processes until no samples violate the KKT condition - after the first loop. - """ - while True: - all_not_obey = True - # all sample - print("Scanning all samples!") - for i1 in [i for i in self._all_samples if self._check_obey_kkt(i)]: - all_not_obey = False - yield from self._choose_a2(i1) - - # non-bound sample - print("Scanning non-bound samples!") - while True: - not_obey = True - for i1 in [ - i - for i in self._all_samples - if self._check_obey_kkt(i) and self._is_unbound(i) - ]: - not_obey = False - yield from self._choose_a2(i1) - if not_obey: - print("All non-bound samples satisfy the KKT condition!") - break - if all_not_obey: - print("All samples satisfy the KKT condition!") - break - return False - - def _choose_a2(self, i1): - """ - Choose the second alpha using a heuristic algorithm - Steps: - 1: Choose alpha2 that maximizes the step size (|E1 - E2|). - 2: Start in a random point, loop over all non-bound samples till alpha1 and - alpha2 are optimized. - 3: Start in a random point, loop over all samples till alpha1 and alpha2 are - optimized. - """ - self._unbound = [i for i in self._all_samples if self._is_unbound(i)] - - if len(self.unbound) > 0: - tmp_error = self._error.copy().tolist() - tmp_error_dict = { - index: value - for index, value in enumerate(tmp_error) - if self._is_unbound(index) - } - if self._e(i1) >= 0: - i2 = min(tmp_error_dict, key=lambda index: tmp_error_dict[index]) - else: - i2 = max(tmp_error_dict, key=lambda index: tmp_error_dict[index]) - cmd = yield i1, i2 - if cmd is None: - return - - rng = np.random.default_rng() - for i2 in np.roll(self.unbound, rng.choice(self.length)): - cmd = yield i1, i2 - if cmd is None: - return - - for i2 in np.roll(self._all_samples, rng.choice(self.length)): - cmd = yield i1, i2 - if cmd is None: - return - - # Get the new alpha2 and new alpha1 - def _get_new_alpha(self, i1, i2, a1, a2, e1, e2, y1, y2): - k = self._k - if i1 == i2: - return None, None - - # calculate L and H which bound the new alpha2 - s = y1 * y2 - if s == -1: - l, h = max(0.0, a2 - a1), min(self._c, self._c + a2 - a1) # noqa: E741 - else: - l, h = max(0.0, a2 + a1 - self._c), min(self._c, a2 + a1) # noqa: E741 - if l == h: - return None, None - - # calculate eta - k11 = k(i1, i1) - k22 = k(i2, i2) - k12 = k(i1, i2) - - # select the new alpha2 which could achieve the minimal objectives - if (eta := k11 + k22 - 2.0 * k12) > 0.0: - a2_new_unc = a2 + (y2 * (e1 - e2)) / eta - # a2_new has a boundary - if a2_new_unc >= h: - a2_new = h - elif a2_new_unc <= l: - a2_new = l - else: - a2_new = a2_new_unc - else: - b = self._b - l1 = a1 + s * (a2 - l) - h1 = a1 + s * (a2 - h) - - # Method 1 - f1 = y1 * (e1 + b) - a1 * k(i1, i1) - s * a2 * k(i1, i2) - f2 = y2 * (e2 + b) - a2 * k(i2, i2) - s * a1 * k(i1, i2) - ol = ( - l1 * f1 - + l * f2 - + 1 / 2 * l1**2 * k(i1, i1) - + 1 / 2 * l**2 * k(i2, i2) - + s * l * l1 * k(i1, i2) - ) - oh = ( - h1 * f1 - + h * f2 - + 1 / 2 * h1**2 * k(i1, i1) - + 1 / 2 * h**2 * k(i2, i2) - + s * h * h1 * k(i1, i2) - ) - """ - Method 2: Use objective function to check which alpha2_new could achieve the - minimal objectives - """ - if ol < (oh - self._eps): - a2_new = l - elif ol > oh + self._eps: - a2_new = h - else: - a2_new = a2 - - # a1_new has a boundary too - a1_new = a1 + s * (a2 - a2_new) - if a1_new < 0: - a2_new += s * a1_new - a1_new = 0 - if a1_new > self._c: - a2_new += s * (a1_new - self._c) - a1_new = self._c - - return a1_new, a2_new - - # Normalize data using min-max method - def _norm(self, data): - if self._init: - self._min = np.min(data, axis=0) - self._max = np.max(data, axis=0) - self._init = False - return (data - self._min) / (self._max - self._min) - else: - return (data - self._min) / (self._max - self._min) - - def _is_unbound(self, index): - return bool(0.0 < self.alphas[index] < self._c) - - def _is_support(self, index): - return bool(self.alphas[index] > 0) - - @property - def unbound(self): - return self._unbound - - @property - def support(self): - return [i for i in range(self.length) if self._is_support(i)] - - @property - def length(self): - return self.samples.shape[0] - - -class Kernel: - def __init__(self, kernel, degree=1.0, coef0=0.0, gamma=1.0): - self.degree = np.float64(degree) - self.coef0 = np.float64(coef0) - self.gamma = np.float64(gamma) - self._kernel_name = kernel - self._kernel = self._get_kernel(kernel_name=kernel) - self._check() - - def _polynomial(self, v1, v2): - return (self.gamma * np.inner(v1, v2) + self.coef0) ** self.degree - - def _linear(self, v1, v2): - return np.inner(v1, v2) + self.coef0 - - def _rbf(self, v1, v2): - return np.exp(-1 * (self.gamma * np.linalg.norm(v1 - v2) ** 2)) - - def _check(self): - if self._kernel == self._rbf and self.gamma < 0: - raise ValueError("gamma value must be non-negative") - - def _get_kernel(self, kernel_name): - maps = {"linear": self._linear, "poly": self._polynomial, "rbf": self._rbf} - return maps[kernel_name] - - def __call__(self, v1, v2): - return self._kernel(v1, v2) - - def __repr__(self): - return self._kernel_name - - -def count_time(func): - def call_func(*args, **kwargs): - import time - - start_time = time.time() - func(*args, **kwargs) - end_time = time.time() - print(f"SMO algorithm cost {end_time - start_time} seconds") - - return call_func - - -@count_time -def test_cancer_data(): - print("Hello!\nStart test SVM using the SMO algorithm!") - # 0: download dataset and load into pandas' dataframe - if not os.path.exists(r"cancer_data.csv"): - request = urllib.request.Request( # noqa: S310 - CANCER_DATASET_URL, - headers={"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"}, - ) - response = urllib.request.urlopen(request) # noqa: S310 - content = response.read().decode("utf-8") - with open(r"cancer_data.csv", "w") as f: - f.write(content) - - data = pd.read_csv( - "cancer_data.csv", - header=None, - dtype={0: str}, # Assuming the first column contains string data - ) - - # 1: pre-processing data - del data[data.columns.tolist()[0]] - data = data.dropna(axis=0) - data = data.replace({"M": np.float64(1), "B": np.float64(-1)}) - samples = np.array(data)[:, :] - - # 2: dividing data into train_data data and test_data data - train_data, test_data = samples[:328, :], samples[328:, :] - test_tags, test_samples = test_data[:, 0], test_data[:, 1:] - - # 3: choose kernel function, and set initial alphas to zero (optional) - my_kernel = Kernel(kernel="rbf", degree=5, coef0=1, gamma=0.5) - al = np.zeros(train_data.shape[0]) - - # 4: calculating best alphas using SMO algorithm and predict test_data samples - mysvm = SmoSVM( - train=train_data, - kernel_func=my_kernel, - alpha_list=al, - cost=0.4, - b=0.0, - tolerance=0.001, - ) - mysvm.fit() - predict = mysvm.predict(test_samples) - - # 5: check accuracy - score = 0 - test_num = test_tags.shape[0] - for i in range(test_tags.shape[0]): - if test_tags[i] == predict[i]: - score += 1 - print(f"\nAll: {test_num}\nCorrect: {score}\nIncorrect: {test_num - score}") - print(f"Rough Accuracy: {score / test_tags.shape[0]}") - - -def test_demonstration(): - # change stdout - print("\nStarting plot, please wait!") - sys.stdout = open(os.devnull, "w") - - ax1 = plt.subplot2grid((2, 2), (0, 0)) - ax2 = plt.subplot2grid((2, 2), (0, 1)) - ax3 = plt.subplot2grid((2, 2), (1, 0)) - ax4 = plt.subplot2grid((2, 2), (1, 1)) - ax1.set_title("Linear SVM, cost = 0.1") - test_linear_kernel(ax1, cost=0.1) - ax2.set_title("Linear SVM, cost = 500") - test_linear_kernel(ax2, cost=500) - ax3.set_title("RBF kernel SVM, cost = 0.1") - test_rbf_kernel(ax3, cost=0.1) - ax4.set_title("RBF kernel SVM, cost = 500") - test_rbf_kernel(ax4, cost=500) - - sys.stdout = sys.__stdout__ - print("Plot done!") - - -def test_linear_kernel(ax, cost): - train_x, train_y = make_blobs( - n_samples=500, centers=2, n_features=2, random_state=1 - ) - train_y[train_y == 0] = -1 - scaler = StandardScaler() - train_x_scaled = scaler.fit_transform(train_x, train_y) - train_data = np.hstack((train_y.reshape(500, 1), train_x_scaled)) - my_kernel = Kernel(kernel="linear", degree=5, coef0=1, gamma=0.5) - mysvm = SmoSVM( - train=train_data, - kernel_func=my_kernel, - cost=cost, - tolerance=0.001, - auto_norm=False, - ) - mysvm.fit() - plot_partition_boundary(mysvm, train_data, ax=ax) - - -def test_rbf_kernel(ax, cost): - train_x, train_y = make_circles( - n_samples=500, noise=0.1, factor=0.1, random_state=1 - ) - train_y[train_y == 0] = -1 - scaler = StandardScaler() - train_x_scaled = scaler.fit_transform(train_x, train_y) - train_data = np.hstack((train_y.reshape(500, 1), train_x_scaled)) - my_kernel = Kernel(kernel="rbf", degree=5, coef0=1, gamma=0.5) - mysvm = SmoSVM( - train=train_data, - kernel_func=my_kernel, - cost=cost, - tolerance=0.001, - auto_norm=False, - ) - mysvm.fit() - plot_partition_boundary(mysvm, train_data, ax=ax) - - -def plot_partition_boundary( - model, train_data, ax, resolution=100, colors=("b", "k", "r") -): - """ - We cannot get the optimal w of our kernel SVM model, which is different from a - linear SVM. For this reason, we generate randomly distributed points with high - density, and predicted values of these points are calculated using our trained - model. Then we could use this predicted values to draw contour map, and this contour - map represents the SVM's partition boundary. - """ - train_data_x = train_data[:, 1] - train_data_y = train_data[:, 2] - train_data_tags = train_data[:, 0] - xrange = np.linspace(train_data_x.min(), train_data_x.max(), resolution) - yrange = np.linspace(train_data_y.min(), train_data_y.max(), resolution) - test_samples = np.array([(x, y) for x in xrange for y in yrange]).reshape( - resolution * resolution, 2 - ) - - test_tags = model.predict(test_samples, classify=False) - grid = test_tags.reshape((len(xrange), len(yrange))) - - # Plot contour map which represents the partition boundary - ax.contour( - xrange, - yrange, - np.asmatrix(grid).T, - levels=(-1, 0, 1), - linestyles=("--", "-", "--"), - linewidths=(1, 1, 1), - colors=colors, - ) - # Plot all train samples - ax.scatter( - train_data_x, - train_data_y, - c=train_data_tags, - cmap=plt.cm.Dark2, - lw=0, - alpha=0.5, - ) - - # Plot support vectors - support = model.support - ax.scatter( - train_data_x[support], - train_data_y[support], - c=train_data_tags[support], - cmap=plt.cm.Dark2, - ) - - -if __name__ == "__main__": - test_cancer_data() - test_demonstration() - plt.show() diff --git a/machine_learning/similarity_search.py b/machine_learning/similarity_search.py deleted file mode 100644 index c8a573796882..000000000000 --- a/machine_learning/similarity_search.py +++ /dev/null @@ -1,162 +0,0 @@ -""" -Similarity Search : https://en.wikipedia.org/wiki/Similarity_search -Similarity search is a search algorithm for finding the nearest vector from -vectors, used in natural language processing. -In this algorithm, it calculates distance with euclidean distance and -returns a list containing two data for each vector: - 1. the nearest vector - 2. distance between the vector and the nearest vector (float) -""" - -from __future__ import annotations - -import math - -import numpy as np -from numpy.linalg import norm - - -def euclidean(input_a: np.ndarray, input_b: np.ndarray) -> float: - """ - Calculates euclidean distance between two data. - :param input_a: ndarray of first vector. - :param input_b: ndarray of second vector. - :return: Euclidean distance of input_a and input_b. By using math.sqrt(), - result will be float. - - >>> euclidean(np.array([0]), np.array([1])) - 1.0 - >>> euclidean(np.array([0, 1]), np.array([1, 1])) - 1.0 - >>> euclidean(np.array([0, 0, 0]), np.array([0, 0, 1])) - 1.0 - """ - return math.sqrt(sum(pow(a - b, 2) for a, b in zip(input_a, input_b))) - - -def similarity_search( - dataset: np.ndarray, value_array: np.ndarray -) -> list[list[list[float] | float]]: - """ - :param dataset: Set containing the vectors. Should be ndarray. - :param value_array: vector/vectors we want to know the nearest vector from dataset. - :return: Result will be a list containing - 1. the nearest vector - 2. distance from the vector - - >>> dataset = np.array([[0], [1], [2]]) - >>> value_array = np.array([[0]]) - >>> similarity_search(dataset, value_array) - [[[0], 0.0]] - - >>> dataset = np.array([[0, 0], [1, 1], [2, 2]]) - >>> value_array = np.array([[0, 1]]) - >>> similarity_search(dataset, value_array) - [[[0, 0], 1.0]] - - >>> dataset = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) - >>> value_array = np.array([[0, 0, 1]]) - >>> similarity_search(dataset, value_array) - [[[0, 0, 0], 1.0]] - - >>> dataset = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]]) - >>> value_array = np.array([[0, 0, 0], [0, 0, 1]]) - >>> similarity_search(dataset, value_array) - [[[0, 0, 0], 0.0], [[0, 0, 0], 1.0]] - - These are the errors that might occur: - - 1. If dimensions are different. - For example, dataset has 2d array and value_array has 1d array: - >>> dataset = np.array([[1]]) - >>> value_array = np.array([1]) - >>> similarity_search(dataset, value_array) - Traceback (most recent call last): - ... - ValueError: Wrong input data's dimensions... dataset : 2, value_array : 1 - - 2. If data's shapes are different. - For example, dataset has shape of (3, 2) and value_array has (2, 3). - We are expecting same shapes of two arrays, so it is wrong. - >>> dataset = np.array([[0, 0], [1, 1], [2, 2]]) - >>> value_array = np.array([[0, 0, 0], [0, 0, 1]]) - >>> similarity_search(dataset, value_array) - Traceback (most recent call last): - ... - ValueError: Wrong input data's shape... dataset : 2, value_array : 3 - - 3. If data types are different. - When trying to compare, we are expecting same types so they should be same. - If not, it'll come up with errors. - >>> dataset = np.array([[0, 0], [1, 1], [2, 2]], dtype=np.float32) - >>> value_array = np.array([[0, 0], [0, 1]], dtype=np.int32) - >>> similarity_search(dataset, value_array) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - TypeError: Input data have different datatype... - dataset : float32, value_array : int32 - """ - - if dataset.ndim != value_array.ndim: - msg = ( - "Wrong input data's dimensions... " - f"dataset : {dataset.ndim}, value_array : {value_array.ndim}" - ) - raise ValueError(msg) - - try: - if dataset.shape[1] != value_array.shape[1]: - msg = ( - "Wrong input data's shape... " - f"dataset : {dataset.shape[1]}, value_array : {value_array.shape[1]}" - ) - raise ValueError(msg) - except IndexError: - if dataset.ndim != value_array.ndim: - raise TypeError("Wrong shape") - - if dataset.dtype != value_array.dtype: - msg = ( - "Input data have different datatype... " - f"dataset : {dataset.dtype}, value_array : {value_array.dtype}" - ) - raise TypeError(msg) - - answer = [] - - for value in value_array: - dist = euclidean(value, dataset[0]) - vector = dataset[0].tolist() - - for dataset_value in dataset[1:]: - temp_dist = euclidean(value, dataset_value) - - if dist > temp_dist: - dist = temp_dist - vector = dataset_value.tolist() - - answer.append([vector, dist]) - - return answer - - -def cosine_similarity(input_a: np.ndarray, input_b: np.ndarray) -> float: - """ - Calculates cosine similarity between two data. - :param input_a: ndarray of first vector. - :param input_b: ndarray of second vector. - :return: Cosine similarity of input_a and input_b. By using math.sqrt(), - result will be float. - - >>> cosine_similarity(np.array([1]), np.array([1])) - 1.0 - >>> cosine_similarity(np.array([1, 2]), np.array([6, 32])) - 0.9615239476408232 - """ - return float(np.dot(input_a, input_b) / (norm(input_a) * norm(input_b))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/support_vector_machines.py b/machine_learning/support_vector_machines.py deleted file mode 100644 index d17c9044a3e9..000000000000 --- a/machine_learning/support_vector_machines.py +++ /dev/null @@ -1,206 +0,0 @@ -import numpy as np -from numpy import ndarray -from scipy.optimize import Bounds, LinearConstraint, minimize - - -def norm_squared(vector: ndarray) -> float: - """ - Return the squared second norm of vector - norm_squared(v) = sum(x * x for x in v) - - Args: - vector (ndarray): input vector - - Returns: - float: squared second norm of vector - - >>> int(norm_squared([1, 2])) - 5 - >>> int(norm_squared(np.asarray([1, 2]))) - 5 - >>> int(norm_squared([0, 0])) - 0 - """ - return np.dot(vector, vector) - - -class SVC: - """ - Support Vector Classifier - - Args: - kernel (str): kernel to use. Default: linear - Possible choices: - - linear - regularization: constraint for soft margin (data not linearly separable) - Default: unbound - - >>> SVC(kernel="asdf") - Traceback (most recent call last): - ... - ValueError: Unknown kernel: asdf - - >>> SVC(kernel="rbf") - Traceback (most recent call last): - ... - ValueError: rbf kernel requires gamma - - >>> SVC(kernel="rbf", gamma=-1) - Traceback (most recent call last): - ... - ValueError: gamma must be > 0 - """ - - def __init__( - self, - *, - regularization: float = np.inf, - kernel: str = "linear", - gamma: float = 0.0, - ) -> None: - self.regularization = regularization - self.gamma = gamma - if kernel == "linear": - self.kernel = self.__linear - elif kernel == "rbf": - if self.gamma == 0: - raise ValueError("rbf kernel requires gamma") - if not isinstance(self.gamma, (float, int)): - raise ValueError("gamma must be float or int") - if not self.gamma > 0: - raise ValueError("gamma must be > 0") - self.kernel = self.__rbf - # in the future, there could be a default value like in sklearn - # sklear: def_gamma = 1/(n_features * X.var()) (wiki) - # previously it was 1/(n_features) - else: - msg = f"Unknown kernel: {kernel}" - raise ValueError(msg) - - # kernels - def __linear(self, vector1: ndarray, vector2: ndarray) -> float: - """Linear kernel (as if no kernel used at all)""" - return np.dot(vector1, vector2) - - def __rbf(self, vector1: ndarray, vector2: ndarray) -> float: - """ - RBF: Radial Basis Function Kernel - - Note: for more information see: - https://en.wikipedia.org/wiki/Radial_basis_function_kernel - - Args: - vector1 (ndarray): first vector - vector2 (ndarray): second vector) - - Returns: - float: exp(-(gamma * norm_squared(vector1 - vector2))) - """ - return np.exp(-(self.gamma * norm_squared(vector1 - vector2))) - - def fit(self, observations: list[ndarray], classes: ndarray) -> None: - """ - Fits the SVC with a set of observations. - - Args: - observations (list[ndarray]): list of observations - classes (ndarray): classification of each observation (in {1, -1}) - """ - - self.observations = observations - self.classes = classes - - # using Wolfe's Dual to calculate w. - # Primal problem: minimize 1/2*norm_squared(w) - # constraint: yn(w . xn + b) >= 1 - # - # With l a vector - # Dual problem: maximize sum_n(ln) - - # 1/2 * sum_n(sum_m(ln*lm*yn*ym*xn . xm)) - # constraint: self.C >= ln >= 0 - # and sum_n(ln*yn) = 0 - # Then we get w using w = sum_n(ln*yn*xn) - # At the end we can get b ~= mean(yn - w . xn) - # - # Since we use kernels, we only need l_star to calculate b - # and to classify observations - - (n,) = np.shape(classes) - - def to_minimize(candidate: ndarray) -> float: - """ - Opposite of the function to maximize - - Args: - candidate (ndarray): candidate array to test - - Return: - float: Wolfe's Dual result to minimize - """ - s = 0 - (n,) = np.shape(candidate) - for i in range(n): - for j in range(n): - s += ( - candidate[i] - * candidate[j] - * classes[i] - * classes[j] - * self.kernel(observations[i], observations[j]) - ) - return 1 / 2 * s - sum(candidate) - - ly_contraint = LinearConstraint(classes, 0, 0) - l_bounds = Bounds(0, self.regularization) - - l_star = minimize( - to_minimize, np.ones(n), bounds=l_bounds, constraints=[ly_contraint] - ).x - self.optimum = l_star - - # calculating mean offset of separation plane to points - s = 0 - for i in range(n): - for j in range(n): - s += classes[i] - classes[i] * self.optimum[i] * self.kernel( - observations[i], observations[j] - ) - self.offset = s / n - - def predict(self, observation: ndarray) -> int: - """ - Get the expected class of an observation - - Args: - observation (Vector): observation - - Returns: - int {1, -1}: expected class - - >>> xs = [ - ... np.asarray([0, 1]), np.asarray([0, 2]), - ... np.asarray([1, 1]), np.asarray([1, 2]) - ... ] - >>> y = np.asarray([1, 1, -1, -1]) - >>> s = SVC() - >>> s.fit(xs, y) - >>> s.predict(np.asarray([0, 1])) - 1 - >>> s.predict(np.asarray([1, 1])) - -1 - >>> s.predict(np.asarray([2, 2])) - -1 - """ - s = sum( - self.optimum[n] - * self.classes[n] - * self.kernel(self.observations[n], observation) - for n in range(len(self.classes)) - ) - return 1 if s + self.offset >= 0 else -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/machine_learning/word_frequency_functions.py b/machine_learning/word_frequency_functions.py deleted file mode 100644 index 8fd2741f611c..000000000000 --- a/machine_learning/word_frequency_functions.py +++ /dev/null @@ -1,137 +0,0 @@ -import string -from math import log10 - -""" - tf-idf Wikipedia: https://en.wikipedia.org/wiki/Tf%E2%80%93idf - tf-idf and other word frequency algorithms are often used - as a weighting factor in information retrieval and text - mining. 83% of text-based recommender systems use - tf-idf for term weighting. In Layman's terms, tf-idf - is a statistic intended to reflect how important a word - is to a document in a corpus (a collection of documents) - - - Here I've implemented several word frequency algorithms - that are commonly used in information retrieval: Term Frequency, - Document Frequency, and TF-IDF (Term-Frequency*Inverse-Document-Frequency) - are included. - - Term Frequency is a statistical function that - returns a number representing how frequently - an expression occurs in a document. This - indicates how significant a particular term is in - a given document. - - Document Frequency is a statistical function that returns - an integer representing the number of documents in a - corpus that a term occurs in (where the max number returned - would be the number of documents in the corpus). - - Inverse Document Frequency is mathematically written as - log10(N/df), where N is the number of documents in your - corpus and df is the Document Frequency. If df is 0, a - ZeroDivisionError will be thrown. - - Term-Frequency*Inverse-Document-Frequency is a measure - of the originality of a term. It is mathematically written - as tf*log10(N/df). It compares the number of times - a term appears in a document with the number of documents - the term appears in. If df is 0, a ZeroDivisionError will be thrown. -""" - - -def term_frequency(term: str, document: str) -> int: - """ - Return the number of times a term occurs within - a given document. - @params: term, the term to search a document for, and document, - the document to search within - @returns: an integer representing the number of times a term is - found within the document - - @examples: - >>> term_frequency("to", "To be, or not to be") - 2 - """ - # strip all punctuation and newlines and replace it with '' - document_without_punctuation = document.translate( - str.maketrans("", "", string.punctuation) - ).replace("\n", "") - tokenize_document = document_without_punctuation.split(" ") # word tokenization - return len([word for word in tokenize_document if word.lower() == term.lower()]) - - -def document_frequency(term: str, corpus: str) -> tuple[int, int]: - """ - Calculate the number of documents in a corpus that contain a - given term - @params : term, the term to search each document for, and corpus, a collection of - documents. Each document should be separated by a newline. - @returns : the number of documents in the corpus that contain the term you are - searching for and the number of documents in the corpus - @examples : - >>> document_frequency("first", "This is the first document in the corpus.\\nThIs\ -is the second document in the corpus.\\nTHIS is \ -the third document in the corpus.") - (1, 3) - """ - corpus_without_punctuation = corpus.lower().translate( - str.maketrans("", "", string.punctuation) - ) # strip all punctuation and replace it with '' - docs = corpus_without_punctuation.split("\n") - term = term.lower() - return (len([doc for doc in docs if term in doc]), len(docs)) - - -def inverse_document_frequency(df: int, n: int, smoothing=False) -> float: - """ - Return an integer denoting the importance - of a word. This measure of importance is - calculated by log10(N/df), where N is the - number of documents and df is - the Document Frequency. - @params : df, the Document Frequency, N, - the number of documents in the corpus and - smoothing, if True return the idf-smooth - @returns : log10(N/df) or 1+log10(N/1+df) - @examples : - >>> inverse_document_frequency(3, 0) - Traceback (most recent call last): - ... - ValueError: log10(0) is undefined. - >>> inverse_document_frequency(1, 3) - 0.477 - >>> inverse_document_frequency(0, 3) - Traceback (most recent call last): - ... - ZeroDivisionError: df must be > 0 - >>> inverse_document_frequency(0, 3,True) - 1.477 - """ - if smoothing: - if n == 0: - raise ValueError("log10(0) is undefined.") - return round(1 + log10(n / (1 + df)), 3) - - if df == 0: - raise ZeroDivisionError("df must be > 0") - elif n == 0: - raise ValueError("log10(0) is undefined.") - return round(log10(n / df), 3) - - -def tf_idf(tf: int, idf: int) -> float: - """ - Combine the term frequency - and inverse document frequency functions to - calculate the originality of a term. This - 'originality' is calculated by multiplying - the term frequency and the inverse document - frequency : tf-idf = TF * IDF - @params : tf, the term frequency, and idf, the inverse document - frequency - @examples : - >>> tf_idf(2, 0.477) - 0.954 - """ - return round(tf * idf, 3) diff --git a/machine_learning/xgboost_classifier.py b/machine_learning/xgboost_classifier.py deleted file mode 100644 index 1da933cf690f..000000000000 --- a/machine_learning/xgboost_classifier.py +++ /dev/null @@ -1,81 +0,0 @@ -# XGBoost Classifier Example -import numpy as np -from matplotlib import pyplot as plt -from sklearn.datasets import load_iris -from sklearn.metrics import ConfusionMatrixDisplay -from sklearn.model_selection import train_test_split -from xgboost import XGBClassifier - - -def data_handling(data: dict) -> tuple: - # Split dataset into features and target - # data is features - """ - >>> data_handling(({'data':'[5.1, 3.5, 1.4, 0.2]','target':([0])})) - ('[5.1, 3.5, 1.4, 0.2]', [0]) - >>> data_handling( - ... {'data': '[4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]', 'target': ([0, 0])} - ... ) - ('[4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]', [0, 0]) - """ - return (data["data"], data["target"]) - - -def xgboost(features: np.ndarray, target: np.ndarray) -> XGBClassifier: - """ - # THIS TEST IS BROKEN!! >>> xgboost(np.array([[5.1, 3.6, 1.4, 0.2]]), np.array([0])) - XGBClassifier(base_score=0.5, booster='gbtree', callbacks=None, - colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1, - early_stopping_rounds=None, enable_categorical=False, - eval_metric=None, gamma=0, gpu_id=-1, grow_policy='depthwise', - importance_type=None, interaction_constraints='', - learning_rate=0.300000012, max_bin=256, max_cat_to_onehot=4, - max_delta_step=0, max_depth=6, max_leaves=0, min_child_weight=1, - missing=nan, monotone_constraints='()', n_estimators=100, - n_jobs=0, num_parallel_tree=1, predictor='auto', random_state=0, - reg_alpha=0, reg_lambda=1, ...) - """ - classifier = XGBClassifier() - classifier.fit(features, target) - return classifier - - -def main() -> None: - """ - >>> main() - - Url for the algorithm: - https://xgboost.readthedocs.io/en/stable/ - Iris type dataset is used to demonstrate algorithm. - """ - - # Load Iris dataset - iris = load_iris() - features, targets = data_handling(iris) - x_train, x_test, y_train, y_test = train_test_split( - features, targets, test_size=0.25 - ) - - names = iris["target_names"] - - # Create an XGBoost Classifier from the training data - xgboost_classifier = xgboost(x_train, y_train) - - # Display the confusion matrix of the classifier with both training and test sets - ConfusionMatrixDisplay.from_estimator( - xgboost_classifier, - x_test, - y_test, - display_labels=names, - cmap="Blues", - normalize="true", - ) - plt.title("Normalized Confusion Matrix - IRIS Dataset") - plt.show() - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) - main() diff --git a/machine_learning/xgboost_regressor.py b/machine_learning/xgboost_regressor.py deleted file mode 100644 index 52e041c55ea2..000000000000 --- a/machine_learning/xgboost_regressor.py +++ /dev/null @@ -1,66 +0,0 @@ -# XGBoost Regressor Example -import numpy as np -from sklearn.datasets import fetch_california_housing -from sklearn.metrics import mean_absolute_error, mean_squared_error -from sklearn.model_selection import train_test_split -from xgboost import XGBRegressor - - -def data_handling(data: dict) -> tuple: - # Split dataset into features and target. Data is features. - """ - >>> data_handling(( - ... {'data':'[ 8.3252 41. 6.9841269 1.02380952 322. 2.55555556 37.88 -122.23 ]' - ... ,'target':([4.526])})) - ('[ 8.3252 41. 6.9841269 1.02380952 322. 2.55555556 37.88 -122.23 ]', [4.526]) - """ - return (data["data"], data["target"]) - - -def xgboost( - features: np.ndarray, target: np.ndarray, test_features: np.ndarray -) -> np.ndarray: - """ - >>> xgboost(np.array([[ 2.3571 , 52. , 6.00813008, 1.06775068, - ... 907. , 2.45799458, 40.58 , -124.26]]),np.array([1.114]), - ... np.array([[1.97840000e+00, 3.70000000e+01, 4.98858447e+00, 1.03881279e+00, - ... 1.14300000e+03, 2.60958904e+00, 3.67800000e+01, -1.19780000e+02]])) - array([[1.1139996]], dtype=float32) - """ - xgb = XGBRegressor( - verbosity=0, random_state=42, tree_method="exact", base_score=0.5 - ) - xgb.fit(features, target) - # Predict target for test data - predictions = xgb.predict(test_features) - predictions = predictions.reshape(len(predictions), 1) - return predictions - - -def main() -> None: - """ - The URL for this algorithm - https://xgboost.readthedocs.io/en/stable/ - California house price dataset is used to demonstrate the algorithm. - - Expected error values: - Mean Absolute Error: 0.30957163379906033 - Mean Square Error: 0.22611560196662744 - """ - # Load California house price dataset - california = fetch_california_housing() - data, target = data_handling(california) - x_train, x_test, y_train, y_test = train_test_split( - data, target, test_size=0.25, random_state=1 - ) - predictions = xgboost(x_train, y_train, x_test) - # Error printing - print(f"Mean Absolute Error: {mean_absolute_error(y_test, predictions)}") - print(f"Mean Square Error: {mean_squared_error(y_test, predictions)}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) - main() diff --git a/maths/__init__.py b/maths/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/maths/abs.py b/maths/abs.py deleted file mode 100644 index b357e98d8680..000000000000 --- a/maths/abs.py +++ /dev/null @@ -1,94 +0,0 @@ -"""Absolute Value.""" - - -def abs_val(num: float) -> float: - """ - Find the absolute value of a number. - - >>> abs_val(-5.1) - 5.1 - >>> abs_val(-5) == abs_val(5) - True - >>> abs_val(0) - 0 - """ - return -num if num < 0 else num - - -def abs_min(x: list[int]) -> int: - """ - >>> abs_min([0,5,1,11]) - 0 - >>> abs_min([3,-10,-2]) - -2 - >>> abs_min([]) - Traceback (most recent call last): - ... - ValueError: abs_min() arg is an empty sequence - """ - if len(x) == 0: - raise ValueError("abs_min() arg is an empty sequence") - j = x[0] - for i in x: - if abs_val(i) < abs_val(j): - j = i - return j - - -def abs_max(x: list[int]) -> int: - """ - >>> abs_max([0,5,1,11]) - 11 - >>> abs_max([3,-10,-2]) - -10 - >>> abs_max([]) - Traceback (most recent call last): - ... - ValueError: abs_max() arg is an empty sequence - """ - if len(x) == 0: - raise ValueError("abs_max() arg is an empty sequence") - j = x[0] - for i in x: - if abs(i) > abs(j): - j = i - return j - - -def abs_max_sort(x: list[int]) -> int: - """ - >>> abs_max_sort([0,5,1,11]) - 11 - >>> abs_max_sort([3,-10,-2]) - -10 - >>> abs_max_sort([]) - Traceback (most recent call last): - ... - ValueError: abs_max_sort() arg is an empty sequence - """ - if len(x) == 0: - raise ValueError("abs_max_sort() arg is an empty sequence") - return sorted(x, key=abs)[-1] - - -def test_abs_val(): - """ - >>> test_abs_val() - """ - assert abs_val(0) == 0 - assert abs_val(34) == 34 - assert abs_val(-100000000000) == 100000000000 - - a = [-3, -1, 2, -11] - assert abs_max(a) == -11 - assert abs_max_sort(a) == -11 - assert abs_min(a) == -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - test_abs_val() - print(abs_val(-34)) # --> 34 diff --git a/maths/addition_without_arithmetic.py b/maths/addition_without_arithmetic.py deleted file mode 100644 index 409604e4c08a..000000000000 --- a/maths/addition_without_arithmetic.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Illustrate how to add the integer without arithmetic operation -Author: suraj Kumar -Time Complexity: 1 -https://en.wikipedia.org/wiki/Bitwise_operation -""" - - -def add(first: int, second: int) -> int: - """ - Implementation of addition of integer - - Examples: - >>> add(3, 5) - 8 - >>> add(13, 5) - 18 - >>> add(-7, 2) - -5 - >>> add(0, -7) - -7 - >>> add(-321, 0) - -321 - """ - while second != 0: - c = first & second - first ^= second - second = c << 1 - return first - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - first = int(input("Enter the first number: ").strip()) - second = int(input("Enter the second number: ").strip()) - print(f"{add(first, second) = }") diff --git a/maths/aliquot_sum.py b/maths/aliquot_sum.py deleted file mode 100644 index 9c58aa61d19e..000000000000 --- a/maths/aliquot_sum.py +++ /dev/null @@ -1,48 +0,0 @@ -def aliquot_sum(input_num: int) -> int: - """ - Finds the aliquot sum of an input integer, where the - aliquot sum of a number n is defined as the sum of all - natural numbers less than n that divide n evenly. For - example, the aliquot sum of 15 is 1 + 3 + 5 = 9. This is - a simple O(n) implementation. - @param input_num: a positive integer whose aliquot sum is to be found - @return: the aliquot sum of input_num, if input_num is positive. - Otherwise, raise a ValueError - Wikipedia Explanation: https://en.wikipedia.org/wiki/Aliquot_sum - - >>> aliquot_sum(15) - 9 - >>> aliquot_sum(6) - 6 - >>> aliquot_sum(-1) - Traceback (most recent call last): - ... - ValueError: Input must be positive - >>> aliquot_sum(0) - Traceback (most recent call last): - ... - ValueError: Input must be positive - >>> aliquot_sum(1.6) - Traceback (most recent call last): - ... - ValueError: Input must be an integer - >>> aliquot_sum(12) - 16 - >>> aliquot_sum(1) - 0 - >>> aliquot_sum(19) - 1 - """ - if not isinstance(input_num, int): - raise ValueError("Input must be an integer") - if input_num <= 0: - raise ValueError("Input must be positive") - return sum( - divisor for divisor in range(1, input_num // 2 + 1) if input_num % divisor == 0 - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/allocation_number.py b/maths/allocation_number.py deleted file mode 100644 index 52f1ac4bdb23..000000000000 --- a/maths/allocation_number.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -In a multi-threaded download, this algorithm could be used to provide -each worker thread with a block of non-overlapping bytes to download. -For example: - for i in allocation_list: - requests.get(url,headers={'Range':f'bytes={i}'}) -""" - -from __future__ import annotations - - -def allocation_num(number_of_bytes: int, partitions: int) -> list[str]: - """ - Divide a number of bytes into x partitions. - :param number_of_bytes: the total of bytes. - :param partitions: the number of partition need to be allocated. - :return: list of bytes to be assigned to each worker thread - - >>> allocation_num(16647, 4) - ['1-4161', '4162-8322', '8323-12483', '12484-16647'] - >>> allocation_num(50000, 5) - ['1-10000', '10001-20000', '20001-30000', '30001-40000', '40001-50000'] - >>> allocation_num(888, 999) - Traceback (most recent call last): - ... - ValueError: partitions can not > number_of_bytes! - >>> allocation_num(888, -4) - Traceback (most recent call last): - ... - ValueError: partitions must be a positive number! - """ - if partitions <= 0: - raise ValueError("partitions must be a positive number!") - if partitions > number_of_bytes: - raise ValueError("partitions can not > number_of_bytes!") - bytes_per_partition = number_of_bytes // partitions - allocation_list = [] - for i in range(partitions): - start_bytes = i * bytes_per_partition + 1 - end_bytes = ( - number_of_bytes if i == partitions - 1 else (i + 1) * bytes_per_partition - ) - allocation_list.append(f"{start_bytes}-{end_bytes}") - return allocation_list - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/arc_length.py b/maths/arc_length.py deleted file mode 100644 index 4c518f321dc7..000000000000 --- a/maths/arc_length.py +++ /dev/null @@ -1,17 +0,0 @@ -from math import pi - - -def arc_length(angle: int, radius: int) -> float: - """ - >>> arc_length(45, 5) - 3.9269908169872414 - >>> arc_length(120, 15) - 31.415926535897928 - >>> arc_length(90, 10) - 15.707963267948966 - """ - return 2 * pi * radius * (angle / 360) - - -if __name__ == "__main__": - print(arc_length(90, 10)) diff --git a/maths/area.py b/maths/area.py deleted file mode 100644 index 31a654206977..000000000000 --- a/maths/area.py +++ /dev/null @@ -1,584 +0,0 @@ -""" -Find the area of various geometric shapes -Wikipedia reference: https://en.wikipedia.org/wiki/Area -""" - -from math import pi, sqrt, tan - - -def surface_area_cube(side_length: float) -> float: - """ - Calculate the Surface Area of a Cube. - - >>> surface_area_cube(1) - 6 - >>> surface_area_cube(1.6) - 15.360000000000003 - >>> surface_area_cube(0) - 0 - >>> surface_area_cube(3) - 54 - >>> surface_area_cube(-1) - Traceback (most recent call last): - ... - ValueError: surface_area_cube() only accepts non-negative values - """ - if side_length < 0: - raise ValueError("surface_area_cube() only accepts non-negative values") - return 6 * side_length**2 - - -def surface_area_cuboid(length: float, breadth: float, height: float) -> float: - """ - Calculate the Surface Area of a Cuboid. - - >>> surface_area_cuboid(1, 2, 3) - 22 - >>> surface_area_cuboid(0, 0, 0) - 0 - >>> surface_area_cuboid(1.6, 2.6, 3.6) - 38.56 - >>> surface_area_cuboid(-1, 2, 3) - Traceback (most recent call last): - ... - ValueError: surface_area_cuboid() only accepts non-negative values - >>> surface_area_cuboid(1, -2, 3) - Traceback (most recent call last): - ... - ValueError: surface_area_cuboid() only accepts non-negative values - >>> surface_area_cuboid(1, 2, -3) - Traceback (most recent call last): - ... - ValueError: surface_area_cuboid() only accepts non-negative values - """ - if length < 0 or breadth < 0 or height < 0: - raise ValueError("surface_area_cuboid() only accepts non-negative values") - return 2 * ((length * breadth) + (breadth * height) + (length * height)) - - -def surface_area_sphere(radius: float) -> float: - """ - Calculate the Surface Area of a Sphere. - Wikipedia reference: https://en.wikipedia.org/wiki/Sphere - Formula: 4 * pi * r^2 - - >>> surface_area_sphere(5) - 314.1592653589793 - >>> surface_area_sphere(1) - 12.566370614359172 - >>> surface_area_sphere(1.6) - 32.169908772759484 - >>> surface_area_sphere(0) - 0.0 - >>> surface_area_sphere(-1) - Traceback (most recent call last): - ... - ValueError: surface_area_sphere() only accepts non-negative values - """ - if radius < 0: - raise ValueError("surface_area_sphere() only accepts non-negative values") - return 4 * pi * radius**2 - - -def surface_area_hemisphere(radius: float) -> float: - """ - Calculate the Surface Area of a Hemisphere. - Formula: 3 * pi * r^2 - - >>> surface_area_hemisphere(5) - 235.61944901923448 - >>> surface_area_hemisphere(1) - 9.42477796076938 - >>> surface_area_hemisphere(0) - 0.0 - >>> surface_area_hemisphere(1.1) - 11.40398133253095 - >>> surface_area_hemisphere(-1) - Traceback (most recent call last): - ... - ValueError: surface_area_hemisphere() only accepts non-negative values - """ - if radius < 0: - raise ValueError("surface_area_hemisphere() only accepts non-negative values") - return 3 * pi * radius**2 - - -def surface_area_cone(radius: float, height: float) -> float: - """ - Calculate the Surface Area of a Cone. - Wikipedia reference: https://en.wikipedia.org/wiki/Cone - Formula: pi * r * (r + (h ** 2 + r ** 2) ** 0.5) - - >>> surface_area_cone(10, 24) - 1130.9733552923256 - >>> surface_area_cone(6, 8) - 301.59289474462014 - >>> surface_area_cone(1.6, 2.6) - 23.387862992395807 - >>> surface_area_cone(0, 0) - 0.0 - >>> surface_area_cone(-1, -2) - Traceback (most recent call last): - ... - ValueError: surface_area_cone() only accepts non-negative values - >>> surface_area_cone(1, -2) - Traceback (most recent call last): - ... - ValueError: surface_area_cone() only accepts non-negative values - >>> surface_area_cone(-1, 2) - Traceback (most recent call last): - ... - ValueError: surface_area_cone() only accepts non-negative values - """ - if radius < 0 or height < 0: - raise ValueError("surface_area_cone() only accepts non-negative values") - return pi * radius * (radius + (height**2 + radius**2) ** 0.5) - - -def surface_area_conical_frustum( - radius_1: float, radius_2: float, height: float -) -> float: - """ - Calculate the Surface Area of a Conical Frustum. - - >>> surface_area_conical_frustum(1, 2, 3) - 45.511728065337266 - >>> surface_area_conical_frustum(4, 5, 6) - 300.7913575056268 - >>> surface_area_conical_frustum(0, 0, 0) - 0.0 - >>> surface_area_conical_frustum(1.6, 2.6, 3.6) - 78.57907060751548 - >>> surface_area_conical_frustum(-1, 2, 3) - Traceback (most recent call last): - ... - ValueError: surface_area_conical_frustum() only accepts non-negative values - >>> surface_area_conical_frustum(1, -2, 3) - Traceback (most recent call last): - ... - ValueError: surface_area_conical_frustum() only accepts non-negative values - >>> surface_area_conical_frustum(1, 2, -3) - Traceback (most recent call last): - ... - ValueError: surface_area_conical_frustum() only accepts non-negative values - """ - if radius_1 < 0 or radius_2 < 0 or height < 0: - raise ValueError( - "surface_area_conical_frustum() only accepts non-negative values" - ) - slant_height = (height**2 + (radius_1 - radius_2) ** 2) ** 0.5 - return pi * ((slant_height * (radius_1 + radius_2)) + radius_1**2 + radius_2**2) - - -def surface_area_cylinder(radius: float, height: float) -> float: - """ - Calculate the Surface Area of a Cylinder. - Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder - Formula: 2 * pi * r * (h + r) - - >>> surface_area_cylinder(7, 10) - 747.6990515543707 - >>> surface_area_cylinder(1.6, 2.6) - 42.22300526424682 - >>> surface_area_cylinder(0, 0) - 0.0 - >>> surface_area_cylinder(6, 8) - 527.7875658030853 - >>> surface_area_cylinder(-1, -2) - Traceback (most recent call last): - ... - ValueError: surface_area_cylinder() only accepts non-negative values - >>> surface_area_cylinder(1, -2) - Traceback (most recent call last): - ... - ValueError: surface_area_cylinder() only accepts non-negative values - >>> surface_area_cylinder(-1, 2) - Traceback (most recent call last): - ... - ValueError: surface_area_cylinder() only accepts non-negative values - """ - if radius < 0 or height < 0: - raise ValueError("surface_area_cylinder() only accepts non-negative values") - return 2 * pi * radius * (height + radius) - - -def surface_area_torus(torus_radius: float, tube_radius: float) -> float: - """Calculate the Area of a Torus. - Wikipedia reference: https://en.wikipedia.org/wiki/Torus - :return 4pi^2 * torus_radius * tube_radius - >>> surface_area_torus(1, 1) - 39.47841760435743 - >>> surface_area_torus(4, 3) - 473.7410112522892 - >>> surface_area_torus(3, 4) - Traceback (most recent call last): - ... - ValueError: surface_area_torus() does not support spindle or self intersecting tori - >>> surface_area_torus(1.6, 1.6) - 101.06474906715503 - >>> surface_area_torus(0, 0) - 0.0 - >>> surface_area_torus(-1, 1) - Traceback (most recent call last): - ... - ValueError: surface_area_torus() only accepts non-negative values - >>> surface_area_torus(1, -1) - Traceback (most recent call last): - ... - ValueError: surface_area_torus() only accepts non-negative values - """ - if torus_radius < 0 or tube_radius < 0: - raise ValueError("surface_area_torus() only accepts non-negative values") - if torus_radius < tube_radius: - raise ValueError( - "surface_area_torus() does not support spindle or self intersecting tori" - ) - return 4 * pow(pi, 2) * torus_radius * tube_radius - - -def area_rectangle(length: float, width: float) -> float: - """ - Calculate the area of a rectangle. - - >>> area_rectangle(10, 20) - 200 - >>> area_rectangle(1.6, 2.6) - 4.16 - >>> area_rectangle(0, 0) - 0 - >>> area_rectangle(-1, -2) - Traceback (most recent call last): - ... - ValueError: area_rectangle() only accepts non-negative values - >>> area_rectangle(1, -2) - Traceback (most recent call last): - ... - ValueError: area_rectangle() only accepts non-negative values - >>> area_rectangle(-1, 2) - Traceback (most recent call last): - ... - ValueError: area_rectangle() only accepts non-negative values - """ - if length < 0 or width < 0: - raise ValueError("area_rectangle() only accepts non-negative values") - return length * width - - -def area_square(side_length: float) -> float: - """ - Calculate the area of a square. - - >>> area_square(10) - 100 - >>> area_square(0) - 0 - >>> area_square(1.6) - 2.5600000000000005 - >>> area_square(-1) - Traceback (most recent call last): - ... - ValueError: area_square() only accepts non-negative values - """ - if side_length < 0: - raise ValueError("area_square() only accepts non-negative values") - return side_length**2 - - -def area_triangle(base: float, height: float) -> float: - """ - Calculate the area of a triangle given the base and height. - - >>> area_triangle(10, 10) - 50.0 - >>> area_triangle(1.6, 2.6) - 2.08 - >>> area_triangle(0, 0) - 0.0 - >>> area_triangle(-1, -2) - Traceback (most recent call last): - ... - ValueError: area_triangle() only accepts non-negative values - >>> area_triangle(1, -2) - Traceback (most recent call last): - ... - ValueError: area_triangle() only accepts non-negative values - >>> area_triangle(-1, 2) - Traceback (most recent call last): - ... - ValueError: area_triangle() only accepts non-negative values - """ - if base < 0 or height < 0: - raise ValueError("area_triangle() only accepts non-negative values") - return (base * height) / 2 - - -def area_triangle_three_sides(side1: float, side2: float, side3: float) -> float: - """ - Calculate area of triangle when the length of 3 sides are known. - This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula - - >>> area_triangle_three_sides(5, 12, 13) - 30.0 - >>> area_triangle_three_sides(10, 11, 12) - 51.521233486786784 - >>> area_triangle_three_sides(0, 0, 0) - 0.0 - >>> area_triangle_three_sides(1.6, 2.6, 3.6) - 1.8703742940919619 - >>> area_triangle_three_sides(-1, -2, -1) - Traceback (most recent call last): - ... - ValueError: area_triangle_three_sides() only accepts non-negative values - >>> area_triangle_three_sides(1, -2, 1) - Traceback (most recent call last): - ... - ValueError: area_triangle_three_sides() only accepts non-negative values - >>> area_triangle_three_sides(2, 4, 7) - Traceback (most recent call last): - ... - ValueError: Given three sides do not form a triangle - >>> area_triangle_three_sides(2, 7, 4) - Traceback (most recent call last): - ... - ValueError: Given three sides do not form a triangle - >>> area_triangle_three_sides(7, 2, 4) - Traceback (most recent call last): - ... - ValueError: Given three sides do not form a triangle - """ - if side1 < 0 or side2 < 0 or side3 < 0: - raise ValueError("area_triangle_three_sides() only accepts non-negative values") - elif side1 + side2 < side3 or side1 + side3 < side2 or side2 + side3 < side1: - raise ValueError("Given three sides do not form a triangle") - semi_perimeter = (side1 + side2 + side3) / 2 - area = sqrt( - semi_perimeter - * (semi_perimeter - side1) - * (semi_perimeter - side2) - * (semi_perimeter - side3) - ) - return area - - -def area_parallelogram(base: float, height: float) -> float: - """ - Calculate the area of a parallelogram. - - >>> area_parallelogram(10, 20) - 200 - >>> area_parallelogram(1.6, 2.6) - 4.16 - >>> area_parallelogram(0, 0) - 0 - >>> area_parallelogram(-1, -2) - Traceback (most recent call last): - ... - ValueError: area_parallelogram() only accepts non-negative values - >>> area_parallelogram(1, -2) - Traceback (most recent call last): - ... - ValueError: area_parallelogram() only accepts non-negative values - >>> area_parallelogram(-1, 2) - Traceback (most recent call last): - ... - ValueError: area_parallelogram() only accepts non-negative values - """ - if base < 0 or height < 0: - raise ValueError("area_parallelogram() only accepts non-negative values") - return base * height - - -def area_trapezium(base1: float, base2: float, height: float) -> float: - """ - Calculate the area of a trapezium. - - >>> area_trapezium(10, 20, 30) - 450.0 - >>> area_trapezium(1.6, 2.6, 3.6) - 7.5600000000000005 - >>> area_trapezium(0, 0, 0) - 0.0 - >>> area_trapezium(-1, -2, -3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - >>> area_trapezium(-1, 2, 3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - >>> area_trapezium(1, -2, 3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - >>> area_trapezium(1, 2, -3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - >>> area_trapezium(-1, -2, 3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - >>> area_trapezium(1, -2, -3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - >>> area_trapezium(-1, 2, -3) - Traceback (most recent call last): - ... - ValueError: area_trapezium() only accepts non-negative values - """ - if base1 < 0 or base2 < 0 or height < 0: - raise ValueError("area_trapezium() only accepts non-negative values") - return 1 / 2 * (base1 + base2) * height - - -def area_circle(radius: float) -> float: - """ - Calculate the area of a circle. - - >>> area_circle(20) - 1256.6370614359173 - >>> area_circle(1.6) - 8.042477193189871 - >>> area_circle(0) - 0.0 - >>> area_circle(-1) - Traceback (most recent call last): - ... - ValueError: area_circle() only accepts non-negative values - """ - if radius < 0: - raise ValueError("area_circle() only accepts non-negative values") - return pi * radius**2 - - -def area_ellipse(radius_x: float, radius_y: float) -> float: - """ - Calculate the area of a ellipse. - - >>> area_ellipse(10, 10) - 314.1592653589793 - >>> area_ellipse(10, 20) - 628.3185307179587 - >>> area_ellipse(0, 0) - 0.0 - >>> area_ellipse(1.6, 2.6) - 13.06902543893354 - >>> area_ellipse(-10, 20) - Traceback (most recent call last): - ... - ValueError: area_ellipse() only accepts non-negative values - >>> area_ellipse(10, -20) - Traceback (most recent call last): - ... - ValueError: area_ellipse() only accepts non-negative values - >>> area_ellipse(-10, -20) - Traceback (most recent call last): - ... - ValueError: area_ellipse() only accepts non-negative values - """ - if radius_x < 0 or radius_y < 0: - raise ValueError("area_ellipse() only accepts non-negative values") - return pi * radius_x * radius_y - - -def area_rhombus(diagonal_1: float, diagonal_2: float) -> float: - """ - Calculate the area of a rhombus. - - >>> area_rhombus(10, 20) - 100.0 - >>> area_rhombus(1.6, 2.6) - 2.08 - >>> area_rhombus(0, 0) - 0.0 - >>> area_rhombus(-1, -2) - Traceback (most recent call last): - ... - ValueError: area_rhombus() only accepts non-negative values - >>> area_rhombus(1, -2) - Traceback (most recent call last): - ... - ValueError: area_rhombus() only accepts non-negative values - >>> area_rhombus(-1, 2) - Traceback (most recent call last): - ... - ValueError: area_rhombus() only accepts non-negative values - """ - if diagonal_1 < 0 or diagonal_2 < 0: - raise ValueError("area_rhombus() only accepts non-negative values") - return 1 / 2 * diagonal_1 * diagonal_2 - - -def area_reg_polygon(sides: int, length: float) -> float: - """ - Calculate the area of a regular polygon. - Wikipedia reference: https://en.wikipedia.org/wiki/Polygon#Regular_polygons - Formula: (n*s^2*cot(pi/n))/4 - - >>> area_reg_polygon(3, 10) - 43.301270189221945 - >>> area_reg_polygon(4, 10) - 100.00000000000001 - >>> area_reg_polygon(0, 0) - Traceback (most recent call last): - ... - ValueError: area_reg_polygon() only accepts integers greater than or equal to \ -three as number of sides - >>> area_reg_polygon(-1, -2) - Traceback (most recent call last): - ... - ValueError: area_reg_polygon() only accepts integers greater than or equal to \ -three as number of sides - >>> area_reg_polygon(5, -2) - Traceback (most recent call last): - ... - ValueError: area_reg_polygon() only accepts non-negative values as \ -length of a side - >>> area_reg_polygon(-1, 2) - Traceback (most recent call last): - ... - ValueError: area_reg_polygon() only accepts integers greater than or equal to \ -three as number of sides - """ - if not isinstance(sides, int) or sides < 3: - raise ValueError( - "area_reg_polygon() only accepts integers greater than or \ -equal to three as number of sides" - ) - elif length < 0: - raise ValueError( - "area_reg_polygon() only accepts non-negative values as \ -length of a side" - ) - return (sides * length**2) / (4 * tan(pi / sides)) - return (sides * length**2) / (4 * tan(pi / sides)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) # verbose so we can see methods missing tests - - print("[DEMO] Areas of various geometric shapes: \n") - print(f"Rectangle: {area_rectangle(10, 20) = }") - print(f"Square: {area_square(10) = }") - print(f"Triangle: {area_triangle(10, 10) = }") - print(f"Triangle: {area_triangle_three_sides(5, 12, 13) = }") - print(f"Parallelogram: {area_parallelogram(10, 20) = }") - print(f"Rhombus: {area_rhombus(10, 20) = }") - print(f"Trapezium: {area_trapezium(10, 20, 30) = }") - print(f"Circle: {area_circle(20) = }") - print(f"Ellipse: {area_ellipse(10, 20) = }") - print("\nSurface Areas of various geometric shapes: \n") - print(f"Cube: {surface_area_cube(20) = }") - print(f"Cuboid: {surface_area_cuboid(10, 20, 30) = }") - print(f"Sphere: {surface_area_sphere(20) = }") - print(f"Hemisphere: {surface_area_hemisphere(20) = }") - print(f"Cone: {surface_area_cone(10, 20) = }") - print(f"Conical Frustum: {surface_area_conical_frustum(10, 20, 30) = }") - print(f"Cylinder: {surface_area_cylinder(10, 20) = }") - print(f"Torus: {surface_area_torus(20, 10) = }") - print(f"Equilateral Triangle: {area_reg_polygon(3, 10) = }") - print(f"Square: {area_reg_polygon(4, 10) = }") - print(f"Reqular Pentagon: {area_reg_polygon(5, 10) = }") diff --git a/maths/area_under_curve.py b/maths/area_under_curve.py deleted file mode 100644 index 10aec768fa09..000000000000 --- a/maths/area_under_curve.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Approximates the area under the curve using the trapezoidal rule -""" - -from __future__ import annotations - -from collections.abc import Callable - - -def trapezoidal_area( - fnc: Callable[[float], float], - x_start: float, - x_end: float, - steps: int = 100, -) -> float: - """ - Treats curve as a collection of linear lines and sums the area of the - trapezium shape they form - :param fnc: a function which defines a curve - :param x_start: left end point to indicate the start of line segment - :param x_end: right end point to indicate end of line segment - :param steps: an accuracy gauge; more steps increases the accuracy - :return: a float representing the length of the curve - - >>> def f(x): - ... return 5 - >>> f"{trapezoidal_area(f, 12.0, 14.0, 1000):.3f}" - '10.000' - >>> def f(x): - ... return 9*x**2 - >>> f"{trapezoidal_area(f, -4.0, 0, 10000):.4f}" - '192.0000' - >>> f"{trapezoidal_area(f, -4.0, 4.0, 10000):.4f}" - '384.0000' - """ - x1 = x_start - fx1 = fnc(x_start) - area = 0.0 - for _ in range(steps): - # Approximates small segments of curve as linear and solve - # for trapezoidal area - x2 = (x_end - x_start) / steps + x1 - fx2 = fnc(x2) - area += abs(fx2 + fx1) * (x2 - x1) / 2 - # Increment step - x1 = x2 - fx1 = fx2 - return area - - -if __name__ == "__main__": - - def f(x): - return x**3 + x**2 - - print("f(x) = x^3 + x^2") - print("The area between the curve, x = -5, x = 5 and the x axis is:") - i = 10 - while i <= 100000: - print(f"with {i} steps: {trapezoidal_area(f, -5, 5, i)}") - i *= 10 diff --git a/maths/average_absolute_deviation.py b/maths/average_absolute_deviation.py deleted file mode 100644 index 193d94a2f265..000000000000 --- a/maths/average_absolute_deviation.py +++ /dev/null @@ -1,29 +0,0 @@ -def average_absolute_deviation(nums: list[int]) -> float: - """ - Return the average absolute deviation of a list of numbers. - Wiki: https://en.wikipedia.org/wiki/Average_absolute_deviation - - >>> average_absolute_deviation([0]) - 0.0 - >>> average_absolute_deviation([4, 1, 3, 2]) - 1.0 - >>> average_absolute_deviation([2, 70, 6, 50, 20, 8, 4, 0]) - 20.0 - >>> average_absolute_deviation([-20, 0, 30, 15]) - 16.25 - >>> average_absolute_deviation([]) - Traceback (most recent call last): - ... - ValueError: List is empty - """ - if not nums: # Makes sure that the list is not empty - raise ValueError("List is empty") - - average = sum(nums) / len(nums) # Calculate the average - return sum(abs(x - average) for x in nums) / len(nums) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/average_mean.py b/maths/average_mean.py deleted file mode 100644 index 274c434ab885..000000000000 --- a/maths/average_mean.py +++ /dev/null @@ -1,28 +0,0 @@ -from __future__ import annotations - - -def mean(nums: list) -> float: - """ - Find mean of a list of numbers. - Wiki: https://en.wikipedia.org/wiki/Mean - - >>> mean([3, 6, 9, 12, 15, 18, 21]) - 12.0 - >>> mean([5, 10, 15, 20, 25, 30, 35]) - 20.0 - >>> mean([1, 2, 3, 4, 5, 6, 7, 8]) - 4.5 - >>> mean([]) - Traceback (most recent call last): - ... - ValueError: List is empty - """ - if not nums: - raise ValueError("List is empty") - return sum(nums) / len(nums) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/average_median.py b/maths/average_median.py deleted file mode 100644 index f24e525736b3..000000000000 --- a/maths/average_median.py +++ /dev/null @@ -1,41 +0,0 @@ -from __future__ import annotations - - -def median(nums: list) -> int | float: - """ - Find median of a list of numbers. - Wiki: https://en.wikipedia.org/wiki/Median - - >>> median([0]) - 0 - >>> median([4, 1, 3, 2]) - 2.5 - >>> median([2, 70, 6, 50, 20, 8, 4]) - 8 - - Args: - nums: List of nums - - Returns: - Median. - """ - # The sorted function returns list[SupportsRichComparisonT@sorted] - # which does not support `+` - sorted_list: list[int] = sorted(nums) - length = len(sorted_list) - mid_index = length >> 1 - return ( - (sorted_list[mid_index] + sorted_list[mid_index - 1]) / 2 - if length % 2 == 0 - else sorted_list[mid_index] - ) - - -def main(): - import doctest - - doctest.testmod() - - -if __name__ == "__main__": - main() diff --git a/maths/average_mode.py b/maths/average_mode.py deleted file mode 100644 index 40f88f41f8ca..000000000000 --- a/maths/average_mode.py +++ /dev/null @@ -1,32 +0,0 @@ -from typing import Any - - -def mode(input_list: list) -> list[Any]: - """This function returns the mode(Mode as in the measures of - central tendency) of the input data. - - The input list may contain any Datastructure or any Datatype. - - >>> mode([2, 3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 2, 2, 2]) - [2] - >>> mode([3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 2, 2, 2]) - [2] - >>> mode([3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 4, 2, 2, 4, 2]) - [2, 4] - >>> mode(["x", "y", "y", "z"]) - ['y'] - >>> mode(["x", "x" , "y", "y", "z"]) - ['x', 'y'] - """ - if not input_list: - return [] - result = [input_list.count(value) for value in input_list] - y = max(result) # Gets the maximum count in the input list. - # Gets values of modes - return sorted({input_list[i] for i, value in enumerate(result) if value == y}) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/bailey_borwein_plouffe.py b/maths/bailey_borwein_plouffe.py deleted file mode 100644 index 389b1566e9de..000000000000 --- a/maths/bailey_borwein_plouffe.py +++ /dev/null @@ -1,89 +0,0 @@ -def bailey_borwein_plouffe(digit_position: int, precision: int = 1000) -> str: - """ - Implement a popular pi-digit-extraction algorithm known as the - Bailey-Borwein-Plouffe (BBP) formula to calculate the nth hex digit of pi. - Wikipedia page: - https://en.wikipedia.org/wiki/Bailey%E2%80%93Borwein%E2%80%93Plouffe_formula - @param digit_position: a positive integer representing the position of the digit to - extract. - The digit immediately after the decimal point is located at position 1. - @param precision: number of terms in the second summation to calculate. - A higher number reduces the chance of an error but increases the runtime. - @return: a hexadecimal digit representing the digit at the nth position - in pi's decimal expansion. - - >>> "".join(bailey_borwein_plouffe(i) for i in range(1, 11)) - '243f6a8885' - >>> bailey_borwein_plouffe(5, 10000) - '6' - >>> bailey_borwein_plouffe(-10) - Traceback (most recent call last): - ... - ValueError: Digit position must be a positive integer - >>> bailey_borwein_plouffe(0) - Traceback (most recent call last): - ... - ValueError: Digit position must be a positive integer - >>> bailey_borwein_plouffe(1.7) - Traceback (most recent call last): - ... - ValueError: Digit position must be a positive integer - >>> bailey_borwein_plouffe(2, -10) - Traceback (most recent call last): - ... - ValueError: Precision must be a nonnegative integer - >>> bailey_borwein_plouffe(2, 1.6) - Traceback (most recent call last): - ... - ValueError: Precision must be a nonnegative integer - """ - if (not isinstance(digit_position, int)) or (digit_position <= 0): - raise ValueError("Digit position must be a positive integer") - elif (not isinstance(precision, int)) or (precision < 0): - raise ValueError("Precision must be a nonnegative integer") - - # compute an approximation of (16 ** (n - 1)) * pi whose fractional part is mostly - # accurate - sum_result = ( - 4 * _subsum(digit_position, 1, precision) - - 2 * _subsum(digit_position, 4, precision) - - _subsum(digit_position, 5, precision) - - _subsum(digit_position, 6, precision) - ) - - # return the first hex digit of the fractional part of the result - return hex(int((sum_result % 1) * 16))[2:] - - -def _subsum( - digit_pos_to_extract: int, denominator_addend: int, precision: int -) -> float: - # only care about first digit of fractional part; don't need decimal - """ - Private helper function to implement the summation - functionality. - @param digit_pos_to_extract: digit position to extract - @param denominator_addend: added to denominator of fractions in the formula - @param precision: same as precision in main function - @return: floating-point number whose integer part is not important - """ - total = 0.0 - for sum_index in range(digit_pos_to_extract + precision): - denominator = 8 * sum_index + denominator_addend - if sum_index < digit_pos_to_extract: - # if the exponential term is an integer and we mod it by the denominator - # before dividing, only the integer part of the sum will change; - # the fractional part will not - exponential_term = pow( - 16, digit_pos_to_extract - 1 - sum_index, denominator - ) - else: - exponential_term = pow(16, digit_pos_to_extract - 1 - sum_index) - total += exponential_term / denominator - return total - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/base_neg2_conversion.py b/maths/base_neg2_conversion.py deleted file mode 100644 index 81d40d37e79d..000000000000 --- a/maths/base_neg2_conversion.py +++ /dev/null @@ -1,37 +0,0 @@ -def decimal_to_negative_base_2(num: int) -> int: - """ - This function returns the number negative base 2 - of the decimal number of the input data. - - Args: - int: The decimal number to convert. - - Returns: - int: The negative base 2 number. - - Examples: - >>> decimal_to_negative_base_2(0) - 0 - >>> decimal_to_negative_base_2(-19) - 111101 - >>> decimal_to_negative_base_2(4) - 100 - >>> decimal_to_negative_base_2(7) - 11011 - """ - if num == 0: - return 0 - ans = "" - while num != 0: - num, rem = divmod(num, -2) - if rem < 0: - rem += 2 - num += 1 - ans = str(rem) + ans - return int(ans) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/basic_maths.py b/maths/basic_maths.py deleted file mode 100644 index 833f31c18b9e..000000000000 --- a/maths/basic_maths.py +++ /dev/null @@ -1,122 +0,0 @@ -"""Implementation of Basic Math in Python.""" - -import math - - -def prime_factors(n: int) -> list: - """Find Prime Factors. - >>> prime_factors(100) - [2, 2, 5, 5] - >>> prime_factors(0) - Traceback (most recent call last): - ... - ValueError: Only positive integers have prime factors - >>> prime_factors(-10) - Traceback (most recent call last): - ... - ValueError: Only positive integers have prime factors - """ - if n <= 0: - raise ValueError("Only positive integers have prime factors") - pf = [] - while n % 2 == 0: - pf.append(2) - n = int(n / 2) - for i in range(3, int(math.sqrt(n)) + 1, 2): - while n % i == 0: - pf.append(i) - n = int(n / i) - if n > 2: - pf.append(n) - return pf - - -def number_of_divisors(n: int) -> int: - """Calculate Number of Divisors of an Integer. - >>> number_of_divisors(100) - 9 - >>> number_of_divisors(0) - Traceback (most recent call last): - ... - ValueError: Only positive numbers are accepted - >>> number_of_divisors(-10) - Traceback (most recent call last): - ... - ValueError: Only positive numbers are accepted - """ - if n <= 0: - raise ValueError("Only positive numbers are accepted") - div = 1 - temp = 1 - while n % 2 == 0: - temp += 1 - n = int(n / 2) - div *= temp - for i in range(3, int(math.sqrt(n)) + 1, 2): - temp = 1 - while n % i == 0: - temp += 1 - n = int(n / i) - div *= temp - if n > 1: - div *= 2 - return div - - -def sum_of_divisors(n: int) -> int: - """Calculate Sum of Divisors. - >>> sum_of_divisors(100) - 217 - >>> sum_of_divisors(0) - Traceback (most recent call last): - ... - ValueError: Only positive numbers are accepted - >>> sum_of_divisors(-10) - Traceback (most recent call last): - ... - ValueError: Only positive numbers are accepted - """ - if n <= 0: - raise ValueError("Only positive numbers are accepted") - s = 1 - temp = 1 - while n % 2 == 0: - temp += 1 - n = int(n / 2) - if temp > 1: - s *= (2**temp - 1) / (2 - 1) - for i in range(3, int(math.sqrt(n)) + 1, 2): - temp = 1 - while n % i == 0: - temp += 1 - n = int(n / i) - if temp > 1: - s *= (i**temp - 1) / (i - 1) - return int(s) - - -def euler_phi(n: int) -> int: - """Calculate Euler's Phi Function. - >>> euler_phi(100) - 40 - >>> euler_phi(0) - Traceback (most recent call last): - ... - ValueError: Only positive numbers are accepted - >>> euler_phi(-10) - Traceback (most recent call last): - ... - ValueError: Only positive numbers are accepted - """ - if n <= 0: - raise ValueError("Only positive numbers are accepted") - s = n - for x in set(prime_factors(n)): - s *= (x - 1) / x - return int(s) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/binary_exponentiation.py b/maths/binary_exponentiation.py deleted file mode 100644 index 51ce86d26c41..000000000000 --- a/maths/binary_exponentiation.py +++ /dev/null @@ -1,196 +0,0 @@ -""" -Binary Exponentiation - -This is a method to find a^b in O(log b) time complexity and is one of the most commonly -used methods of exponentiation. The method is also useful for modular exponentiation, -when the solution to (a^b) % c is required. - -To calculate a^b: -- If b is even, then a^b = (a * a)^(b / 2) -- If b is odd, then a^b = a * a^(b - 1) -Repeat until b = 1 or b = 0 - -For modular exponentiation, we use the fact that (a * b) % c = ((a % c) * (b % c)) % c -""" - - -def binary_exp_recursive(base: float, exponent: int) -> float: - """ - Computes a^b recursively, where a is the base and b is the exponent - - >>> binary_exp_recursive(3, 5) - 243 - >>> binary_exp_recursive(11, 13) - 34522712143931 - >>> binary_exp_recursive(-1, 3) - -1 - >>> binary_exp_recursive(0, 5) - 0 - >>> binary_exp_recursive(3, 1) - 3 - >>> binary_exp_recursive(3, 0) - 1 - >>> binary_exp_recursive(1.5, 4) - 5.0625 - >>> binary_exp_recursive(3, -1) - Traceback (most recent call last): - ... - ValueError: Exponent must be a non-negative integer - """ - if exponent < 0: - raise ValueError("Exponent must be a non-negative integer") - - if exponent == 0: - return 1 - - if exponent % 2 == 1: - return binary_exp_recursive(base, exponent - 1) * base - - b = binary_exp_recursive(base, exponent // 2) - return b * b - - -def binary_exp_iterative(base: float, exponent: int) -> float: - """ - Computes a^b iteratively, where a is the base and b is the exponent - - >>> binary_exp_iterative(3, 5) - 243 - >>> binary_exp_iterative(11, 13) - 34522712143931 - >>> binary_exp_iterative(-1, 3) - -1 - >>> binary_exp_iterative(0, 5) - 0 - >>> binary_exp_iterative(3, 1) - 3 - >>> binary_exp_iterative(3, 0) - 1 - >>> binary_exp_iterative(1.5, 4) - 5.0625 - >>> binary_exp_iterative(3, -1) - Traceback (most recent call last): - ... - ValueError: Exponent must be a non-negative integer - """ - if exponent < 0: - raise ValueError("Exponent must be a non-negative integer") - - res: int | float = 1 - while exponent > 0: - if exponent & 1: - res *= base - - base *= base - exponent >>= 1 - - return res - - -def binary_exp_mod_recursive(base: float, exponent: int, modulus: int) -> float: - """ - Computes a^b % c recursively, where a is the base, b is the exponent, and c is the - modulus - - >>> binary_exp_mod_recursive(3, 4, 5) - 1 - >>> binary_exp_mod_recursive(11, 13, 7) - 4 - >>> binary_exp_mod_recursive(1.5, 4, 3) - 2.0625 - >>> binary_exp_mod_recursive(7, -1, 10) - Traceback (most recent call last): - ... - ValueError: Exponent must be a non-negative integer - >>> binary_exp_mod_recursive(7, 13, 0) - Traceback (most recent call last): - ... - ValueError: Modulus must be a positive integer - """ - if exponent < 0: - raise ValueError("Exponent must be a non-negative integer") - if modulus <= 0: - raise ValueError("Modulus must be a positive integer") - - if exponent == 0: - return 1 - - if exponent % 2 == 1: - return (binary_exp_mod_recursive(base, exponent - 1, modulus) * base) % modulus - - r = binary_exp_mod_recursive(base, exponent // 2, modulus) - return (r * r) % modulus - - -def binary_exp_mod_iterative(base: float, exponent: int, modulus: int) -> float: - """ - Computes a^b % c iteratively, where a is the base, b is the exponent, and c is the - modulus - - >>> binary_exp_mod_iterative(3, 4, 5) - 1 - >>> binary_exp_mod_iterative(11, 13, 7) - 4 - >>> binary_exp_mod_iterative(1.5, 4, 3) - 2.0625 - >>> binary_exp_mod_iterative(7, -1, 10) - Traceback (most recent call last): - ... - ValueError: Exponent must be a non-negative integer - >>> binary_exp_mod_iterative(7, 13, 0) - Traceback (most recent call last): - ... - ValueError: Modulus must be a positive integer - """ - if exponent < 0: - raise ValueError("Exponent must be a non-negative integer") - if modulus <= 0: - raise ValueError("Modulus must be a positive integer") - - res: int | float = 1 - while exponent > 0: - if exponent & 1: - res = ((res % modulus) * (base % modulus)) % modulus - - base *= base - exponent >>= 1 - - return res - - -if __name__ == "__main__": - from timeit import timeit - - a = 1269380576 - b = 374 - c = 34 - - runs = 100_000 - print( - timeit( - f"binary_exp_recursive({a}, {b})", - setup="from __main__ import binary_exp_recursive", - number=runs, - ) - ) - print( - timeit( - f"binary_exp_iterative({a}, {b})", - setup="from __main__ import binary_exp_iterative", - number=runs, - ) - ) - print( - timeit( - f"binary_exp_mod_recursive({a}, {b}, {c})", - setup="from __main__ import binary_exp_mod_recursive", - number=runs, - ) - ) - print( - timeit( - f"binary_exp_mod_iterative({a}, {b}, {c})", - setup="from __main__ import binary_exp_mod_iterative", - number=runs, - ) - ) diff --git a/maths/binary_multiplication.py b/maths/binary_multiplication.py deleted file mode 100644 index 0cc5a575f445..000000000000 --- a/maths/binary_multiplication.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -Binary Multiplication -This is a method to find a*b in a time complexity of O(log b) -This is one of the most commonly used methods of finding result of multiplication. -Also useful in cases where solution to (a*b)%c is required, -where a,b,c can be numbers over the computers calculation limits. -Done using iteration, can also be done using recursion - -Let's say you need to calculate a * b -RULE 1 : a * b = (a+a) * (b/2) ---- example : 4 * 4 = (4+4) * (4/2) = 8 * 2 -RULE 2 : IF b is odd, then ---- a * b = a + (a * (b - 1)), where (b - 1) is even. -Once b is even, repeat the process to get a * b -Repeat the process until b = 1 or b = 0, because a*1 = a and a*0 = 0 - -As far as the modulo is concerned, -the fact : (a+b) % c = ((a%c) + (b%c)) % c -Now apply RULE 1 or 2, whichever is required. - -@author chinmoy159 -""" - - -def binary_multiply(a: int, b: int) -> int: - """ - Multiply 'a' and 'b' using bitwise multiplication. - - Parameters: - a (int): The first number. - b (int): The second number. - - Returns: - int: a * b - - Examples: - >>> binary_multiply(2, 3) - 6 - >>> binary_multiply(5, 0) - 0 - >>> binary_multiply(3, 4) - 12 - >>> binary_multiply(10, 5) - 50 - >>> binary_multiply(0, 5) - 0 - >>> binary_multiply(2, 1) - 2 - >>> binary_multiply(1, 10) - 10 - """ - res = 0 - while b > 0: - if b & 1: - res += a - - a += a - b >>= 1 - - return res - - -def binary_mod_multiply(a: int, b: int, modulus: int) -> int: - """ - Calculate (a * b) % c using binary multiplication and modular arithmetic. - - Parameters: - a (int): The first number. - b (int): The second number. - modulus (int): The modulus. - - Returns: - int: (a * b) % modulus. - - Examples: - >>> binary_mod_multiply(2, 3, 5) - 1 - >>> binary_mod_multiply(5, 0, 7) - 0 - >>> binary_mod_multiply(3, 4, 6) - 0 - >>> binary_mod_multiply(10, 5, 13) - 11 - >>> binary_mod_multiply(2, 1, 5) - 2 - >>> binary_mod_multiply(1, 10, 3) - 1 - """ - res = 0 - while b > 0: - if b & 1: - res = ((res % modulus) + (a % modulus)) % modulus - - a += a - b >>= 1 - - return res - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/binomial_coefficient.py b/maths/binomial_coefficient.py deleted file mode 100644 index 24c54326e305..000000000000 --- a/maths/binomial_coefficient.py +++ /dev/null @@ -1,62 +0,0 @@ -def binomial_coefficient(n: int, r: int) -> int: - """ - Find binomial coefficient using Pascal's triangle. - - Calculate C(n, r) using Pascal's triangle. - - :param n: The total number of items. - :param r: The number of items to choose. - :return: The binomial coefficient C(n, r). - - >>> binomial_coefficient(10, 5) - 252 - >>> binomial_coefficient(10, 0) - 1 - >>> binomial_coefficient(0, 10) - 1 - >>> binomial_coefficient(10, 10) - 1 - >>> binomial_coefficient(5, 2) - 10 - >>> binomial_coefficient(5, 6) - 0 - >>> binomial_coefficient(3, 5) - 0 - >>> binomial_coefficient(-2, 3) - Traceback (most recent call last): - ... - ValueError: n and r must be non-negative integers - >>> binomial_coefficient(5, -1) - Traceback (most recent call last): - ... - ValueError: n and r must be non-negative integers - >>> binomial_coefficient(10.1, 5) - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - >>> binomial_coefficient(10, 5.1) - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - """ - if n < 0 or r < 0: - raise ValueError("n and r must be non-negative integers") - if 0 in (n, r): - return 1 - c = [0 for i in range(r + 1)] - # nc0 = 1 - c[0] = 1 - for i in range(1, n + 1): - # to compute current row from previous row. - j = min(i, r) - while j > 0: - c[j] += c[j - 1] - j -= 1 - return c[r] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(binomial_coefficient(n=10, r=5)) diff --git a/maths/binomial_distribution.py b/maths/binomial_distribution.py deleted file mode 100644 index eabcaea0d1b2..000000000000 --- a/maths/binomial_distribution.py +++ /dev/null @@ -1,41 +0,0 @@ -"""For more information about the Binomial Distribution - -https://en.wikipedia.org/wiki/Binomial_distribution""" - -from math import factorial - - -def binomial_distribution(successes: int, trials: int, prob: float) -> float: - """ - Return probability of k successes out of n tries, with p probability for one - success - - The function uses the factorial function in order to calculate the binomial - coefficient - - >>> binomial_distribution(3, 5, 0.7) - 0.30870000000000003 - >>> binomial_distribution (2, 4, 0.5) - 0.375 - """ - if successes > trials: - raise ValueError("""successes must be lower or equal to trials""") - if trials < 0 or successes < 0: - raise ValueError("the function is defined for non-negative integers") - if not isinstance(successes, int) or not isinstance(trials, int): - raise ValueError("the function is defined for non-negative integers") - if not 0 < prob < 1: - raise ValueError("prob has to be in range of 1 - 0") - probability = (prob**successes) * ((1 - prob) ** (trials - successes)) - # Calculate the binomial coefficient: n! / k!(n-k)! - coefficient = float(factorial(trials)) - coefficient /= factorial(successes) * factorial(trials - successes) - return probability * coefficient - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print("Probability of 2 successes out of 4 trails") - print("with probability of 0.75 is:", end=" ") - print(binomial_distribution(2, 4, 0.75)) diff --git a/maths/ceil.py b/maths/ceil.py deleted file mode 100644 index 909e02b3f780..000000000000 --- a/maths/ceil.py +++ /dev/null @@ -1,24 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Floor_and_ceiling_functions -""" - - -def ceil(x: float) -> int: - """ - Return the ceiling of x as an Integral. - - :param x: the number - :return: the smallest integer >= x. - - >>> import math - >>> all(ceil(n) == math.ceil(n) for n - ... in (1, -1, 0, -0, 1.1, -1.1, 1.0, -1.0, 1_000_000_000)) - True - """ - return int(x) if x - int(x) <= 0 else int(x) + 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/chebyshev_distance.py b/maths/chebyshev_distance.py deleted file mode 100644 index 4801d391621f..000000000000 --- a/maths/chebyshev_distance.py +++ /dev/null @@ -1,20 +0,0 @@ -def chebyshev_distance(point_a: list[float], point_b: list[float]) -> float: - """ - This function calculates the Chebyshev distance (also known as the - Chessboard distance) between two n-dimensional points represented as lists. - - https://en.wikipedia.org/wiki/Chebyshev_distance - - >>> chebyshev_distance([1.0, 1.0], [2.0, 2.0]) - 1.0 - >>> chebyshev_distance([1.0, 1.0, 9.0], [2.0, 2.0, -5.2]) - 14.2 - >>> chebyshev_distance([1.0], [2.0, 2.0]) - Traceback (most recent call last): - ... - ValueError: Both points must have the same dimension. - """ - if len(point_a) != len(point_b): - raise ValueError("Both points must have the same dimension.") - - return max(abs(a - b) for a, b in zip(point_a, point_b)) diff --git a/maths/check_polygon.py b/maths/check_polygon.py deleted file mode 100644 index 1e8dce7183ad..000000000000 --- a/maths/check_polygon.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import annotations - - -def check_polygon(nums: list[float]) -> bool: - """ - Takes list of possible side lengths and determines whether a - two-dimensional polygon with such side lengths can exist. - - Returns a boolean value for the < comparison - of the largest side length with sum of the rest. - Wiki: https://en.wikipedia.org/wiki/Triangle_inequality - - >>> check_polygon([6, 10, 5]) - True - >>> check_polygon([3, 7, 13, 2]) - False - >>> check_polygon([1, 4.3, 5.2, 12.2]) - False - >>> nums = [3, 7, 13, 2] - >>> _ = check_polygon(nums) # Run function, do not show answer in output - >>> nums # Check numbers are not reordered - [3, 7, 13, 2] - >>> check_polygon([]) - Traceback (most recent call last): - ... - ValueError: Monogons and Digons are not polygons in the Euclidean space - >>> check_polygon([-2, 5, 6]) - Traceback (most recent call last): - ... - ValueError: All values must be greater than 0 - """ - if len(nums) < 2: - raise ValueError("Monogons and Digons are not polygons in the Euclidean space") - if any(i <= 0 for i in nums): - raise ValueError("All values must be greater than 0") - copy_nums = nums.copy() - copy_nums.sort() - return copy_nums[-1] < sum(copy_nums[:-1]) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/chinese_remainder_theorem.py b/maths/chinese_remainder_theorem.py deleted file mode 100644 index 18af63d106e8..000000000000 --- a/maths/chinese_remainder_theorem.py +++ /dev/null @@ -1,96 +0,0 @@ -""" -Chinese Remainder Theorem: -GCD ( Greatest Common Divisor ) or HCF ( Highest Common Factor ) - -If GCD(a,b) = 1, then for any remainder ra modulo a and any remainder rb modulo b -there exists integer n, such that n = ra (mod a) and n = ra(mod b). If n1 and n2 are -two such integers, then n1=n2(mod ab) - -Algorithm : - -1. Use extended euclid algorithm to find x,y such that a*x + b*y = 1 -2. Take n = ra*by + rb*ax -""" - -from __future__ import annotations - - -# Extended Euclid -def extended_euclid(a: int, b: int) -> tuple[int, int]: - """ - >>> extended_euclid(10, 6) - (-1, 2) - - >>> extended_euclid(7, 5) - (-2, 3) - - """ - if b == 0: - return (1, 0) - (x, y) = extended_euclid(b, a % b) - k = a // b - return (y, x - k * y) - - -# Uses ExtendedEuclid to find inverses -def chinese_remainder_theorem(n1: int, r1: int, n2: int, r2: int) -> int: - """ - >>> chinese_remainder_theorem(5,1,7,3) - 31 - - Explanation : 31 is the smallest number such that - (i) When we divide it by 5, we get remainder 1 - (ii) When we divide it by 7, we get remainder 3 - - >>> chinese_remainder_theorem(6,1,4,3) - 14 - - """ - (x, y) = extended_euclid(n1, n2) - m = n1 * n2 - n = r2 * x * n1 + r1 * y * n2 - return (n % m + m) % m - - -# ----------SAME SOLUTION USING InvertModulo instead ExtendedEuclid---------------- - - -# This function find the inverses of a i.e., a^(-1) -def invert_modulo(a: int, n: int) -> int: - """ - >>> invert_modulo(2, 5) - 3 - - >>> invert_modulo(8,7) - 1 - - """ - (b, x) = extended_euclid(a, n) - if b < 0: - b = (b % n + n) % n - return b - - -# Same a above using InvertingModulo -def chinese_remainder_theorem2(n1: int, r1: int, n2: int, r2: int) -> int: - """ - >>> chinese_remainder_theorem2(5,1,7,3) - 31 - - >>> chinese_remainder_theorem2(6,1,4,3) - 14 - - """ - x, y = invert_modulo(n1, n2), invert_modulo(n2, n1) - m = n1 * n2 - n = r2 * x * n1 + r1 * y * n2 - return (n % m + m) % m - - -if __name__ == "__main__": - from doctest import testmod - - testmod(name="chinese_remainder_theorem", verbose=True) - testmod(name="chinese_remainder_theorem2", verbose=True) - testmod(name="invert_modulo", verbose=True) - testmod(name="extended_euclid", verbose=True) diff --git a/maths/chudnovsky_algorithm.py b/maths/chudnovsky_algorithm.py deleted file mode 100644 index d122bf0756f7..000000000000 --- a/maths/chudnovsky_algorithm.py +++ /dev/null @@ -1,60 +0,0 @@ -from decimal import Decimal, getcontext -from math import ceil, factorial - - -def pi(precision: int) -> str: - """ - The Chudnovsky algorithm is a fast method for calculating the digits of PI, - based on Ramanujan's PI formulae. - - https://en.wikipedia.org/wiki/Chudnovsky_algorithm - - PI = constant_term / ((multinomial_term * linear_term) / exponential_term) - where constant_term = 426880 * sqrt(10005) - - The linear_term and the exponential_term can be defined iteratively as follows: - L_k+1 = L_k + 545140134 where L_0 = 13591409 - X_k+1 = X_k * -262537412640768000 where X_0 = 1 - - The multinomial_term is defined as follows: - 6k! / ((3k)! * (k!) ^ 3) - where k is the k_th iteration. - - This algorithm correctly calculates around 14 digits of PI per iteration - - >>> pi(10) - '3.14159265' - >>> pi(100) - '3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706' - >>> pi('hello') - Traceback (most recent call last): - ... - TypeError: Undefined for non-integers - >>> pi(-1) - Traceback (most recent call last): - ... - ValueError: Undefined for non-natural numbers - """ - - if not isinstance(precision, int): - raise TypeError("Undefined for non-integers") - elif precision < 1: - raise ValueError("Undefined for non-natural numbers") - - getcontext().prec = precision - num_iterations = ceil(precision / 14) - constant_term = 426880 * Decimal(10005).sqrt() - exponential_term = 1 - linear_term = 13591409 - partial_sum = Decimal(linear_term) - for k in range(1, num_iterations): - multinomial_term = factorial(6 * k) // (factorial(3 * k) * factorial(k) ** 3) - linear_term += 545140134 - exponential_term *= -262537412640768000 - partial_sum += Decimal(multinomial_term * linear_term) / exponential_term - return str(constant_term / partial_sum)[:-1] - - -if __name__ == "__main__": - n = 50 - print(f"The first {n} digits of pi is: {pi(n)}") diff --git a/maths/collatz_sequence.py b/maths/collatz_sequence.py deleted file mode 100644 index b47017146a1e..000000000000 --- a/maths/collatz_sequence.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -The Collatz conjecture is a famous unsolved problem in mathematics. Given a starting -positive integer, define the following sequence: -- If the current term n is even, then the next term is n/2. -- If the current term n is odd, then the next term is 3n + 1. -The conjecture claims that this sequence will always reach 1 for any starting number. - -Other names for this problem include the 3n + 1 problem, the Ulam conjecture, Kakutani's -problem, the Thwaites conjecture, Hasse's algorithm, the Syracuse problem, and the -hailstone sequence. - -Reference: https://en.wikipedia.org/wiki/Collatz_conjecture -""" - -from __future__ import annotations - -from collections.abc import Generator - - -def collatz_sequence(n: int) -> Generator[int, None, None]: - """ - Generate the Collatz sequence starting at n. - >>> tuple(collatz_sequence(2.1)) - Traceback (most recent call last): - ... - Exception: Sequence only defined for positive integers - >>> tuple(collatz_sequence(0)) - Traceback (most recent call last): - ... - Exception: Sequence only defined for positive integers - >>> tuple(collatz_sequence(4)) - (4, 2, 1) - >>> tuple(collatz_sequence(11)) - (11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1) - >>> tuple(collatz_sequence(31)) # doctest: +NORMALIZE_WHITESPACE - (31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, - 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, - 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, - 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, - 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, - 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, - 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1) - >>> tuple(collatz_sequence(43)) # doctest: +NORMALIZE_WHITESPACE - (43, 130, 65, 196, 98, 49, 148, 74, 37, 112, 56, 28, 14, 7, 22, 11, 34, 17, 52, 26, - 13, 40, 20, 10, 5, 16, 8, 4, 2, 1) - """ - if not isinstance(n, int) or n < 1: - raise Exception("Sequence only defined for positive integers") - - yield n - while n != 1: - if n % 2 == 0: - n //= 2 - else: - n = 3 * n + 1 - yield n - - -def main(): - n = int(input("Your number: ")) - sequence = tuple(collatz_sequence(n)) - print(sequence) - print(f"Collatz sequence from {n} took {len(sequence)} steps.") - - -if __name__ == "__main__": - main() diff --git a/maths/combinations.py b/maths/combinations.py deleted file mode 100644 index 6e9e1a807067..000000000000 --- a/maths/combinations.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Combination -""" - - -def combinations(n: int, k: int) -> int: - """ - Returns the number of different combinations of k length which can - be made from n values, where n >= k. - - Examples: - >>> combinations(10,5) - 252 - - >>> combinations(6,3) - 20 - - >>> combinations(20,5) - 15504 - - >>> combinations(52, 5) - 2598960 - - >>> combinations(0, 0) - 1 - - >>> combinations(-4, -5) - ... - Traceback (most recent call last): - ValueError: Please enter positive integers for n and k where n >= k - """ - - # If either of the conditions are true, the function is being asked - # to calculate a factorial of a negative number, which is not possible - if n < k or k < 0: - raise ValueError("Please enter positive integers for n and k where n >= k") - res = 1 - for i in range(k): - res *= n - i - res //= i + 1 - return res - - -if __name__ == "__main__": - print( - "The number of five-card hands possible from a standard", - f"fifty-two card deck is: {combinations(52, 5)}\n", - ) - - print( - "If a class of 40 students must be arranged into groups of", - f"4 for group projects, there are {combinations(40, 4)} ways", - "to arrange them.\n", - ) - - print( - "If 10 teams are competing in a Formula One race, there", - f"are {combinations(10, 3)} ways that first, second and", - "third place can be awarded.", - ) diff --git a/maths/continued_fraction.py b/maths/continued_fraction.py deleted file mode 100644 index 2c38bf88b1e9..000000000000 --- a/maths/continued_fraction.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Finding the continuous fraction for a rational number using python - -https://en.wikipedia.org/wiki/Continued_fraction -""" - -from fractions import Fraction -from math import floor - - -def continued_fraction(num: Fraction) -> list[int]: - """ - :param num: - Fraction of the number whose continued fractions to be found. - Use Fraction(str(number)) for more accurate results due to - float inaccuracies. - - :return: - The continued fraction of rational number. - It is the all commas in the (n + 1)-tuple notation. - - >>> continued_fraction(Fraction(2)) - [2] - >>> continued_fraction(Fraction("3.245")) - [3, 4, 12, 4] - >>> continued_fraction(Fraction("2.25")) - [2, 4] - >>> continued_fraction(1/Fraction("2.25")) - [0, 2, 4] - >>> continued_fraction(Fraction("415/93")) - [4, 2, 6, 7] - >>> continued_fraction(Fraction(0)) - [0] - >>> continued_fraction(Fraction(0.75)) - [0, 1, 3] - >>> continued_fraction(Fraction("-2.25")) # -2.25 = -3 + 0.75 - [-3, 1, 3] - """ - numerator, denominator = num.as_integer_ratio() - continued_fraction_list: list[int] = [] - while True: - integer_part = floor(numerator / denominator) - continued_fraction_list.append(integer_part) - numerator -= integer_part * denominator - if numerator == 0: - break - numerator, denominator = denominator, numerator - - return continued_fraction_list - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print("Continued Fraction of 0.84375 is: ", continued_fraction(Fraction("0.84375"))) diff --git a/maths/decimal_isolate.py b/maths/decimal_isolate.py deleted file mode 100644 index 058ed1bb90d1..000000000000 --- a/maths/decimal_isolate.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -Isolate the Decimal part of a Number -https://stackoverflow.com/questions/3886402/how-to-get-numbers-after-decimal-point -""" - - -def decimal_isolate(number: float, digit_amount: int) -> float: - """ - Isolates the decimal part of a number. - If digitAmount > 0 round to that decimal place, else print the entire decimal. - >>> decimal_isolate(1.53, 0) - 0.53 - >>> decimal_isolate(35.345, 1) - 0.3 - >>> decimal_isolate(35.345, 2) - 0.34 - >>> decimal_isolate(35.345, 3) - 0.345 - >>> decimal_isolate(-14.789, 3) - -0.789 - >>> decimal_isolate(0, 2) - 0 - >>> decimal_isolate(-14.123, 1) - -0.1 - >>> decimal_isolate(-14.123, 2) - -0.12 - >>> decimal_isolate(-14.123, 3) - -0.123 - """ - if digit_amount > 0: - return round(number - int(number), digit_amount) - return number - int(number) - - -if __name__ == "__main__": - print(decimal_isolate(1.53, 0)) - print(decimal_isolate(35.345, 1)) - print(decimal_isolate(35.345, 2)) - print(decimal_isolate(35.345, 3)) - print(decimal_isolate(-14.789, 3)) - print(decimal_isolate(0, 2)) - print(decimal_isolate(-14.123, 1)) - print(decimal_isolate(-14.123, 2)) - print(decimal_isolate(-14.123, 3)) diff --git a/maths/decimal_to_fraction.py b/maths/decimal_to_fraction.py deleted file mode 100644 index 2aa8e3c3dfd6..000000000000 --- a/maths/decimal_to_fraction.py +++ /dev/null @@ -1,48 +0,0 @@ -def decimal_to_fraction(decimal: float | str) -> tuple[int, int]: - """ - Return a decimal number in its simplest fraction form - >>> decimal_to_fraction(2) - (2, 1) - >>> decimal_to_fraction(89.) - (89, 1) - >>> decimal_to_fraction("67") - (67, 1) - >>> decimal_to_fraction("45.0") - (45, 1) - >>> decimal_to_fraction(1.5) - (3, 2) - >>> decimal_to_fraction("6.25") - (25, 4) - >>> decimal_to_fraction("78td") - Traceback (most recent call last): - ValueError: Please enter a valid number - """ - try: - decimal = float(decimal) - except ValueError: - raise ValueError("Please enter a valid number") - fractional_part = decimal - int(decimal) - if fractional_part == 0: - return int(decimal), 1 - else: - number_of_frac_digits = len(str(decimal).split(".")[1]) - numerator = int(decimal * (10**number_of_frac_digits)) - denominator = 10**number_of_frac_digits - divisor, dividend = denominator, numerator - while True: - remainder = dividend % divisor - if remainder == 0: - break - dividend, divisor = divisor, remainder - numerator, denominator = numerator / divisor, denominator / divisor - return int(numerator), int(denominator) - - -if __name__ == "__main__": - print(f"{decimal_to_fraction(2) = }") - print(f"{decimal_to_fraction(89.0) = }") - print(f"{decimal_to_fraction('67') = }") - print(f"{decimal_to_fraction('45.0') = }") - print(f"{decimal_to_fraction(1.5) = }") - print(f"{decimal_to_fraction('6.25') = }") - print(f"{decimal_to_fraction('78td') = }") diff --git a/maths/dodecahedron.py b/maths/dodecahedron.py deleted file mode 100644 index 856245f4a868..000000000000 --- a/maths/dodecahedron.py +++ /dev/null @@ -1,73 +0,0 @@ -# dodecahedron.py - -""" -A regular dodecahedron is a three-dimensional figure made up of -12 pentagon faces having the same equal size. -""" - - -def dodecahedron_surface_area(edge: float) -> float: - """ - Calculates the surface area of a regular dodecahedron - a = 3 * ((25 + 10 * (5** (1 / 2))) ** (1 / 2 )) * (e**2) - where: - a --> is the area of the dodecahedron - e --> is the length of the edge - reference-->"Dodecahedron" Study.com - <https://study.com/academy/lesson/dodecahedron-volume-surface-area-formulas.html> - - :param edge: length of the edge of the dodecahedron - :type edge: float - :return: the surface area of the dodecahedron as a float - - - Tests: - >>> dodecahedron_surface_area(5) - 516.1432201766901 - >>> dodecahedron_surface_area(10) - 2064.5728807067603 - >>> dodecahedron_surface_area(-1) - Traceback (most recent call last): - ... - ValueError: Length must be a positive. - """ - - if edge <= 0 or not isinstance(edge, int): - raise ValueError("Length must be a positive.") - return 3 * ((25 + 10 * (5 ** (1 / 2))) ** (1 / 2)) * (edge**2) - - -def dodecahedron_volume(edge: float) -> float: - """ - Calculates the volume of a regular dodecahedron - v = ((15 + (7 * (5** (1 / 2)))) / 4) * (e**3) - where: - v --> is the volume of the dodecahedron - e --> is the length of the edge - reference-->"Dodecahedron" Study.com - <https://study.com/academy/lesson/dodecahedron-volume-surface-area-formulas.html> - - :param edge: length of the edge of the dodecahedron - :type edge: float - :return: the volume of the dodecahedron as a float - - Tests: - >>> dodecahedron_volume(5) - 957.8898700780791 - >>> dodecahedron_volume(10) - 7663.118960624633 - >>> dodecahedron_volume(-1) - Traceback (most recent call last): - ... - ValueError: Length must be a positive. - """ - - if edge <= 0 or not isinstance(edge, int): - raise ValueError("Length must be a positive.") - return ((15 + (7 * (5 ** (1 / 2)))) / 4) * (edge**3) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/double_factorial.py b/maths/double_factorial.py deleted file mode 100644 index 3c3a28304e95..000000000000 --- a/maths/double_factorial.py +++ /dev/null @@ -1,60 +0,0 @@ -def double_factorial_recursive(n: int) -> int: - """ - Compute double factorial using recursive method. - Recursion can be costly for large numbers. - - To learn about the theory behind this algorithm: - https://en.wikipedia.org/wiki/Double_factorial - - >>> from math import prod - >>> all(double_factorial_recursive(i) == prod(range(i, 0, -2)) for i in range(20)) - True - >>> double_factorial_recursive(0.1) - Traceback (most recent call last): - ... - ValueError: double_factorial_recursive() only accepts integral values - >>> double_factorial_recursive(-1) - Traceback (most recent call last): - ... - ValueError: double_factorial_recursive() not defined for negative values - """ - if not isinstance(n, int): - raise ValueError("double_factorial_recursive() only accepts integral values") - if n < 0: - raise ValueError("double_factorial_recursive() not defined for negative values") - return 1 if n <= 1 else n * double_factorial_recursive(n - 2) - - -def double_factorial_iterative(num: int) -> int: - """ - Compute double factorial using iterative method. - - To learn about the theory behind this algorithm: - https://en.wikipedia.org/wiki/Double_factorial - - >>> from math import prod - >>> all(double_factorial_iterative(i) == prod(range(i, 0, -2)) for i in range(20)) - True - >>> double_factorial_iterative(0.1) - Traceback (most recent call last): - ... - ValueError: double_factorial_iterative() only accepts integral values - >>> double_factorial_iterative(-1) - Traceback (most recent call last): - ... - ValueError: double_factorial_iterative() not defined for negative values - """ - if not isinstance(num, int): - raise ValueError("double_factorial_iterative() only accepts integral values") - if num < 0: - raise ValueError("double_factorial_iterative() not defined for negative values") - value = 1 - for i in range(num, 0, -2): - value *= i - return value - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/dual_number_automatic_differentiation.py b/maths/dual_number_automatic_differentiation.py deleted file mode 100644 index f98997c8be4d..000000000000 --- a/maths/dual_number_automatic_differentiation.py +++ /dev/null @@ -1,141 +0,0 @@ -from math import factorial - -""" -https://en.wikipedia.org/wiki/Automatic_differentiation#Automatic_differentiation_using_dual_numbers -https://blog.jliszka.org/2013/10/24/exact-numeric-nth-derivatives.html - -Note this only works for basic functions, f(x) where the power of x is positive. -""" - - -class Dual: - def __init__(self, real, rank): - self.real = real - if isinstance(rank, int): - self.duals = [1] * rank - else: - self.duals = rank - - def __repr__(self): - return ( - f"{self.real}+" - f"{'+'.join(str(dual)+'E'+str(n+1)for n,dual in enumerate(self.duals))}" - ) - - def reduce(self): - cur = self.duals.copy() - while cur[-1] == 0: - cur.pop(-1) - return Dual(self.real, cur) - - def __add__(self, other): - if not isinstance(other, Dual): - return Dual(self.real + other, self.duals) - s_dual = self.duals.copy() - o_dual = other.duals.copy() - if len(s_dual) > len(o_dual): - o_dual.extend([1] * (len(s_dual) - len(o_dual))) - elif len(s_dual) < len(o_dual): - s_dual.extend([1] * (len(o_dual) - len(s_dual))) - new_duals = [] - for i in range(len(s_dual)): - new_duals.append(s_dual[i] + o_dual[i]) - return Dual(self.real + other.real, new_duals) - - __radd__ = __add__ - - def __sub__(self, other): - return self + other * -1 - - def __mul__(self, other): - if not isinstance(other, Dual): - new_duals = [] - for i in self.duals: - new_duals.append(i * other) - return Dual(self.real * other, new_duals) - new_duals = [0] * (len(self.duals) + len(other.duals) + 1) - for i, item in enumerate(self.duals): - for j, jtem in enumerate(other.duals): - new_duals[i + j + 1] += item * jtem - for k in range(len(self.duals)): - new_duals[k] += self.duals[k] * other.real - for index in range(len(other.duals)): - new_duals[index] += other.duals[index] * self.real - return Dual(self.real * other.real, new_duals) - - __rmul__ = __mul__ - - def __truediv__(self, other): - if not isinstance(other, Dual): - new_duals = [] - for i in self.duals: - new_duals.append(i / other) - return Dual(self.real / other, new_duals) - raise ValueError - - def __floordiv__(self, other): - if not isinstance(other, Dual): - new_duals = [] - for i in self.duals: - new_duals.append(i // other) - return Dual(self.real // other, new_duals) - raise ValueError - - def __pow__(self, n): - if n < 0 or isinstance(n, float): - raise ValueError("power must be a positive integer") - if n == 0: - return 1 - if n == 1: - return self - x = self - for _ in range(n - 1): - x *= self - return x - - -def differentiate(func, position, order): - """ - >>> differentiate(lambda x: x**2, 2, 2) - 2 - >>> differentiate(lambda x: x**2 * x**4, 9, 2) - 196830 - >>> differentiate(lambda y: 0.5 * (y + 3) ** 6, 3.5, 4) - 7605.0 - >>> differentiate(lambda y: y ** 2, 4, 3) - 0 - >>> differentiate(8, 8, 8) - Traceback (most recent call last): - ... - ValueError: differentiate() requires a function as input for func - >>> differentiate(lambda x: x **2, "", 1) - Traceback (most recent call last): - ... - ValueError: differentiate() requires a float as input for position - >>> differentiate(lambda x: x**2, 3, "") - Traceback (most recent call last): - ... - ValueError: differentiate() requires an int as input for order - """ - if not callable(func): - raise ValueError("differentiate() requires a function as input for func") - if not isinstance(position, (float, int)): - raise ValueError("differentiate() requires a float as input for position") - if not isinstance(order, int): - raise ValueError("differentiate() requires an int as input for order") - d = Dual(position, 1) - result = func(d) - if order == 0: - return result.real - return result.duals[order - 1] * factorial(order) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - def f(y): - return y**2 * y**4 - - print(differentiate(f, 9, 2)) diff --git a/maths/entropy.py b/maths/entropy.py deleted file mode 100644 index b816f1d193f7..000000000000 --- a/maths/entropy.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python3 - -""" -Implementation of entropy of information -https://en.wikipedia.org/wiki/Entropy_(information_theory) -""" - -from __future__ import annotations - -import math -from collections import Counter -from string import ascii_lowercase - - -def calculate_prob(text: str) -> None: - """ - This method takes path and two dict as argument - and than calculates entropy of them. - :param dict: - :param dict: - :return: Prints - 1) Entropy of information based on 1 alphabet - 2) Entropy of information based on couples of 2 alphabet - 3) print Entropy of H(X n|Xn-1) - - Text from random books. Also, random quotes. - >>> text = ("Behind Winston's back the voice " - ... "from the telescreen was still " - ... "babbling and the overfulfilment") - >>> calculate_prob(text) - 4.0 - 6.0 - 2.0 - - >>> text = ("The Ministry of Truth—Minitrue, in Newspeak [Newspeak was the official" - ... "face in elegant lettering, the three") - >>> calculate_prob(text) - 4.0 - 5.0 - 1.0 - >>> text = ("Had repulsive dashwoods suspicion sincerity but advantage now him. " - ... "Remark easily garret nor nay. Civil those mrs enjoy shy fat merry. " - ... "You greatest jointure saw horrible. He private he on be imagine " - ... "suppose. Fertile beloved evident through no service elderly is. Blind " - ... "there if every no so at. Own neglected you preferred way sincerity " - ... "delivered his attempted. To of message cottage windows do besides " - ... "against uncivil. Delightful unreserved impossible few estimating " - ... "men favourable see entreaties. She propriety immediate was improving. " - ... "He or entrance humoured likewise moderate. Much nor game son say " - ... "feel. Fat make met can must form into gate. Me we offending prevailed " - ... "discovery.") - >>> calculate_prob(text) - 4.0 - 7.0 - 3.0 - """ - single_char_strings, two_char_strings = analyze_text(text) - my_alphas = list(" " + ascii_lowercase) - # what is our total sum of probabilities. - all_sum = sum(single_char_strings.values()) - - # one length string - my_fir_sum = 0 - # for each alpha we go in our dict and if it is in it we calculate entropy - for ch in my_alphas: - if ch in single_char_strings: - my_str = single_char_strings[ch] - prob = my_str / all_sum - my_fir_sum += prob * math.log2(prob) # entropy formula. - - # print entropy - print(f"{round(-1 * my_fir_sum):.1f}") - - # two len string - all_sum = sum(two_char_strings.values()) - my_sec_sum = 0 - # for each alpha (two in size) calculate entropy. - for ch0 in my_alphas: - for ch1 in my_alphas: - sequence = ch0 + ch1 - if sequence in two_char_strings: - my_str = two_char_strings[sequence] - prob = int(my_str) / all_sum - my_sec_sum += prob * math.log2(prob) - - # print second entropy - print(f"{round(-1 * my_sec_sum):.1f}") - - # print the difference between them - print(f"{round((-1 * my_sec_sum) - (-1 * my_fir_sum)):.1f}") - - -def analyze_text(text: str) -> tuple[dict, dict]: - """ - Convert text input into two dicts of counts. - The first dictionary stores the frequency of single character strings. - The second dictionary stores the frequency of two character strings. - """ - single_char_strings = Counter() # type: ignore[var-annotated] - two_char_strings = Counter() # type: ignore[var-annotated] - single_char_strings[text[-1]] += 1 - - # first case when we have space at start. - two_char_strings[" " + text[0]] += 1 - for i in range(len(text) - 1): - single_char_strings[text[i]] += 1 - two_char_strings[text[i : i + 2]] += 1 - return single_char_strings, two_char_strings - - -def main(): - import doctest - - doctest.testmod() - # text = ( - # "Had repulsive dashwoods suspicion sincerity but advantage now him. Remark " - # "easily garret nor nay. Civil those mrs enjoy shy fat merry. You greatest " - # "jointure saw horrible. He private he on be imagine suppose. Fertile " - # "beloved evident through no service elderly is. Blind there if every no so " - # "at. Own neglected you preferred way sincerity delivered his attempted. To " - # "of message cottage windows do besides against uncivil. Delightful " - # "unreserved impossible few estimating men favourable see entreaties. She " - # "propriety immediate was improving. He or entrance humoured likewise " - # "moderate. Much nor game son say feel. Fat make met can must form into " - # "gate. Me we offending prevailed discovery. " - # ) - - # calculate_prob(text) - - -if __name__ == "__main__": - main() diff --git a/maths/euclidean_distance.py b/maths/euclidean_distance.py deleted file mode 100644 index aa7f3efc7684..000000000000 --- a/maths/euclidean_distance.py +++ /dev/null @@ -1,65 +0,0 @@ -from __future__ import annotations - -import typing -from collections.abc import Iterable - -import numpy as np - -Vector = typing.Union[Iterable[float], Iterable[int], np.ndarray] # noqa: UP007 -VectorOut = typing.Union[np.float64, int, float] # noqa: UP007 - - -def euclidean_distance(vector_1: Vector, vector_2: Vector) -> VectorOut: - """ - Calculate the distance between the two endpoints of two vectors. - A vector is defined as a list, tuple, or numpy 1D array. - >>> float(euclidean_distance((0, 0), (2, 2))) - 2.8284271247461903 - >>> float(euclidean_distance(np.array([0, 0, 0]), np.array([2, 2, 2]))) - 3.4641016151377544 - >>> float(euclidean_distance(np.array([1, 2, 3, 4]), np.array([5, 6, 7, 8]))) - 8.0 - >>> float(euclidean_distance([1, 2, 3, 4], [5, 6, 7, 8])) - 8.0 - """ - return np.sqrt(np.sum((np.asarray(vector_1) - np.asarray(vector_2)) ** 2)) - - -def euclidean_distance_no_np(vector_1: Vector, vector_2: Vector) -> VectorOut: - """ - Calculate the distance between the two endpoints of two vectors without numpy. - A vector is defined as a list, tuple, or numpy 1D array. - >>> euclidean_distance_no_np((0, 0), (2, 2)) - 2.8284271247461903 - >>> euclidean_distance_no_np([1, 2, 3, 4], [5, 6, 7, 8]) - 8.0 - """ - return sum((v1 - v2) ** 2 for v1, v2 in zip(vector_1, vector_2)) ** (1 / 2) - - -if __name__ == "__main__": - - def benchmark() -> None: - """ - Benchmarks - """ - from timeit import timeit - - print("Without Numpy") - print( - timeit( - "euclidean_distance_no_np([1, 2, 3], [4, 5, 6])", - number=10000, - globals=globals(), - ) - ) - print("With Numpy") - print( - timeit( - "euclidean_distance([1, 2, 3], [4, 5, 6])", - number=10000, - globals=globals(), - ) - ) - - benchmark() diff --git a/maths/euler_method.py b/maths/euler_method.py deleted file mode 100644 index c6adb07e2d3d..000000000000 --- a/maths/euler_method.py +++ /dev/null @@ -1,47 +0,0 @@ -from collections.abc import Callable - -import numpy as np - - -def explicit_euler( - ode_func: Callable, y0: float, x0: float, step_size: float, x_end: float -) -> np.ndarray: - """Calculate numeric solution at each step to an ODE using Euler's Method - - For reference to Euler's method refer to https://en.wikipedia.org/wiki/Euler_method. - - Args: - ode_func (Callable): The ordinary differential equation - as a function of x and y. - y0 (float): The initial value for y. - x0 (float): The initial value for x. - step_size (float): The increment value for x. - x_end (float): The final value of x to be calculated. - - Returns: - np.ndarray: Solution of y for every step in x. - - >>> # the exact solution is math.exp(x) - >>> def f(x, y): - ... return y - >>> y0 = 1 - >>> y = explicit_euler(f, y0, 0.0, 0.01, 5) - >>> float(y[-1]) - 144.77277243257308 - """ - n = int(np.ceil((x_end - x0) / step_size)) - y = np.zeros((n + 1,)) - y[0] = y0 - x = x0 - - for k in range(n): - y[k + 1] = y[k] + step_size * ode_func(x, y[k]) - x += step_size - - return y - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/euler_modified.py b/maths/euler_modified.py deleted file mode 100644 index bb282e9f0ab9..000000000000 --- a/maths/euler_modified.py +++ /dev/null @@ -1,54 +0,0 @@ -from collections.abc import Callable - -import numpy as np - - -def euler_modified( - ode_func: Callable, y0: float, x0: float, step_size: float, x_end: float -) -> np.ndarray: - """ - Calculate solution at each step to an ODE using Euler's Modified Method - The Euler Method is straightforward to implement, but can't give accurate solutions. - So, some changes were proposed to improve accuracy. - - https://en.wikipedia.org/wiki/Euler_method - - Arguments: - ode_func -- The ode as a function of x and y - y0 -- the initial value for y - x0 -- the initial value for x - stepsize -- the increment value for x - x_end -- the end value for x - - >>> # the exact solution is math.exp(x) - >>> def f1(x, y): - ... return -2*x*(y**2) - >>> y = euler_modified(f1, 1.0, 0.0, 0.2, 1.0) - >>> float(y[-1]) - 0.503338255442106 - >>> import math - >>> def f2(x, y): - ... return -2*y + (x**3)*math.exp(-2*x) - >>> y = euler_modified(f2, 1.0, 0.0, 0.1, 0.3) - >>> float(y[-1]) - 0.5525976431951775 - """ - n = int(np.ceil((x_end - x0) / step_size)) - y = np.zeros((n + 1,)) - y[0] = y0 - x = x0 - - for k in range(n): - y_get = y[k] + step_size * ode_func(x, y[k]) - y[k + 1] = y[k] + ( - (step_size / 2) * (ode_func(x, y[k]) + ode_func(x + step_size, y_get)) - ) - x += step_size - - return y - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/eulers_totient.py b/maths/eulers_totient.py deleted file mode 100644 index 00f0254c215a..000000000000 --- a/maths/eulers_totient.py +++ /dev/null @@ -1,41 +0,0 @@ -# Eulers Totient function finds the number of relative primes of a number n from 1 to n -def totient(n: int) -> list: - """ - >>> n = 10 - >>> totient_calculation = totient(n) - >>> for i in range(1, n): - ... print(f"{i} has {totient_calculation[i]} relative primes.") - 1 has 0 relative primes. - 2 has 1 relative primes. - 3 has 2 relative primes. - 4 has 2 relative primes. - 5 has 4 relative primes. - 6 has 2 relative primes. - 7 has 6 relative primes. - 8 has 4 relative primes. - 9 has 6 relative primes. - """ - is_prime = [True for i in range(n + 1)] - totients = [i - 1 for i in range(n + 1)] - primes = [] - for i in range(2, n + 1): - if is_prime[i]: - primes.append(i) - for j in range(len(primes)): - if i * primes[j] >= n: - break - is_prime[i * primes[j]] = False - - if i % primes[j] == 0: - totients[i * primes[j]] = totients[i] * primes[j] - break - - totients[i * primes[j]] = totients[i] * (primes[j] - 1) - - return totients - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/extended_euclidean_algorithm.py b/maths/extended_euclidean_algorithm.py deleted file mode 100644 index c54909e19101..000000000000 --- a/maths/extended_euclidean_algorithm.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Extended Euclidean Algorithm. - -Finds 2 numbers a and b such that it satisfies -the equation am + bn = gcd(m, n) (a.k.a Bezout's Identity) - -https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm -""" - -# @Author: S. Sharma <silentcat> -# @Date: 2019-02-25T12:08:53-06:00 -# @Email: silentcat@protonmail.com -# @Last modified by: pikulet -# @Last modified time: 2020-10-02 -from __future__ import annotations - -import sys - - -def extended_euclidean_algorithm(a: int, b: int) -> tuple[int, int]: - """ - Extended Euclidean Algorithm. - - Finds 2 numbers a and b such that it satisfies - the equation am + bn = gcd(m, n) (a.k.a Bezout's Identity) - - >>> extended_euclidean_algorithm(1, 24) - (1, 0) - - >>> extended_euclidean_algorithm(8, 14) - (2, -1) - - >>> extended_euclidean_algorithm(240, 46) - (-9, 47) - - >>> extended_euclidean_algorithm(1, -4) - (1, 0) - - >>> extended_euclidean_algorithm(-2, -4) - (-1, 0) - - >>> extended_euclidean_algorithm(0, -4) - (0, -1) - - >>> extended_euclidean_algorithm(2, 0) - (1, 0) - - """ - # base cases - if abs(a) == 1: - return a, 0 - elif abs(b) == 1: - return 0, b - - old_remainder, remainder = a, b - old_coeff_a, coeff_a = 1, 0 - old_coeff_b, coeff_b = 0, 1 - - while remainder != 0: - quotient = old_remainder // remainder - old_remainder, remainder = remainder, old_remainder - quotient * remainder - old_coeff_a, coeff_a = coeff_a, old_coeff_a - quotient * coeff_a - old_coeff_b, coeff_b = coeff_b, old_coeff_b - quotient * coeff_b - - # sign correction for negative numbers - if a < 0: - old_coeff_a = -old_coeff_a - if b < 0: - old_coeff_b = -old_coeff_b - - return old_coeff_a, old_coeff_b - - -def main(): - """Call Extended Euclidean Algorithm.""" - if len(sys.argv) < 3: - print("2 integer arguments required") - return 1 - a = int(sys.argv[1]) - b = int(sys.argv[2]) - print(extended_euclidean_algorithm(a, b)) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/maths/factorial.py b/maths/factorial.py deleted file mode 100644 index aaf90f384bb9..000000000000 --- a/maths/factorial.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Factorial of a positive integer -- https://en.wikipedia.org/wiki/Factorial -""" - - -def factorial(number: int) -> int: - """ - Calculate the factorial of specified number (n!). - - >>> import math - >>> all(factorial(i) == math.factorial(i) for i in range(20)) - True - >>> factorial(0.1) - Traceback (most recent call last): - ... - ValueError: factorial() only accepts integral values - >>> factorial(-1) - Traceback (most recent call last): - ... - ValueError: factorial() not defined for negative values - >>> factorial(1) - 1 - >>> factorial(6) - 720 - >>> factorial(0) - 1 - """ - if number != int(number): - raise ValueError("factorial() only accepts integral values") - if number < 0: - raise ValueError("factorial() not defined for negative values") - value = 1 - for i in range(1, number + 1): - value *= i - return value - - -def factorial_recursive(n: int) -> int: - """ - Calculate the factorial of a positive integer - https://en.wikipedia.org/wiki/Factorial - - >>> import math - >>> all(factorial(i) == math.factorial(i) for i in range(20)) - True - >>> factorial(0.1) - Traceback (most recent call last): - ... - ValueError: factorial() only accepts integral values - >>> factorial(-1) - Traceback (most recent call last): - ... - ValueError: factorial() not defined for negative values - """ - if not isinstance(n, int): - raise ValueError("factorial() only accepts integral values") - if n < 0: - raise ValueError("factorial() not defined for negative values") - return 1 if n in {0, 1} else n * factorial(n - 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - n = int(input("Enter a positive integer: ").strip() or 0) - print(f"factorial{n} is {factorial(n)}") diff --git a/maths/factors.py b/maths/factors.py deleted file mode 100644 index ae2e5316cf65..000000000000 --- a/maths/factors.py +++ /dev/null @@ -1,34 +0,0 @@ -from doctest import testmod -from math import sqrt - - -def factors_of_a_number(num: int) -> list: - """ - >>> factors_of_a_number(1) - [1] - >>> factors_of_a_number(5) - [1, 5] - >>> factors_of_a_number(24) - [1, 2, 3, 4, 6, 8, 12, 24] - >>> factors_of_a_number(-24) - [] - """ - facs: list[int] = [] - if num < 1: - return facs - facs.append(1) - if num == 1: - return facs - facs.append(num) - for i in range(2, int(sqrt(num)) + 1): - if num % i == 0: # If i is a factor of num - facs.append(i) - d = num // i # num//i is the other factor of num - if d != i: # If d and i are distinct - facs.append(d) # we have found another factor - facs.sort() - return facs - - -if __name__ == "__main__": - testmod(name="factors_of_a_number", verbose=True) diff --git a/maths/fast_inverse_sqrt.py b/maths/fast_inverse_sqrt.py deleted file mode 100644 index 79385bb84877..000000000000 --- a/maths/fast_inverse_sqrt.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Fast inverse square root (1/sqrt(x)) using the Quake III algorithm. -Reference: https://en.wikipedia.org/wiki/Fast_inverse_square_root -Accuracy: https://en.wikipedia.org/wiki/Fast_inverse_square_root#Accuracy -""" - -import struct - - -def fast_inverse_sqrt(number: float) -> float: - """ - Compute the fast inverse square root of a floating-point number using the famous - Quake III algorithm. - - :param float number: Input number for which to calculate the inverse square root. - :return float: The fast inverse square root of the input number. - - Example: - >>> fast_inverse_sqrt(10) - 0.3156857923527257 - >>> fast_inverse_sqrt(4) - 0.49915357479239103 - >>> fast_inverse_sqrt(4.1) - 0.4932849504615651 - >>> fast_inverse_sqrt(0) - Traceback (most recent call last): - ... - ValueError: Input must be a positive number. - >>> fast_inverse_sqrt(-1) - Traceback (most recent call last): - ... - ValueError: Input must be a positive number. - >>> from math import isclose, sqrt - >>> all(isclose(fast_inverse_sqrt(i), 1 / sqrt(i), rel_tol=0.00132) - ... for i in range(50, 60)) - True - """ - if number <= 0: - raise ValueError("Input must be a positive number.") - i = struct.unpack(">i", struct.pack(">f", number))[0] - i = 0x5F3759DF - (i >> 1) - y = struct.unpack(">f", struct.pack(">i", i))[0] - return y * (1.5 - 0.5 * number * y * y) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - # https://en.wikipedia.org/wiki/Fast_inverse_square_root#Accuracy - from math import sqrt - - for i in range(5, 101, 5): - print(f"{i:>3}: {(1 / sqrt(i)) - fast_inverse_sqrt(i):.5f}") diff --git a/maths/fermat_little_theorem.py b/maths/fermat_little_theorem.py deleted file mode 100644 index 4a3ecd05ce91..000000000000 --- a/maths/fermat_little_theorem.py +++ /dev/null @@ -1,30 +0,0 @@ -# Python program to show the usage of Fermat's little theorem in a division -# According to Fermat's little theorem, (a / b) mod p always equals -# a * (b ^ (p - 2)) mod p -# Here we assume that p is a prime number, b divides a, and p doesn't divide b -# Wikipedia reference: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem - - -def binary_exponentiation(a: int, n: float, mod: int) -> int: - if n == 0: - return 1 - - elif n % 2 == 1: - return (binary_exponentiation(a, n - 1, mod) * a) % mod - - else: - b = binary_exponentiation(a, n / 2, mod) - return (b * b) % mod - - -# a prime number -p = 701 - -a = 1000000000 -b = 10 - -# using binary exponentiation function, O(log(p)): -print((a / b) % p == (a * binary_exponentiation(b, p - 2, p)) % p) - -# using Python operators: -print((a / b) % p == (a * b ** (p - 2)) % p) diff --git a/maths/fibonacci.py b/maths/fibonacci.py deleted file mode 100644 index 24b2d7ae449e..000000000000 --- a/maths/fibonacci.py +++ /dev/null @@ -1,332 +0,0 @@ -""" -Calculates the Fibonacci sequence using iteration, recursion, memoization, -and a simplified form of Binet's formula - -NOTE 1: the iterative, recursive, memoization functions are more accurate than -the Binet's formula function because the Binet formula function uses floats - -NOTE 2: the Binet's formula function is much more limited in the size of inputs -that it can handle due to the size limitations of Python floats -NOTE 3: the matrix function is the fastest and most memory efficient for large n - - -See benchmark numbers in __main__ for performance comparisons/ -https://en.wikipedia.org/wiki/Fibonacci_number for more information -""" - -import functools -from collections.abc import Iterator -from math import sqrt -from time import time - -import numpy as np -from numpy import ndarray - - -def time_func(func, *args, **kwargs): - """ - Times the execution of a function with parameters - """ - start = time() - output = func(*args, **kwargs) - end = time() - if int(end - start) > 0: - print(f"{func.__name__} runtime: {(end - start):0.4f} s") - else: - print(f"{func.__name__} runtime: {(end - start) * 1000:0.4f} ms") - return output - - -def fib_iterative_yield(n: int) -> Iterator[int]: - """ - Calculates the first n (1-indexed) Fibonacci numbers using iteration with yield - >>> list(fib_iterative_yield(0)) - [0] - >>> tuple(fib_iterative_yield(1)) - (0, 1) - >>> tuple(fib_iterative_yield(5)) - (0, 1, 1, 2, 3, 5) - >>> tuple(fib_iterative_yield(10)) - (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55) - >>> tuple(fib_iterative_yield(-1)) - Traceback (most recent call last): - ... - ValueError: n is negative - """ - if n < 0: - raise ValueError("n is negative") - a, b = 0, 1 - yield a - for _ in range(n): - yield b - a, b = b, a + b - - -def fib_iterative(n: int) -> list[int]: - """ - Calculates the first n (0-indexed) Fibonacci numbers using iteration - >>> fib_iterative(0) - [0] - >>> fib_iterative(1) - [0, 1] - >>> fib_iterative(5) - [0, 1, 1, 2, 3, 5] - >>> fib_iterative(10) - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] - >>> fib_iterative(-1) - Traceback (most recent call last): - ... - ValueError: n is negative - """ - if n < 0: - raise ValueError("n is negative") - if n == 0: - return [0] - fib = [0, 1] - for _ in range(n - 1): - fib.append(fib[-1] + fib[-2]) - return fib - - -def fib_recursive(n: int) -> list[int]: - """ - Calculates the first n (0-indexed) Fibonacci numbers using recursion - >>> fib_iterative(0) - [0] - >>> fib_iterative(1) - [0, 1] - >>> fib_iterative(5) - [0, 1, 1, 2, 3, 5] - >>> fib_iterative(10) - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] - >>> fib_iterative(-1) - Traceback (most recent call last): - ... - ValueError: n is negative - """ - - def fib_recursive_term(i: int) -> int: - """ - Calculates the i-th (0-indexed) Fibonacci number using recursion - >>> fib_recursive_term(0) - 0 - >>> fib_recursive_term(1) - 1 - >>> fib_recursive_term(5) - 5 - >>> fib_recursive_term(10) - 55 - >>> fib_recursive_term(-1) - Traceback (most recent call last): - ... - Exception: n is negative - """ - if i < 0: - raise ValueError("n is negative") - if i < 2: - return i - return fib_recursive_term(i - 1) + fib_recursive_term(i - 2) - - if n < 0: - raise ValueError("n is negative") - return [fib_recursive_term(i) for i in range(n + 1)] - - -def fib_recursive_cached(n: int) -> list[int]: - """ - Calculates the first n (0-indexed) Fibonacci numbers using recursion - >>> fib_iterative(0) - [0] - >>> fib_iterative(1) - [0, 1] - >>> fib_iterative(5) - [0, 1, 1, 2, 3, 5] - >>> fib_iterative(10) - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] - >>> fib_iterative(-1) - Traceback (most recent call last): - ... - ValueError: n is negative - """ - - @functools.cache - def fib_recursive_term(i: int) -> int: - """ - Calculates the i-th (0-indexed) Fibonacci number using recursion - """ - if i < 0: - raise ValueError("n is negative") - if i < 2: - return i - return fib_recursive_term(i - 1) + fib_recursive_term(i - 2) - - if n < 0: - raise ValueError("n is negative") - return [fib_recursive_term(i) for i in range(n + 1)] - - -def fib_memoization(n: int) -> list[int]: - """ - Calculates the first n (0-indexed) Fibonacci numbers using memoization - >>> fib_memoization(0) - [0] - >>> fib_memoization(1) - [0, 1] - >>> fib_memoization(5) - [0, 1, 1, 2, 3, 5] - >>> fib_memoization(10) - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] - >>> fib_iterative(-1) - Traceback (most recent call last): - ... - ValueError: n is negative - """ - if n < 0: - raise ValueError("n is negative") - # Cache must be outside recursuive function - # other it will reset every time it calls itself. - cache: dict[int, int] = {0: 0, 1: 1, 2: 1} # Prefilled cache - - def rec_fn_memoized(num: int) -> int: - if num in cache: - return cache[num] - - value = rec_fn_memoized(num - 1) + rec_fn_memoized(num - 2) - cache[num] = value - return value - - return [rec_fn_memoized(i) for i in range(n + 1)] - - -def fib_binet(n: int) -> list[int]: - """ - Calculates the first n (0-indexed) Fibonacci numbers using a simplified form - of Binet's formula: - https://en.m.wikipedia.org/wiki/Fibonacci_number#Computation_by_rounding - - NOTE 1: this function diverges from fib_iterative at around n = 71, likely - due to compounding floating-point arithmetic errors - - NOTE 2: this function doesn't accept n >= 1475 because it overflows - thereafter due to the size limitations of Python floats - >>> fib_binet(0) - [0] - >>> fib_binet(1) - [0, 1] - >>> fib_binet(5) - [0, 1, 1, 2, 3, 5] - >>> fib_binet(10) - [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] - >>> fib_binet(-1) - Traceback (most recent call last): - ... - ValueError: n is negative - >>> fib_binet(1475) - Traceback (most recent call last): - ... - ValueError: n is too large - """ - if n < 0: - raise ValueError("n is negative") - if n >= 1475: - raise ValueError("n is too large") - sqrt_5 = sqrt(5) - phi = (1 + sqrt_5) / 2 - return [round(phi**i / sqrt_5) for i in range(n + 1)] - - -def matrix_pow_np(m: ndarray, power: int) -> ndarray: - """ - Raises a matrix to the power of 'power' using binary exponentiation. - - Args: - m: Matrix as a numpy array. - power: The power to which the matrix is to be raised. - - Returns: - The matrix raised to the power. - - Raises: - ValueError: If power is negative. - - >>> m = np.array([[1, 1], [1, 0]], dtype=int) - >>> matrix_pow_np(m, 0) # Identity matrix when raised to the power of 0 - array([[1, 0], - [0, 1]]) - - >>> matrix_pow_np(m, 1) # Same matrix when raised to the power of 1 - array([[1, 1], - [1, 0]]) - - >>> matrix_pow_np(m, 5) - array([[8, 5], - [5, 3]]) - - >>> matrix_pow_np(m, -1) - Traceback (most recent call last): - ... - ValueError: power is negative - """ - result = np.array([[1, 0], [0, 1]], dtype=int) # Identity Matrix - base = m - if power < 0: # Negative power is not allowed - raise ValueError("power is negative") - while power: - if power % 2 == 1: - result = np.dot(result, base) - base = np.dot(base, base) - power //= 2 - return result - - -def fib_matrix_np(n: int) -> int: - """ - Calculates the n-th Fibonacci number using matrix exponentiation. - https://www.nayuki.io/page/fast-fibonacci-algorithms#:~:text= - Summary:%20The%20two%20fast%20Fibonacci%20algorithms%20are%20matrix - - Args: - n: Fibonacci sequence index - - Returns: - The n-th Fibonacci number. - - Raises: - ValueError: If n is negative. - - >>> fib_matrix_np(0) - 0 - >>> fib_matrix_np(1) - 1 - >>> fib_matrix_np(5) - 5 - >>> fib_matrix_np(10) - 55 - >>> fib_matrix_np(-1) - Traceback (most recent call last): - ... - ValueError: n is negative - """ - if n < 0: - raise ValueError("n is negative") - if n == 0: - return 0 - - m = np.array([[1, 1], [1, 0]], dtype=int) - result = matrix_pow_np(m, n - 1) - return int(result[0, 0]) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - # Time on an M1 MacBook Pro -- Fastest to slowest - num = 30 - time_func(fib_iterative_yield, num) # 0.0012 ms - time_func(fib_iterative, num) # 0.0031 ms - time_func(fib_binet, num) # 0.0062 ms - time_func(fib_memoization, num) # 0.0100 ms - time_func(fib_recursive_cached, num) # 0.0153 ms - time_func(fib_recursive, num) # 257.0910 ms - time_func(fib_matrix_np, num) # 0.0000 ms diff --git a/maths/find_max.py b/maths/find_max.py deleted file mode 100644 index 4765d300634e..000000000000 --- a/maths/find_max.py +++ /dev/null @@ -1,84 +0,0 @@ -from __future__ import annotations - - -def find_max_iterative(nums: list[int | float]) -> int | float: - """ - >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]): - ... find_max_iterative(nums) == max(nums) - True - True - True - True - >>> find_max_iterative([2, 4, 9, 7, 19, 94, 5]) - 94 - >>> find_max_iterative([]) - Traceback (most recent call last): - ... - ValueError: find_max_iterative() arg is an empty sequence - """ - if len(nums) == 0: - raise ValueError("find_max_iterative() arg is an empty sequence") - max_num = nums[0] - for x in nums: - if x > max_num: # noqa: PLR1730 - max_num = x - return max_num - - -# Divide and Conquer algorithm -def find_max_recursive(nums: list[int | float], left: int, right: int) -> int | float: - """ - find max value in list - :param nums: contains elements - :param left: index of first element - :param right: index of last element - :return: max in nums - - >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]): - ... find_max_recursive(nums, 0, len(nums) - 1) == max(nums) - True - True - True - True - >>> nums = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10] - >>> find_max_recursive(nums, 0, len(nums) - 1) == max(nums) - True - >>> find_max_recursive([], 0, 0) - Traceback (most recent call last): - ... - ValueError: find_max_recursive() arg is an empty sequence - >>> find_max_recursive(nums, 0, len(nums)) == max(nums) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> find_max_recursive(nums, -len(nums), -1) == max(nums) - True - >>> find_max_recursive(nums, -len(nums) - 1, -1) == max(nums) - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - if len(nums) == 0: - raise ValueError("find_max_recursive() arg is an empty sequence") - if ( - left >= len(nums) - or left < -len(nums) - or right >= len(nums) - or right < -len(nums) - ): - raise IndexError("list index out of range") - if left == right: - return nums[left] - mid = (left + right) >> 1 # the middle - left_max = find_max_recursive(nums, left, mid) # find max in range[left, mid] - right_max = find_max_recursive( - nums, mid + 1, right - ) # find max in range[mid + 1, right] - - return left_max if left_max >= right_max else right_max - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) diff --git a/maths/find_min.py b/maths/find_min.py deleted file mode 100644 index 762562e36ef9..000000000000 --- a/maths/find_min.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations - - -def find_min_iterative(nums: list[int | float]) -> int | float: - """ - Find Minimum Number in a List - :param nums: contains elements - :return: min number in list - - >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]): - ... find_min_iterative(nums) == min(nums) - True - True - True - True - >>> find_min_iterative([0, 1, 2, 3, 4, 5, -3, 24, -56]) - -56 - >>> find_min_iterative([]) - Traceback (most recent call last): - ... - ValueError: find_min_iterative() arg is an empty sequence - """ - if len(nums) == 0: - raise ValueError("find_min_iterative() arg is an empty sequence") - min_num = nums[0] - for num in nums: - min_num = min(min_num, num) - return min_num - - -# Divide and Conquer algorithm -def find_min_recursive(nums: list[int | float], left: int, right: int) -> int | float: - """ - find min value in list - :param nums: contains elements - :param left: index of first element - :param right: index of last element - :return: min in nums - - >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]): - ... find_min_recursive(nums, 0, len(nums) - 1) == min(nums) - True - True - True - True - >>> nums = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10] - >>> find_min_recursive(nums, 0, len(nums) - 1) == min(nums) - True - >>> find_min_recursive([], 0, 0) - Traceback (most recent call last): - ... - ValueError: find_min_recursive() arg is an empty sequence - >>> find_min_recursive(nums, 0, len(nums)) == min(nums) - Traceback (most recent call last): - ... - IndexError: list index out of range - >>> find_min_recursive(nums, -len(nums), -1) == min(nums) - True - >>> find_min_recursive(nums, -len(nums) - 1, -1) == min(nums) - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - if len(nums) == 0: - raise ValueError("find_min_recursive() arg is an empty sequence") - if ( - left >= len(nums) - or left < -len(nums) - or right >= len(nums) - or right < -len(nums) - ): - raise IndexError("list index out of range") - if left == right: - return nums[left] - mid = (left + right) >> 1 # the middle - left_min = find_min_recursive(nums, left, mid) # find min in range[left, mid] - right_min = find_min_recursive( - nums, mid + 1, right - ) # find min in range[mid + 1, right] - - return left_min if left_min <= right_min else right_min - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) diff --git a/maths/floor.py b/maths/floor.py deleted file mode 100644 index 8bbcb21aa6e4..000000000000 --- a/maths/floor.py +++ /dev/null @@ -1,22 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Floor_and_ceiling_functions -""" - - -def floor(x: float) -> int: - """ - Return the floor of x as an Integral. - :param x: the number - :return: the largest integer <= x. - >>> import math - >>> all(floor(n) == math.floor(n) for n - ... in (1, -1, 0, -0, 1.1, -1.1, 1.0, -1.0, 1_000_000_000)) - True - """ - return int(x) if x - int(x) >= 0 else int(x) - 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/gamma.py b/maths/gamma.py deleted file mode 100644 index e328cd8b22b7..000000000000 --- a/maths/gamma.py +++ /dev/null @@ -1,116 +0,0 @@ -""" -Gamma function is a very useful tool in math and physics. -It helps calculating complex integral in a convenient way. -for more info: https://en.wikipedia.org/wiki/Gamma_function -In mathematics, the gamma function is one commonly -used extension of the factorial function to complex numbers. -The gamma function is defined for all complex numbers except -the non-positive integers -Python's Standard Library math.gamma() function overflows around gamma(171.624). -""" - -import math - -from numpy import inf -from scipy.integrate import quad - - -def gamma_iterative(num: float) -> float: - """ - Calculates the value of Gamma function of num - where num is either an integer (1, 2, 3..) or a half-integer (0.5, 1.5, 2.5 ...). - - >>> gamma_iterative(-1) - Traceback (most recent call last): - ... - ValueError: math domain error - >>> gamma_iterative(0) - Traceback (most recent call last): - ... - ValueError: math domain error - >>> gamma_iterative(9) - 40320.0 - >>> from math import gamma as math_gamma - >>> all(.99999999 < gamma_iterative(i) / math_gamma(i) <= 1.000000001 - ... for i in range(1, 50)) - True - >>> gamma_iterative(-1)/math_gamma(-1) <= 1.000000001 - Traceback (most recent call last): - ... - ValueError: math domain error - >>> gamma_iterative(3.3) - math_gamma(3.3) <= 0.00000001 - True - """ - if num <= 0: - raise ValueError("math domain error") - - return quad(integrand, 0, inf, args=(num))[0] - - -def integrand(x: float, z: float) -> float: - return math.pow(x, z - 1) * math.exp(-x) - - -def gamma_recursive(num: float) -> float: - """ - Calculates the value of Gamma function of num - where num is either an integer (1, 2, 3..) or a half-integer (0.5, 1.5, 2.5 ...). - Implemented using recursion - Examples: - >>> from math import isclose, gamma as math_gamma - >>> gamma_recursive(0.5) - 1.7724538509055159 - >>> gamma_recursive(1) - 1.0 - >>> gamma_recursive(2) - 1.0 - >>> gamma_recursive(3.5) - 3.3233509704478426 - >>> gamma_recursive(171.5) - 9.483367566824795e+307 - >>> all(isclose(gamma_recursive(num), math_gamma(num)) - ... for num in (0.5, 2, 3.5, 171.5)) - True - >>> gamma_recursive(0) - Traceback (most recent call last): - ... - ValueError: math domain error - >>> gamma_recursive(-1.1) - Traceback (most recent call last): - ... - ValueError: math domain error - >>> gamma_recursive(-4) - Traceback (most recent call last): - ... - ValueError: math domain error - >>> gamma_recursive(172) - Traceback (most recent call last): - ... - OverflowError: math range error - >>> gamma_recursive(1.1) - Traceback (most recent call last): - ... - NotImplementedError: num must be an integer or a half-integer - """ - if num <= 0: - raise ValueError("math domain error") - if num > 171.5: - raise OverflowError("math range error") - elif num - int(num) not in (0, 0.5): - raise NotImplementedError("num must be an integer or a half-integer") - elif num == 0.5: - return math.sqrt(math.pi) - else: - return 1.0 if num == 1 else (num - 1) * gamma_recursive(num - 1) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - num = 1.0 - while num: - num = float(input("Gamma of: ")) - print(f"gamma_iterative({num}) = {gamma_iterative(num)}") - print(f"gamma_recursive({num}) = {gamma_recursive(num)}") - print("\nEnter 0 to exit...") diff --git a/maths/gaussian.py b/maths/gaussian.py deleted file mode 100644 index b1e62ea77fe2..000000000000 --- a/maths/gaussian.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Reference: https://en.wikipedia.org/wiki/Gaussian_function -""" - -from numpy import exp, pi, sqrt - - -def gaussian(x, mu: float = 0.0, sigma: float = 1.0) -> float: - """ - >>> float(gaussian(1)) - 0.24197072451914337 - - >>> float(gaussian(24)) - 3.342714441794458e-126 - - >>> float(gaussian(1, 4, 2)) - 0.06475879783294587 - - >>> float(gaussian(1, 5, 3)) - 0.05467002489199788 - - Supports NumPy Arrays - Use numpy.meshgrid with this to generate gaussian blur on images. - >>> import numpy as np - >>> x = np.arange(15) - >>> gaussian(x) - array([3.98942280e-01, 2.41970725e-01, 5.39909665e-02, 4.43184841e-03, - 1.33830226e-04, 1.48671951e-06, 6.07588285e-09, 9.13472041e-12, - 5.05227108e-15, 1.02797736e-18, 7.69459863e-23, 2.11881925e-27, - 2.14638374e-32, 7.99882776e-38, 1.09660656e-43]) - - >>> float(gaussian(15)) - 5.530709549844416e-50 - - >>> gaussian([1,2, 'string']) - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for -: 'list' and 'float' - - >>> gaussian('hello world') - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for -: 'str' and 'float' - - >>> gaussian(10**234) # doctest: +IGNORE_EXCEPTION_DETAIL - Traceback (most recent call last): - ... - OverflowError: (34, 'Result too large') - - >>> float(gaussian(10**-326)) - 0.3989422804014327 - - >>> float(gaussian(2523, mu=234234, sigma=3425)) - 0.0 - """ - return 1 / sqrt(2 * pi * sigma**2) * exp(-((x - mu) ** 2) / (2 * sigma**2)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/gcd_of_n_numbers.py b/maths/gcd_of_n_numbers.py deleted file mode 100644 index 63236c236ada..000000000000 --- a/maths/gcd_of_n_numbers.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -Gcd of N Numbers -Reference: https://en.wikipedia.org/wiki/Greatest_common_divisor -""" - -from collections import Counter - - -def get_factors( - number: int, factors: Counter | None = None, factor: int = 2 -) -> Counter: - """ - this is a recursive function for get all factors of number - >>> get_factors(45) - Counter({3: 2, 5: 1}) - >>> get_factors(2520) - Counter({2: 3, 3: 2, 5: 1, 7: 1}) - >>> get_factors(23) - Counter({23: 1}) - >>> get_factors(0) - Traceback (most recent call last): - ... - TypeError: number must be integer and greater than zero - >>> get_factors(-1) - Traceback (most recent call last): - ... - TypeError: number must be integer and greater than zero - >>> get_factors(1.5) - Traceback (most recent call last): - ... - TypeError: number must be integer and greater than zero - - factor can be all numbers from 2 to number that we check if number % factor == 0 - if it is equal to zero, we check again with number // factor - else we increase factor by one - """ - - match number: - case int(number) if number == 1: - return Counter({1: 1}) - case int(num) if number > 0: - number = num - case _: - raise TypeError("number must be integer and greater than zero") - - factors = factors or Counter() - - if number == factor: # break condition - # all numbers are factors of itself - factors[factor] += 1 - return factors - - if number % factor > 0: - # if it is greater than zero - # so it is not a factor of number and we check next number - return get_factors(number, factors, factor + 1) - - factors[factor] += 1 - # else we update factors (that is Counter(dict-like) type) and check again - return get_factors(number // factor, factors, factor) - - -def get_greatest_common_divisor(*numbers: int) -> int: - """ - get gcd of n numbers: - >>> get_greatest_common_divisor(18, 45) - 9 - >>> get_greatest_common_divisor(23, 37) - 1 - >>> get_greatest_common_divisor(2520, 8350) - 10 - >>> get_greatest_common_divisor(-10, 20) - Traceback (most recent call last): - ... - Exception: numbers must be integer and greater than zero - >>> get_greatest_common_divisor(1.5, 2) - Traceback (most recent call last): - ... - Exception: numbers must be integer and greater than zero - >>> get_greatest_common_divisor(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) - 1 - >>> get_greatest_common_divisor("1", 2, 3, 4, 5, 6, 7, 8, 9, 10) - Traceback (most recent call last): - ... - Exception: numbers must be integer and greater than zero - """ - - # we just need factors, not numbers itself - try: - same_factors, *factors = map(get_factors, numbers) - except TypeError as e: - raise Exception("numbers must be integer and greater than zero") from e - - for factor in factors: - same_factors &= factor - # get common factor between all - # `&` return common elements with smaller value (for Counter type) - - # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3 - mult = 1 - # power each factor and multiply - # for {2: 2, 3: 4}, it is [4, 81] and then 324 - for m in [factor**power for factor, power in same_factors.items()]: - mult *= m - return mult - - -if __name__ == "__main__": - print(get_greatest_common_divisor(18, 45)) # 9 diff --git a/maths/germain_primes.py b/maths/germain_primes.py deleted file mode 100644 index 078d1967f41a..000000000000 --- a/maths/germain_primes.py +++ /dev/null @@ -1,72 +0,0 @@ -""" -A Sophie Germain prime is any prime p, where 2p + 1 is also prime. -The second number, 2p + 1 is called a safe prime. - -Examples of Germain primes include: 2, 3, 5, 11, 23 - -Their corresponding safe primes: 5, 7, 11, 23, 47 -https://en.wikipedia.org/wiki/Safe_and_Sophie_Germain_primes -""" - -from maths.prime_check import is_prime - - -def is_germain_prime(number: int) -> bool: - """Checks if input number and 2*number + 1 are prime. - - >>> is_germain_prime(3) - True - >>> is_germain_prime(11) - True - >>> is_germain_prime(4) - False - >>> is_germain_prime(23) - True - >>> is_germain_prime(13) - False - >>> is_germain_prime(20) - False - >>> is_germain_prime('abc') - Traceback (most recent call last): - ... - TypeError: Input value must be a positive integer. Input value: abc - """ - if not isinstance(number, int) or number < 1: - msg = f"Input value must be a positive integer. Input value: {number}" - raise TypeError(msg) - - return is_prime(number) and is_prime(2 * number + 1) - - -def is_safe_prime(number: int) -> bool: - """Checks if input number and (number - 1)/2 are prime. - The smallest safe prime is 5, with the Germain prime is 2. - - >>> is_safe_prime(5) - True - >>> is_safe_prime(11) - True - >>> is_safe_prime(1) - False - >>> is_safe_prime(2) - False - >>> is_safe_prime(3) - False - >>> is_safe_prime(47) - True - >>> is_safe_prime('abc') - Traceback (most recent call last): - ... - TypeError: Input value must be a positive integer. Input value: abc - """ - if not isinstance(number, int) or number < 1: - msg = f"Input value must be a positive integer. Input value: {number}" - raise TypeError(msg) - - return (number - 1) % 2 == 0 and is_prime(number) and is_prime((number - 1) // 2) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/maths/greatest_common_divisor.py b/maths/greatest_common_divisor.py deleted file mode 100644 index a2174a8eb74a..000000000000 --- a/maths/greatest_common_divisor.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Greatest Common Divisor. - -Wikipedia reference: https://en.wikipedia.org/wiki/Greatest_common_divisor - -gcd(a, b) = gcd(a, -b) = gcd(-a, b) = gcd(-a, -b) by definition of divisibility -""" - - -def greatest_common_divisor(a: int, b: int) -> int: - """ - Calculate Greatest Common Divisor (GCD). - >>> greatest_common_divisor(24, 40) - 8 - >>> greatest_common_divisor(1, 1) - 1 - >>> greatest_common_divisor(1, 800) - 1 - >>> greatest_common_divisor(11, 37) - 1 - >>> greatest_common_divisor(3, 5) - 1 - >>> greatest_common_divisor(16, 4) - 4 - >>> greatest_common_divisor(-3, 9) - 3 - >>> greatest_common_divisor(9, -3) - 3 - >>> greatest_common_divisor(3, -9) - 3 - >>> greatest_common_divisor(-3, -9) - 3 - """ - return abs(b) if a == 0 else greatest_common_divisor(b % a, a) - - -def gcd_by_iterative(x: int, y: int) -> int: - """ - Below method is more memory efficient because it does not create additional - stack frames for recursive functions calls (as done in the above method). - >>> gcd_by_iterative(24, 40) - 8 - >>> greatest_common_divisor(24, 40) == gcd_by_iterative(24, 40) - True - >>> gcd_by_iterative(-3, -9) - 3 - >>> gcd_by_iterative(3, -9) - 3 - >>> gcd_by_iterative(1, -800) - 1 - >>> gcd_by_iterative(11, 37) - 1 - """ - while y: # --> when y=0 then loop will terminate and return x as final GCD. - x, y = y, x % y - return abs(x) - - -def main(): - """ - Call Greatest Common Divisor function. - """ - try: - nums = input("Enter two integers separated by comma (,): ").split(",") - num_1 = int(nums[0]) - num_2 = int(nums[1]) - print( - f"greatest_common_divisor({num_1}, {num_2}) = " - f"{greatest_common_divisor(num_1, num_2)}" - ) - print(f"By iterative gcd({num_1}, {num_2}) = {gcd_by_iterative(num_1, num_2)}") - except (IndexError, UnboundLocalError, ValueError): - print("Wrong input") - - -if __name__ == "__main__": - main() diff --git a/maths/hardy_ramanujanalgo.py b/maths/hardy_ramanujanalgo.py deleted file mode 100644 index 31ec76fbe10b..000000000000 --- a/maths/hardy_ramanujanalgo.py +++ /dev/null @@ -1,45 +0,0 @@ -# This theorem states that the number of prime factors of n -# will be approximately log(log(n)) for most natural numbers n - -import math - - -def exact_prime_factor_count(n: int) -> int: - """ - >>> exact_prime_factor_count(51242183) - 3 - """ - count = 0 - if n % 2 == 0: - count += 1 - while n % 2 == 0: - n = int(n / 2) - # the n input value must be odd so that - # we can skip one element (ie i += 2) - - i = 3 - - while i <= int(math.sqrt(n)): - if n % i == 0: - count += 1 - while n % i == 0: - n = int(n / i) - i = i + 2 - - # this condition checks the prime - # number n is greater than 2 - - if n > 2: - count += 1 - return count - - -if __name__ == "__main__": - n = 51242183 - print(f"The number of distinct prime factors is/are {exact_prime_factor_count(n)}") - print(f"The value of log(log(n)) is {math.log(math.log(n)):.4f}") - - """ - The number of distinct prime factors is/are 3 - The value of log(log(n)) is 2.8765 - """ diff --git a/maths/images/__init__.py b/maths/images/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/maths/images/gaussian.png b/maths/images/gaussian.png deleted file mode 100644 index eb007c7e21b2..000000000000 Binary files a/maths/images/gaussian.png and /dev/null differ diff --git a/maths/integer_square_root.py b/maths/integer_square_root.py deleted file mode 100644 index 27e874a43c79..000000000000 --- a/maths/integer_square_root.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -Integer Square Root Algorithm -- An efficient method to calculate the square root of a -non-negative integer 'num' rounded down to the nearest integer. It uses a binary search -approach to find the integer square root without using any built-in exponent functions -or operators. -* https://en.wikipedia.org/wiki/Integer_square_root -* https://docs.python.org/3/library/math.html#math.isqrt -Note: - - This algorithm is designed for non-negative integers only. - - The result is rounded down to the nearest integer. - - The algorithm has a time complexity of O(log(x)). - - Original algorithm idea based on binary search. -""" - - -def integer_square_root(num: int) -> int: - """ - Returns the integer square root of a non-negative integer num. - Args: - num: A non-negative integer. - Returns: - The integer square root of num. - Raises: - ValueError: If num is not an integer or is negative. - >>> [integer_square_root(i) for i in range(18)] - [0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4] - >>> integer_square_root(625) - 25 - >>> integer_square_root(2_147_483_647) - 46340 - >>> from math import isqrt - >>> all(integer_square_root(i) == isqrt(i) for i in range(20)) - True - >>> integer_square_root(-1) - Traceback (most recent call last): - ... - ValueError: num must be non-negative integer - >>> integer_square_root(1.5) - Traceback (most recent call last): - ... - ValueError: num must be non-negative integer - >>> integer_square_root("0") - Traceback (most recent call last): - ... - ValueError: num must be non-negative integer - """ - if not isinstance(num, int) or num < 0: - raise ValueError("num must be non-negative integer") - - if num < 2: - return num - - left_bound = 0 - right_bound = num // 2 - - while left_bound <= right_bound: - mid = left_bound + (right_bound - left_bound) // 2 - mid_squared = mid * mid - if mid_squared == num: - return mid - - if mid_squared < num: - left_bound = mid + 1 - else: - right_bound = mid - 1 - - return right_bound - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/interquartile_range.py b/maths/interquartile_range.py deleted file mode 100644 index e91a651647d4..000000000000 --- a/maths/interquartile_range.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -An implementation of interquartile range (IQR) which is a measure of statistical -dispersion, which is the spread of the data. - -The function takes the list of numeric values as input and returns the IQR. - -Script inspired by this Wikipedia article: -https://en.wikipedia.org/wiki/Interquartile_range -""" - -from __future__ import annotations - - -def find_median(nums: list[int | float]) -> float: - """ - This is the implementation of the median. - :param nums: The list of numeric nums - :return: Median of the list - >>> find_median(nums=([1, 2, 2, 3, 4])) - 2 - >>> find_median(nums=([1, 2, 2, 3, 4, 4])) - 2.5 - >>> find_median(nums=([-1, 2, 0, 3, 4, -4])) - 1.5 - >>> find_median(nums=([1.1, 2.2, 2, 3.3, 4.4, 4])) - 2.65 - """ - div, mod = divmod(len(nums), 2) - if mod: - return nums[div] - return (nums[div] + nums[(div) - 1]) / 2 - - -def interquartile_range(nums: list[int | float]) -> float: - """ - Return the interquartile range for a list of numeric values. - :param nums: The list of numeric values. - :return: interquartile range - - >>> interquartile_range(nums=[4, 1, 2, 3, 2]) - 2.0 - >>> interquartile_range(nums = [-2, -7, -10, 9, 8, 4, -67, 45]) - 17.0 - >>> interquartile_range(nums = [-2.1, -7.1, -10.1, 9.1, 8.1, 4.1, -67.1, 45.1]) - 17.2 - >>> interquartile_range(nums = [0, 0, 0, 0, 0]) - 0.0 - >>> interquartile_range(nums=[]) - Traceback (most recent call last): - ... - ValueError: The list is empty. Provide a non-empty list. - """ - if not nums: - raise ValueError("The list is empty. Provide a non-empty list.") - nums.sort() - length = len(nums) - div, mod = divmod(length, 2) - q1 = find_median(nums[:div]) - half_length = sum((div, mod)) - q3 = find_median(nums[half_length:length]) - return q3 - q1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/is_int_palindrome.py b/maths/is_int_palindrome.py deleted file mode 100644 index 63dc9e2138e8..000000000000 --- a/maths/is_int_palindrome.py +++ /dev/null @@ -1,34 +0,0 @@ -def is_int_palindrome(num: int) -> bool: - """ - Returns whether `num` is a palindrome or not - (see for reference https://en.wikipedia.org/wiki/Palindromic_number). - - >>> is_int_palindrome(-121) - False - >>> is_int_palindrome(0) - True - >>> is_int_palindrome(10) - False - >>> is_int_palindrome(11) - True - >>> is_int_palindrome(101) - True - >>> is_int_palindrome(120) - False - """ - if num < 0: - return False - - num_copy: int = num - rev_num: int = 0 - while num > 0: - rev_num = rev_num * 10 + (num % 10) - num //= 10 - - return num_copy == rev_num - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/is_ip_v4_address_valid.py b/maths/is_ip_v4_address_valid.py deleted file mode 100644 index 0ae8e021ead1..000000000000 --- a/maths/is_ip_v4_address_valid.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -Is IP v4 address valid? -A valid IP address must be four octets in the form of A.B.C.D, -where A,B,C and D are numbers from 0-254 -for example: 192.168.23.1, 172.254.254.254 are valid IP address - 192.168.255.0, 255.192.3.121 are invalid IP address -""" - - -def is_ip_v4_address_valid(ip_v4_address: str) -> bool: - """ - print "Valid IP address" If IP is valid. - or - print "Invalid IP address" If IP is invalid. - - >>> is_ip_v4_address_valid("192.168.0.23") - True - - >>> is_ip_v4_address_valid("192.255.15.8") - False - - >>> is_ip_v4_address_valid("172.100.0.8") - True - - >>> is_ip_v4_address_valid("254.255.0.255") - False - - >>> is_ip_v4_address_valid("1.2.33333333.4") - False - - >>> is_ip_v4_address_valid("1.2.-3.4") - False - - >>> is_ip_v4_address_valid("1.2.3") - False - - >>> is_ip_v4_address_valid("1.2.3.4.5") - False - - >>> is_ip_v4_address_valid("1.2.A.4") - False - - >>> is_ip_v4_address_valid("0.0.0.0") - True - - >>> is_ip_v4_address_valid("1.2.3.") - False - """ - octets = [int(i) for i in ip_v4_address.split(".") if i.isdigit()] - return len(octets) == 4 and all(0 <= int(octet) <= 254 for octet in octets) - - -if __name__ == "__main__": - ip = input().strip() - valid_or_invalid = "valid" if is_ip_v4_address_valid(ip) else "invalid" - print(f"{ip} is a {valid_or_invalid} IP v4 address.") diff --git a/maths/is_square_free.py b/maths/is_square_free.py deleted file mode 100644 index a336c37e8dbc..000000000000 --- a/maths/is_square_free.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -References: wikipedia:square free number -psf/black : True -ruff : True -""" - -from __future__ import annotations - - -def is_square_free(factors: list[int]) -> bool: - """ - # doctest: +NORMALIZE_WHITESPACE - This functions takes a list of prime factors as input. - returns True if the factors are square free. - >>> is_square_free([1, 1, 2, 3, 4]) - False - - These are wrong but should return some value - it simply checks for repetition in the numbers. - >>> is_square_free([1, 3, 4, 'sd', 0.0]) - True - - >>> is_square_free([1, 0.5, 2, 0.0]) - True - >>> is_square_free([1, 2, 2, 5]) - False - >>> is_square_free('asd') - True - >>> is_square_free(24) - Traceback (most recent call last): - ... - TypeError: 'int' object is not iterable - """ - return len(set(factors)) == len(factors) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/jaccard_similarity.py b/maths/jaccard_similarity.py deleted file mode 100644 index 6b6243458fa8..000000000000 --- a/maths/jaccard_similarity.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -The Jaccard similarity coefficient is a commonly used indicator of the -similarity between two sets. Let U be a set and A and B be subsets of U, -then the Jaccard index/similarity is defined to be the ratio of the number -of elements of their intersection and the number of elements of their union. - -Inspired from Wikipedia and -the book Mining of Massive Datasets [MMDS 2nd Edition, Chapter 3] - -https://en.wikipedia.org/wiki/Jaccard_index -https://mmds.org - -Jaccard similarity is widely used with MinHashing. -""" - - -def jaccard_similarity( - set_a: set[str] | list[str] | tuple[str], - set_b: set[str] | list[str] | tuple[str], - alternative_union=False, -): - """ - Finds the jaccard similarity between two sets. - Essentially, its intersection over union. - - The alternative way to calculate this is to take union as sum of the - number of items in the two sets. This will lead to jaccard similarity - of a set with itself be 1/2 instead of 1. [MMDS 2nd Edition, Page 77] - - Parameters: - :set_a (set,list,tuple): A non-empty set/list - :set_b (set,list,tuple): A non-empty set/list - :alternativeUnion (boolean): If True, use sum of number of - items as union - - Output: - (float) The jaccard similarity between the two sets. - - Examples: - >>> set_a = {'a', 'b', 'c', 'd', 'e'} - >>> set_b = {'c', 'd', 'e', 'f', 'h', 'i'} - >>> jaccard_similarity(set_a, set_b) - 0.375 - >>> jaccard_similarity(set_a, set_a) - 1.0 - >>> jaccard_similarity(set_a, set_a, True) - 0.5 - >>> set_a = ['a', 'b', 'c', 'd', 'e'] - >>> set_b = ('c', 'd', 'e', 'f', 'h', 'i') - >>> jaccard_similarity(set_a, set_b) - 0.375 - >>> set_a = ('c', 'd', 'e', 'f', 'h', 'i') - >>> set_b = ['a', 'b', 'c', 'd', 'e'] - >>> jaccard_similarity(set_a, set_b) - 0.375 - >>> set_a = ('c', 'd', 'e', 'f', 'h', 'i') - >>> set_b = ['a', 'b', 'c', 'd'] - >>> jaccard_similarity(set_a, set_b, True) - 0.2 - >>> set_a = {'a', 'b'} - >>> set_b = ['c', 'd'] - >>> jaccard_similarity(set_a, set_b) - Traceback (most recent call last): - ... - ValueError: Set a and b must either both be sets or be either a list or a tuple. - """ - - if isinstance(set_a, set) and isinstance(set_b, set): - intersection_length = len(set_a.intersection(set_b)) - - if alternative_union: - union_length = len(set_a) + len(set_b) - else: - union_length = len(set_a.union(set_b)) - - return intersection_length / union_length - - elif isinstance(set_a, (list, tuple)) and isinstance(set_b, (list, tuple)): - intersection = [element for element in set_a if element in set_b] - - if alternative_union: - return len(intersection) / (len(set_a) + len(set_b)) - else: - # Cast set_a to list because tuples cannot be mutated - union = list(set_a) + [element for element in set_b if element not in set_a] - return len(intersection) / len(union) - raise ValueError( - "Set a and b must either both be sets or be either a list or a tuple." - ) - - -if __name__ == "__main__": - set_a = {"a", "b", "c", "d", "e"} - set_b = {"c", "d", "e", "f", "h", "i"} - print(jaccard_similarity(set_a, set_b)) diff --git a/maths/joint_probability_distribution.py b/maths/joint_probability_distribution.py deleted file mode 100644 index 6fbcea40c358..000000000000 --- a/maths/joint_probability_distribution.py +++ /dev/null @@ -1,124 +0,0 @@ -""" -Calculate joint probability distribution -https://en.wikipedia.org/wiki/Joint_probability_distribution -""" - - -def joint_probability_distribution( - x_values: list[int], - y_values: list[int], - x_probabilities: list[float], - y_probabilities: list[float], -) -> dict: - """ - >>> joint_distribution = joint_probability_distribution( - ... [1, 2], [-2, 5, 8], [0.7, 0.3], [0.3, 0.5, 0.2] - ... ) - >>> from math import isclose - >>> isclose(joint_distribution.pop((1, 8)), 0.14) - True - >>> joint_distribution - {(1, -2): 0.21, (1, 5): 0.35, (2, -2): 0.09, (2, 5): 0.15, (2, 8): 0.06} - """ - return { - (x, y): x_prob * y_prob - for x, x_prob in zip(x_values, x_probabilities) - for y, y_prob in zip(y_values, y_probabilities) - } - - -# Function to calculate the expectation (mean) -def expectation(values: list, probabilities: list) -> float: - """ - >>> from math import isclose - >>> isclose(expectation([1, 2], [0.7, 0.3]), 1.3) - True - """ - return sum(x * p for x, p in zip(values, probabilities)) - - -# Function to calculate the variance -def variance(values: list[int], probabilities: list[float]) -> float: - """ - >>> from math import isclose - >>> isclose(variance([1,2],[0.7,0.3]), 0.21) - True - """ - mean = expectation(values, probabilities) - return sum((x - mean) ** 2 * p for x, p in zip(values, probabilities)) - - -# Function to calculate the covariance -def covariance( - x_values: list[int], - y_values: list[int], - x_probabilities: list[float], - y_probabilities: list[float], -) -> float: - """ - >>> covariance([1, 2], [-2, 5, 8], [0.7, 0.3], [0.3, 0.5, 0.2]) - -2.7755575615628914e-17 - """ - mean_x = expectation(x_values, x_probabilities) - mean_y = expectation(y_values, y_probabilities) - return sum( - (x - mean_x) * (y - mean_y) * px * py - for x, px in zip(x_values, x_probabilities) - for y, py in zip(y_values, y_probabilities) - ) - - -# Function to calculate the standard deviation -def standard_deviation(variance: float) -> float: - """ - >>> standard_deviation(0.21) - 0.458257569495584 - """ - return variance**0.5 - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - # Input values for X and Y - x_vals = input("Enter values of X separated by spaces: ").split() - y_vals = input("Enter values of Y separated by spaces: ").split() - - # Convert input values to integers - x_values = [int(x) for x in x_vals] - y_values = [int(y) for y in y_vals] - - # Input probabilities for X and Y - x_probs = input("Enter probabilities for X separated by spaces: ").split() - y_probs = input("Enter probabilities for Y separated by spaces: ").split() - assert len(x_values) == len(x_probs) - assert len(y_values) == len(y_probs) - - # Convert input probabilities to floats - x_probabilities = [float(p) for p in x_probs] - y_probabilities = [float(p) for p in y_probs] - - # Calculate the joint probability distribution - jpd = joint_probability_distribution( - x_values, y_values, x_probabilities, y_probabilities - ) - - # Print the joint probability distribution - print( - "\n".join( - f"P(X={x}, Y={y}) = {probability}" for (x, y), probability in jpd.items() - ) - ) - mean_xy = expectation( - [x * y for x in x_values for y in y_values], - [px * py for px in x_probabilities for py in y_probabilities], - ) - print(f"x mean: {expectation(x_values, x_probabilities) = }") - print(f"y mean: {expectation(y_values, y_probabilities) = }") - print(f"xy mean: {mean_xy}") - print(f"x: {variance(x_values, x_probabilities) = }") - print(f"y: {variance(y_values, y_probabilities) = }") - print(f"{covariance(x_values, y_values, x_probabilities, y_probabilities) = }") - print(f"x: {standard_deviation(variance(x_values, x_probabilities)) = }") - print(f"y: {standard_deviation(variance(y_values, y_probabilities)) = }") diff --git a/maths/josephus_problem.py b/maths/josephus_problem.py deleted file mode 100644 index 271292ba1d9f..000000000000 --- a/maths/josephus_problem.py +++ /dev/null @@ -1,130 +0,0 @@ -""" -The Josephus problem is a famous theoretical problem related to a certain -counting-out game. This module provides functions to solve the Josephus problem -for num_people and a step_size. - -The Josephus problem is defined as follows: -- num_people are standing in a circle. -- Starting with a specified person, you count around the circle, - skipping a fixed number of people (step_size). -- The person at which you stop counting is eliminated from the circle. -- The counting continues until only one person remains. - -For more information about the Josephus problem, refer to: -https://en.wikipedia.org/wiki/Josephus_problem -""" - - -def josephus_recursive(num_people: int, step_size: int) -> int: - """ - Solve the Josephus problem for num_people and a step_size recursively. - - Args: - num_people: A positive integer representing the number of people. - step_size: A positive integer representing the step size for elimination. - - Returns: - The position of the last person remaining. - - Raises: - ValueError: If num_people or step_size is not a positive integer. - - Examples: - >>> josephus_recursive(7, 3) - 3 - >>> josephus_recursive(10, 2) - 4 - >>> josephus_recursive(0, 2) - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - >>> josephus_recursive(1.9, 2) - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - >>> josephus_recursive(-2, 2) - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - >>> josephus_recursive(7, 0) - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - >>> josephus_recursive(7, -2) - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - >>> josephus_recursive(1_000, 0.01) - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - >>> josephus_recursive("cat", "dog") - Traceback (most recent call last): - ... - ValueError: num_people or step_size is not a positive integer. - """ - if ( - not isinstance(num_people, int) - or not isinstance(step_size, int) - or num_people <= 0 - or step_size <= 0 - ): - raise ValueError("num_people or step_size is not a positive integer.") - - if num_people == 1: - return 0 - - return (josephus_recursive(num_people - 1, step_size) + step_size) % num_people - - -def find_winner(num_people: int, step_size: int) -> int: - """ - Find the winner of the Josephus problem for num_people and a step_size. - - Args: - num_people (int): Number of people. - step_size (int): Step size for elimination. - - Returns: - int: The position of the last person remaining (1-based index). - - Examples: - >>> find_winner(7, 3) - 4 - >>> find_winner(10, 2) - 5 - """ - return josephus_recursive(num_people, step_size) + 1 - - -def josephus_iterative(num_people: int, step_size: int) -> int: - """ - Solve the Josephus problem for num_people and a step_size iteratively. - - Args: - num_people (int): The number of people in the circle. - step_size (int): The number of steps to take before eliminating someone. - - Returns: - int: The position of the last person standing. - - Examples: - >>> josephus_iterative(5, 2) - 3 - >>> josephus_iterative(7, 3) - 4 - """ - circle = list(range(1, num_people + 1)) - current = 0 - - while len(circle) > 1: - current = (current + step_size - 1) % len(circle) - circle.pop(current) - - return circle[0] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/juggler_sequence.py b/maths/juggler_sequence.py deleted file mode 100644 index 7f65d1dff925..000000000000 --- a/maths/juggler_sequence.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -== Juggler Sequence == -Juggler sequence start with any positive integer n. The next term is -obtained as follows: - If n term is even, the next term is floor value of square root of n . - If n is odd, the next term is floor value of 3 time the square root of n. - -https://en.wikipedia.org/wiki/Juggler_sequence -""" - -# Author : Akshay Dubey (https://github.com/itsAkshayDubey) -import math - - -def juggler_sequence(number: int) -> list[int]: - """ - >>> juggler_sequence(0) - Traceback (most recent call last): - ... - ValueError: Input value of [number=0] must be a positive integer - >>> juggler_sequence(1) - [1] - >>> juggler_sequence(2) - [2, 1] - >>> juggler_sequence(3) - [3, 5, 11, 36, 6, 2, 1] - >>> juggler_sequence(5) - [5, 11, 36, 6, 2, 1] - >>> juggler_sequence(10) - [10, 3, 5, 11, 36, 6, 2, 1] - >>> juggler_sequence(25) - [25, 125, 1397, 52214, 228, 15, 58, 7, 18, 4, 2, 1] - >>> juggler_sequence(6.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=6.0] must be an integer - >>> juggler_sequence(-1) - Traceback (most recent call last): - ... - ValueError: Input value of [number=-1] must be a positive integer - """ - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - if number < 1: - msg = f"Input value of [number={number}] must be a positive integer" - raise ValueError(msg) - sequence = [number] - while number != 1: - if number % 2 == 0: - number = math.floor(math.sqrt(number)) - else: - number = math.floor( - math.sqrt(number) * math.sqrt(number) * math.sqrt(number) - ) - sequence.append(number) - return sequence - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/karatsuba.py b/maths/karatsuba.py deleted file mode 100644 index 0e063fb44b83..000000000000 --- a/maths/karatsuba.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Multiply two numbers using Karatsuba algorithm""" - - -def karatsuba(a: int, b: int) -> int: - """ - >>> karatsuba(15463, 23489) == 15463 * 23489 - True - >>> karatsuba(3, 9) == 3 * 9 - True - """ - if len(str(a)) == 1 or len(str(b)) == 1: - return a * b - - m1 = max(len(str(a)), len(str(b))) - m2 = m1 // 2 - - a1, a2 = divmod(a, 10**m2) - b1, b2 = divmod(b, 10**m2) - - x = karatsuba(a2, b2) - y = karatsuba((a1 + a2), (b1 + b2)) - z = karatsuba(a1, b1) - - return (z * 10 ** (2 * m2)) + ((y - z - x) * 10 ** (m2)) + (x) - - -def main(): - print(karatsuba(15463, 23489)) - - -if __name__ == "__main__": - main() diff --git a/maths/kth_lexicographic_permutation.py b/maths/kth_lexicographic_permutation.py deleted file mode 100644 index b85558aca6d4..000000000000 --- a/maths/kth_lexicographic_permutation.py +++ /dev/null @@ -1,40 +0,0 @@ -def kth_permutation(k, n): - """ - Finds k'th lexicographic permutation (in increasing order) of - 0,1,2,...n-1 in O(n^2) time. - - Examples: - First permutation is always 0,1,2,...n - >>> kth_permutation(0,5) - [0, 1, 2, 3, 4] - - The order of permutation of 0,1,2,3 is [0,1,2,3], [0,1,3,2], [0,2,1,3], - [0,2,3,1], [0,3,1,2], [0,3,2,1], [1,0,2,3], [1,0,3,2], [1,2,0,3], - [1,2,3,0], [1,3,0,2] - >>> kth_permutation(10,4) - [1, 3, 0, 2] - """ - # Factorails from 1! to (n-1)! - factorials = [1] - for i in range(2, n): - factorials.append(factorials[-1] * i) - assert 0 <= k < factorials[-1] * n, "k out of bounds" - - permutation = [] - elements = list(range(n)) - - # Find permutation - while factorials: - factorial = factorials.pop() - number, k = divmod(k, factorial) - permutation.append(elements[number]) - elements.remove(elements[number]) - permutation.append(elements[0]) - - return permutation - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/largest_of_very_large_numbers.py b/maths/largest_of_very_large_numbers.py deleted file mode 100644 index edee50371e02..000000000000 --- a/maths/largest_of_very_large_numbers.py +++ /dev/null @@ -1,48 +0,0 @@ -# Author: Abhijeeth S - -import math - - -def res(x, y): - """ - Reduces large number to a more manageable number - >>> res(5, 7) - 4.892790030352132 - >>> res(0, 5) - 0 - >>> res(3, 0) - 1 - >>> res(-1, 5) - Traceback (most recent call last): - ... - ValueError: math domain error - """ - if 0 not in (x, y): - # We use the relation x^y = y*log10(x), where 10 is the base. - return y * math.log10(x) - elif x == 0: # 0 raised to any number is 0 - return 0 - elif y == 0: - return 1 # any number raised to 0 is 1 - raise AssertionError("This should never happen") - - -if __name__ == "__main__": # Main function - # Read two numbers from input and typecast them to int using map function. - # Here x is the base and y is the power. - prompt = "Enter the base and the power separated by a comma: " - x1, y1 = map(int, input(prompt).split(",")) - x2, y2 = map(int, input(prompt).split(",")) - - # We find the log of each number, using the function res(), which takes two - # arguments. - res1 = res(x1, y1) - res2 = res(x2, y2) - - # We check for the largest number - if res1 > res2: - print("Largest number is", x1, "^", y1) - elif res2 > res1: - print("Largest number is", x2, "^", y2) - else: - print("Both are equal") diff --git a/maths/least_common_multiple.py b/maths/least_common_multiple.py deleted file mode 100644 index a5c4bf8e3625..000000000000 --- a/maths/least_common_multiple.py +++ /dev/null @@ -1,76 +0,0 @@ -import unittest -from timeit import timeit - -from maths.greatest_common_divisor import greatest_common_divisor - - -def least_common_multiple_slow(first_num: int, second_num: int) -> int: - """ - Find the least common multiple of two numbers. - - Learn more: https://en.wikipedia.org/wiki/Least_common_multiple - - >>> least_common_multiple_slow(5, 2) - 10 - >>> least_common_multiple_slow(12, 76) - 228 - """ - max_num = first_num if first_num >= second_num else second_num - common_mult = max_num - while (common_mult % first_num > 0) or (common_mult % second_num > 0): - common_mult += max_num - return common_mult - - -def least_common_multiple_fast(first_num: int, second_num: int) -> int: - """ - Find the least common multiple of two numbers. - https://en.wikipedia.org/wiki/Least_common_multiple#Using_the_greatest_common_divisor - >>> least_common_multiple_fast(5,2) - 10 - >>> least_common_multiple_fast(12,76) - 228 - """ - return first_num // greatest_common_divisor(first_num, second_num) * second_num - - -def benchmark(): - setup = ( - "from __main__ import least_common_multiple_slow, least_common_multiple_fast" - ) - print( - "least_common_multiple_slow():", - timeit("least_common_multiple_slow(1000, 999)", setup=setup), - ) - print( - "least_common_multiple_fast():", - timeit("least_common_multiple_fast(1000, 999)", setup=setup), - ) - - -class TestLeastCommonMultiple(unittest.TestCase): - test_inputs = ( - (10, 20), - (13, 15), - (4, 31), - (10, 42), - (43, 34), - (5, 12), - (12, 25), - (10, 25), - (6, 9), - ) - expected_results = (20, 195, 124, 210, 1462, 60, 300, 50, 18) - - def test_lcm_function(self): - for i, (first_num, second_num) in enumerate(self.test_inputs): - slow_result = least_common_multiple_slow(first_num, second_num) - fast_result = least_common_multiple_fast(first_num, second_num) - with self.subTest(i=i): - assert slow_result == self.expected_results[i] - assert fast_result == self.expected_results[i] - - -if __name__ == "__main__": - benchmark() - unittest.main() diff --git a/maths/line_length.py b/maths/line_length.py deleted file mode 100644 index ed2efc31e96e..000000000000 --- a/maths/line_length.py +++ /dev/null @@ -1,65 +0,0 @@ -from __future__ import annotations - -import math -from collections.abc import Callable - - -def line_length( - fnc: Callable[[float], float], - x_start: float, - x_end: float, - steps: int = 100, -) -> float: - """ - Approximates the arc length of a line segment by treating the curve as a - sequence of linear lines and summing their lengths - :param fnc: a function which defines a curve - :param x_start: left end point to indicate the start of line segment - :param x_end: right end point to indicate end of line segment - :param steps: an accuracy gauge; more steps increases accuracy - :return: a float representing the length of the curve - - >>> def f(x): - ... return x - >>> f"{line_length(f, 0, 1, 10):.6f}" - '1.414214' - - >>> def f(x): - ... return 1 - >>> f"{line_length(f, -5.5, 4.5):.6f}" - '10.000000' - - >>> def f(x): - ... return math.sin(5 * x) + math.cos(10 * x) + x * x/10 - >>> f"{line_length(f, 0.0, 10.0, 10000):.6f}" - '69.534930' - """ - - x1 = x_start - fx1 = fnc(x_start) - length = 0.0 - - for _ in range(steps): - # Approximates curve as a sequence of linear lines and sums their length - x2 = (x_end - x_start) / steps + x1 - fx2 = fnc(x2) - length += math.hypot(x2 - x1, fx2 - fx1) - - # Increment step - x1 = x2 - fx1 = fx2 - - return length - - -if __name__ == "__main__": - - def f(x): - return math.sin(10 * x) - - print("f(x) = sin(10 * x)") - print("The length of the curve from x = -10 to x = 10 is:") - i = 10 - while i <= 100000: - print(f"With {i} steps: {line_length(f, -10, 10, i)}") - i *= 10 diff --git a/maths/liouville_lambda.py b/maths/liouville_lambda.py deleted file mode 100644 index 1ed228dd5434..000000000000 --- a/maths/liouville_lambda.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -== Liouville Lambda Function == -The Liouville Lambda function, denoted by λ(n) -and λ(n) is 1 if n is the product of an even number of prime numbers, -and -1 if it is the product of an odd number of primes. - -https://en.wikipedia.org/wiki/Liouville_function -""" - -# Author : Akshay Dubey (https://github.com/itsAkshayDubey) -from maths.prime_factors import prime_factors - - -def liouville_lambda(number: int) -> int: - """ - This functions takes an integer number as input. - returns 1 if n has even number of prime factors and -1 otherwise. - >>> liouville_lambda(10) - 1 - >>> liouville_lambda(11) - -1 - >>> liouville_lambda(0) - Traceback (most recent call last): - ... - ValueError: Input must be a positive integer - >>> liouville_lambda(-1) - Traceback (most recent call last): - ... - ValueError: Input must be a positive integer - >>> liouville_lambda(11.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=11.0] must be an integer - """ - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - if number < 1: - raise ValueError("Input must be a positive integer") - return -1 if len(prime_factors(number)) % 2 else 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/lucas_lehmer_primality_test.py b/maths/lucas_lehmer_primality_test.py deleted file mode 100644 index af5c81133044..000000000000 --- a/maths/lucas_lehmer_primality_test.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -In mathematics, the Lucas-Lehmer test (LLT) is a primality test for Mersenne -numbers. https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test - -A Mersenne number is a number that is one less than a power of two. -That is M_p = 2^p - 1 -https://en.wikipedia.org/wiki/Mersenne_prime - -The Lucas-Lehmer test is the primality test used by the -Great Internet Mersenne Prime Search (GIMPS) to locate large primes. -""" - - -# Primality test 2^p - 1 -# Return true if 2^p - 1 is prime -def lucas_lehmer_test(p: int) -> bool: - """ - >>> lucas_lehmer_test(p=7) - True - - >>> lucas_lehmer_test(p=11) - False - - # M_11 = 2^11 - 1 = 2047 = 23 * 89 - """ - - if p < 2: - raise ValueError("p should not be less than 2!") - elif p == 2: - return True - - s = 4 - m = (1 << p) - 1 - for _ in range(p - 2): - s = ((s * s) - 2) % m - return s == 0 - - -if __name__ == "__main__": - print(lucas_lehmer_test(7)) - print(lucas_lehmer_test(11)) diff --git a/maths/lucas_series.py b/maths/lucas_series.py deleted file mode 100644 index cae6c2815aec..000000000000 --- a/maths/lucas_series.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Lucas_number -""" - - -def recursive_lucas_number(n_th_number: int) -> int: - """ - Returns the nth lucas number - >>> recursive_lucas_number(1) - 1 - >>> recursive_lucas_number(20) - 15127 - >>> recursive_lucas_number(0) - 2 - >>> recursive_lucas_number(25) - 167761 - >>> recursive_lucas_number(-1.5) - Traceback (most recent call last): - ... - TypeError: recursive_lucas_number accepts only integer arguments. - """ - if not isinstance(n_th_number, int): - raise TypeError("recursive_lucas_number accepts only integer arguments.") - if n_th_number == 0: - return 2 - if n_th_number == 1: - return 1 - - return recursive_lucas_number(n_th_number - 1) + recursive_lucas_number( - n_th_number - 2 - ) - - -def dynamic_lucas_number(n_th_number: int) -> int: - """ - Returns the nth lucas number - >>> dynamic_lucas_number(1) - 1 - >>> dynamic_lucas_number(20) - 15127 - >>> dynamic_lucas_number(0) - 2 - >>> dynamic_lucas_number(25) - 167761 - >>> dynamic_lucas_number(-1.5) - Traceback (most recent call last): - ... - TypeError: dynamic_lucas_number accepts only integer arguments. - """ - if not isinstance(n_th_number, int): - raise TypeError("dynamic_lucas_number accepts only integer arguments.") - a, b = 2, 1 - for _ in range(n_th_number): - a, b = b, a + b - return a - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - n = int(input("Enter the number of terms in lucas series:\n").strip()) - print("Using recursive function to calculate lucas series:") - print(" ".join(str(recursive_lucas_number(i)) for i in range(n))) - print("\nUsing dynamic function to calculate lucas series:") - print(" ".join(str(dynamic_lucas_number(i)) for i in range(n))) diff --git a/maths/maclaurin_series.py b/maths/maclaurin_series.py deleted file mode 100644 index 6ec5551a5e6e..000000000000 --- a/maths/maclaurin_series.py +++ /dev/null @@ -1,123 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Taylor_series#Trigonometric_functions -""" - -from math import factorial, pi - - -def maclaurin_sin(theta: float, accuracy: int = 30) -> float: - """ - Finds the maclaurin approximation of sin - - :param theta: the angle to which sin is found - :param accuracy: the degree of accuracy wanted minimum - :return: the value of sine in radians - - - >>> from math import isclose, sin - >>> all(isclose(maclaurin_sin(x, 50), sin(x)) for x in range(-25, 25)) - True - >>> maclaurin_sin(10) - -0.5440211108893691 - >>> maclaurin_sin(-10) - 0.5440211108893704 - >>> maclaurin_sin(10, 15) - -0.544021110889369 - >>> maclaurin_sin(-10, 15) - 0.5440211108893704 - >>> maclaurin_sin("10") - Traceback (most recent call last): - ... - ValueError: maclaurin_sin() requires either an int or float for theta - >>> maclaurin_sin(10, -30) - Traceback (most recent call last): - ... - ValueError: maclaurin_sin() requires a positive int for accuracy - >>> maclaurin_sin(10, 30.5) - Traceback (most recent call last): - ... - ValueError: maclaurin_sin() requires a positive int for accuracy - >>> maclaurin_sin(10, "30") - Traceback (most recent call last): - ... - ValueError: maclaurin_sin() requires a positive int for accuracy - """ - - if not isinstance(theta, (int, float)): - raise ValueError("maclaurin_sin() requires either an int or float for theta") - - if not isinstance(accuracy, int) or accuracy <= 0: - raise ValueError("maclaurin_sin() requires a positive int for accuracy") - - theta = float(theta) - div = theta // (2 * pi) - theta -= 2 * div * pi - return sum( - (-1) ** r * theta ** (2 * r + 1) / factorial(2 * r + 1) for r in range(accuracy) - ) - - -def maclaurin_cos(theta: float, accuracy: int = 30) -> float: - """ - Finds the maclaurin approximation of cos - - :param theta: the angle to which cos is found - :param accuracy: the degree of accuracy wanted - :return: the value of cosine in radians - - - >>> from math import isclose, cos - >>> all(isclose(maclaurin_cos(x, 50), cos(x)) for x in range(-25, 25)) - True - >>> maclaurin_cos(5) - 0.2836621854632268 - >>> maclaurin_cos(-5) - 0.2836621854632265 - >>> maclaurin_cos(10, 15) - -0.8390715290764524 - >>> maclaurin_cos(-10, 15) - -0.8390715290764521 - >>> maclaurin_cos("10") - Traceback (most recent call last): - ... - ValueError: maclaurin_cos() requires either an int or float for theta - >>> maclaurin_cos(10, -30) - Traceback (most recent call last): - ... - ValueError: maclaurin_cos() requires a positive int for accuracy - >>> maclaurin_cos(10, 30.5) - Traceback (most recent call last): - ... - ValueError: maclaurin_cos() requires a positive int for accuracy - >>> maclaurin_cos(10, "30") - Traceback (most recent call last): - ... - ValueError: maclaurin_cos() requires a positive int for accuracy - """ - - if not isinstance(theta, (int, float)): - raise ValueError("maclaurin_cos() requires either an int or float for theta") - - if not isinstance(accuracy, int) or accuracy <= 0: - raise ValueError("maclaurin_cos() requires a positive int for accuracy") - - theta = float(theta) - div = theta // (2 * pi) - theta -= 2 * div * pi - return sum((-1) ** r * theta ** (2 * r) / factorial(2 * r) for r in range(accuracy)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(maclaurin_sin(10)) - print(maclaurin_sin(-10)) - print(maclaurin_sin(10, 15)) - print(maclaurin_sin(-10, 15)) - - print(maclaurin_cos(5)) - print(maclaurin_cos(-5)) - print(maclaurin_cos(10, 15)) - print(maclaurin_cos(-10, 15)) diff --git a/maths/manhattan_distance.py b/maths/manhattan_distance.py deleted file mode 100644 index 413991468a49..000000000000 --- a/maths/manhattan_distance.py +++ /dev/null @@ -1,126 +0,0 @@ -def manhattan_distance(point_a: list, point_b: list) -> float: - """ - Expectts two list of numbers representing two points in the same - n-dimensional space - - https://en.wikipedia.org/wiki/Taxicab_geometry - - >>> manhattan_distance([1,1], [2,2]) - 2.0 - >>> manhattan_distance([1.5,1.5], [2,2]) - 1.0 - >>> manhattan_distance([1.5,1.5], [2.5,2]) - 1.5 - >>> manhattan_distance([-3, -3, -3], [0, 0, 0]) - 9.0 - >>> manhattan_distance([1,1], None) - Traceback (most recent call last): - ... - ValueError: Missing an input - >>> manhattan_distance([1,1], [2, 2, 2]) - Traceback (most recent call last): - ... - ValueError: Both points must be in the same n-dimensional space - >>> manhattan_distance([1,"one"], [2, 2, 2]) - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found str - >>> manhattan_distance(1, [2, 2, 2]) - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found int - >>> manhattan_distance([1,1], "not_a_list") - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found str - """ - - _validate_point(point_a) - _validate_point(point_b) - if len(point_a) != len(point_b): - raise ValueError("Both points must be in the same n-dimensional space") - - return float(sum(abs(a - b) for a, b in zip(point_a, point_b))) - - -def _validate_point(point: list[float]) -> None: - """ - >>> _validate_point(None) - Traceback (most recent call last): - ... - ValueError: Missing an input - >>> _validate_point([1,"one"]) - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found str - >>> _validate_point(1) - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found int - >>> _validate_point("not_a_list") - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found str - """ - if point: - if isinstance(point, list): - for item in point: - if not isinstance(item, (int, float)): - msg = ( - "Expected a list of numbers as input, found " - f"{type(item).__name__}" - ) - raise TypeError(msg) - else: - msg = f"Expected a list of numbers as input, found {type(point).__name__}" - raise TypeError(msg) - else: - raise ValueError("Missing an input") - - -def manhattan_distance_one_liner(point_a: list, point_b: list) -> float: - """ - Version with one liner - - >>> manhattan_distance_one_liner([1,1], [2,2]) - 2.0 - >>> manhattan_distance_one_liner([1.5,1.5], [2,2]) - 1.0 - >>> manhattan_distance_one_liner([1.5,1.5], [2.5,2]) - 1.5 - >>> manhattan_distance_one_liner([-3, -3, -3], [0, 0, 0]) - 9.0 - >>> manhattan_distance_one_liner([1,1], None) - Traceback (most recent call last): - ... - ValueError: Missing an input - >>> manhattan_distance_one_liner([1,1], [2, 2, 2]) - Traceback (most recent call last): - ... - ValueError: Both points must be in the same n-dimensional space - >>> manhattan_distance_one_liner([1,"one"], [2, 2, 2]) - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found str - >>> manhattan_distance_one_liner(1, [2, 2, 2]) - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found int - >>> manhattan_distance_one_liner([1,1], "not_a_list") - Traceback (most recent call last): - ... - TypeError: Expected a list of numbers as input, found str - """ - - _validate_point(point_a) - _validate_point(point_b) - if len(point_a) != len(point_b): - raise ValueError("Both points must be in the same n-dimensional space") - - return float(sum(abs(x - y) for x, y in zip(point_a, point_b))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/matrix_exponentiation.py b/maths/matrix_exponentiation.py deleted file mode 100644 index 7c37151c87ca..000000000000 --- a/maths/matrix_exponentiation.py +++ /dev/null @@ -1,100 +0,0 @@ -"""Matrix Exponentiation""" - -import timeit - -""" -Matrix Exponentiation is a technique to solve linear recurrences in logarithmic time. -You read more about it here: -https://zobayer.blogspot.com/2010/11/matrix-exponentiation.html -https://www.hackerearth.com/practice/notes/matrix-exponentiation-1/ -""" - - -class Matrix: - def __init__(self, arg): - if isinstance(arg, list): # Initializes a matrix identical to the one provided. - self.t = arg - self.n = len(arg) - else: # Initializes a square matrix of the given size and set values to zero. - self.n = arg - self.t = [[0 for _ in range(self.n)] for _ in range(self.n)] - - def __mul__(self, b): - matrix = Matrix(self.n) - for i in range(self.n): - for j in range(self.n): - for k in range(self.n): - matrix.t[i][j] += self.t[i][k] * b.t[k][j] - return matrix - - -def modular_exponentiation(a, b): - matrix = Matrix([[1, 0], [0, 1]]) - while b > 0: - if b & 1: - matrix *= a - a *= a - b >>= 1 - return matrix - - -def fibonacci_with_matrix_exponentiation(n, f1, f2): - # Trivial Cases - if n == 1: - return f1 - elif n == 2: - return f2 - matrix = Matrix([[1, 1], [1, 0]]) - matrix = modular_exponentiation(matrix, n - 2) - return f2 * matrix.t[0][0] + f1 * matrix.t[0][1] - - -def simple_fibonacci(n, f1, f2): - # Trivial Cases - if n == 1: - return f1 - elif n == 2: - return f2 - - fn_1 = f1 - fn_2 = f2 - n -= 2 - - while n > 0: - fn_1, fn_2 = fn_1 + fn_2, fn_1 - n -= 1 - - return fn_1 - - -def matrix_exponentiation_time(): - setup = """ -from random import randint -from __main__ import fibonacci_with_matrix_exponentiation -""" - code = "fibonacci_with_matrix_exponentiation(randint(1,70000), 1, 1)" - exec_time = timeit.timeit(setup=setup, stmt=code, number=100) - print("With matrix exponentiation the average execution time is ", exec_time / 100) - return exec_time - - -def simple_fibonacci_time(): - setup = """ -from random import randint -from __main__ import simple_fibonacci -""" - code = "simple_fibonacci(randint(1,70000), 1, 1)" - exec_time = timeit.timeit(setup=setup, stmt=code, number=100) - print( - "Without matrix exponentiation the average execution time is ", exec_time / 100 - ) - return exec_time - - -def main(): - matrix_exponentiation_time() - simple_fibonacci_time() - - -if __name__ == "__main__": - main() diff --git a/maths/max_sum_sliding_window.py b/maths/max_sum_sliding_window.py deleted file mode 100644 index 090117429604..000000000000 --- a/maths/max_sum_sliding_window.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Given an array of integer elements and an integer 'k', we are required to find the -maximum sum of 'k' consecutive elements in the array. - -Instead of using a nested for loop, in a Brute force approach we will use a technique -called 'Window sliding technique' where the nested loops can be converted to a single -loop to reduce time complexity. -""" - -from __future__ import annotations - - -def max_sum_in_array(array: list[int], k: int) -> int: - """ - Returns the maximum sum of k consecutive elements - >>> arr = [1, 4, 2, 10, 2, 3, 1, 0, 20] - >>> k = 4 - >>> max_sum_in_array(arr, k) - 24 - >>> k = 10 - >>> max_sum_in_array(arr,k) - Traceback (most recent call last): - ... - ValueError: Invalid Input - >>> arr = [1, 4, 2, 10, 2, 13, 1, 0, 2] - >>> k = 4 - >>> max_sum_in_array(arr, k) - 27 - """ - if len(array) < k or k < 0: - raise ValueError("Invalid Input") - max_sum = current_sum = sum(array[:k]) - for i in range(len(array) - k): - current_sum = current_sum - array[i] + array[i + k] - max_sum = max(max_sum, current_sum) - return max_sum - - -if __name__ == "__main__": - from doctest import testmod - from random import randint - - testmod() - array = [randint(-1000, 1000) for i in range(100)] - k = randint(0, 110) - print(f"The maximum sum of {k} consecutive elements is {max_sum_in_array(array,k)}") diff --git a/maths/minkowski_distance.py b/maths/minkowski_distance.py deleted file mode 100644 index 99f02e31e417..000000000000 --- a/maths/minkowski_distance.py +++ /dev/null @@ -1,45 +0,0 @@ -def minkowski_distance( - point_a: list[float], - point_b: list[float], - order: int, -) -> float: - """ - This function calculates the Minkowski distance for a given order between - two n-dimensional points represented as lists. For the case of order = 1, - the Minkowski distance degenerates to the Manhattan distance. For - order = 2, the usual Euclidean distance is obtained. - - https://en.wikipedia.org/wiki/Minkowski_distance - - Note: due to floating point calculation errors the output of this - function may be inaccurate. - - >>> minkowski_distance([1.0, 1.0], [2.0, 2.0], 1) - 2.0 - >>> minkowski_distance([1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], 2) - 8.0 - >>> import numpy as np - >>> bool(np.isclose(5.0, minkowski_distance([5.0], [0.0], 3))) - True - >>> minkowski_distance([1.0], [2.0], -1) - Traceback (most recent call last): - ... - ValueError: The order must be greater than or equal to 1. - >>> minkowski_distance([1.0], [1.0, 2.0], 1) - Traceback (most recent call last): - ... - ValueError: Both points must have the same dimension. - """ - if order < 1: - raise ValueError("The order must be greater than or equal to 1.") - - if len(point_a) != len(point_b): - raise ValueError("Both points must have the same dimension.") - - return sum(abs(a - b) ** order for a, b in zip(point_a, point_b)) ** (1 / order) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/mobius_function.py b/maths/mobius_function.py deleted file mode 100644 index 8abdc4cafcb4..000000000000 --- a/maths/mobius_function.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -References: https://en.wikipedia.org/wiki/M%C3%B6bius_function -References: wikipedia:square free number -psf/black : True -ruff : True -""" - -from maths.is_square_free import is_square_free -from maths.prime_factors import prime_factors - - -def mobius(n: int) -> int: - """ - Mobius function - >>> mobius(24) - 0 - >>> mobius(-1) - 1 - >>> mobius('asd') - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'str' - >>> mobius(10**400) - 0 - >>> mobius(10**-400) - 1 - >>> mobius(-1424) - 1 - >>> mobius([1, '2', 2.0]) - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'list' - """ - factors = prime_factors(n) - if is_square_free(factors): - return -1 if len(factors) % 2 else 1 - return 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/modular_division.py b/maths/modular_division.py deleted file mode 100644 index 2f8f4479b27d..000000000000 --- a/maths/modular_division.py +++ /dev/null @@ -1,158 +0,0 @@ -from __future__ import annotations - - -def modular_division(a: int, b: int, n: int) -> int: - """ - Modular Division : - An efficient algorithm for dividing b by a modulo n. - - GCD ( Greatest Common Divisor ) or HCF ( Highest Common Factor ) - - Given three integers a, b, and n, such that gcd(a,n)=1 and n>1, the algorithm should - return an integer x such that 0≤x≤n-1, and b/a=x(modn) (that is, b=ax(modn)). - - Theorem: - a has a multiplicative inverse modulo n iff gcd(a,n) = 1 - - - This find x = b*a^(-1) mod n - Uses ExtendedEuclid to find the inverse of a - - >>> modular_division(4,8,5) - 2 - - >>> modular_division(3,8,5) - 1 - - >>> modular_division(4, 11, 5) - 4 - - """ - assert n > 1 - assert a > 0 - assert greatest_common_divisor(a, n) == 1 - (d, t, s) = extended_gcd(n, a) # Implemented below - x = (b * s) % n - return x - - -def invert_modulo(a: int, n: int) -> int: - """ - This function find the inverses of a i.e., a^(-1) - - >>> invert_modulo(2, 5) - 3 - - >>> invert_modulo(8,7) - 1 - - """ - (b, x) = extended_euclid(a, n) # Implemented below - if b < 0: - b = (b % n + n) % n - return b - - -# ------------------ Finding Modular division using invert_modulo ------------------- - - -def modular_division2(a: int, b: int, n: int) -> int: - """ - This function used the above inversion of a to find x = (b*a^(-1))mod n - - >>> modular_division2(4,8,5) - 2 - - >>> modular_division2(3,8,5) - 1 - - >>> modular_division2(4, 11, 5) - 4 - - """ - s = invert_modulo(a, n) - x = (b * s) % n - return x - - -def extended_gcd(a: int, b: int) -> tuple[int, int, int]: - """ - Extended Euclid's Algorithm : If d divides a and b and d = a*x + b*y for integers x - and y, then d = gcd(a,b) - >>> extended_gcd(10, 6) - (2, -1, 2) - - >>> extended_gcd(7, 5) - (1, -2, 3) - - ** extended_gcd function is used when d = gcd(a,b) is required in output - - """ - assert a >= 0 - assert b >= 0 - - if b == 0: - d, x, y = a, 1, 0 - else: - (d, p, q) = extended_gcd(b, a % b) - x = q - y = p - q * (a // b) - - assert a % d == 0 - assert b % d == 0 - assert d == a * x + b * y - - return (d, x, y) - - -def extended_euclid(a: int, b: int) -> tuple[int, int]: - """ - Extended Euclid - >>> extended_euclid(10, 6) - (-1, 2) - - >>> extended_euclid(7, 5) - (-2, 3) - - """ - if b == 0: - return (1, 0) - (x, y) = extended_euclid(b, a % b) - k = a // b - return (y, x - k * y) - - -def greatest_common_divisor(a: int, b: int) -> int: - """ - Euclid's Lemma : d divides a and b, if and only if d divides a-b and b - Euclid's Algorithm - - >>> greatest_common_divisor(7,5) - 1 - - Note : In number theory, two integers a and b are said to be relatively prime, - mutually prime, or co-prime if the only positive integer (factor) that divides - both of them is 1 i.e., gcd(a,b) = 1. - - >>> greatest_common_divisor(121, 11) - 11 - - """ - if a < b: - a, b = b, a - - while a % b != 0: - a, b = b, a % b - - return b - - -if __name__ == "__main__": - from doctest import testmod - - testmod(name="modular_division", verbose=True) - testmod(name="modular_division2", verbose=True) - testmod(name="invert_modulo", verbose=True) - testmod(name="extended_gcd", verbose=True) - testmod(name="extended_euclid", verbose=True) - testmod(name="greatest_common_divisor", verbose=True) diff --git a/maths/modular_exponential.py b/maths/modular_exponential.py deleted file mode 100644 index a27e29ebc02a..000000000000 --- a/maths/modular_exponential.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Modular Exponential. -Modular exponentiation is a type of exponentiation performed over a modulus. -For more explanation, please check -https://en.wikipedia.org/wiki/Modular_exponentiation -""" - -"""Calculate Modular Exponential.""" - - -def modular_exponential(base: int, power: int, mod: int): - """ - >>> modular_exponential(5, 0, 10) - 1 - >>> modular_exponential(2, 8, 7) - 4 - >>> modular_exponential(3, -2, 9) - -1 - """ - - if power < 0: - return -1 - base %= mod - result = 1 - - while power > 0: - if power & 1: - result = (result * base) % mod - power = power >> 1 - base = (base * base) % mod - - return result - - -def main(): - """Call Modular Exponential Function.""" - print(modular_exponential(3, 200, 13)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - main() diff --git a/maths/monte_carlo.py b/maths/monte_carlo.py deleted file mode 100644 index d174a0b188a2..000000000000 --- a/maths/monte_carlo.py +++ /dev/null @@ -1,131 +0,0 @@ -""" -@author: MatteoRaso -""" - -from collections.abc import Callable -from math import pi, sqrt -from random import uniform -from statistics import mean - - -def pi_estimator(iterations: int): - """ - An implementation of the Monte Carlo method used to find pi. - 1. Draw a 2x2 square centred at (0,0). - 2. Inscribe a circle within the square. - 3. For each iteration, place a dot anywhere in the square. - a. Record the number of dots within the circle. - 4. After all the dots are placed, divide the dots in the circle by the total. - 5. Multiply this value by 4 to get your estimate of pi. - 6. Print the estimated and numpy value of pi - """ - - # A local function to see if a dot lands in the circle. - def is_in_circle(x: float, y: float) -> bool: - distance_from_centre = sqrt((x**2) + (y**2)) - # Our circle has a radius of 1, so a distance - # greater than 1 would land outside the circle. - return distance_from_centre <= 1 - - # The proportion of guesses that landed in the circle - proportion = mean( - int(is_in_circle(uniform(-1.0, 1.0), uniform(-1.0, 1.0))) - for _ in range(iterations) - ) - # The ratio of the area for circle to square is pi/4. - pi_estimate = proportion * 4 - print(f"The estimated value of pi is {pi_estimate}") - print(f"The numpy value of pi is {pi}") - print(f"The total error is {abs(pi - pi_estimate)}") - - -def area_under_curve_estimator( - iterations: int, - function_to_integrate: Callable[[float], float], - min_value: float = 0.0, - max_value: float = 1.0, -) -> float: - """ - An implementation of the Monte Carlo method to find area under - a single variable non-negative real-valued continuous function, - say f(x), where x lies within a continuous bounded interval, - say [min_value, max_value], where min_value and max_value are - finite numbers - 1. Let x be a uniformly distributed random variable between min_value to - max_value - 2. Expected value of f(x) = - (integrate f(x) from min_value to max_value)/(max_value - min_value) - 3. Finding expected value of f(x): - a. Repeatedly draw x from uniform distribution - b. Evaluate f(x) at each of the drawn x values - c. Expected value = average of the function evaluations - 4. Estimated value of integral = Expected value * (max_value - min_value) - 5. Returns estimated value - """ - - return mean( - function_to_integrate(uniform(min_value, max_value)) for _ in range(iterations) - ) * (max_value - min_value) - - -def area_under_line_estimator_check( - iterations: int, min_value: float = 0.0, max_value: float = 1.0 -) -> None: - """ - Checks estimation error for area_under_curve_estimator function - for f(x) = x where x lies within min_value to max_value - 1. Calls "area_under_curve_estimator" function - 2. Compares with the expected value - 3. Prints estimated, expected and error value - """ - - def identity_function(x: float) -> float: - """ - Represents identity function - >>> [function_to_integrate(x) for x in [-2.0, -1.0, 0.0, 1.0, 2.0]] - [-2.0, -1.0, 0.0, 1.0, 2.0] - """ - return x - - estimated_value = area_under_curve_estimator( - iterations, identity_function, min_value, max_value - ) - expected_value = (max_value * max_value - min_value * min_value) / 2 - - print("******************") - print(f"Estimating area under y=x where x varies from {min_value} to {max_value}") - print(f"Estimated value is {estimated_value}") - print(f"Expected value is {expected_value}") - print(f"Total error is {abs(estimated_value - expected_value)}") - print("******************") - - -def pi_estimator_using_area_under_curve(iterations: int) -> None: - """ - Area under curve y = sqrt(4 - x^2) where x lies in 0 to 2 is equal to pi - """ - - def function_to_integrate(x: float) -> float: - """ - Represents semi-circle with radius 2 - >>> [function_to_integrate(x) for x in [-2.0, 0.0, 2.0]] - [0.0, 2.0, 0.0] - """ - return sqrt(4.0 - x * x) - - estimated_value = area_under_curve_estimator( - iterations, function_to_integrate, 0.0, 2.0 - ) - - print("******************") - print("Estimating pi using area_under_curve_estimator") - print(f"Estimated value is {estimated_value}") - print(f"Expected value is {pi}") - print(f"Total error is {abs(estimated_value - pi)}") - print("******************") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/monte_carlo_dice.py b/maths/monte_carlo_dice.py deleted file mode 100644 index 362f70b49828..000000000000 --- a/maths/monte_carlo_dice.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import annotations - -import random - - -class Dice: - NUM_SIDES = 6 - - def __init__(self): - """Initialize a six sided dice""" - self.sides = list(range(1, Dice.NUM_SIDES + 1)) - - def roll(self): - return random.choice(self.sides) - - -def throw_dice(num_throws: int, num_dice: int = 2) -> list[float]: - """ - Return probability list of all possible sums when throwing dice. - - >>> random.seed(0) - >>> throw_dice(10, 1) - [10.0, 0.0, 30.0, 50.0, 10.0, 0.0] - >>> throw_dice(100, 1) - [19.0, 17.0, 17.0, 11.0, 23.0, 13.0] - >>> throw_dice(1000, 1) - [18.8, 15.5, 16.3, 17.6, 14.2, 17.6] - >>> throw_dice(10000, 1) - [16.35, 16.89, 16.93, 16.6, 16.52, 16.71] - >>> throw_dice(10000, 2) - [2.74, 5.6, 7.99, 11.26, 13.92, 16.7, 14.44, 10.63, 8.05, 5.92, 2.75] - """ - dices = [Dice() for i in range(num_dice)] - count_of_sum = [0] * (len(dices) * Dice.NUM_SIDES + 1) - for _ in range(num_throws): - count_of_sum[sum(dice.roll() for dice in dices)] += 1 - probability = [round((count * 100) / num_throws, 2) for count in count_of_sum] - return probability[num_dice:] # remove probability of sums that never appear - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/number_of_digits.py b/maths/number_of_digits.py deleted file mode 100644 index bb9c0d248fd1..000000000000 --- a/maths/number_of_digits.py +++ /dev/null @@ -1,113 +0,0 @@ -import math -from timeit import timeit - - -def num_digits(n: int) -> int: - """ - Find the number of digits in a number. - - >>> num_digits(12345) - 5 - >>> num_digits(123) - 3 - >>> num_digits(0) - 1 - >>> num_digits(-1) - 1 - >>> num_digits(-123456) - 6 - >>> num_digits('123') # Raises a TypeError for non-integer input - Traceback (most recent call last): - ... - TypeError: Input must be an integer - """ - - if not isinstance(n, int): - raise TypeError("Input must be an integer") - - digits = 0 - n = abs(n) - while True: - n = n // 10 - digits += 1 - if n == 0: - break - return digits - - -def num_digits_fast(n: int) -> int: - """ - Find the number of digits in a number. - abs() is used as logarithm for negative numbers is not defined. - - >>> num_digits_fast(12345) - 5 - >>> num_digits_fast(123) - 3 - >>> num_digits_fast(0) - 1 - >>> num_digits_fast(-1) - 1 - >>> num_digits_fast(-123456) - 6 - >>> num_digits('123') # Raises a TypeError for non-integer input - Traceback (most recent call last): - ... - TypeError: Input must be an integer - """ - - if not isinstance(n, int): - raise TypeError("Input must be an integer") - - return 1 if n == 0 else math.floor(math.log(abs(n), 10) + 1) - - -def num_digits_faster(n: int) -> int: - """ - Find the number of digits in a number. - abs() is used for negative numbers - - >>> num_digits_faster(12345) - 5 - >>> num_digits_faster(123) - 3 - >>> num_digits_faster(0) - 1 - >>> num_digits_faster(-1) - 1 - >>> num_digits_faster(-123456) - 6 - >>> num_digits('123') # Raises a TypeError for non-integer input - Traceback (most recent call last): - ... - TypeError: Input must be an integer - """ - - if not isinstance(n, int): - raise TypeError("Input must be an integer") - - return len(str(abs(n))) - - -def benchmark() -> None: - """ - Benchmark multiple functions, with three different length int values. - """ - from collections.abc import Callable - - def benchmark_a_function(func: Callable, value: int) -> None: - call = f"{func.__name__}({value})" - timing = timeit(f"__main__.{call}", setup="import __main__") - print(f"{call}: {func(value)} -- {timing} seconds") - - for value in (262144, 1125899906842624, 1267650600228229401496703205376): - for func in (num_digits, num_digits_fast, num_digits_faster): - benchmark_a_function(func, value) - print() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - benchmark() diff --git a/maths/numerical_analysis/__init__.py b/maths/numerical_analysis/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/maths/numerical_analysis/adams_bashforth.py b/maths/numerical_analysis/adams_bashforth.py deleted file mode 100644 index 26244a58552f..000000000000 --- a/maths/numerical_analysis/adams_bashforth.py +++ /dev/null @@ -1,231 +0,0 @@ -""" -Use the Adams-Bashforth methods to solve Ordinary Differential Equations. - -https://en.wikipedia.org/wiki/Linear_multistep_method -Author : Ravi Kumar -""" - -from collections.abc import Callable -from dataclasses import dataclass - -import numpy as np - - -@dataclass -class AdamsBashforth: - """ - args: - func: An ordinary differential equation (ODE) as function of x and y. - x_initials: List containing initial required values of x. - y_initials: List containing initial required values of y. - step_size: The increment value of x. - x_final: The final value of x. - - Returns: Solution of y at each nodal point - - >>> def f(x, y): - ... return x + y - >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0.2, 1], 0.2, 1) # doctest: +ELLIPSIS - AdamsBashforth(func=..., x_initials=[0, 0.2, 0.4], y_initials=[0, 0.2, 1], step...) - >>> AdamsBashforth(f, [0, 0.2, 1], [0, 0, 0.04], 0.2, 1).step_2() - Traceback (most recent call last): - ... - ValueError: The final value of x must be greater than the initial values of x. - - >>> AdamsBashforth(f, [0, 0.2, 0.3], [0, 0, 0.04], 0.2, 1).step_3() - Traceback (most recent call last): - ... - ValueError: x-values must be equally spaced according to step size. - - >>> AdamsBashforth(f,[0,0.2,0.4,0.6,0.8],[0,0,0.04,0.128,0.307],-0.2,1).step_5() - Traceback (most recent call last): - ... - ValueError: Step size must be positive. - """ - - func: Callable[[float, float], float] - x_initials: list[float] - y_initials: list[float] - step_size: float - x_final: float - - def __post_init__(self) -> None: - if self.x_initials[-1] >= self.x_final: - raise ValueError( - "The final value of x must be greater than the initial values of x." - ) - - if self.step_size <= 0: - raise ValueError("Step size must be positive.") - - if not all( - round(x1 - x0, 10) == self.step_size - for x0, x1 in zip(self.x_initials, self.x_initials[1:]) - ): - raise ValueError("x-values must be equally spaced according to step size.") - - def step_2(self) -> np.ndarray: - """ - >>> def f(x, y): - ... return x - >>> AdamsBashforth(f, [0, 0.2], [0, 0], 0.2, 1).step_2() - array([0. , 0. , 0.06, 0.16, 0.3 , 0.48]) - - >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_2() - Traceback (most recent call last): - ... - ValueError: Insufficient initial points information. - """ - - if len(self.x_initials) != 2 or len(self.y_initials) != 2: - raise ValueError("Insufficient initial points information.") - - x_0, x_1 = self.x_initials[:2] - y_0, y_1 = self.y_initials[:2] - - n = int((self.x_final - x_1) / self.step_size) - y = np.zeros(n + 2) - y[0] = y_0 - y[1] = y_1 - - for i in range(n): - y[i + 2] = y[i + 1] + (self.step_size / 2) * ( - 3 * self.func(x_1, y[i + 1]) - self.func(x_0, y[i]) - ) - x_0 = x_1 - x_1 += self.step_size - - return y - - def step_3(self) -> np.ndarray: - """ - >>> def f(x, y): - ... return x + y - >>> y = AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_3() - >>> float(y[3]) - 0.15533333333333332 - - >>> AdamsBashforth(f, [0, 0.2], [0, 0], 0.2, 1).step_3() - Traceback (most recent call last): - ... - ValueError: Insufficient initial points information. - """ - if len(self.x_initials) != 3 or len(self.y_initials) != 3: - raise ValueError("Insufficient initial points information.") - - x_0, x_1, x_2 = self.x_initials[:3] - y_0, y_1, y_2 = self.y_initials[:3] - - n = int((self.x_final - x_2) / self.step_size) - y = np.zeros(n + 4) - y[0] = y_0 - y[1] = y_1 - y[2] = y_2 - - for i in range(n + 1): - y[i + 3] = y[i + 2] + (self.step_size / 12) * ( - 23 * self.func(x_2, y[i + 2]) - - 16 * self.func(x_1, y[i + 1]) - + 5 * self.func(x_0, y[i]) - ) - x_0 = x_1 - x_1 = x_2 - x_2 += self.step_size - - return y - - def step_4(self) -> np.ndarray: - """ - >>> def f(x,y): - ... return x + y - >>> y = AdamsBashforth( - ... f, [0, 0.2, 0.4, 0.6], [0, 0, 0.04, 0.128], 0.2, 1).step_4() - >>> float(y[4]) - 0.30699999999999994 - >>> float(y[5]) - 0.5771083333333333 - - >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_4() - Traceback (most recent call last): - ... - ValueError: Insufficient initial points information. - """ - - if len(self.x_initials) != 4 or len(self.y_initials) != 4: - raise ValueError("Insufficient initial points information.") - - x_0, x_1, x_2, x_3 = self.x_initials[:4] - y_0, y_1, y_2, y_3 = self.y_initials[:4] - - n = int((self.x_final - x_3) / self.step_size) - y = np.zeros(n + 4) - y[0] = y_0 - y[1] = y_1 - y[2] = y_2 - y[3] = y_3 - - for i in range(n): - y[i + 4] = y[i + 3] + (self.step_size / 24) * ( - 55 * self.func(x_3, y[i + 3]) - - 59 * self.func(x_2, y[i + 2]) - + 37 * self.func(x_1, y[i + 1]) - - 9 * self.func(x_0, y[i]) - ) - x_0 = x_1 - x_1 = x_2 - x_2 = x_3 - x_3 += self.step_size - - return y - - def step_5(self) -> np.ndarray: - """ - >>> def f(x,y): - ... return x + y - >>> y = AdamsBashforth( - ... f, [0, 0.2, 0.4, 0.6, 0.8], [0, 0.02140, 0.02140, 0.22211, 0.42536], - ... 0.2, 1).step_5() - >>> float(y[-1]) - 0.05436839444444452 - - >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_5() - Traceback (most recent call last): - ... - ValueError: Insufficient initial points information. - """ - - if len(self.x_initials) != 5 or len(self.y_initials) != 5: - raise ValueError("Insufficient initial points information.") - - x_0, x_1, x_2, x_3, x_4 = self.x_initials[:5] - y_0, y_1, y_2, y_3, y_4 = self.y_initials[:5] - - n = int((self.x_final - x_4) / self.step_size) - y = np.zeros(n + 6) - y[0] = y_0 - y[1] = y_1 - y[2] = y_2 - y[3] = y_3 - y[4] = y_4 - - for i in range(n + 1): - y[i + 5] = y[i + 4] + (self.step_size / 720) * ( - 1901 * self.func(x_4, y[i + 4]) - - 2774 * self.func(x_3, y[i + 3]) - - 2616 * self.func(x_2, y[i + 2]) - - 1274 * self.func(x_1, y[i + 1]) - + 251 * self.func(x_0, y[i]) - ) - x_0 = x_1 - x_1 = x_2 - x_2 = x_3 - x_3 = x_4 - x_4 += self.step_size - - return y - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/bisection.py b/maths/numerical_analysis/bisection.py deleted file mode 100644 index e359cc170072..000000000000 --- a/maths/numerical_analysis/bisection.py +++ /dev/null @@ -1,55 +0,0 @@ -from collections.abc import Callable - - -def bisection(function: Callable[[float], float], a: float, b: float) -> float: - """ - finds where function becomes 0 in [a,b] using bolzano - >>> bisection(lambda x: x ** 3 - 1, -5, 5) - 1.0000000149011612 - >>> bisection(lambda x: x ** 3 - 1, 2, 1000) - Traceback (most recent call last): - ... - ValueError: could not find root in given interval. - >>> bisection(lambda x: x ** 2 - 4 * x + 3, 0, 2) - 1.0 - >>> bisection(lambda x: x ** 2 - 4 * x + 3, 2, 4) - 3.0 - >>> bisection(lambda x: x ** 2 - 4 * x + 3, 4, 1000) - Traceback (most recent call last): - ... - ValueError: could not find root in given interval. - """ - start: float = a - end: float = b - if function(a) == 0: # one of the a or b is a root for the function - return a - elif function(b) == 0: - return b - elif ( - function(a) * function(b) > 0 - ): # if none of these are root and they are both positive or negative, - # then this algorithm can't find the root - raise ValueError("could not find root in given interval.") - else: - mid: float = start + (end - start) / 2.0 - while abs(start - mid) > 10**-7: # until precisely equals to 10^-7 - if function(mid) == 0: - return mid - elif function(mid) * function(start) < 0: - end = mid - else: - start = mid - mid = start + (end - start) / 2.0 - return mid - - -def f(x: float) -> float: - return x**3 - 2 * x - 5 - - -if __name__ == "__main__": - print(bisection(f, 1, 1000)) - - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/bisection_2.py b/maths/numerical_analysis/bisection_2.py deleted file mode 100644 index 68ba6577ce29..000000000000 --- a/maths/numerical_analysis/bisection_2.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Given a function on floating number f(x) and two floating numbers `a` and `b` such that -f(a) * f(b) < 0 and f(x) is continuous in [a, b]. -Here f(x) represents algebraic or transcendental equation. -Find root of function in interval [a, b] (Or find a value of x such that f(x) is 0) - -https://en.wikipedia.org/wiki/Bisection_method -""" - - -def equation(x: float) -> float: - """ - >>> equation(5) - -15 - >>> equation(0) - 10 - >>> equation(-5) - -15 - >>> equation(0.1) - 9.99 - >>> equation(-0.1) - 9.99 - """ - return 10 - x * x - - -def bisection(a: float, b: float) -> float: - """ - >>> bisection(-2, 5) - 3.1611328125 - >>> bisection(0, 6) - 3.158203125 - >>> bisection(2, 3) - Traceback (most recent call last): - ... - ValueError: Wrong space! - """ - # Bolzano theory in order to find if there is a root between a and b - if equation(a) * equation(b) >= 0: - raise ValueError("Wrong space!") - - c = a - while (b - a) >= 0.01: - # Find middle point - c = (a + b) / 2 - # Check if middle point is root - if equation(c) == 0.0: - break - # Decide the side to repeat the steps - if equation(c) * equation(a) < 0: - b = c - else: - a = c - return c - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(bisection(-2, 5)) - print(bisection(0, 6)) diff --git a/maths/numerical_analysis/integration_by_simpson_approx.py b/maths/numerical_analysis/integration_by_simpson_approx.py deleted file mode 100644 index 934299997aac..000000000000 --- a/maths/numerical_analysis/integration_by_simpson_approx.py +++ /dev/null @@ -1,121 +0,0 @@ -""" -Author : Syed Faizan ( 3rd Year IIIT Pune ) -Github : faizan2700 - -Purpose : You have one function f(x) which takes float integer and returns -float you have to integrate the function in limits a to b. -The approximation proposed by Thomas Simpson in 1743 is one way to calculate -integration. - -( read article : https://cp-algorithms.com/num_methods/simpson-integration.html ) - -simpson_integration() takes function,lower_limit=a,upper_limit=b,precision and -returns the integration of function in given limit. -""" - -# constants -# the more the number of steps the more accurate -N_STEPS = 1000 - - -def f(x: float) -> float: - return x * x - - -""" -Summary of Simpson Approximation : - -By simpsons integration : -1. integration of fxdx with limit a to b is = - f(x0) + 4 * f(x1) + 2 * f(x2) + 4 * f(x3) + 2 * f(x4)..... + f(xn) -where x0 = a -xi = a + i * h -xn = b -""" - - -def simpson_integration(function, a: float, b: float, precision: int = 4) -> float: - """ - Args: - function : the function which's integration is desired - a : the lower limit of integration - b : upper limit of integration - precision : precision of the result,error required default is 4 - - Returns: - result : the value of the approximated integration of function in range a to b - - Raises: - AssertionError: function is not callable - AssertionError: a is not float or integer - AssertionError: function should return float or integer - AssertionError: b is not float or integer - AssertionError: precision is not positive integer - - >>> simpson_integration(lambda x : x*x,1,2,3) - 2.333 - - >>> simpson_integration(lambda x : x*x,'wrong_input',2,3) - Traceback (most recent call last): - ... - AssertionError: a should be float or integer your input : wrong_input - - >>> simpson_integration(lambda x : x*x,1,'wrong_input',3) - Traceback (most recent call last): - ... - AssertionError: b should be float or integer your input : wrong_input - - >>> simpson_integration(lambda x : x*x,1,2,'wrong_input') - Traceback (most recent call last): - ... - AssertionError: precision should be positive integer your input : wrong_input - >>> simpson_integration('wrong_input',2,3,4) - Traceback (most recent call last): - ... - AssertionError: the function(object) passed should be callable your input : ... - - >>> simpson_integration(lambda x : x*x,3.45,3.2,1) - -2.8 - - >>> simpson_integration(lambda x : x*x,3.45,3.2,0) - Traceback (most recent call last): - ... - AssertionError: precision should be positive integer your input : 0 - - >>> simpson_integration(lambda x : x*x,3.45,3.2,-1) - Traceback (most recent call last): - ... - AssertionError: precision should be positive integer your input : -1 - - """ - assert callable( - function - ), f"the function(object) passed should be callable your input : {function}" - assert isinstance(a, (float, int)), f"a should be float or integer your input : {a}" - assert isinstance(function(a), (float, int)), ( - "the function should return integer or float return type of your function, " - f"{type(a)}" - ) - assert isinstance(b, (float, int)), f"b should be float or integer your input : {b}" - assert ( - isinstance(precision, int) and precision > 0 - ), f"precision should be positive integer your input : {precision}" - - # just applying the formula of simpson for approximate integration written in - # mentioned article in first comment of this file and above this function - - h = (b - a) / N_STEPS - result = function(a) + function(b) - - for i in range(1, N_STEPS): - a1 = a + h * i - result += function(a1) * (4 if i % 2 else 2) - - result *= h / 3 - return round(result, precision) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/intersection.py b/maths/numerical_analysis/intersection.py deleted file mode 100644 index 826c0ead0a00..000000000000 --- a/maths/numerical_analysis/intersection.py +++ /dev/null @@ -1,49 +0,0 @@ -import math -from collections.abc import Callable - - -def intersection(function: Callable[[float], float], x0: float, x1: float) -> float: - """ - function is the f we want to find its root - x0 and x1 are two random starting points - >>> intersection(lambda x: x ** 3 - 1, -5, 5) - 0.9999999999954654 - >>> intersection(lambda x: x ** 3 - 1, 5, 5) - Traceback (most recent call last): - ... - ZeroDivisionError: float division by zero, could not find root - >>> intersection(lambda x: x ** 3 - 1, 100, 200) - 1.0000000000003888 - >>> intersection(lambda x: x ** 2 - 4 * x + 3, 0, 2) - 0.9999999998088019 - >>> intersection(lambda x: x ** 2 - 4 * x + 3, 2, 4) - 2.9999999998088023 - >>> intersection(lambda x: x ** 2 - 4 * x + 3, 4, 1000) - 3.0000000001786042 - >>> intersection(math.sin, -math.pi, math.pi) - 0.0 - >>> intersection(math.cos, -math.pi, math.pi) - Traceback (most recent call last): - ... - ZeroDivisionError: float division by zero, could not find root - """ - x_n: float = x0 - x_n1: float = x1 - while True: - if x_n == x_n1 or function(x_n1) == function(x_n): - raise ZeroDivisionError("float division by zero, could not find root") - x_n2: float = x_n1 - ( - function(x_n1) / ((function(x_n1) - function(x_n)) / (x_n1 - x_n)) - ) - if abs(x_n2 - x_n1) < 10**-5: - return x_n2 - x_n = x_n1 - x_n1 = x_n2 - - -def f(x: float) -> float: - return math.pow(x, 3) - (2 * x) - 5 - - -if __name__ == "__main__": - print(intersection(f, 3, 3.5)) diff --git a/maths/numerical_analysis/nevilles_method.py b/maths/numerical_analysis/nevilles_method.py deleted file mode 100644 index 25c93ac6c531..000000000000 --- a/maths/numerical_analysis/nevilles_method.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Python program to show how to interpolate and evaluate a polynomial -using Neville's method. -Neville's method evaluates a polynomial that passes through a -given set of x and y points for a particular x value (x0) using the -Newton polynomial form. -Reference: - https://rpubs.com/aaronsc32/nevilles-method-polynomial-interpolation -""" - - -def neville_interpolate(x_points: list, y_points: list, x0: int) -> list: - """ - Interpolate and evaluate a polynomial using Neville's method. - Arguments: - x_points, y_points: Iterables of x and corresponding y points through - which the polynomial passes. - x0: The value of x to evaluate the polynomial for. - Return Value: A list of the approximated value and the Neville iterations - table respectively. - >>> import pprint - >>> neville_interpolate((1,2,3,4,6), (6,7,8,9,11), 5)[0] - 10.0 - >>> pprint.pprint(neville_interpolate((1,2,3,4,6), (6,7,8,9,11), 99)[1]) - [[0, 6, 0, 0, 0], - [0, 7, 0, 0, 0], - [0, 8, 104.0, 0, 0], - [0, 9, 104.0, 104.0, 0], - [0, 11, 104.0, 104.0, 104.0]] - >>> neville_interpolate((1,2,3,4,6), (6,7,8,9,11), 99)[0] - 104.0 - >>> neville_interpolate((1,2,3,4,6), (6,7,8,9,11), '') - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for -: 'str' and 'int' - """ - n = len(x_points) - q = [[0] * n for i in range(n)] - for i in range(n): - q[i][1] = y_points[i] - - for i in range(2, n): - for j in range(i, n): - q[j][i] = ( - (x0 - x_points[j - i + 1]) * q[j][i - 1] - - (x0 - x_points[j]) * q[j - 1][i - 1] - ) / (x_points[j] - x_points[j - i + 1]) - - return [q[n - 1][n - 1], q] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/newton_forward_interpolation.py b/maths/numerical_analysis/newton_forward_interpolation.py deleted file mode 100644 index 466f6c18cf59..000000000000 --- a/maths/numerical_analysis/newton_forward_interpolation.py +++ /dev/null @@ -1,57 +0,0 @@ -# https://www.geeksforgeeks.org/newton-forward-backward-interpolation/ -from __future__ import annotations - -import math - - -# for calculating u value -def ucal(u: float, p: int) -> float: - """ - >>> ucal(1, 2) - 0 - >>> ucal(1.1, 2) - 0.11000000000000011 - >>> ucal(1.2, 2) - 0.23999999999999994 - """ - temp = u - for i in range(1, p): - temp = temp * (u - i) - return temp - - -def main() -> None: - n = int(input("enter the numbers of values: ")) - y: list[list[float]] = [] - for _ in range(n): - y.append([]) - for i in range(n): - for j in range(n): - y[i].append(j) - y[i][j] = 0 - - print("enter the values of parameters in a list: ") - x = list(map(int, input().split())) - - print("enter the values of corresponding parameters: ") - for i in range(n): - y[i][0] = float(input()) - - value = int(input("enter the value to interpolate: ")) - u = (value - x[0]) / (x[1] - x[0]) - - # for calculating forward difference table - - for i in range(1, n): - for j in range(n - i): - y[j][i] = y[j + 1][i - 1] - y[j][i - 1] - - summ = y[0][0] - for i in range(1, n): - summ += (ucal(u, i) * y[0][i]) / math.factorial(i) - - print(f"the value at {value} is {summ}") - - -if __name__ == "__main__": - main() diff --git a/maths/numerical_analysis/newton_raphson.py b/maths/numerical_analysis/newton_raphson.py deleted file mode 100644 index 10fb244bf426..000000000000 --- a/maths/numerical_analysis/newton_raphson.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -The Newton-Raphson method (aka the Newton method) is a root-finding algorithm that -approximates a root of a given real-valued function f(x). It is an iterative method -given by the formula - -x_{n + 1} = x_n + f(x_n) / f'(x_n) - -with the precision of the approximation increasing as the number of iterations increase. - -Reference: https://en.wikipedia.org/wiki/Newton%27s_method -""" - -from collections.abc import Callable - -RealFunc = Callable[[float], float] - - -def calc_derivative(f: RealFunc, x: float, delta_x: float = 1e-3) -> float: - """ - Approximate the derivative of a function f(x) at a point x using the finite - difference method - - >>> import math - >>> tolerance = 1e-5 - >>> derivative = calc_derivative(lambda x: x**2, 2) - >>> math.isclose(derivative, 4, abs_tol=tolerance) - True - >>> derivative = calc_derivative(math.sin, 0) - >>> math.isclose(derivative, 1, abs_tol=tolerance) - True - """ - return (f(x + delta_x / 2) - f(x - delta_x / 2)) / delta_x - - -def newton_raphson( - f: RealFunc, - x0: float = 0, - max_iter: int = 100, - step: float = 1e-6, - max_error: float = 1e-6, - log_steps: bool = False, -) -> tuple[float, float, list[float]]: - """ - Find a root of the given function f using the Newton-Raphson method. - - :param f: A real-valued single-variable function - :param x0: Initial guess - :param max_iter: Maximum number of iterations - :param step: Step size of x, used to approximate f'(x) - :param max_error: Maximum approximation error - :param log_steps: bool denoting whether to log intermediate steps - - :return: A tuple containing the approximation, the error, and the intermediate - steps. If log_steps is False, then an empty list is returned for the third - element of the tuple. - - :raises ZeroDivisionError: The derivative approaches 0. - :raises ArithmeticError: No solution exists, or the solution isn't found before the - iteration limit is reached. - - >>> import math - >>> tolerance = 1e-15 - >>> root, *_ = newton_raphson(lambda x: x**2 - 5*x + 2, 0.4, max_error=tolerance) - >>> math.isclose(root, (5 - math.sqrt(17)) / 2, abs_tol=tolerance) - True - >>> root, *_ = newton_raphson(lambda x: math.log(x) - 1, 2, max_error=tolerance) - >>> math.isclose(root, math.e, abs_tol=tolerance) - True - >>> root, *_ = newton_raphson(math.sin, 1, max_error=tolerance) - >>> math.isclose(root, 0, abs_tol=tolerance) - True - >>> newton_raphson(math.cos, 0) - Traceback (most recent call last): - ... - ZeroDivisionError: No converging solution found, zero derivative - >>> newton_raphson(lambda x: x**2 + 1, 2) - Traceback (most recent call last): - ... - ArithmeticError: No converging solution found, iteration limit reached - """ - - def f_derivative(x: float) -> float: - return calc_derivative(f, x, step) - - a = x0 # Set initial guess - steps = [] - for _ in range(max_iter): - if log_steps: # Log intermediate steps - steps.append(a) - - error = abs(f(a)) - if error < max_error: - return a, error, steps - - if f_derivative(a) == 0: - raise ZeroDivisionError("No converging solution found, zero derivative") - a -= f(a) / f_derivative(a) # Calculate next estimate - raise ArithmeticError("No converging solution found, iteration limit reached") - - -if __name__ == "__main__": - import doctest - from math import exp, tanh - - doctest.testmod() - - def func(x: float) -> float: - return tanh(x) ** 2 - exp(3 * x) - - solution, err, steps = newton_raphson( - func, x0=10, max_iter=100, step=1e-6, log_steps=True - ) - print(f"{solution=}, {err=}") - print("\n".join(str(x) for x in steps)) diff --git a/maths/numerical_analysis/numerical_integration.py b/maths/numerical_analysis/numerical_integration.py deleted file mode 100644 index f64436ec48c1..000000000000 --- a/maths/numerical_analysis/numerical_integration.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Approximates the area under the curve using the trapezoidal rule -""" - -from __future__ import annotations - -from collections.abc import Callable - - -def trapezoidal_area( - fnc: Callable[[float], float], - x_start: float, - x_end: float, - steps: int = 100, -) -> float: - """ - Treats curve as a collection of linear lines and sums the area of the - trapezium shape they form - :param fnc: a function which defines a curve - :param x_start: left end point to indicate the start of line segment - :param x_end: right end point to indicate end of line segment - :param steps: an accuracy gauge; more steps increases the accuracy - :return: a float representing the length of the curve - - >>> def f(x): - ... return 5 - >>> '%.3f' % trapezoidal_area(f, 12.0, 14.0, 1000) - '10.000' - - >>> def f(x): - ... return 9*x**2 - >>> '%.4f' % trapezoidal_area(f, -4.0, 0, 10000) - '192.0000' - - >>> '%.4f' % trapezoidal_area(f, -4.0, 4.0, 10000) - '384.0000' - """ - x1 = x_start - fx1 = fnc(x_start) - area = 0.0 - - for _ in range(steps): - # Approximates small segments of curve as linear and solve - # for trapezoidal area - x2 = (x_end - x_start) / steps + x1 - fx2 = fnc(x2) - area += abs(fx2 + fx1) * (x2 - x1) / 2 - - # Increment step - x1 = x2 - fx1 = fx2 - return area - - -if __name__ == "__main__": - - def f(x): - return x**3 - - print("f(x) = x^3") - print("The area between the curve, x = -10, x = 10 and the x axis is:") - i = 10 - while i <= 100000: - area = trapezoidal_area(f, -5, 5, i) - print(f"with {i} steps: {area}") - i *= 10 diff --git a/maths/numerical_analysis/proper_fractions.py b/maths/numerical_analysis/proper_fractions.py deleted file mode 100644 index 774ce9a24876..000000000000 --- a/maths/numerical_analysis/proper_fractions.py +++ /dev/null @@ -1,40 +0,0 @@ -from math import gcd - - -def proper_fractions(denominator: int) -> list[str]: - """ - this algorithm returns a list of proper fractions, in the - range between 0 and 1, which can be formed with the given denominator - https://en.wikipedia.org/wiki/Fraction#Proper_and_improper_fractions - - >>> proper_fractions(10) - ['1/10', '3/10', '7/10', '9/10'] - >>> proper_fractions(5) - ['1/5', '2/5', '3/5', '4/5'] - >>> proper_fractions(-15) - Traceback (most recent call last): - ... - ValueError: The Denominator Cannot be less than 0 - >>> proper_fractions(0) - [] - >>> proper_fractions(1.2) - Traceback (most recent call last): - ... - ValueError: The Denominator must be an integer - """ - - if denominator < 0: - raise ValueError("The Denominator Cannot be less than 0") - elif isinstance(denominator, float): - raise ValueError("The Denominator must be an integer") - return [ - f"{numerator}/{denominator}" - for numerator in range(1, denominator) - if gcd(numerator, denominator) == 1 - ] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/maths/numerical_analysis/runge_kutta.py b/maths/numerical_analysis/runge_kutta.py deleted file mode 100644 index 3a25b0fb0173..000000000000 --- a/maths/numerical_analysis/runge_kutta.py +++ /dev/null @@ -1,44 +0,0 @@ -import numpy as np - - -def runge_kutta(f, y0, x0, h, x_end): - """ - Calculate the numeric solution at each step to the ODE f(x, y) using RK4 - - https://en.wikipedia.org/wiki/Runge-Kutta_methods - - Arguments: - f -- The ode as a function of x and y - y0 -- the initial value for y - x0 -- the initial value for x - h -- the stepsize - x_end -- the end value for x - - >>> # the exact solution is math.exp(x) - >>> def f(x, y): - ... return y - >>> y0 = 1 - >>> y = runge_kutta(f, y0, 0.0, 0.01, 5) - >>> float(y[-1]) - 148.41315904125113 - """ - n = int(np.ceil((x_end - x0) / h)) - y = np.zeros((n + 1,)) - y[0] = y0 - x = x0 - - for k in range(n): - k1 = f(x, y[k]) - k2 = f(x + 0.5 * h, y[k] + 0.5 * h * k1) - k3 = f(x + 0.5 * h, y[k] + 0.5 * h * k2) - k4 = f(x + h, y[k] + h * k3) - y[k + 1] = y[k] + (1 / 6) * h * (k1 + 2 * k2 + 2 * k3 + k4) - x += h - - return y - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/runge_kutta_fehlberg_45.py b/maths/numerical_analysis/runge_kutta_fehlberg_45.py deleted file mode 100644 index 0fbd60a35c1a..000000000000 --- a/maths/numerical_analysis/runge_kutta_fehlberg_45.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -Use the Runge-Kutta-Fehlberg method to solve Ordinary Differential Equations. -""" - -from collections.abc import Callable - -import numpy as np - - -def runge_kutta_fehlberg_45( - func: Callable, - x_initial: float, - y_initial: float, - step_size: float, - x_final: float, -) -> np.ndarray: - """ - Solve an Ordinary Differential Equations using Runge-Kutta-Fehlberg Method (rkf45) - of order 5. - - https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta%E2%80%93Fehlberg_method - - args: - func: An ordinary differential equation (ODE) as function of x and y. - x_initial: The initial value of x. - y_initial: The initial value of y. - step_size: The increment value of x. - x_final: The final value of x. - - Returns: - Solution of y at each nodal point - - # exact value of y[1] is tan(0.2) = 0.2027100937470787 - >>> def f(x, y): - ... return 1 + y**2 - >>> y = runge_kutta_fehlberg_45(f, 0, 0, 0.2, 1) - >>> float(y[1]) - 0.2027100937470787 - >>> def f(x,y): - ... return x - >>> y = runge_kutta_fehlberg_45(f, -1, 0, 0.2, 0) - >>> float(y[1]) - -0.18000000000000002 - >>> y = runge_kutta_fehlberg_45(5, 0, 0, 0.1, 1) - Traceback (most recent call last): - ... - TypeError: 'int' object is not callable - >>> def f(x, y): - ... return x + y - >>> y = runge_kutta_fehlberg_45(f, 0, 0, 0.2, -1) - Traceback (most recent call last): - ... - ValueError: The final value of x must be greater than initial value of x. - >>> def f(x, y): - ... return x - >>> y = runge_kutta_fehlberg_45(f, -1, 0, -0.2, 0) - Traceback (most recent call last): - ... - ValueError: Step size must be positive. - """ - if x_initial >= x_final: - raise ValueError( - "The final value of x must be greater than initial value of x." - ) - - if step_size <= 0: - raise ValueError("Step size must be positive.") - - n = int((x_final - x_initial) / step_size) - y = np.zeros( - (n + 1), - ) - x = np.zeros(n + 1) - y[0] = y_initial - x[0] = x_initial - for i in range(n): - k1 = step_size * func(x[i], y[i]) - k2 = step_size * func(x[i] + step_size / 4, y[i] + k1 / 4) - k3 = step_size * func( - x[i] + (3 / 8) * step_size, y[i] + (3 / 32) * k1 + (9 / 32) * k2 - ) - k4 = step_size * func( - x[i] + (12 / 13) * step_size, - y[i] + (1932 / 2197) * k1 - (7200 / 2197) * k2 + (7296 / 2197) * k3, - ) - k5 = step_size * func( - x[i] + step_size, - y[i] + (439 / 216) * k1 - 8 * k2 + (3680 / 513) * k3 - (845 / 4104) * k4, - ) - k6 = step_size * func( - x[i] + step_size / 2, - y[i] - - (8 / 27) * k1 - + 2 * k2 - - (3544 / 2565) * k3 - + (1859 / 4104) * k4 - - (11 / 40) * k5, - ) - y[i + 1] = ( - y[i] - + (16 / 135) * k1 - + (6656 / 12825) * k3 - + (28561 / 56430) * k4 - - (9 / 50) * k5 - + (2 / 55) * k6 - ) - x[i + 1] = step_size + x[i] - return y - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/runge_kutta_gills.py b/maths/numerical_analysis/runge_kutta_gills.py deleted file mode 100644 index 5d9672679813..000000000000 --- a/maths/numerical_analysis/runge_kutta_gills.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -Use the Runge-Kutta-Gill's method of order 4 to solve Ordinary Differential Equations. - -https://www.geeksforgeeks.org/gills-4th-order-method-to-solve-differential-equations/ -Author : Ravi Kumar -""" - -from collections.abc import Callable -from math import sqrt - -import numpy as np - - -def runge_kutta_gills( - func: Callable[[float, float], float], - x_initial: float, - y_initial: float, - step_size: float, - x_final: float, -) -> np.ndarray: - """ - Solve an Ordinary Differential Equations using Runge-Kutta-Gills Method of order 4. - - args: - func: An ordinary differential equation (ODE) as function of x and y. - x_initial: The initial value of x. - y_initial: The initial value of y. - step_size: The increment value of x. - x_final: The final value of x. - - Returns: - Solution of y at each nodal point - - >>> def f(x, y): - ... return (x-y)/2 - >>> y = runge_kutta_gills(f, 0, 3, 0.2, 5) - >>> float(y[-1]) - 3.4104259225717537 - - >>> def f(x,y): - ... return x - >>> y = runge_kutta_gills(f, -1, 0, 0.2, 0) - >>> y - array([ 0. , -0.18, -0.32, -0.42, -0.48, -0.5 ]) - - >>> def f(x, y): - ... return x + y - >>> y = runge_kutta_gills(f, 0, 0, 0.2, -1) - Traceback (most recent call last): - ... - ValueError: The final value of x must be greater than initial value of x. - - >>> def f(x, y): - ... return x - >>> y = runge_kutta_gills(f, -1, 0, -0.2, 0) - Traceback (most recent call last): - ... - ValueError: Step size must be positive. - """ - if x_initial >= x_final: - raise ValueError( - "The final value of x must be greater than initial value of x." - ) - - if step_size <= 0: - raise ValueError("Step size must be positive.") - - n = int((x_final - x_initial) / step_size) - y = np.zeros(n + 1) - y[0] = y_initial - for i in range(n): - k1 = step_size * func(x_initial, y[i]) - k2 = step_size * func(x_initial + step_size / 2, y[i] + k1 / 2) - k3 = step_size * func( - x_initial + step_size / 2, - y[i] + (-0.5 + 1 / sqrt(2)) * k1 + (1 - 1 / sqrt(2)) * k2, - ) - k4 = step_size * func( - x_initial + step_size, y[i] - (1 / sqrt(2)) * k2 + (1 + 1 / sqrt(2)) * k3 - ) - - y[i + 1] = y[i] + (k1 + (2 - sqrt(2)) * k2 + (2 + sqrt(2)) * k3 + k4) / 6 - x_initial += step_size - return y - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/numerical_analysis/secant_method.py b/maths/numerical_analysis/secant_method.py deleted file mode 100644 index 9fff8222cdde..000000000000 --- a/maths/numerical_analysis/secant_method.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Implementing Secant method in Python -Author: dimgrichr -""" - -from math import exp - - -def f(x: float) -> float: - """ - >>> f(5) - 39.98652410600183 - """ - return 8 * x - 2 * exp(-x) - - -def secant_method(lower_bound: float, upper_bound: float, repeats: int) -> float: - """ - >>> secant_method(1, 3, 2) - 0.2139409276214589 - """ - x0 = lower_bound - x1 = upper_bound - for _ in range(repeats): - x0, x1 = x1, x1 - (f(x1) * (x1 - x0)) / (f(x1) - f(x0)) - return x1 - - -if __name__ == "__main__": - print(f"Example: {secant_method(1, 3, 2)}") diff --git a/maths/numerical_analysis/simpson_rule.py b/maths/numerical_analysis/simpson_rule.py deleted file mode 100644 index e75fb557a2f5..000000000000 --- a/maths/numerical_analysis/simpson_rule.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Numerical integration or quadrature for a smooth function f with known values at x_i - -This method is the classical approach of summing 'Equally Spaced Abscissas' - -method 2: -"Simpson Rule" - -""" - - -def method_2(boundary: list[int], steps: int) -> float: - # "Simpson Rule" - # int(f) = delta_x/2 * (b-a)/3*(f1 + 4f2 + 2f_3 + ... + fn) - """ - Calculate the definite integral of a function using Simpson's Rule. - :param boundary: A list containing the lower and upper bounds of integration. - :param steps: The number of steps or resolution for the integration. - :return: The approximate integral value. - - >>> round(method_2([0, 2, 4], 10), 10) - 2.6666666667 - >>> round(method_2([2, 0], 10), 10) - -0.2666666667 - >>> round(method_2([-2, -1], 10), 10) - 2.172 - >>> round(method_2([0, 1], 10), 10) - 0.3333333333 - >>> round(method_2([0, 2], 10), 10) - 2.6666666667 - >>> round(method_2([0, 2], 100), 10) - 2.5621226667 - >>> round(method_2([0, 1], 1000), 10) - 0.3320026653 - >>> round(method_2([0, 2], 0), 10) - Traceback (most recent call last): - ... - ZeroDivisionError: Number of steps must be greater than zero - >>> round(method_2([0, 2], -10), 10) - Traceback (most recent call last): - ... - ZeroDivisionError: Number of steps must be greater than zero - """ - if steps <= 0: - raise ZeroDivisionError("Number of steps must be greater than zero") - - h = (boundary[1] - boundary[0]) / steps - a = boundary[0] - b = boundary[1] - x_i = make_points(a, b, h) - y = 0.0 - y += (h / 3.0) * f(a) - cnt = 2 - for i in x_i: - y += (h / 3) * (4 - 2 * (cnt % 2)) * f(i) - cnt += 1 - y += (h / 3.0) * f(b) - return y - - -def make_points(a, b, h): - x = a + h - while x < (b - h): - yield x - x = x + h - - -def f(x): # enter your function here - y = (x - 0) * (x - 0) - return y - - -def main(): - a = 0.0 # Lower bound of integration - b = 1.0 # Upper bound of integration - steps = 10.0 # number of steps or resolution - boundary = [a, b] # boundary of integration - y = method_2(boundary, steps) - print(f"y = {y}") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/maths/numerical_analysis/square_root.py b/maths/numerical_analysis/square_root.py deleted file mode 100644 index 4462ccb75261..000000000000 --- a/maths/numerical_analysis/square_root.py +++ /dev/null @@ -1,63 +0,0 @@ -import math - - -def fx(x: float, a: float) -> float: - return math.pow(x, 2) - a - - -def fx_derivative(x: float) -> float: - return 2 * x - - -def get_initial_point(a: float) -> float: - start = 2.0 - - while start <= a: - start = math.pow(start, 2) - - return start - - -def square_root_iterative( - a: float, max_iter: int = 9999, tolerance: float = 1e-14 -) -> float: - """ - Square root approximated using Newton's method. - https://en.wikipedia.org/wiki/Newton%27s_method - - >>> all(abs(square_root_iterative(i) - math.sqrt(i)) <= 1e-14 for i in range(500)) - True - - >>> square_root_iterative(-1) - Traceback (most recent call last): - ... - ValueError: math domain error - - >>> square_root_iterative(4) - 2.0 - - >>> square_root_iterative(3.2) - 1.788854381999832 - - >>> square_root_iterative(140) - 11.832159566199232 - """ - - if a < 0: - raise ValueError("math domain error") - - value = get_initial_point(a) - - for _ in range(max_iter): - prev_value = value - value = value - fx(value, a) / fx_derivative(value) - if abs(prev_value - value) < tolerance: - return value - - return value - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/maths/odd_sieve.py b/maths/odd_sieve.py deleted file mode 100644 index 06605ca54296..000000000000 --- a/maths/odd_sieve.py +++ /dev/null @@ -1,42 +0,0 @@ -from itertools import compress, repeat -from math import ceil, sqrt - - -def odd_sieve(num: int) -> list[int]: - """ - Returns the prime numbers < `num`. The prime numbers are calculated using an - odd sieve implementation of the Sieve of Eratosthenes algorithm - (see for reference https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes). - - >>> odd_sieve(2) - [] - >>> odd_sieve(3) - [2] - >>> odd_sieve(10) - [2, 3, 5, 7] - >>> odd_sieve(20) - [2, 3, 5, 7, 11, 13, 17, 19] - """ - - if num <= 2: - return [] - if num == 3: - return [2] - - # Odd sieve for numbers in range [3, num - 1] - sieve = bytearray(b"\x01") * ((num >> 1) - 1) - - for i in range(3, int(sqrt(num)) + 1, 2): - if sieve[(i >> 1) - 1]: - i_squared = i**2 - sieve[(i_squared >> 1) - 1 :: i] = repeat( - 0, ceil((num - i_squared) / (i << 1)) - ) - - return [2, *list(compress(range(3, num, 2), sieve))] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/perfect_cube.py b/maths/perfect_cube.py deleted file mode 100644 index a732b7cce6c8..000000000000 --- a/maths/perfect_cube.py +++ /dev/null @@ -1,55 +0,0 @@ -def perfect_cube(n: int) -> bool: - """ - Check if a number is a perfect cube or not. - - >>> perfect_cube(27) - True - >>> perfect_cube(4) - False - """ - val = n ** (1 / 3) - return (val * val * val) == n - - -def perfect_cube_binary_search(n: int) -> bool: - """ - Check if a number is a perfect cube or not using binary search. - Time complexity : O(Log(n)) - Space complexity: O(1) - - >>> perfect_cube_binary_search(27) - True - >>> perfect_cube_binary_search(64) - True - >>> perfect_cube_binary_search(4) - False - >>> perfect_cube_binary_search("a") - Traceback (most recent call last): - ... - TypeError: perfect_cube_binary_search() only accepts integers - >>> perfect_cube_binary_search(0.1) - Traceback (most recent call last): - ... - TypeError: perfect_cube_binary_search() only accepts integers - """ - if not isinstance(n, int): - raise TypeError("perfect_cube_binary_search() only accepts integers") - if n < 0: - n = -n - left = 0 - right = n - while left <= right: - mid = left + (right - left) // 2 - if mid * mid * mid == n: - return True - elif mid * mid * mid < n: - left = mid + 1 - else: - right = mid - 1 - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/perfect_number.py b/maths/perfect_number.py deleted file mode 100644 index df6b6e3d91d8..000000000000 --- a/maths/perfect_number.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -== Perfect Number == -In number theory, a perfect number is a positive integer that is equal to the sum of -its positive divisors, excluding the number itself. -For example: 6 ==> divisors[1, 2, 3, 6] - Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6 - So, 6 is a Perfect Number - -Other examples of Perfect Numbers: 28, 486, ... - -https://en.wikipedia.org/wiki/Perfect_number -""" - - -def perfect(number: int) -> bool: - """ - Check if a number is a perfect number. - - A perfect number is a positive integer that is equal to the sum of its proper - divisors (excluding itself). - - Args: - number: The number to be checked. - - Returns: - True if the number is a perfect number otherwise, False. - Start from 1 because dividing by 0 will raise ZeroDivisionError. - A number at most can be divisible by the half of the number except the number - itself. For example, 6 is at most can be divisible by 3 except by 6 itself. - Examples: - >>> perfect(27) - False - >>> perfect(28) - True - >>> perfect(29) - False - >>> perfect(6) - True - >>> perfect(12) - False - >>> perfect(496) - True - >>> perfect(8128) - True - >>> perfect(0) - False - >>> perfect(-1) - False - >>> perfect(12.34) - Traceback (most recent call last): - ... - ValueError: number must an integer - >>> perfect("Hello") - Traceback (most recent call last): - ... - ValueError: number must an integer - """ - if not isinstance(number, int): - raise ValueError("number must an integer") - if number <= 0: - return False - return sum(i for i in range(1, number // 2 + 1) if number % i == 0) == number - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print("Program to check whether a number is a Perfect number or not...") - try: - number = int(input("Enter a positive integer: ").strip()) - except ValueError: - msg = "number must an integer" - print(msg) - raise ValueError(msg) - - print(f"{number} is {'' if perfect(number) else 'not '}a Perfect Number.") diff --git a/maths/perfect_square.py b/maths/perfect_square.py deleted file mode 100644 index 107e68528068..000000000000 --- a/maths/perfect_square.py +++ /dev/null @@ -1,73 +0,0 @@ -import math - - -def perfect_square(num: int) -> bool: - """ - Check if a number is perfect square number or not - :param num: the number to be checked - :return: True if number is square number, otherwise False - - >>> perfect_square(9) - True - >>> perfect_square(16) - True - >>> perfect_square(1) - True - >>> perfect_square(0) - True - >>> perfect_square(10) - False - """ - return math.sqrt(num) * math.sqrt(num) == num - - -def perfect_square_binary_search(n: int) -> bool: - """ - Check if a number is perfect square using binary search. - Time complexity : O(Log(n)) - Space complexity: O(1) - - >>> perfect_square_binary_search(9) - True - >>> perfect_square_binary_search(16) - True - >>> perfect_square_binary_search(1) - True - >>> perfect_square_binary_search(0) - True - >>> perfect_square_binary_search(10) - False - >>> perfect_square_binary_search(-1) - False - >>> perfect_square_binary_search(1.1) - False - >>> perfect_square_binary_search("a") - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'str' - >>> perfect_square_binary_search(None) - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'NoneType' - >>> perfect_square_binary_search([]) - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'list' - """ - left = 0 - right = n - while left <= right: - mid = (left + right) // 2 - if mid**2 == n: - return True - elif mid**2 > n: - right = mid - 1 - else: - left = mid + 1 - return False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/persistence.py b/maths/persistence.py deleted file mode 100644 index c61a69a7c27d..000000000000 --- a/maths/persistence.py +++ /dev/null @@ -1,82 +0,0 @@ -def multiplicative_persistence(num: int) -> int: - """ - Return the persistence of a given number. - - https://en.wikipedia.org/wiki/Persistence_of_a_number - - >>> multiplicative_persistence(217) - 2 - >>> multiplicative_persistence(-1) - Traceback (most recent call last): - ... - ValueError: multiplicative_persistence() does not accept negative values - >>> multiplicative_persistence("long number") - Traceback (most recent call last): - ... - ValueError: multiplicative_persistence() only accepts integral values - """ - - if not isinstance(num, int): - raise ValueError("multiplicative_persistence() only accepts integral values") - if num < 0: - raise ValueError("multiplicative_persistence() does not accept negative values") - - steps = 0 - num_string = str(num) - - while len(num_string) != 1: - numbers = [int(i) for i in num_string] - - total = 1 - for i in range(len(numbers)): - total *= numbers[i] - - num_string = str(total) - - steps += 1 - return steps - - -def additive_persistence(num: int) -> int: - """ - Return the persistence of a given number. - - https://en.wikipedia.org/wiki/Persistence_of_a_number - - >>> additive_persistence(199) - 3 - >>> additive_persistence(-1) - Traceback (most recent call last): - ... - ValueError: additive_persistence() does not accept negative values - >>> additive_persistence("long number") - Traceback (most recent call last): - ... - ValueError: additive_persistence() only accepts integral values - """ - - if not isinstance(num, int): - raise ValueError("additive_persistence() only accepts integral values") - if num < 0: - raise ValueError("additive_persistence() does not accept negative values") - - steps = 0 - num_string = str(num) - - while len(num_string) != 1: - numbers = [int(i) for i in num_string] - - total = 0 - for i in range(len(numbers)): - total += numbers[i] - - num_string = str(total) - - steps += 1 - return steps - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/pi_generator.py b/maths/pi_generator.py deleted file mode 100644 index 97f2c540c1ce..000000000000 --- a/maths/pi_generator.py +++ /dev/null @@ -1,87 +0,0 @@ -def calculate_pi(limit: int) -> str: - """ - https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80 - Leibniz Formula for Pi - - The Leibniz formula is the special case arctan(1) = pi / 4. - Leibniz's formula converges extremely slowly: it exhibits sublinear convergence. - - Convergence (https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80#Convergence) - - We cannot try to prove against an interrupted, uncompleted generation. - https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80#Unusual_behaviour - The errors can in fact be predicted, but those calculations also approach infinity - for accuracy. - - Our output will be a string so that we can definitely store all digits. - - >>> import math - >>> float(calculate_pi(15)) == math.pi - True - - Since we cannot predict errors or interrupt any infinite alternating series - generation since they approach infinity, or interrupt any alternating series, we'll - need math.isclose() - - >>> math.isclose(float(calculate_pi(50)), math.pi) - True - >>> math.isclose(float(calculate_pi(100)), math.pi) - True - - Since math.pi contains only 16 digits, here are some tests with known values: - - >>> calculate_pi(50) - '3.14159265358979323846264338327950288419716939937510' - >>> calculate_pi(80) - '3.14159265358979323846264338327950288419716939937510582097494459230781640628620899' - """ - # Variables used for the iteration process - q = 1 - r = 0 - t = 1 - k = 1 - n = 3 - m = 3 - - decimal = limit - counter = 0 - - result = "" - - # We can't compare against anything if we make a generator, - # so we'll stick with plain return logic - while counter != decimal + 1: - if 4 * q + r - t < n * t: - result += str(n) - if counter == 0: - result += "." - - if decimal == counter: - break - - counter += 1 - nr = 10 * (r - n * t) - n = ((10 * (3 * q + r)) // t) - 10 * n - q *= 10 - r = nr - else: - nr = (2 * q + r) * m - nn = (q * (7 * k) + 2 + (r * m)) // (t * m) - q *= k - t *= m - m += 2 - k += 1 - n = nn - r = nr - return result - - -def main() -> None: - print(f"{calculate_pi(50) = }") - import doctest - - doctest.testmod() - - -if __name__ == "__main__": - main() diff --git a/maths/pi_monte_carlo_estimation.py b/maths/pi_monte_carlo_estimation.py deleted file mode 100644 index 29b679907239..000000000000 --- a/maths/pi_monte_carlo_estimation.py +++ /dev/null @@ -1,67 +0,0 @@ -import random - - -class Point: - def __init__(self, x: float, y: float) -> None: - self.x = x - self.y = y - - def is_in_unit_circle(self) -> bool: - """ - True, if the point lies in the unit circle - False, otherwise - """ - return (self.x**2 + self.y**2) <= 1 - - @classmethod - def random_unit_square(cls): - """ - Generates a point randomly drawn from the unit square [0, 1) x [0, 1). - """ - return cls(x=random.random(), y=random.random()) - - -def estimate_pi(number_of_simulations: int) -> float: - """ - Generates an estimate of the mathematical constant PI. - See https://en.wikipedia.org/wiki/Monte_Carlo_method#Overview - - The estimate is generated by Monte Carlo simulations. Let U be uniformly drawn from - the unit square [0, 1) x [0, 1). The probability that U lies in the unit circle is: - - P[U in unit circle] = 1/4 PI - - and therefore - - PI = 4 * P[U in unit circle] - - We can get an estimate of the probability P[U in unit circle]. - See https://en.wikipedia.org/wiki/Empirical_probability by: - - 1. Draw a point uniformly from the unit square. - 2. Repeat the first step n times and count the number of points in the unit - circle, which is called m. - 3. An estimate of P[U in unit circle] is m/n - """ - if number_of_simulations < 1: - raise ValueError("At least one simulation is necessary to estimate PI.") - - number_in_unit_circle = 0 - for _ in range(number_of_simulations): - random_point = Point.random_unit_square() - - if random_point.is_in_unit_circle(): - number_in_unit_circle += 1 - - return 4 * number_in_unit_circle / number_of_simulations - - -if __name__ == "__main__": - # import doctest - - # doctest.testmod() - from math import pi - - prompt = "Please enter the desired number of Monte Carlo simulations: " - my_pi = estimate_pi(int(input(prompt).strip())) - print(f"An estimate of PI is {my_pi} with an error of {abs(my_pi - pi)}") diff --git a/maths/points_are_collinear_3d.py b/maths/points_are_collinear_3d.py deleted file mode 100644 index c7adddda9494..000000000000 --- a/maths/points_are_collinear_3d.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -Check if three points are collinear in 3D. - -In short, the idea is that we are able to create a triangle using three points, -and the area of that triangle can determine if the three points are collinear or not. - - -First, we create two vectors with the same initial point from the three points, -then we will calculate the cross-product of them. - -The length of the cross vector is numerically equal to the area of a parallelogram. - -Finally, the area of the triangle is equal to half of the area of the parallelogram. - -Since we are only differentiating between zero and anything else, -we can get rid of the square root when calculating the length of the vector, -and also the division by two at the end. - -From a second perspective, if the two vectors are parallel and overlapping, -we can't get a nonzero perpendicular vector, -since there will be an infinite number of orthogonal vectors. - -To simplify the solution we will not calculate the length, -but we will decide directly from the vector whether it is equal to (0, 0, 0) or not. - - -Read More: - https://math.stackexchange.com/a/1951650 -""" - -Vector3d = tuple[float, float, float] -Point3d = tuple[float, float, float] - - -def create_vector(end_point1: Point3d, end_point2: Point3d) -> Vector3d: - """ - Pass two points to get the vector from them in the form (x, y, z). - - >>> create_vector((0, 0, 0), (1, 1, 1)) - (1, 1, 1) - >>> create_vector((45, 70, 24), (47, 32, 1)) - (2, -38, -23) - >>> create_vector((-14, -1, -8), (-7, 6, 4)) - (7, 7, 12) - """ - x = end_point2[0] - end_point1[0] - y = end_point2[1] - end_point1[1] - z = end_point2[2] - end_point1[2] - return (x, y, z) - - -def get_3d_vectors_cross(ab: Vector3d, ac: Vector3d) -> Vector3d: - """ - Get the cross of the two vectors AB and AC. - - I used determinant of 2x2 to get the determinant of the 3x3 matrix in the process. - - Read More: - https://en.wikipedia.org/wiki/Cross_product - https://en.wikipedia.org/wiki/Determinant - - >>> get_3d_vectors_cross((3, 4, 7), (4, 9, 2)) - (-55, 22, 11) - >>> get_3d_vectors_cross((1, 1, 1), (1, 1, 1)) - (0, 0, 0) - >>> get_3d_vectors_cross((-4, 3, 0), (3, -9, -12)) - (-36, -48, 27) - >>> get_3d_vectors_cross((17.67, 4.7, 6.78), (-9.5, 4.78, -19.33)) - (-123.2594, 277.15110000000004, 129.11260000000001) - """ - x = ab[1] * ac[2] - ab[2] * ac[1] # *i - y = (ab[0] * ac[2] - ab[2] * ac[0]) * -1 # *j - z = ab[0] * ac[1] - ab[1] * ac[0] # *k - return (x, y, z) - - -def is_zero_vector(vector: Vector3d, accuracy: int) -> bool: - """ - Check if vector is equal to (0, 0, 0) or not. - - Since the algorithm is very accurate, we will never get a zero vector, - so we need to round the vector axis, - because we want a result that is either True or False. - In other applications, we can return a float that represents the collinearity ratio. - - >>> is_zero_vector((0, 0, 0), accuracy=10) - True - >>> is_zero_vector((15, 74, 32), accuracy=10) - False - >>> is_zero_vector((-15, -74, -32), accuracy=10) - False - """ - return tuple(round(x, accuracy) for x in vector) == (0, 0, 0) - - -def are_collinear(a: Point3d, b: Point3d, c: Point3d, accuracy: int = 10) -> bool: - """ - Check if three points are collinear or not. - - 1- Create two vectors AB and AC. - 2- Get the cross vector of the two vectors. - 3- Calculate the length of the cross vector. - 4- If the length is zero then the points are collinear, else they are not. - - The use of the accuracy parameter is explained in is_zero_vector docstring. - - >>> are_collinear((4.802293498137402, 3.536233125455244, 0), - ... (-2.186788107953106, -9.24561398001649, 7.141509524846482), - ... (1.530169574640268, -2.447927606600034, 3.343487096469054)) - True - >>> are_collinear((-6, -2, 6), - ... (6.200213806439997, -4.930157614926678, -4.482371908289856), - ... (-4.085171149525941, -2.459889509029438, 4.354787180795383)) - True - >>> are_collinear((2.399001826862445, -2.452009976680793, 4.464656666157666), - ... (-3.682816335934376, 5.753788986533145, 9.490993909044244), - ... (1.962903518985307, 3.741415730125627, 7)) - False - >>> are_collinear((1.875375340689544, -7.268426006071538, 7.358196269835993), - ... (-3.546599383667157, -4.630005261513976, 3.208784032924246), - ... (-2.564606140206386, 3.937845170672183, 7)) - False - """ - ab = create_vector(a, b) - ac = create_vector(a, c) - return is_zero_vector(get_3d_vectors_cross(ab, ac), accuracy) diff --git a/maths/pollard_rho.py b/maths/pollard_rho.py deleted file mode 100644 index e8bc89cef6c5..000000000000 --- a/maths/pollard_rho.py +++ /dev/null @@ -1,148 +0,0 @@ -from __future__ import annotations - -from math import gcd - - -def pollard_rho( - num: int, - seed: int = 2, - step: int = 1, - attempts: int = 3, -) -> int | None: - """ - Use Pollard's Rho algorithm to return a nontrivial factor of ``num``. - The returned factor may be composite and require further factorization. - If the algorithm will return None if it fails to find a factor within - the specified number of attempts or within the specified number of steps. - If ``num`` is prime, this algorithm is guaranteed to return None. - https://en.wikipedia.org/wiki/Pollard%27s_rho_algorithm - - >>> pollard_rho(18446744073709551617) - 274177 - >>> pollard_rho(97546105601219326301) - 9876543191 - >>> pollard_rho(100) - 2 - >>> pollard_rho(17) - >>> pollard_rho(17**3) - 17 - >>> pollard_rho(17**3, attempts=1) - >>> pollard_rho(3*5*7) - 21 - >>> pollard_rho(1) - Traceback (most recent call last): - ... - ValueError: The input value cannot be less than 2 - """ - # A value less than 2 can cause an infinite loop in the algorithm. - if num < 2: - raise ValueError("The input value cannot be less than 2") - - # Because of the relationship between ``f(f(x))`` and ``f(x)``, this - # algorithm struggles to find factors that are divisible by two. - # As a workaround, we specifically check for two and even inputs. - # See: https://math.stackexchange.com/a/2856214/165820 - if num > 2 and num % 2 == 0: - return 2 - - # Pollard's Rho algorithm requires a function that returns pseudorandom - # values between 0 <= X < ``num``. It doesn't need to be random in the - # sense that the output value is cryptographically secure or difficult - # to calculate, it only needs to be random in the sense that all output - # values should be equally likely to appear. - # For this reason, Pollard suggested using ``f(x) = (x**2 - 1) % num`` - # However, the success of Pollard's algorithm isn't guaranteed and is - # determined in part by the initial seed and the chosen random function. - # To make retries easier, we will instead use ``f(x) = (x**2 + C) % num`` - # where ``C`` is a value that we can modify between each attempt. - def rand_fn(value: int, step: int, modulus: int) -> int: - """ - Returns a pseudorandom value modulo ``modulus`` based on the - input ``value`` and attempt-specific ``step`` size. - - >>> rand_fn(0, 0, 0) - Traceback (most recent call last): - ... - ZeroDivisionError: integer division or modulo by zero - >>> rand_fn(1, 2, 3) - 0 - >>> rand_fn(0, 10, 7) - 3 - >>> rand_fn(1234, 1, 17) - 16 - """ - return (pow(value, 2) + step) % modulus - - for _ in range(attempts): - # These track the position within the cycle detection logic. - tortoise = seed - hare = seed - - while True: - # At each iteration, the tortoise moves one step and the hare moves two. - tortoise = rand_fn(tortoise, step, num) - hare = rand_fn(hare, step, num) - hare = rand_fn(hare, step, num) - - # At some point both the tortoise and the hare will enter a cycle whose - # length ``p`` is a divisor of ``num``. Once in that cycle, at some point - # the tortoise and hare will end up on the same value modulo ``p``. - # We can detect when this happens because the position difference between - # the tortoise and the hare will share a common divisor with ``num``. - divisor = gcd(hare - tortoise, num) - - if divisor == 1: - # No common divisor yet, just keep searching. - continue - # We found a common divisor! - elif divisor == num: - # Unfortunately, the divisor is ``num`` itself and is useless. - break - else: - # The divisor is a nontrivial factor of ``num``! - return divisor - - # If we made it here, then this attempt failed. - # We need to pick a new starting seed for the tortoise and hare - # in addition to a new step value for the random function. - # To keep this example implementation deterministic, the - # new values will be generated based on currently available - # values instead of using something like ``random.randint``. - - # We can use the hare's position as the new seed. - # This is actually what Richard Brent's the "optimized" variant does. - seed = hare - - # The new step value for the random function can just be incremented. - # At first the results will be similar to what the old function would - # have produced, but the value will quickly diverge after a bit. - step += 1 - - # We haven't found a divisor within the requested number of attempts. - # We were unlucky or ``num`` itself is actually prime. - return None - - -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "num", - type=int, - help="The value to find a divisor of", - ) - parser.add_argument( - "--attempts", - type=int, - default=3, - help="The number of attempts before giving up", - ) - args = parser.parse_args() - - divisor = pollard_rho(args.num, attempts=args.attempts) - if divisor is None: - print(f"{args.num} is probably prime") - else: - quotient = args.num // divisor - print(f"{args.num} = {divisor} * {quotient}") diff --git a/maths/polynomial_evaluation.py b/maths/polynomial_evaluation.py deleted file mode 100644 index 90a51f521e01..000000000000 --- a/maths/polynomial_evaluation.py +++ /dev/null @@ -1,54 +0,0 @@ -from collections.abc import Sequence - - -def evaluate_poly(poly: Sequence[float], x: float) -> float: - """Evaluate a polynomial f(x) at specified point x and return the value. - - Arguments: - poly -- the coefficients of a polynomial as an iterable in order of - ascending degree - x -- the point at which to evaluate the polynomial - - >>> evaluate_poly((0.0, 0.0, 5.0, 9.3, 7.0), 10.0) - 79800.0 - """ - return sum(c * (x**i) for i, c in enumerate(poly)) - - -def horner(poly: Sequence[float], x: float) -> float: - """Evaluate a polynomial at specified point using Horner's method. - - In terms of computational complexity, Horner's method is an efficient method - of evaluating a polynomial. It avoids the use of expensive exponentiation, - and instead uses only multiplication and addition to evaluate the polynomial - in O(n), where n is the degree of the polynomial. - - https://en.wikipedia.org/wiki/Horner's_method - - Arguments: - poly -- the coefficients of a polynomial as an iterable in order of - ascending degree - x -- the point at which to evaluate the polynomial - - >>> horner((0.0, 0.0, 5.0, 9.3, 7.0), 10.0) - 79800.0 - """ - result = 0.0 - for coeff in reversed(poly): - result = result * x + coeff - return result - - -if __name__ == "__main__": - """ - Example: - >>> poly = (0.0, 0.0, 5.0, 9.3, 7.0) # f(x) = 7.0x^4 + 9.3x^3 + 5.0x^2 - >>> x = -13.0 - >>> # f(-13) = 7.0(-13)^4 + 9.3(-13)^3 + 5.0(-13)^2 = 180339.9 - >>> evaluate_poly(poly, x) - 180339.9 - """ - poly = (0.0, 0.0, 5.0, 9.3, 7.0) - x = 10.0 - print(evaluate_poly(poly, x)) - print(horner(poly, x)) diff --git a/maths/polynomials/__init__.py b/maths/polynomials/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/maths/polynomials/single_indeterminate_operations.py b/maths/polynomials/single_indeterminate_operations.py deleted file mode 100644 index e31e6caa3988..000000000000 --- a/maths/polynomials/single_indeterminate_operations.py +++ /dev/null @@ -1,188 +0,0 @@ -""" - -This module implements a single indeterminate polynomials class -with some basic operations - -Reference: https://en.wikipedia.org/wiki/Polynomial - -""" - -from __future__ import annotations - -from collections.abc import MutableSequence - - -class Polynomial: - def __init__(self, degree: int, coefficients: MutableSequence[float]) -> None: - """ - The coefficients should be in order of degree, from smallest to largest. - >>> p = Polynomial(2, [1, 2, 3]) - >>> p = Polynomial(2, [1, 2, 3, 4]) - Traceback (most recent call last): - ... - ValueError: The number of coefficients should be equal to the degree + 1. - - """ - if len(coefficients) != degree + 1: - raise ValueError( - "The number of coefficients should be equal to the degree + 1." - ) - - self.coefficients: list[float] = list(coefficients) - self.degree = degree - - def __add__(self, polynomial_2: Polynomial) -> Polynomial: - """ - Polynomial addition - >>> p = Polynomial(2, [1, 2, 3]) - >>> q = Polynomial(2, [1, 2, 3]) - >>> p + q - 6x^2 + 4x + 2 - """ - - if self.degree > polynomial_2.degree: - coefficients = self.coefficients[:] - for i in range(polynomial_2.degree + 1): - coefficients[i] += polynomial_2.coefficients[i] - return Polynomial(self.degree, coefficients) - else: - coefficients = polynomial_2.coefficients[:] - for i in range(self.degree + 1): - coefficients[i] += self.coefficients[i] - return Polynomial(polynomial_2.degree, coefficients) - - def __sub__(self, polynomial_2: Polynomial) -> Polynomial: - """ - Polynomial subtraction - >>> p = Polynomial(2, [1, 2, 4]) - >>> q = Polynomial(2, [1, 2, 3]) - >>> p - q - 1x^2 - """ - return self + polynomial_2 * Polynomial(0, [-1]) - - def __neg__(self) -> Polynomial: - """ - Polynomial negation - >>> p = Polynomial(2, [1, 2, 3]) - >>> -p - - 3x^2 - 2x - 1 - """ - return Polynomial(self.degree, [-c for c in self.coefficients]) - - def __mul__(self, polynomial_2: Polynomial) -> Polynomial: - """ - Polynomial multiplication - >>> p = Polynomial(2, [1, 2, 3]) - >>> q = Polynomial(2, [1, 2, 3]) - >>> p * q - 9x^4 + 12x^3 + 10x^2 + 4x + 1 - """ - coefficients: list[float] = [0] * (self.degree + polynomial_2.degree + 1) - for i in range(self.degree + 1): - for j in range(polynomial_2.degree + 1): - coefficients[i + j] += ( - self.coefficients[i] * polynomial_2.coefficients[j] - ) - - return Polynomial(self.degree + polynomial_2.degree, coefficients) - - def evaluate(self, substitution: float) -> float: - """ - Evaluates the polynomial at x. - >>> p = Polynomial(2, [1, 2, 3]) - >>> p.evaluate(2) - 17 - """ - result: int | float = 0 - for i in range(self.degree + 1): - result += self.coefficients[i] * (substitution**i) - return result - - def __str__(self) -> str: - """ - >>> p = Polynomial(2, [1, 2, 3]) - >>> print(p) - 3x^2 + 2x + 1 - """ - polynomial = "" - for i in range(self.degree, -1, -1): - if self.coefficients[i] == 0: - continue - elif self.coefficients[i] > 0: - if polynomial: - polynomial += " + " - else: - polynomial += " - " - - if i == 0: - polynomial += str(abs(self.coefficients[i])) - elif i == 1: - polynomial += str(abs(self.coefficients[i])) + "x" - else: - polynomial += str(abs(self.coefficients[i])) + "x^" + str(i) - - return polynomial - - def __repr__(self) -> str: - """ - >>> p = Polynomial(2, [1, 2, 3]) - >>> p - 3x^2 + 2x + 1 - """ - return self.__str__() - - def derivative(self) -> Polynomial: - """ - Returns the derivative of the polynomial. - >>> p = Polynomial(2, [1, 2, 3]) - >>> p.derivative() - 6x + 2 - """ - coefficients: list[float] = [0] * self.degree - for i in range(self.degree): - coefficients[i] = self.coefficients[i + 1] * (i + 1) - return Polynomial(self.degree - 1, coefficients) - - def integral(self, constant: float = 0) -> Polynomial: - """ - Returns the integral of the polynomial. - >>> p = Polynomial(2, [1, 2, 3]) - >>> p.integral() - 1.0x^3 + 1.0x^2 + 1.0x - """ - coefficients: list[float] = [0] * (self.degree + 2) - coefficients[0] = constant - for i in range(self.degree + 1): - coefficients[i + 1] = self.coefficients[i] / (i + 1) - return Polynomial(self.degree + 1, coefficients) - - def __eq__(self, polynomial_2: object) -> bool: - """ - Checks if two polynomials are equal. - >>> p = Polynomial(2, [1, 2, 3]) - >>> q = Polynomial(2, [1, 2, 3]) - >>> p == q - True - """ - if not isinstance(polynomial_2, Polynomial): - return False - - if self.degree != polynomial_2.degree: - return False - - for i in range(self.degree + 1): - if self.coefficients[i] != polynomial_2.coefficients[i]: - return False - - return True - - def __ne__(self, polynomial_2: object) -> bool: - """ - Checks if two polynomials are not equal. - >>> p = Polynomial(2, [1, 2, 3]) - >>> q = Polynomial(2, [1, 2, 3]) - >>> p != q - False - """ - return not self.__eq__(polynomial_2) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py deleted file mode 100644 index 29283ca0f67c..000000000000 --- a/maths/power_using_recursion.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -== Raise base to the power of exponent using recursion == - Input --> - Enter the base: 3 - Enter the exponent: 4 - Output --> - 3 to the power of 4 is 81 - Input --> - Enter the base: 2 - Enter the exponent: 0 - Output --> - 2 to the power of 0 is 1 -""" - - -def power(base: int, exponent: int) -> float: - """ - Calculate the power of a base raised to an exponent. - - >>> power(3, 4) - 81 - >>> power(2, 0) - 1 - >>> all(power(base, exponent) == pow(base, exponent) - ... for base in range(-10, 10) for exponent in range(10)) - True - >>> power('a', 1) - 'a' - >>> power('a', 2) - Traceback (most recent call last): - ... - TypeError: can't multiply sequence by non-int of type 'str' - >>> power('a', 'b') - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for -: 'str' and 'int' - >>> power(2, -1) - Traceback (most recent call last): - ... - RecursionError: maximum recursion depth exceeded - """ - return base * power(base, (exponent - 1)) if exponent else 1 - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print("Raise base to the power of exponent using recursion...") - base = int(input("Enter the base: ").strip()) - exponent = int(input("Enter the exponent: ").strip()) - result = power(base, abs(exponent)) - if exponent < 0: # power() does not properly deal w/ negative exponents - result = 1 / result - print(f"{base} to the power of {exponent} is {result}") diff --git a/maths/prime_check.py b/maths/prime_check.py deleted file mode 100644 index f1bc4def2469..000000000000 --- a/maths/prime_check.py +++ /dev/null @@ -1,90 +0,0 @@ -"""Prime Check.""" - -import math -import unittest - -import pytest - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - >>> is_prime(16.1) - Traceback (most recent call last): - ... - ValueError: is_prime() only accepts positive integers - >>> is_prime(-4) - Traceback (most recent call last): - ... - ValueError: is_prime() only accepts positive integers - """ - - # precondition - if not isinstance(number, int) or not number >= 0: - raise ValueError("is_prime() only accepts positive integers") - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -class Test(unittest.TestCase): - def test_primes(self): - assert is_prime(2) - assert is_prime(3) - assert is_prime(5) - assert is_prime(7) - assert is_prime(11) - assert is_prime(13) - assert is_prime(17) - assert is_prime(19) - assert is_prime(23) - assert is_prime(29) - - def test_not_primes(self): - with pytest.raises(ValueError): - is_prime(-19) - assert not is_prime( - 0 - ), "Zero doesn't have any positive factors, primes must have exactly two." - assert not is_prime( - 1 - ), "One only has 1 positive factor, primes must have exactly two." - assert not is_prime(2 * 2) - assert not is_prime(2 * 3) - assert not is_prime(3 * 3) - assert not is_prime(3 * 5) - assert not is_prime(3 * 5 * 7) - - -if __name__ == "__main__": - unittest.main() diff --git a/maths/prime_factors.py b/maths/prime_factors.py deleted file mode 100644 index 47abcf10e618..000000000000 --- a/maths/prime_factors.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -python/black : True -""" - -from __future__ import annotations - - -def prime_factors(n: int) -> list[int]: - """ - Returns prime factors of n as a list. - - >>> prime_factors(0) - [] - >>> prime_factors(100) - [2, 2, 5, 5] - >>> prime_factors(2560) - [2, 2, 2, 2, 2, 2, 2, 2, 2, 5] - >>> prime_factors(10**-2) - [] - >>> prime_factors(0.02) - [] - >>> x = prime_factors(10**241) # doctest: +NORMALIZE_WHITESPACE - >>> x == [2]*241 + [5]*241 - True - >>> prime_factors(10**-354) - [] - >>> prime_factors('hello') - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'str' - >>> prime_factors([1,2,'hello']) - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'int' and 'list' - - """ - i = 2 - factors = [] - while i * i <= n: - if n % i: - i += 1 - else: - n //= i - factors.append(i) - if n > 1: - factors.append(n) - return factors - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/prime_numbers.py b/maths/prime_numbers.py deleted file mode 100644 index 38cc6670385d..000000000000 --- a/maths/prime_numbers.py +++ /dev/null @@ -1,109 +0,0 @@ -import math -from collections.abc import Generator - - -def slow_primes(max_n: int) -> Generator[int, None, None]: - """ - Return a list of all primes numbers up to max. - >>> list(slow_primes(0)) - [] - >>> list(slow_primes(-1)) - [] - >>> list(slow_primes(-10)) - [] - >>> list(slow_primes(25)) - [2, 3, 5, 7, 11, 13, 17, 19, 23] - >>> list(slow_primes(11)) - [2, 3, 5, 7, 11] - >>> list(slow_primes(33)) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31] - >>> list(slow_primes(1000))[-1] - 997 - """ - numbers: Generator = (i for i in range(1, (max_n + 1))) - for i in (n for n in numbers if n > 1): - for j in range(2, i): - if (i % j) == 0: - break - else: - yield i - - -def primes(max_n: int) -> Generator[int, None, None]: - """ - Return a list of all primes numbers up to max. - >>> list(primes(0)) - [] - >>> list(primes(-1)) - [] - >>> list(primes(-10)) - [] - >>> list(primes(25)) - [2, 3, 5, 7, 11, 13, 17, 19, 23] - >>> list(primes(11)) - [2, 3, 5, 7, 11] - >>> list(primes(33)) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31] - >>> list(primes(1000))[-1] - 997 - """ - numbers: Generator = (i for i in range(1, (max_n + 1))) - for i in (n for n in numbers if n > 1): - # only need to check for factors up to sqrt(i) - bound = int(math.sqrt(i)) + 1 - for j in range(2, bound): - if (i % j) == 0: - break - else: - yield i - - -def fast_primes(max_n: int) -> Generator[int, None, None]: - """ - Return a list of all primes numbers up to max. - >>> list(fast_primes(0)) - [] - >>> list(fast_primes(-1)) - [] - >>> list(fast_primes(-10)) - [] - >>> list(fast_primes(25)) - [2, 3, 5, 7, 11, 13, 17, 19, 23] - >>> list(fast_primes(11)) - [2, 3, 5, 7, 11] - >>> list(fast_primes(33)) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31] - >>> list(fast_primes(1000))[-1] - 997 - """ - numbers: Generator = (i for i in range(1, (max_n + 1), 2)) - # It's useless to test even numbers as they will not be prime - if max_n > 2: - yield 2 # Because 2 will not be tested, it's necessary to yield it now - for i in (n for n in numbers if n > 1): - bound = int(math.sqrt(i)) + 1 - for j in range(3, bound, 2): - # As we removed the even numbers, we don't need them now - if (i % j) == 0: - break - else: - yield i - - -def benchmark(): - """ - Let's benchmark our functions side-by-side... - """ - from timeit import timeit - - setup = "from __main__ import slow_primes, primes, fast_primes" - print(timeit("slow_primes(1_000_000_000_000)", setup=setup, number=1_000_000)) - print(timeit("primes(1_000_000_000_000)", setup=setup, number=1_000_000)) - print(timeit("fast_primes(1_000_000_000_000)", setup=setup, number=1_000_000)) - - -if __name__ == "__main__": - number = int(input("Calculate primes up to:\n>> ").strip()) - for ret in primes(number): - print(ret) - benchmark() diff --git a/maths/prime_sieve_eratosthenes.py b/maths/prime_sieve_eratosthenes.py deleted file mode 100644 index 32eef9165bba..000000000000 --- a/maths/prime_sieve_eratosthenes.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Sieve of Eratosthenes - -Input: n = 10 -Output: 2 3 5 7 - -Input: n = 20 -Output: 2 3 5 7 11 13 17 19 - -you can read in detail about this at -https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes -""" - - -def prime_sieve_eratosthenes(num: int) -> list[int]: - """ - Print the prime numbers up to n - - >>> prime_sieve_eratosthenes(10) - [2, 3, 5, 7] - >>> prime_sieve_eratosthenes(20) - [2, 3, 5, 7, 11, 13, 17, 19] - >>> prime_sieve_eratosthenes(2) - [2] - >>> prime_sieve_eratosthenes(1) - [] - >>> prime_sieve_eratosthenes(-1) - Traceback (most recent call last): - ... - ValueError: Input must be a positive integer - """ - - if num <= 0: - raise ValueError("Input must be a positive integer") - - primes = [True] * (num + 1) - - p = 2 - while p * p <= num: - if primes[p]: - for i in range(p * p, num + 1, p): - primes[i] = False - p += 1 - - return [prime for prime in range(2, num + 1) if primes[prime]] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - user_num = int(input("Enter a positive integer: ").strip()) - print(prime_sieve_eratosthenes(user_num)) diff --git a/maths/primelib.py b/maths/primelib.py deleted file mode 100644 index a26b0eaeb328..000000000000 --- a/maths/primelib.py +++ /dev/null @@ -1,841 +0,0 @@ -""" -Created on Thu Oct 5 16:44:23 2017 - -@author: Christian Bender - -This Python library contains some useful functions to deal with -prime numbers and whole numbers. - -Overview: - -is_prime(number) -sieve_er(N) -get_prime_numbers(N) -prime_factorization(number) -greatest_prime_factor(number) -smallest_prime_factor(number) -get_prime(n) -get_primes_between(pNumber1, pNumber2) - ----- - -is_even(number) -is_odd(number) -kg_v(number1, number2) // least common multiple -get_divisors(number) // all divisors of 'number' inclusive 1, number -is_perfect_number(number) - -NEW-FUNCTIONS - -simplify_fraction(numerator, denominator) -factorial (n) // n! -fib (n) // calculate the n-th fibonacci term. - ------ - -goldbach(number) // Goldbach's assumption - -""" - -from math import sqrt - -from maths.greatest_common_divisor import gcd_by_iterative - - -def is_prime(number: int) -> bool: - """ - input: positive integer 'number' - returns true if 'number' is prime otherwise false. - - >>> is_prime(3) - True - >>> is_prime(10) - False - >>> is_prime(97) - True - >>> is_prime(9991) - False - >>> is_prime(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and positive - >>> is_prime("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and positive - """ - - # precondition - assert isinstance(number, int) and ( - number >= 0 - ), "'number' must been an int and positive" - - status = True - - # 0 and 1 are none primes. - if number <= 1: - status = False - - for divisor in range(2, int(round(sqrt(number))) + 1): - # if 'number' divisible by 'divisor' then sets 'status' - # of false and break up the loop. - if number % divisor == 0: - status = False - break - - # precondition - assert isinstance(status, bool), "'status' must been from type bool" - - return status - - -# ------------------------------------------ - - -def sieve_er(n): - """ - input: positive integer 'N' > 2 - returns a list of prime numbers from 2 up to N. - - This function implements the algorithm called - sieve of erathostenes. - - >>> sieve_er(8) - [2, 3, 5, 7] - >>> sieve_er(-1) - Traceback (most recent call last): - ... - AssertionError: 'N' must been an int and > 2 - >>> sieve_er("test") - Traceback (most recent call last): - ... - AssertionError: 'N' must been an int and > 2 - """ - - # precondition - assert isinstance(n, int) and (n > 2), "'N' must been an int and > 2" - - # beginList: contains all natural numbers from 2 up to N - begin_list = list(range(2, n + 1)) - - ans = [] # this list will be returns. - - # actual sieve of erathostenes - for i in range(len(begin_list)): - for j in range(i + 1, len(begin_list)): - if (begin_list[i] != 0) and (begin_list[j] % begin_list[i] == 0): - begin_list[j] = 0 - - # filters actual prime numbers. - ans = [x for x in begin_list if x != 0] - - # precondition - assert isinstance(ans, list), "'ans' must been from type list" - - return ans - - -# -------------------------------- - - -def get_prime_numbers(n): - """ - input: positive integer 'N' > 2 - returns a list of prime numbers from 2 up to N (inclusive) - This function is more efficient as function 'sieveEr(...)' - - >>> get_prime_numbers(8) - [2, 3, 5, 7] - >>> get_prime_numbers(-1) - Traceback (most recent call last): - ... - AssertionError: 'N' must been an int and > 2 - >>> get_prime_numbers("test") - Traceback (most recent call last): - ... - AssertionError: 'N' must been an int and > 2 - """ - - # precondition - assert isinstance(n, int) and (n > 2), "'N' must been an int and > 2" - - ans = [] - - # iterates over all numbers between 2 up to N+1 - # if a number is prime then appends to list 'ans' - for number in range(2, n + 1): - if is_prime(number): - ans.append(number) - - # precondition - assert isinstance(ans, list), "'ans' must been from type list" - - return ans - - -# ----------------------------------------- - - -def prime_factorization(number): - """ - input: positive integer 'number' - returns a list of the prime number factors of 'number' - - >>> prime_factorization(0) - [0] - >>> prime_factorization(8) - [2, 2, 2] - >>> prime_factorization(287) - [7, 41] - >>> prime_factorization(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 0 - >>> prime_factorization("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 0 - """ - - # precondition - assert isinstance(number, int) and number >= 0, "'number' must been an int and >= 0" - - ans = [] # this list will be returns of the function. - - # potential prime number factors. - - factor = 2 - - quotient = number - - if number in {0, 1}: - ans.append(number) - - # if 'number' not prime then builds the prime factorization of 'number' - elif not is_prime(number): - while quotient != 1: - if is_prime(factor) and (quotient % factor == 0): - ans.append(factor) - quotient /= factor - else: - factor += 1 - - else: - ans.append(number) - - # precondition - assert isinstance(ans, list), "'ans' must been from type list" - - return ans - - -# ----------------------------------------- - - -def greatest_prime_factor(number): - """ - input: positive integer 'number' >= 0 - returns the greatest prime number factor of 'number' - - >>> greatest_prime_factor(0) - 0 - >>> greatest_prime_factor(8) - 2 - >>> greatest_prime_factor(287) - 41 - >>> greatest_prime_factor(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 0 - >>> greatest_prime_factor("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 0 - """ - - # precondition - assert isinstance(number, int) and ( - number >= 0 - ), "'number' must been an int and >= 0" - - ans = 0 - - # prime factorization of 'number' - prime_factors = prime_factorization(number) - - ans = max(prime_factors) - - # precondition - assert isinstance(ans, int), "'ans' must been from type int" - - return ans - - -# ---------------------------------------------- - - -def smallest_prime_factor(number): - """ - input: integer 'number' >= 0 - returns the smallest prime number factor of 'number' - - >>> smallest_prime_factor(0) - 0 - >>> smallest_prime_factor(8) - 2 - >>> smallest_prime_factor(287) - 7 - >>> smallest_prime_factor(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 0 - >>> smallest_prime_factor("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 0 - """ - - # precondition - assert isinstance(number, int) and ( - number >= 0 - ), "'number' must been an int and >= 0" - - ans = 0 - - # prime factorization of 'number' - prime_factors = prime_factorization(number) - - ans = min(prime_factors) - - # precondition - assert isinstance(ans, int), "'ans' must been from type int" - - return ans - - -# ---------------------- - - -def is_even(number): - """ - input: integer 'number' - returns true if 'number' is even, otherwise false. - - >>> is_even(0) - True - >>> is_even(8) - True - >>> is_even(287) - False - >>> is_even(-1) - False - >>> is_even("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int - """ - - # precondition - assert isinstance(number, int), "'number' must been an int" - assert isinstance(number % 2 == 0, bool), "compare must been from type bool" - - return number % 2 == 0 - - -# ------------------------ - - -def is_odd(number): - """ - input: integer 'number' - returns true if 'number' is odd, otherwise false. - - >>> is_odd(0) - False - >>> is_odd(8) - False - >>> is_odd(287) - True - >>> is_odd(-1) - True - >>> is_odd("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int - """ - - # precondition - assert isinstance(number, int), "'number' must been an int" - assert isinstance(number % 2 != 0, bool), "compare must been from type bool" - - return number % 2 != 0 - - -# ------------------------ - - -def goldbach(number): - """ - Goldbach's assumption - input: a even positive integer 'number' > 2 - returns a list of two prime numbers whose sum is equal to 'number' - - >>> goldbach(8) - [3, 5] - >>> goldbach(824) - [3, 821] - >>> goldbach(0) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int, even and > 2 - >>> goldbach(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int, even and > 2 - >>> goldbach("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int, even and > 2 - """ - - # precondition - assert ( - isinstance(number, int) and (number > 2) and is_even(number) - ), "'number' must been an int, even and > 2" - - ans = [] # this list will returned - - # creates a list of prime numbers between 2 up to 'number' - prime_numbers = get_prime_numbers(number) - len_pn = len(prime_numbers) - - # run variable for while-loops. - i = 0 - j = None - - # exit variable. for break up the loops - loop = True - - while i < len_pn and loop: - j = i + 1 - - while j < len_pn and loop: - if prime_numbers[i] + prime_numbers[j] == number: - loop = False - ans.append(prime_numbers[i]) - ans.append(prime_numbers[j]) - - j += 1 - - i += 1 - - # precondition - assert ( - isinstance(ans, list) - and (len(ans) == 2) - and (ans[0] + ans[1] == number) - and is_prime(ans[0]) - and is_prime(ans[1]) - ), "'ans' must contains two primes. And sum of elements must been eq 'number'" - - return ans - - -# ---------------------------------------------- - - -def kg_v(number1, number2): - """ - Least common multiple - input: two positive integer 'number1' and 'number2' - returns the least common multiple of 'number1' and 'number2' - - >>> kg_v(8,10) - 40 - >>> kg_v(824,67) - 55208 - >>> kg_v(1, 10) - 10 - >>> kg_v(0) - Traceback (most recent call last): - ... - TypeError: kg_v() missing 1 required positional argument: 'number2' - >>> kg_v(10,-1) - Traceback (most recent call last): - ... - AssertionError: 'number1' and 'number2' must been positive integer. - >>> kg_v("test","test2") - Traceback (most recent call last): - ... - AssertionError: 'number1' and 'number2' must been positive integer. - """ - - # precondition - assert ( - isinstance(number1, int) - and isinstance(number2, int) - and (number1 >= 1) - and (number2 >= 1) - ), "'number1' and 'number2' must been positive integer." - - ans = 1 # actual answer that will be return. - - # for kgV (x,1) - if number1 > 1 and number2 > 1: - # builds the prime factorization of 'number1' and 'number2' - prime_fac_1 = prime_factorization(number1) - prime_fac_2 = prime_factorization(number2) - - elif number1 == 1 or number2 == 1: - prime_fac_1 = [] - prime_fac_2 = [] - ans = max(number1, number2) - - count1 = 0 - count2 = 0 - - done = [] # captured numbers int both 'primeFac1' and 'primeFac2' - - # iterates through primeFac1 - for n in prime_fac_1: - if n not in done: - if n in prime_fac_2: - count1 = prime_fac_1.count(n) - count2 = prime_fac_2.count(n) - - for _ in range(max(count1, count2)): - ans *= n - - else: - count1 = prime_fac_1.count(n) - - for _ in range(count1): - ans *= n - - done.append(n) - - # iterates through primeFac2 - for n in prime_fac_2: - if n not in done: - count2 = prime_fac_2.count(n) - - for _ in range(count2): - ans *= n - - done.append(n) - - # precondition - assert isinstance(ans, int) and ( - ans >= 0 - ), "'ans' must been from type int and positive" - - return ans - - -# ---------------------------------- - - -def get_prime(n): - """ - Gets the n-th prime number. - input: positive integer 'n' >= 0 - returns the n-th prime number, beginning at index 0 - - >>> get_prime(0) - 2 - >>> get_prime(8) - 23 - >>> get_prime(824) - 6337 - >>> get_prime(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been a positive int - >>> get_prime("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been a positive int - """ - - # precondition - assert isinstance(n, int) and (n >= 0), "'number' must been a positive int" - - index = 0 - ans = 2 # this variable holds the answer - - while index < n: - index += 1 - - ans += 1 # counts to the next number - - # if ans not prime then - # runs to the next prime number. - while not is_prime(ans): - ans += 1 - - # precondition - assert isinstance(ans, int) and is_prime( - ans - ), "'ans' must been a prime number and from type int" - - return ans - - -# --------------------------------------------------- - - -def get_primes_between(p_number_1, p_number_2): - """ - input: prime numbers 'pNumber1' and 'pNumber2' - pNumber1 < pNumber2 - returns a list of all prime numbers between 'pNumber1' (exclusive) - and 'pNumber2' (exclusive) - - >>> get_primes_between(3, 67) - [5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61] - >>> get_primes_between(0) - Traceback (most recent call last): - ... - TypeError: get_primes_between() missing 1 required positional argument: 'p_number_2' - >>> get_primes_between(0, 1) - Traceback (most recent call last): - ... - AssertionError: The arguments must been prime numbers and 'pNumber1' < 'pNumber2' - >>> get_primes_between(-1, 3) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and positive - >>> get_primes_between("test","test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and positive - """ - - # precondition - assert ( - is_prime(p_number_1) and is_prime(p_number_2) and (p_number_1 < p_number_2) - ), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'" - - number = p_number_1 + 1 # jump to the next number - - ans = [] # this list will be returns. - - # if number is not prime then - # fetch the next prime number. - while not is_prime(number): - number += 1 - - while number < p_number_2: - ans.append(number) - - number += 1 - - # fetch the next prime number. - while not is_prime(number): - number += 1 - - # precondition - assert ( - isinstance(ans, list) - and ans[0] != p_number_1 - and ans[len(ans) - 1] != p_number_2 - ), "'ans' must been a list without the arguments" - - # 'ans' contains not 'pNumber1' and 'pNumber2' ! - return ans - - -# ---------------------------------------------------- - - -def get_divisors(n): - """ - input: positive integer 'n' >= 1 - returns all divisors of n (inclusive 1 and 'n') - - >>> get_divisors(8) - [1, 2, 4, 8] - >>> get_divisors(824) - [1, 2, 4, 8, 103, 206, 412, 824] - >>> get_divisors(-1) - Traceback (most recent call last): - ... - AssertionError: 'n' must been int and >= 1 - >>> get_divisors("test") - Traceback (most recent call last): - ... - AssertionError: 'n' must been int and >= 1 - """ - - # precondition - assert isinstance(n, int) and (n >= 1), "'n' must been int and >= 1" - - ans = [] # will be returned. - - for divisor in range(1, n + 1): - if n % divisor == 0: - ans.append(divisor) - - # precondition - assert ans[0] == 1 and ans[len(ans) - 1] == n, "Error in function getDivisiors(...)" - - return ans - - -# ---------------------------------------------------- - - -def is_perfect_number(number): - """ - input: positive integer 'number' > 1 - returns true if 'number' is a perfect number otherwise false. - - >>> is_perfect_number(28) - True - >>> is_perfect_number(824) - False - >>> is_perfect_number(-1) - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 1 - >>> is_perfect_number("test") - Traceback (most recent call last): - ... - AssertionError: 'number' must been an int and >= 1 - """ - - # precondition - assert isinstance(number, int) and ( - number > 1 - ), "'number' must been an int and >= 1" - - divisors = get_divisors(number) - - # precondition - assert ( - isinstance(divisors, list) - and (divisors[0] == 1) - and (divisors[len(divisors) - 1] == number) - ), "Error in help-function getDivisiors(...)" - - # summed all divisors up to 'number' (exclusive), hence [:-1] - return sum(divisors[:-1]) == number - - -# ------------------------------------------------------------ - - -def simplify_fraction(numerator, denominator): - """ - input: two integer 'numerator' and 'denominator' - assumes: 'denominator' != 0 - returns: a tuple with simplify numerator and denominator. - - >>> simplify_fraction(10, 20) - (1, 2) - >>> simplify_fraction(10, -1) - (10, -1) - >>> simplify_fraction("test","test") - Traceback (most recent call last): - ... - AssertionError: The arguments must been from type int and 'denominator' != 0 - """ - - # precondition - assert ( - isinstance(numerator, int) - and isinstance(denominator, int) - and (denominator != 0) - ), "The arguments must been from type int and 'denominator' != 0" - - # build the greatest common divisor of numerator and denominator. - gcd_of_fraction = gcd_by_iterative(abs(numerator), abs(denominator)) - - # precondition - assert ( - isinstance(gcd_of_fraction, int) - and (numerator % gcd_of_fraction == 0) - and (denominator % gcd_of_fraction == 0) - ), "Error in function gcd_by_iterative(...,...)" - - return (numerator // gcd_of_fraction, denominator // gcd_of_fraction) - - -# ----------------------------------------------------------------- - - -def factorial(n): - """ - input: positive integer 'n' - returns the factorial of 'n' (n!) - - >>> factorial(0) - 1 - >>> factorial(20) - 2432902008176640000 - >>> factorial(-1) - Traceback (most recent call last): - ... - AssertionError: 'n' must been a int and >= 0 - >>> factorial("test") - Traceback (most recent call last): - ... - AssertionError: 'n' must been a int and >= 0 - """ - - # precondition - assert isinstance(n, int) and (n >= 0), "'n' must been a int and >= 0" - - ans = 1 # this will be return. - - for factor in range(1, n + 1): - ans *= factor - - return ans - - -# ------------------------------------------------------------------- - - -def fib(n: int) -> int: - """ - input: positive integer 'n' - returns the n-th fibonacci term , indexing by 0 - - >>> fib(0) - 1 - >>> fib(5) - 8 - >>> fib(20) - 10946 - >>> fib(99) - 354224848179261915075 - >>> fib(-1) - Traceback (most recent call last): - ... - AssertionError: 'n' must been an int and >= 0 - >>> fib("test") - Traceback (most recent call last): - ... - AssertionError: 'n' must been an int and >= 0 - """ - - # precondition - assert isinstance(n, int) and (n >= 0), "'n' must been an int and >= 0" - - tmp = 0 - fib1 = 1 - ans = 1 # this will be return - - for _ in range(n - 1): - tmp = ans - ans += fib1 - fib1 = tmp - - return ans - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/print_multiplication_table.py b/maths/print_multiplication_table.py deleted file mode 100644 index dbe4a4be0ee8..000000000000 --- a/maths/print_multiplication_table.py +++ /dev/null @@ -1,26 +0,0 @@ -def multiplication_table(number: int, number_of_terms: int) -> str: - """ - Prints the multiplication table of a given number till the given number of terms - - >>> print(multiplication_table(3, 5)) - 3 * 1 = 3 - 3 * 2 = 6 - 3 * 3 = 9 - 3 * 4 = 12 - 3 * 5 = 15 - - >>> print(multiplication_table(-4, 6)) - -4 * 1 = -4 - -4 * 2 = -8 - -4 * 3 = -12 - -4 * 4 = -16 - -4 * 5 = -20 - -4 * 6 = -24 - """ - return "\n".join( - f"{number} * {i} = {number * i}" for i in range(1, number_of_terms + 1) - ) - - -if __name__ == "__main__": - print(multiplication_table(number=5, number_of_terms=10)) diff --git a/maths/pythagoras.py b/maths/pythagoras.py deleted file mode 100644 index 7770e981d44d..000000000000 --- a/maths/pythagoras.py +++ /dev/null @@ -1,29 +0,0 @@ -"""Uses Pythagoras theorem to calculate the distance between two points in space.""" - -import math - - -class Point: - def __init__(self, x, y, z): - self.x = x - self.y = y - self.z = z - - def __repr__(self) -> str: - return f"Point({self.x}, {self.y}, {self.z})" - - -def distance(a: Point, b: Point) -> float: - """ - >>> point1 = Point(2, -1, 7) - >>> point2 = Point(1, -3, 5) - >>> print(f"Distance from {point1} to {point2} is {distance(point1, point2)}") - Distance from Point(2, -1, 7) to Point(1, -3, 5) is 3.0 - """ - return math.sqrt(abs((b.x - a.x) ** 2 + (b.y - a.y) ** 2 + (b.z - a.z) ** 2)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/qr_decomposition.py b/maths/qr_decomposition.py deleted file mode 100644 index 670b49206aa7..000000000000 --- a/maths/qr_decomposition.py +++ /dev/null @@ -1,71 +0,0 @@ -import numpy as np - - -def qr_householder(a: np.ndarray): - """Return a QR-decomposition of the matrix A using Householder reflection. - - The QR-decomposition decomposes the matrix A of shape (m, n) into an - orthogonal matrix Q of shape (m, m) and an upper triangular matrix R of - shape (m, n). Note that the matrix A does not have to be square. This - method of decomposing A uses the Householder reflection, which is - numerically stable and of complexity O(n^3). - - https://en.wikipedia.org/wiki/QR_decomposition#Using_Householder_reflections - - Arguments: - A -- a numpy.ndarray of shape (m, n) - - Note: several optimizations can be made for numeric efficiency, but this is - intended to demonstrate how it would be represented in a mathematics - textbook. In cases where efficiency is particularly important, an optimized - version from BLAS should be used. - - >>> A = np.array([[12, -51, 4], [6, 167, -68], [-4, 24, -41]], dtype=float) - >>> Q, R = qr_householder(A) - - >>> # check that the decomposition is correct - >>> np.allclose(Q@R, A) - True - - >>> # check that Q is orthogonal - >>> np.allclose(Q@Q.T, np.eye(A.shape[0])) - True - >>> np.allclose(Q.T@Q, np.eye(A.shape[0])) - True - - >>> # check that R is upper triangular - >>> np.allclose(np.triu(R), R) - True - """ - m, n = a.shape - t = min(m, n) - q = np.eye(m) - r = a.copy() - - for k in range(t - 1): - # select a column of modified matrix A': - x = r[k:, [k]] - # construct first basis vector - e1 = np.zeros_like(x) - e1[0] = 1.0 - # determine scaling factor - alpha = np.linalg.norm(x) - # construct vector v for Householder reflection - v = x + np.sign(x[0]) * alpha * e1 - v /= np.linalg.norm(v) - - # construct the Householder matrix - q_k = np.eye(m - k) - 2.0 * v @ v.T - # pad with ones and zeros as necessary - q_k = np.block([[np.eye(k), np.zeros((k, m - k))], [np.zeros((m - k, k)), q_k]]) - - q = q @ q_k.T - r = q_k @ r - - return q, r - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/quadratic_equations_complex_numbers.py b/maths/quadratic_equations_complex_numbers.py deleted file mode 100644 index 1035171e4ec3..000000000000 --- a/maths/quadratic_equations_complex_numbers.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations - -from cmath import sqrt - - -def quadratic_roots(a: int, b: int, c: int) -> tuple[complex, complex]: - """ - Given the numerical coefficients a, b and c, - calculates the roots for any quadratic equation of the form ax^2 + bx + c - - >>> quadratic_roots(a=1, b=3, c=-4) - (1.0, -4.0) - >>> quadratic_roots(5, 6, 1) - (-0.2, -1.0) - >>> quadratic_roots(1, -6, 25) - ((3+4j), (3-4j)) - """ - - if a == 0: - raise ValueError("Coefficient 'a' must not be zero.") - delta = b * b - 4 * a * c - - root_1 = (-b + sqrt(delta)) / (2 * a) - root_2 = (-b - sqrt(delta)) / (2 * a) - - return ( - root_1.real if not root_1.imag else root_1, - root_2.real if not root_2.imag else root_2, - ) - - -def main(): - solution1, solution2 = quadratic_roots(a=5, b=6, c=1) - print(f"The solutions are: {solution1} and {solution2}") - - -if __name__ == "__main__": - main() diff --git a/maths/radians.py b/maths/radians.py deleted file mode 100644 index b8ac61cb135c..000000000000 --- a/maths/radians.py +++ /dev/null @@ -1,29 +0,0 @@ -from math import pi - - -def radians(degree: float) -> float: - """ - Converts the given angle from degrees to radians - https://en.wikipedia.org/wiki/Radian - - >>> radians(180) - 3.141592653589793 - >>> radians(92) - 1.6057029118347832 - >>> radians(274) - 4.782202150464463 - >>> radians(109.82) - 1.9167205845401725 - - >>> from math import radians as math_radians - >>> all(abs(radians(i) - math_radians(i)) <= 1e-8 for i in range(-2, 361)) - True - """ - - return degree / (180 / pi) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/maths/radix2_fft.py b/maths/radix2_fft.py deleted file mode 100644 index d41dc82d5588..000000000000 --- a/maths/radix2_fft.py +++ /dev/null @@ -1,176 +0,0 @@ -""" -Fast Polynomial Multiplication using radix-2 fast Fourier Transform. -""" - -import mpmath # for roots of unity -import numpy as np - - -class FFT: - """ - Fast Polynomial Multiplication using radix-2 fast Fourier Transform. - - Reference: - https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#The_radix-2_DIT_case - - For polynomials of degree m and n the algorithms has complexity - O(n*logn + m*logm) - - The main part of the algorithm is split in two parts: - 1) __DFT: We compute the discrete fourier transform (DFT) of A and B using a - bottom-up dynamic approach - - 2) __multiply: Once we obtain the DFT of A*B, we can similarly - invert it to obtain A*B - - The class FFT takes two polynomials A and B with complex coefficients as arguments; - The two polynomials should be represented as a sequence of coefficients starting - from the free term. Thus, for instance x + 2*x^3 could be represented as - [0,1,0,2] or (0,1,0,2). The constructor adds some zeros at the end so that the - polynomials have the same length which is a power of 2 at least the length of - their product. - - Example: - - Create two polynomials as sequences - >>> A = [0, 1, 0, 2] # x+2x^3 - >>> B = (2, 3, 4, 0) # 2+3x+4x^2 - - Create an FFT object with them - >>> x = FFT(A, B) - - Print product - >>> x.product # 2x + 3x^2 + 8x^3 + 4x^4 + 6x^5 - [(-0+0j), (2+0j), (3+0j), (8+0j), (6+0j), (8+0j)] - - __str__ test - >>> print(x) - A = 0*x^0 + 1*x^1 + 2*x^0 + 3*x^2 - B = 0*x^2 + 1*x^3 + 2*x^4 - A*B = 0*x^(-0+0j) + 1*x^(2+0j) + 2*x^(3+0j) + 3*x^(8+0j) + 4*x^(6+0j) + 5*x^(8+0j) - """ - - def __init__(self, poly_a=None, poly_b=None): - # Input as list - self.polyA = list(poly_a or [0])[:] - self.polyB = list(poly_b or [0])[:] - - # Remove leading zero coefficients - while self.polyA[-1] == 0: - self.polyA.pop() - self.len_A = len(self.polyA) - - while self.polyB[-1] == 0: - self.polyB.pop() - self.len_B = len(self.polyB) - - # Add 0 to make lengths equal a power of 2 - self.c_max_length = int( - 2 ** np.ceil(np.log2(len(self.polyA) + len(self.polyB) - 1)) - ) - - while len(self.polyA) < self.c_max_length: - self.polyA.append(0) - while len(self.polyB) < self.c_max_length: - self.polyB.append(0) - # A complex root used for the fourier transform - self.root = complex(mpmath.root(x=1, n=self.c_max_length, k=1)) - - # The product - self.product = self.__multiply() - - # Discrete fourier transform of A and B - def __dft(self, which): - dft = [[x] for x in self.polyA] if which == "A" else [[x] for x in self.polyB] - # Corner case - if len(dft) <= 1: - return dft[0] - next_ncol = self.c_max_length // 2 - while next_ncol > 0: - new_dft = [[] for i in range(next_ncol)] - root = self.root**next_ncol - - # First half of next step - current_root = 1 - for j in range(self.c_max_length // (next_ncol * 2)): - for i in range(next_ncol): - new_dft[i].append(dft[i][j] + current_root * dft[i + next_ncol][j]) - current_root *= root - # Second half of next step - current_root = 1 - for j in range(self.c_max_length // (next_ncol * 2)): - for i in range(next_ncol): - new_dft[i].append(dft[i][j] - current_root * dft[i + next_ncol][j]) - current_root *= root - # Update - dft = new_dft - next_ncol = next_ncol // 2 - return dft[0] - - # multiply the DFTs of A and B and find A*B - def __multiply(self): - dft_a = self.__dft("A") - dft_b = self.__dft("B") - inverce_c = [[dft_a[i] * dft_b[i] for i in range(self.c_max_length)]] - del dft_a - del dft_b - - # Corner Case - if len(inverce_c[0]) <= 1: - return inverce_c[0] - # Inverse DFT - next_ncol = 2 - while next_ncol <= self.c_max_length: - new_inverse_c = [[] for i in range(next_ncol)] - root = self.root ** (next_ncol // 2) - current_root = 1 - # First half of next step - for j in range(self.c_max_length // next_ncol): - for i in range(next_ncol // 2): - # Even positions - new_inverse_c[i].append( - ( - inverce_c[i][j] - + inverce_c[i][j + self.c_max_length // next_ncol] - ) - / 2 - ) - # Odd positions - new_inverse_c[i + next_ncol // 2].append( - ( - inverce_c[i][j] - - inverce_c[i][j + self.c_max_length // next_ncol] - ) - / (2 * current_root) - ) - current_root *= root - # Update - inverce_c = new_inverse_c - next_ncol *= 2 - # Unpack - inverce_c = [round(x[0].real, 8) + round(x[0].imag, 8) * 1j for x in inverce_c] - - # Remove leading 0's - while inverce_c[-1] == 0: - inverce_c.pop() - return inverce_c - - # Overwrite __str__ for print(); Shows A, B and A*B - def __str__(self): - a = "A = " + " + ".join( - f"{coef}*x^{i}" for coef, i in enumerate(self.polyA[: self.len_A]) - ) - b = "B = " + " + ".join( - f"{coef}*x^{i}" for coef, i in enumerate(self.polyB[: self.len_B]) - ) - c = "A*B = " + " + ".join( - f"{coef}*x^{i}" for coef, i in enumerate(self.product) - ) - - return f"{a}\n{b}\n{c}" - - -# Unit tests -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/remove_digit.py b/maths/remove_digit.py deleted file mode 100644 index db14ac902a6f..000000000000 --- a/maths/remove_digit.py +++ /dev/null @@ -1,37 +0,0 @@ -def remove_digit(num: int) -> int: - """ - - returns the biggest possible result - that can be achieved by removing - one digit from the given number - - >>> remove_digit(152) - 52 - >>> remove_digit(6385) - 685 - >>> remove_digit(-11) - 1 - >>> remove_digit(2222222) - 222222 - >>> remove_digit("2222222") - Traceback (most recent call last): - TypeError: only integers accepted as input - >>> remove_digit("string input") - Traceback (most recent call last): - TypeError: only integers accepted as input - """ - - if not isinstance(num, int): - raise TypeError("only integers accepted as input") - else: - num_str = str(abs(num)) - num_transpositions = [list(num_str) for char in range(len(num_str))] - for index in range(len(num_str)): - num_transpositions[index].pop(index) - return max( - int("".join(list(transposition))) for transposition in num_transpositions - ) - - -if __name__ == "__main__": - __import__("doctest").testmod() diff --git a/maths/segmented_sieve.py b/maths/segmented_sieve.py deleted file mode 100644 index 125390edc588..000000000000 --- a/maths/segmented_sieve.py +++ /dev/null @@ -1,79 +0,0 @@ -"""Segmented Sieve.""" - -import math - - -def sieve(n: int) -> list[int]: - """ - Segmented Sieve. - - Examples: - >>> sieve(8) - [2, 3, 5, 7] - - >>> sieve(27) - [2, 3, 5, 7, 11, 13, 17, 19, 23] - - >>> sieve(0) - Traceback (most recent call last): - ... - ValueError: Number 0 must instead be a positive integer - - >>> sieve(-1) - Traceback (most recent call last): - ... - ValueError: Number -1 must instead be a positive integer - - >>> sieve(22.2) - Traceback (most recent call last): - ... - ValueError: Number 22.2 must instead be a positive integer - """ - - if n <= 0 or isinstance(n, float): - msg = f"Number {n} must instead be a positive integer" - raise ValueError(msg) - - in_prime = [] - start = 2 - end = int(math.sqrt(n)) # Size of every segment - temp = [True] * (end + 1) - prime = [] - - while start <= end: - if temp[start] is True: - in_prime.append(start) - for i in range(start * start, end + 1, start): - temp[i] = False - start += 1 - prime += in_prime - - low = end + 1 - high = min(2 * end, n) - - while low <= n: - temp = [True] * (high - low + 1) - for each in in_prime: - t = math.floor(low / each) * each - if t < low: - t += each - - for j in range(t, high + 1, each): - temp[j - low] = False - - for j in range(len(temp)): - if temp[j] is True: - prime.append(j + low) - - low = high + 1 - high = min(high + end, n) - - return prime - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(f"{sieve(10**6) = }") diff --git a/maths/series/__init__.py b/maths/series/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/maths/series/arithmetic.py b/maths/series/arithmetic.py deleted file mode 100644 index dc28c5c7bc5f..000000000000 --- a/maths/series/arithmetic.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Arithmetic mean -Reference: https://en.wikipedia.org/wiki/Arithmetic_mean - -Arithmetic series -Reference: https://en.wikipedia.org/wiki/Arithmetic_series -(The URL above will redirect you to arithmetic progression) -""" - - -def is_arithmetic_series(series: list) -> bool: - """ - checking whether the input series is arithmetic series or not - >>> is_arithmetic_series([2, 4, 6]) - True - >>> is_arithmetic_series([3, 6, 12, 24]) - False - >>> is_arithmetic_series([1, 2, 3]) - True - >>> is_arithmetic_series(4) - Traceback (most recent call last): - ... - ValueError: Input series is not valid, valid series - [2, 4, 6] - >>> is_arithmetic_series([]) - Traceback (most recent call last): - ... - ValueError: Input list must be a non empty list - """ - if not isinstance(series, list): - raise ValueError("Input series is not valid, valid series - [2, 4, 6]") - if len(series) == 0: - raise ValueError("Input list must be a non empty list") - if len(series) == 1: - return True - common_diff = series[1] - series[0] - for index in range(len(series) - 1): - if series[index + 1] - series[index] != common_diff: - return False - return True - - -def arithmetic_mean(series: list) -> float: - """ - return the arithmetic mean of series - - >>> arithmetic_mean([2, 4, 6]) - 4.0 - >>> arithmetic_mean([3, 6, 9, 12]) - 7.5 - >>> arithmetic_mean(4) - Traceback (most recent call last): - ... - ValueError: Input series is not valid, valid series - [2, 4, 6] - >>> arithmetic_mean([4, 8, 1]) - 4.333333333333333 - >>> arithmetic_mean([1, 2, 3]) - 2.0 - >>> arithmetic_mean([]) - Traceback (most recent call last): - ... - ValueError: Input list must be a non empty list - - """ - if not isinstance(series, list): - raise ValueError("Input series is not valid, valid series - [2, 4, 6]") - if len(series) == 0: - raise ValueError("Input list must be a non empty list") - answer = 0 - for val in series: - answer += val - return answer / len(series) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/series/geometric.py b/maths/series/geometric.py deleted file mode 100644 index 7b6239b1585d..000000000000 --- a/maths/series/geometric.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Geometric Mean -Reference : https://en.wikipedia.org/wiki/Geometric_mean - -Geometric series -Reference: https://en.wikipedia.org/wiki/Geometric_series -""" - - -def is_geometric_series(series: list) -> bool: - """ - checking whether the input series is geometric series or not - >>> is_geometric_series([2, 4, 8]) - True - >>> is_geometric_series([3, 6, 12, 24]) - True - >>> is_geometric_series([1, 2, 3]) - False - >>> is_geometric_series([0, 0, 3]) - False - >>> is_geometric_series([]) - Traceback (most recent call last): - ... - ValueError: Input list must be a non empty list - >>> is_geometric_series(4) - Traceback (most recent call last): - ... - ValueError: Input series is not valid, valid series - [2, 4, 8] - """ - if not isinstance(series, list): - raise ValueError("Input series is not valid, valid series - [2, 4, 8]") - if len(series) == 0: - raise ValueError("Input list must be a non empty list") - if len(series) == 1: - return True - try: - common_ratio = series[1] / series[0] - for index in range(len(series) - 1): - if series[index + 1] / series[index] != common_ratio: - return False - except ZeroDivisionError: - return False - return True - - -def geometric_mean(series: list) -> float: - """ - return the geometric mean of series - - >>> geometric_mean([2, 4, 8]) - 3.9999999999999996 - >>> geometric_mean([3, 6, 12, 24]) - 8.48528137423857 - >>> geometric_mean([4, 8, 16]) - 7.999999999999999 - >>> geometric_mean(4) - Traceback (most recent call last): - ... - ValueError: Input series is not valid, valid series - [2, 4, 8] - >>> geometric_mean([1, 2, 3]) - 1.8171205928321397 - >>> geometric_mean([0, 2, 3]) - 0.0 - >>> geometric_mean([]) - Traceback (most recent call last): - ... - ValueError: Input list must be a non empty list - - """ - if not isinstance(series, list): - raise ValueError("Input series is not valid, valid series - [2, 4, 8]") - if len(series) == 0: - raise ValueError("Input list must be a non empty list") - answer = 1 - for value in series: - answer *= value - return pow(answer, 1 / len(series)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/series/geometric_series.py b/maths/series/geometric_series.py deleted file mode 100644 index 55c42fd90e99..000000000000 --- a/maths/series/geometric_series.py +++ /dev/null @@ -1,74 +0,0 @@ -""" -This is a pure Python implementation of the Geometric Series algorithm -https://en.wikipedia.org/wiki/Geometric_series -Run the doctests with the following command: -python3 -m doctest -v geometric_series.py -or -python -m doctest -v geometric_series.py -For manual testing run: -python3 geometric_series.py -""" - -from __future__ import annotations - - -def geometric_series( - nth_term: float, - start_term_a: float, - common_ratio_r: float, -) -> list[float]: - """ - Pure Python implementation of Geometric Series algorithm - - :param nth_term: The last term (nth term of Geometric Series) - :param start_term_a : The first term of Geometric Series - :param common_ratio_r : The common ratio between all the terms - :return: The Geometric Series starting from first term a and multiple of common - ration with first term with increase in power till last term (nth term) - Examples: - >>> geometric_series(4, 2, 2) - [2, 4.0, 8.0, 16.0] - >>> geometric_series(4.0, 2.0, 2.0) - [2.0, 4.0, 8.0, 16.0] - >>> geometric_series(4.1, 2.1, 2.1) - [2.1, 4.41, 9.261000000000001, 19.448100000000004] - >>> geometric_series(4, 2, -2) - [2, -4.0, 8.0, -16.0] - >>> geometric_series(4, -2, 2) - [-2, -4.0, -8.0, -16.0] - >>> geometric_series(-4, 2, 2) - [] - >>> geometric_series(0, 100, 500) - [] - >>> geometric_series(1, 1, 1) - [1] - >>> geometric_series(0, 0, 0) - [] - """ - if not all((nth_term, start_term_a, common_ratio_r)): - return [] - series: list[float] = [] - power = 1 - multiple = common_ratio_r - for _ in range(int(nth_term)): - if not series: - series.append(start_term_a) - else: - power += 1 - series.append(float(start_term_a * multiple)) - multiple = pow(float(common_ratio_r), power) - return series - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - nth_term = float(input("Enter the last number (n term) of the Geometric Series")) - start_term_a = float(input("Enter the starting term (a) of the Geometric Series")) - common_ratio_r = float( - input("Enter the common ratio between two terms (r) of the Geometric Series") - ) - print("Formula of Geometric Series => a + ar + ar^2 ... +ar^n") - print(geometric_series(nth_term, start_term_a, common_ratio_r)) diff --git a/maths/series/harmonic.py b/maths/series/harmonic.py deleted file mode 100644 index 35792d38af9b..000000000000 --- a/maths/series/harmonic.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -Harmonic mean -Reference: https://en.wikipedia.org/wiki/Harmonic_mean - -Harmonic series -Reference: https://en.wikipedia.org/wiki/Harmonic_series(mathematics) -""" - - -def is_harmonic_series(series: list) -> bool: - """ - checking whether the input series is arithmetic series or not - >>> is_harmonic_series([ 1, 2/3, 1/2, 2/5, 1/3]) - True - >>> is_harmonic_series([ 1, 2/3, 2/5, 1/3]) - False - >>> is_harmonic_series([1, 2, 3]) - False - >>> is_harmonic_series([1/2, 1/3, 1/4]) - True - >>> is_harmonic_series([2/5, 2/10, 2/15, 2/20, 2/25]) - True - >>> is_harmonic_series(4) - Traceback (most recent call last): - ... - ValueError: Input series is not valid, valid series - [1, 2/3, 2] - >>> is_harmonic_series([]) - Traceback (most recent call last): - ... - ValueError: Input list must be a non empty list - >>> is_harmonic_series([0]) - Traceback (most recent call last): - ... - ValueError: Input series cannot have 0 as an element - >>> is_harmonic_series([1,2,0,6]) - Traceback (most recent call last): - ... - ValueError: Input series cannot have 0 as an element - """ - if not isinstance(series, list): - raise ValueError("Input series is not valid, valid series - [1, 2/3, 2]") - if len(series) == 0: - raise ValueError("Input list must be a non empty list") - if len(series) == 1 and series[0] != 0: - return True - rec_series = [] - series_len = len(series) - for i in range(series_len): - if series[i] == 0: - raise ValueError("Input series cannot have 0 as an element") - rec_series.append(1 / series[i]) - common_diff = rec_series[1] - rec_series[0] - for index in range(2, series_len): - if rec_series[index] - rec_series[index - 1] != common_diff: - return False - return True - - -def harmonic_mean(series: list) -> float: - """ - return the harmonic mean of series - - >>> harmonic_mean([1, 4, 4]) - 2.0 - >>> harmonic_mean([3, 6, 9, 12]) - 5.759999999999999 - >>> harmonic_mean(4) - Traceback (most recent call last): - ... - ValueError: Input series is not valid, valid series - [2, 4, 6] - >>> harmonic_mean([1, 2, 3]) - 1.6363636363636365 - >>> harmonic_mean([]) - Traceback (most recent call last): - ... - ValueError: Input list must be a non empty list - - """ - if not isinstance(series, list): - raise ValueError("Input series is not valid, valid series - [2, 4, 6]") - if len(series) == 0: - raise ValueError("Input list must be a non empty list") - answer = 0 - for val in series: - answer += 1 / val - return len(series) / answer - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/series/harmonic_series.py b/maths/series/harmonic_series.py deleted file mode 100644 index d42d13d912f1..000000000000 --- a/maths/series/harmonic_series.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -This is a pure Python implementation of the Harmonic Series algorithm -https://en.wikipedia.org/wiki/Harmonic_series_(mathematics) - -For doctests run following command: -python -m doctest -v harmonic_series.py -or -python3 -m doctest -v harmonic_series.py - -For manual testing run: -python3 harmonic_series.py -""" - - -def harmonic_series(n_term: str) -> list: - """Pure Python implementation of Harmonic Series algorithm - - :param n_term: The last (nth) term of Harmonic Series - :return: The Harmonic Series starting from 1 to last (nth) term - - Examples: - >>> harmonic_series(5) - ['1', '1/2', '1/3', '1/4', '1/5'] - >>> harmonic_series(5.0) - ['1', '1/2', '1/3', '1/4', '1/5'] - >>> harmonic_series(5.1) - ['1', '1/2', '1/3', '1/4', '1/5'] - >>> harmonic_series(-5) - [] - >>> harmonic_series(0) - [] - >>> harmonic_series(1) - ['1'] - """ - if n_term == "": - return [] - series: list = [] - for temp in range(int(n_term)): - series.append(f"1/{temp + 1}" if series else "1") - return series - - -if __name__ == "__main__": - nth_term = input("Enter the last number (nth term) of the Harmonic Series") - print("Formula of Harmonic Series => 1+1/2+1/3 ..... 1/n") - print(harmonic_series(nth_term)) diff --git a/maths/series/hexagonal_numbers.py b/maths/series/hexagonal_numbers.py deleted file mode 100644 index 582b1989b7c6..000000000000 --- a/maths/series/hexagonal_numbers.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -A hexagonal number sequence is a sequence of figurate numbers -where the nth hexagonal number hₙ is the number of distinct dots -in a pattern of dots consisting of the outlines of regular -hexagons with sides up to n dots, when the hexagons are overlaid -so that they share one vertex. - - Calculates the hexagonal numbers sequence with a formula - hₙ = n(2n-1) - where: - hₙ --> is nth element of the sequence - n --> is the number of element in the sequence - reference-->"Hexagonal number" Wikipedia - <https://en.wikipedia.org/wiki/Hexagonal_number> -""" - - -def hexagonal_numbers(length: int) -> list[int]: - """ - :param len: max number of elements - :type len: int - :return: Hexagonal numbers as a list - - Tests: - >>> hexagonal_numbers(10) - [0, 1, 6, 15, 28, 45, 66, 91, 120, 153] - >>> hexagonal_numbers(5) - [0, 1, 6, 15, 28] - >>> hexagonal_numbers(0) - Traceback (most recent call last): - ... - ValueError: Length must be a positive integer. - """ - - if length <= 0 or not isinstance(length, int): - raise ValueError("Length must be a positive integer.") - return [n * (2 * n - 1) for n in range(length)] - - -if __name__ == "__main__": - print(hexagonal_numbers(length=5)) - print(hexagonal_numbers(length=10)) diff --git a/maths/series/p_series.py b/maths/series/p_series.py deleted file mode 100644 index 93812f443857..000000000000 --- a/maths/series/p_series.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -This is a pure Python implementation of the P-Series algorithm -https://en.wikipedia.org/wiki/Harmonic_series_(mathematics)#P-series -For doctests run following command: -python -m doctest -v p_series.py -or -python3 -m doctest -v p_series.py -For manual testing run: -python3 p_series.py -""" - -from __future__ import annotations - - -def p_series(nth_term: float | str, power: float | str) -> list[str]: - """ - Pure Python implementation of P-Series algorithm - :return: The P-Series starting from 1 to last (nth) term - Examples: - >>> p_series(5, 2) - ['1', '1 / 4', '1 / 9', '1 / 16', '1 / 25'] - >>> p_series(-5, 2) - [] - >>> p_series(5, -2) - ['1', '1 / 0.25', '1 / 0.1111111111111111', '1 / 0.0625', '1 / 0.04'] - >>> p_series("", 1000) - [''] - >>> p_series(0, 0) - [] - >>> p_series(1, 1) - ['1'] - """ - if nth_term == "": - return [""] - nth_term = int(nth_term) - power = int(power) - series: list[str] = [] - for temp in range(int(nth_term)): - series.append(f"1 / {pow(temp + 1, int(power))}" if series else "1") - return series - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - nth_term = int(input("Enter the last number (nth term) of the P-Series")) - power = int(input("Enter the power for P-Series")) - print("Formula of P-Series => 1+1/2^p+1/3^p ..... 1/n^p") - print(p_series(nth_term, power)) diff --git a/maths/sieve_of_eratosthenes.py b/maths/sieve_of_eratosthenes.py deleted file mode 100644 index 3923dc3e1612..000000000000 --- a/maths/sieve_of_eratosthenes.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Sieve of Eratosthones - -The sieve of Eratosthenes is an algorithm used to find prime numbers, less than or -equal to a given value. -Illustration: -https://upload.wikimedia.org/wikipedia/commons/b/b9/Sieve_of_Eratosthenes_animation.gif -Reference: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - -doctest provider: Bruno Simas Hadlich (https://github.com/brunohadlich) -Also thanks to Dmitry (https://github.com/LizardWizzard) for finding the problem -""" - -from __future__ import annotations - -import math - - -def prime_sieve(num: int) -> list[int]: - """ - Returns a list with all prime numbers up to n. - - >>> prime_sieve(50) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] - >>> prime_sieve(25) - [2, 3, 5, 7, 11, 13, 17, 19, 23] - >>> prime_sieve(10) - [2, 3, 5, 7] - >>> prime_sieve(9) - [2, 3, 5, 7] - >>> prime_sieve(2) - [2] - >>> prime_sieve(1) - [] - """ - - if num <= 0: - msg = f"{num}: Invalid input, please enter a positive integer." - raise ValueError(msg) - - sieve = [True] * (num + 1) - prime = [] - start = 2 - end = int(math.sqrt(num)) - - while start <= end: - # If start is a prime - if sieve[start] is True: - prime.append(start) - - # Set multiples of start be False - for i in range(start * start, num + 1, start): - if sieve[i] is True: - sieve[i] = False - - start += 1 - - for j in range(end + 1, num + 1): - if sieve[j] is True: - prime.append(j) - - return prime - - -if __name__ == "__main__": - print(prime_sieve(int(input("Enter a positive integer: ").strip()))) diff --git a/maths/sigmoid.py b/maths/sigmoid.py deleted file mode 100644 index cb45bde2702c..000000000000 --- a/maths/sigmoid.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -This script demonstrates the implementation of the Sigmoid function. - -The function takes a vector of K real numbers as input and then 1 / (1 + exp(-x)). -After through Sigmoid, the element of the vector mostly 0 between 1. or 1 between -1. - -Script inspired from its corresponding Wikipedia article -https://en.wikipedia.org/wiki/Sigmoid_function -""" - -import numpy as np - - -def sigmoid(vector: np.ndarray) -> np.ndarray: - """ - Implements the sigmoid function - - Parameters: - vector (np.array): A numpy array of shape (1,n) - consisting of real values - - Returns: - sigmoid_vec (np.array): The input numpy array, after applying - sigmoid. - - Examples: - >>> sigmoid(np.array([-1.0, 1.0, 2.0])) - array([0.26894142, 0.73105858, 0.88079708]) - - >>> sigmoid(np.array([0.0])) - array([0.5]) - """ - return 1 / (1 + np.exp(-vector)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/signum.py b/maths/signum.py deleted file mode 100644 index c89753e76637..000000000000 --- a/maths/signum.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Signum function -- https://en.wikipedia.org/wiki/Sign_function -""" - - -def signum(num: float) -> int: - """ - Applies signum function on the number - - Custom test cases: - >>> signum(-10) - -1 - >>> signum(10) - 1 - >>> signum(0) - 0 - >>> signum(-20.5) - -1 - >>> signum(20.5) - 1 - >>> signum(-1e-6) - -1 - >>> signum(1e-6) - 1 - >>> signum("Hello") - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'str' and 'int' - >>> signum([]) - Traceback (most recent call last): - ... - TypeError: '<' not supported between instances of 'list' and 'int' - """ - if num < 0: - return -1 - return 1 if num else 0 - - -def test_signum() -> None: - """ - Tests the signum function - >>> test_signum() - """ - assert signum(5) == 1 - assert signum(-5) == -1 - assert signum(0) == 0 - assert signum(10.5) == 1 - assert signum(-10.5) == -1 - assert signum(1e-6) == 1 - assert signum(-1e-6) == -1 - assert signum(123456789) == 1 - assert signum(-123456789) == -1 - - -if __name__ == "__main__": - print(signum(12)) - print(signum(-12)) - print(signum(0)) diff --git a/maths/simultaneous_linear_equation_solver.py b/maths/simultaneous_linear_equation_solver.py deleted file mode 100644 index 9685a33e82fe..000000000000 --- a/maths/simultaneous_linear_equation_solver.py +++ /dev/null @@ -1,142 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Augmented_matrix - -This algorithm solves simultaneous linear equations of the form -λa + λb + λc + λd + ... = y as [λ, λ, λ, λ, ..., y] -Where λ & y are individual coefficients, the no. of equations = no. of coefficients - 1 - -Note in order to work there must exist 1 equation where all instances of λ and y != 0 -""" - - -def simplify(current_set: list[list]) -> list[list]: - """ - >>> simplify([[1, 2, 3], [4, 5, 6]]) - [[1.0, 2.0, 3.0], [0.0, 0.75, 1.5]] - >>> simplify([[5, 2, 5], [5, 1, 10]]) - [[1.0, 0.4, 1.0], [0.0, 0.2, -1.0]] - """ - # Divide each row by magnitude of first term --> creates 'unit' matrix - duplicate_set = current_set.copy() - for row_index, row in enumerate(duplicate_set): - magnitude = row[0] - for column_index, column in enumerate(row): - if magnitude == 0: - current_set[row_index][column_index] = column - continue - current_set[row_index][column_index] = column / magnitude - # Subtract to cancel term - first_row = current_set[0] - final_set = [first_row] - current_set = current_set[1::] - for row in current_set: - temp_row = [] - # If first term is 0, it is already in form we want, so we preserve it - if row[0] == 0: - final_set.append(row) - continue - for column_index in range(len(row)): - temp_row.append(first_row[column_index] - row[column_index]) - final_set.append(temp_row) - # Create next recursion iteration set - if len(final_set[0]) != 3: - current_first_row = final_set[0] - current_first_column = [] - next_iteration = [] - for row in final_set[1::]: - current_first_column.append(row[0]) - next_iteration.append(row[1::]) - resultant = simplify(next_iteration) - for i in range(len(resultant)): - resultant[i].insert(0, current_first_column[i]) - resultant.insert(0, current_first_row) - final_set = resultant - return final_set - - -def solve_simultaneous(equations: list[list]) -> list: - """ - >>> solve_simultaneous([[1, 2, 3],[4, 5, 6]]) - [-1.0, 2.0] - >>> solve_simultaneous([[0, -3, 1, 7],[3, 2, -1, 11],[5, 1, -2, 12]]) - [6.4, 1.2, 10.6] - >>> solve_simultaneous([]) - Traceback (most recent call last): - ... - IndexError: solve_simultaneous() requires n lists of length n+1 - >>> solve_simultaneous([[1, 2, 3],[1, 2]]) - Traceback (most recent call last): - ... - IndexError: solve_simultaneous() requires n lists of length n+1 - >>> solve_simultaneous([[1, 2, 3],["a", 7, 8]]) - Traceback (most recent call last): - ... - ValueError: solve_simultaneous() requires lists of integers - >>> solve_simultaneous([[0, 2, 3],[4, 0, 6]]) - Traceback (most recent call last): - ... - ValueError: solve_simultaneous() requires at least 1 full equation - """ - if len(equations) == 0: - raise IndexError("solve_simultaneous() requires n lists of length n+1") - _length = len(equations) + 1 - if any(len(item) != _length for item in equations): - raise IndexError("solve_simultaneous() requires n lists of length n+1") - for row in equations: - if any(not isinstance(column, (int, float)) for column in row): - raise ValueError("solve_simultaneous() requires lists of integers") - if len(equations) == 1: - return [equations[0][-1] / equations[0][0]] - data_set = equations.copy() - if any(0 in row for row in data_set): - temp_data = data_set.copy() - full_row = [] - for row_index, row in enumerate(temp_data): - if 0 not in row: - full_row = data_set.pop(row_index) - break - if not full_row: - raise ValueError("solve_simultaneous() requires at least 1 full equation") - data_set.insert(0, full_row) - useable_form = data_set.copy() - simplified = simplify(useable_form) - simplified = simplified[::-1] - solutions: list = [] - for row in simplified: - current_solution = row[-1] - if not solutions: - if row[-2] == 0: - solutions.append(0) - continue - solutions.append(current_solution / row[-2]) - continue - temp_row = row.copy()[: len(row) - 1 :] - while temp_row[0] == 0: - temp_row.pop(0) - if len(temp_row) == 0: - solutions.append(0) - continue - temp_row = temp_row[1::] - temp_row = temp_row[::-1] - for column_index, column in enumerate(temp_row): - current_solution -= column * solutions[column_index] - solutions.append(current_solution) - final = [] - for item in solutions: - final.append(float(round(item, 5))) - return final[::-1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - eq = [ - [2, 1, 1, 1, 1, 4], - [1, 2, 1, 1, 1, 5], - [1, 1, 2, 1, 1, 6], - [1, 1, 1, 2, 1, 7], - [1, 1, 1, 1, 2, 8], - ] - print(solve_simultaneous(eq)) - print(solve_simultaneous([[4, 2]])) diff --git a/maths/sin.py b/maths/sin.py deleted file mode 100644 index b06e6c9f1e5d..000000000000 --- a/maths/sin.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -Calculate sin function. - -It's not a perfect function so I am rounding the result to 10 decimal places by default. - -Formula: sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ... -Where: x = angle in randians. - -Source: - https://www.homeschoolmath.net/teaching/sine_calculator.php - -""" - -from math import factorial, radians - - -def sin( - angle_in_degrees: float, accuracy: int = 18, rounded_values_count: int = 10 -) -> float: - """ - Implement sin function. - - >>> sin(0.0) - 0.0 - >>> sin(90.0) - 1.0 - >>> sin(180.0) - 0.0 - >>> sin(270.0) - -1.0 - >>> sin(0.68) - 0.0118679603 - >>> sin(1.97) - 0.0343762121 - >>> sin(64.0) - 0.8987940463 - >>> sin(9999.0) - -0.9876883406 - >>> sin(-689.0) - 0.5150380749 - >>> sin(89.7) - 0.9999862922 - """ - # Simplify the angle to be between 360 and -360 degrees. - angle_in_degrees = angle_in_degrees - ((angle_in_degrees // 360.0) * 360.0) - - # Converting from degrees to radians - angle_in_radians = radians(angle_in_degrees) - - result = angle_in_radians - a = 3 - b = -1 - - for _ in range(accuracy): - result += (b * (angle_in_radians**a)) / factorial(a) - - b = -b # One positive term and the next will be negative and so on... - a += 2 # Increased by 2 for every term. - - return round(result, rounded_values_count) - - -if __name__ == "__main__": - __import__("doctest").testmod() diff --git a/maths/sock_merchant.py b/maths/sock_merchant.py deleted file mode 100644 index 304efec9ba5e..000000000000 --- a/maths/sock_merchant.py +++ /dev/null @@ -1,20 +0,0 @@ -from collections import Counter - - -def sock_merchant(colors: list[int]) -> int: - """ - >>> sock_merchant([10, 20, 20, 10, 10, 30, 50, 10, 20]) - 3 - >>> sock_merchant([1, 1, 3, 3]) - 2 - """ - return sum(socks_by_color // 2 for socks_by_color in Counter(colors).values()) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - colors = [int(x) for x in input("Enter socks by color :").rstrip().split()] - print(f"sock_merchant({colors}) = {sock_merchant(colors)}") diff --git a/maths/softmax.py b/maths/softmax.py deleted file mode 100644 index 95c95e66f59e..000000000000 --- a/maths/softmax.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -This script demonstrates the implementation of the Softmax function. - -Its a function that takes as input a vector of K real numbers, and normalizes -it into a probability distribution consisting of K probabilities proportional -to the exponentials of the input numbers. After softmax, the elements of the -vector always sum up to 1. - -Script inspired from its corresponding Wikipedia article -https://en.wikipedia.org/wiki/Softmax_function -""" - -import numpy as np - - -def softmax(vector): - """ - Implements the softmax function - - Parameters: - vector (np.array,list,tuple): A numpy array of shape (1,n) - consisting of real values or a similar list,tuple - - - Returns: - softmax_vec (np.array): The input numpy array after applying - softmax. - - The softmax vector adds up to one. We need to ceil to mitigate for - precision - >>> float(np.ceil(np.sum(softmax([1,2,3,4])))) - 1.0 - - >>> vec = np.array([5,5]) - >>> softmax(vec) - array([0.5, 0.5]) - - >>> softmax([0]) - array([1.]) - """ - - # Calculate e^x for each x in your vector where e is Euler's - # number (approximately 2.718) - exponent_vector = np.exp(vector) - - # Add up the all the exponentials - sum_of_exponents = np.sum(exponent_vector) - - # Divide every exponent by the sum of all exponents - softmax_vector = exponent_vector / sum_of_exponents - - return softmax_vector - - -if __name__ == "__main__": - print(softmax((0,))) diff --git a/maths/solovay_strassen_primality_test.py b/maths/solovay_strassen_primality_test.py deleted file mode 100644 index b2d905b07bed..000000000000 --- a/maths/solovay_strassen_primality_test.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -This script implements the Solovay-Strassen Primality test. - -This probabilistic primality test is based on Euler's criterion. It is similar -to the Fermat test but uses quadratic residues. It can quickly identify -composite numbers but may occasionally classify composite numbers as prime. - -More details and concepts about this can be found on: -https://en.wikipedia.org/wiki/Solovay%E2%80%93Strassen_primality_test -""" - -import random - - -def jacobi_symbol(random_a: int, number: int) -> int: - """ - Calculate the Jacobi symbol. The Jacobi symbol is a generalization - of the Legendre symbol, which can be used to simplify computations involving - quadratic residues. The Jacobi symbol is used in primality tests, like the - Solovay-Strassen test, because it helps determine if an integer is a - quadratic residue modulo a given modulus, providing valuable information - about the number's potential primality or compositeness. - - Parameters: - random_a: A randomly chosen integer from 2 to n-2 (inclusive) - number: The number that is tested for primality - - Returns: - jacobi_symbol: The Jacobi symbol is a mathematical function - used to determine whether an integer is a quadratic residue modulo - another integer (usually prime) or not. - - >>> jacobi_symbol(2, 13) - -1 - >>> jacobi_symbol(5, 19) - 1 - >>> jacobi_symbol(7, 14) - 0 - """ - - if random_a in (0, 1): - return random_a - - random_a %= number - t = 1 - - while random_a != 0: - while random_a % 2 == 0: - random_a //= 2 - r = number % 8 - if r in (3, 5): - t = -t - - random_a, number = number, random_a - - if random_a % 4 == number % 4 == 3: - t = -t - - random_a %= number - - return t if number == 1 else 0 - - -def solovay_strassen(number: int, iterations: int) -> bool: - """ - Check whether the input number is prime or not using - the Solovay-Strassen Primality test - - Parameters: - number: The number that is tested for primality - iterations: The number of times that the test is run - which effects the accuracy - - Returns: - result: True if number is probably prime and false - if not - - >>> random.seed(10) - >>> solovay_strassen(13, 5) - True - >>> solovay_strassen(9, 10) - False - >>> solovay_strassen(17, 15) - True - """ - - if number <= 1: - return False - if number <= 3: - return True - - for _ in range(iterations): - a = random.randint(2, number - 2) - x = jacobi_symbol(a, number) - y = pow(a, (number - 1) // 2, number) - - if x == 0 or y != x % number: - return False - - return True - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/spearman_rank_correlation_coefficient.py b/maths/spearman_rank_correlation_coefficient.py deleted file mode 100644 index 32ff6b9e3d71..000000000000 --- a/maths/spearman_rank_correlation_coefficient.py +++ /dev/null @@ -1,82 +0,0 @@ -from collections.abc import Sequence - - -def assign_ranks(data: Sequence[float]) -> list[int]: - """ - Assigns ranks to elements in the array. - - :param data: List of floats. - :return: List of ints representing the ranks. - - Example: - >>> assign_ranks([3.2, 1.5, 4.0, 2.7, 5.1]) - [3, 1, 4, 2, 5] - - >>> assign_ranks([10.5, 8.1, 12.4, 9.3, 11.0]) - [3, 1, 5, 2, 4] - """ - ranked_data = sorted((value, index) for index, value in enumerate(data)) - ranks = [0] * len(data) - - for position, (_, index) in enumerate(ranked_data): - ranks[index] = position + 1 - - return ranks - - -def calculate_spearman_rank_correlation( - variable_1: Sequence[float], variable_2: Sequence[float] -) -> float: - """ - Calculates Spearman's rank correlation coefficient. - - :param variable_1: List of floats representing the first variable. - :param variable_2: List of floats representing the second variable. - :return: Spearman's rank correlation coefficient. - - Example Usage: - - >>> x = [1, 2, 3, 4, 5] - >>> y = [5, 4, 3, 2, 1] - >>> calculate_spearman_rank_correlation(x, y) - -1.0 - - >>> x = [1, 2, 3, 4, 5] - >>> y = [2, 4, 6, 8, 10] - >>> calculate_spearman_rank_correlation(x, y) - 1.0 - - >>> x = [1, 2, 3, 4, 5] - >>> y = [5, 1, 2, 9, 5] - >>> calculate_spearman_rank_correlation(x, y) - 0.6 - """ - n = len(variable_1) - rank_var1 = assign_ranks(variable_1) - rank_var2 = assign_ranks(variable_2) - - # Calculate differences of ranks - d = [rx - ry for rx, ry in zip(rank_var1, rank_var2)] - - # Calculate the sum of squared differences - d_squared = sum(di**2 for di in d) - - # Calculate the Spearman's rank correlation coefficient - rho = 1 - (6 * d_squared) / (n * (n**2 - 1)) - - return rho - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Example usage: - print( - f"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [2, 4, 6, 8, 10]) = }" - ) - - print(f"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) = }") - - print(f"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [5, 1, 2, 9, 5]) = }") diff --git a/maths/special_numbers/__init__.py b/maths/special_numbers/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/maths/special_numbers/armstrong_numbers.py b/maths/special_numbers/armstrong_numbers.py deleted file mode 100644 index b2b4010a8f5b..000000000000 --- a/maths/special_numbers/armstrong_numbers.py +++ /dev/null @@ -1,99 +0,0 @@ -""" -An Armstrong number is equal to the sum of its own digits each raised to the -power of the number of digits. - -For example, 370 is an Armstrong number because 3*3*3 + 7*7*7 + 0*0*0 = 370. - -Armstrong numbers are also called Narcissistic numbers and Pluperfect numbers. - -On-Line Encyclopedia of Integer Sequences entry: https://oeis.org/A005188 -""" - -PASSING = (1, 153, 370, 371, 1634, 24678051, 115132219018763992565095597973971522401) -FAILING: tuple = (-153, -1, 0, 1.2, 200, "A", [], {}, None) - - -def armstrong_number(n: int) -> bool: - """ - Return True if n is an Armstrong number or False if it is not. - - >>> all(armstrong_number(n) for n in PASSING) - True - >>> any(armstrong_number(n) for n in FAILING) - False - """ - if not isinstance(n, int) or n < 1: - return False - - # Initialization of sum and number of digits. - total = 0 - number_of_digits = 0 - temp = n - # Calculation of digits of the number - number_of_digits = len(str(n)) - # Dividing number into separate digits and find Armstrong number - temp = n - while temp > 0: - rem = temp % 10 - total += rem**number_of_digits - temp //= 10 - return n == total - - -def pluperfect_number(n: int) -> bool: - """Return True if n is a pluperfect number or False if it is not - - >>> all(armstrong_number(n) for n in PASSING) - True - >>> any(armstrong_number(n) for n in FAILING) - False - """ - if not isinstance(n, int) or n < 1: - return False - - # Init a "histogram" of the digits - digit_histogram = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - digit_total = 0 - total = 0 - temp = n - while temp > 0: - temp, rem = divmod(temp, 10) - digit_histogram[rem] += 1 - digit_total += 1 - - for cnt, i in zip(digit_histogram, range(len(digit_histogram))): - total += cnt * i**digit_total - - return n == total - - -def narcissistic_number(n: int) -> bool: - """Return True if n is a narcissistic number or False if it is not. - - >>> all(armstrong_number(n) for n in PASSING) - True - >>> any(armstrong_number(n) for n in FAILING) - False - """ - if not isinstance(n, int) or n < 1: - return False - expo = len(str(n)) # the power that all digits will be raised to - # check if sum of each digit multiplied expo times is equal to number - return n == sum(int(i) ** expo for i in str(n)) - - -def main(): - """ - Request that user input an integer and tell them if it is Armstrong number. - """ - num = int(input("Enter an integer to see if it is an Armstrong number: ").strip()) - print(f"{num} is {'' if armstrong_number(num) else 'not '}an Armstrong number.") - print(f"{num} is {'' if narcissistic_number(num) else 'not '}an Armstrong number.") - print(f"{num} is {'' if pluperfect_number(num) else 'not '}an Armstrong number.") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/maths/special_numbers/automorphic_number.py b/maths/special_numbers/automorphic_number.py deleted file mode 100644 index 8ed9375632a4..000000000000 --- a/maths/special_numbers/automorphic_number.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -== Automorphic Numbers == -A number n is said to be a Automorphic number if -the square of n "ends" in the same digits as n itself. - -Examples of Automorphic Numbers: 0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625, ... -https://en.wikipedia.org/wiki/Automorphic_number -""" - -# Author : Akshay Dubey (https://github.com/itsAkshayDubey) -# Time Complexity : O(log10n) - - -def is_automorphic_number(number: int) -> bool: - """ - # doctest: +NORMALIZE_WHITESPACE - This functions takes an integer number as input. - returns True if the number is automorphic. - >>> is_automorphic_number(-1) - False - >>> is_automorphic_number(0) - True - >>> is_automorphic_number(5) - True - >>> is_automorphic_number(6) - True - >>> is_automorphic_number(7) - False - >>> is_automorphic_number(25) - True - >>> is_automorphic_number(259918212890625) - True - >>> is_automorphic_number(259918212890636) - False - >>> is_automorphic_number(740081787109376) - True - >>> is_automorphic_number(5.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=5.0] must be an integer - """ - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - if number < 0: - return False - number_square = number * number - while number > 0: - if number % 10 != number_square % 10: - return False - number //= 10 - number_square //= 10 - return True - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/bell_numbers.py b/maths/special_numbers/bell_numbers.py deleted file mode 100644 index 5d99334d7add..000000000000 --- a/maths/special_numbers/bell_numbers.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Bell numbers represent the number of ways to partition a set into non-empty -subsets. This module provides functions to calculate Bell numbers for sets of -integers. In other words, the first (n + 1) Bell numbers. - -For more information about Bell numbers, refer to: -https://en.wikipedia.org/wiki/Bell_number -""" - - -def bell_numbers(max_set_length: int) -> list[int]: - """ - Calculate Bell numbers for the sets of lengths from 0 to max_set_length. - In other words, calculate first (max_set_length + 1) Bell numbers. - - Args: - max_set_length (int): The maximum length of the sets for which - Bell numbers are calculated. - - Returns: - list: A list of Bell numbers for sets of lengths from 0 to max_set_length. - - Examples: - >>> bell_numbers(0) - [1] - >>> bell_numbers(1) - [1, 1] - >>> bell_numbers(5) - [1, 1, 2, 5, 15, 52] - """ - if max_set_length < 0: - raise ValueError("max_set_length must be non-negative") - - bell = [0] * (max_set_length + 1) - bell[0] = 1 - - for i in range(1, max_set_length + 1): - for j in range(i): - bell[i] += _binomial_coefficient(i - 1, j) * bell[j] - - return bell - - -def _binomial_coefficient(total_elements: int, elements_to_choose: int) -> int: - """ - Calculate the binomial coefficient C(total_elements, elements_to_choose) - - Args: - total_elements (int): The total number of elements. - elements_to_choose (int): The number of elements to choose. - - Returns: - int: The binomial coefficient C(total_elements, elements_to_choose). - - Examples: - >>> _binomial_coefficient(5, 2) - 10 - >>> _binomial_coefficient(6, 3) - 20 - """ - if elements_to_choose in {0, total_elements}: - return 1 - - elements_to_choose = min(elements_to_choose, total_elements - elements_to_choose) - - coefficient = 1 - for i in range(elements_to_choose): - coefficient *= total_elements - i - coefficient //= i + 1 - - return coefficient - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/carmichael_number.py b/maths/special_numbers/carmichael_number.py deleted file mode 100644 index c73908545702..000000000000 --- a/maths/special_numbers/carmichael_number.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -== Carmichael Numbers == -A number n is said to be a Carmichael number if it -satisfies the following modular arithmetic condition: - - power(b, n-1) MOD n = 1, - for all b ranging from 1 to n such that b and - n are relatively prime, i.e, gcd(b, n) = 1 - -Examples of Carmichael Numbers: 561, 1105, ... -https://en.wikipedia.org/wiki/Carmichael_number -""" - -from maths.greatest_common_divisor import greatest_common_divisor - - -def power(x: int, y: int, mod: int) -> int: - """ - Examples: - >>> power(2, 15, 3) - 2 - >>> power(5, 1, 30) - 5 - """ - - if y == 0: - return 1 - temp = power(x, y // 2, mod) % mod - temp = (temp * temp) % mod - if y % 2 == 1: - temp = (temp * x) % mod - return temp - - -def is_carmichael_number(n: int) -> bool: - """ - Examples: - >>> is_carmichael_number(4) - False - >>> is_carmichael_number(561) - True - >>> is_carmichael_number(562) - False - >>> is_carmichael_number(900) - False - >>> is_carmichael_number(1105) - True - >>> is_carmichael_number(8911) - True - >>> is_carmichael_number(5.1) - Traceback (most recent call last): - ... - ValueError: Number 5.1 must instead be a positive integer - - >>> is_carmichael_number(-7) - Traceback (most recent call last): - ... - ValueError: Number -7 must instead be a positive integer - - >>> is_carmichael_number(0) - Traceback (most recent call last): - ... - ValueError: Number 0 must instead be a positive integer - """ - - if n <= 0 or not isinstance(n, int): - msg = f"Number {n} must instead be a positive integer" - raise ValueError(msg) - - return all( - power(b, n - 1, n) == 1 - for b in range(2, n) - if greatest_common_divisor(b, n) == 1 - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - number = int(input("Enter number: ").strip()) - if is_carmichael_number(number): - print(f"{number} is a Carmichael Number.") - else: - print(f"{number} is not a Carmichael Number.") diff --git a/maths/special_numbers/catalan_number.py b/maths/special_numbers/catalan_number.py deleted file mode 100644 index 20c2cfb17c06..000000000000 --- a/maths/special_numbers/catalan_number.py +++ /dev/null @@ -1,53 +0,0 @@ -""" - -Calculate the nth Catalan number - -Source: - https://en.wikipedia.org/wiki/Catalan_number - -""" - - -def catalan(number: int) -> int: - """ - :param number: nth catalan number to calculate - :return: the nth catalan number - Note: A catalan number is only defined for positive integers - - >>> catalan(5) - 14 - >>> catalan(0) - Traceback (most recent call last): - ... - ValueError: Input value of [number=0] must be > 0 - >>> catalan(-1) - Traceback (most recent call last): - ... - ValueError: Input value of [number=-1] must be > 0 - >>> catalan(5.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=5.0] must be an integer - """ - - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - - if number < 1: - msg = f"Input value of [number={number}] must be > 0" - raise ValueError(msg) - - current_number = 1 - - for i in range(1, number): - current_number *= 4 * i - 2 - current_number //= i + 1 - - return current_number - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/hamming_numbers.py b/maths/special_numbers/hamming_numbers.py deleted file mode 100644 index 4575119c8a95..000000000000 --- a/maths/special_numbers/hamming_numbers.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -A Hamming number is a positive integer of the form 2^i*3^j*5^k, for some -non-negative integers i, j, and k. They are often referred to as regular numbers. -More info at: https://en.wikipedia.org/wiki/Regular_number. -""" - - -def hamming(n_element: int) -> list: - """ - This function creates an ordered list of n length as requested, and afterwards - returns the last value of the list. It must be given a positive integer. - - :param n_element: The number of elements on the list - :return: The nth element of the list - - >>> hamming(5) - [1, 2, 3, 4, 5] - >>> hamming(10) - [1, 2, 3, 4, 5, 6, 8, 9, 10, 12] - >>> hamming(15) - [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24] - """ - n_element = int(n_element) - if n_element < 1: - my_error = ValueError("a should be a positive number") - raise my_error - - hamming_list = [1] - i, j, k = (0, 0, 0) - index = 1 - while index < n_element: - while hamming_list[i] * 2 <= hamming_list[-1]: - i += 1 - while hamming_list[j] * 3 <= hamming_list[-1]: - j += 1 - while hamming_list[k] * 5 <= hamming_list[-1]: - k += 1 - hamming_list.append( - min(hamming_list[i] * 2, hamming_list[j] * 3, hamming_list[k] * 5) - ) - index += 1 - return hamming_list - - -if __name__ == "__main__": - n = input("Enter the last number (nth term) of the Hamming Number Series: ") - print("Formula of Hamming Number Series => 2^i * 3^j * 5^k") - hamming_numbers = hamming(int(n)) - print("-----------------------------------------------------") - print(f"The list with nth numbers is: {hamming_numbers}") - print("-----------------------------------------------------") diff --git a/maths/special_numbers/happy_number.py b/maths/special_numbers/happy_number.py deleted file mode 100644 index eac3167e304b..000000000000 --- a/maths/special_numbers/happy_number.py +++ /dev/null @@ -1,48 +0,0 @@ -def is_happy_number(number: int) -> bool: - """ - A happy number is a number which eventually reaches 1 when replaced by the sum of - the square of each digit. - - :param number: The number to check for happiness. - :return: True if the number is a happy number, False otherwise. - - >>> is_happy_number(19) - True - >>> is_happy_number(2) - False - >>> is_happy_number(23) - True - >>> is_happy_number(1) - True - >>> is_happy_number(0) - Traceback (most recent call last): - ... - ValueError: number=0 must be a positive integer - >>> is_happy_number(-19) - Traceback (most recent call last): - ... - ValueError: number=-19 must be a positive integer - >>> is_happy_number(19.1) - Traceback (most recent call last): - ... - ValueError: number=19.1 must be a positive integer - >>> is_happy_number("happy") - Traceback (most recent call last): - ... - ValueError: number='happy' must be a positive integer - """ - if not isinstance(number, int) or number <= 0: - msg = f"{number=} must be a positive integer" - raise ValueError(msg) - - seen = set() - while number != 1 and number not in seen: - seen.add(number) - number = sum(int(digit) ** 2 for digit in str(number)) - return number == 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/harshad_numbers.py b/maths/special_numbers/harshad_numbers.py deleted file mode 100644 index 61667adfa127..000000000000 --- a/maths/special_numbers/harshad_numbers.py +++ /dev/null @@ -1,158 +0,0 @@ -""" -A harshad number (or more specifically an n-harshad number) is a number that's -divisible by the sum of its digits in some given base n. -Reference: https://en.wikipedia.org/wiki/Harshad_number -""" - - -def int_to_base(number: int, base: int) -> str: - """ - Convert a given positive decimal integer to base 'base'. - Where 'base' ranges from 2 to 36. - - Examples: - >>> int_to_base(23, 2) - '10111' - >>> int_to_base(58, 5) - '213' - >>> int_to_base(167, 16) - 'A7' - >>> # bases below 2 and beyond 36 will error - >>> int_to_base(98, 1) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - >>> int_to_base(98, 37) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - """ - - if base < 2 or base > 36: - raise ValueError("'base' must be between 2 and 36 inclusive") - - digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - result = "" - - if number < 0: - raise ValueError("number must be a positive integer") - - while number > 0: - number, remainder = divmod(number, base) - result = digits[remainder] + result - - if result == "": - result = "0" - - return result - - -def sum_of_digits(num: int, base: int) -> str: - """ - Calculate the sum of digit values in a positive integer - converted to the given 'base'. - Where 'base' ranges from 2 to 36. - - Examples: - >>> sum_of_digits(103, 12) - '13' - >>> sum_of_digits(1275, 4) - '30' - >>> sum_of_digits(6645, 2) - '1001' - >>> # bases below 2 and beyond 36 will error - >>> sum_of_digits(543, 1) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - >>> sum_of_digits(543, 37) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - """ - - if base < 2 or base > 36: - raise ValueError("'base' must be between 2 and 36 inclusive") - - num_str = int_to_base(num, base) - res = sum(int(char, base) for char in num_str) - res_str = int_to_base(res, base) - return res_str - - -def harshad_numbers_in_base(limit: int, base: int) -> list[str]: - """ - Finds all Harshad numbers smaller than num in base 'base'. - Where 'base' ranges from 2 to 36. - - Examples: - >>> harshad_numbers_in_base(15, 2) - ['1', '10', '100', '110', '1000', '1010', '1100'] - >>> harshad_numbers_in_base(12, 34) - ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B'] - >>> harshad_numbers_in_base(12, 4) - ['1', '2', '3', '10', '12', '20', '21'] - >>> # bases below 2 and beyond 36 will error - >>> harshad_numbers_in_base(234, 37) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - >>> harshad_numbers_in_base(234, 1) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - """ - - if base < 2 or base > 36: - raise ValueError("'base' must be between 2 and 36 inclusive") - - if limit < 0: - return [] - - numbers = [ - int_to_base(i, base) - for i in range(1, limit) - if i % int(sum_of_digits(i, base), base) == 0 - ] - - return numbers - - -def is_harshad_number_in_base(num: int, base: int) -> bool: - """ - Determines whether n in base 'base' is a harshad number. - Where 'base' ranges from 2 to 36. - - Examples: - >>> is_harshad_number_in_base(18, 10) - True - >>> is_harshad_number_in_base(21, 10) - True - >>> is_harshad_number_in_base(-21, 5) - False - >>> # bases below 2 and beyond 36 will error - >>> is_harshad_number_in_base(45, 37) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - >>> is_harshad_number_in_base(45, 1) - Traceback (most recent call last): - ... - ValueError: 'base' must be between 2 and 36 inclusive - """ - - if base < 2 or base > 36: - raise ValueError("'base' must be between 2 and 36 inclusive") - - if num < 0: - return False - - n = int_to_base(num, base) - d = sum_of_digits(num, base) - return int(n, base) % int(d, base) == 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/hexagonal_number.py b/maths/special_numbers/hexagonal_number.py deleted file mode 100644 index 3677ab95ee00..000000000000 --- a/maths/special_numbers/hexagonal_number.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -== Hexagonal Number == -The nth hexagonal number hn is the number of distinct dots -in a pattern of dots consisting of the outlines of regular -hexagons with sides up to n dots, when the hexagons are -overlaid so that they share one vertex. - -https://en.wikipedia.org/wiki/Hexagonal_number -""" - -# Author : Akshay Dubey (https://github.com/itsAkshayDubey) - - -def hexagonal(number: int) -> int: - """ - :param number: nth hexagonal number to calculate - :return: the nth hexagonal number - Note: A hexagonal number is only defined for positive integers - >>> hexagonal(4) - 28 - >>> hexagonal(11) - 231 - >>> hexagonal(22) - 946 - >>> hexagonal(0) - Traceback (most recent call last): - ... - ValueError: Input must be a positive integer - >>> hexagonal(-1) - Traceback (most recent call last): - ... - ValueError: Input must be a positive integer - >>> hexagonal(11.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=11.0] must be an integer - """ - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - if number < 1: - raise ValueError("Input must be a positive integer") - return number * (2 * number - 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/krishnamurthy_number.py b/maths/special_numbers/krishnamurthy_number.py deleted file mode 100644 index c1d8a8fc5f56..000000000000 --- a/maths/special_numbers/krishnamurthy_number.py +++ /dev/null @@ -1,49 +0,0 @@ -""" - == Krishnamurthy Number == -It is also known as Peterson Number -A Krishnamurthy Number is a number whose sum of the -factorial of the digits equals to the original -number itself. - -For example: 145 = 1! + 4! + 5! - So, 145 is a Krishnamurthy Number -""" - - -def factorial(digit: int) -> int: - """ - >>> factorial(3) - 6 - >>> factorial(0) - 1 - >>> factorial(5) - 120 - """ - - return 1 if digit in (0, 1) else (digit * factorial(digit - 1)) - - -def krishnamurthy(number: int) -> bool: - """ - >>> krishnamurthy(145) - True - >>> krishnamurthy(240) - False - >>> krishnamurthy(1) - True - """ - - fact_sum = 0 - duplicate = number - while duplicate > 0: - duplicate, digit = divmod(duplicate, 10) - fact_sum += factorial(digit) - return fact_sum == number - - -if __name__ == "__main__": - print("Program to check whether a number is a Krisnamurthy Number or not.") - number = int(input("Enter number: ").strip()) - print( - f"{number} is {'' if krishnamurthy(number) else 'not '}a Krishnamurthy Number." - ) diff --git a/maths/special_numbers/perfect_number.py b/maths/special_numbers/perfect_number.py deleted file mode 100644 index a022dc677638..000000000000 --- a/maths/special_numbers/perfect_number.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -== Perfect Number == -In number theory, a perfect number is a positive integer that is equal to the sum of -its positive divisors, excluding the number itself. -For example: 6 ==> divisors[1, 2, 3, 6] - Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6 - So, 6 is a Perfect Number - -Other examples of Perfect Numbers: 28, 486, ... - -https://en.wikipedia.org/wiki/Perfect_number -""" - - -def perfect(number: int) -> bool: - """ - Check if a number is a perfect number. - - A perfect number is a positive integer that is equal to the sum of its proper - divisors (excluding itself). - - Args: - number: The number to be checked. - - Returns: - True if the number is a perfect number, False otherwise. - - Start from 1 because dividing by 0 will raise ZeroDivisionError. - A number at most can be divisible by the half of the number except the number - itself. For example, 6 is at most can be divisible by 3 except by 6 itself. - - Examples: - >>> perfect(27) - False - >>> perfect(28) - True - >>> perfect(29) - False - >>> perfect(6) - True - >>> perfect(12) - False - >>> perfect(496) - True - >>> perfect(8128) - True - >>> perfect(0) - False - >>> perfect(-1) - False - >>> perfect(12.34) - Traceback (most recent call last): - ... - ValueError: number must be an integer - >>> perfect("Hello") - Traceback (most recent call last): - ... - ValueError: number must be an integer - """ - if not isinstance(number, int): - raise ValueError("number must be an integer") - if number <= 0: - return False - return sum(i for i in range(1, number // 2 + 1) if number % i == 0) == number - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print("Program to check whether a number is a Perfect number or not...") - try: - number = int(input("Enter a positive integer: ").strip()) - except ValueError: - msg = "number must be an integer" - print(msg) - raise ValueError(msg) - - print(f"{number} is {'' if perfect(number) else 'not '}a Perfect Number.") diff --git a/maths/special_numbers/polygonal_numbers.py b/maths/special_numbers/polygonal_numbers.py deleted file mode 100644 index 7a7dc91acb26..000000000000 --- a/maths/special_numbers/polygonal_numbers.py +++ /dev/null @@ -1,32 +0,0 @@ -def polygonal_num(num: int, sides: int) -> int: - """ - Returns the `num`th `sides`-gonal number. It is assumed that `num` >= 0 and - `sides` >= 3 (see for reference https://en.wikipedia.org/wiki/Polygonal_number). - - >>> polygonal_num(0, 3) - 0 - >>> polygonal_num(3, 3) - 6 - >>> polygonal_num(5, 4) - 25 - >>> polygonal_num(2, 5) - 5 - >>> polygonal_num(-1, 0) - Traceback (most recent call last): - ... - ValueError: Invalid input: num must be >= 0 and sides must be >= 3. - >>> polygonal_num(0, 2) - Traceback (most recent call last): - ... - ValueError: Invalid input: num must be >= 0 and sides must be >= 3. - """ - if num < 0 or sides < 3: - raise ValueError("Invalid input: num must be >= 0 and sides must be >= 3.") - - return ((sides - 2) * num**2 - (sides - 4) * num) // 2 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/pronic_number.py b/maths/special_numbers/pronic_number.py deleted file mode 100644 index cf4d3d2eb24b..000000000000 --- a/maths/special_numbers/pronic_number.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -== Pronic Number == -A number n is said to be a Proic number if -there exists an integer m such that n = m * (m + 1) - -Examples of Proic Numbers: 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110 ... -https://en.wikipedia.org/wiki/Pronic_number -""" - -# Author : Akshay Dubey (https://github.com/itsAkshayDubey) - - -def is_pronic(number: int) -> bool: - """ - # doctest: +NORMALIZE_WHITESPACE - This functions takes an integer number as input. - returns True if the number is pronic. - >>> is_pronic(-1) - False - >>> is_pronic(0) - True - >>> is_pronic(2) - True - >>> is_pronic(5) - False - >>> is_pronic(6) - True - >>> is_pronic(8) - False - >>> is_pronic(30) - True - >>> is_pronic(32) - False - >>> is_pronic(2147441940) - True - >>> is_pronic(9223372033963249500) - True - >>> is_pronic(6.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=6.0] must be an integer - """ - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - if number < 0 or number % 2 == 1: - return False - number_sqrt = int(number**0.5) - return number == number_sqrt * (number_sqrt + 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/proth_number.py b/maths/special_numbers/proth_number.py deleted file mode 100644 index 47747ed260f7..000000000000 --- a/maths/special_numbers/proth_number.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Calculate the nth Proth number -Source: - https://handwiki.org/wiki/Proth_number -""" - -import math - - -def proth(number: int) -> int: - """ - :param number: nth number to calculate in the sequence - :return: the nth number in Proth number - Note: indexing starts at 1 i.e. proth(1) gives the first Proth number of 3 - >>> proth(6) - 25 - >>> proth(0) - Traceback (most recent call last): - ... - ValueError: Input value of [number=0] must be > 0 - >>> proth(-1) - Traceback (most recent call last): - ... - ValueError: Input value of [number=-1] must be > 0 - >>> proth(6.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=6.0] must be an integer - """ - - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - - if number < 1: - msg = f"Input value of [number={number}] must be > 0" - raise ValueError(msg) - elif number == 1: - return 3 - elif number == 2: - return 5 - else: - """ - +1 for binary starting at 0 i.e. 2^0, 2^1, etc. - +1 to start the sequence at the 3rd Proth number - Hence, we have a +2 in the below statement - """ - block_index = int(math.log(number // 3, 2)) + 2 - - proth_list = [3, 5] - proth_index = 2 - increment = 3 - for block in range(1, block_index): - for _ in range(increment): - proth_list.append(2 ** (block + 1) + proth_list[proth_index - 1]) - proth_index += 1 - increment *= 2 - - return proth_list[number - 1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - for number in range(11): - value = 0 - try: - value = proth(number) - except ValueError: - print(f"ValueError: there is no {number}th Proth number") - continue - - print(f"The {number}th Proth number: {value}") diff --git a/maths/special_numbers/triangular_numbers.py b/maths/special_numbers/triangular_numbers.py deleted file mode 100644 index 5be89e6108b2..000000000000 --- a/maths/special_numbers/triangular_numbers.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -A triangular number or triangle number counts objects arranged in an -equilateral triangle. This module provides a function to generate n'th -triangular number. - -For more information about triangular numbers, refer to: -https://en.wikipedia.org/wiki/Triangular_number -""" - - -def triangular_number(position: int) -> int: - """ - Generate the triangular number at the specified position. - - Args: - position (int): The position of the triangular number to generate. - - Returns: - int: The triangular number at the specified position. - - Raises: - ValueError: If `position` is negative. - - Examples: - >>> triangular_number(1) - 1 - >>> triangular_number(3) - 6 - >>> triangular_number(-1) - Traceback (most recent call last): - ... - ValueError: param `position` must be non-negative - """ - if position < 0: - raise ValueError("param `position` must be non-negative") - - return position * (position + 1) // 2 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/special_numbers/ugly_numbers.py b/maths/special_numbers/ugly_numbers.py deleted file mode 100644 index c6ceb784622a..000000000000 --- a/maths/special_numbers/ugly_numbers.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence -1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, … shows the first 11 ugly numbers. By convention, -1 is included. -Given an integer n, we have to find the nth ugly number. - -For more details, refer this article -https://www.geeksforgeeks.org/ugly-numbers/ -""" - - -def ugly_numbers(n: int) -> int: - """ - Returns the nth ugly number. - >>> ugly_numbers(100) - 1536 - >>> ugly_numbers(0) - 1 - >>> ugly_numbers(20) - 36 - >>> ugly_numbers(-5) - 1 - >>> ugly_numbers(-5.5) - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - """ - ugly_nums = [1] - - i2, i3, i5 = 0, 0, 0 - next_2 = ugly_nums[i2] * 2 - next_3 = ugly_nums[i3] * 3 - next_5 = ugly_nums[i5] * 5 - - for _ in range(1, n): - next_num = min(next_2, next_3, next_5) - ugly_nums.append(next_num) - if next_num == next_2: - i2 += 1 - next_2 = ugly_nums[i2] * 2 - if next_num == next_3: - i3 += 1 - next_3 = ugly_nums[i3] * 3 - if next_num == next_5: - i5 += 1 - next_5 = ugly_nums[i5] * 5 - return ugly_nums[-1] - - -if __name__ == "__main__": - from doctest import testmod - - testmod(verbose=True) - print(f"{ugly_numbers(200) = }") diff --git a/maths/special_numbers/weird_number.py b/maths/special_numbers/weird_number.py deleted file mode 100644 index 5c9240d0ea4e..000000000000 --- a/maths/special_numbers/weird_number.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Weird_number - -Fun fact: The set of weird numbers has positive asymptotic density. -""" - -from math import sqrt - - -def factors(number: int) -> list[int]: - """ - >>> factors(12) - [1, 2, 3, 4, 6] - >>> factors(1) - [1] - >>> factors(100) - [1, 2, 4, 5, 10, 20, 25, 50] - - # >>> factors(-12) - # [1, 2, 3, 4, 6] - """ - - values = [1] - for i in range(2, int(sqrt(number)) + 1, 1): - if number % i == 0: - values.append(i) - if int(number // i) != i: - values.append(int(number // i)) - return sorted(values) - - -def abundant(n: int) -> bool: - """ - >>> abundant(0) - True - >>> abundant(1) - False - >>> abundant(12) - True - >>> abundant(13) - False - >>> abundant(20) - True - - # >>> abundant(-12) - # True - """ - return sum(factors(n)) > n - - -def semi_perfect(number: int) -> bool: - """ - >>> semi_perfect(0) - True - >>> semi_perfect(1) - True - >>> semi_perfect(12) - True - >>> semi_perfect(13) - False - - # >>> semi_perfect(-12) - # True - """ - values = factors(number) - r = len(values) - subset = [[0 for i in range(number + 1)] for j in range(r + 1)] - for i in range(r + 1): - subset[i][0] = True - - for i in range(1, number + 1): - subset[0][i] = False - - for i in range(1, r + 1): - for j in range(1, number + 1): - if j < values[i - 1]: - subset[i][j] = subset[i - 1][j] - else: - subset[i][j] = subset[i - 1][j] or subset[i - 1][j - values[i - 1]] - - return subset[r][number] != 0 - - -def weird(number: int) -> bool: - """ - >>> weird(0) - False - >>> weird(70) - True - >>> weird(77) - False - """ - return abundant(number) and not semi_perfect(number) - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) - for number in (69, 70, 71): - print(f"{number} is {'' if weird(number) else 'not '}weird.") diff --git a/maths/sum_of_arithmetic_series.py b/maths/sum_of_arithmetic_series.py deleted file mode 100644 index 3e381b8c20a8..000000000000 --- a/maths/sum_of_arithmetic_series.py +++ /dev/null @@ -1,23 +0,0 @@ -# DarkCoder -def sum_of_series(first_term: int, common_diff: int, num_of_terms: int) -> float: - """ - Find the sum of n terms in an arithmetic progression. - - >>> sum_of_series(1, 1, 10) - 55.0 - >>> sum_of_series(1, 10, 100) - 49600.0 - """ - total = (num_of_terms / 2) * (2 * first_term + (num_of_terms - 1) * common_diff) - # formula for sum of series - return total - - -def main(): - print(sum_of_series(1, 1, 10)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/sum_of_digits.py b/maths/sum_of_digits.py deleted file mode 100644 index d5488bb9e9e0..000000000000 --- a/maths/sum_of_digits.py +++ /dev/null @@ -1,74 +0,0 @@ -def sum_of_digits(n: int) -> int: - """ - Find the sum of digits of a number. - >>> sum_of_digits(12345) - 15 - >>> sum_of_digits(123) - 6 - >>> sum_of_digits(-123) - 6 - >>> sum_of_digits(0) - 0 - """ - n = abs(n) - res = 0 - while n > 0: - res += n % 10 - n //= 10 - return res - - -def sum_of_digits_recursion(n: int) -> int: - """ - Find the sum of digits of a number using recursion - >>> sum_of_digits_recursion(12345) - 15 - >>> sum_of_digits_recursion(123) - 6 - >>> sum_of_digits_recursion(-123) - 6 - >>> sum_of_digits_recursion(0) - 0 - """ - n = abs(n) - return n if n < 10 else n % 10 + sum_of_digits(n // 10) - - -def sum_of_digits_compact(n: int) -> int: - """ - Find the sum of digits of a number - >>> sum_of_digits_compact(12345) - 15 - >>> sum_of_digits_compact(123) - 6 - >>> sum_of_digits_compact(-123) - 6 - >>> sum_of_digits_compact(0) - 0 - """ - return sum(int(c) for c in str(abs(n))) - - -def benchmark() -> None: - """ - Benchmark multiple functions, with three different length int values. - """ - from collections.abc import Callable - from timeit import timeit - - def benchmark_a_function(func: Callable, value: int) -> None: - call = f"{func.__name__}({value})" - timing = timeit(f"__main__.{call}", setup="import __main__") - print(f"{call:56} = {func(value)} -- {timing:.4f} seconds") - - for value in (262144, 1125899906842624, 1267650600228229401496703205376): - for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact): - benchmark_a_function(func, value) - print() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - benchmark() diff --git a/maths/sum_of_geometric_progression.py b/maths/sum_of_geometric_progression.py deleted file mode 100644 index 9079f35af6d9..000000000000 --- a/maths/sum_of_geometric_progression.py +++ /dev/null @@ -1,28 +0,0 @@ -def sum_of_geometric_progression( - first_term: int, common_ratio: int, num_of_terms: int -) -> float: - """ " - Return the sum of n terms in a geometric progression. - >>> sum_of_geometric_progression(1, 2, 10) - 1023.0 - >>> sum_of_geometric_progression(1, 10, 5) - 11111.0 - >>> sum_of_geometric_progression(0, 2, 10) - 0.0 - >>> sum_of_geometric_progression(1, 0, 10) - 1.0 - >>> sum_of_geometric_progression(1, 2, 0) - -0.0 - >>> sum_of_geometric_progression(-1, 2, 10) - -1023.0 - >>> sum_of_geometric_progression(1, -2, 10) - -341.0 - >>> sum_of_geometric_progression(1, 2, -10) - -0.9990234375 - """ - if common_ratio == 1: - # Formula for sum if common ratio is 1 - return num_of_terms * first_term - - # Formula for finding sum of n terms of a GeometricProgression - return (first_term / (1 - common_ratio)) * (1 - common_ratio**num_of_terms) diff --git a/maths/sum_of_harmonic_series.py b/maths/sum_of_harmonic_series.py deleted file mode 100644 index 9e0d6b19b95a..000000000000 --- a/maths/sum_of_harmonic_series.py +++ /dev/null @@ -1,29 +0,0 @@ -def sum_of_harmonic_progression( - first_term: float, common_difference: float, number_of_terms: int -) -> float: - """ - https://en.wikipedia.org/wiki/Harmonic_progression_(mathematics) - - Find the sum of n terms in an harmonic progression. The calculation starts with the - first_term and loops adding the common difference of Arithmetic Progression by which - the given Harmonic Progression is linked. - - >>> sum_of_harmonic_progression(1 / 2, 2, 2) - 0.75 - >>> sum_of_harmonic_progression(1 / 5, 5, 5) - 0.45666666666666667 - """ - arithmetic_progression = [1 / first_term] - first_term = 1 / first_term - for _ in range(number_of_terms - 1): - first_term += common_difference - arithmetic_progression.append(first_term) - harmonic_series = [1 / step for step in arithmetic_progression] - return sum(harmonic_series) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(sum_of_harmonic_progression(1 / 2, 2, 2)) diff --git a/maths/sumset.py b/maths/sumset.py deleted file mode 100644 index fa18f9e24b4c..000000000000 --- a/maths/sumset.py +++ /dev/null @@ -1,37 +0,0 @@ -""" - -Calculates the SumSet of two sets of numbers (A and B) - -Source: - https://en.wikipedia.org/wiki/Sumset - -""" - - -def sumset(set_a: set, set_b: set) -> set: - """ - :param first set: a set of numbers - :param second set: a set of numbers - :return: the nth number in Sylvester's sequence - - >>> sumset({1, 2, 3}, {4, 5, 6}) - {5, 6, 7, 8, 9} - - >>> sumset({1, 2, 3}, {4, 5, 6, 7}) - {5, 6, 7, 8, 9, 10} - - >>> sumset({1, 2, 3, 4}, 3) - Traceback (most recent call last): - ... - AssertionError: The input value of [set_b=3] is not a set - """ - assert isinstance(set_a, set), f"The input value of [set_a={set_a}] is not a set" - assert isinstance(set_b, set), f"The input value of [set_b={set_b}] is not a set" - - return {a + b for a in set_a for b in set_b} - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/maths/sylvester_sequence.py b/maths/sylvester_sequence.py deleted file mode 100644 index 607424c6a90b..000000000000 --- a/maths/sylvester_sequence.py +++ /dev/null @@ -1,44 +0,0 @@ -""" - -Calculates the nth number in Sylvester's sequence - -Source: - https://en.wikipedia.org/wiki/Sylvester%27s_sequence - -""" - - -def sylvester(number: int) -> int: - """ - :param number: nth number to calculate in the sequence - :return: the nth number in Sylvester's sequence - - >>> sylvester(8) - 113423713055421844361000443 - - >>> sylvester(-1) - Traceback (most recent call last): - ... - ValueError: The input value of [n=-1] has to be > 0 - - >>> sylvester(8.0) - Traceback (most recent call last): - ... - AssertionError: The input value of [n=8.0] is not an integer - """ - assert isinstance(number, int), f"The input value of [n={number}] is not an integer" - - if number == 1: - return 2 - elif number < 1: - msg = f"The input value of [n={number}] has to be > 0" - raise ValueError(msg) - else: - num = sylvester(number - 1) - lower = num - 1 - upper = num - return lower * upper + 1 - - -if __name__ == "__main__": - print(f"The 8th number in Sylvester's sequence: {sylvester(8)}") diff --git a/maths/tanh.py b/maths/tanh.py deleted file mode 100644 index 011d6f17e22b..000000000000 --- a/maths/tanh.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -This script demonstrates the implementation of the tangent hyperbolic -or tanh function. - -The function takes a vector of K real numbers as input and -then (e^x - e^(-x))/(e^x + e^(-x)). After through tanh, the -element of the vector mostly -1 between 1. - -Script inspired from its corresponding Wikipedia article -https://en.wikipedia.org/wiki/Activation_function -""" - -import numpy as np - - -def tangent_hyperbolic(vector: np.ndarray) -> np.ndarray: - """ - Implements the tanh function - - Parameters: - vector: np.ndarray - - Returns: - tanh (np.array): The input numpy array after applying tanh. - - mathematically (e^x - e^(-x))/(e^x + e^(-x)) can be written as (2/(1+e^(-2x))-1 - - Examples: - >>> tangent_hyperbolic(np.array([1,5,6,-0.67])) - array([ 0.76159416, 0.9999092 , 0.99998771, -0.58497988]) - - >>> tangent_hyperbolic(np.array([8,10,2,-0.98,13])) - array([ 0.99999977, 1. , 0.96402758, -0.7530659 , 1. ]) - - """ - - return (2 / (1 + np.exp(-2 * vector))) - 1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/test_prime_check.py b/maths/test_prime_check.py deleted file mode 100644 index 3ea3b2f1f88b..000000000000 --- a/maths/test_prime_check.py +++ /dev/null @@ -1,8 +0,0 @@ -""" -Minimalist file that allows pytest to find and run the Test unittest. For details, see: -https://doc.pytest.org/en/latest/goodpractices.html#conventions-for-python-test-discovery -""" - -from .prime_check import Test - -Test() diff --git a/maths/three_sum.py b/maths/three_sum.py deleted file mode 100644 index 09956f8415a0..000000000000 --- a/maths/three_sum.py +++ /dev/null @@ -1,47 +0,0 @@ -""" -https://en.wikipedia.org/wiki/3SUM -""" - - -def three_sum(nums: list[int]) -> list[list[int]]: - """ - Find all unique triplets in a sorted array of integers that sum up to zero. - - Args: - nums: A sorted list of integers. - - Returns: - A list of lists containing unique triplets that sum up to zero. - - >>> three_sum([-1, 0, 1, 2, -1, -4]) - [[-1, -1, 2], [-1, 0, 1]] - >>> three_sum([1, 2, 3, 4]) - [] - """ - nums.sort() - ans = [] - for i in range(len(nums) - 2): - if i == 0 or (nums[i] != nums[i - 1]): - low, high, c = i + 1, len(nums) - 1, 0 - nums[i] - while low < high: - if nums[low] + nums[high] == c: - ans.append([nums[i], nums[low], nums[high]]) - - while low < high and nums[low] == nums[low + 1]: - low += 1 - while low < high and nums[high] == nums[high - 1]: - high -= 1 - - low += 1 - high -= 1 - elif nums[low] + nums[high] < c: - low += 1 - else: - high -= 1 - return ans - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/trapezoidal_rule.py b/maths/trapezoidal_rule.py deleted file mode 100644 index 9a4ddc8af66b..000000000000 --- a/maths/trapezoidal_rule.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -Numerical integration or quadrature for a smooth function f with known values at x_i - -This method is the classical approach of suming 'Equally Spaced Abscissas' - -method 1: -"extended trapezoidal rule" - -""" - - -def method_1(boundary, steps): - # "extended trapezoidal rule" - # int(f) = dx/2 * (f1 + 2f2 + ... + fn) - h = (boundary[1] - boundary[0]) / steps - a = boundary[0] - b = boundary[1] - x_i = make_points(a, b, h) - y = 0.0 - y += (h / 2.0) * f(a) - for i in x_i: - # print(i) - y += h * f(i) - y += (h / 2.0) * f(b) - return y - - -def make_points(a, b, h): - x = a + h - while x < (b - h): - yield x - x = x + h - - -def f(x): # enter your function here - y = (x - 0) * (x - 0) - return y - - -def main(): - a = 0.0 # Lower bound of integration - b = 1.0 # Upper bound of integration - steps = 10.0 # define number of steps or resolution - boundary = [a, b] # define boundary of integration - y = method_1(boundary, steps) - print(f"y = {y}") - - -if __name__ == "__main__": - main() diff --git a/maths/triplet_sum.py b/maths/triplet_sum.py deleted file mode 100644 index e74f67daad47..000000000000 --- a/maths/triplet_sum.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -Given an array of integers and another integer target, -we are required to find a triplet from the array such that it's sum is equal to -the target. -""" - -from __future__ import annotations - -from itertools import permutations -from random import randint -from timeit import repeat - - -def make_dataset() -> tuple[list[int], int]: - arr = [randint(-1000, 1000) for i in range(10)] - r = randint(-5000, 5000) - return (arr, r) - - -dataset = make_dataset() - - -def triplet_sum1(arr: list[int], target: int) -> tuple[int, ...]: - """ - Returns a triplet in the array with sum equal to target, - else (0, 0, 0). - >>> triplet_sum1([13, 29, 7, 23, 5], 35) - (5, 7, 23) - >>> triplet_sum1([37, 9, 19, 50, 44], 65) - (9, 19, 37) - >>> arr = [6, 47, 27, 1, 15] - >>> target = 11 - >>> triplet_sum1(arr, target) - (0, 0, 0) - """ - for triplet in permutations(arr, 3): - if sum(triplet) == target: - return tuple(sorted(triplet)) - return (0, 0, 0) - - -def triplet_sum2(arr: list[int], target: int) -> tuple[int, int, int]: - """ - Returns a triplet in the array with sum equal to target, - else (0, 0, 0). - >>> triplet_sum2([13, 29, 7, 23, 5], 35) - (5, 7, 23) - >>> triplet_sum2([37, 9, 19, 50, 44], 65) - (9, 19, 37) - >>> arr = [6, 47, 27, 1, 15] - >>> target = 11 - >>> triplet_sum2(arr, target) - (0, 0, 0) - """ - arr.sort() - n = len(arr) - for i in range(n - 1): - left, right = i + 1, n - 1 - while left < right: - if arr[i] + arr[left] + arr[right] == target: - return (arr[i], arr[left], arr[right]) - elif arr[i] + arr[left] + arr[right] < target: - left += 1 - elif arr[i] + arr[left] + arr[right] > target: - right -= 1 - return (0, 0, 0) - - -def solution_times() -> tuple[float, float]: - setup_code = """ -from __main__ import dataset, triplet_sum1, triplet_sum2 -""" - test_code1 = """ -triplet_sum1(*dataset) -""" - test_code2 = """ -triplet_sum2(*dataset) -""" - times1 = repeat(setup=setup_code, stmt=test_code1, repeat=5, number=10000) - times2 = repeat(setup=setup_code, stmt=test_code2, repeat=5, number=10000) - return (min(times1), min(times2)) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - times = solution_times() - print(f"The time for naive implementation is {times[0]}.") - print(f"The time for optimized implementation is {times[1]}.") diff --git a/maths/twin_prime.py b/maths/twin_prime.py deleted file mode 100644 index 912b10b366c0..000000000000 --- a/maths/twin_prime.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -== Twin Prime == -A number n+2 is said to be a Twin prime of number n if -both n and n+2 are prime. - -Examples of Twin pairs: (3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), ... -https://en.wikipedia.org/wiki/Twin_prime -""" - -# Author : Akshay Dubey (https://github.com/itsAkshayDubey) -from maths.prime_check import is_prime - - -def twin_prime(number: int) -> int: - """ - # doctest: +NORMALIZE_WHITESPACE - This functions takes an integer number as input. - returns n+2 if n and n+2 are prime numbers and -1 otherwise. - >>> twin_prime(3) - 5 - >>> twin_prime(4) - -1 - >>> twin_prime(5) - 7 - >>> twin_prime(17) - 19 - >>> twin_prime(0) - -1 - >>> twin_prime(6.0) - Traceback (most recent call last): - ... - TypeError: Input value of [number=6.0] must be an integer - """ - if not isinstance(number, int): - msg = f"Input value of [number={number}] must be an integer" - raise TypeError(msg) - if is_prime(number) and is_prime(number + 2): - return number + 2 - else: - return -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/maths/two_pointer.py b/maths/two_pointer.py deleted file mode 100644 index 8a6d8eb7aff0..000000000000 --- a/maths/two_pointer.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Given a sorted array of integers, return indices of the two numbers such -that they add up to a specific target using the two pointers technique. - -You may assume that each input would have exactly one solution, and you -may not use the same element twice. - -This is an alternative solution of the two-sum problem, which uses a -map to solve the problem. Hence can not solve the issue if there is a -constraint not use the same index twice. [1] - -Example: -Given nums = [2, 7, 11, 15], target = 9, - -Because nums[0] + nums[1] = 2 + 7 = 9, -return [0, 1]. - -[1]: https://github.com/TheAlgorithms/Python/blob/master/other/two_sum.py -""" - -from __future__ import annotations - - -def two_pointer(nums: list[int], target: int) -> list[int]: - """ - >>> two_pointer([2, 7, 11, 15], 9) - [0, 1] - >>> two_pointer([2, 7, 11, 15], 17) - [0, 3] - >>> two_pointer([2, 7, 11, 15], 18) - [1, 2] - >>> two_pointer([2, 7, 11, 15], 26) - [2, 3] - >>> two_pointer([1, 3, 3], 6) - [1, 2] - >>> two_pointer([2, 7, 11, 15], 8) - [] - >>> two_pointer([3 * i for i in range(10)], 19) - [] - >>> two_pointer([1, 2, 3], 6) - [] - """ - i = 0 - j = len(nums) - 1 - - while i < j: - if nums[i] + nums[j] == target: - return [i, j] - elif nums[i] + nums[j] < target: - i = i + 1 - else: - j = j - 1 - - return [] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{two_pointer([2, 7, 11, 15], 9) = }") diff --git a/maths/two_sum.py b/maths/two_sum.py deleted file mode 100644 index 58c933a5078a..000000000000 --- a/maths/two_sum.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Given an array of integers, return indices of the two numbers such that they add up to -a specific target. - -You may assume that each input would have exactly one solution, and you may not use the -same element twice. - -Example: -Given nums = [2, 7, 11, 15], target = 9, - -Because nums[0] + nums[1] = 2 + 7 = 9, -return [0, 1]. -""" - -from __future__ import annotations - - -def two_sum(nums: list[int], target: int) -> list[int]: - """ - >>> two_sum([2, 7, 11, 15], 9) - [0, 1] - >>> two_sum([15, 2, 11, 7], 13) - [1, 2] - >>> two_sum([2, 7, 11, 15], 17) - [0, 3] - >>> two_sum([7, 15, 11, 2], 18) - [0, 2] - >>> two_sum([2, 7, 11, 15], 26) - [2, 3] - >>> two_sum([2, 7, 11, 15], 8) - [] - >>> two_sum([3 * i for i in range(10)], 19) - [] - """ - chk_map: dict[int, int] = {} - for index, val in enumerate(nums): - compl = target - val - if compl in chk_map: - return [chk_map[compl], index] - chk_map[val] = index - return [] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{two_sum([2, 7, 11, 15], 9) = }") diff --git a/maths/volume.py b/maths/volume.py deleted file mode 100644 index 33be9bdd131a..000000000000 --- a/maths/volume.py +++ /dev/null @@ -1,526 +0,0 @@ -""" -Find the volume of various shapes. -* https://en.wikipedia.org/wiki/Volume -* https://en.wikipedia.org/wiki/Spherical_cap -""" - -from __future__ import annotations - -from math import pi, pow - - -def vol_cube(side_length: float) -> float: - """ - Calculate the Volume of a Cube. - >>> vol_cube(1) - 1.0 - >>> vol_cube(3) - 27.0 - >>> vol_cube(0) - 0.0 - >>> vol_cube(1.6) - 4.096000000000001 - >>> vol_cube(-1) - Traceback (most recent call last): - ... - ValueError: vol_cube() only accepts non-negative values - """ - if side_length < 0: - raise ValueError("vol_cube() only accepts non-negative values") - return pow(side_length, 3) - - -def vol_spherical_cap(height: float, radius: float) -> float: - """ - Calculate the volume of the spherical cap. - >>> vol_spherical_cap(1, 2) - 5.235987755982988 - >>> vol_spherical_cap(1.6, 2.6) - 16.621119532592402 - >>> vol_spherical_cap(0, 0) - 0.0 - >>> vol_spherical_cap(-1, 2) - Traceback (most recent call last): - ... - ValueError: vol_spherical_cap() only accepts non-negative values - >>> vol_spherical_cap(1, -2) - Traceback (most recent call last): - ... - ValueError: vol_spherical_cap() only accepts non-negative values - """ - if height < 0 or radius < 0: - raise ValueError("vol_spherical_cap() only accepts non-negative values") - # Volume is 1/3 pi * height squared * (3 * radius - height) - return 1 / 3 * pi * pow(height, 2) * (3 * radius - height) - - -def vol_spheres_intersect( - radius_1: float, radius_2: float, centers_distance: float -) -> float: - """ - Calculate the volume of the intersection of two spheres. - The intersection is composed by two spherical caps and therefore its volume is the - sum of the volumes of the spherical caps. First, it calculates the heights (h1, h2) - of the spherical caps, then the two volumes and it returns the sum. - The height formulas are - h1 = (radius_1 - radius_2 + centers_distance) - * (radius_1 + radius_2 - centers_distance) - / (2 * centers_distance) - h2 = (radius_2 - radius_1 + centers_distance) - * (radius_2 + radius_1 - centers_distance) - / (2 * centers_distance) - if centers_distance is 0 then it returns the volume of the smallers sphere - :return vol_spherical_cap(h1, radius_2) + vol_spherical_cap(h2, radius_1) - >>> vol_spheres_intersect(2, 2, 1) - 21.205750411731103 - >>> vol_spheres_intersect(2.6, 2.6, 1.6) - 40.71504079052372 - >>> vol_spheres_intersect(0, 0, 0) - 0.0 - >>> vol_spheres_intersect(-2, 2, 1) - Traceback (most recent call last): - ... - ValueError: vol_spheres_intersect() only accepts non-negative values - >>> vol_spheres_intersect(2, -2, 1) - Traceback (most recent call last): - ... - ValueError: vol_spheres_intersect() only accepts non-negative values - >>> vol_spheres_intersect(2, 2, -1) - Traceback (most recent call last): - ... - ValueError: vol_spheres_intersect() only accepts non-negative values - """ - if radius_1 < 0 or radius_2 < 0 or centers_distance < 0: - raise ValueError("vol_spheres_intersect() only accepts non-negative values") - if centers_distance == 0: - return vol_sphere(min(radius_1, radius_2)) - - h1 = ( - (radius_1 - radius_2 + centers_distance) - * (radius_1 + radius_2 - centers_distance) - / (2 * centers_distance) - ) - h2 = ( - (radius_2 - radius_1 + centers_distance) - * (radius_2 + radius_1 - centers_distance) - / (2 * centers_distance) - ) - - return vol_spherical_cap(h1, radius_2) + vol_spherical_cap(h2, radius_1) - - -def vol_spheres_union( - radius_1: float, radius_2: float, centers_distance: float -) -> float: - """ - Calculate the volume of the union of two spheres that possibly intersect. - It is the sum of sphere A and sphere B minus their intersection. - First, it calculates the volumes (v1, v2) of the spheres, - then the volume of the intersection (i) and it returns the sum v1+v2-i. - If centers_distance is 0 then it returns the volume of the larger sphere - :return vol_sphere(radius_1) + vol_sphere(radius_2) - - vol_spheres_intersect(radius_1, radius_2, centers_distance) - - >>> vol_spheres_union(2, 2, 1) - 45.814892864851146 - >>> vol_spheres_union(1.56, 2.2, 1.4) - 48.77802773671288 - >>> vol_spheres_union(0, 2, 1) - Traceback (most recent call last): - ... - ValueError: vol_spheres_union() only accepts non-negative values, non-zero radius - >>> vol_spheres_union('1.56', '2.2', '1.4') - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'str' and 'int' - >>> vol_spheres_union(1, None, 1) - Traceback (most recent call last): - ... - TypeError: '<=' not supported between instances of 'NoneType' and 'int' - """ - - if radius_1 <= 0 or radius_2 <= 0 or centers_distance < 0: - raise ValueError( - "vol_spheres_union() only accepts non-negative values, non-zero radius" - ) - - if centers_distance == 0: - return vol_sphere(max(radius_1, radius_2)) - - return ( - vol_sphere(radius_1) - + vol_sphere(radius_2) - - vol_spheres_intersect(radius_1, radius_2, centers_distance) - ) - - -def vol_cuboid(width: float, height: float, length: float) -> float: - """ - Calculate the Volume of a Cuboid. - :return multiple of width, length and height - >>> vol_cuboid(1, 1, 1) - 1.0 - >>> vol_cuboid(1, 2, 3) - 6.0 - >>> vol_cuboid(1.6, 2.6, 3.6) - 14.976 - >>> vol_cuboid(0, 0, 0) - 0.0 - >>> vol_cuboid(-1, 2, 3) - Traceback (most recent call last): - ... - ValueError: vol_cuboid() only accepts non-negative values - >>> vol_cuboid(1, -2, 3) - Traceback (most recent call last): - ... - ValueError: vol_cuboid() only accepts non-negative values - >>> vol_cuboid(1, 2, -3) - Traceback (most recent call last): - ... - ValueError: vol_cuboid() only accepts non-negative values - """ - if width < 0 or height < 0 or length < 0: - raise ValueError("vol_cuboid() only accepts non-negative values") - return float(width * height * length) - - -def vol_cone(area_of_base: float, height: float) -> float: - """ - Calculate the Volume of a Cone. - Wikipedia reference: https://en.wikipedia.org/wiki/Cone - :return (1/3) * area_of_base * height - >>> vol_cone(10, 3) - 10.0 - >>> vol_cone(1, 1) - 0.3333333333333333 - >>> vol_cone(1.6, 1.6) - 0.8533333333333335 - >>> vol_cone(0, 0) - 0.0 - >>> vol_cone(-1, 1) - Traceback (most recent call last): - ... - ValueError: vol_cone() only accepts non-negative values - >>> vol_cone(1, -1) - Traceback (most recent call last): - ... - ValueError: vol_cone() only accepts non-negative values - """ - if height < 0 or area_of_base < 0: - raise ValueError("vol_cone() only accepts non-negative values") - return area_of_base * height / 3.0 - - -def vol_right_circ_cone(radius: float, height: float) -> float: - """ - Calculate the Volume of a Right Circular Cone. - Wikipedia reference: https://en.wikipedia.org/wiki/Cone - :return (1/3) * pi * radius^2 * height - >>> vol_right_circ_cone(2, 3) - 12.566370614359172 - >>> vol_right_circ_cone(0, 0) - 0.0 - >>> vol_right_circ_cone(1.6, 1.6) - 4.289321169701265 - >>> vol_right_circ_cone(-1, 1) - Traceback (most recent call last): - ... - ValueError: vol_right_circ_cone() only accepts non-negative values - >>> vol_right_circ_cone(1, -1) - Traceback (most recent call last): - ... - ValueError: vol_right_circ_cone() only accepts non-negative values - """ - if height < 0 or radius < 0: - raise ValueError("vol_right_circ_cone() only accepts non-negative values") - return pi * pow(radius, 2) * height / 3.0 - - -def vol_prism(area_of_base: float, height: float) -> float: - """ - Calculate the Volume of a Prism. - Wikipedia reference: https://en.wikipedia.org/wiki/Prism_(geometry) - :return V = Bh - >>> vol_prism(10, 2) - 20.0 - >>> vol_prism(11, 1) - 11.0 - >>> vol_prism(1.6, 1.6) - 2.5600000000000005 - >>> vol_prism(0, 0) - 0.0 - >>> vol_prism(-1, 1) - Traceback (most recent call last): - ... - ValueError: vol_prism() only accepts non-negative values - >>> vol_prism(1, -1) - Traceback (most recent call last): - ... - ValueError: vol_prism() only accepts non-negative values - """ - if height < 0 or area_of_base < 0: - raise ValueError("vol_prism() only accepts non-negative values") - return float(area_of_base * height) - - -def vol_pyramid(area_of_base: float, height: float) -> float: - """ - Calculate the Volume of a Pyramid. - Wikipedia reference: https://en.wikipedia.org/wiki/Pyramid_(geometry) - :return (1/3) * Bh - >>> vol_pyramid(10, 3) - 10.0 - >>> vol_pyramid(1.5, 3) - 1.5 - >>> vol_pyramid(1.6, 1.6) - 0.8533333333333335 - >>> vol_pyramid(0, 0) - 0.0 - >>> vol_pyramid(-1, 1) - Traceback (most recent call last): - ... - ValueError: vol_pyramid() only accepts non-negative values - >>> vol_pyramid(1, -1) - Traceback (most recent call last): - ... - ValueError: vol_pyramid() only accepts non-negative values - """ - if height < 0 or area_of_base < 0: - raise ValueError("vol_pyramid() only accepts non-negative values") - return area_of_base * height / 3.0 - - -def vol_sphere(radius: float) -> float: - """ - Calculate the Volume of a Sphere. - Wikipedia reference: https://en.wikipedia.org/wiki/Sphere - :return (4/3) * pi * r^3 - >>> vol_sphere(5) - 523.5987755982989 - >>> vol_sphere(1) - 4.1887902047863905 - >>> vol_sphere(1.6) - 17.15728467880506 - >>> vol_sphere(0) - 0.0 - >>> vol_sphere(-1) - Traceback (most recent call last): - ... - ValueError: vol_sphere() only accepts non-negative values - """ - if radius < 0: - raise ValueError("vol_sphere() only accepts non-negative values") - # Volume is 4/3 * pi * radius cubed - return 4 / 3 * pi * pow(radius, 3) - - -def vol_hemisphere(radius: float) -> float: - """Calculate the volume of a hemisphere - Wikipedia reference: https://en.wikipedia.org/wiki/Hemisphere - Other references: https://www.cuemath.com/geometry/hemisphere - :return 2/3 * pi * radius^3 - >>> vol_hemisphere(1) - 2.0943951023931953 - >>> vol_hemisphere(7) - 718.377520120866 - >>> vol_hemisphere(1.6) - 8.57864233940253 - >>> vol_hemisphere(0) - 0.0 - >>> vol_hemisphere(-1) - Traceback (most recent call last): - ... - ValueError: vol_hemisphere() only accepts non-negative values - """ - if radius < 0: - raise ValueError("vol_hemisphere() only accepts non-negative values") - # Volume is radius cubed * pi * 2/3 - return pow(radius, 3) * pi * 2 / 3 - - -def vol_circular_cylinder(radius: float, height: float) -> float: - """Calculate the Volume of a Circular Cylinder. - Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder - :return pi * radius^2 * height - >>> vol_circular_cylinder(1, 1) - 3.141592653589793 - >>> vol_circular_cylinder(4, 3) - 150.79644737231007 - >>> vol_circular_cylinder(1.6, 1.6) - 12.867963509103795 - >>> vol_circular_cylinder(0, 0) - 0.0 - >>> vol_circular_cylinder(-1, 1) - Traceback (most recent call last): - ... - ValueError: vol_circular_cylinder() only accepts non-negative values - >>> vol_circular_cylinder(1, -1) - Traceback (most recent call last): - ... - ValueError: vol_circular_cylinder() only accepts non-negative values - """ - if height < 0 or radius < 0: - raise ValueError("vol_circular_cylinder() only accepts non-negative values") - # Volume is radius squared * height * pi - return pow(radius, 2) * height * pi - - -def vol_hollow_circular_cylinder( - inner_radius: float, outer_radius: float, height: float -) -> float: - """Calculate the Volume of a Hollow Circular Cylinder. - >>> vol_hollow_circular_cylinder(1, 2, 3) - 28.274333882308138 - >>> vol_hollow_circular_cylinder(1.6, 2.6, 3.6) - 47.50088092227767 - >>> vol_hollow_circular_cylinder(-1, 2, 3) - Traceback (most recent call last): - ... - ValueError: vol_hollow_circular_cylinder() only accepts non-negative values - >>> vol_hollow_circular_cylinder(1, -2, 3) - Traceback (most recent call last): - ... - ValueError: vol_hollow_circular_cylinder() only accepts non-negative values - >>> vol_hollow_circular_cylinder(1, 2, -3) - Traceback (most recent call last): - ... - ValueError: vol_hollow_circular_cylinder() only accepts non-negative values - >>> vol_hollow_circular_cylinder(2, 1, 3) - Traceback (most recent call last): - ... - ValueError: outer_radius must be greater than inner_radius - >>> vol_hollow_circular_cylinder(0, 0, 0) - Traceback (most recent call last): - ... - ValueError: outer_radius must be greater than inner_radius - """ - # Volume - (outer_radius squared - inner_radius squared) * pi * height - if inner_radius < 0 or outer_radius < 0 or height < 0: - raise ValueError( - "vol_hollow_circular_cylinder() only accepts non-negative values" - ) - if outer_radius <= inner_radius: - raise ValueError("outer_radius must be greater than inner_radius") - return pi * (pow(outer_radius, 2) - pow(inner_radius, 2)) * height - - -def vol_conical_frustum(height: float, radius_1: float, radius_2: float) -> float: - """Calculate the Volume of a Conical Frustum. - Wikipedia reference: https://en.wikipedia.org/wiki/Frustum - - >>> vol_conical_frustum(45, 7, 28) - 48490.482608158454 - >>> vol_conical_frustum(1, 1, 2) - 7.330382858376184 - >>> vol_conical_frustum(1.6, 2.6, 3.6) - 48.7240076620753 - >>> vol_conical_frustum(0, 0, 0) - 0.0 - >>> vol_conical_frustum(-2, 2, 1) - Traceback (most recent call last): - ... - ValueError: vol_conical_frustum() only accepts non-negative values - >>> vol_conical_frustum(2, -2, 1) - Traceback (most recent call last): - ... - ValueError: vol_conical_frustum() only accepts non-negative values - >>> vol_conical_frustum(2, 2, -1) - Traceback (most recent call last): - ... - ValueError: vol_conical_frustum() only accepts non-negative values - """ - # Volume is 1/3 * pi * height * - # (radius_1 squared + radius_2 squared + radius_1 * radius_2) - if radius_1 < 0 or radius_2 < 0 or height < 0: - raise ValueError("vol_conical_frustum() only accepts non-negative values") - return ( - 1 - / 3 - * pi - * height - * (pow(radius_1, 2) + pow(radius_2, 2) + radius_1 * radius_2) - ) - - -def vol_torus(torus_radius: float, tube_radius: float) -> float: - """Calculate the Volume of a Torus. - Wikipedia reference: https://en.wikipedia.org/wiki/Torus - :return 2pi^2 * torus_radius * tube_radius^2 - >>> vol_torus(1, 1) - 19.739208802178716 - >>> vol_torus(4, 3) - 710.6115168784338 - >>> vol_torus(3, 4) - 947.4820225045784 - >>> vol_torus(1.6, 1.6) - 80.85179925372404 - >>> vol_torus(0, 0) - 0.0 - >>> vol_torus(-1, 1) - Traceback (most recent call last): - ... - ValueError: vol_torus() only accepts non-negative values - >>> vol_torus(1, -1) - Traceback (most recent call last): - ... - ValueError: vol_torus() only accepts non-negative values - """ - if torus_radius < 0 or tube_radius < 0: - raise ValueError("vol_torus() only accepts non-negative values") - return 2 * pow(pi, 2) * torus_radius * pow(tube_radius, 2) - - -def vol_icosahedron(tri_side: float) -> float: - """Calculate the Volume of an Icosahedron. - Wikipedia reference: https://en.wikipedia.org/wiki/Regular_icosahedron - - >>> from math import isclose - >>> isclose(vol_icosahedron(2.5), 34.088984228514256) - True - >>> isclose(vol_icosahedron(10), 2181.694990624912374) - True - >>> isclose(vol_icosahedron(5), 272.711873828114047) - True - >>> isclose(vol_icosahedron(3.49), 92.740688412033628) - True - >>> vol_icosahedron(0) - 0.0 - >>> vol_icosahedron(-1) - Traceback (most recent call last): - ... - ValueError: vol_icosahedron() only accepts non-negative values - >>> vol_icosahedron(-0.2) - Traceback (most recent call last): - ... - ValueError: vol_icosahedron() only accepts non-negative values - """ - if tri_side < 0: - raise ValueError("vol_icosahedron() only accepts non-negative values") - return tri_side**3 * (3 + 5**0.5) * 5 / 12 - - -def main(): - """Print the Results of Various Volume Calculations.""" - print("Volumes:") - print(f"Cube: {vol_cube(2) = }") # = 8 - print(f"Cuboid: {vol_cuboid(2, 2, 2) = }") # = 8 - print(f"Cone: {vol_cone(2, 2) = }") # ~= 1.33 - print(f"Right Circular Cone: {vol_right_circ_cone(2, 2) = }") # ~= 8.38 - print(f"Prism: {vol_prism(2, 2) = }") # = 4 - print(f"Pyramid: {vol_pyramid(2, 2) = }") # ~= 1.33 - print(f"Sphere: {vol_sphere(2) = }") # ~= 33.5 - print(f"Hemisphere: {vol_hemisphere(2) = }") # ~= 16.75 - print(f"Circular Cylinder: {vol_circular_cylinder(2, 2) = }") # ~= 25.1 - print(f"Torus: {vol_torus(2, 2) = }") # ~= 157.9 - print(f"Conical Frustum: {vol_conical_frustum(2, 2, 4) = }") # ~= 58.6 - print(f"Spherical cap: {vol_spherical_cap(1, 2) = }") # ~= 5.24 - print(f"Spheres intersetion: {vol_spheres_intersect(2, 2, 1) = }") # ~= 21.21 - print(f"Spheres union: {vol_spheres_union(2, 2, 1) = }") # ~= 45.81 - print( - f"Hollow Circular Cylinder: {vol_hollow_circular_cylinder(1, 2, 3) = }" - ) # ~= 28.3 - print(f"Icosahedron: {vol_icosahedron(2.5) = }") # ~=34.09 - - -if __name__ == "__main__": - main() diff --git a/maths/zellers_congruence.py b/maths/zellers_congruence.py deleted file mode 100644 index 483fb000f86b..000000000000 --- a/maths/zellers_congruence.py +++ /dev/null @@ -1,157 +0,0 @@ -import argparse -import datetime - - -def zeller(date_input: str) -> str: - """ - Zellers Congruence Algorithm - Find the day of the week for nearly any Gregorian or Julian calendar date - - >>> zeller('01-31-2010') - 'Your date 01-31-2010, is a Sunday!' - - Validate out of range month - >>> zeller('13-31-2010') - Traceback (most recent call last): - ... - ValueError: Month must be between 1 - 12 - >>> zeller('.2-31-2010') - Traceback (most recent call last): - ... - ValueError: invalid literal for int() with base 10: '.2' - - Validate out of range date: - >>> zeller('01-33-2010') - Traceback (most recent call last): - ... - ValueError: Date must be between 1 - 31 - >>> zeller('01-.4-2010') - Traceback (most recent call last): - ... - ValueError: invalid literal for int() with base 10: '.4' - - Validate second separator: - >>> zeller('01-31*2010') - Traceback (most recent call last): - ... - ValueError: Date separator must be '-' or '/' - - Validate first separator: - >>> zeller('01^31-2010') - Traceback (most recent call last): - ... - ValueError: Date separator must be '-' or '/' - - Validate out of range year: - >>> zeller('01-31-8999') - Traceback (most recent call last): - ... - ValueError: Year out of range. There has to be some sort of limit...right? - - Test null input: - >>> zeller() - Traceback (most recent call last): - ... - TypeError: zeller() missing 1 required positional argument: 'date_input' - - Test length of date_input: - >>> zeller('') - Traceback (most recent call last): - ... - ValueError: Must be 10 characters long - >>> zeller('01-31-19082939') - Traceback (most recent call last): - ... - ValueError: Must be 10 characters long""" - - # Days of the week for response - days = { - "0": "Sunday", - "1": "Monday", - "2": "Tuesday", - "3": "Wednesday", - "4": "Thursday", - "5": "Friday", - "6": "Saturday", - } - - convert_datetime_days = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 0} - - # Validate - if not 0 < len(date_input) < 11: - raise ValueError("Must be 10 characters long") - - # Get month - m: int = int(date_input[0] + date_input[1]) - # Validate - if not 0 < m < 13: - raise ValueError("Month must be between 1 - 12") - - sep_1: str = date_input[2] - # Validate - if sep_1 not in ["-", "/"]: - raise ValueError("Date separator must be '-' or '/'") - - # Get day - d: int = int(date_input[3] + date_input[4]) - # Validate - if not 0 < d < 32: - raise ValueError("Date must be between 1 - 31") - - # Get second separator - sep_2: str = date_input[5] - # Validate - if sep_2 not in ["-", "/"]: - raise ValueError("Date separator must be '-' or '/'") - - # Get year - y: int = int(date_input[6] + date_input[7] + date_input[8] + date_input[9]) - # Arbitrary year range - if not 45 < y < 8500: - raise ValueError( - "Year out of range. There has to be some sort of limit...right?" - ) - - # Get datetime obj for validation - dt_ck = datetime.date(int(y), int(m), int(d)) - - # Start math - if m <= 2: - y = y - 1 - m = m + 12 - # maths var - c: int = int(str(y)[:2]) - k: int = int(str(y)[2:]) - t: int = int(2.6 * m - 5.39) - u: int = int(c / 4) - v: int = int(k / 4) - x: int = int(d + k) - z: int = int(t + u + v + x) - w: int = int(z - (2 * c)) - f: int = round(w % 7) - # End math - - # Validate math - if f != convert_datetime_days[dt_ck.weekday()]: - raise AssertionError("The date was evaluated incorrectly. Contact developer.") - - # Response - response: str = f"Your date {date_input}, is a {days[str(f)]}!" - return response - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - parser = argparse.ArgumentParser( - description=( - "Find out what day of the week nearly any date is or was. Enter " - "date as a string in the mm-dd-yyyy or mm/dd/yyyy format" - ) - ) - parser.add_argument( - "date_input", type=str, help="Date as a string (mm-dd-yyyy or mm/dd/yyyy)" - ) - args = parser.parse_args() - zeller(args.date_input) diff --git a/matrix/__init__.py b/matrix/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/matrix/binary_search_matrix.py b/matrix/binary_search_matrix.py deleted file mode 100644 index 6f203b7a3484..000000000000 --- a/matrix/binary_search_matrix.py +++ /dev/null @@ -1,57 +0,0 @@ -def binary_search(array: list, lower_bound: int, upper_bound: int, value: int) -> int: - """ - This function carries out Binary search on a 1d array and - return -1 if it do not exist - array: A 1d sorted array - value : the value meant to be searched - >>> matrix = [1, 4, 7, 11, 15] - >>> binary_search(matrix, 0, len(matrix) - 1, 1) - 0 - >>> binary_search(matrix, 0, len(matrix) - 1, 23) - -1 - """ - - r = int((lower_bound + upper_bound) // 2) - if array[r] == value: - return r - if lower_bound >= upper_bound: - return -1 - if array[r] < value: - return binary_search(array, r + 1, upper_bound, value) - else: - return binary_search(array, lower_bound, r - 1, value) - - -def mat_bin_search(value: int, matrix: list) -> list: - """ - This function loops over a 2d matrix and calls binarySearch on - the selected 1d array and returns [-1, -1] is it do not exist - value : value meant to be searched - matrix = a sorted 2d matrix - >>> matrix = [[1, 4, 7, 11, 15], - ... [2, 5, 8, 12, 19], - ... [3, 6, 9, 16, 22], - ... [10, 13, 14, 17, 24], - ... [18, 21, 23, 26, 30]] - >>> target = 1 - >>> mat_bin_search(target, matrix) - [0, 0] - >>> target = 34 - >>> mat_bin_search(target, matrix) - [-1, -1] - """ - index = 0 - if matrix[index][0] == value: - return [index, 0] - while index < len(matrix) and matrix[index][0] < value: - r = binary_search(matrix[index], 0, len(matrix[index]) - 1, value) - if r != -1: - return [index, r] - index += 1 - return [-1, -1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/matrix/count_islands_in_matrix.py b/matrix/count_islands_in_matrix.py deleted file mode 100644 index 64c595e8499d..000000000000 --- a/matrix/count_islands_in_matrix.py +++ /dev/null @@ -1,37 +0,0 @@ -# An island in matrix is a group of linked areas, all having the same value. -# This code counts number of islands in a given matrix, with including diagonal -# connections. - - -class Matrix: # Public class to implement a graph - def __init__(self, row: int, col: int, graph: list[list[bool]]) -> None: - self.ROW = row - self.COL = col - self.graph = graph - - def is_safe(self, i: int, j: int, visited: list[list[bool]]) -> bool: - return ( - 0 <= i < self.ROW - and 0 <= j < self.COL - and not visited[i][j] - and self.graph[i][j] - ) - - def diffs(self, i: int, j: int, visited: list[list[bool]]) -> None: - # Checking all 8 elements surrounding nth element - row_nbr = [-1, -1, -1, 0, 0, 1, 1, 1] # Coordinate order - col_nbr = [-1, 0, 1, -1, 1, -1, 0, 1] - visited[i][j] = True # Make those cells visited - for k in range(8): - if self.is_safe(i + row_nbr[k], j + col_nbr[k], visited): - self.diffs(i + row_nbr[k], j + col_nbr[k], visited) - - def count_islands(self) -> int: # And finally, count all islands. - visited = [[False for j in range(self.COL)] for i in range(self.ROW)] - count = 0 - for i in range(self.ROW): - for j in range(self.COL): - if visited[i][j] is False and self.graph[i][j] == 1: - self.diffs(i, j, visited) - count += 1 - return count diff --git a/matrix/count_negative_numbers_in_sorted_matrix.py b/matrix/count_negative_numbers_in_sorted_matrix.py deleted file mode 100644 index 2799ff3b45fe..000000000000 --- a/matrix/count_negative_numbers_in_sorted_matrix.py +++ /dev/null @@ -1,151 +0,0 @@ -""" -Given an matrix of numbers in which all rows and all columns are sorted in decreasing -order, return the number of negative numbers in grid. - -Reference: https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix -""" - - -def generate_large_matrix() -> list[list[int]]: - """ - >>> generate_large_matrix() # doctest: +ELLIPSIS - [[1000, ..., -999], [999, ..., -1001], ..., [2, ..., -1998]] - """ - return [list(range(1000 - i, -1000 - i, -1)) for i in range(1000)] - - -grid = generate_large_matrix() -test_grids = ( - [[4, 3, 2, -1], [3, 2, 1, -1], [1, 1, -1, -2], [-1, -1, -2, -3]], - [[3, 2], [1, 0]], - [[7, 7, 6]], - [[7, 7, 6], [-1, -2, -3]], - grid, -) - - -def validate_grid(grid: list[list[int]]) -> None: - """ - Validate that the rows and columns of the grid is sorted in decreasing order. - >>> for grid in test_grids: - ... validate_grid(grid) - """ - assert all(row == sorted(row, reverse=True) for row in grid) - assert all(list(col) == sorted(col, reverse=True) for col in zip(*grid)) - - -def find_negative_index(array: list[int]) -> int: - """ - Find the smallest negative index - - >>> find_negative_index([0,0,0,0]) - 4 - >>> find_negative_index([4,3,2,-1]) - 3 - >>> find_negative_index([1,0,-1,-10]) - 2 - >>> find_negative_index([0,0,0,-1]) - 3 - >>> find_negative_index([11,8,7,-3,-5,-9]) - 3 - >>> find_negative_index([-1,-1,-2,-3]) - 0 - >>> find_negative_index([5,1,0]) - 3 - >>> find_negative_index([-5,-5,-5]) - 0 - >>> find_negative_index([0]) - 1 - >>> find_negative_index([]) - 0 - """ - left = 0 - right = len(array) - 1 - - # Edge cases such as no values or all numbers are negative. - if not array or array[0] < 0: - return 0 - - while right + 1 > left: - mid = (left + right) // 2 - num = array[mid] - - # Num must be negative and the index must be greater than or equal to 0. - if num < 0 and array[mid - 1] >= 0: - return mid - - if num >= 0: - left = mid + 1 - else: - right = mid - 1 - # No negative numbers so return the last index of the array + 1 which is the length. - return len(array) - - -def count_negatives_binary_search(grid: list[list[int]]) -> int: - """ - An O(m logn) solution that uses binary search in order to find the boundary between - positive and negative numbers - - >>> [count_negatives_binary_search(grid) for grid in test_grids] - [8, 0, 0, 3, 1498500] - """ - total = 0 - bound = len(grid[0]) - - for i in range(len(grid)): - bound = find_negative_index(grid[i][:bound]) - total += bound - return (len(grid) * len(grid[0])) - total - - -def count_negatives_brute_force(grid: list[list[int]]) -> int: - """ - This solution is O(n^2) because it iterates through every column and row. - - >>> [count_negatives_brute_force(grid) for grid in test_grids] - [8, 0, 0, 3, 1498500] - """ - return len([number for row in grid for number in row if number < 0]) - - -def count_negatives_brute_force_with_break(grid: list[list[int]]) -> int: - """ - Similar to the brute force solution above but uses break in order to reduce the - number of iterations. - - >>> [count_negatives_brute_force_with_break(grid) for grid in test_grids] - [8, 0, 0, 3, 1498500] - """ - total = 0 - for row in grid: - for i, number in enumerate(row): - if number < 0: - total += len(row) - i - break - return total - - -def benchmark() -> None: - """Benchmark our functions next to each other""" - from timeit import timeit - - print("Running benchmarks") - setup = ( - "from __main__ import count_negatives_binary_search, " - "count_negatives_brute_force, count_negatives_brute_force_with_break, grid" - ) - for func in ( - "count_negatives_binary_search", # took 0.7727 seconds - "count_negatives_brute_force_with_break", # took 4.6505 seconds - "count_negatives_brute_force", # took 12.8160 seconds - ): - time = timeit(f"{func}(grid=grid)", setup=setup, number=500) - print(f"{func}() took {time:0.4f} seconds") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - benchmark() diff --git a/matrix/count_paths.py b/matrix/count_paths.py deleted file mode 100644 index 4861ad5fd0aa..000000000000 --- a/matrix/count_paths.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Given a grid, where you start from the top left position [0, 0], -you want to find how many paths you can take to get to the bottom right position. - -start here -> 0 0 0 0 - 1 1 0 0 - 0 0 0 1 - 0 1 0 0 <- finish here -how many 'distinct' paths can you take to get to the finish? -Using a recursive depth-first search algorithm below, you are able to -find the number of distinct unique paths (count). - -'*' will demonstrate a path -In the example above, there are two distinct paths: -1. 2. - * * * 0 * * * * - 1 1 * 0 1 1 * * - 0 0 * 1 0 0 * 1 - 0 1 * * 0 1 * * -""" - - -def depth_first_search(grid: list[list[int]], row: int, col: int, visit: set) -> int: - """ - Recursive Backtracking Depth First Search Algorithm - - Starting from top left of a matrix, count the number of - paths that can reach the bottom right of a matrix. - 1 represents a block (inaccessible) - 0 represents a valid space (accessible) - - 0 0 0 0 - 1 1 0 0 - 0 0 0 1 - 0 1 0 0 - >>> grid = [[0, 0, 0, 0], [1, 1, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0]] - >>> depth_first_search(grid, 0, 0, set()) - 2 - - 0 0 0 0 0 - 0 1 1 1 0 - 0 1 1 1 0 - 0 0 0 0 0 - >>> grid = [[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]] - >>> depth_first_search(grid, 0, 0, set()) - 2 - """ - row_length, col_length = len(grid), len(grid[0]) - if ( - min(row, col) < 0 - or row == row_length - or col == col_length - or (row, col) in visit - or grid[row][col] == 1 - ): - return 0 - if row == row_length - 1 and col == col_length - 1: - return 1 - - visit.add((row, col)) - - count = 0 - count += depth_first_search(grid, row + 1, col, visit) - count += depth_first_search(grid, row - 1, col, visit) - count += depth_first_search(grid, row, col + 1, visit) - count += depth_first_search(grid, row, col - 1, visit) - - visit.remove((row, col)) - return count - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/matrix/cramers_rule_2x2.py b/matrix/cramers_rule_2x2.py deleted file mode 100644 index 081035bec002..000000000000 --- a/matrix/cramers_rule_2x2.py +++ /dev/null @@ -1,83 +0,0 @@ -# https://www.chilimath.com/lessons/advanced-algebra/cramers-rule-with-two-variables -# https://en.wikipedia.org/wiki/Cramer%27s_rule - - -def cramers_rule_2x2(equation1: list[int], equation2: list[int]) -> tuple[float, float]: - """ - Solves the system of linear equation in 2 variables. - :param: equation1: list of 3 numbers - :param: equation2: list of 3 numbers - :return: String of result - input format : [a1, b1, d1], [a2, b2, d2] - determinant = [[a1, b1], [a2, b2]] - determinant_x = [[d1, b1], [d2, b2]] - determinant_y = [[a1, d1], [a2, d2]] - - >>> cramers_rule_2x2([2, 3, 0], [5, 1, 0]) - (0.0, 0.0) - >>> cramers_rule_2x2([0, 4, 50], [2, 0, 26]) - (13.0, 12.5) - >>> cramers_rule_2x2([11, 2, 30], [1, 0, 4]) - (4.0, -7.0) - >>> cramers_rule_2x2([4, 7, 1], [1, 2, 0]) - (2.0, -1.0) - - >>> cramers_rule_2x2([1, 2, 3], [2, 4, 6]) - Traceback (most recent call last): - ... - ValueError: Infinite solutions. (Consistent system) - >>> cramers_rule_2x2([1, 2, 3], [2, 4, 7]) - Traceback (most recent call last): - ... - ValueError: No solution. (Inconsistent system) - >>> cramers_rule_2x2([1, 2, 3], [11, 22]) - Traceback (most recent call last): - ... - ValueError: Please enter a valid equation. - >>> cramers_rule_2x2([0, 1, 6], [0, 0, 3]) - Traceback (most recent call last): - ... - ValueError: No solution. (Inconsistent system) - >>> cramers_rule_2x2([0, 0, 6], [0, 0, 3]) - Traceback (most recent call last): - ... - ValueError: Both a & b of two equations can't be zero. - >>> cramers_rule_2x2([1, 2, 3], [1, 2, 3]) - Traceback (most recent call last): - ... - ValueError: Infinite solutions. (Consistent system) - >>> cramers_rule_2x2([0, 4, 50], [0, 3, 99]) - Traceback (most recent call last): - ... - ValueError: No solution. (Inconsistent system) - """ - - # Check if the input is valid - if not len(equation1) == len(equation2) == 3: - raise ValueError("Please enter a valid equation.") - if equation1[0] == equation1[1] == equation2[0] == equation2[1] == 0: - raise ValueError("Both a & b of two equations can't be zero.") - - # Extract the coefficients - a1, b1, c1 = equation1 - a2, b2, c2 = equation2 - - # Calculate the determinants of the matrices - determinant = a1 * b2 - a2 * b1 - determinant_x = c1 * b2 - c2 * b1 - determinant_y = a1 * c2 - a2 * c1 - - # Check if the system of linear equations has a solution (using Cramer's rule) - if determinant == 0: - if determinant_x == determinant_y == 0: - raise ValueError("Infinite solutions. (Consistent system)") - else: - raise ValueError("No solution. (Inconsistent system)") - elif determinant_x == determinant_y == 0: - # Trivial solution (Inconsistent system) - return (0.0, 0.0) - else: - x = determinant_x / determinant - y = determinant_y / determinant - # Non-Trivial Solution (Consistent system) - return (x, y) diff --git a/matrix/inverse_of_matrix.py b/matrix/inverse_of_matrix.py deleted file mode 100644 index e53d90df8253..000000000000 --- a/matrix/inverse_of_matrix.py +++ /dev/null @@ -1,155 +0,0 @@ -from __future__ import annotations - -from decimal import Decimal - -from numpy import array - - -def inverse_of_matrix(matrix: list[list[float]]) -> list[list[float]]: - """ - A matrix multiplied with its inverse gives the identity matrix. - This function finds the inverse of a 2x2 and 3x3 matrix. - If the determinant of a matrix is 0, its inverse does not exist. - - Sources for fixing inaccurate float arithmetic: - https://stackoverflow.com/questions/6563058/how-do-i-use-accurate-float-arithmetic-in-python - https://docs.python.org/3/library/decimal.html - - Doctests for 2x2 - >>> inverse_of_matrix([[2, 5], [2, 0]]) - [[0.0, 0.5], [0.2, -0.2]] - >>> inverse_of_matrix([[2.5, 5], [1, 2]]) - Traceback (most recent call last): - ... - ValueError: This matrix has no inverse. - >>> inverse_of_matrix([[12, -16], [-9, 0]]) - [[0.0, -0.1111111111111111], [-0.0625, -0.08333333333333333]] - >>> inverse_of_matrix([[12, 3], [16, 8]]) - [[0.16666666666666666, -0.0625], [-0.3333333333333333, 0.25]] - >>> inverse_of_matrix([[10, 5], [3, 2.5]]) - [[0.25, -0.5], [-0.3, 1.0]] - - Doctests for 3x3 - >>> inverse_of_matrix([[2, 5, 7], [2, 0, 1], [1, 2, 3]]) - [[2.0, 5.0, -4.0], [1.0, 1.0, -1.0], [-5.0, -12.0, 10.0]] - >>> inverse_of_matrix([[1, 2, 2], [1, 2, 2], [3, 2, -1]]) - Traceback (most recent call last): - ... - ValueError: This matrix has no inverse. - - >>> inverse_of_matrix([[],[]]) - Traceback (most recent call last): - ... - ValueError: Please provide a matrix of size 2x2 or 3x3. - - >>> inverse_of_matrix([[1, 2], [3, 4], [5, 6]]) - Traceback (most recent call last): - ... - ValueError: Please provide a matrix of size 2x2 or 3x3. - - >>> inverse_of_matrix([[1, 2, 1], [0,3, 4]]) - Traceback (most recent call last): - ... - ValueError: Please provide a matrix of size 2x2 or 3x3. - - >>> inverse_of_matrix([[1, 2, 3], [7, 8, 9], [7, 8, 9]]) - Traceback (most recent call last): - ... - ValueError: This matrix has no inverse. - - >>> inverse_of_matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) - [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] - """ - - d = Decimal - - # Check if the provided matrix has 2 rows and 2 columns - # since this implementation only works for 2x2 matrices - if len(matrix) == 2 and len(matrix[0]) == 2 and len(matrix[1]) == 2: - # Calculate the determinant of the matrix - determinant = float( - d(matrix[0][0]) * d(matrix[1][1]) - d(matrix[1][0]) * d(matrix[0][1]) - ) - if determinant == 0: - raise ValueError("This matrix has no inverse.") - - # Creates a copy of the matrix with swapped positions of the elements - swapped_matrix = [[0.0, 0.0], [0.0, 0.0]] - swapped_matrix[0][0], swapped_matrix[1][1] = matrix[1][1], matrix[0][0] - swapped_matrix[1][0], swapped_matrix[0][1] = -matrix[1][0], -matrix[0][1] - - # Calculate the inverse of the matrix - return [ - [(float(d(n)) / determinant) or 0.0 for n in row] for row in swapped_matrix - ] - elif ( - len(matrix) == 3 - and len(matrix[0]) == 3 - and len(matrix[1]) == 3 - and len(matrix[2]) == 3 - ): - # Calculate the determinant of the matrix using Sarrus rule - determinant = float( - ( - (d(matrix[0][0]) * d(matrix[1][1]) * d(matrix[2][2])) - + (d(matrix[0][1]) * d(matrix[1][2]) * d(matrix[2][0])) - + (d(matrix[0][2]) * d(matrix[1][0]) * d(matrix[2][1])) - ) - - ( - (d(matrix[0][2]) * d(matrix[1][1]) * d(matrix[2][0])) - + (d(matrix[0][1]) * d(matrix[1][0]) * d(matrix[2][2])) - + (d(matrix[0][0]) * d(matrix[1][2]) * d(matrix[2][1])) - ) - ) - if determinant == 0: - raise ValueError("This matrix has no inverse.") - - # Creating cofactor matrix - cofactor_matrix = [ - [d(0.0), d(0.0), d(0.0)], - [d(0.0), d(0.0), d(0.0)], - [d(0.0), d(0.0), d(0.0)], - ] - cofactor_matrix[0][0] = (d(matrix[1][1]) * d(matrix[2][2])) - ( - d(matrix[1][2]) * d(matrix[2][1]) - ) - cofactor_matrix[0][1] = -( - (d(matrix[1][0]) * d(matrix[2][2])) - (d(matrix[1][2]) * d(matrix[2][0])) - ) - cofactor_matrix[0][2] = (d(matrix[1][0]) * d(matrix[2][1])) - ( - d(matrix[1][1]) * d(matrix[2][0]) - ) - cofactor_matrix[1][0] = -( - (d(matrix[0][1]) * d(matrix[2][2])) - (d(matrix[0][2]) * d(matrix[2][1])) - ) - cofactor_matrix[1][1] = (d(matrix[0][0]) * d(matrix[2][2])) - ( - d(matrix[0][2]) * d(matrix[2][0]) - ) - cofactor_matrix[1][2] = -( - (d(matrix[0][0]) * d(matrix[2][1])) - (d(matrix[0][1]) * d(matrix[2][0])) - ) - cofactor_matrix[2][0] = (d(matrix[0][1]) * d(matrix[1][2])) - ( - d(matrix[0][2]) * d(matrix[1][1]) - ) - cofactor_matrix[2][1] = -( - (d(matrix[0][0]) * d(matrix[1][2])) - (d(matrix[0][2]) * d(matrix[1][0])) - ) - cofactor_matrix[2][2] = (d(matrix[0][0]) * d(matrix[1][1])) - ( - d(matrix[0][1]) * d(matrix[1][0]) - ) - - # Transpose the cofactor matrix (Adjoint matrix) - adjoint_matrix = array(cofactor_matrix) - for i in range(3): - for j in range(3): - adjoint_matrix[i][j] = cofactor_matrix[j][i] - - # Inverse of the matrix using the formula (1/determinant) * adjoint matrix - inverse_matrix = array(cofactor_matrix) - for i in range(3): - for j in range(3): - inverse_matrix[i][j] /= d(determinant) - - # Calculate the inverse of the matrix - return [[float(d(n)) or 0.0 for n in row] for row in inverse_matrix] - raise ValueError("Please provide a matrix of size 2x2 or 3x3.") diff --git a/matrix/largest_square_area_in_matrix.py b/matrix/largest_square_area_in_matrix.py deleted file mode 100644 index 16263fb798f1..000000000000 --- a/matrix/largest_square_area_in_matrix.py +++ /dev/null @@ -1,188 +0,0 @@ -""" -Question: -Given a binary matrix mat of size n * m, find out the maximum size square -sub-matrix with all 1s. - ---- -Example 1: - -Input: -n = 2, m = 2 -mat = [[1, 1], - [1, 1]] - -Output: -2 - -Explanation: The maximum size of the square -sub-matrix is 2. The matrix itself is the -maximum sized sub-matrix in this case. ---- -Example 2 - -Input: -n = 2, m = 2 -mat = [[0, 0], - [0, 0]] -Output: 0 - -Explanation: There is no 1 in the matrix. - - -Approach: -We initialize another matrix (dp) with the same dimensions -as the original one initialized with all 0's. - -dp_array(i,j) represents the side length of the maximum square whose -bottom right corner is the cell with index (i,j) in the original matrix. - -Starting from index (0,0), for every 1 found in the original matrix, -we update the value of the current element as - -dp_array(i,j)=dp_array(dp(i-1,j),dp_array(i-1,j-1),dp_array(i,j-1)) + 1. -""" - - -def largest_square_area_in_matrix_top_down_approch( - rows: int, cols: int, mat: list[list[int]] -) -> int: - """ - Function updates the largest_square_area[0], if recursive call found - square with maximum area. - - We aren't using dp_array here, so the time complexity would be exponential. - - >>> largest_square_area_in_matrix_top_down_approch(2, 2, [[1,1], [1,1]]) - 2 - >>> largest_square_area_in_matrix_top_down_approch(2, 2, [[0,0], [0,0]]) - 0 - """ - - def update_area_of_max_square(row: int, col: int) -> int: - # BASE CASE - if row >= rows or col >= cols: - return 0 - - right = update_area_of_max_square(row, col + 1) - diagonal = update_area_of_max_square(row + 1, col + 1) - down = update_area_of_max_square(row + 1, col) - - if mat[row][col]: - sub_problem_sol = 1 + min([right, diagonal, down]) - largest_square_area[0] = max(largest_square_area[0], sub_problem_sol) - return sub_problem_sol - else: - return 0 - - largest_square_area = [0] - update_area_of_max_square(0, 0) - return largest_square_area[0] - - -def largest_square_area_in_matrix_top_down_approch_with_dp( - rows: int, cols: int, mat: list[list[int]] -) -> int: - """ - Function updates the largest_square_area[0], if recursive call found - square with maximum area. - - We are using dp_array here, so the time complexity would be O(N^2). - - >>> largest_square_area_in_matrix_top_down_approch_with_dp(2, 2, [[1,1], [1,1]]) - 2 - >>> largest_square_area_in_matrix_top_down_approch_with_dp(2, 2, [[0,0], [0,0]]) - 0 - """ - - def update_area_of_max_square_using_dp_array( - row: int, col: int, dp_array: list[list[int]] - ) -> int: - if row >= rows or col >= cols: - return 0 - if dp_array[row][col] != -1: - return dp_array[row][col] - - right = update_area_of_max_square_using_dp_array(row, col + 1, dp_array) - diagonal = update_area_of_max_square_using_dp_array(row + 1, col + 1, dp_array) - down = update_area_of_max_square_using_dp_array(row + 1, col, dp_array) - - if mat[row][col]: - sub_problem_sol = 1 + min([right, diagonal, down]) - largest_square_area[0] = max(largest_square_area[0], sub_problem_sol) - dp_array[row][col] = sub_problem_sol - return sub_problem_sol - else: - return 0 - - largest_square_area = [0] - dp_array = [[-1] * cols for _ in range(rows)] - update_area_of_max_square_using_dp_array(0, 0, dp_array) - - return largest_square_area[0] - - -def largest_square_area_in_matrix_bottom_up( - rows: int, cols: int, mat: list[list[int]] -) -> int: - """ - Function updates the largest_square_area, using bottom up approach. - - >>> largest_square_area_in_matrix_bottom_up(2, 2, [[1,1], [1,1]]) - 2 - >>> largest_square_area_in_matrix_bottom_up(2, 2, [[0,0], [0,0]]) - 0 - - """ - dp_array = [[0] * (cols + 1) for _ in range(rows + 1)] - largest_square_area = 0 - for row in range(rows - 1, -1, -1): - for col in range(cols - 1, -1, -1): - right = dp_array[row][col + 1] - diagonal = dp_array[row + 1][col + 1] - bottom = dp_array[row + 1][col] - - if mat[row][col] == 1: - dp_array[row][col] = 1 + min(right, diagonal, bottom) - largest_square_area = max(dp_array[row][col], largest_square_area) - else: - dp_array[row][col] = 0 - - return largest_square_area - - -def largest_square_area_in_matrix_bottom_up_space_optimization( - rows: int, cols: int, mat: list[list[int]] -) -> int: - """ - Function updates the largest_square_area, using bottom up - approach. with space optimization. - - >>> largest_square_area_in_matrix_bottom_up_space_optimization(2, 2, [[1,1], [1,1]]) - 2 - >>> largest_square_area_in_matrix_bottom_up_space_optimization(2, 2, [[0,0], [0,0]]) - 0 - """ - current_row = [0] * (cols + 1) - next_row = [0] * (cols + 1) - largest_square_area = 0 - for row in range(rows - 1, -1, -1): - for col in range(cols - 1, -1, -1): - right = current_row[col + 1] - diagonal = next_row[col + 1] - bottom = next_row[col] - - if mat[row][col] == 1: - current_row[col] = 1 + min(right, diagonal, bottom) - largest_square_area = max(current_row[col], largest_square_area) - else: - current_row[col] = 0 - next_row = current_row - - return largest_square_area - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(largest_square_area_in_matrix_bottom_up(2, 2, [[1, 1], [1, 1]])) diff --git a/matrix/matrix_class.py b/matrix/matrix_class.py deleted file mode 100644 index a5940a38e836..000000000000 --- a/matrix/matrix_class.py +++ /dev/null @@ -1,366 +0,0 @@ -# An OOP approach to representing and manipulating matrices - -from __future__ import annotations - - -class Matrix: - """ - Matrix object generated from a 2D array where each element is an array representing - a row. - Rows can contain type int or float. - Common operations and information available. - >>> rows = [ - ... [1, 2, 3], - ... [4, 5, 6], - ... [7, 8, 9] - ... ] - >>> matrix = Matrix(rows) - >>> print(matrix) - [[1. 2. 3.] - [4. 5. 6.] - [7. 8. 9.]] - - Matrix rows and columns are available as 2D arrays - >>> matrix.rows - [[1, 2, 3], [4, 5, 6], [7, 8, 9]] - >>> matrix.columns() - [[1, 4, 7], [2, 5, 8], [3, 6, 9]] - - Order is returned as a tuple - >>> matrix.order - (3, 3) - - Squareness and invertability are represented as bool - >>> matrix.is_square - True - >>> matrix.is_invertable() - False - - Identity, Minors, Cofactors and Adjugate are returned as Matrices. Inverse can be - a Matrix or Nonetype - >>> print(matrix.identity()) - [[1. 0. 0.] - [0. 1. 0.] - [0. 0. 1.]] - >>> print(matrix.minors()) - [[-3. -6. -3.] - [-6. -12. -6.] - [-3. -6. -3.]] - >>> print(matrix.cofactors()) - [[-3. 6. -3.] - [6. -12. 6.] - [-3. 6. -3.]] - >>> # won't be apparent due to the nature of the cofactor matrix - >>> print(matrix.adjugate()) - [[-3. 6. -3.] - [6. -12. 6.] - [-3. 6. -3.]] - >>> matrix.inverse() - Traceback (most recent call last): - ... - TypeError: Only matrices with a non-zero determinant have an inverse - - Determinant is an int, float, or Nonetype - >>> matrix.determinant() - 0 - - Negation, scalar multiplication, addition, subtraction, multiplication and - exponentiation are available and all return a Matrix - >>> print(-matrix) - [[-1. -2. -3.] - [-4. -5. -6.] - [-7. -8. -9.]] - >>> matrix2 = matrix * 3 - >>> print(matrix2) - [[3. 6. 9.] - [12. 15. 18.] - [21. 24. 27.]] - >>> print(matrix + matrix2) - [[4. 8. 12.] - [16. 20. 24.] - [28. 32. 36.]] - >>> print(matrix - matrix2) - [[-2. -4. -6.] - [-8. -10. -12.] - [-14. -16. -18.]] - >>> print(matrix ** 3) - [[468. 576. 684.] - [1062. 1305. 1548.] - [1656. 2034. 2412.]] - - Matrices can also be modified - >>> matrix.add_row([10, 11, 12]) - >>> print(matrix) - [[1. 2. 3.] - [4. 5. 6.] - [7. 8. 9.] - [10. 11. 12.]] - >>> matrix2.add_column([8, 16, 32]) - >>> print(matrix2) - [[3. 6. 9. 8.] - [12. 15. 18. 16.] - [21. 24. 27. 32.]] - >>> print(matrix * matrix2) - [[90. 108. 126. 136.] - [198. 243. 288. 304.] - [306. 378. 450. 472.] - [414. 513. 612. 640.]] - """ - - def __init__(self, rows: list[list[int]]): - error = TypeError( - "Matrices must be formed from a list of zero or more lists containing at " - "least one and the same number of values, each of which must be of type " - "int or float." - ) - if len(rows) != 0: - cols = len(rows[0]) - if cols == 0: - raise error - for row in rows: - if len(row) != cols: - raise error - for value in row: - if not isinstance(value, (int, float)): - raise error - self.rows = rows - else: - self.rows = [] - - # MATRIX INFORMATION - def columns(self) -> list[list[int]]: - return [[row[i] for row in self.rows] for i in range(len(self.rows[0]))] - - @property - def num_rows(self) -> int: - return len(self.rows) - - @property - def num_columns(self) -> int: - return len(self.rows[0]) - - @property - def order(self) -> tuple[int, int]: - return self.num_rows, self.num_columns - - @property - def is_square(self) -> bool: - return self.order[0] == self.order[1] - - def identity(self) -> Matrix: - values = [ - [0 if column_num != row_num else 1 for column_num in range(self.num_rows)] - for row_num in range(self.num_rows) - ] - return Matrix(values) - - def determinant(self) -> int: - if not self.is_square: - return 0 - if self.order == (0, 0): - return 1 - if self.order == (1, 1): - return int(self.rows[0][0]) - if self.order == (2, 2): - return int( - (self.rows[0][0] * self.rows[1][1]) - - (self.rows[0][1] * self.rows[1][0]) - ) - else: - return sum( - self.rows[0][column] * self.cofactors().rows[0][column] - for column in range(self.num_columns) - ) - - def is_invertable(self) -> bool: - return bool(self.determinant()) - - def get_minor(self, row: int, column: int) -> int: - values = [ - [ - self.rows[other_row][other_column] - for other_column in range(self.num_columns) - if other_column != column - ] - for other_row in range(self.num_rows) - if other_row != row - ] - return Matrix(values).determinant() - - def get_cofactor(self, row: int, column: int) -> int: - if (row + column) % 2 == 0: - return self.get_minor(row, column) - return -1 * self.get_minor(row, column) - - def minors(self) -> Matrix: - return Matrix( - [ - [self.get_minor(row, column) for column in range(self.num_columns)] - for row in range(self.num_rows) - ] - ) - - def cofactors(self) -> Matrix: - return Matrix( - [ - [ - self.minors().rows[row][column] - if (row + column) % 2 == 0 - else self.minors().rows[row][column] * -1 - for column in range(self.minors().num_columns) - ] - for row in range(self.minors().num_rows) - ] - ) - - def adjugate(self) -> Matrix: - values = [ - [self.cofactors().rows[column][row] for column in range(self.num_columns)] - for row in range(self.num_rows) - ] - return Matrix(values) - - def inverse(self) -> Matrix: - determinant = self.determinant() - if not determinant: - raise TypeError("Only matrices with a non-zero determinant have an inverse") - return self.adjugate() * (1 / determinant) - - def __repr__(self) -> str: - return str(self.rows) - - def __str__(self) -> str: - if self.num_rows == 0: - return "[]" - if self.num_rows == 1: - return "[[" + ". ".join(str(self.rows[0])) + "]]" - return ( - "[" - + "\n ".join( - [ - "[" + ". ".join([str(value) for value in row]) + ".]" - for row in self.rows - ] - ) - + "]" - ) - - # MATRIX MANIPULATION - def add_row(self, row: list[int], position: int | None = None) -> None: - type_error = TypeError("Row must be a list containing all ints and/or floats") - if not isinstance(row, list): - raise type_error - for value in row: - if not isinstance(value, (int, float)): - raise type_error - if len(row) != self.num_columns: - raise ValueError( - "Row must be equal in length to the other rows in the matrix" - ) - if position is None: - self.rows.append(row) - else: - self.rows = self.rows[0:position] + [row] + self.rows[position:] - - def add_column(self, column: list[int], position: int | None = None) -> None: - type_error = TypeError( - "Column must be a list containing all ints and/or floats" - ) - if not isinstance(column, list): - raise type_error - for value in column: - if not isinstance(value, (int, float)): - raise type_error - if len(column) != self.num_rows: - raise ValueError( - "Column must be equal in length to the other columns in the matrix" - ) - if position is None: - self.rows = [self.rows[i] + [column[i]] for i in range(self.num_rows)] - else: - self.rows = [ - self.rows[i][0:position] + [column[i]] + self.rows[i][position:] - for i in range(self.num_rows) - ] - - # MATRIX OPERATIONS - def __eq__(self, other: object) -> bool: - if not isinstance(other, Matrix): - return NotImplemented - return self.rows == other.rows - - def __ne__(self, other: object) -> bool: - return not self == other - - def __neg__(self) -> Matrix: - return self * -1 - - def __add__(self, other: Matrix) -> Matrix: - if self.order != other.order: - raise ValueError("Addition requires matrices of the same order") - return Matrix( - [ - [self.rows[i][j] + other.rows[i][j] for j in range(self.num_columns)] - for i in range(self.num_rows) - ] - ) - - def __sub__(self, other: Matrix) -> Matrix: - if self.order != other.order: - raise ValueError("Subtraction requires matrices of the same order") - return Matrix( - [ - [self.rows[i][j] - other.rows[i][j] for j in range(self.num_columns)] - for i in range(self.num_rows) - ] - ) - - def __mul__(self, other: Matrix | float) -> Matrix: - if isinstance(other, (int, float)): - return Matrix( - [[int(element * other) for element in row] for row in self.rows] - ) - elif isinstance(other, Matrix): - if self.num_columns != other.num_rows: - raise ValueError( - "The number of columns in the first matrix must " - "be equal to the number of rows in the second" - ) - return Matrix( - [ - [Matrix.dot_product(row, column) for column in other.columns()] - for row in self.rows - ] - ) - else: - raise TypeError( - "A Matrix can only be multiplied by an int, float, or another matrix" - ) - - def __pow__(self, other: int) -> Matrix: - if not isinstance(other, int): - raise TypeError("A Matrix can only be raised to the power of an int") - if not self.is_square: - raise ValueError("Only square matrices can be raised to a power") - if other == 0: - return self.identity() - if other < 0: - if self.is_invertable(): - return self.inverse() ** (-other) - raise ValueError( - "Only invertable matrices can be raised to a negative power" - ) - result = self - for _ in range(other - 1): - result *= self - return result - - @classmethod - def dot_product(cls, row: list[int], column: list[int]) -> int: - return sum(row[i] * column[i] for i in range(len(row))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/matrix/matrix_equalization.py b/matrix/matrix_equalization.py deleted file mode 100644 index e7e76505cf63..000000000000 --- a/matrix/matrix_equalization.py +++ /dev/null @@ -1,55 +0,0 @@ -from sys import maxsize - - -def array_equalization(vector: list[int], step_size: int) -> int: - """ - This algorithm equalizes all elements of the input vector - to a common value, by making the minimal number of - "updates" under the constraint of a step size (step_size). - - >>> array_equalization([1, 1, 6, 2, 4, 6, 5, 1, 7, 2, 2, 1, 7, 2, 2], 4) - 4 - >>> array_equalization([22, 81, 88, 71, 22, 81, 632, 81, 81, 22, 92], 2) - 5 - >>> array_equalization([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 5) - 0 - >>> array_equalization([22, 22, 22, 33, 33, 33], 2) - 2 - >>> array_equalization([1, 2, 3], 0) - Traceback (most recent call last): - ValueError: Step size must be positive and non-zero. - >>> array_equalization([1, 2, 3], -1) - Traceback (most recent call last): - ValueError: Step size must be positive and non-zero. - >>> array_equalization([1, 2, 3], 0.5) - Traceback (most recent call last): - ValueError: Step size must be an integer. - >>> array_equalization([1, 2, 3], maxsize) - 1 - """ - if step_size <= 0: - raise ValueError("Step size must be positive and non-zero.") - if not isinstance(step_size, int): - raise ValueError("Step size must be an integer.") - - unique_elements = set(vector) - min_updates = maxsize - - for element in unique_elements: - elem_index = 0 - updates = 0 - while elem_index < len(vector): - if vector[elem_index] != element: - updates += 1 - elem_index += step_size - else: - elem_index += 1 - min_updates = min(min_updates, updates) - - return min_updates - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/matrix/matrix_multiplication_recursion.py b/matrix/matrix_multiplication_recursion.py deleted file mode 100644 index 57c4d80de017..000000000000 --- a/matrix/matrix_multiplication_recursion.py +++ /dev/null @@ -1,181 +0,0 @@ -# @Author : ojas-wani -# @File : matrix_multiplication_recursion.py -# @Date : 10/06/2023 - - -""" -Perform matrix multiplication using a recursive algorithm. -https://en.wikipedia.org/wiki/Matrix_multiplication -""" - -# type Matrix = list[list[int]] # psf/black currenttly fails on this line -Matrix = list[list[int]] - -matrix_1_to_4 = [ - [1, 2], - [3, 4], -] - -matrix_5_to_8 = [ - [5, 6], - [7, 8], -] - -matrix_5_to_9_high = [ - [5, 6], - [7, 8], - [9], -] - -matrix_5_to_9_wide = [ - [5, 6], - [7, 8, 9], -] - -matrix_count_up = [ - [1, 2, 3, 4], - [5, 6, 7, 8], - [9, 10, 11, 12], - [13, 14, 15, 16], -] - -matrix_unordered = [ - [5, 8, 1, 2], - [6, 7, 3, 0], - [4, 5, 9, 1], - [2, 6, 10, 14], -] -matrices = ( - matrix_1_to_4, - matrix_5_to_8, - matrix_5_to_9_high, - matrix_5_to_9_wide, - matrix_count_up, - matrix_unordered, -) - - -def is_square(matrix: Matrix) -> bool: - """ - >>> is_square([]) - True - >>> is_square(matrix_1_to_4) - True - >>> is_square(matrix_5_to_9_high) - False - """ - len_matrix = len(matrix) - return all(len(row) == len_matrix for row in matrix) - - -def matrix_multiply(matrix_a: Matrix, matrix_b: Matrix) -> Matrix: - """ - >>> matrix_multiply(matrix_1_to_4, matrix_5_to_8) - [[19, 22], [43, 50]] - """ - return [ - [sum(a * b for a, b in zip(row, col)) for col in zip(*matrix_b)] - for row in matrix_a - ] - - -def matrix_multiply_recursive(matrix_a: Matrix, matrix_b: Matrix) -> Matrix: - """ - :param matrix_a: A square Matrix. - :param matrix_b: Another square Matrix with the same dimensions as matrix_a. - :return: Result of matrix_a * matrix_b. - :raises ValueError: If the matrices cannot be multiplied. - - >>> matrix_multiply_recursive([], []) - [] - >>> matrix_multiply_recursive(matrix_1_to_4, matrix_5_to_8) - [[19, 22], [43, 50]] - >>> matrix_multiply_recursive(matrix_count_up, matrix_unordered) - [[37, 61, 74, 61], [105, 165, 166, 129], [173, 269, 258, 197], [241, 373, 350, 265]] - >>> matrix_multiply_recursive(matrix_1_to_4, matrix_5_to_9_wide) - Traceback (most recent call last): - ... - ValueError: Invalid matrix dimensions - >>> matrix_multiply_recursive(matrix_1_to_4, matrix_5_to_9_high) - Traceback (most recent call last): - ... - ValueError: Invalid matrix dimensions - >>> matrix_multiply_recursive(matrix_1_to_4, matrix_count_up) - Traceback (most recent call last): - ... - ValueError: Invalid matrix dimensions - """ - if not matrix_a or not matrix_b: - return [] - if not all( - (len(matrix_a) == len(matrix_b), is_square(matrix_a), is_square(matrix_b)) - ): - raise ValueError("Invalid matrix dimensions") - - # Initialize the result matrix with zeros - result = [[0] * len(matrix_b[0]) for _ in range(len(matrix_a))] - - # Recursive multiplication of matrices - def multiply( - i_loop: int, - j_loop: int, - k_loop: int, - matrix_a: Matrix, - matrix_b: Matrix, - result: Matrix, - ) -> None: - """ - :param matrix_a: A square Matrix. - :param matrix_b: Another square Matrix with the same dimensions as matrix_a. - :param result: Result matrix - :param i: Index used for iteration during multiplication. - :param j: Index used for iteration during multiplication. - :param k: Index used for iteration during multiplication. - >>> 0 > 1 # Doctests in inner functions are never run - True - """ - if i_loop >= len(matrix_a): - return - if j_loop >= len(matrix_b[0]): - return multiply(i_loop + 1, 0, 0, matrix_a, matrix_b, result) - if k_loop >= len(matrix_b): - return multiply(i_loop, j_loop + 1, 0, matrix_a, matrix_b, result) - result[i_loop][j_loop] += matrix_a[i_loop][k_loop] * matrix_b[k_loop][j_loop] - return multiply(i_loop, j_loop, k_loop + 1, matrix_a, matrix_b, result) - - # Perform the recursive matrix multiplication - multiply(0, 0, 0, matrix_a, matrix_b, result) - return result - - -if __name__ == "__main__": - from doctest import testmod - - failure_count, test_count = testmod() - if not failure_count: - matrix_a = matrices[0] - for matrix_b in matrices[1:]: - print("Multiplying:") - for row in matrix_a: - print(row) - print("By:") - for row in matrix_b: - print(row) - print("Result:") - try: - result = matrix_multiply_recursive(matrix_a, matrix_b) - for row in result: - print(row) - assert result == matrix_multiply(matrix_a, matrix_b) - except ValueError as e: - print(f"{e!r}") - print() - matrix_a = matrix_b - - print("Benchmark:") - from functools import partial - from timeit import timeit - - mytimeit = partial(timeit, globals=globals(), number=100_000) - for func in ("matrix_multiply", "matrix_multiply_recursive"): - print(f"{func:>25}(): {mytimeit(f'{func}(matrix_count_up, matrix_unordered)')}") diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py deleted file mode 100644 index d63e758f1838..000000000000 --- a/matrix/matrix_operation.py +++ /dev/null @@ -1,203 +0,0 @@ -""" -Functions for 2D matrix operations -""" - -from __future__ import annotations - -from typing import Any - - -def add(*matrix_s: list[list[int]]) -> list[list[int]]: - """ - >>> add([[1,2],[3,4]],[[2,3],[4,5]]) - [[3, 5], [7, 9]] - >>> add([[1.2,2.4],[3,4]],[[2,3],[4,5]]) - [[3.2, 5.4], [7, 9]] - >>> add([[1, 2], [4, 5]], [[3, 7], [3, 4]], [[3, 5], [5, 7]]) - [[7, 14], [12, 16]] - >>> add([3], [4, 5]) - Traceback (most recent call last): - ... - TypeError: Expected a matrix, got int/list instead - """ - if all(_check_not_integer(m) for m in matrix_s): - for i in matrix_s[1:]: - _verify_matrix_sizes(matrix_s[0], i) - return [[sum(t) for t in zip(*m)] for m in zip(*matrix_s)] - raise TypeError("Expected a matrix, got int/list instead") - - -def subtract(matrix_a: list[list[int]], matrix_b: list[list[int]]) -> list[list[int]]: - """ - >>> subtract([[1,2],[3,4]],[[2,3],[4,5]]) - [[-1, -1], [-1, -1]] - >>> subtract([[1,2.5],[3,4]],[[2,3],[4,5.5]]) - [[-1, -0.5], [-1, -1.5]] - >>> subtract([3], [4, 5]) - Traceback (most recent call last): - ... - TypeError: Expected a matrix, got int/list instead - """ - if ( - _check_not_integer(matrix_a) - and _check_not_integer(matrix_b) - and _verify_matrix_sizes(matrix_a, matrix_b) - ): - return [[i - j for i, j in zip(*m)] for m in zip(matrix_a, matrix_b)] - raise TypeError("Expected a matrix, got int/list instead") - - -def scalar_multiply(matrix: list[list[int]], n: float) -> list[list[float]]: - """ - >>> scalar_multiply([[1,2],[3,4]],5) - [[5, 10], [15, 20]] - >>> scalar_multiply([[1.4,2.3],[3,4]],5) - [[7.0, 11.5], [15, 20]] - """ - return [[x * n for x in row] for row in matrix] - - -def multiply(matrix_a: list[list[int]], matrix_b: list[list[int]]) -> list[list[int]]: - """ - >>> multiply([[1,2],[3,4]],[[5,5],[7,5]]) - [[19, 15], [43, 35]] - >>> multiply([[1,2.5],[3,4.5]],[[5,5],[7,5]]) - [[22.5, 17.5], [46.5, 37.5]] - >>> multiply([[1, 2, 3]], [[2], [3], [4]]) - [[20]] - """ - if _check_not_integer(matrix_a) and _check_not_integer(matrix_b): - rows, cols = _verify_matrix_sizes(matrix_a, matrix_b) - - if cols[0] != rows[1]: - msg = ( - "Cannot multiply matrix of dimensions " - f"({rows[0]},{cols[0]}) and ({rows[1]},{cols[1]})" - ) - raise ValueError(msg) - return [ - [sum(m * n for m, n in zip(i, j)) for j in zip(*matrix_b)] for i in matrix_a - ] - - -def identity(n: int) -> list[list[int]]: - """ - :param n: dimension for nxn matrix - :type n: int - :return: Identity matrix of shape [n, n] - >>> identity(3) - [[1, 0, 0], [0, 1, 0], [0, 0, 1]] - """ - n = int(n) - return [[int(row == column) for column in range(n)] for row in range(n)] - - -def transpose( - matrix: list[list[int]], return_map: bool = True -) -> list[list[int]] | map[list[int]]: - """ - >>> transpose([[1,2],[3,4]]) # doctest: +ELLIPSIS - <map object at ... - >>> transpose([[1,2],[3,4]], return_map=False) - [[1, 3], [2, 4]] - >>> transpose([1, [2, 3]]) - Traceback (most recent call last): - ... - TypeError: Expected a matrix, got int/list instead - """ - if _check_not_integer(matrix): - if return_map: - return map(list, zip(*matrix)) - else: - return list(map(list, zip(*matrix))) - raise TypeError("Expected a matrix, got int/list instead") - - -def minor(matrix: list[list[int]], row: int, column: int) -> list[list[int]]: - """ - >>> minor([[1, 2], [3, 4]], 1, 1) - [[1]] - """ - minor = matrix[:row] + matrix[row + 1 :] - return [row[:column] + row[column + 1 :] for row in minor] - - -def determinant(matrix: list[list[int]]) -> Any: - """ - >>> determinant([[1, 2], [3, 4]]) - -2 - >>> determinant([[1.5, 2.5], [3, 4]]) - -1.5 - """ - if len(matrix) == 1: - return matrix[0][0] - - return sum( - x * determinant(minor(matrix, 0, i)) * (-1) ** i - for i, x in enumerate(matrix[0]) - ) - - -def inverse(matrix: list[list[int]]) -> list[list[float]] | None: - """ - >>> inverse([[1, 2], [3, 4]]) - [[-2.0, 1.0], [1.5, -0.5]] - >>> inverse([[1, 1], [1, 1]]) - """ - # https://stackoverflow.com/questions/20047519/python-doctests-test-for-none - det = determinant(matrix) - if det == 0: - return None - - matrix_minor = [ - [determinant(minor(matrix, i, j)) for j in range(len(matrix))] - for i in range(len(matrix)) - ] - - cofactors = [ - [x * (-1) ** (row + col) for col, x in enumerate(matrix_minor[row])] - for row in range(len(matrix)) - ] - adjugate = list(transpose(cofactors)) - return scalar_multiply(adjugate, 1 / det) - - -def _check_not_integer(matrix: list[list[int]]) -> bool: - return not isinstance(matrix, int) and not isinstance(matrix[0], int) - - -def _shape(matrix: list[list[int]]) -> tuple[int, int]: - return len(matrix), len(matrix[0]) - - -def _verify_matrix_sizes( - matrix_a: list[list[int]], matrix_b: list[list[int]] -) -> tuple[tuple[int, int], tuple[int, int]]: - shape = _shape(matrix_a) + _shape(matrix_b) - if shape[0] != shape[3] or shape[1] != shape[2]: - msg = ( - "operands could not be broadcast together with shape " - f"({shape[0], shape[1]}), ({shape[2], shape[3]})" - ) - raise ValueError(msg) - return (shape[0], shape[2]), (shape[1], shape[3]) - - -def main() -> None: - matrix_a = [[12, 10], [3, 9]] - matrix_b = [[3, 4], [7, 4]] - matrix_c = [[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34], [41, 42, 43, 44]] - matrix_d = [[3, 0, 2], [2, 0, -2], [0, 1, 1]] - print(f"Add Operation, {add(matrix_a, matrix_b) = } \n") - print(f"Multiply Operation, {multiply(matrix_a, matrix_b) = } \n") - print(f"Identity: {identity(5)}\n") - print(f"Minor of {matrix_c} = {minor(matrix_c, 1, 2)} \n") - print(f"Determinant of {matrix_b} = {determinant(matrix_b)} \n") - print(f"Inverse of {matrix_d} = {inverse(matrix_d)}\n") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/matrix/max_area_of_island.py b/matrix/max_area_of_island.py deleted file mode 100644 index 40950c303795..000000000000 --- a/matrix/max_area_of_island.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -Given an two dimensional binary matrix grid. An island is a group of 1's (representing -land) connected 4-directionally (horizontal or vertical.) You may assume all four edges -of the grid are surrounded by water. The area of an island is the number of cells with -a value 1 in the island. Return the maximum area of an island in a grid. If there is no -island, return 0. -""" - -matrix = [ - [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], - [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0], - [0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0], -] - - -def is_safe(row: int, col: int, rows: int, cols: int) -> bool: - """ - Checking whether coordinate (row, col) is valid or not. - - >>> is_safe(0, 0, 5, 5) - True - >>> is_safe(-1,-1, 5, 5) - False - """ - return 0 <= row < rows and 0 <= col < cols - - -def depth_first_search(row: int, col: int, seen: set, mat: list[list[int]]) -> int: - """ - Returns the current area of the island - - >>> depth_first_search(0, 0, set(), matrix) - 0 - """ - rows = len(mat) - cols = len(mat[0]) - if is_safe(row, col, rows, cols) and (row, col) not in seen and mat[row][col] == 1: - seen.add((row, col)) - return ( - 1 - + depth_first_search(row + 1, col, seen, mat) - + depth_first_search(row - 1, col, seen, mat) - + depth_first_search(row, col + 1, seen, mat) - + depth_first_search(row, col - 1, seen, mat) - ) - else: - return 0 - - -def find_max_area(mat: list[list[int]]) -> int: - """ - Finds the area of all islands and returns the maximum area. - - >>> find_max_area(matrix) - 6 - """ - seen: set = set() - - max_area = 0 - for row, line in enumerate(mat): - for col, item in enumerate(line): - if item == 1 and (row, col) not in seen: - # Maximizing the area - max_area = max(max_area, depth_first_search(row, col, seen, mat)) - return max_area - - -if __name__ == "__main__": - import doctest - - print(find_max_area(matrix)) # Output -> 6 - - """ - Explanation: - We are allowed to move in four directions (horizontal or vertical) so the possible - in a matrix if we are at x and y position the possible moving are - - Directions are [(x, y+1), (x, y-1), (x+1, y), (x-1, y)] but we need to take care of - boundary cases as well which are x and y can not be smaller than 0 and greater than - the number of rows and columns respectively. - - Visualization - mat = [ - [0,0,A,0,0,0,0,B,0,0,0,0,0], - [0,0,0,0,0,0,0,B,B,B,0,0,0], - [0,C,C,0,D,0,0,0,0,0,0,0,0], - [0,C,0,0,D,D,0,0,E,0,E,0,0], - [0,C,0,0,D,D,0,0,E,E,E,0,0], - [0,0,0,0,0,0,0,0,0,0,E,0,0], - [0,0,0,0,0,0,0,F,F,F,0,0,0], - [0,0,0,0,0,0,0,F,F,0,0,0,0] - ] - - For visualization, I have defined the connected island with letters - by observation, we can see that - A island is of area 1 - B island is of area 4 - C island is of area 4 - D island is of area 5 - E island is of area 6 and - F island is of area 5 - - it has 6 unique islands of mentioned areas - and the maximum of all of them is 6 so we return 6. - """ - - doctest.testmod() diff --git a/matrix/median_matrix.py b/matrix/median_matrix.py deleted file mode 100644 index 116e609a587c..000000000000 --- a/matrix/median_matrix.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Median -""" - - -def median(matrix: list[list[int]]) -> int: - """ - Calculate the median of a sorted matrix. - - Args: - matrix: A 2D matrix of integers. - - Returns: - The median value of the matrix. - - Examples: - >>> matrix = [[1, 3, 5], [2, 6, 9], [3, 6, 9]] - >>> median(matrix) - 5 - - >>> matrix = [[1, 2, 3], [4, 5, 6]] - >>> median(matrix) - 3 - """ - # Flatten the matrix into a sorted 1D list - linear = sorted(num for row in matrix for num in row) - - # Calculate the middle index - mid = (len(linear) - 1) // 2 - - # Return the median - return linear[mid] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/matrix/nth_fibonacci_using_matrix_exponentiation.py b/matrix/nth_fibonacci_using_matrix_exponentiation.py deleted file mode 100644 index 65f10c90d07a..000000000000 --- a/matrix/nth_fibonacci_using_matrix_exponentiation.py +++ /dev/null @@ -1,94 +0,0 @@ -""" -Implementation of finding nth fibonacci number using matrix exponentiation. -Time Complexity is about O(log(n)*8), where 8 is the complexity of matrix -multiplication of size 2 by 2. -And on the other hand complexity of bruteforce solution is O(n). -As we know - f[n] = f[n-1] + f[n-1] -Converting to matrix, - [f(n),f(n-1)] = [[1,1],[1,0]] * [f(n-1),f(n-2)] --> [f(n),f(n-1)] = [[1,1],[1,0]]^2 * [f(n-2),f(n-3)] - ... - ... --> [f(n),f(n-1)] = [[1,1],[1,0]]^(n-1) * [f(1),f(0)] -So we just need the n times multiplication of the matrix [1,1],[1,0]]. -We can decrease the n times multiplication by following the divide and conquer approach. -""" - - -def multiply(matrix_a: list[list[int]], matrix_b: list[list[int]]) -> list[list[int]]: - matrix_c = [] - n = len(matrix_a) - for i in range(n): - list_1 = [] - for j in range(n): - val = 0 - for k in range(n): - val = val + matrix_a[i][k] * matrix_b[k][j] - list_1.append(val) - matrix_c.append(list_1) - return matrix_c - - -def identity(n: int) -> list[list[int]]: - return [[int(row == column) for column in range(n)] for row in range(n)] - - -def nth_fibonacci_matrix(n: int) -> int: - """ - >>> nth_fibonacci_matrix(100) - 354224848179261915075 - >>> nth_fibonacci_matrix(-100) - -100 - """ - if n <= 1: - return n - res_matrix = identity(2) - fibonacci_matrix = [[1, 1], [1, 0]] - n = n - 1 - while n > 0: - if n % 2 == 1: - res_matrix = multiply(res_matrix, fibonacci_matrix) - fibonacci_matrix = multiply(fibonacci_matrix, fibonacci_matrix) - n = int(n / 2) - return res_matrix[0][0] - - -def nth_fibonacci_bruteforce(n: int) -> int: - """ - >>> nth_fibonacci_bruteforce(100) - 354224848179261915075 - >>> nth_fibonacci_bruteforce(-100) - -100 - """ - if n <= 1: - return n - fib0 = 0 - fib1 = 1 - for _ in range(2, n + 1): - fib0, fib1 = fib1, fib0 + fib1 - return fib1 - - -def main() -> None: - for ordinal in "0th 1st 2nd 3rd 10th 100th 1000th".split(): - n = int("".join(c for c in ordinal if c in "0123456789")) # 1000th --> 1000 - print( - f"{ordinal} fibonacci number using matrix exponentiation is " - f"{nth_fibonacci_matrix(n)} and using bruteforce is " - f"{nth_fibonacci_bruteforce(n)}\n" - ) - # from timeit import timeit - # print(timeit("nth_fibonacci_matrix(1000000)", - # "from main import nth_fibonacci_matrix", number=5)) - # print(timeit("nth_fibonacci_bruteforce(1000000)", - # "from main import nth_fibonacci_bruteforce", number=5)) - # 2.3342058970001744 - # 57.256506615000035 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/matrix/pascal_triangle.py b/matrix/pascal_triangle.py deleted file mode 100644 index 7f6555f9c8b9..000000000000 --- a/matrix/pascal_triangle.py +++ /dev/null @@ -1,189 +0,0 @@ -""" -This implementation demonstrates how to generate the elements of a Pascal's triangle. -The element havingva row index of r and column index of c can be derivedvas follows: -triangle[r][c] = triangle[r-1][c-1]+triangle[r-1][c] - -A Pascal's triangle is a triangular array containing binomial coefficients. -https://en.wikipedia.org/wiki/Pascal%27s_triangle -""" - - -def print_pascal_triangle(num_rows: int) -> None: - """ - Print Pascal's triangle for different number of rows - >>> print_pascal_triangle(5) - 1 - 1 1 - 1 2 1 - 1 3 3 1 - 1 4 6 4 1 - """ - triangle = generate_pascal_triangle(num_rows) - for row_idx in range(num_rows): - # Print left spaces - for _ in range(num_rows - row_idx - 1): - print(end=" ") - # Print row values - for col_idx in range(row_idx + 1): - if col_idx != row_idx: - print(triangle[row_idx][col_idx], end=" ") - else: - print(triangle[row_idx][col_idx], end="") - print() - - -def generate_pascal_triangle(num_rows: int) -> list[list[int]]: - """ - Create Pascal's triangle for different number of rows - >>> generate_pascal_triangle(0) - [] - >>> generate_pascal_triangle(1) - [[1]] - >>> generate_pascal_triangle(2) - [[1], [1, 1]] - >>> generate_pascal_triangle(3) - [[1], [1, 1], [1, 2, 1]] - >>> generate_pascal_triangle(4) - [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]] - >>> generate_pascal_triangle(5) - [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]] - >>> generate_pascal_triangle(-5) - Traceback (most recent call last): - ... - ValueError: The input value of 'num_rows' should be greater than or equal to 0 - >>> generate_pascal_triangle(7.89) - Traceback (most recent call last): - ... - TypeError: The input value of 'num_rows' should be 'int' - """ - - if not isinstance(num_rows, int): - raise TypeError("The input value of 'num_rows' should be 'int'") - - if num_rows == 0: - return [] - elif num_rows < 0: - raise ValueError( - "The input value of 'num_rows' should be greater than or equal to 0" - ) - - triangle: list[list[int]] = [] - for current_row_idx in range(num_rows): - current_row = populate_current_row(triangle, current_row_idx) - triangle.append(current_row) - return triangle - - -def populate_current_row(triangle: list[list[int]], current_row_idx: int) -> list[int]: - """ - >>> triangle = [[1]] - >>> populate_current_row(triangle, 1) - [1, 1] - """ - current_row = [-1] * (current_row_idx + 1) - # first and last elements of current row are equal to 1 - current_row[0], current_row[-1] = 1, 1 - for current_col_idx in range(1, current_row_idx): - calculate_current_element( - triangle, current_row, current_row_idx, current_col_idx - ) - return current_row - - -def calculate_current_element( - triangle: list[list[int]], - current_row: list[int], - current_row_idx: int, - current_col_idx: int, -) -> None: - """ - >>> triangle = [[1], [1, 1]] - >>> current_row = [1, -1, 1] - >>> calculate_current_element(triangle, current_row, 2, 1) - >>> current_row - [1, 2, 1] - """ - above_to_left_elt = triangle[current_row_idx - 1][current_col_idx - 1] - above_to_right_elt = triangle[current_row_idx - 1][current_col_idx] - current_row[current_col_idx] = above_to_left_elt + above_to_right_elt - - -def generate_pascal_triangle_optimized(num_rows: int) -> list[list[int]]: - """ - This function returns a matrix representing the corresponding pascal's triangle - according to the given input of number of rows of Pascal's triangle to be generated. - It reduces the operations done to generate a row by half - by eliminating redundant calculations. - - :param num_rows: Integer specifying the number of rows in the Pascal's triangle - :return: 2-D List (matrix) representing the Pascal's triangle - - Return the Pascal's triangle of given rows - >>> generate_pascal_triangle_optimized(3) - [[1], [1, 1], [1, 2, 1]] - >>> generate_pascal_triangle_optimized(1) - [[1]] - >>> generate_pascal_triangle_optimized(0) - [] - >>> generate_pascal_triangle_optimized(-5) - Traceback (most recent call last): - ... - ValueError: The input value of 'num_rows' should be greater than or equal to 0 - >>> generate_pascal_triangle_optimized(7.89) - Traceback (most recent call last): - ... - TypeError: The input value of 'num_rows' should be 'int' - """ - - if not isinstance(num_rows, int): - raise TypeError("The input value of 'num_rows' should be 'int'") - - if num_rows == 0: - return [] - elif num_rows < 0: - raise ValueError( - "The input value of 'num_rows' should be greater than or equal to 0" - ) - - result: list[list[int]] = [[1]] - - for row_index in range(1, num_rows): - temp_row = [0] + result[-1] + [0] - row_length = row_index + 1 - # Calculate the number of distinct elements in a row - distinct_elements = sum(divmod(row_length, 2)) - row_first_half = [ - temp_row[i - 1] + temp_row[i] for i in range(1, distinct_elements + 1) - ] - row_second_half = row_first_half[: (row_index + 1) // 2] - row_second_half.reverse() - row = row_first_half + row_second_half - result.append(row) - - return result - - -def benchmark() -> None: - """ - Benchmark multiple functions, with three different length int values. - """ - from collections.abc import Callable - from timeit import timeit - - def benchmark_a_function(func: Callable, value: int) -> None: - call = f"{func.__name__}({value})" - timing = timeit(f"__main__.{call}", setup="import __main__") - # print(f"{call:38} = {func(value)} -- {timing:.4f} seconds") - print(f"{call:38} -- {timing:.4f} seconds") - - for value in range(15): # (1, 7, 14): - for func in (generate_pascal_triangle, generate_pascal_triangle_optimized): - benchmark_a_function(func, value) - print() - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - benchmark() diff --git a/matrix/rotate_matrix.py b/matrix/rotate_matrix.py deleted file mode 100644 index c16cdb9a81bb..000000000000 --- a/matrix/rotate_matrix.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -In this problem, we want to rotate the matrix elements by 90, 180, 270 -(counterclockwise) -Discussion in stackoverflow: -https://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array -""" - -from __future__ import annotations - - -def make_matrix(row_size: int = 4) -> list[list[int]]: - """ - >>> make_matrix() - [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] - >>> make_matrix(1) - [[1]] - >>> make_matrix(-2) - [[1, 2], [3, 4]] - >>> make_matrix(3) - [[1, 2, 3], [4, 5, 6], [7, 8, 9]] - >>> make_matrix() == make_matrix(4) - True - """ - row_size = abs(row_size) or 4 - return [[1 + x + y * row_size for x in range(row_size)] for y in range(row_size)] - - -def rotate_90(matrix: list[list[int]]) -> list[list[int]]: - """ - >>> rotate_90(make_matrix()) - [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]] - >>> rotate_90(make_matrix()) == transpose(reverse_column(make_matrix())) - True - """ - - return reverse_row(transpose(matrix)) - # OR.. transpose(reverse_column(matrix)) - - -def rotate_180(matrix: list[list[int]]) -> list[list[int]]: - """ - >>> rotate_180(make_matrix()) - [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]] - >>> rotate_180(make_matrix()) == reverse_column(reverse_row(make_matrix())) - True - """ - - return reverse_row(reverse_column(matrix)) - # OR.. reverse_column(reverse_row(matrix)) - - -def rotate_270(matrix: list[list[int]]) -> list[list[int]]: - """ - >>> rotate_270(make_matrix()) - [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]] - >>> rotate_270(make_matrix()) == transpose(reverse_row(make_matrix())) - True - """ - - return reverse_column(transpose(matrix)) - # OR.. transpose(reverse_row(matrix)) - - -def transpose(matrix: list[list[int]]) -> list[list[int]]: - matrix[:] = [list(x) for x in zip(*matrix)] - return matrix - - -def reverse_row(matrix: list[list[int]]) -> list[list[int]]: - matrix[:] = matrix[::-1] - return matrix - - -def reverse_column(matrix: list[list[int]]) -> list[list[int]]: - matrix[:] = [x[::-1] for x in matrix] - return matrix - - -def print_matrix(matrix: list[list[int]]) -> None: - for i in matrix: - print(*i) - - -if __name__ == "__main__": - matrix = make_matrix() - print("\norigin:\n") - print_matrix(matrix) - print("\nrotate 90 counterclockwise:\n") - print_matrix(rotate_90(matrix)) - - matrix = make_matrix() - print("\norigin:\n") - print_matrix(matrix) - print("\nrotate 180:\n") - print_matrix(rotate_180(matrix)) - - matrix = make_matrix() - print("\norigin:\n") - print_matrix(matrix) - print("\nrotate 270 counterclockwise:\n") - print_matrix(rotate_270(matrix)) diff --git a/matrix/searching_in_sorted_matrix.py b/matrix/searching_in_sorted_matrix.py deleted file mode 100644 index f55cc71d6f3a..000000000000 --- a/matrix/searching_in_sorted_matrix.py +++ /dev/null @@ -1,42 +0,0 @@ -from __future__ import annotations - - -def search_in_a_sorted_matrix(mat: list[list[int]], m: int, n: int, key: float) -> None: - """ - >>> search_in_a_sorted_matrix( - ... [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 5) - Key 5 found at row- 1 column- 2 - >>> search_in_a_sorted_matrix( - ... [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 21) - Key 21 not found - >>> search_in_a_sorted_matrix( - ... [[2.1, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 2.1) - Key 2.1 found at row- 1 column- 1 - >>> search_in_a_sorted_matrix( - ... [[2.1, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 2.2) - Key 2.2 not found - """ - i, j = m - 1, 0 - while i >= 0 and j < n: - if key == mat[i][j]: - print(f"Key {key} found at row- {i + 1} column- {j + 1}") - return - if key < mat[i][j]: - i -= 1 - else: - j += 1 - print(f"Key {key} not found") - - -def main() -> None: - mat = [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]] - x = int(input("Enter the element to be searched:")) - print(mat) - search_in_a_sorted_matrix(mat, len(mat), len(mat[0]), x) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/matrix/sherman_morrison.py b/matrix/sherman_morrison.py deleted file mode 100644 index e2a09c1d0070..000000000000 --- a/matrix/sherman_morrison.py +++ /dev/null @@ -1,267 +0,0 @@ -from __future__ import annotations - -from typing import Any - - -class Matrix: - """ - <class Matrix> - Matrix structure. - """ - - def __init__(self, row: int, column: int, default_value: float = 0) -> None: - """ - <method Matrix.__init__> - Initialize matrix with given size and default value. - Example: - >>> a = Matrix(2, 3, 1) - >>> a - Matrix consist of 2 rows and 3 columns - [1, 1, 1] - [1, 1, 1] - """ - - self.row, self.column = row, column - self.array = [[default_value for _ in range(column)] for _ in range(row)] - - def __str__(self) -> str: - """ - <method Matrix.__str__> - Return string representation of this matrix. - """ - - # Prefix - s = f"Matrix consist of {self.row} rows and {self.column} columns\n" - - # Make string identifier - max_element_length = 0 - for row_vector in self.array: - for obj in row_vector: - max_element_length = max(max_element_length, len(str(obj))) - string_format_identifier = f"%{max_element_length}s" - - # Make string and return - def single_line(row_vector: list[float]) -> str: - nonlocal string_format_identifier - line = "[" - line += ", ".join(string_format_identifier % (obj,) for obj in row_vector) - line += "]" - return line - - s += "\n".join(single_line(row_vector) for row_vector in self.array) - return s - - def __repr__(self) -> str: - return str(self) - - def validate_indices(self, loc: tuple[int, int]) -> bool: - """ - <method Matrix.validate_indicies> - Check if given indices are valid to pick element from matrix. - Example: - >>> a = Matrix(2, 6, 0) - >>> a.validate_indices((2, 7)) - False - >>> a.validate_indices((0, 0)) - True - """ - if not (isinstance(loc, (list, tuple)) and len(loc) == 2): # noqa: SIM114 - return False - elif not (0 <= loc[0] < self.row and 0 <= loc[1] < self.column): - return False - else: - return True - - def __getitem__(self, loc: tuple[int, int]) -> Any: - """ - <method Matrix.__getitem__> - Return array[row][column] where loc = (row, column). - Example: - >>> a = Matrix(3, 2, 7) - >>> a[1, 0] - 7 - """ - assert self.validate_indices(loc) - return self.array[loc[0]][loc[1]] - - def __setitem__(self, loc: tuple[int, int], value: float) -> None: - """ - <method Matrix.__setitem__> - Set array[row][column] = value where loc = (row, column). - Example: - >>> a = Matrix(2, 3, 1) - >>> a[1, 2] = 51 - >>> a - Matrix consist of 2 rows and 3 columns - [ 1, 1, 1] - [ 1, 1, 51] - """ - assert self.validate_indices(loc) - self.array[loc[0]][loc[1]] = value - - def __add__(self, another: Matrix) -> Matrix: - """ - <method Matrix.__add__> - Return self + another. - Example: - >>> a = Matrix(2, 1, -4) - >>> b = Matrix(2, 1, 3) - >>> a+b - Matrix consist of 2 rows and 1 columns - [-1] - [-1] - """ - - # Validation - assert isinstance(another, Matrix) - assert self.row == another.row - assert self.column == another.column - - # Add - result = Matrix(self.row, self.column) - for r in range(self.row): - for c in range(self.column): - result[r, c] = self[r, c] + another[r, c] - return result - - def __neg__(self) -> Matrix: - """ - <method Matrix.__neg__> - Return -self. - Example: - >>> a = Matrix(2, 2, 3) - >>> a[0, 1] = a[1, 0] = -2 - >>> -a - Matrix consist of 2 rows and 2 columns - [-3, 2] - [ 2, -3] - """ - - result = Matrix(self.row, self.column) - for r in range(self.row): - for c in range(self.column): - result[r, c] = -self[r, c] - return result - - def __sub__(self, another: Matrix) -> Matrix: - return self + (-another) - - def __mul__(self, another: float | Matrix) -> Matrix: - """ - <method Matrix.__mul__> - Return self * another. - Example: - >>> a = Matrix(2, 3, 1) - >>> a[0,2] = a[1,2] = 3 - >>> a * -2 - Matrix consist of 2 rows and 3 columns - [-2, -2, -6] - [-2, -2, -6] - """ - - if isinstance(another, (int, float)): # Scalar multiplication - result = Matrix(self.row, self.column) - for r in range(self.row): - for c in range(self.column): - result[r, c] = self[r, c] * another - return result - elif isinstance(another, Matrix): # Matrix multiplication - assert self.column == another.row - result = Matrix(self.row, another.column) - for r in range(self.row): - for c in range(another.column): - for i in range(self.column): - result[r, c] += self[r, i] * another[i, c] - return result - else: - msg = f"Unsupported type given for another ({type(another)})" - raise TypeError(msg) - - def transpose(self) -> Matrix: - """ - <method Matrix.transpose> - Return self^T. - Example: - >>> a = Matrix(2, 3) - >>> for r in range(2): - ... for c in range(3): - ... a[r,c] = r*c - ... - >>> a.transpose() - Matrix consist of 3 rows and 2 columns - [0, 0] - [0, 1] - [0, 2] - """ - - result = Matrix(self.column, self.row) - for r in range(self.row): - for c in range(self.column): - result[c, r] = self[r, c] - return result - - def sherman_morrison(self, u: Matrix, v: Matrix) -> Any: - """ - <method Matrix.sherman_morrison> - Apply Sherman-Morrison formula in O(n^2). - To learn this formula, please look this: - https://en.wikipedia.org/wiki/Sherman%E2%80%93Morrison_formula - This method returns (A + uv^T)^(-1) where A^(-1) is self. Returns None if it's - impossible to calculate. - Warning: This method doesn't check if self is invertible. - Make sure self is invertible before execute this method. - Example: - >>> ainv = Matrix(3, 3, 0) - >>> for i in range(3): ainv[i,i] = 1 - ... - >>> u = Matrix(3, 1, 0) - >>> u[0,0], u[1,0], u[2,0] = 1, 2, -3 - >>> v = Matrix(3, 1, 0) - >>> v[0,0], v[1,0], v[2,0] = 4, -2, 5 - >>> ainv.sherman_morrison(u, v) - Matrix consist of 3 rows and 3 columns - [ 1.2857142857142856, -0.14285714285714285, 0.3571428571428571] - [ 0.5714285714285714, 0.7142857142857143, 0.7142857142857142] - [ -0.8571428571428571, 0.42857142857142855, -0.0714285714285714] - """ - - # Size validation - assert isinstance(u, Matrix) - assert isinstance(v, Matrix) - assert self.row == self.column == u.row == v.row # u, v should be column vector - assert u.column == v.column == 1 # u, v should be column vector - - # Calculate - v_t = v.transpose() - numerator_factor = (v_t * self * u)[0, 0] + 1 - if numerator_factor == 0: - return None # It's not invertible - return self - ((self * u) * (v_t * self) * (1.0 / numerator_factor)) - - -# Testing -if __name__ == "__main__": - - def test1() -> None: - # a^(-1) - ainv = Matrix(3, 3, 0) - for i in range(3): - ainv[i, i] = 1 - print(f"a^(-1) is {ainv}") - # u, v - u = Matrix(3, 1, 0) - u[0, 0], u[1, 0], u[2, 0] = 1, 2, -3 - v = Matrix(3, 1, 0) - v[0, 0], v[1, 0], v[2, 0] = 4, -2, 5 - print(f"u is {u}") - print(f"v is {v}") - print(f"uv^T is {u * v.transpose()}") - # Sherman Morrison - print(f"(a + uv^T)^(-1) is {ainv.sherman_morrison(u, v)}") - - def test2() -> None: - import doctest - - doctest.testmod() - - test2() diff --git a/matrix/spiral_print.py b/matrix/spiral_print.py deleted file mode 100644 index 88bde1db594d..000000000000 --- a/matrix/spiral_print.py +++ /dev/null @@ -1,133 +0,0 @@ -""" -This program print the matrix in spiral form. -This problem has been solved through recursive way. - Matrix must satisfy below conditions - i) matrix should be only one or two dimensional - ii) number of column of all rows should be equal -""" - - -def check_matrix(matrix: list[list[int]]) -> bool: - # must be - matrix = [list(row) for row in matrix] - if matrix and isinstance(matrix, list): - if isinstance(matrix[0], list): - prev_len = 0 - for row in matrix: - if prev_len == 0: - prev_len = len(row) - result = True - else: - result = prev_len == len(row) - else: - result = True - else: - result = False - - return result - - -def spiral_print_clockwise(a: list[list[int]]) -> None: - """ - >>> spiral_print_clockwise([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) - 1 - 2 - 3 - 4 - 8 - 12 - 11 - 10 - 9 - 5 - 6 - 7 - """ - if check_matrix(a) and len(a) > 0: - a = [list(row) for row in a] - mat_row = len(a) - if isinstance(a[0], list): - mat_col = len(a[0]) - else: - for dat in a: - print(dat) - return - - # horizotal printing increasing - for i in range(mat_col): - print(a[0][i]) - # vertical printing down - for i in range(1, mat_row): - print(a[i][mat_col - 1]) - # horizotal printing decreasing - if mat_row > 1: - for i in range(mat_col - 2, -1, -1): - print(a[mat_row - 1][i]) - # vertical printing up - for i in range(mat_row - 2, 0, -1): - print(a[i][0]) - remain_mat = [row[1 : mat_col - 1] for row in a[1 : mat_row - 1]] - if len(remain_mat) > 0: - spiral_print_clockwise(remain_mat) - else: - return - else: - print("Not a valid matrix") - return - - -# Other Easy to understand Approach - - -def spiral_traversal(matrix: list[list]) -> list[int]: - """ - >>> spiral_traversal([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) - [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7] - - Example: - matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] - Algorithm: - Step 1. first pop the 0 index list. (which is [1,2,3,4] and concatenate the - output of [step 2]) - Step 2. Now perform matrix's Transpose operation (Change rows to column - and vice versa) and reverse the resultant matrix. - Step 3. Pass the output of [2nd step], to same recursive function till - base case hits. - Dry Run: - Stage 1. - [1, 2, 3, 4] + spiral_traversal([ - [8, 12], [7, 11], [6, 10], [5, 9]] - ]) - Stage 2. - [1, 2, 3, 4, 8, 12] + spiral_traversal([ - [11, 10, 9], [7, 6, 5] - ]) - Stage 3. - [1, 2, 3, 4, 8, 12, 11, 10, 9] + spiral_traversal([ - [5], [6], [7] - ]) - Stage 4. - [1, 2, 3, 4, 8, 12, 11, 10, 9, 5] + spiral_traversal([ - [5], [6], [7] - ]) - Stage 5. - [1, 2, 3, 4, 8, 12, 11, 10, 9, 5] + spiral_traversal([[6, 7]]) - Stage 6. - [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7] + spiral_traversal([]) - """ - if matrix: - return list(matrix.pop(0)) + spiral_traversal( - [list(row) for row in zip(*matrix)][::-1] - ) - else: - return [] - - -# driver code -if __name__ == "__main__": - import doctest - - doctest.testmod() - - a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] - spiral_print_clockwise(a) diff --git a/matrix/tests/__init__.py b/matrix/tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/matrix/tests/pytest.ini b/matrix/tests/pytest.ini deleted file mode 100644 index 8a978b56ef8b..000000000000 --- a/matrix/tests/pytest.ini +++ /dev/null @@ -1,3 +0,0 @@ -[pytest] -markers = - mat_ops: tests for matrix operations diff --git a/matrix/tests/test_matrix_operation.py b/matrix/tests/test_matrix_operation.py deleted file mode 100644 index 21ed7e371fd8..000000000000 --- a/matrix/tests/test_matrix_operation.py +++ /dev/null @@ -1,120 +0,0 @@ -""" -Testing here assumes that numpy and linalg is ALWAYS correct!!!! - -If running from PyCharm you can place the following line in "Additional Arguments" for -the pytest run configuration --vv -m mat_ops -p no:cacheprovider -""" - -import logging - -# standard libraries -import sys - -import numpy as np -import pytest - -# Custom/local libraries -from matrix import matrix_operation as matop - -mat_a = [[12, 10], [3, 9]] -mat_b = [[3, 4], [7, 4]] -mat_c = [[3, 0, 2], [2, 0, -2], [0, 1, 1]] -mat_d = [[3, 0, -2], [2, 0, 2], [0, 1, 1]] -mat_e = [[3, 0, 2], [2, 0, -2], [0, 1, 1], [2, 0, -2]] -mat_f = [1] -mat_h = [2] - -logger = logging.getLogger() -logger.level = logging.DEBUG -stream_handler = logging.StreamHandler(sys.stdout) -logger.addHandler(stream_handler) - - -@pytest.mark.mat_ops -@pytest.mark.parametrize( - ("mat1", "mat2"), [(mat_a, mat_b), (mat_c, mat_d), (mat_d, mat_e), (mat_f, mat_h)] -) -def test_addition(mat1, mat2): - if (np.array(mat1)).shape < (2, 2) or (np.array(mat2)).shape < (2, 2): - logger.info(f"\n\t{test_addition.__name__} returned integer") - with pytest.raises(TypeError): - matop.add(mat1, mat2) - elif (np.array(mat1)).shape == (np.array(mat2)).shape: - logger.info(f"\n\t{test_addition.__name__} with same matrix dims") - act = (np.array(mat1) + np.array(mat2)).tolist() - theo = matop.add(mat1, mat2) - assert theo == act - else: - logger.info(f"\n\t{test_addition.__name__} with different matrix dims") - with pytest.raises(ValueError): - matop.add(mat1, mat2) - - -@pytest.mark.mat_ops -@pytest.mark.parametrize( - ("mat1", "mat2"), [(mat_a, mat_b), (mat_c, mat_d), (mat_d, mat_e), (mat_f, mat_h)] -) -def test_subtraction(mat1, mat2): - if (np.array(mat1)).shape < (2, 2) or (np.array(mat2)).shape < (2, 2): - logger.info(f"\n\t{test_subtraction.__name__} returned integer") - with pytest.raises(TypeError): - matop.subtract(mat1, mat2) - elif (np.array(mat1)).shape == (np.array(mat2)).shape: - logger.info(f"\n\t{test_subtraction.__name__} with same matrix dims") - act = (np.array(mat1) - np.array(mat2)).tolist() - theo = matop.subtract(mat1, mat2) - assert theo == act - else: - logger.info(f"\n\t{test_subtraction.__name__} with different matrix dims") - with pytest.raises(ValueError): - assert matop.subtract(mat1, mat2) - - -@pytest.mark.mat_ops -@pytest.mark.parametrize( - ("mat1", "mat2"), [(mat_a, mat_b), (mat_c, mat_d), (mat_d, mat_e), (mat_f, mat_h)] -) -def test_multiplication(mat1, mat2): - if (np.array(mat1)).shape < (2, 2) or (np.array(mat2)).shape < (2, 2): - logger.info(f"\n\t{test_multiplication.__name__} returned integer") - with pytest.raises(TypeError): - matop.add(mat1, mat2) - elif (np.array(mat1)).shape == (np.array(mat2)).shape: - logger.info(f"\n\t{test_multiplication.__name__} meets dim requirements") - act = (np.matmul(mat1, mat2)).tolist() - theo = matop.multiply(mat1, mat2) - assert theo == act - else: - logger.info( - f"\n\t{test_multiplication.__name__} does not meet dim requirements" - ) - with pytest.raises(ValueError): - assert matop.subtract(mat1, mat2) - - -@pytest.mark.mat_ops -def test_scalar_multiply(): - act = (3.5 * np.array(mat_a)).tolist() - theo = matop.scalar_multiply(mat_a, 3.5) - assert theo == act - - -@pytest.mark.mat_ops -def test_identity(): - act = (np.identity(5)).tolist() - theo = matop.identity(5) - assert theo == act - - -@pytest.mark.mat_ops -@pytest.mark.parametrize("mat", [mat_a, mat_b, mat_c, mat_d, mat_e, mat_f]) -def test_transpose(mat): - if (np.array(mat)).shape < (2, 2): - logger.info(f"\n\t{test_transpose.__name__} returned integer") - with pytest.raises(TypeError): - matop.transpose(mat) - else: - act = (np.transpose(mat)).tolist() - theo = matop.transpose(mat, return_map=False) - assert theo == act diff --git a/matrix/validate_sudoku_board.py b/matrix/validate_sudoku_board.py deleted file mode 100644 index a7e08d169059..000000000000 --- a/matrix/validate_sudoku_board.py +++ /dev/null @@ -1,167 +0,0 @@ -""" -LeetCode 36. Valid Sudoku -https://leetcode.com/problems/valid-sudoku/ -https://en.wikipedia.org/wiki/Sudoku - -Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be -validated according to the following rules: - -- Each row must contain the digits 1-9 without repetition. -- Each column must contain the digits 1-9 without repetition. -- Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 - without repetition. - -Note: - -A Sudoku board (partially filled) could be valid but is not necessarily -solvable. - -Only the filled cells need to be validated according to the mentioned rules. -""" - -from collections import defaultdict - -NUM_SQUARES = 9 -EMPTY_CELL = "." - - -def is_valid_sudoku_board(sudoku_board: list[list[str]]) -> bool: - """ - This function validates (but does not solve) a sudoku board. - The board may be valid but unsolvable. - - >>> is_valid_sudoku_board([ - ... ["5","3",".",".","7",".",".",".","."] - ... ,["6",".",".","1","9","5",".",".","."] - ... ,[".","9","8",".",".",".",".","6","."] - ... ,["8",".",".",".","6",".",".",".","3"] - ... ,["4",".",".","8",".","3",".",".","1"] - ... ,["7",".",".",".","2",".",".",".","6"] - ... ,[".","6",".",".",".",".","2","8","."] - ... ,[".",".",".","4","1","9",".",".","5"] - ... ,[".",".",".",".","8",".",".","7","9"] - ... ]) - True - >>> is_valid_sudoku_board([ - ... ["8","3",".",".","7",".",".",".","."] - ... ,["6",".",".","1","9","5",".",".","."] - ... ,[".","9","8",".",".",".",".","6","."] - ... ,["8",".",".",".","6",".",".",".","3"] - ... ,["4",".",".","8",".","3",".",".","1"] - ... ,["7",".",".",".","2",".",".",".","6"] - ... ,[".","6",".",".",".",".","2","8","."] - ... ,[".",".",".","4","1","9",".",".","5"] - ... ,[".",".",".",".","8",".",".","7","9"] - ... ]) - False - >>> is_valid_sudoku_board([ - ... ["1","2","3","4","5","6","7","8","9"] - ... ,["4","5","6","7","8","9","1","2","3"] - ... ,["7","8","9","1","2","3","4","5","6"] - ... ,[".",".",".",".",".",".",".",".","."] - ... ,[".",".",".",".",".",".",".",".","."] - ... ,[".",".",".",".",".",".",".",".","."] - ... ,[".",".",".",".",".",".",".",".","."] - ... ,[".",".",".",".",".",".",".",".","."] - ... ,[".",".",".",".",".",".",".",".","."] - ... ]) - True - >>> is_valid_sudoku_board([ - ... ["1","2","3",".",".",".",".",".","."] - ... ,["4","5","6",".",".",".",".",".","."] - ... ,["7","8","9",".",".",".",".",".","."] - ... ,[".",".",".","4","5","6",".",".","."] - ... ,[".",".",".","7","8","9",".",".","."] - ... ,[".",".",".","1","2","3",".",".","."] - ... ,[".",".",".",".",".",".","7","8","9"] - ... ,[".",".",".",".",".",".","1","2","3"] - ... ,[".",".",".",".",".",".","4","5","6"] - ... ]) - True - >>> is_valid_sudoku_board([ - ... ["1","2","3",".",".",".","5","6","4"] - ... ,["4","5","6",".",".",".","8","9","7"] - ... ,["7","8","9",".",".",".","2","3","1"] - ... ,[".",".",".","4","5","6",".",".","."] - ... ,[".",".",".","7","8","9",".",".","."] - ... ,[".",".",".","1","2","3",".",".","."] - ... ,["3","1","2",".",".",".","7","8","9"] - ... ,["6","4","5",".",".",".","1","2","3"] - ... ,["9","7","8",".",".",".","4","5","6"] - ... ]) - True - >>> is_valid_sudoku_board([ - ... ["1","2","3","4","5","6","7","8","9"] - ... ,["2",".",".",".",".",".",".",".","8"] - ... ,["3",".",".",".",".",".",".",".","7"] - ... ,["4",".",".",".",".",".",".",".","6"] - ... ,["5",".",".",".",".",".",".",".","5"] - ... ,["6",".",".",".",".",".",".",".","4"] - ... ,["7",".",".",".",".",".",".",".","3"] - ... ,["8",".",".",".",".",".",".",".","2"] - ... ,["9","8","7","6","5","4","3","2","1"] - ... ]) - False - >>> is_valid_sudoku_board([ - ... ["1","2","3","8","9","7","5","6","4"] - ... ,["4","5","6","2","3","1","8","9","7"] - ... ,["7","8","9","5","6","4","2","3","1"] - ... ,["2","3","1","4","5","6","9","7","8"] - ... ,["5","6","4","7","8","9","3","1","2"] - ... ,["8","9","7","1","2","3","6","4","5"] - ... ,["3","1","2","6","4","5","7","8","9"] - ... ,["6","4","5","9","7","8","1","2","3"] - ... ,["9","7","8","3","1","2","4","5","6"] - ... ]) - True - >>> is_valid_sudoku_board([["1", "2", "3", "4", "5", "6", "7", "8", "9"]]) - Traceback (most recent call last): - ... - ValueError: Sudoku boards must be 9x9 squares. - >>> is_valid_sudoku_board( - ... [["1"], ["2"], ["3"], ["4"], ["5"], ["6"], ["7"], ["8"], ["9"]] - ... ) - Traceback (most recent call last): - ... - ValueError: Sudoku boards must be 9x9 squares. - """ - if len(sudoku_board) != NUM_SQUARES or ( - any(len(row) != NUM_SQUARES for row in sudoku_board) - ): - error_message = f"Sudoku boards must be {NUM_SQUARES}x{NUM_SQUARES} squares." - raise ValueError(error_message) - - row_values: defaultdict[int, set[str]] = defaultdict(set) - col_values: defaultdict[int, set[str]] = defaultdict(set) - box_values: defaultdict[tuple[int, int], set[str]] = defaultdict(set) - - for row in range(NUM_SQUARES): - for col in range(NUM_SQUARES): - value = sudoku_board[row][col] - - if value == EMPTY_CELL: - continue - - box = (row // 3, col // 3) - - if ( - value in row_values[row] - or value in col_values[col] - or value in box_values[box] - ): - return False - - row_values[row].add(value) - col_values[col].add(value) - box_values[box].add(value) - - return True - - -if __name__ == "__main__": - from doctest import testmod - from timeit import timeit - - testmod() - print(timeit("is_valid_sudoku_board(valid_board)", globals=globals())) - print(timeit("is_valid_sudoku_board(invalid_board)", globals=globals())) diff --git a/networking_flow/__init__.py b/networking_flow/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/networking_flow/ford_fulkerson.py b/networking_flow/ford_fulkerson.py deleted file mode 100644 index b47d3b68f3d1..000000000000 --- a/networking_flow/ford_fulkerson.py +++ /dev/null @@ -1,113 +0,0 @@ -""" -Ford-Fulkerson Algorithm for Maximum Flow Problem -* https://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm - -Description: - (1) Start with initial flow as 0 - (2) Choose the augmenting path from source to sink and add the path to flow -""" - -graph = [ - [0, 16, 13, 0, 0, 0], - [0, 0, 10, 12, 0, 0], - [0, 4, 0, 0, 14, 0], - [0, 0, 9, 0, 0, 20], - [0, 0, 0, 7, 0, 4], - [0, 0, 0, 0, 0, 0], -] - - -def breadth_first_search(graph: list, source: int, sink: int, parents: list) -> bool: - """ - This function returns True if there is a node that has not iterated. - - Args: - graph: Adjacency matrix of graph - source: Source - sink: Sink - parents: Parent list - - Returns: - True if there is a node that has not iterated. - - >>> breadth_first_search(graph, 0, 5, [-1, -1, -1, -1, -1, -1]) - True - >>> breadth_first_search(graph, 0, 6, [-1, -1, -1, -1, -1, -1]) - Traceback (most recent call last): - ... - IndexError: list index out of range - """ - visited = [False] * len(graph) # Mark all nodes as not visited - queue = [] # breadth-first search queue - - # Source node - queue.append(source) - visited[source] = True - - while queue: - u = queue.pop(0) # Pop the front node - # Traverse all adjacent nodes of u - for ind, node in enumerate(graph[u]): - if visited[ind] is False and node > 0: - queue.append(ind) - visited[ind] = True - parents[ind] = u - return visited[sink] - - -def ford_fulkerson(graph: list, source: int, sink: int) -> int: - """ - This function returns the maximum flow from source to sink in the given graph. - - CAUTION: This function changes the given graph. - - Args: - graph: Adjacency matrix of graph - source: Source - sink: Sink - - Returns: - Maximum flow - - >>> test_graph = [ - ... [0, 16, 13, 0, 0, 0], - ... [0, 0, 10, 12, 0, 0], - ... [0, 4, 0, 0, 14, 0], - ... [0, 0, 9, 0, 0, 20], - ... [0, 0, 0, 7, 0, 4], - ... [0, 0, 0, 0, 0, 0], - ... ] - >>> ford_fulkerson(test_graph, 0, 5) - 23 - """ - # This array is filled by breadth-first search and to store path - parent = [-1] * (len(graph)) - max_flow = 0 - - # While there is a path from source to sink - while breadth_first_search(graph, source, sink, parent): - path_flow = int(1e9) # Infinite value - s = sink - - while s != source: - # Find the minimum value in the selected path - path_flow = min(path_flow, graph[parent[s]][s]) - s = parent[s] - - max_flow += path_flow - v = sink - - while v != source: - u = parent[v] - graph[u][v] -= path_flow - graph[v][u] += path_flow - v = parent[v] - - return max_flow - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"{ford_fulkerson(graph, source=0, sink=5) = }") diff --git a/networking_flow/minimum_cut.py b/networking_flow/minimum_cut.py deleted file mode 100644 index 164b45f1012a..000000000000 --- a/networking_flow/minimum_cut.py +++ /dev/null @@ -1,66 +0,0 @@ -# Minimum cut on Ford_Fulkerson algorithm. - -test_graph = [ - [0, 16, 13, 0, 0, 0], - [0, 0, 10, 12, 0, 0], - [0, 4, 0, 0, 14, 0], - [0, 0, 9, 0, 0, 20], - [0, 0, 0, 7, 0, 4], - [0, 0, 0, 0, 0, 0], -] - - -def bfs(graph, s, t, parent): - # Return True if there is node that has not iterated. - visited = [False] * len(graph) - queue = [s] - visited[s] = True - - while queue: - u = queue.pop(0) - for ind in range(len(graph[u])): - if visited[ind] is False and graph[u][ind] > 0: - queue.append(ind) - visited[ind] = True - parent[ind] = u - - return visited[t] - - -def mincut(graph, source, sink): - """This array is filled by BFS and to store path - >>> mincut(test_graph, source=0, sink=5) - [(1, 3), (4, 3), (4, 5)] - """ - parent = [-1] * (len(graph)) - max_flow = 0 - res = [] - temp = [i[:] for i in graph] # Record original cut, copy. - while bfs(graph, source, sink, parent): - path_flow = float("Inf") - s = sink - - while s != source: - # Find the minimum value in select path - path_flow = min(path_flow, graph[parent[s]][s]) - s = parent[s] - - max_flow += path_flow - v = sink - - while v != source: - u = parent[v] - graph[u][v] -= path_flow - graph[v][u] += path_flow - v = parent[v] - - for i in range(len(graph)): - for j in range(len(graph[0])): - if graph[i][j] == 0 and temp[i][j] > 0: - res.append((i, j)) - - return res - - -if __name__ == "__main__": - print(mincut(test_graph, source=0, sink=5)) diff --git a/neural_network/__init__.py b/neural_network/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/neural_network/activation_functions/__init__.py b/neural_network/activation_functions/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/neural_network/activation_functions/binary_step.py b/neural_network/activation_functions/binary_step.py deleted file mode 100644 index d3d774602182..000000000000 --- a/neural_network/activation_functions/binary_step.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -This script demonstrates the implementation of the Binary Step function. - -It's an activation function in which the neuron is activated if the input is positive -or 0, else it is deactivated - -It's a simple activation function which is mentioned in this wikipedia article: -https://en.wikipedia.org/wiki/Activation_function -""" - -import numpy as np - - -def binary_step(vector: np.ndarray) -> np.ndarray: - """ - Implements the binary step function - - Parameters: - vector (ndarray): A vector that consists of numeric values - - Returns: - vector (ndarray): Input vector after applying binary step function - - >>> vector = np.array([-1.2, 0, 2, 1.45, -3.7, 0.3]) - >>> binary_step(vector) - array([0, 1, 1, 1, 0, 1]) - """ - - return np.where(vector >= 0, 1, 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/exponential_linear_unit.py b/neural_network/activation_functions/exponential_linear_unit.py deleted file mode 100644 index 7a3cf1d84e71..000000000000 --- a/neural_network/activation_functions/exponential_linear_unit.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -Implements the Exponential Linear Unit or ELU function. - -The function takes a vector of K real numbers and a real number alpha as -input and then applies the ELU function to each element of the vector. - -Script inspired from its corresponding Wikipedia article -https://en.wikipedia.org/wiki/Rectifier_(neural_networks) -""" - -import numpy as np - - -def exponential_linear_unit(vector: np.ndarray, alpha: float) -> np.ndarray: - """ - Implements the ELU activation function. - Parameters: - vector: the array containing input of elu activation - alpha: hyper-parameter - return: - elu (np.array): The input numpy array after applying elu. - - Mathematically, f(x) = x, x>0 else (alpha * (e^x -1)), x<=0, alpha >=0 - - Examples: - >>> exponential_linear_unit(vector=np.array([2.3,0.6,-2,-3.8]), alpha=0.3) - array([ 2.3 , 0.6 , -0.25939942, -0.29328877]) - - >>> exponential_linear_unit(vector=np.array([-9.2,-0.3,0.45,-4.56]), alpha=0.067) - array([-0.06699323, -0.01736518, 0.45 , -0.06629904]) - - - """ - return np.where(vector > 0, vector, (alpha * (np.exp(vector) - 1))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/gaussian_error_linear_unit.py b/neural_network/activation_functions/gaussian_error_linear_unit.py deleted file mode 100644 index b3cbd7810716..000000000000 --- a/neural_network/activation_functions/gaussian_error_linear_unit.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -This script demonstrates an implementation of the Gaussian Error Linear Unit function. -* https://en.wikipedia.org/wiki/Activation_function#Comparison_of_activation_functions - -The function takes a vector of K real numbers as input and returns x * sigmoid(1.702*x). -Gaussian Error Linear Unit (GELU) is a high-performing neural network activation -function. - -This script is inspired by a corresponding research paper. -* https://arxiv.org/abs/1606.08415 -""" - -import numpy as np - - -def sigmoid(vector: np.ndarray) -> np.ndarray: - """ - Mathematical function sigmoid takes a vector x of K real numbers as input and - returns 1/ (1 + e^-x). - https://en.wikipedia.org/wiki/Sigmoid_function - - >>> sigmoid(np.array([-1.0, 1.0, 2.0])) - array([0.26894142, 0.73105858, 0.88079708]) - """ - return 1 / (1 + np.exp(-vector)) - - -def gaussian_error_linear_unit(vector: np.ndarray) -> np.ndarray: - """ - Implements the Gaussian Error Linear Unit (GELU) function - - Parameters: - vector (np.ndarray): A numpy array of shape (1, n) consisting of real values - - Returns: - gelu_vec (np.ndarray): The input numpy array, after applying gelu - - Examples: - >>> gaussian_error_linear_unit(np.array([-1.0, 1.0, 2.0])) - array([-0.15420423, 0.84579577, 1.93565862]) - - >>> gaussian_error_linear_unit(np.array([-3])) - array([-0.01807131]) - """ - return vector * sigmoid(1.702 * vector) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/leaky_rectified_linear_unit.py b/neural_network/activation_functions/leaky_rectified_linear_unit.py deleted file mode 100644 index 019086fd9821..000000000000 --- a/neural_network/activation_functions/leaky_rectified_linear_unit.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Leaky Rectified Linear Unit (Leaky ReLU) - -Use Case: Leaky ReLU addresses the problem of the vanishing gradient. -For more detailed information, you can refer to the following link: -https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Leaky_ReLU -""" - -import numpy as np - - -def leaky_rectified_linear_unit(vector: np.ndarray, alpha: float) -> np.ndarray: - """ - Implements the LeakyReLU activation function. - - Parameters: - vector (np.ndarray): The input array for LeakyReLU activation. - alpha (float): The slope for negative values. - - Returns: - np.ndarray: The input array after applying the LeakyReLU activation. - - Formula: f(x) = x if x > 0 else f(x) = alpha * x - - Examples: - >>> leaky_rectified_linear_unit(vector=np.array([2.3,0.6,-2,-3.8]), alpha=0.3) - array([ 2.3 , 0.6 , -0.6 , -1.14]) - - >>> leaky_rectified_linear_unit(np.array([-9.2, -0.3, 0.45, -4.56]), alpha=0.067) - array([-0.6164 , -0.0201 , 0.45 , -0.30552]) - - """ - return np.where(vector > 0, vector, alpha * vector) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/mish.py b/neural_network/activation_functions/mish.py deleted file mode 100644 index 57a91413fe50..000000000000 --- a/neural_network/activation_functions/mish.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Mish Activation Function - -Use Case: Improved version of the ReLU activation function used in Computer Vision. -For more detailed information, you can refer to the following link: -https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Mish -""" - -import numpy as np - -from .softplus import softplus - - -def mish(vector: np.ndarray) -> np.ndarray: - """ - Implements the Mish activation function. - - Parameters: - vector (np.ndarray): The input array for Mish activation. - - Returns: - np.ndarray: The input array after applying the Mish activation. - - Formula: - f(x) = x * tanh(softplus(x)) = x * tanh(ln(1 + e^x)) - - Examples: - >>> mish(vector=np.array([2.3,0.6,-2,-3.8])) - array([ 2.26211893, 0.46613649, -0.25250148, -0.08405831]) - - >>> mish(np.array([-9.2, -0.3, 0.45, -4.56])) - array([-0.00092952, -0.15113318, 0.33152014, -0.04745745]) - - """ - return vector * np.tanh(softplus(vector)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/rectified_linear_unit.py b/neural_network/activation_functions/rectified_linear_unit.py deleted file mode 100644 index 2d5cf96fd387..000000000000 --- a/neural_network/activation_functions/rectified_linear_unit.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -This script demonstrates the implementation of the ReLU function. - -It's a kind of activation function defined as the positive part of its argument in the -context of neural network. -The function takes a vector of K real numbers as input and then argmax(x, 0). -After through ReLU, the element of the vector always 0 or real number. - -Script inspired from its corresponding Wikipedia article -https://en.wikipedia.org/wiki/Rectifier_(neural_networks) -""" - -from __future__ import annotations - -import numpy as np - - -def relu(vector: list[float]): - """ - Implements the relu function - - Parameters: - vector (np.array,list,tuple): A numpy array of shape (1,n) - consisting of real values or a similar list,tuple - - - Returns: - relu_vec (np.array): The input numpy array, after applying - relu. - - >>> vec = np.array([-1, 0, 5]) - >>> relu(vec) - array([0, 0, 5]) - """ - - # compare two arrays and then return element-wise maxima. - return np.maximum(0, vector) - - -if __name__ == "__main__": - print(np.array(relu([-1, 0, 5]))) # --> [0, 0, 5] diff --git a/neural_network/activation_functions/scaled_exponential_linear_unit.py b/neural_network/activation_functions/scaled_exponential_linear_unit.py deleted file mode 100644 index f91dc6852136..000000000000 --- a/neural_network/activation_functions/scaled_exponential_linear_unit.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -Implements the Scaled Exponential Linear Unit or SELU function. -The function takes a vector of K real numbers and two real numbers -alpha(default = 1.6732) & lambda (default = 1.0507) as input and -then applies the SELU function to each element of the vector. -SELU is a self-normalizing activation function. It is a variant -of the ELU. The main advantage of SELU is that we can be sure -that the output will always be standardized due to its -self-normalizing behavior. That means there is no need to -include Batch-Normalization layers. -References : -https://iq.opengenus.org/scaled-exponential-linear-unit/ -""" - -import numpy as np - - -def scaled_exponential_linear_unit( - vector: np.ndarray, alpha: float = 1.6732, lambda_: float = 1.0507 -) -> np.ndarray: - """ - Applies the Scaled Exponential Linear Unit function to each element of the vector. - Parameters : - vector : np.ndarray - alpha : float (default = 1.6732) - lambda_ : float (default = 1.0507) - - Returns : np.ndarray - Formula : f(x) = lambda_ * x if x > 0 - lambda_ * alpha * (e**x - 1) if x <= 0 - Examples : - >>> scaled_exponential_linear_unit(vector=np.array([1.3, 3.7, 2.4])) - array([1.36591, 3.88759, 2.52168]) - - >>> scaled_exponential_linear_unit(vector=np.array([1.3, 4.7, 8.2])) - array([1.36591, 4.93829, 8.61574]) - """ - return lambda_ * np.where(vector > 0, vector, alpha * (np.exp(vector) - 1)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/soboleva_modified_hyperbolic_tangent.py b/neural_network/activation_functions/soboleva_modified_hyperbolic_tangent.py deleted file mode 100644 index a053e690ba44..000000000000 --- a/neural_network/activation_functions/soboleva_modified_hyperbolic_tangent.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -This script implements the Soboleva Modified Hyperbolic Tangent function. - -The function applies the Soboleva Modified Hyperbolic Tangent function -to each element of the vector. - -More details about the activation function can be found on: -https://en.wikipedia.org/wiki/Soboleva_modified_hyperbolic_tangent -""" - -import numpy as np - - -def soboleva_modified_hyperbolic_tangent( - vector: np.ndarray, a_value: float, b_value: float, c_value: float, d_value: float -) -> np.ndarray: - """ - Implements the Soboleva Modified Hyperbolic Tangent function - - Parameters: - vector (ndarray): A vector that consists of numeric values - a_value (float): parameter a of the equation - b_value (float): parameter b of the equation - c_value (float): parameter c of the equation - d_value (float): parameter d of the equation - - Returns: - vector (ndarray): Input array after applying SMHT function - - >>> vector = np.array([5.4, -2.4, 6.3, -5.23, 3.27, 0.56]) - >>> soboleva_modified_hyperbolic_tangent(vector, 0.2, 0.4, 0.6, 0.8) - array([ 0.11075085, -0.28236685, 0.07861169, -0.1180085 , 0.22999056, - 0.1566043 ]) - """ - - # Separate the numerator and denominator for simplicity - # Calculate the numerator and denominator element-wise - numerator = np.exp(a_value * vector) - np.exp(-b_value * vector) - denominator = np.exp(c_value * vector) + np.exp(-d_value * vector) - - # Calculate and return the final result element-wise - return numerator / denominator - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/softplus.py b/neural_network/activation_functions/softplus.py deleted file mode 100644 index 35fdf41afc96..000000000000 --- a/neural_network/activation_functions/softplus.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -Softplus Activation Function - -Use Case: The Softplus function is a smooth approximation of the ReLU function. -For more detailed information, you can refer to the following link: -https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Softplus -""" - -import numpy as np - - -def softplus(vector: np.ndarray) -> np.ndarray: - """ - Implements the Softplus activation function. - - Parameters: - vector (np.ndarray): The input array for the Softplus activation. - - Returns: - np.ndarray: The input array after applying the Softplus activation. - - Formula: f(x) = ln(1 + e^x) - - Examples: - >>> softplus(np.array([2.3, 0.6, -2, -3.8])) - array([2.39554546, 1.03748795, 0.12692801, 0.02212422]) - - >>> softplus(np.array([-9.2, -0.3, 0.45, -4.56])) - array([1.01034298e-04, 5.54355244e-01, 9.43248946e-01, 1.04077103e-02]) - """ - return np.log(1 + np.exp(vector)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/squareplus.py b/neural_network/activation_functions/squareplus.py deleted file mode 100644 index 40fa800d6b4a..000000000000 --- a/neural_network/activation_functions/squareplus.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Squareplus Activation Function - -Use Case: Squareplus designed to enhance positive values and suppress negative values. -For more detailed information, you can refer to the following link: -https://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Squareplus -""" - -import numpy as np - - -def squareplus(vector: np.ndarray, beta: float) -> np.ndarray: - """ - Implements the SquarePlus activation function. - - Parameters: - vector (np.ndarray): The input array for the SquarePlus activation. - beta (float): size of the curved region - - Returns: - np.ndarray: The input array after applying the SquarePlus activation. - - Formula: f(x) = ( x + sqrt(x^2 + b) ) / 2 - - Examples: - >>> squareplus(np.array([2.3, 0.6, -2, -3.8]), beta=2) - array([2.5 , 1.06811457, 0.22474487, 0.12731349]) - - >>> squareplus(np.array([-9.2, -0.3, 0.45, -4.56]), beta=3) - array([0.0808119 , 0.72891979, 1.11977651, 0.15893419]) - """ - return (vector + np.sqrt(vector**2 + beta)) / 2 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/activation_functions/swish.py b/neural_network/activation_functions/swish.py deleted file mode 100644 index ab3d8fa1203b..000000000000 --- a/neural_network/activation_functions/swish.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -This script demonstrates the implementation of the Sigmoid Linear Unit (SiLU) -or swish function. -* https://en.wikipedia.org/wiki/Rectifier_(neural_networks) -* https://en.wikipedia.org/wiki/Swish_function - -The function takes a vector x of K real numbers as input and returns x * sigmoid(x). -Swish is a smooth, non-monotonic function defined as f(x) = x * sigmoid(x). -Extensive experiments shows that Swish consistently matches or outperforms ReLU -on deep networks applied to a variety of challenging domains such as -image classification and machine translation. - -This script is inspired by a corresponding research paper. -* https://arxiv.org/abs/1710.05941 -* https://blog.paperspace.com/swish-activation-function/ -""" - -import numpy as np - - -def sigmoid(vector: np.ndarray) -> np.ndarray: - """ - Mathematical function sigmoid takes a vector x of K real numbers as input and - returns 1/ (1 + e^-x). - https://en.wikipedia.org/wiki/Sigmoid_function - - >>> sigmoid(np.array([-1.0, 1.0, 2.0])) - array([0.26894142, 0.73105858, 0.88079708]) - """ - return 1 / (1 + np.exp(-vector)) - - -def sigmoid_linear_unit(vector: np.ndarray) -> np.ndarray: - """ - Implements the Sigmoid Linear Unit (SiLU) or swish function - - Parameters: - vector (np.ndarray): A numpy array consisting of real values - - Returns: - swish_vec (np.ndarray): The input numpy array, after applying swish - - Examples: - >>> sigmoid_linear_unit(np.array([-1.0, 1.0, 2.0])) - array([-0.26894142, 0.73105858, 1.76159416]) - - >>> sigmoid_linear_unit(np.array([-2])) - array([-0.23840584]) - """ - return vector * sigmoid(vector) - - -def swish(vector: np.ndarray, trainable_parameter: int) -> np.ndarray: - """ - Parameters: - vector (np.ndarray): A numpy array consisting of real values - trainable_parameter: Use to implement various Swish Activation Functions - - Returns: - swish_vec (np.ndarray): The input numpy array, after applying swish - - Examples: - >>> swish(np.array([-1.0, 1.0, 2.0]), 2) - array([-0.11920292, 0.88079708, 1.96402758]) - - >>> swish(np.array([-2]), 1) - array([-0.23840584]) - """ - return vector * sigmoid(trainable_parameter * vector) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/neural_network/back_propagation_neural_network.py b/neural_network/back_propagation_neural_network.py deleted file mode 100644 index 182f759c5fc7..000000000000 --- a/neural_network/back_propagation_neural_network.py +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/python - -""" - -A Framework of Back Propagation Neural Network (BP) model - -Easy to use: - * add many layers as you want ! ! ! - * clearly see how the loss decreasing -Easy to expand: - * more activation functions - * more loss functions - * more optimization method - -Author: Stephen Lee -Github : https://github.com/RiptideBo -Date: 2017.11.23 - -""" - -import numpy as np -from matplotlib import pyplot as plt - - -def sigmoid(x: np.ndarray) -> np.ndarray: - return 1 / (1 + np.exp(-x)) - - -class DenseLayer: - """ - Layers of BP neural network - """ - - def __init__( - self, units, activation=None, learning_rate=None, is_input_layer=False - ): - """ - common connected layer of bp network - :param units: numbers of neural units - :param activation: activation function - :param learning_rate: learning rate for paras - :param is_input_layer: whether it is input layer or not - """ - self.units = units - self.weight = None - self.bias = None - self.activation = activation - if learning_rate is None: - learning_rate = 0.3 - self.learn_rate = learning_rate - self.is_input_layer = is_input_layer - - def initializer(self, back_units): - rng = np.random.default_rng() - self.weight = np.asmatrix(rng.normal(0, 0.5, (self.units, back_units))) - self.bias = np.asmatrix(rng.normal(0, 0.5, self.units)).T - if self.activation is None: - self.activation = sigmoid - - def cal_gradient(self): - # activation function may be sigmoid or linear - if self.activation == sigmoid: - gradient_mat = np.dot(self.output, (1 - self.output).T) - gradient_activation = np.diag(np.diag(gradient_mat)) - else: - gradient_activation = 1 - return gradient_activation - - def forward_propagation(self, xdata): - self.xdata = xdata - if self.is_input_layer: - # input layer - self.wx_plus_b = xdata - self.output = xdata - return xdata - else: - self.wx_plus_b = np.dot(self.weight, self.xdata) - self.bias - self.output = self.activation(self.wx_plus_b) - return self.output - - def back_propagation(self, gradient): - gradient_activation = self.cal_gradient() # i * i 维 - gradient = np.asmatrix(np.dot(gradient.T, gradient_activation)) - - self._gradient_weight = np.asmatrix(self.xdata) - self._gradient_bias = -1 - self._gradient_x = self.weight - - self.gradient_weight = np.dot(gradient.T, self._gradient_weight.T) - self.gradient_bias = gradient * self._gradient_bias - self.gradient = np.dot(gradient, self._gradient_x).T - # upgrade: the Negative gradient direction - self.weight = self.weight - self.learn_rate * self.gradient_weight - self.bias = self.bias - self.learn_rate * self.gradient_bias.T - # updates the weights and bias according to learning rate (0.3 if undefined) - return self.gradient - - -class BPNN: - """ - Back Propagation Neural Network model - """ - - def __init__(self): - self.layers = [] - self.train_mse = [] - self.fig_loss = plt.figure() - self.ax_loss = self.fig_loss.add_subplot(1, 1, 1) - - def add_layer(self, layer): - self.layers.append(layer) - - def build(self): - for i, layer in enumerate(self.layers[:]): - if i < 1: - layer.is_input_layer = True - else: - layer.initializer(self.layers[i - 1].units) - - def summary(self): - for i, layer in enumerate(self.layers[:]): - print(f"------- layer {i} -------") - print("weight.shape ", np.shape(layer.weight)) - print("bias.shape ", np.shape(layer.bias)) - - def train(self, xdata, ydata, train_round, accuracy): - self.train_round = train_round - self.accuracy = accuracy - - self.ax_loss.hlines(self.accuracy, 0, self.train_round * 1.1) - - x_shape = np.shape(xdata) - for _ in range(train_round): - all_loss = 0 - for row in range(x_shape[0]): - _xdata = np.asmatrix(xdata[row, :]).T - _ydata = np.asmatrix(ydata[row, :]).T - - # forward propagation - for layer in self.layers: - _xdata = layer.forward_propagation(_xdata) - - loss, gradient = self.cal_loss(_ydata, _xdata) - all_loss = all_loss + loss - - # back propagation: the input_layer does not upgrade - for layer in self.layers[:0:-1]: - gradient = layer.back_propagation(gradient) - - mse = all_loss / x_shape[0] - self.train_mse.append(mse) - - self.plot_loss() - - if mse < self.accuracy: - print("----达到精度----") - return mse - return None - - def cal_loss(self, ydata, ydata_): - self.loss = np.sum(np.power((ydata - ydata_), 2)) - self.loss_gradient = 2 * (ydata_ - ydata) - # vector (shape is the same as _ydata.shape) - return self.loss, self.loss_gradient - - def plot_loss(self): - if self.ax_loss.lines: - self.ax_loss.lines.remove(self.ax_loss.lines[0]) - self.ax_loss.plot(self.train_mse, "r-") - plt.ion() - plt.xlabel("step") - plt.ylabel("loss") - plt.show() - plt.pause(0.1) - - -def example(): - rng = np.random.default_rng() - x = rng.normal(size=(10, 10)) - y = np.asarray( - [ - [0.8, 0.4], - [0.4, 0.3], - [0.34, 0.45], - [0.67, 0.32], - [0.88, 0.67], - [0.78, 0.77], - [0.55, 0.66], - [0.55, 0.43], - [0.54, 0.1], - [0.1, 0.5], - ] - ) - model = BPNN() - for i in (10, 20, 30, 2): - model.add_layer(DenseLayer(i)) - model.build() - model.summary() - model.train(xdata=x, ydata=y, train_round=100, accuracy=0.01) - - -if __name__ == "__main__": - example() diff --git a/neural_network/convolution_neural_network.py b/neural_network/convolution_neural_network.py deleted file mode 100644 index d4ac360a98de..000000000000 --- a/neural_network/convolution_neural_network.py +++ /dev/null @@ -1,357 +0,0 @@ -""" - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - -Name - - CNN - Convolution Neural Network For Photo Recognizing -Goal - - Recognize Handwriting Word Photo -Detail: Total 5 layers neural network - * Convolution layer - * Pooling layer - * Input layer layer of BP - * Hidden layer of BP - * Output layer of BP -Author: Stephen Lee -Github: 245885195@qq.com -Date: 2017.9.20 -- - - - - -- - - - - - - - - - - - - - - - - - - - - - - -""" - -import pickle - -import numpy as np -from matplotlib import pyplot as plt - - -class CNN: - def __init__( - self, conv1_get, size_p1, bp_num1, bp_num2, bp_num3, rate_w=0.2, rate_t=0.2 - ): - """ - :param conv1_get: [a,c,d], size, number, step of convolution kernel - :param size_p1: pooling size - :param bp_num1: units number of flatten layer - :param bp_num2: units number of hidden layer - :param bp_num3: units number of output layer - :param rate_w: rate of weight learning - :param rate_t: rate of threshold learning - """ - self.num_bp1 = bp_num1 - self.num_bp2 = bp_num2 - self.num_bp3 = bp_num3 - self.conv1 = conv1_get[:2] - self.step_conv1 = conv1_get[2] - self.size_pooling1 = size_p1 - self.rate_weight = rate_w - self.rate_thre = rate_t - rng = np.random.default_rng() - self.w_conv1 = [ - np.asmatrix(-1 * rng.random((self.conv1[0], self.conv1[0])) + 0.5) - for i in range(self.conv1[1]) - ] - self.wkj = np.asmatrix(-1 * rng.random((self.num_bp3, self.num_bp2)) + 0.5) - self.vji = np.asmatrix(-1 * rng.random((self.num_bp2, self.num_bp1)) + 0.5) - self.thre_conv1 = -2 * rng.random(self.conv1[1]) + 1 - self.thre_bp2 = -2 * rng.random(self.num_bp2) + 1 - self.thre_bp3 = -2 * rng.random(self.num_bp3) + 1 - - def save_model(self, save_path): - # save model dict with pickle - model_dic = { - "num_bp1": self.num_bp1, - "num_bp2": self.num_bp2, - "num_bp3": self.num_bp3, - "conv1": self.conv1, - "step_conv1": self.step_conv1, - "size_pooling1": self.size_pooling1, - "rate_weight": self.rate_weight, - "rate_thre": self.rate_thre, - "w_conv1": self.w_conv1, - "wkj": self.wkj, - "vji": self.vji, - "thre_conv1": self.thre_conv1, - "thre_bp2": self.thre_bp2, - "thre_bp3": self.thre_bp3, - } - with open(save_path, "wb") as f: - pickle.dump(model_dic, f) - - print(f"Model saved: {save_path}") - - @classmethod - def read_model(cls, model_path): - # read saved model - with open(model_path, "rb") as f: - model_dic = pickle.load(f) # noqa: S301 - - conv_get = model_dic.get("conv1") - conv_get.append(model_dic.get("step_conv1")) - size_p1 = model_dic.get("size_pooling1") - bp1 = model_dic.get("num_bp1") - bp2 = model_dic.get("num_bp2") - bp3 = model_dic.get("num_bp3") - r_w = model_dic.get("rate_weight") - r_t = model_dic.get("rate_thre") - # create model instance - conv_ins = CNN(conv_get, size_p1, bp1, bp2, bp3, r_w, r_t) - # modify model parameter - conv_ins.w_conv1 = model_dic.get("w_conv1") - conv_ins.wkj = model_dic.get("wkj") - conv_ins.vji = model_dic.get("vji") - conv_ins.thre_conv1 = model_dic.get("thre_conv1") - conv_ins.thre_bp2 = model_dic.get("thre_bp2") - conv_ins.thre_bp3 = model_dic.get("thre_bp3") - return conv_ins - - def sig(self, x): - return 1 / (1 + np.exp(-1 * x)) - - def do_round(self, x): - return round(x, 3) - - def convolute(self, data, convs, w_convs, thre_convs, conv_step): - # convolution process - size_conv = convs[0] - num_conv = convs[1] - size_data = np.shape(data)[0] - # get the data slice of original image data, data_focus - data_focus = [] - for i_focus in range(0, size_data - size_conv + 1, conv_step): - for j_focus in range(0, size_data - size_conv + 1, conv_step): - focus = data[ - i_focus : i_focus + size_conv, j_focus : j_focus + size_conv - ] - data_focus.append(focus) - # calculate the feature map of every single kernel, and saved as list of matrix - data_featuremap = [] - size_feature_map = int((size_data - size_conv) / conv_step + 1) - for i_map in range(num_conv): - featuremap = [] - for i_focus in range(len(data_focus)): - net_focus = ( - np.sum(np.multiply(data_focus[i_focus], w_convs[i_map])) - - thre_convs[i_map] - ) - featuremap.append(self.sig(net_focus)) - featuremap = np.asmatrix(featuremap).reshape( - size_feature_map, size_feature_map - ) - data_featuremap.append(featuremap) - - # expanding the data slice to one dimension - focus1_list = [] - for each_focus in data_focus: - focus1_list.extend(self.Expand_Mat(each_focus)) - focus_list = np.asarray(focus1_list) - return focus_list, data_featuremap - - def pooling(self, featuremaps, size_pooling, pooling_type="average_pool"): - # pooling process - size_map = len(featuremaps[0]) - size_pooled = int(size_map / size_pooling) - featuremap_pooled = [] - for i_map in range(len(featuremaps)): - feature_map = featuremaps[i_map] - map_pooled = [] - for i_focus in range(0, size_map, size_pooling): - for j_focus in range(0, size_map, size_pooling): - focus = feature_map[ - i_focus : i_focus + size_pooling, - j_focus : j_focus + size_pooling, - ] - if pooling_type == "average_pool": - # average pooling - map_pooled.append(np.average(focus)) - elif pooling_type == "max_pooling": - # max pooling - map_pooled.append(np.max(focus)) - map_pooled = np.asmatrix(map_pooled).reshape(size_pooled, size_pooled) - featuremap_pooled.append(map_pooled) - return featuremap_pooled - - def _expand(self, data): - # expanding three dimension data to one dimension list - data_expanded = [] - for i in range(len(data)): - shapes = np.shape(data[i]) - data_listed = data[i].reshape(1, shapes[0] * shapes[1]) - data_listed = data_listed.getA().tolist()[0] - data_expanded.extend(data_listed) - data_expanded = np.asarray(data_expanded) - return data_expanded - - def _expand_mat(self, data_mat): - # expanding matrix to one dimension list - data_mat = np.asarray(data_mat) - shapes = np.shape(data_mat) - data_expanded = data_mat.reshape(1, shapes[0] * shapes[1]) - return data_expanded - - def _calculate_gradient_from_pool( - self, out_map, pd_pool, num_map, size_map, size_pooling - ): - """ - calculate the gradient from the data slice of pool layer - pd_pool: list of matrix - out_map: the shape of data slice(size_map*size_map) - return: pd_all: list of matrix, [num, size_map, size_map] - """ - pd_all = [] - i_pool = 0 - for i_map in range(num_map): - pd_conv1 = np.ones((size_map, size_map)) - for i in range(0, size_map, size_pooling): - for j in range(0, size_map, size_pooling): - pd_conv1[i : i + size_pooling, j : j + size_pooling] = pd_pool[ - i_pool - ] - i_pool = i_pool + 1 - pd_conv2 = np.multiply( - pd_conv1, np.multiply(out_map[i_map], (1 - out_map[i_map])) - ) - pd_all.append(pd_conv2) - return pd_all - - def train( - self, patterns, datas_train, datas_teach, n_repeat, error_accuracy, draw_e=bool - ): - # model training - print("----------------------Start Training-------------------------") - print((" - - Shape: Train_Data ", np.shape(datas_train))) - print((" - - Shape: Teach_Data ", np.shape(datas_teach))) - rp = 0 - all_mse = [] - mse = 10000 - while rp < n_repeat and mse >= error_accuracy: - error_count = 0 - print(f"-------------Learning Time {rp}--------------") - for p in range(len(datas_train)): - # print('------------Learning Image: %d--------------'%p) - data_train = np.asmatrix(datas_train[p]) - data_teach = np.asarray(datas_teach[p]) - data_focus1, data_conved1 = self.convolute( - data_train, - self.conv1, - self.w_conv1, - self.thre_conv1, - conv_step=self.step_conv1, - ) - data_pooled1 = self.pooling(data_conved1, self.size_pooling1) - shape_featuremap1 = np.shape(data_conved1) - """ - print(' -----original shape ', np.shape(data_train)) - print(' ---- after convolution ',np.shape(data_conv1)) - print(' -----after pooling ',np.shape(data_pooled1)) - """ - data_bp_input = self._expand(data_pooled1) - bp_out1 = data_bp_input - - bp_net_j = np.dot(bp_out1, self.vji.T) - self.thre_bp2 - bp_out2 = self.sig(bp_net_j) - bp_net_k = np.dot(bp_out2, self.wkj.T) - self.thre_bp3 - bp_out3 = self.sig(bp_net_k) - - # --------------Model Leaning ------------------------ - # calculate error and gradient--------------- - pd_k_all = np.multiply( - (data_teach - bp_out3), np.multiply(bp_out3, (1 - bp_out3)) - ) - pd_j_all = np.multiply( - np.dot(pd_k_all, self.wkj), np.multiply(bp_out2, (1 - bp_out2)) - ) - pd_i_all = np.dot(pd_j_all, self.vji) - - pd_conv1_pooled = pd_i_all / (self.size_pooling1 * self.size_pooling1) - pd_conv1_pooled = pd_conv1_pooled.T.getA().tolist() - pd_conv1_all = self._calculate_gradient_from_pool( - data_conved1, - pd_conv1_pooled, - shape_featuremap1[0], - shape_featuremap1[1], - self.size_pooling1, - ) - # weight and threshold learning process--------- - # convolution layer - for k_conv in range(self.conv1[1]): - pd_conv_list = self._expand_mat(pd_conv1_all[k_conv]) - delta_w = self.rate_weight * np.dot(pd_conv_list, data_focus1) - - self.w_conv1[k_conv] = self.w_conv1[k_conv] + delta_w.reshape( - (self.conv1[0], self.conv1[0]) - ) - - self.thre_conv1[k_conv] = ( - self.thre_conv1[k_conv] - - np.sum(pd_conv1_all[k_conv]) * self.rate_thre - ) - # all connected layer - self.wkj = self.wkj + pd_k_all.T * bp_out2 * self.rate_weight - self.vji = self.vji + pd_j_all.T * bp_out1 * self.rate_weight - self.thre_bp3 = self.thre_bp3 - pd_k_all * self.rate_thre - self.thre_bp2 = self.thre_bp2 - pd_j_all * self.rate_thre - # calculate the sum error of all single image - errors = np.sum(abs(data_teach - bp_out3)) - error_count += errors - # print(' ----Teach ',data_teach) - # print(' ----BP_output ',bp_out3) - rp = rp + 1 - mse = error_count / patterns - all_mse.append(mse) - - def draw_error(): - yplot = [error_accuracy for i in range(int(n_repeat * 1.2))] - plt.plot(all_mse, "+-") - plt.plot(yplot, "r--") - plt.xlabel("Learning Times") - plt.ylabel("All_mse") - plt.grid(True, alpha=0.5) - plt.show() - - print("------------------Training Complete---------------------") - print((" - - Training epoch: ", rp, f" - - Mse: {mse:.6f}")) - if draw_e: - draw_error() - return mse - - def predict(self, datas_test): - # model predict - produce_out = [] - print("-------------------Start Testing-------------------------") - print((" - - Shape: Test_Data ", np.shape(datas_test))) - for p in range(len(datas_test)): - data_test = np.asmatrix(datas_test[p]) - data_focus1, data_conved1 = self.convolute( - data_test, - self.conv1, - self.w_conv1, - self.thre_conv1, - conv_step=self.step_conv1, - ) - data_pooled1 = self.pooling(data_conved1, self.size_pooling1) - data_bp_input = self._expand(data_pooled1) - - bp_out1 = data_bp_input - bp_net_j = bp_out1 * self.vji.T - self.thre_bp2 - bp_out2 = self.sig(bp_net_j) - bp_net_k = bp_out2 * self.wkj.T - self.thre_bp3 - bp_out3 = self.sig(bp_net_k) - produce_out.extend(bp_out3.getA().tolist()) - res = [list(map(self.do_round, each)) for each in produce_out] - return np.asarray(res) - - def convolution(self, data): - # return the data of image after convoluting process so we can check it out - data_test = np.asmatrix(data) - data_focus1, data_conved1 = self.convolute( - data_test, - self.conv1, - self.w_conv1, - self.thre_conv1, - conv_step=self.step_conv1, - ) - data_pooled1 = self.pooling(data_conved1, self.size_pooling1) - - return data_conved1, data_pooled1 - - -if __name__ == "__main__": - """ - I will put the example in another file - """ diff --git a/neural_network/gan.py_tf b/neural_network/gan.py_tf deleted file mode 100644 index 9c6e1c05b8b4..000000000000 --- a/neural_network/gan.py_tf +++ /dev/null @@ -1,506 +0,0 @@ -import matplotlib.gridspec as gridspec -import matplotlib.pyplot as plt -import numpy as np -from sklearn.utils import shuffle -import input_data - -random_numer = 42 - -np.random.seed(random_numer) - - -def ReLu(x): - mask = (x > 0) * 1.0 - return mask * x - - -def d_ReLu(x): - mask = (x > 0) * 1.0 - return mask - - -def arctan(x): - return np.arctan(x) - - -def d_arctan(x): - return 1 / (1 + x ** 2) - - -def log(x): - return 1 / (1 + np.exp(-1 * x)) - - -def d_log(x): - return log(x) * (1 - log(x)) - - -def tanh(x): - return np.tanh(x) - - -def d_tanh(x): - return 1 - np.tanh(x) ** 2 - - -def plot(samples): - fig = plt.figure(figsize=(4, 4)) - gs = gridspec.GridSpec(4, 4) - gs.update(wspace=0.05, hspace=0.05) - - for i, sample in enumerate(samples): - ax = plt.subplot(gs[i]) - plt.axis("off") - ax.set_xticklabels([]) - ax.set_yticklabels([]) - ax.set_aspect("equal") - plt.imshow(sample.reshape(28, 28), cmap="Greys_r") - - return fig - - -if __name__ == "__main__": - # 1. Load Data and declare hyper - print("--------- Load Data ----------") - mnist = input_data.read_data_sets("MNIST_data", one_hot=False) - temp = mnist.test - images, labels = temp.images, temp.labels - images, labels = shuffle(np.asarray(images), np.asarray(labels)) - num_epoch = 10 - learing_rate = 0.00009 - G_input = 100 - hidden_input, hidden_input2, hidden_input3 = 128, 256, 346 - hidden_input4, hidden_input5, hidden_input6 = 480, 560, 686 - - print("--------- Declare Hyper Parameters ----------") - # 2. Declare Weights - D_W1 = ( - np.random.normal(size=(784, hidden_input), scale=(1.0 / np.sqrt(784 / 2.0))) - * 0.002 - ) - # D_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - D_b1 = np.zeros(hidden_input) - - D_W2 = ( - np.random.normal( - size=(hidden_input, 1), scale=(1.0 / np.sqrt(hidden_input / 2.0)) - ) - * 0.002 - ) - # D_b2 = np.random.normal(size=(1),scale=(1. / np.sqrt(1 / 2.))) *0.002 - D_b2 = np.zeros(1) - - G_W1 = ( - np.random.normal( - size=(G_input, hidden_input), scale=(1.0 / np.sqrt(G_input / 2.0)) - ) - * 0.002 - ) - # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - G_b1 = np.zeros(hidden_input) - - G_W2 = ( - np.random.normal( - size=(hidden_input, hidden_input2), - scale=(1.0 / np.sqrt(hidden_input / 2.0)), - ) - * 0.002 - ) - # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - G_b2 = np.zeros(hidden_input2) - - G_W3 = ( - np.random.normal( - size=(hidden_input2, hidden_input3), - scale=(1.0 / np.sqrt(hidden_input2 / 2.0)), - ) - * 0.002 - ) - # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - G_b3 = np.zeros(hidden_input3) - - G_W4 = ( - np.random.normal( - size=(hidden_input3, hidden_input4), - scale=(1.0 / np.sqrt(hidden_input3 / 2.0)), - ) - * 0.002 - ) - # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - G_b4 = np.zeros(hidden_input4) - - G_W5 = ( - np.random.normal( - size=(hidden_input4, hidden_input5), - scale=(1.0 / np.sqrt(hidden_input4 / 2.0)), - ) - * 0.002 - ) - # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - G_b5 = np.zeros(hidden_input5) - - G_W6 = ( - np.random.normal( - size=(hidden_input5, hidden_input6), - scale=(1.0 / np.sqrt(hidden_input5 / 2.0)), - ) - * 0.002 - ) - # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.))) *0.002 - G_b6 = np.zeros(hidden_input6) - - G_W7 = ( - np.random.normal( - size=(hidden_input6, 784), scale=(1.0 / np.sqrt(hidden_input6 / 2.0)) - ) - * 0.002 - ) - # G_b2 = np.random.normal(size=(784),scale=(1. / np.sqrt(784 / 2.))) *0.002 - G_b7 = np.zeros(784) - - # 3. For Adam Optimizer - v1, m1 = 0, 0 - v2, m2 = 0, 0 - v3, m3 = 0, 0 - v4, m4 = 0, 0 - - v5, m5 = 0, 0 - v6, m6 = 0, 0 - v7, m7 = 0, 0 - v8, m8 = 0, 0 - v9, m9 = 0, 0 - v10, m10 = 0, 0 - v11, m11 = 0, 0 - v12, m12 = 0, 0 - - v13, m13 = 0, 0 - v14, m14 = 0, 0 - - v15, m15 = 0, 0 - v16, m16 = 0, 0 - - v17, m17 = 0, 0 - v18, m18 = 0, 0 - - beta_1, beta_2, eps = 0.9, 0.999, 0.00000001 - - print("--------- Started Training ----------") - for iter in range(num_epoch): - - random_int = np.random.randint(len(images) - 5) - current_image = np.expand_dims(images[random_int], axis=0) - - # Func: Generate The first Fake Data - Z = np.random.uniform(-1.0, 1.0, size=[1, G_input]) - Gl1 = Z.dot(G_W1) + G_b1 - Gl1A = arctan(Gl1) - Gl2 = Gl1A.dot(G_W2) + G_b2 - Gl2A = ReLu(Gl2) - Gl3 = Gl2A.dot(G_W3) + G_b3 - Gl3A = arctan(Gl3) - - Gl4 = Gl3A.dot(G_W4) + G_b4 - Gl4A = ReLu(Gl4) - Gl5 = Gl4A.dot(G_W5) + G_b5 - Gl5A = tanh(Gl5) - Gl6 = Gl5A.dot(G_W6) + G_b6 - Gl6A = ReLu(Gl6) - Gl7 = Gl6A.dot(G_W7) + G_b7 - - current_fake_data = log(Gl7) - - # Func: Forward Feed for Real data - Dl1_r = current_image.dot(D_W1) + D_b1 - Dl1_rA = ReLu(Dl1_r) - Dl2_r = Dl1_rA.dot(D_W2) + D_b2 - Dl2_rA = log(Dl2_r) - - # Func: Forward Feed for Fake Data - Dl1_f = current_fake_data.dot(D_W1) + D_b1 - Dl1_fA = ReLu(Dl1_f) - Dl2_f = Dl1_fA.dot(D_W2) + D_b2 - Dl2_fA = log(Dl2_f) - - # Func: Cost D - D_cost = -np.log(Dl2_rA) + np.log(1.0 - Dl2_fA) - - # Func: Gradient - grad_f_w2_part_1 = 1 / (1.0 - Dl2_fA) - grad_f_w2_part_2 = d_log(Dl2_f) - grad_f_w2_part_3 = Dl1_fA - grad_f_w2 = grad_f_w2_part_3.T.dot(grad_f_w2_part_1 * grad_f_w2_part_2) - grad_f_b2 = grad_f_w2_part_1 * grad_f_w2_part_2 - - grad_f_w1_part_1 = (grad_f_w2_part_1 * grad_f_w2_part_2).dot(D_W2.T) - grad_f_w1_part_2 = d_ReLu(Dl1_f) - grad_f_w1_part_3 = current_fake_data - grad_f_w1 = grad_f_w1_part_3.T.dot(grad_f_w1_part_1 * grad_f_w1_part_2) - grad_f_b1 = grad_f_w1_part_1 * grad_f_w1_part_2 - - grad_r_w2_part_1 = -1 / Dl2_rA - grad_r_w2_part_2 = d_log(Dl2_r) - grad_r_w2_part_3 = Dl1_rA - grad_r_w2 = grad_r_w2_part_3.T.dot(grad_r_w2_part_1 * grad_r_w2_part_2) - grad_r_b2 = grad_r_w2_part_1 * grad_r_w2_part_2 - - grad_r_w1_part_1 = (grad_r_w2_part_1 * grad_r_w2_part_2).dot(D_W2.T) - grad_r_w1_part_2 = d_ReLu(Dl1_r) - grad_r_w1_part_3 = current_image - grad_r_w1 = grad_r_w1_part_3.T.dot(grad_r_w1_part_1 * grad_r_w1_part_2) - grad_r_b1 = grad_r_w1_part_1 * grad_r_w1_part_2 - - grad_w1 = grad_f_w1 + grad_r_w1 - grad_b1 = grad_f_b1 + grad_r_b1 - - grad_w2 = grad_f_w2 + grad_r_w2 - grad_b2 = grad_f_b2 + grad_r_b2 - - # ---- Update Gradient ---- - m1 = beta_1 * m1 + (1 - beta_1) * grad_w1 - v1 = beta_2 * v1 + (1 - beta_2) * grad_w1 ** 2 - - m2 = beta_1 * m2 + (1 - beta_1) * grad_b1 - v2 = beta_2 * v2 + (1 - beta_2) * grad_b1 ** 2 - - m3 = beta_1 * m3 + (1 - beta_1) * grad_w2 - v3 = beta_2 * v3 + (1 - beta_2) * grad_w2 ** 2 - - m4 = beta_1 * m4 + (1 - beta_1) * grad_b2 - v4 = beta_2 * v4 + (1 - beta_2) * grad_b2 ** 2 - - D_W1 = D_W1 - (learing_rate / (np.sqrt(v1 / (1 - beta_2)) + eps)) * ( - m1 / (1 - beta_1) - ) - D_b1 = D_b1 - (learing_rate / (np.sqrt(v2 / (1 - beta_2)) + eps)) * ( - m2 / (1 - beta_1) - ) - - D_W2 = D_W2 - (learing_rate / (np.sqrt(v3 / (1 - beta_2)) + eps)) * ( - m3 / (1 - beta_1) - ) - D_b2 = D_b2 - (learing_rate / (np.sqrt(v4 / (1 - beta_2)) + eps)) * ( - m4 / (1 - beta_1) - ) - - # Func: Forward Feed for G - Z = np.random.uniform(-1.0, 1.0, size=[1, G_input]) - Gl1 = Z.dot(G_W1) + G_b1 - Gl1A = arctan(Gl1) - Gl2 = Gl1A.dot(G_W2) + G_b2 - Gl2A = ReLu(Gl2) - Gl3 = Gl2A.dot(G_W3) + G_b3 - Gl3A = arctan(Gl3) - - Gl4 = Gl3A.dot(G_W4) + G_b4 - Gl4A = ReLu(Gl4) - Gl5 = Gl4A.dot(G_W5) + G_b5 - Gl5A = tanh(Gl5) - Gl6 = Gl5A.dot(G_W6) + G_b6 - Gl6A = ReLu(Gl6) - Gl7 = Gl6A.dot(G_W7) + G_b7 - - current_fake_data = log(Gl7) - - Dl1 = current_fake_data.dot(D_W1) + D_b1 - Dl1_A = ReLu(Dl1) - Dl2 = Dl1_A.dot(D_W2) + D_b2 - Dl2_A = log(Dl2) - - # Func: Cost G - G_cost = -np.log(Dl2_A) - - # Func: Gradient - grad_G_w7_part_1 = ((-1 / Dl2_A) * d_log(Dl2).dot(D_W2.T) * (d_ReLu(Dl1))).dot( - D_W1.T - ) - grad_G_w7_part_2 = d_log(Gl7) - grad_G_w7_part_3 = Gl6A - grad_G_w7 = grad_G_w7_part_3.T.dot(grad_G_w7_part_1 * grad_G_w7_part_1) - grad_G_b7 = grad_G_w7_part_1 * grad_G_w7_part_2 - - grad_G_w6_part_1 = (grad_G_w7_part_1 * grad_G_w7_part_2).dot(G_W7.T) - grad_G_w6_part_2 = d_ReLu(Gl6) - grad_G_w6_part_3 = Gl5A - grad_G_w6 = grad_G_w6_part_3.T.dot(grad_G_w6_part_1 * grad_G_w6_part_2) - grad_G_b6 = grad_G_w6_part_1 * grad_G_w6_part_2 - - grad_G_w5_part_1 = (grad_G_w6_part_1 * grad_G_w6_part_2).dot(G_W6.T) - grad_G_w5_part_2 = d_tanh(Gl5) - grad_G_w5_part_3 = Gl4A - grad_G_w5 = grad_G_w5_part_3.T.dot(grad_G_w5_part_1 * grad_G_w5_part_2) - grad_G_b5 = grad_G_w5_part_1 * grad_G_w5_part_2 - - grad_G_w4_part_1 = (grad_G_w5_part_1 * grad_G_w5_part_2).dot(G_W5.T) - grad_G_w4_part_2 = d_ReLu(Gl4) - grad_G_w4_part_3 = Gl3A - grad_G_w4 = grad_G_w4_part_3.T.dot(grad_G_w4_part_1 * grad_G_w4_part_2) - grad_G_b4 = grad_G_w4_part_1 * grad_G_w4_part_2 - - grad_G_w3_part_1 = (grad_G_w4_part_1 * grad_G_w4_part_2).dot(G_W4.T) - grad_G_w3_part_2 = d_arctan(Gl3) - grad_G_w3_part_3 = Gl2A - grad_G_w3 = grad_G_w3_part_3.T.dot(grad_G_w3_part_1 * grad_G_w3_part_2) - grad_G_b3 = grad_G_w3_part_1 * grad_G_w3_part_2 - - grad_G_w2_part_1 = (grad_G_w3_part_1 * grad_G_w3_part_2).dot(G_W3.T) - grad_G_w2_part_2 = d_ReLu(Gl2) - grad_G_w2_part_3 = Gl1A - grad_G_w2 = grad_G_w2_part_3.T.dot(grad_G_w2_part_1 * grad_G_w2_part_2) - grad_G_b2 = grad_G_w2_part_1 * grad_G_w2_part_2 - - grad_G_w1_part_1 = (grad_G_w2_part_1 * grad_G_w2_part_2).dot(G_W2.T) - grad_G_w1_part_2 = d_arctan(Gl1) - grad_G_w1_part_3 = Z - grad_G_w1 = grad_G_w1_part_3.T.dot(grad_G_w1_part_1 * grad_G_w1_part_2) - grad_G_b1 = grad_G_w1_part_1 * grad_G_w1_part_2 - - # ---- Update Gradient ---- - m5 = beta_1 * m5 + (1 - beta_1) * grad_G_w1 - v5 = beta_2 * v5 + (1 - beta_2) * grad_G_w1 ** 2 - - m6 = beta_1 * m6 + (1 - beta_1) * grad_G_b1 - v6 = beta_2 * v6 + (1 - beta_2) * grad_G_b1 ** 2 - - m7 = beta_1 * m7 + (1 - beta_1) * grad_G_w2 - v7 = beta_2 * v7 + (1 - beta_2) * grad_G_w2 ** 2 - - m8 = beta_1 * m8 + (1 - beta_1) * grad_G_b2 - v8 = beta_2 * v8 + (1 - beta_2) * grad_G_b2 ** 2 - - m9 = beta_1 * m9 + (1 - beta_1) * grad_G_w3 - v9 = beta_2 * v9 + (1 - beta_2) * grad_G_w3 ** 2 - - m10 = beta_1 * m10 + (1 - beta_1) * grad_G_b3 - v10 = beta_2 * v10 + (1 - beta_2) * grad_G_b3 ** 2 - - m11 = beta_1 * m11 + (1 - beta_1) * grad_G_w4 - v11 = beta_2 * v11 + (1 - beta_2) * grad_G_w4 ** 2 - - m12 = beta_1 * m12 + (1 - beta_1) * grad_G_b4 - v12 = beta_2 * v12 + (1 - beta_2) * grad_G_b4 ** 2 - - m13 = beta_1 * m13 + (1 - beta_1) * grad_G_w5 - v13 = beta_2 * v13 + (1 - beta_2) * grad_G_w5 ** 2 - - m14 = beta_1 * m14 + (1 - beta_1) * grad_G_b5 - v14 = beta_2 * v14 + (1 - beta_2) * grad_G_b5 ** 2 - - m15 = beta_1 * m15 + (1 - beta_1) * grad_G_w6 - v15 = beta_2 * v15 + (1 - beta_2) * grad_G_w6 ** 2 - - m16 = beta_1 * m16 + (1 - beta_1) * grad_G_b6 - v16 = beta_2 * v16 + (1 - beta_2) * grad_G_b6 ** 2 - - m17 = beta_1 * m17 + (1 - beta_1) * grad_G_w7 - v17 = beta_2 * v17 + (1 - beta_2) * grad_G_w7 ** 2 - - m18 = beta_1 * m18 + (1 - beta_1) * grad_G_b7 - v18 = beta_2 * v18 + (1 - beta_2) * grad_G_b7 ** 2 - - G_W1 = G_W1 - (learing_rate / (np.sqrt(v5 / (1 - beta_2)) + eps)) * ( - m5 / (1 - beta_1) - ) - G_b1 = G_b1 - (learing_rate / (np.sqrt(v6 / (1 - beta_2)) + eps)) * ( - m6 / (1 - beta_1) - ) - - G_W2 = G_W2 - (learing_rate / (np.sqrt(v7 / (1 - beta_2)) + eps)) * ( - m7 / (1 - beta_1) - ) - G_b2 = G_b2 - (learing_rate / (np.sqrt(v8 / (1 - beta_2)) + eps)) * ( - m8 / (1 - beta_1) - ) - - G_W3 = G_W3 - (learing_rate / (np.sqrt(v9 / (1 - beta_2)) + eps)) * ( - m9 / (1 - beta_1) - ) - G_b3 = G_b3 - (learing_rate / (np.sqrt(v10 / (1 - beta_2)) + eps)) * ( - m10 / (1 - beta_1) - ) - - G_W4 = G_W4 - (learing_rate / (np.sqrt(v11 / (1 - beta_2)) + eps)) * ( - m11 / (1 - beta_1) - ) - G_b4 = G_b4 - (learing_rate / (np.sqrt(v12 / (1 - beta_2)) + eps)) * ( - m12 / (1 - beta_1) - ) - - G_W5 = G_W5 - (learing_rate / (np.sqrt(v13 / (1 - beta_2)) + eps)) * ( - m13 / (1 - beta_1) - ) - G_b5 = G_b5 - (learing_rate / (np.sqrt(v14 / (1 - beta_2)) + eps)) * ( - m14 / (1 - beta_1) - ) - - G_W6 = G_W6 - (learing_rate / (np.sqrt(v15 / (1 - beta_2)) + eps)) * ( - m15 / (1 - beta_1) - ) - G_b6 = G_b6 - (learing_rate / (np.sqrt(v16 / (1 - beta_2)) + eps)) * ( - m16 / (1 - beta_1) - ) - - G_W7 = G_W7 - (learing_rate / (np.sqrt(v17 / (1 - beta_2)) + eps)) * ( - m17 / (1 - beta_1) - ) - G_b7 = G_b7 - (learing_rate / (np.sqrt(v18 / (1 - beta_2)) + eps)) * ( - m18 / (1 - beta_1) - ) - - # --- Print Error ---- - # print("Current Iter: ",iter, " Current D cost:",D_cost, " Current G cost: ", G_cost,end='\r') - - if iter == 0: - learing_rate = learing_rate * 0.01 - if iter == 40: - learing_rate = learing_rate * 0.01 - - # ---- Print to Out put ---- - if iter % 10 == 0: - - print( - "Current Iter: ", - iter, - " Current D cost:", - D_cost, - " Current G cost: ", - G_cost, - end="\r", - ) - print("--------- Show Example Result See Tab Above ----------") - print("--------- Wait for the image to load ---------") - Z = np.random.uniform(-1.0, 1.0, size=[16, G_input]) - - Gl1 = Z.dot(G_W1) + G_b1 - Gl1A = arctan(Gl1) - Gl2 = Gl1A.dot(G_W2) + G_b2 - Gl2A = ReLu(Gl2) - Gl3 = Gl2A.dot(G_W3) + G_b3 - Gl3A = arctan(Gl3) - - Gl4 = Gl3A.dot(G_W4) + G_b4 - Gl4A = ReLu(Gl4) - Gl5 = Gl4A.dot(G_W5) + G_b5 - Gl5A = tanh(Gl5) - Gl6 = Gl5A.dot(G_W6) + G_b6 - Gl6A = ReLu(Gl6) - Gl7 = Gl6A.dot(G_W7) + G_b7 - - current_fake_data = log(Gl7) - - fig = plot(current_fake_data) - fig.savefig( - "Click_Me_{}.png".format( - str(iter).zfill(3) - + "_Ginput_" - + str(G_input) - + "_hiddenone" - + str(hidden_input) - + "_hiddentwo" - + str(hidden_input2) - + "_LR_" - + str(learing_rate) - ), - bbox_inches="tight", - ) - # for complete explanation visit https://towardsdatascience.com/only-numpy-implementing-gan-general-adversarial-networks-and-adam-optimizer-using-numpy-with-2a7e4e032021 - # -- end code -- diff --git a/neural_network/input_data.py b/neural_network/input_data.py deleted file mode 100644 index f90287fe3f5b..000000000000 --- a/neural_network/input_data.py +++ /dev/null @@ -1,344 +0,0 @@ -# Copyright 2016 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Functions for downloading and reading MNIST data (deprecated). - -This module and all its submodules are deprecated. -""" - -import gzip -import os -import typing -import urllib - -import numpy as np -from tensorflow.python.framework import dtypes, random_seed -from tensorflow.python.platform import gfile -from tensorflow.python.util.deprecation import deprecated - - -class _Datasets(typing.NamedTuple): - train: "_DataSet" - validation: "_DataSet" - test: "_DataSet" - - -# CVDF mirror of http://yann.lecun.com/exdb/mnist/ -DEFAULT_SOURCE_URL = "https://storage.googleapis.com/cvdf-datasets/mnist/" - - -def _read32(bytestream): - dt = np.dtype(np.uint32).newbyteorder(">") - return np.frombuffer(bytestream.read(4), dtype=dt)[0] - - -@deprecated(None, "Please use tf.data to implement this functionality.") -def _extract_images(f): - """Extract the images into a 4D uint8 numpy array [index, y, x, depth]. - - Args: - f: A file object that can be passed into a gzip reader. - - Returns: - data: A 4D uint8 numpy array [index, y, x, depth]. - - Raises: - ValueError: If the bytestream does not start with 2051. - - """ - print("Extracting", f.name) - with gzip.GzipFile(fileobj=f) as bytestream: - magic = _read32(bytestream) - if magic != 2051: - raise ValueError( - "Invalid magic number %d in MNIST image file: %s" % (magic, f.name) - ) - num_images = _read32(bytestream) - rows = _read32(bytestream) - cols = _read32(bytestream) - buf = bytestream.read(rows * cols * num_images) - data = np.frombuffer(buf, dtype=np.uint8) - data = data.reshape(num_images, rows, cols, 1) - return data - - -@deprecated(None, "Please use tf.one_hot on tensors.") -def _dense_to_one_hot(labels_dense, num_classes): - """Convert class labels from scalars to one-hot vectors.""" - num_labels = labels_dense.shape[0] - index_offset = np.arange(num_labels) * num_classes - labels_one_hot = np.zeros((num_labels, num_classes)) - labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1 - return labels_one_hot - - -@deprecated(None, "Please use tf.data to implement this functionality.") -def _extract_labels(f, one_hot=False, num_classes=10): - """Extract the labels into a 1D uint8 numpy array [index]. - - Args: - f: A file object that can be passed into a gzip reader. - one_hot: Does one hot encoding for the result. - num_classes: Number of classes for the one hot encoding. - - Returns: - labels: a 1D uint8 numpy array. - - Raises: - ValueError: If the bystream doesn't start with 2049. - """ - print("Extracting", f.name) - with gzip.GzipFile(fileobj=f) as bytestream: - magic = _read32(bytestream) - if magic != 2049: - raise ValueError( - "Invalid magic number %d in MNIST label file: %s" % (magic, f.name) - ) - num_items = _read32(bytestream) - buf = bytestream.read(num_items) - labels = np.frombuffer(buf, dtype=np.uint8) - if one_hot: - return _dense_to_one_hot(labels, num_classes) - return labels - - -class _DataSet: - """Container class for a _DataSet (deprecated). - - THIS CLASS IS DEPRECATED. - """ - - @deprecated( - None, - "Please use alternatives such as official/mnist/_DataSet.py" - " from tensorflow/models.", - ) - def __init__( - self, - images, - labels, - fake_data=False, - one_hot=False, - dtype=dtypes.float32, - reshape=True, - seed=None, - ): - """Construct a _DataSet. - - one_hot arg is used only if fake_data is true. `dtype` can be either - `uint8` to leave the input as `[0, 255]`, or `float32` to rescale into - `[0, 1]`. Seed arg provides for convenient deterministic testing. - - Args: - images: The images - labels: The labels - fake_data: Ignore inages and labels, use fake data. - one_hot: Bool, return the labels as one hot vectors (if True) or ints (if - False). - dtype: Output image dtype. One of [uint8, float32]. `uint8` output has - range [0,255]. float32 output has range [0,1]. - reshape: Bool. If True returned images are returned flattened to vectors. - seed: The random seed to use. - """ - seed1, seed2 = random_seed.get_seed(seed) - # If op level seed is not set, use whatever graph level seed is returned - self._rng = np.random.default_rng(seed1 if seed is None else seed2) - dtype = dtypes.as_dtype(dtype).base_dtype - if dtype not in (dtypes.uint8, dtypes.float32): - msg = f"Invalid image dtype {dtype!r}, expected uint8 or float32" - raise TypeError(msg) - if fake_data: - self._num_examples = 10000 - self.one_hot = one_hot - else: - assert ( - images.shape[0] == labels.shape[0] - ), f"images.shape: {images.shape} labels.shape: {labels.shape}" - self._num_examples = images.shape[0] - - # Convert shape from [num examples, rows, columns, depth] - # to [num examples, rows*columns] (assuming depth == 1) - if reshape: - assert images.shape[3] == 1 - images = images.reshape( - images.shape[0], images.shape[1] * images.shape[2] - ) - if dtype == dtypes.float32: - # Convert from [0, 255] -> [0.0, 1.0]. - images = images.astype(np.float32) - images = np.multiply(images, 1.0 / 255.0) - self._images = images - self._labels = labels - self._epochs_completed = 0 - self._index_in_epoch = 0 - - @property - def images(self): - return self._images - - @property - def labels(self): - return self._labels - - @property - def num_examples(self): - return self._num_examples - - @property - def epochs_completed(self): - return self._epochs_completed - - def next_batch(self, batch_size, fake_data=False, shuffle=True): - """Return the next `batch_size` examples from this data set.""" - if fake_data: - fake_image = [1] * 784 - fake_label = [1] + [0] * 9 if self.one_hot else 0 - return ( - [fake_image for _ in range(batch_size)], - [fake_label for _ in range(batch_size)], - ) - start = self._index_in_epoch - # Shuffle for the first epoch - if self._epochs_completed == 0 and start == 0 and shuffle: - perm0 = np.arange(self._num_examples) - self._rng.shuffle(perm0) - self._images = self.images[perm0] - self._labels = self.labels[perm0] - # Go to the next epoch - if start + batch_size > self._num_examples: - # Finished epoch - self._epochs_completed += 1 - # Get the rest examples in this epoch - rest_num_examples = self._num_examples - start - images_rest_part = self._images[start : self._num_examples] - labels_rest_part = self._labels[start : self._num_examples] - # Shuffle the data - if shuffle: - perm = np.arange(self._num_examples) - self._rng.shuffle(perm) - self._images = self.images[perm] - self._labels = self.labels[perm] - # Start next epoch - start = 0 - self._index_in_epoch = batch_size - rest_num_examples - end = self._index_in_epoch - images_new_part = self._images[start:end] - labels_new_part = self._labels[start:end] - return ( - np.concatenate((images_rest_part, images_new_part), axis=0), - np.concatenate((labels_rest_part, labels_new_part), axis=0), - ) - else: - self._index_in_epoch += batch_size - end = self._index_in_epoch - return self._images[start:end], self._labels[start:end] - - -@deprecated(None, "Please write your own downloading logic.") -def _maybe_download(filename, work_directory, source_url): - """Download the data from source url, unless it's already here. - - Args: - filename: string, name of the file in the directory. - work_directory: string, path to working directory. - source_url: url to download from if file doesn't exist. - - Returns: - Path to resulting file. - """ - if not gfile.Exists(work_directory): - gfile.MakeDirs(work_directory) - filepath = os.path.join(work_directory, filename) - if not gfile.Exists(filepath): - urllib.request.urlretrieve(source_url, filepath) # noqa: S310 - with gfile.GFile(filepath) as f: - size = f.size() - print("Successfully downloaded", filename, size, "bytes.") - return filepath - - -@deprecated(None, "Please use alternatives such as: tensorflow_datasets.load('mnist')") -def read_data_sets( - train_dir, - fake_data=False, - one_hot=False, - dtype=dtypes.float32, - reshape=True, - validation_size=5000, - seed=None, - source_url=DEFAULT_SOURCE_URL, -): - if fake_data: - - def fake(): - return _DataSet( - [], [], fake_data=True, one_hot=one_hot, dtype=dtype, seed=seed - ) - - train = fake() - validation = fake() - test = fake() - return _Datasets(train=train, validation=validation, test=test) - - if not source_url: # empty string check - source_url = DEFAULT_SOURCE_URL - - train_images_file = "train-images-idx3-ubyte.gz" - train_labels_file = "train-labels-idx1-ubyte.gz" - test_images_file = "t10k-images-idx3-ubyte.gz" - test_labels_file = "t10k-labels-idx1-ubyte.gz" - - local_file = _maybe_download( - train_images_file, train_dir, source_url + train_images_file - ) - with gfile.Open(local_file, "rb") as f: - train_images = _extract_images(f) - - local_file = _maybe_download( - train_labels_file, train_dir, source_url + train_labels_file - ) - with gfile.Open(local_file, "rb") as f: - train_labels = _extract_labels(f, one_hot=one_hot) - - local_file = _maybe_download( - test_images_file, train_dir, source_url + test_images_file - ) - with gfile.Open(local_file, "rb") as f: - test_images = _extract_images(f) - - local_file = _maybe_download( - test_labels_file, train_dir, source_url + test_labels_file - ) - with gfile.Open(local_file, "rb") as f: - test_labels = _extract_labels(f, one_hot=one_hot) - - if not 0 <= validation_size <= len(train_images): - msg = ( - "Validation size should be between 0 and " - f"{len(train_images)}. Received: {validation_size}." - ) - raise ValueError(msg) - - validation_images = train_images[:validation_size] - validation_labels = train_labels[:validation_size] - train_images = train_images[validation_size:] - train_labels = train_labels[validation_size:] - - options = {"dtype": dtype, "reshape": reshape, "seed": seed} - - train = _DataSet(train_images, train_labels, **options) - validation = _DataSet(validation_images, validation_labels, **options) - test = _DataSet(test_images, test_labels, **options) - - return _Datasets(train=train, validation=validation, test=test) diff --git a/neural_network/perceptron.py.DISABLED b/neural_network/perceptron.py.DISABLED deleted file mode 100644 index 487842067ca3..000000000000 --- a/neural_network/perceptron.py.DISABLED +++ /dev/null @@ -1,238 +0,0 @@ -""" - Perceptron - w = w + N * (d(k) - y) * x(k) - - Using perceptron network for oil analysis, with Measuring of 3 parameters - that represent chemical characteristics we can classify the oil, in p1 or p2 - p1 = -1 - p2 = 1 -""" -import random - - -class Perceptron: - def __init__( - self, - sample: list[list[float]], - target: list[int], - learning_rate: float = 0.01, - epoch_number: int = 1000, - bias: float = -1, - ) -> None: - """ - Initializes a Perceptron network for oil analysis - :param sample: sample dataset of 3 parameters with shape [30,3] - :param target: variable for classification with two possible states -1 or 1 - :param learning_rate: learning rate used in optimizing. - :param epoch_number: number of epochs to train network on. - :param bias: bias value for the network. - - >>> p = Perceptron([], (0, 1, 2)) - Traceback (most recent call last): - ... - ValueError: Sample data can not be empty - >>> p = Perceptron(([0], 1, 2), []) - Traceback (most recent call last): - ... - ValueError: Target data can not be empty - >>> p = Perceptron(([0], 1, 2), (0, 1)) - Traceback (most recent call last): - ... - ValueError: Sample data and Target data do not have matching lengths - """ - self.sample = sample - if len(self.sample) == 0: - raise ValueError("Sample data can not be empty") - self.target = target - if len(self.target) == 0: - raise ValueError("Target data can not be empty") - if len(self.sample) != len(self.target): - raise ValueError("Sample data and Target data do not have matching lengths") - self.learning_rate = learning_rate - self.epoch_number = epoch_number - self.bias = bias - self.number_sample = len(sample) - self.col_sample = len(sample[0]) # number of columns in dataset - self.weight: list = [] - - def training(self) -> None: - """ - Trains perceptron for epochs <= given number of epochs - :return: None - >>> data = [[2.0149, 0.6192, 10.9263]] - >>> targets = [-1] - >>> perceptron = Perceptron(data,targets) - >>> perceptron.training() # doctest: +ELLIPSIS - ('\\nEpoch:\\n', ...) - ... - """ - for sample in self.sample: - sample.insert(0, self.bias) - - for _ in range(self.col_sample): - self.weight.append(random.random()) - - self.weight.insert(0, self.bias) - - epoch_count = 0 - - while True: - has_misclassified = False - for i in range(self.number_sample): - u = 0 - for j in range(self.col_sample + 1): - u = u + self.weight[j] * self.sample[i][j] - y = self.sign(u) - if y != self.target[i]: - for j in range(self.col_sample + 1): - self.weight[j] = ( - self.weight[j] - + self.learning_rate - * (self.target[i] - y) - * self.sample[i][j] - ) - has_misclassified = True - # print('Epoch: \n',epoch_count) - epoch_count = epoch_count + 1 - # if you want control the epoch or just by error - if not has_misclassified: - print(("\nEpoch:\n", epoch_count)) - print("------------------------\n") - # if epoch_count > self.epoch_number or not error: - break - - def sort(self, sample: list[float]) -> None: - """ - :param sample: example row to classify as P1 or P2 - :return: None - >>> data = [[2.0149, 0.6192, 10.9263]] - >>> targets = [-1] - >>> perceptron = Perceptron(data,targets) - >>> perceptron.training() # doctest: +ELLIPSIS - ('\\nEpoch:\\n', ...) - ... - >>> perceptron.sort([-0.6508, 0.1097, 4.0009]) # doctest: +ELLIPSIS - ('Sample: ', ...) - classification: P... - """ - if len(self.sample) == 0: - raise ValueError("Sample data can not be empty") - sample.insert(0, self.bias) - u = 0 - for i in range(self.col_sample + 1): - u = u + self.weight[i] * sample[i] - - y = self.sign(u) - - if y == -1: - print(("Sample: ", sample)) - print("classification: P1") - else: - print(("Sample: ", sample)) - print("classification: P2") - - def sign(self, u: float) -> int: - """ - threshold function for classification - :param u: input number - :return: 1 if the input is greater than 0, otherwise -1 - >>> data = [[0],[-0.5],[0.5]] - >>> targets = [1,-1,1] - >>> perceptron = Perceptron(data,targets) - >>> perceptron.sign(0) - 1 - >>> perceptron.sign(-0.5) - -1 - >>> perceptron.sign(0.5) - 1 - """ - return 1 if u >= 0 else -1 - - -samples = [ - [-0.6508, 0.1097, 4.0009], - [-1.4492, 0.8896, 4.4005], - [2.0850, 0.6876, 12.0710], - [0.2626, 1.1476, 7.7985], - [0.6418, 1.0234, 7.0427], - [0.2569, 0.6730, 8.3265], - [1.1155, 0.6043, 7.4446], - [0.0914, 0.3399, 7.0677], - [0.0121, 0.5256, 4.6316], - [-0.0429, 0.4660, 5.4323], - [0.4340, 0.6870, 8.2287], - [0.2735, 1.0287, 7.1934], - [0.4839, 0.4851, 7.4850], - [0.4089, -0.1267, 5.5019], - [1.4391, 0.1614, 8.5843], - [-0.9115, -0.1973, 2.1962], - [0.3654, 1.0475, 7.4858], - [0.2144, 0.7515, 7.1699], - [0.2013, 1.0014, 6.5489], - [0.6483, 0.2183, 5.8991], - [-0.1147, 0.2242, 7.2435], - [-0.7970, 0.8795, 3.8762], - [-1.0625, 0.6366, 2.4707], - [0.5307, 0.1285, 5.6883], - [-1.2200, 0.7777, 1.7252], - [0.3957, 0.1076, 5.6623], - [-0.1013, 0.5989, 7.1812], - [2.4482, 0.9455, 11.2095], - [2.0149, 0.6192, 10.9263], - [0.2012, 0.2611, 5.4631], -] - -target = [ - -1, - -1, - -1, - 1, - 1, - -1, - 1, - -1, - 1, - 1, - -1, - 1, - -1, - -1, - -1, - -1, - 1, - 1, - 1, - 1, - -1, - 1, - 1, - 1, - 1, - -1, - -1, - 1, - -1, - 1, -] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - network = Perceptron( - sample=samples, target=target, learning_rate=0.01, epoch_number=1000, bias=-1 - ) - network.training() - print("Finished training perceptron") - print("Enter values to predict or q to exit") - while True: - sample: list = [] - for i in range(len(samples[0])): - user_input = input("value: ").strip() - if user_input == "q": - break - observation = float(user_input) - sample.insert(i, observation) - network.sort(sample) diff --git a/neural_network/simple_neural_network.py b/neural_network/simple_neural_network.py deleted file mode 100644 index 8751a38908cf..000000000000 --- a/neural_network/simple_neural_network.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Forward propagation explanation: -https://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250 -""" - -import math -import random - - -# Sigmoid -def sigmoid_function(value: float, deriv: bool = False) -> float: - """Return the sigmoid function of a float. - - >>> sigmoid_function(3.5) - 0.9706877692486436 - >>> sigmoid_function(3.5, True) - -8.75 - """ - if deriv: - return value * (1 - value) - return 1 / (1 + math.exp(-value)) - - -# Initial Value -INITIAL_VALUE = 0.02 - - -def forward_propagation(expected: int, number_propagations: int) -> float: - """Return the value found after the forward propagation training. - - >>> res = forward_propagation(32, 450_000) # Was 10_000_000 - >>> res > 31 and res < 33 - True - - >>> res = forward_propagation(32, 1000) - >>> res > 31 and res < 33 - False - """ - - # Random weight - weight = float(2 * (random.randint(1, 100)) - 1) - - for _ in range(number_propagations): - # Forward propagation - layer_1 = sigmoid_function(INITIAL_VALUE * weight) - # How much did we miss? - layer_1_error = (expected / 100) - layer_1 - # Error delta - layer_1_delta = layer_1_error * sigmoid_function(layer_1, True) - # Update weight - weight += INITIAL_VALUE * layer_1_delta - - return layer_1 * 100 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - expected = int(input("Expected value: ")) - number_propagations = int(input("Number of propagations: ")) - print(forward_propagation(expected, number_propagations)) diff --git a/neural_network/two_hidden_layers_neural_network.py b/neural_network/two_hidden_layers_neural_network.py deleted file mode 100644 index 1b7c0beed3ba..000000000000 --- a/neural_network/two_hidden_layers_neural_network.py +++ /dev/null @@ -1,296 +0,0 @@ -""" -References: - - http://neuralnetworksanddeeplearning.com/chap2.html (Backpropagation) - - https://en.wikipedia.org/wiki/Sigmoid_function (Sigmoid activation function) - - https://en.wikipedia.org/wiki/Feedforward_neural_network (Feedforward) -""" - -import numpy as np - - -class TwoHiddenLayerNeuralNetwork: - def __init__(self, input_array: np.ndarray, output_array: np.ndarray) -> None: - """ - This function initializes the TwoHiddenLayerNeuralNetwork class with random - weights for every layer and initializes predicted output with zeroes. - - input_array : input values for training the neural network (i.e training data) . - output_array : expected output values of the given inputs. - """ - - # Input values provided for training the model. - self.input_array = input_array - - # Random initial weights are assigned where first argument is the - # number of nodes in previous layer and second argument is the - # number of nodes in the next layer. - - # Random initial weights are assigned. - # self.input_array.shape[1] is used to represent number of nodes in input layer. - # First hidden layer consists of 4 nodes. - rng = np.random.default_rng() - self.input_layer_and_first_hidden_layer_weights = rng.random( - (self.input_array.shape[1], 4) - ) - - # Random initial values for the first hidden layer. - # First hidden layer has 4 nodes. - # Second hidden layer has 3 nodes. - self.first_hidden_layer_and_second_hidden_layer_weights = rng.random((4, 3)) - - # Random initial values for the second hidden layer. - # Second hidden layer has 3 nodes. - # Output layer has 1 node. - self.second_hidden_layer_and_output_layer_weights = rng.random((3, 1)) - - # Real output values provided. - self.output_array = output_array - - # Predicted output values by the neural network. - # Predicted_output array initially consists of zeroes. - self.predicted_output = np.zeros(output_array.shape) - - def feedforward(self) -> np.ndarray: - """ - The information moves in only one direction i.e. forward from the input nodes, - through the two hidden nodes and to the output nodes. - There are no cycles or loops in the network. - - Return layer_between_second_hidden_layer_and_output - (i.e the last layer of the neural network). - - >>> input_val = np.array(([0, 0, 0], [0, 0, 0], [0, 0, 0]), dtype=float) - >>> output_val = np.array(([0], [0], [0]), dtype=float) - >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val) - >>> res = nn.feedforward() - >>> array_sum = np.sum(res) - >>> bool(np.isnan(array_sum)) - False - """ - # Layer_between_input_and_first_hidden_layer is the layer connecting the - # input nodes with the first hidden layer nodes. - self.layer_between_input_and_first_hidden_layer = sigmoid( - np.dot(self.input_array, self.input_layer_and_first_hidden_layer_weights) - ) - - # layer_between_first_hidden_layer_and_second_hidden_layer is the layer - # connecting the first hidden set of nodes with the second hidden set of nodes. - self.layer_between_first_hidden_layer_and_second_hidden_layer = sigmoid( - np.dot( - self.layer_between_input_and_first_hidden_layer, - self.first_hidden_layer_and_second_hidden_layer_weights, - ) - ) - - # layer_between_second_hidden_layer_and_output is the layer connecting - # second hidden layer with the output node. - self.layer_between_second_hidden_layer_and_output = sigmoid( - np.dot( - self.layer_between_first_hidden_layer_and_second_hidden_layer, - self.second_hidden_layer_and_output_layer_weights, - ) - ) - - return self.layer_between_second_hidden_layer_and_output - - def back_propagation(self) -> None: - """ - Function for fine-tuning the weights of the neural net based on the - error rate obtained in the previous epoch (i.e., iteration). - Updation is done using derivative of sogmoid activation function. - - >>> input_val = np.array(([0, 0, 0], [0, 0, 0], [0, 0, 0]), dtype=float) - >>> output_val = np.array(([0], [0], [0]), dtype=float) - >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val) - >>> res = nn.feedforward() - >>> nn.back_propagation() - >>> updated_weights = nn.second_hidden_layer_and_output_layer_weights - >>> bool((res == updated_weights).all()) - False - """ - - updated_second_hidden_layer_and_output_layer_weights = np.dot( - self.layer_between_first_hidden_layer_and_second_hidden_layer.T, - 2 - * (self.output_array - self.predicted_output) - * sigmoid_derivative(self.predicted_output), - ) - updated_first_hidden_layer_and_second_hidden_layer_weights = np.dot( - self.layer_between_input_and_first_hidden_layer.T, - np.dot( - 2 - * (self.output_array - self.predicted_output) - * sigmoid_derivative(self.predicted_output), - self.second_hidden_layer_and_output_layer_weights.T, - ) - * sigmoid_derivative( - self.layer_between_first_hidden_layer_and_second_hidden_layer - ), - ) - updated_input_layer_and_first_hidden_layer_weights = np.dot( - self.input_array.T, - np.dot( - np.dot( - 2 - * (self.output_array - self.predicted_output) - * sigmoid_derivative(self.predicted_output), - self.second_hidden_layer_and_output_layer_weights.T, - ) - * sigmoid_derivative( - self.layer_between_first_hidden_layer_and_second_hidden_layer - ), - self.first_hidden_layer_and_second_hidden_layer_weights.T, - ) - * sigmoid_derivative(self.layer_between_input_and_first_hidden_layer), - ) - - self.input_layer_and_first_hidden_layer_weights += ( - updated_input_layer_and_first_hidden_layer_weights - ) - self.first_hidden_layer_and_second_hidden_layer_weights += ( - updated_first_hidden_layer_and_second_hidden_layer_weights - ) - self.second_hidden_layer_and_output_layer_weights += ( - updated_second_hidden_layer_and_output_layer_weights - ) - - def train(self, output: np.ndarray, iterations: int, give_loss: bool) -> None: - """ - Performs the feedforwarding and back propagation process for the - given number of iterations. - Every iteration will update the weights of neural network. - - output : real output values,required for calculating loss. - iterations : number of times the weights are to be updated. - give_loss : boolean value, If True then prints loss for each iteration, - If False then nothing is printed - - >>> input_val = np.array(([0, 0, 0], [0, 1, 0], [0, 0, 1]), dtype=float) - >>> output_val = np.array(([0], [1], [1]), dtype=float) - >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val) - >>> first_iteration_weights = nn.feedforward() - >>> nn.back_propagation() - >>> updated_weights = nn.second_hidden_layer_and_output_layer_weights - >>> bool((first_iteration_weights == updated_weights).all()) - False - """ - for iteration in range(1, iterations + 1): - self.output = self.feedforward() - self.back_propagation() - if give_loss: - loss = np.mean(np.square(output - self.feedforward())) - print(f"Iteration {iteration} Loss: {loss}") - - def predict(self, input_arr: np.ndarray) -> int: - """ - Predict's the output for the given input values using - the trained neural network. - - The output value given by the model ranges in-between 0 and 1. - The predict function returns 1 if the model value is greater - than the threshold value else returns 0, - as the real output values are in binary. - - >>> input_val = np.array(([0, 0, 0], [0, 1, 0], [0, 0, 1]), dtype=float) - >>> output_val = np.array(([0], [1], [1]), dtype=float) - >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val) - >>> nn.train(output_val, 1000, False) - >>> nn.predict([0, 1, 0]) in (0, 1) - True - """ - - # Input values for which the predictions are to be made. - self.array = input_arr - - self.layer_between_input_and_first_hidden_layer = sigmoid( - np.dot(self.array, self.input_layer_and_first_hidden_layer_weights) - ) - - self.layer_between_first_hidden_layer_and_second_hidden_layer = sigmoid( - np.dot( - self.layer_between_input_and_first_hidden_layer, - self.first_hidden_layer_and_second_hidden_layer_weights, - ) - ) - - self.layer_between_second_hidden_layer_and_output = sigmoid( - np.dot( - self.layer_between_first_hidden_layer_and_second_hidden_layer, - self.second_hidden_layer_and_output_layer_weights, - ) - ) - - return int((self.layer_between_second_hidden_layer_and_output > 0.6)[0]) - - -def sigmoid(value: np.ndarray) -> np.ndarray: - """ - Applies sigmoid activation function. - - return normalized values - - >>> sigmoid(np.array(([1, 0, 2], [1, 0, 0]), dtype=np.float64)) - array([[0.73105858, 0.5 , 0.88079708], - [0.73105858, 0.5 , 0.5 ]]) - """ - return 1 / (1 + np.exp(-value)) - - -def sigmoid_derivative(value: np.ndarray) -> np.ndarray: - """ - Provides the derivative value of the sigmoid function. - - returns derivative of the sigmoid value - - >>> sigmoid_derivative(np.array(([1, 0, 2], [1, 0, 0]), dtype=np.float64)) - array([[ 0., 0., -2.], - [ 0., 0., 0.]]) - """ - return (value) * (1 - (value)) - - -def example() -> int: - """ - Example for "how to use the neural network class and use the - respected methods for the desired output". - Calls the TwoHiddenLayerNeuralNetwork class and - provides the fixed input output values to the model. - Model is trained for a fixed amount of iterations then the predict method is called. - In this example the output is divided into 2 classes i.e. binary classification, - the two classes are represented by '0' and '1'. - - >>> example() in (0, 1) - True - """ - # Input values. - test_input = np.array( - ( - [0, 0, 0], - [0, 0, 1], - [0, 1, 0], - [0, 1, 1], - [1, 0, 0], - [1, 0, 1], - [1, 1, 0], - [1, 1, 1], - ), - dtype=np.float64, - ) - - # True output values for the given input values. - output = np.array(([0], [1], [1], [0], [1], [0], [0], [1]), dtype=np.float64) - - # Calling neural network class. - neural_network = TwoHiddenLayerNeuralNetwork( - input_array=test_input, output_array=output - ) - - # Calling training function. - # Set give_loss to True if you want to see loss in every iteration. - neural_network.train(output=output, iterations=10, give_loss=False) - - return neural_network.predict(np.array(([1, 1, 1]), dtype=np.float64)) - - -if __name__ == "__main__": - example() diff --git a/other/__init__.py b/other/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/other/activity_selection.py b/other/activity_selection.py deleted file mode 100644 index 2cc08d959862..000000000000 --- a/other/activity_selection.py +++ /dev/null @@ -1,43 +0,0 @@ -"""The following implementation assumes that the activities -are already sorted according to their finish time""" - -"""Prints a maximum set of activities that can be done by a -single person, one at a time""" -# n --> Total number of activities -# start[]--> An array that contains start time of all activities -# finish[] --> An array that contains finish time of all activities - - -def print_max_activities(start: list[int], finish: list[int]) -> None: - """ - >>> start = [1, 3, 0, 5, 8, 5] - >>> finish = [2, 4, 6, 7, 9, 9] - >>> print_max_activities(start, finish) - The following activities are selected: - 0,1,3,4, - """ - n = len(finish) - print("The following activities are selected:") - - # The first activity is always selected - i = 0 - print(i, end=",") - - # Consider rest of the activities - for j in range(n): - # If this activity has start time greater than - # or equal to the finish time of previously - # selected activity, then select it - if start[j] >= finish[i]: - print(j, end=",") - i = j - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - start = [1, 3, 0, 5, 8, 5] - finish = [2, 4, 6, 7, 9, 9] - print_max_activities(start, finish) diff --git a/other/alternative_list_arrange.py b/other/alternative_list_arrange.py deleted file mode 100644 index 84c5dd4293ad..000000000000 --- a/other/alternative_list_arrange.py +++ /dev/null @@ -1,34 +0,0 @@ -def alternative_list_arrange(first_input_list: list, second_input_list: list) -> list: - """ - The method arranges two lists as one list in alternative forms of the list elements. - :param first_input_list: - :param second_input_list: - :return: List - >>> alternative_list_arrange([1, 2, 3, 4, 5], ["A", "B", "C"]) - [1, 'A', 2, 'B', 3, 'C', 4, 5] - >>> alternative_list_arrange(["A", "B", "C"], [1, 2, 3, 4, 5]) - ['A', 1, 'B', 2, 'C', 3, 4, 5] - >>> alternative_list_arrange(["X", "Y", "Z"], [9, 8, 7, 6]) - ['X', 9, 'Y', 8, 'Z', 7, 6] - >>> alternative_list_arrange([1, 2, 3, 4, 5], []) - [1, 2, 3, 4, 5] - """ - first_input_list_length: int = len(first_input_list) - second_input_list_length: int = len(second_input_list) - abs_length: int = ( - first_input_list_length - if first_input_list_length > second_input_list_length - else second_input_list_length - ) - output_result_list: list = [] - for char_count in range(abs_length): - if char_count < first_input_list_length: - output_result_list.append(first_input_list[char_count]) - if char_count < second_input_list_length: - output_result_list.append(second_input_list[char_count]) - - return output_result_list - - -if __name__ == "__main__": - print(alternative_list_arrange(["A", "B", "C"], [1, 2, 3, 4, 5]), end=" ") diff --git a/other/bankers_algorithm.py b/other/bankers_algorithm.py deleted file mode 100644 index d4254f479a4f..000000000000 --- a/other/bankers_algorithm.py +++ /dev/null @@ -1,224 +0,0 @@ -# A Python implementation of the Banker's Algorithm in Operating Systems using -# Processes and Resources -# { -# "Author: "Biney Kingsley (bluedistro@github.io), bineykingsley36@gmail.com", -# "Date": 28-10-2018 -# } -""" -The Banker's algorithm is a resource allocation and deadlock avoidance algorithm -developed by Edsger Dijkstra that tests for safety by simulating the allocation of -predetermined maximum possible amounts of all resources, and then makes a "s-state" -check to test for possible deadlock conditions for all other pending activities, -before deciding whether allocation should be allowed to continue. -[Source] Wikipedia -[Credit] Rosetta Code C implementation helped very much. - (https://rosettacode.org/wiki/Banker%27s_algorithm) -""" - -from __future__ import annotations - -import numpy as np - -test_claim_vector = [8, 5, 9, 7] -test_allocated_res_table = [ - [2, 0, 1, 1], - [0, 1, 2, 1], - [4, 0, 0, 3], - [0, 2, 1, 0], - [1, 0, 3, 0], -] -test_maximum_claim_table = [ - [3, 2, 1, 4], - [0, 2, 5, 2], - [5, 1, 0, 5], - [1, 5, 3, 0], - [3, 0, 3, 3], -] - - -class BankersAlgorithm: - def __init__( - self, - claim_vector: list[int], - allocated_resources_table: list[list[int]], - maximum_claim_table: list[list[int]], - ) -> None: - """ - :param claim_vector: A nxn/nxm list depicting the amount of each resources - (eg. memory, interface, semaphores, etc.) available. - :param allocated_resources_table: A nxn/nxm list depicting the amount of each - resource each process is currently holding - :param maximum_claim_table: A nxn/nxm list depicting how much of each resource - the system currently has available - """ - self.__claim_vector = claim_vector - self.__allocated_resources_table = allocated_resources_table - self.__maximum_claim_table = maximum_claim_table - - def __processes_resource_summation(self) -> list[int]: - """ - Check for allocated resources in line with each resource in the claim vector - """ - return [ - sum(p_item[i] for p_item in self.__allocated_resources_table) - for i in range(len(self.__allocated_resources_table[0])) - ] - - def __available_resources(self) -> list[int]: - """ - Check for available resources in line with each resource in the claim vector - """ - return np.array(self.__claim_vector) - np.array( - self.__processes_resource_summation() - ) - - def __need(self) -> list[list[int]]: - """ - Implement safety checker that calculates the needs by ensuring that - max_claim[i][j] - alloc_table[i][j] <= avail[j] - """ - return [ - list(np.array(self.__maximum_claim_table[i]) - np.array(allocated_resource)) - for i, allocated_resource in enumerate(self.__allocated_resources_table) - ] - - def __need_index_manager(self) -> dict[int, list[int]]: - """ - This function builds an index control dictionary to track original ids/indices - of processes when altered during execution of method "main" - Return: {0: [a: int, b: int], 1: [c: int, d: int]} - >>> index_control = BankersAlgorithm( - ... test_claim_vector, test_allocated_res_table, test_maximum_claim_table - ... )._BankersAlgorithm__need_index_manager() - >>> {key: [int(x) for x in value] for key, value - ... in index_control.items()} # doctest: +NORMALIZE_WHITESPACE - {0: [1, 2, 0, 3], 1: [0, 1, 3, 1], 2: [1, 1, 0, 2], 3: [1, 3, 2, 0], - 4: [2, 0, 0, 3]} - """ - return {self.__need().index(i): i for i in self.__need()} - - def main(self, **kwargs) -> None: - """ - Utilize various methods in this class to simulate the Banker's algorithm - Return: None - >>> BankersAlgorithm(test_claim_vector, test_allocated_res_table, - ... test_maximum_claim_table).main(describe=True) - Allocated Resource Table - P1 2 0 1 1 - <BLANKLINE> - P2 0 1 2 1 - <BLANKLINE> - P3 4 0 0 3 - <BLANKLINE> - P4 0 2 1 0 - <BLANKLINE> - P5 1 0 3 0 - <BLANKLINE> - System Resource Table - P1 3 2 1 4 - <BLANKLINE> - P2 0 2 5 2 - <BLANKLINE> - P3 5 1 0 5 - <BLANKLINE> - P4 1 5 3 0 - <BLANKLINE> - P5 3 0 3 3 - <BLANKLINE> - Current Usage by Active Processes: 8 5 9 7 - Initial Available Resources: 1 2 2 2 - __________________________________________________ - <BLANKLINE> - Process 3 is executing. - Updated available resource stack for processes: 5 2 2 5 - The process is in a safe state. - <BLANKLINE> - Process 1 is executing. - Updated available resource stack for processes: 7 2 3 6 - The process is in a safe state. - <BLANKLINE> - Process 2 is executing. - Updated available resource stack for processes: 7 3 5 7 - The process is in a safe state. - <BLANKLINE> - Process 4 is executing. - Updated available resource stack for processes: 7 5 6 7 - The process is in a safe state. - <BLANKLINE> - Process 5 is executing. - Updated available resource stack for processes: 8 5 9 7 - The process is in a safe state. - <BLANKLINE> - """ - need_list = self.__need() - alloc_resources_table = self.__allocated_resources_table - available_resources = self.__available_resources() - need_index_manager = self.__need_index_manager() - for kw, val in kwargs.items(): - if kw and val is True: - self.__pretty_data() - print("_" * 50 + "\n") - while need_list: - safe = False - for each_need in need_list: - execution = True - for index, need in enumerate(each_need): - if need > available_resources[index]: - execution = False - break - if execution: - safe = True - # get the original index of the process from ind_ctrl db - for original_need_index, need_clone in need_index_manager.items(): - if each_need == need_clone: - process_number = original_need_index - print(f"Process {process_number + 1} is executing.") - # remove the process run from stack - need_list.remove(each_need) - # update available/freed resources stack - available_resources = np.array(available_resources) + np.array( - alloc_resources_table[process_number] - ) - print( - "Updated available resource stack for processes: " - + " ".join([str(x) for x in available_resources]) - ) - break - if safe: - print("The process is in a safe state.\n") - else: - print("System in unsafe state. Aborting...\n") - break - - def __pretty_data(self): - """ - Properly align display of the algorithm's solution - """ - print(" " * 9 + "Allocated Resource Table") - for item in self.__allocated_resources_table: - print( - f"P{self.__allocated_resources_table.index(item) + 1}" - + " ".join(f"{it:>8}" for it in item) - + "\n" - ) - print(" " * 9 + "System Resource Table") - for item in self.__maximum_claim_table: - print( - f"P{self.__maximum_claim_table.index(item) + 1}" - + " ".join(f"{it:>8}" for it in item) - + "\n" - ) - print( - "Current Usage by Active Processes: " - + " ".join(str(x) for x in self.__claim_vector) - ) - print( - "Initial Available Resources: " - + " ".join(str(x) for x in self.__available_resources()) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/davis_putnam_logemann_loveland.py b/other/davis_putnam_logemann_loveland.py deleted file mode 100644 index 0f3100b1bc2e..000000000000 --- a/other/davis_putnam_logemann_loveland.py +++ /dev/null @@ -1,359 +0,0 @@ -#!/usr/bin/env python3 - -""" -Davis-Putnam-Logemann-Loveland (DPLL) algorithm is a complete, backtracking-based -search algorithm for deciding the satisfiability of propositional logic formulae in -conjunctive normal form, i.e, for solving the Conjunctive Normal Form SATisfiability -(CNF-SAT) problem. - -For more information about the algorithm: https://en.wikipedia.org/wiki/DPLL_algorithm -""" - -from __future__ import annotations - -import random -from collections.abc import Iterable - - -class Clause: - """ - A clause represented in Conjunctive Normal Form. - A clause is a set of literals, either complemented or otherwise. - For example: - {A1, A2, A3'} is the clause (A1 v A2 v A3') - {A5', A2', A1} is the clause (A5' v A2' v A1) - - Create model - >>> clause = Clause(["A1", "A2'", "A3"]) - >>> clause.evaluate({"A1": True}) - True - """ - - def __init__(self, literals: list[str]) -> None: - """ - Represent the literals and an assignment in a clause." - """ - # Assign all literals to None initially - self.literals: dict[str, bool | None] = {literal: None for literal in literals} - - def __str__(self) -> str: - """ - To print a clause as in Conjunctive Normal Form. - >>> str(Clause(["A1", "A2'", "A3"])) - "{A1 , A2' , A3}" - """ - return "{" + " , ".join(self.literals) + "}" - - def __len__(self) -> int: - """ - To print a clause as in Conjunctive Normal Form. - >>> len(Clause([])) - 0 - >>> len(Clause(["A1", "A2'", "A3"])) - 3 - """ - return len(self.literals) - - def assign(self, model: dict[str, bool | None]) -> None: - """ - Assign values to literals of the clause as given by model. - """ - for literal in self.literals: - symbol = literal[:2] - if symbol in model: - value = model[symbol] - else: - continue - # Complement assignment if literal is in complemented form - if value is not None and literal.endswith("'"): - value = not value - self.literals[literal] = value - - def evaluate(self, model: dict[str, bool | None]) -> bool | None: - """ - Evaluates the clause with the assignments in model. - This has the following steps: - 1. Return True if both a literal and its complement exist in the clause. - 2. Return True if a single literal has the assignment True. - 3. Return None(unable to complete evaluation) if a literal has no assignment. - 4. Compute disjunction of all values assigned in clause. - """ - for literal in self.literals: - symbol = literal.rstrip("'") if literal.endswith("'") else literal + "'" - if symbol in self.literals: - return True - - self.assign(model) - for value in self.literals.values(): - if value in (True, None): - return value - return any(self.literals.values()) - - -class Formula: - """ - A formula represented in Conjunctive Normal Form. - A formula is a set of clauses. - For example, - {{A1, A2, A3'}, {A5', A2', A1}} is ((A1 v A2 v A3') and (A5' v A2' v A1)) - """ - - def __init__(self, clauses: Iterable[Clause]) -> None: - """ - Represent the number of clauses and the clauses themselves. - """ - self.clauses = list(clauses) - - def __str__(self) -> str: - """ - To print a formula as in Conjunctive Normal Form. - str(Formula([Clause(["A1", "A2'", "A3"]), Clause(["A5'", "A2'", "A1"])])) - "{{A1 , A2' , A3} , {A5' , A2' , A1}}" - """ - return "{" + " , ".join(str(clause) for clause in self.clauses) + "}" - - -def generate_clause() -> Clause: - """ - Randomly generate a clause. - All literals have the name Ax, where x is an integer from 1 to 5. - """ - literals = [] - no_of_literals = random.randint(1, 5) - base_var = "A" - i = 0 - while i < no_of_literals: - var_no = random.randint(1, 5) - var_name = base_var + str(var_no) - var_complement = random.randint(0, 1) - if var_complement == 1: - var_name += "'" - if var_name in literals: - i -= 1 - else: - literals.append(var_name) - i += 1 - return Clause(literals) - - -def generate_formula() -> Formula: - """ - Randomly generate a formula. - """ - clauses: set[Clause] = set() - no_of_clauses = random.randint(1, 10) - while len(clauses) < no_of_clauses: - clauses.add(generate_clause()) - return Formula(clauses) - - -def generate_parameters(formula: Formula) -> tuple[list[Clause], list[str]]: - """ - Return the clauses and symbols from a formula. - A symbol is the uncomplemented form of a literal. - For example, - Symbol of A3 is A3. - Symbol of A5' is A5. - - >>> formula = Formula([Clause(["A1", "A2'", "A3"]), Clause(["A5'", "A2'", "A1"])]) - >>> clauses, symbols = generate_parameters(formula) - >>> clauses_list = [str(i) for i in clauses] - >>> clauses_list - ["{A1 , A2' , A3}", "{A5' , A2' , A1}"] - >>> symbols - ['A1', 'A2', 'A3', 'A5'] - """ - clauses = formula.clauses - symbols_set = [] - for clause in formula.clauses: - for literal in clause.literals: - symbol = literal[:2] - if symbol not in symbols_set: - symbols_set.append(symbol) - return clauses, symbols_set - - -def find_pure_symbols( - clauses: list[Clause], symbols: list[str], model: dict[str, bool | None] -) -> tuple[list[str], dict[str, bool | None]]: - """ - Return pure symbols and their values to satisfy clause. - Pure symbols are symbols in a formula that exist only - in one form, either complemented or otherwise. - For example, - { { A4 , A3 , A5' , A1 , A3' } , { A4 } , { A3 } } has - pure symbols A4, A5' and A1. - This has the following steps: - 1. Ignore clauses that have already evaluated to be True. - 2. Find symbols that occur only in one form in the rest of the clauses. - 3. Assign value True or False depending on whether the symbols occurs - in normal or complemented form respectively. - - >>> formula = Formula([Clause(["A1", "A2'", "A3"]), Clause(["A5'", "A2'", "A1"])]) - >>> clauses, symbols = generate_parameters(formula) - - >>> pure_symbols, values = find_pure_symbols(clauses, symbols, {}) - >>> pure_symbols - ['A1', 'A2', 'A3', 'A5'] - >>> values - {'A1': True, 'A2': False, 'A3': True, 'A5': False} - """ - pure_symbols = [] - assignment: dict[str, bool | None] = {} - literals = [] - - for clause in clauses: - if clause.evaluate(model): - continue - for literal in clause.literals: - literals.append(literal) - - for s in symbols: - sym = s + "'" - if (s in literals and sym not in literals) or ( - s not in literals and sym in literals - ): - pure_symbols.append(s) - for p in pure_symbols: - assignment[p] = None - for s in pure_symbols: - sym = s + "'" - if s in literals: - assignment[s] = True - elif sym in literals: - assignment[s] = False - return pure_symbols, assignment - - -def find_unit_clauses( - clauses: list[Clause], - model: dict[str, bool | None], # noqa: ARG001 -) -> tuple[list[str], dict[str, bool | None]]: - """ - Returns the unit symbols and their values to satisfy clause. - Unit symbols are symbols in a formula that are: - - Either the only symbol in a clause - - Or all other literals in that clause have been assigned False - This has the following steps: - 1. Find symbols that are the only occurrences in a clause. - 2. Find symbols in a clause where all other literals are assigned False. - 3. Assign True or False depending on whether the symbols occurs in - normal or complemented form respectively. - - >>> clause1 = Clause(["A4", "A3", "A5'", "A1", "A3'"]) - >>> clause2 = Clause(["A4"]) - >>> clause3 = Clause(["A3"]) - >>> clauses, symbols = generate_parameters(Formula([clause1, clause2, clause3])) - - >>> unit_clauses, values = find_unit_clauses(clauses, {}) - >>> unit_clauses - ['A4', 'A3'] - >>> values - {'A4': True, 'A3': True} - """ - unit_symbols = [] - for clause in clauses: - if len(clause) == 1: - unit_symbols.append(next(iter(clause.literals.keys()))) - else: - f_count, n_count = 0, 0 - for literal, value in clause.literals.items(): - if value is False: - f_count += 1 - elif value is None: - sym = literal - n_count += 1 - if f_count == len(clause) - 1 and n_count == 1: - unit_symbols.append(sym) - assignment: dict[str, bool | None] = {} - for i in unit_symbols: - symbol = i[:2] - assignment[symbol] = len(i) == 2 - unit_symbols = [i[:2] for i in unit_symbols] - - return unit_symbols, assignment - - -def dpll_algorithm( - clauses: list[Clause], symbols: list[str], model: dict[str, bool | None] -) -> tuple[bool | None, dict[str, bool | None] | None]: - """ - Returns the model if the formula is satisfiable, else None - This has the following steps: - 1. If every clause in clauses is True, return True. - 2. If some clause in clauses is False, return False. - 3. Find pure symbols. - 4. Find unit symbols. - - >>> formula = Formula([Clause(["A4", "A3", "A5'", "A1", "A3'"]), Clause(["A4"])]) - >>> clauses, symbols = generate_parameters(formula) - - >>> soln, model = dpll_algorithm(clauses, symbols, {}) - >>> soln - True - >>> model - {'A4': True} - """ - check_clause_all_true = True - for clause in clauses: - clause_check = clause.evaluate(model) - if clause_check is False: - return False, None - elif clause_check is None: - check_clause_all_true = False - continue - - if check_clause_all_true: - return True, model - - try: - pure_symbols, assignment = find_pure_symbols(clauses, symbols, model) - except RecursionError: - print("raises a RecursionError and is") - return None, {} - p = None - if len(pure_symbols) > 0: - p, value = pure_symbols[0], assignment[pure_symbols[0]] - - if p: - tmp_model = model - tmp_model[p] = value - tmp_symbols = list(symbols) - if p in tmp_symbols: - tmp_symbols.remove(p) - return dpll_algorithm(clauses, tmp_symbols, tmp_model) - - unit_symbols, assignment = find_unit_clauses(clauses, model) - p = None - if len(unit_symbols) > 0: - p, value = unit_symbols[0], assignment[unit_symbols[0]] - if p: - tmp_model = model - tmp_model[p] = value - tmp_symbols = list(symbols) - if p in tmp_symbols: - tmp_symbols.remove(p) - return dpll_algorithm(clauses, tmp_symbols, tmp_model) - p = symbols[0] - rest = symbols[1:] - tmp1, tmp2 = model, model - tmp1[p], tmp2[p] = True, False - - return dpll_algorithm(clauses, rest, tmp1) or dpll_algorithm(clauses, rest, tmp2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - formula = generate_formula() - print(f"The formula {formula} is", end=" ") - - clauses, symbols = generate_parameters(formula) - solution, model = dpll_algorithm(clauses, symbols, {}) - - if solution: - print(f"satisfiable with the assignment {model}.") - else: - print("not satisfiable.") diff --git a/other/doomsday.py b/other/doomsday.py deleted file mode 100644 index d8fe261156a1..000000000000 --- a/other/doomsday.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/python3 -# Doomsday algorithm info: https://en.wikipedia.org/wiki/Doomsday_rule - -DOOMSDAY_LEAP = [4, 1, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5] -DOOMSDAY_NOT_LEAP = [3, 7, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5] -WEEK_DAY_NAMES = { - 0: "Sunday", - 1: "Monday", - 2: "Tuesday", - 3: "Wednesday", - 4: "Thursday", - 5: "Friday", - 6: "Saturday", -} - - -def get_week_day(year: int, month: int, day: int) -> str: - """Returns the week-day name out of a given date. - - >>> get_week_day(2020, 10, 24) - 'Saturday' - >>> get_week_day(2017, 10, 24) - 'Tuesday' - >>> get_week_day(2019, 5, 3) - 'Friday' - >>> get_week_day(1970, 9, 16) - 'Wednesday' - >>> get_week_day(1870, 8, 13) - 'Saturday' - >>> get_week_day(2040, 3, 14) - 'Wednesday' - - """ - # minimal input check: - assert len(str(year)) > 2, "year should be in YYYY format" - assert 1 <= month <= 12, "month should be between 1 to 12" - assert 1 <= day <= 31, "day should be between 1 to 31" - - # Doomsday algorithm: - century = year // 100 - century_anchor = (5 * (century % 4) + 2) % 7 - centurian = year % 100 - centurian_m = centurian % 12 - dooms_day = ( - (centurian // 12) + centurian_m + (centurian_m // 4) + century_anchor - ) % 7 - day_anchor = ( - DOOMSDAY_NOT_LEAP[month - 1] - if (year % 4 != 0) or (centurian == 0 and (year % 400) == 0) - else DOOMSDAY_LEAP[month - 1] - ) - week_day = (dooms_day + day - day_anchor) % 7 - return WEEK_DAY_NAMES[week_day] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/fischer_yates_shuffle.py b/other/fischer_yates_shuffle.py deleted file mode 100644 index 5e90b10edd89..000000000000 --- a/other/fischer_yates_shuffle.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/python -""" -The Fisher-Yates shuffle is an algorithm for generating a random permutation of a -finite sequence. -For more details visit -wikipedia/Fischer-Yates-Shuffle. -""" - -import random -from typing import Any - - -def fisher_yates_shuffle(data: list) -> list[Any]: - for _ in range(len(data)): - a = random.randint(0, len(data) - 1) - b = random.randint(0, len(data) - 1) - data[a], data[b] = data[b], data[a] - return data - - -if __name__ == "__main__": - integers = [0, 1, 2, 3, 4, 5, 6, 7] - strings = ["python", "says", "hello", "!"] - print("Fisher-Yates Shuffle:") - print("List", integers, strings) - print("FY Shuffle", fisher_yates_shuffle(integers), fisher_yates_shuffle(strings)) diff --git a/other/gauss_easter.py b/other/gauss_easter.py deleted file mode 100644 index 8c8c37c92796..000000000000 --- a/other/gauss_easter.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Computus#Gauss'_Easter_algorithm -""" - -import math -from datetime import UTC, datetime, timedelta - - -def gauss_easter(year: int) -> datetime: - """ - Calculation Gregorian easter date for given year - - >>> gauss_easter(2007) - datetime.datetime(2007, 4, 8, 0, 0, tzinfo=datetime.timezone.utc) - - >>> gauss_easter(2008) - datetime.datetime(2008, 3, 23, 0, 0, tzinfo=datetime.timezone.utc) - - >>> gauss_easter(2020) - datetime.datetime(2020, 4, 12, 0, 0, tzinfo=datetime.timezone.utc) - - >>> gauss_easter(2021) - datetime.datetime(2021, 4, 4, 0, 0, tzinfo=datetime.timezone.utc) - """ - metonic_cycle = year % 19 - julian_leap_year = year % 4 - non_leap_year = year % 7 - leap_day_inhibits = math.floor(year / 100) - lunar_orbit_correction = math.floor((13 + 8 * leap_day_inhibits) / 25) - leap_day_reinstall_number = leap_day_inhibits / 4 - secular_moon_shift = ( - 15 - lunar_orbit_correction + leap_day_inhibits - leap_day_reinstall_number - ) % 30 - century_starting_point = (4 + leap_day_inhibits - leap_day_reinstall_number) % 7 - - # days to be added to March 21 - days_to_add = (19 * metonic_cycle + secular_moon_shift) % 30 - - # PHM -> Paschal Full Moon - days_from_phm_to_sunday = ( - 2 * julian_leap_year - + 4 * non_leap_year - + 6 * days_to_add - + century_starting_point - ) % 7 - - if days_to_add == 29 and days_from_phm_to_sunday == 6: - return datetime(year, 4, 19, tzinfo=UTC) - elif days_to_add == 28 and days_from_phm_to_sunday == 6: - return datetime(year, 4, 18, tzinfo=UTC) - else: - return datetime(year, 3, 22, tzinfo=UTC) + timedelta( - days=int(days_to_add + days_from_phm_to_sunday) - ) - - -if __name__ == "__main__": - for year in (1994, 2000, 2010, 2021, 2023, 2032, 2100): - tense = "will be" if year > datetime.now(tz=UTC).year else "was" - print(f"Easter in {year} {tense} {gauss_easter(year)}") diff --git a/other/graham_scan.py b/other/graham_scan.py deleted file mode 100644 index 3f11d40f141c..000000000000 --- a/other/graham_scan.py +++ /dev/null @@ -1,172 +0,0 @@ -""" -This is a pure Python implementation of the Graham scan algorithm -Source: https://en.wikipedia.org/wiki/Graham_scan - -For doctests run following command: -python3 -m doctest -v graham_scan.py -""" - -from __future__ import annotations - -from collections import deque -from enum import Enum -from math import atan2, degrees -from sys import maxsize - - -# traversal from the lowest and the most left point in anti-clockwise direction -# if direction gets right, the previous point is not the convex hull. -class Direction(Enum): - left = 1 - straight = 2 - right = 3 - - def __repr__(self): - return f"{self.__class__.__name__}.{self.name}" - - -def angle_comparer(point: tuple[int, int], minx: int, miny: int) -> float: - """Return the angle toward to point from (minx, miny) - - :param point: The target point - minx: The starting point's x - miny: The starting point's y - :return: the angle - - Examples: - >>> angle_comparer((1,1), 0, 0) - 45.0 - - >>> angle_comparer((100,1), 10, 10) - -5.710593137499642 - - >>> angle_comparer((5,5), 2, 3) - 33.690067525979785 - """ - # sort the points accorgind to the angle from the lowest and the most left point - x, y = point - return degrees(atan2(y - miny, x - minx)) - - -def check_direction( - starting: tuple[int, int], via: tuple[int, int], target: tuple[int, int] -) -> Direction: - """Return the direction toward to the line from via to target from starting - - :param starting: The starting point - via: The via point - target: The target point - :return: the Direction - - Examples: - >>> check_direction((1,1), (2,2), (3,3)) - Direction.straight - - >>> check_direction((60,1), (-50,199), (30,2)) - Direction.left - - >>> check_direction((0,0), (5,5), (10,0)) - Direction.right - """ - x0, y0 = starting - x1, y1 = via - x2, y2 = target - via_angle = degrees(atan2(y1 - y0, x1 - x0)) - via_angle %= 360 - target_angle = degrees(atan2(y2 - y0, x2 - x0)) - target_angle %= 360 - # t- - # \ \ - # \ v - # \| - # s - # via_angle is always lower than target_angle, if direction is left. - # If they are same, it means they are on a same line of convex hull. - if target_angle > via_angle: - return Direction.left - elif target_angle == via_angle: - return Direction.straight - else: - return Direction.right - - -def graham_scan(points: list[tuple[int, int]]) -> list[tuple[int, int]]: - """Pure implementation of graham scan algorithm in Python - - :param points: The unique points on coordinates. - :return: The points on convex hell. - - Examples: - >>> graham_scan([(9, 6), (3, 1), (0, 0), (5, 5), (5, 2), (7, 0), (3, 3), (1, 4)]) - [(0, 0), (7, 0), (9, 6), (5, 5), (1, 4)] - - >>> graham_scan([(0, 0), (1, 0), (1, 1), (0, 1)]) - [(0, 0), (1, 0), (1, 1), (0, 1)] - - >>> graham_scan([(0, 0), (1, 1), (2, 2), (3, 3), (-1, 2)]) - [(0, 0), (1, 1), (2, 2), (3, 3), (-1, 2)] - - >>> graham_scan([(-100, 20), (99, 3), (1, 10000001), (5133186, -25), (-66, -4)]) - [(5133186, -25), (1, 10000001), (-100, 20), (-66, -4)] - """ - - if len(points) <= 2: - # There is no convex hull - raise ValueError("graham_scan: argument must contain more than 3 points.") - if len(points) == 3: - return points - # find the lowest and the most left point - minidx = 0 - miny, minx = maxsize, maxsize - for i, point in enumerate(points): - x = point[0] - y = point[1] - if y < miny: - miny = y - minx = x - minidx = i - if y == miny and x < minx: - minx = x - minidx = i - - # remove the lowest and the most left point from points for preparing for sort - points.pop(minidx) - - sorted_points = sorted(points, key=lambda point: angle_comparer(point, minx, miny)) - # This insert actually costs complexity, - # and you should instead add (minx, miny) into stack later. - # I'm using insert just for easy understanding. - sorted_points.insert(0, (minx, miny)) - - stack: deque[tuple[int, int]] = deque() - stack.append(sorted_points[0]) - stack.append(sorted_points[1]) - stack.append(sorted_points[2]) - # The first 3 points lines are towards the left because we sort them by their angle - # from minx, miny. - current_direction = Direction.left - - for i in range(3, len(sorted_points)): - while True: - starting = stack[-2] - via = stack[-1] - target = sorted_points[i] - next_direction = check_direction(starting, via, target) - - if next_direction == Direction.left: - current_direction = Direction.left - break - if next_direction == Direction.straight: - if current_direction == Direction.left: - # We keep current_direction as left. - # Because if the straight line keeps as straight, - # we want to know if this straight line is towards left. - break - elif current_direction == Direction.right: - # If the straight line is towards right, - # every previous points on that straight line is not convex hull. - stack.pop() - if next_direction == Direction.right: - stack.pop() - stack.append(sorted_points[i]) - return list(stack) diff --git a/other/greedy.py b/other/greedy.py deleted file mode 100644 index 72e05f451fbb..000000000000 --- a/other/greedy.py +++ /dev/null @@ -1,63 +0,0 @@ -class Things: - def __init__(self, name, value, weight): - self.name = name - self.value = value - self.weight = weight - - def __repr__(self): - return f"{self.__class__.__name__}({self.name}, {self.value}, {self.weight})" - - def get_value(self): - return self.value - - def get_name(self): - return self.name - - def get_weight(self): - return self.weight - - def value_weight(self): - return self.value / self.weight - - -def build_menu(name, value, weight): - menu = [] - for i in range(len(value)): - menu.append(Things(name[i], value[i], weight[i])) - return menu - - -def greedy(item, max_cost, key_func): - items_copy = sorted(item, key=key_func, reverse=True) - result = [] - total_value, total_cost = 0.0, 0.0 - for i in range(len(items_copy)): - if (total_cost + items_copy[i].get_weight()) <= max_cost: - result.append(items_copy[i]) - total_cost += items_copy[i].get_weight() - total_value += items_copy[i].get_value() - return (result, total_value) - - -def test_greedy(): - """ - >>> food = ["Burger", "Pizza", "Coca Cola", "Rice", - ... "Sambhar", "Chicken", "Fries", "Milk"] - >>> value = [80, 100, 60, 70, 50, 110, 90, 60] - >>> weight = [40, 60, 40, 70, 100, 85, 55, 70] - >>> foods = build_menu(food, value, weight) - >>> foods # doctest: +NORMALIZE_WHITESPACE - [Things(Burger, 80, 40), Things(Pizza, 100, 60), Things(Coca Cola, 60, 40), - Things(Rice, 70, 70), Things(Sambhar, 50, 100), Things(Chicken, 110, 85), - Things(Fries, 90, 55), Things(Milk, 60, 70)] - >>> greedy(foods, 500, Things.get_value) # doctest: +NORMALIZE_WHITESPACE - ([Things(Chicken, 110, 85), Things(Pizza, 100, 60), Things(Fries, 90, 55), - Things(Burger, 80, 40), Things(Rice, 70, 70), Things(Coca Cola, 60, 40), - Things(Milk, 60, 70)], 570.0) - """ - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/guess_the_number_search.py b/other/guess_the_number_search.py deleted file mode 100644 index 01e8898bbb8a..000000000000 --- a/other/guess_the_number_search.py +++ /dev/null @@ -1,165 +0,0 @@ -""" -guess the number using lower,higher and the value to find or guess - -solution works by dividing lower and higher of number guessed - -suppose lower is 0, higher is 1000 and the number to guess is 355 - ->>> guess_the_number(10, 1000, 17) -started... -guess the number : 17 -details : [505, 257, 133, 71, 40, 25, 17] - -""" - - -def temp_input_value( - min_val: int = 10, max_val: int = 1000, option: bool = True -) -> int: - """ - Temporary input values for tests - - >>> temp_input_value(option=True) - 10 - - >>> temp_input_value(option=False) - 1000 - - >>> temp_input_value(min_val=100, option=True) - 100 - - >>> temp_input_value(min_val=100, max_val=50) - Traceback (most recent call last): - ... - ValueError: Invalid value for min_val or max_val (min_value < max_value) - - >>> temp_input_value("ten","fifty",1) - Traceback (most recent call last): - ... - AssertionError: Invalid type of value(s) specified to function! - - >>> temp_input_value(min_val=-100, max_val=500) - -100 - - >>> temp_input_value(min_val=-5100, max_val=-100) - -5100 - """ - assert ( - isinstance(min_val, int) - and isinstance(max_val, int) - and isinstance(option, bool) - ), "Invalid type of value(s) specified to function!" - - if min_val > max_val: - raise ValueError("Invalid value for min_val or max_val (min_value < max_value)") - return min_val if option else max_val - - -def get_avg(number_1: int, number_2: int) -> int: - """ - Return the mid-number(whole) of two integers a and b - - >>> get_avg(10, 15) - 12 - - >>> get_avg(20, 300) - 160 - - >>> get_avg("abcd", 300) - Traceback (most recent call last): - ... - TypeError: can only concatenate str (not "int") to str - - >>> get_avg(10.5,50.25) - 30 - """ - return int((number_1 + number_2) / 2) - - -def guess_the_number(lower: int, higher: int, to_guess: int) -> None: - """ - The `guess_the_number` function that guess the number by some operations - and using inner functions - - >>> guess_the_number(10, 1000, 17) - started... - guess the number : 17 - details : [505, 257, 133, 71, 40, 25, 17] - - >>> guess_the_number(-10000, 10000, 7) - started... - guess the number : 7 - details : [0, 5000, 2500, 1250, 625, 312, 156, 78, 39, 19, 9, 4, 6, 7] - - >>> guess_the_number(10, 1000, "a") - Traceback (most recent call last): - ... - AssertionError: argument values must be type of "int" - - >>> guess_the_number(10, 1000, 5) - Traceback (most recent call last): - ... - ValueError: guess value must be within the range of lower and higher value - - >>> guess_the_number(10000, 100, 5) - Traceback (most recent call last): - ... - ValueError: argument value for lower and higher must be(lower > higher) - """ - assert ( - isinstance(lower, int) and isinstance(higher, int) and isinstance(to_guess, int) - ), 'argument values must be type of "int"' - - if lower > higher: - raise ValueError("argument value for lower and higher must be(lower > higher)") - - if not lower < to_guess < higher: - raise ValueError( - "guess value must be within the range of lower and higher value" - ) - - def answer(number: int) -> str: - """ - Returns value by comparing with entered `to_guess` number - """ - if number > to_guess: - return "high" - elif number < to_guess: - return "low" - else: - return "same" - - print("started...") - - last_lowest = lower - last_highest = higher - - last_numbers = [] - - while True: - number = get_avg(last_lowest, last_highest) - last_numbers.append(number) - - if answer(number) == "low": - last_lowest = number - elif answer(number) == "high": - last_highest = number - else: - break - - print(f"guess the number : {last_numbers[-1]}") - print(f"details : {last_numbers!s}") - - -def main() -> None: - """ - starting point or function of script - """ - lower = int(input("Enter lower value : ").strip()) - higher = int(input("Enter high value : ").strip()) - guess = int(input("Enter value to guess : ").strip()) - guess_the_number(lower, higher, guess) - - -if __name__ == "__main__": - main() diff --git a/other/h_index.py b/other/h_index.py deleted file mode 100644 index e91389675b16..000000000000 --- a/other/h_index.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -Task: -Given an array of integers citations where citations[i] is the number of -citations a researcher received for their ith paper, return compute the -researcher's h-index. - -According to the definition of h-index on Wikipedia: A scientist has an -index h if h of their n papers have at least h citations each, and the other -n - h papers have no more than h citations each. - -If there are several possible values for h, the maximum one is taken as the -h-index. - -H-Index link: https://en.wikipedia.org/wiki/H-index - -Implementation notes: -Use sorting of array - -Leetcode link: https://leetcode.com/problems/h-index/description/ - -n = len(citations) -Runtime Complexity: O(n * log(n)) -Space Complexity: O(1) - -""" - - -def h_index(citations: list[int]) -> int: - """ - Return H-index of citations - - >>> h_index([3, 0, 6, 1, 5]) - 3 - >>> h_index([1, 3, 1]) - 1 - >>> h_index([1, 2, 3]) - 2 - >>> h_index('test') - Traceback (most recent call last): - ... - ValueError: The citations should be a list of non negative integers. - >>> h_index([1,2,'3']) - Traceback (most recent call last): - ... - ValueError: The citations should be a list of non negative integers. - >>> h_index([1,2,-3]) - Traceback (most recent call last): - ... - ValueError: The citations should be a list of non negative integers. - """ - - # validate: - if not isinstance(citations, list) or not all( - isinstance(item, int) and item >= 0 for item in citations - ): - raise ValueError("The citations should be a list of non negative integers.") - - citations.sort() - len_citations = len(citations) - - for i in range(len_citations): - if citations[len_citations - 1 - i] <= i: - return i - - return len_citations - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/least_recently_used.py b/other/least_recently_used.py deleted file mode 100644 index cb692bb1b1c0..000000000000 --- a/other/least_recently_used.py +++ /dev/null @@ -1,92 +0,0 @@ -from __future__ import annotations - -import sys -from collections import deque -from typing import Generic, TypeVar - -T = TypeVar("T") - - -class LRUCache(Generic[T]): - """ - Page Replacement Algorithm, Least Recently Used (LRU) Caching. - - >>> lru_cache: LRUCache[str | int] = LRUCache(4) - >>> lru_cache.refer("A") - >>> lru_cache.refer(2) - >>> lru_cache.refer(3) - - >>> lru_cache - LRUCache(4) => [3, 2, 'A'] - - >>> lru_cache.refer("A") - >>> lru_cache - LRUCache(4) => ['A', 3, 2] - - >>> lru_cache.refer(4) - >>> lru_cache.refer(5) - >>> lru_cache - LRUCache(4) => [5, 4, 'A', 3] - - """ - - dq_store: deque[T] # Cache store of keys - key_reference: set[T] # References of the keys in cache - _MAX_CAPACITY: int = 10 # Maximum capacity of cache - - def __init__(self, n: int) -> None: - """Creates an empty store and map for the keys. - The LRUCache is set the size n. - """ - self.dq_store = deque() - self.key_reference = set() - if not n: - LRUCache._MAX_CAPACITY = sys.maxsize - elif n < 0: - raise ValueError("n should be an integer greater than 0.") - else: - LRUCache._MAX_CAPACITY = n - - def refer(self, x: T) -> None: - """ - Looks for a page in the cache store and adds reference to the set. - Remove the least recently used key if the store is full. - Update store to reflect recent access. - """ - if x not in self.key_reference: - if len(self.dq_store) == LRUCache._MAX_CAPACITY: - last_element = self.dq_store.pop() - self.key_reference.remove(last_element) - else: - self.dq_store.remove(x) - - self.dq_store.appendleft(x) - self.key_reference.add(x) - - def display(self) -> None: - """ - Prints all the elements in the store. - """ - for k in self.dq_store: - print(k) - - def __repr__(self) -> str: - return f"LRUCache({self._MAX_CAPACITY}) => {list(self.dq_store)}" - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - lru_cache: LRUCache[str | int] = LRUCache(4) - lru_cache.refer("A") - lru_cache.refer(2) - lru_cache.refer(3) - lru_cache.refer("A") - lru_cache.refer(4) - lru_cache.refer(5) - lru_cache.display() - - print(lru_cache) - assert str(lru_cache) == "LRUCache(4) => [5, 4, 'A', 3]" diff --git a/other/lfu_cache.py b/other/lfu_cache.py deleted file mode 100644 index 788fdf19bb60..000000000000 --- a/other/lfu_cache.py +++ /dev/null @@ -1,317 +0,0 @@ -from __future__ import annotations - -from collections.abc import Callable -from typing import Generic, TypeVar - -T = TypeVar("T") -U = TypeVar("U") - - -class DoubleLinkedListNode(Generic[T, U]): - """ - Double Linked List Node built specifically for LFU Cache - - >>> node = DoubleLinkedListNode(1,1) - >>> node - Node: key: 1, val: 1, freq: 0, has next: False, has prev: False - """ - - def __init__(self, key: T | None, val: U | None): - self.key = key - self.val = val - self.freq: int = 0 - self.next: DoubleLinkedListNode[T, U] | None = None - self.prev: DoubleLinkedListNode[T, U] | None = None - - def __repr__(self) -> str: - return ( - f"Node: key: {self.key}, val: {self.val}, freq: {self.freq}, " - f"has next: {self.next is not None}, has prev: {self.prev is not None}" - ) - - -class DoubleLinkedList(Generic[T, U]): - """ - Double Linked List built specifically for LFU Cache - - >>> dll: DoubleLinkedList = DoubleLinkedList() - >>> dll - DoubleLinkedList, - Node: key: None, val: None, freq: 0, has next: True, has prev: False, - Node: key: None, val: None, freq: 0, has next: False, has prev: True - - >>> first_node = DoubleLinkedListNode(1,10) - >>> first_node - Node: key: 1, val: 10, freq: 0, has next: False, has prev: False - - - >>> dll.add(first_node) - >>> dll - DoubleLinkedList, - Node: key: None, val: None, freq: 0, has next: True, has prev: False, - Node: key: 1, val: 10, freq: 1, has next: True, has prev: True, - Node: key: None, val: None, freq: 0, has next: False, has prev: True - - >>> # node is mutated - >>> first_node - Node: key: 1, val: 10, freq: 1, has next: True, has prev: True - - >>> second_node = DoubleLinkedListNode(2,20) - >>> second_node - Node: key: 2, val: 20, freq: 0, has next: False, has prev: False - - >>> dll.add(second_node) - >>> dll - DoubleLinkedList, - Node: key: None, val: None, freq: 0, has next: True, has prev: False, - Node: key: 1, val: 10, freq: 1, has next: True, has prev: True, - Node: key: 2, val: 20, freq: 1, has next: True, has prev: True, - Node: key: None, val: None, freq: 0, has next: False, has prev: True - - >>> removed_node = dll.remove(first_node) - >>> assert removed_node == first_node - >>> dll - DoubleLinkedList, - Node: key: None, val: None, freq: 0, has next: True, has prev: False, - Node: key: 2, val: 20, freq: 1, has next: True, has prev: True, - Node: key: None, val: None, freq: 0, has next: False, has prev: True - - - >>> # Attempt to remove node not on list - >>> removed_node = dll.remove(first_node) - >>> removed_node is None - True - - >>> # Attempt to remove head or rear - >>> dll.head - Node: key: None, val: None, freq: 0, has next: True, has prev: False - >>> dll.remove(dll.head) is None - True - - >>> # Attempt to remove head or rear - >>> dll.rear - Node: key: None, val: None, freq: 0, has next: False, has prev: True - >>> dll.remove(dll.rear) is None - True - - - """ - - def __init__(self) -> None: - self.head: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None) - self.rear: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None) - self.head.next, self.rear.prev = self.rear, self.head - - def __repr__(self) -> str: - rep = ["DoubleLinkedList"] - node = self.head - while node.next is not None: - rep.append(str(node)) - node = node.next - rep.append(str(self.rear)) - return ",\n ".join(rep) - - def add(self, node: DoubleLinkedListNode[T, U]) -> None: - """ - Adds the given node at the tail of the list and shifting it to proper position - """ - - previous = self.rear.prev - - # All nodes other than self.head are guaranteed to have non-None previous - assert previous is not None - - previous.next = node - node.prev = previous - self.rear.prev = node - node.next = self.rear - node.freq += 1 - self._position_node(node) - - def _position_node(self, node: DoubleLinkedListNode[T, U]) -> None: - """ - Moves node forward to maintain invariant of sort by freq value - """ - - while node.prev is not None and node.prev.freq > node.freq: - # swap node with previous node - previous_node = node.prev - - node.prev = previous_node.prev - previous_node.next = node.prev - node.next = previous_node - previous_node.prev = node - - def remove( - self, node: DoubleLinkedListNode[T, U] - ) -> DoubleLinkedListNode[T, U] | None: - """ - Removes and returns the given node from the list - - Returns None if node.prev or node.next is None - """ - - if node.prev is None or node.next is None: - return None - - node.prev.next = node.next - node.next.prev = node.prev - node.prev = None - node.next = None - return node - - -class LFUCache(Generic[T, U]): - """ - LFU Cache to store a given capacity of data. Can be used as a stand-alone object - or as a function decorator. - - >>> cache = LFUCache(2) - >>> cache.put(1, 1) - >>> cache.put(2, 2) - >>> cache.get(1) - 1 - >>> cache.put(3, 3) - >>> cache.get(2) is None - True - >>> cache.put(4, 4) - >>> cache.get(1) is None - True - >>> cache.get(3) - 3 - >>> cache.get(4) - 4 - >>> cache - CacheInfo(hits=3, misses=2, capacity=2, current_size=2) - >>> @LFUCache.decorator(100) - ... def fib(num): - ... if num in (1, 2): - ... return 1 - ... return fib(num - 1) + fib(num - 2) - - >>> for i in range(1, 101): - ... res = fib(i) - - >>> fib.cache_info() - CacheInfo(hits=196, misses=100, capacity=100, current_size=100) - """ - - # class variable to map the decorator functions to their respective instance - decorator_function_to_instance_map: dict[Callable[[T], U], LFUCache[T, U]] = {} - - def __init__(self, capacity: int): - self.list: DoubleLinkedList[T, U] = DoubleLinkedList() - self.capacity = capacity - self.num_keys = 0 - self.hits = 0 - self.miss = 0 - self.cache: dict[T, DoubleLinkedListNode[T, U]] = {} - - def __repr__(self) -> str: - """ - Return the details for the cache instance - [hits, misses, capacity, current_size] - """ - - return ( - f"CacheInfo(hits={self.hits}, misses={self.miss}, " - f"capacity={self.capacity}, current_size={self.num_keys})" - ) - - def __contains__(self, key: T) -> bool: - """ - >>> cache = LFUCache(1) - - >>> 1 in cache - False - - >>> cache.put(1, 1) - >>> 1 in cache - True - """ - - return key in self.cache - - def get(self, key: T) -> U | None: - """ - Returns the value for the input key and updates the Double Linked List. Returns - Returns None if key is not present in cache - """ - - if key in self.cache: - self.hits += 1 - value_node: DoubleLinkedListNode[T, U] = self.cache[key] - node = self.list.remove(self.cache[key]) - assert node == value_node - - # node is guaranteed not None because it is in self.cache - assert node is not None - self.list.add(node) - return node.val - self.miss += 1 - return None - - def put(self, key: T, value: U) -> None: - """ - Sets the value for the input key and updates the Double Linked List - """ - - if key not in self.cache: - if self.num_keys >= self.capacity: - # delete first node when over capacity - first_node = self.list.head.next - - # guaranteed to have a non-None first node when num_keys > 0 - # explain to type checker via assertions - assert first_node is not None - assert first_node.key is not None - assert self.list.remove(first_node) is not None - # first_node guaranteed to be in list - - del self.cache[first_node.key] - self.num_keys -= 1 - self.cache[key] = DoubleLinkedListNode(key, value) - self.list.add(self.cache[key]) - self.num_keys += 1 - - else: - node = self.list.remove(self.cache[key]) - assert node is not None # node guaranteed to be in list - node.val = value - self.list.add(node) - - @classmethod - def decorator( - cls: type[LFUCache[T, U]], size: int = 128 - ) -> Callable[[Callable[[T], U]], Callable[..., U]]: - """ - Decorator version of LFU Cache - - Decorated function must be function of T -> U - """ - - def cache_decorator_inner(func: Callable[[T], U]) -> Callable[..., U]: - def cache_decorator_wrapper(*args: T) -> U: - if func not in cls.decorator_function_to_instance_map: - cls.decorator_function_to_instance_map[func] = LFUCache(size) - - result = cls.decorator_function_to_instance_map[func].get(args[0]) - if result is None: - result = func(*args) - cls.decorator_function_to_instance_map[func].put(args[0], result) - return result - - def cache_info() -> LFUCache[T, U]: - return cls.decorator_function_to_instance_map[func] - - setattr(cache_decorator_wrapper, "cache_info", cache_info) # noqa: B010 - - return cache_decorator_wrapper - - return cache_decorator_inner - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/linear_congruential_generator.py b/other/linear_congruential_generator.py deleted file mode 100644 index c7de15b94bbd..000000000000 --- a/other/linear_congruential_generator.py +++ /dev/null @@ -1,43 +0,0 @@ -__author__ = "Tobias Carryer" - -from time import time - - -class LinearCongruentialGenerator: - """ - A pseudorandom number generator. - """ - - # The default value for **seed** is the result of a function call, which is not - # normally recommended and causes ruff to raise a B008 error. However, in this case, - # it is acceptable because `LinearCongruentialGenerator.__init__()` will only be - # called once per instance and it ensures that each instance will generate a unique - # sequence of numbers. - - def __init__(self, multiplier, increment, modulo, seed=int(time())): # noqa: B008 - """ - These parameters are saved and used when nextNumber() is called. - - modulo is the largest number that can be generated (exclusive). The most - efficient values are powers of 2. 2^32 is a common value. - """ - self.multiplier = multiplier - self.increment = increment - self.modulo = modulo - self.seed = seed - - def next_number(self): - """ - The smallest number that can be generated is zero. - The largest number that can be generated is modulo-1. modulo is set in the - constructor. - """ - self.seed = (self.multiplier * self.seed + self.increment) % self.modulo - return self.seed - - -if __name__ == "__main__": - # Show the LCG in action. - lcg = LinearCongruentialGenerator(1664525, 1013904223, 2 << 31) - while True: - print(lcg.next_number()) diff --git a/other/lru_cache.py b/other/lru_cache.py deleted file mode 100644 index 1e5eeac45b4e..000000000000 --- a/other/lru_cache.py +++ /dev/null @@ -1,334 +0,0 @@ -from __future__ import annotations - -from collections.abc import Callable -from typing import Generic, TypeVar - -T = TypeVar("T") -U = TypeVar("U") - - -class DoubleLinkedListNode(Generic[T, U]): - """ - Double Linked List Node built specifically for LRU Cache - - >>> DoubleLinkedListNode(1,1) - Node: key: 1, val: 1, has next: False, has prev: False - """ - - def __init__(self, key: T | None, val: U | None): - self.key = key - self.val = val - self.next: DoubleLinkedListNode[T, U] | None = None - self.prev: DoubleLinkedListNode[T, U] | None = None - - def __repr__(self) -> str: - return ( - f"Node: key: {self.key}, val: {self.val}, " - f"has next: {bool(self.next)}, has prev: {bool(self.prev)}" - ) - - -class DoubleLinkedList(Generic[T, U]): - """ - Double Linked List built specifically for LRU Cache - - >>> dll: DoubleLinkedList = DoubleLinkedList() - >>> dll - DoubleLinkedList, - Node: key: None, val: None, has next: True, has prev: False, - Node: key: None, val: None, has next: False, has prev: True - - >>> first_node = DoubleLinkedListNode(1,10) - >>> first_node - Node: key: 1, val: 10, has next: False, has prev: False - - - >>> dll.add(first_node) - >>> dll - DoubleLinkedList, - Node: key: None, val: None, has next: True, has prev: False, - Node: key: 1, val: 10, has next: True, has prev: True, - Node: key: None, val: None, has next: False, has prev: True - - >>> # node is mutated - >>> first_node - Node: key: 1, val: 10, has next: True, has prev: True - - >>> second_node = DoubleLinkedListNode(2,20) - >>> second_node - Node: key: 2, val: 20, has next: False, has prev: False - - >>> dll.add(second_node) - >>> dll - DoubleLinkedList, - Node: key: None, val: None, has next: True, has prev: False, - Node: key: 1, val: 10, has next: True, has prev: True, - Node: key: 2, val: 20, has next: True, has prev: True, - Node: key: None, val: None, has next: False, has prev: True - - >>> removed_node = dll.remove(first_node) - >>> assert removed_node == first_node - >>> dll - DoubleLinkedList, - Node: key: None, val: None, has next: True, has prev: False, - Node: key: 2, val: 20, has next: True, has prev: True, - Node: key: None, val: None, has next: False, has prev: True - - - >>> # Attempt to remove node not on list - >>> removed_node = dll.remove(first_node) - >>> removed_node is None - True - - >>> # Attempt to remove head or rear - >>> dll.head - Node: key: None, val: None, has next: True, has prev: False - >>> dll.remove(dll.head) is None - True - - >>> # Attempt to remove head or rear - >>> dll.rear - Node: key: None, val: None, has next: False, has prev: True - >>> dll.remove(dll.rear) is None - True - - - """ - - def __init__(self) -> None: - self.head: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None) - self.rear: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None) - self.head.next, self.rear.prev = self.rear, self.head - - def __repr__(self) -> str: - rep = ["DoubleLinkedList"] - node = self.head - while node.next is not None: - rep.append(str(node)) - node = node.next - rep.append(str(self.rear)) - return ",\n ".join(rep) - - def add(self, node: DoubleLinkedListNode[T, U]) -> None: - """ - Adds the given node to the end of the list (before rear) - """ - - previous = self.rear.prev - - # All nodes other than self.head are guaranteed to have non-None previous - assert previous is not None - - previous.next = node - node.prev = previous - self.rear.prev = node - node.next = self.rear - - def remove( - self, node: DoubleLinkedListNode[T, U] - ) -> DoubleLinkedListNode[T, U] | None: - """ - Removes and returns the given node from the list - - Returns None if node.prev or node.next is None - """ - - if node.prev is None or node.next is None: - return None - - node.prev.next = node.next - node.next.prev = node.prev - node.prev = None - node.next = None - return node - - -class LRUCache(Generic[T, U]): - """ - LRU Cache to store a given capacity of data. Can be used as a stand-alone object - or as a function decorator. - - >>> cache = LRUCache(2) - - >>> cache.put(1, 1) - >>> cache.put(2, 2) - >>> cache.get(1) - 1 - - >>> cache.list - DoubleLinkedList, - Node: key: None, val: None, has next: True, has prev: False, - Node: key: 2, val: 2, has next: True, has prev: True, - Node: key: 1, val: 1, has next: True, has prev: True, - Node: key: None, val: None, has next: False, has prev: True - - >>> cache.cache # doctest: +NORMALIZE_WHITESPACE - {1: Node: key: 1, val: 1, has next: True, has prev: True, \ - 2: Node: key: 2, val: 2, has next: True, has prev: True} - - >>> cache.put(3, 3) - - >>> cache.list - DoubleLinkedList, - Node: key: None, val: None, has next: True, has prev: False, - Node: key: 1, val: 1, has next: True, has prev: True, - Node: key: 3, val: 3, has next: True, has prev: True, - Node: key: None, val: None, has next: False, has prev: True - - >>> cache.cache # doctest: +NORMALIZE_WHITESPACE - {1: Node: key: 1, val: 1, has next: True, has prev: True, \ - 3: Node: key: 3, val: 3, has next: True, has prev: True} - - >>> cache.get(2) is None - True - - >>> cache.put(4, 4) - - >>> cache.get(1) is None - True - - >>> cache.get(3) - 3 - - >>> cache.get(4) - 4 - - >>> cache - CacheInfo(hits=3, misses=2, capacity=2, current size=2) - - >>> @LRUCache.decorator(100) - ... def fib(num): - ... if num in (1, 2): - ... return 1 - ... return fib(num - 1) + fib(num - 2) - - >>> for i in range(1, 100): - ... res = fib(i) - - >>> fib.cache_info() - CacheInfo(hits=194, misses=99, capacity=100, current size=99) - """ - - # class variable to map the decorator functions to their respective instance - decorator_function_to_instance_map: dict[Callable[[T], U], LRUCache[T, U]] = {} - - def __init__(self, capacity: int): - self.list: DoubleLinkedList[T, U] = DoubleLinkedList() - self.capacity = capacity - self.num_keys = 0 - self.hits = 0 - self.miss = 0 - self.cache: dict[T, DoubleLinkedListNode[T, U]] = {} - - def __repr__(self) -> str: - """ - Return the details for the cache instance - [hits, misses, capacity, current_size] - """ - - return ( - f"CacheInfo(hits={self.hits}, misses={self.miss}, " - f"capacity={self.capacity}, current size={self.num_keys})" - ) - - def __contains__(self, key: T) -> bool: - """ - >>> cache = LRUCache(1) - - >>> 1 in cache - False - - >>> cache.put(1, 1) - - >>> 1 in cache - True - """ - - return key in self.cache - - def get(self, key: T) -> U | None: - """ - Returns the value for the input key and updates the Double Linked List. - Returns None if key is not present in cache - """ - # Note: pythonic interface would throw KeyError rather than return None - - if key in self.cache: - self.hits += 1 - value_node: DoubleLinkedListNode[T, U] = self.cache[key] - node = self.list.remove(self.cache[key]) - assert node == value_node - - # node is guaranteed not None because it is in self.cache - assert node is not None - self.list.add(node) - return node.val - self.miss += 1 - return None - - def put(self, key: T, value: U) -> None: - """ - Sets the value for the input key and updates the Double Linked List - """ - - if key not in self.cache: - if self.num_keys >= self.capacity: - # delete first node (oldest) when over capacity - first_node = self.list.head.next - - # guaranteed to have a non-None first node when num_keys > 0 - # explain to type checker via assertions - assert first_node is not None - assert first_node.key is not None - assert ( - self.list.remove(first_node) is not None - ) # node guaranteed to be in list assert node.key is not None - - del self.cache[first_node.key] - self.num_keys -= 1 - self.cache[key] = DoubleLinkedListNode(key, value) - self.list.add(self.cache[key]) - self.num_keys += 1 - - else: - # bump node to the end of the list, update value - node = self.list.remove(self.cache[key]) - assert node is not None # node guaranteed to be in list - node.val = value - self.list.add(node) - - @classmethod - def decorator( - cls, size: int = 128 - ) -> Callable[[Callable[[T], U]], Callable[..., U]]: - """ - Decorator version of LRU Cache - - Decorated function must be function of T -> U - """ - - def cache_decorator_inner(func: Callable[[T], U]) -> Callable[..., U]: - def cache_decorator_wrapper(*args: T) -> U: - if func not in cls.decorator_function_to_instance_map: - cls.decorator_function_to_instance_map[func] = LRUCache(size) - - result = cls.decorator_function_to_instance_map[func].get(args[0]) - if result is None: - result = func(*args) - cls.decorator_function_to_instance_map[func].put(args[0], result) - return result - - def cache_info() -> LRUCache[T, U]: - return cls.decorator_function_to_instance_map[func] - - setattr(cache_decorator_wrapper, "cache_info", cache_info) # noqa: B010 - - return cache_decorator_wrapper - - return cache_decorator_inner - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/magicdiamondpattern.py b/other/magicdiamondpattern.py deleted file mode 100644 index 58889280ab17..000000000000 --- a/other/magicdiamondpattern.py +++ /dev/null @@ -1,79 +0,0 @@ -# Python program for generating diamond pattern in Python 3.7+ - - -# Function to print upper half of diamond (pyramid) -def floyd(n): - """ - Print the upper half of a diamond pattern with '*' characters. - - Args: - n (int): Size of the pattern. - - Examples: - >>> floyd(3) - ' * \\n * * \\n* * * \\n' - - >>> floyd(5) - ' * \\n * * \\n * * * \\n * * * * \\n* * * * * \\n' - """ - result = "" - for i in range(n): - for _ in range(n - i - 1): # printing spaces - result += " " - for _ in range(i + 1): # printing stars - result += "* " - result += "\n" - return result - - -# Function to print lower half of diamond (pyramid) -def reverse_floyd(n): - """ - Print the lower half of a diamond pattern with '*' characters. - - Args: - n (int): Size of the pattern. - - Examples: - >>> reverse_floyd(3) - '* * * \\n * * \\n * \\n ' - - >>> reverse_floyd(5) - '* * * * * \\n * * * * \\n * * * \\n * * \\n * \\n ' - """ - result = "" - for i in range(n, 0, -1): - for _ in range(i, 0, -1): # printing stars - result += "* " - result += "\n" - for _ in range(n - i + 1, 0, -1): # printing spaces - result += " " - return result - - -# Function to print complete diamond pattern of "*" -def pretty_print(n): - """ - Print a complete diamond pattern with '*' characters. - - Args: - n (int): Size of the pattern. - - Examples: - >>> pretty_print(0) - ' ... .... nothing printing :(' - - >>> pretty_print(3) - ' * \\n * * \\n* * * \\n* * * \\n * * \\n * \\n ' - """ - if n <= 0: - return " ... .... nothing printing :(" - upper_half = floyd(n) # upper half - lower_half = reverse_floyd(n) # lower half - return upper_half + lower_half - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/majority_vote_algorithm.py b/other/majority_vote_algorithm.py deleted file mode 100644 index 8d3b56707d06..000000000000 --- a/other/majority_vote_algorithm.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -This is Booyer-Moore Majority Vote Algorithm. The problem statement goes like this: -Given an integer array of size n, find all elements that appear more than ⌊ n/k ⌋ times. -We have to solve in O(n) time and O(1) Space. -URL : https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm -""" - -from collections import Counter - - -def majority_vote(votes: list[int], votes_needed_to_win: int) -> list[int]: - """ - >>> majority_vote([1, 2, 2, 3, 1, 3, 2], 3) - [2] - >>> majority_vote([1, 2, 2, 3, 1, 3, 2], 2) - [] - >>> majority_vote([1, 2, 2, 3, 1, 3, 2], 4) - [1, 2, 3] - """ - majority_candidate_counter: Counter[int] = Counter() - for vote in votes: - majority_candidate_counter[vote] += 1 - if len(majority_candidate_counter) == votes_needed_to_win: - majority_candidate_counter -= Counter(set(majority_candidate_counter)) - majority_candidate_counter = Counter( - vote for vote in votes if vote in majority_candidate_counter - ) - return [ - vote - for vote in majority_candidate_counter - if majority_candidate_counter[vote] > len(votes) / votes_needed_to_win - ] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/maximum_subsequence.py b/other/maximum_subsequence.py deleted file mode 100644 index f81717596532..000000000000 --- a/other/maximum_subsequence.py +++ /dev/null @@ -1,42 +0,0 @@ -from collections.abc import Sequence - - -def max_subsequence_sum(nums: Sequence[int] | None = None) -> int: - """Return the maximum possible sum amongst all non - empty subsequences. - - Raises: - ValueError: when nums is empty. - - >>> max_subsequence_sum([1,2,3,4,-2]) - 10 - >>> max_subsequence_sum([-2, -3, -1, -4, -6]) - -1 - >>> max_subsequence_sum([]) - Traceback (most recent call last): - . . . - ValueError: Input sequence should not be empty - >>> max_subsequence_sum() - Traceback (most recent call last): - . . . - ValueError: Input sequence should not be empty - """ - if nums is None or not nums: - raise ValueError("Input sequence should not be empty") - - ans = nums[0] - for i in range(1, len(nums)): - num = nums[i] - ans = max(ans, ans + num, num) - - return ans - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Try on a sample input from the user - n = int(input("Enter number of elements : ").strip()) - array = list(map(int, input("\nEnter the numbers : ").strip().split()))[:n] - print(max_subsequence_sum(array)) diff --git a/other/nested_brackets.py b/other/nested_brackets.py deleted file mode 100644 index 5760fa29b2fd..000000000000 --- a/other/nested_brackets.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -The nested brackets problem is a problem that determines if a sequence of -brackets are properly nested. A sequence of brackets s is considered properly nested -if any of the following conditions are true: - - - s is empty - - s has the form (U) or [U] or {U} where U is a properly nested string - - s has the form VW where V and W are properly nested strings - -For example, the string "()()[()]" is properly nested but "[(()]" is not. - -The function called is_balanced takes as input a string S which is a sequence of -brackets and returns true if S is nested and false otherwise. -""" - - -def is_balanced(s: str) -> bool: - """ - >>> is_balanced("") - True - >>> is_balanced("()") - True - >>> is_balanced("[]") - True - >>> is_balanced("{}") - True - >>> is_balanced("()[]{}") - True - >>> is_balanced("(())") - True - >>> is_balanced("[[") - False - >>> is_balanced("([{}])") - True - >>> is_balanced("(()[)]") - False - >>> is_balanced("([)]") - False - >>> is_balanced("[[()]]") - True - >>> is_balanced("(()(()))") - True - >>> is_balanced("]") - False - >>> is_balanced("Life is a bowl of cherries.") - True - >>> is_balanced("Life is a bowl of che{}ies.") - True - >>> is_balanced("Life is a bowl of che}{ies.") - False - """ - open_to_closed = {"{": "}", "[": "]", "(": ")"} - stack = [] - for symbol in s: - if symbol in open_to_closed: - stack.append(symbol) - elif symbol in open_to_closed.values() and ( - not stack or open_to_closed[stack.pop()] != symbol - ): - return False - return not stack # stack should be empty - - -def main(): - s = input("Enter sequence of brackets: ") - print(f"'{s}' is {'' if is_balanced(s) else 'not '}balanced.") - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - main() diff --git a/other/number_container_system.py b/other/number_container_system.py deleted file mode 100644 index 6c95dd0a3544..000000000000 --- a/other/number_container_system.py +++ /dev/null @@ -1,180 +0,0 @@ -""" -A number container system that uses binary search to delete and insert values into -arrays with O(log n) write times and O(1) read times. - -This container system holds integers at indexes. - -Further explained in this leetcode problem -> https://leetcode.com/problems/minimum-cost-tree-from-leaf-values -""" - - -class NumberContainer: - def __init__(self) -> None: - # numbermap keys are the number and its values are lists of indexes sorted - # in ascending order - self.numbermap: dict[int, list[int]] = {} - # indexmap keys are an index and it's values are the number at that index - self.indexmap: dict[int, int] = {} - - def binary_search_delete(self, array: list | str | range, item: int) -> list[int]: - """ - Removes the item from the sorted array and returns - the new array. - - >>> NumberContainer().binary_search_delete([1,2,3], 2) - [1, 3] - >>> NumberContainer().binary_search_delete([0, 0, 0], 0) - [0, 0] - >>> NumberContainer().binary_search_delete([-1, -1, -1], -1) - [-1, -1] - >>> NumberContainer().binary_search_delete([-1, 0], 0) - [-1] - >>> NumberContainer().binary_search_delete([-1, 0], -1) - [0] - >>> NumberContainer().binary_search_delete(range(7), 3) - [0, 1, 2, 4, 5, 6] - >>> NumberContainer().binary_search_delete([1.1, 2.2, 3.3], 2.2) - [1.1, 3.3] - >>> NumberContainer().binary_search_delete("abcde", "c") - ['a', 'b', 'd', 'e'] - >>> NumberContainer().binary_search_delete([0, -1, 2, 4], 0) - Traceback (most recent call last): - ... - ValueError: Either the item is not in the array or the array was unsorted - >>> NumberContainer().binary_search_delete([2, 0, 4, -1, 11], -1) - Traceback (most recent call last): - ... - ValueError: Either the item is not in the array or the array was unsorted - >>> NumberContainer().binary_search_delete(125, 1) - Traceback (most recent call last): - ... - TypeError: binary_search_delete() only accepts either a list, range or str - """ - if isinstance(array, (range, str)): - array = list(array) - elif not isinstance(array, list): - raise TypeError( - "binary_search_delete() only accepts either a list, range or str" - ) - - low = 0 - high = len(array) - 1 - - while low <= high: - mid = (low + high) // 2 - if array[mid] == item: - array.pop(mid) - return array - elif array[mid] < item: - low = mid + 1 - else: - high = mid - 1 - raise ValueError( - "Either the item is not in the array or the array was unsorted" - ) - - def binary_search_insert(self, array: list | str | range, index: int) -> list[int]: - """ - Inserts the index into the sorted array - at the correct position. - - >>> NumberContainer().binary_search_insert([1,2,3], 2) - [1, 2, 2, 3] - >>> NumberContainer().binary_search_insert([0,1,3], 2) - [0, 1, 2, 3] - >>> NumberContainer().binary_search_insert([-5, -3, 0, 0, 11, 103], 51) - [-5, -3, 0, 0, 11, 51, 103] - >>> NumberContainer().binary_search_insert([-5, -3, 0, 0, 11, 100, 103], 101) - [-5, -3, 0, 0, 11, 100, 101, 103] - >>> NumberContainer().binary_search_insert(range(10), 4) - [0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9] - >>> NumberContainer().binary_search_insert("abd", "c") - ['a', 'b', 'c', 'd'] - >>> NumberContainer().binary_search_insert(131, 23) - Traceback (most recent call last): - ... - TypeError: binary_search_insert() only accepts either a list, range or str - """ - if isinstance(array, (range, str)): - array = list(array) - elif not isinstance(array, list): - raise TypeError( - "binary_search_insert() only accepts either a list, range or str" - ) - - low = 0 - high = len(array) - 1 - - while low <= high: - mid = (low + high) // 2 - if array[mid] == index: - # If the item already exists in the array, - # insert it after the existing item - array.insert(mid + 1, index) - return array - elif array[mid] < index: - low = mid + 1 - else: - high = mid - 1 - - # If the item doesn't exist in the array, insert it at the appropriate position - array.insert(low, index) - return array - - def change(self, index: int, number: int) -> None: - """ - Changes (sets) the index as number - - >>> cont = NumberContainer() - >>> cont.change(0, 10) - >>> cont.change(0, 20) - >>> cont.change(-13, 20) - >>> cont.change(-100030, 20032903290) - """ - # Remove previous index - if index in self.indexmap: - n = self.indexmap[index] - if len(self.numbermap[n]) == 1: - del self.numbermap[n] - else: - self.numbermap[n] = self.binary_search_delete(self.numbermap[n], index) - - # Set new index - self.indexmap[index] = number - - # Number not seen before or empty so insert number value - if number not in self.numbermap: - self.numbermap[number] = [index] - - # Here we need to perform a binary search insertion in order to insert - # The item in the correct place - else: - self.numbermap[number] = self.binary_search_insert( - self.numbermap[number], index - ) - - def find(self, number: int) -> int: - """ - Returns the smallest index where the number is. - - >>> cont = NumberContainer() - >>> cont.find(10) - -1 - >>> cont.change(0, 10) - >>> cont.find(10) - 0 - >>> cont.change(0, 20) - >>> cont.find(10) - -1 - >>> cont.find(20) - 0 - """ - # Simply return the 0th index (smallest) of the indexes found (or -1) - return self.numbermap.get(number, [-1])[0] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/other/password.py b/other/password.py deleted file mode 100644 index dff1316c049c..000000000000 --- a/other/password.py +++ /dev/null @@ -1,97 +0,0 @@ -import secrets -from random import shuffle -from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits, punctuation - - -def password_generator(length: int = 8) -> str: - """ - Password Generator allows you to generate a random password of length N. - - >>> len(password_generator()) - 8 - >>> len(password_generator(length=16)) - 16 - >>> len(password_generator(257)) - 257 - >>> len(password_generator(length=0)) - 0 - >>> len(password_generator(-1)) - 0 - """ - chars = ascii_letters + digits + punctuation - return "".join(secrets.choice(chars) for _ in range(length)) - - -# ALTERNATIVE METHODS -# chars_incl= characters that must be in password -# i= how many letters or characters the password length will be -def alternative_password_generator(chars_incl: str, i: int) -> str: - # Password Generator = full boot with random_number, random_letters, and - # random_character FUNCTIONS - # Put your code here... - i -= len(chars_incl) - quotient = i // 3 - remainder = i % 3 - # chars = chars_incl + random_letters(ascii_letters, i / 3 + remainder) + - # random_number(digits, i / 3) + random_characters(punctuation, i / 3) - chars = ( - chars_incl - + random(ascii_letters, quotient + remainder) - + random(digits, quotient) - + random(punctuation, quotient) - ) - list_of_chars = list(chars) - shuffle(list_of_chars) - return "".join(list_of_chars) - - # random is a generalised function for letters, characters and numbers - - -def random(chars_incl: str, i: int) -> str: - return "".join(secrets.choice(chars_incl) for _ in range(i)) - - -def is_strong_password(password: str, min_length: int = 8) -> bool: - """ - This will check whether a given password is strong or not. The password must be at - least as long as the provided minimum length, and it must contain at least 1 - lowercase letter, 1 uppercase letter, 1 number and 1 special character. - - >>> is_strong_password('Hwea7$2!') - True - >>> is_strong_password('Sh0r1') - False - >>> is_strong_password('Hello123') - False - >>> is_strong_password('Hello1238udfhiaf038fajdvjjf!jaiuFhkqi1') - True - >>> is_strong_password('0') - False - """ - - if len(password) < min_length: - return False - - upper = any(char in ascii_uppercase for char in password) - lower = any(char in ascii_lowercase for char in password) - num = any(char in digits for char in password) - spec_char = any(char in punctuation for char in password) - - return upper and lower and num and spec_char - - -def main(): - length = int(input("Please indicate the max length of your password: ").strip()) - chars_incl = input( - "Please indicate the characters that must be in your password: " - ).strip() - print("Password generated:", password_generator(length)) - print( - "Alternative Password generated:", - alternative_password_generator(chars_incl, length), - ) - print("[If you are thinking of using this password, You better save it.]") - - -if __name__ == "__main__": - main() diff --git a/other/quine.py b/other/quine.py deleted file mode 100644 index 08e885bc1ce7..000000000000 --- a/other/quine.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/python3 -# ruff: noqa -""" -Quine: - -A quine is a computer program which takes no input and produces a copy of its -own source code as its only output (disregarding this docstring and the shebang). - -More info on: https://en.wikipedia.org/wiki/Quine_(computing) -""" - -print((lambda quine: quine % quine)("print((lambda quine: quine %% quine)(%r))")) diff --git a/other/scoring_algorithm.py b/other/scoring_algorithm.py deleted file mode 100644 index af04f432e433..000000000000 --- a/other/scoring_algorithm.py +++ /dev/null @@ -1,117 +0,0 @@ -""" -developed by: markmelnic -original repo: https://github.com/markmelnic/Scoring-Algorithm - -Analyse data using a range based percentual proximity algorithm -and calculate the linear maximum likelihood estimation. -The basic principle is that all values supplied will be broken -down to a range from 0 to 1 and each column's score will be added -up to get the total score. - -========== -Example for data of vehicles -price|mileage|registration_year -20k |60k |2012 -22k |50k |2011 -23k |90k |2015 -16k |210k |2010 - -We want the vehicle with the lowest price, -lowest mileage but newest registration year. -Thus the weights for each column are as follows: -[0, 0, 1] -""" - - -def get_data(source_data: list[list[float]]) -> list[list[float]]: - """ - >>> get_data([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]]) - [[20.0, 23.0, 22.0], [60.0, 90.0, 50.0], [2012.0, 2015.0, 2011.0]] - """ - data_lists: list[list[float]] = [] - for data in source_data: - for i, el in enumerate(data): - if len(data_lists) < i + 1: - data_lists.append([]) - data_lists[i].append(float(el)) - return data_lists - - -def calculate_each_score( - data_lists: list[list[float]], weights: list[int] -) -> list[list[float]]: - """ - >>> calculate_each_score([[20, 23, 22], [60, 90, 50], [2012, 2015, 2011]], - ... [0, 0, 1]) - [[1.0, 0.0, 0.33333333333333337], [0.75, 0.0, 1.0], [0.25, 1.0, 0.0]] - """ - score_lists: list[list[float]] = [] - for dlist, weight in zip(data_lists, weights): - mind = min(dlist) - maxd = max(dlist) - - score: list[float] = [] - # for weight 0 score is 1 - actual score - if weight == 0: - for item in dlist: - try: - score.append(1 - ((item - mind) / (maxd - mind))) - except ZeroDivisionError: - score.append(1) - - elif weight == 1: - for item in dlist: - try: - score.append((item - mind) / (maxd - mind)) - except ZeroDivisionError: - score.append(0) - - # weight not 0 or 1 - else: - msg = f"Invalid weight of {weight:f} provided" - raise ValueError(msg) - - score_lists.append(score) - - return score_lists - - -def generate_final_scores(score_lists: list[list[float]]) -> list[float]: - """ - >>> generate_final_scores([[1.0, 0.0, 0.33333333333333337], - ... [0.75, 0.0, 1.0], - ... [0.25, 1.0, 0.0]]) - [2.0, 1.0, 1.3333333333333335] - """ - # initialize final scores - final_scores: list[float] = [0 for i in range(len(score_lists[0]))] - - for slist in score_lists: - for j, ele in enumerate(slist): - final_scores[j] = final_scores[j] + ele - - return final_scores - - -def procentual_proximity( - source_data: list[list[float]], weights: list[int] -) -> list[list[float]]: - """ - weights - int list - possible values - 0 / 1 - 0 if lower values have higher weight in the data set - 1 if higher values have higher weight in the data set - - >>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1]) - [[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]] - """ - - data_lists = get_data(source_data) - score_lists = calculate_each_score(data_lists, weights) - final_scores = generate_final_scores(score_lists) - - # append scores to source data - for i, ele in enumerate(final_scores): - source_data[i].append(ele) - - return source_data diff --git a/other/sdes.py b/other/sdes.py deleted file mode 100644 index 42186f453a3d..000000000000 --- a/other/sdes.py +++ /dev/null @@ -1,96 +0,0 @@ -def apply_table(inp, table): - """ - >>> apply_table("0123456789", list(range(10))) - '9012345678' - >>> apply_table("0123456789", list(range(9, -1, -1))) - '8765432109' - """ - res = "" - for i in table: - res += inp[i - 1] - return res - - -def left_shift(data): - """ - >>> left_shift("0123456789") - '1234567890' - """ - return data[1:] + data[0] - - -def xor(a, b): - """ - >>> xor("01010101", "00001111") - '01011010' - """ - res = "" - for i in range(len(a)): - if a[i] == b[i]: - res += "0" - else: - res += "1" - return res - - -def apply_sbox(s, data): - row = int("0b" + data[0] + data[-1], 2) - col = int("0b" + data[1:3], 2) - return bin(s[row][col])[2:] - - -def function(expansion, s0, s1, key, message): - left = message[:4] - right = message[4:] - temp = apply_table(right, expansion) - temp = xor(temp, key) - left_bin_str = apply_sbox(s0, temp[:4]) - right_bin_str = apply_sbox(s1, temp[4:]) - left_bin_str = "0" * (2 - len(left_bin_str)) + left_bin_str - right_bin_str = "0" * (2 - len(right_bin_str)) + right_bin_str - temp = apply_table(left_bin_str + right_bin_str, p4_table) - temp = xor(left, temp) - return temp + right - - -if __name__ == "__main__": - key = input("Enter 10 bit key: ") - message = input("Enter 8 bit message: ") - - p8_table = [6, 3, 7, 4, 8, 5, 10, 9] - p10_table = [3, 5, 2, 7, 4, 10, 1, 9, 8, 6] - p4_table = [2, 4, 3, 1] - IP = [2, 6, 3, 1, 4, 8, 5, 7] - IP_inv = [4, 1, 3, 5, 7, 2, 8, 6] - expansion = [4, 1, 2, 3, 2, 3, 4, 1] - s0 = [[1, 0, 3, 2], [3, 2, 1, 0], [0, 2, 1, 3], [3, 1, 3, 2]] - s1 = [[0, 1, 2, 3], [2, 0, 1, 3], [3, 0, 1, 0], [2, 1, 0, 3]] - - # key generation - temp = apply_table(key, p10_table) - left = temp[:5] - right = temp[5:] - left = left_shift(left) - right = left_shift(right) - key1 = apply_table(left + right, p8_table) - left = left_shift(left) - right = left_shift(right) - left = left_shift(left) - right = left_shift(right) - key2 = apply_table(left + right, p8_table) - - # encryption - temp = apply_table(message, IP) - temp = function(expansion, s0, s1, key1, temp) - temp = temp[4:] + temp[:4] - temp = function(expansion, s0, s1, key2, temp) - CT = apply_table(temp, IP_inv) - print("Cipher text is:", CT) - - # decryption - temp = apply_table(CT, IP) - temp = function(expansion, s0, s1, key2, temp) - temp = temp[4:] + temp[:4] - temp = function(expansion, s0, s1, key1, temp) - PT = apply_table(temp, IP_inv) - print("Plain text after decypting is:", PT) diff --git a/other/tower_of_hanoi.py b/other/tower_of_hanoi.py deleted file mode 100644 index 1fff45039891..000000000000 --- a/other/tower_of_hanoi.py +++ /dev/null @@ -1,28 +0,0 @@ -def move_tower(height, from_pole, to_pole, with_pole): - """ - >>> move_tower(3, 'A', 'B', 'C') - moving disk from A to B - moving disk from A to C - moving disk from B to C - moving disk from A to B - moving disk from C to A - moving disk from C to B - moving disk from A to B - """ - if height >= 1: - move_tower(height - 1, from_pole, with_pole, to_pole) - move_disk(from_pole, to_pole) - move_tower(height - 1, with_pole, to_pole, from_pole) - - -def move_disk(fp, tp): - print("moving disk from", fp, "to", tp) - - -def main(): - height = int(input("Height of hanoi: ").strip()) - move_tower(height, "A", "B", "C") - - -if __name__ == "__main__": - main() diff --git a/other/word_search.py b/other/word_search.py deleted file mode 100644 index 9e8acadbd9a4..000000000000 --- a/other/word_search.py +++ /dev/null @@ -1,395 +0,0 @@ -""" -Creates a random wordsearch with eight different directions -that are best described as compass locations. - -@ https://en.wikipedia.org/wiki/Word_search -""" - -from random import choice, randint, shuffle - -# The words to display on the word search - -# can be made dynamic by randonly selecting a certain number of -# words from a predefined word file, while ensuring the character -# count fits within the matrix size (n x m) -WORDS = ["cat", "dog", "snake", "fish"] - -WIDTH = 10 -HEIGHT = 10 - - -class WordSearch: - """ - >>> ws = WordSearch(WORDS, WIDTH, HEIGHT) - >>> ws.board # doctest: +ELLIPSIS - [[None, ..., None], ..., [None, ..., None]] - >>> ws.generate_board() - """ - - def __init__(self, words: list[str], width: int, height: int) -> None: - self.words = words - self.width = width - self.height = height - - # Board matrix holding each letter - self.board: list[list[str | None]] = [[None] * width for _ in range(height)] - - def insert_north(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_north("cat", [2], [2]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, None, 't'], - [None, None, 'a'], - [None, None, 'c']] - >>> ws.insert_north("at", [0, 1, 2], [2, 1]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, 't', 't'], - [None, 'a', 'a'], - [None, None, 'c']] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Check if there is space above the row to fit in the word - if word_length > row + 1: - continue - - # Attempt to insert the word into each column - for col in cols: - # Only check to be made here is if there are existing letters - # above the column that will be overwritten - letters_above = [self.board[row - i][col] for i in range(word_length)] - if all(letter is None for letter in letters_above): - # Successful, insert the word north - for i in range(word_length): - self.board[row - i][col] = word[i] - return - - def insert_northeast(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_northeast("cat", [2], [0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, None, 't'], - [None, 'a', None], - ['c', None, None]] - >>> ws.insert_northeast("at", [0, 1], [2, 1, 0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, 't', 't'], - ['a', 'a', None], - ['c', None, None]] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Check if there is space for the word above the row - if word_length > row + 1: - continue - - # Attempt to insert the word into each column - for col in cols: - # Check if there is space to the right of the word as well as above - if word_length + col > self.width: - continue - - # Check if there are existing letters - # to the right of the column that will be overwritten - letters_diagonal_left = [ - self.board[row - i][col + i] for i in range(word_length) - ] - if all(letter is None for letter in letters_diagonal_left): - # Successful, insert the word northeast - for i in range(word_length): - self.board[row - i][col + i] = word[i] - return - - def insert_east(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_east("cat", [1], [0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, None, None], - ['c', 'a', 't'], - [None, None, None]] - >>> ws.insert_east("at", [1, 0], [2, 1, 0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, 'a', 't'], - ['c', 'a', 't'], - [None, None, None]] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Attempt to insert the word into each column - for col in cols: - # Check if there is space to the right of the word - if word_length + col > self.width: - continue - - # Check if there are existing letters - # to the right of the column that will be overwritten - letters_left = [self.board[row][col + i] for i in range(word_length)] - if all(letter is None for letter in letters_left): - # Successful, insert the word east - for i in range(word_length): - self.board[row][col + i] = word[i] - return - - def insert_southeast(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_southeast("cat", [0], [0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['c', None, None], - [None, 'a', None], - [None, None, 't']] - >>> ws.insert_southeast("at", [1, 0], [2, 1, 0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['c', None, None], - ['a', 'a', None], - [None, 't', 't']] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Check if there is space for the word below the row - if word_length + row > self.height: - continue - - # Attempt to insert the word into each column - for col in cols: - # Check if there is space to the right of the word as well as below - if word_length + col > self.width: - continue - - # Check if there are existing letters - # to the right of the column that will be overwritten - letters_diagonal_left = [ - self.board[row + i][col + i] for i in range(word_length) - ] - if all(letter is None for letter in letters_diagonal_left): - # Successful, insert the word southeast - for i in range(word_length): - self.board[row + i][col + i] = word[i] - return - - def insert_south(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_south("cat", [0], [0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['c', None, None], - ['a', None, None], - ['t', None, None]] - >>> ws.insert_south("at", [2, 1, 0], [0, 1, 2]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['c', None, None], - ['a', 'a', None], - ['t', 't', None]] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Check if there is space below the row to fit in the word - if word_length + row > self.height: - continue - - # Attempt to insert the word into each column - for col in cols: - # Only check to be made here is if there are existing letters - # below the column that will be overwritten - letters_below = [self.board[row + i][col] for i in range(word_length)] - if all(letter is None for letter in letters_below): - # Successful, insert the word south - for i in range(word_length): - self.board[row + i][col] = word[i] - return - - def insert_southwest(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_southwest("cat", [0], [2]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, None, 'c'], - [None, 'a', None], - ['t', None, None]] - >>> ws.insert_southwest("at", [1, 2], [2, 1, 0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, None, 'c'], - [None, 'a', 'a'], - ['t', 't', None]] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Check if there is space for the word below the row - if word_length + row > self.height: - continue - - # Attempt to insert the word into each column - for col in cols: - # Check if there is space to the left of the word as well as below - if word_length > col + 1: - continue - - # Check if there are existing letters - # to the right of the column that will be overwritten - letters_diagonal_left = [ - self.board[row + i][col - i] for i in range(word_length) - ] - if all(letter is None for letter in letters_diagonal_left): - # Successful, insert the word southwest - for i in range(word_length): - self.board[row + i][col - i] = word[i] - return - - def insert_west(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_west("cat", [1], [2]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [[None, None, None], - ['t', 'a', 'c'], - [None, None, None]] - >>> ws.insert_west("at", [1, 0], [1, 2, 0]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['t', 'a', None], - ['t', 'a', 'c'], - [None, None, None]] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Attempt to insert the word into each column - for col in cols: - # Check if there is space to the left of the word - if word_length > col + 1: - continue - - # Check if there are existing letters - # to the left of the column that will be overwritten - letters_left = [self.board[row][col - i] for i in range(word_length)] - if all(letter is None for letter in letters_left): - # Successful, insert the word west - for i in range(word_length): - self.board[row][col - i] = word[i] - return - - def insert_northwest(self, word: str, rows: list[int], cols: list[int]) -> None: - """ - >>> ws = WordSearch(WORDS, 3, 3) - >>> ws.insert_northwest("cat", [2], [2]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['t', None, None], - [None, 'a', None], - [None, None, 'c']] - >>> ws.insert_northwest("at", [1, 2], [0, 1]) - >>> ws.board # doctest: +NORMALIZE_WHITESPACE - [['t', None, None], - ['t', 'a', None], - [None, 'a', 'c']] - """ - word_length = len(word) - # Attempt to insert the word into each row and when successful, exit - for row in rows: - # Check if there is space for the word above the row - if word_length > row + 1: - continue - - # Attempt to insert the word into each column - for col in cols: - # Check if there is space to the left of the word as well as above - if word_length > col + 1: - continue - - # Check if there are existing letters - # to the right of the column that will be overwritten - letters_diagonal_left = [ - self.board[row - i][col - i] for i in range(word_length) - ] - if all(letter is None for letter in letters_diagonal_left): - # Successful, insert the word northwest - for i in range(word_length): - self.board[row - i][col - i] = word[i] - return - - def generate_board(self) -> None: - """ - Generates a board with a random direction for each word. - - >>> wt = WordSearch(WORDS, WIDTH, HEIGHT) - >>> wt.generate_board() - >>> len(list(filter(lambda word: word is not None, sum(wt.board, start=[]))) - ... ) == sum(map(lambda word: len(word), WORDS)) - True - """ - directions = ( - self.insert_north, - self.insert_northeast, - self.insert_east, - self.insert_southeast, - self.insert_south, - self.insert_southwest, - self.insert_west, - self.insert_northwest, - ) - for word in self.words: - # Shuffle the row order and column order that is used when brute forcing - # the insertion of the word - rows, cols = list(range(self.height)), list(range(self.width)) - shuffle(rows) - shuffle(cols) - - # Insert the word via the direction - choice(directions)(word, rows, cols) - - -def visualise_word_search( - board: list[list[str | None]] | None = None, *, add_fake_chars: bool = True -) -> None: - """ - Graphically displays the word search in the terminal. - - >>> ws = WordSearch(WORDS, 5, 5) - >>> ws.insert_north("cat", [4], [4]) - >>> visualise_word_search( - ... ws.board, add_fake_chars=False) # doctest: +NORMALIZE_WHITESPACE - # # # # # - # # # # # - # # # # t - # # # # a - # # # # c - >>> ws.insert_northeast("snake", [4], [4, 3, 2, 1, 0]) - >>> visualise_word_search( - ... ws.board, add_fake_chars=False) # doctest: +NORMALIZE_WHITESPACE - # # # # e - # # # k # - # # a # t - # n # # a - s # # # c - """ - if board is None: - word_search = WordSearch(WORDS, WIDTH, HEIGHT) - word_search.generate_board() - board = word_search.board - - result = "" - for row in range(len(board)): - for col in range(len(board[0])): - character = "#" - if (letter := board[row][col]) is not None: - character = letter - # Empty char, so add a fake char - elif add_fake_chars: - character = chr(randint(97, 122)) - result += f"{character} " - result += "\n" - print(result, end="") - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - visualise_word_search() diff --git a/physics/__init__.py b/physics/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/physics/altitude_pressure.py b/physics/altitude_pressure.py deleted file mode 100644 index 65307d223fa7..000000000000 --- a/physics/altitude_pressure.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Title : Calculate altitude using Pressure - -Description : - The below algorithm approximates the altitude using Barometric formula - - -""" - - -def get_altitude_at_pressure(pressure: float) -> float: - """ - This method calculates the altitude from Pressure wrt to - Sea level pressure as reference .Pressure is in Pascals - https://en.wikipedia.org/wiki/Pressure_altitude - https://community.bosch-sensortec.com/t5/Question-and-answers/How-to-calculate-the-altitude-from-the-pressure-sensor-data/qaq-p/5702 - - H = 44330 * [1 - (P/p0)^(1/5.255) ] - - Where : - H = altitude (m) - P = measured pressure - p0 = reference pressure at sea level 101325 Pa - - Examples: - >>> get_altitude_at_pressure(pressure=100_000) - 105.47836610778828 - >>> get_altitude_at_pressure(pressure=101_325) - 0.0 - >>> get_altitude_at_pressure(pressure=80_000) - 1855.873388064995 - >>> get_altitude_at_pressure(pressure=201_325) - Traceback (most recent call last): - ... - ValueError: Value Higher than Pressure at Sea Level ! - >>> get_altitude_at_pressure(pressure=-80_000) - Traceback (most recent call last): - ... - ValueError: Atmospheric Pressure can not be negative ! - """ - - if pressure > 101325: - raise ValueError("Value Higher than Pressure at Sea Level !") - if pressure < 0: - raise ValueError("Atmospheric Pressure can not be negative !") - return 44_330 * (1 - (pressure / 101_325) ** (1 / 5.5255)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/archimedes_principle_of_buoyant_force.py b/physics/archimedes_principle_of_buoyant_force.py deleted file mode 100644 index 38f1a0a83832..000000000000 --- a/physics/archimedes_principle_of_buoyant_force.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Calculate the buoyant force of any body completely or partially submerged in a static -fluid. This principle was discovered by the Greek mathematician Archimedes. - -Equation for calculating buoyant force: -Fb = p * V * g - -https://en.wikipedia.org/wiki/Archimedes%27_principle -""" - -# Acceleration Constant on Earth (unit m/s^2) -g = 9.80665 # Also available in scipy.constants.g - - -def archimedes_principle( - fluid_density: float, volume: float, gravity: float = g -) -> float: - """ - Args: - fluid_density: density of fluid (kg/m^3) - volume: volume of object/liquid being displaced by the object (m^3) - gravity: Acceleration from gravity. Gravitational force on the system, - The default is Earth Gravity - returns: - the buoyant force on an object in Newtons - - >>> archimedes_principle(fluid_density=500, volume=4, gravity=9.8) - 19600.0 - >>> archimedes_principle(fluid_density=997, volume=0.5, gravity=9.8) - 4885.3 - >>> archimedes_principle(fluid_density=997, volume=0.7) - 6844.061035 - >>> archimedes_principle(fluid_density=997, volume=-0.7) - Traceback (most recent call last): - ... - ValueError: Impossible object volume - >>> archimedes_principle(fluid_density=0, volume=0.7) - Traceback (most recent call last): - ... - ValueError: Impossible fluid density - >>> archimedes_principle(fluid_density=997, volume=0.7, gravity=0) - 0.0 - >>> archimedes_principle(fluid_density=997, volume=0.7, gravity=-9.8) - Traceback (most recent call last): - ... - ValueError: Impossible gravity - """ - - if fluid_density <= 0: - raise ValueError("Impossible fluid density") - if volume <= 0: - raise ValueError("Impossible object volume") - if gravity < 0: - raise ValueError("Impossible gravity") - - return fluid_density * gravity * volume - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/basic_orbital_capture.py b/physics/basic_orbital_capture.py deleted file mode 100644 index a5434b5cb7cb..000000000000 --- a/physics/basic_orbital_capture.py +++ /dev/null @@ -1,178 +0,0 @@ -from math import pow, sqrt - -from scipy.constants import G, c, pi - -""" -These two functions will return the radii of impact for a target object -of mass M and radius R as well as it's effective cross sectional area sigma. -That is to say any projectile with velocity v passing within sigma, will impact the -target object with mass M. The derivation of which is given at the bottom -of this file. - -The derivation shows that a projectile does not need to aim directly at the target -body in order to hit it, as R_capture>R_target. Astronomers refer to the effective -cross section for capture as sigma=π*R_capture**2. - -This algorithm does not account for an N-body problem. - -""" - - -def capture_radii( - target_body_radius: float, target_body_mass: float, projectile_velocity: float -) -> float: - """ - Input Params: - ------------- - target_body_radius: Radius of the central body SI units: meters | m - target_body_mass: Mass of the central body SI units: kilograms | kg - projectile_velocity: Velocity of object moving toward central body - SI units: meters/second | m/s - Returns: - -------- - >>> capture_radii(6.957e8, 1.99e30, 25000.0) - 17209590691.0 - >>> capture_radii(-6.957e8, 1.99e30, 25000.0) - Traceback (most recent call last): - ... - ValueError: Radius cannot be less than 0 - >>> capture_radii(6.957e8, -1.99e30, 25000.0) - Traceback (most recent call last): - ... - ValueError: Mass cannot be less than 0 - >>> capture_radii(6.957e8, 1.99e30, c+1) - Traceback (most recent call last): - ... - ValueError: Cannot go beyond speed of light - - Returned SI units: - ------------------ - meters | m - """ - - if target_body_mass < 0: - raise ValueError("Mass cannot be less than 0") - if target_body_radius < 0: - raise ValueError("Radius cannot be less than 0") - if projectile_velocity > c: - raise ValueError("Cannot go beyond speed of light") - - escape_velocity_squared = (2 * G * target_body_mass) / target_body_radius - capture_radius = target_body_radius * sqrt( - 1 + escape_velocity_squared / pow(projectile_velocity, 2) - ) - return round(capture_radius, 0) - - -def capture_area(capture_radius: float) -> float: - """ - Input Param: - ------------ - capture_radius: The radius of orbital capture and impact for a central body of - mass M and a projectile moving towards it with velocity v - SI units: meters | m - Returns: - -------- - >>> capture_area(17209590691) - 9.304455331329126e+20 - >>> capture_area(-1) - Traceback (most recent call last): - ... - ValueError: Cannot have a capture radius less than 0 - - Returned SI units: - ------------------ - meters*meters | m**2 - """ - - if capture_radius < 0: - raise ValueError("Cannot have a capture radius less than 0") - sigma = pi * pow(capture_radius, 2) - return round(sigma, 0) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - -""" -Derivation: - -Let: Mt=target mass, Rt=target radius, v=projectile_velocity, - r_0=radius of projectile at instant 0 to CM of target - v_p=v at closest approach, - r_p=radius from projectile to target CM at closest approach, - R_capture= radius of impact for projectile with velocity v - -(1)At time=0 the projectile's energy falling from infinity| E=K+U=0.5*m*(v**2)+0 - - E_initial=0.5*m*(v**2) - -(2)at time=0 the angular momentum of the projectile relative to CM target| - L_initial=m*r_0*v*sin(Θ)->m*r_0*v*(R_capture/r_0)->m*v*R_capture - - L_i=m*v*R_capture - -(3)The energy of the projectile at closest approach will be its kinetic energy - at closest approach plus gravitational potential energy(-(GMm)/R)| - E_p=K_p+U_p->E_p=0.5*m*(v_p**2)-(G*Mt*m)/r_p - - E_p=0.0.5*m*(v_p**2)-(G*Mt*m)/r_p - -(4)The angular momentum of the projectile relative to the target at closest - approach will be L_p=m*r_p*v_p*sin(Θ), however relative to the target Θ=90° - sin(90°)=1| - - L_p=m*r_p*v_p -(5)Using conservation of angular momentum and energy, we can write a quadratic - equation that solves for r_p| - - (a) - Ei=Ep-> 0.5*m*(v**2)=0.5*m*(v_p**2)-(G*Mt*m)/r_p-> v**2=v_p**2-(2*G*Mt)/r_p - - (b) - Li=Lp-> m*v*R_capture=m*r_p*v_p-> v*R_capture=r_p*v_p-> v_p=(v*R_capture)/r_p - - (c) b plugs int a| - v**2=((v*R_capture)/r_p)**2-(2*G*Mt)/r_p-> - - v**2-(v**2)*(R_c**2)/(r_p**2)+(2*G*Mt)/r_p=0-> - - (v**2)*(r_p**2)+2*G*Mt*r_p-(v**2)*(R_c**2)=0 - - (d) Using the quadratic formula, we'll solve for r_p then rearrange to solve to - R_capture - - r_p=(-2*G*Mt ± sqrt(4*G^2*Mt^2+ 4(v^4*R_c^2)))/(2*v^2)-> - - r_p=(-G*Mt ± sqrt(G^2*Mt+v^4*R_c^2))/v^2-> - - r_p<0 is something we can ignore, as it has no physical meaning for our purposes.-> - - r_p=(-G*Mt)/v^2 + sqrt(G^2*Mt^2/v^4 + R_c^2) - - (e)We are trying to solve for R_c. We are looking for impact, so we want r_p=Rt - - Rt + G*Mt/v^2 = sqrt(G^2*Mt^2/v^4 + R_c^2)-> - - (Rt + G*Mt/v^2)^2 = G^2*Mt^2/v^4 + R_c^2-> - - Rt^2 + 2*G*Mt*Rt/v^2 + G^2*Mt^2/v^4 = G^2*Mt^2/v^4 + R_c^2-> - - Rt**2 + 2*G*Mt*Rt/v**2 = R_c**2-> - - Rt**2 * (1 + 2*G*Mt/Rt *1/v**2) = R_c**2-> - - escape velocity = sqrt(2GM/R)= v_escape**2=2GM/R-> - - Rt**2 * (1 + v_esc**2/v**2) = R_c**2-> - -(6) - R_capture = Rt * sqrt(1 + v_esc**2/v**2) - -Source: Problem Set 3 #8 c.Fall_2017|Honors Astronomy|Professor Rachel Bezanson - -Source #2: http://www.nssc.ac.cn/wxzygx/weixin/201607/P020160718380095698873.pdf - 8.8 Planetary Rendezvous: Pg.368 -""" diff --git a/physics/casimir_effect.py b/physics/casimir_effect.py deleted file mode 100644 index e4a77e5b593f..000000000000 --- a/physics/casimir_effect.py +++ /dev/null @@ -1,120 +0,0 @@ -""" -Title : Finding the value of magnitude of either the Casimir force, the surface area -of one of the plates or distance between the plates provided that the other -two parameters are given. - -Description : In quantum field theory, the Casimir effect is a physical force -acting on the macroscopic boundaries of a confined space which arises from the -quantum fluctuations of the field. It is a physical force exerted between separate -objects, which is due to neither charge, gravity, nor the exchange of particles, -but instead is due to resonance of all-pervasive energy fields in the intervening -space between the objects. Since the strength of the force falls off rapidly with -distance it is only measurable when the distance between the objects is extremely -small. On a submicron scale, this force becomes so strong that it becomes the -dominant force between uncharged conductors. - -Dutch physicist Hendrik B. G. Casimir first proposed the existence of the force, -and he formulated an experiment to detect it in 1948 while participating in research -at Philips Research Labs. The classic form of his experiment used a pair of uncharged -parallel metal plates in a vacuum, and successfully demonstrated the force to within -15% of the value he had predicted according to his theory. - -The Casimir force F for idealized, perfectly conducting plates of surface area -A square meter and placed at a distance of a meter apart with vacuum between -them is expressed as - - -F = - ((Reduced Planck Constant ℏ) * c * Pi^2 * A) / (240 * a^4) - -Here, the negative sign indicates the force is attractive in nature. For the ease -of calculation, only the magnitude of the force is considered. - -Source : -- https://en.wikipedia.org/wiki/Casimir_effect -- https://www.cs.mcgill.ca/~rwest/wikispeedia/wpcd/wp/c/Casimir_effect.htm -- Casimir, H. B. ; Polder, D. (1948) "The Influence of Retardation on the - London-van der Waals Forces", Physical Review, vol. 73, Issue 4, pp. 360-372 -""" - -from __future__ import annotations - -from math import pi - -# Define the Reduced Planck Constant ℏ (H bar), speed of light C, value of -# Pi and the function -REDUCED_PLANCK_CONSTANT = 1.054571817e-34 # unit of ℏ : J * s - -SPEED_OF_LIGHT = 3e8 # unit of c : m * s^-1 - - -def casimir_force(force: float, area: float, distance: float) -> dict[str, float]: - """ - Input Parameters - ---------------- - force -> Casimir Force : magnitude in Newtons - - area -> Surface area of each plate : magnitude in square meters - - distance -> Distance between two plates : distance in Meters - - Returns - ------- - result : dict name, value pair of the parameter having Zero as it's value - - Returns the value of one of the parameters specified as 0, provided the values of - other parameters are given. - >>> casimir_force(force = 0, area = 4, distance = 0.03) - {'force': 6.4248189174864216e-21} - - >>> casimir_force(force = 2635e-13, area = 0.0023, distance = 0) - {'distance': 1.0323056015031114e-05} - - >>> casimir_force(force = 2737e-21, area = 0, distance = 0.0023746) - {'area': 0.06688838837354052} - - >>> casimir_force(force = 3457e-12, area = 0, distance = 0) - Traceback (most recent call last): - ... - ValueError: One and only one argument must be 0 - - >>> casimir_force(force = 3457e-12, area = 0, distance = -0.00344) - Traceback (most recent call last): - ... - ValueError: Distance can not be negative - - >>> casimir_force(force = -912e-12, area = 0, distance = 0.09374) - Traceback (most recent call last): - ... - ValueError: Magnitude of force can not be negative - """ - - if (force, area, distance).count(0) != 1: - raise ValueError("One and only one argument must be 0") - if force < 0: - raise ValueError("Magnitude of force can not be negative") - if distance < 0: - raise ValueError("Distance can not be negative") - if area < 0: - raise ValueError("Area can not be negative") - if force == 0: - force = (REDUCED_PLANCK_CONSTANT * SPEED_OF_LIGHT * pi**2 * area) / ( - 240 * (distance) ** 4 - ) - return {"force": force} - elif area == 0: - area = (240 * force * (distance) ** 4) / ( - REDUCED_PLANCK_CONSTANT * SPEED_OF_LIGHT * pi**2 - ) - return {"area": area} - elif distance == 0: - distance = ( - (REDUCED_PLANCK_CONSTANT * SPEED_OF_LIGHT * pi**2 * area) / (240 * force) - ) ** (1 / 4) - return {"distance": distance} - raise ValueError("One and only one argument must be 0") - - -# Run doctest -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/center_of_mass.py b/physics/center_of_mass.py deleted file mode 100644 index 7a20e71be801..000000000000 --- a/physics/center_of_mass.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -Calculating the center of mass for a discrete system of particles, given their -positions and masses. - -Description: - -In physics, the center of mass of a distribution of mass in space (sometimes referred -to as the barycenter or balance point) is the unique point at any given time where the -weighted relative position of the distributed mass sums to zero. This is the point to -which a force may be applied to cause a linear acceleration without an angular -acceleration. - -Calculations in mechanics are often simplified when formulated with respect to the -center of mass. It is a hypothetical point where the entire mass of an object may be -assumed to be concentrated to visualize its motion. In other words, the center of mass -is the particle equivalent of a given object for the application of Newton's laws of -motion. - -In the case of a system of particles P_i, i = 1, ..., n , each with mass m_i that are -located in space with coordinates r_i, i = 1, ..., n , the coordinates R of the center -of mass corresponds to: - -R = (Σ(mi * ri) / Σ(mi)) - -Reference: https://en.wikipedia.org/wiki/Center_of_mass -""" - -from collections import namedtuple - -Particle = namedtuple("Particle", "x y z mass") # noqa: PYI024 -Coord3D = namedtuple("Coord3D", "x y z") # noqa: PYI024 - - -def center_of_mass(particles: list[Particle]) -> Coord3D: - """ - Input Parameters - ---------------- - particles: list(Particle): - A list of particles where each particle is a tuple with it's (x, y, z) position and - it's mass. - - Returns - ------- - Coord3D: - A tuple with the coordinates of the center of mass (Xcm, Ycm, Zcm) rounded to two - decimal places. - - Examples - -------- - >>> center_of_mass([ - ... Particle(1.5, 4, 3.4, 4), - ... Particle(5, 6.8, 7, 8.1), - ... Particle(9.4, 10.1, 11.6, 12) - ... ]) - Coord3D(x=6.61, y=7.98, z=8.69) - - >>> center_of_mass([ - ... Particle(1, 2, 3, 4), - ... Particle(5, 6, 7, 8), - ... Particle(9, 10, 11, 12) - ... ]) - Coord3D(x=6.33, y=7.33, z=8.33) - - >>> center_of_mass([ - ... Particle(1, 2, 3, -4), - ... Particle(5, 6, 7, 8), - ... Particle(9, 10, 11, 12) - ... ]) - Traceback (most recent call last): - ... - ValueError: Mass of all particles must be greater than 0 - - >>> center_of_mass([ - ... Particle(1, 2, 3, 0), - ... Particle(5, 6, 7, 8), - ... Particle(9, 10, 11, 12) - ... ]) - Traceback (most recent call last): - ... - ValueError: Mass of all particles must be greater than 0 - - >>> center_of_mass([]) - Traceback (most recent call last): - ... - ValueError: No particles provided - """ - if not particles: - raise ValueError("No particles provided") - - if any(particle.mass <= 0 for particle in particles): - raise ValueError("Mass of all particles must be greater than 0") - - total_mass = sum(particle.mass for particle in particles) - - center_of_mass_x = round( - sum(particle.x * particle.mass for particle in particles) / total_mass, 2 - ) - center_of_mass_y = round( - sum(particle.y * particle.mass for particle in particles) / total_mass, 2 - ) - center_of_mass_z = round( - sum(particle.z * particle.mass for particle in particles) / total_mass, 2 - ) - return Coord3D(center_of_mass_x, center_of_mass_y, center_of_mass_z) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/centripetal_force.py b/physics/centripetal_force.py deleted file mode 100644 index a4c624582475..000000000000 --- a/physics/centripetal_force.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -Description : Centripetal force is the force acting on an object in -curvilinear motion directed towards the axis of rotation -or centre of curvature. - -The unit of centripetal force is newton. - -The centripetal force is always directed perpendicular to the -direction of the object's displacement. Using Newton's second -law of motion, it is found that the centripetal force of an object -moving in a circular path always acts towards the centre of the circle. -The Centripetal Force Formula is given as the product of mass (in kg) -and tangential velocity (in meters per second) squared, divided by the -radius (in meters) that implies that on doubling the tangential velocity, -the centripetal force will be quadrupled. Mathematically it is written as: -F = mv²/r -Where, F is the Centripetal force, m is the mass of the object, v is the -speed or velocity of the object and r is the radius. - -Reference: https://byjus.com/physics/centripetal-and-centrifugal-force/ -""" - - -def centripetal(mass: float, velocity: float, radius: float) -> float: - """ - The Centripetal Force formula is given as: (m*v*v)/r - - >>> round(centripetal(15.5,-30,10),2) - 1395.0 - >>> round(centripetal(10,15,5),2) - 450.0 - >>> round(centripetal(20,-50,15),2) - 3333.33 - >>> round(centripetal(12.25,40,25),2) - 784.0 - >>> round(centripetal(50,100,50),2) - 10000.0 - """ - if mass < 0: - raise ValueError("The mass of the body cannot be negative") - if radius <= 0: - raise ValueError("The radius is always a positive non zero integer") - return (mass * (velocity) ** 2) / radius - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) diff --git a/physics/coulombs_law.py b/physics/coulombs_law.py deleted file mode 100644 index fe2d358f653e..000000000000 --- a/physics/coulombs_law.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Coulomb's law states that the magnitude of the electrostatic force of attraction -or repulsion between two point charges is directly proportional to the product -of the magnitudes of charges and inversely proportional to the square of the -distance between them. - -F = k * q1 * q2 / r^2 - -k is Coulomb's constant and equals 1/(4π*ε0) -q1 is charge of first body (C) -q2 is charge of second body (C) -r is distance between two charged bodies (m) - -Reference: https://en.wikipedia.org/wiki/Coulomb%27s_law -""" - - -def coulombs_law(q1: float, q2: float, radius: float) -> float: - """ - Calculate the electrostatic force of attraction or repulsion - between two point charges - - >>> coulombs_law(15.5, 20, 15) - 12382849136.06 - >>> coulombs_law(1, 15, 5) - 5392531075.38 - >>> coulombs_law(20, -50, 15) - -39944674632.44 - >>> coulombs_law(-5, -8, 10) - 3595020716.92 - >>> coulombs_law(50, 100, 50) - 17975103584.6 - """ - if radius <= 0: - raise ValueError("The radius is always a positive number") - return round(((8.9875517923 * 10**9) * q1 * q2) / (radius**2), 2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/doppler_frequency.py b/physics/doppler_frequency.py deleted file mode 100644 index 2a761c72d9b8..000000000000 --- a/physics/doppler_frequency.py +++ /dev/null @@ -1,104 +0,0 @@ -""" -Doppler's effect - -The Doppler effect (also Doppler shift) is the change in the frequency of a wave in -relation to an observer who is moving relative to the source of the wave. The Doppler -effect is named after the physicist Christian Doppler. A common example of Doppler -shift is the change of pitch heard when a vehicle sounding a horn approaches and -recedes from an observer. - -The reason for the Doppler effect is that when the source of the waves is moving -towards the observer, each successive wave crest is emitted from a position closer to -the observer than the crest of the previous wave. Therefore, each wave takes slightly -less time to reach the observer than the previous wave. Hence, the time between the -arrivals of successive wave crests at the observer is reduced, causing an increase in -the frequency. Similarly, if the source of waves is moving away from the observer, -each wave is emitted from a position farther from the observer than the previous wave, -so the arrival time between successive waves is increased, reducing the frequency. - -If the source of waves is stationary but the observer is moving with respect to the -source, the transmission velocity of the waves changes (ie the rate at which the -observer receives waves) even if the wavelength and frequency emitted from the source -remain constant. - -These results are all summarized by the Doppler formula: - - f = (f0 * (v + v0)) / (v - vs) - -where: - f: frequency of the wave - f0: frequency of the wave when the source is stationary - v: velocity of the wave in the medium - v0: velocity of the observer, positive if the observer is moving towards the source - vs: velocity of the source, positive if the source is moving towards the observer - -Doppler's effect has many applications in physics and engineering, such as radar, -astronomy, medical imaging, and seismology. - -References: -https://en.wikipedia.org/wiki/Doppler_effect - -Now, we will implement a function that calculates the frequency of a wave as a function -of the frequency of the wave when the source is stationary, the velocity of the wave -in the medium, the velocity of the observer and the velocity of the source. -""" - - -def doppler_effect( - org_freq: float, wave_vel: float, obs_vel: float, src_vel: float -) -> float: - """ - Input Parameters: - ----------------- - org_freq: frequency of the wave when the source is stationary - wave_vel: velocity of the wave in the medium - obs_vel: velocity of the observer, +ve if the observer is moving towards the source - src_vel: velocity of the source, +ve if the source is moving towards the observer - - Returns: - -------- - f: frequency of the wave as perceived by the observer - - Docstring Tests: - >>> doppler_effect(100, 330, 10, 0) # observer moving towards the source - 103.03030303030303 - >>> doppler_effect(100, 330, -10, 0) # observer moving away from the source - 96.96969696969697 - >>> doppler_effect(100, 330, 0, 10) # source moving towards the observer - 103.125 - >>> doppler_effect(100, 330, 0, -10) # source moving away from the observer - 97.05882352941177 - >>> doppler_effect(100, 330, 10, 10) # source & observer moving towards each other - 106.25 - >>> doppler_effect(100, 330, -10, -10) # source and observer moving away - 94.11764705882354 - >>> doppler_effect(100, 330, 10, 330) # source moving at same speed as the wave - Traceback (most recent call last): - ... - ZeroDivisionError: Division by zero implies vs=v and observer in front of the source - >>> doppler_effect(100, 330, 10, 340) # source moving faster than the wave - Traceback (most recent call last): - ... - ValueError: Non-positive frequency implies vs>v or v0>v (in the opposite direction) - >>> doppler_effect(100, 330, -340, 10) # observer moving faster than the wave - Traceback (most recent call last): - ... - ValueError: Non-positive frequency implies vs>v or v0>v (in the opposite direction) - """ - - if wave_vel == src_vel: - raise ZeroDivisionError( - "Division by zero implies vs=v and observer in front of the source" - ) - doppler_freq = (org_freq * (wave_vel + obs_vel)) / (wave_vel - src_vel) - if doppler_freq <= 0: - raise ValueError( - "Non-positive frequency implies vs>v or v0>v (in the opposite direction)" - ) - return doppler_freq - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/grahams_law.py b/physics/grahams_law.py deleted file mode 100644 index 6e5d75127e83..000000000000 --- a/physics/grahams_law.py +++ /dev/null @@ -1,208 +0,0 @@ -""" -Title: Graham's Law of Effusion - -Description: Graham's law of effusion states that the rate of effusion of a gas is -inversely proportional to the square root of the molar mass of its particles: - -r1/r2 = sqrt(m2/m1) - -r1 = Rate of effusion for the first gas. -r2 = Rate of effusion for the second gas. -m1 = Molar mass of the first gas. -m2 = Molar mass of the second gas. - -(Description adapted from https://en.wikipedia.org/wiki/Graham%27s_law) -""" - -from math import pow, sqrt - - -def validate(*values: float) -> bool: - """ - Input Parameters: - ----------------- - effusion_rate_1: Effustion rate of first gas (m^2/s, mm^2/s, etc.) - effusion_rate_2: Effustion rate of second gas (m^2/s, mm^2/s, etc.) - molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.) - molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.) - - Returns: - -------- - >>> validate(2.016, 4.002) - True - >>> validate(-2.016, 4.002) - False - >>> validate() - False - """ - result = len(values) > 0 and all(value > 0.0 for value in values) - return result - - -def effusion_ratio(molar_mass_1: float, molar_mass_2: float) -> float | ValueError: - """ - Input Parameters: - ----------------- - molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.) - molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.) - - Returns: - -------- - >>> effusion_ratio(2.016, 4.002) - 1.408943 - >>> effusion_ratio(-2.016, 4.002) - ValueError('Input Error: Molar mass values must greater than 0.') - >>> effusion_ratio(2.016) - Traceback (most recent call last): - ... - TypeError: effusion_ratio() missing 1 required positional argument: 'molar_mass_2' - """ - return ( - round(sqrt(molar_mass_2 / molar_mass_1), 6) - if validate(molar_mass_1, molar_mass_2) - else ValueError("Input Error: Molar mass values must greater than 0.") - ) - - -def first_effusion_rate( - effusion_rate: float, molar_mass_1: float, molar_mass_2: float -) -> float | ValueError: - """ - Input Parameters: - ----------------- - effusion_rate: Effustion rate of second gas (m^2/s, mm^2/s, etc.) - molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.) - molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.) - - Returns: - -------- - >>> first_effusion_rate(1, 2.016, 4.002) - 1.408943 - >>> first_effusion_rate(-1, 2.016, 4.002) - ValueError('Input Error: Molar mass and effusion rate values must greater than 0.') - >>> first_effusion_rate(1) - Traceback (most recent call last): - ... - TypeError: first_effusion_rate() missing 2 required positional arguments: \ -'molar_mass_1' and 'molar_mass_2' - >>> first_effusion_rate(1, 2.016) - Traceback (most recent call last): - ... - TypeError: first_effusion_rate() missing 1 required positional argument: \ -'molar_mass_2' - """ - return ( - round(effusion_rate * sqrt(molar_mass_2 / molar_mass_1), 6) - if validate(effusion_rate, molar_mass_1, molar_mass_2) - else ValueError( - "Input Error: Molar mass and effusion rate values must greater than 0." - ) - ) - - -def second_effusion_rate( - effusion_rate: float, molar_mass_1: float, molar_mass_2: float -) -> float | ValueError: - """ - Input Parameters: - ----------------- - effusion_rate: Effustion rate of second gas (m^2/s, mm^2/s, etc.) - molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.) - molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.) - - Returns: - -------- - >>> second_effusion_rate(1, 2.016, 4.002) - 0.709752 - >>> second_effusion_rate(-1, 2.016, 4.002) - ValueError('Input Error: Molar mass and effusion rate values must greater than 0.') - >>> second_effusion_rate(1) - Traceback (most recent call last): - ... - TypeError: second_effusion_rate() missing 2 required positional arguments: \ -'molar_mass_1' and 'molar_mass_2' - >>> second_effusion_rate(1, 2.016) - Traceback (most recent call last): - ... - TypeError: second_effusion_rate() missing 1 required positional argument: \ -'molar_mass_2' - """ - return ( - round(effusion_rate / sqrt(molar_mass_2 / molar_mass_1), 6) - if validate(effusion_rate, molar_mass_1, molar_mass_2) - else ValueError( - "Input Error: Molar mass and effusion rate values must greater than 0." - ) - ) - - -def first_molar_mass( - molar_mass: float, effusion_rate_1: float, effusion_rate_2: float -) -> float | ValueError: - """ - Input Parameters: - ----------------- - molar_mass: Molar mass of the first gas (g/mol, kg/kmol, etc.) - effusion_rate_1: Effustion rate of first gas (m^2/s, mm^2/s, etc.) - effusion_rate_2: Effustion rate of second gas (m^2/s, mm^2/s, etc.) - - Returns: - -------- - >>> first_molar_mass(2, 1.408943, 0.709752) - 0.507524 - >>> first_molar_mass(-1, 2.016, 4.002) - ValueError('Input Error: Molar mass and effusion rate values must greater than 0.') - >>> first_molar_mass(1) - Traceback (most recent call last): - ... - TypeError: first_molar_mass() missing 2 required positional arguments: \ -'effusion_rate_1' and 'effusion_rate_2' - >>> first_molar_mass(1, 2.016) - Traceback (most recent call last): - ... - TypeError: first_molar_mass() missing 1 required positional argument: \ -'effusion_rate_2' - """ - return ( - round(molar_mass / pow(effusion_rate_1 / effusion_rate_2, 2), 6) - if validate(molar_mass, effusion_rate_1, effusion_rate_2) - else ValueError( - "Input Error: Molar mass and effusion rate values must greater than 0." - ) - ) - - -def second_molar_mass( - molar_mass: float, effusion_rate_1: float, effusion_rate_2: float -) -> float | ValueError: - """ - Input Parameters: - ----------------- - molar_mass: Molar mass of the first gas (g/mol, kg/kmol, etc.) - effusion_rate_1: Effustion rate of first gas (m^2/s, mm^2/s, etc.) - effusion_rate_2: Effustion rate of second gas (m^2/s, mm^2/s, etc.) - - Returns: - -------- - >>> second_molar_mass(2, 1.408943, 0.709752) - 1.970351 - >>> second_molar_mass(-2, 1.408943, 0.709752) - ValueError('Input Error: Molar mass and effusion rate values must greater than 0.') - >>> second_molar_mass(1) - Traceback (most recent call last): - ... - TypeError: second_molar_mass() missing 2 required positional arguments: \ -'effusion_rate_1' and 'effusion_rate_2' - >>> second_molar_mass(1, 2.016) - Traceback (most recent call last): - ... - TypeError: second_molar_mass() missing 1 required positional argument: \ -'effusion_rate_2' - """ - return ( - round(pow(effusion_rate_1 / effusion_rate_2, 2) / molar_mass, 6) - if validate(molar_mass, effusion_rate_1, effusion_rate_2) - else ValueError( - "Input Error: Molar mass and effusion rate values must greater than 0." - ) - ) diff --git a/physics/horizontal_projectile_motion.py b/physics/horizontal_projectile_motion.py deleted file mode 100644 index 80f85a1b7146..000000000000 --- a/physics/horizontal_projectile_motion.py +++ /dev/null @@ -1,152 +0,0 @@ -""" -Horizontal Projectile Motion problem in physics. -This algorithm solves a specific problem in which -the motion starts from the ground as can be seen below: - (v = 0) - * * - * * - * * - * * - * * - * * -GROUND GROUND -For more info: https://en.wikipedia.org/wiki/Projectile_motion -""" - -# Importing packages -from math import radians as angle_to_radians -from math import sin - -# Acceleration Constant on Earth (unit m/s^2) -g = 9.80665 - - -def check_args(init_velocity: float, angle: float) -> None: - """ - Check that the arguments are valid - """ - - # Ensure valid instance - if not isinstance(init_velocity, (int, float)): - raise TypeError("Invalid velocity. Should be a positive number.") - - if not isinstance(angle, (int, float)): - raise TypeError("Invalid angle. Range is 1-90 degrees.") - - # Ensure valid angle - if angle > 90 or angle < 1: - raise ValueError("Invalid angle. Range is 1-90 degrees.") - - # Ensure valid velocity - if init_velocity < 0: - raise ValueError("Invalid velocity. Should be a positive number.") - - -def horizontal_distance(init_velocity: float, angle: float) -> float: - """ - Returns the horizontal distance that the object cover - Formula: - v_0^2 * sin(2 * alpha) - --------------------- - g - v_0 - initial velocity - alpha - angle - >>> horizontal_distance(30, 45) - 91.77 - >>> horizontal_distance(100, 78) - 414.76 - >>> horizontal_distance(-1, 20) - Traceback (most recent call last): - ... - ValueError: Invalid velocity. Should be a positive number. - >>> horizontal_distance(30, -20) - Traceback (most recent call last): - ... - ValueError: Invalid angle. Range is 1-90 degrees. - """ - check_args(init_velocity, angle) - radians = angle_to_radians(2 * angle) - return round(init_velocity**2 * sin(radians) / g, 2) - - -def max_height(init_velocity: float, angle: float) -> float: - """ - Returns the maximum height that the object reach - Formula: - v_0^2 * sin^2(alpha) - -------------------- - 2g - v_0 - initial velocity - alpha - angle - >>> max_height(30, 45) - 22.94 - >>> max_height(100, 78) - 487.82 - >>> max_height("a", 20) - Traceback (most recent call last): - ... - TypeError: Invalid velocity. Should be a positive number. - >>> horizontal_distance(30, "b") - Traceback (most recent call last): - ... - TypeError: Invalid angle. Range is 1-90 degrees. - """ - check_args(init_velocity, angle) - radians = angle_to_radians(angle) - return round(init_velocity**2 * sin(radians) ** 2 / (2 * g), 2) - - -def total_time(init_velocity: float, angle: float) -> float: - """ - Returns total time of the motion - Formula: - 2 * v_0 * sin(alpha) - -------------------- - g - v_0 - initial velocity - alpha - angle - >>> total_time(30, 45) - 4.33 - >>> total_time(100, 78) - 19.95 - >>> total_time(-10, 40) - Traceback (most recent call last): - ... - ValueError: Invalid velocity. Should be a positive number. - >>> total_time(30, "b") - Traceback (most recent call last): - ... - TypeError: Invalid angle. Range is 1-90 degrees. - """ - check_args(init_velocity, angle) - radians = angle_to_radians(angle) - return round(2 * init_velocity * sin(radians) / g, 2) - - -def test_motion() -> None: - """ - >>> test_motion() - """ - v0, angle = 25, 20 - assert horizontal_distance(v0, angle) == 40.97 - assert max_height(v0, angle) == 3.73 - assert total_time(v0, angle) == 1.74 - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - # Get input from user - init_vel = float(input("Initial Velocity: ").strip()) - - # Get input from user - angle = float(input("angle: ").strip()) - - # Print results - print() - print("Results: ") - print(f"Horizontal Distance: {horizontal_distance(init_vel, angle)!s} [m]") - print(f"Maximum Height: {max_height(init_vel, angle)!s} [m]") - print(f"Total Time: {total_time(init_vel, angle)!s} [s]") diff --git a/physics/hubble_parameter.py b/physics/hubble_parameter.py deleted file mode 100644 index f7b2d28a6716..000000000000 --- a/physics/hubble_parameter.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -Title : Calculating the Hubble Parameter - -Description : The Hubble parameter H is the Universe expansion rate -in any time. In cosmology is customary to use the redshift redshift -in place of time, becausethe redshift is directily mensure -in the light of galaxies moving away from us. - -So, the general relation that we obtain is - -H = hubble_constant*(radiation_density*(redshift+1)**4 - + matter_density*(redshift+1)**3 - + curvature*(redshift+1)**2 + dark_energy)**(1/2) - -where radiation_density, matter_density, dark_energy are the relativity -(the percentage) energy densities that exist -in the Universe today. Here, matter_density is the -sum of the barion density and the -dark matter. Curvature is the curvature parameter and can be written in term -of the densities by the completeness - - -curvature = 1 - (matter_density + radiation_density + dark_energy) - -Source : -https://www.sciencedirect.com/topics/mathematics/hubble-parameter -""" - - -def hubble_parameter( - hubble_constant: float, - radiation_density: float, - matter_density: float, - dark_energy: float, - redshift: float, -) -> float: - """ - Input Parameters - ---------------- - hubble_constant: Hubble constante is the expansion rate today usually - given in km/(s*Mpc) - - radiation_density: relative radiation density today - - matter_density: relative mass density today - - dark_energy: relative dark energy density today - - redshift: the light redshift - - Returns - ------- - result : Hubble parameter in and the unit km/s/Mpc (the unit can be - changed if you want, just need to change the unit of the Hubble constant) - - >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4, - ... matter_density=-0.3, dark_energy=0.7, redshift=1) - Traceback (most recent call last): - ... - ValueError: All input parameters must be positive - - >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4, - ... matter_density= 1.2, dark_energy=0.7, redshift=1) - Traceback (most recent call last): - ... - ValueError: Relative densities cannot be greater than one - - >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4, - ... matter_density= 0.3, dark_energy=0.7, redshift=0) - 68.3 - """ - parameters = [redshift, radiation_density, matter_density, dark_energy] - if any(p < 0 for p in parameters): - raise ValueError("All input parameters must be positive") - - if any(p > 1 for p in parameters[1:4]): - raise ValueError("Relative densities cannot be greater than one") - else: - curvature = 1 - (matter_density + radiation_density + dark_energy) - - e_2 = ( - radiation_density * (redshift + 1) ** 4 - + matter_density * (redshift + 1) ** 3 - + curvature * (redshift + 1) ** 2 - + dark_energy - ) - - hubble = hubble_constant * e_2 ** (1 / 2) - return hubble - - -if __name__ == "__main__": - import doctest - - # run doctest - doctest.testmod() - - # demo LCDM approximation - matter_density = 0.3 - - print( - hubble_parameter( - hubble_constant=68.3, - radiation_density=1e-4, - matter_density=matter_density, - dark_energy=1 - matter_density, - redshift=0, - ) - ) diff --git a/physics/ideal_gas_law.py b/physics/ideal_gas_law.py deleted file mode 100644 index 09b4fb3a9c14..000000000000 --- a/physics/ideal_gas_law.py +++ /dev/null @@ -1,93 +0,0 @@ -""" -The ideal gas law, also called the general gas equation, is the -equation of state of a hypothetical ideal gas. It is a good approximation -of the behavior of many gases under many conditions, although it has -several limitations. It was first stated by Benoît Paul Émile Clapeyron -in 1834 as a combination of the empirical Boyle's law, Charles's law, -Avogadro's law, and Gay-Lussac's law.[1] The ideal gas law is often written -in an empirical form: - ------------ - | PV = nRT | - ------------ -P = Pressure (Pa) -V = Volume (m^3) -n = Amount of substance (mol) -R = Universal gas constant -T = Absolute temperature (Kelvin) - -(Description adapted from https://en.wikipedia.org/wiki/Ideal_gas_law ) -""" - -UNIVERSAL_GAS_CONSTANT = 8.314462 # Unit - J mol-1 K-1 - - -def pressure_of_gas_system(moles: float, kelvin: float, volume: float) -> float: - """ - >>> pressure_of_gas_system(2, 100, 5) - 332.57848 - >>> pressure_of_gas_system(0.5, 273, 0.004) - 283731.01575 - >>> pressure_of_gas_system(3, -0.46, 23.5) - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter positive value. - """ - if moles < 0 or kelvin < 0 or volume < 0: - raise ValueError("Invalid inputs. Enter positive value.") - return moles * kelvin * UNIVERSAL_GAS_CONSTANT / volume - - -def volume_of_gas_system(moles: float, kelvin: float, pressure: float) -> float: - """ - >>> volume_of_gas_system(2, 100, 5) - 332.57848 - >>> volume_of_gas_system(0.5, 273, 0.004) - 283731.01575 - >>> volume_of_gas_system(3, -0.46, 23.5) - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter positive value. - """ - if moles < 0 or kelvin < 0 or pressure < 0: - raise ValueError("Invalid inputs. Enter positive value.") - return moles * kelvin * UNIVERSAL_GAS_CONSTANT / pressure - - -def temperature_of_gas_system(moles: float, volume: float, pressure: float) -> float: - """ - >>> temperature_of_gas_system(2, 100, 5) - 30.068090996146232 - >>> temperature_of_gas_system(11, 5009, 1000) - 54767.66101807144 - >>> temperature_of_gas_system(3, -0.46, 23.5) - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter positive value. - """ - if moles < 0 or volume < 0 or pressure < 0: - raise ValueError("Invalid inputs. Enter positive value.") - - return pressure * volume / (moles * UNIVERSAL_GAS_CONSTANT) - - -def moles_of_gas_system(kelvin: float, volume: float, pressure: float) -> float: - """ - >>> moles_of_gas_system(100, 5, 10) - 0.06013618199229246 - >>> moles_of_gas_system(110, 5009, 1000) - 5476.766101807144 - >>> moles_of_gas_system(3, -0.46, 23.5) - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter positive value. - """ - if kelvin < 0 or volume < 0 or pressure < 0: - raise ValueError("Invalid inputs. Enter positive value.") - - return pressure * volume / (kelvin * UNIVERSAL_GAS_CONSTANT) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/physics/image_data/2D_problems.jpg b/physics/image_data/2D_problems.jpg deleted file mode 100644 index 8887cf641685..000000000000 Binary files a/physics/image_data/2D_problems.jpg and /dev/null differ diff --git a/physics/image_data/2D_problems_1.jpg b/physics/image_data/2D_problems_1.jpg deleted file mode 100644 index aa9f45362014..000000000000 Binary files a/physics/image_data/2D_problems_1.jpg and /dev/null differ diff --git a/physics/image_data/__init__.py b/physics/image_data/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/physics/in_static_equilibrium.py b/physics/in_static_equilibrium.py deleted file mode 100644 index fb5a9b5fff66..000000000000 --- a/physics/in_static_equilibrium.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -Checks if a system of forces is in static equilibrium. -""" - -from __future__ import annotations - -from numpy import array, cos, cross, float64, radians, sin -from numpy.typing import NDArray - - -def polar_force( - magnitude: float, angle: float, radian_mode: bool = False -) -> list[float]: - """ - Resolves force along rectangular components. - (force, angle) => (force_x, force_y) - >>> import math - >>> force = polar_force(10, 45) - >>> math.isclose(force[0], 7.071067811865477) - True - >>> math.isclose(force[1], 7.0710678118654755) - True - >>> force = polar_force(10, 3.14, radian_mode=True) - >>> math.isclose(force[0], -9.999987317275396) - True - >>> math.isclose(force[1], 0.01592652916486828) - True - """ - if radian_mode: - return [magnitude * cos(angle), magnitude * sin(angle)] - return [magnitude * cos(radians(angle)), magnitude * sin(radians(angle))] - - -def in_static_equilibrium( - forces: NDArray[float64], location: NDArray[float64], eps: float = 10**-1 -) -> bool: - """ - Check if a system is in equilibrium. - It takes two numpy.array objects. - forces ==> [ - [force1_x, force1_y], - [force2_x, force2_y], - ....] - location ==> [ - [x1, y1], - [x2, y2], - ....] - >>> force = array([[1, 1], [-1, 2]]) - >>> location = array([[1, 0], [10, 0]]) - >>> in_static_equilibrium(force, location) - False - """ - # summation of moments is zero - moments: NDArray[float64] = cross(location, forces) - sum_moments: float = sum(moments) - return bool(abs(sum_moments) < eps) - - -if __name__ == "__main__": - # Test to check if it works - forces = array( - [ - polar_force(718.4, 180 - 30), - polar_force(879.54, 45), - polar_force(100, -90), - ] - ) - - location: NDArray[float64] = array([[0, 0], [0, 0], [0, 0]]) - - assert in_static_equilibrium(forces, location) - - # Problem 1 in image_data/2D_problems.jpg - forces = array( - [ - polar_force(30 * 9.81, 15), - polar_force(215, 180 - 45), - polar_force(264, 90 - 30), - ] - ) - - location = array([[0, 0], [0, 0], [0, 0]]) - - assert in_static_equilibrium(forces, location) - - # Problem in image_data/2D_problems_1.jpg - forces = array([[0, -2000], [0, -1200], [0, 15600], [0, -12400]]) - - location = array([[0, 0], [6, 0], [10, 0], [12, 0]]) - - assert in_static_equilibrium(forces, location) - - import doctest - - doctest.testmod() diff --git a/physics/kinetic_energy.py b/physics/kinetic_energy.py deleted file mode 100644 index 77016e223c16..000000000000 --- a/physics/kinetic_energy.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -Find the kinetic energy of an object, given its mass and velocity. - -Description : In physics, the kinetic energy of an object is the energy that it -possesses due to its motion.It is defined as the work needed to accelerate a body of a -given mass from rest to its stated velocity.Having gained this energy during its -acceleration, the body maintains this kinetic energy unless its speed changes.The same -amount of work is done by the body when decelerating from its current speed to a state -of rest.Formally, a kinetic energy is any term in a system's Lagrangian which includes -a derivative with respect to time. - -In classical mechanics, the kinetic energy of a non-rotating object of mass m traveling -at a speed v is ½mv².In relativistic mechanics, this is a good approximation only when -v is much less than the speed of light.The standard unit of kinetic energy is the -joule, while the English unit of kinetic energy is the foot-pound. - -Reference : https://en.m.wikipedia.org/wiki/Kinetic_energy -""" - - -def kinetic_energy(mass: float, velocity: float) -> float: - """ - Calculate kinetic energy. - - The kinetic energy of a non-rotating object of mass m traveling at a speed v is ½mv² - - >>> kinetic_energy(10,10) - 500.0 - >>> kinetic_energy(0,10) - 0.0 - >>> kinetic_energy(10,0) - 0.0 - >>> kinetic_energy(20,-20) - 4000.0 - >>> kinetic_energy(0,0) - 0.0 - >>> kinetic_energy(2,2) - 4.0 - >>> kinetic_energy(100,100) - 500000.0 - """ - if mass < 0: - raise ValueError("The mass of a body cannot be negative") - return 0.5 * mass * abs(velocity) * abs(velocity) - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) diff --git a/physics/lens_formulae.py b/physics/lens_formulae.py deleted file mode 100644 index 162f3a8f3b29..000000000000 --- a/physics/lens_formulae.py +++ /dev/null @@ -1,131 +0,0 @@ -""" -This module has functions which calculate focal length of lens, distance of -image from the lens and distance of object from the lens. -The above is calculated using the lens formula. - -In optics, the relationship between the distance of the image (v), -the distance of the object (u), and -the focal length (f) of the lens is given by the formula known as the Lens formula. -The Lens formula is applicable for convex as well as concave lenses. The formula -is given as follows: - -------------------- -| 1/f = 1/v + 1/u | -------------------- - -Where - f = focal length of the lens in meters. - v = distance of the image from the lens in meters. - u = distance of the object from the lens in meters. - -To make our calculations easy few assumptions are made while deriving the formula -which are important to keep in mind before solving this equation. -The assumptions are as follows: - 1. The object O is a point object lying somewhere on the principle axis. - 2. The lens is thin. - 3. The aperture of the lens taken must be small. - 4. The angles of incidence and angle of refraction should be small. - -Sign convention is a set of rules to set signs for image distance, object distance, -focal length, etc -for mathematical analysis of image formation. According to it: - 1. Object is always placed to the left of lens. - 2. All distances are measured from the optical centre of the mirror. - 3. Distances measured in the direction of the incident ray are positive and - the distances measured in the direction opposite - to that of the incident rays are negative. - 4. Distances measured along y-axis above the principal axis are positive and - that measured along y-axis below the principal - axis are negative. - -Note: Sign convention can be reversed and will still give the correct results. - -Reference for Sign convention: -https://www.toppr.com/ask/content/concept/sign-convention-for-lenses-210246/ - -Reference for assumptions: -https://testbook.com/physics/derivation-of-lens-maker-formula -""" - - -def focal_length_of_lens( - object_distance_from_lens: float, image_distance_from_lens: float -) -> float: - """ - Doctests: - >>> from math import isclose - >>> isclose(focal_length_of_lens(10,4), 6.666666666666667) - True - >>> from math import isclose - >>> isclose(focal_length_of_lens(2.7,5.8), -5.0516129032258075) - True - >>> focal_length_of_lens(0, 20) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter non zero values with respect - to the sign convention. - """ - - if object_distance_from_lens == 0 or image_distance_from_lens == 0: - raise ValueError( - "Invalid inputs. Enter non zero values with respect to the sign convention." - ) - focal_length = 1 / ( - (1 / image_distance_from_lens) - (1 / object_distance_from_lens) - ) - return focal_length - - -def object_distance( - focal_length_of_lens: float, image_distance_from_lens: float -) -> float: - """ - Doctests: - >>> from math import isclose - >>> isclose(object_distance(10,40), -13.333333333333332) - True - - >>> from math import isclose - >>> isclose(object_distance(6.2,1.5), 1.9787234042553192) - True - - >>> object_distance(0, 20) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter non zero values with respect - to the sign convention. - """ - - if image_distance_from_lens == 0 or focal_length_of_lens == 0: - raise ValueError( - "Invalid inputs. Enter non zero values with respect to the sign convention." - ) - - object_distance = 1 / ((1 / image_distance_from_lens) - (1 / focal_length_of_lens)) - return object_distance - - -def image_distance( - focal_length_of_lens: float, object_distance_from_lens: float -) -> float: - """ - Doctests: - >>> from math import isclose - >>> isclose(image_distance(50,40), 22.22222222222222) - True - >>> from math import isclose - >>> isclose(image_distance(5.3,7.9), 3.1719696969696973) - True - - >>> object_distance(0, 20) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter non zero values with respect - to the sign convention. - """ - if object_distance_from_lens == 0 or focal_length_of_lens == 0: - raise ValueError( - "Invalid inputs. Enter non zero values with respect to the sign convention." - ) - image_distance = 1 / ((1 / object_distance_from_lens) + (1 / focal_length_of_lens)) - return image_distance diff --git a/physics/lorentz_transformation_four_vector.py b/physics/lorentz_transformation_four_vector.py deleted file mode 100644 index 3b0fd83d45df..000000000000 --- a/physics/lorentz_transformation_four_vector.py +++ /dev/null @@ -1,189 +0,0 @@ -""" -Lorentz transformations describe the transition between two inertial reference -frames F and F', each of which is moving in some direction with respect to the -other. This code only calculates Lorentz transformations for movement in the x -direction with no spatial rotation (i.e., a Lorentz boost in the x direction). -The Lorentz transformations are calculated here as linear transformations of -four-vectors [ct, x, y, z] described by Minkowski space. Note that t (time) is -multiplied by c (the speed of light) in the first entry of each four-vector. - -Thus, if X = [ct; x; y; z] and X' = [ct'; x'; y'; z'] are the four-vectors for -two inertial reference frames and X' moves in the x direction with velocity v -with respect to X, then the Lorentz transformation from X to X' is X' = BX, -where - - | y -γβ 0 0| -B = |-γβ y 0 0| - | 0 0 1 0| - | 0 0 0 1| - -is the matrix describing the Lorentz boost between X and X', -y = 1 / √(1 - v²/c²) is the Lorentz factor, and β = v/c is the velocity as -a fraction of c. - -Reference: https://en.wikipedia.org/wiki/Lorentz_transformation -""" - -from math import sqrt - -import numpy as np -from sympy import symbols - -# Coefficient -# Speed of light (m/s) -c = 299792458 - -# Symbols -ct, x, y, z = symbols("ct x y z") - - -# Vehicle's speed divided by speed of light (no units) -def beta(velocity: float) -> float: - """ - Calculates β = v/c, the given velocity as a fraction of c - >>> beta(c) - 1.0 - >>> beta(199792458) - 0.666435904801848 - >>> beta(1e5) - 0.00033356409519815205 - >>> beta(0.2) - Traceback (most recent call last): - ... - ValueError: Speed must be greater than or equal to 1! - """ - if velocity > c: - raise ValueError("Speed must not exceed light speed 299,792,458 [m/s]!") - elif velocity < 1: - # Usually the speed should be much higher than 1 (c order of magnitude) - raise ValueError("Speed must be greater than or equal to 1!") - - return velocity / c - - -def gamma(velocity: float) -> float: - """ - Calculate the Lorentz factor y = 1 / √(1 - v²/c²) for a given velocity - >>> gamma(4) - 1.0000000000000002 - >>> gamma(1e5) - 1.0000000556325075 - >>> gamma(3e7) - 1.005044845777813 - >>> gamma(2.8e8) - 2.7985595722318277 - >>> gamma(299792451) - 4627.49902669495 - >>> gamma(0.3) - Traceback (most recent call last): - ... - ValueError: Speed must be greater than or equal to 1! - >>> gamma(2 * c) - Traceback (most recent call last): - ... - ValueError: Speed must not exceed light speed 299,792,458 [m/s]! - """ - return 1 / sqrt(1 - beta(velocity) ** 2) - - -def transformation_matrix(velocity: float) -> np.ndarray: - """ - Calculate the Lorentz transformation matrix for movement in the x direction: - - | y -γβ 0 0| - |-γβ y 0 0| - | 0 0 1 0| - | 0 0 0 1| - - where y is the Lorentz factor and β is the velocity as a fraction of c - >>> transformation_matrix(29979245) - array([[ 1.00503781, -0.10050378, 0. , 0. ], - [-0.10050378, 1.00503781, 0. , 0. ], - [ 0. , 0. , 1. , 0. ], - [ 0. , 0. , 0. , 1. ]]) - >>> transformation_matrix(19979245.2) - array([[ 1.00222811, -0.06679208, 0. , 0. ], - [-0.06679208, 1.00222811, 0. , 0. ], - [ 0. , 0. , 1. , 0. ], - [ 0. , 0. , 0. , 1. ]]) - >>> transformation_matrix(1) - array([[ 1.00000000e+00, -3.33564095e-09, 0.00000000e+00, - 0.00000000e+00], - [-3.33564095e-09, 1.00000000e+00, 0.00000000e+00, - 0.00000000e+00], - [ 0.00000000e+00, 0.00000000e+00, 1.00000000e+00, - 0.00000000e+00], - [ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, - 1.00000000e+00]]) - >>> transformation_matrix(0) - Traceback (most recent call last): - ... - ValueError: Speed must be greater than or equal to 1! - >>> transformation_matrix(c * 1.5) - Traceback (most recent call last): - ... - ValueError: Speed must not exceed light speed 299,792,458 [m/s]! - """ - return np.array( - [ - [gamma(velocity), -gamma(velocity) * beta(velocity), 0, 0], - [-gamma(velocity) * beta(velocity), gamma(velocity), 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1], - ] - ) - - -def transform(velocity: float, event: np.ndarray | None = None) -> np.ndarray: - """ - Calculate a Lorentz transformation for movement in the x direction given a - velocity and a four-vector for an inertial reference frame - - If no four-vector is given, then calculate the transformation symbolically - with variables - >>> transform(29979245, np.array([1, 2, 3, 4])) - array([ 3.01302757e+08, -3.01302729e+07, 3.00000000e+00, 4.00000000e+00]) - >>> transform(29979245) - array([1.00503781498831*ct - 0.100503778816875*x, - -0.100503778816875*ct + 1.00503781498831*x, 1.0*y, 1.0*z], - dtype=object) - >>> transform(19879210.2) - array([1.0022057787097*ct - 0.066456172618675*x, - -0.066456172618675*ct + 1.0022057787097*x, 1.0*y, 1.0*z], - dtype=object) - >>> transform(299792459, np.array([1, 1, 1, 1])) - Traceback (most recent call last): - ... - ValueError: Speed must not exceed light speed 299,792,458 [m/s]! - >>> transform(-1, np.array([1, 1, 1, 1])) - Traceback (most recent call last): - ... - ValueError: Speed must be greater than or equal to 1! - """ - # Ensure event is not empty - if event is None: - event = np.array([ct, x, y, z]) # Symbolic four vector - else: - event[0] *= c # x0 is ct (speed of light * time) - - return transformation_matrix(velocity) @ event - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Example of symbolic vector: - four_vector = transform(29979245) - print("Example of four vector: ") - print(f"ct' = {four_vector[0]}") - print(f"x' = {four_vector[1]}") - print(f"y' = {four_vector[2]}") - print(f"z' = {four_vector[3]}") - - # Substitute symbols with numerical values - sub_dict = {ct: c, x: 1, y: 1, z: 1} - numerical_vector = [four_vector[i].subs(sub_dict) for i in range(4)] - - print(f"\n{numerical_vector}") diff --git a/physics/malus_law.py b/physics/malus_law.py deleted file mode 100644 index 374b3423f8ff..000000000000 --- a/physics/malus_law.py +++ /dev/null @@ -1,80 +0,0 @@ -import math - -""" -Finding the intensity of light transmitted through a polariser using Malus Law -and by taking initial intensity and angle between polariser and axis as input - -Description : Malus's law, which is named after Étienne-Louis Malus, -says that when a perfect polarizer is placed in a polarized -beam of light, the irradiance, I, of the light that passes -through is given by - I=I'cos²θ -where I' is the initial intensity and θ is the angle between the light's -initial polarization direction and the axis of the polarizer. -A beam of unpolarized light can be thought of as containing a -uniform mixture of linear polarizations at all possible angles. -Since the average value of cos²θ is 1/2, the transmission coefficient becomes -I/I' = 1/2 -In practice, some light is lost in the polarizer and the actual transmission -will be somewhat lower than this, around 38% for Polaroid-type polarizers but -considerably higher (>49.9%) for some birefringent prism types. -If two polarizers are placed one after another (the second polarizer is -generally called an analyzer), the mutual angle between their polarizing axes -gives the value of θ in Malus's law. If the two axes are orthogonal, the -polarizers are crossed and in theory no light is transmitted, though again -practically speaking no polarizer is perfect and the transmission is not exactly -zero (for example, crossed Polaroid sheets appear slightly blue in colour because -their extinction ratio is better in the red). If a transparent object is placed -between the crossed polarizers, any polarization effects present in the sample -(such as birefringence) will be shown as an increase in transmission. -This effect is used in polarimetry to measure the optical activity of a sample. -Real polarizers are also not perfect blockers of the polarization orthogonal to -their polarization axis; the ratio of the transmission of the unwanted component -to the wanted component is called the extinction ratio, and varies from around -1:500 for Polaroid to about 1:106 for Glan-Taylor prism polarizers. - -Reference : "https://en.wikipedia.org/wiki/Polarizer#Malus's_law_and_other_properties" -""" - - -def malus_law(initial_intensity: float, angle: float) -> float: - """ - >>> round(malus_law(10,45),2) - 5.0 - >>> round(malus_law(100,60),2) - 25.0 - >>> round(malus_law(50,150),2) - 37.5 - >>> round(malus_law(75,270),2) - 0.0 - >>> round(malus_law(10,-900),2) - Traceback (most recent call last): - ... - ValueError: In Malus Law, the angle is in the range 0-360 degrees - >>> round(malus_law(10,900),2) - Traceback (most recent call last): - ... - ValueError: In Malus Law, the angle is in the range 0-360 degrees - >>> round(malus_law(-100,900),2) - Traceback (most recent call last): - ... - ValueError: The value of intensity cannot be negative - >>> round(malus_law(100,180),2) - 100.0 - >>> round(malus_law(100,360),2) - 100.0 - """ - - if initial_intensity < 0: - raise ValueError("The value of intensity cannot be negative") - # handling of negative values of initial intensity - if angle < 0 or angle > 360: - raise ValueError("In Malus Law, the angle is in the range 0-360 degrees") - # handling of values out of allowed range - return initial_intensity * (math.cos(math.radians(angle)) ** 2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod(name="malus_law") diff --git a/physics/mass_energy_equivalence.py b/physics/mass_energy_equivalence.py deleted file mode 100644 index 4a4c7890f4e0..000000000000 --- a/physics/mass_energy_equivalence.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Title: -Finding the energy equivalence of mass and mass equivalence of energy -by Einstein's equation. - -Description: -Einstein's mass-energy equivalence is a pivotal concept in theoretical physics. -It asserts that energy (E) and mass (m) are directly related by the speed of -light in vacuum (c) squared, as described in the equation E = mc². This means that -mass and energy are interchangeable; a mass increase corresponds to an energy increase, -and vice versa. This principle has profound implications in nuclear reactions, -explaining the release of immense energy from minuscule changes in atomic nuclei. - -Equations: -E = mc² and m = E/c², where m is mass, E is Energy, c is speed of light in vacuum. - -Reference: -https://en.wikipedia.org/wiki/Mass%E2%80%93energy_equivalence -""" - -from scipy.constants import c # speed of light in vacuum (299792458 m/s) - - -def energy_from_mass(mass: float) -> float: - """ - Calculates the Energy equivalence of the Mass using E = mc² - in SI units J from Mass in kg. - - mass (float): Mass of body. - - Usage example: - >>> energy_from_mass(124.56) - 1.11948945063458e+19 - >>> energy_from_mass(320) - 2.8760165719578165e+19 - >>> energy_from_mass(0) - 0.0 - >>> energy_from_mass(-967.9) - Traceback (most recent call last): - ... - ValueError: Mass can't be negative. - - """ - if mass < 0: - raise ValueError("Mass can't be negative.") - return mass * c**2 - - -def mass_from_energy(energy: float) -> float: - """ - Calculates the Mass equivalence of the Energy using m = E/c² - in SI units kg from Energy in J. - - energy (float): Mass of body. - - Usage example: - >>> mass_from_energy(124.56) - 1.3859169098203872e-15 - >>> mass_from_energy(320) - 3.560480179371579e-15 - >>> mass_from_energy(0) - 0.0 - >>> mass_from_energy(-967.9) - Traceback (most recent call last): - ... - ValueError: Energy can't be negative. - - """ - if energy < 0: - raise ValueError("Energy can't be negative.") - return energy / c**2 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/mirror_formulae.py b/physics/mirror_formulae.py deleted file mode 100644 index 7efc52438140..000000000000 --- a/physics/mirror_formulae.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -This module contains the functions to calculate the focal length, object distance -and image distance of a mirror. - -The mirror formula is an equation that relates the object distance (u), -image distance (v), and focal length (f) of a spherical mirror. -It is commonly used in optics to determine the position and characteristics -of an image formed by a mirror. It is expressed using the formulae : - -------------------- -| 1/f = 1/v + 1/u | -------------------- - -Where, -f = Focal length of the spherical mirror (metre) -v = Image distance from the mirror (metre) -u = Object distance from the mirror (metre) - - -The signs of the distances are taken with respect to the sign convention. -The sign convention is as follows: - 1) Object is always placed to the left of mirror - 2) Distances measured in the direction of the incident ray are positive - and the distances measured in the direction opposite to that of the incident - rays are negative. - 3) All distances are measured from the pole of the mirror. - - -There are a few assumptions that are made while using the mirror formulae. -They are as follows: - 1) Thin Mirror: The mirror is assumed to be thin, meaning its thickness is - negligible compared to its radius of curvature. This assumption allows - us to treat the mirror as a two-dimensional surface. - 2) Spherical Mirror: The mirror is assumed to have a spherical shape. While this - assumption may not hold exactly for all mirrors, it is a reasonable approximation - for most practical purposes. - 3) Small Angles: The angles involved in the derivation are assumed to be small. - This assumption allows us to use the small-angle approximation, where the tangent - of a small angle is approximately equal to the angle itself. It simplifies the - calculations and makes the derivation more manageable. - 4) Paraxial Rays: The mirror formula is derived using paraxial rays, which are - rays that are close to the principal axis and make small angles with it. This - assumption ensures that the rays are close enough to the principal axis, making the - calculations more accurate. - 5) Reflection and Refraction Laws: The derivation assumes that the laws of - reflection and refraction hold. - These laws state that the angle of incidence is equal to the angle of reflection - for reflection, and the incident and refracted rays lie in the same plane and - obey Snell's law for refraction. - -(Description and Assumptions adapted from -https://www.collegesearch.in/articles/mirror-formula-derivation) - -(Sign Convention adapted from -https://www.toppr.com/ask/content/concept/sign-convention-for-mirrors-210189/) - - -""" - - -def focal_length(distance_of_object: float, distance_of_image: float) -> float: - """ - >>> from math import isclose - >>> isclose(focal_length(10, 20), 6.66666666666666) - True - >>> from math import isclose - >>> isclose(focal_length(9.5, 6.7), 3.929012346) - True - >>> focal_length(0, 20) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter non zero values with respect - to the sign convention. - """ - - if distance_of_object == 0 or distance_of_image == 0: - raise ValueError( - "Invalid inputs. Enter non zero values with respect to the sign convention." - ) - focal_length = 1 / ((1 / distance_of_object) + (1 / distance_of_image)) - return focal_length - - -def object_distance(focal_length: float, distance_of_image: float) -> float: - """ - >>> from math import isclose - >>> isclose(object_distance(30, 20), -60.0) - True - >>> from math import isclose - >>> isclose(object_distance(10.5, 11.7), 102.375) - True - >>> object_distance(90, 0) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter non zero values with respect - to the sign convention. - """ - - if distance_of_image == 0 or focal_length == 0: - raise ValueError( - "Invalid inputs. Enter non zero values with respect to the sign convention." - ) - object_distance = 1 / ((1 / focal_length) - (1 / distance_of_image)) - return object_distance - - -def image_distance(focal_length: float, distance_of_object: float) -> float: - """ - >>> from math import isclose - >>> isclose(image_distance(10, 40), 13.33333333) - True - >>> from math import isclose - >>> isclose(image_distance(1.5, 6.7), 1.932692308) - True - >>> image_distance(0, 0) # doctest: +NORMALIZE_WHITESPACE - Traceback (most recent call last): - ... - ValueError: Invalid inputs. Enter non zero values with respect - to the sign convention. - """ - - if distance_of_object == 0 or focal_length == 0: - raise ValueError( - "Invalid inputs. Enter non zero values with respect to the sign convention." - ) - image_distance = 1 / ((1 / focal_length) - (1 / distance_of_object)) - return image_distance diff --git a/physics/n_body_simulation.py b/physics/n_body_simulation.py deleted file mode 100644 index 9bfb6b3c6864..000000000000 --- a/physics/n_body_simulation.py +++ /dev/null @@ -1,347 +0,0 @@ -""" -In physics and astronomy, a gravitational N-body simulation is a simulation of a -dynamical system of particles under the influence of gravity. The system -consists of a number of bodies, each of which exerts a gravitational force on all -other bodies. These forces are calculated using Newton's law of universal -gravitation. The Euler method is used at each time-step to calculate the change in -velocity and position brought about by these forces. Softening is used to prevent -numerical divergences when a particle comes too close to another (and the force -goes to infinity). -(Description adapted from https://en.wikipedia.org/wiki/N-body_simulation ) -(See also http://www.shodor.org/refdesk/Resources/Algorithms/EulersMethod/ ) -""" - -from __future__ import annotations - -import random - -from matplotlib import animation -from matplotlib import pyplot as plt - -# Frame rate of the animation -INTERVAL = 20 - -# Time between time steps in seconds -DELTA_TIME = INTERVAL / 1000 - - -class Body: - def __init__( - self, - position_x: float, - position_y: float, - velocity_x: float, - velocity_y: float, - mass: float = 1.0, - size: float = 1.0, - color: str = "blue", - ) -> None: - """ - The parameters "size" & "color" are not relevant for the simulation itself, - they are only used for plotting. - """ - self.position_x = position_x - self.position_y = position_y - self.velocity_x = velocity_x - self.velocity_y = velocity_y - self.mass = mass - self.size = size - self.color = color - - @property - def position(self) -> tuple[float, float]: - return self.position_x, self.position_y - - @property - def velocity(self) -> tuple[float, float]: - return self.velocity_x, self.velocity_y - - def update_velocity( - self, force_x: float, force_y: float, delta_time: float - ) -> None: - """ - Euler algorithm for velocity - - >>> body_1 = Body(0.,0.,0.,0.) - >>> body_1.update_velocity(1.,0.,1.) - >>> body_1.velocity - (1.0, 0.0) - - >>> body_1.update_velocity(1.,0.,1.) - >>> body_1.velocity - (2.0, 0.0) - - >>> body_2 = Body(0.,0.,5.,0.) - >>> body_2.update_velocity(0.,-10.,10.) - >>> body_2.velocity - (5.0, -100.0) - - >>> body_2.update_velocity(0.,-10.,10.) - >>> body_2.velocity - (5.0, -200.0) - """ - self.velocity_x += force_x * delta_time - self.velocity_y += force_y * delta_time - - def update_position(self, delta_time: float) -> None: - """ - Euler algorithm for position - - >>> body_1 = Body(0.,0.,1.,0.) - >>> body_1.update_position(1.) - >>> body_1.position - (1.0, 0.0) - - >>> body_1.update_position(1.) - >>> body_1.position - (2.0, 0.0) - - >>> body_2 = Body(10.,10.,0.,-2.) - >>> body_2.update_position(1.) - >>> body_2.position - (10.0, 8.0) - - >>> body_2.update_position(1.) - >>> body_2.position - (10.0, 6.0) - """ - self.position_x += self.velocity_x * delta_time - self.position_y += self.velocity_y * delta_time - - -class BodySystem: - """ - This class is used to hold the bodies, the gravitation constant, the time - factor and the softening factor. The time factor is used to control the speed - of the simulation. The softening factor is used for softening, a numerical - trick for N-body simulations to prevent numerical divergences when two bodies - get too close to each other. - """ - - def __init__( - self, - bodies: list[Body], - gravitation_constant: float = 1.0, - time_factor: float = 1.0, - softening_factor: float = 0.0, - ) -> None: - self.bodies = bodies - self.gravitation_constant = gravitation_constant - self.time_factor = time_factor - self.softening_factor = softening_factor - - def __len__(self) -> int: - return len(self.bodies) - - def update_system(self, delta_time: float) -> None: - """ - For each body, loop through all other bodies to calculate the total - force they exert on it. Use that force to update the body's velocity. - - >>> body_system_1 = BodySystem([Body(0,0,0,0), Body(10,0,0,0)]) - >>> len(body_system_1) - 2 - >>> body_system_1.update_system(1) - >>> body_system_1.bodies[0].position - (0.01, 0.0) - >>> body_system_1.bodies[0].velocity - (0.01, 0.0) - - >>> body_system_2 = BodySystem([Body(-10,0,0,0), Body(10,0,0,0, mass=4)], 1, 10) - >>> body_system_2.update_system(1) - >>> body_system_2.bodies[0].position - (-9.0, 0.0) - >>> body_system_2.bodies[0].velocity - (0.1, 0.0) - """ - for body1 in self.bodies: - force_x = 0.0 - force_y = 0.0 - for body2 in self.bodies: - if body1 != body2: - dif_x = body2.position_x - body1.position_x - dif_y = body2.position_y - body1.position_y - - # Calculation of the distance using Pythagoras's theorem - # Extra factor due to the softening technique - distance = (dif_x**2 + dif_y**2 + self.softening_factor) ** (1 / 2) - - # Newton's law of universal gravitation. - force_x += ( - self.gravitation_constant * body2.mass * dif_x / distance**3 - ) - force_y += ( - self.gravitation_constant * body2.mass * dif_y / distance**3 - ) - - # Update the body's velocity once all the force components have been added - body1.update_velocity(force_x, force_y, delta_time * self.time_factor) - - # Update the positions only after all the velocities have been updated - for body in self.bodies: - body.update_position(delta_time * self.time_factor) - - -def update_step( - body_system: BodySystem, delta_time: float, patches: list[plt.Circle] -) -> None: - """ - Updates the body-system and applies the change to the patch-list used for plotting - - >>> body_system_1 = BodySystem([Body(0,0,0,0), Body(10,0,0,0)]) - >>> patches_1 = [plt.Circle((body.position_x, body.position_y), body.size, - ... fc=body.color)for body in body_system_1.bodies] #doctest: +ELLIPSIS - >>> update_step(body_system_1, 1, patches_1) - >>> patches_1[0].center - (0.01, 0.0) - - >>> body_system_2 = BodySystem([Body(-10,0,0,0), Body(10,0,0,0, mass=4)], 1, 10) - >>> patches_2 = [plt.Circle((body.position_x, body.position_y), body.size, - ... fc=body.color)for body in body_system_2.bodies] #doctest: +ELLIPSIS - >>> update_step(body_system_2, 1, patches_2) - >>> patches_2[0].center - (-9.0, 0.0) - """ - # Update the positions of the bodies - body_system.update_system(delta_time) - - # Update the positions of the patches - for patch, body in zip(patches, body_system.bodies): - patch.center = (body.position_x, body.position_y) - - -def plot( - title: str, - body_system: BodySystem, - x_start: float = -1, - x_end: float = 1, - y_start: float = -1, - y_end: float = 1, -) -> None: - """ - Utility function to plot how the given body-system evolves over time. - No doctest provided since this function does not have a return value. - """ - fig = plt.figure() - fig.canvas.manager.set_window_title(title) - ax = plt.axes( - xlim=(x_start, x_end), ylim=(y_start, y_end) - ) # Set section to be plotted - plt.gca().set_aspect("equal") # Fix aspect ratio - - # Each body is drawn as a patch by the plt-function - patches = [ - plt.Circle((body.position_x, body.position_y), body.size, fc=body.color) - for body in body_system.bodies - ] - - for patch in patches: - ax.add_patch(patch) - - # Function called at each step of the animation - def update(frame: int) -> list[plt.Circle]: # noqa: ARG001 - update_step(body_system, DELTA_TIME, patches) - return patches - - anim = animation.FuncAnimation( # noqa: F841 - fig, update, interval=INTERVAL, blit=True - ) - - plt.show() - - -def example_1() -> BodySystem: - """ - Example 1: figure-8 solution to the 3-body-problem - This example can be seen as a test of the implementation: given the right - initial conditions, the bodies should move in a figure-8. - (initial conditions taken from http://www.artcompsci.org/vol_1/v1_web/node56.html) - >>> body_system = example_1() - >>> len(body_system) - 3 - """ - - position_x = 0.9700436 - position_y = -0.24308753 - velocity_x = 0.466203685 - velocity_y = 0.43236573 - - bodies1 = [ - Body(position_x, position_y, velocity_x, velocity_y, size=0.2, color="red"), - Body(-position_x, -position_y, velocity_x, velocity_y, size=0.2, color="green"), - Body(0, 0, -2 * velocity_x, -2 * velocity_y, size=0.2, color="blue"), - ] - return BodySystem(bodies1, time_factor=3) - - -def example_2() -> BodySystem: - """ - Example 2: Moon's orbit around the earth - This example can be seen as a test of the implementation: given the right - initial conditions, the moon should orbit around the earth as it actually does. - (mass, velocity and distance taken from https://en.wikipedia.org/wiki/Earth - and https://en.wikipedia.org/wiki/Moon) - No doctest provided since this function does not have a return value. - """ - - moon_mass = 7.3476e22 - earth_mass = 5.972e24 - velocity_dif = 1022 - earth_moon_distance = 384399000 - gravitation_constant = 6.674e-11 - - # Calculation of the respective velocities so that total impulse is zero, - # i.e. the two bodies together don't move - moon_velocity = earth_mass * velocity_dif / (earth_mass + moon_mass) - earth_velocity = moon_velocity - velocity_dif - - moon = Body(-earth_moon_distance, 0, 0, moon_velocity, moon_mass, 10000000, "grey") - earth = Body(0, 0, 0, earth_velocity, earth_mass, 50000000, "blue") - return BodySystem([earth, moon], gravitation_constant, time_factor=1000000) - - -def example_3() -> BodySystem: - """ - Example 3: Random system with many bodies. - No doctest provided since this function does not have a return value. - """ - - bodies = [] - for _ in range(10): - velocity_x = random.uniform(-0.5, 0.5) - velocity_y = random.uniform(-0.5, 0.5) - - # Bodies are created pairwise with opposite velocities so that the - # total impulse remains zero - bodies.append( - Body( - random.uniform(-0.5, 0.5), - random.uniform(-0.5, 0.5), - velocity_x, - velocity_y, - size=0.05, - ) - ) - bodies.append( - Body( - random.uniform(-0.5, 0.5), - random.uniform(-0.5, 0.5), - -velocity_x, - -velocity_y, - size=0.05, - ) - ) - return BodySystem(bodies, 0.01, 10, 0.1) - - -if __name__ == "__main__": - plot("Figure-8 solution to the 3-body-problem", example_1(), -2, 2, -2, 2) - plot( - "Moon's orbit around the earth", - example_2(), - -430000000, - 430000000, - -430000000, - 430000000, - ) - plot("Random system with many bodies", example_3(), -1.5, 1.5, -1.5, 1.5) diff --git a/physics/newtons_law_of_gravitation.py b/physics/newtons_law_of_gravitation.py deleted file mode 100644 index ae9da2f1e949..000000000000 --- a/physics/newtons_law_of_gravitation.py +++ /dev/null @@ -1,99 +0,0 @@ -""" -Title : Finding the value of either Gravitational Force, one of the masses or distance -provided that the other three parameters are given. - -Description : Newton's Law of Universal Gravitation explains the presence of force of -attraction between bodies having a definite mass situated at a distance. It is usually -stated as that, every particle attracts every other particle in the universe with a -force that is directly proportional to the product of their masses and inversely -proportional to the square of the distance between their centers. The publication of the -theory has become known as the "first great unification", as it marked the unification -of the previously described phenomena of gravity on Earth with known astronomical -behaviors. - -The equation for the universal gravitation is as follows: -F = (G * mass_1 * mass_2) / (distance)^2 - -Source : -- https://en.wikipedia.org/wiki/Newton%27s_law_of_universal_gravitation -- Newton (1687) "Philosophiæ Naturalis Principia Mathematica" -""" - -from __future__ import annotations - -# Define the Gravitational Constant G and the function -GRAVITATIONAL_CONSTANT = 6.6743e-11 # unit of G : m^3 * kg^-1 * s^-2 - - -def gravitational_law( - force: float, mass_1: float, mass_2: float, distance: float -) -> dict[str, float]: - """ - Input Parameters - ---------------- - force : magnitude in Newtons - - mass_1 : mass in Kilograms - - mass_2 : mass in Kilograms - - distance : distance in Meters - - Returns - ------- - result : dict name, value pair of the parameter having Zero as it's value - - Returns the value of one of the parameters specified as 0, provided the values of - other parameters are given. - >>> gravitational_law(force=0, mass_1=5, mass_2=10, distance=20) - {'force': 8.342875e-12} - - >>> gravitational_law(force=7367.382, mass_1=0, mass_2=74, distance=3048) - {'mass_1': 1.385816317292268e+19} - - >>> gravitational_law(force=36337.283, mass_1=0, mass_2=0, distance=35584) - Traceback (most recent call last): - ... - ValueError: One and only one argument must be 0 - - >>> gravitational_law(force=36337.283, mass_1=-674, mass_2=0, distance=35584) - Traceback (most recent call last): - ... - ValueError: Mass can not be negative - - >>> gravitational_law(force=-847938e12, mass_1=674, mass_2=0, distance=9374) - Traceback (most recent call last): - ... - ValueError: Gravitational force can not be negative - """ - - product_of_mass = mass_1 * mass_2 - - if (force, mass_1, mass_2, distance).count(0) != 1: - raise ValueError("One and only one argument must be 0") - if force < 0: - raise ValueError("Gravitational force can not be negative") - if distance < 0: - raise ValueError("Distance can not be negative") - if mass_1 < 0 or mass_2 < 0: - raise ValueError("Mass can not be negative") - if force == 0: - force = GRAVITATIONAL_CONSTANT * product_of_mass / (distance**2) - return {"force": force} - elif mass_1 == 0: - mass_1 = (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_2) - return {"mass_1": mass_1} - elif mass_2 == 0: - mass_2 = (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_1) - return {"mass_2": mass_2} - elif distance == 0: - distance = (GRAVITATIONAL_CONSTANT * product_of_mass / (force)) ** 0.5 - return {"distance": distance} - raise ValueError("One and only one argument must be 0") - - -# Run doctest -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/newtons_second_law_of_motion.py b/physics/newtons_second_law_of_motion.py deleted file mode 100644 index 53fab6ce78b9..000000000000 --- a/physics/newtons_second_law_of_motion.py +++ /dev/null @@ -1,81 +0,0 @@ -""" -Description : -Newton's second law of motion pertains to the behavior of objects for which -all existing forces are not balanced. -The second law states that the acceleration of an object is dependent upon two variables -- the net force acting upon the object and the mass of the object. -The acceleration of an object depends directly -upon the net force acting upon the object, -and inversely upon the mass of the object. -As the force acting upon an object is increased, -the acceleration of the object is increased. -As the mass of an object is increased, the acceleration of the object is decreased. -Source: https://www.physicsclassroom.com/class/newtlaws/Lesson-3/Newton-s-Second-Law -Formulation: Fnet = m • a -Diagrammatic Explanation: - Forces are unbalanced - | - | - | - V - There is acceleration - /\ - / \ - / \ - / \ - / \ - / \ - / \ - __________________ ____ ________________ - |The acceleration | |The acceleration | - |depends directly | |depends inversely | - |on the net Force | |upon the object's | - |_________________| |mass_______________| -Units: -1 Newton = 1 kg X meters / (seconds^2) -How to use? -Inputs: - ___________________________________________________ - |Name | Units | Type | - |-------------|-------------------------|-----------| - |mass | (in kgs) | float | - |-------------|-------------------------|-----------| - |acceleration | (in meters/(seconds^2)) | float | - |_____________|_________________________|___________| - -Output: - ___________________________________________________ - |Name | Units | Type | - |-------------|-------------------------|-----------| - |force | (in Newtons) | float | - |_____________|_________________________|___________| - -""" - - -def newtons_second_law_of_motion(mass: float, acceleration: float) -> float: - """ - >>> newtons_second_law_of_motion(10, 10) - 100 - >>> newtons_second_law_of_motion(2.0, 1) - 2.0 - """ - force = 0.0 - try: - force = mass * acceleration - except Exception: - return -0.0 - return force - - -if __name__ == "__main__": - import doctest - - # run doctest - doctest.testmod() - - # demo - mass = 12.5 - acceleration = 10 - force = newtons_second_law_of_motion(mass, acceleration) - print("The force is ", force, "N") diff --git a/physics/photoelectric_effect.py b/physics/photoelectric_effect.py deleted file mode 100644 index 3a0138ffe045..000000000000 --- a/physics/photoelectric_effect.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -The photoelectric effect is the emission of electrons when electromagnetic radiation , -such as light, hits a material. Electrons emitted in this manner are called -photoelectrons. - -In 1905, Einstein proposed a theory of the photoelectric effect using a concept that -light consists of tiny packets of energy known as photons or light quanta. Each packet -carries energy hv that is proportional to the frequency v of the corresponding -electromagnetic wave. The proportionality constant h has become known as the -Planck constant. In the range of kinetic energies of the electrons that are removed from -their varying atomic bindings by the absorption of a photon of energy hv, the highest -kinetic energy K_max is : - -K_max = hv-W - -Here, W is the minimum energy required to remove an electron from the surface of the -material. It is called the work function of the surface - -Reference: https://en.wikipedia.org/wiki/Photoelectric_effect - -""" - -PLANCK_CONSTANT_JS = 6.6261 * pow(10, -34) # in SI (Js) -PLANCK_CONSTANT_EVS = 4.1357 * pow(10, -15) # in eVs - - -def maximum_kinetic_energy( - frequency: float, work_function: float, in_ev: bool = False -) -> float: - """ - Calculates the maximum kinetic energy of emitted electron from the surface. - if the maximum kinetic energy is zero then no electron will be emitted - or given electromagnetic wave frequency is small. - - frequency (float): Frequency of electromagnetic wave. - work_function (float): Work function of the surface. - in_ev (optional)(bool): Pass True if values are in eV. - - Usage example: - >>> maximum_kinetic_energy(1000000,2) - 0 - >>> maximum_kinetic_energy(1000000,2,True) - 0 - >>> maximum_kinetic_energy(10000000000000000,2,True) - 39.357000000000006 - >>> maximum_kinetic_energy(-9,20) - Traceback (most recent call last): - ... - ValueError: Frequency can't be negative. - - >>> maximum_kinetic_energy(1000,"a") - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for -: 'float' and 'str' - - """ - if frequency < 0: - raise ValueError("Frequency can't be negative.") - if in_ev: - return max(PLANCK_CONSTANT_EVS * frequency - work_function, 0) - return max(PLANCK_CONSTANT_JS * frequency - work_function, 0) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/potential_energy.py b/physics/potential_energy.py deleted file mode 100644 index c6544f6f76d8..000000000000 --- a/physics/potential_energy.py +++ /dev/null @@ -1,61 +0,0 @@ -from scipy.constants import g - -""" -Finding the gravitational potential energy of an object with reference -to the earth,by taking its mass and height above the ground as input - - -Description : Gravitational energy or gravitational potential energy -is the potential energy a massive object has in relation to another -massive object due to gravity. It is the potential energy associated -with the gravitational field, which is released (converted into -kinetic energy) when the objects fall towards each other. -Gravitational potential energy increases when two objects -are brought further apart. - -For two pairwise interacting point particles, the gravitational -potential energy U is given by -U=-GMm/R -where M and m are the masses of the two particles, R is the distance -between them, and G is the gravitational constant. -Close to the Earth's surface, the gravitational field is approximately -constant, and the gravitational potential energy of an object reduces to -U=mgh -where m is the object's mass, g=GM/R² is the gravity of Earth, and h is -the height of the object's center of mass above a chosen reference level. - -Reference : "https://en.m.wikipedia.org/wiki/Gravitational_energy" -""" - - -def potential_energy(mass: float, height: float) -> float: - # function will accept mass and height as parameters and return potential energy - """ - >>> potential_energy(10,10) - 980.665 - >>> potential_energy(0,5) - 0.0 - >>> potential_energy(8,0) - 0.0 - >>> potential_energy(10,5) - 490.3325 - >>> potential_energy(0,0) - 0.0 - >>> potential_energy(2,8) - 156.9064 - >>> potential_energy(20,100) - 19613.3 - """ - if mass < 0: - # handling of negative values of mass - raise ValueError("The mass of a body cannot be negative") - if height < 0: - # handling of negative values of height - raise ValueError("The height above the ground cannot be negative") - return mass * g * height - - -if __name__ == "__main__": - from doctest import testmod - - testmod(name="potential_energy") diff --git a/physics/rainfall_intensity.py b/physics/rainfall_intensity.py deleted file mode 100644 index cee8d50ddc2f..000000000000 --- a/physics/rainfall_intensity.py +++ /dev/null @@ -1,143 +0,0 @@ -""" -Rainfall Intensity -================== -This module contains functions to calculate the intensity of -a rainfall event for a given duration and return period. - -This function uses the Sherman intensity-duration-frequency curve. - -References ----------- -- Aparicio, F. (1997): Fundamentos de Hidrología de Superficie. - Balderas, México, Limusa. 303 p. -- https://en.wikipedia.org/wiki/Intensity-duration-frequency_curve -""" - - -def rainfall_intensity( - coefficient_k: float, - coefficient_a: float, - coefficient_b: float, - coefficient_c: float, - return_period: float, - duration: float, -) -> float: - """ - Calculate the intensity of a rainfall event for a given duration and return period. - It's based on the Sherman intensity-duration-frequency curve: - - I = k * T^a / (D + b)^c - - where: - I = Intensity of the rainfall event [mm/h] - k, a, b, c = Coefficients obtained through statistical distribution adjust - T = Return period in years - D = Rainfall event duration in minutes - - Parameters - ---------- - coefficient_k : float - Coefficient obtained through statistical distribution adjust. - coefficient_a : float - Coefficient obtained through statistical distribution adjust. - coefficient_b : float - Coefficient obtained through statistical distribution adjust. - coefficient_c : float - Coefficient obtained through statistical distribution adjust. - return_period : float - Return period in years. - duration : float - Rainfall event duration in minutes. - - Returns - ------- - intensity : float - Intensity of the rainfall event in mm/h. - - Raises - ------ - ValueError - If any of the parameters are not positive. - - Examples - -------- - - >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 10, 60) - 49.83339231138578 - - >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 10, 30) - 77.36319588106228 - - >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 5, 60) - 43.382487747633625 - - >>> rainfall_intensity(0, 0.2, 11.6, 0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, -0.2, 11.6, 0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0.2, -11.6, 0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0.2, 11.6, -0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0, 11.6, 0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0.2, 0, 0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0.2, 11.6, 0, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(0, 0.2, 11.6, 0.81, 10, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 0, 60) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 10, 0) - Traceback (most recent call last): - ... - ValueError: All parameters must be positive. - - """ - if ( - coefficient_k <= 0 - or coefficient_a <= 0 - or coefficient_b <= 0 - or coefficient_c <= 0 - or return_period <= 0 - or duration <= 0 - ): - raise ValueError("All parameters must be positive.") - intensity = (coefficient_k * (return_period**coefficient_a)) / ( - (duration + coefficient_b) ** coefficient_c - ) - return intensity - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/reynolds_number.py b/physics/reynolds_number.py deleted file mode 100644 index c24a9e002855..000000000000 --- a/physics/reynolds_number.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Title : computing the Reynolds number to find - out the type of flow (laminar or turbulent) - -Reynolds number is a dimensionless quantity that is used to determine -the type of flow pattern as laminar or turbulent while flowing through a -pipe. Reynolds number is defined by the ratio of inertial forces to that of -viscous forces. - -R = Inertial Forces / Viscous Forces -R = (p * V * D)/μ - -where : -p = Density of fluid (in Kg/m^3) -D = Diameter of pipe through which fluid flows (in m) -V = Velocity of flow of the fluid (in m/s) -μ = Viscosity of the fluid (in Ns/m^2) - -If the Reynolds number calculated is high (greater than 2000), then the -flow through the pipe is said to be turbulent. If Reynolds number is low -(less than 2000), the flow is said to be laminar. Numerically, these are -acceptable values, although in general the laminar and turbulent flows -are classified according to a range. Laminar flow falls below Reynolds -number of 1100 and turbulent falls in a range greater than 2200. -Laminar flow is the type of flow in which the fluid travels smoothly in -regular paths. Conversely, turbulent flow isn't smooth and follows an -irregular path with lots of mixing. - -Reference : https://byjus.com/physics/reynolds-number/ -""" - - -def reynolds_number( - density: float, velocity: float, diameter: float, viscosity: float -) -> float: - """ - >>> reynolds_number(900, 2.5, 0.05, 0.4) - 281.25 - >>> reynolds_number(450, 3.86, 0.078, 0.23) - 589.0695652173912 - >>> reynolds_number(234, -4.5, 0.3, 0.44) - 717.9545454545454 - >>> reynolds_number(-90, 2, 0.045, 1) - Traceback (most recent call last): - ... - ValueError: please ensure that density, diameter and viscosity are positive - >>> reynolds_number(0, 2, -0.4, -2) - Traceback (most recent call last): - ... - ValueError: please ensure that density, diameter and viscosity are positive - """ - - if density <= 0 or diameter <= 0 or viscosity <= 0: - raise ValueError( - "please ensure that density, diameter and viscosity are positive" - ) - return (density * abs(velocity) * diameter) / viscosity - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/rms_speed_of_molecule.py b/physics/rms_speed_of_molecule.py deleted file mode 100644 index fb23eb8a21cf..000000000000 --- a/physics/rms_speed_of_molecule.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -The root-mean-square speed is essential in measuring the average speed of particles -contained in a gas, defined as, - ----------------- - | Vrms = √3RT/M | - ----------------- - -In Kinetic Molecular Theory, gasified particles are in a condition of constant random -motion; each particle moves at a completely different pace, perpetually clashing and -changing directions consistently velocity is used to describe the movement of gas -particles, thereby taking into account both speed and direction. Although the velocity -of gaseous particles is constantly changing, the distribution of velocities does not -change. -We cannot gauge the velocity of every individual particle, thus we frequently reason -in terms of the particles average behavior. Particles moving in opposite directions -have velocities of opposite signs. Since gas particles are in random motion, it's -plausible that there'll be about as several moving in one direction as within the other -way, which means that the average velocity for a collection of gas particles equals -zero; as this value is unhelpful, the average of velocities can be determined using an -alternative method. -""" - -UNIVERSAL_GAS_CONSTANT = 8.3144598 - - -def rms_speed_of_molecule(temperature: float, molar_mass: float) -> float: - """ - >>> rms_speed_of_molecule(100, 2) - 35.315279554323226 - >>> rms_speed_of_molecule(273, 12) - 23.821458421977443 - """ - if temperature < 0: - raise Exception("Temperature cannot be less than 0 K") - if molar_mass <= 0: - raise Exception("Molar mass cannot be less than or equal to 0 kg/mol") - else: - return (3 * UNIVERSAL_GAS_CONSTANT * temperature / molar_mass) ** 0.5 - - -if __name__ == "__main__": - import doctest - - # run doctest - doctest.testmod() - - # example - temperature = 300 - molar_mass = 28 - vrms = rms_speed_of_molecule(temperature, molar_mass) - print(f"Vrms of Nitrogen gas at 300 K is {vrms} m/s") diff --git a/physics/shear_stress.py b/physics/shear_stress.py deleted file mode 100644 index 129148943893..000000000000 --- a/physics/shear_stress.py +++ /dev/null @@ -1,59 +0,0 @@ -from __future__ import annotations - -""" -Shear stress is a component of stress that is coplanar to the material cross-section. -It arises due to a shear force, the component of the force vector parallel to the -material cross-section. - -https://en.wikipedia.org/wiki/Shear_stress -""" - - -def shear_stress( - stress: float, - tangential_force: float, - area: float, -) -> tuple[str, float]: - """ - This function can calculate any one of the three - - 1. Shear Stress - 2. Tangential Force - 3. Cross-sectional Area - This is calculated from the other two provided values - Examples - - >>> shear_stress(stress=25, tangential_force=100, area=0) - ('area', 4.0) - >>> shear_stress(stress=0, tangential_force=1600, area=200) - ('stress', 8.0) - >>> shear_stress(stress=1000, tangential_force=0, area=1200) - ('tangential_force', 1200000) - """ - if (stress, tangential_force, area).count(0) != 1: - raise ValueError("You cannot supply more or less than 2 values") - elif stress < 0: - raise ValueError("Stress cannot be negative") - elif tangential_force < 0: - raise ValueError("Tangential Force cannot be negative") - elif area < 0: - raise ValueError("Area cannot be negative") - elif stress == 0: - return ( - "stress", - tangential_force / area, - ) - elif tangential_force == 0: - return ( - "tangential_force", - stress * area, - ) - else: - return ( - "area", - tangential_force / stress, - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/speed_of_sound.py b/physics/speed_of_sound.py deleted file mode 100644 index 3fa952cdb411..000000000000 --- a/physics/speed_of_sound.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Title : Calculating the speed of sound - -Description : - The speed of sound (c) is the speed that a sound wave travels per unit time (m/s). - During propagation, the sound wave propagates through an elastic medium. - - Sound propagates as longitudinal waves in liquids and gases and as transverse waves - in solids. This file calculates the speed of sound in a fluid based on its bulk - module and density. - - Equation for the speed of sound in a fluid: - c_fluid = sqrt(K_s / p) - - c_fluid: speed of sound in fluid - K_s: isentropic bulk modulus - p: density of fluid - -Source : https://en.wikipedia.org/wiki/Speed_of_sound -""" - - -def speed_of_sound_in_a_fluid(density: float, bulk_modulus: float) -> float: - """ - Calculates the speed of sound in a fluid from its density and bulk modulus - - Examples: - Example 1 --> Water 20°C: bulk_modulus= 2.15MPa, density=998kg/m³ - Example 2 --> Mercury 20°C: bulk_modulus= 28.5MPa, density=13600kg/m³ - - >>> speed_of_sound_in_a_fluid(bulk_modulus=2.15e9, density=998) - 1467.7563207952705 - >>> speed_of_sound_in_a_fluid(bulk_modulus=28.5e9, density=13600) - 1447.614670861731 - """ - - if density <= 0: - raise ValueError("Impossible fluid density") - if bulk_modulus <= 0: - raise ValueError("Impossible bulk modulus") - - return (bulk_modulus / density) ** 0.5 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/speeds_of_gas_molecules.py b/physics/speeds_of_gas_molecules.py deleted file mode 100644 index a50d1c0f6d76..000000000000 --- a/physics/speeds_of_gas_molecules.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -The root-mean-square, average and most probable speeds of gas molecules are -derived from the Maxwell-Boltzmann distribution. The Maxwell-Boltzmann -distribution is a probability distribution that describes the distribution of -speeds of particles in an ideal gas. - -The distribution is given by the following equation: - - ------------------------------------------------- - | f(v) = (M/2πRT)^(3/2) * 4πv^2 * e^(-Mv^2/2RT) | - ------------------------------------------------- - -where: - f(v) is the fraction of molecules with a speed v - M is the molar mass of the gas in kg/mol - R is the gas constant - T is the absolute temperature - -More information about the Maxwell-Boltzmann distribution can be found here: -https://en.wikipedia.org/wiki/Maxwell%E2%80%93Boltzmann_distribution - -The average speed can be calculated by integrating the Maxwell-Boltzmann distribution -from 0 to infinity and dividing by the total number of molecules. The result is: - - --------------------- - | vavg = √(8RT/πM) | - --------------------- - -The most probable speed is the speed at which the Maxwell-Boltzmann distribution -is at its maximum. This can be found by differentiating the Maxwell-Boltzmann -distribution with respect to v and setting the result equal to zero. The result is: - - --------------------- - | vmp = √(2RT/M) | - --------------------- - -The root-mean-square speed is another measure of the average speed -of the molecules in a gas. It is calculated by taking the square root -of the average of the squares of the speeds of the molecules. The result is: - - --------------------- - | vrms = √(3RT/M) | - --------------------- - -Here we have defined functions to calculate the average and -most probable speeds of molecules in a gas given the -temperature and molar mass of the gas. -""" - -# import the constants R and pi from the scipy.constants library -from scipy.constants import R, pi - - -def avg_speed_of_molecule(temperature: float, molar_mass: float) -> float: - """ - Takes the temperature (in K) and molar mass (in kg/mol) of a gas - and returns the average speed of a molecule in the gas (in m/s). - - Examples: - >>> avg_speed_of_molecule(273, 0.028) # nitrogen at 273 K - 454.3488755020387 - >>> avg_speed_of_molecule(300, 0.032) # oxygen at 300 K - 445.52572733919885 - >>> avg_speed_of_molecule(-273, 0.028) # invalid temperature - Traceback (most recent call last): - ... - Exception: Absolute temperature cannot be less than 0 K - >>> avg_speed_of_molecule(273, 0) # invalid molar mass - Traceback (most recent call last): - ... - Exception: Molar mass should be greater than 0 kg/mol - """ - - if temperature < 0: - raise Exception("Absolute temperature cannot be less than 0 K") - if molar_mass <= 0: - raise Exception("Molar mass should be greater than 0 kg/mol") - return (8 * R * temperature / (pi * molar_mass)) ** 0.5 - - -def mps_speed_of_molecule(temperature: float, molar_mass: float) -> float: - """ - Takes the temperature (in K) and molar mass (in kg/mol) of a gas - and returns the most probable speed of a molecule in the gas (in m/s). - - Examples: - >>> mps_speed_of_molecule(273, 0.028) # nitrogen at 273 K - 402.65620701908966 - >>> mps_speed_of_molecule(300, 0.032) # oxygen at 300 K - 394.836895549922 - >>> mps_speed_of_molecule(-273, 0.028) # invalid temperature - Traceback (most recent call last): - ... - Exception: Absolute temperature cannot be less than 0 K - >>> mps_speed_of_molecule(273, 0) # invalid molar mass - Traceback (most recent call last): - ... - Exception: Molar mass should be greater than 0 kg/mol - """ - - if temperature < 0: - raise Exception("Absolute temperature cannot be less than 0 K") - if molar_mass <= 0: - raise Exception("Molar mass should be greater than 0 kg/mol") - return (2 * R * temperature / molar_mass) ** 0.5 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/physics/terminal_velocity.py b/physics/terminal_velocity.py deleted file mode 100644 index 16714bd02671..000000000000 --- a/physics/terminal_velocity.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Title : Computing the terminal velocity of an object falling - through a fluid. - -Terminal velocity is defined as the highest velocity attained by an -object falling through a fluid. It is observed when the sum of drag force -and buoyancy is equal to the downward gravity force acting on the -object. The acceleration of the object is zero as the net force acting on -the object is zero. - -Vt = ((2 * m * g)/(p * A * Cd))^0.5 - -where : -Vt = Terminal velocity (in m/s) -m = Mass of the falling object (in Kg) -g = Acceleration due to gravity (value taken : imported from scipy) -p = Density of the fluid through which the object is falling (in Kg/m^3) -A = Projected area of the object (in m^2) -Cd = Drag coefficient (dimensionless) - -Reference : https://byjus.com/physics/derivation-of-terminal-velocity/ -""" - -from scipy.constants import g - - -def terminal_velocity( - mass: float, density: float, area: float, drag_coefficient: float -) -> float: - """ - >>> terminal_velocity(1, 25, 0.6, 0.77) - 1.3031197996044768 - >>> terminal_velocity(2, 100, 0.45, 0.23) - 1.9467947148674276 - >>> terminal_velocity(5, 50, 0.2, 0.5) - 4.428690551393267 - >>> terminal_velocity(-5, 50, -0.2, -2) - Traceback (most recent call last): - ... - ValueError: mass, density, area and the drag coefficient all need to be positive - >>> terminal_velocity(3, -20, -1, 2) - Traceback (most recent call last): - ... - ValueError: mass, density, area and the drag coefficient all need to be positive - >>> terminal_velocity(-2, -1, -0.44, -1) - Traceback (most recent call last): - ... - ValueError: mass, density, area and the drag coefficient all need to be positive - """ - if mass <= 0 or density <= 0 or area <= 0 or drag_coefficient <= 0: - raise ValueError( - "mass, density, area and the drag coefficient all need to be positive" - ) - return ((2 * mass * g) / (density * area * drag_coefficient)) ** 0.5 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/project_euler/README.md b/project_euler/README.md deleted file mode 100644 index 16865edf2a67..000000000000 --- a/project_euler/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# Project Euler - -Problems are taken from https://projecteuler.net/, the Project Euler. [Problems are licensed under CC BY-NC-SA 4.0](https://projecteuler.net/copyright). - -Project Euler is a series of challenging mathematical/computer programming problems that require more than just mathematical -insights to solve. Project Euler is ideal for mathematicians who are learning to code. - -The solutions will be checked by our [automated testing on GitHub Actions](https://github.com/TheAlgorithms/Python/actions) with the help of [this script](https://github.com/TheAlgorithms/Python/blob/master/scripts/validate_solutions.py). The efficiency of your code is also checked. You can view the top 10 slowest solutions on GitHub Actions logs (under `slowest 10 durations`) and open a pull request to improve those solutions. - - -## Solution Guidelines - -Welcome to [TheAlgorithms/Python](https://github.com/TheAlgorithms/Python)! Before reading the solution guidelines, make sure you read the whole [Contributing Guidelines](https://github.com/TheAlgorithms/Python/blob/master/CONTRIBUTING.md) as it won't be repeated in here. If you have any doubt on the guidelines, please feel free to [state it clearly in an issue](https://github.com/TheAlgorithms/Python/issues/new) or ask the community in [Gitter](https://gitter.im/TheAlgorithms/community). You can use the [template](https://github.com/TheAlgorithms/Python/blob/master/project_euler/README.md#solution-template) we have provided below as your starting point but be sure to read the [Coding Style](https://github.com/TheAlgorithms/Python/blob/master/project_euler/README.md#coding-style) part first. - -### Coding Style - -* Please maintain consistency in project directory and solution file names. Keep the following points in mind: - * Create a new directory only for the problems which do not exist yet. - * If you create a new directory, please create an empty `__init__.py` file inside it as well. - * Please name the project **directory** as `problem_<problem_number>` where `problem_number` should be filled with 0s so as to occupy 3 digits. Example: `problem_001`, `problem_002`, `problem_067`, `problem_145`, and so on. - -* Please provide a link to the problem and other references, if used, in the **module-level docstring**. - -* All imports should come ***after*** the module-level docstring. - -* You can have as many helper functions as you want but there should be one main function called `solution` which should satisfy the conditions as stated below: - * It should contain positional argument(s) whose default value is the question input. Example: Please take a look at [Problem 1](https://projecteuler.net/problem=1) where the question is to *Find the sum of all the multiples of 3 or 5 below 1000.* In this case the main solution function will be `solution(limit: int = 1000)`. - * When the `solution` function is called without any arguments like so: `solution()`, it should return the answer to the problem. - -* Every function, which includes all the helper functions, if any, and the main solution function, should have `doctest` in the function docstring along with a brief statement mentioning what the function is about. - * There should not be a `doctest` for testing the answer as that is done by our GitHub Actions build using this [script](https://github.com/TheAlgorithms/Python/blob/master/scripts/validate_solutions.py). Keeping in mind the above example of [Problem 1](https://projecteuler.net/problem=1): - - ```python - def solution(limit: int = 1000): - """ - A brief statement mentioning what the function is about. - - You can have a detailed explanation about the solution method in the - module-level docstring. - - >>> solution(1) - ... - >>> solution(16) - ... - >>> solution(100) - ... - """ - ``` - -### Solution Template - -You can use the below template as your starting point but please read the [Coding Style](https://github.com/TheAlgorithms/Python/blob/master/project_euler/README.md#coding-style) first to understand how the template works. - -Please change the name of the helper functions accordingly, change the parameter names with a descriptive one, replace the content within `[square brackets]` (including the brackets) with the appropriate content. - -```python -""" -Project Euler Problem [problem number]: [link to the original problem] - -... [Entire problem statement] ... - -... [Solution explanation - Optional] ... - -References [Optional]: -- [Wikipedia link to the topic] -- [Stackoverflow link] -... - -""" -import module1 -import module2 -... - -def helper1(arg1: [type hint], arg2: [type hint], ...) -> [Return type hint]: - """ - A brief statement explaining what the function is about. - - ... A more elaborate description ... [Optional] - - ... - [Doctest] - ... - - """ - ... - # calculations - ... - - return - - -# You can have multiple helper functions but the solution function should be -# after all the helper functions ... - - -def solution(arg1: [type hint], arg2: [type hint], ...) -> [Return type hint]: - """ - A brief statement mentioning what the function is about. - - You can have a detailed explanation about the solution in the - module-level docstring. - - ... - [Doctest as mentioned above] - ... - - """ - - ... - # calculations - ... - - return answer - - -if __name__ == "__main__": - print(f"{solution() = }") -``` diff --git a/project_euler/__init__.py b/project_euler/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_001/__init__.py b/project_euler/problem_001/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_001/sol1.py b/project_euler/problem_001/sol1.py deleted file mode 100644 index fcc24c86ec54..000000000000 --- a/project_euler/problem_001/sol1.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - Returns the sum of all the multiples of 3 or 5 below n. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - >>> solution(-7) - 0 - """ - - return sum(e for e in range(3, n) if e % 3 == 0 or e % 5 == 0) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_001/sol2.py b/project_euler/problem_001/sol2.py deleted file mode 100644 index 7093d3513378..000000000000 --- a/project_euler/problem_001/sol2.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - Returns the sum of all the multiples of 3 or 5 below n. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - """ - - total = 0 - terms = (n - 1) // 3 - total += ((terms) * (6 + (terms - 1) * 3)) // 2 # total of an A.P. - terms = (n - 1) // 5 - total += ((terms) * (10 + (terms - 1) * 5)) // 2 - terms = (n - 1) // 15 - total -= ((terms) * (30 + (terms - 1) * 15)) // 2 - return total - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_001/sol3.py b/project_euler/problem_001/sol3.py deleted file mode 100644 index 8267fec84155..000000000000 --- a/project_euler/problem_001/sol3.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - This solution is based on the pattern that the successive numbers in the - series follow: 0+3,+2,+1,+3,+1,+2,+3. - Returns the sum of all the multiples of 3 or 5 below n. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - """ - - total = 0 - num = 0 - while 1: - num += 3 - if num >= n: - break - total += num - num += 2 - if num >= n: - break - total += num - num += 1 - if num >= n: - break - total += num - num += 3 - if num >= n: - break - total += num - num += 1 - if num >= n: - break - total += num - num += 2 - if num >= n: - break - total += num - num += 3 - if num >= n: - break - total += num - return total - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_001/sol4.py b/project_euler/problem_001/sol4.py deleted file mode 100644 index a0643c05b34f..000000000000 --- a/project_euler/problem_001/sol4.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - Returns the sum of all the multiples of 3 or 5 below n. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - """ - - xmulti = [] - zmulti = [] - z = 3 - x = 5 - temp = 1 - while True: - result = z * temp - if result < n: - zmulti.append(result) - temp += 1 - else: - temp = 1 - break - while True: - result = x * temp - if result < n: - xmulti.append(result) - temp += 1 - else: - break - collection = list(set(xmulti + zmulti)) - return sum(collection) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_001/sol5.py b/project_euler/problem_001/sol5.py deleted file mode 100644 index 3edc6f245a67..000000000000 --- a/project_euler/problem_001/sol5.py +++ /dev/null @@ -1,32 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - Returns the sum of all the multiples of 3 or 5 below n. - A straightforward pythonic solution using list comprehension. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - """ - - return sum(i for i in range(n) if i % 3 == 0 or i % 5 == 0) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_001/sol6.py b/project_euler/problem_001/sol6.py deleted file mode 100644 index 8ddce18ced04..000000000000 --- a/project_euler/problem_001/sol6.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - Returns the sum of all the multiples of 3 or 5 below n. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - """ - - a = 3 - result = 0 - while a < n: - if a % 3 == 0 or a % 5 == 0: - result += a - elif a % 15 == 0: - result -= a - a += 1 - return result - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_001/sol7.py b/project_euler/problem_001/sol7.py deleted file mode 100644 index 6ada70c12dbd..000000000000 --- a/project_euler/problem_001/sol7.py +++ /dev/null @@ -1,35 +0,0 @@ -""" -Project Euler Problem 1: https://projecteuler.net/problem=1 - -Multiples of 3 and 5 - -If we list all the natural numbers below 10 that are multiples of 3 or 5, -we get 3, 5, 6 and 9. The sum of these multiples is 23. - -Find the sum of all the multiples of 3 or 5 below 1000. -""" - - -def solution(n: int = 1000) -> int: - """ - Returns the sum of all the multiples of 3 or 5 below n. - - >>> solution(3) - 0 - >>> solution(4) - 3 - >>> solution(10) - 23 - >>> solution(600) - 83700 - """ - - result = 0 - for i in range(n): - if i % 3 == 0 or i % 5 == 0: - result += i - return result - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_002/__init__.py b/project_euler/problem_002/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_002/sol1.py b/project_euler/problem_002/sol1.py deleted file mode 100644 index 539f68fb6bc1..000000000000 --- a/project_euler/problem_002/sol1.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Project Euler Problem 2: https://projecteuler.net/problem=2 - -Even Fibonacci Numbers - -Each new term in the Fibonacci sequence is generated by adding the previous -two terms. By starting with 1 and 2, the first 10 terms will be: - -1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - -By considering the terms in the Fibonacci sequence whose values do not exceed -four million, find the sum of the even-valued terms. - -References: - - https://en.wikipedia.org/wiki/Fibonacci_number -""" - - -def solution(n: int = 4000000) -> int: - """ - Returns the sum of all even fibonacci sequence elements that are lower - or equal to n. - - >>> solution(10) - 10 - >>> solution(15) - 10 - >>> solution(2) - 2 - >>> solution(1) - 0 - >>> solution(34) - 44 - """ - - i = 1 - j = 2 - total = 0 - while j <= n: - if j % 2 == 0: - total += j - i, j = j, i + j - - return total - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_002/sol2.py b/project_euler/problem_002/sol2.py deleted file mode 100644 index 9033d0a69bcf..000000000000 --- a/project_euler/problem_002/sol2.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Project Euler Problem 2: https://projecteuler.net/problem=2 - -Even Fibonacci Numbers - -Each new term in the Fibonacci sequence is generated by adding the previous -two terms. By starting with 1 and 2, the first 10 terms will be: - -1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - -By considering the terms in the Fibonacci sequence whose values do not exceed -four million, find the sum of the even-valued terms. - -References: - - https://en.wikipedia.org/wiki/Fibonacci_number -""" - - -def solution(n: int = 4000000) -> int: - """ - Returns the sum of all even fibonacci sequence elements that are lower - or equal to n. - - >>> solution(10) - 10 - >>> solution(15) - 10 - >>> solution(2) - 2 - >>> solution(1) - 0 - >>> solution(34) - 44 - """ - - even_fibs = [] - a, b = 0, 1 - while b <= n: - if b % 2 == 0: - even_fibs.append(b) - a, b = b, a + b - return sum(even_fibs) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_002/sol3.py b/project_euler/problem_002/sol3.py deleted file mode 100644 index 3ae175a99815..000000000000 --- a/project_euler/problem_002/sol3.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Project Euler Problem 2: https://projecteuler.net/problem=2 - -Even Fibonacci Numbers - -Each new term in the Fibonacci sequence is generated by adding the previous -two terms. By starting with 1 and 2, the first 10 terms will be: - -1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - -By considering the terms in the Fibonacci sequence whose values do not exceed -four million, find the sum of the even-valued terms. - -References: - - https://en.wikipedia.org/wiki/Fibonacci_number -""" - - -def solution(n: int = 4000000) -> int: - """ - Returns the sum of all even fibonacci sequence elements that are lower - or equal to n. - - >>> solution(10) - 10 - >>> solution(15) - 10 - >>> solution(2) - 2 - >>> solution(1) - 0 - >>> solution(34) - 44 - """ - - if n <= 1: - return 0 - a = 0 - b = 2 - count = 0 - while 4 * b + a <= n: - a, b = b, 4 * b + a - count += a - return count + b - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_002/sol4.py b/project_euler/problem_002/sol4.py deleted file mode 100644 index 3a2e4fce341c..000000000000 --- a/project_euler/problem_002/sol4.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -Project Euler Problem 2: https://projecteuler.net/problem=2 - -Even Fibonacci Numbers - -Each new term in the Fibonacci sequence is generated by adding the previous -two terms. By starting with 1 and 2, the first 10 terms will be: - -1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - -By considering the terms in the Fibonacci sequence whose values do not exceed -four million, find the sum of the even-valued terms. - -References: - - https://en.wikipedia.org/wiki/Fibonacci_number -""" - -import math -from decimal import Decimal, getcontext - - -def solution(n: int = 4000000) -> int: - """ - Returns the sum of all even fibonacci sequence elements that are lower - or equal to n. - - >>> solution(10) - 10 - >>> solution(15) - 10 - >>> solution(2) - 2 - >>> solution(1) - 0 - >>> solution(34) - 44 - >>> solution(3.4) - 2 - >>> solution(0) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution(-17) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution([]) - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - >>> solution("asd") - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - """ - - try: - n = int(n) - except (TypeError, ValueError): - raise TypeError("Parameter n must be int or castable to int.") - if n <= 0: - raise ValueError("Parameter n must be greater than or equal to one.") - getcontext().prec = 100 - phi = (Decimal(5) ** Decimal(0.5) + 1) / Decimal(2) - - index = (math.floor(math.log(n * (phi + 2), phi) - 1) // 3) * 3 + 2 - num = Decimal(round(phi ** Decimal(index + 1))) / (phi + 2) - total = num // 2 - return int(total) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_002/sol5.py b/project_euler/problem_002/sol5.py deleted file mode 100644 index 390fd19ef638..000000000000 --- a/project_euler/problem_002/sol5.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Project Euler Problem 2: https://projecteuler.net/problem=2 - -Even Fibonacci Numbers - -Each new term in the Fibonacci sequence is generated by adding the previous -two terms. By starting with 1 and 2, the first 10 terms will be: - -1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - -By considering the terms in the Fibonacci sequence whose values do not exceed -four million, find the sum of the even-valued terms. - -References: - - https://en.wikipedia.org/wiki/Fibonacci_number -""" - - -def solution(n: int = 4000000) -> int: - """ - Returns the sum of all even fibonacci sequence elements that are lower - or equal to n. - - >>> solution(10) - 10 - >>> solution(15) - 10 - >>> solution(2) - 2 - >>> solution(1) - 0 - >>> solution(34) - 44 - """ - - fib = [0, 1] - i = 0 - while fib[i] <= n: - fib.append(fib[i] + fib[i + 1]) - if fib[i + 2] > n: - break - i += 1 - total = 0 - for j in range(len(fib) - 1): - if fib[j] % 2 == 0: - total += fib[j] - - return total - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_003/__init__.py b/project_euler/problem_003/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_003/sol1.py b/project_euler/problem_003/sol1.py deleted file mode 100644 index d1c0e61cf1a6..000000000000 --- a/project_euler/problem_003/sol1.py +++ /dev/null @@ -1,105 +0,0 @@ -""" -Project Euler Problem 3: https://projecteuler.net/problem=3 - -Largest prime factor - -The prime factors of 13195 are 5, 7, 13 and 29. - -What is the largest prime factor of the number 600851475143? - -References: - - https://en.wikipedia.org/wiki/Prime_number#Unique_factorization -""" - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(n: int = 600851475143) -> int: - """ - Returns the largest prime factor of a given number n. - - >>> solution(13195) - 29 - >>> solution(10) - 5 - >>> solution(17) - 17 - >>> solution(3.4) - 3 - >>> solution(0) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution(-17) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution([]) - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - >>> solution("asd") - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - """ - - try: - n = int(n) - except (TypeError, ValueError): - raise TypeError("Parameter n must be int or castable to int.") - if n <= 0: - raise ValueError("Parameter n must be greater than or equal to one.") - max_number = 0 - if is_prime(n): - return n - while n % 2 == 0: - n //= 2 - if is_prime(n): - return n - for i in range(3, int(math.sqrt(n)) + 1, 2): - if n % i == 0: - if is_prime(n // i): - max_number = n // i - break - elif is_prime(i): - max_number = i - return max_number - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_003/sol2.py b/project_euler/problem_003/sol2.py deleted file mode 100644 index 0af0daceed06..000000000000 --- a/project_euler/problem_003/sol2.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -Project Euler Problem 3: https://projecteuler.net/problem=3 - -Largest prime factor - -The prime factors of 13195 are 5, 7, 13 and 29. - -What is the largest prime factor of the number 600851475143? - -References: - - https://en.wikipedia.org/wiki/Prime_number#Unique_factorization -""" - - -def solution(n: int = 600851475143) -> int: - """ - Returns the largest prime factor of a given number n. - - >>> solution(13195) - 29 - >>> solution(10) - 5 - >>> solution(17) - 17 - >>> solution(3.4) - 3 - >>> solution(0) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution(-17) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution([]) - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - >>> solution("asd") - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - """ - - try: - n = int(n) - except (TypeError, ValueError): - raise TypeError("Parameter n must be int or castable to int.") - if n <= 0: - raise ValueError("Parameter n must be greater than or equal to one.") - prime = 1 - i = 2 - while i * i <= n: - while n % i == 0: - prime = i - n //= i - i += 1 - if n > 1: - prime = n - return int(prime) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_003/sol3.py b/project_euler/problem_003/sol3.py deleted file mode 100644 index e13a0eb74ec1..000000000000 --- a/project_euler/problem_003/sol3.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Project Euler Problem 3: https://projecteuler.net/problem=3 - -Largest prime factor - -The prime factors of 13195 are 5, 7, 13 and 29. - -What is the largest prime factor of the number 600851475143? - -References: - - https://en.wikipedia.org/wiki/Prime_number#Unique_factorization -""" - - -def solution(n: int = 600851475143) -> int: - """ - Returns the largest prime factor of a given number n. - - >>> solution(13195) - 29 - >>> solution(10) - 5 - >>> solution(17) - 17 - >>> solution(3.4) - 3 - >>> solution(0) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution(-17) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution([]) - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - >>> solution("asd") - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - """ - - try: - n = int(n) - except (TypeError, ValueError): - raise TypeError("Parameter n must be int or castable to int.") - if n <= 0: - raise ValueError("Parameter n must be greater than or equal to one.") - i = 2 - ans = 0 - if n == 2: - return 2 - while n > 2: - while n % i != 0: - i += 1 - ans = i - while n % i == 0: - n = n // i - i += 1 - return int(ans) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_004/__init__.py b/project_euler/problem_004/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_004/sol1.py b/project_euler/problem_004/sol1.py deleted file mode 100644 index f80a3253e741..000000000000 --- a/project_euler/problem_004/sol1.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -Project Euler Problem 4: https://projecteuler.net/problem=4 - -Largest palindrome product - -A palindromic number reads the same both ways. The largest palindrome made -from the product of two 2-digit numbers is 9009 = 91 x 99. - -Find the largest palindrome made from the product of two 3-digit numbers. - -References: - - https://en.wikipedia.org/wiki/Palindromic_number -""" - - -def solution(n: int = 998001) -> int: - """ - Returns the largest palindrome made from the product of two 3-digit - numbers which is less than n. - - >>> solution(20000) - 19591 - >>> solution(30000) - 29992 - >>> solution(40000) - 39893 - >>> solution(10000) - Traceback (most recent call last): - ... - ValueError: That number is larger than our acceptable range. - """ - - # fetches the next number - for number in range(n - 1, 9999, -1): - str_number = str(number) - - # checks whether 'str_number' is a palindrome. - if str_number == str_number[::-1]: - divisor = 999 - - # if 'number' is a product of two 3-digit numbers - # then number is the answer otherwise fetch next number. - while divisor != 99: - if (number % divisor == 0) and (len(str(number // divisor)) == 3.0): - return number - divisor -= 1 - raise ValueError("That number is larger than our acceptable range.") - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_004/sol2.py b/project_euler/problem_004/sol2.py deleted file mode 100644 index 1fa75e7d0c83..000000000000 --- a/project_euler/problem_004/sol2.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Project Euler Problem 4: https://projecteuler.net/problem=4 - -Largest palindrome product - -A palindromic number reads the same both ways. The largest palindrome made -from the product of two 2-digit numbers is 9009 = 91 x 99. - -Find the largest palindrome made from the product of two 3-digit numbers. - -References: - - https://en.wikipedia.org/wiki/Palindromic_number -""" - - -def solution(n: int = 998001) -> int: - """ - Returns the largest palindrome made from the product of two 3-digit - numbers which is less than n. - - >>> solution(20000) - 19591 - >>> solution(30000) - 29992 - >>> solution(40000) - 39893 - """ - - answer = 0 - for i in range(999, 99, -1): # 3 digit numbers range from 999 down to 100 - for j in range(999, 99, -1): - product_string = str(i * j) - if product_string == product_string[::-1] and i * j < n: - answer = max(answer, i * j) - return answer - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_005/__init__.py b/project_euler/problem_005/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_005/sol1.py b/project_euler/problem_005/sol1.py deleted file mode 100644 index 01cbd0e15ff7..000000000000 --- a/project_euler/problem_005/sol1.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -Project Euler Problem 5: https://projecteuler.net/problem=5 - -Smallest multiple - -2520 is the smallest number that can be divided by each of the numbers -from 1 to 10 without any remainder. - -What is the smallest positive number that is _evenly divisible_ by all -of the numbers from 1 to 20? - -References: - - https://en.wiktionary.org/wiki/evenly_divisible -""" - - -def solution(n: int = 20) -> int: - """ - Returns the smallest positive number that is evenly divisible (divisible - with no remainder) by all of the numbers from 1 to n. - - >>> solution(10) - 2520 - >>> solution(15) - 360360 - >>> solution(22) - 232792560 - >>> solution(3.4) - 6 - >>> solution(0) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution(-17) - Traceback (most recent call last): - ... - ValueError: Parameter n must be greater than or equal to one. - >>> solution([]) - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - >>> solution("asd") - Traceback (most recent call last): - ... - TypeError: Parameter n must be int or castable to int. - """ - - try: - n = int(n) - except (TypeError, ValueError): - raise TypeError("Parameter n must be int or castable to int.") - if n <= 0: - raise ValueError("Parameter n must be greater than or equal to one.") - i = 0 - while 1: - i += n * (n - 1) - nfound = 0 - for j in range(2, n): - if i % j != 0: - nfound = 1 - break - if nfound == 0: - if i == 0: - i = 1 - return i - return None - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_005/sol2.py b/project_euler/problem_005/sol2.py deleted file mode 100644 index 4558e21fd0f0..000000000000 --- a/project_euler/problem_005/sol2.py +++ /dev/null @@ -1,60 +0,0 @@ -from maths.greatest_common_divisor import greatest_common_divisor - -""" -Project Euler Problem 5: https://projecteuler.net/problem=5 - -Smallest multiple - -2520 is the smallest number that can be divided by each of the numbers -from 1 to 10 without any remainder. - -What is the smallest positive number that is _evenly divisible_ by all -of the numbers from 1 to 20? - -References: - - https://en.wiktionary.org/wiki/evenly_divisible - - https://en.wikipedia.org/wiki/Euclidean_algorithm - - https://en.wikipedia.org/wiki/Least_common_multiple -""" - - -def lcm(x: int, y: int) -> int: - """ - Least Common Multiple. - - Using the property that lcm(a, b) * greatest_common_divisor(a, b) = a*b - - >>> lcm(3, 15) - 15 - >>> lcm(1, 27) - 27 - >>> lcm(13, 27) - 351 - >>> lcm(64, 48) - 192 - """ - - return (x * y) // greatest_common_divisor(x, y) - - -def solution(n: int = 20) -> int: - """ - Returns the smallest positive number that is evenly divisible (divisible - with no remainder) by all of the numbers from 1 to n. - - >>> solution(10) - 2520 - >>> solution(15) - 360360 - >>> solution(22) - 232792560 - """ - - g = 1 - for i in range(1, n + 1): - g = lcm(g, i) - return g - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_006/__init__.py b/project_euler/problem_006/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_006/sol1.py b/project_euler/problem_006/sol1.py deleted file mode 100644 index 615991bb172c..000000000000 --- a/project_euler/problem_006/sol1.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -Project Euler Problem 6: https://projecteuler.net/problem=6 - -Sum square difference - -The sum of the squares of the first ten natural numbers is, - 1^2 + 2^2 + ... + 10^2 = 385 - -The square of the sum of the first ten natural numbers is, - (1 + 2 + ... + 10)^2 = 55^2 = 3025 - -Hence the difference between the sum of the squares of the first ten -natural numbers and the square of the sum is 3025 - 385 = 2640. - -Find the difference between the sum of the squares of the first one -hundred natural numbers and the square of the sum. -""" - - -def solution(n: int = 100) -> int: - """ - Returns the difference between the sum of the squares of the first n - natural numbers and the square of the sum. - - >>> solution(10) - 2640 - >>> solution(15) - 13160 - >>> solution(20) - 41230 - >>> solution(50) - 1582700 - """ - - sum_of_squares = 0 - sum_of_ints = 0 - for i in range(1, n + 1): - sum_of_squares += i**2 - sum_of_ints += i - return sum_of_ints**2 - sum_of_squares - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_006/sol2.py b/project_euler/problem_006/sol2.py deleted file mode 100644 index cd1bc5071e0e..000000000000 --- a/project_euler/problem_006/sol2.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Project Euler Problem 6: https://projecteuler.net/problem=6 - -Sum square difference - -The sum of the squares of the first ten natural numbers is, - 1^2 + 2^2 + ... + 10^2 = 385 - -The square of the sum of the first ten natural numbers is, - (1 + 2 + ... + 10)^2 = 55^2 = 3025 - -Hence the difference between the sum of the squares of the first ten -natural numbers and the square of the sum is 3025 - 385 = 2640. - -Find the difference between the sum of the squares of the first one -hundred natural numbers and the square of the sum. -""" - - -def solution(n: int = 100) -> int: - """ - Returns the difference between the sum of the squares of the first n - natural numbers and the square of the sum. - - >>> solution(10) - 2640 - >>> solution(15) - 13160 - >>> solution(20) - 41230 - >>> solution(50) - 1582700 - """ - - sum_cubes = (n * (n + 1) // 2) ** 2 - sum_squares = n * (n + 1) * (2 * n + 1) // 6 - return sum_cubes - sum_squares - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_006/sol3.py b/project_euler/problem_006/sol3.py deleted file mode 100644 index 16445258c2b7..000000000000 --- a/project_euler/problem_006/sol3.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Project Euler Problem 6: https://projecteuler.net/problem=6 - -Sum square difference - -The sum of the squares of the first ten natural numbers is, - 1^2 + 2^2 + ... + 10^2 = 385 - -The square of the sum of the first ten natural numbers is, - (1 + 2 + ... + 10)^2 = 55^2 = 3025 - -Hence the difference between the sum of the squares of the first ten -natural numbers and the square of the sum is 3025 - 385 = 2640. - -Find the difference between the sum of the squares of the first one -hundred natural numbers and the square of the sum. -""" - -import math - - -def solution(n: int = 100) -> int: - """ - Returns the difference between the sum of the squares of the first n - natural numbers and the square of the sum. - - >>> solution(10) - 2640 - >>> solution(15) - 13160 - >>> solution(20) - 41230 - >>> solution(50) - 1582700 - """ - - sum_of_squares = sum(i * i for i in range(1, n + 1)) - square_of_sum = int(math.pow(sum(range(1, n + 1)), 2)) - return square_of_sum - sum_of_squares - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_006/sol4.py b/project_euler/problem_006/sol4.py deleted file mode 100644 index 748b141490a0..000000000000 --- a/project_euler/problem_006/sol4.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Project Euler Problem 6: https://projecteuler.net/problem=6 - -Sum square difference - -The sum of the squares of the first ten natural numbers is, - 1^2 + 2^2 + ... + 10^2 = 385 - -The square of the sum of the first ten natural numbers is, - (1 + 2 + ... + 10)^2 = 55^2 = 3025 - -Hence the difference between the sum of the squares of the first ten -natural numbers and the square of the sum is 3025 - 385 = 2640. - -Find the difference between the sum of the squares of the first one -hundred natural numbers and the square of the sum. -""" - - -def solution(n: int = 100) -> int: - """ - Returns the difference between the sum of the squares of the first n - natural numbers and the square of the sum. - - >>> solution(10) - 2640 - >>> solution(15) - 13160 - >>> solution(20) - 41230 - >>> solution(50) - 1582700 - """ - - sum_of_squares = n * (n + 1) * (2 * n + 1) / 6 - square_of_sum = (n * (n + 1) / 2) ** 2 - return int(square_of_sum - sum_of_squares) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_007/__init__.py b/project_euler/problem_007/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_007/sol1.py b/project_euler/problem_007/sol1.py deleted file mode 100644 index f52ff931f9a8..000000000000 --- a/project_euler/problem_007/sol1.py +++ /dev/null @@ -1,84 +0,0 @@ -""" -Project Euler Problem 7: https://projecteuler.net/problem=7 - -10001st prime - -By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we -can see that the 6th prime is 13. - -What is the 10001st prime number? - -References: - - https://en.wikipedia.org/wiki/Prime_number -""" - -from math import sqrt - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(nth: int = 10001) -> int: - """ - Returns the n-th prime number. - - >>> solution(6) - 13 - >>> solution(1) - 2 - >>> solution(3) - 5 - >>> solution(20) - 71 - >>> solution(50) - 229 - >>> solution(100) - 541 - """ - - count = 0 - number = 1 - while count != nth and number < 3: - number += 1 - if is_prime(number): - count += 1 - while count != nth: - number += 2 - if is_prime(number): - count += 1 - return number - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_007/sol2.py b/project_euler/problem_007/sol2.py deleted file mode 100644 index fd99453c1100..000000000000 --- a/project_euler/problem_007/sol2.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Project Euler Problem 7: https://projecteuler.net/problem=7 - -10001st prime - -By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we -can see that the 6th prime is 13. - -What is the 10001st prime number? - -References: - - https://en.wikipedia.org/wiki/Prime_number -""" - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(nth: int = 10001) -> int: - """ - Returns the n-th prime number. - - >>> solution(6) - 13 - >>> solution(1) - 2 - >>> solution(3) - 5 - >>> solution(20) - 71 - >>> solution(50) - 229 - >>> solution(100) - 541 - >>> solution(3.4) - 5 - >>> solution(0) - Traceback (most recent call last): - ... - ValueError: Parameter nth must be greater than or equal to one. - >>> solution(-17) - Traceback (most recent call last): - ... - ValueError: Parameter nth must be greater than or equal to one. - >>> solution([]) - Traceback (most recent call last): - ... - TypeError: Parameter nth must be int or castable to int. - >>> solution("asd") - Traceback (most recent call last): - ... - TypeError: Parameter nth must be int or castable to int. - """ - - try: - nth = int(nth) - except (TypeError, ValueError): - raise TypeError("Parameter nth must be int or castable to int.") from None - if nth <= 0: - raise ValueError("Parameter nth must be greater than or equal to one.") - primes: list[int] = [] - num = 2 - while len(primes) < nth: - if is_prime(num): - primes.append(num) - num += 1 - else: - num += 1 - return primes[len(primes) - 1] - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_007/sol3.py b/project_euler/problem_007/sol3.py deleted file mode 100644 index 39db51a93427..000000000000 --- a/project_euler/problem_007/sol3.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Project Euler Problem 7: https://projecteuler.net/problem=7 - -10001st prime - -By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we -can see that the 6th prime is 13. - -What is the 10001st prime number? - -References: - - https://en.wikipedia.org/wiki/Prime_number -""" - -import itertools -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def prime_generator(): - """ - Generate a sequence of prime numbers - """ - - num = 2 - while True: - if is_prime(num): - yield num - num += 1 - - -def solution(nth: int = 10001) -> int: - """ - Returns the n-th prime number. - - >>> solution(6) - 13 - >>> solution(1) - 2 - >>> solution(3) - 5 - >>> solution(20) - 71 - >>> solution(50) - 229 - >>> solution(100) - 541 - """ - return next(itertools.islice(prime_generator(), nth - 1, nth)) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_008/__init__.py b/project_euler/problem_008/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_008/sol1.py b/project_euler/problem_008/sol1.py deleted file mode 100644 index a38b2045f996..000000000000 --- a/project_euler/problem_008/sol1.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Project Euler Problem 8: https://projecteuler.net/problem=8 - -Largest product in a series - -The four adjacent digits in the 1000-digit number that have the greatest -product are 9 x 9 x 8 x 9 = 5832. - - 73167176531330624919225119674426574742355349194934 - 96983520312774506326239578318016984801869478851843 - 85861560789112949495459501737958331952853208805511 - 12540698747158523863050715693290963295227443043557 - 66896648950445244523161731856403098711121722383113 - 62229893423380308135336276614282806444486645238749 - 30358907296290491560440772390713810515859307960866 - 70172427121883998797908792274921901699720888093776 - 65727333001053367881220235421809751254540594752243 - 52584907711670556013604839586446706324415722155397 - 53697817977846174064955149290862569321978468622482 - 83972241375657056057490261407972968652414535100474 - 82166370484403199890008895243450658541227588666881 - 16427171479924442928230863465674813919123162824586 - 17866458359124566529476545682848912883142607690042 - 24219022671055626321111109370544217506941658960408 - 07198403850962455444362981230987879927244284909188 - 84580156166097919133875499200524063689912560717606 - 05886116467109405077541002256983155200055935729725 - 71636269561882670428252483600823257530420752963450 - -Find the thirteen adjacent digits in the 1000-digit number that have the -greatest product. What is the value of this product? -""" - -import sys - -N = ( - "73167176531330624919225119674426574742355349194934" - "96983520312774506326239578318016984801869478851843" - "85861560789112949495459501737958331952853208805511" - "12540698747158523863050715693290963295227443043557" - "66896648950445244523161731856403098711121722383113" - "62229893423380308135336276614282806444486645238749" - "30358907296290491560440772390713810515859307960866" - "70172427121883998797908792274921901699720888093776" - "65727333001053367881220235421809751254540594752243" - "52584907711670556013604839586446706324415722155397" - "53697817977846174064955149290862569321978468622482" - "83972241375657056057490261407972968652414535100474" - "82166370484403199890008895243450658541227588666881" - "16427171479924442928230863465674813919123162824586" - "17866458359124566529476545682848912883142607690042" - "24219022671055626321111109370544217506941658960408" - "07198403850962455444362981230987879927244284909188" - "84580156166097919133875499200524063689912560717606" - "05886116467109405077541002256983155200055935729725" - "71636269561882670428252483600823257530420752963450" -) - - -def solution(n: str = N) -> int: - """ - Find the thirteen adjacent digits in the 1000-digit number n that have - the greatest product and returns it. - - >>> solution("13978431290823798458352374") - 609638400 - >>> solution("13978431295823798458352374") - 2612736000 - >>> solution("1397843129582379841238352374") - 209018880 - """ - - largest_product = -sys.maxsize - 1 - for i in range(len(n) - 12): - product = 1 - for j in range(13): - product *= int(n[i + j]) - largest_product = max(largest_product, product) - return largest_product - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_008/sol2.py b/project_euler/problem_008/sol2.py deleted file mode 100644 index e48231e4023b..000000000000 --- a/project_euler/problem_008/sol2.py +++ /dev/null @@ -1,81 +0,0 @@ -""" -Project Euler Problem 8: https://projecteuler.net/problem=8 - -Largest product in a series - -The four adjacent digits in the 1000-digit number that have the greatest -product are 9 x 9 x 8 x 9 = 5832. - - 73167176531330624919225119674426574742355349194934 - 96983520312774506326239578318016984801869478851843 - 85861560789112949495459501737958331952853208805511 - 12540698747158523863050715693290963295227443043557 - 66896648950445244523161731856403098711121722383113 - 62229893423380308135336276614282806444486645238749 - 30358907296290491560440772390713810515859307960866 - 70172427121883998797908792274921901699720888093776 - 65727333001053367881220235421809751254540594752243 - 52584907711670556013604839586446706324415722155397 - 53697817977846174064955149290862569321978468622482 - 83972241375657056057490261407972968652414535100474 - 82166370484403199890008895243450658541227588666881 - 16427171479924442928230863465674813919123162824586 - 17866458359124566529476545682848912883142607690042 - 24219022671055626321111109370544217506941658960408 - 07198403850962455444362981230987879927244284909188 - 84580156166097919133875499200524063689912560717606 - 05886116467109405077541002256983155200055935729725 - 71636269561882670428252483600823257530420752963450 - -Find the thirteen adjacent digits in the 1000-digit number that have the -greatest product. What is the value of this product? -""" - -from functools import reduce - -N = ( - "73167176531330624919225119674426574742355349194934" - "96983520312774506326239578318016984801869478851843" - "85861560789112949495459501737958331952853208805511" - "12540698747158523863050715693290963295227443043557" - "66896648950445244523161731856403098711121722383113" - "62229893423380308135336276614282806444486645238749" - "30358907296290491560440772390713810515859307960866" - "70172427121883998797908792274921901699720888093776" - "65727333001053367881220235421809751254540594752243" - "52584907711670556013604839586446706324415722155397" - "53697817977846174064955149290862569321978468622482" - "83972241375657056057490261407972968652414535100474" - "82166370484403199890008895243450658541227588666881" - "16427171479924442928230863465674813919123162824586" - "17866458359124566529476545682848912883142607690042" - "24219022671055626321111109370544217506941658960408" - "07198403850962455444362981230987879927244284909188" - "84580156166097919133875499200524063689912560717606" - "05886116467109405077541002256983155200055935729725" - "71636269561882670428252483600823257530420752963450" -) - - -def solution(n: str = N) -> int: - """ - Find the thirteen adjacent digits in the 1000-digit number n that have - the greatest product and returns it. - - >>> solution("13978431290823798458352374") - 609638400 - >>> solution("13978431295823798458352374") - 2612736000 - >>> solution("1397843129582379841238352374") - 209018880 - """ - - return max( - # mypy cannot properly interpret reduce - int(reduce(lambda x, y: str(int(x) * int(y)), n[i : i + 13])) - for i in range(len(n) - 12) - ) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_008/sol3.py b/project_euler/problem_008/sol3.py deleted file mode 100644 index 0d319b9684dd..000000000000 --- a/project_euler/problem_008/sol3.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -Project Euler Problem 8: https://projecteuler.net/problem=8 - -Largest product in a series - -The four adjacent digits in the 1000-digit number that have the greatest -product are 9 x 9 x 8 x 9 = 5832. - - 73167176531330624919225119674426574742355349194934 - 96983520312774506326239578318016984801869478851843 - 85861560789112949495459501737958331952853208805511 - 12540698747158523863050715693290963295227443043557 - 66896648950445244523161731856403098711121722383113 - 62229893423380308135336276614282806444486645238749 - 30358907296290491560440772390713810515859307960866 - 70172427121883998797908792274921901699720888093776 - 65727333001053367881220235421809751254540594752243 - 52584907711670556013604839586446706324415722155397 - 53697817977846174064955149290862569321978468622482 - 83972241375657056057490261407972968652414535100474 - 82166370484403199890008895243450658541227588666881 - 16427171479924442928230863465674813919123162824586 - 17866458359124566529476545682848912883142607690042 - 24219022671055626321111109370544217506941658960408 - 07198403850962455444362981230987879927244284909188 - 84580156166097919133875499200524063689912560717606 - 05886116467109405077541002256983155200055935729725 - 71636269561882670428252483600823257530420752963450 - -Find the thirteen adjacent digits in the 1000-digit number that have the -greatest product. What is the value of this product? -""" - -import sys - -N = ( - "73167176531330624919225119674426574742355349194934" - "96983520312774506326239578318016984801869478851843" - "85861560789112949495459501737958331952853208805511" - "12540698747158523863050715693290963295227443043557" - "66896648950445244523161731856403098711121722383113" - "62229893423380308135336276614282806444486645238749" - "30358907296290491560440772390713810515859307960866" - "70172427121883998797908792274921901699720888093776" - "65727333001053367881220235421809751254540594752243" - "52584907711670556013604839586446706324415722155397" - "53697817977846174064955149290862569321978468622482" - "83972241375657056057490261407972968652414535100474" - "82166370484403199890008895243450658541227588666881" - "16427171479924442928230863465674813919123162824586" - "17866458359124566529476545682848912883142607690042" - "24219022671055626321111109370544217506941658960408" - "07198403850962455444362981230987879927244284909188" - "84580156166097919133875499200524063689912560717606" - "05886116467109405077541002256983155200055935729725" - "71636269561882670428252483600823257530420752963450" -) - - -def str_eval(s: str) -> int: - """ - Returns product of digits in given string n - - >>> str_eval("987654321") - 362880 - >>> str_eval("22222222") - 256 - """ - - product = 1 - for digit in s: - product *= int(digit) - return product - - -def solution(n: str = N) -> int: - """ - Find the thirteen adjacent digits in the 1000-digit number n that have - the greatest product and returns it. - """ - - largest_product = -sys.maxsize - 1 - substr = n[:13] - cur_index = 13 - while cur_index < len(n) - 13: - if int(n[cur_index]) >= int(substr[0]): - substr = substr[1:] + n[cur_index] - cur_index += 1 - else: - largest_product = max(largest_product, str_eval(substr)) - substr = n[cur_index : cur_index + 13] - cur_index += 13 - return largest_product - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_009/__init__.py b/project_euler/problem_009/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_009/sol1.py b/project_euler/problem_009/sol1.py deleted file mode 100644 index e65c9b857990..000000000000 --- a/project_euler/problem_009/sol1.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Project Euler Problem 9: https://projecteuler.net/problem=9 - -Special Pythagorean triplet - -A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, - - a^2 + b^2 = c^2 - -For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. - -There exists exactly one Pythagorean triplet for which a + b + c = 1000. -Find the product a*b*c. - -References: - - https://en.wikipedia.org/wiki/Pythagorean_triple -""" - - -def solution() -> int: - """ - Returns the product of a,b,c which are Pythagorean Triplet that satisfies - the following: - 1. a < b < c - 2. a**2 + b**2 = c**2 - 3. a + b + c = 1000 - - >>> solution() - 31875000 - """ - - for a in range(300): - for b in range(a + 1, 400): - for c in range(b + 1, 500): - if (a + b + c) == 1000 and (a**2) + (b**2) == (c**2): - return a * b * c - - return -1 - - -def solution_fast() -> int: - """ - Returns the product of a,b,c which are Pythagorean Triplet that satisfies - the following: - 1. a < b < c - 2. a**2 + b**2 = c**2 - 3. a + b + c = 1000 - - >>> solution_fast() - 31875000 - """ - - for a in range(300): - for b in range(400): - c = 1000 - a - b - if a < b < c and (a**2) + (b**2) == (c**2): - return a * b * c - - return -1 - - -def benchmark() -> None: - """ - Benchmark code comparing two different version function. - """ - import timeit - - print( - timeit.timeit("solution()", setup="from __main__ import solution", number=1000) - ) - print( - timeit.timeit( - "solution_fast()", setup="from __main__ import solution_fast", number=1000 - ) - ) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_009/sol2.py b/project_euler/problem_009/sol2.py deleted file mode 100644 index 443a529571cc..000000000000 --- a/project_euler/problem_009/sol2.py +++ /dev/null @@ -1,47 +0,0 @@ -""" -Project Euler Problem 9: https://projecteuler.net/problem=9 - -Special Pythagorean triplet - -A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, - - a^2 + b^2 = c^2 - -For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. - -There exists exactly one Pythagorean triplet for which a + b + c = 1000. -Find the product a*b*c. - -References: - - https://en.wikipedia.org/wiki/Pythagorean_triple -""" - - -def solution(n: int = 1000) -> int: - """ - Return the product of a,b,c which are Pythagorean Triplet that satisfies - the following: - 1. a < b < c - 2. a**2 + b**2 = c**2 - 3. a + b + c = n - - >>> solution(36) - 1620 - >>> solution(126) - 66780 - """ - - product = -1 - candidate = 0 - for a in range(1, n // 3): - # Solving the two equations a**2+b**2=c**2 and a+b+c=N eliminating c - b = (n * n - 2 * a * n) // (2 * n - 2 * a) - c = n - a - b - if c * c == (a * a + b * b): - candidate = a * b * c - product = max(product, candidate) - return product - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_009/sol3.py b/project_euler/problem_009/sol3.py deleted file mode 100644 index 37340d3063bb..000000000000 --- a/project_euler/problem_009/sol3.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -Project Euler Problem 9: https://projecteuler.net/problem=9 - -Special Pythagorean triplet - -A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, - - a^2 + b^2 = c^2 - -For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. - -There exists exactly one Pythagorean triplet for which a + b + c = 1000. -Find the product a*b*c. - -References: - - https://en.wikipedia.org/wiki/Pythagorean_triple -""" - - -def solution() -> int: - """ - Returns the product of a,b,c which are Pythagorean Triplet that satisfies - the following: - 1. a**2 + b**2 = c**2 - 2. a + b + c = 1000 - - >>> solution() - 31875000 - """ - - return next( - iter( - [ - a * b * (1000 - a - b) - for a in range(1, 999) - for b in range(a, 999) - if (a * a + b * b == (1000 - a - b) ** 2) - ] - ) - ) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_010/__init__.py b/project_euler/problem_010/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_010/sol1.py b/project_euler/problem_010/sol1.py deleted file mode 100644 index 31f2feda3728..000000000000 --- a/project_euler/problem_010/sol1.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -Project Euler Problem 10: https://projecteuler.net/problem=10 - -Summation of primes - -The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. - -Find the sum of all the primes below two million. - -References: - - https://en.wikipedia.org/wiki/Prime_number -""" - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number num (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(n: int = 2000000) -> int: - """ - Returns the sum of all the primes below n. - - >>> solution(1000) - 76127 - >>> solution(5000) - 1548136 - >>> solution(10000) - 5736396 - >>> solution(7) - 10 - """ - - return sum(num for num in range(3, n, 2) if is_prime(num)) + 2 if n > 2 else 0 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_010/sol2.py b/project_euler/problem_010/sol2.py deleted file mode 100644 index 1a1fc0f33cb3..000000000000 --- a/project_euler/problem_010/sol2.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Project Euler Problem 10: https://projecteuler.net/problem=10 - -Summation of primes - -The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. - -Find the sum of all the primes below two million. - -References: - - https://en.wikipedia.org/wiki/Prime_number -""" - -import math -from collections.abc import Iterator -from itertools import takewhile - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number num (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def prime_generator() -> Iterator[int]: - """ - Generate a list sequence of prime numbers - """ - - num = 2 - while True: - if is_prime(num): - yield num - num += 1 - - -def solution(n: int = 2000000) -> int: - """ - Returns the sum of all the primes below n. - - >>> solution(1000) - 76127 - >>> solution(5000) - 1548136 - >>> solution(10000) - 5736396 - >>> solution(7) - 10 - """ - - return sum(takewhile(lambda x: x < n, prime_generator())) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_010/sol3.py b/project_euler/problem_010/sol3.py deleted file mode 100644 index 60abbd57194b..000000000000 --- a/project_euler/problem_010/sol3.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Project Euler Problem 10: https://projecteuler.net/problem=10 - -Summation of primes - -The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. - -Find the sum of all the primes below two million. - -References: - - https://en.wikipedia.org/wiki/Prime_number - - https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes -""" - - -def solution(n: int = 2000000) -> int: - """ - Returns the sum of all the primes below n using Sieve of Eratosthenes: - - The sieve of Eratosthenes is one of the most efficient ways to find all primes - smaller than n when n is smaller than 10 million. Only for positive numbers. - - >>> solution(1000) - 76127 - >>> solution(5000) - 1548136 - >>> solution(10000) - 5736396 - >>> solution(7) - 10 - >>> solution(7.1) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: 'float' object cannot be interpreted as an integer - >>> solution(-7) # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - IndexError: list assignment index out of range - >>> solution("seven") # doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: can only concatenate str (not "int") to str - """ - - primality_list = [0 for i in range(n + 1)] - primality_list[0] = 1 - primality_list[1] = 1 - - for i in range(2, int(n**0.5) + 1): - if primality_list[i] == 0: - for j in range(i * i, n + 1, i): - primality_list[j] = 1 - sum_of_primes = 0 - for i in range(n): - if primality_list[i] == 0: - sum_of_primes += i - return sum_of_primes - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_011/__init__.py b/project_euler/problem_011/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_011/grid.txt b/project_euler/problem_011/grid.txt deleted file mode 100644 index 4ac24518973e..000000000000 --- a/project_euler/problem_011/grid.txt +++ /dev/null @@ -1,20 +0,0 @@ -08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 -49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 -81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 -52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 -22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 -24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 -32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 -67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 -24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 -21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 -78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 -16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 -86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 -19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 -04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 -88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 -04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 -20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 -20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 -01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 diff --git a/project_euler/problem_011/sol1.py b/project_euler/problem_011/sol1.py deleted file mode 100644 index 3d3e864f927b..000000000000 --- a/project_euler/problem_011/sol1.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -What is the greatest product of four adjacent numbers (horizontally, -vertically, or diagonally) in this 20x20 array? - -08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 -49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 -81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 -52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 -22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 -24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 -32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 -67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 -24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 -21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 -78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 -16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 -86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 -19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 -04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 -88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 -04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 -20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 -20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 -01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 -""" - -import os - - -def largest_product(grid): - n_columns = len(grid[0]) - n_rows = len(grid) - - largest = 0 - lr_diag_product = 0 - rl_diag_product = 0 - - # Check vertically, horizontally, diagonally at the same time (only works - # for nxn grid) - for i in range(n_columns): - for j in range(n_rows - 3): - vert_product = grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i] - horz_product = grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3] - - # Left-to-right diagonal (\) product - if i < n_columns - 3: - lr_diag_product = ( - grid[i][j] - * grid[i + 1][j + 1] - * grid[i + 2][j + 2] - * grid[i + 3][j + 3] - ) - - # Right-to-left diagonal(/) product - if i > 2: - rl_diag_product = ( - grid[i][j] - * grid[i - 1][j + 1] - * grid[i - 2][j + 2] - * grid[i - 3][j + 3] - ) - - max_product = max( - vert_product, horz_product, lr_diag_product, rl_diag_product - ) - largest = max(largest, max_product) - - return largest - - -def solution(): - """Returns the greatest product of four adjacent numbers (horizontally, - vertically, or diagonally). - - >>> solution() - 70600674 - """ - grid = [] - with open(os.path.dirname(__file__) + "/grid.txt") as file: - for line in file: - grid.append(line.strip("\n").split(" ")) - - grid = [[int(i) for i in grid[j]] for j in range(len(grid))] - - return largest_product(grid) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_011/sol2.py b/project_euler/problem_011/sol2.py deleted file mode 100644 index 7637deafc3cb..000000000000 --- a/project_euler/problem_011/sol2.py +++ /dev/null @@ -1,81 +0,0 @@ -""" -What is the greatest product of four adjacent numbers (horizontally, -vertically, or diagonally) in this 20x20 array? - -08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 -49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 -81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 -52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 -22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 -24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 -32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 -67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 -24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 -21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 -78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 -16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 -86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 -19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 -04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 -88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 -04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 -20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 -20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 -01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 -""" - -import os - - -def solution(): - """Returns the greatest product of four adjacent numbers (horizontally, - vertically, or diagonally). - - >>> solution() - 70600674 - """ - with open(os.path.dirname(__file__) + "/grid.txt") as f: - grid = [] - for _ in range(20): - grid.append([int(x) for x in f.readline().split()]) - - maximum = 0 - - # right - for i in range(20): - for j in range(17): - temp = grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3] - maximum = max(maximum, temp) - - # down - for i in range(17): - for j in range(20): - temp = grid[i][j] * grid[i + 1][j] * grid[i + 2][j] * grid[i + 3][j] - maximum = max(maximum, temp) - - # diagonal 1 - for i in range(17): - for j in range(17): - temp = ( - grid[i][j] - * grid[i + 1][j + 1] - * grid[i + 2][j + 2] - * grid[i + 3][j + 3] - ) - maximum = max(maximum, temp) - - # diagonal 2 - for i in range(17): - for j in range(3, 20): - temp = ( - grid[i][j] - * grid[i + 1][j - 1] - * grid[i + 2][j - 2] - * grid[i + 3][j - 3] - ) - maximum = max(maximum, temp) - return maximum - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_012/__init__.py b/project_euler/problem_012/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_012/sol1.py b/project_euler/problem_012/sol1.py deleted file mode 100644 index e42b03419c69..000000000000 --- a/project_euler/problem_012/sol1.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Highly divisible triangular numbers -Problem 12 -The sequence of triangle numbers is generated by adding the natural numbers. So -the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten -terms would be: - -1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - -Let us list the factors of the first seven triangle numbers: - - 1: 1 - 3: 1,3 - 6: 1,2,3,6 -10: 1,2,5,10 -15: 1,3,5,15 -21: 1,3,7,21 -28: 1,2,4,7,14,28 -We can see that 28 is the first triangle number to have over five divisors. - -What is the value of the first triangle number to have over five hundred -divisors? -""" - - -def count_divisors(n): - n_divisors = 1 - i = 2 - while i * i <= n: - multiplicity = 0 - while n % i == 0: - n //= i - multiplicity += 1 - n_divisors *= multiplicity + 1 - i += 1 - if n > 1: - n_divisors *= 2 - return n_divisors - - -def solution(): - """Returns the value of the first triangle number to have over five hundred - divisors. - - >>> solution() - 76576500 - """ - t_num = 1 - i = 1 - - while True: - i += 1 - t_num += i - - if count_divisors(t_num) > 500: - break - - return t_num - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_012/sol2.py b/project_euler/problem_012/sol2.py deleted file mode 100644 index 380a9b74bb97..000000000000 --- a/project_euler/problem_012/sol2.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Highly divisible triangular numbers -Problem 12 -The sequence of triangle numbers is generated by adding the natural numbers. So -the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten -terms would be: - -1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - -Let us list the factors of the first seven triangle numbers: - - 1: 1 - 3: 1,3 - 6: 1,2,3,6 -10: 1,2,5,10 -15: 1,3,5,15 -21: 1,3,7,21 -28: 1,2,4,7,14,28 -We can see that 28 is the first triangle number to have over five divisors. - -What is the value of the first triangle number to have over five hundred -divisors? -""" - - -def triangle_number_generator(): - for n in range(1, 1000000): - yield n * (n + 1) // 2 - - -def count_divisors(n): - divisors_count = 1 - i = 2 - while i * i <= n: - multiplicity = 0 - while n % i == 0: - n //= i - multiplicity += 1 - divisors_count *= multiplicity + 1 - i += 1 - if n > 1: - divisors_count *= 2 - return divisors_count - - -def solution(): - """Returns the value of the first triangle number to have over five hundred - divisors. - - >>> solution() - 76576500 - """ - return next(i for i in triangle_number_generator() if count_divisors(i) > 500) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_013/__init__.py b/project_euler/problem_013/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_013/num.txt b/project_euler/problem_013/num.txt deleted file mode 100644 index 43b568e812a8..000000000000 --- a/project_euler/problem_013/num.txt +++ /dev/null @@ -1,100 +0,0 @@ -37107287533902102798797998220837590246510135740250 -46376937677490009712648124896970078050417018260538 -74324986199524741059474233309513058123726617309629 -91942213363574161572522430563301811072406154908250 -23067588207539346171171980310421047513778063246676 -89261670696623633820136378418383684178734361726757 -28112879812849979408065481931592621691275889832738 -44274228917432520321923589422876796487670272189318 -47451445736001306439091167216856844588711603153276 -70386486105843025439939619828917593665686757934951 -62176457141856560629502157223196586755079324193331 -64906352462741904929101432445813822663347944758178 -92575867718337217661963751590579239728245598838407 -58203565325359399008402633568948830189458628227828 -80181199384826282014278194139940567587151170094390 -35398664372827112653829987240784473053190104293586 -86515506006295864861532075273371959191420517255829 -71693888707715466499115593487603532921714970056938 -54370070576826684624621495650076471787294438377604 -53282654108756828443191190634694037855217779295145 -36123272525000296071075082563815656710885258350721 -45876576172410976447339110607218265236877223636045 -17423706905851860660448207621209813287860733969412 -81142660418086830619328460811191061556940512689692 -51934325451728388641918047049293215058642563049483 -62467221648435076201727918039944693004732956340691 -15732444386908125794514089057706229429197107928209 -55037687525678773091862540744969844508330393682126 -18336384825330154686196124348767681297534375946515 -80386287592878490201521685554828717201219257766954 -78182833757993103614740356856449095527097864797581 -16726320100436897842553539920931837441497806860984 -48403098129077791799088218795327364475675590848030 -87086987551392711854517078544161852424320693150332 -59959406895756536782107074926966537676326235447210 -69793950679652694742597709739166693763042633987085 -41052684708299085211399427365734116182760315001271 -65378607361501080857009149939512557028198746004375 -35829035317434717326932123578154982629742552737307 -94953759765105305946966067683156574377167401875275 -88902802571733229619176668713819931811048770190271 -25267680276078003013678680992525463401061632866526 -36270218540497705585629946580636237993140746255962 -24074486908231174977792365466257246923322810917141 -91430288197103288597806669760892938638285025333403 -34413065578016127815921815005561868836468420090470 -23053081172816430487623791969842487255036638784583 -11487696932154902810424020138335124462181441773470 -63783299490636259666498587618221225225512486764533 -67720186971698544312419572409913959008952310058822 -95548255300263520781532296796249481641953868218774 -76085327132285723110424803456124867697064507995236 -37774242535411291684276865538926205024910326572967 -23701913275725675285653248258265463092207058596522 -29798860272258331913126375147341994889534765745501 -18495701454879288984856827726077713721403798879715 -38298203783031473527721580348144513491373226651381 -34829543829199918180278916522431027392251122869539 -40957953066405232632538044100059654939159879593635 -29746152185502371307642255121183693803580388584903 -41698116222072977186158236678424689157993532961922 -62467957194401269043877107275048102390895523597457 -23189706772547915061505504953922979530901129967519 -86188088225875314529584099251203829009407770775672 -11306739708304724483816533873502340845647058077308 -82959174767140363198008187129011875491310547126581 -97623331044818386269515456334926366572897563400500 -42846280183517070527831839425882145521227251250327 -55121603546981200581762165212827652751691296897789 -32238195734329339946437501907836945765883352399886 -75506164965184775180738168837861091527357929701337 -62177842752192623401942399639168044983993173312731 -32924185707147349566916674687634660915035914677504 -99518671430235219628894890102423325116913619626622 -73267460800591547471830798392868535206946944540724 -76841822524674417161514036427982273348055556214818 -97142617910342598647204516893989422179826088076852 -87783646182799346313767754307809363333018982642090 -10848802521674670883215120185883543223812876952786 -71329612474782464538636993009049310363619763878039 -62184073572399794223406235393808339651327408011116 -66627891981488087797941876876144230030984490851411 -60661826293682836764744779239180335110989069790714 -85786944089552990653640447425576083659976645795096 -66024396409905389607120198219976047599490197230297 -64913982680032973156037120041377903785566085089252 -16730939319872750275468906903707539413042652315011 -94809377245048795150954100921645863754710598436791 -78639167021187492431995700641917969777599028300699 -15368713711936614952811305876380278410754449733078 -40789923115535562561142322423255033685442488917353 -44889911501440648020369068063960672322193204149535 -41503128880339536053299340368006977710650566631954 -81234880673210146739058568557934581403627822703280 -82616570773948327592232845941706525094512325230608 -22918802058777319719839450180888072429661980811197 -77158542502016545090413245809786882778948721859617 -72107838435069186155435662884062257473692284509516 -20849603980134001723930671666823555245252804609722 -53503534226472524250874054075591789781264330331690 diff --git a/project_euler/problem_013/sol1.py b/project_euler/problem_013/sol1.py deleted file mode 100644 index 87d0e0a60e9b..000000000000 --- a/project_euler/problem_013/sol1.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -Problem 13: https://projecteuler.net/problem=13 - -Problem Statement: -Work out the first ten digits of the sum of the following one-hundred 50-digit -numbers. -""" - -import os - - -def solution(): - """ - Returns the first ten digits of the sum of the array elements - from the file num.txt - - >>> solution() - '5537376230' - """ - file_path = os.path.join(os.path.dirname(__file__), "num.txt") - with open(file_path) as file_hand: - return str(sum(int(line) for line in file_hand))[:10] - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_014/__init__.py b/project_euler/problem_014/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_014/sol1.py b/project_euler/problem_014/sol1.py deleted file mode 100644 index 0333495908de..000000000000 --- a/project_euler/problem_014/sol1.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Problem 14: https://projecteuler.net/problem=14 - -Problem Statement: -The following iterative sequence is defined for the set of positive integers: - - n → n/2 (n is even) - n → 3n + 1 (n is odd) - -Using the rule above and starting with 13, we generate the following sequence: - - 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 - -It can be seen that this sequence (starting at 13 and finishing at 1) contains -10 terms. Although it has not been proved yet (Collatz Problem), it is thought -that all starting numbers finish at 1. - -Which starting number, under one million, produces the longest chain? -""" - - -def solution(n: int = 1000000) -> int: - """Returns the number under n that generates the longest sequence using the - formula: - n → n/2 (n is even) - n → 3n + 1 (n is odd) - - >>> solution(1000000) - 837799 - >>> solution(200) - 171 - >>> solution(5000) - 3711 - >>> solution(15000) - 13255 - """ - largest_number = 1 - pre_counter = 1 - counters = {1: 1} - - for input1 in range(2, n): - counter = 0 - number = input1 - - while True: - if number in counters: - counter += counters[number] - break - if number % 2 == 0: - number //= 2 - counter += 1 - else: - number = (3 * number) + 1 - counter += 1 - - if input1 not in counters: - counters[input1] = counter - - if counter > pre_counter: - largest_number = input1 - pre_counter = counter - return largest_number - - -if __name__ == "__main__": - print(solution(int(input().strip()))) diff --git a/project_euler/problem_014/sol2.py b/project_euler/problem_014/sol2.py deleted file mode 100644 index 797b0f9886fe..000000000000 --- a/project_euler/problem_014/sol2.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Problem 14: https://projecteuler.net/problem=14 - -Collatz conjecture: start with any positive integer n. Next term obtained from -the previous term as follows: - -If the previous term is even, the next term is one half the previous term. -If the previous term is odd, the next term is 3 times the previous term plus 1. -The conjecture states the sequence will always reach 1 regardless of starting -n. - -Problem Statement: -The following iterative sequence is defined for the set of positive integers: - - n → n/2 (n is even) - n → 3n + 1 (n is odd) - -Using the rule above and starting with 13, we generate the following sequence: - - 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 - -It can be seen that this sequence (starting at 13 and finishing at 1) contains -10 terms. Although it has not been proved yet (Collatz Problem), it is thought -that all starting numbers finish at 1. - -Which starting number, under one million, produces the longest chain? -""" - -from __future__ import annotations - -COLLATZ_SEQUENCE_LENGTHS = {1: 1} - - -def collatz_sequence_length(n: int) -> int: - """Returns the Collatz sequence length for n.""" - if n in COLLATZ_SEQUENCE_LENGTHS: - return COLLATZ_SEQUENCE_LENGTHS[n] - next_n = n // 2 if n % 2 == 0 else 3 * n + 1 - sequence_length = collatz_sequence_length(next_n) + 1 - COLLATZ_SEQUENCE_LENGTHS[n] = sequence_length - return sequence_length - - -def solution(n: int = 1000000) -> int: - """Returns the number under n that generates the longest Collatz sequence. - - >>> solution(1000000) - 837799 - >>> solution(200) - 171 - >>> solution(5000) - 3711 - >>> solution(15000) - 13255 - """ - - result = max((collatz_sequence_length(i), i) for i in range(1, n)) - return result[1] - - -if __name__ == "__main__": - print(solution(int(input().strip()))) diff --git a/project_euler/problem_015/__init__.py b/project_euler/problem_015/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_015/sol1.py b/project_euler/problem_015/sol1.py deleted file mode 100644 index 3c9dae1aed77..000000000000 --- a/project_euler/problem_015/sol1.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Problem 15: https://projecteuler.net/problem=15 - -Starting in the top left corner of a 2x2 grid, and only being able to move to -the right and down, there are exactly 6 routes to the bottom right corner. -How many such routes are there through a 20x20 grid? -""" - -from math import factorial - - -def solution(n: int = 20) -> int: - """ - Returns the number of paths possible in a n x n grid starting at top left - corner going to bottom right corner and being able to move right and down - only. - >>> solution(25) - 126410606437752 - >>> solution(23) - 8233430727600 - >>> solution(20) - 137846528820 - >>> solution(15) - 155117520 - >>> solution(1) - 2 - """ - n = 2 * n # middle entry of odd rows starting at row 3 is the solution for n = 1, - # 2, 3,... - k = n // 2 - - return int(factorial(n) / (factorial(k) * factorial(n - k))) - - -if __name__ == "__main__": - import sys - - if len(sys.argv) == 1: - print(solution(20)) - else: - try: - n = int(sys.argv[1]) - print(solution(n)) - except ValueError: - print("Invalid entry - please enter a number.") diff --git a/project_euler/problem_016/__init__.py b/project_euler/problem_016/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_016/sol1.py b/project_euler/problem_016/sol1.py deleted file mode 100644 index 93584d1d436f..000000000000 --- a/project_euler/problem_016/sol1.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -Problem 16: https://projecteuler.net/problem=16 - -2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. - -What is the sum of the digits of the number 2^1000? -""" - - -def solution(power: int = 1000) -> int: - """Returns the sum of the digits of the number 2^power. - >>> solution(1000) - 1366 - >>> solution(50) - 76 - >>> solution(20) - 31 - >>> solution(15) - 26 - """ - num = 2**power - string_num = str(num) - list_num = list(string_num) - sum_of_num = 0 - - for i in list_num: - sum_of_num += int(i) - - return sum_of_num - - -if __name__ == "__main__": - power = int(input("Enter the power of 2: ").strip()) - print("2 ^ ", power, " = ", 2**power) - result = solution(power) - print("Sum of the digits is: ", result) diff --git a/project_euler/problem_016/sol2.py b/project_euler/problem_016/sol2.py deleted file mode 100644 index 1408212e74c5..000000000000 --- a/project_euler/problem_016/sol2.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Problem 16: https://projecteuler.net/problem=16 - -2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. - -What is the sum of the digits of the number 2^1000? -""" - - -def solution(power: int = 1000) -> int: - """Returns the sum of the digits of the number 2^power. - - >>> solution(1000) - 1366 - >>> solution(50) - 76 - >>> solution(20) - 31 - >>> solution(15) - 26 - """ - n = 2**power - r = 0 - while n: - r, n = r + n % 10, n // 10 - return r - - -if __name__ == "__main__": - print(solution(int(str(input()).strip()))) diff --git a/project_euler/problem_017/__init__.py b/project_euler/problem_017/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_017/sol1.py b/project_euler/problem_017/sol1.py deleted file mode 100644 index d4db1beb5a4e..000000000000 --- a/project_euler/problem_017/sol1.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Number letter counts -Problem 17: https://projecteuler.net/problem=17 - -If the numbers 1 to 5 are written out in words: one, two, three, four, five, -then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total. - -If all the numbers from 1 to 1000 (one thousand) inclusive were written out in -words, how many letters would be used? - - -NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and -forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 -letters. The use of "and" when writing out numbers is in compliance withBritish -usage. -""" - - -def solution(n: int = 1000) -> int: - """Returns the number of letters used to write all numbers from 1 to n. - where n is lower or equals to 1000. - >>> solution(1000) - 21124 - >>> solution(5) - 19 - """ - # number of letters in zero, one, two, ..., nineteen (0 for zero since it's - # never said aloud) - ones_counts = [0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8] - # number of letters in twenty, thirty, ..., ninety (0 for numbers less than - # 20 due to inconsistency in teens) - tens_counts = [0, 0, 6, 6, 5, 5, 5, 7, 6, 6] - - count = 0 - - for i in range(1, n + 1): - if i < 1000: - if i >= 100: - # add number of letters for "n hundred" - count += ones_counts[i // 100] + 7 - - if i % 100 != 0: - # add number of letters for "and" if number is not multiple - # of 100 - count += 3 - - if 0 < i % 100 < 20: - # add number of letters for one, two, three, ..., nineteen - # (could be combined with below if not for inconsistency in - # teens) - count += ones_counts[i % 100] - else: - # add number of letters for twenty, twenty one, ..., ninety - # nine - count += ones_counts[i % 10] - count += tens_counts[(i % 100 - i % 10) // 10] - else: - count += ones_counts[i // 1000] + 8 - return count - - -if __name__ == "__main__": - print(solution(int(input().strip()))) diff --git a/project_euler/problem_018/__init__.py b/project_euler/problem_018/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_018/solution.py b/project_euler/problem_018/solution.py deleted file mode 100644 index cbe8743be15f..000000000000 --- a/project_euler/problem_018/solution.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -By starting at the top of the triangle below and moving to adjacent numbers on -the row below, the maximum total from top to bottom is 23. - -3 -7 4 -2 4 6 -8 5 9 3 - -That is, 3 + 7 + 4 + 9 = 23. - -Find the maximum total from top to bottom of the triangle below: - -75 -95 64 -17 47 82 -18 35 87 10 -20 04 82 47 65 -19 01 23 75 03 34 -88 02 77 73 07 63 67 -99 65 04 28 06 16 70 92 -41 41 26 56 83 40 80 70 33 -41 48 72 33 47 32 37 16 94 29 -53 71 44 65 25 43 91 52 97 51 14 -70 11 33 28 77 73 17 78 39 68 17 57 -91 71 52 38 17 14 91 43 58 50 27 29 48 -63 66 04 68 89 53 67 30 73 16 69 87 40 31 -04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 -""" - -import os - - -def solution(): - """ - Finds the maximum total in a triangle as described by the problem statement - above. - - >>> solution() - 1074 - """ - script_dir = os.path.dirname(os.path.realpath(__file__)) - triangle = os.path.join(script_dir, "triangle.txt") - - with open(triangle) as f: - triangle = f.readlines() - - a = [[int(y) for y in x.rstrip("\r\n").split(" ")] for x in triangle] - - for i in range(1, len(a)): - for j in range(len(a[i])): - number1 = a[i - 1][j] if j != len(a[i - 1]) else 0 - number2 = a[i - 1][j - 1] if j > 0 else 0 - a[i][j] += max(number1, number2) - return max(a[-1]) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_018/triangle.txt b/project_euler/problem_018/triangle.txt deleted file mode 100644 index e236c2ff7ee2..000000000000 --- a/project_euler/problem_018/triangle.txt +++ /dev/null @@ -1,15 +0,0 @@ -75 -95 64 -17 47 82 -18 35 87 10 -20 04 82 47 65 -19 01 23 75 03 34 -88 02 77 73 07 63 67 -99 65 04 28 06 16 70 92 -41 41 26 56 83 40 80 70 33 -41 48 72 33 47 32 37 16 94 29 -53 71 44 65 25 43 91 52 97 51 14 -70 11 33 28 77 73 17 78 39 68 17 57 -91 71 52 38 17 14 91 43 58 50 27 29 48 -63 66 04 68 89 53 67 30 73 16 69 87 40 31 -04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 diff --git a/project_euler/problem_019/__init__.py b/project_euler/problem_019/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_019/sol1.py b/project_euler/problem_019/sol1.py deleted file mode 100644 index 656f104c390d..000000000000 --- a/project_euler/problem_019/sol1.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Counting Sundays -Problem 19 - -You are given the following information, but you may prefer to do some research -for yourself. - -1 Jan 1900 was a Monday. -Thirty days has September, -April, June and November. -All the rest have thirty-one, -Saving February alone, -Which has twenty-eight, rain or shine. -And on leap years, twenty-nine. - -A leap year occurs on any year evenly divisible by 4, but not on a century -unless it is divisible by 400. - -How many Sundays fell on the first of the month during the twentieth century -(1 Jan 1901 to 31 Dec 2000)? -""" - - -def solution(): - """Returns the number of mondays that fall on the first of the month during - the twentieth century (1 Jan 1901 to 31 Dec 2000)? - - >>> solution() - 171 - """ - days_per_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] - - day = 6 - month = 1 - year = 1901 - - sundays = 0 - - while year < 2001: - day += 7 - - if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): - if day > days_per_month[month - 1] and month != 2: - month += 1 - day = day - days_per_month[month - 2] - elif day > 29 and month == 2: - month += 1 - day = day - 29 - elif day > days_per_month[month - 1]: - month += 1 - day = day - days_per_month[month - 2] - - if month > 12: - year += 1 - month = 1 - - if year < 2001 and day == 1: - sundays += 1 - return sundays - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_020/__init__.py b/project_euler/problem_020/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_020/sol1.py b/project_euler/problem_020/sol1.py deleted file mode 100644 index 1439bdca38e6..000000000000 --- a/project_euler/problem_020/sol1.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Problem 20: https://projecteuler.net/problem=20 - -n! means n x (n - 1) x ... x 3 x 2 x 1 - -For example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800, -and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27. - -Find the sum of the digits in the number 100! -""" - - -def factorial(num: int) -> int: - """Find the factorial of a given number n""" - fact = 1 - for i in range(1, num + 1): - fact *= i - return fact - - -def split_and_add(number: int) -> int: - """Split number digits and add them.""" - sum_of_digits = 0 - while number > 0: - last_digit = number % 10 - sum_of_digits += last_digit - number = number // 10 # Removing the last_digit from the given number - return sum_of_digits - - -def solution(num: int = 100) -> int: - """Returns the sum of the digits in the factorial of num - >>> solution(100) - 648 - >>> solution(50) - 216 - >>> solution(10) - 27 - >>> solution(5) - 3 - >>> solution(3) - 6 - >>> solution(2) - 2 - >>> solution(1) - 1 - """ - nfact = factorial(num) - result = split_and_add(nfact) - return result - - -if __name__ == "__main__": - print(solution(int(input("Enter the Number: ").strip()))) diff --git a/project_euler/problem_020/sol2.py b/project_euler/problem_020/sol2.py deleted file mode 100644 index 61684cd5ef6d..000000000000 --- a/project_euler/problem_020/sol2.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -Problem 20: https://projecteuler.net/problem=20 - -n! means n x (n - 1) x ... x 3 x 2 x 1 - -For example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800, -and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27. - -Find the sum of the digits in the number 100! -""" - -from math import factorial - - -def solution(num: int = 100) -> int: - """Returns the sum of the digits in the factorial of num - >>> solution(100) - 648 - >>> solution(50) - 216 - >>> solution(10) - 27 - >>> solution(5) - 3 - >>> solution(3) - 6 - >>> solution(2) - 2 - >>> solution(1) - 1 - """ - return sum(int(x) for x in str(factorial(num))) - - -if __name__ == "__main__": - print(solution(int(input("Enter the Number: ").strip()))) diff --git a/project_euler/problem_020/sol3.py b/project_euler/problem_020/sol3.py deleted file mode 100644 index 8984def9c34e..000000000000 --- a/project_euler/problem_020/sol3.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Problem 20: https://projecteuler.net/problem=20 - -n! means n x (n - 1) x ... x 3 x 2 x 1 - -For example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800, -and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27. - -Find the sum of the digits in the number 100! -""" - -from math import factorial - - -def solution(num: int = 100) -> int: - """Returns the sum of the digits in the factorial of num - >>> solution(1000) - 10539 - >>> solution(200) - 1404 - >>> solution(100) - 648 - >>> solution(50) - 216 - >>> solution(10) - 27 - >>> solution(5) - 3 - >>> solution(3) - 6 - >>> solution(2) - 2 - >>> solution(1) - 1 - >>> solution(0) - 1 - """ - return sum(map(int, str(factorial(num)))) - - -if __name__ == "__main__": - print(solution(int(input("Enter the Number: ").strip()))) diff --git a/project_euler/problem_020/sol4.py b/project_euler/problem_020/sol4.py deleted file mode 100644 index 511ac81e176b..000000000000 --- a/project_euler/problem_020/sol4.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -Problem 20: https://projecteuler.net/problem=20 - -n! means n x (n - 1) x ... x 3 x 2 x 1 - -For example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800, -and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27. - -Find the sum of the digits in the number 100! -""" - - -def solution(num: int = 100) -> int: - """Returns the sum of the digits in the factorial of num - >>> solution(100) - 648 - >>> solution(50) - 216 - >>> solution(10) - 27 - >>> solution(5) - 3 - >>> solution(3) - 6 - >>> solution(2) - 2 - >>> solution(1) - 1 - """ - fact = 1 - result = 0 - for i in range(1, num + 1): - fact *= i - - for j in str(fact): - result += int(j) - - return result - - -if __name__ == "__main__": - print(solution(int(input("Enter the Number: ").strip()))) diff --git a/project_euler/problem_021/__init__.py b/project_euler/problem_021/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_021/sol1.py b/project_euler/problem_021/sol1.py deleted file mode 100644 index f6dbfa8864db..000000000000 --- a/project_euler/problem_021/sol1.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Amicable Numbers -Problem 21 - -Let d(n) be defined as the sum of proper divisors of n (numbers less than n -which divide evenly into n). -If d(a) = b and d(b) = a, where a ≠ b, then a and b are an amicable pair and -each of a and b are called amicable numbers. - -For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 -and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and -142; so d(284) = 220. - -Evaluate the sum of all the amicable numbers under 10000. -""" - -from math import sqrt - - -def sum_of_divisors(n: int) -> int: - total = 0 - for i in range(1, int(sqrt(n) + 1)): - if n % i == 0 and i != sqrt(n): - total += i + n // i - elif i == sqrt(n): - total += i - return total - n - - -def solution(n: int = 10000) -> int: - """Returns the sum of all the amicable numbers under n. - - >>> solution(10000) - 31626 - >>> solution(5000) - 8442 - >>> solution(1000) - 504 - >>> solution(100) - 0 - >>> solution(50) - 0 - """ - total = sum( - i - for i in range(1, n) - if sum_of_divisors(sum_of_divisors(i)) == i and sum_of_divisors(i) != i - ) - return total - - -if __name__ == "__main__": - print(solution(int(str(input()).strip()))) diff --git a/project_euler/problem_022/__init__.py b/project_euler/problem_022/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_022/p022_names.txt b/project_euler/problem_022/p022_names.txt deleted file mode 100644 index 7b8986bf6ce9..000000000000 --- a/project_euler/problem_022/p022_names.txt +++ /dev/null @@ -1 +0,0 @@ -"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE","CAROLYN","CHRISTINE","MARIE","JANET","CATHERINE","FRANCES","ANN","JOYCE","DIANE","ALICE","JULIE","HEATHER","TERESA","DORIS","GLORIA","EVELYN","JEAN","CHERYL","MILDRED","KATHERINE","JOAN","ASHLEY","JUDITH","ROSE","JANICE","KELLY","NICOLE","JUDY","CHRISTINA","KATHY","THERESA","BEVERLY","DENISE","TAMMY","IRENE","JANE","LORI","RACHEL","MARILYN","ANDREA","KATHRYN","LOUISE","SARA","ANNE","JACQUELINE","WANDA","BONNIE","JULIA","RUBY","LOIS","TINA","PHYLLIS","NORMA","PAULA","DIANA","ANNIE","LILLIAN","EMILY","ROBIN","PEGGY","CRYSTAL","GLADYS","RITA","DAWN","CONNIE","FLORENCE","TRACY","EDNA","TIFFANY","CARMEN","ROSA","CINDY","GRACE","WENDY","VICTORIA","EDITH","KIM","SHERRY","SYLVIA","JOSEPHINE","THELMA","SHANNON","SHEILA","ETHEL","ELLEN","ELAINE","MARJORIE","CARRIE","CHARLOTTE","MONICA","ESTHER","PAULINE","EMMA","JUANITA","ANITA","RHONDA","HAZEL","AMBER","EVA","DEBBIE","APRIL","LESLIE","CLARA","LUCILLE","JAMIE","JOANNE","ELEANOR","VALERIE","DANIELLE","MEGAN","ALICIA","SUZANNE","MICHELE","GAIL","BERTHA","DARLENE","VERONICA","JILL","ERIN","GERALDINE","LAUREN","CATHY","JOANN","LORRAINE","LYNN","SALLY","REGINA","ERICA","BEATRICE","DOLORES","BERNICE","AUDREY","YVONNE","ANNETTE","JUNE","SAMANTHA","MARION","DANA","STACY","ANA","RENEE","IDA","VIVIAN","ROBERTA","HOLLY","BRITTANY","MELANIE","LORETTA","YOLANDA","JEANETTE","LAURIE","KATIE","KRISTEN","VANESSA","ALMA","SUE","ELSIE","BETH","JEANNE","VICKI","CARLA","TARA","ROSEMARY","EILEEN","TERRI","GERTRUDE","LUCY","TONYA","ELLA","STACEY","WILMA","GINA","KRISTIN","JESSIE","NATALIE","AGNES","VERA","WILLIE","CHARLENE","BESSIE","DELORES","MELINDA","PEARL","ARLENE","MAUREEN","COLLEEN","ALLISON","TAMARA","JOY","GEORGIA","CONSTANCE","LILLIE","CLAUDIA","JACKIE","MARCIA","TANYA","NELLIE","MINNIE","MARLENE","HEIDI","GLENDA","LYDIA","VIOLA","COURTNEY","MARIAN","STELLA","CAROLINE","DORA","JO","VICKIE","MATTIE","TERRY","MAXINE","IRMA","MABEL","MARSHA","MYRTLE","LENA","CHRISTY","DEANNA","PATSY","HILDA","GWENDOLYN","JENNIE","NORA","MARGIE","NINA","CASSANDRA","LEAH","PENNY","KAY","PRISCILLA","NAOMI","CAROLE","BRANDY","OLGA","BILLIE","DIANNE","TRACEY","LEONA","JENNY","FELICIA","SONIA","MIRIAM","VELMA","BECKY","BOBBIE","VIOLET","KRISTINA","TONI","MISTY","MAE","SHELLY","DAISY","RAMONA","SHERRI","ERIKA","KATRINA","CLAIRE","LINDSEY","LINDSAY","GENEVA","GUADALUPE","BELINDA","MARGARITA","SHERYL","CORA","FAYE","ADA","NATASHA","SABRINA","ISABEL","MARGUERITE","HATTIE","HARRIET","MOLLY","CECILIA","KRISTI","BRANDI","BLANCHE","SANDY","ROSIE","JOANNA","IRIS","EUNICE","ANGIE","INEZ","LYNDA","MADELINE","AMELIA","ALBERTA","GENEVIEVE","MONIQUE","JODI","JANIE","MAGGIE","KAYLA","SONYA","JAN","LEE","KRISTINE","CANDACE","FANNIE","MARYANN","OPAL","ALISON","YVETTE","MELODY","LUZ","SUSIE","OLIVIA","FLORA","SHELLEY","KRISTY","MAMIE","LULA","LOLA","VERNA","BEULAH","ANTOINETTE","CANDICE","JUANA","JEANNETTE","PAM","KELLI","HANNAH","WHITNEY","BRIDGET","KARLA","CELIA","LATOYA","PATTY","SHELIA","GAYLE","DELLA","VICKY","LYNNE","SHERI","MARIANNE","KARA","JACQUELYN","ERMA","BLANCA","MYRA","LETICIA","PAT","KRISTA","ROXANNE","ANGELICA","JOHNNIE","ROBYN","FRANCIS","ADRIENNE","ROSALIE","ALEXANDRA","BROOKE","BETHANY","SADIE","BERNADETTE","TRACI","JODY","KENDRA","JASMINE","NICHOLE","RACHAEL","CHELSEA","MABLE","ERNESTINE","MURIEL","MARCELLA","ELENA","KRYSTAL","ANGELINA","NADINE","KARI","ESTELLE","DIANNA","PAULETTE","LORA","MONA","DOREEN","ROSEMARIE","ANGEL","DESIREE","ANTONIA","HOPE","GINGER","JANIS","BETSY","CHRISTIE","FREDA","MERCEDES","MEREDITH","LYNETTE","TERI","CRISTINA","EULA","LEIGH","MEGHAN","SOPHIA","ELOISE","ROCHELLE","GRETCHEN","CECELIA","RAQUEL","HENRIETTA","ALYSSA","JANA","KELLEY","GWEN","KERRY","JENNA","TRICIA","LAVERNE","OLIVE","ALEXIS","TASHA","SILVIA","ELVIRA","CASEY","DELIA","SOPHIE","KATE","PATTI","LORENA","KELLIE","SONJA","LILA","LANA","DARLA","MAY","MINDY","ESSIE","MANDY","LORENE","ELSA","JOSEFINA","JEANNIE","MIRANDA","DIXIE","LUCIA","MARTA","FAITH","LELA","JOHANNA","SHARI","CAMILLE","TAMI","SHAWNA","ELISA","EBONY","MELBA","ORA","NETTIE","TABITHA","OLLIE","JAIME","WINIFRED","KRISTIE","MARINA","ALISHA","AIMEE","RENA","MYRNA","MARLA","TAMMIE","LATASHA","BONITA","PATRICE","RONDA","SHERRIE","ADDIE","FRANCINE","DELORIS","STACIE","ADRIANA","CHERI","SHELBY","ABIGAIL","CELESTE","JEWEL","CARA","ADELE","REBEKAH","LUCINDA","DORTHY","CHRIS","EFFIE","TRINA","REBA","SHAWN","SALLIE","AURORA","LENORA","ETTA","LOTTIE","KERRI","TRISHA","NIKKI","ESTELLA","FRANCISCA","JOSIE","TRACIE","MARISSA","KARIN","BRITTNEY","JANELLE","LOURDES","LAUREL","HELENE","FERN","ELVA","CORINNE","KELSEY","INA","BETTIE","ELISABETH","AIDA","CAITLIN","INGRID","IVA","EUGENIA","CHRISTA","GOLDIE","CASSIE","MAUDE","JENIFER","THERESE","FRANKIE","DENA","LORNA","JANETTE","LATONYA","CANDY","MORGAN","CONSUELO","TAMIKA","ROSETTA","DEBORA","CHERIE","POLLY","DINA","JEWELL","FAY","JILLIAN","DOROTHEA","NELL","TRUDY","ESPERANZA","PATRICA","KIMBERLEY","SHANNA","HELENA","CAROLINA","CLEO","STEFANIE","ROSARIO","OLA","JANINE","MOLLIE","LUPE","ALISA","LOU","MARIBEL","SUSANNE","BETTE","SUSANA","ELISE","CECILE","ISABELLE","LESLEY","JOCELYN","PAIGE","JONI","RACHELLE","LEOLA","DAPHNE","ALTA","ESTER","PETRA","GRACIELA","IMOGENE","JOLENE","KEISHA","LACEY","GLENNA","GABRIELA","KERI","URSULA","LIZZIE","KIRSTEN","SHANA","ADELINE","MAYRA","JAYNE","JACLYN","GRACIE","SONDRA","CARMELA","MARISA","ROSALIND","CHARITY","TONIA","BEATRIZ","MARISOL","CLARICE","JEANINE","SHEENA","ANGELINE","FRIEDA","LILY","ROBBIE","SHAUNA","MILLIE","CLAUDETTE","CATHLEEN","ANGELIA","GABRIELLE","AUTUMN","KATHARINE","SUMMER","JODIE","STACI","LEA","CHRISTI","JIMMIE","JUSTINE","ELMA","LUELLA","MARGRET","DOMINIQUE","SOCORRO","RENE","MARTINA","MARGO","MAVIS","CALLIE","BOBBI","MARITZA","LUCILE","LEANNE","JEANNINE","DEANA","AILEEN","LORIE","LADONNA","WILLA","MANUELA","GALE","SELMA","DOLLY","SYBIL","ABBY","LARA","DALE","IVY","DEE","WINNIE","MARCY","LUISA","JERI","MAGDALENA","OFELIA","MEAGAN","AUDRA","MATILDA","LEILA","CORNELIA","BIANCA","SIMONE","BETTYE","RANDI","VIRGIE","LATISHA","BARBRA","GEORGINA","ELIZA","LEANN","BRIDGETTE","RHODA","HALEY","ADELA","NOLA","BERNADINE","FLOSSIE","ILA","GRETA","RUTHIE","NELDA","MINERVA","LILLY","TERRIE","LETHA","HILARY","ESTELA","VALARIE","BRIANNA","ROSALYN","EARLINE","CATALINA","AVA","MIA","CLARISSA","LIDIA","CORRINE","ALEXANDRIA","CONCEPCION","TIA","SHARRON","RAE","DONA","ERICKA","JAMI","ELNORA","CHANDRA","LENORE","NEVA","MARYLOU","MELISA","TABATHA","SERENA","AVIS","ALLIE","SOFIA","JEANIE","ODESSA","NANNIE","HARRIETT","LORAINE","PENELOPE","MILAGROS","EMILIA","BENITA","ALLYSON","ASHLEE","TANIA","TOMMIE","ESMERALDA","KARINA","EVE","PEARLIE","ZELMA","MALINDA","NOREEN","TAMEKA","SAUNDRA","HILLARY","AMIE","ALTHEA","ROSALINDA","JORDAN","LILIA","ALANA","GAY","CLARE","ALEJANDRA","ELINOR","MICHAEL","LORRIE","JERRI","DARCY","EARNESTINE","CARMELLA","TAYLOR","NOEMI","MARCIE","LIZA","ANNABELLE","LOUISA","EARLENE","MALLORY","CARLENE","NITA","SELENA","TANISHA","KATY","JULIANNE","JOHN","LAKISHA","EDWINA","MARICELA","MARGERY","KENYA","DOLLIE","ROXIE","ROSLYN","KATHRINE","NANETTE","CHARMAINE","LAVONNE","ILENE","KRIS","TAMMI","SUZETTE","CORINE","KAYE","JERRY","MERLE","CHRYSTAL","LINA","DEANNE","LILIAN","JULIANA","ALINE","LUANN","KASEY","MARYANNE","EVANGELINE","COLETTE","MELVA","LAWANDA","YESENIA","NADIA","MADGE","KATHIE","EDDIE","OPHELIA","VALERIA","NONA","MITZI","MARI","GEORGETTE","CLAUDINE","FRAN","ALISSA","ROSEANN","LAKEISHA","SUSANNA","REVA","DEIDRE","CHASITY","SHEREE","CARLY","JAMES","ELVIA","ALYCE","DEIRDRE","GENA","BRIANA","ARACELI","KATELYN","ROSANNE","WENDI","TESSA","BERTA","MARVA","IMELDA","MARIETTA","MARCI","LEONOR","ARLINE","SASHA","MADELYN","JANNA","JULIETTE","DEENA","AURELIA","JOSEFA","AUGUSTA","LILIANA","YOUNG","CHRISTIAN","LESSIE","AMALIA","SAVANNAH","ANASTASIA","VILMA","NATALIA","ROSELLA","LYNNETTE","CORINA","ALFREDA","LEANNA","CAREY","AMPARO","COLEEN","TAMRA","AISHA","WILDA","KARYN","CHERRY","QUEEN","MAURA","MAI","EVANGELINA","ROSANNA","HALLIE","ERNA","ENID","MARIANA","LACY","JULIET","JACKLYN","FREIDA","MADELEINE","MARA","HESTER","CATHRYN","LELIA","CASANDRA","BRIDGETT","ANGELITA","JANNIE","DIONNE","ANNMARIE","KATINA","BERYL","PHOEBE","MILLICENT","KATHERYN","DIANN","CARISSA","MARYELLEN","LIZ","LAURI","HELGA","GILDA","ADRIAN","RHEA","MARQUITA","HOLLIE","TISHA","TAMERA","ANGELIQUE","FRANCESCA","BRITNEY","KAITLIN","LOLITA","FLORINE","ROWENA","REYNA","TWILA","FANNY","JANELL","INES","CONCETTA","BERTIE","ALBA","BRIGITTE","ALYSON","VONDA","PANSY","ELBA","NOELLE","LETITIA","KITTY","DEANN","BRANDIE","LOUELLA","LETA","FELECIA","SHARLENE","LESA","BEVERLEY","ROBERT","ISABELLA","HERMINIA","TERRA","CELINA","TORI","OCTAVIA","JADE","DENICE","GERMAINE","SIERRA","MICHELL","CORTNEY","NELLY","DORETHA","SYDNEY","DEIDRA","MONIKA","LASHONDA","JUDI","CHELSEY","ANTIONETTE","MARGOT","BOBBY","ADELAIDE","NAN","LEEANN","ELISHA","DESSIE","LIBBY","KATHI","GAYLA","LATANYA","MINA","MELLISA","KIMBERLEE","JASMIN","RENAE","ZELDA","ELDA","MA","JUSTINA","GUSSIE","EMILIE","CAMILLA","ABBIE","ROCIO","KAITLYN","JESSE","EDYTHE","ASHLEIGH","SELINA","LAKESHA","GERI","ALLENE","PAMALA","MICHAELA","DAYNA","CARYN","ROSALIA","SUN","JACQULINE","REBECA","MARYBETH","KRYSTLE","IOLA","DOTTIE","BENNIE","BELLE","AUBREY","GRISELDA","ERNESTINA","ELIDA","ADRIANNE","DEMETRIA","DELMA","CHONG","JAQUELINE","DESTINY","ARLEEN","VIRGINA","RETHA","FATIMA","TILLIE","ELEANORE","CARI","TREVA","BIRDIE","WILHELMINA","ROSALEE","MAURINE","LATRICE","YONG","JENA","TARYN","ELIA","DEBBY","MAUDIE","JEANNA","DELILAH","CATRINA","SHONDA","HORTENCIA","THEODORA","TERESITA","ROBBIN","DANETTE","MARYJANE","FREDDIE","DELPHINE","BRIANNE","NILDA","DANNA","CINDI","BESS","IONA","HANNA","ARIEL","WINONA","VIDA","ROSITA","MARIANNA","WILLIAM","RACHEAL","GUILLERMINA","ELOISA","CELESTINE","CAREN","MALISSA","LONA","CHANTEL","SHELLIE","MARISELA","LEORA","AGATHA","SOLEDAD","MIGDALIA","IVETTE","CHRISTEN","ATHENA","JANEL","CHLOE","VEDA","PATTIE","TESSIE","TERA","MARILYNN","LUCRETIA","KARRIE","DINAH","DANIELA","ALECIA","ADELINA","VERNICE","SHIELA","PORTIA","MERRY","LASHAWN","DEVON","DARA","TAWANA","OMA","VERDA","CHRISTIN","ALENE","ZELLA","SANDI","RAFAELA","MAYA","KIRA","CANDIDA","ALVINA","SUZAN","SHAYLA","LYN","LETTIE","ALVA","SAMATHA","ORALIA","MATILDE","MADONNA","LARISSA","VESTA","RENITA","INDIA","DELOIS","SHANDA","PHILLIS","LORRI","ERLINDA","CRUZ","CATHRINE","BARB","ZOE","ISABELL","IONE","GISELA","CHARLIE","VALENCIA","ROXANNA","MAYME","KISHA","ELLIE","MELLISSA","DORRIS","DALIA","BELLA","ANNETTA","ZOILA","RETA","REINA","LAURETTA","KYLIE","CHRISTAL","PILAR","CHARLA","ELISSA","TIFFANI","TANA","PAULINA","LEOTA","BREANNA","JAYME","CARMEL","VERNELL","TOMASA","MANDI","DOMINGA","SANTA","MELODIE","LURA","ALEXA","TAMELA","RYAN","MIRNA","KERRIE","VENUS","NOEL","FELICITA","CRISTY","CARMELITA","BERNIECE","ANNEMARIE","TIARA","ROSEANNE","MISSY","CORI","ROXANA","PRICILLA","KRISTAL","JUNG","ELYSE","HAYDEE","ALETHA","BETTINA","MARGE","GILLIAN","FILOMENA","CHARLES","ZENAIDA","HARRIETTE","CARIDAD","VADA","UNA","ARETHA","PEARLINE","MARJORY","MARCELA","FLOR","EVETTE","ELOUISE","ALINA","TRINIDAD","DAVID","DAMARIS","CATHARINE","CARROLL","BELVA","NAKIA","MARLENA","LUANNE","LORINE","KARON","DORENE","DANITA","BRENNA","TATIANA","SAMMIE","LOUANN","LOREN","JULIANNA","ANDRIA","PHILOMENA","LUCILA","LEONORA","DOVIE","ROMONA","MIMI","JACQUELIN","GAYE","TONJA","MISTI","JOE","GENE","CHASTITY","STACIA","ROXANN","MICAELA","NIKITA","MEI","VELDA","MARLYS","JOHNNA","AURA","LAVERN","IVONNE","HAYLEY","NICKI","MAJORIE","HERLINDA","GEORGE","ALPHA","YADIRA","PERLA","GREGORIA","DANIEL","ANTONETTE","SHELLI","MOZELLE","MARIAH","JOELLE","CORDELIA","JOSETTE","CHIQUITA","TRISTA","LOUIS","LAQUITA","GEORGIANA","CANDI","SHANON","LONNIE","HILDEGARD","CECIL","VALENTINA","STEPHANY","MAGDA","KAROL","GERRY","GABRIELLA","TIANA","ROMA","RICHELLE","RAY","PRINCESS","OLETA","JACQUE","IDELLA","ALAINA","SUZANNA","JOVITA","BLAIR","TOSHA","RAVEN","NEREIDA","MARLYN","KYLA","JOSEPH","DELFINA","TENA","STEPHENIE","SABINA","NATHALIE","MARCELLE","GERTIE","DARLEEN","THEA","SHARONDA","SHANTEL","BELEN","VENESSA","ROSALINA","ONA","GENOVEVA","COREY","CLEMENTINE","ROSALBA","RENATE","RENATA","MI","IVORY","GEORGIANNA","FLOY","DORCAS","ARIANA","TYRA","THEDA","MARIAM","JULI","JESICA","DONNIE","VIKKI","VERLA","ROSELYN","MELVINA","JANNETTE","GINNY","DEBRAH","CORRIE","ASIA","VIOLETA","MYRTIS","LATRICIA","COLLETTE","CHARLEEN","ANISSA","VIVIANA","TWYLA","PRECIOUS","NEDRA","LATONIA","LAN","HELLEN","FABIOLA","ANNAMARIE","ADELL","SHARYN","CHANTAL","NIKI","MAUD","LIZETTE","LINDY","KIA","KESHA","JEANA","DANELLE","CHARLINE","CHANEL","CARROL","VALORIE","LIA","DORTHA","CRISTAL","SUNNY","LEONE","LEILANI","GERRI","DEBI","ANDRA","KESHIA","IMA","EULALIA","EASTER","DULCE","NATIVIDAD","LINNIE","KAMI","GEORGIE","CATINA","BROOK","ALDA","WINNIFRED","SHARLA","RUTHANN","MEAGHAN","MAGDALENE","LISSETTE","ADELAIDA","VENITA","TRENA","SHIRLENE","SHAMEKA","ELIZEBETH","DIAN","SHANTA","MICKEY","LATOSHA","CARLOTTA","WINDY","SOON","ROSINA","MARIANN","LEISA","JONNIE","DAWNA","CATHIE","BILLY","ASTRID","SIDNEY","LAUREEN","JANEEN","HOLLI","FAWN","VICKEY","TERESSA","SHANTE","RUBYE","MARCELINA","CHANDA","CARY","TERESE","SCARLETT","MARTY","MARNIE","LULU","LISETTE","JENIFFER","ELENOR","DORINDA","DONITA","CARMAN","BERNITA","ALTAGRACIA","ALETA","ADRIANNA","ZORAIDA","RONNIE","NICOLA","LYNDSEY","KENDALL","JANINA","CHRISSY","AMI","STARLA","PHYLIS","PHUONG","KYRA","CHARISSE","BLANCH","SANJUANITA","RONA","NANCI","MARILEE","MARANDA","CORY","BRIGETTE","SANJUANA","MARITA","KASSANDRA","JOYCELYN","IRA","FELIPA","CHELSIE","BONNY","MIREYA","LORENZA","KYONG","ILEANA","CANDELARIA","TONY","TOBY","SHERIE","OK","MARK","LUCIE","LEATRICE","LAKESHIA","GERDA","EDIE","BAMBI","MARYLIN","LAVON","HORTENSE","GARNET","EVIE","TRESSA","SHAYNA","LAVINA","KYUNG","JEANETTA","SHERRILL","SHARA","PHYLISS","MITTIE","ANABEL","ALESIA","THUY","TAWANDA","RICHARD","JOANIE","TIFFANIE","LASHANDA","KARISSA","ENRIQUETA","DARIA","DANIELLA","CORINNA","ALANNA","ABBEY","ROXANE","ROSEANNA","MAGNOLIA","LIDA","KYLE","JOELLEN","ERA","CORAL","CARLEEN","TRESA","PEGGIE","NOVELLA","NILA","MAYBELLE","JENELLE","CARINA","NOVA","MELINA","MARQUERITE","MARGARETTE","JOSEPHINA","EVONNE","DEVIN","CINTHIA","ALBINA","TOYA","TAWNYA","SHERITA","SANTOS","MYRIAM","LIZABETH","LISE","KEELY","JENNI","GISELLE","CHERYLE","ARDITH","ARDIS","ALESHA","ADRIANE","SHAINA","LINNEA","KAROLYN","HONG","FLORIDA","FELISHA","DORI","DARCI","ARTIE","ARMIDA","ZOLA","XIOMARA","VERGIE","SHAMIKA","NENA","NANNETTE","MAXIE","LOVIE","JEANE","JAIMIE","INGE","FARRAH","ELAINA","CAITLYN","STARR","FELICITAS","CHERLY","CARYL","YOLONDA","YASMIN","TEENA","PRUDENCE","PENNIE","NYDIA","MACKENZIE","ORPHA","MARVEL","LIZBETH","LAURETTE","JERRIE","HERMELINDA","CAROLEE","TIERRA","MIRIAN","META","MELONY","KORI","JENNETTE","JAMILA","ENA","ANH","YOSHIKO","SUSANNAH","SALINA","RHIANNON","JOLEEN","CRISTINE","ASHTON","ARACELY","TOMEKA","SHALONDA","MARTI","LACIE","KALA","JADA","ILSE","HAILEY","BRITTANI","ZONA","SYBLE","SHERRYL","RANDY","NIDIA","MARLO","KANDICE","KANDI","DEB","DEAN","AMERICA","ALYCIA","TOMMY","RONNA","NORENE","MERCY","JOSE","INGEBORG","GIOVANNA","GEMMA","CHRISTEL","AUDRY","ZORA","VITA","VAN","TRISH","STEPHAINE","SHIRLEE","SHANIKA","MELONIE","MAZIE","JAZMIN","INGA","HOA","HETTIE","GERALYN","FONDA","ESTRELLA","ADELLA","SU","SARITA","RINA","MILISSA","MARIBETH","GOLDA","EVON","ETHELYN","ENEDINA","CHERISE","CHANA","VELVA","TAWANNA","SADE","MIRTA","LI","KARIE","JACINTA","ELNA","DAVINA","CIERRA","ASHLIE","ALBERTHA","TANESHA","STEPHANI","NELLE","MINDI","LU","LORINDA","LARUE","FLORENE","DEMETRA","DEDRA","CIARA","CHANTELLE","ASHLY","SUZY","ROSALVA","NOELIA","LYDA","LEATHA","KRYSTYNA","KRISTAN","KARRI","DARLINE","DARCIE","CINDA","CHEYENNE","CHERRIE","AWILDA","ALMEDA","ROLANDA","LANETTE","JERILYN","GISELE","EVALYN","CYNDI","CLETA","CARIN","ZINA","ZENA","VELIA","TANIKA","PAUL","CHARISSA","THOMAS","TALIA","MARGARETE","LAVONDA","KAYLEE","KATHLENE","JONNA","IRENA","ILONA","IDALIA","CANDIS","CANDANCE","BRANDEE","ANITRA","ALIDA","SIGRID","NICOLETTE","MARYJO","LINETTE","HEDWIG","CHRISTIANA","CASSIDY","ALEXIA","TRESSIE","MODESTA","LUPITA","LITA","GLADIS","EVELIA","DAVIDA","CHERRI","CECILY","ASHELY","ANNABEL","AGUSTINA","WANITA","SHIRLY","ROSAURA","HULDA","EUN","BAILEY","YETTA","VERONA","THOMASINA","SIBYL","SHANNAN","MECHELLE","LUE","LEANDRA","LANI","KYLEE","KANDY","JOLYNN","FERNE","EBONI","CORENE","ALYSIA","ZULA","NADA","MOIRA","LYNDSAY","LORRETTA","JUAN","JAMMIE","HORTENSIA","GAYNELL","CAMERON","ADRIA","VINA","VICENTA","TANGELA","STEPHINE","NORINE","NELLA","LIANA","LESLEE","KIMBERELY","ILIANA","GLORY","FELICA","EMOGENE","ELFRIEDE","EDEN","EARTHA","CARMA","BEA","OCIE","MARRY","LENNIE","KIARA","JACALYN","CARLOTA","ARIELLE","YU","STAR","OTILIA","KIRSTIN","KACEY","JOHNETTA","JOEY","JOETTA","JERALDINE","JAUNITA","ELANA","DORTHEA","CAMI","AMADA","ADELIA","VERNITA","TAMAR","SIOBHAN","RENEA","RASHIDA","OUIDA","ODELL","NILSA","MERYL","KRISTYN","JULIETA","DANICA","BREANNE","AUREA","ANGLEA","SHERRON","ODETTE","MALIA","LORELEI","LIN","LEESA","KENNA","KATHLYN","FIONA","CHARLETTE","SUZIE","SHANTELL","SABRA","RACQUEL","MYONG","MIRA","MARTINE","LUCIENNE","LAVADA","JULIANN","JOHNIE","ELVERA","DELPHIA","CLAIR","CHRISTIANE","CHAROLETTE","CARRI","AUGUSTINE","ASHA","ANGELLA","PAOLA","NINFA","LEDA","LAI","EDA","SUNSHINE","STEFANI","SHANELL","PALMA","MACHELLE","LISSA","KECIA","KATHRYNE","KARLENE","JULISSA","JETTIE","JENNIFFER","HUI","CORRINA","CHRISTOPHER","CAROLANN","ALENA","TESS","ROSARIA","MYRTICE","MARYLEE","LIANE","KENYATTA","JUDIE","JANEY","IN","ELMIRA","ELDORA","DENNA","CRISTI","CATHI","ZAIDA","VONNIE","VIVA","VERNIE","ROSALINE","MARIELA","LUCIANA","LESLI","KARAN","FELICE","DENEEN","ADINA","WYNONA","TARSHA","SHERON","SHASTA","SHANITA","SHANI","SHANDRA","RANDA","PINKIE","PARIS","NELIDA","MARILOU","LYLA","LAURENE","LACI","JOI","JANENE","DOROTHA","DANIELE","DANI","CAROLYNN","CARLYN","BERENICE","AYESHA","ANNELIESE","ALETHEA","THERSA","TAMIKO","RUFINA","OLIVA","MOZELL","MARYLYN","MADISON","KRISTIAN","KATHYRN","KASANDRA","KANDACE","JANAE","GABRIEL","DOMENICA","DEBBRA","DANNIELLE","CHUN","BUFFY","BARBIE","ARCELIA","AJA","ZENOBIA","SHAREN","SHAREE","PATRICK","PAGE","MY","LAVINIA","KUM","KACIE","JACKELINE","HUONG","FELISA","EMELIA","ELEANORA","CYTHIA","CRISTIN","CLYDE","CLARIBEL","CARON","ANASTACIA","ZULMA","ZANDRA","YOKO","TENISHA","SUSANN","SHERILYN","SHAY","SHAWANDA","SABINE","ROMANA","MATHILDA","LINSEY","KEIKO","JOANA","ISELA","GRETTA","GEORGETTA","EUGENIE","DUSTY","DESIRAE","DELORA","CORAZON","ANTONINA","ANIKA","WILLENE","TRACEE","TAMATHA","REGAN","NICHELLE","MICKIE","MAEGAN","LUANA","LANITA","KELSIE","EDELMIRA","BREE","AFTON","TEODORA","TAMIE","SHENA","MEG","LINH","KELI","KACI","DANYELLE","BRITT","ARLETTE","ALBERTINE","ADELLE","TIFFINY","STORMY","SIMONA","NUMBERS","NICOLASA","NICHOL","NIA","NAKISHA","MEE","MAIRA","LOREEN","KIZZY","JOHNNY","JAY","FALLON","CHRISTENE","BOBBYE","ANTHONY","YING","VINCENZA","TANJA","RUBIE","RONI","QUEENIE","MARGARETT","KIMBERLI","IRMGARD","IDELL","HILMA","EVELINA","ESTA","EMILEE","DENNISE","DANIA","CARL","CARIE","ANTONIO","WAI","SANG","RISA","RIKKI","PARTICIA","MUI","MASAKO","MARIO","LUVENIA","LOREE","LONI","LIEN","KEVIN","GIGI","FLORENCIA","DORIAN","DENITA","DALLAS","CHI","BILLYE","ALEXANDER","TOMIKA","SHARITA","RANA","NIKOLE","NEOMA","MARGARITE","MADALYN","LUCINA","LAILA","KALI","JENETTE","GABRIELE","EVELYNE","ELENORA","CLEMENTINA","ALEJANDRINA","ZULEMA","VIOLETTE","VANNESSA","THRESA","RETTA","PIA","PATIENCE","NOELLA","NICKIE","JONELL","DELTA","CHUNG","CHAYA","CAMELIA","BETHEL","ANYA","ANDREW","THANH","SUZANN","SPRING","SHU","MILA","LILLA","LAVERNA","KEESHA","KATTIE","GIA","GEORGENE","EVELINE","ESTELL","ELIZBETH","VIVIENNE","VALLIE","TRUDIE","STEPHANE","MICHEL","MAGALY","MADIE","KENYETTA","KARREN","JANETTA","HERMINE","HARMONY","DRUCILLA","DEBBI","CELESTINA","CANDIE","BRITNI","BECKIE","AMINA","ZITA","YUN","YOLANDE","VIVIEN","VERNETTA","TRUDI","SOMMER","PEARLE","PATRINA","OSSIE","NICOLLE","LOYCE","LETTY","LARISA","KATHARINA","JOSELYN","JONELLE","JENELL","IESHA","HEIDE","FLORINDA","FLORENTINA","FLO","ELODIA","DORINE","BRUNILDA","BRIGID","ASHLI","ARDELLA","TWANA","THU","TARAH","SUNG","SHEA","SHAVON","SHANE","SERINA","RAYNA","RAMONITA","NGA","MARGURITE","LUCRECIA","KOURTNEY","KATI","JESUS","JESENIA","DIAMOND","CRISTA","AYANA","ALICA","ALIA","VINNIE","SUELLEN","ROMELIA","RACHELL","PIPER","OLYMPIA","MICHIKO","KATHALEEN","JOLIE","JESSI","JANESSA","HANA","HA","ELEASE","CARLETTA","BRITANY","SHONA","SALOME","ROSAMOND","REGENA","RAINA","NGOC","NELIA","LOUVENIA","LESIA","LATRINA","LATICIA","LARHONDA","JINA","JACKI","HOLLIS","HOLLEY","EMMY","DEEANN","CORETTA","ARNETTA","VELVET","THALIA","SHANICE","NETA","MIKKI","MICKI","LONNA","LEANA","LASHUNDA","KILEY","JOYE","JACQULYN","IGNACIA","HYUN","HIROKO","HENRY","HENRIETTE","ELAYNE","DELINDA","DARNELL","DAHLIA","COREEN","CONSUELA","CONCHITA","CELINE","BABETTE","AYANNA","ANETTE","ALBERTINA","SKYE","SHAWNEE","SHANEKA","QUIANA","PAMELIA","MIN","MERRI","MERLENE","MARGIT","KIESHA","KIERA","KAYLENE","JODEE","JENISE","ERLENE","EMMIE","ELSE","DARYL","DALILA","DAISEY","CODY","CASIE","BELIA","BABARA","VERSIE","VANESA","SHELBA","SHAWNDA","SAM","NORMAN","NIKIA","NAOMA","MARNA","MARGERET","MADALINE","LAWANA","KINDRA","JUTTA","JAZMINE","JANETT","HANNELORE","GLENDORA","GERTRUD","GARNETT","FREEDA","FREDERICA","FLORANCE","FLAVIA","DENNIS","CARLINE","BEVERLEE","ANJANETTE","VALDA","TRINITY","TAMALA","STEVIE","SHONNA","SHA","SARINA","ONEIDA","MICAH","MERILYN","MARLEEN","LURLINE","LENNA","KATHERIN","JIN","JENI","HAE","GRACIA","GLADY","FARAH","ERIC","ENOLA","EMA","DOMINQUE","DEVONA","DELANA","CECILA","CAPRICE","ALYSHA","ALI","ALETHIA","VENA","THERESIA","TAWNY","SONG","SHAKIRA","SAMARA","SACHIKO","RACHELE","PAMELLA","NICKY","MARNI","MARIEL","MAREN","MALISA","LIGIA","LERA","LATORIA","LARAE","KIMBER","KATHERN","KAREY","JENNEFER","JANETH","HALINA","FREDIA","DELISA","DEBROAH","CIERA","CHIN","ANGELIKA","ANDREE","ALTHA","YEN","VIVAN","TERRESA","TANNA","SUK","SUDIE","SOO","SIGNE","SALENA","RONNI","REBBECCA","MYRTIE","MCKENZIE","MALIKA","MAIDA","LOAN","LEONARDA","KAYLEIGH","FRANCE","ETHYL","ELLYN","DAYLE","CAMMIE","BRITTNI","BIRGIT","AVELINA","ASUNCION","ARIANNA","AKIKO","VENICE","TYESHA","TONIE","TIESHA","TAKISHA","STEFFANIE","SINDY","SANTANA","MEGHANN","MANDA","MACIE","LADY","KELLYE","KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS","FERNANDA","FAUSTINA","ENEIDA","ELICIA","DOT","DIGNA","DELL","ARLETTA","ANDRE","WILLIA","TAMMARA","TABETHA","SHERRELL","SARI","REFUGIO","REBBECA","PAULETTA","NIEVES","NATOSHA","NAKITA","MAMMIE","KENISHA","KAZUKO","KASSIE","GARY","EARLEAN","DAPHINE","CORLISS","CLOTILDE","CAROLYNE","BERNETTA","AUGUSTINA","AUDREA","ANNIS","ANNABELL","YAN","TENNILLE","TAMICA","SELENE","SEAN","ROSANA","REGENIA","QIANA","MARKITA","MACY","LEEANNE","LAURINE","KYM","JESSENIA","JANITA","GEORGINE","GENIE","EMIKO","ELVIE","DEANDRA","DAGMAR","CORIE","COLLEN","CHERISH","ROMAINE","PORSHA","PEARLENE","MICHELINE","MERNA","MARGORIE","MARGARETTA","LORE","KENNETH","JENINE","HERMINA","FREDERICKA","ELKE","DRUSILLA","DORATHY","DIONE","DESIRE","CELENA","BRIGIDA","ANGELES","ALLEGRA","THEO","TAMEKIA","SYNTHIA","STEPHEN","SOOK","SLYVIA","ROSANN","REATHA","RAYE","MARQUETTA","MARGART","LING","LAYLA","KYMBERLY","KIANA","KAYLEEN","KATLYN","KARMEN","JOELLA","IRINA","EMELDA","ELENI","DETRA","CLEMMIE","CHERYLL","CHANTELL","CATHEY","ARNITA","ARLA","ANGLE","ANGELIC","ALYSE","ZOFIA","THOMASINE","TENNIE","SON","SHERLY","SHERLEY","SHARYL","REMEDIOS","PETRINA","NICKOLE","MYUNG","MYRLE","MOZELLA","LOUANNE","LISHA","LATIA","LANE","KRYSTA","JULIENNE","JOEL","JEANENE","JACQUALINE","ISAURA","GWENDA","EARLEEN","DONALD","CLEOPATRA","CARLIE","AUDIE","ANTONIETTA","ALISE","ALEX","VERDELL","VAL","TYLER","TOMOKO","THAO","TALISHA","STEVEN","SO","SHEMIKA","SHAUN","SCARLET","SAVANNA","SANTINA","ROSIA","RAEANN","ODILIA","NANA","MINNA","MAGAN","LYNELLE","LE","KARMA","JOEANN","IVANA","INELL","ILANA","HYE","HONEY","HEE","GUDRUN","FRANK","DREAMA","CRISSY","CHANTE","CARMELINA","ARVILLA","ARTHUR","ANNAMAE","ALVERA","ALEIDA","AARON","YEE","YANIRA","VANDA","TIANNA","TAM","STEFANIA","SHIRA","PERRY","NICOL","NANCIE","MONSERRATE","MINH","MELYNDA","MELANY","MATTHEW","LOVELLA","LAURE","KIRBY","KACY","JACQUELYNN","HYON","GERTHA","FRANCISCO","ELIANA","CHRISTENA","CHRISTEEN","CHARISE","CATERINA","CARLEY","CANDYCE","ARLENA","AMMIE","YANG","WILLETTE","VANITA","TUYET","TINY","SYREETA","SILVA","SCOTT","RONALD","PENNEY","NYLA","MICHAL","MAURICE","MARYAM","MARYA","MAGEN","LUDIE","LOMA","LIVIA","LANELL","KIMBERLIE","JULEE","DONETTA","DIEDRA","DENISHA","DEANE","DAWNE","CLARINE","CHERRYL","BRONWYN","BRANDON","ALLA","VALERY","TONDA","SUEANN","SORAYA","SHOSHANA","SHELA","SHARLEEN","SHANELLE","NERISSA","MICHEAL","MERIDITH","MELLIE","MAYE","MAPLE","MAGARET","LUIS","LILI","LEONILA","LEONIE","LEEANNA","LAVONIA","LAVERA","KRISTEL","KATHEY","KATHE","JUSTIN","JULIAN","JIMMY","JANN","ILDA","HILDRED","HILDEGARDE","GENIA","FUMIKO","EVELIN","ERMELINDA","ELLY","DUNG","DOLORIS","DIONNA","DANAE","BERNEICE","ANNICE","ALIX","VERENA","VERDIE","TRISTAN","SHAWNNA","SHAWANA","SHAUNNA","ROZELLA","RANDEE","RANAE","MILAGRO","LYNELL","LUISE","LOUIE","LOIDA","LISBETH","KARLEEN","JUNITA","JONA","ISIS","HYACINTH","HEDY","GWENN","ETHELENE","ERLINE","EDWARD","DONYA","DOMONIQUE","DELICIA","DANNETTE","CICELY","BRANDA","BLYTHE","BETHANN","ASHLYN","ANNALEE","ALLINE","YUKO","VELLA","TRANG","TOWANDA","TESHA","SHERLYN","NARCISA","MIGUELINA","MERI","MAYBELL","MARLANA","MARGUERITA","MADLYN","LUNA","LORY","LORIANN","LIBERTY","LEONORE","LEIGHANN","LAURICE","LATESHA","LARONDA","KATRICE","KASIE","KARL","KALEY","JADWIGA","GLENNIE","GEARLDINE","FRANCINA","EPIFANIA","DYAN","DORIE","DIEDRE","DENESE","DEMETRICE","DELENA","DARBY","CRISTIE","CLEORA","CATARINA","CARISA","BERNIE","BARBERA","ALMETA","TRULA","TEREASA","SOLANGE","SHEILAH","SHAVONNE","SANORA","ROCHELL","MATHILDE","MARGARETA","MAIA","LYNSEY","LAWANNA","LAUNA","KENA","KEENA","KATIA","JAMEY","GLYNDA","GAYLENE","ELVINA","ELANOR","DANUTA","DANIKA","CRISTEN","CORDIE","COLETTA","CLARITA","CARMON","BRYNN","AZUCENA","AUNDREA","ANGELE","YI","WALTER","VERLIE","VERLENE","TAMESHA","SILVANA","SEBRINA","SAMIRA","REDA","RAYLENE","PENNI","PANDORA","NORAH","NOMA","MIREILLE","MELISSIA","MARYALICE","LARAINE","KIMBERY","KARYL","KARINE","KAM","JOLANDA","JOHANA","JESUSA","JALEESA","JAE","JACQUELYNE","IRISH","ILUMINADA","HILARIA","HANH","GENNIE","FRANCIE","FLORETTA","EXIE","EDDA","DREMA","DELPHA","BEV","BARBAR","ASSUNTA","ARDELL","ANNALISA","ALISIA","YUKIKO","YOLANDO","WONDA","WEI","WALTRAUD","VETA","TEQUILA","TEMEKA","TAMEIKA","SHIRLEEN","SHENITA","PIEDAD","OZELLA","MIRTHA","MARILU","KIMIKO","JULIANE","JENICE","JEN","JANAY","JACQUILINE","HILDE","FE","FAE","EVAN","EUGENE","ELOIS","ECHO","DEVORAH","CHAU","BRINDA","BETSEY","ARMINDA","ARACELIS","APRYL","ANNETT","ALISHIA","VEOLA","USHA","TOSHIKO","THEOLA","TASHIA","TALITHA","SHERY","RUDY","RENETTA","REIKO","RASHEEDA","OMEGA","OBDULIA","MIKA","MELAINE","MEGGAN","MARTIN","MARLEN","MARGET","MARCELINE","MANA","MAGDALEN","LIBRADA","LEZLIE","LEXIE","LATASHIA","LASANDRA","KELLE","ISIDRA","ISA","INOCENCIA","GWYN","FRANCOISE","ERMINIA","ERINN","DIMPLE","DEVORA","CRISELDA","ARMANDA","ARIE","ARIANE","ANGELO","ANGELENA","ALLEN","ALIZA","ADRIENE","ADALINE","XOCHITL","TWANNA","TRAN","TOMIKO","TAMISHA","TAISHA","SUSY","SIU","RUTHA","ROXY","RHONA","RAYMOND","OTHA","NORIKO","NATASHIA","MERRIE","MELVIN","MARINDA","MARIKO","MARGERT","LORIS","LIZZETTE","LEISHA","KAILA","KA","JOANNIE","JERRICA","JENE","JANNET","JANEE","JACINDA","HERTA","ELENORE","DORETTA","DELAINE","DANIELL","CLAUDIE","CHINA","BRITTA","APOLONIA","AMBERLY","ALEASE","YURI","YUK","WEN","WANETA","UTE","TOMI","SHARRI","SANDIE","ROSELLE","REYNALDA","RAGUEL","PHYLICIA","PATRIA","OLIMPIA","ODELIA","MITZIE","MITCHELL","MISS","MINDA","MIGNON","MICA","MENDY","MARIVEL","MAILE","LYNETTA","LAVETTE","LAURYN","LATRISHA","LAKIESHA","KIERSTEN","KARY","JOSPHINE","JOLYN","JETTA","JANISE","JACQUIE","IVELISSE","GLYNIS","GIANNA","GAYNELLE","EMERALD","DEMETRIUS","DANYELL","DANILLE","DACIA","CORALEE","CHER","CEOLA","BRETT","BELL","ARIANNE","ALESHIA","YUNG","WILLIEMAE","TROY","TRINH","THORA","TAI","SVETLANA","SHERIKA","SHEMEKA","SHAUNDA","ROSELINE","RICKI","MELDA","MALLIE","LAVONNA","LATINA","LARRY","LAQUANDA","LALA","LACHELLE","KLARA","KANDIS","JOHNA","JEANMARIE","JAYE","HANG","GRAYCE","GERTUDE","EMERITA","EBONIE","CLORINDA","CHING","CHERY","CAROLA","BREANN","BLOSSOM","BERNARDINE","BECKI","ARLETHA","ARGELIA","ARA","ALITA","YULANDA","YON","YESSENIA","TOBI","TASIA","SYLVIE","SHIRL","SHIRELY","SHERIDAN","SHELLA","SHANTELLE","SACHA","ROYCE","REBECKA","REAGAN","PROVIDENCIA","PAULENE","MISHA","MIKI","MARLINE","MARICA","LORITA","LATOYIA","LASONYA","KERSTIN","KENDA","KEITHA","KATHRIN","JAYMIE","JACK","GRICELDA","GINETTE","ERYN","ELINA","ELFRIEDA","DANYEL","CHEREE","CHANELLE","BARRIE","AVERY","AURORE","ANNAMARIA","ALLEEN","AILENE","AIDE","YASMINE","VASHTI","VALENTINE","TREASA","TORY","TIFFANEY","SHERYLL","SHARIE","SHANAE","SAU","RAISA","PA","NEDA","MITSUKO","MIRELLA","MILDA","MARYANNA","MARAGRET","MABELLE","LUETTA","LORINA","LETISHA","LATARSHA","LANELLE","LAJUANA","KRISSY","KARLY","KARENA","JON","JESSIKA","JERICA","JEANELLE","JANUARY","JALISA","JACELYN","IZOLA","IVEY","GREGORY","EUNA","ETHA","DREW","DOMITILA","DOMINICA","DAINA","CREOLA","CARLI","CAMIE","BUNNY","BRITTNY","ASHANTI","ANISHA","ALEEN","ADAH","YASUKO","WINTER","VIKI","VALRIE","TONA","TINISHA","THI","TERISA","TATUM","TANEKA","SIMONNE","SHALANDA","SERITA","RESSIE","REFUGIA","PAZ","OLENE","NA","MERRILL","MARGHERITA","MANDIE","MAN","MAIRE","LYNDIA","LUCI","LORRIANE","LORETA","LEONIA","LAVONA","LASHAWNDA","LAKIA","KYOKO","KRYSTINA","KRYSTEN","KENIA","KELSI","JUDE","JEANICE","ISOBEL","GEORGIANN","GENNY","FELICIDAD","EILENE","DEON","DELOISE","DEEDEE","DANNIE","CONCEPTION","CLORA","CHERILYN","CHANG","CALANDRA","BERRY","ARMANDINA","ANISA","ULA","TIMOTHY","TIERA","THERESSA","STEPHANIA","SIMA","SHYLA","SHONTA","SHERA","SHAQUITA","SHALA","SAMMY","ROSSANA","NOHEMI","NERY","MORIAH","MELITA","MELIDA","MELANI","MARYLYNN","MARISHA","MARIETTE","MALORIE","MADELENE","LUDIVINA","LORIA","LORETTE","LORALEE","LIANNE","LEON","LAVENIA","LAURINDA","LASHON","KIT","KIMI","KEILA","KATELYNN","KAI","JONE","JOANE","JI","JAYNA","JANELLA","JA","HUE","HERTHA","FRANCENE","ELINORE","DESPINA","DELSIE","DEEDRA","CLEMENCIA","CARRY","CAROLIN","CARLOS","BULAH","BRITTANIE","BOK","BLONDELL","BIBI","BEAULAH","BEATA","ANNITA","AGRIPINA","VIRGEN","VALENE","UN","TWANDA","TOMMYE","TOI","TARRA","TARI","TAMMERA","SHAKIA","SADYE","RUTHANNE","ROCHEL","RIVKA","PURA","NENITA","NATISHA","MING","MERRILEE","MELODEE","MARVIS","LUCILLA","LEENA","LAVETA","LARITA","LANIE","KEREN","ILEEN","GEORGEANN","GENNA","GENESIS","FRIDA","EWA","EUFEMIA","EMELY","ELA","EDYTH","DEONNA","DEADRA","DARLENA","CHANELL","CHAN","CATHERN","CASSONDRA","CASSAUNDRA","BERNARDA","BERNA","ARLINDA","ANAMARIA","ALBERT","WESLEY","VERTIE","VALERI","TORRI","TATYANA","STASIA","SHERISE","SHERILL","SEASON","SCOTTIE","SANDA","RUTHE","ROSY","ROBERTO","ROBBI","RANEE","QUYEN","PEARLY","PALMIRA","ONITA","NISHA","NIESHA","NIDA","NEVADA","NAM","MERLYN","MAYOLA","MARYLOUISE","MARYLAND","MARX","MARTH","MARGENE","MADELAINE","LONDA","LEONTINE","LEOMA","LEIA","LAWRENCE","LAURALEE","LANORA","LAKITA","KIYOKO","KETURAH","KATELIN","KAREEN","JONIE","JOHNETTE","JENEE","JEANETT","IZETTA","HIEDI","HEIKE","HASSIE","HAROLD","GIUSEPPINA","GEORGANN","FIDELA","FERNANDE","ELWANDA","ELLAMAE","ELIZ","DUSTI","DOTTY","CYNDY","CORALIE","CELESTA","ARGENTINA","ALVERTA","XENIA","WAVA","VANETTA","TORRIE","TASHINA","TANDY","TAMBRA","TAMA","STEPANIE","SHILA","SHAUNTA","SHARAN","SHANIQUA","SHAE","SETSUKO","SERAFINA","SANDEE","ROSAMARIA","PRISCILA","OLINDA","NADENE","MUOI","MICHELINA","MERCEDEZ","MARYROSE","MARIN","MARCENE","MAO","MAGALI","MAFALDA","LOGAN","LINN","LANNIE","KAYCE","KAROLINE","KAMILAH","KAMALA","JUSTA","JOLINE","JENNINE","JACQUETTA","IRAIDA","GERALD","GEORGEANNA","FRANCHESCA","FAIRY","EMELINE","ELANE","EHTEL","EARLIE","DULCIE","DALENE","CRIS","CLASSIE","CHERE","CHARIS","CAROYLN","CARMINA","CARITA","BRIAN","BETHANIE","AYAKO","ARICA","AN","ALYSA","ALESSANDRA","AKILAH","ADRIEN","ZETTA","YOULANDA","YELENA","YAHAIRA","XUAN","WENDOLYN","VICTOR","TIJUANA","TERRELL","TERINA","TERESIA","SUZI","SUNDAY","SHERELL","SHAVONDA","SHAUNTE","SHARDA","SHAKITA","SENA","RYANN","RUBI","RIVA","REGINIA","REA","RACHAL","PARTHENIA","PAMULA","MONNIE","MONET","MICHAELE","MELIA","MARINE","MALKA","MAISHA","LISANDRA","LEO","LEKISHA","LEAN","LAURENCE","LAKENDRA","KRYSTIN","KORTNEY","KIZZIE","KITTIE","KERA","KENDAL","KEMBERLY","KANISHA","JULENE","JULE","JOSHUA","JOHANNE","JEFFREY","JAMEE","HAN","HALLEY","GIDGET","GALINA","FREDRICKA","FLETA","FATIMAH","EUSEBIA","ELZA","ELEONORE","DORTHEY","DORIA","DONELLA","DINORAH","DELORSE","CLARETHA","CHRISTINIA","CHARLYN","BONG","BELKIS","AZZIE","ANDERA","AIKO","ADENA","YER","YAJAIRA","WAN","VANIA","ULRIKE","TOSHIA","TIFANY","STEFANY","SHIZUE","SHENIKA","SHAWANNA","SHAROLYN","SHARILYN","SHAQUANA","SHANTAY","SEE","ROZANNE","ROSELEE","RICKIE","REMONA","REANNA","RAELENE","QUINN","PHUNG","PETRONILA","NATACHA","NANCEY","MYRL","MIYOKO","MIESHA","MERIDETH","MARVELLA","MARQUITTA","MARHTA","MARCHELLE","LIZETH","LIBBIE","LAHOMA","LADAWN","KINA","KATHELEEN","KATHARYN","KARISA","KALEIGH","JUNIE","JULIEANN","JOHNSIE","JANEAN","JAIMEE","JACKQUELINE","HISAKO","HERMA","HELAINE","GWYNETH","GLENN","GITA","EUSTOLIA","EMELINA","ELIN","EDRIS","DONNETTE","DONNETTA","DIERDRE","DENAE","DARCEL","CLAUDE","CLARISA","CINDERELLA","CHIA","CHARLESETTA","CHARITA","CELSA","CASSY","CASSI","CARLEE","BRUNA","BRITTANEY","BRANDE","BILLI","BAO","ANTONETTA","ANGLA","ANGELYN","ANALISA","ALANE","WENONA","WENDIE","VERONIQUE","VANNESA","TOBIE","TEMPIE","SUMIKO","SULEMA","SPARKLE","SOMER","SHEBA","SHAYNE","SHARICE","SHANEL","SHALON","SAGE","ROY","ROSIO","ROSELIA","RENAY","REMA","REENA","PORSCHE","PING","PEG","OZIE","ORETHA","ORALEE","ODA","NU","NGAN","NAKESHA","MILLY","MARYBELLE","MARLIN","MARIS","MARGRETT","MARAGARET","MANIE","LURLENE","LILLIA","LIESELOTTE","LAVELLE","LASHAUNDA","LAKEESHA","KEITH","KAYCEE","KALYN","JOYA","JOETTE","JENAE","JANIECE","ILLA","GRISEL","GLAYDS","GENEVIE","GALA","FREDDA","FRED","ELMER","ELEONOR","DEBERA","DEANDREA","DAN","CORRINNE","CORDIA","CONTESSA","COLENE","CLEOTILDE","CHARLOTT","CHANTAY","CECILLE","BEATRIS","AZALEE","ARLEAN","ARDATH","ANJELICA","ANJA","ALFREDIA","ALEISHA","ADAM","ZADA","YUONNE","XIAO","WILLODEAN","WHITLEY","VENNIE","VANNA","TYISHA","TOVA","TORIE","TONISHA","TILDA","TIEN","TEMPLE","SIRENA","SHERRIL","SHANTI","SHAN","SENAIDA","SAMELLA","ROBBYN","RENDA","REITA","PHEBE","PAULITA","NOBUKO","NGUYET","NEOMI","MOON","MIKAELA","MELANIA","MAXIMINA","MARG","MAISIE","LYNNA","LILLI","LAYNE","LASHAUN","LAKENYA","LAEL","KIRSTIE","KATHLINE","KASHA","KARLYN","KARIMA","JOVAN","JOSEFINE","JENNELL","JACQUI","JACKELYN","HYO","HIEN","GRAZYNA","FLORRIE","FLORIA","ELEONORA","DWANA","DORLA","DONG","DELMY","DEJA","DEDE","DANN","CRYSTA","CLELIA","CLARIS","CLARENCE","CHIEKO","CHERLYN","CHERELLE","CHARMAIN","CHARA","CAMMY","BEE","ARNETTE","ARDELLE","ANNIKA","AMIEE","AMEE","ALLENA","YVONE","YUKI","YOSHIE","YEVETTE","YAEL","WILLETTA","VONCILE","VENETTA","TULA","TONETTE","TIMIKA","TEMIKA","TELMA","TEISHA","TAREN","TA","STACEE","SHIN","SHAWNTA","SATURNINA","RICARDA","POK","PASTY","ONIE","NUBIA","MORA","MIKE","MARIELLE","MARIELLA","MARIANELA","MARDELL","MANY","LUANNA","LOISE","LISABETH","LINDSY","LILLIANA","LILLIAM","LELAH","LEIGHA","LEANORA","LANG","KRISTEEN","KHALILAH","KEELEY","KANDRA","JUNKO","JOAQUINA","JERLENE","JANI","JAMIKA","JAME","HSIU","HERMILA","GOLDEN","GENEVIVE","EVIA","EUGENA","EMMALINE","ELFREDA","ELENE","DONETTE","DELCIE","DEEANNA","DARCEY","CUC","CLARINDA","CIRA","CHAE","CELINDA","CATHERYN","CATHERIN","CASIMIRA","CARMELIA","CAMELLIA","BREANA","BOBETTE","BERNARDINA","BEBE","BASILIA","ARLYNE","AMAL","ALAYNA","ZONIA","ZENIA","YURIKO","YAEKO","WYNELL","WILLOW","WILLENA","VERNIA","TU","TRAVIS","TORA","TERRILYN","TERICA","TENESHA","TAWNA","TAJUANA","TAINA","STEPHNIE","SONA","SOL","SINA","SHONDRA","SHIZUKO","SHERLENE","SHERICE","SHARIKA","ROSSIE","ROSENA","RORY","RIMA","RIA","RHEBA","RENNA","PETER","NATALYA","NANCEE","MELODI","MEDA","MAXIMA","MATHA","MARKETTA","MARICRUZ","MARCELENE","MALVINA","LUBA","LOUETTA","LEIDA","LECIA","LAURAN","LASHAWNA","LAINE","KHADIJAH","KATERINE","KASI","KALLIE","JULIETTA","JESUSITA","JESTINE","JESSIA","JEREMY","JEFFIE","JANYCE","ISADORA","GEORGIANNE","FIDELIA","EVITA","EURA","EULAH","ESTEFANA","ELSY","ELIZABET","ELADIA","DODIE","DION","DIA","DENISSE","DELORAS","DELILA","DAYSI","DAKOTA","CURTIS","CRYSTLE","CONCHA","COLBY","CLARETTA","CHU","CHRISTIA","CHARLSIE","CHARLENA","CARYLON","BETTYANN","ASLEY","ASHLEA","AMIRA","AI","AGUEDA","AGNUS","YUETTE","VINITA","VICTORINA","TYNISHA","TREENA","TOCCARA","TISH","THOMASENA","TEGAN","SOILA","SHILOH","SHENNA","SHARMAINE","SHANTAE","SHANDI","SEPTEMBER","SARAN","SARAI","SANA","SAMUEL","SALLEY","ROSETTE","ROLANDE","REGINE","OTELIA","OSCAR","OLEVIA","NICHOLLE","NECOLE","NAIDA","MYRTA","MYESHA","MITSUE","MINTA","MERTIE","MARGY","MAHALIA","MADALENE","LOVE","LOURA","LOREAN","LEWIS","LESHA","LEONIDA","LENITA","LAVONE","LASHELL","LASHANDRA","LAMONICA","KIMBRA","KATHERINA","KARRY","KANESHA","JULIO","JONG","JENEVA","JAQUELYN","HWA","GILMA","GHISLAINE","GERTRUDIS","FRANSISCA","FERMINA","ETTIE","ETSUKO","ELLIS","ELLAN","ELIDIA","EDRA","DORETHEA","DOREATHA","DENYSE","DENNY","DEETTA","DAINE","CYRSTAL","CORRIN","CAYLA","CARLITA","CAMILA","BURMA","BULA","BUENA","BLAKE","BARABARA","AVRIL","AUSTIN","ALAINE","ZANA","WILHEMINA","WANETTA","VIRGIL","VI","VERONIKA","VERNON","VERLINE","VASILIKI","TONITA","TISA","TEOFILA","TAYNA","TAUNYA","TANDRA","TAKAKO","SUNNI","SUANNE","SIXTA","SHARELL","SEEMA","RUSSELL","ROSENDA","ROBENA","RAYMONDE","PEI","PAMILA","OZELL","NEIDA","NEELY","MISTIE","MICHA","MERISSA","MAURITA","MARYLN","MARYETTA","MARSHALL","MARCELL","MALENA","MAKEDA","MADDIE","LOVETTA","LOURIE","LORRINE","LORILEE","LESTER","LAURENA","LASHAY","LARRAINE","LAREE","LACRESHA","KRISTLE","KRISHNA","KEVA","KEIRA","KAROLE","JOIE","JINNY","JEANNETTA","JAMA","HEIDY","GILBERTE","GEMA","FAVIOLA","EVELYNN","ENDA","ELLI","ELLENA","DIVINA","DAGNY","COLLENE","CODI","CINDIE","CHASSIDY","CHASIDY","CATRICE","CATHERINA","CASSEY","CAROLL","CARLENA","CANDRA","CALISTA","BRYANNA","BRITTENY","BEULA","BARI","AUDRIE","AUDRIA","ARDELIA","ANNELLE","ANGILA","ALONA","ALLYN","DOUGLAS","ROGER","JONATHAN","RALPH","NICHOLAS","BENJAMIN","BRUCE","HARRY","WAYNE","STEVE","HOWARD","ERNEST","PHILLIP","TODD","CRAIG","ALAN","PHILIP","EARL","DANNY","BRYAN","STANLEY","LEONARD","NATHAN","MANUEL","RODNEY","MARVIN","VINCENT","JEFFERY","JEFF","CHAD","JACOB","ALFRED","BRADLEY","HERBERT","FREDERICK","EDWIN","DON","RICKY","RANDALL","BARRY","BERNARD","LEROY","MARCUS","THEODORE","CLIFFORD","MIGUEL","JIM","TOM","CALVIN","BILL","LLOYD","DEREK","WARREN","DARRELL","JEROME","FLOYD","ALVIN","TIM","GORDON","GREG","JORGE","DUSTIN","PEDRO","DERRICK","ZACHARY","HERMAN","GLEN","HECTOR","RICARDO","RICK","BRENT","RAMON","GILBERT","MARC","REGINALD","RUBEN","NATHANIEL","RAFAEL","EDGAR","MILTON","RAUL","BEN","CHESTER","DUANE","FRANKLIN","BRAD","RON","ROLAND","ARNOLD","HARVEY","JARED","ERIK","DARRYL","NEIL","JAVIER","FERNANDO","CLINTON","TED","MATHEW","TYRONE","DARREN","LANCE","KURT","ALLAN","NELSON","GUY","CLAYTON","HUGH","MAX","DWAYNE","DWIGHT","ARMANDO","FELIX","EVERETT","IAN","WALLACE","KEN","BOB","ALFREDO","ALBERTO","DAVE","IVAN","BYRON","ISAAC","MORRIS","CLIFTON","WILLARD","ROSS","ANDY","SALVADOR","KIRK","SERGIO","SETH","KENT","TERRANCE","EDUARDO","TERRENCE","ENRIQUE","WADE","STUART","FREDRICK","ARTURO","ALEJANDRO","NICK","LUTHER","WENDELL","JEREMIAH","JULIUS","OTIS","TREVOR","OLIVER","LUKE","HOMER","GERARD","DOUG","KENNY","HUBERT","LYLE","MATT","ALFONSO","ORLANDO","REX","CARLTON","ERNESTO","NEAL","PABLO","LORENZO","OMAR","WILBUR","GRANT","HORACE","RODERICK","ABRAHAM","WILLIS","RICKEY","ANDRES","CESAR","JOHNATHAN","MALCOLM","RUDOLPH","DAMON","KELVIN","PRESTON","ALTON","ARCHIE","MARCO","WM","PETE","RANDOLPH","GARRY","GEOFFREY","JONATHON","FELIPE","GERARDO","ED","DOMINIC","DELBERT","COLIN","GUILLERMO","EARNEST","LUCAS","BENNY","SPENCER","RODOLFO","MYRON","EDMUND","GARRETT","SALVATORE","CEDRIC","LOWELL","GREGG","SHERMAN","WILSON","SYLVESTER","ROOSEVELT","ISRAEL","JERMAINE","FORREST","WILBERT","LELAND","SIMON","CLARK","IRVING","BRYANT","OWEN","RUFUS","WOODROW","KRISTOPHER","MACK","LEVI","MARCOS","GUSTAVO","JAKE","LIONEL","GILBERTO","CLINT","NICOLAS","ISMAEL","ORVILLE","ERVIN","DEWEY","AL","WILFRED","JOSH","HUGO","IGNACIO","CALEB","TOMAS","SHELDON","ERICK","STEWART","DOYLE","DARREL","ROGELIO","TERENCE","SANTIAGO","ALONZO","ELIAS","BERT","ELBERT","RAMIRO","CONRAD","NOAH","GRADY","PHIL","CORNELIUS","LAMAR","ROLANDO","CLAY","PERCY","DEXTER","BRADFORD","DARIN","AMOS","MOSES","IRVIN","SAUL","ROMAN","RANDAL","TIMMY","DARRIN","WINSTON","BRENDAN","ABEL","DOMINICK","BOYD","EMILIO","ELIJAH","DOMINGO","EMMETT","MARLON","EMANUEL","JERALD","EDMOND","EMIL","DEWAYNE","WILL","OTTO","TEDDY","REYNALDO","BRET","JESS","TRENT","HUMBERTO","EMMANUEL","STEPHAN","VICENTE","LAMONT","GARLAND","MILES","EFRAIN","HEATH","RODGER","HARLEY","ETHAN","ELDON","ROCKY","PIERRE","JUNIOR","FREDDY","ELI","BRYCE","ANTOINE","STERLING","CHASE","GROVER","ELTON","CLEVELAND","DYLAN","CHUCK","DAMIAN","REUBEN","STAN","AUGUST","LEONARDO","JASPER","RUSSEL","ERWIN","BENITO","HANS","MONTE","BLAINE","ERNIE","CURT","QUENTIN","AGUSTIN","MURRAY","JAMAL","ADOLFO","HARRISON","TYSON","BURTON","BRADY","ELLIOTT","WILFREDO","BART","JARROD","VANCE","DENIS","DAMIEN","JOAQUIN","HARLAN","DESMOND","ELLIOT","DARWIN","GREGORIO","BUDDY","XAVIER","KERMIT","ROSCOE","ESTEBAN","ANTON","SOLOMON","SCOTTY","NORBERT","ELVIN","WILLIAMS","NOLAN","ROD","QUINTON","HAL","BRAIN","ROB","ELWOOD","KENDRICK","DARIUS","MOISES","FIDEL","THADDEUS","CLIFF","MARCEL","JACKSON","RAPHAEL","BRYON","ARMAND","ALVARO","JEFFRY","DANE","JOESPH","THURMAN","NED","RUSTY","MONTY","FABIAN","REGGIE","MASON","GRAHAM","ISAIAH","VAUGHN","GUS","LOYD","DIEGO","ADOLPH","NORRIS","MILLARD","ROCCO","GONZALO","DERICK","RODRIGO","WILEY","RIGOBERTO","ALPHONSO","TY","NOE","VERN","REED","JEFFERSON","ELVIS","BERNARDO","MAURICIO","HIRAM","DONOVAN","BASIL","RILEY","NICKOLAS","MAYNARD","SCOT","VINCE","QUINCY","EDDY","SEBASTIAN","FEDERICO","ULYSSES","HERIBERTO","DONNELL","COLE","DAVIS","GAVIN","EMERY","WARD","ROMEO","JAYSON","DANTE","CLEMENT","COY","MAXWELL","JARVIS","BRUNO","ISSAC","DUDLEY","BROCK","SANFORD","CARMELO","BARNEY","NESTOR","STEFAN","DONNY","ART","LINWOOD","BEAU","WELDON","GALEN","ISIDRO","TRUMAN","DELMAR","JOHNATHON","SILAS","FREDERIC","DICK","IRWIN","MERLIN","CHARLEY","MARCELINO","HARRIS","CARLO","TRENTON","KURTIS","HUNTER","AURELIO","WINFRED","VITO","COLLIN","DENVER","CARTER","LEONEL","EMORY","PASQUALE","MOHAMMAD","MARIANO","DANIAL","LANDON","DIRK","BRANDEN","ADAN","BUFORD","GERMAN","WILMER","EMERSON","ZACHERY","FLETCHER","JACQUES","ERROL","DALTON","MONROE","JOSUE","EDWARDO","BOOKER","WILFORD","SONNY","SHELTON","CARSON","THERON","RAYMUNDO","DAREN","HOUSTON","ROBBY","LINCOLN","GENARO","BENNETT","OCTAVIO","CORNELL","HUNG","ARRON","ANTONY","HERSCHEL","GIOVANNI","GARTH","CYRUS","CYRIL","RONNY","LON","FREEMAN","DUNCAN","KENNITH","CARMINE","ERICH","CHADWICK","WILBURN","RUSS","REID","MYLES","ANDERSON","MORTON","JONAS","FOREST","MITCHEL","MERVIN","ZANE","RICH","JAMEL","LAZARO","ALPHONSE","RANDELL","MAJOR","JARRETT","BROOKS","ABDUL","LUCIANO","SEYMOUR","EUGENIO","MOHAMMED","VALENTIN","CHANCE","ARNULFO","LUCIEN","FERDINAND","THAD","EZRA","ALDO","RUBIN","ROYAL","MITCH","EARLE","ABE","WYATT","MARQUIS","LANNY","KAREEM","JAMAR","BORIS","ISIAH","EMILE","ELMO","ARON","LEOPOLDO","EVERETTE","JOSEF","ELOY","RODRICK","REINALDO","LUCIO","JERROD","WESTON","HERSHEL","BARTON","PARKER","LEMUEL","BURT","JULES","GIL","ELISEO","AHMAD","NIGEL","EFREN","ANTWAN","ALDEN","MARGARITO","COLEMAN","DINO","OSVALDO","LES","DEANDRE","NORMAND","KIETH","TREY","NORBERTO","NAPOLEON","JEROLD","FRITZ","ROSENDO","MILFORD","CHRISTOPER","ALFONZO","LYMAN","JOSIAH","BRANT","WILTON","RICO","JAMAAL","DEWITT","BRENTON","OLIN","FOSTER","FAUSTINO","CLAUDIO","JUDSON","GINO","EDGARDO","ALEC","TANNER","JARRED","DONN","TAD","PRINCE","PORFIRIO","ODIS","LENARD","CHAUNCEY","TOD","MEL","MARCELO","KORY","AUGUSTUS","KEVEN","HILARIO","BUD","SAL","ORVAL","MAURO","ZACHARIAH","OLEN","ANIBAL","MILO","JED","DILLON","AMADO","NEWTON","LENNY","RICHIE","HORACIO","BRICE","MOHAMED","DELMER","DARIO","REYES","MAC","JONAH","JERROLD","ROBT","HANK","RUPERT","ROLLAND","KENTON","DAMION","ANTONE","WALDO","FREDRIC","BRADLY","KIP","BURL","WALKER","TYREE","JEFFEREY","AHMED","WILLY","STANFORD","OREN","NOBLE","MOSHE","MIKEL","ENOCH","BRENDON","QUINTIN","JAMISON","FLORENCIO","DARRICK","TOBIAS","HASSAN","GIUSEPPE","DEMARCUS","CLETUS","TYRELL","LYNDON","KEENAN","WERNER","GERALDO","COLUMBUS","CHET","BERTRAM","MARKUS","HUEY","HILTON","DWAIN","DONTE","TYRON","OMER","ISAIAS","HIPOLITO","FERMIN","ADALBERTO","BO","BARRETT","TEODORO","MCKINLEY","MAXIMO","GARFIELD","RALEIGH","LAWERENCE","ABRAM","RASHAD","KING","EMMITT","DARON","SAMUAL","MIQUEL","EUSEBIO","DOMENIC","DARRON","BUSTER","WILBER","RENATO","JC","HOYT","HAYWOOD","EZEKIEL","CHAS","FLORENTINO","ELROY","CLEMENTE","ARDEN","NEVILLE","EDISON","DESHAWN","NATHANIAL","JORDON","DANILO","CLAUD","SHERWOOD","RAYMON","RAYFORD","CRISTOBAL","AMBROSE","TITUS","HYMAN","FELTON","EZEQUIEL","ERASMO","STANTON","LONNY","LEN","IKE","MILAN","LINO","JAROD","HERB","ANDREAS","WALTON","RHETT","PALMER","DOUGLASS","CORDELL","OSWALDO","ELLSWORTH","VIRGILIO","TONEY","NATHANAEL","DEL","BENEDICT","MOSE","JOHNSON","ISREAL","GARRET","FAUSTO","ASA","ARLEN","ZACK","WARNER","MODESTO","FRANCESCO","MANUAL","GAYLORD","GASTON","FILIBERTO","DEANGELO","MICHALE","GRANVILLE","WES","MALIK","ZACKARY","TUAN","ELDRIDGE","CRISTOPHER","CORTEZ","ANTIONE","MALCOM","LONG","KOREY","JOSPEH","COLTON","WAYLON","VON","HOSEA","SHAD","SANTO","RUDOLF","ROLF","REY","RENALDO","MARCELLUS","LUCIUS","KRISTOFER","BOYCE","BENTON","HAYDEN","HARLAND","ARNOLDO","RUEBEN","LEANDRO","KRAIG","JERRELL","JEROMY","HOBERT","CEDRICK","ARLIE","WINFORD","WALLY","LUIGI","KENETH","JACINTO","GRAIG","FRANKLYN","EDMUNDO","SID","PORTER","LEIF","JERAMY","BUCK","WILLIAN","VINCENZO","SHON","LYNWOOD","JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO" \ No newline at end of file diff --git a/project_euler/problem_022/sol1.py b/project_euler/problem_022/sol1.py deleted file mode 100644 index c4af5dfa81df..000000000000 --- a/project_euler/problem_022/sol1.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Name scores -Problem 22 - -Using names.txt (right click and 'Save Link/Target As...'), a 46K text file -containing over five-thousand first names, begin by sorting it into -alphabetical order. Then working out the alphabetical value for each name, -multiply this value by its alphabetical position in the list to obtain a name -score. - -For example, when the list is sorted into alphabetical order, COLIN, which is -worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would -obtain a score of 938 x 53 = 49714. - -What is the total of all the name scores in the file? -""" - -import os - - -def solution(): - """Returns the total of all the name scores in the file. - - >>> solution() - 871198282 - """ - with open(os.path.dirname(__file__) + "/p022_names.txt") as file: - names = str(file.readlines()[0]) - names = names.replace('"', "").split(",") - - names.sort() - - name_score = 0 - total_score = 0 - - for i, name in enumerate(names): - for letter in name: - name_score += ord(letter) - 64 - - total_score += (i + 1) * name_score - name_score = 0 - return total_score - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_022/sol2.py b/project_euler/problem_022/sol2.py deleted file mode 100644 index 9c22b6bba0cc..000000000000 --- a/project_euler/problem_022/sol2.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Name scores -Problem 22 - -Using names.txt (right click and 'Save Link/Target As...'), a 46K text file -containing over five-thousand first names, begin by sorting it into -alphabetical order. Then working out the alphabetical value for each name, -multiply this value by its alphabetical position in the list to obtain a name -score. - -For example, when the list is sorted into alphabetical order, COLIN, which is -worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would -obtain a score of 938 x 53 = 49714. - -What is the total of all the name scores in the file? -""" - -import os - - -def solution(): - """Returns the total of all the name scores in the file. - - >>> solution() - 871198282 - """ - total_sum = 0 - temp_sum = 0 - with open(os.path.dirname(__file__) + "/p022_names.txt") as file: - name = str(file.readlines()[0]) - name = name.replace('"', "").split(",") - - name.sort() - for i in range(len(name)): - for j in name[i]: - temp_sum += ord(j) - ord("A") + 1 - total_sum += (i + 1) * temp_sum - temp_sum = 0 - return total_sum - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_023/__init__.py b/project_euler/problem_023/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_023/sol1.py b/project_euler/problem_023/sol1.py deleted file mode 100644 index 9fdf7284a3fd..000000000000 --- a/project_euler/problem_023/sol1.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -A perfect number is a number for which the sum of its proper divisors is exactly -equal to the number. For example, the sum of the proper divisors of 28 would be -1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number. - -A number n is called deficient if the sum of its proper divisors is less than n -and it is called abundant if this sum exceeds n. - -As 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest -number that can be written as the sum of two abundant numbers is 24. By -mathematical analysis, it can be shown that all integers greater than 28123 -can be written as the sum of two abundant numbers. However, this upper limit -cannot be reduced any further by analysis even though it is known that the -greatest number that cannot be expressed as the sum of two abundant numbers -is less than this limit. - -Find the sum of all the positive integers which cannot be written as the sum -of two abundant numbers. -""" - - -def solution(limit=28123): - """ - Finds the sum of all the positive integers which cannot be written as - the sum of two abundant numbers - as described by the statement above. - - >>> solution() - 4179871 - """ - sum_divs = [1] * (limit + 1) - - for i in range(2, int(limit**0.5) + 1): - sum_divs[i * i] += i - for k in range(i + 1, limit // i + 1): - sum_divs[k * i] += k + i - - abundants = set() - res = 0 - - for n in range(1, limit + 1): - if sum_divs[n] > n: - abundants.add(n) - - if not any((n - a in abundants) for a in abundants): - res += n - - return res - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_024/__init__.py b/project_euler/problem_024/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_024/sol1.py b/project_euler/problem_024/sol1.py deleted file mode 100644 index 3fb1bd4ec582..000000000000 --- a/project_euler/problem_024/sol1.py +++ /dev/null @@ -1,28 +0,0 @@ -""" -A permutation is an ordered arrangement of objects. For example, 3124 is one -possible permutation of the digits 1, 2, 3 and 4. If all of the permutations -are listed numerically or alphabetically, we call it lexicographic order. The -lexicographic permutations of 0, 1 and 2 are: - - 012 021 102 120 201 210 - -What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, -6, 7, 8 and 9? -""" - -from itertools import permutations - - -def solution(): - """Returns the millionth lexicographic permutation of the digits 0, 1, 2, - 3, 4, 5, 6, 7, 8 and 9. - - >>> solution() - '2783915460' - """ - result = list(map("".join, permutations("0123456789"))) - return result[999999] - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_025/__init__.py b/project_euler/problem_025/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_025/sol1.py b/project_euler/problem_025/sol1.py deleted file mode 100644 index b3bbb56d20be..000000000000 --- a/project_euler/problem_025/sol1.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -The Fibonacci sequence is defined by the recurrence relation: - - Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1. - -Hence the first 12 terms will be: - - F1 = 1 - F2 = 1 - F3 = 2 - F4 = 3 - F5 = 5 - F6 = 8 - F7 = 13 - F8 = 21 - F9 = 34 - F10 = 55 - F11 = 89 - F12 = 144 - -The 12th term, F12, is the first term to contain three digits. - -What is the index of the first term in the Fibonacci sequence to contain 1000 -digits? -""" - - -def fibonacci(n: int) -> int: - """ - Computes the Fibonacci number for input n by iterating through n numbers - and creating an array of ints using the Fibonacci formula. - Returns the nth element of the array. - - >>> fibonacci(2) - 1 - >>> fibonacci(3) - 2 - >>> fibonacci(5) - 5 - >>> fibonacci(10) - 55 - >>> fibonacci(12) - 144 - - """ - if n == 1 or not isinstance(n, int): - return 0 - elif n == 2: - return 1 - else: - sequence = [0, 1] - for i in range(2, n + 1): - sequence.append(sequence[i - 1] + sequence[i - 2]) - - return sequence[n] - - -def fibonacci_digits_index(n: int) -> int: - """ - Computes incrementing Fibonacci numbers starting from 3 until the length - of the resulting Fibonacci result is the input value n. Returns the term - of the Fibonacci sequence where this occurs. - - >>> fibonacci_digits_index(1000) - 4782 - >>> fibonacci_digits_index(100) - 476 - >>> fibonacci_digits_index(50) - 237 - >>> fibonacci_digits_index(3) - 12 - """ - digits = 0 - index = 2 - - while digits < n: - index += 1 - digits = len(str(fibonacci(index))) - - return index - - -def solution(n: int = 1000) -> int: - """ - Returns the index of the first term in the Fibonacci sequence to contain - n digits. - - >>> solution(1000) - 4782 - >>> solution(100) - 476 - >>> solution(50) - 237 - >>> solution(3) - 12 - """ - return fibonacci_digits_index(n) - - -if __name__ == "__main__": - print(solution(int(str(input()).strip()))) diff --git a/project_euler/problem_025/sol2.py b/project_euler/problem_025/sol2.py deleted file mode 100644 index a0f056023bc9..000000000000 --- a/project_euler/problem_025/sol2.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -The Fibonacci sequence is defined by the recurrence relation: - - Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1. - -Hence the first 12 terms will be: - - F1 = 1 - F2 = 1 - F3 = 2 - F4 = 3 - F5 = 5 - F6 = 8 - F7 = 13 - F8 = 21 - F9 = 34 - F10 = 55 - F11 = 89 - F12 = 144 - -The 12th term, F12, is the first term to contain three digits. - -What is the index of the first term in the Fibonacci sequence to contain 1000 -digits? -""" - -from collections.abc import Generator - - -def fibonacci_generator() -> Generator[int, None, None]: - """ - A generator that produces numbers in the Fibonacci sequence - - >>> generator = fibonacci_generator() - >>> next(generator) - 1 - >>> next(generator) - 2 - >>> next(generator) - 3 - >>> next(generator) - 5 - >>> next(generator) - 8 - """ - a, b = 0, 1 - while True: - a, b = b, a + b - yield b - - -def solution(n: int = 1000) -> int: - """Returns the index of the first term in the Fibonacci sequence to contain - n digits. - - >>> solution(1000) - 4782 - >>> solution(100) - 476 - >>> solution(50) - 237 - >>> solution(3) - 12 - """ - answer = 1 - gen = fibonacci_generator() - while len(str(next(gen))) < n: - answer += 1 - return answer + 1 - - -if __name__ == "__main__": - print(solution(int(str(input()).strip()))) diff --git a/project_euler/problem_025/sol3.py b/project_euler/problem_025/sol3.py deleted file mode 100644 index e33b159ac65c..000000000000 --- a/project_euler/problem_025/sol3.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -The Fibonacci sequence is defined by the recurrence relation: - - Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1. - -Hence the first 12 terms will be: - - F1 = 1 - F2 = 1 - F3 = 2 - F4 = 3 - F5 = 5 - F6 = 8 - F7 = 13 - F8 = 21 - F9 = 34 - F10 = 55 - F11 = 89 - F12 = 144 - -The 12th term, F12, is the first term to contain three digits. - -What is the index of the first term in the Fibonacci sequence to contain 1000 -digits? -""" - - -def solution(n: int = 1000) -> int: - """Returns the index of the first term in the Fibonacci sequence to contain - n digits. - - >>> solution(1000) - 4782 - >>> solution(100) - 476 - >>> solution(50) - 237 - >>> solution(3) - 12 - """ - f1, f2 = 1, 1 - index = 2 - while True: - i = 0 - f = f1 + f2 - f1, f2 = f2, f - index += 1 - for _ in str(f): - i += 1 - if i == n: - break - return index - - -if __name__ == "__main__": - print(solution(int(str(input()).strip()))) diff --git a/project_euler/problem_026/__init__.py b/project_euler/problem_026/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_026/sol1.py b/project_euler/problem_026/sol1.py deleted file mode 100644 index ccf2c111d2c5..000000000000 --- a/project_euler/problem_026/sol1.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Euler Problem 26 -https://projecteuler.net/problem=26 - -Problem Statement: - -A unit fraction contains 1 in the numerator. The decimal representation of the -unit fractions with denominators 2 to 10 are given: - -1/2 = 0.5 -1/3 = 0.(3) -1/4 = 0.25 -1/5 = 0.2 -1/6 = 0.1(6) -1/7 = 0.(142857) -1/8 = 0.125 -1/9 = 0.(1) -1/10 = 0.1 -Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be -seen that 1/7 has a 6-digit recurring cycle. - -Find the value of d < 1000 for which 1/d contains the longest recurring cycle -in its decimal fraction part. -""" - - -def solution(numerator: int = 1, digit: int = 1000) -> int: - """ - Considering any range can be provided, - because as per the problem, the digit d < 1000 - >>> solution(1, 10) - 7 - >>> solution(10, 100) - 97 - >>> solution(10, 1000) - 983 - """ - the_digit = 1 - longest_list_length = 0 - - for divide_by_number in range(numerator, digit + 1): - has_been_divided: list[int] = [] - now_divide = numerator - for _ in range(1, digit + 1): - if now_divide in has_been_divided: - if longest_list_length < len(has_been_divided): - longest_list_length = len(has_been_divided) - the_digit = divide_by_number - else: - has_been_divided.append(now_divide) - now_divide = now_divide * 10 % divide_by_number - - return the_digit - - -# Tests -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/project_euler/problem_027/__init__.py b/project_euler/problem_027/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_027/sol1.py b/project_euler/problem_027/sol1.py deleted file mode 100644 index 48755ec19763..000000000000 --- a/project_euler/problem_027/sol1.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Project Euler Problem 27 -https://projecteuler.net/problem=27 - -Problem Statement: - -Euler discovered the remarkable quadratic formula: -n2 + n + 41 -It turns out that the formula will produce 40 primes for the consecutive values -n = 0 to 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible -by 41, and certainly when n = 41, 412 + 41 + 41 is clearly divisible by 41. -The incredible formula n2 - 79n + 1601 was discovered, which produces 80 primes -for the consecutive values n = 0 to 79. The product of the coefficients, -79 and -1601, is -126479. -Considering quadratics of the form: -n² + an + b, where |a| < 1000 and |b| < 1000 -where |n| is the modulus/absolute value of ne.g. |11| = 11 and |-4| = 4 -Find the product of the coefficients, a and b, for the quadratic expression that -produces the maximum number of primes for consecutive values of n, starting with -n = 0. -""" - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - A number is prime if it has exactly two factors: 1 and itself. - Returns boolean representing primality of given number num (i.e., if the - result is true, then the number is indeed prime else it is not). - - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(2999) - True - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(-10) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(a_limit: int = 1000, b_limit: int = 1000) -> int: - """ - >>> solution(1000, 1000) - -59231 - >>> solution(200, 1000) - -59231 - >>> solution(200, 200) - -4925 - >>> solution(-1000, 1000) - 0 - >>> solution(-1000, -1000) - 0 - """ - longest = [0, 0, 0] # length, a, b - for a in range((a_limit * -1) + 1, a_limit): - for b in range(2, b_limit): - if is_prime(b): - count = 0 - n = 0 - while is_prime((n**2) + (a * n) + b): - count += 1 - n += 1 - if count > longest[0]: - longest = [count, a, b] - ans = longest[1] * longest[2] - return ans - - -if __name__ == "__main__": - print(solution(1000, 1000)) diff --git a/project_euler/problem_028/__init__.py b/project_euler/problem_028/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_028/sol1.py b/project_euler/problem_028/sol1.py deleted file mode 100644 index 1ea5d4fcafd4..000000000000 --- a/project_euler/problem_028/sol1.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Problem 28 -Url: https://projecteuler.net/problem=28 -Statement: -Starting with the number 1 and moving to the right in a clockwise direction a 5 -by 5 spiral is formed as follows: - - 21 22 23 24 25 - 20 7 8 9 10 - 19 6 1 2 11 - 18 5 4 3 12 - 17 16 15 14 13 - -It can be verified that the sum of the numbers on the diagonals is 101. - -What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed -in the same way? -""" - -from math import ceil - - -def solution(n: int = 1001) -> int: - """Returns the sum of the numbers on the diagonals in a n by n spiral - formed in the same way. - - >>> solution(1001) - 669171001 - >>> solution(500) - 82959497 - >>> solution(100) - 651897 - >>> solution(50) - 79697 - >>> solution(10) - 537 - """ - total = 1 - - for i in range(1, int(ceil(n / 2.0))): - odd = 2 * i + 1 - even = 2 * i - total = total + 4 * odd**2 - 6 * even - - return total - - -if __name__ == "__main__": - import sys - - if len(sys.argv) == 1: - print(solution()) - else: - try: - n = int(sys.argv[1]) - print(solution(n)) - except ValueError: - print("Invalid entry - please enter a number") diff --git a/project_euler/problem_029/__init__.py b/project_euler/problem_029/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_029/sol1.py b/project_euler/problem_029/sol1.py deleted file mode 100644 index d9a81e55ca35..000000000000 --- a/project_euler/problem_029/sol1.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -Consider all integer combinations of ab for 2 <= a <= 5 and 2 <= b <= 5: - -2^2=4, 2^3=8, 2^4=16, 2^5=32 -3^2=9, 3^3=27, 3^4=81, 3^5=243 -4^2=16, 4^3=64, 4^4=256, 4^5=1024 -5^2=25, 5^3=125, 5^4=625, 5^5=3125 - -If they are then placed in numerical order, with any repeats removed, we get -the following sequence of 15 distinct terms: - -4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125 - -How many distinct terms are in the sequence generated by ab -for 2 <= a <= 100 and 2 <= b <= 100? -""" - - -def solution(n: int = 100) -> int: - """Returns the number of distinct terms in the sequence generated by a^b - for 2 <= a <= 100 and 2 <= b <= 100. - - >>> solution(100) - 9183 - >>> solution(50) - 2184 - >>> solution(20) - 324 - >>> solution(5) - 15 - >>> solution(2) - 1 - >>> solution(1) - 0 - """ - collect_powers = set() - - current_pow = 0 - - n = n + 1 # maximum limit - - for a in range(2, n): - for b in range(2, n): - current_pow = a**b # calculates the current power - collect_powers.add(current_pow) # adds the result to the set - return len(collect_powers) - - -if __name__ == "__main__": - print("Number of terms ", solution(int(str(input()).strip()))) diff --git a/project_euler/problem_030/__init__.py b/project_euler/problem_030/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_030/sol1.py b/project_euler/problem_030/sol1.py deleted file mode 100644 index 7d83e314523f..000000000000 --- a/project_euler/problem_030/sol1.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Problem Statement (Digit Fifth Powers): https://projecteuler.net/problem=30 - -Surprisingly there are only three numbers that can be written as the sum of fourth -powers of their digits: - -1634 = 1^4 + 6^4 + 3^4 + 4^4 -8208 = 8^4 + 2^4 + 0^4 + 8^4 -9474 = 9^4 + 4^4 + 7^4 + 4^4 -As 1 = 1^4 is not a sum it is not included. - -The sum of these numbers is 1634 + 8208 + 9474 = 19316. - -Find the sum of all the numbers that can be written as the sum of fifth powers of their -digits. - -9^5 = 59049 -59049 * 7 = 413343 (which is only 6 digit number) -So, numbers greater than 999999 are rejected -and also 59049 * 3 = 177147 (which exceeds the criteria of number being 3 digit) -So, number > 999 -and hence a number between 1000 and 1000000 -""" - -DIGITS_FIFTH_POWER = {str(digit): digit**5 for digit in range(10)} - - -def digits_fifth_powers_sum(number: int) -> int: - """ - >>> digits_fifth_powers_sum(1234) - 1300 - """ - return sum(DIGITS_FIFTH_POWER[digit] for digit in str(number)) - - -def solution() -> int: - return sum( - number - for number in range(1000, 1000000) - if number == digits_fifth_powers_sum(number) - ) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_031/__init__.py b/project_euler/problem_031/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_031/sol1.py b/project_euler/problem_031/sol1.py deleted file mode 100644 index 4c9c533eecb7..000000000000 --- a/project_euler/problem_031/sol1.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -Coin sums -Problem 31: https://projecteuler.net/problem=31 - -In England the currency is made up of pound, f, and pence, p, and there are -eight coins in general circulation: - -1p, 2p, 5p, 10p, 20p, 50p, f1 (100p) and f2 (200p). -It is possible to make f2 in the following way: - -1xf1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p -How many different ways can f2 be made using any number of coins? -""" - - -def one_pence() -> int: - return 1 - - -def two_pence(x: int) -> int: - return 0 if x < 0 else two_pence(x - 2) + one_pence() - - -def five_pence(x: int) -> int: - return 0 if x < 0 else five_pence(x - 5) + two_pence(x) - - -def ten_pence(x: int) -> int: - return 0 if x < 0 else ten_pence(x - 10) + five_pence(x) - - -def twenty_pence(x: int) -> int: - return 0 if x < 0 else twenty_pence(x - 20) + ten_pence(x) - - -def fifty_pence(x: int) -> int: - return 0 if x < 0 else fifty_pence(x - 50) + twenty_pence(x) - - -def one_pound(x: int) -> int: - return 0 if x < 0 else one_pound(x - 100) + fifty_pence(x) - - -def two_pound(x: int) -> int: - return 0 if x < 0 else two_pound(x - 200) + one_pound(x) - - -def solution(n: int = 200) -> int: - """Returns the number of different ways can n pence be made using any number of - coins? - - >>> solution(500) - 6295434 - >>> solution(200) - 73682 - >>> solution(50) - 451 - >>> solution(10) - 11 - """ - return two_pound(n) - - -if __name__ == "__main__": - print(solution(int(input().strip()))) diff --git a/project_euler/problem_031/sol2.py b/project_euler/problem_031/sol2.py deleted file mode 100644 index 574f8d4107a1..000000000000 --- a/project_euler/problem_031/sol2.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -Problem 31: https://projecteuler.net/problem=31 - -Coin sums - -In England the currency is made up of pound, f, and pence, p, and there are -eight coins in general circulation: - -1p, 2p, 5p, 10p, 20p, 50p, f1 (100p) and f2 (200p). -It is possible to make f2 in the following way: - -1xf1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p -How many different ways can f2 be made using any number of coins? - -Hint: - > There are 100 pence in a pound (f1 = 100p) - > There are coins(in pence) are available: 1, 2, 5, 10, 20, 50, 100 and 200. - > how many different ways you can combine these values to create 200 pence. - -Example: - to make 6p there are 5 ways - 1,1,1,1,1,1 - 1,1,1,1,2 - 1,1,2,2 - 2,2,2 - 1,5 - to make 5p there are 4 ways - 1,1,1,1,1 - 1,1,1,2 - 1,2,2 - 5 -""" - - -def solution(pence: int = 200) -> int: - """Returns the number of different ways to make X pence using any number of coins. - The solution is based on dynamic programming paradigm in a bottom-up fashion. - - >>> solution(500) - 6295434 - >>> solution(200) - 73682 - >>> solution(50) - 451 - >>> solution(10) - 11 - """ - coins = [1, 2, 5, 10, 20, 50, 100, 200] - number_of_ways = [0] * (pence + 1) - number_of_ways[0] = 1 # base case: 1 way to make 0 pence - - for coin in coins: - for i in range(coin, pence + 1, 1): - number_of_ways[i] += number_of_ways[i - coin] - return number_of_ways[pence] - - -if __name__ == "__main__": - assert solution(200) == 73682 diff --git a/project_euler/problem_032/__init__.py b/project_euler/problem_032/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_032/sol32.py b/project_euler/problem_032/sol32.py deleted file mode 100644 index c0ca2ce10791..000000000000 --- a/project_euler/problem_032/sol32.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -We shall say that an n-digit number is pandigital if it makes use of all the -digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through -5 pandigital. - -The product 7254 is unusual, as the identity, 39 x 186 = 7254, containing -multiplicand, multiplier, and product is 1 through 9 pandigital. - -Find the sum of all products whose multiplicand/multiplier/product identity can -be written as a 1 through 9 pandigital. - -HINT: Some products can be obtained in more than one way so be sure to only -include it once in your sum. -""" - -import itertools - - -def is_combination_valid(combination): - """ - Checks if a combination (a tuple of 9 digits) - is a valid product equation. - - >>> is_combination_valid(('3', '9', '1', '8', '6', '7', '2', '5', '4')) - True - - >>> is_combination_valid(('1', '2', '3', '4', '5', '6', '7', '8', '9')) - False - - """ - return ( - int("".join(combination[0:2])) * int("".join(combination[2:5])) - == int("".join(combination[5:9])) - ) or ( - int("".join(combination[0])) * int("".join(combination[1:5])) - == int("".join(combination[5:9])) - ) - - -def solution(): - """ - Finds the sum of all products whose multiplicand/multiplier/product identity - can be written as a 1 through 9 pandigital - - >>> solution() - 45228 - """ - - return sum( - { - int("".join(pandigital[5:9])) - for pandigital in itertools.permutations("123456789") - if is_combination_valid(pandigital) - } - ) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_033/__init__.py b/project_euler/problem_033/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_033/sol1.py b/project_euler/problem_033/sol1.py deleted file mode 100644 index 71790d34fbed..000000000000 --- a/project_euler/problem_033/sol1.py +++ /dev/null @@ -1,72 +0,0 @@ -""" -Problem 33: https://projecteuler.net/problem=33 - -The fraction 49/98 is a curious fraction, as an inexperienced -mathematician in attempting to simplify it may incorrectly believe -that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s. - -We shall consider fractions like, 30/50 = 3/5, to be trivial examples. - -There are exactly four non-trivial examples of this type of fraction, -less than one in value, and containing two digits in the numerator -and denominator. - -If the product of these four fractions is given in its lowest common -terms, find the value of the denominator. -""" - -from __future__ import annotations - -from fractions import Fraction - - -def is_digit_cancelling(num: int, den: int) -> bool: - return ( - num != den and num % 10 == den // 10 and (num // 10) / (den % 10) == num / den - ) - - -def fraction_list(digit_len: int) -> list[str]: - """ - >>> fraction_list(2) - ['16/64', '19/95', '26/65', '49/98'] - >>> fraction_list(3) - ['16/64', '19/95', '26/65', '49/98'] - >>> fraction_list(4) - ['16/64', '19/95', '26/65', '49/98'] - >>> fraction_list(0) - [] - >>> fraction_list(5) - ['16/64', '19/95', '26/65', '49/98'] - """ - solutions = [] - den = 11 - last_digit = int("1" + "0" * digit_len) - for num in range(den, last_digit): - while den <= 99: - if ( - (num != den) - and (num % 10 == den // 10) - and (den % 10 != 0) - and is_digit_cancelling(num, den) - ): - solutions.append(f"{num}/{den}") - den += 1 - num += 1 - den = 10 - return solutions - - -def solution(n: int = 2) -> int: - """ - Return the solution to the problem - """ - result = 1.0 - for fraction in fraction_list(n): - frac = Fraction(fraction) - result *= frac.denominator / frac.numerator - return int(result) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_034/__init__.py b/project_euler/problem_034/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_034/sol1.py b/project_euler/problem_034/sol1.py deleted file mode 100644 index 8d8432dbbb7a..000000000000 --- a/project_euler/problem_034/sol1.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Problem 34: https://projecteuler.net/problem=34 - -145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145. -Find the sum of all numbers which are equal to the sum of the factorial of their digits. -Note: As 1! = 1 and 2! = 2 are not sums they are not included. -""" - -from math import factorial - -DIGIT_FACTORIAL = {str(d): factorial(d) for d in range(10)} - - -def sum_of_digit_factorial(n: int) -> int: - """ - Returns the sum of the factorial of digits in n - >>> sum_of_digit_factorial(15) - 121 - >>> sum_of_digit_factorial(0) - 1 - """ - return sum(DIGIT_FACTORIAL[d] for d in str(n)) - - -def solution() -> int: - """ - Returns the sum of all numbers whose - sum of the factorials of all digits - add up to the number itself. - >>> solution() - 40730 - """ - limit = 7 * factorial(9) + 1 - return sum(i for i in range(3, limit) if sum_of_digit_factorial(i) == i) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_035/__init__.py b/project_euler/problem_035/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_035/sol1.py b/project_euler/problem_035/sol1.py deleted file mode 100644 index cf9f6821d798..000000000000 --- a/project_euler/problem_035/sol1.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -Project Euler Problem 35 -https://projecteuler.net/problem=35 - -Problem Statement: - -The number 197 is called a circular prime because all rotations of the digits: -197, 971, and 719, are themselves prime. -There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, -79, and 97. -How many circular primes are there below one million? - -To solve this problem in an efficient manner, we will first mark all the primes -below 1 million using the Sieve of Eratosthenes. Then, out of all these primes, -we will rule out the numbers which contain an even digit. After this we will -generate each circular combination of the number and check if all are prime. -""" - -from __future__ import annotations - -sieve = [True] * 1000001 -i = 2 -while i * i <= 1000000: - if sieve[i]: - for j in range(i * i, 1000001, i): - sieve[j] = False - i += 1 - - -def is_prime(n: int) -> bool: - """ - For 2 <= n <= 1000000, return True if n is prime. - >>> is_prime(87) - False - >>> is_prime(23) - True - >>> is_prime(25363) - False - """ - return sieve[n] - - -def contains_an_even_digit(n: int) -> bool: - """ - Return True if n contains an even digit. - >>> contains_an_even_digit(0) - True - >>> contains_an_even_digit(975317933) - False - >>> contains_an_even_digit(-245679) - True - """ - return any(digit in "02468" for digit in str(n)) - - -def find_circular_primes(limit: int = 1000000) -> list[int]: - """ - Return circular primes below limit. - >>> len(find_circular_primes(100)) - 13 - >>> len(find_circular_primes(1000000)) - 55 - """ - result = [2] # result already includes the number 2. - for num in range(3, limit + 1, 2): - if is_prime(num) and not contains_an_even_digit(num): - str_num = str(num) - list_nums = [int(str_num[j:] + str_num[:j]) for j in range(len(str_num))] - if all(is_prime(i) for i in list_nums): - result.append(num) - return result - - -def solution() -> int: - """ - >>> solution() - 55 - """ - return len(find_circular_primes()) - - -if __name__ == "__main__": - print(f"{len(find_circular_primes()) = }") diff --git a/project_euler/problem_036/__init__.py b/project_euler/problem_036/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_036/sol1.py b/project_euler/problem_036/sol1.py deleted file mode 100644 index 3865b2a39ea9..000000000000 --- a/project_euler/problem_036/sol1.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -Project Euler Problem 36 -https://projecteuler.net/problem=36 - -Problem Statement: - -Double-base palindromes -Problem 36 -The decimal number, 585 = 10010010012 (binary), is palindromic in both bases. - -Find the sum of all numbers, less than one million, which are palindromic in -base 10 and base 2. - -(Please note that the palindromic number, in either base, may not include -leading zeros.) -""" - -from __future__ import annotations - - -def is_palindrome(n: int | str) -> bool: - """ - Return true if the input n is a palindrome. - Otherwise return false. n can be an integer or a string. - - >>> is_palindrome(909) - True - >>> is_palindrome(908) - False - >>> is_palindrome('10101') - True - >>> is_palindrome('10111') - False - """ - n = str(n) - return n == n[::-1] - - -def solution(n: int = 1000000): - """Return the sum of all numbers, less than n , which are palindromic in - base 10 and base 2. - - >>> solution(1000000) - 872187 - >>> solution(500000) - 286602 - >>> solution(100000) - 286602 - >>> solution(1000) - 1772 - >>> solution(100) - 157 - >>> solution(10) - 25 - >>> solution(2) - 1 - >>> solution(1) - 0 - """ - total = 0 - - for i in range(1, n): - if is_palindrome(i) and is_palindrome(bin(i).split("b")[1]): - total += i - return total - - -if __name__ == "__main__": - print(solution(int(str(input().strip())))) diff --git a/project_euler/problem_037/__init__.py b/project_euler/problem_037/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_037/sol1.py b/project_euler/problem_037/sol1.py deleted file mode 100644 index c66eb9fb1735..000000000000 --- a/project_euler/problem_037/sol1.py +++ /dev/null @@ -1,119 +0,0 @@ -""" -Truncatable primes -Problem 37: https://projecteuler.net/problem=37 - -The number 3797 has an interesting property. Being prime itself, it is possible -to continuously remove digits from left to right, and remain prime at each stage: -3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3. - -Find the sum of the only eleven primes that are both truncatable from left to right -and right to left. - -NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes. -""" - -from __future__ import annotations - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def list_truncated_nums(n: int) -> list[int]: - """ - Returns a list of all left and right truncated numbers of n - >>> list_truncated_nums(927628) - [927628, 27628, 92762, 7628, 9276, 628, 927, 28, 92, 8, 9] - >>> list_truncated_nums(467) - [467, 67, 46, 7, 4] - >>> list_truncated_nums(58) - [58, 8, 5] - """ - str_num = str(n) - list_nums = [n] - for i in range(1, len(str_num)): - list_nums.append(int(str_num[i:])) - list_nums.append(int(str_num[:-i])) - return list_nums - - -def validate(n: int) -> bool: - """ - To optimize the approach, we will rule out the numbers above 1000, - whose first or last three digits are not prime - >>> validate(74679) - False - >>> validate(235693) - False - >>> validate(3797) - True - """ - return not ( - len(str(n)) > 3 - and (not is_prime(int(str(n)[-3:])) or not is_prime(int(str(n)[:3]))) - ) - - -def compute_truncated_primes(count: int = 11) -> list[int]: - """ - Returns the list of truncated primes - >>> compute_truncated_primes(11) - [23, 37, 53, 73, 313, 317, 373, 797, 3137, 3797, 739397] - """ - list_truncated_primes: list[int] = [] - num = 13 - while len(list_truncated_primes) != count: - if validate(num): - list_nums = list_truncated_nums(num) - if all(is_prime(i) for i in list_nums): - list_truncated_primes.append(num) - num += 2 - return list_truncated_primes - - -def solution() -> int: - """ - Returns the sum of truncated primes - """ - return sum(compute_truncated_primes(11)) - - -if __name__ == "__main__": - print(f"{sum(compute_truncated_primes(11)) = }") diff --git a/project_euler/problem_038/__init__.py b/project_euler/problem_038/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_038/sol1.py b/project_euler/problem_038/sol1.py deleted file mode 100644 index 382892723b7d..000000000000 --- a/project_euler/problem_038/sol1.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Project Euler Problem 38: https://projecteuler.net/problem=38 - -Take the number 192 and multiply it by each of 1, 2, and 3: - -192 x 1 = 192 -192 x 2 = 384 -192 x 3 = 576 - -By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call -192384576 the concatenated product of 192 and (1,2,3) - -The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, -giving the pandigital, 918273645, which is the concatenated product of 9 and -(1,2,3,4,5). - -What is the largest 1 to 9 pandigital 9-digit number that can be formed as the -concatenated product of an integer with (1,2, ... , n) where n > 1? - -Solution: -Since n>1, the largest candidate for the solution will be a concactenation of -a 4-digit number and its double, a 5-digit number. -Let a be the 4-digit number. -a has 4 digits => 1000 <= a < 10000 -2a has 5 digits => 10000 <= 2a < 100000 -=> 5000 <= a < 10000 - -The concatenation of a with 2a = a * 10^5 + 2a -so our candidate for a given a is 100002 * a. -We iterate through the search space 5000 <= a < 10000 in reverse order, -calculating the candidates for each a and checking if they are 1-9 pandigital. - -In case there are no 4-digit numbers that satisfy this property, we check -the 3-digit numbers with a similar formula (the example a=192 gives a lower -bound on the length of a): -a has 3 digits, etc... -=> 100 <= a < 334, candidate = a * 10^6 + 2a * 10^3 + 3a - = 1002003 * a -""" - -from __future__ import annotations - - -def is_9_pandigital(n: int) -> bool: - """ - Checks whether n is a 9-digit 1 to 9 pandigital number. - >>> is_9_pandigital(12345) - False - >>> is_9_pandigital(156284973) - True - >>> is_9_pandigital(1562849733) - False - """ - s = str(n) - return len(s) == 9 and set(s) == set("123456789") - - -def solution() -> int | None: - """ - Return the largest 1 to 9 pandigital 9-digital number that can be formed as the - concatenated product of an integer with (1,2,...,n) where n > 1. - """ - for base_num in range(9999, 4999, -1): - candidate = 100002 * base_num - if is_9_pandigital(candidate): - return candidate - - for base_num in range(333, 99, -1): - candidate = 1002003 * base_num - if is_9_pandigital(candidate): - return candidate - - return None - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_039/__init__.py b/project_euler/problem_039/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_039/sol1.py b/project_euler/problem_039/sol1.py deleted file mode 100644 index c8ffa8934159..000000000000 --- a/project_euler/problem_039/sol1.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Problem 39: https://projecteuler.net/problem=39 - -If p is the perimeter of a right angle triangle with integral length sides, -{a,b,c}, there are exactly three solutions for p = 120. -{20,48,52}, {24,45,51}, {30,40,50} - -For which value of p ≤ 1000, is the number of solutions maximised? -""" - -from __future__ import annotations - -import typing -from collections import Counter - - -def pythagorean_triple(max_perimeter: int) -> typing.Counter[int]: - """ - Returns a dictionary with keys as the perimeter of a right angled triangle - and value as the number of corresponding triplets. - >>> pythagorean_triple(15) - Counter({12: 1}) - >>> pythagorean_triple(40) - Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1}) - >>> pythagorean_triple(50) - Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1, 48: 1}) - """ - triplets: typing.Counter[int] = Counter() - for base in range(1, max_perimeter + 1): - for perpendicular in range(base, max_perimeter + 1): - hypotenuse = (base * base + perpendicular * perpendicular) ** 0.5 - if hypotenuse == int(hypotenuse): - perimeter = int(base + perpendicular + hypotenuse) - if perimeter > max_perimeter: - continue - triplets[perimeter] += 1 - return triplets - - -def solution(n: int = 1000) -> int: - """ - Returns perimeter with maximum solutions. - >>> solution(100) - 90 - >>> solution(200) - 180 - >>> solution(1000) - 840 - """ - triplets = pythagorean_triple(n) - return triplets.most_common(1)[0][0] - - -if __name__ == "__main__": - print(f"Perimeter {solution()} has maximum solutions") diff --git a/project_euler/problem_040/__init__.py b/project_euler/problem_040/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_040/sol1.py b/project_euler/problem_040/sol1.py deleted file mode 100644 index 721bd063c28a..000000000000 --- a/project_euler/problem_040/sol1.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Champernowne's constant -Problem 40 -An irrational decimal fraction is created by concatenating the positive -integers: - -0.123456789101112131415161718192021... - -It can be seen that the 12th digit of the fractional part is 1. - -If dn represents the nth digit of the fractional part, find the value of the -following expression. - -d1 x d10 x d100 x d1000 x d10000 x d100000 x d1000000 -""" - - -def solution(): - """Returns - - >>> solution() - 210 - """ - constant = [] - i = 1 - - while len(constant) < 1e6: - constant.append(str(i)) - i += 1 - - constant = "".join(constant) - - return ( - int(constant[0]) - * int(constant[9]) - * int(constant[99]) - * int(constant[999]) - * int(constant[9999]) - * int(constant[99999]) - * int(constant[999999]) - ) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_041/__init__.py b/project_euler/problem_041/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_041/sol1.py b/project_euler/problem_041/sol1.py deleted file mode 100644 index 0c37f5469a6c..000000000000 --- a/project_euler/problem_041/sol1.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Pandigital prime -Problem 41: https://projecteuler.net/problem=41 - -We shall say that an n-digit number is pandigital if it makes use of all the digits -1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime. -What is the largest n-digit pandigital prime that exists? - -All pandigital numbers except for 1, 4 ,7 pandigital numbers are divisible by 3. -So we will check only 7 digit pandigital numbers to obtain the largest possible -pandigital prime. -""" - -from __future__ import annotations - -import math -from itertools import permutations - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(n: int = 7) -> int: - """ - Returns the maximum pandigital prime number of length n. - If there are none, then it will return 0. - >>> solution(2) - 0 - >>> solution(4) - 4231 - >>> solution(7) - 7652413 - """ - pandigital_str = "".join(str(i) for i in range(1, n + 1)) - perm_list = [int("".join(i)) for i in permutations(pandigital_str, n)] - pandigitals = [num for num in perm_list if is_prime(num)] - return max(pandigitals) if pandigitals else 0 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_042/__init__.py b/project_euler/problem_042/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_042/solution42.py b/project_euler/problem_042/solution42.py deleted file mode 100644 index f678bcdef710..000000000000 --- a/project_euler/problem_042/solution42.py +++ /dev/null @@ -1,47 +0,0 @@ -""" -The nth term of the sequence of triangle numbers is given by, tn = ½n(n+1); so -the first ten triangle numbers are: - -1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - -By converting each letter in a word to a number corresponding to its -alphabetical position and adding these values we form a word value. For example, -the word value for SKY is 19 + 11 + 25 = 55 = t10. If the word value is a -triangle number then we shall call the word a triangle word. - -Using words.txt (right click and 'Save Link/Target As...'), a 16K text file -containing nearly two-thousand common English words, how many are triangle -words? -""" - -import os - -# Precomputes a list of the 100 first triangular numbers -TRIANGULAR_NUMBERS = [int(0.5 * n * (n + 1)) for n in range(1, 101)] - - -def solution(): - """ - Finds the amount of triangular words in the words file. - - >>> solution() - 162 - """ - script_dir = os.path.dirname(os.path.realpath(__file__)) - words_file_path = os.path.join(script_dir, "words.txt") - - words = "" - with open(words_file_path) as f: - words = f.readline() - - words = [word.strip('"') for word in words.strip("\r\n").split(",")] - words = [ - word - for word in [sum(ord(x) - 64 for x in word) for word in words] - if word in TRIANGULAR_NUMBERS - ] - return len(words) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_042/words.txt b/project_euler/problem_042/words.txt deleted file mode 100644 index af3aeb42f151..000000000000 --- a/project_euler/problem_042/words.txt +++ /dev/null @@ -1 +0,0 @@ -"A","ABILITY","ABLE","ABOUT","ABOVE","ABSENCE","ABSOLUTELY","ACADEMIC","ACCEPT","ACCESS","ACCIDENT","ACCOMPANY","ACCORDING","ACCOUNT","ACHIEVE","ACHIEVEMENT","ACID","ACQUIRE","ACROSS","ACT","ACTION","ACTIVE","ACTIVITY","ACTUAL","ACTUALLY","ADD","ADDITION","ADDITIONAL","ADDRESS","ADMINISTRATION","ADMIT","ADOPT","ADULT","ADVANCE","ADVANTAGE","ADVICE","ADVISE","AFFAIR","AFFECT","AFFORD","AFRAID","AFTER","AFTERNOON","AFTERWARDS","AGAIN","AGAINST","AGE","AGENCY","AGENT","AGO","AGREE","AGREEMENT","AHEAD","AID","AIM","AIR","AIRCRAFT","ALL","ALLOW","ALMOST","ALONE","ALONG","ALREADY","ALRIGHT","ALSO","ALTERNATIVE","ALTHOUGH","ALWAYS","AMONG","AMONGST","AMOUNT","AN","ANALYSIS","ANCIENT","AND","ANIMAL","ANNOUNCE","ANNUAL","ANOTHER","ANSWER","ANY","ANYBODY","ANYONE","ANYTHING","ANYWAY","APART","APPARENT","APPARENTLY","APPEAL","APPEAR","APPEARANCE","APPLICATION","APPLY","APPOINT","APPOINTMENT","APPROACH","APPROPRIATE","APPROVE","AREA","ARGUE","ARGUMENT","ARISE","ARM","ARMY","AROUND","ARRANGE","ARRANGEMENT","ARRIVE","ART","ARTICLE","ARTIST","AS","ASK","ASPECT","ASSEMBLY","ASSESS","ASSESSMENT","ASSET","ASSOCIATE","ASSOCIATION","ASSUME","ASSUMPTION","AT","ATMOSPHERE","ATTACH","ATTACK","ATTEMPT","ATTEND","ATTENTION","ATTITUDE","ATTRACT","ATTRACTIVE","AUDIENCE","AUTHOR","AUTHORITY","AVAILABLE","AVERAGE","AVOID","AWARD","AWARE","AWAY","AYE","BABY","BACK","BACKGROUND","BAD","BAG","BALANCE","BALL","BAND","BANK","BAR","BASE","BASIC","BASIS","BATTLE","BE","BEAR","BEAT","BEAUTIFUL","BECAUSE","BECOME","BED","BEDROOM","BEFORE","BEGIN","BEGINNING","BEHAVIOUR","BEHIND","BELIEF","BELIEVE","BELONG","BELOW","BENEATH","BENEFIT","BESIDE","BEST","BETTER","BETWEEN","BEYOND","BIG","BILL","BIND","BIRD","BIRTH","BIT","BLACK","BLOCK","BLOOD","BLOODY","BLOW","BLUE","BOARD","BOAT","BODY","BONE","BOOK","BORDER","BOTH","BOTTLE","BOTTOM","BOX","BOY","BRAIN","BRANCH","BREAK","BREATH","BRIDGE","BRIEF","BRIGHT","BRING","BROAD","BROTHER","BUDGET","BUILD","BUILDING","BURN","BUS","BUSINESS","BUSY","BUT","BUY","BY","CABINET","CALL","CAMPAIGN","CAN","CANDIDATE","CAPABLE","CAPACITY","CAPITAL","CAR","CARD","CARE","CAREER","CAREFUL","CAREFULLY","CARRY","CASE","CASH","CAT","CATCH","CATEGORY","CAUSE","CELL","CENTRAL","CENTRE","CENTURY","CERTAIN","CERTAINLY","CHAIN","CHAIR","CHAIRMAN","CHALLENGE","CHANCE","CHANGE","CHANNEL","CHAPTER","CHARACTER","CHARACTERISTIC","CHARGE","CHEAP","CHECK","CHEMICAL","CHIEF","CHILD","CHOICE","CHOOSE","CHURCH","CIRCLE","CIRCUMSTANCE","CITIZEN","CITY","CIVIL","CLAIM","CLASS","CLEAN","CLEAR","CLEARLY","CLIENT","CLIMB","CLOSE","CLOSELY","CLOTHES","CLUB","COAL","CODE","COFFEE","COLD","COLLEAGUE","COLLECT","COLLECTION","COLLEGE","COLOUR","COMBINATION","COMBINE","COME","COMMENT","COMMERCIAL","COMMISSION","COMMIT","COMMITMENT","COMMITTEE","COMMON","COMMUNICATION","COMMUNITY","COMPANY","COMPARE","COMPARISON","COMPETITION","COMPLETE","COMPLETELY","COMPLEX","COMPONENT","COMPUTER","CONCENTRATE","CONCENTRATION","CONCEPT","CONCERN","CONCERNED","CONCLUDE","CONCLUSION","CONDITION","CONDUCT","CONFERENCE","CONFIDENCE","CONFIRM","CONFLICT","CONGRESS","CONNECT","CONNECTION","CONSEQUENCE","CONSERVATIVE","CONSIDER","CONSIDERABLE","CONSIDERATION","CONSIST","CONSTANT","CONSTRUCTION","CONSUMER","CONTACT","CONTAIN","CONTENT","CONTEXT","CONTINUE","CONTRACT","CONTRAST","CONTRIBUTE","CONTRIBUTION","CONTROL","CONVENTION","CONVERSATION","COPY","CORNER","CORPORATE","CORRECT","COS","COST","COULD","COUNCIL","COUNT","COUNTRY","COUNTY","COUPLE","COURSE","COURT","COVER","CREATE","CREATION","CREDIT","CRIME","CRIMINAL","CRISIS","CRITERION","CRITICAL","CRITICISM","CROSS","CROWD","CRY","CULTURAL","CULTURE","CUP","CURRENT","CURRENTLY","CURRICULUM","CUSTOMER","CUT","DAMAGE","DANGER","DANGEROUS","DARK","DATA","DATE","DAUGHTER","DAY","DEAD","DEAL","DEATH","DEBATE","DEBT","DECADE","DECIDE","DECISION","DECLARE","DEEP","DEFENCE","DEFENDANT","DEFINE","DEFINITION","DEGREE","DELIVER","DEMAND","DEMOCRATIC","DEMONSTRATE","DENY","DEPARTMENT","DEPEND","DEPUTY","DERIVE","DESCRIBE","DESCRIPTION","DESIGN","DESIRE","DESK","DESPITE","DESTROY","DETAIL","DETAILED","DETERMINE","DEVELOP","DEVELOPMENT","DEVICE","DIE","DIFFERENCE","DIFFERENT","DIFFICULT","DIFFICULTY","DINNER","DIRECT","DIRECTION","DIRECTLY","DIRECTOR","DISAPPEAR","DISCIPLINE","DISCOVER","DISCUSS","DISCUSSION","DISEASE","DISPLAY","DISTANCE","DISTINCTION","DISTRIBUTION","DISTRICT","DIVIDE","DIVISION","DO","DOCTOR","DOCUMENT","DOG","DOMESTIC","DOOR","DOUBLE","DOUBT","DOWN","DRAW","DRAWING","DREAM","DRESS","DRINK","DRIVE","DRIVER","DROP","DRUG","DRY","DUE","DURING","DUTY","EACH","EAR","EARLY","EARN","EARTH","EASILY","EAST","EASY","EAT","ECONOMIC","ECONOMY","EDGE","EDITOR","EDUCATION","EDUCATIONAL","EFFECT","EFFECTIVE","EFFECTIVELY","EFFORT","EGG","EITHER","ELDERLY","ELECTION","ELEMENT","ELSE","ELSEWHERE","EMERGE","EMPHASIS","EMPLOY","EMPLOYEE","EMPLOYER","EMPLOYMENT","EMPTY","ENABLE","ENCOURAGE","END","ENEMY","ENERGY","ENGINE","ENGINEERING","ENJOY","ENOUGH","ENSURE","ENTER","ENTERPRISE","ENTIRE","ENTIRELY","ENTITLE","ENTRY","ENVIRONMENT","ENVIRONMENTAL","EQUAL","EQUALLY","EQUIPMENT","ERROR","ESCAPE","ESPECIALLY","ESSENTIAL","ESTABLISH","ESTABLISHMENT","ESTATE","ESTIMATE","EVEN","EVENING","EVENT","EVENTUALLY","EVER","EVERY","EVERYBODY","EVERYONE","EVERYTHING","EVIDENCE","EXACTLY","EXAMINATION","EXAMINE","EXAMPLE","EXCELLENT","EXCEPT","EXCHANGE","EXECUTIVE","EXERCISE","EXHIBITION","EXIST","EXISTENCE","EXISTING","EXPECT","EXPECTATION","EXPENDITURE","EXPENSE","EXPENSIVE","EXPERIENCE","EXPERIMENT","EXPERT","EXPLAIN","EXPLANATION","EXPLORE","EXPRESS","EXPRESSION","EXTEND","EXTENT","EXTERNAL","EXTRA","EXTREMELY","EYE","FACE","FACILITY","FACT","FACTOR","FACTORY","FAIL","FAILURE","FAIR","FAIRLY","FAITH","FALL","FAMILIAR","FAMILY","FAMOUS","FAR","FARM","FARMER","FASHION","FAST","FATHER","FAVOUR","FEAR","FEATURE","FEE","FEEL","FEELING","FEMALE","FEW","FIELD","FIGHT","FIGURE","FILE","FILL","FILM","FINAL","FINALLY","FINANCE","FINANCIAL","FIND","FINDING","FINE","FINGER","FINISH","FIRE","FIRM","FIRST","FISH","FIT","FIX","FLAT","FLIGHT","FLOOR","FLOW","FLOWER","FLY","FOCUS","FOLLOW","FOLLOWING","FOOD","FOOT","FOOTBALL","FOR","FORCE","FOREIGN","FOREST","FORGET","FORM","FORMAL","FORMER","FORWARD","FOUNDATION","FREE","FREEDOM","FREQUENTLY","FRESH","FRIEND","FROM","FRONT","FRUIT","FUEL","FULL","FULLY","FUNCTION","FUND","FUNNY","FURTHER","FUTURE","GAIN","GAME","GARDEN","GAS","GATE","GATHER","GENERAL","GENERALLY","GENERATE","GENERATION","GENTLEMAN","GET","GIRL","GIVE","GLASS","GO","GOAL","GOD","GOLD","GOOD","GOVERNMENT","GRANT","GREAT","GREEN","GREY","GROUND","GROUP","GROW","GROWING","GROWTH","GUEST","GUIDE","GUN","HAIR","HALF","HALL","HAND","HANDLE","HANG","HAPPEN","HAPPY","HARD","HARDLY","HATE","HAVE","HE","HEAD","HEALTH","HEAR","HEART","HEAT","HEAVY","HELL","HELP","HENCE","HER","HERE","HERSELF","HIDE","HIGH","HIGHLY","HILL","HIM","HIMSELF","HIS","HISTORICAL","HISTORY","HIT","HOLD","HOLE","HOLIDAY","HOME","HOPE","HORSE","HOSPITAL","HOT","HOTEL","HOUR","HOUSE","HOUSEHOLD","HOUSING","HOW","HOWEVER","HUGE","HUMAN","HURT","HUSBAND","I","IDEA","IDENTIFY","IF","IGNORE","ILLUSTRATE","IMAGE","IMAGINE","IMMEDIATE","IMMEDIATELY","IMPACT","IMPLICATION","IMPLY","IMPORTANCE","IMPORTANT","IMPOSE","IMPOSSIBLE","IMPRESSION","IMPROVE","IMPROVEMENT","IN","INCIDENT","INCLUDE","INCLUDING","INCOME","INCREASE","INCREASED","INCREASINGLY","INDEED","INDEPENDENT","INDEX","INDICATE","INDIVIDUAL","INDUSTRIAL","INDUSTRY","INFLUENCE","INFORM","INFORMATION","INITIAL","INITIATIVE","INJURY","INSIDE","INSIST","INSTANCE","INSTEAD","INSTITUTE","INSTITUTION","INSTRUCTION","INSTRUMENT","INSURANCE","INTEND","INTENTION","INTEREST","INTERESTED","INTERESTING","INTERNAL","INTERNATIONAL","INTERPRETATION","INTERVIEW","INTO","INTRODUCE","INTRODUCTION","INVESTIGATE","INVESTIGATION","INVESTMENT","INVITE","INVOLVE","IRON","IS","ISLAND","ISSUE","IT","ITEM","ITS","ITSELF","JOB","JOIN","JOINT","JOURNEY","JUDGE","JUMP","JUST","JUSTICE","KEEP","KEY","KID","KILL","KIND","KING","KITCHEN","KNEE","KNOW","KNOWLEDGE","LABOUR","LACK","LADY","LAND","LANGUAGE","LARGE","LARGELY","LAST","LATE","LATER","LATTER","LAUGH","LAUNCH","LAW","LAWYER","LAY","LEAD","LEADER","LEADERSHIP","LEADING","LEAF","LEAGUE","LEAN","LEARN","LEAST","LEAVE","LEFT","LEG","LEGAL","LEGISLATION","LENGTH","LESS","LET","LETTER","LEVEL","LIABILITY","LIBERAL","LIBRARY","LIE","LIFE","LIFT","LIGHT","LIKE","LIKELY","LIMIT","LIMITED","LINE","LINK","LIP","LIST","LISTEN","LITERATURE","LITTLE","LIVE","LIVING","LOAN","LOCAL","LOCATION","LONG","LOOK","LORD","LOSE","LOSS","LOT","LOVE","LOVELY","LOW","LUNCH","MACHINE","MAGAZINE","MAIN","MAINLY","MAINTAIN","MAJOR","MAJORITY","MAKE","MALE","MAN","MANAGE","MANAGEMENT","MANAGER","MANNER","MANY","MAP","MARK","MARKET","MARRIAGE","MARRIED","MARRY","MASS","MASTER","MATCH","MATERIAL","MATTER","MAY","MAYBE","ME","MEAL","MEAN","MEANING","MEANS","MEANWHILE","MEASURE","MECHANISM","MEDIA","MEDICAL","MEET","MEETING","MEMBER","MEMBERSHIP","MEMORY","MENTAL","MENTION","MERELY","MESSAGE","METAL","METHOD","MIDDLE","MIGHT","MILE","MILITARY","MILK","MIND","MINE","MINISTER","MINISTRY","MINUTE","MISS","MISTAKE","MODEL","MODERN","MODULE","MOMENT","MONEY","MONTH","MORE","MORNING","MOST","MOTHER","MOTION","MOTOR","MOUNTAIN","MOUTH","MOVE","MOVEMENT","MUCH","MURDER","MUSEUM","MUSIC","MUST","MY","MYSELF","NAME","NARROW","NATION","NATIONAL","NATURAL","NATURE","NEAR","NEARLY","NECESSARILY","NECESSARY","NECK","NEED","NEGOTIATION","NEIGHBOUR","NEITHER","NETWORK","NEVER","NEVERTHELESS","NEW","NEWS","NEWSPAPER","NEXT","NICE","NIGHT","NO","NOBODY","NOD","NOISE","NONE","NOR","NORMAL","NORMALLY","NORTH","NORTHERN","NOSE","NOT","NOTE","NOTHING","NOTICE","NOTION","NOW","NUCLEAR","NUMBER","NURSE","OBJECT","OBJECTIVE","OBSERVATION","OBSERVE","OBTAIN","OBVIOUS","OBVIOUSLY","OCCASION","OCCUR","ODD","OF","OFF","OFFENCE","OFFER","OFFICE","OFFICER","OFFICIAL","OFTEN","OIL","OKAY","OLD","ON","ONCE","ONE","ONLY","ONTO","OPEN","OPERATE","OPERATION","OPINION","OPPORTUNITY","OPPOSITION","OPTION","OR","ORDER","ORDINARY","ORGANISATION","ORGANISE","ORGANIZATION","ORIGIN","ORIGINAL","OTHER","OTHERWISE","OUGHT","OUR","OURSELVES","OUT","OUTCOME","OUTPUT","OUTSIDE","OVER","OVERALL","OWN","OWNER","PACKAGE","PAGE","PAIN","PAINT","PAINTING","PAIR","PANEL","PAPER","PARENT","PARK","PARLIAMENT","PART","PARTICULAR","PARTICULARLY","PARTLY","PARTNER","PARTY","PASS","PASSAGE","PAST","PATH","PATIENT","PATTERN","PAY","PAYMENT","PEACE","PENSION","PEOPLE","PER","PERCENT","PERFECT","PERFORM","PERFORMANCE","PERHAPS","PERIOD","PERMANENT","PERSON","PERSONAL","PERSUADE","PHASE","PHONE","PHOTOGRAPH","PHYSICAL","PICK","PICTURE","PIECE","PLACE","PLAN","PLANNING","PLANT","PLASTIC","PLATE","PLAY","PLAYER","PLEASE","PLEASURE","PLENTY","PLUS","POCKET","POINT","POLICE","POLICY","POLITICAL","POLITICS","POOL","POOR","POPULAR","POPULATION","POSITION","POSITIVE","POSSIBILITY","POSSIBLE","POSSIBLY","POST","POTENTIAL","POUND","POWER","POWERFUL","PRACTICAL","PRACTICE","PREFER","PREPARE","PRESENCE","PRESENT","PRESIDENT","PRESS","PRESSURE","PRETTY","PREVENT","PREVIOUS","PREVIOUSLY","PRICE","PRIMARY","PRIME","PRINCIPLE","PRIORITY","PRISON","PRISONER","PRIVATE","PROBABLY","PROBLEM","PROCEDURE","PROCESS","PRODUCE","PRODUCT","PRODUCTION","PROFESSIONAL","PROFIT","PROGRAM","PROGRAMME","PROGRESS","PROJECT","PROMISE","PROMOTE","PROPER","PROPERLY","PROPERTY","PROPORTION","PROPOSE","PROPOSAL","PROSPECT","PROTECT","PROTECTION","PROVE","PROVIDE","PROVIDED","PROVISION","PUB","PUBLIC","PUBLICATION","PUBLISH","PULL","PUPIL","PURPOSE","PUSH","PUT","QUALITY","QUARTER","QUESTION","QUICK","QUICKLY","QUIET","QUITE","RACE","RADIO","RAILWAY","RAIN","RAISE","RANGE","RAPIDLY","RARE","RATE","RATHER","REACH","REACTION","READ","READER","READING","READY","REAL","REALISE","REALITY","REALIZE","REALLY","REASON","REASONABLE","RECALL","RECEIVE","RECENT","RECENTLY","RECOGNISE","RECOGNITION","RECOGNIZE","RECOMMEND","RECORD","RECOVER","RED","REDUCE","REDUCTION","REFER","REFERENCE","REFLECT","REFORM","REFUSE","REGARD","REGION","REGIONAL","REGULAR","REGULATION","REJECT","RELATE","RELATION","RELATIONSHIP","RELATIVE","RELATIVELY","RELEASE","RELEVANT","RELIEF","RELIGION","RELIGIOUS","RELY","REMAIN","REMEMBER","REMIND","REMOVE","REPEAT","REPLACE","REPLY","REPORT","REPRESENT","REPRESENTATION","REPRESENTATIVE","REQUEST","REQUIRE","REQUIREMENT","RESEARCH","RESOURCE","RESPECT","RESPOND","RESPONSE","RESPONSIBILITY","RESPONSIBLE","REST","RESTAURANT","RESULT","RETAIN","RETURN","REVEAL","REVENUE","REVIEW","REVOLUTION","RICH","RIDE","RIGHT","RING","RISE","RISK","RIVER","ROAD","ROCK","ROLE","ROLL","ROOF","ROOM","ROUND","ROUTE","ROW","ROYAL","RULE","RUN","RURAL","SAFE","SAFETY","SALE","SAME","SAMPLE","SATISFY","SAVE","SAY","SCALE","SCENE","SCHEME","SCHOOL","SCIENCE","SCIENTIFIC","SCIENTIST","SCORE","SCREEN","SEA","SEARCH","SEASON","SEAT","SECOND","SECONDARY","SECRETARY","SECTION","SECTOR","SECURE","SECURITY","SEE","SEEK","SEEM","SELECT","SELECTION","SELL","SEND","SENIOR","SENSE","SENTENCE","SEPARATE","SEQUENCE","SERIES","SERIOUS","SERIOUSLY","SERVANT","SERVE","SERVICE","SESSION","SET","SETTLE","SETTLEMENT","SEVERAL","SEVERE","SEX","SEXUAL","SHAKE","SHALL","SHAPE","SHARE","SHE","SHEET","SHIP","SHOE","SHOOT","SHOP","SHORT","SHOT","SHOULD","SHOULDER","SHOUT","SHOW","SHUT","SIDE","SIGHT","SIGN","SIGNAL","SIGNIFICANCE","SIGNIFICANT","SILENCE","SIMILAR","SIMPLE","SIMPLY","SINCE","SING","SINGLE","SIR","SISTER","SIT","SITE","SITUATION","SIZE","SKILL","SKIN","SKY","SLEEP","SLIGHTLY","SLIP","SLOW","SLOWLY","SMALL","SMILE","SO","SOCIAL","SOCIETY","SOFT","SOFTWARE","SOIL","SOLDIER","SOLICITOR","SOLUTION","SOME","SOMEBODY","SOMEONE","SOMETHING","SOMETIMES","SOMEWHAT","SOMEWHERE","SON","SONG","SOON","SORRY","SORT","SOUND","SOURCE","SOUTH","SOUTHERN","SPACE","SPEAK","SPEAKER","SPECIAL","SPECIES","SPECIFIC","SPEECH","SPEED","SPEND","SPIRIT","SPORT","SPOT","SPREAD","SPRING","STAFF","STAGE","STAND","STANDARD","STAR","START","STATE","STATEMENT","STATION","STATUS","STAY","STEAL","STEP","STICK","STILL","STOCK","STONE","STOP","STORE","STORY","STRAIGHT","STRANGE","STRATEGY","STREET","STRENGTH","STRIKE","STRONG","STRONGLY","STRUCTURE","STUDENT","STUDIO","STUDY","STUFF","STYLE","SUBJECT","SUBSTANTIAL","SUCCEED","SUCCESS","SUCCESSFUL","SUCH","SUDDENLY","SUFFER","SUFFICIENT","SUGGEST","SUGGESTION","SUITABLE","SUM","SUMMER","SUN","SUPPLY","SUPPORT","SUPPOSE","SURE","SURELY","SURFACE","SURPRISE","SURROUND","SURVEY","SURVIVE","SWITCH","SYSTEM","TABLE","TAKE","TALK","TALL","TAPE","TARGET","TASK","TAX","TEA","TEACH","TEACHER","TEACHING","TEAM","TEAR","TECHNICAL","TECHNIQUE","TECHNOLOGY","TELEPHONE","TELEVISION","TELL","TEMPERATURE","TEND","TERM","TERMS","TERRIBLE","TEST","TEXT","THAN","THANK","THANKS","THAT","THE","THEATRE","THEIR","THEM","THEME","THEMSELVES","THEN","THEORY","THERE","THEREFORE","THESE","THEY","THIN","THING","THINK","THIS","THOSE","THOUGH","THOUGHT","THREAT","THREATEN","THROUGH","THROUGHOUT","THROW","THUS","TICKET","TIME","TINY","TITLE","TO","TODAY","TOGETHER","TOMORROW","TONE","TONIGHT","TOO","TOOL","TOOTH","TOP","TOTAL","TOTALLY","TOUCH","TOUR","TOWARDS","TOWN","TRACK","TRADE","TRADITION","TRADITIONAL","TRAFFIC","TRAIN","TRAINING","TRANSFER","TRANSPORT","TRAVEL","TREAT","TREATMENT","TREATY","TREE","TREND","TRIAL","TRIP","TROOP","TROUBLE","TRUE","TRUST","TRUTH","TRY","TURN","TWICE","TYPE","TYPICAL","UNABLE","UNDER","UNDERSTAND","UNDERSTANDING","UNDERTAKE","UNEMPLOYMENT","UNFORTUNATELY","UNION","UNIT","UNITED","UNIVERSITY","UNLESS","UNLIKELY","UNTIL","UP","UPON","UPPER","URBAN","US","USE","USED","USEFUL","USER","USUAL","USUALLY","VALUE","VARIATION","VARIETY","VARIOUS","VARY","VAST","VEHICLE","VERSION","VERY","VIA","VICTIM","VICTORY","VIDEO","VIEW","VILLAGE","VIOLENCE","VISION","VISIT","VISITOR","VITAL","VOICE","VOLUME","VOTE","WAGE","WAIT","WALK","WALL","WANT","WAR","WARM","WARN","WASH","WATCH","WATER","WAVE","WAY","WE","WEAK","WEAPON","WEAR","WEATHER","WEEK","WEEKEND","WEIGHT","WELCOME","WELFARE","WELL","WEST","WESTERN","WHAT","WHATEVER","WHEN","WHERE","WHEREAS","WHETHER","WHICH","WHILE","WHILST","WHITE","WHO","WHOLE","WHOM","WHOSE","WHY","WIDE","WIDELY","WIFE","WILD","WILL","WIN","WIND","WINDOW","WINE","WING","WINNER","WINTER","WISH","WITH","WITHDRAW","WITHIN","WITHOUT","WOMAN","WONDER","WONDERFUL","WOOD","WORD","WORK","WORKER","WORKING","WORKS","WORLD","WORRY","WORTH","WOULD","WRITE","WRITER","WRITING","WRONG","YARD","YEAH","YEAR","YES","YESTERDAY","YET","YOU","YOUNG","YOUR","YOURSELF","YOUTH" diff --git a/project_euler/problem_043/__init__.py b/project_euler/problem_043/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_043/sol1.py b/project_euler/problem_043/sol1.py deleted file mode 100644 index f3a2c71edc4e..000000000000 --- a/project_euler/problem_043/sol1.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Problem 43: https://projecteuler.net/problem=43 - -The number, 1406357289, is a 0 to 9 pandigital number because it is made up of -each of the digits 0 to 9 in some order, but it also has a rather interesting -sub-string divisibility property. - -Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note -the following: - -d2d3d4=406 is divisible by 2 -d3d4d5=063 is divisible by 3 -d4d5d6=635 is divisible by 5 -d5d6d7=357 is divisible by 7 -d6d7d8=572 is divisible by 11 -d7d8d9=728 is divisible by 13 -d8d9d10=289 is divisible by 17 -Find the sum of all 0 to 9 pandigital numbers with this property. -""" - -from itertools import permutations - - -def is_substring_divisible(num: tuple) -> bool: - """ - Returns True if the pandigital number passes - all the divisibility tests. - >>> is_substring_divisible((0, 1, 2, 4, 6, 5, 7, 3, 8, 9)) - False - >>> is_substring_divisible((5, 1, 2, 4, 6, 0, 7, 8, 3, 9)) - False - >>> is_substring_divisible((1, 4, 0, 6, 3, 5, 7, 2, 8, 9)) - True - """ - if num[3] % 2 != 0: - return False - - if (num[2] + num[3] + num[4]) % 3 != 0: - return False - - if num[5] % 5 != 0: - return False - - tests = [7, 11, 13, 17] - for i, test in enumerate(tests): - if (num[i + 4] * 100 + num[i + 5] * 10 + num[i + 6]) % test != 0: - return False - return True - - -def solution(n: int = 10) -> int: - """ - Returns the sum of all pandigital numbers which pass the - divisibility tests. - >>> solution(10) - 16695334890 - """ - return sum( - int("".join(map(str, num))) - for num in permutations(range(n)) - if is_substring_divisible(num) - ) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_044/__init__.py b/project_euler/problem_044/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_044/sol1.py b/project_euler/problem_044/sol1.py deleted file mode 100644 index 2613563a4bf1..000000000000 --- a/project_euler/problem_044/sol1.py +++ /dev/null @@ -1,49 +0,0 @@ -""" -Problem 44: https://projecteuler.net/problem=44 - -Pentagonal numbers are generated by the formula, Pn=n(3n-1)/2. The first ten -pentagonal numbers are: -1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ... -It can be seen that P4 + P7 = 22 + 70 = 92 = P8. However, their difference, -70 - 22 = 48, is not pentagonal. - -Find the pair of pentagonal numbers, Pj and Pk, for which their sum and difference -are pentagonal and D = |Pk - Pj| is minimised; what is the value of D? -""" - - -def is_pentagonal(n: int) -> bool: - """ - Returns True if n is pentagonal, False otherwise. - >>> is_pentagonal(330) - True - >>> is_pentagonal(7683) - False - >>> is_pentagonal(2380) - True - """ - root = (1 + 24 * n) ** 0.5 - return ((1 + root) / 6) % 1 == 0 - - -def solution(limit: int = 5000) -> int: - """ - Returns the minimum difference of two pentagonal numbers P1 and P2 such that - P1 + P2 is pentagonal and P2 - P1 is pentagonal. - >>> solution(5000) - 5482660 - """ - pentagonal_nums = [(i * (3 * i - 1)) // 2 for i in range(1, limit)] - for i, pentagonal_i in enumerate(pentagonal_nums): - for j in range(i, len(pentagonal_nums)): - pentagonal_j = pentagonal_nums[j] - a = pentagonal_i + pentagonal_j - b = pentagonal_j - pentagonal_i - if is_pentagonal(a) and is_pentagonal(b): - return b - - return -1 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_045/__init__.py b/project_euler/problem_045/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_045/sol1.py b/project_euler/problem_045/sol1.py deleted file mode 100644 index 8d016de6e542..000000000000 --- a/project_euler/problem_045/sol1.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -Problem 45: https://projecteuler.net/problem=45 - -Triangle, pentagonal, and hexagonal numbers are generated by the following formulae: -Triangle T(n) = (n * (n + 1)) / 2 1, 3, 6, 10, 15, ... -Pentagonal P(n) = (n * (3 * n - 1)) / 2 1, 5, 12, 22, 35, ... -Hexagonal H(n) = n * (2 * n - 1) 1, 6, 15, 28, 45, ... -It can be verified that T(285) = P(165) = H(143) = 40755. - -Find the next triangle number that is also pentagonal and hexagonal. -All triangle numbers are hexagonal numbers. -T(2n-1) = n * (2 * n - 1) = H(n) -So we shall check only for hexagonal numbers which are also pentagonal. -""" - - -def hexagonal_num(n: int) -> int: - """ - Returns nth hexagonal number - >>> hexagonal_num(143) - 40755 - >>> hexagonal_num(21) - 861 - >>> hexagonal_num(10) - 190 - """ - return n * (2 * n - 1) - - -def is_pentagonal(n: int) -> bool: - """ - Returns True if n is pentagonal, False otherwise. - >>> is_pentagonal(330) - True - >>> is_pentagonal(7683) - False - >>> is_pentagonal(2380) - True - """ - root = (1 + 24 * n) ** 0.5 - return ((1 + root) / 6) % 1 == 0 - - -def solution(start: int = 144) -> int: - """ - Returns the next number which is triangular, pentagonal and hexagonal. - >>> solution(144) - 1533776805 - """ - n = start - num = hexagonal_num(n) - while not is_pentagonal(num): - n += 1 - num = hexagonal_num(n) - return num - - -if __name__ == "__main__": - print(f"{solution()} = ") diff --git a/project_euler/problem_046/__init__.py b/project_euler/problem_046/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_046/sol1.py b/project_euler/problem_046/sol1.py deleted file mode 100644 index f27f658e63e5..000000000000 --- a/project_euler/problem_046/sol1.py +++ /dev/null @@ -1,116 +0,0 @@ -""" -Problem 46: https://projecteuler.net/problem=46 - -It was proposed by Christian Goldbach that every odd composite number can be -written as the sum of a prime and twice a square. - -9 = 7 + 2 x 12 -15 = 7 + 2 x 22 -21 = 3 + 2 x 32 -25 = 7 + 2 x 32 -27 = 19 + 2 x 22 -33 = 31 + 2 x 12 - -It turns out that the conjecture was false. - -What is the smallest odd composite that cannot be written as the sum of a -prime and twice a square? -""" - -from __future__ import annotations - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -odd_composites = [num for num in range(3, 100001, 2) if not is_prime(num)] - - -def compute_nums(n: int) -> list[int]: - """ - Returns a list of first n odd composite numbers which do - not follow the conjecture. - >>> compute_nums(1) - [5777] - >>> compute_nums(2) - [5777, 5993] - >>> compute_nums(0) - Traceback (most recent call last): - ... - ValueError: n must be >= 0 - >>> compute_nums("a") - Traceback (most recent call last): - ... - ValueError: n must be an integer - >>> compute_nums(1.1) - Traceback (most recent call last): - ... - ValueError: n must be an integer - - """ - if not isinstance(n, int): - raise ValueError("n must be an integer") - if n <= 0: - raise ValueError("n must be >= 0") - - list_nums = [] - for num in range(len(odd_composites)): - i = 0 - while 2 * i * i <= odd_composites[num]: - rem = odd_composites[num] - 2 * i * i - if is_prime(rem): - break - i += 1 - else: - list_nums.append(odd_composites[num]) - if len(list_nums) == n: - return list_nums - - return [] - - -def solution() -> int: - """Return the solution to the problem""" - return compute_nums(1)[0] - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_047/__init__.py b/project_euler/problem_047/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_047/sol1.py b/project_euler/problem_047/sol1.py deleted file mode 100644 index 4ecd4f4b44c1..000000000000 --- a/project_euler/problem_047/sol1.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -Combinatoric selections - -Problem 47 - -The first two consecutive numbers to have two distinct prime factors are: - -14 = 2 x 7 -15 = 3 x 5 - -The first three consecutive numbers to have three distinct prime factors are: - -644 = 2² x 7 x 23 -645 = 3 x 5 x 43 -646 = 2 x 17 x 19. - -Find the first four consecutive integers to have four distinct prime factors each. -What is the first of these numbers? -""" - -from functools import lru_cache - - -def unique_prime_factors(n: int) -> set: - """ - Find unique prime factors of an integer. - Tests include sorting because only the set really matters, - not the order in which it is produced. - >>> sorted(set(unique_prime_factors(14))) - [2, 7] - >>> sorted(set(unique_prime_factors(644))) - [2, 7, 23] - >>> sorted(set(unique_prime_factors(646))) - [2, 17, 19] - """ - i = 2 - factors = set() - while i * i <= n: - if n % i: - i += 1 - else: - n //= i - factors.add(i) - if n > 1: - factors.add(n) - return factors - - -@lru_cache -def upf_len(num: int) -> int: - """ - Memoize upf() length results for a given value. - >>> upf_len(14) - 2 - """ - return len(unique_prime_factors(num)) - - -def equality(iterable: list) -> bool: - """ - Check equality of ALL elements in an iterable - >>> equality([1, 2, 3, 4]) - False - >>> equality([2, 2, 2, 2]) - True - >>> equality([1, 2, 3, 2, 1]) - False - """ - return len(set(iterable)) in (0, 1) - - -def run(n: int) -> list: - """ - Runs core process to find problem solution. - >>> run(3) - [644, 645, 646] - """ - - # Incrementor variable for our group list comprehension. - # This serves as the first number in each list of values - # to test. - base = 2 - - while True: - # Increment each value of a generated range - group = [base + i for i in range(n)] - - # Run elements through out unique_prime_factors function - # Append our target number to the end. - checker = [upf_len(x) for x in group] - checker.append(n) - - # If all numbers in the list are equal, return the group variable. - if equality(checker): - return group - - # Increment our base variable by 1 - base += 1 - - -def solution(n: int = 4) -> int: - """Return the first value of the first four consecutive integers to have four - distinct prime factors each. - >>> solution() - 134043 - """ - results = run(n) - return results[0] if len(results) else None - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_048/__init__.py b/project_euler/problem_048/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_048/sol1.py b/project_euler/problem_048/sol1.py deleted file mode 100644 index 5a4538cf5d4e..000000000000 --- a/project_euler/problem_048/sol1.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -Self Powers -Problem 48 - -The series, 1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317. - -Find the last ten digits of the series, 1^1 + 2^2 + 3^3 + ... + 1000^1000. -""" - - -def solution(): - """ - Returns the last 10 digits of the series, 1^1 + 2^2 + 3^3 + ... + 1000^1000. - - >>> solution() - '9110846700' - """ - total = 0 - for i in range(1, 1001): - total += i**i - return str(total)[-10:] - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_049/__init__.py b/project_euler/problem_049/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_049/sol1.py b/project_euler/problem_049/sol1.py deleted file mode 100644 index 5c7560cbddae..000000000000 --- a/project_euler/problem_049/sol1.py +++ /dev/null @@ -1,153 +0,0 @@ -""" -Prime permutations - -Problem 49 - -The arithmetic sequence, 1487, 4817, 8147, in which each of -the terms increases by 3330, is unusual in two ways: -(i) each of the three terms are prime, -(ii) each of the 4-digit numbers are permutations of one another. - -There are no arithmetic sequences made up of three 1-, 2-, or 3-digit primes, -exhibiting this property, but there is one other 4-digit increasing sequence. - -What 12-digit number do you form by concatenating the three terms in this sequence? - -Solution: - -First, we need to generate all 4 digits prime numbers. Then greedy -all of them and use permutation to form new numbers. Use binary search -to check if the permutated numbers is in our prime list and include -them in a candidate list. - -After that, bruteforce all passed candidates sequences using -3 nested loops since we know the answer will be 12 digits. -The bruteforce of this solution will be about 1 sec. -""" - -import math -from itertools import permutations - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def search(target: int, prime_list: list) -> bool: - """ - function to search a number in a list using Binary Search. - >>> search(3, [1, 2, 3]) - True - >>> search(4, [1, 2, 3]) - False - >>> search(101, list(range(-100, 100))) - False - """ - - left, right = 0, len(prime_list) - 1 - while left <= right: - middle = (left + right) // 2 - if prime_list[middle] == target: - return True - elif prime_list[middle] < target: - left = middle + 1 - else: - right = middle - 1 - - return False - - -def solution(): - """ - Return the solution of the problem. - >>> solution() - 296962999629 - """ - prime_list = [n for n in range(1001, 10000, 2) if is_prime(n)] - candidates = [] - - for number in prime_list: - tmp_numbers = [] - - for prime_member in permutations(list(str(number))): - prime = int("".join(prime_member)) - - if prime % 2 == 0: - continue - - if search(prime, prime_list): - tmp_numbers.append(prime) - - tmp_numbers.sort() - if len(tmp_numbers) >= 3: - candidates.append(tmp_numbers) - - passed = [] - for candidate in candidates: - length = len(candidate) - found = False - - for i in range(length): - for j in range(i + 1, length): - for k in range(j + 1, length): - if ( - abs(candidate[i] - candidate[j]) - == abs(candidate[j] - candidate[k]) - and len({candidate[i], candidate[j], candidate[k]}) == 3 - ): - passed.append( - sorted([candidate[i], candidate[j], candidate[k]]) - ) - found = True - - if found: - break - if found: - break - if found: - break - - answer = set() - for seq in passed: - answer.add("".join([str(i) for i in seq])) - - return max(int(x) for x in answer) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_050/__init__.py b/project_euler/problem_050/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_050/sol1.py b/project_euler/problem_050/sol1.py deleted file mode 100644 index 0a5f861f0ef0..000000000000 --- a/project_euler/problem_050/sol1.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -Project Euler Problem 50: https://projecteuler.net/problem=50 - -Consecutive prime sum - -The prime 41, can be written as the sum of six consecutive primes: -41 = 2 + 3 + 5 + 7 + 11 + 13 - -This is the longest sum of consecutive primes that adds to a prime below -one-hundred. - -The longest sum of consecutive primes below one-thousand that adds to a prime, -contains 21 terms, and is equal to 953. - -Which prime, below one-million, can be written as the sum of the most -consecutive primes? -""" - -from __future__ import annotations - - -def prime_sieve(limit: int) -> list[int]: - """ - Sieve of Erotosthenes - Function to return all the prime numbers up to a number 'limit' - https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - - >>> prime_sieve(3) - [2] - - >>> prime_sieve(50) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] - """ - is_prime = [True] * limit - is_prime[0] = False - is_prime[1] = False - is_prime[2] = True - - for i in range(3, int(limit**0.5 + 1), 2): - index = i * 2 - while index < limit: - is_prime[index] = False - index = index + i - - primes = [2] - - for i in range(3, limit, 2): - if is_prime[i]: - primes.append(i) - - return primes - - -def solution(ceiling: int = 1_000_000) -> int: - """ - Returns the biggest prime, below the celing, that can be written as the sum - of consecutive the most consecutive primes. - - >>> solution(500) - 499 - - >>> solution(1_000) - 953 - - >>> solution(10_000) - 9521 - """ - primes = prime_sieve(ceiling) - length = 0 - largest = 0 - - for i in range(len(primes)): - for j in range(i + length, len(primes)): - sol = sum(primes[i:j]) - if sol >= ceiling: - break - - if sol in primes: - length = j - i - largest = sol - - return largest - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_051/__init__.py b/project_euler/problem_051/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_051/sol1.py b/project_euler/problem_051/sol1.py deleted file mode 100644 index dc740c8b947d..000000000000 --- a/project_euler/problem_051/sol1.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -https://projecteuler.net/problem=51 -Prime digit replacements -Problem 51 - -By replacing the 1st digit of the 2-digit number *3, it turns out that six of -the nine possible values: 13, 23, 43, 53, 73, and 83, are all prime. - -By replacing the 3rd and 4th digits of 56**3 with the same digit, this 5-digit -number is the first example having seven primes among the ten generated numbers, -yielding the family: 56003, 56113, 56333, 56443, 56663, 56773, and 56993. -Consequently 56003, being the first member of this family, is the smallest prime -with this property. - -Find the smallest prime which, by replacing part of the number (not necessarily -adjacent digits) with the same digit, is part of an eight prime value family. -""" - -from __future__ import annotations - -from collections import Counter - - -def prime_sieve(n: int) -> list[int]: - """ - Sieve of Erotosthenes - Function to return all the prime numbers up to a certain number - https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - - >>> prime_sieve(3) - [2] - - >>> prime_sieve(50) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] - """ - is_prime = [True] * n - is_prime[0] = False - is_prime[1] = False - is_prime[2] = True - - for i in range(3, int(n**0.5 + 1), 2): - index = i * 2 - while index < n: - is_prime[index] = False - index = index + i - - primes = [2] - - for i in range(3, n, 2): - if is_prime[i]: - primes.append(i) - - return primes - - -def digit_replacements(number: int) -> list[list[int]]: - """ - Returns all the possible families of digit replacements in a number which - contains at least one repeating digit - - >>> digit_replacements(544) - [[500, 511, 522, 533, 544, 555, 566, 577, 588, 599]] - - >>> digit_replacements(3112) - [[3002, 3112, 3222, 3332, 3442, 3552, 3662, 3772, 3882, 3992]] - """ - number_str = str(number) - replacements = [] - digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] - - for duplicate in Counter(number_str) - Counter(set(number_str)): - family = [int(number_str.replace(duplicate, digit)) for digit in digits] - replacements.append(family) - - return replacements - - -def solution(family_length: int = 8) -> int: - """ - Returns the solution of the problem - - >>> solution(2) - 229399 - - >>> solution(3) - 221311 - """ - numbers_checked = set() - - # Filter primes with less than 3 replaceable digits - primes = { - x for x in set(prime_sieve(1_000_000)) if len(str(x)) - len(set(str(x))) >= 3 - } - - for prime in primes: - if prime in numbers_checked: - continue - - replacements = digit_replacements(prime) - - for family in replacements: - numbers_checked.update(family) - primes_in_family = primes.intersection(family) - - if len(primes_in_family) != family_length: - continue - - return min(primes_in_family) - - return -1 - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_052/__init__.py b/project_euler/problem_052/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_052/sol1.py b/project_euler/problem_052/sol1.py deleted file mode 100644 index 21acfb633696..000000000000 --- a/project_euler/problem_052/sol1.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -Permuted multiples -Problem 52 - -It can be seen that the number, 125874, and its double, 251748, contain exactly -the same digits, but in a different order. - -Find the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x, -contain the same digits. -""" - - -def solution(): - """Returns the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and - 6x, contain the same digits. - - >>> solution() - 142857 - """ - i = 1 - - while True: - if ( - sorted(str(i)) - == sorted(str(2 * i)) - == sorted(str(3 * i)) - == sorted(str(4 * i)) - == sorted(str(5 * i)) - == sorted(str(6 * i)) - ): - return i - - i += 1 - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_053/__init__.py b/project_euler/problem_053/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_053/sol1.py b/project_euler/problem_053/sol1.py deleted file mode 100644 index 192cbf25e50c..000000000000 --- a/project_euler/problem_053/sol1.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -Combinatoric selections -Problem 53 - -There are exactly ten ways of selecting three from five, 12345: - - 123, 124, 125, 134, 135, 145, 234, 235, 245, and 345 - -In combinatorics, we use the notation, 5C3 = 10. - -In general, - -nCr = n!/(r!(n-r)!),where r ≤ n, n! = nx(n-1)x...x3x2x1, and 0! = 1. -It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066. - -How many, not necessarily distinct, values of nCr, for 1 ≤ n ≤ 100, are greater -than one-million? -""" - -from math import factorial - - -def combinations(n, r): - return factorial(n) / (factorial(r) * factorial(n - r)) - - -def solution(): - """Returns the number of values of nCr, for 1 ≤ n ≤ 100, are greater than - one-million - - >>> solution() - 4075 - """ - total = 0 - - for i in range(1, 101): - for j in range(1, i + 1): - if combinations(i, j) > 1e6: - total += 1 - return total - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_054/__init__.py b/project_euler/problem_054/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_054/poker_hands.txt b/project_euler/problem_054/poker_hands.txt deleted file mode 100644 index 9ab00248c061..000000000000 --- a/project_euler/problem_054/poker_hands.txt +++ /dev/null @@ -1,1000 +0,0 @@ -8C TS KC 9H 4S 7D 2S 5D 3S AC -5C AD 5D AC 9C 7C 5H 8D TD KS -3H 7H 6S KC JS QH TD JC 2D 8S -TH 8H 5C QS TC 9H 4D JC KS JS -7C 5H KC QH JD AS KH 4C AD 4S -5H KS 9C 7D 9H 8D 3S 5D 5C AH -6H 4H 5C 3H 2H 3S QH 5S 6S AS -TD 8C 4H 7C TC KC 4C 3H 7S KS -7C 9C 6D KD 3H 4C QS QC AC KH -JC 6S 5H 2H 2D KD 9D 7C AS JS -AD QH TH 9D 8H TS 6D 3S AS AC -2H 4S 5C 5S TC KC JD 6C TS 3C -QD AS 6H JS 2C 3D 9H KC 4H 8S -KD 8S 9S 7C 2S 3S 6D 6S 4H KC -3C 8C 2D 7D 4D 9S 4S QH 4H JD -8C KC 7S TC 2D TS 8H QD AC 5C -3D KH QD 6C 6S AD AS 8H 2H QS -6S 8D 4C 8S 6C QH TC 6D 7D 9D -2S 8D 8C 4C TS 9S 9D 9C AC 3D -3C QS 2S 4H JH 3D 2D TD 8S 9H -5H QS 8S 6D 3C 8C JD AS 7H 7D -6H TD 9D AS JH 6C QC 9S KD JC -AH 8S QS 4D TH AC TS 3C 3D 5C -5S 4D JS 3D 8H 6C TS 3S AD 8C -6D 7C 5D 5H 3S 5C JC 2H 5S 3D -5H 6H 2S KS 3D 5D JD 7H JS 8H -KH 4H AS JS QS QC TC 6D 7C KS -3D QS TS 2H JS 4D AS 9S JC KD -QD 5H 4D 5D KH 7H 3D JS KD 4H -2C 9H 6H 5C 9D 6C JC 2D TH 9S -7D 6D AS QD JH 4D JS 7C QS 5C -3H KH QD AD 8C 8H 3S TH 9D 5S -AH 9S 4D 9D 8S 4H JS 3C TC 8D -2C KS 5H QD 3S TS 9H AH AD 8S -5C 7H 5D KD 9H 4D 3D 2D KS AD -KS KC 9S 6D 2C QH 9D 9H TS TC -9C 6H 5D QH 4D AD 6D QC JS KH -9S 3H 9D JD 5C 4D 9H AS TC QH -2C 6D JC 9C 3C AD 9S KH 9D 7D -KC 9C 7C JC JS KD 3H AS 3C 7D -QD KH QS 2C 3S 8S 8H 9H 9C JC -QH 8D 3C KC 4C 4H 6D AD 9H 9D -3S KS QS 7H KH 7D 5H 5D JD AD -2H 2C 6H TH TC 7D 8D 4H 8C AS -4S 2H AC QC 3S 6D TH 4D 4C KH -4D TC KS AS 7C 3C 6D 2D 9H 6C -8C TD 5D QS 2C 7H 4C 9C 3H 9H -5H JH TS 7S TD 6H AD QD 8H 8S -5S AD 9C 8C 7C 8D 5H 9D 8S 2S -4H KH KS 9S 2S KC 5S AD 4S 7D -QS 9C QD 6H JS 5D AC 8D 2S AS -KH AC JC 3S 9D 9S 3C 9C 5S JS -AD 3C 3D KS 3S 5C 9C 8C TS 4S -JH 8D 5D 6H KD QS QD 3D 6C KC -8S JD 6C 3S 8C TC QC 3C QH JS -KC JC 8H 2S 9H 9C JH 8S 8C 9S -8S 2H QH 4D QC 9D KC AS TH 3C -8S 6H TH 7C 2H 6S 3C 3H AS 7S -QH 5S JS 4H 5H TS 8H AH AC JC -9D 8H 2S 4S TC JC 3C 7H 3H 5C -3D AD 3C 3S 4C QC AS 5D TH 8C -6S 9D 4C JS KH AH TS JD 8H AD -4C 6S 9D 7S AC 4D 3D 3S TC JD -AD 7H 6H 4H JH KC TD TS 7D 6S -8H JH TC 3S 8D 8C 9S 2C 5C 4D -2C 9D KC QH TH QS JC 9C 4H TS -QS 3C QD 8H KH 4H 8D TD 8S AC -7C 3C TH 5S 8H 8C 9C JD TC KD -QC TC JD TS 8C 3H 6H KD 7C TD -JH QS KS 9C 6D 6S AS 9H KH 6H -2H 4D AH 2D JH 6H TD 5D 4H JD -KD 8C 9S JH QD JS 2C QS 5C 7C -4S TC 7H 8D 2S 6H 7S 9C 7C KC -8C 5D 7H 4S TD QC 8S JS 4H KS -AD 8S JH 6D TD KD 7C 6C 2D 7D -JC 6H 6S JS 4H QH 9H AH 4C 3C -6H 5H AS 7C 7S 3D KH KC 5D 5C -JC 3D TD AS 4D 6D 6S QH JD KS -8C 7S 8S QH 2S JD 5C 7H AH QD -8S 3C 6H 6C 2C 8D TD 7D 4C 4D -5D QH KH 7C 2S 7H JS 6D QC QD -AD 6C 6S 7D TH 6H 2H 8H KH 4H -KS JS KD 5D 2D KH 7D 9C 8C 3D -9C 6D QD 3C KS 3S 7S AH JD 2D -AH QH AS JC 8S 8H 4C KC TH 7D -JC 5H TD 7C 5D KD 4C AD 8H JS -KC 2H AC AH 7D JH KH 5D 7S 6D -9S 5S 9C 6H 8S TD JD 9H 6C AC -7D 8S 6D TS KD 7H AC 5S 7C 5D -AH QC JC 4C TC 8C 2H TS 2C 7D -KD KC 6S 3D 7D 2S 8S 3H 5S 5C -8S 5D 8H 4C 6H KC 3H 7C 5S KD -JH 8C 3D 3C 6C KC TD 7H 7C 4C -JC KC 6H TS QS TD KS 8H 8C 9S -6C 5S 9C QH 7D AH KS KC 9S 2C -4D 4S 8H TD 9C 3S 7D 9D AS TH -6S 7D 3C 6H 5D KD 2C 5C 9D 9C -2H KC 3D AD 3H QD QS 8D JC 4S -8C 3H 9C 7C AD 5D JC 9D JS AS -5D 9H 5C 7H 6S 6C QC JC QD 9S -JC QS JH 2C 6S 9C QC 3D 4S TC -4H 5S 8D 3D 4D 2S KC 2H JS 2C -TD 3S TH KD 4D 7H JH JS KS AC -7S 8C 9S 2D 8S 7D 5C AD 9D AS -8C 7H 2S 6C TH 3H 4C 3S 8H AC -KD 5H JC 8H JD 2D 4H TD JH 5C -3D AS QH KS 7H JD 8S 5S 6D 5H -9S 6S TC QS JC 5C 5D 9C TH 8C -5H 3S JH 9H 2S 2C 6S 7S AS KS -8C QD JC QS TC QC 4H AC KH 6C -TC 5H 7D JH 4H 2H 8D JC KS 4D -5S 9C KH KD 9H 5C TS 3D 7D 2D -5H AS TC 4D 8C 2C TS 9D 3H 8D -6H 8D 2D 9H JD 6C 4S 5H 5S 6D -AD 9C JC 7D 6H 9S 6D JS 9H 3C -AD JH TC QS 4C 5D 9S 7C 9C AH -KD 6H 2H TH 8S QD KS 9D 9H AS -4H 8H 8D 5H 6C AH 5S AS AD 8S -QS 5D 4S 2H TD KS 5H AC 3H JC -9C 7D QD KD AC 6D 5H QH 6H 5S -KC AH QH 2H 7D QS 3H KS 7S JD -6C 8S 3H 6D KS QD 5D 5C 8H TC -9H 4D 4S 6S 9D KH QC 4H 6C JD -TD 2D QH 4S 6H JH KD 3C QD 8C -4S 6H 7C QD 9D AS AH 6S AD 3C -2C KC TH 6H 8D AH 5C 6D 8S 5D -TD TS 7C AD JC QD 9H 3C KC 7H -5D 4D 5S 8H 4H 7D 3H JD KD 2D -JH TD 6H QS 4S KD 5C 8S 7D 8H -AC 3D AS 8C TD 7H KH 5D 6C JD -9D KS 7C 6D QH TC JD KD AS KC -JH 8S 5S 7S 7D AS 2D 3D AD 2H -2H 5D AS 3C QD KC 6H 9H 9S 2C -9D 5D TH 4C JH 3H 8D TC 8H 9H -6H KD 2C TD 2H 6C 9D 2D JS 8C -KD 7S 3C 7C AS QH TS AD 8C 2S -QS 8H 6C JS 4C 9S QC AD TD TS -2H 7C TS TC 8C 3C 9H 2D 6D JC -TC 2H 8D JH KS 6D 3H TD TH 8H -9D TD 9H QC 5D 6C 8H 8C KC TS -2H 8C 3D AH 4D TH TC 7D 8H KC -TS 5C 2D 8C 6S KH AH 5H 6H KC -5S 5D AH TC 4C JD 8D 6H 8C 6C -KC QD 3D 8H 2D JC 9H 4H AD 2S -TD 6S 7D JS KD 4H QS 2S 3S 8C -4C 9H JH TS 3S 4H QC 5S 9S 9C -2C KD 9H JS 9S 3H JC TS 5D AC -AS 2H 5D AD 5H JC 7S TD JS 4C -2D 4S 8H 3D 7D 2C AD KD 9C TS -7H QD JH 5H JS AC 3D TH 4C 8H -6D KH KC QD 5C AD 7C 2D 4H AC -3D 9D TC 8S QD 2C JC 4H JD AH -6C TD 5S TC 8S AH 2C 5D AS AC -TH 7S 3D AS 6C 4C 7H 7D 4H AH -5C 2H KS 6H 7S 4H 5H 3D 3C 7H -3C 9S AC 7S QH 2H 3D 6S 3S 3H -2D 3H AS 2C 6H TC JS 6S 9C 6C -QH KD QD 6D AC 6H KH 2C TS 8C -8H 7D 3S 9H 5D 3H 4S QC 9S 5H -2D 9D 7H 6H 3C 8S 5H 4D 3S 4S -KD 9S 4S TC 7S QC 3S 8S 2H 7H -TC 3D 8C 3H 6C 2H 6H KS KD 4D -KC 3D 9S 3H JS 4S 8H 2D 6C 8S -6H QS 6C TC QD 9H 7D 7C 5H 4D -TD 9D 8D 6S 6C TC 5D TS JS 8H -4H KC JD 9H TC 2C 6S 5H 8H AS -JS 9C 5C 6S 9D JD 8H KC 4C 6D -4D 8D 8S 6C 7C 6H 7H 8H 5C KC -TC 3D JC 6D KS 9S 6H 7S 9C 2C -6C 3S KD 5H TS 7D 9H 9S 6H KH -3D QD 4C 6H TS AC 3S 5C 2H KD -4C AS JS 9S 7C TS 7H 9H JC KS -4H 8C JD 3H 6H AD 9S 4S 5S KS -4C 2C 7D 3D AS 9C 2S QS KC 6C -8S 5H 3D 2S AC 9D 6S 3S 4D TD -QD TH 7S TS 3D AC 7H 6C 5D QC -TC QD AD 9C QS 5C 8D KD 3D 3C -9D 8H AS 3S 7C 8S JD 2D 8D KC -4C TH AC QH JS 8D 7D 7S 9C KH -9D 8D 4C JH 2C 2S QD KD TS 4H -4D 6D 5D 2D JH 3S 8S 3H TC KH -AD 4D 2C QS 8C KD JH JD AH 5C -5C 6C 5H 2H JH 4H KS 7C TC 3H -3C 4C QC 5D JH 9C QD KH 8D TC -3H 9C JS 7H QH AS 7C 9H 5H JC -2D 5S QD 4S 3C KC 6S 6C 5C 4C -5D KH 2D TS 8S 9C AS 9S 7C 4C -7C AH 8C 8D 5S KD QH QS JH 2C -8C 9D AH 2H AC QC 5S 8H 7H 2C -QD 9H 5S QS QC 9C 5H JC TH 4H -6C 6S 3H 5H 3S 6H KS 8D AC 7S -AC QH 7H 8C 4S KC 6C 3D 3S TC -9D 3D JS TH AC 5H 3H 8S 3S TC -QD KH JS KS 9S QC 8D AH 3C AC -5H 6C KH 3S 9S JH 2D QD AS 8C -6C 4D 7S 7H 5S JC 6S 9H 4H JH -AH 5S 6H 9S AD 3S TH 2H 9D 8C -4C 8D 9H 7C QC AD 4S 9C KC 5S -9D 6H 4D TC 4C JH 2S 5D 3S AS -2H 6C 7C KH 5C AD QS TH JD 8S -3S 4S 7S AH AS KC JS 2S AD TH -JS KC 2S 7D 8C 5C 9C TS 5H 9D -7S 9S 4D TD JH JS KH 6H 5D 2C -JD JS JC TH 2D 3D QD 8C AC 5H -7S KH 5S 9D 5D TD 4S 6H 3C 2D -4S 5D AC 8D 4D 7C AD AS AH 9C -6S TH TS KS 2C QC AH AS 3C 4S -2H 8C 3S JC 5C 7C 3H 3C KH JH -7S 3H JC 5S 6H 4C 2S 4D KC 7H -4D 7C 4H 9S 8S 6S AD TC 6C JC -KH QS 3S TC 4C 8H 8S AC 3C TS -QD QS TH 3C TS 7H 7D AH TD JC -TD JD QC 4D 9S 7S TS AD 7D AC -AH 7H 4S 6D 7C 2H 9D KS JC TD -7C AH JD 4H 6D QS TS 2H 2C 5C -TC KC 8C 9S 4C JS 3C JC 6S AH -AS 7D QC 3D 5S JC JD 9D TD KH -TH 3C 2S 6H AH AC 5H 5C 7S 8H -QC 2D AC QD 2S 3S JD QS 6S 8H -KC 4H 3C 9D JS 6H 3S 8S AS 8C -7H KC 7D JD 2H JC QH 5S 3H QS -9H TD 3S 8H 7S AC 5C 6C AH 7C -8D 9H AH JD TD QS 7D 3S 9C 8S -AH QH 3C JD KC 4S 5S 5D TD KS -9H 7H 6S JH TH 4C 7C AD 5C 2D -7C KD 5S TC 9D 6S 6C 5D 2S TH -KC 9H 8D 5H 7H 4H QC 3D 7C AS -6S 8S QC TD 4S 5C TH QS QD 2S -8S 5H TH QC 9H 6S KC 7D 7C 5C -7H KD AH 4D KH 5C 4S 2D KC QH -6S 2C TD JC AS 4D 6C 8C 4H 5S -JC TC JD 5S 6S 8D AS 9D AD 3S -6D 6H 5D 5S TC 3D 7D QS 9D QD -4S 6C 8S 3S 7S AD KS 2D 7D 7C -KC QH JC AC QD 5D 8D QS 7H 7D -JS AH 8S 5H 3D TD 3H 4S 6C JH -4S QS 7D AS 9H JS KS 6D TC 5C -2D 5C 6H TC 4D QH 3D 9H 8S 6C -6D 7H TC TH 5S JD 5C 9C KS KD -8D TD QH 6S 4S 6C 8S KC 5C TC -5S 3D KS AC 4S 7D QD 4C TH 2S -TS 8H 9S 6S 7S QH 3C AH 7H 8C -4C 8C TS JS QC 3D 7D 5D 7S JH -8S 7S 9D QC AC 7C 6D 2H JH KC -JS KD 3C 6S 4S 7C AH QC KS 5H -KS 6S 4H JD QS TC 8H KC 6H AS -KH 7C TC 6S TD JC 5C 7D AH 3S -3H 4C 4H TC TH 6S 7H 6D 9C QH -7D 5H 4S 8C JS 4D 3D 8S QH KC -3H 6S AD 7H 3S QC 8S 4S 7S JS -3S JD KH TH 6H QS 9C 6C 2D QD -4S QH 4D 5H KC 7D 6D 8D TH 5S -TD AD 6S 7H KD KH 9H 5S KC JC -3H QC AS TS 4S QD KS 9C 7S KC -TS 6S QC 6C TH TC 9D 5C 5D KD -JS 3S 4H KD 4C QD 6D 9S JC 9D -8S JS 6D 4H JH 6H 6S 6C KS KH -AC 7D 5D TC 9S KH 6S QD 6H AS -AS 7H 6D QH 8D TH 2S KH 5C 5H -4C 7C 3D QC TC 4S KH 8C 2D JS -6H 5D 7S 5H 9C 9H JH 8S TH 7H -AS JS 2S QD KH 8H 4S AC 8D 8S -3H 4C TD KD 8C JC 5C QS 2D JD -TS 7D 5D 6C 2C QS 2H 3C AH KS -4S 7C 9C 7D JH 6C 5C 8H 9D QD -2S TD 7S 6D 9C 9S QS KH QH 5C -JC 6S 9C QH JH 8D 7S JS KH 2H -8D 5H TH KC 4D 4S 3S 6S 3D QS -2D JD 4C TD 7C 6D TH 7S JC AH -QS 7S 4C TH 9D TS AD 4D 3H 6H -2D 3H 7D JD 3D AS 2S 9C QC 8S -4H 9H 9C 2C 7S JH KD 5C 5D 6H -TC 9H 8H JC 3C 9S 8D KS AD KC -TS 5H JD QS QH QC 8D 5D KH AH -5D AS 8S 6S 4C AH QC QD TH 7H -3H 4H 7D 6S 4S 9H AS 8H JS 9D -JD 8C 2C 9D 7D 5H 5S 9S JC KD -KD 9C 4S QD AH 7C AD 9D AC TD -6S 4H 4S 9C 8D KS TC 9D JH 7C -5S JC 5H 4S QH AC 2C JS 2S 9S -8C 5H AS QD AD 5C 7D 8S QC TD -JC 4C 8D 5C KH QS 4D 6H 2H 2C -TH 4S 2D KC 3H QD AC 7H AD 9D -KH QD AS 8H TH KC 8D 7S QH 8C -JC 6C 7D 8C KH AD QS 2H 6S 2D -JC KH 2D 7D JS QC 5H 4C 5D AD -TS 3S AD 4S TD 2D TH 6S 9H JH -9H 2D QS 2C 4S 3D KH AS AC 9D -KH 6S 8H 4S KD 7D 9D TS QD QC -JH 5H AH KS AS AD JC QC 5S KH -5D 7D 6D KS KD 3D 7C 4D JD 3S -AC JS 8D 5H 9C 3H 4H 4D TS 2C -6H KS KH 9D 7C 2S 6S 8S 2H 3D -6H AC JS 7S 3S TD 8H 3H 4H TH -9H TC QC KC 5C KS 6H 4H AC 8S -TC 7D QH 4S JC TS 6D 6C AC KH -QH 7D 7C JH QS QD TH 3H 5D KS -3D 5S 8D JS 4C 2C KS 7H 9C 4H -5H 8S 4H TD 2C 3S QD QC 3H KC -QC JS KD 9C AD 5S 9D 7D 7H TS -8C JC KH 7C 7S 6C TS 2C QD TH -5S 9D TH 3C 7S QH 8S 9C 2H 5H -5D 9H 6H 2S JS KH 3H 7C 2H 5S -JD 5D 5S 2C TC 2S 6S 6C 3C 8S -4D KH 8H 4H 2D KS 3H 5C 2S 9H -3S 2D TD 7H 8S 6H JD KC 9C 8D -6S QD JH 7C 9H 5H 8S 8H TH TD -QS 7S TD 7D TS JC KD 7C 3C 2C -3C JD 8S 4H 2D 2S TD AS 4D AC -AH KS 6C 4C 4S 7D 8C 9H 6H AS -5S 3C 9S 2C QS KD 4D 4S AC 5D -2D TS 2C JS KH QH 5D 8C AS KC -KD 3H 6C TH 8S 7S KH 6H 9S AC -6H 7S 6C QS AH 2S 2H 4H 5D 5H -5H JC QD 2C 2S JD AS QC 6S 7D -6C TC AS KD 8H 9D 2C 7D JH 9S -2H 4C 6C AH 8S TD 3H TH 7C TS -KD 4S TS 6C QH 8D 9D 9C AH 7D -6D JS 5C QD QC 9C 5D 8C 2H KD -3C QH JH AD 6S AH KC 8S 6D 6H -3D 7C 4C 7S 5S 3S 6S 5H JC 3C -QH 7C 5H 3C 3S 8C TS 4C KD 9C -QD 3S 7S 5H 7H QH JC 7C 8C KD -3C KD KH 2S 4C TS AC 6S 2C 7C -2C KH 3C 4C 6H 4D 5H 5S 7S QD -4D 7C 8S QD TS 9D KS 6H KD 3C -QS 4D TS 7S 4C 3H QD 8D 9S TC -TS QH AC 6S 3C 9H 9D QS 8S 6H -3S 7S 5D 4S JS 2D 6C QH 6S TH -4C 4H AS JS 5D 3D TS 9C AC 8S -6S 9C 7C 3S 5C QS AD AS 6H 3C -9S 8C 7H 3H 6S 7C AS 9H JD KH -3D 3H 7S 4D 6C 7C AC 2H 9C TH -4H 5S 3H AC TC TH 9C 9H 9S 8D -8D 9H 5H 4D 6C 2H QD 6S 5D 3S -4C 5C JD QS 4D 3H TH AC QH 8C -QC 5S 3C 7H AD 4C KS 4H JD 6D -QS AH 3H KS 9H 2S JS JH 5H 2H -2H 5S TH 6S TS 3S KS 3C 5H JS -2D 9S 7H 3D KC JH 6D 7D JS TD -AC JS 8H 2C 8C JH JC 2D TH 7S -5D 9S 8H 2H 3D TC AH JC KD 9C -9D QD JC 2H 6D KH TS 9S QH TH -2C 8D 4S JD 5H 3H TH TC 9C KC -AS 3D 9H 7D 4D TH KH 2H 7S 3H -4H 7S KS 2S JS TS 8S 2H QD 8D -5S 6H JH KS 8H 2S QC AC 6S 3S -JC AS AD QS 8H 6C KH 4C 4D QD -2S 3D TS TD 9S KS 6S QS 5C 8D -3C 6D 4S QC KC JH QD TH KH AD -9H AH 4D KS 2S 8D JH JC 7C QS -2D 6C TH 3C 8H QD QH 2S 3S KS -6H 5D 9S 4C TS TD JS QD 9D JD -5H 8H KH 8S KS 7C TD AD 4S KD -2C 7C JC 5S AS 6C 7D 8S 5H 9C -6S QD 9S TS KH QS 5S QH 3C KC -7D 3H 3C KD 5C AS JH 7H 6H JD -9D 5C 9H KC 8H KS 4S AD 4D 2S -3S JD QD 8D 2S 7C 5S 6S 5H TS -6D 9S KC TD 3S 6H QD JD 5C 8D -5H 9D TS KD 8D 6H TD QC 4C 7D -6D 4S JD 9D AH 9S AS TD 9H QD -2D 5S 2H 9C 6H 9S TD QC 7D TC -3S 2H KS TS 2C 9C 8S JS 9D 7D -3C KC 6D 5D 6C 6H 8S AS 7S QS -JH 9S 2H 8D 4C 8H 9H AD TH KH -QC AS 2S JS 5C 6H KD 3H 7H 2C -QD 8H 2S 8D 3S 6D AH 2C TC 5C -JD JS TS 8S 3H 5D TD KC JC 6H -6S QS TC 3H 5D AH JC 7C 7D 4H -7C 5D 8H 9C 2H 9H JH KH 5S 2C -9C 7H 6S TH 3S QC QD 4C AC JD -2H 5D 9S 7D KC 3S QS 2D AS KH -2S 4S 2H 7D 5C TD TH QH 9S 4D -6D 3S TS 6H 4H KS 9D 8H 5S 2D -9H KS 4H 3S 5C 5D KH 6H 6S JS -KC AS 8C 4C JC KH QC TH QD AH -6S KH 9S 2C 5H TC 3C 7H JC 4D -JD 4S 6S 5S 8D 7H 7S 4D 4C 2H -7H 9H 5D KH 9C 7C TS TC 7S 5H -4C 8D QC TS 4S 9H 3D AD JS 7C -8C QS 5C 5D 3H JS AH KC 4S 9D -TS JD 8S QS TH JH KH 2D QD JS -JD QC 5D 6S 9H 3S 2C 8H 9S TS -2S 4C AD 7H JC 5C 2D 6D 4H 3D -7S JS 2C 4H 8C AD QD 9C 3S TD -JD TS 4C 6H 9H 7D QD 6D 3C AS -AS 7C 4C 6S 5D 5S 5C JS QC 4S -KD 6S 9S 7C 3C 5S 7D JH QD JS -4S 7S JH 2C 8S 5D 7H 3D QH AD -TD 6H 2H 8D 4H 2D 7C AD KH 5D -TS 3S 5H 2C QD AH 2S 5C KH TD -KC 4D 8C 5D AS 6C 2H 2S 9H 7C -KD JS QC TS QS KH JH 2C 5D AD -3S 5H KC 6C 9H 3H 2H AD 7D 7S -7S JS JH KD 8S 7D 2S 9H 7C 2H -9H 2D 8D QC 6S AD AS 8H 5H 6C -2S 7H 6C 6D 7D 8C 5D 9D JC 3C -7C 9C 7H JD 2H KD 3S KH AD 4S -QH AS 9H 4D JD KS KD TS KH 5H -4C 8H 5S 3S 3D 7D TD AD 7S KC -JS 8S 5S JC 8H TH 9C 4D 5D KC -7C 5S 9C QD 2C QH JS 5H 8D KH -TD 2S KS 3D AD KC 7S TC 3C 5D -4C 2S AD QS 6C 9S QD TH QH 5C -8C AD QS 2D 2S KC JD KS 6C JC -8D 4D JS 2H 5D QD 7S 7D QH TS -6S 7H 3S 8C 8S 9D QS 8H 6C 9S -4S TC 2S 5C QD 4D QS 6D TH 6S -3S 5C 9D 6H 8D 4C 7D TC 7C TD -AH 6S AS 7H 5S KD 3H 5H AC 4C -8D 8S AH KS QS 2C AD 6H 7D 5D -6H 9H 9S 2H QS 8S 9C 5D 2D KD -TS QC 5S JH 7D 7S TH 9S 9H AC -7H 3H 6S KC 4D 6D 5C 4S QD TS -TD 2S 7C QD 3H JH 9D 4H 7S 7H -KS 3D 4H 5H TC 2S AS 2D 6D 7D -8H 3C 7H TD 3H AD KC TH 9C KH -TC 4C 2C 9S 9D 9C 5C 2H JD 3C -3H AC TS 5D AD 8D 6H QC 6S 8C -2S TS 3S JD 7H 8S QH 4C 5S 8D -AC 4S 6C 3C KH 3D 7C 2D 8S 2H -4H 6C 8S TH 2H 4S 8H 9S 3H 7S -7C 4C 9C 2C 5C AS 5D KD 4D QH -9H 4H TS AS 7D 8D 5D 9S 8C 2H -QC KD AC AD 2H 7S AS 3S 2D 9S -2H QC 8H TC 6D QD QS 5D KH 3C -TH JD QS 4C 2S 5S AD 7H 3S AS -7H JS 3D 6C 3S 6D AS 9S AC QS -9C TS AS 8C TC 8S 6H 9D 8D 6C -4D JD 9C KC 7C 6D KS 3S 8C AS -3H 6S TC 8D TS 3S KC 9S 7C AS -8C QC 4H 4S 8S 6C 3S TC AH AC -4D 7D 5C AS 2H 6S TS QC AD TC -QD QC 8S 4S TH 3D AH TS JH 4H -5C 2D 9S 2C 3H 3C 9D QD QH 7D -KC 9H 6C KD 7S 3C 4D AS TC 2D -3D JS 4D 9D KS 7D TH QC 3H 3C -8D 5S 2H 9D 3H 8C 4C 4H 3C TH -JC TH 4S 6S JD 2D 4D 6C 3D 4C -TS 3S 2D 4H AC 2C 6S 2H JH 6H -TD 8S AD TC AH AC JH 9S 6S 7S -6C KC 4S JD 8D 9H 5S 7H QH AH -KD 8D TS JH 5C 5H 3H AD AS JS -2D 4H 3D 6C 8C 7S AD 5D 5C 8S -TD 5D 7S 9C 4S 5H 6C 8C 4C 8S -JS QH 9C AS 5C QS JC 3D QC 7C -JC 9C KH JH QS QC 2C TS 3D AD -5D JH AC 5C 9S TS 4C JD 8C KS -KC AS 2D KH 9H 2C 5S 4D 3D 6H -TH AH 2D 8S JC 3D 8C QH 7S 3S -8H QD 4H JC AS KH KS 3C 9S 6D -9S QH 7D 9C 4S AC 7H KH 4D KD -AH AD TH 6D 9C 9S KD KS QH 4H -QD 6H 9C 7C QS 6D 6S 9D 5S JH -AH 8D 5H QD 2H JC KS 4H KH 5S -5C 2S JS 8D 9C 8C 3D AS KC AH -JD 9S 2H QS 8H 5S 8C TH 5C 4C -QC QS 8C 2S 2C 3S 9C 4C KS KH -2D 5D 8S AH AD TD 2C JS KS 8C -TC 5S 5H 8H QC 9H 6H JD 4H 9S -3C JH 4H 9H AH 4S 2H 4C 8D AC -8S TH 4D 7D 6D QD QS 7S TC 7C -KH 6D 2D JD 5H JS QD JH 4H 4S -9C 7S JH 4S 3S TS QC 8C TC 4H -QH 9D 4D JH QS 3S 2C 7C 6C 2D -4H 9S JD 5C 5H AH 9D TS 2D 4C -KS JH TS 5D 2D AH JS 7H AS 8D -JS AH 8C AD KS 5S 8H 2C 6C TH -2H 5D AD AC KS 3D 8H TS 6H QC -6D 4H TS 9C 5H JS JH 6S JD 4C -JH QH 4H 2C 6D 3C 5D 4C QS KC -6H 4H 6C 7H 6S 2S 8S KH QC 8C -3H 3D 5D KS 4H TD AD 3S 4D TS -5S 7C 8S 7D 2C KS 7S 6C 8C JS -5D 2H 3S 7C 5C QD 5H 6D 9C 9H -JS 2S KD 9S 8D TD TS AC 8C 9D -5H QD 2S AC 8C 9H KS 7C 4S 3C -KH AS 3H 8S 9C JS QS 4S AD 4D -AS 2S TD AD 4D 9H JC 4C 5H QS -5D 7C 4H TC 2D 6C JS 4S KC 3S -4C 2C 5D AC 9H 3D JD 8S QS QH -2C 8S 6H 3C QH 6D TC KD AC AH -QC 6C 3S QS 4S AC 8D 5C AD KH -5S 4C AC KH AS QC 2C 5C 8D 9C -8H JD 3C KH 8D 5C 9C QD QH 9D -7H TS 2C 8C 4S TD JC 9C 5H QH -JS 4S 2C 7C TH 6C AS KS 7S JD -JH 7C 9H 7H TC 5H 3D 6D 5D 4D -2C QD JH 2H 9D 5S 3D TD AD KS -JD QH 3S 4D TH 7D 6S QS KS 4H -TC KS 5S 8D 8H AD 2S 2D 4C JH -5S JH TC 3S 2D QS 9D 4C KD 9S -AC KH 3H AS 9D KC 9H QD 6C 6S -9H 7S 3D 5C 7D KC TD 8H 4H 6S -3C 7H 8H TC QD 4D 7S 6S QH 6C -6D AD 4C QD 6C 5D 7D 9D KS TS -JH 2H JD 9S 7S TS KH 8D 5D 8H -2D 9S 4C 7D 9D 5H QD 6D AC 6S -7S 6D JC QD JH 4C 6S QS 2H 7D -8C TD JH KD 2H 5C QS 2C JS 7S -TC 5H 4H JH QD 3S 5S 5D 8S KH -KS KH 7C 2C 5D JH 6S 9C 6D JC -5H AH JD 9C JS KC 2H 6H 4D 5S -AS 3C TH QC 6H 9C 8S 8C TD 7C -KC 2C QD 9C KH 4D 7S 3C TS 9H -9C QC 2S TS 8C TD 9S QD 3S 3C -4D 9D TH JH AH 6S 2S JD QH JS -QD 9H 6C KD 7D 7H 5D 6S 8H AH -8H 3C 4S 2H 5H QS QH 7S 4H AC -QS 3C 7S 9S 4H 3S AH KS 9D 7C -AD 5S 6S 2H 2D 5H TC 4S 3C 8C -QH TS 6S 4D JS KS JH AS 8S 6D -2C 8S 2S TD 5H AS TC TS 6C KC -KC TS 8H 2H 3H 7C 4C 5S TH TD -KD AD KH 7H 7S 5D 5H 5S 2D 9C -AD 9S 3D 7S 8C QC 7C 9C KD KS -3C QC 9S 8C 4D 5C AS QD 6C 2C -2H KC 8S JD 7S AC 8D 5C 2S 4D -9D QH 3D 2S TC 3S KS 3C 9H TD -KD 6S AC 2C 7H 5H 3S 6C 6H 8C -QH TC 8S 6S KH TH 4H 5D TS 4D -8C JS 4H 6H 2C 2H 7D AC QD 3D -QS KC 6S 2D 5S 4H TD 3H JH 4C -7S 5H 7H 8H KH 6H QS TH KD 7D -5H AD KD 7C KH 5S TD 6D 3C 6C -8C 9C 5H JD 7C KC KH 7H 2H 3S -7S 4H AD 4D 8S QS TH 3D 7H 5S -8D TC KS KD 9S 6D AD JD 5C 2S -7H 8H 6C QD 2H 6H 9D TC 9S 7C -8D 6D 4C 7C 6C 3C TH KH JS JH -5S 3S 8S JS 9H AS AD 8H 7S KD -JH 7C 2C KC 5H AS AD 9C 9S JS -AD AC 2C 6S QD 7C 3H TH KS KD -9D JD 4H 8H 4C KH 7S TS 8C KC -3S 5S 2H 7S 6H 7D KS 5C 6D AD -5S 8C 9H QS 7H 7S 2H 6C 7D TD -QS 5S TD AC 9D KC 3D TC 2D 4D -TD 2H 7D JD QD 4C 7H 5D KC 3D -4C 3H 8S KD QH 5S QC 9H TC 5H -9C QD TH 5H TS 5C 9H AH QH 2C -4D 6S 3C AC 6C 3D 2C 2H TD TH -AC 9C 5D QC 4D AD 8D 6D 8C KC -AD 3C 4H AC 8D 8H 7S 9S TD JC -4H 9H QH JS 2D TH TD TC KD KS -5S 6S 9S 8D TH AS KH 5H 5C 8S -JD 2S 9S 6S 5S 8S 5D 7S 7H 9D -5D 8C 4C 9D AD TS 2C 7D KD TC -8S QS 4D KC 5C 8D 4S KH JD KD -AS 5C AD QH 7D 2H 9S 7H 7C TC -2S 8S JD KH 7S 6C 6D AD 5D QC -9H 6H 3S 8C 8H AH TC 4H JS TD -2C TS 4D 7H 2D QC 9C 5D TH 7C -6C 8H QC 5D TS JH 5C 5H 9H 4S -2D QC 7H AS JS 8S 2H 4C 4H 8D -JS 6S AC KD 3D 3C 4S 7H TH KC -QH KH 6S QS 5S 4H 3C QD 3S 3H -7H AS KH 8C 4H 9C 5S 3D 6S TS -9C 7C 3H 5S QD 2C 3D AD AC 5H -JH TD 2D 4C TS 3H KH AD 3S 7S -AS 4C 5H 4D 6S KD JC 3C 6H 2D -3H 6S 8C 2D TH 4S AH QH AD 5H -7C 2S 9H 7H KC 5C 6D 5S 3H JC -3C TC 9C 4H QD TD JH 6D 9H 5S -7C 6S 5C 5D 6C 4S 7H 9H 6H AH -AD 2H 7D KC 2C 4C 2S 9S 7H 3S -TH 4C 8S 6S 3S AD KS AS JH TD -5C TD 4S 4D AD 6S 5D TC 9C 7D -8H 3S 4D 4S 5S 6H 5C AC 3H 3D -9H 3C AC 4S QS 8S 9D QH 5H 4D -JC 6C 5H TS AC 9C JD 8C 7C QD -8S 8H 9C JD 2D QC QH 6H 3C 8D -KS JS 2H 6H 5H QH QS 3H 7C 6D -TC 3H 4S 7H QC 2H 3S 8C JS KH -AH 8H 5S 4C 9H JD 3H 7S JC AC -3C 2D 4C 5S 6C 4S QS 3S JD 3D -5H 2D TC AH KS 6D 7H AD 8C 6H -6C 7S 3C JD 7C 8H KS KH AH 6D -AH 7D 3H 8H 8S 7H QS 5H 9D 2D -JD AC 4H 7S 8S 9S KS AS 9D QH -7S 2C 8S 5S JH QS JC AH KD 4C -AH 2S 9H 4H 8D TS TD 6H QH JD -4H JC 3H QS 6D 7S 9C 8S 9D 8D -5H TD 4S 9S 4C 8C 8D 7H 3H 3D -QS KH 3S 2C 2S 3C 7S TD 4S QD -7C TD 4D 5S KH AC AS 7H 4C 6C -2S 5H 6D JD 9H QS 8S 2C 2H TD -2S TS 6H 9H 7S 4H JC 4C 5D 5S -2C 5H 7D 4H 3S QH JC JS 6D 8H -4C QH 7C QD 3S AD TH 8S 5S TS -9H TC 2S TD JC 7D 3S 3D TH QH -7D 4C 8S 5C JH 8H 6S 3S KC 3H -JC 3H KH TC QH TH 6H 2C AC 5H -QS 2H 9D 2C AS 6S 6C 2S 8C 8S -9H 7D QC TH 4H KD QS AC 7S 3C -4D JH 6S 5S 8H KS 9S QC 3S AS -JD 2D 6S 7S TC 9H KC 3H 7D KD -2H KH 7C 4D 4S 3H JS QD 7D KC -4C JC AS 9D 3C JS 6C 8H QD 4D -AH JS 3S 6C 4C 3D JH 6D 9C 9H -9H 2D 8C 7H 5S KS 6H 9C 2S TC -6C 8C AD 7H 6H 3D KH AS 5D TH -KS 8C 3S TS 8S 4D 5S 9S 6C 4H -9H 4S 4H 5C 7D KC 2D 2H 9D JH -5C JS TC 9D 9H 5H 7S KH JC 6S -7C 9H 8H 4D JC KH JD 2H TD TC -8H 6C 2H 2C KH 6H 9D QS QH 5H -AC 7D 2S 3D QD JC 2D 8D JD JH -2H JC 2D 7H 2C 3C 8D KD TD 4H -3S 4H 6D 8D TS 3H TD 3D 6H TH -JH JC 3S AC QH 9H 7H 8S QC 2C -7H TD QS 4S 8S 9C 2S 5D 4D 2H -3D TS 3H 2S QC 8H 6H KC JC KS -5D JD 7D TC 8C 6C 9S 3D 8D AC -8H 6H JH 6C 5D 8D 8S 4H AD 2C -9D 4H 2D 2C 3S TS AS TC 3C 5D -4D TH 5H KS QS 6C 4S 2H 3D AD -5C KC 6H 2C 5S 3C 4D 2D 9H 9S -JD 4C 3H TH QH 9H 5S AH 8S AC -7D 9S 6S 2H TD 9C 4H 8H QS 4C -3C 6H 5D 4H 8C 9C KC 6S QD QS -3S 9H KD TC 2D JS 8C 6S 4H 4S -2S 4C 8S QS 6H KH 3H TH 8C 5D -2C KH 5S 3S 7S 7H 6C 9D QD 8D -8H KS AC 2D KH TS 6C JS KC 7H -9C KS 5C TD QC AH 6C 5H 9S 7C -5D 4D 3H 4H 6S 7C 7S AH QD TD -2H 7D QC 6S TC TS AH 7S 9D 3H -TH 5H QD 9S KS 7S 7C 6H 8C TD -TH 2D 4D QC 5C 7D JD AH 9C 4H -4H 3H AH 8D 6H QC QH 9H 2H 2C -2D AD 4C TS 6H 7S TH 4H QS TD -3C KD 2H 3H QS JD TC QC 5D 8H -KS JC QD TH 9S KD 8D 8C 2D 9C -3C QD KD 6D 4D 8D AH AD QC 8S -8H 3S 9D 2S 3H KS 6H 4C 7C KC -TH 9S 5C 3D 7D 6H AC 7S 4D 2C -5C 3D JD 4D 2D 6D 5H 9H 4C KH -AS 7H TD 6C 2H 3D QD KS 4C 4S -JC 3C AC 7C JD JS 8H 9S QC 5D -JD 6S 5S 2H AS 8C 7D 5H JH 3D -8D TC 5S 9S 8S 3H JC 5H 7S AS -5C TD 3D 7D 4H 8D 7H 4D 5D JS -QS 9C KS TD 2S 8S 5C 2H 4H AS -TH 7S 4H 7D 3H JD KD 5D 2S KC -JD 7H 4S 8H 4C JS 6H QH 5S 4H -2C QS 8C 5S 3H QC 2S 6C QD AD -8C 3D JD TC 4H 2H AD 5S AC 2S -5D 2C JS 2D AD 9D 3D 4C 4S JH -8D 5H 5D 6H 7S 4D KS 9D TD JD -3D 6D 9C 2S AS 7D 5S 5C 8H JD -7C 8S 3S 6S 5H JD TC AD 7H 7S -2S 9D TS 4D AC 8D 6C QD JD 3H -9S KH 2C 3C AC 3D 5H 6H 8D 5D -KS 3D 2D 6S AS 4C 2S 7C 7H KH -AC 2H 3S JC 5C QH 4D 2D 5H 7S -TS AS JD 8C 6H JC 8S 5S 2C 5D -7S QH 7H 6C QC 8H 2D 7C JD 2S -2C QD 2S 2H JC 9C 5D 2D JD JH -7C 5C 9C 8S 7D 6D 8D 6C 9S JH -2C AD 6S 5H 3S KS 7S 9D KH 4C -7H 6C 2C 5C TH 9D 8D 3S QC AH -5S KC 6H TC 5H 8S TH 6D 3C AH -9C KD 4H AD TD 9S 4S 7D 6H 5D -7H 5C 5H 6D AS 4C KD KH 4H 9D -3C 2S 5C 6C JD QS 2H 9D 7D 3H -AC 2S 6S 7S JS QD 5C QS 6H AD -5H TH QC 7H TC 3S 7C 6D KC 3D -4H 3D QC 9S 8H 2C 3S JC KS 5C -4S 6S 2C 6H 8S 3S 3D 9H 3H JS -4S 8C 4D 2D 8H 9H 7D 9D AH TS -9S 2C 9H 4C 8D AS 7D 3D 6D 5S -6S 4C 7H 8C 3H 5H JC AH 9D 9C -2S 7C 5S JD 8C 3S 3D 4D 7D 6S -3C KC 4S 5D 7D 3D JD 7H 3H 4H -9C 9H 4H 4D TH 6D QD 8S 9S 7S -2H AC 8S 4S AD 8C 2C AH 7D TC -TS 9H 3C AD KS TC 3D 8C 8H JD -QC 8D 2C 3C 7D 7C JD 9H 9C 6C -AH 6S JS JH 5D AS QC 2C JD TD -9H KD 2H 5D 2D 3S 7D TC AH TS -TD 8H AS 5D AH QC AC 6S TC 5H -KS 4S 7H 4D 8D 9C TC 2H 6H 3H -3H KD 4S QD QH 3D 8H 8C TD 7S -8S JD TC AH JS QS 2D KH KS 4D -3C AD JC KD JS KH 4S TH 9H 2C -QC 5S JS 9S KS AS 7C QD 2S JD -KC 5S QS 3S 2D AC 5D 9H 8H KS -6H 9C TC AD 2C 6D 5S JD 6C 7C -QS KH TD QD 2C 3H 8S 2S QC AH -9D 9H JH TC QH 3C 2S JS 5C 7H -6C 3S 3D 2S 4S QD 2D TH 5D 2C -2D 6H 6D 2S JC QH AS 7H 4H KH -5H 6S KS AD TC TS 7C AC 4S 4H -AD 3C 4H QS 8C 9D KS 2H 2D 4D -4S 9D 6C 6D 9C AC 8D 3H 7H KD -JC AH 6C TS JD 6D AD 3S 5D QD -JC JH JD 3S 7S 8S JS QC 3H 4S -JD TH 5C 2C AD JS 7H 9S 2H 7S -8D 3S JH 4D QC AS JD 2C KC 6H -2C AC 5H KD 5S 7H QD JH AH 2D -JC QH 8D 8S TC 5H 5C AH 8C 6C -3H JS 8S QD JH 3C 4H 6D 5C 3S -6D 4S 4C AH 5H 5S 3H JD 7C 8D -8H AH 2H 3H JS 3C 7D QC 4H KD -6S 2H KD 5H 8H 2D 3C 8S 7S QD -2S 7S KC QC AH TC QS 6D 4C 8D -5S 9H 2C 3S QD 7S 6C 2H 7C 9D -3C 6C 5C 5S JD JC KS 3S 5D TS -7C KS 6S 5S 2S 2D TC 2H 5H QS -AS 7H 6S TS 5H 9S 9D 3C KD 2H -4S JS QS 3S 4H 7C 2S AC 6S 9D -8C JH 2H 5H 7C 5D QH QS KH QC -3S TD 3H 7C KC 8D 5H 8S KH 8C -4H KH JD TS 3C 7H AS QC JS 5S -AH 9D 2C 8D 4D 2D 6H 6C KC 6S -2S 6H 9D 3S 7H 4D KH 8H KD 3D -9C TC AC JH KH 4D JD 5H TD 3S -7S 4H 9D AS 4C 7D QS 9S 2S KH -3S 8D 8S KS 8C JC 5C KH 2H 5D -8S QH 2C 4D KC JS QC 9D AC 6H -8S 8C 7C JS JD 6S 4C 9C AC 4S -QH 5D 2C 7D JC 8S 2D JS JH 4C -JS 4C 7S TS JH KC KH 5H QD 4S -QD 8C 8D 2D 6S TD 9D AC QH 5S -QH QC JS 3D 3C 5C 4H KH 8S 7H -7C 2C 5S JC 8S 3H QC 5D 2H KC -5S 8D KD 6H 4H QD QH 6D AH 3D -7S KS 6C 2S 4D AC QS 5H TS JD -7C 2D TC 5D QS AC JS QC 6C KC -2C KS 4D 3H TS 8S AD 4H 7S 9S -QD 9H QH 5H 4H 4D KH 3S JC AD -4D AC KC 8D 6D 4C 2D KH 2C JD -2C 9H 2D AH 3H 6D 9C 7D TC KS -8C 3H KD 7C 5C 2S 4S 5H AS AH -TH JD 4H KD 3H TC 5C 3S AC KH -6D 7H AH 7S QC 6H 2D TD JD AS -JH 5D 7H TC 9S 7D JC AS 5S KH -2H 8C AD TH 6H QD KD 9H 6S 6C -QH KC 9D 4D 3S JS JH 4H 2C 9H -TC 7H KH 4H JC 7D 9S 3H QS 7S -AD 7D JH 6C 7H 4H 3S 3H 4D QH -JD 2H 5C AS 6C QC 4D 3C TC JH -AC JD 3H 6H 4C JC AD 7D 7H 9H -4H TC TS 2C 8C 6S KS 2H JD 9S -4C 3H QS QC 9S 9H 6D KC 9D 9C -5C AD 8C 2C QH TH QD JC 8D 8H -QC 2C 2S QD 9C 4D 3S 8D JH QS -9D 3S 2C 7S 7C JC TD 3C TC 9H -3C TS 8H 5C 4C 2C 6S 8D 7C 4H -KS 7H 2H TC 4H 2C 3S AS AH QS -8C 2D 2H 2C 4S 4C 6S 7D 5S 3S -TH QC 5D TD 3C QS KD KC KS AS -4D AH KD 9H KS 5C 4C 6H JC 7S -KC 4H 5C QS TC 2H JC 9S AH QH -4S 9H 3H 5H 3C QD 2H QC JH 8H -5D AS 7H 2C 3D JH 6H 4C 6S 7D -9C JD 9H AH JS 8S QH 3H KS 8H -3S AC QC TS 4D AD 3D AH 8S 9H -7H 3H QS 9C 9S 5H JH JS AH AC -8D 3C JD 2H AC 9C 7H 5S 4D 8H -7C JH 9H 6C JS 9S 7H 8C 9D 4H -2D AS 9S 6H 4D JS JH 9H AD QD -6H 7S JH KH AH 7H TD 5S 6S 2C -8H JH 6S 5H 5S 9D TC 4C QC 9S -7D 2C KD 3H 5H AS QD 7H JS 4D -TS QH 6C 8H TH 5H 3C 3H 9C 9D -AD KH JS 5D 3H AS AC 9S 5C KC -2C KH 8C JC QS 6D AH 2D KC TC -9D 3H 2S 7C 4D 6D KH KS 8D 7D -9H 2S TC JH AC QC 3H 5S 3S 8H -3S AS KD 8H 4C 3H 7C JH QH TS -7S 6D 7H 9D JH 4C 3D 3S 6C AS -4S 2H 2C 4C 8S 5H KC 8C QC QD -3H 3S 6C QS QC 2D 6S 5D 2C 9D -2H 8D JH 2S 3H 2D 6C 5C 7S AD -9H JS 5D QH 8S TS 2H 7S 6S AD -6D QC 9S 7H 5H 5C 7D KC JD 4H -QC 5S 9H 9C 4D 6S KS 2S 4C 7C -9H 7C 4H 8D 3S 6H 5C 8H JS 7S -2D 6H JS TD 4H 4D JC TH 5H KC -AC 7C 8D TH 3H 9S 2D 4C KC 4D -KD QS 9C 7S 3D KS AD TS 4C 4H -QH 9C 8H 2S 7D KS 7H 5D KD 4C -9C 2S 2H JC 6S 6C TC QC JH 5C -7S AC 8H KC 8S 6H QS JC 3D 6S -JS 2D JH 8C 4S 6H 8H 6D 5D AD -6H 7D 2S 4H 9H 7C AS AC 8H 5S -3C JS 4S 6D 5H 2S QH 6S 9C 2C -3D 5S 6S 9S 4C QS 8D QD 8S TC -9C 3D AH 9H 5S 2C 7D AD JC 3S -7H TC AS 3C 6S 6D 7S KH KC 9H -3S TC 8H 6S 5H JH 8C 7D AC 2S -QD 9D 9C 3S JC 8C KS 8H 5D 4D -JS AH JD 6D 9D 8C 9H 9S 8H 3H -2D 6S 4C 4D 8S AD 4S TC AH 9H -TS AC QC TH KC 6D 4H 7S 8C 2H -3C QD JS 9D 5S JC AH 2H TS 9H -3H 4D QH 5D 9C 5H 7D 4S JC 3S -8S TH 3H 7C 2H JD JS TS AC 8D -9C 2H TD KC JD 2S 8C 5S AD 2C -3D KD 7C 5H 4D QH QD TC 6H 7D -7H 2C KC 5S KD 6H AH QC 7S QH -6H 5C AC 5H 2C 9C 2D 7C TD 2S -4D 9D AH 3D 7C JD 4H 8C 4C KS -TH 3C JS QH 8H 4C AS 3D QS QC -4D 7S 5H JH 6D 7D 6H JS KH 3C -QD 8S 7D 2H 2C 7C JC 2S 5H 8C -QH 8S 9D TC 2H AD 7C 8D QD 6S -3S 7C AD 9H 2H 9S JD TS 4C 2D -3S AS 4H QC 2C 8H 8S 7S TD TC -JH TH TD 3S 4D 4H 5S 5D QS 2C -8C QD QH TC 6D 4S 9S 9D 4H QC -8C JS 9D 6H JD 3H AD 6S TD QC -KC 8S 3D 7C TD 7D 8D 9H 4S 3S -6C 4S 3D 9D KD TC KC KS AC 5S -7C 6S QH 3D JS KD 6H 6D 2D 8C -JD 2S 5S 4H 8S AC 2D 6S TS 5C -5H 8C 5S 3C 4S 3D 7C 8D AS 3H -AS TS 7C 3H AD 7D JC QS 6C 6H -3S 9S 4C AC QH 5H 5D 9H TS 4H -6C 5C 7H 7S TD AD JD 5S 2H 2S -7D 6C KC 3S JD 8D 8S TS QS KH -8S QS 8D 6C TH AC AH 2C 8H 9S -7H TD KH QH 8S 3D 4D AH JD AS -TS 3D 2H JC 2S JH KH 6C QC JS -KC TH 2D 6H 7S 2S TC 8C 9D QS -3C 9D 6S KH 8H 6D 5D TH 2C 2H -6H TC 7D AD 4D 8S TS 9H TD 7S -JS 6D JD JC 2H AC 6C 3D KH 8D -KH JD 9S 5D 4H 4C 3H 7S QS 5C -4H JD 5D 3S 3C 4D KH QH QS 7S -JD TS 8S QD AH 4C 6H 3S 5S 2C -QS 3D JD AS 8D TH 7C 6S QC KS -7S 2H 8C QC 7H AC 6D 2D TH KH -5S 6C 7H KH 7D AH 8C 5C 7S 3D -3C KD AD 7D 6C 4D KS 2D 8C 4S -7C 8D 5S 2D 2S AH AD 2C 9D TD -3C AD 4S KS JH 7C 5C 8C 9C TH -AS TD 4D 7C JD 8C QH 3C 5H 9S -3H 9C 8S 9S 6S QD KS AH 5H JH -QC 9C 5S 4H 2H TD 7D AS 8C 9D -8C 2C 9D KD TC 7S 3D KH QC 3C -4D AS 4C QS 5S 9D 6S JD QH KS -6D AH 6C 4C 5H TS 9H 7D 3D 5S -QS JD 7C 8D 9C AC 3S 6S 6C KH -8H JH 5D 9S 6D AS 6S 3S QC 7H -QD AD 5C JH 2H AH 4H AS KC 2C -JH 9C 2C 6H 2D JS 5D 9H KC 6D -7D 9D KD TH 3H AS 6S QC 6H AD -JD 4H 7D KC 3H JS 3C TH 3D QS -4C 3H 8C QD 5H 6H AS 8H AD JD -TH 8S KD 5D QC 7D JS 5S 5H TS -7D KC 9D QS 3H 3C 6D TS 7S AH -7C 4H 7H AH QC AC 4D 5D 6D TH -3C 4H 2S KD 8H 5H JH TC 6C JD -4S 8C 3D 4H JS TD 7S JH QS KD -7C QC KD 4D 7H 6S AD TD TC KH -5H 9H KC 3H 4D 3D AD 6S QD 6H -TH 7C 6H TS QH 5S 2C KC TD 6S -7C 4D 5S JD JH 7D AC KD KH 4H -7D 6C 8D 8H 5C JH 8S QD TH JD -8D 7D 6C 7C 9D KD AS 5C QH JH -9S 2C 8C 3C 4C KS JH 2D 8D 4H -7S 6C JH KH 8H 3H 9D 2D AH 6D -4D TC 9C 8D 7H TD KS TH KD 3C -JD 9H 8D QD AS KD 9D 2C 2S 9C -8D 3H 5C 7H KS 5H QH 2D 8C 9H -2D TH 6D QD 6C KC 3H 3S AD 4C -4H 3H JS 9D 3C TC 5H QH QC JC -3D 5C 6H 3S 3C JC 5S 7S 2S QH -AC 5C 8C 4D 5D 4H 2S QD 3C 3H -2C TD AH 9C KD JS 6S QD 4C QC -QS 8C 3S 4H TC JS 3H 7C JC AD -5H 4D 9C KS JC TD 9S TS 8S 9H -QD TS 7D AS AC 2C TD 6H 8H AH -6S AD 8C 4S 9H 8D 9D KH 8S 3C -QS 4D 2D 7S KH JS JC AD 4C 3C -QS 9S 7H KC TD TH 5H JS AC JH -6D AC 2S QS 7C AS KS 6S KH 5S -6D 8H KH 3C QS 2H 5C 9C 9D 6C -JS 2C 4C 6H 7D JC AC QD TD 3H -4H QC 8H JD 4C KD KS 5C KC 7S -6D 2D 3H 2S QD 5S 7H AS TH 6S -AS 6D 8D 2C 8S TD 8H QD JC AH -9C 9H 2D TD QH 2H 5C TC 3D 8H -KC 8S 3D KH 2S TS TC 6S 4D JH -9H 9D QS AC KC 6H 5D 4D 8D AH -9S 5C QS 4H 7C 7D 2H 8S AD JS -3D AC 9S AS 2C 2D 2H 3H JC KH -7H QH KH JD TC KS 5S 8H 4C 8D -2H 7H 3S 2S 5H QS 3C AS 9H KD -AD 3D JD 6H 5S 9C 6D AC 9S 3S -3D 5D 9C 2D AC 4S 2S AD 6C 6S -QC 4C 2D 3H 6S KC QH QD 2H JH -QC 3C 8S 4D 9S 2H 5C 8H QS QD -6D KD 6S 7H 3S KH 2H 5C JC 6C -3S 9S TC 6S 8H 2D AD 7S 8S TS -3C 6H 9C 3H 5C JC 8H QH TD QD -3C JS QD 5D TD 2C KH 9H TH AS -9S TC JD 3D 5C 5H AD QH 9H KC -TC 7H 4H 8H 3H TD 6S AC 7C 2S -QS 9D 5D 3C JC KS 4D 6C JH 2S -9S 6S 3C 7H TS 4C KD 6D 3D 9C -2D 9H AH AC 7H 2S JH 3S 7C QC -QD 9H 3C 2H AC AS 8S KD 8C KH -2D 7S TD TH 6D JD 8D 4D 2H 5S -8S QH KD JD QS JH 4D KC 5H 3S -3C KH QC 6D 8H 3S AH 7D TD 2D -5S 9H QH 4S 6S 6C 6D TS TH 7S -6C 4C 6D QS JS 9C TS 3H 8D 8S -JS 5C 7S AS 2C AH 2H AD 5S TC -KD 6C 9C 9D TS 2S JC 4H 2C QD -QS 9H TC 3H KC KS 4H 3C AD TH -KH 9C 2H KD 9D TC 7S KC JH 2D -7C 3S KC AS 8C 5D 9C 9S QH 3H -2D 8C TD 4C 2H QC 5D TC 2C 7D -KS 4D 6C QH TD KH 5D 7C AD 8D -2S 9S 8S 4C 8C 3D 6H QD 7C 7H -6C 8S QH 5H TS 5C 3C 4S 2S 2H -8S 6S 2H JC 3S 3H 9D 8C 2S 7H -QC 2C 8H 9C AC JD 4C 4H 6S 3S -3H 3S 7D 4C 9S 5H 8H JC 3D TC -QH 2S 2D 9S KD QD 9H AD 6D 9C -8D 2D KS 9S JC 4C JD KC 4S TH -KH TS 6D 4D 5C KD 5H AS 9H AD -QD JS 7C 6D 5D 5C TH 5H QH QS -9D QH KH 5H JH 4C 4D TC TH 6C -KH AS TS 9D KD 9C 7S 4D 8H 5S -KH AS 2S 7D 9D 4C TS TH AH 7C -KS 4D AC 8S 9S 8D TH QH 9D 5C -5D 5C 8C QS TC 4C 3D 3S 2C 8D -9D KS 2D 3C KC 4S 8C KH 6C JC -8H AH 6H 7D 7S QD 3C 4C 6C KC -3H 2C QH 8H AS 7D 4C 8C 4H KC -QD 5S 4H 2C TD AH JH QH 4C 8S -3H QS 5S JS 8H 2S 9H 9C 3S 2C -6H TS 7S JC QD AC TD KC 5S 3H -QH AS QS 7D JC KC 2C 4C 5C 5S -QH 3D AS JS 4H 8D 7H JC 2S 9C -5D 4D 2S 4S 9D 9C 2D QS 8H 7H -6D 7H 3H JS TS AC 2D JH 7C 8S -JH 5H KC 3C TC 5S 9H 4C 8H 9D -8S KC 5H 9H AD KS 9D KH 8D AH -JC 2H 9H KS 6S 3H QC 5H AH 9C -5C KH 5S AD 6C JC 9H QC 9C TD -5S 5D JC QH 2D KS 8H QS 2H TS -JH 5H 5S AH 7H 3C 8S AS TD KH -6H 3D JD 2C 4C KC 7S AH 6C JH -4C KS 9D AD 7S KC 7D 8H 3S 9C -7H 5C 5H 3C 8H QC 3D KH 6D JC -2D 4H 5D 7D QC AD AH 9H QH 8H -KD 8C JS 9D 3S 3C 2H 5D 6D 2S -8S 6S TS 3C 6H 8D 5S 3H TD 6C -KS 3D JH 9C 7C 9S QS 5S 4H 6H -7S 6S TH 4S KC KD 3S JC JH KS -7C 3C 2S 6D QH 2C 7S 5H 8H AH -KC 8D QD 6D KH 5C 7H 9D 3D 9C -6H 2D 8S JS 9S 2S 6D KC 7C TC -KD 9C JH 7H KC 8S 2S 7S 3D 6H -4H 9H 2D 4C 8H 7H 5S 8S 2H 8D -AD 7C 3C 7S 5S 4D 9H 3D JC KH -5D AS 7D 6D 9C JC 4C QH QS KH -KD JD 7D 3D QS QC 8S 6D JS QD -6S 8C 5S QH TH 9H AS AC 2C JD -QC KS QH 7S 3C 4C 5C KC 5D AH -6C 4H 9D AH 2C 3H KD 3D TS 5C -TD 8S QS AS JS 3H KD AC 4H KS -7D 5D TS 9H 4H 4C 9C 2H 8C QC -2C 7D 9H 4D KS 4C QH AD KD JS -QD AD AH KH 9D JS 9H JC KD JD -8S 3C 4S TS 7S 4D 5C 2S 6H 7C -JS 7S 5C KD 6D QH 8S TD 2H 6S -QH 6C TC 6H TD 4C 9D 2H QC 8H -3D TS 4D 2H 6H 6S 2C 7H 8S 6C -9H 9D JD JH 3S AH 2C 6S 3H 8S -2C QS 8C 5S 3H 2S 7D 3C AD 4S -5C QC QH AS TS 4S 6S 4C 5H JS -JH 5C TD 4C 6H JS KD KH QS 4H -TC KH JC 4D 9H 9D 8D KC 3C 8H -2H TC 8S AD 9S 4H TS 7H 2C 5C -4H 2S 6C 5S KS AH 9C 7C 8H KD -TS QH TD QS 3C JH AH 2C 8D 7D -5D KC 3H 5S AC 4S 7H QS 4C 2H -3D 7D QC KH JH 6D 6C TD TH KD -5S 8D TH 6C 9D 7D KH 8C 9S 6D -JD QS 7S QC 2S QH JC 4S KS 8D -7S 5S 9S JD KD 9C JC AD 2D 7C -4S 5H AH JH 9C 5D TD 7C 2D 6S -KC 6C 7H 6S 9C QD 5S 4H KS TD -6S 8D KS 2D TH TD 9H JD TS 3S -KH JS 4H 5D 9D TC TD QC JD TS -QS QD AC AD 4C 6S 2D AS 3H KC -4C 7C 3C TD QS 9C KC AS 8D AD -KC 7H QC 6D 8H 6S 5S AH 7S 8C -3S AD 9H JC 6D JD AS KH 6S JH -AD 3D TS KS 7H JH 2D JS QD AC -9C JD 7C 6D TC 6H 6C JC 3D 3S -QC KC 3S JC KD 2C 8D AH QS TS -AS KD 3D JD 8H 7C 8C 5C QD 6C diff --git a/project_euler/problem_054/sol1.py b/project_euler/problem_054/sol1.py deleted file mode 100644 index 66aa3a0826f5..000000000000 --- a/project_euler/problem_054/sol1.py +++ /dev/null @@ -1,384 +0,0 @@ -""" -Problem: https://projecteuler.net/problem=54 - -In the card game poker, a hand consists of five cards and are ranked, -from lowest to highest, in the following way: - -High Card: Highest value card. -One Pair: Two cards of the same value. -Two Pairs: Two different pairs. -Three of a Kind: Three cards of the same value. -Straight: All cards are consecutive values. -Flush: All cards of the same suit. -Full House: Three of a kind and a pair. -Four of a Kind: Four cards of the same value. -Straight Flush: All cards are consecutive values of same suit. -Royal Flush: Ten, Jack, Queen, King, Ace, in same suit. - -The cards are valued in the order: -2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace. - -If two players have the same ranked hands then the rank made up of the highest -value wins; for example, a pair of eights beats a pair of fives. -But if two ranks tie, for example, both players have a pair of queens, then highest -cards in each hand are compared; if the highest cards tie then the next highest -cards are compared, and so on. - -The file, poker.txt, contains one-thousand random hands dealt to two players. -Each line of the file contains ten cards (separated by a single space): the -first five are Player 1's cards and the last five are Player 2's cards. -You can assume that all hands are valid (no invalid characters or repeated cards), -each player's hand is in no specific order, and in each hand there is a clear winner. - -How many hands does Player 1 win? - -Resources used: -https://en.wikipedia.org/wiki/Texas_hold_%27em -https://en.wikipedia.org/wiki/List_of_poker_hands - -Similar problem on codewars: -https://www.codewars.com/kata/ranking-poker-hands -https://www.codewars.com/kata/sortable-poker-hands -""" - -from __future__ import annotations - -import os - - -class PokerHand: - """Create an object representing a Poker Hand based on an input of a - string which represents the best 5-card combination from the player's hand - and board cards. - - Attributes: (read-only) - hand: a string representing the hand consisting of five cards - - Methods: - compare_with(opponent): takes in player's hand (self) and - opponent's hand (opponent) and compares both hands according to - the rules of Texas Hold'em. - Returns one of 3 strings (Win, Loss, Tie) based on whether - player's hand is better than the opponent's hand. - - hand_name(): Returns a string made up of two parts: hand name - and high card. - - Supported operators: - Rich comparison operators: <, >, <=, >=, ==, != - - Supported built-in methods and functions: - list.sort(), sorted() - """ - - _HAND_NAME = ( - "High card", - "One pair", - "Two pairs", - "Three of a kind", - "Straight", - "Flush", - "Full house", - "Four of a kind", - "Straight flush", - "Royal flush", - ) - - _CARD_NAME = ( - "", # placeholder as tuples are zero-indexed - "One", - "Two", - "Three", - "Four", - "Five", - "Six", - "Seven", - "Eight", - "Nine", - "Ten", - "Jack", - "Queen", - "King", - "Ace", - ) - - def __init__(self, hand: str) -> None: - """ - Initialize hand. - Hand should of type str and should contain only five cards each - separated by a space. - - The cards should be of the following format: - [card value][card suit] - - The first character is the value of the card: - 2, 3, 4, 5, 6, 7, 8, 9, T(en), J(ack), Q(ueen), K(ing), A(ce) - - The second character represents the suit: - S(pades), H(earts), D(iamonds), C(lubs) - - For example: "6S 4C KC AS TH" - """ - if not isinstance(hand, str): - msg = f"Hand should be of type 'str': {hand!r}" - raise TypeError(msg) - # split removes duplicate whitespaces so no need of strip - if len(hand.split(" ")) != 5: - msg = f"Hand should contain only 5 cards: {hand!r}" - raise ValueError(msg) - self._hand = hand - self._first_pair = 0 - self._second_pair = 0 - self._card_values, self._card_suit = self._internal_state() - self._hand_type = self._get_hand_type() - self._high_card = self._card_values[0] - - @property - def hand(self): - """Returns the self hand""" - return self._hand - - def compare_with(self, other: PokerHand) -> str: - """ - Determines the outcome of comparing self hand with other hand. - Returns the output as 'Win', 'Loss', 'Tie' according to the rules of - Texas Hold'em. - - Here are some examples: - >>> player = PokerHand("2H 3H 4H 5H 6H") # Stright flush - >>> opponent = PokerHand("KS AS TS QS JS") # Royal flush - >>> player.compare_with(opponent) - 'Loss' - - >>> player = PokerHand("2S AH 2H AS AC") # Full house - >>> opponent = PokerHand("2H 3H 5H 6H 7H") # Flush - >>> player.compare_with(opponent) - 'Win' - - >>> player = PokerHand("2S AH 4H 5S 6C") # High card - >>> opponent = PokerHand("AD 4C 5H 6H 2C") # High card - >>> player.compare_with(opponent) - 'Tie' - """ - # Breaking the tie works on the following order of precedence: - # 1. First pair (default 0) - # 2. Second pair (default 0) - # 3. Compare all cards in reverse order because they are sorted. - - # First pair and second pair will only be a non-zero value if the card - # type is either from the following: - # 21: Four of a kind - # 20: Full house - # 17: Three of a kind - # 16: Two pairs - # 15: One pair - if self._hand_type > other._hand_type: - return "Win" - elif self._hand_type < other._hand_type: - return "Loss" - elif self._first_pair == other._first_pair: - if self._second_pair == other._second_pair: - return self._compare_cards(other) - else: - return "Win" if self._second_pair > other._second_pair else "Loss" - return "Win" if self._first_pair > other._first_pair else "Loss" - - # This function is not part of the problem, I did it just for fun - def hand_name(self) -> str: - """ - Return the name of the hand in the following format: - 'hand name, high card' - - Here are some examples: - >>> PokerHand("KS AS TS QS JS").hand_name() - 'Royal flush' - - >>> PokerHand("2D 6D 3D 4D 5D").hand_name() - 'Straight flush, Six-high' - - >>> PokerHand("JC 6H JS JD JH").hand_name() - 'Four of a kind, Jacks' - - >>> PokerHand("3D 2H 3H 2C 2D").hand_name() - 'Full house, Twos over Threes' - - >>> PokerHand("2H 4D 3C AS 5S").hand_name() # Low ace - 'Straight, Five-high' - - Source: https://en.wikipedia.org/wiki/List_of_poker_hands - """ - name = PokerHand._HAND_NAME[self._hand_type - 14] - high = PokerHand._CARD_NAME[self._high_card] - pair1 = PokerHand._CARD_NAME[self._first_pair] - pair2 = PokerHand._CARD_NAME[self._second_pair] - if self._hand_type in [22, 19, 18]: - return name + f", {high}-high" - elif self._hand_type in [21, 17, 15]: - return name + f", {pair1}s" - elif self._hand_type in [20, 16]: - join = "over" if self._hand_type == 20 else "and" - return name + f", {pair1}s {join} {pair2}s" - elif self._hand_type == 23: - return name - else: - return name + f", {high}" - - def _compare_cards(self, other: PokerHand) -> str: - # Enumerate gives us the index as well as the element of a list - for index, card_value in enumerate(self._card_values): - if card_value != other._card_values[index]: - return "Win" if card_value > other._card_values[index] else "Loss" - return "Tie" - - def _get_hand_type(self) -> int: - # Number representing the type of hand internally: - # 23: Royal flush - # 22: Straight flush - # 21: Four of a kind - # 20: Full house - # 19: Flush - # 18: Straight - # 17: Three of a kind - # 16: Two pairs - # 15: One pair - # 14: High card - if self._is_flush(): - if self._is_five_high_straight() or self._is_straight(): - return 23 if sum(self._card_values) == 60 else 22 - return 19 - elif self._is_five_high_straight() or self._is_straight(): - return 18 - return 14 + self._is_same_kind() - - def _is_flush(self) -> bool: - return len(self._card_suit) == 1 - - def _is_five_high_straight(self) -> bool: - # If a card is a five high straight (low ace) change the location of - # ace from the start of the list to the end. Check whether the first - # element is ace or not. (Don't want to change again) - # Five high straight (low ace): AH 2H 3S 4C 5D - # Why use sorted here? One call to this function will mutate the list to - # [5, 4, 3, 2, 14] and so for subsequent calls (which will be rare) we - # need to compare the sorted version. - # Refer test_multiple_calls_five_high_straight in test_poker_hand.py - if sorted(self._card_values) == [2, 3, 4, 5, 14]: - if self._card_values[0] == 14: - # Remember, our list is sorted in reverse order - ace_card = self._card_values.pop(0) - self._card_values.append(ace_card) - return True - return False - - def _is_straight(self) -> bool: - for i in range(4): - if self._card_values[i] - self._card_values[i + 1] != 1: - return False - return True - - def _is_same_kind(self) -> int: - # Kind Values for internal use: - # 7: Four of a kind - # 6: Full house - # 3: Three of a kind - # 2: Two pairs - # 1: One pair - # 0: False - kind = val1 = val2 = 0 - for i in range(4): - # Compare two cards at a time, if they are same increase 'kind', - # add the value of the card to val1, if it is repeating again we - # will add 2 to 'kind' as there are now 3 cards with same value. - # If we get card of different value than val1, we will do the same - # thing with val2 - if self._card_values[i] == self._card_values[i + 1]: - if not val1: - val1 = self._card_values[i] - kind += 1 - elif val1 == self._card_values[i]: - kind += 2 - elif not val2: - val2 = self._card_values[i] - kind += 1 - elif val2 == self._card_values[i]: - kind += 2 - # For consistency in hand type (look at note in _get_hand_type function) - kind = kind + 2 if kind in [4, 5] else kind - # first meaning first pair to compare in 'compare_with' - first = max(val1, val2) - second = min(val1, val2) - # If it's full house (three count pair + two count pair), make sure - # first pair is three count and if not then switch them both. - if kind == 6 and self._card_values.count(first) != 3: - first, second = second, first - self._first_pair = first - self._second_pair = second - return kind - - def _internal_state(self) -> tuple[list[int], set[str]]: - # Internal representation of hand as a list of card values and - # a set of card suit - trans: dict = {"T": "10", "J": "11", "Q": "12", "K": "13", "A": "14"} - new_hand = self._hand.translate(str.maketrans(trans)).split() - card_values = [int(card[:-1]) for card in new_hand] - card_suit = {card[-1] for card in new_hand} - return sorted(card_values, reverse=True), card_suit - - def __repr__(self): - return f'{self.__class__}("{self._hand}")' - - def __str__(self): - return self._hand - - # Rich comparison operators (used in list.sort() and sorted() builtin functions) - # Note that this is not part of the problem but another extra feature where - # if you have a list of PokerHand objects, you can sort them just through - # the builtin functions. - def __eq__(self, other): - if isinstance(other, PokerHand): - return self.compare_with(other) == "Tie" - return NotImplemented - - def __lt__(self, other): - if isinstance(other, PokerHand): - return self.compare_with(other) == "Loss" - return NotImplemented - - def __le__(self, other): - if isinstance(other, PokerHand): - return self < other or self == other - return NotImplemented - - def __gt__(self, other): - if isinstance(other, PokerHand): - return not self < other and self != other - return NotImplemented - - def __ge__(self, other): - if isinstance(other, PokerHand): - return not self < other - return NotImplemented - - def __hash__(self): - return object.__hash__(self) - - -def solution() -> int: - # Solution for problem number 54 from Project Euler - # Input from poker_hands.txt file - answer = 0 - script_dir = os.path.abspath(os.path.dirname(__file__)) - poker_hands = os.path.join(script_dir, "poker_hands.txt") - with open(poker_hands) as file_hand: - for line in file_hand: - player_hand = line[:14].strip() - opponent_hand = line[15:].strip() - player, opponent = PokerHand(player_hand), PokerHand(opponent_hand) - output = player.compare_with(opponent) - if output == "Win": - answer += 1 - return answer - - -if __name__ == "__main__": - solution() diff --git a/project_euler/problem_054/test_poker_hand.py b/project_euler/problem_054/test_poker_hand.py deleted file mode 100644 index ba5e0c8a2643..000000000000 --- a/project_euler/problem_054/test_poker_hand.py +++ /dev/null @@ -1,228 +0,0 @@ -import os -from itertools import chain -from random import randrange, shuffle - -import pytest - -from .sol1 import PokerHand - -SORTED_HANDS = ( - "4S 3H 2C 7S 5H", - "9D 8H 2C 6S 7H", - "2D 6D 9D TH 7D", - "TC 8C 2S JH 6C", - "JH 8S TH AH QH", - "TS KS 5S 9S AC", - "KD 6S 9D TH AD", - "KS 8D 4D 9S 4S", # pair - "8C 4S KH JS 4D", # pair - "QH 8H KD JH 8S", # pair - "KC 4H KS 2H 8D", # pair - "KD 4S KC 3H 8S", # pair - "AH 8S AS KC JH", # pair - "3H 4C 4H 3S 2H", # 2 pairs - "5S 5D 2C KH KH", # 2 pairs - "3C KH 5D 5S KH", # 2 pairs - "AS 3C KH AD KH", # 2 pairs - "7C 7S 3S 7H 5S", # 3 of a kind - "7C 7S KH 2H 7H", # 3 of a kind - "AC KH QH AH AS", # 3 of a kind - "2H 4D 3C AS 5S", # straight (low ace) - "3C 5C 4C 2C 6H", # straight - "6S 8S 7S 5H 9H", # straight - "JS QS 9H TS KH", # straight - "QC KH TS JS AH", # straight (high ace) - "8C 9C 5C 3C TC", # flush - "3S 8S 9S 5S KS", # flush - "4C 5C 9C 8C KC", # flush - "JH 8H AH KH QH", # flush - "3D 2H 3H 2C 2D", # full house - "2H 2C 3S 3H 3D", # full house - "KH KC 3S 3H 3D", # full house - "JC 6H JS JD JH", # 4 of a kind - "JC 7H JS JD JH", # 4 of a kind - "JC KH JS JD JH", # 4 of a kind - "2S AS 4S 5S 3S", # straight flush (low ace) - "2D 6D 3D 4D 5D", # straight flush - "5C 6C 3C 7C 4C", # straight flush - "JH 9H TH KH QH", # straight flush - "JH AH TH KH QH", # royal flush (high ace straight flush) -) - -TEST_COMPARE = ( - ("2H 3H 4H 5H 6H", "KS AS TS QS JS", "Loss"), - ("2H 3H 4H 5H 6H", "AS AD AC AH JD", "Win"), - ("AS AH 2H AD AC", "JS JD JC JH 3D", "Win"), - ("2S AH 2H AS AC", "JS JD JC JH AD", "Loss"), - ("2S AH 2H AS AC", "2H 3H 5H 6H 7H", "Win"), - ("AS 3S 4S 8S 2S", "2H 3H 5H 6H 7H", "Win"), - ("2H 3H 5H 6H 7H", "2S 3H 4H 5S 6C", "Win"), - ("2S 3H 4H 5S 6C", "3D 4C 5H 6H 2S", "Tie"), - ("2S 3H 4H 5S 6C", "AH AC 5H 6H AS", "Win"), - ("2S 2H 4H 5S 4C", "AH AC 5H 6H AS", "Loss"), - ("2S 2H 4H 5S 4C", "AH AC 5H 6H 7S", "Win"), - ("6S AD 7H 4S AS", "AH AC 5H 6H 7S", "Loss"), - ("2S AH 4H 5S KC", "AH AC 5H 6H 7S", "Loss"), - ("2S 3H 6H 7S 9C", "7H 3C TH 6H 9S", "Loss"), - ("4S 5H 6H TS AC", "3S 5H 6H TS AC", "Win"), - ("2S AH 4H 5S 6C", "AD 4C 5H 6H 2C", "Tie"), - ("AS AH 3H AD AC", "AS AH 2H AD AC", "Win"), - ("AH AC 5H 5C QS", "AH AC 5H 5C KS", "Loss"), - ("AH AC 5H 5C QS", "KH KC 5H 5C QS", "Win"), - ("7C 7S KH 2H 7H", "3C 3S AH 2H 3H", "Win"), - ("3C 3S AH 2H 3H", "7C 7S KH 2H 7H", "Loss"), - ("6H 5H 4H 3H 2H", "5H 4H 3H 2H AH", "Win"), - ("5H 4H 3H 2H AH", "5H 4H 3H 2H AH", "Tie"), - ("5H 4H 3H 2H AH", "6H 5H 4H 3H 2H", "Loss"), - ("AH AD KS KC AC", "AH KD KH AC KC", "Win"), - ("2H 4D 3C AS 5S", "2H 4D 3C 6S 5S", "Loss"), - ("2H 3S 3C 3H 2S", "3S 3C 2S 2H 2D", "Win"), - ("4D 6D 5D 2D JH", "3S 8S 3H TC KH", "Loss"), - ("4S 6C 8S 3S 7S", "AD KS 2D 7D 7C", "Loss"), - ("6S 4C 7H 8C 3H", "5H JC AH 9D 9C", "Loss"), - ("9D 9H JH TC QH", "3C 2S JS 5C 7H", "Win"), - ("2H TC 8S AD 9S", "4H TS 7H 2C 5C", "Win"), - ("9D 3S 2C 7S 7C", "JC TD 3C TC 9H", "Loss"), -) - -TEST_FLUSH = ( - ("2H 3H 4H 5H 6H", True), - ("AS AH 2H AD AC", False), - ("2H 3H 5H 6H 7H", True), - ("KS AS TS QS JS", True), - ("8H 9H QS JS TH", False), - ("AS 3S 4S 8S 2S", True), -) - -TEST_STRAIGHT = ( - ("2H 3H 4H 5H 6H", True), - ("AS AH 2H AD AC", False), - ("2H 3H 5H 6H 7H", False), - ("KS AS TS QS JS", True), - ("8H 9H QS JS TH", True), -) - -TEST_FIVE_HIGH_STRAIGHT = ( - ("2H 4D 3C AS 5S", True, [5, 4, 3, 2, 14]), - ("2H 5D 3C AS 5S", False, [14, 5, 5, 3, 2]), - ("JH QD KC AS TS", False, [14, 13, 12, 11, 10]), - ("9D 3S 2C 7S 7C", False, [9, 7, 7, 3, 2]), -) - -TEST_KIND = ( - ("JH AH TH KH QH", 0), - ("JH 9H TH KH QH", 0), - ("JC KH JS JD JH", 7), - ("KH KC 3S 3H 3D", 6), - ("8C 9C 5C 3C TC", 0), - ("JS QS 9H TS KH", 0), - ("7C 7S KH 2H 7H", 3), - ("3C KH 5D 5S KH", 2), - ("QH 8H KD JH 8S", 1), - ("2D 6D 9D TH 7D", 0), -) - -TEST_TYPES = ( - ("JH AH TH KH QH", 23), - ("JH 9H TH KH QH", 22), - ("JC KH JS JD JH", 21), - ("KH KC 3S 3H 3D", 20), - ("8C 9C 5C 3C TC", 19), - ("JS QS 9H TS KH", 18), - ("7C 7S KH 2H 7H", 17), - ("3C KH 5D 5S KH", 16), - ("QH 8H KD JH 8S", 15), - ("2D 6D 9D TH 7D", 14), -) - - -def generate_random_hand(): - play, oppo = randrange(len(SORTED_HANDS)), randrange(len(SORTED_HANDS)) - expected = ["Loss", "Tie", "Win"][(play >= oppo) + (play > oppo)] - hand, other = SORTED_HANDS[play], SORTED_HANDS[oppo] - return hand, other, expected - - -def generate_random_hands(number_of_hands: int = 100): - return (generate_random_hand() for _ in range(number_of_hands)) - - -@pytest.mark.parametrize(("hand", "expected"), TEST_FLUSH) -def test_hand_is_flush(hand, expected): - assert PokerHand(hand)._is_flush() == expected - - -@pytest.mark.parametrize(("hand", "expected"), TEST_STRAIGHT) -def test_hand_is_straight(hand, expected): - assert PokerHand(hand)._is_straight() == expected - - -@pytest.mark.parametrize(("hand", "expected", "card_values"), TEST_FIVE_HIGH_STRAIGHT) -def test_hand_is_five_high_straight(hand, expected, card_values): - player = PokerHand(hand) - assert player._is_five_high_straight() == expected - assert player._card_values == card_values - - -@pytest.mark.parametrize(("hand", "expected"), TEST_KIND) -def test_hand_is_same_kind(hand, expected): - assert PokerHand(hand)._is_same_kind() == expected - - -@pytest.mark.parametrize(("hand", "expected"), TEST_TYPES) -def test_hand_values(hand, expected): - assert PokerHand(hand)._hand_type == expected - - -@pytest.mark.parametrize(("hand", "other", "expected"), TEST_COMPARE) -def test_compare_simple(hand, other, expected): - assert PokerHand(hand).compare_with(PokerHand(other)) == expected - - -@pytest.mark.parametrize(("hand", "other", "expected"), generate_random_hands()) -def test_compare_random(hand, other, expected): - assert PokerHand(hand).compare_with(PokerHand(other)) == expected - - -def test_hand_sorted(): - poker_hands = [PokerHand(hand) for hand in SORTED_HANDS] - list_copy = poker_hands.copy() - shuffle(list_copy) - user_sorted = chain(sorted(list_copy)) - for index, hand in enumerate(user_sorted): - assert hand == poker_hands[index] - - -def test_custom_sort_five_high_straight(): - # Test that five high straights are compared correctly. - pokerhands = [PokerHand("2D AC 3H 4H 5S"), PokerHand("2S 3H 4H 5S 6C")] - pokerhands.sort(reverse=True) - assert pokerhands[0].__str__() == "2S 3H 4H 5S 6C" - - -def test_multiple_calls_five_high_straight(): - # Multiple calls to five_high_straight function should still return True - # and shouldn't mutate the list in every call other than the first. - pokerhand = PokerHand("2C 4S AS 3D 5C") - expected = True - expected_card_values = [5, 4, 3, 2, 14] - for _ in range(10): - assert pokerhand._is_five_high_straight() == expected - assert pokerhand._card_values == expected_card_values - - -def test_euler_project(): - # Problem number 54 from Project Euler - # Testing from poker_hands.txt file - answer = 0 - script_dir = os.path.abspath(os.path.dirname(__file__)) - poker_hands = os.path.join(script_dir, "poker_hands.txt") - with open(poker_hands) as file_hand: - for line in file_hand: - player_hand = line[:14].strip() - opponent_hand = line[15:].strip() - player, opponent = PokerHand(player_hand), PokerHand(opponent_hand) - output = player.compare_with(opponent) - if output == "Win": - answer += 1 - assert answer == 376 diff --git a/project_euler/problem_055/__init__.py b/project_euler/problem_055/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_055/sol1.py b/project_euler/problem_055/sol1.py deleted file mode 100644 index 14e411541f3a..000000000000 --- a/project_euler/problem_055/sol1.py +++ /dev/null @@ -1,81 +0,0 @@ -""" -Lychrel numbers -Problem 55: https://projecteuler.net/problem=55 - -If we take 47, reverse and add, 47 + 74 = 121, which is palindromic. - -Not all numbers produce palindromes so quickly. For example, -349 + 943 = 1292, -1292 + 2921 = 4213 -4213 + 3124 = 7337 -That is, 349 took three iterations to arrive at a palindrome. - -Although no one has proved it yet, it is thought that some numbers, like 196, -never produce a palindrome. A number that never forms a palindrome through the -reverse and add process is called a Lychrel number. Due to the theoretical nature -of these numbers, and for the purpose of this problem, we shall assume that a number -is Lychrel until proven otherwise. In addition you are given that for every number -below ten-thousand, it will either (i) become a palindrome in less than fifty -iterations, or, (ii) no one, with all the computing power that exists, has managed -so far to map it to a palindrome. In fact, 10677 is the first number to be shown -to require over fifty iterations before producing a palindrome: -4668731596684224866951378664 (53 iterations, 28-digits). - -Surprisingly, there are palindromic numbers that are themselves Lychrel numbers; -the first example is 4994. -How many Lychrel numbers are there below ten-thousand? -""" - - -def is_palindrome(n: int) -> bool: - """ - Returns True if a number is palindrome. - >>> is_palindrome(12567321) - False - >>> is_palindrome(1221) - True - >>> is_palindrome(9876789) - True - """ - return str(n) == str(n)[::-1] - - -def sum_reverse(n: int) -> int: - """ - Returns the sum of n and reverse of n. - >>> sum_reverse(123) - 444 - >>> sum_reverse(3478) - 12221 - >>> sum_reverse(12) - 33 - """ - return int(n) + int(str(n)[::-1]) - - -def solution(limit: int = 10000) -> int: - """ - Returns the count of all lychrel numbers below limit. - >>> solution(10000) - 249 - >>> solution(5000) - 76 - >>> solution(1000) - 13 - """ - lychrel_nums = [] - for num in range(1, limit): - iterations = 0 - a = num - while iterations < 50: - num = sum_reverse(num) - iterations += 1 - if is_palindrome(num): - break - else: - lychrel_nums.append(a) - return len(lychrel_nums) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_056/__init__.py b/project_euler/problem_056/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_056/sol1.py b/project_euler/problem_056/sol1.py deleted file mode 100644 index 828dbd3a8ddf..000000000000 --- a/project_euler/problem_056/sol1.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Project Euler Problem 56: https://projecteuler.net/problem=56 - -A googol (10^100) is a massive number: one followed by one-hundred zeros; -100^100 is almost unimaginably large: one followed by two-hundred zeros. -Despite their size, the sum of the digits in each number is only 1. - -Considering natural numbers of the form, ab, where a, b < 100, -what is the maximum digital sum? -""" - - -def solution(a: int = 100, b: int = 100) -> int: - """ - Considering natural numbers of the form, a**b, where a, b < 100, - what is the maximum digital sum? - :param a: - :param b: - :return: - >>> solution(10,10) - 45 - - >>> solution(100,100) - 972 - - >>> solution(100,200) - 1872 - """ - - # RETURN the MAXIMUM from the list of SUMs of the list of INT converted from STR of - # BASE raised to the POWER - return max( - sum(int(x) for x in str(base**power)) for base in range(a) for power in range(b) - ) - - -# Tests -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/project_euler/problem_057/__init__.py b/project_euler/problem_057/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_057/sol1.py b/project_euler/problem_057/sol1.py deleted file mode 100644 index 04b6199f4717..000000000000 --- a/project_euler/problem_057/sol1.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Project Euler Problem 57: https://projecteuler.net/problem=57 -It is possible to show that the square root of two can be expressed as an infinite -continued fraction. - -sqrt(2) = 1 + 1 / (2 + 1 / (2 + 1 / (2 + ...))) - -By expanding this for the first four iterations, we get: -1 + 1 / 2 = 3 / 2 = 1.5 -1 + 1 / (2 + 1 / 2} = 7 / 5 = 1.4 -1 + 1 / (2 + 1 / (2 + 1 / 2)) = 17 / 12 = 1.41666... -1 + 1 / (2 + 1 / (2 + 1 / (2 + 1 / 2))) = 41/ 29 = 1.41379... - -The next three expansions are 99/70, 239/169, and 577/408, but the eighth expansion, -1393/985, is the first example where the number of digits in the numerator exceeds -the number of digits in the denominator. - -In the first one-thousand expansions, how many fractions contain a numerator with -more digits than the denominator? -""" - - -def solution(n: int = 1000) -> int: - """ - returns number of fractions containing a numerator with more digits than - the denominator in the first n expansions. - >>> solution(14) - 2 - >>> solution(100) - 15 - >>> solution(10000) - 1508 - """ - prev_numerator, prev_denominator = 1, 1 - result = [] - for i in range(1, n + 1): - numerator = prev_numerator + 2 * prev_denominator - denominator = prev_numerator + prev_denominator - if len(str(numerator)) > len(str(denominator)): - result.append(i) - prev_numerator = numerator - prev_denominator = denominator - - return len(result) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_058/__init__.py b/project_euler/problem_058/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_058/sol1.py b/project_euler/problem_058/sol1.py deleted file mode 100644 index 1d2f406eafdb..000000000000 --- a/project_euler/problem_058/sol1.py +++ /dev/null @@ -1,105 +0,0 @@ -""" -Project Euler Problem 58:https://projecteuler.net/problem=58 - - -Starting with 1 and spiralling anticlockwise in the following way, -a square spiral with side length 7 is formed. - -37 36 35 34 33 32 31 -38 17 16 15 14 13 30 -39 18 5 4 3 12 29 -40 19 6 1 2 11 28 -41 20 7 8 9 10 27 -42 21 22 23 24 25 26 -43 44 45 46 47 48 49 - -It is interesting to note that the odd squares lie along the bottom right -diagonal ,but what is more interesting is that 8 out of the 13 numbers -lying along both diagonals are prime; that is, a ratio of 8/13 ≈ 62%. - -If one complete new layer is wrapped around the spiral above, -a square spiral with side length 9 will be formed. -If this process is continued, -what is the side length of the square spiral for which -the ratio of primes along both diagonals first falls below 10%? - -Solution: We have to find an odd length side for which square falls below -10%. With every layer we add 4 elements are being added to the diagonals -,lets say we have a square spiral of odd length with side length j, -then if we move from j to j+2, we are adding j*j+j+1,j*j+2*(j+1),j*j+3*(j+1) -j*j+4*(j+1). Out of these 4 only the first three can become prime -because last one reduces to (j+2)*(j+2). -So we check individually each one of these before incrementing our -count of current primes. - -""" - -import math - - -def is_prime(number: int) -> bool: - """Checks to see if a number is a prime in O(sqrt(n)). - - A number is prime if it has exactly two factors: 1 and itself. - - >>> is_prime(0) - False - >>> is_prime(1) - False - >>> is_prime(2) - True - >>> is_prime(3) - True - >>> is_prime(27) - False - >>> is_prime(87) - False - >>> is_prime(563) - True - >>> is_prime(2999) - True - >>> is_prime(67483) - False - """ - - if 1 < number < 4: - # 2 and 3 are primes - return True - elif number < 2 or number % 2 == 0 or number % 3 == 0: - # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes - return False - - # All primes number are in format of 6k +/- 1 - for i in range(5, int(math.sqrt(number) + 1), 6): - if number % i == 0 or number % (i + 2) == 0: - return False - return True - - -def solution(ratio: float = 0.1) -> int: - """ - Returns the side length of the square spiral of odd length greater - than 1 for which the ratio of primes along both diagonals - first falls below the given ratio. - >>> solution(.5) - 11 - >>> solution(.2) - 309 - >>> solution(.111) - 11317 - """ - - j = 3 - primes = 3 - - while primes / (2 * j - 1) >= ratio: - for i in range(j * j + j + 1, (j + 2) * (j + 2), j + 1): - primes += is_prime(i) - j += 2 - return j - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/project_euler/problem_059/__init__.py b/project_euler/problem_059/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_059/p059_cipher.txt b/project_euler/problem_059/p059_cipher.txt deleted file mode 100644 index b3b3247298d1..000000000000 --- a/project_euler/problem_059/p059_cipher.txt +++ /dev/null @@ -1 +0,0 @@ -36,22,80,0,0,4,23,25,19,17,88,4,4,19,21,11,88,22,23,23,29,69,12,24,0,88,25,11,12,2,10,28,5,6,12,25,10,22,80,10,30,80,10,22,21,69,23,22,69,61,5,9,29,2,66,11,80,8,23,3,17,88,19,0,20,21,7,10,17,17,29,20,69,8,17,21,29,2,22,84,80,71,60,21,69,11,5,8,21,25,22,88,3,0,10,25,0,10,5,8,88,2,0,27,25,21,10,31,6,25,2,16,21,82,69,35,63,11,88,4,13,29,80,22,13,29,22,88,31,3,88,3,0,10,25,0,11,80,10,30,80,23,29,19,12,8,2,10,27,17,9,11,45,95,88,57,69,16,17,19,29,80,23,29,19,0,22,4,9,1,80,3,23,5,11,28,92,69,9,5,12,12,21,69,13,30,0,0,0,0,27,4,0,28,28,28,84,80,4,22,80,0,20,21,2,25,30,17,88,21,29,8,2,0,11,3,12,23,30,69,30,31,23,88,4,13,29,80,0,22,4,12,10,21,69,11,5,8,88,31,3,88,4,13,17,3,69,11,21,23,17,21,22,88,65,69,83,80,84,87,68,69,83,80,84,87,73,69,83,80,84,87,65,83,88,91,69,29,4,6,86,92,69,15,24,12,27,24,69,28,21,21,29,30,1,11,80,10,22,80,17,16,21,69,9,5,4,28,2,4,12,5,23,29,80,10,30,80,17,16,21,69,27,25,23,27,28,0,84,80,22,23,80,17,16,17,17,88,25,3,88,4,13,29,80,17,10,5,0,88,3,16,21,80,10,30,80,17,16,25,22,88,3,0,10,25,0,11,80,12,11,80,10,26,4,4,17,30,0,28,92,69,30,2,10,21,80,12,12,80,4,12,80,10,22,19,0,88,4,13,29,80,20,13,17,1,10,17,17,13,2,0,88,31,3,88,4,13,29,80,6,17,2,6,20,21,69,30,31,9,20,31,18,11,94,69,54,17,8,29,28,28,84,80,44,88,24,4,14,21,69,30,31,16,22,20,69,12,24,4,12,80,17,16,21,69,11,5,8,88,31,3,88,4,13,17,3,69,11,21,23,17,21,22,88,25,22,88,17,69,11,25,29,12,24,69,8,17,23,12,80,10,30,80,17,16,21,69,11,1,16,25,2,0,88,31,3,88,4,13,29,80,21,29,2,12,21,21,17,29,2,69,23,22,69,12,24,0,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,67,80,10,10,80,7,1,80,21,13,4,17,17,30,2,88,4,13,29,80,22,13,29,69,23,22,69,12,24,12,11,80,22,29,2,12,29,3,69,29,1,16,25,28,69,12,31,69,11,92,69,17,4,69,16,17,22,88,4,13,29,80,23,25,4,12,23,80,22,9,2,17,80,70,76,88,29,16,20,4,12,8,28,12,29,20,69,26,9,69,11,80,17,23,80,84,88,31,3,88,4,13,29,80,21,29,2,12,21,21,17,29,2,69,12,31,69,12,24,0,88,20,12,25,29,0,12,21,23,86,80,44,88,7,12,20,28,69,11,31,10,22,80,22,16,31,18,88,4,13,25,4,69,12,24,0,88,3,16,21,80,10,30,80,17,16,25,22,88,3,0,10,25,0,11,80,17,23,80,7,29,80,4,8,0,23,23,8,12,21,17,17,29,28,28,88,65,75,78,68,81,65,67,81,72,70,83,64,68,87,74,70,81,75,70,81,67,80,4,22,20,69,30,2,10,21,80,8,13,28,17,17,0,9,1,25,11,31,80,17,16,25,22,88,30,16,21,18,0,10,80,7,1,80,22,17,8,73,88,17,11,28,80,17,16,21,11,88,4,4,19,25,11,31,80,17,16,21,69,11,1,16,25,2,0,88,2,10,23,4,73,88,4,13,29,80,11,13,29,7,29,2,69,75,94,84,76,65,80,65,66,83,77,67,80,64,73,82,65,67,87,75,72,69,17,3,69,17,30,1,29,21,1,88,0,23,23,20,16,27,21,1,84,80,18,16,25,6,16,80,0,0,0,23,29,3,22,29,3,69,12,24,0,88,0,0,10,25,8,29,4,0,10,80,10,30,80,4,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,86,80,35,23,28,9,23,7,12,22,23,69,25,23,4,17,30,69,12,24,0,88,3,4,21,21,69,11,4,0,8,3,69,26,9,69,15,24,12,27,24,69,49,80,13,25,20,69,25,2,23,17,6,0,28,80,4,12,80,17,16,25,22,88,3,16,21,92,69,49,80,13,25,6,0,88,20,12,11,19,10,14,21,23,29,20,69,12,24,4,12,80,17,16,21,69,11,5,8,88,31,3,88,4,13,29,80,22,29,2,12,29,3,69,73,80,78,88,65,74,73,70,69,83,80,84,87,72,84,88,91,69,73,95,87,77,70,69,83,80,84,87,70,87,77,80,78,88,21,17,27,94,69,25,28,22,23,80,1,29,0,0,22,20,22,88,31,11,88,4,13,29,80,20,13,17,1,10,17,17,13,2,0,88,31,3,88,4,13,29,80,6,17,2,6,20,21,75,88,62,4,21,21,9,1,92,69,12,24,0,88,3,16,21,80,10,30,80,17,16,25,22,88,29,16,20,4,12,8,28,12,29,20,69,26,9,69,65,64,69,31,25,19,29,3,69,12,24,0,88,18,12,9,5,4,28,2,4,12,21,69,80,22,10,13,2,17,16,80,21,23,7,0,10,89,69,23,22,69,12,24,0,88,19,12,10,19,16,21,22,0,10,21,11,27,21,69,23,22,69,12,24,0,88,0,0,10,25,8,29,4,0,10,80,10,30,80,4,88,19,12,10,19,9,29,80,18,16,31,22,29,80,1,17,17,8,29,4,0,10,80,12,11,80,84,86,80,36,22,20,69,26,9,69,11,25,8,17,28,4,10,80,23,29,17,22,23,30,12,22,23,69,49,80,13,25,6,0,88,28,12,19,21,18,17,3,0,88,18,0,29,30,69,25,18,9,29,80,17,23,80,1,29,4,0,10,29,12,22,21,69,12,24,0,88,3,16,21,3,69,23,22,69,12,24,0,88,3,16,26,3,0,9,5,0,22,4,69,11,21,23,17,21,22,88,25,11,88,7,13,17,19,13,88,4,13,29,80,0,0,0,10,22,21,11,12,3,69,25,2,0,88,21,19,29,30,69,22,5,8,26,21,23,11,94 \ No newline at end of file diff --git a/project_euler/problem_059/sol1.py b/project_euler/problem_059/sol1.py deleted file mode 100644 index 65bfd3f0b0fb..000000000000 --- a/project_euler/problem_059/sol1.py +++ /dev/null @@ -1,128 +0,0 @@ -""" -Each character on a computer is assigned a unique code and the preferred standard is -ASCII (American Standard Code for Information Interchange). -For example, uppercase A = 65, asterisk (*) = 42, and lowercase k = 107. - -A modern encryption method is to take a text file, convert the bytes to ASCII, then -XOR each byte with a given value, taken from a secret key. The advantage with the -XOR function is that using the same encryption key on the cipher text, restores -the plain text; for example, 65 XOR 42 = 107, then 107 XOR 42 = 65. - -For unbreakable encryption, the key is the same length as the plain text message, and -the key is made up of random bytes. The user would keep the encrypted message and the -encryption key in different locations, and without both "halves", it is impossible to -decrypt the message. - -Unfortunately, this method is impractical for most users, so the modified method is -to use a password as a key. If the password is shorter than the message, which is -likely, the key is repeated cyclically throughout the message. The balance for this -method is using a sufficiently long password key for security, but short enough to -be memorable. - -Your task has been made easy, as the encryption key consists of three lower case -characters. Using p059_cipher.txt (right click and 'Save Link/Target As...'), a -file containing the encrypted ASCII codes, and the knowledge that the plain text -must contain common English words, decrypt the message and find the sum of the ASCII -values in the original text. -""" - -from __future__ import annotations - -import string -from itertools import cycle, product -from pathlib import Path - -VALID_CHARS: str = ( - string.ascii_letters + string.digits + string.punctuation + string.whitespace -) -LOWERCASE_INTS: list[int] = [ord(letter) for letter in string.ascii_lowercase] -VALID_INTS: set[int] = {ord(char) for char in VALID_CHARS} - -COMMON_WORDS: list[str] = ["the", "be", "to", "of", "and", "in", "that", "have"] - - -def try_key(ciphertext: list[int], key: tuple[int, ...]) -> str | None: - """ - Given an encrypted message and a possible 3-character key, decrypt the message. - If the decrypted message contains a invalid character, i.e. not an ASCII letter, - a digit, punctuation or whitespace, then we know the key is incorrect, so return - None. - >>> try_key([0, 17, 20, 4, 27], (104, 116, 120)) - 'hello' - >>> try_key([68, 10, 300, 4, 27], (104, 116, 120)) is None - True - """ - decoded: str = "" - keychar: int - cipherchar: int - decodedchar: int - - for keychar, cipherchar in zip(cycle(key), ciphertext): - decodedchar = cipherchar ^ keychar - if decodedchar not in VALID_INTS: - return None - decoded += chr(decodedchar) - - return decoded - - -def filter_valid_chars(ciphertext: list[int]) -> list[str]: - """ - Given an encrypted message, test all 3-character strings to try and find the - key. Return a list of the possible decrypted messages. - >>> from itertools import cycle - >>> text = "The enemy's gate is down" - >>> key = "end" - >>> encoded = [ord(k) ^ ord(c) for k,c in zip(cycle(key), text)] - >>> text in filter_valid_chars(encoded) - True - """ - possibles: list[str] = [] - for key in product(LOWERCASE_INTS, repeat=3): - encoded = try_key(ciphertext, key) - if encoded is not None: - possibles.append(encoded) - return possibles - - -def filter_common_word(possibles: list[str], common_word: str) -> list[str]: - """ - Given a list of possible decoded messages, narrow down the possibilities - for checking for the presence of a specified common word. Only decoded messages - containing common_word will be returned. - >>> filter_common_word(['asfla adf', 'I am here', ' !?! #a'], 'am') - ['I am here'] - >>> filter_common_word(['athla amf', 'I am here', ' !?! #a'], 'am') - ['athla amf', 'I am here'] - """ - return [possible for possible in possibles if common_word in possible.lower()] - - -def solution(filename: str = "p059_cipher.txt") -> int: - """ - Test the ciphertext against all possible 3-character keys, then narrow down the - possibilities by filtering using common words until there's only one possible - decoded message. - >>> solution("test_cipher.txt") - 3000 - """ - ciphertext: list[int] - possibles: list[str] - common_word: str - decoded_text: str - data: str = Path(__file__).parent.joinpath(filename).read_text(encoding="utf-8") - - ciphertext = [int(number) for number in data.strip().split(",")] - - possibles = filter_valid_chars(ciphertext) - for common_word in COMMON_WORDS: - possibles = filter_common_word(possibles, common_word) - if len(possibles) == 1: - break - - decoded_text = possibles[0] - return sum(ord(char) for char in decoded_text) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_059/test_cipher.txt b/project_euler/problem_059/test_cipher.txt deleted file mode 100644 index 27c53740cc1a..000000000000 --- a/project_euler/problem_059/test_cipher.txt +++ /dev/null @@ -1 +0,0 @@ -63,13,28,75,0,23,14,8,0,76,22,89,12,4,13,14,69,16,24,69,29,4,18,23,69,69,59,14,69,11,14,4,29,18 diff --git a/project_euler/problem_062/__init__.py b/project_euler/problem_062/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_062/sol1.py b/project_euler/problem_062/sol1.py deleted file mode 100644 index 3efdb3513bf6..000000000000 --- a/project_euler/problem_062/sol1.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Project Euler 62 -https://projecteuler.net/problem=62 - -The cube, 41063625 (345^3), can be permuted to produce two other cubes: -56623104 (384^3) and 66430125 (405^3). In fact, 41063625 is the smallest cube -which has exactly three permutations of its digits which are also cube. - -Find the smallest cube for which exactly five permutations of its digits are -cube. -""" - -from collections import defaultdict - - -def solution(max_base: int = 5) -> int: - """ - Iterate through every possible cube and sort the cube's digits in - ascending order. Sorting maintains an ordering of the digits that allows - you to compare permutations. Store each sorted sequence of digits in a - dictionary, whose key is the sequence of digits and value is a list of - numbers that are the base of the cube. - - Once you find 5 numbers that produce the same sequence of digits, return - the smallest one, which is at index 0 since we insert each base number in - ascending order. - - >>> solution(2) - 125 - >>> solution(3) - 41063625 - """ - freqs = defaultdict(list) - num = 0 - - while True: - digits = get_digits(num) - freqs[digits].append(num) - - if len(freqs[digits]) == max_base: - base = freqs[digits][0] ** 3 - return base - - num += 1 - - -def get_digits(num: int) -> str: - """ - Computes the sorted sequence of digits of the cube of num. - - >>> get_digits(3) - '27' - >>> get_digits(99) - '027999' - >>> get_digits(123) - '0166788' - """ - return "".join(sorted(str(num**3))) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_063/__init__.py b/project_euler/problem_063/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_063/sol1.py b/project_euler/problem_063/sol1.py deleted file mode 100644 index bea30a2e5670..000000000000 --- a/project_euler/problem_063/sol1.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -The 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number, -134217728=89, is a ninth power. -How many n-digit positive integers exist which are also an nth power? -""" - -""" -The maximum base can be 9 because all n-digit numbers < 10^n. -Now 9**23 has 22 digits so the maximum power can be 22. -Using these conclusions, we will calculate the result. -""" - - -def solution(max_base: int = 10, max_power: int = 22) -> int: - """ - Returns the count of all n-digit numbers which are nth power - >>> solution(10, 22) - 49 - >>> solution(0, 0) - 0 - >>> solution(1, 1) - 0 - >>> solution(-1, -1) - 0 - """ - bases = range(1, max_base) - powers = range(1, max_power) - return sum( - 1 for power in powers for base in bases if len(str(base**power)) == power - ) - - -if __name__ == "__main__": - print(f"{solution(10, 22) = }") diff --git a/project_euler/problem_064/__init__.py b/project_euler/problem_064/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_064/sol1.py b/project_euler/problem_064/sol1.py deleted file mode 100644 index 12769decc62f..000000000000 --- a/project_euler/problem_064/sol1.py +++ /dev/null @@ -1,76 +0,0 @@ -""" -Project Euler Problem 64: https://projecteuler.net/problem=64 - -All square roots are periodic when written as continued fractions. -For example, let us consider sqrt(23). -It can be seen that the sequence is repeating. -For conciseness, we use the notation sqrt(23)=[4;(1,3,1,8)], -to indicate that the block (1,3,1,8) repeats indefinitely. -Exactly four continued fractions, for N<=13, have an odd period. -How many continued fractions for N<=10000 have an odd period? - -References: -- https://en.wikipedia.org/wiki/Continued_fraction -""" - -from math import floor, sqrt - - -def continuous_fraction_period(n: int) -> int: - """ - Returns the continued fraction period of a number n. - - >>> continuous_fraction_period(2) - 1 - >>> continuous_fraction_period(5) - 1 - >>> continuous_fraction_period(7) - 4 - >>> continuous_fraction_period(11) - 2 - >>> continuous_fraction_period(13) - 5 - """ - numerator = 0.0 - denominator = 1.0 - root = int(sqrt(n)) - integer_part = root - period = 0 - while integer_part != 2 * root: - numerator = denominator * integer_part - numerator - denominator = (n - numerator**2) / denominator - integer_part = int((root + numerator) / denominator) - period += 1 - return period - - -def solution(n: int = 10000) -> int: - """ - Returns the count of numbers <= 10000 with odd periods. - This function calls continuous_fraction_period for numbers which are - not perfect squares. - This is checked in if sr - floor(sr) != 0 statement. - If an odd period is returned by continuous_fraction_period, - count_odd_periods is increased by 1. - - >>> solution(2) - 1 - >>> solution(5) - 2 - >>> solution(7) - 2 - >>> solution(11) - 3 - >>> solution(13) - 4 - """ - count_odd_periods = 0 - for i in range(2, n + 1): - sr = sqrt(i) - if sr - floor(sr) != 0 and continuous_fraction_period(i) % 2 == 1: - count_odd_periods += 1 - return count_odd_periods - - -if __name__ == "__main__": - print(f"{solution(int(input().strip()))}") diff --git a/project_euler/problem_065/__init__.py b/project_euler/problem_065/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_065/sol1.py b/project_euler/problem_065/sol1.py deleted file mode 100644 index 0a00cf4773d7..000000000000 --- a/project_euler/problem_065/sol1.py +++ /dev/null @@ -1,99 +0,0 @@ -""" -Project Euler Problem 65: https://projecteuler.net/problem=65 - -The square root of 2 can be written as an infinite continued fraction. - -sqrt(2) = 1 + 1 / (2 + 1 / (2 + 1 / (2 + 1 / (2 + ...)))) - -The infinite continued fraction can be written, sqrt(2) = [1;(2)], (2) -indicates that 2 repeats ad infinitum. In a similar way, sqrt(23) = -[4;(1,3,1,8)]. - -It turns out that the sequence of partial values of continued -fractions for square roots provide the best rational approximations. -Let us consider the convergents for sqrt(2). - -1 + 1 / 2 = 3/2 -1 + 1 / (2 + 1 / 2) = 7/5 -1 + 1 / (2 + 1 / (2 + 1 / 2)) = 17/12 -1 + 1 / (2 + 1 / (2 + 1 / (2 + 1 / 2))) = 41/29 - -Hence the sequence of the first ten convergents for sqrt(2) are: -1, 3/2, 7/5, 17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378, ... - -What is most surprising is that the important mathematical constant, -e = [2;1,2,1,1,4,1,1,6,1,...,1,2k,1,...]. - -The first ten terms in the sequence of convergents for e are: -2, 3, 8/3, 11/4, 19/7, 87/32, 106/39, 193/71, 1264/465, 1457/536, ... - -The sum of digits in the numerator of the 10th convergent is -1 + 4 + 5 + 7 = 17. - -Find the sum of the digits in the numerator of the 100th convergent -of the continued fraction for e. - ------ - -The solution mostly comes down to finding an equation that will generate -the numerator of the continued fraction. For the i-th numerator, the -pattern is: - -n_i = m_i * n_(i-1) + n_(i-2) - -for m_i = the i-th index of the continued fraction representation of e, -n_0 = 1, and n_1 = 2 as the first 2 numbers of the representation. - -For example: -n_9 = 6 * 193 + 106 = 1264 -1 + 2 + 6 + 4 = 13 - -n_10 = 1 * 193 + 1264 = 1457 -1 + 4 + 5 + 7 = 17 -""" - - -def sum_digits(num: int) -> int: - """ - Returns the sum of every digit in num. - - >>> sum_digits(1) - 1 - >>> sum_digits(12345) - 15 - >>> sum_digits(999001) - 28 - """ - digit_sum = 0 - while num > 0: - digit_sum += num % 10 - num //= 10 - return digit_sum - - -def solution(max_n: int = 100) -> int: - """ - Returns the sum of the digits in the numerator of the max-th convergent of - the continued fraction for e. - - >>> solution(9) - 13 - >>> solution(10) - 17 - >>> solution(50) - 91 - """ - pre_numerator = 1 - cur_numerator = 2 - - for i in range(2, max_n + 1): - temp = pre_numerator - e_cont = 2 * i // 3 if i % 3 == 0 else 1 - pre_numerator = cur_numerator - cur_numerator = e_cont * pre_numerator + temp - - return sum_digits(cur_numerator) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_067/__init__.py b/project_euler/problem_067/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_067/sol1.py b/project_euler/problem_067/sol1.py deleted file mode 100644 index 171ff8c268f6..000000000000 --- a/project_euler/problem_067/sol1.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Problem Statement: -By starting at the top of the triangle below and moving to adjacent numbers on -the row below, the maximum total from top to bottom is 23. -3 -7 4 -2 4 6 -8 5 9 3 -That is, 3 + 7 + 4 + 9 = 23. -Find the maximum total from top to bottom in triangle.txt (right click and -'Save Link/Target As...'), a 15K text file containing a triangle with -one-hundred rows. -""" - -import os - - -def solution(): - """ - Finds the maximum total in a triangle as described by the problem statement - above. - - >>> solution() - 7273 - """ - script_dir = os.path.dirname(os.path.realpath(__file__)) - triangle = os.path.join(script_dir, "triangle.txt") - - with open(triangle) as f: - triangle = f.readlines() - - a = [] - for line in triangle: - numbers_from_line = [] - for number in line.strip().split(" "): - numbers_from_line.append(int(number)) - a.append(numbers_from_line) - - for i in range(1, len(a)): - for j in range(len(a[i])): - number1 = a[i - 1][j] if j != len(a[i - 1]) else 0 - number2 = a[i - 1][j - 1] if j > 0 else 0 - a[i][j] += max(number1, number2) - return max(a[-1]) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_067/sol2.py b/project_euler/problem_067/sol2.py deleted file mode 100644 index 4fb093d49956..000000000000 --- a/project_euler/problem_067/sol2.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -Problem Statement: -By starting at the top of the triangle below and moving to adjacent numbers on -the row below, the maximum total from top to bottom is 23. -3 -7 4 -2 4 6 -8 5 9 3 -That is, 3 + 7 + 4 + 9 = 23. -Find the maximum total from top to bottom in triangle.txt (right click and -'Save Link/Target As...'), a 15K text file containing a triangle with -one-hundred rows. -""" - -import os - - -def solution() -> int: - """ - Finds the maximum total in a triangle as described by the problem statement - above. - >>> solution() - 7273 - """ - script_dir = os.path.dirname(os.path.realpath(__file__)) - triangle_path = os.path.join(script_dir, "triangle.txt") - - with open(triangle_path) as in_file: - triangle = [[int(i) for i in line.split()] for line in in_file] - - while len(triangle) != 1: - last_row = triangle.pop() - curr_row = triangle[-1] - for j in range(len(last_row) - 1): - curr_row[j] += max(last_row[j], last_row[j + 1]) - return triangle[0][0] - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_067/triangle.txt b/project_euler/problem_067/triangle.txt deleted file mode 100644 index 00aa2bc6382d..000000000000 --- a/project_euler/problem_067/triangle.txt +++ /dev/null @@ -1,100 +0,0 @@ -59 -73 41 -52 40 09 -26 53 06 34 -10 51 87 86 81 -61 95 66 57 25 68 -90 81 80 38 92 67 73 -30 28 51 76 81 18 75 44 -84 14 95 87 62 81 17 78 58 -21 46 71 58 02 79 62 39 31 09 -56 34 35 53 78 31 81 18 90 93 15 -78 53 04 21 84 93 32 13 97 11 37 51 -45 03 81 79 05 18 78 86 13 30 63 99 95 -39 87 96 28 03 38 42 17 82 87 58 07 22 57 -06 17 51 17 07 93 09 07 75 97 95 78 87 08 53 -67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28 -76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87 -12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35 -70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86 -66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60 -38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47 -36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59 -66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18 -54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45 -71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02 -33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05 -92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12 -24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34 -66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90 -48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37 -37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12 -55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19 -04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22 -75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48 -78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93 -42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65 -52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45 -61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46 -01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63 -93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94 -32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66 -32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61 -92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09 -91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05 -46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86 -99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99 -67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87 -18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38 -68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87 -94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17 -64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66 -43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99 -03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30 -71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36 -73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02 -76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16 -03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07 -49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85 -37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68 -90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38 -57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11 -18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83 -81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33 -90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95 -37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47 -77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44 -22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69 -72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88 -08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72 -56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27 -91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27 -23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32 -09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70 -47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01 -54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34 -96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39 -88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51 -29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69 -37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56 -51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57 -19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06 -13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99 -44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96 -54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39 -52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59 -54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05 -92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35 -41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72 -63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92 -12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45 -30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23 -51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40 -44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67 -65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77 -73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20 -17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39 -60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07 -64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15 -30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68 -23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35 diff --git a/project_euler/problem_068/__init__.py b/project_euler/problem_068/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_068/sol1.py b/project_euler/problem_068/sol1.py deleted file mode 100644 index cf814b001d57..000000000000 --- a/project_euler/problem_068/sol1.py +++ /dev/null @@ -1,134 +0,0 @@ -""" -Project Euler Problem 68: https://projecteuler.net/problem=68 - -Magic 5-gon ring - -Problem Statement: -Consider the following "magic" 3-gon ring, -filled with the numbers 1 to 6, and each line adding to nine. - - 4 - \ - 3 - / \ - 1 - 2 - 6 - / - 5 - -Working clockwise, and starting from the group of three -with the numerically lowest external node (4,3,2 in this example), -each solution can be described uniquely. -For example, the above solution can be described by the set: 4,3,2; 6,2,1; 5,1,3. - -It is possible to complete the ring with four different totals: 9, 10, 11, and 12. -There are eight solutions in total. -Total Solution Set -9 4,2,3; 5,3,1; 6,1,2 -9 4,3,2; 6,2,1; 5,1,3 -10 2,3,5; 4,5,1; 6,1,3 -10 2,5,3; 6,3,1; 4,1,5 -11 1,4,6; 3,6,2; 5,2,4 -11 1,6,4; 5,4,2; 3,2,6 -12 1,5,6; 2,6,4; 3,4,5 -12 1,6,5; 3,5,4; 2,4,6 - -By concatenating each group it is possible to form 9-digit strings; -the maximum string for a 3-gon ring is 432621513. - -Using the numbers 1 to 10, and depending on arrangements, -it is possible to form 16- and 17-digit strings. -What is the maximum 16-digit string for a "magic" 5-gon ring? -""" - -from itertools import permutations - - -def solution(gon_side: int = 5) -> int: - """ - Find the maximum number for a "magic" gon_side-gon ring - - The gon_side parameter should be in the range [3, 5], - other side numbers aren't tested - - >>> solution(3) - 432621513 - >>> solution(4) - 426561813732 - >>> solution() - 6531031914842725 - >>> solution(6) - Traceback (most recent call last): - ValueError: gon_side must be in the range [3, 5] - """ - if gon_side < 3 or gon_side > 5: - raise ValueError("gon_side must be in the range [3, 5]") - - # Since it's 16, we know 10 is on the outer ring - # Put the big numbers at the end so that they are never the first number - small_numbers = list(range(gon_side + 1, 0, -1)) - big_numbers = list(range(gon_side + 2, gon_side * 2 + 1)) - - for perm in permutations(small_numbers + big_numbers): - numbers = generate_gon_ring(gon_side, list(perm)) - if is_magic_gon(numbers): - return int("".join(str(n) for n in numbers)) - - msg = f"Magic {gon_side}-gon ring is impossible" - raise ValueError(msg) - - -def generate_gon_ring(gon_side: int, perm: list[int]) -> list[int]: - """ - Generate a gon_side-gon ring from a permutation state - The permutation state is the ring, but every duplicate is removed - - >>> generate_gon_ring(3, [4, 2, 3, 5, 1, 6]) - [4, 2, 3, 5, 3, 1, 6, 1, 2] - >>> generate_gon_ring(5, [6, 5, 4, 3, 2, 1, 7, 8, 9, 10]) - [6, 5, 4, 3, 4, 2, 1, 2, 7, 8, 7, 9, 10, 9, 5] - """ - result = [0] * (gon_side * 3) - result[0:3] = perm[0:3] - perm.append(perm[1]) - - magic_number = 1 if gon_side < 5 else 2 - - for i in range(1, len(perm) // 3 + magic_number): - result[3 * i] = perm[2 * i + 1] - result[3 * i + 1] = result[3 * i - 1] - result[3 * i + 2] = perm[2 * i + 2] - - return result - - -def is_magic_gon(numbers: list[int]) -> bool: - """ - Check if the solution set is a magic n-gon ring - Check that the first number is the smallest number on the outer ring - Take a list, and check if the sum of each 3 numbers chunk is equal to the same total - - >>> is_magic_gon([4, 2, 3, 5, 3, 1, 6, 1, 2]) - True - >>> is_magic_gon([4, 3, 2, 6, 2, 1, 5, 1, 3]) - True - >>> is_magic_gon([2, 3, 5, 4, 5, 1, 6, 1, 3]) - True - >>> is_magic_gon([1, 2, 3, 4, 5, 6, 7, 8, 9]) - False - >>> is_magic_gon([1]) - Traceback (most recent call last): - ValueError: a gon ring should have a length that is a multiple of 3 - """ - if len(numbers) % 3 != 0: - raise ValueError("a gon ring should have a length that is a multiple of 3") - - if min(numbers[::3]) != numbers[0]: - return False - - total = sum(numbers[:3]) - - return all(sum(numbers[i : i + 3]) == total for i in range(3, len(numbers), 3)) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_069/__init__.py b/project_euler/problem_069/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_069/sol1.py b/project_euler/problem_069/sol1.py deleted file mode 100644 index 5dfd61a89e94..000000000000 --- a/project_euler/problem_069/sol1.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -Totient maximum -Problem 69: https://projecteuler.net/problem=69 - -Euler's Totient function, φ(n) [sometimes called the phi function], -is used to determine the number of numbers less than n which are relatively prime to n. -For example, as 1, 2, 4, 5, 7, and 8, -are all less than nine and relatively prime to nine, φ(9)=6. - -n Relatively Prime φ(n) n/φ(n) -2 1 1 2 -3 1,2 2 1.5 -4 1,3 2 2 -5 1,2,3,4 4 1.25 -6 1,5 2 3 -7 1,2,3,4,5,6 6 1.1666... -8 1,3,5,7 4 2 -9 1,2,4,5,7,8 6 1.5 -10 1,3,7,9 4 2.5 - -It can be seen that n=6 produces a maximum n/φ(n) for n ≤ 10. - -Find the value of n ≤ 1,000,000 for which n/φ(n) is a maximum. -""" - - -def solution(n: int = 10**6) -> int: - """ - Returns solution to problem. - Algorithm: - 1. Precompute φ(k) for all natural k, k <= n using product formula (wikilink below) - https://en.wikipedia.org/wiki/Euler%27s_totient_function#Euler's_product_formula - - 2. Find k/φ(k) for all k ≤ n and return the k that attains maximum - - >>> solution(10) - 6 - - >>> solution(100) - 30 - - >>> solution(9973) - 2310 - - """ - - if n <= 0: - raise ValueError("Please enter an integer greater than 0") - - phi = list(range(n + 1)) - for number in range(2, n + 1): - if phi[number] == number: - phi[number] -= 1 - for multiple in range(number * 2, n + 1, number): - phi[multiple] = (phi[multiple] // number) * (number - 1) - - answer = 1 - for number in range(1, n + 1): - if (answer / phi[answer]) < (number / phi[number]): - answer = number - - return answer - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_070/__init__.py b/project_euler/problem_070/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_070/sol1.py b/project_euler/problem_070/sol1.py deleted file mode 100644 index 9874b7418559..000000000000 --- a/project_euler/problem_070/sol1.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -Project Euler Problem 70: https://projecteuler.net/problem=70 - -Euler's Totient function, φ(n) [sometimes called the phi function], is used to -determine the number of positive numbers less than or equal to n which are -relatively prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than -nine and relatively prime to nine, φ(9)=6. - -The number 1 is considered to be relatively prime to every positive number, so -φ(1)=1. - -Interestingly, φ(87109)=79180, and it can be seen that 87109 is a permutation -of 79180. - -Find the value of n, 1 < n < 10^7, for which φ(n) is a permutation of n and -the ratio n/φ(n) produces a minimum. - ------ - -This is essentially brute force. Calculate all totients up to 10^7 and -find the minimum ratio of n/φ(n) that way. To minimize the ratio, we want -to minimize n and maximize φ(n) as much as possible, so we can store the -minimum fraction's numerator and denominator and calculate new fractions -with each totient to compare against. To avoid dividing by zero, I opt to -use cross multiplication. - -References: -Finding totients -https://en.wikipedia.org/wiki/Euler's_totient_function#Euler's_product_formula -""" - -from __future__ import annotations - -import numpy as np - - -def get_totients(max_one: int) -> list[int]: - """ - Calculates a list of totients from 0 to max_one exclusive, using the - definition of Euler's product formula. - - >>> get_totients(5) - [0, 1, 1, 2, 2] - - >>> get_totients(10) - [0, 1, 1, 2, 2, 4, 2, 6, 4, 6] - """ - totients = np.arange(max_one) - - for i in range(2, max_one): - if totients[i] == i: - x = np.arange(i, max_one, i) # array of indexes to select - totients[x] -= totients[x] // i - - return totients.tolist() - - -def has_same_digits(num1: int, num2: int) -> bool: - """ - Return True if num1 and num2 have the same frequency of every digit, False - otherwise. - - >>> has_same_digits(123456789, 987654321) - True - - >>> has_same_digits(123, 23) - False - - >>> has_same_digits(1234566, 123456) - False - """ - return sorted(str(num1)) == sorted(str(num2)) - - -def solution(max_n: int = 10000000) -> int: - """ - Finds the value of n from 1 to max such that n/φ(n) produces a minimum. - - >>> solution(100) - 21 - - >>> solution(10000) - 4435 - """ - - min_numerator = 1 # i - min_denominator = 0 # φ(i) - totients = get_totients(max_n + 1) - - for i in range(2, max_n + 1): - t = totients[i] - - if i * min_denominator < min_numerator * t and has_same_digits(i, t): - min_numerator = i - min_denominator = t - - return min_numerator - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_071/__init__.py b/project_euler/problem_071/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_071/sol1.py b/project_euler/problem_071/sol1.py deleted file mode 100644 index 415b127e5374..000000000000 --- a/project_euler/problem_071/sol1.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Ordered fractions -Problem 71 -https://projecteuler.net/problem=71 - -Consider the fraction n/d, where n and d are positive -integers. If n<d and HCF(n,d)=1, it is called a reduced proper fraction. - -If we list the set of reduced proper fractions for d ≤ 8 -in ascending order of size, we get: - 1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, - 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8 - -It can be seen that 2/5 is the fraction immediately to the left of 3/7. - -By listing the set of reduced proper fractions for d ≤ 1,000,000 -in ascending order of size, find the numerator of the fraction -immediately to the left of 3/7. -""" - - -def solution(numerator: int = 3, denominator: int = 7, limit: int = 1000000) -> int: - """ - Returns the closest numerator of the fraction immediately to the - left of given fraction (numerator/denominator) from a list of reduced - proper fractions. - >>> solution() - 428570 - >>> solution(3, 7, 8) - 2 - >>> solution(6, 7, 60) - 47 - """ - max_numerator = 0 - max_denominator = 1 - - for current_denominator in range(1, limit + 1): - current_numerator = current_denominator * numerator // denominator - if current_denominator % denominator == 0: - current_numerator -= 1 - if current_numerator * max_denominator > current_denominator * max_numerator: - max_numerator = current_numerator - max_denominator = current_denominator - return max_numerator - - -if __name__ == "__main__": - print(solution(numerator=3, denominator=7, limit=1000000)) diff --git a/project_euler/problem_072/__init__.py b/project_euler/problem_072/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_072/sol1.py b/project_euler/problem_072/sol1.py deleted file mode 100644 index f09db0673323..000000000000 --- a/project_euler/problem_072/sol1.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -Problem 72 Counting fractions: https://projecteuler.net/problem=72 - -Description: - -Consider the fraction, n/d, where n and d are positive integers. If n<d and HCF(n,d)=1, -it is called a reduced proper fraction. -If we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, we -get: 1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, -3/4, 4/5, 5/6, 6/7, 7/8 -It can be seen that there are 21 elements in this set. -How many elements would be contained in the set of reduced proper fractions for -d ≤ 1,000,000? - -Solution: - -Number of numbers between 1 and n that are coprime to n is given by the Euler's Totient -function, phi(n). So, the answer is simply the sum of phi(n) for 2 <= n <= 1,000,000 -Sum of phi(d), for all d|n = n. This result can be used to find phi(n) using a sieve. - -Time: 1 sec -""" - -import numpy as np - - -def solution(limit: int = 1_000_000) -> int: - """ - Returns an integer, the solution to the problem - >>> solution(10) - 31 - >>> solution(100) - 3043 - >>> solution(1_000) - 304191 - """ - - # generating an array from -1 to limit - phi = np.arange(-1, limit) - - for i in range(2, limit + 1): - if phi[i] == i - 1: - ind = np.arange(2 * i, limit + 1, i) # indexes for selection - phi[ind] -= phi[ind] // i - - return int(np.sum(phi[2 : limit + 1])) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_072/sol2.py b/project_euler/problem_072/sol2.py deleted file mode 100644 index 08e92c18bb3a..000000000000 --- a/project_euler/problem_072/sol2.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Project Euler Problem 72: https://projecteuler.net/problem=72 - -Consider the fraction, n/d, where n and d are positive integers. If n<d and HCF(n,d)=1, -it is called a reduced proper fraction. - -If we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, -we get: - -1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, -4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8 - -It can be seen that there are 21 elements in this set. - -How many elements would be contained in the set of reduced proper fractions -for d ≤ 1,000,000? -""" - - -def solution(limit: int = 1000000) -> int: - """ - Return the number of reduced proper fractions with denominator less than limit. - >>> solution(8) - 21 - >>> solution(1000) - 304191 - """ - primes = set(range(3, limit, 2)) - primes.add(2) - for p in range(3, limit, 2): - if p not in primes: - continue - primes.difference_update(set(range(p * p, limit, p))) - - phi = [float(n) for n in range(limit + 1)] - - for p in primes: - for n in range(p, limit + 1, p): - phi[n] *= 1 - 1 / p - - return int(sum(phi[2:])) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_073/__init__.py b/project_euler/problem_073/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_073/sol1.py b/project_euler/problem_073/sol1.py deleted file mode 100644 index 2b66b7d8769b..000000000000 --- a/project_euler/problem_073/sol1.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Project Euler Problem 73: https://projecteuler.net/problem=73 - -Consider the fraction, n/d, where n and d are positive integers. -If n<d and HCF(n,d)=1, it is called a reduced proper fraction. - -If we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, -we get: - -1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, -5/7, 3/4, 4/5, 5/6, 6/7, 7/8 - -It can be seen that there are 3 fractions between 1/3 and 1/2. - -How many fractions lie between 1/3 and 1/2 in the sorted set -of reduced proper fractions for d ≤ 12,000? -""" - -from math import gcd - - -def solution(max_d: int = 12_000) -> int: - """ - Returns number of fractions lie between 1/3 and 1/2 in the sorted set - of reduced proper fractions for d ≤ max_d - - >>> solution(4) - 0 - - >>> solution(5) - 1 - - >>> solution(8) - 3 - """ - - fractions_number = 0 - for d in range(max_d + 1): - for n in range(d // 3 + 1, (d + 1) // 2): - if gcd(n, d) == 1: - fractions_number += 1 - return fractions_number - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_074/__init__.py b/project_euler/problem_074/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_074/sol1.py b/project_euler/problem_074/sol1.py deleted file mode 100644 index 91440b3fd02b..000000000000 --- a/project_euler/problem_074/sol1.py +++ /dev/null @@ -1,109 +0,0 @@ -""" -Project Euler Problem 74: https://projecteuler.net/problem=74 - -The number 145 is well known for the property that the sum of the factorial of its -digits is equal to 145: - -1! + 4! + 5! = 1 + 24 + 120 = 145 - -Perhaps less well known is 169, in that it produces the longest chain of numbers that -link back to 169; it turns out that there are only three such loops that exist: - -169 → 363601 → 1454 → 169 -871 → 45361 → 871 -872 → 45362 → 872 - -It is not difficult to prove that EVERY starting number will eventually get stuck in -a loop. For example, - -69 → 363600 → 1454 → 169 → 363601 (→ 1454) -78 → 45360 → 871 → 45361 (→ 871) -540 → 145 (→ 145) - -Starting with 69 produces a chain of five non-repeating terms, but the longest -non-repeating chain with a starting number below one million is sixty terms. - -How many chains, with a starting number below one million, contain exactly sixty -non-repeating terms? -""" - -DIGIT_FACTORIALS = { - "0": 1, - "1": 1, - "2": 2, - "3": 6, - "4": 24, - "5": 120, - "6": 720, - "7": 5040, - "8": 40320, - "9": 362880, -} - -CACHE_SUM_DIGIT_FACTORIALS = {145: 145} - -CHAIN_LENGTH_CACHE = { - 145: 0, - 169: 3, - 36301: 3, - 1454: 3, - 871: 2, - 45361: 2, - 872: 2, -} - - -def sum_digit_factorials(n: int) -> int: - """ - Return the sum of the factorial of the digits of n. - >>> sum_digit_factorials(145) - 145 - >>> sum_digit_factorials(45361) - 871 - >>> sum_digit_factorials(540) - 145 - """ - if n in CACHE_SUM_DIGIT_FACTORIALS: - return CACHE_SUM_DIGIT_FACTORIALS[n] - ret = sum(DIGIT_FACTORIALS[let] for let in str(n)) - CACHE_SUM_DIGIT_FACTORIALS[n] = ret - return ret - - -def chain_length(n: int, previous: set | None = None) -> int: - """ - Calculate the length of the chain of non-repeating terms starting with n. - Previous is a set containing the previous member of the chain. - >>> chain_length(10101) - 11 - >>> chain_length(555) - 20 - >>> chain_length(178924) - 39 - """ - previous = previous or set() - if n in CHAIN_LENGTH_CACHE: - return CHAIN_LENGTH_CACHE[n] - next_number = sum_digit_factorials(n) - if next_number in previous: - CHAIN_LENGTH_CACHE[n] = 0 - return 0 - else: - previous.add(n) - ret = 1 + chain_length(next_number, previous) - CHAIN_LENGTH_CACHE[n] = ret - return ret - - -def solution(num_terms: int = 60, max_start: int = 1000000) -> int: - """ - Return the number of chains with a starting number below one million which - contain exactly n non-repeating terms. - >>> solution(10,1000) - 28 - """ - return sum(1 for i in range(1, max_start) if chain_length(i) == num_terms) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_074/sol2.py b/project_euler/problem_074/sol2.py deleted file mode 100644 index 52a996bfa51d..000000000000 --- a/project_euler/problem_074/sol2.py +++ /dev/null @@ -1,147 +0,0 @@ -""" -Project Euler Problem 074: https://projecteuler.net/problem=74 - -The number 145 is well known for the property that the sum of the factorial of its -digits is equal to 145: - -1! + 4! + 5! = 1 + 24 + 120 = 145 - -Perhaps less well known is 169, in that it produces the longest chain of numbers that -link back to 169; it turns out that there are only three such loops that exist: - -169 → 363601 → 1454 → 169 -871 → 45361 → 871 -872 → 45362 → 872 - -It is not difficult to prove that EVERY starting number will eventually get stuck in a -loop. For example, - -69 → 363600 → 1454 → 169 → 363601 (→ 1454) -78 → 45360 → 871 → 45361 (→ 871) -540 → 145 (→ 145) - -Starting with 69 produces a chain of five non-repeating terms, but the longest -non-repeating chain with a starting number below one million is sixty terms. - -How many chains, with a starting number below one million, contain exactly sixty -non-repeating terms? - -Solution approach: -This solution simply consists in a loop that generates the chains of non repeating -items using the cached sizes of the previous chains. -The generation of the chain stops before a repeating item or if the size of the chain -is greater then the desired one. -After generating each chain, the length is checked and the counter increases. -""" - -from math import factorial - -DIGIT_FACTORIAL: dict[str, int] = {str(digit): factorial(digit) for digit in range(10)} - - -def digit_factorial_sum(number: int) -> int: - """ - Function to perform the sum of the factorial of all the digits in number - - >>> digit_factorial_sum(69.0) - Traceback (most recent call last): - ... - TypeError: Parameter number must be int - - >>> digit_factorial_sum(-1) - Traceback (most recent call last): - ... - ValueError: Parameter number must be greater than or equal to 0 - - >>> digit_factorial_sum(0) - 1 - - >>> digit_factorial_sum(69) - 363600 - """ - if not isinstance(number, int): - raise TypeError("Parameter number must be int") - - if number < 0: - raise ValueError("Parameter number must be greater than or equal to 0") - - # Converts number in string to iterate on its digits and adds its factorial. - return sum(DIGIT_FACTORIAL[digit] for digit in str(number)) - - -def solution(chain_length: int = 60, number_limit: int = 1000000) -> int: - """ - Returns the number of numbers below number_limit that produce chains with exactly - chain_length non repeating elements. - - >>> solution(10.0, 1000) - Traceback (most recent call last): - ... - TypeError: Parameters chain_length and number_limit must be int - - >>> solution(10, 1000.0) - Traceback (most recent call last): - ... - TypeError: Parameters chain_length and number_limit must be int - - >>> solution(0, 1000) - Traceback (most recent call last): - ... - ValueError: Parameters chain_length and number_limit must be greater than 0 - - >>> solution(10, 0) - Traceback (most recent call last): - ... - ValueError: Parameters chain_length and number_limit must be greater than 0 - - >>> solution(10, 1000) - 26 - """ - - if not isinstance(chain_length, int) or not isinstance(number_limit, int): - raise TypeError("Parameters chain_length and number_limit must be int") - - if chain_length <= 0 or number_limit <= 0: - raise ValueError( - "Parameters chain_length and number_limit must be greater than 0" - ) - - # the counter for the chains with the exact desired length - chains_counter = 0 - # the cached sizes of the previous chains - chain_sets_lengths: dict[int, int] = {} - - for start_chain_element in range(1, number_limit): - # The temporary set will contain the elements of the chain - chain_set = set() - chain_set_length = 0 - - # Stop computing the chain when you find a cached size, a repeating item or the - # length is greater then the desired one. - chain_element = start_chain_element - while ( - chain_element not in chain_sets_lengths - and chain_element not in chain_set - and chain_set_length <= chain_length - ): - chain_set.add(chain_element) - chain_set_length += 1 - chain_element = digit_factorial_sum(chain_element) - - if chain_element in chain_sets_lengths: - chain_set_length += chain_sets_lengths[chain_element] - - chain_sets_lengths[start_chain_element] = chain_set_length - - # If chain contains the exact amount of elements increase the counter - if chain_set_length == chain_length: - chains_counter += 1 - - return chains_counter - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{solution()}") diff --git a/project_euler/problem_075/__init__.py b/project_euler/problem_075/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_075/sol1.py b/project_euler/problem_075/sol1.py deleted file mode 100644 index 0ccaf5dee7ec..000000000000 --- a/project_euler/problem_075/sol1.py +++ /dev/null @@ -1,59 +0,0 @@ -""" -Project Euler Problem 75: https://projecteuler.net/problem=75 - -It turns out that 12 cm is the smallest length of wire that can be bent to form an -integer sided right angle triangle in exactly one way, but there are many more examples. - -12 cm: (3,4,5) -24 cm: (6,8,10) -30 cm: (5,12,13) -36 cm: (9,12,15) -40 cm: (8,15,17) -48 cm: (12,16,20) - -In contrast, some lengths of wire, like 20 cm, cannot be bent to form an integer sided -right angle triangle, and other lengths allow more than one solution to be found; for -example, using 120 cm it is possible to form exactly three different integer sided -right angle triangles. - -120 cm: (30,40,50), (20,48,52), (24,45,51) - -Given that L is the length of the wire, for how many values of L ≤ 1,500,000 can -exactly one integer sided right angle triangle be formed? - -Solution: we generate all pythagorean triples using Euclid's formula and -keep track of the frequencies of the perimeters. - -Reference: https://en.wikipedia.org/wiki/Pythagorean_triple#Generating_a_triple -""" - -from collections import defaultdict -from math import gcd - - -def solution(limit: int = 1500000) -> int: - """ - Return the number of values of L <= limit such that a wire of length L can be - formmed into an integer sided right angle triangle in exactly one way. - >>> solution(50) - 6 - >>> solution(1000) - 112 - >>> solution(50000) - 5502 - """ - frequencies: defaultdict = defaultdict(int) - euclid_m = 2 - while 2 * euclid_m * (euclid_m + 1) <= limit: - for euclid_n in range((euclid_m % 2) + 1, euclid_m, 2): - if gcd(euclid_m, euclid_n) > 1: - continue - primitive_perimeter = 2 * euclid_m * (euclid_m + euclid_n) - for perimeter in range(primitive_perimeter, limit + 1, primitive_perimeter): - frequencies[perimeter] += 1 - euclid_m += 1 - return sum(1 for frequency in frequencies.values() if frequency == 1) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_076/__init__.py b/project_euler/problem_076/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_076/sol1.py b/project_euler/problem_076/sol1.py deleted file mode 100644 index 60bb87089e7e..000000000000 --- a/project_euler/problem_076/sol1.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Counting Summations -Problem 76: https://projecteuler.net/problem=76 - -It is possible to write five as a sum in exactly six different ways: - -4 + 1 -3 + 2 -3 + 1 + 1 -2 + 2 + 1 -2 + 1 + 1 + 1 -1 + 1 + 1 + 1 + 1 - -How many different ways can one hundred be written as a sum of at least two -positive integers? -""" - - -def solution(m: int = 100) -> int: - """ - Returns the number of different ways the number m can be written as a - sum of at least two positive integers. - - >>> solution(100) - 190569291 - >>> solution(50) - 204225 - >>> solution(30) - 5603 - >>> solution(10) - 41 - >>> solution(5) - 6 - >>> solution(3) - 2 - >>> solution(2) - 1 - >>> solution(1) - 0 - """ - memo = [[0 for _ in range(m)] for _ in range(m + 1)] - for i in range(m + 1): - memo[i][0] = 1 - - for n in range(m + 1): - for k in range(1, m): - memo[n][k] += memo[n][k - 1] - if n > k: - memo[n][k] += memo[n - k - 1][k] - - return memo[m][m - 1] - 1 - - -if __name__ == "__main__": - print(solution(int(input("Enter a number: ").strip()))) diff --git a/project_euler/problem_077/__init__.py b/project_euler/problem_077/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_077/sol1.py b/project_euler/problem_077/sol1.py deleted file mode 100644 index e8f4e979a625..000000000000 --- a/project_euler/problem_077/sol1.py +++ /dev/null @@ -1,82 +0,0 @@ -""" -Project Euler Problem 77: https://projecteuler.net/problem=77 - -It is possible to write ten as the sum of primes in exactly five different ways: - -7 + 3 -5 + 5 -5 + 3 + 2 -3 + 3 + 2 + 2 -2 + 2 + 2 + 2 + 2 - -What is the first value which can be written as the sum of primes in over -five thousand different ways? -""" - -from __future__ import annotations - -from functools import lru_cache -from math import ceil - -NUM_PRIMES = 100 - -primes = set(range(3, NUM_PRIMES, 2)) -primes.add(2) -prime: int - -for prime in range(3, ceil(NUM_PRIMES**0.5), 2): - if prime not in primes: - continue - primes.difference_update(set(range(prime * prime, NUM_PRIMES, prime))) - - -@lru_cache(maxsize=100) -def partition(number_to_partition: int) -> set[int]: - """ - Return a set of integers corresponding to unique prime partitions of n. - The unique prime partitions can be represented as unique prime decompositions, - e.g. (7+3) <-> 7*3 = 12, (3+3+2+2) = 3*3*2*2 = 36 - >>> partition(10) - {32, 36, 21, 25, 30} - >>> partition(15) - {192, 160, 105, 44, 112, 243, 180, 150, 216, 26, 125, 126} - >>> len(partition(20)) - 26 - """ - if number_to_partition < 0: - return set() - elif number_to_partition == 0: - return {1} - - ret: set[int] = set() - prime: int - sub: int - - for prime in primes: - if prime > number_to_partition: - continue - for sub in partition(number_to_partition - prime): - ret.add(sub * prime) - - return ret - - -def solution(number_unique_partitions: int = 5000) -> int | None: - """ - Return the smallest integer that can be written as the sum of primes in over - m unique ways. - >>> solution(4) - 10 - >>> solution(500) - 45 - >>> solution(1000) - 53 - """ - for number_to_partition in range(1, NUM_PRIMES): - if len(partition(number_to_partition)) > number_unique_partitions: - return number_to_partition - return None - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_078/__init__.py b/project_euler/problem_078/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_078/sol1.py b/project_euler/problem_078/sol1.py deleted file mode 100644 index 7e5938c4c466..000000000000 --- a/project_euler/problem_078/sol1.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Problem 78 -Url: https://projecteuler.net/problem=78 -Statement: -Let p(n) represent the number of different ways in which n coins -can be separated into piles. For example, five coins can be separated -into piles in exactly seven different ways, so p(5)=7. - - OOOOO - OOOO O - OOO OO - OOO O O - OO OO O - OO O O O - O O O O O -Find the least value of n for which p(n) is divisible by one million. -""" - -import itertools - - -def solution(number: int = 1000000) -> int: - """ - >>> solution(1) - 1 - - >>> solution(9) - 14 - - >>> solution() - 55374 - """ - partitions = [1] - - for i in itertools.count(len(partitions)): - item = 0 - for j in itertools.count(1): - sign = -1 if j % 2 == 0 else +1 - index = (j * j * 3 - j) // 2 - if index > i: - break - item += partitions[i - index] * sign - item %= number - index += j - if index > i: - break - item += partitions[i - index] * sign - item %= number - - if item == 0: - return i - partitions.append(item) - - return 0 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(f"{solution() = }") diff --git a/project_euler/problem_079/__init__.py b/project_euler/problem_079/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_079/keylog.txt b/project_euler/problem_079/keylog.txt deleted file mode 100644 index 41f15673248d..000000000000 --- a/project_euler/problem_079/keylog.txt +++ /dev/null @@ -1,50 +0,0 @@ -319 -680 -180 -690 -129 -620 -762 -689 -762 -318 -368 -710 -720 -710 -629 -168 -160 -689 -716 -731 -736 -729 -316 -729 -729 -710 -769 -290 -719 -680 -318 -389 -162 -289 -162 -718 -729 -319 -790 -680 -890 -362 -319 -760 -316 -729 -380 -319 -728 -716 diff --git a/project_euler/problem_079/keylog_test.txt b/project_euler/problem_079/keylog_test.txt deleted file mode 100644 index 2c7024bde948..000000000000 --- a/project_euler/problem_079/keylog_test.txt +++ /dev/null @@ -1,16 +0,0 @@ -319 -680 -180 -690 -129 -620 -698 -318 -328 -310 -320 -610 -629 -198 -190 -631 diff --git a/project_euler/problem_079/sol1.py b/project_euler/problem_079/sol1.py deleted file mode 100644 index 74392e9bd094..000000000000 --- a/project_euler/problem_079/sol1.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -Project Euler Problem 79: https://projecteuler.net/problem=79 - -Passcode derivation - -A common security method used for online banking is to ask the user for three -random characters from a passcode. For example, if the passcode was 531278, -they may ask for the 2nd, 3rd, and 5th characters; the expected reply would -be: 317. - -The text file, keylog.txt, contains fifty successful login attempts. - -Given that the three characters are always asked for in order, analyse the file -so as to determine the shortest possible secret passcode of unknown length. -""" - -import itertools -from pathlib import Path - - -def find_secret_passcode(logins: list[str]) -> int: - """ - Returns the shortest possible secret passcode of unknown length. - - >>> find_secret_passcode(["135", "259", "235", "189", "690", "168", "120", - ... "136", "289", "589", "160", "165", "580", "369", "250", "280"]) - 12365890 - - >>> find_secret_passcode(["426", "281", "061", "819" "268", "406", "420", - ... "428", "209", "689", "019", "421", "469", "261", "681", "201"]) - 4206819 - """ - - # Split each login by character e.g. '319' -> ('3', '1', '9') - split_logins = [tuple(login) for login in logins] - - unique_chars = {char for login in split_logins for char in login} - - for permutation in itertools.permutations(unique_chars): - satisfied = True - for login in logins: - if not ( - permutation.index(login[0]) - < permutation.index(login[1]) - < permutation.index(login[2]) - ): - satisfied = False - break - - if satisfied: - return int("".join(permutation)) - - raise Exception("Unable to find the secret passcode") - - -def solution(input_file: str = "keylog.txt") -> int: - """ - Returns the shortest possible secret passcode of unknown length - for successful login attempts given by `input_file` text file. - - >>> solution("keylog_test.txt") - 6312980 - """ - logins = Path(__file__).parent.joinpath(input_file).read_text().splitlines() - - return find_secret_passcode(logins) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_080/__init__.py b/project_euler/problem_080/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_080/sol1.py b/project_euler/problem_080/sol1.py deleted file mode 100644 index 8cfcbd41b588..000000000000 --- a/project_euler/problem_080/sol1.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Project Euler Problem 80: https://projecteuler.net/problem=80 -Author: Sandeep Gupta -Problem statement: For the first one hundred natural numbers, find the total of -the digital sums of the first one hundred decimal digits for all the irrational -square roots. -Time: 5 October 2020, 18:30 -""" - -import decimal - - -def solution() -> int: - """ - To evaluate the sum, Used decimal python module to calculate the decimal - places up to 100, the most important thing would be take calculate - a few extra places for decimal otherwise there will be rounding - error. - - >>> solution() - 40886 - """ - answer = 0 - decimal_context = decimal.Context(prec=105) - for i in range(2, 100): - number = decimal.Decimal(i) - sqrt_number = number.sqrt(decimal_context) - if len(str(sqrt_number)) > 1: - answer += int(str(sqrt_number)[0]) - sqrt_number_str = str(sqrt_number)[2:101] - answer += sum(int(x) for x in sqrt_number_str) - return answer - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{solution() = }") diff --git a/project_euler/problem_081/__init__.py b/project_euler/problem_081/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_081/matrix.txt b/project_euler/problem_081/matrix.txt deleted file mode 100644 index f65322a7e541..000000000000 --- a/project_euler/problem_081/matrix.txt +++ /dev/null @@ -1,80 +0,0 @@ -4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870 -1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377 -9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230 -7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187 -3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505 -1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942 -4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757 -510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706 -9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048 -3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540 -6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442 -7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509 -4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000 -356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672 -9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785 -192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095 -1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859 -4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837 -5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286 -1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963 -1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127 -8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535 -7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446 -3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615 -9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303 -5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266 -6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763 -9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550 -5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887 -6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531 -5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739 -1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269 -4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380 -4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829 -8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873 -2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271 -6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281 -2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660 -6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665 -3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056 -5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089 -3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523 -1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616 -8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125 -3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307 -8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920 -8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225 -9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976 -3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432 -1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351 -7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991 -9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110 -7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965 -3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314 -1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416 -126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028 -8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407 -7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312 -4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000 -4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229 -7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256 -7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842 -6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241 -4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213 -9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015 -3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405 -2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640 -3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480 -4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181 -171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501 -3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698 -2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531 -7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255 -8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631 -2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914 -6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864 -8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738 -2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294 -2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789 -5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981 diff --git a/project_euler/problem_081/sol1.py b/project_euler/problem_081/sol1.py deleted file mode 100644 index 293027bddd0e..000000000000 --- a/project_euler/problem_081/sol1.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Problem 81: https://projecteuler.net/problem=81 -In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right, -by only moving to the right and down, is indicated in bold red and is equal to 2427. - - [131] 673 234 103 18 - [201] [96] [342] 965 150 - 630 803 [746] [422] 111 - 537 699 497 [121] 956 - 805 732 524 [37] [331] - -Find the minimal path sum from the top left to the bottom right by only moving right -and down in matrix.txt (https://projecteuler.net/project/resources/p081_matrix.txt), -a 31K text file containing an 80 by 80 matrix. -""" - -import os - - -def solution(filename: str = "matrix.txt") -> int: - """ - Returns the minimal path sum from the top left to the bottom right of the matrix. - >>> solution() - 427337 - """ - with open(os.path.join(os.path.dirname(__file__), filename)) as in_file: - data = in_file.read() - - grid = [[int(cell) for cell in row.split(",")] for row in data.strip().splitlines()] - dp = [[0 for cell in row] for row in grid] - n = len(grid[0]) - - dp = [[0 for i in range(n)] for j in range(n)] - dp[0][0] = grid[0][0] - for i in range(1, n): - dp[0][i] = grid[0][i] + dp[0][i - 1] - for i in range(1, n): - dp[i][0] = grid[i][0] + dp[i - 1][0] - - for i in range(1, n): - for j in range(1, n): - dp[i][j] = grid[i][j] + min(dp[i - 1][j], dp[i][j - 1]) - - return dp[-1][-1] - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_082/__init__.py b/project_euler/problem_082/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_082/input.txt b/project_euler/problem_082/input.txt deleted file mode 100644 index f65322a7e541..000000000000 --- a/project_euler/problem_082/input.txt +++ /dev/null @@ -1,80 +0,0 @@ -4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870 -1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377 -9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230 -7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187 -3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505 -1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942 -4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757 -510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706 -9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048 -3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540 -6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442 -7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509 -4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000 -356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672 -9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785 -192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095 -1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859 -4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837 -5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286 -1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963 -1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127 -8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535 -7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446 -3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615 -9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303 -5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266 -6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763 -9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550 -5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887 -6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531 -5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739 -1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269 -4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380 -4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829 -8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873 -2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271 -6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281 -2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660 -6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665 -3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056 -5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089 -3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523 -1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616 -8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125 -3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307 -8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920 -8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225 -9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976 -3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432 -1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351 -7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991 -9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110 -7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965 -3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314 -1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416 -126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028 -8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407 -7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312 -4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000 -4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229 -7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256 -7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842 -6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241 -4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213 -9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015 -3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405 -2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640 -3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480 -4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181 -171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501 -3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698 -2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531 -7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255 -8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631 -2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914 -6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864 -8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738 -2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294 -2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789 -5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981 diff --git a/project_euler/problem_082/sol1.py b/project_euler/problem_082/sol1.py deleted file mode 100644 index 7b50dc887719..000000000000 --- a/project_euler/problem_082/sol1.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -Project Euler Problem 82: https://projecteuler.net/problem=82 - -The minimal path sum in the 5 by 5 matrix below, by starting in any cell -in the left column and finishing in any cell in the right column, -and only moving up, down, and right, is indicated in red and bold; -the sum is equal to 994. - - 131 673 [234] [103] [18] - [201] [96] [342] 965 150 - 630 803 746 422 111 - 537 699 497 121 956 - 805 732 524 37 331 - -Find the minimal path sum from the left column to the right column in matrix.txt -(https://projecteuler.net/project/resources/p082_matrix.txt) -(right click and "Save Link/Target As..."), -a 31K text file containing an 80 by 80 matrix. -""" - -import os - - -def solution(filename: str = "input.txt") -> int: - """ - Returns the minimal path sum in the matrix from the file, by starting in any cell - in the left column and finishing in any cell in the right column, - and only moving up, down, and right - - >>> solution("test_matrix.txt") - 994 - """ - - with open(os.path.join(os.path.dirname(__file__), filename)) as input_file: - matrix = [ - [int(element) for element in line.split(",")] - for line in input_file.readlines() - ] - - rows = len(matrix) - cols = len(matrix[0]) - - minimal_path_sums = [[-1 for _ in range(cols)] for _ in range(rows)] - for i in range(rows): - minimal_path_sums[i][0] = matrix[i][0] - - for j in range(1, cols): - for i in range(rows): - minimal_path_sums[i][j] = minimal_path_sums[i][j - 1] + matrix[i][j] - - for i in range(1, rows): - minimal_path_sums[i][j] = min( - minimal_path_sums[i][j], minimal_path_sums[i - 1][j] + matrix[i][j] - ) - - for i in range(rows - 2, -1, -1): - minimal_path_sums[i][j] = min( - minimal_path_sums[i][j], minimal_path_sums[i + 1][j] + matrix[i][j] - ) - - return min(minimal_path_sums_row[-1] for minimal_path_sums_row in minimal_path_sums) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_082/test_matrix.txt b/project_euler/problem_082/test_matrix.txt deleted file mode 100644 index 76167d9e7fc1..000000000000 --- a/project_euler/problem_082/test_matrix.txt +++ /dev/null @@ -1,5 +0,0 @@ -131,673,234,103,18 -201,96,342,965,150 -630,803,746,422,111 -537,699,497,121,956 -805,732,524,37,331 diff --git a/project_euler/problem_085/__init__.py b/project_euler/problem_085/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_085/sol1.py b/project_euler/problem_085/sol1.py deleted file mode 100644 index d0b361ee750d..000000000000 --- a/project_euler/problem_085/sol1.py +++ /dev/null @@ -1,108 +0,0 @@ -""" -Project Euler Problem 85: https://projecteuler.net/problem=85 - -By counting carefully it can be seen that a rectangular grid measuring 3 by 2 -contains eighteen rectangles. - -Although there exists no rectangular grid that contains exactly two million -rectangles, find the area of the grid with the nearest solution. - -Solution: - - For a grid with side-lengths a and b, the number of rectangles contained in the grid - is [a*(a+1)/2] * [b*(b+1)/2)], which happens to be the product of the a-th and b-th - triangle numbers. So to find the solution grid (a,b), we need to find the two - triangle numbers whose product is closest to two million. - - Denote these two triangle numbers Ta and Tb. We want their product Ta*Tb to be - as close as possible to 2m. Assuming that the best solution is fairly close to 2m, - We can assume that both Ta and Tb are roughly bounded by 2m. Since Ta = a(a+1)/2, - we can assume that a (and similarly b) are roughly bounded by sqrt(2 * 2m) = 2000. - Since this is a rough bound, to be on the safe side we add 10%. Therefore we start - by generating all the triangle numbers Ta for 1 <= a <= 2200. This can be done - iteratively since the ith triangle number is the sum of 1,2, ... ,i, and so - T(i) = T(i-1) + i. - - We then search this list of triangle numbers for the two that give a product - closest to our target of two million. Rather than testing every combination of 2 - elements of the list, which would find the result in quadratic time, we can find - the best pair in linear time. - - We iterate through the list of triangle numbers using enumerate() so we have a - and Ta. Since we want Ta * Tb to be as close as possible to 2m, we know that Tb - needs to be roughly 2m / Ta. Using the formula Tb = b*(b+1)/2 as well as the - quadratic formula, we can solve for b: - b is roughly (-1 + sqrt(1 + 8 * 2m / Ta)) / 2. - - Since the closest integers to this estimate will give product closest to 2m, - we only need to consider the integers above and below. It's then a simple matter - to get the triangle numbers corresponding to those integers, calculate the product - Ta * Tb, compare that product to our target 2m, and keep track of the (a,b) pair - that comes the closest. - - -Reference: https://en.wikipedia.org/wiki/Triangular_number - https://en.wikipedia.org/wiki/Quadratic_formula -""" - -from __future__ import annotations - -from math import ceil, floor, sqrt - - -def solution(target: int = 2000000) -> int: - """ - Find the area of the grid which contains as close to two million rectangles - as possible. - >>> solution(20) - 6 - >>> solution(2000) - 72 - >>> solution(2000000000) - 86595 - """ - triangle_numbers: list[int] = [0] - idx: int - - for idx in range(1, ceil(sqrt(target * 2) * 1.1)): - triangle_numbers.append(triangle_numbers[-1] + idx) - - # we want this to be as close as possible to target - best_product: int = 0 - # the area corresponding to the grid that gives the product closest to target - area: int = 0 - # an estimate of b, using the quadratic formula - b_estimate: float - # the largest integer less than b_estimate - b_floor: int - # the largest integer less than b_estimate - b_ceil: int - # the triangle number corresponding to b_floor - triangle_b_first_guess: int - # the triangle number corresponding to b_ceil - triangle_b_second_guess: int - - for idx_a, triangle_a in enumerate(triangle_numbers[1:], 1): - b_estimate = (-1 + sqrt(1 + 8 * target / triangle_a)) / 2 - b_floor = floor(b_estimate) - b_ceil = ceil(b_estimate) - triangle_b_first_guess = triangle_numbers[b_floor] - triangle_b_second_guess = triangle_numbers[b_ceil] - - if abs(target - triangle_b_first_guess * triangle_a) < abs( - target - best_product - ): - best_product = triangle_b_first_guess * triangle_a - area = idx_a * b_floor - - if abs(target - triangle_b_second_guess * triangle_a) < abs( - target - best_product - ): - best_product = triangle_b_second_guess * triangle_a - area = idx_a * b_ceil - - return area - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_086/__init__.py b/project_euler/problem_086/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_086/sol1.py b/project_euler/problem_086/sol1.py deleted file mode 100644 index cbd2b648e0ac..000000000000 --- a/project_euler/problem_086/sol1.py +++ /dev/null @@ -1,104 +0,0 @@ -""" -Project Euler Problem 86: https://projecteuler.net/problem=86 - -A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F, -sits in the opposite corner. By travelling on the surfaces of the room the shortest -"straight line" distance from S to F is 10 and the path is shown on the diagram. - -However, there are up to three "shortest" path candidates for any given cuboid and the -shortest route doesn't always have integer length. - -It can be shown that there are exactly 2060 distinct cuboids, ignoring rotations, with -integer dimensions, up to a maximum size of M by M by M, for which the shortest route -has integer length when M = 100. This is the least value of M for which the number of -solutions first exceeds two thousand; the number of solutions when M = 99 is 1975. - -Find the least value of M such that the number of solutions first exceeds one million. - -Solution: - Label the 3 side-lengths of the cuboid a,b,c such that 1 <= a <= b <= c <= M. - By conceptually "opening up" the cuboid and laying out its faces on a plane, - it can be seen that the shortest distance between 2 opposite corners is - sqrt((a+b)^2 + c^2). This distance is an integer if and only if (a+b),c make up - the first 2 sides of a pythagorean triplet. - - The second useful insight is rather than calculate the number of cuboids - with integral shortest distance for each maximum cuboid side-length M, - we can calculate this number iteratively each time we increase M, as follows. - The set of cuboids satisfying this property with maximum side-length M-1 is a - subset of the cuboids satisfying the property with maximum side-length M - (since any cuboids with side lengths <= M-1 are also <= M). To calculate the - number of cuboids in the larger set (corresponding to M) we need only consider - the cuboids which have at least one side of length M. Since we have ordered the - side lengths a <= b <= c, we can assume that c = M. Then we just need to count - the number of pairs a,b satisfying the conditions: - sqrt((a+b)^2 + M^2) is integer - 1 <= a <= b <= M - - To count the number of pairs (a,b) satisfying these conditions, write d = a+b. - Now we have: - 1 <= a <= b <= M => 2 <= d <= 2*M - we can actually make the second equality strict, - since d = 2*M => d^2 + M^2 = 5M^2 - => shortest distance = M * sqrt(5) - => not integral. - a + b = d => b = d - a - and a <= b - => a <= d/2 - also a <= M - => a <= min(M, d//2) - - a + b = d => a = d - b - and b <= M - => a >= d - M - also a >= 1 - => a >= max(1, d - M) - - So a is in range(max(1, d - M), min(M, d // 2) + 1) - - For a given d, the number of cuboids satisfying the required property with c = M - and a + b = d is the length of this range, which is - min(M, d // 2) + 1 - max(1, d - M). - - In the code below, d is sum_shortest_sides - and M is max_cuboid_size. - - -""" - -from math import sqrt - - -def solution(limit: int = 1000000) -> int: - """ - Return the least value of M such that there are more than one million cuboids - of side lengths 1 <= a,b,c <= M such that the shortest distance between two - opposite vertices of the cuboid is integral. - >>> solution(100) - 24 - >>> solution(1000) - 72 - >>> solution(2000) - 100 - >>> solution(20000) - 288 - """ - num_cuboids: int = 0 - max_cuboid_size: int = 0 - sum_shortest_sides: int - - while num_cuboids <= limit: - max_cuboid_size += 1 - for sum_shortest_sides in range(2, 2 * max_cuboid_size + 1): - if sqrt(sum_shortest_sides**2 + max_cuboid_size**2).is_integer(): - num_cuboids += ( - min(max_cuboid_size, sum_shortest_sides // 2) - - max(1, sum_shortest_sides - max_cuboid_size) - + 1 - ) - - return max_cuboid_size - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_087/__init__.py b/project_euler/problem_087/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_087/sol1.py b/project_euler/problem_087/sol1.py deleted file mode 100644 index f444481c17ac..000000000000 --- a/project_euler/problem_087/sol1.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Project Euler Problem 87: https://projecteuler.net/problem=87 - -The smallest number expressible as the sum of a prime square, prime cube, and prime -fourth power is 28. In fact, there are exactly four numbers below fifty that can be -expressed in such a way: - -28 = 22 + 23 + 24 -33 = 32 + 23 + 24 -49 = 52 + 23 + 24 -47 = 22 + 33 + 24 - -How many numbers below fifty million can be expressed as the sum of a prime square, -prime cube, and prime fourth power? -""" - - -def solution(limit: int = 50000000) -> int: - """ - Return the number of integers less than limit which can be expressed as the sum - of a prime square, prime cube, and prime fourth power. - >>> solution(50) - 4 - """ - ret = set() - prime_square_limit = int((limit - 24) ** (1 / 2)) - - primes = set(range(3, prime_square_limit + 1, 2)) - primes.add(2) - for p in range(3, prime_square_limit + 1, 2): - if p not in primes: - continue - primes.difference_update(set(range(p * p, prime_square_limit + 1, p))) - - for prime1 in primes: - square = prime1 * prime1 - for prime2 in primes: - cube = prime2 * prime2 * prime2 - if square + cube >= limit - 16: - break - for prime3 in primes: - tetr = prime3 * prime3 * prime3 * prime3 - total = square + cube + tetr - if total >= limit: - break - ret.add(total) - - return len(ret) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_089/__init__.py b/project_euler/problem_089/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_089/numeralcleanup_test.txt b/project_euler/problem_089/numeralcleanup_test.txt deleted file mode 100644 index 06142142cca9..000000000000 --- a/project_euler/problem_089/numeralcleanup_test.txt +++ /dev/null @@ -1,5 +0,0 @@ -IIII -IV -IIIIIIIIII -X -VIIIII diff --git a/project_euler/problem_089/p089_roman.txt b/project_euler/problem_089/p089_roman.txt deleted file mode 100644 index 50651c355a5b..000000000000 --- a/project_euler/problem_089/p089_roman.txt +++ /dev/null @@ -1,1000 +0,0 @@ -MMMMDCLXXII -MMDCCCLXXXIII -MMMDLXVIIII -MMMMDXCV -DCCCLXXII -MMCCCVI -MMMCDLXXXVII -MMMMCCXXI -MMMCCXX -MMMMDCCCLXXIII -MMMCCXXXVII -MMCCCLXXXXIX -MDCCCXXIIII -MMCXCVI -CCXCVIII -MMMCCCXXXII -MDCCXXX -MMMDCCCL -MMMMCCLXXXVI -MMDCCCXCVI -MMMDCII -MMMCCXII -MMMMDCCCCI -MMDCCCXCII -MDCXX -CMLXXXVII -MMMXXI -MMMMCCCXIV -MLXXII -MCCLXXVIIII -MMMMCCXXXXI -MMDCCCLXXII -MMMMXXXI -MMMDCCLXXX -MMDCCCLXXIX -MMMMLXXXV -MCXXI -MDCCCXXXVII -MMCCCLXVII -MCDXXXV -CCXXXIII -CMXX -MMMCLXIV -MCCCLXXXVI -DCCCXCVIII -MMMDCCCCXXXIV -CDXVIIII -MMCCXXXV -MDCCCXXXII -MMMMD -MMDCCLXIX -MMMMCCCLXXXXVI -MMDCCXLII -MMMDCCCVIIII -DCCLXXXIIII -MDCCCCXXXII -MMCXXVII -DCCCXXX -CCLXIX -MMMXI -MMMMCMLXXXXVIII -MMMMDLXXXVII -MMMMDCCCLX -MMCCLIV -CMIX -MMDCCCLXXXIIII -CLXXXII -MMCCCCXXXXV -MMMMDLXXXVIIII -MMMDCCCXXI -MMDCCCCLXXVI -MCCCCLXX -MMCDLVIIII -MMMDCCCLIX -MMMMCCCCXIX -MMMDCCCLXXV -XXXI -CDLXXXIII -MMMCXV -MMDCCLXIII -MMDXXX -MMMMCCCLVII -MMMDCI -MMMMCDLXXXIIII -MMMMCCCXVI -CCCLXXXVIII -MMMMCML -MMMMXXIV -MMMCCCCXXX -DCCX -MMMCCLX -MMDXXXIII -CCCLXIII -MMDCCXIII -MMMCCCXLIV -CLXXXXI -CXVI -MMMMCXXXIII -CLXX -DCCCXVIII -MLXVII -DLXXXX -MMDXXI -MMMMDLXXXXVIII -MXXII -LXI -DCCCCXLIII -MMMMDV -MMMMXXXIV -MDCCCLVIII -MMMCCLXXII -MMMMDCCXXXVI -MMMMLXXXIX -MDCCCLXXXI -MMMMDCCCXV -MMMMCCCCXI -MMMMCCCLIII -MDCCCLXXI -MMCCCCXI -MLXV -MMCDLXII -MMMMDXXXXII -MMMMDCCCXL -MMMMCMLVI -CCLXXXIV -MMMDCCLXXXVI -MMCLII -MMMCCCCXV -MMLXXXIII -MMMV -MMMV -DCCLXII -MMDCCCCXVI -MMDCXLVIII -CCLIIII -CCCXXV -MMDCCLXXXVIIII -MMMMDCLXXVIII -MMMMDCCCXCI -MMMMCCCXX -MMCCXLV -MMMDCCCLXIX -MMCCLXIIII -MMMDCCCXLIX -MMMMCCCLXIX -CMLXXXXI -MCMLXXXIX -MMCDLXI -MMDCLXXVIII -MMMMDCCLXI -MCDXXV -DL -CCCLXXII -MXVIIII -MCCCCLXVIII -CIII -MMMDCCLXXIIII -MMMDVIII -MMMMCCCLXXXXVII -MMDXXVII -MMDCCLXXXXV -MMMMCXLVI -MMMDCCLXXXII -MMMDXXXVI -MCXXII -CLI -DCLXXXIX -MMMCLI -MDCLXIII -MMMMDCCXCVII -MMCCCLXXXV -MMMDCXXVIII -MMMCDLX -MMMCMLII -MMMIV -MMMMDCCCLVIII -MMMDLXXXVIII -MCXXIV -MMMMLXXVI -CLXXIX -MMMCCCCXXVIIII -DCCLXXXV -MMMDCCCVI -LI -CLXXXVI -MMMMCCCLXXVI -MCCCLXVI -CCXXXIX -MMDXXXXI -MMDCCCXLI -DCCCLXXXVIII -MMMMDCCCIV -MDCCCCXV -MMCMVI -MMMMCMLXXXXV -MMDCCLVI -MMMMCCXLVIII -DCCCCIIII -MMCCCCIII -MMMDCCLXXXVIIII -MDCCCLXXXXV -DVII -MMMV -DCXXV -MMDCCCXCV -DCVIII -MMCDLXVI -MCXXVIII -MDCCXCVIII -MMDCLX -MMMDCCLXIV -MMCDLXXVII -MMDLXXXIIII -MMMMCCCXXII -MMMDCCCXLIIII -DCCCCLXVII -MMMCLXXXXIII -MCCXV -MMMMDCXI -MMMMDCLXXXXV -MMMCCCLII -MMCMIX -MMDCCXXV -MMDLXXXVI -MMMMDCXXVIIII -DCCCCXXXVIIII -MMCCXXXIIII -MMDCCLXXVIII -MDCCLXVIIII -MMCCLXXXV -MMMMDCCCLXXXVIII -MMCMXCI -MDXLII -MMMMDCCXIV -MMMMLI -DXXXXIII -MMDCCXI -MMMMCCLXXXIII -MMMDCCCLXXIII -MDCLVII -MMCD -MCCCXXVII -MMMMDCCIIII -MMMDCCXLVI -MMMCLXXXVII -MMMCCVIIII -MCCCCLXXIX -DL -DCCCLXXVI -MMDXCI -MMMMDCCCCXXXVI -MMCII -MMMDCCCXXXXV -MMMCDXLV -MMDCXXXXIV -MMD -MDCCCLXXXX -MMDCXLIII -MMCCXXXII -MMDCXXXXVIIII -DCCCLXXI -MDXCVIIII -MMMMCCLXXVIII -MDCLVIIII -MMMCCCLXXXIX -MDCLXXXV -MDLVIII -MMMMCCVII -MMMMDCXIV -MMMCCCLXIIII -MMIIII -MMMMCCCLXXIII -CCIII -MMMCCLV -MMMDXIII -MMMCCCXC -MMMDCCCXXI -MMMMCCCCXXXII -CCCLVI -MMMCCCLXXXVI -MXVIIII -MMMCCCCXIIII -CLXVII -MMMCCLXX -CCCCLXIV -MMXXXXII -MMMMCCLXXXX -MXL -CCXVI -CCCCLVIIII -MMCCCII -MCCCLVIII -MMMMCCCX -MCDLXXXXIV -MDCCCXIII -MMDCCCXL -MMMMCCCXXIII -DXXXIV -CVI -MMMMDCLXXX -DCCCVII -MMCMLXIIII -MMMDCCCXXXIII -DCCC -MDIII -MMCCCLXVI -MMMCCCCLXXI -MMDCCCCXVIII -CCXXXVII -CCCXXV -MDCCCXII -MMMCMV -MMMMCMXV -MMMMDCXCI -DXXI -MMCCXLVIIII -MMMMCMLII -MDLXXX -MMDCLXVI -CXXI -MMMDCCCLIIII -MMMCXXI -MCCIII -MMDCXXXXI -CCXCII -MMMMDXXXV -MMMCCCLXV -MMMMDLXV -MMMCCCCXXXII -MMMCCCVIII -DCCCCLXXXXII -MMCLXIV -MMMMCXI -MLXXXXVII -MMMCDXXXVIII -MDXXII -MLV -MMMMDLXVI -MMMCXII -XXXIII -MMMMDCCCXXVI -MMMLXVIIII -MMMLX -MMMCDLXVII -MDCCCLVII -MMCXXXVII -MDCCCCXXX -MMDCCCLXIII -MMMMDCXLIX -MMMMCMXLVIII -DCCCLXXVIIII -MDCCCLIII -MMMCMLXI -MMMMCCLXI -MMDCCCLIII -MMMDCCCVI -MMDXXXXIX -MMCLXXXXV -MMDXXX -MMMXIII -DCLXXIX -DCCLXII -MMMMDCCLXVIII -MDCCXXXXIII -CCXXXII -MMMMDCXXV -MMMCCCXXVIII -MDCVIII -MMMCLXXXXIIII -CLXXXI -MDCCCCXXXIII -MMMMDCXXX -MMMDCXXIV -MMMCCXXXVII -MCCCXXXXIIII -CXVIII -MMDCCCCIV -MMMMCDLXXV -MMMDLXIV -MDXCIII -MCCLXXXI -MMMDCCCXXIV -MCXLIII -MMMDCCCI -MCCLXXX -CCXV -MMDCCLXXI -MMDLXXXIII -MMMMDCXVII -MMMCMLXV -MCLXVIII -MMMMCCLXXVI -MMMDCCLXVIIII -MMMMDCCCIX -DLXXXXIX -DCCCXXII -MMMMIII -MMMMCCCLXXVI -DCCCXCIII -DXXXI -MXXXIIII -CCXII -MMMDCCLXXXIIII -MMMCXX -MMMCMXXVII -DCCCXXXX -MMCDXXXVIIII -MMMMDCCXVIII -LV -MMMDCCCCVI -MCCCII -MMCMLXVIIII -MDCCXI -MMMMDLXVII -MMCCCCLXI -MMDCCV -MMMCCCXXXIIII -MMMMDI -MMMDCCCXCV -MMDCCLXXXXI -MMMDXXVI -MMMDCCCLVI -MMDCXXX -MCCCVII -MMMMCCCLXII -MMMMXXV -MMCMXXV -MMLVI -MMDXXX -MMMMCVII -MDC -MCCIII -MMMMDCC -MMCCLXXV -MMDCCCXXXXVI -MMMMCCCLXV -CDXIIII -MLXIIII -CCV -MMMCMXXXI -CCCCLXVI -MDXXXII -MMMMCCCLVIII -MMV -MMMCLII -MCMLI -MMDCCXX -MMMMCCCCXXXVI -MCCLXXXI -MMMCMVI -DCCXXX -MMMMCCCLXV -DCCCXI -MMMMDCCCXIV -CCCXXI -MMDLXXV -CCCCLXXXX -MCCCLXXXXII -MMDCIX -DCCXLIIII -DXIV -MMMMCLII -CDLXI -MMMCXXVII -MMMMDCCCCLXIII -MMMDCLIIII -MCCCCXXXXII -MMCCCLX -CCCCLIII -MDCCLXXVI -MCMXXIII -MMMMDLXXVIII -MMDCCCCLX -MMMCCCLXXXX -MMMCDXXVI -MMMDLVIII -CCCLXI -MMMMDCXXII -MMDCCCXXI -MMDCCXIII -MMMMCLXXXVI -MDCCCCXXVI -MDV -MMDCCCCLXXVI -MMMMCCXXXVII -MMMDCCLXXVIIII -MMMCCCCLXVII -DCCXLI -MMCLXXXVIII -MCCXXXVI -MMDCXLVIII -MMMMCXXXII -MMMMDCCLXVI -MMMMCMLI -MMMMCLXV -MMMMDCCCXCIV -MCCLXXVII -LXXVIIII -DCCLII -MMMCCCXCVI -MMMCLV -MMDCCCXXXXVIII -DCCCXV -MXC -MMDCCLXXXXVII -MMMMCML -MMDCCCLXXVIII -DXXI -MCCCXLI -DCLXXXXI -MMCCCLXXXXVIII -MDCCCCLXXVIII -MMMMDXXV -MMMDCXXXVI -MMMCMXCVII -MMXVIIII -MMMDCCLXXIV -MMMCXXV -DXXXVIII -MMMMCLXVI -MDXII -MMCCCLXX -CCLXXI -DXIV -MMMCLIII -DLII -MMMCCCXLIX -MMCCCCXXVI -MMDCXLIII -MXXXXII -CCCLXXXV -MDCLXXVI -MDCXII -MMMCCCLXXXIII -MMDCCCCLXXXII -MMMMCCCLXXXV -MMDCXXI -DCCCXXX -MMMDCCCCLII -MMMDCCXXII -MMMMCDXCVIII -MMMCCLXVIIII -MMXXV -MMMMCDXIX -MMMMCCCX -MMMCCCCLXVI -MMMMDCLXXVIIII -MMMMDCXXXXIV -MMMCMXII -MMMMXXXIII -MMMMDLXXXII -DCCCLIV -MDXVIIII -MMMCLXXXXV -CCCCXX -MMDIX -MMCMLXXXVIII -DCCXLIII -DCCLX -D -MCCCVII -MMMMCCCLXXXIII -MDCCCLXXIIII -MMMDCCCCLXXXVII -MMMMCCCVII -MMMDCCLXXXXVI -CDXXXIV -MCCLXVIII -MMMMDLX -MMMMDXII -MMMMCCCCLIIII -MCMLXXXXIII -MMMMDCCCIII -MMDCLXXXIII -MDCCCXXXXIV -XXXXVII -MMMDCCCXXXII -MMMDCCCXLII -MCXXXV -MDCXXVIIII -MMMCXXXXIIII -MMMMCDXVII -MMMDXXIII -MMMMCCCCLXI -DCLXXXXVIIII -LXXXXI -CXXXIII -MCDX -MCCLVII -MDCXXXXII -MMMCXXIV -MMMMLXXXX -MMDCCCCXLV -MLXXX -MMDCCCCLX -MCDLIII -MMMCCCLXVII -MMMMCCCLXXIV -MMMDCVIII -DCCCCXXIII -MMXCI -MMDCCIV -MMMMDCCCXXXIV -CCCLXXI -MCCLXXXII -MCMIII -CCXXXI -DCCXXXVIII -MMMMDCCXLVIIII -MMMMCMXXXV -DCCCLXXV -DCCXCI -MMMMDVII -MMMMDCCCLXVIIII -CCCXCV -MMMMDCCXX -MCCCCII -MMMCCCXC -MMMCCCII -MMDCCLXXVII -MMDCLIIII -CCXLIII -MMMDCXVIII -MMMCCCIX -MCXV -MMCCXXV -MLXXIIII -MDCCXXVI -MMMCCCXX -MMDLXX -MMCCCCVI -MMDCCXX -MMMMDCCCCXCV -MDCCCXXXII -MMMMDCCCCXXXX -XCIV -MMCCCCLX -MMXVII -MLXXI -MMMDXXVIII -MDCCCCII -MMMCMLVII -MMCLXXXXVIII -MDCCCCLV -MCCCCLXXIIII -MCCCLII -MCDXLVI -MMMMDXVIII -DCCLXXXIX -MMMDCCLXIV -MDCCCCXLIII -CLXXXXV -MMMMCCXXXVI -MMMDCCCXXI -MMMMCDLXXVII -MCDLIII -MMCCXLVI -DCCCLV -MCDLXX -DCLXXVIII -MMDCXXXIX -MMMMDCLX -MMDCCLI -MMCXXXV -MMMCCXII -MMMMCMLXII -MMMMCCV -MCCCCLXIX -MMMMCCIII -CLXVII -MCCCLXXXXIIII -MMMMDCVIII -MMDCCCLXI -MMLXXIX -CMLXIX -MMDCCCXLVIIII -DCLXII -MMMCCCXLVII -MDCCCXXXV -MMMMDCCXCVI -DCXXX -XXVI -MMLXIX -MMCXI -DCXXXVII -MMMMCCCXXXXVIII -MMMMDCLXI -MMMMDCLXXIIII -MMMMVIII -MMMMDCCCLXII -MDCXCI -MMCCCXXIIII -CCCCXXXXV -MMDCCCXXI -MCVI -MMDCCLXVIII -MMMMCXL -MLXVIII -CMXXVII -CCCLV -MDCCLXXXIX -MMMCCCCLXV -MMDCCLXII -MDLXVI -MMMCCCXVIII -MMMMCCLXXXI -MMCXXVII -MMDCCCLXVIII -MMMCXCII -MMMMDCLVIII -MMMMDCCCXXXXII -MMDCCCCLXXXXVI -MDCCXL -MDCCLVII -MMMMDCCCLXXXVI -DCCXXXIII -MMMMDCCCCLXXXV -MMCCXXXXVIII -MMMCCLXXVIII -MMMDCLXXVIII -DCCCI -MMMMLXXXXVIIII -MMMCCCCLXXII -MMCLXXXVII -CCLXVI -MCDXLIII -MMCXXVIII -MDXIV -CCCXCVIII -CLXXVIII -MMCXXXXVIIII -MMMDCLXXXIV -CMLVIII -MCDLIX -MMMMDCCCXXXII -MMMMDCXXXIIII -MDCXXI -MMMDCXLV -MCLXXVIII -MCDXXII -IV -MCDLXXXXIII -MMMMDCCLXV -CCLI -MMMMDCCCXXXVIII -DCLXII -MCCCLXVII -MMMMDCCCXXXVI -MMDCCXLI -MLXI -MMMCDLXVIII -MCCCCXCIII -XXXIII -MMMDCLXIII -MMMMDCL -DCCCXXXXIIII -MMDLVII -DXXXVII -MCCCCXXIIII -MCVII -MMMMDCCXL -MMMMCXXXXIIII -MCCCCXXIV -MMCLXVIII -MMXCIII -MDCCLXXX -MCCCLIIII -MMDCLXXI -MXI -MCMLIV -MMMCCIIII -DCCLXXXVIIII -MDCLIV -MMMDCXIX -CMLXXXI -DCCLXXXVII -XXV -MMMXXXVI -MDVIIII -CLXIII -MMMCDLVIIII -MMCCCCVII -MMMLXX -MXXXXII -MMMMCCCLXVIII -MMDCCCXXVIII -MMMMDCXXXXI -MMMMDCCCXXXXV -MMMXV -MMMMCCXVIIII -MMDCCXIIII -MMMXXVII -MDCCLVIIII -MMCXXIIII -MCCCLXXIV -DCLVIII -MMMLVII -MMMCXLV -MMXCVII -MMMCCCLXXXVII -MMMMCCXXII -DXII -MMMDLV -MCCCLXXVIII -MMMCLIIII -MMMMCLXXXX -MMMCLXXXIIII -MDCXXIII -MMMMCCXVI -MMMMDLXXXIII -MMMDXXXXIII -MMMMCCCCLV -MMMDLXXXI -MMMCCLXXVI -MMMMXX -MMMMDLVI -MCCCCLXXX -MMMXXII -MMXXII -MMDCCCCXXXI -MMMDXXV -MMMDCLXXXVIIII -MMMDLXXXXVII -MDLXIIII -CMXC -MMMXXXVIII -MDLXXXVIII -MCCCLXXVI -MMCDLIX -MMDCCCXVIII -MDCCCXXXXVI -MMMMCMIV -MMMMDCIIII -MMCCXXXV -XXXXVI -MMMMCCXVII -MMCCXXIV -MCMLVIIII -MLXXXIX -MMMMLXXXIX -CLXXXXIX -MMMDCCCCLVIII -MMMMCCLXXIII -MCCCC -DCCCLIX -MMMCCCLXXXII -MMMCCLXVIIII -MCLXXXV -CDLXXXVII -DCVI -MMX -MMCCXIII -MMMMDCXX -MMMMXXVIII -DCCCLXII -MMMMCCCXLIII -MMMMCLXV -DXCI -MMMMCLXXX -MMMDCCXXXXI -MMMMXXXXVI -DCLX -MMMCCCXI -MCCLXXX -MMCDLXXII -DCCLXXI -MMMCCCXXXVI -MCCCCLXXXVIIII -CDLVIII -DCCLVI -MMMMDCXXXVIII -MMCCCLXXXIII -MMMMDCCLXXV -MMMXXXVI -CCCLXXXXIX -CV -CCCCXIII -CCCCXVI -MDCCCLXXXIIII -MMDCCLXXXII -MMMMCCCCLXXXI -MXXV -MMCCCLXXVIIII -MMMCCXII -MMMMCCXXXIII -MMCCCLXXXVI -MMMDCCCLVIIII -MCCXXXVII -MDCLXXV -XXXV -MMDLI -MMMCCXXX -MMMMCXXXXV -CCCCLIX -MMMMDCCCLXXIII -MMCCCXVII -DCCCXVI -MMMCCCXXXXV -MDCCCCXCV -CLXXXI -MMMMDCCLXX -MMMDCCCIII -MMCLXXVII -MMMDCCXXIX -MMDCCCXCIIII -MMMCDXXIIII -MMMMXXVIII -MMMMDCCCCLXVIII -MDCCCXX -MMMMCDXXI -MMMMDLXXXIX -CCXVI -MDVIII -MMCCLXXI -MMMDCCCLXXI -MMMCCCLXXVI -MMCCLXI -MMMMDCCCXXXIV -DLXXXVI -MMMMDXXXII -MMMXXIIII -MMMMCDIV -MMMMCCCXLVIII -MMMMCXXXVIII -MMMCCCLXVI -MDCCXVIII -MMCXX -CCCLIX -MMMMDCCLXXII -MDCCCLXXV -MMMMDCCCXXIV -DCCCXXXXVIII -MMMDCCCCXXXVIIII -MMMMCCXXXV -MDCLXXXIII -MMCCLXXXIV -MCLXXXXIIII -DXXXXIII -MCCCXXXXVIII -MMCLXXIX -MMMMCCLXIV -MXXII -MMMCXIX -MDCXXXVII -MMDCCVI -MCLXXXXVIII -MMMCXVI -MCCCLX -MMMCDX -CCLXVIIII -MMMCCLX -MCXXVIII -LXXXII -MCCCCLXXXI -MMMI -MMMCCCLXIV -MMMCCCXXVIIII -CXXXVIII -MMCCCXX -MMMCCXXVIIII -MCCLXVI -MMMCCCCXXXXVI -MMDCCXCIX -MCMLXXI -MMCCLXVIII -CDLXXXXIII -MMMMDCCXXII -MMMMDCCLXXXVII -MMMDCCLIV -MMCCLXIII -MDXXXVII -DCCXXXIIII -MCII -MMMDCCCLXXI -MMMLXXIII -MDCCCLIII -MMXXXVIII -MDCCXVIIII -MDCCCCXXXVII -MMCCCXVI -MCMXXII -MMMCCCLVIII -MMMMDCCCXX -MCXXIII -MMMDLXI -MMMMDXXII -MDCCCX -MMDXCVIIII -MMMDCCCCVIII -MMMMDCCCCXXXXVI -MMDCCCXXXV -MMCXCIV -MCMLXXXXIII -MMMCCCLXXVI -MMMMDCLXXXV -CMLXIX -DCXCII -MMXXVIII -MMMMCCCXXX -XXXXVIIII \ No newline at end of file diff --git a/project_euler/problem_089/sol1.py b/project_euler/problem_089/sol1.py deleted file mode 100644 index 123159bdce09..000000000000 --- a/project_euler/problem_089/sol1.py +++ /dev/null @@ -1,141 +0,0 @@ -""" -Project Euler Problem 89: https://projecteuler.net/problem=89 - -For a number written in Roman numerals to be considered valid there are basic rules -which must be followed. Even though the rules allow some numbers to be expressed in -more than one way there is always a "best" way of writing a particular number. - -For example, it would appear that there are at least six ways of writing the number -sixteen: - -IIIIIIIIIIIIIIII -VIIIIIIIIIII -VVIIIIII -XIIIIII -VVVI -XVI - -However, according to the rules only XIIIIII and XVI are valid, and the last example -is considered to be the most efficient, as it uses the least number of numerals. - -The 11K text file, roman.txt (right click and 'Save Link/Target As...'), contains one -thousand numbers written in valid, but not necessarily minimal, Roman numerals; see -About... Roman Numerals for the definitive rules for this problem. - -Find the number of characters saved by writing each of these in their minimal form. - -Note: You can assume that all the Roman numerals in the file contain no more than four -consecutive identical units. -""" - -import os - -SYMBOLS = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} - - -def parse_roman_numerals(numerals: str) -> int: - """ - Converts a string of roman numerals to an integer. - e.g. - >>> parse_roman_numerals("LXXXIX") - 89 - >>> parse_roman_numerals("IIII") - 4 - """ - - total_value = 0 - - index = 0 - while index < len(numerals) - 1: - current_value = SYMBOLS[numerals[index]] - next_value = SYMBOLS[numerals[index + 1]] - if current_value < next_value: - total_value -= current_value - else: - total_value += current_value - index += 1 - total_value += SYMBOLS[numerals[index]] - - return total_value - - -def generate_roman_numerals(num: int) -> str: - """ - Generates a string of roman numerals for a given integer. - e.g. - >>> generate_roman_numerals(89) - 'LXXXIX' - >>> generate_roman_numerals(4) - 'IV' - """ - - numerals = "" - - m_count = num // 1000 - numerals += m_count * "M" - num %= 1000 - - c_count = num // 100 - if c_count == 9: - numerals += "CM" - c_count -= 9 - elif c_count == 4: - numerals += "CD" - c_count -= 4 - if c_count >= 5: - numerals += "D" - c_count -= 5 - numerals += c_count * "C" - num %= 100 - - x_count = num // 10 - if x_count == 9: - numerals += "XC" - x_count -= 9 - elif x_count == 4: - numerals += "XL" - x_count -= 4 - if x_count >= 5: - numerals += "L" - x_count -= 5 - numerals += x_count * "X" - num %= 10 - - if num == 9: - numerals += "IX" - num -= 9 - elif num == 4: - numerals += "IV" - num -= 4 - if num >= 5: - numerals += "V" - num -= 5 - numerals += num * "I" - - return numerals - - -def solution(roman_numerals_filename: str = "/p089_roman.txt") -> int: - """ - Calculates and returns the answer to project euler problem 89. - - >>> solution("/numeralcleanup_test.txt") - 16 - """ - - savings = 0 - - with open(os.path.dirname(__file__) + roman_numerals_filename) as file1: - lines = file1.readlines() - - for line in lines: - original = line.strip() - num = parse_roman_numerals(original) - shortened = generate_roman_numerals(num) - savings += len(original) - len(shortened) - - return savings - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_091/__init__.py b/project_euler/problem_091/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_091/sol1.py b/project_euler/problem_091/sol1.py deleted file mode 100644 index 7db98fca0049..000000000000 --- a/project_euler/problem_091/sol1.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Project Euler Problem 91: https://projecteuler.net/problem=91 - -The points P (x1, y1) and Q (x2, y2) are plotted at integer coordinates and -are joined to the origin, O(0,0), to form ΔOPQ. - -There are exactly fourteen triangles containing a right angle that can be formed -when each coordinate lies between 0 and 2 inclusive; that is, -0 ≤ x1, y1, x2, y2 ≤ 2. - -Given that 0 ≤ x1, y1, x2, y2 ≤ 50, how many right triangles can be formed? -""" - -from itertools import combinations, product - - -def is_right(x1: int, y1: int, x2: int, y2: int) -> bool: - """ - Check if the triangle described by P(x1,y1), Q(x2,y2) and O(0,0) is right-angled. - Note: this doesn't check if P and Q are equal, but that's handled by the use of - itertools.combinations in the solution function. - - >>> is_right(0, 1, 2, 0) - True - >>> is_right(1, 0, 2, 2) - False - """ - if x1 == y1 == 0 or x2 == y2 == 0: - return False - a_square = x1 * x1 + y1 * y1 - b_square = x2 * x2 + y2 * y2 - c_square = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) - return ( - a_square + b_square == c_square - or a_square + c_square == b_square - or b_square + c_square == a_square - ) - - -def solution(limit: int = 50) -> int: - """ - Return the number of right triangles OPQ that can be formed by two points P, Q - which have both x- and y- coordinates between 0 and limit inclusive. - - >>> solution(2) - 14 - >>> solution(10) - 448 - """ - return sum( - 1 - for pt1, pt2 in combinations(product(range(limit + 1), repeat=2), 2) - if is_right(*pt1, *pt2) - ) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_092/__init__.py b/project_euler/problem_092/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_092/sol1.py b/project_euler/problem_092/sol1.py deleted file mode 100644 index 3e45e82207a7..000000000000 --- a/project_euler/problem_092/sol1.py +++ /dev/null @@ -1,105 +0,0 @@ -""" -Project Euler Problem 092: https://projecteuler.net/problem=92 -Square digit chains -A number chain is created by continuously adding the square of the digits in -a number to form a new number until it has been seen before. -For example, -44 → 32 → 13 → 10 → 1 → 1 -85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89 -Therefore any chain that arrives at 1 or 89 will become stuck in an endless loop. -What is most amazing is that EVERY starting number will eventually arrive at 1 or 89. -How many starting numbers below ten million will arrive at 89? -""" - -DIGITS_SQUARED = [sum(int(c, 10) ** 2 for c in i.__str__()) for i in range(100000)] - - -def next_number(number: int) -> int: - """ - Returns the next number of the chain by adding the square of each digit - to form a new number. - For example, if number = 12, next_number() will return 1^2 + 2^2 = 5. - Therefore, 5 is the next number of the chain. - >>> next_number(44) - 32 - >>> next_number(10) - 1 - >>> next_number(32) - 13 - """ - - sum_of_digits_squared = 0 - while number: - # Increased Speed Slightly by checking every 5 digits together. - sum_of_digits_squared += DIGITS_SQUARED[number % 100000] - number //= 100000 - - return sum_of_digits_squared - - -# There are 2 Chains made, -# One ends with 89 with the chain member 58 being the one which when declared first, -# there will be the least number of iterations for all the members to be checked. - -# The other one ends with 1 and has only one element 1. - -# So 58 and 1 are chosen to be declared at the starting. - -# Changed dictionary to an array to quicken the solution -CHAINS: list[bool | None] = [None] * 10000000 -CHAINS[0] = True -CHAINS[57] = False - - -def chain(number: int) -> bool: - """ - The function generates the chain of numbers until the next number is 1 or 89. - For example, if starting number is 44, then the function generates the - following chain of numbers: - 44 → 32 → 13 → 10 → 1 → 1. - Once the next number generated is 1 or 89, the function returns whether - or not the next number generated by next_number() is 1. - >>> chain(10) - True - >>> chain(58) - False - >>> chain(1) - True - """ - - if CHAINS[number - 1] is not None: - return CHAINS[number - 1] # type: ignore[return-value] - - number_chain = chain(next_number(number)) - CHAINS[number - 1] = number_chain - - while number < 10000000: - CHAINS[number - 1] = number_chain - number *= 10 - - return number_chain - - -def solution(number: int = 10000000) -> int: - """ - The function returns the number of integers that end up being 89 in each chain. - The function accepts a range number and the function checks all the values - under value number. - - >>> solution(100) - 80 - >>> solution(10000000) - 8581146 - """ - for i in range(1, number): - if CHAINS[i] is None: - chain(i + 1) - - return CHAINS[:number].count(False) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{solution() = }") diff --git a/project_euler/problem_094/__init__.py b/project_euler/problem_094/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_094/sol1.py b/project_euler/problem_094/sol1.py deleted file mode 100644 index a41292fe26fd..000000000000 --- a/project_euler/problem_094/sol1.py +++ /dev/null @@ -1,44 +0,0 @@ -""" -Project Euler Problem 94: https://projecteuler.net/problem=94 - -It is easily proved that no equilateral triangle exists with integral length sides and -integral area. However, the almost equilateral triangle 5-5-6 has an area of 12 square -units. - -We shall define an almost equilateral triangle to be a triangle for which two sides are -equal and the third differs by no more than one unit. - -Find the sum of the perimeters of all almost equilateral triangles with integral side -lengths and area and whose perimeters do not exceed one billion (1,000,000,000). -""" - - -def solution(max_perimeter: int = 10**9) -> int: - """ - Returns the sum of the perimeters of all almost equilateral triangles with integral - side lengths and area and whose perimeters do not exceed max_perimeter - - >>> solution(20) - 16 - """ - - prev_value = 1 - value = 2 - - perimeters_sum = 0 - i = 0 - perimeter = 0 - while perimeter <= max_perimeter: - perimeters_sum += perimeter - - prev_value += 2 * value - value += prev_value - - perimeter = 2 * value + 2 if i % 2 == 0 else 2 * value - 2 - i += 1 - - return perimeters_sum - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_097/__init__.py b/project_euler/problem_097/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_097/sol1.py b/project_euler/problem_097/sol1.py deleted file mode 100644 index a349f3a1dbc9..000000000000 --- a/project_euler/problem_097/sol1.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -The first known prime found to exceed one million digits was discovered in 1999, -and is a Mersenne prime of the form 2**6972593 - 1; it contains exactly 2,098,960 -digits. Subsequently other Mersenne primes, of the form 2**p - 1, have been found -which contain more digits. -However, in 2004 there was found a massive non-Mersenne prime which contains -2,357,207 digits: (28433 * (2 ** 7830457 + 1)). - -Find the last ten digits of this prime number. -""" - - -def solution(n: int = 10) -> str: - """ - Returns the last n digits of NUMBER. - >>> solution() - '8739992577' - >>> solution(8) - '39992577' - >>> solution(1) - '7' - >>> solution(-1) - Traceback (most recent call last): - ... - ValueError: Invalid input - >>> solution(8.3) - Traceback (most recent call last): - ... - ValueError: Invalid input - >>> solution("a") - Traceback (most recent call last): - ... - ValueError: Invalid input - """ - if not isinstance(n, int) or n < 0: - raise ValueError("Invalid input") - modulus = 10**n - number = 28433 * (pow(2, 7830457, modulus)) + 1 - return str(number % modulus) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"{solution(10) = }") diff --git a/project_euler/problem_099/__init__.py b/project_euler/problem_099/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_099/base_exp.txt b/project_euler/problem_099/base_exp.txt deleted file mode 100644 index e4b2d01522ca..000000000000 --- a/project_euler/problem_099/base_exp.txt +++ /dev/null @@ -1,1000 +0,0 @@ -519432,525806 -632382,518061 -78864,613712 -466580,530130 -780495,510032 -525895,525320 -15991,714883 -960290,502358 -760018,511029 -166800,575487 -210884,564478 -555151,523163 -681146,515199 -563395,522587 -738250,512126 -923525,503780 -595148,520429 -177108,572629 -750923,511482 -440902,532446 -881418,505504 -422489,534197 -979858,501616 -685893,514935 -747477,511661 -167214,575367 -234140,559696 -940238,503122 -728969,512609 -232083,560102 -900971,504694 -688801,514772 -189664,569402 -891022,505104 -445689,531996 -119570,591871 -821453,508118 -371084,539600 -911745,504251 -623655,518600 -144361,582486 -352442,541775 -420726,534367 -295298,549387 -6530,787777 -468397,529976 -672336,515696 -431861,533289 -84228,610150 -805376,508857 -444409,532117 -33833,663511 -381850,538396 -402931,536157 -92901,604930 -304825,548004 -731917,512452 -753734,511344 -51894,637373 -151578,580103 -295075,549421 -303590,548183 -333594,544123 -683952,515042 -60090,628880 -951420,502692 -28335,674991 -714940,513349 -343858,542826 -549279,523586 -804571,508887 -260653,554881 -291399,549966 -402342,536213 -408889,535550 -40328,652524 -375856,539061 -768907,510590 -165993,575715 -976327,501755 -898500,504795 -360404,540830 -478714,529095 -694144,514472 -488726,528258 -841380,507226 -328012,544839 -22389,690868 -604053,519852 -329514,544641 -772965,510390 -492798,527927 -30125,670983 -895603,504906 -450785,531539 -840237,507276 -380711,538522 -63577,625673 -76801,615157 -502694,527123 -597706,520257 -310484,547206 -944468,502959 -121283,591152 -451131,531507 -566499,522367 -425373,533918 -40240,652665 -39130,654392 -714926,513355 -469219,529903 -806929,508783 -287970,550487 -92189,605332 -103841,599094 -671839,515725 -452048,531421 -987837,501323 -935192,503321 -88585,607450 -613883,519216 -144551,582413 -647359,517155 -213902,563816 -184120,570789 -258126,555322 -502546,527130 -407655,535678 -401528,536306 -477490,529193 -841085,507237 -732831,512408 -833000,507595 -904694,504542 -581435,521348 -455545,531110 -873558,505829 -94916,603796 -720176,513068 -545034,523891 -246348,557409 -556452,523079 -832015,507634 -173663,573564 -502634,527125 -250732,556611 -569786,522139 -216919,563178 -521815,525623 -92304,605270 -164446,576167 -753413,511364 -11410,740712 -448845,531712 -925072,503725 -564888,522477 -7062,780812 -641155,517535 -738878,512100 -636204,517828 -372540,539436 -443162,532237 -571192,522042 -655350,516680 -299741,548735 -581914,521307 -965471,502156 -513441,526277 -808682,508700 -237589,559034 -543300,524025 -804712,508889 -247511,557192 -543486,524008 -504383,526992 -326529,545039 -792493,509458 -86033,609017 -126554,589005 -579379,521481 -948026,502823 -404777,535969 -265767,554022 -266876,553840 -46631,643714 -492397,527958 -856106,506581 -795757,509305 -748946,511584 -294694,549480 -409781,535463 -775887,510253 -543747,523991 -210592,564536 -517119,525990 -520253,525751 -247926,557124 -592141,520626 -346580,542492 -544969,523902 -506501,526817 -244520,557738 -144745,582349 -69274,620858 -292620,549784 -926027,503687 -736320,512225 -515528,526113 -407549,535688 -848089,506927 -24141,685711 -9224,757964 -980684,501586 -175259,573121 -489160,528216 -878970,505604 -969546,502002 -525207,525365 -690461,514675 -156510,578551 -659778,516426 -468739,529945 -765252,510770 -76703,615230 -165151,575959 -29779,671736 -928865,503569 -577538,521605 -927555,503618 -185377,570477 -974756,501809 -800130,509093 -217016,563153 -365709,540216 -774508,510320 -588716,520851 -631673,518104 -954076,502590 -777828,510161 -990659,501222 -597799,520254 -786905,509727 -512547,526348 -756449,511212 -869787,505988 -653747,516779 -84623,609900 -839698,507295 -30159,670909 -797275,509234 -678136,515373 -897144,504851 -989554,501263 -413292,535106 -55297,633667 -788650,509637 -486748,528417 -150724,580377 -56434,632490 -77207,614869 -588631,520859 -611619,519367 -100006,601055 -528924,525093 -190225,569257 -851155,506789 -682593,515114 -613043,519275 -514673,526183 -877634,505655 -878905,505602 -1926,914951 -613245,519259 -152481,579816 -841774,507203 -71060,619442 -865335,506175 -90244,606469 -302156,548388 -399059,536557 -478465,529113 -558601,522925 -69132,620966 -267663,553700 -988276,501310 -378354,538787 -529909,525014 -161733,576968 -758541,511109 -823425,508024 -149821,580667 -269258,553438 -481152,528891 -120871,591322 -972322,501901 -981350,501567 -676129,515483 -950860,502717 -119000,592114 -392252,537272 -191618,568919 -946699,502874 -289555,550247 -799322,509139 -703886,513942 -194812,568143 -261823,554685 -203052,566221 -217330,563093 -734748,512313 -391759,537328 -807052,508777 -564467,522510 -59186,629748 -113447,594545 -518063,525916 -905944,504492 -613922,519213 -439093,532607 -445946,531981 -230530,560399 -297887,549007 -459029,530797 -403692,536075 -855118,506616 -963127,502245 -841711,507208 -407411,535699 -924729,503735 -914823,504132 -333725,544101 -176345,572832 -912507,504225 -411273,535308 -259774,555036 -632853,518038 -119723,591801 -163902,576321 -22691,689944 -402427,536212 -175769,572988 -837260,507402 -603432,519893 -313679,546767 -538165,524394 -549026,523608 -61083,627945 -898345,504798 -992556,501153 -369999,539727 -32847,665404 -891292,505088 -152715,579732 -824104,507997 -234057,559711 -730507,512532 -960529,502340 -388395,537687 -958170,502437 -57105,631806 -186025,570311 -993043,501133 -576770,521664 -215319,563513 -927342,503628 -521353,525666 -39563,653705 -752516,511408 -110755,595770 -309749,547305 -374379,539224 -919184,503952 -990652,501226 -647780,517135 -187177,570017 -168938,574877 -649558,517023 -278126,552016 -162039,576868 -658512,516499 -498115,527486 -896583,504868 -561170,522740 -747772,511647 -775093,510294 -652081,516882 -724905,512824 -499707,527365 -47388,642755 -646668,517204 -571700,522007 -180430,571747 -710015,513617 -435522,532941 -98137,602041 -759176,511070 -486124,528467 -526942,525236 -878921,505604 -408313,535602 -926980,503640 -882353,505459 -566887,522345 -3326,853312 -911981,504248 -416309,534800 -392991,537199 -622829,518651 -148647,581055 -496483,527624 -666314,516044 -48562,641293 -672618,515684 -443676,532187 -274065,552661 -265386,554079 -347668,542358 -31816,667448 -181575,571446 -961289,502320 -365689,540214 -987950,501317 -932299,503440 -27388,677243 -746701,511701 -492258,527969 -147823,581323 -57918,630985 -838849,507333 -678038,515375 -27852,676130 -850241,506828 -818403,508253 -131717,587014 -850216,506834 -904848,504529 -189758,569380 -392845,537217 -470876,529761 -925353,503711 -285431,550877 -454098,531234 -823910,508003 -318493,546112 -766067,510730 -261277,554775 -421530,534289 -694130,514478 -120439,591498 -213308,563949 -854063,506662 -365255,540263 -165437,575872 -662240,516281 -289970,550181 -847977,506933 -546083,523816 -413252,535113 -975829,501767 -361540,540701 -235522,559435 -224643,561577 -736350,512229 -328303,544808 -35022,661330 -307838,547578 -474366,529458 -873755,505819 -73978,617220 -827387,507845 -670830,515791 -326511,545034 -309909,547285 -400970,536363 -884827,505352 -718307,513175 -28462,674699 -599384,520150 -253565,556111 -284009,551093 -343403,542876 -446557,531921 -992372,501160 -961601,502308 -696629,514342 -919537,503945 -894709,504944 -892201,505051 -358160,541097 -448503,531745 -832156,507636 -920045,503924 -926137,503675 -416754,534757 -254422,555966 -92498,605151 -826833,507873 -660716,516371 -689335,514746 -160045,577467 -814642,508425 -969939,501993 -242856,558047 -76302,615517 -472083,529653 -587101,520964 -99066,601543 -498005,527503 -709800,513624 -708000,513716 -20171,698134 -285020,550936 -266564,553891 -981563,501557 -846502,506991 -334,1190800 -209268,564829 -9844,752610 -996519,501007 -410059,535426 -432931,533188 -848012,506929 -966803,502110 -983434,501486 -160700,577267 -504374,526989 -832061,507640 -392825,537214 -443842,532165 -440352,532492 -745125,511776 -13718,726392 -661753,516312 -70500,619875 -436952,532814 -424724,533973 -21954,692224 -262490,554567 -716622,513264 -907584,504425 -60086,628882 -837123,507412 -971345,501940 -947162,502855 -139920,584021 -68330,621624 -666452,516038 -731446,512481 -953350,502619 -183157,571042 -845400,507045 -651548,516910 -20399,697344 -861779,506331 -629771,518229 -801706,509026 -189207,569512 -737501,512168 -719272,513115 -479285,529045 -136046,585401 -896746,504860 -891735,505067 -684771,514999 -865309,506184 -379066,538702 -503117,527090 -621780,518717 -209518,564775 -677135,515423 -987500,501340 -197049,567613 -329315,544673 -236756,559196 -357092,541226 -520440,525733 -213471,563911 -956852,502490 -702223,514032 -404943,535955 -178880,572152 -689477,514734 -691351,514630 -866669,506128 -370561,539656 -739805,512051 -71060,619441 -624861,518534 -261660,554714 -366137,540160 -166054,575698 -601878,519990 -153445,579501 -279899,551729 -379166,538691 -423209,534125 -675310,515526 -145641,582050 -691353,514627 -917468,504026 -284778,550976 -81040,612235 -161699,576978 -616394,519057 -767490,510661 -156896,578431 -427408,533714 -254849,555884 -737217,512182 -897133,504851 -203815,566051 -270822,553189 -135854,585475 -778805,510111 -784373,509847 -305426,547921 -733418,512375 -732087,512448 -540668,524215 -702898,513996 -628057,518328 -640280,517587 -422405,534204 -10604,746569 -746038,511733 -839808,507293 -457417,530938 -479030,529064 -341758,543090 -620223,518824 -251661,556451 -561790,522696 -497733,527521 -724201,512863 -489217,528217 -415623,534867 -624610,518548 -847541,506953 -432295,533249 -400391,536421 -961158,502319 -139173,584284 -421225,534315 -579083,521501 -74274,617000 -701142,514087 -374465,539219 -217814,562985 -358972,540995 -88629,607424 -288597,550389 -285819,550812 -538400,524385 -809930,508645 -738326,512126 -955461,502535 -163829,576343 -826475,507891 -376488,538987 -102234,599905 -114650,594002 -52815,636341 -434037,533082 -804744,508880 -98385,601905 -856620,506559 -220057,562517 -844734,507078 -150677,580387 -558697,522917 -621751,518719 -207067,565321 -135297,585677 -932968,503404 -604456,519822 -579728,521462 -244138,557813 -706487,513800 -711627,513523 -853833,506674 -497220,527562 -59428,629511 -564845,522486 -623621,518603 -242689,558077 -125091,589591 -363819,540432 -686453,514901 -656813,516594 -489901,528155 -386380,537905 -542819,524052 -243987,557841 -693412,514514 -488484,528271 -896331,504881 -336730,543721 -728298,512647 -604215,519840 -153729,579413 -595687,520398 -540360,524240 -245779,557511 -924873,503730 -509628,526577 -528523,525122 -3509,847707 -522756,525555 -895447,504922 -44840,646067 -45860,644715 -463487,530404 -398164,536654 -894483,504959 -619415,518874 -966306,502129 -990922,501212 -835756,507474 -548881,523618 -453578,531282 -474993,529410 -80085,612879 -737091,512193 -50789,638638 -979768,501620 -792018,509483 -665001,516122 -86552,608694 -462772,530469 -589233,520821 -891694,505072 -592605,520594 -209645,564741 -42531,649269 -554376,523226 -803814,508929 -334157,544042 -175836,572970 -868379,506051 -658166,516520 -278203,551995 -966198,502126 -627162,518387 -296774,549165 -311803,547027 -843797,507118 -702304,514032 -563875,522553 -33103,664910 -191932,568841 -543514,524006 -506835,526794 -868368,506052 -847025,506971 -678623,515342 -876139,505726 -571997,521984 -598632,520198 -213590,563892 -625404,518497 -726508,512738 -689426,514738 -332495,544264 -411366,535302 -242546,558110 -315209,546555 -797544,509219 -93889,604371 -858879,506454 -124906,589666 -449072,531693 -235960,559345 -642403,517454 -720567,513047 -705534,513858 -603692,519870 -488137,528302 -157370,578285 -63515,625730 -666326,516041 -619226,518883 -443613,532186 -597717,520257 -96225,603069 -86940,608450 -40725,651929 -460976,530625 -268875,553508 -270671,553214 -363254,540500 -384248,538137 -762889,510892 -377941,538833 -278878,551890 -176615,572755 -860008,506412 -944392,502967 -608395,519571 -225283,561450 -45095,645728 -333798,544090 -625733,518476 -995584,501037 -506135,526853 -238050,558952 -557943,522972 -530978,524938 -634244,517949 -177168,572616 -85200,609541 -953043,502630 -523661,525484 -999295,500902 -840803,507246 -961490,502312 -471747,529685 -380705,538523 -911180,504275 -334149,544046 -478992,529065 -325789,545133 -335884,543826 -426976,533760 -749007,511582 -667067,516000 -607586,519623 -674054,515599 -188534,569675 -565185,522464 -172090,573988 -87592,608052 -907432,504424 -8912,760841 -928318,503590 -757917,511138 -718693,513153 -315141,546566 -728326,512645 -353492,541647 -638429,517695 -628892,518280 -877286,505672 -620895,518778 -385878,537959 -423311,534113 -633501,517997 -884833,505360 -883402,505416 -999665,500894 -708395,513697 -548142,523667 -756491,511205 -987352,501340 -766520,510705 -591775,520647 -833758,507563 -843890,507108 -925551,503698 -74816,616598 -646942,517187 -354923,541481 -256291,555638 -634470,517942 -930904,503494 -134221,586071 -282663,551304 -986070,501394 -123636,590176 -123678,590164 -481717,528841 -423076,534137 -866246,506145 -93313,604697 -783632,509880 -317066,546304 -502977,527103 -141272,583545 -71708,618938 -617748,518975 -581190,521362 -193824,568382 -682368,515131 -352956,541712 -351375,541905 -505362,526909 -905165,504518 -128645,588188 -267143,553787 -158409,577965 -482776,528754 -628896,518282 -485233,528547 -563606,522574 -111001,595655 -115920,593445 -365510,540237 -959724,502374 -938763,503184 -930044,503520 -970959,501956 -913658,504176 -68117,621790 -989729,501253 -567697,522288 -820427,508163 -54236,634794 -291557,549938 -124961,589646 -403177,536130 -405421,535899 -410233,535417 -815111,508403 -213176,563974 -83099,610879 -998588,500934 -513640,526263 -129817,587733 -1820,921851 -287584,550539 -299160,548820 -860621,506386 -529258,525059 -586297,521017 -953406,502616 -441234,532410 -986217,501386 -781938,509957 -461247,530595 -735424,512277 -146623,581722 -839838,507288 -510667,526494 -935085,503327 -737523,512167 -303455,548204 -992779,501145 -60240,628739 -939095,503174 -794368,509370 -501825,527189 -459028,530798 -884641,505363 -512287,526364 -835165,507499 -307723,547590 -160587,577304 -735043,512300 -493289,527887 -110717,595785 -306480,547772 -318593,546089 -179810,571911 -200531,566799 -314999,546580 -197020,567622 -301465,548487 -237808,559000 -131944,586923 -882527,505449 -468117,530003 -711319,513541 -156240,578628 -965452,502162 -992756,501148 -437959,532715 -739938,512046 -614249,519196 -391496,537356 -62746,626418 -688215,514806 -75501,616091 -883573,505412 -558824,522910 -759371,511061 -173913,573489 -891351,505089 -727464,512693 -164833,576051 -812317,508529 -540320,524243 -698061,514257 -69149,620952 -471673,529694 -159092,577753 -428134,533653 -89997,606608 -711061,513557 -779403,510081 -203327,566155 -798176,509187 -667688,515963 -636120,517833 -137410,584913 -217615,563034 -556887,523038 -667229,515991 -672276,515708 -325361,545187 -172115,573985 -13846,725685 diff --git a/project_euler/problem_099/sol1.py b/project_euler/problem_099/sol1.py deleted file mode 100644 index bf5621c6583c..000000000000 --- a/project_euler/problem_099/sol1.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -Problem: - -Comparing two numbers written in index form like 2'11 and 3'7 is not difficult, as any -calculator would confirm that 2^11 = 2048 < 3^7 = 2187. - -However, confirming that 632382^518061 > 519432^525806 would be much more difficult, as -both numbers contain over three million digits. - -Using base_exp.txt, a 22K text file containing one thousand lines with a base/exponent -pair on each line, determine which line number has the greatest numerical value. - -NOTE: The first two lines in the file represent the numbers in the example given above. -""" - -import os -from math import log10 - - -def solution(data_file: str = "base_exp.txt") -> int: - """ - >>> solution() - 709 - """ - largest: float = 0 - result = 0 - for i, line in enumerate(open(os.path.join(os.path.dirname(__file__), data_file))): - a, x = list(map(int, line.split(","))) - if x * log10(a) > largest: - largest = x * log10(a) - result = i + 1 - return result - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_100/__init__.py b/project_euler/problem_100/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_100/sol1.py b/project_euler/problem_100/sol1.py deleted file mode 100644 index 367378e7ab17..000000000000 --- a/project_euler/problem_100/sol1.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -Project Euler Problem 100: https://projecteuler.net/problem=100 - -If a box contains twenty-one coloured discs, composed of fifteen blue discs and -six red discs, and two discs were taken at random, it can be seen that -the probability of taking two blue discs, P(BB) = (15/21) x (14/20) = 1/2. - -The next such arrangement, for which there is exactly 50% chance of taking two blue -discs at random, is a box containing eighty-five blue discs and thirty-five red discs. - -By finding the first arrangement to contain over 10^12 = 1,000,000,000,000 discs -in total, determine the number of blue discs that the box would contain. -""" - - -def solution(min_total: int = 10**12) -> int: - """ - Returns the number of blue discs for the first arrangement to contain - over min_total discs in total - - >>> solution(2) - 3 - - >>> solution(4) - 15 - - >>> solution(21) - 85 - """ - - prev_numerator = 1 - prev_denominator = 0 - - numerator = 1 - denominator = 1 - - while numerator <= 2 * min_total - 1: - prev_numerator += 2 * numerator - numerator += 2 * prev_numerator - - prev_denominator += 2 * denominator - denominator += 2 * prev_denominator - - return (denominator + 1) // 2 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_101/__init__.py b/project_euler/problem_101/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_101/sol1.py b/project_euler/problem_101/sol1.py deleted file mode 100644 index 2d209333cf31..000000000000 --- a/project_euler/problem_101/sol1.py +++ /dev/null @@ -1,220 +0,0 @@ -""" -If we are presented with the first k terms of a sequence it is impossible to say with -certainty the value of the next term, as there are infinitely many polynomial functions -that can model the sequence. - -As an example, let us consider the sequence of cube -numbers. This is defined by the generating function, -u(n) = n3: 1, 8, 27, 64, 125, 216, ... - -Suppose we were only given the first two terms of this sequence. Working on the -principle that "simple is best" we should assume a linear relationship and predict the -next term to be 15 (common difference 7). Even if we were presented with the first three -terms, by the same principle of simplicity, a quadratic relationship should be -assumed. - -We shall define OP(k, n) to be the nth term of the optimum polynomial -generating function for the first k terms of a sequence. It should be clear that -OP(k, n) will accurately generate the terms of the sequence for n ≤ k, and potentially -the first incorrect term (FIT) will be OP(k, k+1); in which case we shall call it a -bad OP (BOP). - -As a basis, if we were only given the first term of sequence, it would be most -sensible to assume constancy; that is, for n ≥ 2, OP(1, n) = u(1). - -Hence we obtain the -following OPs for the cubic sequence: - -OP(1, n) = 1 1, 1, 1, 1, ... -OP(2, n) = 7n-6 1, 8, 15, ... -OP(3, n) = 6n^2-11n+6 1, 8, 27, 58, ... -OP(4, n) = n^3 1, 8, 27, 64, 125, ... - -Clearly no BOPs exist for k ≥ 4. - -By considering the sum of FITs generated by the BOPs (indicated in red above), we -obtain 1 + 15 + 58 = 74. - -Consider the following tenth degree polynomial generating function: - -1 - n + n^2 - n^3 + n^4 - n^5 + n^6 - n^7 + n^8 - n^9 + n^10 - -Find the sum of FITs for the BOPs. -""" - -from __future__ import annotations - -from collections.abc import Callable - -Matrix = list[list[float | int]] - - -def solve(matrix: Matrix, vector: Matrix) -> Matrix: - """ - Solve the linear system of equations Ax = b (A = "matrix", b = "vector") - for x using Gaussian elimination and back substitution. We assume that A - is an invertible square matrix and that b is a column vector of the - same height. - >>> solve([[1, 0], [0, 1]], [[1],[2]]) - [[1.0], [2.0]] - >>> solve([[2, 1, -1],[-3, -1, 2],[-2, 1, 2]],[[8], [-11],[-3]]) - [[2.0], [3.0], [-1.0]] - """ - size: int = len(matrix) - augmented: Matrix = [[0 for _ in range(size + 1)] for _ in range(size)] - row: int - row2: int - col: int - col2: int - pivot_row: int - ratio: float - - for row in range(size): - for col in range(size): - augmented[row][col] = matrix[row][col] - - augmented[row][size] = vector[row][0] - - row = 0 - col = 0 - while row < size and col < size: - # pivoting - pivot_row = max((abs(augmented[row2][col]), row2) for row2 in range(col, size))[ - 1 - ] - if augmented[pivot_row][col] == 0: - col += 1 - continue - else: - augmented[row], augmented[pivot_row] = augmented[pivot_row], augmented[row] - - for row2 in range(row + 1, size): - ratio = augmented[row2][col] / augmented[row][col] - augmented[row2][col] = 0 - for col2 in range(col + 1, size + 1): - augmented[row2][col2] -= augmented[row][col2] * ratio - - row += 1 - col += 1 - - # back substitution - for col in range(1, size): - for row in range(col): - ratio = augmented[row][col] / augmented[col][col] - for col2 in range(col, size + 1): - augmented[row][col2] -= augmented[col][col2] * ratio - - # round to get rid of numbers like 2.000000000000004 - return [ - [round(augmented[row][size] / augmented[row][row], 10)] for row in range(size) - ] - - -def interpolate(y_list: list[int]) -> Callable[[int], int]: - """ - Given a list of data points (1,y0),(2,y1), ..., return a function that - interpolates the data points. We find the coefficients of the interpolating - polynomial by solving a system of linear equations corresponding to - x = 1, 2, 3... - - >>> interpolate([1])(3) - 1 - >>> interpolate([1, 8])(3) - 15 - >>> interpolate([1, 8, 27])(4) - 58 - >>> interpolate([1, 8, 27, 64])(6) - 216 - """ - - size: int = len(y_list) - matrix: Matrix = [[0 for _ in range(size)] for _ in range(size)] - vector: Matrix = [[0] for _ in range(size)] - coeffs: Matrix - x_val: int - y_val: int - col: int - - for x_val, y_val in enumerate(y_list): - for col in range(size): - matrix[x_val][col] = (x_val + 1) ** (size - col - 1) - vector[x_val][0] = y_val - - coeffs = solve(matrix, vector) - - def interpolated_func(var: int) -> int: - """ - >>> interpolate([1])(3) - 1 - >>> interpolate([1, 8])(3) - 15 - >>> interpolate([1, 8, 27])(4) - 58 - >>> interpolate([1, 8, 27, 64])(6) - 216 - """ - return sum( - round(coeffs[x_val][0]) * (var ** (size - x_val - 1)) - for x_val in range(size) - ) - - return interpolated_func - - -def question_function(variable: int) -> int: - """ - The generating function u as specified in the question. - >>> question_function(0) - 1 - >>> question_function(1) - 1 - >>> question_function(5) - 8138021 - >>> question_function(10) - 9090909091 - """ - return ( - 1 - - variable - + variable**2 - - variable**3 - + variable**4 - - variable**5 - + variable**6 - - variable**7 - + variable**8 - - variable**9 - + variable**10 - ) - - -def solution(func: Callable[[int], int] = question_function, order: int = 10) -> int: - """ - Find the sum of the FITs of the BOPS. For each interpolating polynomial of order - 1, 2, ... , 10, find the first x such that the value of the polynomial at x does - not equal u(x). - >>> solution(lambda n: n ** 3, 3) - 74 - """ - data_points: list[int] = [func(x_val) for x_val in range(1, order + 1)] - - polynomials: list[Callable[[int], int]] = [ - interpolate(data_points[:max_coeff]) for max_coeff in range(1, order + 1) - ] - - ret: int = 0 - poly: Callable[[int], int] - x_val: int - - for poly in polynomials: - x_val = 1 - while func(x_val) == poly(x_val): - x_val += 1 - - ret += poly(x_val) - - return ret - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_102/__init__.py b/project_euler/problem_102/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_102/p102_triangles.txt b/project_euler/problem_102/p102_triangles.txt deleted file mode 100644 index 3f01a1ac1f41..000000000000 --- a/project_euler/problem_102/p102_triangles.txt +++ /dev/null @@ -1,1000 +0,0 @@ --340,495,-153,-910,835,-947 --175,41,-421,-714,574,-645 --547,712,-352,579,951,-786 -419,-864,-83,650,-399,171 --429,-89,-357,-930,296,-29 --734,-702,823,-745,-684,-62 --971,762,925,-776,-663,-157 -162,570,628,485,-807,-896 -641,91,-65,700,887,759 -215,-496,46,-931,422,-30 --119,359,668,-609,-358,-494 -440,929,968,214,760,-857 --700,785,838,29,-216,411 --770,-458,-325,-53,-505,633 --752,-805,349,776,-799,687 -323,5,561,-36,919,-560 --907,358,264,320,204,274 --728,-466,350,969,292,-345 -940,836,272,-533,748,185 -411,998,813,520,316,-949 --152,326,658,-762,148,-651 -330,507,-9,-628,101,174 -551,-496,772,-541,-702,-45 --164,-489,-90,322,631,-59 -673,366,-4,-143,-606,-704 -428,-609,801,-449,740,-269 -453,-924,-785,-346,-853,111 --738,555,-181,467,-426,-20 -958,-692,784,-343,505,-569 -620,27,263,54,-439,-726 -804,87,998,859,871,-78 --119,-453,-709,-292,-115,-56 --626,138,-940,-476,-177,-274 --11,160,142,588,446,158 -538,727,550,787,330,810 -420,-689,854,-546,337,516 -872,-998,-607,748,473,-192 -653,440,-516,-985,808,-857 -374,-158,331,-940,-338,-641 -137,-925,-179,771,734,-715 --314,198,-115,29,-641,-39 -759,-574,-385,355,590,-603 --189,-63,-168,204,289,305 --182,-524,-715,-621,911,-255 -331,-816,-833,471,168,126 --514,581,-855,-220,-731,-507 -129,169,576,651,-87,-458 -783,-444,-881,658,-266,298 -603,-430,-598,585,368,899 -43,-724,962,-376,851,409 --610,-646,-883,-261,-482,-881 --117,-237,978,641,101,-747 -579,125,-715,-712,208,534 -672,-214,-762,372,874,533 --564,965,38,715,367,242 -500,951,-700,-981,-61,-178 --382,-224,-959,903,-282,-60 --355,295,426,-331,-591,655 -892,128,958,-271,-993,274 --454,-619,302,138,-790,-874 --642,601,-574,159,-290,-318 -266,-109,257,-686,54,975 -162,628,-478,840,264,-266 -466,-280,982,1,904,-810 -721,839,730,-807,777,981 --129,-430,748,263,943,96 -434,-94,410,-990,249,-704 -237,42,122,-732,44,-51 -909,-116,-229,545,292,717 -824,-768,-807,-370,-262,30 -675,58,332,-890,-651,791 -363,825,-717,254,684,240 -405,-715,900,166,-589,422 --476,686,-830,-319,634,-807 -633,837,-971,917,-764,207 --116,-44,-193,-70,908,809 --26,-252,998,408,70,-713 --601,645,-462,842,-644,-591 --160,653,274,113,-138,687 -369,-273,-181,925,-167,-693 --338,135,480,-967,-13,-840 --90,-270,-564,695,161,907 -607,-430,869,-713,461,-469 -919,-165,-776,522,606,-708 --203,465,288,207,-339,-458 --453,-534,-715,975,838,-677 --973,310,-350,934,546,-805 --835,385,708,-337,-594,-772 --14,914,900,-495,-627,594 -833,-713,-213,578,-296,699 --27,-748,484,455,915,291 -270,889,739,-57,442,-516 -119,811,-679,905,184,130 --678,-469,925,553,612,482 -101,-571,-732,-842,644,588 --71,-737,566,616,957,-663 --634,-356,90,-207,936,622 -598,443,964,-895,-58,529 -847,-467,929,-742,91,10 --633,829,-780,-408,222,-30 --818,57,275,-38,-746,198 --722,-825,-549,597,-391,99 --570,908,430,873,-103,-360 -342,-681,512,434,542,-528 -297,850,479,609,543,-357 -9,784,212,548,56,859 --152,560,-240,-969,-18,713 -140,-133,34,-635,250,-163 --272,-22,-169,-662,989,-604 -471,-765,355,633,-742,-118 --118,146,942,663,547,-376 -583,16,162,264,715,-33 --230,-446,997,-838,561,555 -372,397,-729,-318,-276,649 -92,982,-970,-390,-922,922 --981,713,-951,-337,-669,670 --999,846,-831,-504,7,-128 -455,-954,-370,682,-510,45 -822,-960,-892,-385,-662,314 --668,-686,-367,-246,530,-341 --723,-720,-926,-836,-142,757 --509,-134,384,-221,-873,-639 --803,-52,-706,-669,373,-339 -933,578,631,-616,770,555 -741,-564,-33,-605,-576,275 --715,445,-233,-730,734,-704 -120,-10,-266,-685,-490,-17 --232,-326,-457,-946,-457,-116 -811,52,639,826,-200,147 --329,279,293,612,943,955 --721,-894,-393,-969,-642,453 --688,-826,-352,-75,371,79 --809,-979,407,497,858,-248 --485,-232,-242,-582,-81,849 -141,-106,123,-152,806,-596 --428,57,-992,811,-192,478 -864,393,122,858,255,-876 --284,-780,240,457,354,-107 -956,605,-477,44,26,-678 -86,710,-533,-815,439,327 --906,-626,-834,763,426,-48 -201,-150,-904,652,475,412 --247,149,81,-199,-531,-148 -923,-76,-353,175,-121,-223 -427,-674,453,472,-410,585 -931,776,-33,85,-962,-865 --655,-908,-902,208,869,792 --316,-102,-45,-436,-222,885 --309,768,-574,653,745,-975 -896,27,-226,993,332,198 -323,655,-89,260,240,-902 -501,-763,-424,793,813,616 -993,375,-938,-621,672,-70 --880,-466,-283,770,-824,143 -63,-283,886,-142,879,-116 --964,-50,-521,-42,-306,-161 -724,-22,866,-871,933,-383 --344,135,282,966,-80,917 --281,-189,420,810,362,-582 --515,455,-588,814,162,332 -555,-436,-123,-210,869,-943 -589,577,232,286,-554,876 --773,127,-58,-171,-452,125 --428,575,906,-232,-10,-224 -437,276,-335,-348,605,878 --964,511,-386,-407,168,-220 -307,513,912,-463,-423,-416 --445,539,273,886,-18,760 --396,-585,-670,414,47,364 -143,-506,754,906,-971,-203 --544,472,-180,-541,869,-465 --779,-15,-396,890,972,-220 --430,-564,503,182,-119,456 -89,-10,-739,399,506,499 -954,162,-810,-973,127,870 -890,952,-225,158,828,237 --868,952,349,465,574,750 --915,369,-975,-596,-395,-134 --135,-601,575,582,-667,640 -413,890,-560,-276,-555,-562 --633,-269,561,-820,-624,499 -371,-92,-784,-593,864,-717 --971,655,-439,367,754,-951 -172,-347,36,279,-247,-402 -633,-301,364,-349,-683,-387 --780,-211,-713,-948,-648,543 -72,58,762,-465,-66,462 -78,502,781,-832,713,836 --431,-64,-484,-392,208,-343 --64,101,-29,-860,-329,844 -398,391,828,-858,700,395 -578,-896,-326,-604,314,180 -97,-321,-695,185,-357,852 -854,839,283,-375,951,-209 -194,96,-564,-847,162,524 --354,532,494,621,580,560 -419,-678,-450,926,-5,-924 --661,905,519,621,-143,394 --573,268,296,-562,-291,-319 --211,266,-196,158,564,-183 -18,-585,-398,777,-581,864 -790,-894,-745,-604,-418,70 -848,-339,150,773,11,851 --954,-809,-53,-20,-648,-304 -658,-336,-658,-905,853,407 --365,-844,350,-625,852,-358 -986,-315,-230,-159,21,180 --15,599,45,-286,-941,847 --613,-68,184,639,-987,550 -334,675,-56,-861,923,340 --848,-596,960,231,-28,-34 -707,-811,-994,-356,-167,-171 --470,-764,72,576,-600,-204 -379,189,-542,-576,585,800 -440,540,-445,-563,379,-334 --155,64,514,-288,853,106 --304,751,481,-520,-708,-694 --709,132,594,126,-844,63 -723,471,421,-138,-962,892 --440,-263,39,513,-672,-954 -775,809,-581,330,752,-107 --376,-158,335,-708,-514,578 --343,-769,456,-187,25,413 -548,-877,-172,300,-500,928 -938,-102,423,-488,-378,-969 --36,564,-55,131,958,-800 --322,511,-413,503,700,-847 --966,547,-88,-17,-359,-67 -637,-341,-437,-181,527,-153 --74,449,-28,3,485,189 --997,658,-224,-948,702,-807 --224,736,-896,127,-945,-850 --395,-106,439,-553,-128,124 --841,-445,-758,-572,-489,212 -633,-327,13,-512,952,771 --940,-171,-6,-46,-923,-425 --142,-442,-817,-998,843,-695 -340,847,-137,-920,-988,-658 --653,217,-679,-257,651,-719 --294,365,-41,342,74,-892 -690,-236,-541,494,408,-516 -180,-807,225,790,494,59 -707,605,-246,656,284,271 -65,294,152,824,442,-442 --321,781,-540,341,316,415 -420,371,-2,545,995,248 -56,-191,-604,971,615,449 --981,-31,510,592,-390,-362 --317,-968,913,365,97,508 -832,63,-864,-510,86,202 --483,456,-636,340,-310,676 -981,-847,751,-508,-962,-31 --157,99,73,797,63,-172 -220,858,872,924,866,-381 -996,-169,805,321,-164,971 -896,11,-625,-973,-782,76 -578,-280,730,-729,307,-905 --580,-749,719,-698,967,603 --821,874,-103,-623,662,-491 --763,117,661,-644,672,-607 -592,787,-798,-169,-298,690 -296,644,-526,-762,-447,665 -534,-818,852,-120,57,-379 --986,-549,-329,294,954,258 --133,352,-660,-77,904,-356 -748,343,215,500,317,-277 -311,7,910,-896,-809,795 -763,-602,-753,313,-352,917 -668,619,-474,-597,-650,650 --297,563,-701,-987,486,-902 --461,-740,-657,233,-482,-328 --446,-250,-986,-458,-629,520 -542,-49,-327,-469,257,-947 -121,-575,-634,-143,-184,521 -30,504,455,-645,-229,-945 --12,-295,377,764,771,125 --686,-133,225,-25,-376,-143 --6,-46,338,270,-405,-872 --623,-37,582,467,963,898 --804,869,-477,420,-475,-303 -94,41,-842,-193,-768,720 --656,-918,415,645,-357,460 --47,-486,-911,468,-608,-686 --158,251,419,-394,-655,-895 -272,-695,979,508,-358,959 --776,650,-918,-467,-690,-534 --85,-309,-626,167,-366,-429 --880,-732,-186,-924,970,-875 -517,645,-274,962,-804,544 -721,402,104,640,478,-499 -198,684,-134,-723,-452,-905 --245,745,239,238,-826,441 --217,206,-32,462,-981,-895 --51,989,526,-173,560,-676 --480,-659,-976,-580,-727,466 --996,-90,-995,158,-239,642 -302,288,-194,-294,17,924 --943,969,-326,114,-500,103 --619,163,339,-880,230,421 --344,-601,-795,557,565,-779 -590,345,-129,-202,-125,-58 --777,-195,159,674,775,411 --939,312,-665,810,121,855 --971,254,712,815,452,581 -442,-9,327,-750,61,757 --342,869,869,-160,390,-772 -620,601,565,-169,-69,-183 --25,924,-817,964,321,-970 --64,-6,-133,978,825,-379 -601,436,-24,98,-115,940 --97,502,614,-574,922,513 --125,262,-946,695,99,-220 -429,-721,719,-694,197,-558 -326,689,-70,-908,-673,338 --468,-856,-902,-254,-358,305 --358,530,542,355,-253,-47 --438,-74,-362,963,988,788 -137,717,467,622,319,-380 --86,310,-336,851,918,-288 -721,395,646,-53,255,-425 -255,175,912,84,-209,878 --632,-485,-400,-357,991,-608 -235,-559,992,-297,857,-591 -87,-71,148,130,647,578 --290,-584,-639,-788,-21,592 -386,984,625,-731,-993,-336 --538,634,-209,-828,-150,-774 --754,-387,607,-781,976,-199 -412,-798,-664,295,709,-537 --412,932,-880,-232,561,852 --656,-358,-198,-964,-433,-848 --762,-668,-632,186,-673,-11 --876,237,-282,-312,-83,682 -403,73,-57,-436,-622,781 --587,873,798,976,-39,329 --369,-622,553,-341,817,794 --108,-616,920,-849,-679,96 -290,-974,234,239,-284,-321 --22,394,-417,-419,264,58 --473,-551,69,923,591,-228 --956,662,-113,851,-581,-794 --258,-681,413,-471,-637,-817 --866,926,992,-653,-7,794 -556,-350,602,917,831,-610 -188,245,-906,361,492,174 --720,384,-818,329,638,-666 --246,846,890,-325,-59,-850 --118,-509,620,-762,-256,15 --787,-536,-452,-338,-399,813 -458,560,525,-311,-608,-419 -494,-811,-825,-127,-812,894 --801,890,-629,-860,574,925 --709,-193,-213,138,-410,-403 -861,91,708,-187,5,-222 -789,646,777,154,90,-49 --267,-830,-114,531,591,-698 --126,-82,881,-418,82,652 --894,130,-726,-935,393,-815 --142,563,654,638,-712,-597 --759,60,-23,977,100,-765 --305,595,-570,-809,482,762 --161,-267,53,963,998,-529 --300,-57,798,353,703,486 --990,696,-764,699,-565,719 --232,-205,566,571,977,369 -740,865,151,-817,-204,-293 -94,445,-768,229,537,-406 -861,620,37,-424,-36,656 -390,-369,952,733,-464,569 --482,-604,959,554,-705,-626 --396,-615,-991,108,272,-723 -143,780,535,142,-917,-147 -138,-629,-217,-908,905,115 -915,103,-852,64,-468,-642 -570,734,-785,-268,-326,-759 -738,531,-332,586,-779,24 -870,440,-217,473,-383,415 --296,-333,-330,-142,-924,950 -118,120,-35,-245,-211,-652 -61,634,153,-243,838,789 -726,-582,210,105,983,537 --313,-323,758,234,29,848 --847,-172,-593,733,-56,617 -54,255,-512,156,-575,675 --873,-956,-148,623,95,200 -700,-370,926,649,-978,157 --639,-202,719,130,747,222 -194,-33,955,943,505,114 --226,-790,28,-930,827,783 --392,-74,-28,714,218,-612 -209,626,-888,-683,-912,495 -487,751,614,933,631,445 --348,-34,-411,-106,835,321 --689,872,-29,-800,312,-542 --52,566,827,570,-862,-77 -471,992,309,-402,389,912 -24,520,-83,-51,555,503 --265,-317,283,-970,-472,690 -606,526,137,71,-651,150 -217,-518,663,66,-605,-331 --562,232,-76,-503,205,-323 -842,-521,546,285,625,-186 -997,-927,344,909,-546,974 --677,419,81,121,-705,771 -719,-379,-944,-797,784,-155 --378,286,-317,-797,-111,964 --288,-573,784,80,-532,-646 --77,407,-248,-797,769,-816 --24,-637,287,-858,-927,-333 --902,37,894,-823,141,684 -125,467,-177,-516,686,399 --321,-542,641,-590,527,-224 --400,-712,-876,-208,632,-543 --676,-429,664,-242,-269,922 --608,-273,-141,930,687,380 -786,-12,498,494,310,326 --739,-617,606,-960,804,188 -384,-368,-243,-350,-459,31 --550,397,320,-868,328,-279 -969,-179,853,864,-110,514 -910,793,302,-822,-285,488 --605,-128,218,-283,-17,-227 -16,324,667,708,750,3 -485,-813,19,585,71,930 --218,816,-687,-97,-732,-360 --497,-151,376,-23,3,315 --412,-989,-610,-813,372,964 --878,-280,87,381,-311,69 --609,-90,-731,-679,150,585 -889,27,-162,605,75,-770 -448,617,-988,0,-103,-504 --800,-537,-69,627,608,-668 -534,686,-664,942,830,920 --238,775,495,932,-793,497 --343,958,-914,-514,-691,651 -568,-136,208,359,728,28 -286,912,-794,683,556,-102 --638,-629,-484,445,-64,-497 -58,505,-801,-110,872,632 --390,777,353,267,976,369 --993,515,105,-133,358,-572 -964,996,355,-212,-667,38 --725,-614,-35,365,132,-196 -237,-536,-416,-302,312,477 --664,574,-210,224,48,-925 -869,-261,-256,-240,-3,-698 -712,385,32,-34,916,-315 -895,-409,-100,-346,728,-624 --806,327,-450,889,-781,-939 --586,-403,698,318,-939,899 -557,-57,-920,659,333,-51 --441,232,-918,-205,246,1 -783,167,-797,-595,245,-736 --36,-531,-486,-426,-813,-160 -777,-843,817,313,-228,-572 -735,866,-309,-564,-81,190 --413,645,101,719,-719,218 --83,164,767,796,-430,-459 -122,779,-15,-295,-96,-892 -462,379,70,548,834,-312 --630,-534,124,187,-737,114 --299,-604,318,-591,936,826 --879,218,-642,-483,-318,-866 --691,62,-658,761,-895,-854 --822,493,687,569,910,-202 --223,784,304,-5,541,925 --914,541,737,-662,-662,-195 --622,615,414,358,881,-878 -339,745,-268,-968,-280,-227 --364,855,148,-709,-827,472 --890,-532,-41,664,-612,577 --702,-859,971,-722,-660,-920 --539,-605,737,149,973,-802 -800,42,-448,-811,152,511 --933,377,-110,-105,-374,-937 --766,152,482,120,-308,390 --568,775,-292,899,732,890 --177,-317,-502,-259,328,-511 -612,-696,-574,-660,132,31 --119,563,-805,-864,179,-672 -425,-627,183,-331,839,318 --711,-976,-749,152,-916,261 -181,-63,497,211,262,406 --537,700,-859,-765,-928,77 -892,832,231,-749,-82,613 -816,216,-642,-216,-669,-912 --6,624,-937,-370,-344,268 -737,-710,-869,983,-324,-274 -565,952,-547,-158,374,-444 -51,-683,645,-845,515,636 --953,-631,114,-377,-764,-144 --8,470,-242,-399,-675,-730 --540,689,-20,47,-607,590 --329,-710,-779,942,-388,979 -123,829,674,122,203,563 -46,782,396,-33,386,610 -872,-846,-523,-122,-55,-190 -388,-994,-525,974,127,596 -781,-680,796,-34,-959,-62 --749,173,200,-384,-745,-446 -379,618,136,-250,-224,970 --58,240,-921,-760,-901,-626 -366,-185,565,-100,515,688 -489,999,-893,-263,-637,816 -838,-496,-316,-513,419,479 -107,676,-15,882,98,-397 --999,941,-903,-424,670,-325 -171,-979,835,178,169,-984 --609,-607,378,-681,184,402 --316,903,-575,-800,224,983 -591,-18,-460,551,-167,918 --756,405,-117,441,163,-320 -456,24,6,881,-836,-539 --489,-585,915,651,-892,-382 --177,-122,73,-711,-386,591 -181,724,530,686,-131,241 -737,288,886,216,233,33 --548,-386,-749,-153,-85,-982 --835,227,904,160,-99,25 --9,-42,-162,728,840,-963 -217,-763,870,771,47,-846 --595,808,-491,556,337,-900 --134,281,-724,441,-134,708 --789,-508,651,-962,661,315 --839,-923,339,402,41,-487 -300,-790,48,703,-398,-811 -955,-51,462,-685,960,-717 -910,-880,592,-255,-51,-776 --885,169,-793,368,-565,458 --905,940,-492,-630,-535,-988 -245,797,763,869,-82,550 --310,38,-933,-367,-650,824 --95,32,-83,337,226,990 --218,-975,-191,-208,-785,-293 --672,-953,517,-901,-247,465 -681,-148,261,-857,544,-923 -640,341,446,-618,195,769 -384,398,-846,365,671,815 -578,576,-911,907,762,-859 -548,-428,144,-630,-759,-146 -710,-73,-700,983,-97,-889 --46,898,-973,-362,-817,-717 -151,-81,-125,-900,-478,-154 -483,615,-537,-932,181,-68 -786,-223,518,25,-306,-12 --422,268,-809,-683,635,468 -983,-734,-694,-608,-110,4 --786,-196,749,-354,137,-8 --181,36,668,-200,691,-973 --629,-838,692,-736,437,-871 --208,-536,-159,-596,8,197 --3,370,-686,170,913,-376 -44,-998,-149,-993,-200,512 --519,136,859,497,536,434 -77,-985,972,-340,-705,-837 --381,947,250,360,344,322 --26,131,699,750,707,384 --914,655,299,193,406,955 --883,-921,220,595,-546,794 --599,577,-569,-404,-704,489 --594,-963,-624,-460,880,-760 --603,88,-99,681,55,-328 -976,472,139,-453,-531,-860 -192,-290,513,-89,666,432 -417,487,575,293,567,-668 -655,711,-162,449,-980,972 --505,664,-685,-239,603,-592 --625,-802,-67,996,384,-636 -365,-593,522,-666,-200,-431 --868,708,560,-860,-630,-355 --702,785,-637,-611,-597,960 --137,-696,-93,-803,408,406 -891,-123,-26,-609,-610,518 -133,-832,-198,555,708,-110 -791,617,-69,487,696,315 --900,694,-565,517,-269,-416 -914,135,-781,600,-71,-600 -991,-915,-422,-351,-837,313 --840,-398,-302,21,590,146 -62,-558,-702,-384,-625,831 --363,-426,-924,-496,792,-908 -73,361,-817,-466,400,922 --626,-164,-626,860,-524,286 -255,26,-944,809,-606,986 --457,-256,-103,50,-867,-871 --223,803,196,480,612,136 --820,-928,700,780,-977,721 -717,332,53,-933,-128,793 --602,-648,562,593,890,702 --469,-875,-527,911,-475,-222 -110,-281,-552,-536,-816,596 --981,654,413,-981,-75,-95 --754,-742,-515,894,-220,-344 -795,-52,156,408,-603,76 -474,-157,423,-499,-807,-791 -260,688,40,-52,702,-122 --584,-517,-390,-881,302,-504 -61,797,665,708,14,668 -366,166,458,-614,564,-983 -72,539,-378,796,381,-824 --485,201,-588,842,736,379 --149,-894,-298,705,-303,-406 -660,-935,-580,521,93,633 --382,-282,-375,-841,-828,171 --567,743,-100,43,144,122 --281,-786,-749,-551,296,304 -11,-426,-792,212,857,-175 -594,143,-699,289,315,137 -341,596,-390,107,-631,-804 --751,-636,-424,-854,193,651 --145,384,749,675,-786,517 -224,-865,-323,96,-916,258 --309,403,-388,826,35,-270 --942,709,222,158,-699,-103 --589,842,-997,29,-195,-210 -264,426,566,145,-217,623 -217,965,507,-601,-453,507 --206,307,-982,4,64,-292 -676,-49,-38,-701,550,883 -5,-850,-438,659,745,-773 -933,238,-574,-570,91,-33 --866,121,-928,358,459,-843 --568,-631,-352,-580,-349,189 --737,849,-963,-486,-662,970 -135,334,-967,-71,-365,-792 -789,21,-227,51,990,-275 -240,412,-886,230,591,256 --609,472,-853,-754,959,661 -401,521,521,314,929,982 --499,784,-208,71,-302,296 --557,-948,-553,-526,-864,793 -270,-626,828,44,37,14 --412,224,617,-593,502,699 -41,-908,81,562,-849,163 -165,917,761,-197,331,-341 --687,314,799,755,-969,648 --164,25,578,439,-334,-576 -213,535,874,-177,-551,24 --689,291,-795,-225,-496,-125 -465,461,558,-118,-568,-909 -567,660,-810,46,-485,878 --147,606,685,-690,-774,984 -568,-886,-43,854,-738,616 --800,386,-614,585,764,-226 --518,23,-225,-732,-79,440 --173,-291,-689,636,642,-447 --598,-16,227,410,496,211 --474,-930,-656,-321,-420,36 --435,165,-819,555,540,144 --969,149,828,568,394,648 -65,-848,257,720,-625,-851 -981,899,275,635,465,-877 -80,290,792,760,-191,-321 --605,-858,594,33,706,593 -585,-472,318,-35,354,-927 --365,664,803,581,-965,-814 --427,-238,-480,146,-55,-606 -879,-193,250,-890,336,117 --226,-322,-286,-765,-836,-218 --913,564,-667,-698,937,283 -872,-901,810,-623,-52,-709 -473,171,717,38,-429,-644 -225,824,-219,-475,-180,234 --530,-797,-948,238,851,-623 -85,975,-363,529,598,28 --799,166,-804,210,-769,851 --687,-158,885,736,-381,-461 -447,592,928,-514,-515,-661 --399,-777,-493,80,-544,-78 --884,631,171,-825,-333,551 -191,268,-577,676,137,-33 -212,-853,709,798,583,-56 --908,-172,-540,-84,-135,-56 -303,311,406,-360,-240,811 -798,-708,824,59,234,-57 -491,693,-74,585,-85,877 -509,-65,-936,329,-51,722 --122,858,-52,467,-77,-609 -850,760,547,-495,-953,-952 --460,-541,890,910,286,724 --914,843,-579,-983,-387,-460 -989,-171,-877,-326,-899,458 -846,175,-915,540,-1000,-982 --852,-920,-306,496,530,-18 -338,-991,160,85,-455,-661 --186,-311,-460,-563,-231,-414 --932,-302,959,597,793,748 --366,-402,-788,-279,514,53 --940,-956,447,-956,211,-285 -564,806,-911,-914,934,754 -575,-858,-277,15,409,-714 -848,462,100,-381,135,242 -330,718,-24,-190,860,-78 -479,458,941,108,-866,-653 -212,980,962,-962,115,841 --827,-474,-206,881,323,765 -506,-45,-30,-293,524,-133 -832,-173,547,-852,-561,-842 --397,-661,-708,819,-545,-228 -521,51,-489,852,36,-258 -227,-164,189,465,-987,-882 --73,-997,641,-995,449,-615 -151,-995,-638,415,257,-400 --663,-297,-748,537,-734,198 --585,-401,-81,-782,-80,-105 -99,-21,238,-365,-704,-368 -45,416,849,-211,-371,-1 --404,-443,795,-406,36,-933 -272,-363,981,-491,-380,77 -713,-342,-366,-849,643,911 --748,671,-537,813,961,-200 --194,-909,703,-662,-601,188 -281,500,724,286,267,197 --832,847,-595,820,-316,637 -520,521,-54,261,923,-10 -4,-808,-682,-258,441,-695 --793,-107,-969,905,798,446 --108,-739,-590,69,-855,-365 -380,-623,-930,817,468,713 -759,-849,-236,433,-723,-931 -95,-320,-686,124,-69,-329 --655,518,-210,-523,284,-866 -144,303,639,70,-171,269 -173,-333,947,-304,55,40 -274,878,-482,-888,-835,375 --982,-854,-36,-218,-114,-230 -905,-979,488,-485,-479,114 -877,-157,553,-530,-47,-321 -350,664,-881,442,-220,-284 -434,-423,-365,878,-726,584 -535,909,-517,-447,-660,-141 --966,191,50,353,182,-642 --785,-634,123,-907,-162,511 -146,-850,-214,814,-704,25 -692,1,521,492,-637,274 --662,-372,-313,597,983,-647 --962,-526,68,-549,-819,231 -740,-890,-318,797,-666,948 --190,-12,-468,-455,948,284 -16,478,-506,-888,628,-154 -272,630,-976,308,433,3 --169,-391,-132,189,302,-388 -109,-784,474,-167,-265,-31 --177,-532,283,464,421,-73 -650,635,592,-138,1,-387 --932,703,-827,-492,-355,686 -586,-311,340,-618,645,-434 --951,736,647,-127,-303,590 -188,444,903,718,-931,500 --872,-642,-296,-571,337,241 -23,65,152,125,880,470 -512,823,-42,217,823,-263 -180,-831,-380,886,607,762 -722,443,-149,-216,-115,759 --19,660,-36,901,923,231 -562,-322,-626,-968,194,-825 -204,-920,938,784,362,150 --410,-266,-715,559,-672,124 --198,446,-140,454,-461,-447 -83,-346,830,-493,-759,-382 --881,601,581,234,-134,-925 --494,914,-42,899,235,629 --390,50,956,437,774,-700 --514,514,44,-512,-576,-313 -63,-688,808,-534,-570,-399 --726,572,-896,102,-294,-28 --688,757,401,406,955,-511 --283,423,-485,480,-767,908 --541,952,-594,116,-854,451 --273,-796,236,625,-626,257 --407,-493,373,826,-309,297 --750,955,-476,641,-809,713 -8,415,695,226,-111,2 -733,209,152,-920,401,995 -921,-103,-919,66,871,-947 --907,89,-869,-214,851,-559 --307,748,524,-755,314,-711 -188,897,-72,-763,482,103 -545,-821,-232,-596,-334,-754 --217,-788,-820,388,-200,-662 -779,160,-723,-975,-142,-998 --978,-519,-78,-981,842,904 --504,-736,-295,21,-472,-482 -391,115,-705,574,652,-446 -813,-988,865,830,-263,487 -194,80,774,-493,-761,-872 --415,-284,-803,7,-810,670 --484,-4,881,-872,55,-852 --379,822,-266,324,-48,748 --304,-278,406,-60,959,-89 -404,756,577,-643,-332,658 -291,460,125,491,-312,83 -311,-734,-141,582,282,-557 --450,-661,-981,710,-177,794 -328,264,-787,971,-743,-407 --622,518,993,-241,-738,229 -273,-826,-254,-917,-710,-111 -809,770,96,368,-818,725 --488,773,502,-342,534,745 --28,-414,236,-315,-484,363 -179,-466,-566,713,-683,56 -560,-240,-597,619,916,-940 -893,473,872,-868,-642,-461 -799,489,383,-321,-776,-833 -980,490,-508,764,-512,-426 -917,961,-16,-675,440,559 --812,212,784,-987,-132,554 --886,454,747,806,190,231 -910,341,21,-66,708,725 -29,929,-831,-494,-303,389 --103,492,-271,-174,-515,529 --292,119,419,788,247,-951 -483,543,-347,-673,664,-549 --926,-871,-437,337,162,-877 -299,472,-771,5,-88,-643 --103,525,-725,-998,264,22 --505,708,550,-545,823,347 --738,931,59,147,-156,-259 -456,968,-162,889,132,-911 -535,120,968,-517,-864,-541 -24,-395,-593,-766,-565,-332 -834,611,825,-576,280,629 -211,-548,140,-278,-592,929 --999,-240,-63,-78,793,573 --573,160,450,987,529,322 -63,353,315,-187,-461,577 -189,-950,-247,656,289,241 -209,-297,397,664,-805,484 --655,452,435,-556,917,874 -253,-756,262,-888,-778,-214 -793,-451,323,-251,-401,-458 --396,619,-651,-287,-668,-781 -698,720,-349,742,-807,546 -738,280,680,279,-540,858 --789,387,530,-36,-551,-491 -162,579,-427,-272,228,710 -689,356,917,-580,729,217 --115,-638,866,424,-82,-194 -411,-338,-917,172,227,-29 --612,63,630,-976,-64,-204 --200,911,583,-571,682,-579 -91,298,396,-183,788,-955 -141,-873,-277,149,-396,916 -321,958,-136,573,541,-777 -797,-909,-469,-877,988,-653 -784,-198,129,883,-203,399 --68,-810,223,-423,-467,-512 -531,-445,-603,-997,-841,641 --274,-242,174,261,-636,-158 --574,494,-796,-798,-798,99 -95,-82,-613,-954,-753,986 --883,-448,-864,-401,938,-392 -913,930,-542,-988,310,410 -506,-99,43,512,790,-222 -724,31,49,-950,260,-134 --287,-947,-234,-700,56,588 --33,782,-144,948,105,-791 -548,-546,-652,-293,881,-520 -691,-91,76,991,-631,742 --520,-429,-244,-296,724,-48 -778,646,377,50,-188,56 --895,-507,-898,-165,-674,652 -654,584,-634,177,-349,-620 -114,-980,355,62,182,975 -516,9,-442,-298,274,-579 --238,262,-431,-896,506,-850 -47,748,846,821,-537,-293 -839,726,593,285,-297,840 -634,-486,468,-304,-887,-567 --864,914,296,-124,335,233 -88,-253,-523,-956,-554,803 --587,417,281,-62,-409,-363 --136,-39,-292,-768,-264,876 --127,506,-891,-331,-744,-430 -778,584,-750,-129,-479,-94 --876,-771,-987,-757,180,-641 --777,-694,411,-87,329,190 --347,-999,-882,158,-754,232 --105,918,188,237,-110,-591 --209,703,-838,77,838,909 --995,-339,-762,750,860,472 -185,271,-289,173,811,-300 -2,65,-656,-22,36,-139 -765,-210,883,974,961,-905 --212,295,-615,-840,77,474 -211,-910,-440,703,-11,859 --559,-4,-196,841,-277,969 --73,-159,-887,126,978,-371 --569,633,-423,-33,512,-393 -503,143,-383,-109,-649,-998 --663,339,-317,-523,-2,596 -690,-380,570,378,-652,132 -72,-744,-930,399,-525,935 -865,-983,115,37,995,826 -594,-621,-872,443,188,-241 --1000,291,754,234,-435,-869 --868,901,654,-907,59,181 --868,-793,-431,596,-446,-564 -900,-944,-680,-796,902,-366 -331,430,943,853,-851,-942 -315,-538,-354,-909,139,721 -170,-884,-225,-818,-808,-657 --279,-34,-533,-871,-972,552 -691,-986,-800,-950,654,-747 -603,988,899,841,-630,591 -876,-949,809,562,602,-536 --693,363,-189,495,738,-1000 --383,431,-633,297,665,959 --740,686,-207,-803,188,-520 --820,226,31,-339,10,121 --312,-844,624,-516,483,621 --822,-529,69,-278,800,328 -834,-82,-759,420,811,-264 --960,-240,-921,561,173,46 --324,909,-790,-814,-2,-785 -976,334,-290,-891,704,-581 -150,-798,689,-823,237,-639 --551,-320,876,-502,-622,-628 --136,845,904,595,-702,-261 --857,-377,-522,-101,-943,-805 --682,-787,-888,-459,-752,-985 --571,-81,623,-133,447,643 --375,-158,72,-387,-324,-696 --660,-650,340,188,569,526 -727,-218,16,-7,-595,-988 --966,-684,802,-783,-272,-194 -115,-566,-888,47,712,180 --237,-69,45,-272,981,-812 -48,897,439,417,50,325 -348,616,180,254,104,-784 --730,811,-548,612,-736,790 -138,-810,123,930,65,865 --768,-299,-49,-895,-692,-418 -487,-531,802,-159,-12,634 -808,-179,552,-73,470,717 -720,-644,886,-141,625,144 --485,-505,-347,-244,-916,66 -600,-565,995,-5,324,227 --771,-35,904,-482,753,-303 --701,65,426,-763,-504,-479 -409,733,-823,475,64,718 -865,975,368,893,-413,-433 -812,-597,-970,819,813,624 -193,-642,-381,-560,545,398 -711,28,-316,771,717,-865 --509,462,809,-136,786,635 -618,-49,484,169,635,547 --747,685,-882,-496,-332,82 --501,-851,870,563,290,570 --279,-829,-509,397,457,816 --508,80,850,-188,483,-326 -860,-100,360,119,-205,787 --870,21,-39,-827,-185,932 -826,284,-136,-866,-330,-97 --944,-82,745,899,-97,365 -929,262,564,632,-115,632 -244,-276,713,330,-897,-214 --890,-109,664,876,-974,-907 -716,249,816,489,723,141 --96,-560,-272,45,-70,645 -762,-503,414,-828,-254,-646 -909,-13,903,-422,-344,-10 -658,-486,743,545,50,674 --241,507,-367,18,-48,-241 -886,-268,884,-762,120,-486 --412,-528,879,-647,223,-393 -851,810,234,937,-726,797 --999,942,839,-134,-996,-189 -100,979,-527,-521,378,800 -544,-844,-832,-530,-77,-641 -43,889,31,442,-934,-503 --330,-370,-309,-439,173,547 -169,945,62,-753,-542,-597 -208,751,-372,-647,-520,70 -765,-840,907,-257,379,918 -334,-135,-689,730,-427,618 -137,-508,66,-695,78,169 --962,-123,400,-417,151,969 -328,689,666,427,-555,-642 --907,343,605,-341,-647,582 --667,-363,-571,818,-265,-399 -525,-938,904,898,725,692 --176,-802,-858,-9,780,275 -580,170,-740,287,691,-97 -365,557,-375,361,-288,859 -193,737,842,-808,520,282 --871,65,-799,836,179,-720 -958,-144,744,-789,797,-48 -122,582,662,912,68,757 -595,241,-801,513,388,186 --103,-677,-259,-731,-281,-857 -921,319,-696,683,-88,-997 -775,200,78,858,648,768 -316,821,-763,68,-290,-741 -564,664,691,504,760,787 -694,-119,973,-385,309,-760 -777,-947,-57,990,74,19 -971,626,-496,-781,-602,-239 --651,433,11,-339,939,294 --965,-728,560,569,-708,-247 diff --git a/project_euler/problem_102/sol1.py b/project_euler/problem_102/sol1.py deleted file mode 100644 index 85fe5eac1e22..000000000000 --- a/project_euler/problem_102/sol1.py +++ /dev/null @@ -1,82 +0,0 @@ -""" -Three distinct points are plotted at random on a Cartesian plane, -for which -1000 ≤ x, y ≤ 1000, such that a triangle is formed. - -Consider the following two triangles: - -A(-340,495), B(-153,-910), C(835,-947) - -X(-175,41), Y(-421,-714), Z(574,-645) - -It can be verified that triangle ABC contains the origin, whereas -triangle XYZ does not. - -Using triangles.txt (right click and 'Save Link/Target As...'), a 27K text -file containing the coordinates of one thousand "random" triangles, find -the number of triangles for which the interior contains the origin. - -NOTE: The first two examples in the file represent the triangles in the -example given above. -""" - -from __future__ import annotations - -from pathlib import Path - - -def vector_product(point1: tuple[int, int], point2: tuple[int, int]) -> int: - """ - Return the 2-d vector product of two vectors. - >>> vector_product((1, 2), (-5, 0)) - 10 - >>> vector_product((3, 1), (6, 10)) - 24 - """ - return point1[0] * point2[1] - point1[1] * point2[0] - - -def contains_origin(x1: int, y1: int, x2: int, y2: int, x3: int, y3: int) -> bool: - """ - Check if the triangle given by the points A(x1, y1), B(x2, y2), C(x3, y3) - contains the origin. - >>> contains_origin(-340, 495, -153, -910, 835, -947) - True - >>> contains_origin(-175, 41, -421, -714, 574, -645) - False - """ - point_a: tuple[int, int] = (x1, y1) - point_a_to_b: tuple[int, int] = (x2 - x1, y2 - y1) - point_a_to_c: tuple[int, int] = (x3 - x1, y3 - y1) - a: float = -vector_product(point_a, point_a_to_b) / vector_product( - point_a_to_c, point_a_to_b - ) - b: float = +vector_product(point_a, point_a_to_c) / vector_product( - point_a_to_c, point_a_to_b - ) - - return a > 0 and b > 0 and a + b < 1 - - -def solution(filename: str = "p102_triangles.txt") -> int: - """ - Find the number of triangles whose interior contains the origin. - >>> solution("test_triangles.txt") - 1 - """ - data: str = Path(__file__).parent.joinpath(filename).read_text(encoding="utf-8") - - triangles: list[list[int]] = [] - for line in data.strip().split("\n"): - triangles.append([int(number) for number in line.split(",")]) - - ret: int = 0 - triangle: list[int] - - for triangle in triangles: - ret += contains_origin(*triangle) - - return ret - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_102/test_triangles.txt b/project_euler/problem_102/test_triangles.txt deleted file mode 100644 index 5c10cd651e9b..000000000000 --- a/project_euler/problem_102/test_triangles.txt +++ /dev/null @@ -1,2 +0,0 @@ --340,495,-153,-910,835,-947 --175,41,-421,-714,574,-645 diff --git a/project_euler/problem_104/__init__.py b/project_euler/problem_104/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_104/sol1.py b/project_euler/problem_104/sol1.py deleted file mode 100644 index a0267faa6a38..000000000000 --- a/project_euler/problem_104/sol1.py +++ /dev/null @@ -1,141 +0,0 @@ -""" -Project Euler Problem 104 : https://projecteuler.net/problem=104 - -The Fibonacci sequence is defined by the recurrence relation: - -Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1. -It turns out that F541, which contains 113 digits, is the first Fibonacci number -for which the last nine digits are 1-9 pandigital (contain all the digits 1 to 9, -but not necessarily in order). And F2749, which contains 575 digits, is the first -Fibonacci number for which the first nine digits are 1-9 pandigital. - -Given that Fk is the first Fibonacci number for which the first nine digits AND -the last nine digits are 1-9 pandigital, find k. -""" - -import sys - -sys.set_int_max_str_digits(0) - - -def check(number: int) -> bool: - """ - Takes a number and checks if it is pandigital both from start and end - - - >>> check(123456789987654321) - True - - >>> check(120000987654321) - False - - >>> check(1234567895765677987654321) - True - - """ - - check_last = [0] * 11 - check_front = [0] * 11 - - # mark last 9 numbers - for _ in range(9): - check_last[int(number % 10)] = 1 - number = number // 10 - # flag - f = True - - # check last 9 numbers for pandigitality - - for x in range(9): - if not check_last[x + 1]: - f = False - if not f: - return f - - # mark first 9 numbers - number = int(str(number)[:9]) - - for _ in range(9): - check_front[int(number % 10)] = 1 - number = number // 10 - - # check first 9 numbers for pandigitality - - for x in range(9): - if not check_front[x + 1]: - f = False - return f - - -def check1(number: int) -> bool: - """ - Takes a number and checks if it is pandigital from END - - >>> check1(123456789987654321) - True - - >>> check1(120000987654321) - True - - >>> check1(12345678957656779870004321) - False - - """ - - check_last = [0] * 11 - - # mark last 9 numbers - for _ in range(9): - check_last[int(number % 10)] = 1 - number = number // 10 - # flag - f = True - - # check last 9 numbers for pandigitality - - for x in range(9): - if not check_last[x + 1]: - f = False - return f - - -def solution() -> int: - """ - Outputs the answer is the least Fibonacci number pandigital from both sides. - >>> solution() - 329468 - """ - - a = 1 - b = 1 - c = 2 - # temporary Fibonacci numbers - - a1 = 1 - b1 = 1 - c1 = 2 - # temporary Fibonacci numbers mod 1e9 - - # mod m=1e9, done for fast optimisation - tocheck = [0] * 1000000 - m = 1000000000 - - for x in range(1000000): - c1 = (a1 + b1) % m - a1 = b1 % m - b1 = c1 % m - if check1(b1): - tocheck[x + 3] = 1 - - for x in range(1000000): - c = a + b - a = b - b = c - # perform check only if in tocheck - if tocheck[x + 3] and check(b): - return x + 3 # first 2 already done - return -1 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_107/__init__.py b/project_euler/problem_107/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_107/p107_network.txt b/project_euler/problem_107/p107_network.txt deleted file mode 100644 index fcc3c4192b96..000000000000 --- a/project_euler/problem_107/p107_network.txt +++ /dev/null @@ -1,40 +0,0 @@ --,-,-,427,668,495,377,678,-,177,-,-,870,-,869,624,300,609,131,-,251,-,-,-,856,221,514,-,591,762,182,56,-,884,412,273,636,-,-,774 --,-,262,-,-,508,472,799,-,956,578,363,940,143,-,162,122,910,-,729,802,941,922,573,531,539,667,607,-,920,-,-,315,649,937,-,185,102,636,289 --,262,-,-,926,-,958,158,647,47,621,264,81,-,402,813,649,386,252,391,264,637,349,-,-,-,108,-,727,225,578,699,-,898,294,-,575,168,432,833 -427,-,-,-,366,-,-,635,-,32,962,468,893,854,718,427,448,916,258,-,760,909,529,311,404,-,-,588,680,875,-,615,-,409,758,221,-,-,76,257 -668,-,926,366,-,-,-,250,268,-,503,944,-,677,-,727,793,457,981,191,-,-,-,351,969,925,987,328,282,589,-,873,477,-,-,19,450,-,-,- -495,508,-,-,-,-,-,765,711,819,305,302,926,-,-,582,-,861,-,683,293,-,-,66,-,27,-,-,290,-,786,-,554,817,33,-,54,506,386,381 -377,472,958,-,-,-,-,-,-,120,42,-,134,219,457,639,538,374,-,-,-,966,-,-,-,-,-,449,120,797,358,232,550,-,305,997,662,744,686,239 -678,799,158,635,250,765,-,-,-,35,-,106,385,652,160,-,890,812,605,953,-,-,-,79,-,712,613,312,452,-,978,900,-,901,-,-,225,533,770,722 --,-,647,-,268,711,-,-,-,283,-,172,-,663,236,36,403,286,986,-,-,810,761,574,53,793,-,-,777,330,936,883,286,-,174,-,-,-,828,711 -177,956,47,32,-,819,120,35,283,-,50,-,565,36,767,684,344,489,565,-,-,103,810,463,733,665,494,644,863,25,385,-,342,470,-,-,-,730,582,468 --,578,621,962,503,305,42,-,-,50,-,155,519,-,-,256,990,801,154,53,474,650,402,-,-,-,966,-,-,406,989,772,932,7,-,823,391,-,-,933 --,363,264,468,944,302,-,106,172,-,155,-,-,-,380,438,-,41,266,-,-,104,867,609,-,270,861,-,-,165,-,675,250,686,995,366,191,-,433,- -870,940,81,893,-,926,134,385,-,565,519,-,-,313,851,-,-,-,248,220,-,826,359,829,-,234,198,145,409,68,359,-,814,218,186,-,-,929,203,- --,143,-,854,677,-,219,652,663,36,-,-,313,-,132,-,433,598,-,-,168,870,-,-,-,128,437,-,383,364,966,227,-,-,807,993,-,-,526,17 -869,-,402,718,-,-,457,160,236,767,-,380,851,132,-,-,596,903,613,730,-,261,-,142,379,885,89,-,848,258,112,-,900,-,-,818,639,268,600,- -624,162,813,427,727,582,639,-,36,684,256,438,-,-,-,-,539,379,664,561,542,-,999,585,-,-,321,398,-,-,950,68,193,-,697,-,390,588,848,- -300,122,649,448,793,-,538,890,403,344,990,-,-,433,596,539,-,-,73,-,318,-,-,500,-,968,-,291,-,-,765,196,504,757,-,542,-,395,227,148 -609,910,386,916,457,861,374,812,286,489,801,41,-,598,903,379,-,-,-,946,136,399,-,941,707,156,757,258,251,-,807,-,-,-,461,501,-,-,616,- -131,-,252,258,981,-,-,605,986,565,154,266,248,-,613,664,73,-,-,686,-,-,575,627,817,282,-,698,398,222,-,649,-,-,-,-,-,654,-,- --,729,391,-,191,683,-,953,-,-,53,-,220,-,730,561,-,946,686,-,-,389,729,553,304,703,455,857,260,-,991,182,351,477,867,-,-,889,217,853 -251,802,264,760,-,293,-,-,-,-,474,-,-,168,-,542,318,136,-,-,-,-,392,-,-,-,267,407,27,651,80,927,-,974,977,-,-,457,117,- --,941,637,909,-,-,966,-,810,103,650,104,826,870,261,-,-,399,-,389,-,-,-,202,-,-,-,-,867,140,403,962,785,-,511,-,1,-,707,- --,922,349,529,-,-,-,-,761,810,402,867,359,-,-,999,-,-,575,729,392,-,-,388,939,-,959,-,83,463,361,-,-,512,931,-,224,690,369,- --,573,-,311,351,66,-,79,574,463,-,609,829,-,142,585,500,941,627,553,-,202,388,-,164,829,-,620,523,639,936,-,-,490,-,695,-,505,109,- -856,531,-,404,969,-,-,-,53,733,-,-,-,-,379,-,-,707,817,304,-,-,939,164,-,-,616,716,728,-,889,349,-,963,150,447,-,292,586,264 -221,539,-,-,925,27,-,712,793,665,-,270,234,128,885,-,968,156,282,703,-,-,-,829,-,-,-,822,-,-,-,736,576,-,697,946,443,-,205,194 -514,667,108,-,987,-,-,613,-,494,966,861,198,437,89,321,-,757,-,455,267,-,959,-,616,-,-,-,349,156,339,-,102,790,359,-,439,938,809,260 --,607,-,588,328,-,449,312,-,644,-,-,145,-,-,398,291,258,698,857,407,-,-,620,716,822,-,-,293,486,943,-,779,-,6,880,116,775,-,947 -591,-,727,680,282,290,120,452,777,863,-,-,409,383,848,-,-,251,398,260,27,867,83,523,728,-,349,293,-,212,684,505,341,384,9,992,507,48,-,- -762,920,225,875,589,-,797,-,330,25,406,165,68,364,258,-,-,-,222,-,651,140,463,639,-,-,156,486,212,-,-,349,723,-,-,186,-,36,240,752 -182,-,578,-,-,786,358,978,936,385,989,-,359,966,112,950,765,807,-,991,80,403,361,936,889,-,339,943,684,-,-,965,302,676,725,-,327,134,-,147 -56,-,699,615,873,-,232,900,883,-,772,675,-,227,-,68,196,-,649,182,927,962,-,-,349,736,-,-,505,349,965,-,474,178,833,-,-,555,853,- --,315,-,-,477,554,550,-,286,342,932,250,814,-,900,193,504,-,-,351,-,785,-,-,-,576,102,779,341,723,302,474,-,689,-,-,-,451,-,- -884,649,898,409,-,817,-,901,-,470,7,686,218,-,-,-,757,-,-,477,974,-,512,490,963,-,790,-,384,-,676,178,689,-,245,596,445,-,-,343 -412,937,294,758,-,33,305,-,174,-,-,995,186,807,-,697,-,461,-,867,977,511,931,-,150,697,359,6,9,-,725,833,-,245,-,949,-,270,-,112 -273,-,-,221,19,-,997,-,-,-,823,366,-,993,818,-,542,501,-,-,-,-,-,695,447,946,-,880,992,186,-,-,-,596,949,-,91,-,768,273 -636,185,575,-,450,54,662,225,-,-,391,191,-,-,639,390,-,-,-,-,-,1,224,-,-,443,439,116,507,-,327,-,-,445,-,91,-,248,-,344 --,102,168,-,-,506,744,533,-,730,-,-,929,-,268,588,395,-,654,889,457,-,690,505,292,-,938,775,48,36,134,555,451,-,270,-,248,-,371,680 --,636,432,76,-,386,686,770,828,582,-,433,203,526,600,848,227,616,-,217,117,707,369,109,586,205,809,-,-,240,-,853,-,-,-,768,-,371,-,540 -774,289,833,257,-,381,239,722,711,468,933,-,-,17,-,-,148,-,-,853,-,-,-,-,264,194,260,947,-,752,147,-,-,343,112,273,344,680,540,- diff --git a/project_euler/problem_107/sol1.py b/project_euler/problem_107/sol1.py deleted file mode 100644 index 79cdd937042e..000000000000 --- a/project_euler/problem_107/sol1.py +++ /dev/null @@ -1,130 +0,0 @@ -""" -The following undirected network consists of seven vertices and twelve edges -with a total weight of 243. - -The same network can be represented by the matrix below. - - A B C D E F G -A - 16 12 21 - - - -B 16 - - 17 20 - - -C 12 - - 28 - 31 - -D 21 17 28 - 18 19 23 -E - 20 - 18 - - 11 -F - - 31 19 - - 27 -G - - - 23 11 27 - - -However, it is possible to optimise the network by removing some edges and still -ensure that all points on the network remain connected. The network which achieves -the maximum saving is shown below. It has a weight of 93, representing a saving of -243 - 93 = 150 from the original network. - -Using network.txt (right click and 'Save Link/Target As...'), a 6K text file -containing a network with forty vertices, and given in matrix form, find the maximum -saving which can be achieved by removing redundant edges whilst ensuring that the -network remains connected. - -Solution: - We use Prim's algorithm to find a Minimum Spanning Tree. - Reference: https://en.wikipedia.org/wiki/Prim%27s_algorithm -""" - -from __future__ import annotations - -import os -from collections.abc import Mapping - -EdgeT = tuple[int, int] - - -class Graph: - """ - A class representing an undirected weighted graph. - """ - - def __init__(self, vertices: set[int], edges: Mapping[EdgeT, int]) -> None: - self.vertices: set[int] = vertices - self.edges: dict[EdgeT, int] = { - (min(edge), max(edge)): weight for edge, weight in edges.items() - } - - def add_edge(self, edge: EdgeT, weight: int) -> None: - """ - Add a new edge to the graph. - >>> graph = Graph({1, 2}, {(2, 1): 4}) - >>> graph.add_edge((3, 1), 5) - >>> sorted(graph.vertices) - [1, 2, 3] - >>> sorted([(v,k) for k,v in graph.edges.items()]) - [(4, (1, 2)), (5, (1, 3))] - """ - self.vertices.add(edge[0]) - self.vertices.add(edge[1]) - self.edges[(min(edge), max(edge))] = weight - - def prims_algorithm(self) -> Graph: - """ - Run Prim's algorithm to find the minimum spanning tree. - Reference: https://en.wikipedia.org/wiki/Prim%27s_algorithm - >>> graph = Graph({1,2,3,4},{(1,2):5, (1,3):10, (1,4):20, (2,4):30, (3,4):1}) - >>> mst = graph.prims_algorithm() - >>> sorted(mst.vertices) - [1, 2, 3, 4] - >>> sorted(mst.edges) - [(1, 2), (1, 3), (3, 4)] - """ - subgraph: Graph = Graph({min(self.vertices)}, {}) - min_edge: EdgeT - min_weight: int - edge: EdgeT - weight: int - - while len(subgraph.vertices) < len(self.vertices): - min_weight = max(self.edges.values()) + 1 - for edge, weight in self.edges.items(): - if (edge[0] in subgraph.vertices) ^ ( - edge[1] in subgraph.vertices - ) and weight < min_weight: - min_edge = edge - min_weight = weight - - subgraph.add_edge(min_edge, min_weight) - - return subgraph - - -def solution(filename: str = "p107_network.txt") -> int: - """ - Find the maximum saving which can be achieved by removing redundant edges - whilst ensuring that the network remains connected. - >>> solution("test_network.txt") - 150 - """ - script_dir: str = os.path.abspath(os.path.dirname(__file__)) - network_file: str = os.path.join(script_dir, filename) - edges: dict[EdgeT, int] = {} - data: list[str] - edge1: int - edge2: int - - with open(network_file) as f: - data = f.read().strip().split("\n") - - adjaceny_matrix = [line.split(",") for line in data] - - for edge1 in range(1, len(adjaceny_matrix)): - for edge2 in range(edge1): - if adjaceny_matrix[edge1][edge2] != "-": - edges[(edge2, edge1)] = int(adjaceny_matrix[edge1][edge2]) - - graph: Graph = Graph(set(range(len(adjaceny_matrix))), edges) - - subgraph: Graph = graph.prims_algorithm() - - initial_total: int = sum(graph.edges.values()) - optimal_total: int = sum(subgraph.edges.values()) - - return initial_total - optimal_total - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_107/test_network.txt b/project_euler/problem_107/test_network.txt deleted file mode 100644 index f5f2accb5720..000000000000 --- a/project_euler/problem_107/test_network.txt +++ /dev/null @@ -1,7 +0,0 @@ --,16,12,21,-,-,- -16,-,-,17,20,-,- -12,-,-,28,-,31,- -21,17,28,-,18,19,23 --,20,-,18,-,-,11 --,-,31,19,-,-,27 --,-,-,23,11,27,- diff --git a/project_euler/problem_109/__init__.py b/project_euler/problem_109/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_109/sol1.py b/project_euler/problem_109/sol1.py deleted file mode 100644 index ef145dda590b..000000000000 --- a/project_euler/problem_109/sol1.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -In the game of darts a player throws three darts at a target board which is -split into twenty equal sized sections numbered one to twenty. - -The score of a dart is determined by the number of the region that the dart -lands in. A dart landing outside the red/green outer ring scores zero. The black -and cream regions inside this ring represent single scores. However, the red/green -outer ring and middle ring score double and treble scores respectively. - -At the centre of the board are two concentric circles called the bull region, or -bulls-eye. The outer bull is worth 25 points and the inner bull is a double, -worth 50 points. - -There are many variations of rules but in the most popular game the players will -begin with a score 301 or 501 and the first player to reduce their running total -to zero is a winner. However, it is normal to play a "doubles out" system, which -means that the player must land a double (including the double bulls-eye at the -centre of the board) on their final dart to win; any other dart that would reduce -their running total to one or lower means the score for that set of three darts -is "bust". - -When a player is able to finish on their current score it is called a "checkout" -and the highest checkout is 170: T20 T20 D25 (two treble 20s and double bull). - -There are exactly eleven distinct ways to checkout on a score of 6: - -D3 -D1 D2 -S2 D2 -D2 D1 -S4 D1 -S1 S1 D2 -S1 T1 D1 -S1 S3 D1 -D1 D1 D1 -D1 S2 D1 -S2 S2 D1 - -Note that D1 D2 is considered different to D2 D1 as they finish on different -doubles. However, the combination S1 T1 D1 is considered the same as T1 S1 D1. - -In addition we shall not include misses in considering combinations; for example, -D3 is the same as 0 D3 and 0 0 D3. - -Incredibly there are 42336 distinct ways of checking out in total. - -How many distinct ways can a player checkout with a score less than 100? - -Solution: - We first construct a list of the possible dart values, separated by type. - We then iterate through the doubles, followed by the possible 2 following throws. - If the total of these three darts is less than the given limit, we increment - the counter. -""" - -from itertools import combinations_with_replacement - - -def solution(limit: int = 100) -> int: - """ - Count the number of distinct ways a player can checkout with a score - less than limit. - >>> solution(171) - 42336 - >>> solution(50) - 12577 - """ - singles: list[int] = [*list(range(1, 21)), 25] - doubles: list[int] = [2 * x for x in range(1, 21)] + [50] - triples: list[int] = [3 * x for x in range(1, 21)] - all_values: list[int] = singles + doubles + triples + [0] - - num_checkouts: int = 0 - double: int - throw1: int - throw2: int - checkout_total: int - - for double in doubles: - for throw1, throw2 in combinations_with_replacement(all_values, 2): - checkout_total = double + throw1 + throw2 - if checkout_total < limit: - num_checkouts += 1 - - return num_checkouts - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_112/__init__.py b/project_euler/problem_112/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_112/sol1.py b/project_euler/problem_112/sol1.py deleted file mode 100644 index 31996d070771..000000000000 --- a/project_euler/problem_112/sol1.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Problem 112: https://projecteuler.net/problem=112 - -Working from left-to-right if no digit is exceeded by the digit to its left it is -called an increasing number; for example, 134468. -Similarly if no digit is exceeded by the digit to its right it is called a decreasing -number; for example, 66420. -We shall call a positive integer that is neither increasing nor decreasing a "bouncy" -number, for example, 155349. -Clearly there cannot be any bouncy numbers below one-hundred, but just over half of -the numbers below one-thousand (525) are bouncy. In fact, the least number for which -the proportion of bouncy numbers first reaches 50% is 538. -Surprisingly, bouncy numbers become more and more common and by the time we reach -21780 the proportion of bouncy numbers is equal to 90%. - -Find the least number for which the proportion of bouncy numbers is exactly 99%. -""" - - -def check_bouncy(n: int) -> bool: - """ - Returns True if number is bouncy, False otherwise - >>> check_bouncy(6789) - False - >>> check_bouncy(-12345) - False - >>> check_bouncy(0) - False - >>> check_bouncy(6.74) - Traceback (most recent call last): - ... - ValueError: check_bouncy() accepts only integer arguments - >>> check_bouncy(132475) - True - >>> check_bouncy(34) - False - >>> check_bouncy(341) - True - >>> check_bouncy(47) - False - >>> check_bouncy(-12.54) - Traceback (most recent call last): - ... - ValueError: check_bouncy() accepts only integer arguments - >>> check_bouncy(-6548) - True - """ - if not isinstance(n, int): - raise ValueError("check_bouncy() accepts only integer arguments") - str_n = str(n) - sorted_str_n = "".join(sorted(str_n)) - return str_n not in {sorted_str_n, sorted_str_n[::-1]} - - -def solution(percent: float = 99) -> int: - """ - Returns the least number for which the proportion of bouncy numbers is - exactly 'percent' - >>> solution(50) - 538 - >>> solution(90) - 21780 - >>> solution(80) - 4770 - >>> solution(105) - Traceback (most recent call last): - ... - ValueError: solution() only accepts values from 0 to 100 - >>> solution(100.011) - Traceback (most recent call last): - ... - ValueError: solution() only accepts values from 0 to 100 - """ - if not 0 < percent < 100: - raise ValueError("solution() only accepts values from 0 to 100") - bouncy_num = 0 - num = 1 - - while True: - if check_bouncy(num): - bouncy_num += 1 - if (bouncy_num / num) * 100 >= percent: - return num - num += 1 - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - print(f"{solution(99)}") diff --git a/project_euler/problem_113/__init__.py b/project_euler/problem_113/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_113/sol1.py b/project_euler/problem_113/sol1.py deleted file mode 100644 index 2077c0fa62f3..000000000000 --- a/project_euler/problem_113/sol1.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Project Euler Problem 113: https://projecteuler.net/problem=113 - -Working from left-to-right if no digit is exceeded by the digit to its left it is -called an increasing number; for example, 134468. - -Similarly if no digit is exceeded by the digit to its right it is called a decreasing -number; for example, 66420. - -We shall call a positive integer that is neither increasing nor decreasing a -"bouncy" number; for example, 155349. - -As n increases, the proportion of bouncy numbers below n increases such that there -are only 12951 numbers below one-million that are not bouncy and only 277032 -non-bouncy numbers below 10^10. - -How many numbers below a googol (10^100) are not bouncy? -""" - - -def choose(n: int, r: int) -> int: - """ - Calculate the binomial coefficient c(n,r) using the multiplicative formula. - >>> choose(4,2) - 6 - >>> choose(5,3) - 10 - >>> choose(20,6) - 38760 - """ - ret = 1.0 - for i in range(1, r + 1): - ret *= (n + 1 - i) / i - return round(ret) - - -def non_bouncy_exact(n: int) -> int: - """ - Calculate the number of non-bouncy numbers with at most n digits. - >>> non_bouncy_exact(1) - 9 - >>> non_bouncy_exact(6) - 7998 - >>> non_bouncy_exact(10) - 136126 - """ - return choose(8 + n, n) + choose(9 + n, n) - 10 - - -def non_bouncy_upto(n: int) -> int: - """ - Calculate the number of non-bouncy numbers with at most n digits. - >>> non_bouncy_upto(1) - 9 - >>> non_bouncy_upto(6) - 12951 - >>> non_bouncy_upto(10) - 277032 - """ - return sum(non_bouncy_exact(i) for i in range(1, n + 1)) - - -def solution(num_digits: int = 100) -> int: - """ - Calculate the number of non-bouncy numbers less than a googol. - >>> solution(6) - 12951 - >>> solution(10) - 277032 - """ - return non_bouncy_upto(num_digits) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_114/__init__.py b/project_euler/problem_114/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_114/sol1.py b/project_euler/problem_114/sol1.py deleted file mode 100644 index 14d8092b25dd..000000000000 --- a/project_euler/problem_114/sol1.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Project Euler Problem 114: https://projecteuler.net/problem=114 - -A row measuring seven units in length has red blocks with a minimum length -of three units placed on it, such that any two red blocks -(which are allowed to be different lengths) are separated by at least one grey square. -There are exactly seventeen ways of doing this. - - |g|g|g|g|g|g|g| |r,r,r|g|g|g|g| - - |g|r,r,r|g|g|g| |g|g|r,r,r|g|g| - - |g|g|g|r,r,r|g| |g|g|g|g|r,r,r| - - |r,r,r|g|r,r,r| |r,r,r,r|g|g|g| - - |g|r,r,r,r|g|g| |g|g|r,r,r,r|g| - - |g|g|g|r,r,r,r| |r,r,r,r,r|g|g| - - |g|r,r,r,r,r|g| |g|g|r,r,r,r,r| - - |r,r,r,r,r,r|g| |g|r,r,r,r,r,r| - - |r,r,r,r,r,r,r| - -How many ways can a row measuring fifty units in length be filled? - -NOTE: Although the example above does not lend itself to the possibility, -in general it is permitted to mix block sizes. For example, -on a row measuring eight units in length you could use red (3), grey (1), and red (4). -""" - - -def solution(length: int = 50) -> int: - """ - Returns the number of ways a row of the given length can be filled - - >>> solution(7) - 17 - """ - - ways_number = [1] * (length + 1) - - for row_length in range(3, length + 1): - for block_length in range(3, row_length + 1): - for block_start in range(row_length - block_length): - ways_number[row_length] += ways_number[ - row_length - block_start - block_length - 1 - ] - - ways_number[row_length] += 1 - - return ways_number[length] - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_115/__init__.py b/project_euler/problem_115/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_115/sol1.py b/project_euler/problem_115/sol1.py deleted file mode 100644 index 15a13516d54d..000000000000 --- a/project_euler/problem_115/sol1.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -Project Euler Problem 115: https://projecteuler.net/problem=115 - -NOTE: This is a more difficult version of Problem 114 -(https://projecteuler.net/problem=114). - -A row measuring n units in length has red blocks -with a minimum length of m units placed on it, such that any two red blocks -(which are allowed to be different lengths) are separated by at least one black square. - -Let the fill-count function, F(m, n), -represent the number of ways that a row can be filled. - -For example, F(3, 29) = 673135 and F(3, 30) = 1089155. - -That is, for m = 3, it can be seen that n = 30 is the smallest value -for which the fill-count function first exceeds one million. - -In the same way, for m = 10, it can be verified that -F(10, 56) = 880711 and F(10, 57) = 1148904, so n = 57 is the least value -for which the fill-count function first exceeds one million. - -For m = 50, find the least value of n -for which the fill-count function first exceeds one million. -""" - -from itertools import count - - -def solution(min_block_length: int = 50) -> int: - """ - Returns for given minimum block length the least value of n - for which the fill-count function first exceeds one million - - >>> solution(3) - 30 - - >>> solution(10) - 57 - """ - - fill_count_functions = [1] * min_block_length - - for n in count(min_block_length): - fill_count_functions.append(1) - - for block_length in range(min_block_length, n + 1): - for block_start in range(n - block_length): - fill_count_functions[n] += fill_count_functions[ - n - block_start - block_length - 1 - ] - - fill_count_functions[n] += 1 - - if fill_count_functions[n] > 1_000_000: - break - - return n - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_116/__init__.py b/project_euler/problem_116/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_116/sol1.py b/project_euler/problem_116/sol1.py deleted file mode 100644 index efa13ee3f25a..000000000000 --- a/project_euler/problem_116/sol1.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -Project Euler Problem 116: https://projecteuler.net/problem=116 - -A row of five grey square tiles is to have a number of its tiles -replaced with coloured oblong tiles chosen -from red (length two), green (length three), or blue (length four). - -If red tiles are chosen there are exactly seven ways this can be done. - - |red,red|grey|grey|grey| |grey|red,red|grey|grey| - - |grey|grey|red,red|grey| |grey|grey|grey|red,red| - - |red,red|red,red|grey| |red,red|grey|red,red| - - |grey|red,red|red,red| - -If green tiles are chosen there are three ways. - - |green,green,green|grey|grey| |grey|green,green,green|grey| - - |grey|grey|green,green,green| - -And if blue tiles are chosen there are two ways. - - |blue,blue,blue,blue|grey| |grey|blue,blue,blue,blue| - -Assuming that colours cannot be mixed there are 7 + 3 + 2 = 12 ways -of replacing the grey tiles in a row measuring five units in length. - -How many different ways can the grey tiles in a row measuring fifty units in length -be replaced if colours cannot be mixed and at least one coloured tile must be used? - -NOTE: This is related to Problem 117 (https://projecteuler.net/problem=117). -""" - - -def solution(length: int = 50) -> int: - """ - Returns the number of different ways can the grey tiles in a row - of the given length be replaced if colours cannot be mixed - and at least one coloured tile must be used - - >>> solution(5) - 12 - """ - - different_colour_ways_number = [[0] * 3 for _ in range(length + 1)] - - for row_length in range(length + 1): - for tile_length in range(2, 5): - for tile_start in range(row_length - tile_length + 1): - different_colour_ways_number[row_length][tile_length - 2] += ( - different_colour_ways_number[row_length - tile_start - tile_length][ - tile_length - 2 - ] - + 1 - ) - - return sum(different_colour_ways_number[length]) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_117/__init__.py b/project_euler/problem_117/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_117/sol1.py b/project_euler/problem_117/sol1.py deleted file mode 100644 index e8214454fac5..000000000000 --- a/project_euler/problem_117/sol1.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Project Euler Problem 117: https://projecteuler.net/problem=117 - -Using a combination of grey square tiles and oblong tiles chosen from: -red tiles (measuring two units), green tiles (measuring three units), -and blue tiles (measuring four units), -it is possible to tile a row measuring five units in length -in exactly fifteen different ways. - - |grey|grey|grey|grey|grey| |red,red|grey|grey|grey| - - |grey|red,red|grey|grey| |grey|grey|red,red|grey| - - |grey|grey|grey|red,red| |red,red|red,red|grey| - - |red,red|grey|red,red| |grey|red,red|red,red| - - |green,green,green|grey|grey| |grey|green,green,green|grey| - - |grey|grey|green,green,green| |red,red|green,green,green| - - |green,green,green|red,red| |blue,blue,blue,blue|grey| - - |grey|blue,blue,blue,blue| - -How many ways can a row measuring fifty units in length be tiled? - -NOTE: This is related to Problem 116 (https://projecteuler.net/problem=116). -""" - - -def solution(length: int = 50) -> int: - """ - Returns the number of ways can a row of the given length be tiled - - >>> solution(5) - 15 - """ - - ways_number = [1] * (length + 1) - - for row_length in range(length + 1): - for tile_length in range(2, 5): - for tile_start in range(row_length - tile_length + 1): - ways_number[row_length] += ways_number[ - row_length - tile_start - tile_length - ] - - return ways_number[length] - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_119/__init__.py b/project_euler/problem_119/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_119/sol1.py b/project_euler/problem_119/sol1.py deleted file mode 100644 index 60ec16cda1aa..000000000000 --- a/project_euler/problem_119/sol1.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -Problem 119: https://projecteuler.net/problem=119 - -Name: Digit power sum - -The number 512 is interesting because it is equal to the sum of its digits -raised to some power: 5 + 1 + 2 = 8, and 8^3 = 512. Another example of a number -with this property is 614656 = 28^4. We shall define an to be the nth term of -this sequence and insist that a number must contain at least two digits to have a sum. -You are given that a2 = 512 and a10 = 614656. Find a30 -""" - -import math - - -def digit_sum(n: int) -> int: - """ - Returns the sum of the digits of the number. - >>> digit_sum(123) - 6 - >>> digit_sum(456) - 15 - >>> digit_sum(78910) - 25 - """ - return sum(int(digit) for digit in str(n)) - - -def solution(n: int = 30) -> int: - """ - Returns the value of 30th digit power sum. - >>> solution(2) - 512 - >>> solution(5) - 5832 - >>> solution(10) - 614656 - """ - digit_to_powers = [] - for digit in range(2, 100): - for power in range(2, 100): - number = int(math.pow(digit, power)) - if digit == digit_sum(number): - digit_to_powers.append(number) - - digit_to_powers.sort() - return digit_to_powers[n - 1] - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_120/__init__.py b/project_euler/problem_120/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_120/sol1.py b/project_euler/problem_120/sol1.py deleted file mode 100644 index 2f403972502f..000000000000 --- a/project_euler/problem_120/sol1.py +++ /dev/null @@ -1,32 +0,0 @@ -""" -Problem 120 Square remainders: https://projecteuler.net/problem=120 - -Description: - -Let r be the remainder when (a-1)^n + (a+1)^n is divided by a^2. -For example, if a = 7 and n = 3, then r = 42: 6^3 + 8^3 = 728 ≡ 42 mod 49. -And as n varies, so too will r, but for a = 7 it turns out that r_max = 42. -For 3 ≤ a ≤ 1000, find ∑ r_max. - -Solution: - -On expanding the terms, we get 2 if n is even and 2an if n is odd. -For maximizing the value, 2an < a*a => n <= (a - 1)/2 (integer division) -""" - - -def solution(n: int = 1000) -> int: - """ - Returns ∑ r_max for 3 <= a <= n as explained above - >>> solution(10) - 300 - >>> solution(100) - 330750 - >>> solution(1000) - 333082500 - """ - return sum(2 * a * ((a - 1) // 2) for a in range(3, n + 1)) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_121/__init__.py b/project_euler/problem_121/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_121/sol1.py b/project_euler/problem_121/sol1.py deleted file mode 100644 index 93679cf4a897..000000000000 --- a/project_euler/problem_121/sol1.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -A bag contains one red disc and one blue disc. In a game of chance a player takes a -disc at random and its colour is noted. After each turn the disc is returned to the -bag, an extra red disc is added, and another disc is taken at random. - -The player pays £1 to play and wins if they have taken more blue discs than red -discs at the end of the game. - -If the game is played for four turns, the probability of a player winning is exactly -11/120, and so the maximum prize fund the banker should allocate for winning in this -game would be £10 before they would expect to incur a loss. Note that any payout will -be a whole number of pounds and also includes the original £1 paid to play the game, -so in the example given the player actually wins £9. - -Find the maximum prize fund that should be allocated to a single game in which -fifteen turns are played. - - -Solution: - For each 15-disc sequence of red and blue for which there are more red than blue, - we calculate the probability of that sequence and add it to the total probability - of the player winning. The inverse of this probability gives an upper bound for - the prize if the banker wants to avoid an expected loss. -""" - -from itertools import product - - -def solution(num_turns: int = 15) -> int: - """ - Find the maximum prize fund that should be allocated to a single game in which - fifteen turns are played. - >>> solution(4) - 10 - >>> solution(10) - 225 - """ - total_prob: float = 0.0 - prob: float - num_blue: int - num_red: int - ind: int - col: int - series: tuple[int, ...] - - for series in product(range(2), repeat=num_turns): - num_blue = series.count(1) - num_red = num_turns - num_blue - if num_red >= num_blue: - continue - prob = 1.0 - for ind, col in enumerate(series, 2): - if col == 0: - prob *= (ind - 1) / ind - else: - prob *= 1 / ind - - total_prob += prob - - return int(1 / total_prob) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_123/__init__.py b/project_euler/problem_123/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_123/sol1.py b/project_euler/problem_123/sol1.py deleted file mode 100644 index 3dd31a2e8505..000000000000 --- a/project_euler/problem_123/sol1.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -Problem 123: https://projecteuler.net/problem=123 - -Name: Prime square remainders - -Let pn be the nth prime: 2, 3, 5, 7, 11, ..., and -let r be the remainder when (pn-1)^n + (pn+1)^n is divided by pn^2. - -For example, when n = 3, p3 = 5, and 43 + 63 = 280 ≡ 5 mod 25. -The least value of n for which the remainder first exceeds 10^9 is 7037. - -Find the least value of n for which the remainder first exceeds 10^10. - - -Solution: - -n=1: (p-1) + (p+1) = 2p -n=2: (p-1)^2 + (p+1)^2 - = p^2 + 1 - 2p + p^2 + 1 + 2p (Using (p+b)^2 = (p^2 + b^2 + 2pb), - (p-b)^2 = (p^2 + b^2 - 2pb) and b = 1) - = 2p^2 + 2 -n=3: (p-1)^3 + (p+1)^3 (Similarly using (p+b)^3 & (p-b)^3 formula and so on) - = 2p^3 + 6p -n=4: 2p^4 + 12p^2 + 2 -n=5: 2p^5 + 20p^3 + 10p - -As you could see, when the expression is divided by p^2. -Except for the last term, the rest will result in the remainder 0. - -n=1: 2p -n=2: 2 -n=3: 6p -n=4: 2 -n=5: 10p - -So it could be simplified as, - r = 2pn when n is odd - r = 2 when n is even. -""" - -from __future__ import annotations - -from collections.abc import Generator - - -def sieve() -> Generator[int, None, None]: - """ - Returns a prime number generator using sieve method. - >>> type(sieve()) - <class 'generator'> - >>> primes = sieve() - >>> next(primes) - 2 - >>> next(primes) - 3 - >>> next(primes) - 5 - >>> next(primes) - 7 - >>> next(primes) - 11 - >>> next(primes) - 13 - """ - factor_map: dict[int, int] = {} - prime = 2 - while True: - factor = factor_map.pop(prime, None) - if factor: - x = factor + prime - while x in factor_map: - x += factor - factor_map[x] = factor - else: - factor_map[prime * prime] = prime - yield prime - prime += 1 - - -def solution(limit: float = 1e10) -> int: - """ - Returns the least value of n for which the remainder first exceeds 10^10. - >>> solution(1e8) - 2371 - >>> solution(1e9) - 7037 - """ - primes = sieve() - - n = 1 - while True: - prime = next(primes) - if (2 * prime * n) > limit: - return n - # Ignore the next prime as the reminder will be 2. - next(primes) - n += 2 - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_125/__init__.py b/project_euler/problem_125/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_125/sol1.py b/project_euler/problem_125/sol1.py deleted file mode 100644 index 616f6f122f97..000000000000 --- a/project_euler/problem_125/sol1.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Problem 125: https://projecteuler.net/problem=125 - -The palindromic number 595 is interesting because it can be written as the sum -of consecutive squares: 6^2 + 7^2 + 8^2 + 9^2 + 10^2 + 11^2 + 12^2. - -There are exactly eleven palindromes below one-thousand that can be written as -consecutive square sums, and the sum of these palindromes is 4164. Note that -1 = 0^2 + 1^2 has not been included as this problem is concerned with the -squares of positive integers. - -Find the sum of all the numbers less than 10^8 that are both palindromic and can -be written as the sum of consecutive squares. -""" - -LIMIT = 10**8 - - -def is_palindrome(n: int) -> bool: - """ - Check if an integer is palindromic. - >>> is_palindrome(12521) - True - >>> is_palindrome(12522) - False - >>> is_palindrome(12210) - False - """ - if n % 10 == 0: - return False - s = str(n) - return s == s[::-1] - - -def solution() -> int: - """ - Returns the sum of all numbers less than 1e8 that are both palindromic and - can be written as the sum of consecutive squares. - """ - answer = set() - first_square = 1 - sum_squares = 5 - while sum_squares < LIMIT: - last_square = first_square + 1 - while sum_squares < LIMIT: - if is_palindrome(sum_squares): - answer.add(sum_squares) - last_square += 1 - sum_squares += last_square**2 - first_square += 1 - sum_squares = first_square**2 + (first_square + 1) ** 2 - - return sum(answer) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_129/__init__.py b/project_euler/problem_129/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_129/sol1.py b/project_euler/problem_129/sol1.py deleted file mode 100644 index 8afe82df162e..000000000000 --- a/project_euler/problem_129/sol1.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Project Euler Problem 129: https://projecteuler.net/problem=129 - -A number consisting entirely of ones is called a repunit. We shall define R(k) to be -a repunit of length k; for example, R(6) = 111111. - -Given that n is a positive integer and GCD(n, 10) = 1, it can be shown that there -always exists a value, k, for which R(k) is divisible by n, and let A(n) be the least -such value of k; for example, A(7) = 6 and A(41) = 5. - -The least value of n for which A(n) first exceeds ten is 17. - -Find the least value of n for which A(n) first exceeds one-million. -""" - - -def least_divisible_repunit(divisor: int) -> int: - """ - Return the least value k such that the Repunit of length k is divisible by divisor. - >>> least_divisible_repunit(7) - 6 - >>> least_divisible_repunit(41) - 5 - >>> least_divisible_repunit(1234567) - 34020 - """ - if divisor % 5 == 0 or divisor % 2 == 0: - return 0 - repunit = 1 - repunit_index = 1 - while repunit: - repunit = (10 * repunit + 1) % divisor - repunit_index += 1 - return repunit_index - - -def solution(limit: int = 1000000) -> int: - """ - Return the least value of n for which least_divisible_repunit(n) - first exceeds limit. - >>> solution(10) - 17 - >>> solution(100) - 109 - >>> solution(1000) - 1017 - """ - divisor = limit - 1 - if divisor % 2 == 0: - divisor += 1 - while least_divisible_repunit(divisor) <= limit: - divisor += 2 - return divisor - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_131/__init__.py b/project_euler/problem_131/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_131/sol1.py b/project_euler/problem_131/sol1.py deleted file mode 100644 index be3ea9c81ae4..000000000000 --- a/project_euler/problem_131/sol1.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Project Euler Problem 131: https://projecteuler.net/problem=131 - -There are some prime values, p, for which there exists a positive integer, n, -such that the expression n^3 + n^2p is a perfect cube. - -For example, when p = 19, 8^3 + 8^2 x 19 = 12^3. - -What is perhaps most surprising is that for each prime with this property -the value of n is unique, and there are only four such primes below one-hundred. - -How many primes below one million have this remarkable property? -""" - -from math import isqrt - - -def is_prime(number: int) -> bool: - """ - Determines whether number is prime - - >>> is_prime(3) - True - - >>> is_prime(4) - False - """ - - return all(number % divisor != 0 for divisor in range(2, isqrt(number) + 1)) - - -def solution(max_prime: int = 10**6) -> int: - """ - Returns number of primes below max_prime with the property - - >>> solution(100) - 4 - """ - - primes_count = 0 - cube_index = 1 - prime_candidate = 7 - while prime_candidate < max_prime: - primes_count += is_prime(prime_candidate) - - cube_index += 1 - prime_candidate += 6 * cube_index - - return primes_count - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_135/__init__.py b/project_euler/problem_135/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_135/sol1.py b/project_euler/problem_135/sol1.py deleted file mode 100644 index d57ace489191..000000000000 --- a/project_euler/problem_135/sol1.py +++ /dev/null @@ -1,55 +0,0 @@ -""" -Project Euler Problem 135: https://projecteuler.net/problem=135 - -Given the positive integers, x, y, and z, are consecutive terms of an arithmetic -progression, the least value of the positive integer, n, for which the equation, -x2 - y2 - z2 = n, has exactly two solutions is n = 27: - -342 - 272 - 202 = 122 - 92 - 62 = 27 - -It turns out that n = 1155 is the least value which has exactly ten solutions. - -How many values of n less than one million have exactly ten distinct solutions? - - -Taking x, y, z of the form a + d, a, a - d respectively, the given equation reduces to -a * (4d - a) = n. -Calculating no of solutions for every n till 1 million by fixing a, and n must be a -multiple of a. Total no of steps = n * (1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n), so roughly -O(nlogn) time complexity. -""" - - -def solution(limit: int = 1000000) -> int: - """ - returns the values of n less than or equal to the limit - have exactly ten distinct solutions. - >>> solution(100) - 0 - >>> solution(10000) - 45 - >>> solution(50050) - 292 - """ - limit = limit + 1 - frequency = [0] * limit - for first_term in range(1, limit): - for n in range(first_term, limit, first_term): - common_difference = first_term + n / first_term - if common_difference % 4: # d must be divisible by 4 - continue - else: - common_difference /= 4 - if ( - first_term > common_difference - and first_term < 4 * common_difference - ): # since x, y, z are positive integers - frequency[n] += 1 # so z > 0, a > d and 4d < a - - count = sum(1 for x in frequency[1:limit] if x == 10) - - return count - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_144/__init__.py b/project_euler/problem_144/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_144/sol1.py b/project_euler/problem_144/sol1.py deleted file mode 100644 index 9070455de79f..000000000000 --- a/project_euler/problem_144/sol1.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -In laser physics, a "white cell" is a mirror system that acts as a delay line for the -laser beam. The beam enters the cell, bounces around on the mirrors, and eventually -works its way back out. - -The specific white cell we will be considering is an ellipse with the equation -4x^2 + y^2 = 100 - -The section corresponding to -0.01 ≤ x ≤ +0.01 at the top is missing, allowing the -light to enter and exit through the hole. - -The light beam in this problem starts at the point (0.0,10.1) just outside the white -cell, and the beam first impacts the mirror at (1.4,-9.6). - -Each time the laser beam hits the surface of the ellipse, it follows the usual law of -reflection "angle of incidence equals angle of reflection." That is, both the incident -and reflected beams make the same angle with the normal line at the point of incidence. - -In the figure on the left, the red line shows the first two points of contact between -the laser beam and the wall of the white cell; the blue line shows the line tangent to -the ellipse at the point of incidence of the first bounce. - -The slope m of the tangent line at any point (x,y) of the given ellipse is: m = -4x/y - -The normal line is perpendicular to this tangent line at the point of incidence. - -The animation on the right shows the first 10 reflections of the beam. - -How many times does the beam hit the internal surface of the white cell before exiting? -""" - -from math import isclose, sqrt - - -def next_point( - point_x: float, point_y: float, incoming_gradient: float -) -> tuple[float, float, float]: - """ - Given that a laser beam hits the interior of the white cell at point - (point_x, point_y) with gradient incoming_gradient, return a tuple (x,y,m1) - where the next point of contact with the interior is (x,y) with gradient m1. - >>> next_point(5.0, 0.0, 0.0) - (-5.0, 0.0, 0.0) - >>> next_point(5.0, 0.0, -2.0) - (0.0, -10.0, 2.0) - """ - # normal_gradient = gradient of line through which the beam is reflected - # outgoing_gradient = gradient of reflected line - normal_gradient = point_y / 4 / point_x - s2 = 2 * normal_gradient / (1 + normal_gradient * normal_gradient) - c2 = (1 - normal_gradient * normal_gradient) / ( - 1 + normal_gradient * normal_gradient - ) - outgoing_gradient = (s2 - c2 * incoming_gradient) / (c2 + s2 * incoming_gradient) - - # to find the next point, solve the simultaeneous equations: - # y^2 + 4x^2 = 100 - # y - b = m * (x - a) - # ==> A x^2 + B x + C = 0 - quadratic_term = outgoing_gradient**2 + 4 - linear_term = 2 * outgoing_gradient * (point_y - outgoing_gradient * point_x) - constant_term = (point_y - outgoing_gradient * point_x) ** 2 - 100 - - x_minus = ( - -linear_term - sqrt(linear_term**2 - 4 * quadratic_term * constant_term) - ) / (2 * quadratic_term) - x_plus = ( - -linear_term + sqrt(linear_term**2 - 4 * quadratic_term * constant_term) - ) / (2 * quadratic_term) - - # two solutions, one of which is our input point - next_x = x_minus if isclose(x_plus, point_x) else x_plus - next_y = point_y + outgoing_gradient * (next_x - point_x) - - return next_x, next_y, outgoing_gradient - - -def solution(first_x_coord: float = 1.4, first_y_coord: float = -9.6) -> int: - """ - Return the number of times that the beam hits the interior wall of the - cell before exiting. - >>> solution(0.00001,-10) - 1 - >>> solution(5, 0) - 287 - """ - num_reflections: int = 0 - point_x: float = first_x_coord - point_y: float = first_y_coord - gradient: float = (10.1 - point_y) / (0.0 - point_x) - - while not (-0.01 <= point_x <= 0.01 and point_y > 0): - point_x, point_y, gradient = next_point(point_x, point_y, gradient) - num_reflections += 1 - - return num_reflections - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_145/__init__.py b/project_euler/problem_145/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_145/sol1.py b/project_euler/problem_145/sol1.py deleted file mode 100644 index 583bb03a0a90..000000000000 --- a/project_euler/problem_145/sol1.py +++ /dev/null @@ -1,153 +0,0 @@ -""" -Project Euler problem 145: https://projecteuler.net/problem=145 -Author: Vineet Rao, Maxim Smolskiy -Problem statement: - -Some positive integers n have the property that the sum [ n + reverse(n) ] -consists entirely of odd (decimal) digits. -For instance, 36 + 63 = 99 and 409 + 904 = 1313. -We will call such numbers reversible; so 36, 63, 409, and 904 are reversible. -Leading zeroes are not allowed in either n or reverse(n). - -There are 120 reversible numbers below one-thousand. - -How many reversible numbers are there below one-billion (10^9)? -""" - -EVEN_DIGITS = [0, 2, 4, 6, 8] -ODD_DIGITS = [1, 3, 5, 7, 9] - - -def slow_reversible_numbers( - remaining_length: int, remainder: int, digits: list[int], length: int -) -> int: - """ - Count the number of reversible numbers of given length. - Iterate over possible digits considering parity of current sum remainder. - >>> slow_reversible_numbers(1, 0, [0], 1) - 0 - >>> slow_reversible_numbers(2, 0, [0] * 2, 2) - 20 - >>> slow_reversible_numbers(3, 0, [0] * 3, 3) - 100 - """ - if remaining_length == 0: - if digits[0] == 0 or digits[-1] == 0: - return 0 - - for i in range(length // 2 - 1, -1, -1): - remainder += digits[i] + digits[length - i - 1] - - if remainder % 2 == 0: - return 0 - - remainder //= 10 - - return 1 - - if remaining_length == 1: - if remainder % 2 == 0: - return 0 - - result = 0 - for digit in range(10): - digits[length // 2] = digit - result += slow_reversible_numbers( - 0, (remainder + 2 * digit) // 10, digits, length - ) - return result - - result = 0 - for digit1 in range(10): - digits[(length + remaining_length) // 2 - 1] = digit1 - - if (remainder + digit1) % 2 == 0: - other_parity_digits = ODD_DIGITS - else: - other_parity_digits = EVEN_DIGITS - - for digit2 in other_parity_digits: - digits[(length - remaining_length) // 2] = digit2 - result += slow_reversible_numbers( - remaining_length - 2, - (remainder + digit1 + digit2) // 10, - digits, - length, - ) - return result - - -def slow_solution(max_power: int = 9) -> int: - """ - To evaluate the solution, use solution() - >>> slow_solution(3) - 120 - >>> slow_solution(6) - 18720 - >>> slow_solution(7) - 68720 - """ - result = 0 - for length in range(1, max_power + 1): - result += slow_reversible_numbers(length, 0, [0] * length, length) - return result - - -def reversible_numbers( - remaining_length: int, remainder: int, digits: list[int], length: int -) -> int: - """ - Count the number of reversible numbers of given length. - Iterate over possible digits considering parity of current sum remainder. - >>> reversible_numbers(1, 0, [0], 1) - 0 - >>> reversible_numbers(2, 0, [0] * 2, 2) - 20 - >>> reversible_numbers(3, 0, [0] * 3, 3) - 100 - """ - # There exist no reversible 1, 5, 9, 13 (ie. 4k+1) digit numbers - if (length - 1) % 4 == 0: - return 0 - - return slow_reversible_numbers(remaining_length, remainder, digits, length) - - -def solution(max_power: int = 9) -> int: - """ - To evaluate the solution, use solution() - >>> solution(3) - 120 - >>> solution(6) - 18720 - >>> solution(7) - 68720 - """ - result = 0 - for length in range(1, max_power + 1): - result += reversible_numbers(length, 0, [0] * length, length) - return result - - -def benchmark() -> None: - """ - Benchmarks - """ - # Running performance benchmarks... - # slow_solution : 292.9300301000003 - # solution : 54.90970860000016 - - from timeit import timeit - - print("Running performance benchmarks...") - - print(f"slow_solution : {timeit('slow_solution()', globals=globals(), number=10)}") - print(f"solution : {timeit('solution()', globals=globals(), number=10)}") - - -if __name__ == "__main__": - print(f"Solution : {solution()}") - benchmark() - - # for i in range(1, 15): - # print(f"{i}. {reversible_numbers(i, 0, [0]*i, i)}") diff --git a/project_euler/problem_173/__init__.py b/project_euler/problem_173/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_173/sol1.py b/project_euler/problem_173/sol1.py deleted file mode 100644 index 9235d00e1752..000000000000 --- a/project_euler/problem_173/sol1.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -Project Euler Problem 173: https://projecteuler.net/problem=173 - -We shall define a square lamina to be a square outline with a square "hole" so that -the shape possesses vertical and horizontal symmetry. For example, using exactly -thirty-two square tiles we can form two different square laminae: - -With one-hundred tiles, and not necessarily using all of the tiles at one time, it is -possible to form forty-one different square laminae. - -Using up to one million tiles how many different square laminae can be formed? -""" - -from math import ceil, sqrt - - -def solution(limit: int = 1000000) -> int: - """ - Return the number of different square laminae that can be formed using up to - one million tiles. - >>> solution(100) - 41 - """ - answer = 0 - - for outer_width in range(3, (limit // 4) + 2): - if outer_width**2 > limit: - hole_width_lower_bound = max(ceil(sqrt(outer_width**2 - limit)), 1) - else: - hole_width_lower_bound = 1 - if (outer_width - hole_width_lower_bound) % 2: - hole_width_lower_bound += 1 - - answer += (outer_width - hole_width_lower_bound - 2) // 2 + 1 - - return answer - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_174/__init__.py b/project_euler/problem_174/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_174/sol1.py b/project_euler/problem_174/sol1.py deleted file mode 100644 index 9a75e8638880..000000000000 --- a/project_euler/problem_174/sol1.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Project Euler Problem 174: https://projecteuler.net/problem=174 - -We shall define a square lamina to be a square outline with a square "hole" so that -the shape possesses vertical and horizontal symmetry. - -Given eight tiles it is possible to form a lamina in only one way: 3x3 square with a -1x1 hole in the middle. However, using thirty-two tiles it is possible to form two -distinct laminae. - -If t represents the number of tiles used, we shall say that t = 8 is type L(1) and -t = 32 is type L(2). - -Let N(n) be the number of t ≤ 1000000 such that t is type L(n); for example, -N(15) = 832. - -What is sum N(n) for 1 ≤ n ≤ 10? -""" - -from collections import defaultdict -from math import ceil, sqrt - - -def solution(t_limit: int = 1000000, n_limit: int = 10) -> int: - """ - Return the sum of N(n) for 1 <= n <= n_limit. - - >>> solution(1000,5) - 222 - >>> solution(1000,10) - 249 - >>> solution(10000,10) - 2383 - """ - count: defaultdict = defaultdict(int) - - for outer_width in range(3, (t_limit // 4) + 2): - if outer_width * outer_width > t_limit: - hole_width_lower_bound = max( - ceil(sqrt(outer_width * outer_width - t_limit)), 1 - ) - else: - hole_width_lower_bound = 1 - - hole_width_lower_bound += (outer_width - hole_width_lower_bound) % 2 - - for hole_width in range(hole_width_lower_bound, outer_width - 1, 2): - count[outer_width * outer_width - hole_width * hole_width] += 1 - - return sum(1 for n in count.values() if 1 <= n <= n_limit) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_180/__init__.py b/project_euler/problem_180/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_180/sol1.py b/project_euler/problem_180/sol1.py deleted file mode 100644 index 72baed42b99e..000000000000 --- a/project_euler/problem_180/sol1.py +++ /dev/null @@ -1,174 +0,0 @@ -""" -Project Euler Problem 234: https://projecteuler.net/problem=234 - -For any integer n, consider the three functions - -f1,n(x,y,z) = x^(n+1) + y^(n+1) - z^(n+1) -f2,n(x,y,z) = (xy + yz + zx)*(x^(n-1) + y^(n-1) - z^(n-1)) -f3,n(x,y,z) = xyz*(xn-2 + yn-2 - zn-2) - -and their combination - -fn(x,y,z) = f1,n(x,y,z) + f2,n(x,y,z) - f3,n(x,y,z) - -We call (x,y,z) a golden triple of order k if x, y, and z are all rational numbers -of the form a / b with 0 < a < b ≤ k and there is (at least) one integer n, -so that fn(x,y,z) = 0. - -Let s(x,y,z) = x + y + z. -Let t = u / v be the sum of all distinct s(x,y,z) for all golden triples -(x,y,z) of order 35. -All the s(x,y,z) and t must be in reduced form. - -Find u + v. - - -Solution: - -By expanding the brackets it is easy to show that -fn(x, y, z) = (x + y + z) * (x^n + y^n - z^n). - -Since x,y,z are positive, the requirement fn(x, y, z) = 0 is fulfilled if and -only if x^n + y^n = z^n. - -By Fermat's Last Theorem, this means that the absolute value of n can not -exceed 2, i.e. n is in {-2, -1, 0, 1, 2}. We can eliminate n = 0 since then the -equation would reduce to 1 + 1 = 1, for which there are no solutions. - -So all we have to do is iterate through the possible numerators and denominators -of x and y, calculate the corresponding z, and check if the corresponding numerator and -denominator are integer and satisfy 0 < z_num < z_den <= 0. We use a set "uniquq_s" -to make sure there are no duplicates, and the fractions.Fraction class to make sure -we get the right numerator and denominator. - -Reference: -https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem -""" - -from __future__ import annotations - -from fractions import Fraction -from math import gcd, sqrt - - -def is_sq(number: int) -> bool: - """ - Check if number is a perfect square. - - >>> is_sq(1) - True - >>> is_sq(1000001) - False - >>> is_sq(1000000) - True - """ - sq: int = int(number**0.5) - return number == sq * sq - - -def add_three( - x_num: int, x_den: int, y_num: int, y_den: int, z_num: int, z_den: int -) -> tuple[int, int]: - """ - Given the numerators and denominators of three fractions, return the - numerator and denominator of their sum in lowest form. - >>> add_three(1, 3, 1, 3, 1, 3) - (1, 1) - >>> add_three(2, 5, 4, 11, 12, 3) - (262, 55) - """ - top: int = x_num * y_den * z_den + y_num * x_den * z_den + z_num * x_den * y_den - bottom: int = x_den * y_den * z_den - hcf: int = gcd(top, bottom) - top //= hcf - bottom //= hcf - return top, bottom - - -def solution(order: int = 35) -> int: - """ - Find the sum of the numerator and denominator of the sum of all s(x,y,z) for - golden triples (x,y,z) of the given order. - - >>> solution(5) - 296 - >>> solution(10) - 12519 - >>> solution(20) - 19408891927 - """ - unique_s: set = set() - hcf: int - total: Fraction = Fraction(0) - fraction_sum: tuple[int, int] - - for x_num in range(1, order + 1): - for x_den in range(x_num + 1, order + 1): - for y_num in range(1, order + 1): - for y_den in range(y_num + 1, order + 1): - # n=1 - z_num = x_num * y_den + x_den * y_num - z_den = x_den * y_den - hcf = gcd(z_num, z_den) - z_num //= hcf - z_den //= hcf - if 0 < z_num < z_den <= order: - fraction_sum = add_three( - x_num, x_den, y_num, y_den, z_num, z_den - ) - unique_s.add(fraction_sum) - - # n=2 - z_num = ( - x_num * x_num * y_den * y_den + x_den * x_den * y_num * y_num - ) - z_den = x_den * x_den * y_den * y_den - if is_sq(z_num) and is_sq(z_den): - z_num = int(sqrt(z_num)) - z_den = int(sqrt(z_den)) - hcf = gcd(z_num, z_den) - z_num //= hcf - z_den //= hcf - if 0 < z_num < z_den <= order: - fraction_sum = add_three( - x_num, x_den, y_num, y_den, z_num, z_den - ) - unique_s.add(fraction_sum) - - # n=-1 - z_num = x_num * y_num - z_den = x_den * y_num + x_num * y_den - hcf = gcd(z_num, z_den) - z_num //= hcf - z_den //= hcf - if 0 < z_num < z_den <= order: - fraction_sum = add_three( - x_num, x_den, y_num, y_den, z_num, z_den - ) - unique_s.add(fraction_sum) - - # n=2 - z_num = x_num * x_num * y_num * y_num - z_den = ( - x_den * x_den * y_num * y_num + x_num * x_num * y_den * y_den - ) - if is_sq(z_num) and is_sq(z_den): - z_num = int(sqrt(z_num)) - z_den = int(sqrt(z_den)) - hcf = gcd(z_num, z_den) - z_num //= hcf - z_den //= hcf - if 0 < z_num < z_den <= order: - fraction_sum = add_three( - x_num, x_den, y_num, y_den, z_num, z_den - ) - unique_s.add(fraction_sum) - - for num, den in unique_s: - total += Fraction(num, den) - - return total.denominator + total.numerator - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_187/__init__.py b/project_euler/problem_187/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_187/sol1.py b/project_euler/problem_187/sol1.py deleted file mode 100644 index 8944776fef50..000000000000 --- a/project_euler/problem_187/sol1.py +++ /dev/null @@ -1,162 +0,0 @@ -""" -Project Euler Problem 187: https://projecteuler.net/problem=187 - -A composite is a number containing at least two prime factors. -For example, 15 = 3 x 5; 9 = 3 x 3; 12 = 2 x 2 x 3. - -There are ten composites below thirty containing precisely two, -not necessarily distinct, prime factors: 4, 6, 9, 10, 14, 15, 21, 22, 25, 26. - -How many composite integers, n < 10^8, have precisely two, -not necessarily distinct, prime factors? -""" - -from math import isqrt - - -def slow_calculate_prime_numbers(max_number: int) -> list[int]: - """ - Returns prime numbers below max_number. - See: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - - >>> slow_calculate_prime_numbers(10) - [2, 3, 5, 7] - - >>> slow_calculate_prime_numbers(2) - [] - """ - - # List containing a bool value for every number below max_number/2 - is_prime = [True] * max_number - - for i in range(2, isqrt(max_number - 1) + 1): - if is_prime[i]: - # Mark all multiple of i as not prime - for j in range(i**2, max_number, i): - is_prime[j] = False - - return [i for i in range(2, max_number) if is_prime[i]] - - -def calculate_prime_numbers(max_number: int) -> list[int]: - """ - Returns prime numbers below max_number. - See: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - - >>> calculate_prime_numbers(10) - [2, 3, 5, 7] - - >>> calculate_prime_numbers(2) - [] - """ - - if max_number <= 2: - return [] - - # List containing a bool value for every odd number below max_number/2 - is_prime = [True] * (max_number // 2) - - for i in range(3, isqrt(max_number - 1) + 1, 2): - if is_prime[i // 2]: - # Mark all multiple of i as not prime using list slicing - is_prime[i**2 // 2 :: i] = [False] * ( - # Same as: (max_number - (i**2)) // (2 * i) + 1 - # but faster than len(is_prime[i**2 // 2 :: i]) - len(range(i**2 // 2, max_number // 2, i)) - ) - - return [2] + [2 * i + 1 for i in range(1, max_number // 2) if is_prime[i]] - - -def slow_solution(max_number: int = 10**8) -> int: - """ - Returns the number of composite integers below max_number have precisely two, - not necessarily distinct, prime factors. - - >>> slow_solution(30) - 10 - """ - - prime_numbers = slow_calculate_prime_numbers(max_number // 2) - - semiprimes_count = 0 - left = 0 - right = len(prime_numbers) - 1 - while left <= right: - while prime_numbers[left] * prime_numbers[right] >= max_number: - right -= 1 - semiprimes_count += right - left + 1 - left += 1 - - return semiprimes_count - - -def while_solution(max_number: int = 10**8) -> int: - """ - Returns the number of composite integers below max_number have precisely two, - not necessarily distinct, prime factors. - - >>> while_solution(30) - 10 - """ - - prime_numbers = calculate_prime_numbers(max_number // 2) - - semiprimes_count = 0 - left = 0 - right = len(prime_numbers) - 1 - while left <= right: - while prime_numbers[left] * prime_numbers[right] >= max_number: - right -= 1 - semiprimes_count += right - left + 1 - left += 1 - - return semiprimes_count - - -def solution(max_number: int = 10**8) -> int: - """ - Returns the number of composite integers below max_number have precisely two, - not necessarily distinct, prime factors. - - >>> solution(30) - 10 - """ - - prime_numbers = calculate_prime_numbers(max_number // 2) - - semiprimes_count = 0 - right = len(prime_numbers) - 1 - for left in range(len(prime_numbers)): - if left > right: - break - for r in range(right, left - 2, -1): - if prime_numbers[left] * prime_numbers[r] < max_number: - break - right = r - semiprimes_count += right - left + 1 - - return semiprimes_count - - -def benchmark() -> None: - """ - Benchmarks - """ - # Running performance benchmarks... - # slow_solution : 108.50874730000032 - # while_sol : 28.09581200000048 - # solution : 25.063097400000515 - - from timeit import timeit - - print("Running performance benchmarks...") - - print(f"slow_solution : {timeit('slow_solution()', globals=globals(), number=10)}") - print(f"while_sol : {timeit('while_solution()', globals=globals(), number=10)}") - print(f"solution : {timeit('solution()', globals=globals(), number=10)}") - - -if __name__ == "__main__": - print(f"Solution: {solution()}") - benchmark() diff --git a/project_euler/problem_188/__init__.py b/project_euler/problem_188/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_188/sol1.py b/project_euler/problem_188/sol1.py deleted file mode 100644 index 88bd1327e917..000000000000 --- a/project_euler/problem_188/sol1.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -Project Euler Problem 188: https://projecteuler.net/problem=188 - -The hyperexponentiation of a number - -The hyperexponentiation or tetration of a number a by a positive integer b, -denoted by a↑↑b or b^a, is recursively defined by: - -a↑↑1 = a, -a↑↑(k+1) = a(a↑↑k). - -Thus we have e.g. 3↑↑2 = 3^3 = 27, hence 3↑↑3 = 3^27 = 7625597484987 and -3↑↑4 is roughly 103.6383346400240996*10^12. - -Find the last 8 digits of 1777↑↑1855. - -References: - - https://en.wikipedia.org/wiki/Tetration -""" - - -# small helper function for modular exponentiation (fast exponentiation algorithm) -def _modexpt(base: int, exponent: int, modulo_value: int) -> int: - """ - Returns the modular exponentiation, that is the value - of `base ** exponent % modulo_value`, without calculating - the actual number. - >>> _modexpt(2, 4, 10) - 6 - >>> _modexpt(2, 1024, 100) - 16 - >>> _modexpt(13, 65535, 7) - 6 - """ - - if exponent == 1: - return base - if exponent % 2 == 0: - x = _modexpt(base, exponent // 2, modulo_value) % modulo_value - return (x * x) % modulo_value - else: - return (base * _modexpt(base, exponent - 1, modulo_value)) % modulo_value - - -def solution(base: int = 1777, height: int = 1855, digits: int = 8) -> int: - """ - Returns the last 8 digits of the hyperexponentiation of base by - height, i.e. the number base↑↑height: - - >>> solution(base=3, height=2) - 27 - >>> solution(base=3, height=3) - 97484987 - >>> solution(base=123, height=456, digits=4) - 2547 - """ - - # calculate base↑↑height by right-assiciative repeated modular - # exponentiation - result = base - for _ in range(1, height): - result = _modexpt(base, result, 10**digits) - - return result - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_191/__init__.py b/project_euler/problem_191/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_191/sol1.py b/project_euler/problem_191/sol1.py deleted file mode 100644 index efb2a5d086ad..000000000000 --- a/project_euler/problem_191/sol1.py +++ /dev/null @@ -1,104 +0,0 @@ -""" -Prize Strings -Problem 191 - -A particular school offers cash rewards to children with good attendance and -punctuality. If they are absent for three consecutive days or late on more -than one occasion then they forfeit their prize. - -During an n-day period a trinary string is formed for each child consisting -of L's (late), O's (on time), and A's (absent). - -Although there are eighty-one trinary strings for a 4-day period that can be -formed, exactly forty-three strings would lead to a prize: - -OOOO OOOA OOOL OOAO OOAA OOAL OOLO OOLA OAOO OAOA -OAOL OAAO OAAL OALO OALA OLOO OLOA OLAO OLAA AOOO -AOOA AOOL AOAO AOAA AOAL AOLO AOLA AAOO AAOA AAOL -AALO AALA ALOO ALOA ALAO ALAA LOOO LOOA LOAO LOAA -LAOO LAOA LAAO - -How many "prize" strings exist over a 30-day period? - -References: - - The original Project Euler project page: - https://projecteuler.net/problem=191 -""" - -cache: dict[tuple[int, int, int], int] = {} - - -def _calculate(days: int, absent: int, late: int) -> int: - """ - A small helper function for the recursion, mainly to have - a clean interface for the solution() function below. - - It should get called with the number of days (corresponding - to the desired length of the 'prize strings'), and the - initial values for the number of consecutive absent days and - number of total late days. - - >>> _calculate(days=4, absent=0, late=0) - 43 - >>> _calculate(days=30, absent=2, late=0) - 0 - >>> _calculate(days=30, absent=1, late=0) - 98950096 - """ - - # if we are absent twice, or late 3 consecutive days, - # no further prize strings are possible - if late == 3 or absent == 2: - return 0 - - # if we have no days left, and have not failed any other rules, - # we have a prize string - if days == 0: - return 1 - - # No easy solution, so now we need to do the recursive calculation - - # First, check if the combination is already in the cache, and - # if yes, return the stored value from there since we already - # know the number of possible prize strings from this point on - key = (days, absent, late) - if key in cache: - return cache[key] - - # now we calculate the three possible ways that can unfold from - # this point on, depending on our attendance today - - # 1) if we are late (but not absent), the "absent" counter stays as - # it is, but the "late" counter increases by one - state_late = _calculate(days - 1, absent, late + 1) - - # 2) if we are absent, the "absent" counter increases by 1, and the - # "late" counter resets to 0 - state_absent = _calculate(days - 1, absent + 1, 0) - - # 3) if we are on time, this resets the "late" counter and keeps the - # absent counter - state_ontime = _calculate(days - 1, absent, 0) - - prizestrings = state_late + state_absent + state_ontime - - cache[key] = prizestrings - return prizestrings - - -def solution(days: int = 30) -> int: - """ - Returns the number of possible prize strings for a particular number - of days, using a simple recursive function with caching to speed it up. - - >>> solution() - 1918080160 - >>> solution(4) - 43 - """ - - return _calculate(days, absent=0, late=0) - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_203/__init__.py b/project_euler/problem_203/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_203/sol1.py b/project_euler/problem_203/sol1.py deleted file mode 100644 index 8ad089ec09aa..000000000000 --- a/project_euler/problem_203/sol1.py +++ /dev/null @@ -1,117 +0,0 @@ -""" -Project Euler Problem 203: https://projecteuler.net/problem=203 - -The binomial coefficients (n k) can be arranged in triangular form, Pascal's -triangle, like this: - 1 - 1 1 - 1 2 1 - 1 3 3 1 - 1 4 6 4 1 - 1 5 10 10 5 1 - 1 6 15 20 15 6 1 -1 7 21 35 35 21 7 1 - ......... - -It can be seen that the first eight rows of Pascal's triangle contain twelve -distinct numbers: 1, 2, 3, 4, 5, 6, 7, 10, 15, 20, 21 and 35. - -A positive integer n is called squarefree if no square of a prime divides n. -Of the twelve distinct numbers in the first eight rows of Pascal's triangle, -all except 4 and 20 are squarefree. The sum of the distinct squarefree numbers -in the first eight rows is 105. - -Find the sum of the distinct squarefree numbers in the first 51 rows of -Pascal's triangle. - -References: -- https://en.wikipedia.org/wiki/Pascal%27s_triangle -""" - -from __future__ import annotations - - -def get_pascal_triangle_unique_coefficients(depth: int) -> set[int]: - """ - Returns the unique coefficients of a Pascal's triangle of depth "depth". - - The coefficients of this triangle are symmetric. A further improvement to this - method could be to calculate the coefficients once per level. Nonetheless, - the current implementation is fast enough for the original problem. - - >>> get_pascal_triangle_unique_coefficients(1) - {1} - >>> get_pascal_triangle_unique_coefficients(2) - {1} - >>> get_pascal_triangle_unique_coefficients(3) - {1, 2} - >>> get_pascal_triangle_unique_coefficients(8) - {1, 2, 3, 4, 5, 6, 7, 35, 10, 15, 20, 21} - """ - coefficients = {1} - previous_coefficients = [1] - for _ in range(2, depth + 1): - coefficients_begins_one = [*previous_coefficients, 0] - coefficients_ends_one = [0, *previous_coefficients] - previous_coefficients = [] - for x, y in zip(coefficients_begins_one, coefficients_ends_one): - coefficients.add(x + y) - previous_coefficients.append(x + y) - return coefficients - - -def get_squarefrees(unique_coefficients: set[int]) -> set[int]: - """ - Calculates the squarefree numbers inside unique_coefficients. - - Based on the definition of a non-squarefree number, then any non-squarefree - n can be decomposed as n = p*p*r, where p is positive prime number and r - is a positive integer. - - Under the previous formula, any coefficient that is lower than p*p is - squarefree as r cannot be negative. On the contrary, if any r exists such - that n = p*p*r, then the number is non-squarefree. - - >>> get_squarefrees({1}) - {1} - >>> get_squarefrees({1, 2}) - {1, 2} - >>> get_squarefrees({1, 2, 3, 4, 5, 6, 7, 35, 10, 15, 20, 21}) - {1, 2, 3, 5, 6, 7, 35, 10, 15, 21} - """ - - non_squarefrees = set() - for number in unique_coefficients: - divisor = 2 - copy_number = number - while divisor**2 <= copy_number: - multiplicity = 0 - while copy_number % divisor == 0: - copy_number //= divisor - multiplicity += 1 - if multiplicity >= 2: - non_squarefrees.add(number) - break - divisor += 1 - - return unique_coefficients.difference(non_squarefrees) - - -def solution(n: int = 51) -> int: - """ - Returns the sum of squarefrees for a given Pascal's Triangle of depth n. - - >>> solution(1) - 1 - >>> solution(8) - 105 - >>> solution(9) - 175 - """ - unique_coefficients = get_pascal_triangle_unique_coefficients(n) - squarefrees = get_squarefrees(unique_coefficients) - return sum(squarefrees) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_205/__init__.py b/project_euler/problem_205/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_205/sol1.py b/project_euler/problem_205/sol1.py deleted file mode 100644 index 63b997b9f5a9..000000000000 --- a/project_euler/problem_205/sol1.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Project Euler Problem 205: https://projecteuler.net/problem=205 - -Peter has nine four-sided (pyramidal) dice, each with faces numbered 1, 2, 3, 4. -Colin has six six-sided (cubic) dice, each with faces numbered 1, 2, 3, 4, 5, 6. - -Peter and Colin roll their dice and compare totals: the highest total wins. -The result is a draw if the totals are equal. - -What is the probability that Pyramidal Peter beats Cubic Colin? -Give your answer rounded to seven decimal places in the form 0.abcdefg -""" - -from itertools import product - - -def total_frequency_distribution(sides_number: int, dice_number: int) -> list[int]: - """ - Returns frequency distribution of total - - >>> total_frequency_distribution(sides_number=6, dice_number=1) - [0, 1, 1, 1, 1, 1, 1] - - >>> total_frequency_distribution(sides_number=4, dice_number=2) - [0, 0, 1, 2, 3, 4, 3, 2, 1] - """ - - max_face_number = sides_number - max_total = max_face_number * dice_number - totals_frequencies = [0] * (max_total + 1) - - min_face_number = 1 - faces_numbers = range(min_face_number, max_face_number + 1) - for dice_numbers in product(faces_numbers, repeat=dice_number): - total = sum(dice_numbers) - totals_frequencies[total] += 1 - - return totals_frequencies - - -def solution() -> float: - """ - Returns probability that Pyramidal Peter beats Cubic Colin - rounded to seven decimal places in the form 0.abcdefg - - >>> solution() - 0.5731441 - """ - - peter_totals_frequencies = total_frequency_distribution( - sides_number=4, dice_number=9 - ) - colin_totals_frequencies = total_frequency_distribution( - sides_number=6, dice_number=6 - ) - - peter_wins_count = 0 - min_peter_total = 9 - max_peter_total = 4 * 9 - min_colin_total = 6 - for peter_total in range(min_peter_total, max_peter_total + 1): - peter_wins_count += peter_totals_frequencies[peter_total] * sum( - colin_totals_frequencies[min_colin_total:peter_total] - ) - - total_games_number = (4**9) * (6**6) - peter_win_probability = peter_wins_count / total_games_number - - rounded_peter_win_probability = round(peter_win_probability, ndigits=7) - - return rounded_peter_win_probability - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_206/__init__.py b/project_euler/problem_206/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_206/sol1.py b/project_euler/problem_206/sol1.py deleted file mode 100644 index ffac2b32aa77..000000000000 --- a/project_euler/problem_206/sol1.py +++ /dev/null @@ -1,74 +0,0 @@ -""" -Project Euler Problem 206: https://projecteuler.net/problem=206 - -Find the unique positive integer whose square has the form 1_2_3_4_5_6_7_8_9_0, -where each “_” is a single digit. - ------ - -Instead of computing every single permutation of that number and going -through a 10^9 search space, we can narrow it down considerably. - -If the square ends in a 0, then the square root must also end in a 0. Thus, -the last missing digit must be 0 and the square root is a multiple of 10. -We can narrow the search space down to the first 8 digits and multiply the -result of that by 10 at the end. - -Now the last digit is a 9, which can only happen if the square root ends -in a 3 or 7. From this point, we can try one of two different methods to find -the answer: - -1. Start at the lowest possible base number whose square would be in the -format, and count up. The base we would start at is 101010103, whose square is -the closest number to 10203040506070809. Alternate counting up by 4 and 6 so -the last digit of the base is always a 3 or 7. - -2. Start at the highest possible base number whose square would be in the -format, and count down. That base would be 138902663, whose square is the -closest number to 1929394959697989. Alternate counting down by 6 and 4 so the -last digit of the base is always a 3 or 7. - -The solution does option 2 because the answer happens to be much closer to the -starting point. -""" - - -def is_square_form(num: int) -> bool: - """ - Determines if num is in the form 1_2_3_4_5_6_7_8_9 - - >>> is_square_form(1) - False - >>> is_square_form(112233445566778899) - True - >>> is_square_form(123456789012345678) - False - """ - digit = 9 - - while num > 0: - if num % 10 != digit: - return False - num //= 100 - digit -= 1 - - return True - - -def solution() -> int: - """ - Returns the first integer whose square is of the form 1_2_3_4_5_6_7_8_9_0 - """ - num = 138902663 - - while not is_square_form(num * num): - if num % 10 == 3: - num -= 6 # (3 - 6) % 10 = 7 - else: - num -= 4 # (7 - 4) % 10 = 3 - - return num * 10 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_207/__init__.py b/project_euler/problem_207/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_207/sol1.py b/project_euler/problem_207/sol1.py deleted file mode 100644 index c83dc1d4aaef..000000000000 --- a/project_euler/problem_207/sol1.py +++ /dev/null @@ -1,100 +0,0 @@ -""" - -Project Euler Problem 207: https://projecteuler.net/problem=207 - -Problem Statement: -For some positive integers k, there exists an integer partition of the form -4**t = 2**t + k, where 4**t, 2**t, and k are all positive integers and t is a real -number. The first two such partitions are 4**1 = 2**1 + 2 and -4**1.5849625... = 2**1.5849625... + 6. -Partitions where t is also an integer are called perfect. -For any m ≥ 1 let P(m) be the proportion of such partitions that are perfect with -k ≤ m. -Thus P(6) = 1/2. -In the following table are listed some values of P(m) - - P(5) = 1/1 - P(10) = 1/2 - P(15) = 2/3 - P(20) = 1/2 - P(25) = 1/2 - P(30) = 2/5 - ... - P(180) = 1/4 - P(185) = 3/13 - -Find the smallest m for which P(m) < 1/12345 - -Solution: -Equation 4**t = 2**t + k solved for t gives: - t = log2(sqrt(4*k+1)/2 + 1/2) -For t to be real valued, sqrt(4*k+1) must be an integer which is implemented in -function check_t_real(k). For a perfect partition t must be an integer. -To speed up significantly the search for partitions, instead of incrementing k by one -per iteration, the next valid k is found by k = (i**2 - 1) / 4 with an integer i and -k has to be a positive integer. If this is the case a partition is found. The partition -is perfect if t os an integer. The integer i is increased with increment 1 until the -proportion perfect partitions / total partitions drops under the given value. - -""" - -import math - - -def check_partition_perfect(positive_integer: int) -> bool: - """ - - Check if t = f(positive_integer) = log2(sqrt(4*positive_integer+1)/2 + 1/2) is a - real number. - - >>> check_partition_perfect(2) - True - - >>> check_partition_perfect(6) - False - - """ - - exponent = math.log2(math.sqrt(4 * positive_integer + 1) / 2 + 1 / 2) - - return exponent == int(exponent) - - -def solution(max_proportion: float = 1 / 12345) -> int: - """ - Find m for which the proportion of perfect partitions to total partitions is lower - than max_proportion - - >>> solution(1) > 5 - True - - >>> solution(1/2) > 10 - True - - >>> solution(3 / 13) > 185 - True - - """ - - total_partitions = 0 - perfect_partitions = 0 - - integer = 3 - while True: - partition_candidate = (integer**2 - 1) / 4 - # if candidate is an integer, then there is a partition for k - if partition_candidate == int(partition_candidate): - partition_candidate = int(partition_candidate) - total_partitions += 1 - if check_partition_perfect(partition_candidate): - perfect_partitions += 1 - if ( - perfect_partitions > 0 - and perfect_partitions / total_partitions < max_proportion - ): - return int(partition_candidate) - integer += 1 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_234/__init__.py b/project_euler/problem_234/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_234/sol1.py b/project_euler/problem_234/sol1.py deleted file mode 100644 index 7b20a2206ed2..000000000000 --- a/project_euler/problem_234/sol1.py +++ /dev/null @@ -1,119 +0,0 @@ -""" -https://projecteuler.net/problem=234 - -For an integer n ≥ 4, we define the lower prime square root of n, denoted by -lps(n), as the largest prime ≤ √n and the upper prime square root of n, ups(n), -as the smallest prime ≥ √n. - -So, for example, lps(4) = 2 = ups(4), lps(1000) = 31, ups(1000) = 37. Let us -call an integer n ≥ 4 semidivisible, if one of lps(n) and ups(n) divides n, -but not both. - -The sum of the semidivisible numbers not exceeding 15 is 30, the numbers are 8, -10 and 12. 15 is not semidivisible because it is a multiple of both lps(15) = 3 -and ups(15) = 5. As a further example, the sum of the 92 semidivisible numbers -up to 1000 is 34825. - -What is the sum of all semidivisible numbers not exceeding 999966663333 ? -""" - -import math - - -def prime_sieve(n: int) -> list: - """ - Sieve of Erotosthenes - Function to return all the prime numbers up to a certain number - https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes - >>> prime_sieve(3) - [2] - >>> prime_sieve(50) - [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] - """ - is_prime = [True] * n - is_prime[0] = False - is_prime[1] = False - is_prime[2] = True - - for i in range(3, int(n**0.5 + 1), 2): - index = i * 2 - while index < n: - is_prime[index] = False - index = index + i - - primes = [2] - - for i in range(3, n, 2): - if is_prime[i]: - primes.append(i) - - return primes - - -def solution(limit: int = 999_966_663_333) -> int: - """ - Computes the solution to the problem up to the specified limit - >>> solution(1000) - 34825 - - >>> solution(10_000) - 1134942 - - >>> solution(100_000) - 36393008 - """ - primes_upper_bound = math.floor(math.sqrt(limit)) + 100 - primes = prime_sieve(primes_upper_bound) - - matches_sum = 0 - prime_index = 0 - last_prime = primes[prime_index] - - while (last_prime**2) <= limit: - next_prime = primes[prime_index + 1] - - lower_bound = last_prime**2 - upper_bound = next_prime**2 - - # Get numbers divisible by lps(current) - current = lower_bound + last_prime - while upper_bound > current <= limit: - matches_sum += current - current += last_prime - - # Reset the upper_bound - while (upper_bound - next_prime) > limit: - upper_bound -= next_prime - - # Add the numbers divisible by ups(current) - current = upper_bound - next_prime - while current > lower_bound: - matches_sum += current - current -= next_prime - - # Remove the numbers divisible by both ups and lps - current = 0 - while upper_bound > current <= limit: - if current <= lower_bound: - # Increment the current number - current += last_prime * next_prime - continue - - if current > limit: - break - - # Remove twice since it was added by both ups and lps - matches_sum -= current * 2 - - # Increment the current number - current += last_prime * next_prime - - # Setup for next pair - last_prime = next_prime - prime_index += 1 - - return matches_sum - - -if __name__ == "__main__": - print(solution()) diff --git a/project_euler/problem_301/__init__.py b/project_euler/problem_301/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_301/sol1.py b/project_euler/problem_301/sol1.py deleted file mode 100644 index 4b494033c92d..000000000000 --- a/project_euler/problem_301/sol1.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Project Euler Problem 301: https://projecteuler.net/problem=301 - -Problem Statement: -Nim is a game played with heaps of stones, where two players take -it in turn to remove any number of stones from any heap until no stones remain. - -We'll consider the three-heap normal-play version of -Nim, which works as follows: -- At the start of the game there are three heaps of stones. -- On each player's turn, the player may remove any positive - number of stones from any single heap. -- The first player unable to move (because no stones remain) loses. - -If (n1, n2, n3) indicates a Nim position consisting of heaps of size -n1, n2, and n3, then there is a simple function, which you may look up -or attempt to deduce for yourself, X(n1, n2, n3) that returns: -- zero if, with perfect strategy, the player about to - move will eventually lose; or -- non-zero if, with perfect strategy, the player about - to move will eventually win. - -For example X(1,2,3) = 0 because, no matter what the current player does, -the opponent can respond with a move that leaves two heaps of equal size, -at which point every move by the current player can be mirrored by the -opponent until no stones remain; so the current player loses. To illustrate: -- current player moves to (1,2,1) -- opponent moves to (1,0,1) -- current player moves to (0,0,1) -- opponent moves to (0,0,0), and so wins. - -For how many positive integers n <= 2^30 does X(n,2n,3n) = 0? -""" - - -def solution(exponent: int = 30) -> int: - """ - For any given exponent x >= 0, 1 <= n <= 2^x. - This function returns how many Nim games are lost given that - each Nim game has three heaps of the form (n, 2*n, 3*n). - >>> solution(0) - 1 - >>> solution(2) - 3 - >>> solution(10) - 144 - """ - # To find how many total games were lost for a given exponent x, - # we need to find the Fibonacci number F(x+2). - fibonacci_index = exponent + 2 - phi = (1 + 5**0.5) / 2 - fibonacci = (phi**fibonacci_index - (phi - 1) ** fibonacci_index) / 5**0.5 - - return int(fibonacci) - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_493/__init__.py b/project_euler/problem_493/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_493/sol1.py b/project_euler/problem_493/sol1.py deleted file mode 100644 index 4d96c6c3207e..000000000000 --- a/project_euler/problem_493/sol1.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Project Euler Problem 493: https://projecteuler.net/problem=493 - -70 coloured balls are placed in an urn, 10 for each of the seven rainbow colours. -What is the expected number of distinct colours in 20 randomly picked balls? -Give your answer with nine digits after the decimal point (a.bcdefghij). - ------ - -This combinatorial problem can be solved by decomposing the problem into the -following steps: -1. Calculate the total number of possible picking combinations -[combinations := binom_coeff(70, 20)] -2. Calculate the number of combinations with one colour missing -[missing := binom_coeff(60, 20)] -3. Calculate the probability of one colour missing -[missing_prob := missing / combinations] -4. Calculate the probability of no colour missing -[no_missing_prob := 1 - missing_prob] -5. Calculate the expected number of distinct colours -[expected = 7 * no_missing_prob] - -References: -- https://en.wikipedia.org/wiki/Binomial_coefficient -""" - -import math - -BALLS_PER_COLOUR = 10 -NUM_COLOURS = 7 -NUM_BALLS = BALLS_PER_COLOUR * NUM_COLOURS - - -def solution(num_picks: int = 20) -> str: - """ - Calculates the expected number of distinct colours - - >>> solution(10) - '5.669644129' - - >>> solution(30) - '6.985042712' - """ - total = math.comb(NUM_BALLS, num_picks) - missing_colour = math.comb(NUM_BALLS - BALLS_PER_COLOUR, num_picks) - - result = NUM_COLOURS * (1 - missing_colour / total) - - return f"{result:.9f}" - - -if __name__ == "__main__": - print(solution(20)) diff --git a/project_euler/problem_551/__init__.py b/project_euler/problem_551/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_551/sol1.py b/project_euler/problem_551/sol1.py deleted file mode 100644 index 100e9d41dd31..000000000000 --- a/project_euler/problem_551/sol1.py +++ /dev/null @@ -1,200 +0,0 @@ -""" -Sum of digits sequence -Problem 551 - -Let a(0), a(1),... be an integer sequence defined by: - a(0) = 1 - for n >= 1, a(n) is the sum of the digits of all preceding terms - -The sequence starts with 1, 1, 2, 4, 8, ... -You are given a(10^6) = 31054319. - -Find a(10^15) -""" - -ks = range(2, 20 + 1) -base = [10**k for k in range(ks[-1] + 1)] -memo: dict[int, dict[int, list[list[int]]]] = {} - - -def next_term(a_i, k, i, n): - """ - Calculates and updates a_i in-place to either the n-th term or the - smallest term for which c > 10^k when the terms are written in the form: - a(i) = b * 10^k + c - - For any a(i), if digitsum(b) and c have the same value, the difference - between subsequent terms will be the same until c >= 10^k. This difference - is cached to greatly speed up the computation. - - Arguments: - a_i -- array of digits starting from the one's place that represent - the i-th term in the sequence - k -- k when terms are written in the from a(i) = b*10^k + c. - Term are calulcated until c > 10^k or the n-th term is reached. - i -- position along the sequence - n -- term to calculate up to if k is large enough - - Return: a tuple of difference between ending term and starting term, and - the number of terms calculated. ex. if starting term is a_0=1, and - ending term is a_10=62, then (61, 9) is returned. - """ - # ds_b - digitsum(b) - ds_b = sum(a_i[j] for j in range(k, len(a_i))) - c = sum(a_i[j] * base[j] for j in range(min(len(a_i), k))) - - diff, dn = 0, 0 - max_dn = n - i - - sub_memo = memo.get(ds_b) - - if sub_memo is not None: - jumps = sub_memo.get(c) - - if jumps is not None and len(jumps) > 0: - # find and make the largest jump without going over - max_jump = -1 - for _k in range(len(jumps) - 1, -1, -1): - if jumps[_k][2] <= k and jumps[_k][1] <= max_dn: - max_jump = _k - break - - if max_jump >= 0: - diff, dn, _kk = jumps[max_jump] - # since the difference between jumps is cached, add c - new_c = diff + c - for j in range(min(k, len(a_i))): - new_c, a_i[j] = divmod(new_c, 10) - if new_c > 0: - add(a_i, k, new_c) - - else: - sub_memo[c] = [] - else: - sub_memo = {c: []} - memo[ds_b] = sub_memo - - if dn >= max_dn or c + diff >= base[k]: - return diff, dn - - if k > ks[0]: - while True: - # keep doing smaller jumps - _diff, terms_jumped = next_term(a_i, k - 1, i + dn, n) - diff += _diff - dn += terms_jumped - - if dn >= max_dn or c + diff >= base[k]: - break - else: - # would be too small a jump, just compute sequential terms instead - _diff, terms_jumped = compute(a_i, k, i + dn, n) - diff += _diff - dn += terms_jumped - - jumps = sub_memo[c] - - # keep jumps sorted by # of terms skipped - j = 0 - while j < len(jumps): - if jumps[j][1] > dn: - break - j += 1 - - # cache the jump for this value digitsum(b) and c - sub_memo[c].insert(j, (diff, dn, k)) - return (diff, dn) - - -def compute(a_i, k, i, n): - """ - same as next_term(a_i, k, i, n) but computes terms without memoizing results. - """ - if i >= n: - return 0, i - if k > len(a_i): - a_i.extend([0 for _ in range(k - len(a_i))]) - - # note: a_i -> b * 10^k + c - # ds_b -> digitsum(b) - # ds_c -> digitsum(c) - start_i = i - ds_b, ds_c, diff = 0, 0, 0 - for j in range(len(a_i)): - if j >= k: - ds_b += a_i[j] - else: - ds_c += a_i[j] - - while i < n: - i += 1 - addend = ds_c + ds_b - diff += addend - ds_c = 0 - for j in range(k): - s = a_i[j] + addend - addend, a_i[j] = divmod(s, 10) - - ds_c += a_i[j] - - if addend > 0: - break - - if addend > 0: - add(a_i, k, addend) - return diff, i - start_i - - -def add(digits, k, addend): - """ - adds addend to digit array given in digits - starting at index k - """ - for j in range(k, len(digits)): - s = digits[j] + addend - if s >= 10: - quotient, digits[j] = divmod(s, 10) - addend = addend // 10 + quotient - else: - digits[j] = s - addend = addend // 10 - - if addend == 0: - break - - while addend > 0: - addend, digit = divmod(addend, 10) - digits.append(digit) - - -def solution(n: int = 10**15) -> int: - """ - returns n-th term of sequence - - >>> solution(10) - 62 - - >>> solution(10**6) - 31054319 - - >>> solution(10**15) - 73597483551591773 - """ - - digits = [1] - i = 1 - dn = 0 - while True: - diff, terms_jumped = next_term(digits, 20, i + dn, n) - dn += terms_jumped - if dn == n - i: - break - - a_n = 0 - for j in range(len(digits)): - a_n += digits[j] * 10**j - return a_n - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_587/__init__.py b/project_euler/problem_587/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_587/sol1.py b/project_euler/problem_587/sol1.py deleted file mode 100644 index dde5c16103ac..000000000000 --- a/project_euler/problem_587/sol1.py +++ /dev/null @@ -1,94 +0,0 @@ -""" -Project Euler Problem 587: https://projecteuler.net/problem=587 - -A square is drawn around a circle as shown in the diagram below on the left. -We shall call the blue shaded region the L-section. -A line is drawn from the bottom left of the square to the top right -as shown in the diagram on the right. -We shall call the orange shaded region a concave triangle. - -It should be clear that the concave triangle occupies exactly half of the L-section. - -Two circles are placed next to each other horizontally, -a rectangle is drawn around both circles, and -a line is drawn from the bottom left to the top right as shown in the diagram below. - -This time the concave triangle occupies approximately 36.46% of the L-section. - -If n circles are placed next to each other horizontally, -a rectangle is drawn around the n circles, and -a line is drawn from the bottom left to the top right, -then it can be shown that the least value of n -for which the concave triangle occupies less than 10% of the L-section is n = 15. - -What is the least value of n -for which the concave triangle occupies less than 0.1% of the L-section? -""" - -from itertools import count -from math import asin, pi, sqrt - - -def circle_bottom_arc_integral(point: float) -> float: - """ - Returns integral of circle bottom arc y = 1 / 2 - sqrt(1 / 4 - (x - 1 / 2) ^ 2) - - >>> circle_bottom_arc_integral(0) - 0.39269908169872414 - - >>> circle_bottom_arc_integral(1 / 2) - 0.44634954084936207 - - >>> circle_bottom_arc_integral(1) - 0.5 - """ - - return ( - (1 - 2 * point) * sqrt(point - point**2) + 2 * point + asin(sqrt(1 - point)) - ) / 4 - - -def concave_triangle_area(circles_number: int) -> float: - """ - Returns area of concave triangle - - >>> concave_triangle_area(1) - 0.026825229575318944 - - >>> concave_triangle_area(2) - 0.01956236140083944 - """ - - intersection_y = (circles_number + 1 - sqrt(2 * circles_number)) / ( - 2 * (circles_number**2 + 1) - ) - intersection_x = circles_number * intersection_y - - triangle_area = intersection_x * intersection_y / 2 - concave_region_area = circle_bottom_arc_integral( - 1 / 2 - ) - circle_bottom_arc_integral(intersection_x) - - return triangle_area + concave_region_area - - -def solution(fraction: float = 1 / 1000) -> int: - """ - Returns least value of n - for which the concave triangle occupies less than fraction of the L-section - - >>> solution(1 / 10) - 15 - """ - - l_section_area = (1 - pi / 4) / 4 - - for n in count(1): - if concave_triangle_area(n) / l_section_area < fraction: - return n - - return -1 - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/project_euler/problem_686/__init__.py b/project_euler/problem_686/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_686/sol1.py b/project_euler/problem_686/sol1.py deleted file mode 100644 index 99a317cd1451..000000000000 --- a/project_euler/problem_686/sol1.py +++ /dev/null @@ -1,160 +0,0 @@ -""" -Project Euler Problem 686: https://projecteuler.net/problem=686 - -2^7 = 128 is the first power of two whose leading digits are "12". -The next power of two whose leading digits are "12" is 2^80. - -Define p(L,n) to be the nth-smallest value of j such that -the base 10 representation of 2^j begins with the digits of L. - -So p(12, 1) = 7 and p(12, 2) = 80. - -You are given that p(123, 45) = 12710. - -Find p(123, 678910). -""" - -import math - - -def log_difference(number: int) -> float: - """ - This function returns the decimal value of a number multiplied with log(2) - Since the problem is on powers of two, finding the powers of two with - large exponents is time consuming. Hence we use log to reduce compute time. - - We can find out that the first power of 2 with starting digits 123 is 90. - Computing 2^90 is time consuming. - Hence we find log(2^90) = 90*log(2) = 27.092699609758302 - But we require only the decimal part to determine whether the power starts with 123. - So we just return the decimal part of the log product. - Therefore we return 0.092699609758302 - - >>> log_difference(90) - 0.092699609758302 - >>> log_difference(379) - 0.090368356648852 - - """ - - log_number = math.log(2, 10) * number - difference = round((log_number - int(log_number)), 15) - - return difference - - -def solution(number: int = 678910) -> int: - """ - This function calculates the power of two which is nth (n = number) - smallest value of power of 2 - such that the starting digits of the 2^power is 123. - - For example the powers of 2 for which starting digits is 123 are: - 90, 379, 575, 864, 1060, 1545, 1741, 2030, 2226, 2515 and so on. - 90 is the first power of 2 whose starting digits are 123, - 379 is second power of 2 whose starting digits are 123, - and so on. - - So if number = 10, then solution returns 2515 as we observe from above series. - - We will define a lowerbound and upperbound. - lowerbound = log(1.23), upperbound = log(1.24) - because we need to find the powers that yield 123 as starting digits. - - log(1.23) = 0.08990511143939792, log(1,24) = 0.09342168516223506. - We use 1.23 and not 12.3 or 123, because log(1.23) yields only decimal value - which is less than 1. - log(12.3) will be same decimal value but 1 added to it - which is log(12.3) = 1.093421685162235. - We observe that decimal value remains same no matter 1.23 or 12.3 - Since we use the function log_difference(), - which returns the value that is only decimal part, using 1.23 is logical. - - If we see, 90*log(2) = 27.092699609758302, - decimal part = 0.092699609758302, which is inside the range of lowerbound - and upperbound. - - If we compute the difference between all the powers which lead to 123 - starting digits is as follows: - - 379 - 90 = 289 - 575 - 379 = 196 - 864 - 575 = 289 - 1060 - 864 = 196 - - We see a pattern here. The difference is either 196 or 289 = 196 + 93. - - Hence to optimize the algorithm we will increment by 196 or 93 depending upon the - log_difference() value. - - Let's take for example 90. - Since 90 is the first power leading to staring digits as 123, - we will increment iterator by 196. - Because the difference between any two powers leading to 123 - as staring digits is greater than or equal to 196. - After incrementing by 196 we get 286. - - log_difference(286) = 0.09457875989861 which is greater than upperbound. - The next power is 379, and we need to add 93 to get there. - The iterator will now become 379, - which is the next power leading to 123 as starting digits. - - Let's take 1060. We increment by 196, we get 1256. - log_difference(1256) = 0.09367455396034, - Which is greater than upperbound hence we increment by 93. Now iterator is 1349. - log_difference(1349) = 0.08946415071057 which is less than lowerbound. - The next power is 1545 and we need to add 196 to get 1545. - - Conditions are as follows: - - 1) If we find a power whose log_difference() is in the range of - lower and upperbound, we will increment by 196. - which implies that the power is a number which will lead to 123 as starting digits. - 2) If we find a power, whose log_difference() is greater than or equal upperbound, - we will increment by 93. - 3) if log_difference() < lowerbound, we increment by 196. - - Reference to the above logic: - https://math.stackexchange.com/questions/4093970/powers-of-2-starting-with-123-does-a-pattern-exist - - >>> solution(1000) - 284168 - - >>> solution(56000) - 15924915 - - >>> solution(678910) - 193060223 - - """ - - power_iterator = 90 - position = 0 - - lower_limit = math.log(1.23, 10) - upper_limit = math.log(1.24, 10) - previous_power = 0 - - while position < number: - difference = log_difference(power_iterator) - - if difference >= upper_limit: - power_iterator += 93 - - elif difference < lower_limit: - power_iterator += 196 - - else: - previous_power = power_iterator - power_iterator += 196 - position += 1 - - return previous_power - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - print(f"{solution() = }") diff --git a/project_euler/problem_800/__init__.py b/project_euler/problem_800/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/project_euler/problem_800/sol1.py b/project_euler/problem_800/sol1.py deleted file mode 100644 index f887787bcbc6..000000000000 --- a/project_euler/problem_800/sol1.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -Project Euler Problem 800: https://projecteuler.net/problem=800 - -An integer of the form p^q q^p with prime numbers p != q is called a hybrid-integer. -For example, 800 = 2^5 5^2 is a hybrid-integer. - -We define C(n) to be the number of hybrid-integers less than or equal to n. -You are given C(800) = 2 and C(800^800) = 10790 - -Find C(800800^800800) -""" - -from math import isqrt, log2 - - -def calculate_prime_numbers(max_number: int) -> list[int]: - """ - Returns prime numbers below max_number - - >>> calculate_prime_numbers(10) - [2, 3, 5, 7] - """ - - is_prime = [True] * max_number - for i in range(2, isqrt(max_number - 1) + 1): - if is_prime[i]: - for j in range(i**2, max_number, i): - is_prime[j] = False - - return [i for i in range(2, max_number) if is_prime[i]] - - -def solution(base: int = 800800, degree: int = 800800) -> int: - """ - Returns the number of hybrid-integers less than or equal to base^degree - - >>> solution(800, 1) - 2 - - >>> solution(800, 800) - 10790 - """ - - upper_bound = degree * log2(base) - max_prime = int(upper_bound) - prime_numbers = calculate_prime_numbers(max_prime) - - hybrid_integers_count = 0 - left = 0 - right = len(prime_numbers) - 1 - while left < right: - while ( - prime_numbers[right] * log2(prime_numbers[left]) - + prime_numbers[left] * log2(prime_numbers[right]) - > upper_bound - ): - right -= 1 - hybrid_integers_count += right - left - left += 1 - - return hybrid_integers_count - - -if __name__ == "__main__": - print(f"{solution() = }") diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index bb8657183164..000000000000 --- a/pyproject.toml +++ /dev/null @@ -1,131 +0,0 @@ -[tool.ruff] -target-version = "py312" - -output-format = "full" -lint.select = [ - # https://beta.ruff.rs/docs/rules - "A", # flake8-builtins - "ARG", # flake8-unused-arguments - "ASYNC", # flake8-async - "B", # flake8-bugbear - "BLE", # flake8-blind-except - "C4", # flake8-comprehensions - "C90", # McCabe cyclomatic complexity - "DJ", # flake8-django - "DTZ", # flake8-datetimez - "E", # pycodestyle - "EM", # flake8-errmsg - "EXE", # flake8-executable - "F", # Pyflakes - "FA", # flake8-future-annotations - "FLY", # flynt - "G", # flake8-logging-format - "I", # isort - "ICN", # flake8-import-conventions - "INP", # flake8-no-pep420 - "INT", # flake8-gettext - "ISC", # flake8-implicit-str-concat - "N", # pep8-naming - "NPY", # NumPy-specific rules - "PD", # pandas-vet - "PGH", # pygrep-hooks - "PIE", # flake8-pie - "PL", # Pylint - "PT", # flake8-pytest-style - "PYI", # flake8-pyi - "RSE", # flake8-raise - "RUF", # Ruff-specific rules - "S", # flake8-bandit - "SIM", # flake8-simplify - "SLF", # flake8-self - "T10", # flake8-debugger - "TD", # flake8-todos - "TID", # flake8-tidy-imports - "UP", # pyupgrade - "W", # pycodestyle - "YTT", # flake8-2020 - # "ANN", # flake8-annotations # FIX ME? - # "COM", # flake8-commas - # "D", # pydocstyle -- FIX ME? - # "ERA", # eradicate -- DO NOT FIX - # "FBT", # flake8-boolean-trap # FIX ME - # "PTH", # flake8-use-pathlib # FIX ME - # "Q", # flake8-quotes - # "RET", # flake8-return # FIX ME? - # "T20", # flake8-print - # "TCH", # flake8-type-checking - # "TRY", # tryceratops -] -lint.ignore = [ - # `ruff rule S101` for a description of that rule - "B904", # Within an `except` clause, raise exceptions with `raise ... from err` -- FIX ME - "B905", # `zip()` without an explicit `strict=` parameter -- FIX ME - "EM101", # Exception must not use a string literal, assign to variable first - "EXE001", # Shebang is present but file is not executable -- DO NOT FIX - "G004", # Logging statement uses f-string - "PLC1901", # `{}` can be simplified to `{}` as an empty string is falsey - "PLW060", # Using global for `{name}` but no assignment is done -- DO NOT FIX - "PLW2901", # PLW2901: Redefined loop variable -- FIX ME - "PT011", # `pytest.raises(Exception)` is too broad, set the `match` parameter or use a more specific exception - "PT018", # Assertion should be broken down into multiple parts - "S101", # Use of `assert` detected -- DO NOT FIX - "S311", # Standard pseudo-random generators are not suitable for cryptographic purposes -- FIX ME - "SLF001", # Private member accessed: `_Iterator` -- FIX ME - "UP038", # Use `X | Y` in `{}` call instead of `(X, Y)` -- DO NOT FIX -] - -lint.per-file-ignores."data_structures/hashing/tests/test_hash_map.py" = [ - "BLE001", -] -lint.per-file-ignores."hashes/enigma_machine.py" = [ - "BLE001", -] -lint.per-file-ignores."machine_learning/sequential_minimum_optimization.py" = [ - "SIM115", -] -lint.per-file-ignores."matrix/sherman_morrison.py" = [ - "SIM103", -] -lint.per-file-ignores."other/l*u_cache.py" = [ - "RUF012", -] -lint.per-file-ignores."physics/newtons_second_law_of_motion.py" = [ - "BLE001", -] -lint.per-file-ignores."project_euler/problem_099/sol1.py" = [ - "SIM115", -] -lint.per-file-ignores."sorts/external_sort.py" = [ - "SIM115", -] -lint.mccabe.max-complexity = 17 # default: 10 -lint.pylint.allow-magic-value-types = [ - "float", - "int", - "str", -] -lint.pylint.max-args = 10 # default: 5 -lint.pylint.max-branches = 20 # default: 12 -lint.pylint.max-returns = 8 # default: 6 -lint.pylint.max-statements = 88 # default: 50 - -[tool.codespell] -ignore-words-list = "3rt,ans,bitap,crate,damon,fo,followings,hist,iff,kwanza,manuel,mater,secant,som,sur,tim,toi,zar" -skip = "./.*,*.json,ciphers/prehistoric_men.txt,project_euler/problem_022/p022_names.txt,pyproject.toml,strings/dictionary.txt,strings/words.txt" - -[tool.pytest.ini_options] -markers = [ - "mat_ops: mark a test as utilizing matrix operations.", -] -addopts = [ - "--durations=10", - "--doctest-modules", - "--showlocals", -] - -[tool.coverage.report] -omit = [ - ".env/*", - "project_euler/*", -] -sort = "Cover" diff --git a/quantum/README.md b/quantum/README.md deleted file mode 100644 index 3ce364574486..000000000000 --- a/quantum/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Welcome to Quantum Algorithms - -Started at https://github.com/TheAlgorithms/Python/issues/1831 - -* D-Wave: https://www.dwavesys.com and https://github.com/dwavesystems -* Google: https://research.google/teams/applied-science/quantum -* IBM: https://qiskit.org and https://github.com/Qiskit -* Rigetti: https://rigetti.com and https://github.com/rigetti -* Zapata: https://www.zapatacomputing.com and https://github.com/zapatacomputing - -## IBM Qiskit -- Start using by installing `pip install qiskit`, refer the [docs](https://qiskit.org/documentation/install.html) for more info. -- Tutorials & References - - https://github.com/Qiskit/qiskit-tutorials - - https://quantum-computing.ibm.com/docs/iql/first-circuit - - https://medium.com/qiskit/how-to-program-a-quantum-computer-982a9329ed02 - -## Google Cirq -- Start using by installing `python -m pip install cirq`, refer the [docs](https://quantumai.google/cirq/start/install) for more info. -- Tutorials & references - - https://github.com/quantumlib/cirq - - https://quantumai.google/cirq/experiments - - https://tanishabassan.medium.com/quantum-programming-with-google-cirq-3209805279bc diff --git a/quantum/__init__.py b/quantum/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/quantum/bb84.py.DISABLED.txt b/quantum/bb84.py.DISABLED.txt deleted file mode 100644 index e90a11c2aef3..000000000000 --- a/quantum/bb84.py.DISABLED.txt +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env python3 -""" -Simulation of the Quantum Key Distribution (QKD) protocol called BB84, -created by Charles Bennett and Gilles Brassard in 1984. - -BB84 is a key-distribution protocol that ensures secure key distribution -using qubits instead of classical bits. The generated key is the result -of simulating a quantum circuit. Our algorithm to construct the circuit -is as follows: - -Alice generates two binary strings. One encodes the basis for each qubit: - - - 0 -> {0,1} basis. - - 1 -> {+,-} basis. - -The other encodes the state: - - - 0 -> |0> or |+>. - - 1 -> |1> or |->. - -Bob also generates a binary string and uses the same convention to choose -a basis for measurement. Based on the following results, we follow the -algorithm below: - -X|0> = |1> - -H|0> = |+> - -HX|0> = |-> - -1. Whenever Alice wants to encode 1 in a qubit, she applies an -X (NOT) gate to the qubit. To encode 0, no action is needed. - -2. Wherever she wants to encode it in the {+,-} basis, she applies -an H (Hadamard) gate. No action is necessary to encode a qubit in -the {0,1} basis. - -3. She then sends the qubits to Bob (symbolically represented in -this circuit using wires). - -4. Bob measures the qubits according to his binary string for -measurement. To measure a qubit in the {+,-} basis, he applies -an H gate to the corresponding qubit and then performs a measurement. - -References: -https://en.wikipedia.org/wiki/BB84 -https://qiskit.org/textbook/ch-algorithms/quantum-key-distribution.html -""" -import numpy as np -import qiskit - - -def bb84(key_len: int = 8, seed: int | None = None) -> str: - """ - Performs the BB84 protocol using a key made of `key_len` bits. - The two parties in the key distribution are called Alice and Bob. - Args: - key_len: The length of the generated key in bits. The default is 8. - - seed: Seed for the random number generator. - Mostly used for testing. Default is None. - - Returns: - key: The key generated using BB84 protocol. - - >>> bb84(16, seed=0) - '0111110111010010' - - >>> bb84(8, seed=0) - '10110001' - """ - # Set up the random number generator. - rng = np.random.default_rng(seed=seed) - - # Roughly 25% of the qubits will contribute to the key. - # So we take more than we need. - num_qubits = 6 * key_len - # Measurement basis for Alice's qubits. - alice_basis = rng.integers(2, size=num_qubits) - # The set of states Alice will prepare. - alice_state = rng.integers(2, size=num_qubits) - # Measurement basis for Bob's qubits. - bob_basis = rng.integers(2, size=num_qubits) - - # Quantum Circuit to simulate BB84 - bb84_circ = qiskit.QuantumCircuit(num_qubits, name="BB84") - - # Alice prepares her qubits according to rules above. - for index, _ in enumerate(alice_basis): - if alice_state[index] == 1: - bb84_circ.x(index) - if alice_basis[index] == 1: - bb84_circ.h(index) - bb84_circ.barrier() - - # Bob measures the received qubits according to rules above. - for index, _ in enumerate(bob_basis): - if bob_basis[index] == 1: - bb84_circ.h(index) - - bb84_circ.barrier() - bb84_circ.measure_all() - - # Simulate the quantum circuit. - sim = qiskit.Aer.get_backend("aer_simulator") - # We only need to run one shot because the key is unique. - # Multiple shots will produce the same key. - job = qiskit.execute(bb84_circ, sim, shots=1, seed_simulator=seed) - # Returns the result of measurement. - result = job.result().get_counts(bb84_circ).most_frequent() - - # Extracting the generated key from the simulation results. - # Only keep measurement results where Alice and Bob chose the same basis. - gen_key = "".join( - [ - result_bit - for alice_basis_bit, bob_basis_bit, result_bit in zip( - alice_basis, bob_basis, result - ) - if alice_basis_bit == bob_basis_bit - ] - ) - - # Get final key. Pad with 0 if too short, otherwise truncate. - key = gen_key[:key_len] if len(gen_key) >= key_len else gen_key.ljust(key_len, "0") - return key - - -if __name__ == "__main__": - print(f"The generated key is : {bb84(8, seed=0)}") - from doctest import testmod - - testmod() diff --git a/quantum/deutsch_jozsa.py.DISABLED.txt b/quantum/deutsch_jozsa.py.DISABLED.txt deleted file mode 100644 index 5c8a379debfc..000000000000 --- a/quantum/deutsch_jozsa.py.DISABLED.txt +++ /dev/null @@ -1,125 +0,0 @@ -# DISABLED!! -#!/usr/bin/env python3 -""" -Deutsch-Jozsa Algorithm is one of the first examples of a quantum -algorithm that is exponentially faster than any possible deterministic -classical algorithm - -Premise: -We are given a hidden Boolean function f, -which takes as input a string of bits, and returns either 0 or 1: - -f({x0,x1,x2,...}) -> 0 or 1, where xn is 0 or 1 - -The property of the given Boolean function is that it is guaranteed to -either be balanced or constant. A constant function returns all 0's -or all 1's for any input, while a balanced function returns 0's for -exactly half of all inputs and 1's for the other half. Our task is to -determine whether the given function is balanced or constant. - -References: -- https://en.wikipedia.org/wiki/Deutsch-Jozsa_algorithm -- https://qiskit.org/textbook/ch-algorithms/deutsch-jozsa.html -""" - -import numpy as np -import qiskit - - -def dj_oracle(case: str, num_qubits: int) -> qiskit.QuantumCircuit: - """ - Returns a Quantum Circuit for the Oracle function. - The circuit returned can represent balanced or constant function, - according to the arguments passed - """ - # This circuit has num_qubits+1 qubits: the size of the input, - # plus one output qubit - oracle_qc = qiskit.QuantumCircuit(num_qubits + 1) - - # First, let's deal with the case in which oracle is balanced - if case == "balanced": - # First generate a random number that tells us which CNOTs to - # wrap in X-gates: - b = np.random.randint(1, 2**num_qubits) - # Next, format 'b' as a binary string of length 'n', padded with zeros: - b_str = format(b, f"0{num_qubits}b") - # Next, we place the first X-gates. Each digit in our binary string - # corresponds to a qubit, if the digit is 0, we do nothing, if it's 1 - # we apply an X-gate to that qubit: - for index, bit in enumerate(b_str): - if bit == "1": - oracle_qc.x(index) - # Do the controlled-NOT gates for each qubit, using the output qubit - # as the target: - for index in range(num_qubits): - oracle_qc.cx(index, num_qubits) - # Next, place the final X-gates - for index, bit in enumerate(b_str): - if bit == "1": - oracle_qc.x(index) - - # Case in which oracle is constant - if case == "constant": - # First decide what the fixed output of the oracle will be - # (either always 0 or always 1) - output = np.random.randint(2) - if output == 1: - oracle_qc.x(num_qubits) - - oracle_gate = oracle_qc.to_gate() - oracle_gate.name = "Oracle" # To show when we display the circuit - return oracle_gate - - -def dj_algorithm( - oracle: qiskit.QuantumCircuit, num_qubits: int -) -> qiskit.QuantumCircuit: - """ - Returns the complete Deutsch-Jozsa Quantum Circuit, - adding Input & Output registers and Hadamard & Measurement Gates, - to the Oracle Circuit passed in arguments - """ - dj_circuit = qiskit.QuantumCircuit(num_qubits + 1, num_qubits) - # Set up the output qubit: - dj_circuit.x(num_qubits) - dj_circuit.h(num_qubits) - # And set up the input register: - for qubit in range(num_qubits): - dj_circuit.h(qubit) - # Let's append the oracle gate to our circuit: - dj_circuit.append(oracle, range(num_qubits + 1)) - # Finally, perform the H-gates again and measure: - for qubit in range(num_qubits): - dj_circuit.h(qubit) - - for i in range(num_qubits): - dj_circuit.measure(i, i) - - return dj_circuit - - -def deutsch_jozsa(case: str, num_qubits: int) -> qiskit.result.counts.Counts: - """ - Main function that builds the circuit using other helper functions, - runs the experiment 1000 times & returns the resultant qubit counts - >>> deutsch_jozsa("constant", 3) - {'000': 1000} - >>> deutsch_jozsa("balanced", 3) - {'111': 1000} - """ - # Use Aer's simulator - simulator = qiskit.Aer.get_backend("aer_simulator") - - oracle_gate = dj_oracle(case, num_qubits) - dj_circuit = dj_algorithm(oracle_gate, num_qubits) - - # Execute the circuit on the simulator - job = qiskit.execute(dj_circuit, simulator, shots=1000) - - # Return the histogram data of the results of the experiment. - return job.result().get_counts(dj_circuit) - - -if __name__ == "__main__": - print(f"Deutsch Jozsa - Constant Oracle: {deutsch_jozsa('constant', 3)}") - print(f"Deutsch Jozsa - Balanced Oracle: {deutsch_jozsa('balanced', 3)}") diff --git a/quantum/half_adder.py.DISABLED.txt b/quantum/half_adder.py.DISABLED.txt deleted file mode 100644 index 800d563ec76f..000000000000 --- a/quantum/half_adder.py.DISABLED.txt +++ /dev/null @@ -1,60 +0,0 @@ -# DISABLED!! -#!/usr/bin/env python3 -""" -Build a half-adder quantum circuit that takes two bits as input, -encodes them into qubits, then runs the half-adder circuit calculating -the sum and carry qubits, observed over 1000 runs of the experiment -. - -References: -https://en.wikipedia.org/wiki/Adder_(electronics) -https://qiskit.org/textbook/ch-states/atoms-computation.html#4.2-Remembering-how-to-add- -""" - -import qiskit - - -def half_adder(bit0: int, bit1: int) -> qiskit.result.counts.Counts: - """ - >>> half_adder(0, 0) - {'00': 1000} - >>> half_adder(0, 1) - {'01': 1000} - >>> half_adder(1, 0) - {'01': 1000} - >>> half_adder(1, 1) - {'10': 1000} - """ - # Use Aer's simulator - simulator = qiskit.Aer.get_backend("aer_simulator") - - qc_ha = qiskit.QuantumCircuit(4, 2) - # encode inputs in qubits 0 and 1 - if bit0 == 1: - qc_ha.x(0) - if bit1 == 1: - qc_ha.x(1) - qc_ha.barrier() - - # use cnots to write XOR of the inputs on qubit2 - qc_ha.cx(0, 2) - qc_ha.cx(1, 2) - - # use ccx / toffoli gate to write AND of the inputs on qubit3 - qc_ha.ccx(0, 1, 3) - qc_ha.barrier() - - # extract outputs - qc_ha.measure(2, 0) # extract XOR value - qc_ha.measure(3, 1) # extract AND value - - # Execute the circuit on the qasm simulator - job = qiskit.execute(qc_ha, simulator, shots=1000) - - # Return the histogram data of the results of the experiment - return job.result().get_counts(qc_ha) - - -if __name__ == "__main__": - counts = half_adder(1, 1) - print(f"Half Adder Output Qubit Counts: {counts}") diff --git a/quantum/not_gate.py.DISABLED.txt b/quantum/not_gate.py.DISABLED.txt deleted file mode 100644 index ee23272d7a08..000000000000 --- a/quantum/not_gate.py.DISABLED.txt +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -""" -Build a simple bare-minimum quantum circuit that starts with a single -qubit (by default, in state 0) and inverts it. Run the experiment 1000 -times and print the total count of the states finally observed. -Qiskit Docs: https://qiskit.org/documentation/getting_started.html -""" - -import qiskit - - -def single_qubit_measure( - qubits: int, classical_bits: int -) -> qiskit.result.counts.Counts: - """ - >>> single_qubit_measure(2, 2) - {'11': 1000} - >>> single_qubit_measure(4, 4) - {'0011': 1000} - """ - # Use Aer's simulator - simulator = qiskit.Aer.get_backend("aer_simulator") - - # Create a Quantum Circuit acting on the q register - circuit = qiskit.QuantumCircuit(qubits, classical_bits) - - # Apply X (NOT) Gate to Qubits 0 & 1 - circuit.x(0) - circuit.x(1) - - # Map the quantum measurement to the classical bits - circuit.measure([0, 1], [0, 1]) - - # Execute the circuit on the qasm simulator - job = qiskit.execute(circuit, simulator, shots=1000) - - # Return the histogram data of the results of the experiment. - return job.result().get_counts(circuit) - - -if __name__ == "__main__": - counts = single_qubit_measure(2, 2) - print(f"Total count for various states are: {counts}") diff --git a/quantum/q_fourier_transform.py b/quantum/q_fourier_transform.py deleted file mode 100644 index 762ac408190e..000000000000 --- a/quantum/q_fourier_transform.py +++ /dev/null @@ -1,96 +0,0 @@ -""" -Build the quantum fourier transform (qft) for a desire -number of quantum bits using Qiskit framework. This -experiment run in IBM Q simulator with 10000 shots. -This circuit can be use as a building block to design -the Shor's algorithm in quantum computing. As well as, -quantum phase estimation among others. -. -References: -https://en.wikipedia.org/wiki/Quantum_Fourier_transform -https://qiskit.org/textbook/ch-algorithms/quantum-fourier-transform.html -""" - -import math - -import numpy as np -import qiskit -from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute - - -def quantum_fourier_transform(number_of_qubits: int = 3) -> qiskit.result.counts.Counts: - """ - # >>> quantum_fourier_transform(2) - # {'00': 2500, '01': 2500, '11': 2500, '10': 2500} - # quantum circuit for number_of_qubits = 3: - ┌───┐ - qr_0: ──────■──────────────────────■───────┤ H ├─X─ - │ ┌───┐ │P(π/2) └───┘ │ - qr_1: ──────┼────────■───────┤ H ├─■─────────────┼─ - ┌───┐ │P(π/4) │P(π/2) └───┘ │ - qr_2: ┤ H ├─■────────■───────────────────────────X─ - └───┘ - cr: 3/═════════════════════════════════════════════ - Args: - n : number of qubits - Returns: - qiskit.result.counts.Counts: distribute counts. - - >>> quantum_fourier_transform(2) - {'00': 2500, '01': 2500, '10': 2500, '11': 2500} - >>> quantum_fourier_transform(-1) - Traceback (most recent call last): - ... - ValueError: number of qubits must be > 0. - >>> quantum_fourier_transform('a') - Traceback (most recent call last): - ... - TypeError: number of qubits must be a integer. - >>> quantum_fourier_transform(100) - Traceback (most recent call last): - ... - ValueError: number of qubits too large to simulate(>10). - >>> quantum_fourier_transform(0.5) - Traceback (most recent call last): - ... - ValueError: number of qubits must be exact integer. - """ - if isinstance(number_of_qubits, str): - raise TypeError("number of qubits must be a integer.") - if number_of_qubits <= 0: - raise ValueError("number of qubits must be > 0.") - if math.floor(number_of_qubits) != number_of_qubits: - raise ValueError("number of qubits must be exact integer.") - if number_of_qubits > 10: - raise ValueError("number of qubits too large to simulate(>10).") - - qr = QuantumRegister(number_of_qubits, "qr") - cr = ClassicalRegister(number_of_qubits, "cr") - - quantum_circuit = QuantumCircuit(qr, cr) - - counter = number_of_qubits - - for i in range(counter): - quantum_circuit.h(number_of_qubits - i - 1) - counter -= 1 - for j in range(counter): - quantum_circuit.cp(np.pi / 2 ** (counter - j), j, counter) - - for k in range(number_of_qubits // 2): - quantum_circuit.swap(k, number_of_qubits - k - 1) - - # measure all the qubits - quantum_circuit.measure(qr, cr) - # simulate with 10000 shots - backend = Aer.get_backend("qasm_simulator") - job = execute(quantum_circuit, backend, shots=10000) - - return job.result().get_counts(quantum_circuit) - - -if __name__ == "__main__": - print( - f"Total count for quantum fourier transform state is: \ - {quantum_fourier_transform(3)}" - ) diff --git a/quantum/q_full_adder.py.DISABLED.txt b/quantum/q_full_adder.py.DISABLED.txt deleted file mode 100644 index ec4efa4346a5..000000000000 --- a/quantum/q_full_adder.py.DISABLED.txt +++ /dev/null @@ -1,115 +0,0 @@ -""" -Build the quantum full adder (QFA) for any sum of -two quantum registers and one carry in. This circuit -is designed using the Qiskit framework. This -experiment run in IBM Q simulator with 1000 shots. -. -References: -https://www.quantum-inspire.com/kbase/full-adder/ -""" - -import math - -import qiskit - - -def quantum_full_adder( - input_1: int = 1, input_2: int = 1, carry_in: int = 1 -) -> qiskit.result.counts.Counts: - """ - # >>> q_full_adder(inp_1, inp_2, cin) - # the inputs can be 0/1 for qubits in define - # values, or can be in a superposition of both - # states with hadamard gate using the input value 2. - # result for default values: {11: 1000} - qr_0: ──■────■──────────────■── - │ ┌─┴─┐ ┌─┴─┐ - qr_1: ──■──┤ X ├──■────■──┤ X ├ - │ └───┘ │ ┌─┴─┐└───┘ - qr_2: ──┼─────────■──┤ X ├───── - ┌─┴─┐ ┌─┴─┐└───┘ - qr_3: ┤ X ├─────┤ X ├────────── - └───┘ └───┘ - cr: 2/═════════════════════════ - Args: - input_1: input 1 for the circuit. - input_2: input 2 for the circuit. - carry_in: carry in for the circuit. - Returns: - qiskit.result.counts.Counts: sum result counts. - >>> quantum_full_adder(1, 1, 1) - {'11': 1000} - >>> quantum_full_adder(0, 0, 1) - {'01': 1000} - >>> quantum_full_adder(1, 0, 1) - {'10': 1000} - >>> quantum_full_adder(1, -4, 1) - Traceback (most recent call last): - ... - ValueError: inputs must be positive. - >>> quantum_full_adder('q', 0, 1) - Traceback (most recent call last): - ... - TypeError: inputs must be integers. - >>> quantum_full_adder(0.5, 0, 1) - Traceback (most recent call last): - ... - ValueError: inputs must be exact integers. - >>> quantum_full_adder(0, 1, 3) - Traceback (most recent call last): - ... - ValueError: inputs must be less or equal to 2. - """ - if ( - isinstance(input_1, str) - or isinstance(input_2, str) - or isinstance(carry_in, str) - ): - raise TypeError("inputs must be integers.") - - if (input_1 < 0) or (input_2 < 0) or (carry_in < 0): - raise ValueError("inputs must be positive.") - - if ( - (math.floor(input_1) != input_1) - or (math.floor(input_2) != input_2) - or (math.floor(carry_in) != carry_in) - ): - raise ValueError("inputs must be exact integers.") - - if (input_1 > 2) or (input_2 > 2) or (carry_in > 2): - raise ValueError("inputs must be less or equal to 2.") - - # build registers - qr = qiskit.QuantumRegister(4, "qr") - cr = qiskit.ClassicalRegister(2, "cr") - # list the entries - entry = [input_1, input_2, carry_in] - - quantum_circuit = qiskit.QuantumCircuit(qr, cr) - - for i in range(3): - if entry[i] == 2: - quantum_circuit.h(i) # for hadamard entries - elif entry[i] == 1: - quantum_circuit.x(i) # for 1 entries - elif entry[i] == 0: - quantum_circuit.i(i) # for 0 entries - - # build the circuit - quantum_circuit.ccx(0, 1, 3) # ccx = toffoli gate - quantum_circuit.cx(0, 1) - quantum_circuit.ccx(1, 2, 3) - quantum_circuit.cx(1, 2) - quantum_circuit.cx(0, 1) - - quantum_circuit.measure([2, 3], cr) # measure the last two qbits - - backend = qiskit.Aer.get_backend("aer_simulator") - job = qiskit.execute(quantum_circuit, backend, shots=1000) - - return job.result().get_counts(quantum_circuit) - - -if __name__ == "__main__": - print(f"Total sum count for state is: {quantum_full_adder(1, 1, 1)}") diff --git a/quantum/quantum_entanglement.py.DISABLED.txt b/quantum/quantum_entanglement.py.DISABLED.txt deleted file mode 100644 index 08fc32e493b2..000000000000 --- a/quantum/quantum_entanglement.py.DISABLED.txt +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 -""" -Build a quantum circuit with pair or group of qubits to perform -quantum entanglement. -Quantum entanglement is a phenomenon observed at the quantum scale -where entangled particles stay connected (in some sense) so that -the actions performed on one of the particles affects the other, -no matter the distance between two particles. -""" - -import qiskit - - -def quantum_entanglement(qubits: int = 2) -> qiskit.result.counts.Counts: - """ - # >>> quantum_entanglement(2) - # {'00': 500, '11': 500} - # ┌───┐ ┌─┐ - # q_0: ┤ H ├──■──┤M├─── - # └───┘┌─┴─┐└╥┘┌─┐ - # q_1: ─────┤ X ├─╫─┤M├ - # └───┘ ║ └╥┘ - # c: 2/═══════════╩══╩═ - # 0 1 - Args: - qubits (int): number of quibits to use. Defaults to 2 - Returns: - qiskit.result.counts.Counts: mapping of states to its counts - """ - classical_bits = qubits - - # Using Aer's simulator - simulator = qiskit.Aer.get_backend("aer_simulator") - - # Creating a Quantum Circuit acting on the q register - circuit = qiskit.QuantumCircuit(qubits, classical_bits) - - # Adding a H gate on qubit 0 (now q0 in superposition) - circuit.h(0) - - for i in range(1, qubits): - # Adding CX (CNOT) gate - circuit.cx(i - 1, i) - - # Mapping the quantum measurement to the classical bits - circuit.measure(list(range(qubits)), list(range(classical_bits))) - - # Now measuring any one qubit would affect other qubits to collapse - # their super position and have same state as the measured one. - - # Executing the circuit on the simulator - job = qiskit.execute(circuit, simulator, shots=1000) - - return job.result().get_counts(circuit) - - -if __name__ == "__main__": - print(f"Total count for various states are: {quantum_entanglement(3)}") diff --git a/quantum/quantum_random.py.DISABLED.txt b/quantum/quantum_random.py.DISABLED.txt deleted file mode 100644 index 01c8faa12ac0..000000000000 --- a/quantum/quantum_random.py.DISABLED.txt +++ /dev/null @@ -1,30 +0,0 @@ -import doctest - -import projectq -from projectq.ops import H, Measure - - -def get_random_number(quantum_engine: projectq.cengines._main.MainEngine) -> int: - """ - >>> isinstance(get_random_number(projectq.MainEngine()), int) - True - """ - qubit = quantum_engine.allocate_qubit() - H | qubit - Measure | qubit - return int(qubit) - - -if __name__ == "__main__": - doctest.testmod() - - # initialises a new quantum backend - quantum_engine = projectq.MainEngine() - - # Generate a list of 10 random numbers - random_numbers_list = [get_random_number(quantum_engine) for _ in range(10)] - - # Flushes the quantum engine from memory - quantum_engine.flush() - - print("Random numbers", random_numbers_list) diff --git a/quantum/quantum_teleportation.py.DISABLED.txt b/quantum/quantum_teleportation.py.DISABLED.txt deleted file mode 100644 index 5da79ed20183..000000000000 --- a/quantum/quantum_teleportation.py.DISABLED.txt +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -""" -Build quantum teleportation circuit using three quantum bits -and 1 classical bit. The main idea is to send one qubit from -Alice to Bob using the entanglement properties. This experiment -run in IBM Q simulator with 1000 shots. -. -References: -https://en.wikipedia.org/wiki/Quantum_teleportation -https://qiskit.org/textbook/ch-algorithms/teleportation.html -""" - -import numpy as np -import qiskit -from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute - - -def quantum_teleportation( - theta: float = np.pi / 2, phi: float = np.pi / 2, lam: float = np.pi / 2 -) -> qiskit.result.counts.Counts: - """ - # >>> quantum_teleportation() - #{'00': 500, '11': 500} # ideally - # ┌─────────────────┐ ┌───┐ - #qr_0: ┤ U(π/2,π/2,π/2) ├───────■──┤ H ├─■───────── - # └──────┬───┬──────┘ ┌─┴─┐└───┘ │ - #qr_1: ───────┤ H ├─────────■──┤ X ├──────┼───■───── - # └───┘ ┌─┴─┐└───┘ │ ┌─┴─┐┌─┐ - #qr_2: ───────────────────┤ X ├───────────■─┤ X ├┤M├ - # └───┘ └───┘└╥┘ - #cr: 1/═══════════════════════════════════════════╩═ - Args: - theta (float): Single qubit rotation U Gate theta parameter. Default to np.pi/2 - phi (float): Single qubit rotation U Gate phi parameter. Default to np.pi/2 - lam (float): Single qubit rotation U Gate lam parameter. Default to np.pi/2 - Returns: - qiskit.result.counts.Counts: Teleported qubit counts. - """ - - qr = QuantumRegister(3, "qr") # Define the number of quantum bits - cr = ClassicalRegister(1, "cr") # Define the number of classical bits - - quantum_circuit = QuantumCircuit(qr, cr) # Define the quantum circuit. - - # Build the circuit - quantum_circuit.u(theta, phi, lam, 0) # Quantum State to teleport - quantum_circuit.h(1) # add hadamard gate - quantum_circuit.cx( - 1, 2 - ) # add control gate with qubit 1 as control and 2 as target. - quantum_circuit.cx(0, 1) - quantum_circuit.h(0) - quantum_circuit.cz(0, 2) # add control z gate. - quantum_circuit.cx(1, 2) - - quantum_circuit.measure([2], [0]) # measure the qubit. - - # Simulate the circuit using qasm simulator - backend = Aer.get_backend("aer_simulator") - job = execute(quantum_circuit, backend, shots=1000) - - return job.result().get_counts(quantum_circuit) - - -if __name__ == "__main__": - print( - "Total count for teleported state is: " - f"{quantum_teleportation(np.pi/2, np.pi/2, np.pi/2)}" - ) diff --git a/quantum/ripple_adder_classic.py.DISABLED.txt b/quantum/ripple_adder_classic.py.DISABLED.txt deleted file mode 100644 index 2284141ccac2..000000000000 --- a/quantum/ripple_adder_classic.py.DISABLED.txt +++ /dev/null @@ -1,116 +0,0 @@ -# https://github.com/rupansh/QuantumComputing/blob/master/rippleadd.py -# https://en.wikipedia.org/wiki/Adder_(electronics)#Full_adder -# https://en.wikipedia.org/wiki/Controlled_NOT_gate - -import qiskit -from qiskit.providers import Backend - - -def store_two_classics(val1: int, val2: int) -> tuple[qiskit.QuantumCircuit, str, str]: - """ - Generates a Quantum Circuit which stores two classical integers - Returns the circuit and binary representation of the integers - """ - x, y = bin(val1)[2:], bin(val2)[2:] # Remove leading '0b' - - # Ensure that both strings are of the same length - if len(x) > len(y): - y = y.zfill(len(x)) - else: - x = x.zfill(len(y)) - - # We need (3 * number of bits in the larger number)+1 qBits - # The second parameter is the number of classical registers, to measure the result - circuit = qiskit.QuantumCircuit((len(x) * 3) + 1, len(x) + 1) - - # We are essentially "not-ing" the bits that are 1 - # Reversed because it's easier to perform ops on more significant bits - for i in range(len(x)): - if x[::-1][i] == "1": - circuit.x(i) - for j in range(len(y)): - if y[::-1][j] == "1": - circuit.x(len(x) + j) - - return circuit, x, y - - -def full_adder( - circuit: qiskit.QuantumCircuit, - input1_loc: int, - input2_loc: int, - carry_in: int, - carry_out: int, -): - """ - Quantum Equivalent of a Full Adder Circuit - CX/CCX is like 2-way/3-way XOR - """ - circuit.ccx(input1_loc, input2_loc, carry_out) - circuit.cx(input1_loc, input2_loc) - circuit.ccx(input2_loc, carry_in, carry_out) - circuit.cx(input2_loc, carry_in) - circuit.cx(input1_loc, input2_loc) - - -# The default value for **backend** is the result of a function call which is not -# normally recommended and causes ruff to raise a B008 error. However, in this case, -# this is acceptable because `Aer.get_backend()` is called when the function is defined -# and that same backend is then reused for all function calls. - - -def ripple_adder( - val1: int, - val2: int, - backend: Backend = qiskit.Aer.get_backend("aer_simulator"), # noqa: B008 -) -> int: - """ - Quantum Equivalent of a Ripple Adder Circuit - Uses qasm_simulator backend by default - - Currently only adds 'emulated' Classical Bits - but nothing prevents us from doing this with hadamard'd bits :) - - Only supports adding positive integers - - >>> ripple_adder(3, 4) - 7 - >>> ripple_adder(10, 4) - 14 - >>> ripple_adder(-1, 10) - Traceback (most recent call last): - ... - ValueError: Both Integers must be positive! - """ - - if val1 < 0 or val2 < 0: - raise ValueError("Both Integers must be positive!") - - # Store the Integers - circuit, x, y = store_two_classics(val1, val2) - - """ - We are essentially using each bit of x & y respectively as full_adder's input - the carry_input is used from the previous circuit (for circuit num > 1) - - the carry_out is just below carry_input because - it will be essentially the carry_input for the next full_adder - """ - for i in range(len(x)): - full_adder(circuit, i, len(x) + i, len(x) + len(y) + i, len(x) + len(y) + i + 1) - circuit.barrier() # Optional, just for aesthetics - - # Measure the resultant qBits - for i in range(len(x) + 1): - circuit.measure([(len(x) * 2) + i], [i]) - - res = qiskit.execute(circuit, backend, shots=1).result() - - # The result is in binary. Convert it back to int - return int(next(iter(res.get_counts())), 2) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/quantum/single_qubit_measure.py.DISABLED.txt b/quantum/single_qubit_measure.py.DISABLED.txt deleted file mode 100755 index 605bd804314a..000000000000 --- a/quantum/single_qubit_measure.py.DISABLED.txt +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python3 -""" -Build a simple bare-minimum quantum circuit that starts with a single -qubit (by default, in state 0), runs the experiment 1000 times, and -finally prints the total count of the states finally observed. -Qiskit Docs: https://qiskit.org/documentation/getting_started.html -""" - -import qiskit - - -def single_qubit_measure( - qubits: int, classical_bits: int -) -> qiskit.result.counts.Counts: - """ - >>> single_qubit_measure(1, 1) - {'0': 1000} - """ - # Use Aer's simulator - simulator = qiskit.Aer.get_backend("aer_simulator") - - # Create a Quantum Circuit acting on the q register - circuit = qiskit.QuantumCircuit(qubits, classical_bits) - - # Map the quantum measurement to the classical bits - circuit.measure([0], [0]) - - # Execute the circuit on the simulator - job = qiskit.execute(circuit, simulator, shots=1000) - - # Return the histogram data of the results of the experiment. - return job.result().get_counts(circuit) - - -if __name__ == "__main__": - print(f"Total count for various states are: {single_qubit_measure(1, 1)}") diff --git a/quantum/superdense_coding.py.DISABLED.txt b/quantum/superdense_coding.py.DISABLED.txt deleted file mode 100644 index 1087312f9f5d..000000000000 --- a/quantum/superdense_coding.py.DISABLED.txt +++ /dev/null @@ -1,102 +0,0 @@ -""" -Build the superdense coding protocol. This quantum -circuit can send two classical bits using one quantum -bit. This circuit is designed using the Qiskit -framework. This experiment run in IBM Q simulator -with 1000 shots. -. -References: -https://qiskit.org/textbook/ch-algorithms/superdense-coding.html -https://en.wikipedia.org/wiki/Superdense_coding -""" - -import math - -import qiskit -from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute - - -def superdense_coding(bit_1: int = 1, bit_2: int = 1) -> qiskit.result.counts.Counts: - """ - The input refer to the classical message - that you wants to send. {'00','01','10','11'} - result for default values: {11: 1000} - ┌───┐ ┌───┐ - qr_0: ─────┤ X ├──────────┤ X ├───── - ┌───┐└─┬─┘┌───┐┌───┐└─┬─┘┌───┐ - qr_1: ┤ H ├──■──┤ X ├┤ Z ├──■──┤ H ├ - └───┘ └───┘└───┘ └───┘ - cr: 2/══════════════════════════════ - Args: - bit_1: bit 1 of classical information to send. - bit_2: bit 2 of classical information to send. - Returns: - qiskit.result.counts.Counts: counts of send state. - >>> superdense_coding(0,0) - {'00': 1000} - >>> superdense_coding(0,1) - {'01': 1000} - >>> superdense_coding(-1,0) - Traceback (most recent call last): - ... - ValueError: inputs must be positive. - >>> superdense_coding(1,'j') - Traceback (most recent call last): - ... - TypeError: inputs must be integers. - >>> superdense_coding(1,0.5) - Traceback (most recent call last): - ... - ValueError: inputs must be exact integers. - >>> superdense_coding(2,1) - Traceback (most recent call last): - ... - ValueError: inputs must be less or equal to 1. - """ - if isinstance(bit_1, str) or isinstance(bit_2, str): - raise TypeError("inputs must be integers.") - if (bit_1 < 0) or (bit_2 < 0): - raise ValueError("inputs must be positive.") - if (math.floor(bit_1) != bit_1) or (math.floor(bit_2) != bit_2): - raise ValueError("inputs must be exact integers.") - if (bit_1 > 1) or (bit_2 > 1): - raise ValueError("inputs must be less or equal to 1.") - - # build registers - qr = QuantumRegister(2, "qr") - cr = ClassicalRegister(2, "cr") - - quantum_circuit = QuantumCircuit(qr, cr) - - # entanglement the qubits - quantum_circuit.h(1) - quantum_circuit.cx(1, 0) - - # send the information - c_information = str(bit_1) + str(bit_2) - - if c_information == "11": - quantum_circuit.x(1) - quantum_circuit.z(1) - elif c_information == "10": - quantum_circuit.z(1) - elif c_information == "01": - quantum_circuit.x(1) - else: - quantum_circuit.i(1) - - # unentangled the circuit - quantum_circuit.cx(1, 0) - quantum_circuit.h(1) - - # measure the circuit - quantum_circuit.measure(qr, cr) - - backend = Aer.get_backend("aer_simulator") - job = execute(quantum_circuit, backend, shots=1000) - - return job.result().get_counts(quantum_circuit) - - -if __name__ == "__main__": - print(f"Counts for classical state send: {superdense_coding(1,1)}") diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index afbf25ba6edc..000000000000 --- a/requirements.txt +++ /dev/null @@ -1,24 +0,0 @@ -beautifulsoup4 -fake_useragent -imageio -keras -lxml -matplotlib -numpy -opencv-python -pandas -pillow -# projectq # uncomment once quantum/quantum_random.py is fixed -qiskit ; python_version < '3.12' -qiskit-aer ; python_version < '3.12' -requests -rich -# scikit-fuzzy # uncomment once fuzzy_logic/fuzzy_operations.py is fixed -scikit-learn -statsmodels -sympy -tensorflow ; python_version < '3.13' -tweepy -# yulewalker # uncomment once audio_filters/equal_loudness_filter.py is fixed -typing_extensions -xgboost diff --git a/scheduling/__init__.py b/scheduling/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/scheduling/first_come_first_served.py b/scheduling/first_come_first_served.py deleted file mode 100644 index 06cdb8ddf821..000000000000 --- a/scheduling/first_come_first_served.py +++ /dev/null @@ -1,108 +0,0 @@ -# Implementation of First Come First Served scheduling algorithm -# In this Algorithm we just care about the order that the processes arrived -# without carring about their duration time -# https://en.wikipedia.org/wiki/Scheduling_(computing)#First_come,_first_served -from __future__ import annotations - - -def calculate_waiting_times(duration_times: list[int]) -> list[int]: - """ - This function calculates the waiting time of some processes that have a - specified duration time. - Return: The waiting time for each process. - >>> calculate_waiting_times([5, 10, 15]) - [0, 5, 15] - >>> calculate_waiting_times([1, 2, 3, 4, 5]) - [0, 1, 3, 6, 10] - >>> calculate_waiting_times([10, 3]) - [0, 10] - """ - waiting_times = [0] * len(duration_times) - for i in range(1, len(duration_times)): - waiting_times[i] = duration_times[i - 1] + waiting_times[i - 1] - return waiting_times - - -def calculate_turnaround_times( - duration_times: list[int], waiting_times: list[int] -) -> list[int]: - """ - This function calculates the turnaround time of some processes. - Return: The time difference between the completion time and the - arrival time. - Practically waiting_time + duration_time - >>> calculate_turnaround_times([5, 10, 15], [0, 5, 15]) - [5, 15, 30] - >>> calculate_turnaround_times([1, 2, 3, 4, 5], [0, 1, 3, 6, 10]) - [1, 3, 6, 10, 15] - >>> calculate_turnaround_times([10, 3], [0, 10]) - [10, 13] - """ - return [ - duration_time + waiting_times[i] - for i, duration_time in enumerate(duration_times) - ] - - -def calculate_average_turnaround_time(turnaround_times: list[int]) -> float: - """ - This function calculates the average of the turnaround times - Return: The average of the turnaround times. - >>> calculate_average_turnaround_time([0, 5, 16]) - 7.0 - >>> calculate_average_turnaround_time([1, 5, 8, 12]) - 6.5 - >>> calculate_average_turnaround_time([10, 24]) - 17.0 - """ - return sum(turnaround_times) / len(turnaround_times) - - -def calculate_average_waiting_time(waiting_times: list[int]) -> float: - """ - This function calculates the average of the waiting times - Return: The average of the waiting times. - >>> calculate_average_waiting_time([0, 5, 16]) - 7.0 - >>> calculate_average_waiting_time([1, 5, 8, 12]) - 6.5 - >>> calculate_average_waiting_time([10, 24]) - 17.0 - """ - return sum(waiting_times) / len(waiting_times) - - -if __name__ == "__main__": - # process id's - processes = [1, 2, 3] - - # ensure that we actually have processes - if len(processes) == 0: - print("Zero amount of processes") - raise SystemExit(0) - - # duration time of all processes - duration_times = [19, 8, 9] - - # ensure we can match each id to a duration time - if len(duration_times) != len(processes): - print("Unable to match all id's with their duration time") - raise SystemExit(0) - - # get the waiting times and the turnaround times - waiting_times = calculate_waiting_times(duration_times) - turnaround_times = calculate_turnaround_times(duration_times, waiting_times) - - # get the average times - average_waiting_time = calculate_average_waiting_time(waiting_times) - average_turnaround_time = calculate_average_turnaround_time(turnaround_times) - - # print all the results - print("Process ID\tDuration Time\tWaiting Time\tTurnaround Time") - for i, process in enumerate(processes): - print( - f"{process}\t\t{duration_times[i]}\t\t{waiting_times[i]}\t\t" - f"{turnaround_times[i]}" - ) - print(f"Average waiting time = {average_waiting_time}") - print(f"Average turn around time = {average_turnaround_time}") diff --git a/scheduling/highest_response_ratio_next.py b/scheduling/highest_response_ratio_next.py deleted file mode 100644 index f858be2ee44a..000000000000 --- a/scheduling/highest_response_ratio_next.py +++ /dev/null @@ -1,119 +0,0 @@ -""" -Highest response ratio next (HRRN) scheduling is a non-preemptive discipline. -It was developed as modification of shortest job next or shortest job first (SJN or SJF) -to mitigate the problem of process starvation. -https://en.wikipedia.org/wiki/Highest_response_ratio_next -""" - -from statistics import mean - -import numpy as np - - -def calculate_turn_around_time( - process_name: list, arrival_time: list, burst_time: list, no_of_process: int -) -> list: - """ - Calculate the turn around time of each processes - - Return: The turn around time time for each process. - >>> calculate_turn_around_time(["A", "B", "C"], [3, 5, 8], [2, 4, 6], 3) - [2, 4, 7] - >>> calculate_turn_around_time(["A", "B", "C"], [0, 2, 4], [3, 5, 7], 3) - [3, 6, 11] - """ - - current_time = 0 - # Number of processes finished - finished_process_count = 0 - # Displays the finished process. - # If it is 0, the performance is completed if it is 1, before the performance. - finished_process = [0] * no_of_process - # List to include calculation results - turn_around_time = [0] * no_of_process - - # Sort by arrival time. - burst_time = [burst_time[i] for i in np.argsort(arrival_time)] - process_name = [process_name[i] for i in np.argsort(arrival_time)] - arrival_time.sort() - - while no_of_process > finished_process_count: - """ - If the current time is less than the arrival time of - the process that arrives first among the processes that have not been performed, - change the current time. - """ - i = 0 - while finished_process[i] == 1: - i += 1 - current_time = max(current_time, arrival_time[i]) - - response_ratio = 0 - # Index showing the location of the process being performed - loc = 0 - # Saves the current response ratio. - temp = 0 - for i in range(no_of_process): - if finished_process[i] == 0 and arrival_time[i] <= current_time: - temp = (burst_time[i] + (current_time - arrival_time[i])) / burst_time[ - i - ] - if response_ratio < temp: - response_ratio = temp - loc = i - - # Calculate the turn around time - turn_around_time[loc] = current_time + burst_time[loc] - arrival_time[loc] - current_time += burst_time[loc] - # Indicates that the process has been performed. - finished_process[loc] = 1 - # Increase finished_process_count by 1 - finished_process_count += 1 - - return turn_around_time - - -def calculate_waiting_time( - process_name: list, # noqa: ARG001 - turn_around_time: list, - burst_time: list, - no_of_process: int, -) -> list: - """ - Calculate the waiting time of each processes. - - Return: The waiting time for each process. - >>> calculate_waiting_time(["A", "B", "C"], [2, 4, 7], [2, 4, 6], 3) - [0, 0, 1] - >>> calculate_waiting_time(["A", "B", "C"], [3, 6, 11], [3, 5, 7], 3) - [0, 1, 4] - """ - - waiting_time = [0] * no_of_process - for i in range(no_of_process): - waiting_time[i] = turn_around_time[i] - burst_time[i] - return waiting_time - - -if __name__ == "__main__": - no_of_process = 5 - process_name = ["A", "B", "C", "D", "E"] - arrival_time = [1, 2, 3, 4, 5] - burst_time = [1, 2, 3, 4, 5] - - turn_around_time = calculate_turn_around_time( - process_name, arrival_time, burst_time, no_of_process - ) - waiting_time = calculate_waiting_time( - process_name, turn_around_time, burst_time, no_of_process - ) - - print("Process name \tArrival time \tBurst time \tTurn around time \tWaiting time") - for i in range(no_of_process): - print( - f"{process_name[i]}\t\t{arrival_time[i]}\t\t{burst_time[i]}\t\t" - f"{turn_around_time[i]}\t\t\t{waiting_time[i]}" - ) - - print(f"average waiting time : {mean(waiting_time):.5f}") - print(f"average turn around time : {mean(turn_around_time):.5f}") diff --git a/scheduling/job_sequence_with_deadline.py b/scheduling/job_sequence_with_deadline.py deleted file mode 100644 index ee1fdbd0e55c..000000000000 --- a/scheduling/job_sequence_with_deadline.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -Given a list of tasks, each with a deadline and reward, calculate which tasks can be -completed to yield the maximum reward. Each task takes one unit of time to complete, -and we can only work on one task at a time. Once a task has passed its deadline, it -can no longer be scheduled. - -Example : -tasks_info = [(4, 20), (1, 10), (1, 40), (1, 30)] -max_tasks will return (2, [2, 0]) - -Scheduling these tasks would result in a reward of 40 + 20 - -This problem can be solved using the concept of "GREEDY ALGORITHM". -Time Complexity - O(n log n) -https://medium.com/@nihardudhat2000/job-sequencing-with-deadline-17ddbb5890b5 -""" - -from dataclasses import dataclass -from operator import attrgetter - - -@dataclass -class Task: - task_id: int - deadline: int - reward: int - - -def max_tasks(tasks_info: list[tuple[int, int]]) -> list[int]: - """ - Create a list of Task objects that are sorted so the highest rewards come first. - Return a list of those task ids that can be completed before i becomes too high. - >>> max_tasks([(4, 20), (1, 10), (1, 40), (1, 30)]) - [2, 0] - >>> max_tasks([(1, 10), (2, 20), (3, 30), (2, 40)]) - [3, 2] - >>> max_tasks([(9, 10)]) - [0] - >>> max_tasks([(-9, 10)]) - [] - >>> max_tasks([]) - [] - >>> max_tasks([(0, 10), (0, 20), (0, 30), (0, 40)]) - [] - >>> max_tasks([(-1, 10), (-2, 20), (-3, 30), (-4, 40)]) - [] - """ - tasks = sorted( - ( - Task(task_id, deadline, reward) - for task_id, (deadline, reward) in enumerate(tasks_info) - ), - key=attrgetter("reward"), - reverse=True, - ) - return [task.task_id for i, task in enumerate(tasks, start=1) if task.deadline >= i] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{max_tasks([(4, 20), (1, 10), (1, 40), (1, 30)]) = }") - print(f"{max_tasks([(1, 10), (2, 20), (3, 30), (2, 40)]) = }") diff --git a/scheduling/job_sequencing_with_deadline.py b/scheduling/job_sequencing_with_deadline.py deleted file mode 100644 index 13946948492f..000000000000 --- a/scheduling/job_sequencing_with_deadline.py +++ /dev/null @@ -1,47 +0,0 @@ -def job_sequencing_with_deadlines(jobs: list) -> list: - """ - Function to find the maximum profit by doing jobs in a given time frame - - Args: - jobs [list]: A list of tuples of (job_id, deadline, profit) - - Returns: - max_profit [int]: Maximum profit that can be earned by doing jobs - in a given time frame - - Examples: - >>> job_sequencing_with_deadlines( - ... [(1, 4, 20), (2, 1, 10), (3, 1, 40), (4, 1, 30)]) - [2, 60] - >>> job_sequencing_with_deadlines( - ... [(1, 2, 100), (2, 1, 19), (3, 2, 27), (4, 1, 25), (5, 1, 15)]) - [2, 127] - """ - - # Sort the jobs in descending order of profit - jobs = sorted(jobs, key=lambda value: value[2], reverse=True) - - # Create a list of size equal to the maximum deadline - # and initialize it with -1 - max_deadline = max(jobs, key=lambda value: value[1])[1] - time_slots = [-1] * max_deadline - - # Finding the maximum profit and the count of jobs - count = 0 - max_profit = 0 - for job in jobs: - # Find a free time slot for this job - # (Note that we start from the last possible slot) - for i in range(job[1] - 1, -1, -1): - if time_slots[i] == -1: - time_slots[i] = job[0] - count += 1 - max_profit += job[2] - break - return [count, max_profit] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/scheduling/multi_level_feedback_queue.py b/scheduling/multi_level_feedback_queue.py deleted file mode 100644 index abee3c85c5a5..000000000000 --- a/scheduling/multi_level_feedback_queue.py +++ /dev/null @@ -1,312 +0,0 @@ -from collections import deque - - -class Process: - def __init__(self, process_name: str, arrival_time: int, burst_time: int) -> None: - self.process_name = process_name # process name - self.arrival_time = arrival_time # arrival time of the process - # completion time of finished process or last interrupted time - self.stop_time = arrival_time - self.burst_time = burst_time # remaining burst time - self.waiting_time = 0 # total time of the process wait in ready queue - self.turnaround_time = 0 # time from arrival time to completion time - - -class MLFQ: - """ - MLFQ(Multi Level Feedback Queue) - https://en.wikipedia.org/wiki/Multilevel_feedback_queue - MLFQ has a lot of queues that have different priority - In this MLFQ, - The first Queue(0) to last second Queue(N-2) of MLFQ have Round Robin Algorithm - The last Queue(N-1) has First Come, First Served Algorithm - """ - - def __init__( - self, - number_of_queues: int, - time_slices: list[int], - queue: deque[Process], - current_time: int, - ) -> None: - # total number of mlfq's queues - self.number_of_queues = number_of_queues - # time slice of queues that round robin algorithm applied - self.time_slices = time_slices - # unfinished process is in this ready_queue - self.ready_queue = queue - # current time - self.current_time = current_time - # finished process is in this sequence queue - self.finish_queue: deque[Process] = deque() - - def calculate_sequence_of_finish_queue(self) -> list[str]: - """ - This method returns the sequence of finished processes - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> _ = mlfq.multi_level_feedback_queue() - >>> mlfq.calculate_sequence_of_finish_queue() - ['P2', 'P4', 'P1', 'P3'] - """ - sequence = [] - for i in range(len(self.finish_queue)): - sequence.append(self.finish_queue[i].process_name) - return sequence - - def calculate_waiting_time(self, queue: list[Process]) -> list[int]: - """ - This method calculates waiting time of processes - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> _ = mlfq.multi_level_feedback_queue() - >>> mlfq.calculate_waiting_time([P1, P2, P3, P4]) - [83, 17, 94, 101] - """ - waiting_times = [] - for i in range(len(queue)): - waiting_times.append(queue[i].waiting_time) - return waiting_times - - def calculate_turnaround_time(self, queue: list[Process]) -> list[int]: - """ - This method calculates turnaround time of processes - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> _ = mlfq.multi_level_feedback_queue() - >>> mlfq.calculate_turnaround_time([P1, P2, P3, P4]) - [136, 34, 162, 125] - """ - turnaround_times = [] - for i in range(len(queue)): - turnaround_times.append(queue[i].turnaround_time) - return turnaround_times - - def calculate_completion_time(self, queue: list[Process]) -> list[int]: - """ - This method calculates completion time of processes - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> _ = mlfq.multi_level_feedback_queue() - >>> mlfq.calculate_turnaround_time([P1, P2, P3, P4]) - [136, 34, 162, 125] - """ - completion_times = [] - for i in range(len(queue)): - completion_times.append(queue[i].stop_time) - return completion_times - - def calculate_remaining_burst_time_of_processes( - self, queue: deque[Process] - ) -> list[int]: - """ - This method calculate remaining burst time of processes - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> finish_queue, ready_queue = mlfq.round_robin(deque([P1, P2, P3, P4]), 17) - >>> mlfq.calculate_remaining_burst_time_of_processes(mlfq.finish_queue) - [0] - >>> mlfq.calculate_remaining_burst_time_of_processes(ready_queue) - [36, 51, 7] - >>> finish_queue, ready_queue = mlfq.round_robin(ready_queue, 25) - >>> mlfq.calculate_remaining_burst_time_of_processes(mlfq.finish_queue) - [0, 0] - >>> mlfq.calculate_remaining_burst_time_of_processes(ready_queue) - [11, 26] - """ - return [q.burst_time for q in queue] - - def update_waiting_time(self, process: Process) -> int: - """ - This method updates waiting times of unfinished processes - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> mlfq.current_time = 10 - >>> P1.stop_time = 5 - >>> mlfq.update_waiting_time(P1) - 5 - """ - process.waiting_time += self.current_time - process.stop_time - return process.waiting_time - - def first_come_first_served(self, ready_queue: deque[Process]) -> deque[Process]: - """ - FCFS(First Come, First Served) - FCFS will be applied to MLFQ's last queue - A first came process will be finished at first - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> _ = mlfq.first_come_first_served(mlfq.ready_queue) - >>> mlfq.calculate_sequence_of_finish_queue() - ['P1', 'P2', 'P3', 'P4'] - """ - finished: deque[Process] = deque() # sequence deque of finished process - while len(ready_queue) != 0: - cp = ready_queue.popleft() # current process - - # if process's arrival time is later than current time, update current time - if self.current_time < cp.arrival_time: - self.current_time += cp.arrival_time - - # update waiting time of current process - self.update_waiting_time(cp) - # update current time - self.current_time += cp.burst_time - # finish the process and set the process's burst-time 0 - cp.burst_time = 0 - # set the process's turnaround time because it is finished - cp.turnaround_time = self.current_time - cp.arrival_time - # set the completion time - cp.stop_time = self.current_time - # add the process to queue that has finished queue - finished.append(cp) - - self.finish_queue.extend(finished) # add finished process to finish queue - # FCFS will finish all remaining processes - return finished - - def round_robin( - self, ready_queue: deque[Process], time_slice: int - ) -> tuple[deque[Process], deque[Process]]: - """ - RR(Round Robin) - RR will be applied to MLFQ's all queues except last queue - All processes can't use CPU for time more than time_slice - If the process consume CPU up to time_slice, it will go back to ready queue - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> finish_queue, ready_queue = mlfq.round_robin(mlfq.ready_queue, 17) - >>> mlfq.calculate_sequence_of_finish_queue() - ['P2'] - """ - finished: deque[Process] = deque() # sequence deque of terminated process - # just for 1 cycle and unfinished processes will go back to queue - for _ in range(len(ready_queue)): - cp = ready_queue.popleft() # current process - - # if process's arrival time is later than current time, update current time - if self.current_time < cp.arrival_time: - self.current_time += cp.arrival_time - - # update waiting time of unfinished processes - self.update_waiting_time(cp) - # if the burst time of process is bigger than time-slice - if cp.burst_time > time_slice: - # use CPU for only time-slice - self.current_time += time_slice - # update remaining burst time - cp.burst_time -= time_slice - # update end point time - cp.stop_time = self.current_time - # locate the process behind the queue because it is not finished - ready_queue.append(cp) - else: - # use CPU for remaining burst time - self.current_time += cp.burst_time - # set burst time 0 because the process is finished - cp.burst_time = 0 - # set the finish time - cp.stop_time = self.current_time - # update the process' turnaround time because it is finished - cp.turnaround_time = self.current_time - cp.arrival_time - # add the process to queue that has finished queue - finished.append(cp) - - self.finish_queue.extend(finished) # add finished process to finish queue - # return finished processes queue and remaining processes queue - return finished, ready_queue - - def multi_level_feedback_queue(self) -> deque[Process]: - """ - MLFQ(Multi Level Feedback Queue) - >>> P1 = Process("P1", 0, 53) - >>> P2 = Process("P2", 0, 17) - >>> P3 = Process("P3", 0, 68) - >>> P4 = Process("P4", 0, 24) - >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0) - >>> finish_queue = mlfq.multi_level_feedback_queue() - >>> mlfq.calculate_sequence_of_finish_queue() - ['P2', 'P4', 'P1', 'P3'] - """ - - # all queues except last one have round_robin algorithm - for i in range(self.number_of_queues - 1): - finished, self.ready_queue = self.round_robin( - self.ready_queue, self.time_slices[i] - ) - # the last queue has first_come_first_served algorithm - self.first_come_first_served(self.ready_queue) - - return self.finish_queue - - -if __name__ == "__main__": - import doctest - - P1 = Process("P1", 0, 53) - P2 = Process("P2", 0, 17) - P3 = Process("P3", 0, 68) - P4 = Process("P4", 0, 24) - number_of_queues = 3 - time_slices = [17, 25] - queue = deque([P1, P2, P3, P4]) - - if len(time_slices) != number_of_queues - 1: - raise SystemExit(0) - - doctest.testmod(extraglobs={"queue": deque([P1, P2, P3, P4])}) - - P1 = Process("P1", 0, 53) - P2 = Process("P2", 0, 17) - P3 = Process("P3", 0, 68) - P4 = Process("P4", 0, 24) - number_of_queues = 3 - time_slices = [17, 25] - queue = deque([P1, P2, P3, P4]) - mlfq = MLFQ(number_of_queues, time_slices, queue, 0) - finish_queue = mlfq.multi_level_feedback_queue() - - # print total waiting times of processes(P1, P2, P3, P4) - print( - f"waiting time:\ - \t\t\t{MLFQ.calculate_waiting_time(mlfq, [P1, P2, P3, P4])}" - ) - # print completion times of processes(P1, P2, P3, P4) - print( - f"completion time:\ - \t\t{MLFQ.calculate_completion_time(mlfq, [P1, P2, P3, P4])}" - ) - # print total turnaround times of processes(P1, P2, P3, P4) - print( - f"turnaround time:\ - \t\t{MLFQ.calculate_turnaround_time(mlfq, [P1, P2, P3, P4])}" - ) - # print sequence of finished processes - print( - f"sequence of finished processes:\ - {mlfq.calculate_sequence_of_finish_queue()}" - ) diff --git a/scheduling/non_preemptive_shortest_job_first.py b/scheduling/non_preemptive_shortest_job_first.py deleted file mode 100644 index cb7ffd3abd9c..000000000000 --- a/scheduling/non_preemptive_shortest_job_first.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -Non-preemptive Shortest Job First -Shortest execution time process is chosen for the next execution. -https://www.guru99.com/shortest-job-first-sjf-scheduling.html -https://en.wikipedia.org/wiki/Shortest_job_next -""" - -from __future__ import annotations - -from statistics import mean - - -def calculate_waitingtime( - arrival_time: list[int], burst_time: list[int], no_of_processes: int -) -> list[int]: - """ - Calculate the waiting time of each processes - - Return: The waiting time for each process. - >>> calculate_waitingtime([0,1,2], [10, 5, 8], 3) - [0, 9, 13] - >>> calculate_waitingtime([1,2,2,4], [4, 6, 3, 1], 4) - [0, 7, 4, 1] - >>> calculate_waitingtime([0,0,0], [12, 2, 10],3) - [12, 0, 2] - """ - - waiting_time = [0] * no_of_processes - remaining_time = [0] * no_of_processes - - # Initialize remaining_time to waiting_time. - - for i in range(no_of_processes): - remaining_time[i] = burst_time[i] - ready_process: list[int] = [] - - completed = 0 - total_time = 0 - - # When processes are not completed, - # A process whose arrival time has passed \ - # and has remaining execution time is put into the ready_process. - # The shortest process in the ready_process, target_process is executed. - - while completed != no_of_processes: - ready_process = [] - target_process = -1 - - for i in range(no_of_processes): - if (arrival_time[i] <= total_time) and (remaining_time[i] > 0): - ready_process.append(i) - - if len(ready_process) > 0: - target_process = ready_process[0] - for i in ready_process: - if remaining_time[i] < remaining_time[target_process]: - target_process = i - total_time += burst_time[target_process] - completed += 1 - remaining_time[target_process] = 0 - waiting_time[target_process] = ( - total_time - arrival_time[target_process] - burst_time[target_process] - ) - else: - total_time += 1 - - return waiting_time - - -def calculate_turnaroundtime( - burst_time: list[int], no_of_processes: int, waiting_time: list[int] -) -> list[int]: - """ - Calculate the turnaround time of each process. - - Return: The turnaround time for each process. - >>> calculate_turnaroundtime([0,1,2], 3, [0, 10, 15]) - [0, 11, 17] - >>> calculate_turnaroundtime([1,2,2,4], 4, [1, 8, 5, 4]) - [2, 10, 7, 8] - >>> calculate_turnaroundtime([0,0,0], 3, [12, 0, 2]) - [12, 0, 2] - """ - - turn_around_time = [0] * no_of_processes - for i in range(no_of_processes): - turn_around_time[i] = burst_time[i] + waiting_time[i] - return turn_around_time - - -if __name__ == "__main__": - print("[TEST CASE 01]") - - no_of_processes = 4 - burst_time = [2, 5, 3, 7] - arrival_time = [0, 0, 0, 0] - waiting_time = calculate_waitingtime(arrival_time, burst_time, no_of_processes) - turn_around_time = calculate_turnaroundtime( - burst_time, no_of_processes, waiting_time - ) - - # Printing the Result - print("PID\tBurst Time\tArrival Time\tWaiting Time\tTurnaround Time") - for i, process_id in enumerate(list(range(1, 5))): - print( - f"{process_id}\t{burst_time[i]}\t\t\t{arrival_time[i]}\t\t\t\t" - f"{waiting_time[i]}\t\t\t\t{turn_around_time[i]}" - ) - print(f"\nAverage waiting time = {mean(waiting_time):.5f}") - print(f"Average turnaround time = {mean(turn_around_time):.5f}") diff --git a/scheduling/round_robin.py b/scheduling/round_robin.py deleted file mode 100644 index 5f6c7f341baa..000000000000 --- a/scheduling/round_robin.py +++ /dev/null @@ -1,67 +0,0 @@ -""" -Round Robin is a scheduling algorithm. -In Round Robin each process is assigned a fixed time slot in a cyclic way. -https://en.wikipedia.org/wiki/Round-robin_scheduling -""" - -from __future__ import annotations - -from statistics import mean - - -def calculate_waiting_times(burst_times: list[int]) -> list[int]: - """ - Calculate the waiting times of a list of processes that have a specified duration. - - Return: The waiting time for each process. - >>> calculate_waiting_times([10, 5, 8]) - [13, 10, 13] - >>> calculate_waiting_times([4, 6, 3, 1]) - [5, 8, 9, 6] - >>> calculate_waiting_times([12, 2, 10]) - [12, 2, 12] - """ - quantum = 2 - rem_burst_times = list(burst_times) - waiting_times = [0] * len(burst_times) - t = 0 - while True: - done = True - for i, burst_time in enumerate(burst_times): - if rem_burst_times[i] > 0: - done = False - if rem_burst_times[i] > quantum: - t += quantum - rem_burst_times[i] -= quantum - else: - t += rem_burst_times[i] - waiting_times[i] = t - burst_time - rem_burst_times[i] = 0 - if done is True: - return waiting_times - - -def calculate_turn_around_times( - burst_times: list[int], waiting_times: list[int] -) -> list[int]: - """ - >>> calculate_turn_around_times([1, 2, 3, 4], [0, 1, 3]) - [1, 3, 6] - >>> calculate_turn_around_times([10, 3, 7], [10, 6, 11]) - [20, 9, 18] - """ - return [burst + waiting for burst, waiting in zip(burst_times, waiting_times)] - - -if __name__ == "__main__": - burst_times = [3, 5, 7] - waiting_times = calculate_waiting_times(burst_times) - turn_around_times = calculate_turn_around_times(burst_times, waiting_times) - print("Process ID \tBurst Time \tWaiting Time \tTurnaround Time") - for i, burst_time in enumerate(burst_times): - print( - f" {i + 1}\t\t {burst_time}\t\t {waiting_times[i]}\t\t " - f"{turn_around_times[i]}" - ) - print(f"\nAverage waiting time = {mean(waiting_times):.5f}") - print(f"Average turn around time = {mean(turn_around_times):.5f}") diff --git a/scheduling/shortest_job_first.py b/scheduling/shortest_job_first.py deleted file mode 100644 index 91012ee3ac35..000000000000 --- a/scheduling/shortest_job_first.py +++ /dev/null @@ -1,153 +0,0 @@ -""" -Shortest job remaining first -Please note arrival time and burst -Please use spaces to separate times entered. -""" - -from __future__ import annotations - -import pandas as pd - - -def calculate_waitingtime( - arrival_time: list[int], burst_time: list[int], no_of_processes: int -) -> list[int]: - """ - Calculate the waiting time of each processes - Return: List of waiting times. - >>> calculate_waitingtime([1,2,3,4],[3,3,5,1],4) - [0, 3, 5, 0] - >>> calculate_waitingtime([1,2,3],[2,5,1],3) - [0, 2, 0] - >>> calculate_waitingtime([2,3],[5,1],2) - [1, 0] - """ - remaining_time = [0] * no_of_processes - waiting_time = [0] * no_of_processes - # Copy the burst time into remaining_time[] - for i in range(no_of_processes): - remaining_time[i] = burst_time[i] - - complete = 0 - increment_time = 0 - minm = 999999999 - short = 0 - check = False - - # Process until all processes are completed - while complete != no_of_processes: - for j in range(no_of_processes): - if ( - arrival_time[j] <= increment_time - and remaining_time[j] > 0 - and remaining_time[j] < minm - ): - minm = remaining_time[j] - short = j - check = True - - if not check: - increment_time += 1 - continue - remaining_time[short] -= 1 - - minm = remaining_time[short] - if minm == 0: - minm = 999999999 - - if remaining_time[short] == 0: - complete += 1 - check = False - - # Find finish time of current process - finish_time = increment_time + 1 - - # Calculate waiting time - finar = finish_time - arrival_time[short] - waiting_time[short] = finar - burst_time[short] - - waiting_time[short] = max(waiting_time[short], 0) - - # Increment time - increment_time += 1 - return waiting_time - - -def calculate_turnaroundtime( - burst_time: list[int], no_of_processes: int, waiting_time: list[int] -) -> list[int]: - """ - Calculate the turn around time of each Processes - Return: list of turn around times. - >>> calculate_turnaroundtime([3,3,5,1], 4, [0,3,5,0]) - [3, 6, 10, 1] - >>> calculate_turnaroundtime([3,3], 2, [0,3]) - [3, 6] - >>> calculate_turnaroundtime([8,10,1], 3, [1,0,3]) - [9, 10, 4] - """ - turn_around_time = [0] * no_of_processes - for i in range(no_of_processes): - turn_around_time[i] = burst_time[i] + waiting_time[i] - return turn_around_time - - -def calculate_average_times( - waiting_time: list[int], turn_around_time: list[int], no_of_processes: int -) -> None: - """ - This function calculates the average of the waiting & turnaround times - Prints: Average Waiting time & Average Turn Around Time - >>> calculate_average_times([0,3,5,0],[3,6,10,1],4) - Average waiting time = 2.00000 - Average turn around time = 5.0 - >>> calculate_average_times([2,3],[3,6],2) - Average waiting time = 2.50000 - Average turn around time = 4.5 - >>> calculate_average_times([10,4,3],[2,7,6],3) - Average waiting time = 5.66667 - Average turn around time = 5.0 - """ - total_waiting_time = 0 - total_turn_around_time = 0 - for i in range(no_of_processes): - total_waiting_time = total_waiting_time + waiting_time[i] - total_turn_around_time = total_turn_around_time + turn_around_time[i] - print(f"Average waiting time = {total_waiting_time / no_of_processes:.5f}") - print("Average turn around time =", total_turn_around_time / no_of_processes) - - -if __name__ == "__main__": - print("Enter how many process you want to analyze") - no_of_processes = int(input()) - burst_time = [0] * no_of_processes - arrival_time = [0] * no_of_processes - processes = list(range(1, no_of_processes + 1)) - - for i in range(no_of_processes): - print("Enter the arrival time and burst time for process:--" + str(i + 1)) - arrival_time[i], burst_time[i] = map(int, input().split()) - - waiting_time = calculate_waitingtime(arrival_time, burst_time, no_of_processes) - - bt = burst_time - n = no_of_processes - wt = waiting_time - turn_around_time = calculate_turnaroundtime(bt, n, wt) - - calculate_average_times(waiting_time, turn_around_time, no_of_processes) - - fcfs = pd.DataFrame( - list(zip(processes, burst_time, arrival_time, waiting_time, turn_around_time)), - columns=[ - "Process", - "BurstTime", - "ArrivalTime", - "WaitingTime", - "TurnAroundTime", - ], - ) - - # Printing the dataFrame - pd.set_option("display.max_rows", fcfs.shape[0] + 1) - print(fcfs) diff --git a/scripts/__init__.py b/scripts/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/scripts/build_directory_md.py b/scripts/build_directory_md.py deleted file mode 100755 index aa95b95db4b5..000000000000 --- a/scripts/build_directory_md.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python3 - -import os -from collections.abc import Iterator - - -def good_file_paths(top_dir: str = ".") -> Iterator[str]: - for dir_path, dir_names, filenames in os.walk(top_dir): - dir_names[:] = [ - d - for d in dir_names - if d != "scripts" and d[0] not in "._" and "venv" not in d - ] - for filename in filenames: - if filename == "__init__.py": - continue - if os.path.splitext(filename)[1] in (".py", ".ipynb"): - yield os.path.join(dir_path, filename).lstrip("./") - - -def md_prefix(i): - return f"{i * ' '}*" if i else "\n##" - - -def print_path(old_path: str, new_path: str) -> str: - old_parts = old_path.split(os.sep) - for i, new_part in enumerate(new_path.split(os.sep)): - if (i + 1 > len(old_parts) or old_parts[i] != new_part) and new_part: - print(f"{md_prefix(i)} {new_part.replace('_', ' ').title()}") - return new_path - - -def print_directory_md(top_dir: str = ".") -> None: - old_path = "" - for filepath in sorted(good_file_paths(top_dir)): - filepath, filename = os.path.split(filepath) - if filepath != old_path: - old_path = print_path(old_path, filepath) - indent = (filepath.count(os.sep) + 1) if filepath else 0 - url = f"{filepath}/{filename}".replace(" ", "%20") - filename = os.path.splitext(filename.replace("_", " ").title())[0] - print(f"{md_prefix(indent)} [{filename}]({url})") - - -if __name__ == "__main__": - print_directory_md(".") diff --git a/scripts/close_pull_requests_with_awaiting_changes.sh b/scripts/close_pull_requests_with_awaiting_changes.sh deleted file mode 100755 index 55e19c980596..000000000000 --- a/scripts/close_pull_requests_with_awaiting_changes.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# List all open pull requests -prs=$(gh pr list --state open --json number,title,labels --limit 500) - -# Loop through each pull request -echo "$prs" | jq -c '.[]' | while read -r pr; do - pr_number=$(echo "$pr" | jq -r '.number') - pr_title=$(echo "$pr" | jq -r '.title') - pr_labels=$(echo "$pr" | jq -r '.labels') - - # Check if the "awaiting changes" label is present - awaiting_changes=$(echo "$pr_labels" | jq -r '.[] | select(.name == "awaiting changes")') - echo "Checking PR #$pr_number $pr_title ($awaiting_changes) ($pr_labels)" - - # If awaiting_changes, close the pull request - if [[ -n "$awaiting_changes" ]]; then - echo "Closing PR #$pr_number $pr_title due to awaiting_changes label" - gh pr close "$pr_number" --comment "Closing awaiting_changes PRs to prepare for Hacktoberfest" - sleep 2 - fi -done diff --git a/scripts/close_pull_requests_with_failing_tests.sh b/scripts/close_pull_requests_with_failing_tests.sh deleted file mode 100755 index 3ec5960aed27..000000000000 --- a/scripts/close_pull_requests_with_failing_tests.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# List all open pull requests -prs=$(gh pr list --state open --json number,title,labels --limit 500) - -# Loop through each pull request -echo "$prs" | jq -c '.[]' | while read -r pr; do - pr_number=$(echo "$pr" | jq -r '.number') - pr_title=$(echo "$pr" | jq -r '.title') - pr_labels=$(echo "$pr" | jq -r '.labels') - - # Check if the "tests are failing" label is present - tests_are_failing=$(echo "$pr_labels" | jq -r '.[] | select(.name == "tests are failing")') - echo "Checking PR #$pr_number $pr_title ($tests_are_failing) ($pr_labels)" - - # If there are failing tests, close the pull request - if [[ -n "$tests_are_failing" ]]; then - echo "Closing PR #$pr_number $pr_title due to tests_are_failing label" - gh pr close "$pr_number" --comment "Closing tests_are_failing PRs to prepare for Hacktoberfest" - sleep 2 - fi -done diff --git a/scripts/close_pull_requests_with_require_descriptive_names.sh b/scripts/close_pull_requests_with_require_descriptive_names.sh deleted file mode 100755 index 0fc3cec1d247..000000000000 --- a/scripts/close_pull_requests_with_require_descriptive_names.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -# List all open pull requests -prs=$(gh pr list --state open --json number,title,labels --limit 500) - -# Loop through each pull request -echo "$prs" | jq -c '.[]' | while read -r pr; do - pr_number=$(echo "$pr" | jq -r '.number') - pr_title=$(echo "$pr" | jq -r '.title') - pr_labels=$(echo "$pr" | jq -r '.labels') - - # Check if the "require descriptive names" label is present - require_descriptive_names=$(echo "$pr_labels" | jq -r '.[] | select(.name == "require descriptive names")') - echo "Checking PR #$pr_number $pr_title ($require_descriptive_names) ($pr_labels)" - - # If there are require_descriptive_names, close the pull request - if [[ -n "$require_descriptive_names" ]]; then - echo "Closing PR #$pr_number $pr_title due to require_descriptive_names label" - gh pr close "$pr_number" --comment "Closing require_descriptive_names PRs to prepare for Hacktoberfest" - fi -done diff --git a/scripts/close_pull_requests_with_require_tests.sh b/scripts/close_pull_requests_with_require_tests.sh deleted file mode 100755 index 89a54996b584..000000000000 --- a/scripts/close_pull_requests_with_require_tests.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# List all open pull requests -prs=$(gh pr list --state open --json number,title,labels --limit 500) - -# Loop through each pull request -echo "$prs" | jq -c '.[]' | while read -r pr; do - pr_number=$(echo "$pr" | jq -r '.number') - pr_title=$(echo "$pr" | jq -r '.title') - pr_labels=$(echo "$pr" | jq -r '.labels') - - # Check if the "require_tests" label is present - require_tests=$(echo "$pr_labels" | jq -r '.[] | select(.name == "require tests")') - echo "Checking PR #$pr_number $pr_title ($require_tests) ($pr_labels)" - - # If there require tests, close the pull request - if [[ -n "$require_tests" ]]; then - echo "Closing PR #$pr_number $pr_title due to require_tests label" - gh pr close "$pr_number" --comment "Closing require_tests PRs to prepare for Hacktoberfest" - # sleep 2 - fi -done diff --git a/scripts/close_pull_requests_with_require_type_hints.sh b/scripts/close_pull_requests_with_require_type_hints.sh deleted file mode 100755 index df5d88289cf0..000000000000 --- a/scripts/close_pull_requests_with_require_type_hints.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -# List all open pull requests -prs=$(gh pr list --state open --json number,title,labels --limit 500) - -# Loop through each pull request -echo "$prs" | jq -c '.[]' | while read -r pr; do - pr_number=$(echo "$pr" | jq -r '.number') - pr_title=$(echo "$pr" | jq -r '.title') - pr_labels=$(echo "$pr" | jq -r '.labels') - - # Check if the "require type hints" label is present - require_type_hints=$(echo "$pr_labels" | jq -r '.[] | select(.name == "require type hints")') - echo "Checking PR #$pr_number $pr_title ($require_type_hints) ($pr_labels)" - - # If require_type_hints, close the pull request - if [[ -n "$require_type_hints" ]]; then - echo "Closing PR #$pr_number $pr_title due to require_type_hints label" - gh pr close "$pr_number" --comment "Closing require_type_hints PRs to prepare for Hacktoberfest" - fi -done diff --git a/scripts/project_euler_answers.json b/scripts/project_euler_answers.json deleted file mode 100644 index f2b876934766..000000000000 --- a/scripts/project_euler_answers.json +++ /dev/null @@ -1,834 +0,0 @@ -{ - "001": "c0b20f4665d0388d564f0b6ecf3edc9f9480cb15fff87198b95701d9f5fe1f7b", - "002": "1f5882e19314ac13acca52ad5503184b3cb1fd8dbeea82e0979d799af2361704", - "003": "5c09f0554518a413e58e6bc5964ba90655713483d0b2bbc94572ad6b0b4dda28", - "004": "aa74f52b4c428d89606b411bc165eb81a6266821ecc9b4f30cdb70c5c930f4d9", - "005": "1ba90ab11bfb2d2400545337212b0de2a5c7f399215175ade6396e91388912b1", - "006": "537942be3eb323c507623a6a73fa87bf5aeb97b7c7422993a82aa7c15f6d9cd6", - "007": "ecbe74e25cfa4763dbc304ccac2ffb9912e9625cd9993a84bd0dd6d7dc0ca021", - "008": "b9fb30b6553415e9150051ce5710a93d0f55b22557c0068d8e16619a388f145a", - "009": "d912d9d473ef86f12da1fb2011c5c0c155bd3a0ebdb4bbd7ea275cecdcb63731", - "010": "bed2d160e02f0540f19a64ca738aacb79cfcd08ba7e2421567b16cb6e7e3e90e", - "011": "9ded5bc849d33e477aa9c944138d34f0aacc485a372e84464e8a572712a5b7da", - "012": "3e7be445b6c19e6db58c2482005c1f78cb74011a4279249ca632011a9f1b61a2", - "013": "3cb265a96c5645a9ad11d47551f015c25f3f99792c951617656d84626fbc4868", - "014": "78a262dd40eba0f7195686ec7f3891a39437523456f8d16fa9065a34409eeac6", - "015": "7b8f812ca89e311e1b16b903de76fa7b0800a939b3028d9dc4d35f6fa4050281", - "016": "a6f988d30328bd706c66f8ac0d92aac21dd732149cdd69cb31f459dca20c5abe", - "017": "1a455b216c6e916943acf3fa4c7e57a7a5cac66d97cc51befca810c223ef9c23", - "018": "fde3f2e7127f6810eb4160bf7bb0563240d78c9d75a9a590b6d6244748a7f4ff", - "019": "284de502c9847342318c17d474733ef468fbdbe252cddf6e4b4be0676706d9d0", - "020": "c86a2932e1c79343a3c16fb218b9944791aaeedd3e30c87d1c7f505c0e588f7c", - "021": "e8c6ef4a1736a245b5682e0262c5c43862cfb233ca5e286be2f5bb4d8a974ecf", - "022": "85148c096c25e3ed3da55c7e9c89448018b0f5f53ad8d042129c33d9beac6736", - "023": "42e2552a2f589e021824339e2508629ffa00b3489ea467f47e77a1ea97e735c9", - "024": "4677b3d9daa3b30a9665e4558f826e04f7833dda886b8ef24f7176519a0db537", - "025": "7d398da8791745001b3d1c41030676d1c036687eb1ab32e0b5a1832e7579c073", - "026": "fbe10beedf9d29cf53137ba38859ffd1dbe7642cedb7ef0a102a3ab109b47842", - "027": "e4110e0852a2f70703f0081fc91c4a20f595919a038729cb37c564d68b875c6f", - "028": "261171a770d594f6a7fc76c1a839eda7f6dd4e9495e00e75048578fc86d8adf0", - "029": "a207c35d8417aeed4c9e78bcf83f936cd8191c702893be62aa690ce16bc909ca", - "030": "46e68e4199ab0a663ab306651528b06756556c9f0d8b819095af45e036dfbe6b", - "031": "8de34b4ba97b184c7a2096b9266776175242b87d67bc8d77d7289be6f70cd105", - "032": "0d246750daa7f1b367a21f55da454ddc8f62e0a95d163062e9b9273320d5130f", - "033": "ad57366865126e55649ecb23ae1d48887544976efea46a48eb5d85a6eeb4d306", - "034": "728b8d7d6d5d34cad9cbb7c3ea15f807ae57144594b1740b3c73b82314ccd1ed", - "035": "02d20bbd7e394ad5999a4cebabac9619732c343a4cac99470c03e23ba2bdc2bc", - "036": "9480c0160719234b57defc0681c0949a175ffb3ff4a3bf5e8163ac843f383f35", - "037": "e9800abda89919edac504e90dac91f95e0778e3ba0f21a0bac4e77a84766eaaf", - "038": "b2004522103364a6e842b9d042c0707d79af68dec7810078729d061fb7948912", - "039": "fd0f7e53c5b02b688a57ee37f3d52065cb168a7b9fd5a3abd93d37e1559fbd30", - "040": "d29d53701d3c859e29e1b90028eec1ca8e2f29439198b6e036c60951fb458aa1", - "041": "bf05020e70de94e26dba112bb6fb7b0755db5ca88c7225e99187c5a08c8a0428", - "042": "79d6eaa2676189eb927f2e16a70091474078e2117c3fc607d35cdc6b591ef355", - "043": "6512f20c244844b6130204379601855098826afa1b55ff91c293c853ddf67db5", - "044": "97e2524fd3796e83b06c0f89fdcb16e4c544e76e9c0496f57ac84834869f4cc3", - "045": "8b0300d71656b9cf0716318be9453c99a13bb8644d227fd683d06124e6a28b35", - "046": "8485ee802cc628b8cbd82476133d11b57af87e00711516a703525a9af0193b12", - "047": "c7274da71333bd93201fa1e05b1ed54e0074d83f259bd7148c70ddc43082bde1", - "048": "743d17cbff06ab458b99ecbb32e1d6bb9a7ff2ac804118f7743177dd969cfc61", - "049": "47c6094ff1ff6e37788def89190c8256619ef1511681c503fea02c171569d16e", - "050": "6ee74ef623df9fb69facd30b91ed78fe70370462bb267097f0dfeef9d9b057bb", - "051": "d17cec28356b4f9a7f1ec0f20cca4c89e270aeb0e75d70d485b05bb1f28e9f6d", - "052": "ebd72b510911af3e254a030cd891cb804e1902189eee7a0f6199472eb5e4dba2", - "053": "9705cc6128a60cc22581217b715750a6053b2ddda67cc3af7e14803b27cf0c1f", - "054": "12e2c8df501501b2bb531e941a737ffa7a2a491e849c5c5841e3b6132291bc35", - "055": "9f484139a27415ae2e8612bf6c65a8101a18eb5e9b7809e74ca63a45a65f17f4", - "056": "3658d7fa3c43456f3c9c87db0490e872039516e6375336254560167cc3db2ea2", - "057": "620c9c332101a5bae955c66ae72268fbcd3972766179522c8deede6a249addb7", - "058": "196f327021627b6a48db9c6e0a3388d110909d4bb957eb3fbc90ff1ecbda42cb", - "059": "0295239a9d71f7452b93e920b7e0e462f712af5444579d25e06b9614ed77de74", - "060": "ad7c26db722221bfb1bf7e3c36b501bedf8be857b1cfa8664fccb074b54354f9", - "061": "94e4fb283c1abcccae4b8b28e39a294a323cdc9732c3d3ce1133c518d0a286f6", - "062": "d25a595036aa8722157aca38f90084acb369b00df1070f49e203d5a3b7a0736d", - "063": "0e17daca5f3e175f448bacace3bc0da47d0655a74c8dd0dc497a3afbdad95f1f", - "064": "6d62aa4b52071e39f064a930d190b85ab327eb1a5045a8050ac538666ee765ca", - "065": "1c6c0bb2c7ecdc3be8e134f79b9de45155258c1f554ae7542dce48f5cc8d63f0", - "066": "316c0f93c7fe125865d85d6e7e7a31b79e9a46c414c45078b732080fa22ef2a3", - "067": "53f66b6783cb7552d83015df01b0d5229569fce1dd7d1856335c7244b9a3ded6", - "068": "4bf689d09a156621220881a2264dc031b2bfb181213b26d6ff2c338408cf94c3", - "069": "79555e4b891e2885525c136f8b834cc0b1e9416960b12e371111a5cb2da0479f", - "070": "08c6a7c8c06a01d2b17993ada398084b0707652bcfbd580f9173bcddf120ac2c", - "071": "63f032489227c969135c6a6571fe9b33d6970dc6eca32c2086c61a4a099c98fa", - "072": "9ef8a4249d4b8f24147ab6e9ad2536eb04f10fb886a8099e88e0e7c41cf7c616", - "073": "ae9f9c786cd0f24fe03196d5061545862d87a208580570d46e2cfb371319aa68", - "074": "b7c7470e59e2a2df1bfd0a4705488ee6fe0c5c125de15cccdfab0e00d6c03dc0", - "075": "8a426e100572b8e2ea7c1b404a1ee694699346632cf4942705c54f05162bc07a", - "076": "81c54809c3bdfc23f844fde21ae645525817b6e1bee1525270f49282888a5546", - "077": "7f2253d7e228b22a08bda1f09c516f6fead81df6536eb02fa991a34bb38d9be8", - "078": "71374036b661ac8ffe4b78c191050c3ccd1c956ca8a5f465ea1956f7ce571f63", - "079": "2df095aea1862ebfed8df7fb26e8c4a518ca1a8f604a31cfba9da991fc1d6422", - "080": "58bfe3a44f8ae452aaa6ef6267bafc3e841cfe7f9672bdfeb841d2e3a62c1587", - "081": "04bad90d08bdf11010267ec9d1c9bbb49a813194dace245868ea8140aec9a1f7", - "082": "52c42c55daea3131d5357498b8a0ddcf99d1babd16f6ccaee67cb3d0a665b772", - "083": "a825281bc5ce8fe70d66a04e96314e7de070f11fed0f78bc81e007ca7c92e8b0", - "084": "692a776beae0e92d1121fed36427c10d0860344614ead6b4760d1b7091a6ab1f", - "085": "7b2e7211fb4f4d8352c9215c591252344775c56d58b9a5ff88bda8358628ec4e", - "086": "8ffe8459134b46975acd31df13a50c51dbeacf1c19a764bf1602ba7c73ffc8fb", - "087": "cec1917df3b3ee1f43b3468596ed3042df700dc7a752fefc06c4142a2832995d", - "088": "c06356fdcaff01810e1f794263f3e44a75f28e8902a145a0d01a1fff77614722", - "089": "0df5486b7bca884d5f00c502e216f734b2865b202397f24bca25ac9b8a95ab4a", - "090": "cb69775effd93fc34ef38dfbfcdc4c593b1a3d8e7ab70c0f05d627dbc5cbd298", - "091": "327f057e054d1e6a9a1be4ac6acc4b1dedc63d8a88222396ffe98b3194067347", - "092": "538cd20a275b610698691d714b2adf4e4c321915def05667f4d25d97413ec076", - "093": "d8ed8ca27d83a63df6982905ea53b4613b9d7974edcee06f301cf43d63177f47", - "094": "d1b79281d95ce5bfa848060de4e0c80af2c3cae1ff7453cca31ff31e2d67ac14", - "095": "0a3ddcd71cf30a567070630f947ab79fc168865ba0bf112aed9b71fb4e76c32f", - "096": "9c527d233befbf357335e18e6dd5b14ef3a62e19ef34f90bd3fb9e5a2a0a0111", - "097": "f0e2911e303617c9648692ee8056beeb045d89e469315716abed47cd94a3cd56", - "098": "ededac5db280586f534cde4f69ce2c134d2360d6b5da3c3ebc400494cc016e78", - "099": "92c5fd0421c1d619cbf1bdba83a207261f2c5f764aed46db9b4d2de03b72b654", - "100": "993189cbf49fef4c913aa081f2ef44d360b84bf33d19df93fce4663ac34e9927", - "101": "e8539f8b271851cad65d551354874d3086fa9ff7b6f6a2ab9890d63f5ba16c68", - "102": "9d693eeee1d1899cbc50b6d45df953d3835acf28ee869879b45565fccc814765", - "103": "1f17277005b8d58ad32f2cbee4c482cb8c0f3687c3cfe764ec30ee99827c3b1d", - "104": "87dfcf5471e77980d098ff445701dbada0f6f7bac2fa5e43fa7685ec435040e1", - "105": "a76f4e7fa1357a955743d5c0acb2e641c50bcaf0eec27eb4aaffebb45fe12994", - "106": "197f5e68d1e83af7e40a7c7717acc6a99767bf8c53eece9253131a3790a02063", - "107": "bf13bc90121776d7de3c4c3ca4c400a4c12284c3da684b3d530113236813ce81", - "108": "3dea386e2c4a8a0633b667fdd4beacd8bb3fe27c282f886c828ad7d6b42c2d73", - "109": "735cc3e619b9a1e3ac503ba5195c43c02d968113fd3795373ca085ed7777b54d", - "110": "01b4e8163485356b46f612c9d40ed4b8602621d4d02289623e7dbb3dcbe03395", - "111": "97c1b054c094337ec1397cd5ccdf6c9efe1067ad16f531824a94eaadb3c0953b", - "112": "c99c843e0f6d6566132d97c829780332218e005efc14b633e25a5badb912d63a", - "113": "8dbc8319e5d8923ef7ab42108341ee2c32a34ffc0d19d5ae5677f1564813314a", - "114": "b3b9ebc9f9ddadb6b630eeef5d7ba724b3bb4d071b249318093eb7547949bbb9", - "115": "80c3cd40fa35f9088b8741bd8be6153de05f661cfeeb4625ffbf5f4a6c3c02c4", - "116": "a39208d7130682b772d6206acd746bc3779cc1bc0033f0a472e97993d0a32d5b", - "117": "54201fbc7a70d21c1b0acede7708f1658d8e87032ab666001e888e7887c67d50", - "118": "834e6235764ae632737ebf7cd0be66634c4fb70fe1e55e858efd260a66a0e3a9", - "119": "bcabd9609d7293a3a3f1640c2937e302fa52ff03a95c117f87f2c465817eba5e", - "120": "2bd8cabf5aecfcadde03beda142ac26c00b6ccfc59fdcb685672cd79a92f63a6", - "121": "5292478e83f6b244c7c7c5c1fe272121abdc2982f66ed11fcbc6ea7e73af124d", - "122": "6d78b19a042a64f08cc4df0d42fb91cd757829718e60e82a54e3498f03f3ef32", - "123": "057b9b6e49d03958b3f38e812d2cfdd0f500e35e537b4fa9afedd2f3444db8a2", - "124": "d251170c5287da10bffc1ac8af344e0c434ef5f649fd430fcf1049f90d45cf45", - "125": "e9b7a676dc359ffce7075886373af79e3348ddbf344502614d9940eecd0532c1", - "126": "38752ed2e711a3c001d5139cb3c945c0f780939db4ea80d68f31e6763b11cfba", - "127": "e707d9f315269a34d94d9d9fa4f8b29328e66b53447ef38419c6033e57d5d123", - "128": "5e15922fba7f61ddccb2ee579b5ec35034cc32def25ff156ae2b0a3e98c4414e", - "129": "3cc4ad1254491787f52a66e595dbb573e13ceb554c51d81e42d5490a575da070", - "130": "7a6e9899cccb6a01e05013c622422717f54853f7f2581bc3b88a78b25981da08", - "131": "4a8596a7790b5ca9e067da401c018b3206befbcf95c38121854d1a0158e7678a", - "132": "ed77e05f47f7f19f09cae9b272bfd6daa1682b426d39dcb7f473234c0c9381c5", - "133": "e456d3fec55d88653dd88c3f8bbde1f8240c8ceb7882016d19e6f329e412a4ae", - "134": "b144116982f4f0930038299efbdd56afc1528ef59047fb75bade8777309fde4b", - "135": "0709e1008834c2ca8648376ac62d74ac8df5457069cbfedf2b0776dab07a3c5b", - "136": "84692ebaa4fc17e9cfce27126b3fc5a92c1e33e1d94658de0544f8b35a597592", - "137": "6eca481578c967fb9373fe4ce7930b39d8eefe1c0c9c7cb5af241a766bd4dfbc", - "138": "1b5f0f504917592dea2e878497b0e12655366f2a7a163e0a081d785124982d2c", - "139": "0d2f26ec4004c99171fc415282ec714afa617208480b45aeb104c039dc653f5d", - "140": "78ceab5e434a86a6a6bb4f486707bffaf536ef6cb2cc5b45a90b3edd89a03283", - "141": "d74ae4b07f05779065fb038b35d85a21444ed3bed2373f51d9e22d85a16a704c", - "142": "f59af8b0b63a3d0eb580405092c1539261aec18890ea5b6d6e2d93697d67cd38", - "143": "66e9d1093f00eef9a32e704232219f462138f13c493cc0775c507cf51cb231ed", - "144": "09a1b036b82baba3177d83c27c1f7d0beacaac6de1c5fdcc9680c49f638c5fb9", - "145": "b910b9b7bf3c3f071e410e0474958931a022d20c717a298a568308250ed2b0da", - "146": "5292f0166523ea1a89c9f7f2d69064dee481a7d3c119841442cd36f03c42b657", - "147": "cdb162a8a376b1df385dac44ce7b10777c9fea049961cb303078ebbd08d70de8", - "148": "54f631973f7bc002a958b818a1e99e2fc1a91c41eafe19b9136fac9a4eb8d7b8", - "149": "c49382eb9fc41e750239ac7b209513a266e80a268c83cf4d0c79f571629bac48", - "150": "c89b0574a2e2f4a63845fe0fd9d51122d9d4149d887995051c3e53d2244bba41", - "151": "5d09e3b57ced9fd215acc96186743e422ce48900b8992c9b6c74d3e4117e4140", - "152": "c3ea99f86b2f8a74ef4145bb245155ff5f91cd856f287523481c15a1959d5fd1", - "153": "fb57f89f289ee59c36cede64d2d13828b8997766b49aa4530aabfc18ff4a4f17", - "154": "c877d90a178511a52ae2b2119e99e0b8b643cec44d5fd864bd3ef3e0d7f1f4bb", - "155": "58801bebc14c905b79c209affab74e176e2e971c1d9799a1a342ae6a3c2afbc1", - "156": "983d2222220ab7ffa243f48274f6eb82f92258445b93b23724770995575d77fe", - "157": "023344e94ad747fbc529e3e68b95e596badcc445c85c1c7c8fa590e3d492779a", - "158": "d1b58f4c07d1db5eb97785807b6d97a0d1ee1340e7dbcc7bb289f3547559f2fc", - "159": "cd3a3d2cf8973c5f2c97ebed2460784818513e7d0fee8f98f4fdcf510295e159", - "160": "3a926519b024ea9df5e7ad79d0b1c4400f78f58d07834f5ecd7be522112b676d", - "161": "2b3d09a4c76b282db1428342c82c5a55c0ab57c7a7640e0850d82021164477e9", - "162": "d50ce1ab3a25a5c5e020517092128ab3ec4a3bd5b58673b2e6cda86bcc0c48a0", - "163": "7e17ce0fca5d559f76015765c652d76b8468f9ddc91c2069d7799867b9d52769", - "164": "5c680d0b2c4dfac8aade87be60cb4d04a4c3d4db398f51e2cbf131d699b630a8", - "165": "304de2e63f91f8f74faaebae7a7ec2e0c6e0d8d322d8a747e4e3be88de2d3505", - "166": "14212843872dab188a86eb1f0f7012e1b72ea1097545f29377b3b9b52822af76", - "167": "18c18f8710f831a82eb74ae979bd36d609bee818c972ff88f8d8fa065270f951", - "168": "66640021d592f79b510f9d6101bd8eca89893187d23919c8edff4075e73ae390", - "169": "819b01e0394727fd089f84b9351243176920f03d0c6e33e5ff136016da5d8d4e", - "170": "e68fadd33a8c41d9a259577a278d8518aeb8b81c67b8cf03ccf43fc451ec8bd8", - "171": "33bf9ed4714b0e5da8828f8b3d9d3e9d0cf55c1d496324acb04a3f195252749c", - "172": "b9a27b513dc15448772cac5e914de61f02efe323f528892c0bff86d19913a6bd", - "173": "1b2a5e44fda5dfee3ce230f44fe73c672249f6620cdbaa343ba0ba808034958c", - "174": "98aabf085c6c8647f5e8a4775dc1d036513742d8e03b8c5c51e41bdfc9c3e7ae", - "175": "c03dcb22b7faf121d99542018dd10a07a778abee2678d35c03394a8d207b826b", - "176": "4fff1a7beda4291446d76e5ed5177c3f36e52a10481009fdaf2976da39e802ae", - "177": "614d3df0ba5fdffab2328eff8e9ca2d76b09bbc447c06bf1fab0419ae278fae9", - "178": "094a2ba3011118efdd9d4c1f839e6747dee8ba953b52e9012fe2977e32599375", - "179": "9f5563a5ea90ca7023f0304acba78005ee6b7351245a8a668a94dfef160f8d29", - "180": "dbef09115a57784ea4ea14c1fe35571301b0d6139bea29d1b9e0babf2c2aae05", - "181": "3920627e86db42beb1cdf61d026f9f7798082f1221db25a17fb7feb6c1d49027", - "182": "58096166bb8199abf4e07a9ef0f960065e5a635443c1937a1a3c527ade51d594", - "183": "bdf84a73b16a5dd5ece189dc970ab2c8f0cb5334c96bdd1d6ba2bad6e7f8a213", - "184": "c1e8c0f1b1eb3c258923e9daa46ef055bd79512b485c7dc73a9c5e395d5e6911", - "185": "0ea72907eb6c1120740cd80ee6b9a935cd754edcf69379328f24dfc3f09b9986", - "186": "3c0078aeae0362b6b7561518d3eb28400193fec73aab35980f138c28b6579433", - "187": "f2bc655b33e35669ee9adc841cbda98e0834083eb0657d10f7170e70081db7e0", - "188": "38e0291a3f5438779b157e5efcae6cef9db21cbac5607cd08882844cf981febd", - "189": "9b2a65ac4c35f6b392501dee2a28221a3975aac5f0866b476f5e6a5a59f3fcc2", - "190": "606fe2cb6525dabfcdab93afb594dbc8399cb967fc05f0ca93f6084d3f8fb591", - "191": "ea1977e7b22df383de61bded2a4bb3064cf17fcc0170be452330256f938b8d55", - "192": "91d614f139082168d730003f04b87135c64e13709ced2a96001ed60796867825", - "193": "65648f18a50a7f9195fe56bb8cb9e25421c6d777ad2447a3b566dc8c54f3399a", - "194": "cdd31847c6138853597261756d5e795884566220a9361217daa5ba7f87560404", - "195": "d12224510de6c98076f6289cbe342a7ec7ea3c5453f6e3cf8d37d9eea74bd07e", - "196": "1349b472d2821dff215e54d683dbfca49f0b490ade6a30b1db9667bc94e5312d", - "197": "e2aa8f7cb3ba893af8bddbffa6240e7eb71a4f4c4498f2a360f3db7b513094df", - "198": "a29d9edd0dceca9a72d2238a50dbb728846cd06594baec35a1b2c053faeab93d", - "199": "50a6b9725ef854537a554584ca74612a4d37d0ec35d85d04812c3ae730a4c8cc", - "200": "5b439098a3081d99496a7b1b2df6500ca5f66c2f170c709a57b27c6be717538a", - "201": "b4e86186652a11df0b9ec8f601c68b4823ae0bafd96357051371fde5d11a25ed", - "202": "057243f52fd25fa90a16219d945950ed5523ddb7eb6f2f361b33f8b85af25930", - "203": "2742f7af8ce9e20185e940bb4e27afc5fefe8cd7d01d7d8e16c7a5aaf3ad47aa", - "204": "15f5e9ae4636a6bf8bdd52f582774b9696b485671f4a64ab8c717166dc085205", - "205": "e03c2f4ceabf677ec502d235064a62271ce2ee91132b33f57382c4150c295784", - "206": "16bb96da8f20d738bbd735404ea148818ef5942d4d1bc4c707171f9e5e476b1e", - "207": "133fea765d0b055894d8aba573f47891c1f7f715f53edeefb200fbda758a1884", - "208": "90831cd89b4cceacaf099c9bae2452132cfa2f2b5553c651ef4948460e53d1f3", - "209": "570fab1574a3fd9aca6404083dec1c150e858e137692ee0c8011e702ec3e902f", - "210": "ae9a76ce3418c06d0eac3375a82744fb4250a2f380e723c404334d8572faead0", - "211": "aa4b2bc3a136b27bf10a858ac6a8d48f41e40f769182c444df89c5b9f0ed84e5", - "212": "81489bf56605b69cc48f0bce22615d4415b2eea882a11a33e1b317c4facba6eb", - "213": "a497e789f49b77d647de0e80cd2699acd3d384cc29c534d6609c700968124d14", - "214": "409520c6a94de382003db04a3dfee85a6dbb71324f8bd033e566e510ad47e747", - "215": "0eccb27846f417380a12dfd588a353e151b328425ecf3794c9cf7b7eec1a1110", - "216": "f735b4b441635ecded989bdc2862e35c75f5179d118d0533ae827a84ed29e81b", - "217": "9aa88ac109aefaa7ce79c7b085495863a70679058b106a5deb76b2772a531faa", - "218": "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9", - "219": "9da1307fd12f4c9a21a34e612920cec286d937418a2d5040676408ba0c47f3d8", - "220": "a262318d02a14747ed2137c701f94248bf8651a23d1f82826952e66c25029588", - "221": "bfb4e53578fa42f83eda027da0467a351298dd65e3e8e84a987d69fc275e9f2d", - "222": "4308f4374b84e657aa7a21e5f5fe42ed16386b6dc7a74bff0d24d08ad62acd26", - "223": "3790f82f65ce7bc071b4096ca22544548b3413a755f58bfc401eff3ddf487a86", - "224": "96356c050fa66d919c75212d789544db81b012bbaf1f7915b053cb9ba2d67de7", - "225": "f37f3f2b0dc57a86dee4ba6ff855283bb4d2f0dea1c5bd1b708853444c2ffcec", - "226": "49bd28d97a79875007a6713aa9700df14464217c28a6e76bc93ded57b75a33f5", - "227": "b1f73471a3e6ea1dfb04610bd89ccb110994780084280fae872d42a2786f9131", - "228": "e38da154f6cccd06cd0001924ec2dad8de5bdcd0b78b68e8d8347768d99ac0bd", - "229": "098ffc6baaa32734053275ce38f4bbe58efe0ff946bf31e0e2df4c6a169e23d8", - "230": "2c72b887a8638941b85765645b45c5cdb73255427e14d5114f6830f847a6b861", - "231": "4aa0c92e77eeed08994650ac6129d77db9f026ae2aee78ad5c9fde132fac0505", - "232": "5f7905b71cb897bc7cc6db7e29cc38ee459e2fd8f5d58ba4746d3acd4e46d444", - "233": "8d986e287ad21475728b0dbd9e935623d69db4e5fdca0d42bc32d70eda48985b", - "234": "2d9d03b778af897e305caa8a1a14a117737bbdd549003c6d7477dd3be8331694", - "235": "7168cff545d365b09e8997bb9450343c7090913876c8f7eb9f0e9849c6fc7dd5", - "236": "ceb3002bad36c22c5da82fd422b36bad91b97a7d3f5409ed5d16aa9b42dc137a", - "237": "c857d8fa78c8fde91f29b3fbe332c2e781f7e8b54532f4c352693d6676fda2a8", - "238": "3e2edae8b8ddbcfaecd5aa6c69cb5960b84cc16f7b3232f3386aae9ecbd23f20", - "239": "49df3a63ca6509687cabb3d208e92b057630231e66b87fe8c781baabb12a55f8", - "240": "5034a21557b2de1c5c2d2aadfe8ffe62162c23f42d1aaabc705ed8519e91a3c1", - "241": "85abbe1913df41c57d1e6f00cecea416edb19c64681d1bb43fb5024e2f48d409", - "242": "4da30e6198a3d9ae6a538c2366e08ee218de6efe2c5b8f231493e21489c21a7e", - "243": "7404bb7881a010271831847e71162ee7a393843922ee93cf7cf3455a0074279c", - "244": "21aa3213adeb0a562ec7161e1cfcb5f1701303f1c9f03ed726c536283e080db6", - "245": "22b9cfa9ab97c84eb64e3478a43acd4d95b90cae8c3453c968457a89c6387a81", - "246": "729e3de7687fc597be2eb4c592d697ff29c78cff6945c9690cfb1ee67550eeed", - "247": "f49b98df95a1f826c24cf622ba4d80427a0e0767dffcc28a9206c58508863cca", - "248": "44b8116c29dafbdfa984b3751c1dfd057b3e93fc57c8cd18495f1c0f605496bc", - "249": "49e96b6ba41e88901dbd118139ef6f013b4fc59e2347058a7e726cf6a2f14067", - "250": "f0e0dc05fb555ae5ba9820586bef3bb8a3a82905ece3d8a998a3015fc91c1c3e", - "251": "8c1ece1b350c210380456da2bab70054f717731b0dfb34bc3cf4abfacf696f15", - "252": "ad20a49374f9176bd26460d35f96f30d734df3cf6fc63b4642380b4e866848de", - "253": "ba1a2bbccabbcddbf29ee0b56d0d56b4f026e8a7b97e97de2d48c133ccbdf2a1", - "254": "381a2eac64a984a81671722bd95ca5b8b6508a6f490af46780e9f393c6797223", - "255": "5e6ece13372bad4a6ea011c933389dfaefedad5860aefba2ab97fe5f59156c42", - "256": "068d4a3c845803bf66a9e5320261a0fd7b6292a8230b271a6a83f0dc8c73e907", - "257": "d80ac9215ffa7adacb22711cc88f5b580272d0d65c49e1ea48e69d17e264d91a", - "258": "256c4d399703b7f16dadef9201efc0ef9f6aa6ee05ddfa2d3e26ff6efe09704d", - "259": "275a4e84039a1596ac7e8bbe186163dcfb02bfa99c209653ff5d505a29b4cb10", - "260": "f461ff2df66653be1a2e579b1aea515d4a84f2ae5ebea3aa21fb2477a53699f4", - "261": "178ecd56cd79c7aaec1353093571ce89845130991d64c5a715a02da83a2705ab", - "262": "2e0cb5e8fc8ef04c50a5b9ab9a9eecad446598ebc2527b19c447143e5ae09736", - "263": "c870fd75ed0d5ed92ec35789c522d029f364328a16282a1c5eb9b3b7e121eff3", - "264": "da5d6bdd89eacf70a88810935f80e4725da4feaf2aa86adb13985d7d9e1c247f", - "265": "13f16351c3971c286fae5e9cfbaf6f0a128a6507804fd280971a600019e352e8", - "266": "4f39cdd293598de9259231592e99bfc5fde82a0bc1820a4c5faeb54f96037f00", - "267": "3e054d92034d3d32c3d4e7acadf1c09232e468fc2520d23d2c7d183ec0735aa3", - "268": "2d47c47a2b19178cef9e4eba1a53dd39b5f8657bbe011a71c8d402d294d50132", - "269": "4448f310ab9bff796ca70c7b7d0cd3b9c517f72744a8615112f65ba30a6d61f7", - "270": "ce71f5bd1db540762e4bc6c4798d8b7f3d2b7068e91c300fd271a46298aea2aa", - "271": "5a05e212b9b6ccf6092081f567aa73d27da399d45418f674628a8154f9182b6b", - "272": "a326c2d7121d80861aaf110826615e560aa4efdec0cc9fdfce051c6b9038e781", - "273": "d32b75411f407c5da6a9a6b4a3907b9a9ebbca6b651324c03432d549671bb837", - "274": "b5740ac928d58f53537b05ecc80b7463dc1fd5a53400f57aa55573ecbd5faa56", - "275": "e1c843ff0e97692a180e384c1a9c03c7de06ef92ccad5aa6157fabf0dbe5b804", - "276": "2edf523574e0a062cacf21f51ed6f81128537f27a3cd27b84a8b5d2478d0092d", - "277": "130c990ad499345b7638e57dce365442e2ab2d2571546aae60a9fa6ed3834b8d", - "278": "2204d89df74e664621dfe8892277d50e7774f60613561d70ae06ee0eb4c483d4", - "279": "4618456c7239784964b8fcd27155e01cf5417a16cdca7b163cc885d598ba93f4", - "280": "4b2d9501483d450371ec4413519b0b3461502aabb970fb2b07766d0a3d3a3f85", - "281": "b04a4a02fa0ae20b657dcfe3f80ef84fd446daa1521aabae006b61bb8fa5a7da", - "282": "6dab2ee10b0dc8db525aeaa2f000f3bd35580ba91e71fe92bcd120ad83cf82c5", - "283": "c964c01082a258f4c6bb66a983615686cb4ae363f4d25bd0bdad14cd628cfce8", - "284": "df960dabff27b2404555d6b83aed7a58ef9a887104d85b6d5296f1c379b28494", - "285": "087de77e5f379e7733505f196e483390596050c75dad56a999b1079ea89246ed", - "286": "8f3e5fda508a37403238471d09494dde8c206beadfa0a71381bd8c6ac93abaf4", - "287": "5d834d4c0ca68d0dca107ffe9dbaddac7fc038b0ad6ccc7ba3cfb53920236103", - "288": "20a3ef9e411065c7265deff5e9b4d398cab6f71faa134353ccea35d2b279af04", - "289": "9dda7eb623939f599551ad1d39dbf405211352ae4e65ddd87fe3e31899ca571b", - "290": "a629c35ad526f4a6c0bb42f35f3e3fa1077c34e1898eac658775072730c40d6b", - "291": "81b1e5196bec98afe72f4412cf907a2816515bad0680bd4062f2b2c715643088", - "292": "614950a1cff05f4cf403f55393ed9d7807febbae49522ef83b97e0390038ae03", - "293": "9e4067ac93c6febda554d724d453d78bf3e28a7742cdec57ee47c5c706fbe940", - "294": "9ac900bf0fbb4c3c7e26986ac33698c46c6c3e8102ab75b40b8df94fc3a0c7a1", - "295": "2fdcd631f3c68bef3c90f8679b7aef685fa33f20c2d6eb5965cd2a62267c2ffa", - "296": "dfc947e61ea2138ebe47234ba503cf5246ecec530b12e363acb240822ddf0b34", - "297": "4d5af88ba8a28b49a79773d3e6521e8731ff07d49765203b157481469e6ae6d0", - "298": "94aa77eadafaad7327acb8e653888f00e114cca2fbe04691dabdafa2a0c8cd64", - "299": "0f221ba58a8ea417e13847ef91af9ff029561ac18c74bbeeb3f5509af81a3b03", - "300": "50a79fb6e417fb4a34e155a9af683aa9a74ee922a6c156a58bfedd22cf3185c4", - "301": "eb09a0097a47e7a95b892ad7230475a1a28343b47db4faeb3e47f227aeb04738", - "302": "fcf9736fe8c20a6d02f00e9b1e719de06aff4afa99d2eba166592aeff1b8f3b7", - "303": "e6266f575c94d805a67fcd3f2391d0961b4b121b8a66afbfbae76dfc34e5c06b", - "304": "189bd2a8daf5b638ede7c50035fcf426d125de87a401382f66ab75f35b2ac1f7", - "305": "0ac58c6eb8513f4ffe911bf0f044e0153862ee89c04939fd9b294860a37ec9ce", - "306": "335998d7e2a3fae2da75a5192d62c37dd006be96831fd37e7438ec6d84451c44", - "307": "4f1f2695b1b6b1660f3ef6ac31a81630ca74da9368eafbfb214ec1980705c13c", - "308": "bc5ae127f8690ba7f6e9ddad98a49137acb45abf4e187eaf3648f197c72fbe90", - "309": "6b78ed4c4bfc942b9b5dc340961f19c690d56f9d721b6b764d1db31da53139db", - "310": "0d183ec2ff1cbc768a9eb7eb06c2a354f6c8bab00e64ca2aed2da00825f33c05", - "311": "3ae7fdad095eed78e0c63cfe4e28ab7ba2b977259590ed38722e9c44727e598b", - "312": "329d107b5743a96e3551084832587a6346e410aa89641d83f03f1242a7244473", - "313": "ecc63ee12cbe487e5390007271890b8aa5df2cf48b8e692404895d3c2af20758", - "314": "5fa65495795c52818aea910c24e4d3176c71817f5268c34e1cb259b256737352", - "315": "95bd03b9913be37d24809d30e7bfd31a1b7a127d03d65e52086857bb3a364b5d", - "316": "ca6ec6c9159e10719cd8d2cfcfaf2fe2d3637fb3d497e2c80866de6b593632e6", - "317": "5b0d72d34b406ce20714a59f1c4d5340c5559285e340497dbcad68729a9db786", - "318": "3e2b479fafb86b8ab097588b8fa12ae8a078f8b5801e15c7faa1ef23d87a631b", - "319": "e04b18947b36771937dea491f47b75fedf42a6db684035f5690e6c2bd7e6031e", - "320": "e546e4a4c9020669c78a095aa5c5038242dd78e0f98517c0e23c43aefeb58138", - "321": "3da0198df2f98a7306ee6d2e12b96ba9a6ad837a6c2d4f316d3cd8589b6af308", - "322": "07e511e9002147c33739c924c17a61126d12823d143069535a615a97f86d936f", - "323": "be514911dd6258f860c2773253f6df6c22ca975a10c4e34db5903269f2975faf", - "324": "53ed94369b59a84d003ff3155edbf481a0eef362325539d6ab1a7f370ce919c8", - "325": "43c8dc1907d3e1eb30deb565475ec1ad4f807baf6ef34178508ec85071722f0a", - "326": "b08d72606988ea5a82e0caf15e68d81b4f2e8dbb4af6a22437916f3fc53e3dea", - "327": "f70bb9cb351daf610a91a3c769d84bbb3f3b8f1169b10839196b65b8585e7c38", - "328": "6e26ed661a0add2e583229066d304f7e765a0ea337b6a93bf979e4027b70b94e", - "329": "89d8b56a1e05d90ccde0df482ff2fec3d44270739810f3c5d06856c38d801380", - "330": "2dfac8e04d08dc5eefcbba4e475164103d339f844896a75ef3af2229185118f9", - "331": "a20f9b06c126f4ee65e3f3a0bf345007b35ecb69d035dd0ad848e09300130fcb", - "332": "6593d40f4e3f53a73191c704d388c7cd1639403da6e679c8e4169b26ade19f3f", - "333": "7499bc84f6bd2211365fec34943d64f6be80a53ee2efb21c099c1c910ca29967", - "334": "f24dd99fe5b46bb7a7a30c5eff61e71cab21e05f1b03132d7da9c943f65713f6", - "335": "8e2111c24160d92b1b29dd010b8b3a0a4f9af55f1d30bd5892756c58ffaec201", - "336": "eed2e8d970c1c5031220476e6b700d16e5065d7893a2766a53600825b4ad3ae5", - "337": "44e298d1b55c51c9f127989da1149ccf6bda24c40041f777d35d5b8f192753d2", - "338": "b3a60e80296f79cfdfc02354acc674162faefcb3fb78b9672254c9cfc6eb113f", - "339": "2b55688ba27d72202632783186211ee24ea39c53915066578291fffd9db73128", - "340": "15765221271275022a6ef57634d836b052ffbab6d7d5a6899992972143841e3c", - "341": "f7340563f85e057709a2fcc71bd448fed8d6de6907d8ba5f91fefa2abffda6cf", - "342": "f252eec230c2e92ed1fa04834bc0738b79597c3b0d2a66c787fdd520e63cb3d3", - "343": "1d65c53a04f7eea94ebf76d797c0f79fe3d251bd33e5edc16c780715531b4345", - "344": "86d3fb095439bddbc0d6e6e8e433d54aff04350e2da2ad05f53d607113075c8b", - "345": "21db551743591f9cd20fffcedf3bda17f9f178bc9fbca528a56c2c61b9e7c731", - "346": "f326e2241b7e57320914aa279f9ba2e155ea77f809a188958e0b590bea9c3ada", - "347": "0fb6749b98280cc8c26950a2cb9c9dbecac18f8760e161e9bab887dcb0077653", - "348": "0cdb77330ae73fbbd0f287240f82b7547a0ef42d37004003a9c759f86b686d61", - "349": "690ad38e4357b34368966b9de08d89e0c095246bf55969842f373f1976f86062", - "350": "5b427d47f98e296cb78875619fe67d42f41868b78886d560d8fcac89043fe945", - "351": "93dcda27a0c12f0c32cc35f0de161e7f7792d11abe5d4c50d7fd5192ab8b11c0", - "352": "d01c0cd49e7649289a1f13162757de494bb9104b20ac8bdb30a4180df5225889", - "353": "3d856f38821d7b221aaaa9baa3d7927f6e360919e8f8505d7499f9bbd85c44b8", - "354": "36dd3030dec4a8050d2079678250c9c6c86c66c64fdbe7f5b82e79024bb8d5a7", - "355": "b0a915b700e415ba3acc3ef261128680b921b5df9bd6fb1d35c2d1180e7f61d7", - "356": "a309814f13708f2eb5ee8dd1a3114e8f8b15646b8c797bc7119ceaa3f6911f0e", - "357": "61c9c81a41fd294a8f07033c8373706694faab4df3652d310e84904356cf5e6c", - "358": "7d59500b8883d81040173b88462a73849e0d386a53830d599e6a042f4c1c165f", - "359": "0793805920db4896155cbce40fb58570a3cc952d0c15ee57393fa3c6ca7a8222", - "360": "ee8cacd40fb7515e510cbbe7deb6005369ce7d9800ecff897f3fd8721fd6ef71", - "361": "e96f225fa470174b4ac787b21579ad1556804de85c0c83da99a92ddc2c56c7ac", - "362": "9a4ce079c1a882a306e21e0c145dab75a2698cba3860152f03dafc802ad9006e", - "363": "258a6e6ea10385ca3c0cf08377d13ef31135bd9479d5a4983beadf158e19ccc6", - "364": "13aefde214541fab44d2a3013c532637a3da82199fb6c0a1a941c3108f76b9cf", - "365": "0cd978902035027c6898d6b5fc11fb5931f06f8e8ec9c24b4706143c91de9450", - "366": "47495a92574a6d7b150eb3f4338748ba03672ff93162139f98e03847f96551cb", - "367": "fad9203cd26fccb99f0f89fdc569c230eda46cd72ed3fb7e5f6fbcce78ced1a9", - "368": "a237e13fa6c32b66695b8c8de6472d5c93c7650989f047f62a17438c07036845", - "369": "da4c450ba0c4f76556fce54bc3f6b2a754a626cf1f87ba3280f545e023942640", - "370": "5000899cd3070e1937d42a68766c840bdb9629a49c6112bea5cff52fdb4e9f7a", - "371": "7afb55ee21c0447f7b961265abe7ccf87f59af6206949bb1da19fd36334b09df", - "372": "fcf734716ed1fa724e7228a489304e3c55e813734fb5792a83f806ab04e40485", - "373": "83c98f0431cf944440dfe0a9831275ed451b0d16856aba4100f53170c55c2e6c", - "374": "d998ea6616a5a7a9f7beb3ec02f8cbed4a9c5f17be978c31f32ac0f9f4e4460d", - "375": "6a72aba5c61e27e281235b1f001ab68b840f6e8bef0e6bbd7bfd8eec1abf844e", - "376": "980dce9435a9fc03250df4e809c2f68c48601b64c30d32c6e67bf1faa35fe274", - "377": "7b4a0b6958cf23951636b5e27af8041dd9901256c53de44c9be313ffd0a01ea0", - "378": "a1b13bda78da3ccab1af6c330d3e768fce62841f924933285e7b1f7a8b7dcd5f", - "379": "c957fcbb90e1afe9a342e95608ca035596a7dfd4cef398ada55e05a2462aba14", - "380": "b794fae83475a77832f46e69799419f9881bd774e1bfda56773b587c42591039", - "381": "e7208f3630a20b01a5e1bf5d0537be9dae9fd7529773cac12b96c4ac2b0f8dbf", - "382": "70480c0d26a6d76eba0faf3ee047d6214b2ca4d1442070ae5e79893192ffa699", - "383": "3c814d251089cb2a92a78ec3424b2a729cfbbfc6a996fd48148261312364a9a8", - "384": "f709015ae0f8ad20bd2efd94d01af3858234e381942b5b15391ff7f77211b116", - "385": "0bca6cad1f4ff336b93c9f86c4ac872bda67ee0cd41b1862a7a663852717535d", - "386": "3e1748647b60bbf292aacae65b3608ccce8e55e203a36ff062ee787cd8c14480", - "387": "cf592fa81780e727a56553df32410beba6de9c33543dd1ef1155b368ba9a9b9f", - "388": "911326fcfb0638154f69eabb87e4c0c141df09e56274c8522e9c13b7b577f00f", - "389": "cdd56fb06838a10149f2c7229bbc76f78b4a5a58945fb70a47261f1bf635c404", - "390": "07dde4848eb878808635fb7b366261b1e9cb158635e76577eecc48ccf941323f", - "391": "76cd3def1eea8e2631d333798f4d282bf40f6254b2d18c02c78cb56b33462093", - "392": "c4f7ecf21a8738c3ad0114a1ee6a2d16668e71b499741381f30827ed451dc817", - "393": "7bbc419f89fde57d2862bfb3678ddab96614693dfca109d0f444e4762a2b7a8f", - "394": "7781ca3332d6da18b1b9be5e2eff634b526ae9e8088f6e479b49d657f4f41525", - "395": "5b5de0def2c4a989a54ae3e748362c78cd018778d5adc4dec13c1bde6ffdc139", - "396": "d42c389d6abc7d8102b8cd1b906e4600da08394388d4dcd432ec955e6d8b311d", - "397": "629e23dc358ed2a8c202e1b870e270e401aecc5d726a679b542df8e6becb4200", - "398": "c30114e73097c3fa4efb203915f3b828b1b8c432ddeab2b7e1ba3fe63c50e190", - "399": "a681ef7bdb22145a3e051ecf7bfb694c18b255c80dae6fb8d49f187d28f3c58f", - "400": "c993a792804e09c9f60313f4144953eec072ca6a8a27f44d8718ce53d9429585", - "401": "074b576ae2054cd030ffcfa132b1465f8f49b836f505cd4bb01af4a98f4f5337", - "402": "d45f88fc3c00673ef7e628d867a54a4ea281b3b2620735cea85a8da3b06321df", - "403": "a09086d3cdab7d6ff8a9fba1746c5d236e0ad0abe088be99bb172e80c6f0f8f3", - "404": "55a774ac3423440dda50d73e472887195940d5e9df605b30deeb0f2528b001a4", - "405": "ee9fa61ae8153df7979be3afe6377e584fbdad624833424a5cff64f6ea94c9da", - "406": "584cba4abd5711b8f558fde97620b8ff0fe91586bad052ccff87c49c13f72555", - "407": "ac50b37409f7ea91f90856bbfa716731013deffb5f5b51540a99736e08e5378e", - "408": "2c12c3cf062c3d9cf2c53e6e4dafce70ca5c7a38c97479c3b013cd91076ecf4a", - "409": "5a55b5fb584c359f4b6ee2d21deb62923b0b25e1b4c3da0a6f351079ce657173", - "410": "9e224b6ab0b7f20759b63d1799b426a8652c9e637b1f38d3eaf8beff73c80c67", - "411": "66c0c1ab79e9887b5daf2c510f2c2c4097044b69fee6bd4ffcff73ad4816b8c7", - "412": "27f1768d99e22f8b55d010b8b7acd904e8b66751d5310d32c4d017a0ad34d650", - "413": "7c99634a1161e424a14d60b516291655096eb90ed055326325d7f5de7a44a3e7", - "414": "4e03e038e99870b1faf45a0a29d6124379d05a0a3553a11aaaa91b8ba56eac5f", - "415": "955e433ea745016af2a5df015f1cc223ddd84ddccaee60d5302b7ad61542d9e1", - "416": "8d07a87b9012a166f5bec4dcd646d5957c9b3633a1a37c40c584ede75cb7ad22", - "417": "3f738338cef45597e3b839536953104186f11d94d16877c77abd8a067c152dc3", - "418": "0c813356b30108f89fb37e8774a98af4f9eca3df49e963f985ecea82a88b1437", - "419": "8ea8d93a9e874f8c8ceeb240f1f1245a077a7c0a62287d3044feaf855b5dae78", - "420": "af7ac1e90e07f189afbb284ae24614d9e713e32098bc39bb81d6484d47351444", - "421": "f45e155846624f37cf2ee08be2a63cb1ca35bf795fb0f770b4c91ab549f22b25", - "422": "69d728f7e25055dbebd41684bc6de61be6b4db4119d7ecdcef5b5d8ead976537", - "423": "3e78c62395be704a59a3a6a65e457725105619e0a6f9f3aa6b311c4f7762b0a0", - "424": "fbd6edb36c3754a35e7de936839c4fd0564db873924ba97b35cd43e065835582", - "425": "ee5bb631b2a9edf8ed05781b192f42e24ae748f3aa4ba5e635374c094d28ddac", - "426": "3e913e088a689d2d33bc797040cea94512bf54a61f96501f60576ab22ed0304b", - "427": "415e6da4c7f92da36e2d8c43fa8056d0050ae127e648451e2fada49bf2c936d1", - "428": "389bded7b0c14212fb69b559fd1ade4f5b235b976c9655365c45481c3afda486", - "429": "3007beefa50c509b89b86c54f53757ff701f795dc5f7ed47a1520c2b092455f7", - "430": "59ec8ec2866ca502ad558ade9f8a06a9ff815a1ed649bd1cb513f417f1d4727c", - "431": "d3f28dffa4e22b3bed74c3c2c9ded1e4a8be49d3757368e4e3efaf7f79affb15", - "432": "59fd80dbc8eb4af9596e4ce8a87313d363da41313351a69ab3525faeb905c27e", - "433": "471a7ddde597fbaaaed1941f42ca1fc0f4f047e17f2197f8999dea98b38213f3", - "434": "319cb430c66d9f418aa90a3d6f9c2dfc8171383d6f4af5803a73684afcf18e15", - "435": "aa29c0119ca84133617c8bc7455afdfcf5b05a569393ff21ebcb10d32ffde2c8", - "436": "928f772ad7a9fc501f71cdef6dfe60e2d8cb5d5c5800b519d01afeae0681dd08", - "437": "ea70162a014b8294ede65af6fcdc11fb365ab2b126aef8d47983d58816fd6a54", - "438": "43633662392854b5d9f9f0fa564605212d016c9ea9377d2a6ab52137238d4191", - "439": "42f7e88fab5c9cb31d4bb34403d7958abd5023e9cf9ac05cd29626c5df763584", - "440": "cd08ef4f14b804e3106ee88f9d2b24864d5e2fec6c7cd7dddfa2713e1431375a", - "441": "daa69bac44ce5f57b4b43ab6ece3b2b3561292c0f4c6e82a506ce2973713f749", - "442": "910d2abf184cfd7b1964cec906a79f3e45f59e3d42ec20b22f56de59c9018927", - "443": "7a14ac86724d318e6d40464e710c17625d441d1e7adf83d3062305de2f85d445", - "444": "390877dded07897360921e8d0d126bf45d6a379d47292c90826d775bd1897f2f", - "445": "5ee5723341b0b81c9e0172fcb654f8b24322244bc2d1b55afcb78b180ada180b", - "446": "8b2dcb0168e8701dc9da286489a1e68e43e1b17638e5990edd882196d7fd5a29", - "447": "179af1c75faa5f42e89ce3b41496a64b2d2846361f76dd5d87f4ce97ec2bec07", - "448": "18173b14e0c0bf403b5f0d4aa23515ecf44622b3a860d80e866cd498f107123c", - "449": "22d7739bccf54ea1159ce6aca3e215482deba85a4db0676cf86d82a760c44a6c", - "450": "938bf7cdedab94bd7208b69047014e3d9ab7b54d1223bd649eb3de0bd61ab47e", - "451": "abd88e378f54b649e818d6e1d8e06c9f8cf225ac96b4085523acbb1f0c1df24b", - "452": "4119701c51dd8c457b74a19ed7ae3bdf069f5fd915c8085e9a15d909a39db036", - "453": "381ba093e8ece9e14efc965ee94bb8adbd1c0bf140875ef95f8f11050d5ed489", - "454": "b7613128b0401fdbc07a4015eb3935f6677b84dff936fc5e7e9f424d0ba1006e", - "455": "35ee11c9763f48a68f2b60b4b9c3919d3a895afc7071e8dcac5abd5845dfe79f", - "456": "8b129a3c7163dae86f1f43c18557296240a02bdac70ad29538eb5dce00e51f4d", - "457": "629c99f9af0e962f00b812057c0967861a9b6db9dd652233ac4b37f368d09206", - "458": "02df8a1d11130bde8af932dfc5cafe7d8e6c2fc12b82df5d222a91e4eed8e2f8", - "459": "062b225facc7a897e0e42e6b0f95deeb8b02de64267bf5cea4cb5280ccec1562", - "460": "a05f9a7cb049c40760ea2196eb41df1826ad492e6e5fc4696ce7bfcf7a842811", - "461": "95e5e99da04c0cd73e1818a62be3fc0de98c76d5cbdc81261672824ed5b8c1a7", - "462": "69eafed1b3d4022fc245a8416c1120bdcd039716db8cd43351a96e6c7d10691d", - "463": "018efbd353bb456112cf2c760b4d96aef02aa899ef74d4aadfb3dcf374a22987", - "464": "cd4447e836cdbed7f6a3998b50c4ab467aedaeb8e54c377da34245e90fddbe12", - "465": "da0612471988c89ea2fb190838f9f5e9029fd106330a801e66280c967ff1c52b", - "466": "8d16100c0148ed7bd41003b4a0612cbc5fa150ddabe5f9916ed6eac3fcfdefa4", - "467": "d6ea164cb91d14d6aba2d482926cb6cbd1a3644737a0530abac635083a97b8a4", - "468": "8d0e3f6bff322ff11d1267f1f8303a8ce1e2d796b7dc2d9eb3e3da939dd850b5", - "469": "35e2072f22c7cb980fbe797e30c25e9224328813eb81d07d3c88820492ce9a1f", - "470": "4993f275946ae0d444410821faa3ef4a448f10888c50ff59f7ae01d0b50328d9", - "471": "b9af9323a0237fbf88fdb14b8bce95c084351325249629ffd4fbb32fe9d6da5d", - "472": "5b278c08ab97d82c1779411fb1018b07feac7ddf38a69e4d398240a495c54271", - "473": "4448b03417a784f554c44eb15ad2d4cc022bd9cb5abe2547811eb8085355aaaa", - "474": "1c64fc4076d6b00aff86a180fd9af927b7c1c9ba87a2ca3c83dd80ba5e5ea973", - "475": "e571b4b8218a2961ed2b04f62f816eb18686d82b7f2693694b9c774acef4a0ff", - "476": "a6383ed918d7851ed7503921a64201a032a33c9e1cbd4e08d1233f543bd21be9", - "477": "c871da03e684e099190c4ce787a9588ae85841246ad7bcc9cb4c302d617f881d", - "478": "96d8bec6b787a7aea2da8dfa8a1226e00881afc218c211fc59da830775d55acb", - "479": "b35720df96afbd98c6a4f081ae1173fdce21d63f75f7b455f4c2b9fc0aa672c2", - "480": "2db876e9625c8638c66103ad0206c9a51b68d4c6a3222f403b195a81837856e3", - "481": "bac35824e79af403a2058b08cbc84f8e4df93a21d1766e4ea1de6414e2a8a926", - "482": "0f9797e2f3691bc7291d81d1ddd5d88cb4e10b0be555e2ebfbd3c5b12b7cd2b2", - "483": "8f3348df383ec9ee00e18d41c419370d42ca6ebf71c510690aa5435a679b7e4f", - "484": "3b3bac32669c5b66faaa42b89a2dcb4de0bb9aa0bd279d60061dbe9e7039f5dc", - "485": "25d0335a0576f974617351ef5aec889f311fc8d7cddb997862b10b2496842d4d", - "486": "93b9a59a937594d2196271416ea3b2221d32b3b40a04bbebbdf97e8bdc557e0a", - "487": "a643c75a8d062b87a1c8635fdf439c04d949ce01f75dde10ab6edba90cbaee77", - "488": "984593c12abbff5d009091cd3c1883c87efc535f760727ed12f06df0902bfa75", - "489": "926ac61244f94e10270a2d40169de025be6db342b3de7f0db33a50b07176c143", - "490": "e2c8142e501b0b0b808d2d36f5f38266f99cd3aaca7d2f70f4bba386ae1d2025", - "491": "1a1c8b472424f8057c94a9f5e0c0b673551fbe9ea4cde5ca2d90df1de76a5c76", - "492": "345a83966ead821efa2a9de93aeb0fd5bd60a8f50e162caae2447f1f4d9462bd", - "493": "ee7018d63b08bc7226d6f77c2345a87e09fc7cc87b0a003aaf3a4a3f622edffd", - "494": "3d69e540997d79f21f249d4d8f73cd75119d81bcfb8bd80782863249f0d7c62c", - "495": "b717f1088b0ce24851c30d54bc8dad9f3ae93402b91c874e385e5c699323a5e2", - "496": "fbe77ec1978ad86e73e5a3f494fa7c198fe334b511298f5a0f2d04d6a7f51d01", - "497": "a4a66d6c7c555a2997ca59a8dbab512388adf20902293a5617132a16df76d954", - "498": "d71813b8175fa2d70181d87ae8f839e79792516a1cfa99a7e6b29500c057617f", - "499": "477d5b817df8c0b6f0928d02a58fc39fde2224493cec89393bd6dc349e5235bf", - "500": "3ac8e26d4864c538936efa7c5920435107a50c01306adaee5a4aeaa2ef378f7d", - "501": "766448b05b248ac3d6e991baa3e4b2d53b02aac426bda312c2299b2b983e145e", - "502": "50218b55f5b7207438137f2b0c71e3f6d37afd76aa5b1f2106111f3432b4cef8", - "503": "1d7c24799a287d42e97dd4ccc5bbd3713ce139e6294896cc5fe2efb80a1be7ad", - "504": "9878db5eb2218b18568dc8cfa13bc8363a1c93e6a59a05cc76da0588fd54af46", - "505": "872fc20275833f09c8aaef277abfe77f67be6bd443b489e0cb8bdf9d4ca9fac7", - "506": "d66834cc7ebe58cce2ee1c02bb11ae69672d711ead6a0a58ab592339cddbf02e", - "507": "ae955394665befbbc89e2ba85b5e520cb293b8d03209b1f71d78ce2cc807a437", - "508": "3917ce4173af47bfaf8525f0917736bde3f4bee0ed5fae721c3e2fa957ab1675", - "509": "2f64571cd71f0e59006da84808abf3d3ccff9a38884321533d448b3e8e3cae05", - "510": "41ce72f4701e786427413b68fb70bd77d921c06648ca15033ce1926a9f1224cb", - "511": "c9fc787389265492e60d5503f279714d5b19760ea7b2e1a720e6fc0251fe087c", - "512": "a8af6acf3744af13cde63540e37bb9bc722ea19a012656e3a3c5bfff8292c423", - "513": "506b90816555d1083be7d211f02a5db364e5c2337fc85b1ba845c1a806689373", - "514": "e4e9536766181eda627721723bfbdbca85859a3ba92d439f58ac0009c102430c", - "515": "16daaa62fa87776bc4843d226988cc83ee846ceef7b885ab63e10789b30071ae", - "516": "44b6de4eb51dd8f762142f284b154d3153592549cdea3b94467fa95484a4f172", - "517": "bb72c6d437197a8c1f1132626b3b47adb9827f4f9b912d1069cfcc75575371b5", - "518": "ff57c1f518651af805bb4b258130c7c5b0726422c3390327217562088785b4ba", - "519": "159b59f1261b7a31d7172cdc28d9515d0731e5117cb30f34a497bc3bd0496da2", - "520": "bdfb7f17c8c841c0b61ee7f00e51f09e4c78c90f7977548b72050a7aa12dfa3f", - "521": "bd27ca9292c19160cbb0568f750b247fbb805b85f4a2316fcf2c3a35d3ae031d", - "522": "98e0ef155297aac8a4060d204614753f26f6ba5357deb78c683783dc7ae30191", - "523": "9bfc344c80d1200fe12bea3ba4cacf8d5ac9693258962f2f15f42b30ce8ef3ef", - "524": "8df22d8716d7ca6354ea42b8e522d286ff9362cfa5881f527efcf1a953ed1151", - "525": "13dc6d869fbe2c3d95f715e55f02bc3d5787874b4c88d7da1d05360afd2025fa", - "526": "dfbe442040ce9afba654773fb14f307d67ab614267d3feb6b18df03182b5b60f", - "527": "ba634833af68fcf0ca7bcb08fa699b2c5fab934eb81ecd85e7464b01bca131ca", - "528": "016f7b569dc1c3466c97754c7dcc0f76c2a32a76c22357cc521bcc330d86daf5", - "529": "4960ff863e3d21a58f9e81c3d94075cb7a4daea5fcf396812382111e462fc57f", - "530": "6a2e45fdfcad65e0ee84d206d59cbac998026d7415d16a5c0b8c55e4a7d6bb3f", - "531": "95ec72fa8c409255d43e7c8d4e957bcb9239534973187b3b4cc2557b09bdba98", - "532": "fee6802490757983c499a08831d9bdc75a9eff08700bd29e8e5c134583ee07b3", - "533": "8a056666bd75d853a12d22b8317042a3f5500cfb21f6698d90ab41e01edcf81d", - "534": "8f65c9feb935e09a04c87143d1b2c63e38f08738199ebcc2758f67ee914d8a48", - "535": "ed8970f8ef1e2374289fc735aedff90b010c311a3b80d16df6bca2d3c250fdeb", - "536": "f82635851b442ec0ee95c5c2b7377ba382aa364cc49ff4e981d509ef324bb356", - "537": "54fc97bb6f3d7c724d4e245df37111c20334972300297fe38b590354fb9dfe92", - "538": "650c7f5f382c295cf6e7fb092db6fdfff164c861bcfcfe1fb38a50268f53f50a", - "539": "0bfb3df290912d8a70dc5e1e2761151cdf2c4b75d4b37c8fdcbed7483ada85fd", - "540": "08f1b2bffa88a9d01eecb8c9da6636b5e668a5478d8876a63ec3a74d7f932205", - "541": "5e59cf440336e86b67c17ed61f7bee7e548c434f475c415294b3b652d1aec606", - "542": "1257b6a3ad900df97f5aabc1e18b9f7ddae8c7d7ad60216ae21b5b7310cbda84", - "543": "8a783bfbe11c7f7b24431a15a0eb582f6fe5f75d1d21a3d55f8d8d81ba6b411c", - "544": "ce93bedef94ffbf62ad449cb0c68e8103a0bd005563ab854daa5e470664b4d7b", - "545": "40c253003d601fd2c90908bffcd8133e77489fe247e74ec03901895318fe69de", - "546": "d40739115f18fee96817266232ff1b8845e7966778fdcc644028fe5c759469be", - "547": "fa32a8de8fdcfc551d808c5dd0ff5545a199027acd32e380959b91f3b3d04643", - "548": "72e66168068b6ffcd2988e24124c8b1dba9a5b52a383a937397575e3c1e3f031", - "549": "a23baaa745a976b4f212836beb81a0a7b42d9f2e923c2412e2c07c63ff660ceb", - "550": "f58ff320639b2c47c76ed8aba487e31da0fd4656c3be6e33807cd00f77456e5d", - "551": "0449ec4d6d5b2e88603e62f3ec0287ed711cff682bbdfe298a197144ab24e80b", - "552": "f125761e8a0d02b17b1dc4be40216f2791727fd4e4bc56f60ebea1925c2fbf36", - "553": "dbb93b2a6cbf972bb1f94d1f8656cd113a09a02cbc44f25737e7d75c986646e1", - "554": "dcfd1e7a4a32ff0fae296b8211b5c9e91ab81844a0308933f598c712c1bc313d", - "555": "cebbca914f917f990202f110e77285132d2a5a3ba9a7475c93e3561d8ba88ea0", - "556": "0d5518ef165979b758fcc8df9c8cf536861f376f8640541ba6112ee7610ed82e", - "557": "0547c86b57c7c8c590f6d7a5131778f5b6ab2eeccc5e819e5fd095a6d4e68b08", - "558": "e763aa1dd494e097251484381ddb057c7d79b739c3f8644b1759e786e12f5b40", - "559": "e48eea4c3b4c9d58fe02739accf31bb64dd9c31623ad4cc06c740463d664c098", - "560": "77a09dc1ea6f1ae669004b8c9429dd83ead1148c62e0d945173edac45d9000a4", - "561": "756d226727e611d4bd22aa33747da2f635eeec070906dbc3262ef29e341e2a6d", - "562": "29de450d6e440c528287b98bcb4b76fb5155ab573df4721467446114661936ed", - "563": "7703d943dbbfdccb90acad65ed7c0eb13a10034ad01809472a55eb3162b7e53b", - "564": "65712c105411e6fc0ed35b9347de8cbaea33b0c5e57cf162f48dc257dd4f05b5", - "565": "2945ef4779089c9e49a9a9f5e2a67ba7e393aa20a955ed9302da6677cb03a9cd", - "566": "95d936e1d454df2e1e7d486c43af387b39a50cb57e57c7712d967bc9ec556f41", - "567": "2abe8af9ee20c6b8ad5034bc31fc1f4f16769595d5b4fc2837db3e76a90ac405", - "568": "fdc104338866e50ae2bffc1ea19719136f639df6c25f38a8680a70e9375a9378", - "569": "25677266de2b900788dfa047cb53f5585c37b564b3a711243fad52e186ec184a", - "570": "9101edb48d98c3742ceb713de591d261b79e90481d28f83f2d2c74d7034f4b46", - "571": "c364dde8cce2080d073eb1f9666cca97ccdeba61b2bf19ca0c84987e6f8d3576", - "572": "9cc3049e9464376b95fb88d6fff4331e0e40196f92a0a9aa1c5d10dfe33079f7", - "573": "2ade73491e183608b340f312d08cfd39c10ecb581c87b873443590452580a43e", - "574": "96325b210d18a7a1d6873e00a859648c4754bd4c91c324aa812ed78bd047118b", - "575": "33942a261a9150e2b5ce2ffe5b934a81f3972cf5aa5a9414a9d5f63f6b55324b", - "576": "7fca01a835681914b5fe5014d5649b5170faf459375ccc2bf9ad71ebaa73940c", - "577": "2bdc7a0e8adacf885c6ea0f6534b935b8a9dd338c5dcff05a74c162c3e9dd531", - "578": "ce6b6de1d907c8839b84f5f3967f6af7e9a3644a0bd7dffe80cfe531de08f8ca", - "579": "03dbff2575902a3c56a64483c8e8ca38d9888f72c6a71a6236eb07b808fb24ab", - "580": "96892003c30358ed55a39e13e6159fad09ebc3916e34492b91d63832fa86f731", - "581": "4fc5533c52133e54f8b54dcbfc4555638ae809676dbfec9d1400ab032f30648d", - "582": "7ba9b154acf699c8a123df5471fd40ad556cf6fc630136c686c87b09c88ff546", - "583": "ec10ea6801eadac9ae8ead5f222e0580f419b67d2ad5cd5c8ac914dcf5cfd69f", - "584": "510001c4104c80517a13f967df6ee071f15fb7b65e97229bc91b2925cbe4e93e", - "585": "ced737da53940337c5dff81720024fbaf4cee38aed1d3514d2a75c7b1271acf8", - "586": "9ab074d1d480d718930c9abac8b616a0bc5c30846381d6d9bce1741e9bca1991", - "587": "ec3fdcd8136188e3b476270894351cdc05dc44a4df50d1c4ed727294fb89430f", - "588": "31400607f95129fcc531604b7b0478a748d2495746280dc07ff30e39cd6f4a97", - "589": "3051de9b2a7ced941140aa1074952029f532e133beb41c18bfd990f43bfbd9ae", - "590": "4af295f83800334d77a04d56be7524ff6241e3d8b2f23820c9c54580b7996086", - "591": "2ecf2c1ab8d9e5cef5224842732af17bd2259598e4363e1d46cb172dccc39022", - "592": "2e71a26370d45781f31ede0c7810c2705706ce63291a52d5cd6f060ae16aeb01", - "593": "423867f77b64f725f823204796301ae09b427190cdbb62d472bc1395507da9a2", - "594": "6c28830e35913c59000dfce4432db255f7dd34809285881f05a9e9749f5d8452", - "595": "53fc00ae32e0b0d701175ac17ac0b91e05859ae6d7f3e5bf0548dad36e3d68f9", - "596": "9ccbee33387383d458e7ffa2c9c0cb9e4f5bbe3d1b949463a98232ae67d29956", - "597": "921102754e24e8ba99480e77652d88764020202e6dcd67adddbb1660204e8e78", - "598": "430f975f490ce37df74bc346556cb2186f7a47a58d3b282ab42f35b33a812f7c", - "599": "b603988248769444a1566b058ef3660cac528086b8193efd6d0be4080b834780", - "600": "dd539cd38fade63aa0d14899c7c75ff459ab839148b15b4efacd4bdfa0408dae", - "601": "571c5ade4cd89b460b7d2568a44d1efb05e2927ec840d8ecf149dc9e0ff09734", - "602": "edef32d6c2c7193b4b30a0e2c7d3ab37e0ec21db62543f4bf78169b683792e41", - "603": "cce7491b7ddf0e3ebde191e0e57614e61602cfaa2b52be5c2d657d9ae5e1f1b1", - "604": "d08fe0e5c0fc10640043f9d645446e23fa8efbfdf29c93c87794e5b6405ff51e", - "605": "1bdd74af73e2434db6149fd8089bd294defe3cedfaaf92f532568ddc6c48e2ea", - "606": "30e44b49f18048323d1c1bf4631587df8f0dbd477ebc79b7ef860a792953d932", - "607": "2d9b6a1b4810a39471e5dae85eadf595fc108097eeda746c8925a7be057464de", - "608": "cd3fdc5ee5b6e606349b9e5775d6e632e0424d6190f632632bd7435d5622b20d", - "609": "8b86933e27e64e6840bedc8087fa31326d9527a424c63ecc61823894c81f867d", - "610": "a781fd7cb6970e8f6f679296be5bb0fe7ea62207caa7ce86635257186a5a70d9", - "611": "4a3a0b9877d68deb8d7db624ec2d7f4b1c467fe337f803a220292ac6131acc05", - "612": "6e95bb170c3a521fc7befa446cad879a36b7b3d0e0e8eab1df6ddbd753156ab7", - "613": "afe8c7002c5e15859be829b4b69f0da00c1298971d5afa469b050016fc021978", - "614": "f85495a58ad9d5c4d16167084bbc3581ea22e6dfc39423b70d7fe486e316d951", - "615": "8da9fc3356df220081c71ccfc9c67251e6dd7058fb11258ecfc88ea9b8c00c92", - "616": "0fadf4975e2c27aae12447e080505d604258102f61c8667a5c2594ee033567e8", - "617": "06d9e8723de7ffd20129f1d8b5993926a97cad1261dc0cf01a37d8fa728ee996", - "618": "04d0dc62694f26c61871d8129259540884ad2296a3cf455f6b92fc911f98c336", - "619": "a93d0ec83cbbd4ec0866c97b372e4374a9d6724cc3767f5230e8316734cbb0eb", - "620": "071da5dc1dd87c2558b45247c29a92092bc5a00ef3cd46d70d08e18b791d2926", - "621": "458ca388a6b74c57ae13d1233984d5b66abb1f18dbfa12aa14ba868a9b5a708d", - "622": "1ad0227dc5f8c259ada5120d9db05ac7a013bd1bd84cbbca2f0ae6b174dac129", - "623": "d82d0401e10767b022417dbb64d348bc6c03ed4bb7e4553493e8d9e65525d229", - "624": "1d25005c86a9635d3483ea63ce95fa097f95792ebab86319c12bc66ea1d2ac83", - "625": "3fc397ed884cabc16bf30bb7487c8211424a08279a166d4fa4da6dc151a02cd1", - "626": "7c42e09e504cb269512dae989ee7fffe1f3bfea499c990e8edea796761331ccb", - "627": "5062b75aa39c974a579b0a3360c4da32e481d2242de72106f651c7d7de631cf1", - "628": "dc656eef13928f18d14a9265be6a923bc7d76048b861cdf1523e397801a8ef52", - "629": "9eefedc5b5995658be337f48146e37020db4ed3bb61e2af1fc57f698bd398b0d", - "630": "6e17ecc4a4d07ffbd67c49a59d31b7efeabd3bfead49fdf1ec005836e6030ebf", - "631": "781372694518c122f62566aec8867772e492fefef32c00e24b5604297dc1d44c", - "632": "c978055ae1d71dfdfd8bb4e845bb82fc4211b14560bf6001edefa4367e1d4403", - "633": "af4ff4b546369974642b3f68d4d3e90f0a0496b3b5d1572b638378fb49c7b4fa", - "634": "f6af89331ee087a2fc03e0bddd738e2716b49ed616ceb3b47743cf3806c6d8c2", - "635": "e4251ea6989571d8b83993560b537b7a9d0777ba54e6941757580cbfc14aab5f", - "636": "dc15b5ccabd8fd3141c244b7dbc6fe95078299ea3ce3016cbb483893fcdd4236", - "637": "053571be83ed06ab23a96d4e8fa129a4ce7e740de17dc35b000fb56c35a5ab80", - "638": "df57e1f418a24e38b39011048084c6b5cc91a56c1deb643ab605e0350f329b4b", - "639": "56930902baea90d1a8e505a227e5d7ac4da6b60f6c370ab75a0011cb3746818f", - "640": "c105d171242fa8e35f26491ba2f932d1577dfab2a4a6e75034ae69f062e8aa71", - "641": "0f6c3873a87ce630accf7f3b19feb764aac3fa0c3933042a817a82e6a9963aea", - "642": "c20081830b70a00d1bcc6f4b6572d511d534986c10ea3c057db304a1f26df2da", - "643": "143de023a92c7c8ce5fc0b839644e897267c44c8ba4e715743dc99686415a8b5", - "644": "7a8c9f1db1b1bce9a3b8d91e5b1a39a92a478029d975f5e45d593b7ca81a7134", - "645": "932a51e4c0cc5e30041ca5db1fd0674820638563a9df1300bece7df12c23017e", - "646": "a49cbd2966ea8248816b0a53b6eedea4aef2525aac45272b862d7d52e604625a", - "647": "40ad98735f3b5417ea1916f6146b69b7659963263caed186abf0790de0d9dae9", - "648": "53b288529a83c376f2399e986e5ca25c5993a6640063386fdb2de491afba2e81", - "649": "c0bebda0473186148087feb9828a418ab8d50726a1ff5c39ec69c4a6232c6b67", - "650": "98ac68d2bc42f89dbe97b3392ac691ed6c2c4f36a44665555bf7f816ca97cd27", - "651": "81f8287532f504b4f4a21e6d6ed573845bff197c479fb52e4c5b6f2fc1cfc40f", - "652": "fa32d8e7c1c766a6126b0f1cdd9d752cad55f54d0c05839e89d4da238615d9ed", - "653": "311cec39a42837f803ce8cfa5e6df32cc27fe541de108e3e7cf7ba3242e414ee", - "654": "f2b3d205c2da66cdf9a596e2caa1098132b832758eea2b14da071b8dd9584ec9", - "655": "39517ea688972769cccd46ad15b4f06ac2a6175d053dc97f849fa11a63a163e8", - "656": "2a21e5e89d9b019c1195c50af7c6e1864cbab05068d10e11519fb6d4766ceae5", - "657": "bbf54db41dc18753a3caa5001aae99c0c998e8a07b6e7390932054d7882498e3", - "658": "ca8e7b53b095939e5fafefa56e9b45b40c396145acf2a767f9f2430fbba75a79", - "659": "3d6c8492fbfe1c76e3f9d66485a7447489b89763623127deb6ed327a0c2a011b", - "660": "23d754ebe35981ad5de850f66bb2294a22280a8ad0b4160b1c29dfb5487505d9", - "661": "fd7eaca9690ee0384770e855ed600c96080c5c23565bfdae01c6045a87d9550a", - "662": "b93bc0a52860ee0a1fdc28adeca7b39288b1119e0f318467f0a193236e00f99c", - "663": "f73e3335b21c11b78987deb5a6eace1cef327981322f53a070adfbe31b56e7d0", - "664": "f3f0de955603850bd411690d11a5391e63f515a29e31e9241c66c62d688bcf72", - "665": "f2650e75f39098e5a114077b6e07bc15325adce22e1ab4b20569a4eeda5c6ca6", - "666": "a01a34d1c29aff5618a96046605adb74fa49b834975051d4ac82672567727a21", - "667": "2db51646a4038b38c88512738f79bb21776d39c7bfa3086538cccba0b63024db", - "668": "2f3336b7f1211fcc180cd76dc6442fecb412771aa45ef1a7675aa437d04e582b", - "669": "28bf022d827392eff1ec8ec121767ec24778f1b69da8605b4ab059023b8ad28a", - "670": "38db5dbb2a3ce2d31d1958f5b3ca4c3555eb0ac4193ebffa3f42ffd6bb4806e3", - "671": "0580cf2ef8abd3afbf91fba2032c2d51e43306bebb7f979bb750c3d7bd14c961", - "672": "394f1b74ccfac5a4fa958d813b5932371c5f8c2f3dbd1eb7202af2223aa08afb", - "673": "61c90400cd197b8ea6d7de90fcd1af0959fc37625fe163363fdae0ac4a724bfd", - "674": "6037c38f696b10fb531c26396890cd3b48d5408c5b37e61d03a72ae2f7b64ed6", - "675": "39c8b1bd1d534381b811bd8050e54b753106c1bfaf5d3cc63d8fe92a94471915", - "676": "346d1e2de9915fa2f4ce3675ccebadccb8e9d14239f1e53b6d08d09f5c26297d", - "677": "36841bba8f77d669e9d8f4e09ec580ce2c7a36c37da719815e65cc641eb1fdeb", - "678": "09532ddbaffb710f02964e270f8658bd8a09149744726a82f618708b35a5fa26", - "679": "774f8d6f89a5875342b21e8337aa5e3ab0539960a5b42554bc8d8a0fffce7d65", - "680": "48d62baa62c2a9c561612192ec39a7dbcecc8badadc0ddc755191648597a42f9", - "681": "7adc09dd86f3e73979d9f8a4b3232102ca52bc41d043614fe989cd908ed88c76", - "682": "522f0ff3ae2f1761dca78207dec1c9b52556eba2db7503ca03441abf62f65c76", - "683": "376e3c3e4b88ee76cb0f02390751a7248fcf1562013b1390b1e276a3f3d7da63", - "684": "6363f306f081683781908acd4bedd92b3a75c796243cdacadc4b9896d8cfaaaa", - "685": "29f2c4c5325cf626b392a910e6e22b6d2a989bfbb38439c20162b7b786b5e2f8", - "686": "990ae3583a1f7a32b7581a8ace626511c812e0bd910b8064fefb31e625b9c22d", - "687": "7e78b4b91851b976f5cc2a1341b9389ae7bdd0248ae7f7c53e7ebb2d86bbc73c", - "688": "1ada92e769892b4bb540d75cbf40017a24b5b309b28a097ed62eb7f2727518e7", - "689": "17a0ba5b100d0a92f3f82e2e6f31c71a6ca53a0f043094a6419331e22036150b", - "690": "f9658a8f0687d69f420f655c500304c3c0888f298a68075ab6a2165a3bc47c53", - "691": "3ff8aa53eb2f7e700fdc7cb838ca7f7b495948bb997ef70d196c10592fa64680", - "692": "c01c3e579b2743866cd3d0c1d9039871356143a99c572593d2702f387e9f629f", - "693": "c08e2dd3686459c2989cd6a367d2cc64b2bc2af460417102e9856e91b5f78fa4", - "694": "063e59bfd9cbed08afa508954ac9c1c313b80331d6a917fd2202e15e1eeb00e9", - "695": "c3259eeed96a5837a6630fd9d1245de7c77e10d0733b6129a3dc99548bd92800", - "696": "9ab20a4d8c3c0de897a1c8afa95733d0f7f79870c6379064ef4cf1f5baae67e6", - "697": "62c07adf4da24a20a723f6c32e35a51f2b942e363dc9fa35070e34991a5a9c1d", - "698": "632f1a4eba12f5c80401d82c4bad7c5679f55ccc89bf2da3e3930ff3d6671ba1", - "699": "8c40c5c92fad7ed2774080ddd39f62cdc94ca05dde4273344497ab4206499484", - "700": "3dccee8e873d2c9c2f8359417e666b702f97b60b90b229e3c41190909ff9388b", - "701": "65a57fc7ebcdab77821276a1eba1c1a625bf2bae575b025359de492592ded205", - "702": "c1b0ade78aadbf0d5576489c2200439ef825fe74452115edbc908e9ff955efc0", - "703": "1e5ea7fffdcdbca5fc91694b200db8e2e3737e829b7694e4dcf3b937b41be330", - "704": "9ddf38880f294ac1a759c764c394cacd4635735880f326a0b5e4a896e4fdce8c", - "705": "2bb033d9eeb9157fc6ae835e99b9523bfb1d61173cfb34941cbfdc4c0d3ea67e", - "706": "51a0e8daacbd6537efd583c48c5815a9bd22fef0eb9b8e15dbe2ee87c76e2a6b", - "707": "9f50d3b52dc4ebae279c6f6021258ca8cd60b8cd13e358f29a2879caa390a774", - "708": "42e0a9be7737aaab1fd27543c0273f4c97dd3bd6471e6ec04b1fc7b79542db71", - "709": "ac2605c16873ea2b5f0ce5008089a55e37588f45313ad06ccc7dfd96f407eb8a", - "710": "09214942caed4184e7155b4016b1e0de37c0a142deaebee3879c770438a28276", - "711": "8d8ea19a78bcb10e502f91a057bac1b200ab17db66e11cdf42b63ec65a8e6c18", - "712": "001493340cc232a48125f958308be6d0567ff2684e0625e55af8b0a024c4ccca", - "713": "98a124df4ffa11cca86fbd959f4d091665fc871a4a86cc1024429d1c116b556e", - "714": "cd175b00873a9a3369c628861c1f20df57a4ca75074530ebf5b974d04b8b93c4", - "715": "cdb954d8620ad2d95915f94243cdcf71170cfc363334b2f831544f55f0d15746", - "716": "abb62293fb9df9bc7a6e80ea24f0da1049f894ade937367e24563a3277f953ef", - "717": "319369720bf1831be4c73600c26f5d08dcf6cf85fd32340c28263e39c1dda5e6", - "718": "412ce061b1ae228d2226fdb3bf2cb68421870465d6a8cf7ae58515c02fe54684", - "719": "c461587d4f3a41c375628e94fb9f971cc2829b8608d3c7aca840e62a6c8f1929", - "720": "3651d0d1f023c90e42be5c6ccf28ca71203d1c67d85249323d35db28f146786f", - "721": "8430fc43038ba44efb6e9ecbd5aa3dfeaeaf73f2d04a2d5596855c7de5de9c20", - "722": "9687101dfe209fd65f57a10603baa38ba83c9152e43a8b802b96f1e07f568e0e", - "723": "74832787e7d4e0cb7991256c8f6d02775dffec0684de234786f25f898003f2de", - "724": "fa05e2b497e7eafa64574017a4c45aadef6b163d907b03d63ba3f4021096d329", - "725": "005c873563f51bbebfdb1f8dbc383259e9a98e506bc87ae8d8c9044b81fc6418", - "726": "93e41c533136bf4b436e493090fd4e7b277234db2a69c62a871f775ff26681bf", - "727": "c366f7426ca9351dcdde2e3bea01181897cda4d9b44977678ea3828419b84851", - "728": "8de62a644511d27c7c23c7722f56112b3c1ab9b05a078a98a0891f09f92464c6", - "729": "0ae82177174eef99fc80a2ec921295f61a6ac4dfed86a1bf333a50c26d01955c", - "730": "78cd876a176c8fbf7c2155b80dccbdededdbc43c28ef17b5a6e554d649325d38", - "731": "54afb9f829be51d29f90eecbfe40e5ba91f3a3bf538de62f3e34674af15eb542", - "732": "c4dc4610dcafc806b30e5d3f5560b57f462218a04397809843a7110838f0ebac", - "733": "bdde7d98d057d6a6ae360fd2f872d8bccb7e7f2971df37a3c5f20712ea3c618f", - "734": "9a514875bd9af26fcc565337771f852d311cd77033186e4d957e7b6c7b8ce018", - "735": "8bbc5a27c0031d8c44f3f73c99622a202cd6ea9a080049d615a7ae80ce6024f9", - "736": "e0d4c78b9b3dae51940877aff28275d036eccfc641111c8e34227ff6015a0fab", - "737": "a600884bcaa01797310c83b198bad58c98530289305af29b0bf75f679af38d3a", - "738": "c85f15fdaafe7d5525acff960afef7e4b8ffded5a7ee0d1dc2b0e8d0c26b9b46", - "739": "8716e9302f0fb90153e2f522bd88a710361a897480e4ccc0542473c704793518", - "740": "6ff41ee34b263b742cda109aee3be9ad6c95eec2ce31d6a9fc5353bba1b41afd", - "741": "99ac0eb9589b895e5755895206bbad5febd6bc29b2912df1c7544c547e26bca3", - "742": "7d2761a240aa577348df4813ea248088d0d6d8d421142c712ed576cdc90d4df9", - "743": "d93c42a129c0961b4e36738efae3b7e8ffae3a4daeced20e85bb740d3d72522d", - "744": "211f76700a010461486dde6c723720be85e68c192cd8a8ed0a88860b8ae9b0f0", - "745": "2d32dc1fea2f1b8600c0ada927b057b566870ceb5362cce71ac3693dcb7136ae", - "746": "2df1c2a0181f0c25e8d13d2a1eadba55a6b06267a2b22075fcf6867fb2e10c02", - "747": "a8d8f93142e320c6f0dd386c7a3bfb011bbdc15b85291a9be8f0266b3608175e", - "748": "7de937e04c10386b240afb8bb2ff590009946df8b7850a0329ccdb59fca8955f", - "749": "1a55f5484ccf964aeb186faedefa01db05d87180891dc2280b6eb85b6efb4779", - "750": "fa4318c213179e6af1c949be7cf47210f4383e0a44d191e2bad44228d3192f14", - "751": "12fe650fcb3afc214b3d647c655070e8142cfd397441fc7636ad7e6ffcaefde2", - "752": "e416c0123bc6b82df8726b328494db31aa4781d938a0a6e2107b1e44c73c0434", - "753": "0ee3299bc89e1e4c2fc79285fb1cd84c887456358a825e56be92244b7115f5af", - "754": "1370574b16207c41d3dafb62aa898379ec101ac36843634b1633b7b509d4c35a", - "755": "78bb4b18b13f5254cfafe872c0e93791ab5206b2851960dc6aebea8f62b9580c", - "756": "6becaabbda2e9ea22373e62e989b6b70467efa24fbe2f0d124d7a99a53e93f74", - "757": "fbfee0a5c4fa57a1dd6cf0c9bb2423cf7e7bcb130e67114aa360e42234987314", - "758": "8e4dfc259cec9dfd89d4b4ac8c33c75af6e0f5f7926526ee22ad4d45f93d3c18", - "759": "40bac0ed2e4f7861a6d9a2d87191a9034e177c319aa40a43638cc1b69572e5f2", - "760": "7ab50386a211f0815593389ab05b57a1a5eb5cbf5b9a85fe4afc517dcab74e06", - "761": "1cdb0318ac16e11c8d2ae7b1d7ca7138f7b1a461e9d75bd69be0f9cdd3add0c5", - "762": "84c4662267d5809380a540dfc2881665b3019047d74d5ef0a01f86e45f4b5b59", - "763": "f0def5903139447fabe7d106db5fff660d94b45af7b8b48d789596cf65ab2514", - "764": "7b4131f4d1e13d091ca7dd4d32317a14a2a24e6e1abd214df1c14c215287b330", - "765": "7558b775727426bccd945f5aa6b3e131e6034a7b1ff8576332329ef65d6a1663", - "766": "23c309430fa9546adb617457dbfd30fb7432904595c8c000e9b67ea23f32a53b", - "767": "70aef22ac2db8a5bdfcc42ff8dafbd2901e85e268f5f3c45085aa40c590b1d42", - "768": "b69a808dfc654b037e2f47ace16f48fe3bb553b3c8eed3e2b6421942fbf521d0", - "769": "78537a30577e806c6d8d94725e54d2d52e56f7f39f89c133cd5d0a2aad7e46e4", - "770": "c9d80c19c4895d1498bf809fcc37c447fa961fb325e5667eb35d6aa992966b41", - "771": "9803ace30c0d90d422e703fdf25a10a9342d0178a277ebc20c7bd6feac4c7a15", - "772": "f5a1e391af815ea6453db58a1bd71790f433c44ed63e5e93d8f5c045dfd5a464", - "773": "e1b93fc323c4d9c383100603339548e1e56ce9c38bcdcc425024c12b862ea8cb", - "774": "3646cd098b213014fb7bbc9597871585e62ee0cf2770e141f1df771237cc09ab", - "775": "d9d7d515ce7350c9e5696d85f68bbb42daa74b9e171a601dd04c823b18bb7757", - "776": "83286074d3bc86a5b449facb5fe5eafc91eb4c8031e2fb5e716443402cd8ed0f", - "777": "e62616a387d05b619d47cee3d49d5d2db19393736bf54b6cdd20933c0531cb7e", - "778": "d4de958ba44d25353de5b380e04d06c7968794ad50dbf6231ad0049ff53e106b", - "779": "c08ce54a59afc4af62f28b80a9c9a5190822d124eed8d73fd6db3e19c81e2157", - "780": "fc7ba646c16482f0f4f5ce2b06d21183dba2bdeaf9469b36b55bc7bc2d87baf3", - "781": "8fa5733f06838fb61b55b3e9d59c5061d922147e59947fe52e566dd975b2199f", - "782": "9f757d92df401ee049bc066bb2625c6287e5e4bcd38c958396a77a578f036a24", - "783": "270ff37f60c267a673bd4b223e44941f01ae9cfbf6bbdf99ca57af89b1e9a66f", - "784": "388b17c4c7b829cef767f83b4686c903faeec1241edfe5f58ee91d2b0c7f8dfc", - "785": "77cf600204c5265e1d5d3d26bf28ba1e92e6f24def040c16977450bec8b1cb99", - "786": "fb14022b7edbc6c7bfde27f35b49f6acaa4f0fc383af27614cb9d4a1980e626b", - "787": "7516ba0ac1951665723dcc4adcc52764d9497e7b6ed30bdb9937ac9df82b7c4f", - "788": "adede1d30258bb0f353af11f559b67f8b823304c71e967f52db52d002760c24f", - "789": "0c82e744a1f9bc57fd8ae8b2f479998455bc45126de971c59b68541c254e303a", - "790": "319847122251afd20d4d650047c55981a509fa2be78abd7c9c3caa0555e60a05", - "791": "2e0bbdcd0a8460e1e33c55668d0dc9752379a78b9f3561d7a17b922a5541a3fb", - "792": "5f77834c5a509023dd95dd98411eae1dd4bafd125deca590632f409f92fd257b", - "793": "dbfd900a3b31eeec2f14b916f5151611541cb716d80b7b9a1229de12293a02ea", - "794": "d019fe415aba832c4c761140d60c466c9aaad52b504df3167c17f2d3f0b277a7", - "795": "617b259349da44c2af2664acde113673ab3bb03a85d31f1be8f01027d0ebd4d3", - "796": "cba6b30a818d073398e5802211987f0897523e4752987bb445b2bca079670e22", - "797": "61e42cac3d7858b8850111a8c64c56432a18dd058dfb6afd773f07d703703b1a", - "798": "ae8b155d6b77522af79f7e4017fefe92aaa5d45eff132c83dc4d4bcfc9686020", - "799": "a41cb14ddf8f1948a01f590fbe53d9ca4e2faf48375ce1c306f91acf7c94e005", - "800": "c6a47bc6f02cf06be16728fb308c83f2f2ae350325ef7016867f5bdaea849d71", - "801": "d14b358c76b55106613f9c0a2112393338dfd01513b0fd231b79fc8db20e41f0", - "802": "22ae33e67fb48accfaa3b36e70c5a19066b974194c3130680de0c7cdce2d0f2e", - "803": "d95b3f9bbb7054042c1fba4db02f7223a2dad94977a36f08c8aaf92f373f9e78", - "804": "b0b1cf7253593eb2334c75e66dbe22b4b4540347485f1ea24e80226b4b18171c", - "805": "41b1ff5db0e70984ad20c50d1a9ac2b5a53ccd5f42796c8e948ae8880005fbb9", - "806": "b9c813beb39671adb8e1530555cadca44c21ddc7127932274918df2091dbd9ca", - "807": "745fd9ba97970d85a29877942839e41fc192794420e86f3bde39fd26db7a8bff", - "808": "6c73b947eb603602a7e8afadc83eaaa381a46db8b82a6fb89c9c1d93cb023fce", - "809": "eebac7753da4c1230dfce0f15fc124ffff01b0e432f0b74623b60cff71bbc9a9", - "810": "42be7899672a1a0046823603ce60dbeda7250a56fcb8d0913093850c85394307", - "811": "8698cd28ae4d93db36631870c33e4a8a527d970050d994666115f54260b64138", - "812": "dc2495924f37353db8b846323b8085fae9db502e890c513ed2e64ed7281f567f", - "813": "92179dde05aa6557baca65699fda50ca024d33a77078d8e128caa3c5db84064b", - "814": "344ed8cb7684307c00b7f03d751729a7f9d2a5f4a4cb4574594113d69593c0c1", - "815": "f642cf15345af3feab60e26a02aee038f759914906a5b2b469b46fdeee50ff59", - "816": "058178444e85f2aedb2f75d824a469747381f0bd3235d8c72df4385fec86eb07", - "817": "582fdc2233298192b09ceaf1463d6be06a09894075532630aa9d9efcfcb31da4", - "818": "67f6964d6ff114a43371b8375c44db2f1362df4f110b4a7ce8d79cf1b76621a0", - "819": "c7a82513ad48dfc87f2c1e0f2915b71464b7f5a16501c71df4ae4a8741dceef3", - "820": "9b23ae0181f320aadda2637ac2179c8b41b00715630c3acb643c7aee3b81cf90", - "821": "0941e396ff15b98fd7827de8e33ef94996d48ba719a88ba8e2da7f2605df3e5c", - "822": "ed8ef7f568939b9df1b77ae58344940b91c7e154a4367fe2b179bc7b9484d4e6", - "823": "05139328571a86096032b57e3a6a02a61acad4fb0d8f8e1b5d0ffb0d063ba697", - "826": "7f40f14ca65e5c06dd9ec9bbb212adb4d97a503199cb3c30ed921a04373bbe1c", - "827": "80461f02c63654c642382a6ffb7a44d0a3554434dfcfcea00ba91537724c7106", - "828": "520c196175625a0230afb76579ea26033372de3ef4c78aceb146b84322bfa871", - "829": "ed0089e61cf5540dd4a8fef1c468b96cf57f1d2bb79968755ba856d547ddafdf", - "831": "8ec445084427419ca6da405e0ded9814a4b4e11a2be84d88a8dea421f8e49992", - "832": "cfcb9ebef9308823f64798b5e12a59bf77ff6f92b0eae3790a61c0a26f577010", - "833": "e6ff3a5b257eb53366a32bfc8ea410a00a78bafa63650c76ac2bceddfbb42ff5", - "834": "b0d2a7e7d629ef14db9e7352a9a06d6ca66f750429170bb169ca52c172b8cc96", - "835": "bdfa1b1eecbad79f5de48bc6daee4d2b07689d7fb172aa306dd6094172b396f0" -} diff --git a/scripts/validate_filenames.py b/scripts/validate_filenames.py deleted file mode 100755 index 0890024dd349..000000000000 --- a/scripts/validate_filenames.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python3 -import os - -try: - from .build_directory_md import good_file_paths -except ImportError: - from build_directory_md import good_file_paths # type: ignore[no-redef] - -filepaths = list(good_file_paths()) -assert filepaths, "good_file_paths() failed!" - -upper_files = [file for file in filepaths if file != file.lower()] -if upper_files: - print(f"{len(upper_files)} files contain uppercase characters:") - print("\n".join(upper_files) + "\n") - -space_files = [file for file in filepaths if " " in file] -if space_files: - print(f"{len(space_files)} files contain space characters:") - print("\n".join(space_files) + "\n") - -hyphen_files = [file for file in filepaths if "-" in file] -if hyphen_files: - print(f"{len(hyphen_files)} files contain hyphen characters:") - print("\n".join(hyphen_files) + "\n") - -nodir_files = [file for file in filepaths if os.sep not in file] -if nodir_files: - print(f"{len(nodir_files)} files are not in a directory:") - print("\n".join(nodir_files) + "\n") - -bad_files = len(upper_files + space_files + hyphen_files + nodir_files) -if bad_files: - import sys - - sys.exit(bad_files) diff --git a/scripts/validate_solutions.py b/scripts/validate_solutions.py deleted file mode 100755 index 325c245e0d77..000000000000 --- a/scripts/validate_solutions.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python3 -import hashlib -import importlib.util -import json -import os -import pathlib -from types import ModuleType - -import pytest -import requests - -PROJECT_EULER_DIR_PATH = pathlib.Path.cwd().joinpath("project_euler") -PROJECT_EULER_ANSWERS_PATH = pathlib.Path.cwd().joinpath( - "scripts", "project_euler_answers.json" -) - -with open(PROJECT_EULER_ANSWERS_PATH) as file_handle: - PROBLEM_ANSWERS: dict[str, str] = json.load(file_handle) - - -def convert_path_to_module(file_path: pathlib.Path) -> ModuleType: - """Converts a file path to a Python module""" - spec = importlib.util.spec_from_file_location(file_path.name, str(file_path)) - module = importlib.util.module_from_spec(spec) # type: ignore[arg-type] - spec.loader.exec_module(module) # type: ignore[union-attr] - return module - - -def all_solution_file_paths() -> list[pathlib.Path]: - """Collects all the solution file path in the Project Euler directory""" - solution_file_paths = [] - for problem_dir_path in PROJECT_EULER_DIR_PATH.iterdir(): - if problem_dir_path.is_file() or problem_dir_path.name.startswith("_"): - continue - for file_path in problem_dir_path.iterdir(): - if file_path.suffix != ".py" or file_path.name.startswith(("_", "test")): - continue - solution_file_paths.append(file_path) - return solution_file_paths - - -def get_files_url() -> str: - """Return the pull request number which triggered this action.""" - with open(os.environ["GITHUB_EVENT_PATH"]) as file: - event = json.load(file) - return event["pull_request"]["url"] + "/files" - - -def added_solution_file_path() -> list[pathlib.Path]: - """Collects only the solution file path which got added in the current - pull request. - - This will only be triggered if the script is ran from GitHub Actions. - """ - solution_file_paths = [] - headers = { - "Accept": "application/vnd.github.v3+json", - "Authorization": "token " + os.environ["GITHUB_TOKEN"], - } - files = requests.get(get_files_url(), headers=headers, timeout=10).json() - for file in files: - filepath = pathlib.Path.cwd().joinpath(file["filename"]) - if ( - filepath.suffix != ".py" - or filepath.name.startswith(("_", "test")) - or not filepath.name.startswith("sol") - ): - continue - solution_file_paths.append(filepath) - return solution_file_paths - - -def collect_solution_file_paths() -> list[pathlib.Path]: - # Return only if there are any, otherwise default to all solutions - if ( - os.environ.get("CI") - and os.environ.get("GITHUB_EVENT_NAME") == "pull_request" - and (filepaths := added_solution_file_path()) - ): - return filepaths - return all_solution_file_paths() - - -@pytest.mark.parametrize( - "solution_path", - collect_solution_file_paths(), - ids=lambda path: f"{path.parent.name}/{path.name}", -) -def test_project_euler(solution_path: pathlib.Path) -> None: - """Testing for all Project Euler solutions""" - # problem_[extract this part] and pad it with zeroes for width 3 - problem_number: str = solution_path.parent.name[8:].zfill(3) - expected: str = PROBLEM_ANSWERS[problem_number] - solution_module = convert_path_to_module(solution_path) - answer = str(solution_module.solution()) - answer = hashlib.sha256(answer.encode()).hexdigest() - assert ( - answer == expected - ), f"Expected solution to {problem_number} to have hash {expected}, got {answer}" diff --git a/searches/__init__.py b/searches/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/searches/binary_search.py b/searches/binary_search.py deleted file mode 100644 index 2e66b672d5b4..000000000000 --- a/searches/binary_search.py +++ /dev/null @@ -1,360 +0,0 @@ -#!/usr/bin/env python3 - -""" -Pure Python implementations of binary search algorithms - -For doctests run the following command: -python3 -m doctest -v binary_search.py - -For manual testing run: -python3 binary_search.py -""" - -from __future__ import annotations - -import bisect - - -def bisect_left( - sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1 -) -> int: - """ - Locates the first element in a sorted array that is larger or equal to a given - value. - - It has the same interface as - https://docs.python.org/3/library/bisect.html#bisect.bisect_left . - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item to bisect - :param lo: lowest index to consider (as in sorted_collection[lo:hi]) - :param hi: past the highest index to consider (as in sorted_collection[lo:hi]) - :return: index i such that all values in sorted_collection[lo:i] are < item and all - values in sorted_collection[i:hi] are >= item. - - Examples: - >>> bisect_left([0, 5, 7, 10, 15], 0) - 0 - >>> bisect_left([0, 5, 7, 10, 15], 6) - 2 - >>> bisect_left([0, 5, 7, 10, 15], 20) - 5 - >>> bisect_left([0, 5, 7, 10, 15], 15, 1, 3) - 3 - >>> bisect_left([0, 5, 7, 10, 15], 6, 2) - 2 - """ - if hi < 0: - hi = len(sorted_collection) - - while lo < hi: - mid = lo + (hi - lo) // 2 - if sorted_collection[mid] < item: - lo = mid + 1 - else: - hi = mid - - return lo - - -def bisect_right( - sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1 -) -> int: - """ - Locates the first element in a sorted array that is larger than a given value. - - It has the same interface as - https://docs.python.org/3/library/bisect.html#bisect.bisect_right . - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item to bisect - :param lo: lowest index to consider (as in sorted_collection[lo:hi]) - :param hi: past the highest index to consider (as in sorted_collection[lo:hi]) - :return: index i such that all values in sorted_collection[lo:i] are <= item and - all values in sorted_collection[i:hi] are > item. - - Examples: - >>> bisect_right([0, 5, 7, 10, 15], 0) - 1 - >>> bisect_right([0, 5, 7, 10, 15], 15) - 5 - >>> bisect_right([0, 5, 7, 10, 15], 6) - 2 - >>> bisect_right([0, 5, 7, 10, 15], 15, 1, 3) - 3 - >>> bisect_right([0, 5, 7, 10, 15], 6, 2) - 2 - """ - if hi < 0: - hi = len(sorted_collection) - - while lo < hi: - mid = lo + (hi - lo) // 2 - if sorted_collection[mid] <= item: - lo = mid + 1 - else: - hi = mid - - return lo - - -def insort_left( - sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1 -) -> None: - """ - Inserts a given value into a sorted array before other values with the same value. - - It has the same interface as - https://docs.python.org/3/library/bisect.html#bisect.insort_left . - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item to insert - :param lo: lowest index to consider (as in sorted_collection[lo:hi]) - :param hi: past the highest index to consider (as in sorted_collection[lo:hi]) - - Examples: - >>> sorted_collection = [0, 5, 7, 10, 15] - >>> insort_left(sorted_collection, 6) - >>> sorted_collection - [0, 5, 6, 7, 10, 15] - >>> sorted_collection = [(0, 0), (5, 5), (7, 7), (10, 10), (15, 15)] - >>> item = (5, 5) - >>> insort_left(sorted_collection, item) - >>> sorted_collection - [(0, 0), (5, 5), (5, 5), (7, 7), (10, 10), (15, 15)] - >>> item is sorted_collection[1] - True - >>> item is sorted_collection[2] - False - >>> sorted_collection = [0, 5, 7, 10, 15] - >>> insort_left(sorted_collection, 20) - >>> sorted_collection - [0, 5, 7, 10, 15, 20] - >>> sorted_collection = [0, 5, 7, 10, 15] - >>> insort_left(sorted_collection, 15, 1, 3) - >>> sorted_collection - [0, 5, 7, 15, 10, 15] - """ - sorted_collection.insert(bisect_left(sorted_collection, item, lo, hi), item) - - -def insort_right( - sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1 -) -> None: - """ - Inserts a given value into a sorted array after other values with the same value. - - It has the same interface as - https://docs.python.org/3/library/bisect.html#bisect.insort_right . - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item to insert - :param lo: lowest index to consider (as in sorted_collection[lo:hi]) - :param hi: past the highest index to consider (as in sorted_collection[lo:hi]) - - Examples: - >>> sorted_collection = [0, 5, 7, 10, 15] - >>> insort_right(sorted_collection, 6) - >>> sorted_collection - [0, 5, 6, 7, 10, 15] - >>> sorted_collection = [(0, 0), (5, 5), (7, 7), (10, 10), (15, 15)] - >>> item = (5, 5) - >>> insort_right(sorted_collection, item) - >>> sorted_collection - [(0, 0), (5, 5), (5, 5), (7, 7), (10, 10), (15, 15)] - >>> item is sorted_collection[1] - False - >>> item is sorted_collection[2] - True - >>> sorted_collection = [0, 5, 7, 10, 15] - >>> insort_right(sorted_collection, 20) - >>> sorted_collection - [0, 5, 7, 10, 15, 20] - >>> sorted_collection = [0, 5, 7, 10, 15] - >>> insort_right(sorted_collection, 15, 1, 3) - >>> sorted_collection - [0, 5, 7, 15, 10, 15] - """ - sorted_collection.insert(bisect_right(sorted_collection, item, lo, hi), item) - - -def binary_search(sorted_collection: list[int], item: int) -> int: - """Pure implementation of a binary search algorithm in Python - - Be careful collection must be ascending sorted otherwise, the result will be - unpredictable - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item value to search - :return: index of the found item or -1 if the item is not found - - Examples: - >>> binary_search([0, 5, 7, 10, 15], 0) - 0 - >>> binary_search([0, 5, 7, 10, 15], 15) - 4 - >>> binary_search([0, 5, 7, 10, 15], 5) - 1 - >>> binary_search([0, 5, 7, 10, 15], 6) - -1 - """ - if list(sorted_collection) != sorted(sorted_collection): - raise ValueError("sorted_collection must be sorted in ascending order") - left = 0 - right = len(sorted_collection) - 1 - - while left <= right: - midpoint = left + (right - left) // 2 - current_item = sorted_collection[midpoint] - if current_item == item: - return midpoint - elif item < current_item: - right = midpoint - 1 - else: - left = midpoint + 1 - return -1 - - -def binary_search_std_lib(sorted_collection: list[int], item: int) -> int: - """Pure implementation of a binary search algorithm in Python using stdlib - - Be careful collection must be ascending sorted otherwise, the result will be - unpredictable - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item value to search - :return: index of the found item or -1 if the item is not found - - Examples: - >>> binary_search_std_lib([0, 5, 7, 10, 15], 0) - 0 - >>> binary_search_std_lib([0, 5, 7, 10, 15], 15) - 4 - >>> binary_search_std_lib([0, 5, 7, 10, 15], 5) - 1 - >>> binary_search_std_lib([0, 5, 7, 10, 15], 6) - -1 - """ - if list(sorted_collection) != sorted(sorted_collection): - raise ValueError("sorted_collection must be sorted in ascending order") - index = bisect.bisect_left(sorted_collection, item) - if index != len(sorted_collection) and sorted_collection[index] == item: - return index - return -1 - - -def binary_search_by_recursion( - sorted_collection: list[int], item: int, left: int = 0, right: int = -1 -) -> int: - """Pure implementation of a binary search algorithm in Python by recursion - - Be careful collection must be ascending sorted otherwise, the result will be - unpredictable - First recursion should be started with left=0 and right=(len(sorted_collection)-1) - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item value to search - :return: index of the found item or -1 if the item is not found - - Examples: - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 0, 0, 4) - 0 - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 15, 0, 4) - 4 - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 5, 0, 4) - 1 - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 6, 0, 4) - -1 - """ - if right < 0: - right = len(sorted_collection) - 1 - if list(sorted_collection) != sorted(sorted_collection): - raise ValueError("sorted_collection must be sorted in ascending order") - if right < left: - return -1 - - midpoint = left + (right - left) // 2 - - if sorted_collection[midpoint] == item: - return midpoint - elif sorted_collection[midpoint] > item: - return binary_search_by_recursion(sorted_collection, item, left, midpoint - 1) - else: - return binary_search_by_recursion(sorted_collection, item, midpoint + 1, right) - - -def exponential_search(sorted_collection: list[int], item: int) -> int: - """Pure implementation of an exponential search algorithm in Python - Resources used: - https://en.wikipedia.org/wiki/Exponential_search - - Be careful collection must be ascending sorted otherwise, result will be - unpredictable - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item value to search - :return: index of the found item or -1 if the item is not found - - the order of this algorithm is O(lg I) where I is index position of item if exist - - Examples: - >>> exponential_search([0, 5, 7, 10, 15], 0) - 0 - >>> exponential_search([0, 5, 7, 10, 15], 15) - 4 - >>> exponential_search([0, 5, 7, 10, 15], 5) - 1 - >>> exponential_search([0, 5, 7, 10, 15], 6) - -1 - """ - if list(sorted_collection) != sorted(sorted_collection): - raise ValueError("sorted_collection must be sorted in ascending order") - bound = 1 - while bound < len(sorted_collection) and sorted_collection[bound] < item: - bound *= 2 - left = bound // 2 - right = min(bound, len(sorted_collection) - 1) - last_result = binary_search_by_recursion( - sorted_collection=sorted_collection, item=item, left=left, right=right - ) - if last_result is None: - return -1 - return last_result - - -searches = ( # Fastest to slowest... - binary_search_std_lib, - binary_search, - exponential_search, - binary_search_by_recursion, -) - - -if __name__ == "__main__": - import doctest - import timeit - - doctest.testmod() - for search in searches: - name = f"{search.__name__:>26}" - print(f"{name}: {search([0, 5, 7, 10, 15], 10) = }") # type: ignore[operator] - - print("\nBenchmarks...") - setup = "collection = range(1000)" - for search in searches: - name = search.__name__ - print( - f"{name:>26}:", - timeit.timeit( - f"{name}(collection, 500)", setup=setup, number=5_000, globals=globals() - ), - ) - - user_input = input("\nEnter numbers separated by comma: ").strip() - collection = sorted(int(item) for item in user_input.split(",")) - target = int(input("Enter a single number to be found in the list: ")) - result = binary_search(sorted_collection=collection, item=target) - if result == -1: - print(f"{target} was not found in {collection}.") - else: - print(f"{target} was found at position {result} of {collection}.") diff --git a/searches/binary_tree_traversal.py b/searches/binary_tree_traversal.py deleted file mode 100644 index 47af57f7f94d..000000000000 --- a/searches/binary_tree_traversal.py +++ /dev/null @@ -1,305 +0,0 @@ -""" -This is pure Python implementation of tree traversal algorithms -""" - -from __future__ import annotations - -import queue - - -class TreeNode: - def __init__(self, data): - self.data = data - self.right = None - self.left = None - - -def build_tree() -> TreeNode: - print("\n********Press N to stop entering at any point of time********\n") - check = input("Enter the value of the root node: ").strip().lower() - q: queue.Queue = queue.Queue() - tree_node = TreeNode(int(check)) - q.put(tree_node) - while not q.empty(): - node_found = q.get() - msg = f"Enter the left node of {node_found.data}: " - check = input(msg).strip().lower() or "n" - if check == "n": - return tree_node - left_node = TreeNode(int(check)) - node_found.left = left_node - q.put(left_node) - msg = f"Enter the right node of {node_found.data}: " - check = input(msg).strip().lower() or "n" - if check == "n": - return tree_node - right_node = TreeNode(int(check)) - node_found.right = right_node - q.put(right_node) - raise ValueError("Something went wrong") - - -def pre_order(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> pre_order(root) - 1,2,4,5,3,6,7, - """ - if not isinstance(node, TreeNode) or not node: - return - print(node.data, end=",") - pre_order(node.left) - pre_order(node.right) - - -def in_order(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> in_order(root) - 4,2,5,1,6,3,7, - """ - if not isinstance(node, TreeNode) or not node: - return - in_order(node.left) - print(node.data, end=",") - in_order(node.right) - - -def post_order(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> post_order(root) - 4,5,2,6,7,3,1, - """ - if not isinstance(node, TreeNode) or not node: - return - post_order(node.left) - post_order(node.right) - print(node.data, end=",") - - -def level_order(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> level_order(root) - 1,2,3,4,5,6,7, - """ - if not isinstance(node, TreeNode) or not node: - return - q: queue.Queue = queue.Queue() - q.put(node) - while not q.empty(): - node_dequeued = q.get() - print(node_dequeued.data, end=",") - if node_dequeued.left: - q.put(node_dequeued.left) - if node_dequeued.right: - q.put(node_dequeued.right) - - -def level_order_actual(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> level_order_actual(root) - 1, - 2,3, - 4,5,6,7, - """ - if not isinstance(node, TreeNode) or not node: - return - q: queue.Queue = queue.Queue() - q.put(node) - while not q.empty(): - list_ = [] - while not q.empty(): - node_dequeued = q.get() - print(node_dequeued.data, end=",") - if node_dequeued.left: - list_.append(node_dequeued.left) - if node_dequeued.right: - list_.append(node_dequeued.right) - print() - for inner_node in list_: - q.put(inner_node) - - -# iteration version -def pre_order_iter(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> pre_order_iter(root) - 1,2,4,5,3,6,7, - """ - if not isinstance(node, TreeNode) or not node: - return - stack: list[TreeNode] = [] - n = node - while n or stack: - while n: # start from root node, find its left child - print(n.data, end=",") - stack.append(n) - n = n.left - # end of while means current node doesn't have left child - n = stack.pop() - # start to traverse its right child - n = n.right - - -def in_order_iter(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> in_order_iter(root) - 4,2,5,1,6,3,7, - """ - if not isinstance(node, TreeNode) or not node: - return - stack: list[TreeNode] = [] - n = node - while n or stack: - while n: - stack.append(n) - n = n.left - n = stack.pop() - print(n.data, end=",") - n = n.right - - -def post_order_iter(node: TreeNode) -> None: - """ - >>> root = TreeNode(1) - >>> tree_node2 = TreeNode(2) - >>> tree_node3 = TreeNode(3) - >>> tree_node4 = TreeNode(4) - >>> tree_node5 = TreeNode(5) - >>> tree_node6 = TreeNode(6) - >>> tree_node7 = TreeNode(7) - >>> root.left, root.right = tree_node2, tree_node3 - >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5 - >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7 - >>> post_order_iter(root) - 4,5,2,6,7,3,1, - """ - if not isinstance(node, TreeNode) or not node: - return - stack1, stack2 = [], [] - n = node - stack1.append(n) - while stack1: # to find the reversed order of post order, store it in stack2 - n = stack1.pop() - if n.left: - stack1.append(n.left) - if n.right: - stack1.append(n.right) - stack2.append(n) - while stack2: # pop up from stack2 will be the post order - print(stack2.pop().data, end=",") - - -def prompt(s: str = "", width=50, char="*") -> str: - if not s: - return "\n" + width * char - left, extra = divmod(width - len(s) - 2, 2) - return f"{left * char} {s} {(left + extra) * char}" - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(prompt("Binary Tree Traversals")) - - node: TreeNode = build_tree() - print(prompt("Pre Order Traversal")) - pre_order(node) - print(prompt() + "\n") - - print(prompt("In Order Traversal")) - in_order(node) - print(prompt() + "\n") - - print(prompt("Post Order Traversal")) - post_order(node) - print(prompt() + "\n") - - print(prompt("Level Order Traversal")) - level_order(node) - print(prompt() + "\n") - - print(prompt("Actual Level Order Traversal")) - level_order_actual(node) - print("*" * 50 + "\n") - - print(prompt("Pre Order Traversal - Iteration Version")) - pre_order_iter(node) - print(prompt() + "\n") - - print(prompt("In Order Traversal - Iteration Version")) - in_order_iter(node) - print(prompt() + "\n") - - print(prompt("Post Order Traversal - Iteration Version")) - post_order_iter(node) - print(prompt()) diff --git a/searches/double_linear_search.py b/searches/double_linear_search.py deleted file mode 100644 index d9dad3c685b6..000000000000 --- a/searches/double_linear_search.py +++ /dev/null @@ -1,37 +0,0 @@ -from __future__ import annotations - - -def double_linear_search(array: list[int], search_item: int) -> int: - """ - Iterate through the array from both sides to find the index of search_item. - - :param array: the array to be searched - :param search_item: the item to be searched - :return the index of search_item, if search_item is in array, else -1 - - Examples: - >>> double_linear_search([1, 5, 5, 10], 1) - 0 - >>> double_linear_search([1, 5, 5, 10], 5) - 1 - >>> double_linear_search([1, 5, 5, 10], 100) - -1 - >>> double_linear_search([1, 5, 5, 10], 10) - 3 - """ - # define the start and end index of the given array - start_ind, end_ind = 0, len(array) - 1 - while start_ind <= end_ind: - if array[start_ind] == search_item: - return start_ind - elif array[end_ind] == search_item: - return end_ind - else: - start_ind += 1 - end_ind -= 1 - # returns -1 if search_item is not found in array - return -1 - - -if __name__ == "__main__": - print(double_linear_search(list(range(100)), 40)) diff --git a/searches/double_linear_search_recursion.py b/searches/double_linear_search_recursion.py deleted file mode 100644 index 1c483e974ca7..000000000000 --- a/searches/double_linear_search_recursion.py +++ /dev/null @@ -1,35 +0,0 @@ -def search(list_data: list, key: int, left: int = 0, right: int = 0) -> int: - """ - Iterate through the array to find the index of key using recursion. - :param list_data: the list to be searched - :param key: the key to be searched - :param left: the index of first element - :param right: the index of last element - :return: the index of key value if found, -1 otherwise. - - >>> search(list(range(0, 11)), 5) - 5 - >>> search([1, 2, 4, 5, 3], 4) - 2 - >>> search([1, 2, 4, 5, 3], 6) - -1 - >>> search([5], 5) - 0 - >>> search([], 1) - -1 - """ - right = right or len(list_data) - 1 - if left > right: - return -1 - elif list_data[left] == key: - return left - elif list_data[right] == key: - return right - else: - return search(list_data, key, left + 1, right - 1) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/searches/exponential_search.py b/searches/exponential_search.py deleted file mode 100644 index ed09b14e101c..000000000000 --- a/searches/exponential_search.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python3 - -""" -Pure Python implementation of exponential search algorithm - -For more information, see the Wikipedia page: -https://en.wikipedia.org/wiki/Exponential_search - -For doctests run the following command: -python3 -m doctest -v exponential_search.py - -For manual testing run: -python3 exponential_search.py -""" - -from __future__ import annotations - - -def binary_search_by_recursion( - sorted_collection: list[int], item: int, left: int = 0, right: int = -1 -) -> int: - """Pure implementation of binary search algorithm in Python using recursion - - Be careful: the collection must be ascending sorted otherwise, the result will be - unpredictable. - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item value to search - :param left: starting index for the search - :param right: ending index for the search - :return: index of the found item or -1 if the item is not found - - Examples: - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 0, 0, 4) - 0 - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 15, 0, 4) - 4 - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 5, 0, 4) - 1 - >>> binary_search_by_recursion([0, 5, 7, 10, 15], 6, 0, 4) - -1 - """ - if right < 0: - right = len(sorted_collection) - 1 - if list(sorted_collection) != sorted(sorted_collection): - raise ValueError("sorted_collection must be sorted in ascending order") - if right < left: - return -1 - - midpoint = left + (right - left) // 2 - - if sorted_collection[midpoint] == item: - return midpoint - elif sorted_collection[midpoint] > item: - return binary_search_by_recursion(sorted_collection, item, left, midpoint - 1) - else: - return binary_search_by_recursion(sorted_collection, item, midpoint + 1, right) - - -def exponential_search(sorted_collection: list[int], item: int) -> int: - """ - Pure implementation of an exponential search algorithm in Python. - For more information, refer to: - https://en.wikipedia.org/wiki/Exponential_search - - Be careful: the collection must be ascending sorted, otherwise the result will be - unpredictable. - - :param sorted_collection: some ascending sorted collection with comparable items - :param item: item value to search - :return: index of the found item or -1 if the item is not found - - The time complexity of this algorithm is O(log i) where i is the index of the item. - - Examples: - >>> exponential_search([0, 5, 7, 10, 15], 0) - 0 - >>> exponential_search([0, 5, 7, 10, 15], 15) - 4 - >>> exponential_search([0, 5, 7, 10, 15], 5) - 1 - >>> exponential_search([0, 5, 7, 10, 15], 6) - -1 - """ - if list(sorted_collection) != sorted(sorted_collection): - raise ValueError("sorted_collection must be sorted in ascending order") - - if sorted_collection[0] == item: - return 0 - - bound = 1 - while bound < len(sorted_collection) and sorted_collection[bound] < item: - bound *= 2 - - left = bound // 2 - right = min(bound, len(sorted_collection) - 1) - return binary_search_by_recursion(sorted_collection, item, left, right) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Manual testing - user_input = input("Enter numbers separated by commas: ").strip() - collection = sorted(int(item) for item in user_input.split(",")) - target = int(input("Enter a number to search for: ")) - result = exponential_search(sorted_collection=collection, item=target) - if result == -1: - print(f"{target} was not found in {collection}.") - else: - print(f"{target} was found at index {result} in {collection}.") diff --git a/searches/fibonacci_search.py b/searches/fibonacci_search.py deleted file mode 100644 index 7b2252a68be2..000000000000 --- a/searches/fibonacci_search.py +++ /dev/null @@ -1,132 +0,0 @@ -""" -This is pure Python implementation of fibonacci search. - -Resources used: -https://en.wikipedia.org/wiki/Fibonacci_search_technique - -For doctests run following command: -python3 -m doctest -v fibonacci_search.py - -For manual testing run: -python3 fibonacci_search.py -""" - -from functools import lru_cache - - -@lru_cache -def fibonacci(k: int) -> int: - """Finds fibonacci number in index k. - - Parameters - ---------- - k : - Index of fibonacci. - - Returns - ------- - int - Fibonacci number in position k. - - >>> fibonacci(0) - 0 - >>> fibonacci(2) - 1 - >>> fibonacci(5) - 5 - >>> fibonacci(15) - 610 - >>> fibonacci('a') - Traceback (most recent call last): - TypeError: k must be an integer. - >>> fibonacci(-5) - Traceback (most recent call last): - ValueError: k integer must be greater or equal to zero. - """ - if not isinstance(k, int): - raise TypeError("k must be an integer.") - if k < 0: - raise ValueError("k integer must be greater or equal to zero.") - if k == 0: - return 0 - elif k == 1: - return 1 - else: - return fibonacci(k - 1) + fibonacci(k - 2) - - -def fibonacci_search(arr: list, val: int) -> int: - """A pure Python implementation of a fibonacci search algorithm. - - Parameters - ---------- - arr - List of sorted elements. - val - Element to search in list. - - Returns - ------- - int - The index of the element in the array. - -1 if the element is not found. - - >>> fibonacci_search([4, 5, 6, 7], 4) - 0 - >>> fibonacci_search([4, 5, 6, 7], -10) - -1 - >>> fibonacci_search([-18, 2], -18) - 0 - >>> fibonacci_search([5], 5) - 0 - >>> fibonacci_search(['a', 'c', 'd'], 'c') - 1 - >>> fibonacci_search(['a', 'c', 'd'], 'f') - -1 - >>> fibonacci_search([], 1) - -1 - >>> fibonacci_search([.1, .4 , 7], .4) - 1 - >>> fibonacci_search([], 9) - -1 - >>> fibonacci_search(list(range(100)), 63) - 63 - >>> fibonacci_search(list(range(100)), 99) - 99 - >>> fibonacci_search(list(range(-100, 100, 3)), -97) - 1 - >>> fibonacci_search(list(range(-100, 100, 3)), 0) - -1 - >>> fibonacci_search(list(range(-100, 100, 5)), 0) - 20 - >>> fibonacci_search(list(range(-100, 100, 5)), 95) - 39 - """ - len_list = len(arr) - # Find m such that F_m >= n where F_i is the i_th fibonacci number. - i = 0 - while True: - if fibonacci(i) >= len_list: - fibb_k = i - break - i += 1 - offset = 0 - while fibb_k > 0: - index_k = min( - offset + fibonacci(fibb_k - 1), len_list - 1 - ) # Prevent out of range - item_k_1 = arr[index_k] - if item_k_1 == val: - return index_k - elif val < item_k_1: - fibb_k -= 1 - elif val > item_k_1: - offset += fibonacci(fibb_k - 1) - fibb_k -= 2 - return -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/searches/hill_climbing.py b/searches/hill_climbing.py deleted file mode 100644 index 689b7e5cca8f..000000000000 --- a/searches/hill_climbing.py +++ /dev/null @@ -1,196 +0,0 @@ -# https://en.wikipedia.org/wiki/Hill_climbing -import math - - -class SearchProblem: - """ - An interface to define search problems. - The interface will be illustrated using the example of mathematical function. - """ - - def __init__(self, x: int, y: int, step_size: int, function_to_optimize): - """ - The constructor of the search problem. - - x: the x coordinate of the current search state. - y: the y coordinate of the current search state. - step_size: size of the step to take when looking for neighbors. - function_to_optimize: a function to optimize having the signature f(x, y). - """ - self.x = x - self.y = y - self.step_size = step_size - self.function = function_to_optimize - - def score(self) -> int: - """ - Returns the output of the function called with current x and y coordinates. - >>> def test_function(x, y): - ... return x + y - >>> SearchProblem(0, 0, 1, test_function).score() # 0 + 0 = 0 - 0 - >>> SearchProblem(5, 7, 1, test_function).score() # 5 + 7 = 12 - 12 - """ - return self.function(self.x, self.y) - - def get_neighbors(self): - """ - Returns a list of coordinates of neighbors adjacent to the current coordinates. - - Neighbors: - | 0 | 1 | 2 | - | 3 | _ | 4 | - | 5 | 6 | 7 | - """ - step_size = self.step_size - return [ - SearchProblem(x, y, step_size, self.function) - for x, y in ( - (self.x - step_size, self.y - step_size), - (self.x - step_size, self.y), - (self.x - step_size, self.y + step_size), - (self.x, self.y - step_size), - (self.x, self.y + step_size), - (self.x + step_size, self.y - step_size), - (self.x + step_size, self.y), - (self.x + step_size, self.y + step_size), - ) - ] - - def __hash__(self): - """ - hash the string representation of the current search state. - """ - return hash(str(self)) - - def __eq__(self, obj): - """ - Check if the 2 objects are equal. - """ - if isinstance(obj, SearchProblem): - return hash(str(self)) == hash(str(obj)) - return False - - def __str__(self): - """ - string representation of the current search state. - >>> str(SearchProblem(0, 0, 1, None)) - 'x: 0 y: 0' - >>> str(SearchProblem(2, 5, 1, None)) - 'x: 2 y: 5' - """ - return f"x: {self.x} y: {self.y}" - - -def hill_climbing( - search_prob, - find_max: bool = True, - max_x: float = math.inf, - min_x: float = -math.inf, - max_y: float = math.inf, - min_y: float = -math.inf, - visualization: bool = False, - max_iter: int = 10000, -) -> SearchProblem: - """ - Implementation of the hill climbling algorithm. - We start with a given state, find all its neighbors, - move towards the neighbor which provides the maximum (or minimum) change. - We keep doing this until we are at a state where we do not have any - neighbors which can improve the solution. - Args: - search_prob: The search state at the start. - find_max: If True, the algorithm should find the maximum else the minimum. - max_x, min_x, max_y, min_y: the maximum and minimum bounds of x and y. - visualization: If True, a matplotlib graph is displayed. - max_iter: number of times to run the iteration. - Returns a search state having the maximum (or minimum) score. - """ - current_state = search_prob - scores = [] # list to store the current score at each iteration - iterations = 0 - solution_found = False - visited = set() - while not solution_found and iterations < max_iter: - visited.add(current_state) - iterations += 1 - current_score = current_state.score() - scores.append(current_score) - neighbors = current_state.get_neighbors() - max_change = -math.inf - min_change = math.inf - next_state = None # to hold the next best neighbor - for neighbor in neighbors: - if neighbor in visited: - continue # do not want to visit the same state again - if ( - neighbor.x > max_x - or neighbor.x < min_x - or neighbor.y > max_y - or neighbor.y < min_y - ): - continue # neighbor outside our bounds - change = neighbor.score() - current_score - if find_max: # finding max - # going to direction with greatest ascent - if change > max_change and change > 0: - max_change = change - next_state = neighbor - elif change < min_change and change < 0: # finding min - # to direction with greatest descent - min_change = change - next_state = neighbor - if next_state is not None: - # we found at least one neighbor which improved the current state - current_state = next_state - else: - # since we have no neighbor that improves the solution we stop the search - solution_found = True - - if visualization: - from matplotlib import pyplot as plt - - plt.plot(range(iterations), scores) - plt.xlabel("Iterations") - plt.ylabel("Function values") - plt.show() - - return current_state - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - def test_f1(x, y): - return (x**2) + (y**2) - - # starting the problem with initial coordinates (3, 4) - prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1) - local_min = hill_climbing(prob, find_max=False) - print( - "The minimum score for f(x, y) = x^2 + y^2 found via hill climbing: " - f"{local_min.score()}" - ) - - # starting the problem with initial coordinates (12, 47) - prob = SearchProblem(x=12, y=47, step_size=1, function_to_optimize=test_f1) - local_min = hill_climbing( - prob, find_max=False, max_x=100, min_x=5, max_y=50, min_y=-5, visualization=True - ) - print( - "The minimum score for f(x, y) = x^2 + y^2 with the domain 100 > x > 5 " - f"and 50 > y > - 5 found via hill climbing: {local_min.score()}" - ) - - def test_f2(x, y): - return (3 * x**2) - (6 * y) - - prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1) - local_min = hill_climbing(prob, find_max=True) - print( - "The maximum score for f(x, y) = x^2 + y^2 found via hill climbing: " - f"{local_min.score()}" - ) diff --git a/searches/interpolation_search.py b/searches/interpolation_search.py deleted file mode 100644 index cb3e0011d0da..000000000000 --- a/searches/interpolation_search.py +++ /dev/null @@ -1,137 +0,0 @@ -""" -This is pure Python implementation of interpolation search algorithm -""" - - -def interpolation_search(sorted_collection: list[int], item: int) -> int | None: - """ - Searches for an item in a sorted collection by interpolation search algorithm. - - Args: - sorted_collection: sorted list of integers - item: item value to search - - Returns: - int: The index of the found item, or None if the item is not found. - Examples: - >>> interpolation_search([1, 2, 3, 4, 5], 2) - 1 - >>> interpolation_search([1, 2, 3, 4, 5], 4) - 3 - >>> interpolation_search([1, 2, 3, 4, 5], 6) is None - True - >>> interpolation_search([], 1) is None - True - >>> interpolation_search([100], 100) - 0 - >>> interpolation_search([1, 2, 3, 4, 5], 0) is None - True - >>> interpolation_search([1, 2, 3, 4, 5], 7) is None - True - >>> interpolation_search([1, 2, 3, 4, 5], 2) - 1 - >>> interpolation_search([1, 2, 3, 4, 5], 0) is None - True - >>> interpolation_search([1, 2, 3, 4, 5], 7) is None - True - >>> interpolation_search([1, 2, 3, 4, 5], 2) - 1 - >>> interpolation_search([5, 5, 5, 5, 5], 3) is None - True - """ - left = 0 - right = len(sorted_collection) - 1 - - while left <= right: - # avoid divided by 0 during interpolation - if sorted_collection[left] == sorted_collection[right]: - if sorted_collection[left] == item: - return left - return None - - point = left + ((item - sorted_collection[left]) * (right - left)) // ( - sorted_collection[right] - sorted_collection[left] - ) - - # out of range check - if point < 0 or point >= len(sorted_collection): - return None - - current_item = sorted_collection[point] - if current_item == item: - return point - if point < left: - right = left - left = point - elif point > right: - left = right - right = point - elif item < current_item: - right = point - 1 - else: - left = point + 1 - return None - - -def interpolation_search_by_recursion( - sorted_collection: list[int], item: int, left: int = 0, right: int | None = None -) -> int | None: - """Pure implementation of interpolation search algorithm in Python by recursion - Be careful collection must be ascending sorted, otherwise result will be - unpredictable - First recursion should be started with left=0 and right=(len(sorted_collection)-1) - - Args: - sorted_collection: some sorted collection with comparable items - item: item value to search - left: left index in collection - right: right index in collection - - Returns: - index of item in collection or None if item is not present - - Examples: - >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 0) - 0 - >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 15) - 4 - >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 5) - 1 - >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 100) is None - True - >>> interpolation_search_by_recursion([5, 5, 5, 5, 5], 3) is None - True - """ - if right is None: - right = len(sorted_collection) - 1 - # avoid divided by 0 during interpolation - if sorted_collection[left] == sorted_collection[right]: - if sorted_collection[left] == item: - return left - return None - - point = left + ((item - sorted_collection[left]) * (right - left)) // ( - sorted_collection[right] - sorted_collection[left] - ) - - # out of range check - if point < 0 or point >= len(sorted_collection): - return None - - if sorted_collection[point] == item: - return point - if point < left: - return interpolation_search_by_recursion(sorted_collection, item, point, left) - if point > right: - return interpolation_search_by_recursion(sorted_collection, item, right, left) - if sorted_collection[point] > item: - return interpolation_search_by_recursion( - sorted_collection, item, left, point - 1 - ) - return interpolation_search_by_recursion(sorted_collection, item, point + 1, right) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/searches/jump_search.py b/searches/jump_search.py deleted file mode 100644 index e72d85e8a868..000000000000 --- a/searches/jump_search.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -Pure Python implementation of the jump search algorithm. -This algorithm iterates through a sorted collection with a step of n^(1/2), -until the element compared is bigger than the one searched. -It will then perform a linear search until it matches the wanted number. -If not found, it returns -1. - -https://en.wikipedia.org/wiki/Jump_search -""" - -import math -from collections.abc import Sequence -from typing import Any, Protocol, TypeVar - - -class Comparable(Protocol): - def __lt__(self, other: Any, /) -> bool: ... - - -T = TypeVar("T", bound=Comparable) - - -def jump_search(arr: Sequence[T], item: T) -> int: - """ - Python implementation of the jump search algorithm. - Return the index if the `item` is found, otherwise return -1. - - Examples: - >>> jump_search([0, 1, 2, 3, 4, 5], 3) - 3 - >>> jump_search([-5, -2, -1], -1) - 2 - >>> jump_search([0, 5, 10, 20], 8) - -1 - >>> jump_search([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610], 55) - 10 - >>> jump_search(["aa", "bb", "cc", "dd", "ee", "ff"], "ee") - 4 - """ - - arr_size = len(arr) - block_size = int(math.sqrt(arr_size)) - - prev = 0 - step = block_size - while arr[min(step, arr_size) - 1] < item: - prev = step - step += block_size - if prev >= arr_size: - return -1 - - while arr[prev] < item: - prev += 1 - if prev == min(step, arr_size): - return -1 - if arr[prev] == item: - return prev - return -1 - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - array = [int(item) for item in user_input.split(",")] - x = int(input("Enter the number to be searched:\n")) - - res = jump_search(array, x) - if res == -1: - print("Number not found!") - else: - print(f"Number {x} is at index {res}") diff --git a/searches/linear_search.py b/searches/linear_search.py deleted file mode 100644 index ba6e81d6bae4..000000000000 --- a/searches/linear_search.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -This is pure Python implementation of linear search algorithm - -For doctests run following command: -python3 -m doctest -v linear_search.py - -For manual testing run: -python3 linear_search.py -""" - - -def linear_search(sequence: list, target: int) -> int: - """A pure Python implementation of a linear search algorithm - - :param sequence: a collection with comparable items (as sorted items not required - in Linear Search) - :param target: item value to search - :return: index of found item or -1 if item is not found - - Examples: - >>> linear_search([0, 5, 7, 10, 15], 0) - 0 - >>> linear_search([0, 5, 7, 10, 15], 15) - 4 - >>> linear_search([0, 5, 7, 10, 15], 5) - 1 - >>> linear_search([0, 5, 7, 10, 15], 6) - -1 - """ - for index, item in enumerate(sequence): - if item == target: - return index - return -1 - - -def rec_linear_search(sequence: list, low: int, high: int, target: int) -> int: - """ - A pure Python implementation of a recursive linear search algorithm - - :param sequence: a collection with comparable items (as sorted items not required - in Linear Search) - :param low: Lower bound of the array - :param high: Higher bound of the array - :param target: The element to be found - :return: Index of the key or -1 if key not found - - Examples: - >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, 0) - 0 - >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, 700) - 4 - >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, 30) - 1 - >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, -6) - -1 - """ - if not (0 <= high < len(sequence) and 0 <= low < len(sequence)): - raise Exception("Invalid upper or lower bound!") - if high < low: - return -1 - if sequence[low] == target: - return low - if sequence[high] == target: - return high - return rec_linear_search(sequence, low + 1, high - 1, target) - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by comma:\n").strip() - sequence = [int(item.strip()) for item in user_input.split(",")] - - target = int(input("Enter a single number to be found in the list:\n").strip()) - result = linear_search(sequence, target) - if result != -1: - print(f"linear_search({sequence}, {target}) = {result}") - else: - print(f"{target} was not found in {sequence}") diff --git a/searches/median_of_medians.py b/searches/median_of_medians.py deleted file mode 100644 index a8011a34af76..000000000000 --- a/searches/median_of_medians.py +++ /dev/null @@ -1,107 +0,0 @@ -""" -A Python implementation of the Median of Medians algorithm -to select pivots for quick_select, which is efficient for -calculating the value that would appear in the index of a -list if it would be sorted, even if it is not already -sorted. Search in time complexity O(n) at any rank -deterministically -https://en.wikipedia.org/wiki/Median_of_medians -""" - - -def median_of_five(arr: list) -> int: - """ - Return the median of the input list - :param arr: Array to find median of - :return: median of arr - - >>> median_of_five([2, 4, 5, 7, 899]) - 5 - >>> median_of_five([5, 7, 899, 54, 32]) - 32 - >>> median_of_five([5, 4, 3, 2]) - 4 - >>> median_of_five([3, 5, 7, 10, 2]) - 5 - """ - arr = sorted(arr) - return arr[len(arr) // 2] - - -def median_of_medians(arr: list) -> int: - """ - Return a pivot to partition data on by calculating - Median of medians of input data - :param arr: The data to be checked (a list) - :return: median of medians of input array - - >>> median_of_medians([2, 4, 5, 7, 899, 54, 32]) - 54 - >>> median_of_medians([5, 7, 899, 54, 32]) - 32 - >>> median_of_medians([5, 4, 3, 2]) - 4 - >>> median_of_medians([3, 5, 7, 10, 2, 12]) - 12 - """ - - if len(arr) <= 5: - return median_of_five(arr) - medians = [] - i = 0 - while i < len(arr): - if (i + 4) <= len(arr): - medians.append(median_of_five(arr[i:].copy())) - else: - medians.append(median_of_five(arr[i : i + 5].copy())) - i += 5 - return median_of_medians(medians) - - -def quick_select(arr: list, target: int) -> int: - """ - Two way partition the data into smaller and greater lists, - in relationship to the pivot - :param arr: The data to be searched (a list) - :param target: The rank to be searched - :return: element at rank target - - >>> quick_select([2, 4, 5, 7, 899, 54, 32], 5) - 32 - >>> quick_select([2, 4, 5, 7, 899, 54, 32], 1) - 2 - >>> quick_select([5, 4, 3, 2], 2) - 3 - >>> quick_select([3, 5, 7, 10, 2, 12], 3) - 5 - """ - - # Invalid Input - if target > len(arr): - return -1 - - # x is the estimated pivot by median of medians algorithm - x = median_of_medians(arr) - left = [] - right = [] - check = False - for i in range(len(arr)): - if arr[i] < x: - left.append(arr[i]) - elif arr[i] > x: - right.append(arr[i]) - elif arr[i] == x and not check: - check = True - else: - right.append(arr[i]) - rank_x = len(left) + 1 - if rank_x == target: - answer = x - elif rank_x > target: - answer = quick_select(left, target) - elif rank_x < target: - answer = quick_select(right, target - rank_x) - return answer - - -print(median_of_five([5, 4, 3, 2])) diff --git a/searches/quick_select.py b/searches/quick_select.py deleted file mode 100644 index c8282e1fa5fc..000000000000 --- a/searches/quick_select.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -A Python implementation of the quick select algorithm, which is efficient for -calculating the value that would appear in the index of a list if it would be -sorted, even if it is not already sorted -https://en.wikipedia.org/wiki/Quickselect -""" - -import random - - -def _partition(data: list, pivot) -> tuple: - """ - Three way partition the data into smaller, equal and greater lists, - in relationship to the pivot - :param data: The data to be sorted (a list) - :param pivot: The value to partition the data on - :return: Three list: smaller, equal and greater - """ - less, equal, greater = [], [], [] - for element in data: - if element < pivot: - less.append(element) - elif element > pivot: - greater.append(element) - else: - equal.append(element) - return less, equal, greater - - -def quick_select(items: list, index: int): - """ - >>> quick_select([2, 4, 5, 7, 899, 54, 32], 5) - 54 - >>> quick_select([2, 4, 5, 7, 899, 54, 32], 1) - 4 - >>> quick_select([5, 4, 3, 2], 2) - 4 - >>> quick_select([3, 5, 7, 10, 2, 12], 3) - 7 - """ - # index = len(items) // 2 when trying to find the median - # (value of index when items is sorted) - - # invalid input - if index >= len(items) or index < 0: - return None - - pivot = items[random.randint(0, len(items) - 1)] - count = 0 - smaller, equal, larger = _partition(items, pivot) - count = len(equal) - m = len(smaller) - - # index is the pivot - if m <= index < m + count: - return pivot - # must be in smaller - elif m > index: - return quick_select(smaller, index) - # must be in larger - else: - return quick_select(larger, index - (m + count)) diff --git a/searches/sentinel_linear_search.py b/searches/sentinel_linear_search.py deleted file mode 100644 index 69c1cf9f351a..000000000000 --- a/searches/sentinel_linear_search.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -This is pure Python implementation of sentinel linear search algorithm - -For doctests run following command: -python -m doctest -v sentinel_linear_search.py -or -python3 -m doctest -v sentinel_linear_search.py - -For manual testing run: -python sentinel_linear_search.py -""" - - -def sentinel_linear_search(sequence, target): - """Pure implementation of sentinel linear search algorithm in Python - - :param sequence: some sequence with comparable items - :param target: item value to search - :return: index of found item or None if item is not found - - Examples: - >>> sentinel_linear_search([0, 5, 7, 10, 15], 0) - 0 - - >>> sentinel_linear_search([0, 5, 7, 10, 15], 15) - 4 - - >>> sentinel_linear_search([0, 5, 7, 10, 15], 5) - 1 - - >>> sentinel_linear_search([0, 5, 7, 10, 15], 6) - - """ - sequence.append(target) - - index = 0 - while sequence[index] != target: - index += 1 - - sequence.pop() - - if index == len(sequence): - return None - - return index - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by comma:\n").strip() - sequence = [int(item) for item in user_input.split(",")] - - target_input = input("Enter a single number to be found in the list:\n") - target = int(target_input) - result = sentinel_linear_search(sequence, target) - if result is not None: - print(f"{target} found at positions: {result}") - else: - print("Not found") diff --git a/searches/simple_binary_search.py b/searches/simple_binary_search.py deleted file mode 100644 index 00e83ff9e4a3..000000000000 --- a/searches/simple_binary_search.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Pure Python implementation of a binary search algorithm. - -For doctests run following command: -python3 -m doctest -v simple_binary_search.py - -For manual testing run: -python3 simple_binary_search.py -""" - -from __future__ import annotations - - -def binary_search(a_list: list[int], item: int) -> bool: - """ - >>> test_list = [0, 1, 2, 8, 13, 17, 19, 32, 42] - >>> binary_search(test_list, 3) - False - >>> binary_search(test_list, 13) - True - >>> binary_search([4, 4, 5, 6, 7], 4) - True - >>> binary_search([4, 4, 5, 6, 7], -10) - False - >>> binary_search([-18, 2], -18) - True - >>> binary_search([5], 5) - True - >>> binary_search(['a', 'c', 'd'], 'c') - True - >>> binary_search(['a', 'c', 'd'], 'f') - False - >>> binary_search([], 1) - False - >>> binary_search([-.1, .1 , .8], .1) - True - >>> binary_search(range(-5000, 5000, 10), 80) - True - >>> binary_search(range(-5000, 5000, 10), 1255) - False - >>> binary_search(range(0, 10000, 5), 2) - False - """ - if len(a_list) == 0: - return False - midpoint = len(a_list) // 2 - if a_list[midpoint] == item: - return True - if item < a_list[midpoint]: - return binary_search(a_list[:midpoint], item) - else: - return binary_search(a_list[midpoint + 1 :], item) - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by comma:\n").strip() - sequence = [int(item.strip()) for item in user_input.split(",")] - target = int(input("Enter the number to be found in the list:\n").strip()) - not_str = "" if binary_search(sequence, target) else "not " - print(f"{target} was {not_str}found in {sequence}") diff --git a/searches/simulated_annealing.py b/searches/simulated_annealing.py deleted file mode 100644 index 063d225d0b22..000000000000 --- a/searches/simulated_annealing.py +++ /dev/null @@ -1,137 +0,0 @@ -# https://en.wikipedia.org/wiki/Simulated_annealing -import math -import random -from typing import Any - -from .hill_climbing import SearchProblem - - -def simulated_annealing( - search_prob, - find_max: bool = True, - max_x: float = math.inf, - min_x: float = -math.inf, - max_y: float = math.inf, - min_y: float = -math.inf, - visualization: bool = False, - start_temperate: float = 100, - rate_of_decrease: float = 0.01, - threshold_temp: float = 1, -) -> Any: - """ - Implementation of the simulated annealing algorithm. We start with a given state, - find all its neighbors. Pick a random neighbor, if that neighbor improves the - solution, we move in that direction, if that neighbor does not improve the solution, - we generate a random real number between 0 and 1, if the number is within a certain - range (calculated using temperature) we move in that direction, else we pick - another neighbor randomly and repeat the process. - - Args: - search_prob: The search state at the start. - find_max: If True, the algorithm should find the minimum else the minimum. - max_x, min_x, max_y, min_y: the maximum and minimum bounds of x and y. - visualization: If True, a matplotlib graph is displayed. - start_temperate: the initial temperate of the system when the program starts. - rate_of_decrease: the rate at which the temperate decreases in each iteration. - threshold_temp: the threshold temperature below which we end the search - Returns a search state having the maximum (or minimum) score. - """ - search_end = False - current_state = search_prob - current_temp = start_temperate - scores = [] - iterations = 0 - best_state = None - - while not search_end: - current_score = current_state.score() - if best_state is None or current_score > best_state.score(): - best_state = current_state - scores.append(current_score) - iterations += 1 - next_state = None - neighbors = current_state.get_neighbors() - while ( - next_state is None and neighbors - ): # till we do not find a neighbor that we can move to - index = random.randint(0, len(neighbors) - 1) # picking a random neighbor - picked_neighbor = neighbors.pop(index) - change = picked_neighbor.score() - current_score - - if ( - picked_neighbor.x > max_x - or picked_neighbor.x < min_x - or picked_neighbor.y > max_y - or picked_neighbor.y < min_y - ): - continue # neighbor outside our bounds - - if not find_max: - change = change * -1 # in case we are finding minimum - if change > 0: # improves the solution - next_state = picked_neighbor - else: - probability = (math.e) ** ( - change / current_temp - ) # probability generation function - if random.random() < probability: # random number within probability - next_state = picked_neighbor - current_temp = current_temp - (current_temp * rate_of_decrease) - - if current_temp < threshold_temp or next_state is None: - # temperature below threshold, or could not find a suitable neighbor - search_end = True - else: - current_state = next_state - - if visualization: - from matplotlib import pyplot as plt - - plt.plot(range(iterations), scores) - plt.xlabel("Iterations") - plt.ylabel("Function values") - plt.show() - return best_state - - -if __name__ == "__main__": - - def test_f1(x, y): - return (x**2) + (y**2) - - # starting the problem with initial coordinates (12, 47) - prob = SearchProblem(x=12, y=47, step_size=1, function_to_optimize=test_f1) - local_min = simulated_annealing( - prob, find_max=False, max_x=100, min_x=5, max_y=50, min_y=-5, visualization=True - ) - print( - "The minimum score for f(x, y) = x^2 + y^2 with the domain 100 > x > 5 " - f"and 50 > y > - 5 found via hill climbing: {local_min.score()}" - ) - - # starting the problem with initial coordinates (12, 47) - prob = SearchProblem(x=12, y=47, step_size=1, function_to_optimize=test_f1) - local_min = simulated_annealing( - prob, find_max=True, max_x=100, min_x=5, max_y=50, min_y=-5, visualization=True - ) - print( - "The maximum score for f(x, y) = x^2 + y^2 with the domain 100 > x > 5 " - f"and 50 > y > - 5 found via hill climbing: {local_min.score()}" - ) - - def test_f2(x, y): - return (3 * x**2) - (6 * y) - - prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1) - local_min = simulated_annealing(prob, find_max=False, visualization=True) - print( - "The minimum score for f(x, y) = 3*x^2 - 6*y found via hill climbing: " - f"{local_min.score()}" - ) - - prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1) - local_min = simulated_annealing(prob, find_max=True, visualization=True) - print( - "The maximum score for f(x, y) = 3*x^2 - 6*y found via hill climbing: " - f"{local_min.score()}" - ) diff --git a/searches/tabu_search.py b/searches/tabu_search.py deleted file mode 100644 index fd482a81224c..000000000000 --- a/searches/tabu_search.py +++ /dev/null @@ -1,292 +0,0 @@ -""" -This is pure Python implementation of Tabu search algorithm for a Travelling Salesman -Problem, that the distances between the cities are symmetric (the distance between city -'a' and city 'b' is the same between city 'b' and city 'a'). -The TSP can be represented into a graph. The cities are represented by nodes and the -distance between them is represented by the weight of the ark between the nodes. - -The .txt file with the graph has the form: - -node1 node2 distance_between_node1_and_node2 -node1 node3 distance_between_node1_and_node3 -... - -Be careful node1, node2 and the distance between them, must exist only once. This means -in the .txt file should not exist: -node1 node2 distance_between_node1_and_node2 -node2 node1 distance_between_node2_and_node1 - -For pytests run following command: -pytest - -For manual testing run: -python tabu_search.py -f your_file_name.txt -number_of_iterations_of_tabu_search \ - -s size_of_tabu_search -e.g. python tabu_search.py -f tabudata2.txt -i 4 -s 3 -""" - -import argparse -import copy - - -def generate_neighbours(path): - """ - Pure implementation of generating a dictionary of neighbors and the cost with each - neighbor, given a path file that includes a graph. - - :param path: The path to the .txt file that includes the graph (e.g.tabudata2.txt) - :return dict_of_neighbours: Dictionary with key each node and value a list of lists - with the neighbors of the node and the cost (distance) for each neighbor. - - Example of dict_of_neighbours: - >>) dict_of_neighbours[a] - [[b,20],[c,18],[d,22],[e,26]] - - This indicates the neighbors of node (city) 'a', which has neighbor the node 'b' - with distance 20, the node 'c' with distance 18, the node 'd' with distance 22 and - the node 'e' with distance 26. - """ - - dict_of_neighbours = {} - - with open(path) as f: - for line in f: - if line.split()[0] not in dict_of_neighbours: - _list = [] - _list.append([line.split()[1], line.split()[2]]) - dict_of_neighbours[line.split()[0]] = _list - else: - dict_of_neighbours[line.split()[0]].append( - [line.split()[1], line.split()[2]] - ) - if line.split()[1] not in dict_of_neighbours: - _list = [] - _list.append([line.split()[0], line.split()[2]]) - dict_of_neighbours[line.split()[1]] = _list - else: - dict_of_neighbours[line.split()[1]].append( - [line.split()[0], line.split()[2]] - ) - - return dict_of_neighbours - - -def generate_first_solution(path, dict_of_neighbours): - """ - Pure implementation of generating the first solution for the Tabu search to start, - with the redundant resolution strategy. That means that we start from the starting - node (e.g. node 'a'), then we go to the city nearest (lowest distance) to this node - (let's assume is node 'c'), then we go to the nearest city of the node 'c', etc. - till we have visited all cities and return to the starting node. - - :param path: The path to the .txt file that includes the graph (e.g.tabudata2.txt) - :param dict_of_neighbours: Dictionary with key each node and value a list of lists - with the neighbors of the node and the cost (distance) for each neighbor. - :return first_solution: The solution for the first iteration of Tabu search using - the redundant resolution strategy in a list. - :return distance_of_first_solution: The total distance that Travelling Salesman - will travel, if he follows the path in first_solution. - """ - - with open(path) as f: - start_node = f.read(1) - end_node = start_node - - first_solution = [] - - visiting = start_node - - distance_of_first_solution = 0 - while visiting not in first_solution: - minim = 10000 - for k in dict_of_neighbours[visiting]: - if int(k[1]) < int(minim) and k[0] not in first_solution: - minim = k[1] - best_node = k[0] - - first_solution.append(visiting) - distance_of_first_solution = distance_of_first_solution + int(minim) - visiting = best_node - - first_solution.append(end_node) - - position = 0 - for k in dict_of_neighbours[first_solution[-2]]: - if k[0] == start_node: - break - position += 1 - - distance_of_first_solution = ( - distance_of_first_solution - + int(dict_of_neighbours[first_solution[-2]][position][1]) - - 10000 - ) - return first_solution, distance_of_first_solution - - -def find_neighborhood(solution, dict_of_neighbours): - """ - Pure implementation of generating the neighborhood (sorted by total distance of - each solution from lowest to highest) of a solution with 1-1 exchange method, that - means we exchange each node in a solution with each other node and generating a - number of solution named neighborhood. - - :param solution: The solution in which we want to find the neighborhood. - :param dict_of_neighbours: Dictionary with key each node and value a list of lists - with the neighbors of the node and the cost (distance) for each neighbor. - :return neighborhood_of_solution: A list that includes the solutions and the total - distance of each solution (in form of list) that are produced with 1-1 exchange - from the solution that the method took as an input - - Example: - >>> find_neighborhood(['a', 'c', 'b', 'd', 'e', 'a'], - ... {'a': [['b', '20'], ['c', '18'], ['d', '22'], ['e', '26']], - ... 'c': [['a', '18'], ['b', '10'], ['d', '23'], ['e', '24']], - ... 'b': [['a', '20'], ['c', '10'], ['d', '11'], ['e', '12']], - ... 'e': [['a', '26'], ['b', '12'], ['c', '24'], ['d', '40']], - ... 'd': [['a', '22'], ['b', '11'], ['c', '23'], ['e', '40']]} - ... ) # doctest: +NORMALIZE_WHITESPACE - [['a', 'e', 'b', 'd', 'c', 'a', 90], - ['a', 'c', 'd', 'b', 'e', 'a', 90], - ['a', 'd', 'b', 'c', 'e', 'a', 93], - ['a', 'c', 'b', 'e', 'd', 'a', 102], - ['a', 'c', 'e', 'd', 'b', 'a', 113], - ['a', 'b', 'c', 'd', 'e', 'a', 119]] - """ - - neighborhood_of_solution = [] - - for n in solution[1:-1]: - idx1 = solution.index(n) - for kn in solution[1:-1]: - idx2 = solution.index(kn) - if n == kn: - continue - - _tmp = copy.deepcopy(solution) - _tmp[idx1] = kn - _tmp[idx2] = n - - distance = 0 - - for k in _tmp[:-1]: - next_node = _tmp[_tmp.index(k) + 1] - for i in dict_of_neighbours[k]: - if i[0] == next_node: - distance = distance + int(i[1]) - _tmp.append(distance) - - if _tmp not in neighborhood_of_solution: - neighborhood_of_solution.append(_tmp) - - index_of_last_item_in_the_list = len(neighborhood_of_solution[0]) - 1 - - neighborhood_of_solution.sort(key=lambda x: x[index_of_last_item_in_the_list]) - return neighborhood_of_solution - - -def tabu_search( - first_solution, distance_of_first_solution, dict_of_neighbours, iters, size -): - """ - Pure implementation of Tabu search algorithm for a Travelling Salesman Problem in - Python. - - :param first_solution: The solution for the first iteration of Tabu search using - the redundant resolution strategy in a list. - :param distance_of_first_solution: The total distance that Travelling Salesman will - travel, if he follows the path in first_solution. - :param dict_of_neighbours: Dictionary with key each node and value a list of lists - with the neighbors of the node and the cost (distance) for each neighbor. - :param iters: The number of iterations that Tabu search will execute. - :param size: The size of Tabu List. - :return best_solution_ever: The solution with the lowest distance that occurred - during the execution of Tabu search. - :return best_cost: The total distance that Travelling Salesman will travel, if he - follows the path in best_solution ever. - """ - count = 1 - solution = first_solution - tabu_list = [] - best_cost = distance_of_first_solution - best_solution_ever = solution - - while count <= iters: - neighborhood = find_neighborhood(solution, dict_of_neighbours) - index_of_best_solution = 0 - best_solution = neighborhood[index_of_best_solution] - best_cost_index = len(best_solution) - 1 - - found = False - while not found: - i = 0 - while i < len(best_solution): - if best_solution[i] != solution[i]: - first_exchange_node = best_solution[i] - second_exchange_node = solution[i] - break - i = i + 1 - - if [first_exchange_node, second_exchange_node] not in tabu_list and [ - second_exchange_node, - first_exchange_node, - ] not in tabu_list: - tabu_list.append([first_exchange_node, second_exchange_node]) - found = True - solution = best_solution[:-1] - cost = neighborhood[index_of_best_solution][best_cost_index] - if cost < best_cost: - best_cost = cost - best_solution_ever = solution - else: - index_of_best_solution = index_of_best_solution + 1 - best_solution = neighborhood[index_of_best_solution] - - if len(tabu_list) >= size: - tabu_list.pop(0) - - count = count + 1 - - return best_solution_ever, best_cost - - -def main(args=None): - dict_of_neighbours = generate_neighbours(args.File) - - first_solution, distance_of_first_solution = generate_first_solution( - args.File, dict_of_neighbours - ) - - best_sol, best_cost = tabu_search( - first_solution, - distance_of_first_solution, - dict_of_neighbours, - args.Iterations, - args.Size, - ) - - print(f"Best solution: {best_sol}, with total distance: {best_cost}.") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Tabu Search") - parser.add_argument( - "-f", - "--File", - type=str, - help="Path to the file containing the data", - required=True, - ) - parser.add_argument( - "-i", - "--Iterations", - type=int, - help="How many iterations the algorithm should perform", - required=True, - ) - parser.add_argument( - "-s", "--Size", type=int, help="Size of the tabu list", required=True - ) - - # Pass the arguments to main method - main(parser.parse_args()) diff --git a/searches/tabu_test_data.txt b/searches/tabu_test_data.txt deleted file mode 100644 index f797ff1c627a..000000000000 --- a/searches/tabu_test_data.txt +++ /dev/null @@ -1,10 +0,0 @@ -a b 20 -a c 18 -a d 22 -a e 26 -b c 10 -b d 11 -b e 12 -c d 23 -c e 24 -d e 40 diff --git a/searches/ternary_search.py b/searches/ternary_search.py deleted file mode 100644 index 73e4b1ddc68b..000000000000 --- a/searches/ternary_search.py +++ /dev/null @@ -1,173 +0,0 @@ -""" -This is a type of divide and conquer algorithm which divides the search space into -3 parts and finds the target value based on the property of the array or list -(usually monotonic property). - -Time Complexity : O(log3 N) -Space Complexity : O(1) -""" - -from __future__ import annotations - -# This is the precision for this function which can be altered. -# It is recommended for users to keep this number greater than or equal to 10. -precision = 10 - - -# This is the linear search that will occur after the search space has become smaller. - - -def lin_search(left: int, right: int, array: list[int], target: int) -> int: - """Perform linear search in list. Returns -1 if element is not found. - - Parameters - ---------- - left : int - left index bound. - right : int - right index bound. - array : List[int] - List of elements to be searched on - target : int - Element that is searched - - Returns - ------- - int - index of element that is looked for. - - Examples - -------- - >>> lin_search(0, 4, [4, 5, 6, 7], 7) - 3 - >>> lin_search(0, 3, [4, 5, 6, 7], 7) - -1 - >>> lin_search(0, 2, [-18, 2], -18) - 0 - >>> lin_search(0, 1, [5], 5) - 0 - >>> lin_search(0, 3, ['a', 'c', 'd'], 'c') - 1 - >>> lin_search(0, 3, [.1, .4 , -.1], .1) - 0 - >>> lin_search(0, 3, [.1, .4 , -.1], -.1) - 2 - """ - for i in range(left, right): - if array[i] == target: - return i - return -1 - - -def ite_ternary_search(array: list[int], target: int) -> int: - """Iterative method of the ternary search algorithm. - >>> test_list = [0, 1, 2, 8, 13, 17, 19, 32, 42] - >>> ite_ternary_search(test_list, 3) - -1 - >>> ite_ternary_search(test_list, 13) - 4 - >>> ite_ternary_search([4, 5, 6, 7], 4) - 0 - >>> ite_ternary_search([4, 5, 6, 7], -10) - -1 - >>> ite_ternary_search([-18, 2], -18) - 0 - >>> ite_ternary_search([5], 5) - 0 - >>> ite_ternary_search(['a', 'c', 'd'], 'c') - 1 - >>> ite_ternary_search(['a', 'c', 'd'], 'f') - -1 - >>> ite_ternary_search([], 1) - -1 - >>> ite_ternary_search([.1, .4 , -.1], .1) - 0 - """ - - left = 0 - right = len(array) - while left <= right: - if right - left < precision: - return lin_search(left, right, array, target) - - one_third = (left + right) // 3 + 1 - two_third = 2 * (left + right) // 3 + 1 - - if array[one_third] == target: - return one_third - elif array[two_third] == target: - return two_third - - elif target < array[one_third]: - right = one_third - 1 - elif array[two_third] < target: - left = two_third + 1 - - else: - left = one_third + 1 - right = two_third - 1 - return -1 - - -def rec_ternary_search(left: int, right: int, array: list[int], target: int) -> int: - """Recursive method of the ternary search algorithm. - - >>> test_list = [0, 1, 2, 8, 13, 17, 19, 32, 42] - >>> rec_ternary_search(0, len(test_list), test_list, 3) - -1 - >>> rec_ternary_search(4, len(test_list), test_list, 42) - 8 - >>> rec_ternary_search(0, 2, [4, 5, 6, 7], 4) - 0 - >>> rec_ternary_search(0, 3, [4, 5, 6, 7], -10) - -1 - >>> rec_ternary_search(0, 1, [-18, 2], -18) - 0 - >>> rec_ternary_search(0, 1, [5], 5) - 0 - >>> rec_ternary_search(0, 2, ['a', 'c', 'd'], 'c') - 1 - >>> rec_ternary_search(0, 2, ['a', 'c', 'd'], 'f') - -1 - >>> rec_ternary_search(0, 0, [], 1) - -1 - >>> rec_ternary_search(0, 3, [.1, .4 , -.1], .1) - 0 - """ - if left < right: - if right - left < precision: - return lin_search(left, right, array, target) - one_third = (left + right) // 3 + 1 - two_third = 2 * (left + right) // 3 + 1 - - if array[one_third] == target: - return one_third - elif array[two_third] == target: - return two_third - - elif target < array[one_third]: - return rec_ternary_search(left, one_third - 1, array, target) - elif array[two_third] < target: - return rec_ternary_search(two_third + 1, right, array, target) - else: - return rec_ternary_search(one_third + 1, two_third - 1, array, target) - else: - return -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - user_input = input("Enter numbers separated by comma:\n").strip() - collection = [int(item.strip()) for item in user_input.split(",")] - assert collection == sorted(collection), f"List must be ordered.\n{collection}." - target = int(input("Enter the number to be found in the list:\n").strip()) - result1 = ite_ternary_search(collection, target) - result2 = rec_ternary_search(0, len(collection) - 1, collection, target) - if result2 != -1: - print(f"Iterative search: {target} found at positions: {result1}") - print(f"Recursive search: {target} found at positions: {result2}") - else: - print("Not found") diff --git a/sorts/README.md b/sorts/README.md deleted file mode 100644 index f24427d582e7..000000000000 --- a/sorts/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Sorting Algorithms -Sorting is the process of putting data in a specific order. The way to arrange data in a specific order -is specified by the sorting algorithm. The most typical orders are lexical or numerical. The significance -of sorting lies in the fact that, if data is stored in a sorted manner, data searching can be highly optimised. -Another use for sorting is to represent data in a more readable manner. - -This section contains a lot of important algorithms that help us to use sorting algorithms in various scenarios. -## References -* <https://www.tutorialspoint.com/python_data_structure/python_sorting_algorithms.htm> -* <https://www.geeksforgeeks.org/sorting-algorithms-in-python> -* <https://realpython.com/sorting-algorithms-python> diff --git a/sorts/__init__.py b/sorts/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py deleted file mode 100644 index 8ce0619fd573..000000000000 --- a/sorts/bead_sort.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Bead sort only works for sequences of non-negative integers. -https://en.wikipedia.org/wiki/Bead_sort -""" - - -def bead_sort(sequence: list) -> list: - """ - >>> bead_sort([6, 11, 12, 4, 1, 5]) - [1, 4, 5, 6, 11, 12] - - >>> bead_sort([9, 8, 7, 6, 5, 4 ,3, 2, 1]) - [1, 2, 3, 4, 5, 6, 7, 8, 9] - - >>> bead_sort([5, 0, 4, 3]) - [0, 3, 4, 5] - - >>> bead_sort([8, 2, 1]) - [1, 2, 8] - - >>> bead_sort([1, .9, 0.0, 0, -1, -.9]) - Traceback (most recent call last): - ... - TypeError: Sequence must be list of non-negative integers - - >>> bead_sort("Hello world") - Traceback (most recent call last): - ... - TypeError: Sequence must be list of non-negative integers - """ - if any(not isinstance(x, int) or x < 0 for x in sequence): - raise TypeError("Sequence must be list of non-negative integers") - for _ in range(len(sequence)): - for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): # noqa: RUF007 - if rod_upper > rod_lower: - sequence[i] -= rod_upper - rod_lower - sequence[i + 1] += rod_upper - rod_lower - return sequence - - -if __name__ == "__main__": - assert bead_sort([5, 4, 3, 2, 1]) == [1, 2, 3, 4, 5] - assert bead_sort([7, 9, 4, 3, 5]) == [3, 4, 5, 7, 9] diff --git a/sorts/binary_insertion_sort.py b/sorts/binary_insertion_sort.py deleted file mode 100644 index 50653a99e7ce..000000000000 --- a/sorts/binary_insertion_sort.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -This is a pure Python implementation of the binary insertion sort algorithm - -For doctests run following command: -python -m doctest -v binary_insertion_sort.py -or -python3 -m doctest -v binary_insertion_sort.py - -For manual testing run: -python binary_insertion_sort.py -""" - - -def binary_insertion_sort(collection: list) -> list: - """ - Sorts a list using the binary insertion sort algorithm. - - :param collection: A mutable ordered collection with comparable items. - :return: The same collection ordered in ascending order. - - Examples: - >>> binary_insertion_sort([0, 4, 1234, 4, 1]) - [0, 1, 4, 4, 1234] - >>> binary_insertion_sort([]) == sorted([]) - True - >>> binary_insertion_sort([-1, -2, -3]) == sorted([-1, -2, -3]) - True - >>> lst = ['d', 'a', 'b', 'e', 'c'] - >>> binary_insertion_sort(lst) == sorted(lst) - True - >>> import random - >>> collection = random.sample(range(-50, 50), 100) - >>> binary_insertion_sort(collection) == sorted(collection) - True - >>> import string - >>> collection = random.choices(string.ascii_letters + string.digits, k=100) - >>> binary_insertion_sort(collection) == sorted(collection) - True - """ - - n = len(collection) - for i in range(1, n): - value_to_insert = collection[i] - low = 0 - high = i - 1 - - while low <= high: - mid = (low + high) // 2 - if value_to_insert < collection[mid]: - high = mid - 1 - else: - low = mid + 1 - for j in range(i, low, -1): - collection[j] = collection[j - 1] - collection[low] = value_to_insert - return collection - - -if __name__ == "__main": - user_input = input("Enter numbers separated by a comma:\n").strip() - try: - unsorted = [int(item) for item in user_input.split(",")] - except ValueError: - print("Invalid input. Please enter valid integers separated by commas.") - raise - print(f"{binary_insertion_sort(unsorted) = }") diff --git a/sorts/bitonic_sort.py b/sorts/bitonic_sort.py deleted file mode 100644 index 600f8139603a..000000000000 --- a/sorts/bitonic_sort.py +++ /dev/null @@ -1,97 +0,0 @@ -""" -Python program for Bitonic Sort. - -Note that this program works only when size of input is a power of 2. -""" - -from __future__ import annotations - - -def comp_and_swap(array: list[int], index1: int, index2: int, direction: int) -> None: - """Compare the value at given index1 and index2 of the array and swap them as per - the given direction. - - The parameter direction indicates the sorting direction, ASCENDING(1) or - DESCENDING(0); if (a[i] > a[j]) agrees with the direction, then a[i] and a[j] are - interchanged. - - >>> arr = [12, 42, -21, 1] - >>> comp_and_swap(arr, 1, 2, 1) - >>> arr - [12, -21, 42, 1] - - >>> comp_and_swap(arr, 1, 2, 0) - >>> arr - [12, 42, -21, 1] - - >>> comp_and_swap(arr, 0, 3, 1) - >>> arr - [1, 42, -21, 12] - - >>> comp_and_swap(arr, 0, 3, 0) - >>> arr - [12, 42, -21, 1] - """ - if (direction == 1 and array[index1] > array[index2]) or ( - direction == 0 and array[index1] < array[index2] - ): - array[index1], array[index2] = array[index2], array[index1] - - -def bitonic_merge(array: list[int], low: int, length: int, direction: int) -> None: - """ - It recursively sorts a bitonic sequence in ascending order, if direction = 1, and in - descending if direction = 0. - The sequence to be sorted starts at index position low, the parameter length is the - number of elements to be sorted. - - >>> arr = [12, 42, -21, 1] - >>> bitonic_merge(arr, 0, 4, 1) - >>> arr - [-21, 1, 12, 42] - - >>> bitonic_merge(arr, 0, 4, 0) - >>> arr - [42, 12, 1, -21] - """ - if length > 1: - middle = int(length / 2) - for i in range(low, low + middle): - comp_and_swap(array, i, i + middle, direction) - bitonic_merge(array, low, middle, direction) - bitonic_merge(array, low + middle, middle, direction) - - -def bitonic_sort(array: list[int], low: int, length: int, direction: int) -> None: - """ - This function first produces a bitonic sequence by recursively sorting its two - halves in opposite sorting orders, and then calls bitonic_merge to make them in the - same order. - - >>> arr = [12, 34, 92, -23, 0, -121, -167, 145] - >>> bitonic_sort(arr, 0, 8, 1) - >>> arr - [-167, -121, -23, 0, 12, 34, 92, 145] - - >>> bitonic_sort(arr, 0, 8, 0) - >>> arr - [145, 92, 34, 12, 0, -23, -121, -167] - """ - if length > 1: - middle = int(length / 2) - bitonic_sort(array, low, middle, 1) - bitonic_sort(array, low + middle, middle, 0) - bitonic_merge(array, low, length, direction) - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item.strip()) for item in user_input.split(",")] - - bitonic_sort(unsorted, 0, len(unsorted), 1) - print("\nSorted array in ascending order is: ", end="") - print(*unsorted, sep=", ") - - bitonic_merge(unsorted, 0, len(unsorted), 0) - print("Sorted array in descending order is: ", end="") - print(*unsorted, sep=", ") diff --git a/sorts/bogo_sort.py b/sorts/bogo_sort.py deleted file mode 100644 index 9c133f0d8a55..000000000000 --- a/sorts/bogo_sort.py +++ /dev/null @@ -1,47 +0,0 @@ -""" -This is a pure Python implementation of the bogosort algorithm, -also known as permutation sort, stupid sort, slowsort, shotgun sort, or monkey sort. -Bogosort generates random permutations until it guesses the correct one. - -More info on: https://en.wikipedia.org/wiki/Bogosort - -For doctests run following command: -python -m doctest -v bogo_sort.py -or -python3 -m doctest -v bogo_sort.py -For manual testing run: -python bogo_sort.py -""" - -import random - - -def bogo_sort(collection): - """Pure implementation of the bogosort algorithm in Python - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - Examples: - >>> bogo_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> bogo_sort([]) - [] - >>> bogo_sort([-2, -5, -45]) - [-45, -5, -2] - """ - - def is_sorted(collection): - for i in range(len(collection) - 1): - if collection[i] > collection[i + 1]: - return False - return True - - while not is_sorted(collection): - random.shuffle(collection) - return collection - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(bogo_sort(unsorted)) diff --git a/sorts/bubble_sort.py b/sorts/bubble_sort.py deleted file mode 100644 index bdf85c70dd35..000000000000 --- a/sorts/bubble_sort.py +++ /dev/null @@ -1,130 +0,0 @@ -from typing import Any - - -def bubble_sort_iterative(collection: list[Any]) -> list[Any]: - """Pure implementation of bubble sort algorithm in Python - - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - Examples: - >>> bubble_sort_iterative([0, 5, 2, 3, 2]) - [0, 2, 2, 3, 5] - >>> bubble_sort_iterative([]) - [] - >>> bubble_sort_iterative([-2, -45, -5]) - [-45, -5, -2] - >>> bubble_sort_iterative([-23, 0, 6, -4, 34]) - [-23, -4, 0, 6, 34] - >>> bubble_sort_iterative([0, 5, 2, 3, 2]) == sorted([0, 5, 2, 3, 2]) - True - >>> bubble_sort_iterative([]) == sorted([]) - True - >>> bubble_sort_iterative([-2, -45, -5]) == sorted([-2, -45, -5]) - True - >>> bubble_sort_iterative([-23, 0, 6, -4, 34]) == sorted([-23, 0, 6, -4, 34]) - True - >>> bubble_sort_iterative(['d', 'a', 'b', 'e']) == sorted(['d', 'a', 'b', 'e']) - True - >>> bubble_sort_iterative(['z', 'a', 'y', 'b', 'x', 'c']) - ['a', 'b', 'c', 'x', 'y', 'z'] - >>> bubble_sort_iterative([1.1, 3.3, 5.5, 7.7, 2.2, 4.4, 6.6]) - [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7] - >>> bubble_sort_iterative([1, 3.3, 5, 7.7, 2, 4.4, 6]) - [1, 2, 3.3, 4.4, 5, 6, 7.7] - >>> import random - >>> collection_arg = random.sample(range(-50, 50), 100) - >>> bubble_sort_iterative(collection_arg) == sorted(collection_arg) - True - >>> import string - >>> collection_arg = random.choices(string.ascii_letters + string.digits, k=100) - >>> bubble_sort_iterative(collection_arg) == sorted(collection_arg) - True - """ - length = len(collection) - for i in reversed(range(length)): - swapped = False - for j in range(i): - if collection[j] > collection[j + 1]: - swapped = True - collection[j], collection[j + 1] = collection[j + 1], collection[j] - if not swapped: - break # Stop iteration if the collection is sorted. - return collection - - -def bubble_sort_recursive(collection: list[Any]) -> list[Any]: - """It is similar iterative bubble sort but recursive. - - :param collection: mutable ordered sequence of elements - :return: the same list in ascending order - - Examples: - >>> bubble_sort_recursive([0, 5, 2, 3, 2]) - [0, 2, 2, 3, 5] - >>> bubble_sort_iterative([]) - [] - >>> bubble_sort_recursive([-2, -45, -5]) - [-45, -5, -2] - >>> bubble_sort_recursive([-23, 0, 6, -4, 34]) - [-23, -4, 0, 6, 34] - >>> bubble_sort_recursive([0, 5, 2, 3, 2]) == sorted([0, 5, 2, 3, 2]) - True - >>> bubble_sort_recursive([]) == sorted([]) - True - >>> bubble_sort_recursive([-2, -45, -5]) == sorted([-2, -45, -5]) - True - >>> bubble_sort_recursive([-23, 0, 6, -4, 34]) == sorted([-23, 0, 6, -4, 34]) - True - >>> bubble_sort_recursive(['d', 'a', 'b', 'e']) == sorted(['d', 'a', 'b', 'e']) - True - >>> bubble_sort_recursive(['z', 'a', 'y', 'b', 'x', 'c']) - ['a', 'b', 'c', 'x', 'y', 'z'] - >>> bubble_sort_recursive([1.1, 3.3, 5.5, 7.7, 2.2, 4.4, 6.6]) - [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7] - >>> bubble_sort_recursive([1, 3.3, 5, 7.7, 2, 4.4, 6]) - [1, 2, 3.3, 4.4, 5, 6, 7.7] - >>> import random - >>> collection_arg = random.sample(range(-50, 50), 100) - >>> bubble_sort_recursive(collection_arg) == sorted(collection_arg) - True - >>> import string - >>> collection_arg = random.choices(string.ascii_letters + string.digits, k=100) - >>> bubble_sort_recursive(collection_arg) == sorted(collection_arg) - True - """ - length = len(collection) - swapped = False - for i in range(length - 1): - if collection[i] > collection[i + 1]: - collection[i], collection[i + 1] = collection[i + 1], collection[i] - swapped = True - - return collection if not swapped else bubble_sort_recursive(collection) - - -if __name__ == "__main__": - import doctest - from random import sample - from timeit import timeit - - doctest.testmod() - - # Benchmark: Iterative seems slightly faster than recursive. - num_runs = 10_000 - unsorted = sample(range(-50, 50), 100) - timer_iterative = timeit( - "bubble_sort_iterative(unsorted[:])", globals=globals(), number=num_runs - ) - print("\nIterative bubble sort:") - print(*bubble_sort_iterative(unsorted), sep=",") - print(f"Processing time (iterative): {timer_iterative:.5f}s for {num_runs:,} runs") - - unsorted = sample(range(-50, 50), 100) - timer_recursive = timeit( - "bubble_sort_recursive(unsorted[:])", globals=globals(), number=num_runs - ) - print("\nRecursive bubble sort:") - print(*bubble_sort_recursive(unsorted), sep=",") - print(f"Processing time (recursive): {timer_recursive:.5f}s for {num_runs:,} runs") diff --git a/sorts/bucket_sort.py b/sorts/bucket_sort.py deleted file mode 100644 index 1c1320a58a7d..000000000000 --- a/sorts/bucket_sort.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 -""" -Illustrate how to implement bucket sort algorithm. - -Author: OMKAR PATHAK -This program will illustrate how to implement bucket sort algorithm - -Wikipedia says: Bucket sort, or bin sort, is a sorting algorithm that works -by distributing the elements of an array into a number of buckets. -Each bucket is then sorted individually, either using a different sorting -algorithm, or by recursively applying the bucket sorting algorithm. It is a -distribution sort, and is a cousin of radix sort in the most to least -significant digit flavour. -Bucket sort is a generalization of pigeonhole sort. Bucket sort can be -implemented with comparisons and therefore can also be considered a -comparison sort algorithm. The computational complexity estimates involve the -number of buckets. - -Time Complexity of Solution: -Worst case scenario occurs when all the elements are placed in a single bucket. -The overall performance would then be dominated by the algorithm used to sort each -bucket. In this case, O(n log n), because of TimSort - -Average Case O(n + (n^2)/k + k), where k is the number of buckets - -If k = O(n), time complexity is O(n) - -Source: https://en.wikipedia.org/wiki/Bucket_sort -""" - -from __future__ import annotations - - -def bucket_sort(my_list: list, bucket_count: int = 10) -> list: - """ - >>> data = [-1, 2, -5, 0] - >>> bucket_sort(data) == sorted(data) - True - >>> data = [9, 8, 7, 6, -12] - >>> bucket_sort(data) == sorted(data) - True - >>> data = [.4, 1.2, .1, .2, -.9] - >>> bucket_sort(data) == sorted(data) - True - >>> bucket_sort([]) == sorted([]) - True - >>> data = [-1e10, 1e10] - >>> bucket_sort(data) == sorted(data) - True - >>> import random - >>> collection = random.sample(range(-50, 50), 50) - >>> bucket_sort(collection) == sorted(collection) - True - """ - - if len(my_list) == 0 or bucket_count <= 0: - return [] - - min_value, max_value = min(my_list), max(my_list) - bucket_size = (max_value - min_value) / bucket_count - buckets: list[list] = [[] for _ in range(bucket_count)] - - for val in my_list: - index = min(int((val - min_value) / bucket_size), bucket_count - 1) - buckets[index].append(val) - - return [val for bucket in buckets for val in sorted(bucket)] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - assert bucket_sort([4, 5, 3, 2, 1]) == [1, 2, 3, 4, 5] - assert bucket_sort([0, 1, -10, 15, 2, -2]) == [-10, -2, 0, 1, 2, 15] diff --git a/sorts/circle_sort.py b/sorts/circle_sort.py deleted file mode 100644 index 271fa1e8d58a..000000000000 --- a/sorts/circle_sort.py +++ /dev/null @@ -1,86 +0,0 @@ -""" -This is a Python implementation of the circle sort algorithm - -For doctests run following command: -python3 -m doctest -v circle_sort.py - -For manual testing run: -python3 circle_sort.py -""" - - -def circle_sort(collection: list) -> list: - """A pure Python implementation of circle sort algorithm - - :param collection: a mutable collection of comparable items in any order - :return: the same collection in ascending order - - Examples: - >>> circle_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> circle_sort([]) - [] - >>> circle_sort([-2, 5, 0, -45]) - [-45, -2, 0, 5] - >>> collections = ([], [0, 5, 3, 2, 2], [-2, 5, 0, -45]) - >>> all(sorted(collection) == circle_sort(collection) for collection in collections) - True - """ - - if len(collection) < 2: - return collection - - def circle_sort_util(collection: list, low: int, high: int) -> bool: - """ - >>> arr = [5,4,3,2,1] - >>> circle_sort_util(lst, 0, 2) - True - >>> arr - [3, 4, 5, 2, 1] - """ - - swapped = False - - if low == high: - return swapped - - left = low - right = high - - while left < right: - if collection[left] > collection[right]: - collection[left], collection[right] = ( - collection[right], - collection[left], - ) - swapped = True - - left += 1 - right -= 1 - - if left == right and collection[left] > collection[right + 1]: - collection[left], collection[right + 1] = ( - collection[right + 1], - collection[left], - ) - - swapped = True - - mid = low + int((high - low) / 2) - left_swap = circle_sort_util(collection, low, mid) - right_swap = circle_sort_util(collection, mid + 1, high) - - return swapped or left_swap or right_swap - - is_not_sorted = True - - while is_not_sorted is True: - is_not_sorted = circle_sort_util(collection, 0, len(collection) - 1) - - return collection - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(circle_sort(unsorted)) diff --git a/sorts/cocktail_shaker_sort.py b/sorts/cocktail_shaker_sort.py deleted file mode 100644 index de126426d986..000000000000 --- a/sorts/cocktail_shaker_sort.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -An implementation of the cocktail shaker sort algorithm in pure Python. - -https://en.wikipedia.org/wiki/Cocktail_shaker_sort -""" - - -def cocktail_shaker_sort(arr: list[int]) -> list[int]: - """ - Sorts a list using the Cocktail Shaker Sort algorithm. - - :param arr: List of elements to be sorted. - :return: Sorted list. - - >>> cocktail_shaker_sort([4, 5, 2, 1, 2]) - [1, 2, 2, 4, 5] - >>> cocktail_shaker_sort([-4, 5, 0, 1, 2, 11]) - [-4, 0, 1, 2, 5, 11] - >>> cocktail_shaker_sort([0.1, -2.4, 4.4, 2.2]) - [-2.4, 0.1, 2.2, 4.4] - >>> cocktail_shaker_sort([1, 2, 3, 4, 5]) - [1, 2, 3, 4, 5] - >>> cocktail_shaker_sort([-4, -5, -24, -7, -11]) - [-24, -11, -7, -5, -4] - >>> cocktail_shaker_sort(["elderberry", "banana", "date", "apple", "cherry"]) - ['apple', 'banana', 'cherry', 'date', 'elderberry'] - >>> cocktail_shaker_sort((-4, -5, -24, -7, -11)) - Traceback (most recent call last): - ... - TypeError: 'tuple' object does not support item assignment - """ - start, end = 0, len(arr) - 1 - - while start < end: - swapped = False - - # Pass from left to right - for i in range(start, end): - if arr[i] > arr[i + 1]: - arr[i], arr[i + 1] = arr[i + 1], arr[i] - swapped = True - - if not swapped: - break - - end -= 1 # Decrease the end pointer after each pass - - # Pass from right to left - for i in range(end, start, -1): - if arr[i] < arr[i - 1]: - arr[i], arr[i - 1] = arr[i - 1], arr[i] - swapped = True - - if not swapped: - break - - start += 1 # Increase the start pointer after each pass - - return arr - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(f"{cocktail_shaker_sort(unsorted) = }") diff --git a/sorts/comb_sort.py b/sorts/comb_sort.py deleted file mode 100644 index 3c8b1e99a454..000000000000 --- a/sorts/comb_sort.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -This is pure Python implementation of comb sort algorithm. -Comb sort is a relatively simple sorting algorithm originally designed by Wlodzimierz -Dobosiewicz in 1980. It was rediscovered by Stephen Lacey and Richard Box in 1991. -Comb sort improves on bubble sort algorithm. -In bubble sort, distance (or gap) between two compared elements is always one. -Comb sort improvement is that gap can be much more than 1, in order to prevent slowing -down by small values -at the end of a list. - -More info on: https://en.wikipedia.org/wiki/Comb_sort - -For doctests run following command: -python -m doctest -v comb_sort.py -or -python3 -m doctest -v comb_sort.py - -For manual testing run: -python comb_sort.py -""" - - -def comb_sort(data: list) -> list: - """Pure implementation of comb sort algorithm in Python - :param data: mutable collection with comparable items - :return: the same collection in ascending order - Examples: - >>> comb_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> comb_sort([]) - [] - >>> comb_sort([99, 45, -7, 8, 2, 0, -15, 3]) - [-15, -7, 0, 2, 3, 8, 45, 99] - """ - shrink_factor = 1.3 - gap = len(data) - completed = False - - while not completed: - # Update the gap value for a next comb - gap = int(gap / shrink_factor) - if gap <= 1: - completed = True - - index = 0 - while index + gap < len(data): - if data[index] > data[index + gap]: - # Swap values - data[index], data[index + gap] = data[index + gap], data[index] - completed = False - index += 1 - - return data - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(comb_sort(unsorted)) diff --git a/sorts/counting_sort.py b/sorts/counting_sort.py deleted file mode 100644 index 256952df52d2..000000000000 --- a/sorts/counting_sort.py +++ /dev/null @@ -1,73 +0,0 @@ -""" -This is pure Python implementation of counting sort algorithm -For doctests run following command: -python -m doctest -v counting_sort.py -or -python3 -m doctest -v counting_sort.py -For manual testing run: -python counting_sort.py -""" - - -def counting_sort(collection): - """Pure implementation of counting sort algorithm in Python - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - Examples: - >>> counting_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> counting_sort([]) - [] - >>> counting_sort([-2, -5, -45]) - [-45, -5, -2] - """ - # if the collection is empty, returns empty - if collection == []: - return [] - - # get some information about the collection - coll_len = len(collection) - coll_max = max(collection) - coll_min = min(collection) - - # create the counting array - counting_arr_length = coll_max + 1 - coll_min - counting_arr = [0] * counting_arr_length - - # count how much a number appears in the collection - for number in collection: - counting_arr[number - coll_min] += 1 - - # sum each position with it's predecessors. now, counting_arr[i] tells - # us how many elements <= i has in the collection - for i in range(1, counting_arr_length): - counting_arr[i] = counting_arr[i] + counting_arr[i - 1] - - # create the output collection - ordered = [0] * coll_len - - # place the elements in the output, respecting the original order (stable - # sort) from end to begin, updating counting_arr - for i in reversed(range(coll_len)): - ordered[counting_arr[collection[i] - coll_min] - 1] = collection[i] - counting_arr[collection[i] - coll_min] -= 1 - - return ordered - - -def counting_sort_string(string): - """ - >>> counting_sort_string("thisisthestring") - 'eghhiiinrsssttt' - """ - return "".join([chr(i) for i in counting_sort([ord(c) for c in string])]) - - -if __name__ == "__main__": - # Test string sort - assert counting_sort_string("thisisthestring") == "eghhiiinrsssttt" - - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(counting_sort(unsorted)) diff --git a/sorts/cycle_sort.py b/sorts/cycle_sort.py deleted file mode 100644 index 7177c8ea110d..000000000000 --- a/sorts/cycle_sort.py +++ /dev/null @@ -1,53 +0,0 @@ -""" -Code contributed by Honey Sharma -Source: https://en.wikipedia.org/wiki/Cycle_sort -""" - - -def cycle_sort(array: list) -> list: - """ - >>> cycle_sort([4, 3, 2, 1]) - [1, 2, 3, 4] - - >>> cycle_sort([-4, 20, 0, -50, 100, -1]) - [-50, -4, -1, 0, 20, 100] - - >>> cycle_sort([-.1, -.2, 1.3, -.8]) - [-0.8, -0.2, -0.1, 1.3] - - >>> cycle_sort([]) - [] - """ - array_len = len(array) - for cycle_start in range(array_len - 1): - item = array[cycle_start] - - pos = cycle_start - for i in range(cycle_start + 1, array_len): - if array[i] < item: - pos += 1 - - if pos == cycle_start: - continue - - while item == array[pos]: - pos += 1 - - array[pos], item = item, array[pos] - while pos != cycle_start: - pos = cycle_start - for i in range(cycle_start + 1, array_len): - if array[i] < item: - pos += 1 - - while item == array[pos]: - pos += 1 - - array[pos], item = item, array[pos] - - return array - - -if __name__ == "__main__": - assert cycle_sort([4, 5, 3, 2, 1]) == [1, 2, 3, 4, 5] - assert cycle_sort([0, 1, -10, 15, 2, -2]) == [-10, -2, 0, 1, 2, 15] diff --git a/sorts/double_sort.py b/sorts/double_sort.py deleted file mode 100644 index bd5fdca1e63c..000000000000 --- a/sorts/double_sort.py +++ /dev/null @@ -1,44 +0,0 @@ -from typing import Any - - -def double_sort(collection: list[Any]) -> list[Any]: - """This sorting algorithm sorts an array using the principle of bubble sort, - but does it both from left to right and right to left. - Hence, it's called "Double sort" - :param collection: mutable ordered sequence of elements - :return: the same collection in ascending order - Examples: - >>> double_sort([-1 ,-2 ,-3 ,-4 ,-5 ,-6 ,-7]) - [-7, -6, -5, -4, -3, -2, -1] - >>> double_sort([]) - [] - >>> double_sort([-1 ,-2 ,-3 ,-4 ,-5 ,-6]) - [-6, -5, -4, -3, -2, -1] - >>> double_sort([-3, 10, 16, -42, 29]) == sorted([-3, 10, 16, -42, 29]) - True - """ - no_of_elements = len(collection) - for _ in range( - int(((no_of_elements - 1) / 2) + 1) - ): # we don't need to traverse to end of list as - for j in range(no_of_elements - 1): - # apply the bubble sort algorithm from left to right (or forwards) - if collection[j + 1] < collection[j]: - collection[j], collection[j + 1] = collection[j + 1], collection[j] - # apply the bubble sort algorithm from right to left (or backwards) - if collection[no_of_elements - 1 - j] < collection[no_of_elements - 2 - j]: - ( - collection[no_of_elements - 1 - j], - collection[no_of_elements - 2 - j], - ) = ( - collection[no_of_elements - 2 - j], - collection[no_of_elements - 1 - j], - ) - return collection - - -if __name__ == "__main__": - # allow the user to input the elements of the list on one line - unsorted = [int(x) for x in input("Enter the list to be sorted: ").split() if x] - print("the sorted list is") - print(f"{double_sort(unsorted) = }") diff --git a/sorts/dutch_national_flag_sort.py b/sorts/dutch_national_flag_sort.py deleted file mode 100644 index b4f1665cea00..000000000000 --- a/sorts/dutch_national_flag_sort.py +++ /dev/null @@ -1,98 +0,0 @@ -""" -A pure implementation of Dutch national flag (DNF) sort algorithm in Python. -Dutch National Flag algorithm is an algorithm originally designed by Edsger Dijkstra. -It is the most optimal sort for 3 unique values (eg. 0, 1, 2) in a sequence. DNF can -sort a sequence of n size with [0 <= a[i] <= 2] at guaranteed O(n) complexity in a -single pass. - -The flag of the Netherlands consists of three colors: white, red, and blue. -The task is to randomly arrange balls of white, red, and blue in such a way that balls -of the same color are placed together. DNF sorts a sequence of 0, 1, and 2's in linear -time that does not consume any extra space. This algorithm can be implemented only on -a sequence that contains three unique elements. - -1) Time complexity is O(n). -2) Space complexity is O(1). - -More info on: https://en.wikipedia.org/wiki/Dutch_national_flag_problem - -For doctests run following command: -python3 -m doctest -v dutch_national_flag_sort.py - -For manual testing run: -python dnf_sort.py -""" - -# Python program to sort a sequence containing only 0, 1 and 2 in a single pass. -red = 0 # The first color of the flag. -white = 1 # The second color of the flag. -blue = 2 # The third color of the flag. -colors = (red, white, blue) - - -def dutch_national_flag_sort(sequence: list) -> list: - """ - A pure Python implementation of Dutch National Flag sort algorithm. - :param data: 3 unique integer values (e.g., 0, 1, 2) in an sequence - :return: The same collection in ascending order - - >>> dutch_national_flag_sort([]) - [] - >>> dutch_national_flag_sort([0]) - [0] - >>> dutch_national_flag_sort([2, 1, 0, 0, 1, 2]) - [0, 0, 1, 1, 2, 2] - >>> dutch_national_flag_sort([0, 1, 1, 0, 1, 2, 1, 2, 0, 0, 0, 1]) - [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2] - >>> dutch_national_flag_sort("abacab") - Traceback (most recent call last): - ... - ValueError: The elements inside the sequence must contains only (0, 1, 2) values - >>> dutch_national_flag_sort("Abacab") - Traceback (most recent call last): - ... - ValueError: The elements inside the sequence must contains only (0, 1, 2) values - >>> dutch_national_flag_sort([3, 2, 3, 1, 3, 0, 3]) - Traceback (most recent call last): - ... - ValueError: The elements inside the sequence must contains only (0, 1, 2) values - >>> dutch_national_flag_sort([-1, 2, -1, 1, -1, 0, -1]) - Traceback (most recent call last): - ... - ValueError: The elements inside the sequence must contains only (0, 1, 2) values - >>> dutch_national_flag_sort([1.1, 2, 1.1, 1, 1.1, 0, 1.1]) - Traceback (most recent call last): - ... - ValueError: The elements inside the sequence must contains only (0, 1, 2) values - """ - if not sequence: - return [] - if len(sequence) == 1: - return list(sequence) - low = 0 - high = len(sequence) - 1 - mid = 0 - while mid <= high: - if sequence[mid] == colors[0]: - sequence[low], sequence[mid] = sequence[mid], sequence[low] - low += 1 - mid += 1 - elif sequence[mid] == colors[1]: - mid += 1 - elif sequence[mid] == colors[2]: - sequence[mid], sequence[high] = sequence[high], sequence[mid] - high -= 1 - else: - msg = f"The elements inside the sequence must contains only {colors} values" - raise ValueError(msg) - return sequence - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - user_input = input("Enter numbers separated by commas:\n").strip() - unsorted = [int(item.strip()) for item in user_input.split(",")] - print(f"{dutch_national_flag_sort(unsorted)}") diff --git a/sorts/exchange_sort.py b/sorts/exchange_sort.py deleted file mode 100644 index 1ce78a9dc0cb..000000000000 --- a/sorts/exchange_sort.py +++ /dev/null @@ -1,27 +0,0 @@ -def exchange_sort(numbers: list[int]) -> list[int]: - """ - Uses exchange sort to sort a list of numbers. - Source: https://en.wikipedia.org/wiki/Sorting_algorithm#Exchange_sort - >>> exchange_sort([5, 4, 3, 2, 1]) - [1, 2, 3, 4, 5] - >>> exchange_sort([-1, -2, -3]) - [-3, -2, -1] - >>> exchange_sort([1, 2, 3, 4, 5]) - [1, 2, 3, 4, 5] - >>> exchange_sort([0, 10, -2, 5, 3]) - [-2, 0, 3, 5, 10] - >>> exchange_sort([]) - [] - """ - numbers_length = len(numbers) - for i in range(numbers_length): - for j in range(i + 1, numbers_length): - if numbers[j] < numbers[i]: - numbers[i], numbers[j] = numbers[j], numbers[i] - return numbers - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(exchange_sort(unsorted)) diff --git a/sorts/external_sort.py b/sorts/external_sort.py deleted file mode 100644 index 3fa7cacc0592..000000000000 --- a/sorts/external_sort.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python - -# -# Sort large text files in a minimum amount of memory -# -import argparse -import os - - -class FileSplitter: - BLOCK_FILENAME_FORMAT = "block_{0}.dat" - - def __init__(self, filename): - self.filename = filename - self.block_filenames = [] - - def write_block(self, data, block_number): - filename = self.BLOCK_FILENAME_FORMAT.format(block_number) - with open(filename, "w") as file: - file.write(data) - self.block_filenames.append(filename) - - def get_block_filenames(self): - return self.block_filenames - - def split(self, block_size, sort_key=None): - i = 0 - with open(self.filename) as file: - while True: - lines = file.readlines(block_size) - - if lines == []: - break - - if sort_key is None: - lines.sort() - else: - lines.sort(key=sort_key) - - self.write_block("".join(lines), i) - i += 1 - - def cleanup(self): - map(os.remove, self.block_filenames) - - -class NWayMerge: - def select(self, choices): - min_index = -1 - min_str = None - - for i in range(len(choices)): - if min_str is None or choices[i] < min_str: - min_index = i - - return min_index - - -class FilesArray: - def __init__(self, files): - self.files = files - self.empty = set() - self.num_buffers = len(files) - self.buffers = {i: None for i in range(self.num_buffers)} - - def get_dict(self): - return { - i: self.buffers[i] for i in range(self.num_buffers) if i not in self.empty - } - - def refresh(self): - for i in range(self.num_buffers): - if self.buffers[i] is None and i not in self.empty: - self.buffers[i] = self.files[i].readline() - - if self.buffers[i] == "": - self.empty.add(i) - self.files[i].close() - - return len(self.empty) != self.num_buffers - - def unshift(self, index): - value = self.buffers[index] - self.buffers[index] = None - - return value - - -class FileMerger: - def __init__(self, merge_strategy): - self.merge_strategy = merge_strategy - - def merge(self, filenames, outfilename, buffer_size): - buffers = FilesArray(self.get_file_handles(filenames, buffer_size)) - with open(outfilename, "w", buffer_size) as outfile: - while buffers.refresh(): - min_index = self.merge_strategy.select(buffers.get_dict()) - outfile.write(buffers.unshift(min_index)) - - def get_file_handles(self, filenames, buffer_size): - files = {} - - for i in range(len(filenames)): - files[i] = open(filenames[i], "r", buffer_size) # noqa: UP015 - - return files - - -class ExternalSort: - def __init__(self, block_size): - self.block_size = block_size - - def sort(self, filename, sort_key=None): - num_blocks = self.get_number_blocks(filename, self.block_size) - splitter = FileSplitter(filename) - splitter.split(self.block_size, sort_key) - - merger = FileMerger(NWayMerge()) - buffer_size = self.block_size / (num_blocks + 1) - merger.merge(splitter.get_block_filenames(), filename + ".out", buffer_size) - - splitter.cleanup() - - def get_number_blocks(self, filename, block_size): - return (os.stat(filename).st_size / block_size) + 1 - - -def parse_memory(string): - if string[-1].lower() == "k": - return int(string[:-1]) * 1024 - elif string[-1].lower() == "m": - return int(string[:-1]) * 1024 * 1024 - elif string[-1].lower() == "g": - return int(string[:-1]) * 1024 * 1024 * 1024 - else: - return int(string) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument( - "-m", "--mem", help="amount of memory to use for sorting", default="100M" - ) - parser.add_argument( - "filename", metavar="<filename>", nargs=1, help="name of file to sort" - ) - args = parser.parse_args() - - sorter = ExternalSort(parse_memory(args.mem)) - sorter.sort(args.filename[0]) - - -if __name__ == "__main__": - main() diff --git a/sorts/gnome_sort.py b/sorts/gnome_sort.py deleted file mode 100644 index ea96e0a926a3..000000000000 --- a/sorts/gnome_sort.py +++ /dev/null @@ -1,56 +0,0 @@ -""" -Gnome Sort Algorithm (A.K.A. Stupid Sort) - -This algorithm iterates over a list comparing an element with the previous one. -If order is not respected, it swaps element backward until order is respected with -previous element. It resumes the initial iteration from element new position. - -For doctests run following command: -python3 -m doctest -v gnome_sort.py - -For manual testing run: -python3 gnome_sort.py -""" - - -def gnome_sort(lst: list) -> list: - """ - Pure implementation of the gnome sort algorithm in Python - - Take some mutable ordered collection with heterogeneous comparable items inside as - arguments, return the same collection ordered by ascending. - - Examples: - >>> gnome_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - - >>> gnome_sort([]) - [] - - >>> gnome_sort([-2, -5, -45]) - [-45, -5, -2] - - >>> "".join(gnome_sort(list(set("Gnomes are stupid!")))) - ' !Gadeimnoprstu' - """ - if len(lst) <= 1: - return lst - - i = 1 - - while i < len(lst): - if lst[i - 1] <= lst[i]: - i += 1 - else: - lst[i - 1], lst[i] = lst[i], lst[i - 1] - i -= 1 - if i == 0: - i = 1 - - return lst - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(gnome_sort(unsorted)) diff --git a/sorts/heap_sort.py b/sorts/heap_sort.py deleted file mode 100644 index 4dca879bd89c..000000000000 --- a/sorts/heap_sort.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -This is a pure Python implementation of the heap sort algorithm. - -For doctests run following command: -python -m doctest -v heap_sort.py -or -python3 -m doctest -v heap_sort.py - -For manual testing run: -python heap_sort.py -""" - - -def heapify(unsorted, index, heap_size): - largest = index - left_index = 2 * index + 1 - right_index = 2 * index + 2 - if left_index < heap_size and unsorted[left_index] > unsorted[largest]: - largest = left_index - - if right_index < heap_size and unsorted[right_index] > unsorted[largest]: - largest = right_index - - if largest != index: - unsorted[largest], unsorted[index] = unsorted[index], unsorted[largest] - heapify(unsorted, largest, heap_size) - - -def heap_sort(unsorted): - """ - Pure implementation of the heap sort algorithm in Python - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - Examples: - >>> heap_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - - >>> heap_sort([]) - [] - - >>> heap_sort([-2, -5, -45]) - [-45, -5, -2] - """ - n = len(unsorted) - for i in range(n // 2 - 1, -1, -1): - heapify(unsorted, i, n) - for i in range(n - 1, 0, -1): - unsorted[0], unsorted[i] = unsorted[i], unsorted[0] - heapify(unsorted, 0, i) - return unsorted - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(heap_sort(unsorted)) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py deleted file mode 100644 index 46b263d84a33..000000000000 --- a/sorts/insertion_sort.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -A pure Python implementation of the insertion sort algorithm - -This algorithm sorts a collection by comparing adjacent elements. -When it finds that order is not respected, it moves the element compared -backward until the order is correct. It then goes back directly to the -element's initial position resuming forward comparison. - -For doctests run following command: -python3 -m doctest -v insertion_sort.py - -For manual testing run: -python3 insertion_sort.py -""" - -from collections.abc import MutableSequence -from typing import Any, Protocol, TypeVar - - -class Comparable(Protocol): - def __lt__(self, other: Any, /) -> bool: ... - - -T = TypeVar("T", bound=Comparable) - - -def insertion_sort(collection: MutableSequence[T]) -> MutableSequence[T]: - """A pure Python implementation of the insertion sort algorithm - - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - Examples: - >>> insertion_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> insertion_sort([]) == sorted([]) - True - >>> insertion_sort([-2, -5, -45]) == sorted([-2, -5, -45]) - True - >>> insertion_sort(['d', 'a', 'b', 'e', 'c']) == sorted(['d', 'a', 'b', 'e', 'c']) - True - >>> import random - >>> collection = random.sample(range(-50, 50), 100) - >>> insertion_sort(collection) == sorted(collection) - True - >>> import string - >>> collection = random.choices(string.ascii_letters + string.digits, k=100) - >>> insertion_sort(collection) == sorted(collection) - True - """ - - for insert_index in range(1, len(collection)): - insert_value = collection[insert_index] - while insert_index > 0 and insert_value < collection[insert_index - 1]: - collection[insert_index] = collection[insert_index - 1] - insert_index -= 1 - collection[insert_index] = insert_value - return collection - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(f"{insertion_sort(unsorted) = }") diff --git a/sorts/intro_sort.py b/sorts/intro_sort.py deleted file mode 100644 index 1184b381b05d..000000000000 --- a/sorts/intro_sort.py +++ /dev/null @@ -1,192 +0,0 @@ -""" -Introspective Sort is a hybrid sort (Quick Sort + Heap Sort + Insertion Sort) -if the size of the list is under 16, use insertion sort -https://en.wikipedia.org/wiki/Introsort -""" - -import math - - -def insertion_sort(array: list, start: int = 0, end: int = 0) -> list: - """ - >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12] - >>> insertion_sort(array, 0, len(array)) - [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79] - >>> array = [21, 15, 11, 45, -2, -11, 46] - >>> insertion_sort(array, 0, len(array)) - [-11, -2, 11, 15, 21, 45, 46] - >>> array = [-2, 0, 89, 11, 48, 79, 12] - >>> insertion_sort(array, 0, len(array)) - [-2, 0, 11, 12, 48, 79, 89] - >>> array = ['a', 'z', 'd', 'p', 'v', 'l', 'o', 'o'] - >>> insertion_sort(array, 0, len(array)) - ['a', 'd', 'l', 'o', 'o', 'p', 'v', 'z'] - >>> array = [73.568, 73.56, -45.03, 1.7, 0, 89.45] - >>> insertion_sort(array, 0, len(array)) - [-45.03, 0, 1.7, 73.56, 73.568, 89.45] - """ - end = end or len(array) - for i in range(start, end): - temp_index = i - temp_index_value = array[i] - while temp_index != start and temp_index_value < array[temp_index - 1]: - array[temp_index] = array[temp_index - 1] - temp_index -= 1 - array[temp_index] = temp_index_value - return array - - -def heapify(array: list, index: int, heap_size: int) -> None: # Max Heap - """ - >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12] - >>> heapify(array, len(array) // 2, len(array)) - """ - largest = index - left_index = 2 * index + 1 # Left Node - right_index = 2 * index + 2 # Right Node - - if left_index < heap_size and array[largest] < array[left_index]: - largest = left_index - - if right_index < heap_size and array[largest] < array[right_index]: - largest = right_index - - if largest != index: - array[index], array[largest] = array[largest], array[index] - heapify(array, largest, heap_size) - - -def heap_sort(array: list) -> list: - """ - >>> heap_sort([4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]) - [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79] - >>> heap_sort([-2, -11, 0, 0, 0, 87, 45, -69, 78, 12, 10, 103, 89, 52]) - [-69, -11, -2, 0, 0, 0, 10, 12, 45, 52, 78, 87, 89, 103] - >>> heap_sort(['b', 'd', 'e', 'f', 'g', 'p', 'x', 'z', 'b', 's', 'e', 'u', 'v']) - ['b', 'b', 'd', 'e', 'e', 'f', 'g', 'p', 's', 'u', 'v', 'x', 'z'] - >>> heap_sort([6.2, -45.54, 8465.20, 758.56, -457.0, 0, 1, 2.879, 1.7, 11.7]) - [-457.0, -45.54, 0, 1, 1.7, 2.879, 6.2, 11.7, 758.56, 8465.2] - """ - n = len(array) - - for i in range(n // 2, -1, -1): - heapify(array, i, n) - - for i in range(n - 1, 0, -1): - array[i], array[0] = array[0], array[i] - heapify(array, 0, i) - - return array - - -def median_of_3( - array: list, first_index: int, middle_index: int, last_index: int -) -> int: - """ - >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12] - >>> median_of_3(array, 0, ((len(array) - 0) // 2) + 1, len(array) - 1) - 12 - >>> array = [13, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12] - >>> median_of_3(array, 0, ((len(array) - 0) // 2) + 1, len(array) - 1) - 13 - >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 15, 14, 27, 79, 23, 45, 14, 16] - >>> median_of_3(array, 0, ((len(array) - 0) // 2) + 1, len(array) - 1) - 14 - """ - if (array[first_index] > array[middle_index]) != ( - array[first_index] > array[last_index] - ): - return array[first_index] - elif (array[middle_index] > array[first_index]) != ( - array[middle_index] > array[last_index] - ): - return array[middle_index] - else: - return array[last_index] - - -def partition(array: list, low: int, high: int, pivot: int) -> int: - """ - >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12] - >>> partition(array, 0, len(array), 12) - 8 - >>> array = [21, 15, 11, 45, -2, -11, 46] - >>> partition(array, 0, len(array), 15) - 3 - >>> array = ['a', 'z', 'd', 'p', 'v', 'l', 'o', 'o'] - >>> partition(array, 0, len(array), 'p') - 5 - >>> array = [6.2, -45.54, 8465.20, 758.56, -457.0, 0, 1, 2.879, 1.7, 11.7] - >>> partition(array, 0, len(array), 2.879) - 6 - """ - i = low - j = high - while True: - while array[i] < pivot: - i += 1 - j -= 1 - while pivot < array[j]: - j -= 1 - if i >= j: - return i - array[i], array[j] = array[j], array[i] - i += 1 - - -def sort(array: list) -> list: - """ - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - Examples: - >>> sort([4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]) - [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79] - >>> sort([-1, -5, -3, -13, -44]) - [-44, -13, -5, -3, -1] - >>> sort([]) - [] - >>> sort([5]) - [5] - >>> sort([-3, 0, -7, 6, 23, -34]) - [-34, -7, -3, 0, 6, 23] - >>> sort([1.7, 1.0, 3.3, 2.1, 0.3 ]) - [0.3, 1.0, 1.7, 2.1, 3.3] - >>> sort(['d', 'a', 'b', 'e', 'c']) - ['a', 'b', 'c', 'd', 'e'] - """ - if len(array) == 0: - return array - max_depth = 2 * math.ceil(math.log2(len(array))) - size_threshold = 16 - return intro_sort(array, 0, len(array), size_threshold, max_depth) - - -def intro_sort( - array: list, start: int, end: int, size_threshold: int, max_depth: int -) -> list: - """ - >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12] - >>> max_depth = 2 * math.ceil(math.log2(len(array))) - >>> intro_sort(array, 0, len(array), 16, max_depth) - [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79] - """ - while end - start > size_threshold: - if max_depth == 0: - return heap_sort(array) - max_depth -= 1 - pivot = median_of_3(array, start, start + ((end - start) // 2) + 1, end - 1) - p = partition(array, start, end, pivot) - intro_sort(array, p, end, size_threshold, max_depth) - end = p - return insertion_sort(array, start, end) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - user_input = input("Enter numbers separated by a comma : ").strip() - unsorted = [float(item) for item in user_input.split(",")] - print(f"{sort(unsorted) = }") diff --git a/sorts/iterative_merge_sort.py b/sorts/iterative_merge_sort.py deleted file mode 100644 index 327974fa61ae..000000000000 --- a/sorts/iterative_merge_sort.py +++ /dev/null @@ -1,93 +0,0 @@ -""" -Implementation of iterative merge sort in Python -Author: Aman Gupta - -For doctests run following command: -python3 -m doctest -v iterative_merge_sort.py - -For manual testing run: -python3 iterative_merge_sort.py -""" - -from __future__ import annotations - - -def merge(input_list: list, low: int, mid: int, high: int) -> list: - """ - sorting left-half and right-half individually - then merging them into result - """ - result = [] - left, right = input_list[low:mid], input_list[mid : high + 1] - while left and right: - result.append((left if left[0] <= right[0] else right).pop(0)) - input_list[low : high + 1] = result + left + right - return input_list - - -# iteration over the unsorted list -def iter_merge_sort(input_list: list) -> list: - """ - Return a sorted copy of the input list - - >>> iter_merge_sort([5, 9, 8, 7, 1, 2, 7]) - [1, 2, 5, 7, 7, 8, 9] - >>> iter_merge_sort([1]) - [1] - >>> iter_merge_sort([2, 1]) - [1, 2] - >>> iter_merge_sort([2, 1, 3]) - [1, 2, 3] - >>> iter_merge_sort([4, 3, 2, 1]) - [1, 2, 3, 4] - >>> iter_merge_sort([5, 4, 3, 2, 1]) - [1, 2, 3, 4, 5] - >>> iter_merge_sort(['c', 'b', 'a']) - ['a', 'b', 'c'] - >>> iter_merge_sort([0.3, 0.2, 0.1]) - [0.1, 0.2, 0.3] - >>> iter_merge_sort(['dep', 'dang', 'trai']) - ['dang', 'dep', 'trai'] - >>> iter_merge_sort([6]) - [6] - >>> iter_merge_sort([]) - [] - >>> iter_merge_sort([-2, -9, -1, -4]) - [-9, -4, -2, -1] - >>> iter_merge_sort([1.1, 1, 0.0, -1, -1.1]) - [-1.1, -1, 0.0, 1, 1.1] - >>> iter_merge_sort(['c', 'b', 'a']) - ['a', 'b', 'c'] - >>> iter_merge_sort('cba') - ['a', 'b', 'c'] - """ - if len(input_list) <= 1: - return input_list - input_list = list(input_list) - - # iteration for two-way merging - p = 2 - while p <= len(input_list): - # getting low, high and middle value for merge-sort of single list - for i in range(0, len(input_list), p): - low = i - high = i + p - 1 - mid = (low + high + 1) // 2 - input_list = merge(input_list, low, mid, high) - # final merge of last two parts - if p * 2 >= len(input_list): - mid = i - input_list = merge(input_list, 0, mid, len(input_list) - 1) - break - p *= 2 - - return input_list - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - if user_input == "": - unsorted = [] - else: - unsorted = [int(item.strip()) for item in user_input.split(",")] - print(iter_merge_sort(unsorted)) diff --git a/sorts/merge_insertion_sort.py b/sorts/merge_insertion_sort.py deleted file mode 100644 index 4a5bdea0a33f..000000000000 --- a/sorts/merge_insertion_sort.py +++ /dev/null @@ -1,200 +0,0 @@ -""" -This is a pure Python implementation of the merge-insertion sort algorithm -Source: https://en.wikipedia.org/wiki/Merge-insertion_sort - -For doctests run following command: -python3 -m doctest -v merge_insertion_sort.py -or -python -m doctest -v merge_insertion_sort.py - -For manual testing run: -python3 merge_insertion_sort.py -""" - -from __future__ import annotations - - -def binary_search_insertion(sorted_list, item): - """ - >>> binary_search_insertion([1, 2, 7, 9, 10], 4) - [1, 2, 4, 7, 9, 10] - """ - left = 0 - right = len(sorted_list) - 1 - while left <= right: - middle = (left + right) // 2 - if left == right: - if sorted_list[middle] < item: - left = middle + 1 - break - elif sorted_list[middle] < item: - left = middle + 1 - else: - right = middle - 1 - sorted_list.insert(left, item) - return sorted_list - - -def merge(left, right): - """ - >>> merge([[1, 6], [9, 10]], [[2, 3], [4, 5], [7, 8]]) - [[1, 6], [2, 3], [4, 5], [7, 8], [9, 10]] - """ - result = [] - while left and right: - if left[0][0] < right[0][0]: - result.append(left.pop(0)) - else: - result.append(right.pop(0)) - return result + left + right - - -def sortlist_2d(list_2d): - """ - >>> sortlist_2d([[9, 10], [1, 6], [7, 8], [2, 3], [4, 5]]) - [[1, 6], [2, 3], [4, 5], [7, 8], [9, 10]] - """ - length = len(list_2d) - if length <= 1: - return list_2d - middle = length // 2 - return merge(sortlist_2d(list_2d[:middle]), sortlist_2d(list_2d[middle:])) - - -def merge_insertion_sort(collection: list[int]) -> list[int]: - """Pure implementation of merge-insertion sort algorithm in Python - - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - Examples: - >>> merge_insertion_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - - >>> merge_insertion_sort([99]) - [99] - - >>> merge_insertion_sort([-2, -5, -45]) - [-45, -5, -2] - - Testing with all permutations on range(0,5): - >>> import itertools - >>> permutations = list(itertools.permutations([0, 1, 2, 3, 4])) - >>> all(merge_insertion_sort(p) == [0, 1, 2, 3, 4] for p in permutations) - True - """ - - if len(collection) <= 1: - return collection - - """ - Group the items into two pairs, and leave one element if there is a last odd item. - - Example: [999, 100, 75, 40, 10000] - -> [999, 100], [75, 40]. Leave 10000. - """ - two_paired_list = [] - has_last_odd_item = False - for i in range(0, len(collection), 2): - if i == len(collection) - 1: - has_last_odd_item = True - else: - """ - Sort two-pairs in each groups. - - Example: [999, 100], [75, 40] - -> [100, 999], [40, 75] - """ - if collection[i] < collection[i + 1]: - two_paired_list.append([collection[i], collection[i + 1]]) - else: - two_paired_list.append([collection[i + 1], collection[i]]) - - """ - Sort two_paired_list. - - Example: [100, 999], [40, 75] - -> [40, 75], [100, 999] - """ - sorted_list_2d = sortlist_2d(two_paired_list) - - """ - 40 < 100 is sure because it has already been sorted. - Generate the sorted_list of them so that you can avoid unnecessary comparison. - - Example: - group0 group1 - 40 100 - 75 999 - -> - group0 group1 - [40, 100] - 75 999 - """ - result = [i[0] for i in sorted_list_2d] - - """ - 100 < 999 is sure because it has already been sorted. - Put 999 in last of the sorted_list so that you can avoid unnecessary comparison. - - Example: - group0 group1 - [40, 100] - 75 999 - -> - group0 group1 - [40, 100, 999] - 75 - """ - result.append(sorted_list_2d[-1][1]) - - """ - Insert the last odd item left if there is. - - Example: - group0 group1 - [40, 100, 999] - 75 - -> - group0 group1 - [40, 100, 999, 10000] - 75 - """ - if has_last_odd_item: - pivot = collection[-1] - result = binary_search_insertion(result, pivot) - - """ - Insert the remaining items. - In this case, 40 < 75 is sure because it has already been sorted. - Therefore, you only need to insert 75 into [100, 999, 10000], - so that you can avoid unnecessary comparison. - - Example: - group0 group1 - [40, 100, 999, 10000] - ^ You don't need to compare with this as 40 < 75 is already sure. - 75 - -> - [40, 75, 100, 999, 10000] - """ - is_last_odd_item_inserted_before_this_index = False - for i in range(len(sorted_list_2d) - 1): - if result[i] == collection[-1] and has_last_odd_item: - is_last_odd_item_inserted_before_this_index = True - pivot = sorted_list_2d[i][1] - # If last_odd_item is inserted before the item's index, - # you should forward index one more. - if is_last_odd_item_inserted_before_this_index: - result = result[: i + 2] + binary_search_insertion(result[i + 2 :], pivot) - else: - result = result[: i + 1] + binary_search_insertion(result[i + 1 :], pivot) - - return result - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(merge_insertion_sort(unsorted)) diff --git a/sorts/merge_sort.py b/sorts/merge_sort.py deleted file mode 100644 index 0628b848b794..000000000000 --- a/sorts/merge_sort.py +++ /dev/null @@ -1,63 +0,0 @@ -""" -This is a pure Python implementation of the merge sort algorithm. - -For doctests run following command: -python -m doctest -v merge_sort.py -or -python3 -m doctest -v merge_sort.py -For manual testing run: -python merge_sort.py -""" - - -def merge_sort(collection: list) -> list: - """ - Sorts a list using the merge sort algorithm. - - :param collection: A mutable ordered collection with comparable items. - :return: The same collection ordered in ascending order. - - Time Complexity: O(n log n) - - Examples: - >>> merge_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> merge_sort([]) - [] - >>> merge_sort([-2, -5, -45]) - [-45, -5, -2] - """ - - def merge(left: list, right: list) -> list: - """ - Merge two sorted lists into a single sorted list. - - :param left: Left collection - :param right: Right collection - :return: Merged result - """ - result = [] - while left and right: - result.append(left.pop(0) if left[0] <= right[0] else right.pop(0)) - result.extend(left) - result.extend(right) - return result - - if len(collection) <= 1: - return collection - mid_index = len(collection) // 2 - return merge(merge_sort(collection[:mid_index]), merge_sort(collection[mid_index:])) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - try: - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - sorted_list = merge_sort(unsorted) - print(*sorted_list, sep=",") - except ValueError: - print("Invalid input. Please enter valid integers separated by commas.") diff --git a/sorts/msd_radix_sort.py b/sorts/msd_radix_sort.py deleted file mode 100644 index 6aba4263663a..000000000000 --- a/sorts/msd_radix_sort.py +++ /dev/null @@ -1,161 +0,0 @@ -""" -Python implementation of the MSD radix sort algorithm. -It used the binary representation of the integers to sort -them. -https://en.wikipedia.org/wiki/Radix_sort -""" - -from __future__ import annotations - - -def msd_radix_sort(list_of_ints: list[int]) -> list[int]: - """ - Implementation of the MSD radix sort algorithm. Only works - with positive integers - :param list_of_ints: A list of integers - :return: Returns the sorted list - >>> msd_radix_sort([40, 12, 1, 100, 4]) - [1, 4, 12, 40, 100] - >>> msd_radix_sort([]) - [] - >>> msd_radix_sort([123, 345, 123, 80]) - [80, 123, 123, 345] - >>> msd_radix_sort([1209, 834598, 1, 540402, 45]) - [1, 45, 1209, 540402, 834598] - >>> msd_radix_sort([-1, 34, 45]) - Traceback (most recent call last): - ... - ValueError: All numbers must be positive - """ - if not list_of_ints: - return [] - - if min(list_of_ints) < 0: - raise ValueError("All numbers must be positive") - - most_bits = max(len(bin(x)[2:]) for x in list_of_ints) - return _msd_radix_sort(list_of_ints, most_bits) - - -def _msd_radix_sort(list_of_ints: list[int], bit_position: int) -> list[int]: - """ - Sort the given list based on the bit at bit_position. Numbers with a - 0 at that position will be at the start of the list, numbers with a - 1 at the end. - :param list_of_ints: A list of integers - :param bit_position: the position of the bit that gets compared - :return: Returns a partially sorted list - >>> _msd_radix_sort([45, 2, 32], 1) - [2, 32, 45] - >>> _msd_radix_sort([10, 4, 12], 2) - [4, 12, 10] - """ - if bit_position == 0 or len(list_of_ints) in [0, 1]: - return list_of_ints - - zeros = [] - ones = [] - # Split numbers based on bit at bit_position from the right - for number in list_of_ints: - if (number >> (bit_position - 1)) & 1: - # number has a one at bit bit_position - ones.append(number) - else: - # number has a zero at bit bit_position - zeros.append(number) - - # recursively split both lists further - zeros = _msd_radix_sort(zeros, bit_position - 1) - ones = _msd_radix_sort(ones, bit_position - 1) - - # recombine lists - res = zeros - res.extend(ones) - - return res - - -def msd_radix_sort_inplace(list_of_ints: list[int]): - """ - Inplace implementation of the MSD radix sort algorithm. - Sorts based on the binary representation of the integers. - >>> lst = [1, 345, 23, 89, 0, 3] - >>> msd_radix_sort_inplace(lst) - >>> lst == sorted(lst) - True - >>> lst = [1, 43, 0, 0, 0, 24, 3, 3] - >>> msd_radix_sort_inplace(lst) - >>> lst == sorted(lst) - True - >>> lst = [] - >>> msd_radix_sort_inplace(lst) - >>> lst == [] - True - >>> lst = [-1, 34, 23, 4, -42] - >>> msd_radix_sort_inplace(lst) - Traceback (most recent call last): - ... - ValueError: All numbers must be positive - """ - - length = len(list_of_ints) - if not list_of_ints or length == 1: - return - - if min(list_of_ints) < 0: - raise ValueError("All numbers must be positive") - - most_bits = max(len(bin(x)[2:]) for x in list_of_ints) - _msd_radix_sort_inplace(list_of_ints, most_bits, 0, length) - - -def _msd_radix_sort_inplace( - list_of_ints: list[int], bit_position: int, begin_index: int, end_index: int -): - """ - Sort the given list based on the bit at bit_position. Numbers with a - 0 at that position will be at the start of the list, numbers with a - 1 at the end. - >>> lst = [45, 2, 32, 24, 534, 2932] - >>> _msd_radix_sort_inplace(lst, 1, 0, 3) - >>> lst == [32, 2, 45, 24, 534, 2932] - True - >>> lst = [0, 2, 1, 3, 12, 10, 4, 90, 54, 2323, 756] - >>> _msd_radix_sort_inplace(lst, 2, 4, 7) - >>> lst == [0, 2, 1, 3, 12, 4, 10, 90, 54, 2323, 756] - True - """ - if bit_position == 0 or end_index - begin_index <= 1: - return - - bit_position -= 1 - - i = begin_index - j = end_index - 1 - while i <= j: - changed = False - if not (list_of_ints[i] >> bit_position) & 1: - # found zero at the beginning - i += 1 - changed = True - if (list_of_ints[j] >> bit_position) & 1: - # found one at the end - j -= 1 - changed = True - - if changed: - continue - - list_of_ints[i], list_of_ints[j] = list_of_ints[j], list_of_ints[i] - j -= 1 - if j != i: - i += 1 - - _msd_radix_sort_inplace(list_of_ints, bit_position, begin_index, i) - _msd_radix_sort_inplace(list_of_ints, bit_position, i, end_index) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/sorts/natural_sort.py b/sorts/natural_sort.py deleted file mode 100644 index 001ff2cf5b41..000000000000 --- a/sorts/natural_sort.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import annotations - -import re - - -def natural_sort(input_list: list[str]) -> list[str]: - """ - Sort the given list of strings in the way that humans expect. - - The normal Python sort algorithm sorts lexicographically, - so you might not get the results that you expect... - - >>> example1 = ['2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in'] - >>> sorted(example1) - ['1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '2 ft 7 in', '7 ft 6 in'] - >>> # The natural sort algorithm sort based on meaning and not computer code point. - >>> natural_sort(example1) - ['1 ft 5 in', '2 ft 7 in', '2 ft 11 in', '7 ft 6 in', '10 ft 2 in'] - - >>> example2 = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9'] - >>> sorted(example2) - ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9'] - >>> natural_sort(example2) - ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13'] - """ - - def alphanum_key(key): - return [int(s) if s.isdigit() else s.lower() for s in re.split("([0-9]+)", key)] - - return sorted(input_list, key=alphanum_key) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/sorts/normal_distribution_quick_sort.md b/sorts/normal_distribution_quick_sort.md deleted file mode 100644 index 27aca340fb3b..000000000000 --- a/sorts/normal_distribution_quick_sort.md +++ /dev/null @@ -1,56 +0,0 @@ -# Normal Distribution QuickSort - -QuickSort Algorithm where the pivot element is chosen randomly between first and last elements of the array, and the array elements are taken from Standard Normal Distribution. - -## Array elements - -The array elements are taken from a Standard Normal Distribution, having mean = 0 and standard deviation = 1. - -### The code - -```python - ->>> import numpy as np ->>> from tempfile import TemporaryFile ->>> outfile = TemporaryFile() ->>> p = 100 # 100 elements are to be sorted ->>> mu, sigma = 0, 1 # mean and standard deviation ->>> X = np.random.normal(mu, sigma, p) ->>> np.save(outfile, X) ->>> 'The array is' ->>> X - -``` - ------- - -#### The distribution of the array elements - -```python ->>> mu, sigma = 0, 1 # mean and standard deviation ->>> s = np.random.normal(mu, sigma, p) ->>> count, bins, ignored = plt.hist(s, 30, normed=True) ->>> plt.plot(bins , 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=2, color='r') ->>> plt.show() -``` - ------- - - ------- - -## Comparing the numbers of comparisons - -We can plot the function for Checking 'The Number of Comparisons' taking place between Normal Distribution QuickSort and Ordinary QuickSort: - -```python ->>> import matplotlib.pyplot as plt - - # Normal Distribution QuickSort is red ->>> plt.plot([1,2,4,16,32,64,128,256,512,1024,2048],[1,1,6,15,43,136,340,800,2156,6821,16325],linewidth=2, color='r') - - # Ordinary QuickSort is green ->>> plt.plot([1,2,4,16,32,64,128,256,512,1024,2048],[1,1,4,16,67,122,362,949,2131,5086,12866],linewidth=2, color='g') - ->>> plt.show() -``` diff --git a/sorts/odd_even_sort.py b/sorts/odd_even_sort.py deleted file mode 100644 index 7dfe03054bc3..000000000000 --- a/sorts/odd_even_sort.py +++ /dev/null @@ -1,51 +0,0 @@ -""" -Odd even sort implementation. - -https://en.wikipedia.org/wiki/Odd%E2%80%93even_sort -""" - - -def odd_even_sort(input_list: list) -> list: - """ - Sort input with odd even sort. - - This algorithm uses the same idea of bubblesort, - but by first dividing in two phase (odd and even). - Originally developed for use on parallel processors - with local interconnections. - :param collection: mutable ordered sequence of elements - :return: same collection in ascending order - Examples: - >>> odd_even_sort([5 , 4 ,3 ,2 ,1]) - [1, 2, 3, 4, 5] - >>> odd_even_sort([]) - [] - >>> odd_even_sort([-10 ,-1 ,10 ,2]) - [-10, -1, 2, 10] - >>> odd_even_sort([1 ,2 ,3 ,4]) - [1, 2, 3, 4] - """ - is_sorted = False - while is_sorted is False: # Until all the indices are traversed keep looping - is_sorted = True - for i in range(0, len(input_list) - 1, 2): # iterating over all even indices - if input_list[i] > input_list[i + 1]: - input_list[i], input_list[i + 1] = input_list[i + 1], input_list[i] - # swapping if elements not in order - is_sorted = False - - for i in range(1, len(input_list) - 1, 2): # iterating over all odd indices - if input_list[i] > input_list[i + 1]: - input_list[i], input_list[i + 1] = input_list[i + 1], input_list[i] - # swapping if elements not in order - is_sorted = False - return input_list - - -if __name__ == "__main__": - print("Enter list to be sorted") - input_list = [int(x) for x in input().split()] - # inputing elements of the list in one line - sorted_list = odd_even_sort(input_list) - print("The sorted list is") - print(sorted_list) diff --git a/sorts/odd_even_transposition_parallel.py b/sorts/odd_even_transposition_parallel.py deleted file mode 100644 index 5d4e09b211c0..000000000000 --- a/sorts/odd_even_transposition_parallel.py +++ /dev/null @@ -1,192 +0,0 @@ -""" -This is an implementation of odd-even transposition sort. - -It works by performing a series of parallel swaps between odd and even pairs of -variables in the list. - -This implementation represents each variable in the list with a process and -each process communicates with its neighboring processes in the list to perform -comparisons. -They are synchronized with locks and message passing but other forms of -synchronization could be used. -""" - -import multiprocessing as mp - -# lock used to ensure that two processes do not access a pipe at the same time -# NOTE This breaks testing on build runner. May work better locally -# process_lock = mp.Lock() - -""" -The function run by the processes that sorts the list - -position = the position in the list the process represents, used to know which - neighbor we pass our value to -value = the initial value at list[position] -LSend, RSend = the pipes we use to send to our left and right neighbors -LRcv, RRcv = the pipes we use to receive from our left and right neighbors -resultPipe = the pipe used to send results back to main -""" - - -def oe_process( - position, - value, - l_send, - r_send, - lr_cv, - rr_cv, - result_pipe, - multiprocessing_context, -): - process_lock = multiprocessing_context.Lock() - - # we perform n swaps since after n swaps we know we are sorted - # we *could* stop early if we are sorted already, but it takes as long to - # find out we are sorted as it does to sort the list with this algorithm - for i in range(10): - if (i + position) % 2 == 0 and r_send is not None: - # send your value to your right neighbor - with process_lock: - r_send[1].send(value) - - # receive your right neighbor's value - with process_lock: - temp = rr_cv[0].recv() - - # take the lower value since you are on the left - value = min(value, temp) - elif (i + position) % 2 != 0 and l_send is not None: - # send your value to your left neighbor - with process_lock: - l_send[1].send(value) - - # receive your left neighbor's value - with process_lock: - temp = lr_cv[0].recv() - - # take the higher value since you are on the right - value = max(value, temp) - # after all swaps are performed, send the values back to main - result_pipe[1].send(value) - - -""" -the function which creates the processes that perform the parallel swaps - -arr = the list to be sorted -""" - - -def odd_even_transposition(arr): - """ - >>> odd_even_transposition(list(range(10)[::-1])) == sorted(list(range(10)[::-1])) - True - >>> odd_even_transposition(["a", "x", "c"]) == sorted(["x", "a", "c"]) - True - >>> odd_even_transposition([1.9, 42.0, 2.8]) == sorted([1.9, 42.0, 2.8]) - True - >>> odd_even_transposition([False, True, False]) == sorted([False, False, True]) - True - >>> odd_even_transposition([1, 32.0, 9]) == sorted([False, False, True]) - False - >>> odd_even_transposition([1, 32.0, 9]) == sorted([1.0, 32, 9.0]) - True - >>> unsorted_list = [-442, -98, -554, 266, -491, 985, -53, -529, 82, -429] - >>> odd_even_transposition(unsorted_list) == sorted(unsorted_list) - True - >>> unsorted_list = [-442, -98, -554, 266, -491, 985, -53, -529, 82, -429] - >>> odd_even_transposition(unsorted_list) == sorted(unsorted_list + [1]) - False - """ - # spawn method is considered safer than fork - multiprocessing_context = mp.get_context("spawn") - - process_array_ = [] - result_pipe = [] - # initialize the list of pipes where the values will be retrieved - for _ in arr: - result_pipe.append(multiprocessing_context.Pipe()) - # creates the processes - # the first and last process only have one neighbor so they are made outside - # of the loop - temp_rs = multiprocessing_context.Pipe() - temp_rr = multiprocessing_context.Pipe() - process_array_.append( - multiprocessing_context.Process( - target=oe_process, - args=( - 0, - arr[0], - None, - temp_rs, - None, - temp_rr, - result_pipe[0], - multiprocessing_context, - ), - ) - ) - temp_lr = temp_rs - temp_ls = temp_rr - - for i in range(1, len(arr) - 1): - temp_rs = multiprocessing_context.Pipe() - temp_rr = multiprocessing_context.Pipe() - process_array_.append( - multiprocessing_context.Process( - target=oe_process, - args=( - i, - arr[i], - temp_ls, - temp_rs, - temp_lr, - temp_rr, - result_pipe[i], - multiprocessing_context, - ), - ) - ) - temp_lr = temp_rs - temp_ls = temp_rr - - process_array_.append( - multiprocessing_context.Process( - target=oe_process, - args=( - len(arr) - 1, - arr[len(arr) - 1], - temp_ls, - None, - temp_lr, - None, - result_pipe[len(arr) - 1], - multiprocessing_context, - ), - ) - ) - - # start the processes - for p in process_array_: - p.start() - - # wait for the processes to end and write their values to the list - for p in range(len(result_pipe)): - arr[p] = result_pipe[p][0].recv() - process_array_[p].join() - return arr - - -# creates a reverse sorted list and sorts it -def main(): - arr = list(range(10, 0, -1)) - print("Initial List") - print(*arr) - arr = odd_even_transposition(arr) - print("Sorted List\n") - print(*arr) - - -if __name__ == "__main__": - main() diff --git a/sorts/odd_even_transposition_single_threaded.py b/sorts/odd_even_transposition_single_threaded.py deleted file mode 100644 index f6cf7fba2a71..000000000000 --- a/sorts/odd_even_transposition_single_threaded.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -Source: https://en.wikipedia.org/wiki/Odd%E2%80%93even_sort - -This is a non-parallelized implementation of odd-even transposition sort. - -Normally the swaps in each set happen simultaneously, without that the algorithm -is no better than bubble sort. -""" - - -def odd_even_transposition(arr: list) -> list: - """ - >>> odd_even_transposition([5, 4, 3, 2, 1]) - [1, 2, 3, 4, 5] - - >>> odd_even_transposition([13, 11, 18, 0, -1]) - [-1, 0, 11, 13, 18] - - >>> odd_even_transposition([-.1, 1.1, .1, -2.9]) - [-2.9, -0.1, 0.1, 1.1] - """ - arr_size = len(arr) - for _ in range(arr_size): - for i in range(_ % 2, arr_size - 1, 2): - if arr[i + 1] < arr[i]: - arr[i], arr[i + 1] = arr[i + 1], arr[i] - - return arr - - -if __name__ == "__main__": - arr = list(range(10, 0, -1)) - print(f"Original: {arr}. Sorted: {odd_even_transposition(arr)}") diff --git a/sorts/pancake_sort.py b/sorts/pancake_sort.py deleted file mode 100644 index e5d600738435..000000000000 --- a/sorts/pancake_sort.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -This is a pure Python implementation of the pancake sort algorithm -For doctests run following command: -python3 -m doctest -v pancake_sort.py -or -python -m doctest -v pancake_sort.py -For manual testing run: -python pancake_sort.py -""" - - -def pancake_sort(arr): - """Sort Array with Pancake Sort. - :param arr: Collection containing comparable items - :return: Collection ordered in ascending order of items - Examples: - >>> pancake_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> pancake_sort([]) - [] - >>> pancake_sort([-2, -5, -45]) - [-45, -5, -2] - """ - cur = len(arr) - while cur > 1: - # Find the maximum number in arr - mi = arr.index(max(arr[0:cur])) - # Reverse from 0 to mi - arr = arr[mi::-1] + arr[mi + 1 : len(arr)] - # Reverse whole list - arr = arr[cur - 1 :: -1] + arr[cur : len(arr)] - cur -= 1 - return arr - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(pancake_sort(unsorted)) diff --git a/sorts/patience_sort.py b/sorts/patience_sort.py deleted file mode 100644 index 63c2c8ffe99c..000000000000 --- a/sorts/patience_sort.py +++ /dev/null @@ -1,66 +0,0 @@ -from __future__ import annotations - -from bisect import bisect_left -from functools import total_ordering -from heapq import merge - -""" -A pure Python implementation of the patience sort algorithm - -For more information: https://en.wikipedia.org/wiki/Patience_sorting - -This algorithm is based on the card game patience - -For doctests run following command: -python3 -m doctest -v patience_sort.py - -For manual testing run: -python3 patience_sort.py -""" - - -@total_ordering -class Stack(list): - def __lt__(self, other): - return self[-1] < other[-1] - - def __eq__(self, other): - return self[-1] == other[-1] - - -def patience_sort(collection: list) -> list: - """A pure implementation of patience sort algorithm in Python - - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - Examples: - >>> patience_sort([1, 9, 5, 21, 17, 6]) - [1, 5, 6, 9, 17, 21] - - >>> patience_sort([]) - [] - - >>> patience_sort([-3, -17, -48]) - [-48, -17, -3] - """ - stacks: list[Stack] = [] - # sort into stacks - for element in collection: - new_stacks = Stack([element]) - i = bisect_left(stacks, new_stacks) - if i != len(stacks): - stacks[i].append(element) - else: - stacks.append(new_stacks) - - # use a heap-based merge to merge stack efficiently - collection[:] = merge(*(reversed(stack) for stack in stacks)) - return collection - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(patience_sort(unsorted)) diff --git a/sorts/pigeon_sort.py b/sorts/pigeon_sort.py deleted file mode 100644 index fdfa692f4680..000000000000 --- a/sorts/pigeon_sort.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -This is an implementation of Pigeon Hole Sort. -For doctests run following command: - -python3 -m doctest -v pigeon_sort.py -or -python -m doctest -v pigeon_sort.py - -For manual testing run: -python pigeon_sort.py -""" - -from __future__ import annotations - - -def pigeon_sort(array: list[int]) -> list[int]: - """ - Implementation of pigeon hole sort algorithm - :param array: Collection of comparable items - :return: Collection sorted in ascending order - >>> pigeon_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> pigeon_sort([]) - [] - >>> pigeon_sort([-2, -5, -45]) - [-45, -5, -2] - """ - if len(array) == 0: - return array - - _min, _max = min(array), max(array) - - # Compute the variables - holes_range = _max - _min + 1 - holes, holes_repeat = [0] * holes_range, [0] * holes_range - - # Make the sorting. - for i in array: - index = i - _min - holes[index] = i - holes_repeat[index] += 1 - - # Makes the array back by replacing the numbers. - index = 0 - for i in range(holes_range): - while holes_repeat[i] > 0: - array[index] = holes[i] - index += 1 - holes_repeat[i] -= 1 - - # Returns the sorted array. - return array - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - user_input = input("Enter numbers separated by comma:\n") - unsorted = [int(x) for x in user_input.split(",")] - print(pigeon_sort(unsorted)) diff --git a/sorts/pigeonhole_sort.py b/sorts/pigeonhole_sort.py deleted file mode 100644 index bfa9bb11b8a6..000000000000 --- a/sorts/pigeonhole_sort.py +++ /dev/null @@ -1,45 +0,0 @@ -# Python program to implement Pigeonhole Sorting in python - -# Algorithm for the pigeonhole sorting - - -def pigeonhole_sort(a): - """ - >>> a = [8, 3, 2, 7, 4, 6, 8] - >>> b = sorted(a) # a nondestructive sort - >>> pigeonhole_sort(a) # a destructive sort - >>> a == b - True - """ - # size of range of values in the list (ie, number of pigeonholes we need) - - min_val = min(a) # min() finds the minimum value - max_val = max(a) # max() finds the maximum value - - size = max_val - min_val + 1 # size is difference of max and min values plus one - - # list of pigeonholes of size equal to the variable size - holes = [0] * size - - # Populate the pigeonholes. - for x in a: - assert isinstance(x, int), "integers only please" - holes[x - min_val] += 1 - - # Putting the elements back into the array in an order. - i = 0 - for count in range(size): - while holes[count] > 0: - holes[count] -= 1 - a[i] = count + min_val - i += 1 - - -def main(): - a = [8, 3, 2, 7, 4, 6, 8] - pigeonhole_sort(a) - print("Sorted order is:", " ".join(a)) - - -if __name__ == "__main__": - main() diff --git a/sorts/quick_sort.py b/sorts/quick_sort.py deleted file mode 100644 index 374d52e75c81..000000000000 --- a/sorts/quick_sort.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -A pure Python implementation of the quick sort algorithm - -For doctests run following command: -python3 -m doctest -v quick_sort.py - -For manual testing run: -python3 quick_sort.py -""" - -from __future__ import annotations - -from random import randrange - - -def quick_sort(collection: list) -> list: - """A pure Python implementation of quicksort algorithm. - - :param collection: a mutable collection of comparable items - :return: the same collection ordered in ascending order - - Examples: - >>> quick_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> quick_sort([]) - [] - >>> quick_sort([-2, 5, 0, -45]) - [-45, -2, 0, 5] - """ - # Base case: if the collection has 0 or 1 elements, it is already sorted - if len(collection) < 2: - return collection - - # Randomly select a pivot index and remove the pivot element from the collection - pivot_index = randrange(len(collection)) - pivot = collection.pop(pivot_index) - - # Partition the remaining elements into two groups: lesser or equal, and greater - lesser = [item for item in collection if item <= pivot] - greater = [item for item in collection if item > pivot] - - # Recursively sort the lesser and greater groups, and combine with the pivot - return [*quick_sort(lesser), pivot, *quick_sort(greater)] - - -if __name__ == "__main__": - # Get user input and convert it into a list of integers - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - - # Print the result of sorting the user-provided list - print(quick_sort(unsorted)) diff --git a/sorts/quick_sort_3_partition.py b/sorts/quick_sort_3_partition.py deleted file mode 100644 index 1a6db6a364f0..000000000000 --- a/sorts/quick_sort_3_partition.py +++ /dev/null @@ -1,101 +0,0 @@ -def quick_sort_3partition(sorting: list, left: int, right: int) -> None: - if right <= left: - return - a = i = left - b = right - pivot = sorting[left] - while i <= b: - if sorting[i] < pivot: - sorting[a], sorting[i] = sorting[i], sorting[a] - a += 1 - i += 1 - elif sorting[i] > pivot: - sorting[b], sorting[i] = sorting[i], sorting[b] - b -= 1 - else: - i += 1 - quick_sort_3partition(sorting, left, a - 1) - quick_sort_3partition(sorting, b + 1, right) - - -def quick_sort_lomuto_partition(sorting: list, left: int, right: int) -> None: - """ - A pure Python implementation of quick sort algorithm(in-place) - with Lomuto partition scheme: - https://en.wikipedia.org/wiki/Quicksort#Lomuto_partition_scheme - - :param sorting: sort list - :param left: left endpoint of sorting - :param right: right endpoint of sorting - :return: None - - Examples: - >>> nums1 = [0, 5, 3, 1, 2] - >>> quick_sort_lomuto_partition(nums1, 0, 4) - >>> nums1 - [0, 1, 2, 3, 5] - >>> nums2 = [] - >>> quick_sort_lomuto_partition(nums2, 0, 0) - >>> nums2 - [] - >>> nums3 = [-2, 5, 0, -4] - >>> quick_sort_lomuto_partition(nums3, 0, 3) - >>> nums3 - [-4, -2, 0, 5] - """ - if left < right: - pivot_index = lomuto_partition(sorting, left, right) - quick_sort_lomuto_partition(sorting, left, pivot_index - 1) - quick_sort_lomuto_partition(sorting, pivot_index + 1, right) - - -def lomuto_partition(sorting: list, left: int, right: int) -> int: - """ - Example: - >>> lomuto_partition([1,5,7,6], 0, 3) - 2 - """ - pivot = sorting[right] - store_index = left - for i in range(left, right): - if sorting[i] < pivot: - sorting[store_index], sorting[i] = sorting[i], sorting[store_index] - store_index += 1 - sorting[right], sorting[store_index] = sorting[store_index], sorting[right] - return store_index - - -def three_way_radix_quicksort(sorting: list) -> list: - """ - Three-way radix quicksort: - https://en.wikipedia.org/wiki/Quicksort#Three-way_radix_quicksort - First divide the list into three parts. - Then recursively sort the "less than" and "greater than" partitions. - - >>> three_way_radix_quicksort([]) - [] - >>> three_way_radix_quicksort([1]) - [1] - >>> three_way_radix_quicksort([-5, -2, 1, -2, 0, 1]) - [-5, -2, -2, 0, 1, 1] - >>> three_way_radix_quicksort([1, 2, 5, 1, 2, 0, 0, 5, 2, -1]) - [-1, 0, 0, 1, 1, 2, 2, 2, 5, 5] - """ - if len(sorting) <= 1: - return sorting - return ( - three_way_radix_quicksort([i for i in sorting if i < sorting[0]]) - + [i for i in sorting if i == sorting[0]] - + three_way_radix_quicksort([i for i in sorting if i > sorting[0]]) - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod(verbose=True) - - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - quick_sort_3partition(unsorted, 0, len(unsorted) - 1) - print(unsorted) diff --git a/sorts/radix_sort.py b/sorts/radix_sort.py deleted file mode 100644 index 1dbf5fbd1365..000000000000 --- a/sorts/radix_sort.py +++ /dev/null @@ -1,48 +0,0 @@ -""" -This is a pure Python implementation of the radix sort algorithm - -Source: https://en.wikipedia.org/wiki/Radix_sort -""" - -from __future__ import annotations - -RADIX = 10 - - -def radix_sort(list_of_ints: list[int]) -> list[int]: - """ - Examples: - >>> radix_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - - >>> radix_sort(list(range(15))) == sorted(range(15)) - True - >>> radix_sort(list(range(14,-1,-1))) == sorted(range(15)) - True - >>> radix_sort([1,100,10,1000]) == sorted([1,100,10,1000]) - True - """ - placement = 1 - max_digit = max(list_of_ints) - while placement <= max_digit: - # declare and initialize empty buckets - buckets: list[list] = [[] for _ in range(RADIX)] - # split list_of_ints between the buckets - for i in list_of_ints: - tmp = int((i / placement) % RADIX) - buckets[tmp].append(i) - # put each buckets' contents into list_of_ints - a = 0 - for b in range(RADIX): - for i in buckets[b]: - list_of_ints[a] = i - a += 1 - # move to next - placement *= RADIX - return list_of_ints - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/sorts/recursive_insertion_sort.py b/sorts/recursive_insertion_sort.py deleted file mode 100644 index 93465350bee2..000000000000 --- a/sorts/recursive_insertion_sort.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -A recursive implementation of the insertion sort algorithm -""" - -from __future__ import annotations - - -def rec_insertion_sort(collection: list, n: int): - """ - Given a collection of numbers and its length, sorts the collections - in ascending order - - :param collection: A mutable collection of comparable elements - :param n: The length of collections - - >>> col = [1, 2, 1] - >>> rec_insertion_sort(col, len(col)) - >>> col - [1, 1, 2] - - >>> col = [2, 1, 0, -1, -2] - >>> rec_insertion_sort(col, len(col)) - >>> col - [-2, -1, 0, 1, 2] - - >>> col = [1] - >>> rec_insertion_sort(col, len(col)) - >>> col - [1] - """ - # Checks if the entire collection has been sorted - if len(collection) <= 1 or n <= 1: - return - - insert_next(collection, n - 1) - rec_insertion_sort(collection, n - 1) - - -def insert_next(collection: list, index: int): - """ - Inserts the '(index-1)th' element into place - - >>> col = [3, 2, 4, 2] - >>> insert_next(col, 1) - >>> col - [2, 3, 4, 2] - - >>> col = [3, 2, 3] - >>> insert_next(col, 2) - >>> col - [3, 2, 3] - - >>> col = [] - >>> insert_next(col, 1) - >>> col - [] - """ - # Checks order between adjacent elements - if index >= len(collection) or collection[index - 1] <= collection[index]: - return - - # Swaps adjacent elements since they are not in ascending order - collection[index - 1], collection[index] = ( - collection[index], - collection[index - 1], - ) - - insert_next(collection, index + 1) - - -if __name__ == "__main__": - numbers = input("Enter integers separated by spaces: ") - number_list: list[int] = [int(num) for num in numbers.split()] - rec_insertion_sort(number_list, len(number_list)) - print(number_list) diff --git a/sorts/recursive_mergesort_array.py b/sorts/recursive_mergesort_array.py deleted file mode 100644 index e02c02405565..000000000000 --- a/sorts/recursive_mergesort_array.py +++ /dev/null @@ -1,64 +0,0 @@ -"""A merge sort which accepts an array as input and recursively -splits an array in half and sorts and combines them. -""" - -"""https://en.wikipedia.org/wiki/Merge_sort """ - - -def merge(arr: list[int]) -> list[int]: - """Return a sorted array. - >>> merge([10,9,8,7,6,5,4,3,2,1]) - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - >>> merge([1,2,3,4,5,6,7,8,9,10]) - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - >>> merge([10,22,1,2,3,9,15,23]) - [1, 2, 3, 9, 10, 15, 22, 23] - >>> merge([100]) - [100] - >>> merge([]) - [] - """ - if len(arr) > 1: - middle_length = len(arr) // 2 # Finds the middle of the array - left_array = arr[ - :middle_length - ] # Creates an array of the elements in the first half. - right_array = arr[ - middle_length: - ] # Creates an array of the elements in the second half. - left_size = len(left_array) - right_size = len(right_array) - merge(left_array) # Starts sorting the left. - merge(right_array) # Starts sorting the right - left_index = 0 # Left Counter - right_index = 0 # Right Counter - index = 0 # Position Counter - while ( - left_index < left_size and right_index < right_size - ): # Runs until the lowers size of the left and right are sorted. - if left_array[left_index] < right_array[right_index]: - arr[index] = left_array[left_index] - left_index += 1 - else: - arr[index] = right_array[right_index] - right_index += 1 - index += 1 - while ( - left_index < left_size - ): # Adds the left over elements in the left half of the array - arr[index] = left_array[left_index] - left_index += 1 - index += 1 - while ( - right_index < right_size - ): # Adds the left over elements in the right half of the array - arr[index] = right_array[right_index] - right_index += 1 - index += 1 - return arr - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/sorts/recursive_quick_sort.py b/sorts/recursive_quick_sort.py deleted file mode 100644 index c29009aca673..000000000000 --- a/sorts/recursive_quick_sort.py +++ /dev/null @@ -1,22 +0,0 @@ -def quick_sort(data: list) -> list: - """ - >>> for data in ([2, 1, 0], [2.2, 1.1, 0], "quick_sort"): - ... quick_sort(data) == sorted(data) - True - True - True - """ - if len(data) <= 1: - return data - else: - return [ - *quick_sort([e for e in data[1:] if e <= data[0]]), - data[0], - *quick_sort([e for e in data[1:] if e > data[0]]), - ] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/sorts/selection_sort.py b/sorts/selection_sort.py deleted file mode 100644 index 506836b53e44..000000000000 --- a/sorts/selection_sort.py +++ /dev/null @@ -1,34 +0,0 @@ -def selection_sort(collection: list[int]) -> list[int]: - """ - Sorts a list in ascending order using the selection sort algorithm. - - :param collection: A list of integers to be sorted. - :return: The sorted list. - - Examples: - >>> selection_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - - >>> selection_sort([]) - [] - - >>> selection_sort([-2, -5, -45]) - [-45, -5, -2] - """ - - length = len(collection) - for i in range(length - 1): - min_index = i - for k in range(i + 1, length): - if collection[k] < collection[min_index]: - min_index = k - if min_index != i: - collection[i], collection[min_index] = collection[min_index], collection[i] - return collection - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - sorted_list = selection_sort(unsorted) - print("Sorted List:", sorted_list) diff --git a/sorts/shell_sort.py b/sorts/shell_sort.py deleted file mode 100644 index b65609c974b7..000000000000 --- a/sorts/shell_sort.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Shellsort#Pseudocode -""" - - -def shell_sort(collection: list[int]) -> list[int]: - """Pure implementation of shell sort algorithm in Python - :param collection: Some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - >>> shell_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - >>> shell_sort([]) - [] - >>> shell_sort([-2, -5, -45]) - [-45, -5, -2] - """ - # Marcin Ciura's gap sequence - - gaps = [701, 301, 132, 57, 23, 10, 4, 1] - for gap in gaps: - for i in range(gap, len(collection)): - insert_value = collection[i] - j = i - while j >= gap and collection[j - gap] > insert_value: - collection[j] = collection[j - gap] - j -= gap - if j != i: - collection[j] = insert_value - return collection - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(shell_sort(unsorted)) diff --git a/sorts/shrink_shell_sort.py b/sorts/shrink_shell_sort.py deleted file mode 100644 index f77b73d013a7..000000000000 --- a/sorts/shrink_shell_sort.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -This function implements the shell sort algorithm -which is slightly faster than its pure implementation. - -This shell sort is implemented using a gap, which -shrinks by a certain factor each iteration. In this -implementation, the gap is initially set to the -length of the collection. The gap is then reduced by -a certain factor (1.3) each iteration. - -For each iteration, the algorithm compares elements -that are a certain number of positions apart -(determined by the gap). If the element at the higher -position is greater than the element at the lower -position, the two elements are swapped. The process -is repeated until the gap is equal to 1. - -The reason this is more efficient is that it reduces -the number of comparisons that need to be made. By -using a smaller gap, the list is sorted more quickly. -""" - - -def shell_sort(collection: list) -> list: - """Implementation of shell sort algorithm in Python - :param collection: Some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending - - >>> shell_sort([3, 2, 1]) - [1, 2, 3] - >>> shell_sort([]) - [] - >>> shell_sort([1]) - [1] - """ - - # Choose an initial gap value - gap = len(collection) - - # Set the gap value to be decreased by a factor of 1.3 - # after each iteration - shrink = 1.3 - - # Continue sorting until the gap is 1 - while gap > 1: - # Decrease the gap value - gap = int(gap / shrink) - - # Sort the elements using insertion sort - for i in range(gap, len(collection)): - temp = collection[i] - j = i - while j >= gap and collection[j - gap] > temp: - collection[j] = collection[j - gap] - j -= gap - collection[j] = temp - - return collection - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/sorts/slowsort.py b/sorts/slowsort.py deleted file mode 100644 index 394e6eed50b1..000000000000 --- a/sorts/slowsort.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Slowsort is a sorting algorithm. It is of humorous nature and not useful. -It's based on the principle of multiply and surrender, -a tongue-in-cheek joke of divide and conquer. -It was published in 1986 by Andrei Broder and Jorge Stolfi -in their paper Pessimal Algorithms and Simplexity Analysis -(a parody of optimal algorithms and complexity analysis). - -Source: https://en.wikipedia.org/wiki/Slowsort -""" - -from __future__ import annotations - - -def slowsort(sequence: list, start: int | None = None, end: int | None = None) -> None: - """ - Sorts sequence[start..end] (both inclusive) in-place. - start defaults to 0 if not given. - end defaults to len(sequence) - 1 if not given. - It returns None. - >>> seq = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(seq); seq - [1, 2, 3, 4, 4, 5, 5, 6] - >>> seq = []; slowsort(seq); seq - [] - >>> seq = [2]; slowsort(seq); seq - [2] - >>> seq = [1, 2, 3, 4]; slowsort(seq); seq - [1, 2, 3, 4] - >>> seq = [4, 3, 2, 1]; slowsort(seq); seq - [1, 2, 3, 4] - >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, 2, 7); seq - [9, 8, 2, 3, 4, 5, 6, 7, 1, 0] - >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, end = 4); seq - [5, 6, 7, 8, 9, 4, 3, 2, 1, 0] - >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, start = 5); seq - [9, 8, 7, 6, 5, 0, 1, 2, 3, 4] - """ - if start is None: - start = 0 - - if end is None: - end = len(sequence) - 1 - - if start >= end: - return - - mid = (start + end) // 2 - - slowsort(sequence, start, mid) - slowsort(sequence, mid + 1, end) - - if sequence[end] < sequence[mid]: - sequence[end], sequence[mid] = sequence[mid], sequence[end] - - slowsort(sequence, start, end - 1) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/sorts/stooge_sort.py b/sorts/stooge_sort.py deleted file mode 100644 index 767c6a05924f..000000000000 --- a/sorts/stooge_sort.py +++ /dev/null @@ -1,39 +0,0 @@ -def stooge_sort(arr: list[int]) -> list[int]: - """ - Examples: - >>> stooge_sort([18.1, 0, -7.1, -1, 2, 2]) - [-7.1, -1, 0, 2, 2, 18.1] - - >>> stooge_sort([]) - [] - """ - stooge(arr, 0, len(arr) - 1) - return arr - - -def stooge(arr: list[int], i: int, h: int) -> None: - if i >= h: - return - - # If first element is smaller than the last then swap them - if arr[i] > arr[h]: - arr[i], arr[h] = arr[h], arr[i] - - # If there are more than 2 elements in the array - if h - i + 1 > 2: - t = (int)((h - i + 1) / 3) - - # Recursively sort first 2/3 elements - stooge(arr, i, (h - t)) - - # Recursively sort last 2/3 elements - stooge(arr, i + t, (h)) - - # Recursively sort first 2/3 elements - stooge(arr, i, (h - t)) - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(stooge_sort(unsorted)) diff --git a/sorts/strand_sort.py b/sorts/strand_sort.py deleted file mode 100644 index 4cadd396178e..000000000000 --- a/sorts/strand_sort.py +++ /dev/null @@ -1,51 +0,0 @@ -import operator - - -def strand_sort(arr: list, reverse: bool = False, solution: list | None = None) -> list: - """ - Strand sort implementation - source: https://en.wikipedia.org/wiki/Strand_sort - - :param arr: Unordered input list - :param reverse: Descent ordering flag - :param solution: Ordered items container - - Examples: - >>> strand_sort([4, 2, 5, 3, 0, 1]) - [0, 1, 2, 3, 4, 5] - - >>> strand_sort([4, 2, 5, 3, 0, 1], reverse=True) - [5, 4, 3, 2, 1, 0] - """ - _operator = operator.lt if reverse else operator.gt - solution = solution or [] - - if not arr: - return solution - - sublist = [arr.pop(0)] - for i, item in enumerate(arr): - if _operator(item, sublist[-1]): - sublist.append(item) - arr.pop(i) - - # merging sublist into solution list - if not solution: - solution.extend(sublist) - else: - while sublist: - item = sublist.pop(0) - for i, xx in enumerate(solution): - if not _operator(item, xx): - solution.insert(i, item) - break - else: - solution.append(item) - - strand_sort(arr, reverse, solution) - return solution - - -if __name__ == "__main__": - assert strand_sort([4, 3, 5, 1, 2]) == [1, 2, 3, 4, 5] - assert strand_sort([4, 3, 5, 1, 2], reverse=True) == [5, 4, 3, 2, 1] diff --git a/sorts/tim_sort.py b/sorts/tim_sort.py deleted file mode 100644 index 138f11c71bcc..000000000000 --- a/sorts/tim_sort.py +++ /dev/null @@ -1,82 +0,0 @@ -def binary_search(lst, item, start, end): - if start == end: - return start if lst[start] > item else start + 1 - if start > end: - return start - - mid = (start + end) // 2 - if lst[mid] < item: - return binary_search(lst, item, mid + 1, end) - elif lst[mid] > item: - return binary_search(lst, item, start, mid - 1) - else: - return mid - - -def insertion_sort(lst): - length = len(lst) - - for index in range(1, length): - value = lst[index] - pos = binary_search(lst, value, 0, index - 1) - lst = lst[:pos] + [value] + lst[pos:index] + lst[index + 1 :] - - return lst - - -def merge(left, right): - if not left: - return right - - if not right: - return left - - if left[0] < right[0]: - return [left[0], *merge(left[1:], right)] - - return [right[0], *merge(left, right[1:])] - - -def tim_sort(lst): - """ - >>> tim_sort("Python") - ['P', 'h', 'n', 'o', 't', 'y'] - >>> tim_sort((1.1, 1, 0, -1, -1.1)) - [-1.1, -1, 0, 1, 1.1] - >>> tim_sort(list(reversed(list(range(7))))) - [0, 1, 2, 3, 4, 5, 6] - >>> tim_sort([3, 2, 1]) == insertion_sort([3, 2, 1]) - True - >>> tim_sort([3, 2, 1]) == sorted([3, 2, 1]) - True - """ - length = len(lst) - runs, sorted_runs = [], [] - new_run = [lst[0]] - sorted_array = [] - i = 1 - while i < length: - if lst[i] < lst[i - 1]: - runs.append(new_run) - new_run = [lst[i]] - else: - new_run.append(lst[i]) - i += 1 - runs.append(new_run) - - for run in runs: - sorted_runs.append(insertion_sort(run)) - for run in sorted_runs: - sorted_array = merge(sorted_array, run) - - return sorted_array - - -def main(): - lst = [5, 9, 10, 3, -4, 5, 178, 92, 46, -18, 0, 7] - sorted_lst = tim_sort(lst) - print(sorted_lst) - - -if __name__ == "__main__": - main() diff --git a/sorts/topological_sort.py b/sorts/topological_sort.py deleted file mode 100644 index efce8165fcac..000000000000 --- a/sorts/topological_sort.py +++ /dev/null @@ -1,41 +0,0 @@ -"""Topological Sort.""" - -# a -# / \ -# b c -# / \ -# d e -edges: dict[str, list[str]] = { - "a": ["c", "b"], - "b": ["d", "e"], - "c": [], - "d": [], - "e": [], -} -vertices: list[str] = ["a", "b", "c", "d", "e"] - - -def topological_sort(start: str, visited: list[str], sort: list[str]) -> list[str]: - """Perform topological sort on a directed acyclic graph.""" - current = start - # add current to visited - visited.append(current) - neighbors = edges[current] - for neighbor in neighbors: - # if neighbor not in visited, visit - if neighbor not in visited: - sort = topological_sort(neighbor, visited, sort) - # if all neighbors visited add current to sort - sort.append(current) - # if all vertices haven't been visited select a new one to visit - if len(visited) != len(vertices): - for vertice in vertices: - if vertice not in visited: - sort = topological_sort(vertice, visited, sort) - # return sort - return sort - - -if __name__ == "__main__": - sort = topological_sort("a", [], []) - print(sort) diff --git a/sorts/tree_sort.py b/sorts/tree_sort.py deleted file mode 100644 index 056864957d4d..000000000000 --- a/sorts/tree_sort.py +++ /dev/null @@ -1,72 +0,0 @@ -""" -Tree_sort algorithm. - -Build a Binary Search Tree and then iterate thru it to get a sorted list. -""" - -from __future__ import annotations - -from collections.abc import Iterator -from dataclasses import dataclass - - -@dataclass -class Node: - val: int - left: Node | None = None - right: Node | None = None - - def __iter__(self) -> Iterator[int]: - if self.left: - yield from self.left - yield self.val - if self.right: - yield from self.right - - def __len__(self) -> int: - return sum(1 for _ in self) - - def insert(self, val: int) -> None: - if val < self.val: - if self.left is None: - self.left = Node(val) - else: - self.left.insert(val) - elif val > self.val: - if self.right is None: - self.right = Node(val) - else: - self.right.insert(val) - - -def tree_sort(arr: list[int]) -> tuple[int, ...]: - """ - >>> tree_sort([]) - () - >>> tree_sort((1,)) - (1,) - >>> tree_sort((1, 2)) - (1, 2) - >>> tree_sort([5, 2, 7]) - (2, 5, 7) - >>> tree_sort((5, -4, 9, 2, 7)) - (-4, 2, 5, 7, 9) - >>> tree_sort([5, 6, 1, -1, 4, 37, 2, 7]) - (-1, 1, 2, 4, 5, 6, 7, 37) - - # >>> tree_sort(range(10, -10, -1)) == tuple(sorted(range(10, -10, -1))) - # True - """ - if len(arr) == 0: - return tuple(arr) - root = Node(arr[0]) - for item in arr[1:]: - root.insert(item) - return tuple(root) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(f"{tree_sort([5, 6, 1, -1, 4, 37, -3, 7]) = }") diff --git a/sorts/unknown_sort.py b/sorts/unknown_sort.py deleted file mode 100644 index 9fa9d22fb5e0..000000000000 --- a/sorts/unknown_sort.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -Python implementation of a sort algorithm. -Best Case Scenario : O(n) -Worst Case Scenario : O(n^2) because native Python functions:min, max and remove are -already O(n) -""" - - -def merge_sort(collection): - """Pure implementation of the fastest merge sort algorithm in Python - - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: a collection ordered by ascending - - Examples: - >>> merge_sort([0, 5, 3, 2, 2]) - [0, 2, 2, 3, 5] - - >>> merge_sort([]) - [] - - >>> merge_sort([-2, -5, -45]) - [-45, -5, -2] - """ - start, end = [], [] - while len(collection) > 1: - min_one, max_one = min(collection), max(collection) - start.append(min_one) - end.append(max_one) - collection.remove(min_one) - collection.remove(max_one) - end.reverse() - return start + collection + end - - -if __name__ == "__main__": - user_input = input("Enter numbers separated by a comma:\n").strip() - unsorted = [int(item) for item in user_input.split(",")] - print(*merge_sort(unsorted), sep=",") diff --git a/sorts/wiggle_sort.py b/sorts/wiggle_sort.py deleted file mode 100644 index 13bc3ce9606f..000000000000 --- a/sorts/wiggle_sort.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Wiggle Sort. - -Given an unsorted array nums, reorder it such -that nums[0] < nums[1] > nums[2] < nums[3].... -For example: -if input numbers = [3, 5, 2, 1, 6, 4] -one possible Wiggle Sorted answer is [3, 5, 1, 6, 2, 4]. -""" - - -def wiggle_sort(nums: list) -> list: - """ - Python implementation of wiggle. - Example: - >>> wiggle_sort([0, 5, 3, 2, 2]) - [0, 5, 2, 3, 2] - >>> wiggle_sort([]) - [] - >>> wiggle_sort([-2, -5, -45]) - [-45, -2, -5] - >>> wiggle_sort([-2.1, -5.68, -45.11]) - [-45.11, -2.1, -5.68] - """ - for i, _ in enumerate(nums): - if (i % 2 == 1) == (nums[i - 1] > nums[i]): - nums[i - 1], nums[i] = nums[i], nums[i - 1] - - return nums - - -if __name__ == "__main__": - print("Enter the array elements:") - array = list(map(int, input().split())) - print("The unsorted array is:") - print(array) - print("Array after Wiggle sort:") - print(wiggle_sort(array)) diff --git a/source/__init__.py b/source/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/strings/__init__.py b/strings/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/strings/aho_corasick.py b/strings/aho_corasick.py deleted file mode 100644 index e32a4ba64fac..000000000000 --- a/strings/aho_corasick.py +++ /dev/null @@ -1,96 +0,0 @@ -from __future__ import annotations - -from collections import deque - - -class Automaton: - def __init__(self, keywords: list[str]): - self.adlist: list[dict] = [] - self.adlist.append( - {"value": "", "next_states": [], "fail_state": 0, "output": []} - ) - - for keyword in keywords: - self.add_keyword(keyword) - self.set_fail_transitions() - - def find_next_state(self, current_state: int, char: str) -> int | None: - for state in self.adlist[current_state]["next_states"]: - if char == self.adlist[state]["value"]: - return state - return None - - def add_keyword(self, keyword: str) -> None: - current_state = 0 - for character in keyword: - next_state = self.find_next_state(current_state, character) - if next_state is None: - self.adlist.append( - { - "value": character, - "next_states": [], - "fail_state": 0, - "output": [], - } - ) - self.adlist[current_state]["next_states"].append(len(self.adlist) - 1) - current_state = len(self.adlist) - 1 - else: - current_state = next_state - self.adlist[current_state]["output"].append(keyword) - - def set_fail_transitions(self) -> None: - q: deque = deque() - for node in self.adlist[0]["next_states"]: - q.append(node) - self.adlist[node]["fail_state"] = 0 - while q: - r = q.popleft() - for child in self.adlist[r]["next_states"]: - q.append(child) - state = self.adlist[r]["fail_state"] - while ( - self.find_next_state(state, self.adlist[child]["value"]) is None - and state != 0 - ): - state = self.adlist[state]["fail_state"] - self.adlist[child]["fail_state"] = self.find_next_state( - state, self.adlist[child]["value"] - ) - if self.adlist[child]["fail_state"] is None: - self.adlist[child]["fail_state"] = 0 - self.adlist[child]["output"] = ( - self.adlist[child]["output"] - + self.adlist[self.adlist[child]["fail_state"]]["output"] - ) - - def search_in(self, string: str) -> dict[str, list[int]]: - """ - >>> A = Automaton(["what", "hat", "ver", "er"]) - >>> A.search_in("whatever, err ... , wherever") - {'what': [0], 'hat': [1], 'ver': [5, 25], 'er': [6, 10, 22, 26]} - """ - result: dict = {} # returns a dict with keywords and list of its occurrences - current_state = 0 - for i in range(len(string)): - while ( - self.find_next_state(current_state, string[i]) is None - and current_state != 0 - ): - current_state = self.adlist[current_state]["fail_state"] - next_state = self.find_next_state(current_state, string[i]) - if next_state is None: - current_state = 0 - else: - current_state = next_state - for key in self.adlist[current_state]["output"]: - if key not in result: - result[key] = [] - result[key].append(i - len(key) + 1) - return result - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/alternative_string_arrange.py b/strings/alternative_string_arrange.py deleted file mode 100644 index d81ddd8a1574..000000000000 --- a/strings/alternative_string_arrange.py +++ /dev/null @@ -1,31 +0,0 @@ -def alternative_string_arrange(first_str: str, second_str: str) -> str: - """ - Return the alternative arrangements of the two strings. - :param first_str: - :param second_str: - :return: String - >>> alternative_string_arrange("ABCD", "XY") - 'AXBYCD' - >>> alternative_string_arrange("XY", "ABCD") - 'XAYBCD' - >>> alternative_string_arrange("AB", "XYZ") - 'AXBYZ' - >>> alternative_string_arrange("ABC", "") - 'ABC' - """ - first_str_length: int = len(first_str) - second_str_length: int = len(second_str) - abs_length: int = ( - first_str_length if first_str_length > second_str_length else second_str_length - ) - output_list: list = [] - for char_count in range(abs_length): - if char_count < first_str_length: - output_list.append(first_str[char_count]) - if char_count < second_str_length: - output_list.append(second_str[char_count]) - return "".join(output_list) - - -if __name__ == "__main__": - print(alternative_string_arrange("AB", "XYZ"), end=" ") diff --git a/strings/anagrams.py b/strings/anagrams.py deleted file mode 100644 index fb9ac0bd1f45..000000000000 --- a/strings/anagrams.py +++ /dev/null @@ -1,44 +0,0 @@ -from __future__ import annotations - -import collections -import pprint -from pathlib import Path - - -def signature(word: str) -> str: - """Return a word sorted - >>> signature("test") - 'estt' - >>> signature("this is a test") - ' aehiisssttt' - >>> signature("finaltest") - 'aefilnstt' - """ - return "".join(sorted(word)) - - -def anagram(my_word: str) -> list[str]: - """Return every anagram of the given word - >>> anagram('test') - ['sett', 'stet', 'test'] - >>> anagram('this is a test') - [] - >>> anagram('final') - ['final'] - """ - return word_by_signature[signature(my_word)] - - -data: str = Path(__file__).parent.joinpath("words.txt").read_text(encoding="utf-8") -word_list = sorted({word.strip().lower() for word in data.splitlines()}) - -word_by_signature = collections.defaultdict(list) -for word in word_list: - word_by_signature[signature(word)].append(word) - -if __name__ == "__main__": - all_anagrams = {word: anagram(word) for word in word_list if len(anagram(word)) > 1} - - with open("anagrams.txt", "w") as file: - file.write("all_anagrams = \n ") - file.write(pprint.pformat(all_anagrams)) diff --git a/strings/anagrams.txt b/strings/anagrams.txt deleted file mode 100644 index 52a0fcf3e9a7..000000000000 --- a/strings/anagrams.txt +++ /dev/null @@ -1,33957 +0,0 @@ -all_anagrams = - {'aal': ['aal', 'ala'], - 'aam': ['aam', 'ama'], - 'aaronic': ['aaronic', 'nicarao', 'ocarina'], - 'aaronite': ['aaronite', 'aeration'], - 'aaru': ['aaru', 'aura'], - 'ab': ['ab', 'ba'], - 'aba': ['aba', 'baa'], - 'abac': ['abac', 'caba'], - 'abactor': ['abactor', 'acrobat'], - 'abaft': ['abaft', 'bafta'], - 'abalone': ['abalone', 'balonea'], - 'abandoner': ['abandoner', 'reabandon'], - 'abanic': ['abanic', 'bianca'], - 'abaris': ['abaris', 'arabis'], - 'abas': ['abas', 'saba'], - 'abaser': ['abaser', 'abrase'], - 'abate': ['abate', 'ateba', 'batea', 'beata'], - 'abater': ['abater', 'artabe', 'eartab', 'trabea'], - 'abb': ['abb', 'bab'], - 'abba': ['abba', 'baba'], - 'abbey': ['abbey', 'bebay'], - 'abby': ['abby', 'baby'], - 'abdat': ['abdat', 'batad'], - 'abdiel': ['abdiel', 'baldie'], - 'abdominovaginal': ['abdominovaginal', 'vaginoabdominal'], - 'abdominovesical': ['abdominovesical', 'vesicoabdominal'], - 'abe': ['abe', 'bae', 'bea'], - 'abed': ['abed', 'bade', 'bead'], - 'abel': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'abele': ['abele', 'albee'], - 'abelian': ['abelian', 'nebalia'], - 'abenteric': ['abenteric', 'bicrenate'], - 'aberia': ['aberia', 'baeria', 'baiera'], - 'abet': ['abet', 'bate', 'beat', 'beta'], - 'abetment': ['abetment', 'batement'], - 'abettor': ['abettor', 'taboret'], - 'abhorrent': ['abhorrent', 'earthborn'], - 'abhorrer': ['abhorrer', 'harborer'], - 'abider': ['abider', 'bardie'], - 'abies': ['abies', 'beisa'], - 'abilla': ['abilla', 'labial'], - 'abilo': ['abilo', 'aboil'], - 'abir': ['abir', 'bari', 'rabi'], - 'abiston': ['abiston', 'bastion'], - 'abiuret': ['abiuret', 'aubrite', 'biurate', 'rubiate'], - 'abkar': ['abkar', 'arkab'], - 'abkhas': ['abkhas', 'kasbah'], - 'ablactate': ['ablactate', 'cabaletta'], - 'ablare': ['ablare', 'arable', 'arbela'], - 'ablastemic': ['ablastemic', 'masticable'], - 'ablation': ['ablation', 'obtainal'], - 'ablaut': ['ablaut', 'tabula'], - 'able': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'ableness': ['ableness', 'blaeness', 'sensable'], - 'ablepsia': ['ablepsia', 'epibasal'], - 'abler': ['abler', 'baler', 'belar', 'blare', 'blear'], - 'ablest': ['ablest', 'stable', 'tables'], - 'abloom': ['abloom', 'mabolo'], - 'ablow': ['ablow', 'balow', 'bowla'], - 'ablude': ['ablude', 'belaud'], - 'abluent': ['abluent', 'tunable'], - 'ablution': ['ablution', 'abutilon'], - 'ably': ['ably', 'blay', 'yalb'], - 'abmho': ['abmho', 'abohm'], - 'abner': ['abner', 'arneb', 'reban'], - 'abnet': ['abnet', 'beant'], - 'abo': ['abo', 'boa'], - 'aboard': ['aboard', 'aborad', 'abroad'], - 'abode': ['abode', 'adobe'], - 'abohm': ['abmho', 'abohm'], - 'aboil': ['abilo', 'aboil'], - 'abolisher': ['abolisher', 'reabolish'], - 'abongo': ['abongo', 'gaboon'], - 'aborad': ['aboard', 'aborad', 'abroad'], - 'aboral': ['aboral', 'arbalo'], - 'abord': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'], - 'abort': ['abort', 'tabor'], - 'aborticide': ['aborticide', 'bacterioid'], - 'abortient': ['abortient', 'torbanite'], - 'abortin': ['abortin', 'taborin'], - 'abortion': ['abortion', 'robotian'], - 'abortive': ['abortive', 'bravoite'], - 'abouts': ['abouts', 'basuto'], - 'abram': ['abram', 'ambar'], - 'abramis': ['abramis', 'arabism'], - 'abrasax': ['abrasax', 'abraxas'], - 'abrase': ['abaser', 'abrase'], - 'abrasion': ['abrasion', 'sorabian'], - 'abrastol': ['abrastol', 'albatros'], - 'abraxas': ['abrasax', 'abraxas'], - 'abreact': ['abreact', 'bractea', 'cabaret'], - 'abret': ['abret', 'bater', 'berat'], - 'abridge': ['abridge', 'brigade'], - 'abrim': ['abrim', 'birma'], - 'abrin': ['abrin', 'bairn', 'brain', 'brian', 'rabin'], - 'abristle': ['abristle', 'libertas'], - 'abroad': ['aboard', 'aborad', 'abroad'], - 'abrotine': ['abrotine', 'baritone', 'obtainer', 'reobtain'], - 'abrus': ['abrus', 'bursa', 'subra'], - 'absalom': ['absalom', 'balsamo'], - 'abscise': ['abscise', 'scabies'], - 'absent': ['absent', 'basten'], - 'absenter': ['absenter', 'reabsent'], - 'absi': ['absi', 'bais', 'bias', 'isba'], - 'absit': ['absit', 'batis'], - 'absmho': ['absmho', 'absohm'], - 'absohm': ['absmho', 'absohm'], - 'absorber': ['absorber', 'reabsorb'], - 'absorpt': ['absorpt', 'barpost'], - 'abthain': ['abthain', 'habitan'], - 'abulic': ['abulic', 'baculi'], - 'abut': ['abut', 'tabu', 'tuba'], - 'abuta': ['abuta', 'bauta'], - 'abutilon': ['ablution', 'abutilon'], - 'aby': ['aby', 'bay'], - 'abysmal': ['abysmal', 'balsamy'], - 'academite': ['academite', 'acetamide'], - 'acadie': ['acadie', 'acedia', 'adicea'], - 'acaleph': ['acaleph', 'acephal'], - 'acalepha': ['acalepha', 'acephala'], - 'acalephae': ['acalephae', 'apalachee'], - 'acalephan': ['acalephan', 'acephalan'], - 'acalyptrate': ['acalyptrate', 'calyptratae'], - 'acamar': ['acamar', 'camara', 'maraca'], - 'acanth': ['acanth', 'anchat', 'tanach'], - 'acanthia': ['acanthia', 'achatina'], - 'acanthial': ['acanthial', 'calathian'], - 'acanthin': ['acanthin', 'chinanta'], - 'acara': ['acara', 'araca'], - 'acardia': ['acardia', 'acarida', 'arcadia'], - 'acarian': ['acarian', 'acarina', 'acrania'], - 'acarid': ['acarid', 'cardia', 'carida'], - 'acarida': ['acardia', 'acarida', 'arcadia'], - 'acarina': ['acarian', 'acarina', 'acrania'], - 'acarine': ['acarine', 'acraein', 'arecain'], - 'acastus': ['acastus', 'astacus'], - 'acatholic': ['acatholic', 'chaotical'], - 'acaudate': ['acaudate', 'ecaudata'], - 'acca': ['acca', 'caca'], - 'accelerator': ['accelerator', 'retrocaecal'], - 'acception': ['acception', 'peccation'], - 'accessioner': ['accessioner', 'reaccession'], - 'accipitres': ['accipitres', 'preascitic'], - 'accite': ['accite', 'acetic'], - 'acclinate': ['acclinate', 'analectic'], - 'accoil': ['accoil', 'calico'], - 'accomplisher': ['accomplisher', 'reaccomplish'], - 'accompt': ['accompt', 'compact'], - 'accorder': ['accorder', 'reaccord'], - 'accoy': ['accoy', 'ccoya'], - 'accretion': ['accretion', 'anorectic', 'neoarctic'], - 'accrual': ['accrual', 'carucal'], - 'accurate': ['accurate', 'carucate'], - 'accurse': ['accurse', 'accuser'], - 'accusable': ['accusable', 'subcaecal'], - 'accused': ['accused', 'succade'], - 'accuser': ['accurse', 'accuser'], - 'acedia': ['acadie', 'acedia', 'adicea'], - 'acedy': ['acedy', 'decay'], - 'acentric': ['acentric', 'encratic', 'nearctic'], - 'acentrous': ['acentrous', 'courtesan', 'nectarous'], - 'acephal': ['acaleph', 'acephal'], - 'acephala': ['acalepha', 'acephala'], - 'acephalan': ['acalephan', 'acephalan'], - 'acephali': ['acephali', 'phacelia'], - 'acephalina': ['acephalina', 'phalaecian'], - 'acer': ['acer', 'acre', 'care', 'crea', 'race'], - 'aceraceae': ['aceraceae', 'arecaceae'], - 'aceraceous': ['aceraceous', 'arecaceous'], - 'acerb': ['acerb', 'brace', 'caber'], - 'acerbic': ['acerbic', 'breccia'], - 'acerdol': ['acerdol', 'coraled'], - 'acerin': ['acerin', 'cearin'], - 'acerous': ['acerous', 'carouse', 'euscaro'], - 'acervate': ['acervate', 'revacate'], - 'acervation': ['acervation', 'vacationer'], - 'acervuline': ['acervuline', 'avirulence'], - 'acetamide': ['academite', 'acetamide'], - 'acetamido': ['acetamido', 'coadamite'], - 'acetanilid': ['acetanilid', 'laciniated', 'teniacidal'], - 'acetanion': ['acetanion', 'antoecian'], - 'acetation': ['acetation', 'itaconate'], - 'acetic': ['accite', 'acetic'], - 'acetin': ['acetin', 'actine', 'enatic'], - 'acetmethylanilide': ['acetmethylanilide', 'methylacetanilide'], - 'acetoin': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'], - 'acetol': ['acetol', 'colate', 'locate'], - 'acetone': ['acetone', 'oceanet'], - 'acetonuria': ['acetonuria', 'aeronautic'], - 'acetopyrin': ['acetopyrin', 'capernoity'], - 'acetous': ['acetous', 'outcase'], - 'acetum': ['acetum', 'tecuma'], - 'aceturic': ['aceturic', 'cruciate'], - 'ach': ['ach', 'cha'], - 'achar': ['achar', 'chara'], - 'achate': ['achate', 'chaeta'], - 'achatina': ['acanthia', 'achatina'], - 'ache': ['ache', 'each', 'haec'], - 'acheirus': ['acheirus', 'eucharis'], - 'achen': ['achen', 'chane', 'chena', 'hance'], - 'acher': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'], - 'acherontic': ['acherontic', 'anchoretic'], - 'acherontical': ['acherontical', 'anchoretical'], - 'achete': ['achete', 'hecate', 'teache', 'thecae'], - 'acheulean': ['acheulean', 'euchlaena'], - 'achill': ['achill', 'cahill', 'chilla'], - 'achillea': ['achillea', 'heliacal'], - 'acholia': ['acholia', 'alochia'], - 'achondrite': ['achondrite', 'ditrochean', 'ordanchite'], - 'achor': ['achor', 'chora', 'corah', 'orach', 'roach'], - 'achras': ['achras', 'charas'], - 'achromat': ['achromat', 'trachoma'], - 'achromatin': ['achromatin', 'chariotman', 'machinator'], - 'achromatinic': ['achromatinic', 'chromatician'], - 'achtel': ['achtel', 'chalet', 'thecal', 'thecla'], - 'achy': ['achy', 'chay'], - 'aciculated': ['aciculated', 'claudicate'], - 'acid': ['acid', 'cadi', 'caid'], - 'acidanthera': ['acidanthera', 'cantharidae'], - 'acider': ['acider', 'ericad'], - 'acidimeter': ['acidimeter', 'mediatrice'], - 'acidity': ['acidity', 'adicity'], - 'acidly': ['acidly', 'acidyl'], - 'acidometry': ['acidometry', 'medicatory', 'radiectomy'], - 'acidophilous': ['acidophilous', 'aphidicolous'], - 'acidyl': ['acidly', 'acidyl'], - 'acier': ['acier', 'aeric', 'ceria', 'erica'], - 'acieral': ['acieral', 'aerical'], - 'aciform': ['aciform', 'formica'], - 'acilius': ['acilius', 'iliacus'], - 'acinar': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'acinic': ['acinic', 'incaic'], - 'aciniform': ['aciniform', 'formicina'], - 'acipenserid': ['acipenserid', 'presidencia'], - 'acis': ['acis', 'asci', 'saic'], - 'acker': ['acker', 'caker', 'crake', 'creak'], - 'ackey': ['ackey', 'cakey'], - 'acle': ['acle', 'alec', 'lace'], - 'acleistous': ['acleistous', 'ossiculate'], - 'aclemon': ['aclemon', 'cloamen'], - 'aclinal': ['aclinal', 'ancilla'], - 'aclys': ['aclys', 'scaly'], - 'acme': ['acme', 'came', 'mace'], - 'acmite': ['acmite', 'micate'], - 'acne': ['acne', 'cane', 'nace'], - 'acnemia': ['acnemia', 'anaemic'], - 'acnida': ['acnida', 'anacid', 'dacian'], - 'acnodal': ['acnodal', 'canadol', 'locanda'], - 'acnode': ['acnode', 'deacon'], - 'acoin': ['acoin', 'oncia'], - 'acoma': ['acoma', 'macao'], - 'acone': ['acone', 'canoe', 'ocean'], - 'aconital': ['aconital', 'actional', 'anatolic'], - 'aconite': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'], - 'aconitic': ['aconitic', 'cationic', 'itaconic'], - 'aconitin': ['aconitin', 'inaction', 'nicotian'], - 'aconitum': ['aconitum', 'acontium'], - 'acontias': ['acontias', 'tacsonia'], - 'acontium': ['aconitum', 'acontium'], - 'acontius': ['acontius', 'anticous'], - 'acopon': ['acopon', 'poonac'], - 'acor': ['acor', 'caro', 'cora', 'orca'], - 'acorn': ['acorn', 'acron', 'racon'], - 'acorus': ['acorus', 'soucar'], - 'acosmist': ['acosmist', 'massicot', 'somatics'], - 'acquest': ['acquest', 'casquet'], - 'acrab': ['acrab', 'braca'], - 'acraein': ['acarine', 'acraein', 'arecain'], - 'acrania': ['acarian', 'acarina', 'acrania'], - 'acraniate': ['acraniate', 'carinatae'], - 'acratia': ['acratia', 'cataria'], - 'acre': ['acer', 'acre', 'care', 'crea', 'race'], - 'acream': ['acream', 'camera', 'mareca'], - 'acred': ['acred', 'cader', 'cadre', 'cedar'], - 'acrid': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'], - 'acridan': ['acridan', 'craniad'], - 'acridian': ['acridian', 'cnidaria'], - 'acrididae': ['acrididae', 'cardiidae', 'cidaridae'], - 'acridly': ['acridly', 'acridyl'], - 'acridonium': ['acridonium', 'dicoumarin'], - 'acridyl': ['acridly', 'acridyl'], - 'acrimonious': ['acrimonious', 'isocoumarin'], - 'acrisius': ['acrisius', 'sicarius'], - 'acrita': ['acrita', 'arctia'], - 'acritan': ['acritan', 'arctian'], - 'acrite': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'], - 'acroa': ['acroa', 'caroa'], - 'acrobat': ['abactor', 'acrobat'], - 'acrocera': ['acrocera', 'caracore'], - 'acroclinium': ['acroclinium', 'alcicornium'], - 'acrodus': ['acrodus', 'crusado'], - 'acrogen': ['acrogen', 'cornage'], - 'acrolein': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'acrolith': ['acrolith', 'trochila'], - 'acron': ['acorn', 'acron', 'racon'], - 'acronical': ['acronical', 'alcoranic'], - 'acronym': ['acronym', 'romancy'], - 'acropetal': ['acropetal', 'cleopatra'], - 'acrose': ['acrose', 'coarse'], - 'acrostic': ['acrostic', 'sarcotic', 'socratic'], - 'acrostical': ['acrostical', 'socratical'], - 'acrostically': ['acrostically', 'socratically'], - 'acrosticism': ['acrosticism', 'socraticism'], - 'acrotic': ['acrotic', 'carotic'], - 'acrotism': ['acrotism', 'rotacism'], - 'acrotrophic': ['acrotrophic', 'prothoracic'], - 'acryl': ['acryl', 'caryl', 'clary'], - 'act': ['act', 'cat'], - 'actaeonidae': ['actaeonidae', 'donatiaceae'], - 'actian': ['actian', 'natica', 'tanica'], - 'actifier': ['actifier', 'artifice'], - 'actin': ['actin', 'antic'], - 'actinal': ['actinal', 'alantic', 'alicant', 'antical'], - 'actine': ['acetin', 'actine', 'enatic'], - 'actiniform': ['actiniform', 'naticiform'], - 'actinine': ['actinine', 'naticine'], - 'actinism': ['actinism', 'manistic'], - 'actinogram': ['actinogram', 'morganatic'], - 'actinoid': ['actinoid', 'diatonic', 'naticoid'], - 'actinon': ['actinon', 'cantion', 'contain'], - 'actinopteran': ['actinopteran', 'precantation'], - 'actinopteri': ['actinopteri', 'crepitation', 'precitation'], - 'actinost': ['actinost', 'oscitant'], - 'actinula': ['actinula', 'nautical'], - 'action': ['action', 'atonic', 'cation'], - 'actional': ['aconital', 'actional', 'anatolic'], - 'actioner': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'], - 'activable': ['activable', 'biclavate'], - 'activate': ['activate', 'cavitate'], - 'activation': ['activation', 'cavitation'], - 'activin': ['activin', 'civitan'], - 'actomyosin': ['actomyosin', 'inocystoma'], - 'acton': ['acton', 'canto', 'octan'], - 'actor': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'], - 'actorship': ['actorship', 'strophaic'], - 'acts': ['acts', 'cast', 'scat'], - 'actuator': ['actuator', 'autocrat'], - 'acture': ['acture', 'cauter', 'curate'], - 'acuan': ['acuan', 'aucan'], - 'acubens': ['acubens', 'benacus'], - 'acumen': ['acumen', 'cueman'], - 'acuminose': ['acuminose', 'mniaceous'], - 'acutenaculum': ['acutenaculum', 'unaccumulate'], - 'acuteness': ['acuteness', 'encaustes'], - 'acutorsion': ['acutorsion', 'octonarius'], - 'acyl': ['acyl', 'clay', 'lacy'], - 'acylation': ['acylation', 'claytonia'], - 'acylogen': ['acylogen', 'cynogale'], - 'ad': ['ad', 'da'], - 'adad': ['adad', 'adda', 'dada'], - 'adage': ['adage', 'agade'], - 'adam': ['adam', 'dama'], - 'adamic': ['adamic', 'cadmia'], - 'adamine': ['adamine', 'manidae'], - 'adamite': ['adamite', 'amidate'], - 'adamsite': ['adamsite', 'diastema'], - 'adance': ['adance', 'ecanda'], - 'adapter': ['adapter', 'predata', 'readapt'], - 'adaption': ['adaption', 'adoptian'], - 'adaptionism': ['adaptionism', 'adoptianism'], - 'adar': ['adar', 'arad', 'raad', 'rada'], - 'adarme': ['adarme', 'adream'], - 'adat': ['adat', 'data'], - 'adawn': ['adawn', 'wadna'], - 'adays': ['adays', 'dasya'], - 'add': ['add', 'dad'], - 'adda': ['adad', 'adda', 'dada'], - 'addendum': ['addendum', 'unmadded'], - 'adder': ['adder', 'dread', 'readd'], - 'addicent': ['addicent', 'dedicant'], - 'addlings': ['addlings', 'saddling'], - 'addresser': ['addresser', 'readdress'], - 'addu': ['addu', 'dadu', 'daud', 'duad'], - 'addy': ['addy', 'dyad'], - 'ade': ['ade', 'dae'], - 'adeem': ['adeem', 'ameed', 'edema'], - 'adela': ['adela', 'dalea'], - 'adeline': ['adeline', 'daniele', 'delaine'], - 'adeling': ['adeling', 'dealing', 'leading'], - 'adelops': ['adelops', 'deposal'], - 'ademonist': ['ademonist', 'demoniast', 'staminode'], - 'ademption': ['ademption', 'tampioned'], - 'adendric': ['adendric', 'riddance'], - 'adenectopic': ['adenectopic', 'pentadecoic'], - 'adenia': ['adenia', 'idaean'], - 'adenochondroma': ['adenochondroma', 'chondroadenoma'], - 'adenocystoma': ['adenocystoma', 'cystoadenoma'], - 'adenofibroma': ['adenofibroma', 'fibroadenoma'], - 'adenolipoma': ['adenolipoma', 'palaemonoid'], - 'adenosarcoma': ['adenosarcoma', 'sarcoadenoma'], - 'adenylic': ['adenylic', 'lycaenid'], - 'adeptness': ['adeptness', 'pedantess'], - 'adequation': ['adequation', 'deaquation'], - 'adermia': ['adermia', 'madeira'], - 'adermin': ['adermin', 'amerind', 'dimeran'], - 'adet': ['adet', 'date', 'tade', 'tead', 'teda'], - 'adevism': ['adevism', 'vedaism'], - 'adhere': ['adhere', 'header', 'hedera', 'rehead'], - 'adherent': ['adherent', 'headrent', 'neatherd', 'threaden'], - 'adiaphon': ['adiaphon', 'aphodian'], - 'adib': ['adib', 'ibad'], - 'adicea': ['acadie', 'acedia', 'adicea'], - 'adicity': ['acidity', 'adicity'], - 'adiel': ['adiel', 'delia', 'ideal'], - 'adieux': ['adieux', 'exaudi'], - 'adighe': ['adighe', 'hidage'], - 'adin': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'], - 'adinole': ['adinole', 'idoneal'], - 'adion': ['adion', 'danio', 'doina', 'donia'], - 'adipocele': ['adipocele', 'cepolidae', 'ploceidae'], - 'adipocere': ['adipocere', 'percoidea'], - 'adipyl': ['adipyl', 'plaidy'], - 'adit': ['adit', 'dita'], - 'adital': ['adital', 'altaid'], - 'aditus': ['aditus', 'studia'], - 'adjuster': ['adjuster', 'readjust'], - 'adlai': ['adlai', 'alida'], - 'adlay': ['adlay', 'dayal'], - 'adlet': ['adlet', 'dealt', 'delta', 'lated', 'taled'], - 'adlumine': ['adlumine', 'unmailed'], - 'adman': ['adman', 'daman', 'namda'], - 'admi': ['admi', 'amid', 'madi', 'maid'], - 'adminicle': ['adminicle', 'medicinal'], - 'admire': ['admire', 'armied', 'damier', 'dimera', 'merida'], - 'admired': ['admired', 'diaderm'], - 'admirer': ['admirer', 'madrier', 'married'], - 'admissive': ['admissive', 'misadvise'], - 'admit': ['admit', 'atmid'], - 'admittee': ['admittee', 'meditate'], - 'admonisher': ['admonisher', 'rhamnoside'], - 'admonition': ['admonition', 'domination'], - 'admonitive': ['admonitive', 'dominative'], - 'admonitor': ['admonitor', 'dominator'], - 'adnascence': ['adnascence', 'ascendance'], - 'adnascent': ['adnascent', 'ascendant'], - 'adnate': ['adnate', 'entada'], - 'ado': ['ado', 'dao', 'oda'], - 'adobe': ['abode', 'adobe'], - 'adolph': ['adolph', 'pholad'], - 'adonai': ['adonai', 'adonia'], - 'adonia': ['adonai', 'adonia'], - 'adonic': ['adonic', 'anodic'], - 'adonin': ['adonin', 'nanoid', 'nonaid'], - 'adoniram': ['adoniram', 'radioman'], - 'adonize': ['adonize', 'anodize'], - 'adopter': ['adopter', 'protead', 'readopt'], - 'adoptian': ['adaption', 'adoptian'], - 'adoptianism': ['adaptionism', 'adoptianism'], - 'adoptional': ['adoptional', 'aplodontia'], - 'adorability': ['adorability', 'roadability'], - 'adorable': ['adorable', 'roadable'], - 'adorant': ['adorant', 'ondatra'], - 'adore': ['adore', 'oared', 'oread'], - 'adorer': ['adorer', 'roader'], - 'adorn': ['adorn', 'donar', 'drona', 'radon'], - 'adorner': ['adorner', 'readorn'], - 'adpao': ['adpao', 'apoda'], - 'adpromission': ['adpromission', 'proadmission'], - 'adream': ['adarme', 'adream'], - 'adrenin': ['adrenin', 'nardine'], - 'adrenine': ['adrenine', 'adrienne'], - 'adrenolytic': ['adrenolytic', 'declinatory'], - 'adrenotropic': ['adrenotropic', 'incorporated'], - 'adrian': ['adrian', 'andira', 'andria', 'radian', 'randia'], - 'adrienne': ['adrenine', 'adrienne'], - 'adrip': ['adrip', 'rapid'], - 'adroitly': ['adroitly', 'dilatory', 'idolatry'], - 'adrop': ['adrop', 'pardo'], - 'adry': ['adry', 'dray', 'yard'], - 'adscendent': ['adscendent', 'descendant'], - 'adsmith': ['adsmith', 'mahdist'], - 'adular': ['adular', 'aludra', 'radula'], - 'adulation': ['adulation', 'laudation'], - 'adulator': ['adulator', 'laudator'], - 'adulatory': ['adulatory', 'laudatory'], - 'adult': ['adult', 'dulat'], - 'adulterine': ['adulterine', 'laurentide'], - 'adultness': ['adultness', 'dauntless'], - 'adustion': ['adustion', 'sudation'], - 'advene': ['advene', 'evadne'], - 'adventism': ['adventism', 'vedantism'], - 'adventist': ['adventist', 'vedantist'], - 'adventure': ['adventure', 'unaverted'], - 'advice': ['advice', 'vedaic'], - 'ady': ['ady', 'day', 'yad'], - 'adz': ['adz', 'zad'], - 'adze': ['adze', 'daze'], - 'adzer': ['adzer', 'zerda'], - 'ae': ['ae', 'ea'], - 'aecidioform': ['aecidioform', 'formicoidea'], - 'aedilian': ['aedilian', 'laniidae'], - 'aedilic': ['aedilic', 'elaidic'], - 'aedility': ['aedility', 'ideality'], - 'aegipan': ['aegipan', 'apinage'], - 'aegirine': ['aegirine', 'erigenia'], - 'aegirite': ['aegirite', 'ariegite'], - 'aegle': ['aegle', 'eagle', 'galee'], - 'aenean': ['aenean', 'enaena'], - 'aeolharmonica': ['aeolharmonica', 'chloroanaemia'], - 'aeolian': ['aeolian', 'aeolina', 'aeonial'], - 'aeolic': ['aeolic', 'coelia'], - 'aeolina': ['aeolian', 'aeolina', 'aeonial'], - 'aeolis': ['aeolis', 'laiose'], - 'aeolist': ['aeolist', 'isolate'], - 'aeolistic': ['aeolistic', 'socialite'], - 'aeon': ['aeon', 'eoan'], - 'aeonial': ['aeolian', 'aeolina', 'aeonial'], - 'aeonist': ['aeonist', 'asiento', 'satieno'], - 'aer': ['aer', 'are', 'ear', 'era', 'rea'], - 'aerage': ['aerage', 'graeae'], - 'aerarian': ['aerarian', 'arenaria'], - 'aeration': ['aaronite', 'aeration'], - 'aerial': ['aerial', 'aralie'], - 'aeric': ['acier', 'aeric', 'ceria', 'erica'], - 'aerical': ['acieral', 'aerical'], - 'aeried': ['aeried', 'dearie'], - 'aerogenic': ['aerogenic', 'recoinage'], - 'aerographer': ['aerographer', 'areographer'], - 'aerographic': ['aerographic', 'areographic'], - 'aerographical': ['aerographical', 'areographical'], - 'aerography': ['aerography', 'areography'], - 'aerologic': ['aerologic', 'areologic'], - 'aerological': ['aerological', 'areological'], - 'aerologist': ['aerologist', 'areologist'], - 'aerology': ['aerology', 'areology'], - 'aeromantic': ['aeromantic', 'cameration', 'maceration', 'racemation'], - 'aerometer': ['aerometer', 'areometer'], - 'aerometric': ['aerometric', 'areometric'], - 'aerometry': ['aerometry', 'areometry'], - 'aeronautic': ['acetonuria', 'aeronautic'], - 'aeronautism': ['aeronautism', 'measuration'], - 'aerope': ['aerope', 'operae'], - 'aerophilic': ['aerophilic', 'epichorial'], - 'aerosol': ['aerosol', 'roseola'], - 'aerostatics': ['aerostatics', 'aortectasis'], - 'aery': ['aery', 'eyra', 'yare', 'year'], - 'aes': ['aes', 'ase', 'sea'], - 'aesthetic': ['aesthetic', 'chaetites'], - 'aethalioid': ['aethalioid', 'haliotidae'], - 'aetian': ['aetian', 'antiae', 'taenia'], - 'aetobatus': ['aetobatus', 'eastabout'], - 'afebrile': ['afebrile', 'balefire', 'fireable'], - 'afenil': ['afenil', 'finale'], - 'affair': ['affair', 'raffia'], - 'affecter': ['affecter', 'reaffect'], - 'affeer': ['affeer', 'raffee'], - 'affiance': ['affiance', 'caffeina'], - 'affirmer': ['affirmer', 'reaffirm'], - 'afflicter': ['afflicter', 'reafflict'], - 'affy': ['affy', 'yaff'], - 'afghan': ['afghan', 'hafgan'], - 'afield': ['afield', 'defial'], - 'afire': ['afire', 'feria'], - 'aflare': ['aflare', 'rafael'], - 'aflat': ['aflat', 'fatal'], - 'afresh': ['afresh', 'fasher', 'ferash'], - 'afret': ['afret', 'after'], - 'afric': ['afric', 'firca'], - 'afshar': ['afshar', 'ashraf'], - 'aft': ['aft', 'fat'], - 'after': ['afret', 'after'], - 'afteract': ['afteract', 'artefact', 'farcetta', 'farctate'], - 'afterage': ['afterage', 'fregatae'], - 'afterblow': ['afterblow', 'batfowler'], - 'aftercome': ['aftercome', 'forcemeat'], - 'aftercrop': ['aftercrop', 'prefactor'], - 'aftergo': ['aftergo', 'fagoter'], - 'afterguns': ['afterguns', 'transfuge'], - 'aftermath': ['aftermath', 'hamfatter'], - 'afterstate': ['afterstate', 'aftertaste'], - 'aftertaste': ['afterstate', 'aftertaste'], - 'afunctional': ['afunctional', 'unfactional'], - 'agade': ['adage', 'agade'], - 'agal': ['agal', 'agla', 'alga', 'gala'], - 'agalite': ['agalite', 'tailage', 'taliage'], - 'agalma': ['agalma', 'malaga'], - 'agama': ['agama', 'amaga'], - 'agamid': ['agamid', 'madiga'], - 'agapeti': ['agapeti', 'agpaite'], - 'agapornis': ['agapornis', 'sporangia'], - 'agar': ['agar', 'agra', 'gara', 'raga'], - 'agaricin': ['agaricin', 'garcinia'], - 'agau': ['agau', 'agua'], - 'aged': ['aged', 'egad', 'gade'], - 'ageless': ['ageless', 'eagless'], - 'agen': ['agen', 'gaen', 'gane', 'gean', 'gena'], - 'agenesic': ['agenesic', 'genesiac'], - 'agenesis': ['agenesis', 'assignee'], - 'agential': ['agential', 'alginate'], - 'agentive': ['agentive', 'negative'], - 'ager': ['ager', 'agre', 'gare', 'gear', 'rage'], - 'agger': ['agger', 'gager', 'regga'], - 'aggeration': ['aggeration', 'agregation'], - 'aggry': ['aggry', 'raggy'], - 'agialid': ['agialid', 'galidia'], - 'agib': ['agib', 'biga', 'gabi'], - 'agiel': ['agiel', 'agile', 'galei'], - 'agile': ['agiel', 'agile', 'galei'], - 'agileness': ['agileness', 'signalese'], - 'agistment': ['agistment', 'magnetist'], - 'agistor': ['agistor', 'agrotis', 'orgiast'], - 'agla': ['agal', 'agla', 'alga', 'gala'], - 'aglaos': ['aglaos', 'salago'], - 'aglare': ['aglare', 'alegar', 'galera', 'laager'], - 'aglet': ['aglet', 'galet'], - 'agley': ['agley', 'galey'], - 'agmatine': ['agmatine', 'agminate'], - 'agminate': ['agmatine', 'agminate'], - 'agminated': ['agminated', 'diamagnet'], - 'agnail': ['agnail', 'linaga'], - 'agname': ['agname', 'manage'], - 'agnel': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'agnes': ['agnes', 'gesan'], - 'agnize': ['agnize', 'ganzie'], - 'agnosis': ['agnosis', 'ganosis'], - 'agnostic': ['agnostic', 'coasting'], - 'agnus': ['agnus', 'angus', 'sugan'], - 'ago': ['ago', 'goa'], - 'agon': ['agon', 'ango', 'gaon', 'goan', 'gona'], - 'agonal': ['agonal', 'angola'], - 'agone': ['agone', 'genoa'], - 'agoniadin': ['agoniadin', 'anangioid', 'ganoidian'], - 'agonic': ['agonic', 'angico', 'gaonic', 'goniac'], - 'agonista': ['agonista', 'santiago'], - 'agonizer': ['agonizer', 'orangize', 'organize'], - 'agpaite': ['agapeti', 'agpaite'], - 'agra': ['agar', 'agra', 'gara', 'raga'], - 'agral': ['agral', 'argal'], - 'agrania': ['agrania', 'angaria', 'niagara'], - 'agre': ['ager', 'agre', 'gare', 'gear', 'rage'], - 'agree': ['agree', 'eager', 'eagre'], - 'agreed': ['agreed', 'geared'], - 'agregation': ['aggeration', 'agregation'], - 'agrege': ['agrege', 'raggee'], - 'agrestian': ['agrestian', 'gerastian', 'stangeria'], - 'agrestic': ['agrestic', 'ergastic'], - 'agria': ['agria', 'igara'], - 'agricolist': ['agricolist', 'algoristic'], - 'agrilus': ['agrilus', 'gularis'], - 'agrin': ['agrin', 'grain'], - 'agrito': ['agrito', 'ortiga'], - 'agroan': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'], - 'agrom': ['agrom', 'morga'], - 'agrotis': ['agistor', 'agrotis', 'orgiast'], - 'aground': ['aground', 'durango'], - 'agrufe': ['agrufe', 'gaufer', 'gaufre'], - 'agrypnia': ['agrypnia', 'paginary'], - 'agsam': ['agsam', 'magas'], - 'agua': ['agau', 'agua'], - 'ague': ['ague', 'auge'], - 'agush': ['agush', 'saugh'], - 'agust': ['agust', 'tsuga'], - 'agy': ['agy', 'gay'], - 'ah': ['ah', 'ha'], - 'ahem': ['ahem', 'haem', 'hame'], - 'ahet': ['ahet', 'haet', 'hate', 'heat', 'thea'], - 'ahey': ['ahey', 'eyah', 'yeah'], - 'ahind': ['ahind', 'dinah'], - 'ahint': ['ahint', 'hiant', 'tahin'], - 'ahir': ['ahir', 'hair'], - 'ahmed': ['ahmed', 'hemad'], - 'ahmet': ['ahmet', 'thema'], - 'aho': ['aho', 'hao'], - 'ahom': ['ahom', 'moha'], - 'ahong': ['ahong', 'hogan'], - 'ahorse': ['ahorse', 'ashore', 'hoarse', 'shorea'], - 'ahoy': ['ahoy', 'hoya'], - 'ahriman': ['ahriman', 'miranha'], - 'ahsan': ['ahsan', 'hansa', 'hasan'], - 'aht': ['aht', 'hat', 'tha'], - 'ahtena': ['ahtena', 'aneath', 'athena'], - 'ahu': ['ahu', 'auh', 'hau'], - 'ahum': ['ahum', 'huma'], - 'ahunt': ['ahunt', 'haunt', 'thuan', 'unhat'], - 'aid': ['aid', 'ida'], - 'aidance': ['aidance', 'canidae'], - 'aide': ['aide', 'idea'], - 'aidenn': ['aidenn', 'andine', 'dannie', 'indane'], - 'aider': ['aider', 'deair', 'irade', 'redia'], - 'aides': ['aides', 'aside', 'sadie'], - 'aiel': ['aiel', 'aile', 'elia'], - 'aiglet': ['aiglet', 'ligate', 'taigle', 'tailge'], - 'ail': ['ail', 'ila', 'lai'], - 'ailantine': ['ailantine', 'antialien'], - 'ailanto': ['ailanto', 'alation', 'laotian', 'notalia'], - 'aile': ['aiel', 'aile', 'elia'], - 'aileen': ['aileen', 'elaine'], - 'aileron': ['aileron', 'alienor'], - 'ailing': ['ailing', 'angili', 'nilgai'], - 'ailment': ['ailment', 'aliment'], - 'aim': ['aim', 'ami', 'ima'], - 'aimer': ['aimer', 'maire', 'marie', 'ramie'], - 'aimless': ['aimless', 'melissa', 'seismal'], - 'ainaleh': ['ainaleh', 'halenia'], - 'aint': ['aint', 'anti', 'tain', 'tina'], - 'aion': ['aion', 'naio'], - 'air': ['air', 'ira', 'ria'], - 'aira': ['aira', 'aria', 'raia'], - 'airan': ['airan', 'arain', 'arian'], - 'airdrome': ['airdrome', 'armoried'], - 'aire': ['aire', 'eria'], - 'airer': ['airer', 'arrie'], - 'airlike': ['airlike', 'kiliare'], - 'airman': ['airman', 'amarin', 'marian', 'marina', 'mirana'], - 'airplane': ['airplane', 'perianal'], - 'airplanist': ['airplanist', 'triplasian'], - 'airt': ['airt', 'rita', 'tari', 'tiar'], - 'airy': ['airy', 'yair'], - 'aisle': ['aisle', 'elias'], - 'aisled': ['aisled', 'deasil', 'ladies', 'sailed'], - 'aisling': ['aisling', 'sailing'], - 'aissor': ['aissor', 'rissoa'], - 'ait': ['ait', 'ati', 'ita', 'tai'], - 'aitch': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'], - 'aition': ['aition', 'itonia'], - 'aizle': ['aizle', 'eliza'], - 'ajar': ['ajar', 'jara', 'raja'], - 'ajhar': ['ajhar', 'rajah'], - 'ajuga': ['ajuga', 'jagua'], - 'ak': ['ak', 'ka'], - 'akal': ['akal', 'kala'], - 'akali': ['akali', 'alaki'], - 'akan': ['akan', 'kana'], - 'ake': ['ake', 'kea'], - 'akebi': ['akebi', 'bakie'], - 'akha': ['akha', 'kaha'], - 'akim': ['akim', 'maki'], - 'akin': ['akin', 'kina', 'naik'], - 'akka': ['akka', 'kaka'], - 'aknee': ['aknee', 'ankee', 'keena'], - 'ako': ['ako', 'koa', 'oak', 'oka'], - 'akoasma': ['akoasma', 'amakosa'], - 'aku': ['aku', 'auk', 'kua'], - 'al': ['al', 'la'], - 'ala': ['aal', 'ala'], - 'alacritous': ['alacritous', 'lactarious', 'lactosuria'], - 'alain': ['alain', 'alani', 'liana'], - 'alaki': ['akali', 'alaki'], - 'alalite': ['alalite', 'tillaea'], - 'alamo': ['alamo', 'aloma'], - 'alan': ['alan', 'anal', 'lana'], - 'alangin': ['alangin', 'anginal', 'anglian', 'nagnail'], - 'alangine': ['alangine', 'angelina', 'galenian'], - 'alani': ['alain', 'alani', 'liana'], - 'alanine': ['alanine', 'linnaea'], - 'alans': ['alans', 'lanas', 'nasal'], - 'alantic': ['actinal', 'alantic', 'alicant', 'antical'], - 'alantolic': ['alantolic', 'allantoic'], - 'alanyl': ['alanyl', 'anally'], - 'alares': ['alares', 'arales'], - 'alaria': ['alaria', 'aralia'], - 'alaric': ['alaric', 'racial'], - 'alarm': ['alarm', 'malar', 'maral', 'marla', 'ramal'], - 'alarmable': ['alarmable', 'ambarella'], - 'alarmedly': ['alarmedly', 'medallary'], - 'alarming': ['alarming', 'marginal'], - 'alarmingly': ['alarmingly', 'marginally'], - 'alarmist': ['alarmist', 'alastrim'], - 'alas': ['alas', 'lasa'], - 'alastair': ['alastair', 'salariat'], - 'alaster': ['alaster', 'tarsale'], - 'alastrim': ['alarmist', 'alastrim'], - 'alatern': ['alatern', 'lateran'], - 'alaternus': ['alaternus', 'saturnale'], - 'alation': ['ailanto', 'alation', 'laotian', 'notalia'], - 'alb': ['alb', 'bal', 'lab'], - 'alba': ['alba', 'baal', 'bala'], - 'alban': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'], - 'albanite': ['albanite', 'balanite', 'nabalite'], - 'albardine': ['albardine', 'drainable'], - 'albarium': ['albarium', 'brumalia'], - 'albata': ['albata', 'atabal', 'balata'], - 'albatros': ['abrastol', 'albatros'], - 'albe': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'albedo': ['albedo', 'doable'], - 'albee': ['abele', 'albee'], - 'albeit': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'albert': ['albert', 'balter', 'labret', 'tabler'], - 'alberta': ['alberta', 'latebra', 'ratable'], - 'albertina': ['albertina', 'trainable'], - 'alberto': ['alberto', 'bloater', 'latrobe'], - 'albetad': ['albetad', 'datable'], - 'albi': ['albi', 'bail', 'bali'], - 'albian': ['albian', 'bilaan'], - 'albin': ['albin', 'binal', 'blain'], - 'albino': ['albino', 'albion', 'alboin', 'oliban'], - 'albion': ['albino', 'albion', 'alboin', 'oliban'], - 'albite': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'alboin': ['albino', 'albion', 'alboin', 'oliban'], - 'alboranite': ['alboranite', 'rationable'], - 'albronze': ['albronze', 'blazoner'], - 'albuca': ['albuca', 'bacula'], - 'albuminate': ['albuminate', 'antelabium'], - 'alburnum': ['alburnum', 'laburnum'], - 'alcaic': ['alcaic', 'cicala'], - 'alcaide': ['alcaide', 'alcidae'], - 'alcamine': ['alcamine', 'analcime', 'calamine', 'camelina'], - 'alcantarines': ['alcantarines', 'lancasterian'], - 'alcedo': ['alcedo', 'dacelo'], - 'alces': ['alces', 'casel', 'scale'], - 'alchemic': ['alchemic', 'chemical'], - 'alchemistic': ['alchemistic', 'hemiclastic'], - 'alchera': ['alchera', 'archeal'], - 'alchitran': ['alchitran', 'clathrina'], - 'alcicornium': ['acroclinium', 'alcicornium'], - 'alcidae': ['alcaide', 'alcidae'], - 'alcidine': ['alcidine', 'danielic', 'lecaniid'], - 'alcine': ['alcine', 'ancile'], - 'alco': ['alco', 'coal', 'cola', 'loca'], - 'alcoate': ['alcoate', 'coelata'], - 'alcogel': ['alcogel', 'collage'], - 'alcor': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'], - 'alcoran': ['alcoran', 'ancoral', 'carolan'], - 'alcoranic': ['acronical', 'alcoranic'], - 'alcove': ['alcove', 'coeval', 'volcae'], - 'alcyon': ['alcyon', 'cyanol'], - 'alcyone': ['alcyone', 'cyanole'], - 'aldamine': ['aldamine', 'lamnidae'], - 'aldeament': ['aldeament', 'mandelate'], - 'alder': ['alder', 'daler', 'lader'], - 'aldermanry': ['aldermanry', 'marylander'], - 'aldern': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'aldime': ['aldime', 'mailed', 'medial'], - 'aldine': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'], - 'aldus': ['aldus', 'sauld'], - 'ale': ['ale', 'lea'], - 'alec': ['acle', 'alec', 'lace'], - 'aleconner': ['aleconner', 'noncereal'], - 'alecost': ['alecost', 'lactose', 'scotale', 'talcose'], - 'alectoris': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'], - 'alectrion': ['alectrion', 'clarionet', 'crotaline', 'locarnite'], - 'alectryon': ['alectryon', 'tolerancy'], - 'alecup': ['alecup', 'clupea'], - 'alef': ['alef', 'feal', 'flea', 'leaf'], - 'aleft': ['aleft', 'alfet', 'fetal', 'fleta'], - 'alegar': ['aglare', 'alegar', 'galera', 'laager'], - 'alem': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'alemanni': ['alemanni', 'melanian'], - 'alemite': ['alemite', 'elamite'], - 'alen': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'], - 'aleph': ['aleph', 'pheal'], - 'alepot': ['alepot', 'pelota'], - 'alerce': ['alerce', 'cereal', 'relace'], - 'alerse': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'], - 'alert': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'alertly': ['alertly', 'elytral'], - 'alestake': ['alestake', 'eastlake'], - 'aletap': ['aletap', 'palate', 'platea'], - 'aletris': ['aletris', 'alister', 'listera', 'realist', 'saltier'], - 'aleuronic': ['aleuronic', 'urceolina'], - 'aleut': ['aleut', 'atule'], - 'aleutic': ['aleutic', 'auletic', 'caulite', 'lutecia'], - 'alevin': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'], - 'alex': ['alex', 'axel', 'axle'], - 'alexandrian': ['alexandrian', 'alexandrina'], - 'alexandrina': ['alexandrian', 'alexandrina'], - 'alexin': ['alexin', 'xenial'], - 'aleyard': ['aleyard', 'already'], - 'alfenide': ['alfenide', 'enfilade'], - 'alfet': ['aleft', 'alfet', 'fetal', 'fleta'], - 'alfred': ['alfred', 'fardel'], - 'alfur': ['alfur', 'fural'], - 'alga': ['agal', 'agla', 'alga', 'gala'], - 'algae': ['algae', 'galea'], - 'algal': ['algal', 'galla'], - 'algebar': ['algebar', 'algebra'], - 'algebra': ['algebar', 'algebra'], - 'algedi': ['algedi', 'galeid'], - 'algedo': ['algedo', 'geodal'], - 'algedonic': ['algedonic', 'genocidal'], - 'algenib': ['algenib', 'bealing', 'belgian', 'bengali'], - 'algerian': ['algerian', 'geranial', 'regalian'], - 'algernon': ['algernon', 'nonglare'], - 'algesia': ['algesia', 'sailage'], - 'algesis': ['algesis', 'glassie'], - 'algieba': ['algieba', 'bailage'], - 'algin': ['algin', 'align', 'langi', 'liang', 'linga'], - 'alginate': ['agential', 'alginate'], - 'algine': ['algine', 'genial', 'linage'], - 'algist': ['algist', 'gaslit'], - 'algometer': ['algometer', 'glomerate'], - 'algometric': ['algometric', 'melotragic'], - 'algomian': ['algomian', 'magnolia'], - 'algor': ['algor', 'argol', 'goral', 'largo'], - 'algoristic': ['agricolist', 'algoristic'], - 'algorithm': ['algorithm', 'logarithm'], - 'algorithmic': ['algorithmic', 'logarithmic'], - 'algraphic': ['algraphic', 'graphical'], - 'algum': ['algum', 'almug', 'glaum', 'gluma', 'mulga'], - 'alibility': ['alibility', 'liability'], - 'alible': ['alible', 'belial', 'labile', 'liable'], - 'alicant': ['actinal', 'alantic', 'alicant', 'antical'], - 'alice': ['alice', 'celia', 'ileac'], - 'alichel': ['alichel', 'challie', 'helical'], - 'alida': ['adlai', 'alida'], - 'alien': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'alienation': ['alienation', 'alineation'], - 'alienator': ['alienator', 'rationale'], - 'alienism': ['alienism', 'milesian'], - 'alienor': ['aileron', 'alienor'], - 'alif': ['alif', 'fail'], - 'aligerous': ['aligerous', 'glaireous'], - 'align': ['algin', 'align', 'langi', 'liang', 'linga'], - 'aligner': ['aligner', 'engrail', 'realign', 'reginal'], - 'alignment': ['alignment', 'lamenting'], - 'alike': ['alike', 'lakie'], - 'alikeness': ['alikeness', 'leakiness'], - 'alima': ['alima', 'lamia'], - 'aliment': ['ailment', 'aliment'], - 'alimenter': ['alimenter', 'marteline'], - 'alimentic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'], - 'alimonied': ['alimonied', 'maleinoid'], - 'alin': ['alin', 'anil', 'lain', 'lina', 'nail'], - 'aline': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'alineation': ['alienation', 'alineation'], - 'aliped': ['aliped', 'elapid'], - 'aliptes': ['aliptes', 'pastile', 'talipes'], - 'aliptic': ['aliptic', 'aplitic'], - 'aliseptal': ['aliseptal', 'pallasite'], - 'alish': ['alish', 'hilsa'], - 'alisier': ['alisier', 'israeli'], - 'aliso': ['aliso', 'alois'], - 'alison': ['alison', 'anolis'], - 'alisp': ['alisp', 'lapsi'], - 'alist': ['alist', 'litas', 'slait', 'talis'], - 'alister': ['aletris', 'alister', 'listera', 'realist', 'saltier'], - 'alit': ['alit', 'tail', 'tali'], - 'alite': ['alite', 'laeti'], - 'aliunde': ['aliunde', 'unideal'], - 'aliveness': ['aliveness', 'vealiness'], - 'alix': ['alix', 'axil'], - 'alk': ['alk', 'lak'], - 'alkalizer': ['alkalizer', 'lazarlike'], - 'alkamin': ['alkamin', 'malakin'], - 'alkene': ['alkene', 'lekane'], - 'alkes': ['alkes', 'sakel', 'slake'], - 'alkine': ['alkine', 'ilkane', 'inlake', 'inleak'], - 'alky': ['alky', 'laky'], - 'alkylic': ['alkylic', 'lilacky'], - 'allagite': ['allagite', 'alligate', 'talliage'], - 'allah': ['allah', 'halal'], - 'allantoic': ['alantolic', 'allantoic'], - 'allay': ['allay', 'yalla'], - 'allayer': ['allayer', 'yallaer'], - 'allbone': ['allbone', 'bellona'], - 'alle': ['alle', 'ella', 'leal'], - 'allecret': ['allecret', 'cellaret'], - 'allegate': ['allegate', 'ellagate'], - 'allegorist': ['allegorist', 'legislator'], - 'allergen': ['allergen', 'generall'], - 'allergia': ['allergia', 'galleria'], - 'allergin': ['allergin', 'gralline'], - 'allergy': ['allergy', 'gallery', 'largely', 'regally'], - 'alliable': ['alliable', 'labiella'], - 'alliably': ['alliably', 'labially'], - 'alliance': ['alliance', 'canaille'], - 'alliancer': ['alliancer', 'ralliance'], - 'allie': ['allie', 'leila', 'lelia'], - 'allies': ['allies', 'aselli'], - 'alligate': ['allagite', 'alligate', 'talliage'], - 'allium': ['allium', 'alulim', 'muilla'], - 'allocation': ['allocation', 'locational'], - 'allocute': ['allocute', 'loculate'], - 'allocution': ['allocution', 'loculation'], - 'allogenic': ['allogenic', 'collegian'], - 'allonym': ['allonym', 'malonyl'], - 'allopathy': ['allopathy', 'lalopathy'], - 'allopatric': ['allopatric', 'patrilocal'], - 'allot': ['allot', 'atoll'], - 'allothogenic': ['allothogenic', 'ethnological'], - 'allover': ['allover', 'overall'], - 'allower': ['allower', 'reallow'], - 'alloy': ['alloy', 'loyal'], - 'allude': ['allude', 'aludel'], - 'allure': ['allure', 'laurel'], - 'alma': ['alma', 'amla', 'lama', 'mala'], - 'almach': ['almach', 'chamal'], - 'almaciga': ['almaciga', 'macaglia'], - 'almain': ['almain', 'animal', 'lamina', 'manila'], - 'alman': ['alman', 'lamna', 'manal'], - 'almandite': ['almandite', 'laminated'], - 'alme': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'almerian': ['almerian', 'manerial'], - 'almoign': ['almoign', 'loaming'], - 'almon': ['almon', 'monal'], - 'almond': ['almond', 'dolman'], - 'almoner': ['almoner', 'moneral', 'nemoral'], - 'almonry': ['almonry', 'romanly'], - 'alms': ['alms', 'salm', 'slam'], - 'almuce': ['almuce', 'caelum', 'macule'], - 'almude': ['almude', 'maudle'], - 'almug': ['algum', 'almug', 'glaum', 'gluma', 'mulga'], - 'almuten': ['almuten', 'emulant'], - 'aln': ['aln', 'lan'], - 'alnage': ['alnage', 'angela', 'galena', 'lagena'], - 'alnico': ['alnico', 'cliona', 'oilcan'], - 'alnilam': ['alnilam', 'manilla'], - 'alnoite': ['alnoite', 'elation', 'toenail'], - 'alnuin': ['alnuin', 'unnail'], - 'alo': ['alo', 'lao', 'loa'], - 'alochia': ['acholia', 'alochia'], - 'alod': ['alod', 'dola', 'load', 'odal'], - 'aloe': ['aloe', 'olea'], - 'aloetic': ['aloetic', 'coalite'], - 'aloft': ['aloft', 'float', 'flota'], - 'alogian': ['alogian', 'logania'], - 'alogical': ['alogical', 'colalgia'], - 'aloid': ['aloid', 'dolia', 'idola'], - 'aloin': ['aloin', 'anoil', 'anoli'], - 'alois': ['aliso', 'alois'], - 'aloma': ['alamo', 'aloma'], - 'alone': ['alone', 'anole', 'olena'], - 'along': ['along', 'gonal', 'lango', 'longa', 'nogal'], - 'alonso': ['alonso', 'alsoon', 'saloon'], - 'alonzo': ['alonzo', 'zoonal'], - 'alop': ['alop', 'opal'], - 'alopecist': ['alopecist', 'altiscope', 'epicostal', 'scapolite'], - 'alosa': ['alosa', 'loasa', 'oasal'], - 'alose': ['alose', 'osela', 'solea'], - 'alow': ['alow', 'awol', 'lowa'], - 'aloxite': ['aloxite', 'oxalite'], - 'alp': ['alp', 'lap', 'pal'], - 'alpeen': ['alpeen', 'lenape', 'pelean'], - 'alpen': ['alpen', 'nepal', 'panel', 'penal', 'plane'], - 'alpestral': ['alpestral', 'palestral'], - 'alpestrian': ['alpestrian', 'palestrian', 'psalterian'], - 'alpestrine': ['alpestrine', 'episternal', 'interlapse', 'presential'], - 'alphenic': ['alphenic', 'cephalin'], - 'alphonse': ['alphonse', 'phenosal'], - 'alphos': ['alphos', 'pholas'], - 'alphosis': ['alphosis', 'haplosis'], - 'alpid': ['alpid', 'plaid'], - 'alpieu': ['alpieu', 'paulie'], - 'alpine': ['alpine', 'nepali', 'penial', 'pineal'], - 'alpinist': ['alpinist', 'antislip'], - 'alpist': ['alpist', 'pastil', 'spital'], - 'alraun': ['alraun', 'alruna', 'ranula'], - 'already': ['aleyard', 'already'], - 'alrighty': ['alrighty', 'arightly'], - 'alruna': ['alraun', 'alruna', 'ranula'], - 'alsine': ['alsine', 'neslia', 'saline', 'selina', 'silane'], - 'also': ['also', 'sola'], - 'alsoon': ['alonso', 'alsoon', 'saloon'], - 'alstonidine': ['alstonidine', 'nonidealist'], - 'alstonine': ['alstonine', 'tensional'], - 'alt': ['alt', 'lat', 'tal'], - 'altaian': ['altaian', 'latania', 'natalia'], - 'altaic': ['altaic', 'altica'], - 'altaid': ['adital', 'altaid'], - 'altair': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'], - 'altamira': ['altamira', 'matralia'], - 'altar': ['altar', 'artal', 'ratal', 'talar'], - 'altared': ['altared', 'laterad'], - 'altarist': ['altarist', 'striatal'], - 'alter': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'alterability': ['alterability', 'bilaterality', 'relatability'], - 'alterable': ['alterable', 'relatable'], - 'alterant': ['alterant', 'tarletan'], - 'alterer': ['alterer', 'realter', 'relater'], - 'altern': ['altern', 'antler', 'learnt', 'rental', 'ternal'], - 'alterne': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'], - 'althea': ['althea', 'elatha'], - 'altho': ['altho', 'lhota', 'loath'], - 'althorn': ['althorn', 'anthrol', 'thronal'], - 'altica': ['altaic', 'altica'], - 'altin': ['altin', 'latin'], - 'altiscope': ['alopecist', 'altiscope', 'epicostal', 'scapolite'], - 'altitude': ['altitude', 'latitude'], - 'altitudinal': ['altitudinal', 'latitudinal'], - 'altitudinarian': ['altitudinarian', 'latitudinarian'], - 'alto': ['alto', 'lota'], - 'altrices': ['altrices', 'selictar'], - 'altruism': ['altruism', 'muralist', 'traulism', 'ultraism'], - 'altruist': ['altruist', 'ultraist'], - 'altruistic': ['altruistic', 'truistical', 'ultraistic'], - 'aludel': ['allude', 'aludel'], - 'aludra': ['adular', 'aludra', 'radula'], - 'alulet': ['alulet', 'luteal'], - 'alulim': ['allium', 'alulim', 'muilla'], - 'alum': ['alum', 'maul'], - 'aluminate': ['aluminate', 'alumniate'], - 'aluminide': ['aluminide', 'unimedial'], - 'aluminosilicate': ['aluminosilicate', 'silicoaluminate'], - 'alumna': ['alumna', 'manual'], - 'alumni': ['alumni', 'unmail'], - 'alumniate': ['aluminate', 'alumniate'], - 'alur': ['alur', 'laur', 'lura', 'raul', 'ural'], - 'alure': ['alure', 'ureal'], - 'alurgite': ['alurgite', 'ligature'], - 'aluta': ['aluta', 'taula'], - 'alvan': ['alvan', 'naval'], - 'alvar': ['alvar', 'arval', 'larva'], - 'alveus': ['alveus', 'avulse'], - 'alvin': ['alvin', 'anvil', 'nival', 'vinal'], - 'alvine': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'], - 'aly': ['aly', 'lay'], - 'alypin': ['alypin', 'pialyn'], - 'alytes': ['alytes', 'astely', 'lysate', 'stealy'], - 'am': ['am', 'ma'], - 'ama': ['aam', 'ama'], - 'amacrine': ['amacrine', 'american', 'camerina', 'cinerama'], - 'amadi': ['amadi', 'damia', 'madia', 'maida'], - 'amaethon': ['amaethon', 'thomaean'], - 'amaga': ['agama', 'amaga'], - 'amah': ['amah', 'maha'], - 'amain': ['amain', 'amani', 'amnia', 'anima', 'mania'], - 'amakosa': ['akoasma', 'amakosa'], - 'amalgam': ['amalgam', 'malagma'], - 'amang': ['amang', 'ganam', 'manga'], - 'amani': ['amain', 'amani', 'amnia', 'anima', 'mania'], - 'amanist': ['amanist', 'stamina'], - 'amanitin': ['amanitin', 'maintain'], - 'amanitine': ['amanitine', 'inanimate'], - 'amanori': ['amanori', 'moarian'], - 'amapa': ['amapa', 'apama'], - 'amar': ['amar', 'amra', 'mara', 'rama'], - 'amarin': ['airman', 'amarin', 'marian', 'marina', 'mirana'], - 'amaroid': ['amaroid', 'diorama'], - 'amarth': ['amarth', 'martha'], - 'amass': ['amass', 'assam', 'massa', 'samas'], - 'amasser': ['amasser', 'reamass'], - 'amati': ['amati', 'amita', 'matai'], - 'amatorian': ['amatorian', 'inamorata'], - 'amaurosis': ['amaurosis', 'mosasauri'], - 'amazonite': ['amazonite', 'anatomize'], - 'amba': ['amba', 'maba'], - 'ambar': ['abram', 'ambar'], - 'ambarella': ['alarmable', 'ambarella'], - 'ambash': ['ambash', 'shamba'], - 'ambay': ['ambay', 'mbaya'], - 'ambeer': ['ambeer', 'beamer'], - 'amber': ['amber', 'bearm', 'bemar', 'bream', 'embar'], - 'ambier': ['ambier', 'bremia', 'embira'], - 'ambit': ['ambit', 'imbat'], - 'ambivert': ['ambivert', 'verbatim'], - 'amble': ['amble', 'belam', 'blame', 'mabel'], - 'ambler': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'], - 'ambling': ['ambling', 'blaming'], - 'amblingly': ['amblingly', 'blamingly'], - 'ambo': ['ambo', 'boma'], - 'ambos': ['ambos', 'sambo'], - 'ambrein': ['ambrein', 'mirbane'], - 'ambrette': ['ambrette', 'tambreet'], - 'ambrose': ['ambrose', 'mesobar'], - 'ambrosia': ['ambrosia', 'saboraim'], - 'ambrosin': ['ambrosin', 'barosmin', 'sabromin'], - 'ambry': ['ambry', 'barmy'], - 'ambury': ['ambury', 'aumbry'], - 'ambush': ['ambush', 'shambu'], - 'amchoor': ['amchoor', 'ochroma'], - 'ame': ['ame', 'mae'], - 'ameed': ['adeem', 'ameed', 'edema'], - 'ameen': ['ameen', 'amene', 'enema'], - 'amelification': ['amelification', 'maleficiation'], - 'ameliorant': ['ameliorant', 'lomentaria'], - 'amellus': ['amellus', 'malleus'], - 'amelu': ['amelu', 'leuma', 'ulema'], - 'amelus': ['amelus', 'samuel'], - 'amen': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'], - 'amenability': ['amenability', 'nameability'], - 'amenable': ['amenable', 'nameable'], - 'amend': ['amend', 'mande', 'maned'], - 'amende': ['amende', 'demean', 'meaned', 'nadeem'], - 'amender': ['amender', 'meander', 'reamend', 'reedman'], - 'amends': ['amends', 'desman'], - 'amene': ['ameen', 'amene', 'enema'], - 'amenia': ['amenia', 'anemia'], - 'amenism': ['amenism', 'immanes', 'misname'], - 'amenite': ['amenite', 'etamine', 'matinee'], - 'amenorrheal': ['amenorrheal', 'melanorrhea'], - 'ament': ['ament', 'meant', 'teman'], - 'amental': ['amental', 'leatman'], - 'amentia': ['amentia', 'aminate', 'anamite', 'animate'], - 'amerce': ['amerce', 'raceme'], - 'amercer': ['amercer', 'creamer'], - 'american': ['amacrine', 'american', 'camerina', 'cinerama'], - 'amerind': ['adermin', 'amerind', 'dimeran'], - 'amerism': ['amerism', 'asimmer', 'sammier'], - 'ameristic': ['ameristic', 'armistice', 'artemisic'], - 'amesite': ['amesite', 'mesitae', 'semitae'], - 'ametria': ['ametria', 'artemia', 'meratia', 'ramaite'], - 'ametrope': ['ametrope', 'metapore'], - 'amex': ['amex', 'exam', 'xema'], - 'amgarn': ['amgarn', 'mangar', 'marang', 'ragman'], - 'amhar': ['amhar', 'mahar', 'mahra'], - 'amherstite': ['amherstite', 'hemistater'], - 'amhran': ['amhran', 'harman', 'mahran'], - 'ami': ['aim', 'ami', 'ima'], - 'amia': ['amia', 'maia'], - 'amic': ['amic', 'mica'], - 'amical': ['amical', 'camail', 'lamaic'], - 'amiced': ['amiced', 'decima'], - 'amicicide': ['amicicide', 'cimicidae'], - 'amicron': ['amicron', 'marconi', 'minorca', 'romanic'], - 'amid': ['admi', 'amid', 'madi', 'maid'], - 'amidate': ['adamite', 'amidate'], - 'amide': ['amide', 'damie', 'media'], - 'amidide': ['amidide', 'diamide', 'mididae'], - 'amidin': ['amidin', 'damnii'], - 'amidine': ['amidine', 'diamine'], - 'amidism': ['amidism', 'maidism'], - 'amidist': ['amidist', 'dimatis'], - 'amidon': ['amidon', 'daimon', 'domain'], - 'amidophenol': ['amidophenol', 'monodelphia'], - 'amidst': ['amidst', 'datism'], - 'amigo': ['amigo', 'imago'], - 'amiidae': ['amiidae', 'maiidae'], - 'amil': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'], - 'amiles': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'], - 'amimia': ['amimia', 'miamia'], - 'amimide': ['amimide', 'mimidae'], - 'amin': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'], - 'aminate': ['amentia', 'aminate', 'anamite', 'animate'], - 'amination': ['amination', 'animation'], - 'amine': ['amine', 'anime', 'maine', 'manei'], - 'amini': ['amini', 'animi'], - 'aminize': ['aminize', 'animize', 'azimine'], - 'amino': ['amino', 'inoma', 'naomi', 'omani', 'omina'], - 'aminoplast': ['aminoplast', 'plasmation'], - 'amintor': ['amintor', 'tormina'], - 'amir': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'], - 'amiranha': ['amiranha', 'maharani'], - 'amiray': ['amiray', 'myaria'], - 'amissness': ['amissness', 'massiness'], - 'amita': ['amati', 'amita', 'matai'], - 'amitosis': ['amitosis', 'omasitis'], - 'amixia': ['amixia', 'ixiama'], - 'amla': ['alma', 'amla', 'lama', 'mala'], - 'amli': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'], - 'amlong': ['amlong', 'logman'], - 'amma': ['amma', 'maam'], - 'ammelin': ['ammelin', 'limeman'], - 'ammeline': ['ammeline', 'melamine'], - 'ammeter': ['ammeter', 'metamer'], - 'ammi': ['ammi', 'imam', 'maim', 'mima'], - 'ammine': ['ammine', 'immane'], - 'ammo': ['ammo', 'mamo'], - 'ammonic': ['ammonic', 'mocmain'], - 'ammonolytic': ['ammonolytic', 'commonality'], - 'ammunition': ['ammunition', 'antimonium'], - 'amnestic': ['amnestic', 'semantic'], - 'amnia': ['amain', 'amani', 'amnia', 'anima', 'mania'], - 'amniac': ['amniac', 'caiman', 'maniac'], - 'amnic': ['amnic', 'manic'], - 'amnion': ['amnion', 'minoan', 'nomina'], - 'amnionata': ['amnionata', 'anamniota'], - 'amnionate': ['amnionate', 'anamniote', 'emanation'], - 'amniota': ['amniota', 'itonama'], - 'amniote': ['amniote', 'anomite'], - 'amniotic': ['amniotic', 'mication'], - 'amniotome': ['amniotome', 'momotinae'], - 'amok': ['amok', 'mako'], - 'amole': ['amole', 'maleo'], - 'amomis': ['amomis', 'mimosa'], - 'among': ['among', 'mango'], - 'amor': ['amor', 'maro', 'mora', 'omar', 'roam'], - 'amores': ['amores', 'ramose', 'sorema'], - 'amoret': ['amoret', 'morate'], - 'amorist': ['amorist', 'aortism', 'miastor'], - 'amoritic': ['amoritic', 'microtia'], - 'amorpha': ['amorpha', 'amphora'], - 'amorphic': ['amorphic', 'amphoric'], - 'amorphous': ['amorphous', 'amphorous'], - 'amort': ['amort', 'morat', 'torma'], - 'amortize': ['amortize', 'atomizer'], - 'amos': ['amos', 'soam', 'soma'], - 'amotion': ['amotion', 'otomian'], - 'amount': ['amount', 'moutan', 'outman'], - 'amoy': ['amoy', 'mayo'], - 'ampelis': ['ampelis', 'lepisma'], - 'ampelite': ['ampelite', 'pimelate'], - 'ampelitic': ['ampelitic', 'implicate'], - 'amper': ['amper', 'remap'], - 'amperemeter': ['amperemeter', 'permeameter'], - 'amperian': ['amperian', 'paramine', 'pearmain'], - 'amphicyon': ['amphicyon', 'hypomanic'], - 'amphigenous': ['amphigenous', 'musophagine'], - 'amphiphloic': ['amphiphloic', 'amphophilic'], - 'amphipodous': ['amphipodous', 'hippodamous'], - 'amphitropous': ['amphitropous', 'pastophorium'], - 'amphophilic': ['amphiphloic', 'amphophilic'], - 'amphora': ['amorpha', 'amphora'], - 'amphore': ['amphore', 'morphea'], - 'amphorette': ['amphorette', 'haptometer'], - 'amphoric': ['amorphic', 'amphoric'], - 'amphorous': ['amorphous', 'amphorous'], - 'amphoteric': ['amphoteric', 'metaphoric'], - 'ample': ['ample', 'maple'], - 'ampliate': ['ampliate', 'palamite'], - 'amplification': ['amplification', 'palmification'], - 'amply': ['amply', 'palmy'], - 'ampul': ['ampul', 'pluma'], - 'ampulla': ['ampulla', 'palmula'], - 'amra': ['amar', 'amra', 'mara', 'rama'], - 'amsath': ['amsath', 'asthma'], - 'amsel': ['amsel', 'melas', 'mesal', 'samel'], - 'amsonia': ['amsonia', 'anosmia'], - 'amt': ['amt', 'mat', 'tam'], - 'amulet': ['amulet', 'muleta'], - 'amunam': ['amunam', 'manuma'], - 'amuse': ['amuse', 'mesua'], - 'amused': ['amused', 'masdeu', 'medusa'], - 'amusee': ['amusee', 'saeume'], - 'amuser': ['amuser', 'mauser'], - 'amusgo': ['amusgo', 'sugamo'], - 'amvis': ['amvis', 'mavis'], - 'amy': ['amy', 'may', 'mya', 'yam'], - 'amyelic': ['amyelic', 'mycelia'], - 'amyl': ['amyl', 'lyam', 'myal'], - 'amylan': ['amylan', 'lamany', 'layman'], - 'amylenol': ['amylenol', 'myelonal'], - 'amylidene': ['amylidene', 'mydaleine'], - 'amylin': ['amylin', 'mainly'], - 'amylo': ['amylo', 'loamy'], - 'amylon': ['amylon', 'onymal'], - 'amyotrophy': ['amyotrophy', 'myoatrophy'], - 'amyrol': ['amyrol', 'molary'], - 'an': ['an', 'na'], - 'ana': ['ana', 'naa'], - 'anacara': ['anacara', 'aracana'], - 'anacard': ['anacard', 'caranda'], - 'anaces': ['anaces', 'scaean'], - 'anachorism': ['anachorism', 'chorasmian', 'maraschino'], - 'anacid': ['acnida', 'anacid', 'dacian'], - 'anacreontic': ['anacreontic', 'canceration'], - 'anacusis': ['anacusis', 'ascanius'], - 'anadem': ['anadem', 'maenad'], - 'anadenia': ['anadenia', 'danainae'], - 'anadrom': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'], - 'anaemic': ['acnemia', 'anaemic'], - 'anaeretic': ['anaeretic', 'ecarinate'], - 'anal': ['alan', 'anal', 'lana'], - 'analcime': ['alcamine', 'analcime', 'calamine', 'camelina'], - 'analcite': ['analcite', 'anticlea', 'laitance'], - 'analcitite': ['analcitite', 'catalinite'], - 'analectic': ['acclinate', 'analectic'], - 'analeptical': ['analeptical', 'placentalia'], - 'anally': ['alanyl', 'anally'], - 'analogic': ['analogic', 'calinago'], - 'analogist': ['analogist', 'nostalgia'], - 'anam': ['anam', 'mana', 'naam', 'nama'], - 'anamesite': ['anamesite', 'seamanite'], - 'anamirta': ['anamirta', 'araminta'], - 'anamite': ['amentia', 'aminate', 'anamite', 'animate'], - 'anamniota': ['amnionata', 'anamniota'], - 'anamniote': ['amnionate', 'anamniote', 'emanation'], - 'anan': ['anan', 'anna', 'nana'], - 'ananda': ['ananda', 'danaan'], - 'anandria': ['anandria', 'andriana'], - 'anangioid': ['agoniadin', 'anangioid', 'ganoidian'], - 'ananism': ['ananism', 'samnani'], - 'ananite': ['ananite', 'anatine', 'taenian'], - 'anaphoric': ['anaphoric', 'pharaonic'], - 'anaphorical': ['anaphorical', 'pharaonical'], - 'anapnea': ['anapnea', 'napaean'], - 'anapsid': ['anapsid', 'sapinda'], - 'anapsida': ['anapsida', 'anaspida'], - 'anaptotic': ['anaptotic', 'captation'], - 'anarchic': ['anarchic', 'characin'], - 'anarchism': ['anarchism', 'arachnism'], - 'anarchist': ['anarchist', 'archsaint', 'cantharis'], - 'anarcotin': ['anarcotin', 'cantorian', 'carnation', 'narcotina'], - 'anaretic': ['anaretic', 'arcanite', 'carinate', 'craniate'], - 'anarthropod': ['anarthropod', 'arthropodan'], - 'anas': ['anas', 'ansa', 'saan'], - 'anasa': ['anasa', 'asana'], - 'anaspida': ['anapsida', 'anaspida'], - 'anastaltic': ['anastaltic', 'catalanist'], - 'anat': ['anat', 'anta', 'tana'], - 'anatidae': ['anatidae', 'taeniada'], - 'anatine': ['ananite', 'anatine', 'taenian'], - 'anatocism': ['anatocism', 'anosmatic'], - 'anatole': ['anatole', 'notaeal'], - 'anatolic': ['aconital', 'actional', 'anatolic'], - 'anatomicopathologic': ['anatomicopathologic', 'pathologicoanatomic'], - 'anatomicopathological': ['anatomicopathological', 'pathologicoanatomical'], - 'anatomicophysiologic': ['anatomicophysiologic', 'physiologicoanatomic'], - 'anatomism': ['anatomism', 'nomismata'], - 'anatomize': ['amazonite', 'anatomize'], - 'anatum': ['anatum', 'mantua', 'tamanu'], - 'anay': ['anay', 'yana'], - 'anba': ['anba', 'bana'], - 'ancestor': ['ancestor', 'entosarc'], - 'ancestral': ['ancestral', 'lancaster'], - 'anchat': ['acanth', 'anchat', 'tanach'], - 'anchietin': ['anchietin', 'cathinine'], - 'anchistea': ['anchistea', 'hanseatic'], - 'anchor': ['anchor', 'archon', 'charon', 'rancho'], - 'anchored': ['anchored', 'rondache'], - 'anchorer': ['anchorer', 'ranchero', 'reanchor'], - 'anchoretic': ['acherontic', 'anchoretic'], - 'anchoretical': ['acherontical', 'anchoretical'], - 'anchoretism': ['anchoretism', 'trichomanes'], - 'anchorite': ['anchorite', 'antechoir', 'heatronic', 'hectorian'], - 'anchoritism': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'], - 'ancile': ['alcine', 'ancile'], - 'ancilla': ['aclinal', 'ancilla'], - 'ancillary': ['ancillary', 'carlylian', 'cranially'], - 'ancon': ['ancon', 'canon'], - 'anconitis': ['anconitis', 'antiscion', 'onanistic'], - 'ancony': ['ancony', 'canyon'], - 'ancoral': ['alcoran', 'ancoral', 'carolan'], - 'ancylus': ['ancylus', 'unscaly'], - 'ancyrene': ['ancyrene', 'cerynean'], - 'and': ['and', 'dan'], - 'anda': ['anda', 'dana'], - 'andante': ['andante', 'dantean'], - 'ande': ['ande', 'dane', 'dean', 'edna'], - 'andesitic': ['andesitic', 'dianetics'], - 'andhra': ['andhra', 'dharna'], - 'andi': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'], - 'andian': ['andian', 'danian', 'nidana'], - 'andine': ['aidenn', 'andine', 'dannie', 'indane'], - 'andira': ['adrian', 'andira', 'andria', 'radian', 'randia'], - 'andorite': ['andorite', 'nadorite', 'ordinate', 'rodentia'], - 'andre': ['andre', 'arend', 'daren', 'redan'], - 'andrew': ['andrew', 'redawn', 'wander', 'warden'], - 'andria': ['adrian', 'andira', 'andria', 'radian', 'randia'], - 'andriana': ['anandria', 'andriana'], - 'andrias': ['andrias', 'sardian', 'sarinda'], - 'andric': ['andric', 'cardin', 'rancid'], - 'andries': ['andries', 'isander', 'sardine'], - 'androgynus': ['androgynus', 'gynandrous'], - 'androl': ['androl', 'arnold', 'lardon', 'roland', 'ronald'], - 'andronicus': ['andronicus', 'unsardonic'], - 'androtomy': ['androtomy', 'dynamotor'], - 'anear': ['anear', 'arean', 'arena'], - 'aneath': ['ahtena', 'aneath', 'athena'], - 'anecdota': ['anecdota', 'coadnate'], - 'anele': ['anele', 'elean'], - 'anematosis': ['anematosis', 'menostasia'], - 'anemia': ['amenia', 'anemia'], - 'anemic': ['anemic', 'cinema', 'iceman'], - 'anemograph': ['anemograph', 'phanerogam'], - 'anemographic': ['anemographic', 'phanerogamic'], - 'anemography': ['anemography', 'phanerogamy'], - 'anemone': ['anemone', 'monaene'], - 'anent': ['anent', 'annet', 'nenta'], - 'anepia': ['anepia', 'apinae'], - 'aneretic': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'], - 'anergic': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'], - 'anergy': ['anergy', 'rangey'], - 'anerly': ['anerly', 'nearly'], - 'aneroid': ['aneroid', 'arenoid'], - 'anerotic': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'], - 'anes': ['anes', 'sane', 'sean'], - 'anesis': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'], - 'aneuric': ['aneuric', 'rinceau'], - 'aneurin': ['aneurin', 'uranine'], - 'aneurism': ['aneurism', 'arsenium', 'sumerian'], - 'anew': ['anew', 'wane', 'wean'], - 'angami': ['angami', 'magani', 'magian'], - 'angara': ['angara', 'aranga', 'nagara'], - 'angaria': ['agrania', 'angaria', 'niagara'], - 'angel': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'angela': ['alnage', 'angela', 'galena', 'lagena'], - 'angeldom': ['angeldom', 'lodgeman'], - 'angelet': ['angelet', 'elegant'], - 'angelic': ['angelic', 'galenic'], - 'angelical': ['angelical', 'englacial', 'galenical'], - 'angelically': ['angelically', 'englacially'], - 'angelin': ['angelin', 'leaning'], - 'angelina': ['alangine', 'angelina', 'galenian'], - 'angelique': ['angelique', 'equiangle'], - 'angelo': ['angelo', 'engaol'], - 'angelot': ['angelot', 'tangelo'], - 'anger': ['anger', 'areng', 'grane', 'range'], - 'angerly': ['angerly', 'geranyl'], - 'angers': ['angers', 'sanger', 'serang'], - 'angico': ['agonic', 'angico', 'gaonic', 'goniac'], - 'angie': ['angie', 'gaine'], - 'angild': ['angild', 'lading'], - 'angili': ['ailing', 'angili', 'nilgai'], - 'angina': ['angina', 'inanga'], - 'anginal': ['alangin', 'anginal', 'anglian', 'nagnail'], - 'angiocholitis': ['angiocholitis', 'cholangioitis'], - 'angiochondroma': ['angiochondroma', 'chondroangioma'], - 'angiofibroma': ['angiofibroma', 'fibroangioma'], - 'angioid': ['angioid', 'gonidia'], - 'angiokeratoma': ['angiokeratoma', 'keratoangioma'], - 'angiometer': ['angiometer', 'ergotamine', 'geometrina'], - 'angka': ['angka', 'kanga'], - 'anglaise': ['anglaise', 'gelasian'], - 'angle': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'angled': ['angled', 'dangle', 'englad', 'lagend'], - 'angler': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'], - 'angles': ['angles', 'gansel'], - 'angleworm': ['angleworm', 'lawmonger'], - 'anglian': ['alangin', 'anginal', 'anglian', 'nagnail'], - 'anglic': ['anglic', 'lacing'], - 'anglish': ['anglish', 'ashling'], - 'anglist': ['anglist', 'lasting', 'salting', 'slating', 'staling'], - 'angloid': ['angloid', 'loading'], - 'ango': ['agon', 'ango', 'gaon', 'goan', 'gona'], - 'angola': ['agonal', 'angola'], - 'angolar': ['angolar', 'organal'], - 'angor': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'angora': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'], - 'angriness': ['angriness', 'ranginess'], - 'angrite': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'], - 'angry': ['angry', 'rangy'], - 'angst': ['angst', 'stang', 'tangs'], - 'angster': ['angster', 'garnets', 'nagster', 'strange'], - 'anguid': ['anguid', 'gaduin'], - 'anguine': ['anguine', 'guanine', 'guinean'], - 'angula': ['angula', 'nagual'], - 'angular': ['angular', 'granula'], - 'angulate': ['angulate', 'gaetulan'], - 'anguria': ['anguria', 'gaurian', 'guarani'], - 'angus': ['agnus', 'angus', 'sugan'], - 'anharmonic': ['anharmonic', 'monarchian'], - 'anhematosis': ['anhematosis', 'somasthenia'], - 'anhidrotic': ['anhidrotic', 'trachinoid'], - 'anhistous': ['anhistous', 'isanthous'], - 'anhydridize': ['anhydridize', 'hydrazidine'], - 'anhydrize': ['anhydrize', 'hydrazine'], - 'ani': ['ani', 'ian'], - 'anice': ['anice', 'eniac'], - 'aniconic': ['aniconic', 'ciconian'], - 'aniconism': ['aniconism', 'insomniac'], - 'anicular': ['anicular', 'caulinar'], - 'anicut': ['anicut', 'nautic', 'ticuna', 'tunica'], - 'anidian': ['anidian', 'indiana'], - 'aniente': ['aniente', 'itenean'], - 'anight': ['anight', 'athing'], - 'anil': ['alin', 'anil', 'lain', 'lina', 'nail'], - 'anile': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'anilic': ['anilic', 'clinia'], - 'anilid': ['anilid', 'dialin', 'dianil', 'inlaid'], - 'anilide': ['anilide', 'elaidin'], - 'anilidic': ['anilidic', 'indicial'], - 'anima': ['amain', 'amani', 'amnia', 'anima', 'mania'], - 'animable': ['animable', 'maniable'], - 'animal': ['almain', 'animal', 'lamina', 'manila'], - 'animalic': ['animalic', 'limacina'], - 'animate': ['amentia', 'aminate', 'anamite', 'animate'], - 'animated': ['animated', 'mandaite', 'mantidae'], - 'animater': ['animater', 'marinate'], - 'animating': ['animating', 'imaginant'], - 'animation': ['amination', 'animation'], - 'animator': ['animator', 'tamanoir'], - 'anime': ['amine', 'anime', 'maine', 'manei'], - 'animi': ['amini', 'animi'], - 'animist': ['animist', 'santimi'], - 'animize': ['aminize', 'animize', 'azimine'], - 'animus': ['animus', 'anisum', 'anusim', 'manius'], - 'anionic': ['anionic', 'iconian'], - 'anis': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'], - 'anisal': ['anisal', 'nasial', 'salian', 'salina'], - 'anisate': ['anisate', 'entasia'], - 'anise': ['anise', 'insea', 'siena', 'sinae'], - 'anisette': ['anisette', 'atestine', 'settaine'], - 'anisic': ['anisic', 'sicani', 'sinaic'], - 'anisilic': ['anisilic', 'sicilian'], - 'anisodont': ['anisodont', 'sondation'], - 'anisometric': ['anisometric', - 'creationism', - 'miscreation', - 'ramisection', - 'reactionism'], - 'anisopod': ['anisopod', 'isopodan'], - 'anisoptera': ['anisoptera', 'asperation', 'separation'], - 'anisum': ['animus', 'anisum', 'anusim', 'manius'], - 'anisuria': ['anisuria', 'isaurian'], - 'anisyl': ['anisyl', 'snaily'], - 'anita': ['anita', 'niata', 'tania'], - 'anither': ['anither', 'inearth', 'naither'], - 'ankee': ['aknee', 'ankee', 'keena'], - 'anker': ['anker', 'karen', 'naker'], - 'ankh': ['ankh', 'hank', 'khan'], - 'anklet': ['anklet', 'lanket', 'tankle'], - 'ankoli': ['ankoli', 'kaolin'], - 'ankus': ['ankus', 'kusan'], - 'ankyroid': ['ankyroid', 'dikaryon'], - 'anlace': ['anlace', 'calean'], - 'ann': ['ann', 'nan'], - 'anna': ['anan', 'anna', 'nana'], - 'annale': ['annale', 'anneal'], - 'annaline': ['annaline', 'linnaean'], - 'annalist': ['annalist', 'santalin'], - 'annalize': ['annalize', 'zelanian'], - 'annam': ['annam', 'manna'], - 'annamite': ['annamite', 'manatine'], - 'annard': ['annard', 'randan'], - 'annat': ['annat', 'tanan'], - 'annates': ['annates', 'tannase'], - 'anne': ['anne', 'nane'], - 'anneal': ['annale', 'anneal'], - 'annealer': ['annealer', 'lernaean', 'reanneal'], - 'annelid': ['annelid', 'lindane'], - 'annelism': ['annelism', 'linesman'], - 'anneloid': ['anneloid', 'nonideal'], - 'annet': ['anent', 'annet', 'nenta'], - 'annexer': ['annexer', 'reannex'], - 'annie': ['annie', 'inane'], - 'annite': ['annite', 'innate', 'tinean'], - 'annotine': ['annotine', 'tenonian'], - 'annoy': ['annoy', 'nonya'], - 'annoyancer': ['annoyancer', 'rayonnance'], - 'annoyer': ['annoyer', 'reannoy'], - 'annualist': ['annualist', 'sultanian'], - 'annulation': ['annulation', 'unnational'], - 'annulet': ['annulet', 'nauntle'], - 'annulment': ['annulment', 'tunnelman'], - 'annuloid': ['annuloid', 'uninodal'], - 'anodic': ['adonic', 'anodic'], - 'anodize': ['adonize', 'anodize'], - 'anodynic': ['anodynic', 'cydonian'], - 'anoestrous': ['anoestrous', 'treasonous'], - 'anoestrum': ['anoestrum', 'neuromast'], - 'anoetic': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'], - 'anogenic': ['anogenic', 'canoeing'], - 'anogra': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'], - 'anoil': ['aloin', 'anoil', 'anoli'], - 'anoint': ['anoint', 'nation'], - 'anointer': ['anointer', 'inornate', 'nonirate', 'reanoint'], - 'anole': ['alone', 'anole', 'olena'], - 'anoli': ['aloin', 'anoil', 'anoli'], - 'anolis': ['alison', 'anolis'], - 'anomaliped': ['anomaliped', 'palaemonid'], - 'anomalism': ['anomalism', 'malmaison'], - 'anomalist': ['anomalist', 'atonalism'], - 'anomiidae': ['anomiidae', 'maioidean'], - 'anomite': ['amniote', 'anomite'], - 'anomodont': ['anomodont', 'monodonta'], - 'anomural': ['anomural', 'monaural'], - 'anon': ['anon', 'nona', 'onan'], - 'anophyte': ['anophyte', 'typhoean'], - 'anopia': ['anopia', 'aponia', 'poiana'], - 'anorak': ['anorak', 'korana'], - 'anorchism': ['anorchism', 'harmonics'], - 'anorectic': ['accretion', 'anorectic', 'neoarctic'], - 'anorthic': ['anorthic', 'anthroic', 'tanchoir'], - 'anorthitite': ['anorthitite', 'trithionate'], - 'anorthose': ['anorthose', 'hoarstone'], - 'anosia': ['anosia', 'asonia'], - 'anosmatic': ['anatocism', 'anosmatic'], - 'anosmia': ['amsonia', 'anosmia'], - 'anosmic': ['anosmic', 'masonic'], - 'anoterite': ['anoterite', 'orientate'], - 'another': ['another', 'athenor', 'rheotan'], - 'anotia': ['anotia', 'atonia'], - 'anoxia': ['anoxia', 'axonia'], - 'anoxic': ['anoxic', 'oxanic'], - 'ansa': ['anas', 'ansa', 'saan'], - 'ansar': ['ansar', 'saran', 'sarna'], - 'ansation': ['ansation', 'sonatina'], - 'anseis': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'], - 'ansel': ['ansel', 'slane'], - 'anselm': ['anselm', 'mensal'], - 'anser': ['anser', 'nares', 'rasen', 'snare'], - 'anserine': ['anserine', 'reinsane'], - 'anserous': ['anserous', 'arsenous'], - 'ansu': ['ansu', 'anus'], - 'answerer': ['answerer', 'reanswer'], - 'ant': ['ant', 'nat', 'tan'], - 'anta': ['anat', 'anta', 'tana'], - 'antacrid': ['antacrid', 'cardiant', 'radicant', 'tridacna'], - 'antagonism': ['antagonism', 'montagnais'], - 'antagonist': ['antagonist', 'stagnation'], - 'antal': ['antal', 'natal'], - 'antanemic': ['antanemic', 'cinnamate'], - 'antar': ['antar', 'antra'], - 'antarchistical': ['antarchistical', 'charlatanistic'], - 'ante': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'anteact': ['anteact', 'cantate'], - 'anteal': ['anteal', 'lanate', 'teanal'], - 'antechoir': ['anchorite', 'antechoir', 'heatronic', 'hectorian'], - 'antecornu': ['antecornu', 'connature'], - 'antedate': ['antedate', 'edentata'], - 'antelabium': ['albuminate', 'antelabium'], - 'antelopian': ['antelopian', 'neapolitan', 'panelation'], - 'antelucan': ['antelucan', 'cannulate'], - 'antelude': ['antelude', 'unelated'], - 'anteluminary': ['anteluminary', 'unalimentary'], - 'antemedial': ['antemedial', 'delaminate'], - 'antenatal': ['antenatal', 'atlantean', 'tantalean'], - 'anteriad': ['anteriad', 'atridean', 'dentaria'], - 'anteroinferior': ['anteroinferior', 'inferoanterior'], - 'anterosuperior': ['anterosuperior', 'superoanterior'], - 'antes': ['antes', 'nates', 'stane', 'stean'], - 'anthela': ['anthela', 'ethanal'], - 'anthem': ['anthem', 'hetman', 'mentha'], - 'anthemwise': ['anthemwise', 'whitmanese'], - 'anther': ['anther', 'nather', 'tharen', 'thenar'], - 'anthericum': ['anthericum', 'narthecium'], - 'anthicidae': ['anthicidae', 'tachinidae'], - 'anthinae': ['anthinae', 'athenian'], - 'anthogenous': ['anthogenous', 'neognathous'], - 'anthonomus': ['anthonomus', 'monanthous'], - 'anthophile': ['anthophile', 'lithophane'], - 'anthracia': ['anthracia', 'antiarcha', 'catharina'], - 'anthroic': ['anorthic', 'anthroic', 'tanchoir'], - 'anthrol': ['althorn', 'anthrol', 'thronal'], - 'anthropic': ['anthropic', 'rhapontic'], - 'anti': ['aint', 'anti', 'tain', 'tina'], - 'antiabrin': ['antiabrin', 'britannia'], - 'antiae': ['aetian', 'antiae', 'taenia'], - 'antiager': ['antiager', 'trainage'], - 'antialbumid': ['antialbumid', 'balantidium'], - 'antialien': ['ailantine', 'antialien'], - 'antiarcha': ['anthracia', 'antiarcha', 'catharina'], - 'antiaris': ['antiaris', 'intarsia'], - 'antibenzaldoxime': ['antibenzaldoxime', 'benzantialdoxime'], - 'antiblue': ['antiblue', 'nubilate'], - 'antic': ['actin', 'antic'], - 'antical': ['actinal', 'alantic', 'alicant', 'antical'], - 'anticaste': ['anticaste', 'ataentsic'], - 'anticlea': ['analcite', 'anticlea', 'laitance'], - 'anticlinorium': ['anticlinorium', 'inclinatorium'], - 'anticly': ['anticly', 'cantily'], - 'anticness': ['anticness', 'cantiness', 'incessant'], - 'anticor': ['anticor', 'carotin', 'cortina', 'ontaric'], - 'anticouncil': ['anticouncil', 'inculcation'], - 'anticourt': ['anticourt', 'curtation', 'ructation'], - 'anticous': ['acontius', 'anticous'], - 'anticreative': ['anticreative', 'antireactive'], - 'anticreep': ['anticreep', 'apenteric', 'increpate'], - 'antidote': ['antidote', 'tetanoid'], - 'antidotical': ['antidotical', 'dictational'], - 'antietam': ['antietam', 'manettia'], - 'antiextreme': ['antiextreme', 'exterminate'], - 'antifouler': ['antifouler', 'fluorinate', 'uniflorate'], - 'antifriction': ['antifriction', 'nitrifaction'], - 'antifungin': ['antifungin', 'unfainting'], - 'antigen': ['antigen', 'gentian'], - 'antigenic': ['antigenic', 'gentianic'], - 'antiglare': ['antiglare', 'raglanite'], - 'antigod': ['antigod', 'doating'], - 'antigone': ['antigone', 'negation'], - 'antiheroic': ['antiheroic', 'theorician'], - 'antilemic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'], - 'antilia': ['antilia', 'italian'], - 'antilipase': ['antilipase', 'sapiential'], - 'antilope': ['antilope', 'antipole'], - 'antimallein': ['antimallein', 'inalimental'], - 'antimasque': ['antimasque', 'squamatine'], - 'antimeric': ['antimeric', 'carminite', 'criminate', 'metrician'], - 'antimerina': ['antimerina', 'maintainer', 'remaintain'], - 'antimeter': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'], - 'antimodel': ['antimodel', 'maldonite', 'monilated'], - 'antimodern': ['antimodern', 'ordainment'], - 'antimonial': ['antimonial', 'lamination'], - 'antimonic': ['antimonic', 'antinomic'], - 'antimonium': ['ammunition', 'antimonium'], - 'antimony': ['antimony', 'antinomy'], - 'antimoral': ['antimoral', 'tailorman'], - 'antimosquito': ['antimosquito', 'misquotation'], - 'antinegro': ['antinegro', 'argentino', 'argention'], - 'antinepotic': ['antinepotic', 'pectination'], - 'antineutral': ['antineutral', 'triannulate'], - 'antinial': ['antinial', 'latinian'], - 'antinome': ['antinome', 'nominate'], - 'antinomian': ['antinomian', 'innominata'], - 'antinomic': ['antimonic', 'antinomic'], - 'antinomy': ['antimony', 'antinomy'], - 'antinormal': ['antinormal', 'nonmarital', 'nonmartial'], - 'antiphonetic': ['antiphonetic', 'pentathionic'], - 'antiphonic': ['antiphonic', 'napthionic'], - 'antiphony': ['antiphony', 'typhonian'], - 'antiphrasis': ['antiphrasis', 'artisanship'], - 'antipodic': ['antipodic', 'diapnotic'], - 'antipole': ['antilope', 'antipole'], - 'antipolo': ['antipolo', 'antipool', 'optional'], - 'antipool': ['antipolo', 'antipool', 'optional'], - 'antipope': ['antipope', 'appointe'], - 'antiprotease': ['antiprotease', 'entoparasite'], - 'antipsoric': ['antipsoric', 'ascription', 'crispation'], - 'antiptosis': ['antiptosis', 'panostitis'], - 'antiputrid': ['antiputrid', 'tripudiant'], - 'antipyretic': ['antipyretic', 'pertinacity'], - 'antique': ['antique', 'quinate'], - 'antiquer': ['antiquer', 'quartine'], - 'antirabies': ['antirabies', 'bestiarian'], - 'antiracer': ['antiracer', 'tarriance'], - 'antireactive': ['anticreative', 'antireactive'], - 'antired': ['antired', 'detrain', 'randite', 'trained'], - 'antireducer': ['antireducer', 'reincrudate', 'untraceried'], - 'antiroyalist': ['antiroyalist', 'stationarily'], - 'antirumor': ['antirumor', 'ruminator'], - 'antirun': ['antirun', 'untrain', 'urinant'], - 'antirust': ['antirust', 'naturist'], - 'antiscion': ['anconitis', 'antiscion', 'onanistic'], - 'antisepsin': ['antisepsin', 'paintiness'], - 'antisepsis': ['antisepsis', 'inspissate'], - 'antiseptic': ['antiseptic', 'psittacine'], - 'antiserum': ['antiserum', 'misaunter'], - 'antisi': ['antisi', 'isatin'], - 'antislip': ['alpinist', 'antislip'], - 'antisoporific': ['antisoporific', 'prosification', 'sporification'], - 'antispace': ['antispace', 'panaceist'], - 'antistes': ['antistes', 'titaness'], - 'antisun': ['antisun', 'unsaint', 'unsatin', 'unstain'], - 'antitheism': ['antitheism', 'themistian'], - 'antitonic': ['antitonic', 'nictation'], - 'antitorpedo': ['antitorpedo', 'deportation'], - 'antitrade': ['antitrade', 'attainder'], - 'antitrope': ['antitrope', 'patronite', 'tritanope'], - 'antitropic': ['antitropic', 'tritanopic'], - 'antitropical': ['antitropical', 'practitional'], - 'antivice': ['antivice', 'inactive', 'vineatic'], - 'antler': ['altern', 'antler', 'learnt', 'rental', 'ternal'], - 'antlia': ['antlia', 'latian', 'nalita'], - 'antliate': ['antliate', 'latinate'], - 'antlid': ['antlid', 'tindal'], - 'antling': ['antling', 'tanling'], - 'antoeci': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'], - 'antoecian': ['acetanion', 'antoecian'], - 'anton': ['anton', 'notan', 'tonna'], - 'antproof': ['antproof', 'tanproof'], - 'antra': ['antar', 'antra'], - 'antral': ['antral', 'tarnal'], - 'antre': ['antre', 'arent', 'retan', 'terna'], - 'antrocele': ['antrocele', 'coeternal', 'tolerance'], - 'antronasal': ['antronasal', 'nasoantral'], - 'antroscope': ['antroscope', 'contrapose'], - 'antroscopy': ['antroscopy', 'syncopator'], - 'antrotome': ['antrotome', 'nototrema'], - 'antrustion': ['antrustion', 'nasturtion'], - 'antu': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'], - 'anubis': ['anubis', 'unbias'], - 'anura': ['anura', 'ruana'], - 'anuresis': ['anuresis', 'senarius'], - 'anuretic': ['anuretic', 'centauri', 'centuria', 'teucrian'], - 'anuria': ['anuria', 'urania'], - 'anuric': ['anuric', 'cinura', 'uranic'], - 'anurous': ['anurous', 'uranous'], - 'anury': ['anury', 'unary', 'unray'], - 'anus': ['ansu', 'anus'], - 'anusim': ['animus', 'anisum', 'anusim', 'manius'], - 'anvil': ['alvin', 'anvil', 'nival', 'vinal'], - 'any': ['any', 'nay', 'yan'], - 'aonach': ['aonach', 'choana'], - 'aoristic': ['aoristic', 'iscariot'], - 'aortal': ['aortal', 'rotala'], - 'aortectasis': ['aerostatics', 'aortectasis'], - 'aortism': ['amorist', 'aortism', 'miastor'], - 'aosmic': ['aosmic', 'mosaic'], - 'apachite': ['apachite', 'hepatica'], - 'apalachee': ['acalephae', 'apalachee'], - 'apama': ['amapa', 'apama'], - 'apanthropy': ['apanthropy', 'panatrophy'], - 'apar': ['apar', 'paar', 'para'], - 'apart': ['apart', 'trapa'], - 'apatetic': ['apatetic', 'capitate'], - 'ape': ['ape', 'pea'], - 'apedom': ['apedom', 'pomade'], - 'apeiron': ['apeiron', 'peorian'], - 'apelet': ['apelet', 'ptelea'], - 'apelike': ['apelike', 'pealike'], - 'apeling': ['apeling', 'leaping'], - 'apenteric': ['anticreep', 'apenteric', 'increpate'], - 'apeptic': ['apeptic', 'catpipe'], - 'aper': ['aper', 'pare', 'pear', 'rape', 'reap'], - 'aperch': ['aperch', 'eparch', 'percha', 'preach'], - 'aperitive': ['aperitive', 'petiveria'], - 'apert': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'], - 'apertly': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'], - 'apertness': ['apertness', 'peartness', 'taperness'], - 'apertured': ['apertured', 'departure'], - 'apery': ['apery', 'payer', 'repay'], - 'aphanes': ['aphanes', 'saphena'], - 'aphasia': ['aphasia', 'asaphia'], - 'aphasic': ['aphasic', 'asaphic'], - 'aphemic': ['aphemic', 'impeach'], - 'aphetic': ['aphetic', 'caphite', 'hepatic'], - 'aphetism': ['aphetism', 'mateship', 'shipmate', 'spithame'], - 'aphetize': ['aphetize', 'hepatize'], - 'aphides': ['aphides', 'diphase'], - 'aphidicolous': ['acidophilous', 'aphidicolous'], - 'aphis': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'], - 'aphodian': ['adiaphon', 'aphodian'], - 'aphonic': ['aphonic', 'phocian'], - 'aphorismical': ['aphorismical', 'parochialism'], - 'aphotic': ['aphotic', 'picotah'], - 'aphra': ['aphra', 'harpa', 'parah'], - 'aphrodistic': ['aphrodistic', 'diastrophic'], - 'aphrodite': ['aphrodite', 'atrophied', 'diaporthe'], - 'apian': ['apian', 'apina'], - 'apiator': ['apiator', 'atropia', 'parotia'], - 'apical': ['apical', 'palaic'], - 'apicular': ['apicular', 'piacular'], - 'apina': ['apian', 'apina'], - 'apinae': ['anepia', 'apinae'], - 'apinage': ['aegipan', 'apinage'], - 'apinch': ['apinch', 'chapin', 'phanic'], - 'aping': ['aping', 'ngapi', 'pangi'], - 'apiole': ['apiole', 'leipoa'], - 'apiolin': ['apiolin', 'pinolia'], - 'apionol': ['apionol', 'polonia'], - 'apiose': ['apiose', 'apoise'], - 'apis': ['apis', 'pais', 'pasi', 'saip'], - 'apish': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'], - 'apishly': ['apishly', 'layship'], - 'apism': ['apism', 'sampi'], - 'apitpat': ['apitpat', 'pitapat'], - 'apivorous': ['apivorous', 'oviparous'], - 'aplenty': ['aplenty', 'penalty'], - 'aplite': ['aplite', 'pilate'], - 'aplitic': ['aliptic', 'aplitic'], - 'aplodontia': ['adoptional', 'aplodontia'], - 'aplome': ['aplome', 'malope'], - 'apnea': ['apnea', 'paean'], - 'apneal': ['apneal', 'panela'], - 'apochromat': ['apochromat', 'archoptoma'], - 'apocrita': ['apocrita', 'aproctia'], - 'apocryph': ['apocryph', 'hypocarp'], - 'apod': ['apod', 'dopa'], - 'apoda': ['adpao', 'apoda'], - 'apogon': ['apogon', 'poonga'], - 'apoise': ['apiose', 'apoise'], - 'apolaustic': ['apolaustic', 'autopsical'], - 'apolistan': ['apolistan', 'lapsation'], - 'apollo': ['apollo', 'palolo'], - 'aponia': ['anopia', 'aponia', 'poiana'], - 'aponic': ['aponic', 'ponica'], - 'aporetic': ['aporetic', 'capriote', 'operatic'], - 'aporetical': ['aporetical', 'operatical'], - 'aporia': ['aporia', 'piaroa'], - 'aport': ['aport', 'parto', 'porta'], - 'aportoise': ['aportoise', 'esotropia'], - 'aposporous': ['aposporous', 'aprosopous'], - 'apostil': ['apostil', 'topsail'], - 'apostle': ['apostle', 'aseptol'], - 'apostrophus': ['apostrophus', 'pastophorus'], - 'apothesine': ['apothesine', 'isoheptane'], - 'apout': ['apout', 'taupo'], - 'appall': ['appall', 'palpal'], - 'apparent': ['apparent', 'trappean'], - 'appealer': ['appealer', 'reappeal'], - 'appealing': ['appealing', 'lagniappe', 'panplegia'], - 'appearer': ['appearer', 'rapparee', 'reappear'], - 'append': ['append', 'napped'], - 'applauder': ['applauder', 'reapplaud'], - 'applicator': ['applicator', 'procapital'], - 'applier': ['applier', 'aripple'], - 'appointe': ['antipope', 'appointe'], - 'appointer': ['appointer', 'reappoint'], - 'appointor': ['appointor', 'apportion'], - 'apportion': ['appointor', 'apportion'], - 'apportioner': ['apportioner', 'reapportion'], - 'appraisable': ['appraisable', 'parablepsia'], - 'apprehender': ['apprehender', 'reapprehend'], - 'approacher': ['approacher', 'reapproach'], - 'apricot': ['apricot', 'atropic', 'parotic', 'patrico'], - 'april': ['april', 'pilar', 'ripal'], - 'aprilis': ['aprilis', 'liparis'], - 'aproctia': ['apocrita', 'aproctia'], - 'apronless': ['apronless', 'responsal'], - 'aprosopous': ['aposporous', 'aprosopous'], - 'apse': ['apse', 'pesa', 'spae'], - 'apsidiole': ['apsidiole', 'episodial'], - 'apt': ['apt', 'pat', 'tap'], - 'aptal': ['aptal', 'palta', 'talpa'], - 'aptera': ['aptera', 'parate', 'patera'], - 'apterial': ['apterial', 'parietal'], - 'apteroid': ['apteroid', 'proteida'], - 'aptian': ['aptian', 'patina', 'taipan'], - 'aptly': ['aptly', 'patly', 'platy', 'typal'], - 'aptness': ['aptness', 'patness'], - 'aptote': ['aptote', 'optate', 'potate', 'teapot'], - 'apulian': ['apulian', 'paulian', 'paulina'], - 'apulse': ['apulse', 'upseal'], - 'apus': ['apus', 'supa', 'upas'], - 'aquabelle': ['aquabelle', 'equalable'], - 'aqueoigneous': ['aqueoigneous', 'igneoaqueous'], - 'aquicolous': ['aquicolous', 'loquacious'], - 'ar': ['ar', 'ra'], - 'arab': ['arab', 'arba', 'baar', 'bara'], - 'arabic': ['arabic', 'cairba'], - 'arabinic': ['arabinic', 'cabirian', 'carabini', 'cibarian'], - 'arabis': ['abaris', 'arabis'], - 'arabism': ['abramis', 'arabism'], - 'arabist': ['arabist', 'bartsia'], - 'arabit': ['arabit', 'tabira'], - 'arable': ['ablare', 'arable', 'arbela'], - 'araca': ['acara', 'araca'], - 'aracana': ['anacara', 'aracana'], - 'aracanga': ['aracanga', 'caragana'], - 'arachic': ['arachic', 'archaic'], - 'arachidonic': ['arachidonic', 'characinoid'], - 'arachis': ['arachis', 'asiarch', 'saharic'], - 'arachne': ['arachne', 'archean'], - 'arachnism': ['anarchism', 'arachnism'], - 'arachnitis': ['arachnitis', 'christiana'], - 'arad': ['adar', 'arad', 'raad', 'rada'], - 'arain': ['airan', 'arain', 'arian'], - 'arales': ['alares', 'arales'], - 'aralia': ['alaria', 'aralia'], - 'aralie': ['aerial', 'aralie'], - 'aramaic': ['aramaic', 'cariama'], - 'aramina': ['aramina', 'mariana'], - 'araminta': ['anamirta', 'araminta'], - 'aramus': ['aramus', 'asarum'], - 'araneid': ['araneid', 'ariadne', 'ranidae'], - 'aranein': ['aranein', 'raninae'], - 'aranga': ['angara', 'aranga', 'nagara'], - 'arango': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'], - 'arati': ['arati', 'atria', 'riata', 'tarai', 'tiara'], - 'aration': ['aration', 'otarian'], - 'arauan': ['arauan', 'arauna'], - 'arauna': ['arauan', 'arauna'], - 'arba': ['arab', 'arba', 'baar', 'bara'], - 'arbacin': ['arbacin', 'carabin', 'cariban'], - 'arbalester': ['arbalester', 'arbalestre', 'arrestable'], - 'arbalestre': ['arbalester', 'arbalestre', 'arrestable'], - 'arbalister': ['arbalister', 'breastrail'], - 'arbalo': ['aboral', 'arbalo'], - 'arbela': ['ablare', 'arable', 'arbela'], - 'arbiter': ['arbiter', 'rarebit'], - 'arbored': ['arbored', 'boarder', 'reboard'], - 'arboret': ['arboret', 'roberta', 'taborer'], - 'arboretum': ['arboretum', 'tambourer'], - 'arborist': ['arborist', 'ribroast'], - 'arbuscle': ['arbuscle', 'buscarle'], - 'arbutin': ['arbutin', 'tribuna'], - 'arc': ['arc', 'car'], - 'arca': ['arca', 'cara'], - 'arcadia': ['acardia', 'acarida', 'arcadia'], - 'arcadic': ['arcadic', 'cardiac'], - 'arcane': ['arcane', 'carane'], - 'arcanite': ['anaretic', 'arcanite', 'carinate', 'craniate'], - 'arcate': ['arcate', 'cerata'], - 'arch': ['arch', 'char', 'rach'], - 'archae': ['archae', 'areach'], - 'archaic': ['arachic', 'archaic'], - 'archaism': ['archaism', 'charisma'], - 'archapostle': ['archapostle', 'thecasporal'], - 'archcount': ['archcount', 'crouchant'], - 'arche': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'], - 'archeal': ['alchera', 'archeal'], - 'archean': ['arachne', 'archean'], - 'archer': ['archer', 'charer', 'rechar'], - 'arches': ['arches', 'chaser', 'eschar', 'recash', 'search'], - 'archidome': ['archidome', 'chromidae'], - 'archil': ['archil', 'chiral'], - 'arching': ['arching', 'chagrin'], - 'architis': ['architis', 'rachitis'], - 'archocele': ['archocele', 'cochleare'], - 'archon': ['anchor', 'archon', 'charon', 'rancho'], - 'archontia': ['archontia', 'tocharian'], - 'archoptoma': ['apochromat', 'archoptoma'], - 'archpoet': ['archpoet', 'protheca'], - 'archprelate': ['archprelate', 'pretracheal'], - 'archsaint': ['anarchist', 'archsaint', 'cantharis'], - 'archsee': ['archsee', 'rechase'], - 'archsin': ['archsin', 'incrash'], - 'archy': ['archy', 'chary'], - 'arcidae': ['arcidae', 'caridea'], - 'arcing': ['arcing', 'racing'], - 'arcite': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'], - 'arcked': ['arcked', 'dacker'], - 'arcking': ['arcking', 'carking', 'racking'], - 'arcos': ['arcos', 'crosa', 'oscar', 'sacro'], - 'arctia': ['acrita', 'arctia'], - 'arctian': ['acritan', 'arctian'], - 'arcticize': ['arcticize', 'cicatrize'], - 'arctiid': ['arctiid', 'triacid', 'triadic'], - 'arctoid': ['arctoid', 'carotid', 'dartoic'], - 'arctoidean': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'], - 'arctomys': ['arctomys', 'costmary', 'mascotry'], - 'arctos': ['arctos', 'castor', 'costar', 'scrota'], - 'arcual': ['arcual', 'arcula'], - 'arcuale': ['arcuale', 'caurale'], - 'arcubalist': ['arcubalist', 'ultrabasic'], - 'arcula': ['arcual', 'arcula'], - 'arculite': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'], - 'ardea': ['ardea', 'aread'], - 'ardeb': ['ardeb', 'beard', 'bread', 'debar'], - 'ardelia': ['ardelia', 'laridae', 'radiale'], - 'ardella': ['ardella', 'dareall'], - 'ardency': ['ardency', 'dancery'], - 'ardish': ['ardish', 'radish'], - 'ardoise': ['ardoise', 'aroides', 'soredia'], - 'ardu': ['ardu', 'daur', 'dura'], - 'are': ['aer', 'are', 'ear', 'era', 'rea'], - 'areach': ['archae', 'areach'], - 'aread': ['ardea', 'aread'], - 'areal': ['areal', 'reaal'], - 'arean': ['anear', 'arean', 'arena'], - 'arecaceae': ['aceraceae', 'arecaceae'], - 'arecaceous': ['aceraceous', 'arecaceous'], - 'arecain': ['acarine', 'acraein', 'arecain'], - 'arecolin': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'arecoline': ['arecoline', 'arenicole'], - 'arecuna': ['arecuna', 'aucaner'], - 'ared': ['ared', 'daer', 'dare', 'dear', 'read'], - 'areel': ['areel', 'earle'], - 'arena': ['anear', 'arean', 'arena'], - 'arenaria': ['aerarian', 'arenaria'], - 'arend': ['andre', 'arend', 'daren', 'redan'], - 'areng': ['anger', 'areng', 'grane', 'range'], - 'arenga': ['arenga', 'argean'], - 'arenicole': ['arecoline', 'arenicole'], - 'arenicolite': ['arenicolite', 'ricinoleate'], - 'arenig': ['arenig', 'earing', 'gainer', 'reagin', 'regain'], - 'arenoid': ['aneroid', 'arenoid'], - 'arenose': ['arenose', 'serenoa'], - 'arent': ['antre', 'arent', 'retan', 'terna'], - 'areographer': ['aerographer', 'areographer'], - 'areographic': ['aerographic', 'areographic'], - 'areographical': ['aerographical', 'areographical'], - 'areography': ['aerography', 'areography'], - 'areologic': ['aerologic', 'areologic'], - 'areological': ['aerological', 'areological'], - 'areologist': ['aerologist', 'areologist'], - 'areology': ['aerology', 'areology'], - 'areometer': ['aerometer', 'areometer'], - 'areometric': ['aerometric', 'areometric'], - 'areometry': ['aerometry', 'areometry'], - 'arete': ['arete', 'eater', 'teaer'], - 'argal': ['agral', 'argal'], - 'argali': ['argali', 'garial'], - 'argans': ['argans', 'sangar'], - 'argante': ['argante', 'granate', 'tanager'], - 'argas': ['argas', 'sagra'], - 'argean': ['arenga', 'argean'], - 'argeers': ['argeers', 'greaser', 'serrage'], - 'argel': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'argenol': ['argenol', 'longear'], - 'argent': ['argent', 'garnet', 'garten', 'tanger'], - 'argentamid': ['argentamid', 'marginated'], - 'argenter': ['argenter', 'garneter'], - 'argenteum': ['argenteum', 'augmenter'], - 'argentic': ['argentic', 'citrange'], - 'argentide': ['argentide', 'denigrate', 'dinergate'], - 'argentiferous': ['argentiferous', 'garnetiferous'], - 'argentina': ['argentina', 'tanagrine'], - 'argentine': ['argentine', 'tangerine'], - 'argentino': ['antinegro', 'argentino', 'argention'], - 'argention': ['antinegro', 'argentino', 'argention'], - 'argentite': ['argentite', 'integrate'], - 'argentol': ['argentol', 'gerontal'], - 'argenton': ['argenton', 'negatron'], - 'argentous': ['argentous', 'neotragus'], - 'argentum': ['argentum', 'argument'], - 'arghan': ['arghan', 'hangar'], - 'argil': ['argil', 'glair', 'grail'], - 'arginine': ['arginine', 'nigerian'], - 'argive': ['argive', 'rivage'], - 'argo': ['argo', 'garo', 'gora'], - 'argoan': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'], - 'argol': ['algor', 'argol', 'goral', 'largo'], - 'argolet': ['argolet', 'gloater', 'legator'], - 'argolian': ['argolian', 'gloriana'], - 'argolic': ['argolic', 'cograil'], - 'argolid': ['argolid', 'goliard'], - 'argon': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'argot': ['argot', 'gator', 'gotra', 'groat'], - 'argue': ['argue', 'auger'], - 'argulus': ['argulus', 'lagurus'], - 'argument': ['argentum', 'argument'], - 'argus': ['argus', 'sugar'], - 'arguslike': ['arguslike', 'sugarlike'], - 'argute': ['argute', 'guetar', 'rugate', 'tuareg'], - 'argyle': ['argyle', 'gleary'], - 'arhar': ['arhar', 'arrah'], - 'arhat': ['arhat', 'artha', 'athar'], - 'aria': ['aira', 'aria', 'raia'], - 'ariadne': ['araneid', 'ariadne', 'ranidae'], - 'arian': ['airan', 'arain', 'arian'], - 'arianrhod': ['arianrhod', 'hordarian'], - 'aribine': ['aribine', 'bairnie', 'iberian'], - 'arician': ['arician', 'icarian'], - 'arid': ['arid', 'dari', 'raid'], - 'aridian': ['aridian', 'diarian'], - 'aridly': ['aridly', 'lyraid'], - 'ariegite': ['aegirite', 'ariegite'], - 'aries': ['aries', 'arise', 'raise', 'serai'], - 'arietid': ['arietid', 'iridate'], - 'arietta': ['arietta', 'ratitae'], - 'aright': ['aright', 'graith'], - 'arightly': ['alrighty', 'arightly'], - 'ariidae': ['ariidae', 'raiidae'], - 'aril': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'ariled': ['ariled', 'derail', 'dialer'], - 'arillate': ['arillate', 'tiarella'], - 'arion': ['arion', 'noria'], - 'ariot': ['ariot', 'ratio'], - 'aripple': ['applier', 'aripple'], - 'arise': ['aries', 'arise', 'raise', 'serai'], - 'arisen': ['arisen', 'arsine', 'resina', 'serian'], - 'arist': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'arista': ['arista', 'tarsia'], - 'aristeas': ['aristeas', 'asterias'], - 'aristol': ['aristol', 'oralist', 'ortalis', 'striola'], - 'aristulate': ['aristulate', 'australite'], - 'arite': ['arite', 'artie', 'irate', 'retia', 'tarie'], - 'arithmic': ['arithmic', 'mithraic', 'mithriac'], - 'arius': ['arius', 'asuri'], - 'arizona': ['arizona', 'azorian', 'zonaria'], - 'ark': ['ark', 'kra'], - 'arkab': ['abkar', 'arkab'], - 'arkite': ['arkite', 'karite'], - 'arkose': ['arkose', 'resoak', 'soaker'], - 'arlene': ['arlene', 'leaner'], - 'arleng': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'], - 'arles': ['arles', 'arsle', 'laser', 'seral', 'slare'], - 'arline': ['arline', 'larine', 'linear', 'nailer', 'renail'], - 'arm': ['arm', 'mar', 'ram'], - 'armada': ['armada', 'damara', 'ramada'], - 'armangite': ['armangite', 'marginate'], - 'armata': ['armata', 'matara', 'tamara'], - 'armed': ['armed', 'derma', 'dream', 'ramed'], - 'armenian': ['armenian', 'marianne'], - 'armenic': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'], - 'armer': ['armer', 'rearm'], - 'armeria': ['armeria', 'mararie'], - 'armet': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'armful': ['armful', 'fulmar'], - 'armgaunt': ['armgaunt', 'granatum'], - 'armied': ['admire', 'armied', 'damier', 'dimera', 'merida'], - 'armiferous': ['armiferous', 'ramiferous'], - 'armigerous': ['armigerous', 'ramigerous'], - 'armil': ['armil', 'marli', 'rimal'], - 'armilla': ['armilla', 'marilla'], - 'armillated': ['armillated', 'malladrite', 'mallardite'], - 'arming': ['arming', 'ingram', 'margin'], - 'armistice': ['ameristic', 'armistice', 'artemisic'], - 'armlet': ['armlet', 'malter', 'martel'], - 'armonica': ['armonica', 'macaroni', 'marocain'], - 'armoried': ['airdrome', 'armoried'], - 'armpit': ['armpit', 'impart'], - 'armplate': ['armplate', 'malapert'], - 'arms': ['arms', 'mars'], - 'armscye': ['armscye', 'screamy'], - 'army': ['army', 'mary', 'myra', 'yarm'], - 'arn': ['arn', 'nar', 'ran'], - 'arna': ['arna', 'rana'], - 'arnaut': ['arnaut', 'arunta'], - 'arne': ['arne', 'earn', 'rane'], - 'arneb': ['abner', 'arneb', 'reban'], - 'arni': ['arni', 'iran', 'nair', 'rain', 'rani'], - 'arnica': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'arnold': ['androl', 'arnold', 'lardon', 'roland', 'ronald'], - 'arnotta': ['arnotta', 'natator'], - 'arnotto': ['arnotto', 'notator'], - 'arnut': ['arnut', 'tuarn', 'untar'], - 'aro': ['aro', 'oar', 'ora'], - 'aroast': ['aroast', 'ostara'], - 'arock': ['arock', 'croak'], - 'aroid': ['aroid', 'doria', 'radio'], - 'aroides': ['ardoise', 'aroides', 'soredia'], - 'aroint': ['aroint', 'ration'], - 'aromatic': ['aromatic', 'macrotia'], - 'aroon': ['aroon', 'oraon'], - 'arose': ['arose', 'oreas'], - 'around': ['around', 'arundo'], - 'arpen': ['arpen', 'paren'], - 'arpent': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'arrah': ['arhar', 'arrah'], - 'arras': ['arras', 'sarra'], - 'arrau': ['arrau', 'aurar'], - 'arrayer': ['arrayer', 'rearray'], - 'arrect': ['arrect', 'carter', 'crater', 'recart', 'tracer'], - 'arrector': ['arrector', 'carroter'], - 'arrent': ['arrent', 'errant', 'ranter', 'ternar'], - 'arrest': ['arrest', 'astrer', 'raster', 'starer'], - 'arrestable': ['arbalester', 'arbalestre', 'arrestable'], - 'arrester': ['arrester', 'rearrest'], - 'arresting': ['arresting', 'astringer'], - 'arretine': ['arretine', 'eretrian', 'eritrean', 'retainer'], - 'arride': ['arride', 'raider'], - 'arrie': ['airer', 'arrie'], - 'arriet': ['arriet', 'tarrie'], - 'arrish': ['arrish', 'harris', 'rarish', 'sirrah'], - 'arrive': ['arrive', 'varier'], - 'arrogance': ['arrogance', 'coarrange'], - 'arrogant': ['arrogant', 'tarragon'], - 'arrogative': ['arrogative', 'variegator'], - 'arrowy': ['arrowy', 'yarrow'], - 'arry': ['arry', 'yarr'], - 'arsacid': ['arsacid', 'ascarid'], - 'arse': ['arse', 'rase', 'sare', 'sear', 'sera'], - 'arsedine': ['arsedine', 'arsenide', 'sedanier', 'siderean'], - 'arsenal': ['arsenal', 'ranales'], - 'arsenate': ['arsenate', 'serenata'], - 'arsenation': ['arsenation', 'senatorian', 'sonneratia'], - 'arseniate': ['arseniate', 'saernaite'], - 'arsenic': ['arsenic', 'cerasin', 'sarcine'], - 'arsenide': ['arsedine', 'arsenide', 'sedanier', 'siderean'], - 'arsenite': ['arsenite', 'resinate', 'teresian', 'teresina'], - 'arsenium': ['aneurism', 'arsenium', 'sumerian'], - 'arseniuret': ['arseniuret', 'uniserrate'], - 'arseno': ['arseno', 'reason'], - 'arsenopyrite': ['arsenopyrite', 'pyroarsenite'], - 'arsenous': ['anserous', 'arsenous'], - 'arses': ['arses', 'rasse'], - 'arshine': ['arshine', 'nearish', 'rhesian', 'sherani'], - 'arsine': ['arisen', 'arsine', 'resina', 'serian'], - 'arsino': ['arsino', 'rasion', 'sonrai'], - 'arsis': ['arsis', 'sarsi'], - 'arsle': ['arles', 'arsle', 'laser', 'seral', 'slare'], - 'arson': ['arson', 'saron', 'sonar'], - 'arsonic': ['arsonic', 'saronic'], - 'arsonite': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'], - 'art': ['art', 'rat', 'tar', 'tra'], - 'artaba': ['artaba', 'batara'], - 'artabe': ['abater', 'artabe', 'eartab', 'trabea'], - 'artal': ['altar', 'artal', 'ratal', 'talar'], - 'artamus': ['artamus', 'sumatra'], - 'artarine': ['artarine', 'errantia'], - 'artefact': ['afteract', 'artefact', 'farcetta', 'farctate'], - 'artel': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'artemas': ['artemas', 'astream'], - 'artemia': ['ametria', 'artemia', 'meratia', 'ramaite'], - 'artemis': ['artemis', 'maestri', 'misrate'], - 'artemisic': ['ameristic', 'armistice', 'artemisic'], - 'arterial': ['arterial', 'triareal'], - 'arterin': ['arterin', 'retrain', 'terrain', 'trainer'], - 'arterious': ['arterious', 'autoriser'], - 'artesian': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'], - 'artgum': ['artgum', 'targum'], - 'artha': ['arhat', 'artha', 'athar'], - 'arthel': ['arthel', 'halter', 'lather', 'thaler'], - 'arthemis': ['arthemis', 'marshite', 'meharist'], - 'arthrochondritis': ['arthrochondritis', 'chondroarthritis'], - 'arthromere': ['arthromere', 'metrorrhea'], - 'arthropodan': ['anarthropod', 'arthropodan'], - 'arthrosteitis': ['arthrosteitis', 'ostearthritis'], - 'article': ['article', 'recital'], - 'articled': ['articled', 'lacertid'], - 'artie': ['arite', 'artie', 'irate', 'retia', 'tarie'], - 'artifice': ['actifier', 'artifice'], - 'artisan': ['artisan', 'astrain', 'sartain', 'tsarina'], - 'artisanship': ['antiphrasis', 'artisanship'], - 'artist': ['artist', 'strait', 'strati'], - 'artiste': ['artiste', 'striate'], - 'artlet': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'], - 'artlike': ['artlike', 'ratlike', 'tarlike'], - 'arty': ['arty', 'atry', 'tray'], - 'aru': ['aru', 'rua', 'ura'], - 'aruac': ['aruac', 'carua'], - 'arui': ['arui', 'uria'], - 'arum': ['arum', 'maru', 'mura'], - 'arundo': ['around', 'arundo'], - 'arunta': ['arnaut', 'arunta'], - 'arusa': ['arusa', 'saura', 'usara'], - 'arusha': ['arusha', 'aushar'], - 'arustle': ['arustle', 'estrual', 'saluter', 'saulter'], - 'arval': ['alvar', 'arval', 'larva'], - 'arvel': ['arvel', 'larve', 'laver', 'ravel', 'velar'], - 'arx': ['arx', 'rax'], - 'ary': ['ary', 'ray', 'yar'], - 'arya': ['arya', 'raya'], - 'aryan': ['aryan', 'nayar', 'rayan'], - 'aryl': ['aryl', 'lyra', 'ryal', 'yarl'], - 'as': ['as', 'sa'], - 'asa': ['asa', 'saa'], - 'asak': ['asak', 'kasa', 'saka'], - 'asana': ['anasa', 'asana'], - 'asaph': ['asaph', 'pasha'], - 'asaphia': ['aphasia', 'asaphia'], - 'asaphic': ['aphasic', 'asaphic'], - 'asaprol': ['asaprol', 'parasol'], - 'asarh': ['asarh', 'raash', 'sarah'], - 'asarite': ['asarite', 'asteria', 'atresia', 'setaria'], - 'asarum': ['aramus', 'asarum'], - 'asbest': ['asbest', 'basset'], - 'ascanius': ['anacusis', 'ascanius'], - 'ascare': ['ascare', 'caesar', 'resaca'], - 'ascarid': ['arsacid', 'ascarid'], - 'ascaris': ['ascaris', 'carissa'], - 'ascendance': ['adnascence', 'ascendance'], - 'ascendant': ['adnascent', 'ascendant'], - 'ascender': ['ascender', 'reascend'], - 'ascent': ['ascent', 'secant', 'stance'], - 'ascertain': ['ascertain', 'cartesian', 'cartisane', 'sectarian'], - 'ascertainer': ['ascertainer', 'reascertain', 'secretarian'], - 'ascetic': ['ascetic', 'castice', 'siccate'], - 'ascham': ['ascham', 'chasma'], - 'asci': ['acis', 'asci', 'saic'], - 'ascian': ['ascian', 'sacian', 'scania', 'sicana'], - 'ascidia': ['ascidia', 'diascia'], - 'ascii': ['ascii', 'isiac'], - 'ascites': ['ascites', 'ectasis'], - 'ascitic': ['ascitic', 'sciatic'], - 'ascitical': ['ascitical', 'sciatical'], - 'asclent': ['asclent', 'scantle'], - 'asclepian': ['asclepian', 'spalacine'], - 'ascolichen': ['ascolichen', 'chalcosine'], - 'ascon': ['ascon', 'canso', 'oscan'], - 'ascot': ['ascot', 'coast', 'costa', 'tacso', 'tasco'], - 'ascription': ['antipsoric', 'ascription', 'crispation'], - 'ascry': ['ascry', 'scary', 'scray'], - 'ascula': ['ascula', 'calusa', 'casual', 'casula', 'causal'], - 'asdic': ['asdic', 'sadic'], - 'ase': ['aes', 'ase', 'sea'], - 'asearch': ['asearch', 'eschara'], - 'aselli': ['allies', 'aselli'], - 'asem': ['asem', 'mesa', 'same', 'seam'], - 'asemia': ['asemia', 'saeima'], - 'aseptic': ['aseptic', 'spicate'], - 'aseptol': ['apostle', 'aseptol'], - 'ash': ['ash', 'sah', 'sha'], - 'ashanti': ['ashanti', 'sanhita', 'shaitan', 'thasian'], - 'ashen': ['ashen', 'hanse', 'shane', 'shean'], - 'asher': ['asher', 'share', 'shear'], - 'ashet': ['ashet', 'haste', 'sheat'], - 'ashimmer': ['ashimmer', 'haremism'], - 'ashir': ['ashir', 'shari'], - 'ashling': ['anglish', 'ashling'], - 'ashman': ['ashman', 'shaman'], - 'ashore': ['ahorse', 'ashore', 'hoarse', 'shorea'], - 'ashraf': ['afshar', 'ashraf'], - 'ashur': ['ashur', 'surah'], - 'ashy': ['ashy', 'shay'], - 'asian': ['asian', 'naias', 'sanai'], - 'asiarch': ['arachis', 'asiarch', 'saharic'], - 'aside': ['aides', 'aside', 'sadie'], - 'asideu': ['asideu', 'suidae'], - 'asiento': ['aeonist', 'asiento', 'satieno'], - 'asilid': ['asilid', 'sialid'], - 'asilidae': ['asilidae', 'sialidae'], - 'asilus': ['asilus', 'lasius'], - 'asimen': ['asimen', 'inseam', 'mesian'], - 'asimmer': ['amerism', 'asimmer', 'sammier'], - 'asiphonate': ['asiphonate', 'asthenopia'], - 'ask': ['ask', 'sak'], - 'asker': ['asker', 'reask', 'saker', 'sekar'], - 'askew': ['askew', 'wakes'], - 'askip': ['askip', 'spaik'], - 'askr': ['askr', 'kras', 'sark'], - 'aslant': ['aslant', 'lansat', 'natals', 'santal'], - 'asleep': ['asleep', 'elapse', 'please'], - 'aslope': ['aslope', 'poales'], - 'asmalte': ['asmalte', 'maltase'], - 'asmile': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'], - 'asnort': ['asnort', 'satron'], - 'asoak': ['asoak', 'asoka'], - 'asok': ['asok', 'soak', 'soka'], - 'asoka': ['asoak', 'asoka'], - 'asonia': ['anosia', 'asonia'], - 'asop': ['asop', 'sapo', 'soap'], - 'asor': ['asor', 'rosa', 'soar', 'sora'], - 'asp': ['asp', 'sap', 'spa'], - 'aspartic': ['aspartic', 'satrapic'], - 'aspection': ['aspection', 'stenopaic'], - 'aspectual': ['aspectual', 'capsulate'], - 'aspen': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'], - 'asper': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'], - 'asperate': ['asperate', 'separate'], - 'asperation': ['anisoptera', 'asperation', 'separation'], - 'asperge': ['asperge', 'presage'], - 'asperger': ['asperger', 'presager'], - 'aspergil': ['aspergil', 'splairge'], - 'asperite': ['asperite', 'parietes'], - 'aspermia': ['aspermia', 'sapremia'], - 'aspermic': ['aspermic', 'sapremic'], - 'asperser': ['asperser', 'repasser'], - 'asperulous': ['asperulous', 'pleasurous'], - 'asphalt': ['asphalt', 'spathal', 'taplash'], - 'aspic': ['aspic', 'spica'], - 'aspidinol': ['aspidinol', 'diplasion'], - 'aspirant': ['aspirant', 'partisan', 'spartina'], - 'aspirata': ['aspirata', 'parasita'], - 'aspirate': ['aspirate', 'parasite'], - 'aspire': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'], - 'aspirer': ['aspirer', 'praiser', 'serpari'], - 'aspiring': ['aspiring', 'praising', 'singarip'], - 'aspiringly': ['aspiringly', 'praisingly'], - 'aspish': ['aspish', 'phasis'], - 'asporous': ['asporous', 'saporous'], - 'asport': ['asport', 'pastor', 'sproat'], - 'aspread': ['aspread', 'saperda'], - 'aspring': ['aspring', 'rasping', 'sparing'], - 'asquirm': ['asquirm', 'marquis'], - 'assagai': ['assagai', 'gaiassa'], - 'assailer': ['assailer', 'reassail'], - 'assam': ['amass', 'assam', 'massa', 'samas'], - 'assaulter': ['assaulter', 'reassault', 'saleratus'], - 'assayer': ['assayer', 'reassay'], - 'assemble': ['assemble', 'beamless'], - 'assent': ['assent', 'snaste'], - 'assenter': ['assenter', 'reassent', 'sarsenet'], - 'assentor': ['assentor', 'essorant', 'starnose'], - 'assert': ['assert', 'tasser'], - 'asserter': ['asserter', 'reassert'], - 'assertible': ['assertible', 'resistable'], - 'assertional': ['assertional', 'sensatorial'], - 'assertor': ['assertor', 'assorter', 'oratress', 'reassort'], - 'asset': ['asset', 'tasse'], - 'assets': ['assets', 'stases'], - 'assidean': ['assidean', 'nassidae'], - 'assiento': ['assiento', 'ossetian'], - 'assignee': ['agenesis', 'assignee'], - 'assigner': ['assigner', 'reassign'], - 'assist': ['assist', 'stasis'], - 'assister': ['assister', 'reassist'], - 'associationism': ['associationism', 'misassociation'], - 'assoilment': ['assoilment', 'salmonsite'], - 'assorter': ['assertor', 'assorter', 'oratress', 'reassort'], - 'assuage': ['assuage', 'sausage'], - 'assume': ['assume', 'seamus'], - 'assumer': ['assumer', 'erasmus', 'masseur'], - 'ast': ['ast', 'sat'], - 'astacus': ['acastus', 'astacus'], - 'astare': ['astare', 'satrae'], - 'astart': ['astart', 'strata'], - 'astartian': ['astartian', 'astrantia'], - 'astatine': ['astatine', 'sanitate'], - 'asteep': ['asteep', 'peseta'], - 'asteer': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'astelic': ['astelic', 'elastic', 'latices'], - 'astely': ['alytes', 'astely', 'lysate', 'stealy'], - 'aster': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'], - 'asteria': ['asarite', 'asteria', 'atresia', 'setaria'], - 'asterias': ['aristeas', 'asterias'], - 'asterikos': ['asterikos', 'keratosis'], - 'asterin': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'], - 'asterina': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'], - 'asterion': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'], - 'astern': ['astern', 'enstar', 'stenar', 'sterna'], - 'asternia': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'], - 'asteroid': ['asteroid', 'troiades'], - 'asterope': ['asterope', 'protease'], - 'asthenopia': ['asiphonate', 'asthenopia'], - 'asthma': ['amsath', 'asthma'], - 'asthmogenic': ['asthmogenic', 'mesognathic'], - 'asthore': ['asthore', 'earshot'], - 'astian': ['astian', 'tasian'], - 'astigmism': ['astigmism', 'sigmatism'], - 'astilbe': ['astilbe', 'bestial', 'blastie', 'stabile'], - 'astint': ['astint', 'tanist'], - 'astir': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'astomous': ['astomous', 'somatous'], - 'astonied': ['astonied', 'sedation'], - 'astonisher': ['astonisher', 'reastonish', 'treasonish'], - 'astor': ['astor', 'roast'], - 'astragali': ['astragali', 'tarsalgia'], - 'astrain': ['artisan', 'astrain', 'sartain', 'tsarina'], - 'astral': ['astral', 'tarsal'], - 'astrantia': ['astartian', 'astrantia'], - 'astream': ['artemas', 'astream'], - 'astrer': ['arrest', 'astrer', 'raster', 'starer'], - 'astrict': ['astrict', 'cartist', 'stratic'], - 'astride': ['astride', 'diaster', 'disrate', 'restiad', 'staired'], - 'astrier': ['astrier', 'tarsier'], - 'astringe': ['astringe', 'ganister', 'gantries'], - 'astringent': ['astringent', 'transigent'], - 'astringer': ['arresting', 'astringer'], - 'astrodome': ['astrodome', 'roomstead'], - 'astrofel': ['astrofel', 'forestal'], - 'astroite': ['astroite', 'ostraite', 'storiate'], - 'astrolabe': ['astrolabe', 'roastable'], - 'astrut': ['astrut', 'rattus', 'stuart'], - 'astur': ['astur', 'surat', 'sutra'], - 'asturian': ['asturian', 'austrian', 'saturnia'], - 'astute': ['astute', 'statue'], - 'astylar': ['astylar', 'saltary'], - 'asunder': ['asunder', 'drusean'], - 'asuri': ['arius', 'asuri'], - 'aswail': ['aswail', 'sawali'], - 'asweat': ['asweat', 'awaste'], - 'aswim': ['aswim', 'swami'], - 'aswing': ['aswing', 'sawing'], - 'asyla': ['asyla', 'salay', 'sayal'], - 'asyllabic': ['asyllabic', 'basically'], - 'asyndetic': ['asyndetic', 'cystidean', 'syndicate'], - 'asynergia': ['asynergia', 'gainsayer'], - 'at': ['at', 'ta'], - 'ata': ['ata', 'taa'], - 'atabal': ['albata', 'atabal', 'balata'], - 'atabrine': ['atabrine', 'rabatine'], - 'atacaman': ['atacaman', 'tamanaca'], - 'ataentsic': ['anticaste', 'ataentsic'], - 'atalan': ['atalan', 'tanala'], - 'atap': ['atap', 'pata', 'tapa'], - 'atazir': ['atazir', 'ziarat'], - 'atchison': ['atchison', 'chitosan'], - 'ate': ['ate', 'eat', 'eta', 'tae', 'tea'], - 'ateba': ['abate', 'ateba', 'batea', 'beata'], - 'atebrin': ['atebrin', 'rabinet'], - 'atechnic': ['atechnic', 'catechin', 'technica'], - 'atechny': ['atechny', 'chantey'], - 'ateeter': ['ateeter', 'treatee'], - 'atef': ['atef', 'fate', 'feat'], - 'ateles': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'], - 'atelets': ['atelets', 'tsatlee'], - 'atelier': ['atelier', 'tiralee'], - 'aten': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'atenism': ['atenism', 'inmeats', 'insteam', 'samnite'], - 'atenist': ['atenist', 'instate', 'satient', 'steatin'], - 'ates': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'], - 'atestine': ['anisette', 'atestine', 'settaine'], - 'athar': ['arhat', 'artha', 'athar'], - 'atheism': ['atheism', 'hamites'], - 'athena': ['ahtena', 'aneath', 'athena'], - 'athenian': ['anthinae', 'athenian'], - 'athenor': ['another', 'athenor', 'rheotan'], - 'athens': ['athens', 'hasten', 'snathe', 'sneath'], - 'atherine': ['atherine', 'herniate'], - 'atheris': ['atheris', 'sheriat'], - 'athermic': ['athermic', 'marchite', 'rhematic'], - 'athing': ['anight', 'athing'], - 'athirst': ['athirst', 'rattish', 'tartish'], - 'athletic': ['athletic', 'thetical'], - 'athletics': ['athletics', 'statelich'], - 'athort': ['athort', 'throat'], - 'athrive': ['athrive', 'hervati'], - 'ati': ['ait', 'ati', 'ita', 'tai'], - 'atik': ['atik', 'ikat'], - 'atimon': ['atimon', 'manito', 'montia'], - 'atingle': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'], - 'atip': ['atip', 'pita'], - 'atis': ['atis', 'sita', 'tsia'], - 'atlantean': ['antenatal', 'atlantean', 'tantalean'], - 'atlantic': ['atlantic', 'tantalic'], - 'atlantid': ['atlantid', 'dilatant'], - 'atlantite': ['atlantite', 'tantalite'], - 'atlas': ['atlas', 'salat', 'salta'], - 'atle': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'atlee': ['atlee', 'elate'], - 'atloidean': ['atloidean', 'dealation'], - 'atma': ['atma', 'tama'], - 'atman': ['atman', 'manta'], - 'atmid': ['admit', 'atmid'], - 'atmo': ['atmo', 'atom', 'moat', 'toma'], - 'atmogenic': ['atmogenic', 'geomantic'], - 'atmos': ['atmos', 'stoma', 'tomas'], - 'atmosphere': ['atmosphere', 'shapometer'], - 'atmostea': ['atmostea', 'steatoma'], - 'atnah': ['atnah', 'tanha', 'thana'], - 'atocia': ['atocia', 'coaita'], - 'atokal': ['atokal', 'lakota'], - 'atoll': ['allot', 'atoll'], - 'atom': ['atmo', 'atom', 'moat', 'toma'], - 'atomic': ['atomic', 'matico'], - 'atomics': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'], - 'atomize': ['atomize', 'miaotze'], - 'atomizer': ['amortize', 'atomizer'], - 'atonal': ['atonal', 'latona'], - 'atonalism': ['anomalist', 'atonalism'], - 'atone': ['atone', 'oaten'], - 'atoner': ['atoner', 'norate', 'ornate'], - 'atonia': ['anotia', 'atonia'], - 'atonic': ['action', 'atonic', 'cation'], - 'atony': ['atony', 'ayont'], - 'atop': ['atop', 'pato'], - 'atopic': ['atopic', 'capito', 'copita'], - 'atorai': ['atorai', 'otaria'], - 'atrail': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'], - 'atrepsy': ['atrepsy', 'yapster'], - 'atresia': ['asarite', 'asteria', 'atresia', 'setaria'], - 'atresic': ['atresic', 'stearic'], - 'atresy': ['atresy', 'estray', 'reasty', 'stayer'], - 'atretic': ['atretic', 'citrate'], - 'atria': ['arati', 'atria', 'riata', 'tarai', 'tiara'], - 'atrial': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'], - 'atridean': ['anteriad', 'atridean', 'dentaria'], - 'atrip': ['atrip', 'tapir'], - 'atrocity': ['atrocity', 'citatory'], - 'atrophied': ['aphrodite', 'atrophied', 'diaporthe'], - 'atropia': ['apiator', 'atropia', 'parotia'], - 'atropic': ['apricot', 'atropic', 'parotic', 'patrico'], - 'atroscine': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'], - 'atry': ['arty', 'atry', 'tray'], - 'attacco': ['attacco', 'toccata'], - 'attach': ['attach', 'chatta'], - 'attache': ['attache', 'thecata'], - 'attacher': ['attacher', 'reattach'], - 'attacker': ['attacker', 'reattack'], - 'attain': ['attain', 'tatian'], - 'attainder': ['antitrade', 'attainder'], - 'attainer': ['attainer', 'reattain', 'tertiana'], - 'attar': ['attar', 'tatar'], - 'attempter': ['attempter', 'reattempt'], - 'attender': ['attender', 'nattered', 'reattend'], - 'attention': ['attention', 'tentation'], - 'attentive': ['attentive', 'tentative'], - 'attentively': ['attentively', 'tentatively'], - 'attentiveness': ['attentiveness', 'tentativeness'], - 'atter': ['atter', 'tater', 'teart', 'tetra', 'treat'], - 'attermine': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'], - 'attern': ['attern', 'natter', 'ratten', 'tarten'], - 'attery': ['attery', 'treaty', 'yatter'], - 'attester': ['attester', 'reattest'], - 'attic': ['attic', 'catti', 'tacit'], - 'attical': ['attical', 'cattail'], - 'attinge': ['attinge', 'tintage'], - 'attire': ['attire', 'ratite', 'tertia'], - 'attired': ['attired', 'tradite'], - 'attorn': ['attorn', 'ratton', 'rottan'], - 'attracter': ['attracter', 'reattract'], - 'attractor': ['attractor', 'tractator'], - 'attrite': ['attrite', 'titrate'], - 'attrition': ['attrition', 'titration'], - 'attune': ['attune', 'nutate', 'tauten'], - 'atule': ['aleut', 'atule'], - 'atumble': ['atumble', 'mutable'], - 'atwin': ['atwin', 'twain', 'witan'], - 'atypic': ['atypic', 'typica'], - 'aube': ['aube', 'beau'], - 'aubrite': ['abiuret', 'aubrite', 'biurate', 'rubiate'], - 'aucan': ['acuan', 'aucan'], - 'aucaner': ['arecuna', 'aucaner'], - 'auchlet': ['auchlet', 'cutheal', 'taluche'], - 'auction': ['auction', 'caution'], - 'auctionary': ['auctionary', 'cautionary'], - 'audiencier': ['audiencier', 'enicuridae'], - 'auge': ['ague', 'auge'], - 'augen': ['augen', 'genua'], - 'augend': ['augend', 'engaud', 'unaged'], - 'auger': ['argue', 'auger'], - 'augerer': ['augerer', 'reargue'], - 'augh': ['augh', 'guha'], - 'augmenter': ['argenteum', 'augmenter'], - 'augustan': ['augustan', 'guatusan'], - 'auh': ['ahu', 'auh', 'hau'], - 'auk': ['aku', 'auk', 'kua'], - 'auld': ['auld', 'dual', 'laud', 'udal'], - 'aulete': ['aulete', 'eluate'], - 'auletic': ['aleutic', 'auletic', 'caulite', 'lutecia'], - 'auletris': ['auletris', 'lisuarte'], - 'aulic': ['aulic', 'lucia'], - 'aulostoma': ['aulostoma', 'autosomal'], - 'aulu': ['aulu', 'ulua'], - 'aum': ['aum', 'mau'], - 'aumbry': ['ambury', 'aumbry'], - 'aumil': ['aumil', 'miaul'], - 'aumrie': ['aumrie', 'uremia'], - 'auncel': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'], - 'aunt': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'], - 'auntie': ['auntie', 'uniate'], - 'auntish': ['auntish', 'inhaust'], - 'auntly': ['auntly', 'lutany'], - 'auntsary': ['auntsary', 'unastray'], - 'aura': ['aaru', 'aura'], - 'aural': ['aural', 'laura'], - 'aurar': ['arrau', 'aurar'], - 'auresca': ['auresca', 'caesura'], - 'aureus': ['aureus', 'uraeus'], - 'auricle': ['auricle', 'ciruela'], - 'auricled': ['auricled', 'radicule'], - 'auride': ['auride', 'rideau'], - 'aurin': ['aurin', 'urian'], - 'aurir': ['aurir', 'urari'], - 'auriscalp': ['auriscalp', 'spiracula'], - 'auscult': ['auscult', 'scutula'], - 'aushar': ['arusha', 'aushar'], - 'auster': ['auster', 'reatus'], - 'austere': ['austere', 'euaster'], - 'australian': ['australian', 'saturnalia'], - 'australic': ['australic', 'lactarius'], - 'australite': ['aristulate', 'australite'], - 'austrian': ['asturian', 'austrian', 'saturnia'], - 'aute': ['aute', 'etua'], - 'autecism': ['autecism', 'musicate'], - 'authotype': ['authotype', 'autophyte'], - 'autoclave': ['autoclave', 'vacuolate'], - 'autocrat': ['actuator', 'autocrat'], - 'autoheterosis': ['autoheterosis', 'heteroousiast'], - 'autometric': ['autometric', 'tautomeric'], - 'autometry': ['autometry', 'tautomery'], - 'autophyte': ['authotype', 'autophyte'], - 'autoplast': ['autoplast', 'postulata'], - 'autopsic': ['autopsic', 'captious'], - 'autopsical': ['apolaustic', 'autopsical'], - 'autoradiograph': ['autoradiograph', 'radioautograph'], - 'autoradiographic': ['autoradiographic', 'radioautographic'], - 'autoradiography': ['autoradiography', 'radioautography'], - 'autoriser': ['arterious', 'autoriser'], - 'autosomal': ['aulostoma', 'autosomal'], - 'auxetic': ['auxetic', 'eutaxic'], - 'aval': ['aval', 'lava'], - 'avanti': ['avanti', 'vinata'], - 'avar': ['avar', 'vara'], - 'ave': ['ave', 'eva'], - 'avenge': ['avenge', 'geneva', 'vangee'], - 'avenger': ['avenger', 'engrave'], - 'avenin': ['avenin', 'vienna'], - 'aventine': ['aventine', 'venetian'], - 'aventurine': ['aventurine', 'uninervate'], - 'aver': ['aver', 'rave', 'vare', 'vera'], - 'avera': ['avera', 'erava'], - 'averil': ['averil', 'elvira'], - 'averin': ['averin', 'ravine'], - 'avert': ['avert', 'tarve', 'taver', 'trave'], - 'avertible': ['avertible', 'veritable'], - 'avertin': ['avertin', 'vitrean'], - 'aves': ['aves', 'save', 'vase'], - 'aviatic': ['aviatic', 'viatica'], - 'aviator': ['aviator', 'tovaria'], - 'avicular': ['avicular', 'varicula'], - 'avid': ['avid', 'diva'], - 'avidous': ['avidous', 'vaudois'], - 'avignonese': ['avignonese', 'ingaevones'], - 'avine': ['avine', 'naive', 'vinea'], - 'avirulence': ['acervuline', 'avirulence'], - 'avis': ['avis', 'siva', 'visa'], - 'avitic': ['avitic', 'viatic'], - 'avo': ['avo', 'ova'], - 'avocet': ['avocet', 'octave', 'vocate'], - 'avodire': ['avodire', 'avoider', 'reavoid'], - 'avoider': ['avodire', 'avoider', 'reavoid'], - 'avolation': ['avolation', 'ovational'], - 'avolitional': ['avolitional', 'violational'], - 'avoucher': ['avoucher', 'reavouch'], - 'avower': ['avower', 'reavow'], - 'avshar': ['avshar', 'varsha'], - 'avulse': ['alveus', 'avulse'], - 'aw': ['aw', 'wa'], - 'awag': ['awag', 'waag'], - 'awaiter': ['awaiter', 'reawait'], - 'awakener': ['awakener', 'reawaken'], - 'awarder': ['awarder', 'reaward'], - 'awash': ['awash', 'sawah'], - 'awaste': ['asweat', 'awaste'], - 'awat': ['awat', 'tawa'], - 'awd': ['awd', 'daw', 'wad'], - 'awe': ['awe', 'wae', 'wea'], - 'aweather': ['aweather', 'wheatear'], - 'aweek': ['aweek', 'keawe'], - 'awesome': ['awesome', 'waesome'], - 'awest': ['awest', 'sweat', 'tawse', 'waste'], - 'awfu': ['awfu', 'wauf'], - 'awful': ['awful', 'fulwa'], - 'awhet': ['awhet', 'wheat'], - 'awin': ['awin', 'wain'], - 'awing': ['awing', 'wigan'], - 'awl': ['awl', 'law'], - 'awn': ['awn', 'naw', 'wan'], - 'awned': ['awned', 'dewan', 'waned'], - 'awner': ['awner', 'newar'], - 'awning': ['awning', 'waning'], - 'awny': ['awny', 'wany', 'yawn'], - 'awol': ['alow', 'awol', 'lowa'], - 'awork': ['awork', 'korwa'], - 'awreck': ['awreck', 'wacker'], - 'awrong': ['awrong', 'growan'], - 'awry': ['awry', 'wary'], - 'axel': ['alex', 'axel', 'axle'], - 'axes': ['axes', 'saxe', 'seax'], - 'axil': ['alix', 'axil'], - 'axile': ['axile', 'lexia'], - 'axine': ['axine', 'xenia'], - 'axle': ['alex', 'axel', 'axle'], - 'axon': ['axon', 'noxa', 'oxan'], - 'axonal': ['axonal', 'oxalan'], - 'axonia': ['anoxia', 'axonia'], - 'ay': ['ay', 'ya'], - 'ayah': ['ayah', 'haya'], - 'aye': ['aye', 'yea'], - 'ayont': ['atony', 'ayont'], - 'azimine': ['aminize', 'animize', 'azimine'], - 'azo': ['azo', 'zoa'], - 'azole': ['azole', 'zoeal'], - 'azon': ['azon', 'onza', 'ozan'], - 'azorian': ['arizona', 'azorian', 'zonaria'], - 'azorite': ['azorite', 'zoarite'], - 'azoxine': ['azoxine', 'oxazine'], - 'azteca': ['azteca', 'zacate'], - 'azurine': ['azurine', 'urazine'], - 'ba': ['ab', 'ba'], - 'baa': ['aba', 'baa'], - 'baal': ['alba', 'baal', 'bala'], - 'baalath': ['baalath', 'bathala'], - 'baalite': ['baalite', 'bialate', 'labiate'], - 'baalshem': ['baalshem', 'shamable'], - 'baar': ['arab', 'arba', 'baar', 'bara'], - 'bab': ['abb', 'bab'], - 'baba': ['abba', 'baba'], - 'babbler': ['babbler', 'blabber', 'brabble'], - 'babery': ['babery', 'yabber'], - 'babhan': ['babhan', 'habnab'], - 'babishly': ['babishly', 'shabbily'], - 'babishness': ['babishness', 'shabbiness'], - 'babite': ['babite', 'bebait'], - 'babu': ['babu', 'buba'], - 'babul': ['babul', 'bubal'], - 'baby': ['abby', 'baby'], - 'babylonish': ['babylonish', 'nabobishly'], - 'bac': ['bac', 'cab'], - 'bacao': ['bacao', 'caoba'], - 'bach': ['bach', 'chab'], - 'bache': ['bache', 'beach'], - 'bachel': ['bachel', 'bleach'], - 'bachelor': ['bachelor', 'crabhole'], - 'bacillar': ['bacillar', 'cabrilla'], - 'bacis': ['bacis', 'basic'], - 'backblow': ['backblow', 'blowback'], - 'backen': ['backen', 'neback'], - 'backer': ['backer', 'reback'], - 'backfall': ['backfall', 'fallback'], - 'backfire': ['backfire', 'fireback'], - 'backlog': ['backlog', 'gablock'], - 'backrun': ['backrun', 'runback'], - 'backsaw': ['backsaw', 'sawback'], - 'backset': ['backset', 'setback'], - 'backstop': ['backstop', 'stopback'], - 'backswing': ['backswing', 'swingback'], - 'backward': ['backward', 'drawback'], - 'backway': ['backway', 'wayback'], - 'bacon': ['bacon', 'banco'], - 'bacterial': ['bacterial', 'calibrate'], - 'bacteriform': ['bacteriform', 'bracteiform'], - 'bacterin': ['bacterin', 'centibar'], - 'bacterioid': ['aborticide', 'bacterioid'], - 'bacterium': ['bacterium', 'cumbraite'], - 'bactrian': ['bactrian', 'cantabri'], - 'bacula': ['albuca', 'bacula'], - 'baculi': ['abulic', 'baculi'], - 'baculite': ['baculite', 'cubitale'], - 'baculites': ['baculites', 'bisulcate'], - 'baculoid': ['baculoid', 'cuboidal'], - 'bad': ['bad', 'dab'], - 'badaga': ['badaga', 'dagaba', 'gadaba'], - 'badan': ['badan', 'banda'], - 'bade': ['abed', 'bade', 'bead'], - 'badge': ['badge', 'begad'], - 'badian': ['badian', 'indaba'], - 'badigeon': ['badigeon', 'gabioned'], - 'badly': ['badly', 'baldy', 'blady'], - 'badon': ['badon', 'bando'], - 'bae': ['abe', 'bae', 'bea'], - 'baeria': ['aberia', 'baeria', 'baiera'], - 'baetulus': ['baetulus', 'subulate'], - 'baetyl': ['baetyl', 'baylet', 'bleaty'], - 'baetylic': ['baetylic', 'biacetyl'], - 'bafta': ['abaft', 'bafta'], - 'bag': ['bag', 'gab'], - 'bagani': ['bagani', 'bangia', 'ibanag'], - 'bagel': ['bagel', 'belga', 'gable', 'gleba'], - 'bagger': ['bagger', 'beggar'], - 'bagnio': ['bagnio', 'gabion', 'gobian'], - 'bago': ['bago', 'boga'], - 'bagre': ['bagre', 'barge', 'begar', 'rebag'], - 'bahar': ['bahar', 'bhara'], - 'bahoe': ['bahoe', 'bohea', 'obeah'], - 'baht': ['baht', 'bath', 'bhat'], - 'baiera': ['aberia', 'baeria', 'baiera'], - 'baignet': ['baignet', 'beating'], - 'bail': ['albi', 'bail', 'bali'], - 'bailage': ['algieba', 'bailage'], - 'bailer': ['bailer', 'barile'], - 'baillone': ['baillone', 'bonellia'], - 'bailment': ['bailment', 'libament'], - 'bailor': ['bailor', 'bioral'], - 'bailsman': ['bailsman', 'balanism', 'nabalism'], - 'bain': ['bain', 'bani', 'iban'], - 'baioc': ['baioc', 'cabio', 'cobia'], - 'bairam': ['bairam', 'bramia'], - 'bairn': ['abrin', 'bairn', 'brain', 'brian', 'rabin'], - 'bairnie': ['aribine', 'bairnie', 'iberian'], - 'bairnish': ['bairnish', 'bisharin'], - 'bais': ['absi', 'bais', 'bias', 'isba'], - 'baister': ['baister', 'tribase'], - 'baiter': ['baiter', 'barite', 'rebait', 'terbia'], - 'baith': ['baith', 'habit'], - 'bajocian': ['bajocian', 'jacobian'], - 'bakal': ['bakal', 'balak'], - 'bakatan': ['bakatan', 'batakan'], - 'bake': ['bake', 'beak'], - 'baker': ['baker', 'brake', 'break'], - 'bakerless': ['bakerless', 'brakeless', 'breakless'], - 'bakery': ['bakery', 'barkey'], - 'bakie': ['akebi', 'bakie'], - 'baku': ['baku', 'kuba'], - 'bal': ['alb', 'bal', 'lab'], - 'bala': ['alba', 'baal', 'bala'], - 'baladine': ['baladine', 'balaenid'], - 'balaenid': ['baladine', 'balaenid'], - 'balagan': ['balagan', 'bangala'], - 'balai': ['balai', 'labia'], - 'balak': ['bakal', 'balak'], - 'balan': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'], - 'balancer': ['balancer', 'barnacle'], - 'balangay': ['balangay', 'bangalay'], - 'balanic': ['balanic', 'caliban'], - 'balanid': ['balanid', 'banilad'], - 'balanism': ['bailsman', 'balanism', 'nabalism'], - 'balanite': ['albanite', 'balanite', 'nabalite'], - 'balanites': ['balanites', 'basaltine', 'stainable'], - 'balantidium': ['antialbumid', 'balantidium'], - 'balanus': ['balanus', 'nabalus', 'subanal'], - 'balas': ['balas', 'balsa', 'basal', 'sabal'], - 'balata': ['albata', 'atabal', 'balata'], - 'balatron': ['balatron', 'laborant'], - 'balaustine': ['balaustine', 'unsatiable'], - 'balaustre': ['balaustre', 'saturable'], - 'bald': ['bald', 'blad'], - 'balden': ['balden', 'bandle'], - 'balder': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'], - 'baldie': ['abdiel', 'baldie'], - 'baldish': ['baldish', 'bladish'], - 'baldmoney': ['baldmoney', 'molybdena'], - 'baldness': ['baldness', 'bandless'], - 'baldy': ['badly', 'baldy', 'blady'], - 'bale': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'balearic': ['balearic', 'cebalrai'], - 'baleen': ['baleen', 'enable'], - 'balefire': ['afebrile', 'balefire', 'fireable'], - 'baleise': ['baleise', 'besaiel'], - 'baler': ['abler', 'baler', 'belar', 'blare', 'blear'], - 'balete': ['balete', 'belate'], - 'bali': ['albi', 'bail', 'bali'], - 'baline': ['baline', 'blaine'], - 'balinger': ['balinger', 'ringable'], - 'balker': ['balker', 'barkle'], - 'ballaster': ['ballaster', 'reballast'], - 'ballate': ['ballate', 'tabella'], - 'balli': ['balli', 'billa'], - 'balloter': ['balloter', 'reballot'], - 'ballplayer': ['ballplayer', 'preallably'], - 'ballroom': ['ballroom', 'moorball'], - 'ballweed': ['ballweed', 'weldable'], - 'balm': ['balm', 'lamb'], - 'balminess': ['balminess', 'lambiness'], - 'balmlike': ['balmlike', 'lamblike'], - 'balmy': ['balmy', 'lamby'], - 'balolo': ['balolo', 'lobola'], - 'balonea': ['abalone', 'balonea'], - 'balor': ['balor', 'bolar', 'boral', 'labor', 'lobar'], - 'balow': ['ablow', 'balow', 'bowla'], - 'balsa': ['balas', 'balsa', 'basal', 'sabal'], - 'balsam': ['balsam', 'sambal'], - 'balsamic': ['balsamic', 'cabalism'], - 'balsamo': ['absalom', 'balsamo'], - 'balsamy': ['abysmal', 'balsamy'], - 'balt': ['balt', 'blat'], - 'baltei': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'balter': ['albert', 'balter', 'labret', 'tabler'], - 'balteus': ['balteus', 'sublate'], - 'baltis': ['baltis', 'bisalt'], - 'balu': ['balu', 'baul', 'bual', 'luba'], - 'balunda': ['balunda', 'bulanda'], - 'baluster': ['baluster', 'rustable'], - 'balut': ['balut', 'tubal'], - 'bam': ['bam', 'mab'], - 'ban': ['ban', 'nab'], - 'bana': ['anba', 'bana'], - 'banak': ['banak', 'nabak'], - 'banal': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'], - 'banat': ['banat', 'batan'], - 'banca': ['banca', 'caban'], - 'bancal': ['bancal', 'blanca'], - 'banco': ['bacon', 'banco'], - 'banda': ['badan', 'banda'], - 'bandage': ['bandage', 'dagbane'], - 'bandar': ['bandar', 'raband'], - 'bandarlog': ['bandarlog', 'langobard'], - 'bande': ['bande', 'benda'], - 'bander': ['bander', 'brenda'], - 'banderma': ['banderma', 'breadman'], - 'banderole': ['banderole', 'bandoleer'], - 'bandhook': ['bandhook', 'handbook'], - 'bandle': ['balden', 'bandle'], - 'bandless': ['baldness', 'bandless'], - 'bando': ['badon', 'bando'], - 'bandoleer': ['banderole', 'bandoleer'], - 'bandor': ['bandor', 'bondar', 'roband'], - 'bandore': ['bandore', 'broaden'], - 'bane': ['bane', 'bean', 'bena'], - 'bangala': ['balagan', 'bangala'], - 'bangalay': ['balangay', 'bangalay'], - 'bangash': ['bangash', 'nashgab'], - 'banger': ['banger', 'engarb', 'graben'], - 'banghy': ['banghy', 'hangby'], - 'bangia': ['bagani', 'bangia', 'ibanag'], - 'bangle': ['bangle', 'bengal'], - 'bani': ['bain', 'bani', 'iban'], - 'banilad': ['balanid', 'banilad'], - 'banisher': ['banisher', 'rebanish'], - 'baniva': ['baniva', 'bavian'], - 'baniya': ['baniya', 'banyai'], - 'banjoist': ['banjoist', 'bostanji'], - 'bank': ['bank', 'knab', 'nabk'], - 'banker': ['banker', 'barken'], - 'banshee': ['banshee', 'benshea'], - 'bantam': ['bantam', 'batman'], - 'banteng': ['banteng', 'bentang'], - 'banyai': ['baniya', 'banyai'], - 'banzai': ['banzai', 'zabian'], - 'bar': ['bar', 'bra', 'rab'], - 'bara': ['arab', 'arba', 'baar', 'bara'], - 'barabra': ['barabra', 'barbara'], - 'barad': ['barad', 'draba'], - 'barb': ['barb', 'brab'], - 'barbara': ['barabra', 'barbara'], - 'barbe': ['barbe', 'bebar', 'breba', 'rebab'], - 'barbed': ['barbed', 'dabber'], - 'barbel': ['barbel', 'labber', 'rabble'], - 'barbet': ['barbet', 'rabbet', 'tabber'], - 'barbette': ['barbette', 'bebatter'], - 'barbion': ['barbion', 'rabboni'], - 'barbitone': ['barbitone', 'barbotine'], - 'barbone': ['barbone', 'bebaron'], - 'barbotine': ['barbitone', 'barbotine'], - 'barcella': ['barcella', 'caballer'], - 'barcoo': ['barcoo', 'baroco'], - 'bard': ['bard', 'brad', 'drab'], - 'bardel': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'], - 'bardie': ['abider', 'bardie'], - 'bardily': ['bardily', 'rabidly', 'ridably'], - 'bardiness': ['bardiness', 'rabidness'], - 'barding': ['barding', 'brigand'], - 'bardo': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'], - 'bardy': ['bardy', 'darby'], - 'bare': ['bare', 'bear', 'brae'], - 'barefaced': ['barefaced', 'facebread'], - 'barefoot': ['barefoot', 'bearfoot'], - 'barehanded': ['barehanded', 'bradenhead', 'headbander'], - 'barehead': ['barehead', 'braehead'], - 'barely': ['barely', 'barley', 'bleary'], - 'barer': ['barer', 'rebar'], - 'baretta': ['baretta', 'rabatte', 'tabaret'], - 'bargainer': ['bargainer', 'rebargain'], - 'barge': ['bagre', 'barge', 'begar', 'rebag'], - 'bargeer': ['bargeer', 'gerbera'], - 'bargeese': ['bargeese', 'begrease'], - 'bari': ['abir', 'bari', 'rabi'], - 'baric': ['baric', 'carib', 'rabic'], - 'barid': ['barid', 'bidar', 'braid', 'rabid'], - 'barie': ['barie', 'beira', 'erbia', 'rebia'], - 'barile': ['bailer', 'barile'], - 'baris': ['baris', 'sabir'], - 'barish': ['barish', 'shibar'], - 'barit': ['barit', 'ribat'], - 'barite': ['baiter', 'barite', 'rebait', 'terbia'], - 'baritone': ['abrotine', 'baritone', 'obtainer', 'reobtain'], - 'barken': ['banker', 'barken'], - 'barker': ['barker', 'braker'], - 'barkey': ['bakery', 'barkey'], - 'barkle': ['balker', 'barkle'], - 'barky': ['barky', 'braky'], - 'barley': ['barely', 'barley', 'bleary'], - 'barling': ['barling', 'bringal'], - 'barm': ['barm', 'bram'], - 'barmbrack': ['barmbrack', 'brambrack'], - 'barmote': ['barmote', 'bromate'], - 'barmy': ['ambry', 'barmy'], - 'barn': ['barn', 'bran'], - 'barnabite': ['barnabite', 'rabbanite', 'rabbinate'], - 'barnacle': ['balancer', 'barnacle'], - 'barney': ['barney', 'nearby'], - 'barny': ['barny', 'bryan'], - 'baroco': ['barcoo', 'baroco'], - 'barolo': ['barolo', 'robalo'], - 'baron': ['baron', 'boran'], - 'baronet': ['baronet', 'reboant'], - 'barong': ['barong', 'brogan'], - 'barosmin': ['ambrosin', 'barosmin', 'sabromin'], - 'barothermograph': ['barothermograph', 'thermobarograph'], - 'barotse': ['barotse', 'boaster', 'reboast', 'sorbate'], - 'barpost': ['absorpt', 'barpost'], - 'barracan': ['barracan', 'barranca'], - 'barranca': ['barracan', 'barranca'], - 'barrelet': ['barrelet', 'terebral'], - 'barret': ['barret', 'barter'], - 'barrette': ['barrette', 'batterer'], - 'barrio': ['barrio', 'brairo'], - 'barsac': ['barsac', 'scarab'], - 'barse': ['barse', 'besra', 'saber', 'serab'], - 'bart': ['bart', 'brat'], - 'barter': ['barret', 'barter'], - 'barton': ['barton', 'brotan'], - 'bartsia': ['arabist', 'bartsia'], - 'barundi': ['barundi', 'unbraid'], - 'barvel': ['barvel', 'blaver', 'verbal'], - 'barwise': ['barwise', 'swarbie'], - 'barye': ['barye', 'beray', 'yerba'], - 'baryta': ['baryta', 'taryba'], - 'barytine': ['barytine', 'bryanite'], - 'baryton': ['baryton', 'brotany'], - 'bas': ['bas', 'sab'], - 'basal': ['balas', 'balsa', 'basal', 'sabal'], - 'basally': ['basally', 'salably'], - 'basaltic': ['basaltic', 'cabalist'], - 'basaltine': ['balanites', 'basaltine', 'stainable'], - 'base': ['base', 'besa', 'sabe', 'seba'], - 'basella': ['basella', 'sabella', 'salable'], - 'bash': ['bash', 'shab'], - 'basial': ['basial', 'blasia'], - 'basic': ['bacis', 'basic'], - 'basically': ['asyllabic', 'basically'], - 'basidium': ['basidium', 'diiambus'], - 'basil': ['basil', 'labis'], - 'basileus': ['basileus', 'issuable', 'suasible'], - 'basilweed': ['basilweed', 'bladewise'], - 'basinasal': ['basinasal', 'bassalian'], - 'basinet': ['basinet', 'besaint', 'bestain'], - 'basion': ['basion', 'bonsai', 'sabino'], - 'basiparachromatin': ['basiparachromatin', 'marsipobranchiata'], - 'basket': ['basket', 'betask'], - 'basketwork': ['basketwork', 'workbasket'], - 'basos': ['basos', 'basso'], - 'bassalian': ['basinasal', 'bassalian'], - 'bassanite': ['bassanite', 'sebastian'], - 'basset': ['asbest', 'basset'], - 'basso': ['basos', 'basso'], - 'bast': ['bast', 'bats', 'stab'], - 'basta': ['basta', 'staab'], - 'baste': ['baste', 'beast', 'tabes'], - 'basten': ['absent', 'basten'], - 'baster': ['baster', 'bestar', 'breast'], - 'bastille': ['bastille', 'listable'], - 'bastion': ['abiston', 'bastion'], - 'bastionet': ['bastionet', 'obstinate'], - 'bastite': ['bastite', 'batiste', 'bistate'], - 'basto': ['basto', 'boast', 'sabot'], - 'basuto': ['abouts', 'basuto'], - 'bat': ['bat', 'tab'], - 'batad': ['abdat', 'batad'], - 'batakan': ['bakatan', 'batakan'], - 'bataleur': ['bataleur', 'tabulare'], - 'batan': ['banat', 'batan'], - 'batara': ['artaba', 'batara'], - 'batcher': ['batcher', 'berchta', 'brachet'], - 'bate': ['abet', 'bate', 'beat', 'beta'], - 'batea': ['abate', 'ateba', 'batea', 'beata'], - 'batel': ['batel', 'blate', 'bleat', 'table'], - 'batement': ['abetment', 'batement'], - 'bater': ['abret', 'bater', 'berat'], - 'batfowler': ['afterblow', 'batfowler'], - 'bath': ['baht', 'bath', 'bhat'], - 'bathala': ['baalath', 'bathala'], - 'bathe': ['bathe', 'beath'], - 'bather': ['bather', 'bertha', 'breath'], - 'bathonian': ['bathonian', 'nabothian'], - 'batik': ['batik', 'kitab'], - 'batino': ['batino', 'oatbin', 'obtain'], - 'batis': ['absit', 'batis'], - 'batiste': ['bastite', 'batiste', 'bistate'], - 'batling': ['batling', 'tabling'], - 'batman': ['bantam', 'batman'], - 'batophobia': ['batophobia', 'tabophobia'], - 'batrachia': ['batrachia', 'brachiata'], - 'batrachian': ['batrachian', 'branchiata'], - 'bats': ['bast', 'bats', 'stab'], - 'battel': ['battel', 'battle', 'tablet'], - 'batteler': ['batteler', 'berattle'], - 'battening': ['battening', 'bitangent'], - 'batter': ['batter', 'bertat', 'tabret', 'tarbet'], - 'batterer': ['barrette', 'batterer'], - 'battle': ['battel', 'battle', 'tablet'], - 'battler': ['battler', 'blatter', 'brattle'], - 'battue': ['battue', 'tubate'], - 'batule': ['batule', 'betula', 'tabule'], - 'batyphone': ['batyphone', 'hypnobate'], - 'batzen': ['batzen', 'bezant', 'tanzeb'], - 'baud': ['baud', 'buda', 'daub'], - 'baul': ['balu', 'baul', 'bual', 'luba'], - 'baun': ['baun', 'buna', 'nabu', 'nuba'], - 'bauta': ['abuta', 'bauta'], - 'bavian': ['baniva', 'bavian'], - 'baw': ['baw', 'wab'], - 'bawl': ['bawl', 'blaw'], - 'bawler': ['bawler', 'brelaw', 'rebawl', 'warble'], - 'bay': ['aby', 'bay'], - 'baya': ['baya', 'yaba'], - 'bayed': ['bayed', 'beady', 'beday'], - 'baylet': ['baetyl', 'baylet', 'bleaty'], - 'bayonet': ['bayonet', 'betoyan'], - 'baze': ['baze', 'ezba'], - 'bea': ['abe', 'bae', 'bea'], - 'beach': ['bache', 'beach'], - 'bead': ['abed', 'bade', 'bead'], - 'beaded': ['beaded', 'bedead'], - 'beader': ['beader', 'bedare'], - 'beadleism': ['beadleism', 'demisable'], - 'beadlet': ['beadlet', 'belated'], - 'beady': ['bayed', 'beady', 'beday'], - 'beagle': ['beagle', 'belage', 'belgae'], - 'beak': ['bake', 'beak'], - 'beaker': ['beaker', 'berake', 'rebake'], - 'beal': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'bealing': ['algenib', 'bealing', 'belgian', 'bengali'], - 'beam': ['beam', 'bema'], - 'beamer': ['ambeer', 'beamer'], - 'beamless': ['assemble', 'beamless'], - 'beamster': ['beamster', 'bemaster', 'bestream'], - 'beamwork': ['beamwork', 'bowmaker'], - 'beamy': ['beamy', 'embay', 'maybe'], - 'bean': ['bane', 'bean', 'bena'], - 'beanfield': ['beanfield', 'definable'], - 'beant': ['abnet', 'beant'], - 'bear': ['bare', 'bear', 'brae'], - 'bearance': ['bearance', 'carabeen'], - 'beard': ['ardeb', 'beard', 'bread', 'debar'], - 'beardless': ['beardless', 'breadless'], - 'beardlessness': ['beardlessness', 'breadlessness'], - 'bearer': ['bearer', 'rebear'], - 'bearess': ['bearess', 'bessera'], - 'bearfoot': ['barefoot', 'bearfoot'], - 'bearing': ['bearing', 'begrain', 'brainge', 'rigbane'], - 'bearlet': ['bearlet', 'bleater', 'elberta', 'retable'], - 'bearm': ['amber', 'bearm', 'bemar', 'bream', 'embar'], - 'beast': ['baste', 'beast', 'tabes'], - 'beastlily': ['beastlily', 'bestially'], - 'beat': ['abet', 'bate', 'beat', 'beta'], - 'beata': ['abate', 'ateba', 'batea', 'beata'], - 'beater': ['beater', 'berate', 'betear', 'rebate', 'rebeat'], - 'beath': ['bathe', 'beath'], - 'beating': ['baignet', 'beating'], - 'beau': ['aube', 'beau'], - 'bebait': ['babite', 'bebait'], - 'bebar': ['barbe', 'bebar', 'breba', 'rebab'], - 'bebaron': ['barbone', 'bebaron'], - 'bebaste': ['bebaste', 'bebeast'], - 'bebatter': ['barbette', 'bebatter'], - 'bebay': ['abbey', 'bebay'], - 'bebeast': ['bebaste', 'bebeast'], - 'bebog': ['bebog', 'begob', 'gobbe'], - 'becard': ['becard', 'braced'], - 'becater': ['becater', 'betrace'], - 'because': ['because', 'besauce'], - 'becharm': ['becharm', 'brecham', 'chamber'], - 'becher': ['becher', 'breech'], - 'bechern': ['bechern', 'bencher'], - 'bechirp': ['bechirp', 'brephic'], - 'becker': ['becker', 'rebeck'], - 'beclad': ['beclad', 'cabled'], - 'beclart': ['beclart', 'crablet'], - 'becloud': ['becloud', 'obclude'], - 'becram': ['becram', 'camber', 'crambe'], - 'becrimson': ['becrimson', 'scombrine'], - 'becry': ['becry', 'bryce'], - 'bed': ['bed', 'deb'], - 'bedamn': ['bedamn', 'bedman'], - 'bedare': ['beader', 'bedare'], - 'bedark': ['bedark', 'debark'], - 'beday': ['bayed', 'beady', 'beday'], - 'bedead': ['beaded', 'bedead'], - 'bedel': ['bedel', 'bleed'], - 'beden': ['beden', 'deben', 'deneb'], - 'bedim': ['bedim', 'imbed'], - 'bedip': ['bedip', 'biped'], - 'bedismal': ['bedismal', 'semibald'], - 'bedlam': ['bedlam', 'beldam', 'blamed'], - 'bedlar': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'], - 'bedless': ['bedless', 'blessed'], - 'bedman': ['bedamn', 'bedman'], - 'bedoctor': ['bedoctor', 'codebtor'], - 'bedog': ['bedog', 'bodge'], - 'bedrail': ['bedrail', 'bridale', 'ridable'], - 'bedral': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'], - 'bedrid': ['bedrid', 'bidder'], - 'bedrip': ['bedrip', 'prebid'], - 'bedrock': ['bedrock', 'brocked'], - 'bedroom': ['bedroom', 'boerdom', 'boredom'], - 'bedrown': ['bedrown', 'browden'], - 'bedrug': ['bedrug', 'budger'], - 'bedsick': ['bedsick', 'sickbed'], - 'beduck': ['beduck', 'bucked'], - 'bedur': ['bedur', 'rebud', 'redub'], - 'bedusk': ['bedusk', 'busked'], - 'bedust': ['bedust', 'bestud', 'busted'], - 'beearn': ['beearn', 'berean'], - 'beeman': ['beeman', 'bemean', 'bename'], - 'been': ['been', 'bene', 'eben'], - 'beer': ['beer', 'bere', 'bree'], - 'beest': ['beest', 'beset'], - 'beeswing': ['beeswing', 'beswinge'], - 'befathered': ['befathered', 'featherbed'], - 'befile': ['befile', 'belief'], - 'befinger': ['befinger', 'befringe'], - 'beflea': ['beflea', 'beleaf'], - 'beflour': ['beflour', 'fourble'], - 'beflum': ['beflum', 'fumble'], - 'befret': ['befret', 'bereft'], - 'befringe': ['befinger', 'befringe'], - 'begad': ['badge', 'begad'], - 'begall': ['begall', 'glebal'], - 'begar': ['bagre', 'barge', 'begar', 'rebag'], - 'begash': ['begash', 'beshag'], - 'begat': ['begat', 'betag'], - 'begettal': ['begettal', 'gettable'], - 'beggar': ['bagger', 'beggar'], - 'beggarer': ['beggarer', 'rebeggar'], - 'begin': ['begin', 'being', 'binge'], - 'begird': ['begird', 'bridge'], - 'beglic': ['beglic', 'belgic'], - 'bego': ['bego', 'egbo'], - 'begob': ['bebog', 'begob', 'gobbe'], - 'begone': ['begone', 'engobe'], - 'begrain': ['bearing', 'begrain', 'brainge', 'rigbane'], - 'begrease': ['bargeese', 'begrease'], - 'behaviorism': ['behaviorism', 'misbehavior'], - 'behears': ['behears', 'beshear'], - 'behint': ['behint', 'henbit'], - 'beholder': ['beholder', 'rebehold'], - 'behorn': ['behorn', 'brehon'], - 'beid': ['beid', 'bide', 'debi', 'dieb'], - 'being': ['begin', 'being', 'binge'], - 'beira': ['barie', 'beira', 'erbia', 'rebia'], - 'beisa': ['abies', 'beisa'], - 'bel': ['bel', 'elb'], - 'bela': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'belabor': ['belabor', 'borable'], - 'belaced': ['belaced', 'debacle'], - 'belage': ['beagle', 'belage', 'belgae'], - 'belait': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'belam': ['amble', 'belam', 'blame', 'mabel'], - 'belar': ['abler', 'baler', 'belar', 'blare', 'blear'], - 'belard': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'], - 'belate': ['balete', 'belate'], - 'belated': ['beadlet', 'belated'], - 'belaud': ['ablude', 'belaud'], - 'beldam': ['bedlam', 'beldam', 'blamed'], - 'beleaf': ['beflea', 'beleaf'], - 'beleap': ['beleap', 'bepale'], - 'belga': ['bagel', 'belga', 'gable', 'gleba'], - 'belgae': ['beagle', 'belage', 'belgae'], - 'belgian': ['algenib', 'bealing', 'belgian', 'bengali'], - 'belgic': ['beglic', 'belgic'], - 'belial': ['alible', 'belial', 'labile', 'liable'], - 'belief': ['befile', 'belief'], - 'belili': ['belili', 'billie'], - 'belite': ['belite', 'beltie', 'bietle'], - 'belitter': ['belitter', 'tribelet'], - 'belive': ['belive', 'beveil'], - 'bella': ['bella', 'label'], - 'bellied': ['bellied', 'delible'], - 'bellona': ['allbone', 'bellona'], - 'bellonian': ['bellonian', 'nonliable'], - 'bellote': ['bellote', 'lobelet'], - 'bellower': ['bellower', 'rebellow'], - 'belltail': ['belltail', 'bletilla', 'tillable'], - 'bellyer': ['bellyer', 'rebelly'], - 'bellypinch': ['bellypinch', 'pinchbelly'], - 'beloid': ['beloid', 'boiled', 'bolide'], - 'belonger': ['belonger', 'rebelong'], - 'belonid': ['belonid', 'boldine'], - 'belord': ['belord', 'bordel', 'rebold'], - 'below': ['below', 'bowel', 'elbow'], - 'belt': ['belt', 'blet'], - 'beltane': ['beltane', 'tenable'], - 'belter': ['belter', 'elbert', 'treble'], - 'beltie': ['belite', 'beltie', 'bietle'], - 'beltine': ['beltine', 'tenible'], - 'beltir': ['beltir', 'riblet'], - 'beltman': ['beltman', 'lambent'], - 'belve': ['belve', 'bevel'], - 'bema': ['beam', 'bema'], - 'bemail': ['bemail', 'lambie'], - 'beman': ['beman', 'nambe'], - 'bemar': ['amber', 'bearm', 'bemar', 'bream', 'embar'], - 'bemaster': ['beamster', 'bemaster', 'bestream'], - 'bemaul': ['bemaul', 'blumea'], - 'bemeal': ['bemeal', 'meable'], - 'bemean': ['beeman', 'bemean', 'bename'], - 'bemire': ['bemire', 'bireme'], - 'bemitred': ['bemitred', 'timbered'], - 'bemoil': ['bemoil', 'mobile'], - 'bemole': ['bemole', 'embole'], - 'bemusk': ['bemusk', 'embusk'], - 'ben': ['ben', 'neb'], - 'bena': ['bane', 'bean', 'bena'], - 'benacus': ['acubens', 'benacus'], - 'bename': ['beeman', 'bemean', 'bename'], - 'benami': ['benami', 'bimane'], - 'bencher': ['bechern', 'bencher'], - 'benchwork': ['benchwork', 'workbench'], - 'benda': ['bande', 'benda'], - 'bender': ['bender', 'berend', 'rebend'], - 'bene': ['been', 'bene', 'eben'], - 'benedight': ['benedight', 'benighted'], - 'benefiter': ['benefiter', 'rebenefit'], - 'bengal': ['bangle', 'bengal'], - 'bengali': ['algenib', 'bealing', 'belgian', 'bengali'], - 'beni': ['beni', 'bien', 'bine', 'inbe'], - 'benighted': ['benedight', 'benighted'], - 'beno': ['beno', 'bone', 'ebon'], - 'benote': ['benote', 'betone'], - 'benshea': ['banshee', 'benshea'], - 'benshee': ['benshee', 'shebeen'], - 'bentang': ['banteng', 'bentang'], - 'benton': ['benton', 'bonnet'], - 'benu': ['benu', 'unbe'], - 'benward': ['benward', 'brawned'], - 'benzantialdoxime': ['antibenzaldoxime', 'benzantialdoxime'], - 'benzein': ['benzein', 'benzine'], - 'benzine': ['benzein', 'benzine'], - 'benzo': ['benzo', 'bonze'], - 'benzofluorene': ['benzofluorene', 'fluorobenzene'], - 'benzonitrol': ['benzonitrol', 'nitrobenzol'], - 'bepale': ['beleap', 'bepale'], - 'bepart': ['bepart', 'berapt', 'betrap'], - 'bepaste': ['bepaste', 'bespate'], - 'bepester': ['bepester', 'prebeset'], - 'beplaster': ['beplaster', 'prestable'], - 'ber': ['ber', 'reb'], - 'berake': ['beaker', 'berake', 'rebake'], - 'berapt': ['bepart', 'berapt', 'betrap'], - 'berat': ['abret', 'bater', 'berat'], - 'berate': ['beater', 'berate', 'betear', 'rebate', 'rebeat'], - 'berattle': ['batteler', 'berattle'], - 'beraunite': ['beraunite', 'unebriate'], - 'beray': ['barye', 'beray', 'yerba'], - 'berberi': ['berberi', 'rebribe'], - 'berchta': ['batcher', 'berchta', 'brachet'], - 'bere': ['beer', 'bere', 'bree'], - 'berean': ['beearn', 'berean'], - 'bereft': ['befret', 'bereft'], - 'berend': ['bender', 'berend', 'rebend'], - 'berg': ['berg', 'gerb'], - 'bergama': ['bergama', 'megabar'], - 'bergamo': ['bergamo', 'embargo'], - 'beri': ['beri', 'bier', 'brei', 'ribe'], - 'beringed': ['beringed', 'breeding'], - 'berinse': ['berinse', 'besiren'], - 'berley': ['berley', 'bleery'], - 'berlinite': ['berlinite', 'libertine'], - 'bermudite': ['bermudite', 'demibrute'], - 'bernard': ['bernard', 'brander', 'rebrand'], - 'bernese': ['bernese', 'besneer'], - 'beroe': ['beroe', 'boree'], - 'beroida': ['beroida', 'boreiad'], - 'beroll': ['beroll', 'boller'], - 'berossos': ['berossos', 'obsessor'], - 'beround': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'], - 'berri': ['berri', 'brier'], - 'berried': ['berried', 'briered'], - 'berrybush': ['berrybush', 'shrubbery'], - 'bersil': ['bersil', 'birsle'], - 'bert': ['bert', 'bret'], - 'bertat': ['batter', 'bertat', 'tabret', 'tarbet'], - 'berth': ['berth', 'breth'], - 'bertha': ['bather', 'bertha', 'breath'], - 'berther': ['berther', 'herbert'], - 'berthing': ['berthing', 'brighten'], - 'bertie': ['bertie', 'betire', 'rebite'], - 'bertolonia': ['bertolonia', 'borolanite'], - 'berust': ['berust', 'buster', 'stuber'], - 'bervie': ['bervie', 'brieve'], - 'beryllia': ['beryllia', 'reliably'], - 'besa': ['base', 'besa', 'sabe', 'seba'], - 'besaiel': ['baleise', 'besaiel'], - 'besaint': ['basinet', 'besaint', 'bestain'], - 'besauce': ['because', 'besauce'], - 'bescour': ['bescour', 'buceros', 'obscure'], - 'beset': ['beest', 'beset'], - 'beshadow': ['beshadow', 'bodewash'], - 'beshag': ['begash', 'beshag'], - 'beshear': ['behears', 'beshear'], - 'beshod': ['beshod', 'debosh'], - 'besiren': ['berinse', 'besiren'], - 'besit': ['besit', 'betis'], - 'beslaver': ['beslaver', 'servable', 'versable'], - 'beslime': ['beslime', 'besmile'], - 'beslings': ['beslings', 'blessing', 'glibness'], - 'beslow': ['beslow', 'bowels'], - 'besmile': ['beslime', 'besmile'], - 'besneer': ['bernese', 'besneer'], - 'besoot': ['besoot', 'bootes'], - 'besot': ['besot', 'betso'], - 'besoul': ['besoul', 'blouse', 'obelus'], - 'besour': ['besour', 'boreus', 'bourse', 'bouser'], - 'bespate': ['bepaste', 'bespate'], - 'besra': ['barse', 'besra', 'saber', 'serab'], - 'bessera': ['bearess', 'bessera'], - 'bestain': ['basinet', 'besaint', 'bestain'], - 'bestar': ['baster', 'bestar', 'breast'], - 'besteer': ['besteer', 'rebeset'], - 'bestial': ['astilbe', 'bestial', 'blastie', 'stabile'], - 'bestially': ['beastlily', 'bestially'], - 'bestiarian': ['antirabies', 'bestiarian'], - 'bestiary': ['bestiary', 'sybarite'], - 'bestir': ['bestir', 'bister'], - 'bestorm': ['bestorm', 'mobster'], - 'bestowal': ['bestowal', 'stowable'], - 'bestower': ['bestower', 'rebestow'], - 'bestraw': ['bestraw', 'wabster'], - 'bestream': ['beamster', 'bemaster', 'bestream'], - 'bestrew': ['bestrew', 'webster'], - 'bestride': ['bestride', 'bistered'], - 'bestud': ['bedust', 'bestud', 'busted'], - 'beswinge': ['beeswing', 'beswinge'], - 'beta': ['abet', 'bate', 'beat', 'beta'], - 'betag': ['begat', 'betag'], - 'betail': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'betailor': ['betailor', 'laborite', 'orbitale'], - 'betask': ['basket', 'betask'], - 'betear': ['beater', 'berate', 'betear', 'rebate', 'rebeat'], - 'beth': ['beth', 'theb'], - 'betire': ['bertie', 'betire', 'rebite'], - 'betis': ['besit', 'betis'], - 'betone': ['benote', 'betone'], - 'betoss': ['betoss', 'bosset'], - 'betoya': ['betoya', 'teaboy'], - 'betoyan': ['bayonet', 'betoyan'], - 'betrace': ['becater', 'betrace'], - 'betrail': ['betrail', 'librate', 'triable', 'trilabe'], - 'betrap': ['bepart', 'berapt', 'betrap'], - 'betrayal': ['betrayal', 'tearably'], - 'betrayer': ['betrayer', 'eatberry', 'rebetray', 'teaberry'], - 'betread': ['betread', 'debater'], - 'betrim': ['betrim', 'timber', 'timbre'], - 'betso': ['besot', 'betso'], - 'betta': ['betta', 'tabet'], - 'bettina': ['bettina', 'tabinet', 'tibetan'], - 'betula': ['batule', 'betula', 'tabule'], - 'betulin': ['betulin', 'bluntie'], - 'beturbaned': ['beturbaned', 'unrabbeted'], - 'beveil': ['belive', 'beveil'], - 'bevel': ['belve', 'bevel'], - 'bever': ['bever', 'breve'], - 'bewailer': ['bewailer', 'rebewail'], - 'bework': ['bework', 'bowker'], - 'bey': ['bey', 'bye'], - 'beydom': ['beydom', 'embody'], - 'bezant': ['batzen', 'bezant', 'tanzeb'], - 'bezzo': ['bezzo', 'bozze'], - 'bhakti': ['bhakti', 'khatib'], - 'bhandari': ['bhandari', 'hairband'], - 'bhar': ['bhar', 'harb'], - 'bhara': ['bahar', 'bhara'], - 'bhat': ['baht', 'bath', 'bhat'], - 'bhima': ['bhima', 'biham'], - 'bhotia': ['bhotia', 'tobiah'], - 'bhutani': ['bhutani', 'unhabit'], - 'biacetyl': ['baetylic', 'biacetyl'], - 'bialate': ['baalite', 'bialate', 'labiate'], - 'bialveolar': ['bialveolar', 'labiovelar'], - 'bianca': ['abanic', 'bianca'], - 'bianco': ['bianco', 'bonaci'], - 'biangular': ['biangular', 'bulgarian'], - 'bias': ['absi', 'bais', 'bias', 'isba'], - 'biatomic': ['biatomic', 'moabitic'], - 'bible': ['bible', 'blibe'], - 'bicarpellary': ['bicarpellary', 'prebacillary'], - 'bickern': ['bickern', 'bricken'], - 'biclavate': ['activable', 'biclavate'], - 'bicorn': ['bicorn', 'bicron'], - 'bicornate': ['bicornate', 'carbonite', 'reboantic'], - 'bicrenate': ['abenteric', 'bicrenate'], - 'bicron': ['bicorn', 'bicron'], - 'bicrural': ['bicrural', 'rubrical'], - 'bid': ['bid', 'dib'], - 'bidar': ['barid', 'bidar', 'braid', 'rabid'], - 'bidder': ['bedrid', 'bidder'], - 'bide': ['beid', 'bide', 'debi', 'dieb'], - 'bident': ['bident', 'indebt'], - 'bidented': ['bidented', 'indebted'], - 'bider': ['bider', 'bredi', 'bride', 'rebid'], - 'bidet': ['bidet', 'debit'], - 'biduous': ['biduous', 'dubious'], - 'bien': ['beni', 'bien', 'bine', 'inbe'], - 'bier': ['beri', 'bier', 'brei', 'ribe'], - 'bietle': ['belite', 'beltie', 'bietle'], - 'bifer': ['bifer', 'brief', 'fiber'], - 'big': ['big', 'gib'], - 'biga': ['agib', 'biga', 'gabi'], - 'bigamous': ['bigamous', 'subimago'], - 'bigener': ['bigener', 'rebegin'], - 'bigential': ['bigential', 'tangibile'], - 'biggin': ['biggin', 'gibing'], - 'bigoted': ['bigoted', 'dogbite'], - 'biham': ['bhima', 'biham'], - 'bihari': ['bihari', 'habiri'], - 'bike': ['bike', 'kibe'], - 'bikram': ['bikram', 'imbark'], - 'bilaan': ['albian', 'bilaan'], - 'bilaterality': ['alterability', 'bilaterality', 'relatability'], - 'bilati': ['bilati', 'tibial'], - 'bilby': ['bilby', 'libby'], - 'bildar': ['bildar', 'bridal', 'ribald'], - 'bilge': ['bilge', 'gibel'], - 'biliate': ['biliate', 'tibiale'], - 'bilinear': ['bilinear', 'liberian'], - 'billa': ['balli', 'billa'], - 'billboard': ['billboard', 'broadbill'], - 'biller': ['biller', 'rebill'], - 'billeter': ['billeter', 'rebillet'], - 'billie': ['belili', 'billie'], - 'bilo': ['bilo', 'boil'], - 'bilobated': ['bilobated', 'bobtailed'], - 'biltong': ['biltong', 'bolting'], - 'bim': ['bim', 'mib'], - 'bimane': ['benami', 'bimane'], - 'bimodality': ['bimodality', 'myliobatid'], - 'bimotors': ['bimotors', 'robotism'], - 'bin': ['bin', 'nib'], - 'binal': ['albin', 'binal', 'blain'], - 'binary': ['binary', 'brainy'], - 'binder': ['binder', 'inbred', 'rebind'], - 'bindwood': ['bindwood', 'woodbind'], - 'bine': ['beni', 'bien', 'bine', 'inbe'], - 'binge': ['begin', 'being', 'binge'], - 'bino': ['bino', 'bion', 'boni'], - 'binocular': ['binocular', 'caliburno', 'colubrina'], - 'binomial': ['binomial', 'mobilian'], - 'binuclear': ['binuclear', 'incurable'], - 'biod': ['biod', 'boid'], - 'bion': ['bino', 'bion', 'boni'], - 'biopsychological': ['biopsychological', 'psychobiological'], - 'biopsychology': ['biopsychology', 'psychobiology'], - 'bioral': ['bailor', 'bioral'], - 'biorgan': ['biorgan', 'grobian'], - 'bios': ['bios', 'bois'], - 'biosociological': ['biosociological', 'sociobiological'], - 'biota': ['biota', 'ibota'], - 'biotics': ['biotics', 'cobitis'], - 'bipartile': ['bipartile', 'pretibial'], - 'biped': ['bedip', 'biped'], - 'bipedal': ['bipedal', 'piebald'], - 'bipersonal': ['bipersonal', 'prisonable'], - 'bipolar': ['bipolar', 'parboil'], - 'biracial': ['biracial', 'cibarial'], - 'birchen': ['birchen', 'brichen'], - 'bird': ['bird', 'drib'], - 'birdeen': ['birdeen', 'inbreed'], - 'birdlet': ['birdlet', 'driblet'], - 'birdling': ['birdling', 'bridling', 'lingbird'], - 'birdman': ['birdman', 'manbird'], - 'birdseed': ['birdseed', 'seedbird'], - 'birdstone': ['birdstone', 'stonebird'], - 'bireme': ['bemire', 'bireme'], - 'biretta': ['biretta', 'brattie', 'ratbite'], - 'birle': ['birle', 'liber'], - 'birma': ['abrim', 'birma'], - 'birn': ['birn', 'brin'], - 'birny': ['birny', 'briny'], - 'biron': ['biron', 'inorb', 'robin'], - 'birse': ['birse', 'ribes'], - 'birsle': ['bersil', 'birsle'], - 'birth': ['birth', 'brith'], - 'bis': ['bis', 'sib'], - 'bisalt': ['baltis', 'bisalt'], - 'bisaltae': ['bisaltae', 'satiable'], - 'bisharin': ['bairnish', 'bisharin'], - 'bistate': ['bastite', 'batiste', 'bistate'], - 'bister': ['bestir', 'bister'], - 'bistered': ['bestride', 'bistered'], - 'bisti': ['bisti', 'bitis'], - 'bisulcate': ['baculites', 'bisulcate'], - 'bit': ['bit', 'tib'], - 'bitangent': ['battening', 'bitangent'], - 'bitemporal': ['bitemporal', 'importable'], - 'biter': ['biter', 'tribe'], - 'bitis': ['bisti', 'bitis'], - 'bito': ['bito', 'obit'], - 'bitonality': ['bitonality', 'notability'], - 'bittern': ['bittern', 'britten'], - 'bitumed': ['bitumed', 'budtime'], - 'biurate': ['abiuret', 'aubrite', 'biurate', 'rubiate'], - 'biwa': ['biwa', 'wabi'], - 'bizarre': ['bizarre', 'brazier'], - 'bizet': ['bizet', 'zibet'], - 'blabber': ['babbler', 'blabber', 'brabble'], - 'blackacre': ['blackacre', 'crackable'], - 'blad': ['bald', 'blad'], - 'blader': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'], - 'bladewise': ['basilweed', 'bladewise'], - 'bladish': ['baldish', 'bladish'], - 'blady': ['badly', 'baldy', 'blady'], - 'blae': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'], - 'blaeberry': ['blaeberry', 'bleaberry'], - 'blaeness': ['ableness', 'blaeness', 'sensable'], - 'blain': ['albin', 'binal', 'blain'], - 'blaine': ['baline', 'blaine'], - 'blair': ['blair', 'brail', 'libra'], - 'blake': ['blake', 'bleak', 'kabel'], - 'blame': ['amble', 'belam', 'blame', 'mabel'], - 'blamed': ['bedlam', 'beldam', 'blamed'], - 'blamer': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'], - 'blaming': ['ambling', 'blaming'], - 'blamingly': ['amblingly', 'blamingly'], - 'blanca': ['bancal', 'blanca'], - 'blare': ['abler', 'baler', 'belar', 'blare', 'blear'], - 'blarina': ['blarina', 'branial'], - 'blarney': ['blarney', 'renably'], - 'blas': ['blas', 'slab'], - 'blase': ['blase', 'sable'], - 'blasia': ['basial', 'blasia'], - 'blastema': ['blastema', 'lambaste'], - 'blastemic': ['blastemic', 'cembalist'], - 'blaster': ['blaster', 'reblast', 'stabler'], - 'blastie': ['astilbe', 'bestial', 'blastie', 'stabile'], - 'blasting': ['blasting', 'stabling'], - 'blastoderm': ['blastoderm', 'dermoblast'], - 'blastogenic': ['blastogenic', 'genoblastic'], - 'blastomeric': ['blastomeric', 'meroblastic'], - 'blastomycetic': ['blastomycetic', 'cytoblastemic'], - 'blastomycetous': ['blastomycetous', 'cytoblastemous'], - 'blasty': ['blasty', 'stably'], - 'blat': ['balt', 'blat'], - 'blate': ['batel', 'blate', 'bleat', 'table'], - 'blather': ['blather', 'halbert'], - 'blatter': ['battler', 'blatter', 'brattle'], - 'blaver': ['barvel', 'blaver', 'verbal'], - 'blaw': ['bawl', 'blaw'], - 'blay': ['ably', 'blay', 'yalb'], - 'blazoner': ['albronze', 'blazoner'], - 'bleaberry': ['blaeberry', 'bleaberry'], - 'bleach': ['bachel', 'bleach'], - 'bleacher': ['bleacher', 'rebleach'], - 'bleak': ['blake', 'bleak', 'kabel'], - 'bleaky': ['bleaky', 'kabyle'], - 'blear': ['abler', 'baler', 'belar', 'blare', 'blear'], - 'bleared': ['bleared', 'reblade'], - 'bleary': ['barely', 'barley', 'bleary'], - 'bleat': ['batel', 'blate', 'bleat', 'table'], - 'bleater': ['bearlet', 'bleater', 'elberta', 'retable'], - 'bleating': ['bleating', 'tangible'], - 'bleaty': ['baetyl', 'baylet', 'bleaty'], - 'bleed': ['bedel', 'bleed'], - 'bleery': ['berley', 'bleery'], - 'blender': ['blender', 'reblend'], - 'blendure': ['blendure', 'rebundle'], - 'blennoid': ['blennoid', 'blondine'], - 'blennoma': ['blennoma', 'nobleman'], - 'bleo': ['bleo', 'bole', 'lobe'], - 'blepharocera': ['blepharocera', 'reproachable'], - 'blessed': ['bedless', 'blessed'], - 'blesser': ['blesser', 'rebless'], - 'blessing': ['beslings', 'blessing', 'glibness'], - 'blet': ['belt', 'blet'], - 'bletia': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'bletilla': ['belltail', 'bletilla', 'tillable'], - 'blibe': ['bible', 'blibe'], - 'blighter': ['blighter', 'therblig'], - 'blimy': ['blimy', 'limby'], - 'blister': ['blister', 'bristle'], - 'blisterwort': ['blisterwort', 'bristlewort'], - 'blitter': ['blitter', 'brittle', 'triblet'], - 'blo': ['blo', 'lob'], - 'bloated': ['bloated', 'lobated'], - 'bloater': ['alberto', 'bloater', 'latrobe'], - 'bloating': ['bloating', 'obligant'], - 'blocker': ['blocker', 'brockle', 'reblock'], - 'blonde': ['blonde', 'bolden'], - 'blondine': ['blennoid', 'blondine'], - 'blood': ['blood', 'boldo'], - 'bloodleaf': ['bloodleaf', 'floodable'], - 'bloomer': ['bloomer', 'rebloom'], - 'bloomy': ['bloomy', 'lomboy'], - 'blore': ['blore', 'roble'], - 'blosmy': ['blosmy', 'symbol'], - 'blot': ['blot', 'bolt'], - 'blotless': ['blotless', 'boltless'], - 'blotter': ['blotter', 'bottler'], - 'blotting': ['blotting', 'bottling'], - 'blouse': ['besoul', 'blouse', 'obelus'], - 'blow': ['blow', 'bowl'], - 'blowback': ['backblow', 'blowback'], - 'blower': ['blower', 'bowler', 'reblow', 'worble'], - 'blowfly': ['blowfly', 'flyblow'], - 'blowing': ['blowing', 'bowling'], - 'blowout': ['blowout', 'outblow', 'outbowl'], - 'blowup': ['blowup', 'upblow'], - 'blowy': ['blowy', 'bowly'], - 'blub': ['blub', 'bulb'], - 'blubber': ['blubber', 'bubbler'], - 'blue': ['blue', 'lube'], - 'bluegill': ['bluegill', 'gullible'], - 'bluenose': ['bluenose', 'nebulose'], - 'bluer': ['bluer', 'brule', 'burel', 'ruble'], - 'blues': ['blues', 'bulse'], - 'bluffer': ['bluffer', 'rebluff'], - 'bluishness': ['bluishness', 'blushiness'], - 'bluism': ['bluism', 'limbus'], - 'blumea': ['bemaul', 'blumea'], - 'blunder': ['blunder', 'bundler'], - 'blunderer': ['blunderer', 'reblunder'], - 'blunge': ['blunge', 'bungle'], - 'blunger': ['blunger', 'bungler'], - 'bluntie': ['betulin', 'bluntie'], - 'blur': ['blur', 'burl'], - 'blushiness': ['bluishness', 'blushiness'], - 'bluster': ['bluster', 'brustle', 'bustler'], - 'boa': ['abo', 'boa'], - 'boar': ['boar', 'bora'], - 'board': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'], - 'boarder': ['arbored', 'boarder', 'reboard'], - 'boardly': ['boardly', 'broadly'], - 'boardy': ['boardy', 'boyard', 'byroad'], - 'boast': ['basto', 'boast', 'sabot'], - 'boaster': ['barotse', 'boaster', 'reboast', 'sorbate'], - 'boasting': ['boasting', 'bostangi'], - 'boat': ['boat', 'bota', 'toba'], - 'boater': ['boater', 'borate', 'rebato'], - 'boathouse': ['boathouse', 'houseboat'], - 'bobac': ['bobac', 'cabob'], - 'bobfly': ['bobfly', 'flobby'], - 'bobo': ['bobo', 'boob'], - 'bobtailed': ['bilobated', 'bobtailed'], - 'bocardo': ['bocardo', 'cordoba'], - 'boccale': ['boccale', 'cabocle'], - 'bocher': ['bocher', 'broche'], - 'bocking': ['bocking', 'kingcob'], - 'bod': ['bod', 'dob'], - 'bode': ['bode', 'dobe'], - 'boden': ['boden', 'boned'], - 'boder': ['boder', 'orbed'], - 'bodewash': ['beshadow', 'bodewash'], - 'bodge': ['bedog', 'bodge'], - 'bodhi': ['bodhi', 'dhobi'], - 'bodice': ['bodice', 'ceboid'], - 'bodier': ['bodier', 'boride', 'brodie'], - 'bodle': ['bodle', 'boled', 'lobed'], - 'bodo': ['bodo', 'bood', 'doob'], - 'body': ['body', 'boyd', 'doby'], - 'boer': ['boer', 'bore', 'robe'], - 'boerdom': ['bedroom', 'boerdom', 'boredom'], - 'boethian': ['boethian', 'nebaioth'], - 'bog': ['bog', 'gob'], - 'boga': ['bago', 'boga'], - 'bogan': ['bogan', 'goban'], - 'bogeyman': ['bogeyman', 'moneybag'], - 'boggler': ['boggler', 'broggle'], - 'boglander': ['boglander', 'longbeard'], - 'bogle': ['bogle', 'globe'], - 'boglet': ['boglet', 'goblet'], - 'bogo': ['bogo', 'gobo'], - 'bogue': ['bogue', 'bouge'], - 'bogum': ['bogum', 'gumbo'], - 'bogy': ['bogy', 'bygo', 'goby'], - 'bohea': ['bahoe', 'bohea', 'obeah'], - 'boho': ['boho', 'hobo'], - 'bohor': ['bohor', 'rohob'], - 'boid': ['biod', 'boid'], - 'boil': ['bilo', 'boil'], - 'boiled': ['beloid', 'boiled', 'bolide'], - 'boiler': ['boiler', 'reboil'], - 'boilover': ['boilover', 'overboil'], - 'bois': ['bios', 'bois'], - 'bojo': ['bojo', 'jobo'], - 'bolar': ['balor', 'bolar', 'boral', 'labor', 'lobar'], - 'bolden': ['blonde', 'bolden'], - 'bolderian': ['bolderian', 'ordinable'], - 'boldine': ['belonid', 'boldine'], - 'boldness': ['boldness', 'bondless'], - 'boldo': ['blood', 'boldo'], - 'bole': ['bleo', 'bole', 'lobe'], - 'boled': ['bodle', 'boled', 'lobed'], - 'bolelia': ['bolelia', 'lobelia', 'obelial'], - 'bolide': ['beloid', 'boiled', 'bolide'], - 'boller': ['beroll', 'boller'], - 'bolo': ['bolo', 'bool', 'lobo', 'obol'], - 'bolster': ['bolster', 'lobster'], - 'bolt': ['blot', 'bolt'], - 'boltage': ['boltage', 'globate'], - 'bolter': ['bolter', 'orblet', 'reblot', 'rebolt'], - 'bolthead': ['bolthead', 'theobald'], - 'bolting': ['biltong', 'bolting'], - 'boltless': ['blotless', 'boltless'], - 'boltonia': ['boltonia', 'lobation', 'oblation'], - 'bom': ['bom', 'mob'], - 'boma': ['ambo', 'boma'], - 'bombable': ['bombable', 'mobbable'], - 'bombacaceae': ['bombacaceae', 'cabombaceae'], - 'bomber': ['bomber', 'mobber'], - 'bon': ['bon', 'nob'], - 'bonaci': ['bianco', 'bonaci'], - 'bonair': ['bonair', 'borani'], - 'bondage': ['bondage', 'dogbane'], - 'bondar': ['bandor', 'bondar', 'roband'], - 'bondless': ['boldness', 'bondless'], - 'bone': ['beno', 'bone', 'ebon'], - 'boned': ['boden', 'boned'], - 'bonefish': ['bonefish', 'fishbone'], - 'boneless': ['boneless', 'noblesse'], - 'bonellia': ['baillone', 'bonellia'], - 'boner': ['boner', 'borne'], - 'boney': ['boney', 'ebony'], - 'boni': ['bino', 'bion', 'boni'], - 'bonitary': ['bonitary', 'trainboy'], - 'bonk': ['bonk', 'knob'], - 'bonnet': ['benton', 'bonnet'], - 'bonsai': ['basion', 'bonsai', 'sabino'], - 'bonus': ['bonus', 'bosun'], - 'bony': ['bony', 'byon'], - 'bonze': ['benzo', 'bonze'], - 'bonzer': ['bonzer', 'bronze'], - 'boob': ['bobo', 'boob'], - 'bood': ['bodo', 'bood', 'doob'], - 'booger': ['booger', 'goober'], - 'bookcase': ['bookcase', 'casebook'], - 'booker': ['booker', 'brooke', 'rebook'], - 'bookland': ['bookland', 'landbook'], - 'bookshop': ['bookshop', 'shopbook'], - 'bookward': ['bookward', 'woodbark'], - 'bookwork': ['bookwork', 'workbook'], - 'bool': ['bolo', 'bool', 'lobo', 'obol'], - 'booly': ['booly', 'looby'], - 'boomingly': ['boomingly', 'myoglobin'], - 'boopis': ['boopis', 'obispo'], - 'boor': ['boor', 'boro', 'broo'], - 'boort': ['boort', 'robot'], - 'boost': ['boost', 'boots'], - 'bootes': ['besoot', 'bootes'], - 'boother': ['boother', 'theorbo'], - 'boots': ['boost', 'boots'], - 'bop': ['bop', 'pob'], - 'bor': ['bor', 'orb', 'rob'], - 'bora': ['boar', 'bora'], - 'borable': ['belabor', 'borable'], - 'boracic': ['boracic', 'braccio'], - 'boral': ['balor', 'bolar', 'boral', 'labor', 'lobar'], - 'boran': ['baron', 'boran'], - 'borani': ['bonair', 'borani'], - 'borate': ['boater', 'borate', 'rebato'], - 'bord': ['bord', 'brod'], - 'bordel': ['belord', 'bordel', 'rebold'], - 'bordello': ['bordello', 'doorbell'], - 'border': ['border', 'roberd'], - 'borderer': ['borderer', 'broderer'], - 'bordure': ['bordure', 'bourder'], - 'bore': ['boer', 'bore', 'robe'], - 'boredom': ['bedroom', 'boerdom', 'boredom'], - 'boree': ['beroe', 'boree'], - 'boreen': ['boreen', 'enrobe', 'neebor', 'rebone'], - 'boreiad': ['beroida', 'boreiad'], - 'boreism': ['boreism', 'semiorb'], - 'borer': ['borer', 'rerob', 'rober'], - 'boreus': ['besour', 'boreus', 'bourse', 'bouser'], - 'borg': ['borg', 'brog', 'gorb'], - 'boric': ['boric', 'cribo', 'orbic'], - 'boride': ['bodier', 'boride', 'brodie'], - 'boring': ['boring', 'robing'], - 'boringly': ['boringly', 'goblinry'], - 'borlase': ['borlase', 'labrose', 'rosabel'], - 'borne': ['boner', 'borne'], - 'borneo': ['borneo', 'oberon'], - 'bornite': ['bornite', 'robinet'], - 'boro': ['boor', 'boro', 'broo'], - 'borocaine': ['borocaine', 'coenobiar'], - 'borofluohydric': ['borofluohydric', 'hydrofluoboric'], - 'borolanite': ['bertolonia', 'borolanite'], - 'boron': ['boron', 'broon'], - 'boronic': ['boronic', 'cobiron'], - 'borrower': ['borrower', 'reborrow'], - 'borscht': ['borscht', 'bortsch'], - 'bort': ['bort', 'brot'], - 'bortsch': ['borscht', 'bortsch'], - 'bos': ['bos', 'sob'], - 'bosc': ['bosc', 'scob'], - 'boser': ['boser', 'brose', 'sober'], - 'bosn': ['bosn', 'nobs', 'snob'], - 'bosselation': ['bosselation', 'eosinoblast'], - 'bosset': ['betoss', 'bosset'], - 'bostangi': ['boasting', 'bostangi'], - 'bostanji': ['banjoist', 'bostanji'], - 'bosun': ['bonus', 'bosun'], - 'bota': ['boat', 'bota', 'toba'], - 'botanical': ['botanical', 'catabolin'], - 'botanophilist': ['botanophilist', 'philobotanist'], - 'bote': ['bote', 'tobe'], - 'botein': ['botein', 'tobine'], - 'both': ['both', 'thob'], - 'bottler': ['blotter', 'bottler'], - 'bottling': ['blotting', 'bottling'], - 'bouge': ['bogue', 'bouge'], - 'bouget': ['bouget', 'outbeg'], - 'bouk': ['bouk', 'kobu'], - 'boulder': ['boulder', 'doubler'], - 'bouldering': ['bouldering', 'redoubling'], - 'boulter': ['boulter', 'trouble'], - 'bounden': ['bounden', 'unboned'], - 'bounder': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'], - 'bounding': ['bounding', 'unboding'], - 'bourder': ['bordure', 'bourder'], - 'bourn': ['bourn', 'bruno'], - 'bourse': ['besour', 'boreus', 'bourse', 'bouser'], - 'bouser': ['besour', 'boreus', 'bourse', 'bouser'], - 'bousy': ['bousy', 'byous'], - 'bow': ['bow', 'wob'], - 'bowel': ['below', 'bowel', 'elbow'], - 'boweled': ['boweled', 'elbowed'], - 'bowels': ['beslow', 'bowels'], - 'bowery': ['bowery', 'bowyer', 'owerby'], - 'bowie': ['bowie', 'woibe'], - 'bowker': ['bework', 'bowker'], - 'bowl': ['blow', 'bowl'], - 'bowla': ['ablow', 'balow', 'bowla'], - 'bowler': ['blower', 'bowler', 'reblow', 'worble'], - 'bowling': ['blowing', 'bowling'], - 'bowly': ['blowy', 'bowly'], - 'bowmaker': ['beamwork', 'bowmaker'], - 'bowyer': ['bowery', 'bowyer', 'owerby'], - 'boxer': ['boxer', 'rebox'], - 'boxwork': ['boxwork', 'workbox'], - 'boyang': ['boyang', 'yagnob'], - 'boyard': ['boardy', 'boyard', 'byroad'], - 'boyd': ['body', 'boyd', 'doby'], - 'boyship': ['boyship', 'shipboy'], - 'bozo': ['bozo', 'zobo'], - 'bozze': ['bezzo', 'bozze'], - 'bra': ['bar', 'bra', 'rab'], - 'brab': ['barb', 'brab'], - 'brabble': ['babbler', 'blabber', 'brabble'], - 'braca': ['acrab', 'braca'], - 'braccio': ['boracic', 'braccio'], - 'brace': ['acerb', 'brace', 'caber'], - 'braced': ['becard', 'braced'], - 'braceleted': ['braceleted', 'celebrated'], - 'bracer': ['bracer', 'craber'], - 'braces': ['braces', 'scrabe'], - 'brachet': ['batcher', 'berchta', 'brachet'], - 'brachiata': ['batrachia', 'brachiata'], - 'brachiofacial': ['brachiofacial', 'faciobrachial'], - 'brachiopode': ['brachiopode', 'cardiophobe'], - 'bracon': ['bracon', 'carbon', 'corban'], - 'bractea': ['abreact', 'bractea', 'cabaret'], - 'bracteal': ['bracteal', 'cartable'], - 'bracteiform': ['bacteriform', 'bracteiform'], - 'bracteose': ['bracteose', 'obsecrate'], - 'brad': ['bard', 'brad', 'drab'], - 'bradenhead': ['barehanded', 'bradenhead', 'headbander'], - 'brae': ['bare', 'bear', 'brae'], - 'braehead': ['barehead', 'braehead'], - 'brag': ['brag', 'garb', 'grab'], - 'bragi': ['bragi', 'girba'], - 'bragless': ['bragless', 'garbless'], - 'brahmi': ['brahmi', 'mihrab'], - 'brahui': ['brahui', 'habiru'], - 'braid': ['barid', 'bidar', 'braid', 'rabid'], - 'braider': ['braider', 'rebraid'], - 'brail': ['blair', 'brail', 'libra'], - 'braille': ['braille', 'liberal'], - 'brain': ['abrin', 'bairn', 'brain', 'brian', 'rabin'], - 'brainache': ['brainache', 'branchiae'], - 'brainge': ['bearing', 'begrain', 'brainge', 'rigbane'], - 'brainwater': ['brainwater', 'waterbrain'], - 'brainy': ['binary', 'brainy'], - 'braird': ['braird', 'briard'], - 'brairo': ['barrio', 'brairo'], - 'braise': ['braise', 'rabies', 'rebias'], - 'brake': ['baker', 'brake', 'break'], - 'brakeage': ['brakeage', 'breakage'], - 'brakeless': ['bakerless', 'brakeless', 'breakless'], - 'braker': ['barker', 'braker'], - 'braky': ['barky', 'braky'], - 'bram': ['barm', 'bram'], - 'brambrack': ['barmbrack', 'brambrack'], - 'bramia': ['bairam', 'bramia'], - 'bran': ['barn', 'bran'], - 'brancher': ['brancher', 'rebranch'], - 'branchiae': ['brainache', 'branchiae'], - 'branchiata': ['batrachian', 'branchiata'], - 'branchiopoda': ['branchiopoda', 'podobranchia'], - 'brander': ['bernard', 'brander', 'rebrand'], - 'brandi': ['brandi', 'riband'], - 'brandisher': ['brandisher', 'rebrandish'], - 'branial': ['blarina', 'branial'], - 'brankie': ['brankie', 'inbreak'], - 'brash': ['brash', 'shrab'], - 'brasiletto': ['brasiletto', 'strobilate'], - 'brassie': ['brassie', 'rebasis'], - 'brat': ['bart', 'brat'], - 'brattie': ['biretta', 'brattie', 'ratbite'], - 'brattle': ['battler', 'blatter', 'brattle'], - 'braunite': ['braunite', 'urbanite', 'urbinate'], - 'brave': ['brave', 'breva'], - 'bravoite': ['abortive', 'bravoite'], - 'brawler': ['brawler', 'warbler'], - 'brawling': ['brawling', 'warbling'], - 'brawlingly': ['brawlingly', 'warblingly'], - 'brawly': ['brawly', 'byrlaw', 'warbly'], - 'brawned': ['benward', 'brawned'], - 'bray': ['bray', 'yarb'], - 'braza': ['braza', 'zabra'], - 'braze': ['braze', 'zebra'], - 'brazier': ['bizarre', 'brazier'], - 'bread': ['ardeb', 'beard', 'bread', 'debar'], - 'breadless': ['beardless', 'breadless'], - 'breadlessness': ['beardlessness', 'breadlessness'], - 'breadman': ['banderma', 'breadman'], - 'breadnut': ['breadnut', 'turbaned'], - 'breaghe': ['breaghe', 'herbage'], - 'break': ['baker', 'brake', 'break'], - 'breakage': ['brakeage', 'breakage'], - 'breakless': ['bakerless', 'brakeless', 'breakless'], - 'breakout': ['breakout', 'outbreak'], - 'breakover': ['breakover', 'overbreak'], - 'breakstone': ['breakstone', 'stonebreak'], - 'breakup': ['breakup', 'upbreak'], - 'breakwind': ['breakwind', 'windbreak'], - 'bream': ['amber', 'bearm', 'bemar', 'bream', 'embar'], - 'breast': ['baster', 'bestar', 'breast'], - 'breasting': ['breasting', 'brigantes'], - 'breastpin': ['breastpin', 'stepbairn'], - 'breastrail': ['arbalister', 'breastrail'], - 'breastweed': ['breastweed', 'sweetbread'], - 'breath': ['bather', 'bertha', 'breath'], - 'breathe': ['breathe', 'rebathe'], - 'breba': ['barbe', 'bebar', 'breba', 'rebab'], - 'breccia': ['acerbic', 'breccia'], - 'brecham': ['becharm', 'brecham', 'chamber'], - 'brede': ['brede', 'breed', 'rebed'], - 'bredi': ['bider', 'bredi', 'bride', 'rebid'], - 'bree': ['beer', 'bere', 'bree'], - 'breech': ['becher', 'breech'], - 'breed': ['brede', 'breed', 'rebed'], - 'breeder': ['breeder', 'rebreed'], - 'breeding': ['beringed', 'breeding'], - 'brehon': ['behorn', 'brehon'], - 'brei': ['beri', 'bier', 'brei', 'ribe'], - 'brelaw': ['bawler', 'brelaw', 'rebawl', 'warble'], - 'breme': ['breme', 'ember'], - 'bremia': ['ambier', 'bremia', 'embira'], - 'brenda': ['bander', 'brenda'], - 'brephic': ['bechirp', 'brephic'], - 'bret': ['bert', 'bret'], - 'breth': ['berth', 'breth'], - 'breva': ['brave', 'breva'], - 'breve': ['bever', 'breve'], - 'brewer': ['brewer', 'rebrew'], - 'brey': ['brey', 'byre', 'yerb'], - 'brian': ['abrin', 'bairn', 'brain', 'brian', 'rabin'], - 'briard': ['braird', 'briard'], - 'briber': ['briber', 'ribber'], - 'brichen': ['birchen', 'brichen'], - 'brickel': ['brickel', 'brickle'], - 'bricken': ['bickern', 'bricken'], - 'brickle': ['brickel', 'brickle'], - 'bricole': ['bricole', 'corbeil', 'orbicle'], - 'bridal': ['bildar', 'bridal', 'ribald'], - 'bridale': ['bedrail', 'bridale', 'ridable'], - 'bridally': ['bridally', 'ribaldly'], - 'bride': ['bider', 'bredi', 'bride', 'rebid'], - 'bridelace': ['bridelace', 'calibered'], - 'bridge': ['begird', 'bridge'], - 'bridgeward': ['bridgeward', 'drawbridge'], - 'bridling': ['birdling', 'bridling', 'lingbird'], - 'brief': ['bifer', 'brief', 'fiber'], - 'briefless': ['briefless', 'fiberless', 'fibreless'], - 'brier': ['berri', 'brier'], - 'briered': ['berried', 'briered'], - 'brieve': ['bervie', 'brieve'], - 'brigade': ['abridge', 'brigade'], - 'brigand': ['barding', 'brigand'], - 'brigantes': ['breasting', 'brigantes'], - 'brighten': ['berthing', 'brighten'], - 'brin': ['birn', 'brin'], - 'brine': ['brine', 'enrib'], - 'bringal': ['barling', 'bringal'], - 'bringer': ['bringer', 'rebring'], - 'briny': ['birny', 'briny'], - 'bristle': ['blister', 'bristle'], - 'bristlewort': ['blisterwort', 'bristlewort'], - 'brisure': ['brisure', 'bruiser'], - 'britannia': ['antiabrin', 'britannia'], - 'brith': ['birth', 'brith'], - 'brither': ['brither', 'rebirth'], - 'britten': ['bittern', 'britten'], - 'brittle': ['blitter', 'brittle', 'triblet'], - 'broacher': ['broacher', 'rebroach'], - 'broad': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'], - 'broadbill': ['billboard', 'broadbill'], - 'broadcaster': ['broadcaster', 'rebroadcast'], - 'broaden': ['bandore', 'broaden'], - 'broadhead': ['broadhead', 'headboard'], - 'broadly': ['boardly', 'broadly'], - 'broadside': ['broadside', 'sideboard'], - 'broadspread': ['broadspread', 'spreadboard'], - 'broadtail': ['broadtail', 'tailboard'], - 'brochan': ['brochan', 'charbon'], - 'broche': ['bocher', 'broche'], - 'brocho': ['brocho', 'brooch'], - 'brocked': ['bedrock', 'brocked'], - 'brockle': ['blocker', 'brockle', 'reblock'], - 'brod': ['bord', 'brod'], - 'broderer': ['borderer', 'broderer'], - 'brodie': ['bodier', 'boride', 'brodie'], - 'brog': ['borg', 'brog', 'gorb'], - 'brogan': ['barong', 'brogan'], - 'broggle': ['boggler', 'broggle'], - 'brolga': ['brolga', 'gorbal'], - 'broma': ['broma', 'rambo'], - 'bromate': ['barmote', 'bromate'], - 'brome': ['brome', 'omber'], - 'brominate': ['brominate', 'tribonema'], - 'bromohydrate': ['bromohydrate', 'hydrobromate'], - 'bronze': ['bonzer', 'bronze'], - 'broo': ['boor', 'boro', 'broo'], - 'brooch': ['brocho', 'brooch'], - 'brooke': ['booker', 'brooke', 'rebook'], - 'broon': ['boron', 'broon'], - 'brose': ['boser', 'brose', 'sober'], - 'brot': ['bort', 'brot'], - 'brotan': ['barton', 'brotan'], - 'brotany': ['baryton', 'brotany'], - 'broth': ['broth', 'throb'], - 'brothelry': ['brothelry', 'brotherly'], - 'brotherly': ['brothelry', 'brotherly'], - 'browden': ['bedrown', 'browden'], - 'browner': ['browner', 'rebrown'], - 'browntail': ['browntail', 'wrainbolt'], - 'bruce': ['bruce', 'cebur', 'cuber'], - 'brucina': ['brucina', 'rubican'], - 'bruckle': ['bruckle', 'buckler'], - 'brugh': ['brugh', 'burgh'], - 'bruin': ['bruin', 'burin', 'inrub'], - 'bruiser': ['brisure', 'bruiser'], - 'bruke': ['bruke', 'burke'], - 'brule': ['bluer', 'brule', 'burel', 'ruble'], - 'brulee': ['brulee', 'burele', 'reblue'], - 'brumal': ['brumal', 'labrum', 'lumbar', 'umbral'], - 'brumalia': ['albarium', 'brumalia'], - 'brume': ['brume', 'umber'], - 'brumous': ['brumous', 'umbrous'], - 'brunellia': ['brunellia', 'unliberal'], - 'brunet': ['brunet', 'bunter', 'burnet'], - 'bruno': ['bourn', 'bruno'], - 'brunt': ['brunt', 'burnt'], - 'brush': ['brush', 'shrub'], - 'brushed': ['brushed', 'subherd'], - 'brusher': ['brusher', 'rebrush'], - 'brushland': ['brushland', 'shrubland'], - 'brushless': ['brushless', 'shrubless'], - 'brushlet': ['brushlet', 'shrublet'], - 'brushlike': ['brushlike', 'shrublike'], - 'brushwood': ['brushwood', 'shrubwood'], - 'brustle': ['bluster', 'brustle', 'bustler'], - 'brut': ['brut', 'burt', 'trub', 'turb'], - 'bruta': ['bruta', 'tubar'], - 'brute': ['brute', 'buret', 'rebut', 'tuber'], - 'brutely': ['brutely', 'butlery'], - 'bryan': ['barny', 'bryan'], - 'bryanite': ['barytine', 'bryanite'], - 'bryce': ['becry', 'bryce'], - 'bual': ['balu', 'baul', 'bual', 'luba'], - 'buba': ['babu', 'buba'], - 'bubal': ['babul', 'bubal'], - 'bubbler': ['blubber', 'bubbler'], - 'buccocervical': ['buccocervical', 'cervicobuccal'], - 'bucconasal': ['bucconasal', 'nasobuccal'], - 'buceros': ['bescour', 'buceros', 'obscure'], - 'buckbush': ['buckbush', 'bushbuck'], - 'bucked': ['beduck', 'bucked'], - 'buckler': ['bruckle', 'buckler'], - 'bucksaw': ['bucksaw', 'sawbuck'], - 'bucrane': ['bucrane', 'unbrace'], - 'bud': ['bud', 'dub'], - 'buda': ['baud', 'buda', 'daub'], - 'budder': ['budder', 'redbud'], - 'budger': ['bedrug', 'budger'], - 'budgeter': ['budgeter', 'rebudget'], - 'budtime': ['bitumed', 'budtime'], - 'buffer': ['buffer', 'rebuff'], - 'buffeter': ['buffeter', 'rebuffet'], - 'bugan': ['bugan', 'bunga', 'unbag'], - 'bughouse': ['bughouse', 'housebug'], - 'bugi': ['bugi', 'guib'], - 'bugle': ['bugle', 'bulge'], - 'bugler': ['bugler', 'bulger', 'burgle'], - 'bugre': ['bugre', 'gebur'], - 'builder': ['builder', 'rebuild'], - 'buildup': ['buildup', 'upbuild'], - 'buirdly': ['buirdly', 'ludibry'], - 'bulanda': ['balunda', 'bulanda'], - 'bulb': ['blub', 'bulb'], - 'bulgarian': ['biangular', 'bulgarian'], - 'bulge': ['bugle', 'bulge'], - 'bulger': ['bugler', 'bulger', 'burgle'], - 'bulimic': ['bulimic', 'umbilic'], - 'bulimiform': ['bulimiform', 'umbiliform'], - 'bulker': ['bulker', 'rebulk'], - 'bulla': ['bulla', 'lulab'], - 'bullace': ['bullace', 'cueball'], - 'bulletin': ['bulletin', 'unbillet'], - 'bullfeast': ['bullfeast', 'stableful'], - 'bulse': ['blues', 'bulse'], - 'bulter': ['bulter', 'burlet', 'butler'], - 'bummler': ['bummler', 'mumbler'], - 'bun': ['bun', 'nub'], - 'buna': ['baun', 'buna', 'nabu', 'nuba'], - 'buncal': ['buncal', 'lucban'], - 'buncher': ['buncher', 'rebunch'], - 'bunder': ['bunder', 'burden', 'burned', 'unbred'], - 'bundle': ['bundle', 'unbled'], - 'bundler': ['blunder', 'bundler'], - 'bundu': ['bundu', 'unbud', 'undub'], - 'bunga': ['bugan', 'bunga', 'unbag'], - 'bungle': ['blunge', 'bungle'], - 'bungler': ['blunger', 'bungler'], - 'bungo': ['bungo', 'unbog'], - 'bunk': ['bunk', 'knub'], - 'bunter': ['brunet', 'bunter', 'burnet'], - 'bunty': ['bunty', 'butyn'], - 'bunya': ['bunya', 'unbay'], - 'bur': ['bur', 'rub'], - 'buran': ['buran', 'unbar', 'urban'], - 'burble': ['burble', 'lubber', 'rubble'], - 'burbler': ['burbler', 'rubbler'], - 'burbly': ['burbly', 'rubbly'], - 'burd': ['burd', 'drub'], - 'burdalone': ['burdalone', 'unlabored'], - 'burden': ['bunder', 'burden', 'burned', 'unbred'], - 'burdener': ['burdener', 'reburden'], - 'burdie': ['burdie', 'buried', 'rubied'], - 'bure': ['bure', 'reub', 'rube'], - 'burel': ['bluer', 'brule', 'burel', 'ruble'], - 'burele': ['brulee', 'burele', 'reblue'], - 'buret': ['brute', 'buret', 'rebut', 'tuber'], - 'burfish': ['burfish', 'furbish'], - 'burg': ['burg', 'grub'], - 'burgh': ['brugh', 'burgh'], - 'burgle': ['bugler', 'bulger', 'burgle'], - 'burian': ['burian', 'urbian'], - 'buried': ['burdie', 'buried', 'rubied'], - 'burin': ['bruin', 'burin', 'inrub'], - 'burke': ['bruke', 'burke'], - 'burl': ['blur', 'burl'], - 'burler': ['burler', 'burrel'], - 'burlet': ['bulter', 'burlet', 'butler'], - 'burletta': ['burletta', 'rebuttal'], - 'burmite': ['burmite', 'imbrute', 'terbium'], - 'burned': ['bunder', 'burden', 'burned', 'unbred'], - 'burner': ['burner', 'reburn'], - 'burnet': ['brunet', 'bunter', 'burnet'], - 'burnfire': ['burnfire', 'fireburn'], - 'burnie': ['burnie', 'rubine'], - 'burnisher': ['burnisher', 'reburnish'], - 'burnout': ['burnout', 'outburn'], - 'burnover': ['burnover', 'overburn'], - 'burnsides': ['burnsides', 'sideburns'], - 'burnt': ['brunt', 'burnt'], - 'burny': ['burny', 'runby'], - 'buro': ['buro', 'roub'], - 'burrel': ['burler', 'burrel'], - 'burro': ['burro', 'robur', 'rubor'], - 'bursa': ['abrus', 'bursa', 'subra'], - 'bursal': ['bursal', 'labrus'], - 'bursate': ['bursate', 'surbate'], - 'burse': ['burse', 'rebus', 'suber'], - 'burst': ['burst', 'strub'], - 'burster': ['burster', 'reburst'], - 'burt': ['brut', 'burt', 'trub', 'turb'], - 'burut': ['burut', 'trubu'], - 'bury': ['bury', 'ruby'], - 'bus': ['bus', 'sub'], - 'buscarle': ['arbuscle', 'buscarle'], - 'bushbuck': ['buckbush', 'bushbuck'], - 'busher': ['busher', 'rebush'], - 'bushwood': ['bushwood', 'woodbush'], - 'busied': ['busied', 'subdie'], - 'busked': ['bedusk', 'busked'], - 'busman': ['busman', 'subman'], - 'bust': ['bust', 'stub'], - 'busted': ['bedust', 'bestud', 'busted'], - 'buster': ['berust', 'buster', 'stuber'], - 'bustic': ['bustic', 'cubist'], - 'bustle': ['bustle', 'sublet', 'subtle'], - 'bustler': ['bluster', 'brustle', 'bustler'], - 'but': ['but', 'tub'], - 'bute': ['bute', 'tebu', 'tube'], - 'butea': ['butea', 'taube', 'tubae'], - 'butein': ['butein', 'butine', 'intube'], - 'butic': ['butic', 'cubit'], - 'butine': ['butein', 'butine', 'intube'], - 'butler': ['bulter', 'burlet', 'butler'], - 'butleress': ['butleress', 'tuberless'], - 'butlery': ['brutely', 'butlery'], - 'buttle': ['buttle', 'tublet'], - 'buttoner': ['buttoner', 'rebutton'], - 'butyn': ['bunty', 'butyn'], - 'buyer': ['buyer', 'rebuy'], - 'bye': ['bey', 'bye'], - 'byeman': ['byeman', 'byname'], - 'byerite': ['byerite', 'ebriety'], - 'bygo': ['bogy', 'bygo', 'goby'], - 'byname': ['byeman', 'byname'], - 'byon': ['bony', 'byon'], - 'byous': ['bousy', 'byous'], - 'byre': ['brey', 'byre', 'yerb'], - 'byrlaw': ['brawly', 'byrlaw', 'warbly'], - 'byroad': ['boardy', 'boyard', 'byroad'], - 'cab': ['bac', 'cab'], - 'caba': ['abac', 'caba'], - 'cabaan': ['cabaan', 'cabana', 'canaba'], - 'cabala': ['cabala', 'calaba'], - 'cabaletta': ['ablactate', 'cabaletta'], - 'cabalism': ['balsamic', 'cabalism'], - 'cabalist': ['basaltic', 'cabalist'], - 'caballer': ['barcella', 'caballer'], - 'caban': ['banca', 'caban'], - 'cabana': ['cabaan', 'cabana', 'canaba'], - 'cabaret': ['abreact', 'bractea', 'cabaret'], - 'cabbler': ['cabbler', 'clabber'], - 'caber': ['acerb', 'brace', 'caber'], - 'cabio': ['baioc', 'cabio', 'cobia'], - 'cabiri': ['cabiri', 'caribi'], - 'cabirian': ['arabinic', 'cabirian', 'carabini', 'cibarian'], - 'cable': ['cable', 'caleb'], - 'cabled': ['beclad', 'cabled'], - 'cabob': ['bobac', 'cabob'], - 'cabocle': ['boccale', 'cabocle'], - 'cabombaceae': ['bombacaceae', 'cabombaceae'], - 'cabrilla': ['bacillar', 'cabrilla'], - 'caca': ['acca', 'caca'], - 'cachet': ['cachet', 'chacte'], - 'cachou': ['cachou', 'caucho'], - 'cackler': ['cackler', 'clacker', 'crackle'], - 'cacodaemonic': ['cacodaemonic', 'cacodemoniac'], - 'cacodemoniac': ['cacodaemonic', 'cacodemoniac'], - 'cacomistle': ['cacomistle', 'cosmetical'], - 'cacoxenite': ['cacoxenite', 'excecation'], - 'cactaceae': ['cactaceae', 'taccaceae'], - 'cactaceous': ['cactaceous', 'taccaceous'], - 'cacti': ['cacti', 'ticca'], - 'cactoid': ['cactoid', 'octadic'], - 'caddice': ['caddice', 'decadic'], - 'caddie': ['caddie', 'eddaic'], - 'cade': ['cade', 'dace', 'ecad'], - 'cadent': ['cadent', 'canted', 'decant'], - 'cadential': ['cadential', 'dancalite'], - 'cader': ['acred', 'cader', 'cadre', 'cedar'], - 'cadet': ['cadet', 'ectad'], - 'cadge': ['cadge', 'caged'], - 'cadger': ['cadger', 'cradge'], - 'cadi': ['acid', 'cadi', 'caid'], - 'cadinene': ['cadinene', 'decennia', 'enneadic'], - 'cadmia': ['adamic', 'cadmia'], - 'cados': ['cados', 'scoad'], - 'cadre': ['acred', 'cader', 'cadre', 'cedar'], - 'cadua': ['cadua', 'cauda'], - 'caduac': ['caduac', 'caduca'], - 'caduca': ['caduac', 'caduca'], - 'cadus': ['cadus', 'dacus'], - 'caeciliae': ['caeciliae', 'ilicaceae'], - 'caedmonian': ['caedmonian', 'macedonian'], - 'caedmonic': ['caedmonic', 'macedonic'], - 'caelum': ['almuce', 'caelum', 'macule'], - 'caelus': ['caelus', 'caules', 'clause'], - 'caesar': ['ascare', 'caesar', 'resaca'], - 'caesarist': ['caesarist', 'staircase'], - 'caesura': ['auresca', 'caesura'], - 'caffeina': ['affiance', 'caffeina'], - 'caged': ['cadge', 'caged'], - 'cageling': ['cageling', 'glaceing'], - 'cager': ['cager', 'garce', 'grace'], - 'cahill': ['achill', 'cahill', 'chilla'], - 'cahita': ['cahita', 'ithaca'], - 'cahnite': ['cahnite', 'cathine'], - 'caid': ['acid', 'cadi', 'caid'], - 'caiman': ['amniac', 'caiman', 'maniac'], - 'caimito': ['caimito', 'comitia'], - 'cain': ['cain', 'inca'], - 'cainism': ['cainism', 'misniac'], - 'cairba': ['arabic', 'cairba'], - 'caird': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'], - 'cairene': ['cairene', 'cinerea'], - 'cairn': ['cairn', 'crain', 'naric'], - 'cairned': ['cairned', 'candier'], - 'cairny': ['cairny', 'riancy'], - 'cairo': ['cairo', 'oaric'], - 'caisson': ['caisson', 'cassino'], - 'cajoler': ['cajoler', 'jecoral'], - 'caker': ['acker', 'caker', 'crake', 'creak'], - 'cakey': ['ackey', 'cakey'], - 'cal': ['cal', 'lac'], - 'calaba': ['cabala', 'calaba'], - 'calamine': ['alcamine', 'analcime', 'calamine', 'camelina'], - 'calamint': ['calamint', 'claimant'], - 'calamitean': ['calamitean', 'catamenial'], - 'calander': ['calander', 'calendar'], - 'calandrinae': ['calandrinae', 'calendarian'], - 'calas': ['calas', 'casal', 'scala'], - 'calash': ['calash', 'lachsa'], - 'calathian': ['acanthial', 'calathian'], - 'calaverite': ['calaverite', 'lacerative'], - 'calcareocorneous': ['calcareocorneous', 'corneocalcareous'], - 'calcareosiliceous': ['calcareosiliceous', 'siliceocalcareous'], - 'calciner': ['calciner', 'larcenic'], - 'calculary': ['calculary', 'calycular'], - 'calculative': ['calculative', 'claviculate'], - 'calden': ['calden', 'candle', 'lanced'], - 'calean': ['anlace', 'calean'], - 'caleb': ['cable', 'caleb'], - 'caledonia': ['caledonia', 'laodicean'], - 'caledonite': ['caledonite', 'celadonite'], - 'calendar': ['calander', 'calendar'], - 'calendarial': ['calendarial', 'dalecarlian'], - 'calendarian': ['calandrinae', 'calendarian'], - 'calender': ['calender', 'encradle'], - 'calenture': ['calenture', 'crenulate'], - 'calepin': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'], - 'calfkill': ['calfkill', 'killcalf'], - 'caliban': ['balanic', 'caliban'], - 'caliber': ['caliber', 'calibre'], - 'calibered': ['bridelace', 'calibered'], - 'calibrate': ['bacterial', 'calibrate'], - 'calibre': ['caliber', 'calibre'], - 'caliburno': ['binocular', 'caliburno', 'colubrina'], - 'calico': ['accoil', 'calico'], - 'calidity': ['calidity', 'dialytic'], - 'caliga': ['caliga', 'cigala'], - 'calinago': ['analogic', 'calinago'], - 'calinut': ['calinut', 'lunatic'], - 'caliper': ['caliper', 'picarel', 'replica'], - 'calipers': ['calipers', 'spiracle'], - 'caliphate': ['caliphate', 'hepatical'], - 'calite': ['calite', 'laetic', 'tecali'], - 'caliver': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'], - 'calk': ['calk', 'lack'], - 'calker': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'], - 'callboy': ['callboy', 'collyba'], - 'caller': ['caller', 'cellar', 'recall'], - 'calli': ['calli', 'lilac'], - 'calligraphy': ['calligraphy', 'graphically'], - 'calliopsis': ['calliopsis', 'lipoclasis'], - 'callisection': ['callisection', 'clinoclasite'], - 'callitype': ['callitype', 'plicately'], - 'callo': ['callo', 'colla', 'local'], - 'callosal': ['callosal', 'scallola'], - 'callose': ['callose', 'oscella'], - 'callosity': ['callosity', 'stoically'], - 'callosum': ['callosum', 'mollusca'], - 'calluna': ['calluna', 'lacunal'], - 'callus': ['callus', 'sulcal'], - 'calm': ['calm', 'clam'], - 'calmant': ['calmant', 'clamant'], - 'calmative': ['calmative', 'clamative'], - 'calmer': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'], - 'calmierer': ['calmierer', 'reclaimer'], - 'calomba': ['calomba', 'cambalo'], - 'calonectria': ['calonectria', 'ectocranial'], - 'calor': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'], - 'calorie': ['calorie', 'cariole'], - 'calorist': ['calorist', 'coralist'], - 'calorite': ['calorite', 'erotical', 'loricate'], - 'calorize': ['calorize', 'coalizer'], - 'calotermes': ['calotermes', 'mesorectal', 'metacresol'], - 'calotermitid': ['calotermitid', 'dilatometric'], - 'calp': ['calp', 'clap'], - 'caltha': ['caltha', 'chalta'], - 'caltrop': ['caltrop', 'proctal'], - 'calusa': ['ascula', 'calusa', 'casual', 'casula', 'causal'], - 'calvaria': ['calvaria', 'clavaria'], - 'calvary': ['calvary', 'cavalry'], - 'calve': ['calve', 'cavel', 'clave'], - 'calver': ['calver', 'carvel', 'claver'], - 'calves': ['calves', 'scavel'], - 'calycular': ['calculary', 'calycular'], - 'calyptratae': ['acalyptrate', 'calyptratae'], - 'cam': ['cam', 'mac'], - 'camaca': ['camaca', 'macaca'], - 'camail': ['amical', 'camail', 'lamaic'], - 'caman': ['caman', 'macan'], - 'camara': ['acamar', 'camara', 'maraca'], - 'cambalo': ['calomba', 'cambalo'], - 'camber': ['becram', 'camber', 'crambe'], - 'cambrel': ['cambrel', 'clamber', 'cramble'], - 'came': ['acme', 'came', 'mace'], - 'cameist': ['cameist', 'etacism', 'sematic'], - 'camel': ['camel', 'clame', 'cleam', 'macle'], - 'camelid': ['camelid', 'decimal', 'declaim', 'medical'], - 'camelina': ['alcamine', 'analcime', 'calamine', 'camelina'], - 'camelish': ['camelish', 'schalmei'], - 'camellus': ['camellus', 'sacellum'], - 'cameloid': ['cameloid', 'comedial', 'melodica'], - 'cameograph': ['cameograph', 'macrophage'], - 'camera': ['acream', 'camera', 'mareca'], - 'cameral': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'], - 'camerate': ['camerate', 'macerate', 'racemate'], - 'camerated': ['camerated', 'demarcate'], - 'cameration': ['aeromantic', 'cameration', 'maceration', 'racemation'], - 'camerina': ['amacrine', 'american', 'camerina', 'cinerama'], - 'camerist': ['camerist', 'ceramist', 'matrices'], - 'camion': ['camion', 'conima', 'manioc', 'monica'], - 'camisado': ['camisado', 'caodaism'], - 'camise': ['camise', 'macies'], - 'campaign': ['campaign', 'pangamic'], - 'campaigner': ['campaigner', 'recampaign'], - 'camphire': ['camphire', 'hemicarp'], - 'campine': ['campine', 'pemican'], - 'campoo': ['campoo', 'capomo'], - 'camptonite': ['camptonite', 'pentatomic'], - 'camus': ['camus', 'musca', 'scaum', 'sumac'], - 'camused': ['camused', 'muscade'], - 'canaba': ['cabaan', 'cabana', 'canaba'], - 'canadol': ['acnodal', 'canadol', 'locanda'], - 'canaille': ['alliance', 'canaille'], - 'canape': ['canape', 'panace'], - 'canari': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'canarin': ['canarin', 'cranian'], - 'canariote': ['canariote', 'ceratonia'], - 'canary': ['canary', 'cynara'], - 'canaut': ['canaut', 'tucana'], - 'canceler': ['canceler', 'clarence', 'recancel'], - 'cancer': ['cancer', 'crance'], - 'cancerate': ['cancerate', 'reactance'], - 'canceration': ['anacreontic', 'canceration'], - 'cancri': ['cancri', 'carnic', 'cranic'], - 'cancroid': ['cancroid', 'draconic'], - 'candela': ['candela', 'decanal'], - 'candier': ['cairned', 'candier'], - 'candiru': ['candiru', 'iracund'], - 'candle': ['calden', 'candle', 'lanced'], - 'candor': ['candor', 'cardon', 'conrad'], - 'candroy': ['candroy', 'dacryon'], - 'cane': ['acne', 'cane', 'nace'], - 'canel': ['canel', 'clean', 'lance', 'lenca'], - 'canelo': ['canelo', 'colane'], - 'canephor': ['canephor', 'chaperno', 'chaperon'], - 'canephore': ['canephore', 'chaperone'], - 'canephroi': ['canephroi', 'parochine'], - 'caner': ['caner', 'crane', 'crena', 'nacre', 'rance'], - 'canful': ['canful', 'flucan'], - 'cangle': ['cangle', 'glance'], - 'cangler': ['cangler', 'glancer', 'reclang'], - 'cangue': ['cangue', 'uncage'], - 'canicola': ['canicola', 'laconica'], - 'canid': ['canid', 'cnida', 'danic'], - 'canidae': ['aidance', 'canidae'], - 'canine': ['canine', 'encina', 'neanic'], - 'canis': ['canis', 'scian'], - 'canister': ['canister', 'cestrian', 'cisterna', 'irascent'], - 'canker': ['canker', 'neckar'], - 'cankerworm': ['cankerworm', 'crownmaker'], - 'cannel': ['cannel', 'lencan'], - 'cannot': ['cannot', 'canton', 'conant', 'nonact'], - 'cannulate': ['antelucan', 'cannulate'], - 'canny': ['canny', 'nancy'], - 'canoe': ['acone', 'canoe', 'ocean'], - 'canoeing': ['anogenic', 'canoeing'], - 'canoeist': ['canoeist', 'cotesian'], - 'canon': ['ancon', 'canon'], - 'canonist': ['canonist', 'sanction', 'sonantic'], - 'canoodler': ['canoodler', 'coronaled'], - 'canroy': ['canroy', 'crayon', 'cyrano', 'nyroca'], - 'canso': ['ascon', 'canso', 'oscan'], - 'cantabri': ['bactrian', 'cantabri'], - 'cantala': ['cantala', 'catalan', 'lantaca'], - 'cantalite': ['cantalite', 'lactinate', 'tetanical'], - 'cantara': ['cantara', 'nacarat'], - 'cantaro': ['cantaro', 'croatan'], - 'cantate': ['anteact', 'cantate'], - 'canted': ['cadent', 'canted', 'decant'], - 'canteen': ['canteen', 'centena'], - 'canter': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'canterer': ['canterer', 'recanter', 'recreant', 'terrance'], - 'cantharidae': ['acidanthera', 'cantharidae'], - 'cantharis': ['anarchist', 'archsaint', 'cantharis'], - 'canthus': ['canthus', 'staunch'], - 'cantico': ['cantico', 'catonic', 'taconic'], - 'cantilena': ['cantilena', 'lancinate'], - 'cantilever': ['cantilever', 'trivalence'], - 'cantily': ['anticly', 'cantily'], - 'cantina': ['cantina', 'tannaic'], - 'cantiness': ['anticness', 'cantiness', 'incessant'], - 'cantion': ['actinon', 'cantion', 'contain'], - 'cantle': ['cantle', 'cental', 'lancet', 'tancel'], - 'canto': ['acton', 'canto', 'octan'], - 'canton': ['cannot', 'canton', 'conant', 'nonact'], - 'cantonal': ['cantonal', 'connatal'], - 'cantor': ['cantor', 'carton', 'contra'], - 'cantorian': ['anarcotin', 'cantorian', 'carnation', 'narcotina'], - 'cantoris': ['cantoris', 'castorin', 'corsaint'], - 'cantred': ['cantred', 'centrad', 'tranced'], - 'cantus': ['cantus', 'tuscan', 'uncast'], - 'canun': ['canun', 'cunan'], - 'cany': ['cany', 'cyan'], - 'canyon': ['ancony', 'canyon'], - 'caoba': ['bacao', 'caoba'], - 'caodaism': ['camisado', 'caodaism'], - 'cap': ['cap', 'pac'], - 'capable': ['capable', 'pacable'], - 'caparison': ['caparison', 'paranosic'], - 'cape': ['cape', 'cepa', 'pace'], - 'caped': ['caped', 'decap', 'paced'], - 'capel': ['capel', 'place'], - 'capelin': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'], - 'capeline': ['capeline', 'pelecani'], - 'caper': ['caper', 'crape', 'pacer', 'perca', 'recap'], - 'capernaite': ['capernaite', 'paraenetic'], - 'capernoited': ['capernoited', 'deprecation'], - 'capernoity': ['acetopyrin', 'capernoity'], - 'capes': ['capes', 'scape', 'space'], - 'caph': ['caph', 'chap'], - 'caphite': ['aphetic', 'caphite', 'hepatic'], - 'caphtor': ['caphtor', 'toparch'], - 'capias': ['capias', 'pisaca'], - 'capillament': ['capillament', 'implacental'], - 'capillarity': ['capillarity', 'piratically'], - 'capital': ['capital', 'palatic'], - 'capitan': ['capitan', 'captain'], - 'capitate': ['apatetic', 'capitate'], - 'capitellar': ['capitellar', 'prelatical'], - 'capito': ['atopic', 'capito', 'copita'], - 'capitol': ['capitol', 'coalpit', 'optical', 'topical'], - 'capomo': ['campoo', 'capomo'], - 'capon': ['capon', 'ponca'], - 'caponier': ['caponier', 'coprinae', 'procaine'], - 'capot': ['capot', 'coapt'], - 'capote': ['capote', 'toecap'], - 'capreol': ['capreol', 'polacre'], - 'capri': ['capri', 'picra', 'rapic'], - 'caprid': ['caprid', 'carpid', 'picard'], - 'capriote': ['aporetic', 'capriote', 'operatic'], - 'capsian': ['capsian', 'caspian', 'nascapi', 'panisca'], - 'capstone': ['capstone', 'opencast'], - 'capsula': ['capsula', 'pascual', 'scapula'], - 'capsular': ['capsular', 'scapular'], - 'capsulate': ['aspectual', 'capsulate'], - 'capsulated': ['capsulated', 'scapulated'], - 'capsule': ['capsule', 'specula', 'upscale'], - 'capsulectomy': ['capsulectomy', 'scapulectomy'], - 'capsuler': ['capsuler', 'specular'], - 'captain': ['capitan', 'captain'], - 'captation': ['anaptotic', 'captation'], - 'caption': ['caption', 'paction'], - 'captious': ['autopsic', 'captious'], - 'captor': ['captor', 'copart'], - 'capture': ['capture', 'uptrace'], - 'car': ['arc', 'car'], - 'cara': ['arca', 'cara'], - 'carabeen': ['bearance', 'carabeen'], - 'carabin': ['arbacin', 'carabin', 'cariban'], - 'carabini': ['arabinic', 'cabirian', 'carabini', 'cibarian'], - 'caracoli': ['caracoli', 'coracial'], - 'caracore': ['acrocera', 'caracore'], - 'caragana': ['aracanga', 'caragana'], - 'caramel': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'], - 'caranda': ['anacard', 'caranda'], - 'carandas': ['carandas', 'sandarac'], - 'carane': ['arcane', 'carane'], - 'carangid': ['carangid', 'cardigan'], - 'carapine': ['carapine', 'carpaine'], - 'caravel': ['caravel', 'lavacre'], - 'carbamide': ['carbamide', 'crambidae'], - 'carbamine': ['carbamine', 'crambinae'], - 'carbamino': ['carbamino', 'macrobian'], - 'carbeen': ['carbeen', 'carbene'], - 'carbene': ['carbeen', 'carbene'], - 'carbo': ['carbo', 'carob', 'coarb', 'cobra'], - 'carbohydride': ['carbohydride', 'hydrocarbide'], - 'carbon': ['bracon', 'carbon', 'corban'], - 'carbonite': ['bicornate', 'carbonite', 'reboantic'], - 'carcel': ['carcel', 'cercal'], - 'carcinoma': ['carcinoma', 'macaronic'], - 'carcinosarcoma': ['carcinosarcoma', 'sarcocarcinoma'], - 'carcoon': ['carcoon', 'raccoon'], - 'cardel': ['cardel', 'cradle'], - 'cardia': ['acarid', 'cardia', 'carida'], - 'cardiac': ['arcadic', 'cardiac'], - 'cardial': ['cardial', 'radical'], - 'cardiant': ['antacrid', 'cardiant', 'radicant', 'tridacna'], - 'cardigan': ['carangid', 'cardigan'], - 'cardiidae': ['acrididae', 'cardiidae', 'cidaridae'], - 'cardin': ['andric', 'cardin', 'rancid'], - 'cardinal': ['cardinal', 'clarinda'], - 'cardioid': ['cardioid', 'caridoid'], - 'cardiophobe': ['brachiopode', 'cardiophobe'], - 'cardo': ['cardo', 'draco'], - 'cardon': ['candor', 'cardon', 'conrad'], - 'cardoon': ['cardoon', 'coronad'], - 'care': ['acer', 'acre', 'care', 'crea', 'race'], - 'careen': ['careen', 'carene', 'enrace'], - 'carene': ['careen', 'carene', 'enrace'], - 'carer': ['carer', 'crare', 'racer'], - 'carest': ['carest', 'caster', 'recast'], - 'caret': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'caretta': ['caretta', 'teacart', 'tearcat'], - 'carful': ['carful', 'furcal'], - 'carhop': ['carhop', 'paroch'], - 'cariama': ['aramaic', 'cariama'], - 'carian': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'carib': ['baric', 'carib', 'rabic'], - 'cariban': ['arbacin', 'carabin', 'cariban'], - 'caribi': ['cabiri', 'caribi'], - 'carid': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'], - 'carida': ['acarid', 'cardia', 'carida'], - 'caridea': ['arcidae', 'caridea'], - 'caridean': ['caridean', 'dircaean', 'radiance'], - 'caridoid': ['cardioid', 'caridoid'], - 'carina': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'carinal': ['carinal', 'carlina', 'clarain', 'cranial'], - 'carinatae': ['acraniate', 'carinatae'], - 'carinate': ['anaretic', 'arcanite', 'carinate', 'craniate'], - 'carinated': ['carinated', 'eradicant'], - 'cariole': ['calorie', 'cariole'], - 'carious': ['carious', 'curiosa'], - 'carisa': ['carisa', 'sciara'], - 'carissa': ['ascaris', 'carissa'], - 'cark': ['cark', 'rack'], - 'carking': ['arcking', 'carking', 'racking'], - 'carkingly': ['carkingly', 'rackingly'], - 'carless': ['carless', 'classer', 'reclass'], - 'carlet': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'], - 'carlie': ['carlie', 'claire', 'eclair', 'erical'], - 'carlin': ['carlin', 'clarin', 'crinal'], - 'carlina': ['carinal', 'carlina', 'clarain', 'cranial'], - 'carlist': ['carlist', 'clarist'], - 'carlo': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'], - 'carlot': ['carlot', 'crotal'], - 'carlylian': ['ancillary', 'carlylian', 'cranially'], - 'carman': ['carman', 'marcan'], - 'carmel': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'], - 'carmela': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'], - 'carmele': ['carmele', 'cleamer'], - 'carmelite': ['carmelite', 'melicerta'], - 'carmeloite': ['carmeloite', 'ectromelia', 'meteorical'], - 'carmine': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'], - 'carminette': ['carminette', 'remittance'], - 'carminite': ['antimeric', 'carminite', 'criminate', 'metrician'], - 'carmot': ['carmot', 'comart'], - 'carnage': ['carnage', 'cranage', 'garance'], - 'carnalite': ['carnalite', 'claretian', 'lacertian', 'nectarial'], - 'carnate': ['carnate', 'cateran'], - 'carnation': ['anarcotin', 'cantorian', 'carnation', 'narcotina'], - 'carnationed': ['carnationed', 'dinoceratan'], - 'carnelian': ['carnelian', 'encranial'], - 'carneol': ['carneol', 'corneal'], - 'carneous': ['carneous', 'nacreous'], - 'carney': ['carney', 'craney'], - 'carnic': ['cancri', 'carnic', 'cranic'], - 'carniolan': ['carniolan', 'nonracial'], - 'carnose': ['carnose', 'coarsen', 'narcose'], - 'carnosity': ['carnosity', 'crayonist'], - 'carnotite': ['carnotite', 'cortinate'], - 'carnous': ['carnous', 'nacrous', 'narcous'], - 'caro': ['acor', 'caro', 'cora', 'orca'], - 'caroa': ['acroa', 'caroa'], - 'carob': ['carbo', 'carob', 'coarb', 'cobra'], - 'caroche': ['caroche', 'coacher', 'recoach'], - 'caroid': ['caroid', 'cordia'], - 'carol': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'], - 'carolan': ['alcoran', 'ancoral', 'carolan'], - 'carole': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'], - 'carolean': ['carolean', 'lecanora'], - 'caroler': ['caroler', 'correal'], - 'caroli': ['caroli', 'corial', 'lorica'], - 'carolin': ['carolin', 'clarion', 'colarin', 'locrian'], - 'carolina': ['carolina', 'conarial'], - 'caroline': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'carolingian': ['carolingian', 'inorganical'], - 'carolus': ['carolus', 'oscular'], - 'carom': ['carom', 'coram', 'macro', 'marco'], - 'carone': ['carone', 'cornea'], - 'caroon': ['caroon', 'corona', 'racoon'], - 'carotenoid': ['carotenoid', 'coronadite', 'decoration'], - 'carotic': ['acrotic', 'carotic'], - 'carotid': ['arctoid', 'carotid', 'dartoic'], - 'carotidean': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'], - 'carotin': ['anticor', 'carotin', 'cortina', 'ontaric'], - 'carouse': ['acerous', 'carouse', 'euscaro'], - 'carp': ['carp', 'crap'], - 'carpaine': ['carapine', 'carpaine'], - 'carpel': ['carpel', 'parcel', 'placer'], - 'carpellary': ['carpellary', 'parcellary'], - 'carpellate': ['carpellate', 'parcellate', 'prelacteal'], - 'carpent': ['carpent', 'precant'], - 'carpet': ['carpet', 'peract', 'preact'], - 'carpholite': ['carpholite', 'proethical'], - 'carpid': ['caprid', 'carpid', 'picard'], - 'carpiodes': ['carpiodes', 'scorpidae'], - 'carpocerite': ['carpocerite', 'reciprocate'], - 'carpogonial': ['carpogonial', 'coprolagnia'], - 'carpolite': ['carpolite', 'petricola'], - 'carpolith': ['carpolith', 'politarch', 'trophical'], - 'carposperm': ['carposperm', 'spermocarp'], - 'carrot': ['carrot', 'trocar'], - 'carroter': ['arrector', 'carroter'], - 'carse': ['carse', 'caser', 'ceras', 'scare', 'scrae'], - 'carsmith': ['carsmith', 'chartism'], - 'cartable': ['bracteal', 'cartable'], - 'carte': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'cartel': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'], - 'cartelize': ['cartelize', 'zelatrice'], - 'carter': ['arrect', 'carter', 'crater', 'recart', 'tracer'], - 'cartesian': ['ascertain', 'cartesian', 'cartisane', 'sectarian'], - 'cartesianism': ['cartesianism', 'sectarianism'], - 'cartier': ['cartier', 'cirrate', 'erratic'], - 'cartilage': ['cartilage', 'rectalgia'], - 'cartisane': ['ascertain', 'cartesian', 'cartisane', 'sectarian'], - 'cartist': ['astrict', 'cartist', 'stratic'], - 'carton': ['cantor', 'carton', 'contra'], - 'cartoon': ['cartoon', 'coranto'], - 'cartoonist': ['cartoonist', 'scortation'], - 'carty': ['carty', 'tracy'], - 'carua': ['aruac', 'carua'], - 'carucal': ['accrual', 'carucal'], - 'carucate': ['accurate', 'carucate'], - 'carum': ['carum', 'cumar'], - 'carve': ['carve', 'crave', 'varec'], - 'carvel': ['calver', 'carvel', 'claver'], - 'carven': ['carven', 'cavern', 'craven'], - 'carver': ['carver', 'craver'], - 'carving': ['carving', 'craving'], - 'cary': ['cary', 'racy'], - 'caryl': ['acryl', 'caryl', 'clary'], - 'casabe': ['casabe', 'sabeca'], - 'casal': ['calas', 'casal', 'scala'], - 'cascade': ['cascade', 'saccade'], - 'case': ['case', 'esca'], - 'casebook': ['bookcase', 'casebook'], - 'caseful': ['caseful', 'fucales'], - 'casein': ['casein', 'incase'], - 'casel': ['alces', 'casel', 'scale'], - 'caser': ['carse', 'caser', 'ceras', 'scare', 'scrae'], - 'casern': ['casern', 'rescan'], - 'cashable': ['cashable', 'chasable'], - 'cashel': ['cashel', 'laches', 'sealch'], - 'cask': ['cask', 'sack'], - 'casket': ['casket', 'tesack'], - 'casking': ['casking', 'sacking'], - 'casklike': ['casklike', 'sacklike'], - 'casper': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'], - 'caspian': ['capsian', 'caspian', 'nascapi', 'panisca'], - 'casque': ['casque', 'sacque'], - 'casquet': ['acquest', 'casquet'], - 'casse': ['casse', 'scase'], - 'cassian': ['cassian', 'cassina'], - 'cassina': ['cassian', 'cassina'], - 'cassino': ['caisson', 'cassino'], - 'cassock': ['cassock', 'cossack'], - 'cast': ['acts', 'cast', 'scat'], - 'castalia': ['castalia', 'sacalait'], - 'castalian': ['castalian', 'satanical'], - 'caste': ['caste', 'sceat'], - 'castelet': ['castelet', 'telecast'], - 'caster': ['carest', 'caster', 'recast'], - 'castice': ['ascetic', 'castice', 'siccate'], - 'castle': ['castle', 'sclate'], - 'castoff': ['castoff', 'offcast'], - 'castor': ['arctos', 'castor', 'costar', 'scrota'], - 'castores': ['castores', 'coassert'], - 'castoreum': ['castoreum', 'outscream'], - 'castoridae': ['castoridae', 'cestodaria'], - 'castorin': ['cantoris', 'castorin', 'corsaint'], - 'castra': ['castra', 'tarasc'], - 'casual': ['ascula', 'calusa', 'casual', 'casula', 'causal'], - 'casuality': ['casuality', 'causality'], - 'casually': ['casually', 'causally'], - 'casula': ['ascula', 'calusa', 'casual', 'casula', 'causal'], - 'cat': ['act', 'cat'], - 'catabolin': ['botanical', 'catabolin'], - 'catalan': ['cantala', 'catalan', 'lantaca'], - 'catalanist': ['anastaltic', 'catalanist'], - 'catalase': ['catalase', 'salaceta'], - 'catalinite': ['analcitite', 'catalinite'], - 'catalogue': ['catalogue', 'coagulate'], - 'catalyte': ['catalyte', 'cattleya'], - 'catamenial': ['calamitean', 'catamenial'], - 'catapultier': ['catapultier', 'particulate'], - 'cataria': ['acratia', 'cataria'], - 'catcher': ['catcher', 'recatch'], - 'catchup': ['catchup', 'upcatch'], - 'cate': ['cate', 'teca'], - 'catechin': ['atechnic', 'catechin', 'technica'], - 'catechism': ['catechism', 'schematic'], - 'catechol': ['catechol', 'coachlet'], - 'categoric': ['categoric', 'geocratic'], - 'catella': ['catella', 'lacteal'], - 'catenated': ['catenated', 'decantate'], - 'cater': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'cateran': ['carnate', 'cateran'], - 'caterer': ['caterer', 'recrate', 'retrace', 'terrace'], - 'cateress': ['cateress', 'cerastes'], - 'catfish': ['catfish', 'factish'], - 'cathari': ['cathari', 'chirata', 'cithara'], - 'catharina': ['anthracia', 'antiarcha', 'catharina'], - 'cathartae': ['cathartae', 'tracheata'], - 'cathepsin': ['cathepsin', 'stephanic'], - 'catherine': ['catherine', 'heritance'], - 'catheter': ['catheter', 'charette'], - 'cathine': ['cahnite', 'cathine'], - 'cathinine': ['anchietin', 'cathinine'], - 'cathion': ['cathion', 'chatino'], - 'cathograph': ['cathograph', 'tachograph'], - 'cathole': ['cathole', 'cholate'], - 'cathro': ['cathro', 'orchat'], - 'cathryn': ['cathryn', 'chantry'], - 'cathy': ['cathy', 'cyath', 'yacht'], - 'cation': ['action', 'atonic', 'cation'], - 'cationic': ['aconitic', 'cationic', 'itaconic'], - 'catkin': ['catkin', 'natick'], - 'catlin': ['catlin', 'tincal'], - 'catlinite': ['catlinite', 'intactile'], - 'catmalison': ['catmalison', 'monastical'], - 'catoism': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'], - 'catonian': ['catonian', 'taconian'], - 'catonic': ['cantico', 'catonic', 'taconic'], - 'catonism': ['catonism', 'monastic'], - 'catoptric': ['catoptric', 'protactic'], - 'catpipe': ['apeptic', 'catpipe'], - 'catstone': ['catstone', 'constate'], - 'catsup': ['catsup', 'upcast'], - 'cattail': ['attical', 'cattail'], - 'catti': ['attic', 'catti', 'tacit'], - 'cattily': ['cattily', 'tacitly'], - 'cattiness': ['cattiness', 'tacitness'], - 'cattle': ['cattle', 'tectal'], - 'cattleya': ['catalyte', 'cattleya'], - 'catvine': ['catvine', 'venatic'], - 'caucho': ['cachou', 'caucho'], - 'cauda': ['cadua', 'cauda'], - 'caudle': ['caudle', 'cedula', 'claude'], - 'caudodorsal': ['caudodorsal', 'dorsocaudal'], - 'caudofemoral': ['caudofemoral', 'femorocaudal'], - 'caudolateral': ['caudolateral', 'laterocaudal'], - 'caul': ['caul', 'ucal'], - 'cauld': ['cauld', 'ducal'], - 'caules': ['caelus', 'caules', 'clause'], - 'cauliform': ['cauliform', 'formulaic', 'fumarolic'], - 'caulinar': ['anicular', 'caulinar'], - 'caulis': ['caulis', 'clusia', 'sicula'], - 'caulite': ['aleutic', 'auletic', 'caulite', 'lutecia'], - 'caulome': ['caulome', 'leucoma'], - 'caulomic': ['caulomic', 'coumalic'], - 'caulote': ['caulote', 'colutea', 'oculate'], - 'caunch': ['caunch', 'cuchan'], - 'caurale': ['arcuale', 'caurale'], - 'causal': ['ascula', 'calusa', 'casual', 'casula', 'causal'], - 'causality': ['casuality', 'causality'], - 'causally': ['casually', 'causally'], - 'cause': ['cause', 'sauce'], - 'causeless': ['causeless', 'sauceless'], - 'causer': ['causer', 'saucer'], - 'causey': ['causey', 'cayuse'], - 'cautelous': ['cautelous', 'lutaceous'], - 'cauter': ['acture', 'cauter', 'curate'], - 'caution': ['auction', 'caution'], - 'cautionary': ['auctionary', 'cautionary'], - 'cautioner': ['cautioner', 'cointreau'], - 'caval': ['caval', 'clava'], - 'cavalry': ['calvary', 'cavalry'], - 'cavate': ['cavate', 'caveat', 'vacate'], - 'caveat': ['cavate', 'caveat', 'vacate'], - 'cavel': ['calve', 'cavel', 'clave'], - 'cavern': ['carven', 'cavern', 'craven'], - 'cavil': ['cavil', 'lavic'], - 'caviler': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'], - 'cavillation': ['cavillation', 'vacillation'], - 'cavitate': ['activate', 'cavitate'], - 'cavitation': ['activation', 'cavitation'], - 'cavitied': ['cavitied', 'vaticide'], - 'caw': ['caw', 'wac'], - 'cawk': ['cawk', 'wack'], - 'cawky': ['cawky', 'wacky'], - 'cayapa': ['cayapa', 'pacaya'], - 'cayuse': ['causey', 'cayuse'], - 'ccoya': ['accoy', 'ccoya'], - 'ceanothus': ['ceanothus', 'oecanthus'], - 'cearin': ['acerin', 'cearin'], - 'cebalrai': ['balearic', 'cebalrai'], - 'ceboid': ['bodice', 'ceboid'], - 'cebur': ['bruce', 'cebur', 'cuber'], - 'cecily': ['cecily', 'cicely'], - 'cedar': ['acred', 'cader', 'cadre', 'cedar'], - 'cedarn': ['cedarn', 'dancer', 'nacred'], - 'cedent': ['cedent', 'decent'], - 'ceder': ['ceder', 'cedre', 'cered', 'creed'], - 'cedrat': ['cedrat', 'decart', 'redact'], - 'cedrate': ['cedrate', 'cerated'], - 'cedre': ['ceder', 'cedre', 'cered', 'creed'], - 'cedrela': ['cedrela', 'creedal', 'declare'], - 'cedrin': ['cedrin', 'cinder', 'crined'], - 'cedriret': ['cedriret', 'directer', 'recredit', 'redirect'], - 'cedrol': ['cedrol', 'colder', 'cordel'], - 'cedron': ['cedron', 'conred'], - 'cedrus': ['cedrus', 'cursed'], - 'cedry': ['cedry', 'decry'], - 'cedula': ['caudle', 'cedula', 'claude'], - 'ceilinged': ['ceilinged', 'diligence'], - 'celadonite': ['caledonite', 'celadonite'], - 'celandine': ['celandine', 'decennial'], - 'celarent': ['celarent', 'centrale', 'enclaret'], - 'celature': ['celature', 'ulcerate'], - 'celebrate': ['celebrate', 'erectable'], - 'celebrated': ['braceleted', 'celebrated'], - 'celemin': ['celemin', 'melenic'], - 'celia': ['alice', 'celia', 'ileac'], - 'cellar': ['caller', 'cellar', 'recall'], - 'cellaret': ['allecret', 'cellaret'], - 'celloid': ['celloid', 'codille', 'collide', 'collied'], - 'celloidin': ['celloidin', 'collidine', 'decillion'], - 'celsian': ['celsian', 'escalin', 'sanicle', 'secalin'], - 'celtiberi': ['celtiberi', 'terebilic'], - 'celtis': ['celtis', 'clites'], - 'cembalist': ['blastemic', 'cembalist'], - 'cementer': ['cementer', 'cerement', 'recement'], - 'cendre': ['cendre', 'decern'], - 'cenosity': ['cenosity', 'cytosine'], - 'cense': ['cense', 'scene', 'sence'], - 'censer': ['censer', 'scerne', 'screen', 'secern'], - 'censerless': ['censerless', 'screenless'], - 'censorial': ['censorial', 'sarcoline'], - 'censual': ['censual', 'unscale'], - 'censureless': ['censureless', 'recluseness'], - 'cental': ['cantle', 'cental', 'lancet', 'tancel'], - 'centare': ['centare', 'crenate'], - 'centaur': ['centaur', 'untrace'], - 'centauri': ['anuretic', 'centauri', 'centuria', 'teucrian'], - 'centaury': ['centaury', 'cyanuret'], - 'centena': ['canteen', 'centena'], - 'centenar': ['centenar', 'entrance'], - 'centenier': ['centenier', 'renitence'], - 'center': ['center', 'recent', 'tenrec'], - 'centered': ['centered', 'decenter', 'decentre', 'recedent'], - 'centerer': ['centerer', 'recenter', 'recentre', 'terrence'], - 'centermost': ['centermost', 'escortment'], - 'centesimal': ['centesimal', 'lemniscate'], - 'centiar': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'], - 'centiare': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'], - 'centibar': ['bacterin', 'centibar'], - 'centimeter': ['centimeter', 'recitement', 'remittence'], - 'centimo': ['centimo', 'entomic', 'tecomin'], - 'centimolar': ['centimolar', 'melicraton'], - 'centinormal': ['centinormal', 'conterminal', 'nonmetrical'], - 'cento': ['cento', 'conte', 'tecon'], - 'centrad': ['cantred', 'centrad', 'tranced'], - 'centrale': ['celarent', 'centrale', 'enclaret'], - 'centranth': ['centranth', 'trenchant'], - 'centraxonia': ['centraxonia', 'excarnation'], - 'centriole': ['centriole', 'electrion', 'relection'], - 'centrodorsal': ['centrodorsal', 'dorsocentral'], - 'centroid': ['centroid', 'doctrine'], - 'centrolineal': ['centrolineal', 'crenellation'], - 'centunculus': ['centunculus', 'unsucculent'], - 'centuria': ['anuretic', 'centauri', 'centuria', 'teucrian'], - 'centurial': ['centurial', 'lucretian', 'ultranice'], - 'centuried': ['centuried', 'unrecited'], - 'centurion': ['centurion', 'continuer', 'cornutine'], - 'cepa': ['cape', 'cepa', 'pace'], - 'cephalin': ['alphenic', 'cephalin'], - 'cephalina': ['cephalina', 'epilachna'], - 'cephaloid': ['cephaloid', 'pholcidae'], - 'cephalomeningitis': ['cephalomeningitis', 'meningocephalitis'], - 'cephalometric': ['cephalometric', 'petrochemical'], - 'cephalopodous': ['cephalopodous', 'podocephalous'], - 'cephas': ['cephas', 'pesach'], - 'cepolidae': ['adipocele', 'cepolidae', 'ploceidae'], - 'ceps': ['ceps', 'spec'], - 'ceptor': ['ceptor', 'copter'], - 'ceral': ['ceral', 'clare', 'clear', 'lacer'], - 'ceramal': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'], - 'ceramic': ['ceramic', 'racemic'], - 'ceramist': ['camerist', 'ceramist', 'matrices'], - 'ceras': ['carse', 'caser', 'ceras', 'scare', 'scrae'], - 'cerasein': ['cerasein', 'increase'], - 'cerasin': ['arsenic', 'cerasin', 'sarcine'], - 'cerastes': ['cateress', 'cerastes'], - 'cerata': ['arcate', 'cerata'], - 'cerate': ['cerate', 'create', 'ecarte'], - 'cerated': ['cedrate', 'cerated'], - 'ceratiid': ['ceratiid', 'raticide'], - 'ceration': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'], - 'ceratium': ['ceratium', 'muricate'], - 'ceratonia': ['canariote', 'ceratonia'], - 'ceratosa': ['ceratosa', 'ostracea'], - 'ceratothecal': ['ceratothecal', 'chloracetate'], - 'cerberic': ['cerberic', 'cerebric'], - 'cercal': ['carcel', 'cercal'], - 'cerci': ['cerci', 'ceric', 'cicer', 'circe'], - 'cercus': ['cercus', 'cruces'], - 'cerdonian': ['cerdonian', 'ordinance'], - 'cere': ['cere', 'cree'], - 'cereal': ['alerce', 'cereal', 'relace'], - 'cerealin': ['cerealin', 'cinereal', 'reliance'], - 'cerebra': ['cerebra', 'rebrace'], - 'cerebric': ['cerberic', 'cerebric'], - 'cerebroma': ['cerebroma', 'embraceor'], - 'cerebromeningitis': ['cerebromeningitis', 'meningocerebritis'], - 'cerebrum': ['cerebrum', 'cumberer'], - 'cered': ['ceder', 'cedre', 'cered', 'creed'], - 'cerement': ['cementer', 'cerement', 'recement'], - 'ceremonial': ['ceremonial', 'neomiracle'], - 'ceresin': ['ceresin', 'sincere'], - 'cereus': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'], - 'cerevis': ['cerevis', 'scrieve', 'service'], - 'ceria': ['acier', 'aeric', 'ceria', 'erica'], - 'ceric': ['cerci', 'ceric', 'cicer', 'circe'], - 'ceride': ['ceride', 'deicer'], - 'cerillo': ['cerillo', 'colleri', 'collier'], - 'ceriman': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'], - 'cerin': ['cerin', 'crine'], - 'cerion': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'], - 'ceriops': ['ceriops', 'persico'], - 'cerite': ['cerite', 'certie', 'recite', 'tierce'], - 'cerium': ['cerium', 'uremic'], - 'cernuous': ['cernuous', 'coenurus'], - 'cero': ['cero', 'core'], - 'ceroma': ['ceroma', 'corema'], - 'ceroplast': ['ceroplast', 'precostal'], - 'ceroplastic': ['ceroplastic', 'cleistocarp', 'coreplastic'], - 'ceroplasty': ['ceroplasty', 'coreplasty'], - 'cerotic': ['cerotic', 'orectic'], - 'cerotin': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'], - 'cerous': ['cerous', 'course', 'crouse', 'source'], - 'certain': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'], - 'certhia': ['certhia', 'rhaetic', 'theriac'], - 'certie': ['cerite', 'certie', 'recite', 'tierce'], - 'certifiable': ['certifiable', 'rectifiable'], - 'certification': ['certification', 'cretification', 'rectification'], - 'certificative': ['certificative', 'rectificative'], - 'certificator': ['certificator', 'rectificator'], - 'certificatory': ['certificatory', 'rectificatory'], - 'certified': ['certified', 'rectified'], - 'certifier': ['certifier', 'rectifier'], - 'certify': ['certify', 'cretify', 'rectify'], - 'certis': ['certis', 'steric'], - 'certitude': ['certitude', 'rectitude'], - 'certosina': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'], - 'certosino': ['certosino', 'cortisone', 'socotrine'], - 'cerulean': ['cerulean', 'laurence'], - 'ceruminal': ['ceruminal', 'melanuric', 'numerical'], - 'ceruse': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'], - 'cervicobuccal': ['buccocervical', 'cervicobuccal'], - 'cervicodorsal': ['cervicodorsal', 'dorsocervical'], - 'cervicodynia': ['cervicodynia', 'corycavidine'], - 'cervicofacial': ['cervicofacial', 'faciocervical'], - 'cervicolabial': ['cervicolabial', 'labiocervical'], - 'cervicovesical': ['cervicovesical', 'vesicocervical'], - 'cervoid': ['cervoid', 'divorce'], - 'cervuline': ['cervuline', 'virulence'], - 'ceryl': ['ceryl', 'clyer'], - 'cerynean': ['ancyrene', 'cerynean'], - 'cesare': ['cesare', 'crease', 'recase', 'searce'], - 'cesarolite': ['cesarolite', 'esoterical'], - 'cesium': ['cesium', 'miscue'], - 'cesser': ['cesser', 'recess'], - 'cession': ['cession', 'oscines'], - 'cessor': ['cessor', 'crosse', 'scorse'], - 'cest': ['cest', 'sect'], - 'cestodaria': ['castoridae', 'cestodaria'], - 'cestrian': ['canister', 'cestrian', 'cisterna', 'irascent'], - 'cetane': ['cetane', 'tenace'], - 'cetene': ['cetene', 'ectene'], - 'ceti': ['ceti', 'cite', 'tice'], - 'cetid': ['cetid', 'edict'], - 'cetomorphic': ['cetomorphic', 'chemotropic', 'ectomorphic'], - 'cetonia': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'], - 'cetonian': ['cetonian', 'enaction'], - 'cetorhinus': ['cetorhinus', 'urosthenic'], - 'cetus': ['cetus', 'scute'], - 'cevenol': ['cevenol', 'clovene'], - 'cevine': ['cevine', 'evince', 'venice'], - 'cha': ['ach', 'cha'], - 'chab': ['bach', 'chab'], - 'chabouk': ['chabouk', 'chakobu'], - 'chaco': ['chaco', 'choca', 'coach'], - 'chacte': ['cachet', 'chacte'], - 'chaenolobus': ['chaenolobus', 'unchoosable'], - 'chaeta': ['achate', 'chaeta'], - 'chaetites': ['aesthetic', 'chaetites'], - 'chaetognath': ['chaetognath', 'gnathotheca'], - 'chaetopod': ['chaetopod', 'podotheca'], - 'chafer': ['chafer', 'frache'], - 'chagan': ['chagan', 'changa'], - 'chagrin': ['arching', 'chagrin'], - 'chai': ['chai', 'chia'], - 'chain': ['chain', 'chian', 'china'], - 'chained': ['chained', 'echidna'], - 'chainer': ['chainer', 'enchair', 'rechain'], - 'chainlet': ['chainlet', 'ethnical'], - 'chainman': ['chainman', 'chinaman'], - 'chair': ['chair', 'chria'], - 'chairer': ['chairer', 'charier'], - 'chait': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'], - 'chakar': ['chakar', 'chakra', 'charka'], - 'chakari': ['chakari', 'chikara', 'kachari'], - 'chakobu': ['chabouk', 'chakobu'], - 'chakra': ['chakar', 'chakra', 'charka'], - 'chalcon': ['chalcon', 'clochan', 'conchal'], - 'chalcosine': ['ascolichen', 'chalcosine'], - 'chaldron': ['chaldron', 'chlordan', 'chondral'], - 'chalet': ['achtel', 'chalet', 'thecal', 'thecla'], - 'chalker': ['chalker', 'hackler'], - 'chalky': ['chalky', 'hackly'], - 'challie': ['alichel', 'challie', 'helical'], - 'chalmer': ['chalmer', 'charmel'], - 'chalon': ['chalon', 'lochan'], - 'chalone': ['chalone', 'cholane'], - 'chalta': ['caltha', 'chalta'], - 'chamal': ['almach', 'chamal'], - 'chamar': ['chamar', 'machar'], - 'chamber': ['becharm', 'brecham', 'chamber'], - 'chamberer': ['chamberer', 'rechamber'], - 'chamian': ['chamian', 'mahican'], - 'chamisal': ['chamisal', 'chiasmal'], - 'chamiso': ['chamiso', 'chamois'], - 'chamite': ['chamite', 'hematic'], - 'chamois': ['chamiso', 'chamois'], - 'champa': ['champa', 'mapach'], - 'champain': ['champain', 'chinampa'], - 'chancer': ['chancer', 'chancre'], - 'chanchito': ['chanchito', 'nachitoch'], - 'chanco': ['chanco', 'concha'], - 'chancre': ['chancer', 'chancre'], - 'chandu': ['chandu', 'daunch'], - 'chane': ['achen', 'chane', 'chena', 'hance'], - 'chang': ['chang', 'ganch'], - 'changa': ['chagan', 'changa'], - 'changer': ['changer', 'genarch'], - 'chanidae': ['chanidae', 'hacienda'], - 'channeler': ['channeler', 'encharnel'], - 'chanst': ['chanst', 'snatch', 'stanch'], - 'chant': ['chant', 'natch'], - 'chanter': ['chanter', 'rechant'], - 'chantey': ['atechny', 'chantey'], - 'chantry': ['cathryn', 'chantry'], - 'chaos': ['chaos', 'oshac'], - 'chaotical': ['acatholic', 'chaotical'], - 'chap': ['caph', 'chap'], - 'chaparro': ['chaparro', 'parachor'], - 'chape': ['chape', 'cheap', 'peach'], - 'chaped': ['chaped', 'phecda'], - 'chapel': ['chapel', 'lepcha', 'pleach'], - 'chapelet': ['chapelet', 'peachlet'], - 'chapelmaster': ['chapelmaster', 'spermathecal'], - 'chaperno': ['canephor', 'chaperno', 'chaperon'], - 'chaperon': ['canephor', 'chaperno', 'chaperon'], - 'chaperone': ['canephore', 'chaperone'], - 'chaperonless': ['chaperonless', 'proseneschal'], - 'chapin': ['apinch', 'chapin', 'phanic'], - 'chapiter': ['chapiter', 'phreatic'], - 'chaps': ['chaps', 'pasch'], - 'chapt': ['chapt', 'pacht', 'patch'], - 'chapter': ['chapter', 'patcher', 'repatch'], - 'char': ['arch', 'char', 'rach'], - 'chara': ['achar', 'chara'], - 'charac': ['charac', 'charca'], - 'characin': ['anarchic', 'characin'], - 'characinoid': ['arachidonic', 'characinoid'], - 'charadrii': ['charadrii', 'richardia'], - 'charas': ['achras', 'charas'], - 'charbon': ['brochan', 'charbon'], - 'charca': ['charac', 'charca'], - 'chare': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'], - 'charer': ['archer', 'charer', 'rechar'], - 'charette': ['catheter', 'charette'], - 'charge': ['charge', 'creagh'], - 'charier': ['chairer', 'charier'], - 'chariot': ['chariot', 'haricot'], - 'charioted': ['charioted', 'trochidae'], - 'chariotman': ['achromatin', 'chariotman', 'machinator'], - 'charism': ['charism', 'chrisma'], - 'charisma': ['archaism', 'charisma'], - 'chark': ['chark', 'karch'], - 'charka': ['chakar', 'chakra', 'charka'], - 'charlatanistic': ['antarchistical', 'charlatanistic'], - 'charleen': ['charleen', 'charlene'], - 'charlene': ['charleen', 'charlene'], - 'charles': ['charles', 'clasher'], - 'charm': ['charm', 'march'], - 'charmel': ['chalmer', 'charmel'], - 'charmer': ['charmer', 'marcher', 'remarch'], - 'charnel': ['charnel', 'larchen'], - 'charon': ['anchor', 'archon', 'charon', 'rancho'], - 'charpoy': ['charpoy', 'corypha'], - 'chart': ['chart', 'ratch'], - 'charter': ['charter', 'ratcher'], - 'charterer': ['charterer', 'recharter'], - 'charting': ['charting', 'ratching'], - 'chartism': ['carsmith', 'chartism'], - 'charuk': ['charuk', 'chukar'], - 'chary': ['archy', 'chary'], - 'chasable': ['cashable', 'chasable'], - 'chaser': ['arches', 'chaser', 'eschar', 'recash', 'search'], - 'chasma': ['ascham', 'chasma'], - 'chaste': ['chaste', 'sachet', 'scathe', 'scheat'], - 'chasten': ['chasten', 'sanetch'], - 'chastener': ['chastener', 'rechasten'], - 'chastity': ['chastity', 'yachtist'], - 'chasuble': ['chasuble', 'subchela'], - 'chat': ['chat', 'tach'], - 'chatelainry': ['chatelainry', 'trachylinae'], - 'chati': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'], - 'chatino': ['cathion', 'chatino'], - 'chatsome': ['chatsome', 'moschate'], - 'chatta': ['attach', 'chatta'], - 'chattation': ['chattation', 'thanatotic'], - 'chattel': ['chattel', 'latchet'], - 'chatter': ['chatter', 'ratchet'], - 'chattery': ['chattery', 'ratchety', 'trachyte'], - 'chatti': ['chatti', 'hattic'], - 'chatty': ['chatty', 'tatchy'], - 'chatwood': ['chatwood', 'woodchat'], - 'chaute': ['chaute', 'chueta'], - 'chawan': ['chawan', 'chwana', 'wachna'], - 'chawer': ['chawer', 'rechaw'], - 'chawk': ['chawk', 'whack'], - 'chay': ['achy', 'chay'], - 'cheap': ['chape', 'cheap', 'peach'], - 'cheapen': ['cheapen', 'peachen'], - 'cheapery': ['cheapery', 'peachery'], - 'cheapside': ['cheapside', 'sphecidae'], - 'cheat': ['cheat', 'tache', 'teach', 'theca'], - 'cheatable': ['cheatable', 'teachable'], - 'cheatableness': ['cheatableness', 'teachableness'], - 'cheater': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'], - 'cheatery': ['cheatery', 'cytherea', 'teachery'], - 'cheating': ['cheating', 'teaching'], - 'cheatingly': ['cheatingly', 'teachingly'], - 'cheatrie': ['cheatrie', 'hetaeric'], - 'checker': ['checker', 'recheck'], - 'chee': ['chee', 'eche'], - 'cheek': ['cheek', 'cheke', 'keech'], - 'cheerer': ['cheerer', 'recheer'], - 'cheerly': ['cheerly', 'lechery'], - 'cheery': ['cheery', 'reechy'], - 'cheet': ['cheet', 'hecte'], - 'cheir': ['cheir', 'rheic'], - 'cheiropodist': ['cheiropodist', 'coeditorship'], - 'cheka': ['cheka', 'keach'], - 'cheke': ['cheek', 'cheke', 'keech'], - 'chela': ['chela', 'lache', 'leach'], - 'chelide': ['chelide', 'heliced'], - 'chelidon': ['chelidon', 'chelonid', 'delichon'], - 'chelidonate': ['chelidonate', 'endothecial'], - 'chelodina': ['chelodina', 'hedonical'], - 'chelone': ['chelone', 'echelon'], - 'chelonid': ['chelidon', 'chelonid', 'delichon'], - 'cheloniid': ['cheloniid', 'lichenoid'], - 'chemiatrist': ['chemiatrist', 'chrismatite', 'theatricism'], - 'chemical': ['alchemic', 'chemical'], - 'chemicomechanical': ['chemicomechanical', 'mechanicochemical'], - 'chemicophysical': ['chemicophysical', 'physicochemical'], - 'chemicovital': ['chemicovital', 'vitochemical'], - 'chemiloon': ['chemiloon', 'homocline'], - 'chemotaxy': ['chemotaxy', 'myxotheca'], - 'chemotropic': ['cetomorphic', 'chemotropic', 'ectomorphic'], - 'chena': ['achen', 'chane', 'chena', 'hance'], - 'chenica': ['chenica', 'chicane'], - 'chenille': ['chenille', 'hellenic'], - 'chenopod': ['chenopod', 'ponchoed'], - 'chera': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'], - 'chermes': ['chermes', 'schemer'], - 'chert': ['chert', 'retch'], - 'cherte': ['cherte', 'etcher'], - 'chervil': ['chervil', 'chilver'], - 'cheson': ['cheson', 'chosen', 'schone'], - 'chest': ['chest', 'stech'], - 'chestily': ['chestily', 'lecythis'], - 'chesty': ['chesty', 'scythe'], - 'chet': ['chet', 'etch', 'tche', 'tech'], - 'chettik': ['chettik', 'thicket'], - 'chetty': ['chetty', 'tetchy'], - 'chewer': ['chewer', 'rechew'], - 'chewink': ['chewink', 'whicken'], - 'chi': ['chi', 'hic', 'ich'], - 'chia': ['chai', 'chia'], - 'chiam': ['chiam', 'machi', 'micah'], - 'chian': ['chain', 'chian', 'china'], - 'chiasmal': ['chamisal', 'chiasmal'], - 'chiastolite': ['chiastolite', 'heliostatic'], - 'chicane': ['chenica', 'chicane'], - 'chicle': ['chicle', 'cliche'], - 'chid': ['chid', 'dich'], - 'chider': ['chider', 'herdic'], - 'chidra': ['chidra', 'diarch'], - 'chief': ['chief', 'fiche'], - 'chield': ['chield', 'childe'], - 'chien': ['chien', 'chine', 'niche'], - 'chikara': ['chakari', 'chikara', 'kachari'], - 'chil': ['chil', 'lich'], - 'childe': ['chield', 'childe'], - 'chilean': ['chilean', 'echinal', 'nichael'], - 'chili': ['chili', 'lichi'], - 'chiliasm': ['chiliasm', 'hilasmic', 'machilis'], - 'chilla': ['achill', 'cahill', 'chilla'], - 'chiloma': ['chiloma', 'malicho'], - 'chilopod': ['chilopod', 'pholcoid'], - 'chilopoda': ['chilopoda', 'haplodoci'], - 'chilostome': ['chilostome', 'schooltime'], - 'chilver': ['chervil', 'chilver'], - 'chimane': ['chimane', 'machine'], - 'chime': ['chime', 'hemic', 'miche'], - 'chimer': ['chimer', 'mechir', 'micher'], - 'chimera': ['chimera', 'hermaic'], - 'chimney': ['chimney', 'hymenic'], - 'chimu': ['chimu', 'humic'], - 'chin': ['chin', 'inch'], - 'china': ['chain', 'chian', 'china'], - 'chinaman': ['chainman', 'chinaman'], - 'chinampa': ['champain', 'chinampa'], - 'chinanta': ['acanthin', 'chinanta'], - 'chinar': ['chinar', 'inarch'], - 'chine': ['chien', 'chine', 'niche'], - 'chined': ['chined', 'inched'], - 'chink': ['chink', 'kinch'], - 'chinkle': ['chinkle', 'kelchin'], - 'chinks': ['chinks', 'skinch'], - 'chinoa': ['chinoa', 'noahic'], - 'chinotti': ['chinotti', 'tithonic'], - 'chint': ['chint', 'nitch'], - 'chiolite': ['chiolite', 'eolithic'], - 'chionididae': ['chionididae', 'onchidiidae'], - 'chiral': ['archil', 'chiral'], - 'chirapsia': ['chirapsia', 'pharisaic'], - 'chirata': ['cathari', 'chirata', 'cithara'], - 'chiro': ['chiro', 'choir', 'ichor'], - 'chiromancist': ['chiromancist', 'monarchistic'], - 'chiromant': ['chiromant', 'chromatin'], - 'chiromantic': ['chiromantic', 'chromatinic'], - 'chiromantis': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'], - 'chirometer': ['chirometer', 'rheometric'], - 'chiroplasty': ['chiroplasty', 'polyarchist'], - 'chiropter': ['chiropter', 'peritroch'], - 'chirosophist': ['chirosophist', 'opisthorchis'], - 'chirotes': ['chirotes', 'theorics'], - 'chirotype': ['chirotype', 'hypocrite'], - 'chirp': ['chirp', 'prich'], - 'chirper': ['chirper', 'prerich'], - 'chiseler': ['chiseler', 'rechisel'], - 'chit': ['chit', 'itch', 'tchi'], - 'chita': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'], - 'chital': ['chital', 'claith'], - 'chitinoid': ['chitinoid', 'dithionic'], - 'chitosan': ['atchison', 'chitosan'], - 'chitose': ['chitose', 'echoist'], - 'chloe': ['chloe', 'choel'], - 'chloracetate': ['ceratothecal', 'chloracetate'], - 'chloranthy': ['chloranthy', 'rhynchotal'], - 'chlorate': ['chlorate', 'trochlea'], - 'chlordan': ['chaldron', 'chlordan', 'chondral'], - 'chlore': ['chlore', 'choler', 'orchel'], - 'chloremia': ['chloremia', 'homerical'], - 'chlorinate': ['chlorinate', 'ectorhinal', 'tornachile'], - 'chlorite': ['chlorite', 'clothier'], - 'chloritic': ['chloritic', 'trochilic'], - 'chloroamine': ['chloroamine', 'melanochroi'], - 'chloroanaemia': ['aeolharmonica', 'chloroanaemia'], - 'chloroanemia': ['chloroanemia', 'choleromania'], - 'chloroiodide': ['chloroiodide', 'iodochloride'], - 'chloroplatinic': ['chloroplatinic', 'platinochloric'], - 'cho': ['cho', 'och'], - 'choana': ['aonach', 'choana'], - 'choca': ['chaco', 'choca', 'coach'], - 'choco': ['choco', 'hocco'], - 'choel': ['chloe', 'choel'], - 'choenix': ['choenix', 'hexonic'], - 'choes': ['choes', 'chose'], - 'choiak': ['choiak', 'kochia'], - 'choice': ['choice', 'echoic'], - 'choil': ['choil', 'choli', 'olchi'], - 'choir': ['chiro', 'choir', 'ichor'], - 'choirman': ['choirman', 'harmonic', 'omniarch'], - 'choker': ['choker', 'hocker'], - 'choky': ['choky', 'hocky'], - 'chol': ['chol', 'loch'], - 'chola': ['chola', 'loach', 'olcha'], - 'cholane': ['chalone', 'cholane'], - 'cholangioitis': ['angiocholitis', 'cholangioitis'], - 'cholanic': ['cholanic', 'colchian'], - 'cholate': ['cathole', 'cholate'], - 'cholecystoduodenostomy': ['cholecystoduodenostomy', 'duodenocholecystostomy'], - 'choler': ['chlore', 'choler', 'orchel'], - 'cholera': ['cholera', 'choreal'], - 'cholerine': ['cholerine', 'rhinocele'], - 'choleromania': ['chloroanemia', 'choleromania'], - 'cholesteremia': ['cholesteremia', 'heteroecismal'], - 'choli': ['choil', 'choli', 'olchi'], - 'choline': ['choline', 'helicon'], - 'cholo': ['cholo', 'cohol'], - 'chondral': ['chaldron', 'chlordan', 'chondral'], - 'chondrite': ['chondrite', 'threnodic'], - 'chondroadenoma': ['adenochondroma', 'chondroadenoma'], - 'chondroangioma': ['angiochondroma', 'chondroangioma'], - 'chondroarthritis': ['arthrochondritis', 'chondroarthritis'], - 'chondrocostal': ['chondrocostal', 'costochondral'], - 'chondrofibroma': ['chondrofibroma', 'fibrochondroma'], - 'chondrolipoma': ['chondrolipoma', 'lipochondroma'], - 'chondromyxoma': ['chondromyxoma', 'myxochondroma'], - 'chondromyxosarcoma': ['chondromyxosarcoma', 'myxochondrosarcoma'], - 'choop': ['choop', 'pooch'], - 'chopa': ['chopa', 'phoca', 'poach'], - 'chopin': ['chopin', 'phonic'], - 'chopine': ['chopine', 'phocine'], - 'chora': ['achor', 'chora', 'corah', 'orach', 'roach'], - 'choral': ['choral', 'lorcha'], - 'chorasmian': ['anachorism', 'chorasmian', 'maraschino'], - 'chordal': ['chordal', 'dorlach'], - 'chorditis': ['chorditis', 'orchidist'], - 'chordotonal': ['chordotonal', 'notochordal'], - 'chore': ['chore', 'ocher'], - 'chorea': ['chorea', 'ochrea', 'rochea'], - 'choreal': ['cholera', 'choreal'], - 'choree': ['choree', 'cohere', 'echoer'], - 'choreoid': ['choreoid', 'ochidore'], - 'choreus': ['choreus', 'chouser', 'rhoecus'], - 'choric': ['choric', 'orchic'], - 'choriocele': ['choriocele', 'orchiocele'], - 'chorioidoretinitis': ['chorioidoretinitis', 'retinochorioiditis'], - 'chorism': ['chorism', 'chrisom'], - 'chorist': ['chorist', 'ostrich'], - 'choristate': ['choristate', 'rheostatic'], - 'chorization': ['chorization', 'rhizoctonia', 'zonotrichia'], - 'choroid': ['choroid', 'ochroid'], - 'chort': ['chort', 'rotch', 'torch'], - 'chorten': ['chorten', 'notcher'], - 'chorti': ['chorti', 'orthic', 'thoric', 'trochi'], - 'chose': ['choes', 'chose'], - 'chosen': ['cheson', 'chosen', 'schone'], - 'chou': ['chou', 'ouch'], - 'chough': ['chough', 'hughoc'], - 'choup': ['choup', 'pouch'], - 'chous': ['chous', 'hocus'], - 'chouser': ['choreus', 'chouser', 'rhoecus'], - 'chowder': ['chowder', 'cowherd'], - 'chria': ['chair', 'chria'], - 'chrism': ['chrism', 'smirch'], - 'chrisma': ['charism', 'chrisma'], - 'chrismation': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'], - 'chrismatite': ['chemiatrist', 'chrismatite', 'theatricism'], - 'chrisom': ['chorism', 'chrisom'], - 'christ': ['christ', 'strich'], - 'christen': ['christen', 'snitcher'], - 'christener': ['christener', 'rechristen'], - 'christian': ['christian', 'christina'], - 'christiana': ['arachnitis', 'christiana'], - 'christina': ['christian', 'christina'], - 'christophe': ['christophe', 'hectorship'], - 'chromatician': ['achromatinic', 'chromatician'], - 'chromatid': ['chromatid', 'dichromat'], - 'chromatin': ['chiromant', 'chromatin'], - 'chromatinic': ['chiromantic', 'chromatinic'], - 'chromatocyte': ['chromatocyte', 'thoracectomy'], - 'chromatoid': ['chromatoid', 'tichodroma'], - 'chromatone': ['chromatone', 'enomotarch'], - 'chromid': ['chromid', 'richdom'], - 'chromidae': ['archidome', 'chromidae'], - 'chromite': ['chromite', 'trichome'], - 'chromocyte': ['chromocyte', 'cytochrome'], - 'chromolithography': ['chromolithography', 'lithochromography'], - 'chromophotography': ['chromophotography', 'photochromography'], - 'chromophotolithograph': ['chromophotolithograph', 'photochromolithograph'], - 'chromopsia': ['chromopsia', 'isocamphor'], - 'chromotype': ['chromotype', 'cormophyte', 'ectomorphy'], - 'chromotypic': ['chromotypic', 'cormophytic', 'mycotrophic'], - 'chronophotograph': ['chronophotograph', 'photochronograph'], - 'chronophotographic': ['chronophotographic', 'photochronographic'], - 'chronophotography': ['chronophotography', 'photochronography'], - 'chrysography': ['chrysography', 'psychorrhagy'], - 'chrysolite': ['chrysolite', 'chrysotile'], - 'chrysopid': ['chrysopid', 'dysphoric'], - 'chrysotile': ['chrysolite', 'chrysotile'], - 'chucker': ['chucker', 'rechuck'], - 'chueta': ['chaute', 'chueta'], - 'chukar': ['charuk', 'chukar'], - 'chulan': ['chulan', 'launch', 'nuchal'], - 'chum': ['chum', 'much'], - 'chumpish': ['chumpish', 'chumship'], - 'chumship': ['chumpish', 'chumship'], - 'chunari': ['chunari', 'unchair'], - 'chunnia': ['chunnia', 'unchain'], - 'chuprassie': ['chuprassie', 'haruspices'], - 'churl': ['churl', 'lurch'], - 'churn': ['churn', 'runch'], - 'chut': ['chut', 'tchu', 'utch'], - 'chwana': ['chawan', 'chwana', 'wachna'], - 'chyak': ['chyak', 'hacky'], - 'chylous': ['chylous', 'slouchy'], - 'cibarial': ['biracial', 'cibarial'], - 'cibarian': ['arabinic', 'cabirian', 'carabini', 'cibarian'], - 'cibolan': ['cibolan', 'coalbin'], - 'cicala': ['alcaic', 'cicala'], - 'cicatrize': ['arcticize', 'cicatrize'], - 'cicely': ['cecily', 'cicely'], - 'cicer': ['cerci', 'ceric', 'cicer', 'circe'], - 'cicerone': ['cicerone', 'croceine'], - 'cicindela': ['cicindela', 'cinclidae', 'icelandic'], - 'ciclatoun': ['ciclatoun', 'noctiluca'], - 'ciconian': ['aniconic', 'ciconian'], - 'ciconine': ['ciconine', 'conicine'], - 'cidaridae': ['acrididae', 'cardiidae', 'cidaridae'], - 'cidaris': ['cidaris', 'sciarid'], - 'cider': ['cider', 'cried', 'deric', 'dicer'], - 'cigala': ['caliga', 'cigala'], - 'cigar': ['cigar', 'craig'], - 'cilia': ['cilia', 'iliac'], - 'ciliation': ['ciliation', 'coinitial'], - 'cilice': ['cilice', 'icicle'], - 'cimbia': ['cimbia', 'iambic'], - 'cimicidae': ['amicicide', 'cimicidae'], - 'cinchonine': ['cinchonine', 'conchinine'], - 'cinclidae': ['cicindela', 'cinclidae', 'icelandic'], - 'cinder': ['cedrin', 'cinder', 'crined'], - 'cinderous': ['cinderous', 'decursion'], - 'cindie': ['cindie', 'incide'], - 'cine': ['cine', 'nice'], - 'cinel': ['cinel', 'cline'], - 'cinema': ['anemic', 'cinema', 'iceman'], - 'cinematographer': ['cinematographer', 'megachiropteran'], - 'cinene': ['cinene', 'nicene'], - 'cineole': ['cineole', 'coeline'], - 'cinerama': ['amacrine', 'american', 'camerina', 'cinerama'], - 'cineration': ['cineration', 'inceration'], - 'cinerea': ['cairene', 'cinerea'], - 'cinereal': ['cerealin', 'cinereal', 'reliance'], - 'cingulum': ['cingulum', 'glucinum'], - 'cinnamate': ['antanemic', 'cinnamate'], - 'cinnamol': ['cinnamol', 'nonclaim'], - 'cinnamon': ['cinnamon', 'mannonic'], - 'cinnamoned': ['cinnamoned', 'demicannon'], - 'cinque': ['cinque', 'quince'], - 'cinter': ['cinter', 'cretin', 'crinet'], - 'cinura': ['anuric', 'cinura', 'uranic'], - 'cion': ['cion', 'coin', 'icon'], - 'cipher': ['cipher', 'rechip'], - 'cipo': ['cipo', 'pico'], - 'circe': ['cerci', 'ceric', 'cicer', 'circe'], - 'circle': ['circle', 'cleric'], - 'cirrate': ['cartier', 'cirrate', 'erratic'], - 'cirrated': ['cirrated', 'craterid'], - 'cirrhotic': ['cirrhotic', 'trichroic'], - 'cirrose': ['cirrose', 'crosier'], - 'cirsectomy': ['cirsectomy', 'citromyces'], - 'cirsoid': ['cirsoid', 'soricid'], - 'ciruela': ['auricle', 'ciruela'], - 'cise': ['cise', 'sice'], - 'cisplatine': ['cisplatine', 'plasticine'], - 'cispontine': ['cispontine', 'inspection'], - 'cissoidal': ['cissoidal', 'dissocial'], - 'cistern': ['cistern', 'increst'], - 'cisterna': ['canister', 'cestrian', 'cisterna', 'irascent'], - 'cisternal': ['cisternal', 'larcenist'], - 'cistvaen': ['cistvaen', 'vesicant'], - 'cit': ['cit', 'tic'], - 'citadel': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'], - 'citatory': ['atrocity', 'citatory'], - 'cite': ['ceti', 'cite', 'tice'], - 'citer': ['citer', 'recti', 'ticer', 'trice'], - 'cithara': ['cathari', 'chirata', 'cithara'], - 'citharist': ['citharist', 'trachitis'], - 'citharoedic': ['citharoedic', 'diachoretic'], - 'cither': ['cither', 'thrice'], - 'citied': ['citied', 'dietic'], - 'citizen': ['citizen', 'zincite'], - 'citral': ['citral', 'rictal'], - 'citramide': ['citramide', 'diametric', 'matricide'], - 'citrange': ['argentic', 'citrange'], - 'citrate': ['atretic', 'citrate'], - 'citrated': ['citrated', 'tetracid', 'tetradic'], - 'citrean': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'], - 'citrene': ['citrene', 'enteric', 'enticer', 'tercine'], - 'citreous': ['citreous', 'urticose'], - 'citric': ['citric', 'critic'], - 'citrin': ['citrin', 'nitric'], - 'citrination': ['citrination', 'intrication'], - 'citrine': ['citrine', 'crinite', 'inciter', 'neritic'], - 'citromyces': ['cirsectomy', 'citromyces'], - 'citron': ['citron', 'cortin', 'crotin'], - 'citronade': ['citronade', 'endaortic', 'redaction'], - 'citronella': ['citronella', 'interlocal'], - 'citrus': ['citrus', 'curtis', 'rictus', 'rustic'], - 'cive': ['cive', 'vice'], - 'civet': ['civet', 'evict'], - 'civetone': ['civetone', 'evection'], - 'civitan': ['activin', 'civitan'], - 'cixo': ['cixo', 'coix'], - 'clabber': ['cabbler', 'clabber'], - 'clacker': ['cackler', 'clacker', 'crackle'], - 'cladine': ['cladine', 'decalin', 'iceland'], - 'cladonia': ['cladonia', 'condalia', 'diaconal'], - 'cladophyll': ['cladophyll', 'phylloclad'], - 'claim': ['claim', 'clima', 'malic'], - 'claimant': ['calamint', 'claimant'], - 'claimer': ['claimer', 'miracle', 'reclaim'], - 'clairce': ['clairce', 'clarice'], - 'claire': ['carlie', 'claire', 'eclair', 'erical'], - 'claith': ['chital', 'claith'], - 'claiver': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'], - 'clam': ['calm', 'clam'], - 'clamant': ['calmant', 'clamant'], - 'clamative': ['calmative', 'clamative'], - 'clamatores': ['clamatores', 'scleromata'], - 'clamber': ['cambrel', 'clamber', 'cramble'], - 'clame': ['camel', 'clame', 'cleam', 'macle'], - 'clamer': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'], - 'clamor': ['clamor', 'colmar'], - 'clamorist': ['clamorist', 'crotalism'], - 'clangingly': ['clangingly', 'glancingly'], - 'clap': ['calp', 'clap'], - 'clapper': ['clapper', 'crapple'], - 'claquer': ['claquer', 'lacquer'], - 'clarain': ['carinal', 'carlina', 'clarain', 'cranial'], - 'clare': ['ceral', 'clare', 'clear', 'lacer'], - 'clarence': ['canceler', 'clarence', 'recancel'], - 'claret': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'], - 'claretian': ['carnalite', 'claretian', 'lacertian', 'nectarial'], - 'clarice': ['clairce', 'clarice'], - 'clarin': ['carlin', 'clarin', 'crinal'], - 'clarinda': ['cardinal', 'clarinda'], - 'clarion': ['carolin', 'clarion', 'colarin', 'locrian'], - 'clarionet': ['alectrion', 'clarionet', 'crotaline', 'locarnite'], - 'clarist': ['carlist', 'clarist'], - 'claro': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'], - 'clary': ['acryl', 'caryl', 'clary'], - 'clasher': ['charles', 'clasher'], - 'clasp': ['clasp', 'scalp'], - 'clasper': ['clasper', 'reclasp', 'scalper'], - 'clasping': ['clasping', 'scalping'], - 'classed': ['classed', 'declass'], - 'classer': ['carless', 'classer', 'reclass'], - 'classism': ['classism', 'misclass'], - 'classwork': ['classwork', 'crosswalk'], - 'clat': ['clat', 'talc'], - 'clathrina': ['alchitran', 'clathrina'], - 'clathrose': ['clathrose', 'searcloth'], - 'clatterer': ['clatterer', 'craterlet'], - 'claude': ['caudle', 'cedula', 'claude'], - 'claudian': ['claudian', 'dulciana'], - 'claudicate': ['aciculated', 'claudicate'], - 'clause': ['caelus', 'caules', 'clause'], - 'claustral': ['claustral', 'lacustral'], - 'clava': ['caval', 'clava'], - 'clavacin': ['clavacin', 'vaccinal'], - 'clavaria': ['calvaria', 'clavaria'], - 'clave': ['calve', 'cavel', 'clave'], - 'claver': ['calver', 'carvel', 'claver'], - 'claviculate': ['calculative', 'claviculate'], - 'clavier': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'], - 'clavis': ['clavis', 'slavic'], - 'clay': ['acyl', 'clay', 'lacy'], - 'clayer': ['clayer', 'lacery'], - 'claytonia': ['acylation', 'claytonia'], - 'clead': ['clead', 'decal', 'laced'], - 'cleam': ['camel', 'clame', 'cleam', 'macle'], - 'cleamer': ['carmele', 'cleamer'], - 'clean': ['canel', 'clean', 'lance', 'lenca'], - 'cleaner': ['cleaner', 'reclean'], - 'cleanly': ['cleanly', 'lancely'], - 'cleanout': ['cleanout', 'outlance'], - 'cleanse': ['cleanse', 'scalene'], - 'cleanup': ['cleanup', 'unplace'], - 'clear': ['ceral', 'clare', 'clear', 'lacer'], - 'clearable': ['clearable', 'lacerable'], - 'clearer': ['clearer', 'reclear'], - 'cleat': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'], - 'clefted': ['clefted', 'deflect'], - 'cleistocarp': ['ceroplastic', 'cleistocarp', 'coreplastic'], - 'cleistogeny': ['cleistogeny', 'lysogenetic'], - 'cleoid': ['cleoid', 'coiled', 'docile'], - 'cleopatra': ['acropetal', 'cleopatra'], - 'cleric': ['circle', 'cleric'], - 'clericature': ['clericature', 'recirculate'], - 'clerkess': ['clerkess', 'reckless'], - 'clerking': ['clerking', 'reckling'], - 'clerus': ['clerus', 'cruels'], - 'clethra': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'], - 'cleveite': ['cleveite', 'elective'], - 'cliche': ['chicle', 'cliche'], - 'clicker': ['clicker', 'crickle'], - 'clidastes': ['clidastes', 'discastle'], - 'clientage': ['clientage', 'genetical'], - 'cliented': ['cliented', 'denticle'], - 'cliftonia': ['cliftonia', 'fictional'], - 'clima': ['claim', 'clima', 'malic'], - 'climber': ['climber', 'reclimb'], - 'clime': ['clime', 'melic'], - 'cline': ['cinel', 'cline'], - 'clinger': ['clinger', 'cringle'], - 'clinia': ['anilic', 'clinia'], - 'clinicopathological': ['clinicopathological', 'pathologicoclinical'], - 'clinium': ['clinium', 'ulminic'], - 'clinker': ['clinker', 'crinkle'], - 'clinoclase': ['clinoclase', 'oscillance'], - 'clinoclasite': ['callisection', 'clinoclasite'], - 'clinodome': ['clinodome', 'melodicon', 'monocleid'], - 'clinology': ['clinology', 'coolingly'], - 'clinometer': ['clinometer', 'recoilment'], - 'clinospore': ['clinospore', 'necropolis'], - 'clio': ['clio', 'coil', 'coli', 'loci'], - 'cliona': ['alnico', 'cliona', 'oilcan'], - 'clione': ['clione', 'coelin', 'encoil', 'enolic'], - 'clipeus': ['clipeus', 'spicule'], - 'clipper': ['clipper', 'cripple'], - 'clipse': ['clipse', 'splice'], - 'clipsome': ['clipsome', 'polemics'], - 'clite': ['clite', 'telic'], - 'clites': ['celtis', 'clites'], - 'clitia': ['clitia', 'italic'], - 'clition': ['clition', 'nilotic'], - 'clitoria': ['clitoria', 'loricati'], - 'clitoridean': ['clitoridean', 'directional'], - 'clitoris': ['clitoris', 'coistril'], - 'clive': ['clive', 'velic'], - 'cloacinal': ['cloacinal', 'cocillana'], - 'cloam': ['cloam', 'comal'], - 'cloamen': ['aclemon', 'cloamen'], - 'clobber': ['clobber', 'cobbler'], - 'clochan': ['chalcon', 'clochan', 'conchal'], - 'clocked': ['clocked', 'cockled'], - 'clocker': ['clocker', 'cockler'], - 'clod': ['clod', 'cold'], - 'clodder': ['clodder', 'coddler'], - 'cloggy': ['cloggy', 'coggly'], - 'cloister': ['cloister', 'coistrel'], - 'cloisteral': ['cloisteral', 'sclerotial'], - 'cloit': ['cloit', 'lotic'], - 'clonicotonic': ['clonicotonic', 'tonicoclonic'], - 'clonus': ['clonus', 'consul'], - 'clop': ['clop', 'colp'], - 'close': ['close', 'socle'], - 'closer': ['closer', 'cresol', 'escrol'], - 'closter': ['closter', 'costrel'], - 'closterium': ['closterium', 'sclerotium'], - 'clot': ['clot', 'colt'], - 'clothier': ['chlorite', 'clothier'], - 'clotho': ['clotho', 'coolth'], - 'clotter': ['clotter', 'crottle'], - 'cloture': ['cloture', 'clouter'], - 'cloud': ['cloud', 'could'], - 'clouter': ['cloture', 'clouter'], - 'clovene': ['cevenol', 'clovene'], - 'clow': ['clow', 'cowl'], - 'cloy': ['cloy', 'coly'], - 'clue': ['clue', 'luce'], - 'clumse': ['clumse', 'muscle'], - 'clumsily': ['clumsily', 'scyllium'], - 'clumsy': ['clumsy', 'muscly'], - 'clunist': ['clunist', 'linctus'], - 'clupea': ['alecup', 'clupea'], - 'clupeine': ['clupeine', 'pulicene'], - 'clusia': ['caulis', 'clusia', 'sicula'], - 'clutch': ['clutch', 'cultch'], - 'clutter': ['clutter', 'cuttler'], - 'clyde': ['clyde', 'decyl'], - 'clyer': ['ceryl', 'clyer'], - 'clymenia': ['clymenia', 'mycelian'], - 'clypeolate': ['clypeolate', 'ptyalocele'], - 'clysis': ['clysis', 'lyssic'], - 'clysmic': ['clysmic', 'cyclism'], - 'cnemial': ['cnemial', 'melanic'], - 'cnemis': ['cnemis', 'mnesic'], - 'cneorum': ['cneorum', 'corneum'], - 'cnicus': ['cnicus', 'succin'], - 'cnida': ['canid', 'cnida', 'danic'], - 'cnidaria': ['acridian', 'cnidaria'], - 'cnidian': ['cnidian', 'indican'], - 'cnidophore': ['cnidophore', 'princehood'], - 'coach': ['chaco', 'choca', 'coach'], - 'coacher': ['caroche', 'coacher', 'recoach'], - 'coachlet': ['catechol', 'coachlet'], - 'coactor': ['coactor', 'tarocco'], - 'coadamite': ['acetamido', 'coadamite'], - 'coadnate': ['anecdota', 'coadnate'], - 'coadunite': ['coadunite', 'education', 'noctuidae'], - 'coagent': ['coagent', 'cognate'], - 'coagulate': ['catalogue', 'coagulate'], - 'coaita': ['atocia', 'coaita'], - 'coal': ['alco', 'coal', 'cola', 'loca'], - 'coalbin': ['cibolan', 'coalbin'], - 'coaler': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'], - 'coalite': ['aloetic', 'coalite'], - 'coalition': ['coalition', 'lociation'], - 'coalitionist': ['coalitionist', 'solicitation'], - 'coalizer': ['calorize', 'coalizer'], - 'coalpit': ['capitol', 'coalpit', 'optical', 'topical'], - 'coaltitude': ['coaltitude', 'colatitude'], - 'coaming': ['coaming', 'macigno'], - 'coan': ['coan', 'onca'], - 'coapt': ['capot', 'coapt'], - 'coarb': ['carbo', 'carob', 'coarb', 'cobra'], - 'coarrange': ['arrogance', 'coarrange'], - 'coarse': ['acrose', 'coarse'], - 'coarsen': ['carnose', 'coarsen', 'narcose'], - 'coassert': ['castores', 'coassert'], - 'coast': ['ascot', 'coast', 'costa', 'tacso', 'tasco'], - 'coastal': ['coastal', 'salacot'], - 'coaster': ['coaster', 'recoast'], - 'coasting': ['agnostic', 'coasting'], - 'coated': ['coated', 'decoat'], - 'coater': ['coater', 'recoat'], - 'coating': ['coating', 'cotinga'], - 'coatroom': ['coatroom', 'morocota'], - 'coax': ['coax', 'coxa'], - 'cobbler': ['clobber', 'cobbler'], - 'cobia': ['baioc', 'cabio', 'cobia'], - 'cobiron': ['boronic', 'cobiron'], - 'cobitis': ['biotics', 'cobitis'], - 'cobra': ['carbo', 'carob', 'coarb', 'cobra'], - 'cocaine': ['cocaine', 'oceanic'], - 'cocainist': ['cocainist', 'siccation'], - 'cocama': ['cocama', 'macaco'], - 'cocamine': ['cocamine', 'comacine'], - 'cochleare': ['archocele', 'cochleare'], - 'cochleitis': ['cochleitis', 'ochlesitic'], - 'cocillana': ['cloacinal', 'cocillana'], - 'cocker': ['cocker', 'recock'], - 'cockily': ['cockily', 'colicky'], - 'cockled': ['clocked', 'cockled'], - 'cockler': ['clocker', 'cockler'], - 'cockup': ['cockup', 'upcock'], - 'cocreditor': ['cocreditor', 'codirector'], - 'cocurrent': ['cocurrent', 'occurrent', 'uncorrect'], - 'cod': ['cod', 'doc'], - 'codamine': ['codamine', 'comedian', 'daemonic', 'demoniac'], - 'codder': ['codder', 'corded'], - 'coddler': ['clodder', 'coddler'], - 'code': ['code', 'coed'], - 'codebtor': ['bedoctor', 'codebtor'], - 'coder': ['coder', 'cored', 'credo'], - 'coderive': ['coderive', 'divorcee'], - 'codicil': ['codicil', 'dicolic'], - 'codille': ['celloid', 'codille', 'collide', 'collied'], - 'codirector': ['cocreditor', 'codirector'], - 'codium': ['codium', 'mucoid'], - 'coed': ['code', 'coed'], - 'coeditorship': ['cheiropodist', 'coeditorship'], - 'coelar': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'], - 'coelata': ['alcoate', 'coelata'], - 'coelection': ['coelection', 'entocoelic'], - 'coelia': ['aeolic', 'coelia'], - 'coelin': ['clione', 'coelin', 'encoil', 'enolic'], - 'coeline': ['cineole', 'coeline'], - 'coelogyne': ['coelogyne', 'gonyocele'], - 'coenactor': ['coenactor', 'croconate'], - 'coenobiar': ['borocaine', 'coenobiar'], - 'coenurus': ['cernuous', 'coenurus'], - 'coestate': ['coestate', 'ecostate'], - 'coeternal': ['antrocele', 'coeternal', 'tolerance'], - 'coeval': ['alcove', 'coeval', 'volcae'], - 'cofaster': ['cofaster', 'forecast'], - 'coferment': ['coferment', 'forcement'], - 'cogeneric': ['cogeneric', 'concierge'], - 'coggly': ['cloggy', 'coggly'], - 'cognate': ['coagent', 'cognate'], - 'cognatical': ['cognatical', 'galactonic'], - 'cognation': ['cognation', 'contagion'], - 'cognition': ['cognition', 'incognito'], - 'cognominal': ['cognominal', 'gnomonical'], - 'cogon': ['cogon', 'congo'], - 'cograil': ['argolic', 'cograil'], - 'coheir': ['coheir', 'heroic'], - 'cohen': ['cohen', 'enoch'], - 'cohere': ['choree', 'cohere', 'echoer'], - 'cohol': ['cholo', 'cohol'], - 'cohune': ['cohune', 'hounce'], - 'coif': ['coif', 'fico', 'foci'], - 'coign': ['coign', 'incog'], - 'coil': ['clio', 'coil', 'coli', 'loci'], - 'coiled': ['cleoid', 'coiled', 'docile'], - 'coiler': ['coiler', 'recoil'], - 'coin': ['cion', 'coin', 'icon'], - 'coinclude': ['coinclude', 'undecolic'], - 'coiner': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'], - 'coinfer': ['coinfer', 'conifer'], - 'coinherence': ['coinherence', 'incoherence'], - 'coinherent': ['coinherent', 'incoherent'], - 'coinitial': ['ciliation', 'coinitial'], - 'coinmate': ['coinmate', 'maconite'], - 'coinspire': ['coinspire', 'precision'], - 'coinsure': ['coinsure', 'corineus', 'cusinero'], - 'cointer': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'], - 'cointreau': ['cautioner', 'cointreau'], - 'coistrel': ['cloister', 'coistrel'], - 'coistril': ['clitoris', 'coistril'], - 'coix': ['cixo', 'coix'], - 'coker': ['coker', 'corke', 'korec'], - 'coky': ['coky', 'yock'], - 'cola': ['alco', 'coal', 'cola', 'loca'], - 'colalgia': ['alogical', 'colalgia'], - 'colan': ['colan', 'conal'], - 'colane': ['canelo', 'colane'], - 'colarin': ['carolin', 'clarion', 'colarin', 'locrian'], - 'colate': ['acetol', 'colate', 'locate'], - 'colation': ['colation', 'coontail', 'location'], - 'colatitude': ['coaltitude', 'colatitude'], - 'colchian': ['cholanic', 'colchian'], - 'colcine': ['colcine', 'concile', 'conicle'], - 'colcothar': ['colcothar', 'ochlocrat'], - 'cold': ['clod', 'cold'], - 'colder': ['cedrol', 'colder', 'cordel'], - 'colectomy': ['colectomy', 'cyclotome'], - 'colemanite': ['colemanite', 'melaconite'], - 'coleur': ['coleur', 'colure'], - 'coleus': ['coleus', 'oscule'], - 'coli': ['clio', 'coil', 'coli', 'loci'], - 'colias': ['colias', 'scolia', 'social'], - 'colicky': ['cockily', 'colicky'], - 'colima': ['colima', 'olamic'], - 'colin': ['colin', 'nicol'], - 'colinear': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'colitis': ['colitis', 'solicit'], - 'colk': ['colk', 'lock'], - 'colla': ['callo', 'colla', 'local'], - 'collage': ['alcogel', 'collage'], - 'collare': ['collare', 'corella', 'ocellar'], - 'collaret': ['collaret', 'corallet'], - 'collarino': ['collarino', 'coronilla'], - 'collatee': ['collatee', 'ocellate'], - 'collationer': ['collationer', 'recollation'], - 'collectioner': ['collectioner', 'recollection'], - 'collegial': ['collegial', 'gallicole'], - 'collegian': ['allogenic', 'collegian'], - 'colleri': ['cerillo', 'colleri', 'collier'], - 'colleter': ['colleter', 'coteller', 'coterell', 'recollet'], - 'colletia': ['colletia', 'teocalli'], - 'collide': ['celloid', 'codille', 'collide', 'collied'], - 'collidine': ['celloidin', 'collidine', 'decillion'], - 'collie': ['collie', 'ocelli'], - 'collied': ['celloid', 'codille', 'collide', 'collied'], - 'collier': ['cerillo', 'colleri', 'collier'], - 'colligate': ['colligate', 'cotillage'], - 'colline': ['colline', 'lioncel'], - 'collinear': ['collinear', 'coralline'], - 'collinsia': ['collinsia', 'isoclinal'], - 'collotypy': ['collotypy', 'polycotyl'], - 'collusive': ['collusive', 'colluvies'], - 'colluvies': ['collusive', 'colluvies'], - 'collyba': ['callboy', 'collyba'], - 'colmar': ['clamor', 'colmar'], - 'colobus': ['colobus', 'subcool'], - 'coloenteritis': ['coloenteritis', 'enterocolitis'], - 'colombian': ['colombian', 'colombina'], - 'colombina': ['colombian', 'colombina'], - 'colonalgia': ['colonalgia', 'naological'], - 'colonate': ['colonate', 'ecotonal'], - 'colonialist': ['colonialist', 'oscillation'], - 'coloproctitis': ['coloproctitis', 'proctocolitis'], - 'color': ['color', 'corol', 'crool'], - 'colored': ['colored', 'croodle', 'decolor'], - 'colorer': ['colorer', 'recolor'], - 'colorin': ['colorin', 'orcinol'], - 'colorman': ['colorman', 'conormal'], - 'colp': ['clop', 'colp'], - 'colpeurynter': ['colpeurynter', 'counterreply'], - 'colpitis': ['colpitis', 'politics', 'psilotic'], - 'colporrhagia': ['colporrhagia', 'orographical'], - 'colt': ['clot', 'colt'], - 'colter': ['colter', 'lector', 'torcel'], - 'coltskin': ['coltskin', 'linstock'], - 'colubrina': ['binocular', 'caliburno', 'colubrina'], - 'columbo': ['columbo', 'coulomb'], - 'columbotitanate': ['columbotitanate', 'titanocolumbate'], - 'columnated': ['columnated', 'documental'], - 'columned': ['columned', 'uncledom'], - 'colunar': ['colunar', 'cornual', 'courlan'], - 'colure': ['coleur', 'colure'], - 'colutea': ['caulote', 'colutea', 'oculate'], - 'coly': ['cloy', 'coly'], - 'coma': ['coma', 'maco'], - 'comacine': ['cocamine', 'comacine'], - 'comal': ['cloam', 'comal'], - 'coman': ['coman', 'macon', 'manoc'], - 'comart': ['carmot', 'comart'], - 'comate': ['comate', 'metoac', 'tecoma'], - 'combat': ['combat', 'tombac'], - 'comber': ['comber', 'recomb'], - 'combinedly': ['combinedly', 'molybdenic'], - 'comedial': ['cameloid', 'comedial', 'melodica'], - 'comedian': ['codamine', 'comedian', 'daemonic', 'demoniac'], - 'comediant': ['comediant', 'metaconid'], - 'comedist': ['comedist', 'demotics', 'docetism', 'domestic'], - 'comedown': ['comedown', 'downcome'], - 'comeliness': ['comeliness', 'incomeless'], - 'comeling': ['comeling', 'comingle'], - 'comenic': ['comenic', 'encomic', 'meconic'], - 'comer': ['comer', 'crome'], - 'comforter': ['comforter', 'recomfort'], - 'comid': ['comid', 'domic'], - 'coming': ['coming', 'gnomic'], - 'comingle': ['comeling', 'comingle'], - 'comintern': ['comintern', 'nonmetric'], - 'comitia': ['caimito', 'comitia'], - 'comitragedy': ['comitragedy', 'tragicomedy'], - 'comity': ['comity', 'myotic'], - 'commander': ['commander', 'recommand'], - 'commation': ['commation', 'monatomic'], - 'commelina': ['commelina', 'melomanic'], - 'commender': ['commender', 'recommend'], - 'commentarial': ['commentarial', 'manometrical'], - 'commination': ['commination', 'monamniotic'], - 'commissioner': ['commissioner', 'recommission'], - 'commonality': ['ammonolytic', 'commonality'], - 'commorient': ['commorient', 'metronomic', 'monometric'], - 'compact': ['accompt', 'compact'], - 'compacter': ['compacter', 'recompact'], - 'company': ['company', 'copyman'], - 'compare': ['compare', 'compear'], - 'comparition': ['comparition', 'proamniotic'], - 'compasser': ['compasser', 'recompass'], - 'compear': ['compare', 'compear'], - 'compenetrate': ['compenetrate', 'contemperate'], - 'competitioner': ['competitioner', 'recompetition'], - 'compile': ['compile', 'polemic'], - 'compiler': ['compiler', 'complier'], - 'complainer': ['complainer', 'procnemial', 'recomplain'], - 'complaint': ['complaint', 'compliant'], - 'complanate': ['complanate', 'placentoma'], - 'compliant': ['complaint', 'compliant'], - 'complier': ['compiler', 'complier'], - 'compounder': ['compounder', 'recompound'], - 'comprehender': ['comprehender', 'recomprehend'], - 'compressed': ['compressed', 'decompress'], - 'comprise': ['comprise', 'perosmic'], - 'compromission': ['compromission', 'procommission'], - 'conal': ['colan', 'conal'], - 'conamed': ['conamed', 'macedon'], - 'conant': ['cannot', 'canton', 'conant', 'nonact'], - 'conarial': ['carolina', 'conarial'], - 'conarium': ['conarium', 'coumarin'], - 'conative': ['conative', 'invocate'], - 'concealer': ['concealer', 'reconceal'], - 'concent': ['concent', 'connect'], - 'concenter': ['concenter', 'reconnect'], - 'concentive': ['concentive', 'connective'], - 'concertize': ['concertize', 'concretize'], - 'concessioner': ['concessioner', 'reconcession'], - 'concha': ['chanco', 'concha'], - 'conchal': ['chalcon', 'clochan', 'conchal'], - 'conchinine': ['cinchonine', 'conchinine'], - 'concierge': ['cogeneric', 'concierge'], - 'concile': ['colcine', 'concile', 'conicle'], - 'concocter': ['concocter', 'reconcoct'], - 'concreter': ['concreter', 'reconcert'], - 'concretize': ['concertize', 'concretize'], - 'concretor': ['concretor', 'conrector'], - 'condalia': ['cladonia', 'condalia', 'diaconal'], - 'condemner': ['condemner', 'recondemn'], - 'condite': ['condite', 'ctenoid'], - 'conditioner': ['conditioner', 'recondition'], - 'condor': ['condor', 'cordon'], - 'conduit': ['conduit', 'duction', 'noctuid'], - 'condylomatous': ['condylomatous', 'monodactylous'], - 'cone': ['cone', 'once'], - 'conepate': ['conepate', 'tepecano'], - 'coner': ['coner', 'crone', 'recon'], - 'cones': ['cones', 'scone'], - 'confesser': ['confesser', 'reconfess'], - 'configurationism': ['configurationism', 'misconfiguration'], - 'confirmer': ['confirmer', 'reconfirm'], - 'confirmor': ['confirmor', 'corniform'], - 'conflate': ['conflate', 'falconet'], - 'conformer': ['conformer', 'reconform'], - 'confounder': ['confounder', 'reconfound'], - 'confrere': ['confrere', 'enforcer', 'reconfer'], - 'confronter': ['confronter', 'reconfront'], - 'congealer': ['congealer', 'recongeal'], - 'congeneric': ['congeneric', 'necrogenic'], - 'congenerous': ['congenerous', 'necrogenous'], - 'congenial': ['congenial', 'goclenian'], - 'congo': ['cogon', 'congo'], - 'congreet': ['congreet', 'coregent'], - 'congreve': ['congreve', 'converge'], - 'conical': ['conical', 'laconic'], - 'conicine': ['ciconine', 'conicine'], - 'conicle': ['colcine', 'concile', 'conicle'], - 'conicoid': ['conicoid', 'conoidic'], - 'conidium': ['conidium', 'mucinoid', 'oncidium'], - 'conifer': ['coinfer', 'conifer'], - 'conima': ['camion', 'conima', 'manioc', 'monica'], - 'conin': ['conin', 'nonic', 'oncin'], - 'conine': ['conine', 'connie', 'ennoic'], - 'conjoiner': ['conjoiner', 'reconjoin'], - 'conk': ['conk', 'nock'], - 'conker': ['conker', 'reckon'], - 'conkers': ['conkers', 'snocker'], - 'connarite': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'], - 'connatal': ['cantonal', 'connatal'], - 'connation': ['connation', 'nonaction'], - 'connature': ['antecornu', 'connature'], - 'connect': ['concent', 'connect'], - 'connectival': ['connectival', 'conventical'], - 'connective': ['concentive', 'connective'], - 'connie': ['conine', 'connie', 'ennoic'], - 'connoissance': ['connoissance', 'nonaccession'], - 'conoidal': ['conoidal', 'dolciano'], - 'conoidic': ['conicoid', 'conoidic'], - 'conor': ['conor', 'croon', 'ronco'], - 'conormal': ['colorman', 'conormal'], - 'conoy': ['conoy', 'coony'], - 'conrad': ['candor', 'cardon', 'conrad'], - 'conrector': ['concretor', 'conrector'], - 'conred': ['cedron', 'conred'], - 'conringia': ['conringia', 'inorganic'], - 'consenter': ['consenter', 'nonsecret', 'reconsent'], - 'conservable': ['conservable', 'conversable'], - 'conservancy': ['conservancy', 'conversancy'], - 'conservant': ['conservant', 'conversant'], - 'conservation': ['conservation', 'conversation'], - 'conservational': ['conservational', 'conversational'], - 'conservationist': ['conservationist', 'conversationist'], - 'conservative': ['conservative', 'conversative'], - 'conserve': ['conserve', 'converse'], - 'conserver': ['conserver', 'converser'], - 'considerate': ['considerate', 'desecration'], - 'considerative': ['considerative', 'devisceration'], - 'considered': ['considered', 'deconsider'], - 'considerer': ['considerer', 'reconsider'], - 'consigner': ['consigner', 'reconsign'], - 'conspiracy': ['conspiracy', 'snipocracy'], - 'conspire': ['conspire', 'incorpse'], - 'constate': ['catstone', 'constate'], - 'constitutionalism': ['constitutionalism', 'misconstitutional'], - 'constitutioner': ['constitutioner', 'reconstitution'], - 'constrain': ['constrain', 'transonic'], - 'constructer': ['constructer', 'reconstruct'], - 'constructionism': ['constructionism', 'misconstruction'], - 'consul': ['clonus', 'consul'], - 'consulage': ['consulage', 'glucosane'], - 'consulary': ['consulary', 'cynosural'], - 'consulter': ['consulter', 'reconsult'], - 'consume': ['consume', 'muscone'], - 'consumer': ['consumer', 'mucrones'], - 'consute': ['consute', 'contuse'], - 'contagion': ['cognation', 'contagion'], - 'contain': ['actinon', 'cantion', 'contain'], - 'container': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'], - 'conte': ['cento', 'conte', 'tecon'], - 'contemperate': ['compenetrate', 'contemperate'], - 'contender': ['contender', 'recontend'], - 'conter': ['conter', 'cornet', 'cronet', 'roncet'], - 'conterminal': ['centinormal', 'conterminal', 'nonmetrical'], - 'contester': ['contester', 'recontest'], - 'continual': ['continual', 'inoculant', 'unctional'], - 'continued': ['continued', 'unnoticed'], - 'continuer': ['centurion', 'continuer', 'cornutine'], - 'contise': ['contise', 'noetics', 'section'], - 'contline': ['contline', 'nonlicet'], - 'contortae': ['contortae', 'crotonate'], - 'contour': ['contour', 'cornuto', 'countor', 'crouton'], - 'contra': ['cantor', 'carton', 'contra'], - 'contracter': ['contracter', 'correctant', 'recontract'], - 'contrapose': ['antroscope', 'contrapose'], - 'contravene': ['contravene', 'covenanter'], - 'contrite': ['contrite', 'tetronic'], - 'contrive': ['contrive', 'invector'], - 'conturbation': ['conturbation', 'obtruncation'], - 'contuse': ['consute', 'contuse'], - 'conure': ['conure', 'rounce', 'uncore'], - 'conventical': ['connectival', 'conventical'], - 'conventioner': ['conventioner', 'reconvention'], - 'converge': ['congreve', 'converge'], - 'conversable': ['conservable', 'conversable'], - 'conversancy': ['conservancy', 'conversancy'], - 'conversant': ['conservant', 'conversant'], - 'conversation': ['conservation', 'conversation'], - 'conversational': ['conservational', 'conversational'], - 'conversationist': ['conservationist', 'conversationist'], - 'conversative': ['conservative', 'conversative'], - 'converse': ['conserve', 'converse'], - 'converser': ['conserver', 'converser'], - 'converter': ['converter', 'reconvert'], - 'convertise': ['convertise', 'ventricose'], - 'conveyer': ['conveyer', 'reconvey'], - 'conycatcher': ['conycatcher', 'technocracy'], - 'conyrine': ['conyrine', 'corynine'], - 'cooker': ['cooker', 'recook'], - 'cool': ['cool', 'loco'], - 'coolant': ['coolant', 'octonal'], - 'cooler': ['cooler', 'recool'], - 'coolingly': ['clinology', 'coolingly'], - 'coolth': ['clotho', 'coolth'], - 'coolweed': ['coolweed', 'locoweed'], - 'cooly': ['cooly', 'coyol'], - 'coonroot': ['coonroot', 'octoroon'], - 'coontail': ['colation', 'coontail', 'location'], - 'coony': ['conoy', 'coony'], - 'coop': ['coop', 'poco'], - 'coos': ['coos', 'soco'], - 'coost': ['coost', 'scoot'], - 'coot': ['coot', 'coto', 'toco'], - 'copa': ['copa', 'paco'], - 'copable': ['copable', 'placebo'], - 'copalite': ['copalite', 'poetical'], - 'coparent': ['coparent', 'portance'], - 'copart': ['captor', 'copart'], - 'copartner': ['copartner', 'procreant'], - 'copatain': ['copatain', 'pacation'], - 'copehan': ['copehan', 'panoche', 'phocean'], - 'copen': ['copen', 'ponce'], - 'coperta': ['coperta', 'pectora', 'porcate'], - 'copied': ['copied', 'epodic'], - 'copis': ['copis', 'pisco'], - 'copist': ['copist', 'coptis', 'optics', 'postic'], - 'copita': ['atopic', 'capito', 'copita'], - 'coplanar': ['coplanar', 'procanal'], - 'copleased': ['copleased', 'escaloped'], - 'copperer': ['copperer', 'recopper'], - 'coppery': ['coppery', 'precopy'], - 'copr': ['copr', 'corp', 'crop'], - 'coprinae': ['caponier', 'coprinae', 'procaine'], - 'coprinus': ['coprinus', 'poncirus'], - 'coprolagnia': ['carpogonial', 'coprolagnia'], - 'coprophagist': ['coprophagist', 'topographics'], - 'coprose': ['coprose', 'scooper'], - 'copse': ['copse', 'pecos', 'scope'], - 'copter': ['ceptor', 'copter'], - 'coptis': ['copist', 'coptis', 'optics', 'postic'], - 'copula': ['copula', 'cupola'], - 'copular': ['copular', 'croupal', 'cupolar', 'porcula'], - 'copulate': ['copulate', 'outplace'], - 'copulation': ['copulation', 'poculation'], - 'copus': ['copus', 'scoup'], - 'copyman': ['company', 'copyman'], - 'copyrighter': ['copyrighter', 'recopyright'], - 'coque': ['coque', 'ocque'], - 'coquitlam': ['coquitlam', 'quamoclit'], - 'cor': ['cor', 'cro', 'orc', 'roc'], - 'cora': ['acor', 'caro', 'cora', 'orca'], - 'coraciae': ['coraciae', 'icacorea'], - 'coracial': ['caracoli', 'coracial'], - 'coracias': ['coracias', 'rascacio'], - 'coradicate': ['coradicate', 'ectocardia'], - 'corah': ['achor', 'chora', 'corah', 'orach', 'roach'], - 'coraise': ['coraise', 'scoriae'], - 'coral': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'], - 'coraled': ['acerdol', 'coraled'], - 'coralist': ['calorist', 'coralist'], - 'corallet': ['collaret', 'corallet'], - 'corallian': ['corallian', 'corallina'], - 'corallina': ['corallian', 'corallina'], - 'coralline': ['collinear', 'coralline'], - 'corallite': ['corallite', 'lectorial'], - 'coram': ['carom', 'coram', 'macro', 'marco'], - 'coranto': ['cartoon', 'coranto'], - 'corban': ['bracon', 'carbon', 'corban'], - 'corbeil': ['bricole', 'corbeil', 'orbicle'], - 'cordaitean': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'], - 'cordate': ['cordate', 'decator', 'redcoat'], - 'corded': ['codder', 'corded'], - 'cordel': ['cedrol', 'colder', 'cordel'], - 'corder': ['corder', 'record'], - 'cordia': ['caroid', 'cordia'], - 'cordial': ['cordial', 'dorical'], - 'cordicole': ['cordicole', 'crocodile'], - 'cordierite': ['cordierite', 'directoire'], - 'cordoba': ['bocardo', 'cordoba'], - 'cordon': ['condor', 'cordon'], - 'core': ['cero', 'core'], - 'cored': ['coder', 'cored', 'credo'], - 'coregent': ['congreet', 'coregent'], - 'coreless': ['coreless', 'sclerose'], - 'corella': ['collare', 'corella', 'ocellar'], - 'corema': ['ceroma', 'corema'], - 'coreplastic': ['ceroplastic', 'cleistocarp', 'coreplastic'], - 'coreplasty': ['ceroplasty', 'coreplasty'], - 'corer': ['corer', 'crore'], - 'coresidual': ['coresidual', 'radiculose'], - 'coresign': ['coresign', 'cosigner'], - 'corge': ['corge', 'gorce'], - 'corgi': ['corgi', 'goric', 'orgic'], - 'corial': ['caroli', 'corial', 'lorica'], - 'coriamyrtin': ['coriamyrtin', 'criminatory'], - 'corin': ['corin', 'noric', 'orcin'], - 'corindon': ['corindon', 'nodicorn'], - 'corineus': ['coinsure', 'corineus', 'cusinero'], - 'corinna': ['corinna', 'cronian'], - 'corinne': ['corinne', 'cornein', 'neronic'], - 'cork': ['cork', 'rock'], - 'corke': ['coker', 'corke', 'korec'], - 'corked': ['corked', 'docker', 'redock'], - 'corker': ['corker', 'recork', 'rocker'], - 'corkiness': ['corkiness', 'rockiness'], - 'corking': ['corking', 'rocking'], - 'corkish': ['corkish', 'rockish'], - 'corkwood': ['corkwood', 'rockwood', 'woodrock'], - 'corky': ['corky', 'rocky'], - 'corm': ['corm', 'crom'], - 'cormophyte': ['chromotype', 'cormophyte', 'ectomorphy'], - 'cormophytic': ['chromotypic', 'cormophytic', 'mycotrophic'], - 'cornage': ['acrogen', 'cornage'], - 'cornea': ['carone', 'cornea'], - 'corneal': ['carneol', 'corneal'], - 'cornein': ['corinne', 'cornein', 'neronic'], - 'cornelia': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'cornelius': ['cornelius', 'inclosure', 'reclusion'], - 'corneocalcareous': ['calcareocorneous', 'corneocalcareous'], - 'cornet': ['conter', 'cornet', 'cronet', 'roncet'], - 'corneum': ['cneorum', 'corneum'], - 'cornic': ['cornic', 'crocin'], - 'cornice': ['cornice', 'crocein'], - 'corniform': ['confirmor', 'corniform'], - 'cornin': ['cornin', 'rincon'], - 'cornish': ['cornish', 'cronish', 'sorchin'], - 'cornual': ['colunar', 'cornual', 'courlan'], - 'cornuate': ['cornuate', 'courante', 'cuneator', 'outrance'], - 'cornuated': ['cornuated', 'undercoat'], - 'cornucopiate': ['cornucopiate', 'reoccupation'], - 'cornulites': ['cornulites', 'uncloister'], - 'cornute': ['cornute', 'counter', 'recount', 'trounce'], - 'cornutine': ['centurion', 'continuer', 'cornutine'], - 'cornuto': ['contour', 'cornuto', 'countor', 'crouton'], - 'corny': ['corny', 'crony'], - 'corol': ['color', 'corol', 'crool'], - 'corollated': ['corollated', 'decollator'], - 'corona': ['caroon', 'corona', 'racoon'], - 'coronad': ['cardoon', 'coronad'], - 'coronadite': ['carotenoid', 'coronadite', 'decoration'], - 'coronal': ['coronal', 'locarno'], - 'coronaled': ['canoodler', 'coronaled'], - 'coronate': ['coronate', 'octonare', 'otocrane'], - 'coronated': ['coronated', 'creodonta'], - 'coroner': ['coroner', 'crooner', 'recroon'], - 'coronilla': ['collarino', 'coronilla'], - 'corp': ['copr', 'corp', 'crop'], - 'corporealist': ['corporealist', 'prosectorial'], - 'corradiate': ['corradiate', 'cortaderia', 'eradicator'], - 'correal': ['caroler', 'correal'], - 'correctant': ['contracter', 'correctant', 'recontract'], - 'correctioner': ['correctioner', 'recorrection'], - 'corrente': ['corrente', 'terceron'], - 'correption': ['correption', 'porrection'], - 'corrodentia': ['corrodentia', 'recordation'], - 'corrupter': ['corrupter', 'recorrupt'], - 'corsage': ['corsage', 'socager'], - 'corsaint': ['cantoris', 'castorin', 'corsaint'], - 'corse': ['corse', 'score'], - 'corselet': ['corselet', 'sclerote', 'selector'], - 'corset': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'], - 'corta': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'], - 'cortaderia': ['corradiate', 'cortaderia', 'eradicator'], - 'cortes': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'], - 'cortical': ['cortical', 'crotalic'], - 'cortices': ['cortices', 'cresotic'], - 'corticose': ['corticose', 'creosotic'], - 'cortin': ['citron', 'cortin', 'crotin'], - 'cortina': ['anticor', 'carotin', 'cortina', 'ontaric'], - 'cortinate': ['carnotite', 'cortinate'], - 'cortisone': ['certosino', 'cortisone', 'socotrine'], - 'corton': ['corton', 'croton'], - 'corvinae': ['corvinae', 'veronica'], - 'cory': ['cory', 'croy'], - 'corycavidine': ['cervicodynia', 'corycavidine'], - 'corydon': ['corydon', 'croydon'], - 'corynine': ['conyrine', 'corynine'], - 'corypha': ['charpoy', 'corypha'], - 'coryphene': ['coryphene', 'hypercone'], - 'cos': ['cos', 'osc', 'soc'], - 'cosalite': ['cosalite', 'societal'], - 'coset': ['coset', 'estoc', 'scote'], - 'cosh': ['cosh', 'scho'], - 'cosharer': ['cosharer', 'horsecar'], - 'cosigner': ['coresign', 'cosigner'], - 'cosine': ['cosine', 'oscine'], - 'cosmati': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'], - 'cosmetical': ['cacomistle', 'cosmetical'], - 'cosmetician': ['cosmetician', 'encomiastic'], - 'cosmist': ['cosmist', 'scotism'], - 'cossack': ['cassock', 'cossack'], - 'cosse': ['cosse', 'secos'], - 'cost': ['cost', 'scot'], - 'costa': ['ascot', 'coast', 'costa', 'tacso', 'tasco'], - 'costar': ['arctos', 'castor', 'costar', 'scrota'], - 'costean': ['costean', 'tsoneca'], - 'coster': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'], - 'costing': ['costing', 'gnostic'], - 'costispinal': ['costispinal', 'pansciolist'], - 'costmary': ['arctomys', 'costmary', 'mascotry'], - 'costochondral': ['chondrocostal', 'costochondral'], - 'costosternal': ['costosternal', 'sternocostal'], - 'costovertebral': ['costovertebral', 'vertebrocostal'], - 'costrel': ['closter', 'costrel'], - 'costula': ['costula', 'locusta', 'talcous'], - 'costumer': ['costumer', 'customer'], - 'cosurety': ['cosurety', 'courtesy'], - 'cosustain': ['cosustain', 'scusation'], - 'cotarius': ['cotarius', 'octarius', 'suctoria'], - 'cotarnine': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'], - 'cote': ['cote', 'teco'], - 'coteline': ['coteline', 'election'], - 'coteller': ['colleter', 'coteller', 'coterell', 'recollet'], - 'coterell': ['colleter', 'coteller', 'coterell', 'recollet'], - 'cotesian': ['canoeist', 'cotesian'], - 'coth': ['coth', 'ocht'], - 'cotidal': ['cotidal', 'lactoid', 'talcoid'], - 'cotillage': ['colligate', 'cotillage'], - 'cotillion': ['cotillion', 'octillion'], - 'cotinga': ['coating', 'cotinga'], - 'cotinus': ['cotinus', 'suction', 'unstoic'], - 'cotise': ['cotise', 'oecist'], - 'coto': ['coot', 'coto', 'toco'], - 'cotranspire': ['cotranspire', 'pornerastic'], - 'cotrine': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'], - 'cotripper': ['cotripper', 'periproct'], - 'cotte': ['cotte', 'octet'], - 'cotylosaur': ['cotylosaur', 'osculatory'], - 'cotype': ['cotype', 'ectopy'], - 'coude': ['coude', 'douce'], - 'could': ['cloud', 'could'], - 'coulisse': ['coulisse', 'leucosis', 'ossicule'], - 'coulomb': ['columbo', 'coulomb'], - 'coumalic': ['caulomic', 'coumalic'], - 'coumarin': ['conarium', 'coumarin'], - 'counsel': ['counsel', 'unclose'], - 'counter': ['cornute', 'counter', 'recount', 'trounce'], - 'counteracter': ['counteracter', 'countercarte'], - 'countercarte': ['counteracter', 'countercarte'], - 'countercharm': ['countercharm', 'countermarch'], - 'counterguard': ['counterguard', 'uncorrugated'], - 'counteridea': ['counteridea', 'decurionate'], - 'countermarch': ['countercharm', 'countermarch'], - 'counterpaled': ['counterpaled', 'counterplead', 'unpercolated'], - 'counterpaly': ['counterpaly', 'counterplay'], - 'counterplay': ['counterpaly', 'counterplay'], - 'counterplead': ['counterpaled', 'counterplead', 'unpercolated'], - 'counterreply': ['colpeurynter', 'counterreply'], - 'countersale': ['countersale', 'counterseal'], - 'countersea': ['countersea', 'nectareous'], - 'counterseal': ['countersale', 'counterseal'], - 'countershade': ['countershade', 'decantherous'], - 'counterstand': ['counterstand', 'uncontrasted'], - 'countertail': ['countertail', 'reluctation'], - 'countertrades': ['countertrades', 'unstercorated'], - 'countervail': ['countervail', 'involucrate'], - 'countervair': ['countervair', 'overcurtain', 'recurvation'], - 'countor': ['contour', 'cornuto', 'countor', 'crouton'], - 'coupe': ['coupe', 'pouce'], - 'couper': ['couper', 'croupe', 'poucer', 'recoup'], - 'couplement': ['couplement', 'uncomplete'], - 'couplet': ['couplet', 'octuple'], - 'coupon': ['coupon', 'uncoop'], - 'couponed': ['couponed', 'uncooped'], - 'courante': ['cornuate', 'courante', 'cuneator', 'outrance'], - 'courbaril': ['courbaril', 'orbicular'], - 'courlan': ['colunar', 'cornual', 'courlan'], - 'cours': ['cours', 'scour'], - 'course': ['cerous', 'course', 'crouse', 'source'], - 'coursed': ['coursed', 'scoured'], - 'courser': ['courser', 'scourer'], - 'coursing': ['coursing', 'scouring'], - 'court': ['court', 'crout', 'turco'], - 'courtesan': ['acentrous', 'courtesan', 'nectarous'], - 'courtesy': ['cosurety', 'courtesy'], - 'courtier': ['courtier', 'outcrier'], - 'courtiership': ['courtiership', 'peritrichous'], - 'courtin': ['courtin', 'ruction'], - 'courtman': ['courtman', 'turcoman'], - 'couter': ['couter', 'croute'], - 'couth': ['couth', 'thuoc', 'touch'], - 'couthily': ['couthily', 'touchily'], - 'couthiness': ['couthiness', 'touchiness'], - 'couthless': ['couthless', 'touchless'], - 'coutil': ['coutil', 'toluic'], - 'covenanter': ['contravene', 'covenanter'], - 'coverer': ['coverer', 'recover'], - 'coversine': ['coversine', 'vernicose'], - 'covert': ['covert', 'vector'], - 'covisit': ['covisit', 'ovistic'], - 'cowardy': ['cowardy', 'cowyard'], - 'cowherd': ['chowder', 'cowherd'], - 'cowl': ['clow', 'cowl'], - 'cowyard': ['cowardy', 'cowyard'], - 'coxa': ['coax', 'coxa'], - 'coxite': ['coxite', 'exotic'], - 'coyness': ['coyness', 'sycones'], - 'coyol': ['cooly', 'coyol'], - 'coyote': ['coyote', 'oocyte'], - 'craber': ['bracer', 'craber'], - 'crabhole': ['bachelor', 'crabhole'], - 'crablet': ['beclart', 'crablet'], - 'crackable': ['blackacre', 'crackable'], - 'crackle': ['cackler', 'clacker', 'crackle'], - 'crackmans': ['crackmans', 'cracksman'], - 'cracksman': ['crackmans', 'cracksman'], - 'cradge': ['cadger', 'cradge'], - 'cradle': ['cardel', 'cradle'], - 'cradlemate': ['cradlemate', 'malcreated'], - 'craig': ['cigar', 'craig'], - 'crain': ['cairn', 'crain', 'naric'], - 'crake': ['acker', 'caker', 'crake', 'creak'], - 'cram': ['cram', 'marc'], - 'cramasie': ['cramasie', 'mesaraic'], - 'crambe': ['becram', 'camber', 'crambe'], - 'crambidae': ['carbamide', 'crambidae'], - 'crambinae': ['carbamine', 'crambinae'], - 'cramble': ['cambrel', 'clamber', 'cramble'], - 'cramper': ['cramper', 'recramp'], - 'crampon': ['crampon', 'cropman'], - 'cranage': ['carnage', 'cranage', 'garance'], - 'crance': ['cancer', 'crance'], - 'crane': ['caner', 'crane', 'crena', 'nacre', 'rance'], - 'craner': ['craner', 'rancer'], - 'craney': ['carney', 'craney'], - 'crania': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'craniad': ['acridan', 'craniad'], - 'cranial': ['carinal', 'carlina', 'clarain', 'cranial'], - 'cranially': ['ancillary', 'carlylian', 'cranially'], - 'cranian': ['canarin', 'cranian'], - 'craniate': ['anaretic', 'arcanite', 'carinate', 'craniate'], - 'cranic': ['cancri', 'carnic', 'cranic'], - 'craniectomy': ['craniectomy', 'cyanometric'], - 'craniognomy': ['craniognomy', 'organonymic'], - 'craniota': ['craniota', 'croatian', 'narcotia', 'raincoat'], - 'cranker': ['cranker', 'recrank'], - 'crap': ['carp', 'crap'], - 'crape': ['caper', 'crape', 'pacer', 'perca', 'recap'], - 'crappie': ['crappie', 'epicarp'], - 'crapple': ['clapper', 'crapple'], - 'crappo': ['crappo', 'croppa'], - 'craps': ['craps', 'scarp', 'scrap'], - 'crapulous': ['crapulous', 'opuscular'], - 'crare': ['carer', 'crare', 'racer'], - 'crate': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'crateful': ['crateful', 'fulcrate'], - 'crater': ['arrect', 'carter', 'crater', 'recart', 'tracer'], - 'craterid': ['cirrated', 'craterid'], - 'crateriform': ['crateriform', 'terraciform'], - 'crateris': ['crateris', 'serratic'], - 'craterlet': ['clatterer', 'craterlet'], - 'craterous': ['craterous', 'recusator'], - 'cratinean': ['cratinean', 'incarnate', 'nectarian'], - 'cratometric': ['cratometric', 'metrocratic'], - 'crave': ['carve', 'crave', 'varec'], - 'craven': ['carven', 'cavern', 'craven'], - 'craver': ['carver', 'craver'], - 'craving': ['carving', 'craving'], - 'crayon': ['canroy', 'crayon', 'cyrano', 'nyroca'], - 'crayonist': ['carnosity', 'crayonist'], - 'crea': ['acer', 'acre', 'care', 'crea', 'race'], - 'creagh': ['charge', 'creagh'], - 'creak': ['acker', 'caker', 'crake', 'creak'], - 'cream': ['cream', 'macer'], - 'creamer': ['amercer', 'creamer'], - 'creant': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'crease': ['cesare', 'crease', 'recase', 'searce'], - 'creaser': ['creaser', 'searcer'], - 'creasing': ['creasing', 'scirenga'], - 'creat': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'creatable': ['creatable', 'traceable'], - 'create': ['cerate', 'create', 'ecarte'], - 'creatine': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'], - 'creatinine': ['creatinine', 'incinerate'], - 'creation': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'], - 'creational': ['creational', 'crotalinae', 'laceration', 'reactional'], - 'creationary': ['creationary', 'reactionary'], - 'creationism': ['anisometric', - 'creationism', - 'miscreation', - 'ramisection', - 'reactionism'], - 'creationist': ['creationist', 'reactionist'], - 'creative': ['creative', 'reactive'], - 'creatively': ['creatively', 'reactively'], - 'creativeness': ['creativeness', 'reactiveness'], - 'creativity': ['creativity', 'reactivity'], - 'creator': ['creator', 'reactor'], - 'crebrous': ['crebrous', 'obscurer'], - 'credential': ['credential', 'interlaced', 'reclinated'], - 'credit': ['credit', 'direct'], - 'creditable': ['creditable', 'directable'], - 'creditive': ['creditive', 'directive'], - 'creditor': ['creditor', 'director'], - 'creditorship': ['creditorship', 'directorship'], - 'creditress': ['creditress', 'directress'], - 'creditrix': ['creditrix', 'directrix'], - 'crednerite': ['crednerite', 'interceder'], - 'credo': ['coder', 'cored', 'credo'], - 'cree': ['cere', 'cree'], - 'creed': ['ceder', 'cedre', 'cered', 'creed'], - 'creedal': ['cedrela', 'creedal', 'declare'], - 'creedalism': ['creedalism', 'misdeclare'], - 'creedist': ['creedist', 'desertic', 'discreet', 'discrete'], - 'creep': ['creep', 'crepe'], - 'creepered': ['creepered', 'predecree'], - 'creepie': ['creepie', 'repiece'], - 'cremation': ['cremation', 'manticore'], - 'cremator': ['cremator', 'mercator'], - 'crematorial': ['crematorial', 'mercatorial'], - 'cremor': ['cremor', 'cromer'], - 'crena': ['caner', 'crane', 'crena', 'nacre', 'rance'], - 'crenate': ['centare', 'crenate'], - 'crenated': ['crenated', 'decanter', 'nectared'], - 'crenation': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'], - 'crenelate': ['crenelate', 'lanceteer'], - 'crenelation': ['crenelation', 'intolerance'], - 'crenele': ['crenele', 'encreel'], - 'crenellation': ['centrolineal', 'crenellation'], - 'crenitic': ['crenitic', 'cretinic'], - 'crenology': ['crenology', 'necrology'], - 'crenula': ['crenula', 'lucarne', 'nuclear', 'unclear'], - 'crenulate': ['calenture', 'crenulate'], - 'creodonta': ['coronated', 'creodonta'], - 'creolian': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'creolin': ['creolin', 'licorne', 'locrine'], - 'creosotic': ['corticose', 'creosotic'], - 'crepe': ['creep', 'crepe'], - 'crepidula': ['crepidula', 'pedicular'], - 'crepine': ['crepine', 'increep'], - 'crepiness': ['crepiness', 'princesse'], - 'crepis': ['crepis', 'cripes', 'persic', 'precis', 'spicer'], - 'crepitant': ['crepitant', 'pittancer'], - 'crepitation': ['actinopteri', 'crepitation', 'precitation'], - 'crepitous': ['crepitous', 'euproctis', 'uroseptic'], - 'crepitus': ['crepitus', 'piecrust'], - 'crepon': ['crepon', 'procne'], - 'crepy': ['crepy', 'cypre', 'percy'], - 'cresol': ['closer', 'cresol', 'escrol'], - 'cresolin': ['cresolin', 'licensor'], - 'cresotic': ['cortices', 'cresotic'], - 'cresson': ['cresson', 'crosnes'], - 'crestline': ['crestline', 'stenciler'], - 'crestmoreite': ['crestmoreite', 'stereometric'], - 'creta': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'cretan': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'crete': ['crete', 'erect'], - 'cretification': ['certification', 'cretification', 'rectification'], - 'cretify': ['certify', 'cretify', 'rectify'], - 'cretin': ['cinter', 'cretin', 'crinet'], - 'cretinic': ['crenitic', 'cretinic'], - 'cretinoid': ['cretinoid', 'direction'], - 'cretion': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'], - 'cretism': ['cretism', 'metrics'], - 'crewer': ['crewer', 'recrew'], - 'cribo': ['boric', 'cribo', 'orbic'], - 'crickle': ['clicker', 'crickle'], - 'cricothyroid': ['cricothyroid', 'thyrocricoid'], - 'cried': ['cider', 'cried', 'deric', 'dicer'], - 'crier': ['crier', 'ricer'], - 'criey': ['criey', 'ricey'], - 'crile': ['crile', 'elric', 'relic'], - 'crimean': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'], - 'crimeful': ['crimeful', 'merciful'], - 'crimeless': ['crimeless', 'merciless'], - 'crimelessness': ['crimelessness', 'mercilessness'], - 'criminalese': ['criminalese', 'misreliance'], - 'criminate': ['antimeric', 'carminite', 'criminate', 'metrician'], - 'criminatory': ['coriamyrtin', 'criminatory'], - 'crimpage': ['crimpage', 'pergamic'], - 'crinal': ['carlin', 'clarin', 'crinal'], - 'crinanite': ['crinanite', 'natricine'], - 'crinated': ['crinated', 'dicentra'], - 'crine': ['cerin', 'crine'], - 'crined': ['cedrin', 'cinder', 'crined'], - 'crinet': ['cinter', 'cretin', 'crinet'], - 'cringle': ['clinger', 'cringle'], - 'crinite': ['citrine', 'crinite', 'inciter', 'neritic'], - 'crinkle': ['clinker', 'crinkle'], - 'cripes': ['crepis', 'cripes', 'persic', 'precis', 'spicer'], - 'cripple': ['clipper', 'cripple'], - 'crisp': ['crisp', 'scrip'], - 'crispation': ['antipsoric', 'ascription', 'crispation'], - 'crisped': ['crisped', 'discerp'], - 'crispy': ['crispy', 'cypris'], - 'crista': ['crista', 'racist'], - 'cristopher': ['cristopher', 'rectorship'], - 'criteria': ['criteria', 'triceria'], - 'criterion': ['criterion', 'tricerion'], - 'criterium': ['criterium', 'tricerium'], - 'crith': ['crith', 'richt'], - 'critic': ['citric', 'critic'], - 'cro': ['cor', 'cro', 'orc', 'roc'], - 'croak': ['arock', 'croak'], - 'croat': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'], - 'croatan': ['cantaro', 'croatan'], - 'croatian': ['craniota', 'croatian', 'narcotia', 'raincoat'], - 'crocein': ['cornice', 'crocein'], - 'croceine': ['cicerone', 'croceine'], - 'crocetin': ['crocetin', 'necrotic'], - 'crocidolite': ['crocidolite', 'crocodilite'], - 'crocin': ['cornic', 'crocin'], - 'crocodile': ['cordicole', 'crocodile'], - 'crocodilite': ['crocidolite', 'crocodilite'], - 'croconate': ['coenactor', 'croconate'], - 'crocus': ['crocus', 'succor'], - 'crom': ['corm', 'crom'], - 'crome': ['comer', 'crome'], - 'cromer': ['cremor', 'cromer'], - 'crone': ['coner', 'crone', 'recon'], - 'cronet': ['conter', 'cornet', 'cronet', 'roncet'], - 'cronian': ['corinna', 'cronian'], - 'cronish': ['cornish', 'cronish', 'sorchin'], - 'crony': ['corny', 'crony'], - 'croodle': ['colored', 'croodle', 'decolor'], - 'crool': ['color', 'corol', 'crool'], - 'croon': ['conor', 'croon', 'ronco'], - 'crooner': ['coroner', 'crooner', 'recroon'], - 'crop': ['copr', 'corp', 'crop'], - 'cropman': ['crampon', 'cropman'], - 'croppa': ['crappo', 'croppa'], - 'crore': ['corer', 'crore'], - 'crosa': ['arcos', 'crosa', 'oscar', 'sacro'], - 'crosier': ['cirrose', 'crosier'], - 'crosnes': ['cresson', 'crosnes'], - 'crosse': ['cessor', 'crosse', 'scorse'], - 'crosser': ['crosser', 'recross'], - 'crossite': ['crossite', 'crosstie'], - 'crossover': ['crossover', 'overcross'], - 'crosstie': ['crossite', 'crosstie'], - 'crosstied': ['crosstied', 'dissector'], - 'crosstree': ['crosstree', 'rectoress'], - 'crosswalk': ['classwork', 'crosswalk'], - 'crotal': ['carlot', 'crotal'], - 'crotalic': ['cortical', 'crotalic'], - 'crotalinae': ['creational', 'crotalinae', 'laceration', 'reactional'], - 'crotaline': ['alectrion', 'clarionet', 'crotaline', 'locarnite'], - 'crotalism': ['clamorist', 'crotalism'], - 'crotalo': ['crotalo', 'locator'], - 'crotaloid': ['crotaloid', 'doctorial'], - 'crotin': ['citron', 'cortin', 'crotin'], - 'croton': ['corton', 'croton'], - 'crotonate': ['contortae', 'crotonate'], - 'crottle': ['clotter', 'crottle'], - 'crouchant': ['archcount', 'crouchant'], - 'croupal': ['copular', 'croupal', 'cupolar', 'porcula'], - 'croupe': ['couper', 'croupe', 'poucer', 'recoup'], - 'croupily': ['croupily', 'polyuric'], - 'croupiness': ['croupiness', 'percussion', 'supersonic'], - 'crouse': ['cerous', 'course', 'crouse', 'source'], - 'crout': ['court', 'crout', 'turco'], - 'croute': ['couter', 'croute'], - 'crouton': ['contour', 'cornuto', 'countor', 'crouton'], - 'crowder': ['crowder', 'recrowd'], - 'crowned': ['crowned', 'decrown'], - 'crowner': ['crowner', 'recrown'], - 'crownmaker': ['cankerworm', 'crownmaker'], - 'croy': ['cory', 'croy'], - 'croydon': ['corydon', 'croydon'], - 'cruces': ['cercus', 'cruces'], - 'cruciate': ['aceturic', 'cruciate'], - 'crudwort': ['crudwort', 'curdwort'], - 'cruel': ['cruel', 'lucre', 'ulcer'], - 'cruels': ['clerus', 'cruels'], - 'cruelty': ['cruelty', 'cutlery'], - 'cruet': ['cruet', 'eruct', 'recut', 'truce'], - 'cruise': ['cruise', 'crusie'], - 'cruisken': ['cruisken', 'unsicker'], - 'crunode': ['crunode', 'uncored'], - 'crureus': ['crureus', 'surcrue'], - 'crurogenital': ['crurogenital', 'genitocrural'], - 'cruroinguinal': ['cruroinguinal', 'inguinocrural'], - 'crus': ['crus', 'scur'], - 'crusado': ['acrodus', 'crusado'], - 'crusca': ['crusca', 'curcas'], - 'cruse': ['cruse', 'curse', 'sucre'], - 'crusher': ['crusher', 'recrush'], - 'crusie': ['cruise', 'crusie'], - 'crust': ['crust', 'curst'], - 'crustate': ['crustate', 'scrutate'], - 'crustation': ['crustation', 'scrutation'], - 'crustily': ['crustily', 'rusticly'], - 'crustiness': ['crustiness', 'rusticness'], - 'crusty': ['crusty', 'curtsy'], - 'cruth': ['cruth', 'rutch'], - 'cryosel': ['cryosel', 'scroyle'], - 'cryptodire': ['cryptodire', 'predictory'], - 'cryptomeria': ['cryptomeria', 'imprecatory'], - 'cryptostomate': ['cryptostomate', 'prostatectomy'], - 'ctenidial': ['ctenidial', 'identical'], - 'ctenoid': ['condite', 'ctenoid'], - 'ctenolium': ['ctenolium', 'monticule'], - 'ctenophore': ['ctenophore', 'nectophore'], - 'ctetology': ['ctetology', 'tectology'], - 'cuailnge': ['cuailnge', 'glaucine'], - 'cuarteron': ['cuarteron', 'raconteur'], - 'cubanite': ['cubanite', 'incubate'], - 'cuber': ['bruce', 'cebur', 'cuber'], - 'cubist': ['bustic', 'cubist'], - 'cubit': ['butic', 'cubit'], - 'cubitale': ['baculite', 'cubitale'], - 'cuboidal': ['baculoid', 'cuboidal'], - 'cuchan': ['caunch', 'cuchan'], - 'cueball': ['bullace', 'cueball'], - 'cueman': ['acumen', 'cueman'], - 'cuir': ['cuir', 'uric'], - 'culebra': ['culebra', 'curable'], - 'culet': ['culet', 'lucet'], - 'culinary': ['culinary', 'uranylic'], - 'culmy': ['culmy', 'cumyl'], - 'culpose': ['culpose', 'ploceus', 'upclose'], - 'cultch': ['clutch', 'cultch'], - 'cultivar': ['cultivar', 'curvital'], - 'culturine': ['culturine', 'inculture'], - 'cumaean': ['cumaean', 'encauma'], - 'cumar': ['carum', 'cumar'], - 'cumber': ['cumber', 'cumbre'], - 'cumberer': ['cerebrum', 'cumberer'], - 'cumbraite': ['bacterium', 'cumbraite'], - 'cumbre': ['cumber', 'cumbre'], - 'cumic': ['cumic', 'mucic'], - 'cumin': ['cumin', 'mucin'], - 'cumol': ['cumol', 'locum'], - 'cumulite': ['cumulite', 'lutecium'], - 'cumyl': ['culmy', 'cumyl'], - 'cuna': ['cuna', 'unca'], - 'cunan': ['canun', 'cunan'], - 'cuneal': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'], - 'cuneator': ['cornuate', 'courante', 'cuneator', 'outrance'], - 'cunila': ['cunila', 'lucian', 'lucina', 'uncial'], - 'cuon': ['cuon', 'unco'], - 'cuorin': ['cuorin', 'uronic'], - 'cupid': ['cupid', 'pudic'], - 'cupidity': ['cupidity', 'pudicity'], - 'cupidone': ['cupidone', 'uncopied'], - 'cupola': ['copula', 'cupola'], - 'cupolar': ['copular', 'croupal', 'cupolar', 'porcula'], - 'cupreous': ['cupreous', 'upcourse'], - 'cuprite': ['cuprite', 'picture'], - 'curable': ['culebra', 'curable'], - 'curate': ['acture', 'cauter', 'curate'], - 'curateship': ['curateship', 'pasticheur'], - 'curation': ['curation', 'nocturia'], - 'curatory': ['curatory', 'outcarry'], - 'curcas': ['crusca', 'curcas'], - 'curdle': ['curdle', 'curled'], - 'curdwort': ['crudwort', 'curdwort'], - 'cure': ['cure', 'ecru', 'eruc'], - 'curer': ['curer', 'recur'], - 'curial': ['curial', 'lauric', 'uracil', 'uralic'], - 'curialist': ['curialist', 'rusticial'], - 'curie': ['curie', 'ureic'], - 'curin': ['curin', 'incur', 'runic'], - 'curine': ['curine', 'erucin', 'neuric'], - 'curiosa': ['carious', 'curiosa'], - 'curite': ['curite', 'teucri', 'uretic'], - 'curled': ['curdle', 'curled'], - 'curler': ['curler', 'recurl'], - 'cursa': ['cursa', 'scaur'], - 'cursal': ['cursal', 'sulcar'], - 'curse': ['cruse', 'curse', 'sucre'], - 'cursed': ['cedrus', 'cursed'], - 'curst': ['crust', 'curst'], - 'cursus': ['cursus', 'ruscus'], - 'curtail': ['curtail', 'trucial'], - 'curtailer': ['curtailer', 'recruital', 'reticular'], - 'curtain': ['curtain', 'turacin', 'turcian'], - 'curtation': ['anticourt', 'curtation', 'ructation'], - 'curtilage': ['curtilage', 'cutigeral', 'graticule'], - 'curtis': ['citrus', 'curtis', 'rictus', 'rustic'], - 'curtise': ['curtise', 'icterus'], - 'curtsy': ['crusty', 'curtsy'], - 'curvital': ['cultivar', 'curvital'], - 'cush': ['cush', 'such'], - 'cushionless': ['cushionless', 'slouchiness'], - 'cusinero': ['coinsure', 'corineus', 'cusinero'], - 'cusk': ['cusk', 'suck'], - 'cusp': ['cusp', 'scup'], - 'cuspal': ['cuspal', 'placus'], - 'custom': ['custom', 'muscot'], - 'customer': ['costumer', 'customer'], - 'cutheal': ['auchlet', 'cutheal', 'taluche'], - 'cutigeral': ['curtilage', 'cutigeral', 'graticule'], - 'cutin': ['cutin', 'incut', 'tunic'], - 'cutis': ['cutis', 'ictus'], - 'cutler': ['cutler', 'reluct'], - 'cutleress': ['cutleress', 'lecturess', 'truceless'], - 'cutleria': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'], - 'cutlery': ['cruelty', 'cutlery'], - 'cutlet': ['cutlet', 'cuttle'], - 'cutoff': ['cutoff', 'offcut'], - 'cutout': ['cutout', 'outcut'], - 'cutover': ['cutover', 'overcut'], - 'cuttle': ['cutlet', 'cuttle'], - 'cuttler': ['clutter', 'cuttler'], - 'cutup': ['cutup', 'upcut'], - 'cuya': ['cuya', 'yuca'], - 'cyamus': ['cyamus', 'muysca'], - 'cyan': ['cany', 'cyan'], - 'cyanidine': ['cyanidine', 'dicyanine'], - 'cyanol': ['alcyon', 'cyanol'], - 'cyanole': ['alcyone', 'cyanole'], - 'cyanometric': ['craniectomy', 'cyanometric'], - 'cyanophycin': ['cyanophycin', 'phycocyanin'], - 'cyanuret': ['centaury', 'cyanuret'], - 'cyath': ['cathy', 'cyath', 'yacht'], - 'cyclamine': ['cyclamine', 'macilency'], - 'cyclian': ['cyclian', 'cynical'], - 'cyclide': ['cyclide', 'decylic', 'dicycle'], - 'cyclism': ['clysmic', 'cyclism'], - 'cyclotome': ['colectomy', 'cyclotome'], - 'cydonian': ['anodynic', 'cydonian'], - 'cylindrite': ['cylindrite', 'indirectly'], - 'cylix': ['cylix', 'xylic'], - 'cymation': ['cymation', 'myatonic', 'onymatic'], - 'cymoid': ['cymoid', 'mycoid'], - 'cymometer': ['cymometer', 'mecometry'], - 'cymose': ['cymose', 'mycose'], - 'cymule': ['cymule', 'lyceum'], - 'cynara': ['canary', 'cynara'], - 'cynaroid': ['cynaroid', 'dicaryon'], - 'cynical': ['cyclian', 'cynical'], - 'cynogale': ['acylogen', 'cynogale'], - 'cynophilic': ['cynophilic', 'philocynic'], - 'cynosural': ['consulary', 'cynosural'], - 'cyphonism': ['cyphonism', 'symphonic'], - 'cypre': ['crepy', 'cypre', 'percy'], - 'cypria': ['cypria', 'picary', 'piracy'], - 'cyprian': ['cyprian', 'cyprina'], - 'cyprina': ['cyprian', 'cyprina'], - 'cyprine': ['cyprine', 'pyrenic'], - 'cypris': ['crispy', 'cypris'], - 'cyrano': ['canroy', 'crayon', 'cyrano', 'nyroca'], - 'cyril': ['cyril', 'lyric'], - 'cyrilla': ['cyrilla', 'lyrical'], - 'cyrtopia': ['cyrtopia', 'poticary'], - 'cyst': ['cyst', 'scyt'], - 'cystidean': ['asyndetic', 'cystidean', 'syndicate'], - 'cystitis': ['cystitis', 'scytitis'], - 'cystoadenoma': ['adenocystoma', 'cystoadenoma'], - 'cystofibroma': ['cystofibroma', 'fibrocystoma'], - 'cystolith': ['cystolith', 'lithocyst'], - 'cystomyxoma': ['cystomyxoma', 'myxocystoma'], - 'cystonephrosis': ['cystonephrosis', 'nephrocystosis'], - 'cystopyelitis': ['cystopyelitis', 'pyelocystitis'], - 'cystotome': ['cystotome', 'cytostome', 'ostectomy'], - 'cystourethritis': ['cystourethritis', 'urethrocystitis'], - 'cytase': ['cytase', 'stacey'], - 'cytherea': ['cheatery', 'cytherea', 'teachery'], - 'cytherean': ['cytherean', 'enchytrae'], - 'cytisine': ['cytisine', 'syenitic'], - 'cytoblastemic': ['blastomycetic', 'cytoblastemic'], - 'cytoblastemous': ['blastomycetous', 'cytoblastemous'], - 'cytochrome': ['chromocyte', 'cytochrome'], - 'cytoid': ['cytoid', 'docity'], - 'cytomere': ['cytomere', 'merocyte'], - 'cytophil': ['cytophil', 'phycitol'], - 'cytosine': ['cenosity', 'cytosine'], - 'cytosome': ['cytosome', 'otomyces'], - 'cytost': ['cytost', 'scotty'], - 'cytostome': ['cystotome', 'cytostome', 'ostectomy'], - 'czarian': ['czarian', 'czarina'], - 'czarina': ['czarian', 'czarina'], - 'da': ['ad', 'da'], - 'dab': ['bad', 'dab'], - 'dabber': ['barbed', 'dabber'], - 'dabbler': ['dabbler', 'drabble'], - 'dabitis': ['dabitis', 'dibatis'], - 'dablet': ['dablet', 'tabled'], - 'dace': ['cade', 'dace', 'ecad'], - 'dacelo': ['alcedo', 'dacelo'], - 'dacian': ['acnida', 'anacid', 'dacian'], - 'dacker': ['arcked', 'dacker'], - 'dacryolith': ['dacryolith', 'hydrotical'], - 'dacryon': ['candroy', 'dacryon'], - 'dactylonomy': ['dactylonomy', 'monodactyly'], - 'dactylopteridae': ['dactylopteridae', 'pterodactylidae'], - 'dactylopterus': ['dactylopterus', 'pterodactylus'], - 'dacus': ['cadus', 'dacus'], - 'dad': ['add', 'dad'], - 'dada': ['adad', 'adda', 'dada'], - 'dadap': ['dadap', 'padda'], - 'dade': ['dade', 'dead', 'edda'], - 'dadu': ['addu', 'dadu', 'daud', 'duad'], - 'dae': ['ade', 'dae'], - 'daemon': ['daemon', 'damone', 'modena'], - 'daemonic': ['codamine', 'comedian', 'daemonic', 'demoniac'], - 'daer': ['ared', 'daer', 'dare', 'dear', 'read'], - 'dag': ['dag', 'gad'], - 'dagaba': ['badaga', 'dagaba', 'gadaba'], - 'dagame': ['dagame', 'damage'], - 'dagbane': ['bandage', 'dagbane'], - 'dagestan': ['dagestan', 'standage'], - 'dagger': ['dagger', 'gadger', 'ragged'], - 'daggers': ['daggers', 'seggard'], - 'daggle': ['daggle', 'lagged'], - 'dago': ['dago', 'goad'], - 'dagomba': ['dagomba', 'gambado'], - 'dags': ['dags', 'sgad'], - 'dah': ['dah', 'dha', 'had'], - 'daidle': ['daidle', 'laddie'], - 'daikon': ['daikon', 'nodiak'], - 'dail': ['dail', 'dali', 'dial', 'laid', 'lida'], - 'daily': ['daily', 'lydia'], - 'daimen': ['daimen', 'damine', 'maiden', 'median', 'medina'], - 'daimio': ['daimio', 'maioid'], - 'daimon': ['amidon', 'daimon', 'domain'], - 'dain': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'], - 'dairi': ['dairi', 'darii', 'radii'], - 'dairy': ['dairy', 'diary', 'yaird'], - 'dais': ['dais', 'dasi', 'disa', 'said', 'sida'], - 'daisy': ['daisy', 'sayid'], - 'daker': ['daker', 'drake', 'kedar', 'radek'], - 'dal': ['dal', 'lad'], - 'dale': ['dale', 'deal', 'lade', 'lead', 'leda'], - 'dalea': ['adela', 'dalea'], - 'dalecarlian': ['calendarial', 'dalecarlian'], - 'daleman': ['daleman', 'lademan', 'leadman'], - 'daler': ['alder', 'daler', 'lader'], - 'dalesman': ['dalesman', 'leadsman'], - 'dali': ['dail', 'dali', 'dial', 'laid', 'lida'], - 'dalle': ['dalle', 'della', 'ladle'], - 'dallying': ['dallying', 'ladyling'], - 'dalt': ['dalt', 'tald'], - 'dalteen': ['dalteen', 'dentale', 'edental'], - 'dam': ['dam', 'mad'], - 'dama': ['adam', 'dama'], - 'damage': ['dagame', 'damage'], - 'daman': ['adman', 'daman', 'namda'], - 'damara': ['armada', 'damara', 'ramada'], - 'dame': ['dame', 'made', 'mead'], - 'damewort': ['damewort', 'wardmote'], - 'damia': ['amadi', 'damia', 'madia', 'maida'], - 'damie': ['amide', 'damie', 'media'], - 'damier': ['admire', 'armied', 'damier', 'dimera', 'merida'], - 'damine': ['daimen', 'damine', 'maiden', 'median', 'medina'], - 'dammer': ['dammer', 'dramme'], - 'dammish': ['dammish', 'mahdism'], - 'damn': ['damn', 'mand'], - 'damnation': ['damnation', 'mandation'], - 'damnatory': ['damnatory', 'mandatory'], - 'damned': ['damned', 'demand', 'madden'], - 'damner': ['damner', 'manred', 'randem', 'remand'], - 'damnii': ['amidin', 'damnii'], - 'damnous': ['damnous', 'osmunda'], - 'damon': ['damon', 'monad', 'nomad'], - 'damone': ['daemon', 'damone', 'modena'], - 'damonico': ['damonico', 'monoacid'], - 'dampen': ['dampen', 'madnep'], - 'damper': ['damper', 'ramped'], - 'dampish': ['dampish', 'madship', 'phasmid'], - 'dan': ['and', 'dan'], - 'dana': ['anda', 'dana'], - 'danaan': ['ananda', 'danaan'], - 'danai': ['danai', 'diana', 'naiad'], - 'danainae': ['anadenia', 'danainae'], - 'danakil': ['danakil', 'dankali', 'kaldani', 'ladakin'], - 'danalite': ['danalite', 'detainal'], - 'dancalite': ['cadential', 'dancalite'], - 'dance': ['dance', 'decan'], - 'dancer': ['cedarn', 'dancer', 'nacred'], - 'dancery': ['ardency', 'dancery'], - 'dander': ['dander', 'darned', 'nadder'], - 'dandle': ['dandle', 'landed'], - 'dandler': ['dandler', 'dendral'], - 'dane': ['ande', 'dane', 'dean', 'edna'], - 'danewort': ['danewort', 'teardown'], - 'danger': ['danger', 'gander', 'garden', 'ranged'], - 'dangerful': ['dangerful', 'gardenful'], - 'dangerless': ['dangerless', 'gardenless'], - 'dangle': ['angled', 'dangle', 'englad', 'lagend'], - 'dangler': ['dangler', 'gnarled'], - 'danglin': ['danglin', 'landing'], - 'dani': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'], - 'danian': ['andian', 'danian', 'nidana'], - 'danic': ['canid', 'cnida', 'danic'], - 'daniel': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'], - 'daniele': ['adeline', 'daniele', 'delaine'], - 'danielic': ['alcidine', 'danielic', 'lecaniid'], - 'danio': ['adion', 'danio', 'doina', 'donia'], - 'danish': ['danish', 'sandhi'], - 'danism': ['danism', 'disman'], - 'danite': ['danite', 'detain'], - 'dankali': ['danakil', 'dankali', 'kaldani', 'ladakin'], - 'danli': ['danli', 'ladin', 'linda', 'nidal'], - 'dannie': ['aidenn', 'andine', 'dannie', 'indane'], - 'danseuse': ['danseuse', 'sudanese'], - 'dantean': ['andante', 'dantean'], - 'dantist': ['dantist', 'distant'], - 'danuri': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'], - 'dao': ['ado', 'dao', 'oda'], - 'daoine': ['daoine', 'oneida'], - 'dap': ['dap', 'pad'], - 'daphnis': ['daphnis', 'dishpan'], - 'dapicho': ['dapicho', 'phacoid'], - 'dapple': ['dapple', 'lapped', 'palped'], - 'dar': ['dar', 'rad'], - 'daraf': ['daraf', 'farad'], - 'darby': ['bardy', 'darby'], - 'darci': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'], - 'dare': ['ared', 'daer', 'dare', 'dear', 'read'], - 'dareall': ['ardella', 'dareall'], - 'daren': ['andre', 'arend', 'daren', 'redan'], - 'darer': ['darer', 'drear'], - 'darg': ['darg', 'drag', 'grad'], - 'darger': ['darger', 'gerard', 'grader', 'redrag', 'regard'], - 'dargo': ['dargo', 'dogra', 'drago'], - 'dargsman': ['dargsman', 'dragsman'], - 'dari': ['arid', 'dari', 'raid'], - 'daric': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'], - 'darien': ['darien', 'draine'], - 'darii': ['dairi', 'darii', 'radii'], - 'darin': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'], - 'daring': ['daring', 'dingar', 'gradin'], - 'darius': ['darius', 'radius'], - 'darken': ['darken', 'kanred', 'ranked'], - 'darkener': ['darkener', 'redarken'], - 'darn': ['darn', 'nard', 'rand'], - 'darned': ['dander', 'darned', 'nadder'], - 'darnel': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'darner': ['darner', 'darren', 'errand', 'rander', 'redarn'], - 'darning': ['darning', 'randing'], - 'darrein': ['darrein', 'drainer'], - 'darren': ['darner', 'darren', 'errand', 'rander', 'redarn'], - 'darshana': ['darshana', 'shardana'], - 'darst': ['darst', 'darts', 'strad'], - 'dart': ['dart', 'drat'], - 'darter': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'darting': ['darting', 'trading'], - 'dartle': ['dartle', 'tardle'], - 'dartoic': ['arctoid', 'carotid', 'dartoic'], - 'dartre': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'dartrose': ['dartrose', 'roadster'], - 'darts': ['darst', 'darts', 'strad'], - 'daryl': ['daryl', 'lardy', 'lyard'], - 'das': ['das', 'sad'], - 'dash': ['dash', 'sadh', 'shad'], - 'dashed': ['dashed', 'shaded'], - 'dasheen': ['dasheen', 'enshade'], - 'dasher': ['dasher', 'shader', 'sheard'], - 'dashing': ['dashing', 'shading'], - 'dashnak': ['dashnak', 'shadkan'], - 'dashy': ['dashy', 'shady'], - 'dasi': ['dais', 'dasi', 'disa', 'said', 'sida'], - 'dasnt': ['dasnt', 'stand'], - 'dasturi': ['dasturi', 'rudista'], - 'dasya': ['adays', 'dasya'], - 'dasyurine': ['dasyurine', 'dysneuria'], - 'data': ['adat', 'data'], - 'datable': ['albetad', 'datable'], - 'dataria': ['dataria', 'radiata'], - 'date': ['adet', 'date', 'tade', 'tead', 'teda'], - 'dateless': ['dateless', 'detassel'], - 'dater': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'datil': ['datil', 'dital', 'tidal', 'tilda'], - 'datism': ['amidst', 'datism'], - 'daub': ['baud', 'buda', 'daub'], - 'dauber': ['dauber', 'redaub'], - 'daubster': ['daubster', 'subtread'], - 'daud': ['addu', 'dadu', 'daud', 'duad'], - 'daunch': ['chandu', 'daunch'], - 'daunter': ['daunter', 'unarted', 'unrated', 'untread'], - 'dauntless': ['adultness', 'dauntless'], - 'daur': ['ardu', 'daur', 'dura'], - 'dave': ['dave', 'deva', 'vade', 'veda'], - 'daven': ['daven', 'vaned'], - 'davy': ['davy', 'vady'], - 'daw': ['awd', 'daw', 'wad'], - 'dawdler': ['dawdler', 'waddler'], - 'dawdling': ['dawdling', 'waddling'], - 'dawdlingly': ['dawdlingly', 'waddlingly'], - 'dawdy': ['dawdy', 'waddy'], - 'dawn': ['dawn', 'wand'], - 'dawnlike': ['dawnlike', 'wandlike'], - 'dawny': ['dawny', 'wandy'], - 'day': ['ady', 'day', 'yad'], - 'dayal': ['adlay', 'dayal'], - 'dayfly': ['dayfly', 'ladyfy'], - 'days': ['days', 'dyas'], - 'daysman': ['daysman', 'mandyas'], - 'daytime': ['daytime', 'maytide'], - 'daywork': ['daywork', 'workday'], - 'daze': ['adze', 'daze'], - 'de': ['de', 'ed'], - 'deacon': ['acnode', 'deacon'], - 'deaconship': ['deaconship', 'endophasic'], - 'dead': ['dade', 'dead', 'edda'], - 'deadborn': ['deadborn', 'endboard'], - 'deadener': ['deadener', 'endeared'], - 'deadlock': ['deadlock', 'deckload'], - 'deaf': ['deaf', 'fade'], - 'deair': ['aider', 'deair', 'irade', 'redia'], - 'deal': ['dale', 'deal', 'lade', 'lead', 'leda'], - 'dealable': ['dealable', 'leadable'], - 'dealation': ['atloidean', 'dealation'], - 'dealer': ['dealer', 'leader', 'redeal', 'relade', 'relead'], - 'dealership': ['dealership', 'leadership'], - 'dealing': ['adeling', 'dealing', 'leading'], - 'dealt': ['adlet', 'dealt', 'delta', 'lated', 'taled'], - 'deaminase': ['deaminase', 'mesadenia'], - 'dean': ['ande', 'dane', 'dean', 'edna'], - 'deaner': ['deaner', 'endear'], - 'deaness': ['deaness', 'edessan'], - 'deaquation': ['adequation', 'deaquation'], - 'dear': ['ared', 'daer', 'dare', 'dear', 'read'], - 'dearie': ['aeried', 'dearie'], - 'dearth': ['dearth', 'hatred', 'rathed', 'thread'], - 'deary': ['deary', 'deray', 'rayed', 'ready', 'yeard'], - 'deash': ['deash', 'hades', 'sadhe', 'shade'], - 'deasil': ['aisled', 'deasil', 'ladies', 'sailed'], - 'deave': ['deave', 'eaved', 'evade'], - 'deb': ['bed', 'deb'], - 'debacle': ['belaced', 'debacle'], - 'debar': ['ardeb', 'beard', 'bread', 'debar'], - 'debark': ['bedark', 'debark'], - 'debaser': ['debaser', 'sabered'], - 'debater': ['betread', 'debater'], - 'deben': ['beden', 'deben', 'deneb'], - 'debi': ['beid', 'bide', 'debi', 'dieb'], - 'debile': ['debile', 'edible'], - 'debit': ['bidet', 'debit'], - 'debosh': ['beshod', 'debosh'], - 'debrief': ['debrief', 'defiber', 'fibered'], - 'debutant': ['debutant', 'unbatted'], - 'debutante': ['debutante', 'unabetted'], - 'decachord': ['decachord', 'dodecarch'], - 'decadic': ['caddice', 'decadic'], - 'decal': ['clead', 'decal', 'laced'], - 'decalin': ['cladine', 'decalin', 'iceland'], - 'decaliter': ['decaliter', 'decalitre'], - 'decalitre': ['decaliter', 'decalitre'], - 'decameter': ['decameter', 'decametre'], - 'decametre': ['decameter', 'decametre'], - 'decan': ['dance', 'decan'], - 'decanal': ['candela', 'decanal'], - 'decani': ['decani', 'decian'], - 'decant': ['cadent', 'canted', 'decant'], - 'decantate': ['catenated', 'decantate'], - 'decanter': ['crenated', 'decanter', 'nectared'], - 'decantherous': ['countershade', 'decantherous'], - 'decap': ['caped', 'decap', 'paced'], - 'decart': ['cedrat', 'decart', 'redact'], - 'decastere': ['decastere', 'desecrate'], - 'decator': ['cordate', 'decator', 'redcoat'], - 'decay': ['acedy', 'decay'], - 'deceiver': ['deceiver', 'received'], - 'decennia': ['cadinene', 'decennia', 'enneadic'], - 'decennial': ['celandine', 'decennial'], - 'decent': ['cedent', 'decent'], - 'decenter': ['centered', 'decenter', 'decentre', 'recedent'], - 'decentre': ['centered', 'decenter', 'decentre', 'recedent'], - 'decern': ['cendre', 'decern'], - 'decian': ['decani', 'decian'], - 'deciatine': ['deciatine', 'diacetine', 'taenicide', 'teniacide'], - 'decider': ['decider', 'decried'], - 'decillion': ['celloidin', 'collidine', 'decillion'], - 'decima': ['amiced', 'decima'], - 'decimal': ['camelid', 'decimal', 'declaim', 'medical'], - 'decimally': ['decimally', 'medically'], - 'decimate': ['decimate', 'medicate'], - 'decimation': ['decimation', 'medication'], - 'decimator': ['decimator', 'medicator', 'mordicate'], - 'decimestrial': ['decimestrial', 'sedimetrical'], - 'decimosexto': ['decimosexto', 'sextodecimo'], - 'deckel': ['deckel', 'deckle'], - 'decker': ['decker', 'redeck'], - 'deckle': ['deckel', 'deckle'], - 'deckload': ['deadlock', 'deckload'], - 'declaim': ['camelid', 'decimal', 'declaim', 'medical'], - 'declaimer': ['declaimer', 'demiracle'], - 'declaration': ['declaration', 'redactional'], - 'declare': ['cedrela', 'creedal', 'declare'], - 'declass': ['classed', 'declass'], - 'declinate': ['declinate', 'encitadel'], - 'declinatory': ['adrenolytic', 'declinatory'], - 'decoat': ['coated', 'decoat'], - 'decollate': ['decollate', 'ocellated'], - 'decollator': ['corollated', 'decollator'], - 'decolor': ['colored', 'croodle', 'decolor'], - 'decompress': ['compressed', 'decompress'], - 'deconsider': ['considered', 'deconsider'], - 'decorate': ['decorate', 'ocreated'], - 'decoration': ['carotenoid', 'coronadite', 'decoration'], - 'decorist': ['decorist', 'sectroid'], - 'decream': ['decream', 'racemed'], - 'decree': ['decree', 'recede'], - 'decreer': ['decreer', 'receder'], - 'decreet': ['decreet', 'decrete'], - 'decrepit': ['decrepit', 'depicter', 'precited'], - 'decrete': ['decreet', 'decrete'], - 'decretist': ['decretist', 'trisected'], - 'decrial': ['decrial', 'radicel', 'radicle'], - 'decried': ['decider', 'decried'], - 'decrown': ['crowned', 'decrown'], - 'decry': ['cedry', 'decry'], - 'decurionate': ['counteridea', 'decurionate'], - 'decurrency': ['decurrency', 'recrudency'], - 'decursion': ['cinderous', 'decursion'], - 'decus': ['decus', 'duces'], - 'decyl': ['clyde', 'decyl'], - 'decylic': ['cyclide', 'decylic', 'dicycle'], - 'dedan': ['dedan', 'denda'], - 'dedicant': ['addicent', 'dedicant'], - 'dedo': ['dedo', 'dode', 'eddo'], - 'deduce': ['deduce', 'deuced'], - 'deduct': ['deduct', 'ducted'], - 'deem': ['deem', 'deme', 'mede', 'meed'], - 'deemer': ['deemer', 'meered', 'redeem', 'remede'], - 'deep': ['deep', 'peed'], - 'deer': ['deer', 'dere', 'dree', 'rede', 'reed'], - 'deerhair': ['deerhair', 'dehairer'], - 'deerhorn': ['deerhorn', 'dehorner'], - 'deerwood': ['deerwood', 'doorweed'], - 'defat': ['defat', 'fated'], - 'defaulter': ['defaulter', 'redefault'], - 'defeater': ['defeater', 'federate', 'redefeat'], - 'defensor': ['defensor', 'foresend'], - 'defer': ['defer', 'freed'], - 'defial': ['afield', 'defial'], - 'defiber': ['debrief', 'defiber', 'fibered'], - 'defile': ['defile', 'fidele'], - 'defiled': ['defiled', 'fielded'], - 'defiler': ['defiler', 'fielder'], - 'definable': ['beanfield', 'definable'], - 'define': ['define', 'infeed'], - 'definer': ['definer', 'refined'], - 'deflect': ['clefted', 'deflect'], - 'deflesh': ['deflesh', 'fleshed'], - 'deflex': ['deflex', 'flexed'], - 'deflower': ['deflower', 'flowered'], - 'defluent': ['defluent', 'unfelted'], - 'defog': ['defog', 'fodge'], - 'deforciant': ['deforciant', 'fornicated'], - 'deforest': ['deforest', 'forested'], - 'deform': ['deform', 'formed'], - 'deformer': ['deformer', 'reformed'], - 'defray': ['defray', 'frayed'], - 'defrost': ['defrost', 'frosted'], - 'deg': ['deg', 'ged'], - 'degarnish': ['degarnish', 'garnished'], - 'degasser': ['degasser', 'dressage'], - 'degelation': ['degelation', 'delegation'], - 'degrain': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'], - 'degu': ['degu', 'gude'], - 'dehair': ['dehair', 'haired'], - 'dehairer': ['deerhair', 'dehairer'], - 'dehorn': ['dehorn', 'horned'], - 'dehorner': ['deerhorn', 'dehorner'], - 'dehors': ['dehors', 'rhodes', 'shoder', 'shored'], - 'dehortation': ['dehortation', 'theriodonta'], - 'dehusk': ['dehusk', 'husked'], - 'deicer': ['ceride', 'deicer'], - 'deictical': ['deictical', 'dialectic'], - 'deification': ['deification', 'edification'], - 'deificatory': ['deificatory', 'edificatory'], - 'deifier': ['deifier', 'edifier'], - 'deify': ['deify', 'edify'], - 'deign': ['deign', 'dinge', 'nidge'], - 'deino': ['deino', 'dione', 'edoni'], - 'deinocephalia': ['deinocephalia', 'palaeechinoid'], - 'deinos': ['deinos', 'donsie', 'inodes', 'onside'], - 'deipara': ['deipara', 'paridae'], - 'deirdre': ['deirdre', 'derider', 'derride', 'ridered'], - 'deism': ['deism', 'disme'], - 'deist': ['deist', 'steid'], - 'deistic': ['deistic', 'dietics'], - 'deistically': ['deistically', 'dialystelic'], - 'deity': ['deity', 'tydie'], - 'deityship': ['deityship', 'diphysite'], - 'del': ['del', 'eld', 'led'], - 'delaine': ['adeline', 'daniele', 'delaine'], - 'delaminate': ['antemedial', 'delaminate'], - 'delapse': ['delapse', 'sepaled'], - 'delate': ['delate', 'elated'], - 'delater': ['delater', 'related', 'treadle'], - 'delator': ['delator', 'leotard'], - 'delawn': ['delawn', 'lawned', 'wandle'], - 'delay': ['delay', 'leady'], - 'delayer': ['delayer', 'layered', 'redelay'], - 'delayful': ['delayful', 'feudally'], - 'dele': ['dele', 'lede', 'leed'], - 'delead': ['delead', 'leaded'], - 'delegation': ['degelation', 'delegation'], - 'delegatory': ['delegatory', 'derogately'], - 'delete': ['delete', 'teedle'], - 'delf': ['delf', 'fled'], - 'delhi': ['delhi', 'hield'], - 'delia': ['adiel', 'delia', 'ideal'], - 'delian': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'], - 'delible': ['bellied', 'delible'], - 'delicateness': ['delicateness', 'delicatessen'], - 'delicatessen': ['delicateness', 'delicatessen'], - 'delichon': ['chelidon', 'chelonid', 'delichon'], - 'delict': ['delict', 'deltic'], - 'deligation': ['deligation', 'gadolinite', 'gelatinoid'], - 'delignate': ['delignate', 'gelatined'], - 'delimit': ['delimit', 'limited'], - 'delimitation': ['delimitation', 'mniotiltidae'], - 'delineator': ['delineator', 'rondeletia'], - 'delint': ['delint', 'dentil'], - 'delirament': ['delirament', 'derailment'], - 'deliriant': ['deliriant', 'draintile', 'interlaid'], - 'deliver': ['deliver', 'deviler', 'livered'], - 'deliverer': ['deliverer', 'redeliver'], - 'della': ['dalle', 'della', 'ladle'], - 'deloul': ['deloul', 'duello'], - 'delphinius': ['delphinius', 'sulphinide'], - 'delta': ['adlet', 'dealt', 'delta', 'lated', 'taled'], - 'deltaic': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'], - 'deltic': ['delict', 'deltic'], - 'deluding': ['deluding', 'ungilded'], - 'delusion': ['delusion', 'unsoiled'], - 'delusionist': ['delusionist', 'indissolute'], - 'deluster': ['deluster', 'ulstered'], - 'demal': ['demal', 'medal'], - 'demand': ['damned', 'demand', 'madden'], - 'demander': ['demander', 'redemand'], - 'demanding': ['demanding', 'maddening'], - 'demandingly': ['demandingly', 'maddeningly'], - 'demantoid': ['demantoid', 'dominated'], - 'demarcate': ['camerated', 'demarcate'], - 'demarcation': ['demarcation', 'democratian'], - 'demark': ['demark', 'marked'], - 'demast': ['demast', 'masted'], - 'deme': ['deem', 'deme', 'mede', 'meed'], - 'demean': ['amende', 'demean', 'meaned', 'nadeem'], - 'demeanor': ['demeanor', 'enamored'], - 'dementia': ['dementia', 'mendaite'], - 'demerit': ['demerit', 'dimeter', 'merited', 'mitered'], - 'demerol': ['demerol', 'modeler', 'remodel'], - 'demetrian': ['demetrian', 'dermatine', 'meandrite', 'minareted'], - 'demi': ['demi', 'diem', 'dime', 'mide'], - 'demibrute': ['bermudite', 'demibrute'], - 'demicannon': ['cinnamoned', 'demicannon'], - 'demicanon': ['demicanon', 'dominance'], - 'demidog': ['demidog', 'demigod'], - 'demigod': ['demidog', 'demigod'], - 'demiluster': ['demiluster', 'demilustre'], - 'demilustre': ['demiluster', 'demilustre'], - 'demiparallel': ['demiparallel', 'imparalleled'], - 'demipronation': ['demipronation', 'preadmonition', 'predomination'], - 'demiracle': ['declaimer', 'demiracle'], - 'demiram': ['demiram', 'mermaid'], - 'demirep': ['demirep', 'epiderm', 'impeder', 'remiped'], - 'demirobe': ['demirobe', 'embodier'], - 'demisable': ['beadleism', 'demisable'], - 'demise': ['demise', 'diseme'], - 'demit': ['demit', 'timed'], - 'demiturned': ['demiturned', 'undertimed'], - 'demob': ['demob', 'mobed'], - 'democratian': ['demarcation', 'democratian'], - 'demolisher': ['demolisher', 'redemolish'], - 'demoniac': ['codamine', 'comedian', 'daemonic', 'demoniac'], - 'demoniacism': ['demoniacism', 'seminomadic'], - 'demonial': ['demonial', 'melanoid'], - 'demoniast': ['ademonist', 'demoniast', 'staminode'], - 'demonish': ['demonish', 'hedonism'], - 'demonism': ['demonism', 'medimnos', 'misnomed'], - 'demotics': ['comedist', 'demotics', 'docetism', 'domestic'], - 'demotion': ['demotion', 'entomoid', 'moontide'], - 'demount': ['demount', 'mounted'], - 'demurrer': ['demurrer', 'murderer'], - 'demurring': ['demurring', 'murdering'], - 'demurringly': ['demurringly', 'murderingly'], - 'demy': ['demy', 'emyd'], - 'den': ['den', 'end', 'ned'], - 'denarius': ['denarius', 'desaurin', 'unraised'], - 'denaro': ['denaro', 'orenda'], - 'denary': ['denary', 'yander'], - 'denat': ['denat', 'entad'], - 'denature': ['denature', 'undereat'], - 'denda': ['dedan', 'denda'], - 'dendral': ['dandler', 'dendral'], - 'dendrite': ['dendrite', 'tindered'], - 'dendrites': ['dendrites', 'distender', 'redistend'], - 'dene': ['dene', 'eden', 'need'], - 'deneb': ['beden', 'deben', 'deneb'], - 'dengue': ['dengue', 'unedge'], - 'denial': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'], - 'denier': ['denier', 'nereid'], - 'denierer': ['denierer', 'reindeer'], - 'denigrate': ['argentide', 'denigrate', 'dinergate'], - 'denim': ['denim', 'mendi'], - 'denis': ['denis', 'snide'], - 'denominate': ['denominate', 'emendation'], - 'denotable': ['denotable', 'detonable'], - 'denotation': ['denotation', 'detonation'], - 'denotative': ['denotative', 'detonative'], - 'denotive': ['denotive', 'devonite'], - 'denouncer': ['denouncer', 'unencored'], - 'dense': ['dense', 'needs'], - 'denshare': ['denshare', 'seerhand'], - 'denshire': ['denshire', 'drisheen'], - 'density': ['density', 'destiny'], - 'dent': ['dent', 'tend'], - 'dental': ['dental', 'tandle'], - 'dentale': ['dalteen', 'dentale', 'edental'], - 'dentalism': ['dentalism', 'dismantle'], - 'dentaria': ['anteriad', 'atridean', 'dentaria'], - 'dentatoserrate': ['dentatoserrate', 'serratodentate'], - 'dentatosinuate': ['dentatosinuate', 'sinuatodentate'], - 'denter': ['denter', 'rented', 'tender'], - 'dentex': ['dentex', 'extend'], - 'denticle': ['cliented', 'denticle'], - 'denticular': ['denticular', 'unarticled'], - 'dentil': ['delint', 'dentil'], - 'dentilingual': ['dentilingual', 'indulgential', 'linguidental'], - 'dentin': ['dentin', 'indent', 'intend', 'tinned'], - 'dentinal': ['dentinal', 'teinland', 'tendinal'], - 'dentine': ['dentine', 'nineted'], - 'dentinitis': ['dentinitis', 'tendinitis'], - 'dentinoma': ['dentinoma', 'nominated'], - 'dentist': ['dentist', 'distent', 'stinted'], - 'dentolabial': ['dentolabial', 'labiodental'], - 'dentolingual': ['dentolingual', 'linguodental'], - 'denture': ['denture', 'untreed'], - 'denudative': ['denudative', 'undeviated'], - 'denude': ['denude', 'dudeen'], - 'denumeral': ['denumeral', 'undermeal', 'unrealmed'], - 'denunciator': ['denunciator', 'underaction'], - 'deny': ['deny', 'dyne'], - 'deoppilant': ['deoppilant', 'pentaploid'], - 'deota': ['deota', 'todea'], - 'depa': ['depa', 'peda'], - 'depaint': ['depaint', 'inadept', 'painted', 'patined'], - 'depart': ['depart', 'parted', 'petard'], - 'departition': ['departition', 'partitioned', 'trepidation'], - 'departure': ['apertured', 'departure'], - 'depas': ['depas', 'sepad', 'spade'], - 'depencil': ['depencil', 'penciled', 'pendicle'], - 'depender': ['depender', 'redepend'], - 'depetticoat': ['depetticoat', 'petticoated'], - 'depicter': ['decrepit', 'depicter', 'precited'], - 'depiction': ['depiction', 'pectinoid'], - 'depilate': ['depilate', 'leptidae', 'pileated'], - 'depletion': ['depletion', 'diplotene'], - 'deploration': ['deploration', 'periodontal'], - 'deploy': ['deploy', 'podley'], - 'depoh': ['depoh', 'ephod', 'hoped'], - 'depolish': ['depolish', 'polished'], - 'deport': ['deport', 'ported', 'redtop'], - 'deportation': ['antitorpedo', 'deportation'], - 'deposal': ['adelops', 'deposal'], - 'deposer': ['deposer', 'reposed'], - 'deposit': ['deposit', 'topside'], - 'deposition': ['deposition', 'positioned'], - 'depositional': ['depositional', 'despoliation'], - 'depositure': ['depositure', 'pterideous'], - 'deprave': ['deprave', 'pervade'], - 'depraver': ['depraver', 'pervader'], - 'depravingly': ['depravingly', 'pervadingly'], - 'deprecable': ['deprecable', 'precedable'], - 'deprecation': ['capernoited', 'deprecation'], - 'depreciation': ['depreciation', 'predeication'], - 'depressant': ['depressant', 'partedness'], - 'deprint': ['deprint', 'printed'], - 'deprival': ['deprival', 'prevalid'], - 'deprivate': ['deprivate', 'predative'], - 'deprive': ['deprive', 'previde'], - 'depriver': ['depriver', 'predrive'], - 'depurant': ['depurant', 'unparted'], - 'depuration': ['depuration', 'portunidae'], - 'deraign': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'], - 'derail': ['ariled', 'derail', 'dialer'], - 'derailment': ['delirament', 'derailment'], - 'derange': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'], - 'deranged': ['deranged', 'gardened'], - 'deranger': ['deranger', 'gardener'], - 'derat': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'derate': ['derate', 'redate'], - 'derater': ['derater', 'retrade', 'retread', 'treader'], - 'deray': ['deary', 'deray', 'rayed', 'ready', 'yeard'], - 'dere': ['deer', 'dere', 'dree', 'rede', 'reed'], - 'deregister': ['deregister', 'registered'], - 'derelict': ['derelict', 'relicted'], - 'deric': ['cider', 'cried', 'deric', 'dicer'], - 'derider': ['deirdre', 'derider', 'derride', 'ridered'], - 'deringa': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'], - 'derision': ['derision', 'ironside', 'resinoid', 'sirenoid'], - 'derivation': ['derivation', 'ordinative'], - 'derivational': ['derivational', 'revalidation'], - 'derive': ['derive', 'redive'], - 'deriver': ['deriver', 'redrive', 'rivered'], - 'derma': ['armed', 'derma', 'dream', 'ramed'], - 'dermad': ['dermad', 'madder'], - 'dermal': ['dermal', 'marled', 'medlar'], - 'dermatic': ['dermatic', 'timecard'], - 'dermatine': ['demetrian', 'dermatine', 'meandrite', 'minareted'], - 'dermatoneurosis': ['dermatoneurosis', 'neurodermatosis'], - 'dermatophone': ['dermatophone', 'herpetomonad'], - 'dermoblast': ['blastoderm', 'dermoblast'], - 'dermol': ['dermol', 'molder', 'remold'], - 'dermosclerite': ['dermosclerite', 'sclerodermite'], - 'dern': ['dern', 'rend'], - 'derogately': ['delegatory', 'derogately'], - 'derogation': ['derogation', 'trogonidae'], - 'derout': ['derout', 'detour', 'douter'], - 'derride': ['deirdre', 'derider', 'derride', 'ridered'], - 'derries': ['derries', 'desirer', 'resider', 'serried'], - 'derringer': ['derringer', 'regrinder'], - 'derry': ['derry', 'redry', 'ryder'], - 'derust': ['derust', 'duster'], - 'desalt': ['desalt', 'salted'], - 'desand': ['desand', 'sadden', 'sanded'], - 'desaurin': ['denarius', 'desaurin', 'unraised'], - 'descendant': ['adscendent', 'descendant'], - 'descender': ['descender', 'redescend'], - 'descent': ['descent', 'scented'], - 'description': ['description', 'discerption'], - 'desecrate': ['decastere', 'desecrate'], - 'desecration': ['considerate', 'desecration'], - 'deseed': ['deseed', 'seeded'], - 'desertic': ['creedist', 'desertic', 'discreet', 'discrete'], - 'desertion': ['desertion', 'detersion'], - 'deserver': ['deserver', 'reserved', 'reversed'], - 'desex': ['desex', 'sexed'], - 'deshabille': ['deshabille', 'shieldable'], - 'desi': ['desi', 'ides', 'seid', 'side'], - 'desiccation': ['desiccation', 'discoactine'], - 'desight': ['desight', 'sighted'], - 'design': ['design', 'singed'], - 'designer': ['designer', 'redesign', 'resigned'], - 'desilver': ['desilver', 'silvered'], - 'desirable': ['desirable', 'redisable'], - 'desire': ['desire', 'reside'], - 'desirer': ['derries', 'desirer', 'resider', 'serried'], - 'desirous': ['desirous', 'siderous'], - 'desition': ['desition', 'sedition'], - 'desma': ['desma', 'mesad'], - 'desman': ['amends', 'desman'], - 'desmopathy': ['desmopathy', 'phymatodes'], - 'desorption': ['desorption', 'priodontes'], - 'despair': ['despair', 'pardesi'], - 'despairing': ['despairing', 'spinigrade'], - 'desperation': ['desperation', 'esperantido'], - 'despise': ['despise', 'pedesis'], - 'despiser': ['despiser', 'disperse'], - 'despoil': ['despoil', 'soliped', 'spoiled'], - 'despoiler': ['despoiler', 'leprosied'], - 'despoliation': ['depositional', 'despoliation'], - 'despot': ['despot', 'posted'], - 'despotat': ['despotat', 'postdate'], - 'dessert': ['dessert', 'tressed'], - 'destain': ['destain', 'instead', 'sainted', 'satined'], - 'destine': ['destine', 'edestin'], - 'destinism': ['destinism', 'timidness'], - 'destiny': ['density', 'destiny'], - 'desugar': ['desugar', 'sugared'], - 'detail': ['detail', 'dietal', 'dilate', 'edital', 'tailed'], - 'detailer': ['detailer', 'elaterid'], - 'detain': ['danite', 'detain'], - 'detainal': ['danalite', 'detainal'], - 'detar': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'detassel': ['dateless', 'detassel'], - 'detax': ['detax', 'taxed'], - 'detecter': ['detecter', 'redetect'], - 'detent': ['detent', 'netted', 'tented'], - 'deter': ['deter', 'treed'], - 'determinant': ['determinant', 'detrainment'], - 'detersion': ['desertion', 'detersion'], - 'detest': ['detest', 'tested'], - 'dethrone': ['dethrone', 'threnode'], - 'detin': ['detin', 'teind', 'tined'], - 'detinet': ['detinet', 'dinette'], - 'detonable': ['denotable', 'detonable'], - 'detonation': ['denotation', 'detonation'], - 'detonative': ['denotative', 'detonative'], - 'detonator': ['detonator', 'tetraodon'], - 'detour': ['derout', 'detour', 'douter'], - 'detracter': ['detracter', 'retracted'], - 'detraction': ['detraction', 'doctrinate', 'tetarconid'], - 'detrain': ['antired', 'detrain', 'randite', 'trained'], - 'detrainment': ['determinant', 'detrainment'], - 'detrusion': ['detrusion', 'tinderous', 'unstoried'], - 'detrusive': ['detrusive', 'divesture', 'servitude'], - 'deuce': ['deuce', 'educe'], - 'deuced': ['deduce', 'deuced'], - 'deul': ['deul', 'duel', 'leud'], - 'deva': ['dave', 'deva', 'vade', 'veda'], - 'devance': ['devance', 'vendace'], - 'develin': ['develin', 'endevil'], - 'developer': ['developer', 'redevelop'], - 'devil': ['devil', 'divel', 'lived'], - 'deviler': ['deliver', 'deviler', 'livered'], - 'devisceration': ['considerative', 'devisceration'], - 'deviser': ['deviser', 'diverse', 'revised'], - 'devitrify': ['devitrify', 'fervidity'], - 'devoid': ['devoid', 'voided'], - 'devoir': ['devoir', 'voider'], - 'devonite': ['denotive', 'devonite'], - 'devourer': ['devourer', 'overdure', 'overrude'], - 'devow': ['devow', 'vowed'], - 'dew': ['dew', 'wed'], - 'dewan': ['awned', 'dewan', 'waned'], - 'dewater': ['dewater', 'tarweed', 'watered'], - 'dewer': ['dewer', 'ewder', 'rewed'], - 'dewey': ['dewey', 'weedy'], - 'dewily': ['dewily', 'widely', 'wieldy'], - 'dewiness': ['dewiness', 'wideness'], - 'dewool': ['dewool', 'elwood', 'wooled'], - 'deworm': ['deworm', 'wormed'], - 'dewy': ['dewy', 'wyde'], - 'dextraural': ['dextraural', 'extradural'], - 'dextrosinistral': ['dextrosinistral', 'sinistrodextral'], - 'dey': ['dey', 'dye', 'yed'], - 'deyhouse': ['deyhouse', 'dyehouse'], - 'deyship': ['deyship', 'diphyes'], - 'dezinc': ['dezinc', 'zendic'], - 'dha': ['dah', 'dha', 'had'], - 'dhamnoo': ['dhamnoo', 'hoodman', 'manhood'], - 'dhan': ['dhan', 'hand'], - 'dharna': ['andhra', 'dharna'], - 'dheri': ['dheri', 'hider', 'hired'], - 'dhobi': ['bodhi', 'dhobi'], - 'dhoon': ['dhoon', 'hondo'], - 'dhu': ['dhu', 'hud'], - 'di': ['di', 'id'], - 'diabolist': ['diabolist', 'idioblast'], - 'diacetin': ['diacetin', 'indicate'], - 'diacetine': ['deciatine', 'diacetine', 'taenicide', 'teniacide'], - 'diacetyl': ['diacetyl', 'lyctidae'], - 'diachoretic': ['citharoedic', 'diachoretic'], - 'diaclase': ['diaclase', 'sidalcea'], - 'diaconal': ['cladonia', 'condalia', 'diaconal'], - 'diact': ['diact', 'dicta'], - 'diadem': ['diadem', 'mediad'], - 'diaderm': ['admired', 'diaderm'], - 'diaeretic': ['diaeretic', 'icteridae'], - 'diagenetic': ['diagenetic', 'digenetica'], - 'diageotropism': ['diageotropism', 'geodiatropism'], - 'diagonal': ['diagonal', 'ganoidal', 'gonadial'], - 'dial': ['dail', 'dali', 'dial', 'laid', 'lida'], - 'dialect': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'], - 'dialectic': ['deictical', 'dialectic'], - 'dialector': ['dialector', 'lacertoid'], - 'dialer': ['ariled', 'derail', 'dialer'], - 'dialin': ['anilid', 'dialin', 'dianil', 'inlaid'], - 'dialing': ['dialing', 'gliadin'], - 'dialister': ['dialister', 'trailside'], - 'diallelon': ['diallelon', 'llandeilo'], - 'dialogism': ['dialogism', 'sigmoidal'], - 'dialystelic': ['deistically', 'dialystelic'], - 'dialytic': ['calidity', 'dialytic'], - 'diamagnet': ['agminated', 'diamagnet'], - 'diamantine': ['diamantine', 'inanimated'], - 'diameter': ['diameter', 'diatreme'], - 'diametric': ['citramide', 'diametric', 'matricide'], - 'diamide': ['amidide', 'diamide', 'mididae'], - 'diamine': ['amidine', 'diamine'], - 'diamorphine': ['diamorphine', 'phronimidae'], - 'dian': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'], - 'diana': ['danai', 'diana', 'naiad'], - 'diander': ['diander', 'drained'], - 'diane': ['diane', 'idean'], - 'dianetics': ['andesitic', 'dianetics'], - 'dianil': ['anilid', 'dialin', 'dianil', 'inlaid'], - 'diapensia': ['diapensia', 'diaspinae'], - 'diaper': ['diaper', 'paired'], - 'diaphote': ['diaphote', 'hepatoid'], - 'diaphtherin': ['diaphtherin', 'diphtherian'], - 'diapnoic': ['diapnoic', 'pinacoid'], - 'diapnotic': ['antipodic', 'diapnotic'], - 'diaporthe': ['aphrodite', 'atrophied', 'diaporthe'], - 'diarch': ['chidra', 'diarch'], - 'diarchial': ['diarchial', 'rachidial'], - 'diarchy': ['diarchy', 'hyracid'], - 'diarian': ['aridian', 'diarian'], - 'diary': ['dairy', 'diary', 'yaird'], - 'diascia': ['ascidia', 'diascia'], - 'diascope': ['diascope', 'psocidae', 'scopidae'], - 'diaspinae': ['diapensia', 'diaspinae'], - 'diastem': ['diastem', 'misdate'], - 'diastema': ['adamsite', 'diastema'], - 'diaster': ['astride', 'diaster', 'disrate', 'restiad', 'staired'], - 'diastole': ['diastole', 'isolated', 'sodalite', 'solidate'], - 'diastrophic': ['aphrodistic', 'diastrophic'], - 'diastrophy': ['diastrophy', 'dystrophia'], - 'diatomales': ['diatomales', 'mastoidale', 'mastoideal'], - 'diatomean': ['diatomean', 'mantoidea'], - 'diatomin': ['diatomin', 'domitian'], - 'diatonic': ['actinoid', 'diatonic', 'naticoid'], - 'diatreme': ['diameter', 'diatreme'], - 'diatropism': ['diatropism', 'prismatoid'], - 'dib': ['bid', 'dib'], - 'dibatis': ['dabitis', 'dibatis'], - 'dibber': ['dibber', 'ribbed'], - 'dibbler': ['dibbler', 'dribble'], - 'dibrom': ['dibrom', 'morbid'], - 'dicaryon': ['cynaroid', 'dicaryon'], - 'dicast': ['dicast', 'stadic'], - 'dice': ['dice', 'iced'], - 'dicentra': ['crinated', 'dicentra'], - 'dicer': ['cider', 'cried', 'deric', 'dicer'], - 'diceras': ['diceras', 'radices', 'sidecar'], - 'dich': ['chid', 'dich'], - 'dichroite': ['dichroite', 'erichtoid', 'theriodic'], - 'dichromat': ['chromatid', 'dichromat'], - 'dichter': ['dichter', 'ditcher'], - 'dicolic': ['codicil', 'dicolic'], - 'dicolon': ['dicolon', 'dolcino'], - 'dicoumarin': ['acridonium', 'dicoumarin'], - 'dicta': ['diact', 'dicta'], - 'dictaphone': ['dictaphone', 'endopathic'], - 'dictational': ['antidotical', 'dictational'], - 'dictionary': ['dictionary', 'indicatory'], - 'dicyanine': ['cyanidine', 'dicyanine'], - 'dicycle': ['cyclide', 'decylic', 'dicycle'], - 'dicyema': ['dicyema', 'mediacy'], - 'diddle': ['diddle', 'lidded'], - 'diddler': ['diddler', 'driddle'], - 'didym': ['didym', 'middy'], - 'die': ['die', 'ide'], - 'dieb': ['beid', 'bide', 'debi', 'dieb'], - 'diego': ['diego', 'dogie', 'geoid'], - 'dielytra': ['dielytra', 'tileyard'], - 'diem': ['demi', 'diem', 'dime', 'mide'], - 'dier': ['dier', 'dire', 'reid', 'ride'], - 'diesel': ['diesel', 'sedile', 'seidel'], - 'diet': ['diet', 'dite', 'edit', 'tide', 'tied'], - 'dietal': ['detail', 'dietal', 'dilate', 'edital', 'tailed'], - 'dieter': ['dieter', 'tiered'], - 'dietic': ['citied', 'dietic'], - 'dietics': ['deistic', 'dietics'], - 'dig': ['dig', 'gid'], - 'digenetica': ['diagenetic', 'digenetica'], - 'digeny': ['digeny', 'dyeing'], - 'digester': ['digester', 'redigest'], - 'digitalein': ['digitalein', 'diligentia'], - 'digitation': ['digitation', 'goniatitid'], - 'digitonin': ['digitonin', 'indigotin'], - 'digredient': ['digredient', 'reddingite'], - 'dihalo': ['dihalo', 'haloid'], - 'diiambus': ['basidium', 'diiambus'], - 'dika': ['dika', 'kaid'], - 'dikaryon': ['ankyroid', 'dikaryon'], - 'dike': ['dike', 'keid'], - 'dilacerate': ['dilacerate', 'lacertidae'], - 'dilatant': ['atlantid', 'dilatant'], - 'dilate': ['detail', 'dietal', 'dilate', 'edital', 'tailed'], - 'dilater': ['dilater', 'lardite', 'redtail'], - 'dilatometric': ['calotermitid', 'dilatometric'], - 'dilator': ['dilator', 'ortalid'], - 'dilatory': ['adroitly', 'dilatory', 'idolatry'], - 'diligence': ['ceilinged', 'diligence'], - 'diligentia': ['digitalein', 'diligentia'], - 'dillue': ['dillue', 'illude'], - 'dilluer': ['dilluer', 'illuder'], - 'dilo': ['dilo', 'diol', 'doli', 'idol', 'olid'], - 'diluent': ['diluent', 'untiled'], - 'dilute': ['dilute', 'dultie'], - 'diluted': ['diluted', 'luddite'], - 'dilutent': ['dilutent', 'untilted', 'untitled'], - 'diluvian': ['diluvian', 'induvial'], - 'dim': ['dim', 'mid'], - 'dimatis': ['amidist', 'dimatis'], - 'dimble': ['dimble', 'limbed'], - 'dime': ['demi', 'diem', 'dime', 'mide'], - 'dimer': ['dimer', 'mider'], - 'dimera': ['admire', 'armied', 'damier', 'dimera', 'merida'], - 'dimeran': ['adermin', 'amerind', 'dimeran'], - 'dimerous': ['dimerous', 'soredium'], - 'dimeter': ['demerit', 'dimeter', 'merited', 'mitered'], - 'dimetria': ['dimetria', 'mitridae', 'tiremaid', 'triamide'], - 'diminisher': ['diminisher', 'rediminish'], - 'dimit': ['dimit', 'timid'], - 'dimmer': ['dimmer', 'immerd', 'rimmed'], - 'dimna': ['dimna', 'manid'], - 'dimyarian': ['dimyarian', 'myrianida'], - 'din': ['din', 'ind', 'nid'], - 'dinah': ['ahind', 'dinah'], - 'dinar': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'], - 'dinder': ['dinder', 'ridden', 'rinded'], - 'dindle': ['dindle', 'niddle'], - 'dine': ['dine', 'enid', 'inde', 'nide'], - 'diner': ['diner', 'riden', 'rinde'], - 'dinergate': ['argentide', 'denigrate', 'dinergate'], - 'dinero': ['dinero', 'dorine'], - 'dinette': ['detinet', 'dinette'], - 'dineuric': ['dineuric', 'eurindic'], - 'dingar': ['daring', 'dingar', 'gradin'], - 'dinge': ['deign', 'dinge', 'nidge'], - 'dingle': ['dingle', 'elding', 'engild', 'gilden'], - 'dingo': ['dingo', 'doing', 'gondi', 'gonid'], - 'dingwall': ['dingwall', 'windgall'], - 'dingy': ['dingy', 'dying'], - 'dinheiro': ['dinheiro', 'hernioid'], - 'dinic': ['dinic', 'indic'], - 'dining': ['dining', 'indign', 'niding'], - 'dink': ['dink', 'kind'], - 'dinkey': ['dinkey', 'kidney'], - 'dinocerata': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'], - 'dinoceratan': ['carnationed', 'dinoceratan'], - 'dinomic': ['dinomic', 'dominic'], - 'dint': ['dint', 'tind'], - 'dinus': ['dinus', 'indus', 'nidus'], - 'dioeciopolygamous': ['dioeciopolygamous', 'polygamodioecious'], - 'diogenite': ['diogenite', 'gideonite'], - 'diol': ['dilo', 'diol', 'doli', 'idol', 'olid'], - 'dion': ['dion', 'nodi', 'odin'], - 'dione': ['deino', 'dione', 'edoni'], - 'diopter': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'], - 'dioptra': ['dioptra', 'parotid'], - 'dioptral': ['dioptral', 'tripodal'], - 'dioptric': ['dioptric', 'tripodic'], - 'dioptrical': ['dioptrical', 'tripodical'], - 'dioptry': ['dioptry', 'tripody'], - 'diorama': ['amaroid', 'diorama'], - 'dioramic': ['dioramic', 'dromicia'], - 'dioscorein': ['dioscorein', 'dioscorine'], - 'dioscorine': ['dioscorein', 'dioscorine'], - 'dioscuri': ['dioscuri', 'sciuroid'], - 'diose': ['diose', 'idose', 'oside'], - 'diosmin': ['diosmin', 'odinism'], - 'diosmotic': ['diosmotic', 'sodomitic'], - 'diparentum': ['diparentum', 'unimparted'], - 'dipetto': ['dipetto', 'diptote'], - 'diphase': ['aphides', 'diphase'], - 'diphaser': ['diphaser', 'parished', 'raphides', 'sephardi'], - 'diphosphate': ['diphosphate', 'phosphatide'], - 'diphtherian': ['diaphtherin', 'diphtherian'], - 'diphyes': ['deyship', 'diphyes'], - 'diphysite': ['deityship', 'diphysite'], - 'dipicrate': ['dipicrate', 'patricide', 'pediatric'], - 'diplanar': ['diplanar', 'prandial'], - 'diplasion': ['aspidinol', 'diplasion'], - 'dipleura': ['dipleura', 'epidural'], - 'dipleural': ['dipleural', 'preludial'], - 'diplocephalus': ['diplocephalus', 'pseudophallic'], - 'diploe': ['diploe', 'dipole'], - 'diploetic': ['diploetic', 'lepidotic'], - 'diplotene': ['depletion', 'diplotene'], - 'dipnoan': ['dipnoan', 'nonpaid', 'pandion'], - 'dipolar': ['dipolar', 'polarid'], - 'dipole': ['diploe', 'dipole'], - 'dipsaceous': ['dipsaceous', 'spadiceous'], - 'dipter': ['dipter', 'trepid'], - 'dipteraceous': ['dipteraceous', 'epiceratodus'], - 'dipteral': ['dipteral', 'tripedal'], - 'dipterological': ['dipterological', 'pteridological'], - 'dipterologist': ['dipterologist', 'pteridologist'], - 'dipterology': ['dipterology', 'pteridology'], - 'dipteros': ['dipteros', 'portside'], - 'diptote': ['dipetto', 'diptote'], - 'dirca': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'], - 'dircaean': ['caridean', 'dircaean', 'radiance'], - 'dire': ['dier', 'dire', 'reid', 'ride'], - 'direct': ['credit', 'direct'], - 'directable': ['creditable', 'directable'], - 'directer': ['cedriret', 'directer', 'recredit', 'redirect'], - 'direction': ['cretinoid', 'direction'], - 'directional': ['clitoridean', 'directional'], - 'directive': ['creditive', 'directive'], - 'directly': ['directly', 'tridecyl'], - 'directoire': ['cordierite', 'directoire'], - 'director': ['creditor', 'director'], - 'directorship': ['creditorship', 'directorship'], - 'directress': ['creditress', 'directress'], - 'directrix': ['creditrix', 'directrix'], - 'direly': ['direly', 'idyler'], - 'direption': ['direption', 'perdition', 'tropidine'], - 'dirge': ['dirge', 'gride', 'redig', 'ridge'], - 'dirgelike': ['dirgelike', 'ridgelike'], - 'dirgeman': ['dirgeman', 'margined', 'midrange'], - 'dirgler': ['dirgler', 'girdler'], - 'dirten': ['dirten', 'rident', 'tinder'], - 'dis': ['dis', 'sid'], - 'disa': ['dais', 'dasi', 'disa', 'said', 'sida'], - 'disadventure': ['disadventure', 'unadvertised'], - 'disappearer': ['disappearer', 'redisappear'], - 'disarmed': ['disarmed', 'misdread'], - 'disastimeter': ['disastimeter', 'semistriated'], - 'disattire': ['disattire', 'distraite'], - 'disbud': ['disbud', 'disdub'], - 'disburse': ['disburse', 'subsider'], - 'discastle': ['clidastes', 'discastle'], - 'discern': ['discern', 'rescind'], - 'discerner': ['discerner', 'rescinder'], - 'discernment': ['discernment', 'rescindment'], - 'discerp': ['crisped', 'discerp'], - 'discerption': ['description', 'discerption'], - 'disclike': ['disclike', 'sicklied'], - 'discoactine': ['desiccation', 'discoactine'], - 'discoid': ['discoid', 'disodic'], - 'discontinuer': ['discontinuer', 'undiscretion'], - 'discounter': ['discounter', 'rediscount'], - 'discoverer': ['discoverer', 'rediscover'], - 'discreate': ['discreate', 'sericated'], - 'discreet': ['creedist', 'desertic', 'discreet', 'discrete'], - 'discreetly': ['discreetly', 'discretely'], - 'discreetness': ['discreetness', 'discreteness'], - 'discrepate': ['discrepate', 'pederastic'], - 'discrete': ['creedist', 'desertic', 'discreet', 'discrete'], - 'discretely': ['discreetly', 'discretely'], - 'discreteness': ['discreetness', 'discreteness'], - 'discretion': ['discretion', 'soricident'], - 'discriminator': ['discriminator', 'doctrinairism'], - 'disculpate': ['disculpate', 'spiculated'], - 'discusser': ['discusser', 'rediscuss'], - 'discutable': ['discutable', 'subdeltaic', 'subdialect'], - 'disdub': ['disbud', 'disdub'], - 'disease': ['disease', 'seaside'], - 'diseme': ['demise', 'diseme'], - 'disenact': ['disenact', 'distance'], - 'disendow': ['disendow', 'downside'], - 'disentwine': ['disentwine', 'indentwise'], - 'disharmony': ['disharmony', 'hydramnios'], - 'dishearten': ['dishearten', 'intershade'], - 'dished': ['dished', 'eddish'], - 'disherent': ['disherent', 'hinderest', 'tenderish'], - 'dishling': ['dishling', 'hidlings'], - 'dishonor': ['dishonor', 'ironshod'], - 'dishorn': ['dishorn', 'dronish'], - 'dishpan': ['daphnis', 'dishpan'], - 'disilicate': ['disilicate', 'idealistic'], - 'disimprove': ['disimprove', 'misprovide'], - 'disk': ['disk', 'kids', 'skid'], - 'dislocate': ['dislocate', 'lactoside'], - 'disman': ['danism', 'disman'], - 'dismantle': ['dentalism', 'dismantle'], - 'disme': ['deism', 'disme'], - 'dismemberer': ['dismemberer', 'disremember'], - 'disnature': ['disnature', 'sturnidae', 'truandise'], - 'disnest': ['disnest', 'dissent'], - 'disodic': ['discoid', 'disodic'], - 'disparage': ['disparage', 'grapsidae'], - 'disparation': ['disparation', 'tridiapason'], - 'dispatcher': ['dispatcher', 'redispatch'], - 'dispensable': ['dispensable', 'piebaldness'], - 'dispense': ['dispense', 'piedness'], - 'disperse': ['despiser', 'disperse'], - 'dispetal': ['dispetal', 'pedalist'], - 'dispireme': ['dispireme', 'epidermis'], - 'displayer': ['displayer', 'redisplay'], - 'displeaser': ['displeaser', 'pearlsides'], - 'disponee': ['disponee', 'openside'], - 'disporum': ['disporum', 'misproud'], - 'disprepare': ['disprepare', 'predespair'], - 'disrate': ['astride', 'diaster', 'disrate', 'restiad', 'staired'], - 'disremember': ['dismemberer', 'disremember'], - 'disrepute': ['disrepute', 'redispute'], - 'disrespect': ['disrespect', 'disscepter'], - 'disrupt': ['disrupt', 'prudist'], - 'disscepter': ['disrespect', 'disscepter'], - 'disseat': ['disseat', 'sestiad'], - 'dissector': ['crosstied', 'dissector'], - 'dissent': ['disnest', 'dissent'], - 'dissenter': ['dissenter', 'tiredness'], - 'dissertate': ['dissertate', 'statesider'], - 'disserve': ['disserve', 'dissever'], - 'dissever': ['disserve', 'dissever'], - 'dissocial': ['cissoidal', 'dissocial'], - 'dissolve': ['dissolve', 'voidless'], - 'dissoul': ['dissoul', 'dulosis', 'solidus'], - 'distale': ['distale', 'salited'], - 'distance': ['disenact', 'distance'], - 'distant': ['dantist', 'distant'], - 'distater': ['distater', 'striated'], - 'distender': ['dendrites', 'distender', 'redistend'], - 'distent': ['dentist', 'distent', 'stinted'], - 'distich': ['distich', 'stichid'], - 'distillage': ['distillage', 'sigillated'], - 'distiller': ['distiller', 'redistill'], - 'distinguisher': ['distinguisher', 'redistinguish'], - 'distoma': ['distoma', 'mastoid'], - 'distome': ['distome', 'modiste'], - 'distrainer': ['distrainer', 'redistrain'], - 'distrait': ['distrait', 'triadist'], - 'distraite': ['disattire', 'distraite'], - 'disturber': ['disturber', 'redisturb'], - 'disulphone': ['disulphone', 'unpolished'], - 'disuniform': ['disuniform', 'indusiform'], - 'dit': ['dit', 'tid'], - 'dita': ['adit', 'dita'], - 'dital': ['datil', 'dital', 'tidal', 'tilda'], - 'ditcher': ['dichter', 'ditcher'], - 'dite': ['diet', 'dite', 'edit', 'tide', 'tied'], - 'diter': ['diter', 'tired', 'tried'], - 'dithionic': ['chitinoid', 'dithionic'], - 'ditone': ['ditone', 'intoed'], - 'ditrochean': ['achondrite', 'ditrochean', 'ordanchite'], - 'diuranate': ['diuranate', 'untiaraed'], - 'diurna': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'], - 'diurnation': ['diurnation', 'induration'], - 'diurne': ['diurne', 'inured', 'ruined', 'unride'], - 'diva': ['avid', 'diva'], - 'divan': ['divan', 'viand'], - 'divata': ['divata', 'dvaita'], - 'divel': ['devil', 'divel', 'lived'], - 'diver': ['diver', 'drive'], - 'diverge': ['diverge', 'grieved'], - 'diverse': ['deviser', 'diverse', 'revised'], - 'diverter': ['diverter', 'redivert', 'verditer'], - 'divest': ['divest', 'vedist'], - 'divesture': ['detrusive', 'divesture', 'servitude'], - 'divisionism': ['divisionism', 'misdivision'], - 'divorce': ['cervoid', 'divorce'], - 'divorcee': ['coderive', 'divorcee'], - 'do': ['do', 'od'], - 'doable': ['albedo', 'doable'], - 'doarium': ['doarium', 'uramido'], - 'doat': ['doat', 'toad', 'toda'], - 'doater': ['doater', 'toader'], - 'doating': ['antigod', 'doating'], - 'doatish': ['doatish', 'toadish'], - 'dob': ['bod', 'dob'], - 'dobe': ['bode', 'dobe'], - 'dobra': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'], - 'dobrao': ['dobrao', 'doorba'], - 'doby': ['body', 'boyd', 'doby'], - 'doc': ['cod', 'doc'], - 'docetism': ['comedist', 'demotics', 'docetism', 'domestic'], - 'docile': ['cleoid', 'coiled', 'docile'], - 'docity': ['cytoid', 'docity'], - 'docker': ['corked', 'docker', 'redock'], - 'doctorial': ['crotaloid', 'doctorial'], - 'doctorship': ['doctorship', 'trophodisc'], - 'doctrinairism': ['discriminator', 'doctrinairism'], - 'doctrinate': ['detraction', 'doctrinate', 'tetarconid'], - 'doctrine': ['centroid', 'doctrine'], - 'documental': ['columnated', 'documental'], - 'dod': ['dod', 'odd'], - 'dode': ['dedo', 'dode', 'eddo'], - 'dodecarch': ['decachord', 'dodecarch'], - 'dodlet': ['dodlet', 'toddle'], - 'dodman': ['dodman', 'oddman'], - 'doe': ['doe', 'edo', 'ode'], - 'doeg': ['doeg', 'doge', 'gode'], - 'doer': ['doer', 'redo', 'rode', 'roed'], - 'does': ['does', 'dose'], - 'doesnt': ['doesnt', 'stoned'], - 'dog': ['dog', 'god'], - 'dogate': ['dogate', 'dotage', 'togaed'], - 'dogbane': ['bondage', 'dogbane'], - 'dogbite': ['bigoted', 'dogbite'], - 'doge': ['doeg', 'doge', 'gode'], - 'dogger': ['dogger', 'gorged'], - 'doghead': ['doghead', 'godhead'], - 'doghood': ['doghood', 'godhood'], - 'dogie': ['diego', 'dogie', 'geoid'], - 'dogless': ['dogless', 'glossed', 'godless'], - 'doglike': ['doglike', 'godlike'], - 'dogly': ['dogly', 'godly', 'goldy'], - 'dogra': ['dargo', 'dogra', 'drago'], - 'dogship': ['dogship', 'godship'], - 'dogstone': ['dogstone', 'stegodon'], - 'dogwatch': ['dogwatch', 'watchdog'], - 'doina': ['adion', 'danio', 'doina', 'donia'], - 'doing': ['dingo', 'doing', 'gondi', 'gonid'], - 'doko': ['doko', 'dook'], - 'dol': ['dol', 'lod', 'old'], - 'dola': ['alod', 'dola', 'load', 'odal'], - 'dolcian': ['dolcian', 'nodical'], - 'dolciano': ['conoidal', 'dolciano'], - 'dolcino': ['dicolon', 'dolcino'], - 'dole': ['dole', 'elod', 'lode', 'odel'], - 'dolesman': ['dolesman', 'lodesman'], - 'doless': ['doless', 'dossel'], - 'doli': ['dilo', 'diol', 'doli', 'idol', 'olid'], - 'dolia': ['aloid', 'dolia', 'idola'], - 'dolina': ['dolina', 'ladino'], - 'doline': ['doline', 'indole', 'leonid', 'loined', 'olenid'], - 'dolium': ['dolium', 'idolum'], - 'dolly': ['dolly', 'lloyd'], - 'dolman': ['almond', 'dolman'], - 'dolor': ['dolor', 'drool'], - 'dolose': ['dolose', 'oodles', 'soodle'], - 'dolphin': ['dolphin', 'pinhold'], - 'dolt': ['dolt', 'told'], - 'dom': ['dom', 'mod'], - 'domain': ['amidon', 'daimon', 'domain'], - 'domainal': ['domainal', 'domanial'], - 'domal': ['domal', 'modal'], - 'domanial': ['domainal', 'domanial'], - 'dome': ['dome', 'mode', 'moed'], - 'domer': ['domer', 'drome'], - 'domestic': ['comedist', 'demotics', 'docetism', 'domestic'], - 'domic': ['comid', 'domic'], - 'domical': ['domical', 'lacmoid'], - 'dominance': ['demicanon', 'dominance'], - 'dominate': ['dominate', 'nematoid'], - 'dominated': ['demantoid', 'dominated'], - 'domination': ['admonition', 'domination'], - 'dominative': ['admonitive', 'dominative'], - 'dominator': ['admonitor', 'dominator'], - 'domine': ['domine', 'domnei', 'emodin', 'medino'], - 'dominial': ['dominial', 'imolinda', 'limoniad'], - 'dominic': ['dinomic', 'dominic'], - 'domino': ['domino', 'monoid'], - 'domitian': ['diatomin', 'domitian'], - 'domnei': ['domine', 'domnei', 'emodin', 'medino'], - 'don': ['don', 'nod'], - 'donal': ['donal', 'nodal'], - 'donar': ['adorn', 'donar', 'drona', 'radon'], - 'donated': ['donated', 'nodated'], - 'donatiaceae': ['actaeonidae', 'donatiaceae'], - 'donatism': ['donatism', 'saintdom'], - 'donator': ['donator', 'odorant', 'tornado'], - 'done': ['done', 'node'], - 'donet': ['donet', 'noted', 'toned'], - 'dong': ['dong', 'gond'], - 'donga': ['donga', 'gonad'], - 'dongola': ['dongola', 'gondola'], - 'dongon': ['dongon', 'nongod'], - 'donia': ['adion', 'danio', 'doina', 'donia'], - 'donna': ['donna', 'nonda'], - 'donnert': ['donnert', 'tendron'], - 'donnie': ['donnie', 'indone', 'ondine'], - 'donor': ['donor', 'rondo'], - 'donorship': ['donorship', 'rhodopsin'], - 'donsie': ['deinos', 'donsie', 'inodes', 'onside'], - 'donum': ['donum', 'mound'], - 'doob': ['bodo', 'bood', 'doob'], - 'dook': ['doko', 'dook'], - 'dool': ['dool', 'lood'], - 'dooli': ['dooli', 'iodol'], - 'doom': ['doom', 'mood'], - 'doomer': ['doomer', 'mooder', 'redoom', 'roomed'], - 'dooms': ['dooms', 'sodom'], - 'door': ['door', 'odor', 'oord', 'rood'], - 'doorba': ['dobrao', 'doorba'], - 'doorbell': ['bordello', 'doorbell'], - 'doored': ['doored', 'odored'], - 'doorframe': ['doorframe', 'reformado'], - 'doorless': ['doorless', 'odorless'], - 'doorplate': ['doorplate', 'leptodora'], - 'doorpost': ['doorpost', 'doorstop'], - 'doorstone': ['doorstone', 'roodstone'], - 'doorstop': ['doorpost', 'doorstop'], - 'doorweed': ['deerwood', 'doorweed'], - 'dop': ['dop', 'pod'], - 'dopa': ['apod', 'dopa'], - 'doper': ['doper', 'pedro', 'pored'], - 'dopplerite': ['dopplerite', 'lepidopter'], - 'dor': ['dor', 'rod'], - 'dora': ['dora', 'orad', 'road'], - 'dorab': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'], - 'doree': ['doree', 'erode'], - 'dori': ['dori', 'roid'], - 'doria': ['aroid', 'doria', 'radio'], - 'dorian': ['dorian', 'inroad', 'ordain'], - 'dorical': ['cordial', 'dorical'], - 'dorine': ['dinero', 'dorine'], - 'dorlach': ['chordal', 'dorlach'], - 'dormancy': ['dormancy', 'mordancy'], - 'dormant': ['dormant', 'mordant'], - 'dormer': ['dormer', 'remord'], - 'dormie': ['dormie', 'moider'], - 'dorn': ['dorn', 'rond'], - 'dornic': ['dornic', 'nordic'], - 'dorothea': ['dorothea', 'theodora'], - 'dorp': ['dorp', 'drop', 'prod'], - 'dorsel': ['dorsel', 'seldor', 'solder'], - 'dorsoapical': ['dorsoapical', 'prosodiacal'], - 'dorsocaudal': ['caudodorsal', 'dorsocaudal'], - 'dorsocentral': ['centrodorsal', 'dorsocentral'], - 'dorsocervical': ['cervicodorsal', 'dorsocervical'], - 'dorsolateral': ['dorsolateral', 'laterodorsal'], - 'dorsomedial': ['dorsomedial', 'mediodorsal'], - 'dorsosacral': ['dorsosacral', 'sacrodorsal'], - 'dorsoventrad': ['dorsoventrad', 'ventrodorsad'], - 'dorsoventral': ['dorsoventral', 'ventrodorsal'], - 'dorsoventrally': ['dorsoventrally', 'ventrodorsally'], - 'dos': ['dos', 'ods', 'sod'], - 'dosa': ['dosa', 'sado', 'soda'], - 'dosage': ['dosage', 'seadog'], - 'dose': ['does', 'dose'], - 'doser': ['doser', 'rosed'], - 'dosimetric': ['dosimetric', 'mediocrist'], - 'dossel': ['doless', 'dossel'], - 'dosser': ['dosser', 'sordes'], - 'dot': ['dot', 'tod'], - 'dotage': ['dogate', 'dotage', 'togaed'], - 'dote': ['dote', 'tode', 'toed'], - 'doter': ['doter', 'tored', 'trode'], - 'doty': ['doty', 'tody'], - 'doubler': ['boulder', 'doubler'], - 'doubter': ['doubter', 'obtrude', 'outbred', 'redoubt'], - 'douc': ['douc', 'duco'], - 'douce': ['coude', 'douce'], - 'doum': ['doum', 'moud', 'odum'], - 'doup': ['doup', 'updo'], - 'dour': ['dour', 'duro', 'ordu', 'roud'], - 'dourine': ['dourine', 'neuroid'], - 'dourly': ['dourly', 'lourdy'], - 'douser': ['douser', 'soured'], - 'douter': ['derout', 'detour', 'douter'], - 'dover': ['dover', 'drove', 'vedro'], - 'dow': ['dow', 'owd', 'wod'], - 'dowager': ['dowager', 'wordage'], - 'dower': ['dower', 'rowed'], - 'dowl': ['dowl', 'wold'], - 'dowlas': ['dowlas', 'oswald'], - 'downbear': ['downbear', 'rawboned'], - 'downcome': ['comedown', 'downcome'], - 'downer': ['downer', 'wonder', 'worden'], - 'downingia': ['downingia', 'godwinian'], - 'downset': ['downset', 'setdown'], - 'downside': ['disendow', 'downside'], - 'downtake': ['downtake', 'takedown'], - 'downthrow': ['downthrow', 'throwdown'], - 'downturn': ['downturn', 'turndown'], - 'downward': ['downward', 'drawdown'], - 'dowry': ['dowry', 'rowdy', 'wordy'], - 'dowser': ['dowser', 'drowse'], - 'doxa': ['doxa', 'odax'], - 'doyle': ['doyle', 'yodel'], - 'dozen': ['dozen', 'zoned'], - 'drab': ['bard', 'brad', 'drab'], - 'draba': ['barad', 'draba'], - 'drabble': ['dabbler', 'drabble'], - 'draco': ['cardo', 'draco'], - 'draconic': ['cancroid', 'draconic'], - 'draconis': ['draconis', 'sardonic'], - 'dracontian': ['dracontian', 'octandrian'], - 'drafter': ['drafter', 'redraft'], - 'drag': ['darg', 'drag', 'grad'], - 'draggle': ['draggle', 'raggled'], - 'dragline': ['dragline', 'reginald', 'ringlead'], - 'dragman': ['dragman', 'grandam', 'grandma'], - 'drago': ['dargo', 'dogra', 'drago'], - 'dragoman': ['dragoman', 'garamond', 'ondagram'], - 'dragonize': ['dragonize', 'organized'], - 'dragoon': ['dragoon', 'gadroon'], - 'dragoonage': ['dragoonage', 'gadroonage'], - 'dragsman': ['dargsman', 'dragsman'], - 'drail': ['drail', 'laird', 'larid', 'liard'], - 'drain': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'], - 'drainable': ['albardine', 'drainable'], - 'drainage': ['drainage', 'gardenia'], - 'draine': ['darien', 'draine'], - 'drained': ['diander', 'drained'], - 'drainer': ['darrein', 'drainer'], - 'drainman': ['drainman', 'mandarin'], - 'draintile': ['deliriant', 'draintile', 'interlaid'], - 'drake': ['daker', 'drake', 'kedar', 'radek'], - 'dramme': ['dammer', 'dramme'], - 'drang': ['drang', 'grand'], - 'drape': ['drape', 'padre'], - 'drat': ['dart', 'drat'], - 'drate': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'draw': ['draw', 'ward'], - 'drawable': ['drawable', 'wardable'], - 'drawback': ['backward', 'drawback'], - 'drawbore': ['drawbore', 'wardrobe'], - 'drawbridge': ['bridgeward', 'drawbridge'], - 'drawdown': ['downward', 'drawdown'], - 'drawee': ['drawee', 'rewade'], - 'drawer': ['drawer', 'redraw', 'reward', 'warder'], - 'drawers': ['drawers', 'resward'], - 'drawfile': ['drawfile', 'lifeward'], - 'drawgate': ['drawgate', 'gateward'], - 'drawhead': ['drawhead', 'headward'], - 'drawhorse': ['drawhorse', 'shoreward'], - 'drawing': ['drawing', 'ginward', 'warding'], - 'drawoff': ['drawoff', 'offward'], - 'drawout': ['drawout', 'outdraw', 'outward'], - 'drawsheet': ['drawsheet', 'watershed'], - 'drawstop': ['drawstop', 'postward'], - 'dray': ['adry', 'dray', 'yard'], - 'drayage': ['drayage', 'yardage'], - 'drayman': ['drayman', 'yardman'], - 'dread': ['adder', 'dread', 'readd'], - 'dreadly': ['dreadly', 'laddery'], - 'dream': ['armed', 'derma', 'dream', 'ramed'], - 'dreamage': ['dreamage', 'redamage'], - 'dreamer': ['dreamer', 'redream'], - 'dreamhole': ['dreamhole', 'heloderma'], - 'dreamish': ['dreamish', 'semihard'], - 'dreamland': ['dreamland', 'raddleman'], - 'drear': ['darer', 'drear'], - 'dreary': ['dreary', 'yarder'], - 'dredge': ['dredge', 'gedder'], - 'dree': ['deer', 'dere', 'dree', 'rede', 'reed'], - 'dreiling': ['dreiling', 'gridelin'], - 'dressage': ['degasser', 'dressage'], - 'dresser': ['dresser', 'redress'], - 'drib': ['bird', 'drib'], - 'dribble': ['dibbler', 'dribble'], - 'driblet': ['birdlet', 'driblet'], - 'driddle': ['diddler', 'driddle'], - 'drier': ['drier', 'rider'], - 'driest': ['driest', 'stride'], - 'driller': ['driller', 'redrill'], - 'drillman': ['drillman', 'mandrill'], - 'dringle': ['dringle', 'grindle'], - 'drisheen': ['denshire', 'drisheen'], - 'drive': ['diver', 'drive'], - 'driven': ['driven', 'nervid', 'verdin'], - 'drivescrew': ['drivescrew', 'screwdrive'], - 'drogue': ['drogue', 'gourde'], - 'drolly': ['drolly', 'lordly'], - 'drome': ['domer', 'drome'], - 'dromicia': ['dioramic', 'dromicia'], - 'drona': ['adorn', 'donar', 'drona', 'radon'], - 'drone': ['drone', 'ronde'], - 'drongo': ['drongo', 'gordon'], - 'dronish': ['dishorn', 'dronish'], - 'drool': ['dolor', 'drool'], - 'drop': ['dorp', 'drop', 'prod'], - 'dropsy': ['dropsy', 'dryops'], - 'drossel': ['drossel', 'rodless'], - 'drove': ['dover', 'drove', 'vedro'], - 'drow': ['drow', 'word'], - 'drowse': ['dowser', 'drowse'], - 'drub': ['burd', 'drub'], - 'drugger': ['drugger', 'grudger'], - 'druggery': ['druggery', 'grudgery'], - 'drungar': ['drungar', 'gurnard'], - 'drupe': ['drupe', 'duper', 'perdu', 'prude', 'pured'], - 'drusean': ['asunder', 'drusean'], - 'dryops': ['dropsy', 'dryops'], - 'duad': ['addu', 'dadu', 'daud', 'duad'], - 'dual': ['auld', 'dual', 'laud', 'udal'], - 'duali': ['duali', 'dulia'], - 'dualin': ['dualin', 'ludian', 'unlaid'], - 'dualism': ['dualism', 'laudism'], - 'dualist': ['dualist', 'laudist'], - 'dub': ['bud', 'dub'], - 'dubber': ['dubber', 'rubbed'], - 'dubious': ['biduous', 'dubious'], - 'dubitate': ['dubitate', 'tabitude'], - 'ducal': ['cauld', 'ducal'], - 'duces': ['decus', 'duces'], - 'duckstone': ['duckstone', 'unstocked'], - 'duco': ['douc', 'duco'], - 'ducted': ['deduct', 'ducted'], - 'duction': ['conduit', 'duction', 'noctuid'], - 'duculinae': ['duculinae', 'nuculidae'], - 'dudeen': ['denude', 'dudeen'], - 'dudler': ['dudler', 'ruddle'], - 'duel': ['deul', 'duel', 'leud'], - 'dueler': ['dueler', 'eluder'], - 'dueling': ['dueling', 'indulge'], - 'duello': ['deloul', 'duello'], - 'duenna': ['duenna', 'undean'], - 'duer': ['duer', 'dure', 'rude', 'urde'], - 'duffer': ['duffer', 'ruffed'], - 'dufter': ['dufter', 'turfed'], - 'dug': ['dug', 'gud'], - 'duim': ['duim', 'muid'], - 'dukery': ['dukery', 'duyker'], - 'dulat': ['adult', 'dulat'], - 'dulcian': ['dulcian', 'incudal', 'lucanid', 'lucinda'], - 'dulciana': ['claudian', 'dulciana'], - 'duler': ['duler', 'urled'], - 'dulia': ['duali', 'dulia'], - 'dullify': ['dullify', 'fluidly'], - 'dulosis': ['dissoul', 'dulosis', 'solidus'], - 'dulseman': ['dulseman', 'unalmsed'], - 'dultie': ['dilute', 'dultie'], - 'dum': ['dum', 'mud'], - 'duma': ['duma', 'maud'], - 'dumaist': ['dumaist', 'stadium'], - 'dumontite': ['dumontite', 'unomitted'], - 'dumple': ['dumple', 'plumed'], - 'dunair': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'], - 'dunal': ['dunal', 'laund', 'lunda', 'ulnad'], - 'dunderpate': ['dunderpate', 'undeparted'], - 'dune': ['dune', 'nude', 'unde'], - 'dungaree': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'], - 'dungeon': ['dungeon', 'negundo'], - 'dunger': ['dunger', 'gerund', 'greund', 'nudger'], - 'dungol': ['dungol', 'ungold'], - 'dungy': ['dungy', 'gundy'], - 'dunite': ['dunite', 'united', 'untied'], - 'dunlap': ['dunlap', 'upland'], - 'dunne': ['dunne', 'unden'], - 'dunner': ['dunner', 'undern'], - 'dunpickle': ['dunpickle', 'unpickled'], - 'dunstable': ['dunstable', 'unblasted', 'unstabled'], - 'dunt': ['dunt', 'tund'], - 'duny': ['duny', 'undy'], - 'duo': ['duo', 'udo'], - 'duodenal': ['duodenal', 'unloaded'], - 'duodenocholecystostomy': ['cholecystoduodenostomy', 'duodenocholecystostomy'], - 'duodenojejunal': ['duodenojejunal', 'jejunoduodenal'], - 'duodenopancreatectomy': ['duodenopancreatectomy', 'pancreatoduodenectomy'], - 'dup': ['dup', 'pud'], - 'duper': ['drupe', 'duper', 'perdu', 'prude', 'pured'], - 'dupion': ['dupion', 'unipod'], - 'dupla': ['dupla', 'plaud'], - 'duplone': ['duplone', 'unpoled'], - 'dura': ['ardu', 'daur', 'dura'], - 'durain': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'], - 'duramen': ['duramen', 'maunder', 'unarmed'], - 'durance': ['durance', 'redunca', 'unraced'], - 'durango': ['aground', 'durango'], - 'durani': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'], - 'durant': ['durant', 'tundra'], - 'durban': ['durban', 'undrab'], - 'durdenite': ['durdenite', 'undertide'], - 'dure': ['duer', 'dure', 'rude', 'urde'], - 'durene': ['durene', 'endure'], - 'durenol': ['durenol', 'lounder', 'roundel'], - 'durgan': ['durgan', 'undrag'], - 'durian': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'], - 'during': ['during', 'ungird'], - 'durity': ['durity', 'rudity'], - 'durmast': ['durmast', 'mustard'], - 'duro': ['dour', 'duro', 'ordu', 'roud'], - 'dusken': ['dusken', 'sundek'], - 'dust': ['dust', 'stud'], - 'duster': ['derust', 'duster'], - 'dustin': ['dustin', 'nudist'], - 'dustpan': ['dustpan', 'upstand'], - 'dusty': ['dusty', 'study'], - 'duyker': ['dukery', 'duyker'], - 'dvaita': ['divata', 'dvaita'], - 'dwale': ['dwale', 'waled', 'weald'], - 'dwine': ['dwine', 'edwin', 'wendi', 'widen', 'wined'], - 'dyad': ['addy', 'dyad'], - 'dyas': ['days', 'dyas'], - 'dye': ['dey', 'dye', 'yed'], - 'dyehouse': ['deyhouse', 'dyehouse'], - 'dyeing': ['digeny', 'dyeing'], - 'dyer': ['dyer', 'yerd'], - 'dying': ['dingy', 'dying'], - 'dynamo': ['dynamo', 'monday'], - 'dynamoelectric': ['dynamoelectric', 'electrodynamic'], - 'dynamoelectrical': ['dynamoelectrical', 'electrodynamical'], - 'dynamotor': ['androtomy', 'dynamotor'], - 'dyne': ['deny', 'dyne'], - 'dyophone': ['dyophone', 'honeypod'], - 'dysluite': ['dysluite', 'sedulity'], - 'dysneuria': ['dasyurine', 'dysneuria'], - 'dysphoric': ['chrysopid', 'dysphoric'], - 'dysphrenia': ['dysphrenia', 'sphyraenid', 'sphyrnidae'], - 'dystome': ['dystome', 'modesty'], - 'dystrophia': ['diastrophy', 'dystrophia'], - 'ea': ['ae', 'ea'], - 'each': ['ache', 'each', 'haec'], - 'eager': ['agree', 'eager', 'eagre'], - 'eagle': ['aegle', 'eagle', 'galee'], - 'eagless': ['ageless', 'eagless'], - 'eaglet': ['eaglet', 'legate', 'teagle', 'telega'], - 'eagre': ['agree', 'eager', 'eagre'], - 'ean': ['ean', 'nae', 'nea'], - 'ear': ['aer', 'are', 'ear', 'era', 'rea'], - 'eared': ['eared', 'erade'], - 'earful': ['earful', 'farleu', 'ferula'], - 'earing': ['arenig', 'earing', 'gainer', 'reagin', 'regain'], - 'earl': ['earl', 'eral', 'lear', 'real'], - 'earlap': ['earlap', 'parale'], - 'earle': ['areel', 'earle'], - 'earlet': ['earlet', 'elater', 'relate'], - 'earliness': ['earliness', 'naileress'], - 'earlship': ['earlship', 'pearlish'], - 'early': ['early', 'layer', 'relay'], - 'earn': ['arne', 'earn', 'rane'], - 'earner': ['earner', 'ranere'], - 'earnest': ['earnest', 'eastern', 'nearest'], - 'earnestly': ['earnestly', 'easternly'], - 'earnful': ['earnful', 'funeral'], - 'earning': ['earning', 'engrain'], - 'earplug': ['earplug', 'graupel', 'plaguer'], - 'earring': ['earring', 'grainer'], - 'earringed': ['earringed', 'grenadier'], - 'earshot': ['asthore', 'earshot'], - 'eartab': ['abater', 'artabe', 'eartab', 'trabea'], - 'earth': ['earth', 'hater', 'heart', 'herat', 'rathe'], - 'earthborn': ['abhorrent', 'earthborn'], - 'earthed': ['earthed', 'hearted'], - 'earthen': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'], - 'earthian': ['earthian', 'rhaetian'], - 'earthiness': ['earthiness', 'heartiness'], - 'earthless': ['earthless', 'heartless'], - 'earthling': ['earthling', 'heartling'], - 'earthly': ['earthly', 'heartly', 'lathery', 'rathely'], - 'earthnut': ['earthnut', 'heartnut'], - 'earthpea': ['earthpea', 'heartpea'], - 'earthquake': ['earthquake', 'heartquake'], - 'earthward': ['earthward', 'heartward'], - 'earthy': ['earthy', 'hearty', 'yearth'], - 'earwig': ['earwig', 'grewia'], - 'earwitness': ['earwitness', 'wateriness'], - 'easel': ['easel', 'lease'], - 'easement': ['easement', 'estamene'], - 'easer': ['easer', 'erase'], - 'easily': ['easily', 'elysia'], - 'easing': ['easing', 'sangei'], - 'east': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'], - 'eastabout': ['aetobatus', 'eastabout'], - 'eastbound': ['eastbound', 'unboasted'], - 'easter': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'easterling': ['easterling', 'generalist'], - 'eastern': ['earnest', 'eastern', 'nearest'], - 'easternly': ['earnestly', 'easternly'], - 'easting': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'eastlake': ['alestake', 'eastlake'], - 'eastre': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'easy': ['easy', 'eyas'], - 'eat': ['ate', 'eat', 'eta', 'tae', 'tea'], - 'eatberry': ['betrayer', 'eatberry', 'rebetray', 'teaberry'], - 'eaten': ['eaten', 'enate'], - 'eater': ['arete', 'eater', 'teaer'], - 'eating': ['eating', 'ingate', 'tangie'], - 'eats': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'], - 'eave': ['eave', 'evea'], - 'eaved': ['deave', 'eaved', 'evade'], - 'eaver': ['eaver', 'reave'], - 'eaves': ['eaves', 'evase', 'seave'], - 'eben': ['been', 'bene', 'eben'], - 'ebenales': ['ebenales', 'lebanese'], - 'ebon': ['beno', 'bone', 'ebon'], - 'ebony': ['boney', 'ebony'], - 'ebriety': ['byerite', 'ebriety'], - 'eburna': ['eburna', 'unbare', 'unbear', 'urbane'], - 'eburnated': ['eburnated', 'underbeat', 'unrebated'], - 'eburnian': ['eburnian', 'inurbane'], - 'ecad': ['cade', 'dace', 'ecad'], - 'ecanda': ['adance', 'ecanda'], - 'ecardinal': ['ecardinal', 'lardacein'], - 'ecarinate': ['anaeretic', 'ecarinate'], - 'ecarte': ['cerate', 'create', 'ecarte'], - 'ecaudata': ['acaudate', 'ecaudata'], - 'ecclesiasticism': ['ecclesiasticism', 'misecclesiastic'], - 'eche': ['chee', 'eche'], - 'echelon': ['chelone', 'echelon'], - 'echeveria': ['echeveria', 'reachieve'], - 'echidna': ['chained', 'echidna'], - 'echinal': ['chilean', 'echinal', 'nichael'], - 'echinate': ['echinate', 'hecatine'], - 'echinital': ['echinital', 'inethical'], - 'echis': ['echis', 'shice'], - 'echoer': ['choree', 'cohere', 'echoer'], - 'echoic': ['choice', 'echoic'], - 'echoist': ['chitose', 'echoist'], - 'eciton': ['eciton', 'noetic', 'notice', 'octine'], - 'eckehart': ['eckehart', 'hacktree'], - 'eclair': ['carlie', 'claire', 'eclair', 'erical'], - 'eclat': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'], - 'eclipsable': ['eclipsable', 'spliceable'], - 'eclipser': ['eclipser', 'pericles', 'resplice'], - 'economics': ['economics', 'neocosmic'], - 'economism': ['economism', 'monoecism', 'monosemic'], - 'economist': ['economist', 'mesotonic'], - 'ecorticate': ['ecorticate', 'octaeteric'], - 'ecostate': ['coestate', 'ecostate'], - 'ecotonal': ['colonate', 'ecotonal'], - 'ecotype': ['ecotype', 'ocypete'], - 'ecrasite': ['ecrasite', 'sericate'], - 'ecru': ['cure', 'ecru', 'eruc'], - 'ectad': ['cadet', 'ectad'], - 'ectal': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'], - 'ectasis': ['ascites', 'ectasis'], - 'ectene': ['cetene', 'ectene'], - 'ectental': ['ectental', 'tentacle'], - 'ectiris': ['ectiris', 'eristic'], - 'ectocardia': ['coradicate', 'ectocardia'], - 'ectocranial': ['calonectria', 'ectocranial'], - 'ectoglia': ['ectoglia', 'geotical', 'goetical'], - 'ectomorph': ['ectomorph', 'topchrome'], - 'ectomorphic': ['cetomorphic', 'chemotropic', 'ectomorphic'], - 'ectomorphy': ['chromotype', 'cormophyte', 'ectomorphy'], - 'ectopia': ['ectopia', 'opacite'], - 'ectopy': ['cotype', 'ectopy'], - 'ectorhinal': ['chlorinate', 'ectorhinal', 'tornachile'], - 'ectosarc': ['ectosarc', 'reaccost'], - 'ectrogenic': ['ectrogenic', 'egocentric', 'geocentric'], - 'ectromelia': ['carmeloite', 'ectromelia', 'meteorical'], - 'ectropion': ['ectropion', 'neotropic'], - 'ed': ['de', 'ed'], - 'edda': ['dade', 'dead', 'edda'], - 'eddaic': ['caddie', 'eddaic'], - 'eddish': ['dished', 'eddish'], - 'eddo': ['dedo', 'dode', 'eddo'], - 'edema': ['adeem', 'ameed', 'edema'], - 'eden': ['dene', 'eden', 'need'], - 'edental': ['dalteen', 'dentale', 'edental'], - 'edentata': ['antedate', 'edentata'], - 'edessan': ['deaness', 'edessan'], - 'edestan': ['edestan', 'standee'], - 'edestin': ['destine', 'edestin'], - 'edgar': ['edgar', 'grade'], - 'edger': ['edger', 'greed'], - 'edgerman': ['edgerman', 'gendarme'], - 'edgrew': ['edgrew', 'wedger'], - 'edible': ['debile', 'edible'], - 'edict': ['cetid', 'edict'], - 'edictal': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'], - 'edification': ['deification', 'edification'], - 'edificatory': ['deificatory', 'edificatory'], - 'edifier': ['deifier', 'edifier'], - 'edify': ['deify', 'edify'], - 'edit': ['diet', 'dite', 'edit', 'tide', 'tied'], - 'edital': ['detail', 'dietal', 'dilate', 'edital', 'tailed'], - 'edith': ['edith', 'ethid'], - 'edition': ['edition', 'odinite', 'otidine', 'tineoid'], - 'editor': ['editor', 'triode'], - 'editorial': ['editorial', 'radiolite'], - 'edmund': ['edmund', 'mudden'], - 'edna': ['ande', 'dane', 'dean', 'edna'], - 'edo': ['doe', 'edo', 'ode'], - 'edoni': ['deino', 'dione', 'edoni'], - 'education': ['coadunite', 'education', 'noctuidae'], - 'educe': ['deuce', 'educe'], - 'edward': ['edward', 'wadder', 'warded'], - 'edwin': ['dwine', 'edwin', 'wendi', 'widen', 'wined'], - 'eel': ['eel', 'lee'], - 'eelgrass': ['eelgrass', 'gearless', 'rageless'], - 'eelpot': ['eelpot', 'opelet'], - 'eelspear': ['eelspear', 'prelease'], - 'eely': ['eely', 'yeel'], - 'eer': ['eer', 'ere', 'ree'], - 'efik': ['efik', 'fike'], - 'eft': ['eft', 'fet'], - 'egad': ['aged', 'egad', 'gade'], - 'egba': ['egba', 'gabe'], - 'egbo': ['bego', 'egbo'], - 'egeran': ['egeran', 'enrage', 'ergane', 'genear', 'genera'], - 'egest': ['egest', 'geest', 'geste'], - 'egger': ['egger', 'grege'], - 'egghot': ['egghot', 'hogget'], - 'eggler': ['eggler', 'legger'], - 'eggy': ['eggy', 'yegg'], - 'eglantine': ['eglantine', 'inelegant', 'legantine'], - 'eglatere': ['eglatere', 'regelate', 'relegate'], - 'egma': ['egma', 'game', 'mage'], - 'ego': ['ego', 'geo'], - 'egocentric': ['ectrogenic', 'egocentric', 'geocentric'], - 'egoist': ['egoist', 'stogie'], - 'egol': ['egol', 'goel', 'loge', 'ogle', 'oleg'], - 'egotheism': ['egotheism', 'eightsome'], - 'egret': ['egret', 'greet', 'reget'], - 'eh': ['eh', 'he'], - 'ehretia': ['ehretia', 'etheria'], - 'eident': ['eident', 'endite'], - 'eidograph': ['eidograph', 'ideograph'], - 'eidology': ['eidology', 'ideology'], - 'eighth': ['eighth', 'height'], - 'eightsome': ['egotheism', 'eightsome'], - 'eigne': ['eigne', 'genie'], - 'eileen': ['eileen', 'lienee'], - 'ekaha': ['ekaha', 'hakea'], - 'eke': ['eke', 'kee'], - 'eker': ['eker', 'reek'], - 'ekoi': ['ekoi', 'okie'], - 'ekron': ['ekron', 'krone'], - 'ektene': ['ektene', 'ketene'], - 'elabrate': ['elabrate', 'tearable'], - 'elaidic': ['aedilic', 'elaidic'], - 'elaidin': ['anilide', 'elaidin'], - 'elain': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'elaine': ['aileen', 'elaine'], - 'elamite': ['alemite', 'elamite'], - 'elance': ['elance', 'enlace'], - 'eland': ['eland', 'laden', 'lenad'], - 'elanet': ['elanet', 'lanete', 'lateen'], - 'elanus': ['elanus', 'unseal'], - 'elaphomyces': ['elaphomyces', 'mesocephaly'], - 'elaphurus': ['elaphurus', 'sulphurea'], - 'elapid': ['aliped', 'elapid'], - 'elapoid': ['elapoid', 'oedipal'], - 'elaps': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'elapse': ['asleep', 'elapse', 'please'], - 'elastic': ['astelic', 'elastic', 'latices'], - 'elasticin': ['elasticin', 'inelastic', 'sciential'], - 'elastin': ['elastin', 'salient', 'saltine', 'slainte'], - 'elastomer': ['elastomer', 'salometer'], - 'elate': ['atlee', 'elate'], - 'elated': ['delate', 'elated'], - 'elater': ['earlet', 'elater', 'relate'], - 'elaterid': ['detailer', 'elaterid'], - 'elaterin': ['elaterin', 'entailer', 'treenail'], - 'elatha': ['althea', 'elatha'], - 'elatine': ['elatine', 'lineate'], - 'elation': ['alnoite', 'elation', 'toenail'], - 'elator': ['elator', 'lorate'], - 'elb': ['bel', 'elb'], - 'elbert': ['belter', 'elbert', 'treble'], - 'elberta': ['bearlet', 'bleater', 'elberta', 'retable'], - 'elbow': ['below', 'bowel', 'elbow'], - 'elbowed': ['boweled', 'elbowed'], - 'eld': ['del', 'eld', 'led'], - 'eldin': ['eldin', 'lined'], - 'elding': ['dingle', 'elding', 'engild', 'gilden'], - 'elean': ['anele', 'elean'], - 'election': ['coteline', 'election'], - 'elective': ['cleveite', 'elective'], - 'elector': ['elector', 'electro'], - 'electoral': ['electoral', 'recollate'], - 'electra': ['electra', 'treacle'], - 'electragy': ['electragy', 'glycerate'], - 'electret': ['electret', 'tercelet'], - 'electric': ['electric', 'lectrice'], - 'electrion': ['centriole', 'electrion', 'relection'], - 'electro': ['elector', 'electro'], - 'electrodynamic': ['dynamoelectric', 'electrodynamic'], - 'electrodynamical': ['dynamoelectrical', 'electrodynamical'], - 'electromagnetic': ['electromagnetic', 'magnetoelectric'], - 'electromagnetical': ['electromagnetical', 'magnetoelectrical'], - 'electrothermic': ['electrothermic', 'thermoelectric'], - 'electrothermometer': ['electrothermometer', 'thermoelectrometer'], - 'elegant': ['angelet', 'elegant'], - 'elegiambus': ['elegiambus', 'iambelegus'], - 'elegiast': ['elegiast', 'selagite'], - 'elemi': ['elemi', 'meile'], - 'elemin': ['elemin', 'meline'], - 'elephantic': ['elephantic', 'plancheite'], - 'elettaria': ['elettaria', 'retaliate'], - 'eleut': ['eleut', 'elute'], - 'elevator': ['elevator', 'overlate'], - 'elfin': ['elfin', 'nifle'], - 'elfishness': ['elfishness', 'fleshiness'], - 'elfkin': ['elfkin', 'finkel'], - 'elfwort': ['elfwort', 'felwort'], - 'eli': ['eli', 'lei', 'lie'], - 'elia': ['aiel', 'aile', 'elia'], - 'elian': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'elias': ['aisle', 'elias'], - 'elicitor': ['elicitor', 'trioleic'], - 'eliminand': ['eliminand', 'mindelian'], - 'elinor': ['elinor', 'lienor', 'lorien', 'noiler'], - 'elinvar': ['elinvar', 'ravelin', 'reanvil', 'valerin'], - 'elisha': ['elisha', 'hailse', 'sheila'], - 'elisor': ['elisor', 'resoil'], - 'elissa': ['elissa', 'lassie'], - 'elite': ['elite', 'telei'], - 'eliza': ['aizle', 'eliza'], - 'elk': ['elk', 'lek'], - 'ella': ['alle', 'ella', 'leal'], - 'ellagate': ['allegate', 'ellagate'], - 'ellenyard': ['ellenyard', 'learnedly'], - 'ellick': ['ellick', 'illeck'], - 'elliot': ['elliot', 'oillet'], - 'elm': ['elm', 'mel'], - 'elmer': ['elmer', 'merel', 'merle'], - 'elmy': ['elmy', 'yelm'], - 'eloah': ['eloah', 'haole'], - 'elod': ['dole', 'elod', 'lode', 'odel'], - 'eloge': ['eloge', 'golee'], - 'elohimic': ['elohimic', 'hemiolic'], - 'elohist': ['elohist', 'hostile'], - 'eloign': ['eloign', 'gileno', 'legion'], - 'eloigner': ['eloigner', 'legioner'], - 'eloignment': ['eloignment', 'omnilegent'], - 'elon': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'], - 'elonite': ['elonite', 'leonite'], - 'elops': ['elops', 'slope', 'spole'], - 'elric': ['crile', 'elric', 'relic'], - 'els': ['els', 'les'], - 'elsa': ['elsa', 'sale', 'seal', 'slae'], - 'else': ['else', 'lees', 'seel', 'sele', 'slee'], - 'elsin': ['elsin', 'lenis', 'niels', 'silen', 'sline'], - 'elt': ['elt', 'let'], - 'eluate': ['aulete', 'eluate'], - 'eluder': ['dueler', 'eluder'], - 'elusion': ['elusion', 'luiseno'], - 'elusory': ['elusory', 'yoursel'], - 'elute': ['eleut', 'elute'], - 'elution': ['elution', 'outline'], - 'elutor': ['elutor', 'louter', 'outler'], - 'elvan': ['elvan', 'navel', 'venal'], - 'elvanite': ['elvanite', 'lavenite'], - 'elver': ['elver', 'lever', 'revel'], - 'elvet': ['elvet', 'velte'], - 'elvira': ['averil', 'elvira'], - 'elvis': ['elvis', 'levis', 'slive'], - 'elwood': ['dewool', 'elwood', 'wooled'], - 'elymi': ['elymi', 'emily', 'limey'], - 'elysia': ['easily', 'elysia'], - 'elytral': ['alertly', 'elytral'], - 'elytrin': ['elytrin', 'inertly', 'trinely'], - 'elytroposis': ['elytroposis', 'proteolysis'], - 'elytrous': ['elytrous', 'urostyle'], - 'em': ['em', 'me'], - 'emanate': ['emanate', 'manatee'], - 'emanation': ['amnionate', 'anamniote', 'emanation'], - 'emanatist': ['emanatist', 'staminate', 'tasmanite'], - 'embalmer': ['embalmer', 'emmarble'], - 'embar': ['amber', 'bearm', 'bemar', 'bream', 'embar'], - 'embargo': ['bergamo', 'embargo'], - 'embark': ['embark', 'markeb'], - 'embay': ['beamy', 'embay', 'maybe'], - 'ember': ['breme', 'ember'], - 'embind': ['embind', 'nimbed'], - 'embira': ['ambier', 'bremia', 'embira'], - 'embodier': ['demirobe', 'embodier'], - 'embody': ['beydom', 'embody'], - 'embole': ['bemole', 'embole'], - 'embraceor': ['cerebroma', 'embraceor'], - 'embrail': ['embrail', 'mirabel'], - 'embryoid': ['embryoid', 'reimbody'], - 'embus': ['embus', 'sebum'], - 'embusk': ['bemusk', 'embusk'], - 'emcee': ['emcee', 'meece'], - 'emeership': ['emeership', 'ephemeris'], - 'emend': ['emend', 'mende'], - 'emendation': ['denominate', 'emendation'], - 'emendator': ['emendator', 'ondameter'], - 'emerita': ['emerita', 'emirate'], - 'emerse': ['emerse', 'seemer'], - 'emersion': ['emersion', 'meriones'], - 'emersonian': ['emersonian', 'mansioneer'], - 'emesa': ['emesa', 'mease'], - 'emigrate': ['emigrate', 'remigate'], - 'emigration': ['emigration', 'remigation'], - 'emil': ['emil', 'lime', 'mile'], - 'emilia': ['emilia', 'mailie'], - 'emily': ['elymi', 'emily', 'limey'], - 'emim': ['emim', 'mime'], - 'emir': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'emirate': ['emerita', 'emirate'], - 'emirship': ['emirship', 'imperish'], - 'emissary': ['emissary', 'missayer'], - 'emit': ['emit', 'item', 'mite', 'time'], - 'emitter': ['emitter', 'termite'], - 'emm': ['emm', 'mem'], - 'emmarble': ['embalmer', 'emmarble'], - 'emodin': ['domine', 'domnei', 'emodin', 'medino'], - 'emotion': ['emotion', 'moonite'], - 'empanel': ['empanel', 'emplane', 'peelman'], - 'empathic': ['empathic', 'emphatic'], - 'empathically': ['empathically', 'emphatically'], - 'emphasis': ['emphasis', 'misshape'], - 'emphatic': ['empathic', 'emphatic'], - 'emphatically': ['empathically', 'emphatically'], - 'empire': ['empire', 'epimer'], - 'empiricist': ['empiricist', 'empiristic'], - 'empiristic': ['empiricist', 'empiristic'], - 'emplane': ['empanel', 'emplane', 'peelman'], - 'employer': ['employer', 'polymere'], - 'emporia': ['emporia', 'meropia'], - 'emporial': ['emporial', 'proemial'], - 'emporium': ['emporium', 'pomerium', 'proemium'], - 'emprise': ['emprise', 'imprese', 'premise', 'spireme'], - 'empt': ['empt', 'temp'], - 'emptier': ['emptier', 'impetre'], - 'emption': ['emption', 'pimento'], - 'emptional': ['emptional', 'palmitone'], - 'emptor': ['emptor', 'trompe'], - 'empyesis': ['empyesis', 'pyemesis'], - 'emu': ['emu', 'ume'], - 'emulant': ['almuten', 'emulant'], - 'emulation': ['emulation', 'laumonite'], - 'emulsion': ['emulsion', 'solenium'], - 'emundation': ['emundation', 'mountained'], - 'emyd': ['demy', 'emyd'], - 'en': ['en', 'ne'], - 'enable': ['baleen', 'enable'], - 'enabler': ['enabler', 'renable'], - 'enaction': ['cetonian', 'enaction'], - 'enactor': ['enactor', 'necator', 'orcanet'], - 'enactory': ['enactory', 'octenary'], - 'enaena': ['aenean', 'enaena'], - 'enalid': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'], - 'enaliornis': ['enaliornis', 'rosaniline'], - 'enaluron': ['enaluron', 'neuronal'], - 'enam': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'], - 'enamel': ['enamel', 'melena'], - 'enameling': ['enameling', 'malengine', 'meningeal'], - 'enamor': ['enamor', 'monera', 'oreman', 'romane'], - 'enamored': ['demeanor', 'enamored'], - 'enanthem': ['enanthem', 'menthane'], - 'enantiomer': ['enantiomer', 'renominate'], - 'enapt': ['enapt', 'paten', 'penta', 'tapen'], - 'enarch': ['enarch', 'ranche'], - 'enarm': ['enarm', 'namer', 'reman'], - 'enarme': ['enarme', 'meaner', 'rename'], - 'enarthrosis': ['enarthrosis', 'nearthrosis'], - 'enate': ['eaten', 'enate'], - 'enatic': ['acetin', 'actine', 'enatic'], - 'enation': ['enation', 'etonian'], - 'enbrave': ['enbrave', 'verbena'], - 'encapsule': ['encapsule', 'pelecanus'], - 'encase': ['encase', 'seance', 'seneca'], - 'encash': ['encash', 'sanche'], - 'encauma': ['cumaean', 'encauma'], - 'encaustes': ['acuteness', 'encaustes'], - 'encaustic': ['encaustic', 'succinate'], - 'encephalomeningitis': ['encephalomeningitis', 'meningoencephalitis'], - 'encephalomeningocele': ['encephalomeningocele', 'meningoencephalocele'], - 'encephalomyelitis': ['encephalomyelitis', 'myeloencephalitis'], - 'enchair': ['chainer', 'enchair', 'rechain'], - 'encharge': ['encharge', 'rechange'], - 'encharnel': ['channeler', 'encharnel'], - 'enchytrae': ['cytherean', 'enchytrae'], - 'encina': ['canine', 'encina', 'neanic'], - 'encinillo': ['encinillo', 'linolenic'], - 'encist': ['encist', 'incest', 'insect', 'scient'], - 'encitadel': ['declinate', 'encitadel'], - 'enclaret': ['celarent', 'centrale', 'enclaret'], - 'enclasp': ['enclasp', 'spancel'], - 'enclave': ['enclave', 'levance', 'valence'], - 'enclosure': ['enclosure', 'recounsel'], - 'encoignure': ['encoignure', 'neurogenic'], - 'encoil': ['clione', 'coelin', 'encoil', 'enolic'], - 'encomiastic': ['cosmetician', 'encomiastic'], - 'encomic': ['comenic', 'encomic', 'meconic'], - 'encomium': ['encomium', 'meconium'], - 'encoronal': ['encoronal', 'olecranon'], - 'encoronate': ['encoronate', 'entocornea'], - 'encradle': ['calender', 'encradle'], - 'encranial': ['carnelian', 'encranial'], - 'encratic': ['acentric', 'encratic', 'nearctic'], - 'encratism': ['encratism', 'miscreant'], - 'encraty': ['encraty', 'nectary'], - 'encreel': ['crenele', 'encreel'], - 'encrinital': ['encrinital', 'tricennial'], - 'encrisp': ['encrisp', 'pincers'], - 'encrust': ['encrust', 'uncrest'], - 'encurl': ['encurl', 'lucern'], - 'encurtain': ['encurtain', 'runcinate', 'uncertain'], - 'encyrtidae': ['encyrtidae', 'nycteridae'], - 'end': ['den', 'end', 'ned'], - 'endaortic': ['citronade', 'endaortic', 'redaction'], - 'endboard': ['deadborn', 'endboard'], - 'endear': ['deaner', 'endear'], - 'endeared': ['deadener', 'endeared'], - 'endearing': ['endearing', 'engrained', 'grenadine'], - 'endearingly': ['endearingly', 'engrainedly'], - 'endemial': ['endemial', 'madeline'], - 'endere': ['endere', 'needer', 'reeden'], - 'enderonic': ['enderonic', 'endocrine'], - 'endevil': ['develin', 'endevil'], - 'endew': ['endew', 'wende'], - 'ending': ['ending', 'ginned'], - 'endite': ['eident', 'endite'], - 'endive': ['endive', 'envied', 'veined'], - 'endoarteritis': ['endoarteritis', 'sideronatrite'], - 'endocline': ['endocline', 'indolence'], - 'endocrine': ['enderonic', 'endocrine'], - 'endome': ['endome', 'omened'], - 'endopathic': ['dictaphone', 'endopathic'], - 'endophasic': ['deaconship', 'endophasic'], - 'endoral': ['endoral', 'ladrone', 'leonard'], - 'endosarc': ['endosarc', 'secondar'], - 'endosome': ['endosome', 'moonseed'], - 'endosporium': ['endosporium', 'imponderous'], - 'endosteal': ['endosteal', 'leadstone'], - 'endothecial': ['chelidonate', 'endothecial'], - 'endothelia': ['endothelia', 'ethanediol', 'ethenoidal'], - 'endow': ['endow', 'nowed'], - 'endura': ['endura', 'neurad', 'undear', 'unread'], - 'endurably': ['endurably', 'undryable'], - 'endure': ['durene', 'endure'], - 'endurer': ['endurer', 'underer'], - 'enduring': ['enduring', 'unringed'], - 'enduringly': ['enduringly', 'underlying'], - 'endwise': ['endwise', 'sinewed'], - 'enema': ['ameen', 'amene', 'enema'], - 'enemy': ['enemy', 'yemen'], - 'energesis': ['energesis', 'regenesis'], - 'energeticist': ['energeticist', 'energetistic'], - 'energetistic': ['energeticist', 'energetistic'], - 'energic': ['energic', 'generic'], - 'energical': ['energical', 'generical'], - 'energid': ['energid', 'reeding'], - 'energist': ['energist', 'steering'], - 'energy': ['energy', 'greeny', 'gyrene'], - 'enervate': ['enervate', 'venerate'], - 'enervation': ['enervation', 'veneration'], - 'enervative': ['enervative', 'venerative'], - 'enervator': ['enervator', 'renovater', 'venerator'], - 'enfilade': ['alfenide', 'enfilade'], - 'enfile': ['enfile', 'enlief', 'enlife', 'feline'], - 'enflesh': ['enflesh', 'fleshen'], - 'enfoil': ['enfoil', 'olefin'], - 'enfold': ['enfold', 'folden', 'fondle'], - 'enforcer': ['confrere', 'enforcer', 'reconfer'], - 'enframe': ['enframe', 'freeman'], - 'engaol': ['angelo', 'engaol'], - 'engarb': ['banger', 'engarb', 'graben'], - 'engaud': ['augend', 'engaud', 'unaged'], - 'engild': ['dingle', 'elding', 'engild', 'gilden'], - 'engird': ['engird', 'ringed'], - 'engirdle': ['engirdle', 'reedling'], - 'engirt': ['engirt', 'tinger'], - 'englacial': ['angelical', 'englacial', 'galenical'], - 'englacially': ['angelically', 'englacially'], - 'englad': ['angled', 'dangle', 'englad', 'lagend'], - 'englander': ['englander', 'greenland'], - 'english': ['english', 'shingle'], - 'englisher': ['englisher', 'reshingle'], - 'englut': ['englut', 'gluten', 'ungelt'], - 'engobe': ['begone', 'engobe'], - 'engold': ['engold', 'golden'], - 'engrail': ['aligner', 'engrail', 'realign', 'reginal'], - 'engrailed': ['engrailed', 'geraldine'], - 'engrailment': ['engrailment', 'realignment'], - 'engrain': ['earning', 'engrain'], - 'engrained': ['endearing', 'engrained', 'grenadine'], - 'engrainedly': ['endearingly', 'engrainedly'], - 'engram': ['engram', 'german', 'manger'], - 'engraphic': ['engraphic', 'preaching'], - 'engrave': ['avenger', 'engrave'], - 'engross': ['engross', 'grossen'], - 'enhat': ['enhat', 'ethan', 'nathe', 'neath', 'thane'], - 'enheart': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'], - 'enherit': ['enherit', 'etherin', 'neither', 'therein'], - 'enhydra': ['enhydra', 'henyard'], - 'eniac': ['anice', 'eniac'], - 'enicuridae': ['audiencier', 'enicuridae'], - 'enid': ['dine', 'enid', 'inde', 'nide'], - 'enif': ['enif', 'fine', 'neif', 'nife'], - 'enisle': ['enisle', 'ensile', 'senile', 'silene'], - 'enlace': ['elance', 'enlace'], - 'enlard': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'enlarge': ['enlarge', 'general', 'gleaner'], - 'enleaf': ['enleaf', 'leafen'], - 'enlief': ['enfile', 'enlief', 'enlife', 'feline'], - 'enlife': ['enfile', 'enlief', 'enlife', 'feline'], - 'enlight': ['enlight', 'lighten'], - 'enlist': ['enlist', 'listen', 'silent', 'tinsel'], - 'enlisted': ['enlisted', 'lintseed'], - 'enlister': ['enlister', 'esterlin', 'listener', 'relisten'], - 'enmass': ['enmass', 'maness', 'messan'], - 'enneadic': ['cadinene', 'decennia', 'enneadic'], - 'ennobler': ['ennobler', 'nonrebel'], - 'ennoic': ['conine', 'connie', 'ennoic'], - 'ennomic': ['ennomic', 'meconin'], - 'enoch': ['cohen', 'enoch'], - 'enocyte': ['enocyte', 'neocyte'], - 'enodal': ['enodal', 'loaden'], - 'enoil': ['enoil', 'ileon', 'olein'], - 'enol': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'], - 'enolic': ['clione', 'coelin', 'encoil', 'enolic'], - 'enomania': ['enomania', 'maeonian'], - 'enomotarch': ['chromatone', 'enomotarch'], - 'enorganic': ['enorganic', 'ignorance'], - 'enorm': ['enorm', 'moner', 'morne'], - 'enormous': ['enormous', 'unmorose'], - 'enos': ['enos', 'nose'], - 'enostosis': ['enostosis', 'sootiness'], - 'enow': ['enow', 'owen', 'wone'], - 'enphytotic': ['enphytotic', 'entophytic'], - 'enrace': ['careen', 'carene', 'enrace'], - 'enrage': ['egeran', 'enrage', 'ergane', 'genear', 'genera'], - 'enraged': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'], - 'enragedly': ['enragedly', 'legendary'], - 'enrapt': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'enravish': ['enravish', 'ravenish', 'vanisher'], - 'enray': ['enray', 'yearn'], - 'enrib': ['brine', 'enrib'], - 'enrich': ['enrich', 'nicher', 'richen'], - 'enring': ['enring', 'ginner'], - 'enrive': ['enrive', 'envier', 'veiner', 'verine'], - 'enrobe': ['boreen', 'enrobe', 'neebor', 'rebone'], - 'enrol': ['enrol', 'loren'], - 'enrolled': ['enrolled', 'rondelle'], - 'enrough': ['enrough', 'roughen'], - 'enruin': ['enruin', 'neurin', 'unrein'], - 'enrut': ['enrut', 'tuner', 'urent'], - 'ens': ['ens', 'sen'], - 'ensaint': ['ensaint', 'stanine'], - 'ensate': ['ensate', 'enseat', 'santee', 'sateen', 'senate'], - 'ense': ['ense', 'esne', 'nese', 'seen', 'snee'], - 'enseam': ['enseam', 'semnae'], - 'enseat': ['ensate', 'enseat', 'santee', 'sateen', 'senate'], - 'ensepulcher': ['ensepulcher', 'ensepulchre'], - 'ensepulchre': ['ensepulcher', 'ensepulchre'], - 'enshade': ['dasheen', 'enshade'], - 'enshroud': ['enshroud', 'unshored'], - 'ensigncy': ['ensigncy', 'syngenic'], - 'ensilage': ['ensilage', 'genesial', 'signalee'], - 'ensile': ['enisle', 'ensile', 'senile', 'silene'], - 'ensilver': ['ensilver', 'sniveler'], - 'ensmall': ['ensmall', 'smallen'], - 'ensoul': ['ensoul', 'olenus', 'unsole'], - 'enspirit': ['enspirit', 'pristine'], - 'enstar': ['astern', 'enstar', 'stenar', 'sterna'], - 'enstatite': ['enstatite', 'intestate', 'satinette'], - 'enstool': ['enstool', 'olonets'], - 'enstore': ['enstore', 'estrone', 'storeen', 'tornese'], - 'ensue': ['ensue', 'seenu', 'unsee'], - 'ensuer': ['ensuer', 'ensure'], - 'ensure': ['ensuer', 'ensure'], - 'entablature': ['entablature', 'untreatable'], - 'entach': ['entach', 'netcha'], - 'entad': ['denat', 'entad'], - 'entada': ['adnate', 'entada'], - 'entail': ['entail', 'tineal'], - 'entailer': ['elaterin', 'entailer', 'treenail'], - 'ental': ['ental', 'laten', 'leant'], - 'entasia': ['anisate', 'entasia'], - 'entasis': ['entasis', 'sestian', 'sestina'], - 'entelam': ['entelam', 'leetman'], - 'enter': ['enter', 'neter', 'renet', 'terne', 'treen'], - 'enteral': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'], - 'enterer': ['enterer', 'terrene'], - 'enteria': ['enteria', 'trainee', 'triaene'], - 'enteric': ['citrene', 'enteric', 'enticer', 'tercine'], - 'enterocolitis': ['coloenteritis', 'enterocolitis'], - 'enterogastritis': ['enterogastritis', 'gastroenteritis'], - 'enteroid': ['enteroid', 'orendite'], - 'enteron': ['enteron', 'tenoner'], - 'enteropexy': ['enteropexy', 'oxyterpene'], - 'entertain': ['entertain', 'tarentine', 'terentian'], - 'entheal': ['entheal', 'lethean'], - 'enthraldom': ['enthraldom', 'motherland'], - 'enthuse': ['enthuse', 'unsheet'], - 'entia': ['entia', 'teian', 'tenai', 'tinea'], - 'enticer': ['citrene', 'enteric', 'enticer', 'tercine'], - 'entincture': ['entincture', 'unreticent'], - 'entire': ['entire', 'triene'], - 'entirely': ['entirely', 'lientery'], - 'entirety': ['entirety', 'eternity'], - 'entity': ['entity', 'tinety'], - 'entocoelic': ['coelection', 'entocoelic'], - 'entocornea': ['encoronate', 'entocornea'], - 'entohyal': ['entohyal', 'ethanoyl'], - 'entoil': ['entoil', 'lionet'], - 'entomeric': ['entomeric', 'intercome', 'morencite'], - 'entomic': ['centimo', 'entomic', 'tecomin'], - 'entomical': ['entomical', 'melanotic'], - 'entomion': ['entomion', 'noontime'], - 'entomoid': ['demotion', 'entomoid', 'moontide'], - 'entomophily': ['entomophily', 'monophylite'], - 'entomotomy': ['entomotomy', 'omentotomy'], - 'entoparasite': ['antiprotease', 'entoparasite'], - 'entophyte': ['entophyte', 'tenophyte'], - 'entophytic': ['enphytotic', 'entophytic'], - 'entopic': ['entopic', 'nepotic', 'pentoic'], - 'entoplastic': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'], - 'entoretina': ['entoretina', 'tetraonine'], - 'entosarc': ['ancestor', 'entosarc'], - 'entotic': ['entotic', 'tonetic'], - 'entozoa': ['entozoa', 'ozonate'], - 'entozoic': ['entozoic', 'enzootic'], - 'entrail': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'entrain': ['entrain', 'teriann'], - 'entrance': ['centenar', 'entrance'], - 'entrap': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'entreat': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'], - 'entreating': ['entreating', 'interagent'], - 'entree': ['entree', 'rentee', 'retene'], - 'entrepas': ['entrepas', 'septenar'], - 'entropion': ['entropion', 'pontonier', 'prenotion'], - 'entropium': ['entropium', 'importune'], - 'entrust': ['entrust', 'stunter', 'trusten'], - 'enumeration': ['enumeration', 'mountaineer'], - 'enunciation': ['enunciation', 'incuneation'], - 'enunciator': ['enunciator', 'uncreation'], - 'enure': ['enure', 'reune'], - 'envelope': ['envelope', 'ovenpeel'], - 'enverdure': ['enverdure', 'unrevered'], - 'envied': ['endive', 'envied', 'veined'], - 'envier': ['enrive', 'envier', 'veiner', 'verine'], - 'envious': ['envious', 'niveous', 'veinous'], - 'envoy': ['envoy', 'nevoy', 'yoven'], - 'enwood': ['enwood', 'wooden'], - 'enwound': ['enwound', 'unowned'], - 'enwrap': ['enwrap', 'pawner', 'repawn'], - 'enwrite': ['enwrite', 'retwine'], - 'enzootic': ['entozoic', 'enzootic'], - 'eoan': ['aeon', 'eoan'], - 'eogaean': ['eogaean', 'neogaea'], - 'eolithic': ['chiolite', 'eolithic'], - 'eon': ['eon', 'neo', 'one'], - 'eonism': ['eonism', 'mesion', 'oneism', 'simeon'], - 'eophyton': ['eophyton', 'honeypot'], - 'eosaurus': ['eosaurus', 'rousseau'], - 'eosin': ['eosin', 'noise'], - 'eosinoblast': ['bosselation', 'eosinoblast'], - 'epacrid': ['epacrid', 'peracid', 'preacid'], - 'epacris': ['epacris', 'scrapie', 'serapic'], - 'epactal': ['epactal', 'placate'], - 'eparch': ['aperch', 'eparch', 'percha', 'preach'], - 'eparchial': ['eparchial', 'raphaelic'], - 'eparchy': ['eparchy', 'preachy'], - 'epha': ['epha', 'heap'], - 'epharmonic': ['epharmonic', 'pinachrome'], - 'ephemeris': ['emeership', 'ephemeris'], - 'ephod': ['depoh', 'ephod', 'hoped'], - 'ephor': ['ephor', 'hoper'], - 'ephorus': ['ephorus', 'orpheus', 'upshore'], - 'epibasal': ['ablepsia', 'epibasal'], - 'epibole': ['epibole', 'epilobe'], - 'epic': ['epic', 'pice'], - 'epical': ['epical', 'piacle', 'plaice'], - 'epicarp': ['crappie', 'epicarp'], - 'epicentral': ['epicentral', 'parentelic'], - 'epiceratodus': ['dipteraceous', 'epiceratodus'], - 'epichorial': ['aerophilic', 'epichorial'], - 'epicly': ['epicly', 'pyelic'], - 'epicostal': ['alopecist', 'altiscope', 'epicostal', 'scapolite'], - 'epicotyl': ['epicotyl', 'lipocyte'], - 'epicranial': ['epicranial', 'periacinal'], - 'epiderm': ['demirep', 'epiderm', 'impeder', 'remiped'], - 'epiderma': ['epiderma', 'premedia'], - 'epidermal': ['epidermal', 'impleader', 'premedial'], - 'epidermis': ['dispireme', 'epidermis'], - 'epididymovasostomy': ['epididymovasostomy', 'vasoepididymostomy'], - 'epidural': ['dipleura', 'epidural'], - 'epigram': ['epigram', 'primage'], - 'epilabrum': ['epilabrum', 'impuberal'], - 'epilachna': ['cephalina', 'epilachna'], - 'epilate': ['epilate', 'epitela', 'pileate'], - 'epilation': ['epilation', 'polianite'], - 'epilatory': ['epilatory', 'petiolary'], - 'epilobe': ['epibole', 'epilobe'], - 'epimer': ['empire', 'epimer'], - 'epiotic': ['epiotic', 'poietic'], - 'epipactis': ['epipactis', 'epipastic'], - 'epipastic': ['epipactis', 'epipastic'], - 'epiplasm': ['epiplasm', 'palmipes'], - 'epiploic': ['epiploic', 'epipolic'], - 'epipolic': ['epiploic', 'epipolic'], - 'epirotic': ['epirotic', 'periotic'], - 'episclera': ['episclera', 'periclase'], - 'episematic': ['episematic', 'septicemia'], - 'episodal': ['episodal', 'lapidose', 'sepaloid'], - 'episodial': ['apsidiole', 'episodial'], - 'epistatic': ['epistatic', 'pistacite'], - 'episternal': ['alpestrine', 'episternal', 'interlapse', 'presential'], - 'episternum': ['episternum', 'uprisement'], - 'epistlar': ['epistlar', 'pilaster', 'plaister', 'priestal'], - 'epistle': ['epistle', 'septile'], - 'epistler': ['epistler', 'spirelet'], - 'epistoler': ['epistoler', 'peristole', 'perseitol', 'pistoleer'], - 'epistoma': ['epistoma', 'metopias'], - 'epistome': ['epistome', 'epsomite'], - 'epistroma': ['epistroma', 'peristoma'], - 'epitela': ['epilate', 'epitela', 'pileate'], - 'epithecal': ['epithecal', 'petechial', 'phacelite'], - 'epithecate': ['epithecate', 'petechiate'], - 'epithet': ['epithet', 'heptite'], - 'epithyme': ['epithyme', 'hemitype'], - 'epitomizer': ['epitomizer', 'peritomize'], - 'epizoal': ['epizoal', 'lopezia', 'opalize'], - 'epoch': ['epoch', 'poche'], - 'epodic': ['copied', 'epodic'], - 'epornitic': ['epornitic', 'proteinic'], - 'epos': ['epos', 'peso', 'pose', 'sope'], - 'epsilon': ['epsilon', 'sinople'], - 'epsomite': ['epistome', 'epsomite'], - 'epulis': ['epulis', 'pileus'], - 'epulo': ['epulo', 'loupe'], - 'epuloid': ['epuloid', 'euploid'], - 'epulosis': ['epulosis', 'pelusios'], - 'epulotic': ['epulotic', 'poultice'], - 'epural': ['epural', 'perula', 'pleura'], - 'epuration': ['epuration', 'eupatorin'], - 'equal': ['equal', 'quale', 'queal'], - 'equalable': ['aquabelle', 'equalable'], - 'equiangle': ['angelique', 'equiangle'], - 'equinity': ['equinity', 'inequity'], - 'equip': ['equip', 'pique'], - 'equitable': ['equitable', 'quietable'], - 'equitist': ['equitist', 'quietist'], - 'equus': ['equus', 'usque'], - 'er': ['er', 're'], - 'era': ['aer', 'are', 'ear', 'era', 'rea'], - 'erade': ['eared', 'erade'], - 'eradicant': ['carinated', 'eradicant'], - 'eradicator': ['corradiate', 'cortaderia', 'eradicator'], - 'eral': ['earl', 'eral', 'lear', 'real'], - 'eranist': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'], - 'erase': ['easer', 'erase'], - 'erased': ['erased', 'reseda', 'seared'], - 'eraser': ['eraser', 'searer'], - 'erasmian': ['erasmian', 'raiseman'], - 'erasmus': ['assumer', 'erasmus', 'masseur'], - 'erastian': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'], - 'erastus': ['erastus', 'ressaut'], - 'erava': ['avera', 'erava'], - 'erbia': ['barie', 'beira', 'erbia', 'rebia'], - 'erbium': ['erbium', 'imbrue'], - 'erd': ['erd', 'red'], - 'ere': ['eer', 'ere', 'ree'], - 'erect': ['crete', 'erect'], - 'erectable': ['celebrate', 'erectable'], - 'erecting': ['erecting', 'gentrice'], - 'erection': ['erection', 'neoteric', 'nocerite', 'renotice'], - 'eremic': ['eremic', 'merice'], - 'eremital': ['eremital', 'materiel'], - 'erept': ['erept', 'peter', 'petre'], - 'ereptic': ['ereptic', 'precite', 'receipt'], - 'ereption': ['ereption', 'tropeine'], - 'erethic': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'], - 'erethism': ['erethism', 'etherism', 'heterism'], - 'erethismic': ['erethismic', 'hetericism'], - 'erethistic': ['erethistic', 'hetericist'], - 'eretrian': ['arretine', 'eretrian', 'eritrean', 'retainer'], - 'erg': ['erg', 'ger', 'reg'], - 'ergal': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'ergamine': ['ergamine', 'merginae'], - 'ergane': ['egeran', 'enrage', 'ergane', 'genear', 'genera'], - 'ergastic': ['agrestic', 'ergastic'], - 'ergates': ['ergates', 'gearset', 'geaster'], - 'ergoism': ['ergoism', 'ogreism'], - 'ergomaniac': ['ergomaniac', 'grecomania'], - 'ergon': ['ergon', 'genro', 'goner', 'negro'], - 'ergot': ['ergot', 'rotge'], - 'ergotamine': ['angiometer', 'ergotamine', 'geometrina'], - 'ergotin': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'], - 'ergusia': ['ergusia', 'gerusia', 'sarigue'], - 'eria': ['aire', 'eria'], - 'erian': ['erian', 'irena', 'reina'], - 'eric': ['eric', 'rice'], - 'erica': ['acier', 'aeric', 'ceria', 'erica'], - 'ericad': ['acider', 'ericad'], - 'erical': ['carlie', 'claire', 'eclair', 'erical'], - 'erichtoid': ['dichroite', 'erichtoid', 'theriodic'], - 'erigenia': ['aegirine', 'erigenia'], - 'erigeron': ['erigeron', 'reignore'], - 'erik': ['erik', 'kier', 'reki'], - 'erineum': ['erineum', 'unireme'], - 'erinose': ['erinose', 'roseine'], - 'eristalis': ['eristalis', 'serialist'], - 'eristic': ['ectiris', 'eristic'], - 'eristical': ['eristical', 'realistic'], - 'erithacus': ['erithacus', 'eucharist'], - 'eritrean': ['arretine', 'eretrian', 'eritrean', 'retainer'], - 'erma': ['erma', 'mare', 'rame', 'ream'], - 'ermani': ['ermani', 'marine', 'remain'], - 'ermines': ['ermines', 'inermes'], - 'erne': ['erne', 'neer', 'reen'], - 'ernest': ['ernest', 'nester', 'resent', 'streen'], - 'ernie': ['ernie', 'ierne', 'irene'], - 'ernst': ['ernst', 'stern'], - 'erode': ['doree', 'erode'], - 'eros': ['eros', 'rose', 'sero', 'sore'], - 'erose': ['erose', 'soree'], - 'erotesis': ['erotesis', 'isostere'], - 'erotic': ['erotic', 'tercio'], - 'erotical': ['calorite', 'erotical', 'loricate'], - 'eroticism': ['eroticism', 'isometric', 'meroistic', 'trioecism'], - 'erotism': ['erotism', 'mortise', 'trisome'], - 'erotogenic': ['erotogenic', 'geocronite', 'orogenetic'], - 'errabund': ['errabund', 'unbarred'], - 'errand': ['darner', 'darren', 'errand', 'rander', 'redarn'], - 'errant': ['arrent', 'errant', 'ranter', 'ternar'], - 'errantia': ['artarine', 'errantia'], - 'erratic': ['cartier', 'cirrate', 'erratic'], - 'erratum': ['erratum', 'maturer'], - 'erring': ['erring', 'rering', 'ringer'], - 'errite': ['errite', 'reiter', 'retier', 'retire', 'tierer'], - 'ers': ['ers', 'ser'], - 'ersar': ['ersar', 'raser', 'serra'], - 'erse': ['erse', 'rees', 'seer', 'sere'], - 'erthen': ['erthen', 'henter', 'nether', 'threne'], - 'eruc': ['cure', 'ecru', 'eruc'], - 'eruciform': ['eruciform', 'urceiform'], - 'erucin': ['curine', 'erucin', 'neuric'], - 'erucivorous': ['erucivorous', 'overcurious'], - 'eruct': ['cruet', 'eruct', 'recut', 'truce'], - 'eruction': ['eruction', 'neurotic'], - 'erugate': ['erugate', 'guetare'], - 'erumpent': ['erumpent', 'untemper'], - 'eruption': ['eruption', 'unitrope'], - 'erwin': ['erwin', 'rewin', 'winer'], - 'eryngium': ['eryngium', 'gynerium'], - 'eryon': ['eryon', 'onery'], - 'eryops': ['eryops', 'osprey'], - 'erythea': ['erythea', 'hetaery', 'yeather'], - 'erythrin': ['erythrin', 'tyrrheni'], - 'erythrophage': ['erythrophage', 'heterography'], - 'erythrophyllin': ['erythrophyllin', 'phylloerythrin'], - 'erythropia': ['erythropia', 'pyrotheria'], - 'es': ['es', 'se'], - 'esca': ['case', 'esca'], - 'escalan': ['escalan', 'scalena'], - 'escalin': ['celsian', 'escalin', 'sanicle', 'secalin'], - 'escaloped': ['copleased', 'escaloped'], - 'escapement': ['escapement', 'espacement'], - 'escaper': ['escaper', 'respace'], - 'escarp': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'], - 'eschar': ['arches', 'chaser', 'eschar', 'recash', 'search'], - 'eschara': ['asearch', 'eschara'], - 'escheator': ['escheator', 'tocharese'], - 'escobilla': ['escobilla', 'obeliscal'], - 'escolar': ['escolar', 'solacer'], - 'escort': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'], - 'escortment': ['centermost', 'escortment'], - 'escrol': ['closer', 'cresol', 'escrol'], - 'escropulo': ['escropulo', 'supercool'], - 'esculent': ['esculent', 'unselect'], - 'esculin': ['esculin', 'incluse'], - 'esere': ['esere', 'reese', 'resee'], - 'esexual': ['esexual', 'sexuale'], - 'eshin': ['eshin', 'shine'], - 'esiphonal': ['esiphonal', 'phaseolin'], - 'esker': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'], - 'eskualdun': ['eskualdun', 'euskaldun'], - 'eskuara': ['eskuara', 'euskara'], - 'esne': ['ense', 'esne', 'nese', 'seen', 'snee'], - 'esophagogastrostomy': ['esophagogastrostomy', 'gastroesophagostomy'], - 'esopus': ['esopus', 'spouse'], - 'esoterical': ['cesarolite', 'esoterical'], - 'esoterist': ['esoterist', 'trisetose'], - 'esotrope': ['esotrope', 'proteose'], - 'esotropia': ['aportoise', 'esotropia'], - 'espacement': ['escapement', 'espacement'], - 'espadon': ['espadon', 'spadone'], - 'esparto': ['esparto', 'petrosa', 'seaport'], - 'esperantic': ['esperantic', 'interspace'], - 'esperantido': ['desperation', 'esperantido'], - 'esperantism': ['esperantism', 'strepsinema'], - 'esperanto': ['esperanto', 'personate'], - 'espial': ['espial', 'lipase', 'pelias'], - 'espier': ['espier', 'peiser'], - 'espinal': ['espinal', 'pinales', 'spaniel'], - 'espino': ['espino', 'sepion'], - 'espringal': ['espringal', 'presignal', 'relapsing'], - 'esquire': ['esquire', 'risquee'], - 'essence': ['essence', 'senesce'], - 'essenism': ['essenism', 'messines'], - 'essie': ['essie', 'seise'], - 'essling': ['essling', 'singles'], - 'essoin': ['essoin', 'ossein'], - 'essonite': ['essonite', 'ossetine'], - 'essorant': ['assentor', 'essorant', 'starnose'], - 'estamene': ['easement', 'estamene'], - 'esteem': ['esteem', 'mestee'], - 'estella': ['estella', 'sellate'], - 'ester': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'esterlin': ['enlister', 'esterlin', 'listener', 'relisten'], - 'esterling': ['esterling', 'steerling'], - 'estevin': ['estevin', 'tensive'], - 'esth': ['esth', 'hest', 'seth'], - 'esther': ['esther', 'hester', 'theres'], - 'estivage': ['estivage', 'vegasite'], - 'estoc': ['coset', 'estoc', 'scote'], - 'estonian': ['estonian', 'nasonite'], - 'estop': ['estop', 'stoep', 'stope'], - 'estradiol': ['estradiol', 'idolaster'], - 'estrange': ['estrange', 'segreant', 'sergeant', 'sternage'], - 'estray': ['atresy', 'estray', 'reasty', 'stayer'], - 'estre': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'estreat': ['estreat', 'restate', 'retaste'], - 'estrepe': ['estrepe', 'resteep', 'steeper'], - 'estriate': ['estriate', 'treatise'], - 'estrin': ['estrin', 'insert', 'sinter', 'sterin', 'triens'], - 'estriol': ['estriol', 'torsile'], - 'estrogen': ['estrogen', 'gerontes'], - 'estrone': ['enstore', 'estrone', 'storeen', 'tornese'], - 'estrous': ['estrous', 'oestrus', 'sestuor', 'tussore'], - 'estrual': ['arustle', 'estrual', 'saluter', 'saulter'], - 'estufa': ['estufa', 'fusate'], - 'eta': ['ate', 'eat', 'eta', 'tae', 'tea'], - 'etacism': ['cameist', 'etacism', 'sematic'], - 'etacist': ['etacist', 'statice'], - 'etalon': ['etalon', 'tolane'], - 'etamin': ['etamin', 'inmate', 'taimen', 'tamein'], - 'etamine': ['amenite', 'etamine', 'matinee'], - 'etch': ['chet', 'etch', 'tche', 'tech'], - 'etcher': ['cherte', 'etcher'], - 'eternal': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'], - 'eternalism': ['eternalism', 'streamline'], - 'eternity': ['entirety', 'eternity'], - 'etesian': ['etesian', 'senaite'], - 'ethal': ['ethal', 'lathe', 'leath'], - 'ethan': ['enhat', 'ethan', 'nathe', 'neath', 'thane'], - 'ethanal': ['anthela', 'ethanal'], - 'ethane': ['ethane', 'taheen'], - 'ethanediol': ['endothelia', 'ethanediol', 'ethenoidal'], - 'ethanim': ['ethanim', 'hematin'], - 'ethanoyl': ['entohyal', 'ethanoyl'], - 'ethel': ['ethel', 'lethe'], - 'ethenoidal': ['endothelia', 'ethanediol', 'ethenoidal'], - 'ether': ['ether', 'rethe', 'theer', 'there', 'three'], - 'etheria': ['ehretia', 'etheria'], - 'etheric': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'], - 'etherin': ['enherit', 'etherin', 'neither', 'therein'], - 'etherion': ['etherion', 'hereinto', 'heronite'], - 'etherism': ['erethism', 'etherism', 'heterism'], - 'etherization': ['etherization', 'heterization'], - 'etherize': ['etherize', 'heterize'], - 'ethicism': ['ethicism', 'shemitic'], - 'ethicist': ['ethicist', 'thecitis', 'theistic'], - 'ethics': ['ethics', 'sethic'], - 'ethid': ['edith', 'ethid'], - 'ethine': ['ethine', 'theine'], - 'ethiop': ['ethiop', 'ophite', 'peitho'], - 'ethmoidal': ['ethmoidal', 'oldhamite'], - 'ethmosphenoid': ['ethmosphenoid', 'sphenoethmoid'], - 'ethmosphenoidal': ['ethmosphenoidal', 'sphenoethmoidal'], - 'ethnal': ['ethnal', 'hantle', 'lathen', 'thenal'], - 'ethnical': ['chainlet', 'ethnical'], - 'ethnological': ['allothogenic', 'ethnological'], - 'ethnos': ['ethnos', 'honest'], - 'ethography': ['ethography', 'hyetograph'], - 'ethologic': ['ethologic', 'theologic'], - 'ethological': ['ethological', 'lethologica', 'theological'], - 'ethology': ['ethology', 'theology'], - 'ethos': ['ethos', 'shote', 'those'], - 'ethylic': ['ethylic', 'techily'], - 'ethylin': ['ethylin', 'thienyl'], - 'etna': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'etnean': ['etnean', 'neaten'], - 'etonian': ['enation', 'etonian'], - 'etruscan': ['etruscan', 'recusant'], - 'etta': ['etta', 'tate', 'teat'], - 'ettarre': ['ettarre', 'retreat', 'treater'], - 'ettle': ['ettle', 'tetel'], - 'etua': ['aute', 'etua'], - 'euaster': ['austere', 'euaster'], - 'eucalypteol': ['eucalypteol', 'eucalyptole'], - 'eucalyptole': ['eucalypteol', 'eucalyptole'], - 'eucatropine': ['eucatropine', 'neurectopia'], - 'eucharis': ['acheirus', 'eucharis'], - 'eucharist': ['erithacus', 'eucharist'], - 'euchlaena': ['acheulean', 'euchlaena'], - 'eulogism': ['eulogism', 'uglisome'], - 'eumolpus': ['eumolpus', 'plumeous'], - 'eunomia': ['eunomia', 'moineau'], - 'eunomy': ['eunomy', 'euonym'], - 'euonym': ['eunomy', 'euonym'], - 'eupatorin': ['epuration', 'eupatorin'], - 'euplastic': ['euplastic', 'spiculate'], - 'euploid': ['epuloid', 'euploid'], - 'euproctis': ['crepitous', 'euproctis', 'uroseptic'], - 'eurindic': ['dineuric', 'eurindic'], - 'eurus': ['eurus', 'usure'], - 'euscaro': ['acerous', 'carouse', 'euscaro'], - 'euskaldun': ['eskualdun', 'euskaldun'], - 'euskara': ['eskuara', 'euskara'], - 'eusol': ['eusol', 'louse'], - 'eutannin': ['eutannin', 'uninnate'], - 'eutaxic': ['auxetic', 'eutaxic'], - 'eutheria': ['eutheria', 'hauerite'], - 'eutropic': ['eutropic', 'outprice'], - 'eva': ['ave', 'eva'], - 'evade': ['deave', 'eaved', 'evade'], - 'evader': ['evader', 'verdea'], - 'evadne': ['advene', 'evadne'], - 'evan': ['evan', 'nave', 'vane'], - 'evanish': ['evanish', 'inshave'], - 'evase': ['eaves', 'evase', 'seave'], - 'eve': ['eve', 'vee'], - 'evea': ['eave', 'evea'], - 'evection': ['civetone', 'evection'], - 'evejar': ['evejar', 'rajeev'], - 'evelyn': ['evelyn', 'evenly'], - 'even': ['even', 'neve', 'veen'], - 'evener': ['evener', 'veneer'], - 'evenly': ['evelyn', 'evenly'], - 'evens': ['evens', 'seven'], - 'eveque': ['eveque', 'queeve'], - 'ever': ['ever', 'reve', 'veer'], - 'evert': ['evert', 'revet'], - 'everwhich': ['everwhich', 'whichever'], - 'everwho': ['everwho', 'however', 'whoever'], - 'every': ['every', 'veery'], - 'evestar': ['evestar', 'versate'], - 'evict': ['civet', 'evict'], - 'evil': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'], - 'evildoer': ['evildoer', 'overidle'], - 'evilhearted': ['evilhearted', 'vilehearted'], - 'evilly': ['evilly', 'lively', 'vilely'], - 'evilness': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'], - 'evince': ['cevine', 'evince', 'venice'], - 'evisite': ['evisite', 'visitee'], - 'evitation': ['evitation', 'novitiate'], - 'evocator': ['evocator', 'overcoat'], - 'evodia': ['evodia', 'ovidae'], - 'evoker': ['evoker', 'revoke'], - 'evolver': ['evolver', 'revolve'], - 'ewder': ['dewer', 'ewder', 'rewed'], - 'ewe': ['ewe', 'wee'], - 'ewer': ['ewer', 'were'], - 'exacter': ['exacter', 'excreta'], - 'exalt': ['exalt', 'latex'], - 'exam': ['amex', 'exam', 'xema'], - 'examinate': ['examinate', 'exanimate', 'metaxenia'], - 'examination': ['examination', 'exanimation'], - 'exanimate': ['examinate', 'exanimate', 'metaxenia'], - 'exanimation': ['examination', 'exanimation'], - 'exasperation': ['exasperation', 'xenoparasite'], - 'exaudi': ['adieux', 'exaudi'], - 'excarnation': ['centraxonia', 'excarnation'], - 'excecation': ['cacoxenite', 'excecation'], - 'except': ['except', 'expect'], - 'exceptant': ['exceptant', 'expectant'], - 'exceptive': ['exceptive', 'expective'], - 'excitation': ['excitation', 'intoxicate'], - 'excitor': ['excitor', 'xerotic'], - 'excreta': ['exacter', 'excreta'], - 'excurse': ['excurse', 'excuser'], - 'excuser': ['excurse', 'excuser'], - 'exert': ['exert', 'exter'], - 'exhilarate': ['exhilarate', 'heteraxial'], - 'exist': ['exist', 'sixte'], - 'exocarp': ['exocarp', 'praecox'], - 'exon': ['exon', 'oxen'], - 'exordia': ['exordia', 'exradio'], - 'exotic': ['coxite', 'exotic'], - 'expatiater': ['expatiater', 'expatriate'], - 'expatriate': ['expatiater', 'expatriate'], - 'expect': ['except', 'expect'], - 'expectant': ['exceptant', 'expectant'], - 'expective': ['exceptive', 'expective'], - 'expirator': ['expirator', 'operatrix'], - 'expiree': ['expiree', 'peixere'], - 'explicator': ['explicator', 'extropical'], - 'expressionism': ['expressionism', 'misexpression'], - 'exradio': ['exordia', 'exradio'], - 'extend': ['dentex', 'extend'], - 'exter': ['exert', 'exter'], - 'exterminate': ['antiextreme', 'exterminate'], - 'extirpationist': ['extirpationist', 'sextipartition'], - 'extra': ['extra', 'retax', 'taxer'], - 'extradural': ['dextraural', 'extradural'], - 'extropical': ['explicator', 'extropical'], - 'exultancy': ['exultancy', 'unexactly'], - 'ey': ['ey', 'ye'], - 'eyah': ['ahey', 'eyah', 'yeah'], - 'eyas': ['easy', 'eyas'], - 'eye': ['eye', 'yee'], - 'eyed': ['eyed', 'yede'], - 'eyen': ['eyen', 'eyne'], - 'eyer': ['eyer', 'eyre', 'yere'], - 'eyn': ['eyn', 'nye', 'yen'], - 'eyne': ['eyen', 'eyne'], - 'eyot': ['eyot', 'yote'], - 'eyra': ['aery', 'eyra', 'yare', 'year'], - 'eyre': ['eyer', 'eyre', 'yere'], - 'ezba': ['baze', 'ezba'], - 'ezra': ['ezra', 'raze'], - 'facebread': ['barefaced', 'facebread'], - 'facer': ['facer', 'farce'], - 'faciend': ['faciend', 'fancied'], - 'facile': ['facile', 'filace'], - 'faciobrachial': ['brachiofacial', 'faciobrachial'], - 'faciocervical': ['cervicofacial', 'faciocervical'], - 'factable': ['factable', 'labefact'], - 'factional': ['factional', 'falcation'], - 'factish': ['catfish', 'factish'], - 'facture': ['facture', 'furcate'], - 'facula': ['facula', 'faucal'], - 'fade': ['deaf', 'fade'], - 'fader': ['fader', 'farde'], - 'faery': ['faery', 'freya'], - 'fagoter': ['aftergo', 'fagoter'], - 'faience': ['faience', 'fiancee'], - 'fail': ['alif', 'fail'], - 'fain': ['fain', 'naif'], - 'fainly': ['fainly', 'naifly'], - 'faint': ['faint', 'fanti'], - 'fair': ['fair', 'fiar', 'raif'], - 'fake': ['fake', 'feak'], - 'faker': ['faker', 'freak'], - 'fakery': ['fakery', 'freaky'], - 'fakir': ['fakir', 'fraik', 'kafir', 'rafik'], - 'falcation': ['factional', 'falcation'], - 'falco': ['falco', 'focal'], - 'falconet': ['conflate', 'falconet'], - 'fallback': ['backfall', 'fallback'], - 'faller': ['faller', 'refall'], - 'fallfish': ['fallfish', 'fishfall'], - 'fallible': ['fallible', 'fillable'], - 'falling': ['falling', 'fingall'], - 'falser': ['falser', 'flaser'], - 'faltboat': ['faltboat', 'flatboat'], - 'falutin': ['falutin', 'flutina'], - 'falx': ['falx', 'flax'], - 'fameless': ['fameless', 'selfsame'], - 'famelessness': ['famelessness', 'selfsameness'], - 'famine': ['famine', 'infame'], - 'fancied': ['faciend', 'fancied'], - 'fangle': ['fangle', 'flange'], - 'fannia': ['fannia', 'fianna'], - 'fanti': ['faint', 'fanti'], - 'far': ['far', 'fra'], - 'farad': ['daraf', 'farad'], - 'farce': ['facer', 'farce'], - 'farcetta': ['afteract', 'artefact', 'farcetta', 'farctate'], - 'farctate': ['afteract', 'artefact', 'farcetta', 'farctate'], - 'farde': ['fader', 'farde'], - 'fardel': ['alfred', 'fardel'], - 'fare': ['fare', 'fear', 'frae', 'rafe'], - 'farfel': ['farfel', 'raffle'], - 'faring': ['faring', 'frangi'], - 'farl': ['farl', 'ralf'], - 'farleu': ['earful', 'farleu', 'ferula'], - 'farm': ['farm', 'fram'], - 'farmable': ['farmable', 'framable'], - 'farmer': ['farmer', 'framer'], - 'farming': ['farming', 'framing'], - 'farnesol': ['farnesol', 'forensal'], - 'faro': ['faro', 'fora'], - 'farolito': ['farolito', 'footrail'], - 'farse': ['farse', 'frase'], - 'farset': ['farset', 'faster', 'strafe'], - 'farsi': ['farsi', 'sarif'], - 'fascio': ['fascio', 'fiasco'], - 'fasher': ['afresh', 'fasher', 'ferash'], - 'fashioner': ['fashioner', 'refashion'], - 'fast': ['fast', 'saft'], - 'fasten': ['fasten', 'nefast', 'stefan'], - 'fastener': ['fastener', 'fenestra', 'refasten'], - 'faster': ['farset', 'faster', 'strafe'], - 'fasthold': ['fasthold', 'holdfast'], - 'fastland': ['fastland', 'landfast'], - 'fat': ['aft', 'fat'], - 'fatal': ['aflat', 'fatal'], - 'fate': ['atef', 'fate', 'feat'], - 'fated': ['defat', 'fated'], - 'father': ['father', 'freath', 'hafter'], - 'faucal': ['facula', 'faucal'], - 'faucet': ['faucet', 'fucate'], - 'faulter': ['faulter', 'refutal', 'tearful'], - 'faultfind': ['faultfind', 'findfault'], - 'faunish': ['faunish', 'nusfiah'], - 'faunist': ['faunist', 'fustian', 'infaust'], - 'favorer': ['favorer', 'overfar', 'refavor'], - 'fayles': ['fayles', 'safely'], - 'feague': ['feague', 'feuage'], - 'feak': ['fake', 'feak'], - 'feal': ['alef', 'feal', 'flea', 'leaf'], - 'fealty': ['fealty', 'featly'], - 'fear': ['fare', 'fear', 'frae', 'rafe'], - 'feastful': ['feastful', 'sufflate'], - 'feat': ['atef', 'fate', 'feat'], - 'featherbed': ['befathered', 'featherbed'], - 'featherer': ['featherer', 'hereafter'], - 'featly': ['fealty', 'featly'], - 'feckly': ['feckly', 'flecky'], - 'fecundate': ['fecundate', 'unfaceted'], - 'fecundator': ['fecundator', 'unfactored'], - 'federate': ['defeater', 'federate', 'redefeat'], - 'feeder': ['feeder', 'refeed'], - 'feeding': ['feeding', 'feigned'], - 'feel': ['feel', 'flee'], - 'feeler': ['feeler', 'refeel', 'reflee'], - 'feer': ['feer', 'free', 'reef'], - 'feering': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'], - 'feetless': ['feetless', 'feteless'], - 'fei': ['fei', 'fie', 'ife'], - 'feif': ['feif', 'fife'], - 'feigned': ['feeding', 'feigned'], - 'feigner': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'], - 'feil': ['feil', 'file', 'leif', 'lief', 'life'], - 'feint': ['feint', 'fient'], - 'feis': ['feis', 'fise', 'sife'], - 'feist': ['feist', 'stife'], - 'felapton': ['felapton', 'pantofle'], - 'felid': ['felid', 'field'], - 'feline': ['enfile', 'enlief', 'enlife', 'feline'], - 'felinity': ['felinity', 'finitely'], - 'fels': ['fels', 'self'], - 'felt': ['felt', 'flet', 'left'], - 'felter': ['felter', 'telfer', 'trefle'], - 'felting': ['felting', 'neftgil'], - 'feltness': ['feltness', 'leftness'], - 'felwort': ['elfwort', 'felwort'], - 'feminal': ['feminal', 'inflame'], - 'femora': ['femora', 'foamer'], - 'femorocaudal': ['caudofemoral', 'femorocaudal'], - 'femorotibial': ['femorotibial', 'tibiofemoral'], - 'femur': ['femur', 'fumer'], - 'fen': ['fen', 'nef'], - 'fender': ['fender', 'ferned'], - 'fenestra': ['fastener', 'fenestra', 'refasten'], - 'feodary': ['feodary', 'foreday'], - 'feral': ['feral', 'flare'], - 'ferash': ['afresh', 'fasher', 'ferash'], - 'feria': ['afire', 'feria'], - 'ferine': ['ferine', 'refine'], - 'ferison': ['ferison', 'foresin'], - 'ferity': ['ferity', 'freity'], - 'ferk': ['ferk', 'kerf'], - 'ferling': ['ferling', 'flinger', 'refling'], - 'ferly': ['ferly', 'flyer', 'refly'], - 'fermail': ['fermail', 'fermila'], - 'fermenter': ['fermenter', 'referment'], - 'fermila': ['fermail', 'fermila'], - 'ferned': ['fender', 'ferned'], - 'ferri': ['ferri', 'firer', 'freir', 'frier'], - 'ferrihydrocyanic': ['ferrihydrocyanic', 'hydroferricyanic'], - 'ferrohydrocyanic': ['ferrohydrocyanic', 'hydroferrocyanic'], - 'ferry': ['ferry', 'freyr', 'fryer'], - 'fertil': ['fertil', 'filter', 'lifter', 'relift', 'trifle'], - 'ferula': ['earful', 'farleu', 'ferula'], - 'ferule': ['ferule', 'fueler', 'refuel'], - 'ferulic': ['ferulic', 'lucifer'], - 'fervidity': ['devitrify', 'fervidity'], - 'festination': ['festination', 'infestation', 'sinfonietta'], - 'fet': ['eft', 'fet'], - 'fetal': ['aleft', 'alfet', 'fetal', 'fleta'], - 'fetcher': ['fetcher', 'refetch'], - 'feteless': ['feetless', 'feteless'], - 'fetial': ['fetial', 'filate', 'lafite', 'leafit'], - 'fetish': ['fetish', 'fishet'], - 'fetor': ['fetor', 'forte', 'ofter'], - 'fetter': ['fetter', 'frette'], - 'feuage': ['feague', 'feuage'], - 'feudalism': ['feudalism', 'sulfamide'], - 'feudally': ['delayful', 'feudally'], - 'feulamort': ['feulamort', 'formulate'], - 'fi': ['fi', 'if'], - 'fiance': ['fiance', 'inface'], - 'fiancee': ['faience', 'fiancee'], - 'fianna': ['fannia', 'fianna'], - 'fiar': ['fair', 'fiar', 'raif'], - 'fiard': ['fiard', 'fraid'], - 'fiasco': ['fascio', 'fiasco'], - 'fiber': ['bifer', 'brief', 'fiber'], - 'fibered': ['debrief', 'defiber', 'fibered'], - 'fiberless': ['briefless', 'fiberless', 'fibreless'], - 'fiberware': ['fiberware', 'fibreware'], - 'fibreless': ['briefless', 'fiberless', 'fibreless'], - 'fibreware': ['fiberware', 'fibreware'], - 'fibroadenoma': ['adenofibroma', 'fibroadenoma'], - 'fibroangioma': ['angiofibroma', 'fibroangioma'], - 'fibrochondroma': ['chondrofibroma', 'fibrochondroma'], - 'fibrocystoma': ['cystofibroma', 'fibrocystoma'], - 'fibrolipoma': ['fibrolipoma', 'lipofibroma'], - 'fibromucous': ['fibromucous', 'mucofibrous'], - 'fibromyoma': ['fibromyoma', 'myofibroma'], - 'fibromyxoma': ['fibromyxoma', 'myxofibroma'], - 'fibromyxosarcoma': ['fibromyxosarcoma', 'myxofibrosarcoma'], - 'fibroneuroma': ['fibroneuroma', 'neurofibroma'], - 'fibroserous': ['fibroserous', 'serofibrous'], - 'fiche': ['chief', 'fiche'], - 'fickleness': ['fickleness', 'fleckiness'], - 'fickly': ['fickly', 'flicky'], - 'fico': ['coif', 'fico', 'foci'], - 'fictional': ['cliftonia', 'fictional'], - 'ficula': ['ficula', 'fulica'], - 'fiddler': ['fiddler', 'flidder'], - 'fidele': ['defile', 'fidele'], - 'fidget': ['fidget', 'gifted'], - 'fidicula': ['fidicula', 'fiducial'], - 'fiducial': ['fidicula', 'fiducial'], - 'fie': ['fei', 'fie', 'ife'], - 'fiedlerite': ['fiedlerite', 'friedelite'], - 'field': ['felid', 'field'], - 'fielded': ['defiled', 'fielded'], - 'fielder': ['defiler', 'fielder'], - 'fieldman': ['fieldman', 'inflamed'], - 'fiendish': ['fiendish', 'finished'], - 'fient': ['feint', 'fient'], - 'fiery': ['fiery', 'reify'], - 'fife': ['feif', 'fife'], - 'fifteener': ['fifteener', 'teneriffe'], - 'fifty': ['fifty', 'tiffy'], - 'fig': ['fig', 'gif'], - 'fighter': ['fighter', 'freight', 'refight'], - 'figurate': ['figurate', 'fruitage'], - 'fike': ['efik', 'fike'], - 'filace': ['facile', 'filace'], - 'filago': ['filago', 'gifola'], - 'filao': ['filao', 'folia'], - 'filar': ['filar', 'flair', 'frail'], - 'filate': ['fetial', 'filate', 'lafite', 'leafit'], - 'file': ['feil', 'file', 'leif', 'lief', 'life'], - 'filelike': ['filelike', 'lifelike'], - 'filer': ['filer', 'flier', 'lifer', 'rifle'], - 'filet': ['filet', 'flite'], - 'fillable': ['fallible', 'fillable'], - 'filler': ['filler', 'refill'], - 'filo': ['filo', 'foil', 'lifo'], - 'filter': ['fertil', 'filter', 'lifter', 'relift', 'trifle'], - 'filterer': ['filterer', 'refilter'], - 'filthless': ['filthless', 'shelflist'], - 'filtrable': ['filtrable', 'flirtable'], - 'filtration': ['filtration', 'flirtation'], - 'finale': ['afenil', 'finale'], - 'finder': ['finder', 'friend', 'redfin', 'refind'], - 'findfault': ['faultfind', 'findfault'], - 'fine': ['enif', 'fine', 'neif', 'nife'], - 'finely': ['finely', 'lenify'], - 'finer': ['finer', 'infer'], - 'finesser': ['finesser', 'rifeness'], - 'fingall': ['falling', 'fingall'], - 'finger': ['finger', 'fringe'], - 'fingerer': ['fingerer', 'refinger'], - 'fingerflower': ['fingerflower', 'fringeflower'], - 'fingerless': ['fingerless', 'fringeless'], - 'fingerlet': ['fingerlet', 'fringelet'], - 'fingu': ['fingu', 'fungi'], - 'finical': ['finical', 'lanific'], - 'finished': ['fiendish', 'finished'], - 'finisher': ['finisher', 'refinish'], - 'finitely': ['felinity', 'finitely'], - 'finkel': ['elfkin', 'finkel'], - 'finlet': ['finlet', 'infelt'], - 'finner': ['finner', 'infern'], - 'firca': ['afric', 'firca'], - 'fire': ['fire', 'reif', 'rife'], - 'fireable': ['afebrile', 'balefire', 'fireable'], - 'firearm': ['firearm', 'marfire'], - 'fireback': ['backfire', 'fireback'], - 'fireburn': ['burnfire', 'fireburn'], - 'fired': ['fired', 'fried'], - 'fireplug': ['fireplug', 'gripeful'], - 'firer': ['ferri', 'firer', 'freir', 'frier'], - 'fireshaft': ['fireshaft', 'tasheriff'], - 'firestone': ['firestone', 'forestine'], - 'firetop': ['firetop', 'potifer'], - 'firm': ['firm', 'frim'], - 'first': ['first', 'frist'], - 'firth': ['firth', 'frith'], - 'fise': ['feis', 'fise', 'sife'], - 'fishbone': ['bonefish', 'fishbone'], - 'fisheater': ['fisheater', 'sherifate'], - 'fisher': ['fisher', 'sherif'], - 'fishery': ['fishery', 'sherify'], - 'fishet': ['fetish', 'fishet'], - 'fishfall': ['fallfish', 'fishfall'], - 'fishlet': ['fishlet', 'leftish'], - 'fishpond': ['fishpond', 'pondfish'], - 'fishpool': ['fishpool', 'foolship'], - 'fishwood': ['fishwood', 'woodfish'], - 'fissury': ['fissury', 'russify'], - 'fist': ['fist', 'sift'], - 'fisted': ['fisted', 'sifted'], - 'fister': ['fister', 'resift', 'sifter', 'strife'], - 'fisting': ['fisting', 'sifting'], - 'fitout': ['fitout', 'outfit'], - 'fitter': ['fitter', 'tifter'], - 'fixer': ['fixer', 'refix'], - 'flageolet': ['flageolet', 'folletage'], - 'flair': ['filar', 'flair', 'frail'], - 'flamant': ['flamant', 'flatman'], - 'flame': ['flame', 'fleam'], - 'flamed': ['flamed', 'malfed'], - 'flandowser': ['flandowser', 'sandflower'], - 'flange': ['fangle', 'flange'], - 'flare': ['feral', 'flare'], - 'flaser': ['falser', 'flaser'], - 'flasher': ['flasher', 'reflash'], - 'flatboat': ['faltboat', 'flatboat'], - 'flatman': ['flamant', 'flatman'], - 'flatwise': ['flatwise', 'saltwife'], - 'flaunt': ['flaunt', 'unflat'], - 'flax': ['falx', 'flax'], - 'flea': ['alef', 'feal', 'flea', 'leaf'], - 'fleam': ['flame', 'fleam'], - 'fleay': ['fleay', 'leafy'], - 'fleche': ['fleche', 'fleech'], - 'flecker': ['flecker', 'freckle'], - 'fleckiness': ['fickleness', 'fleckiness'], - 'flecky': ['feckly', 'flecky'], - 'fled': ['delf', 'fled'], - 'flee': ['feel', 'flee'], - 'fleech': ['fleche', 'fleech'], - 'fleer': ['fleer', 'refel'], - 'flemish': ['flemish', 'himself'], - 'flenser': ['flenser', 'fresnel'], - 'flesh': ['flesh', 'shelf'], - 'fleshed': ['deflesh', 'fleshed'], - 'fleshen': ['enflesh', 'fleshen'], - 'flesher': ['flesher', 'herself'], - 'fleshful': ['fleshful', 'shelfful'], - 'fleshiness': ['elfishness', 'fleshiness'], - 'fleshy': ['fleshy', 'shelfy'], - 'flet': ['felt', 'flet', 'left'], - 'fleta': ['aleft', 'alfet', 'fetal', 'fleta'], - 'fleuret': ['fleuret', 'treeful'], - 'flew': ['flew', 'welf'], - 'flexed': ['deflex', 'flexed'], - 'flexured': ['flexured', 'refluxed'], - 'flicky': ['fickly', 'flicky'], - 'flidder': ['fiddler', 'flidder'], - 'flier': ['filer', 'flier', 'lifer', 'rifle'], - 'fligger': ['fligger', 'friggle'], - 'flinger': ['ferling', 'flinger', 'refling'], - 'flingy': ['flingy', 'flying'], - 'flirtable': ['filtrable', 'flirtable'], - 'flirtation': ['filtration', 'flirtation'], - 'flirter': ['flirter', 'trifler'], - 'flirting': ['flirting', 'trifling'], - 'flirtingly': ['flirtingly', 'triflingly'], - 'flit': ['flit', 'lift'], - 'flite': ['filet', 'flite'], - 'fliting': ['fliting', 'lifting'], - 'flitter': ['flitter', 'triflet'], - 'flo': ['flo', 'lof'], - 'float': ['aloft', 'float', 'flota'], - 'floater': ['floater', 'florate', 'refloat'], - 'flobby': ['bobfly', 'flobby'], - 'flodge': ['flodge', 'fodgel'], - 'floe': ['floe', 'fole'], - 'flog': ['flog', 'golf'], - 'flogger': ['flogger', 'frogleg'], - 'floodable': ['bloodleaf', 'floodable'], - 'flooder': ['flooder', 'reflood'], - 'floodwater': ['floodwater', 'toadflower', 'waterflood'], - 'floorer': ['floorer', 'refloor'], - 'florate': ['floater', 'florate', 'refloat'], - 'florentine': ['florentine', 'nonfertile'], - 'floret': ['floret', 'forlet', 'lofter', 'torfel'], - 'floria': ['floria', 'foliar'], - 'floriate': ['floriate', 'foralite'], - 'florican': ['florican', 'fornical'], - 'floridan': ['floridan', 'florinda'], - 'florinda': ['floridan', 'florinda'], - 'flot': ['flot', 'loft'], - 'flota': ['aloft', 'float', 'flota'], - 'flounder': ['flounder', 'reunfold', 'unfolder'], - 'flour': ['flour', 'fluor'], - 'flourisher': ['flourisher', 'reflourish'], - 'flouting': ['flouting', 'outfling'], - 'flow': ['flow', 'fowl', 'wolf'], - 'flower': ['flower', 'fowler', 'reflow', 'wolfer'], - 'flowered': ['deflower', 'flowered'], - 'flowerer': ['flowerer', 'reflower'], - 'flowery': ['flowery', 'fowlery'], - 'flowing': ['flowing', 'fowling'], - 'floyd': ['floyd', 'foldy'], - 'fluavil': ['fluavil', 'fluvial', 'vialful'], - 'flucan': ['canful', 'flucan'], - 'fluctuant': ['fluctuant', 'untactful'], - 'flue': ['flue', 'fuel'], - 'fluent': ['fluent', 'netful', 'unfelt', 'unleft'], - 'fluidly': ['dullify', 'fluidly'], - 'flukewort': ['flukewort', 'flutework'], - 'fluor': ['flour', 'fluor'], - 'fluorate': ['fluorate', 'outflare'], - 'fluorinate': ['antifouler', 'fluorinate', 'uniflorate'], - 'fluorine': ['fluorine', 'neurofil'], - 'fluorobenzene': ['benzofluorene', 'fluorobenzene'], - 'flusher': ['flusher', 'reflush'], - 'flushing': ['flushing', 'lungfish'], - 'fluster': ['fluster', 'restful'], - 'flustra': ['flustra', 'starful'], - 'flutework': ['flukewort', 'flutework'], - 'flutina': ['falutin', 'flutina'], - 'fluvial': ['fluavil', 'fluvial', 'vialful'], - 'fluxer': ['fluxer', 'reflux'], - 'flyblow': ['blowfly', 'flyblow'], - 'flyer': ['ferly', 'flyer', 'refly'], - 'flying': ['flingy', 'flying'], - 'fo': ['fo', 'of'], - 'foal': ['foal', 'loaf', 'olaf'], - 'foamer': ['femora', 'foamer'], - 'focal': ['falco', 'focal'], - 'foci': ['coif', 'fico', 'foci'], - 'focuser': ['focuser', 'refocus'], - 'fodge': ['defog', 'fodge'], - 'fodgel': ['flodge', 'fodgel'], - 'fogeater': ['fogeater', 'foregate'], - 'fogo': ['fogo', 'goof'], - 'foil': ['filo', 'foil', 'lifo'], - 'foister': ['foister', 'forties'], - 'folden': ['enfold', 'folden', 'fondle'], - 'folder': ['folder', 'refold'], - 'foldy': ['floyd', 'foldy'], - 'fole': ['floe', 'fole'], - 'folia': ['filao', 'folia'], - 'foliar': ['floria', 'foliar'], - 'foliature': ['foliature', 'toluifera'], - 'folletage': ['flageolet', 'folletage'], - 'fomenter': ['fomenter', 'refoment'], - 'fondle': ['enfold', 'folden', 'fondle'], - 'fondu': ['fondu', 'found'], - 'foo': ['foo', 'ofo'], - 'fool': ['fool', 'loof', 'olof'], - 'foolship': ['fishpool', 'foolship'], - 'footer': ['footer', 'refoot'], - 'foothot': ['foothot', 'hotfoot'], - 'footler': ['footler', 'rooflet'], - 'footpad': ['footpad', 'padfoot'], - 'footrail': ['farolito', 'footrail'], - 'foots': ['foots', 'sfoot', 'stoof'], - 'footsore': ['footsore', 'sorefoot'], - 'foppish': ['foppish', 'fopship'], - 'fopship': ['foppish', 'fopship'], - 'for': ['for', 'fro', 'orf'], - 'fora': ['faro', 'fora'], - 'foralite': ['floriate', 'foralite'], - 'foramen': ['foramen', 'foreman'], - 'forcemeat': ['aftercome', 'forcemeat'], - 'forcement': ['coferment', 'forcement'], - 'fore': ['fore', 'froe', 'ofer'], - 'forecast': ['cofaster', 'forecast'], - 'forecaster': ['forecaster', 'reforecast'], - 'forecover': ['forecover', 'overforce'], - 'foreday': ['feodary', 'foreday'], - 'forefit': ['forefit', 'forfeit'], - 'foregate': ['fogeater', 'foregate'], - 'foregirth': ['foregirth', 'foreright'], - 'forego': ['forego', 'goofer'], - 'forel': ['forel', 'rolfe'], - 'forelive': ['forelive', 'overfile'], - 'foreman': ['foramen', 'foreman'], - 'foremean': ['foremean', 'forename'], - 'forename': ['foremean', 'forename'], - 'forensal': ['farnesol', 'forensal'], - 'forensic': ['forensic', 'forinsec'], - 'forepart': ['forepart', 'prefator'], - 'foreright': ['foregirth', 'foreright'], - 'foresend': ['defensor', 'foresend'], - 'foresign': ['foresign', 'foresing'], - 'foresin': ['ferison', 'foresin'], - 'foresing': ['foresign', 'foresing'], - 'forest': ['forest', 'forset', 'foster'], - 'forestage': ['forestage', 'fosterage'], - 'forestal': ['astrofel', 'forestal'], - 'forestate': ['forestate', 'foretaste'], - 'forested': ['deforest', 'forested'], - 'forestem': ['forestem', 'fretsome'], - 'forester': ['forester', 'fosterer', 'reforest'], - 'forestine': ['firestone', 'forestine'], - 'foretaste': ['forestate', 'foretaste'], - 'foreutter': ['foreutter', 'outferret'], - 'forfeit': ['forefit', 'forfeit'], - 'forfeiter': ['forfeiter', 'reforfeit'], - 'forgeman': ['forgeman', 'formagen'], - 'forinsec': ['forensic', 'forinsec'], - 'forint': ['forint', 'fortin'], - 'forlet': ['floret', 'forlet', 'lofter', 'torfel'], - 'form': ['form', 'from'], - 'formagen': ['forgeman', 'formagen'], - 'formalin': ['formalin', 'informal', 'laniform'], - 'formally': ['formally', 'formylal'], - 'formed': ['deform', 'formed'], - 'former': ['former', 'reform'], - 'formica': ['aciform', 'formica'], - 'formicina': ['aciniform', 'formicina'], - 'formicoidea': ['aecidioform', 'formicoidea'], - 'formin': ['formin', 'inform'], - 'forminate': ['forminate', 'fremontia', 'taeniform'], - 'formulae': ['formulae', 'fumarole'], - 'formulaic': ['cauliform', 'formulaic', 'fumarolic'], - 'formulate': ['feulamort', 'formulate'], - 'formulator': ['formulator', 'torulaform'], - 'formylal': ['formally', 'formylal'], - 'fornical': ['florican', 'fornical'], - 'fornicated': ['deforciant', 'fornicated'], - 'forpit': ['forpit', 'profit'], - 'forritsome': ['forritsome', 'ostreiform'], - 'forrue': ['forrue', 'fourer', 'fourre', 'furore'], - 'forset': ['forest', 'forset', 'foster'], - 'forst': ['forst', 'frost'], - 'fort': ['fort', 'frot'], - 'forte': ['fetor', 'forte', 'ofter'], - 'forth': ['forth', 'froth'], - 'forthcome': ['forthcome', 'homecroft'], - 'forthy': ['forthy', 'frothy'], - 'forties': ['foister', 'forties'], - 'fortin': ['forint', 'fortin'], - 'forward': ['forward', 'froward'], - 'forwarder': ['forwarder', 'reforward'], - 'forwardly': ['forwardly', 'frowardly'], - 'forwardness': ['forwardness', 'frowardness'], - 'foster': ['forest', 'forset', 'foster'], - 'fosterage': ['forestage', 'fosterage'], - 'fosterer': ['forester', 'fosterer', 'reforest'], - 'fot': ['fot', 'oft'], - 'fou': ['fou', 'ouf'], - 'fouler': ['fouler', 'furole'], - 'found': ['fondu', 'found'], - 'foundationer': ['foundationer', 'refoundation'], - 'founder': ['founder', 'refound'], - 'foundling': ['foundling', 'unfolding'], - 'fourble': ['beflour', 'fourble'], - 'fourer': ['forrue', 'fourer', 'fourre', 'furore'], - 'fourre': ['forrue', 'fourer', 'fourre', 'furore'], - 'fowl': ['flow', 'fowl', 'wolf'], - 'fowler': ['flower', 'fowler', 'reflow', 'wolfer'], - 'fowlery': ['flowery', 'fowlery'], - 'fowling': ['flowing', 'fowling'], - 'fra': ['far', 'fra'], - 'frache': ['chafer', 'frache'], - 'frae': ['fare', 'fear', 'frae', 'rafe'], - 'fraghan': ['fraghan', 'harfang'], - 'fraid': ['fiard', 'fraid'], - 'fraik': ['fakir', 'fraik', 'kafir', 'rafik'], - 'frail': ['filar', 'flair', 'frail'], - 'fraiser': ['fraiser', 'frasier'], - 'fram': ['farm', 'fram'], - 'framable': ['farmable', 'framable'], - 'frame': ['frame', 'fream'], - 'framer': ['farmer', 'framer'], - 'framing': ['farming', 'framing'], - 'frangi': ['faring', 'frangi'], - 'frantic': ['frantic', 'infarct', 'infract'], - 'frase': ['farse', 'frase'], - 'frasier': ['fraiser', 'frasier'], - 'frat': ['frat', 'raft'], - 'fratcheous': ['fratcheous', 'housecraft'], - 'frater': ['frater', 'rafter'], - 'frayed': ['defray', 'frayed'], - 'freak': ['faker', 'freak'], - 'freaky': ['fakery', 'freaky'], - 'fream': ['frame', 'fream'], - 'freath': ['father', 'freath', 'hafter'], - 'freckle': ['flecker', 'freckle'], - 'free': ['feer', 'free', 'reef'], - 'freed': ['defer', 'freed'], - 'freeing': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'], - 'freeman': ['enframe', 'freeman'], - 'freer': ['freer', 'refer'], - 'fregata': ['fregata', 'raftage'], - 'fregatae': ['afterage', 'fregatae'], - 'freight': ['fighter', 'freight', 'refight'], - 'freir': ['ferri', 'firer', 'freir', 'frier'], - 'freit': ['freit', 'refit'], - 'freity': ['ferity', 'freity'], - 'fremontia': ['forminate', 'fremontia', 'taeniform'], - 'frenetic': ['frenetic', 'infecter', 'reinfect'], - 'freshener': ['freshener', 'refreshen'], - 'fresnel': ['flenser', 'fresnel'], - 'fret': ['fret', 'reft', 'tref'], - 'fretful': ['fretful', 'truffle'], - 'fretsome': ['forestem', 'fretsome'], - 'frette': ['fetter', 'frette'], - 'freya': ['faery', 'freya'], - 'freyr': ['ferry', 'freyr', 'fryer'], - 'fried': ['fired', 'fried'], - 'friedelite': ['fiedlerite', 'friedelite'], - 'friend': ['finder', 'friend', 'redfin', 'refind'], - 'frier': ['ferri', 'firer', 'freir', 'frier'], - 'friesic': ['friesic', 'serific'], - 'friggle': ['fligger', 'friggle'], - 'frightener': ['frightener', 'refrighten'], - 'frigolabile': ['frigolabile', 'glorifiable'], - 'frike': ['frike', 'kefir'], - 'frim': ['firm', 'frim'], - 'fringe': ['finger', 'fringe'], - 'fringeflower': ['fingerflower', 'fringeflower'], - 'fringeless': ['fingerless', 'fringeless'], - 'fringelet': ['fingerlet', 'fringelet'], - 'frist': ['first', 'frist'], - 'frit': ['frit', 'rift'], - 'frith': ['firth', 'frith'], - 'friulian': ['friulian', 'unifilar'], - 'fro': ['for', 'fro', 'orf'], - 'froe': ['fore', 'froe', 'ofer'], - 'frogleg': ['flogger', 'frogleg'], - 'from': ['form', 'from'], - 'fronter': ['fronter', 'refront'], - 'frontonasal': ['frontonasal', 'nasofrontal'], - 'frontooccipital': ['frontooccipital', 'occipitofrontal'], - 'frontoorbital': ['frontoorbital', 'orbitofrontal'], - 'frontoparietal': ['frontoparietal', 'parietofrontal'], - 'frontotemporal': ['frontotemporal', 'temporofrontal'], - 'frontpiece': ['frontpiece', 'perfection'], - 'frost': ['forst', 'frost'], - 'frosted': ['defrost', 'frosted'], - 'frot': ['fort', 'frot'], - 'froth': ['forth', 'froth'], - 'frothy': ['forthy', 'frothy'], - 'froward': ['forward', 'froward'], - 'frowardly': ['forwardly', 'frowardly'], - 'frowardness': ['forwardness', 'frowardness'], - 'fruitage': ['figurate', 'fruitage'], - 'fruitless': ['fruitless', 'resistful'], - 'frush': ['frush', 'shurf'], - 'frustule': ['frustule', 'sulfuret'], - 'fruticulose': ['fruticulose', 'luctiferous'], - 'fryer': ['ferry', 'freyr', 'fryer'], - 'fucales': ['caseful', 'fucales'], - 'fucate': ['faucet', 'fucate'], - 'fuel': ['flue', 'fuel'], - 'fueler': ['ferule', 'fueler', 'refuel'], - 'fuerte': ['fuerte', 'refute'], - 'fuirena': ['fuirena', 'unafire'], - 'fulcrate': ['crateful', 'fulcrate'], - 'fulica': ['ficula', 'fulica'], - 'fulmar': ['armful', 'fulmar'], - 'fulminatory': ['fulminatory', 'unformality'], - 'fulminous': ['fulminous', 'sulfonium'], - 'fulwa': ['awful', 'fulwa'], - 'fumarole': ['formulae', 'fumarole'], - 'fumarolic': ['cauliform', 'formulaic', 'fumarolic'], - 'fumble': ['beflum', 'fumble'], - 'fumer': ['femur', 'fumer'], - 'fundable': ['fundable', 'unfabled'], - 'funder': ['funder', 'refund'], - 'funebrial': ['funebrial', 'unfriable'], - 'funeral': ['earnful', 'funeral'], - 'fungal': ['fungal', 'unflag'], - 'fungi': ['fingu', 'fungi'], - 'funori': ['funori', 'furoin'], - 'fur': ['fur', 'urf'], - 'fural': ['alfur', 'fural'], - 'furan': ['furan', 'unfar'], - 'furbish': ['burfish', 'furbish'], - 'furbisher': ['furbisher', 'refurbish'], - 'furcal': ['carful', 'furcal'], - 'furcate': ['facture', 'furcate'], - 'furler': ['furler', 'refurl'], - 'furnish': ['furnish', 'runfish'], - 'furnisher': ['furnisher', 'refurnish'], - 'furoin': ['funori', 'furoin'], - 'furole': ['fouler', 'furole'], - 'furore': ['forrue', 'fourer', 'fourre', 'furore'], - 'furstone': ['furstone', 'unforest'], - 'fusate': ['estufa', 'fusate'], - 'fusteric': ['fusteric', 'scutifer'], - 'fustian': ['faunist', 'fustian', 'infaust'], - 'gab': ['bag', 'gab'], - 'gabbler': ['gabbler', 'grabble'], - 'gabe': ['egba', 'gabe'], - 'gabelle': ['gabelle', 'gelable'], - 'gabelled': ['gabelled', 'geldable'], - 'gabi': ['agib', 'biga', 'gabi'], - 'gabion': ['bagnio', 'gabion', 'gobian'], - 'gabioned': ['badigeon', 'gabioned'], - 'gable': ['bagel', 'belga', 'gable', 'gleba'], - 'gablock': ['backlog', 'gablock'], - 'gaboon': ['abongo', 'gaboon'], - 'gad': ['dag', 'gad'], - 'gadaba': ['badaga', 'dagaba', 'gadaba'], - 'gadder': ['gadder', 'graded'], - 'gaddi': ['gaddi', 'gadid'], - 'gade': ['aged', 'egad', 'gade'], - 'gadger': ['dagger', 'gadger', 'ragged'], - 'gadget': ['gadget', 'tagged'], - 'gadid': ['gaddi', 'gadid'], - 'gadinine': ['gadinine', 'indigena'], - 'gadolinite': ['deligation', 'gadolinite', 'gelatinoid'], - 'gadroon': ['dragoon', 'gadroon'], - 'gadroonage': ['dragoonage', 'gadroonage'], - 'gaduin': ['anguid', 'gaduin'], - 'gael': ['gael', 'gale', 'geal'], - 'gaen': ['agen', 'gaen', 'gane', 'gean', 'gena'], - 'gaet': ['gaet', 'gate', 'geat', 'geta'], - 'gaetulan': ['angulate', 'gaetulan'], - 'gager': ['agger', 'gager', 'regga'], - 'gahnite': ['gahnite', 'heating'], - 'gahrwali': ['gahrwali', 'garhwali'], - 'gaiassa': ['assagai', 'gaiassa'], - 'gail': ['gail', 'gali', 'gila', 'glia'], - 'gain': ['gain', 'inga', 'naig', 'ngai'], - 'gaincall': ['gaincall', 'gallican'], - 'gaine': ['angie', 'gaine'], - 'gainer': ['arenig', 'earing', 'gainer', 'reagin', 'regain'], - 'gainless': ['gainless', 'glassine'], - 'gainly': ['gainly', 'laying'], - 'gainsayer': ['asynergia', 'gainsayer'], - 'gainset': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'gainstrive': ['gainstrive', 'vinegarist'], - 'gainturn': ['gainturn', 'naturing'], - 'gaiter': ['gaiter', 'tairge', 'triage'], - 'gaize': ['gaize', 'ziega'], - 'gaj': ['gaj', 'jag'], - 'gal': ['gal', 'lag'], - 'gala': ['agal', 'agla', 'alga', 'gala'], - 'galactonic': ['cognatical', 'galactonic'], - 'galatae': ['galatae', 'galatea'], - 'galatea': ['galatae', 'galatea'], - 'gale': ['gael', 'gale', 'geal'], - 'galea': ['algae', 'galea'], - 'galee': ['aegle', 'eagle', 'galee'], - 'galei': ['agiel', 'agile', 'galei'], - 'galeid': ['algedi', 'galeid'], - 'galen': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'galena': ['alnage', 'angela', 'galena', 'lagena'], - 'galenian': ['alangine', 'angelina', 'galenian'], - 'galenic': ['angelic', 'galenic'], - 'galenical': ['angelical', 'englacial', 'galenical'], - 'galenist': ['galenist', 'genitals', 'stealing'], - 'galenite': ['galenite', 'legatine'], - 'galeoid': ['galeoid', 'geoidal'], - 'galera': ['aglare', 'alegar', 'galera', 'laager'], - 'galet': ['aglet', 'galet'], - 'galewort': ['galewort', 'waterlog'], - 'galey': ['agley', 'galey'], - 'galga': ['galga', 'glaga'], - 'gali': ['gail', 'gali', 'gila', 'glia'], - 'galidia': ['agialid', 'galidia'], - 'galik': ['galik', 'glaik'], - 'galilean': ['galilean', 'gallinae'], - 'galiot': ['galiot', 'latigo'], - 'galla': ['algal', 'galla'], - 'gallate': ['gallate', 'tallage'], - 'gallein': ['gallein', 'galline', 'nigella'], - 'galleria': ['allergia', 'galleria'], - 'gallery': ['allergy', 'gallery', 'largely', 'regally'], - 'galli': ['galli', 'glial'], - 'gallican': ['gaincall', 'gallican'], - 'gallicole': ['collegial', 'gallicole'], - 'gallinae': ['galilean', 'gallinae'], - 'galline': ['gallein', 'galline', 'nigella'], - 'gallnut': ['gallnut', 'nutgall'], - 'galloper': ['galloper', 'regallop'], - 'gallotannate': ['gallotannate', 'tannogallate'], - 'gallotannic': ['gallotannic', 'tannogallic'], - 'gallstone': ['gallstone', 'stonegall'], - 'gallybagger': ['gallybagger', 'gallybeggar'], - 'gallybeggar': ['gallybagger', 'gallybeggar'], - 'galore': ['galore', 'gaoler'], - 'galtonia': ['galtonia', 'notalgia'], - 'galvanopsychic': ['galvanopsychic', 'psychogalvanic'], - 'galvanothermometer': ['galvanothermometer', 'thermogalvanometer'], - 'gam': ['gam', 'mag'], - 'gamaliel': ['gamaliel', 'melalgia'], - 'gamashes': ['gamashes', 'smashage'], - 'gamasid': ['gamasid', 'magadis'], - 'gambado': ['dagomba', 'gambado'], - 'gambier': ['gambier', 'imbarge'], - 'gambler': ['gambler', 'gambrel'], - 'gambrel': ['gambler', 'gambrel'], - 'game': ['egma', 'game', 'mage'], - 'gamely': ['gamely', 'gleamy', 'mygale'], - 'gamene': ['gamene', 'manege', 'menage'], - 'gamete': ['gamete', 'metage'], - 'gametogenic': ['gametogenic', 'gamogenetic', 'geomagnetic'], - 'gamic': ['gamic', 'magic'], - 'gamin': ['gamin', 'mangi'], - 'gaming': ['gaming', 'gigman'], - 'gamma': ['gamma', 'magma'], - 'gammer': ['gammer', 'gramme'], - 'gamogenetic': ['gametogenic', 'gamogenetic', 'geomagnetic'], - 'gamori': ['gamori', 'gomari', 'gromia'], - 'gan': ['gan', 'nag'], - 'ganam': ['amang', 'ganam', 'manga'], - 'ganch': ['chang', 'ganch'], - 'gander': ['danger', 'gander', 'garden', 'ranged'], - 'gandul': ['gandul', 'unglad'], - 'gane': ['agen', 'gaen', 'gane', 'gean', 'gena'], - 'gangan': ['gangan', 'nagnag'], - 'ganger': ['ganger', 'grange', 'nagger'], - 'ganging': ['ganging', 'nagging'], - 'gangism': ['gangism', 'gigsman'], - 'ganglioneuron': ['ganglioneuron', 'neuroganglion'], - 'gangly': ['gangly', 'naggly'], - 'ganguela': ['ganguela', 'language'], - 'gangway': ['gangway', 'waygang'], - 'ganister': ['astringe', 'ganister', 'gantries'], - 'ganoidal': ['diagonal', 'ganoidal', 'gonadial'], - 'ganoidean': ['ganoidean', 'indogaean'], - 'ganoidian': ['agoniadin', 'anangioid', 'ganoidian'], - 'ganosis': ['agnosis', 'ganosis'], - 'gansel': ['angles', 'gansel'], - 'gant': ['gant', 'gnat', 'tang'], - 'ganta': ['ganta', 'tanga'], - 'ganton': ['ganton', 'tongan'], - 'gantries': ['astringe', 'ganister', 'gantries'], - 'gantry': ['gantry', 'gyrant'], - 'ganymede': ['ganymede', 'megadyne'], - 'ganzie': ['agnize', 'ganzie'], - 'gaol': ['gaol', 'goal', 'gola', 'olga'], - 'gaoler': ['galore', 'gaoler'], - 'gaon': ['agon', 'ango', 'gaon', 'goan', 'gona'], - 'gaonic': ['agonic', 'angico', 'gaonic', 'goniac'], - 'gapa': ['gapa', 'paga'], - 'gape': ['gape', 'page', 'peag', 'pega'], - 'gaper': ['gaper', 'grape', 'pager', 'parge'], - 'gar': ['gar', 'gra', 'rag'], - 'gara': ['agar', 'agra', 'gara', 'raga'], - 'garamond': ['dragoman', 'garamond', 'ondagram'], - 'garance': ['carnage', 'cranage', 'garance'], - 'garb': ['brag', 'garb', 'grab'], - 'garbel': ['garbel', 'garble'], - 'garble': ['garbel', 'garble'], - 'garbless': ['bragless', 'garbless'], - 'garce': ['cager', 'garce', 'grace'], - 'garcinia': ['agaricin', 'garcinia'], - 'gardeen': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'], - 'garden': ['danger', 'gander', 'garden', 'ranged'], - 'gardened': ['deranged', 'gardened'], - 'gardener': ['deranger', 'gardener'], - 'gardenful': ['dangerful', 'gardenful'], - 'gardenia': ['drainage', 'gardenia'], - 'gardenin': ['gardenin', 'grenadin'], - 'gardenless': ['dangerless', 'gardenless'], - 'gare': ['ager', 'agre', 'gare', 'gear', 'rage'], - 'gareh': ['gareh', 'gerah'], - 'garetta': ['garetta', 'rattage', 'regatta'], - 'garewaite': ['garewaite', 'waiterage'], - 'garfish': ['garfish', 'ragfish'], - 'garget': ['garget', 'tagger'], - 'gargety': ['gargety', 'raggety'], - 'gargle': ['gargle', 'gregal', 'lagger', 'raggle'], - 'garhwali': ['gahrwali', 'garhwali'], - 'garial': ['argali', 'garial'], - 'garle': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'garment': ['garment', 'margent'], - 'garmenture': ['garmenture', 'reargument'], - 'garn': ['garn', 'gnar', 'rang'], - 'garnel': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'], - 'garner': ['garner', 'ranger'], - 'garnet': ['argent', 'garnet', 'garten', 'tanger'], - 'garneter': ['argenter', 'garneter'], - 'garnetiferous': ['argentiferous', 'garnetiferous'], - 'garnets': ['angster', 'garnets', 'nagster', 'strange'], - 'garnett': ['garnett', 'gnatter', 'gratten', 'tergant'], - 'garnice': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'], - 'garniec': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'], - 'garnish': ['garnish', 'rashing'], - 'garnished': ['degarnish', 'garnished'], - 'garnisher': ['garnisher', 'regarnish'], - 'garo': ['argo', 'garo', 'gora'], - 'garran': ['garran', 'ragnar'], - 'garret': ['garret', 'garter', 'grater', 'targer'], - 'garreted': ['garreted', 'gartered'], - 'garroter': ['garroter', 'regrator'], - 'garten': ['argent', 'garnet', 'garten', 'tanger'], - 'garter': ['garret', 'garter', 'grater', 'targer'], - 'gartered': ['garreted', 'gartered'], - 'gartering': ['gartering', 'regrating'], - 'garum': ['garum', 'murga'], - 'gary': ['gary', 'gray'], - 'gas': ['gas', 'sag'], - 'gasan': ['gasan', 'sanga'], - 'gash': ['gash', 'shag'], - 'gasless': ['gasless', 'glasses', 'sagless'], - 'gaslit': ['algist', 'gaslit'], - 'gasoliner': ['gasoliner', 'seignoral'], - 'gasper': ['gasper', 'sparge'], - 'gast': ['gast', 'stag'], - 'gaster': ['gaster', 'stager'], - 'gastrin': ['gastrin', 'staring'], - 'gastroenteritis': ['enterogastritis', 'gastroenteritis'], - 'gastroesophagostomy': ['esophagogastrostomy', 'gastroesophagostomy'], - 'gastrohepatic': ['gastrohepatic', 'hepatogastric'], - 'gastronomic': ['gastronomic', 'monogastric'], - 'gastropathic': ['gastropathic', 'graphostatic'], - 'gastrophrenic': ['gastrophrenic', 'nephrogastric', 'phrenogastric'], - 'gastrular': ['gastrular', 'stragular'], - 'gat': ['gat', 'tag'], - 'gate': ['gaet', 'gate', 'geat', 'geta'], - 'gateman': ['gateman', 'magenta', 'magnate', 'magneta'], - 'gater': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'], - 'gateward': ['drawgate', 'gateward'], - 'gateway': ['gateway', 'getaway', 'waygate'], - 'gatherer': ['gatherer', 'regather'], - 'gator': ['argot', 'gator', 'gotra', 'groat'], - 'gatter': ['gatter', 'target'], - 'gaucho': ['gaucho', 'guacho'], - 'gaufer': ['agrufe', 'gaufer', 'gaufre'], - 'gauffer': ['gauffer', 'gauffre'], - 'gauffre': ['gauffer', 'gauffre'], - 'gaufre': ['agrufe', 'gaufer', 'gaufre'], - 'gaul': ['gaul', 'gula'], - 'gaulin': ['gaulin', 'lingua'], - 'gaulter': ['gaulter', 'tegular'], - 'gaum': ['gaum', 'muga'], - 'gaun': ['gaun', 'guan', 'guna', 'uang'], - 'gaunt': ['gaunt', 'tunga'], - 'gaur': ['gaur', 'guar', 'ruga'], - 'gaura': ['gaura', 'guara'], - 'gaurian': ['anguria', 'gaurian', 'guarani'], - 'gave': ['gave', 'vage', 'vega'], - 'gavyuti': ['gavyuti', 'vaguity'], - 'gaw': ['gaw', 'wag'], - 'gawn': ['gawn', 'gnaw', 'wang'], - 'gay': ['agy', 'gay'], - 'gaz': ['gaz', 'zag'], - 'gazel': ['gazel', 'glaze'], - 'gazer': ['gazer', 'graze'], - 'gazon': ['gazon', 'zogan'], - 'gazy': ['gazy', 'zyga'], - 'geal': ['gael', 'gale', 'geal'], - 'gean': ['agen', 'gaen', 'gane', 'gean', 'gena'], - 'gear': ['ager', 'agre', 'gare', 'gear', 'rage'], - 'geared': ['agreed', 'geared'], - 'gearless': ['eelgrass', 'gearless', 'rageless'], - 'gearman': ['gearman', 'manager'], - 'gearset': ['ergates', 'gearset', 'geaster'], - 'geaster': ['ergates', 'gearset', 'geaster'], - 'geat': ['gaet', 'gate', 'geat', 'geta'], - 'gebur': ['bugre', 'gebur'], - 'ged': ['deg', 'ged'], - 'gedder': ['dredge', 'gedder'], - 'geest': ['egest', 'geest', 'geste'], - 'gegger': ['gegger', 'gregge'], - 'geheimrat': ['geheimrat', 'hermitage'], - 'gein': ['gein', 'gien'], - 'geira': ['geira', 'regia'], - 'geison': ['geison', 'isogen'], - 'geissospermine': ['geissospermine', 'spermiogenesis'], - 'gel': ['gel', 'leg'], - 'gelable': ['gabelle', 'gelable'], - 'gelasian': ['anglaise', 'gelasian'], - 'gelastic': ['gelastic', 'gestical'], - 'gelatin': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'], - 'gelatinate': ['gelatinate', 'nagatelite'], - 'gelatined': ['delignate', 'gelatined'], - 'gelatinizer': ['gelatinizer', 'integralize'], - 'gelatinoid': ['deligation', 'gadolinite', 'gelatinoid'], - 'gelation': ['gelation', 'lagonite', 'legation'], - 'gelatose': ['gelatose', 'segolate'], - 'geldable': ['gabelled', 'geldable'], - 'gelder': ['gelder', 'ledger', 'redleg'], - 'gelding': ['gelding', 'ledging'], - 'gelid': ['gelid', 'glide'], - 'gelidness': ['gelidness', 'glideness'], - 'gelosin': ['gelosin', 'lignose'], - 'gem': ['gem', 'meg'], - 'gemara': ['gemara', 'ramage'], - 'gemaric': ['gemaric', 'grimace', 'megaric'], - 'gemarist': ['gemarist', 'magister', 'sterigma'], - 'gematria': ['gematria', 'maritage'], - 'gemul': ['gemul', 'glume'], - 'gena': ['agen', 'gaen', 'gane', 'gean', 'gena'], - 'genal': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'genarch': ['changer', 'genarch'], - 'gendarme': ['edgerman', 'gendarme'], - 'genear': ['egeran', 'enrage', 'ergane', 'genear', 'genera'], - 'geneat': ['geneat', 'negate', 'tegean'], - 'genera': ['egeran', 'enrage', 'ergane', 'genear', 'genera'], - 'generable': ['generable', 'greenable'], - 'general': ['enlarge', 'general', 'gleaner'], - 'generalist': ['easterling', 'generalist'], - 'generall': ['allergen', 'generall'], - 'generation': ['generation', 'renegation'], - 'generic': ['energic', 'generic'], - 'generical': ['energical', 'generical'], - 'genesiac': ['agenesic', 'genesiac'], - 'genesial': ['ensilage', 'genesial', 'signalee'], - 'genetical': ['clientage', 'genetical'], - 'genetta': ['genetta', 'tentage'], - 'geneura': ['geneura', 'uneager'], - 'geneva': ['avenge', 'geneva', 'vangee'], - 'genial': ['algine', 'genial', 'linage'], - 'genicular': ['genicular', 'neuralgic'], - 'genie': ['eigne', 'genie'], - 'genion': ['genion', 'inogen'], - 'genipa': ['genipa', 'piegan'], - 'genista': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'genistein': ['genistein', 'gentisein'], - 'genital': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'], - 'genitals': ['galenist', 'genitals', 'stealing'], - 'genitival': ['genitival', 'vigilante'], - 'genitocrural': ['crurogenital', 'genitocrural'], - 'genitor': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'], - 'genitorial': ['genitorial', 'religation'], - 'genitory': ['genitory', 'ortygine'], - 'genitourinary': ['genitourinary', 'urinogenitary'], - 'geniture': ['geniture', 'guerinet'], - 'genizero': ['genizero', 'negroize'], - 'genoa': ['agone', 'genoa'], - 'genoblastic': ['blastogenic', 'genoblastic'], - 'genocidal': ['algedonic', 'genocidal'], - 'genom': ['genom', 'gnome'], - 'genotypical': ['genotypical', 'ptyalogenic'], - 'genre': ['genre', 'green', 'neger', 'reneg'], - 'genro': ['ergon', 'genro', 'goner', 'negro'], - 'gent': ['gent', 'teng'], - 'gentes': ['gentes', 'gesten'], - 'genthite': ['genthite', 'teething'], - 'gentian': ['antigen', 'gentian'], - 'gentianic': ['antigenic', 'gentianic'], - 'gentisein': ['genistein', 'gentisein'], - 'gentle': ['gentle', 'telegn'], - 'gentrice': ['erecting', 'gentrice'], - 'genua': ['augen', 'genua'], - 'genual': ['genual', 'leguan'], - 'genuine': ['genuine', 'ingenue'], - 'genus': ['genus', 'negus'], - 'geo': ['ego', 'geo'], - 'geocentric': ['ectrogenic', 'egocentric', 'geocentric'], - 'geocratic': ['categoric', 'geocratic'], - 'geocronite': ['erotogenic', 'geocronite', 'orogenetic'], - 'geodal': ['algedo', 'geodal'], - 'geode': ['geode', 'ogeed'], - 'geodiatropism': ['diageotropism', 'geodiatropism'], - 'geoduck': ['geoduck', 'goeduck'], - 'geohydrology': ['geohydrology', 'hydrogeology'], - 'geoid': ['diego', 'dogie', 'geoid'], - 'geoidal': ['galeoid', 'geoidal'], - 'geoisotherm': ['geoisotherm', 'isogeotherm'], - 'geomagnetic': ['gametogenic', 'gamogenetic', 'geomagnetic'], - 'geomant': ['geomant', 'magneto', 'megaton', 'montage'], - 'geomantic': ['atmogenic', 'geomantic'], - 'geometrical': ['geometrical', 'glaciometer'], - 'geometrina': ['angiometer', 'ergotamine', 'geometrina'], - 'geon': ['geon', 'gone'], - 'geonim': ['geonim', 'imogen'], - 'georama': ['georama', 'roamage'], - 'geotectonic': ['geotectonic', 'tocogenetic'], - 'geotic': ['geotic', 'goetic'], - 'geotical': ['ectoglia', 'geotical', 'goetical'], - 'geotonic': ['geotonic', 'otogenic'], - 'geoty': ['geoty', 'goety'], - 'ger': ['erg', 'ger', 'reg'], - 'gerah': ['gareh', 'gerah'], - 'geraldine': ['engrailed', 'geraldine'], - 'geranial': ['algerian', 'geranial', 'regalian'], - 'geranic': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'], - 'geraniol': ['geraniol', 'regional'], - 'geranomorph': ['geranomorph', 'monographer', 'nomographer'], - 'geranyl': ['angerly', 'geranyl'], - 'gerard': ['darger', 'gerard', 'grader', 'redrag', 'regard'], - 'gerastian': ['agrestian', 'gerastian', 'stangeria'], - 'geraty': ['geraty', 'gyrate'], - 'gerb': ['berg', 'gerb'], - 'gerbe': ['gerbe', 'grebe', 'rebeg'], - 'gerbera': ['bargeer', 'gerbera'], - 'gerenda': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'], - 'gerendum': ['gerendum', 'unmerged'], - 'gerent': ['gerent', 'regent'], - 'gerenuk': ['gerenuk', 'greenuk'], - 'gerim': ['gerim', 'grime'], - 'gerip': ['gerip', 'gripe'], - 'german': ['engram', 'german', 'manger'], - 'germania': ['germania', 'megarian'], - 'germanics': ['germanics', 'screaming'], - 'germanification': ['germanification', 'remagnification'], - 'germanify': ['germanify', 'remagnify'], - 'germanious': ['germanious', 'gramineous', 'marigenous'], - 'germanist': ['germanist', 'streaming'], - 'germanite': ['germanite', 'germinate', 'gramenite', 'mangerite'], - 'germanly': ['germanly', 'germanyl'], - 'germanyl': ['germanly', 'germanyl'], - 'germinal': ['germinal', 'maligner', 'malinger'], - 'germinant': ['germinant', 'minargent'], - 'germinate': ['germanite', 'germinate', 'gramenite', 'mangerite'], - 'germon': ['germon', 'monger', 'morgen'], - 'geronomite': ['geronomite', 'goniometer'], - 'geront': ['geront', 'tonger'], - 'gerontal': ['argentol', 'gerontal'], - 'gerontes': ['estrogen', 'gerontes'], - 'gerontic': ['gerontic', 'negrotic'], - 'gerontism': ['gerontism', 'monergist'], - 'gerres': ['gerres', 'serger'], - 'gersum': ['gersum', 'mergus'], - 'gerund': ['dunger', 'gerund', 'greund', 'nudger'], - 'gerundive': ['gerundive', 'ungrieved'], - 'gerusia': ['ergusia', 'gerusia', 'sarigue'], - 'gervas': ['gervas', 'graves'], - 'gervase': ['gervase', 'greaves', 'servage'], - 'ges': ['ges', 'seg'], - 'gesan': ['agnes', 'gesan'], - 'gesith': ['gesith', 'steigh'], - 'gesning': ['gesning', 'ginseng'], - 'gest': ['gest', 'steg'], - 'gestapo': ['gestapo', 'postage'], - 'gestate': ['gestate', 'tagetes'], - 'geste': ['egest', 'geest', 'geste'], - 'gesten': ['gentes', 'gesten'], - 'gestical': ['gelastic', 'gestical'], - 'gesticular': ['gesticular', 'scutigeral'], - 'gesture': ['gesture', 'guester'], - 'get': ['get', 'teg'], - 'geta': ['gaet', 'gate', 'geat', 'geta'], - 'getaway': ['gateway', 'getaway', 'waygate'], - 'gettable': ['begettal', 'gettable'], - 'getup': ['getup', 'upget'], - 'geyerite': ['geyerite', 'tigereye'], - 'ghaist': ['ghaist', 'tagish'], - 'ghent': ['ghent', 'thegn'], - 'ghosty': ['ghosty', 'hogsty'], - 'ghoul': ['ghoul', 'lough'], - 'giansar': ['giansar', 'sarangi'], - 'giant': ['giant', 'tangi', 'tiang'], - 'gib': ['big', 'gib'], - 'gibbon': ['gibbon', 'gobbin'], - 'gibel': ['bilge', 'gibel'], - 'gibing': ['biggin', 'gibing'], - 'gid': ['dig', 'gid'], - 'gideonite': ['diogenite', 'gideonite'], - 'gien': ['gein', 'gien'], - 'gienah': ['gienah', 'hangie'], - 'gif': ['fig', 'gif'], - 'gifola': ['filago', 'gifola'], - 'gifted': ['fidget', 'gifted'], - 'gigman': ['gaming', 'gigman'], - 'gigsman': ['gangism', 'gigsman'], - 'gila': ['gail', 'gali', 'gila', 'glia'], - 'gilaki': ['gilaki', 'giliak'], - 'gilbertese': ['gilbertese', 'selbergite'], - 'gilden': ['dingle', 'elding', 'engild', 'gilden'], - 'gilder': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'], - 'gilding': ['gilding', 'gliding'], - 'gileno': ['eloign', 'gileno', 'legion'], - 'giles': ['giles', 'gilse'], - 'giliak': ['gilaki', 'giliak'], - 'giller': ['giller', 'grille', 'regill'], - 'gilo': ['gilo', 'goli'], - 'gilpy': ['gilpy', 'pigly'], - 'gilse': ['giles', 'gilse'], - 'gim': ['gim', 'mig'], - 'gimel': ['gimel', 'glime'], - 'gimmer': ['gimmer', 'grimme', 'megrim'], - 'gimper': ['gimper', 'impreg'], - 'gin': ['gin', 'ing', 'nig'], - 'ginger': ['ginger', 'nigger'], - 'gingery': ['gingery', 'niggery'], - 'ginglymodi': ['ginglymodi', 'ginglymoid'], - 'ginglymoid': ['ginglymodi', 'ginglymoid'], - 'gink': ['gink', 'king'], - 'ginned': ['ending', 'ginned'], - 'ginner': ['enring', 'ginner'], - 'ginney': ['ginney', 'nignye'], - 'ginseng': ['gesning', 'ginseng'], - 'ginward': ['drawing', 'ginward', 'warding'], - 'gio': ['gio', 'goi'], - 'giornata': ['giornata', 'gratiano'], - 'giornatate': ['giornatate', 'tetragonia'], - 'gip': ['gip', 'pig'], - 'gipper': ['gipper', 'grippe'], - 'girandole': ['girandole', 'negroidal'], - 'girasole': ['girasole', 'seraglio'], - 'girba': ['bragi', 'girba'], - 'gird': ['gird', 'grid'], - 'girder': ['girder', 'ridger'], - 'girding': ['girding', 'ridging'], - 'girdingly': ['girdingly', 'ridgingly'], - 'girdle': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'], - 'girdler': ['dirgler', 'girdler'], - 'girdling': ['girdling', 'ridgling'], - 'girling': ['girling', 'rigling'], - 'girn': ['girn', 'grin', 'ring'], - 'girny': ['girny', 'ringy'], - 'girondin': ['girondin', 'nonrigid'], - 'girsle': ['girsle', 'gisler', 'glires', 'grilse'], - 'girt': ['girt', 'grit', 'trig'], - 'girth': ['girth', 'grith', 'right'], - 'gish': ['gish', 'sigh'], - 'gisla': ['gisla', 'ligas', 'sigla'], - 'gisler': ['girsle', 'gisler', 'glires', 'grilse'], - 'git': ['git', 'tig'], - 'gitalin': ['gitalin', 'tailing'], - 'gith': ['gith', 'thig'], - 'gitksan': ['gitksan', 'skating', 'takings'], - 'gittern': ['gittern', 'gritten', 'retting'], - 'giustina': ['giustina', 'ignatius'], - 'giver': ['giver', 'vergi'], - 'glaceing': ['cageling', 'glaceing'], - 'glacier': ['glacier', 'gracile'], - 'glaciometer': ['geometrical', 'glaciometer'], - 'gladdener': ['gladdener', 'glandered', 'regladden'], - 'glaga': ['galga', 'glaga'], - 'glaik': ['galik', 'glaik'], - 'glaiket': ['glaiket', 'taglike'], - 'glair': ['argil', 'glair', 'grail'], - 'glaireous': ['aligerous', 'glaireous'], - 'glaister': ['glaister', 'regalist'], - 'glaive': ['glaive', 'vagile'], - 'glance': ['cangle', 'glance'], - 'glancer': ['cangler', 'glancer', 'reclang'], - 'glancingly': ['clangingly', 'glancingly'], - 'glandered': ['gladdener', 'glandered', 'regladden'], - 'glans': ['glans', 'slang'], - 'glare': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'glariness': ['glariness', 'grainless'], - 'glary': ['glary', 'gyral'], - 'glasser': ['glasser', 'largess'], - 'glasses': ['gasless', 'glasses', 'sagless'], - 'glassie': ['algesis', 'glassie'], - 'glassine': ['gainless', 'glassine'], - 'glaucin': ['glaucin', 'glucina'], - 'glaucine': ['cuailnge', 'glaucine'], - 'glaum': ['algum', 'almug', 'glaum', 'gluma', 'mulga'], - 'glaur': ['glaur', 'gular'], - 'glaury': ['glaury', 'raguly'], - 'glaver': ['glaver', 'gravel'], - 'glaze': ['gazel', 'glaze'], - 'glazy': ['glazy', 'zygal'], - 'gleamy': ['gamely', 'gleamy', 'mygale'], - 'glean': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'gleaner': ['enlarge', 'general', 'gleaner'], - 'gleary': ['argyle', 'gleary'], - 'gleba': ['bagel', 'belga', 'gable', 'gleba'], - 'glebal': ['begall', 'glebal'], - 'glede': ['glede', 'gleed', 'ledge'], - 'gledy': ['gledy', 'ledgy'], - 'gleed': ['glede', 'gleed', 'ledge'], - 'gleeman': ['gleeman', 'melange'], - 'glia': ['gail', 'gali', 'gila', 'glia'], - 'gliadin': ['dialing', 'gliadin'], - 'glial': ['galli', 'glial'], - 'glibness': ['beslings', 'blessing', 'glibness'], - 'glidder': ['glidder', 'griddle'], - 'glide': ['gelid', 'glide'], - 'glideness': ['gelidness', 'glideness'], - 'glider': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'], - 'gliding': ['gilding', 'gliding'], - 'glime': ['gimel', 'glime'], - 'glink': ['glink', 'kling'], - 'glires': ['girsle', 'gisler', 'glires', 'grilse'], - 'glisten': ['glisten', 'singlet'], - 'glister': ['glister', 'gristle'], - 'glitnir': ['glitnir', 'ritling'], - 'glitter': ['glitter', 'grittle'], - 'gloater': ['argolet', 'gloater', 'legator'], - 'gloating': ['gloating', 'goatling'], - 'globate': ['boltage', 'globate'], - 'globe': ['bogle', 'globe'], - 'globin': ['globin', 'goblin', 'lobing'], - 'gloea': ['gloea', 'legoa'], - 'glome': ['glome', 'golem', 'molge'], - 'glomerate': ['algometer', 'glomerate'], - 'glore': ['glore', 'ogler'], - 'gloria': ['gloria', 'larigo', 'logria'], - 'gloriana': ['argolian', 'gloriana'], - 'gloriette': ['gloriette', 'rigolette'], - 'glorifiable': ['frigolabile', 'glorifiable'], - 'glossed': ['dogless', 'glossed', 'godless'], - 'glosser': ['glosser', 'regloss'], - 'glossitic': ['glossitic', 'logistics'], - 'glossohyal': ['glossohyal', 'hyoglossal'], - 'glossolabial': ['glossolabial', 'labioglossal'], - 'glossolabiolaryngeal': ['glossolabiolaryngeal', 'labioglossolaryngeal'], - 'glossolabiopharyngeal': ['glossolabiopharyngeal', 'labioglossopharyngeal'], - 'glottid': ['glottid', 'goldtit'], - 'glover': ['glover', 'grovel'], - 'gloveress': ['gloveress', 'groveless'], - 'glow': ['glow', 'gowl'], - 'glower': ['glower', 'reglow'], - 'gloy': ['gloy', 'logy'], - 'glucemia': ['glucemia', 'mucilage'], - 'glucina': ['glaucin', 'glucina'], - 'glucine': ['glucine', 'lucigen'], - 'glucinum': ['cingulum', 'glucinum'], - 'glucosane': ['consulage', 'glucosane'], - 'glue': ['glue', 'gule', 'luge'], - 'gluer': ['gluer', 'gruel', 'luger'], - 'gluma': ['algum', 'almug', 'glaum', 'gluma', 'mulga'], - 'glume': ['gemul', 'glume'], - 'glumose': ['glumose', 'lugsome'], - 'gluten': ['englut', 'gluten', 'ungelt'], - 'glutin': ['glutin', 'luting', 'ungilt'], - 'glutter': ['glutter', 'guttler'], - 'glycerate': ['electragy', 'glycerate'], - 'glycerinize': ['glycerinize', 'glycerizine'], - 'glycerizine': ['glycerinize', 'glycerizine'], - 'glycerophosphate': ['glycerophosphate', 'phosphoglycerate'], - 'glycocin': ['glycocin', 'glyconic'], - 'glyconic': ['glycocin', 'glyconic'], - 'glycosine': ['glycosine', 'lysogenic'], - 'glycosuria': ['glycosuria', 'graciously'], - 'gnaeus': ['gnaeus', 'unsage'], - 'gnaphalium': ['gnaphalium', 'phalangium'], - 'gnar': ['garn', 'gnar', 'rang'], - 'gnarled': ['dangler', 'gnarled'], - 'gnash': ['gnash', 'shang'], - 'gnat': ['gant', 'gnat', 'tang'], - 'gnatho': ['gnatho', 'thonga'], - 'gnathotheca': ['chaetognath', 'gnathotheca'], - 'gnatling': ['gnatling', 'tangling'], - 'gnatter': ['garnett', 'gnatter', 'gratten', 'tergant'], - 'gnaw': ['gawn', 'gnaw', 'wang'], - 'gnetum': ['gnetum', 'nutmeg'], - 'gnome': ['genom', 'gnome'], - 'gnomic': ['coming', 'gnomic'], - 'gnomist': ['gnomist', 'mosting'], - 'gnomonic': ['gnomonic', 'oncoming'], - 'gnomonical': ['cognominal', 'gnomonical'], - 'gnostic': ['costing', 'gnostic'], - 'gnostical': ['gnostical', 'nostalgic'], - 'gnu': ['gnu', 'gun'], - 'go': ['go', 'og'], - 'goa': ['ago', 'goa'], - 'goad': ['dago', 'goad'], - 'goal': ['gaol', 'goal', 'gola', 'olga'], - 'goan': ['agon', 'ango', 'gaon', 'goan', 'gona'], - 'goat': ['goat', 'toag', 'toga'], - 'goatee': ['goatee', 'goetae'], - 'goatlike': ['goatlike', 'togalike'], - 'goatling': ['gloating', 'goatling'], - 'goatly': ['goatly', 'otalgy'], - 'gob': ['bog', 'gob'], - 'goban': ['bogan', 'goban'], - 'gobbe': ['bebog', 'begob', 'gobbe'], - 'gobbin': ['gibbon', 'gobbin'], - 'gobelin': ['gobelin', 'gobline', 'ignoble', 'inglobe'], - 'gobian': ['bagnio', 'gabion', 'gobian'], - 'goblet': ['boglet', 'goblet'], - 'goblin': ['globin', 'goblin', 'lobing'], - 'gobline': ['gobelin', 'gobline', 'ignoble', 'inglobe'], - 'goblinry': ['boringly', 'goblinry'], - 'gobo': ['bogo', 'gobo'], - 'goby': ['bogy', 'bygo', 'goby'], - 'goclenian': ['congenial', 'goclenian'], - 'god': ['dog', 'god'], - 'goddam': ['goddam', 'mogdad'], - 'gode': ['doeg', 'doge', 'gode'], - 'godhead': ['doghead', 'godhead'], - 'godhood': ['doghood', 'godhood'], - 'godless': ['dogless', 'glossed', 'godless'], - 'godlike': ['doglike', 'godlike'], - 'godling': ['godling', 'lodging'], - 'godly': ['dogly', 'godly', 'goldy'], - 'godship': ['dogship', 'godship'], - 'godwinian': ['downingia', 'godwinian'], - 'goeduck': ['geoduck', 'goeduck'], - 'goel': ['egol', 'goel', 'loge', 'ogle', 'oleg'], - 'goer': ['goer', 'gore', 'ogre'], - 'goes': ['goes', 'sego'], - 'goetae': ['goatee', 'goetae'], - 'goetic': ['geotic', 'goetic'], - 'goetical': ['ectoglia', 'geotical', 'goetical'], - 'goety': ['geoty', 'goety'], - 'goglet': ['goglet', 'toggel', 'toggle'], - 'goi': ['gio', 'goi'], - 'goidel': ['goidel', 'goldie'], - 'goitral': ['goitral', 'larigot', 'ligator'], - 'gol': ['gol', 'log'], - 'gola': ['gaol', 'goal', 'gola', 'olga'], - 'golden': ['engold', 'golden'], - 'goldenmouth': ['goldenmouth', 'longmouthed'], - 'golder': ['golder', 'lodger'], - 'goldie': ['goidel', 'goldie'], - 'goldtit': ['glottid', 'goldtit'], - 'goldy': ['dogly', 'godly', 'goldy'], - 'golee': ['eloge', 'golee'], - 'golem': ['glome', 'golem', 'molge'], - 'golf': ['flog', 'golf'], - 'golfer': ['golfer', 'reflog'], - 'goli': ['gilo', 'goli'], - 'goliard': ['argolid', 'goliard'], - 'golo': ['golo', 'gool'], - 'goma': ['goma', 'ogam'], - 'gomari': ['gamori', 'gomari', 'gromia'], - 'gomart': ['gomart', 'margot'], - 'gomphrena': ['gomphrena', 'nephogram'], - 'gon': ['gon', 'nog'], - 'gona': ['agon', 'ango', 'gaon', 'goan', 'gona'], - 'gonad': ['donga', 'gonad'], - 'gonadial': ['diagonal', 'ganoidal', 'gonadial'], - 'gonal': ['along', 'gonal', 'lango', 'longa', 'nogal'], - 'gond': ['dong', 'gond'], - 'gondi': ['dingo', 'doing', 'gondi', 'gonid'], - 'gondola': ['dongola', 'gondola'], - 'gondolier': ['gondolier', 'negroloid'], - 'gone': ['geon', 'gone'], - 'goner': ['ergon', 'genro', 'goner', 'negro'], - 'gonesome': ['gonesome', 'osmogene'], - 'gongoresque': ['gongoresque', 'gorgonesque'], - 'gonia': ['gonia', 'ngaio', 'nogai'], - 'goniac': ['agonic', 'angico', 'gaonic', 'goniac'], - 'goniale': ['goniale', 'noilage'], - 'goniaster': ['goniaster', 'orangeist'], - 'goniatitid': ['digitation', 'goniatitid'], - 'gonid': ['dingo', 'doing', 'gondi', 'gonid'], - 'gonidia': ['angioid', 'gonidia'], - 'gonidiferous': ['gonidiferous', 'indigoferous'], - 'goniometer': ['geronomite', 'goniometer'], - 'gonomery': ['gonomery', 'merogony'], - 'gonosome': ['gonosome', 'mongoose'], - 'gonyocele': ['coelogyne', 'gonyocele'], - 'gonys': ['gonys', 'songy'], - 'goober': ['booger', 'goober'], - 'goodyear': ['goodyear', 'goodyera'], - 'goodyera': ['goodyear', 'goodyera'], - 'goof': ['fogo', 'goof'], - 'goofer': ['forego', 'goofer'], - 'gool': ['golo', 'gool'], - 'gools': ['gools', 'logos'], - 'goop': ['goop', 'pogo'], - 'gor': ['gor', 'rog'], - 'gora': ['argo', 'garo', 'gora'], - 'goral': ['algor', 'argol', 'goral', 'largo'], - 'goran': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'gorb': ['borg', 'brog', 'gorb'], - 'gorbal': ['brolga', 'gorbal'], - 'gorce': ['corge', 'gorce'], - 'gordian': ['gordian', 'idorgan', 'roading'], - 'gordon': ['drongo', 'gordon'], - 'gordonia': ['gordonia', 'organoid', 'rigadoon'], - 'gore': ['goer', 'gore', 'ogre'], - 'gorer': ['gorer', 'roger'], - 'gorge': ['gorge', 'grego'], - 'gorged': ['dogger', 'gorged'], - 'gorger': ['gorger', 'gregor'], - 'gorgerin': ['gorgerin', 'ringgoer'], - 'gorgonesque': ['gongoresque', 'gorgonesque'], - 'goric': ['corgi', 'goric', 'orgic'], - 'goring': ['goring', 'gringo'], - 'gorse': ['gorse', 'soger'], - 'gortonian': ['gortonian', 'organotin'], - 'gory': ['gory', 'gyro', 'orgy'], - 'gos': ['gos', 'sog'], - 'gosain': ['gosain', 'isagon', 'sagoin'], - 'gosh': ['gosh', 'shog'], - 'gospel': ['gospel', 'spogel'], - 'gossipry': ['gossipry', 'gryposis'], - 'got': ['got', 'tog'], - 'gotra': ['argot', 'gator', 'gotra', 'groat'], - 'goup': ['goup', 'ogpu', 'upgo'], - 'gourde': ['drogue', 'gourde'], - 'gout': ['gout', 'toug'], - 'goutish': ['goutish', 'outsigh'], - 'gowan': ['gowan', 'wagon', 'wonga'], - 'gowdnie': ['gowdnie', 'widgeon'], - 'gowl': ['glow', 'gowl'], - 'gown': ['gown', 'wong'], - 'goyin': ['goyin', 'yogin'], - 'gra': ['gar', 'gra', 'rag'], - 'grab': ['brag', 'garb', 'grab'], - 'grabble': ['gabbler', 'grabble'], - 'graben': ['banger', 'engarb', 'graben'], - 'grace': ['cager', 'garce', 'grace'], - 'gracile': ['glacier', 'gracile'], - 'graciously': ['glycosuria', 'graciously'], - 'grad': ['darg', 'drag', 'grad'], - 'gradation': ['gradation', 'indagator', 'tanagroid'], - 'grade': ['edgar', 'grade'], - 'graded': ['gadder', 'graded'], - 'grader': ['darger', 'gerard', 'grader', 'redrag', 'regard'], - 'gradient': ['gradient', 'treading'], - 'gradienter': ['gradienter', 'intergrade'], - 'gradientia': ['gradientia', 'grantiidae'], - 'gradin': ['daring', 'dingar', 'gradin'], - 'gradine': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'], - 'grading': ['grading', 'niggard'], - 'graeae': ['aerage', 'graeae'], - 'graeme': ['graeme', 'meager', 'meagre'], - 'grafter': ['grafter', 'regraft'], - 'graian': ['graian', 'nagari'], - 'grail': ['argil', 'glair', 'grail'], - 'grailer': ['grailer', 'reglair'], - 'grain': ['agrin', 'grain'], - 'grained': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'], - 'grainer': ['earring', 'grainer'], - 'grainless': ['glariness', 'grainless'], - 'graith': ['aright', 'graith'], - 'grallina': ['grallina', 'granilla'], - 'gralline': ['allergin', 'gralline'], - 'grame': ['grame', 'marge', 'regma'], - 'gramenite': ['germanite', 'germinate', 'gramenite', 'mangerite'], - 'gramineous': ['germanious', 'gramineous', 'marigenous'], - 'graminiform': ['graminiform', 'marginiform'], - 'graminous': ['graminous', 'ignoramus'], - 'gramme': ['gammer', 'gramme'], - 'gramophonic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'], - 'gramophonical': ['gramophonical', 'monographical', 'nomographical'], - 'gramophonically': ['gramophonically', - 'monographically', - 'nomographically', - 'phonogramically'], - 'gramophonist': ['gramophonist', 'monographist'], - 'granadine': ['granadine', 'grenadian'], - 'granate': ['argante', 'granate', 'tanager'], - 'granatum': ['armgaunt', 'granatum'], - 'grand': ['drang', 'grand'], - 'grandam': ['dragman', 'grandam', 'grandma'], - 'grandee': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'], - 'grandeeism': ['grandeeism', 'renegadism'], - 'grandeur': ['grandeur', 'unregard'], - 'grandeval': ['grandeval', 'landgrave'], - 'grandiose': ['grandiose', 'sargonide'], - 'grandma': ['dragman', 'grandam', 'grandma'], - 'grandparental': ['grandparental', 'grandpaternal'], - 'grandpaternal': ['grandparental', 'grandpaternal'], - 'grane': ['anger', 'areng', 'grane', 'range'], - 'grange': ['ganger', 'grange', 'nagger'], - 'grangousier': ['grangousier', 'gregarinous'], - 'granilla': ['grallina', 'granilla'], - 'granite': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'], - 'granivore': ['granivore', 'overgrain'], - 'grano': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'granophyre': ['granophyre', 'renography'], - 'grantee': ['grantee', 'greaten', 'reagent', 'rentage'], - 'granter': ['granter', 'regrant'], - 'granth': ['granth', 'thrang'], - 'grantiidae': ['gradientia', 'grantiidae'], - 'granula': ['angular', 'granula'], - 'granule': ['granule', 'unlarge', 'unregal'], - 'granulite': ['granulite', 'traguline'], - 'grape': ['gaper', 'grape', 'pager', 'parge'], - 'graperoot': ['graperoot', 'prorogate'], - 'graphical': ['algraphic', 'graphical'], - 'graphically': ['calligraphy', 'graphically'], - 'graphologic': ['graphologic', 'logographic'], - 'graphological': ['graphological', 'logographical'], - 'graphology': ['graphology', 'logography'], - 'graphometer': ['graphometer', 'meteorgraph'], - 'graphophonic': ['graphophonic', 'phonographic'], - 'graphostatic': ['gastropathic', 'graphostatic'], - 'graphotypic': ['graphotypic', 'pictography', 'typographic'], - 'grapsidae': ['disparage', 'grapsidae'], - 'grasp': ['grasp', 'sprag'], - 'grasper': ['grasper', 'regrasp', 'sparger'], - 'grasser': ['grasser', 'regrass'], - 'grasshopper': ['grasshopper', 'hoppergrass'], - 'grassman': ['grassman', 'mangrass'], - 'grat': ['grat', 'trag'], - 'grate': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'], - 'grateman': ['grateman', 'mangrate', 'mentagra', 'targeman'], - 'grater': ['garret', 'garter', 'grater', 'targer'], - 'gratiano': ['giornata', 'gratiano'], - 'graticule': ['curtilage', 'cutigeral', 'graticule'], - 'gratiolin': ['gratiolin', 'largition', 'tailoring'], - 'gratis': ['gratis', 'striga'], - 'gratten': ['garnett', 'gnatter', 'gratten', 'tergant'], - 'graupel': ['earplug', 'graupel', 'plaguer'], - 'gravamen': ['gravamen', 'graveman'], - 'gravel': ['glaver', 'gravel'], - 'graveman': ['gravamen', 'graveman'], - 'graves': ['gervas', 'graves'], - 'gravure': ['gravure', 'verruga'], - 'gray': ['gary', 'gray'], - 'grayling': ['grayling', 'ragingly'], - 'graze': ['gazer', 'graze'], - 'greaser': ['argeers', 'greaser', 'serrage'], - 'great': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'], - 'greaten': ['grantee', 'greaten', 'reagent', 'rentage'], - 'greater': ['greater', 'regrate', 'terrage'], - 'greaves': ['gervase', 'greaves', 'servage'], - 'grebe': ['gerbe', 'grebe', 'rebeg'], - 'grecian': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'], - 'grecomania': ['ergomaniac', 'grecomania'], - 'greed': ['edger', 'greed'], - 'green': ['genre', 'green', 'neger', 'reneg'], - 'greenable': ['generable', 'greenable'], - 'greener': ['greener', 'regreen', 'reneger'], - 'greenish': ['greenish', 'sheering'], - 'greenland': ['englander', 'greenland'], - 'greenuk': ['gerenuk', 'greenuk'], - 'greeny': ['energy', 'greeny', 'gyrene'], - 'greet': ['egret', 'greet', 'reget'], - 'greeter': ['greeter', 'regreet'], - 'gregal': ['gargle', 'gregal', 'lagger', 'raggle'], - 'gregarian': ['gregarian', 'gregarina'], - 'gregarina': ['gregarian', 'gregarina'], - 'gregarinous': ['grangousier', 'gregarinous'], - 'grege': ['egger', 'grege'], - 'gregge': ['gegger', 'gregge'], - 'grego': ['gorge', 'grego'], - 'gregor': ['gorger', 'gregor'], - 'greige': ['greige', 'reggie'], - 'grein': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'], - 'gremial': ['gremial', 'lamiger'], - 'gremlin': ['gremlin', 'mingler'], - 'grenade': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'], - 'grenadian': ['granadine', 'grenadian'], - 'grenadier': ['earringed', 'grenadier'], - 'grenadin': ['gardenin', 'grenadin'], - 'grenadine': ['endearing', 'engrained', 'grenadine'], - 'greta': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'], - 'gretel': ['gretel', 'reglet'], - 'greund': ['dunger', 'gerund', 'greund', 'nudger'], - 'grewia': ['earwig', 'grewia'], - 'grey': ['grey', 'gyre'], - 'grid': ['gird', 'grid'], - 'griddle': ['glidder', 'griddle'], - 'gride': ['dirge', 'gride', 'redig', 'ridge'], - 'gridelin': ['dreiling', 'gridelin'], - 'grieve': ['grieve', 'regive'], - 'grieved': ['diverge', 'grieved'], - 'grille': ['giller', 'grille', 'regill'], - 'grilse': ['girsle', 'gisler', 'glires', 'grilse'], - 'grimace': ['gemaric', 'grimace', 'megaric'], - 'grime': ['gerim', 'grime'], - 'grimme': ['gimmer', 'grimme', 'megrim'], - 'grin': ['girn', 'grin', 'ring'], - 'grinder': ['grinder', 'regrind'], - 'grindle': ['dringle', 'grindle'], - 'gringo': ['goring', 'gringo'], - 'grip': ['grip', 'prig'], - 'gripe': ['gerip', 'gripe'], - 'gripeful': ['fireplug', 'gripeful'], - 'griper': ['griper', 'regrip'], - 'gripman': ['gripman', 'prigman', 'ramping'], - 'grippe': ['gipper', 'grippe'], - 'grisounite': ['grisounite', 'grisoutine', 'integrious'], - 'grisoutine': ['grisounite', 'grisoutine', 'integrious'], - 'grist': ['grist', 'grits', 'strig'], - 'gristle': ['glister', 'gristle'], - 'grit': ['girt', 'grit', 'trig'], - 'grith': ['girth', 'grith', 'right'], - 'grits': ['grist', 'grits', 'strig'], - 'gritten': ['gittern', 'gritten', 'retting'], - 'grittle': ['glitter', 'grittle'], - 'grivna': ['grivna', 'raving'], - 'grizzel': ['grizzel', 'grizzle'], - 'grizzle': ['grizzel', 'grizzle'], - 'groan': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'groaner': ['groaner', 'oranger', 'organer'], - 'groaning': ['groaning', 'organing'], - 'groat': ['argot', 'gator', 'gotra', 'groat'], - 'grobian': ['biorgan', 'grobian'], - 'groined': ['groined', 'negroid'], - 'gromia': ['gamori', 'gomari', 'gromia'], - 'groove': ['groove', 'overgo'], - 'grope': ['grope', 'porge'], - 'groper': ['groper', 'porger'], - 'groset': ['groset', 'storge'], - 'grossen': ['engross', 'grossen'], - 'grot': ['grot', 'trog'], - 'grotian': ['grotian', 'trigona'], - 'grotto': ['grotto', 'torgot'], - 'grounded': ['grounded', 'underdog', 'undergod'], - 'grouper': ['grouper', 'regroup'], - 'grouse': ['grouse', 'rugose'], - 'grousy': ['grousy', 'gyrous'], - 'grovel': ['glover', 'grovel'], - 'groveless': ['gloveress', 'groveless'], - 'growan': ['awrong', 'growan'], - 'grower': ['grower', 'regrow'], - 'grown': ['grown', 'wrong'], - 'grub': ['burg', 'grub'], - 'grudge': ['grudge', 'rugged'], - 'grudger': ['drugger', 'grudger'], - 'grudgery': ['druggery', 'grudgery'], - 'grue': ['grue', 'urge'], - 'gruel': ['gluer', 'gruel', 'luger'], - 'gruelly': ['gruelly', 'gullery'], - 'grues': ['grues', 'surge'], - 'grun': ['grun', 'rung'], - 'grush': ['grush', 'shrug'], - 'grusinian': ['grusinian', 'unarising'], - 'grutten': ['grutten', 'turgent'], - 'gryposis': ['gossipry', 'gryposis'], - 'guacho': ['gaucho', 'guacho'], - 'guan': ['gaun', 'guan', 'guna', 'uang'], - 'guanamine': ['guanamine', 'guineaman'], - 'guanine': ['anguine', 'guanine', 'guinean'], - 'guar': ['gaur', 'guar', 'ruga'], - 'guara': ['gaura', 'guara'], - 'guarani': ['anguria', 'gaurian', 'guarani'], - 'guarantorship': ['guarantorship', 'uranographist'], - 'guardeen': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'], - 'guarder': ['guarder', 'reguard'], - 'guatusan': ['augustan', 'guatusan'], - 'gud': ['dug', 'gud'], - 'gude': ['degu', 'gude'], - 'guenon': ['guenon', 'ungone'], - 'guepard': ['guepard', 'upgrade'], - 'guerdon': ['guerdon', 'undergo', 'ungored'], - 'guerdoner': ['guerdoner', 'reundergo', 'undergoer', 'undergore'], - 'guerinet': ['geniture', 'guerinet'], - 'guester': ['gesture', 'guester'], - 'guetar': ['argute', 'guetar', 'rugate', 'tuareg'], - 'guetare': ['erugate', 'guetare'], - 'guha': ['augh', 'guha'], - 'guiana': ['guiana', 'iguana'], - 'guib': ['bugi', 'guib'], - 'guineaman': ['guanamine', 'guineaman'], - 'guinean': ['anguine', 'guanine', 'guinean'], - 'guiser': ['guiser', 'sergiu'], - 'gul': ['gul', 'lug'], - 'gula': ['gaul', 'gula'], - 'gulae': ['gulae', 'legua'], - 'gular': ['glaur', 'gular'], - 'gularis': ['agrilus', 'gularis'], - 'gulden': ['gulden', 'lunged'], - 'gule': ['glue', 'gule', 'luge'], - 'gules': ['gules', 'gusle'], - 'gullery': ['gruelly', 'gullery'], - 'gullible': ['bluegill', 'gullible'], - 'gulonic': ['gulonic', 'unlogic'], - 'gulp': ['gulp', 'plug'], - 'gulpin': ['gulpin', 'puling'], - 'gum': ['gum', 'mug'], - 'gumbo': ['bogum', 'gumbo'], - 'gumshoe': ['gumshoe', 'hugsome'], - 'gumweed': ['gumweed', 'mugweed'], - 'gun': ['gnu', 'gun'], - 'guna': ['gaun', 'guan', 'guna', 'uang'], - 'gunate': ['gunate', 'tangue'], - 'gundi': ['gundi', 'undig'], - 'gundy': ['dungy', 'gundy'], - 'gunk': ['gunk', 'kung'], - 'gunl': ['gunl', 'lung'], - 'gunnership': ['gunnership', 'unsphering'], - 'gunreach': ['gunreach', 'uncharge'], - 'gunsel': ['gunsel', 'selung', 'slunge'], - 'gunshot': ['gunshot', 'shotgun', 'uhtsong'], - 'gunster': ['gunster', 'surgent'], - 'gunter': ['gunter', 'gurnet', 'urgent'], - 'gup': ['gup', 'pug'], - 'gur': ['gur', 'rug'], - 'gurgeon': ['gurgeon', 'ungorge'], - 'gurgle': ['gurgle', 'lugger', 'ruggle'], - 'gurian': ['gurian', 'ugrian'], - 'guric': ['guric', 'ugric'], - 'gurl': ['gurl', 'lurg'], - 'gurnard': ['drungar', 'gurnard'], - 'gurnet': ['gunter', 'gurnet', 'urgent'], - 'gurt': ['gurt', 'trug'], - 'gush': ['gush', 'shug', 'sugh'], - 'gusher': ['gusher', 'regush'], - 'gusle': ['gules', 'gusle'], - 'gust': ['gust', 'stug'], - 'gut': ['gut', 'tug'], - 'gutless': ['gutless', 'tugless'], - 'gutlike': ['gutlike', 'tuglike'], - 'gutnish': ['gutnish', 'husting', 'unsight'], - 'guttler': ['glutter', 'guttler'], - 'guttular': ['guttular', 'guttural'], - 'guttural': ['guttular', 'guttural'], - 'gweed': ['gweed', 'wedge'], - 'gymnasic': ['gymnasic', 'syngamic'], - 'gymnastic': ['gymnastic', 'nystagmic'], - 'gynandrous': ['androgynus', 'gynandrous'], - 'gynerium': ['eryngium', 'gynerium'], - 'gynospore': ['gynospore', 'sporogeny'], - 'gypsine': ['gypsine', 'pigsney'], - 'gyral': ['glary', 'gyral'], - 'gyrant': ['gantry', 'gyrant'], - 'gyrate': ['geraty', 'gyrate'], - 'gyration': ['gyration', 'organity', 'ortygian'], - 'gyre': ['grey', 'gyre'], - 'gyrene': ['energy', 'greeny', 'gyrene'], - 'gyro': ['gory', 'gyro', 'orgy'], - 'gyroma': ['gyroma', 'morgay'], - 'gyromitra': ['gyromitra', 'migratory'], - 'gyrophora': ['gyrophora', 'orography'], - 'gyrous': ['grousy', 'gyrous'], - 'gyrus': ['gyrus', 'surgy'], - 'ha': ['ah', 'ha'], - 'haberdine': ['haberdine', 'hebridean'], - 'habile': ['habile', 'halebi'], - 'habiri': ['bihari', 'habiri'], - 'habiru': ['brahui', 'habiru'], - 'habit': ['baith', 'habit'], - 'habitan': ['abthain', 'habitan'], - 'habitat': ['habitat', 'tabitha'], - 'habited': ['habited', 'thebaid'], - 'habitus': ['habitus', 'ushabti'], - 'habnab': ['babhan', 'habnab'], - 'hacienda': ['chanidae', 'hacienda'], - 'hackin': ['hackin', 'kachin'], - 'hackle': ['hackle', 'lekach'], - 'hackler': ['chalker', 'hackler'], - 'hackly': ['chalky', 'hackly'], - 'hacktree': ['eckehart', 'hacktree'], - 'hackwood': ['hackwood', 'woodhack'], - 'hacky': ['chyak', 'hacky'], - 'had': ['dah', 'dha', 'had'], - 'hadden': ['hadden', 'handed'], - 'hade': ['hade', 'head'], - 'hades': ['deash', 'hades', 'sadhe', 'shade'], - 'hadji': ['hadji', 'jihad'], - 'haec': ['ache', 'each', 'haec'], - 'haem': ['ahem', 'haem', 'hame'], - 'haet': ['ahet', 'haet', 'hate', 'heat', 'thea'], - 'hafgan': ['afghan', 'hafgan'], - 'hafter': ['father', 'freath', 'hafter'], - 'hageen': ['hageen', 'hangee'], - 'hailse': ['elisha', 'hailse', 'sheila'], - 'hainan': ['hainan', 'nahani'], - 'hair': ['ahir', 'hair'], - 'hairband': ['bhandari', 'hairband'], - 'haired': ['dehair', 'haired'], - 'hairen': ['hairen', 'hernia'], - 'hairlet': ['hairlet', 'therial'], - 'hairstone': ['hairstone', 'hortensia'], - 'hairup': ['hairup', 'rupiah'], - 'hak': ['hak', 'kha'], - 'hakam': ['hakam', 'makah'], - 'hakea': ['ekaha', 'hakea'], - 'hakim': ['hakim', 'khami'], - 'haku': ['haku', 'kahu'], - 'halal': ['allah', 'halal'], - 'halbert': ['blather', 'halbert'], - 'hale': ['hale', 'heal', 'leah'], - 'halebi': ['habile', 'halebi'], - 'halenia': ['ainaleh', 'halenia'], - 'halesome': ['halesome', 'healsome'], - 'halicore': ['halicore', 'heroical'], - 'haliotidae': ['aethalioid', 'haliotidae'], - 'hallan': ['hallan', 'nallah'], - 'hallower': ['hallower', 'rehallow'], - 'halma': ['halma', 'hamal'], - 'halogeton': ['halogeton', 'theogonal'], - 'haloid': ['dihalo', 'haloid'], - 'halophile': ['halophile', 'philohela'], - 'halophytism': ['halophytism', 'hylopathism'], - 'hals': ['hals', 'lash'], - 'halse': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'], - 'halsen': ['halsen', 'hansel', 'lanseh'], - 'halt': ['halt', 'lath'], - 'halter': ['arthel', 'halter', 'lather', 'thaler'], - 'halterbreak': ['halterbreak', 'leatherbark'], - 'halting': ['halting', 'lathing', 'thingal'], - 'halve': ['halve', 'havel'], - 'halver': ['halver', 'lavehr'], - 'ham': ['ham', 'mah'], - 'hamal': ['halma', 'hamal'], - 'hame': ['ahem', 'haem', 'hame'], - 'hameil': ['hameil', 'hiemal'], - 'hamel': ['hamel', 'hemal'], - 'hamfatter': ['aftermath', 'hamfatter'], - 'hami': ['hami', 'hima', 'mahi'], - 'hamital': ['hamital', 'thalami'], - 'hamites': ['atheism', 'hamites'], - 'hamlet': ['hamlet', 'malthe'], - 'hammerer': ['hammerer', 'rehammer'], - 'hamsa': ['hamsa', 'masha', 'shama'], - 'hamulites': ['hamulites', 'shulamite'], - 'hamus': ['hamus', 'musha'], - 'hanaster': ['hanaster', 'sheratan'], - 'hance': ['achen', 'chane', 'chena', 'hance'], - 'hand': ['dhan', 'hand'], - 'handbook': ['bandhook', 'handbook'], - 'handed': ['hadden', 'handed'], - 'hander': ['hander', 'harden'], - 'handicapper': ['handicapper', 'prehandicap'], - 'handscrape': ['handscrape', 'scaphander'], - 'handstone': ['handstone', 'stonehand'], - 'handwork': ['handwork', 'workhand'], - 'hangar': ['arghan', 'hangar'], - 'hangby': ['banghy', 'hangby'], - 'hangee': ['hageen', 'hangee'], - 'hanger': ['hanger', 'rehang'], - 'hangie': ['gienah', 'hangie'], - 'hangnail': ['hangnail', 'langhian'], - 'hangout': ['hangout', 'tohunga'], - 'hank': ['ankh', 'hank', 'khan'], - 'hano': ['hano', 'noah'], - 'hans': ['hans', 'nash', 'shan'], - 'hansa': ['ahsan', 'hansa', 'hasan'], - 'hanse': ['ashen', 'hanse', 'shane', 'shean'], - 'hanseatic': ['anchistea', 'hanseatic'], - 'hansel': ['halsen', 'hansel', 'lanseh'], - 'hant': ['hant', 'tanh', 'than'], - 'hantle': ['ethnal', 'hantle', 'lathen', 'thenal'], - 'hao': ['aho', 'hao'], - 'haole': ['eloah', 'haole'], - 'haoma': ['haoma', 'omaha'], - 'haori': ['haori', 'iroha'], - 'hap': ['hap', 'pah'], - 'hapalotis': ['hapalotis', 'sapotilha'], - 'hapi': ['hapi', 'pahi'], - 'haplodoci': ['chilopoda', 'haplodoci'], - 'haplont': ['haplont', 'naphtol'], - 'haplosis': ['alphosis', 'haplosis'], - 'haply': ['haply', 'phyla'], - 'happiest': ['happiest', 'peatship'], - 'haptene': ['haptene', 'heptane', 'phenate'], - 'haptenic': ['haptenic', 'pantheic', 'pithecan'], - 'haptere': ['haptere', 'preheat'], - 'haptic': ['haptic', 'pathic'], - 'haptics': ['haptics', 'spathic'], - 'haptometer': ['amphorette', 'haptometer'], - 'haptophoric': ['haptophoric', 'pathophoric'], - 'haptophorous': ['haptophorous', 'pathophorous'], - 'haptotropic': ['haptotropic', 'protopathic'], - 'hapu': ['hapu', 'hupa'], - 'harass': ['harass', 'hassar'], - 'harb': ['bhar', 'harb'], - 'harborer': ['abhorrer', 'harborer'], - 'harden': ['hander', 'harden'], - 'hardener': ['hardener', 'reharden'], - 'hardenite': ['hardenite', 'herniated'], - 'hardtail': ['hardtail', 'thaliard'], - 'hardy': ['hardy', 'hydra'], - 'hare': ['hare', 'hear', 'rhea'], - 'harebrain': ['harebrain', 'herbarian'], - 'harem': ['harem', 'herma', 'rhema'], - 'haremism': ['ashimmer', 'haremism'], - 'harfang': ['fraghan', 'harfang'], - 'haricot': ['chariot', 'haricot'], - 'hark': ['hark', 'khar', 'rakh'], - 'harka': ['harka', 'kahar'], - 'harlot': ['harlot', 'orthal', 'thoral'], - 'harmala': ['harmala', 'marhala'], - 'harman': ['amhran', 'harman', 'mahran'], - 'harmer': ['harmer', 'reharm'], - 'harmine': ['harmine', 'hireman'], - 'harmonic': ['choirman', 'harmonic', 'omniarch'], - 'harmonical': ['harmonical', 'monarchial'], - 'harmonics': ['anorchism', 'harmonics'], - 'harmonistic': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'], - 'harnesser': ['harnesser', 'reharness'], - 'harold': ['harold', 'holard'], - 'harpa': ['aphra', 'harpa', 'parah'], - 'harpings': ['harpings', 'phrasing'], - 'harpist': ['harpist', 'traship'], - 'harpless': ['harpless', 'splasher'], - 'harris': ['arrish', 'harris', 'rarish', 'sirrah'], - 'harrower': ['harrower', 'reharrow'], - 'hart': ['hart', 'rath', 'tahr', 'thar', 'trah'], - 'hartin': ['hartin', 'thrain'], - 'hartite': ['hartite', 'rathite'], - 'haruspices': ['chuprassie', 'haruspices'], - 'harvester': ['harvester', 'reharvest'], - 'hasan': ['ahsan', 'hansa', 'hasan'], - 'hash': ['hash', 'sahh', 'shah'], - 'hasher': ['hasher', 'rehash'], - 'hasidic': ['hasidic', 'sahidic'], - 'hasidim': ['hasidim', 'maidish'], - 'hasky': ['hasky', 'shaky'], - 'haslet': ['haslet', 'lesath', 'shelta'], - 'hasp': ['hasp', 'pash', 'psha', 'shap'], - 'hassar': ['harass', 'hassar'], - 'hassel': ['hassel', 'hassle'], - 'hassle': ['hassel', 'hassle'], - 'haste': ['ashet', 'haste', 'sheat'], - 'hasten': ['athens', 'hasten', 'snathe', 'sneath'], - 'haster': ['haster', 'hearst', 'hearts'], - 'hastilude': ['hastilude', 'lustihead'], - 'hastler': ['hastler', 'slather'], - 'hasty': ['hasty', 'yasht'], - 'hat': ['aht', 'hat', 'tha'], - 'hatchery': ['hatchery', 'thearchy'], - 'hate': ['ahet', 'haet', 'hate', 'heat', 'thea'], - 'hateable': ['hateable', 'heatable'], - 'hateful': ['hateful', 'heatful'], - 'hateless': ['hateless', 'heatless'], - 'hater': ['earth', 'hater', 'heart', 'herat', 'rathe'], - 'hati': ['hati', 'thai'], - 'hatred': ['dearth', 'hatred', 'rathed', 'thread'], - 'hatress': ['hatress', 'shaster'], - 'hatt': ['hatt', 'tath', 'that'], - 'hattemist': ['hattemist', 'thematist'], - 'hatter': ['hatter', 'threat'], - 'hattery': ['hattery', 'theatry'], - 'hattic': ['chatti', 'hattic'], - 'hattock': ['hattock', 'totchka'], - 'hau': ['ahu', 'auh', 'hau'], - 'hauerite': ['eutheria', 'hauerite'], - 'haul': ['haul', 'hula'], - 'hauler': ['hauler', 'rehaul'], - 'haunt': ['ahunt', 'haunt', 'thuan', 'unhat'], - 'haunter': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'], - 'hauntingly': ['hauntingly', 'unhatingly'], - 'haurient': ['haurient', 'huterian'], - 'havel': ['halve', 'havel'], - 'havers': ['havers', 'shaver', 'shrave'], - 'haw': ['haw', 'hwa', 'wah', 'wha'], - 'hawer': ['hawer', 'whare'], - 'hawm': ['hawm', 'wham'], - 'hawse': ['hawse', 'shewa', 'whase'], - 'hawser': ['hawser', 'rewash', 'washer'], - 'hay': ['hay', 'yah'], - 'haya': ['ayah', 'haya'], - 'hayz': ['hayz', 'hazy'], - 'hazarder': ['hazarder', 'rehazard'], - 'hazel': ['hazel', 'hazle'], - 'hazle': ['hazel', 'hazle'], - 'hazy': ['hayz', 'hazy'], - 'he': ['eh', 'he'], - 'head': ['hade', 'head'], - 'headbander': ['barehanded', 'bradenhead', 'headbander'], - 'headboard': ['broadhead', 'headboard'], - 'header': ['adhere', 'header', 'hedera', 'rehead'], - 'headily': ['headily', 'hylidae'], - 'headlight': ['headlight', 'lighthead'], - 'headlong': ['headlong', 'longhead'], - 'headman': ['headman', 'manhead'], - 'headmaster': ['headmaster', 'headstream', 'streamhead'], - 'headnote': ['headnote', 'notehead'], - 'headrail': ['headrail', 'railhead'], - 'headrent': ['adherent', 'headrent', 'neatherd', 'threaden'], - 'headring': ['headring', 'ringhead'], - 'headset': ['headset', 'sethead'], - 'headskin': ['headskin', 'nakedish', 'sinkhead'], - 'headspring': ['headspring', 'springhead'], - 'headstone': ['headstone', 'stonehead'], - 'headstream': ['headmaster', 'headstream', 'streamhead'], - 'headstrong': ['headstrong', 'stronghead'], - 'headward': ['drawhead', 'headward'], - 'headwater': ['headwater', 'waterhead'], - 'heal': ['hale', 'heal', 'leah'], - 'healer': ['healer', 'rehale', 'reheal'], - 'healsome': ['halesome', 'healsome'], - 'heap': ['epha', 'heap'], - 'heaper': ['heaper', 'reheap'], - 'heaps': ['heaps', 'pesah', 'phase', 'shape'], - 'hear': ['hare', 'hear', 'rhea'], - 'hearer': ['hearer', 'rehear'], - 'hearken': ['hearken', 'kenareh'], - 'hearst': ['haster', 'hearst', 'hearts'], - 'heart': ['earth', 'hater', 'heart', 'herat', 'rathe'], - 'heartdeep': ['heartdeep', 'preheated'], - 'hearted': ['earthed', 'hearted'], - 'heartedness': ['heartedness', 'neatherdess'], - 'hearten': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'], - 'heartener': ['heartener', 'rehearten'], - 'heartiness': ['earthiness', 'heartiness'], - 'hearting': ['hearting', 'ingather'], - 'heartless': ['earthless', 'heartless'], - 'heartling': ['earthling', 'heartling'], - 'heartly': ['earthly', 'heartly', 'lathery', 'rathely'], - 'heartnut': ['earthnut', 'heartnut'], - 'heartpea': ['earthpea', 'heartpea'], - 'heartquake': ['earthquake', 'heartquake'], - 'hearts': ['haster', 'hearst', 'hearts'], - 'heartsome': ['heartsome', 'samothere'], - 'heartward': ['earthward', 'heartward'], - 'heartweed': ['heartweed', 'weathered'], - 'hearty': ['earthy', 'hearty', 'yearth'], - 'heat': ['ahet', 'haet', 'hate', 'heat', 'thea'], - 'heatable': ['hateable', 'heatable'], - 'heater': ['heater', 'hereat', 'reheat'], - 'heatful': ['hateful', 'heatful'], - 'heath': ['heath', 'theah'], - 'heating': ['gahnite', 'heating'], - 'heatless': ['hateless', 'heatless'], - 'heatronic': ['anchorite', 'antechoir', 'heatronic', 'hectorian'], - 'heave': ['heave', 'hevea'], - 'hebraizer': ['hebraizer', 'herbarize'], - 'hebridean': ['haberdine', 'hebridean'], - 'hecate': ['achete', 'hecate', 'teache', 'thecae'], - 'hecatine': ['echinate', 'hecatine'], - 'heckle': ['heckle', 'kechel'], - 'hectare': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'], - 'hecte': ['cheet', 'hecte'], - 'hector': ['hector', 'rochet', 'tocher', 'troche'], - 'hectorian': ['anchorite', 'antechoir', 'heatronic', 'hectorian'], - 'hectorship': ['christophe', 'hectorship'], - 'hedera': ['adhere', 'header', 'hedera', 'rehead'], - 'hedonical': ['chelodina', 'hedonical'], - 'hedonism': ['demonish', 'hedonism'], - 'heehaw': ['heehaw', 'wahehe'], - 'heel': ['heel', 'hele'], - 'heeler': ['heeler', 'reheel'], - 'heelpost': ['heelpost', 'pesthole'], - 'heer': ['heer', 'here'], - 'hegari': ['hegari', 'hegira'], - 'hegemonic': ['hegemonic', 'hemogenic'], - 'hegira': ['hegari', 'hegira'], - 'hei': ['hei', 'hie'], - 'height': ['eighth', 'height'], - 'heightener': ['heightener', 'reheighten'], - 'heintzite': ['heintzite', 'hintzeite'], - 'heinz': ['heinz', 'hienz'], - 'heir': ['heir', 'hire'], - 'heirdom': ['heirdom', 'homerid'], - 'heirless': ['heirless', 'hireless'], - 'hejazi': ['hejazi', 'jeziah'], - 'helcosis': ['helcosis', 'ochlesis'], - 'helcotic': ['helcotic', 'lochetic', 'ochletic'], - 'hele': ['heel', 'hele'], - 'heliacal': ['achillea', 'heliacal'], - 'heliast': ['heliast', 'thesial'], - 'helical': ['alichel', 'challie', 'helical'], - 'heliced': ['chelide', 'heliced'], - 'helicon': ['choline', 'helicon'], - 'heling': ['heling', 'hingle'], - 'heliophotography': ['heliophotography', 'photoheliography'], - 'helios': ['helios', 'isohel'], - 'heliostatic': ['chiastolite', 'heliostatic'], - 'heliotactic': ['heliotactic', 'thiolacetic'], - 'helium': ['helium', 'humlie'], - 'hellcat': ['hellcat', 'tellach'], - 'helleborein': ['helleborein', 'helleborine'], - 'helleborine': ['helleborein', 'helleborine'], - 'hellenic': ['chenille', 'hellenic'], - 'helleri': ['helleri', 'hellier'], - 'hellicat': ['hellicat', 'lecithal'], - 'hellier': ['helleri', 'hellier'], - 'helm': ['helm', 'heml'], - 'heloderma': ['dreamhole', 'heloderma'], - 'helot': ['helot', 'hotel', 'thole'], - 'helotize': ['helotize', 'hotelize'], - 'helpmeet': ['helpmeet', 'meethelp'], - 'hemad': ['ahmed', 'hemad'], - 'hemal': ['hamel', 'hemal'], - 'hemapod': ['hemapod', 'mophead'], - 'hematic': ['chamite', 'hematic'], - 'hematin': ['ethanim', 'hematin'], - 'hematinic': ['hematinic', 'minchiate'], - 'hematolin': ['hematolin', 'maholtine'], - 'hematonic': ['hematonic', 'methanoic'], - 'hematosin': ['hematosin', 'thomasine'], - 'hematoxic': ['hematoxic', 'hexatomic'], - 'hematuric': ['hematuric', 'rheumatic'], - 'hemiasci': ['hemiasci', 'ischemia'], - 'hemiatrophy': ['hemiatrophy', 'hypothermia'], - 'hemic': ['chime', 'hemic', 'miche'], - 'hemicarp': ['camphire', 'hemicarp'], - 'hemicatalepsy': ['hemicatalepsy', 'mesaticephaly'], - 'hemiclastic': ['alchemistic', 'hemiclastic'], - 'hemicrany': ['hemicrany', 'machinery'], - 'hemiholohedral': ['hemiholohedral', 'holohemihedral'], - 'hemiolic': ['elohimic', 'hemiolic'], - 'hemiparesis': ['hemiparesis', 'phariseeism'], - 'hemistater': ['amherstite', 'hemistater'], - 'hemiterata': ['hemiterata', 'metatheria'], - 'hemitype': ['epithyme', 'hemitype'], - 'heml': ['helm', 'heml'], - 'hemogenic': ['hegemonic', 'hemogenic'], - 'hemol': ['hemol', 'mohel'], - 'hemologist': ['hemologist', 'theologism'], - 'hemopneumothorax': ['hemopneumothorax', 'pneumohemothorax'], - 'henbit': ['behint', 'henbit'], - 'hent': ['hent', 'neth', 'then'], - 'henter': ['erthen', 'henter', 'nether', 'threne'], - 'henyard': ['enhydra', 'henyard'], - 'hepar': ['hepar', 'phare', 'raphe'], - 'heparin': ['heparin', 'nephria'], - 'hepatic': ['aphetic', 'caphite', 'hepatic'], - 'hepatica': ['apachite', 'hepatica'], - 'hepatical': ['caliphate', 'hepatical'], - 'hepatize': ['aphetize', 'hepatize'], - 'hepatocolic': ['hepatocolic', 'otocephalic'], - 'hepatogastric': ['gastrohepatic', 'hepatogastric'], - 'hepatoid': ['diaphote', 'hepatoid'], - 'hepatomegalia': ['hepatomegalia', 'megalohepatia'], - 'hepatonephric': ['hepatonephric', 'phrenohepatic'], - 'hepatostomy': ['hepatostomy', 'somatophyte'], - 'hepialid': ['hepialid', 'phialide'], - 'heptace': ['heptace', 'tepache'], - 'heptad': ['heptad', 'pathed'], - 'heptagon': ['heptagon', 'pathogen'], - 'heptameron': ['heptameron', 'promethean'], - 'heptane': ['haptene', 'heptane', 'phenate'], - 'heptaploidy': ['heptaploidy', 'typhlopidae'], - 'hepteris': ['hepteris', 'treeship'], - 'heptine': ['heptine', 'nephite'], - 'heptite': ['epithet', 'heptite'], - 'heptorite': ['heptorite', 'tephroite'], - 'heptylic': ['heptylic', 'phyletic'], - 'her': ['her', 'reh', 'rhe'], - 'heraclid': ['heraclid', 'heraldic'], - 'heraldic': ['heraclid', 'heraldic'], - 'heraldist': ['heraldist', 'tehsildar'], - 'herat': ['earth', 'hater', 'heart', 'herat', 'rathe'], - 'herbage': ['breaghe', 'herbage'], - 'herbarian': ['harebrain', 'herbarian'], - 'herbarism': ['herbarism', 'shambrier'], - 'herbarize': ['hebraizer', 'herbarize'], - 'herbert': ['berther', 'herbert'], - 'herbous': ['herbous', 'subhero'], - 'herdic': ['chider', 'herdic'], - 'here': ['heer', 'here'], - 'hereafter': ['featherer', 'hereafter'], - 'hereat': ['heater', 'hereat', 'reheat'], - 'herein': ['herein', 'inhere'], - 'hereinto': ['etherion', 'hereinto', 'heronite'], - 'herem': ['herem', 'rheme'], - 'heretic': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'], - 'heretically': ['heretically', 'heterically'], - 'heretication': ['heretication', 'theoretician'], - 'hereto': ['hereto', 'hetero'], - 'heritance': ['catherine', 'heritance'], - 'herl': ['herl', 'hler', 'lehr'], - 'herma': ['harem', 'herma', 'rhema'], - 'hermaic': ['chimera', 'hermaic'], - 'hermitage': ['geheimrat', 'hermitage'], - 'hermo': ['hermo', 'homer', 'horme'], - 'herne': ['herne', 'rheen'], - 'hernia': ['hairen', 'hernia'], - 'hernial': ['hernial', 'inhaler'], - 'herniate': ['atherine', 'herniate'], - 'herniated': ['hardenite', 'herniated'], - 'hernioid': ['dinheiro', 'hernioid'], - 'hero': ['hero', 'hoer'], - 'herodian': ['herodian', 'ironhead'], - 'heroic': ['coheir', 'heroic'], - 'heroical': ['halicore', 'heroical'], - 'heroin': ['heroin', 'hieron', 'hornie'], - 'heroism': ['heroism', 'moreish'], - 'heronite': ['etherion', 'hereinto', 'heronite'], - 'herophile': ['herophile', 'rheophile'], - 'herpes': ['herpes', 'hesper', 'sphere'], - 'herpetism': ['herpetism', 'metership', 'metreship', 'temperish'], - 'herpetological': ['herpetological', 'pretheological'], - 'herpetomonad': ['dermatophone', 'herpetomonad'], - 'hers': ['hers', 'resh', 'sher'], - 'herse': ['herse', 'sereh', 'sheer', 'shree'], - 'hersed': ['hersed', 'sheder'], - 'herself': ['flesher', 'herself'], - 'hersir': ['hersir', 'sherri'], - 'herulian': ['herulian', 'inhauler'], - 'hervati': ['athrive', 'hervati'], - 'hesitater': ['hesitater', 'hetaerist'], - 'hesper': ['herpes', 'hesper', 'sphere'], - 'hespera': ['hespera', 'rephase', 'reshape'], - 'hesperia': ['hesperia', 'pharisee'], - 'hesperian': ['hesperian', 'phrenesia', 'seraphine'], - 'hesperid': ['hesperid', 'perished'], - 'hesperinon': ['hesperinon', 'prehension'], - 'hesperis': ['hesperis', 'seership'], - 'hest': ['esth', 'hest', 'seth'], - 'hester': ['esther', 'hester', 'theres'], - 'het': ['het', 'the'], - 'hetaeric': ['cheatrie', 'hetaeric'], - 'hetaerist': ['hesitater', 'hetaerist'], - 'hetaery': ['erythea', 'hetaery', 'yeather'], - 'heteratomic': ['heteratomic', 'theorematic'], - 'heteraxial': ['exhilarate', 'heteraxial'], - 'heteric': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'], - 'heterically': ['heretically', 'heterically'], - 'hetericism': ['erethismic', 'hetericism'], - 'hetericist': ['erethistic', 'hetericist'], - 'heterism': ['erethism', 'etherism', 'heterism'], - 'heterization': ['etherization', 'heterization'], - 'heterize': ['etherize', 'heterize'], - 'hetero': ['hereto', 'hetero'], - 'heterocarpus': ['heterocarpus', 'urethrascope'], - 'heteroclite': ['heteroclite', 'heterotelic'], - 'heterodromy': ['heterodromy', 'hydrometeor'], - 'heteroecismal': ['cholesteremia', 'heteroecismal'], - 'heterography': ['erythrophage', 'heterography'], - 'heterogynous': ['heterogynous', 'thyreogenous'], - 'heterology': ['heterology', 'thereology'], - 'heteromeri': ['heteromeri', 'moerithere'], - 'heteroousiast': ['autoheterosis', 'heteroousiast'], - 'heteropathy': ['heteropathy', 'theotherapy'], - 'heteropodal': ['heteropodal', 'prelatehood'], - 'heterotelic': ['heteroclite', 'heterotelic'], - 'heterotic': ['heterotic', 'theoretic'], - 'hetman': ['anthem', 'hetman', 'mentha'], - 'hetmanate': ['hetmanate', 'methanate'], - 'hetter': ['hetter', 'tether'], - 'hevea': ['heave', 'hevea'], - 'hevi': ['hevi', 'hive'], - 'hewel': ['hewel', 'wheel'], - 'hewer': ['hewer', 'wheer', 'where'], - 'hewn': ['hewn', 'when'], - 'hewt': ['hewt', 'thew', 'whet'], - 'hexacid': ['hexacid', 'hexadic'], - 'hexadic': ['hexacid', 'hexadic'], - 'hexakisoctahedron': ['hexakisoctahedron', 'octakishexahedron'], - 'hexakistetrahedron': ['hexakistetrahedron', 'tetrakishexahedron'], - 'hexatetrahedron': ['hexatetrahedron', 'tetrahexahedron'], - 'hexatomic': ['hematoxic', 'hexatomic'], - 'hexonic': ['choenix', 'hexonic'], - 'hiant': ['ahint', 'hiant', 'tahin'], - 'hiatal': ['hiatal', 'thalia'], - 'hibernate': ['hibernate', 'inbreathe'], - 'hic': ['chi', 'hic', 'ich'], - 'hickwall': ['hickwall', 'wallhick'], - 'hidage': ['adighe', 'hidage'], - 'hider': ['dheri', 'hider', 'hired'], - 'hidling': ['hidling', 'hilding'], - 'hidlings': ['dishling', 'hidlings'], - 'hidrotic': ['hidrotic', 'trichoid'], - 'hie': ['hei', 'hie'], - 'hield': ['delhi', 'hield'], - 'hiemal': ['hameil', 'hiemal'], - 'hienz': ['heinz', 'hienz'], - 'hieron': ['heroin', 'hieron', 'hornie'], - 'hieros': ['hieros', 'hosier'], - 'hight': ['hight', 'thigh'], - 'higuero': ['higuero', 'roughie'], - 'hilasmic': ['chiliasm', 'hilasmic', 'machilis'], - 'hilding': ['hidling', 'hilding'], - 'hillside': ['hillside', 'sidehill'], - 'hilsa': ['alish', 'hilsa'], - 'hilt': ['hilt', 'lith'], - 'hima': ['hami', 'hima', 'mahi'], - 'himself': ['flemish', 'himself'], - 'hinderest': ['disherent', 'hinderest', 'tenderish'], - 'hindu': ['hindu', 'hundi', 'unhid'], - 'hing': ['hing', 'nigh'], - 'hinge': ['hinge', 'neigh'], - 'hingle': ['heling', 'hingle'], - 'hint': ['hint', 'thin'], - 'hinter': ['hinter', 'nither', 'theirn'], - 'hintproof': ['hintproof', 'hoofprint'], - 'hintzeite': ['heintzite', 'hintzeite'], - 'hip': ['hip', 'phi'], - 'hipbone': ['hipbone', 'hopbine'], - 'hippodamous': ['amphipodous', 'hippodamous'], - 'hippolyte': ['hippolyte', 'typophile'], - 'hippus': ['hippus', 'uppish'], - 'hiram': ['hiram', 'ihram', 'mahri'], - 'hircine': ['hircine', 'rheinic'], - 'hire': ['heir', 'hire'], - 'hired': ['dheri', 'hider', 'hired'], - 'hireless': ['heirless', 'hireless'], - 'hireman': ['harmine', 'hireman'], - 'hiren': ['hiren', 'rhein', 'rhine'], - 'hirmos': ['hirmos', 'romish'], - 'hirse': ['hirse', 'shier', 'shire'], - 'hirsel': ['hirsel', 'hirsle', 'relish'], - 'hirsle': ['hirsel', 'hirsle', 'relish'], - 'his': ['his', 'hsi', 'shi'], - 'hish': ['hish', 'shih'], - 'hisn': ['hisn', 'shin', 'sinh'], - 'hispa': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'], - 'hispanist': ['hispanist', 'saintship'], - 'hiss': ['hiss', 'sish'], - 'hist': ['hist', 'sith', 'this', 'tshi'], - 'histamine': ['histamine', 'semihiant'], - 'histie': ['histie', 'shiite'], - 'histioid': ['histioid', 'idiotish'], - 'histon': ['histon', 'shinto', 'tonish'], - 'histonal': ['histonal', 'toshnail'], - 'historic': ['historic', 'orchitis'], - 'historics': ['historics', 'trichosis'], - 'history': ['history', 'toryish'], - 'hittable': ['hittable', 'tithable'], - 'hitter': ['hitter', 'tither'], - 'hive': ['hevi', 'hive'], - 'hives': ['hives', 'shive'], - 'hler': ['herl', 'hler', 'lehr'], - 'ho': ['ho', 'oh'], - 'hoar': ['hoar', 'hora'], - 'hoard': ['hoard', 'rhoda'], - 'hoarse': ['ahorse', 'ashore', 'hoarse', 'shorea'], - 'hoarstone': ['anorthose', 'hoarstone'], - 'hoast': ['hoast', 'hosta', 'shoat'], - 'hobbism': ['hobbism', 'mobbish'], - 'hobo': ['boho', 'hobo'], - 'hocco': ['choco', 'hocco'], - 'hock': ['hock', 'koch'], - 'hocker': ['choker', 'hocker'], - 'hocky': ['choky', 'hocky'], - 'hocus': ['chous', 'hocus'], - 'hodiernal': ['hodiernal', 'rhodaline'], - 'hoer': ['hero', 'hoer'], - 'hogan': ['ahong', 'hogan'], - 'hogget': ['egghot', 'hogget'], - 'hogmanay': ['hogmanay', 'mahogany'], - 'hognut': ['hognut', 'nought'], - 'hogsty': ['ghosty', 'hogsty'], - 'hoister': ['hoister', 'rehoist'], - 'hoit': ['hoit', 'hoti', 'thio'], - 'holard': ['harold', 'holard'], - 'holconoti': ['holconoti', 'holotonic'], - 'holcus': ['holcus', 'lochus', 'slouch'], - 'holdfast': ['fasthold', 'holdfast'], - 'holdout': ['holdout', 'outhold'], - 'holdup': ['holdup', 'uphold'], - 'holeman': ['holeman', 'manhole'], - 'holey': ['holey', 'hoyle'], - 'holiday': ['holiday', 'hyaloid', 'hyoidal'], - 'hollandite': ['hollandite', 'hollantide'], - 'hollantide': ['hollandite', 'hollantide'], - 'hollower': ['hollower', 'rehollow'], - 'holmia': ['holmia', 'maholi'], - 'holocentrid': ['holocentrid', 'lechriodont'], - 'holohemihedral': ['hemiholohedral', 'holohemihedral'], - 'holosteric': ['holosteric', 'thiocresol'], - 'holotonic': ['holconoti', 'holotonic'], - 'holster': ['holster', 'hostler'], - 'homage': ['homage', 'ohmage'], - 'homarine': ['homarine', 'homerian'], - 'homecroft': ['forthcome', 'homecroft'], - 'homeogenous': ['homeogenous', 'homogeneous'], - 'homeotypic': ['homeotypic', 'mythopoeic'], - 'homeotypical': ['homeotypical', 'polymetochia'], - 'homer': ['hermo', 'homer', 'horme'], - 'homerian': ['homarine', 'homerian'], - 'homeric': ['homeric', 'moriche'], - 'homerical': ['chloremia', 'homerical'], - 'homerid': ['heirdom', 'homerid'], - 'homerist': ['homerist', 'isotherm', 'otherism', 'theorism'], - 'homiletics': ['homiletics', 'mesolithic'], - 'homo': ['homo', 'moho'], - 'homocline': ['chemiloon', 'homocline'], - 'homogeneous': ['homeogenous', 'homogeneous'], - 'homopolic': ['homopolic', 'lophocomi'], - 'homopteran': ['homopteran', 'trophonema'], - 'homrai': ['homrai', 'mahori', 'mohair'], - 'hondo': ['dhoon', 'hondo'], - 'honest': ['ethnos', 'honest'], - 'honeypod': ['dyophone', 'honeypod'], - 'honeypot': ['eophyton', 'honeypot'], - 'honorer': ['honorer', 'rehonor'], - 'hontous': ['hontous', 'nothous'], - 'hoodman': ['dhamnoo', 'hoodman', 'manhood'], - 'hoofprint': ['hintproof', 'hoofprint'], - 'hooker': ['hooker', 'rehook'], - 'hookweed': ['hookweed', 'weedhook'], - 'hoop': ['hoop', 'phoo', 'pooh'], - 'hooper': ['hooper', 'rehoop'], - 'hoot': ['hoot', 'thoo', 'toho'], - 'hop': ['hop', 'pho', 'poh'], - 'hopbine': ['hipbone', 'hopbine'], - 'hopcalite': ['hopcalite', 'phacolite'], - 'hope': ['hope', 'peho'], - 'hoped': ['depoh', 'ephod', 'hoped'], - 'hoper': ['ephor', 'hoper'], - 'hoplite': ['hoplite', 'pithole'], - 'hoppergrass': ['grasshopper', 'hoppergrass'], - 'hoppers': ['hoppers', 'shopper'], - 'hora': ['hoar', 'hora'], - 'horal': ['horal', 'lohar'], - 'hordarian': ['arianrhod', 'hordarian'], - 'horizontal': ['horizontal', 'notorhizal'], - 'horme': ['hermo', 'homer', 'horme'], - 'horned': ['dehorn', 'horned'], - 'hornet': ['hornet', 'nother', 'theron', 'throne'], - 'hornie': ['heroin', 'hieron', 'hornie'], - 'hornpipe': ['hornpipe', 'porphine'], - 'horopteric': ['horopteric', 'rheotropic', 'trichopore'], - 'horrent': ['horrent', 'norther'], - 'horse': ['horse', 'shoer', 'shore'], - 'horsecar': ['cosharer', 'horsecar'], - 'horseless': ['horseless', 'shoreless'], - 'horseman': ['horseman', 'rhamnose', 'shoreman'], - 'horser': ['horser', 'shorer'], - 'horsetail': ['horsetail', 'isotheral'], - 'horseweed': ['horseweed', 'shoreweed'], - 'horsewhip': ['horsewhip', 'whoreship'], - 'horsewood': ['horsewood', 'woodhorse'], - 'horsing': ['horsing', 'shoring'], - 'horst': ['horst', 'short'], - 'hortensia': ['hairstone', 'hortensia'], - 'hortite': ['hortite', 'orthite', 'thorite'], - 'hose': ['hose', 'shoe'], - 'hosed': ['hosed', 'shode'], - 'hosel': ['hosel', 'sheol', 'shole'], - 'hoseless': ['hoseless', 'shoeless'], - 'hoseman': ['hoseman', 'shoeman'], - 'hosier': ['hieros', 'hosier'], - 'hospitaler': ['hospitaler', 'trophesial'], - 'host': ['host', 'shot', 'thos', 'tosh'], - 'hosta': ['hoast', 'hosta', 'shoat'], - 'hostager': ['hostager', 'shortage'], - 'hoster': ['hoster', 'tosher'], - 'hostile': ['elohist', 'hostile'], - 'hosting': ['hosting', 'onsight'], - 'hostler': ['holster', 'hostler'], - 'hostless': ['hostless', 'shotless'], - 'hostly': ['hostly', 'toshly'], - 'hot': ['hot', 'tho'], - 'hotel': ['helot', 'hotel', 'thole'], - 'hotelize': ['helotize', 'hotelize'], - 'hotfoot': ['foothot', 'hotfoot'], - 'hoti': ['hoit', 'hoti', 'thio'], - 'hotter': ['hotter', 'tother'], - 'hounce': ['cohune', 'hounce'], - 'houseboat': ['boathouse', 'houseboat'], - 'housebug': ['bughouse', 'housebug'], - 'housecraft': ['fratcheous', 'housecraft'], - 'housetop': ['housetop', 'pothouse'], - 'housewarm': ['housewarm', 'warmhouse'], - 'housewear': ['housewear', 'warehouse'], - 'housework': ['housework', 'workhouse'], - 'hovering': ['hovering', 'overnigh'], - 'how': ['how', 'who'], - 'howel': ['howel', 'whole'], - 'however': ['everwho', 'however', 'whoever'], - 'howlet': ['howlet', 'thowel'], - 'howso': ['howso', 'woosh'], - 'howsomever': ['howsomever', 'whomsoever', 'whosomever'], - 'hoya': ['ahoy', 'hoya'], - 'hoyle': ['holey', 'hoyle'], - 'hsi': ['his', 'hsi', 'shi'], - 'huari': ['huari', 'uriah'], - 'hubert': ['hubert', 'turbeh'], - 'hud': ['dhu', 'hud'], - 'hudsonite': ['hudsonite', 'unhoisted'], - 'huer': ['huer', 'hure'], - 'hug': ['hug', 'ugh'], - 'hughes': ['hughes', 'sheugh'], - 'hughoc': ['chough', 'hughoc'], - 'hugo': ['hugo', 'ough'], - 'hugsome': ['gumshoe', 'hugsome'], - 'huk': ['huk', 'khu'], - 'hula': ['haul', 'hula'], - 'hulsean': ['hulsean', 'unleash'], - 'hulster': ['hulster', 'hustler', 'sluther'], - 'huma': ['ahum', 'huma'], - 'human': ['human', 'nahum'], - 'humane': ['humane', 'humean'], - 'humanics': ['humanics', 'inasmuch'], - 'humean': ['humane', 'humean'], - 'humeroradial': ['humeroradial', 'radiohumeral'], - 'humic': ['chimu', 'humic'], - 'humidor': ['humidor', 'rhodium'], - 'humlie': ['helium', 'humlie'], - 'humor': ['humor', 'mohur'], - 'humoralistic': ['humoralistic', 'humoristical'], - 'humoristical': ['humoralistic', 'humoristical'], - 'hump': ['hump', 'umph'], - 'hundi': ['hindu', 'hundi', 'unhid'], - 'hunger': ['hunger', 'rehung'], - 'hunterian': ['hunterian', 'ruthenian'], - 'hup': ['hup', 'phu'], - 'hupa': ['hapu', 'hupa'], - 'hurdis': ['hurdis', 'rudish'], - 'hurdle': ['hurdle', 'hurled'], - 'hure': ['huer', 'hure'], - 'hurled': ['hurdle', 'hurled'], - 'huron': ['huron', 'rohun'], - 'hurst': ['hurst', 'trush'], - 'hurt': ['hurt', 'ruth'], - 'hurter': ['hurter', 'ruther'], - 'hurtful': ['hurtful', 'ruthful'], - 'hurtfully': ['hurtfully', 'ruthfully'], - 'hurtfulness': ['hurtfulness', 'ruthfulness'], - 'hurting': ['hurting', 'ungirth', 'unright'], - 'hurtingest': ['hurtingest', 'shuttering'], - 'hurtle': ['hurtle', 'luther'], - 'hurtless': ['hurtless', 'ruthless'], - 'hurtlessly': ['hurtlessly', 'ruthlessly'], - 'hurtlessness': ['hurtlessness', 'ruthlessness'], - 'husbander': ['husbander', 'shabunder'], - 'husked': ['dehusk', 'husked'], - 'huso': ['huso', 'shou'], - 'huspil': ['huspil', 'pulish'], - 'husting': ['gutnish', 'husting', 'unsight'], - 'hustle': ['hustle', 'sleuth'], - 'hustler': ['hulster', 'hustler', 'sluther'], - 'huterian': ['haurient', 'huterian'], - 'hwa': ['haw', 'hwa', 'wah', 'wha'], - 'hyaloid': ['holiday', 'hyaloid', 'hyoidal'], - 'hydra': ['hardy', 'hydra'], - 'hydramnios': ['disharmony', 'hydramnios'], - 'hydrate': ['hydrate', 'thready'], - 'hydrazidine': ['anhydridize', 'hydrazidine'], - 'hydrazine': ['anhydrize', 'hydrazine'], - 'hydriodate': ['hydriodate', 'iodhydrate'], - 'hydriodic': ['hydriodic', 'iodhydric'], - 'hydriote': ['hydriote', 'thyreoid'], - 'hydrobromate': ['bromohydrate', 'hydrobromate'], - 'hydrocarbide': ['carbohydride', 'hydrocarbide'], - 'hydrocharis': ['hydrocharis', 'hydrorachis'], - 'hydroferricyanic': ['ferrihydrocyanic', 'hydroferricyanic'], - 'hydroferrocyanic': ['ferrohydrocyanic', 'hydroferrocyanic'], - 'hydrofluoboric': ['borofluohydric', 'hydrofluoboric'], - 'hydrogeology': ['geohydrology', 'hydrogeology'], - 'hydroiodic': ['hydroiodic', 'iodohydric'], - 'hydrometeor': ['heterodromy', 'hydrometeor'], - 'hydromotor': ['hydromotor', 'orthodromy'], - 'hydronephrosis': ['hydronephrosis', 'nephrohydrosis'], - 'hydropneumopericardium': ['hydropneumopericardium', 'pneumohydropericardium'], - 'hydropneumothorax': ['hydropneumothorax', 'pneumohydrothorax'], - 'hydrorachis': ['hydrocharis', 'hydrorachis'], - 'hydrosulphate': ['hydrosulphate', 'sulphohydrate'], - 'hydrotical': ['dacryolith', 'hydrotical'], - 'hydrous': ['hydrous', 'shroudy'], - 'hyetograph': ['ethography', 'hyetograph'], - 'hylidae': ['headily', 'hylidae'], - 'hylist': ['hylist', 'slithy'], - 'hyllus': ['hyllus', 'lushly'], - 'hylopathism': ['halophytism', 'hylopathism'], - 'hymenic': ['chimney', 'hymenic'], - 'hymettic': ['hymettic', 'thymetic'], - 'hymnologist': ['hymnologist', 'smoothingly'], - 'hyoglossal': ['glossohyal', 'hyoglossal'], - 'hyoidal': ['holiday', 'hyaloid', 'hyoidal'], - 'hyothyreoid': ['hyothyreoid', 'thyreohyoid'], - 'hyothyroid': ['hyothyroid', 'thyrohyoid'], - 'hypaethron': ['hypaethron', 'hypothenar'], - 'hypercone': ['coryphene', 'hypercone'], - 'hypergamous': ['hypergamous', 'museography'], - 'hypertoxic': ['hypertoxic', 'xerophytic'], - 'hypnobate': ['batyphone', 'hypnobate'], - 'hypnoetic': ['hypnoetic', 'neophytic'], - 'hypnotic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'], - 'hypnotism': ['hypnotism', 'pythonism'], - 'hypnotist': ['hypnotist', 'pythonist'], - 'hypnotize': ['hypnotize', 'pythonize'], - 'hypnotoid': ['hypnotoid', 'pythonoid'], - 'hypobole': ['hypobole', 'lyophobe'], - 'hypocarp': ['apocryph', 'hypocarp'], - 'hypocrite': ['chirotype', 'hypocrite'], - 'hypodorian': ['hypodorian', 'radiophony'], - 'hypoglottis': ['hypoglottis', 'phytologist'], - 'hypomanic': ['amphicyon', 'hypomanic'], - 'hypopteron': ['hypopteron', 'phonotyper'], - 'hyporadius': ['hyporadius', 'suprahyoid'], - 'hyposcleral': ['hyposcleral', 'phylloceras'], - 'hyposmia': ['hyposmia', 'phymosia'], - 'hypostomatic': ['hypostomatic', 'somatophytic'], - 'hypothec': ['hypothec', 'photechy'], - 'hypothenar': ['hypaethron', 'hypothenar'], - 'hypothermia': ['hemiatrophy', 'hypothermia'], - 'hypsiloid': ['hypsiloid', 'syphiloid'], - 'hyracid': ['diarchy', 'hyracid'], - 'hyssop': ['hyssop', 'phossy', 'sposhy'], - 'hysteresial': ['hysteresial', 'hysteriales'], - 'hysteria': ['hysteria', 'sheriyat'], - 'hysteriales': ['hysteresial', 'hysteriales'], - 'hysterolaparotomy': ['hysterolaparotomy', 'laparohysterotomy'], - 'hysteromyomectomy': ['hysteromyomectomy', 'myomohysterectomy'], - 'hysteropathy': ['hysteropathy', 'hysterophyta'], - 'hysterophyta': ['hysteropathy', 'hysterophyta'], - 'iamb': ['iamb', 'mabi'], - 'iambelegus': ['elegiambus', 'iambelegus'], - 'iambic': ['cimbia', 'iambic'], - 'ian': ['ani', 'ian'], - 'ianus': ['ianus', 'suina'], - 'iatraliptics': ['iatraliptics', 'partialistic'], - 'iatric': ['iatric', 'tricia'], - 'ibad': ['adib', 'ibad'], - 'iban': ['bain', 'bani', 'iban'], - 'ibanag': ['bagani', 'bangia', 'ibanag'], - 'iberian': ['aribine', 'bairnie', 'iberian'], - 'ibo': ['ibo', 'obi'], - 'ibota': ['biota', 'ibota'], - 'icacorea': ['coraciae', 'icacorea'], - 'icarian': ['arician', 'icarian'], - 'icecap': ['icecap', 'ipecac'], - 'iced': ['dice', 'iced'], - 'iceland': ['cladine', 'decalin', 'iceland'], - 'icelandic': ['cicindela', 'cinclidae', 'icelandic'], - 'iceman': ['anemic', 'cinema', 'iceman'], - 'ich': ['chi', 'hic', 'ich'], - 'ichnolite': ['ichnolite', 'neolithic'], - 'ichor': ['chiro', 'choir', 'ichor'], - 'icicle': ['cilice', 'icicle'], - 'icon': ['cion', 'coin', 'icon'], - 'iconian': ['anionic', 'iconian'], - 'iconism': ['iconism', 'imsonic', 'miscoin'], - 'iconolater': ['iconolater', 'relocation'], - 'iconomania': ['iconomania', 'oniomaniac'], - 'iconometrical': ['iconometrical', 'intracoelomic'], - 'icteridae': ['diaeretic', 'icteridae'], - 'icterine': ['icterine', 'reincite'], - 'icterus': ['curtise', 'icterus'], - 'ictonyx': ['ictonyx', 'oxyntic'], - 'ictus': ['cutis', 'ictus'], - 'id': ['di', 'id'], - 'ida': ['aid', 'ida'], - 'idaean': ['adenia', 'idaean'], - 'ide': ['die', 'ide'], - 'idea': ['aide', 'idea'], - 'ideal': ['adiel', 'delia', 'ideal'], - 'idealism': ['idealism', 'lamiides'], - 'idealistic': ['disilicate', 'idealistic'], - 'ideality': ['aedility', 'ideality'], - 'idealness': ['idealness', 'leadiness'], - 'idean': ['diane', 'idean'], - 'ideation': ['ideation', 'iodinate', 'taenioid'], - 'identical': ['ctenidial', 'identical'], - 'ideograph': ['eidograph', 'ideograph'], - 'ideology': ['eidology', 'ideology'], - 'ideoplasty': ['ideoplasty', 'stylopidae'], - 'ides': ['desi', 'ides', 'seid', 'side'], - 'idiasm': ['idiasm', 'simiad'], - 'idioblast': ['diabolist', 'idioblast'], - 'idiomology': ['idiomology', 'oligomyoid'], - 'idioretinal': ['idioretinal', 'litorinidae'], - 'idiotish': ['histioid', 'idiotish'], - 'idle': ['idle', 'lide', 'lied'], - 'idleman': ['idleman', 'melinda'], - 'idleset': ['idleset', 'isleted'], - 'idlety': ['idlety', 'lydite', 'tidely', 'tidley'], - 'idly': ['idly', 'idyl'], - 'idocrase': ['idocrase', 'radicose'], - 'idoism': ['idoism', 'iodism'], - 'idol': ['dilo', 'diol', 'doli', 'idol', 'olid'], - 'idola': ['aloid', 'dolia', 'idola'], - 'idolaster': ['estradiol', 'idolaster'], - 'idolatry': ['adroitly', 'dilatory', 'idolatry'], - 'idolum': ['dolium', 'idolum'], - 'idoneal': ['adinole', 'idoneal'], - 'idorgan': ['gordian', 'idorgan', 'roading'], - 'idose': ['diose', 'idose', 'oside'], - 'idotea': ['idotea', 'iodate', 'otidae'], - 'idryl': ['idryl', 'lyrid'], - 'idyl': ['idly', 'idyl'], - 'idyler': ['direly', 'idyler'], - 'ierne': ['ernie', 'ierne', 'irene'], - 'if': ['fi', 'if'], - 'ife': ['fei', 'fie', 'ife'], - 'igara': ['agria', 'igara'], - 'igdyr': ['igdyr', 'ridgy'], - 'igloo': ['igloo', 'logoi'], - 'ignatius': ['giustina', 'ignatius'], - 'igneoaqueous': ['aqueoigneous', 'igneoaqueous'], - 'ignicolist': ['ignicolist', 'soliciting'], - 'igniter': ['igniter', 'ringite', 'tigrine'], - 'ignitor': ['ignitor', 'rioting'], - 'ignoble': ['gobelin', 'gobline', 'ignoble', 'inglobe'], - 'ignoramus': ['graminous', 'ignoramus'], - 'ignorance': ['enorganic', 'ignorance'], - 'ignorant': ['ignorant', 'tongrian'], - 'ignore': ['ignore', 'region'], - 'ignorement': ['ignorement', 'omnigerent'], - 'iguana': ['guiana', 'iguana'], - 'ihlat': ['ihlat', 'tahil'], - 'ihram': ['hiram', 'ihram', 'mahri'], - 'ijma': ['ijma', 'jami'], - 'ikat': ['atik', 'ikat'], - 'ikona': ['ikona', 'konia'], - 'ikra': ['ikra', 'kari', 'raki'], - 'ila': ['ail', 'ila', 'lai'], - 'ileac': ['alice', 'celia', 'ileac'], - 'ileon': ['enoil', 'ileon', 'olein'], - 'iliac': ['cilia', 'iliac'], - 'iliacus': ['acilius', 'iliacus'], - 'ilian': ['ilian', 'inial'], - 'ilicaceae': ['caeciliae', 'ilicaceae'], - 'ilioischiac': ['ilioischiac', 'ischioiliac'], - 'iliosacral': ['iliosacral', 'oscillaria'], - 'ilk': ['ilk', 'kil'], - 'ilka': ['ilka', 'kail', 'kali'], - 'ilkane': ['alkine', 'ilkane', 'inlake', 'inleak'], - 'illative': ['illative', 'veiltail'], - 'illaudatory': ['illaudatory', 'laudatorily'], - 'illeck': ['ellick', 'illeck'], - 'illinois': ['illinois', 'illision'], - 'illision': ['illinois', 'illision'], - 'illium': ['illium', 'lilium'], - 'illoricated': ['illoricated', 'lacertiloid'], - 'illth': ['illth', 'thill'], - 'illude': ['dillue', 'illude'], - 'illuder': ['dilluer', 'illuder'], - 'illy': ['illy', 'lily', 'yill'], - 'ilmenite': ['ilmenite', 'melinite', 'menilite'], - 'ilongot': ['ilongot', 'tooling'], - 'ilot': ['ilot', 'toil'], - 'ilya': ['ilya', 'yali'], - 'ima': ['aim', 'ami', 'ima'], - 'imager': ['imager', 'maigre', 'margie', 'mirage'], - 'imaginant': ['animating', 'imaginant'], - 'imaginer': ['imaginer', 'migraine'], - 'imagist': ['imagist', 'stigmai'], - 'imago': ['amigo', 'imago'], - 'imam': ['ammi', 'imam', 'maim', 'mima'], - 'imaret': ['imaret', 'metria', 'mirate', 'rimate'], - 'imbarge': ['gambier', 'imbarge'], - 'imbark': ['bikram', 'imbark'], - 'imbat': ['ambit', 'imbat'], - 'imbed': ['bedim', 'imbed'], - 'imbrue': ['erbium', 'imbrue'], - 'imbrute': ['burmite', 'imbrute', 'terbium'], - 'imer': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'imerina': ['imerina', 'inermia'], - 'imitancy': ['imitancy', 'intimacy', 'minacity'], - 'immane': ['ammine', 'immane'], - 'immanes': ['amenism', 'immanes', 'misname'], - 'immaterials': ['immaterials', 'materialism'], - 'immerd': ['dimmer', 'immerd', 'rimmed'], - 'immersible': ['immersible', 'semilimber'], - 'immersion': ['immersion', 'semiminor'], - 'immi': ['immi', 'mimi'], - 'imogen': ['geonim', 'imogen'], - 'imolinda': ['dominial', 'imolinda', 'limoniad'], - 'imp': ['imp', 'pim'], - 'impaction': ['impaction', 'ptomainic'], - 'impages': ['impages', 'mispage'], - 'impaint': ['impaint', 'timpani'], - 'impair': ['impair', 'pamiri'], - 'impala': ['impala', 'malapi'], - 'impaler': ['impaler', 'impearl', 'lempira', 'premial'], - 'impalsy': ['impalsy', 'misplay'], - 'impane': ['impane', 'pieman'], - 'impanel': ['impanel', 'maniple'], - 'impar': ['impar', 'pamir', 'prima'], - 'imparalleled': ['demiparallel', 'imparalleled'], - 'imparl': ['imparl', 'primal'], - 'impart': ['armpit', 'impart'], - 'imparter': ['imparter', 'reimpart'], - 'impartial': ['impartial', 'primatial'], - 'impaste': ['impaste', 'pastime'], - 'impasture': ['impasture', 'septarium'], - 'impeach': ['aphemic', 'impeach'], - 'impearl': ['impaler', 'impearl', 'lempira', 'premial'], - 'impeder': ['demirep', 'epiderm', 'impeder', 'remiped'], - 'impedient': ['impedient', 'mendipite'], - 'impenetrable': ['impenetrable', 'intemperable'], - 'impenetrably': ['impenetrably', 'intemperably'], - 'impenetrate': ['impenetrate', 'intemperate'], - 'imperant': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'], - 'imperate': ['imperate', 'premiate'], - 'imperish': ['emirship', 'imperish'], - 'imperscriptible': ['imperscriptible', 'imprescriptible'], - 'impersonate': ['impersonate', 'proseminate'], - 'impersonation': ['impersonation', 'prosemination', 'semipronation'], - 'impeticos': ['impeticos', 'poeticism'], - 'impetre': ['emptier', 'impetre'], - 'impetus': ['impetus', 'upsmite'], - 'imphee': ['imphee', 'phemie'], - 'implacental': ['capillament', 'implacental'], - 'implanter': ['implanter', 'reimplant'], - 'implate': ['implate', 'palmite'], - 'impleader': ['epidermal', 'impleader', 'premedial'], - 'implicate': ['ampelitic', 'implicate'], - 'impling': ['impling', 'limping'], - 'imply': ['imply', 'limpy', 'pilmy'], - 'impollute': ['impollute', 'multipole'], - 'imponderous': ['endosporium', 'imponderous'], - 'imponent': ['imponent', 'pimenton'], - 'importable': ['bitemporal', 'importable'], - 'importancy': ['importancy', 'patronymic', 'pyromantic'], - 'importer': ['importer', 'promerit', 'reimport'], - 'importunance': ['importunance', 'unimportance'], - 'importunate': ['importunate', 'permutation'], - 'importune': ['entropium', 'importune'], - 'imposal': ['imposal', 'spiloma'], - 'imposer': ['imposer', 'promise', 'semipro'], - 'imposter': ['imposter', 'tripsome'], - 'imposure': ['imposure', 'premious'], - 'imprecatory': ['cryptomeria', 'imprecatory'], - 'impreg': ['gimper', 'impreg'], - 'imprescriptible': ['imperscriptible', 'imprescriptible'], - 'imprese': ['emprise', 'imprese', 'premise', 'spireme'], - 'impress': ['impress', 'persism', 'premiss'], - 'impresser': ['impresser', 'reimpress'], - 'impressibility': ['impressibility', 'permissibility'], - 'impressible': ['impressible', 'permissible'], - 'impressibleness': ['impressibleness', 'permissibleness'], - 'impressibly': ['impressibly', 'permissibly'], - 'impression': ['impression', 'permission'], - 'impressionism': ['impressionism', 'misimpression'], - 'impressive': ['impressive', 'permissive'], - 'impressively': ['impressively', 'permissively'], - 'impressiveness': ['impressiveness', 'permissiveness'], - 'impressure': ['impressure', 'presurmise'], - 'imprinter': ['imprinter', 'reimprint'], - 'imprisoner': ['imprisoner', 'reimprison'], - 'improcreant': ['improcreant', 'preromantic'], - 'impship': ['impship', 'pimpish'], - 'impuberal': ['epilabrum', 'impuberal'], - 'impugnable': ['impugnable', 'plumbagine'], - 'impure': ['impure', 'umpire'], - 'impuritan': ['impuritan', 'partinium'], - 'imputer': ['imputer', 'trumpie'], - 'imsonic': ['iconism', 'imsonic', 'miscoin'], - 'in': ['in', 'ni'], - 'inaction': ['aconitin', 'inaction', 'nicotian'], - 'inactivate': ['inactivate', 'vaticinate'], - 'inactivation': ['inactivation', 'vaticination'], - 'inactive': ['antivice', 'inactive', 'vineatic'], - 'inadept': ['depaint', 'inadept', 'painted', 'patined'], - 'inaja': ['inaja', 'jaina'], - 'inalimental': ['antimallein', 'inalimental'], - 'inamorata': ['amatorian', 'inamorata'], - 'inane': ['annie', 'inane'], - 'inanga': ['angina', 'inanga'], - 'inanimate': ['amanitine', 'inanimate'], - 'inanimated': ['diamantine', 'inanimated'], - 'inapt': ['inapt', 'paint', 'pinta'], - 'inaptly': ['inaptly', 'planity', 'ptyalin'], - 'inarch': ['chinar', 'inarch'], - 'inarm': ['inarm', 'minar'], - 'inasmuch': ['humanics', 'inasmuch'], - 'inaurate': ['inaurate', 'ituraean'], - 'inbe': ['beni', 'bien', 'bine', 'inbe'], - 'inbreak': ['brankie', 'inbreak'], - 'inbreathe': ['hibernate', 'inbreathe'], - 'inbred': ['binder', 'inbred', 'rebind'], - 'inbreed': ['birdeen', 'inbreed'], - 'inca': ['cain', 'inca'], - 'incaic': ['acinic', 'incaic'], - 'incarnate': ['cratinean', 'incarnate', 'nectarian'], - 'incase': ['casein', 'incase'], - 'incast': ['incast', 'nastic'], - 'incensation': ['incensation', 'inscenation'], - 'incept': ['incept', 'pectin'], - 'inceptor': ['inceptor', 'pretonic'], - 'inceration': ['cineration', 'inceration'], - 'incessant': ['anticness', 'cantiness', 'incessant'], - 'incest': ['encist', 'incest', 'insect', 'scient'], - 'inch': ['chin', 'inch'], - 'inched': ['chined', 'inched'], - 'inchoate': ['inchoate', 'noachite'], - 'incide': ['cindie', 'incide'], - 'incinerate': ['creatinine', 'incinerate'], - 'incisal': ['incisal', 'salicin'], - 'incision': ['incision', 'inosinic'], - 'incisure': ['incisure', 'sciurine'], - 'inciter': ['citrine', 'crinite', 'inciter', 'neritic'], - 'inclinatorium': ['anticlinorium', 'inclinatorium'], - 'inclosure': ['cornelius', 'inclosure', 'reclusion'], - 'include': ['include', 'nuclide'], - 'incluse': ['esculin', 'incluse'], - 'incog': ['coign', 'incog'], - 'incognito': ['cognition', 'incognito'], - 'incoherence': ['coinherence', 'incoherence'], - 'incoherent': ['coinherent', 'incoherent'], - 'incomeless': ['comeliness', 'incomeless'], - 'incomer': ['incomer', 'moneric'], - 'incomputable': ['incomputable', 'uncompatible'], - 'incondite': ['incondite', 'nicotined'], - 'inconglomerate': ['inconglomerate', 'nongeometrical'], - 'inconsistent': ['inconsistent', 'nonscientist'], - 'inconsonant': ['inconsonant', 'nonsanction'], - 'incontrovertibility': ['incontrovertibility', 'introconvertibility'], - 'incontrovertible': ['incontrovertible', 'introconvertible'], - 'incorporate': ['incorporate', 'procreation'], - 'incorporated': ['adrenotropic', 'incorporated'], - 'incorpse': ['conspire', 'incorpse'], - 'incrash': ['archsin', 'incrash'], - 'increase': ['cerasein', 'increase'], - 'increate': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'], - 'incredited': ['incredited', 'indirected'], - 'increep': ['crepine', 'increep'], - 'increpate': ['anticreep', 'apenteric', 'increpate'], - 'increst': ['cistern', 'increst'], - 'incruental': ['incruental', 'unicentral'], - 'incrustant': ['incrustant', 'scrutinant'], - 'incrustate': ['incrustate', 'scaturient', 'scrutinate'], - 'incubate': ['cubanite', 'incubate'], - 'incudal': ['dulcian', 'incudal', 'lucanid', 'lucinda'], - 'incudomalleal': ['incudomalleal', 'malleoincudal'], - 'inculcation': ['anticouncil', 'inculcation'], - 'inculture': ['culturine', 'inculture'], - 'incuneation': ['enunciation', 'incuneation'], - 'incur': ['curin', 'incur', 'runic'], - 'incurable': ['binuclear', 'incurable'], - 'incus': ['incus', 'usnic'], - 'incut': ['cutin', 'incut', 'tunic'], - 'ind': ['din', 'ind', 'nid'], - 'indaba': ['badian', 'indaba'], - 'indagator': ['gradation', 'indagator', 'tanagroid'], - 'indan': ['indan', 'nandi'], - 'indane': ['aidenn', 'andine', 'dannie', 'indane'], - 'inde': ['dine', 'enid', 'inde', 'nide'], - 'indebt': ['bident', 'indebt'], - 'indebted': ['bidented', 'indebted'], - 'indefinitude': ['indefinitude', 'unidentified'], - 'indent': ['dentin', 'indent', 'intend', 'tinned'], - 'indented': ['indented', 'intended'], - 'indentedly': ['indentedly', 'intendedly'], - 'indenter': ['indenter', 'intender', 'reintend'], - 'indentment': ['indentment', 'intendment'], - 'indentured': ['indentured', 'underntide'], - 'indentwise': ['disentwine', 'indentwise'], - 'indeprivable': ['indeprivable', 'predivinable'], - 'indesert': ['indesert', 'inserted', 'resident'], - 'indiana': ['anidian', 'indiana'], - 'indic': ['dinic', 'indic'], - 'indican': ['cnidian', 'indican'], - 'indicate': ['diacetin', 'indicate'], - 'indicatory': ['dictionary', 'indicatory'], - 'indicial': ['anilidic', 'indicial'], - 'indicter': ['indicter', 'indirect', 'reindict'], - 'indies': ['indies', 'inside'], - 'indigena': ['gadinine', 'indigena'], - 'indigitate': ['indigitate', 'tingitidae'], - 'indign': ['dining', 'indign', 'niding'], - 'indigoferous': ['gonidiferous', 'indigoferous'], - 'indigotin': ['digitonin', 'indigotin'], - 'indirect': ['indicter', 'indirect', 'reindict'], - 'indirected': ['incredited', 'indirected'], - 'indirectly': ['cylindrite', 'indirectly'], - 'indiscreet': ['indiscreet', 'indiscrete', 'iridescent'], - 'indiscreetly': ['indiscreetly', 'indiscretely', 'iridescently'], - 'indiscrete': ['indiscreet', 'indiscrete', 'iridescent'], - 'indiscretely': ['indiscreetly', 'indiscretely', 'iridescently'], - 'indissolute': ['delusionist', 'indissolute'], - 'indite': ['indite', 'tineid'], - 'inditer': ['inditer', 'nitride'], - 'indogaean': ['ganoidean', 'indogaean'], - 'indole': ['doline', 'indole', 'leonid', 'loined', 'olenid'], - 'indolence': ['endocline', 'indolence'], - 'indoles': ['indoles', 'sondeli'], - 'indologist': ['indologist', 'nidologist'], - 'indology': ['indology', 'nidology'], - 'indone': ['donnie', 'indone', 'ondine'], - 'indoors': ['indoors', 'sordino'], - 'indorse': ['indorse', 'ordines', 'siredon', 'sordine'], - 'indra': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'], - 'indrawn': ['indrawn', 'winnard'], - 'induce': ['induce', 'uniced'], - 'inducer': ['inducer', 'uncried'], - 'indulge': ['dueling', 'indulge'], - 'indulgential': ['dentilingual', 'indulgential', 'linguidental'], - 'indulger': ['indulger', 'ungirdle'], - 'indument': ['indument', 'unminted'], - 'indurable': ['indurable', 'unbrailed', 'unridable'], - 'indurate': ['indurate', 'turdinae'], - 'induration': ['diurnation', 'induration'], - 'indus': ['dinus', 'indus', 'nidus'], - 'indusiform': ['disuniform', 'indusiform'], - 'induviae': ['induviae', 'viduinae'], - 'induvial': ['diluvian', 'induvial'], - 'inearth': ['anither', 'inearth', 'naither'], - 'inelastic': ['elasticin', 'inelastic', 'sciential'], - 'inelegant': ['eglantine', 'inelegant', 'legantine'], - 'ineludible': ['ineludible', 'unelidible'], - 'inept': ['inept', 'pinte'], - 'inequity': ['equinity', 'inequity'], - 'inerm': ['inerm', 'miner'], - 'inermes': ['ermines', 'inermes'], - 'inermia': ['imerina', 'inermia'], - 'inermous': ['inermous', 'monsieur'], - 'inert': ['inert', 'inter', 'niter', 'retin', 'trine'], - 'inertance': ['inertance', 'nectarine'], - 'inertial': ['inertial', 'linarite'], - 'inertly': ['elytrin', 'inertly', 'trinely'], - 'inethical': ['echinital', 'inethical'], - 'ineunt': ['ineunt', 'untine'], - 'inez': ['inez', 'zein'], - 'inface': ['fiance', 'inface'], - 'infame': ['famine', 'infame'], - 'infamy': ['infamy', 'manify'], - 'infarct': ['frantic', 'infarct', 'infract'], - 'infarction': ['infarction', 'infraction'], - 'infaust': ['faunist', 'fustian', 'infaust'], - 'infecter': ['frenetic', 'infecter', 'reinfect'], - 'infeed': ['define', 'infeed'], - 'infelt': ['finlet', 'infelt'], - 'infer': ['finer', 'infer'], - 'inferable': ['inferable', 'refinable'], - 'infern': ['finner', 'infern'], - 'inferoanterior': ['anteroinferior', 'inferoanterior'], - 'inferoposterior': ['inferoposterior', 'posteroinferior'], - 'infestation': ['festination', 'infestation', 'sinfonietta'], - 'infester': ['infester', 'reinfest'], - 'infidel': ['infidel', 'infield'], - 'infield': ['infidel', 'infield'], - 'inflame': ['feminal', 'inflame'], - 'inflamed': ['fieldman', 'inflamed'], - 'inflamer': ['inflamer', 'rifleman'], - 'inflatus': ['inflatus', 'stainful'], - 'inflicter': ['inflicter', 'reinflict'], - 'inform': ['formin', 'inform'], - 'informal': ['formalin', 'informal', 'laniform'], - 'informer': ['informer', 'reinform', 'reniform'], - 'infra': ['infra', 'irfan'], - 'infract': ['frantic', 'infarct', 'infract'], - 'infraction': ['infarction', 'infraction'], - 'infringe': ['infringe', 'refining'], - 'ing': ['gin', 'ing', 'nig'], - 'inga': ['gain', 'inga', 'naig', 'ngai'], - 'ingaevones': ['avignonese', 'ingaevones'], - 'ingate': ['eating', 'ingate', 'tangie'], - 'ingather': ['hearting', 'ingather'], - 'ingenue': ['genuine', 'ingenue'], - 'ingenuous': ['ingenuous', 'unigenous'], - 'inger': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'], - 'ingest': ['ingest', 'signet', 'stinge'], - 'ingesta': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'ingle': ['ingle', 'ligne', 'linge', 'nigel'], - 'inglobe': ['gobelin', 'gobline', 'ignoble', 'inglobe'], - 'ingomar': ['ingomar', 'moringa', 'roaming'], - 'ingram': ['arming', 'ingram', 'margin'], - 'ingrate': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'], - 'ingrow': ['ingrow', 'rowing'], - 'ingrowth': ['ingrowth', 'throwing'], - 'inguinal': ['inguinal', 'unailing'], - 'inguinocrural': ['cruroinguinal', 'inguinocrural'], - 'inhabiter': ['inhabiter', 'reinhabit'], - 'inhaler': ['hernial', 'inhaler'], - 'inhauler': ['herulian', 'inhauler'], - 'inhaust': ['auntish', 'inhaust'], - 'inhere': ['herein', 'inhere'], - 'inhumer': ['inhumer', 'rhenium'], - 'inial': ['ilian', 'inial'], - 'ink': ['ink', 'kin'], - 'inkle': ['inkle', 'liken'], - 'inkless': ['inkless', 'kinless'], - 'inkling': ['inkling', 'linking'], - 'inknot': ['inknot', 'tonkin'], - 'inkra': ['inkra', 'krina', 'nakir', 'rinka'], - 'inks': ['inks', 'sink', 'skin'], - 'inlaid': ['anilid', 'dialin', 'dianil', 'inlaid'], - 'inlake': ['alkine', 'ilkane', 'inlake', 'inleak'], - 'inlaut': ['inlaut', 'unital'], - 'inlaw': ['inlaw', 'liwan'], - 'inlay': ['inlay', 'naily'], - 'inlayer': ['inlayer', 'nailery'], - 'inleak': ['alkine', 'ilkane', 'inlake', 'inleak'], - 'inlet': ['inlet', 'linet'], - 'inlook': ['inlook', 'koilon'], - 'inly': ['inly', 'liny'], - 'inmate': ['etamin', 'inmate', 'taimen', 'tamein'], - 'inmeats': ['atenism', 'inmeats', 'insteam', 'samnite'], - 'inmost': ['inmost', 'monist', 'omnist'], - 'innate': ['annite', 'innate', 'tinean'], - 'innative': ['innative', 'invinate'], - 'innatural': ['innatural', 'triannual'], - 'inner': ['inner', 'renin'], - 'innerve': ['innerve', 'nervine', 'vernine'], - 'innest': ['innest', 'sennit', 'sinnet', 'tennis'], - 'innet': ['innet', 'tinne'], - 'innominata': ['antinomian', 'innominata'], - 'innovate': ['innovate', 'venation'], - 'innovationist': ['innovationist', 'nonvisitation'], - 'ino': ['ino', 'ion'], - 'inobtainable': ['inobtainable', 'nonbilabiate'], - 'inocarpus': ['inocarpus', 'unprosaic'], - 'inoculant': ['continual', 'inoculant', 'unctional'], - 'inocystoma': ['actomyosin', 'inocystoma'], - 'inodes': ['deinos', 'donsie', 'inodes', 'onside'], - 'inogen': ['genion', 'inogen'], - 'inoma': ['amino', 'inoma', 'naomi', 'omani', 'omina'], - 'inomyxoma': ['inomyxoma', 'myxoinoma'], - 'inone': ['inone', 'oenin'], - 'inoperculata': ['inoperculata', 'precautional'], - 'inorb': ['biron', 'inorb', 'robin'], - 'inorganic': ['conringia', 'inorganic'], - 'inorganical': ['carolingian', 'inorganical'], - 'inornate': ['anointer', 'inornate', 'nonirate', 'reanoint'], - 'inosic': ['inosic', 'sinico'], - 'inosinic': ['incision', 'inosinic'], - 'inosite': ['inosite', 'sionite'], - 'inphase': ['inphase', 'phineas'], - 'inpush': ['inpush', 'punish', 'unship'], - 'input': ['input', 'punti'], - 'inquiet': ['inquiet', 'quinite'], - 'inreality': ['inreality', 'linearity'], - 'inro': ['inro', 'iron', 'noir', 'nori'], - 'inroad': ['dorian', 'inroad', 'ordain'], - 'inroader': ['inroader', 'ordainer', 'reordain'], - 'inrub': ['bruin', 'burin', 'inrub'], - 'inrun': ['inrun', 'inurn'], - 'insane': ['insane', 'sienna'], - 'insatiably': ['insatiably', 'sanability'], - 'inscenation': ['incensation', 'inscenation'], - 'inscient': ['inscient', 'nicenist'], - 'insculp': ['insculp', 'sculpin'], - 'insea': ['anise', 'insea', 'siena', 'sinae'], - 'inseam': ['asimen', 'inseam', 'mesian'], - 'insect': ['encist', 'incest', 'insect', 'scient'], - 'insectan': ['insectan', 'instance'], - 'insectile': ['insectile', 'selenitic'], - 'insectivora': ['insectivora', 'visceration'], - 'insecure': ['insecure', 'sinecure'], - 'insee': ['insee', 'seine'], - 'inseer': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'], - 'insert': ['estrin', 'insert', 'sinter', 'sterin', 'triens'], - 'inserted': ['indesert', 'inserted', 'resident'], - 'inserter': ['inserter', 'reinsert'], - 'insessor': ['insessor', 'rosiness'], - 'inset': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'], - 'insetter': ['insetter', 'interest', 'interset', 'sternite'], - 'inshave': ['evanish', 'inshave'], - 'inshoot': ['inshoot', 'insooth'], - 'inside': ['indies', 'inside'], - 'insider': ['insider', 'siderin'], - 'insistent': ['insistent', 'tintiness'], - 'insister': ['insister', 'reinsist', 'sinister', 'sisterin'], - 'insole': ['insole', 'leonis', 'lesion', 'selion'], - 'insomnia': ['insomnia', 'simonian'], - 'insomniac': ['aniconism', 'insomniac'], - 'insooth': ['inshoot', 'insooth'], - 'insorb': ['insorb', 'sorbin'], - 'insoul': ['insoul', 'linous', 'nilous', 'unsoil'], - 'inspection': ['cispontine', 'inspection'], - 'inspiriter': ['inspiriter', 'reinspirit'], - 'inspissate': ['antisepsis', 'inspissate'], - 'inspreith': ['inspreith', 'nephritis', 'phrenitis'], - 'installer': ['installer', 'reinstall'], - 'instance': ['insectan', 'instance'], - 'instanter': ['instanter', 'transient'], - 'instar': ['instar', 'santir', 'strain'], - 'instate': ['atenist', 'instate', 'satient', 'steatin'], - 'instead': ['destain', 'instead', 'sainted', 'satined'], - 'insteam': ['atenism', 'inmeats', 'insteam', 'samnite'], - 'instep': ['instep', 'spinet'], - 'instiller': ['instiller', 'reinstill'], - 'instructer': ['instructer', 'intercrust', 'reinstruct'], - 'instructional': ['instructional', 'nonaltruistic'], - 'insula': ['insula', 'lanius', 'lusian'], - 'insulant': ['insulant', 'sultanin'], - 'insulse': ['insulse', 'silenus'], - 'insult': ['insult', 'sunlit', 'unlist', 'unslit'], - 'insulter': ['insulter', 'lustrine', 'reinsult'], - 'insunk': ['insunk', 'unskin'], - 'insurable': ['insurable', 'sublinear'], - 'insurance': ['insurance', 'nuisancer'], - 'insurant': ['insurant', 'unstrain'], - 'insure': ['insure', 'rusine', 'ursine'], - 'insurge': ['insurge', 'resuing'], - 'insurgent': ['insurgent', 'unresting'], - 'intactile': ['catlinite', 'intactile'], - 'intaglio': ['intaglio', 'ligation'], - 'intake': ['intake', 'kentia'], - 'intaker': ['intaker', 'katrine', 'keratin'], - 'intarsia': ['antiaris', 'intarsia'], - 'intarsiate': ['intarsiate', 'nestiatria'], - 'integral': ['integral', 'teraglin', 'triangle'], - 'integralize': ['gelatinizer', 'integralize'], - 'integrate': ['argentite', 'integrate'], - 'integrative': ['integrative', 'vertiginate', 'vinaigrette'], - 'integrious': ['grisounite', 'grisoutine', 'integrious'], - 'intemperable': ['impenetrable', 'intemperable'], - 'intemperably': ['impenetrably', 'intemperably'], - 'intemperate': ['impenetrate', 'intemperate'], - 'intemporal': ['intemporal', 'trampoline'], - 'intend': ['dentin', 'indent', 'intend', 'tinned'], - 'intended': ['indented', 'intended'], - 'intendedly': ['indentedly', 'intendedly'], - 'intender': ['indenter', 'intender', 'reintend'], - 'intendment': ['indentment', 'intendment'], - 'intense': ['intense', 'sennite'], - 'intent': ['intent', 'tinnet'], - 'intently': ['intently', 'nitently'], - 'inter': ['inert', 'inter', 'niter', 'retin', 'trine'], - 'interactional': ['interactional', 'intercalation'], - 'interagent': ['entreating', 'interagent'], - 'interally': ['interally', 'reliantly'], - 'interastral': ['interastral', 'intertarsal'], - 'intercalation': ['interactional', 'intercalation'], - 'intercale': ['intercale', 'interlace', 'lacertine', 'reclinate'], - 'intercede': ['intercede', 'tridecene'], - 'interceder': ['crednerite', 'interceder'], - 'intercession': ['intercession', 'recensionist'], - 'intercome': ['entomeric', 'intercome', 'morencite'], - 'interconal': ['interconal', 'nonrecital'], - 'intercrust': ['instructer', 'intercrust', 'reinstruct'], - 'interdome': ['interdome', 'mordenite', 'nemertoid'], - 'intereat': ['intereat', 'tinetare'], - 'interest': ['insetter', 'interest', 'interset', 'sternite'], - 'interester': ['interester', 'reinterest'], - 'interfering': ['interfering', 'interfinger'], - 'interfinger': ['interfering', 'interfinger'], - 'intergrade': ['gradienter', 'intergrade'], - 'interim': ['interim', 'termini'], - 'interimistic': ['interimistic', 'trimesitinic'], - 'interlace': ['intercale', 'interlace', 'lacertine', 'reclinate'], - 'interlaced': ['credential', 'interlaced', 'reclinated'], - 'interlaid': ['deliriant', 'draintile', 'interlaid'], - 'interlap': ['interlap', 'repliant', 'triplane'], - 'interlapse': ['alpestrine', 'episternal', 'interlapse', 'presential'], - 'interlay': ['interlay', 'lyterian'], - 'interleaf': ['interleaf', 'reinflate'], - 'interleaver': ['interleaver', 'reverential'], - 'interlocal': ['citronella', 'interlocal'], - 'interlope': ['interlope', 'interpole', 'repletion', 'terpineol'], - 'interlot': ['interlot', 'trotline'], - 'intermat': ['intermat', 'martinet', 'tetramin'], - 'intermatch': ['intermatch', 'thermantic'], - 'intermine': ['intermine', 'nemertini', 'terminine'], - 'intermorainic': ['intermorainic', 'recrimination'], - 'intermutual': ['intermutual', 'ultraminute'], - 'intern': ['intern', 'tinner'], - 'internality': ['internality', 'itinerantly'], - 'internecive': ['internecive', 'reincentive'], - 'internee': ['internee', 'retinene'], - 'interoceptor': ['interoceptor', 'reprotection'], - 'interpause': ['interpause', 'resupinate'], - 'interpave': ['interpave', 'prenative'], - 'interpeal': ['interpeal', 'interplea'], - 'interpellate': ['interpellate', 'pantellerite'], - 'interpellation': ['interpellation', 'interpollinate'], - 'interphone': ['interphone', 'pinnothere'], - 'interplay': ['interplay', 'painterly'], - 'interplea': ['interpeal', 'interplea'], - 'interplead': ['interplead', 'peridental'], - 'interpolar': ['interpolar', 'reniportal'], - 'interpolate': ['interpolate', 'triantelope'], - 'interpole': ['interlope', 'interpole', 'repletion', 'terpineol'], - 'interpollinate': ['interpellation', 'interpollinate'], - 'interpone': ['interpone', 'peritenon', 'pinnotere', 'preintone'], - 'interposal': ['interposal', 'psalterion'], - 'interposure': ['interposure', 'neuropteris'], - 'interpreter': ['interpreter', 'reinterpret'], - 'interproduce': ['interproduce', 'prereduction'], - 'interroom': ['interroom', 'remontoir'], - 'interrupter': ['interrupter', 'reinterrupt'], - 'intersale': ['intersale', 'larsenite'], - 'intersectional': ['intersectional', 'intraselection'], - 'interset': ['insetter', 'interest', 'interset', 'sternite'], - 'intershade': ['dishearten', 'intershade'], - 'intersituate': ['intersituate', 'tenuistriate'], - 'intersocial': ['intersocial', 'orleanistic', 'sclerotinia'], - 'interspace': ['esperantic', 'interspace'], - 'interspecific': ['interspecific', 'prescientific'], - 'interspiration': ['interspiration', 'repristination'], - 'intersporal': ['intersporal', 'tripersonal'], - 'interstation': ['interstation', 'strontianite'], - 'intertalk': ['intertalk', 'latterkin'], - 'intertarsal': ['interastral', 'intertarsal'], - 'interteam': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'], - 'intertie': ['intertie', 'retinite'], - 'intertone': ['intertone', 'retention'], - 'intervascular': ['intervascular', 'vernacularist'], - 'intervention': ['intervention', 'introvenient'], - 'interverbal': ['interverbal', 'invertebral'], - 'interviewer': ['interviewer', 'reinterview'], - 'interwed': ['interwed', 'wintered'], - 'interwish': ['interwish', 'winterish'], - 'interwork': ['interwork', 'tinworker'], - 'interwove': ['interwove', 'overtwine'], - 'intestate': ['enstatite', 'intestate', 'satinette'], - 'intestinovesical': ['intestinovesical', 'vesicointestinal'], - 'inthrong': ['inthrong', 'northing'], - 'intima': ['intima', 'timani'], - 'intimacy': ['imitancy', 'intimacy', 'minacity'], - 'intimater': ['intimater', 'traintime'], - 'into': ['into', 'nito', 'oint', 'tino'], - 'intoed': ['ditone', 'intoed'], - 'intolerance': ['crenelation', 'intolerance'], - 'intolerating': ['intolerating', 'nitrogelatin'], - 'intonate': ['intonate', 'totanine'], - 'intonator': ['intonator', 'tortonian'], - 'intone': ['intone', 'tenino'], - 'intonement': ['intonement', 'omnitenent'], - 'intoner': ['intoner', 'ternion'], - 'intort': ['intort', 'tornit', 'triton'], - 'intoxicate': ['excitation', 'intoxicate'], - 'intracoelomic': ['iconometrical', 'intracoelomic'], - 'intracosmic': ['intracosmic', 'narcoticism'], - 'intracostal': ['intracostal', 'stratonical'], - 'intractile': ['intractile', 'triclinate'], - 'intrada': ['intrada', 'radiant'], - 'intraselection': ['intersectional', 'intraselection'], - 'intraseptal': ['intraseptal', 'paternalist', 'prenatalist'], - 'intraspinal': ['intraspinal', 'pinnitarsal'], - 'intreat': ['intreat', 'iterant', 'nitrate', 'tertian'], - 'intrencher': ['intrencher', 'reintrench'], - 'intricate': ['intricate', 'triactine'], - 'intrication': ['citrination', 'intrication'], - 'intrigue': ['intrigue', 'tigurine'], - 'introconvertibility': ['incontrovertibility', 'introconvertibility'], - 'introconvertible': ['incontrovertible', 'introconvertible'], - 'introduce': ['introduce', 'reduction'], - 'introit': ['introit', 'nitriot'], - 'introitus': ['introitus', 'routinist'], - 'introvenient': ['intervention', 'introvenient'], - 'intrude': ['intrude', 'turdine', 'untired', 'untried'], - 'intruse': ['intruse', 'sturine'], - 'intrust': ['intrust', 'sturtin'], - 'intube': ['butein', 'butine', 'intube'], - 'intue': ['intue', 'unite', 'untie'], - 'inula': ['inula', 'luian', 'uinal'], - 'inurbane': ['eburnian', 'inurbane'], - 'inure': ['inure', 'urine'], - 'inured': ['diurne', 'inured', 'ruined', 'unride'], - 'inurn': ['inrun', 'inurn'], - 'inustion': ['inustion', 'unionist'], - 'invader': ['invader', 'ravined', 'viander'], - 'invaluable': ['invaluable', 'unvailable'], - 'invar': ['invar', 'ravin', 'vanir'], - 'invector': ['contrive', 'invector'], - 'inveigler': ['inveigler', 'relieving'], - 'inventer': ['inventer', 'reinvent', 'ventrine', 'vintener'], - 'inventress': ['inventress', 'vintneress'], - 'inverness': ['inverness', 'nerviness'], - 'inversatile': ['inversatile', 'serviential'], - 'inverse': ['inverse', 'versine'], - 'invert': ['invert', 'virent'], - 'invertase': ['invertase', 'servetian'], - 'invertebral': ['interverbal', 'invertebral'], - 'inverter': ['inverter', 'reinvert', 'trinerve'], - 'investigation': ['investigation', 'tenovaginitis'], - 'invinate': ['innative', 'invinate'], - 'inviter': ['inviter', 'vitrine'], - 'invocate': ['conative', 'invocate'], - 'invoker': ['invoker', 'overink'], - 'involucrate': ['countervail', 'involucrate'], - 'involucre': ['involucre', 'volucrine'], - 'inwards': ['inwards', 'sinward'], - 'inwith': ['inwith', 'within'], - 'iodate': ['idotea', 'iodate', 'otidae'], - 'iodhydrate': ['hydriodate', 'iodhydrate'], - 'iodhydric': ['hydriodic', 'iodhydric'], - 'iodinate': ['ideation', 'iodinate', 'taenioid'], - 'iodinium': ['iodinium', 'ionidium'], - 'iodism': ['idoism', 'iodism'], - 'iodite': ['iodite', 'teioid'], - 'iodo': ['iodo', 'ooid'], - 'iodocasein': ['iodocasein', 'oniscoidea'], - 'iodochloride': ['chloroiodide', 'iodochloride'], - 'iodohydric': ['hydroiodic', 'iodohydric'], - 'iodol': ['dooli', 'iodol'], - 'iodothyrin': ['iodothyrin', 'thyroiodin'], - 'iodous': ['iodous', 'odious'], - 'ion': ['ino', 'ion'], - 'ionidium': ['iodinium', 'ionidium'], - 'ionizer': ['ionizer', 'ironize'], - 'iota': ['iota', 'tiao'], - 'iotacist': ['iotacist', 'taoistic'], - 'ipecac': ['icecap', 'ipecac'], - 'ipil': ['ipil', 'pili'], - 'ipseand': ['ipseand', 'panside', 'pansied'], - 'ira': ['air', 'ira', 'ria'], - 'iracund': ['candiru', 'iracund'], - 'irade': ['aider', 'deair', 'irade', 'redia'], - 'iran': ['arni', 'iran', 'nair', 'rain', 'rani'], - 'irani': ['irani', 'irian'], - 'iranism': ['iranism', 'sirmian'], - 'iranist': ['iranist', 'istrian'], - 'irascent': ['canister', 'cestrian', 'cisterna', 'irascent'], - 'irate': ['arite', 'artie', 'irate', 'retia', 'tarie'], - 'irately': ['irately', 'reality'], - 'ire': ['ire', 'rie'], - 'irena': ['erian', 'irena', 'reina'], - 'irene': ['ernie', 'ierne', 'irene'], - 'irenic': ['irenic', 'ricine'], - 'irenics': ['irenics', 'resinic', 'sericin', 'sirenic'], - 'irenicum': ['irenicum', 'muricine'], - 'iresine': ['iresine', 'iserine'], - 'irfan': ['infra', 'irfan'], - 'irgun': ['irgun', 'ruing', 'unrig'], - 'irian': ['irani', 'irian'], - 'iridal': ['iridal', 'lariid'], - 'iridate': ['arietid', 'iridate'], - 'iridectomy': ['iridectomy', 'mediocrity'], - 'irides': ['irides', 'irised'], - 'iridescent': ['indiscreet', 'indiscrete', 'iridescent'], - 'iridescently': ['indiscreetly', 'indiscretely', 'iridescently'], - 'iridosmium': ['iridosmium', 'osmiridium'], - 'irised': ['irides', 'irised'], - 'irish': ['irish', 'rishi', 'sirih'], - 'irk': ['irk', 'rik'], - 'irma': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'], - 'iroha': ['haori', 'iroha'], - 'irok': ['irok', 'kori'], - 'iron': ['inro', 'iron', 'noir', 'nori'], - 'ironclad': ['ironclad', 'rolandic'], - 'irone': ['irone', 'norie'], - 'ironhead': ['herodian', 'ironhead'], - 'ironice': ['ironice', 'oneiric'], - 'ironize': ['ionizer', 'ironize'], - 'ironshod': ['dishonor', 'ironshod'], - 'ironside': ['derision', 'ironside', 'resinoid', 'sirenoid'], - 'irradiant': ['irradiant', 'triandria'], - 'irrationable': ['irrationable', 'orbitelarian'], - 'irredenta': ['irredenta', 'retainder'], - 'irrelate': ['irrelate', 'retailer'], - 'irrepentance': ['irrepentance', 'pretercanine'], - 'irving': ['irving', 'riving', 'virgin'], - 'irvingiana': ['irvingiana', 'viraginian'], - 'is': ['is', 'si'], - 'isabel': ['isabel', 'lesbia'], - 'isabella': ['isabella', 'sailable'], - 'isagogical': ['isagogical', 'sialagogic'], - 'isagon': ['gosain', 'isagon', 'sagoin'], - 'isander': ['andries', 'isander', 'sardine'], - 'isanthous': ['anhistous', 'isanthous'], - 'isatate': ['isatate', 'satiate', 'taetsia'], - 'isatic': ['isatic', 'saitic'], - 'isatin': ['antisi', 'isatin'], - 'isatinic': ['isatinic', 'sinaitic'], - 'isaurian': ['anisuria', 'isaurian'], - 'isawa': ['isawa', 'waasi'], - 'isba': ['absi', 'bais', 'bias', 'isba'], - 'iscariot': ['aoristic', 'iscariot'], - 'ischemia': ['hemiasci', 'ischemia'], - 'ischioiliac': ['ilioischiac', 'ischioiliac'], - 'ischiorectal': ['ischiorectal', 'sciotherical'], - 'iserine': ['iresine', 'iserine'], - 'iseum': ['iseum', 'musie'], - 'isiac': ['ascii', 'isiac'], - 'isidore': ['isidore', 'osiride'], - 'isis': ['isis', 'sisi'], - 'islam': ['islam', 'ismal', 'simal'], - 'islamic': ['islamic', 'laicism', 'silicam'], - 'islamitic': ['islamitic', 'italicism'], - 'islandy': ['islandy', 'lindsay'], - 'islay': ['islay', 'saily'], - 'isle': ['isle', 'lise', 'sile'], - 'islet': ['islet', 'istle', 'slite', 'stile'], - 'isleta': ['isleta', 'litsea', 'salite', 'stelai'], - 'isleted': ['idleset', 'isleted'], - 'ism': ['ism', 'sim'], - 'ismal': ['islam', 'ismal', 'simal'], - 'ismatic': ['ismatic', 'itacism'], - 'ismatical': ['ismatical', 'lamaistic'], - 'isocamphor': ['chromopsia', 'isocamphor'], - 'isoclinal': ['collinsia', 'isoclinal'], - 'isocline': ['isocline', 'silicone'], - 'isocoumarin': ['acrimonious', 'isocoumarin'], - 'isodulcite': ['isodulcite', 'solicitude'], - 'isogen': ['geison', 'isogen'], - 'isogeotherm': ['geoisotherm', 'isogeotherm'], - 'isogon': ['isogon', 'songoi'], - 'isogram': ['isogram', 'orgiasm'], - 'isohel': ['helios', 'isohel'], - 'isoheptane': ['apothesine', 'isoheptane'], - 'isolate': ['aeolist', 'isolate'], - 'isolated': ['diastole', 'isolated', 'sodalite', 'solidate'], - 'isolative': ['isolative', 'soliative'], - 'isolde': ['isolde', 'soiled'], - 'isomer': ['isomer', 'rimose'], - 'isometric': ['eroticism', 'isometric', 'meroistic', 'trioecism'], - 'isomorph': ['isomorph', 'moorship'], - 'isonitrile': ['isonitrile', 'resilition'], - 'isonym': ['isonym', 'myosin', 'simony'], - 'isophthalyl': ['isophthalyl', 'lithophysal'], - 'isopodan': ['anisopod', 'isopodan'], - 'isoptera': ['isoptera', 'septoria'], - 'isosaccharic': ['isosaccharic', 'sacroischiac'], - 'isostere': ['erotesis', 'isostere'], - 'isotac': ['isotac', 'scotia'], - 'isotheral': ['horsetail', 'isotheral'], - 'isotherm': ['homerist', 'isotherm', 'otherism', 'theorism'], - 'isotria': ['isotria', 'oaritis'], - 'isotron': ['isotron', 'torsion'], - 'isotrope': ['isotrope', 'portoise'], - 'isotropism': ['isotropism', 'promitosis'], - 'isotropy': ['isotropy', 'porosity'], - 'israel': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'], - 'israeli': ['alisier', 'israeli'], - 'israelite': ['israelite', 'resiliate'], - 'issuable': ['basileus', 'issuable', 'suasible'], - 'issuant': ['issuant', 'sustain'], - 'issue': ['issue', 'susie'], - 'issuer': ['issuer', 'uresis'], - 'ist': ['ist', 'its', 'sit'], - 'isthmi': ['isthmi', 'timish'], - 'isthmian': ['isthmian', 'smithian'], - 'isthmoid': ['isthmoid', 'thomisid'], - 'istle': ['islet', 'istle', 'slite', 'stile'], - 'istrian': ['iranist', 'istrian'], - 'isuret': ['isuret', 'resuit'], - 'it': ['it', 'ti'], - 'ita': ['ait', 'ati', 'ita', 'tai'], - 'itacism': ['ismatic', 'itacism'], - 'itaconate': ['acetation', 'itaconate'], - 'itaconic': ['aconitic', 'cationic', 'itaconic'], - 'itali': ['itali', 'tilia'], - 'italian': ['antilia', 'italian'], - 'italic': ['clitia', 'italic'], - 'italicism': ['islamitic', 'italicism'], - 'italite': ['italite', 'letitia', 'tilaite'], - 'italon': ['italon', 'lation', 'talion'], - 'itaves': ['itaves', 'stevia'], - 'itch': ['chit', 'itch', 'tchi'], - 'item': ['emit', 'item', 'mite', 'time'], - 'iten': ['iten', 'neti', 'tien', 'tine'], - 'itenean': ['aniente', 'itenean'], - 'iter': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'], - 'iterable': ['iterable', 'liberate'], - 'iterance': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'], - 'iterant': ['intreat', 'iterant', 'nitrate', 'tertian'], - 'ithaca': ['cahita', 'ithaca'], - 'ithacan': ['ithacan', 'tachina'], - 'ither': ['ither', 'their'], - 'itinerant': ['itinerant', 'nitratine'], - 'itinerantly': ['internality', 'itinerantly'], - 'itmo': ['itmo', 'moit', 'omit', 'timo'], - 'ito': ['ito', 'toi'], - 'itoism': ['itoism', 'omitis'], - 'itoist': ['itoist', 'otitis'], - 'itoland': ['itoland', 'talonid', 'tindalo'], - 'itonama': ['amniota', 'itonama'], - 'itonia': ['aition', 'itonia'], - 'its': ['ist', 'its', 'sit'], - 'itself': ['itself', 'stifle'], - 'ituraean': ['inaurate', 'ituraean'], - 'itza': ['itza', 'tiza', 'zati'], - 'iva': ['iva', 'vai', 'via'], - 'ivan': ['ivan', 'vain', 'vina'], - 'ivorist': ['ivorist', 'visitor'], - 'iwaiwa': ['iwaiwa', 'waiwai'], - 'ixiama': ['amixia', 'ixiama'], - 'ixodic': ['ixodic', 'oxidic'], - 'iyo': ['iyo', 'yoi'], - 'izar': ['izar', 'zira'], - 'jacami': ['jacami', 'jicama'], - 'jacobian': ['bajocian', 'jacobian'], - 'jag': ['gaj', 'jag'], - 'jagir': ['jagir', 'jirga'], - 'jagua': ['ajuga', 'jagua'], - 'jail': ['jail', 'lija'], - 'jailer': ['jailer', 'rejail'], - 'jaime': ['jaime', 'jamie'], - 'jain': ['jain', 'jina'], - 'jaina': ['inaja', 'jaina'], - 'jalouse': ['jalouse', 'jealous'], - 'jama': ['jama', 'maja'], - 'jamesian': ['jamesian', 'jamesina'], - 'jamesina': ['jamesian', 'jamesina'], - 'jami': ['ijma', 'jami'], - 'jamie': ['jaime', 'jamie'], - 'jane': ['jane', 'jean'], - 'janos': ['janos', 'jason', 'jonas', 'sonja'], - 'jantu': ['jantu', 'jaunt', 'junta'], - 'januslike': ['januslike', 'seljukian'], - 'japonism': ['japonism', 'pajonism'], - 'jar': ['jar', 'raj'], - 'jara': ['ajar', 'jara', 'raja'], - 'jarmo': ['jarmo', 'major'], - 'jarnut': ['jarnut', 'jurant'], - 'jason': ['janos', 'jason', 'jonas', 'sonja'], - 'jat': ['jat', 'taj'], - 'jatki': ['jatki', 'tajik'], - 'jato': ['jato', 'jota'], - 'jaun': ['jaun', 'juan'], - 'jaunt': ['jantu', 'jaunt', 'junta'], - 'jaup': ['jaup', 'puja'], - 'jealous': ['jalouse', 'jealous'], - 'jean': ['jane', 'jean'], - 'jebusitical': ['jebusitical', 'justiciable'], - 'jecoral': ['cajoler', 'jecoral'], - 'jeffery': ['jeffery', 'jeffrey'], - 'jeffrey': ['jeffery', 'jeffrey'], - 'jejunoduodenal': ['duodenojejunal', 'jejunoduodenal'], - 'jenine': ['jenine', 'jennie'], - 'jennie': ['jenine', 'jennie'], - 'jerker': ['jerker', 'rejerk'], - 'jerkin': ['jerkin', 'jinker'], - 'jeziah': ['hejazi', 'jeziah'], - 'jicama': ['jacami', 'jicama'], - 'jihad': ['hadji', 'jihad'], - 'jina': ['jain', 'jina'], - 'jingoist': ['jingoist', 'joisting'], - 'jinker': ['jerkin', 'jinker'], - 'jirga': ['jagir', 'jirga'], - 'jobo': ['bojo', 'jobo'], - 'johan': ['johan', 'jonah'], - 'join': ['join', 'joni'], - 'joinant': ['joinant', 'jotnian'], - 'joiner': ['joiner', 'rejoin'], - 'jointless': ['jointless', 'joltiness'], - 'joisting': ['jingoist', 'joisting'], - 'jolter': ['jolter', 'rejolt'], - 'joltiness': ['jointless', 'joltiness'], - 'jonah': ['johan', 'jonah'], - 'jonas': ['janos', 'jason', 'jonas', 'sonja'], - 'joni': ['join', 'joni'], - 'joom': ['joom', 'mojo'], - 'joshi': ['joshi', 'shoji'], - 'jota': ['jato', 'jota'], - 'jotnian': ['joinant', 'jotnian'], - 'journeyer': ['journeyer', 'rejourney'], - 'joust': ['joust', 'justo'], - 'juan': ['jaun', 'juan'], - 'judaic': ['judaic', 'judica'], - 'judica': ['judaic', 'judica'], - 'jujitsu': ['jujitsu', 'jujuist'], - 'jujuist': ['jujitsu', 'jujuist'], - 'junta': ['jantu', 'jaunt', 'junta'], - 'jurant': ['jarnut', 'jurant'], - 'justiciable': ['jebusitical', 'justiciable'], - 'justo': ['joust', 'justo'], - 'jute': ['jute', 'teju'], - 'ka': ['ak', 'ka'], - 'kabel': ['blake', 'bleak', 'kabel'], - 'kaberu': ['kaberu', 'kubera'], - 'kabuli': ['kabuli', 'kiluba'], - 'kabyle': ['bleaky', 'kabyle'], - 'kachari': ['chakari', 'chikara', 'kachari'], - 'kachin': ['hackin', 'kachin'], - 'kafir': ['fakir', 'fraik', 'kafir', 'rafik'], - 'kaha': ['akha', 'kaha'], - 'kahar': ['harka', 'kahar'], - 'kahu': ['haku', 'kahu'], - 'kaid': ['dika', 'kaid'], - 'kaik': ['kaik', 'kaki'], - 'kail': ['ilka', 'kail', 'kali'], - 'kainga': ['kainga', 'kanagi'], - 'kaiwi': ['kaiwi', 'kiwai'], - 'kaka': ['akka', 'kaka'], - 'kaki': ['kaik', 'kaki'], - 'kala': ['akal', 'kala'], - 'kalamian': ['kalamian', 'malikana'], - 'kaldani': ['danakil', 'dankali', 'kaldani', 'ladakin'], - 'kale': ['kale', 'lake', 'leak'], - 'kali': ['ilka', 'kail', 'kali'], - 'kalo': ['kalo', 'kola', 'loka'], - 'kamansi': ['kamansi', 'kamasin'], - 'kamares': ['kamares', 'seamark'], - 'kamasin': ['kamansi', 'kamasin'], - 'kame': ['kame', 'make', 'meak'], - 'kamel': ['kamel', 'kemal'], - 'kamiya': ['kamiya', 'yakima'], - 'kan': ['kan', 'nak'], - 'kana': ['akan', 'kana'], - 'kanagi': ['kainga', 'kanagi'], - 'kanap': ['kanap', 'panak'], - 'kanat': ['kanat', 'tanak', 'tanka'], - 'kande': ['kande', 'knead', 'naked'], - 'kang': ['kang', 'knag'], - 'kanga': ['angka', 'kanga'], - 'kangani': ['kangani', 'kiangan'], - 'kangli': ['kangli', 'laking'], - 'kanred': ['darken', 'kanred', 'ranked'], - 'kans': ['kans', 'sank'], - 'kaolin': ['ankoli', 'kaolin'], - 'karch': ['chark', 'karch'], - 'karel': ['karel', 'laker'], - 'karen': ['anker', 'karen', 'naker'], - 'kari': ['ikra', 'kari', 'raki'], - 'karite': ['arkite', 'karite'], - 'karl': ['karl', 'kral', 'lark'], - 'karling': ['karling', 'larking'], - 'karma': ['karma', 'krama', 'marka'], - 'karo': ['karo', 'kora', 'okra', 'roka'], - 'karree': ['karree', 'rerake'], - 'karst': ['karst', 'skart', 'stark'], - 'karstenite': ['karstenite', 'kersantite'], - 'kartel': ['kartel', 'retalk', 'talker'], - 'kasa': ['asak', 'kasa', 'saka'], - 'kasbah': ['abkhas', 'kasbah'], - 'kasha': ['kasha', 'khasa', 'sakha', 'shaka'], - 'kashan': ['kashan', 'sankha'], - 'kasher': ['kasher', 'shaker'], - 'kashi': ['kashi', 'khasi'], - 'kasm': ['kasm', 'mask'], - 'katar': ['katar', 'takar'], - 'kate': ['kate', 'keta', 'take', 'teak'], - 'kath': ['kath', 'khat'], - 'katharsis': ['katharsis', 'shastraik'], - 'katie': ['katie', 'keita'], - 'katik': ['katik', 'tikka'], - 'katrine': ['intaker', 'katrine', 'keratin'], - 'katy': ['katy', 'kyat', 'taky'], - 'kavass': ['kavass', 'vakass'], - 'kavi': ['kavi', 'kiva'], - 'kay': ['kay', 'yak'], - 'kayak': ['kayak', 'yakka'], - 'kayan': ['kayan', 'yakan'], - 'kayo': ['kayo', 'oaky'], - 'kea': ['ake', 'kea'], - 'keach': ['cheka', 'keach'], - 'keawe': ['aweek', 'keawe'], - 'kechel': ['heckle', 'kechel'], - 'kedar': ['daker', 'drake', 'kedar', 'radek'], - 'kee': ['eke', 'kee'], - 'keech': ['cheek', 'cheke', 'keech'], - 'keel': ['keel', 'kele', 'leek'], - 'keen': ['keen', 'knee'], - 'keena': ['aknee', 'ankee', 'keena'], - 'keep': ['keep', 'peek'], - 'keepership': ['keepership', 'shipkeeper'], - 'kees': ['kees', 'seek', 'skee'], - 'keest': ['keest', 'skeet', 'skete', 'steek'], - 'kefir': ['frike', 'kefir'], - 'keid': ['dike', 'keid'], - 'keita': ['katie', 'keita'], - 'keith': ['keith', 'kithe'], - 'keitloa': ['keitloa', 'oatlike'], - 'kelchin': ['chinkle', 'kelchin'], - 'kele': ['keel', 'kele', 'leek'], - 'kelima': ['kelima', 'mikael'], - 'kelpie': ['kelpie', 'pelike'], - 'kelty': ['kelty', 'ketyl'], - 'kemal': ['kamel', 'kemal'], - 'kemalist': ['kemalist', 'mastlike'], - 'kenareh': ['hearken', 'kenareh'], - 'kennel': ['kennel', 'nelken'], - 'kenotic': ['kenotic', 'ketonic'], - 'kent': ['kent', 'knet'], - 'kentia': ['intake', 'kentia'], - 'kenton': ['kenton', 'nekton'], - 'kepi': ['kepi', 'kipe', 'pike'], - 'keralite': ['keralite', 'tearlike'], - 'kerasin': ['kerasin', 'sarkine'], - 'kerat': ['kerat', 'taker'], - 'keratin': ['intaker', 'katrine', 'keratin'], - 'keratoangioma': ['angiokeratoma', 'keratoangioma'], - 'keratosis': ['asterikos', 'keratosis'], - 'keres': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'], - 'keresan': ['keresan', 'sneaker'], - 'kerewa': ['kerewa', 'rewake'], - 'kerf': ['ferk', 'kerf'], - 'kern': ['kern', 'renk'], - 'kersantite': ['karstenite', 'kersantite'], - 'kersey': ['kersey', 'skeery'], - 'kestrel': ['kestrel', 'skelter'], - 'keta': ['kate', 'keta', 'take', 'teak'], - 'ketene': ['ektene', 'ketene'], - 'keto': ['keto', 'oket', 'toke'], - 'ketol': ['ketol', 'loket'], - 'ketonic': ['kenotic', 'ketonic'], - 'ketu': ['ketu', 'teuk', 'tuke'], - 'ketupa': ['ketupa', 'uptake'], - 'ketyl': ['kelty', 'ketyl'], - 'keup': ['keup', 'puke'], - 'keuper': ['keuper', 'peruke'], - 'kevan': ['kevan', 'knave'], - 'kha': ['hak', 'kha'], - 'khami': ['hakim', 'khami'], - 'khan': ['ankh', 'hank', 'khan'], - 'khar': ['hark', 'khar', 'rakh'], - 'khasa': ['kasha', 'khasa', 'sakha', 'shaka'], - 'khasi': ['kashi', 'khasi'], - 'khat': ['kath', 'khat'], - 'khatib': ['bhakti', 'khatib'], - 'khila': ['khila', 'kilah'], - 'khu': ['huk', 'khu'], - 'khula': ['khula', 'kulah'], - 'kiangan': ['kangani', 'kiangan'], - 'kibe': ['bike', 'kibe'], - 'kicker': ['kicker', 'rekick'], - 'kickout': ['kickout', 'outkick'], - 'kidney': ['dinkey', 'kidney'], - 'kids': ['disk', 'kids', 'skid'], - 'kiel': ['kiel', 'like'], - 'kier': ['erik', 'kier', 'reki'], - 'kiku': ['kiku', 'kuki'], - 'kikumon': ['kikumon', 'kokumin'], - 'kil': ['ilk', 'kil'], - 'kilah': ['khila', 'kilah'], - 'kiliare': ['airlike', 'kiliare'], - 'killcalf': ['calfkill', 'killcalf'], - 'killer': ['killer', 'rekill'], - 'kiln': ['kiln', 'link'], - 'kilnman': ['kilnman', 'linkman'], - 'kilo': ['kilo', 'koil', 'koli'], - 'kilp': ['kilp', 'klip'], - 'kilter': ['kilter', 'kirtle'], - 'kilting': ['kilting', 'kitling'], - 'kiluba': ['kabuli', 'kiluba'], - 'kimberlite': ['kimberlite', 'timberlike'], - 'kimnel': ['kimnel', 'milken'], - 'kin': ['ink', 'kin'], - 'kina': ['akin', 'kina', 'naik'], - 'kinase': ['kinase', 'sekani'], - 'kinch': ['chink', 'kinch'], - 'kind': ['dink', 'kind'], - 'kindle': ['kindle', 'linked'], - 'kinetomer': ['kinetomer', 'konimeter'], - 'king': ['gink', 'king'], - 'kingcob': ['bocking', 'kingcob'], - 'kingpin': ['kingpin', 'pinking'], - 'kingrow': ['kingrow', 'working'], - 'kinless': ['inkless', 'kinless'], - 'kinship': ['kinship', 'pinkish'], - 'kioko': ['kioko', 'kokio'], - 'kip': ['kip', 'pik'], - 'kipe': ['kepi', 'kipe', 'pike'], - 'kirk': ['kirk', 'rikk'], - 'kirktown': ['kirktown', 'knitwork'], - 'kirn': ['kirn', 'rink'], - 'kirsten': ['kirsten', 'kristen', 'stinker'], - 'kirsty': ['kirsty', 'skirty'], - 'kirtle': ['kilter', 'kirtle'], - 'kirve': ['kirve', 'kiver'], - 'kish': ['kish', 'shik', 'sikh'], - 'kishen': ['kishen', 'neskhi'], - 'kisra': ['kisra', 'sikar', 'skair'], - 'kissar': ['kissar', 'krasis'], - 'kisser': ['kisser', 'rekiss'], - 'kist': ['kist', 'skit'], - 'kistful': ['kistful', 'lutfisk'], - 'kitab': ['batik', 'kitab'], - 'kitan': ['kitan', 'takin'], - 'kitar': ['kitar', 'krait', 'rakit', 'traik'], - 'kitchen': ['kitchen', 'thicken'], - 'kitchener': ['kitchener', 'rethicken', 'thickener'], - 'kithe': ['keith', 'kithe'], - 'kitling': ['kilting', 'kitling'], - 'kitlope': ['kitlope', 'potlike', 'toplike'], - 'kittel': ['kittel', 'kittle'], - 'kittle': ['kittel', 'kittle'], - 'kittles': ['kittles', 'skittle'], - 'kiva': ['kavi', 'kiva'], - 'kiver': ['kirve', 'kiver'], - 'kiwai': ['kaiwi', 'kiwai'], - 'klan': ['klan', 'lank'], - 'klanism': ['klanism', 'silkman'], - 'klaus': ['klaus', 'lukas', 'sulka'], - 'kleistian': ['kleistian', 'saintlike', 'satinlike'], - 'klendusic': ['klendusic', 'unsickled'], - 'kling': ['glink', 'kling'], - 'klip': ['kilp', 'klip'], - 'klop': ['klop', 'polk'], - 'knab': ['bank', 'knab', 'nabk'], - 'knag': ['kang', 'knag'], - 'knap': ['knap', 'pank'], - 'knape': ['knape', 'pekan'], - 'knar': ['knar', 'kran', 'nark', 'rank'], - 'knave': ['kevan', 'knave'], - 'knawel': ['knawel', 'wankle'], - 'knead': ['kande', 'knead', 'naked'], - 'knee': ['keen', 'knee'], - 'knet': ['kent', 'knet'], - 'knit': ['knit', 'tink'], - 'knitter': ['knitter', 'trinket'], - 'knitwork': ['kirktown', 'knitwork'], - 'knob': ['bonk', 'knob'], - 'knot': ['knot', 'tonk'], - 'knottiness': ['knottiness', 'stinkstone'], - 'knower': ['knower', 'reknow', 'wroken'], - 'knub': ['bunk', 'knub'], - 'knurly': ['knurly', 'runkly'], - 'knut': ['knut', 'tunk'], - 'knute': ['knute', 'unket'], - 'ko': ['ko', 'ok'], - 'koa': ['ako', 'koa', 'oak', 'oka'], - 'koali': ['koali', 'koila'], - 'kobu': ['bouk', 'kobu'], - 'koch': ['hock', 'koch'], - 'kochia': ['choiak', 'kochia'], - 'koel': ['koel', 'loke'], - 'koi': ['koi', 'oki'], - 'koil': ['kilo', 'koil', 'koli'], - 'koila': ['koali', 'koila'], - 'koilon': ['inlook', 'koilon'], - 'kokan': ['kokan', 'konak'], - 'kokio': ['kioko', 'kokio'], - 'kokumin': ['kikumon', 'kokumin'], - 'kola': ['kalo', 'kola', 'loka'], - 'koli': ['kilo', 'koil', 'koli'], - 'kolo': ['kolo', 'look'], - 'kome': ['kome', 'moke'], - 'komi': ['komi', 'moki'], - 'kona': ['kona', 'nako'], - 'konak': ['kokan', 'konak'], - 'kongo': ['kongo', 'ngoko'], - 'kongoni': ['kongoni', 'nooking'], - 'konia': ['ikona', 'konia'], - 'konimeter': ['kinetomer', 'konimeter'], - 'kor': ['kor', 'rok'], - 'kora': ['karo', 'kora', 'okra', 'roka'], - 'korait': ['korait', 'troika'], - 'koran': ['koran', 'krona'], - 'korana': ['anorak', 'korana'], - 'kore': ['kore', 'roke'], - 'korec': ['coker', 'corke', 'korec'], - 'korero': ['korero', 'rooker'], - 'kori': ['irok', 'kori'], - 'korimako': ['korimako', 'koromika'], - 'koromika': ['korimako', 'koromika'], - 'korwa': ['awork', 'korwa'], - 'kory': ['kory', 'roky', 'york'], - 'kos': ['kos', 'sok'], - 'koso': ['koso', 'skoo', 'sook'], - 'kotar': ['kotar', 'tarok'], - 'koto': ['koto', 'toko', 'took'], - 'kra': ['ark', 'kra'], - 'krait': ['kitar', 'krait', 'rakit', 'traik'], - 'kraken': ['kraken', 'nekkar'], - 'kral': ['karl', 'kral', 'lark'], - 'krama': ['karma', 'krama', 'marka'], - 'kran': ['knar', 'kran', 'nark', 'rank'], - 'kras': ['askr', 'kras', 'sark'], - 'krasis': ['kissar', 'krasis'], - 'kraut': ['kraut', 'tukra'], - 'kreis': ['kreis', 'skier'], - 'kreistle': ['kreistle', 'triskele'], - 'krepi': ['krepi', 'piker'], - 'krina': ['inkra', 'krina', 'nakir', 'rinka'], - 'kris': ['kris', 'risk'], - 'krishna': ['krishna', 'rankish'], - 'kristen': ['kirsten', 'kristen', 'stinker'], - 'krona': ['koran', 'krona'], - 'krone': ['ekron', 'krone'], - 'kroo': ['kroo', 'rook'], - 'krosa': ['krosa', 'oskar'], - 'kua': ['aku', 'auk', 'kua'], - 'kuar': ['kuar', 'raku', 'rauk'], - 'kuba': ['baku', 'kuba'], - 'kubera': ['kaberu', 'kubera'], - 'kuki': ['kiku', 'kuki'], - 'kulah': ['khula', 'kulah'], - 'kulimit': ['kulimit', 'tilikum'], - 'kulm': ['kulm', 'mulk'], - 'kuman': ['kuman', 'naumk'], - 'kumhar': ['kumhar', 'kumrah'], - 'kumrah': ['kumhar', 'kumrah'], - 'kunai': ['kunai', 'nikau'], - 'kuneste': ['kuneste', 'netsuke'], - 'kung': ['gunk', 'kung'], - 'kurmi': ['kurmi', 'mukri'], - 'kurt': ['kurt', 'turk'], - 'kurus': ['kurus', 'ursuk'], - 'kusa': ['kusa', 'skua'], - 'kusam': ['kusam', 'sumak'], - 'kusan': ['ankus', 'kusan'], - 'kusha': ['kusha', 'shaku', 'ushak'], - 'kutchin': ['kutchin', 'unthick'], - 'kutenai': ['kutenai', 'unakite'], - 'kyar': ['kyar', 'yark'], - 'kyat': ['katy', 'kyat', 'taky'], - 'kyle': ['kyle', 'yelk'], - 'kylo': ['kylo', 'yolk'], - 'kyte': ['kyte', 'tyke'], - 'la': ['al', 'la'], - 'laager': ['aglare', 'alegar', 'galera', 'laager'], - 'laang': ['laang', 'lagan', 'lagna'], - 'lab': ['alb', 'bal', 'lab'], - 'laban': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'], - 'labber': ['barbel', 'labber', 'rabble'], - 'labefact': ['factable', 'labefact'], - 'label': ['bella', 'label'], - 'labeler': ['labeler', 'relabel'], - 'labia': ['balai', 'labia'], - 'labial': ['abilla', 'labial'], - 'labially': ['alliably', 'labially'], - 'labiate': ['baalite', 'bialate', 'labiate'], - 'labiella': ['alliable', 'labiella'], - 'labile': ['alible', 'belial', 'labile', 'liable'], - 'labiocervical': ['cervicolabial', 'labiocervical'], - 'labiodental': ['dentolabial', 'labiodental'], - 'labioglossal': ['glossolabial', 'labioglossal'], - 'labioglossolaryngeal': ['glossolabiolaryngeal', 'labioglossolaryngeal'], - 'labioglossopharyngeal': ['glossolabiopharyngeal', 'labioglossopharyngeal'], - 'labiomental': ['labiomental', 'mentolabial'], - 'labionasal': ['labionasal', 'nasolabial'], - 'labiovelar': ['bialveolar', 'labiovelar'], - 'labis': ['basil', 'labis'], - 'labor': ['balor', 'bolar', 'boral', 'labor', 'lobar'], - 'laborant': ['balatron', 'laborant'], - 'laborism': ['laborism', 'mislabor'], - 'laborist': ['laborist', 'strobila'], - 'laborite': ['betailor', 'laborite', 'orbitale'], - 'labrador': ['labrador', 'larboard'], - 'labret': ['albert', 'balter', 'labret', 'tabler'], - 'labridae': ['labridae', 'radiable'], - 'labrose': ['borlase', 'labrose', 'rosabel'], - 'labrum': ['brumal', 'labrum', 'lumbar', 'umbral'], - 'labrus': ['bursal', 'labrus'], - 'laburnum': ['alburnum', 'laburnum'], - 'lac': ['cal', 'lac'], - 'lace': ['acle', 'alec', 'lace'], - 'laced': ['clead', 'decal', 'laced'], - 'laceman': ['laceman', 'manacle'], - 'lacepod': ['lacepod', 'pedocal', 'placode'], - 'lacer': ['ceral', 'clare', 'clear', 'lacer'], - 'lacerable': ['clearable', 'lacerable'], - 'lacerate': ['lacerate', 'lacertae'], - 'laceration': ['creational', 'crotalinae', 'laceration', 'reactional'], - 'lacerative': ['calaverite', 'lacerative'], - 'lacertae': ['lacerate', 'lacertae'], - 'lacertian': ['carnalite', 'claretian', 'lacertian', 'nectarial'], - 'lacertid': ['articled', 'lacertid'], - 'lacertidae': ['dilacerate', 'lacertidae'], - 'lacertiloid': ['illoricated', 'lacertiloid'], - 'lacertine': ['intercale', 'interlace', 'lacertine', 'reclinate'], - 'lacertoid': ['dialector', 'lacertoid'], - 'lacery': ['clayer', 'lacery'], - 'lacet': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'], - 'lache': ['chela', 'lache', 'leach'], - 'laches': ['cashel', 'laches', 'sealch'], - 'lachrymonasal': ['lachrymonasal', 'nasolachrymal'], - 'lachsa': ['calash', 'lachsa'], - 'laciness': ['laciness', 'sensical'], - 'lacing': ['anglic', 'lacing'], - 'lacinia': ['lacinia', 'licania'], - 'laciniated': ['acetanilid', 'laciniated', 'teniacidal'], - 'lacis': ['lacis', 'salic'], - 'lack': ['calk', 'lack'], - 'lacker': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'], - 'lacmoid': ['domical', 'lacmoid'], - 'laconic': ['conical', 'laconic'], - 'laconica': ['canicola', 'laconica'], - 'laconizer': ['laconizer', 'locarnize'], - 'lacquer': ['claquer', 'lacquer'], - 'lacquerer': ['lacquerer', 'relacquer'], - 'lactarene': ['lactarene', 'nectareal'], - 'lactarious': ['alacritous', 'lactarious', 'lactosuria'], - 'lactarium': ['lactarium', 'matricula'], - 'lactarius': ['australic', 'lactarius'], - 'lacteal': ['catella', 'lacteal'], - 'lacteous': ['lacteous', 'osculate'], - 'lactide': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'], - 'lactinate': ['cantalite', 'lactinate', 'tetanical'], - 'lacto': ['lacto', 'tlaco'], - 'lactoid': ['cotidal', 'lactoid', 'talcoid'], - 'lactoprotein': ['lactoprotein', 'protectional'], - 'lactose': ['alecost', 'lactose', 'scotale', 'talcose'], - 'lactoside': ['dislocate', 'lactoside'], - 'lactosuria': ['alacritous', 'lactarious', 'lactosuria'], - 'lacunal': ['calluna', 'lacunal'], - 'lacune': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'], - 'lacustral': ['claustral', 'lacustral'], - 'lacwork': ['lacwork', 'warlock'], - 'lacy': ['acyl', 'clay', 'lacy'], - 'lad': ['dal', 'lad'], - 'ladakin': ['danakil', 'dankali', 'kaldani', 'ladakin'], - 'ladanum': ['ladanum', 'udalman'], - 'ladder': ['ladder', 'raddle'], - 'laddery': ['dreadly', 'laddery'], - 'laddie': ['daidle', 'laddie'], - 'lade': ['dale', 'deal', 'lade', 'lead', 'leda'], - 'lademan': ['daleman', 'lademan', 'leadman'], - 'laden': ['eland', 'laden', 'lenad'], - 'lader': ['alder', 'daler', 'lader'], - 'ladies': ['aisled', 'deasil', 'ladies', 'sailed'], - 'ladin': ['danli', 'ladin', 'linda', 'nidal'], - 'lading': ['angild', 'lading'], - 'ladino': ['dolina', 'ladino'], - 'ladle': ['dalle', 'della', 'ladle'], - 'ladrone': ['endoral', 'ladrone', 'leonard'], - 'ladyfy': ['dayfly', 'ladyfy'], - 'ladyish': ['ladyish', 'shadily'], - 'ladyling': ['dallying', 'ladyling'], - 'laet': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'laeti': ['alite', 'laeti'], - 'laetic': ['calite', 'laetic', 'tecali'], - 'lafite': ['fetial', 'filate', 'lafite', 'leafit'], - 'lag': ['gal', 'lag'], - 'lagan': ['laang', 'lagan', 'lagna'], - 'lagen': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'], - 'lagena': ['alnage', 'angela', 'galena', 'lagena'], - 'lagend': ['angled', 'dangle', 'englad', 'lagend'], - 'lager': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'lagetto': ['lagetto', 'tagetol'], - 'lagged': ['daggle', 'lagged'], - 'laggen': ['laggen', 'naggle'], - 'lagger': ['gargle', 'gregal', 'lagger', 'raggle'], - 'lagna': ['laang', 'lagan', 'lagna'], - 'lagniappe': ['appealing', 'lagniappe', 'panplegia'], - 'lagonite': ['gelation', 'lagonite', 'legation'], - 'lagunero': ['lagunero', 'organule', 'uroglena'], - 'lagurus': ['argulus', 'lagurus'], - 'lai': ['ail', 'ila', 'lai'], - 'laicism': ['islamic', 'laicism', 'silicam'], - 'laid': ['dail', 'dali', 'dial', 'laid', 'lida'], - 'lain': ['alin', 'anil', 'lain', 'lina', 'nail'], - 'laine': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'laiose': ['aeolis', 'laiose'], - 'lair': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'lairage': ['lairage', 'railage', 'regalia'], - 'laird': ['drail', 'laird', 'larid', 'liard'], - 'lairless': ['lairless', 'railless'], - 'lairman': ['lairman', 'laminar', 'malarin', 'railman'], - 'lairstone': ['lairstone', 'orleanist', 'serotinal'], - 'lairy': ['lairy', 'riyal'], - 'laitance': ['analcite', 'anticlea', 'laitance'], - 'laity': ['laity', 'taily'], - 'lak': ['alk', 'lak'], - 'lake': ['kale', 'lake', 'leak'], - 'lakeless': ['lakeless', 'leakless'], - 'laker': ['karel', 'laker'], - 'lakie': ['alike', 'lakie'], - 'laking': ['kangli', 'laking'], - 'lakish': ['lakish', 'shakil'], - 'lakota': ['atokal', 'lakota'], - 'laky': ['alky', 'laky'], - 'lalo': ['lalo', 'lola', 'olla'], - 'lalopathy': ['allopathy', 'lalopathy'], - 'lam': ['lam', 'mal'], - 'lama': ['alma', 'amla', 'lama', 'mala'], - 'lamaic': ['amical', 'camail', 'lamaic'], - 'lamaism': ['lamaism', 'miasmal'], - 'lamaist': ['lamaist', 'lamista'], - 'lamaistic': ['ismatical', 'lamaistic'], - 'lamanite': ['lamanite', 'laminate'], - 'lamany': ['amylan', 'lamany', 'layman'], - 'lamb': ['balm', 'lamb'], - 'lambaste': ['blastema', 'lambaste'], - 'lambent': ['beltman', 'lambent'], - 'lamber': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'], - 'lambie': ['bemail', 'lambie'], - 'lambiness': ['balminess', 'lambiness'], - 'lamblike': ['balmlike', 'lamblike'], - 'lamby': ['balmy', 'lamby'], - 'lame': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'lamella': ['lamella', 'malella', 'malleal'], - 'lamellose': ['lamellose', 'semolella'], - 'lamely': ['lamely', 'mellay'], - 'lameness': ['lameness', 'maleness', 'maneless', 'nameless'], - 'lament': ['lament', 'manlet', 'mantel', 'mantle', 'mental'], - 'lamenter': ['lamenter', 'relament', 'remantle'], - 'lamenting': ['alignment', 'lamenting'], - 'lameter': ['lameter', 'metaler', 'remetal'], - 'lamia': ['alima', 'lamia'], - 'lamiger': ['gremial', 'lamiger'], - 'lamiides': ['idealism', 'lamiides'], - 'lamin': ['lamin', 'liman', 'milan'], - 'lamina': ['almain', 'animal', 'lamina', 'manila'], - 'laminae': ['laminae', 'melania'], - 'laminar': ['lairman', 'laminar', 'malarin', 'railman'], - 'laminarin': ['laminarin', 'linamarin'], - 'laminarite': ['laminarite', 'terminalia'], - 'laminate': ['lamanite', 'laminate'], - 'laminated': ['almandite', 'laminated'], - 'lamination': ['antimonial', 'lamination'], - 'laminboard': ['laminboard', 'lombardian'], - 'laminectomy': ['laminectomy', 'metonymical'], - 'laminose': ['laminose', 'lemonias', 'semolina'], - 'lamish': ['lamish', 'shimal'], - 'lamista': ['lamaist', 'lamista'], - 'lamiter': ['lamiter', 'marlite'], - 'lammer': ['lammer', 'rammel'], - 'lammy': ['lammy', 'malmy'], - 'lamna': ['alman', 'lamna', 'manal'], - 'lamnid': ['lamnid', 'mandil'], - 'lamnidae': ['aldamine', 'lamnidae'], - 'lamp': ['lamp', 'palm'], - 'lampad': ['lampad', 'palmad'], - 'lampas': ['lampas', 'plasma'], - 'lamper': ['lamper', 'palmer', 'relamp'], - 'lampers': ['lampers', 'sampler'], - 'lampful': ['lampful', 'palmful'], - 'lampist': ['lampist', 'palmist'], - 'lampistry': ['lampistry', 'palmistry'], - 'lampoon': ['lampoon', 'pomonal'], - 'lamprey': ['lamprey', 'palmery'], - 'lampyridae': ['lampyridae', 'pyramidale'], - 'lamus': ['lamus', 'malus', 'musal', 'slaum'], - 'lamut': ['lamut', 'tamul'], - 'lan': ['aln', 'lan'], - 'lana': ['alan', 'anal', 'lana'], - 'lanas': ['alans', 'lanas', 'nasal'], - 'lanate': ['anteal', 'lanate', 'teanal'], - 'lancaster': ['ancestral', 'lancaster'], - 'lancasterian': ['alcantarines', 'lancasterian'], - 'lance': ['canel', 'clean', 'lance', 'lenca'], - 'lanced': ['calden', 'candle', 'lanced'], - 'lancely': ['cleanly', 'lancely'], - 'lanceolar': ['lanceolar', 'olecranal'], - 'lancer': ['lancer', 'rancel'], - 'lances': ['lances', 'senlac'], - 'lancet': ['cantle', 'cental', 'lancet', 'tancel'], - 'lanceteer': ['crenelate', 'lanceteer'], - 'lancinate': ['cantilena', 'lancinate'], - 'landbook': ['bookland', 'landbook'], - 'landed': ['dandle', 'landed'], - 'lander': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'landfast': ['fastland', 'landfast'], - 'landgrave': ['grandeval', 'landgrave'], - 'landimere': ['landimere', 'madrilene'], - 'landing': ['danglin', 'landing'], - 'landlubber': ['landlubber', 'lubberland'], - 'landreeve': ['landreeve', 'reeveland'], - 'landstorm': ['landstorm', 'transmold'], - 'landwash': ['landwash', 'washland'], - 'lane': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'], - 'lanete': ['elanet', 'lanete', 'lateen'], - 'laney': ['laney', 'layne'], - 'langhian': ['hangnail', 'langhian'], - 'langi': ['algin', 'align', 'langi', 'liang', 'linga'], - 'langite': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'], - 'lango': ['along', 'gonal', 'lango', 'longa', 'nogal'], - 'langobard': ['bandarlog', 'langobard'], - 'language': ['ganguela', 'language'], - 'laniate': ['laniate', 'natalie', 'taenial'], - 'lanific': ['finical', 'lanific'], - 'laniform': ['formalin', 'informal', 'laniform'], - 'laniidae': ['aedilian', 'laniidae'], - 'lanista': ['lanista', 'santali'], - 'lanius': ['insula', 'lanius', 'lusian'], - 'lank': ['klan', 'lank'], - 'lanket': ['anklet', 'lanket', 'tankle'], - 'lanner': ['lanner', 'rannel'], - 'lansat': ['aslant', 'lansat', 'natals', 'santal'], - 'lanseh': ['halsen', 'hansel', 'lanseh'], - 'lantaca': ['cantala', 'catalan', 'lantaca'], - 'lanum': ['lanum', 'manul'], - 'lao': ['alo', 'lao', 'loa'], - 'laodicean': ['caledonia', 'laodicean'], - 'laotian': ['ailanto', 'alation', 'laotian', 'notalia'], - 'lap': ['alp', 'lap', 'pal'], - 'laparohysterotomy': ['hysterolaparotomy', 'laparohysterotomy'], - 'laparosplenotomy': ['laparosplenotomy', 'splenolaparotomy'], - 'lapidarist': ['lapidarist', 'triapsidal'], - 'lapidate': ['lapidate', 'talpidae'], - 'lapideon': ['lapideon', 'palinode', 'pedalion'], - 'lapidose': ['episodal', 'lapidose', 'sepaloid'], - 'lapith': ['lapith', 'tilpah'], - 'lapon': ['lapon', 'nopal'], - 'lapp': ['lapp', 'palp', 'plap'], - 'lappa': ['lappa', 'papal'], - 'lapped': ['dapple', 'lapped', 'palped'], - 'lapper': ['lapper', 'rappel'], - 'lappish': ['lappish', 'shiplap'], - 'lapsation': ['apolistan', 'lapsation'], - 'lapse': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'lapsi': ['alisp', 'lapsi'], - 'lapsing': ['lapsing', 'sapling'], - 'lapstone': ['lapstone', 'pleonast'], - 'larboard': ['labrador', 'larboard'], - 'larcenic': ['calciner', 'larcenic'], - 'larcenist': ['cisternal', 'larcenist'], - 'larcenous': ['larcenous', 'senocular'], - 'larchen': ['charnel', 'larchen'], - 'lardacein': ['ecardinal', 'lardacein'], - 'lardite': ['dilater', 'lardite', 'redtail'], - 'lardon': ['androl', 'arnold', 'lardon', 'roland', 'ronald'], - 'lardy': ['daryl', 'lardy', 'lyard'], - 'large': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'largely': ['allergy', 'gallery', 'largely', 'regally'], - 'largen': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'], - 'largeness': ['largeness', 'rangeless', 'regalness'], - 'largess': ['glasser', 'largess'], - 'largition': ['gratiolin', 'largition', 'tailoring'], - 'largo': ['algor', 'argol', 'goral', 'largo'], - 'lari': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'lariat': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'], - 'larid': ['drail', 'laird', 'larid', 'liard'], - 'laridae': ['ardelia', 'laridae', 'radiale'], - 'larigo': ['gloria', 'larigo', 'logria'], - 'larigot': ['goitral', 'larigot', 'ligator'], - 'lariid': ['iridal', 'lariid'], - 'larine': ['arline', 'larine', 'linear', 'nailer', 'renail'], - 'lark': ['karl', 'kral', 'lark'], - 'larking': ['karling', 'larking'], - 'larsenite': ['intersale', 'larsenite'], - 'larus': ['larus', 'sural', 'ursal'], - 'larva': ['alvar', 'arval', 'larva'], - 'larval': ['larval', 'vallar'], - 'larvate': ['larvate', 'lavaret', 'travale'], - 'larve': ['arvel', 'larve', 'laver', 'ravel', 'velar'], - 'larvicide': ['larvicide', 'veridical'], - 'laryngopharyngeal': ['laryngopharyngeal', 'pharyngolaryngeal'], - 'laryngopharyngitis': ['laryngopharyngitis', 'pharyngolaryngitis'], - 'laryngotome': ['laryngotome', 'maternology'], - 'laryngotracheotomy': ['laryngotracheotomy', 'tracheolaryngotomy'], - 'las': ['las', 'sal', 'sla'], - 'lasa': ['alas', 'lasa'], - 'lascar': ['lascar', 'rascal', 'sacral', 'scalar'], - 'laser': ['arles', 'arsle', 'laser', 'seral', 'slare'], - 'lash': ['hals', 'lash'], - 'lasi': ['lasi', 'lias', 'lisa', 'sail', 'sial'], - 'lasius': ['asilus', 'lasius'], - 'lask': ['lask', 'skal'], - 'lasket': ['lasket', 'sklate'], - 'laspring': ['laspring', 'sparling', 'springal'], - 'lasque': ['lasque', 'squeal'], - 'lasset': ['lasset', 'tassel'], - 'lassie': ['elissa', 'lassie'], - 'lasso': ['lasso', 'ossal'], - 'lassoer': ['lassoer', 'oarless', 'rosales'], - 'last': ['last', 'salt', 'slat'], - 'laster': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'lasting': ['anglist', 'lasting', 'salting', 'slating', 'staling'], - 'lastly': ['lastly', 'saltly'], - 'lastness': ['lastness', 'saltness'], - 'lastre': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'lasty': ['lasty', 'salty', 'slaty'], - 'lat': ['alt', 'lat', 'tal'], - 'lata': ['lata', 'taal', 'tala'], - 'latania': ['altaian', 'latania', 'natalia'], - 'latcher': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'], - 'latchet': ['chattel', 'latchet'], - 'late': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'latebra': ['alberta', 'latebra', 'ratable'], - 'lated': ['adlet', 'dealt', 'delta', 'lated', 'taled'], - 'lateen': ['elanet', 'lanete', 'lateen'], - 'lately': ['lately', 'lealty'], - 'laten': ['ental', 'laten', 'leant'], - 'latent': ['latent', 'latten', 'nattle', 'talent', 'tantle'], - 'latentness': ['latentness', 'tenantless'], - 'later': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'latera': ['latera', 'relata'], - 'laterad': ['altared', 'laterad'], - 'lateralis': ['lateralis', 'stellaria'], - 'lateran': ['alatern', 'lateran'], - 'laterite': ['laterite', 'literate', 'teretial'], - 'laterocaudal': ['caudolateral', 'laterocaudal'], - 'laterodorsal': ['dorsolateral', 'laterodorsal'], - 'lateroventral': ['lateroventral', 'ventrolateral'], - 'latest': ['latest', 'sattle', 'taslet'], - 'latex': ['exalt', 'latex'], - 'lath': ['halt', 'lath'], - 'lathe': ['ethal', 'lathe', 'leath'], - 'latheman': ['latheman', 'methanal'], - 'lathen': ['ethnal', 'hantle', 'lathen', 'thenal'], - 'lather': ['arthel', 'halter', 'lather', 'thaler'], - 'lathery': ['earthly', 'heartly', 'lathery', 'rathely'], - 'lathing': ['halting', 'lathing', 'thingal'], - 'latian': ['antlia', 'latian', 'nalita'], - 'latibulize': ['latibulize', 'utilizable'], - 'latices': ['astelic', 'elastic', 'latices'], - 'laticlave': ['laticlave', 'vacillate'], - 'latigo': ['galiot', 'latigo'], - 'latimeria': ['latimeria', 'marialite'], - 'latin': ['altin', 'latin'], - 'latinate': ['antliate', 'latinate'], - 'latiner': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'latinesque': ['latinesque', 'sequential'], - 'latinian': ['antinial', 'latinian'], - 'latinizer': ['latinizer', 'trinalize'], - 'latinus': ['latinus', 'tulisan', 'unalist'], - 'lation': ['italon', 'lation', 'talion'], - 'latirostres': ['latirostres', 'setirostral'], - 'latirus': ['latirus', 'trisula'], - 'latish': ['latish', 'tahsil'], - 'latite': ['latite', 'tailet', 'tailte', 'talite'], - 'latitude': ['altitude', 'latitude'], - 'latitudinal': ['altitudinal', 'latitudinal'], - 'latitudinarian': ['altitudinarian', 'latitudinarian'], - 'latomy': ['latomy', 'tyloma'], - 'latona': ['atonal', 'latona'], - 'latonian': ['latonian', 'nataloin', 'national'], - 'latria': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'], - 'latrine': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'latris': ['latris', 'strial'], - 'latro': ['latro', 'rotal', 'toral'], - 'latrobe': ['alberto', 'bloater', 'latrobe'], - 'latrobite': ['latrobite', 'trilobate'], - 'latrocinium': ['latrocinium', 'tourmalinic'], - 'latron': ['latron', 'lontar', 'tornal'], - 'latten': ['latent', 'latten', 'nattle', 'talent', 'tantle'], - 'latter': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'], - 'latterkin': ['intertalk', 'latterkin'], - 'lattice': ['lattice', 'tactile'], - 'latticinio': ['latticinio', 'licitation'], - 'latuka': ['latuka', 'taluka'], - 'latus': ['latus', 'sault', 'talus'], - 'latvian': ['latvian', 'valiant'], - 'laubanite': ['laubanite', 'unlabiate'], - 'laud': ['auld', 'dual', 'laud', 'udal'], - 'laudation': ['adulation', 'laudation'], - 'laudator': ['adulator', 'laudator'], - 'laudatorily': ['illaudatory', 'laudatorily'], - 'laudatory': ['adulatory', 'laudatory'], - 'lauder': ['lauder', 'udaler'], - 'laudism': ['dualism', 'laudism'], - 'laudist': ['dualist', 'laudist'], - 'laumonite': ['emulation', 'laumonite'], - 'laun': ['laun', 'luna', 'ulna', 'unal'], - 'launce': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'], - 'launch': ['chulan', 'launch', 'nuchal'], - 'launcher': ['launcher', 'relaunch'], - 'laund': ['dunal', 'laund', 'lunda', 'ulnad'], - 'launder': ['launder', 'rundale'], - 'laur': ['alur', 'laur', 'lura', 'raul', 'ural'], - 'laura': ['aural', 'laura'], - 'laurel': ['allure', 'laurel'], - 'laureled': ['laureled', 'reallude'], - 'laurence': ['cerulean', 'laurence'], - 'laurent': ['laurent', 'neutral', 'unalert'], - 'laurentide': ['adulterine', 'laurentide'], - 'lauric': ['curial', 'lauric', 'uracil', 'uralic'], - 'laurin': ['laurin', 'urinal'], - 'laurite': ['laurite', 'uralite'], - 'laurus': ['laurus', 'ursula'], - 'lava': ['aval', 'lava'], - 'lavacre': ['caravel', 'lavacre'], - 'lavaret': ['larvate', 'lavaret', 'travale'], - 'lave': ['lave', 'vale', 'veal', 'vela'], - 'laveer': ['laveer', 'leaver', 'reveal', 'vealer'], - 'lavehr': ['halver', 'lavehr'], - 'lavenite': ['elvanite', 'lavenite'], - 'laver': ['arvel', 'larve', 'laver', 'ravel', 'velar'], - 'laverania': ['laverania', 'valeriana'], - 'lavic': ['cavil', 'lavic'], - 'lavinia': ['lavinia', 'vinalia'], - 'lavish': ['lavish', 'vishal'], - 'lavisher': ['lavisher', 'shrieval'], - 'lavolta': ['lavolta', 'vallota'], - 'law': ['awl', 'law'], - 'lawing': ['lawing', 'waling'], - 'lawk': ['lawk', 'walk'], - 'lawmonger': ['angleworm', 'lawmonger'], - 'lawned': ['delawn', 'lawned', 'wandle'], - 'lawner': ['lawner', 'warnel'], - 'lawny': ['lawny', 'wanly'], - 'lawrie': ['lawrie', 'wailer'], - 'lawter': ['lawter', 'walter'], - 'lawyer': ['lawyer', 'yawler'], - 'laxism': ['laxism', 'smilax'], - 'lay': ['aly', 'lay'], - 'layer': ['early', 'layer', 'relay'], - 'layered': ['delayer', 'layered', 'redelay'], - 'layery': ['layery', 'yearly'], - 'laying': ['gainly', 'laying'], - 'layman': ['amylan', 'lamany', 'layman'], - 'layne': ['laney', 'layne'], - 'layout': ['layout', 'lutayo', 'outlay'], - 'layover': ['layover', 'overlay'], - 'layship': ['apishly', 'layship'], - 'lazarlike': ['alkalizer', 'lazarlike'], - 'laze': ['laze', 'zeal'], - 'lea': ['ale', 'lea'], - 'leach': ['chela', 'lache', 'leach'], - 'leachman': ['leachman', 'mechanal'], - 'lead': ['dale', 'deal', 'lade', 'lead', 'leda'], - 'leadable': ['dealable', 'leadable'], - 'leaded': ['delead', 'leaded'], - 'leader': ['dealer', 'leader', 'redeal', 'relade', 'relead'], - 'leadership': ['dealership', 'leadership'], - 'leadin': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'], - 'leadiness': ['idealness', 'leadiness'], - 'leading': ['adeling', 'dealing', 'leading'], - 'leadman': ['daleman', 'lademan', 'leadman'], - 'leads': ['leads', 'slade'], - 'leadsman': ['dalesman', 'leadsman'], - 'leadstone': ['endosteal', 'leadstone'], - 'leady': ['delay', 'leady'], - 'leaf': ['alef', 'feal', 'flea', 'leaf'], - 'leafen': ['enleaf', 'leafen'], - 'leafit': ['fetial', 'filate', 'lafite', 'leafit'], - 'leafy': ['fleay', 'leafy'], - 'leah': ['hale', 'heal', 'leah'], - 'leak': ['kale', 'lake', 'leak'], - 'leakiness': ['alikeness', 'leakiness'], - 'leakless': ['lakeless', 'leakless'], - 'leal': ['alle', 'ella', 'leal'], - 'lealty': ['lately', 'lealty'], - 'leam': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'leamer': ['leamer', 'mealer'], - 'lean': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'], - 'leander': ['leander', 'learned', 'reladen'], - 'leaner': ['arlene', 'leaner'], - 'leaning': ['angelin', 'leaning'], - 'leant': ['ental', 'laten', 'leant'], - 'leap': ['leap', 'lepa', 'pale', 'peal', 'plea'], - 'leaper': ['leaper', 'releap', 'repale', 'repeal'], - 'leaping': ['apeling', 'leaping'], - 'leapt': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'lear': ['earl', 'eral', 'lear', 'real'], - 'learn': ['learn', 'renal'], - 'learned': ['leander', 'learned', 'reladen'], - 'learnedly': ['ellenyard', 'learnedly'], - 'learner': ['learner', 'relearn'], - 'learnt': ['altern', 'antler', 'learnt', 'rental', 'ternal'], - 'leasable': ['leasable', 'sealable'], - 'lease': ['easel', 'lease'], - 'leaser': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'], - 'leash': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'], - 'leasing': ['leasing', 'sealing'], - 'least': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'leat': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'leath': ['ethal', 'lathe', 'leath'], - 'leather': ['leather', 'tarheel'], - 'leatherbark': ['halterbreak', 'leatherbark'], - 'leatherer': ['leatherer', 'releather', 'tarheeler'], - 'leatman': ['amental', 'leatman'], - 'leaver': ['laveer', 'leaver', 'reveal', 'vealer'], - 'leaves': ['leaves', 'sleave'], - 'leaving': ['leaving', 'vangeli'], - 'leavy': ['leavy', 'vealy'], - 'leban': ['leban', 'nable'], - 'lebanese': ['ebenales', 'lebanese'], - 'lebensraum': ['lebensraum', 'mensurable'], - 'lecaniid': ['alcidine', 'danielic', 'lecaniid'], - 'lecanora': ['carolean', 'lecanora'], - 'lecanoroid': ['lecanoroid', 'olecranoid'], - 'lechery': ['cheerly', 'lechery'], - 'lechriodont': ['holocentrid', 'lechriodont'], - 'lecithal': ['hellicat', 'lecithal'], - 'lecontite': ['lecontite', 'nicolette'], - 'lector': ['colter', 'lector', 'torcel'], - 'lectorial': ['corallite', 'lectorial'], - 'lectorship': ['lectorship', 'leptorchis'], - 'lectrice': ['electric', 'lectrice'], - 'lecturess': ['cutleress', 'lecturess', 'truceless'], - 'lecyth': ['lecyth', 'letchy'], - 'lecythis': ['chestily', 'lecythis'], - 'led': ['del', 'eld', 'led'], - 'leda': ['dale', 'deal', 'lade', 'lead', 'leda'], - 'lede': ['dele', 'lede', 'leed'], - 'leden': ['leden', 'neeld'], - 'ledge': ['glede', 'gleed', 'ledge'], - 'ledger': ['gelder', 'ledger', 'redleg'], - 'ledging': ['gelding', 'ledging'], - 'ledgy': ['gledy', 'ledgy'], - 'lee': ['eel', 'lee'], - 'leed': ['dele', 'lede', 'leed'], - 'leek': ['keel', 'kele', 'leek'], - 'leep': ['leep', 'peel', 'pele'], - 'leepit': ['leepit', 'pelite', 'pielet'], - 'leer': ['leer', 'reel'], - 'leeringly': ['leeringly', 'reelingly'], - 'leerness': ['leerness', 'lessener'], - 'lees': ['else', 'lees', 'seel', 'sele', 'slee'], - 'leet': ['leet', 'lete', 'teel', 'tele'], - 'leetman': ['entelam', 'leetman'], - 'leewan': ['leewan', 'weanel'], - 'left': ['felt', 'flet', 'left'], - 'leftish': ['fishlet', 'leftish'], - 'leftness': ['feltness', 'leftness'], - 'leg': ['gel', 'leg'], - 'legalist': ['legalist', 'stillage'], - 'legantine': ['eglantine', 'inelegant', 'legantine'], - 'legate': ['eaglet', 'legate', 'teagle', 'telega'], - 'legatine': ['galenite', 'legatine'], - 'legation': ['gelation', 'lagonite', 'legation'], - 'legative': ['legative', 'levigate'], - 'legator': ['argolet', 'gloater', 'legator'], - 'legendary': ['enragedly', 'legendary'], - 'leger': ['leger', 'regle'], - 'legger': ['eggler', 'legger'], - 'legion': ['eloign', 'gileno', 'legion'], - 'legioner': ['eloigner', 'legioner'], - 'legionry': ['legionry', 'yeorling'], - 'legislator': ['allegorist', 'legislator'], - 'legman': ['legman', 'mangel', 'mangle'], - 'legoa': ['gloea', 'legoa'], - 'legua': ['gulae', 'legua'], - 'leguan': ['genual', 'leguan'], - 'lehr': ['herl', 'hler', 'lehr'], - 'lei': ['eli', 'lei', 'lie'], - 'leif': ['feil', 'file', 'leif', 'lief', 'life'], - 'leila': ['allie', 'leila', 'lelia'], - 'leipoa': ['apiole', 'leipoa'], - 'leisten': ['leisten', 'setline', 'tensile'], - 'leister': ['leister', 'sterile'], - 'leith': ['leith', 'lithe'], - 'leitneria': ['leitneria', 'lienteria'], - 'lek': ['elk', 'lek'], - 'lekach': ['hackle', 'lekach'], - 'lekane': ['alkene', 'lekane'], - 'lelia': ['allie', 'leila', 'lelia'], - 'leman': ['leman', 'lemna'], - 'lemma': ['lemma', 'melam'], - 'lemna': ['leman', 'lemna'], - 'lemnad': ['lemnad', 'menald'], - 'lemnian': ['lemnian', 'lineman', 'melanin'], - 'lemniscate': ['centesimal', 'lemniscate'], - 'lemon': ['lemon', 'melon', 'monel'], - 'lemonias': ['laminose', 'lemonias', 'semolina'], - 'lemonlike': ['lemonlike', 'melonlike'], - 'lemony': ['lemony', 'myelon'], - 'lemosi': ['lemosi', 'limose', 'moiles'], - 'lempira': ['impaler', 'impearl', 'lempira', 'premial'], - 'lemuria': ['lemuria', 'miauler'], - 'lemurian': ['lemurian', 'malurine', 'rumelian'], - 'lemurinae': ['lemurinae', 'neurilema'], - 'lemurine': ['lemurine', 'meruline', 'relumine'], - 'lena': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'], - 'lenad': ['eland', 'laden', 'lenad'], - 'lenape': ['alpeen', 'lenape', 'pelean'], - 'lenard': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'lenca': ['canel', 'clean', 'lance', 'lenca'], - 'lencan': ['cannel', 'lencan'], - 'lendee': ['lendee', 'needle'], - 'lender': ['lender', 'relend'], - 'lendu': ['lendu', 'unled'], - 'lengthy': ['lengthy', 'thegnly'], - 'lenient': ['lenient', 'tenline'], - 'lenify': ['finely', 'lenify'], - 'lenis': ['elsin', 'lenis', 'niels', 'silen', 'sline'], - 'lenity': ['lenity', 'yetlin'], - 'lenny': ['lenny', 'lynne'], - 'leno': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'], - 'lenora': ['lenora', 'loaner', 'orlean', 'reloan'], - 'lenticel': ['lenticel', 'lenticle'], - 'lenticle': ['lenticel', 'lenticle'], - 'lentil': ['lentil', 'lintel'], - 'lentisc': ['lentisc', 'scintle', 'stencil'], - 'lentisco': ['lentisco', 'telsonic'], - 'lentiscus': ['lentiscus', 'tunicless'], - 'lento': ['lento', 'olent'], - 'lentous': ['lentous', 'sultone'], - 'lenvoy': ['lenvoy', 'ovenly'], - 'leo': ['leo', 'ole'], - 'leon': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'], - 'leonard': ['endoral', 'ladrone', 'leonard'], - 'leonhardite': ['leonhardite', 'lionhearted'], - 'leonid': ['doline', 'indole', 'leonid', 'loined', 'olenid'], - 'leonines': ['leonines', 'selenion'], - 'leonis': ['insole', 'leonis', 'lesion', 'selion'], - 'leonist': ['leonist', 'onliest'], - 'leonite': ['elonite', 'leonite'], - 'leonotis': ['leonotis', 'oilstone'], - 'leoparde': ['leoparde', 'reapdole'], - 'leopardite': ['leopardite', 'protelidae'], - 'leotard': ['delator', 'leotard'], - 'lepa': ['leap', 'lepa', 'pale', 'peal', 'plea'], - 'lepanto': ['lepanto', 'nepotal', 'petalon', 'polenta'], - 'lepas': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'lepcha': ['chapel', 'lepcha', 'pleach'], - 'leper': ['leper', 'perle', 'repel'], - 'leperdom': ['leperdom', 'premodel'], - 'lepidopter': ['dopplerite', 'lepidopter'], - 'lepidosauria': ['lepidosauria', 'pliosauridae'], - 'lepidote': ['lepidote', 'petioled'], - 'lepidotic': ['diploetic', 'lepidotic'], - 'lepisma': ['ampelis', 'lepisma'], - 'leporid': ['leporid', 'leproid'], - 'leporis': ['leporis', 'spoiler'], - 'lepra': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'leproid': ['leporid', 'leproid'], - 'leproma': ['leproma', 'palermo', 'pleroma', 'polearm'], - 'leprosied': ['despoiler', 'leprosied'], - 'leprosis': ['leprosis', 'plerosis'], - 'leprous': ['leprous', 'pelorus', 'sporule'], - 'leptandra': ['leptandra', 'peltandra'], - 'leptidae': ['depilate', 'leptidae', 'pileated'], - 'leptiform': ['leptiform', 'peltiform'], - 'leptodora': ['doorplate', 'leptodora'], - 'leptome': ['leptome', 'poemlet'], - 'lepton': ['lepton', 'pentol'], - 'leptonema': ['leptonema', 'ptolemean'], - 'leptorchis': ['lectorship', 'leptorchis'], - 'lepus': ['lepus', 'pulse'], - 'ler': ['ler', 'rel'], - 'lernaean': ['annealer', 'lernaean', 'reanneal'], - 'lerot': ['lerot', 'orlet', 'relot'], - 'lerwa': ['lerwa', 'waler'], - 'les': ['els', 'les'], - 'lesath': ['haslet', 'lesath', 'shelta'], - 'lesbia': ['isabel', 'lesbia'], - 'lesche': ['lesche', 'sleech'], - 'lesion': ['insole', 'leonis', 'lesion', 'selion'], - 'lesional': ['lesional', 'solenial'], - 'leslie': ['leslie', 'sellie'], - 'lessener': ['leerness', 'lessener'], - 'lest': ['lest', 'selt'], - 'lester': ['lester', 'selter', 'streel'], - 'let': ['elt', 'let'], - 'letchy': ['lecyth', 'letchy'], - 'lete': ['leet', 'lete', 'teel', 'tele'], - 'lethargus': ['lethargus', 'slaughter'], - 'lethe': ['ethel', 'lethe'], - 'lethean': ['entheal', 'lethean'], - 'lethologica': ['ethological', 'lethologica', 'theological'], - 'letitia': ['italite', 'letitia', 'tilaite'], - 'leto': ['leto', 'lote', 'tole'], - 'letoff': ['letoff', 'offlet'], - 'lett': ['lett', 'telt'], - 'letten': ['letten', 'nettle'], - 'letterer': ['letterer', 'reletter'], - 'lettish': ['lettish', 'thistle'], - 'lettrin': ['lettrin', 'trintle'], - 'leu': ['leu', 'lue', 'ule'], - 'leucadian': ['leucadian', 'lucanidae'], - 'leucocism': ['leucocism', 'muscicole'], - 'leucoma': ['caulome', 'leucoma'], - 'leucosis': ['coulisse', 'leucosis', 'ossicule'], - 'leud': ['deul', 'duel', 'leud'], - 'leuk': ['leuk', 'luke'], - 'leuma': ['amelu', 'leuma', 'ulema'], - 'leung': ['leung', 'lunge'], - 'levance': ['enclave', 'levance', 'valence'], - 'levant': ['levant', 'valent'], - 'levanter': ['levanter', 'relevant', 'revelant'], - 'levantine': ['levantine', 'valentine'], - 'leveler': ['leveler', 'relevel'], - 'lever': ['elver', 'lever', 'revel'], - 'leverer': ['leverer', 'reveler'], - 'levi': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'], - 'levier': ['levier', 'relive', 'reveil', 'revile', 'veiler'], - 'levigate': ['legative', 'levigate'], - 'levin': ['levin', 'liven'], - 'levining': ['levining', 'nievling'], - 'levir': ['levir', 'liver', 'livre', 'rivel'], - 'levirate': ['levirate', 'relative'], - 'levis': ['elvis', 'levis', 'slive'], - 'levitation': ['levitation', 'tonalitive', 'velitation'], - 'levo': ['levo', 'love', 'velo', 'vole'], - 'levyist': ['levyist', 'sylvite'], - 'lewd': ['lewd', 'weld'], - 'lewis': ['lewis', 'swile'], - 'lexia': ['axile', 'lexia'], - 'ley': ['ley', 'lye'], - 'lhota': ['altho', 'lhota', 'loath'], - 'liability': ['alibility', 'liability'], - 'liable': ['alible', 'belial', 'labile', 'liable'], - 'liana': ['alain', 'alani', 'liana'], - 'liang': ['algin', 'align', 'langi', 'liang', 'linga'], - 'liar': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'liard': ['drail', 'laird', 'larid', 'liard'], - 'lias': ['lasi', 'lias', 'lisa', 'sail', 'sial'], - 'liatris': ['liatris', 'trilisa'], - 'libament': ['bailment', 'libament'], - 'libate': ['albeit', - 'albite', - 'baltei', - 'belait', - 'betail', - 'bletia', - 'libate'], - 'libationer': ['libationer', 'liberation'], - 'libber': ['libber', 'ribble'], - 'libby': ['bilby', 'libby'], - 'libellary': ['libellary', 'liberally'], - 'liber': ['birle', 'liber'], - 'liberal': ['braille', 'liberal'], - 'liberally': ['libellary', 'liberally'], - 'liberate': ['iterable', 'liberate'], - 'liberation': ['libationer', 'liberation'], - 'liberator': ['liberator', 'orbitelar'], - 'liberian': ['bilinear', 'liberian'], - 'libertas': ['abristle', 'libertas'], - 'libertine': ['berlinite', 'libertine'], - 'libra': ['blair', 'brail', 'libra'], - 'librate': ['betrail', 'librate', 'triable', 'trilabe'], - 'licania': ['lacinia', 'licania'], - 'license': ['license', 'selenic', 'silence'], - 'licensed': ['licensed', 'silenced'], - 'licenser': ['licenser', 'silencer'], - 'licensor': ['cresolin', 'licensor'], - 'lich': ['chil', 'lich'], - 'lichanos': ['lichanos', 'nicholas'], - 'lichenoid': ['cheloniid', 'lichenoid'], - 'lichi': ['chili', 'lichi'], - 'licitation': ['latticinio', 'licitation'], - 'licker': ['licker', 'relick', 'rickle'], - 'lickspit': ['lickspit', 'lipstick'], - 'licorne': ['creolin', 'licorne', 'locrine'], - 'lida': ['dail', 'dali', 'dial', 'laid', 'lida'], - 'lidded': ['diddle', 'lidded'], - 'lidder': ['lidder', 'riddel', 'riddle'], - 'lide': ['idle', 'lide', 'lied'], - 'lie': ['eli', 'lei', 'lie'], - 'lied': ['idle', 'lide', 'lied'], - 'lief': ['feil', 'file', 'leif', 'lief', 'life'], - 'lien': ['lien', 'line', 'neil', 'nile'], - 'lienal': ['lienal', 'lineal'], - 'lienee': ['eileen', 'lienee'], - 'lienor': ['elinor', 'lienor', 'lorien', 'noiler'], - 'lienteria': ['leitneria', 'lienteria'], - 'lientery': ['entirely', 'lientery'], - 'lier': ['lier', 'lire', 'rile'], - 'lierne': ['lierne', 'reline'], - 'lierre': ['lierre', 'relier'], - 'liesh': ['liesh', 'shiel'], - 'lievaart': ['lievaart', 'varietal'], - 'life': ['feil', 'file', 'leif', 'lief', 'life'], - 'lifelike': ['filelike', 'lifelike'], - 'lifer': ['filer', 'flier', 'lifer', 'rifle'], - 'lifeward': ['drawfile', 'lifeward'], - 'lifo': ['filo', 'foil', 'lifo'], - 'lift': ['flit', 'lift'], - 'lifter': ['fertil', 'filter', 'lifter', 'relift', 'trifle'], - 'lifting': ['fliting', 'lifting'], - 'ligament': ['ligament', 'metaling', 'tegminal'], - 'ligas': ['gisla', 'ligas', 'sigla'], - 'ligate': ['aiglet', 'ligate', 'taigle', 'tailge'], - 'ligation': ['intaglio', 'ligation'], - 'ligator': ['goitral', 'larigot', 'ligator'], - 'ligature': ['alurgite', 'ligature'], - 'lighten': ['enlight', 'lighten'], - 'lightener': ['lightener', 'relighten', 'threeling'], - 'lighter': ['lighter', 'relight', 'rightle'], - 'lighthead': ['headlight', 'lighthead'], - 'lightness': ['lightness', 'nightless', 'thingless'], - 'ligne': ['ingle', 'ligne', 'linge', 'nigel'], - 'lignin': ['lignin', 'lining'], - 'lignitic': ['lignitic', 'tiglinic'], - 'lignose': ['gelosin', 'lignose'], - 'ligroine': ['ligroine', 'religion'], - 'ligure': ['ligure', 'reguli'], - 'lija': ['jail', 'lija'], - 'like': ['kiel', 'like'], - 'liken': ['inkle', 'liken'], - 'likewise': ['likewise', 'wiselike'], - 'lilac': ['calli', 'lilac'], - 'lilacky': ['alkylic', 'lilacky'], - 'lilium': ['illium', 'lilium'], - 'lilt': ['lilt', 'till'], - 'lily': ['illy', 'lily', 'yill'], - 'lim': ['lim', 'mil'], - 'lima': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'], - 'limacina': ['animalic', 'limacina'], - 'limacon': ['limacon', 'malonic'], - 'liman': ['lamin', 'liman', 'milan'], - 'limation': ['limation', 'miltonia'], - 'limbat': ['limbat', 'timbal'], - 'limbate': ['limbate', 'timable', 'timbale'], - 'limbed': ['dimble', 'limbed'], - 'limbus': ['bluism', 'limbus'], - 'limby': ['blimy', 'limby'], - 'lime': ['emil', 'lime', 'mile'], - 'limean': ['limean', 'maline', 'melian', 'menial'], - 'limeman': ['ammelin', 'limeman'], - 'limer': ['limer', 'meril', 'miler'], - 'limes': ['limes', 'miles', 'slime', 'smile'], - 'limestone': ['limestone', 'melonites', 'milestone'], - 'limey': ['elymi', 'emily', 'limey'], - 'liminess': ['liminess', 'senilism'], - 'limitary': ['limitary', 'military'], - 'limitate': ['limitate', 'militate'], - 'limitation': ['limitation', 'militation'], - 'limited': ['delimit', 'limited'], - 'limiter': ['limiter', 'relimit'], - 'limitless': ['limitless', 'semistill'], - 'limner': ['limner', 'merlin', 'milner'], - 'limnetic': ['limnetic', 'milicent'], - 'limoniad': ['dominial', 'imolinda', 'limoniad'], - 'limosa': ['limosa', 'somali'], - 'limose': ['lemosi', 'limose', 'moiles'], - 'limp': ['limp', 'pilm', 'plim'], - 'limper': ['limper', 'prelim', 'rimple'], - 'limping': ['impling', 'limping'], - 'limpsy': ['limpsy', 'simply'], - 'limpy': ['imply', 'limpy', 'pilmy'], - 'limsy': ['limsy', 'slimy', 'smily'], - 'lin': ['lin', 'nil'], - 'lina': ['alin', 'anil', 'lain', 'lina', 'nail'], - 'linaga': ['agnail', 'linaga'], - 'linage': ['algine', 'genial', 'linage'], - 'linamarin': ['laminarin', 'linamarin'], - 'linarite': ['inertial', 'linarite'], - 'linchet': ['linchet', 'tinchel'], - 'linctus': ['clunist', 'linctus'], - 'linda': ['danli', 'ladin', 'linda', 'nidal'], - 'lindane': ['annelid', 'lindane'], - 'linder': ['linder', 'rindle'], - 'lindoite': ['lindoite', 'tolidine'], - 'lindsay': ['islandy', 'lindsay'], - 'line': ['lien', 'line', 'neil', 'nile'], - 'linea': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'], - 'lineal': ['lienal', 'lineal'], - 'lineament': ['lineament', 'manteline'], - 'linear': ['arline', 'larine', 'linear', 'nailer', 'renail'], - 'linearity': ['inreality', 'linearity'], - 'lineate': ['elatine', 'lineate'], - 'lineature': ['lineature', 'rutelinae'], - 'linecut': ['linecut', 'tunicle'], - 'lined': ['eldin', 'lined'], - 'lineman': ['lemnian', 'lineman', 'melanin'], - 'linen': ['linen', 'linne'], - 'linesman': ['annelism', 'linesman'], - 'linet': ['inlet', 'linet'], - 'linga': ['algin', 'align', 'langi', 'liang', 'linga'], - 'lingbird': ['birdling', 'bridling', 'lingbird'], - 'linge': ['ingle', 'ligne', 'linge', 'nigel'], - 'linger': ['linger', 'ringle'], - 'lingo': ['lingo', 'login'], - 'lingtow': ['lingtow', 'twoling'], - 'lingua': ['gaulin', 'lingua'], - 'lingual': ['lingual', 'lingula'], - 'linguidental': ['dentilingual', 'indulgential', 'linguidental'], - 'lingula': ['lingual', 'lingula'], - 'linguodental': ['dentolingual', 'linguodental'], - 'lingy': ['lingy', 'lying'], - 'linha': ['linha', 'nihal'], - 'lining': ['lignin', 'lining'], - 'link': ['kiln', 'link'], - 'linked': ['kindle', 'linked'], - 'linker': ['linker', 'relink'], - 'linking': ['inkling', 'linking'], - 'linkman': ['kilnman', 'linkman'], - 'links': ['links', 'slink'], - 'linnaea': ['alanine', 'linnaea'], - 'linnaean': ['annaline', 'linnaean'], - 'linne': ['linen', 'linne'], - 'linnet': ['linnet', 'linten'], - 'lino': ['lino', 'lion', 'loin', 'noil'], - 'linolenic': ['encinillo', 'linolenic'], - 'linometer': ['linometer', 'nilometer'], - 'linopteris': ['linopteris', 'prosilient'], - 'linous': ['insoul', 'linous', 'nilous', 'unsoil'], - 'linsey': ['linsey', 'lysine'], - 'linstock': ['coltskin', 'linstock'], - 'lintel': ['lentil', 'lintel'], - 'linten': ['linnet', 'linten'], - 'lintseed': ['enlisted', 'lintseed'], - 'linum': ['linum', 'ulmin'], - 'linus': ['linus', 'sunil'], - 'liny': ['inly', 'liny'], - 'lion': ['lino', 'lion', 'loin', 'noil'], - 'lioncel': ['colline', 'lioncel'], - 'lionel': ['lionel', 'niello'], - 'lionet': ['entoil', 'lionet'], - 'lionhearted': ['leonhardite', 'lionhearted'], - 'lipa': ['lipa', 'pail', 'pali', 'pial'], - 'lipan': ['lipan', 'pinal', 'plain'], - 'liparis': ['aprilis', 'liparis'], - 'liparite': ['liparite', 'reptilia'], - 'liparous': ['liparous', 'pliosaur'], - 'lipase': ['espial', 'lipase', 'pelias'], - 'lipin': ['lipin', 'pilin'], - 'liplet': ['liplet', 'pillet'], - 'lipochondroma': ['chondrolipoma', 'lipochondroma'], - 'lipoclasis': ['calliopsis', 'lipoclasis'], - 'lipocyte': ['epicotyl', 'lipocyte'], - 'lipofibroma': ['fibrolipoma', 'lipofibroma'], - 'lipolytic': ['lipolytic', 'politicly'], - 'lipoma': ['lipoma', 'pimola', 'ploima'], - 'lipomyoma': ['lipomyoma', 'myolipoma'], - 'lipomyxoma': ['lipomyxoma', 'myxolipoma'], - 'liposis': ['liposis', 'pilosis'], - 'lipotype': ['lipotype', 'polypite'], - 'lippen': ['lippen', 'nipple'], - 'lipper': ['lipper', 'ripple'], - 'lippia': ['lippia', 'pilpai'], - 'lipsanotheca': ['lipsanotheca', 'sphacelation'], - 'lipstick': ['lickspit', 'lipstick'], - 'liquate': ['liquate', 'tequila'], - 'liquidate': ['liquidate', 'qualitied'], - 'lira': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'lirate': ['lirate', 'retail', 'retial', 'tailer'], - 'liration': ['liration', 'litorina'], - 'lire': ['lier', 'lire', 'rile'], - 'lis': ['lis', 'sil'], - 'lisa': ['lasi', 'lias', 'lisa', 'sail', 'sial'], - 'lise': ['isle', 'lise', 'sile'], - 'lisere': ['lisere', 'resile'], - 'lisk': ['lisk', 'silk', 'skil'], - 'lisle': ['lisle', 'selli'], - 'lisp': ['lisp', 'slip'], - 'lisper': ['lisper', 'pliers', 'sirple', 'spiler'], - 'list': ['list', 'silt', 'slit'], - 'listable': ['bastille', 'listable'], - 'listen': ['enlist', 'listen', 'silent', 'tinsel'], - 'listener': ['enlister', 'esterlin', 'listener', 'relisten'], - 'lister': ['lister', 'relist'], - 'listera': ['aletris', 'alister', 'listera', 'realist', 'saltier'], - 'listerian': ['listerian', 'trisilane'], - 'listerine': ['listerine', 'resilient'], - 'listerize': ['listerize', 'sterilize'], - 'listing': ['listing', 'silting'], - 'listless': ['listless', 'slitless'], - 'lisuarte': ['auletris', 'lisuarte'], - 'lit': ['lit', 'til'], - 'litas': ['alist', 'litas', 'slait', 'talis'], - 'litchi': ['litchi', 'lithic'], - 'lite': ['lite', 'teil', 'teli', 'tile'], - 'liter': ['liter', 'tiler'], - 'literal': ['literal', 'tallier'], - 'literary': ['literary', 'trailery'], - 'literate': ['laterite', 'literate', 'teretial'], - 'literose': ['literose', 'roselite', 'tirolese'], - 'lith': ['hilt', 'lith'], - 'litharge': ['litharge', 'thirlage'], - 'lithe': ['leith', 'lithe'], - 'lithectomy': ['lithectomy', 'methylotic'], - 'lithic': ['litchi', 'lithic'], - 'litho': ['litho', 'thiol', 'tholi'], - 'lithochromography': ['chromolithography', 'lithochromography'], - 'lithocyst': ['cystolith', 'lithocyst'], - 'lithonephria': ['lithonephria', 'philotherian'], - 'lithonephrotomy': ['lithonephrotomy', 'nephrolithotomy'], - 'lithophane': ['anthophile', 'lithophane'], - 'lithophone': ['lithophone', 'thiophenol'], - 'lithophotography': ['lithophotography', 'photolithography'], - 'lithophysal': ['isophthalyl', 'lithophysal'], - 'lithopone': ['lithopone', 'phonolite'], - 'lithous': ['lithous', 'loutish'], - 'litigate': ['litigate', 'tagilite'], - 'litmus': ['litmus', 'tilmus'], - 'litorina': ['liration', 'litorina'], - 'litorinidae': ['idioretinal', 'litorinidae'], - 'litra': ['litra', 'trail', 'trial'], - 'litsea': ['isleta', 'litsea', 'salite', 'stelai'], - 'litster': ['litster', 'slitter', 'stilter', 'testril'], - 'litten': ['litten', 'tinlet'], - 'litter': ['litter', 'tilter', 'titler'], - 'littery': ['littery', 'tritely'], - 'littoral': ['littoral', 'tortilla'], - 'lituiform': ['lituiform', 'trifolium'], - 'litus': ['litus', 'sluit', 'tulsi'], - 'live': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'], - 'lived': ['devil', 'divel', 'lived'], - 'livedo': ['livedo', 'olived'], - 'liveliness': ['liveliness', 'villeiness'], - 'livelong': ['livelong', 'loveling'], - 'lively': ['evilly', 'lively', 'vilely'], - 'liven': ['levin', 'liven'], - 'liveness': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'], - 'liver': ['levir', 'liver', 'livre', 'rivel'], - 'livered': ['deliver', 'deviler', 'livered'], - 'livery': ['livery', 'verily'], - 'livier': ['livier', 'virile'], - 'livonian': ['livonian', 'violanin'], - 'livre': ['levir', 'liver', 'livre', 'rivel'], - 'liwan': ['inlaw', 'liwan'], - 'llandeilo': ['diallelon', 'llandeilo'], - 'llew': ['llew', 'well'], - 'lloyd': ['dolly', 'lloyd'], - 'loa': ['alo', 'lao', 'loa'], - 'loach': ['chola', 'loach', 'olcha'], - 'load': ['alod', 'dola', 'load', 'odal'], - 'loaden': ['enodal', 'loaden'], - 'loader': ['loader', 'ordeal', 'reload'], - 'loading': ['angloid', 'loading'], - 'loaf': ['foal', 'loaf', 'olaf'], - 'loam': ['loam', 'loma', 'malo', 'mola', 'olam'], - 'loaminess': ['loaminess', 'melanosis'], - 'loaming': ['almoign', 'loaming'], - 'loamy': ['amylo', 'loamy'], - 'loaner': ['lenora', 'loaner', 'orlean', 'reloan'], - 'loasa': ['alosa', 'loasa', 'oasal'], - 'loath': ['altho', 'lhota', 'loath'], - 'loather': ['loather', 'rathole'], - 'loathly': ['loathly', 'tallyho'], - 'lob': ['blo', 'lob'], - 'lobar': ['balor', 'bolar', 'boral', 'labor', 'lobar'], - 'lobate': ['lobate', 'oblate'], - 'lobated': ['bloated', 'lobated'], - 'lobately': ['lobately', 'oblately'], - 'lobation': ['boltonia', 'lobation', 'oblation'], - 'lobe': ['bleo', 'bole', 'lobe'], - 'lobed': ['bodle', 'boled', 'lobed'], - 'lobelet': ['bellote', 'lobelet'], - 'lobelia': ['bolelia', 'lobelia', 'obelial'], - 'lobing': ['globin', 'goblin', 'lobing'], - 'lobo': ['bolo', 'bool', 'lobo', 'obol'], - 'lobola': ['balolo', 'lobola'], - 'lobscourse': ['lobscourse', 'lobscouser'], - 'lobscouser': ['lobscourse', 'lobscouser'], - 'lobster': ['bolster', 'lobster'], - 'loca': ['alco', 'coal', 'cola', 'loca'], - 'local': ['callo', 'colla', 'local'], - 'locanda': ['acnodal', 'canadol', 'locanda'], - 'locarnite': ['alectrion', 'clarionet', 'crotaline', 'locarnite'], - 'locarnize': ['laconizer', 'locarnize'], - 'locarno': ['coronal', 'locarno'], - 'locate': ['acetol', 'colate', 'locate'], - 'location': ['colation', 'coontail', 'location'], - 'locational': ['allocation', 'locational'], - 'locator': ['crotalo', 'locator'], - 'loch': ['chol', 'loch'], - 'lochan': ['chalon', 'lochan'], - 'lochetic': ['helcotic', 'lochetic', 'ochletic'], - 'lochus': ['holcus', 'lochus', 'slouch'], - 'loci': ['clio', 'coil', 'coli', 'loci'], - 'lociation': ['coalition', 'lociation'], - 'lock': ['colk', 'lock'], - 'locker': ['locker', 'relock'], - 'lockpin': ['lockpin', 'pinlock'], - 'lockram': ['lockram', 'marlock'], - 'lockspit': ['lockspit', 'lopstick'], - 'lockup': ['lockup', 'uplock'], - 'loco': ['cool', 'loco'], - 'locoweed': ['coolweed', 'locoweed'], - 'locrian': ['carolin', 'clarion', 'colarin', 'locrian'], - 'locrine': ['creolin', 'licorne', 'locrine'], - 'loculate': ['allocute', 'loculate'], - 'loculation': ['allocution', 'loculation'], - 'locum': ['cumol', 'locum'], - 'locusta': ['costula', 'locusta', 'talcous'], - 'lod': ['dol', 'lod', 'old'], - 'lode': ['dole', 'elod', 'lode', 'odel'], - 'lodesman': ['dolesman', 'lodesman'], - 'lodgeman': ['angeldom', 'lodgeman'], - 'lodger': ['golder', 'lodger'], - 'lodging': ['godling', 'lodging'], - 'loess': ['loess', 'soles'], - 'loessic': ['loessic', 'ossicle'], - 'lof': ['flo', 'lof'], - 'loft': ['flot', 'loft'], - 'lofter': ['floret', 'forlet', 'lofter', 'torfel'], - 'lofty': ['lofty', 'oftly'], - 'log': ['gol', 'log'], - 'logania': ['alogian', 'logania'], - 'logarithm': ['algorithm', 'logarithm'], - 'logarithmic': ['algorithmic', 'logarithmic'], - 'loge': ['egol', 'goel', 'loge', 'ogle', 'oleg'], - 'logger': ['logger', 'roggle'], - 'logicalist': ['logicalist', 'logistical'], - 'logicist': ['logicist', 'logistic'], - 'login': ['lingo', 'login'], - 'logistic': ['logicist', 'logistic'], - 'logistical': ['logicalist', 'logistical'], - 'logistics': ['glossitic', 'logistics'], - 'logman': ['amlong', 'logman'], - 'logographic': ['graphologic', 'logographic'], - 'logographical': ['graphological', 'logographical'], - 'logography': ['graphology', 'logography'], - 'logoi': ['igloo', 'logoi'], - 'logometrical': ['logometrical', 'metrological'], - 'logos': ['gools', 'logos'], - 'logotypy': ['logotypy', 'typology'], - 'logria': ['gloria', 'larigo', 'logria'], - 'logy': ['gloy', 'logy'], - 'lohar': ['horal', 'lohar'], - 'loin': ['lino', 'lion', 'loin', 'noil'], - 'loined': ['doline', 'indole', 'leonid', 'loined', 'olenid'], - 'loir': ['loir', 'lori', 'roil'], - 'lois': ['lois', 'silo', 'siol', 'soil', 'soli'], - 'loiter': ['loiter', 'toiler', 'triole'], - 'loka': ['kalo', 'kola', 'loka'], - 'lokao': ['lokao', 'oolak'], - 'loke': ['koel', 'loke'], - 'loket': ['ketol', 'loket'], - 'lola': ['lalo', 'lola', 'olla'], - 'loma': ['loam', 'loma', 'malo', 'mola', 'olam'], - 'lomatine': ['lomatine', 'tolamine'], - 'lombardian': ['laminboard', 'lombardian'], - 'lomboy': ['bloomy', 'lomboy'], - 'loment': ['loment', 'melton', 'molten'], - 'lomentaria': ['ameliorant', 'lomentaria'], - 'lomita': ['lomita', 'tomial'], - 'lone': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'], - 'longa': ['along', 'gonal', 'lango', 'longa', 'nogal'], - 'longanimous': ['longanimous', 'longimanous'], - 'longbeard': ['boglander', 'longbeard'], - 'longear': ['argenol', 'longear'], - 'longhead': ['headlong', 'longhead'], - 'longimanous': ['longanimous', 'longimanous'], - 'longimetry': ['longimetry', 'mongrelity'], - 'longmouthed': ['goldenmouth', 'longmouthed'], - 'longue': ['longue', 'lounge'], - 'lonicera': ['acrolein', - 'arecolin', - 'caroline', - 'colinear', - 'cornelia', - 'creolian', - 'lonicera'], - 'lontar': ['latron', 'lontar', 'tornal'], - 'looby': ['booly', 'looby'], - 'lood': ['dool', 'lood'], - 'loof': ['fool', 'loof', 'olof'], - 'look': ['kolo', 'look'], - 'looker': ['looker', 'relook'], - 'lookout': ['lookout', 'outlook'], - 'loom': ['loom', 'mool'], - 'loon': ['loon', 'nolo'], - 'loop': ['loop', 'polo', 'pool'], - 'looper': ['looper', 'pooler'], - 'loopist': ['loopist', 'poloist', 'topsoil'], - 'loopy': ['loopy', 'pooly'], - 'loosing': ['loosing', 'sinolog'], - 'loot': ['loot', 'tool'], - 'looter': ['looter', 'retool', 'rootle', 'tooler'], - 'lootie': ['lootie', 'oolite'], - 'lop': ['lop', 'pol'], - 'lope': ['lope', 'olpe', 'pole'], - 'loper': ['loper', 'poler'], - 'lopezia': ['epizoal', 'lopezia', 'opalize'], - 'lophine': ['lophine', 'pinhole'], - 'lophocomi': ['homopolic', 'lophocomi'], - 'loppet': ['loppet', 'topple'], - 'loppy': ['loppy', 'polyp'], - 'lopstick': ['lockspit', 'lopstick'], - 'loquacious': ['aquicolous', 'loquacious'], - 'lora': ['lora', 'oral'], - 'lorandite': ['lorandite', 'rodential'], - 'lorate': ['elator', 'lorate'], - 'lorcha': ['choral', 'lorcha'], - 'lordly': ['drolly', 'lordly'], - 'lore': ['lore', 'orle', 'role'], - 'lored': ['lored', 'older'], - 'loren': ['enrol', 'loren'], - 'lori': ['loir', 'lori', 'roil'], - 'lorica': ['caroli', 'corial', 'lorica'], - 'loricate': ['calorite', 'erotical', 'loricate'], - 'loricati': ['clitoria', 'loricati'], - 'lorien': ['elinor', 'lienor', 'lorien', 'noiler'], - 'loro': ['loro', 'olor', 'orlo', 'rool'], - 'lose': ['lose', 'sloe', 'sole'], - 'loser': ['loser', 'orsel', 'rosel', 'soler'], - 'lost': ['lost', 'lots', 'slot'], - 'lot': ['lot', 'tol'], - 'lota': ['alto', 'lota'], - 'lotase': ['lotase', 'osteal', 'solate', 'stolae', 'talose'], - 'lote': ['leto', 'lote', 'tole'], - 'lotic': ['cloit', 'lotic'], - 'lotrite': ['lotrite', 'tortile', 'triolet'], - 'lots': ['lost', 'lots', 'slot'], - 'lotta': ['lotta', 'total'], - 'lotter': ['lotter', 'rottle', 'tolter'], - 'lottie': ['lottie', 'toilet', 'tolite'], - 'lou': ['lou', 'luo'], - 'loud': ['loud', 'ludo'], - 'louden': ['louden', 'nodule'], - 'lough': ['ghoul', 'lough'], - 'lounder': ['durenol', 'lounder', 'roundel'], - 'lounge': ['longue', 'lounge'], - 'loupe': ['epulo', 'loupe'], - 'lourdy': ['dourly', 'lourdy'], - 'louse': ['eusol', 'louse'], - 'lousy': ['lousy', 'souly'], - 'lout': ['lout', 'tolu'], - 'louter': ['elutor', 'louter', 'outler'], - 'loutish': ['lithous', 'loutish'], - 'louty': ['louty', 'outly'], - 'louvar': ['louvar', 'ovular'], - 'louver': ['louver', 'louvre'], - 'louvre': ['louver', 'louvre'], - 'lovable': ['lovable', 'volable'], - 'lovage': ['lovage', 'volage'], - 'love': ['levo', 'love', 'velo', 'vole'], - 'loveling': ['livelong', 'loveling'], - 'lovely': ['lovely', 'volley'], - 'lovering': ['lovering', 'overling'], - 'low': ['low', 'lwo', 'owl'], - 'lowa': ['alow', 'awol', 'lowa'], - 'lowder': ['lowder', 'weldor', 'wordle'], - 'lower': ['lower', 'owler', 'rowel'], - 'lowerer': ['lowerer', 'relower'], - 'lowery': ['lowery', 'owlery', 'rowley', 'yowler'], - 'lowish': ['lowish', 'owlish'], - 'lowishly': ['lowishly', 'owlishly', 'sillyhow'], - 'lowishness': ['lowishness', 'owlishness'], - 'lowy': ['lowy', 'owly', 'yowl'], - 'loyal': ['alloy', 'loyal'], - 'loyalism': ['loyalism', 'lysiloma'], - 'loyd': ['loyd', 'odyl'], - 'luba': ['balu', 'baul', 'bual', 'luba'], - 'lubber': ['burble', 'lubber', 'rubble'], - 'lubberland': ['landlubber', 'lubberland'], - 'lube': ['blue', 'lube'], - 'lucan': ['lucan', 'nucal'], - 'lucania': ['lucania', 'luciana'], - 'lucanid': ['dulcian', 'incudal', 'lucanid', 'lucinda'], - 'lucanidae': ['leucadian', 'lucanidae'], - 'lucarne': ['crenula', 'lucarne', 'nuclear', 'unclear'], - 'lucban': ['buncal', 'lucban'], - 'luce': ['clue', 'luce'], - 'luceres': ['luceres', 'recluse'], - 'lucern': ['encurl', 'lucern'], - 'lucernal': ['lucernal', 'nucellar', 'uncellar'], - 'lucet': ['culet', 'lucet'], - 'lucia': ['aulic', 'lucia'], - 'lucian': ['cunila', 'lucian', 'lucina', 'uncial'], - 'luciana': ['lucania', 'luciana'], - 'lucifer': ['ferulic', 'lucifer'], - 'lucigen': ['glucine', 'lucigen'], - 'lucina': ['cunila', 'lucian', 'lucina', 'uncial'], - 'lucinda': ['dulcian', 'incudal', 'lucanid', 'lucinda'], - 'lucinoid': ['lucinoid', 'oculinid'], - 'lucite': ['lucite', 'luetic', 'uletic'], - 'lucrative': ['lucrative', 'revictual', 'victualer'], - 'lucre': ['cruel', 'lucre', 'ulcer'], - 'lucretia': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'], - 'lucretian': ['centurial', 'lucretian', 'ultranice'], - 'luctiferous': ['fruticulose', 'luctiferous'], - 'lucubrate': ['lucubrate', 'tubercula'], - 'ludden': ['ludden', 'nuddle'], - 'luddite': ['diluted', 'luddite'], - 'ludian': ['dualin', 'ludian', 'unlaid'], - 'ludibry': ['buirdly', 'ludibry'], - 'ludicroserious': ['ludicroserious', 'serioludicrous'], - 'ludo': ['loud', 'ludo'], - 'lue': ['leu', 'lue', 'ule'], - 'lues': ['lues', 'slue'], - 'luetic': ['lucite', 'luetic', 'uletic'], - 'lug': ['gul', 'lug'], - 'luge': ['glue', 'gule', 'luge'], - 'luger': ['gluer', 'gruel', 'luger'], - 'lugger': ['gurgle', 'lugger', 'ruggle'], - 'lugnas': ['lugnas', 'salung'], - 'lugsome': ['glumose', 'lugsome'], - 'luian': ['inula', 'luian', 'uinal'], - 'luiseno': ['elusion', 'luiseno'], - 'luite': ['luite', 'utile'], - 'lukas': ['klaus', 'lukas', 'sulka'], - 'luke': ['leuk', 'luke'], - 'lula': ['lula', 'ulla'], - 'lulab': ['bulla', 'lulab'], - 'lumbar': ['brumal', 'labrum', 'lumbar', 'umbral'], - 'lumber': ['lumber', 'rumble', 'umbrel'], - 'lumbosacral': ['lumbosacral', 'sacrolumbal'], - 'lumine': ['lumine', 'unlime'], - 'lump': ['lump', 'plum'], - 'lumper': ['lumper', 'plumer', 'replum', 'rumple'], - 'lumpet': ['lumpet', 'plumet'], - 'lumpiness': ['lumpiness', 'pluminess'], - 'lumpy': ['lumpy', 'plumy'], - 'luna': ['laun', 'luna', 'ulna', 'unal'], - 'lunacy': ['lunacy', 'unclay'], - 'lunar': ['lunar', 'ulnar', 'urnal'], - 'lunare': ['lunare', 'neural', 'ulnare', 'unreal'], - 'lunaria': ['lunaria', 'ulnaria', 'uralian'], - 'lunary': ['lunary', 'uranyl'], - 'lunatic': ['calinut', 'lunatic'], - 'lunation': ['lunation', 'ultonian'], - 'lunda': ['dunal', 'laund', 'lunda', 'ulnad'], - 'lung': ['gunl', 'lung'], - 'lunge': ['leung', 'lunge'], - 'lunged': ['gulden', 'lunged'], - 'lungfish': ['flushing', 'lungfish'], - 'lungsick': ['lungsick', 'suckling'], - 'lunisolar': ['lunisolar', 'solilunar'], - 'luo': ['lou', 'luo'], - 'lupe': ['lupe', 'pelu', 'peul', 'pule'], - 'luperci': ['luperci', 'pleuric'], - 'lupicide': ['lupicide', 'pediculi', 'pulicide'], - 'lupinaster': ['lupinaster', 'palustrine'], - 'lupine': ['lupine', 'unpile', 'upline'], - 'lupinus': ['lupinus', 'pinulus'], - 'lupis': ['lupis', 'pilus'], - 'lupous': ['lupous', 'opulus'], - 'lura': ['alur', 'laur', 'lura', 'raul', 'ural'], - 'lurch': ['churl', 'lurch'], - 'lure': ['lure', 'rule'], - 'lurer': ['lurer', 'ruler'], - 'lurg': ['gurl', 'lurg'], - 'luringly': ['luringly', 'rulingly'], - 'luscinia': ['luscinia', 'siculian'], - 'lush': ['lush', 'shlu', 'shul'], - 'lusher': ['lusher', 'shuler'], - 'lushly': ['hyllus', 'lushly'], - 'lushness': ['lushness', 'shunless'], - 'lusian': ['insula', 'lanius', 'lusian'], - 'lusk': ['lusk', 'sulk'], - 'lusky': ['lusky', 'sulky'], - 'lusory': ['lusory', 'sourly'], - 'lust': ['lust', 'slut'], - 'luster': ['luster', 'result', 'rustle', 'sutler', 'ulster'], - 'lusterless': ['lusterless', 'lustreless', 'resultless'], - 'lustihead': ['hastilude', 'lustihead'], - 'lustreless': ['lusterless', 'lustreless', 'resultless'], - 'lustrine': ['insulter', 'lustrine', 'reinsult'], - 'lustring': ['lustring', 'rustling'], - 'lusty': ['lusty', 'tylus'], - 'lutaceous': ['cautelous', 'lutaceous'], - 'lutany': ['auntly', 'lutany'], - 'lutayo': ['layout', 'lutayo', 'outlay'], - 'lute': ['lute', 'tule'], - 'luteal': ['alulet', 'luteal'], - 'lutecia': ['aleutic', 'auletic', 'caulite', 'lutecia'], - 'lutecium': ['cumulite', 'lutecium'], - 'lutein': ['lutein', 'untile'], - 'lutfisk': ['kistful', 'lutfisk'], - 'luther': ['hurtle', 'luther'], - 'lutheran': ['lutheran', 'unhalter'], - 'lutianoid': ['lutianoid', 'nautiloid'], - 'lutianus': ['lutianus', 'nautilus', 'ustulina'], - 'luting': ['glutin', 'luting', 'ungilt'], - 'lutose': ['lutose', 'solute', 'tousle'], - 'lutra': ['lutra', 'ultra'], - 'lutrinae': ['lutrinae', 'retinula', 'rutelian', 'tenurial'], - 'luxe': ['luxe', 'ulex'], - 'lwo': ['low', 'lwo', 'owl'], - 'lyam': ['amyl', 'lyam', 'myal'], - 'lyard': ['daryl', 'lardy', 'lyard'], - 'lyas': ['lyas', 'slay'], - 'lycaenid': ['adenylic', 'lycaenid'], - 'lyceum': ['cymule', 'lyceum'], - 'lycopodium': ['lycopodium', 'polycodium'], - 'lyctidae': ['diacetyl', 'lyctidae'], - 'lyddite': ['lyddite', 'tiddley'], - 'lydia': ['daily', 'lydia'], - 'lydite': ['idlety', 'lydite', 'tidely', 'tidley'], - 'lye': ['ley', 'lye'], - 'lying': ['lingy', 'lying'], - 'lymnaeid': ['lymnaeid', 'maidenly', 'medianly'], - 'lymphadenia': ['lymphadenia', 'nymphalidae'], - 'lymphectasia': ['lymphectasia', 'metaphysical'], - 'lymphopenia': ['lymphopenia', 'polyphemian'], - 'lynne': ['lenny', 'lynne'], - 'lyon': ['lyon', 'only'], - 'lyophobe': ['hypobole', 'lyophobe'], - 'lyra': ['aryl', 'lyra', 'ryal', 'yarl'], - 'lyraid': ['aridly', 'lyraid'], - 'lyrate': ['lyrate', 'raylet', 'realty', 'telary'], - 'lyre': ['lyre', 'rely'], - 'lyric': ['cyril', 'lyric'], - 'lyrical': ['cyrilla', 'lyrical'], - 'lyrid': ['idryl', 'lyrid'], - 'lys': ['lys', 'sly'], - 'lysander': ['lysander', 'synedral'], - 'lysate': ['alytes', 'astely', 'lysate', 'stealy'], - 'lyse': ['lyse', 'sley'], - 'lysiloma': ['loyalism', 'lysiloma'], - 'lysine': ['linsey', 'lysine'], - 'lysogenetic': ['cleistogeny', 'lysogenetic'], - 'lysogenic': ['glycosine', 'lysogenic'], - 'lyssic': ['clysis', 'lyssic'], - 'lyterian': ['interlay', 'lyterian'], - 'lyxose': ['lyxose', 'xylose'], - 'ma': ['am', 'ma'], - 'maam': ['amma', 'maam'], - 'mab': ['bam', 'mab'], - 'maba': ['amba', 'maba'], - 'mabel': ['amble', 'belam', 'blame', 'mabel'], - 'mabi': ['iamb', 'mabi'], - 'mabolo': ['abloom', 'mabolo'], - 'mac': ['cam', 'mac'], - 'macaca': ['camaca', 'macaca'], - 'macaco': ['cocama', 'macaco'], - 'macaglia': ['almaciga', 'macaglia'], - 'macan': ['caman', 'macan'], - 'macanese': ['macanese', 'maecenas'], - 'macao': ['acoma', 'macao'], - 'macarism': ['macarism', 'marasmic'], - 'macaroni': ['armonica', 'macaroni', 'marocain'], - 'macaronic': ['carcinoma', 'macaronic'], - 'mace': ['acme', 'came', 'mace'], - 'macedon': ['conamed', 'macedon'], - 'macedonian': ['caedmonian', 'macedonian'], - 'macedonic': ['caedmonic', 'macedonic'], - 'macer': ['cream', 'macer'], - 'macerate': ['camerate', 'macerate', 'racemate'], - 'maceration': ['aeromantic', 'cameration', 'maceration', 'racemation'], - 'machar': ['chamar', 'machar'], - 'machi': ['chiam', 'machi', 'micah'], - 'machilis': ['chiliasm', 'hilasmic', 'machilis'], - 'machinator': ['achromatin', 'chariotman', 'machinator'], - 'machine': ['chimane', 'machine'], - 'machinery': ['hemicrany', 'machinery'], - 'macies': ['camise', 'macies'], - 'macigno': ['coaming', 'macigno'], - 'macilency': ['cyclamine', 'macilency'], - 'macle': ['camel', 'clame', 'cleam', 'macle'], - 'maclura': ['maclura', 'macular'], - 'maco': ['coma', 'maco'], - 'macon': ['coman', 'macon', 'manoc'], - 'maconite': ['coinmate', 'maconite'], - 'macro': ['carom', 'coram', 'macro', 'marco'], - 'macrobian': ['carbamino', 'macrobian'], - 'macromazia': ['macromazia', 'macrozamia'], - 'macrophage': ['cameograph', 'macrophage'], - 'macrophotograph': ['macrophotograph', 'photomacrograph'], - 'macrotia': ['aromatic', 'macrotia'], - 'macrotin': ['macrotin', 'romantic'], - 'macrourid': ['macrourid', 'macruroid'], - 'macrourus': ['macrourus', 'macrurous'], - 'macrozamia': ['macromazia', 'macrozamia'], - 'macruroid': ['macrourid', 'macruroid'], - 'macrurous': ['macrourus', 'macrurous'], - 'mactra': ['mactra', 'tarmac'], - 'macular': ['maclura', 'macular'], - 'macule': ['almuce', 'caelum', 'macule'], - 'maculose': ['maculose', 'somacule'], - 'mad': ['dam', 'mad'], - 'madden': ['damned', 'demand', 'madden'], - 'maddening': ['demanding', 'maddening'], - 'maddeningly': ['demandingly', 'maddeningly'], - 'madder': ['dermad', 'madder'], - 'made': ['dame', 'made', 'mead'], - 'madeira': ['adermia', 'madeira'], - 'madeiran': ['madeiran', 'marinade'], - 'madeline': ['endemial', 'madeline'], - 'madi': ['admi', 'amid', 'madi', 'maid'], - 'madia': ['amadi', 'damia', 'madia', 'maida'], - 'madiga': ['agamid', 'madiga'], - 'madman': ['madman', 'nammad'], - 'madnep': ['dampen', 'madnep'], - 'madrid': ['madrid', 'riddam'], - 'madrier': ['admirer', 'madrier', 'married'], - 'madrilene': ['landimere', 'madrilene'], - 'madrona': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'], - 'madship': ['dampish', 'madship', 'phasmid'], - 'madurese': ['madurese', 'measured'], - 'mae': ['ame', 'mae'], - 'maecenas': ['macanese', 'maecenas'], - 'maenad': ['anadem', 'maenad'], - 'maenadism': ['maenadism', 'mandaeism'], - 'maeonian': ['enomania', 'maeonian'], - 'maestri': ['artemis', 'maestri', 'misrate'], - 'maestro': ['maestro', 'tarsome'], - 'mag': ['gam', 'mag'], - 'magadis': ['gamasid', 'magadis'], - 'magani': ['angami', 'magani', 'magian'], - 'magas': ['agsam', 'magas'], - 'mage': ['egma', 'game', 'mage'], - 'magenta': ['gateman', 'magenta', 'magnate', 'magneta'], - 'magian': ['angami', 'magani', 'magian'], - 'magic': ['gamic', 'magic'], - 'magister': ['gemarist', 'magister', 'sterigma'], - 'magistrate': ['magistrate', 'sterigmata'], - 'magma': ['gamma', 'magma'], - 'magnate': ['gateman', 'magenta', 'magnate', 'magneta'], - 'magnes': ['magnes', 'semang'], - 'magneta': ['gateman', 'magenta', 'magnate', 'magneta'], - 'magnetist': ['agistment', 'magnetist'], - 'magneto': ['geomant', 'magneto', 'megaton', 'montage'], - 'magnetod': ['magnetod', 'megadont'], - 'magnetoelectric': ['electromagnetic', 'magnetoelectric'], - 'magnetoelectrical': ['electromagnetical', 'magnetoelectrical'], - 'magnolia': ['algomian', 'magnolia'], - 'magnus': ['magnus', 'musang'], - 'magpie': ['magpie', 'piemag'], - 'magyar': ['magyar', 'margay'], - 'mah': ['ham', 'mah'], - 'maha': ['amah', 'maha'], - 'mahar': ['amhar', 'mahar', 'mahra'], - 'maharani': ['amiranha', 'maharani'], - 'mahdism': ['dammish', 'mahdism'], - 'mahdist': ['adsmith', 'mahdist'], - 'mahi': ['hami', 'hima', 'mahi'], - 'mahican': ['chamian', 'mahican'], - 'mahogany': ['hogmanay', 'mahogany'], - 'maholi': ['holmia', 'maholi'], - 'maholtine': ['hematolin', 'maholtine'], - 'mahori': ['homrai', 'mahori', 'mohair'], - 'mahra': ['amhar', 'mahar', 'mahra'], - 'mahran': ['amhran', 'harman', 'mahran'], - 'mahri': ['hiram', 'ihram', 'mahri'], - 'maia': ['amia', 'maia'], - 'maid': ['admi', 'amid', 'madi', 'maid'], - 'maida': ['amadi', 'damia', 'madia', 'maida'], - 'maiden': ['daimen', 'damine', 'maiden', 'median', 'medina'], - 'maidenism': ['maidenism', 'medianism'], - 'maidenly': ['lymnaeid', 'maidenly', 'medianly'], - 'maidish': ['hasidim', 'maidish'], - 'maidism': ['amidism', 'maidism'], - 'maigre': ['imager', 'maigre', 'margie', 'mirage'], - 'maiidae': ['amiidae', 'maiidae'], - 'mail': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'], - 'mailed': ['aldime', 'mailed', 'medial'], - 'mailer': ['mailer', 'remail'], - 'mailie': ['emilia', 'mailie'], - 'maim': ['ammi', 'imam', 'maim', 'mima'], - 'main': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'], - 'maine': ['amine', 'anime', 'maine', 'manei'], - 'mainly': ['amylin', 'mainly'], - 'mainour': ['mainour', 'uramino'], - 'mainpast': ['mainpast', 'mantispa', 'panamist', 'stampian'], - 'mainprise': ['mainprise', 'presimian'], - 'mains': ['mains', 'manis'], - 'maint': ['maint', 'matin'], - 'maintain': ['amanitin', 'maintain'], - 'maintainer': ['antimerina', 'maintainer', 'remaintain'], - 'maintop': ['maintop', 'ptomain', 'tampion', 'timpano'], - 'maioid': ['daimio', 'maioid'], - 'maioidean': ['anomiidae', 'maioidean'], - 'maire': ['aimer', 'maire', 'marie', 'ramie'], - 'maja': ['jama', 'maja'], - 'majoon': ['majoon', 'moonja'], - 'major': ['jarmo', 'major'], - 'makah': ['hakam', 'makah'], - 'makassar': ['makassar', 'samskara'], - 'make': ['kame', 'make', 'meak'], - 'maker': ['maker', 'marek', 'merak'], - 'maki': ['akim', 'maki'], - 'mako': ['amok', 'mako'], - 'mal': ['lam', 'mal'], - 'mala': ['alma', 'amla', 'lama', 'mala'], - 'malacologist': ['malacologist', 'mastological'], - 'malaga': ['agalma', 'malaga'], - 'malagma': ['amalgam', 'malagma'], - 'malakin': ['alkamin', 'malakin'], - 'malanga': ['malanga', 'nagmaal'], - 'malapert': ['armplate', 'malapert'], - 'malapi': ['impala', 'malapi'], - 'malar': ['alarm', 'malar', 'maral', 'marla', 'ramal'], - 'malarin': ['lairman', 'laminar', 'malarin', 'railman'], - 'malate': ['malate', 'meatal', 'tamale'], - 'malcreated': ['cradlemate', 'malcreated'], - 'maldonite': ['antimodel', 'maldonite', 'monilated'], - 'male': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'maleficiation': ['amelification', 'maleficiation'], - 'maleic': ['maleic', 'malice', 'melica'], - 'maleinoid': ['alimonied', 'maleinoid'], - 'malella': ['lamella', 'malella', 'malleal'], - 'maleness': ['lameness', 'maleness', 'maneless', 'nameless'], - 'malengine': ['enameling', 'malengine', 'meningeal'], - 'maleo': ['amole', 'maleo'], - 'malfed': ['flamed', 'malfed'], - 'malhonest': ['malhonest', 'mashelton'], - 'mali': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'], - 'malic': ['claim', 'clima', 'malic'], - 'malice': ['maleic', 'malice', 'melica'], - 'malicho': ['chiloma', 'malicho'], - 'maligner': ['germinal', 'maligner', 'malinger'], - 'malikana': ['kalamian', 'malikana'], - 'maline': ['limean', 'maline', 'melian', 'menial'], - 'malines': ['malines', 'salmine', 'selamin', 'seminal'], - 'malinger': ['germinal', 'maligner', 'malinger'], - 'malison': ['malison', 'manolis', 'osmanli', 'somnial'], - 'malladrite': ['armillated', 'malladrite', 'mallardite'], - 'mallardite': ['armillated', 'malladrite', 'mallardite'], - 'malleal': ['lamella', 'malella', 'malleal'], - 'mallein': ['mallein', 'manille'], - 'malleoincudal': ['incudomalleal', 'malleoincudal'], - 'malleus': ['amellus', 'malleus'], - 'malmaison': ['anomalism', 'malmaison'], - 'malmy': ['lammy', 'malmy'], - 'malo': ['loam', 'loma', 'malo', 'mola', 'olam'], - 'malonic': ['limacon', 'malonic'], - 'malonyl': ['allonym', 'malonyl'], - 'malope': ['aplome', 'malope'], - 'malpoise': ['malpoise', 'semiopal'], - 'malposed': ['malposed', 'plasmode'], - 'maltase': ['asmalte', 'maltase'], - 'malter': ['armlet', 'malter', 'martel'], - 'maltese': ['maltese', 'seamlet'], - 'malthe': ['hamlet', 'malthe'], - 'malurinae': ['malurinae', 'melanuria'], - 'malurine': ['lemurian', 'malurine', 'rumelian'], - 'malurus': ['malurus', 'ramulus'], - 'malus': ['lamus', 'malus', 'musal', 'slaum'], - 'mamers': ['mamers', 'sammer'], - 'mamo': ['ammo', 'mamo'], - 'man': ['man', 'nam'], - 'mana': ['anam', 'mana', 'naam', 'nama'], - 'manacle': ['laceman', 'manacle'], - 'manacus': ['manacus', 'samucan'], - 'manage': ['agname', 'manage'], - 'manager': ['gearman', 'manager'], - 'manal': ['alman', 'lamna', 'manal'], - 'manas': ['manas', 'saman'], - 'manatee': ['emanate', 'manatee'], - 'manatine': ['annamite', 'manatine'], - 'manbird': ['birdman', 'manbird'], - 'manchester': ['manchester', 'searchment'], - 'mand': ['damn', 'mand'], - 'mandaeism': ['maenadism', 'mandaeism'], - 'mandaite': ['animated', 'mandaite', 'mantidae'], - 'mandarin': ['drainman', 'mandarin'], - 'mandation': ['damnation', 'mandation'], - 'mandatory': ['damnatory', 'mandatory'], - 'mande': ['amend', 'mande', 'maned'], - 'mandelate': ['aldeament', 'mandelate'], - 'mandil': ['lamnid', 'mandil'], - 'mandola': ['mandola', 'odalman'], - 'mandora': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'], - 'mandra': ['mandra', 'radman'], - 'mandrill': ['drillman', 'mandrill'], - 'mandyas': ['daysman', 'mandyas'], - 'mane': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'], - 'maned': ['amend', 'mande', 'maned'], - 'manege': ['gamene', 'manege', 'menage'], - 'manei': ['amine', 'anime', 'maine', 'manei'], - 'maneless': ['lameness', 'maleness', 'maneless', 'nameless'], - 'manent': ['manent', 'netman'], - 'manerial': ['almerian', 'manerial'], - 'manes': ['manes', 'manse', 'mensa', 'samen', 'senam'], - 'maness': ['enmass', 'maness', 'messan'], - 'manettia': ['antietam', 'manettia'], - 'maney': ['maney', 'yamen'], - 'manga': ['amang', 'ganam', 'manga'], - 'mangar': ['amgarn', 'mangar', 'marang', 'ragman'], - 'mangel': ['legman', 'mangel', 'mangle'], - 'mangelin': ['mangelin', 'nameling'], - 'manger': ['engram', 'german', 'manger'], - 'mangerite': ['germanite', 'germinate', 'gramenite', 'mangerite'], - 'mangi': ['gamin', 'mangi'], - 'mangle': ['legman', 'mangel', 'mangle'], - 'mango': ['among', 'mango'], - 'mangrass': ['grassman', 'mangrass'], - 'mangrate': ['grateman', 'mangrate', 'mentagra', 'targeman'], - 'mangue': ['mangue', 'maunge'], - 'manhead': ['headman', 'manhead'], - 'manhole': ['holeman', 'manhole'], - 'manhood': ['dhamnoo', 'hoodman', 'manhood'], - 'mani': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'], - 'mania': ['amain', 'amani', 'amnia', 'anima', 'mania'], - 'maniable': ['animable', 'maniable'], - 'maniac': ['amniac', 'caiman', 'maniac'], - 'manic': ['amnic', 'manic'], - 'manid': ['dimna', 'manid'], - 'manidae': ['adamine', 'manidae'], - 'manify': ['infamy', 'manify'], - 'manila': ['almain', 'animal', 'lamina', 'manila'], - 'manilla': ['alnilam', 'manilla'], - 'manille': ['mallein', 'manille'], - 'manioc': ['camion', 'conima', 'manioc', 'monica'], - 'maniple': ['impanel', 'maniple'], - 'manipuri': ['manipuri', 'unimpair'], - 'manis': ['mains', 'manis'], - 'manist': ['manist', 'mantis', 'matins', 'stamin'], - 'manistic': ['actinism', 'manistic'], - 'manito': ['atimon', 'manito', 'montia'], - 'maniu': ['maniu', 'munia', 'unami'], - 'manius': ['animus', 'anisum', 'anusim', 'manius'], - 'maniva': ['maniva', 'vimana'], - 'manlet': ['lament', 'manlet', 'mantel', 'mantle', 'mental'], - 'manna': ['annam', 'manna'], - 'mannite': ['mannite', 'tineman'], - 'mannonic': ['cinnamon', 'mannonic'], - 'mano': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'], - 'manoc': ['coman', 'macon', 'manoc'], - 'manolis': ['malison', 'manolis', 'osmanli', 'somnial'], - 'manometrical': ['commentarial', 'manometrical'], - 'manometry': ['manometry', 'momentary'], - 'manor': ['manor', 'moran', 'norma', 'ramon', 'roman'], - 'manorial': ['manorial', 'morainal'], - 'manorship': ['manorship', 'orphanism'], - 'manoscope': ['manoscope', 'moonscape'], - 'manred': ['damner', 'manred', 'randem', 'remand'], - 'manrent': ['manrent', 'remnant'], - 'manrope': ['manrope', 'ropeman'], - 'manse': ['manes', 'manse', 'mensa', 'samen', 'senam'], - 'manship': ['manship', 'shipman'], - 'mansion': ['mansion', 'onanism'], - 'mansioneer': ['emersonian', 'mansioneer'], - 'manslaughter': ['manslaughter', 'slaughterman'], - 'manso': ['manso', 'mason', 'monas'], - 'manta': ['atman', 'manta'], - 'mantel': ['lament', 'manlet', 'mantel', 'mantle', 'mental'], - 'manteline': ['lineament', 'manteline'], - 'manter': ['manter', 'marten', 'rament'], - 'mantes': ['mantes', 'stamen'], - 'manticore': ['cremation', 'manticore'], - 'mantidae': ['animated', 'mandaite', 'mantidae'], - 'mantis': ['manist', 'mantis', 'matins', 'stamin'], - 'mantispa': ['mainpast', 'mantispa', 'panamist', 'stampian'], - 'mantissa': ['mantissa', 'satanism'], - 'mantle': ['lament', 'manlet', 'mantel', 'mantle', 'mental'], - 'manto': ['manto', 'toman'], - 'mantodea': ['mantodea', 'nematoda'], - 'mantoidea': ['diatomean', 'mantoidea'], - 'mantra': ['mantra', 'tarman'], - 'mantrap': ['mantrap', 'rampant'], - 'mantua': ['anatum', 'mantua', 'tamanu'], - 'manual': ['alumna', 'manual'], - 'manualism': ['manualism', 'musalmani'], - 'manualiter': ['manualiter', 'unmaterial'], - 'manuel': ['manuel', 'unlame'], - 'manul': ['lanum', 'manul'], - 'manuma': ['amunam', 'manuma'], - 'manure': ['manure', 'menura'], - 'manward': ['manward', 'wardman'], - 'manwards': ['manwards', 'wardsman'], - 'manway': ['manway', 'wayman'], - 'manwise': ['manwise', 'wiseman'], - 'many': ['many', 'myna'], - 'mao': ['mao', 'oam'], - 'maori': ['maori', 'mario', 'moira'], - 'map': ['map', 'pam'], - 'mapach': ['champa', 'mapach'], - 'maple': ['ample', 'maple'], - 'mapper': ['mapper', 'pamper', 'pampre'], - 'mar': ['arm', 'mar', 'ram'], - 'mara': ['amar', 'amra', 'mara', 'rama'], - 'marabout': ['marabout', 'marabuto', 'tamboura'], - 'marabuto': ['marabout', 'marabuto', 'tamboura'], - 'maraca': ['acamar', 'camara', 'maraca'], - 'maral': ['alarm', 'malar', 'maral', 'marla', 'ramal'], - 'marang': ['amgarn', 'mangar', 'marang', 'ragman'], - 'mararie': ['armeria', 'mararie'], - 'marasca': ['marasca', 'mascara'], - 'maraschino': ['anachorism', 'chorasmian', 'maraschino'], - 'marasmic': ['macarism', 'marasmic'], - 'marbelize': ['marbelize', 'marbleize'], - 'marble': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'], - 'marbleize': ['marbelize', 'marbleize'], - 'marbler': ['marbler', 'rambler'], - 'marbling': ['marbling', 'rambling'], - 'marc': ['cram', 'marc'], - 'marcan': ['carman', 'marcan'], - 'marcel': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'], - 'marcescent': ['marcescent', 'scarcement'], - 'march': ['charm', 'march'], - 'marcher': ['charmer', 'marcher', 'remarch'], - 'marchite': ['athermic', 'marchite', 'rhematic'], - 'marchpane': ['marchpane', 'preachman'], - 'marci': ['marci', 'mirac'], - 'marcionist': ['marcionist', 'romanistic'], - 'marcionite': ['marcionite', 'microtinae', 'remication'], - 'marco': ['carom', 'coram', 'macro', 'marco'], - 'marconi': ['amicron', 'marconi', 'minorca', 'romanic'], - 'mare': ['erma', 'mare', 'rame', 'ream'], - 'mareca': ['acream', 'camera', 'mareca'], - 'marek': ['maker', 'marek', 'merak'], - 'marengo': ['marengo', 'megaron'], - 'mareotid': ['mareotid', 'mediator'], - 'marfik': ['marfik', 'mirfak'], - 'marfire': ['firearm', 'marfire'], - 'margay': ['magyar', 'margay'], - 'marge': ['grame', 'marge', 'regma'], - 'margeline': ['margeline', 'regimenal'], - 'margent': ['garment', 'margent'], - 'margie': ['imager', 'maigre', 'margie', 'mirage'], - 'margin': ['arming', 'ingram', 'margin'], - 'marginal': ['alarming', 'marginal'], - 'marginally': ['alarmingly', 'marginally'], - 'marginate': ['armangite', 'marginate'], - 'marginated': ['argentamid', 'marginated'], - 'margined': ['dirgeman', 'margined', 'midrange'], - 'marginiform': ['graminiform', 'marginiform'], - 'margot': ['gomart', 'margot'], - 'marhala': ['harmala', 'marhala'], - 'mari': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'], - 'marialite': ['latimeria', 'marialite'], - 'marian': ['airman', 'amarin', 'marian', 'marina', 'mirana'], - 'mariana': ['aramina', 'mariana'], - 'marianne': ['armenian', 'marianne'], - 'marie': ['aimer', 'maire', 'marie', 'ramie'], - 'marigenous': ['germanious', 'gramineous', 'marigenous'], - 'marilla': ['armilla', 'marilla'], - 'marina': ['airman', 'amarin', 'marian', 'marina', 'mirana'], - 'marinade': ['madeiran', 'marinade'], - 'marinate': ['animater', 'marinate'], - 'marine': ['ermani', 'marine', 'remain'], - 'marinist': ['marinist', 'mistrain'], - 'mario': ['maori', 'mario', 'moira'], - 'marion': ['marion', 'romain'], - 'mariou': ['mariou', 'oarium'], - 'maris': ['maris', 'marsi', 'samir', 'simar'], - 'marish': ['marish', 'shamir'], - 'marishness': ['marishness', 'marshiness'], - 'marist': ['marist', 'matris', 'ramist'], - 'maritage': ['gematria', 'maritage'], - 'marital': ['marital', 'martial'], - 'maritality': ['maritality', 'martiality'], - 'maritally': ['maritally', 'martially'], - 'marka': ['karma', 'krama', 'marka'], - 'markeb': ['embark', 'markeb'], - 'marked': ['demark', 'marked'], - 'marker': ['marker', 'remark'], - 'marketable': ['marketable', 'tablemaker'], - 'marketeer': ['marketeer', 'treemaker'], - 'marketer': ['marketer', 'remarket'], - 'marko': ['marko', 'marok'], - 'marla': ['alarm', 'malar', 'maral', 'marla', 'ramal'], - 'marled': ['dermal', 'marled', 'medlar'], - 'marli': ['armil', 'marli', 'rimal'], - 'marline': ['marline', 'mineral', 'ramline'], - 'marlite': ['lamiter', 'marlite'], - 'marlock': ['lockram', 'marlock'], - 'maro': ['amor', 'maro', 'mora', 'omar', 'roam'], - 'marocain': ['armonica', 'macaroni', 'marocain'], - 'marok': ['marko', 'marok'], - 'maronian': ['maronian', 'romanian'], - 'maronist': ['maronist', 'romanist'], - 'maronite': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'], - 'marquesan': ['marquesan', 'squareman'], - 'marquis': ['asquirm', 'marquis'], - 'marree': ['marree', 'reamer'], - 'married': ['admirer', 'madrier', 'married'], - 'marrot': ['marrot', 'mortar'], - 'marrowed': ['marrowed', 'romeward'], - 'marryer': ['marryer', 'remarry'], - 'mars': ['arms', 'mars'], - 'marsh': ['marsh', 'shram'], - 'marshaler': ['marshaler', 'remarshal'], - 'marshiness': ['marishness', 'marshiness'], - 'marshite': ['arthemis', 'marshite', 'meharist'], - 'marsi': ['maris', 'marsi', 'samir', 'simar'], - 'marsipobranchiata': ['basiparachromatin', 'marsipobranchiata'], - 'mart': ['mart', 'tram'], - 'martel': ['armlet', 'malter', 'martel'], - 'marteline': ['alimenter', 'marteline'], - 'marten': ['manter', 'marten', 'rament'], - 'martes': ['martes', 'master', 'remast', 'stream'], - 'martha': ['amarth', 'martha'], - 'martial': ['marital', 'martial'], - 'martiality': ['maritality', 'martiality'], - 'martially': ['maritally', 'martially'], - 'martian': ['martian', 'tamarin'], - 'martinet': ['intermat', 'martinet', 'tetramin'], - 'martinico': ['martinico', 'mortician'], - 'martinoe': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'], - 'martite': ['martite', 'mitrate'], - 'martius': ['martius', 'matsuri', 'maurist'], - 'martu': ['martu', 'murat', 'turma'], - 'marty': ['marty', 'tryma'], - 'maru': ['arum', 'maru', 'mura'], - 'mary': ['army', 'mary', 'myra', 'yarm'], - 'marylander': ['aldermanry', 'marylander'], - 'marysole': ['marysole', 'ramosely'], - 'mas': ['mas', 'sam', 'sma'], - 'mascara': ['marasca', 'mascara'], - 'mascotry': ['arctomys', 'costmary', 'mascotry'], - 'masculine': ['masculine', 'semuncial', 'simulance'], - 'masculist': ['masculist', 'simulcast'], - 'masdeu': ['amused', 'masdeu', 'medusa'], - 'mash': ['mash', 'samh', 'sham'], - 'masha': ['hamsa', 'masha', 'shama'], - 'mashal': ['mashal', 'shamal'], - 'mashelton': ['malhonest', 'mashelton'], - 'masher': ['masher', 'ramesh', 'shamer'], - 'mashy': ['mashy', 'shyam'], - 'mask': ['kasm', 'mask'], - 'masker': ['masker', 'remask'], - 'mason': ['manso', 'mason', 'monas'], - 'masoner': ['masoner', 'romanes'], - 'masonic': ['anosmic', 'masonic'], - 'masonite': ['masonite', 'misatone'], - 'maspiter': ['maspiter', 'pastimer', 'primates'], - 'masque': ['masque', 'squame', 'squeam'], - 'massa': ['amass', 'assam', 'massa', 'samas'], - 'masse': ['masse', 'sesma'], - 'masser': ['masser', 'remass'], - 'masseter': ['masseter', 'seamster'], - 'masseur': ['assumer', 'erasmus', 'masseur'], - 'massicot': ['acosmist', 'massicot', 'somatics'], - 'massiness': ['amissness', 'massiness'], - 'masskanne': ['masskanne', 'sneaksman'], - 'mast': ['mast', 'mats', 'stam'], - 'masted': ['demast', 'masted'], - 'master': ['martes', 'master', 'remast', 'stream'], - 'masterate': ['masterate', 'metatarse'], - 'masterer': ['masterer', 'restream', 'streamer'], - 'masterful': ['masterful', 'streamful'], - 'masterless': ['masterless', 'streamless'], - 'masterlike': ['masterlike', 'streamlike'], - 'masterling': ['masterling', 'streamling'], - 'masterly': ['masterly', 'myrtales'], - 'mastership': ['mastership', 'shipmaster'], - 'masterwork': ['masterwork', 'workmaster'], - 'masterwort': ['masterwort', 'streamwort'], - 'mastery': ['mastery', 'streamy'], - 'mastic': ['mastic', 'misact'], - 'masticable': ['ablastemic', 'masticable'], - 'mastiche': ['mastiche', 'misteach'], - 'mastlike': ['kemalist', 'mastlike'], - 'mastoid': ['distoma', 'mastoid'], - 'mastoidale': ['diatomales', 'mastoidale', 'mastoideal'], - 'mastoideal': ['diatomales', 'mastoidale', 'mastoideal'], - 'mastological': ['malacologist', 'mastological'], - 'mastomenia': ['mastomenia', 'seminomata'], - 'mastotomy': ['mastotomy', 'stomatomy'], - 'masu': ['masu', 'musa', 'saum'], - 'mat': ['amt', 'mat', 'tam'], - 'matacan': ['matacan', 'tamanac'], - 'matai': ['amati', 'amita', 'matai'], - 'matar': ['matar', 'matra', 'trama'], - 'matara': ['armata', 'matara', 'tamara'], - 'matcher': ['matcher', 'rematch'], - 'mate': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'], - 'mateless': ['mateless', 'meatless', 'tameless', 'teamless'], - 'matelessness': ['matelessness', 'tamelessness'], - 'mately': ['mately', 'tamely'], - 'mater': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'materialism': ['immaterials', 'materialism'], - 'materiel': ['eremital', 'materiel'], - 'maternal': ['maternal', 'ramental'], - 'maternology': ['laryngotome', 'maternology'], - 'mateship': ['aphetism', 'mateship', 'shipmate', 'spithame'], - 'matey': ['matey', 'meaty'], - 'mathesis': ['mathesis', 'thamesis'], - 'mathetic': ['mathetic', 'thematic'], - 'matico': ['atomic', 'matico'], - 'matin': ['maint', 'matin'], - 'matinee': ['amenite', 'etamine', 'matinee'], - 'matins': ['manist', 'mantis', 'matins', 'stamin'], - 'matra': ['matar', 'matra', 'trama'], - 'matral': ['matral', 'tramal'], - 'matralia': ['altamira', 'matralia'], - 'matrices': ['camerist', 'ceramist', 'matrices'], - 'matricide': ['citramide', 'diametric', 'matricide'], - 'matricula': ['lactarium', 'matricula'], - 'matricular': ['matricular', 'trimacular'], - 'matris': ['marist', 'matris', 'ramist'], - 'matrocliny': ['matrocliny', 'romanticly'], - 'matronism': ['matronism', 'romantism'], - 'mats': ['mast', 'mats', 'stam'], - 'matsu': ['matsu', 'tamus', 'tsuma'], - 'matsuri': ['martius', 'matsuri', 'maurist'], - 'matter': ['matter', 'mettar'], - 'mattoir': ['mattoir', 'tritoma'], - 'maturable': ['maturable', 'metabular'], - 'maturation': ['maturation', 'natatorium'], - 'maturer': ['erratum', 'maturer'], - 'mau': ['aum', 'mau'], - 'maud': ['duma', 'maud'], - 'maudle': ['almude', 'maudle'], - 'mauger': ['mauger', 'murage'], - 'maul': ['alum', 'maul'], - 'mauler': ['mauler', 'merula', 'ramule'], - 'maun': ['maun', 'numa'], - 'maund': ['maund', 'munda', 'numda', 'undam', 'unmad'], - 'maunder': ['duramen', 'maunder', 'unarmed'], - 'maunderer': ['maunderer', 'underream'], - 'maunge': ['mangue', 'maunge'], - 'maureen': ['maureen', 'menurae'], - 'maurice': ['maurice', 'uraemic'], - 'maurist': ['martius', 'matsuri', 'maurist'], - 'mauser': ['amuser', 'mauser'], - 'mavis': ['amvis', 'mavis'], - 'maw': ['maw', 'mwa'], - 'mawp': ['mawp', 'wamp'], - 'may': ['amy', 'may', 'mya', 'yam'], - 'maybe': ['beamy', 'embay', 'maybe'], - 'mayer': ['mayer', 'reamy'], - 'maylike': ['maylike', 'yamilke'], - 'mayo': ['amoy', 'mayo'], - 'mayor': ['mayor', 'moray'], - 'maypoling': ['maypoling', 'pygmalion'], - 'maysin': ['maysin', 'minyas', 'mysian'], - 'maytide': ['daytime', 'maytide'], - 'mazer': ['mazer', 'zerma'], - 'mazur': ['mazur', 'murza'], - 'mbaya': ['ambay', 'mbaya'], - 'me': ['em', 'me'], - 'meable': ['bemeal', 'meable'], - 'mead': ['dame', 'made', 'mead'], - 'meader': ['meader', 'remade'], - 'meager': ['graeme', 'meager', 'meagre'], - 'meagre': ['graeme', 'meager', 'meagre'], - 'meak': ['kame', 'make', 'meak'], - 'meal': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'mealer': ['leamer', 'mealer'], - 'mealiness': ['mealiness', 'messaline'], - 'mealy': ['mealy', 'yamel'], - 'mean': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'], - 'meander': ['amender', 'meander', 'reamend', 'reedman'], - 'meandrite': ['demetrian', 'dermatine', 'meandrite', 'minareted'], - 'meandrous': ['meandrous', 'roundseam'], - 'meaned': ['amende', 'demean', 'meaned', 'nadeem'], - 'meaner': ['enarme', 'meaner', 'rename'], - 'meanly': ['meanly', 'namely'], - 'meant': ['ament', 'meant', 'teman'], - 'mease': ['emesa', 'mease'], - 'measly': ['measly', 'samely'], - 'measuration': ['aeronautism', 'measuration'], - 'measure': ['measure', 'reamuse'], - 'measured': ['madurese', 'measured'], - 'meat': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'], - 'meatal': ['malate', 'meatal', 'tamale'], - 'meatless': ['mateless', 'meatless', 'tameless', 'teamless'], - 'meatman': ['meatman', 'teamman'], - 'meatus': ['meatus', 'mutase'], - 'meaty': ['matey', 'meaty'], - 'mechanal': ['leachman', 'mechanal'], - 'mechanicochemical': ['chemicomechanical', 'mechanicochemical'], - 'mechanics': ['mechanics', 'mischance'], - 'mechir': ['chimer', 'mechir', 'micher'], - 'mecometry': ['cymometer', 'mecometry'], - 'meconic': ['comenic', 'encomic', 'meconic'], - 'meconin': ['ennomic', 'meconin'], - 'meconioid': ['meconioid', 'monoeidic'], - 'meconium': ['encomium', 'meconium'], - 'mecopteron': ['mecopteron', 'protocneme'], - 'medal': ['demal', 'medal'], - 'medallary': ['alarmedly', 'medallary'], - 'mede': ['deem', 'deme', 'mede', 'meed'], - 'media': ['amide', 'damie', 'media'], - 'mediacy': ['dicyema', 'mediacy'], - 'mediad': ['diadem', 'mediad'], - 'medial': ['aldime', 'mailed', 'medial'], - 'median': ['daimen', 'damine', 'maiden', 'median', 'medina'], - 'medianism': ['maidenism', 'medianism'], - 'medianly': ['lymnaeid', 'maidenly', 'medianly'], - 'mediator': ['mareotid', 'mediator'], - 'mediatress': ['mediatress', 'streamside'], - 'mediatrice': ['acidimeter', 'mediatrice'], - 'medical': ['camelid', 'decimal', 'declaim', 'medical'], - 'medically': ['decimally', 'medically'], - 'medicate': ['decimate', 'medicate'], - 'medication': ['decimation', 'medication'], - 'medicator': ['decimator', 'medicator', 'mordicate'], - 'medicatory': ['acidometry', 'medicatory', 'radiectomy'], - 'medicinal': ['adminicle', 'medicinal'], - 'medicophysical': ['medicophysical', 'physicomedical'], - 'medimnos': ['demonism', 'medimnos', 'misnomed'], - 'medina': ['daimen', 'damine', 'maiden', 'median', 'medina'], - 'medino': ['domine', 'domnei', 'emodin', 'medino'], - 'mediocrist': ['dosimetric', 'mediocrist'], - 'mediocrity': ['iridectomy', 'mediocrity'], - 'mediodorsal': ['dorsomedial', 'mediodorsal'], - 'medioventral': ['medioventral', 'ventromedial'], - 'meditate': ['admittee', 'meditate'], - 'meditator': ['meditator', 'trematoid'], - 'medlar': ['dermal', 'marled', 'medlar'], - 'medusa': ['amused', 'masdeu', 'medusa'], - 'medusan': ['medusan', 'sudamen'], - 'meece': ['emcee', 'meece'], - 'meed': ['deem', 'deme', 'mede', 'meed'], - 'meeks': ['meeks', 'smeek'], - 'meered': ['deemer', 'meered', 'redeem', 'remede'], - 'meet': ['meet', 'mete', 'teem'], - 'meeter': ['meeter', 'remeet', 'teemer'], - 'meethelp': ['helpmeet', 'meethelp'], - 'meeting': ['meeting', 'teeming', 'tegmine'], - 'meg': ['gem', 'meg'], - 'megabar': ['bergama', 'megabar'], - 'megachiropteran': ['cinematographer', 'megachiropteran'], - 'megadont': ['magnetod', 'megadont'], - 'megadyne': ['ganymede', 'megadyne'], - 'megaera': ['megaera', 'reamage'], - 'megalodon': ['megalodon', 'moonglade'], - 'megalohepatia': ['hepatomegalia', 'megalohepatia'], - 'megalophonous': ['megalophonous', 'omphalogenous'], - 'megalosplenia': ['megalosplenia', 'splenomegalia'], - 'megapod': ['megapod', 'pagedom'], - 'megapodius': ['megapodius', 'pseudimago'], - 'megarian': ['germania', 'megarian'], - 'megaric': ['gemaric', 'grimace', 'megaric'], - 'megaron': ['marengo', 'megaron'], - 'megaton': ['geomant', 'magneto', 'megaton', 'montage'], - 'megmho': ['megmho', 'megohm'], - 'megohm': ['megmho', 'megohm'], - 'megrim': ['gimmer', 'grimme', 'megrim'], - 'mehari': ['mehari', 'meriah'], - 'meharist': ['arthemis', 'marshite', 'meharist'], - 'meile': ['elemi', 'meile'], - 'mein': ['mein', 'mien', 'mine'], - 'meio': ['meio', 'oime'], - 'mel': ['elm', 'mel'], - 'mela': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'], - 'melaconite': ['colemanite', 'melaconite'], - 'melalgia': ['gamaliel', 'melalgia'], - 'melam': ['lemma', 'melam'], - 'melamine': ['ammeline', 'melamine'], - 'melange': ['gleeman', 'melange'], - 'melania': ['laminae', 'melania'], - 'melanian': ['alemanni', 'melanian'], - 'melanic': ['cnemial', 'melanic'], - 'melanilin': ['melanilin', 'millennia'], - 'melanin': ['lemnian', 'lineman', 'melanin'], - 'melanism': ['melanism', 'slimeman'], - 'melanite': ['melanite', 'meletian', 'metaline', 'nemalite'], - 'melanitic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'], - 'melanochroi': ['chloroamine', 'melanochroi'], - 'melanogen': ['melanogen', 'melongena'], - 'melanoid': ['demonial', 'melanoid'], - 'melanorrhea': ['amenorrheal', 'melanorrhea'], - 'melanosis': ['loaminess', 'melanosis'], - 'melanotic': ['entomical', 'melanotic'], - 'melanuria': ['malurinae', 'melanuria'], - 'melanuric': ['ceruminal', 'melanuric', 'numerical'], - 'melas': ['amsel', 'melas', 'mesal', 'samel'], - 'melastoma': ['melastoma', 'metasomal'], - 'meldrop': ['meldrop', 'premold'], - 'melena': ['enamel', 'melena'], - 'melenic': ['celemin', 'melenic'], - 'meletian': ['melanite', 'meletian', 'metaline', 'nemalite'], - 'meletski': ['meletski', 'stemlike'], - 'melian': ['limean', 'maline', 'melian', 'menial'], - 'meliatin': ['meliatin', 'timaline'], - 'melic': ['clime', 'melic'], - 'melica': ['maleic', 'malice', 'melica'], - 'melicerta': ['carmelite', 'melicerta'], - 'melicraton': ['centimolar', 'melicraton'], - 'melinda': ['idleman', 'melinda'], - 'meline': ['elemin', 'meline'], - 'melinite': ['ilmenite', 'melinite', 'menilite'], - 'meliorant': ['meliorant', 'mentorial'], - 'melissa': ['aimless', 'melissa', 'seismal'], - 'melitose': ['melitose', 'mesolite'], - 'mellay': ['lamely', 'mellay'], - 'mellit': ['mellit', 'millet'], - 'melodia': ['melodia', 'molidae'], - 'melodica': ['cameloid', 'comedial', 'melodica'], - 'melodicon': ['clinodome', 'melodicon', 'monocleid'], - 'melodist': ['melodist', 'modelist'], - 'melomanic': ['commelina', 'melomanic'], - 'melon': ['lemon', 'melon', 'monel'], - 'melongena': ['melanogen', 'melongena'], - 'melonist': ['melonist', 'telonism'], - 'melonites': ['limestone', 'melonites', 'milestone'], - 'melonlike': ['lemonlike', 'melonlike'], - 'meloplasty': ['meloplasty', 'myeloplast'], - 'melosa': ['melosa', 'salome', 'semola'], - 'melotragic': ['algometric', 'melotragic'], - 'melotrope': ['melotrope', 'metropole'], - 'melter': ['melter', 'remelt'], - 'melters': ['melters', 'resmelt', 'smelter'], - 'melton': ['loment', 'melton', 'molten'], - 'melungeon': ['melungeon', 'nonlegume'], - 'mem': ['emm', 'mem'], - 'memnon': ['memnon', 'mennom'], - 'memo': ['memo', 'mome'], - 'memorandist': ['memorandist', 'moderantism', 'semidormant'], - 'menage': ['gamene', 'manege', 'menage'], - 'menald': ['lemnad', 'menald'], - 'menaspis': ['menaspis', 'semispan'], - 'mendaite': ['dementia', 'mendaite'], - 'mende': ['emend', 'mende'], - 'mender': ['mender', 'remend'], - 'mendi': ['denim', 'mendi'], - 'mendipite': ['impedient', 'mendipite'], - 'menial': ['limean', 'maline', 'melian', 'menial'], - 'menic': ['menic', 'mince'], - 'menilite': ['ilmenite', 'melinite', 'menilite'], - 'meningeal': ['enameling', 'malengine', 'meningeal'], - 'meningocephalitis': ['cephalomeningitis', 'meningocephalitis'], - 'meningocerebritis': ['cerebromeningitis', 'meningocerebritis'], - 'meningoencephalitis': ['encephalomeningitis', 'meningoencephalitis'], - 'meningoencephalocele': ['encephalomeningocele', 'meningoencephalocele'], - 'meningomyelitis': ['meningomyelitis', 'myelomeningitis'], - 'meningomyelocele': ['meningomyelocele', 'myelomeningocele'], - 'mennom': ['memnon', 'mennom'], - 'menostasia': ['anematosis', 'menostasia'], - 'mensa': ['manes', 'manse', 'mensa', 'samen', 'senam'], - 'mensal': ['anselm', 'mensal'], - 'mense': ['mense', 'mesne', 'semen'], - 'menstrual': ['menstrual', 'ulsterman'], - 'mensurable': ['lebensraum', 'mensurable'], - 'mentagra': ['grateman', 'mangrate', 'mentagra', 'targeman'], - 'mental': ['lament', 'manlet', 'mantel', 'mantle', 'mental'], - 'mentalis': ['mentalis', 'smaltine', 'stileman'], - 'mentalize': ['mentalize', 'mentzelia'], - 'mentation': ['mentation', 'montanite'], - 'mentha': ['anthem', 'hetman', 'mentha'], - 'menthane': ['enanthem', 'menthane'], - 'mentigerous': ['mentigerous', 'tergeminous'], - 'mentolabial': ['labiomental', 'mentolabial'], - 'mentor': ['mentor', 'merton', 'termon', 'tormen'], - 'mentorial': ['meliorant', 'mentorial'], - 'mentzelia': ['mentalize', 'mentzelia'], - 'menura': ['manure', 'menura'], - 'menurae': ['maureen', 'menurae'], - 'menyie': ['menyie', 'yemeni'], - 'meo': ['meo', 'moe'], - 'mephisto': ['mephisto', 'pithsome'], - 'merak': ['maker', 'marek', 'merak'], - 'merat': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'meratia': ['ametria', 'artemia', 'meratia', 'ramaite'], - 'mercal': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'], - 'mercator': ['cremator', 'mercator'], - 'mercatorial': ['crematorial', 'mercatorial'], - 'mercian': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'], - 'merciful': ['crimeful', 'merciful'], - 'merciless': ['crimeless', 'merciless'], - 'mercilessness': ['crimelessness', 'mercilessness'], - 'mere': ['mere', 'reem'], - 'merel': ['elmer', 'merel', 'merle'], - 'merely': ['merely', 'yelmer'], - 'merginae': ['ergamine', 'merginae'], - 'mergus': ['gersum', 'mergus'], - 'meriah': ['mehari', 'meriah'], - 'merice': ['eremic', 'merice'], - 'merida': ['admire', 'armied', 'damier', 'dimera', 'merida'], - 'meril': ['limer', 'meril', 'miler'], - 'meriones': ['emersion', 'meriones'], - 'merism': ['merism', 'mermis', 'simmer'], - 'merist': ['merist', 'mister', 'smiter'], - 'meristem': ['meristem', 'mimester'], - 'meristic': ['meristic', 'trimesic', 'trisemic'], - 'merit': ['merit', 'miter', 'mitre', 'remit', 'timer'], - 'merited': ['demerit', 'dimeter', 'merited', 'mitered'], - 'meriter': ['meriter', 'miterer', 'trireme'], - 'merle': ['elmer', 'merel', 'merle'], - 'merlin': ['limner', 'merlin', 'milner'], - 'mermaid': ['demiram', 'mermaid'], - 'mermis': ['merism', 'mermis', 'simmer'], - 'mero': ['mero', 'more', 'omer', 'rome'], - 'meroblastic': ['blastomeric', 'meroblastic'], - 'merocyte': ['cytomere', 'merocyte'], - 'merogony': ['gonomery', 'merogony'], - 'meroistic': ['eroticism', 'isometric', 'meroistic', 'trioecism'], - 'merop': ['merop', 'moper', 'proem', 'remop'], - 'meropia': ['emporia', 'meropia'], - 'meros': ['meros', 'mores', 'morse', 'sermo', 'smore'], - 'merosthenic': ['merosthenic', 'microsthene'], - 'merostome': ['merostome', 'osmometer'], - 'merrow': ['merrow', 'wormer'], - 'merse': ['merse', 'smeer'], - 'merton': ['mentor', 'merton', 'termon', 'tormen'], - 'merula': ['mauler', 'merula', 'ramule'], - 'meruline': ['lemurine', 'meruline', 'relumine'], - 'mesa': ['asem', 'mesa', 'same', 'seam'], - 'mesad': ['desma', 'mesad'], - 'mesadenia': ['deaminase', 'mesadenia'], - 'mesail': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'], - 'mesal': ['amsel', 'melas', 'mesal', 'samel'], - 'mesalike': ['mesalike', 'seamlike'], - 'mesaraic': ['cramasie', 'mesaraic'], - 'mesaticephaly': ['hemicatalepsy', 'mesaticephaly'], - 'mese': ['mese', 'seem', 'seme', 'smee'], - 'meshech': ['meshech', 'shechem'], - 'mesial': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'], - 'mesian': ['asimen', 'inseam', 'mesian'], - 'mesic': ['mesic', 'semic'], - 'mesion': ['eonism', 'mesion', 'oneism', 'simeon'], - 'mesitae': ['amesite', 'mesitae', 'semitae'], - 'mesne': ['mense', 'mesne', 'semen'], - 'meso': ['meso', 'mose', 'some'], - 'mesobar': ['ambrose', 'mesobar'], - 'mesocephaly': ['elaphomyces', 'mesocephaly'], - 'mesognathic': ['asthmogenic', 'mesognathic'], - 'mesohepar': ['mesohepar', 'semaphore'], - 'mesolite': ['melitose', 'mesolite'], - 'mesolithic': ['homiletics', 'mesolithic'], - 'mesological': ['mesological', 'semological'], - 'mesology': ['mesology', 'semology'], - 'mesomeric': ['mesomeric', 'microseme', 'semicrome'], - 'mesonotum': ['mesonotum', 'momentous'], - 'mesorectal': ['calotermes', 'mesorectal', 'metacresol'], - 'mesotonic': ['economist', 'mesotonic'], - 'mesoventral': ['mesoventral', 'ventromesal'], - 'mespil': ['mespil', 'simple'], - 'mesropian': ['mesropian', 'promnesia', 'spironema'], - 'messalian': ['messalian', 'seminasal'], - 'messaline': ['mealiness', 'messaline'], - 'messan': ['enmass', 'maness', 'messan'], - 'messelite': ['messelite', 'semisteel', 'teleseism'], - 'messines': ['essenism', 'messines'], - 'messor': ['messor', 'mosser', 'somers'], - 'mestee': ['esteem', 'mestee'], - 'mester': ['mester', 'restem', 'temser', 'termes'], - 'mesua': ['amuse', 'mesua'], - 'meta': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'], - 'metabular': ['maturable', 'metabular'], - 'metaconid': ['comediant', 'metaconid'], - 'metacresol': ['calotermes', 'mesorectal', 'metacresol'], - 'metage': ['gamete', 'metage'], - 'metaler': ['lameter', 'metaler', 'remetal'], - 'metaline': ['melanite', 'meletian', 'metaline', 'nemalite'], - 'metaling': ['ligament', 'metaling', 'tegminal'], - 'metalist': ['metalist', 'smaltite'], - 'metallism': ['metallism', 'smalltime'], - 'metamer': ['ammeter', 'metamer'], - 'metanilic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'], - 'metaphor': ['metaphor', 'trophema'], - 'metaphoric': ['amphoteric', 'metaphoric'], - 'metaphorical': ['metaphorical', 'pharmacolite'], - 'metaphysical': ['lymphectasia', 'metaphysical'], - 'metaplastic': ['metaplastic', 'palmatisect'], - 'metapore': ['ametrope', 'metapore'], - 'metasomal': ['melastoma', 'metasomal'], - 'metatarse': ['masterate', 'metatarse'], - 'metatheria': ['hemiterata', 'metatheria'], - 'metatrophic': ['metatrophic', 'metropathic'], - 'metaxenia': ['examinate', 'exanimate', 'metaxenia'], - 'mete': ['meet', 'mete', 'teem'], - 'meteor': ['meteor', 'remote'], - 'meteorgraph': ['graphometer', 'meteorgraph'], - 'meteorical': ['carmeloite', 'ectromelia', 'meteorical'], - 'meteoristic': ['meteoristic', 'meteoritics'], - 'meteoritics': ['meteoristic', 'meteoritics'], - 'meteoroid': ['meteoroid', 'odiometer'], - 'meter': ['meter', 'retem'], - 'meterless': ['meterless', 'metreless'], - 'metership': ['herpetism', 'metership', 'metreship', 'temperish'], - 'methanal': ['latheman', 'methanal'], - 'methanate': ['hetmanate', 'methanate'], - 'methanoic': ['hematonic', 'methanoic'], - 'mether': ['mether', 'themer'], - 'method': ['method', 'mothed'], - 'methylacetanilide': ['acetmethylanilide', 'methylacetanilide'], - 'methylic': ['methylic', 'thymelic'], - 'methylotic': ['lithectomy', 'methylotic'], - 'metier': ['metier', 'retime', 'tremie'], - 'metin': ['metin', 'temin', 'timne'], - 'metis': ['metis', 'smite', 'stime', 'times'], - 'metoac': ['comate', 'metoac', 'tecoma'], - 'metol': ['metol', 'motel'], - 'metonymical': ['laminectomy', 'metonymical'], - 'metope': ['metope', 'poemet'], - 'metopias': ['epistoma', 'metopias'], - 'metosteon': ['metosteon', 'tomentose'], - 'metra': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'metrectasia': ['metrectasia', 'remasticate'], - 'metreless': ['meterless', 'metreless'], - 'metreship': ['herpetism', 'metership', 'metreship', 'temperish'], - 'metria': ['imaret', 'metria', 'mirate', 'rimate'], - 'metrician': ['antimeric', 'carminite', 'criminate', 'metrician'], - 'metrics': ['cretism', 'metrics'], - 'metrocratic': ['cratometric', 'metrocratic'], - 'metrological': ['logometrical', 'metrological'], - 'metronome': ['metronome', 'monometer', 'monotreme'], - 'metronomic': ['commorient', 'metronomic', 'monometric'], - 'metronomical': ['metronomical', 'monometrical'], - 'metropathic': ['metatrophic', 'metropathic'], - 'metrophlebitis': ['metrophlebitis', 'phlebometritis'], - 'metropole': ['melotrope', 'metropole'], - 'metroptosia': ['metroptosia', 'prostomiate'], - 'metrorrhea': ['arthromere', 'metrorrhea'], - 'metrostyle': ['metrostyle', 'stylometer'], - 'mettar': ['matter', 'mettar'], - 'metusia': ['metusia', 'suimate', 'timaeus'], - 'mew': ['mew', 'wem'], - 'meward': ['meward', 'warmed'], - 'mho': ['mho', 'ohm'], - 'mhometer': ['mhometer', 'ohmmeter'], - 'miamia': ['amimia', 'miamia'], - 'mian': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'], - 'miaotse': ['miaotse', 'ostemia'], - 'miaotze': ['atomize', 'miaotze'], - 'mias': ['mias', 'saim', 'siam', 'sima'], - 'miasmal': ['lamaism', 'miasmal'], - 'miastor': ['amorist', 'aortism', 'miastor'], - 'miaul': ['aumil', 'miaul'], - 'miauler': ['lemuria', 'miauler'], - 'mib': ['bim', 'mib'], - 'mica': ['amic', 'mica'], - 'micah': ['chiam', 'machi', 'micah'], - 'micate': ['acmite', 'micate'], - 'mication': ['amniotic', 'mication'], - 'micellar': ['micellar', 'millrace'], - 'michael': ['michael', 'micheal'], - 'miche': ['chime', 'hemic', 'miche'], - 'micheal': ['michael', 'micheal'], - 'micher': ['chimer', 'mechir', 'micher'], - 'micht': ['micht', 'mitch'], - 'micranthropos': ['micranthropos', 'promonarchist'], - 'micro': ['micro', 'moric', 'romic'], - 'microcephal': ['microcephal', 'prochemical'], - 'microcephaly': ['microcephaly', 'pyrochemical'], - 'microcinema': ['microcinema', 'microcnemia'], - 'microcnemia': ['microcinema', 'microcnemia'], - 'microcrith': ['microcrith', 'trichromic'], - 'micropetalous': ['micropetalous', 'somatopleuric'], - 'microphagy': ['microphagy', 'myographic'], - 'microphone': ['microphone', 'neomorphic'], - 'microphot': ['microphot', 'morphotic'], - 'microphotograph': ['microphotograph', 'photomicrograph'], - 'microphotographic': ['microphotographic', 'photomicrographic'], - 'microphotography': ['microphotography', 'photomicrography'], - 'microphotoscope': ['microphotoscope', 'photomicroscope'], - 'micropterous': ['micropterous', 'prosectorium'], - 'micropyle': ['micropyle', 'polymeric'], - 'microradiometer': ['microradiometer', 'radiomicrometer'], - 'microseme': ['mesomeric', 'microseme', 'semicrome'], - 'microspectroscope': ['microspectroscope', 'spectromicroscope'], - 'microstat': ['microstat', 'stromatic'], - 'microsthene': ['merosthenic', 'microsthene'], - 'microstome': ['microstome', 'osmometric'], - 'microtia': ['amoritic', 'microtia'], - 'microtinae': ['marcionite', 'microtinae', 'remication'], - 'mid': ['dim', 'mid'], - 'midden': ['midden', 'minded'], - 'middler': ['middler', 'mildred'], - 'middy': ['didym', 'middy'], - 'mide': ['demi', 'diem', 'dime', 'mide'], - 'mider': ['dimer', 'mider'], - 'mididae': ['amidide', 'diamide', 'mididae'], - 'midrange': ['dirgeman', 'margined', 'midrange'], - 'midstory': ['midstory', 'modistry'], - 'miek': ['miek', 'mike'], - 'mien': ['mein', 'mien', 'mine'], - 'mig': ['gim', 'mig'], - 'migraine': ['imaginer', 'migraine'], - 'migrate': ['migrate', 'ragtime'], - 'migratory': ['gyromitra', 'migratory'], - 'mihrab': ['brahmi', 'mihrab'], - 'mikael': ['kelima', 'mikael'], - 'mike': ['miek', 'mike'], - 'mil': ['lim', 'mil'], - 'mila': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'], - 'milan': ['lamin', 'liman', 'milan'], - 'milden': ['milden', 'mindel'], - 'mildness': ['mildness', 'mindless'], - 'mildred': ['middler', 'mildred'], - 'mile': ['emil', 'lime', 'mile'], - 'milepost': ['milepost', 'polemist'], - 'miler': ['limer', 'meril', 'miler'], - 'miles': ['limes', 'miles', 'slime', 'smile'], - 'milesian': ['alienism', 'milesian'], - 'milestone': ['limestone', 'melonites', 'milestone'], - 'milicent': ['limnetic', 'milicent'], - 'military': ['limitary', 'military'], - 'militate': ['limitate', 'militate'], - 'militation': ['limitation', 'militation'], - 'milken': ['kimnel', 'milken'], - 'millennia': ['melanilin', 'millennia'], - 'miller': ['miller', 'remill'], - 'millet': ['mellit', 'millet'], - 'milliare': ['milliare', 'ramillie'], - 'millrace': ['micellar', 'millrace'], - 'milner': ['limner', 'merlin', 'milner'], - 'milo': ['milo', 'moil'], - 'milsie': ['milsie', 'simile'], - 'miltonia': ['limation', 'miltonia'], - 'mima': ['ammi', 'imam', 'maim', 'mima'], - 'mime': ['emim', 'mime'], - 'mimester': ['meristem', 'mimester'], - 'mimi': ['immi', 'mimi'], - 'mimidae': ['amimide', 'mimidae'], - 'mimosa': ['amomis', 'mimosa'], - 'min': ['min', 'nim'], - 'mina': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'], - 'minacity': ['imitancy', 'intimacy', 'minacity'], - 'minar': ['inarm', 'minar'], - 'minaret': ['minaret', 'raiment', 'tireman'], - 'minareted': ['demetrian', 'dermatine', 'meandrite', 'minareted'], - 'minargent': ['germinant', 'minargent'], - 'minatory': ['minatory', 'romanity'], - 'mince': ['menic', 'mince'], - 'minchiate': ['hematinic', 'minchiate'], - 'mincopie': ['mincopie', 'poimenic'], - 'minded': ['midden', 'minded'], - 'mindel': ['milden', 'mindel'], - 'mindelian': ['eliminand', 'mindelian'], - 'minder': ['minder', 'remind'], - 'mindless': ['mildness', 'mindless'], - 'mine': ['mein', 'mien', 'mine'], - 'miner': ['inerm', 'miner'], - 'mineral': ['marline', 'mineral', 'ramline'], - 'minerva': ['minerva', 'vermian'], - 'minerval': ['minerval', 'verminal'], - 'mingler': ['gremlin', 'mingler'], - 'miniator': ['miniator', 'triamino'], - 'minish': ['minish', 'nimshi'], - 'minister': ['minister', 'misinter'], - 'ministry': ['ministry', 'myristin'], - 'minkish': ['minkish', 'nimkish'], - 'minnetaree': ['minnetaree', 'nemertinea'], - 'minoan': ['amnion', 'minoan', 'nomina'], - 'minometer': ['minometer', 'omnimeter'], - 'minor': ['minor', 'morin'], - 'minorate': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'], - 'minorca': ['amicron', 'marconi', 'minorca', 'romanic'], - 'minos': ['minos', 'osmin', 'simon'], - 'minot': ['minot', 'timon', 'tomin'], - 'mintage': ['mintage', 'teaming', 'tegmina'], - 'minter': ['minter', 'remint', 'termin'], - 'minuend': ['minuend', 'unmined'], - 'minuet': ['minuet', 'minute'], - 'minute': ['minuet', 'minute'], - 'minutely': ['minutely', 'untimely'], - 'minuter': ['minuter', 'unmiter'], - 'minyas': ['maysin', 'minyas', 'mysian'], - 'mir': ['mir', 'rim'], - 'mira': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'], - 'mirabel': ['embrail', 'mirabel'], - 'mirac': ['marci', 'mirac'], - 'miracle': ['claimer', 'miracle', 'reclaim'], - 'mirage': ['imager', 'maigre', 'margie', 'mirage'], - 'mirana': ['airman', 'amarin', 'marian', 'marina', 'mirana'], - 'miranha': ['ahriman', 'miranha'], - 'mirate': ['imaret', 'metria', 'mirate', 'rimate'], - 'mirbane': ['ambrein', 'mirbane'], - 'mire': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'mirfak': ['marfik', 'mirfak'], - 'mirounga': ['mirounga', 'moringua', 'origanum'], - 'miry': ['miry', 'rimy', 'yirm'], - 'mirza': ['mirza', 'mizar'], - 'misact': ['mastic', 'misact'], - 'misadvise': ['admissive', 'misadvise'], - 'misagent': ['misagent', 'steaming'], - 'misaim': ['misaim', 'misima'], - 'misandry': ['misandry', 'myrsinad'], - 'misassociation': ['associationism', 'misassociation'], - 'misatone': ['masonite', 'misatone'], - 'misattend': ['misattend', 'tandemist'], - 'misaunter': ['antiserum', 'misaunter'], - 'misbehavior': ['behaviorism', 'misbehavior'], - 'mischance': ['mechanics', 'mischance'], - 'misclass': ['classism', 'misclass'], - 'miscoin': ['iconism', 'imsonic', 'miscoin'], - 'misconfiguration': ['configurationism', 'misconfiguration'], - 'misconstitutional': ['constitutionalism', 'misconstitutional'], - 'misconstruction': ['constructionism', 'misconstruction'], - 'miscreant': ['encratism', 'miscreant'], - 'miscreation': ['anisometric', - 'creationism', - 'miscreation', - 'ramisection', - 'reactionism'], - 'miscue': ['cesium', 'miscue'], - 'misdate': ['diastem', 'misdate'], - 'misdaub': ['misdaub', 'submaid'], - 'misdeal': ['misdeal', 'mislead'], - 'misdealer': ['misdealer', 'misleader', 'misleared'], - 'misdeclare': ['creedalism', 'misdeclare'], - 'misdiet': ['misdiet', 'misedit', 'mistide'], - 'misdivision': ['divisionism', 'misdivision'], - 'misdread': ['disarmed', 'misdread'], - 'mise': ['mise', 'semi', 'sime'], - 'misease': ['misease', 'siamese'], - 'misecclesiastic': ['ecclesiasticism', 'misecclesiastic'], - 'misedit': ['misdiet', 'misedit', 'mistide'], - 'misexpression': ['expressionism', 'misexpression'], - 'mishmash': ['mishmash', 'shammish'], - 'misima': ['misaim', 'misima'], - 'misimpression': ['impressionism', 'misimpression'], - 'misinter': ['minister', 'misinter'], - 'mislabel': ['mislabel', 'semiball'], - 'mislabor': ['laborism', 'mislabor'], - 'mislead': ['misdeal', 'mislead'], - 'misleader': ['misdealer', 'misleader', 'misleared'], - 'mislear': ['mislear', 'realism'], - 'misleared': ['misdealer', 'misleader', 'misleared'], - 'misname': ['amenism', 'immanes', 'misname'], - 'misniac': ['cainism', 'misniac'], - 'misnomed': ['demonism', 'medimnos', 'misnomed'], - 'misoneism': ['misoneism', 'simeonism'], - 'mispage': ['impages', 'mispage'], - 'misperception': ['misperception', 'perceptionism'], - 'misperform': ['misperform', 'preformism'], - 'misphrase': ['misphrase', 'seraphism'], - 'misplay': ['impalsy', 'misplay'], - 'misplead': ['misplead', 'pedalism'], - 'misprisal': ['misprisal', 'spiralism'], - 'misproud': ['disporum', 'misproud'], - 'misprovide': ['disimprove', 'misprovide'], - 'misput': ['misput', 'sumpit'], - 'misquotation': ['antimosquito', 'misquotation'], - 'misrate': ['artemis', 'maestri', 'misrate'], - 'misread': ['misread', 'sidearm'], - 'misreform': ['misreform', 'reformism'], - 'misrelate': ['misrelate', 'salimeter'], - 'misrelation': ['misrelation', 'orientalism', 'relationism'], - 'misreliance': ['criminalese', 'misreliance'], - 'misreporter': ['misreporter', 'reporterism'], - 'misrepresentation': ['misrepresentation', 'representationism'], - 'misrepresenter': ['misrepresenter', 'remisrepresent'], - 'misrepute': ['misrepute', 'septerium'], - 'misrhyme': ['misrhyme', 'shimmery'], - 'misrule': ['misrule', 'simuler'], - 'missal': ['missal', 'salmis'], - 'missayer': ['emissary', 'missayer'], - 'misset': ['misset', 'tmesis'], - 'misshape': ['emphasis', 'misshape'], - 'missioner': ['missioner', 'remission'], - 'misspell': ['misspell', 'psellism'], - 'missuggestion': ['missuggestion', 'suggestionism'], - 'missy': ['missy', 'mysis'], - 'mist': ['mist', 'smit', 'stim'], - 'misteach': ['mastiche', 'misteach'], - 'mister': ['merist', 'mister', 'smiter'], - 'mistide': ['misdiet', 'misedit', 'mistide'], - 'mistle': ['mistle', 'smilet'], - 'mistone': ['mistone', 'moisten'], - 'mistradition': ['mistradition', 'traditionism'], - 'mistrain': ['marinist', 'mistrain'], - 'mistreat': ['mistreat', 'teratism'], - 'mistrial': ['mistrial', 'trialism'], - 'mistutor': ['mistutor', 'tutorism'], - 'misty': ['misty', 'stimy'], - 'misunderstander': ['misunderstander', 'remisunderstand'], - 'misura': ['misura', 'ramusi'], - 'misuser': ['misuser', 'surmise'], - 'mitannish': ['mitannish', 'sminthian'], - 'mitch': ['micht', 'mitch'], - 'mite': ['emit', 'item', 'mite', 'time'], - 'mitella': ['mitella', 'tellima'], - 'miteproof': ['miteproof', 'timeproof'], - 'miter': ['merit', 'miter', 'mitre', 'remit', 'timer'], - 'mitered': ['demerit', 'dimeter', 'merited', 'mitered'], - 'miterer': ['meriter', 'miterer', 'trireme'], - 'mithraic': ['arithmic', 'mithraic', 'mithriac'], - 'mithraicist': ['mithraicist', 'mithraistic'], - 'mithraistic': ['mithraicist', 'mithraistic'], - 'mithriac': ['arithmic', 'mithraic', 'mithriac'], - 'mitra': ['mitra', 'tarmi', 'timar', 'tirma'], - 'mitral': ['mitral', 'ramtil'], - 'mitrate': ['martite', 'mitrate'], - 'mitre': ['merit', 'miter', 'mitre', 'remit', 'timer'], - 'mitrer': ['mitrer', 'retrim', 'trimer'], - 'mitridae': ['dimetria', 'mitridae', 'tiremaid', 'triamide'], - 'mixer': ['mixer', 'remix'], - 'mizar': ['mirza', 'mizar'], - 'mnesic': ['cnemis', 'mnesic'], - 'mniaceous': ['acuminose', 'mniaceous'], - 'mniotiltidae': ['delimitation', 'mniotiltidae'], - 'mnium': ['mnium', 'nummi'], - 'mo': ['mo', 'om'], - 'moabitic': ['biatomic', 'moabitic'], - 'moan': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'], - 'moarian': ['amanori', 'moarian'], - 'moat': ['atmo', 'atom', 'moat', 'toma'], - 'mob': ['bom', 'mob'], - 'mobbable': ['bombable', 'mobbable'], - 'mobber': ['bomber', 'mobber'], - 'mobbish': ['hobbism', 'mobbish'], - 'mobed': ['demob', 'mobed'], - 'mobile': ['bemoil', 'mobile'], - 'mobilian': ['binomial', 'mobilian'], - 'mobocrat': ['mobocrat', 'motorcab'], - 'mobship': ['mobship', 'phobism'], - 'mobster': ['bestorm', 'mobster'], - 'mocker': ['mocker', 'remock'], - 'mocmain': ['ammonic', 'mocmain'], - 'mod': ['dom', 'mod'], - 'modal': ['domal', 'modal'], - 'mode': ['dome', 'mode', 'moed'], - 'modeler': ['demerol', 'modeler', 'remodel'], - 'modelist': ['melodist', 'modelist'], - 'modena': ['daemon', 'damone', 'modena'], - 'modenese': ['modenese', 'needsome'], - 'moderant': ['moderant', 'normated'], - 'moderantism': ['memorandist', 'moderantism', 'semidormant'], - 'modern': ['modern', 'morned'], - 'modernistic': ['modernistic', 'monstricide'], - 'modestly': ['modestly', 'styledom'], - 'modesty': ['dystome', 'modesty'], - 'modiste': ['distome', 'modiste'], - 'modistry': ['midstory', 'modistry'], - 'modius': ['modius', 'sodium'], - 'moe': ['meo', 'moe'], - 'moed': ['dome', 'mode', 'moed'], - 'moerithere': ['heteromeri', 'moerithere'], - 'mogdad': ['goddam', 'mogdad'], - 'moha': ['ahom', 'moha'], - 'mohair': ['homrai', 'mahori', 'mohair'], - 'mohel': ['hemol', 'mohel'], - 'mohican': ['mohican', 'monachi'], - 'moho': ['homo', 'moho'], - 'mohur': ['humor', 'mohur'], - 'moider': ['dormie', 'moider'], - 'moieter': ['moieter', 'romeite'], - 'moiety': ['moiety', 'moyite'], - 'moil': ['milo', 'moil'], - 'moiles': ['lemosi', 'limose', 'moiles'], - 'moineau': ['eunomia', 'moineau'], - 'moira': ['maori', 'mario', 'moira'], - 'moisten': ['mistone', 'moisten'], - 'moistener': ['moistener', 'neoterism'], - 'moisture': ['moisture', 'semitour'], - 'moit': ['itmo', 'moit', 'omit', 'timo'], - 'mojo': ['joom', 'mojo'], - 'moke': ['kome', 'moke'], - 'moki': ['komi', 'moki'], - 'mola': ['loam', 'loma', 'malo', 'mola', 'olam'], - 'molar': ['molar', 'moral', 'romal'], - 'molarity': ['molarity', 'morality'], - 'molary': ['amyrol', 'molary'], - 'molder': ['dermol', 'molder', 'remold'], - 'moler': ['moler', 'morel'], - 'molge': ['glome', 'golem', 'molge'], - 'molidae': ['melodia', 'molidae'], - 'molinia': ['molinia', 'monilia'], - 'mollusca': ['callosum', 'mollusca'], - 'moloid': ['moloid', 'oildom'], - 'molten': ['loment', 'melton', 'molten'], - 'molybdena': ['baldmoney', 'molybdena'], - 'molybdenic': ['combinedly', 'molybdenic'], - 'mome': ['memo', 'mome'], - 'moment': ['moment', 'montem'], - 'momentary': ['manometry', 'momentary'], - 'momentous': ['mesonotum', 'momentous'], - 'momotinae': ['amniotome', 'momotinae'], - 'mona': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'], - 'monachi': ['mohican', 'monachi'], - 'monactin': ['monactin', 'montanic'], - 'monad': ['damon', 'monad', 'nomad'], - 'monadic': ['monadic', 'nomadic'], - 'monadical': ['monadical', 'nomadical'], - 'monadically': ['monadically', 'nomadically'], - 'monadina': ['monadina', 'nomadian'], - 'monadism': ['monadism', 'nomadism'], - 'monaene': ['anemone', 'monaene'], - 'monal': ['almon', 'monal'], - 'monamniotic': ['commination', 'monamniotic'], - 'monanthous': ['anthonomus', 'monanthous'], - 'monarch': ['monarch', 'nomarch', 'onmarch'], - 'monarchial': ['harmonical', 'monarchial'], - 'monarchian': ['anharmonic', 'monarchian'], - 'monarchistic': ['chiromancist', 'monarchistic'], - 'monarchy': ['monarchy', 'nomarchy'], - 'monarda': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'], - 'monas': ['manso', 'mason', 'monas'], - 'monasa': ['monasa', 'samoan'], - 'monase': ['monase', 'nosema'], - 'monaster': ['monaster', 'monstera', 'nearmost', 'storeman'], - 'monastery': ['monastery', 'oysterman'], - 'monastic': ['catonism', 'monastic'], - 'monastical': ['catmalison', 'monastical'], - 'monatomic': ['commation', 'monatomic'], - 'monaural': ['anomural', 'monaural'], - 'monday': ['dynamo', 'monday'], - 'mone': ['mone', 'nome', 'omen'], - 'monel': ['lemon', 'melon', 'monel'], - 'moner': ['enorm', 'moner', 'morne'], - 'monera': ['enamor', 'monera', 'oreman', 'romane'], - 'moneral': ['almoner', 'moneral', 'nemoral'], - 'monergist': ['gerontism', 'monergist'], - 'moneric': ['incomer', 'moneric'], - 'monesia': ['monesia', 'osamine', 'osmanie'], - 'monetary': ['monetary', 'myronate', 'naometry'], - 'money': ['money', 'moyen'], - 'moneybag': ['bogeyman', 'moneybag'], - 'moneyless': ['moneyless', 'moyenless'], - 'monger': ['germon', 'monger', 'morgen'], - 'mongler': ['mongler', 'mongrel'], - 'mongoose': ['gonosome', 'mongoose'], - 'mongrel': ['mongler', 'mongrel'], - 'mongrelity': ['longimetry', 'mongrelity'], - 'monial': ['monial', 'nomial', 'oilman'], - 'monias': ['monias', 'osamin', 'osmina'], - 'monica': ['camion', 'conima', 'manioc', 'monica'], - 'monilated': ['antimodel', 'maldonite', 'monilated'], - 'monilia': ['molinia', 'monilia'], - 'monism': ['monism', 'nomism', 'simmon'], - 'monist': ['inmost', 'monist', 'omnist'], - 'monistic': ['monistic', 'nicotism', 'nomistic'], - 'monitory': ['monitory', 'moronity'], - 'monitress': ['monitress', 'sermonist'], - 'mono': ['mono', 'moon'], - 'monoacid': ['damonico', 'monoacid'], - 'monoazo': ['monoazo', 'monozoa'], - 'monocleid': ['clinodome', 'melodicon', 'monocleid'], - 'monoclinous': ['monoclinous', 'monoclonius'], - 'monoclonius': ['monoclinous', 'monoclonius'], - 'monocracy': ['monocracy', 'nomocracy'], - 'monocystidae': ['monocystidae', 'monocystidea'], - 'monocystidea': ['monocystidae', 'monocystidea'], - 'monodactylous': ['condylomatous', 'monodactylous'], - 'monodactyly': ['dactylonomy', 'monodactyly'], - 'monodelphia': ['amidophenol', 'monodelphia'], - 'monodonta': ['anomodont', 'monodonta'], - 'monodram': ['monodram', 'romandom'], - 'monoecian': ['monoecian', 'neocomian'], - 'monoecism': ['economism', 'monoecism', 'monosemic'], - 'monoeidic': ['meconioid', 'monoeidic'], - 'monogastric': ['gastronomic', 'monogastric'], - 'monogenist': ['monogenist', 'nomogenist'], - 'monogenous': ['monogenous', 'nomogenous'], - 'monogeny': ['monogeny', 'nomogeny'], - 'monogram': ['monogram', 'nomogram'], - 'monograph': ['monograph', 'nomograph', 'phonogram'], - 'monographer': ['geranomorph', 'monographer', 'nomographer'], - 'monographic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'], - 'monographical': ['gramophonical', 'monographical', 'nomographical'], - 'monographically': ['gramophonically', - 'monographically', - 'nomographically', - 'phonogramically'], - 'monographist': ['gramophonist', 'monographist'], - 'monography': ['monography', 'nomography'], - 'monoid': ['domino', 'monoid'], - 'monological': ['monological', 'nomological'], - 'monologist': ['monologist', 'nomologist', 'ontologism'], - 'monology': ['monology', 'nomology'], - 'monometer': ['metronome', 'monometer', 'monotreme'], - 'monometric': ['commorient', 'metronomic', 'monometric'], - 'monometrical': ['metronomical', 'monometrical'], - 'monomorphic': ['monomorphic', 'morphonomic'], - 'monont': ['monont', 'monton'], - 'monopathy': ['monopathy', 'pathonomy'], - 'monopersulphuric': ['monopersulphuric', 'permonosulphuric'], - 'monophote': ['monophote', 'motophone'], - 'monophylite': ['entomophily', 'monophylite'], - 'monophyllous': ['monophyllous', 'nomophyllous'], - 'monoplanist': ['monoplanist', 'postnominal'], - 'monopsychism': ['monopsychism', 'psychomonism'], - 'monopteral': ['monopteral', 'protonemal'], - 'monosemic': ['economism', 'monoecism', 'monosemic'], - 'monosodium': ['monosodium', 'omnimodous', 'onosmodium'], - 'monotheism': ['monotheism', 'nomotheism'], - 'monotheist': ['monotheist', 'thomsonite'], - 'monothetic': ['monothetic', 'nomothetic'], - 'monotreme': ['metronome', 'monometer', 'monotreme'], - 'monotypal': ['monotypal', 'toponymal'], - 'monotypic': ['monotypic', 'toponymic'], - 'monotypical': ['monotypical', 'toponymical'], - 'monozoa': ['monoazo', 'monozoa'], - 'monozoic': ['monozoic', 'zoonomic'], - 'monroeism': ['monroeism', 'semimoron'], - 'monsieur': ['inermous', 'monsieur'], - 'monstera': ['monaster', 'monstera', 'nearmost', 'storeman'], - 'monstricide': ['modernistic', 'monstricide'], - 'montage': ['geomant', 'magneto', 'megaton', 'montage'], - 'montagnais': ['antagonism', 'montagnais'], - 'montanic': ['monactin', 'montanic'], - 'montanite': ['mentation', 'montanite'], - 'montem': ['moment', 'montem'], - 'montes': ['montes', 'ostmen'], - 'montia': ['atimon', 'manito', 'montia'], - 'monticule': ['ctenolium', 'monticule'], - 'monton': ['monont', 'monton'], - 'montu': ['montu', 'mount', 'notum'], - 'monture': ['monture', 'mounter', 'remount'], - 'monumentary': ['monumentary', 'unmomentary'], - 'mood': ['doom', 'mood'], - 'mooder': ['doomer', 'mooder', 'redoom', 'roomed'], - 'mool': ['loom', 'mool'], - 'mools': ['mools', 'sloom'], - 'moon': ['mono', 'moon'], - 'moonglade': ['megalodon', 'moonglade'], - 'moonite': ['emotion', 'moonite'], - 'moonja': ['majoon', 'moonja'], - 'moonscape': ['manoscope', 'moonscape'], - 'moonseed': ['endosome', 'moonseed'], - 'moontide': ['demotion', 'entomoid', 'moontide'], - 'moop': ['moop', 'pomo'], - 'moor': ['moor', 'moro', 'room'], - 'moorage': ['moorage', 'roomage'], - 'moorball': ['ballroom', 'moorball'], - 'moore': ['moore', 'romeo'], - 'moorn': ['moorn', 'moron'], - 'moorship': ['isomorph', 'moorship'], - 'moorup': ['moorup', 'uproom'], - 'moorwort': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'], - 'moory': ['moory', 'roomy'], - 'moost': ['moost', 'smoot'], - 'moot': ['moot', 'toom'], - 'mooth': ['mooth', 'thoom'], - 'mootstead': ['mootstead', 'stomatode'], - 'mop': ['mop', 'pom'], - 'mopane': ['mopane', 'pomane'], - 'mope': ['mope', 'poem', 'pome'], - 'moper': ['merop', 'moper', 'proem', 'remop'], - 'mophead': ['hemapod', 'mophead'], - 'mopish': ['mopish', 'ophism'], - 'mopla': ['mopla', 'palmo'], - 'mopsy': ['mopsy', 'myops'], - 'mora': ['amor', 'maro', 'mora', 'omar', 'roam'], - 'morainal': ['manorial', 'morainal'], - 'moraine': ['moraine', 'romaine'], - 'moral': ['molar', 'moral', 'romal'], - 'morality': ['molarity', 'morality'], - 'morals': ['morals', 'morsal'], - 'moran': ['manor', 'moran', 'norma', 'ramon', 'roman'], - 'morat': ['amort', 'morat', 'torma'], - 'morate': ['amoret', 'morate'], - 'moray': ['mayor', 'moray'], - 'morbid': ['dibrom', 'morbid'], - 'mordancy': ['dormancy', 'mordancy'], - 'mordant': ['dormant', 'mordant'], - 'mordenite': ['interdome', 'mordenite', 'nemertoid'], - 'mordicate': ['decimator', 'medicator', 'mordicate'], - 'more': ['mero', 'more', 'omer', 'rome'], - 'moreish': ['heroism', 'moreish'], - 'morel': ['moler', 'morel'], - 'morencite': ['entomeric', 'intercome', 'morencite'], - 'morenita': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'], - 'moreote': ['moreote', 'oometer'], - 'mores': ['meros', 'mores', 'morse', 'sermo', 'smore'], - 'morga': ['agrom', 'morga'], - 'morganatic': ['actinogram', 'morganatic'], - 'morgay': ['gyroma', 'morgay'], - 'morgen': ['germon', 'monger', 'morgen'], - 'moribund': ['moribund', 'unmorbid'], - 'moric': ['micro', 'moric', 'romic'], - 'moriche': ['homeric', 'moriche'], - 'morin': ['minor', 'morin'], - 'moringa': ['ingomar', 'moringa', 'roaming'], - 'moringua': ['mirounga', 'moringua', 'origanum'], - 'morn': ['morn', 'norm'], - 'morne': ['enorm', 'moner', 'morne'], - 'morned': ['modern', 'morned'], - 'mornless': ['mornless', 'normless'], - 'moro': ['moor', 'moro', 'room'], - 'morocota': ['coatroom', 'morocota'], - 'moron': ['moorn', 'moron'], - 'moronic': ['moronic', 'omicron'], - 'moronity': ['monitory', 'moronity'], - 'morphea': ['amphore', 'morphea'], - 'morphonomic': ['monomorphic', 'morphonomic'], - 'morphotic': ['microphot', 'morphotic'], - 'morphotropic': ['morphotropic', 'protomorphic'], - 'morrisean': ['morrisean', 'rosmarine'], - 'morsal': ['morals', 'morsal'], - 'morse': ['meros', 'mores', 'morse', 'sermo', 'smore'], - 'mortacious': ['mortacious', 'urosomatic'], - 'mortar': ['marrot', 'mortar'], - 'mortician': ['martinico', 'mortician'], - 'mortise': ['erotism', 'mortise', 'trisome'], - 'morton': ['morton', 'tomorn'], - 'mortuarian': ['mortuarian', 'muratorian'], - 'mortuary': ['mortuary', 'outmarry'], - 'mortuous': ['mortuous', 'tumorous'], - 'morus': ['morus', 'mosur'], - 'mosaic': ['aosmic', 'mosaic'], - 'mosandrite': ['mosandrite', 'tarsonemid'], - 'mosasauri': ['amaurosis', 'mosasauri'], - 'moschate': ['chatsome', 'moschate'], - 'mose': ['meso', 'mose', 'some'], - 'mosker': ['mosker', 'smoker'], - 'mosser': ['messor', 'mosser', 'somers'], - 'moste': ['moste', 'smote'], - 'mosting': ['gnomist', 'mosting'], - 'mosul': ['mosul', 'mouls', 'solum'], - 'mosur': ['morus', 'mosur'], - 'mot': ['mot', 'tom'], - 'mote': ['mote', 'tome'], - 'motel': ['metol', 'motel'], - 'motet': ['motet', 'motte', 'totem'], - 'mothed': ['method', 'mothed'], - 'mother': ['mother', 'thermo'], - 'motherland': ['enthraldom', 'motherland'], - 'motherward': ['motherward', 'threadworm'], - 'motograph': ['motograph', 'photogram'], - 'motographic': ['motographic', 'tomographic'], - 'motophone': ['monophote', 'motophone'], - 'motorcab': ['mobocrat', 'motorcab'], - 'motte': ['motet', 'motte', 'totem'], - 'moud': ['doum', 'moud', 'odum'], - 'moudy': ['moudy', 'yomud'], - 'moul': ['moul', 'ulmo'], - 'mouls': ['mosul', 'mouls', 'solum'], - 'mound': ['donum', 'mound'], - 'mount': ['montu', 'mount', 'notum'], - 'mountained': ['emundation', 'mountained'], - 'mountaineer': ['enumeration', 'mountaineer'], - 'mounted': ['demount', 'mounted'], - 'mounter': ['monture', 'mounter', 'remount'], - 'mousery': ['mousery', 'seymour'], - 'mousoni': ['mousoni', 'ominous'], - 'mousse': ['mousse', 'smouse'], - 'moutan': ['amount', 'moutan', 'outman'], - 'mouther': ['mouther', 'theorum'], - 'mover': ['mover', 'vomer'], - 'moy': ['moy', 'yom'], - 'moyen': ['money', 'moyen'], - 'moyenless': ['moneyless', 'moyenless'], - 'moyite': ['moiety', 'moyite'], - 'mru': ['mru', 'rum'], - 'mu': ['mu', 'um'], - 'muang': ['muang', 'munga'], - 'much': ['chum', 'much'], - 'mucic': ['cumic', 'mucic'], - 'mucilage': ['glucemia', 'mucilage'], - 'mucin': ['cumin', 'mucin'], - 'mucinoid': ['conidium', 'mucinoid', 'oncidium'], - 'mucofibrous': ['fibromucous', 'mucofibrous'], - 'mucoid': ['codium', 'mucoid'], - 'muconic': ['muconic', 'uncomic'], - 'mucor': ['mucor', 'mucro'], - 'mucoserous': ['mucoserous', 'seromucous'], - 'mucro': ['mucor', 'mucro'], - 'mucrones': ['consumer', 'mucrones'], - 'mud': ['dum', 'mud'], - 'mudar': ['mudar', 'mudra'], - 'mudden': ['edmund', 'mudden'], - 'mudir': ['mudir', 'murid'], - 'mudra': ['mudar', 'mudra'], - 'mudstone': ['mudstone', 'unmodest'], - 'mug': ['gum', 'mug'], - 'muga': ['gaum', 'muga'], - 'muggles': ['muggles', 'smuggle'], - 'mugweed': ['gumweed', 'mugweed'], - 'muid': ['duim', 'muid'], - 'muilla': ['allium', 'alulim', 'muilla'], - 'muir': ['muir', 'rimu'], - 'muishond': ['muishond', 'unmodish'], - 'muist': ['muist', 'tuism'], - 'mukri': ['kurmi', 'mukri'], - 'muleta': ['amulet', 'muleta'], - 'mulga': ['algum', 'almug', 'glaum', 'gluma', 'mulga'], - 'mulier': ['mulier', 'muriel'], - 'mulita': ['mulita', 'ultima'], - 'mulk': ['kulm', 'mulk'], - 'multani': ['multani', 'talinum'], - 'multinervose': ['multinervose', 'volunteerism'], - 'multipole': ['impollute', 'multipole'], - 'mumbler': ['bummler', 'mumbler'], - 'munda': ['maund', 'munda', 'numda', 'undam', 'unmad'], - 'mundane': ['mundane', 'unamend', 'unmaned', 'unnamed'], - 'munga': ['muang', 'munga'], - 'mungo': ['mungo', 'muong'], - 'munia': ['maniu', 'munia', 'unami'], - 'munity': ['munity', 'mutiny'], - 'muong': ['mungo', 'muong'], - 'mura': ['arum', 'maru', 'mura'], - 'murage': ['mauger', 'murage'], - 'mural': ['mural', 'rumal'], - 'muralist': ['altruism', 'muralist', 'traulism', 'ultraism'], - 'muran': ['muran', 'ruman', 'unarm', 'unram', 'urman'], - 'murat': ['martu', 'murat', 'turma'], - 'muratorian': ['mortuarian', 'muratorian'], - 'murderer': ['demurrer', 'murderer'], - 'murdering': ['demurring', 'murdering'], - 'murderingly': ['demurringly', 'murderingly'], - 'murex': ['murex', 'rumex'], - 'murga': ['garum', 'murga'], - 'muricate': ['ceratium', 'muricate'], - 'muricine': ['irenicum', 'muricine'], - 'murid': ['mudir', 'murid'], - 'muriel': ['mulier', 'muriel'], - 'murine': ['murine', 'nerium'], - 'murly': ['murly', 'rumly'], - 'murmurer': ['murmurer', 'remurmur'], - 'murrain': ['murrain', 'murrina'], - 'murrina': ['murrain', 'murrina'], - 'murut': ['murut', 'utrum'], - 'murza': ['mazur', 'murza'], - 'mus': ['mus', 'sum'], - 'musa': ['masu', 'musa', 'saum'], - 'musal': ['lamus', 'malus', 'musal', 'slaum'], - 'musalmani': ['manualism', 'musalmani'], - 'musang': ['magnus', 'musang'], - 'musar': ['musar', 'ramus', 'rusma', 'surma'], - 'musca': ['camus', 'musca', 'scaum', 'sumac'], - 'muscade': ['camused', 'muscade'], - 'muscarine': ['muscarine', 'sucramine'], - 'musci': ['musci', 'music'], - 'muscicole': ['leucocism', 'muscicole'], - 'muscinae': ['muscinae', 'semuncia'], - 'muscle': ['clumse', 'muscle'], - 'muscly': ['clumsy', 'muscly'], - 'muscone': ['consume', 'muscone'], - 'muscot': ['custom', 'muscot'], - 'mused': ['mused', 'sedum'], - 'museography': ['hypergamous', 'museography'], - 'muser': ['muser', 'remus', 'serum'], - 'musha': ['hamus', 'musha'], - 'music': ['musci', 'music'], - 'musicate': ['autecism', 'musicate'], - 'musico': ['musico', 'suomic'], - 'musie': ['iseum', 'musie'], - 'musing': ['musing', 'signum'], - 'muslined': ['muslined', 'unmisled', 'unsmiled'], - 'musophagine': ['amphigenous', 'musophagine'], - 'mussaenda': ['mussaenda', 'unamassed'], - 'must': ['must', 'smut', 'stum'], - 'mustang': ['mustang', 'stagnum'], - 'mustard': ['durmast', 'mustard'], - 'muster': ['muster', 'sertum', 'stumer'], - 'musterer': ['musterer', 'remuster'], - 'mustily': ['mustily', 'mytilus'], - 'muta': ['muta', 'taum'], - 'mutable': ['atumble', 'mutable'], - 'mutant': ['mutant', 'tantum', 'tutman'], - 'mutase': ['meatus', 'mutase'], - 'mute': ['mute', 'tume'], - 'muteness': ['muteness', 'tenesmus'], - 'mutescence': ['mutescence', 'tumescence'], - 'mutilate': ['mutilate', 'ultimate'], - 'mutilation': ['mutilation', 'ultimation'], - 'mutiny': ['munity', 'mutiny'], - 'mutism': ['mutism', 'summit'], - 'mutual': ['mutual', 'umlaut'], - 'mutulary': ['mutulary', 'tumulary'], - 'muysca': ['cyamus', 'muysca'], - 'mwa': ['maw', 'mwa'], - 'my': ['my', 'ym'], - 'mya': ['amy', 'may', 'mya', 'yam'], - 'myal': ['amyl', 'lyam', 'myal'], - 'myaria': ['amiray', 'myaria'], - 'myatonic': ['cymation', 'myatonic', 'onymatic'], - 'mycelia': ['amyelic', 'mycelia'], - 'mycelian': ['clymenia', 'mycelian'], - 'mycoid': ['cymoid', 'mycoid'], - 'mycophagist': ['mycophagist', 'phagocytism'], - 'mycose': ['cymose', 'mycose'], - 'mycosterol': ['mycosterol', 'sclerotomy'], - 'mycotrophic': ['chromotypic', 'cormophytic', 'mycotrophic'], - 'mycterism': ['mycterism', 'symmetric'], - 'myctodera': ['myctodera', 'radectomy'], - 'mydaleine': ['amylidene', 'mydaleine'], - 'myeloencephalitis': ['encephalomyelitis', 'myeloencephalitis'], - 'myelomeningitis': ['meningomyelitis', 'myelomeningitis'], - 'myelomeningocele': ['meningomyelocele', 'myelomeningocele'], - 'myelon': ['lemony', 'myelon'], - 'myelonal': ['amylenol', 'myelonal'], - 'myeloneuritis': ['myeloneuritis', 'neuromyelitis'], - 'myeloplast': ['meloplasty', 'myeloplast'], - 'mygale': ['gamely', 'gleamy', 'mygale'], - 'myitis': ['myitis', 'simity'], - 'myliobatid': ['bimodality', 'myliobatid'], - 'mymar': ['mymar', 'rammy'], - 'myna': ['many', 'myna'], - 'myoatrophy': ['amyotrophy', 'myoatrophy'], - 'myocolpitis': ['myocolpitis', 'polysomitic'], - 'myofibroma': ['fibromyoma', 'myofibroma'], - 'myoglobin': ['boomingly', 'myoglobin'], - 'myographic': ['microphagy', 'myographic'], - 'myographist': ['myographist', 'pythagorism'], - 'myolipoma': ['lipomyoma', 'myolipoma'], - 'myomohysterectomy': ['hysteromyomectomy', 'myomohysterectomy'], - 'myope': ['myope', 'pomey'], - 'myoplastic': ['myoplastic', 'polymastic'], - 'myoplasty': ['myoplasty', 'polymasty'], - 'myopolar': ['myopolar', 'playroom'], - 'myops': ['mopsy', 'myops'], - 'myosin': ['isonym', 'myosin', 'simony'], - 'myosote': ['myosote', 'toysome'], - 'myotenotomy': ['myotenotomy', 'tenomyotomy'], - 'myotic': ['comity', 'myotic'], - 'myra': ['army', 'mary', 'myra', 'yarm'], - 'myrcia': ['myrcia', 'myrica'], - 'myrialiter': ['myrialiter', 'myrialitre'], - 'myrialitre': ['myrialiter', 'myrialitre'], - 'myriameter': ['myriameter', 'myriametre'], - 'myriametre': ['myriameter', 'myriametre'], - 'myrianida': ['dimyarian', 'myrianida'], - 'myrica': ['myrcia', 'myrica'], - 'myristate': ['myristate', 'tasimetry'], - 'myristin': ['ministry', 'myristin'], - 'myristone': ['myristone', 'smyrniote'], - 'myronate': ['monetary', 'myronate', 'naometry'], - 'myrsinad': ['misandry', 'myrsinad'], - 'myrtales': ['masterly', 'myrtales'], - 'myrtle': ['myrtle', 'termly'], - 'mysell': ['mysell', 'smelly'], - 'mysian': ['maysin', 'minyas', 'mysian'], - 'mysis': ['missy', 'mysis'], - 'mysterial': ['mysterial', 'salimetry'], - 'mystes': ['mystes', 'system'], - 'mythographer': ['mythographer', 'thermography'], - 'mythogreen': ['mythogreen', 'thermogeny'], - 'mythologer': ['mythologer', 'thermology'], - 'mythopoeic': ['homeotypic', 'mythopoeic'], - 'mythus': ['mythus', 'thymus'], - 'mytilid': ['mytilid', 'timidly'], - 'mytilus': ['mustily', 'mytilus'], - 'myxochondroma': ['chondromyxoma', 'myxochondroma'], - 'myxochondrosarcoma': ['chondromyxosarcoma', 'myxochondrosarcoma'], - 'myxocystoma': ['cystomyxoma', 'myxocystoma'], - 'myxofibroma': ['fibromyxoma', 'myxofibroma'], - 'myxofibrosarcoma': ['fibromyxosarcoma', 'myxofibrosarcoma'], - 'myxoinoma': ['inomyxoma', 'myxoinoma'], - 'myxolipoma': ['lipomyxoma', 'myxolipoma'], - 'myxotheca': ['chemotaxy', 'myxotheca'], - 'na': ['an', 'na'], - 'naa': ['ana', 'naa'], - 'naam': ['anam', 'mana', 'naam', 'nama'], - 'nab': ['ban', 'nab'], - 'nabak': ['banak', 'nabak'], - 'nabal': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'], - 'nabalism': ['bailsman', 'balanism', 'nabalism'], - 'nabalite': ['albanite', 'balanite', 'nabalite'], - 'nabalus': ['balanus', 'nabalus', 'subanal'], - 'nabk': ['bank', 'knab', 'nabk'], - 'nabla': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'], - 'nable': ['leban', 'nable'], - 'nabobishly': ['babylonish', 'nabobishly'], - 'nabothian': ['bathonian', 'nabothian'], - 'nabs': ['nabs', 'snab'], - 'nabu': ['baun', 'buna', 'nabu', 'nuba'], - 'nacarat': ['cantara', 'nacarat'], - 'nace': ['acne', 'cane', 'nace'], - 'nachitoch': ['chanchito', 'nachitoch'], - 'nacre': ['caner', 'crane', 'crena', 'nacre', 'rance'], - 'nacred': ['cedarn', 'dancer', 'nacred'], - 'nacreous': ['carneous', 'nacreous'], - 'nacrite': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'], - 'nacrous': ['carnous', 'nacrous', 'narcous'], - 'nadder': ['dander', 'darned', 'nadder'], - 'nadeem': ['amende', 'demean', 'meaned', 'nadeem'], - 'nadir': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'], - 'nadorite': ['andorite', 'nadorite', 'ordinate', 'rodentia'], - 'nae': ['ean', 'nae', 'nea'], - 'nael': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'], - 'naether': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'], - 'nag': ['gan', 'nag'], - 'nagara': ['angara', 'aranga', 'nagara'], - 'nagari': ['graian', 'nagari'], - 'nagatelite': ['gelatinate', 'nagatelite'], - 'nagger': ['ganger', 'grange', 'nagger'], - 'nagging': ['ganging', 'nagging'], - 'naggle': ['laggen', 'naggle'], - 'naggly': ['gangly', 'naggly'], - 'nagmaal': ['malanga', 'nagmaal'], - 'nagnag': ['gangan', 'nagnag'], - 'nagnail': ['alangin', 'anginal', 'anglian', 'nagnail'], - 'nagor': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'nagster': ['angster', 'garnets', 'nagster', 'strange'], - 'nagual': ['angula', 'nagual'], - 'nahani': ['hainan', 'nahani'], - 'nahor': ['nahor', 'norah', 'rohan'], - 'nahum': ['human', 'nahum'], - 'naiad': ['danai', 'diana', 'naiad'], - 'naiant': ['naiant', 'tainan'], - 'naias': ['asian', 'naias', 'sanai'], - 'naid': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'], - 'naif': ['fain', 'naif'], - 'naifly': ['fainly', 'naifly'], - 'naig': ['gain', 'inga', 'naig', 'ngai'], - 'naik': ['akin', 'kina', 'naik'], - 'nail': ['alin', 'anil', 'lain', 'lina', 'nail'], - 'nailer': ['arline', 'larine', 'linear', 'nailer', 'renail'], - 'naileress': ['earliness', 'naileress'], - 'nailery': ['inlayer', 'nailery'], - 'nailless': ['nailless', 'sensilla'], - 'nailrod': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'], - 'nailshop': ['nailshop', 'siphonal'], - 'naily': ['inlay', 'naily'], - 'naim': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'], - 'nain': ['nain', 'nina'], - 'naio': ['aion', 'naio'], - 'nair': ['arni', 'iran', 'nair', 'rain', 'rani'], - 'nairy': ['nairy', 'rainy'], - 'nais': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'], - 'naish': ['naish', 'shina'], - 'naither': ['anither', 'inearth', 'naither'], - 'naive': ['avine', 'naive', 'vinea'], - 'naivete': ['naivete', 'nieveta'], - 'nak': ['kan', 'nak'], - 'naked': ['kande', 'knead', 'naked'], - 'nakedish': ['headskin', 'nakedish', 'sinkhead'], - 'naker': ['anker', 'karen', 'naker'], - 'nakir': ['inkra', 'krina', 'nakir', 'rinka'], - 'nako': ['kona', 'nako'], - 'nalita': ['antlia', 'latian', 'nalita'], - 'nallah': ['hallan', 'nallah'], - 'nam': ['man', 'nam'], - 'nama': ['anam', 'mana', 'naam', 'nama'], - 'namaz': ['namaz', 'zaman'], - 'nambe': ['beman', 'nambe'], - 'namda': ['adman', 'daman', 'namda'], - 'name': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'], - 'nameability': ['amenability', 'nameability'], - 'nameable': ['amenable', 'nameable'], - 'nameless': ['lameness', 'maleness', 'maneless', 'nameless'], - 'nameling': ['mangelin', 'nameling'], - 'namely': ['meanly', 'namely'], - 'namer': ['enarm', 'namer', 'reman'], - 'nammad': ['madman', 'nammad'], - 'nan': ['ann', 'nan'], - 'nana': ['anan', 'anna', 'nana'], - 'nanaimo': ['nanaimo', 'omniana'], - 'nancy': ['canny', 'nancy'], - 'nandi': ['indan', 'nandi'], - 'nane': ['anne', 'nane'], - 'nanes': ['nanes', 'senna'], - 'nanoid': ['adonin', 'nanoid', 'nonaid'], - 'nanosomia': ['nanosomia', 'nosomania'], - 'nanpie': ['nanpie', 'pennia', 'pinnae'], - 'naological': ['colonalgia', 'naological'], - 'naometry': ['monetary', 'myronate', 'naometry'], - 'naomi': ['amino', 'inoma', 'naomi', 'omani', 'omina'], - 'naoto': ['naoto', 'toona'], - 'nap': ['nap', 'pan'], - 'napaean': ['anapnea', 'napaean'], - 'nape': ['nape', 'neap', 'nepa', 'pane', 'pean'], - 'napead': ['napead', 'panade'], - 'napery': ['napery', 'pyrena'], - 'naphthalize': ['naphthalize', 'phthalazine'], - 'naphtol': ['haplont', 'naphtol'], - 'napkin': ['napkin', 'pankin'], - 'napped': ['append', 'napped'], - 'napper': ['napper', 'papern'], - 'napron': ['napron', 'nonpar'], - 'napthionic': ['antiphonic', 'napthionic'], - 'napu': ['napu', 'puan', 'puna'], - 'nar': ['arn', 'nar', 'ran'], - 'narcaciontes': ['narcaciontes', 'transoceanic'], - 'narcose': ['carnose', 'coarsen', 'narcose'], - 'narcotia': ['craniota', 'croatian', 'narcotia', 'raincoat'], - 'narcoticism': ['intracosmic', 'narcoticism'], - 'narcotina': ['anarcotin', 'cantorian', 'carnation', 'narcotina'], - 'narcotine': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'], - 'narcotism': ['narcotism', 'romancist'], - 'narcotist': ['narcotist', 'stratonic'], - 'narcotize': ['narcotize', 'zirconate'], - 'narcous': ['carnous', 'nacrous', 'narcous'], - 'nard': ['darn', 'nard', 'rand'], - 'nardine': ['adrenin', 'nardine'], - 'nardus': ['nardus', 'sundar', 'sundra'], - 'nares': ['anser', 'nares', 'rasen', 'snare'], - 'nargil': ['nargil', 'raglin'], - 'naric': ['cairn', 'crain', 'naric'], - 'narica': ['acinar', - 'arnica', - 'canari', - 'carian', - 'carina', - 'crania', - 'narica'], - 'nariform': ['nariform', 'raniform'], - 'narine': ['narine', 'ranine'], - 'nark': ['knar', 'kran', 'nark', 'rank'], - 'narration': ['narration', 'tornarian'], - 'narthecium': ['anthericum', 'narthecium'], - 'nary': ['nary', 'yarn'], - 'nasab': ['nasab', 'saban'], - 'nasal': ['alans', 'lanas', 'nasal'], - 'nasalism': ['nasalism', 'sailsman'], - 'nasard': ['nasard', 'sandra'], - 'nascapi': ['capsian', 'caspian', 'nascapi', 'panisca'], - 'nash': ['hans', 'nash', 'shan'], - 'nashgab': ['bangash', 'nashgab'], - 'nasi': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'], - 'nasial': ['anisal', 'nasial', 'salian', 'salina'], - 'nasitis': ['nasitis', 'sistani'], - 'nasoantral': ['antronasal', 'nasoantral'], - 'nasobuccal': ['bucconasal', 'nasobuccal'], - 'nasofrontal': ['frontonasal', 'nasofrontal'], - 'nasolabial': ['labionasal', 'nasolabial'], - 'nasolachrymal': ['lachrymonasal', 'nasolachrymal'], - 'nasonite': ['estonian', 'nasonite'], - 'nasoorbital': ['nasoorbital', 'orbitonasal'], - 'nasopalatal': ['nasopalatal', 'palatonasal'], - 'nasoseptal': ['nasoseptal', 'septonasal'], - 'nassa': ['nassa', 'sasan'], - 'nassidae': ['assidean', 'nassidae'], - 'nast': ['nast', 'sant', 'stan'], - 'nastic': ['incast', 'nastic'], - 'nastily': ['nastily', 'saintly', 'staynil'], - 'nasturtion': ['antrustion', 'nasturtion'], - 'nasty': ['nasty', 'styan', 'tansy'], - 'nasua': ['nasua', 'sauna'], - 'nasus': ['nasus', 'susan'], - 'nasute': ['nasute', 'nauset', 'unseat'], - 'nat': ['ant', 'nat', 'tan'], - 'nataka': ['nataka', 'tanaka'], - 'natal': ['antal', 'natal'], - 'natalia': ['altaian', 'latania', 'natalia'], - 'natalie': ['laniate', 'natalie', 'taenial'], - 'nataloin': ['latonian', 'nataloin', 'national'], - 'natals': ['aslant', 'lansat', 'natals', 'santal'], - 'natator': ['arnotta', 'natator'], - 'natatorium': ['maturation', 'natatorium'], - 'natch': ['chant', 'natch'], - 'nate': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'nates': ['antes', 'nates', 'stane', 'stean'], - 'nathan': ['nathan', 'thanan'], - 'nathe': ['enhat', 'ethan', 'nathe', 'neath', 'thane'], - 'nather': ['anther', 'nather', 'tharen', 'thenar'], - 'natica': ['actian', 'natica', 'tanica'], - 'naticiform': ['actiniform', 'naticiform'], - 'naticine': ['actinine', 'naticine'], - 'natick': ['catkin', 'natick'], - 'naticoid': ['actinoid', 'diatonic', 'naticoid'], - 'nation': ['anoint', 'nation'], - 'national': ['latonian', 'nataloin', 'national'], - 'native': ['native', 'navite'], - 'natively': ['natively', 'venality'], - 'nativist': ['nativist', 'visitant'], - 'natr': ['natr', 'rant', 'tarn', 'tran'], - 'natricinae': ['natricinae', 'nectarinia'], - 'natricine': ['crinanite', 'natricine'], - 'natrolite': ['natrolite', 'tentorial'], - 'natter': ['attern', 'natter', 'ratten', 'tarten'], - 'nattered': ['attender', 'nattered', 'reattend'], - 'nattily': ['nattily', 'titanyl'], - 'nattle': ['latent', 'latten', 'nattle', 'talent', 'tantle'], - 'naturalistic': ['naturalistic', 'unartistical'], - 'naturing': ['gainturn', 'naturing'], - 'naturism': ['naturism', 'sturmian', 'turanism'], - 'naturist': ['antirust', 'naturist'], - 'naturistic': ['naturistic', 'unartistic'], - 'naturistically': ['naturistically', 'unartistically'], - 'nauger': ['nauger', 'raunge', 'ungear'], - 'naumk': ['kuman', 'naumk'], - 'naunt': ['naunt', 'tunna'], - 'nauntle': ['annulet', 'nauntle'], - 'nauplius': ['nauplius', 'paulinus'], - 'nauset': ['nasute', 'nauset', 'unseat'], - 'naut': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'], - 'nauther': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'], - 'nautic': ['anicut', 'nautic', 'ticuna', 'tunica'], - 'nautical': ['actinula', 'nautical'], - 'nautiloid': ['lutianoid', 'nautiloid'], - 'nautilus': ['lutianus', 'nautilus', 'ustulina'], - 'naval': ['alvan', 'naval'], - 'navalist': ['navalist', 'salivant'], - 'navar': ['navar', 'varan', 'varna'], - 'nave': ['evan', 'nave', 'vane'], - 'navel': ['elvan', 'navel', 'venal'], - 'naviculare': ['naviculare', 'uncavalier'], - 'navigant': ['navigant', 'vaginant'], - 'navigate': ['navigate', 'vaginate'], - 'navite': ['native', 'navite'], - 'naw': ['awn', 'naw', 'wan'], - 'nawt': ['nawt', 'tawn', 'want'], - 'nay': ['any', 'nay', 'yan'], - 'nayar': ['aryan', 'nayar', 'rayan'], - 'nazarite': ['nazarite', 'nazirate', 'triazane'], - 'nazi': ['nazi', 'zain'], - 'nazim': ['nazim', 'nizam'], - 'nazirate': ['nazarite', 'nazirate', 'triazane'], - 'nazirite': ['nazirite', 'triazine'], - 'ne': ['en', 'ne'], - 'nea': ['ean', 'nae', 'nea'], - 'neal': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'], - 'neanic': ['canine', 'encina', 'neanic'], - 'neap': ['nape', 'neap', 'nepa', 'pane', 'pean'], - 'neapolitan': ['antelopian', 'neapolitan', 'panelation'], - 'nearby': ['barney', 'nearby'], - 'nearctic': ['acentric', 'encratic', 'nearctic'], - 'nearest': ['earnest', 'eastern', 'nearest'], - 'nearish': ['arshine', 'nearish', 'rhesian', 'sherani'], - 'nearly': ['anerly', 'nearly'], - 'nearmost': ['monaster', 'monstera', 'nearmost', 'storeman'], - 'nearthrosis': ['enarthrosis', 'nearthrosis'], - 'neat': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'neaten': ['etnean', 'neaten'], - 'neath': ['enhat', 'ethan', 'nathe', 'neath', 'thane'], - 'neatherd': ['adherent', 'headrent', 'neatherd', 'threaden'], - 'neatherdess': ['heartedness', 'neatherdess'], - 'neb': ['ben', 'neb'], - 'neback': ['backen', 'neback'], - 'nebaioth': ['boethian', 'nebaioth'], - 'nebalia': ['abelian', 'nebalia'], - 'nebelist': ['nebelist', 'stilbene', 'tensible'], - 'nebula': ['nebula', 'unable', 'unbale'], - 'nebulose': ['bluenose', 'nebulose'], - 'necator': ['enactor', 'necator', 'orcanet'], - 'necessarian': ['necessarian', 'renaissance'], - 'neckar': ['canker', 'neckar'], - 'necrogenic': ['congeneric', 'necrogenic'], - 'necrogenous': ['congenerous', 'necrogenous'], - 'necrology': ['crenology', 'necrology'], - 'necropoles': ['necropoles', 'preconsole'], - 'necropolis': ['clinospore', 'necropolis'], - 'necrotic': ['crocetin', 'necrotic'], - 'necrotomic': ['necrotomic', 'oncometric'], - 'necrotomy': ['necrotomy', 'normocyte', 'oncometry'], - 'nectar': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'nectareal': ['lactarene', 'nectareal'], - 'nectared': ['crenated', 'decanter', 'nectared'], - 'nectareous': ['countersea', 'nectareous'], - 'nectarial': ['carnalite', 'claretian', 'lacertian', 'nectarial'], - 'nectarian': ['cratinean', 'incarnate', 'nectarian'], - 'nectaried': ['nectaried', 'tridecane'], - 'nectarine': ['inertance', 'nectarine'], - 'nectarinia': ['natricinae', 'nectarinia'], - 'nectarious': ['nectarious', 'recusation'], - 'nectarlike': ['nectarlike', 'trancelike'], - 'nectarous': ['acentrous', 'courtesan', 'nectarous'], - 'nectary': ['encraty', 'nectary'], - 'nectophore': ['ctenophore', 'nectophore'], - 'nectria': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'], - 'ned': ['den', 'end', 'ned'], - 'nedder': ['nedder', 'redden'], - 'neebor': ['boreen', 'enrobe', 'neebor', 'rebone'], - 'need': ['dene', 'eden', 'need'], - 'needer': ['endere', 'needer', 'reeden'], - 'needfire': ['needfire', 'redefine'], - 'needily': ['needily', 'yielden'], - 'needle': ['lendee', 'needle'], - 'needless': ['needless', 'seldseen'], - 'needs': ['dense', 'needs'], - 'needsome': ['modenese', 'needsome'], - 'neeger': ['neeger', 'reenge', 'renege'], - 'neeld': ['leden', 'neeld'], - 'neep': ['neep', 'peen'], - 'neepour': ['neepour', 'neurope'], - 'neer': ['erne', 'neer', 'reen'], - 'neet': ['neet', 'nete', 'teen'], - 'neetup': ['neetup', 'petune'], - 'nef': ['fen', 'nef'], - 'nefast': ['fasten', 'nefast', 'stefan'], - 'neftgil': ['felting', 'neftgil'], - 'negate': ['geneat', 'negate', 'tegean'], - 'negation': ['antigone', 'negation'], - 'negative': ['agentive', 'negative'], - 'negativism': ['negativism', 'timesaving'], - 'negator': ['negator', 'tronage'], - 'negatron': ['argenton', 'negatron'], - 'neger': ['genre', 'green', 'neger', 'reneg'], - 'neglecter': ['neglecter', 'reneglect'], - 'negritian': ['negritian', 'retaining'], - 'negrito': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'], - 'negritoid': ['negritoid', 'rodingite'], - 'negro': ['ergon', 'genro', 'goner', 'negro'], - 'negroid': ['groined', 'negroid'], - 'negroidal': ['girandole', 'negroidal'], - 'negroize': ['genizero', 'negroize'], - 'negroloid': ['gondolier', 'negroloid'], - 'negrotic': ['gerontic', 'negrotic'], - 'negundo': ['dungeon', 'negundo'], - 'negus': ['genus', 'negus'], - 'neif': ['enif', 'fine', 'neif', 'nife'], - 'neigh': ['hinge', 'neigh'], - 'neil': ['lien', 'line', 'neil', 'nile'], - 'neiper': ['neiper', 'perine', 'pirene', 'repine'], - 'neist': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'], - 'neither': ['enherit', 'etherin', 'neither', 'therein'], - 'nekkar': ['kraken', 'nekkar'], - 'nekton': ['kenton', 'nekton'], - 'nelken': ['kennel', 'nelken'], - 'nelsonite': ['nelsonite', 'solentine'], - 'nelumbian': ['nelumbian', 'unminable'], - 'nema': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'], - 'nemalite': ['melanite', 'meletian', 'metaline', 'nemalite'], - 'nematoda': ['mantodea', 'nematoda'], - 'nematoid': ['dominate', 'nematoid'], - 'nematophyton': ['nematophyton', 'tenontophyma'], - 'nemertinea': ['minnetaree', 'nemertinea'], - 'nemertini': ['intermine', 'nemertini', 'terminine'], - 'nemertoid': ['interdome', 'mordenite', 'nemertoid'], - 'nemoral': ['almoner', 'moneral', 'nemoral'], - 'nenta': ['anent', 'annet', 'nenta'], - 'neo': ['eon', 'neo', 'one'], - 'neoarctic': ['accretion', 'anorectic', 'neoarctic'], - 'neocomian': ['monoecian', 'neocomian'], - 'neocosmic': ['economics', 'neocosmic'], - 'neocyte': ['enocyte', 'neocyte'], - 'neogaea': ['eogaean', 'neogaea'], - 'neogenesis': ['neogenesis', 'noegenesis'], - 'neogenetic': ['neogenetic', 'noegenetic'], - 'neognathous': ['anthogenous', 'neognathous'], - 'neolatry': ['neolatry', 'ornately', 'tyrolean'], - 'neolithic': ['ichnolite', 'neolithic'], - 'neomiracle': ['ceremonial', 'neomiracle'], - 'neomorphic': ['microphone', 'neomorphic'], - 'neon': ['neon', 'none'], - 'neophilism': ['neophilism', 'philoneism'], - 'neophytic': ['hypnoetic', 'neophytic'], - 'neoplasm': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'], - 'neoplastic': ['neoplastic', 'pleonastic'], - 'neorama': ['neorama', 'romaean'], - 'neornithes': ['neornithes', 'rhinestone'], - 'neossin': ['neossin', 'sension'], - 'neoteric': ['erection', 'neoteric', 'nocerite', 'renotice'], - 'neoterism': ['moistener', 'neoterism'], - 'neotragus': ['argentous', 'neotragus'], - 'neotropic': ['ectropion', 'neotropic'], - 'neotropical': ['neotropical', 'percolation'], - 'neoza': ['neoza', 'ozena'], - 'nep': ['nep', 'pen'], - 'nepa': ['nape', 'neap', 'nepa', 'pane', 'pean'], - 'nepal': ['alpen', 'nepal', 'panel', 'penal', 'plane'], - 'nepali': ['alpine', 'nepali', 'penial', 'pineal'], - 'neper': ['neper', 'preen', 'repen'], - 'nepheloscope': ['nepheloscope', 'phonelescope'], - 'nephite': ['heptine', 'nephite'], - 'nephogram': ['gomphrena', 'nephogram'], - 'nephological': ['nephological', 'phenological'], - 'nephologist': ['nephologist', 'phenologist'], - 'nephology': ['nephology', 'phenology'], - 'nephria': ['heparin', 'nephria'], - 'nephric': ['nephric', 'phrenic', 'pincher'], - 'nephrite': ['nephrite', 'prehnite', 'trephine'], - 'nephritic': ['nephritic', 'phrenitic', 'prehnitic'], - 'nephritis': ['inspreith', 'nephritis', 'phrenitis'], - 'nephrocardiac': ['nephrocardiac', 'phrenocardiac'], - 'nephrocolic': ['nephrocolic', 'phrenocolic'], - 'nephrocystosis': ['cystonephrosis', 'nephrocystosis'], - 'nephrogastric': ['gastrophrenic', 'nephrogastric', 'phrenogastric'], - 'nephrohydrosis': ['hydronephrosis', 'nephrohydrosis'], - 'nephrolithotomy': ['lithonephrotomy', 'nephrolithotomy'], - 'nephrologist': ['nephrologist', 'phrenologist'], - 'nephrology': ['nephrology', 'phrenology'], - 'nephropathic': ['nephropathic', 'phrenopathic'], - 'nephropathy': ['nephropathy', 'phrenopathy'], - 'nephropsidae': ['nephropsidae', 'praesphenoid'], - 'nephroptosia': ['nephroptosia', 'prosiphonate'], - 'nephropyelitis': ['nephropyelitis', 'pyelonephritis'], - 'nephropyosis': ['nephropyosis', 'pyonephrosis'], - 'nephrosis': ['nephrosis', 'phronesis'], - 'nephrostoma': ['nephrostoma', 'strophomena'], - 'nephrotome': ['nephrotome', 'phonometer'], - 'nephrotomy': ['nephrotomy', 'phonometry'], - 'nepman': ['nepman', 'penman'], - 'nepotal': ['lepanto', 'nepotal', 'petalon', 'polenta'], - 'nepote': ['nepote', 'pontee', 'poteen'], - 'nepotic': ['entopic', 'nepotic', 'pentoic'], - 'nereid': ['denier', 'nereid'], - 'nereis': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'], - 'neri': ['neri', 'rein', 'rine'], - 'nerita': ['nerita', 'ratine', 'retain', 'retina', 'tanier'], - 'neritic': ['citrine', 'crinite', 'inciter', 'neritic'], - 'neritina': ['neritina', 'retinian'], - 'neritoid': ['neritoid', 'retinoid'], - 'nerium': ['murine', 'nerium'], - 'neroic': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'], - 'neronic': ['corinne', 'cornein', 'neronic'], - 'nerval': ['nerval', 'vernal'], - 'nervate': ['nervate', 'veteran'], - 'nervation': ['nervation', 'vernation'], - 'nerve': ['nerve', 'never'], - 'nervid': ['driven', 'nervid', 'verdin'], - 'nervine': ['innerve', 'nervine', 'vernine'], - 'nerviness': ['inverness', 'nerviness'], - 'nervish': ['nervish', 'shriven'], - 'nervulose': ['nervulose', 'unresolve', 'vulnerose'], - 'nese': ['ense', 'esne', 'nese', 'seen', 'snee'], - 'nesh': ['nesh', 'shen'], - 'nesiot': ['nesiot', 'ostein'], - 'neskhi': ['kishen', 'neskhi'], - 'neslia': ['alsine', 'neslia', 'saline', 'selina', 'silane'], - 'nest': ['nest', 'sent', 'sten'], - 'nester': ['ernest', 'nester', 'resent', 'streen'], - 'nestiatria': ['intarsiate', 'nestiatria'], - 'nestlike': ['nestlike', 'skeletin'], - 'nestor': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'], - 'net': ['net', 'ten'], - 'netcha': ['entach', 'netcha'], - 'nete': ['neet', 'nete', 'teen'], - 'neter': ['enter', 'neter', 'renet', 'terne', 'treen'], - 'netful': ['fluent', 'netful', 'unfelt', 'unleft'], - 'neth': ['hent', 'neth', 'then'], - 'nether': ['erthen', 'henter', 'nether', 'threne'], - 'neti': ['iten', 'neti', 'tien', 'tine'], - 'netman': ['manent', 'netman'], - 'netsuke': ['kuneste', 'netsuke'], - 'nettable': ['nettable', 'tentable'], - 'nettapus': ['nettapus', 'stepaunt'], - 'netted': ['detent', 'netted', 'tented'], - 'netter': ['netter', 'retent', 'tenter'], - 'nettion': ['nettion', 'tention', 'tontine'], - 'nettle': ['letten', 'nettle'], - 'nettler': ['nettler', 'ternlet'], - 'netty': ['netty', 'tenty'], - 'neurad': ['endura', 'neurad', 'undear', 'unread'], - 'neural': ['lunare', 'neural', 'ulnare', 'unreal'], - 'neuralgic': ['genicular', 'neuralgic'], - 'neuralist': ['neuralist', 'ulsterian', 'unrealist'], - 'neurectopia': ['eucatropine', 'neurectopia'], - 'neuric': ['curine', 'erucin', 'neuric'], - 'neurilema': ['lemurinae', 'neurilema'], - 'neurin': ['enruin', 'neurin', 'unrein'], - 'neurism': ['neurism', 'semiurn'], - 'neurite': ['neurite', 'retinue', 'reunite', 'uterine'], - 'neuroblast': ['neuroblast', 'unsortable'], - 'neurodermatosis': ['dermatoneurosis', 'neurodermatosis'], - 'neurofibroma': ['fibroneuroma', 'neurofibroma'], - 'neurofil': ['fluorine', 'neurofil'], - 'neuroganglion': ['ganglioneuron', 'neuroganglion'], - 'neurogenic': ['encoignure', 'neurogenic'], - 'neuroid': ['dourine', 'neuroid'], - 'neurolysis': ['neurolysis', 'resinously'], - 'neuromast': ['anoestrum', 'neuromast'], - 'neuromyelitis': ['myeloneuritis', 'neuromyelitis'], - 'neuronal': ['enaluron', 'neuronal'], - 'neurope': ['neepour', 'neurope'], - 'neuropsychological': ['neuropsychological', 'psychoneurological'], - 'neuropsychosis': ['neuropsychosis', 'psychoneurosis'], - 'neuropteris': ['interposure', 'neuropteris'], - 'neurosis': ['neurosis', 'resinous'], - 'neurotic': ['eruction', 'neurotic'], - 'neurotripsy': ['neurotripsy', 'tripyrenous'], - 'neustrian': ['neustrian', 'saturnine', 'sturninae'], - 'neuter': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'], - 'neuterly': ['neuterly', 'rutylene'], - 'neutral': ['laurent', 'neutral', 'unalert'], - 'neutralism': ['neutralism', 'trimensual'], - 'neutrally': ['neutrally', 'unalertly'], - 'neutralness': ['neutralness', 'unalertness'], - 'nevada': ['nevada', 'vedana', 'venada'], - 'neve': ['even', 'neve', 'veen'], - 'never': ['nerve', 'never'], - 'nevo': ['nevo', 'oven'], - 'nevoy': ['envoy', 'nevoy', 'yoven'], - 'nevus': ['nevus', 'venus'], - 'new': ['new', 'wen'], - 'newar': ['awner', 'newar'], - 'newari': ['newari', 'wainer'], - 'news': ['news', 'sewn', 'snew'], - 'newt': ['newt', 'went'], - 'nexus': ['nexus', 'unsex'], - 'ngai': ['gain', 'inga', 'naig', 'ngai'], - 'ngaio': ['gonia', 'ngaio', 'nogai'], - 'ngapi': ['aping', 'ngapi', 'pangi'], - 'ngoko': ['kongo', 'ngoko'], - 'ni': ['in', 'ni'], - 'niagara': ['agrania', 'angaria', 'niagara'], - 'nias': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'], - 'niata': ['anita', 'niata', 'tania'], - 'nib': ['bin', 'nib'], - 'nibs': ['nibs', 'snib'], - 'nibsome': ['nibsome', 'nimbose'], - 'nicarao': ['aaronic', 'nicarao', 'ocarina'], - 'niccolous': ['niccolous', 'occlusion'], - 'nice': ['cine', 'nice'], - 'nicene': ['cinene', 'nicene'], - 'nicenist': ['inscient', 'nicenist'], - 'nicesome': ['nicesome', 'semicone'], - 'nichael': ['chilean', 'echinal', 'nichael'], - 'niche': ['chien', 'chine', 'niche'], - 'nicher': ['enrich', 'nicher', 'richen'], - 'nicholas': ['lichanos', 'nicholas'], - 'nickel': ['nickel', 'nickle'], - 'nickle': ['nickel', 'nickle'], - 'nicol': ['colin', 'nicol'], - 'nicolas': ['nicolas', 'scaloni'], - 'nicolette': ['lecontite', 'nicolette'], - 'nicotian': ['aconitin', 'inaction', 'nicotian'], - 'nicotianin': ['nicotianin', 'nicotinian'], - 'nicotined': ['incondite', 'nicotined'], - 'nicotinian': ['nicotianin', 'nicotinian'], - 'nicotism': ['monistic', 'nicotism', 'nomistic'], - 'nicotize': ['nicotize', 'tonicize'], - 'nictate': ['nictate', 'tetanic'], - 'nictation': ['antitonic', 'nictation'], - 'nid': ['din', 'ind', 'nid'], - 'nidal': ['danli', 'ladin', 'linda', 'nidal'], - 'nidana': ['andian', 'danian', 'nidana'], - 'nidation': ['nidation', 'notidani'], - 'niddle': ['dindle', 'niddle'], - 'nide': ['dine', 'enid', 'inde', 'nide'], - 'nidge': ['deign', 'dinge', 'nidge'], - 'nidget': ['nidget', 'tinged'], - 'niding': ['dining', 'indign', 'niding'], - 'nidologist': ['indologist', 'nidologist'], - 'nidology': ['indology', 'nidology'], - 'nidularia': ['nidularia', 'uniradial'], - 'nidulate': ['nidulate', 'untailed'], - 'nidus': ['dinus', 'indus', 'nidus'], - 'niello': ['lionel', 'niello'], - 'niels': ['elsin', 'lenis', 'niels', 'silen', 'sline'], - 'nieve': ['nieve', 'venie'], - 'nieveta': ['naivete', 'nieveta'], - 'nievling': ['levining', 'nievling'], - 'nife': ['enif', 'fine', 'neif', 'nife'], - 'nifle': ['elfin', 'nifle'], - 'nig': ['gin', 'ing', 'nig'], - 'nigel': ['ingle', 'ligne', 'linge', 'nigel'], - 'nigella': ['gallein', 'galline', 'nigella'], - 'nigerian': ['arginine', 'nigerian'], - 'niggard': ['grading', 'niggard'], - 'nigger': ['ginger', 'nigger'], - 'niggery': ['gingery', 'niggery'], - 'nigh': ['hing', 'nigh'], - 'night': ['night', 'thing'], - 'nightless': ['lightness', 'nightless', 'thingless'], - 'nightlike': ['nightlike', 'thinglike'], - 'nightly': ['nightly', 'thingly'], - 'nightman': ['nightman', 'thingman'], - 'nignye': ['ginney', 'nignye'], - 'nigori': ['nigori', 'origin'], - 'nigre': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'], - 'nigrous': ['nigrous', 'rousing', 'souring'], - 'nihal': ['linha', 'nihal'], - 'nikau': ['kunai', 'nikau'], - 'nil': ['lin', 'nil'], - 'nile': ['lien', 'line', 'neil', 'nile'], - 'nilgai': ['ailing', 'angili', 'nilgai'], - 'nilometer': ['linometer', 'nilometer'], - 'niloscope': ['niloscope', 'scopoline'], - 'nilotic': ['clition', 'nilotic'], - 'nilous': ['insoul', 'linous', 'nilous', 'unsoil'], - 'nim': ['min', 'nim'], - 'nimbed': ['embind', 'nimbed'], - 'nimbose': ['nibsome', 'nimbose'], - 'nimkish': ['minkish', 'nimkish'], - 'nimshi': ['minish', 'nimshi'], - 'nina': ['nain', 'nina'], - 'ninescore': ['ninescore', 'recension'], - 'nineted': ['dentine', 'nineted'], - 'ninevite': ['ninevite', 'nivenite'], - 'ningpo': ['ningpo', 'pignon'], - 'nintu': ['nintu', 'ninut', 'untin'], - 'ninut': ['nintu', 'ninut', 'untin'], - 'niota': ['niota', 'taino'], - 'nip': ['nip', 'pin'], - 'nipa': ['nipa', 'pain', 'pani', 'pian', 'pina'], - 'nippers': ['nippers', 'snipper'], - 'nipple': ['lippen', 'nipple'], - 'nipter': ['nipter', 'terpin'], - 'nisaean': ['nisaean', 'sinaean'], - 'nisqualli': ['nisqualli', 'squillian'], - 'nisus': ['nisus', 'sinus'], - 'nit': ['nit', 'tin'], - 'nitch': ['chint', 'nitch'], - 'nitella': ['nitella', 'tellina'], - 'nitently': ['intently', 'nitently'], - 'niter': ['inert', 'inter', 'niter', 'retin', 'trine'], - 'nitered': ['nitered', 'redient', 'teinder'], - 'nither': ['hinter', 'nither', 'theirn'], - 'nito': ['into', 'nito', 'oint', 'tino'], - 'niton': ['niton', 'noint'], - 'nitrate': ['intreat', 'iterant', 'nitrate', 'tertian'], - 'nitratine': ['itinerant', 'nitratine'], - 'nitric': ['citrin', 'nitric'], - 'nitride': ['inditer', 'nitride'], - 'nitrifaction': ['antifriction', 'nitrifaction'], - 'nitriot': ['introit', 'nitriot'], - 'nitrobenzol': ['benzonitrol', 'nitrobenzol'], - 'nitrogelatin': ['intolerating', 'nitrogelatin'], - 'nitrosate': ['nitrosate', 'stationer'], - 'nitrous': ['nitrous', 'trusion'], - 'nitter': ['nitter', 'tinter'], - 'nitty': ['nitty', 'tinty'], - 'niue': ['niue', 'unie'], - 'nival': ['alvin', 'anvil', 'nival', 'vinal'], - 'nivenite': ['ninevite', 'nivenite'], - 'niveous': ['envious', 'niveous', 'veinous'], - 'nivosity': ['nivosity', 'vinosity'], - 'nizam': ['nazim', 'nizam'], - 'no': ['no', 'on'], - 'noa': ['noa', 'ona'], - 'noachite': ['inchoate', 'noachite'], - 'noah': ['hano', 'noah'], - 'noahic': ['chinoa', 'noahic'], - 'noam': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'], - 'nob': ['bon', 'nob'], - 'nobleman': ['blennoma', 'nobleman'], - 'noblesse': ['boneless', 'noblesse'], - 'nobs': ['bosn', 'nobs', 'snob'], - 'nocardia': ['nocardia', 'orcadian'], - 'nocent': ['nocent', 'nocten'], - 'nocerite': ['erection', 'neoteric', 'nocerite', 'renotice'], - 'nock': ['conk', 'nock'], - 'nocten': ['nocent', 'nocten'], - 'noctiluca': ['ciclatoun', 'noctiluca'], - 'noctuid': ['conduit', 'duction', 'noctuid'], - 'noctuidae': ['coadunite', 'education', 'noctuidae'], - 'nocturia': ['curation', 'nocturia'], - 'nod': ['don', 'nod'], - 'nodal': ['donal', 'nodal'], - 'nodated': ['donated', 'nodated'], - 'node': ['done', 'node'], - 'nodi': ['dion', 'nodi', 'odin'], - 'nodiak': ['daikon', 'nodiak'], - 'nodical': ['dolcian', 'nodical'], - 'nodicorn': ['corindon', 'nodicorn'], - 'nodule': ['louden', 'nodule'], - 'nodus': ['nodus', 'ounds', 'sound'], - 'noegenesis': ['neogenesis', 'noegenesis'], - 'noegenetic': ['neogenetic', 'noegenetic'], - 'noel': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'], - 'noetic': ['eciton', 'noetic', 'notice', 'octine'], - 'noetics': ['contise', 'noetics', 'section'], - 'nog': ['gon', 'nog'], - 'nogai': ['gonia', 'ngaio', 'nogai'], - 'nogal': ['along', 'gonal', 'lango', 'longa', 'nogal'], - 'noil': ['lino', 'lion', 'loin', 'noil'], - 'noilage': ['goniale', 'noilage'], - 'noiler': ['elinor', 'lienor', 'lorien', 'noiler'], - 'noint': ['niton', 'noint'], - 'noir': ['inro', 'iron', 'noir', 'nori'], - 'noise': ['eosin', 'noise'], - 'noiseless': ['noiseless', 'selenosis'], - 'noisette': ['noisette', 'teosinte'], - 'nolo': ['loon', 'nolo'], - 'noma': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'], - 'nomad': ['damon', 'monad', 'nomad'], - 'nomadian': ['monadina', 'nomadian'], - 'nomadic': ['monadic', 'nomadic'], - 'nomadical': ['monadical', 'nomadical'], - 'nomadically': ['monadically', 'nomadically'], - 'nomadism': ['monadism', 'nomadism'], - 'nomarch': ['monarch', 'nomarch', 'onmarch'], - 'nomarchy': ['monarchy', 'nomarchy'], - 'nome': ['mone', 'nome', 'omen'], - 'nomeus': ['nomeus', 'unsome'], - 'nomial': ['monial', 'nomial', 'oilman'], - 'nomina': ['amnion', 'minoan', 'nomina'], - 'nominate': ['antinome', 'nominate'], - 'nominated': ['dentinoma', 'nominated'], - 'nominature': ['nominature', 'numeration'], - 'nomism': ['monism', 'nomism', 'simmon'], - 'nomismata': ['anatomism', 'nomismata'], - 'nomistic': ['monistic', 'nicotism', 'nomistic'], - 'nomocracy': ['monocracy', 'nomocracy'], - 'nomogenist': ['monogenist', 'nomogenist'], - 'nomogenous': ['monogenous', 'nomogenous'], - 'nomogeny': ['monogeny', 'nomogeny'], - 'nomogram': ['monogram', 'nomogram'], - 'nomograph': ['monograph', 'nomograph', 'phonogram'], - 'nomographer': ['geranomorph', 'monographer', 'nomographer'], - 'nomographic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'], - 'nomographical': ['gramophonical', 'monographical', 'nomographical'], - 'nomographically': ['gramophonically', - 'monographically', - 'nomographically', - 'phonogramically'], - 'nomography': ['monography', 'nomography'], - 'nomological': ['monological', 'nomological'], - 'nomologist': ['monologist', 'nomologist', 'ontologism'], - 'nomology': ['monology', 'nomology'], - 'nomophyllous': ['monophyllous', 'nomophyllous'], - 'nomotheism': ['monotheism', 'nomotheism'], - 'nomothetic': ['monothetic', 'nomothetic'], - 'nona': ['anon', 'nona', 'onan'], - 'nonaccession': ['connoissance', 'nonaccession'], - 'nonact': ['cannot', 'canton', 'conant', 'nonact'], - 'nonaction': ['connation', 'nonaction'], - 'nonagent': ['nonagent', 'tannogen'], - 'nonaid': ['adonin', 'nanoid', 'nonaid'], - 'nonaltruistic': ['instructional', 'nonaltruistic'], - 'nonanimal': ['nonanimal', 'nonmanila'], - 'nonbilabiate': ['inobtainable', 'nonbilabiate'], - 'noncaste': ['noncaste', 'tsonecan'], - 'noncereal': ['aleconner', 'noncereal'], - 'noncertified': ['noncertified', 'nonrectified'], - 'nonclaim': ['cinnamol', 'nonclaim'], - 'noncreation': ['noncreation', 'nonreaction'], - 'noncreative': ['noncreative', 'nonreactive'], - 'noncurantist': ['noncurantist', 'unconstraint'], - 'nonda': ['donna', 'nonda'], - 'nondesecration': ['nondesecration', 'recondensation'], - 'none': ['neon', 'none'], - 'nonempirical': ['nonempirical', 'prenominical'], - 'nonerudite': ['nonerudite', 'unoriented'], - 'nonesuch': ['nonesuch', 'unchosen'], - 'nonet': ['nonet', 'tenon'], - 'nonfertile': ['florentine', 'nonfertile'], - 'nongeometrical': ['inconglomerate', 'nongeometrical'], - 'nonglare': ['algernon', 'nonglare'], - 'nongod': ['dongon', 'nongod'], - 'nonhepatic': ['nonhepatic', 'pantheonic'], - 'nonic': ['conin', 'nonic', 'oncin'], - 'nonideal': ['anneloid', 'nonideal'], - 'nonidealist': ['alstonidine', 'nonidealist'], - 'nonirate': ['anointer', 'inornate', 'nonirate', 'reanoint'], - 'nonius': ['nonius', 'unison'], - 'nonlegato': ['nonlegato', 'ontogenal'], - 'nonlegume': ['melungeon', 'nonlegume'], - 'nonliable': ['bellonian', 'nonliable'], - 'nonlicet': ['contline', 'nonlicet'], - 'nonly': ['nonly', 'nonyl', 'nylon'], - 'nonmanila': ['nonanimal', 'nonmanila'], - 'nonmarital': ['antinormal', 'nonmarital', 'nonmartial'], - 'nonmartial': ['antinormal', 'nonmarital', 'nonmartial'], - 'nonmatter': ['nonmatter', 'remontant'], - 'nonmetric': ['comintern', 'nonmetric'], - 'nonmetrical': ['centinormal', 'conterminal', 'nonmetrical'], - 'nonmolar': ['nonmolar', 'nonmoral'], - 'nonmoral': ['nonmolar', 'nonmoral'], - 'nonnat': ['nonnat', 'nontan'], - 'nonoriental': ['nonoriental', 'nonrelation'], - 'nonpaid': ['dipnoan', 'nonpaid', 'pandion'], - 'nonpar': ['napron', 'nonpar'], - 'nonparental': ['nonparental', 'nonpaternal'], - 'nonpaternal': ['nonparental', 'nonpaternal'], - 'nonpearlitic': ['nonpearlitic', 'pratincoline'], - 'nonpenal': ['nonpenal', 'nonplane'], - 'nonplane': ['nonpenal', 'nonplane'], - 'nonracial': ['carniolan', 'nonracial'], - 'nonrated': ['nonrated', 'nontrade'], - 'nonreaction': ['noncreation', 'nonreaction'], - 'nonreactive': ['noncreative', 'nonreactive'], - 'nonrebel': ['ennobler', 'nonrebel'], - 'nonrecital': ['interconal', 'nonrecital'], - 'nonrectified': ['noncertified', 'nonrectified'], - 'nonrelation': ['nonoriental', 'nonrelation'], - 'nonreserve': ['nonreserve', 'nonreverse'], - 'nonreverse': ['nonreserve', 'nonreverse'], - 'nonrigid': ['girondin', 'nonrigid'], - 'nonsanction': ['inconsonant', 'nonsanction'], - 'nonscientist': ['inconsistent', 'nonscientist'], - 'nonsecret': ['consenter', 'nonsecret', 'reconsent'], - 'nontan': ['nonnat', 'nontan'], - 'nontrade': ['nonrated', 'nontrade'], - 'nonunited': ['nonunited', 'unintoned'], - 'nonuse': ['nonuse', 'unnose'], - 'nonvaginal': ['nonvaginal', 'novanglian'], - 'nonvisitation': ['innovationist', 'nonvisitation'], - 'nonya': ['annoy', 'nonya'], - 'nonyl': ['nonly', 'nonyl', 'nylon'], - 'nooking': ['kongoni', 'nooking'], - 'noontide': ['noontide', 'notioned'], - 'noontime': ['entomion', 'noontime'], - 'noop': ['noop', 'poon'], - 'noose': ['noose', 'osone'], - 'nooser': ['nooser', 'seroon', 'sooner'], - 'nopal': ['lapon', 'nopal'], - 'nope': ['nope', 'open', 'peon', 'pone'], - 'nor': ['nor', 'ron'], - 'nora': ['nora', 'orna', 'roan'], - 'norah': ['nahor', 'norah', 'rohan'], - 'norate': ['atoner', 'norate', 'ornate'], - 'noration': ['noration', 'ornation', 'orotinan'], - 'nordic': ['dornic', 'nordic'], - 'nordicity': ['nordicity', 'tyrocidin'], - 'noreast': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'], - 'nori': ['inro', 'iron', 'noir', 'nori'], - 'noria': ['arion', 'noria'], - 'noric': ['corin', 'noric', 'orcin'], - 'norie': ['irone', 'norie'], - 'norite': ['norite', 'orient'], - 'norm': ['morn', 'norm'], - 'norma': ['manor', 'moran', 'norma', 'ramon', 'roman'], - 'normality': ['normality', 'trionymal'], - 'normated': ['moderant', 'normated'], - 'normless': ['mornless', 'normless'], - 'normocyte': ['necrotomy', 'normocyte', 'oncometry'], - 'norse': ['norse', 'noser', 'seron', 'snore'], - 'norsk': ['norsk', 'snork'], - 'north': ['north', 'thorn'], - 'norther': ['horrent', 'norther'], - 'northing': ['inthrong', 'northing'], - 'nosairi': ['nosairi', 'osirian'], - 'nose': ['enos', 'nose'], - 'nosean': ['nosean', 'oannes'], - 'noseless': ['noseless', 'soleness'], - 'noselite': ['noselite', 'solenite'], - 'nosema': ['monase', 'nosema'], - 'noser': ['norse', 'noser', 'seron', 'snore'], - 'nosesmart': ['nosesmart', 'storesman'], - 'nosism': ['nosism', 'simson'], - 'nosomania': ['nanosomia', 'nosomania'], - 'nostalgia': ['analogist', 'nostalgia'], - 'nostalgic': ['gnostical', 'nostalgic'], - 'nostic': ['nostic', 'sintoc', 'tocsin'], - 'nostoc': ['nostoc', 'oncost'], - 'nosu': ['nosu', 'nous', 'onus'], - 'not': ['not', 'ton'], - 'notability': ['bitonality', 'notability'], - 'notaeal': ['anatole', 'notaeal'], - 'notaeum': ['notaeum', 'outname'], - 'notal': ['notal', 'ontal', 'talon', 'tolan', 'tonal'], - 'notalgia': ['galtonia', 'notalgia'], - 'notalia': ['ailanto', 'alation', 'laotian', 'notalia'], - 'notan': ['anton', 'notan', 'tonna'], - 'notarial': ['notarial', 'rational', 'rotalian'], - 'notarially': ['notarially', 'rationally'], - 'notariate': ['notariate', 'rationate'], - 'notation': ['notation', 'tonation'], - 'notator': ['arnotto', 'notator'], - 'notcher': ['chorten', 'notcher'], - 'note': ['note', 'tone'], - 'noted': ['donet', 'noted', 'toned'], - 'notehead': ['headnote', 'notehead'], - 'noteless': ['noteless', 'toneless'], - 'notelessly': ['notelessly', 'tonelessly'], - 'notelessness': ['notelessness', 'tonelessness'], - 'noter': ['noter', 'tenor', 'toner', 'trone'], - 'nother': ['hornet', 'nother', 'theron', 'throne'], - 'nothous': ['hontous', 'nothous'], - 'notice': ['eciton', 'noetic', 'notice', 'octine'], - 'noticer': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'], - 'notidani': ['nidation', 'notidani'], - 'notify': ['notify', 'tonify'], - 'notioned': ['noontide', 'notioned'], - 'notochordal': ['chordotonal', 'notochordal'], - 'notopterus': ['notopterus', 'portentous'], - 'notorhizal': ['horizontal', 'notorhizal'], - 'nototrema': ['antrotome', 'nototrema'], - 'notour': ['notour', 'unroot'], - 'notropis': ['notropis', 'positron', 'sorption'], - 'notum': ['montu', 'mount', 'notum'], - 'notus': ['notus', 'snout', 'stoun', 'tonus'], - 'nought': ['hognut', 'nought'], - 'noup': ['noup', 'puno', 'upon'], - 'nourisher': ['nourisher', 'renourish'], - 'nous': ['nosu', 'nous', 'onus'], - 'novalia': ['novalia', 'valonia'], - 'novanglian': ['nonvaginal', 'novanglian'], - 'novem': ['novem', 'venom'], - 'novitiate': ['evitation', 'novitiate'], - 'now': ['now', 'own', 'won'], - 'nowanights': ['nowanights', 'washington'], - 'nowed': ['endow', 'nowed'], - 'nowhere': ['nowhere', 'whereon'], - 'nowise': ['nowise', 'snowie'], - 'nowness': ['nowness', 'ownness'], - 'nowt': ['nowt', 'town', 'wont'], - 'noxa': ['axon', 'noxa', 'oxan'], - 'noy': ['noy', 'yon'], - 'nozi': ['nozi', 'zion'], - 'nu': ['nu', 'un'], - 'nub': ['bun', 'nub'], - 'nuba': ['baun', 'buna', 'nabu', 'nuba'], - 'nubian': ['nubian', 'unbain'], - 'nubilate': ['antiblue', 'nubilate'], - 'nubile': ['nubile', 'unible'], - 'nucal': ['lucan', 'nucal'], - 'nucellar': ['lucernal', 'nucellar', 'uncellar'], - 'nuchal': ['chulan', 'launch', 'nuchal'], - 'nuciferous': ['nuciferous', 'unciferous'], - 'nuciform': ['nuciform', 'unciform'], - 'nuclear': ['crenula', 'lucarne', 'nuclear', 'unclear'], - 'nucleator': ['nucleator', 'recountal'], - 'nucleoid': ['nucleoid', 'uncoiled'], - 'nuclide': ['include', 'nuclide'], - 'nuculid': ['nuculid', 'unlucid'], - 'nuculidae': ['duculinae', 'nuculidae'], - 'nudate': ['nudate', 'undate'], - 'nuddle': ['ludden', 'nuddle'], - 'nude': ['dune', 'nude', 'unde'], - 'nudeness': ['nudeness', 'unsensed'], - 'nudger': ['dunger', 'gerund', 'greund', 'nudger'], - 'nudist': ['dustin', 'nudist'], - 'nudity': ['nudity', 'untidy'], - 'nuisancer': ['insurance', 'nuisancer'], - 'numa': ['maun', 'numa'], - 'numberer': ['numberer', 'renumber'], - 'numda': ['maund', 'munda', 'numda', 'undam', 'unmad'], - 'numeration': ['nominature', 'numeration'], - 'numerical': ['ceruminal', 'melanuric', 'numerical'], - 'numerist': ['numerist', 'terminus'], - 'numida': ['numida', 'unmaid'], - 'numidae': ['numidae', 'unaimed'], - 'nummi': ['mnium', 'nummi'], - 'nunciate': ['nunciate', 'uncinate'], - 'nuncio': ['nuncio', 'uncoin'], - 'nuncioship': ['nuncioship', 'pincushion'], - 'nunki': ['nunki', 'unkin'], - 'nunlet': ['nunlet', 'tunnel', 'unlent'], - 'nunlike': ['nunlike', 'unliken'], - 'nunnated': ['nunnated', 'untanned'], - 'nunni': ['nunni', 'uninn'], - 'nuptial': ['nuptial', 'unplait'], - 'nurse': ['nurse', 'resun'], - 'nusfiah': ['faunish', 'nusfiah'], - 'nut': ['nut', 'tun'], - 'nutarian': ['nutarian', 'turanian'], - 'nutate': ['attune', 'nutate', 'tauten'], - 'nutgall': ['gallnut', 'nutgall'], - 'nuthatch': ['nuthatch', 'unthatch'], - 'nutlike': ['nutlike', 'tunlike'], - 'nutmeg': ['gnetum', 'nutmeg'], - 'nutramin': ['nutramin', 'ruminant'], - 'nutrice': ['nutrice', 'teucrin'], - 'nycteridae': ['encyrtidae', 'nycteridae'], - 'nycterine': ['nycterine', 'renitency'], - 'nycteris': ['nycteris', 'stycerin'], - 'nycturia': ['nycturia', 'tunicary'], - 'nye': ['eyn', 'nye', 'yen'], - 'nylast': ['nylast', 'stanly'], - 'nylon': ['nonly', 'nonyl', 'nylon'], - 'nymphalidae': ['lymphadenia', 'nymphalidae'], - 'nyroca': ['canroy', 'crayon', 'cyrano', 'nyroca'], - 'nystagmic': ['gymnastic', 'nystagmic'], - 'oak': ['ako', 'koa', 'oak', 'oka'], - 'oaky': ['kayo', 'oaky'], - 'oam': ['mao', 'oam'], - 'oannes': ['nosean', 'oannes'], - 'oar': ['aro', 'oar', 'ora'], - 'oared': ['adore', 'oared', 'oread'], - 'oaric': ['cairo', 'oaric'], - 'oaritis': ['isotria', 'oaritis'], - 'oarium': ['mariou', 'oarium'], - 'oarless': ['lassoer', 'oarless', 'rosales'], - 'oarman': ['oarman', 'ramona'], - 'oasal': ['alosa', 'loasa', 'oasal'], - 'oasis': ['oasis', 'sosia'], - 'oast': ['oast', 'stoa', 'taos'], - 'oat': ['oat', 'tao', 'toa'], - 'oatbin': ['batino', 'oatbin', 'obtain'], - 'oaten': ['atone', 'oaten'], - 'oatlike': ['keitloa', 'oatlike'], - 'obclude': ['becloud', 'obclude'], - 'obeah': ['bahoe', 'bohea', 'obeah'], - 'obeisant': ['obeisant', 'sabotine'], - 'obelial': ['bolelia', 'lobelia', 'obelial'], - 'obeliscal': ['escobilla', 'obeliscal'], - 'obelus': ['besoul', 'blouse', 'obelus'], - 'oberon': ['borneo', 'oberon'], - 'obi': ['ibo', 'obi'], - 'obispo': ['boopis', 'obispo'], - 'obit': ['bito', 'obit'], - 'objectative': ['objectative', 'objectivate'], - 'objectivate': ['objectative', 'objectivate'], - 'oblate': ['lobate', 'oblate'], - 'oblately': ['lobately', 'oblately'], - 'oblation': ['boltonia', 'lobation', 'oblation'], - 'obligant': ['bloating', 'obligant'], - 'obliviality': ['obliviality', 'violability'], - 'obol': ['bolo', 'bool', 'lobo', 'obol'], - 'obscurant': ['obscurant', 'subcantor'], - 'obscurantic': ['obscurantic', 'subnarcotic'], - 'obscurantist': ['obscurantist', 'substraction'], - 'obscure': ['bescour', 'buceros', 'obscure'], - 'obscurer': ['crebrous', 'obscurer'], - 'obsecrate': ['bracteose', 'obsecrate'], - 'observe': ['observe', 'obverse', 'verbose'], - 'obsessor': ['berossos', 'obsessor'], - 'obstinate': ['bastionet', 'obstinate'], - 'obtain': ['batino', 'oatbin', 'obtain'], - 'obtainal': ['ablation', 'obtainal'], - 'obtainer': ['abrotine', 'baritone', 'obtainer', 'reobtain'], - 'obtrude': ['doubter', 'obtrude', 'outbred', 'redoubt'], - 'obtruncation': ['conturbation', 'obtruncation'], - 'obturate': ['obturate', 'tabouret'], - 'obverse': ['observe', 'obverse', 'verbose'], - 'obversely': ['obversely', 'verbosely'], - 'ocarina': ['aaronic', 'nicarao', 'ocarina'], - 'occasioner': ['occasioner', 'reoccasion'], - 'occipitofrontal': ['frontooccipital', 'occipitofrontal'], - 'occipitotemporal': ['occipitotemporal', 'temporooccipital'], - 'occlusion': ['niccolous', 'occlusion'], - 'occurrent': ['cocurrent', 'occurrent', 'uncorrect'], - 'ocean': ['acone', 'canoe', 'ocean'], - 'oceanet': ['acetone', 'oceanet'], - 'oceanic': ['cocaine', 'oceanic'], - 'ocellar': ['collare', 'corella', 'ocellar'], - 'ocellate': ['collatee', 'ocellate'], - 'ocellated': ['decollate', 'ocellated'], - 'ocelli': ['collie', 'ocelli'], - 'och': ['cho', 'och'], - 'ocher': ['chore', 'ocher'], - 'ocherous': ['ocherous', 'ochreous'], - 'ochidore': ['choreoid', 'ochidore'], - 'ochlesis': ['helcosis', 'ochlesis'], - 'ochlesitic': ['cochleitis', 'ochlesitic'], - 'ochletic': ['helcotic', 'lochetic', 'ochletic'], - 'ochlocrat': ['colcothar', 'ochlocrat'], - 'ochrea': ['chorea', 'ochrea', 'rochea'], - 'ochreous': ['ocherous', 'ochreous'], - 'ochroid': ['choroid', 'ochroid'], - 'ochroma': ['amchoor', 'ochroma'], - 'ocht': ['coth', 'ocht'], - 'ocque': ['coque', 'ocque'], - 'ocreated': ['decorate', 'ocreated'], - 'octadic': ['cactoid', 'octadic'], - 'octaeteric': ['ecorticate', 'octaeteric'], - 'octakishexahedron': ['hexakisoctahedron', 'octakishexahedron'], - 'octan': ['acton', 'canto', 'octan'], - 'octandrian': ['dracontian', 'octandrian'], - 'octarius': ['cotarius', 'octarius', 'suctoria'], - 'octastrophic': ['octastrophic', 'postthoracic'], - 'octave': ['avocet', 'octave', 'vocate'], - 'octavian': ['octavian', 'octavina', 'vacation'], - 'octavina': ['octavian', 'octavina', 'vacation'], - 'octenary': ['enactory', 'octenary'], - 'octet': ['cotte', 'octet'], - 'octillion': ['cotillion', 'octillion'], - 'octine': ['eciton', 'noetic', 'notice', 'octine'], - 'octometer': ['octometer', 'rectotome', 'tocometer'], - 'octonal': ['coolant', 'octonal'], - 'octonare': ['coronate', 'octonare', 'otocrane'], - 'octonarius': ['acutorsion', 'octonarius'], - 'octoroon': ['coonroot', 'octoroon'], - 'octuple': ['couplet', 'octuple'], - 'ocularist': ['ocularist', 'suctorial'], - 'oculate': ['caulote', 'colutea', 'oculate'], - 'oculinid': ['lucinoid', 'oculinid'], - 'ocypete': ['ecotype', 'ocypete'], - 'od': ['do', 'od'], - 'oda': ['ado', 'dao', 'oda'], - 'odal': ['alod', 'dola', 'load', 'odal'], - 'odalman': ['mandola', 'odalman'], - 'odax': ['doxa', 'odax'], - 'odd': ['dod', 'odd'], - 'oddman': ['dodman', 'oddman'], - 'ode': ['doe', 'edo', 'ode'], - 'odel': ['dole', 'elod', 'lode', 'odel'], - 'odin': ['dion', 'nodi', 'odin'], - 'odinism': ['diosmin', 'odinism'], - 'odinite': ['edition', 'odinite', 'otidine', 'tineoid'], - 'odiometer': ['meteoroid', 'odiometer'], - 'odious': ['iodous', 'odious'], - 'odor': ['door', 'odor', 'oord', 'rood'], - 'odorant': ['donator', 'odorant', 'tornado'], - 'odored': ['doored', 'odored'], - 'odorless': ['doorless', 'odorless'], - 'ods': ['dos', 'ods', 'sod'], - 'odum': ['doum', 'moud', 'odum'], - 'odyl': ['loyd', 'odyl'], - 'odylist': ['odylist', 'styloid'], - 'oecanthus': ['ceanothus', 'oecanthus'], - 'oecist': ['cotise', 'oecist'], - 'oedipal': ['elapoid', 'oedipal'], - 'oenin': ['inone', 'oenin'], - 'oenocarpus': ['oenocarpus', 'uranoscope'], - 'oer': ['oer', 'ore', 'roe'], - 'oes': ['oes', 'ose', 'soe'], - 'oestrian': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'], - 'oestrid': ['oestrid', 'steroid', 'storied'], - 'oestridae': ['oestridae', 'ostreidae', 'sorediate'], - 'oestrin': ['oestrin', 'tersion'], - 'oestriol': ['oestriol', 'rosolite'], - 'oestroid': ['oestroid', 'ordosite', 'ostreoid'], - 'oestrual': ['oestrual', 'rosulate'], - 'oestrum': ['oestrum', 'rosetum'], - 'oestrus': ['estrous', 'oestrus', 'sestuor', 'tussore'], - 'of': ['fo', 'of'], - 'ofer': ['fore', 'froe', 'ofer'], - 'offcast': ['castoff', 'offcast'], - 'offcut': ['cutoff', 'offcut'], - 'offender': ['offender', 'reoffend'], - 'offerer': ['offerer', 'reoffer'], - 'offlet': ['letoff', 'offlet'], - 'offset': ['offset', 'setoff'], - 'offuscate': ['offuscate', 'suffocate'], - 'offuscation': ['offuscation', 'suffocation'], - 'offward': ['drawoff', 'offward'], - 'ofo': ['foo', 'ofo'], - 'oft': ['fot', 'oft'], - 'oftens': ['oftens', 'soften'], - 'ofter': ['fetor', 'forte', 'ofter'], - 'oftly': ['lofty', 'oftly'], - 'og': ['go', 'og'], - 'ogam': ['goma', 'ogam'], - 'ogeed': ['geode', 'ogeed'], - 'ogle': ['egol', 'goel', 'loge', 'ogle', 'oleg'], - 'ogler': ['glore', 'ogler'], - 'ogpu': ['goup', 'ogpu', 'upgo'], - 'ogre': ['goer', 'gore', 'ogre'], - 'ogreism': ['ergoism', 'ogreism'], - 'ogtiern': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'], - 'oh': ['ho', 'oh'], - 'ohm': ['mho', 'ohm'], - 'ohmage': ['homage', 'ohmage'], - 'ohmmeter': ['mhometer', 'ohmmeter'], - 'oilcan': ['alnico', 'cliona', 'oilcan'], - 'oilcup': ['oilcup', 'upcoil'], - 'oildom': ['moloid', 'oildom'], - 'oiler': ['oiler', 'oriel', 'reoil'], - 'oillet': ['elliot', 'oillet'], - 'oilman': ['monial', 'nomial', 'oilman'], - 'oilstone': ['leonotis', 'oilstone'], - 'oime': ['meio', 'oime'], - 'oinomania': ['oinomania', 'oniomania'], - 'oint': ['into', 'nito', 'oint', 'tino'], - 'oireachtas': ['oireachtas', 'theocrasia'], - 'ok': ['ko', 'ok'], - 'oka': ['ako', 'koa', 'oak', 'oka'], - 'oket': ['keto', 'oket', 'toke'], - 'oki': ['koi', 'oki'], - 'okie': ['ekoi', 'okie'], - 'okra': ['karo', 'kora', 'okra', 'roka'], - 'olaf': ['foal', 'loaf', 'olaf'], - 'olam': ['loam', 'loma', 'malo', 'mola', 'olam'], - 'olamic': ['colima', 'olamic'], - 'olcha': ['chola', 'loach', 'olcha'], - 'olchi': ['choil', 'choli', 'olchi'], - 'old': ['dol', 'lod', 'old'], - 'older': ['lored', 'older'], - 'oldhamite': ['ethmoidal', 'oldhamite'], - 'ole': ['leo', 'ole'], - 'olea': ['aloe', 'olea'], - 'olecranal': ['lanceolar', 'olecranal'], - 'olecranoid': ['lecanoroid', 'olecranoid'], - 'olecranon': ['encoronal', 'olecranon'], - 'olefin': ['enfoil', 'olefin'], - 'oleg': ['egol', 'goel', 'loge', 'ogle', 'oleg'], - 'olein': ['enoil', 'ileon', 'olein'], - 'olena': ['alone', 'anole', 'olena'], - 'olenid': ['doline', 'indole', 'leonid', 'loined', 'olenid'], - 'olent': ['lento', 'olent'], - 'olenus': ['ensoul', 'olenus', 'unsole'], - 'oleosity': ['oleosity', 'otiosely'], - 'olga': ['gaol', 'goal', 'gola', 'olga'], - 'oliban': ['albino', 'albion', 'alboin', 'oliban'], - 'olibanum': ['olibanum', 'umbonial'], - 'olid': ['dilo', 'diol', 'doli', 'idol', 'olid'], - 'oligoclase': ['oligoclase', 'sociolegal'], - 'oligomyoid': ['idiomology', 'oligomyoid'], - 'oligonephria': ['oligonephria', 'oligophrenia'], - 'oligonephric': ['oligonephric', 'oligophrenic'], - 'oligophrenia': ['oligonephria', 'oligophrenia'], - 'oligophrenic': ['oligonephric', 'oligophrenic'], - 'oliprance': ['oliprance', 'porcelain'], - 'oliva': ['oliva', 'viola'], - 'olivaceous': ['olivaceous', 'violaceous'], - 'olive': ['olive', 'ovile', 'voile'], - 'olived': ['livedo', 'olived'], - 'oliver': ['oliver', 'violer', 'virole'], - 'olivescent': ['olivescent', 'violescent'], - 'olivet': ['olivet', 'violet'], - 'olivetan': ['olivetan', 'velation'], - 'olivette': ['olivette', 'violette'], - 'olivine': ['olivine', 'violine'], - 'olla': ['lalo', 'lola', 'olla'], - 'olof': ['fool', 'loof', 'olof'], - 'olonets': ['enstool', 'olonets'], - 'olor': ['loro', 'olor', 'orlo', 'rool'], - 'olpe': ['lope', 'olpe', 'pole'], - 'olson': ['olson', 'solon'], - 'olympian': ['olympian', 'polymnia'], - 'om': ['mo', 'om'], - 'omaha': ['haoma', 'omaha'], - 'oman': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'], - 'omani': ['amino', 'inoma', 'naomi', 'omani', 'omina'], - 'omar': ['amor', 'maro', 'mora', 'omar', 'roam'], - 'omasitis': ['amitosis', 'omasitis'], - 'omber': ['brome', 'omber'], - 'omelet': ['omelet', 'telome'], - 'omen': ['mone', 'nome', 'omen'], - 'omened': ['endome', 'omened'], - 'omental': ['omental', 'telamon'], - 'omentotomy': ['entomotomy', 'omentotomy'], - 'omer': ['mero', 'more', 'omer', 'rome'], - 'omicron': ['moronic', 'omicron'], - 'omina': ['amino', 'inoma', 'naomi', 'omani', 'omina'], - 'ominous': ['mousoni', 'ominous'], - 'omit': ['itmo', 'moit', 'omit', 'timo'], - 'omitis': ['itoism', 'omitis'], - 'omniana': ['nanaimo', 'omniana'], - 'omniarch': ['choirman', 'harmonic', 'omniarch'], - 'omnigerent': ['ignorement', 'omnigerent'], - 'omnilegent': ['eloignment', 'omnilegent'], - 'omnimeter': ['minometer', 'omnimeter'], - 'omnimodous': ['monosodium', 'omnimodous', 'onosmodium'], - 'omnist': ['inmost', 'monist', 'omnist'], - 'omnitenent': ['intonement', 'omnitenent'], - 'omphalogenous': ['megalophonous', 'omphalogenous'], - 'on': ['no', 'on'], - 'ona': ['noa', 'ona'], - 'onager': ['onager', 'orange'], - 'onagra': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'], - 'onan': ['anon', 'nona', 'onan'], - 'onanism': ['mansion', 'onanism'], - 'onanistic': ['anconitis', 'antiscion', 'onanistic'], - 'onca': ['coan', 'onca'], - 'once': ['cone', 'once'], - 'oncetta': ['oncetta', 'tectona'], - 'onchidiidae': ['chionididae', 'onchidiidae'], - 'oncia': ['acoin', 'oncia'], - 'oncidium': ['conidium', 'mucinoid', 'oncidium'], - 'oncin': ['conin', 'nonic', 'oncin'], - 'oncometric': ['necrotomic', 'oncometric'], - 'oncometry': ['necrotomy', 'normocyte', 'oncometry'], - 'oncoming': ['gnomonic', 'oncoming'], - 'oncosimeter': ['oncosimeter', 'semicoronet'], - 'oncost': ['nostoc', 'oncost'], - 'ondagram': ['dragoman', 'garamond', 'ondagram'], - 'ondameter': ['emendator', 'ondameter'], - 'ondatra': ['adorant', 'ondatra'], - 'ondine': ['donnie', 'indone', 'ondine'], - 'ondy': ['ondy', 'yond'], - 'one': ['eon', 'neo', 'one'], - 'oneida': ['daoine', 'oneida'], - 'oneiric': ['ironice', 'oneiric'], - 'oneism': ['eonism', 'mesion', 'oneism', 'simeon'], - 'oneness': ['oneness', 'senones'], - 'oner': ['oner', 'rone'], - 'onery': ['eryon', 'onery'], - 'oniomania': ['oinomania', 'oniomania'], - 'oniomaniac': ['iconomania', 'oniomaniac'], - 'oniscidae': ['oniscidae', 'oscinidae', 'sciaenoid'], - 'onisciform': ['onisciform', 'somnorific'], - 'oniscoidea': ['iodocasein', 'oniscoidea'], - 'onkos': ['onkos', 'snook'], - 'onlepy': ['onlepy', 'openly'], - 'onliest': ['leonist', 'onliest'], - 'only': ['lyon', 'only'], - 'onmarch': ['monarch', 'nomarch', 'onmarch'], - 'onosmodium': ['monosodium', 'omnimodous', 'onosmodium'], - 'ons': ['ons', 'son'], - 'onset': ['onset', 'seton', 'steno', 'stone'], - 'onshore': ['onshore', 'sorehon'], - 'onside': ['deinos', 'donsie', 'inodes', 'onside'], - 'onsight': ['hosting', 'onsight'], - 'ontal': ['notal', 'ontal', 'talon', 'tolan', 'tonal'], - 'ontaric': ['anticor', 'carotin', 'cortina', 'ontaric'], - 'onto': ['onto', 'oont', 'toon'], - 'ontogenal': ['nonlegato', 'ontogenal'], - 'ontological': ['ontological', 'tonological'], - 'ontologism': ['monologist', 'nomologist', 'ontologism'], - 'ontology': ['ontology', 'tonology'], - 'onus': ['nosu', 'nous', 'onus'], - 'onymal': ['amylon', 'onymal'], - 'onymatic': ['cymation', 'myatonic', 'onymatic'], - 'onza': ['azon', 'onza', 'ozan'], - 'oocyte': ['coyote', 'oocyte'], - 'oodles': ['dolose', 'oodles', 'soodle'], - 'ooid': ['iodo', 'ooid'], - 'oolak': ['lokao', 'oolak'], - 'oolite': ['lootie', 'oolite'], - 'oometer': ['moreote', 'oometer'], - 'oons': ['oons', 'soon'], - 'oont': ['onto', 'oont', 'toon'], - 'oopak': ['oopak', 'pooka'], - 'oord': ['door', 'odor', 'oord', 'rood'], - 'opacate': ['opacate', 'peacoat'], - 'opacite': ['ectopia', 'opacite'], - 'opah': ['opah', 'paho', 'poha'], - 'opal': ['alop', 'opal'], - 'opalina': ['opalina', 'pianola'], - 'opalinine': ['opalinine', 'pleionian'], - 'opalize': ['epizoal', 'lopezia', 'opalize'], - 'opata': ['opata', 'patao', 'tapoa'], - 'opdalite': ['opdalite', 'petaloid'], - 'ope': ['ope', 'poe'], - 'opelet': ['eelpot', 'opelet'], - 'open': ['nope', 'open', 'peon', 'pone'], - 'opencast': ['capstone', 'opencast'], - 'opener': ['opener', 'reopen', 'repone'], - 'openly': ['onlepy', 'openly'], - 'openside': ['disponee', 'openside'], - 'operable': ['operable', 'ropeable'], - 'operae': ['aerope', 'operae'], - 'operant': ['operant', 'pronate', 'protean'], - 'operatic': ['aporetic', 'capriote', 'operatic'], - 'operatical': ['aporetical', 'operatical'], - 'operating': ['operating', 'pignorate'], - 'operatrix': ['expirator', 'operatrix'], - 'opercular': ['opercular', 'preocular'], - 'ophidion': ['ophidion', 'ophionid'], - 'ophionid': ['ophidion', 'ophionid'], - 'ophism': ['mopish', 'ophism'], - 'ophite': ['ethiop', 'ophite', 'peitho'], - 'opinant': ['opinant', 'pintano'], - 'opinator': ['opinator', 'tropaion'], - 'opiner': ['opiner', 'orpine', 'ponier'], - 'opiniaster': ['opiniaster', 'opiniastre'], - 'opiniastre': ['opiniaster', 'opiniastre'], - 'opiniatrety': ['opiniatrety', 'petitionary'], - 'opisometer': ['opisometer', 'opsiometer'], - 'opisthenar': ['opisthenar', 'spheration'], - 'opisthorchis': ['chirosophist', 'opisthorchis'], - 'oppian': ['oppian', 'papion', 'popian'], - 'opposer': ['opposer', 'propose'], - 'oppugn': ['oppugn', 'popgun'], - 'opsiometer': ['opisometer', 'opsiometer'], - 'opsonic': ['opsonic', 'pocosin'], - 'opsy': ['opsy', 'posy'], - 'opt': ['opt', 'pot', 'top'], - 'optable': ['optable', 'potable'], - 'optableness': ['optableness', 'potableness'], - 'optate': ['aptote', 'optate', 'potate', 'teapot'], - 'optation': ['optation', 'potation'], - 'optative': ['optative', 'potative'], - 'optic': ['optic', 'picot', 'topic'], - 'optical': ['capitol', 'coalpit', 'optical', 'topical'], - 'optically': ['optically', 'topically'], - 'optics': ['copist', 'coptis', 'optics', 'postic'], - 'optimal': ['optimal', 'palmito'], - 'option': ['option', 'potion'], - 'optional': ['antipolo', 'antipool', 'optional'], - 'optography': ['optography', 'topography'], - 'optological': ['optological', 'topological'], - 'optologist': ['optologist', 'topologist'], - 'optology': ['optology', 'topology'], - 'optometer': ['optometer', 'potometer'], - 'optophone': ['optophone', 'topophone'], - 'optotype': ['optotype', 'topotype'], - 'opulaster': ['opulaster', 'sportulae', 'sporulate'], - 'opulus': ['lupous', 'opulus'], - 'opuntia': ['opuntia', 'utopian'], - 'opus': ['opus', 'soup'], - 'opuscular': ['crapulous', 'opuscular'], - 'or': ['or', 'ro'], - 'ora': ['aro', 'oar', 'ora'], - 'orach': ['achor', 'chora', 'corah', 'orach', 'roach'], - 'oracle': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'], - 'orad': ['dora', 'orad', 'road'], - 'oral': ['lora', 'oral'], - 'oralist': ['aristol', 'oralist', 'ortalis', 'striola'], - 'orality': ['orality', 'tailory'], - 'orang': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'orange': ['onager', 'orange'], - 'orangeist': ['goniaster', 'orangeist'], - 'oranger': ['groaner', 'oranger', 'organer'], - 'orangism': ['orangism', 'organism', 'sinogram'], - 'orangist': ['orangist', 'organist', 'roasting', 'signator'], - 'orangize': ['agonizer', 'orangize', 'organize'], - 'orant': ['orant', 'rotan', 'toran', 'trona'], - 'oraon': ['aroon', 'oraon'], - 'oratress': ['assertor', 'assorter', 'oratress', 'reassort'], - 'orb': ['bor', 'orb', 'rob'], - 'orbed': ['boder', 'orbed'], - 'orbic': ['boric', 'cribo', 'orbic'], - 'orbicle': ['bricole', 'corbeil', 'orbicle'], - 'orbicular': ['courbaril', 'orbicular'], - 'orbitale': ['betailor', 'laborite', 'orbitale'], - 'orbitelar': ['liberator', 'orbitelar'], - 'orbitelarian': ['irrationable', 'orbitelarian'], - 'orbitofrontal': ['frontoorbital', 'orbitofrontal'], - 'orbitonasal': ['nasoorbital', 'orbitonasal'], - 'orblet': ['bolter', 'orblet', 'reblot', 'rebolt'], - 'orbulina': ['orbulina', 'unilobar'], - 'orc': ['cor', 'cro', 'orc', 'roc'], - 'orca': ['acor', 'caro', 'cora', 'orca'], - 'orcadian': ['nocardia', 'orcadian'], - 'orcanet': ['enactor', 'necator', 'orcanet'], - 'orcein': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'], - 'orchat': ['cathro', 'orchat'], - 'orchel': ['chlore', 'choler', 'orchel'], - 'orchester': ['orchester', 'orchestre'], - 'orchestre': ['orchester', 'orchestre'], - 'orchic': ['choric', 'orchic'], - 'orchid': ['orchid', 'rhodic'], - 'orchidist': ['chorditis', 'orchidist'], - 'orchiocele': ['choriocele', 'orchiocele'], - 'orchitis': ['historic', 'orchitis'], - 'orcin': ['corin', 'noric', 'orcin'], - 'orcinol': ['colorin', 'orcinol'], - 'ordain': ['dorian', 'inroad', 'ordain'], - 'ordainer': ['inroader', 'ordainer', 'reordain'], - 'ordainment': ['antimodern', 'ordainment'], - 'ordanchite': ['achondrite', 'ditrochean', 'ordanchite'], - 'ordeal': ['loader', 'ordeal', 'reload'], - 'orderer': ['orderer', 'reorder'], - 'ordinable': ['bolderian', 'ordinable'], - 'ordinal': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'], - 'ordinance': ['cerdonian', 'ordinance'], - 'ordinate': ['andorite', 'nadorite', 'ordinate', 'rodentia'], - 'ordinative': ['derivation', 'ordinative'], - 'ordinator': ['ordinator', 'radiotron'], - 'ordines': ['indorse', 'ordines', 'siredon', 'sordine'], - 'ordosite': ['oestroid', 'ordosite', 'ostreoid'], - 'ordu': ['dour', 'duro', 'ordu', 'roud'], - 'ore': ['oer', 'ore', 'roe'], - 'oread': ['adore', 'oared', 'oread'], - 'oreas': ['arose', 'oreas'], - 'orectic': ['cerotic', 'orectic'], - 'oreman': ['enamor', 'monera', 'oreman', 'romane'], - 'orenda': ['denaro', 'orenda'], - 'orendite': ['enteroid', 'orendite'], - 'orestean': ['orestean', 'resonate', 'stearone'], - 'orf': ['for', 'fro', 'orf'], - 'organ': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'organal': ['angolar', 'organal'], - 'organer': ['groaner', 'oranger', 'organer'], - 'organicism': ['organicism', 'organismic'], - 'organicist': ['organicist', 'organistic'], - 'organing': ['groaning', 'organing'], - 'organism': ['orangism', 'organism', 'sinogram'], - 'organismic': ['organicism', 'organismic'], - 'organist': ['orangist', 'organist', 'roasting', 'signator'], - 'organistic': ['organicist', 'organistic'], - 'organity': ['gyration', 'organity', 'ortygian'], - 'organize': ['agonizer', 'orangize', 'organize'], - 'organized': ['dragonize', 'organized'], - 'organoid': ['gordonia', 'organoid', 'rigadoon'], - 'organonymic': ['craniognomy', 'organonymic'], - 'organotin': ['gortonian', 'organotin'], - 'organule': ['lagunero', 'organule', 'uroglena'], - 'orgiasm': ['isogram', 'orgiasm'], - 'orgiast': ['agistor', 'agrotis', 'orgiast'], - 'orgic': ['corgi', 'goric', 'orgic'], - 'orgue': ['orgue', 'rogue', 'rouge'], - 'orgy': ['gory', 'gyro', 'orgy'], - 'oriel': ['oiler', 'oriel', 'reoil'], - 'orient': ['norite', 'orient'], - 'oriental': ['oriental', 'relation', 'tirolean'], - 'orientalism': ['misrelation', 'orientalism', 'relationism'], - 'orientalist': ['orientalist', 'relationist'], - 'orientate': ['anoterite', 'orientate'], - 'origanum': ['mirounga', 'moringua', 'origanum'], - 'origin': ['nigori', 'origin'], - 'orle': ['lore', 'orle', 'role'], - 'orlean': ['lenora', 'loaner', 'orlean', 'reloan'], - 'orleanist': ['lairstone', 'orleanist', 'serotinal'], - 'orleanistic': ['intersocial', 'orleanistic', 'sclerotinia'], - 'orlet': ['lerot', 'orlet', 'relot'], - 'orlo': ['loro', 'olor', 'orlo', 'rool'], - 'orna': ['nora', 'orna', 'roan'], - 'ornamenter': ['ornamenter', 'reornament'], - 'ornate': ['atoner', 'norate', 'ornate'], - 'ornately': ['neolatry', 'ornately', 'tyrolean'], - 'ornation': ['noration', 'ornation', 'orotinan'], - 'ornis': ['ornis', 'rosin'], - 'orniscopic': ['orniscopic', 'scorpionic'], - 'ornithomantic': ['ornithomantic', 'orthantimonic'], - 'ornithoptera': ['ornithoptera', 'prototherian'], - 'orogenetic': ['erotogenic', 'geocronite', 'orogenetic'], - 'orographical': ['colporrhagia', 'orographical'], - 'orography': ['gyrophora', 'orography'], - 'orotinan': ['noration', 'ornation', 'orotinan'], - 'orotund': ['orotund', 'rotundo'], - 'orphanism': ['manorship', 'orphanism'], - 'orpheon': ['orpheon', 'phorone'], - 'orpheus': ['ephorus', 'orpheus', 'upshore'], - 'orphical': ['orphical', 'rhopalic'], - 'orphism': ['orphism', 'rompish'], - 'orphize': ['orphize', 'phiroze'], - 'orpine': ['opiner', 'orpine', 'ponier'], - 'orsel': ['loser', 'orsel', 'rosel', 'soler'], - 'orselle': ['orselle', 'roselle'], - 'ort': ['ort', 'rot', 'tor'], - 'ortalid': ['dilator', 'ortalid'], - 'ortalis': ['aristol', 'oralist', 'ortalis', 'striola'], - 'ortet': ['ortet', 'otter', 'toter'], - 'orthal': ['harlot', 'orthal', 'thoral'], - 'orthantimonic': ['ornithomantic', 'orthantimonic'], - 'orthian': ['orthian', 'thorina'], - 'orthic': ['chorti', 'orthic', 'thoric', 'trochi'], - 'orthite': ['hortite', 'orthite', 'thorite'], - 'ortho': ['ortho', 'thoro'], - 'orthodromy': ['hydromotor', 'orthodromy'], - 'orthogamy': ['orthogamy', 'othygroma'], - 'orthogonial': ['orthogonial', 'orthologian'], - 'orthologian': ['orthogonial', 'orthologian'], - 'orthose': ['orthose', 'reshoot', 'shooter', 'soother'], - 'ortiga': ['agrito', 'ortiga'], - 'ortstein': ['ortstein', 'tenorist'], - 'ortygian': ['gyration', 'organity', 'ortygian'], - 'ortygine': ['genitory', 'ortygine'], - 'ory': ['ory', 'roy', 'yor'], - 'oryx': ['oryx', 'roxy'], - 'os': ['os', 'so'], - 'osamin': ['monias', 'osamin', 'osmina'], - 'osamine': ['monesia', 'osamine', 'osmanie'], - 'osc': ['cos', 'osc', 'soc'], - 'oscan': ['ascon', 'canso', 'oscan'], - 'oscar': ['arcos', 'crosa', 'oscar', 'sacro'], - 'oscella': ['callose', 'oscella'], - 'oscheal': ['oscheal', 'scholae'], - 'oscillance': ['clinoclase', 'oscillance'], - 'oscillaria': ['iliosacral', 'oscillaria'], - 'oscillation': ['colonialist', 'oscillation'], - 'oscin': ['oscin', 'scion', 'sonic'], - 'oscine': ['cosine', 'oscine'], - 'oscines': ['cession', 'oscines'], - 'oscinian': ['oscinian', 'socinian'], - 'oscinidae': ['oniscidae', 'oscinidae', 'sciaenoid'], - 'oscitant': ['actinost', 'oscitant'], - 'oscular': ['carolus', 'oscular'], - 'osculate': ['lacteous', 'osculate'], - 'osculatory': ['cotylosaur', 'osculatory'], - 'oscule': ['coleus', 'oscule'], - 'ose': ['oes', 'ose', 'soe'], - 'osela': ['alose', 'osela', 'solea'], - 'oshac': ['chaos', 'oshac'], - 'oside': ['diose', 'idose', 'oside'], - 'osier': ['osier', 'serio'], - 'osirian': ['nosairi', 'osirian'], - 'osiride': ['isidore', 'osiride'], - 'oskar': ['krosa', 'oskar'], - 'osmanie': ['monesia', 'osamine', 'osmanie'], - 'osmanli': ['malison', 'manolis', 'osmanli', 'somnial'], - 'osmatic': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'], - 'osmatism': ['osmatism', 'somatism'], - 'osmerus': ['osmerus', 'smouser'], - 'osmin': ['minos', 'osmin', 'simon'], - 'osmina': ['monias', 'osamin', 'osmina'], - 'osmiridium': ['iridosmium', 'osmiridium'], - 'osmogene': ['gonesome', 'osmogene'], - 'osmometer': ['merostome', 'osmometer'], - 'osmometric': ['microstome', 'osmometric'], - 'osmophore': ['osmophore', 'sophomore'], - 'osmotactic': ['osmotactic', 'scotomatic'], - 'osmunda': ['damnous', 'osmunda'], - 'osone': ['noose', 'osone'], - 'osprey': ['eryops', 'osprey'], - 'ossal': ['lasso', 'ossal'], - 'ossein': ['essoin', 'ossein'], - 'osselet': ['osselet', 'sestole', 'toeless'], - 'ossetian': ['assiento', 'ossetian'], - 'ossetine': ['essonite', 'ossetine'], - 'ossicle': ['loessic', 'ossicle'], - 'ossiculate': ['acleistous', 'ossiculate'], - 'ossicule': ['coulisse', 'leucosis', 'ossicule'], - 'ossuary': ['ossuary', 'suasory'], - 'ostara': ['aroast', 'ostara'], - 'osteal': ['lotase', 'osteal', 'solate', 'stolae', 'talose'], - 'ostearthritis': ['arthrosteitis', 'ostearthritis'], - 'ostectomy': ['cystotome', 'cytostome', 'ostectomy'], - 'ostein': ['nesiot', 'ostein'], - 'ostemia': ['miaotse', 'ostemia'], - 'ostent': ['ostent', 'teston'], - 'ostentation': ['ostentation', 'tionontates'], - 'ostentous': ['ostentous', 'sostenuto'], - 'osteometric': ['osteometric', 'stereotomic'], - 'osteometrical': ['osteometrical', 'stereotomical'], - 'osteometry': ['osteometry', 'stereotomy'], - 'ostic': ['ostic', 'sciot', 'stoic'], - 'ostmen': ['montes', 'ostmen'], - 'ostracea': ['ceratosa', 'ostracea'], - 'ostracean': ['ostracean', 'socratean'], - 'ostracine': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'], - 'ostracism': ['ostracism', 'socratism'], - 'ostracize': ['ostracize', 'socratize'], - 'ostracon': ['ostracon', 'socotran'], - 'ostraite': ['astroite', 'ostraite', 'storiate'], - 'ostreidae': ['oestridae', 'ostreidae', 'sorediate'], - 'ostreiform': ['forritsome', 'ostreiform'], - 'ostreoid': ['oestroid', 'ordosite', 'ostreoid'], - 'ostrich': ['chorist', 'ostrich'], - 'oswald': ['dowlas', 'oswald'], - 'otalgy': ['goatly', 'otalgy'], - 'otaria': ['atorai', 'otaria'], - 'otarian': ['aration', 'otarian'], - 'otarine': ['otarine', 'torenia'], - 'other': ['other', 'thore', 'throe', 'toher'], - 'otherism': ['homerist', 'isotherm', 'otherism', 'theorism'], - 'otherist': ['otherist', 'theorist'], - 'othygroma': ['orthogamy', 'othygroma'], - 'otiant': ['otiant', 'titano'], - 'otidae': ['idotea', 'iodate', 'otidae'], - 'otidine': ['edition', 'odinite', 'otidine', 'tineoid'], - 'otiosely': ['oleosity', 'otiosely'], - 'otitis': ['itoist', 'otitis'], - 'oto': ['oto', 'too'], - 'otocephalic': ['hepatocolic', 'otocephalic'], - 'otocrane': ['coronate', 'octonare', 'otocrane'], - 'otogenic': ['geotonic', 'otogenic'], - 'otomian': ['amotion', 'otomian'], - 'otomyces': ['cytosome', 'otomyces'], - 'ottar': ['ottar', 'tarot', 'torta', 'troat'], - 'otter': ['ortet', 'otter', 'toter'], - 'otto': ['otto', 'toot', 'toto'], - 'otus': ['otus', 'oust', 'suto'], - 'otyak': ['otyak', 'tokay'], - 'ouch': ['chou', 'ouch'], - 'ouf': ['fou', 'ouf'], - 'ough': ['hugo', 'ough'], - 'ought': ['ought', 'tough'], - 'oughtness': ['oughtness', 'toughness'], - 'ounds': ['nodus', 'ounds', 'sound'], - 'our': ['our', 'uro'], - 'ours': ['ours', 'sour'], - 'oust': ['otus', 'oust', 'suto'], - 'ouster': ['ouster', 'souter', 'touser', 'trouse'], - 'out': ['out', 'tou'], - 'outarde': ['outarde', 'outdare', 'outread'], - 'outban': ['outban', 'unboat'], - 'outbar': ['outbar', 'rubato', 'tabour'], - 'outbeg': ['bouget', 'outbeg'], - 'outblow': ['blowout', 'outblow', 'outbowl'], - 'outblunder': ['outblunder', 'untroubled'], - 'outbowl': ['blowout', 'outblow', 'outbowl'], - 'outbreak': ['breakout', 'outbreak'], - 'outbred': ['doubter', 'obtrude', 'outbred', 'redoubt'], - 'outburn': ['burnout', 'outburn'], - 'outburst': ['outburst', 'subtutor'], - 'outbustle': ['outbustle', 'outsubtle'], - 'outcarol': ['outcarol', 'taurocol'], - 'outcarry': ['curatory', 'outcarry'], - 'outcase': ['acetous', 'outcase'], - 'outcharm': ['outcharm', 'outmarch'], - 'outcrier': ['courtier', 'outcrier'], - 'outcut': ['cutout', 'outcut'], - 'outdance': ['outdance', 'uncoated'], - 'outdare': ['outarde', 'outdare', 'outread'], - 'outdraw': ['drawout', 'outdraw', 'outward'], - 'outer': ['outer', 'outre', 'route'], - 'outerness': ['outerness', 'outreness'], - 'outferret': ['foreutter', 'outferret'], - 'outfit': ['fitout', 'outfit'], - 'outflare': ['fluorate', 'outflare'], - 'outfling': ['flouting', 'outfling'], - 'outfly': ['outfly', 'toyful'], - 'outgoer': ['outgoer', 'rougeot'], - 'outgrin': ['outgrin', 'outring', 'routing', 'touring'], - 'outhire': ['outhire', 'routhie'], - 'outhold': ['holdout', 'outhold'], - 'outkick': ['kickout', 'outkick'], - 'outlance': ['cleanout', 'outlance'], - 'outlay': ['layout', 'lutayo', 'outlay'], - 'outleap': ['outleap', 'outpeal'], - 'outler': ['elutor', 'louter', 'outler'], - 'outlet': ['outlet', 'tutelo'], - 'outline': ['elution', 'outline'], - 'outlinear': ['outlinear', 'uranolite'], - 'outlined': ['outlined', 'untoiled'], - 'outlook': ['lookout', 'outlook'], - 'outly': ['louty', 'outly'], - 'outman': ['amount', 'moutan', 'outman'], - 'outmarch': ['outcharm', 'outmarch'], - 'outmarry': ['mortuary', 'outmarry'], - 'outmaster': ['outmaster', 'outstream'], - 'outname': ['notaeum', 'outname'], - 'outpaint': ['outpaint', 'putation'], - 'outpass': ['outpass', 'passout'], - 'outpay': ['outpay', 'tapuyo'], - 'outpeal': ['outleap', 'outpeal'], - 'outpitch': ['outpitch', 'pitchout'], - 'outplace': ['copulate', 'outplace'], - 'outprice': ['eutropic', 'outprice'], - 'outpromise': ['outpromise', 'peritomous'], - 'outrance': ['cornuate', 'courante', 'cuneator', 'outrance'], - 'outrate': ['outrate', 'outtear', 'torteau'], - 'outre': ['outer', 'outre', 'route'], - 'outread': ['outarde', 'outdare', 'outread'], - 'outremer': ['outremer', 'urometer'], - 'outreness': ['outerness', 'outreness'], - 'outring': ['outgrin', 'outring', 'routing', 'touring'], - 'outrun': ['outrun', 'runout'], - 'outsaint': ['outsaint', 'titanous'], - 'outscream': ['castoreum', 'outscream'], - 'outsell': ['outsell', 'sellout'], - 'outset': ['outset', 'setout'], - 'outshake': ['outshake', 'shakeout'], - 'outshape': ['outshape', 'taphouse'], - 'outshine': ['outshine', 'tinhouse'], - 'outshut': ['outshut', 'shutout'], - 'outside': ['outside', 'tedious'], - 'outsideness': ['outsideness', 'tediousness'], - 'outsigh': ['goutish', 'outsigh'], - 'outsin': ['outsin', 'ustion'], - 'outslide': ['outslide', 'solitude'], - 'outsnore': ['outsnore', 'urosteon'], - 'outsoler': ['outsoler', 'torulose'], - 'outspend': ['outspend', 'unposted'], - 'outspit': ['outspit', 'utopist'], - 'outspring': ['outspring', 'sprouting'], - 'outspurn': ['outspurn', 'portunus'], - 'outstair': ['outstair', 'ratitous'], - 'outstand': ['outstand', 'standout'], - 'outstate': ['outstate', 'outtaste'], - 'outstream': ['outmaster', 'outstream'], - 'outstreet': ['outstreet', 'tetterous'], - 'outsubtle': ['outbustle', 'outsubtle'], - 'outtaste': ['outstate', 'outtaste'], - 'outtear': ['outrate', 'outtear', 'torteau'], - 'outthrough': ['outthrough', 'throughout'], - 'outthrow': ['outthrow', 'outworth', 'throwout'], - 'outtrail': ['outtrail', 'tutorial'], - 'outturn': ['outturn', 'turnout'], - 'outturned': ['outturned', 'untutored'], - 'outwalk': ['outwalk', 'walkout'], - 'outward': ['drawout', 'outdraw', 'outward'], - 'outwash': ['outwash', 'washout'], - 'outwatch': ['outwatch', 'watchout'], - 'outwith': ['outwith', 'without'], - 'outwork': ['outwork', 'workout'], - 'outworth': ['outthrow', 'outworth', 'throwout'], - 'ova': ['avo', 'ova'], - 'ovaloid': ['ovaloid', 'ovoidal'], - 'ovarial': ['ovarial', 'variola'], - 'ovariotubal': ['ovariotubal', 'tuboovarial'], - 'ovational': ['avolation', 'ovational'], - 'oven': ['nevo', 'oven'], - 'ovenly': ['lenvoy', 'ovenly'], - 'ovenpeel': ['envelope', 'ovenpeel'], - 'over': ['over', 'rove'], - 'overaction': ['overaction', 'revocation'], - 'overactive': ['overactive', 'revocative'], - 'overall': ['allover', 'overall'], - 'overblame': ['overblame', 'removable'], - 'overblow': ['overblow', 'overbowl'], - 'overboil': ['boilover', 'overboil'], - 'overbowl': ['overblow', 'overbowl'], - 'overbreak': ['breakover', 'overbreak'], - 'overburden': ['overburden', 'overburned'], - 'overburn': ['burnover', 'overburn'], - 'overburned': ['overburden', 'overburned'], - 'overcall': ['overcall', 'vocaller'], - 'overcare': ['overcare', 'overrace'], - 'overcirculate': ['overcirculate', 'uterocervical'], - 'overcoat': ['evocator', 'overcoat'], - 'overcross': ['crossover', 'overcross'], - 'overcup': ['overcup', 'upcover'], - 'overcurious': ['erucivorous', 'overcurious'], - 'overcurtain': ['countervair', 'overcurtain', 'recurvation'], - 'overcut': ['cutover', 'overcut'], - 'overdamn': ['overdamn', 'ravendom'], - 'overdare': ['overdare', 'overdear', 'overread'], - 'overdeal': ['overdeal', 'overlade', 'overlead'], - 'overdear': ['overdare', 'overdear', 'overread'], - 'overdraw': ['overdraw', 'overward'], - 'overdrawer': ['overdrawer', 'overreward'], - 'overdrip': ['overdrip', 'provider'], - 'overdure': ['devourer', 'overdure', 'overrude'], - 'overdust': ['overdust', 'overstud'], - 'overedit': ['overedit', 'overtide'], - 'overfar': ['favorer', 'overfar', 'refavor'], - 'overfile': ['forelive', 'overfile'], - 'overfilm': ['overfilm', 'veliform'], - 'overflower': ['overflower', 'reoverflow'], - 'overforce': ['forecover', 'overforce'], - 'overgaiter': ['overgaiter', 'revigorate'], - 'overglint': ['overglint', 'revolting'], - 'overgo': ['groove', 'overgo'], - 'overgrain': ['granivore', 'overgrain'], - 'overhate': ['overhate', 'overheat'], - 'overheat': ['overhate', 'overheat'], - 'overheld': ['overheld', 'verdelho'], - 'overidle': ['evildoer', 'overidle'], - 'overink': ['invoker', 'overink'], - 'overinsist': ['overinsist', 'versionist'], - 'overkeen': ['overkeen', 'overknee'], - 'overknee': ['overkeen', 'overknee'], - 'overlade': ['overdeal', 'overlade', 'overlead'], - 'overlast': ['overlast', 'oversalt'], - 'overlate': ['elevator', 'overlate'], - 'overlay': ['layover', 'overlay'], - 'overlead': ['overdeal', 'overlade', 'overlead'], - 'overlean': ['overlean', 'valerone'], - 'overleg': ['overleg', 'reglove'], - 'overlie': ['overlie', 'relievo'], - 'overling': ['lovering', 'overling'], - 'overlisten': ['overlisten', 'oversilent'], - 'overlive': ['overlive', 'overveil'], - 'overly': ['overly', 'volery'], - 'overmantel': ['overmantel', 'overmantle'], - 'overmantle': ['overmantel', 'overmantle'], - 'overmaster': ['overmaster', 'overstream'], - 'overmean': ['overmean', 'overname'], - 'overmerit': ['overmerit', 'overtimer'], - 'overname': ['overmean', 'overname'], - 'overneat': ['overneat', 'renovate'], - 'overnew': ['overnew', 'rewoven'], - 'overnigh': ['hovering', 'overnigh'], - 'overpaint': ['overpaint', 'pronative'], - 'overpass': ['overpass', 'passover'], - 'overpet': ['overpet', 'preveto', 'prevote'], - 'overpick': ['overpick', 'pickover'], - 'overplain': ['overplain', 'parvoline'], - 'overply': ['overply', 'plovery'], - 'overpointed': ['overpointed', 'predevotion'], - 'overpot': ['overpot', 'overtop'], - 'overrace': ['overcare', 'overrace'], - 'overrate': ['overrate', 'overtare'], - 'overread': ['overdare', 'overdear', 'overread'], - 'overreward': ['overdrawer', 'overreward'], - 'overrude': ['devourer', 'overdure', 'overrude'], - 'overrun': ['overrun', 'runover'], - 'oversad': ['oversad', 'savored'], - 'oversale': ['oversale', 'overseal'], - 'oversalt': ['overlast', 'oversalt'], - 'oversauciness': ['oversauciness', 'veraciousness'], - 'overseal': ['oversale', 'overseal'], - 'overseen': ['overseen', 'veronese'], - 'overset': ['overset', 'setover'], - 'oversilent': ['overlisten', 'oversilent'], - 'overslip': ['overslip', 'slipover'], - 'overspread': ['overspread', 'spreadover'], - 'overstain': ['overstain', 'servation', 'versation'], - 'overstir': ['overstir', 'servitor'], - 'overstrain': ['overstrain', 'traversion'], - 'overstream': ['overmaster', 'overstream'], - 'overstrew': ['overstrew', 'overwrest'], - 'overstud': ['overdust', 'overstud'], - 'overt': ['overt', 'rovet', 'torve', 'trove', 'voter'], - 'overtare': ['overrate', 'overtare'], - 'overthrow': ['overthrow', 'overwroth'], - 'overthwart': ['overthwart', 'thwartover'], - 'overtide': ['overedit', 'overtide'], - 'overtime': ['overtime', 'remotive'], - 'overtimer': ['overmerit', 'overtimer'], - 'overtip': ['overtip', 'pivoter'], - 'overtop': ['overpot', 'overtop'], - 'overtrade': ['overtrade', 'overtread'], - 'overtread': ['overtrade', 'overtread'], - 'overtrue': ['overtrue', 'overture', 'trouvere'], - 'overture': ['overtrue', 'overture', 'trouvere'], - 'overturn': ['overturn', 'turnover'], - 'overtwine': ['interwove', 'overtwine'], - 'overveil': ['overlive', 'overveil'], - 'overwalk': ['overwalk', 'walkover'], - 'overward': ['overdraw', 'overward'], - 'overwrest': ['overstrew', 'overwrest'], - 'overwroth': ['overthrow', 'overwroth'], - 'ovest': ['ovest', 'stove'], - 'ovidae': ['evodia', 'ovidae'], - 'ovidian': ['ovidian', 'vidonia'], - 'ovile': ['olive', 'ovile', 'voile'], - 'ovillus': ['ovillus', 'villous'], - 'oviparous': ['apivorous', 'oviparous'], - 'ovist': ['ovist', 'visto'], - 'ovistic': ['covisit', 'ovistic'], - 'ovoidal': ['ovaloid', 'ovoidal'], - 'ovular': ['louvar', 'ovular'], - 'ow': ['ow', 'wo'], - 'owd': ['dow', 'owd', 'wod'], - 'owe': ['owe', 'woe'], - 'owen': ['enow', 'owen', 'wone'], - 'owenism': ['owenism', 'winsome'], - 'ower': ['ower', 'wore'], - 'owerby': ['bowery', 'bowyer', 'owerby'], - 'owl': ['low', 'lwo', 'owl'], - 'owler': ['lower', 'owler', 'rowel'], - 'owlery': ['lowery', 'owlery', 'rowley', 'yowler'], - 'owlet': ['owlet', 'towel'], - 'owlish': ['lowish', 'owlish'], - 'owlishly': ['lowishly', 'owlishly', 'sillyhow'], - 'owlishness': ['lowishness', 'owlishness'], - 'owly': ['lowy', 'owly', 'yowl'], - 'own': ['now', 'own', 'won'], - 'owner': ['owner', 'reown', 'rowen'], - 'ownership': ['ownership', 'shipowner'], - 'ownness': ['nowness', 'ownness'], - 'owser': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'], - 'oxalan': ['axonal', 'oxalan'], - 'oxalite': ['aloxite', 'oxalite'], - 'oxan': ['axon', 'noxa', 'oxan'], - 'oxanic': ['anoxic', 'oxanic'], - 'oxazine': ['azoxine', 'oxazine'], - 'oxen': ['exon', 'oxen'], - 'oxidic': ['ixodic', 'oxidic'], - 'oximate': ['oximate', 'toxemia'], - 'oxy': ['oxy', 'yox'], - 'oxyntic': ['ictonyx', 'oxyntic'], - 'oxyphenol': ['oxyphenol', 'xylophone'], - 'oxyterpene': ['enteropexy', 'oxyterpene'], - 'oyer': ['oyer', 'roey', 'yore'], - 'oyster': ['oyster', 'rosety'], - 'oysterish': ['oysterish', 'thyreosis'], - 'oysterman': ['monastery', 'oysterman'], - 'ozan': ['azon', 'onza', 'ozan'], - 'ozena': ['neoza', 'ozena'], - 'ozonate': ['entozoa', 'ozonate'], - 'ozonic': ['ozonic', 'zoonic'], - 'ozotype': ['ozotype', 'zootype'], - 'paal': ['paal', 'pala'], - 'paar': ['apar', 'paar', 'para'], - 'pablo': ['pablo', 'polab'], - 'pac': ['cap', 'pac'], - 'pacable': ['capable', 'pacable'], - 'pacation': ['copatain', 'pacation'], - 'pacaya': ['cayapa', 'pacaya'], - 'pace': ['cape', 'cepa', 'pace'], - 'paced': ['caped', 'decap', 'paced'], - 'pacer': ['caper', 'crape', 'pacer', 'perca', 'recap'], - 'pachnolite': ['pachnolite', 'phonetical'], - 'pachometer': ['pachometer', 'phacometer'], - 'pacht': ['chapt', 'pacht', 'patch'], - 'pachylosis': ['pachylosis', 'phacolysis'], - 'pacificist': ['pacificist', 'pacifistic'], - 'pacifistic': ['pacificist', 'pacifistic'], - 'packer': ['packer', 'repack'], - 'paco': ['copa', 'paco'], - 'pacolet': ['pacolet', 'polecat'], - 'paction': ['caption', 'paction'], - 'pactional': ['pactional', 'pactolian', 'placation'], - 'pactionally': ['pactionally', 'polyactinal'], - 'pactolian': ['pactional', 'pactolian', 'placation'], - 'pad': ['dap', 'pad'], - 'padda': ['dadap', 'padda'], - 'padder': ['padder', 'parded'], - 'padfoot': ['footpad', 'padfoot'], - 'padle': ['padle', 'paled', 'pedal', 'plead'], - 'padre': ['drape', 'padre'], - 'padtree': ['padtree', 'predate', 'tapered'], - 'paean': ['apnea', 'paean'], - 'paeanism': ['paeanism', 'spanemia'], - 'paegel': ['paegel', 'paegle', 'pelage'], - 'paegle': ['paegel', 'paegle', 'pelage'], - 'paga': ['gapa', 'paga'], - 'page': ['gape', 'page', 'peag', 'pega'], - 'pagedom': ['megapod', 'pagedom'], - 'pager': ['gaper', 'grape', 'pager', 'parge'], - 'pageship': ['pageship', 'shippage'], - 'paginary': ['agrypnia', 'paginary'], - 'paguridae': ['paguridae', 'paguridea'], - 'paguridea': ['paguridae', 'paguridea'], - 'pagurine': ['pagurine', 'perugian'], - 'pah': ['hap', 'pah'], - 'pahari': ['pahari', 'pariah', 'raphia'], - 'pahi': ['hapi', 'pahi'], - 'paho': ['opah', 'paho', 'poha'], - 'paigle': ['paigle', 'pilage'], - 'paik': ['paik', 'pika'], - 'pail': ['lipa', 'pail', 'pali', 'pial'], - 'paillasse': ['paillasse', 'palliasse'], - 'pain': ['nipa', 'pain', 'pani', 'pian', 'pina'], - 'painless': ['painless', 'spinales'], - 'paint': ['inapt', 'paint', 'pinta'], - 'painted': ['depaint', 'inadept', 'painted', 'patined'], - 'painter': ['painter', 'pertain', 'pterian', 'repaint'], - 'painterly': ['interplay', 'painterly'], - 'paintiness': ['antisepsin', 'paintiness'], - 'paip': ['paip', 'pipa'], - 'pair': ['pair', 'pari', 'pria', 'ripa'], - 'paired': ['diaper', 'paired'], - 'pairer': ['pairer', 'rapier', 'repair'], - 'pairment': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'], - 'pais': ['apis', 'pais', 'pasi', 'saip'], - 'pajonism': ['japonism', 'pajonism'], - 'pal': ['alp', 'lap', 'pal'], - 'pala': ['paal', 'pala'], - 'palaeechinoid': ['deinocephalia', 'palaeechinoid'], - 'palaemonid': ['anomaliped', 'palaemonid'], - 'palaemonoid': ['adenolipoma', 'palaemonoid'], - 'palaeornis': ['palaeornis', 'personalia'], - 'palaestrics': ['palaestrics', 'paracelsist'], - 'palaic': ['apical', 'palaic'], - 'palaite': ['palaite', 'petalia', 'pileata'], - 'palame': ['palame', 'palmae', 'pamela'], - 'palamite': ['ampliate', 'palamite'], - 'palas': ['palas', 'salpa'], - 'palate': ['aletap', 'palate', 'platea'], - 'palatial': ['palatial', 'palliata'], - 'palatic': ['capital', 'palatic'], - 'palation': ['palation', 'talapoin'], - 'palatonasal': ['nasopalatal', 'palatonasal'], - 'palau': ['palau', 'paula'], - 'palay': ['palay', 'playa'], - 'pale': ['leap', 'lepa', 'pale', 'peal', 'plea'], - 'paled': ['padle', 'paled', 'pedal', 'plead'], - 'paleness': ['paleness', 'paneless'], - 'paleolithy': ['paleolithy', 'polyhalite', 'polythelia'], - 'paler': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'palermitan': ['palermitan', 'parliament'], - 'palermo': ['leproma', 'palermo', 'pleroma', 'polearm'], - 'pales': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'palestral': ['alpestral', 'palestral'], - 'palestrian': ['alpestrian', 'palestrian', 'psalterian'], - 'palet': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'palette': ['palette', 'peltate'], - 'pali': ['lipa', 'pail', 'pali', 'pial'], - 'palification': ['palification', 'pontificalia'], - 'palinode': ['lapideon', 'palinode', 'pedalion'], - 'palinodist': ['palinodist', 'plastinoid'], - 'palisade': ['palisade', 'salpidae'], - 'palish': ['palish', 'silpha'], - 'pallasite': ['aliseptal', 'pallasite'], - 'pallette': ['pallette', 'platelet'], - 'palliasse': ['paillasse', 'palliasse'], - 'palliata': ['palatial', 'palliata'], - 'pallone': ['pallone', 'pleonal'], - 'palluites': ['palluites', 'pulsatile'], - 'palm': ['lamp', 'palm'], - 'palmad': ['lampad', 'palmad'], - 'palmae': ['palame', 'palmae', 'pamela'], - 'palmary': ['palmary', 'palmyra'], - 'palmatilobed': ['palmatilobed', 'palmilobated'], - 'palmatisect': ['metaplastic', 'palmatisect'], - 'palmer': ['lamper', 'palmer', 'relamp'], - 'palmery': ['lamprey', 'palmery'], - 'palmette': ['palmette', 'template'], - 'palmful': ['lampful', 'palmful'], - 'palmification': ['amplification', 'palmification'], - 'palmilobated': ['palmatilobed', 'palmilobated'], - 'palmipes': ['epiplasm', 'palmipes'], - 'palmist': ['lampist', 'palmist'], - 'palmister': ['palmister', 'prelatism'], - 'palmistry': ['lampistry', 'palmistry'], - 'palmite': ['implate', 'palmite'], - 'palmito': ['optimal', 'palmito'], - 'palmitone': ['emptional', 'palmitone'], - 'palmo': ['mopla', 'palmo'], - 'palmula': ['ampulla', 'palmula'], - 'palmy': ['amply', 'palmy'], - 'palmyra': ['palmary', 'palmyra'], - 'palolo': ['apollo', 'palolo'], - 'palp': ['lapp', 'palp', 'plap'], - 'palpal': ['appall', 'palpal'], - 'palpatory': ['palpatory', 'papolatry'], - 'palped': ['dapple', 'lapped', 'palped'], - 'palpi': ['palpi', 'pipal'], - 'palster': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'], - 'palsy': ['palsy', 'splay'], - 'palt': ['palt', 'plat'], - 'palta': ['aptal', 'palta', 'talpa'], - 'palter': ['palter', 'plater'], - 'palterer': ['palterer', 'platerer'], - 'paltry': ['paltry', 'partly', 'raptly'], - 'paludian': ['paludian', 'paludina'], - 'paludic': ['paludic', 'pudical'], - 'paludina': ['paludian', 'paludina'], - 'palus': ['palus', 'pasul'], - 'palustral': ['palustral', 'plaustral'], - 'palustrine': ['lupinaster', 'palustrine'], - 'paly': ['paly', 'play', 'pyal', 'pyla'], - 'pam': ['map', 'pam'], - 'pamela': ['palame', 'palmae', 'pamela'], - 'pamir': ['impar', 'pamir', 'prima'], - 'pamiri': ['impair', 'pamiri'], - 'pamper': ['mapper', 'pamper', 'pampre'], - 'pampre': ['mapper', 'pamper', 'pampre'], - 'pan': ['nap', 'pan'], - 'panace': ['canape', 'panace'], - 'panaceist': ['antispace', 'panaceist'], - 'panade': ['napead', 'panade'], - 'panak': ['kanap', 'panak'], - 'panamist': ['mainpast', 'mantispa', 'panamist', 'stampian'], - 'panary': ['panary', 'panyar'], - 'panatela': ['panatela', 'plataean'], - 'panatrophy': ['apanthropy', 'panatrophy'], - 'pancreatoduodenectomy': ['duodenopancreatectomy', 'pancreatoduodenectomy'], - 'pandean': ['pandean', 'pannade'], - 'pandemia': ['pandemia', 'pedimana'], - 'pander': ['pander', 'repand'], - 'panderly': ['panderly', 'repandly'], - 'pandermite': ['pandermite', 'pentamerid'], - 'panderous': ['panderous', 'repandous'], - 'pandion': ['dipnoan', 'nonpaid', 'pandion'], - 'pandour': ['pandour', 'poduran'], - 'pane': ['nape', 'neap', 'nepa', 'pane', 'pean'], - 'paned': ['paned', 'penda'], - 'panel': ['alpen', 'nepal', 'panel', 'penal', 'plane'], - 'panela': ['apneal', 'panela'], - 'panelation': ['antelopian', 'neapolitan', 'panelation'], - 'paneler': ['paneler', 'repanel', 'replane'], - 'paneless': ['paleness', 'paneless'], - 'panelist': ['panelist', 'pantelis', 'penalist', 'plastein'], - 'pangamic': ['campaign', 'pangamic'], - 'pangane': ['pangane', 'pannage'], - 'pangen': ['pangen', 'penang'], - 'pangene': ['pangene', 'pennage'], - 'pangi': ['aping', 'ngapi', 'pangi'], - 'pani': ['nipa', 'pain', 'pani', 'pian', 'pina'], - 'panicle': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'], - 'paniculitis': ['paniculitis', 'paulinistic'], - 'panisca': ['capsian', 'caspian', 'nascapi', 'panisca'], - 'panisic': ['panisic', 'piscian', 'piscina', 'sinapic'], - 'pank': ['knap', 'pank'], - 'pankin': ['napkin', 'pankin'], - 'panman': ['panman', 'pannam'], - 'panmug': ['panmug', 'pugman'], - 'pannade': ['pandean', 'pannade'], - 'pannage': ['pangane', 'pannage'], - 'pannam': ['panman', 'pannam'], - 'panne': ['panne', 'penna'], - 'pannicle': ['pannicle', 'pinnacle'], - 'pannus': ['pannus', 'sannup', 'unsnap', 'unspan'], - 'panoche': ['copehan', 'panoche', 'phocean'], - 'panoistic': ['panoistic', 'piscation'], - 'panornithic': ['panornithic', 'rhaponticin'], - 'panostitis': ['antiptosis', 'panostitis'], - 'panplegia': ['appealing', 'lagniappe', 'panplegia'], - 'pansciolist': ['costispinal', 'pansciolist'], - 'panse': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'], - 'panside': ['ipseand', 'panside', 'pansied'], - 'pansied': ['ipseand', 'panside', 'pansied'], - 'pansy': ['pansy', 'snapy'], - 'pantaleon': ['pantaleon', 'pantalone'], - 'pantalone': ['pantaleon', 'pantalone'], - 'pantarchy': ['pantarchy', 'pyracanth'], - 'pantelis': ['panelist', 'pantelis', 'penalist', 'plastein'], - 'pantellerite': ['interpellate', 'pantellerite'], - 'panter': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'pantheic': ['haptenic', 'pantheic', 'pithecan'], - 'pantheonic': ['nonhepatic', 'pantheonic'], - 'pantie': ['pantie', 'patine'], - 'panties': ['panties', 'sapient', 'spinate'], - 'pantile': ['pantile', 'pentail', 'platine', 'talpine'], - 'pantle': ['pantle', 'planet', 'platen'], - 'pantler': ['pantler', 'planter', 'replant'], - 'pantofle': ['felapton', 'pantofle'], - 'pantry': ['pantry', 'trypan'], - 'panyar': ['panary', 'panyar'], - 'papabot': ['papabot', 'papboat'], - 'papal': ['lappa', 'papal'], - 'papalistic': ['papalistic', 'papistical'], - 'papboat': ['papabot', 'papboat'], - 'paper': ['paper', 'rappe'], - 'papered': ['papered', 'pradeep'], - 'paperer': ['paperer', 'perpera', 'prepare', 'repaper'], - 'papern': ['napper', 'papern'], - 'papery': ['papery', 'prepay', 'yapper'], - 'papillote': ['papillote', 'popliteal'], - 'papion': ['oppian', 'papion', 'popian'], - 'papisher': ['papisher', 'sapphire'], - 'papistical': ['papalistic', 'papistical'], - 'papless': ['papless', 'sapples'], - 'papolatry': ['palpatory', 'papolatry'], - 'papule': ['papule', 'upleap'], - 'par': ['par', 'rap'], - 'para': ['apar', 'paar', 'para'], - 'parablepsia': ['appraisable', 'parablepsia'], - 'paracelsist': ['palaestrics', 'paracelsist'], - 'parachor': ['chaparro', 'parachor'], - 'paracolitis': ['paracolitis', 'piscatorial'], - 'paradisaic': ['paradisaic', 'paradisiac'], - 'paradisaically': ['paradisaically', 'paradisiacally'], - 'paradise': ['paradise', 'sparidae'], - 'paradisiac': ['paradisaic', 'paradisiac'], - 'paradisiacally': ['paradisaically', 'paradisiacally'], - 'parado': ['parado', 'pardao'], - 'paraenetic': ['capernaite', 'paraenetic'], - 'paragrapher': ['paragrapher', 'reparagraph'], - 'parah': ['aphra', 'harpa', 'parah'], - 'parale': ['earlap', 'parale'], - 'param': ['param', 'parma', 'praam'], - 'paramine': ['amperian', 'paramine', 'pearmain'], - 'paranephric': ['paranephric', 'paraphrenic'], - 'paranephritis': ['paranephritis', 'paraphrenitis'], - 'paranosic': ['caparison', 'paranosic'], - 'paraphrenic': ['paranephric', 'paraphrenic'], - 'paraphrenitis': ['paranephritis', 'paraphrenitis'], - 'parasita': ['aspirata', 'parasita'], - 'parasite': ['aspirate', 'parasite'], - 'parasol': ['asaprol', 'parasol'], - 'parasuchian': ['parasuchian', 'unpharasaic'], - 'parasyntheton': ['parasyntheton', 'thysanopteran'], - 'parate': ['aptera', 'parate', 'patera'], - 'parathion': ['parathion', 'phanariot'], - 'parazoan': ['parazoan', 'zaparoan'], - 'parboil': ['bipolar', 'parboil'], - 'parcel': ['carpel', 'parcel', 'placer'], - 'parcellary': ['carpellary', 'parcellary'], - 'parcellate': ['carpellate', 'parcellate', 'prelacteal'], - 'parchesi': ['parchesi', 'seraphic'], - 'pard': ['pard', 'prad'], - 'pardao': ['parado', 'pardao'], - 'parded': ['padder', 'parded'], - 'pardesi': ['despair', 'pardesi'], - 'pardo': ['adrop', 'pardo'], - 'pardoner': ['pardoner', 'preadorn'], - 'pare': ['aper', 'pare', 'pear', 'rape', 'reap'], - 'parel': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'paren': ['arpen', 'paren'], - 'parent': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'parental': ['parental', 'paternal', 'prenatal'], - 'parentalia': ['parentalia', 'planetaria'], - 'parentalism': ['parentalism', 'paternalism'], - 'parentality': ['parentality', 'paternality'], - 'parentally': ['parentally', 'paternally', 'prenatally'], - 'parentelic': ['epicentral', 'parentelic'], - 'parenticide': ['parenticide', 'preindicate'], - 'parer': ['parer', 'raper'], - 'paresis': ['paresis', 'serapis'], - 'paretic': ['paretic', 'patrice', 'picrate'], - 'parge': ['gaper', 'grape', 'pager', 'parge'], - 'pari': ['pair', 'pari', 'pria', 'ripa'], - 'pariah': ['pahari', 'pariah', 'raphia'], - 'paridae': ['deipara', 'paridae'], - 'paries': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'], - 'parietal': ['apterial', 'parietal'], - 'parietes': ['asperite', 'parietes'], - 'parietofrontal': ['frontoparietal', 'parietofrontal'], - 'parietosquamosal': ['parietosquamosal', 'squamosoparietal'], - 'parietotemporal': ['parietotemporal', 'temporoparietal'], - 'parietovisceral': ['parietovisceral', 'visceroparietal'], - 'parine': ['parine', 'rapine'], - 'paring': ['paring', 'raping'], - 'paris': ['paris', 'parsi', 'sarip'], - 'parish': ['parish', 'raphis', 'rhapis'], - 'parished': ['diphaser', 'parished', 'raphides', 'sephardi'], - 'parison': ['parison', 'soprani'], - 'parity': ['parity', 'piraty'], - 'parkee': ['parkee', 'peaker'], - 'parker': ['parker', 'repark'], - 'parlatory': ['parlatory', 'portrayal'], - 'parle': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'parley': ['parley', 'pearly', 'player', 'replay'], - 'parliament': ['palermitan', 'parliament'], - 'parly': ['parly', 'pylar', 'pyral'], - 'parma': ['param', 'parma', 'praam'], - 'parmesan': ['parmesan', 'spearman'], - 'parnel': ['parnel', 'planer', 'replan'], - 'paroch': ['carhop', 'paroch'], - 'parochialism': ['aphorismical', 'parochialism'], - 'parochine': ['canephroi', 'parochine'], - 'parodic': ['parodic', 'picador'], - 'paroecism': ['paroecism', 'premosaic'], - 'parol': ['parol', 'polar', 'poral', 'proal'], - 'parosela': ['parosela', 'psoralea'], - 'parosteal': ['parosteal', 'pastorale'], - 'parostotic': ['parostotic', 'postaortic'], - 'parotia': ['apiator', 'atropia', 'parotia'], - 'parotic': ['apricot', 'atropic', 'parotic', 'patrico'], - 'parotid': ['dioptra', 'parotid'], - 'parotitic': ['parotitic', 'patriotic'], - 'parotitis': ['parotitis', 'topiarist'], - 'parous': ['parous', 'upsoar'], - 'parovarium': ['parovarium', 'vaporarium'], - 'parrot': ['parrot', 'raptor'], - 'parroty': ['parroty', 'portray', 'tropary'], - 'parsable': ['parsable', 'prebasal', 'sparable'], - 'parse': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'], - 'parsec': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'], - 'parsee': ['parsee', 'persae', 'persea', 'serape'], - 'parser': ['parser', 'rasper', 'sparer'], - 'parsi': ['paris', 'parsi', 'sarip'], - 'parsley': ['parsley', 'pyrales', 'sparely', 'splayer'], - 'parsoned': ['parsoned', 'spadrone'], - 'parsonese': ['parsonese', 'preseason'], - 'parsonic': ['parsonic', 'scoparin'], - 'part': ['part', 'prat', 'rapt', 'tarp', 'trap'], - 'partan': ['partan', 'tarpan'], - 'parted': ['depart', 'parted', 'petard'], - 'partedness': ['depressant', 'partedness'], - 'parter': ['parter', 'prater'], - 'parthian': ['parthian', 'taphrina'], - 'partial': ['partial', 'patrial'], - 'partialistic': ['iatraliptics', 'partialistic'], - 'particle': ['particle', 'plicater', 'prelatic'], - 'particulate': ['catapultier', 'particulate'], - 'partigen': ['partigen', 'tapering'], - 'partile': ['partile', 'plaiter', 'replait'], - 'partimen': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'], - 'partinium': ['impuritan', 'partinium'], - 'partisan': ['aspirant', 'partisan', 'spartina'], - 'partite': ['partite', 'tearpit'], - 'partitioned': ['departition', 'partitioned', 'trepidation'], - 'partitioner': ['partitioner', 'repartition'], - 'partlet': ['partlet', 'platter', 'prattle'], - 'partly': ['paltry', 'partly', 'raptly'], - 'parto': ['aport', 'parto', 'porta'], - 'parture': ['parture', 'rapture'], - 'party': ['party', 'trypa'], - 'parulis': ['parulis', 'spirula', 'uprisal'], - 'parure': ['parure', 'uprear'], - 'parvoline': ['overplain', 'parvoline'], - 'pasan': ['pasan', 'sapan'], - 'pasch': ['chaps', 'pasch'], - 'pascha': ['pascha', 'scapha'], - 'paschite': ['paschite', 'pastiche', 'pistache', 'scaphite'], - 'pascual': ['capsula', 'pascual', 'scapula'], - 'pash': ['hasp', 'pash', 'psha', 'shap'], - 'pasha': ['asaph', 'pasha'], - 'pashm': ['pashm', 'phasm'], - 'pashto': ['pashto', 'pathos', 'potash'], - 'pasi': ['apis', 'pais', 'pasi', 'saip'], - 'passer': ['passer', 'repass', 'sparse'], - 'passional': ['passional', 'sponsalia'], - 'passo': ['passo', 'psoas'], - 'passout': ['outpass', 'passout'], - 'passover': ['overpass', 'passover'], - 'past': ['past', 'spat', 'stap', 'taps'], - 'paste': ['paste', 'septa', 'spate'], - 'pastel': ['pastel', 'septal', 'staple'], - 'paster': ['paster', 'repast', 'trapes'], - 'pasterer': ['pasterer', 'strepera'], - 'pasteur': ['pasteur', 'pasture', 'upstare'], - 'pastiche': ['paschite', 'pastiche', 'pistache', 'scaphite'], - 'pasticheur': ['curateship', 'pasticheur'], - 'pastil': ['alpist', 'pastil', 'spital'], - 'pastile': ['aliptes', 'pastile', 'talipes'], - 'pastime': ['impaste', 'pastime'], - 'pastimer': ['maspiter', 'pastimer', 'primates'], - 'pastophorium': ['amphitropous', 'pastophorium'], - 'pastophorus': ['apostrophus', 'pastophorus'], - 'pastor': ['asport', 'pastor', 'sproat'], - 'pastoral': ['pastoral', 'proatlas'], - 'pastorale': ['parosteal', 'pastorale'], - 'pastose': ['pastose', 'petasos'], - 'pastural': ['pastural', 'spatular'], - 'pasture': ['pasteur', 'pasture', 'upstare'], - 'pasty': ['pasty', 'patsy'], - 'pasul': ['palus', 'pasul'], - 'pat': ['apt', 'pat', 'tap'], - 'pata': ['atap', 'pata', 'tapa'], - 'patao': ['opata', 'patao', 'tapoa'], - 'patarin': ['patarin', 'tarapin'], - 'patarine': ['patarine', 'tarpeian'], - 'patas': ['patas', 'tapas'], - 'patch': ['chapt', 'pacht', 'patch'], - 'patcher': ['chapter', 'patcher', 'repatch'], - 'patchery': ['patchery', 'petchary'], - 'pate': ['pate', 'peat', 'tape', 'teap'], - 'patel': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'paten': ['enapt', 'paten', 'penta', 'tapen'], - 'patener': ['patener', 'pearten', 'petrean', 'terpane'], - 'patent': ['patent', 'patten', 'tapnet'], - 'pater': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'], - 'patera': ['aptera', 'parate', 'patera'], - 'paternal': ['parental', 'paternal', 'prenatal'], - 'paternalism': ['parentalism', 'paternalism'], - 'paternalist': ['intraseptal', 'paternalist', 'prenatalist'], - 'paternality': ['parentality', 'paternality'], - 'paternally': ['parentally', 'paternally', 'prenatally'], - 'paternoster': ['paternoster', 'prosternate', 'transportee'], - 'patesi': ['patesi', 'pietas'], - 'pathed': ['heptad', 'pathed'], - 'pathic': ['haptic', 'pathic'], - 'pathlet': ['pathlet', 'telpath'], - 'pathogen': ['heptagon', 'pathogen'], - 'pathologicoanatomic': ['anatomicopathologic', 'pathologicoanatomic'], - 'pathologicoanatomical': ['anatomicopathological', 'pathologicoanatomical'], - 'pathologicoclinical': ['clinicopathological', 'pathologicoclinical'], - 'pathonomy': ['monopathy', 'pathonomy'], - 'pathophoric': ['haptophoric', 'pathophoric'], - 'pathophorous': ['haptophorous', 'pathophorous'], - 'pathos': ['pashto', 'pathos', 'potash'], - 'pathy': ['pathy', 'typha'], - 'patiently': ['patiently', 'platynite'], - 'patina': ['aptian', 'patina', 'taipan'], - 'patine': ['pantie', 'patine'], - 'patined': ['depaint', 'inadept', 'painted', 'patined'], - 'patio': ['patio', 'taipo', 'topia'], - 'patly': ['aptly', 'patly', 'platy', 'typal'], - 'patness': ['aptness', 'patness'], - 'pato': ['atop', 'pato'], - 'patola': ['patola', 'tapalo'], - 'patrial': ['partial', 'patrial'], - 'patriarch': ['patriarch', 'phratriac'], - 'patrice': ['paretic', 'patrice', 'picrate'], - 'patricide': ['dipicrate', 'patricide', 'pediatric'], - 'patrico': ['apricot', 'atropic', 'parotic', 'patrico'], - 'patrilocal': ['allopatric', 'patrilocal'], - 'patriotic': ['parotitic', 'patriotic'], - 'patroclinous': ['patroclinous', 'pratincolous'], - 'patrol': ['patrol', 'portal', 'tropal'], - 'patron': ['patron', 'tarpon'], - 'patroness': ['patroness', 'transpose'], - 'patronite': ['antitrope', 'patronite', 'tritanope'], - 'patronymic': ['importancy', 'patronymic', 'pyromantic'], - 'patsy': ['pasty', 'patsy'], - 'patte': ['patte', 'tapet'], - 'pattee': ['pattee', 'tapete'], - 'patten': ['patent', 'patten', 'tapnet'], - 'pattener': ['pattener', 'repatent'], - 'patterer': ['patterer', 'pretreat'], - 'pattern': ['pattern', 'reptant'], - 'patterner': ['patterner', 'repattern'], - 'patu': ['patu', 'paut', 'tapu'], - 'patulent': ['patulent', 'petulant'], - 'pau': ['pau', 'pua'], - 'paul': ['paul', 'upla'], - 'paula': ['palau', 'paula'], - 'paulian': ['apulian', 'paulian', 'paulina'], - 'paulie': ['alpieu', 'paulie'], - 'paulin': ['paulin', 'pulian'], - 'paulina': ['apulian', 'paulian', 'paulina'], - 'paulinistic': ['paniculitis', 'paulinistic'], - 'paulinus': ['nauplius', 'paulinus'], - 'paulist': ['paulist', 'stipula'], - 'paup': ['paup', 'pupa'], - 'paut': ['patu', 'paut', 'tapu'], - 'paver': ['paver', 'verpa'], - 'pavid': ['pavid', 'vapid'], - 'pavidity': ['pavidity', 'vapidity'], - 'pavier': ['pavier', 'vipera'], - 'pavisor': ['pavisor', 'proavis'], - 'paw': ['paw', 'wap'], - 'pawner': ['enwrap', 'pawner', 'repawn'], - 'pay': ['pay', 'pya', 'yap'], - 'payer': ['apery', 'payer', 'repay'], - 'payroll': ['payroll', 'polarly'], - 'pea': ['ape', 'pea'], - 'peach': ['chape', 'cheap', 'peach'], - 'peachen': ['cheapen', 'peachen'], - 'peachery': ['cheapery', 'peachery'], - 'peachlet': ['chapelet', 'peachlet'], - 'peacoat': ['opacate', 'peacoat'], - 'peag': ['gape', 'page', 'peag', 'pega'], - 'peaker': ['parkee', 'peaker'], - 'peal': ['leap', 'lepa', 'pale', 'peal', 'plea'], - 'pealike': ['apelike', 'pealike'], - 'pean': ['nape', 'neap', 'nepa', 'pane', 'pean'], - 'pear': ['aper', 'pare', 'pear', 'rape', 'reap'], - 'pearl': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'pearled': ['pearled', 'pedaler', 'pleader', 'replead'], - 'pearlet': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'], - 'pearlin': ['pearlin', 'plainer', 'praline'], - 'pearlish': ['earlship', 'pearlish'], - 'pearlsides': ['displeaser', 'pearlsides'], - 'pearly': ['parley', 'pearly', 'player', 'replay'], - 'pearmain': ['amperian', 'paramine', 'pearmain'], - 'peart': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'], - 'pearten': ['patener', 'pearten', 'petrean', 'terpane'], - 'peartly': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'], - 'peartness': ['apertness', 'peartness', 'taperness'], - 'peasantry': ['peasantry', 'synaptera'], - 'peat': ['pate', 'peat', 'tape', 'teap'], - 'peatman': ['peatman', 'tapeman'], - 'peatship': ['happiest', 'peatship'], - 'peccation': ['acception', 'peccation'], - 'peckerwood': ['peckerwood', 'woodpecker'], - 'pecos': ['copse', 'pecos', 'scope'], - 'pectin': ['incept', 'pectin'], - 'pectinate': ['pectinate', 'pencatite'], - 'pectination': ['antinepotic', 'pectination'], - 'pectinatopinnate': ['pectinatopinnate', 'pinnatopectinate'], - 'pectinoid': ['depiction', 'pectinoid'], - 'pectora': ['coperta', 'pectora', 'porcate'], - 'pecunious': ['pecunious', 'puniceous'], - 'peda': ['depa', 'peda'], - 'pedal': ['padle', 'paled', 'pedal', 'plead'], - 'pedaler': ['pearled', 'pedaler', 'pleader', 'replead'], - 'pedalier': ['pedalier', 'perlidae'], - 'pedalion': ['lapideon', 'palinode', 'pedalion'], - 'pedalism': ['misplead', 'pedalism'], - 'pedalist': ['dispetal', 'pedalist'], - 'pedaliter': ['pedaliter', 'predetail'], - 'pedant': ['pedant', 'pentad'], - 'pedantess': ['adeptness', 'pedantess'], - 'pedantic': ['pedantic', 'pentacid'], - 'pedary': ['pedary', 'preday'], - 'pederastic': ['discrepate', 'pederastic'], - 'pedes': ['pedes', 'speed'], - 'pedesis': ['despise', 'pedesis'], - 'pedestrial': ['pedestrial', 'pilastered'], - 'pediatric': ['dipicrate', 'patricide', 'pediatric'], - 'pedicel': ['pedicel', 'pedicle'], - 'pedicle': ['pedicel', 'pedicle'], - 'pedicular': ['crepidula', 'pedicular'], - 'pediculi': ['lupicide', 'pediculi', 'pulicide'], - 'pedimana': ['pandemia', 'pedimana'], - 'pedocal': ['lacepod', 'pedocal', 'placode'], - 'pedometrician': ['pedometrician', 'premedication'], - 'pedrail': ['pedrail', 'predial'], - 'pedro': ['doper', 'pedro', 'pored'], - 'peed': ['deep', 'peed'], - 'peek': ['keep', 'peek'], - 'peel': ['leep', 'peel', 'pele'], - 'peelman': ['empanel', 'emplane', 'peelman'], - 'peen': ['neep', 'peen'], - 'peerly': ['peerly', 'yelper'], - 'pega': ['gape', 'page', 'peag', 'pega'], - 'peho': ['hope', 'peho'], - 'peiser': ['espier', 'peiser'], - 'peitho': ['ethiop', 'ophite', 'peitho'], - 'peixere': ['expiree', 'peixere'], - 'pekan': ['knape', 'pekan'], - 'pelage': ['paegel', 'paegle', 'pelage'], - 'pelasgoi': ['pelasgoi', 'spoilage'], - 'pele': ['leep', 'peel', 'pele'], - 'pelean': ['alpeen', 'lenape', 'pelean'], - 'pelecani': ['capeline', 'pelecani'], - 'pelecanus': ['encapsule', 'pelecanus'], - 'pelias': ['espial', 'lipase', 'pelias'], - 'pelican': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'], - 'pelick': ['pelick', 'pickle'], - 'pelides': ['pelides', 'seedlip'], - 'pelidnota': ['pelidnota', 'planetoid'], - 'pelike': ['kelpie', 'pelike'], - 'pelisse': ['pelisse', 'pieless'], - 'pelite': ['leepit', 'pelite', 'pielet'], - 'pellation': ['pellation', 'pollinate'], - 'pellotine': ['pellotine', 'pollenite'], - 'pelmet': ['pelmet', 'temple'], - 'pelon': ['pelon', 'pleon'], - 'pelops': ['pelops', 'peplos'], - 'pelorian': ['pelorian', 'peronial', 'proalien'], - 'peloric': ['peloric', 'precoil'], - 'pelorus': ['leprous', 'pelorus', 'sporule'], - 'pelota': ['alepot', 'pelota'], - 'pelta': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'peltandra': ['leptandra', 'peltandra'], - 'peltast': ['peltast', 'spattle'], - 'peltate': ['palette', 'peltate'], - 'peltation': ['peltation', 'potential'], - 'pelter': ['pelter', 'petrel'], - 'peltiform': ['leptiform', 'peltiform'], - 'pelting': ['pelting', 'petling'], - 'peltry': ['peltry', 'pertly'], - 'pelu': ['lupe', 'pelu', 'peul', 'pule'], - 'pelusios': ['epulosis', 'pelusios'], - 'pelycography': ['pelycography', 'pyrgocephaly'], - 'pemican': ['campine', 'pemican'], - 'pen': ['nep', 'pen'], - 'penal': ['alpen', 'nepal', 'panel', 'penal', 'plane'], - 'penalist': ['panelist', 'pantelis', 'penalist', 'plastein'], - 'penalty': ['aplenty', 'penalty'], - 'penang': ['pangen', 'penang'], - 'penates': ['penates', 'septane'], - 'pencatite': ['pectinate', 'pencatite'], - 'penciled': ['depencil', 'penciled', 'pendicle'], - 'pencilry': ['pencilry', 'princely'], - 'penda': ['paned', 'penda'], - 'pendicle': ['depencil', 'penciled', 'pendicle'], - 'pendulant': ['pendulant', 'unplanted'], - 'pendular': ['pendular', 'underlap', 'uplander'], - 'pendulate': ['pendulate', 'unpleated'], - 'pendulation': ['pendulation', 'pennatuloid'], - 'pendulum': ['pendulum', 'unlumped', 'unplumed'], - 'penetrable': ['penetrable', 'repentable'], - 'penetrance': ['penetrance', 'repentance'], - 'penetrant': ['penetrant', 'repentant'], - 'penial': ['alpine', 'nepali', 'penial', 'pineal'], - 'penis': ['penis', 'snipe', 'spine'], - 'penitencer': ['penitencer', 'pertinence'], - 'penman': ['nepman', 'penman'], - 'penna': ['panne', 'penna'], - 'pennage': ['pangene', 'pennage'], - 'pennate': ['pennate', 'pentane'], - 'pennatulid': ['pennatulid', 'pinnulated'], - 'pennatuloid': ['pendulation', 'pennatuloid'], - 'pennia': ['nanpie', 'pennia', 'pinnae'], - 'pennisetum': ['pennisetum', 'septennium'], - 'pensioner': ['pensioner', 'repension'], - 'pensive': ['pensive', 'vespine'], - 'penster': ['penster', 'present', 'serpent', 'strepen'], - 'penta': ['enapt', 'paten', 'penta', 'tapen'], - 'pentace': ['pentace', 'tepanec'], - 'pentacid': ['pedantic', 'pentacid'], - 'pentad': ['pedant', 'pentad'], - 'pentadecoic': ['adenectopic', 'pentadecoic'], - 'pentail': ['pantile', 'pentail', 'platine', 'talpine'], - 'pentamerid': ['pandermite', 'pentamerid'], - 'pentameroid': ['pentameroid', 'predominate'], - 'pentane': ['pennate', 'pentane'], - 'pentaploid': ['deoppilant', 'pentaploid'], - 'pentathionic': ['antiphonetic', 'pentathionic'], - 'pentatomic': ['camptonite', 'pentatomic'], - 'pentitol': ['pentitol', 'pointlet'], - 'pentoic': ['entopic', 'nepotic', 'pentoic'], - 'pentol': ['lepton', 'pentol'], - 'pentose': ['pentose', 'posteen'], - 'pentyl': ['pentyl', 'plenty'], - 'penult': ['penult', 'punlet', 'puntel'], - 'peon': ['nope', 'open', 'peon', 'pone'], - 'peony': ['peony', 'poney'], - 'peopler': ['peopler', 'popeler'], - 'peorian': ['apeiron', 'peorian'], - 'peplos': ['pelops', 'peplos'], - 'peplum': ['peplum', 'pumple'], - 'peplus': ['peplus', 'supple'], - 'pepo': ['pepo', 'pope'], - 'per': ['per', 'rep'], - 'peracid': ['epacrid', 'peracid', 'preacid'], - 'peract': ['carpet', 'peract', 'preact'], - 'peracute': ['peracute', 'preacute'], - 'peradventure': ['peradventure', 'preadventure'], - 'perakim': ['perakim', 'permiak', 'rampike'], - 'peramble': ['peramble', 'preamble'], - 'perambulate': ['perambulate', 'preambulate'], - 'perambulation': ['perambulation', 'preambulation'], - 'perambulatory': ['perambulatory', 'preambulatory'], - 'perates': ['perates', 'repaste', 'sperate'], - 'perbend': ['perbend', 'prebend'], - 'perborate': ['perborate', 'prorebate', 'reprobate'], - 'perca': ['caper', 'crape', 'pacer', 'perca', 'recap'], - 'percale': ['percale', 'replace'], - 'percaline': ['percaline', 'periclean'], - 'percent': ['percent', 'precent'], - 'percept': ['percept', 'precept'], - 'perception': ['perception', 'preception'], - 'perceptionism': ['misperception', 'perceptionism'], - 'perceptive': ['perceptive', 'preceptive'], - 'perceptively': ['perceptively', 'preceptively'], - 'perceptual': ['perceptual', 'preceptual'], - 'perceptually': ['perceptually', 'preceptually'], - 'percha': ['aperch', 'eparch', 'percha', 'preach'], - 'perchloric': ['perchloric', 'prechloric'], - 'percid': ['percid', 'priced'], - 'perclose': ['perclose', 'preclose'], - 'percoidea': ['adipocere', 'percoidea'], - 'percolate': ['percolate', 'prelocate'], - 'percolation': ['neotropical', 'percolation'], - 'percompound': ['percompound', 'precompound'], - 'percontation': ['percontation', 'pernoctation'], - 'perculsion': ['perculsion', 'preclusion'], - 'perculsive': ['perculsive', 'preclusive'], - 'percurrent': ['percurrent', 'precurrent'], - 'percursory': ['percursory', 'precursory'], - 'percussion': ['croupiness', 'percussion', 'supersonic'], - 'percussioner': ['percussioner', 'repercussion'], - 'percussor': ['percussor', 'procuress'], - 'percy': ['crepy', 'cypre', 'percy'], - 'perdicine': ['perdicine', 'recipiend'], - 'perdition': ['direption', 'perdition', 'tropidine'], - 'perdu': ['drupe', 'duper', 'perdu', 'prude', 'pured'], - 'peregrina': ['peregrina', 'pregainer'], - 'pereion': ['pereion', 'pioneer'], - 'perendure': ['perendure', 'underpeer'], - 'peres': ['peres', 'perse', 'speer', 'spree'], - 'perfect': ['perfect', 'prefect'], - 'perfected': ['perfected', 'predefect'], - 'perfection': ['frontpiece', 'perfection'], - 'perfectly': ['perfectly', 'prefectly'], - 'perfervid': ['perfervid', 'prefervid'], - 'perfoliation': ['perfoliation', 'prefoliation'], - 'perforative': ['perforative', 'prefavorite'], - 'perform': ['perform', 'preform'], - 'performant': ['performant', 'preformant'], - 'performative': ['performative', 'preformative'], - 'performer': ['performer', 'prereform', 'reperform'], - 'pergamic': ['crimpage', 'pergamic'], - 'perhaps': ['perhaps', 'prehaps'], - 'perhazard': ['perhazard', 'prehazard'], - 'peri': ['peri', 'pier', 'ripe'], - 'periacinal': ['epicranial', 'periacinal'], - 'perianal': ['airplane', 'perianal'], - 'perianth': ['perianth', 'triphane'], - 'periapt': ['periapt', 'rappite'], - 'periaster': ['periaster', 'sparterie'], - 'pericardiacophrenic': ['pericardiacophrenic', 'phrenicopericardiac'], - 'pericardiopleural': ['pericardiopleural', 'pleuropericardial'], - 'perichete': ['perichete', 'perithece'], - 'periclase': ['episclera', 'periclase'], - 'periclean': ['percaline', 'periclean'], - 'pericles': ['eclipser', 'pericles', 'resplice'], - 'pericopal': ['pericopal', 'periploca'], - 'periculant': ['periculant', 'unprelatic'], - 'peridental': ['interplead', 'peridental'], - 'peridiastolic': ['peridiastolic', 'periodicalist', 'proidealistic'], - 'peridot': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'], - 'perigone': ['perigone', 'pigeoner'], - 'peril': ['peril', 'piler', 'plier'], - 'perilous': ['perilous', 'uropsile'], - 'perimeter': ['perimeter', 'peritreme'], - 'perine': ['neiper', 'perine', 'pirene', 'repine'], - 'perineovaginal': ['perineovaginal', 'vaginoperineal'], - 'periodate': ['periodate', 'proetidae', 'proteidae'], - 'periodicalist': ['peridiastolic', 'periodicalist', 'proidealistic'], - 'periodontal': ['deploration', 'periodontal'], - 'periost': ['periost', 'porites', 'reposit', 'riposte'], - 'periosteal': ['periosteal', 'praseolite'], - 'periotic': ['epirotic', 'periotic'], - 'peripatetic': ['peripatetic', 'precipitate'], - 'peripatidae': ['peripatidae', 'peripatidea'], - 'peripatidea': ['peripatidae', 'peripatidea'], - 'periplaneta': ['periplaneta', 'prepalatine'], - 'periploca': ['pericopal', 'periploca'], - 'periplus': ['periplus', 'supplier'], - 'periportal': ['periportal', 'peritropal'], - 'periproct': ['cotripper', 'periproct'], - 'peripterous': ['peripterous', 'prepositure'], - 'perique': ['perique', 'repique'], - 'perirectal': ['perirectal', 'prerecital'], - 'periscian': ['periscian', 'precisian'], - 'periscopal': ['periscopal', 'sapropelic'], - 'perish': ['perish', 'reship'], - 'perished': ['hesperid', 'perished'], - 'perishment': ['perishment', 'reshipment'], - 'perisomal': ['perisomal', 'semipolar'], - 'perisome': ['perisome', 'promisee', 'reimpose'], - 'perispome': ['perispome', 'preimpose'], - 'peristole': ['epistoler', 'peristole', 'perseitol', 'pistoleer'], - 'peristoma': ['epistroma', 'peristoma'], - 'peristomal': ['peristomal', 'prestomial'], - 'peristylos': ['peristylos', 'pterylosis'], - 'perit': ['perit', 'retip', 'tripe'], - 'perite': ['perite', 'petrie', 'pieter'], - 'peritenon': ['interpone', 'peritenon', 'pinnotere', 'preintone'], - 'perithece': ['perichete', 'perithece'], - 'peritomize': ['epitomizer', 'peritomize'], - 'peritomous': ['outpromise', 'peritomous'], - 'peritreme': ['perimeter', 'peritreme'], - 'peritrichous': ['courtiership', 'peritrichous'], - 'peritroch': ['chiropter', 'peritroch'], - 'peritropal': ['periportal', 'peritropal'], - 'peritropous': ['peritropous', 'proprietous'], - 'perkin': ['perkin', 'pinker'], - 'perknite': ['perknite', 'peterkin'], - 'perla': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'perle': ['leper', 'perle', 'repel'], - 'perlection': ['perlection', 'prelection'], - 'perlidae': ['pedalier', 'perlidae'], - 'perlingual': ['perlingual', 'prelingual'], - 'perlite': ['perlite', 'reptile'], - 'perlitic': ['perlitic', 'triplice'], - 'permeameter': ['amperemeter', 'permeameter'], - 'permeance': ['permeance', 'premenace'], - 'permeant': ['permeant', 'peterman'], - 'permeation': ['permeation', 'preominate'], - 'permiak': ['perakim', 'permiak', 'rampike'], - 'permissibility': ['impressibility', 'permissibility'], - 'permissible': ['impressible', 'permissible'], - 'permissibleness': ['impressibleness', 'permissibleness'], - 'permissibly': ['impressibly', 'permissibly'], - 'permission': ['impression', 'permission'], - 'permissive': ['impressive', 'permissive'], - 'permissively': ['impressively', 'permissively'], - 'permissiveness': ['impressiveness', 'permissiveness'], - 'permitter': ['permitter', 'pretermit'], - 'permixture': ['permixture', 'premixture'], - 'permonosulphuric': ['monopersulphuric', 'permonosulphuric'], - 'permutation': ['importunate', 'permutation'], - 'pernasal': ['pernasal', 'prenasal'], - 'pernis': ['pernis', 'respin', 'sniper'], - 'pernoctation': ['percontation', 'pernoctation'], - 'pernor': ['pernor', 'perron'], - 'pernyi': ['pernyi', 'pinery'], - 'peronial': ['pelorian', 'peronial', 'proalien'], - 'peropus': ['peropus', 'purpose'], - 'peroral': ['peroral', 'preoral'], - 'perorally': ['perorally', 'preorally'], - 'perorate': ['perorate', 'retepora'], - 'perosmate': ['perosmate', 'sematrope'], - 'perosmic': ['comprise', 'perosmic'], - 'perotic': ['perotic', 'proteic', 'tropeic'], - 'perpera': ['paperer', 'perpera', 'prepare', 'repaper'], - 'perpetualist': ['perpetualist', 'pluriseptate'], - 'perplexer': ['perplexer', 'reperplex'], - 'perron': ['pernor', 'perron'], - 'perry': ['perry', 'pryer'], - 'persae': ['parsee', 'persae', 'persea', 'serape'], - 'persalt': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'], - 'perscribe': ['perscribe', 'prescribe'], - 'perse': ['peres', 'perse', 'speer', 'spree'], - 'persea': ['parsee', 'persae', 'persea', 'serape'], - 'perseid': ['perseid', 'preside'], - 'perseitol': ['epistoler', 'peristole', 'perseitol', 'pistoleer'], - 'perseity': ['perseity', 'speerity'], - 'persian': ['persian', 'prasine', 'saprine'], - 'persic': ['crepis', 'cripes', 'persic', 'precis', 'spicer'], - 'persico': ['ceriops', 'persico'], - 'persism': ['impress', 'persism', 'premiss'], - 'persist': ['persist', 'spriest'], - 'persistent': ['persistent', 'presentist', 'prettiness'], - 'personalia': ['palaeornis', 'personalia'], - 'personalistic': ['personalistic', 'pictorialness'], - 'personate': ['esperanto', 'personate'], - 'personed': ['personed', 'responde'], - 'pert': ['pert', 'petr', 'terp'], - 'pertain': ['painter', 'pertain', 'pterian', 'repaint'], - 'perten': ['perten', 'repent'], - 'perthite': ['perthite', 'tephrite'], - 'perthitic': ['perthitic', 'tephritic'], - 'pertinacity': ['antipyretic', 'pertinacity'], - 'pertinence': ['penitencer', 'pertinence'], - 'pertly': ['peltry', 'pertly'], - 'perturbational': ['perturbational', 'protuberantial'], - 'pertussal': ['pertussal', 'supersalt'], - 'perty': ['perty', 'typer'], - 'peru': ['peru', 'prue', 'pure'], - 'perugian': ['pagurine', 'perugian'], - 'peruke': ['keuper', 'peruke'], - 'perula': ['epural', 'perula', 'pleura'], - 'perun': ['perun', 'prune'], - 'perusable': ['perusable', 'superable'], - 'perusal': ['perusal', 'serpula'], - 'peruse': ['peruse', 'respue'], - 'pervade': ['deprave', 'pervade'], - 'pervader': ['depraver', 'pervader'], - 'pervadingly': ['depravingly', 'pervadingly'], - 'perverse': ['perverse', 'preserve'], - 'perversion': ['perversion', 'preversion'], - 'pervious': ['pervious', 'previous', 'viperous'], - 'perviously': ['perviously', 'previously', 'viperously'], - 'perviousness': ['perviousness', 'previousness', 'viperousness'], - 'pesa': ['apse', 'pesa', 'spae'], - 'pesach': ['cephas', 'pesach'], - 'pesah': ['heaps', 'pesah', 'phase', 'shape'], - 'peseta': ['asteep', 'peseta'], - 'peso': ['epos', 'peso', 'pose', 'sope'], - 'pess': ['pess', 'seps'], - 'pessoner': ['pessoner', 'response'], - 'pest': ['pest', 'sept', 'spet', 'step'], - 'peste': ['peste', 'steep'], - 'pester': ['pester', 'preset', 'restep', 'streep'], - 'pesthole': ['heelpost', 'pesthole'], - 'pesticidal': ['pesticidal', 'septicidal'], - 'pestiferous': ['pestiferous', 'septiferous'], - 'pestle': ['pestle', 'spleet'], - 'petal': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'petalia': ['palaite', 'petalia', 'pileata'], - 'petaline': ['petaline', 'tapeline'], - 'petalism': ['petalism', 'septimal'], - 'petalless': ['petalless', 'plateless', 'pleatless'], - 'petallike': ['petallike', 'platelike'], - 'petaloid': ['opdalite', 'petaloid'], - 'petalon': ['lepanto', 'nepotal', 'petalon', 'polenta'], - 'petard': ['depart', 'parted', 'petard'], - 'petary': ['petary', 'pratey'], - 'petasos': ['pastose', 'petasos'], - 'petchary': ['patchery', 'petchary'], - 'petechial': ['epithecal', 'petechial', 'phacelite'], - 'petechiate': ['epithecate', 'petechiate'], - 'peteman': ['peteman', 'tempean'], - 'peter': ['erept', 'peter', 'petre'], - 'peterkin': ['perknite', 'peterkin'], - 'peterman': ['permeant', 'peterman'], - 'petiolary': ['epilatory', 'petiolary'], - 'petiole': ['petiole', 'pilotee'], - 'petioled': ['lepidote', 'petioled'], - 'petitionary': ['opiniatrety', 'petitionary'], - 'petitioner': ['petitioner', 'repetition'], - 'petiveria': ['aperitive', 'petiveria'], - 'petling': ['pelting', 'petling'], - 'peto': ['peto', 'poet', 'pote', 'tope'], - 'petr': ['pert', 'petr', 'terp'], - 'petre': ['erept', 'peter', 'petre'], - 'petrea': ['petrea', 'repeat', 'retape'], - 'petrean': ['patener', 'pearten', 'petrean', 'terpane'], - 'petrel': ['pelter', 'petrel'], - 'petricola': ['carpolite', 'petricola'], - 'petrie': ['perite', 'petrie', 'pieter'], - 'petrine': ['petrine', 'terpine'], - 'petrochemical': ['cephalometric', 'petrochemical'], - 'petrogale': ['petrogale', 'petrolage', 'prolegate'], - 'petrographer': ['petrographer', 'pterographer'], - 'petrographic': ['petrographic', 'pterographic'], - 'petrographical': ['petrographical', 'pterographical'], - 'petrographically': ['petrographically', 'pterylographical'], - 'petrography': ['petrography', 'pterography', 'typographer'], - 'petrol': ['petrol', 'replot'], - 'petrolage': ['petrogale', 'petrolage', 'prolegate'], - 'petrolean': ['petrolean', 'rantepole'], - 'petrolic': ['petrolic', 'plerotic'], - 'petrologically': ['petrologically', 'pterylological'], - 'petrosa': ['esparto', 'petrosa', 'seaport'], - 'petrosal': ['petrosal', 'polestar'], - 'petrosquamosal': ['petrosquamosal', 'squamopetrosal'], - 'petrous': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'], - 'petticoated': ['depetticoat', 'petticoated'], - 'petulant': ['patulent', 'petulant'], - 'petune': ['neetup', 'petune'], - 'peul': ['lupe', 'pelu', 'peul', 'pule'], - 'pewy': ['pewy', 'wype'], - 'peyote': ['peyote', 'poteye'], - 'peyotl': ['peyotl', 'poetly'], - 'phacelia': ['acephali', 'phacelia'], - 'phacelite': ['epithecal', 'petechial', 'phacelite'], - 'phacoid': ['dapicho', 'phacoid'], - 'phacolite': ['hopcalite', 'phacolite'], - 'phacolysis': ['pachylosis', 'phacolysis'], - 'phacometer': ['pachometer', 'phacometer'], - 'phaethonic': ['phaethonic', 'theophanic'], - 'phaeton': ['phaeton', 'phonate'], - 'phagocytism': ['mycophagist', 'phagocytism'], - 'phalaecian': ['acephalina', 'phalaecian'], - 'phalangium': ['gnaphalium', 'phalangium'], - 'phalera': ['phalera', 'raphael'], - 'phanariot': ['parathion', 'phanariot'], - 'phanerogam': ['anemograph', 'phanerogam'], - 'phanerogamic': ['anemographic', 'phanerogamic'], - 'phanerogamy': ['anemography', 'phanerogamy'], - 'phanic': ['apinch', 'chapin', 'phanic'], - 'phano': ['phano', 'pohna'], - 'pharaonic': ['anaphoric', 'pharaonic'], - 'pharaonical': ['anaphorical', 'pharaonical'], - 'phare': ['hepar', 'phare', 'raphe'], - 'pharian': ['pharian', 'piranha'], - 'pharisaic': ['chirapsia', 'pharisaic'], - 'pharisean': ['pharisean', 'seraphina'], - 'pharisee': ['hesperia', 'pharisee'], - 'phariseeism': ['hemiparesis', 'phariseeism'], - 'pharmacolite': ['metaphorical', 'pharmacolite'], - 'pharyngolaryngeal': ['laryngopharyngeal', 'pharyngolaryngeal'], - 'pharyngolaryngitis': ['laryngopharyngitis', 'pharyngolaryngitis'], - 'pharyngorhinitis': ['pharyngorhinitis', 'rhinopharyngitis'], - 'phase': ['heaps', 'pesah', 'phase', 'shape'], - 'phaseless': ['phaseless', 'shapeless'], - 'phaseolin': ['esiphonal', 'phaseolin'], - 'phasis': ['aspish', 'phasis'], - 'phasm': ['pashm', 'phasm'], - 'phasmid': ['dampish', 'madship', 'phasmid'], - 'phasmoid': ['phasmoid', 'shopmaid'], - 'pheal': ['aleph', 'pheal'], - 'pheasant': ['pheasant', 'stephana'], - 'phecda': ['chaped', 'phecda'], - 'phemie': ['imphee', 'phemie'], - 'phenacite': ['phenacite', 'phenicate'], - 'phenate': ['haptene', 'heptane', 'phenate'], - 'phenetole': ['phenetole', 'telephone'], - 'phenic': ['phenic', 'pinche'], - 'phenicate': ['phenacite', 'phenicate'], - 'phenolic': ['phenolic', 'pinochle'], - 'phenological': ['nephological', 'phenological'], - 'phenologist': ['nephologist', 'phenologist'], - 'phenology': ['nephology', 'phenology'], - 'phenosal': ['alphonse', 'phenosal'], - 'pheon': ['pheon', 'phone'], - 'phi': ['hip', 'phi'], - 'phialide': ['hepialid', 'phialide'], - 'philobotanist': ['botanophilist', 'philobotanist'], - 'philocynic': ['cynophilic', 'philocynic'], - 'philohela': ['halophile', 'philohela'], - 'philoneism': ['neophilism', 'philoneism'], - 'philopoet': ['philopoet', 'photopile'], - 'philotheist': ['philotheist', 'theophilist'], - 'philotherian': ['lithonephria', 'philotherian'], - 'philozoic': ['philozoic', 'zoophilic'], - 'philozoist': ['philozoist', 'zoophilist'], - 'philter': ['philter', 'thripel'], - 'phineas': ['inphase', 'phineas'], - 'phiroze': ['orphize', 'phiroze'], - 'phit': ['phit', 'pith'], - 'phlebometritis': ['metrophlebitis', 'phlebometritis'], - 'phleum': ['phleum', 'uphelm'], - 'phloretic': ['phloretic', 'plethoric'], - 'pho': ['hop', 'pho', 'poh'], - 'phobism': ['mobship', 'phobism'], - 'phoca': ['chopa', 'phoca', 'poach'], - 'phocaean': ['phocaean', 'phocaena'], - 'phocaena': ['phocaean', 'phocaena'], - 'phocaenine': ['phocaenine', 'phoenicean'], - 'phocean': ['copehan', 'panoche', 'phocean'], - 'phocian': ['aphonic', 'phocian'], - 'phocine': ['chopine', 'phocine'], - 'phoenicean': ['phocaenine', 'phoenicean'], - 'pholad': ['adolph', 'pholad'], - 'pholas': ['alphos', 'pholas'], - 'pholcidae': ['cephaloid', 'pholcidae'], - 'pholcoid': ['chilopod', 'pholcoid'], - 'phonate': ['phaeton', 'phonate'], - 'phone': ['pheon', 'phone'], - 'phonelescope': ['nepheloscope', 'phonelescope'], - 'phonetical': ['pachnolite', 'phonetical'], - 'phonetics': ['phonetics', 'sphenotic'], - 'phoniatry': ['phoniatry', 'thiopyran'], - 'phonic': ['chopin', 'phonic'], - 'phonogram': ['monograph', 'nomograph', 'phonogram'], - 'phonogramic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'], - 'phonogramically': ['gramophonically', - 'monographically', - 'nomographically', - 'phonogramically'], - 'phonographic': ['graphophonic', 'phonographic'], - 'phonolite': ['lithopone', 'phonolite'], - 'phonometer': ['nephrotome', 'phonometer'], - 'phonometry': ['nephrotomy', 'phonometry'], - 'phonophote': ['phonophote', 'photophone'], - 'phonotyper': ['hypopteron', 'phonotyper'], - 'phoo': ['hoop', 'phoo', 'pooh'], - 'phorone': ['orpheon', 'phorone'], - 'phoronidea': ['phoronidea', 'radiophone'], - 'phos': ['phos', 'posh', 'shop', 'soph'], - 'phosphatide': ['diphosphate', 'phosphatide'], - 'phosphoglycerate': ['glycerophosphate', 'phosphoglycerate'], - 'phossy': ['hyssop', 'phossy', 'sposhy'], - 'phot': ['phot', 'toph'], - 'photechy': ['hypothec', 'photechy'], - 'photochromography': ['chromophotography', 'photochromography'], - 'photochromolithograph': ['chromophotolithograph', 'photochromolithograph'], - 'photochronograph': ['chronophotograph', 'photochronograph'], - 'photochronographic': ['chronophotographic', 'photochronographic'], - 'photochronography': ['chronophotography', 'photochronography'], - 'photogram': ['motograph', 'photogram'], - 'photographer': ['photographer', 'rephotograph'], - 'photoheliography': ['heliophotography', 'photoheliography'], - 'photolithography': ['lithophotography', 'photolithography'], - 'photomacrograph': ['macrophotograph', 'photomacrograph'], - 'photometer': ['photometer', 'prototheme'], - 'photomicrograph': ['microphotograph', 'photomicrograph'], - 'photomicrographic': ['microphotographic', 'photomicrographic'], - 'photomicrography': ['microphotography', 'photomicrography'], - 'photomicroscope': ['microphotoscope', 'photomicroscope'], - 'photophone': ['phonophote', 'photophone'], - 'photopile': ['philopoet', 'photopile'], - 'photostereograph': ['photostereograph', 'stereophotograph'], - 'phototelegraph': ['phototelegraph', 'telephotograph'], - 'phototelegraphic': ['phototelegraphic', 'telephotographic'], - 'phototelegraphy': ['phototelegraphy', 'telephotography'], - 'phototypography': ['phototypography', 'phytotopography'], - 'phrase': ['phrase', 'seraph', 'shaper', 'sherpa'], - 'phraser': ['phraser', 'sharper'], - 'phrasing': ['harpings', 'phrasing'], - 'phrasy': ['phrasy', 'sharpy'], - 'phratriac': ['patriarch', 'phratriac'], - 'phreatic': ['chapiter', 'phreatic'], - 'phrenesia': ['hesperian', 'phrenesia', 'seraphine'], - 'phrenic': ['nephric', 'phrenic', 'pincher'], - 'phrenicopericardiac': ['pericardiacophrenic', 'phrenicopericardiac'], - 'phrenics': ['phrenics', 'pinscher'], - 'phrenitic': ['nephritic', 'phrenitic', 'prehnitic'], - 'phrenitis': ['inspreith', 'nephritis', 'phrenitis'], - 'phrenocardiac': ['nephrocardiac', 'phrenocardiac'], - 'phrenocolic': ['nephrocolic', 'phrenocolic'], - 'phrenocostal': ['phrenocostal', 'plastochrone'], - 'phrenogastric': ['gastrophrenic', 'nephrogastric', 'phrenogastric'], - 'phrenohepatic': ['hepatonephric', 'phrenohepatic'], - 'phrenologist': ['nephrologist', 'phrenologist'], - 'phrenology': ['nephrology', 'phrenology'], - 'phrenopathic': ['nephropathic', 'phrenopathic'], - 'phrenopathy': ['nephropathy', 'phrenopathy'], - 'phrenosplenic': ['phrenosplenic', 'splenonephric', 'splenophrenic'], - 'phronesis': ['nephrosis', 'phronesis'], - 'phronimidae': ['diamorphine', 'phronimidae'], - 'phthalazine': ['naphthalize', 'phthalazine'], - 'phu': ['hup', 'phu'], - 'phycitol': ['cytophil', 'phycitol'], - 'phycocyanin': ['cyanophycin', 'phycocyanin'], - 'phyla': ['haply', 'phyla'], - 'phyletic': ['heptylic', 'phyletic'], - 'phylloceras': ['hyposcleral', 'phylloceras'], - 'phylloclad': ['cladophyll', 'phylloclad'], - 'phyllodial': ['phyllodial', 'phylloidal'], - 'phylloerythrin': ['erythrophyllin', 'phylloerythrin'], - 'phylloidal': ['phyllodial', 'phylloidal'], - 'phyllopodous': ['phyllopodous', 'podophyllous'], - 'phyma': ['phyma', 'yamph'], - 'phymatodes': ['desmopathy', 'phymatodes'], - 'phymosia': ['hyposmia', 'phymosia'], - 'physa': ['physa', 'shapy'], - 'physalite': ['physalite', 'styphelia'], - 'physic': ['physic', 'scyphi'], - 'physicochemical': ['chemicophysical', 'physicochemical'], - 'physicomedical': ['medicophysical', 'physicomedical'], - 'physiocrat': ['physiocrat', 'psychotria'], - 'physiologicoanatomic': ['anatomicophysiologic', 'physiologicoanatomic'], - 'physiopsychological': ['physiopsychological', 'psychophysiological'], - 'physiopsychology': ['physiopsychology', 'psychophysiology'], - 'phytic': ['phytic', 'pitchy', 'pythic', 'typhic'], - 'phytogenesis': ['phytogenesis', 'pythogenesis'], - 'phytogenetic': ['phytogenetic', 'pythogenetic'], - 'phytogenic': ['phytogenic', 'pythogenic', 'typhogenic'], - 'phytogenous': ['phytogenous', 'pythogenous'], - 'phytoid': ['phytoid', 'typhoid'], - 'phytologist': ['hypoglottis', 'phytologist'], - 'phytometer': ['phytometer', 'thermotype'], - 'phytometric': ['phytometric', 'thermotypic'], - 'phytometry': ['phytometry', 'thermotypy'], - 'phytomonas': ['phytomonas', 'somnopathy'], - 'phyton': ['phyton', 'python'], - 'phytonic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'], - 'phytosis': ['phytosis', 'typhosis'], - 'phytotopography': ['phototypography', 'phytotopography'], - 'phytozoa': ['phytozoa', 'zoopathy', 'zoophyta'], - 'piacle': ['epical', 'piacle', 'plaice'], - 'piacular': ['apicular', 'piacular'], - 'pial': ['lipa', 'pail', 'pali', 'pial'], - 'pialyn': ['alypin', 'pialyn'], - 'pian': ['nipa', 'pain', 'pani', 'pian', 'pina'], - 'pianiste': ['pianiste', 'pisanite'], - 'piannet': ['piannet', 'pinnate'], - 'pianola': ['opalina', 'pianola'], - 'piaroa': ['aporia', 'piaroa'], - 'piast': ['piast', 'stipa', 'tapis'], - 'piaster': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'], - 'piastre': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'], - 'picador': ['parodic', 'picador'], - 'picae': ['picae', 'picea'], - 'pical': ['pical', 'plica'], - 'picard': ['caprid', 'carpid', 'picard'], - 'picarel': ['caliper', 'picarel', 'replica'], - 'picary': ['cypria', 'picary', 'piracy'], - 'pice': ['epic', 'pice'], - 'picea': ['picae', 'picea'], - 'picene': ['picene', 'piecen'], - 'picker': ['picker', 'repick'], - 'pickle': ['pelick', 'pickle'], - 'pickler': ['pickler', 'prickle'], - 'pickover': ['overpick', 'pickover'], - 'picktooth': ['picktooth', 'toothpick'], - 'pico': ['cipo', 'pico'], - 'picot': ['optic', 'picot', 'topic'], - 'picotah': ['aphotic', 'picotah'], - 'picra': ['capri', 'picra', 'rapic'], - 'picrate': ['paretic', 'patrice', 'picrate'], - 'pictography': ['graphotypic', 'pictography', 'typographic'], - 'pictorialness': ['personalistic', 'pictorialness'], - 'picture': ['cuprite', 'picture'], - 'picudilla': ['picudilla', 'pulicidal'], - 'pidan': ['pidan', 'pinda'], - 'piebald': ['bipedal', 'piebald'], - 'piebaldness': ['dispensable', 'piebaldness'], - 'piecen': ['picene', 'piecen'], - 'piecer': ['piecer', 'pierce', 'recipe'], - 'piecework': ['piecework', 'workpiece'], - 'piecrust': ['crepitus', 'piecrust'], - 'piedness': ['dispense', 'piedness'], - 'piegan': ['genipa', 'piegan'], - 'pieless': ['pelisse', 'pieless'], - 'pielet': ['leepit', 'pelite', 'pielet'], - 'piemag': ['magpie', 'piemag'], - 'pieman': ['impane', 'pieman'], - 'pien': ['pien', 'pine'], - 'piend': ['piend', 'pined'], - 'pier': ['peri', 'pier', 'ripe'], - 'pierce': ['piecer', 'pierce', 'recipe'], - 'piercent': ['piercent', 'prentice'], - 'piercer': ['piercer', 'reprice'], - 'pierlike': ['pierlike', 'ripelike'], - 'piet': ['piet', 'tipe'], - 'pietas': ['patesi', 'pietas'], - 'pieter': ['perite', 'petrie', 'pieter'], - 'pig': ['gip', 'pig'], - 'pigeoner': ['perigone', 'pigeoner'], - 'pigeontail': ['pigeontail', 'plagionite'], - 'pigly': ['gilpy', 'pigly'], - 'pignon': ['ningpo', 'pignon'], - 'pignorate': ['operating', 'pignorate'], - 'pigskin': ['pigskin', 'spiking'], - 'pigsney': ['gypsine', 'pigsney'], - 'pik': ['kip', 'pik'], - 'pika': ['paik', 'pika'], - 'pike': ['kepi', 'kipe', 'pike'], - 'pikel': ['pikel', 'pikle'], - 'piker': ['krepi', 'piker'], - 'pikle': ['pikel', 'pikle'], - 'pilage': ['paigle', 'pilage'], - 'pilar': ['april', 'pilar', 'ripal'], - 'pilaster': ['epistlar', 'pilaster', 'plaister', 'priestal'], - 'pilastered': ['pedestrial', 'pilastered'], - 'pilastric': ['pilastric', 'triplasic'], - 'pilate': ['aplite', 'pilate'], - 'pileata': ['palaite', 'petalia', 'pileata'], - 'pileate': ['epilate', 'epitela', 'pileate'], - 'pileated': ['depilate', 'leptidae', 'pileated'], - 'piled': ['piled', 'plied'], - 'piler': ['peril', 'piler', 'plier'], - 'piles': ['piles', 'plies', 'slipe', 'spiel', 'spile'], - 'pileus': ['epulis', 'pileus'], - 'pili': ['ipil', 'pili'], - 'pilin': ['lipin', 'pilin'], - 'pillarist': ['pillarist', 'pistillar'], - 'pillet': ['liplet', 'pillet'], - 'pilm': ['limp', 'pilm', 'plim'], - 'pilmy': ['imply', 'limpy', 'pilmy'], - 'pilosis': ['liposis', 'pilosis'], - 'pilotee': ['petiole', 'pilotee'], - 'pilpai': ['lippia', 'pilpai'], - 'pilus': ['lupis', 'pilus'], - 'pim': ['imp', 'pim'], - 'pimelate': ['ampelite', 'pimelate'], - 'pimento': ['emption', 'pimento'], - 'pimenton': ['imponent', 'pimenton'], - 'pimola': ['lipoma', 'pimola', 'ploima'], - 'pimpish': ['impship', 'pimpish'], - 'pimplous': ['pimplous', 'pompilus', 'populism'], - 'pin': ['nip', 'pin'], - 'pina': ['nipa', 'pain', 'pani', 'pian', 'pina'], - 'pinaces': ['pinaces', 'pincase'], - 'pinachrome': ['epharmonic', 'pinachrome'], - 'pinacle': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'], - 'pinacoid': ['diapnoic', 'pinacoid'], - 'pinal': ['lipan', 'pinal', 'plain'], - 'pinales': ['espinal', 'pinales', 'spaniel'], - 'pinaster': ['pinaster', 'pristane'], - 'pincase': ['pinaces', 'pincase'], - 'pincer': ['pincer', 'prince'], - 'pincerlike': ['pincerlike', 'princelike'], - 'pincers': ['encrisp', 'pincers'], - 'pinchbelly': ['bellypinch', 'pinchbelly'], - 'pinche': ['phenic', 'pinche'], - 'pincher': ['nephric', 'phrenic', 'pincher'], - 'pincushion': ['nuncioship', 'pincushion'], - 'pinda': ['pidan', 'pinda'], - 'pindari': ['pindari', 'pridian'], - 'pine': ['pien', 'pine'], - 'pineal': ['alpine', 'nepali', 'penial', 'pineal'], - 'pined': ['piend', 'pined'], - 'piner': ['piner', 'prine', 'repin', 'ripen'], - 'pinery': ['pernyi', 'pinery'], - 'pingler': ['pingler', 'pringle'], - 'pinhold': ['dolphin', 'pinhold'], - 'pinhole': ['lophine', 'pinhole'], - 'pinite': ['pinite', 'tiepin'], - 'pinker': ['perkin', 'pinker'], - 'pinking': ['kingpin', 'pinking'], - 'pinkish': ['kinship', 'pinkish'], - 'pinlock': ['lockpin', 'pinlock'], - 'pinnacle': ['pannicle', 'pinnacle'], - 'pinnae': ['nanpie', 'pennia', 'pinnae'], - 'pinnate': ['piannet', 'pinnate'], - 'pinnatopectinate': ['pectinatopinnate', 'pinnatopectinate'], - 'pinnet': ['pinnet', 'tenpin'], - 'pinnitarsal': ['intraspinal', 'pinnitarsal'], - 'pinnotere': ['interpone', 'peritenon', 'pinnotere', 'preintone'], - 'pinnothere': ['interphone', 'pinnothere'], - 'pinnula': ['pinnula', 'unplain'], - 'pinnulated': ['pennatulid', 'pinnulated'], - 'pinochle': ['phenolic', 'pinochle'], - 'pinole': ['pinole', 'pleion'], - 'pinolia': ['apiolin', 'pinolia'], - 'pinscher': ['phrenics', 'pinscher'], - 'pinta': ['inapt', 'paint', 'pinta'], - 'pintail': ['pintail', 'tailpin'], - 'pintano': ['opinant', 'pintano'], - 'pinte': ['inept', 'pinte'], - 'pinto': ['pinto', 'point'], - 'pintura': ['pintura', 'puritan', 'uptrain'], - 'pinulus': ['lupinus', 'pinulus'], - 'piny': ['piny', 'pyin'], - 'pinyl': ['pinyl', 'pliny'], - 'pioneer': ['pereion', 'pioneer'], - 'pioted': ['pioted', 'podite'], - 'pipa': ['paip', 'pipa'], - 'pipal': ['palpi', 'pipal'], - 'piperno': ['piperno', 'propine'], - 'pique': ['equip', 'pique'], - 'pir': ['pir', 'rip'], - 'piracy': ['cypria', 'picary', 'piracy'], - 'piranha': ['pharian', 'piranha'], - 'piratess': ['piratess', 'serapist', 'tarsipes'], - 'piratically': ['capillarity', 'piratically'], - 'piraty': ['parity', 'piraty'], - 'pirene': ['neiper', 'perine', 'pirene', 'repine'], - 'pirssonite': ['pirssonite', 'trispinose'], - 'pisaca': ['capias', 'pisaca'], - 'pisan': ['pisan', 'sapin', 'spina'], - 'pisanite': ['pianiste', 'pisanite'], - 'piscation': ['panoistic', 'piscation'], - 'piscatorial': ['paracolitis', 'piscatorial'], - 'piscian': ['panisic', 'piscian', 'piscina', 'sinapic'], - 'pisciferous': ['pisciferous', 'spiciferous'], - 'pisciform': ['pisciform', 'spiciform'], - 'piscina': ['panisic', 'piscian', 'piscina', 'sinapic'], - 'pisco': ['copis', 'pisco'], - 'pise': ['pise', 'sipe'], - 'pish': ['pish', 'ship'], - 'pisk': ['pisk', 'skip'], - 'pisky': ['pisky', 'spiky'], - 'pismire': ['pismire', 'primsie'], - 'pisonia': ['pisonia', 'sinopia'], - 'pist': ['pist', 'spit'], - 'pistache': ['paschite', 'pastiche', 'pistache', 'scaphite'], - 'pistacite': ['epistatic', 'pistacite'], - 'pistareen': ['pistareen', 'sparteine'], - 'pistillar': ['pillarist', 'pistillar'], - 'pistillary': ['pistillary', 'spiritally'], - 'pistle': ['pistle', 'stipel'], - 'pistol': ['pistol', 'postil', 'spoilt'], - 'pistoleer': ['epistoler', 'peristole', 'perseitol', 'pistoleer'], - 'pit': ['pit', 'tip'], - 'pita': ['atip', 'pita'], - 'pitapat': ['apitpat', 'pitapat'], - 'pitarah': ['pitarah', 'taphria'], - 'pitcher': ['pitcher', 'repitch'], - 'pitchout': ['outpitch', 'pitchout'], - 'pitchy': ['phytic', 'pitchy', 'pythic', 'typhic'], - 'pith': ['phit', 'pith'], - 'pithecan': ['haptenic', 'pantheic', 'pithecan'], - 'pithole': ['hoplite', 'pithole'], - 'pithsome': ['mephisto', 'pithsome'], - 'pitless': ['pitless', 'tipless'], - 'pitman': ['pitman', 'tampin', 'tipman'], - 'pittancer': ['crepitant', 'pittancer'], - 'pittoid': ['pittoid', 'poditti'], - 'pityroid': ['pityroid', 'pyritoid'], - 'pivoter': ['overtip', 'pivoter'], - 'placate': ['epactal', 'placate'], - 'placation': ['pactional', 'pactolian', 'placation'], - 'place': ['capel', 'place'], - 'placebo': ['copable', 'placebo'], - 'placentalia': ['analeptical', 'placentalia'], - 'placentoma': ['complanate', 'placentoma'], - 'placer': ['carpel', 'parcel', 'placer'], - 'placode': ['lacepod', 'pedocal', 'placode'], - 'placoid': ['placoid', 'podalic', 'podical'], - 'placus': ['cuspal', 'placus'], - 'plagionite': ['pigeontail', 'plagionite'], - 'plague': ['plague', 'upgale'], - 'plaguer': ['earplug', 'graupel', 'plaguer'], - 'plaice': ['epical', 'piacle', 'plaice'], - 'plaid': ['alpid', 'plaid'], - 'plaidy': ['adipyl', 'plaidy'], - 'plain': ['lipan', 'pinal', 'plain'], - 'plainer': ['pearlin', 'plainer', 'praline'], - 'plaint': ['plaint', 'pliant'], - 'plaister': ['epistlar', 'pilaster', 'plaister', 'priestal'], - 'plaited': ['plaited', 'taliped'], - 'plaiter': ['partile', 'plaiter', 'replait'], - 'planate': ['planate', 'planeta', 'plantae', 'platane'], - 'planation': ['planation', 'platonian'], - 'plancheite': ['elephantic', 'plancheite'], - 'plane': ['alpen', 'nepal', 'panel', 'penal', 'plane'], - 'planer': ['parnel', 'planer', 'replan'], - 'planera': ['planera', 'preanal'], - 'planet': ['pantle', 'planet', 'platen'], - 'planeta': ['planate', 'planeta', 'plantae', 'platane'], - 'planetabler': ['planetabler', 'replantable'], - 'planetaria': ['parentalia', 'planetaria'], - 'planetoid': ['pelidnota', 'planetoid'], - 'planity': ['inaptly', 'planity', 'ptyalin'], - 'planker': ['planker', 'prankle'], - 'planta': ['planta', 'platan'], - 'plantae': ['planate', 'planeta', 'plantae', 'platane'], - 'planter': ['pantler', 'planter', 'replant'], - 'plap': ['lapp', 'palp', 'plap'], - 'plasher': ['plasher', 'spheral'], - 'plasm': ['plasm', 'psalm', 'slamp'], - 'plasma': ['lampas', 'plasma'], - 'plasmation': ['aminoplast', 'plasmation'], - 'plasmic': ['plasmic', 'psalmic'], - 'plasmode': ['malposed', 'plasmode'], - 'plasmodial': ['plasmodial', 'psalmodial'], - 'plasmodic': ['plasmodic', 'psalmodic'], - 'plasson': ['plasson', 'sponsal'], - 'plastein': ['panelist', 'pantelis', 'penalist', 'plastein'], - 'plaster': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'], - 'plasterer': ['plasterer', 'replaster'], - 'plastery': ['plastery', 'psaltery'], - 'plasticine': ['cisplatine', 'plasticine'], - 'plastidome': ['plastidome', 'postmedial'], - 'plastinoid': ['palinodist', 'plastinoid'], - 'plastochrone': ['phrenocostal', 'plastochrone'], - 'plat': ['palt', 'plat'], - 'plataean': ['panatela', 'plataean'], - 'platan': ['planta', 'platan'], - 'platane': ['planate', 'planeta', 'plantae', 'platane'], - 'plate': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'platea': ['aletap', 'palate', 'platea'], - 'plateless': ['petalless', 'plateless', 'pleatless'], - 'platelet': ['pallette', 'platelet'], - 'platelike': ['petallike', 'platelike'], - 'platen': ['pantle', 'planet', 'platen'], - 'plater': ['palter', 'plater'], - 'platerer': ['palterer', 'platerer'], - 'platery': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'], - 'platine': ['pantile', 'pentail', 'platine', 'talpine'], - 'platinochloric': ['chloroplatinic', 'platinochloric'], - 'platinous': ['platinous', 'pulsation'], - 'platode': ['platode', 'tadpole'], - 'platoid': ['platoid', 'talpoid'], - 'platonian': ['planation', 'platonian'], - 'platter': ['partlet', 'platter', 'prattle'], - 'platy': ['aptly', 'patly', 'platy', 'typal'], - 'platynite': ['patiently', 'platynite'], - 'platysternal': ['platysternal', 'transeptally'], - 'plaud': ['dupla', 'plaud'], - 'plaustral': ['palustral', 'plaustral'], - 'play': ['paly', 'play', 'pyal', 'pyla'], - 'playa': ['palay', 'playa'], - 'player': ['parley', 'pearly', 'player', 'replay'], - 'playgoer': ['playgoer', 'pylagore'], - 'playroom': ['myopolar', 'playroom'], - 'plea': ['leap', 'lepa', 'pale', 'peal', 'plea'], - 'pleach': ['chapel', 'lepcha', 'pleach'], - 'plead': ['padle', 'paled', 'pedal', 'plead'], - 'pleader': ['pearled', 'pedaler', 'pleader', 'replead'], - 'please': ['asleep', 'elapse', 'please'], - 'pleaser': ['pleaser', 'preseal', 'relapse'], - 'pleasure': ['pleasure', 'serpulae'], - 'pleasurer': ['pleasurer', 'reperusal'], - 'pleasurous': ['asperulous', 'pleasurous'], - 'pleat': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'pleater': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'], - 'pleatless': ['petalless', 'plateless', 'pleatless'], - 'plectre': ['plectre', 'prelect'], - 'pleion': ['pinole', 'pleion'], - 'pleionian': ['opalinine', 'pleionian'], - 'plenilunar': ['plenilunar', 'plurennial'], - 'plenty': ['pentyl', 'plenty'], - 'pleomorph': ['pleomorph', 'prophloem'], - 'pleon': ['pelon', 'pleon'], - 'pleonal': ['pallone', 'pleonal'], - 'pleonasm': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'], - 'pleonast': ['lapstone', 'pleonast'], - 'pleonastic': ['neoplastic', 'pleonastic'], - 'pleroma': ['leproma', 'palermo', 'pleroma', 'polearm'], - 'plerosis': ['leprosis', 'plerosis'], - 'plerotic': ['petrolic', 'plerotic'], - 'plessor': ['plessor', 'preloss'], - 'plethora': ['plethora', 'traphole'], - 'plethoric': ['phloretic', 'plethoric'], - 'pleura': ['epural', 'perula', 'pleura'], - 'pleuric': ['luperci', 'pleuric'], - 'pleuropericardial': ['pericardiopleural', 'pleuropericardial'], - 'pleurotoma': ['pleurotoma', 'tropaeolum'], - 'pleurovisceral': ['pleurovisceral', 'visceropleural'], - 'pliancy': ['pliancy', 'pycnial'], - 'pliant': ['plaint', 'pliant'], - 'plica': ['pical', 'plica'], - 'plicately': ['callitype', 'plicately'], - 'plicater': ['particle', 'plicater', 'prelatic'], - 'plicator': ['plicator', 'tropical'], - 'plied': ['piled', 'plied'], - 'plier': ['peril', 'piler', 'plier'], - 'pliers': ['lisper', 'pliers', 'sirple', 'spiler'], - 'plies': ['piles', 'plies', 'slipe', 'spiel', 'spile'], - 'plighter': ['plighter', 'replight'], - 'plim': ['limp', 'pilm', 'plim'], - 'pliny': ['pinyl', 'pliny'], - 'pliosaur': ['liparous', 'pliosaur'], - 'pliosauridae': ['lepidosauria', 'pliosauridae'], - 'ploceidae': ['adipocele', 'cepolidae', 'ploceidae'], - 'ploceus': ['culpose', 'ploceus', 'upclose'], - 'plodder': ['plodder', 'proddle'], - 'ploima': ['lipoma', 'pimola', 'ploima'], - 'ploration': ['ploration', 'portional', 'prolation'], - 'plot': ['plot', 'polt'], - 'plotful': ['plotful', 'topfull'], - 'plotted': ['plotted', 'pottled'], - 'plotter': ['plotter', 'portlet'], - 'plousiocracy': ['plousiocracy', 'procaciously'], - 'plout': ['plout', 'pluto', 'poult'], - 'plouter': ['plouter', 'poulter'], - 'plovery': ['overply', 'plovery'], - 'plower': ['plower', 'replow'], - 'ploy': ['ploy', 'poly'], - 'plucker': ['plucker', 'puckrel'], - 'plug': ['gulp', 'plug'], - 'plum': ['lump', 'plum'], - 'pluma': ['ampul', 'pluma'], - 'plumbagine': ['impugnable', 'plumbagine'], - 'plumbic': ['plumbic', 'upclimb'], - 'plumed': ['dumple', 'plumed'], - 'plumeous': ['eumolpus', 'plumeous'], - 'plumer': ['lumper', 'plumer', 'replum', 'rumple'], - 'plumet': ['lumpet', 'plumet'], - 'pluminess': ['lumpiness', 'pluminess'], - 'plumy': ['lumpy', 'plumy'], - 'plunderer': ['plunderer', 'replunder'], - 'plunge': ['plunge', 'pungle'], - 'plup': ['plup', 'pulp'], - 'plurennial': ['plenilunar', 'plurennial'], - 'pluriseptate': ['perpetualist', 'pluriseptate'], - 'plutean': ['plutean', 'unpetal', 'unpleat'], - 'pluteus': ['pluteus', 'pustule'], - 'pluto': ['plout', 'pluto', 'poult'], - 'pluvine': ['pluvine', 'vulpine'], - 'plyer': ['plyer', 'reply'], - 'pneumatophony': ['pneumatophony', 'pneumonopathy'], - 'pneumohemothorax': ['hemopneumothorax', 'pneumohemothorax'], - 'pneumohydropericardium': ['hydropneumopericardium', 'pneumohydropericardium'], - 'pneumohydrothorax': ['hydropneumothorax', 'pneumohydrothorax'], - 'pneumonopathy': ['pneumatophony', 'pneumonopathy'], - 'pneumopyothorax': ['pneumopyothorax', 'pyopneumothorax'], - 'poach': ['chopa', 'phoca', 'poach'], - 'poachy': ['poachy', 'pochay'], - 'poales': ['aslope', 'poales'], - 'pob': ['bop', 'pob'], - 'pochay': ['poachy', 'pochay'], - 'poche': ['epoch', 'poche'], - 'pocketer': ['pocketer', 'repocket'], - 'poco': ['coop', 'poco'], - 'pocosin': ['opsonic', 'pocosin'], - 'poculation': ['copulation', 'poculation'], - 'pod': ['dop', 'pod'], - 'podalic': ['placoid', 'podalic', 'podical'], - 'podarthritis': ['podarthritis', 'traditorship'], - 'podial': ['podial', 'poliad'], - 'podical': ['placoid', 'podalic', 'podical'], - 'podiceps': ['podiceps', 'scopiped'], - 'podite': ['pioted', 'podite'], - 'poditti': ['pittoid', 'poditti'], - 'podler': ['podler', 'polder', 'replod'], - 'podley': ['deploy', 'podley'], - 'podobranchia': ['branchiopoda', 'podobranchia'], - 'podocephalous': ['cephalopodous', 'podocephalous'], - 'podophyllous': ['phyllopodous', 'podophyllous'], - 'podoscaph': ['podoscaph', 'scaphopod'], - 'podostomata': ['podostomata', 'stomatopoda'], - 'podostomatous': ['podostomatous', 'stomatopodous'], - 'podotheca': ['chaetopod', 'podotheca'], - 'podura': ['podura', 'uproad'], - 'poduran': ['pandour', 'poduran'], - 'poe': ['ope', 'poe'], - 'poem': ['mope', 'poem', 'pome'], - 'poemet': ['metope', 'poemet'], - 'poemlet': ['leptome', 'poemlet'], - 'poesy': ['poesy', 'posey', 'sepoy'], - 'poet': ['peto', 'poet', 'pote', 'tope'], - 'poetastrical': ['poetastrical', 'spectatorial'], - 'poetical': ['copalite', 'poetical'], - 'poeticism': ['impeticos', 'poeticism'], - 'poetics': ['poetics', 'septoic'], - 'poetly': ['peyotl', 'poetly'], - 'poetryless': ['poetryless', 'presystole'], - 'pogo': ['goop', 'pogo'], - 'poh': ['hop', 'pho', 'poh'], - 'poha': ['opah', 'paho', 'poha'], - 'pohna': ['phano', 'pohna'], - 'poiana': ['anopia', 'aponia', 'poiana'], - 'poietic': ['epiotic', 'poietic'], - 'poimenic': ['mincopie', 'poimenic'], - 'poinder': ['poinder', 'ponerid'], - 'point': ['pinto', 'point'], - 'pointel': ['pointel', 'pontile', 'topline'], - 'pointer': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'], - 'pointlet': ['pentitol', 'pointlet'], - 'pointrel': ['pointrel', 'terpinol'], - 'poisonless': ['poisonless', 'solenopsis'], - 'poker': ['poker', 'proke'], - 'pol': ['lop', 'pol'], - 'polab': ['pablo', 'polab'], - 'polacre': ['capreol', 'polacre'], - 'polander': ['polander', 'ponderal', 'prenodal'], - 'polar': ['parol', 'polar', 'poral', 'proal'], - 'polarid': ['dipolar', 'polarid'], - 'polarimetry': ['polarimetry', 'premorality', 'temporarily'], - 'polaristic': ['polaristic', 'poristical', 'saprolitic'], - 'polarly': ['payroll', 'polarly'], - 'polder': ['podler', 'polder', 'replod'], - 'pole': ['lope', 'olpe', 'pole'], - 'polearm': ['leproma', 'palermo', 'pleroma', 'polearm'], - 'polecat': ['pacolet', 'polecat'], - 'polemic': ['compile', 'polemic'], - 'polemics': ['clipsome', 'polemics'], - 'polemist': ['milepost', 'polemist'], - 'polenta': ['lepanto', 'nepotal', 'petalon', 'polenta'], - 'poler': ['loper', 'poler'], - 'polesman': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'], - 'polestar': ['petrosal', 'polestar'], - 'poliad': ['podial', 'poliad'], - 'polianite': ['epilation', 'polianite'], - 'policyholder': ['policyholder', 'polychloride'], - 'polio': ['polio', 'pooli'], - 'polis': ['polis', 'spoil'], - 'polished': ['depolish', 'polished'], - 'polisher': ['polisher', 'repolish'], - 'polistes': ['polistes', 'telopsis'], - 'politarch': ['carpolith', 'politarch', 'trophical'], - 'politicly': ['lipolytic', 'politicly'], - 'politics': ['colpitis', 'politics', 'psilotic'], - 'polk': ['klop', 'polk'], - 'pollenite': ['pellotine', 'pollenite'], - 'poller': ['poller', 'repoll'], - 'pollinate': ['pellation', 'pollinate'], - 'polo': ['loop', 'polo', 'pool'], - 'poloist': ['loopist', 'poloist', 'topsoil'], - 'polonia': ['apionol', 'polonia'], - 'polos': ['polos', 'sloop', 'spool'], - 'polt': ['plot', 'polt'], - 'poly': ['ploy', 'poly'], - 'polyacid': ['polyacid', 'polyadic'], - 'polyactinal': ['pactionally', 'polyactinal'], - 'polyadic': ['polyacid', 'polyadic'], - 'polyarchist': ['chiroplasty', 'polyarchist'], - 'polychloride': ['policyholder', 'polychloride'], - 'polychroism': ['polychroism', 'polyorchism'], - 'polycitral': ['polycitral', 'tropically'], - 'polycodium': ['lycopodium', 'polycodium'], - 'polycotyl': ['collotypy', 'polycotyl'], - 'polyeidic': ['polyeidic', 'polyideic'], - 'polyeidism': ['polyeidism', 'polyideism'], - 'polyester': ['polyester', 'proselyte'], - 'polygamodioecious': ['dioeciopolygamous', 'polygamodioecious'], - 'polyhalite': ['paleolithy', 'polyhalite', 'polythelia'], - 'polyideic': ['polyeidic', 'polyideic'], - 'polyideism': ['polyeidism', 'polyideism'], - 'polymastic': ['myoplastic', 'polymastic'], - 'polymasty': ['myoplasty', 'polymasty'], - 'polymere': ['employer', 'polymere'], - 'polymeric': ['micropyle', 'polymeric'], - 'polymetochia': ['homeotypical', 'polymetochia'], - 'polymnia': ['olympian', 'polymnia'], - 'polymyodi': ['polymyodi', 'polymyoid'], - 'polymyoid': ['polymyodi', 'polymyoid'], - 'polyorchism': ['polychroism', 'polyorchism'], - 'polyp': ['loppy', 'polyp'], - 'polyphemian': ['lymphopenia', 'polyphemian'], - 'polyphonist': ['polyphonist', 'psilophyton'], - 'polypite': ['lipotype', 'polypite'], - 'polyprene': ['polyprene', 'propylene'], - 'polypterus': ['polypterus', 'suppletory'], - 'polysomitic': ['myocolpitis', 'polysomitic'], - 'polyspore': ['polyspore', 'prosopyle'], - 'polythelia': ['paleolithy', 'polyhalite', 'polythelia'], - 'polythene': ['polythene', 'telephony'], - 'polyuric': ['croupily', 'polyuric'], - 'pom': ['mop', 'pom'], - 'pomade': ['apedom', 'pomade'], - 'pomane': ['mopane', 'pomane'], - 'pome': ['mope', 'poem', 'pome'], - 'pomeranian': ['pomeranian', 'praenomina'], - 'pomerium': ['emporium', 'pomerium', 'proemium'], - 'pomey': ['myope', 'pomey'], - 'pomo': ['moop', 'pomo'], - 'pomonal': ['lampoon', 'pomonal'], - 'pompilus': ['pimplous', 'pompilus', 'populism'], - 'pomster': ['pomster', 'stomper'], - 'ponca': ['capon', 'ponca'], - 'ponce': ['copen', 'ponce'], - 'ponchoed': ['chenopod', 'ponchoed'], - 'poncirus': ['coprinus', 'poncirus'], - 'ponderal': ['polander', 'ponderal', 'prenodal'], - 'ponderate': ['ponderate', 'predonate'], - 'ponderation': ['ponderation', 'predonation'], - 'ponderer': ['ponderer', 'reponder'], - 'pondfish': ['fishpond', 'pondfish'], - 'pone': ['nope', 'open', 'peon', 'pone'], - 'ponerid': ['poinder', 'ponerid'], - 'poneroid': ['poneroid', 'porodine'], - 'poney': ['peony', 'poney'], - 'ponica': ['aponic', 'ponica'], - 'ponier': ['opiner', 'orpine', 'ponier'], - 'pontederia': ['pontederia', 'proteidean'], - 'pontee': ['nepote', 'pontee', 'poteen'], - 'pontes': ['pontes', 'posnet'], - 'ponticular': ['ponticular', 'untropical'], - 'pontificalia': ['palification', 'pontificalia'], - 'pontile': ['pointel', 'pontile', 'topline'], - 'pontonier': ['entropion', 'pontonier', 'prenotion'], - 'pontus': ['pontus', 'unspot', 'unstop'], - 'pooch': ['choop', 'pooch'], - 'pooh': ['hoop', 'phoo', 'pooh'], - 'pooka': ['oopak', 'pooka'], - 'pool': ['loop', 'polo', 'pool'], - 'pooler': ['looper', 'pooler'], - 'pooli': ['polio', 'pooli'], - 'pooly': ['loopy', 'pooly'], - 'poon': ['noop', 'poon'], - 'poonac': ['acopon', 'poonac'], - 'poonga': ['apogon', 'poonga'], - 'poor': ['poor', 'proo'], - 'poot': ['poot', 'toop', 'topo'], - 'pope': ['pepo', 'pope'], - 'popeler': ['peopler', 'popeler'], - 'popery': ['popery', 'pyrope'], - 'popgun': ['oppugn', 'popgun'], - 'popian': ['oppian', 'papion', 'popian'], - 'popish': ['popish', 'shippo'], - 'popliteal': ['papillote', 'popliteal'], - 'poppel': ['poppel', 'popple'], - 'popple': ['poppel', 'popple'], - 'populism': ['pimplous', 'pompilus', 'populism'], - 'populus': ['populus', 'pulpous'], - 'poral': ['parol', 'polar', 'poral', 'proal'], - 'porcate': ['coperta', 'pectora', 'porcate'], - 'porcelain': ['oliprance', 'porcelain'], - 'porcelanite': ['porcelanite', 'praelection'], - 'porcula': ['copular', 'croupal', 'cupolar', 'porcula'], - 'pore': ['pore', 'rope'], - 'pored': ['doper', 'pedro', 'pored'], - 'porelike': ['porelike', 'ropelike'], - 'porer': ['porer', 'prore', 'roper'], - 'porge': ['grope', 'porge'], - 'porger': ['groper', 'porger'], - 'poriness': ['poriness', 'pression', 'ropiness'], - 'poring': ['poring', 'roping'], - 'poristical': ['polaristic', 'poristical', 'saprolitic'], - 'porites': ['periost', 'porites', 'reposit', 'riposte'], - 'poritidae': ['poritidae', 'triopidae'], - 'porker': ['porker', 'proker'], - 'pornerastic': ['cotranspire', 'pornerastic'], - 'porodine': ['poneroid', 'porodine'], - 'poros': ['poros', 'proso', 'sopor', 'spoor'], - 'porosity': ['isotropy', 'porosity'], - 'porotic': ['porotic', 'portico'], - 'porpentine': ['porpentine', 'prepontine'], - 'porphine': ['hornpipe', 'porphine'], - 'porphyrous': ['porphyrous', 'pyrophorus'], - 'porrection': ['correption', 'porrection'], - 'porret': ['porret', 'porter', 'report', 'troper'], - 'porta': ['aport', 'parto', 'porta'], - 'portail': ['portail', 'toprail'], - 'portal': ['patrol', 'portal', 'tropal'], - 'portance': ['coparent', 'portance'], - 'ported': ['deport', 'ported', 'redtop'], - 'portend': ['portend', 'protend'], - 'porteno': ['porteno', 'protone'], - 'portension': ['portension', 'protension'], - 'portent': ['portent', 'torpent'], - 'portentous': ['notopterus', 'portentous'], - 'porter': ['porret', 'porter', 'report', 'troper'], - 'porterage': ['porterage', 'reportage'], - 'portership': ['portership', 'pretorship'], - 'portfire': ['portfire', 'profiter'], - 'portia': ['portia', 'tapiro'], - 'portico': ['porotic', 'portico'], - 'portify': ['portify', 'torpify'], - 'portional': ['ploration', 'portional', 'prolation'], - 'portioner': ['portioner', 'reportion'], - 'portlet': ['plotter', 'portlet'], - 'portly': ['portly', 'protyl', 'tropyl'], - 'porto': ['porto', 'proto', 'troop'], - 'portoise': ['isotrope', 'portoise'], - 'portolan': ['portolan', 'pronotal'], - 'portor': ['portor', 'torpor'], - 'portray': ['parroty', 'portray', 'tropary'], - 'portrayal': ['parlatory', 'portrayal'], - 'portside': ['dipteros', 'portside'], - 'portsider': ['portsider', 'postrider'], - 'portunidae': ['depuration', 'portunidae'], - 'portunus': ['outspurn', 'portunus'], - 'pory': ['pory', 'pyro', 'ropy'], - 'posca': ['posca', 'scopa'], - 'pose': ['epos', 'peso', 'pose', 'sope'], - 'poser': ['poser', 'prose', 'ropes', 'spore'], - 'poseur': ['poseur', 'pouser', 'souper', 'uprose'], - 'posey': ['poesy', 'posey', 'sepoy'], - 'posh': ['phos', 'posh', 'shop', 'soph'], - 'posingly': ['posingly', 'spongily'], - 'position': ['position', 'sopition'], - 'positional': ['positional', 'spoilation', 'spoliation'], - 'positioned': ['deposition', 'positioned'], - 'positioner': ['positioner', 'reposition'], - 'positron': ['notropis', 'positron', 'sorption'], - 'positum': ['positum', 'utopism'], - 'posnet': ['pontes', 'posnet'], - 'posse': ['posse', 'speos'], - 'possessioner': ['possessioner', 'repossession'], - 'post': ['post', 'spot', 'stop', 'tops'], - 'postage': ['gestapo', 'postage'], - 'postaortic': ['parostotic', 'postaortic'], - 'postdate': ['despotat', 'postdate'], - 'posted': ['despot', 'posted'], - 'posteen': ['pentose', 'posteen'], - 'poster': ['poster', 'presto', 'repost', 'respot', 'stoper'], - 'posterial': ['posterial', 'saprolite'], - 'posterior': ['posterior', 'repositor'], - 'posterish': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'], - 'posteroinferior': ['inferoposterior', 'posteroinferior'], - 'posterosuperior': ['posterosuperior', 'superoposterior'], - 'postgenial': ['postgenial', 'spangolite'], - 'posthaste': ['posthaste', 'tosephtas'], - 'postic': ['copist', 'coptis', 'optics', 'postic'], - 'postical': ['postical', 'slipcoat'], - 'postil': ['pistol', 'postil', 'spoilt'], - 'posting': ['posting', 'stoping'], - 'postischial': ['postischial', 'sophistical'], - 'postless': ['postless', 'spotless', 'stopless'], - 'postlike': ['postlike', 'spotlike'], - 'postman': ['postman', 'topsman'], - 'postmedial': ['plastidome', 'postmedial'], - 'postnaris': ['postnaris', 'sopranist'], - 'postnominal': ['monoplanist', 'postnominal'], - 'postrider': ['portsider', 'postrider'], - 'postsacral': ['postsacral', 'sarcoplast'], - 'postsign': ['postsign', 'signpost'], - 'postthoracic': ['octastrophic', 'postthoracic'], - 'postulata': ['autoplast', 'postulata'], - 'postural': ['postural', 'pulsator', 'sportula'], - 'posture': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'], - 'posturer': ['posturer', 'resprout', 'sprouter'], - 'postuterine': ['postuterine', 'pretentious'], - 'postwar': ['postwar', 'sapwort'], - 'postward': ['drawstop', 'postward'], - 'postwoman': ['postwoman', 'womanpost'], - 'posy': ['opsy', 'posy'], - 'pot': ['opt', 'pot', 'top'], - 'potable': ['optable', 'potable'], - 'potableness': ['optableness', 'potableness'], - 'potash': ['pashto', 'pathos', 'potash'], - 'potass': ['potass', 'topass'], - 'potate': ['aptote', 'optate', 'potate', 'teapot'], - 'potation': ['optation', 'potation'], - 'potative': ['optative', 'potative'], - 'potator': ['potator', 'taproot'], - 'pote': ['peto', 'poet', 'pote', 'tope'], - 'poteen': ['nepote', 'pontee', 'poteen'], - 'potential': ['peltation', 'potential'], - 'poter': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'], - 'poteye': ['peyote', 'poteye'], - 'pothouse': ['housetop', 'pothouse'], - 'poticary': ['cyrtopia', 'poticary'], - 'potifer': ['firetop', 'potifer'], - 'potion': ['option', 'potion'], - 'potlatch': ['potlatch', 'tolpatch'], - 'potlike': ['kitlope', 'potlike', 'toplike'], - 'potmaker': ['potmaker', 'topmaker'], - 'potmaking': ['potmaking', 'topmaking'], - 'potman': ['potman', 'tampon', 'topman'], - 'potometer': ['optometer', 'potometer'], - 'potstick': ['potstick', 'tipstock'], - 'potstone': ['potstone', 'topstone'], - 'pottled': ['plotted', 'pottled'], - 'pouce': ['coupe', 'pouce'], - 'poucer': ['couper', 'croupe', 'poucer', 'recoup'], - 'pouch': ['choup', 'pouch'], - 'poulpe': ['poulpe', 'pupelo'], - 'poult': ['plout', 'pluto', 'poult'], - 'poulter': ['plouter', 'poulter'], - 'poultice': ['epulotic', 'poultice'], - 'pounce': ['pounce', 'uncope'], - 'pounder': ['pounder', 'repound', 'unroped'], - 'pour': ['pour', 'roup'], - 'pourer': ['pourer', 'repour', 'rouper'], - 'pouser': ['poseur', 'pouser', 'souper', 'uprose'], - 'pout': ['pout', 'toup'], - 'pouter': ['pouter', 'roupet', 'troupe'], - 'pow': ['pow', 'wop'], - 'powder': ['powder', 'prowed'], - 'powderer': ['powderer', 'repowder'], - 'powerful': ['powerful', 'upflower'], - 'praam': ['param', 'parma', 'praam'], - 'practitional': ['antitropical', 'practitional'], - 'prad': ['pard', 'prad'], - 'pradeep': ['papered', 'pradeep'], - 'praecox': ['exocarp', 'praecox'], - 'praelabrum': ['praelabrum', 'preambular'], - 'praelection': ['porcelanite', 'praelection'], - 'praelector': ['praelector', 'receptoral'], - 'praenomina': ['pomeranian', 'praenomina'], - 'praepostor': ['praepostor', 'pterospora'], - 'praesphenoid': ['nephropsidae', 'praesphenoid'], - 'praetor': ['praetor', 'prorate'], - 'praetorian': ['praetorian', 'reparation'], - 'praise': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'], - 'praiser': ['aspirer', 'praiser', 'serpari'], - 'praising': ['aspiring', 'praising', 'singarip'], - 'praisingly': ['aspiringly', 'praisingly'], - 'praline': ['pearlin', 'plainer', 'praline'], - 'pram': ['pram', 'ramp'], - 'prandial': ['diplanar', 'prandial'], - 'prankle': ['planker', 'prankle'], - 'prase': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'], - 'praseolite': ['periosteal', 'praseolite'], - 'prasine': ['persian', 'prasine', 'saprine'], - 'prasinous': ['prasinous', 'psaronius'], - 'prasoid': ['prasoid', 'sparoid'], - 'prasophagous': ['prasophagous', 'saprophagous'], - 'prat': ['part', 'prat', 'rapt', 'tarp', 'trap'], - 'prate': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'], - 'prater': ['parter', 'prater'], - 'pratey': ['petary', 'pratey'], - 'pratfall': ['pratfall', 'trapfall'], - 'pratincoline': ['nonpearlitic', 'pratincoline'], - 'pratincolous': ['patroclinous', 'pratincolous'], - 'prattle': ['partlet', 'platter', 'prattle'], - 'prau': ['prau', 'rupa'], - 'prawner': ['prawner', 'prewarn'], - 'prayer': ['prayer', 'repray'], - 'preach': ['aperch', 'eparch', 'percha', 'preach'], - 'preacher': ['preacher', 'repreach'], - 'preaching': ['engraphic', 'preaching'], - 'preachman': ['marchpane', 'preachman'], - 'preachy': ['eparchy', 'preachy'], - 'preacid': ['epacrid', 'peracid', 'preacid'], - 'preact': ['carpet', 'peract', 'preact'], - 'preaction': ['preaction', 'precation', 'recaption'], - 'preactive': ['preactive', 'precative'], - 'preactively': ['preactively', 'precatively'], - 'preacute': ['peracute', 'preacute'], - 'preadmonition': ['demipronation', 'preadmonition', 'predomination'], - 'preadorn': ['pardoner', 'preadorn'], - 'preadventure': ['peradventure', 'preadventure'], - 'preallably': ['ballplayer', 'preallably'], - 'preallow': ['preallow', 'walloper'], - 'preamble': ['peramble', 'preamble'], - 'preambular': ['praelabrum', 'preambular'], - 'preambulate': ['perambulate', 'preambulate'], - 'preambulation': ['perambulation', 'preambulation'], - 'preambulatory': ['perambulatory', 'preambulatory'], - 'preanal': ['planera', 'preanal'], - 'prearm': ['prearm', 'ramper'], - 'preascitic': ['accipitres', 'preascitic'], - 'preauditory': ['preauditory', 'repudiatory'], - 'prebacillary': ['bicarpellary', 'prebacillary'], - 'prebasal': ['parsable', 'prebasal', 'sparable'], - 'prebend': ['perbend', 'prebend'], - 'prebeset': ['bepester', 'prebeset'], - 'prebid': ['bedrip', 'prebid'], - 'precant': ['carpent', 'precant'], - 'precantation': ['actinopteran', 'precantation'], - 'precast': ['precast', 'spectra'], - 'precation': ['preaction', 'precation', 'recaption'], - 'precative': ['preactive', 'precative'], - 'precatively': ['preactively', 'precatively'], - 'precaution': ['precaution', 'unoperatic'], - 'precautional': ['inoperculata', 'precautional'], - 'precedable': ['deprecable', 'precedable'], - 'preceder': ['preceder', 'precreed'], - 'precent': ['percent', 'precent'], - 'precept': ['percept', 'precept'], - 'preception': ['perception', 'preception'], - 'preceptive': ['perceptive', 'preceptive'], - 'preceptively': ['perceptively', 'preceptively'], - 'preceptual': ['perceptual', 'preceptual'], - 'preceptually': ['perceptually', 'preceptually'], - 'prechloric': ['perchloric', 'prechloric'], - 'prechoose': ['prechoose', 'rheoscope'], - 'precipitate': ['peripatetic', 'precipitate'], - 'precipitator': ['precipitator', 'prepatriotic'], - 'precis': ['crepis', 'cripes', 'persic', 'precis', 'spicer'], - 'precise': ['precise', 'scripee'], - 'precisian': ['periscian', 'precisian'], - 'precision': ['coinspire', 'precision'], - 'precitation': ['actinopteri', 'crepitation', 'precitation'], - 'precite': ['ereptic', 'precite', 'receipt'], - 'precited': ['decrepit', 'depicter', 'precited'], - 'preclose': ['perclose', 'preclose'], - 'preclusion': ['perculsion', 'preclusion'], - 'preclusive': ['perculsive', 'preclusive'], - 'precoil': ['peloric', 'precoil'], - 'precompound': ['percompound', 'precompound'], - 'precondense': ['precondense', 'respondence'], - 'preconnubial': ['preconnubial', 'pronunciable'], - 'preconsole': ['necropoles', 'preconsole'], - 'preconsultor': ['preconsultor', 'supercontrol'], - 'precontest': ['precontest', 'torpescent'], - 'precopy': ['coppery', 'precopy'], - 'precostal': ['ceroplast', 'precostal'], - 'precredit': ['precredit', 'predirect', 'repredict'], - 'precreditor': ['precreditor', 'predirector'], - 'precreed': ['preceder', 'precreed'], - 'precurrent': ['percurrent', 'precurrent'], - 'precursory': ['percursory', 'precursory'], - 'precyst': ['precyst', 'sceptry', 'spectry'], - 'predata': ['adapter', 'predata', 'readapt'], - 'predate': ['padtree', 'predate', 'tapered'], - 'predatism': ['predatism', 'spermatid'], - 'predative': ['deprivate', 'predative'], - 'predator': ['predator', 'protrade', 'teardrop'], - 'preday': ['pedary', 'preday'], - 'predealer': ['predealer', 'repleader'], - 'predecree': ['creepered', 'predecree'], - 'predefect': ['perfected', 'predefect'], - 'predeication': ['depreciation', 'predeication'], - 'prederive': ['prederive', 'redeprive'], - 'predespair': ['disprepare', 'predespair'], - 'predestine': ['predestine', 'presidente'], - 'predetail': ['pedaliter', 'predetail'], - 'predevotion': ['overpointed', 'predevotion'], - 'predial': ['pedrail', 'predial'], - 'prediastolic': ['prediastolic', 'psiloceratid'], - 'predication': ['predication', 'procidentia'], - 'predictory': ['cryptodire', 'predictory'], - 'predirect': ['precredit', 'predirect', 'repredict'], - 'predirector': ['precreditor', 'predirector'], - 'prediscretion': ['prediscretion', 'redescription'], - 'predislike': ['predislike', 'spiderlike'], - 'predivinable': ['indeprivable', 'predivinable'], - 'predominate': ['pentameroid', 'predominate'], - 'predomination': ['demipronation', 'preadmonition', 'predomination'], - 'predonate': ['ponderate', 'predonate'], - 'predonation': ['ponderation', 'predonation'], - 'predoubter': ['predoubter', 'preobtrude'], - 'predrive': ['depriver', 'predrive'], - 'preen': ['neper', 'preen', 'repen'], - 'prefactor': ['aftercrop', 'prefactor'], - 'prefator': ['forepart', 'prefator'], - 'prefavorite': ['perforative', 'prefavorite'], - 'prefect': ['perfect', 'prefect'], - 'prefectly': ['perfectly', 'prefectly'], - 'prefervid': ['perfervid', 'prefervid'], - 'prefiction': ['prefiction', 'proficient'], - 'prefoliation': ['perfoliation', 'prefoliation'], - 'preform': ['perform', 'preform'], - 'preformant': ['performant', 'preformant'], - 'preformative': ['performative', 'preformative'], - 'preformism': ['misperform', 'preformism'], - 'pregainer': ['peregrina', 'pregainer'], - 'prehandicap': ['handicapper', 'prehandicap'], - 'prehaps': ['perhaps', 'prehaps'], - 'prehazard': ['perhazard', 'prehazard'], - 'preheal': ['preheal', 'rephael'], - 'preheat': ['haptere', 'preheat'], - 'preheated': ['heartdeep', 'preheated'], - 'prehension': ['hesperinon', 'prehension'], - 'prehnite': ['nephrite', 'prehnite', 'trephine'], - 'prehnitic': ['nephritic', 'phrenitic', 'prehnitic'], - 'prehuman': ['prehuman', 'unhamper'], - 'preimpose': ['perispome', 'preimpose'], - 'preindicate': ['parenticide', 'preindicate'], - 'preinduce': ['preinduce', 'unpierced'], - 'preintone': ['interpone', 'peritenon', 'pinnotere', 'preintone'], - 'prelabrum': ['prelabrum', 'prelumbar'], - 'prelacteal': ['carpellate', 'parcellate', 'prelacteal'], - 'prelate': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'], - 'prelatehood': ['heteropodal', 'prelatehood'], - 'prelatic': ['particle', 'plicater', 'prelatic'], - 'prelatical': ['capitellar', 'prelatical'], - 'prelation': ['prelation', 'rantipole'], - 'prelatism': ['palmister', 'prelatism'], - 'prelease': ['eelspear', 'prelease'], - 'prelect': ['plectre', 'prelect'], - 'prelection': ['perlection', 'prelection'], - 'prelim': ['limper', 'prelim', 'rimple'], - 'prelingual': ['perlingual', 'prelingual'], - 'prelocate': ['percolate', 'prelocate'], - 'preloss': ['plessor', 'preloss'], - 'preludial': ['dipleural', 'preludial'], - 'prelumbar': ['prelabrum', 'prelumbar'], - 'prelusion': ['prelusion', 'repulsion'], - 'prelusive': ['prelusive', 'repulsive'], - 'prelusively': ['prelusively', 'repulsively'], - 'prelusory': ['prelusory', 'repulsory'], - 'premate': ['premate', 'tempera'], - 'premedia': ['epiderma', 'premedia'], - 'premedial': ['epidermal', 'impleader', 'premedial'], - 'premedication': ['pedometrician', 'premedication'], - 'premenace': ['permeance', 'premenace'], - 'premerit': ['premerit', 'preremit', 'repermit'], - 'premial': ['impaler', 'impearl', 'lempira', 'premial'], - 'premiant': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'], - 'premiate': ['imperate', 'premiate'], - 'premier': ['premier', 'reprime'], - 'premious': ['imposure', 'premious'], - 'premise': ['emprise', 'imprese', 'premise', 'spireme'], - 'premiss': ['impress', 'persism', 'premiss'], - 'premixture': ['permixture', 'premixture'], - 'premodel': ['leperdom', 'premodel'], - 'premolar': ['premolar', 'premoral'], - 'premold': ['meldrop', 'premold'], - 'premonetary': ['premonetary', 'pyranometer'], - 'premoral': ['premolar', 'premoral'], - 'premorality': ['polarimetry', 'premorality', 'temporarily'], - 'premosaic': ['paroecism', 'premosaic'], - 'premover': ['premover', 'prevomer'], - 'premusical': ['premusical', 'superclaim'], - 'prenasal': ['pernasal', 'prenasal'], - 'prenatal': ['parental', 'paternal', 'prenatal'], - 'prenatalist': ['intraseptal', 'paternalist', 'prenatalist'], - 'prenatally': ['parentally', 'paternally', 'prenatally'], - 'prenative': ['interpave', 'prenative'], - 'prender': ['prender', 'prendre'], - 'prendre': ['prender', 'prendre'], - 'prenodal': ['polander', 'ponderal', 'prenodal'], - 'prenominical': ['nonempirical', 'prenominical'], - 'prenotice': ['prenotice', 'reception'], - 'prenotion': ['entropion', 'pontonier', 'prenotion'], - 'prentice': ['piercent', 'prentice'], - 'preobtrude': ['predoubter', 'preobtrude'], - 'preocular': ['opercular', 'preocular'], - 'preominate': ['permeation', 'preominate'], - 'preopen': ['preopen', 'propene'], - 'preopinion': ['preopinion', 'prionopine'], - 'preoption': ['preoption', 'protopine'], - 'preoral': ['peroral', 'preoral'], - 'preorally': ['perorally', 'preorally'], - 'prep': ['prep', 'repp'], - 'prepalatine': ['periplaneta', 'prepalatine'], - 'prepare': ['paperer', 'perpera', 'prepare', 'repaper'], - 'prepatriotic': ['precipitator', 'prepatriotic'], - 'prepay': ['papery', 'prepay', 'yapper'], - 'preplot': ['preplot', 'toppler'], - 'prepollent': ['prepollent', 'propellent'], - 'prepontine': ['porpentine', 'prepontine'], - 'prepositure': ['peripterous', 'prepositure'], - 'prepuce': ['prepuce', 'upcreep'], - 'prerational': ['prerational', 'proletarian'], - 'prerealization': ['prerealization', 'proletarianize'], - 'prereceive': ['prereceive', 'reperceive'], - 'prerecital': ['perirectal', 'prerecital'], - 'prereduction': ['interproduce', 'prereduction'], - 'prerefer': ['prerefer', 'reprefer'], - 'prereform': ['performer', 'prereform', 'reperform'], - 'preremit': ['premerit', 'preremit', 'repermit'], - 'prerental': ['prerental', 'replanter'], - 'prerich': ['chirper', 'prerich'], - 'preromantic': ['improcreant', 'preromantic'], - 'presage': ['asperge', 'presage'], - 'presager': ['asperger', 'presager'], - 'presay': ['presay', 'speary'], - 'prescapular': ['prescapular', 'supercarpal'], - 'prescient': ['prescient', 'reinspect'], - 'prescientific': ['interspecific', 'prescientific'], - 'prescribe': ['perscribe', 'prescribe'], - 'prescutal': ['prescutal', 'scalpture'], - 'preseal': ['pleaser', 'preseal', 'relapse'], - 'preseason': ['parsonese', 'preseason'], - 'presell': ['presell', 'respell', 'speller'], - 'present': ['penster', 'present', 'serpent', 'strepen'], - 'presenter': ['presenter', 'represent'], - 'presential': ['alpestrine', 'episternal', 'interlapse', 'presential'], - 'presentist': ['persistent', 'presentist', 'prettiness'], - 'presentive': ['presentive', 'pretensive', 'vespertine'], - 'presentively': ['presentively', 'pretensively'], - 'presentiveness': ['presentiveness', 'pretensiveness'], - 'presently': ['presently', 'serpently'], - 'preserve': ['perverse', 'preserve'], - 'preset': ['pester', 'preset', 'restep', 'streep'], - 'preshare': ['preshare', 'rephrase'], - 'preship': ['preship', 'shipper'], - 'preshortage': ['preshortage', 'stereograph'], - 'preside': ['perseid', 'preside'], - 'presidencia': ['acipenserid', 'presidencia'], - 'president': ['president', 'serpentid'], - 'presidente': ['predestine', 'presidente'], - 'presider': ['presider', 'serriped'], - 'presign': ['presign', 'springe'], - 'presignal': ['espringal', 'presignal', 'relapsing'], - 'presimian': ['mainprise', 'presimian'], - 'presley': ['presley', 'sleepry'], - 'presser': ['presser', 'repress'], - 'pression': ['poriness', 'pression', 'ropiness'], - 'pressive': ['pressive', 'viperess'], - 'prest': ['prest', 'spret'], - 'prestable': ['beplaster', 'prestable'], - 'prestant': ['prestant', 'transept'], - 'prestate': ['prestate', 'pretaste'], - 'presto': ['poster', 'presto', 'repost', 'respot', 'stoper'], - 'prestock': ['prestock', 'sprocket'], - 'prestomial': ['peristomal', 'prestomial'], - 'prestrain': ['prestrain', 'transpire'], - 'presume': ['presume', 'supreme'], - 'presurmise': ['impressure', 'presurmise'], - 'presustain': ['presustain', 'puritaness', 'supersaint'], - 'presystole': ['poetryless', 'presystole'], - 'pretan': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'pretaste': ['prestate', 'pretaste'], - 'pretensive': ['presentive', 'pretensive', 'vespertine'], - 'pretensively': ['presentively', 'pretensively'], - 'pretensiveness': ['presentiveness', 'pretensiveness'], - 'pretentious': ['postuterine', 'pretentious'], - 'pretercanine': ['irrepentance', 'pretercanine'], - 'preterient': ['preterient', 'triterpene'], - 'pretermit': ['permitter', 'pretermit'], - 'pretheological': ['herpetological', 'pretheological'], - 'pretibial': ['bipartile', 'pretibial'], - 'pretonic': ['inceptor', 'pretonic'], - 'pretorship': ['portership', 'pretorship'], - 'pretrace': ['pretrace', 'recarpet'], - 'pretracheal': ['archprelate', 'pretracheal'], - 'pretrain': ['pretrain', 'terrapin'], - 'pretransmission': ['pretransmission', 'transimpression'], - 'pretreat': ['patterer', 'pretreat'], - 'prettiness': ['persistent', 'presentist', 'prettiness'], - 'prevailer': ['prevailer', 'reprieval'], - 'prevalid': ['deprival', 'prevalid'], - 'prevention': ['prevention', 'provenient'], - 'preversion': ['perversion', 'preversion'], - 'preveto': ['overpet', 'preveto', 'prevote'], - 'previde': ['deprive', 'previde'], - 'previous': ['pervious', 'previous', 'viperous'], - 'previously': ['perviously', 'previously', 'viperously'], - 'previousness': ['perviousness', 'previousness', 'viperousness'], - 'prevoid': ['prevoid', 'provide'], - 'prevomer': ['premover', 'prevomer'], - 'prevote': ['overpet', 'preveto', 'prevote'], - 'prewar': ['prewar', 'rewrap', 'warper'], - 'prewarn': ['prawner', 'prewarn'], - 'prewhip': ['prewhip', 'whipper'], - 'prewrap': ['prewrap', 'wrapper'], - 'prexy': ['prexy', 'pyrex'], - 'prey': ['prey', 'pyre', 'rype'], - 'pria': ['pair', 'pari', 'pria', 'ripa'], - 'price': ['price', 'repic'], - 'priced': ['percid', 'priced'], - 'prich': ['chirp', 'prich'], - 'prickfoot': ['prickfoot', 'tickproof'], - 'prickle': ['pickler', 'prickle'], - 'pride': ['pride', 'pried', 'redip'], - 'pridian': ['pindari', 'pridian'], - 'pried': ['pride', 'pried', 'redip'], - 'prier': ['prier', 'riper'], - 'priest': ['priest', 'pteris', 'sprite', 'stripe'], - 'priestal': ['epistlar', 'pilaster', 'plaister', 'priestal'], - 'priesthood': ['priesthood', 'spritehood'], - 'priestless': ['priestless', 'stripeless'], - 'prig': ['grip', 'prig'], - 'prigman': ['gripman', 'prigman', 'ramping'], - 'prima': ['impar', 'pamir', 'prima'], - 'primage': ['epigram', 'primage'], - 'primal': ['imparl', 'primal'], - 'primates': ['maspiter', 'pastimer', 'primates'], - 'primatial': ['impartial', 'primatial'], - 'primely': ['primely', 'reimply'], - 'primeness': ['primeness', 'spenerism'], - 'primost': ['primost', 'tropism'], - 'primrose': ['primrose', 'promiser'], - 'primsie': ['pismire', 'primsie'], - 'primus': ['primus', 'purism'], - 'prince': ['pincer', 'prince'], - 'princehood': ['cnidophore', 'princehood'], - 'princeite': ['princeite', 'recipient'], - 'princelike': ['pincerlike', 'princelike'], - 'princely': ['pencilry', 'princely'], - 'princesse': ['crepiness', 'princesse'], - 'prine': ['piner', 'prine', 'repin', 'ripen'], - 'pringle': ['pingler', 'pringle'], - 'printed': ['deprint', 'printed'], - 'printer': ['printer', 'reprint'], - 'priodontes': ['desorption', 'priodontes'], - 'prionopine': ['preopinion', 'prionopine'], - 'prisage': ['prisage', 'spairge'], - 'prisal': ['prisal', 'spiral'], - 'prismatoid': ['diatropism', 'prismatoid'], - 'prisometer': ['prisometer', 'spirometer'], - 'prisonable': ['bipersonal', 'prisonable'], - 'pristane': ['pinaster', 'pristane'], - 'pristine': ['enspirit', 'pristine'], - 'pristis': ['pristis', 'tripsis'], - 'prius': ['prius', 'sirup'], - 'proadmission': ['adpromission', 'proadmission'], - 'proal': ['parol', 'polar', 'poral', 'proal'], - 'proalien': ['pelorian', 'peronial', 'proalien'], - 'proamniotic': ['comparition', 'proamniotic'], - 'proathletic': ['proathletic', 'prothetical'], - 'proatlas': ['pastoral', 'proatlas'], - 'proavis': ['pavisor', 'proavis'], - 'probationer': ['probationer', 'reprobation'], - 'probe': ['probe', 'rebop'], - 'procaciously': ['plousiocracy', 'procaciously'], - 'procaine': ['caponier', 'coprinae', 'procaine'], - 'procanal': ['coplanar', 'procanal'], - 'procapital': ['applicator', 'procapital'], - 'procedure': ['procedure', 'reproduce'], - 'proceeder': ['proceeder', 'reproceed'], - 'procellas': ['procellas', 'scalloper'], - 'procerite': ['procerite', 'receiptor'], - 'procession': ['procession', 'scorpiones'], - 'prochemical': ['microcephal', 'prochemical'], - 'procidentia': ['predication', 'procidentia'], - 'proclaimer': ['proclaimer', 'reproclaim'], - 'procne': ['crepon', 'procne'], - 'procnemial': ['complainer', 'procnemial', 'recomplain'], - 'procommission': ['compromission', 'procommission'], - 'procreant': ['copartner', 'procreant'], - 'procreate': ['procreate', 'pterocera'], - 'procreation': ['incorporate', 'procreation'], - 'proctal': ['caltrop', 'proctal'], - 'proctitis': ['proctitis', 'protistic', 'tropistic'], - 'proctocolitis': ['coloproctitis', 'proctocolitis'], - 'procuress': ['percussor', 'procuress'], - 'prod': ['dorp', 'drop', 'prod'], - 'proddle': ['plodder', 'proddle'], - 'proem': ['merop', 'moper', 'proem', 'remop'], - 'proemial': ['emporial', 'proemial'], - 'proemium': ['emporium', 'pomerium', 'proemium'], - 'proethical': ['carpholite', 'proethical'], - 'proetid': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'], - 'proetidae': ['periodate', 'proetidae', 'proteidae'], - 'proetus': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'], - 'proficient': ['prefiction', 'proficient'], - 'profit': ['forpit', 'profit'], - 'profiter': ['portfire', 'profiter'], - 'progeny': ['progeny', 'pyrogen'], - 'prohibiter': ['prohibiter', 'reprohibit'], - 'proidealistic': ['peridiastolic', 'periodicalist', 'proidealistic'], - 'proke': ['poker', 'proke'], - 'proker': ['porker', 'proker'], - 'prolacrosse': ['prolacrosse', 'sclerospora'], - 'prolapse': ['prolapse', 'sapropel'], - 'prolation': ['ploration', 'portional', 'prolation'], - 'prolegate': ['petrogale', 'petrolage', 'prolegate'], - 'proletarian': ['prerational', 'proletarian'], - 'proletarianize': ['prerealization', 'proletarianize'], - 'proletariat': ['proletariat', 'reptatorial'], - 'proletary': ['proletary', 'pyrolater'], - 'prolicense': ['prolicense', 'proselenic'], - 'prolongate': ['prolongate', 'protogenal'], - 'promerit': ['importer', 'promerit', 'reimport'], - 'promethean': ['heptameron', 'promethean'], - 'promise': ['imposer', 'promise', 'semipro'], - 'promisee': ['perisome', 'promisee', 'reimpose'], - 'promiser': ['primrose', 'promiser'], - 'promitosis': ['isotropism', 'promitosis'], - 'promnesia': ['mesropian', 'promnesia', 'spironema'], - 'promonarchist': ['micranthropos', 'promonarchist'], - 'promote': ['promote', 'protome'], - 'pronaos': ['pronaos', 'soprano'], - 'pronate': ['operant', 'pronate', 'protean'], - 'pronative': ['overpaint', 'pronative'], - 'proneur': ['proneur', 'purrone'], - 'pronotal': ['portolan', 'pronotal'], - 'pronto': ['pronto', 'proton'], - 'pronunciable': ['preconnubial', 'pronunciable'], - 'proo': ['poor', 'proo'], - 'proofer': ['proofer', 'reproof'], - 'prop': ['prop', 'ropp'], - 'propellent': ['prepollent', 'propellent'], - 'propene': ['preopen', 'propene'], - 'prophloem': ['pleomorph', 'prophloem'], - 'propine': ['piperno', 'propine'], - 'propinoic': ['propinoic', 'propionic'], - 'propionic': ['propinoic', 'propionic'], - 'propitial': ['propitial', 'triplopia'], - 'proportioner': ['proportioner', 'reproportion'], - 'propose': ['opposer', 'propose'], - 'propraetorial': ['propraetorial', 'protoperlaria'], - 'proprietous': ['peritropous', 'proprietous'], - 'propylene': ['polyprene', 'propylene'], - 'propyne': ['propyne', 'pyropen'], - 'prorate': ['praetor', 'prorate'], - 'proration': ['proration', 'troparion'], - 'prore': ['porer', 'prore', 'roper'], - 'prorebate': ['perborate', 'prorebate', 'reprobate'], - 'proreduction': ['proreduction', 'reproduction'], - 'prorevision': ['prorevision', 'provisioner', 'reprovision'], - 'prorogate': ['graperoot', 'prorogate'], - 'prosaist': ['prosaist', 'protasis'], - 'prosateur': ['prosateur', 'pterosaur'], - 'prose': ['poser', 'prose', 'ropes', 'spore'], - 'prosecretin': ['prosecretin', 'reinspector'], - 'prosectorial': ['corporealist', 'prosectorial'], - 'prosectorium': ['micropterous', 'prosectorium'], - 'proselenic': ['prolicense', 'proselenic'], - 'proselyte': ['polyester', 'proselyte'], - 'proseminate': ['impersonate', 'proseminate'], - 'prosemination': ['impersonation', 'prosemination', 'semipronation'], - 'proseneschal': ['chaperonless', 'proseneschal'], - 'prosification': ['antisoporific', 'prosification', 'sporification'], - 'prosilient': ['linopteris', 'prosilient'], - 'prosiphonate': ['nephroptosia', 'prosiphonate'], - 'proso': ['poros', 'proso', 'sopor', 'spoor'], - 'prosodiacal': ['dorsoapical', 'prosodiacal'], - 'prosopyle': ['polyspore', 'prosopyle'], - 'prossy': ['prossy', 'spyros'], - 'prostatectomy': ['cryptostomate', 'prostatectomy'], - 'prosternate': ['paternoster', 'prosternate', 'transportee'], - 'prostomiate': ['metroptosia', 'prostomiate'], - 'protactic': ['catoptric', 'protactic'], - 'protasis': ['prosaist', 'protasis'], - 'prote': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'], - 'protead': ['adopter', 'protead', 'readopt'], - 'protean': ['operant', 'pronate', 'protean'], - 'protease': ['asterope', 'protease'], - 'protectional': ['lactoprotein', 'protectional'], - 'proteic': ['perotic', 'proteic', 'tropeic'], - 'proteida': ['apteroid', 'proteida'], - 'proteidae': ['periodate', 'proetidae', 'proteidae'], - 'proteidean': ['pontederia', 'proteidean'], - 'protein': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'], - 'proteinic': ['epornitic', 'proteinic'], - 'proteles': ['proteles', 'serpolet'], - 'protelidae': ['leopardite', 'protelidae'], - 'protend': ['portend', 'protend'], - 'protension': ['portension', 'protension'], - 'proteolysis': ['elytroposis', 'proteolysis'], - 'proteose': ['esotrope', 'proteose'], - 'protest': ['protest', 'spotter'], - 'protester': ['protester', 'reprotest'], - 'proteus': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'], - 'protheca': ['archpoet', 'protheca'], - 'prothesis': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'], - 'prothetical': ['proathletic', 'prothetical'], - 'prothoracic': ['acrotrophic', 'prothoracic'], - 'protide': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'], - 'protist': ['protist', 'tropist'], - 'protistic': ['proctitis', 'protistic', 'tropistic'], - 'proto': ['porto', 'proto', 'troop'], - 'protocneme': ['mecopteron', 'protocneme'], - 'protogenal': ['prolongate', 'protogenal'], - 'protoma': ['protoma', 'taproom'], - 'protomagnesium': ['protomagnesium', 'spermatogonium'], - 'protome': ['promote', 'protome'], - 'protomorphic': ['morphotropic', 'protomorphic'], - 'proton': ['pronto', 'proton'], - 'protone': ['porteno', 'protone'], - 'protonemal': ['monopteral', 'protonemal'], - 'protoparent': ['protoparent', 'protopteran'], - 'protopathic': ['haptotropic', 'protopathic'], - 'protopathy': ['protopathy', 'protophyta'], - 'protoperlaria': ['propraetorial', 'protoperlaria'], - 'protophyta': ['protopathy', 'protophyta'], - 'protophyte': ['protophyte', 'tropophyte'], - 'protophytic': ['protophytic', 'tropophytic'], - 'protopine': ['preoption', 'protopine'], - 'protopteran': ['protoparent', 'protopteran'], - 'protore': ['protore', 'trooper'], - 'protosulphide': ['protosulphide', 'sulphoproteid'], - 'prototheme': ['photometer', 'prototheme'], - 'prototherian': ['ornithoptera', 'prototherian'], - 'prototrophic': ['prototrophic', 'trophotropic'], - 'protrade': ['predator', 'protrade', 'teardrop'], - 'protreaty': ['protreaty', 'reptatory'], - 'protuberantial': ['perturbational', 'protuberantial'], - 'protyl': ['portly', 'protyl', 'tropyl'], - 'provenient': ['prevention', 'provenient'], - 'provide': ['prevoid', 'provide'], - 'provider': ['overdrip', 'provider'], - 'provisioner': ['prorevision', 'provisioner', 'reprovision'], - 'prowed': ['powder', 'prowed'], - 'prude': ['drupe', 'duper', 'perdu', 'prude', 'pured'], - 'prudent': ['prudent', 'prunted', 'uptrend'], - 'prudential': ['prudential', 'putredinal'], - 'prudist': ['disrupt', 'prudist'], - 'prudy': ['prudy', 'purdy', 'updry'], - 'prue': ['peru', 'prue', 'pure'], - 'prune': ['perun', 'prune'], - 'prunted': ['prudent', 'prunted', 'uptrend'], - 'prussic': ['prussic', 'scirpus'], - 'prut': ['prut', 'turp'], - 'pry': ['pry', 'pyr'], - 'pryer': ['perry', 'pryer'], - 'pryse': ['pryse', 'spyer'], - 'psalm': ['plasm', 'psalm', 'slamp'], - 'psalmic': ['plasmic', 'psalmic'], - 'psalmister': ['psalmister', 'spermalist'], - 'psalmodial': ['plasmodial', 'psalmodial'], - 'psalmodic': ['plasmodic', 'psalmodic'], - 'psaloid': ['psaloid', 'salpoid'], - 'psalter': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'], - 'psalterian': ['alpestrian', 'palestrian', 'psalterian'], - 'psalterion': ['interposal', 'psalterion'], - 'psaltery': ['plastery', 'psaltery'], - 'psaltress': ['psaltress', 'strapless'], - 'psaronius': ['prasinous', 'psaronius'], - 'psedera': ['psedera', 'respade'], - 'psellism': ['misspell', 'psellism'], - 'pseudelytron': ['pseudelytron', 'unproselyted'], - 'pseudimago': ['megapodius', 'pseudimago'], - 'pseudophallic': ['diplocephalus', 'pseudophallic'], - 'psha': ['hasp', 'pash', 'psha', 'shap'], - 'psi': ['psi', 'sip'], - 'psiloceratid': ['prediastolic', 'psiloceratid'], - 'psilophyton': ['polyphonist', 'psilophyton'], - 'psilotic': ['colpitis', 'politics', 'psilotic'], - 'psittacine': ['antiseptic', 'psittacine'], - 'psoadic': ['psoadic', 'scapoid', 'sciapod'], - 'psoas': ['passo', 'psoas'], - 'psocidae': ['diascope', 'psocidae', 'scopidae'], - 'psocine': ['psocine', 'scopine'], - 'psora': ['psora', 'sapor', 'sarpo'], - 'psoralea': ['parosela', 'psoralea'], - 'psoroid': ['psoroid', 'sporoid'], - 'psorous': ['psorous', 'soursop', 'sporous'], - 'psychobiological': ['biopsychological', 'psychobiological'], - 'psychobiology': ['biopsychology', 'psychobiology'], - 'psychogalvanic': ['galvanopsychic', 'psychogalvanic'], - 'psychomancy': ['psychomancy', 'scyphomancy'], - 'psychomonism': ['monopsychism', 'psychomonism'], - 'psychoneurological': ['neuropsychological', 'psychoneurological'], - 'psychoneurosis': ['neuropsychosis', 'psychoneurosis'], - 'psychophysiological': ['physiopsychological', 'psychophysiological'], - 'psychophysiology': ['physiopsychology', 'psychophysiology'], - 'psychorrhagy': ['chrysography', 'psychorrhagy'], - 'psychosomatic': ['psychosomatic', 'somatopsychic'], - 'psychotechnology': ['psychotechnology', 'technopsychology'], - 'psychotheism': ['psychotheism', 'theopsychism'], - 'psychotria': ['physiocrat', 'psychotria'], - 'ptelea': ['apelet', 'ptelea'], - 'ptereal': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'], - 'pterian': ['painter', 'pertain', 'pterian', 'repaint'], - 'pterideous': ['depositure', 'pterideous'], - 'pteridological': ['dipterological', 'pteridological'], - 'pteridologist': ['dipterologist', 'pteridologist'], - 'pteridology': ['dipterology', 'pteridology'], - 'pterion': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'], - 'pteris': ['priest', 'pteris', 'sprite', 'stripe'], - 'pterocera': ['procreate', 'pterocera'], - 'pterodactylidae': ['dactylopteridae', 'pterodactylidae'], - 'pterodactylus': ['dactylopterus', 'pterodactylus'], - 'pterographer': ['petrographer', 'pterographer'], - 'pterographic': ['petrographic', 'pterographic'], - 'pterographical': ['petrographical', 'pterographical'], - 'pterography': ['petrography', 'pterography', 'typographer'], - 'pteroid': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'], - 'pteroma': ['pteroma', 'tempora'], - 'pteropus': ['pteropus', 'stoppeur'], - 'pterosaur': ['prosateur', 'pterosaur'], - 'pterospora': ['praepostor', 'pterospora'], - 'pteryla': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'], - 'pterylographical': ['petrographically', 'pterylographical'], - 'pterylological': ['petrologically', 'pterylological'], - 'pterylosis': ['peristylos', 'pterylosis'], - 'ptilota': ['ptilota', 'talipot', 'toptail'], - 'ptinus': ['ptinus', 'unspit'], - 'ptolemean': ['leptonema', 'ptolemean'], - 'ptomain': ['maintop', 'ptomain', 'tampion', 'timpano'], - 'ptomainic': ['impaction', 'ptomainic'], - 'ptyalin': ['inaptly', 'planity', 'ptyalin'], - 'ptyalocele': ['clypeolate', 'ptyalocele'], - 'ptyalogenic': ['genotypical', 'ptyalogenic'], - 'pu': ['pu', 'up'], - 'pua': ['pau', 'pua'], - 'puan': ['napu', 'puan', 'puna'], - 'publisher': ['publisher', 'republish'], - 'puckball': ['puckball', 'pullback'], - 'puckrel': ['plucker', 'puckrel'], - 'pud': ['dup', 'pud'], - 'pudendum': ['pudendum', 'undumped'], - 'pudent': ['pudent', 'uptend'], - 'pudic': ['cupid', 'pudic'], - 'pudical': ['paludic', 'pudical'], - 'pudicity': ['cupidity', 'pudicity'], - 'puerer': ['puerer', 'purree'], - 'puffer': ['puffer', 'repuff'], - 'pug': ['gup', 'pug'], - 'pugman': ['panmug', 'pugman'], - 'puisne': ['puisne', 'supine'], - 'puist': ['puist', 'upsit'], - 'puja': ['jaup', 'puja'], - 'puke': ['keup', 'puke'], - 'pule': ['lupe', 'pelu', 'peul', 'pule'], - 'pulian': ['paulin', 'pulian'], - 'pulicene': ['clupeine', 'pulicene'], - 'pulicidal': ['picudilla', 'pulicidal'], - 'pulicide': ['lupicide', 'pediculi', 'pulicide'], - 'puling': ['gulpin', 'puling'], - 'pulish': ['huspil', 'pulish'], - 'pullback': ['puckball', 'pullback'], - 'pulp': ['plup', 'pulp'], - 'pulper': ['pulper', 'purple'], - 'pulpiter': ['pulpiter', 'repulpit'], - 'pulpous': ['populus', 'pulpous'], - 'pulpstone': ['pulpstone', 'unstopple'], - 'pulsant': ['pulsant', 'upslant'], - 'pulsate': ['pulsate', 'spatule', 'upsteal'], - 'pulsatile': ['palluites', 'pulsatile'], - 'pulsation': ['platinous', 'pulsation'], - 'pulsator': ['postural', 'pulsator', 'sportula'], - 'pulse': ['lepus', 'pulse'], - 'pulsion': ['pulsion', 'unspoil', 'upsilon'], - 'pulvic': ['pulvic', 'vulpic'], - 'pumper': ['pumper', 'repump'], - 'pumple': ['peplum', 'pumple'], - 'puna': ['napu', 'puan', 'puna'], - 'puncher': ['puncher', 'unperch'], - 'punctilio': ['punctilio', 'unpolitic'], - 'puncturer': ['puncturer', 'upcurrent'], - 'punger': ['punger', 'repugn'], - 'pungle': ['plunge', 'pungle'], - 'puniceous': ['pecunious', 'puniceous'], - 'punish': ['inpush', 'punish', 'unship'], - 'punisher': ['punisher', 'repunish'], - 'punishment': ['punishment', 'unshipment'], - 'punlet': ['penult', 'punlet', 'puntel'], - 'punnet': ['punnet', 'unpent'], - 'puno': ['noup', 'puno', 'upon'], - 'punta': ['punta', 'unapt', 'untap'], - 'puntal': ['puntal', 'unplat'], - 'puntel': ['penult', 'punlet', 'puntel'], - 'punti': ['input', 'punti'], - 'punto': ['punto', 'unpot', 'untop'], - 'pupa': ['paup', 'pupa'], - 'pupelo': ['poulpe', 'pupelo'], - 'purana': ['purana', 'uparna'], - 'purdy': ['prudy', 'purdy', 'updry'], - 'pure': ['peru', 'prue', 'pure'], - 'pured': ['drupe', 'duper', 'perdu', 'prude', 'pured'], - 'puree': ['puree', 'rupee'], - 'purer': ['purer', 'purre'], - 'purine': ['purine', 'unripe', 'uprein'], - 'purism': ['primus', 'purism'], - 'purist': ['purist', 'spruit', 'uprist', 'upstir'], - 'puritan': ['pintura', 'puritan', 'uptrain'], - 'puritaness': ['presustain', 'puritaness', 'supersaint'], - 'purler': ['purler', 'purrel'], - 'purple': ['pulper', 'purple'], - 'purpose': ['peropus', 'purpose'], - 'purpuroxanthin': ['purpuroxanthin', 'xanthopurpurin'], - 'purre': ['purer', 'purre'], - 'purree': ['puerer', 'purree'], - 'purrel': ['purler', 'purrel'], - 'purrone': ['proneur', 'purrone'], - 'purse': ['purse', 'resup', 'sprue', 'super'], - 'purser': ['purser', 'spruer'], - 'purslane': ['purslane', 'serpulan', 'supernal'], - 'purslet': ['purslet', 'spurlet', 'spurtle'], - 'pursuer': ['pursuer', 'usurper'], - 'pursy': ['pursy', 'pyrus', 'syrup'], - 'pus': ['pus', 'sup'], - 'pushtu': ['pushtu', 'upshut'], - 'pustule': ['pluteus', 'pustule'], - 'pustulose': ['pustulose', 'stupulose'], - 'put': ['put', 'tup'], - 'putanism': ['putanism', 'sumpitan'], - 'putation': ['outpaint', 'putation'], - 'putredinal': ['prudential', 'putredinal'], - 'putrid': ['putrid', 'turpid'], - 'putridly': ['putridly', 'turpidly'], - 'pya': ['pay', 'pya', 'yap'], - 'pyal': ['paly', 'play', 'pyal', 'pyla'], - 'pycnial': ['pliancy', 'pycnial'], - 'pyelic': ['epicly', 'pyelic'], - 'pyelitis': ['pyelitis', 'sipylite'], - 'pyelocystitis': ['cystopyelitis', 'pyelocystitis'], - 'pyelonephritis': ['nephropyelitis', 'pyelonephritis'], - 'pyeloureterogram': ['pyeloureterogram', 'ureteropyelogram'], - 'pyemesis': ['empyesis', 'pyemesis'], - 'pygmalion': ['maypoling', 'pygmalion'], - 'pyin': ['piny', 'pyin'], - 'pyla': ['paly', 'play', 'pyal', 'pyla'], - 'pylades': ['pylades', 'splayed'], - 'pylagore': ['playgoer', 'pylagore'], - 'pylar': ['parly', 'pylar', 'pyral'], - 'pyonephrosis': ['nephropyosis', 'pyonephrosis'], - 'pyopneumothorax': ['pneumopyothorax', 'pyopneumothorax'], - 'pyosepticemia': ['pyosepticemia', 'septicopyemia'], - 'pyosepticemic': ['pyosepticemic', 'septicopyemic'], - 'pyr': ['pry', 'pyr'], - 'pyracanth': ['pantarchy', 'pyracanth'], - 'pyral': ['parly', 'pylar', 'pyral'], - 'pyrales': ['parsley', 'pyrales', 'sparely', 'splayer'], - 'pyralid': ['pyralid', 'rapidly'], - 'pyramidale': ['lampyridae', 'pyramidale'], - 'pyranometer': ['premonetary', 'pyranometer'], - 'pyre': ['prey', 'pyre', 'rype'], - 'pyrena': ['napery', 'pyrena'], - 'pyrenic': ['cyprine', 'pyrenic'], - 'pyrenoid': ['pyrenoid', 'pyridone', 'pyrodine'], - 'pyretogenic': ['pyretogenic', 'pyrogenetic'], - 'pyrex': ['prexy', 'pyrex'], - 'pyrgocephaly': ['pelycography', 'pyrgocephaly'], - 'pyridone': ['pyrenoid', 'pyridone', 'pyrodine'], - 'pyrites': ['pyrites', 'sperity'], - 'pyritoid': ['pityroid', 'pyritoid'], - 'pyro': ['pory', 'pyro', 'ropy'], - 'pyroarsenite': ['arsenopyrite', 'pyroarsenite'], - 'pyrochemical': ['microcephaly', 'pyrochemical'], - 'pyrocomenic': ['pyrocomenic', 'pyromeconic'], - 'pyrodine': ['pyrenoid', 'pyridone', 'pyrodine'], - 'pyrogen': ['progeny', 'pyrogen'], - 'pyrogenetic': ['pyretogenic', 'pyrogenetic'], - 'pyrolater': ['proletary', 'pyrolater'], - 'pyromantic': ['importancy', 'patronymic', 'pyromantic'], - 'pyromeconic': ['pyrocomenic', 'pyromeconic'], - 'pyrope': ['popery', 'pyrope'], - 'pyropen': ['propyne', 'pyropen'], - 'pyrophorus': ['porphyrous', 'pyrophorus'], - 'pyrotheria': ['erythropia', 'pyrotheria'], - 'pyruline': ['pyruline', 'unripely'], - 'pyrus': ['pursy', 'pyrus', 'syrup'], - 'pyruvil': ['pyruvil', 'pyvuril'], - 'pythagorism': ['myographist', 'pythagorism'], - 'pythia': ['pythia', 'typhia'], - 'pythic': ['phytic', 'pitchy', 'pythic', 'typhic'], - 'pythogenesis': ['phytogenesis', 'pythogenesis'], - 'pythogenetic': ['phytogenetic', 'pythogenetic'], - 'pythogenic': ['phytogenic', 'pythogenic', 'typhogenic'], - 'pythogenous': ['phytogenous', 'pythogenous'], - 'python': ['phyton', 'python'], - 'pythonic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'], - 'pythonism': ['hypnotism', 'pythonism'], - 'pythonist': ['hypnotist', 'pythonist'], - 'pythonize': ['hypnotize', 'pythonize'], - 'pythonoid': ['hypnotoid', 'pythonoid'], - 'pyvuril': ['pyruvil', 'pyvuril'], - 'quadrual': ['quadrual', 'quadrula'], - 'quadrula': ['quadrual', 'quadrula'], - 'quail': ['quail', 'quila'], - 'quake': ['quake', 'queak'], - 'quale': ['equal', 'quale', 'queal'], - 'qualitied': ['liquidate', 'qualitied'], - 'quamoclit': ['coquitlam', 'quamoclit'], - 'quannet': ['quannet', 'tanquen'], - 'quartile': ['quartile', 'requital', 'triequal'], - 'quartine': ['antiquer', 'quartine'], - 'quata': ['quata', 'taqua'], - 'quatrin': ['quatrin', 'tarquin'], - 'queak': ['quake', 'queak'], - 'queal': ['equal', 'quale', 'queal'], - 'queeve': ['eveque', 'queeve'], - 'quencher': ['quencher', 'requench'], - 'querier': ['querier', 'require'], - 'queriman': ['queriman', 'ramequin'], - 'querist': ['querist', 'squiret'], - 'quernal': ['quernal', 'ranquel'], - 'quester': ['quester', 'request'], - 'questioner': ['questioner', 'requestion'], - 'questor': ['questor', 'torques'], - 'quiet': ['quiet', 'quite'], - 'quietable': ['equitable', 'quietable'], - 'quieter': ['quieter', 'requite'], - 'quietist': ['equitist', 'quietist'], - 'quietsome': ['quietsome', 'semiquote'], - 'quiina': ['quiina', 'quinia'], - 'quila': ['quail', 'quila'], - 'quiles': ['quiles', 'quisle'], - 'quinate': ['antique', 'quinate'], - 'quince': ['cinque', 'quince'], - 'quinia': ['quiina', 'quinia'], - 'quinite': ['inquiet', 'quinite'], - 'quinnat': ['quinnat', 'quintan'], - 'quinse': ['quinse', 'sequin'], - 'quintan': ['quinnat', 'quintan'], - 'quintato': ['quintato', 'totaquin'], - 'quinze': ['quinze', 'zequin'], - 'quirt': ['quirt', 'qurti'], - 'quisle': ['quiles', 'quisle'], - 'quite': ['quiet', 'quite'], - 'quits': ['quits', 'squit'], - 'quote': ['quote', 'toque'], - 'quoter': ['quoter', 'roquet', 'torque'], - 'qurti': ['quirt', 'qurti'], - 'ra': ['ar', 'ra'], - 'raad': ['adar', 'arad', 'raad', 'rada'], - 'raash': ['asarh', 'raash', 'sarah'], - 'rab': ['bar', 'bra', 'rab'], - 'raband': ['bandar', 'raband'], - 'rabatine': ['atabrine', 'rabatine'], - 'rabatte': ['baretta', 'rabatte', 'tabaret'], - 'rabbanite': ['barnabite', 'rabbanite', 'rabbinate'], - 'rabbet': ['barbet', 'rabbet', 'tabber'], - 'rabbinate': ['barnabite', 'rabbanite', 'rabbinate'], - 'rabble': ['barbel', 'labber', 'rabble'], - 'rabboni': ['barbion', 'rabboni'], - 'rabi': ['abir', 'bari', 'rabi'], - 'rabic': ['baric', 'carib', 'rabic'], - 'rabid': ['barid', 'bidar', 'braid', 'rabid'], - 'rabidly': ['bardily', 'rabidly', 'ridably'], - 'rabidness': ['bardiness', 'rabidness'], - 'rabies': ['braise', 'rabies', 'rebias'], - 'rabin': ['abrin', 'bairn', 'brain', 'brian', 'rabin'], - 'rabinet': ['atebrin', 'rabinet'], - 'raccoon': ['carcoon', 'raccoon'], - 'race': ['acer', 'acre', 'care', 'crea', 'race'], - 'racemate': ['camerate', 'macerate', 'racemate'], - 'racemation': ['aeromantic', 'cameration', 'maceration', 'racemation'], - 'raceme': ['amerce', 'raceme'], - 'racemed': ['decream', 'racemed'], - 'racemic': ['ceramic', 'racemic'], - 'racer': ['carer', 'crare', 'racer'], - 'rach': ['arch', 'char', 'rach'], - 'rache': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'], - 'rachel': ['rachel', 'rechal'], - 'rachianectes': ['rachianectes', 'rhacianectes'], - 'rachidial': ['diarchial', 'rachidial'], - 'rachitis': ['architis', 'rachitis'], - 'racial': ['alaric', 'racial'], - 'racialist': ['racialist', 'satirical'], - 'racing': ['arcing', 'racing'], - 'racist': ['crista', 'racist'], - 'rack': ['cark', 'rack'], - 'racker': ['racker', 'rerack'], - 'racket': ['racket', 'retack', 'tacker'], - 'racking': ['arcking', 'carking', 'racking'], - 'rackingly': ['carkingly', 'rackingly'], - 'rackle': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'], - 'racon': ['acorn', 'acron', 'racon'], - 'raconteur': ['cuarteron', 'raconteur'], - 'racoon': ['caroon', 'corona', 'racoon'], - 'racy': ['cary', 'racy'], - 'rad': ['dar', 'rad'], - 'rada': ['adar', 'arad', 'raad', 'rada'], - 'raddle': ['ladder', 'raddle'], - 'raddleman': ['dreamland', 'raddleman'], - 'radectomy': ['myctodera', 'radectomy'], - 'radek': ['daker', 'drake', 'kedar', 'radek'], - 'radiable': ['labridae', 'radiable'], - 'radiale': ['ardelia', 'laridae', 'radiale'], - 'radian': ['adrian', 'andira', 'andria', 'radian', 'randia'], - 'radiance': ['caridean', 'dircaean', 'radiance'], - 'radiant': ['intrada', 'radiant'], - 'radiata': ['dataria', 'radiata'], - 'radical': ['cardial', 'radical'], - 'radicant': ['antacrid', 'cardiant', 'radicant', 'tridacna'], - 'radicel': ['decrial', 'radicel', 'radicle'], - 'radices': ['diceras', 'radices', 'sidecar'], - 'radicle': ['decrial', 'radicel', 'radicle'], - 'radicose': ['idocrase', 'radicose'], - 'radicule': ['auricled', 'radicule'], - 'radiculose': ['coresidual', 'radiculose'], - 'radiectomy': ['acidometry', 'medicatory', 'radiectomy'], - 'radii': ['dairi', 'darii', 'radii'], - 'radio': ['aroid', 'doria', 'radio'], - 'radioautograph': ['autoradiograph', 'radioautograph'], - 'radioautographic': ['autoradiographic', 'radioautographic'], - 'radioautography': ['autoradiography', 'radioautography'], - 'radiohumeral': ['humeroradial', 'radiohumeral'], - 'radiolite': ['editorial', 'radiolite'], - 'radiolucent': ['radiolucent', 'reductional'], - 'radioman': ['adoniram', 'radioman'], - 'radiomicrometer': ['microradiometer', 'radiomicrometer'], - 'radiophone': ['phoronidea', 'radiophone'], - 'radiophony': ['hypodorian', 'radiophony'], - 'radiotelephone': ['radiotelephone', 'teleradiophone'], - 'radiotron': ['ordinator', 'radiotron'], - 'radish': ['ardish', 'radish'], - 'radius': ['darius', 'radius'], - 'radman': ['mandra', 'radman'], - 'radon': ['adorn', 'donar', 'drona', 'radon'], - 'radula': ['adular', 'aludra', 'radula'], - 'rafael': ['aflare', 'rafael'], - 'rafe': ['fare', 'fear', 'frae', 'rafe'], - 'raffee': ['affeer', 'raffee'], - 'raffia': ['affair', 'raffia'], - 'raffle': ['farfel', 'raffle'], - 'rafik': ['fakir', 'fraik', 'kafir', 'rafik'], - 'raft': ['frat', 'raft'], - 'raftage': ['fregata', 'raftage'], - 'rafter': ['frater', 'rafter'], - 'rag': ['gar', 'gra', 'rag'], - 'raga': ['agar', 'agra', 'gara', 'raga'], - 'rage': ['ager', 'agre', 'gare', 'gear', 'rage'], - 'rageless': ['eelgrass', 'gearless', 'rageless'], - 'ragfish': ['garfish', 'ragfish'], - 'ragged': ['dagger', 'gadger', 'ragged'], - 'raggee': ['agrege', 'raggee'], - 'raggety': ['gargety', 'raggety'], - 'raggle': ['gargle', 'gregal', 'lagger', 'raggle'], - 'raggled': ['draggle', 'raggled'], - 'raggy': ['aggry', 'raggy'], - 'ragingly': ['grayling', 'ragingly'], - 'raglanite': ['antiglare', 'raglanite'], - 'raglet': ['raglet', 'tergal'], - 'raglin': ['nargil', 'raglin'], - 'ragman': ['amgarn', 'mangar', 'marang', 'ragman'], - 'ragnar': ['garran', 'ragnar'], - 'ragshag': ['ragshag', 'shagrag'], - 'ragtag': ['ragtag', 'tagrag'], - 'ragtime': ['migrate', 'ragtime'], - 'ragule': ['ragule', 'regula'], - 'raguly': ['glaury', 'raguly'], - 'raia': ['aira', 'aria', 'raia'], - 'raid': ['arid', 'dari', 'raid'], - 'raider': ['arride', 'raider'], - 'raif': ['fair', 'fiar', 'raif'], - 'raiidae': ['ariidae', 'raiidae'], - 'rail': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'railage': ['lairage', 'railage', 'regalia'], - 'railer': ['railer', 'rerail'], - 'railhead': ['headrail', 'railhead'], - 'railless': ['lairless', 'railless'], - 'railman': ['lairman', 'laminar', 'malarin', 'railman'], - 'raiment': ['minaret', 'raiment', 'tireman'], - 'rain': ['arni', 'iran', 'nair', 'rain', 'rani'], - 'raincoat': ['craniota', 'croatian', 'narcotia', 'raincoat'], - 'rainful': ['rainful', 'unfrail'], - 'rainspout': ['rainspout', 'supinator'], - 'rainy': ['nairy', 'rainy'], - 'rais': ['rais', 'sair', 'sari'], - 'raise': ['aries', 'arise', 'raise', 'serai'], - 'raiseman': ['erasmian', 'raiseman'], - 'raiser': ['raiser', 'sierra'], - 'raisin': ['raisin', 'sirian'], - 'raj': ['jar', 'raj'], - 'raja': ['ajar', 'jara', 'raja'], - 'rajah': ['ajhar', 'rajah'], - 'rajeev': ['evejar', 'rajeev'], - 'rake': ['rake', 'reak'], - 'rakesteel': ['rakesteel', 'rakestele'], - 'rakestele': ['rakesteel', 'rakestele'], - 'rakh': ['hark', 'khar', 'rakh'], - 'raki': ['ikra', 'kari', 'raki'], - 'rakish': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'], - 'rakit': ['kitar', 'krait', 'rakit', 'traik'], - 'raku': ['kuar', 'raku', 'rauk'], - 'ralf': ['farl', 'ralf'], - 'ralliance': ['alliancer', 'ralliance'], - 'ralline': ['ralline', 'renilla'], - 'ram': ['arm', 'mar', 'ram'], - 'rama': ['amar', 'amra', 'mara', 'rama'], - 'ramada': ['armada', 'damara', 'ramada'], - 'ramage': ['gemara', 'ramage'], - 'ramaite': ['ametria', 'artemia', 'meratia', 'ramaite'], - 'ramal': ['alarm', 'malar', 'maral', 'marla', 'ramal'], - 'ramanas': ['ramanas', 'sramana'], - 'ramate': ['ramate', 'retama'], - 'ramble': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'], - 'rambler': ['marbler', 'rambler'], - 'rambling': ['marbling', 'rambling'], - 'rambo': ['broma', 'rambo'], - 'rambutan': ['rambutan', 'tamburan'], - 'rame': ['erma', 'mare', 'rame', 'ream'], - 'ramed': ['armed', 'derma', 'dream', 'ramed'], - 'rament': ['manter', 'marten', 'rament'], - 'ramental': ['maternal', 'ramental'], - 'ramequin': ['queriman', 'ramequin'], - 'ramesh': ['masher', 'ramesh', 'shamer'], - 'ramet': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'rami': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'], - 'ramie': ['aimer', 'maire', 'marie', 'ramie'], - 'ramiferous': ['armiferous', 'ramiferous'], - 'ramigerous': ['armigerous', 'ramigerous'], - 'ramillie': ['milliare', 'ramillie'], - 'ramisection': ['anisometric', - 'creationism', - 'miscreation', - 'ramisection', - 'reactionism'], - 'ramist': ['marist', 'matris', 'ramist'], - 'ramline': ['marline', 'mineral', 'ramline'], - 'rammel': ['lammer', 'rammel'], - 'rammy': ['mymar', 'rammy'], - 'ramon': ['manor', 'moran', 'norma', 'ramon', 'roman'], - 'ramona': ['oarman', 'ramona'], - 'ramose': ['amores', 'ramose', 'sorema'], - 'ramosely': ['marysole', 'ramosely'], - 'ramp': ['pram', 'ramp'], - 'rampant': ['mantrap', 'rampant'], - 'ramped': ['damper', 'ramped'], - 'ramper': ['prearm', 'ramper'], - 'rampike': ['perakim', 'permiak', 'rampike'], - 'ramping': ['gripman', 'prigman', 'ramping'], - 'ramsey': ['ramsey', 'smeary'], - 'ramson': ['ramson', 'ransom'], - 'ramtil': ['mitral', 'ramtil'], - 'ramule': ['mauler', 'merula', 'ramule'], - 'ramulus': ['malurus', 'ramulus'], - 'ramus': ['musar', 'ramus', 'rusma', 'surma'], - 'ramusi': ['misura', 'ramusi'], - 'ran': ['arn', 'nar', 'ran'], - 'rana': ['arna', 'rana'], - 'ranales': ['arsenal', 'ranales'], - 'rance': ['caner', 'crane', 'crena', 'nacre', 'rance'], - 'rancel': ['lancer', 'rancel'], - 'rancer': ['craner', 'rancer'], - 'ranche': ['enarch', 'ranche'], - 'ranchero': ['anchorer', 'ranchero', 'reanchor'], - 'rancho': ['anchor', 'archon', 'charon', 'rancho'], - 'rancid': ['andric', 'cardin', 'rancid'], - 'rand': ['darn', 'nard', 'rand'], - 'randan': ['annard', 'randan'], - 'randem': ['damner', 'manred', 'randem', 'remand'], - 'rander': ['darner', 'darren', 'errand', 'rander', 'redarn'], - 'randia': ['adrian', 'andira', 'andria', 'radian', 'randia'], - 'randing': ['darning', 'randing'], - 'randite': ['antired', 'detrain', 'randite', 'trained'], - 'randle': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'random': ['random', 'rodman'], - 'rane': ['arne', 'earn', 'rane'], - 'ranere': ['earner', 'ranere'], - 'rang': ['garn', 'gnar', 'rang'], - 'range': ['anger', 'areng', 'grane', 'range'], - 'ranged': ['danger', 'gander', 'garden', 'ranged'], - 'rangeless': ['largeness', 'rangeless', 'regalness'], - 'ranger': ['garner', 'ranger'], - 'rangey': ['anergy', 'rangey'], - 'ranginess': ['angriness', 'ranginess'], - 'rangle': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'], - 'rangy': ['angry', 'rangy'], - 'rani': ['arni', 'iran', 'nair', 'rain', 'rani'], - 'ranid': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'], - 'ranidae': ['araneid', 'ariadne', 'ranidae'], - 'raniform': ['nariform', 'raniform'], - 'raninae': ['aranein', 'raninae'], - 'ranine': ['narine', 'ranine'], - 'rank': ['knar', 'kran', 'nark', 'rank'], - 'ranked': ['darken', 'kanred', 'ranked'], - 'ranker': ['ranker', 'rerank'], - 'rankish': ['krishna', 'rankish'], - 'rannel': ['lanner', 'rannel'], - 'ranquel': ['quernal', 'ranquel'], - 'ransom': ['ramson', 'ransom'], - 'rant': ['natr', 'rant', 'tarn', 'tran'], - 'rantepole': ['petrolean', 'rantepole'], - 'ranter': ['arrent', 'errant', 'ranter', 'ternar'], - 'rantipole': ['prelation', 'rantipole'], - 'ranula': ['alraun', 'alruna', 'ranula'], - 'rap': ['par', 'rap'], - 'rape': ['aper', 'pare', 'pear', 'rape', 'reap'], - 'rapeful': ['rapeful', 'upflare'], - 'raper': ['parer', 'raper'], - 'raphael': ['phalera', 'raphael'], - 'raphaelic': ['eparchial', 'raphaelic'], - 'raphe': ['hepar', 'phare', 'raphe'], - 'raphia': ['pahari', 'pariah', 'raphia'], - 'raphides': ['diphaser', 'parished', 'raphides', 'sephardi'], - 'raphis': ['parish', 'raphis', 'rhapis'], - 'rapic': ['capri', 'picra', 'rapic'], - 'rapid': ['adrip', 'rapid'], - 'rapidly': ['pyralid', 'rapidly'], - 'rapier': ['pairer', 'rapier', 'repair'], - 'rapine': ['parine', 'rapine'], - 'raping': ['paring', 'raping'], - 'rapparee': ['appearer', 'rapparee', 'reappear'], - 'rappe': ['paper', 'rappe'], - 'rappel': ['lapper', 'rappel'], - 'rappite': ['periapt', 'rappite'], - 'rapt': ['part', 'prat', 'rapt', 'tarp', 'trap'], - 'raptly': ['paltry', 'partly', 'raptly'], - 'raptor': ['parrot', 'raptor'], - 'rapture': ['parture', 'rapture'], - 'rare': ['rare', 'rear'], - 'rarebit': ['arbiter', 'rarebit'], - 'rareripe': ['rareripe', 'repairer'], - 'rarish': ['arrish', 'harris', 'rarish', 'sirrah'], - 'ras': ['ras', 'sar'], - 'rasa': ['rasa', 'sara'], - 'rascacio': ['coracias', 'rascacio'], - 'rascal': ['lascar', 'rascal', 'sacral', 'scalar'], - 'rase': ['arse', 'rase', 'sare', 'sear', 'sera'], - 'rasen': ['anser', 'nares', 'rasen', 'snare'], - 'raser': ['ersar', 'raser', 'serra'], - 'rasher': ['rasher', 'sharer'], - 'rashing': ['garnish', 'rashing'], - 'rashti': ['rashti', 'tarish'], - 'rasion': ['arsino', 'rasion', 'sonrai'], - 'rasp': ['rasp', 'spar'], - 'rasped': ['rasped', 'spader', 'spread'], - 'rasper': ['parser', 'rasper', 'sparer'], - 'rasping': ['aspring', 'rasping', 'sparing'], - 'raspingly': ['raspingly', 'sparingly'], - 'raspingness': ['raspingness', 'sparingness'], - 'raspite': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'], - 'raspy': ['raspy', 'spary', 'spray'], - 'rasse': ['arses', 'rasse'], - 'raster': ['arrest', 'astrer', 'raster', 'starer'], - 'rastik': ['rastik', 'sarkit', 'straik'], - 'rastle': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'rastus': ['rastus', 'tarsus'], - 'rat': ['art', 'rat', 'tar', 'tra'], - 'rata': ['rata', 'taar', 'tara'], - 'ratable': ['alberta', 'latebra', 'ratable'], - 'ratal': ['altar', 'artal', 'ratal', 'talar'], - 'ratanhia': ['ratanhia', 'rhatania'], - 'ratbite': ['biretta', 'brattie', 'ratbite'], - 'ratch': ['chart', 'ratch'], - 'ratchel': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'], - 'ratcher': ['charter', 'ratcher'], - 'ratchet': ['chatter', 'ratchet'], - 'ratchety': ['chattery', 'ratchety', 'trachyte'], - 'ratching': ['charting', 'ratching'], - 'rate': ['rate', 'tare', 'tear', 'tera'], - 'rated': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'ratel': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'rateless': ['rateless', 'tasseler', 'tearless', 'tesseral'], - 'ratfish': ['ratfish', 'tashrif'], - 'rath': ['hart', 'rath', 'tahr', 'thar', 'trah'], - 'rathe': ['earth', 'hater', 'heart', 'herat', 'rathe'], - 'rathed': ['dearth', 'hatred', 'rathed', 'thread'], - 'rathely': ['earthly', 'heartly', 'lathery', 'rathely'], - 'ratherest': ['ratherest', 'shatterer'], - 'rathest': ['rathest', 'shatter'], - 'rathite': ['hartite', 'rathite'], - 'rathole': ['loather', 'rathole'], - 'raticidal': ['raticidal', 'triadical'], - 'raticide': ['ceratiid', 'raticide'], - 'ratine': ['nerita', 'ratine', 'retain', 'retina', 'tanier'], - 'rating': ['rating', 'tringa'], - 'ratio': ['ariot', 'ratio'], - 'ration': ['aroint', 'ration'], - 'rationable': ['alboranite', 'rationable'], - 'rational': ['notarial', 'rational', 'rotalian'], - 'rationale': ['alienator', 'rationale'], - 'rationalize': ['rationalize', 'realization'], - 'rationally': ['notarially', 'rationally'], - 'rationate': ['notariate', 'rationate'], - 'ratitae': ['arietta', 'ratitae'], - 'ratite': ['attire', 'ratite', 'tertia'], - 'ratitous': ['outstair', 'ratitous'], - 'ratlike': ['artlike', 'ratlike', 'tarlike'], - 'ratline': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'rattage': ['garetta', 'rattage', 'regatta'], - 'rattan': ['rattan', 'tantra', 'tartan'], - 'ratteen': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'], - 'ratten': ['attern', 'natter', 'ratten', 'tarten'], - 'ratti': ['ratti', 'titar', 'trait'], - 'rattish': ['athirst', 'rattish', 'tartish'], - 'rattle': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'], - 'rattles': ['rattles', 'slatter', 'starlet', 'startle'], - 'rattlesome': ['rattlesome', 'saltometer'], - 'rattly': ['rattly', 'tartly'], - 'ratton': ['attorn', 'ratton', 'rottan'], - 'rattus': ['astrut', 'rattus', 'stuart'], - 'ratwood': ['ratwood', 'tarwood'], - 'raught': ['raught', 'tughra'], - 'rauk': ['kuar', 'raku', 'rauk'], - 'raul': ['alur', 'laur', 'lura', 'raul', 'ural'], - 'rauli': ['rauli', 'urali', 'urial'], - 'raun': ['raun', 'uran', 'urna'], - 'raunge': ['nauger', 'raunge', 'ungear'], - 'rave': ['aver', 'rave', 'vare', 'vera'], - 'ravel': ['arvel', 'larve', 'laver', 'ravel', 'velar'], - 'ravelin': ['elinvar', 'ravelin', 'reanvil', 'valerin'], - 'ravelly': ['ravelly', 'valeryl'], - 'ravendom': ['overdamn', 'ravendom'], - 'ravenelia': ['ravenelia', 'veneralia'], - 'ravenish': ['enravish', 'ravenish', 'vanisher'], - 'ravi': ['ravi', 'riva', 'vair', 'vari', 'vira'], - 'ravigote': ['ravigote', 'rogative'], - 'ravin': ['invar', 'ravin', 'vanir'], - 'ravine': ['averin', 'ravine'], - 'ravined': ['invader', 'ravined', 'viander'], - 'raving': ['grivna', 'raving'], - 'ravissant': ['ravissant', 'srivatsan'], - 'raw': ['raw', 'war'], - 'rawboned': ['downbear', 'rawboned'], - 'rawish': ['rawish', 'wairsh', 'warish'], - 'rax': ['arx', 'rax'], - 'ray': ['ary', 'ray', 'yar'], - 'raya': ['arya', 'raya'], - 'rayan': ['aryan', 'nayar', 'rayan'], - 'rayed': ['deary', 'deray', 'rayed', 'ready', 'yeard'], - 'raylet': ['lyrate', 'raylet', 'realty', 'telary'], - 'rayonnance': ['annoyancer', 'rayonnance'], - 'raze': ['ezra', 'raze'], - 're': ['er', 're'], - 'rea': ['aer', 'are', 'ear', 'era', 'rea'], - 'reaal': ['areal', 'reaal'], - 'reabandon': ['abandoner', 'reabandon'], - 'reabolish': ['abolisher', 'reabolish'], - 'reabsent': ['absenter', 'reabsent'], - 'reabsorb': ['absorber', 'reabsorb'], - 'reaccession': ['accessioner', 'reaccession'], - 'reaccomplish': ['accomplisher', 'reaccomplish'], - 'reaccord': ['accorder', 'reaccord'], - 'reaccost': ['ectosarc', 'reaccost'], - 'reach': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'], - 'reachieve': ['echeveria', 'reachieve'], - 'react': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'reactance': ['cancerate', 'reactance'], - 'reaction': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'], - 'reactional': ['creational', 'crotalinae', 'laceration', 'reactional'], - 'reactionary': ['creationary', 'reactionary'], - 'reactionism': ['anisometric', - 'creationism', - 'miscreation', - 'ramisection', - 'reactionism'], - 'reactionist': ['creationist', 'reactionist'], - 'reactive': ['creative', 'reactive'], - 'reactively': ['creatively', 'reactively'], - 'reactiveness': ['creativeness', 'reactiveness'], - 'reactivity': ['creativity', 'reactivity'], - 'reactor': ['creator', 'reactor'], - 'read': ['ared', 'daer', 'dare', 'dear', 'read'], - 'readapt': ['adapter', 'predata', 'readapt'], - 'readd': ['adder', 'dread', 'readd'], - 'readdress': ['addresser', 'readdress'], - 'reader': ['reader', 'redare', 'reread'], - 'reading': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'], - 'readjust': ['adjuster', 'readjust'], - 'readopt': ['adopter', 'protead', 'readopt'], - 'readorn': ['adorner', 'readorn'], - 'ready': ['deary', 'deray', 'rayed', 'ready', 'yeard'], - 'reaffect': ['affecter', 'reaffect'], - 'reaffirm': ['affirmer', 'reaffirm'], - 'reafflict': ['afflicter', 'reafflict'], - 'reagent': ['grantee', 'greaten', 'reagent', 'rentage'], - 'reagin': ['arenig', 'earing', 'gainer', 'reagin', 'regain'], - 'reak': ['rake', 'reak'], - 'real': ['earl', 'eral', 'lear', 'real'], - 'reales': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'], - 'realest': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'], - 'realign': ['aligner', 'engrail', 'realign', 'reginal'], - 'realignment': ['engrailment', 'realignment'], - 'realism': ['mislear', 'realism'], - 'realist': ['aletris', 'alister', 'listera', 'realist', 'saltier'], - 'realistic': ['eristical', 'realistic'], - 'reality': ['irately', 'reality'], - 'realive': ['realive', 'valerie'], - 'realization': ['rationalize', 'realization'], - 'reallot': ['reallot', 'rotella', 'tallero'], - 'reallow': ['allower', 'reallow'], - 'reallude': ['laureled', 'reallude'], - 'realmlet': ['realmlet', 'tremella'], - 'realter': ['alterer', 'realter', 'relater'], - 'realtor': ['realtor', 'relator'], - 'realty': ['lyrate', 'raylet', 'realty', 'telary'], - 'ream': ['erma', 'mare', 'rame', 'ream'], - 'reamage': ['megaera', 'reamage'], - 'reamass': ['amasser', 'reamass'], - 'reamend': ['amender', 'meander', 'reamend', 'reedman'], - 'reamer': ['marree', 'reamer'], - 'reamuse': ['measure', 'reamuse'], - 'reamy': ['mayer', 'reamy'], - 'reanchor': ['anchorer', 'ranchero', 'reanchor'], - 'reanneal': ['annealer', 'lernaean', 'reanneal'], - 'reannex': ['annexer', 'reannex'], - 'reannoy': ['annoyer', 'reannoy'], - 'reanoint': ['anointer', 'inornate', 'nonirate', 'reanoint'], - 'reanswer': ['answerer', 'reanswer'], - 'reanvil': ['elinvar', 'ravelin', 'reanvil', 'valerin'], - 'reap': ['aper', 'pare', 'pear', 'rape', 'reap'], - 'reapdole': ['leoparde', 'reapdole'], - 'reappeal': ['appealer', 'reappeal'], - 'reappear': ['appearer', 'rapparee', 'reappear'], - 'reapplaud': ['applauder', 'reapplaud'], - 'reappoint': ['appointer', 'reappoint'], - 'reapportion': ['apportioner', 'reapportion'], - 'reapprehend': ['apprehender', 'reapprehend'], - 'reapproach': ['approacher', 'reapproach'], - 'rear': ['rare', 'rear'], - 'reargue': ['augerer', 'reargue'], - 'reargument': ['garmenture', 'reargument'], - 'rearise': ['rearise', 'reraise'], - 'rearm': ['armer', 'rearm'], - 'rearray': ['arrayer', 'rearray'], - 'rearrest': ['arrester', 'rearrest'], - 'reascend': ['ascender', 'reascend'], - 'reascent': ['reascent', 'sarcenet'], - 'reascertain': ['ascertainer', 'reascertain', 'secretarian'], - 'reask': ['asker', 'reask', 'saker', 'sekar'], - 'reason': ['arseno', 'reason'], - 'reassail': ['assailer', 'reassail'], - 'reassault': ['assaulter', 'reassault', 'saleratus'], - 'reassay': ['assayer', 'reassay'], - 'reassent': ['assenter', 'reassent', 'sarsenet'], - 'reassert': ['asserter', 'reassert'], - 'reassign': ['assigner', 'reassign'], - 'reassist': ['assister', 'reassist'], - 'reassort': ['assertor', 'assorter', 'oratress', 'reassort'], - 'reastonish': ['astonisher', 'reastonish', 'treasonish'], - 'reasty': ['atresy', 'estray', 'reasty', 'stayer'], - 'reasy': ['reasy', 'resay', 'sayer', 'seary'], - 'reattach': ['attacher', 'reattach'], - 'reattack': ['attacker', 'reattack'], - 'reattain': ['attainer', 'reattain', 'tertiana'], - 'reattempt': ['attempter', 'reattempt'], - 'reattend': ['attender', 'nattered', 'reattend'], - 'reattest': ['attester', 'reattest'], - 'reattract': ['attracter', 'reattract'], - 'reattraction': ['reattraction', 'retractation'], - 'reatus': ['auster', 'reatus'], - 'reavail': ['reavail', 'valeria'], - 'reave': ['eaver', 'reave'], - 'reavoid': ['avodire', 'avoider', 'reavoid'], - 'reavouch': ['avoucher', 'reavouch'], - 'reavow': ['avower', 'reavow'], - 'reawait': ['awaiter', 'reawait'], - 'reawaken': ['awakener', 'reawaken'], - 'reaward': ['awarder', 'reaward'], - 'reb': ['ber', 'reb'], - 'rebab': ['barbe', 'bebar', 'breba', 'rebab'], - 'reback': ['backer', 'reback'], - 'rebag': ['bagre', 'barge', 'begar', 'rebag'], - 'rebait': ['baiter', 'barite', 'rebait', 'terbia'], - 'rebake': ['beaker', 'berake', 'rebake'], - 'reballast': ['ballaster', 'reballast'], - 'reballot': ['balloter', 'reballot'], - 'reban': ['abner', 'arneb', 'reban'], - 'rebanish': ['banisher', 'rebanish'], - 'rebar': ['barer', 'rebar'], - 'rebargain': ['bargainer', 'rebargain'], - 'rebasis': ['brassie', 'rebasis'], - 'rebate': ['beater', 'berate', 'betear', 'rebate', 'rebeat'], - 'rebater': ['rebater', 'terebra'], - 'rebathe': ['breathe', 'rebathe'], - 'rebato': ['boater', 'borate', 'rebato'], - 'rebawl': ['bawler', 'brelaw', 'rebawl', 'warble'], - 'rebear': ['bearer', 'rebear'], - 'rebeat': ['beater', 'berate', 'betear', 'rebate', 'rebeat'], - 'rebeck': ['becker', 'rebeck'], - 'rebed': ['brede', 'breed', 'rebed'], - 'rebeg': ['gerbe', 'grebe', 'rebeg'], - 'rebeggar': ['beggarer', 'rebeggar'], - 'rebegin': ['bigener', 'rebegin'], - 'rebehold': ['beholder', 'rebehold'], - 'rebellow': ['bellower', 'rebellow'], - 'rebelly': ['bellyer', 'rebelly'], - 'rebelong': ['belonger', 'rebelong'], - 'rebend': ['bender', 'berend', 'rebend'], - 'rebenefit': ['benefiter', 'rebenefit'], - 'rebeset': ['besteer', 'rebeset'], - 'rebestow': ['bestower', 'rebestow'], - 'rebetray': ['betrayer', 'eatberry', 'rebetray', 'teaberry'], - 'rebewail': ['bewailer', 'rebewail'], - 'rebia': ['barie', 'beira', 'erbia', 'rebia'], - 'rebias': ['braise', 'rabies', 'rebias'], - 'rebid': ['bider', 'bredi', 'bride', 'rebid'], - 'rebill': ['biller', 'rebill'], - 'rebillet': ['billeter', 'rebillet'], - 'rebind': ['binder', 'inbred', 'rebind'], - 'rebirth': ['brither', 'rebirth'], - 'rebite': ['bertie', 'betire', 'rebite'], - 'reblade': ['bleared', 'reblade'], - 'reblast': ['blaster', 'reblast', 'stabler'], - 'rebleach': ['bleacher', 'rebleach'], - 'reblend': ['blender', 'reblend'], - 'rebless': ['blesser', 'rebless'], - 'reblock': ['blocker', 'brockle', 'reblock'], - 'rebloom': ['bloomer', 'rebloom'], - 'reblot': ['bolter', 'orblet', 'reblot', 'rebolt'], - 'reblow': ['blower', 'bowler', 'reblow', 'worble'], - 'reblue': ['brulee', 'burele', 'reblue'], - 'rebluff': ['bluffer', 'rebluff'], - 'reblunder': ['blunderer', 'reblunder'], - 'reboant': ['baronet', 'reboant'], - 'reboantic': ['bicornate', 'carbonite', 'reboantic'], - 'reboard': ['arbored', 'boarder', 'reboard'], - 'reboast': ['barotse', 'boaster', 'reboast', 'sorbate'], - 'reboil': ['boiler', 'reboil'], - 'rebold': ['belord', 'bordel', 'rebold'], - 'rebolt': ['bolter', 'orblet', 'reblot', 'rebolt'], - 'rebone': ['boreen', 'enrobe', 'neebor', 'rebone'], - 'rebook': ['booker', 'brooke', 'rebook'], - 'rebop': ['probe', 'rebop'], - 'rebore': ['rebore', 'rerobe'], - 'reborrow': ['borrower', 'reborrow'], - 'rebound': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'], - 'rebounder': ['rebounder', 'underrobe'], - 'rebox': ['boxer', 'rebox'], - 'rebrace': ['cerebra', 'rebrace'], - 'rebraid': ['braider', 'rebraid'], - 'rebranch': ['brancher', 'rebranch'], - 'rebrand': ['bernard', 'brander', 'rebrand'], - 'rebrandish': ['brandisher', 'rebrandish'], - 'rebreed': ['breeder', 'rebreed'], - 'rebrew': ['brewer', 'rebrew'], - 'rebribe': ['berberi', 'rebribe'], - 'rebring': ['bringer', 'rebring'], - 'rebroach': ['broacher', 'rebroach'], - 'rebroadcast': ['broadcaster', 'rebroadcast'], - 'rebrown': ['browner', 'rebrown'], - 'rebrush': ['brusher', 'rebrush'], - 'rebud': ['bedur', 'rebud', 'redub'], - 'rebudget': ['budgeter', 'rebudget'], - 'rebuff': ['buffer', 'rebuff'], - 'rebuffet': ['buffeter', 'rebuffet'], - 'rebuild': ['builder', 'rebuild'], - 'rebulk': ['bulker', 'rebulk'], - 'rebunch': ['buncher', 'rebunch'], - 'rebundle': ['blendure', 'rebundle'], - 'reburden': ['burdener', 'reburden'], - 'reburn': ['burner', 'reburn'], - 'reburnish': ['burnisher', 'reburnish'], - 'reburst': ['burster', 'reburst'], - 'rebus': ['burse', 'rebus', 'suber'], - 'rebush': ['busher', 'rebush'], - 'rebut': ['brute', 'buret', 'rebut', 'tuber'], - 'rebute': ['rebute', 'retube'], - 'rebuttal': ['burletta', 'rebuttal'], - 'rebutton': ['buttoner', 'rebutton'], - 'rebuy': ['buyer', 'rebuy'], - 'recalk': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'], - 'recall': ['caller', 'cellar', 'recall'], - 'recampaign': ['campaigner', 'recampaign'], - 'recancel': ['canceler', 'clarence', 'recancel'], - 'recant': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'recantation': ['recantation', 'triacontane'], - 'recanter': ['canterer', 'recanter', 'recreant', 'terrance'], - 'recap': ['caper', 'crape', 'pacer', 'perca', 'recap'], - 'recaption': ['preaction', 'precation', 'recaption'], - 'recarpet': ['pretrace', 'recarpet'], - 'recart': ['arrect', 'carter', 'crater', 'recart', 'tracer'], - 'recase': ['cesare', 'crease', 'recase', 'searce'], - 'recash': ['arches', 'chaser', 'eschar', 'recash', 'search'], - 'recast': ['carest', 'caster', 'recast'], - 'recatch': ['catcher', 'recatch'], - 'recede': ['decree', 'recede'], - 'recedent': ['centered', 'decenter', 'decentre', 'recedent'], - 'receder': ['decreer', 'receder'], - 'receipt': ['ereptic', 'precite', 'receipt'], - 'receiptor': ['procerite', 'receiptor'], - 'receivables': ['receivables', 'serviceable'], - 'received': ['deceiver', 'received'], - 'recement': ['cementer', 'cerement', 'recement'], - 'recension': ['ninescore', 'recension'], - 'recensionist': ['intercession', 'recensionist'], - 'recent': ['center', 'recent', 'tenrec'], - 'recenter': ['centerer', 'recenter', 'recentre', 'terrence'], - 'recentre': ['centerer', 'recenter', 'recentre', 'terrence'], - 'reception': ['prenotice', 'reception'], - 'receptoral': ['praelector', 'receptoral'], - 'recess': ['cesser', 'recess'], - 'rechain': ['chainer', 'enchair', 'rechain'], - 'rechal': ['rachel', 'rechal'], - 'rechamber': ['chamberer', 'rechamber'], - 'rechange': ['encharge', 'rechange'], - 'rechant': ['chanter', 'rechant'], - 'rechar': ['archer', 'charer', 'rechar'], - 'recharter': ['charterer', 'recharter'], - 'rechase': ['archsee', 'rechase'], - 'rechaser': ['rechaser', 'research', 'searcher'], - 'rechasten': ['chastener', 'rechasten'], - 'rechaw': ['chawer', 'rechaw'], - 'recheat': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'], - 'recheck': ['checker', 'recheck'], - 'recheer': ['cheerer', 'recheer'], - 'rechew': ['chewer', 'rechew'], - 'rechip': ['cipher', 'rechip'], - 'rechisel': ['chiseler', 'rechisel'], - 'rechristen': ['christener', 'rechristen'], - 'rechuck': ['chucker', 'rechuck'], - 'recidivous': ['recidivous', 'veridicous'], - 'recipe': ['piecer', 'pierce', 'recipe'], - 'recipiend': ['perdicine', 'recipiend'], - 'recipient': ['princeite', 'recipient'], - 'reciprocate': ['carpocerite', 'reciprocate'], - 'recirculate': ['clericature', 'recirculate'], - 'recision': ['recision', 'soricine'], - 'recital': ['article', 'recital'], - 'recitativo': ['recitativo', 'victoriate'], - 'recite': ['cerite', 'certie', 'recite', 'tierce'], - 'recitement': ['centimeter', 'recitement', 'remittence'], - 'reckla': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'], - 'reckless': ['clerkess', 'reckless'], - 'reckling': ['clerking', 'reckling'], - 'reckon': ['conker', 'reckon'], - 'reclaim': ['claimer', 'miracle', 'reclaim'], - 'reclaimer': ['calmierer', 'reclaimer'], - 'reclama': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'], - 'reclang': ['cangler', 'glancer', 'reclang'], - 'reclasp': ['clasper', 'reclasp', 'scalper'], - 'reclass': ['carless', 'classer', 'reclass'], - 'reclean': ['cleaner', 'reclean'], - 'reclear': ['clearer', 'reclear'], - 'reclimb': ['climber', 'reclimb'], - 'reclinate': ['intercale', 'interlace', 'lacertine', 'reclinate'], - 'reclinated': ['credential', 'interlaced', 'reclinated'], - 'recluse': ['luceres', 'recluse'], - 'recluseness': ['censureless', 'recluseness'], - 'reclusion': ['cornelius', 'inclosure', 'reclusion'], - 'reclusive': ['reclusive', 'versicule'], - 'recoach': ['caroche', 'coacher', 'recoach'], - 'recoal': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'], - 'recoast': ['coaster', 'recoast'], - 'recoat': ['coater', 'recoat'], - 'recock': ['cocker', 'recock'], - 'recoil': ['coiler', 'recoil'], - 'recoilment': ['clinometer', 'recoilment'], - 'recoin': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'], - 'recoinage': ['aerogenic', 'recoinage'], - 'recollate': ['electoral', 'recollate'], - 'recollation': ['collationer', 'recollation'], - 'recollection': ['collectioner', 'recollection'], - 'recollet': ['colleter', 'coteller', 'coterell', 'recollet'], - 'recolor': ['colorer', 'recolor'], - 'recomb': ['comber', 'recomb'], - 'recomfort': ['comforter', 'recomfort'], - 'recommand': ['commander', 'recommand'], - 'recommend': ['commender', 'recommend'], - 'recommission': ['commissioner', 'recommission'], - 'recompact': ['compacter', 'recompact'], - 'recompass': ['compasser', 'recompass'], - 'recompetition': ['competitioner', 'recompetition'], - 'recomplain': ['complainer', 'procnemial', 'recomplain'], - 'recompound': ['compounder', 'recompound'], - 'recomprehend': ['comprehender', 'recomprehend'], - 'recon': ['coner', 'crone', 'recon'], - 'reconceal': ['concealer', 'reconceal'], - 'reconcert': ['concreter', 'reconcert'], - 'reconcession': ['concessioner', 'reconcession'], - 'reconcoct': ['concocter', 'reconcoct'], - 'recondemn': ['condemner', 'recondemn'], - 'recondensation': ['nondesecration', 'recondensation'], - 'recondition': ['conditioner', 'recondition'], - 'reconfer': ['confrere', 'enforcer', 'reconfer'], - 'reconfess': ['confesser', 'reconfess'], - 'reconfirm': ['confirmer', 'reconfirm'], - 'reconform': ['conformer', 'reconform'], - 'reconfound': ['confounder', 'reconfound'], - 'reconfront': ['confronter', 'reconfront'], - 'recongeal': ['congealer', 'recongeal'], - 'reconjoin': ['conjoiner', 'reconjoin'], - 'reconnect': ['concenter', 'reconnect'], - 'reconnoiter': ['reconnoiter', 'reconnoitre'], - 'reconnoitre': ['reconnoiter', 'reconnoitre'], - 'reconsent': ['consenter', 'nonsecret', 'reconsent'], - 'reconsider': ['considerer', 'reconsider'], - 'reconsign': ['consigner', 'reconsign'], - 'reconstitution': ['constitutioner', 'reconstitution'], - 'reconstruct': ['constructer', 'reconstruct'], - 'reconsult': ['consulter', 'reconsult'], - 'recontend': ['contender', 'recontend'], - 'recontest': ['contester', 'recontest'], - 'recontinue': ['recontinue', 'unctioneer'], - 'recontract': ['contracter', 'correctant', 'recontract'], - 'reconvention': ['conventioner', 'reconvention'], - 'reconvert': ['converter', 'reconvert'], - 'reconvey': ['conveyer', 'reconvey'], - 'recook': ['cooker', 'recook'], - 'recool': ['cooler', 'recool'], - 'recopper': ['copperer', 'recopper'], - 'recopyright': ['copyrighter', 'recopyright'], - 'record': ['corder', 'record'], - 'recordation': ['corrodentia', 'recordation'], - 'recork': ['corker', 'recork', 'rocker'], - 'recorrection': ['correctioner', 'recorrection'], - 'recorrupt': ['corrupter', 'recorrupt'], - 'recounsel': ['enclosure', 'recounsel'], - 'recount': ['cornute', 'counter', 'recount', 'trounce'], - 'recountal': ['nucleator', 'recountal'], - 'recoup': ['couper', 'croupe', 'poucer', 'recoup'], - 'recourse': ['recourse', 'resource'], - 'recover': ['coverer', 'recover'], - 'recramp': ['cramper', 'recramp'], - 'recrank': ['cranker', 'recrank'], - 'recrate': ['caterer', 'recrate', 'retrace', 'terrace'], - 'recreant': ['canterer', 'recanter', 'recreant', 'terrance'], - 'recredit': ['cedriret', 'directer', 'recredit', 'redirect'], - 'recrew': ['crewer', 'recrew'], - 'recrimination': ['intermorainic', 'recrimination'], - 'recroon': ['coroner', 'crooner', 'recroon'], - 'recross': ['crosser', 'recross'], - 'recrowd': ['crowder', 'recrowd'], - 'recrown': ['crowner', 'recrown'], - 'recrudency': ['decurrency', 'recrudency'], - 'recruital': ['curtailer', 'recruital', 'reticular'], - 'recrush': ['crusher', 'recrush'], - 'recta': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'rectal': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'], - 'rectalgia': ['cartilage', 'rectalgia'], - 'recti': ['citer', 'recti', 'ticer', 'trice'], - 'rectifiable': ['certifiable', 'rectifiable'], - 'rectification': ['certification', 'cretification', 'rectification'], - 'rectificative': ['certificative', 'rectificative'], - 'rectificator': ['certificator', 'rectificator'], - 'rectificatory': ['certificatory', 'rectificatory'], - 'rectified': ['certified', 'rectified'], - 'rectifier': ['certifier', 'rectifier'], - 'rectify': ['certify', 'cretify', 'rectify'], - 'rection': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'], - 'rectitude': ['certitude', 'rectitude'], - 'rectoress': ['crosstree', 'rectoress'], - 'rectorship': ['cristopher', 'rectorship'], - 'rectotome': ['octometer', 'rectotome', 'tocometer'], - 'rectovesical': ['rectovesical', 'vesicorectal'], - 'recur': ['curer', 'recur'], - 'recurl': ['curler', 'recurl'], - 'recurse': ['recurse', 'rescuer', 'securer'], - 'recurtain': ['recurtain', 'unerratic'], - 'recurvation': ['countervair', 'overcurtain', 'recurvation'], - 'recurvous': ['recurvous', 'verrucous'], - 'recusance': ['recusance', 'securance'], - 'recusant': ['etruscan', 'recusant'], - 'recusation': ['nectarious', 'recusation'], - 'recusator': ['craterous', 'recusator'], - 'recuse': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'], - 'recut': ['cruet', 'eruct', 'recut', 'truce'], - 'red': ['erd', 'red'], - 'redact': ['cedrat', 'decart', 'redact'], - 'redaction': ['citronade', 'endaortic', 'redaction'], - 'redactional': ['declaration', 'redactional'], - 'redamage': ['dreamage', 'redamage'], - 'redan': ['andre', 'arend', 'daren', 'redan'], - 'redare': ['reader', 'redare', 'reread'], - 'redarken': ['darkener', 'redarken'], - 'redarn': ['darner', 'darren', 'errand', 'rander', 'redarn'], - 'redart': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'redate': ['derate', 'redate'], - 'redaub': ['dauber', 'redaub'], - 'redawn': ['andrew', 'redawn', 'wander', 'warden'], - 'redbait': ['redbait', 'tribade'], - 'redbud': ['budder', 'redbud'], - 'redcoat': ['cordate', 'decator', 'redcoat'], - 'redden': ['nedder', 'redden'], - 'reddingite': ['digredient', 'reddingite'], - 'rede': ['deer', 'dere', 'dree', 'rede', 'reed'], - 'redeal': ['dealer', 'leader', 'redeal', 'relade', 'relead'], - 'redeck': ['decker', 'redeck'], - 'redeed': ['redeed', 'reeded'], - 'redeem': ['deemer', 'meered', 'redeem', 'remede'], - 'redefault': ['defaulter', 'redefault'], - 'redefeat': ['defeater', 'federate', 'redefeat'], - 'redefine': ['needfire', 'redefine'], - 'redeflect': ['redeflect', 'reflected'], - 'redelay': ['delayer', 'layered', 'redelay'], - 'redeliver': ['deliverer', 'redeliver'], - 'redemand': ['demander', 'redemand'], - 'redemolish': ['demolisher', 'redemolish'], - 'redeny': ['redeny', 'yender'], - 'redepend': ['depender', 'redepend'], - 'redeprive': ['prederive', 'redeprive'], - 'rederivation': ['rederivation', 'veratroidine'], - 'redescend': ['descender', 'redescend'], - 'redescription': ['prediscretion', 'redescription'], - 'redesign': ['designer', 'redesign', 'resigned'], - 'redesman': ['redesman', 'seamrend'], - 'redetect': ['detecter', 'redetect'], - 'redevelop': ['developer', 'redevelop'], - 'redfin': ['finder', 'friend', 'redfin', 'refind'], - 'redhoop': ['redhoop', 'rhodope'], - 'redia': ['aider', 'deair', 'irade', 'redia'], - 'redient': ['nitered', 'redient', 'teinder'], - 'redig': ['dirge', 'gride', 'redig', 'ridge'], - 'redigest': ['digester', 'redigest'], - 'rediminish': ['diminisher', 'rediminish'], - 'redintegrator': ['redintegrator', 'retrogradient'], - 'redip': ['pride', 'pried', 'redip'], - 'redirect': ['cedriret', 'directer', 'recredit', 'redirect'], - 'redisable': ['desirable', 'redisable'], - 'redisappear': ['disappearer', 'redisappear'], - 'rediscount': ['discounter', 'rediscount'], - 'rediscover': ['discoverer', 'rediscover'], - 'rediscuss': ['discusser', 'rediscuss'], - 'redispatch': ['dispatcher', 'redispatch'], - 'redisplay': ['displayer', 'redisplay'], - 'redispute': ['disrepute', 'redispute'], - 'redistend': ['dendrites', 'distender', 'redistend'], - 'redistill': ['distiller', 'redistill'], - 'redistinguish': ['distinguisher', 'redistinguish'], - 'redistrain': ['distrainer', 'redistrain'], - 'redisturb': ['disturber', 'redisturb'], - 'redive': ['derive', 'redive'], - 'redivert': ['diverter', 'redivert', 'verditer'], - 'redleg': ['gelder', 'ledger', 'redleg'], - 'redlegs': ['redlegs', 'sledger'], - 'redo': ['doer', 'redo', 'rode', 'roed'], - 'redock': ['corked', 'docker', 'redock'], - 'redolent': ['redolent', 'rondelet'], - 'redoom': ['doomer', 'mooder', 'redoom', 'roomed'], - 'redoubling': ['bouldering', 'redoubling'], - 'redoubt': ['doubter', 'obtrude', 'outbred', 'redoubt'], - 'redound': ['redound', 'rounded', 'underdo'], - 'redowa': ['redowa', 'woader'], - 'redraft': ['drafter', 'redraft'], - 'redrag': ['darger', 'gerard', 'grader', 'redrag', 'regard'], - 'redraw': ['drawer', 'redraw', 'reward', 'warder'], - 'redrawer': ['redrawer', 'rewarder', 'warderer'], - 'redream': ['dreamer', 'redream'], - 'redress': ['dresser', 'redress'], - 'redrill': ['driller', 'redrill'], - 'redrive': ['deriver', 'redrive', 'rivered'], - 'redry': ['derry', 'redry', 'ryder'], - 'redtail': ['dilater', 'lardite', 'redtail'], - 'redtop': ['deport', 'ported', 'redtop'], - 'redub': ['bedur', 'rebud', 'redub'], - 'reductant': ['reductant', 'traducent', 'truncated'], - 'reduction': ['introduce', 'reduction'], - 'reductional': ['radiolucent', 'reductional'], - 'redue': ['redue', 'urdee'], - 'redunca': ['durance', 'redunca', 'unraced'], - 'redwithe': ['redwithe', 'withered'], - 'redye': ['redye', 'reedy'], - 'ree': ['eer', 'ere', 'ree'], - 'reechy': ['cheery', 'reechy'], - 'reed': ['deer', 'dere', 'dree', 'rede', 'reed'], - 'reeded': ['redeed', 'reeded'], - 'reeden': ['endere', 'needer', 'reeden'], - 'reedily': ['reedily', 'reyield', 'yielder'], - 'reeding': ['energid', 'reeding'], - 'reedling': ['engirdle', 'reedling'], - 'reedman': ['amender', 'meander', 'reamend', 'reedman'], - 'reedwork': ['reedwork', 'reworked'], - 'reedy': ['redye', 'reedy'], - 'reef': ['feer', 'free', 'reef'], - 'reefing': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'], - 'reek': ['eker', 'reek'], - 'reel': ['leer', 'reel'], - 'reeler': ['reeler', 'rereel'], - 'reelingly': ['leeringly', 'reelingly'], - 'reem': ['mere', 'reem'], - 'reeming': ['reeming', 'regimen'], - 'reen': ['erne', 'neer', 'reen'], - 'reenge': ['neeger', 'reenge', 'renege'], - 'rees': ['erse', 'rees', 'seer', 'sere'], - 'reese': ['esere', 'reese', 'resee'], - 'reesk': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'], - 'reest': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'reester': ['reester', 'steerer'], - 'reestle': ['reestle', 'resteel', 'steeler'], - 'reesty': ['reesty', 'yester'], - 'reet': ['reet', 'teer', 'tree'], - 'reetam': ['reetam', 'retame', 'teamer'], - 'reeveland': ['landreeve', 'reeveland'], - 'refall': ['faller', 'refall'], - 'refashion': ['fashioner', 'refashion'], - 'refasten': ['fastener', 'fenestra', 'refasten'], - 'refavor': ['favorer', 'overfar', 'refavor'], - 'refeed': ['feeder', 'refeed'], - 'refeel': ['feeler', 'refeel', 'reflee'], - 'refeign': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'], - 'refel': ['fleer', 'refel'], - 'refer': ['freer', 'refer'], - 'referment': ['fermenter', 'referment'], - 'refetch': ['fetcher', 'refetch'], - 'refight': ['fighter', 'freight', 'refight'], - 'refill': ['filler', 'refill'], - 'refilter': ['filterer', 'refilter'], - 'refinable': ['inferable', 'refinable'], - 'refind': ['finder', 'friend', 'redfin', 'refind'], - 'refine': ['ferine', 'refine'], - 'refined': ['definer', 'refined'], - 'refiner': ['refiner', 'reinfer'], - 'refinger': ['fingerer', 'refinger'], - 'refining': ['infringe', 'refining'], - 'refinish': ['finisher', 'refinish'], - 'refit': ['freit', 'refit'], - 'refix': ['fixer', 'refix'], - 'reflash': ['flasher', 'reflash'], - 'reflected': ['redeflect', 'reflected'], - 'reflee': ['feeler', 'refeel', 'reflee'], - 'refling': ['ferling', 'flinger', 'refling'], - 'refloat': ['floater', 'florate', 'refloat'], - 'reflog': ['golfer', 'reflog'], - 'reflood': ['flooder', 'reflood'], - 'refloor': ['floorer', 'refloor'], - 'reflourish': ['flourisher', 'reflourish'], - 'reflow': ['flower', 'fowler', 'reflow', 'wolfer'], - 'reflower': ['flowerer', 'reflower'], - 'reflush': ['flusher', 'reflush'], - 'reflux': ['fluxer', 'reflux'], - 'refluxed': ['flexured', 'refluxed'], - 'refly': ['ferly', 'flyer', 'refly'], - 'refocus': ['focuser', 'refocus'], - 'refold': ['folder', 'refold'], - 'refoment': ['fomenter', 'refoment'], - 'refoot': ['footer', 'refoot'], - 'reforecast': ['forecaster', 'reforecast'], - 'reforest': ['forester', 'fosterer', 'reforest'], - 'reforfeit': ['forfeiter', 'reforfeit'], - 'reform': ['former', 'reform'], - 'reformado': ['doorframe', 'reformado'], - 'reformed': ['deformer', 'reformed'], - 'reformism': ['misreform', 'reformism'], - 'reformist': ['reformist', 'restiform'], - 'reforward': ['forwarder', 'reforward'], - 'refound': ['founder', 'refound'], - 'refoundation': ['foundationer', 'refoundation'], - 'refreshen': ['freshener', 'refreshen'], - 'refrighten': ['frightener', 'refrighten'], - 'refront': ['fronter', 'refront'], - 'reft': ['fret', 'reft', 'tref'], - 'refuel': ['ferule', 'fueler', 'refuel'], - 'refund': ['funder', 'refund'], - 'refurbish': ['furbisher', 'refurbish'], - 'refurl': ['furler', 'refurl'], - 'refurnish': ['furnisher', 'refurnish'], - 'refusingly': ['refusingly', 'syringeful'], - 'refutal': ['faulter', 'refutal', 'tearful'], - 'refute': ['fuerte', 'refute'], - 'reg': ['erg', 'ger', 'reg'], - 'regain': ['arenig', 'earing', 'gainer', 'reagin', 'regain'], - 'regal': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'], - 'regalia': ['lairage', 'railage', 'regalia'], - 'regalian': ['algerian', 'geranial', 'regalian'], - 'regalist': ['glaister', 'regalist'], - 'regallop': ['galloper', 'regallop'], - 'regally': ['allergy', 'gallery', 'largely', 'regally'], - 'regalness': ['largeness', 'rangeless', 'regalness'], - 'regard': ['darger', 'gerard', 'grader', 'redrag', 'regard'], - 'regarnish': ['garnisher', 'regarnish'], - 'regather': ['gatherer', 'regather'], - 'regatta': ['garetta', 'rattage', 'regatta'], - 'regelate': ['eglatere', 'regelate', 'relegate'], - 'regelation': ['regelation', 'relegation'], - 'regenesis': ['energesis', 'regenesis'], - 'regent': ['gerent', 'regent'], - 'reges': ['reges', 'serge'], - 'reget': ['egret', 'greet', 'reget'], - 'regga': ['agger', 'gager', 'regga'], - 'reggie': ['greige', 'reggie'], - 'regia': ['geira', 'regia'], - 'regild': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'], - 'regill': ['giller', 'grille', 'regill'], - 'regimen': ['reeming', 'regimen'], - 'regimenal': ['margeline', 'regimenal'], - 'regin': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'], - 'reginal': ['aligner', 'engrail', 'realign', 'reginal'], - 'reginald': ['dragline', 'reginald', 'ringlead'], - 'region': ['ignore', 'region'], - 'regional': ['geraniol', 'regional'], - 'registered': ['deregister', 'registered'], - 'registerer': ['registerer', 'reregister'], - 'regive': ['grieve', 'regive'], - 'regladden': ['gladdener', 'glandered', 'regladden'], - 'reglair': ['grailer', 'reglair'], - 'regle': ['leger', 'regle'], - 'reglet': ['gretel', 'reglet'], - 'regloss': ['glosser', 'regloss'], - 'reglove': ['overleg', 'reglove'], - 'reglow': ['glower', 'reglow'], - 'regma': ['grame', 'marge', 'regma'], - 'regnal': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'], - 'regraft': ['grafter', 'regraft'], - 'regrant': ['granter', 'regrant'], - 'regrasp': ['grasper', 'regrasp', 'sparger'], - 'regrass': ['grasser', 'regrass'], - 'regrate': ['greater', 'regrate', 'terrage'], - 'regrating': ['gartering', 'regrating'], - 'regrator': ['garroter', 'regrator'], - 'regreen': ['greener', 'regreen', 'reneger'], - 'regreet': ['greeter', 'regreet'], - 'regrind': ['grinder', 'regrind'], - 'regrinder': ['derringer', 'regrinder'], - 'regrip': ['griper', 'regrip'], - 'regroup': ['grouper', 'regroup'], - 'regrow': ['grower', 'regrow'], - 'reguard': ['guarder', 'reguard'], - 'regula': ['ragule', 'regula'], - 'regulation': ['regulation', 'urogenital'], - 'reguli': ['ligure', 'reguli'], - 'regur': ['regur', 'urger'], - 'regush': ['gusher', 'regush'], - 'reh': ['her', 'reh', 'rhe'], - 'rehale': ['healer', 'rehale', 'reheal'], - 'rehallow': ['hallower', 'rehallow'], - 'rehammer': ['hammerer', 'rehammer'], - 'rehang': ['hanger', 'rehang'], - 'reharden': ['hardener', 'reharden'], - 'reharm': ['harmer', 'reharm'], - 'reharness': ['harnesser', 'reharness'], - 'reharrow': ['harrower', 'reharrow'], - 'reharvest': ['harvester', 'reharvest'], - 'rehash': ['hasher', 'rehash'], - 'rehaul': ['hauler', 'rehaul'], - 'rehazard': ['hazarder', 'rehazard'], - 'rehead': ['adhere', 'header', 'hedera', 'rehead'], - 'reheal': ['healer', 'rehale', 'reheal'], - 'reheap': ['heaper', 'reheap'], - 'rehear': ['hearer', 'rehear'], - 'rehearser': ['rehearser', 'reshearer'], - 'rehearten': ['heartener', 'rehearten'], - 'reheat': ['heater', 'hereat', 'reheat'], - 'reheel': ['heeler', 'reheel'], - 'reheighten': ['heightener', 'reheighten'], - 'rehoist': ['hoister', 'rehoist'], - 'rehollow': ['hollower', 'rehollow'], - 'rehonor': ['honorer', 'rehonor'], - 'rehook': ['hooker', 'rehook'], - 'rehoop': ['hooper', 'rehoop'], - 'rehung': ['hunger', 'rehung'], - 'reid': ['dier', 'dire', 'reid', 'ride'], - 'reif': ['fire', 'reif', 'rife'], - 'reify': ['fiery', 'reify'], - 'reign': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'], - 'reignore': ['erigeron', 'reignore'], - 'reillustrate': ['reillustrate', 'ultrasterile'], - 'reim': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'reimbody': ['embryoid', 'reimbody'], - 'reimpart': ['imparter', 'reimpart'], - 'reimplant': ['implanter', 'reimplant'], - 'reimply': ['primely', 'reimply'], - 'reimport': ['importer', 'promerit', 'reimport'], - 'reimpose': ['perisome', 'promisee', 'reimpose'], - 'reimpress': ['impresser', 'reimpress'], - 'reimpression': ['reimpression', 'repermission'], - 'reimprint': ['imprinter', 'reimprint'], - 'reimprison': ['imprisoner', 'reimprison'], - 'rein': ['neri', 'rein', 'rine'], - 'reina': ['erian', 'irena', 'reina'], - 'reincentive': ['internecive', 'reincentive'], - 'reincite': ['icterine', 'reincite'], - 'reincrudate': ['antireducer', 'reincrudate', 'untraceried'], - 'reindeer': ['denierer', 'reindeer'], - 'reindict': ['indicter', 'indirect', 'reindict'], - 'reindue': ['reindue', 'uredine'], - 'reinfect': ['frenetic', 'infecter', 'reinfect'], - 'reinfer': ['refiner', 'reinfer'], - 'reinfest': ['infester', 'reinfest'], - 'reinflate': ['interleaf', 'reinflate'], - 'reinflict': ['inflicter', 'reinflict'], - 'reinform': ['informer', 'reinform', 'reniform'], - 'reinhabit': ['inhabiter', 'reinhabit'], - 'reins': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'], - 'reinsane': ['anserine', 'reinsane'], - 'reinsert': ['inserter', 'reinsert'], - 'reinsist': ['insister', 'reinsist', 'sinister', 'sisterin'], - 'reinspect': ['prescient', 'reinspect'], - 'reinspector': ['prosecretin', 'reinspector'], - 'reinspirit': ['inspiriter', 'reinspirit'], - 'reinstall': ['installer', 'reinstall'], - 'reinstation': ['reinstation', 'santorinite'], - 'reinstill': ['instiller', 'reinstill'], - 'reinstruct': ['instructer', 'intercrust', 'reinstruct'], - 'reinsult': ['insulter', 'lustrine', 'reinsult'], - 'reintend': ['indenter', 'intender', 'reintend'], - 'reinter': ['reinter', 'terrine'], - 'reinterest': ['interester', 'reinterest'], - 'reinterpret': ['interpreter', 'reinterpret'], - 'reinterrupt': ['interrupter', 'reinterrupt'], - 'reinterview': ['interviewer', 'reinterview'], - 'reintrench': ['intrencher', 'reintrench'], - 'reintrude': ['reintrude', 'unretired'], - 'reinvent': ['inventer', 'reinvent', 'ventrine', 'vintener'], - 'reinvert': ['inverter', 'reinvert', 'trinerve'], - 'reinvest': ['reinvest', 'servient'], - 'reis': ['reis', 'rise', 'seri', 'sier', 'sire'], - 'reit': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'], - 'reiter': ['errite', 'reiter', 'retier', 'retire', 'tierer'], - 'reiterable': ['reiterable', 'reliberate'], - 'rejail': ['jailer', 'rejail'], - 'rejerk': ['jerker', 'rejerk'], - 'rejoin': ['joiner', 'rejoin'], - 'rejolt': ['jolter', 'rejolt'], - 'rejourney': ['journeyer', 'rejourney'], - 'reki': ['erik', 'kier', 'reki'], - 'rekick': ['kicker', 'rekick'], - 'rekill': ['killer', 'rekill'], - 'rekiss': ['kisser', 'rekiss'], - 'reknit': ['reknit', 'tinker'], - 'reknow': ['knower', 'reknow', 'wroken'], - 'rel': ['ler', 'rel'], - 'relabel': ['labeler', 'relabel'], - 'relace': ['alerce', 'cereal', 'relace'], - 'relacquer': ['lacquerer', 'relacquer'], - 'relade': ['dealer', 'leader', 'redeal', 'relade', 'relead'], - 'reladen': ['leander', 'learned', 'reladen'], - 'relais': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'], - 'relament': ['lamenter', 'relament', 'remantle'], - 'relamp': ['lamper', 'palmer', 'relamp'], - 'reland': ['aldern', - 'darnel', - 'enlard', - 'lander', - 'lenard', - 'randle', - 'reland'], - 'relap': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'], - 'relapse': ['pleaser', 'preseal', 'relapse'], - 'relapsing': ['espringal', 'presignal', 'relapsing'], - 'relast': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'relata': ['latera', 'relata'], - 'relatability': ['alterability', 'bilaterality', 'relatability'], - 'relatable': ['alterable', 'relatable'], - 'relatch': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'], - 'relate': ['earlet', 'elater', 'relate'], - 'related': ['delater', 'related', 'treadle'], - 'relater': ['alterer', 'realter', 'relater'], - 'relation': ['oriental', 'relation', 'tirolean'], - 'relationism': ['misrelation', 'orientalism', 'relationism'], - 'relationist': ['orientalist', 'relationist'], - 'relative': ['levirate', 'relative'], - 'relativization': ['relativization', 'revitalization'], - 'relativize': ['relativize', 'revitalize'], - 'relator': ['realtor', 'relator'], - 'relaunch': ['launcher', 'relaunch'], - 'relay': ['early', 'layer', 'relay'], - 'relead': ['dealer', 'leader', 'redeal', 'relade', 'relead'], - 'releap': ['leaper', 'releap', 'repale', 'repeal'], - 'relearn': ['learner', 'relearn'], - 'releather': ['leatherer', 'releather', 'tarheeler'], - 'relection': ['centriole', 'electrion', 'relection'], - 'relegate': ['eglatere', 'regelate', 'relegate'], - 'relegation': ['regelation', 'relegation'], - 'relend': ['lender', 'relend'], - 'reletter': ['letterer', 'reletter'], - 'relevant': ['levanter', 'relevant', 'revelant'], - 'relevation': ['relevation', 'revelation'], - 'relevator': ['relevator', 'revelator', 'veratrole'], - 'relevel': ['leveler', 'relevel'], - 'reliably': ['beryllia', 'reliably'], - 'reliance': ['cerealin', 'cinereal', 'reliance'], - 'reliant': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'reliantly': ['interally', 'reliantly'], - 'reliberate': ['reiterable', 'reliberate'], - 'relic': ['crile', 'elric', 'relic'], - 'relick': ['licker', 'relick', 'rickle'], - 'relicted': ['derelict', 'relicted'], - 'relier': ['lierre', 'relier'], - 'relieving': ['inveigler', 'relieving'], - 'relievo': ['overlie', 'relievo'], - 'relift': ['fertil', 'filter', 'lifter', 'relift', 'trifle'], - 'religation': ['genitorial', 'religation'], - 'relight': ['lighter', 'relight', 'rightle'], - 'relighten': ['lightener', 'relighten', 'threeling'], - 'religion': ['ligroine', 'religion'], - 'relimit': ['limiter', 'relimit'], - 'reline': ['lierne', 'reline'], - 'relink': ['linker', 'relink'], - 'relish': ['hirsel', 'hirsle', 'relish'], - 'relishy': ['relishy', 'shirley'], - 'relist': ['lister', 'relist'], - 'relisten': ['enlister', 'esterlin', 'listener', 'relisten'], - 'relive': ['levier', 'relive', 'reveil', 'revile', 'veiler'], - 'reload': ['loader', 'ordeal', 'reload'], - 'reloan': ['lenora', 'loaner', 'orlean', 'reloan'], - 'relocation': ['iconolater', 'relocation'], - 'relock': ['locker', 'relock'], - 'relook': ['looker', 'relook'], - 'relose': ['relose', 'resole'], - 'relost': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'], - 'relot': ['lerot', 'orlet', 'relot'], - 'relower': ['lowerer', 'relower'], - 'reluct': ['cutler', 'reluct'], - 'reluctation': ['countertail', 'reluctation'], - 'relumine': ['lemurine', 'meruline', 'relumine'], - 'rely': ['lyre', 'rely'], - 'remade': ['meader', 'remade'], - 'remagnification': ['germanification', 'remagnification'], - 'remagnify': ['germanify', 'remagnify'], - 'remail': ['mailer', 'remail'], - 'remain': ['ermani', 'marine', 'remain'], - 'remains': ['remains', 'seminar'], - 'remaintain': ['antimerina', 'maintainer', 'remaintain'], - 'reman': ['enarm', 'namer', 'reman'], - 'remand': ['damner', 'manred', 'randem', 'remand'], - 'remanet': ['remanet', 'remeant', 'treeman'], - 'remantle': ['lamenter', 'relament', 'remantle'], - 'remap': ['amper', 'remap'], - 'remarch': ['charmer', 'marcher', 'remarch'], - 'remark': ['marker', 'remark'], - 'remarket': ['marketer', 'remarket'], - 'remarry': ['marryer', 'remarry'], - 'remarshal': ['marshaler', 'remarshal'], - 'remask': ['masker', 'remask'], - 'remass': ['masser', 'remass'], - 'remast': ['martes', 'master', 'remast', 'stream'], - 'remasticate': ['metrectasia', 'remasticate'], - 'rematch': ['matcher', 'rematch'], - 'remeant': ['remanet', 'remeant', 'treeman'], - 'remede': ['deemer', 'meered', 'redeem', 'remede'], - 'remeet': ['meeter', 'remeet', 'teemer'], - 'remelt': ['melter', 'remelt'], - 'remend': ['mender', 'remend'], - 'remetal': ['lameter', 'metaler', 'remetal'], - 'remi': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'remication': ['marcionite', 'microtinae', 'remication'], - 'remigate': ['emigrate', 'remigate'], - 'remigation': ['emigration', 'remigation'], - 'remill': ['miller', 'remill'], - 'remind': ['minder', 'remind'], - 'remint': ['minter', 'remint', 'termin'], - 'remiped': ['demirep', 'epiderm', 'impeder', 'remiped'], - 'remisrepresent': ['misrepresenter', 'remisrepresent'], - 'remission': ['missioner', 'remission'], - 'remisunderstand': ['misunderstander', 'remisunderstand'], - 'remit': ['merit', 'miter', 'mitre', 'remit', 'timer'], - 'remittal': ['remittal', 'termital'], - 'remittance': ['carminette', 'remittance'], - 'remittence': ['centimeter', 'recitement', 'remittence'], - 'remitter': ['remitter', 'trimeter'], - 'remix': ['mixer', 'remix'], - 'remnant': ['manrent', 'remnant'], - 'remock': ['mocker', 'remock'], - 'remodel': ['demerol', 'modeler', 'remodel'], - 'remold': ['dermol', 'molder', 'remold'], - 'remontant': ['nonmatter', 'remontant'], - 'remontoir': ['interroom', 'remontoir'], - 'remop': ['merop', 'moper', 'proem', 'remop'], - 'remora': ['remora', 'roamer'], - 'remord': ['dormer', 'remord'], - 'remote': ['meteor', 'remote'], - 'remotive': ['overtime', 'remotive'], - 'remould': ['remould', 'ruledom'], - 'remount': ['monture', 'mounter', 'remount'], - 'removable': ['overblame', 'removable'], - 'remunerate': ['remunerate', 'renumerate'], - 'remuneration': ['remuneration', 'renumeration'], - 'remurmur': ['murmurer', 'remurmur'], - 'remus': ['muser', 'remus', 'serum'], - 'remuster': ['musterer', 'remuster'], - 'renable': ['enabler', 'renable'], - 'renably': ['blarney', 'renably'], - 'renail': ['arline', 'larine', 'linear', 'nailer', 'renail'], - 'renaissance': ['necessarian', 'renaissance'], - 'renal': ['learn', 'renal'], - 'rename': ['enarme', 'meaner', 'rename'], - 'renavigate': ['renavigate', 'vegetarian'], - 'rend': ['dern', 'rend'], - 'rendition': ['rendition', 'trinodine'], - 'reneg': ['genre', 'green', 'neger', 'reneg'], - 'renegadism': ['grandeeism', 'renegadism'], - 'renegation': ['generation', 'renegation'], - 'renege': ['neeger', 'reenge', 'renege'], - 'reneger': ['greener', 'regreen', 'reneger'], - 'reneglect': ['neglecter', 'reneglect'], - 'renerve': ['renerve', 'venerer'], - 'renes': ['renes', 'sneer'], - 'renet': ['enter', 'neter', 'renet', 'terne', 'treen'], - 'reniform': ['informer', 'reinform', 'reniform'], - 'renilla': ['ralline', 'renilla'], - 'renin': ['inner', 'renin'], - 'reniportal': ['interpolar', 'reniportal'], - 'renish': ['renish', 'shiner', 'shrine'], - 'renitence': ['centenier', 'renitence'], - 'renitency': ['nycterine', 'renitency'], - 'renitent': ['renitent', 'trentine'], - 'renk': ['kern', 'renk'], - 'rennet': ['rennet', 'tenner'], - 'renography': ['granophyre', 'renography'], - 'renominate': ['enantiomer', 'renominate'], - 'renotation': ['renotation', 'retonation'], - 'renotice': ['erection', 'neoteric', 'nocerite', 'renotice'], - 'renourish': ['nourisher', 'renourish'], - 'renovate': ['overneat', 'renovate'], - 'renovater': ['enervator', 'renovater', 'venerator'], - 'renown': ['renown', 'wonner'], - 'rent': ['rent', 'tern'], - 'rentage': ['grantee', 'greaten', 'reagent', 'rentage'], - 'rental': ['altern', 'antler', 'learnt', 'rental', 'ternal'], - 'rentaler': ['rentaler', 'rerental'], - 'rented': ['denter', 'rented', 'tender'], - 'rentee': ['entree', 'rentee', 'retene'], - 'renter': ['renter', 'rerent'], - 'renu': ['renu', 'ruen', 'rune'], - 'renumber': ['numberer', 'renumber'], - 'renumerate': ['remunerate', 'renumerate'], - 'renumeration': ['remuneration', 'renumeration'], - 'reobtain': ['abrotine', 'baritone', 'obtainer', 'reobtain'], - 'reoccasion': ['occasioner', 'reoccasion'], - 'reoccupation': ['cornucopiate', 'reoccupation'], - 'reoffend': ['offender', 'reoffend'], - 'reoffer': ['offerer', 'reoffer'], - 'reoil': ['oiler', 'oriel', 'reoil'], - 'reopen': ['opener', 'reopen', 'repone'], - 'reordain': ['inroader', 'ordainer', 'reordain'], - 'reorder': ['orderer', 'reorder'], - 'reordinate': ['reordinate', 'treronidae'], - 'reornament': ['ornamenter', 'reornament'], - 'reoverflow': ['overflower', 'reoverflow'], - 'reown': ['owner', 'reown', 'rowen'], - 'rep': ['per', 'rep'], - 'repack': ['packer', 'repack'], - 'repaint': ['painter', 'pertain', 'pterian', 'repaint'], - 'repair': ['pairer', 'rapier', 'repair'], - 'repairer': ['rareripe', 'repairer'], - 'repale': ['leaper', 'releap', 'repale', 'repeal'], - 'repand': ['pander', 'repand'], - 'repandly': ['panderly', 'repandly'], - 'repandous': ['panderous', 'repandous'], - 'repanel': ['paneler', 'repanel', 'replane'], - 'repaper': ['paperer', 'perpera', 'prepare', 'repaper'], - 'reparagraph': ['paragrapher', 'reparagraph'], - 'reparation': ['praetorian', 'reparation'], - 'repark': ['parker', 'repark'], - 'repartee': ['repartee', 'repeater'], - 'repartition': ['partitioner', 'repartition'], - 'repass': ['passer', 'repass', 'sparse'], - 'repasser': ['asperser', 'repasser'], - 'repast': ['paster', 'repast', 'trapes'], - 'repaste': ['perates', 'repaste', 'sperate'], - 'repasture': ['repasture', 'supertare'], - 'repatch': ['chapter', 'patcher', 'repatch'], - 'repatent': ['pattener', 'repatent'], - 'repattern': ['patterner', 'repattern'], - 'repawn': ['enwrap', 'pawner', 'repawn'], - 'repay': ['apery', 'payer', 'repay'], - 'repeal': ['leaper', 'releap', 'repale', 'repeal'], - 'repeat': ['petrea', 'repeat', 'retape'], - 'repeater': ['repartee', 'repeater'], - 'repel': ['leper', 'perle', 'repel'], - 'repen': ['neper', 'preen', 'repen'], - 'repension': ['pensioner', 'repension'], - 'repent': ['perten', 'repent'], - 'repentable': ['penetrable', 'repentable'], - 'repentance': ['penetrance', 'repentance'], - 'repentant': ['penetrant', 'repentant'], - 'reperceive': ['prereceive', 'reperceive'], - 'repercussion': ['percussioner', 'repercussion'], - 'repercussive': ['repercussive', 'superservice'], - 'reperform': ['performer', 'prereform', 'reperform'], - 'repermission': ['reimpression', 'repermission'], - 'repermit': ['premerit', 'preremit', 'repermit'], - 'reperplex': ['perplexer', 'reperplex'], - 'reperusal': ['pleasurer', 'reperusal'], - 'repetition': ['petitioner', 'repetition'], - 'rephael': ['preheal', 'rephael'], - 'rephase': ['hespera', 'rephase', 'reshape'], - 'rephotograph': ['photographer', 'rephotograph'], - 'rephrase': ['preshare', 'rephrase'], - 'repic': ['price', 'repic'], - 'repick': ['picker', 'repick'], - 'repiece': ['creepie', 'repiece'], - 'repin': ['piner', 'prine', 'repin', 'ripen'], - 'repine': ['neiper', 'perine', 'pirene', 'repine'], - 'repiner': ['repiner', 'ripener'], - 'repiningly': ['repiningly', 'ripeningly'], - 'repique': ['perique', 'repique'], - 'repitch': ['pitcher', 'repitch'], - 'replace': ['percale', 'replace'], - 'replait': ['partile', 'plaiter', 'replait'], - 'replan': ['parnel', 'planer', 'replan'], - 'replane': ['paneler', 'repanel', 'replane'], - 'replant': ['pantler', 'planter', 'replant'], - 'replantable': ['planetabler', 'replantable'], - 'replanter': ['prerental', 'replanter'], - 'replaster': ['plasterer', 'replaster'], - 'replate': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'], - 'replay': ['parley', 'pearly', 'player', 'replay'], - 'replead': ['pearled', 'pedaler', 'pleader', 'replead'], - 'repleader': ['predealer', 'repleader'], - 'repleat': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'], - 'repleteness': ['repleteness', 'terpeneless'], - 'repletion': ['interlope', 'interpole', 'repletion', 'terpineol'], - 'repliant': ['interlap', 'repliant', 'triplane'], - 'replica': ['caliper', 'picarel', 'replica'], - 'replight': ['plighter', 'replight'], - 'replod': ['podler', 'polder', 'replod'], - 'replot': ['petrol', 'replot'], - 'replow': ['plower', 'replow'], - 'replum': ['lumper', 'plumer', 'replum', 'rumple'], - 'replunder': ['plunderer', 'replunder'], - 'reply': ['plyer', 'reply'], - 'repocket': ['pocketer', 'repocket'], - 'repoint': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'], - 'repolish': ['polisher', 'repolish'], - 'repoll': ['poller', 'repoll'], - 'reponder': ['ponderer', 'reponder'], - 'repone': ['opener', 'reopen', 'repone'], - 'report': ['porret', 'porter', 'report', 'troper'], - 'reportage': ['porterage', 'reportage'], - 'reporterism': ['misreporter', 'reporterism'], - 'reportion': ['portioner', 'reportion'], - 'reposed': ['deposer', 'reposed'], - 'reposit': ['periost', 'porites', 'reposit', 'riposte'], - 'reposition': ['positioner', 'reposition'], - 'repositor': ['posterior', 'repositor'], - 'repossession': ['possessioner', 'repossession'], - 'repost': ['poster', 'presto', 'repost', 'respot', 'stoper'], - 'repot': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'], - 'repound': ['pounder', 'repound', 'unroped'], - 'repour': ['pourer', 'repour', 'rouper'], - 'repowder': ['powderer', 'repowder'], - 'repp': ['prep', 'repp'], - 'repray': ['prayer', 'repray'], - 'repreach': ['preacher', 'repreach'], - 'repredict': ['precredit', 'predirect', 'repredict'], - 'reprefer': ['prerefer', 'reprefer'], - 'represent': ['presenter', 'represent'], - 'representationism': ['misrepresentation', 'representationism'], - 'repress': ['presser', 'repress'], - 'repressive': ['repressive', 'respersive'], - 'reprice': ['piercer', 'reprice'], - 'reprieval': ['prevailer', 'reprieval'], - 'reprime': ['premier', 'reprime'], - 'reprint': ['printer', 'reprint'], - 'reprise': ['reprise', 'respire'], - 'repristination': ['interspiration', 'repristination'], - 'reproachable': ['blepharocera', 'reproachable'], - 'reprobate': ['perborate', 'prorebate', 'reprobate'], - 'reprobation': ['probationer', 'reprobation'], - 'reproceed': ['proceeder', 'reproceed'], - 'reproclaim': ['proclaimer', 'reproclaim'], - 'reproduce': ['procedure', 'reproduce'], - 'reproduction': ['proreduction', 'reproduction'], - 'reprohibit': ['prohibiter', 'reprohibit'], - 'reproof': ['proofer', 'reproof'], - 'reproportion': ['proportioner', 'reproportion'], - 'reprotection': ['interoceptor', 'reprotection'], - 'reprotest': ['protester', 'reprotest'], - 'reprovision': ['prorevision', 'provisioner', 'reprovision'], - 'reps': ['reps', 'resp'], - 'reptant': ['pattern', 'reptant'], - 'reptatorial': ['proletariat', 'reptatorial'], - 'reptatory': ['protreaty', 'reptatory'], - 'reptile': ['perlite', 'reptile'], - 'reptilia': ['liparite', 'reptilia'], - 'republish': ['publisher', 'republish'], - 'repudiatory': ['preauditory', 'repudiatory'], - 'repuff': ['puffer', 'repuff'], - 'repugn': ['punger', 'repugn'], - 'repulpit': ['pulpiter', 'repulpit'], - 'repulsion': ['prelusion', 'repulsion'], - 'repulsive': ['prelusive', 'repulsive'], - 'repulsively': ['prelusively', 'repulsively'], - 'repulsory': ['prelusory', 'repulsory'], - 'repump': ['pumper', 'repump'], - 'repunish': ['punisher', 'repunish'], - 'reputative': ['reputative', 'vituperate'], - 'repute': ['repute', 'uptree'], - 'requench': ['quencher', 'requench'], - 'request': ['quester', 'request'], - 'requestion': ['questioner', 'requestion'], - 'require': ['querier', 'require'], - 'requital': ['quartile', 'requital', 'triequal'], - 'requite': ['quieter', 'requite'], - 'rerack': ['racker', 'rerack'], - 'rerail': ['railer', 'rerail'], - 'reraise': ['rearise', 'reraise'], - 'rerake': ['karree', 'rerake'], - 'rerank': ['ranker', 'rerank'], - 'rerate': ['rerate', 'retare', 'tearer'], - 'reread': ['reader', 'redare', 'reread'], - 'rereel': ['reeler', 'rereel'], - 'reregister': ['registerer', 'reregister'], - 'rerent': ['renter', 'rerent'], - 'rerental': ['rentaler', 'rerental'], - 'rering': ['erring', 'rering', 'ringer'], - 'rerise': ['rerise', 'sirree'], - 'rerivet': ['rerivet', 'riveter'], - 'rerob': ['borer', 'rerob', 'rober'], - 'rerobe': ['rebore', 'rerobe'], - 'reroll': ['reroll', 'roller'], - 'reroof': ['reroof', 'roofer'], - 'reroot': ['reroot', 'rooter', 'torero'], - 'rerow': ['rerow', 'rower'], - 'rerun': ['rerun', 'runer'], - 'resaca': ['ascare', 'caesar', 'resaca'], - 'resack': ['resack', 'sacker', 'screak'], - 'resail': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'], - 'resale': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'], - 'resalt': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'resanction': ['resanction', 'sanctioner'], - 'resaw': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'], - 'resawer': ['resawer', 'reswear', 'swearer'], - 'resay': ['reasy', 'resay', 'sayer', 'seary'], - 'rescan': ['casern', 'rescan'], - 'rescind': ['discern', 'rescind'], - 'rescinder': ['discerner', 'rescinder'], - 'rescindment': ['discernment', 'rescindment'], - 'rescratch': ['rescratch', 'scratcher'], - 'rescuable': ['rescuable', 'securable'], - 'rescue': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'], - 'rescuer': ['recurse', 'rescuer', 'securer'], - 'reseal': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'], - 'reseam': ['reseam', 'seamer'], - 'research': ['rechaser', 'research', 'searcher'], - 'reseat': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'resect': ['resect', 'screet', 'secret'], - 'resection': ['resection', 'secretion'], - 'resectional': ['resectional', 'secretional'], - 'reseda': ['erased', 'reseda', 'seared'], - 'resee': ['esere', 'reese', 'resee'], - 'reseed': ['reseed', 'seeder'], - 'reseek': ['reseek', 'seeker'], - 'resell': ['resell', 'seller'], - 'resend': ['resend', 'sender'], - 'resene': ['resene', 'serene'], - 'resent': ['ernest', 'nester', 'resent', 'streen'], - 'reservable': ['reservable', 'reversable'], - 'reserval': ['reserval', 'reversal', 'slaverer'], - 'reserve': ['reserve', 'resever', 'reverse', 'severer'], - 'reserved': ['deserver', 'reserved', 'reversed'], - 'reservedly': ['reservedly', 'reversedly'], - 'reserveful': ['reserveful', 'reverseful'], - 'reserveless': ['reserveless', 'reverseless'], - 'reserver': ['reserver', 'reverser'], - 'reservist': ['reservist', 'reversist'], - 'reset': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'resever': ['reserve', 'resever', 'reverse', 'severer'], - 'resew': ['resew', 'sewer', 'sweer'], - 'resex': ['resex', 'xeres'], - 'resh': ['hers', 'resh', 'sher'], - 'reshape': ['hespera', 'rephase', 'reshape'], - 'reshare': ['reshare', 'reshear', 'shearer'], - 'resharpen': ['resharpen', 'sharpener'], - 'reshear': ['reshare', 'reshear', 'shearer'], - 'reshearer': ['rehearser', 'reshearer'], - 'reshift': ['reshift', 'shifter'], - 'reshingle': ['englisher', 'reshingle'], - 'reship': ['perish', 'reship'], - 'reshipment': ['perishment', 'reshipment'], - 'reshoot': ['orthose', 'reshoot', 'shooter', 'soother'], - 'reshoulder': ['reshoulder', 'shoulderer'], - 'reshower': ['reshower', 'showerer'], - 'reshun': ['reshun', 'rushen'], - 'reshunt': ['reshunt', 'shunter'], - 'reshut': ['reshut', 'suther', 'thurse', 'tusher'], - 'reside': ['desire', 'reside'], - 'resident': ['indesert', 'inserted', 'resident'], - 'resider': ['derries', 'desirer', 'resider', 'serried'], - 'residua': ['residua', 'ursidae'], - 'resift': ['fister', 'resift', 'sifter', 'strife'], - 'resigh': ['resigh', 'sigher'], - 'resign': ['resign', 'resing', 'signer', 'singer'], - 'resignal': ['resignal', 'seringal', 'signaler'], - 'resigned': ['designer', 'redesign', 'resigned'], - 'resile': ['lisere', 'resile'], - 'resiliate': ['israelite', 'resiliate'], - 'resilient': ['listerine', 'resilient'], - 'resilition': ['isonitrile', 'resilition'], - 'resilver': ['resilver', 'silverer', 'sliverer'], - 'resin': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'], - 'resina': ['arisen', 'arsine', 'resina', 'serian'], - 'resinate': ['arsenite', 'resinate', 'teresian', 'teresina'], - 'resing': ['resign', 'resing', 'signer', 'singer'], - 'resinic': ['irenics', 'resinic', 'sericin', 'sirenic'], - 'resinize': ['resinize', 'sirenize'], - 'resink': ['resink', 'reskin', 'sinker'], - 'resinlike': ['resinlike', 'sirenlike'], - 'resinoid': ['derision', 'ironside', 'resinoid', 'sirenoid'], - 'resinol': ['resinol', 'serolin'], - 'resinous': ['neurosis', 'resinous'], - 'resinously': ['neurolysis', 'resinously'], - 'resiny': ['resiny', 'sireny'], - 'resist': ['resist', 'restis', 'sister'], - 'resistable': ['assertible', 'resistable'], - 'resistance': ['resistance', 'senatrices'], - 'resistful': ['fruitless', 'resistful'], - 'resisting': ['resisting', 'sistering'], - 'resistless': ['resistless', 'sisterless'], - 'resize': ['resize', 'seizer'], - 'resketch': ['resketch', 'sketcher'], - 'reskin': ['resink', 'reskin', 'sinker'], - 'reslash': ['reslash', 'slasher'], - 'reslate': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'], - 'reslay': ['reslay', 'slayer'], - 'reslot': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'], - 'resmell': ['resmell', 'smeller'], - 'resmelt': ['melters', 'resmelt', 'smelter'], - 'resmooth': ['resmooth', 'romeshot', 'smoother'], - 'resnap': ['resnap', 'respan', 'snaper'], - 'resnatch': ['resnatch', 'snatcher', 'stancher'], - 'resoak': ['arkose', 'resoak', 'soaker'], - 'resoap': ['resoap', 'soaper'], - 'resoften': ['resoften', 'softener'], - 'resoil': ['elisor', 'resoil'], - 'resojourn': ['resojourn', 'sojourner'], - 'resolder': ['resolder', 'solderer'], - 'resole': ['relose', 'resole'], - 'resolicit': ['resolicit', 'soliciter'], - 'resolution': ['resolution', 'solutioner'], - 'resonate': ['orestean', 'resonate', 'stearone'], - 'resort': ['resort', 'roster', 'sorter', 'storer'], - 'resorter': ['resorter', 'restorer', 'retrorse'], - 'resound': ['resound', 'sounder', 'unrosed'], - 'resource': ['recourse', 'resource'], - 'resow': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'], - 'resp': ['reps', 'resp'], - 'respace': ['escaper', 'respace'], - 'respade': ['psedera', 'respade'], - 'respan': ['resnap', 'respan', 'snaper'], - 'respeak': ['respeak', 'speaker'], - 'respect': ['respect', 'scepter', 'specter'], - 'respectless': ['respectless', 'scepterless'], - 'respell': ['presell', 'respell', 'speller'], - 'respersive': ['repressive', 'respersive'], - 'respin': ['pernis', 'respin', 'sniper'], - 'respiration': ['respiration', 'retinispora'], - 'respire': ['reprise', 'respire'], - 'respirit': ['respirit', 'spiriter'], - 'respite': ['respite', 'septier'], - 'resplend': ['resplend', 'splender'], - 'resplice': ['eclipser', 'pericles', 'resplice'], - 'responde': ['personed', 'responde'], - 'respondence': ['precondense', 'respondence'], - 'responsal': ['apronless', 'responsal'], - 'response': ['pessoner', 'response'], - 'respot': ['poster', 'presto', 'repost', 'respot', 'stoper'], - 'respray': ['respray', 'sprayer'], - 'respread': ['respread', 'spreader'], - 'respring': ['respring', 'springer'], - 'resprout': ['posturer', 'resprout', 'sprouter'], - 'respue': ['peruse', 'respue'], - 'resqueak': ['resqueak', 'squeaker'], - 'ressaut': ['erastus', 'ressaut'], - 'rest': ['rest', 'sert', 'stre'], - 'restack': ['restack', 'stacker'], - 'restaff': ['restaff', 'staffer'], - 'restain': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'], - 'restake': ['restake', 'sakeret'], - 'restamp': ['restamp', 'stamper'], - 'restart': ['restart', 'starter'], - 'restate': ['estreat', 'restate', 'retaste'], - 'resteal': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'], - 'resteel': ['reestle', 'resteel', 'steeler'], - 'resteep': ['estrepe', 'resteep', 'steeper'], - 'restem': ['mester', 'restem', 'temser', 'termes'], - 'restep': ['pester', 'preset', 'restep', 'streep'], - 'restful': ['fluster', 'restful'], - 'restiad': ['astride', 'diaster', 'disrate', 'restiad', 'staired'], - 'restiffen': ['restiffen', 'stiffener'], - 'restiform': ['reformist', 'restiform'], - 'resting': ['resting', 'stinger'], - 'restio': ['restio', 'sorite', 'sortie', 'triose'], - 'restis': ['resist', 'restis', 'sister'], - 'restitch': ['restitch', 'stitcher'], - 'restive': ['restive', 'servite'], - 'restock': ['restock', 'stocker'], - 'restorer': ['resorter', 'restorer', 'retrorse'], - 'restow': ['restow', 'stower', 'towser', 'worset'], - 'restowal': ['restowal', 'sealwort'], - 'restraighten': ['restraighten', 'straightener'], - 'restrain': ['restrain', 'strainer', 'transire'], - 'restraint': ['restraint', 'retransit', 'trainster', 'transiter'], - 'restream': ['masterer', 'restream', 'streamer'], - 'restrengthen': ['restrengthen', 'strengthener'], - 'restress': ['restress', 'stresser'], - 'restretch': ['restretch', 'stretcher'], - 'restring': ['restring', 'ringster', 'stringer'], - 'restrip': ['restrip', 'striper'], - 'restrive': ['restrive', 'reverist'], - 'restuff': ['restuff', 'stuffer'], - 'resty': ['resty', 'strey'], - 'restyle': ['restyle', 'tersely'], - 'resucceed': ['resucceed', 'succeeder'], - 'resuck': ['resuck', 'sucker'], - 'resue': ['resue', 'reuse'], - 'resuffer': ['resuffer', 'sufferer'], - 'resuggest': ['resuggest', 'suggester'], - 'resuing': ['insurge', 'resuing'], - 'resuit': ['isuret', 'resuit'], - 'result': ['luster', 'result', 'rustle', 'sutler', 'ulster'], - 'resulting': ['resulting', 'ulstering'], - 'resultless': ['lusterless', 'lustreless', 'resultless'], - 'resummon': ['resummon', 'summoner'], - 'resun': ['nurse', 'resun'], - 'resup': ['purse', 'resup', 'sprue', 'super'], - 'resuperheat': ['resuperheat', 'superheater'], - 'resupinate': ['interpause', 'resupinate'], - 'resupination': ['resupination', 'uranospinite'], - 'resupport': ['resupport', 'supporter'], - 'resuppose': ['resuppose', 'superpose'], - 'resupposition': ['resupposition', 'superposition'], - 'resuppress': ['resuppress', 'suppresser'], - 'resurrender': ['resurrender', 'surrenderer'], - 'resurround': ['resurround', 'surrounder'], - 'resuspect': ['resuspect', 'suspecter'], - 'resuspend': ['resuspend', 'suspender', 'unpressed'], - 'reswallow': ['reswallow', 'swallower'], - 'resward': ['drawers', 'resward'], - 'reswarm': ['reswarm', 'swarmer'], - 'reswear': ['resawer', 'reswear', 'swearer'], - 'resweat': ['resweat', 'sweater'], - 'resweep': ['resweep', 'sweeper'], - 'reswell': ['reswell', 'sweller'], - 'reswill': ['reswill', 'swiller'], - 'retable': ['bearlet', 'bleater', 'elberta', 'retable'], - 'retack': ['racket', 'retack', 'tacker'], - 'retag': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'], - 'retail': ['lirate', 'retail', 'retial', 'tailer'], - 'retailer': ['irrelate', 'retailer'], - 'retain': ['nerita', 'ratine', 'retain', 'retina', 'tanier'], - 'retainal': ['retainal', 'telarian'], - 'retainder': ['irredenta', 'retainder'], - 'retainer': ['arretine', 'eretrian', 'eritrean', 'retainer'], - 'retaining': ['negritian', 'retaining'], - 'retaliate': ['elettaria', 'retaliate'], - 'retalk': ['kartel', 'retalk', 'talker'], - 'retama': ['ramate', 'retama'], - 'retame': ['reetam', 'retame', 'teamer'], - 'retan': ['antre', 'arent', 'retan', 'terna'], - 'retape': ['petrea', 'repeat', 'retape'], - 'retard': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'retardent': ['retardent', 'tetrander'], - 'retare': ['rerate', 'retare', 'tearer'], - 'retaste': ['estreat', 'restate', 'retaste'], - 'retax': ['extra', 'retax', 'taxer'], - 'retaxation': ['retaxation', 'tetraxonia'], - 'retch': ['chert', 'retch'], - 'reteach': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'], - 'retelegraph': ['retelegraph', 'telegrapher'], - 'retell': ['retell', 'teller'], - 'retem': ['meter', 'retem'], - 'retemper': ['retemper', 'temperer'], - 'retempt': ['retempt', 'tempter'], - 'retenant': ['retenant', 'tenanter'], - 'retender': ['retender', 'tenderer'], - 'retene': ['entree', 'rentee', 'retene'], - 'retent': ['netter', 'retent', 'tenter'], - 'retention': ['intertone', 'retention'], - 'retepora': ['perorate', 'retepora'], - 'retest': ['retest', 'setter', 'street', 'tester'], - 'rethank': ['rethank', 'thanker'], - 'rethatch': ['rethatch', 'thatcher'], - 'rethaw': ['rethaw', 'thawer', 'wreath'], - 'rethe': ['ether', 'rethe', 'theer', 'there', 'three'], - 'retheness': ['retheness', 'thereness', 'threeness'], - 'rethicken': ['kitchener', 'rethicken', 'thickener'], - 'rethink': ['rethink', 'thinker'], - 'rethrash': ['rethrash', 'thrasher'], - 'rethread': ['rethread', 'threader'], - 'rethreaten': ['rethreaten', 'threatener'], - 'rethresh': ['rethresh', 'thresher'], - 'rethrill': ['rethrill', 'thriller'], - 'rethrow': ['rethrow', 'thrower'], - 'rethrust': ['rethrust', 'thruster'], - 'rethunder': ['rethunder', 'thunderer'], - 'retia': ['arite', 'artie', 'irate', 'retia', 'tarie'], - 'retial': ['lirate', 'retail', 'retial', 'tailer'], - 'reticent': ['reticent', 'tencteri'], - 'reticket': ['reticket', 'ticketer'], - 'reticula': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'], - 'reticular': ['curtailer', 'recruital', 'reticular'], - 'retier': ['errite', 'reiter', 'retier', 'retire', 'tierer'], - 'retighten': ['retighten', 'tightener'], - 'retill': ['retill', 'rillet', 'tiller'], - 'retimber': ['retimber', 'timberer'], - 'retime': ['metier', 'retime', 'tremie'], - 'retin': ['inert', 'inter', 'niter', 'retin', 'trine'], - 'retina': ['nerita', 'ratine', 'retain', 'retina', 'tanier'], - 'retinal': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'retinalite': ['retinalite', 'trilineate'], - 'retinene': ['internee', 'retinene'], - 'retinian': ['neritina', 'retinian'], - 'retinispora': ['respiration', 'retinispora'], - 'retinite': ['intertie', 'retinite'], - 'retinker': ['retinker', 'tinkerer'], - 'retinochorioiditis': ['chorioidoretinitis', 'retinochorioiditis'], - 'retinoid': ['neritoid', 'retinoid'], - 'retinue': ['neurite', 'retinue', 'reunite', 'uterine'], - 'retinula': ['lutrinae', 'retinula', 'rutelian', 'tenurial'], - 'retinular': ['retinular', 'trineural'], - 'retip': ['perit', 'retip', 'tripe'], - 'retiral': ['retiral', 'retrial', 'trailer'], - 'retire': ['errite', 'reiter', 'retier', 'retire', 'tierer'], - 'retirer': ['retirer', 'terrier'], - 'retistene': ['retistene', 'serinette'], - 'retoast': ['retoast', 'rosetta', 'stoater', 'toaster'], - 'retold': ['retold', 'rodlet'], - 'retomb': ['retomb', 'trombe'], - 'retonation': ['renotation', 'retonation'], - 'retool': ['looter', 'retool', 'rootle', 'tooler'], - 'retooth': ['retooth', 'toother'], - 'retort': ['retort', 'retrot', 'rotter'], - 'retoss': ['retoss', 'tosser'], - 'retouch': ['retouch', 'toucher'], - 'retour': ['retour', 'router', 'tourer'], - 'retrace': ['caterer', 'recrate', 'retrace', 'terrace'], - 'retrack': ['retrack', 'tracker'], - 'retractation': ['reattraction', 'retractation'], - 'retracted': ['detracter', 'retracted'], - 'retraction': ['retraction', 'triaconter'], - 'retrad': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'retrade': ['derater', 'retrade', 'retread', 'treader'], - 'retradition': ['retradition', 'traditioner'], - 'retrain': ['arterin', 'retrain', 'terrain', 'trainer'], - 'retral': ['retral', 'terral'], - 'retramp': ['retramp', 'tramper'], - 'retransform': ['retransform', 'transformer'], - 'retransit': ['restraint', 'retransit', 'trainster', 'transiter'], - 'retransplant': ['retransplant', 'transplanter'], - 'retransport': ['retransport', 'transporter'], - 'retravel': ['retravel', 'revertal', 'traveler'], - 'retread': ['derater', 'retrade', 'retread', 'treader'], - 'retreat': ['ettarre', 'retreat', 'treater'], - 'retree': ['retree', 'teerer'], - 'retrench': ['retrench', 'trencher'], - 'retrial': ['retiral', 'retrial', 'trailer'], - 'retrim': ['mitrer', 'retrim', 'trimer'], - 'retrocaecal': ['accelerator', 'retrocaecal'], - 'retrogradient': ['redintegrator', 'retrogradient'], - 'retrorse': ['resorter', 'restorer', 'retrorse'], - 'retrot': ['retort', 'retrot', 'rotter'], - 'retrue': ['retrue', 'ureter'], - 'retrust': ['retrust', 'truster'], - 'retry': ['retry', 'terry'], - 'retter': ['retter', 'terret'], - 'retting': ['gittern', 'gritten', 'retting'], - 'retube': ['rebute', 'retube'], - 'retuck': ['retuck', 'tucker'], - 'retune': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'], - 'returf': ['returf', 'rufter'], - 'return': ['return', 'turner'], - 'retuse': ['retuse', 'tereus'], - 'retwine': ['enwrite', 'retwine'], - 'retwist': ['retwist', 'twister'], - 'retzian': ['retzian', 'terzina'], - 'reub': ['bure', 'reub', 'rube'], - 'reundergo': ['guerdoner', 'reundergo', 'undergoer', 'undergore'], - 'reune': ['enure', 'reune'], - 'reunfold': ['flounder', 'reunfold', 'unfolder'], - 'reunify': ['reunify', 'unfiery'], - 'reunionist': ['reunionist', 'sturionine'], - 'reunite': ['neurite', 'retinue', 'reunite', 'uterine'], - 'reunpack': ['reunpack', 'unpacker'], - 'reuphold': ['reuphold', 'upholder'], - 'reupholster': ['reupholster', 'upholsterer'], - 'reuplift': ['reuplift', 'uplifter'], - 'reuse': ['resue', 'reuse'], - 'reutter': ['reutter', 'utterer'], - 'revacate': ['acervate', 'revacate'], - 'revalidation': ['derivational', 'revalidation'], - 'revamp': ['revamp', 'vamper'], - 'revarnish': ['revarnish', 'varnisher'], - 'reve': ['ever', 'reve', 'veer'], - 'reveal': ['laveer', 'leaver', 'reveal', 'vealer'], - 'reveil': ['levier', 'relive', 'reveil', 'revile', 'veiler'], - 'revel': ['elver', 'lever', 'revel'], - 'revelant': ['levanter', 'relevant', 'revelant'], - 'revelation': ['relevation', 'revelation'], - 'revelator': ['relevator', 'revelator', 'veratrole'], - 'reveler': ['leverer', 'reveler'], - 'revenant': ['revenant', 'venerant'], - 'revend': ['revend', 'vender'], - 'revender': ['revender', 'reverend'], - 'reveneer': ['reveneer', 'veneerer'], - 'revent': ['revent', 'venter'], - 'revenue': ['revenue', 'unreeve'], - 'rever': ['rever', 'verre'], - 'reverend': ['revender', 'reverend'], - 'reverential': ['interleaver', 'reverential'], - 'reverist': ['restrive', 'reverist'], - 'revers': ['revers', 'server', 'verser'], - 'reversable': ['reservable', 'reversable'], - 'reversal': ['reserval', 'reversal', 'slaverer'], - 'reverse': ['reserve', 'resever', 'reverse', 'severer'], - 'reversed': ['deserver', 'reserved', 'reversed'], - 'reversedly': ['reservedly', 'reversedly'], - 'reverseful': ['reserveful', 'reverseful'], - 'reverseless': ['reserveless', 'reverseless'], - 'reverser': ['reserver', 'reverser'], - 'reversewise': ['reversewise', 'revieweress'], - 'reversi': ['reversi', 'reviser'], - 'reversion': ['reversion', 'versioner'], - 'reversist': ['reservist', 'reversist'], - 'revertal': ['retravel', 'revertal', 'traveler'], - 'revest': ['revest', 'servet', 'sterve', 'verset', 'vester'], - 'revet': ['evert', 'revet'], - 'revete': ['revete', 'tervee'], - 'revictual': ['lucrative', 'revictual', 'victualer'], - 'review': ['review', 'viewer'], - 'revieweress': ['reversewise', 'revieweress'], - 'revigorate': ['overgaiter', 'revigorate'], - 'revile': ['levier', 'relive', 'reveil', 'revile', 'veiler'], - 'reviling': ['reviling', 'vierling'], - 'revisal': ['revisal', 'virales'], - 'revise': ['revise', 'siever'], - 'revised': ['deviser', 'diverse', 'revised'], - 'reviser': ['reversi', 'reviser'], - 'revision': ['revision', 'visioner'], - 'revisit': ['revisit', 'visiter'], - 'revisitant': ['revisitant', 'transitive'], - 'revitalization': ['relativization', 'revitalization'], - 'revitalize': ['relativize', 'revitalize'], - 'revocation': ['overaction', 'revocation'], - 'revocative': ['overactive', 'revocative'], - 'revoke': ['evoker', 'revoke'], - 'revolting': ['overglint', 'revolting'], - 'revolute': ['revolute', 'truelove'], - 'revolve': ['evolver', 'revolve'], - 'revomit': ['revomit', 'vomiter'], - 'revote': ['revote', 'vetoer'], - 'revuist': ['revuist', 'stuiver'], - 'rewade': ['drawee', 'rewade'], - 'rewager': ['rewager', 'wagerer'], - 'rewake': ['kerewa', 'rewake'], - 'rewaken': ['rewaken', 'wakener'], - 'rewall': ['rewall', 'waller'], - 'rewallow': ['rewallow', 'wallower'], - 'reward': ['drawer', 'redraw', 'reward', 'warder'], - 'rewarder': ['redrawer', 'rewarder', 'warderer'], - 'rewarm': ['rewarm', 'warmer'], - 'rewarn': ['rewarn', 'warner', 'warren'], - 'rewash': ['hawser', 'rewash', 'washer'], - 'rewater': ['rewater', 'waterer'], - 'rewave': ['rewave', 'weaver'], - 'rewax': ['rewax', 'waxer'], - 'reweaken': ['reweaken', 'weakener'], - 'rewear': ['rewear', 'warree', 'wearer'], - 'rewed': ['dewer', 'ewder', 'rewed'], - 'reweigh': ['reweigh', 'weigher'], - 'reweld': ['reweld', 'welder'], - 'rewet': ['rewet', 'tewer', 'twere'], - 'rewhirl': ['rewhirl', 'whirler'], - 'rewhisper': ['rewhisper', 'whisperer'], - 'rewhiten': ['rewhiten', 'whitener'], - 'rewiden': ['rewiden', 'widener'], - 'rewin': ['erwin', 'rewin', 'winer'], - 'rewind': ['rewind', 'winder'], - 'rewish': ['rewish', 'wisher'], - 'rewithdraw': ['rewithdraw', 'withdrawer'], - 'reword': ['reword', 'worder'], - 'rework': ['rework', 'worker'], - 'reworked': ['reedwork', 'reworked'], - 'rewound': ['rewound', 'unrowed', 'wounder'], - 'rewoven': ['overnew', 'rewoven'], - 'rewrap': ['prewar', 'rewrap', 'warper'], - 'reyield': ['reedily', 'reyield', 'yielder'], - 'rhacianectes': ['rachianectes', 'rhacianectes'], - 'rhaetian': ['earthian', 'rhaetian'], - 'rhaetic': ['certhia', 'rhaetic', 'theriac'], - 'rhamnose': ['horseman', 'rhamnose', 'shoreman'], - 'rhamnoside': ['admonisher', 'rhamnoside'], - 'rhapis': ['parish', 'raphis', 'rhapis'], - 'rhapontic': ['anthropic', 'rhapontic'], - 'rhaponticin': ['panornithic', 'rhaponticin'], - 'rhason': ['rhason', 'sharon', 'shoran'], - 'rhatania': ['ratanhia', 'rhatania'], - 'rhe': ['her', 'reh', 'rhe'], - 'rhea': ['hare', 'hear', 'rhea'], - 'rheen': ['herne', 'rheen'], - 'rheic': ['cheir', 'rheic'], - 'rhein': ['hiren', 'rhein', 'rhine'], - 'rheinic': ['hircine', 'rheinic'], - 'rhema': ['harem', 'herma', 'rhema'], - 'rhematic': ['athermic', 'marchite', 'rhematic'], - 'rheme': ['herem', 'rheme'], - 'rhemist': ['rhemist', 'smither'], - 'rhenium': ['inhumer', 'rhenium'], - 'rheometric': ['chirometer', 'rheometric'], - 'rheophile': ['herophile', 'rheophile'], - 'rheoscope': ['prechoose', 'rheoscope'], - 'rheostatic': ['choristate', 'rheostatic'], - 'rheotactic': ['rheotactic', 'theocratic'], - 'rheotan': ['another', 'athenor', 'rheotan'], - 'rheotropic': ['horopteric', 'rheotropic', 'trichopore'], - 'rhesian': ['arshine', 'nearish', 'rhesian', 'sherani'], - 'rhesus': ['rhesus', 'suresh'], - 'rhetor': ['rhetor', 'rother'], - 'rhetoricals': ['rhetoricals', 'trochlearis'], - 'rhetorize': ['rhetorize', 'theorizer'], - 'rheumatic': ['hematuric', 'rheumatic'], - 'rhine': ['hiren', 'rhein', 'rhine'], - 'rhinestone': ['neornithes', 'rhinestone'], - 'rhineura': ['rhineura', 'unhairer'], - 'rhinocele': ['cholerine', 'rhinocele'], - 'rhinopharyngitis': ['pharyngorhinitis', 'rhinopharyngitis'], - 'rhipidate': ['rhipidate', 'thripidae'], - 'rhizoctonia': ['chorization', 'rhizoctonia', 'zonotrichia'], - 'rhoda': ['hoard', 'rhoda'], - 'rhodaline': ['hodiernal', 'rhodaline'], - 'rhodanthe': ['rhodanthe', 'thornhead'], - 'rhodeose': ['rhodeose', 'seerhood'], - 'rhodes': ['dehors', 'rhodes', 'shoder', 'shored'], - 'rhodic': ['orchid', 'rhodic'], - 'rhodite': ['rhodite', 'theroid'], - 'rhodium': ['humidor', 'rhodium'], - 'rhodope': ['redhoop', 'rhodope'], - 'rhodopsin': ['donorship', 'rhodopsin'], - 'rhoecus': ['choreus', 'chouser', 'rhoecus'], - 'rhopalic': ['orphical', 'rhopalic'], - 'rhus': ['rhus', 'rush'], - 'rhynchotal': ['chloranthy', 'rhynchotal'], - 'rhyton': ['rhyton', 'thorny'], - 'ria': ['air', 'ira', 'ria'], - 'rial': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'], - 'riancy': ['cairny', 'riancy'], - 'riant': ['riant', 'tairn', 'tarin', 'train'], - 'riata': ['arati', 'atria', 'riata', 'tarai', 'tiara'], - 'ribald': ['bildar', 'bridal', 'ribald'], - 'ribaldly': ['bridally', 'ribaldly'], - 'riband': ['brandi', 'riband'], - 'ribat': ['barit', 'ribat'], - 'ribbed': ['dibber', 'ribbed'], - 'ribber': ['briber', 'ribber'], - 'ribble': ['libber', 'ribble'], - 'ribbon': ['ribbon', 'robbin'], - 'ribe': ['beri', 'bier', 'brei', 'ribe'], - 'ribes': ['birse', 'ribes'], - 'riblet': ['beltir', 'riblet'], - 'ribroast': ['arborist', 'ribroast'], - 'ribspare': ['ribspare', 'sparerib'], - 'rice': ['eric', 'rice'], - 'ricer': ['crier', 'ricer'], - 'ricey': ['criey', 'ricey'], - 'richardia': ['charadrii', 'richardia'], - 'richdom': ['chromid', 'richdom'], - 'richen': ['enrich', 'nicher', 'richen'], - 'riches': ['riches', 'shicer'], - 'richt': ['crith', 'richt'], - 'ricine': ['irenic', 'ricine'], - 'ricinoleate': ['arenicolite', 'ricinoleate'], - 'rickets': ['rickets', 'sticker'], - 'rickle': ['licker', 'relick', 'rickle'], - 'rictal': ['citral', 'rictal'], - 'rictus': ['citrus', 'curtis', 'rictus', 'rustic'], - 'ridable': ['bedrail', 'bridale', 'ridable'], - 'ridably': ['bardily', 'rabidly', 'ridably'], - 'riddam': ['madrid', 'riddam'], - 'riddance': ['adendric', 'riddance'], - 'riddel': ['lidder', 'riddel', 'riddle'], - 'ridden': ['dinder', 'ridden', 'rinded'], - 'riddle': ['lidder', 'riddel', 'riddle'], - 'ride': ['dier', 'dire', 'reid', 'ride'], - 'rideau': ['auride', 'rideau'], - 'riden': ['diner', 'riden', 'rinde'], - 'rident': ['dirten', 'rident', 'tinder'], - 'rider': ['drier', 'rider'], - 'ridered': ['deirdre', 'derider', 'derride', 'ridered'], - 'ridge': ['dirge', 'gride', 'redig', 'ridge'], - 'ridgel': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'], - 'ridgelike': ['dirgelike', 'ridgelike'], - 'ridger': ['girder', 'ridger'], - 'ridging': ['girding', 'ridging'], - 'ridgingly': ['girdingly', 'ridgingly'], - 'ridgling': ['girdling', 'ridgling'], - 'ridgy': ['igdyr', 'ridgy'], - 'rie': ['ire', 'rie'], - 'riem': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'rife': ['fire', 'reif', 'rife'], - 'rifeness': ['finesser', 'rifeness'], - 'rifle': ['filer', 'flier', 'lifer', 'rifle'], - 'rifleman': ['inflamer', 'rifleman'], - 'rift': ['frit', 'rift'], - 'rigadoon': ['gordonia', 'organoid', 'rigadoon'], - 'rigation': ['rigation', 'trigonia'], - 'rigbane': ['bearing', 'begrain', 'brainge', 'rigbane'], - 'right': ['girth', 'grith', 'right'], - 'rightle': ['lighter', 'relight', 'rightle'], - 'rigling': ['girling', 'rigling'], - 'rigolette': ['gloriette', 'rigolette'], - 'rik': ['irk', 'rik'], - 'rikisha': ['rikisha', 'shikari'], - 'rikk': ['kirk', 'rikk'], - 'riksha': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'], - 'rile': ['lier', 'lire', 'rile'], - 'rillet': ['retill', 'rillet', 'tiller'], - 'rillett': ['rillett', 'trillet'], - 'rillock': ['rillock', 'rollick'], - 'rim': ['mir', 'rim'], - 'rima': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'], - 'rimal': ['armil', 'marli', 'rimal'], - 'rimate': ['imaret', 'metria', 'mirate', 'rimate'], - 'rime': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'], - 'rimmed': ['dimmer', 'immerd', 'rimmed'], - 'rimose': ['isomer', 'rimose'], - 'rimple': ['limper', 'prelim', 'rimple'], - 'rimu': ['muir', 'rimu'], - 'rimula': ['rimula', 'uramil'], - 'rimy': ['miry', 'rimy', 'yirm'], - 'rinaldo': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'], - 'rinceau': ['aneuric', 'rinceau'], - 'rincon': ['cornin', 'rincon'], - 'rinde': ['diner', 'riden', 'rinde'], - 'rinded': ['dinder', 'ridden', 'rinded'], - 'rindle': ['linder', 'rindle'], - 'rine': ['neri', 'rein', 'rine'], - 'ring': ['girn', 'grin', 'ring'], - 'ringable': ['balinger', 'ringable'], - 'ringe': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'], - 'ringed': ['engird', 'ringed'], - 'ringer': ['erring', 'rering', 'ringer'], - 'ringgoer': ['gorgerin', 'ringgoer'], - 'ringhead': ['headring', 'ringhead'], - 'ringite': ['igniter', 'ringite', 'tigrine'], - 'ringle': ['linger', 'ringle'], - 'ringlead': ['dragline', 'reginald', 'ringlead'], - 'ringlet': ['ringlet', 'tingler', 'tringle'], - 'ringster': ['restring', 'ringster', 'stringer'], - 'ringtail': ['ringtail', 'trailing'], - 'ringy': ['girny', 'ringy'], - 'rink': ['kirn', 'rink'], - 'rinka': ['inkra', 'krina', 'nakir', 'rinka'], - 'rinse': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'], - 'rio': ['rio', 'roi'], - 'riot': ['riot', 'roit', 'trio'], - 'rioting': ['ignitor', 'rioting'], - 'rip': ['pir', 'rip'], - 'ripa': ['pair', 'pari', 'pria', 'ripa'], - 'ripal': ['april', 'pilar', 'ripal'], - 'ripe': ['peri', 'pier', 'ripe'], - 'ripelike': ['pierlike', 'ripelike'], - 'ripen': ['piner', 'prine', 'repin', 'ripen'], - 'ripener': ['repiner', 'ripener'], - 'ripeningly': ['repiningly', 'ripeningly'], - 'riper': ['prier', 'riper'], - 'ripgut': ['ripgut', 'upgirt'], - 'ripost': ['ripost', 'triops', 'tripos'], - 'riposte': ['periost', 'porites', 'reposit', 'riposte'], - 'rippet': ['rippet', 'tipper'], - 'ripple': ['lipper', 'ripple'], - 'ripplet': ['ripplet', 'tippler', 'tripple'], - 'ripup': ['ripup', 'uprip'], - 'rise': ['reis', 'rise', 'seri', 'sier', 'sire'], - 'risen': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'], - 'rishi': ['irish', 'rishi', 'sirih'], - 'risk': ['kris', 'risk'], - 'risky': ['risky', 'sirky'], - 'risper': ['risper', 'sprier'], - 'risque': ['risque', 'squire'], - 'risquee': ['esquire', 'risquee'], - 'rissel': ['rissel', 'rissle'], - 'rissle': ['rissel', 'rissle'], - 'rissoa': ['aissor', 'rissoa'], - 'rist': ['rist', 'stir'], - 'rit': ['rit', 'tri'], - 'rita': ['airt', 'rita', 'tari', 'tiar'], - 'rite': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'], - 'riteless': ['riteless', 'tireless'], - 'ritelessness': ['ritelessness', 'tirelessness'], - 'ritling': ['glitnir', 'ritling'], - 'ritualize': ['ritualize', 'uralitize'], - 'riva': ['ravi', 'riva', 'vair', 'vari', 'vira'], - 'rivage': ['argive', 'rivage'], - 'rival': ['rival', 'viral'], - 'rive': ['rive', 'veri', 'vier', 'vire'], - 'rivel': ['levir', 'liver', 'livre', 'rivel'], - 'riven': ['riven', 'viner'], - 'rivered': ['deriver', 'redrive', 'rivered'], - 'rivet': ['rivet', 'tirve', 'tiver'], - 'riveter': ['rerivet', 'riveter'], - 'rivetless': ['rivetless', 'silvester'], - 'riving': ['irving', 'riving', 'virgin'], - 'rivingly': ['rivingly', 'virginly'], - 'rivose': ['rivose', 'virose'], - 'riyal': ['lairy', 'riyal'], - 'ro': ['or', 'ro'], - 'roach': ['achor', 'chora', 'corah', 'orach', 'roach'], - 'road': ['dora', 'orad', 'road'], - 'roadability': ['adorability', 'roadability'], - 'roadable': ['adorable', 'roadable'], - 'roader': ['adorer', 'roader'], - 'roading': ['gordian', 'idorgan', 'roading'], - 'roadite': ['roadite', 'toadier'], - 'roadman': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'], - 'roadster': ['dartrose', 'roadster'], - 'roam': ['amor', 'maro', 'mora', 'omar', 'roam'], - 'roamage': ['georama', 'roamage'], - 'roamer': ['remora', 'roamer'], - 'roaming': ['ingomar', 'moringa', 'roaming'], - 'roan': ['nora', 'orna', 'roan'], - 'roast': ['astor', 'roast'], - 'roastable': ['astrolabe', 'roastable'], - 'roasting': ['orangist', 'organist', 'roasting', 'signator'], - 'rob': ['bor', 'orb', 'rob'], - 'robalo': ['barolo', 'robalo'], - 'roband': ['bandor', 'bondar', 'roband'], - 'robbin': ['ribbon', 'robbin'], - 'robe': ['boer', 'bore', 'robe'], - 'rober': ['borer', 'rerob', 'rober'], - 'roberd': ['border', 'roberd'], - 'roberta': ['arboret', 'roberta', 'taborer'], - 'robin': ['biron', 'inorb', 'robin'], - 'robinet': ['bornite', 'robinet'], - 'robing': ['boring', 'robing'], - 'roble': ['blore', 'roble'], - 'robot': ['boort', 'robot'], - 'robotian': ['abortion', 'robotian'], - 'robotism': ['bimotors', 'robotism'], - 'robur': ['burro', 'robur', 'rubor'], - 'roc': ['cor', 'cro', 'orc', 'roc'], - 'rochea': ['chorea', 'ochrea', 'rochea'], - 'rochet': ['hector', 'rochet', 'tocher', 'troche'], - 'rock': ['cork', 'rock'], - 'rocker': ['corker', 'recork', 'rocker'], - 'rocketer': ['rocketer', 'rocktree'], - 'rockiness': ['corkiness', 'rockiness'], - 'rocking': ['corking', 'rocking'], - 'rockish': ['corkish', 'rockish'], - 'rocktree': ['rocketer', 'rocktree'], - 'rockwood': ['corkwood', 'rockwood', 'woodrock'], - 'rocky': ['corky', 'rocky'], - 'rocta': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'], - 'rod': ['dor', 'rod'], - 'rode': ['doer', 'redo', 'rode', 'roed'], - 'rodentia': ['andorite', 'nadorite', 'ordinate', 'rodentia'], - 'rodential': ['lorandite', 'rodential'], - 'rodinal': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'], - 'rodingite': ['negritoid', 'rodingite'], - 'rodless': ['drossel', 'rodless'], - 'rodlet': ['retold', 'rodlet'], - 'rodman': ['random', 'rodman'], - 'rodney': ['rodney', 'yonder'], - 'roe': ['oer', 'ore', 'roe'], - 'roed': ['doer', 'redo', 'rode', 'roed'], - 'roey': ['oyer', 'roey', 'yore'], - 'rog': ['gor', 'rog'], - 'rogan': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'rogative': ['ravigote', 'rogative'], - 'roger': ['gorer', 'roger'], - 'roggle': ['logger', 'roggle'], - 'rogue': ['orgue', 'rogue', 'rouge'], - 'rohan': ['nahor', 'norah', 'rohan'], - 'rohob': ['bohor', 'rohob'], - 'rohun': ['huron', 'rohun'], - 'roi': ['rio', 'roi'], - 'roid': ['dori', 'roid'], - 'roil': ['loir', 'lori', 'roil'], - 'roister': ['roister', 'storier'], - 'roit': ['riot', 'roit', 'trio'], - 'rok': ['kor', 'rok'], - 'roka': ['karo', 'kora', 'okra', 'roka'], - 'roke': ['kore', 'roke'], - 'rokey': ['rokey', 'yoker'], - 'roky': ['kory', 'roky', 'york'], - 'roland': ['androl', 'arnold', 'lardon', 'roland', 'ronald'], - 'rolandic': ['ironclad', 'rolandic'], - 'role': ['lore', 'orle', 'role'], - 'rolfe': ['forel', 'rolfe'], - 'roller': ['reroll', 'roller'], - 'rollick': ['rillock', 'rollick'], - 'romaean': ['neorama', 'romaean'], - 'romain': ['marion', 'romain'], - 'romaine': ['moraine', 'romaine'], - 'romal': ['molar', 'moral', 'romal'], - 'roman': ['manor', 'moran', 'norma', 'ramon', 'roman'], - 'romancist': ['narcotism', 'romancist'], - 'romancy': ['acronym', 'romancy'], - 'romandom': ['monodram', 'romandom'], - 'romane': ['enamor', 'monera', 'oreman', 'romane'], - 'romanes': ['masoner', 'romanes'], - 'romanian': ['maronian', 'romanian'], - 'romanic': ['amicron', 'marconi', 'minorca', 'romanic'], - 'romanist': ['maronist', 'romanist'], - 'romanistic': ['marcionist', 'romanistic'], - 'romanite': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'], - 'romanity': ['minatory', 'romanity'], - 'romanly': ['almonry', 'romanly'], - 'romantic': ['macrotin', 'romantic'], - 'romanticly': ['matrocliny', 'romanticly'], - 'romantism': ['matronism', 'romantism'], - 'rome': ['mero', 'more', 'omer', 'rome'], - 'romeite': ['moieter', 'romeite'], - 'romeo': ['moore', 'romeo'], - 'romero': ['romero', 'roomer'], - 'romeshot': ['resmooth', 'romeshot', 'smoother'], - 'romeward': ['marrowed', 'romeward'], - 'romic': ['micro', 'moric', 'romic'], - 'romish': ['hirmos', 'romish'], - 'rompish': ['orphism', 'rompish'], - 'ron': ['nor', 'ron'], - 'ronald': ['androl', 'arnold', 'lardon', 'roland', 'ronald'], - 'roncet': ['conter', 'cornet', 'cronet', 'roncet'], - 'ronco': ['conor', 'croon', 'ronco'], - 'rond': ['dorn', 'rond'], - 'rondache': ['anchored', 'rondache'], - 'ronde': ['drone', 'ronde'], - 'rondeau': ['rondeau', 'unoared'], - 'rondel': ['rondel', 'rondle'], - 'rondelet': ['redolent', 'rondelet'], - 'rondeletia': ['delineator', 'rondeletia'], - 'rondelle': ['enrolled', 'rondelle'], - 'rondle': ['rondel', 'rondle'], - 'rondo': ['donor', 'rondo'], - 'rondure': ['rondure', 'rounder', 'unorder'], - 'rone': ['oner', 'rone'], - 'ronga': ['angor', - 'argon', - 'goran', - 'grano', - 'groan', - 'nagor', - 'orang', - 'organ', - 'rogan', - 'ronga'], - 'rood': ['door', 'odor', 'oord', 'rood'], - 'roodstone': ['doorstone', 'roodstone'], - 'roofer': ['reroof', 'roofer'], - 'rooflet': ['footler', 'rooflet'], - 'rook': ['kroo', 'rook'], - 'rooker': ['korero', 'rooker'], - 'rool': ['loro', 'olor', 'orlo', 'rool'], - 'room': ['moor', 'moro', 'room'], - 'roomage': ['moorage', 'roomage'], - 'roomed': ['doomer', 'mooder', 'redoom', 'roomed'], - 'roomer': ['romero', 'roomer'], - 'roomlet': ['roomlet', 'tremolo'], - 'roomstead': ['astrodome', 'roomstead'], - 'roomward': ['roomward', 'wardroom'], - 'roomy': ['moory', 'roomy'], - 'roost': ['roost', 'torso'], - 'root': ['root', 'roto', 'toro'], - 'rooter': ['reroot', 'rooter', 'torero'], - 'rootle': ['looter', 'retool', 'rootle', 'tooler'], - 'rootlet': ['rootlet', 'tootler'], - 'rootworm': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'], - 'rope': ['pore', 'rope'], - 'ropeable': ['operable', 'ropeable'], - 'ropelike': ['porelike', 'ropelike'], - 'ropeman': ['manrope', 'ropeman'], - 'roper': ['porer', 'prore', 'roper'], - 'ropes': ['poser', 'prose', 'ropes', 'spore'], - 'ropiness': ['poriness', 'pression', 'ropiness'], - 'roping': ['poring', 'roping'], - 'ropp': ['prop', 'ropp'], - 'ropy': ['pory', 'pyro', 'ropy'], - 'roquet': ['quoter', 'roquet', 'torque'], - 'rosa': ['asor', 'rosa', 'soar', 'sora'], - 'rosabel': ['borlase', 'labrose', 'rosabel'], - 'rosal': ['rosal', 'solar', 'soral'], - 'rosales': ['lassoer', 'oarless', 'rosales'], - 'rosalie': ['rosalie', 'seriola'], - 'rosaniline': ['enaliornis', 'rosaniline'], - 'rosated': ['rosated', 'torsade'], - 'rose': ['eros', 'rose', 'sero', 'sore'], - 'roseal': ['roseal', 'solera'], - 'rosed': ['doser', 'rosed'], - 'rosehead': ['rosehead', 'sorehead'], - 'roseine': ['erinose', 'roseine'], - 'rosel': ['loser', 'orsel', 'rosel', 'soler'], - 'roselite': ['literose', 'roselite', 'tirolese'], - 'roselle': ['orselle', 'roselle'], - 'roseola': ['aerosol', 'roseola'], - 'roset': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'], - 'rosetan': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'], - 'rosetime': ['rosetime', 'timorese', 'tiresome'], - 'rosetta': ['retoast', 'rosetta', 'stoater', 'toaster'], - 'rosette': ['rosette', 'tetrose'], - 'rosetum': ['oestrum', 'rosetum'], - 'rosety': ['oyster', 'rosety'], - 'rosin': ['ornis', 'rosin'], - 'rosinate': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'], - 'rosine': ['rosine', 'senior', 'soneri'], - 'rosiness': ['insessor', 'rosiness'], - 'rosmarine': ['morrisean', 'rosmarine'], - 'rosolite': ['oestriol', 'rosolite'], - 'rosorial': ['rosorial', 'sororial'], - 'rossite': ['rossite', 'sorites'], - 'rostel': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'], - 'roster': ['resort', 'roster', 'sorter', 'storer'], - 'rostra': ['rostra', 'sartor'], - 'rostrate': ['rostrate', 'trostera'], - 'rosulate': ['oestrual', 'rosulate'], - 'rosy': ['rosy', 'sory'], - 'rot': ['ort', 'rot', 'tor'], - 'rota': ['rota', 'taro', 'tora'], - 'rotacism': ['acrotism', 'rotacism'], - 'rotal': ['latro', 'rotal', 'toral'], - 'rotala': ['aortal', 'rotala'], - 'rotalian': ['notarial', 'rational', 'rotalian'], - 'rotan': ['orant', 'rotan', 'toran', 'trona'], - 'rotanev': ['rotanev', 'venator'], - 'rotarian': ['rotarian', 'tornaria'], - 'rotate': ['rotate', 'tetrao'], - 'rotch': ['chort', 'rotch', 'torch'], - 'rote': ['rote', 'tore'], - 'rotella': ['reallot', 'rotella', 'tallero'], - 'rotge': ['ergot', 'rotge'], - 'rother': ['rhetor', 'rother'], - 'roto': ['root', 'roto', 'toro'], - 'rotse': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'], - 'rottan': ['attorn', 'ratton', 'rottan'], - 'rotten': ['rotten', 'terton'], - 'rotter': ['retort', 'retrot', 'rotter'], - 'rottle': ['lotter', 'rottle', 'tolter'], - 'rotula': ['rotula', 'torula'], - 'rotulian': ['rotulian', 'uranotil'], - 'rotuliform': ['rotuliform', 'toruliform'], - 'rotulus': ['rotulus', 'torulus'], - 'rotund': ['rotund', 'untrod'], - 'rotunda': ['rotunda', 'tandour'], - 'rotundate': ['rotundate', 'unrotated'], - 'rotundifoliate': ['rotundifoliate', 'titanofluoride'], - 'rotundo': ['orotund', 'rotundo'], - 'roub': ['buro', 'roub'], - 'roud': ['dour', 'duro', 'ordu', 'roud'], - 'rouge': ['orgue', 'rogue', 'rouge'], - 'rougeot': ['outgoer', 'rougeot'], - 'roughen': ['enrough', 'roughen'], - 'roughie': ['higuero', 'roughie'], - 'rouky': ['rouky', 'yurok'], - 'roulade': ['roulade', 'urodela'], - 'rounce': ['conure', 'rounce', 'uncore'], - 'rounded': ['redound', 'rounded', 'underdo'], - 'roundel': ['durenol', 'lounder', 'roundel'], - 'rounder': ['rondure', 'rounder', 'unorder'], - 'roundhead': ['roundhead', 'unhoarded'], - 'roundseam': ['meandrous', 'roundseam'], - 'roundup': ['roundup', 'unproud'], - 'roup': ['pour', 'roup'], - 'rouper': ['pourer', 'repour', 'rouper'], - 'roupet': ['pouter', 'roupet', 'troupe'], - 'rousedness': ['rousedness', 'souredness'], - 'rouser': ['rouser', 'sourer'], - 'rousing': ['nigrous', 'rousing', 'souring'], - 'rousseau': ['eosaurus', 'rousseau'], - 'roust': ['roust', 'rusot', 'stour', 'sutor', 'torus'], - 'rouster': ['rouster', 'trouser'], - 'rousting': ['rousting', 'stouring'], - 'rout': ['rout', 'toru', 'tour'], - 'route': ['outer', 'outre', 'route'], - 'router': ['retour', 'router', 'tourer'], - 'routh': ['routh', 'throu'], - 'routhie': ['outhire', 'routhie'], - 'routine': ['routine', 'tueiron'], - 'routing': ['outgrin', 'outring', 'routing', 'touring'], - 'routinist': ['introitus', 'routinist'], - 'rove': ['over', 'rove'], - 'rovet': ['overt', 'rovet', 'torve', 'trove', 'voter'], - 'row': ['row', 'wro'], - 'rowdily': ['rowdily', 'wordily'], - 'rowdiness': ['rowdiness', 'wordiness'], - 'rowdy': ['dowry', 'rowdy', 'wordy'], - 'rowed': ['dower', 'rowed'], - 'rowel': ['lower', 'owler', 'rowel'], - 'rowelhead': ['rowelhead', 'wheelroad'], - 'rowen': ['owner', 'reown', 'rowen'], - 'rower': ['rerow', 'rower'], - 'rowet': ['rowet', 'tower', 'wrote'], - 'rowing': ['ingrow', 'rowing'], - 'rowlet': ['rowlet', 'trowel', 'wolter'], - 'rowley': ['lowery', 'owlery', 'rowley', 'yowler'], - 'roxy': ['oryx', 'roxy'], - 'roy': ['ory', 'roy', 'yor'], - 'royalist': ['royalist', 'solitary'], - 'royet': ['royet', 'toyer'], - 'royt': ['royt', 'ryot', 'tory', 'troy', 'tyro'], - 'rua': ['aru', 'rua', 'ura'], - 'ruana': ['anura', 'ruana'], - 'rub': ['bur', 'rub'], - 'rubasse': ['rubasse', 'surbase'], - 'rubato': ['outbar', 'rubato', 'tabour'], - 'rubbed': ['dubber', 'rubbed'], - 'rubble': ['burble', 'lubber', 'rubble'], - 'rubbler': ['burbler', 'rubbler'], - 'rubbly': ['burbly', 'rubbly'], - 'rube': ['bure', 'reub', 'rube'], - 'rubella': ['rubella', 'rulable'], - 'rubescent': ['rubescent', 'subcenter'], - 'rubiate': ['abiuret', 'aubrite', 'biurate', 'rubiate'], - 'rubiator': ['rubiator', 'torrubia'], - 'rubican': ['brucina', 'rubican'], - 'rubied': ['burdie', 'buried', 'rubied'], - 'rubification': ['rubification', 'urbification'], - 'rubify': ['rubify', 'urbify'], - 'rubine': ['burnie', 'rubine'], - 'ruble': ['bluer', 'brule', 'burel', 'ruble'], - 'rubor': ['burro', 'robur', 'rubor'], - 'rubrical': ['bicrural', 'rubrical'], - 'ruby': ['bury', 'ruby'], - 'ructation': ['anticourt', 'curtation', 'ructation'], - 'ruction': ['courtin', 'ruction'], - 'rud': ['rud', 'urd'], - 'rudas': ['rudas', 'sudra'], - 'ruddle': ['dudler', 'ruddle'], - 'rude': ['duer', 'dure', 'rude', 'urde'], - 'rudish': ['hurdis', 'rudish'], - 'rudista': ['dasturi', 'rudista'], - 'rudity': ['durity', 'rudity'], - 'rue': ['rue', 'ure'], - 'ruen': ['renu', 'ruen', 'rune'], - 'ruffed': ['duffer', 'ruffed'], - 'rufter': ['returf', 'rufter'], - 'rug': ['gur', 'rug'], - 'ruga': ['gaur', 'guar', 'ruga'], - 'rugate': ['argute', 'guetar', 'rugate', 'tuareg'], - 'rugged': ['grudge', 'rugged'], - 'ruggle': ['gurgle', 'lugger', 'ruggle'], - 'rugose': ['grouse', 'rugose'], - 'ruinate': ['ruinate', 'taurine', 'uranite', 'urinate'], - 'ruination': ['ruination', 'urination'], - 'ruinator': ['ruinator', 'urinator'], - 'ruined': ['diurne', 'inured', 'ruined', 'unride'], - 'ruing': ['irgun', 'ruing', 'unrig'], - 'ruinous': ['ruinous', 'urinous'], - 'ruinousness': ['ruinousness', 'urinousness'], - 'rulable': ['rubella', 'rulable'], - 'rule': ['lure', 'rule'], - 'ruledom': ['remould', 'ruledom'], - 'ruler': ['lurer', 'ruler'], - 'ruling': ['ruling', 'urling'], - 'rulingly': ['luringly', 'rulingly'], - 'rum': ['mru', 'rum'], - 'rumal': ['mural', 'rumal'], - 'ruman': ['muran', 'ruman', 'unarm', 'unram', 'urman'], - 'rumble': ['lumber', 'rumble', 'umbrel'], - 'rumelian': ['lemurian', 'malurine', 'rumelian'], - 'rumex': ['murex', 'rumex'], - 'ruminant': ['nutramin', 'ruminant'], - 'ruminator': ['antirumor', 'ruminator'], - 'rumly': ['murly', 'rumly'], - 'rumple': ['lumper', 'plumer', 'replum', 'rumple'], - 'run': ['run', 'urn'], - 'runback': ['backrun', 'runback'], - 'runby': ['burny', 'runby'], - 'runch': ['churn', 'runch'], - 'runcinate': ['encurtain', 'runcinate', 'uncertain'], - 'rundale': ['launder', 'rundale'], - 'rundi': ['rundi', 'unrid'], - 'rundlet': ['rundlet', 'trundle'], - 'rune': ['renu', 'ruen', 'rune'], - 'runed': ['runed', 'under', 'unred'], - 'runer': ['rerun', 'runer'], - 'runfish': ['furnish', 'runfish'], - 'rung': ['grun', 'rung'], - 'runic': ['curin', 'incur', 'runic'], - 'runically': ['runically', 'unlyrical'], - 'runite': ['runite', 'triune', 'uniter', 'untire'], - 'runkly': ['knurly', 'runkly'], - 'runlet': ['runlet', 'turnel'], - 'runnet': ['runnet', 'tunner', 'unrent'], - 'runout': ['outrun', 'runout'], - 'runover': ['overrun', 'runover'], - 'runt': ['runt', 'trun', 'turn'], - 'runted': ['runted', 'tunder', 'turned'], - 'runtee': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'], - 'runway': ['runway', 'unwary'], - 'rupa': ['prau', 'rupa'], - 'rupee': ['puree', 'rupee'], - 'rupestrian': ['rupestrian', 'supertrain'], - 'rupiah': ['hairup', 'rupiah'], - 'rural': ['rural', 'urlar'], - 'rus': ['rus', 'sur', 'urs'], - 'rusa': ['rusa', 'saur', 'sura', 'ursa', 'usar'], - 'ruscus': ['cursus', 'ruscus'], - 'ruse': ['ruse', 'suer', 'sure', 'user'], - 'rush': ['rhus', 'rush'], - 'rushen': ['reshun', 'rushen'], - 'rusine': ['insure', 'rusine', 'ursine'], - 'rusma': ['musar', 'ramus', 'rusma', 'surma'], - 'rusot': ['roust', 'rusot', 'stour', 'sutor', 'torus'], - 'russelia': ['russelia', 'siruelas'], - 'russet': ['russet', 'tusser'], - 'russify': ['fissury', 'russify'], - 'russine': ['russine', 'serinus', 'sunrise'], - 'rustable': ['baluster', 'rustable'], - 'rustic': ['citrus', 'curtis', 'rictus', 'rustic'], - 'rusticial': ['curialist', 'rusticial'], - 'rusticly': ['crustily', 'rusticly'], - 'rusticness': ['crustiness', 'rusticness'], - 'rustle': ['luster', 'result', 'rustle', 'sutler', 'ulster'], - 'rustling': ['lustring', 'rustling'], - 'rustly': ['rustly', 'sultry'], - 'rut': ['rut', 'tur'], - 'ruta': ['ruta', 'taur'], - 'rutch': ['cruth', 'rutch'], - 'rutelian': ['lutrinae', 'retinula', 'rutelian', 'tenurial'], - 'rutelinae': ['lineature', 'rutelinae'], - 'ruth': ['hurt', 'ruth'], - 'ruthenian': ['hunterian', 'ruthenian'], - 'ruther': ['hurter', 'ruther'], - 'ruthful': ['hurtful', 'ruthful'], - 'ruthfully': ['hurtfully', 'ruthfully'], - 'ruthfulness': ['hurtfulness', 'ruthfulness'], - 'ruthless': ['hurtless', 'ruthless'], - 'ruthlessly': ['hurtlessly', 'ruthlessly'], - 'ruthlessness': ['hurtlessness', 'ruthlessness'], - 'rutilant': ['rutilant', 'turntail'], - 'rutinose': ['rutinose', 'tursenoi'], - 'rutter': ['rutter', 'turret'], - 'rutyl': ['rutyl', 'truly'], - 'rutylene': ['neuterly', 'rutylene'], - 'ryal': ['aryl', 'lyra', 'ryal', 'yarl'], - 'ryder': ['derry', 'redry', 'ryder'], - 'rye': ['rye', 'yer'], - 'ryen': ['ryen', 'yern'], - 'ryot': ['royt', 'ryot', 'tory', 'troy', 'tyro'], - 'rype': ['prey', 'pyre', 'rype'], - 'rytina': ['rytina', 'trainy', 'tyrian'], - 'sa': ['as', 'sa'], - 'saa': ['asa', 'saa'], - 'saan': ['anas', 'ansa', 'saan'], - 'sab': ['bas', 'sab'], - 'saba': ['abas', 'saba'], - 'sabal': ['balas', 'balsa', 'basal', 'sabal'], - 'saban': ['nasab', 'saban'], - 'sabanut': ['sabanut', 'sabutan', 'tabanus'], - 'sabe': ['base', 'besa', 'sabe', 'seba'], - 'sabeca': ['casabe', 'sabeca'], - 'sabella': ['basella', 'sabella', 'salable'], - 'sabelli': ['sabelli', 'sebilla'], - 'sabellid': ['sabellid', 'slidable'], - 'saber': ['barse', 'besra', 'saber', 'serab'], - 'sabered': ['debaser', 'sabered'], - 'sabian': ['sabian', 'sabina'], - 'sabina': ['sabian', 'sabina'], - 'sabino': ['basion', 'bonsai', 'sabino'], - 'sabir': ['baris', 'sabir'], - 'sable': ['blase', 'sable'], - 'saboraim': ['ambrosia', 'saboraim'], - 'sabot': ['basto', 'boast', 'sabot'], - 'sabotine': ['obeisant', 'sabotine'], - 'sabromin': ['ambrosin', 'barosmin', 'sabromin'], - 'sabulite': ['sabulite', 'suitable'], - 'sabutan': ['sabanut', 'sabutan', 'tabanus'], - 'sacalait': ['castalia', 'sacalait'], - 'saccade': ['cascade', 'saccade'], - 'saccomyian': ['saccomyian', 'saccomyina'], - 'saccomyina': ['saccomyian', 'saccomyina'], - 'sacculoutricular': ['sacculoutricular', 'utriculosaccular'], - 'sacellum': ['camellus', 'sacellum'], - 'sachem': ['sachem', 'schema'], - 'sachet': ['chaste', 'sachet', 'scathe', 'scheat'], - 'sacian': ['ascian', 'sacian', 'scania', 'sicana'], - 'sack': ['cask', 'sack'], - 'sackbut': ['sackbut', 'subtack'], - 'sacken': ['sacken', 'skance'], - 'sacker': ['resack', 'sacker', 'screak'], - 'sacking': ['casking', 'sacking'], - 'sacklike': ['casklike', 'sacklike'], - 'sacque': ['casque', 'sacque'], - 'sacral': ['lascar', 'rascal', 'sacral', 'scalar'], - 'sacrification': ['sacrification', 'scarification'], - 'sacrificator': ['sacrificator', 'scarificator'], - 'sacripant': ['sacripant', 'spartanic'], - 'sacro': ['arcos', 'crosa', 'oscar', 'sacro'], - 'sacrodorsal': ['dorsosacral', 'sacrodorsal'], - 'sacroischiac': ['isosaccharic', 'sacroischiac'], - 'sacrolumbal': ['lumbosacral', 'sacrolumbal'], - 'sacrovertebral': ['sacrovertebral', 'vertebrosacral'], - 'sad': ['das', 'sad'], - 'sadden': ['desand', 'sadden', 'sanded'], - 'saddling': ['addlings', 'saddling'], - 'sadh': ['dash', 'sadh', 'shad'], - 'sadhe': ['deash', 'hades', 'sadhe', 'shade'], - 'sadic': ['asdic', 'sadic'], - 'sadie': ['aides', 'aside', 'sadie'], - 'sadiron': ['sadiron', 'sardoin'], - 'sado': ['dosa', 'sado', 'soda'], - 'sadr': ['sadr', 'sard'], - 'saeima': ['asemia', 'saeima'], - 'saernaite': ['arseniate', 'saernaite'], - 'saeter': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'saeume': ['amusee', 'saeume'], - 'safar': ['safar', 'saraf'], - 'safely': ['fayles', 'safely'], - 'saft': ['fast', 'saft'], - 'sag': ['gas', 'sag'], - 'sagai': ['sagai', 'saiga'], - 'sagene': ['sagene', 'senega'], - 'sagger': ['sagger', 'seggar'], - 'sagless': ['gasless', 'glasses', 'sagless'], - 'sago': ['sago', 'soga'], - 'sagoin': ['gosain', 'isagon', 'sagoin'], - 'sagra': ['argas', 'sagra'], - 'sah': ['ash', 'sah', 'sha'], - 'saharic': ['arachis', 'asiarch', 'saharic'], - 'sahh': ['hash', 'sahh', 'shah'], - 'sahidic': ['hasidic', 'sahidic'], - 'sahme': ['sahme', 'shame'], - 'saho': ['saho', 'shoa'], - 'sai': ['sai', 'sia'], - 'saic': ['acis', 'asci', 'saic'], - 'said': ['dais', 'dasi', 'disa', 'said', 'sida'], - 'saidi': ['saidi', 'saiid'], - 'saiga': ['sagai', 'saiga'], - 'saiid': ['saidi', 'saiid'], - 'sail': ['lasi', 'lias', 'lisa', 'sail', 'sial'], - 'sailable': ['isabella', 'sailable'], - 'sailage': ['algesia', 'sailage'], - 'sailed': ['aisled', 'deasil', 'ladies', 'sailed'], - 'sailer': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'], - 'sailing': ['aisling', 'sailing'], - 'sailoring': ['sailoring', 'signorial'], - 'sailsman': ['nasalism', 'sailsman'], - 'saily': ['islay', 'saily'], - 'saim': ['mias', 'saim', 'siam', 'sima'], - 'sain': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'], - 'sainfoin': ['sainfoin', 'sinfonia'], - 'saint': ['saint', 'satin', 'stain'], - 'saintdom': ['donatism', 'saintdom'], - 'sainted': ['destain', 'instead', 'sainted', 'satined'], - 'saintless': ['saintless', 'saltiness', 'slatiness', 'stainless'], - 'saintlike': ['kleistian', 'saintlike', 'satinlike'], - 'saintly': ['nastily', 'saintly', 'staynil'], - 'saintship': ['hispanist', 'saintship'], - 'saip': ['apis', 'pais', 'pasi', 'saip'], - 'saiph': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'], - 'sair': ['rais', 'sair', 'sari'], - 'saite': ['saite', 'taise'], - 'saithe': ['saithe', 'tashie', 'teaish'], - 'saitic': ['isatic', 'saitic'], - 'saivism': ['saivism', 'sivaism'], - 'sak': ['ask', 'sak'], - 'saka': ['asak', 'kasa', 'saka'], - 'sake': ['sake', 'seak'], - 'sakeen': ['sakeen', 'sekane'], - 'sakel': ['alkes', 'sakel', 'slake'], - 'saker': ['asker', 'reask', 'saker', 'sekar'], - 'sakeret': ['restake', 'sakeret'], - 'sakha': ['kasha', 'khasa', 'sakha', 'shaka'], - 'saki': ['saki', 'siak', 'sika'], - 'sal': ['las', 'sal', 'sla'], - 'salable': ['basella', 'sabella', 'salable'], - 'salably': ['basally', 'salably'], - 'salaceta': ['catalase', 'salaceta'], - 'salacot': ['coastal', 'salacot'], - 'salading': ['salading', 'salangid'], - 'salago': ['aglaos', 'salago'], - 'salamandarin': ['salamandarin', 'salamandrian', 'salamandrina'], - 'salamandrian': ['salamandarin', 'salamandrian', 'salamandrina'], - 'salamandrina': ['salamandarin', 'salamandrian', 'salamandrina'], - 'salangid': ['salading', 'salangid'], - 'salariat': ['alastair', 'salariat'], - 'salat': ['atlas', 'salat', 'salta'], - 'salay': ['asyla', 'salay', 'sayal'], - 'sale': ['elsa', 'sale', 'seal', 'slae'], - 'salele': ['salele', 'sallee'], - 'salep': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'saleratus': ['assaulter', 'reassault', 'saleratus'], - 'salian': ['anisal', 'nasial', 'salian', 'salina'], - 'salic': ['lacis', 'salic'], - 'salicin': ['incisal', 'salicin'], - 'salicylide': ['salicylide', 'scylliidae'], - 'salience': ['salience', 'secaline'], - 'salient': ['elastin', 'salient', 'saltine', 'slainte'], - 'salimeter': ['misrelate', 'salimeter'], - 'salimetry': ['mysterial', 'salimetry'], - 'salina': ['anisal', 'nasial', 'salian', 'salina'], - 'saline': ['alsine', 'neslia', 'saline', 'selina', 'silane'], - 'salinoterreous': ['salinoterreous', 'soliterraneous'], - 'salite': ['isleta', 'litsea', 'salite', 'stelai'], - 'salited': ['distale', 'salited'], - 'saliva': ['saliva', 'salvia'], - 'salivan': ['salivan', 'slavian'], - 'salivant': ['navalist', 'salivant'], - 'salivate': ['salivate', 'vestalia'], - 'salle': ['salle', 'sella'], - 'sallee': ['salele', 'sallee'], - 'sallet': ['sallet', 'stella', 'talles'], - 'sallow': ['sallow', 'swallo'], - 'salm': ['alms', 'salm', 'slam'], - 'salma': ['salma', 'samal'], - 'salmine': ['malines', 'salmine', 'selamin', 'seminal'], - 'salmis': ['missal', 'salmis'], - 'salmo': ['salmo', 'somal'], - 'salmonsite': ['assoilment', 'salmonsite'], - 'salome': ['melosa', 'salome', 'semola'], - 'salometer': ['elastomer', 'salometer'], - 'salon': ['salon', 'sloan', 'solan'], - 'saloon': ['alonso', 'alsoon', 'saloon'], - 'salp': ['salp', 'slap'], - 'salpa': ['palas', 'salpa'], - 'salpidae': ['palisade', 'salpidae'], - 'salpoid': ['psaloid', 'salpoid'], - 'salt': ['last', 'salt', 'slat'], - 'salta': ['atlas', 'salat', 'salta'], - 'saltary': ['astylar', 'saltary'], - 'saltation': ['saltation', 'stational'], - 'salted': ['desalt', 'salted'], - 'saltee': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'], - 'salter': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'saltern': ['saltern', 'starnel', 'sternal'], - 'saltery': ['saltery', 'stearyl'], - 'saltier': ['aletris', 'alister', 'listera', 'realist', 'saltier'], - 'saltine': ['elastin', 'salient', 'saltine', 'slainte'], - 'saltiness': ['saintless', 'saltiness', 'slatiness', 'stainless'], - 'salting': ['anglist', 'lasting', 'salting', 'slating', 'staling'], - 'saltish': ['saltish', 'slatish'], - 'saltly': ['lastly', 'saltly'], - 'saltness': ['lastness', 'saltness'], - 'saltometer': ['rattlesome', 'saltometer'], - 'saltus': ['saltus', 'tussal'], - 'saltwife': ['flatwise', 'saltwife'], - 'salty': ['lasty', 'salty', 'slaty'], - 'salung': ['lugnas', 'salung'], - 'salute': ['salute', 'setula'], - 'saluter': ['arustle', 'estrual', 'saluter', 'saulter'], - 'salva': ['salva', 'valsa', 'vasal'], - 'salve': ['salve', 'selva', 'slave', 'valse'], - 'salver': ['salver', 'serval', 'slaver', 'versal'], - 'salvia': ['saliva', 'salvia'], - 'salvy': ['salvy', 'sylva'], - 'sam': ['mas', 'sam', 'sma'], - 'samal': ['salma', 'samal'], - 'saman': ['manas', 'saman'], - 'samani': ['samani', 'samian'], - 'samaritan': ['samaritan', 'sarmatian'], - 'samas': ['amass', 'assam', 'massa', 'samas'], - 'sambal': ['balsam', 'sambal'], - 'sambo': ['ambos', 'sambo'], - 'same': ['asem', 'mesa', 'same', 'seam'], - 'samel': ['amsel', 'melas', 'mesal', 'samel'], - 'samely': ['measly', 'samely'], - 'samen': ['manes', 'manse', 'mensa', 'samen', 'senam'], - 'samh': ['mash', 'samh', 'sham'], - 'samian': ['samani', 'samian'], - 'samiel': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'], - 'samir': ['maris', 'marsi', 'samir', 'simar'], - 'samisen': ['samisen', 'samsien'], - 'samish': ['samish', 'sisham'], - 'samite': ['samite', 'semita', 'tamise', 'teaism'], - 'sammer': ['mamers', 'sammer'], - 'sammier': ['amerism', 'asimmer', 'sammier'], - 'samnani': ['ananism', 'samnani'], - 'samnite': ['atenism', 'inmeats', 'insteam', 'samnite'], - 'samoan': ['monasa', 'samoan'], - 'samothere': ['heartsome', 'samothere'], - 'samoyed': ['samoyed', 'someday'], - 'samphire': ['samphire', 'seraphim'], - 'sampi': ['apism', 'sampi'], - 'sampler': ['lampers', 'sampler'], - 'samsien': ['samisen', 'samsien'], - 'samskara': ['makassar', 'samskara'], - 'samucan': ['manacus', 'samucan'], - 'samuel': ['amelus', 'samuel'], - 'sanability': ['insatiably', 'sanability'], - 'sanai': ['asian', 'naias', 'sanai'], - 'sanand': ['sanand', 'sandan'], - 'sanche': ['encash', 'sanche'], - 'sanct': ['sanct', 'scant'], - 'sanction': ['canonist', 'sanction', 'sonantic'], - 'sanctioner': ['resanction', 'sanctioner'], - 'sanctity': ['sanctity', 'scantity'], - 'sandak': ['sandak', 'skanda'], - 'sandan': ['sanand', 'sandan'], - 'sandarac': ['carandas', 'sandarac'], - 'sandawe': ['sandawe', 'weasand'], - 'sanded': ['desand', 'sadden', 'sanded'], - 'sanderling': ['sanderling', 'slandering'], - 'sandflower': ['flandowser', 'sandflower'], - 'sandhi': ['danish', 'sandhi'], - 'sandra': ['nasard', 'sandra'], - 'sandworm': ['sandworm', 'swordman', 'wordsman'], - 'sane': ['anes', 'sane', 'sean'], - 'sanetch': ['chasten', 'sanetch'], - 'sang': ['sang', 'snag'], - 'sanga': ['gasan', 'sanga'], - 'sangar': ['argans', 'sangar'], - 'sangei': ['easing', 'sangei'], - 'sanger': ['angers', 'sanger', 'serang'], - 'sangrel': ['sangrel', 'snagrel'], - 'sanhita': ['ashanti', 'sanhita', 'shaitan', 'thasian'], - 'sanicle': ['celsian', 'escalin', 'sanicle', 'secalin'], - 'sanies': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'], - 'sanious': ['sanious', 'suasion'], - 'sanitate': ['astatine', 'sanitate'], - 'sanitize': ['sanitize', 'satinize'], - 'sanity': ['sanity', 'satiny'], - 'sank': ['kans', 'sank'], - 'sankha': ['kashan', 'sankha'], - 'sannup': ['pannus', 'sannup', 'unsnap', 'unspan'], - 'sanpoil': ['sanpoil', 'spaniol'], - 'sansei': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'], - 'sansi': ['sansi', 'sasin'], - 'sant': ['nast', 'sant', 'stan'], - 'santa': ['santa', 'satan'], - 'santal': ['aslant', 'lansat', 'natals', 'santal'], - 'santali': ['lanista', 'santali'], - 'santalin': ['annalist', 'santalin'], - 'santee': ['ensate', 'enseat', 'santee', 'sateen', 'senate'], - 'santiago': ['agonista', 'santiago'], - 'santimi': ['animist', 'santimi'], - 'santir': ['instar', 'santir', 'strain'], - 'santon': ['santon', 'sonant', 'stanno'], - 'santorinite': ['reinstation', 'santorinite'], - 'sap': ['asp', 'sap', 'spa'], - 'sapan': ['pasan', 'sapan'], - 'sapek': ['sapek', 'speak'], - 'saperda': ['aspread', 'saperda'], - 'saphena': ['aphanes', 'saphena'], - 'sapid': ['sapid', 'spaid'], - 'sapient': ['panties', 'sapient', 'spinate'], - 'sapiential': ['antilipase', 'sapiential'], - 'sapin': ['pisan', 'sapin', 'spina'], - 'sapinda': ['anapsid', 'sapinda'], - 'saple': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'sapling': ['lapsing', 'sapling'], - 'sapo': ['asop', 'sapo', 'soap'], - 'sapor': ['psora', 'sapor', 'sarpo'], - 'saporous': ['asporous', 'saporous'], - 'sapota': ['sapota', 'taposa'], - 'sapotilha': ['hapalotis', 'sapotilha'], - 'sapphire': ['papisher', 'sapphire'], - 'sapples': ['papless', 'sapples'], - 'sapremia': ['aspermia', 'sapremia'], - 'sapremic': ['aspermic', 'sapremic'], - 'saprine': ['persian', 'prasine', 'saprine'], - 'saprolite': ['posterial', 'saprolite'], - 'saprolitic': ['polaristic', 'poristical', 'saprolitic'], - 'sapropel': ['prolapse', 'sapropel'], - 'sapropelic': ['periscopal', 'sapropelic'], - 'saprophagous': ['prasophagous', 'saprophagous'], - 'sapwort': ['postwar', 'sapwort'], - 'sar': ['ras', 'sar'], - 'sara': ['rasa', 'sara'], - 'saraad': ['saraad', 'sarada'], - 'sarada': ['saraad', 'sarada'], - 'saraf': ['safar', 'saraf'], - 'sarah': ['asarh', 'raash', 'sarah'], - 'saran': ['ansar', 'saran', 'sarna'], - 'sarangi': ['giansar', 'sarangi'], - 'sarcenet': ['reascent', 'sarcenet'], - 'sarcine': ['arsenic', 'cerasin', 'sarcine'], - 'sarcitis': ['sarcitis', 'triassic'], - 'sarcle': ['sarcle', 'scaler', 'sclera'], - 'sarcoadenoma': ['adenosarcoma', 'sarcoadenoma'], - 'sarcocarcinoma': ['carcinosarcoma', 'sarcocarcinoma'], - 'sarcoid': ['sarcoid', 'scaroid'], - 'sarcoline': ['censorial', 'sarcoline'], - 'sarcolite': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'], - 'sarcoplast': ['postsacral', 'sarcoplast'], - 'sarcotic': ['acrostic', 'sarcotic', 'socratic'], - 'sard': ['sadr', 'sard'], - 'sardian': ['andrias', 'sardian', 'sarinda'], - 'sardine': ['andries', 'isander', 'sardine'], - 'sardoin': ['sadiron', 'sardoin'], - 'sardonic': ['draconis', 'sardonic'], - 'sare': ['arse', 'rase', 'sare', 'sear', 'sera'], - 'sargonide': ['grandiose', 'sargonide'], - 'sari': ['rais', 'sair', 'sari'], - 'sarif': ['farsi', 'sarif'], - 'sarigue': ['ergusia', 'gerusia', 'sarigue'], - 'sarinda': ['andrias', 'sardian', 'sarinda'], - 'sarip': ['paris', 'parsi', 'sarip'], - 'sark': ['askr', 'kras', 'sark'], - 'sarkine': ['kerasin', 'sarkine'], - 'sarkit': ['rastik', 'sarkit', 'straik'], - 'sarmatian': ['samaritan', 'sarmatian'], - 'sarment': ['sarment', 'smarten'], - 'sarmentous': ['sarmentous', 'tarsonemus'], - 'sarna': ['ansar', 'saran', 'sarna'], - 'sarod': ['sarod', 'sorda'], - 'saron': ['arson', 'saron', 'sonar'], - 'saronic': ['arsonic', 'saronic'], - 'sarpo': ['psora', 'sapor', 'sarpo'], - 'sarra': ['arras', 'sarra'], - 'sarsenet': ['assenter', 'reassent', 'sarsenet'], - 'sarsi': ['arsis', 'sarsi'], - 'sart': ['sart', 'star', 'stra', 'tars', 'tsar'], - 'sartain': ['artisan', 'astrain', 'sartain', 'tsarina'], - 'sartish': ['sartish', 'shastri'], - 'sartor': ['rostra', 'sartor'], - 'sasan': ['nassa', 'sasan'], - 'sasin': ['sansi', 'sasin'], - 'sasine': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'], - 'sat': ['ast', 'sat'], - 'satan': ['santa', 'satan'], - 'satanical': ['castalian', 'satanical'], - 'satanism': ['mantissa', 'satanism'], - 'sate': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'], - 'sateen': ['ensate', 'enseat', 'santee', 'sateen', 'senate'], - 'sateless': ['sateless', 'seatless'], - 'satelles': ['satelles', 'tessella'], - 'satellite': ['satellite', 'telestial'], - 'satiable': ['bisaltae', 'satiable'], - 'satiate': ['isatate', 'satiate', 'taetsia'], - 'satieno': ['aeonist', 'asiento', 'satieno'], - 'satient': ['atenist', 'instate', 'satient', 'steatin'], - 'satin': ['saint', 'satin', 'stain'], - 'satine': ['satine', 'tisane'], - 'satined': ['destain', 'instead', 'sainted', 'satined'], - 'satinette': ['enstatite', 'intestate', 'satinette'], - 'satinite': ['satinite', 'sittinae'], - 'satinize': ['sanitize', 'satinize'], - 'satinlike': ['kleistian', 'saintlike', 'satinlike'], - 'satiny': ['sanity', 'satiny'], - 'satire': ['satire', 'striae'], - 'satirical': ['racialist', 'satirical'], - 'satirist': ['satirist', 'tarsitis'], - 'satrae': ['astare', 'satrae'], - 'satrapic': ['aspartic', 'satrapic'], - 'satron': ['asnort', 'satron'], - 'sattle': ['latest', 'sattle', 'taslet'], - 'sattva': ['sattva', 'tavast'], - 'saturable': ['balaustre', 'saturable'], - 'saturation': ['saturation', 'titanosaur'], - 'saturator': ['saturator', 'tartarous'], - 'saturn': ['saturn', 'unstar'], - 'saturnale': ['alaternus', 'saturnale'], - 'saturnalia': ['australian', 'saturnalia'], - 'saturnia': ['asturian', 'austrian', 'saturnia'], - 'saturnine': ['neustrian', 'saturnine', 'sturninae'], - 'saturnism': ['saturnism', 'surmisant'], - 'satyr': ['satyr', 'stary', 'stray', 'trasy'], - 'satyrlike': ['satyrlike', 'streakily'], - 'sauce': ['cause', 'sauce'], - 'sauceless': ['causeless', 'sauceless'], - 'sauceline': ['sauceline', 'seleucian'], - 'saucer': ['causer', 'saucer'], - 'sauger': ['sauger', 'usager'], - 'saugh': ['agush', 'saugh'], - 'saul': ['saul', 'sula'], - 'sauld': ['aldus', 'sauld'], - 'sault': ['latus', 'sault', 'talus'], - 'saulter': ['arustle', 'estrual', 'saluter', 'saulter'], - 'saum': ['masu', 'musa', 'saum'], - 'sauna': ['nasua', 'sauna'], - 'saur': ['rusa', 'saur', 'sura', 'ursa', 'usar'], - 'saura': ['arusa', 'saura', 'usara'], - 'saurian': ['saurian', 'suriana'], - 'saury': ['saury', 'surya'], - 'sausage': ['assuage', 'sausage'], - 'saut': ['saut', 'tasu', 'utas'], - 'sauve': ['sauve', 'suave'], - 'save': ['aves', 'save', 'vase'], - 'savin': ['savin', 'sivan'], - 'saviour': ['saviour', 'various'], - 'savor': ['savor', 'sorva'], - 'savored': ['oversad', 'savored'], - 'saw': ['saw', 'swa', 'was'], - 'sawah': ['awash', 'sawah'], - 'sawali': ['aswail', 'sawali'], - 'sawback': ['backsaw', 'sawback'], - 'sawbuck': ['bucksaw', 'sawbuck'], - 'sawer': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'], - 'sawing': ['aswing', 'sawing'], - 'sawish': ['sawish', 'siwash'], - 'sawn': ['sawn', 'snaw', 'swan'], - 'sawt': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'], - 'sawyer': ['sawyer', 'swayer'], - 'saxe': ['axes', 'saxe', 'seax'], - 'saxten': ['saxten', 'sextan'], - 'say': ['say', 'yas'], - 'sayal': ['asyla', 'salay', 'sayal'], - 'sayer': ['reasy', 'resay', 'sayer', 'seary'], - 'sayid': ['daisy', 'sayid'], - 'scabbler': ['scabbler', 'scrabble'], - 'scabies': ['abscise', 'scabies'], - 'scaddle': ['scaddle', 'scalded'], - 'scaean': ['anaces', 'scaean'], - 'scala': ['calas', 'casal', 'scala'], - 'scalar': ['lascar', 'rascal', 'sacral', 'scalar'], - 'scalded': ['scaddle', 'scalded'], - 'scale': ['alces', 'casel', 'scale'], - 'scalena': ['escalan', 'scalena'], - 'scalene': ['cleanse', 'scalene'], - 'scaler': ['sarcle', 'scaler', 'sclera'], - 'scallola': ['callosal', 'scallola'], - 'scalloper': ['procellas', 'scalloper'], - 'scaloni': ['nicolas', 'scaloni'], - 'scalp': ['clasp', 'scalp'], - 'scalper': ['clasper', 'reclasp', 'scalper'], - 'scalping': ['clasping', 'scalping'], - 'scalpture': ['prescutal', 'scalpture'], - 'scaly': ['aclys', 'scaly'], - 'scambler': ['scambler', 'scramble'], - 'scampish': ['scampish', 'scaphism'], - 'scania': ['ascian', 'sacian', 'scania', 'sicana'], - 'scant': ['sanct', 'scant'], - 'scantity': ['sanctity', 'scantity'], - 'scantle': ['asclent', 'scantle'], - 'scape': ['capes', 'scape', 'space'], - 'scapeless': ['scapeless', 'spaceless'], - 'scapha': ['pascha', 'scapha'], - 'scaphander': ['handscrape', 'scaphander'], - 'scaphism': ['scampish', 'scaphism'], - 'scaphite': ['paschite', 'pastiche', 'pistache', 'scaphite'], - 'scaphopod': ['podoscaph', 'scaphopod'], - 'scapoid': ['psoadic', 'scapoid', 'sciapod'], - 'scapolite': ['alopecist', 'altiscope', 'epicostal', 'scapolite'], - 'scappler': ['scappler', 'scrapple'], - 'scapula': ['capsula', 'pascual', 'scapula'], - 'scapular': ['capsular', 'scapular'], - 'scapulated': ['capsulated', 'scapulated'], - 'scapulectomy': ['capsulectomy', 'scapulectomy'], - 'scarab': ['barsac', 'scarab'], - 'scarcement': ['marcescent', 'scarcement'], - 'scare': ['carse', 'caser', 'ceras', 'scare', 'scrae'], - 'scarification': ['sacrification', 'scarification'], - 'scarificator': ['sacrificator', 'scarificator'], - 'scarily': ['scarily', 'scraily'], - 'scarlet': ['scarlet', 'sclater'], - 'scarn': ['scarn', 'scran'], - 'scaroid': ['sarcoid', 'scaroid'], - 'scarp': ['craps', 'scarp', 'scrap'], - 'scarping': ['scarping', 'scraping'], - 'scart': ['scart', 'scrat'], - 'scarth': ['scarth', 'scrath', 'starch'], - 'scary': ['ascry', 'scary', 'scray'], - 'scase': ['casse', 'scase'], - 'scat': ['acts', 'cast', 'scat'], - 'scathe': ['chaste', 'sachet', 'scathe', 'scheat'], - 'scatterer': ['scatterer', 'streetcar'], - 'scaturient': ['incrustate', 'scaturient', 'scrutinate'], - 'scaum': ['camus', 'musca', 'scaum', 'sumac'], - 'scaur': ['cursa', 'scaur'], - 'scaut': ['scaut', 'scuta'], - 'scavel': ['calves', 'scavel'], - 'scawl': ['scawl', 'sclaw'], - 'sceat': ['caste', 'sceat'], - 'scene': ['cense', 'scene', 'sence'], - 'scenery': ['scenery', 'screeny'], - 'scented': ['descent', 'scented'], - 'scepter': ['respect', 'scepter', 'specter'], - 'sceptered': ['sceptered', 'spectered'], - 'scepterless': ['respectless', 'scepterless'], - 'sceptral': ['sceptral', 'scraplet', 'spectral'], - 'sceptry': ['precyst', 'sceptry', 'spectry'], - 'scerne': ['censer', 'scerne', 'screen', 'secern'], - 'schalmei': ['camelish', 'schalmei'], - 'scheat': ['chaste', 'sachet', 'scathe', 'scheat'], - 'schema': ['sachem', 'schema'], - 'schematic': ['catechism', 'schematic'], - 'scheme': ['scheme', 'smeech'], - 'schemer': ['chermes', 'schemer'], - 'scho': ['cosh', 'scho'], - 'scholae': ['oscheal', 'scholae'], - 'schone': ['cheson', 'chosen', 'schone'], - 'schooltime': ['chilostome', 'schooltime'], - 'schout': ['schout', 'scouth'], - 'schute': ['schute', 'tusche'], - 'sciaenoid': ['oniscidae', 'oscinidae', 'sciaenoid'], - 'scian': ['canis', 'scian'], - 'sciapod': ['psoadic', 'scapoid', 'sciapod'], - 'sciara': ['carisa', 'sciara'], - 'sciarid': ['cidaris', 'sciarid'], - 'sciatic': ['ascitic', 'sciatic'], - 'sciatical': ['ascitical', 'sciatical'], - 'scient': ['encist', 'incest', 'insect', 'scient'], - 'sciential': ['elasticin', 'inelastic', 'sciential'], - 'scillitan': ['scillitan', 'scintilla'], - 'scintilla': ['scillitan', 'scintilla'], - 'scintle': ['lentisc', 'scintle', 'stencil'], - 'scion': ['oscin', 'scion', 'sonic'], - 'sciot': ['ostic', 'sciot', 'stoic'], - 'sciotherical': ['ischiorectal', 'sciotherical'], - 'scious': ['scious', 'socius'], - 'scirenga': ['creasing', 'scirenga'], - 'scirpus': ['prussic', 'scirpus'], - 'scissortail': ['scissortail', 'solaristics'], - 'sciurine': ['incisure', 'sciurine'], - 'sciuroid': ['dioscuri', 'sciuroid'], - 'sclate': ['castle', 'sclate'], - 'sclater': ['scarlet', 'sclater'], - 'sclaw': ['scawl', 'sclaw'], - 'sclera': ['sarcle', 'scaler', 'sclera'], - 'sclere': ['sclere', 'screel'], - 'scleria': ['scleria', 'sercial'], - 'sclerite': ['sclerite', 'silcrete'], - 'sclerodermite': ['dermosclerite', 'sclerodermite'], - 'scleromata': ['clamatores', 'scleromata'], - 'sclerose': ['coreless', 'sclerose'], - 'sclerospora': ['prolacrosse', 'sclerospora'], - 'sclerote': ['corselet', 'sclerote', 'selector'], - 'sclerotia': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'], - 'sclerotial': ['cloisteral', 'sclerotial'], - 'sclerotinia': ['intersocial', 'orleanistic', 'sclerotinia'], - 'sclerotium': ['closterium', 'sclerotium'], - 'sclerotomy': ['mycosterol', 'sclerotomy'], - 'scoad': ['cados', 'scoad'], - 'scob': ['bosc', 'scob'], - 'scobicular': ['scobicular', 'scrobicula'], - 'scolia': ['colias', 'scolia', 'social'], - 'scolion': ['scolion', 'solonic'], - 'scombrine': ['becrimson', 'scombrine'], - 'scone': ['cones', 'scone'], - 'scooper': ['coprose', 'scooper'], - 'scoot': ['coost', 'scoot'], - 'scopa': ['posca', 'scopa'], - 'scoparin': ['parsonic', 'scoparin'], - 'scope': ['copse', 'pecos', 'scope'], - 'scopidae': ['diascope', 'psocidae', 'scopidae'], - 'scopine': ['psocine', 'scopine'], - 'scopiped': ['podiceps', 'scopiped'], - 'scopoline': ['niloscope', 'scopoline'], - 'scorbutical': ['scorbutical', 'subcortical'], - 'scorbutically': ['scorbutically', 'subcortically'], - 'score': ['corse', 'score'], - 'scorer': ['scorer', 'sorcer'], - 'scoriae': ['coraise', 'scoriae'], - 'scorpidae': ['carpiodes', 'scorpidae'], - 'scorpiones': ['procession', 'scorpiones'], - 'scorpionic': ['orniscopic', 'scorpionic'], - 'scorse': ['cessor', 'crosse', 'scorse'], - 'scortation': ['cartoonist', 'scortation'], - 'scot': ['cost', 'scot'], - 'scotale': ['alecost', 'lactose', 'scotale', 'talcose'], - 'scote': ['coset', 'estoc', 'scote'], - 'scoter': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'], - 'scotia': ['isotac', 'scotia'], - 'scotism': ['cosmist', 'scotism'], - 'scotomatic': ['osmotactic', 'scotomatic'], - 'scotty': ['cytost', 'scotty'], - 'scoup': ['copus', 'scoup'], - 'scour': ['cours', 'scour'], - 'scoured': ['coursed', 'scoured'], - 'scourer': ['courser', 'scourer'], - 'scourge': ['scourge', 'scrouge'], - 'scourger': ['scourger', 'scrouger'], - 'scouring': ['coursing', 'scouring'], - 'scouth': ['schout', 'scouth'], - 'scrabble': ['scabbler', 'scrabble'], - 'scrabe': ['braces', 'scrabe'], - 'scrae': ['carse', 'caser', 'ceras', 'scare', 'scrae'], - 'scraily': ['scarily', 'scraily'], - 'scramble': ['scambler', 'scramble'], - 'scran': ['scarn', 'scran'], - 'scrap': ['craps', 'scarp', 'scrap'], - 'scrape': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'], - 'scrapie': ['epacris', 'scrapie', 'serapic'], - 'scraping': ['scarping', 'scraping'], - 'scraplet': ['sceptral', 'scraplet', 'spectral'], - 'scrapple': ['scappler', 'scrapple'], - 'scrat': ['scart', 'scrat'], - 'scratcher': ['rescratch', 'scratcher'], - 'scrath': ['scarth', 'scrath', 'starch'], - 'scray': ['ascry', 'scary', 'scray'], - 'screak': ['resack', 'sacker', 'screak'], - 'screaming': ['germanics', 'screaming'], - 'screamy': ['armscye', 'screamy'], - 'scree': ['scree', 'secre'], - 'screel': ['sclere', 'screel'], - 'screen': ['censer', 'scerne', 'screen', 'secern'], - 'screenless': ['censerless', 'screenless'], - 'screeny': ['scenery', 'screeny'], - 'screet': ['resect', 'screet', 'secret'], - 'screwdrive': ['drivescrew', 'screwdrive'], - 'scrieve': ['cerevis', 'scrieve', 'service'], - 'scrike': ['scrike', 'sicker'], - 'scrip': ['crisp', 'scrip'], - 'scripee': ['precise', 'scripee'], - 'scripula': ['scripula', 'spicular'], - 'scrobicula': ['scobicular', 'scrobicula'], - 'scrota': ['arctos', 'castor', 'costar', 'scrota'], - 'scrouge': ['scourge', 'scrouge'], - 'scrouger': ['scourger', 'scrouger'], - 'scrout': ['scrout', 'scruto'], - 'scroyle': ['cryosel', 'scroyle'], - 'scruf': ['scruf', 'scurf'], - 'scruffle': ['scruffle', 'scuffler'], - 'scruple': ['scruple', 'sculper'], - 'scrutate': ['crustate', 'scrutate'], - 'scrutation': ['crustation', 'scrutation'], - 'scrutinant': ['incrustant', 'scrutinant'], - 'scrutinate': ['incrustate', 'scaturient', 'scrutinate'], - 'scruto': ['scrout', 'scruto'], - 'scudi': ['scudi', 'sudic'], - 'scuffler': ['scruffle', 'scuffler'], - 'sculper': ['scruple', 'sculper'], - 'sculpin': ['insculp', 'sculpin'], - 'scup': ['cusp', 'scup'], - 'scur': ['crus', 'scur'], - 'scurf': ['scruf', 'scurf'], - 'scusation': ['cosustain', 'scusation'], - 'scuta': ['scaut', 'scuta'], - 'scutal': ['scutal', 'suclat'], - 'scute': ['cetus', 'scute'], - 'scutifer': ['fusteric', 'scutifer'], - 'scutigeral': ['gesticular', 'scutigeral'], - 'scutula': ['auscult', 'scutula'], - 'scye': ['scye', 'syce'], - 'scylliidae': ['salicylide', 'scylliidae'], - 'scyllium': ['clumsily', 'scyllium'], - 'scyphi': ['physic', 'scyphi'], - 'scyphomancy': ['psychomancy', 'scyphomancy'], - 'scyt': ['cyst', 'scyt'], - 'scythe': ['chesty', 'scythe'], - 'scytitis': ['cystitis', 'scytitis'], - 'se': ['es', 'se'], - 'sea': ['aes', 'ase', 'sea'], - 'seadog': ['dosage', 'seadog'], - 'seagirt': ['seagirt', 'strigae'], - 'seah': ['seah', 'shea'], - 'seak': ['sake', 'seak'], - 'seal': ['elsa', 'sale', 'seal', 'slae'], - 'sealable': ['leasable', 'sealable'], - 'sealch': ['cashel', 'laches', 'sealch'], - 'sealer': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'], - 'sealet': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'], - 'sealing': ['leasing', 'sealing'], - 'sealwort': ['restowal', 'sealwort'], - 'seam': ['asem', 'mesa', 'same', 'seam'], - 'seamanite': ['anamesite', 'seamanite'], - 'seamark': ['kamares', 'seamark'], - 'seamer': ['reseam', 'seamer'], - 'seamlet': ['maltese', 'seamlet'], - 'seamlike': ['mesalike', 'seamlike'], - 'seamrend': ['redesman', 'seamrend'], - 'seamster': ['masseter', 'seamster'], - 'seamus': ['assume', 'seamus'], - 'sean': ['anes', 'sane', 'sean'], - 'seance': ['encase', 'seance', 'seneca'], - 'seaplane': ['seaplane', 'spelaean'], - 'seaport': ['esparto', 'petrosa', 'seaport'], - 'sear': ['arse', 'rase', 'sare', 'sear', 'sera'], - 'searce': ['cesare', 'crease', 'recase', 'searce'], - 'searcer': ['creaser', 'searcer'], - 'search': ['arches', 'chaser', 'eschar', 'recash', 'search'], - 'searcher': ['rechaser', 'research', 'searcher'], - 'searchment': ['manchester', 'searchment'], - 'searcloth': ['clathrose', 'searcloth'], - 'seared': ['erased', 'reseda', 'seared'], - 'searer': ['eraser', 'searer'], - 'searing': ['searing', 'seringa'], - 'seary': ['reasy', 'resay', 'sayer', 'seary'], - 'seaside': ['disease', 'seaside'], - 'seat': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'], - 'seated': ['seated', 'sedate'], - 'seater': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'seating': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'seatless': ['sateless', 'seatless'], - 'seatrain': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'], - 'seatron': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'], - 'seave': ['eaves', 'evase', 'seave'], - 'seax': ['axes', 'saxe', 'seax'], - 'seba': ['base', 'besa', 'sabe', 'seba'], - 'sebastian': ['bassanite', 'sebastian'], - 'sebilla': ['sabelli', 'sebilla'], - 'sebum': ['embus', 'sebum'], - 'secalin': ['celsian', 'escalin', 'sanicle', 'secalin'], - 'secaline': ['salience', 'secaline'], - 'secant': ['ascent', 'secant', 'stance'], - 'secern': ['censer', 'scerne', 'screen', 'secern'], - 'secernent': ['secernent', 'sentencer'], - 'secondar': ['endosarc', 'secondar'], - 'secos': ['cosse', 'secos'], - 'secpar': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'], - 'secre': ['scree', 'secre'], - 'secret': ['resect', 'screet', 'secret'], - 'secretarian': ['ascertainer', 'reascertain', 'secretarian'], - 'secretion': ['resection', 'secretion'], - 'secretional': ['resectional', 'secretional'], - 'sect': ['cest', 'sect'], - 'sectarian': ['ascertain', 'cartesian', 'cartisane', 'sectarian'], - 'sectarianism': ['cartesianism', 'sectarianism'], - 'section': ['contise', 'noetics', 'section'], - 'sectism': ['sectism', 'smectis'], - 'sector': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'], - 'sectorial': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'], - 'sectroid': ['decorist', 'sectroid'], - 'securable': ['rescuable', 'securable'], - 'securance': ['recusance', 'securance'], - 'secure': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'], - 'securer': ['recurse', 'rescuer', 'securer'], - 'sedan': ['sedan', 'snead'], - 'sedanier': ['arsedine', 'arsenide', 'sedanier', 'siderean'], - 'sedat': ['sedat', 'stade', 'stead'], - 'sedate': ['seated', 'sedate'], - 'sedation': ['astonied', 'sedation'], - 'sederunt': ['sederunt', 'underset', 'undesert', 'unrested'], - 'sedile': ['diesel', 'sedile', 'seidel'], - 'sedimetric': ['sedimetric', 'semidirect'], - 'sedimetrical': ['decimestrial', 'sedimetrical'], - 'sedition': ['desition', 'sedition'], - 'sedulity': ['dysluite', 'sedulity'], - 'sedum': ['mused', 'sedum'], - 'seedbird': ['birdseed', 'seedbird'], - 'seeded': ['deseed', 'seeded'], - 'seeder': ['reseed', 'seeder'], - 'seedlip': ['pelides', 'seedlip'], - 'seeing': ['seeing', 'signee'], - 'seek': ['kees', 'seek', 'skee'], - 'seeker': ['reseek', 'seeker'], - 'seel': ['else', 'lees', 'seel', 'sele', 'slee'], - 'seem': ['mese', 'seem', 'seme', 'smee'], - 'seemer': ['emerse', 'seemer'], - 'seen': ['ense', 'esne', 'nese', 'seen', 'snee'], - 'seenu': ['ensue', 'seenu', 'unsee'], - 'seer': ['erse', 'rees', 'seer', 'sere'], - 'seerband': ['seerband', 'serabend'], - 'seerhand': ['denshare', 'seerhand'], - 'seerhood': ['rhodeose', 'seerhood'], - 'seership': ['hesperis', 'seership'], - 'seething': ['seething', 'sheeting'], - 'seg': ['ges', 'seg'], - 'seggar': ['sagger', 'seggar'], - 'seggard': ['daggers', 'seggard'], - 'sego': ['goes', 'sego'], - 'segolate': ['gelatose', 'segolate'], - 'segreant': ['estrange', 'segreant', 'sergeant', 'sternage'], - 'seid': ['desi', 'ides', 'seid', 'side'], - 'seidel': ['diesel', 'sedile', 'seidel'], - 'seignioral': ['seignioral', 'seignorial'], - 'seignoral': ['gasoliner', 'seignoral'], - 'seignorial': ['seignioral', 'seignorial'], - 'seine': ['insee', 'seine'], - 'seiner': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'], - 'seise': ['essie', 'seise'], - 'seism': ['seism', 'semis'], - 'seismal': ['aimless', 'melissa', 'seismal'], - 'seismotic': ['seismotic', 'societism'], - 'seit': ['seit', 'site'], - 'seizable': ['seizable', 'sizeable'], - 'seizer': ['resize', 'seizer'], - 'sekane': ['sakeen', 'sekane'], - 'sekani': ['kinase', 'sekani'], - 'sekar': ['asker', 'reask', 'saker', 'sekar'], - 'seker': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'], - 'selagite': ['elegiast', 'selagite'], - 'selah': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'], - 'selamin': ['malines', 'salmine', 'selamin', 'seminal'], - 'selbergite': ['gilbertese', 'selbergite'], - 'seldor': ['dorsel', 'seldor', 'solder'], - 'seldseen': ['needless', 'seldseen'], - 'sele': ['else', 'lees', 'seel', 'sele', 'slee'], - 'selector': ['corselet', 'sclerote', 'selector'], - 'selenic': ['license', 'selenic', 'silence'], - 'selenion': ['leonines', 'selenion'], - 'selenitic': ['insectile', 'selenitic'], - 'selenium': ['selenium', 'semilune', 'seminule'], - 'selenosis': ['noiseless', 'selenosis'], - 'seleucian': ['sauceline', 'seleucian'], - 'self': ['fels', 'self'], - 'selfsame': ['fameless', 'selfsame'], - 'selfsameness': ['famelessness', 'selfsameness'], - 'selictar': ['altrices', 'selictar'], - 'selina': ['alsine', 'neslia', 'saline', 'selina', 'silane'], - 'selion': ['insole', 'leonis', 'lesion', 'selion'], - 'seljukian': ['januslike', 'seljukian'], - 'sella': ['salle', 'sella'], - 'sellably': ['sellably', 'syllable'], - 'sellate': ['estella', 'sellate'], - 'seller': ['resell', 'seller'], - 'selli': ['lisle', 'selli'], - 'sellie': ['leslie', 'sellie'], - 'sellout': ['outsell', 'sellout'], - 'selt': ['lest', 'selt'], - 'selter': ['lester', 'selter', 'streel'], - 'selung': ['gunsel', 'selung', 'slunge'], - 'selva': ['salve', 'selva', 'slave', 'valse'], - 'semang': ['magnes', 'semang'], - 'semantic': ['amnestic', 'semantic'], - 'semaphore': ['mesohepar', 'semaphore'], - 'sematic': ['cameist', 'etacism', 'sematic'], - 'sematrope': ['perosmate', 'sematrope'], - 'seme': ['mese', 'seem', 'seme', 'smee'], - 'semen': ['mense', 'mesne', 'semen'], - 'semeostoma': ['semeostoma', 'semostomae'], - 'semi': ['mise', 'semi', 'sime'], - 'semiarch': ['semiarch', 'smachrie'], - 'semibald': ['bedismal', 'semibald'], - 'semiball': ['mislabel', 'semiball'], - 'semic': ['mesic', 'semic'], - 'semicircle': ['semicircle', 'semicleric'], - 'semicleric': ['semicircle', 'semicleric'], - 'semicone': ['nicesome', 'semicone'], - 'semicoronet': ['oncosimeter', 'semicoronet'], - 'semicrome': ['mesomeric', 'microseme', 'semicrome'], - 'semidirect': ['sedimetric', 'semidirect'], - 'semidormant': ['memorandist', 'moderantism', 'semidormant'], - 'semihard': ['dreamish', 'semihard'], - 'semihiant': ['histamine', 'semihiant'], - 'semilimber': ['immersible', 'semilimber'], - 'semilunar': ['semilunar', 'unrealism'], - 'semilune': ['selenium', 'semilune', 'seminule'], - 'semiminor': ['immersion', 'semiminor'], - 'semimoron': ['monroeism', 'semimoron'], - 'seminal': ['malines', 'salmine', 'selamin', 'seminal'], - 'seminar': ['remains', 'seminar'], - 'seminasal': ['messalian', 'seminasal'], - 'seminomadic': ['demoniacism', 'seminomadic'], - 'seminomata': ['mastomenia', 'seminomata'], - 'seminule': ['selenium', 'semilune', 'seminule'], - 'semiopal': ['malpoise', 'semiopal'], - 'semiorb': ['boreism', 'semiorb'], - 'semiovaloid': ['semiovaloid', 'semiovoidal'], - 'semiovoidal': ['semiovaloid', 'semiovoidal'], - 'semipolar': ['perisomal', 'semipolar'], - 'semipro': ['imposer', 'promise', 'semipro'], - 'semipronation': ['impersonation', 'prosemination', 'semipronation'], - 'semiquote': ['quietsome', 'semiquote'], - 'semirotund': ['semirotund', 'unmortised'], - 'semis': ['seism', 'semis'], - 'semispan': ['menaspis', 'semispan'], - 'semisteel': ['messelite', 'semisteel', 'teleseism'], - 'semistill': ['limitless', 'semistill'], - 'semistriated': ['disastimeter', 'semistriated'], - 'semita': ['samite', 'semita', 'tamise', 'teaism'], - 'semitae': ['amesite', 'mesitae', 'semitae'], - 'semitour': ['moisture', 'semitour'], - 'semiurban': ['semiurban', 'submarine'], - 'semiurn': ['neurism', 'semiurn'], - 'semivector': ['semivector', 'viscometer'], - 'semnae': ['enseam', 'semnae'], - 'semola': ['melosa', 'salome', 'semola'], - 'semolella': ['lamellose', 'semolella'], - 'semolina': ['laminose', 'lemonias', 'semolina'], - 'semological': ['mesological', 'semological'], - 'semology': ['mesology', 'semology'], - 'semostomae': ['semeostoma', 'semostomae'], - 'sempiternous': ['sempiternous', 'supermoisten'], - 'semuncia': ['muscinae', 'semuncia'], - 'semuncial': ['masculine', 'semuncial', 'simulance'], - 'sen': ['ens', 'sen'], - 'senaite': ['etesian', 'senaite'], - 'senam': ['manes', 'manse', 'mensa', 'samen', 'senam'], - 'senarius': ['anuresis', 'senarius'], - 'senate': ['ensate', 'enseat', 'santee', 'sateen', 'senate'], - 'senator': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'], - 'senatorian': ['arsenation', 'senatorian', 'sonneratia'], - 'senatrices': ['resistance', 'senatrices'], - 'sence': ['cense', 'scene', 'sence'], - 'senci': ['senci', 'since'], - 'send': ['send', 'sned'], - 'sender': ['resend', 'sender'], - 'seneca': ['encase', 'seance', 'seneca'], - 'senega': ['sagene', 'senega'], - 'senesce': ['essence', 'senesce'], - 'senile': ['enisle', 'ensile', 'senile', 'silene'], - 'senilism': ['liminess', 'senilism'], - 'senior': ['rosine', 'senior', 'soneri'], - 'senlac': ['lances', 'senlac'], - 'senna': ['nanes', 'senna'], - 'sennit': ['innest', 'sennit', 'sinnet', 'tennis'], - 'sennite': ['intense', 'sennite'], - 'senocular': ['larcenous', 'senocular'], - 'senones': ['oneness', 'senones'], - 'sensable': ['ableness', 'blaeness', 'sensable'], - 'sensatorial': ['assertional', 'sensatorial'], - 'sensical': ['laciness', 'sensical'], - 'sensilia': ['sensilia', 'silesian'], - 'sensilla': ['nailless', 'sensilla'], - 'sension': ['neossin', 'sension'], - 'sensuism': ['sensuism', 'senusism'], - 'sent': ['nest', 'sent', 'sten'], - 'sentencer': ['secernent', 'sentencer'], - 'sentition': ['sentition', 'tenonitis'], - 'senusism': ['sensuism', 'senusism'], - 'sepad': ['depas', 'sepad', 'spade'], - 'sepal': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'sepaled': ['delapse', 'sepaled'], - 'sepaloid': ['episodal', 'lapidose', 'sepaloid'], - 'separable': ['separable', 'spareable'], - 'separate': ['asperate', 'separate'], - 'separation': ['anisoptera', 'asperation', 'separation'], - 'sephardi': ['diphaser', 'parished', 'raphides', 'sephardi'], - 'sephen': ['sephen', 'sphene'], - 'sepian': ['sepian', 'spinae'], - 'sepic': ['sepic', 'spice'], - 'sepion': ['espino', 'sepion'], - 'sepoy': ['poesy', 'posey', 'sepoy'], - 'seps': ['pess', 'seps'], - 'sepsis': ['sepsis', 'speiss'], - 'sept': ['pest', 'sept', 'spet', 'step'], - 'septa': ['paste', 'septa', 'spate'], - 'septal': ['pastel', 'septal', 'staple'], - 'septane': ['penates', 'septane'], - 'septarium': ['impasture', 'septarium'], - 'septenar': ['entrepas', 'septenar'], - 'septennium': ['pennisetum', 'septennium'], - 'septentrio': ['septentrio', 'tripestone'], - 'septerium': ['misrepute', 'septerium'], - 'septi': ['septi', 'spite', 'stipe'], - 'septicemia': ['episematic', 'septicemia'], - 'septicidal': ['pesticidal', 'septicidal'], - 'septicopyemia': ['pyosepticemia', 'septicopyemia'], - 'septicopyemic': ['pyosepticemic', 'septicopyemic'], - 'septier': ['respite', 'septier'], - 'septiferous': ['pestiferous', 'septiferous'], - 'septile': ['epistle', 'septile'], - 'septimal': ['petalism', 'septimal'], - 'septocosta': ['septocosta', 'statoscope'], - 'septoic': ['poetics', 'septoic'], - 'septonasal': ['nasoseptal', 'septonasal'], - 'septoria': ['isoptera', 'septoria'], - 'septum': ['septum', 'upstem'], - 'septuor': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'], - 'sequential': ['latinesque', 'sequential'], - 'sequin': ['quinse', 'sequin'], - 'ser': ['ers', 'ser'], - 'sera': ['arse', 'rase', 'sare', 'sear', 'sera'], - 'serab': ['barse', 'besra', 'saber', 'serab'], - 'serabend': ['seerband', 'serabend'], - 'seraglio': ['girasole', 'seraglio'], - 'serai': ['aries', 'arise', 'raise', 'serai'], - 'serail': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'], - 'seral': ['arles', 'arsle', 'laser', 'seral', 'slare'], - 'serang': ['angers', 'sanger', 'serang'], - 'serape': ['parsee', 'persae', 'persea', 'serape'], - 'seraph': ['phrase', 'seraph', 'shaper', 'sherpa'], - 'seraphic': ['parchesi', 'seraphic'], - 'seraphim': ['samphire', 'seraphim'], - 'seraphina': ['pharisean', 'seraphina'], - 'seraphine': ['hesperian', 'phrenesia', 'seraphine'], - 'seraphism': ['misphrase', 'seraphism'], - 'serapic': ['epacris', 'scrapie', 'serapic'], - 'serapis': ['paresis', 'serapis'], - 'serapist': ['piratess', 'serapist', 'tarsipes'], - 'serau': ['serau', 'urase'], - 'seraw': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'], - 'sercial': ['scleria', 'sercial'], - 'sere': ['erse', 'rees', 'seer', 'sere'], - 'serean': ['serean', 'serena'], - 'sereh': ['herse', 'sereh', 'sheer', 'shree'], - 'serena': ['serean', 'serena'], - 'serenata': ['arsenate', 'serenata'], - 'serene': ['resene', 'serene'], - 'serenoa': ['arenose', 'serenoa'], - 'serge': ['reges', 'serge'], - 'sergeant': ['estrange', 'segreant', 'sergeant', 'sternage'], - 'sergei': ['sergei', 'sieger'], - 'serger': ['gerres', 'serger'], - 'serging': ['serging', 'snigger'], - 'sergiu': ['guiser', 'sergiu'], - 'seri': ['reis', 'rise', 'seri', 'sier', 'sire'], - 'serial': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'], - 'serialist': ['eristalis', 'serialist'], - 'serian': ['arisen', 'arsine', 'resina', 'serian'], - 'sericate': ['ecrasite', 'sericate'], - 'sericated': ['discreate', 'sericated'], - 'sericin': ['irenics', 'resinic', 'sericin', 'sirenic'], - 'serific': ['friesic', 'serific'], - 'serin': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'], - 'serine': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'], - 'serinette': ['retistene', 'serinette'], - 'seringa': ['searing', 'seringa'], - 'seringal': ['resignal', 'seringal', 'signaler'], - 'serinus': ['russine', 'serinus', 'sunrise'], - 'serio': ['osier', 'serio'], - 'seriola': ['rosalie', 'seriola'], - 'serioludicrous': ['ludicroserious', 'serioludicrous'], - 'sermo': ['meros', 'mores', 'morse', 'sermo', 'smore'], - 'sermonist': ['monitress', 'sermonist'], - 'sero': ['eros', 'rose', 'sero', 'sore'], - 'serofibrous': ['fibroserous', 'serofibrous'], - 'serolin': ['resinol', 'serolin'], - 'seromucous': ['mucoserous', 'seromucous'], - 'seron': ['norse', 'noser', 'seron', 'snore'], - 'seroon': ['nooser', 'seroon', 'sooner'], - 'seroot': ['seroot', 'sooter', 'torose'], - 'serotina': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'], - 'serotinal': ['lairstone', 'orleanist', 'serotinal'], - 'serotine': ['serotine', 'torinese'], - 'serous': ['serous', 'souser'], - 'serow': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'], - 'serpari': ['aspirer', 'praiser', 'serpari'], - 'serpent': ['penster', 'present', 'serpent', 'strepen'], - 'serpentian': ['serpentian', 'serpentina'], - 'serpentid': ['president', 'serpentid'], - 'serpentina': ['serpentian', 'serpentina'], - 'serpentinous': ['serpentinous', 'supertension'], - 'serpently': ['presently', 'serpently'], - 'serpiginous': ['serpiginous', 'spinigerous'], - 'serpolet': ['proteles', 'serpolet'], - 'serpula': ['perusal', 'serpula'], - 'serpulae': ['pleasure', 'serpulae'], - 'serpulan': ['purslane', 'serpulan', 'supernal'], - 'serpulidae': ['serpulidae', 'superideal'], - 'serpuline': ['serpuline', 'superline'], - 'serra': ['ersar', 'raser', 'serra'], - 'serrage': ['argeers', 'greaser', 'serrage'], - 'serran': ['serran', 'snarer'], - 'serrano': ['serrano', 'sornare'], - 'serratic': ['crateris', 'serratic'], - 'serratodentate': ['dentatoserrate', 'serratodentate'], - 'serrature': ['serrature', 'treasurer'], - 'serried': ['derries', 'desirer', 'resider', 'serried'], - 'serriped': ['presider', 'serriped'], - 'sert': ['rest', 'sert', 'stre'], - 'serta': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'], - 'sertum': ['muster', 'sertum', 'stumer'], - 'serum': ['muser', 'remus', 'serum'], - 'serut': ['serut', 'strue', 'turse', 'uster'], - 'servable': ['beslaver', 'servable', 'versable'], - 'servage': ['gervase', 'greaves', 'servage'], - 'serval': ['salver', 'serval', 'slaver', 'versal'], - 'servant': ['servant', 'versant'], - 'servation': ['overstain', 'servation', 'versation'], - 'serve': ['serve', 'sever', 'verse'], - 'server': ['revers', 'server', 'verser'], - 'servet': ['revest', 'servet', 'sterve', 'verset', 'vester'], - 'servetian': ['invertase', 'servetian'], - 'servian': ['servian', 'vansire'], - 'service': ['cerevis', 'scrieve', 'service'], - 'serviceable': ['receivables', 'serviceable'], - 'servient': ['reinvest', 'servient'], - 'serviential': ['inversatile', 'serviential'], - 'servilize': ['servilize', 'silverize'], - 'servite': ['restive', 'servite'], - 'servitor': ['overstir', 'servitor'], - 'servitude': ['detrusive', 'divesture', 'servitude'], - 'servo': ['servo', 'verso'], - 'sesma': ['masse', 'sesma'], - 'sestertium': ['sestertium', 'trusteeism'], - 'sestet': ['sestet', 'testes', 'tsetse'], - 'sestiad': ['disseat', 'sestiad'], - 'sestian': ['entasis', 'sestian', 'sestina'], - 'sestina': ['entasis', 'sestian', 'sestina'], - 'sestole': ['osselet', 'sestole', 'toeless'], - 'sestuor': ['estrous', 'oestrus', 'sestuor', 'tussore'], - 'sesuto': ['sesuto', 'setous'], - 'seta': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'], - 'setae': ['setae', 'tease'], - 'setal': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'setaria': ['asarite', 'asteria', 'atresia', 'setaria'], - 'setback': ['backset', 'setback'], - 'setdown': ['downset', 'setdown'], - 'seth': ['esth', 'hest', 'seth'], - 'sethead': ['headset', 'sethead'], - 'sethian': ['sethian', 'sthenia'], - 'sethic': ['ethics', 'sethic'], - 'setibo': ['setibo', 'sobeit'], - 'setirostral': ['latirostres', 'setirostral'], - 'setline': ['leisten', 'setline', 'tensile'], - 'setoff': ['offset', 'setoff'], - 'seton': ['onset', 'seton', 'steno', 'stone'], - 'setous': ['sesuto', 'setous'], - 'setout': ['outset', 'setout'], - 'setover': ['overset', 'setover'], - 'sett': ['sett', 'stet', 'test'], - 'settable': ['settable', 'testable'], - 'settaine': ['anisette', 'atestine', 'settaine'], - 'settee': ['settee', 'testee'], - 'setter': ['retest', 'setter', 'street', 'tester'], - 'setting': ['setting', 'testing'], - 'settler': ['settler', 'sterlet', 'trestle'], - 'settlor': ['settlor', 'slotter'], - 'setula': ['salute', 'setula'], - 'setup': ['setup', 'stupe', 'upset'], - 'setwall': ['setwall', 'swallet'], - 'seven': ['evens', 'seven'], - 'sevener': ['sevener', 'veneres'], - 'sever': ['serve', 'sever', 'verse'], - 'severer': ['reserve', 'resever', 'reverse', 'severer'], - 'sew': ['sew', 'wes'], - 'sewed': ['sewed', 'swede'], - 'sewer': ['resew', 'sewer', 'sweer'], - 'sewered': ['sewered', 'sweered'], - 'sewing': ['sewing', 'swinge'], - 'sewn': ['news', 'sewn', 'snew'], - 'sewround': ['sewround', 'undersow'], - 'sexed': ['desex', 'sexed'], - 'sextan': ['saxten', 'sextan'], - 'sextipartition': ['extirpationist', 'sextipartition'], - 'sextodecimo': ['decimosexto', 'sextodecimo'], - 'sextry': ['sextry', 'xyster'], - 'sexuale': ['esexual', 'sexuale'], - 'sey': ['sey', 'sye', 'yes'], - 'seymour': ['mousery', 'seymour'], - 'sfoot': ['foots', 'sfoot', 'stoof'], - 'sgad': ['dags', 'sgad'], - 'sha': ['ash', 'sah', 'sha'], - 'shab': ['bash', 'shab'], - 'shabbily': ['babishly', 'shabbily'], - 'shabbiness': ['babishness', 'shabbiness'], - 'shabunder': ['husbander', 'shabunder'], - 'shad': ['dash', 'sadh', 'shad'], - 'shade': ['deash', 'hades', 'sadhe', 'shade'], - 'shaded': ['dashed', 'shaded'], - 'shader': ['dasher', 'shader', 'sheard'], - 'shadily': ['ladyish', 'shadily'], - 'shading': ['dashing', 'shading'], - 'shadkan': ['dashnak', 'shadkan'], - 'shady': ['dashy', 'shady'], - 'shafting': ['shafting', 'tangfish'], - 'shag': ['gash', 'shag'], - 'shagrag': ['ragshag', 'shagrag'], - 'shah': ['hash', 'sahh', 'shah'], - 'shahi': ['shahi', 'shiah'], - 'shaitan': ['ashanti', 'sanhita', 'shaitan', 'thasian'], - 'shaivism': ['shaivism', 'shivaism'], - 'shaka': ['kasha', 'khasa', 'sakha', 'shaka'], - 'shakeout': ['outshake', 'shakeout'], - 'shaker': ['kasher', 'shaker'], - 'shakil': ['lakish', 'shakil'], - 'shaku': ['kusha', 'shaku', 'ushak'], - 'shaky': ['hasky', 'shaky'], - 'shale': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'], - 'shalt': ['shalt', 'slath'], - 'sham': ['mash', 'samh', 'sham'], - 'shama': ['hamsa', 'masha', 'shama'], - 'shamable': ['baalshem', 'shamable'], - 'shamal': ['mashal', 'shamal'], - 'shaman': ['ashman', 'shaman'], - 'shamba': ['ambash', 'shamba'], - 'shambrier': ['herbarism', 'shambrier'], - 'shambu': ['ambush', 'shambu'], - 'shame': ['sahme', 'shame'], - 'shamer': ['masher', 'ramesh', 'shamer'], - 'shamir': ['marish', 'shamir'], - 'shammish': ['mishmash', 'shammish'], - 'shan': ['hans', 'nash', 'shan'], - 'shane': ['ashen', 'hanse', 'shane', 'shean'], - 'shang': ['gnash', 'shang'], - 'shant': ['shant', 'snath'], - 'shap': ['hasp', 'pash', 'psha', 'shap'], - 'shape': ['heaps', 'pesah', 'phase', 'shape'], - 'shapeless': ['phaseless', 'shapeless'], - 'shaper': ['phrase', 'seraph', 'shaper', 'sherpa'], - 'shapometer': ['atmosphere', 'shapometer'], - 'shapy': ['physa', 'shapy'], - 'shardana': ['darshana', 'shardana'], - 'share': ['asher', 'share', 'shear'], - 'shareman': ['shareman', 'shearman'], - 'sharer': ['rasher', 'sharer'], - 'sharesman': ['sharesman', 'shearsman'], - 'shargar': ['shargar', 'sharrag'], - 'shari': ['ashir', 'shari'], - 'sharon': ['rhason', 'sharon', 'shoran'], - 'sharp': ['sharp', 'shrap'], - 'sharpener': ['resharpen', 'sharpener'], - 'sharper': ['phraser', 'sharper'], - 'sharpy': ['phrasy', 'sharpy'], - 'sharrag': ['shargar', 'sharrag'], - 'shasta': ['shasta', 'tassah'], - 'shaster': ['hatress', 'shaster'], - 'shastraik': ['katharsis', 'shastraik'], - 'shastri': ['sartish', 'shastri'], - 'shat': ['shat', 'tash'], - 'shatter': ['rathest', 'shatter'], - 'shatterer': ['ratherest', 'shatterer'], - 'shattering': ['shattering', 'straighten'], - 'shauri': ['shauri', 'surahi'], - 'shave': ['shave', 'sheva'], - 'shavee': ['shavee', 'sheave'], - 'shaver': ['havers', 'shaver', 'shrave'], - 'shavery': ['shavery', 'shravey'], - 'shaw': ['shaw', 'wash'], - 'shawano': ['shawano', 'washoan'], - 'shawl': ['shawl', 'walsh'], - 'shawy': ['shawy', 'washy'], - 'shay': ['ashy', 'shay'], - 'shea': ['seah', 'shea'], - 'sheal': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'], - 'shean': ['ashen', 'hanse', 'shane', 'shean'], - 'shear': ['asher', 'share', 'shear'], - 'shearbill': ['shearbill', 'shillaber'], - 'sheard': ['dasher', 'shader', 'sheard'], - 'shearer': ['reshare', 'reshear', 'shearer'], - 'shearman': ['shareman', 'shearman'], - 'shearsman': ['sharesman', 'shearsman'], - 'sheat': ['ashet', 'haste', 'sheat'], - 'sheave': ['shavee', 'sheave'], - 'shebeen': ['benshee', 'shebeen'], - 'shechem': ['meshech', 'shechem'], - 'sheder': ['hersed', 'sheder'], - 'sheely': ['sheely', 'sheyle'], - 'sheer': ['herse', 'sereh', 'sheer', 'shree'], - 'sheering': ['greenish', 'sheering'], - 'sheet': ['sheet', 'these'], - 'sheeter': ['sheeter', 'therese'], - 'sheeting': ['seething', 'sheeting'], - 'sheila': ['elisha', 'hailse', 'sheila'], - 'shela': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'], - 'shelf': ['flesh', 'shelf'], - 'shelfful': ['fleshful', 'shelfful'], - 'shelflist': ['filthless', 'shelflist'], - 'shelfy': ['fleshy', 'shelfy'], - 'shelta': ['haslet', 'lesath', 'shelta'], - 'shelty': ['shelty', 'thysel'], - 'shelve': ['shelve', 'shevel'], - 'shemitic': ['ethicism', 'shemitic'], - 'shen': ['nesh', 'shen'], - 'sheol': ['hosel', 'sheol', 'shole'], - 'sher': ['hers', 'resh', 'sher'], - 'sherani': ['arshine', 'nearish', 'rhesian', 'sherani'], - 'sheratan': ['hanaster', 'sheratan'], - 'sheriat': ['atheris', 'sheriat'], - 'sherif': ['fisher', 'sherif'], - 'sherifate': ['fisheater', 'sherifate'], - 'sherify': ['fishery', 'sherify'], - 'sheriyat': ['hysteria', 'sheriyat'], - 'sherpa': ['phrase', 'seraph', 'shaper', 'sherpa'], - 'sherri': ['hersir', 'sherri'], - 'sheugh': ['hughes', 'sheugh'], - 'sheva': ['shave', 'sheva'], - 'shevel': ['shelve', 'shevel'], - 'shevri': ['shevri', 'shiver', 'shrive'], - 'shewa': ['hawse', 'shewa', 'whase'], - 'sheyle': ['sheely', 'sheyle'], - 'shi': ['his', 'hsi', 'shi'], - 'shiah': ['shahi', 'shiah'], - 'shibar': ['barish', 'shibar'], - 'shice': ['echis', 'shice'], - 'shicer': ['riches', 'shicer'], - 'shide': ['shide', 'shied', 'sidhe'], - 'shied': ['shide', 'shied', 'sidhe'], - 'shiel': ['liesh', 'shiel'], - 'shieldable': ['deshabille', 'shieldable'], - 'shier': ['hirse', 'shier', 'shire'], - 'shiest': ['shiest', 'thesis'], - 'shifter': ['reshift', 'shifter'], - 'shih': ['hish', 'shih'], - 'shiite': ['histie', 'shiite'], - 'shik': ['kish', 'shik', 'sikh'], - 'shikar': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'], - 'shikara': ['shikara', 'sikhara'], - 'shikari': ['rikisha', 'shikari'], - 'shikra': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'], - 'shillaber': ['shearbill', 'shillaber'], - 'shimal': ['lamish', 'shimal'], - 'shimmery': ['misrhyme', 'shimmery'], - 'shin': ['hisn', 'shin', 'sinh'], - 'shina': ['naish', 'shina'], - 'shine': ['eshin', 'shine'], - 'shiner': ['renish', 'shiner', 'shrine'], - 'shingle': ['english', 'shingle'], - 'shinto': ['histon', 'shinto', 'tonish'], - 'shinty': ['shinty', 'snithy'], - 'ship': ['pish', 'ship'], - 'shipboy': ['boyship', 'shipboy'], - 'shipkeeper': ['keepership', 'shipkeeper'], - 'shiplap': ['lappish', 'shiplap'], - 'shipman': ['manship', 'shipman'], - 'shipmaster': ['mastership', 'shipmaster'], - 'shipmate': ['aphetism', 'mateship', 'shipmate', 'spithame'], - 'shipowner': ['ownership', 'shipowner'], - 'shippage': ['pageship', 'shippage'], - 'shipper': ['preship', 'shipper'], - 'shippo': ['popish', 'shippo'], - 'shipward': ['shipward', 'wardship'], - 'shipwork': ['shipwork', 'workship'], - 'shipworm': ['shipworm', 'wormship'], - 'shire': ['hirse', 'shier', 'shire'], - 'shirker': ['shirker', 'skirreh'], - 'shirley': ['relishy', 'shirley'], - 'shirty': ['shirty', 'thyris'], - 'shirvan': ['shirvan', 'varnish'], - 'shita': ['shita', 'thais'], - 'shivaism': ['shaivism', 'shivaism'], - 'shive': ['hives', 'shive'], - 'shiver': ['shevri', 'shiver', 'shrive'], - 'shlu': ['lush', 'shlu', 'shul'], - 'sho': ['sho', 'soh'], - 'shoa': ['saho', 'shoa'], - 'shoal': ['shoal', 'shola'], - 'shoat': ['hoast', 'hosta', 'shoat'], - 'shockable': ['shockable', 'shoeblack'], - 'shode': ['hosed', 'shode'], - 'shoder': ['dehors', 'rhodes', 'shoder', 'shored'], - 'shoe': ['hose', 'shoe'], - 'shoeblack': ['shockable', 'shoeblack'], - 'shoebrush': ['shoebrush', 'shorebush'], - 'shoeless': ['hoseless', 'shoeless'], - 'shoeman': ['hoseman', 'shoeman'], - 'shoer': ['horse', 'shoer', 'shore'], - 'shog': ['gosh', 'shog'], - 'shoji': ['joshi', 'shoji'], - 'shola': ['shoal', 'shola'], - 'shole': ['hosel', 'sheol', 'shole'], - 'shoo': ['shoo', 'soho'], - 'shoot': ['shoot', 'sooth', 'sotho', 'toosh'], - 'shooter': ['orthose', 'reshoot', 'shooter', 'soother'], - 'shooting': ['shooting', 'soothing'], - 'shop': ['phos', 'posh', 'shop', 'soph'], - 'shopbook': ['bookshop', 'shopbook'], - 'shopmaid': ['phasmoid', 'shopmaid'], - 'shopper': ['hoppers', 'shopper'], - 'shopwork': ['shopwork', 'workshop'], - 'shoran': ['rhason', 'sharon', 'shoran'], - 'shore': ['horse', 'shoer', 'shore'], - 'shorea': ['ahorse', 'ashore', 'hoarse', 'shorea'], - 'shorebush': ['shoebrush', 'shorebush'], - 'shored': ['dehors', 'rhodes', 'shoder', 'shored'], - 'shoreless': ['horseless', 'shoreless'], - 'shoreman': ['horseman', 'rhamnose', 'shoreman'], - 'shorer': ['horser', 'shorer'], - 'shoreward': ['drawhorse', 'shoreward'], - 'shoreweed': ['horseweed', 'shoreweed'], - 'shoring': ['horsing', 'shoring'], - 'short': ['horst', 'short'], - 'shortage': ['hostager', 'shortage'], - 'shorten': ['shorten', 'threnos'], - 'shot': ['host', 'shot', 'thos', 'tosh'], - 'shote': ['ethos', 'shote', 'those'], - 'shotgun': ['gunshot', 'shotgun', 'uhtsong'], - 'shotless': ['hostless', 'shotless'], - 'shotstar': ['shotstar', 'starshot'], - 'shou': ['huso', 'shou'], - 'shoulderer': ['reshoulder', 'shoulderer'], - 'shout': ['shout', 'south'], - 'shouter': ['shouter', 'souther'], - 'shouting': ['shouting', 'southing'], - 'shover': ['shover', 'shrove'], - 'showerer': ['reshower', 'showerer'], - 'shrab': ['brash', 'shrab'], - 'shram': ['marsh', 'shram'], - 'shrap': ['sharp', 'shrap'], - 'shrave': ['havers', 'shaver', 'shrave'], - 'shravey': ['shavery', 'shravey'], - 'shree': ['herse', 'sereh', 'sheer', 'shree'], - 'shrewly': ['shrewly', 'welshry'], - 'shriek': ['shriek', 'shrike'], - 'shrieval': ['lavisher', 'shrieval'], - 'shrike': ['shriek', 'shrike'], - 'shrine': ['renish', 'shiner', 'shrine'], - 'shrite': ['shrite', 'theirs'], - 'shrive': ['shevri', 'shiver', 'shrive'], - 'shriven': ['nervish', 'shriven'], - 'shroudy': ['hydrous', 'shroudy'], - 'shrove': ['shover', 'shrove'], - 'shrub': ['brush', 'shrub'], - 'shrubbery': ['berrybush', 'shrubbery'], - 'shrubland': ['brushland', 'shrubland'], - 'shrubless': ['brushless', 'shrubless'], - 'shrublet': ['brushlet', 'shrublet'], - 'shrublike': ['brushlike', 'shrublike'], - 'shrubwood': ['brushwood', 'shrubwood'], - 'shrug': ['grush', 'shrug'], - 'shu': ['shu', 'ush'], - 'shuba': ['shuba', 'subah'], - 'shug': ['gush', 'shug', 'sugh'], - 'shul': ['lush', 'shlu', 'shul'], - 'shulamite': ['hamulites', 'shulamite'], - 'shuler': ['lusher', 'shuler'], - 'shunless': ['lushness', 'shunless'], - 'shunter': ['reshunt', 'shunter'], - 'shure': ['shure', 'usher'], - 'shurf': ['frush', 'shurf'], - 'shut': ['shut', 'thus', 'tush'], - 'shutness': ['shutness', 'thusness'], - 'shutout': ['outshut', 'shutout'], - 'shuttering': ['hurtingest', 'shuttering'], - 'shyam': ['mashy', 'shyam'], - 'si': ['is', 'si'], - 'sia': ['sai', 'sia'], - 'siak': ['saki', 'siak', 'sika'], - 'sial': ['lasi', 'lias', 'lisa', 'sail', 'sial'], - 'sialagogic': ['isagogical', 'sialagogic'], - 'sialic': ['sialic', 'silica'], - 'sialid': ['asilid', 'sialid'], - 'sialidae': ['asilidae', 'sialidae'], - 'siam': ['mias', 'saim', 'siam', 'sima'], - 'siamese': ['misease', 'siamese'], - 'sib': ['bis', 'sib'], - 'sibyl': ['sibyl', 'sybil'], - 'sibylla': ['sibylla', 'syllabi'], - 'sicana': ['ascian', 'sacian', 'scania', 'sicana'], - 'sicani': ['anisic', 'sicani', 'sinaic'], - 'sicarius': ['acrisius', 'sicarius'], - 'siccate': ['ascetic', 'castice', 'siccate'], - 'siccation': ['cocainist', 'siccation'], - 'sice': ['cise', 'sice'], - 'sicel': ['sicel', 'slice'], - 'sicilian': ['anisilic', 'sicilian'], - 'sickbed': ['bedsick', 'sickbed'], - 'sicker': ['scrike', 'sicker'], - 'sickerly': ['sickerly', 'slickery'], - 'sickle': ['sickle', 'skelic'], - 'sickler': ['sickler', 'slicker'], - 'sicklied': ['disclike', 'sicklied'], - 'sickling': ['sickling', 'slicking'], - 'sicula': ['caulis', 'clusia', 'sicula'], - 'siculian': ['luscinia', 'siculian'], - 'sid': ['dis', 'sid'], - 'sida': ['dais', 'dasi', 'disa', 'said', 'sida'], - 'sidalcea': ['diaclase', 'sidalcea'], - 'side': ['desi', 'ides', 'seid', 'side'], - 'sidearm': ['misread', 'sidearm'], - 'sideboard': ['broadside', 'sideboard'], - 'sideburns': ['burnsides', 'sideburns'], - 'sidecar': ['diceras', 'radices', 'sidecar'], - 'sidehill': ['hillside', 'sidehill'], - 'siderean': ['arsedine', 'arsenide', 'sedanier', 'siderean'], - 'siderin': ['insider', 'siderin'], - 'sideronatrite': ['endoarteritis', 'sideronatrite'], - 'siderous': ['desirous', 'siderous'], - 'sidership': ['sidership', 'spiderish'], - 'sidesway': ['sidesway', 'sideways'], - 'sidetrack': ['sidetrack', 'trackside'], - 'sidewalk': ['sidewalk', 'walkside'], - 'sideway': ['sideway', 'wayside'], - 'sideways': ['sidesway', 'sideways'], - 'sidhe': ['shide', 'shied', 'sidhe'], - 'sidle': ['sidle', 'slide'], - 'sidler': ['sidler', 'slider'], - 'sidling': ['sidling', 'sliding'], - 'sidlingly': ['sidlingly', 'slidingly'], - 'sieger': ['sergei', 'sieger'], - 'siena': ['anise', 'insea', 'siena', 'sinae'], - 'sienna': ['insane', 'sienna'], - 'sier': ['reis', 'rise', 'seri', 'sier', 'sire'], - 'sierra': ['raiser', 'sierra'], - 'siesta': ['siesta', 'tassie'], - 'siever': ['revise', 'siever'], - 'sife': ['feis', 'fise', 'sife'], - 'sift': ['fist', 'sift'], - 'sifted': ['fisted', 'sifted'], - 'sifter': ['fister', 'resift', 'sifter', 'strife'], - 'sifting': ['fisting', 'sifting'], - 'sigh': ['gish', 'sigh'], - 'sigher': ['resigh', 'sigher'], - 'sighted': ['desight', 'sighted'], - 'sightlily': ['sightlily', 'slightily'], - 'sightliness': ['sightliness', 'slightiness'], - 'sightly': ['sightly', 'slighty'], - 'sigillated': ['distillage', 'sigillated'], - 'sigla': ['gisla', 'ligas', 'sigla'], - 'sigmatism': ['astigmism', 'sigmatism'], - 'sigmoidal': ['dialogism', 'sigmoidal'], - 'sign': ['sign', 'sing', 'snig'], - 'signable': ['signable', 'singable'], - 'signalee': ['ensilage', 'genesial', 'signalee'], - 'signaler': ['resignal', 'seringal', 'signaler'], - 'signalese': ['agileness', 'signalese'], - 'signally': ['signally', 'singally', 'slangily'], - 'signary': ['signary', 'syringa'], - 'signate': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'signator': ['orangist', 'organist', 'roasting', 'signator'], - 'signee': ['seeing', 'signee'], - 'signer': ['resign', 'resing', 'signer', 'singer'], - 'signet': ['ingest', 'signet', 'stinge'], - 'signorial': ['sailoring', 'signorial'], - 'signpost': ['postsign', 'signpost'], - 'signum': ['musing', 'signum'], - 'sika': ['saki', 'siak', 'sika'], - 'sikar': ['kisra', 'sikar', 'skair'], - 'siket': ['siket', 'skite'], - 'sikh': ['kish', 'shik', 'sikh'], - 'sikhara': ['shikara', 'sikhara'], - 'sikhra': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'], - 'sil': ['lis', 'sil'], - 'silane': ['alsine', 'neslia', 'saline', 'selina', 'silane'], - 'silas': ['silas', 'sisal'], - 'silcrete': ['sclerite', 'silcrete'], - 'sile': ['isle', 'lise', 'sile'], - 'silen': ['elsin', 'lenis', 'niels', 'silen', 'sline'], - 'silence': ['license', 'selenic', 'silence'], - 'silenced': ['licensed', 'silenced'], - 'silencer': ['licenser', 'silencer'], - 'silene': ['enisle', 'ensile', 'senile', 'silene'], - 'silent': ['enlist', 'listen', 'silent', 'tinsel'], - 'silently': ['silently', 'tinselly'], - 'silenus': ['insulse', 'silenus'], - 'silesian': ['sensilia', 'silesian'], - 'silica': ['sialic', 'silica'], - 'silicam': ['islamic', 'laicism', 'silicam'], - 'silicane': ['silicane', 'silicean'], - 'silicean': ['silicane', 'silicean'], - 'siliceocalcareous': ['calcareosiliceous', 'siliceocalcareous'], - 'silicoaluminate': ['aluminosilicate', 'silicoaluminate'], - 'silicone': ['isocline', 'silicone'], - 'silicotitanate': ['silicotitanate', 'titanosilicate'], - 'silicotungstate': ['silicotungstate', 'tungstosilicate'], - 'silicotungstic': ['silicotungstic', 'tungstosilicic'], - 'silk': ['lisk', 'silk', 'skil'], - 'silkaline': ['silkaline', 'snaillike'], - 'silkman': ['klanism', 'silkman'], - 'silkness': ['silkness', 'sinkless', 'skinless'], - 'silly': ['silly', 'silyl'], - 'sillyhow': ['lowishly', 'owlishly', 'sillyhow'], - 'silo': ['lois', 'silo', 'siol', 'soil', 'soli'], - 'silpha': ['palish', 'silpha'], - 'silt': ['list', 'silt', 'slit'], - 'silting': ['listing', 'silting'], - 'siltlike': ['siltlike', 'slitlike'], - 'silva': ['silva', 'slavi'], - 'silver': ['silver', 'sliver'], - 'silvered': ['desilver', 'silvered'], - 'silverer': ['resilver', 'silverer', 'sliverer'], - 'silverize': ['servilize', 'silverize'], - 'silverlike': ['silverlike', 'sliverlike'], - 'silverwood': ['silverwood', 'woodsilver'], - 'silvery': ['silvery', 'slivery'], - 'silvester': ['rivetless', 'silvester'], - 'silyl': ['silly', 'silyl'], - 'sim': ['ism', 'sim'], - 'sima': ['mias', 'saim', 'siam', 'sima'], - 'simal': ['islam', 'ismal', 'simal'], - 'simar': ['maris', 'marsi', 'samir', 'simar'], - 'sime': ['mise', 'semi', 'sime'], - 'simeon': ['eonism', 'mesion', 'oneism', 'simeon'], - 'simeonism': ['misoneism', 'simeonism'], - 'simiad': ['idiasm', 'simiad'], - 'simile': ['milsie', 'simile'], - 'simity': ['myitis', 'simity'], - 'simling': ['simling', 'smiling'], - 'simmer': ['merism', 'mermis', 'simmer'], - 'simmon': ['monism', 'nomism', 'simmon'], - 'simon': ['minos', 'osmin', 'simon'], - 'simonian': ['insomnia', 'simonian'], - 'simonist': ['simonist', 'sintoism'], - 'simony': ['isonym', 'myosin', 'simony'], - 'simple': ['mespil', 'simple'], - 'simpleton': ['simpleton', 'spoilment'], - 'simplicist': ['simplicist', 'simplistic'], - 'simplistic': ['simplicist', 'simplistic'], - 'simply': ['limpsy', 'simply'], - 'simson': ['nosism', 'simson'], - 'simulance': ['masculine', 'semuncial', 'simulance'], - 'simulcast': ['masculist', 'simulcast'], - 'simuler': ['misrule', 'simuler'], - 'sina': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'], - 'sinae': ['anise', 'insea', 'siena', 'sinae'], - 'sinaean': ['nisaean', 'sinaean'], - 'sinaic': ['anisic', 'sicani', 'sinaic'], - 'sinaitic': ['isatinic', 'sinaitic'], - 'sinal': ['sinal', 'slain', 'snail'], - 'sinapic': ['panisic', 'piscian', 'piscina', 'sinapic'], - 'since': ['senci', 'since'], - 'sincere': ['ceresin', 'sincere'], - 'sinecure': ['insecure', 'sinecure'], - 'sinew': ['sinew', 'swine', 'wisen'], - 'sinewed': ['endwise', 'sinewed'], - 'sinewy': ['sinewy', 'swiney'], - 'sinfonia': ['sainfoin', 'sinfonia'], - 'sinfonietta': ['festination', 'infestation', 'sinfonietta'], - 'sing': ['sign', 'sing', 'snig'], - 'singable': ['signable', 'singable'], - 'singally': ['signally', 'singally', 'slangily'], - 'singarip': ['aspiring', 'praising', 'singarip'], - 'singed': ['design', 'singed'], - 'singer': ['resign', 'resing', 'signer', 'singer'], - 'single': ['single', 'slinge'], - 'singler': ['singler', 'slinger'], - 'singles': ['essling', 'singles'], - 'singlet': ['glisten', 'singlet'], - 'sinh': ['hisn', 'shin', 'sinh'], - 'sinico': ['inosic', 'sinico'], - 'sinister': ['insister', 'reinsist', 'sinister', 'sisterin'], - 'sinistrodextral': ['dextrosinistral', 'sinistrodextral'], - 'sink': ['inks', 'sink', 'skin'], - 'sinker': ['resink', 'reskin', 'sinker'], - 'sinkhead': ['headskin', 'nakedish', 'sinkhead'], - 'sinkless': ['silkness', 'sinkless', 'skinless'], - 'sinklike': ['sinklike', 'skinlike'], - 'sinnet': ['innest', 'sennit', 'sinnet', 'tennis'], - 'sinoatrial': ['sinoatrial', 'solitarian'], - 'sinogram': ['orangism', 'organism', 'sinogram'], - 'sinolog': ['loosing', 'sinolog'], - 'sinopia': ['pisonia', 'sinopia'], - 'sinople': ['epsilon', 'sinople'], - 'sinter': ['estrin', 'insert', 'sinter', 'sterin', 'triens'], - 'sinto': ['sinto', 'stion'], - 'sintoc': ['nostic', 'sintoc', 'tocsin'], - 'sintoism': ['simonist', 'sintoism'], - 'sintu': ['sintu', 'suint'], - 'sinuatodentate': ['dentatosinuate', 'sinuatodentate'], - 'sinuose': ['sinuose', 'suiones'], - 'sinus': ['nisus', 'sinus'], - 'sinward': ['inwards', 'sinward'], - 'siol': ['lois', 'silo', 'siol', 'soil', 'soli'], - 'sionite': ['inosite', 'sionite'], - 'sip': ['psi', 'sip'], - 'sipe': ['pise', 'sipe'], - 'siper': ['siper', 'spier', 'spire'], - 'siphonal': ['nailshop', 'siphonal'], - 'siphuncle': ['siphuncle', 'uncleship'], - 'sipling': ['sipling', 'spiling'], - 'sipylite': ['pyelitis', 'sipylite'], - 'sir': ['sir', 'sri'], - 'sire': ['reis', 'rise', 'seri', 'sier', 'sire'], - 'siredon': ['indorse', 'ordines', 'siredon', 'sordine'], - 'siren': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'], - 'sirene': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'], - 'sirenic': ['irenics', 'resinic', 'sericin', 'sirenic'], - 'sirenize': ['resinize', 'sirenize'], - 'sirenlike': ['resinlike', 'sirenlike'], - 'sirenoid': ['derision', 'ironside', 'resinoid', 'sirenoid'], - 'sireny': ['resiny', 'sireny'], - 'sirian': ['raisin', 'sirian'], - 'sirih': ['irish', 'rishi', 'sirih'], - 'sirky': ['risky', 'sirky'], - 'sirmian': ['iranism', 'sirmian'], - 'sirpea': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'], - 'sirple': ['lisper', 'pliers', 'sirple', 'spiler'], - 'sirrah': ['arrish', 'harris', 'rarish', 'sirrah'], - 'sirree': ['rerise', 'sirree'], - 'siruelas': ['russelia', 'siruelas'], - 'sirup': ['prius', 'sirup'], - 'siruper': ['siruper', 'upriser'], - 'siryan': ['siryan', 'syrian'], - 'sis': ['sis', 'ssi'], - 'sisal': ['silas', 'sisal'], - 'sish': ['hiss', 'sish'], - 'sisham': ['samish', 'sisham'], - 'sisi': ['isis', 'sisi'], - 'sisseton': ['sisseton', 'stenosis'], - 'sistani': ['nasitis', 'sistani'], - 'sister': ['resist', 'restis', 'sister'], - 'sisterin': ['insister', 'reinsist', 'sinister', 'sisterin'], - 'sistering': ['resisting', 'sistering'], - 'sisterless': ['resistless', 'sisterless'], - 'sistrum': ['sistrum', 'trismus'], - 'sit': ['ist', 'its', 'sit'], - 'sita': ['atis', 'sita', 'tsia'], - 'sitao': ['sitao', 'staio'], - 'sitar': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'sitch': ['sitch', 'stchi', 'stich'], - 'site': ['seit', 'site'], - 'sith': ['hist', 'sith', 'this', 'tshi'], - 'sithens': ['sithens', 'thissen'], - 'sitient': ['sitient', 'sittine'], - 'sitology': ['sitology', 'tsiology'], - 'sittinae': ['satinite', 'sittinae'], - 'sittine': ['sitient', 'sittine'], - 'situal': ['situal', 'situla', 'tulasi'], - 'situate': ['situate', 'usitate'], - 'situla': ['situal', 'situla', 'tulasi'], - 'situs': ['situs', 'suist'], - 'siva': ['avis', 'siva', 'visa'], - 'sivaism': ['saivism', 'sivaism'], - 'sivan': ['savin', 'sivan'], - 'siwan': ['siwan', 'swain'], - 'siwash': ['sawish', 'siwash'], - 'sixte': ['exist', 'sixte'], - 'sixty': ['sixty', 'xysti'], - 'sizeable': ['seizable', 'sizeable'], - 'sizeman': ['sizeman', 'zamenis'], - 'skair': ['kisra', 'sikar', 'skair'], - 'skal': ['lask', 'skal'], - 'skance': ['sacken', 'skance'], - 'skanda': ['sandak', 'skanda'], - 'skart': ['karst', 'skart', 'stark'], - 'skat': ['skat', 'task'], - 'skate': ['skate', 'stake', 'steak'], - 'skater': ['skater', 'staker', 'strake', 'streak', 'tasker'], - 'skating': ['gitksan', 'skating', 'takings'], - 'skean': ['skean', 'snake', 'sneak'], - 'skee': ['kees', 'seek', 'skee'], - 'skeel': ['skeel', 'sleek'], - 'skeeling': ['skeeling', 'sleeking'], - 'skeely': ['skeely', 'sleeky'], - 'skeen': ['skeen', 'skene'], - 'skeer': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'], - 'skeery': ['kersey', 'skeery'], - 'skeet': ['keest', 'skeet', 'skete', 'steek'], - 'skeeter': ['skeeter', 'teskere'], - 'skeletin': ['nestlike', 'skeletin'], - 'skelic': ['sickle', 'skelic'], - 'skelp': ['skelp', 'spelk'], - 'skelter': ['kestrel', 'skelter'], - 'skene': ['skeen', 'skene'], - 'skeo': ['skeo', 'soke'], - 'skeptic': ['skeptic', 'spicket'], - 'skere': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'], - 'sketcher': ['resketch', 'sketcher'], - 'skete': ['keest', 'skeet', 'skete', 'steek'], - 'skey': ['skey', 'skye'], - 'skid': ['disk', 'kids', 'skid'], - 'skier': ['kreis', 'skier'], - 'skil': ['lisk', 'silk', 'skil'], - 'skin': ['inks', 'sink', 'skin'], - 'skinch': ['chinks', 'skinch'], - 'skinless': ['silkness', 'sinkless', 'skinless'], - 'skinlike': ['sinklike', 'skinlike'], - 'skip': ['pisk', 'skip'], - 'skippel': ['skippel', 'skipple'], - 'skipple': ['skippel', 'skipple'], - 'skirmish': ['skirmish', 'smirkish'], - 'skirreh': ['shirker', 'skirreh'], - 'skirret': ['skirret', 'skirter', 'striker'], - 'skirt': ['skirt', 'stirk'], - 'skirter': ['skirret', 'skirter', 'striker'], - 'skirting': ['skirting', 'striking'], - 'skirtingly': ['skirtingly', 'strikingly'], - 'skirty': ['kirsty', 'skirty'], - 'skit': ['kist', 'skit'], - 'skite': ['siket', 'skite'], - 'skiter': ['skiter', 'strike'], - 'skittle': ['kittles', 'skittle'], - 'sklate': ['lasket', 'sklate'], - 'sklater': ['sklater', 'stalker'], - 'sklinter': ['sklinter', 'strinkle'], - 'skoal': ['skoal', 'sloka'], - 'skoo': ['koso', 'skoo', 'sook'], - 'skua': ['kusa', 'skua'], - 'skun': ['skun', 'sunk'], - 'skye': ['skey', 'skye'], - 'sla': ['las', 'sal', 'sla'], - 'slab': ['blas', 'slab'], - 'slacken': ['slacken', 'snackle'], - 'slade': ['leads', 'slade'], - 'slae': ['elsa', 'sale', 'seal', 'slae'], - 'slain': ['sinal', 'slain', 'snail'], - 'slainte': ['elastin', 'salient', 'saltine', 'slainte'], - 'slait': ['alist', 'litas', 'slait', 'talis'], - 'slake': ['alkes', 'sakel', 'slake'], - 'slam': ['alms', 'salm', 'slam'], - 'slamp': ['plasm', 'psalm', 'slamp'], - 'slandering': ['sanderling', 'slandering'], - 'slane': ['ansel', 'slane'], - 'slang': ['glans', 'slang'], - 'slangily': ['signally', 'singally', 'slangily'], - 'slangish': ['slangish', 'slashing'], - 'slangishly': ['slangishly', 'slashingly'], - 'slangster': ['slangster', 'strangles'], - 'slap': ['salp', 'slap'], - 'slape': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'slare': ['arles', 'arsle', 'laser', 'seral', 'slare'], - 'slasher': ['reslash', 'slasher'], - 'slashing': ['slangish', 'slashing'], - 'slashingly': ['slangishly', 'slashingly'], - 'slat': ['last', 'salt', 'slat'], - 'slate': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'slater': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'slath': ['shalt', 'slath'], - 'slather': ['hastler', 'slather'], - 'slatiness': ['saintless', 'saltiness', 'slatiness', 'stainless'], - 'slating': ['anglist', 'lasting', 'salting', 'slating', 'staling'], - 'slatish': ['saltish', 'slatish'], - 'slatter': ['rattles', 'slatter', 'starlet', 'startle'], - 'slaty': ['lasty', 'salty', 'slaty'], - 'slaughter': ['lethargus', 'slaughter'], - 'slaughterman': ['manslaughter', 'slaughterman'], - 'slaum': ['lamus', 'malus', 'musal', 'slaum'], - 'slave': ['salve', 'selva', 'slave', 'valse'], - 'slaver': ['salver', 'serval', 'slaver', 'versal'], - 'slaverer': ['reserval', 'reversal', 'slaverer'], - 'slavey': ['slavey', 'sylvae'], - 'slavi': ['silva', 'slavi'], - 'slavian': ['salivan', 'slavian'], - 'slavic': ['clavis', 'slavic'], - 'slavonic': ['slavonic', 'volscian'], - 'slay': ['lyas', 'slay'], - 'slayer': ['reslay', 'slayer'], - 'sleave': ['leaves', 'sleave'], - 'sledger': ['redlegs', 'sledger'], - 'slee': ['else', 'lees', 'seel', 'sele', 'slee'], - 'sleech': ['lesche', 'sleech'], - 'sleek': ['skeel', 'sleek'], - 'sleeking': ['skeeling', 'sleeking'], - 'sleeky': ['skeely', 'sleeky'], - 'sleep': ['sleep', 'speel'], - 'sleepless': ['sleepless', 'speelless'], - 'sleepry': ['presley', 'sleepry'], - 'sleet': ['sleet', 'slete', 'steel', 'stele'], - 'sleetiness': ['sleetiness', 'steeliness'], - 'sleeting': ['sleeting', 'steeling'], - 'sleetproof': ['sleetproof', 'steelproof'], - 'sleety': ['sleety', 'steely'], - 'slept': ['slept', 'spelt', 'splet'], - 'slete': ['sleet', 'slete', 'steel', 'stele'], - 'sleuth': ['hustle', 'sleuth'], - 'slew': ['slew', 'wels'], - 'slewing': ['slewing', 'swingle'], - 'sley': ['lyse', 'sley'], - 'slice': ['sicel', 'slice'], - 'slicht': ['slicht', 'slitch'], - 'slicken': ['slicken', 'snickle'], - 'slicker': ['sickler', 'slicker'], - 'slickery': ['sickerly', 'slickery'], - 'slicking': ['sickling', 'slicking'], - 'slidable': ['sabellid', 'slidable'], - 'slidden': ['slidden', 'sniddle'], - 'slide': ['sidle', 'slide'], - 'slider': ['sidler', 'slider'], - 'sliding': ['sidling', 'sliding'], - 'slidingly': ['sidlingly', 'slidingly'], - 'slifter': ['slifter', 'stifler'], - 'slightily': ['sightlily', 'slightily'], - 'slightiness': ['sightliness', 'slightiness'], - 'slighty': ['sightly', 'slighty'], - 'slime': ['limes', 'miles', 'slime', 'smile'], - 'slimeman': ['melanism', 'slimeman'], - 'slimer': ['slimer', 'smiler'], - 'slimy': ['limsy', 'slimy', 'smily'], - 'sline': ['elsin', 'lenis', 'niels', 'silen', 'sline'], - 'slinge': ['single', 'slinge'], - 'slinger': ['singler', 'slinger'], - 'slink': ['links', 'slink'], - 'slip': ['lisp', 'slip'], - 'slipcoat': ['postical', 'slipcoat'], - 'slipe': ['piles', 'plies', 'slipe', 'spiel', 'spile'], - 'slipover': ['overslip', 'slipover'], - 'slipway': ['slipway', 'waspily'], - 'slit': ['list', 'silt', 'slit'], - 'slitch': ['slicht', 'slitch'], - 'slite': ['islet', 'istle', 'slite', 'stile'], - 'slithy': ['hylist', 'slithy'], - 'slitless': ['listless', 'slitless'], - 'slitlike': ['siltlike', 'slitlike'], - 'slitted': ['slitted', 'stilted'], - 'slitter': ['litster', 'slitter', 'stilter', 'testril'], - 'slitty': ['slitty', 'stilty'], - 'slive': ['elvis', 'levis', 'slive'], - 'sliver': ['silver', 'sliver'], - 'sliverer': ['resilver', 'silverer', 'sliverer'], - 'sliverlike': ['silverlike', 'sliverlike'], - 'slivery': ['silvery', 'slivery'], - 'sloan': ['salon', 'sloan', 'solan'], - 'slod': ['slod', 'sold'], - 'sloe': ['lose', 'sloe', 'sole'], - 'sloka': ['skoal', 'sloka'], - 'slone': ['slone', 'solen'], - 'sloo': ['sloo', 'solo', 'sool'], - 'sloom': ['mools', 'sloom'], - 'sloop': ['polos', 'sloop', 'spool'], - 'slope': ['elops', 'slope', 'spole'], - 'sloper': ['sloper', 'splore'], - 'slot': ['lost', 'lots', 'slot'], - 'slote': ['slote', 'stole'], - 'sloted': ['sloted', 'stoled'], - 'slotter': ['settlor', 'slotter'], - 'slouch': ['holcus', 'lochus', 'slouch'], - 'slouchiness': ['cushionless', 'slouchiness'], - 'slouchy': ['chylous', 'slouchy'], - 'slovenian': ['slovenian', 'venosinal'], - 'slow': ['slow', 'sowl'], - 'slud': ['slud', 'suld'], - 'slue': ['lues', 'slue'], - 'sluit': ['litus', 'sluit', 'tulsi'], - 'slunge': ['gunsel', 'selung', 'slunge'], - 'slurp': ['slurp', 'spurl'], - 'slut': ['lust', 'slut'], - 'sluther': ['hulster', 'hustler', 'sluther'], - 'slutter': ['slutter', 'trustle'], - 'sly': ['lys', 'sly'], - 'sma': ['mas', 'sam', 'sma'], - 'smachrie': ['semiarch', 'smachrie'], - 'smallen': ['ensmall', 'smallen'], - 'smalltime': ['metallism', 'smalltime'], - 'smaltine': ['mentalis', 'smaltine', 'stileman'], - 'smaltite': ['metalist', 'smaltite'], - 'smart': ['smart', 'stram'], - 'smarten': ['sarment', 'smarten'], - 'smashage': ['gamashes', 'smashage'], - 'smeary': ['ramsey', 'smeary'], - 'smectis': ['sectism', 'smectis'], - 'smee': ['mese', 'seem', 'seme', 'smee'], - 'smeech': ['scheme', 'smeech'], - 'smeek': ['meeks', 'smeek'], - 'smeer': ['merse', 'smeer'], - 'smeeth': ['smeeth', 'smethe'], - 'smeller': ['resmell', 'smeller'], - 'smelly': ['mysell', 'smelly'], - 'smelter': ['melters', 'resmelt', 'smelter'], - 'smethe': ['smeeth', 'smethe'], - 'smilax': ['laxism', 'smilax'], - 'smile': ['limes', 'miles', 'slime', 'smile'], - 'smiler': ['slimer', 'smiler'], - 'smilet': ['mistle', 'smilet'], - 'smiling': ['simling', 'smiling'], - 'smily': ['limsy', 'slimy', 'smily'], - 'sminthian': ['mitannish', 'sminthian'], - 'smirch': ['chrism', 'smirch'], - 'smirkish': ['skirmish', 'smirkish'], - 'smit': ['mist', 'smit', 'stim'], - 'smite': ['metis', 'smite', 'stime', 'times'], - 'smiter': ['merist', 'mister', 'smiter'], - 'smither': ['rhemist', 'smither'], - 'smithian': ['isthmian', 'smithian'], - 'smoker': ['mosker', 'smoker'], - 'smoot': ['moost', 'smoot'], - 'smoother': ['resmooth', 'romeshot', 'smoother'], - 'smoothingly': ['hymnologist', 'smoothingly'], - 'smore': ['meros', 'mores', 'morse', 'sermo', 'smore'], - 'smote': ['moste', 'smote'], - 'smother': ['smother', 'thermos'], - 'smouse': ['mousse', 'smouse'], - 'smouser': ['osmerus', 'smouser'], - 'smuggle': ['muggles', 'smuggle'], - 'smut': ['must', 'smut', 'stum'], - 'smyrniot': ['smyrniot', 'tyronism'], - 'smyrniote': ['myristone', 'smyrniote'], - 'snab': ['nabs', 'snab'], - 'snackle': ['slacken', 'snackle'], - 'snag': ['sang', 'snag'], - 'snagrel': ['sangrel', 'snagrel'], - 'snail': ['sinal', 'slain', 'snail'], - 'snaillike': ['silkaline', 'snaillike'], - 'snaily': ['anisyl', 'snaily'], - 'snaith': ['snaith', 'tahsin'], - 'snake': ['skean', 'snake', 'sneak'], - 'snap': ['snap', 'span'], - 'snape': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'], - 'snaper': ['resnap', 'respan', 'snaper'], - 'snapless': ['snapless', 'spanless'], - 'snapy': ['pansy', 'snapy'], - 'snare': ['anser', 'nares', 'rasen', 'snare'], - 'snarer': ['serran', 'snarer'], - 'snaste': ['assent', 'snaste'], - 'snatch': ['chanst', 'snatch', 'stanch'], - 'snatchable': ['snatchable', 'stanchable'], - 'snatcher': ['resnatch', 'snatcher', 'stancher'], - 'snath': ['shant', 'snath'], - 'snathe': ['athens', 'hasten', 'snathe', 'sneath'], - 'snaw': ['sawn', 'snaw', 'swan'], - 'snead': ['sedan', 'snead'], - 'sneak': ['skean', 'snake', 'sneak'], - 'sneaker': ['keresan', 'sneaker'], - 'sneaksman': ['masskanne', 'sneaksman'], - 'sneap': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'], - 'sneath': ['athens', 'hasten', 'snathe', 'sneath'], - 'sneathe': ['sneathe', 'thesean'], - 'sned': ['send', 'sned'], - 'snee': ['ense', 'esne', 'nese', 'seen', 'snee'], - 'sneer': ['renes', 'sneer'], - 'snew': ['news', 'sewn', 'snew'], - 'snib': ['nibs', 'snib'], - 'snickle': ['slicken', 'snickle'], - 'sniddle': ['slidden', 'sniddle'], - 'snide': ['denis', 'snide'], - 'snig': ['sign', 'sing', 'snig'], - 'snigger': ['serging', 'snigger'], - 'snip': ['snip', 'spin'], - 'snipe': ['penis', 'snipe', 'spine'], - 'snipebill': ['snipebill', 'spinebill'], - 'snipelike': ['snipelike', 'spinelike'], - 'sniper': ['pernis', 'respin', 'sniper'], - 'snipocracy': ['conspiracy', 'snipocracy'], - 'snipper': ['nippers', 'snipper'], - 'snippet': ['snippet', 'stippen'], - 'snipy': ['snipy', 'spiny'], - 'snitcher': ['christen', 'snitcher'], - 'snite': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'], - 'snithy': ['shinty', 'snithy'], - 'sniveler': ['ensilver', 'sniveler'], - 'snively': ['snively', 'sylvine'], - 'snob': ['bosn', 'nobs', 'snob'], - 'snocker': ['conkers', 'snocker'], - 'snod': ['snod', 'sond'], - 'snoek': ['snoek', 'snoke', 'soken'], - 'snog': ['snog', 'song'], - 'snoke': ['snoek', 'snoke', 'soken'], - 'snook': ['onkos', 'snook'], - 'snoop': ['snoop', 'spoon'], - 'snooper': ['snooper', 'spooner'], - 'snoopy': ['snoopy', 'spoony'], - 'snoot': ['snoot', 'stoon'], - 'snore': ['norse', 'noser', 'seron', 'snore'], - 'snorer': ['snorer', 'sorner'], - 'snoring': ['snoring', 'sorning'], - 'snork': ['norsk', 'snork'], - 'snotter': ['snotter', 'stentor', 'torsten'], - 'snout': ['notus', 'snout', 'stoun', 'tonus'], - 'snouter': ['snouter', 'tonsure', 'unstore'], - 'snow': ['snow', 'sown'], - 'snowie': ['nowise', 'snowie'], - 'snowish': ['snowish', 'whisson'], - 'snowy': ['snowy', 'wyson'], - 'snug': ['snug', 'sung'], - 'snup': ['snup', 'spun'], - 'snurp': ['snurp', 'spurn'], - 'snurt': ['snurt', 'turns'], - 'so': ['os', 'so'], - 'soak': ['asok', 'soak', 'soka'], - 'soaker': ['arkose', 'resoak', 'soaker'], - 'soally': ['soally', 'sollya'], - 'soam': ['amos', 'soam', 'soma'], - 'soap': ['asop', 'sapo', 'soap'], - 'soaper': ['resoap', 'soaper'], - 'soar': ['asor', 'rosa', 'soar', 'sora'], - 'sob': ['bos', 'sob'], - 'sobeit': ['setibo', 'sobeit'], - 'sober': ['boser', 'brose', 'sober'], - 'sobralite': ['sobralite', 'strobilae'], - 'soc': ['cos', 'osc', 'soc'], - 'socager': ['corsage', 'socager'], - 'social': ['colias', 'scolia', 'social'], - 'socialite': ['aeolistic', 'socialite'], - 'societal': ['cosalite', 'societal'], - 'societism': ['seismotic', 'societism'], - 'socinian': ['oscinian', 'socinian'], - 'sociobiological': ['biosociological', 'sociobiological'], - 'sociolegal': ['oligoclase', 'sociolegal'], - 'socius': ['scious', 'socius'], - 'socle': ['close', 'socle'], - 'soco': ['coos', 'soco'], - 'socotran': ['ostracon', 'socotran'], - 'socotrine': ['certosino', 'cortisone', 'socotrine'], - 'socratean': ['ostracean', 'socratean'], - 'socratic': ['acrostic', 'sarcotic', 'socratic'], - 'socratical': ['acrostical', 'socratical'], - 'socratically': ['acrostically', 'socratically'], - 'socraticism': ['acrosticism', 'socraticism'], - 'socratism': ['ostracism', 'socratism'], - 'socratize': ['ostracize', 'socratize'], - 'sod': ['dos', 'ods', 'sod'], - 'soda': ['dosa', 'sado', 'soda'], - 'sodalite': ['diastole', 'isolated', 'sodalite', 'solidate'], - 'sodium': ['modius', 'sodium'], - 'sodom': ['dooms', 'sodom'], - 'sodomitic': ['diosmotic', 'sodomitic'], - 'soe': ['oes', 'ose', 'soe'], - 'soft': ['soft', 'stof'], - 'soften': ['oftens', 'soften'], - 'softener': ['resoften', 'softener'], - 'sog': ['gos', 'sog'], - 'soga': ['sago', 'soga'], - 'soger': ['gorse', 'soger'], - 'soh': ['sho', 'soh'], - 'soho': ['shoo', 'soho'], - 'soil': ['lois', 'silo', 'siol', 'soil', 'soli'], - 'soiled': ['isolde', 'soiled'], - 'sojourner': ['resojourn', 'sojourner'], - 'sok': ['kos', 'sok'], - 'soka': ['asok', 'soak', 'soka'], - 'soke': ['skeo', 'soke'], - 'soken': ['snoek', 'snoke', 'soken'], - 'sola': ['also', 'sola'], - 'solacer': ['escolar', 'solacer'], - 'solan': ['salon', 'sloan', 'solan'], - 'solar': ['rosal', 'solar', 'soral'], - 'solaristics': ['scissortail', 'solaristics'], - 'solate': ['lotase', 'osteal', 'solate', 'stolae', 'talose'], - 'sold': ['slod', 'sold'], - 'solder': ['dorsel', 'seldor', 'solder'], - 'solderer': ['resolder', 'solderer'], - 'soldi': ['soldi', 'solid'], - 'soldo': ['soldo', 'solod'], - 'sole': ['lose', 'sloe', 'sole'], - 'solea': ['alose', 'osela', 'solea'], - 'solecist': ['solecist', 'solstice'], - 'solen': ['slone', 'solen'], - 'soleness': ['noseless', 'soleness'], - 'solenial': ['lesional', 'solenial'], - 'solenite': ['noselite', 'solenite'], - 'solenium': ['emulsion', 'solenium'], - 'solenopsis': ['poisonless', 'solenopsis'], - 'solent': ['solent', 'stolen', 'telson'], - 'solentine': ['nelsonite', 'solentine'], - 'soler': ['loser', 'orsel', 'rosel', 'soler'], - 'solera': ['roseal', 'solera'], - 'soles': ['loess', 'soles'], - 'soli': ['lois', 'silo', 'siol', 'soil', 'soli'], - 'soliative': ['isolative', 'soliative'], - 'solicit': ['colitis', 'solicit'], - 'solicitation': ['coalitionist', 'solicitation'], - 'soliciter': ['resolicit', 'soliciter'], - 'soliciting': ['ignicolist', 'soliciting'], - 'solicitude': ['isodulcite', 'solicitude'], - 'solid': ['soldi', 'solid'], - 'solidate': ['diastole', 'isolated', 'sodalite', 'solidate'], - 'solidus': ['dissoul', 'dulosis', 'solidus'], - 'solilunar': ['lunisolar', 'solilunar'], - 'soliped': ['despoil', 'soliped', 'spoiled'], - 'solitarian': ['sinoatrial', 'solitarian'], - 'solitary': ['royalist', 'solitary'], - 'soliterraneous': ['salinoterreous', 'soliterraneous'], - 'solitude': ['outslide', 'solitude'], - 'sollya': ['soally', 'sollya'], - 'solmizate': ['solmizate', 'zealotism'], - 'solo': ['sloo', 'solo', 'sool'], - 'solod': ['soldo', 'solod'], - 'solon': ['olson', 'solon'], - 'solonic': ['scolion', 'solonic'], - 'soloth': ['soloth', 'tholos'], - 'solotink': ['solotink', 'solotnik'], - 'solotnik': ['solotink', 'solotnik'], - 'solstice': ['solecist', 'solstice'], - 'solum': ['mosul', 'mouls', 'solum'], - 'solute': ['lutose', 'solute', 'tousle'], - 'solutioner': ['resolution', 'solutioner'], - 'soma': ['amos', 'soam', 'soma'], - 'somacule': ['maculose', 'somacule'], - 'somal': ['salmo', 'somal'], - 'somali': ['limosa', 'somali'], - 'somasthenia': ['anhematosis', 'somasthenia'], - 'somatic': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'], - 'somatics': ['acosmist', 'massicot', 'somatics'], - 'somatism': ['osmatism', 'somatism'], - 'somatophyte': ['hepatostomy', 'somatophyte'], - 'somatophytic': ['hypostomatic', 'somatophytic'], - 'somatopleuric': ['micropetalous', 'somatopleuric'], - 'somatopsychic': ['psychosomatic', 'somatopsychic'], - 'somatosplanchnic': ['somatosplanchnic', 'splanchnosomatic'], - 'somatous': ['astomous', 'somatous'], - 'somber': ['somber', 'sombre'], - 'sombre': ['somber', 'sombre'], - 'some': ['meso', 'mose', 'some'], - 'someday': ['samoyed', 'someday'], - 'somers': ['messor', 'mosser', 'somers'], - 'somnambule': ['somnambule', 'summonable'], - 'somnial': ['malison', 'manolis', 'osmanli', 'somnial'], - 'somnopathy': ['phytomonas', 'somnopathy'], - 'somnorific': ['onisciform', 'somnorific'], - 'son': ['ons', 'son'], - 'sonant': ['santon', 'sonant', 'stanno'], - 'sonantic': ['canonist', 'sanction', 'sonantic'], - 'sonar': ['arson', 'saron', 'sonar'], - 'sonatina': ['ansation', 'sonatina'], - 'sond': ['snod', 'sond'], - 'sondation': ['anisodont', 'sondation'], - 'sondeli': ['indoles', 'sondeli'], - 'soneri': ['rosine', 'senior', 'soneri'], - 'song': ['snog', 'song'], - 'songoi': ['isogon', 'songoi'], - 'songy': ['gonys', 'songy'], - 'sonic': ['oscin', 'scion', 'sonic'], - 'sonja': ['janos', 'jason', 'jonas', 'sonja'], - 'sonneratia': ['arsenation', 'senatorian', 'sonneratia'], - 'sonnet': ['sonnet', 'stonen', 'tenson'], - 'sonnetwise': ['sonnetwise', 'swinestone'], - 'sonrai': ['arsino', 'rasion', 'sonrai'], - 'sontag': ['sontag', 'tongas'], - 'soodle': ['dolose', 'oodles', 'soodle'], - 'sook': ['koso', 'skoo', 'sook'], - 'sool': ['sloo', 'solo', 'sool'], - 'soon': ['oons', 'soon'], - 'sooner': ['nooser', 'seroon', 'sooner'], - 'sooter': ['seroot', 'sooter', 'torose'], - 'sooth': ['shoot', 'sooth', 'sotho', 'toosh'], - 'soother': ['orthose', 'reshoot', 'shooter', 'soother'], - 'soothing': ['shooting', 'soothing'], - 'sootiness': ['enostosis', 'sootiness'], - 'sooty': ['sooty', 'soyot'], - 'sope': ['epos', 'peso', 'pose', 'sope'], - 'soph': ['phos', 'posh', 'shop', 'soph'], - 'sophister': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'], - 'sophistical': ['postischial', 'sophistical'], - 'sophomore': ['osmophore', 'sophomore'], - 'sopition': ['position', 'sopition'], - 'sopor': ['poros', 'proso', 'sopor', 'spoor'], - 'soprani': ['parison', 'soprani'], - 'sopranist': ['postnaris', 'sopranist'], - 'soprano': ['pronaos', 'soprano'], - 'sora': ['asor', 'rosa', 'soar', 'sora'], - 'sorabian': ['abrasion', 'sorabian'], - 'soral': ['rosal', 'solar', 'soral'], - 'sorbate': ['barotse', 'boaster', 'reboast', 'sorbate'], - 'sorbin': ['insorb', 'sorbin'], - 'sorcer': ['scorer', 'sorcer'], - 'sorchin': ['cornish', 'cronish', 'sorchin'], - 'sorda': ['sarod', 'sorda'], - 'sordes': ['dosser', 'sordes'], - 'sordine': ['indorse', 'ordines', 'siredon', 'sordine'], - 'sordino': ['indoors', 'sordino'], - 'sore': ['eros', 'rose', 'sero', 'sore'], - 'soredia': ['ardoise', 'aroides', 'soredia'], - 'sorediate': ['oestridae', 'ostreidae', 'sorediate'], - 'soredium': ['dimerous', 'soredium'], - 'soree': ['erose', 'soree'], - 'sorefoot': ['footsore', 'sorefoot'], - 'sorehead': ['rosehead', 'sorehead'], - 'sorehon': ['onshore', 'sorehon'], - 'sorema': ['amores', 'ramose', 'sorema'], - 'soricid': ['cirsoid', 'soricid'], - 'soricident': ['discretion', 'soricident'], - 'soricine': ['recision', 'soricine'], - 'sorite': ['restio', 'sorite', 'sortie', 'triose'], - 'sorites': ['rossite', 'sorites'], - 'sornare': ['serrano', 'sornare'], - 'sorner': ['snorer', 'sorner'], - 'sorning': ['snoring', 'sorning'], - 'sororial': ['rosorial', 'sororial'], - 'sorption': ['notropis', 'positron', 'sorption'], - 'sortable': ['sortable', 'storable'], - 'sorted': ['sorted', 'strode'], - 'sorter': ['resort', 'roster', 'sorter', 'storer'], - 'sortie': ['restio', 'sorite', 'sortie', 'triose'], - 'sortilegus': ['sortilegus', 'strigulose'], - 'sortiment': ['sortiment', 'trimstone'], - 'sortly': ['sortly', 'styrol'], - 'sorty': ['sorty', 'story', 'stroy'], - 'sorva': ['savor', 'sorva'], - 'sory': ['rosy', 'sory'], - 'sosia': ['oasis', 'sosia'], - 'sostenuto': ['ostentous', 'sostenuto'], - 'soter': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'], - 'soterial': ['soterial', 'striolae'], - 'sotho': ['shoot', 'sooth', 'sotho', 'toosh'], - 'sotie': ['sotie', 'toise'], - 'sotnia': ['sotnia', 'tinosa'], - 'sotol': ['sotol', 'stool'], - 'sots': ['sots', 'toss'], - 'sotter': ['sotter', 'testor'], - 'soucar': ['acorus', 'soucar'], - 'souchet': ['souchet', 'techous', 'tousche'], - 'souly': ['lousy', 'souly'], - 'soum': ['soum', 'sumo'], - 'soumansite': ['soumansite', 'stamineous'], - 'sound': ['nodus', 'ounds', 'sound'], - 'sounder': ['resound', 'sounder', 'unrosed'], - 'soup': ['opus', 'soup'], - 'souper': ['poseur', 'pouser', 'souper', 'uprose'], - 'sour': ['ours', 'sour'], - 'source': ['cerous', 'course', 'crouse', 'source'], - 'soured': ['douser', 'soured'], - 'souredness': ['rousedness', 'souredness'], - 'souren': ['souren', 'unsore', 'ursone'], - 'sourer': ['rouser', 'sourer'], - 'souring': ['nigrous', 'rousing', 'souring'], - 'sourly': ['lusory', 'sourly'], - 'soursop': ['psorous', 'soursop', 'sporous'], - 'soury': ['soury', 'yours'], - 'souser': ['serous', 'souser'], - 'souter': ['ouster', 'souter', 'touser', 'trouse'], - 'souterrain': ['souterrain', 'ternarious', 'trouserian'], - 'south': ['shout', 'south'], - 'souther': ['shouter', 'souther'], - 'southerland': ['southerland', 'southlander'], - 'southing': ['shouting', 'southing'], - 'southlander': ['southerland', 'southlander'], - 'soviet': ['soviet', 'sovite'], - 'sovite': ['soviet', 'sovite'], - 'sowdones': ['sowdones', 'woodness'], - 'sowel': ['sowel', 'sowle'], - 'sower': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'], - 'sowl': ['slow', 'sowl'], - 'sowle': ['sowel', 'sowle'], - 'sown': ['snow', 'sown'], - 'sowt': ['sowt', 'stow', 'swot', 'wots'], - 'soyot': ['sooty', 'soyot'], - 'spa': ['asp', 'sap', 'spa'], - 'space': ['capes', 'scape', 'space'], - 'spaceless': ['scapeless', 'spaceless'], - 'spacer': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'], - 'spade': ['depas', 'sepad', 'spade'], - 'spader': ['rasped', 'spader', 'spread'], - 'spadiceous': ['dipsaceous', 'spadiceous'], - 'spadone': ['espadon', 'spadone'], - 'spadonic': ['spadonic', 'spondaic', 'spondiac'], - 'spadrone': ['parsoned', 'spadrone'], - 'spae': ['apse', 'pesa', 'spae'], - 'spaer': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'], - 'spahi': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'], - 'spaid': ['sapid', 'spaid'], - 'spaik': ['askip', 'spaik'], - 'spairge': ['prisage', 'spairge'], - 'spalacine': ['asclepian', 'spalacine'], - 'spale': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'spalt': ['spalt', 'splat'], - 'span': ['snap', 'span'], - 'spancel': ['enclasp', 'spancel'], - 'spane': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'], - 'spanemia': ['paeanism', 'spanemia'], - 'spangler': ['spangler', 'sprangle'], - 'spangolite': ['postgenial', 'spangolite'], - 'spaniel': ['espinal', 'pinales', 'spaniel'], - 'spaniol': ['sanpoil', 'spaniol'], - 'spanless': ['snapless', 'spanless'], - 'spar': ['rasp', 'spar'], - 'sparable': ['parsable', 'prebasal', 'sparable'], - 'spare': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'], - 'spareable': ['separable', 'spareable'], - 'sparely': ['parsley', 'pyrales', 'sparely', 'splayer'], - 'sparer': ['parser', 'rasper', 'sparer'], - 'sparerib': ['ribspare', 'sparerib'], - 'sparge': ['gasper', 'sparge'], - 'sparger': ['grasper', 'regrasp', 'sparger'], - 'sparidae': ['paradise', 'sparidae'], - 'sparing': ['aspring', 'rasping', 'sparing'], - 'sparingly': ['raspingly', 'sparingly'], - 'sparingness': ['raspingness', 'sparingness'], - 'sparling': ['laspring', 'sparling', 'springal'], - 'sparoid': ['prasoid', 'sparoid'], - 'sparse': ['passer', 'repass', 'sparse'], - 'spart': ['spart', 'sprat', 'strap', 'traps'], - 'spartanic': ['sacripant', 'spartanic'], - 'sparteine': ['pistareen', 'sparteine'], - 'sparterie': ['periaster', 'sparterie'], - 'spartina': ['aspirant', 'partisan', 'spartina'], - 'spartle': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'], - 'spary': ['raspy', 'spary', 'spray'], - 'spat': ['past', 'spat', 'stap', 'taps'], - 'spate': ['paste', 'septa', 'spate'], - 'spathal': ['asphalt', 'spathal', 'taplash'], - 'spathe': ['spathe', 'thapes'], - 'spathic': ['haptics', 'spathic'], - 'spatling': ['spatling', 'stapling'], - 'spatter': ['spatter', 'tapster'], - 'spattering': ['spattering', 'tapestring'], - 'spattle': ['peltast', 'spattle'], - 'spatular': ['pastural', 'spatular'], - 'spatule': ['pulsate', 'spatule', 'upsteal'], - 'spave': ['spave', 'vespa'], - 'speak': ['sapek', 'speak'], - 'speaker': ['respeak', 'speaker'], - 'speal': ['elaps', - 'lapse', - 'lepas', - 'pales', - 'salep', - 'saple', - 'sepal', - 'slape', - 'spale', - 'speal'], - 'spean': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'], - 'spear': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'], - 'spearman': ['parmesan', 'spearman'], - 'spearmint': ['spearmint', 'spermatin'], - 'speary': ['presay', 'speary'], - 'spec': ['ceps', 'spec'], - 'spectatorial': ['poetastrical', 'spectatorial'], - 'specter': ['respect', 'scepter', 'specter'], - 'spectered': ['sceptered', 'spectered'], - 'spectra': ['precast', 'spectra'], - 'spectral': ['sceptral', 'scraplet', 'spectral'], - 'spectromicroscope': ['microspectroscope', 'spectromicroscope'], - 'spectrotelescope': ['spectrotelescope', 'telespectroscope'], - 'spectrous': ['spectrous', 'susceptor', 'suspector'], - 'spectry': ['precyst', 'sceptry', 'spectry'], - 'specula': ['capsule', 'specula', 'upscale'], - 'specular': ['capsuler', 'specular'], - 'speed': ['pedes', 'speed'], - 'speel': ['sleep', 'speel'], - 'speelless': ['sleepless', 'speelless'], - 'speer': ['peres', 'perse', 'speer', 'spree'], - 'speerity': ['perseity', 'speerity'], - 'speiss': ['sepsis', 'speiss'], - 'spelaean': ['seaplane', 'spelaean'], - 'spelk': ['skelp', 'spelk'], - 'speller': ['presell', 'respell', 'speller'], - 'spelt': ['slept', 'spelt', 'splet'], - 'spenerism': ['primeness', 'spenerism'], - 'speos': ['posse', 'speos'], - 'sperate': ['perates', 'repaste', 'sperate'], - 'sperity': ['pyrites', 'sperity'], - 'sperling': ['sperling', 'springle'], - 'spermalist': ['psalmister', 'spermalist'], - 'spermathecal': ['chapelmaster', 'spermathecal'], - 'spermatid': ['predatism', 'spermatid'], - 'spermatin': ['spearmint', 'spermatin'], - 'spermatogonium': ['protomagnesium', 'spermatogonium'], - 'spermatozoic': ['spermatozoic', 'zoospermatic'], - 'spermiogenesis': ['geissospermine', 'spermiogenesis'], - 'spermocarp': ['carposperm', 'spermocarp'], - 'spet': ['pest', 'sept', 'spet', 'step'], - 'spew': ['spew', 'swep'], - 'sphacelation': ['lipsanotheca', 'sphacelation'], - 'sphecidae': ['cheapside', 'sphecidae'], - 'sphene': ['sephen', 'sphene'], - 'sphenoethmoid': ['ethmosphenoid', 'sphenoethmoid'], - 'sphenoethmoidal': ['ethmosphenoidal', 'sphenoethmoidal'], - 'sphenotic': ['phonetics', 'sphenotic'], - 'spheral': ['plasher', 'spheral'], - 'spheration': ['opisthenar', 'spheration'], - 'sphere': ['herpes', 'hesper', 'sphere'], - 'sphery': ['sphery', 'sypher'], - 'sphyraenid': ['dysphrenia', 'sphyraenid', 'sphyrnidae'], - 'sphyrnidae': ['dysphrenia', 'sphyraenid', 'sphyrnidae'], - 'spica': ['aspic', 'spica'], - 'spicate': ['aseptic', 'spicate'], - 'spice': ['sepic', 'spice'], - 'spicer': ['crepis', 'cripes', 'persic', 'precis', 'spicer'], - 'spiciferous': ['pisciferous', 'spiciferous'], - 'spiciform': ['pisciform', 'spiciform'], - 'spicket': ['skeptic', 'spicket'], - 'spicular': ['scripula', 'spicular'], - 'spiculate': ['euplastic', 'spiculate'], - 'spiculated': ['disculpate', 'spiculated'], - 'spicule': ['clipeus', 'spicule'], - 'spider': ['spider', 'spired', 'spried'], - 'spiderish': ['sidership', 'spiderish'], - 'spiderlike': ['predislike', 'spiderlike'], - 'spiel': ['piles', 'plies', 'slipe', 'spiel', 'spile'], - 'spier': ['siper', 'spier', 'spire'], - 'spikelet': ['spikelet', 'steplike'], - 'spiking': ['pigskin', 'spiking'], - 'spiky': ['pisky', 'spiky'], - 'spile': ['piles', 'plies', 'slipe', 'spiel', 'spile'], - 'spiler': ['lisper', 'pliers', 'sirple', 'spiler'], - 'spiling': ['sipling', 'spiling'], - 'spiloma': ['imposal', 'spiloma'], - 'spilt': ['spilt', 'split'], - 'spin': ['snip', 'spin'], - 'spina': ['pisan', 'sapin', 'spina'], - 'spinae': ['sepian', 'spinae'], - 'spinales': ['painless', 'spinales'], - 'spinate': ['panties', 'sapient', 'spinate'], - 'spindled': ['spindled', 'splendid'], - 'spindler': ['spindler', 'splinder'], - 'spine': ['penis', 'snipe', 'spine'], - 'spinebill': ['snipebill', 'spinebill'], - 'spinel': ['spinel', 'spline'], - 'spinelike': ['snipelike', 'spinelike'], - 'spinet': ['instep', 'spinet'], - 'spinigerous': ['serpiginous', 'spinigerous'], - 'spinigrade': ['despairing', 'spinigrade'], - 'spinoid': ['spinoid', 'spionid'], - 'spinoneural': ['spinoneural', 'unipersonal'], - 'spinotectal': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'], - 'spiny': ['snipy', 'spiny'], - 'spionid': ['spinoid', 'spionid'], - 'spiracle': ['calipers', 'spiracle'], - 'spiracula': ['auriscalp', 'spiracula'], - 'spiral': ['prisal', 'spiral'], - 'spiralism': ['misprisal', 'spiralism'], - 'spiraloid': ['spiraloid', 'sporidial'], - 'spiran': ['spiran', 'sprain'], - 'spirant': ['spirant', 'spraint'], - 'spirate': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'], - 'spire': ['siper', 'spier', 'spire'], - 'spirea': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'], - 'spired': ['spider', 'spired', 'spried'], - 'spirelet': ['epistler', 'spirelet'], - 'spireme': ['emprise', 'imprese', 'premise', 'spireme'], - 'spiritally': ['pistillary', 'spiritally'], - 'spiriter': ['respirit', 'spiriter'], - 'spirometer': ['prisometer', 'spirometer'], - 'spironema': ['mesropian', 'promnesia', 'spironema'], - 'spirt': ['spirt', 'sprit', 'stirp', 'strip'], - 'spirula': ['parulis', 'spirula', 'uprisal'], - 'spit': ['pist', 'spit'], - 'spital': ['alpist', 'pastil', 'spital'], - 'spite': ['septi', 'spite', 'stipe'], - 'spithame': ['aphetism', 'mateship', 'shipmate', 'spithame'], - 'spitter': ['spitter', 'tipster'], - 'splairge': ['aspergil', 'splairge'], - 'splanchnosomatic': ['somatosplanchnic', 'splanchnosomatic'], - 'splasher': ['harpless', 'splasher'], - 'splat': ['spalt', 'splat'], - 'splay': ['palsy', 'splay'], - 'splayed': ['pylades', 'splayed'], - 'splayer': ['parsley', 'pyrales', 'sparely', 'splayer'], - 'spleet': ['pestle', 'spleet'], - 'splender': ['resplend', 'splender'], - 'splendid': ['spindled', 'splendid'], - 'splenium': ['splenium', 'unsimple'], - 'splenolaparotomy': ['laparosplenotomy', 'splenolaparotomy'], - 'splenoma': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'], - 'splenomegalia': ['megalosplenia', 'splenomegalia'], - 'splenonephric': ['phrenosplenic', 'splenonephric', 'splenophrenic'], - 'splenophrenic': ['phrenosplenic', 'splenonephric', 'splenophrenic'], - 'splet': ['slept', 'spelt', 'splet'], - 'splice': ['clipse', 'splice'], - 'spliceable': ['eclipsable', 'spliceable'], - 'splinder': ['spindler', 'splinder'], - 'spline': ['spinel', 'spline'], - 'split': ['spilt', 'split'], - 'splitter': ['splitter', 'striplet'], - 'splore': ['sloper', 'splore'], - 'spogel': ['gospel', 'spogel'], - 'spoil': ['polis', 'spoil'], - 'spoilage': ['pelasgoi', 'spoilage'], - 'spoilation': ['positional', 'spoilation', 'spoliation'], - 'spoiled': ['despoil', 'soliped', 'spoiled'], - 'spoiler': ['leporis', 'spoiler'], - 'spoilment': ['simpleton', 'spoilment'], - 'spoilt': ['pistol', 'postil', 'spoilt'], - 'spole': ['elops', 'slope', 'spole'], - 'spoliation': ['positional', 'spoilation', 'spoliation'], - 'spondaic': ['spadonic', 'spondaic', 'spondiac'], - 'spondiac': ['spadonic', 'spondaic', 'spondiac'], - 'spongily': ['posingly', 'spongily'], - 'sponsal': ['plasson', 'sponsal'], - 'sponsalia': ['passional', 'sponsalia'], - 'spool': ['polos', 'sloop', 'spool'], - 'spoon': ['snoop', 'spoon'], - 'spooner': ['snooper', 'spooner'], - 'spoony': ['snoopy', 'spoony'], - 'spoonyism': ['spoonyism', 'symposion'], - 'spoor': ['poros', 'proso', 'sopor', 'spoor'], - 'spoot': ['spoot', 'stoop'], - 'sporangia': ['agapornis', 'sporangia'], - 'spore': ['poser', 'prose', 'ropes', 'spore'], - 'sporidial': ['spiraloid', 'sporidial'], - 'sporification': ['antisoporific', 'prosification', 'sporification'], - 'sporogeny': ['gynospore', 'sporogeny'], - 'sporoid': ['psoroid', 'sporoid'], - 'sporotrichum': ['sporotrichum', 'trichosporum'], - 'sporous': ['psorous', 'soursop', 'sporous'], - 'sporozoic': ['sporozoic', 'zoosporic'], - 'sport': ['sport', 'strop'], - 'sporter': ['sporter', 'strepor'], - 'sportula': ['postural', 'pulsator', 'sportula'], - 'sportulae': ['opulaster', 'sportulae', 'sporulate'], - 'sporulate': ['opulaster', 'sportulae', 'sporulate'], - 'sporule': ['leprous', 'pelorus', 'sporule'], - 'sposhy': ['hyssop', 'phossy', 'sposhy'], - 'spot': ['post', 'spot', 'stop', 'tops'], - 'spotless': ['postless', 'spotless', 'stopless'], - 'spotlessness': ['spotlessness', 'stoplessness'], - 'spotlike': ['postlike', 'spotlike'], - 'spottedly': ['spottedly', 'spotteldy'], - 'spotteldy': ['spottedly', 'spotteldy'], - 'spotter': ['protest', 'spotter'], - 'spouse': ['esopus', 'spouse'], - 'spout': ['spout', 'stoup'], - 'spouter': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'], - 'sprag': ['grasp', 'sprag'], - 'sprain': ['spiran', 'sprain'], - 'spraint': ['spirant', 'spraint'], - 'sprangle': ['spangler', 'sprangle'], - 'sprat': ['spart', 'sprat', 'strap', 'traps'], - 'spray': ['raspy', 'spary', 'spray'], - 'sprayer': ['respray', 'sprayer'], - 'spread': ['rasped', 'spader', 'spread'], - 'spreadboard': ['broadspread', 'spreadboard'], - 'spreader': ['respread', 'spreader'], - 'spreadover': ['overspread', 'spreadover'], - 'spree': ['peres', 'perse', 'speer', 'spree'], - 'spret': ['prest', 'spret'], - 'spried': ['spider', 'spired', 'spried'], - 'sprier': ['risper', 'sprier'], - 'spriest': ['persist', 'spriest'], - 'springal': ['laspring', 'sparling', 'springal'], - 'springe': ['presign', 'springe'], - 'springer': ['respring', 'springer'], - 'springhead': ['headspring', 'springhead'], - 'springhouse': ['springhouse', 'surgeonship'], - 'springle': ['sperling', 'springle'], - 'sprit': ['spirt', 'sprit', 'stirp', 'strip'], - 'sprite': ['priest', 'pteris', 'sprite', 'stripe'], - 'spritehood': ['priesthood', 'spritehood'], - 'sproat': ['asport', 'pastor', 'sproat'], - 'sprocket': ['prestock', 'sprocket'], - 'sprout': ['sprout', 'stroup', 'stupor'], - 'sprouter': ['posturer', 'resprout', 'sprouter'], - 'sprouting': ['outspring', 'sprouting'], - 'sprue': ['purse', 'resup', 'sprue', 'super'], - 'spruer': ['purser', 'spruer'], - 'spruit': ['purist', 'spruit', 'uprist', 'upstir'], - 'spun': ['snup', 'spun'], - 'spunkie': ['spunkie', 'unspike'], - 'spuriae': ['spuriae', 'uparise', 'upraise'], - 'spurl': ['slurp', 'spurl'], - 'spurlet': ['purslet', 'spurlet', 'spurtle'], - 'spurn': ['snurp', 'spurn'], - 'spurt': ['spurt', 'turps'], - 'spurtive': ['spurtive', 'upstrive'], - 'spurtle': ['purslet', 'spurlet', 'spurtle'], - 'sputa': ['sputa', 'staup', 'stupa'], - 'sputumary': ['sputumary', 'sumptuary'], - 'sputumous': ['sputumous', 'sumptuous'], - 'spyer': ['pryse', 'spyer'], - 'spyros': ['prossy', 'spyros'], - 'squail': ['squail', 'squali'], - 'squali': ['squail', 'squali'], - 'squamatine': ['antimasque', 'squamatine'], - 'squame': ['masque', 'squame', 'squeam'], - 'squameous': ['squameous', 'squeamous'], - 'squamopetrosal': ['petrosquamosal', 'squamopetrosal'], - 'squamosoparietal': ['parietosquamosal', 'squamosoparietal'], - 'squareman': ['marquesan', 'squareman'], - 'squeaker': ['resqueak', 'squeaker'], - 'squeal': ['lasque', 'squeal'], - 'squeam': ['masque', 'squame', 'squeam'], - 'squeamous': ['squameous', 'squeamous'], - 'squillian': ['nisqualli', 'squillian'], - 'squire': ['risque', 'squire'], - 'squiret': ['querist', 'squiret'], - 'squit': ['quits', 'squit'], - 'sramana': ['ramanas', 'sramana'], - 'sri': ['sir', 'sri'], - 'srivatsan': ['ravissant', 'srivatsan'], - 'ssi': ['sis', 'ssi'], - 'ssu': ['ssu', 'sus'], - 'staab': ['basta', 'staab'], - 'stab': ['bast', 'bats', 'stab'], - 'stabile': ['astilbe', 'bestial', 'blastie', 'stabile'], - 'stable': ['ablest', 'stable', 'tables'], - 'stableful': ['bullfeast', 'stableful'], - 'stabler': ['blaster', 'reblast', 'stabler'], - 'stabling': ['blasting', 'stabling'], - 'stably': ['blasty', 'stably'], - 'staccato': ['staccato', 'stoccata'], - 'stacey': ['cytase', 'stacey'], - 'stacher': ['stacher', 'thraces'], - 'stacker': ['restack', 'stacker'], - 'stackman': ['stackman', 'tacksman'], - 'stacy': ['stacy', 'styca'], - 'stade': ['sedat', 'stade', 'stead'], - 'stadic': ['dicast', 'stadic'], - 'stadium': ['dumaist', 'stadium'], - 'staffer': ['restaff', 'staffer'], - 'stag': ['gast', 'stag'], - 'stager': ['gaster', 'stager'], - 'stagily': ['stagily', 'stygial'], - 'stagnation': ['antagonist', 'stagnation'], - 'stagnum': ['mustang', 'stagnum'], - 'stain': ['saint', 'satin', 'stain'], - 'stainable': ['balanites', 'basaltine', 'stainable'], - 'stainer': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'], - 'stainful': ['inflatus', 'stainful'], - 'stainless': ['saintless', 'saltiness', 'slatiness', 'stainless'], - 'staio': ['sitao', 'staio'], - 'stair': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'staircase': ['caesarist', 'staircase'], - 'staired': ['astride', 'diaster', 'disrate', 'restiad', 'staired'], - 'staithman': ['staithman', 'thanatism'], - 'staiver': ['staiver', 'taivers'], - 'stake': ['skate', 'stake', 'steak'], - 'staker': ['skater', 'staker', 'strake', 'streak', 'tasker'], - 'stalagmitic': ['stalagmitic', 'stigmatical'], - 'stale': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'staling': ['anglist', 'lasting', 'salting', 'slating', 'staling'], - 'stalker': ['sklater', 'stalker'], - 'staller': ['staller', 'stellar'], - 'stam': ['mast', 'mats', 'stam'], - 'stamen': ['mantes', 'stamen'], - 'stamin': ['manist', 'mantis', 'matins', 'stamin'], - 'stamina': ['amanist', 'stamina'], - 'staminal': ['staminal', 'tailsman', 'talisman'], - 'staminate': ['emanatist', 'staminate', 'tasmanite'], - 'stamineous': ['soumansite', 'stamineous'], - 'staminode': ['ademonist', 'demoniast', 'staminode'], - 'stammer': ['stammer', 'stremma'], - 'stampede': ['stampede', 'stepdame'], - 'stamper': ['restamp', 'stamper'], - 'stampian': ['mainpast', 'mantispa', 'panamist', 'stampian'], - 'stan': ['nast', 'sant', 'stan'], - 'stance': ['ascent', 'secant', 'stance'], - 'stanch': ['chanst', 'snatch', 'stanch'], - 'stanchable': ['snatchable', 'stanchable'], - 'stancher': ['resnatch', 'snatcher', 'stancher'], - 'stand': ['dasnt', 'stand'], - 'standage': ['dagestan', 'standage'], - 'standee': ['edestan', 'standee'], - 'stander': ['stander', 'sternad'], - 'standout': ['outstand', 'standout'], - 'standstill': ['standstill', 'stillstand'], - 'stane': ['antes', 'nates', 'stane', 'stean'], - 'stang': ['angst', 'stang', 'tangs'], - 'stangeria': ['agrestian', 'gerastian', 'stangeria'], - 'stanine': ['ensaint', 'stanine'], - 'stanly': ['nylast', 'stanly'], - 'stanno': ['santon', 'sonant', 'stanno'], - 'stap': ['past', 'spat', 'stap', 'taps'], - 'staple': ['pastel', 'septal', 'staple'], - 'stapler': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'], - 'stapling': ['spatling', 'stapling'], - 'star': ['sart', 'star', 'stra', 'tars', 'tsar'], - 'starch': ['scarth', 'scrath', 'starch'], - 'stardom': ['stardom', 'tsardom'], - 'stare': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'], - 'staree': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'starer': ['arrest', 'astrer', 'raster', 'starer'], - 'starful': ['flustra', 'starful'], - 'staring': ['gastrin', 'staring'], - 'staringly': ['staringly', 'strayling'], - 'stark': ['karst', 'skart', 'stark'], - 'starky': ['starky', 'straky'], - 'starlet': ['rattles', 'slatter', 'starlet', 'startle'], - 'starlit': ['starlit', 'trisalt'], - 'starlite': ['starlite', 'taistrel'], - 'starnel': ['saltern', 'starnel', 'sternal'], - 'starnie': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'], - 'starnose': ['assentor', 'essorant', 'starnose'], - 'starship': ['starship', 'tsarship'], - 'starshot': ['shotstar', 'starshot'], - 'starter': ['restart', 'starter'], - 'startle': ['rattles', 'slatter', 'starlet', 'startle'], - 'starve': ['starve', 'staver', 'strave', 'tavers', 'versta'], - 'starwise': ['starwise', 'waitress'], - 'stary': ['satyr', 'stary', 'stray', 'trasy'], - 'stases': ['assets', 'stases'], - 'stasis': ['assist', 'stasis'], - 'statable': ['statable', 'tastable'], - 'state': ['state', 'taste', 'tates', 'testa'], - 'stated': ['stated', 'tasted'], - 'stateful': ['stateful', 'tasteful'], - 'statefully': ['statefully', 'tastefully'], - 'statefulness': ['statefulness', 'tastefulness'], - 'stateless': ['stateless', 'tasteless'], - 'statelich': ['athletics', 'statelich'], - 'stately': ['stately', 'stylate'], - 'statement': ['statement', 'testament'], - 'stater': ['stater', 'taster', 'testar'], - 'statesider': ['dissertate', 'statesider'], - 'static': ['static', 'sticta'], - 'statice': ['etacist', 'statice'], - 'stational': ['saltation', 'stational'], - 'stationarily': ['antiroyalist', 'stationarily'], - 'stationer': ['nitrosate', 'stationer'], - 'statoscope': ['septocosta', 'statoscope'], - 'statue': ['astute', 'statue'], - 'stature': ['stature', 'stauter'], - 'staumer': ['staumer', 'strumae'], - 'staun': ['staun', 'suant'], - 'staunch': ['canthus', 'staunch'], - 'staup': ['sputa', 'staup', 'stupa'], - 'staurion': ['staurion', 'sutorian'], - 'stauter': ['stature', 'stauter'], - 'stave': ['stave', 'vesta'], - 'staver': ['starve', 'staver', 'strave', 'tavers', 'versta'], - 'staw': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'], - 'stawn': ['stawn', 'wasnt'], - 'stayable': ['stayable', 'teasably'], - 'stayed': ['stayed', 'steady'], - 'stayer': ['atresy', 'estray', 'reasty', 'stayer'], - 'staynil': ['nastily', 'saintly', 'staynil'], - 'stchi': ['sitch', 'stchi', 'stich'], - 'stead': ['sedat', 'stade', 'stead'], - 'steady': ['stayed', 'steady'], - 'steak': ['skate', 'stake', 'steak'], - 'steal': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'stealer': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'], - 'stealing': ['galenist', 'genitals', 'stealing'], - 'stealy': ['alytes', 'astely', 'lysate', 'stealy'], - 'steam': ['steam', 'stema'], - 'steaming': ['misagent', 'steaming'], - 'stean': ['antes', 'nates', 'stane', 'stean'], - 'stearic': ['atresic', 'stearic'], - 'stearin': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'], - 'stearone': ['orestean', 'resonate', 'stearone'], - 'stearyl': ['saltery', 'stearyl'], - 'steatin': ['atenist', 'instate', 'satient', 'steatin'], - 'steatoma': ['atmostea', 'steatoma'], - 'steatornis': ['steatornis', 'treasonist'], - 'stech': ['chest', 'stech'], - 'steek': ['keest', 'skeet', 'skete', 'steek'], - 'steel': ['sleet', 'slete', 'steel', 'stele'], - 'steeler': ['reestle', 'resteel', 'steeler'], - 'steeliness': ['sleetiness', 'steeliness'], - 'steeling': ['sleeting', 'steeling'], - 'steelproof': ['sleetproof', 'steelproof'], - 'steely': ['sleety', 'steely'], - 'steen': ['steen', 'teens', 'tense'], - 'steep': ['peste', 'steep'], - 'steeper': ['estrepe', 'resteep', 'steeper'], - 'steepy': ['steepy', 'typees'], - 'steer': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'steerer': ['reester', 'steerer'], - 'steering': ['energist', 'steering'], - 'steerling': ['esterling', 'steerling'], - 'steeve': ['steeve', 'vestee'], - 'stefan': ['fasten', 'nefast', 'stefan'], - 'steg': ['gest', 'steg'], - 'stegodon': ['dogstone', 'stegodon'], - 'steid': ['deist', 'steid'], - 'steigh': ['gesith', 'steigh'], - 'stein': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'], - 'stela': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'stelae': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'], - 'stelai': ['isleta', 'litsea', 'salite', 'stelai'], - 'stelar': ['laster', - 'lastre', - 'rastle', - 'relast', - 'resalt', - 'salter', - 'slater', - 'stelar'], - 'stele': ['sleet', 'slete', 'steel', 'stele'], - 'stella': ['sallet', 'stella', 'talles'], - 'stellar': ['staller', 'stellar'], - 'stellaria': ['lateralis', 'stellaria'], - 'stema': ['steam', 'stema'], - 'stemlike': ['meletski', 'stemlike'], - 'sten': ['nest', 'sent', 'sten'], - 'stenar': ['astern', 'enstar', 'stenar', 'sterna'], - 'stencil': ['lentisc', 'scintle', 'stencil'], - 'stenciler': ['crestline', 'stenciler'], - 'stenion': ['stenion', 'tension'], - 'steno': ['onset', 'seton', 'steno', 'stone'], - 'stenopaic': ['aspection', 'stenopaic'], - 'stenosis': ['sisseton', 'stenosis'], - 'stenotic': ['stenotic', 'tonetics'], - 'stentor': ['snotter', 'stentor', 'torsten'], - 'step': ['pest', 'sept', 'spet', 'step'], - 'stepaunt': ['nettapus', 'stepaunt'], - 'stepbairn': ['breastpin', 'stepbairn'], - 'stepdame': ['stampede', 'stepdame'], - 'stephana': ['pheasant', 'stephana'], - 'stephanic': ['cathepsin', 'stephanic'], - 'steplike': ['spikelet', 'steplike'], - 'sterculia': ['sterculia', 'urticales'], - 'stere': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'stereograph': ['preshortage', 'stereograph'], - 'stereometric': ['crestmoreite', 'stereometric'], - 'stereophotograph': ['photostereograph', 'stereophotograph'], - 'stereotelescope': ['stereotelescope', 'telestereoscope'], - 'stereotomic': ['osteometric', 'stereotomic'], - 'stereotomical': ['osteometrical', 'stereotomical'], - 'stereotomy': ['osteometry', 'stereotomy'], - 'steric': ['certis', 'steric'], - 'sterigma': ['gemarist', 'magister', 'sterigma'], - 'sterigmata': ['magistrate', 'sterigmata'], - 'sterile': ['leister', 'sterile'], - 'sterilize': ['listerize', 'sterilize'], - 'sterin': ['estrin', 'insert', 'sinter', 'sterin', 'triens'], - 'sterlet': ['settler', 'sterlet', 'trestle'], - 'stern': ['ernst', 'stern'], - 'sterna': ['astern', 'enstar', 'stenar', 'sterna'], - 'sternad': ['stander', 'sternad'], - 'sternage': ['estrange', 'segreant', 'sergeant', 'sternage'], - 'sternal': ['saltern', 'starnel', 'sternal'], - 'sternalis': ['sternalis', 'trainless'], - 'sternite': ['insetter', 'interest', 'interset', 'sternite'], - 'sterno': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'], - 'sternocostal': ['costosternal', 'sternocostal'], - 'sternovertebral': ['sternovertebral', 'vertebrosternal'], - 'stero': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'], - 'steroid': ['oestrid', 'steroid', 'storied'], - 'sterol': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'], - 'stert': ['stert', 'stret', 'trest'], - 'sterve': ['revest', 'servet', 'sterve', 'verset', 'vester'], - 'stet': ['sett', 'stet', 'test'], - 'stevan': ['stevan', 'svante'], - 'stevel': ['stevel', 'svelte'], - 'stevia': ['itaves', 'stevia'], - 'stew': ['stew', 'west'], - 'stewart': ['stewart', 'swatter'], - 'stewed': ['stewed', 'wedset'], - 'stewy': ['stewy', 'westy'], - 'stey': ['stey', 'yest'], - 'sthenia': ['sethian', 'sthenia'], - 'stich': ['sitch', 'stchi', 'stich'], - 'stichid': ['distich', 'stichid'], - 'sticker': ['rickets', 'sticker'], - 'stickler': ['stickler', 'strickle'], - 'sticta': ['static', 'sticta'], - 'stife': ['feist', 'stife'], - 'stiffener': ['restiffen', 'stiffener'], - 'stifle': ['itself', 'stifle'], - 'stifler': ['slifter', 'stifler'], - 'stigmai': ['imagist', 'stigmai'], - 'stigmatical': ['stalagmitic', 'stigmatical'], - 'stilbene': ['nebelist', 'stilbene', 'tensible'], - 'stile': ['islet', 'istle', 'slite', 'stile'], - 'stileman': ['mentalis', 'smaltine', 'stileman'], - 'stillage': ['legalist', 'stillage'], - 'stiller': ['stiller', 'trellis'], - 'stillstand': ['standstill', 'stillstand'], - 'stilted': ['slitted', 'stilted'], - 'stilter': ['litster', 'slitter', 'stilter', 'testril'], - 'stilty': ['slitty', 'stilty'], - 'stim': ['mist', 'smit', 'stim'], - 'stime': ['metis', 'smite', 'stime', 'times'], - 'stimulancy': ['stimulancy', 'unmystical'], - 'stimy': ['misty', 'stimy'], - 'stine': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'], - 'stinge': ['ingest', 'signet', 'stinge'], - 'stinger': ['resting', 'stinger'], - 'stinker': ['kirsten', 'kristen', 'stinker'], - 'stinkstone': ['knottiness', 'stinkstone'], - 'stinted': ['dentist', 'distent', 'stinted'], - 'stion': ['sinto', 'stion'], - 'stipa': ['piast', 'stipa', 'tapis'], - 'stipe': ['septi', 'spite', 'stipe'], - 'stipel': ['pistle', 'stipel'], - 'stippen': ['snippet', 'stippen'], - 'stipula': ['paulist', 'stipula'], - 'stir': ['rist', 'stir'], - 'stirk': ['skirt', 'stirk'], - 'stirp': ['spirt', 'sprit', 'stirp', 'strip'], - 'stitcher': ['restitch', 'stitcher'], - 'stiver': ['stiver', 'strive', 'verist'], - 'stoa': ['oast', 'stoa', 'taos'], - 'stoach': ['stoach', 'stocah'], - 'stoat': ['stoat', 'toast'], - 'stoater': ['retoast', 'rosetta', 'stoater', 'toaster'], - 'stocah': ['stoach', 'stocah'], - 'stoccata': ['staccato', 'stoccata'], - 'stocker': ['restock', 'stocker'], - 'stoep': ['estop', 'stoep', 'stope'], - 'stof': ['soft', 'stof'], - 'stog': ['stog', 'togs'], - 'stogie': ['egoist', 'stogie'], - 'stoic': ['ostic', 'sciot', 'stoic'], - 'stoically': ['callosity', 'stoically'], - 'stoker': ['stoker', 'stroke'], - 'stolae': ['lotase', 'osteal', 'solate', 'stolae', 'talose'], - 'stole': ['slote', 'stole'], - 'stoled': ['sloted', 'stoled'], - 'stolen': ['solent', 'stolen', 'telson'], - 'stoma': ['atmos', 'stoma', 'tomas'], - 'stomatode': ['mootstead', 'stomatode'], - 'stomatomy': ['mastotomy', 'stomatomy'], - 'stomatopoda': ['podostomata', 'stomatopoda'], - 'stomatopodous': ['podostomatous', 'stomatopodous'], - 'stomper': ['pomster', 'stomper'], - 'stone': ['onset', 'seton', 'steno', 'stone'], - 'stonebird': ['birdstone', 'stonebird'], - 'stonebreak': ['breakstone', 'stonebreak'], - 'stoned': ['doesnt', 'stoned'], - 'stonegall': ['gallstone', 'stonegall'], - 'stonehand': ['handstone', 'stonehand'], - 'stonehead': ['headstone', 'stonehead'], - 'stonen': ['sonnet', 'stonen', 'tenson'], - 'stoner': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'], - 'stonewood': ['stonewood', 'woodstone'], - 'stong': ['stong', 'tongs'], - 'stonker': ['stonker', 'storken'], - 'stoof': ['foots', 'sfoot', 'stoof'], - 'stool': ['sotol', 'stool'], - 'stoon': ['snoot', 'stoon'], - 'stoop': ['spoot', 'stoop'], - 'stop': ['post', 'spot', 'stop', 'tops'], - 'stopback': ['backstop', 'stopback'], - 'stope': ['estop', 'stoep', 'stope'], - 'stoper': ['poster', 'presto', 'repost', 'respot', 'stoper'], - 'stoping': ['posting', 'stoping'], - 'stopless': ['postless', 'spotless', 'stopless'], - 'stoplessness': ['spotlessness', 'stoplessness'], - 'stoppeur': ['pteropus', 'stoppeur'], - 'storable': ['sortable', 'storable'], - 'storage': ['storage', 'tagsore'], - 'store': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'], - 'storeen': ['enstore', 'estrone', 'storeen', 'tornese'], - 'storeman': ['monaster', 'monstera', 'nearmost', 'storeman'], - 'storer': ['resort', 'roster', 'sorter', 'storer'], - 'storeship': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'], - 'storesman': ['nosesmart', 'storesman'], - 'storge': ['groset', 'storge'], - 'storiate': ['astroite', 'ostraite', 'storiate'], - 'storied': ['oestrid', 'steroid', 'storied'], - 'storier': ['roister', 'storier'], - 'stork': ['stork', 'torsk'], - 'storken': ['stonker', 'storken'], - 'storm': ['storm', 'strom'], - 'stormwind': ['stormwind', 'windstorm'], - 'story': ['sorty', 'story', 'stroy'], - 'stot': ['stot', 'tost'], - 'stotter': ['stotter', 'stretto'], - 'stoun': ['notus', 'snout', 'stoun', 'tonus'], - 'stoup': ['spout', 'stoup'], - 'stour': ['roust', 'rusot', 'stour', 'sutor', 'torus'], - 'stouring': ['rousting', 'stouring'], - 'stoutly': ['stoutly', 'tylotus'], - 'stove': ['ovest', 'stove'], - 'stover': ['stover', 'strove'], - 'stow': ['sowt', 'stow', 'swot', 'wots'], - 'stowable': ['bestowal', 'stowable'], - 'stower': ['restow', 'stower', 'towser', 'worset'], - 'stra': ['sart', 'star', 'stra', 'tars', 'tsar'], - 'strad': ['darst', 'darts', 'strad'], - 'stradine': ['stradine', 'strained', 'tarnside'], - 'strae': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'], - 'strafe': ['farset', 'faster', 'strafe'], - 'stragular': ['gastrular', 'stragular'], - 'straighten': ['shattering', 'straighten'], - 'straightener': ['restraighten', 'straightener'], - 'straightup': ['straightup', 'upstraight'], - 'straik': ['rastik', 'sarkit', 'straik'], - 'strain': ['instar', 'santir', 'strain'], - 'strained': ['stradine', 'strained', 'tarnside'], - 'strainer': ['restrain', 'strainer', 'transire'], - 'strainerman': ['strainerman', 'transmarine'], - 'straint': ['straint', 'transit', 'tristan'], - 'strait': ['artist', 'strait', 'strati'], - 'strake': ['skater', 'staker', 'strake', 'streak', 'tasker'], - 'straky': ['starky', 'straky'], - 'stram': ['smart', 'stram'], - 'strange': ['angster', 'garnets', 'nagster', 'strange'], - 'strangles': ['slangster', 'strangles'], - 'strap': ['spart', 'sprat', 'strap', 'traps'], - 'strapless': ['psaltress', 'strapless'], - 'strata': ['astart', 'strata'], - 'strategi': ['strategi', 'strigate'], - 'strath': ['strath', 'thrast'], - 'strati': ['artist', 'strait', 'strati'], - 'stratic': ['astrict', 'cartist', 'stratic'], - 'stratonic': ['narcotist', 'stratonic'], - 'stratonical': ['intracostal', 'stratonical'], - 'strave': ['starve', 'staver', 'strave', 'tavers', 'versta'], - 'straw': ['straw', 'swart', 'warst'], - 'strawy': ['strawy', 'swarty'], - 'stray': ['satyr', 'stary', 'stray', 'trasy'], - 'strayling': ['staringly', 'strayling'], - 'stre': ['rest', 'sert', 'stre'], - 'streak': ['skater', 'staker', 'strake', 'streak', 'tasker'], - 'streakily': ['satyrlike', 'streakily'], - 'stream': ['martes', 'master', 'remast', 'stream'], - 'streamer': ['masterer', 'restream', 'streamer'], - 'streamful': ['masterful', 'streamful'], - 'streamhead': ['headmaster', 'headstream', 'streamhead'], - 'streaming': ['germanist', 'streaming'], - 'streamless': ['masterless', 'streamless'], - 'streamlike': ['masterlike', 'streamlike'], - 'streamline': ['eternalism', 'streamline'], - 'streamling': ['masterling', 'streamling'], - 'streamside': ['mediatress', 'streamside'], - 'streamwort': ['masterwort', 'streamwort'], - 'streamy': ['mastery', 'streamy'], - 'stree': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'streek': ['streek', 'streke'], - 'streel': ['lester', 'selter', 'streel'], - 'streen': ['ernest', 'nester', 'resent', 'streen'], - 'streep': ['pester', 'preset', 'restep', 'streep'], - 'street': ['retest', 'setter', 'street', 'tester'], - 'streetcar': ['scatterer', 'streetcar'], - 'streke': ['streek', 'streke'], - 'strelitz': ['strelitz', 'streltzi'], - 'streltzi': ['strelitz', 'streltzi'], - 'stremma': ['stammer', 'stremma'], - 'strengthener': ['restrengthen', 'strengthener'], - 'strepen': ['penster', 'present', 'serpent', 'strepen'], - 'strepera': ['pasterer', 'strepera'], - 'strepor': ['sporter', 'strepor'], - 'strepsinema': ['esperantism', 'strepsinema'], - 'streptothricosis': ['streptothricosis', 'streptotrichosis'], - 'streptotrichosis': ['streptothricosis', 'streptotrichosis'], - 'stresser': ['restress', 'stresser'], - 'stret': ['stert', 'stret', 'trest'], - 'stretcher': ['restretch', 'stretcher'], - 'stretcherman': ['stretcherman', 'trenchmaster'], - 'stretto': ['stotter', 'stretto'], - 'strew': ['strew', 'trews', 'wrest'], - 'strewer': ['strewer', 'wrester'], - 'strey': ['resty', 'strey'], - 'streyne': ['streyne', 'styrene', 'yestern'], - 'stria': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'striae': ['satire', 'striae'], - 'strial': ['latris', 'strial'], - 'striatal': ['altarist', 'striatal'], - 'striate': ['artiste', 'striate'], - 'striated': ['distater', 'striated'], - 'strich': ['christ', 'strich'], - 'strickle': ['stickler', 'strickle'], - 'stride': ['driest', 'stride'], - 'strife': ['fister', 'resift', 'sifter', 'strife'], - 'strig': ['grist', 'grits', 'strig'], - 'striga': ['gratis', 'striga'], - 'strigae': ['seagirt', 'strigae'], - 'strigate': ['strategi', 'strigate'], - 'striges': ['striges', 'tigress'], - 'strigulose': ['sortilegus', 'strigulose'], - 'strike': ['skiter', 'strike'], - 'striker': ['skirret', 'skirter', 'striker'], - 'striking': ['skirting', 'striking'], - 'strikingly': ['skirtingly', 'strikingly'], - 'stringer': ['restring', 'ringster', 'stringer'], - 'strinkle': ['sklinter', 'strinkle'], - 'striola': ['aristol', 'oralist', 'ortalis', 'striola'], - 'striolae': ['soterial', 'striolae'], - 'strip': ['spirt', 'sprit', 'stirp', 'strip'], - 'stripe': ['priest', 'pteris', 'sprite', 'stripe'], - 'stripeless': ['priestless', 'stripeless'], - 'striper': ['restrip', 'striper'], - 'striplet': ['splitter', 'striplet'], - 'strippit': ['strippit', 'trippist'], - 'strit': ['strit', 'trist'], - 'strive': ['stiver', 'strive', 'verist'], - 'stroam': ['stroam', 'stroma'], - 'strobila': ['laborist', 'strobila'], - 'strobilae': ['sobralite', 'strobilae'], - 'strobilate': ['brasiletto', 'strobilate'], - 'strode': ['sorted', 'strode'], - 'stroke': ['stoker', 'stroke'], - 'strom': ['storm', 'strom'], - 'stroma': ['stroam', 'stroma'], - 'stromatic': ['microstat', 'stromatic'], - 'strone': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'], - 'stronghead': ['headstrong', 'stronghead'], - 'strontian': ['strontian', 'trisonant'], - 'strontianite': ['interstation', 'strontianite'], - 'strop': ['sport', 'strop'], - 'strophaic': ['actorship', 'strophaic'], - 'strophiolate': ['strophiolate', 'theatropolis'], - 'strophomena': ['nephrostoma', 'strophomena'], - 'strounge': ['strounge', 'sturgeon'], - 'stroup': ['sprout', 'stroup', 'stupor'], - 'strove': ['stover', 'strove'], - 'strow': ['strow', 'worst'], - 'stroy': ['sorty', 'story', 'stroy'], - 'strub': ['burst', 'strub'], - 'struck': ['struck', 'trucks'], - 'strue': ['serut', 'strue', 'turse', 'uster'], - 'strumae': ['staumer', 'strumae'], - 'strut': ['strut', 'sturt', 'trust'], - 'struth': ['struth', 'thrust'], - 'struthian': ['struthian', 'unathirst'], - 'stu': ['stu', 'ust'], - 'stuart': ['astrut', 'rattus', 'stuart'], - 'stub': ['bust', 'stub'], - 'stuber': ['berust', 'buster', 'stuber'], - 'stud': ['dust', 'stud'], - 'studdie': ['studdie', 'studied'], - 'student': ['student', 'stunted'], - 'studia': ['aditus', 'studia'], - 'studied': ['studdie', 'studied'], - 'study': ['dusty', 'study'], - 'stue': ['stue', 'suet'], - 'stuffer': ['restuff', 'stuffer'], - 'stug': ['gust', 'stug'], - 'stuiver': ['revuist', 'stuiver'], - 'stum': ['must', 'smut', 'stum'], - 'stumer': ['muster', 'sertum', 'stumer'], - 'stumper': ['stumper', 'sumpter'], - 'stun': ['stun', 'sunt', 'tsun'], - 'stunner': ['stunner', 'unstern'], - 'stunted': ['student', 'stunted'], - 'stunter': ['entrust', 'stunter', 'trusten'], - 'stupa': ['sputa', 'staup', 'stupa'], - 'stupe': ['setup', 'stupe', 'upset'], - 'stupor': ['sprout', 'stroup', 'stupor'], - 'stuprate': ['stuprate', 'upstater'], - 'stupulose': ['pustulose', 'stupulose'], - 'sturdiness': ['sturdiness', 'undistress'], - 'sturgeon': ['strounge', 'sturgeon'], - 'sturine': ['intruse', 'sturine'], - 'sturionine': ['reunionist', 'sturionine'], - 'sturmian': ['naturism', 'sturmian', 'turanism'], - 'sturnidae': ['disnature', 'sturnidae', 'truandise'], - 'sturninae': ['neustrian', 'saturnine', 'sturninae'], - 'sturnus': ['sturnus', 'untruss'], - 'sturt': ['strut', 'sturt', 'trust'], - 'sturtin': ['intrust', 'sturtin'], - 'stut': ['stut', 'tuts'], - 'stutter': ['stutter', 'tutster'], - 'styan': ['nasty', 'styan', 'tansy'], - 'styca': ['stacy', 'styca'], - 'stycerin': ['nycteris', 'stycerin'], - 'stygial': ['stagily', 'stygial'], - 'stylate': ['stately', 'stylate'], - 'styledom': ['modestly', 'styledom'], - 'stylite': ['stylite', 'testily'], - 'styloid': ['odylist', 'styloid'], - 'stylometer': ['metrostyle', 'stylometer'], - 'stylopidae': ['ideoplasty', 'stylopidae'], - 'styphelia': ['physalite', 'styphelia'], - 'styrene': ['streyne', 'styrene', 'yestern'], - 'styrol': ['sortly', 'styrol'], - 'stythe': ['stythe', 'tethys'], - 'styx': ['styx', 'xyst'], - 'suability': ['suability', 'usability'], - 'suable': ['suable', 'usable'], - 'sualocin': ['sualocin', 'unsocial'], - 'suant': ['staun', 'suant'], - 'suasible': ['basileus', 'issuable', 'suasible'], - 'suasion': ['sanious', 'suasion'], - 'suasory': ['ossuary', 'suasory'], - 'suave': ['sauve', 'suave'], - 'sub': ['bus', 'sub'], - 'subah': ['shuba', 'subah'], - 'subalpine': ['subalpine', 'unspiable'], - 'subanal': ['balanus', 'nabalus', 'subanal'], - 'subcaecal': ['accusable', 'subcaecal'], - 'subcantor': ['obscurant', 'subcantor'], - 'subcapsular': ['subcapsular', 'subscapular'], - 'subcenter': ['rubescent', 'subcenter'], - 'subchela': ['chasuble', 'subchela'], - 'subcool': ['colobus', 'subcool'], - 'subcortical': ['scorbutical', 'subcortical'], - 'subcortically': ['scorbutically', 'subcortically'], - 'subdealer': ['subdealer', 'subleader'], - 'subdean': ['subdean', 'unbased'], - 'subdeltaic': ['discutable', 'subdeltaic', 'subdialect'], - 'subdialect': ['discutable', 'subdeltaic', 'subdialect'], - 'subdie': ['busied', 'subdie'], - 'suber': ['burse', 'rebus', 'suber'], - 'subessential': ['subessential', 'suitableness'], - 'subherd': ['brushed', 'subherd'], - 'subhero': ['herbous', 'subhero'], - 'subhuman': ['subhuman', 'unambush'], - 'subimago': ['bigamous', 'subimago'], - 'sublanate': ['sublanate', 'unsatable'], - 'sublate': ['balteus', 'sublate'], - 'sublative': ['sublative', 'vestibula'], - 'subleader': ['subdealer', 'subleader'], - 'sublet': ['bustle', 'sublet', 'subtle'], - 'sublinear': ['insurable', 'sublinear'], - 'sublumbar': ['sublumbar', 'subumbral'], - 'submaid': ['misdaub', 'submaid'], - 'subman': ['busman', 'subman'], - 'submarine': ['semiurban', 'submarine'], - 'subnarcotic': ['obscurantic', 'subnarcotic'], - 'subnitrate': ['subnitrate', 'subtertian'], - 'subnote': ['subnote', 'subtone', 'unbesot'], - 'suboval': ['suboval', 'subvola'], - 'subpeltate': ['subpeltate', 'upsettable'], - 'subplat': ['subplat', 'upblast'], - 'subra': ['abrus', 'bursa', 'subra'], - 'subscapular': ['subcapsular', 'subscapular'], - 'subserve': ['subserve', 'subverse'], - 'subsider': ['disburse', 'subsider'], - 'substernal': ['substernal', 'turbanless'], - 'substraction': ['obscurantist', 'substraction'], - 'subtack': ['sackbut', 'subtack'], - 'subterraneal': ['subterraneal', 'unarrestable'], - 'subtertian': ['subnitrate', 'subtertian'], - 'subtle': ['bustle', 'sublet', 'subtle'], - 'subtone': ['subnote', 'subtone', 'unbesot'], - 'subtread': ['daubster', 'subtread'], - 'subtutor': ['outburst', 'subtutor'], - 'subulate': ['baetulus', 'subulate'], - 'subumbral': ['sublumbar', 'subumbral'], - 'subverse': ['subserve', 'subverse'], - 'subvola': ['suboval', 'subvola'], - 'succade': ['accused', 'succade'], - 'succeeder': ['resucceed', 'succeeder'], - 'succin': ['cnicus', 'succin'], - 'succinate': ['encaustic', 'succinate'], - 'succor': ['crocus', 'succor'], - 'such': ['cush', 'such'], - 'suck': ['cusk', 'suck'], - 'sucker': ['resuck', 'sucker'], - 'suckling': ['lungsick', 'suckling'], - 'suclat': ['scutal', 'suclat'], - 'sucramine': ['muscarine', 'sucramine'], - 'sucre': ['cruse', 'curse', 'sucre'], - 'suction': ['cotinus', 'suction', 'unstoic'], - 'suctional': ['suctional', 'sulcation', 'unstoical'], - 'suctoria': ['cotarius', 'octarius', 'suctoria'], - 'suctorial': ['ocularist', 'suctorial'], - 'sud': ['sud', 'uds'], - 'sudamen': ['medusan', 'sudamen'], - 'sudan': ['sudan', 'unsad'], - 'sudanese': ['danseuse', 'sudanese'], - 'sudani': ['sudani', 'unsaid'], - 'sudation': ['adustion', 'sudation'], - 'sudic': ['scudi', 'sudic'], - 'sudra': ['rudas', 'sudra'], - 'sue': ['sue', 'use'], - 'suer': ['ruse', 'suer', 'sure', 'user'], - 'suet': ['stue', 'suet'], - 'sufferer': ['resuffer', 'sufferer'], - 'sufflate': ['feastful', 'sufflate'], - 'suffocate': ['offuscate', 'suffocate'], - 'suffocation': ['offuscation', 'suffocation'], - 'sugamo': ['amusgo', 'sugamo'], - 'sugan': ['agnus', 'angus', 'sugan'], - 'sugar': ['argus', 'sugar'], - 'sugared': ['desugar', 'sugared'], - 'sugarlike': ['arguslike', 'sugarlike'], - 'suggester': ['resuggest', 'suggester'], - 'suggestionism': ['missuggestion', 'suggestionism'], - 'sugh': ['gush', 'shug', 'sugh'], - 'suidae': ['asideu', 'suidae'], - 'suimate': ['metusia', 'suimate', 'timaeus'], - 'suina': ['ianus', 'suina'], - 'suint': ['sintu', 'suint'], - 'suiones': ['sinuose', 'suiones'], - 'suist': ['situs', 'suist'], - 'suitable': ['sabulite', 'suitable'], - 'suitableness': ['subessential', 'suitableness'], - 'suitor': ['suitor', 'tursio'], - 'sula': ['saul', 'sula'], - 'sulcal': ['callus', 'sulcal'], - 'sulcar': ['cursal', 'sulcar'], - 'sulcation': ['suctional', 'sulcation', 'unstoical'], - 'suld': ['slud', 'suld'], - 'sulfamide': ['feudalism', 'sulfamide'], - 'sulfonium': ['fulminous', 'sulfonium'], - 'sulfuret': ['frustule', 'sulfuret'], - 'sulk': ['lusk', 'sulk'], - 'sulka': ['klaus', 'lukas', 'sulka'], - 'sulky': ['lusky', 'sulky'], - 'sulphinide': ['delphinius', 'sulphinide'], - 'sulphohydrate': ['hydrosulphate', 'sulphohydrate'], - 'sulphoproteid': ['protosulphide', 'sulphoproteid'], - 'sulphurea': ['elaphurus', 'sulphurea'], - 'sultan': ['sultan', 'unsalt'], - 'sultane': ['sultane', 'unslate'], - 'sultanian': ['annualist', 'sultanian'], - 'sultanin': ['insulant', 'sultanin'], - 'sultone': ['lentous', 'sultone'], - 'sultry': ['rustly', 'sultry'], - 'sum': ['mus', 'sum'], - 'sumac': ['camus', 'musca', 'scaum', 'sumac'], - 'sumak': ['kusam', 'sumak'], - 'sumatra': ['artamus', 'sumatra'], - 'sumerian': ['aneurism', 'arsenium', 'sumerian'], - 'sumitro': ['sumitro', 'tourism'], - 'summit': ['mutism', 'summit'], - 'summonable': ['somnambule', 'summonable'], - 'summoner': ['resummon', 'summoner'], - 'sumo': ['soum', 'sumo'], - 'sumpit': ['misput', 'sumpit'], - 'sumpitan': ['putanism', 'sumpitan'], - 'sumpter': ['stumper', 'sumpter'], - 'sumptuary': ['sputumary', 'sumptuary'], - 'sumptuous': ['sputumous', 'sumptuous'], - 'sunbeamed': ['sunbeamed', 'unembased'], - 'sundar': ['nardus', 'sundar', 'sundra'], - 'sundek': ['dusken', 'sundek'], - 'sundra': ['nardus', 'sundar', 'sundra'], - 'sung': ['snug', 'sung'], - 'sunil': ['linus', 'sunil'], - 'sunk': ['skun', 'sunk'], - 'sunlighted': ['sunlighted', 'unslighted'], - 'sunlit': ['insult', 'sunlit', 'unlist', 'unslit'], - 'sunni': ['sunni', 'unsin'], - 'sunray': ['sunray', 'surnay', 'synura'], - 'sunrise': ['russine', 'serinus', 'sunrise'], - 'sunshade': ['sunshade', 'unsashed'], - 'sunt': ['stun', 'sunt', 'tsun'], - 'sunup': ['sunup', 'upsun'], - 'sunweed': ['sunweed', 'unsewed'], - 'suomic': ['musico', 'suomic'], - 'sup': ['pus', 'sup'], - 'supa': ['apus', 'supa', 'upas'], - 'super': ['purse', 'resup', 'sprue', 'super'], - 'superable': ['perusable', 'superable'], - 'supercarpal': ['prescapular', 'supercarpal'], - 'superclaim': ['premusical', 'superclaim'], - 'supercontrol': ['preconsultor', 'supercontrol'], - 'supercool': ['escropulo', 'supercool'], - 'superheater': ['resuperheat', 'superheater'], - 'superideal': ['serpulidae', 'superideal'], - 'superintender': ['superintender', 'unenterprised'], - 'superline': ['serpuline', 'superline'], - 'supermoisten': ['sempiternous', 'supermoisten'], - 'supernacular': ['supernacular', 'supranuclear'], - 'supernal': ['purslane', 'serpulan', 'supernal'], - 'superoanterior': ['anterosuperior', 'superoanterior'], - 'superoposterior': ['posterosuperior', 'superoposterior'], - 'superpose': ['resuppose', 'superpose'], - 'superposition': ['resupposition', 'superposition'], - 'supersaint': ['presustain', 'puritaness', 'supersaint'], - 'supersalt': ['pertussal', 'supersalt'], - 'superservice': ['repercussive', 'superservice'], - 'supersonic': ['croupiness', 'percussion', 'supersonic'], - 'supertare': ['repasture', 'supertare'], - 'supertension': ['serpentinous', 'supertension'], - 'supertotal': ['supertotal', 'tetraplous'], - 'supertrain': ['rupestrian', 'supertrain'], - 'supinator': ['rainspout', 'supinator'], - 'supine': ['puisne', 'supine'], - 'supper': ['supper', 'uppers'], - 'supple': ['peplus', 'supple'], - 'suppletory': ['polypterus', 'suppletory'], - 'supplier': ['periplus', 'supplier'], - 'supporter': ['resupport', 'supporter'], - 'suppresser': ['resuppress', 'suppresser'], - 'suprahyoid': ['hyporadius', 'suprahyoid'], - 'supranuclear': ['supernacular', 'supranuclear'], - 'supreme': ['presume', 'supreme'], - 'sur': ['rus', 'sur', 'urs'], - 'sura': ['rusa', 'saur', 'sura', 'ursa', 'usar'], - 'surah': ['ashur', 'surah'], - 'surahi': ['shauri', 'surahi'], - 'sural': ['larus', 'sural', 'ursal'], - 'surat': ['astur', 'surat', 'sutra'], - 'surbase': ['rubasse', 'surbase'], - 'surbate': ['bursate', 'surbate'], - 'surcrue': ['crureus', 'surcrue'], - 'sure': ['ruse', 'suer', 'sure', 'user'], - 'suresh': ['rhesus', 'suresh'], - 'surette': ['surette', 'trustee'], - 'surge': ['grues', 'surge'], - 'surgent': ['gunster', 'surgent'], - 'surgeonship': ['springhouse', 'surgeonship'], - 'surgy': ['gyrus', 'surgy'], - 'suriana': ['saurian', 'suriana'], - 'surinam': ['surinam', 'uranism'], - 'surma': ['musar', 'ramus', 'rusma', 'surma'], - 'surmisant': ['saturnism', 'surmisant'], - 'surmise': ['misuser', 'surmise'], - 'surnap': ['surnap', 'unspar'], - 'surnay': ['sunray', 'surnay', 'synura'], - 'surprisement': ['surprisement', 'trumperiness'], - 'surrenderer': ['resurrender', 'surrenderer'], - 'surrogate': ['surrogate', 'urogaster'], - 'surrounder': ['resurround', 'surrounder'], - 'surya': ['saury', 'surya'], - 'sus': ['ssu', 'sus'], - 'susan': ['nasus', 'susan'], - 'suscept': ['suscept', 'suspect'], - 'susceptible': ['susceptible', 'suspectible'], - 'susceptor': ['spectrous', 'susceptor', 'suspector'], - 'susie': ['issue', 'susie'], - 'suspect': ['suscept', 'suspect'], - 'suspecter': ['resuspect', 'suspecter'], - 'suspectible': ['susceptible', 'suspectible'], - 'suspector': ['spectrous', 'susceptor', 'suspector'], - 'suspender': ['resuspend', 'suspender', 'unpressed'], - 'sustain': ['issuant', 'sustain'], - 'suther': ['reshut', 'suther', 'thurse', 'tusher'], - 'sutler': ['luster', 'result', 'rustle', 'sutler', 'ulster'], - 'suto': ['otus', 'oust', 'suto'], - 'sutor': ['roust', 'rusot', 'stour', 'sutor', 'torus'], - 'sutorian': ['staurion', 'sutorian'], - 'sutorious': ['sutorious', 'ustorious'], - 'sutra': ['astur', 'surat', 'sutra'], - 'suttin': ['suttin', 'tunist'], - 'suture': ['suture', 'uterus'], - 'svante': ['stevan', 'svante'], - 'svelte': ['stevel', 'svelte'], - 'swa': ['saw', 'swa', 'was'], - 'swage': ['swage', 'wages'], - 'swain': ['siwan', 'swain'], - 'swale': ['swale', 'sweal', 'wasel'], - 'swaler': ['swaler', 'warsel', 'warsle'], - 'swallet': ['setwall', 'swallet'], - 'swallo': ['sallow', 'swallo'], - 'swallower': ['reswallow', 'swallower'], - 'swami': ['aswim', 'swami'], - 'swan': ['sawn', 'snaw', 'swan'], - 'swap': ['swap', 'wasp'], - 'swarbie': ['barwise', 'swarbie'], - 'sware': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'], - 'swarmer': ['reswarm', 'swarmer'], - 'swart': ['straw', 'swart', 'warst'], - 'swarty': ['strawy', 'swarty'], - 'swarve': ['swarve', 'swaver'], - 'swat': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'], - 'swath': ['swath', 'whats'], - 'swathe': ['swathe', 'sweath'], - 'swati': ['swati', 'waist'], - 'swatter': ['stewart', 'swatter'], - 'swaver': ['swarve', 'swaver'], - 'sway': ['sway', 'ways', 'yaws'], - 'swayer': ['sawyer', 'swayer'], - 'sweal': ['swale', 'sweal', 'wasel'], - 'swear': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'], - 'swearer': ['resawer', 'reswear', 'swearer'], - 'sweat': ['awest', 'sweat', 'tawse', 'waste'], - 'sweater': ['resweat', 'sweater'], - 'sweatful': ['sweatful', 'wasteful'], - 'sweath': ['swathe', 'sweath'], - 'sweatily': ['sweatily', 'tileways'], - 'sweatless': ['sweatless', 'wasteless'], - 'sweatproof': ['sweatproof', 'wasteproof'], - 'swede': ['sewed', 'swede'], - 'sweep': ['sweep', 'weeps'], - 'sweeper': ['resweep', 'sweeper'], - 'sweer': ['resew', 'sewer', 'sweer'], - 'sweered': ['sewered', 'sweered'], - 'sweet': ['sweet', 'weste'], - 'sweetbread': ['breastweed', 'sweetbread'], - 'sweller': ['reswell', 'sweller'], - 'swelter': ['swelter', 'wrestle'], - 'swep': ['spew', 'swep'], - 'swertia': ['swertia', 'waister'], - 'swile': ['lewis', 'swile'], - 'swiller': ['reswill', 'swiller'], - 'swindle': ['swindle', 'windles'], - 'swine': ['sinew', 'swine', 'wisen'], - 'swinestone': ['sonnetwise', 'swinestone'], - 'swiney': ['sinewy', 'swiney'], - 'swingback': ['backswing', 'swingback'], - 'swinge': ['sewing', 'swinge'], - 'swingle': ['slewing', 'swingle'], - 'swingtree': ['swingtree', 'westering'], - 'swipy': ['swipy', 'wispy'], - 'swire': ['swire', 'wiser'], - 'swith': ['swith', 'whist', 'whits', 'wisht'], - 'swithe': ['swithe', 'whites'], - 'swither': ['swither', 'whister', 'withers'], - 'swoon': ['swoon', 'woons'], - 'swordman': ['sandworm', 'swordman', 'wordsman'], - 'swordmanship': ['swordmanship', 'wordsmanship'], - 'swore': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'], - 'swot': ['sowt', 'stow', 'swot', 'wots'], - 'sybarite': ['bestiary', 'sybarite'], - 'sybil': ['sibyl', 'sybil'], - 'syce': ['scye', 'syce'], - 'sycones': ['coyness', 'sycones'], - 'syconoid': ['syconoid', 'syodicon'], - 'sye': ['sey', 'sye', 'yes'], - 'syenitic': ['cytisine', 'syenitic'], - 'syllabi': ['sibylla', 'syllabi'], - 'syllable': ['sellably', 'syllable'], - 'sylva': ['salvy', 'sylva'], - 'sylvae': ['slavey', 'sylvae'], - 'sylvine': ['snively', 'sylvine'], - 'sylvite': ['levyist', 'sylvite'], - 'symbol': ['blosmy', 'symbol'], - 'symmetric': ['mycterism', 'symmetric'], - 'sympathy': ['sympathy', 'symphyta'], - 'symphonic': ['cyphonism', 'symphonic'], - 'symphyta': ['sympathy', 'symphyta'], - 'symposion': ['spoonyism', 'symposion'], - 'synapse': ['synapse', 'yapness'], - 'synaptera': ['peasantry', 'synaptera'], - 'syncopator': ['antroscopy', 'syncopator'], - 'syndicate': ['asyndetic', 'cystidean', 'syndicate'], - 'synedral': ['lysander', 'synedral'], - 'syngamic': ['gymnasic', 'syngamic'], - 'syngenic': ['ensigncy', 'syngenic'], - 'synura': ['sunray', 'surnay', 'synura'], - 'syodicon': ['syconoid', 'syodicon'], - 'sypher': ['sphery', 'sypher'], - 'syphiloid': ['hypsiloid', 'syphiloid'], - 'syrian': ['siryan', 'syrian'], - 'syringa': ['signary', 'syringa'], - 'syringeful': ['refusingly', 'syringeful'], - 'syrup': ['pursy', 'pyrus', 'syrup'], - 'system': ['mystes', 'system'], - 'systole': ['systole', 'toyless'], - 'ta': ['at', 'ta'], - 'taa': ['ata', 'taa'], - 'taal': ['lata', 'taal', 'tala'], - 'taar': ['rata', 'taar', 'tara'], - 'tab': ['bat', 'tab'], - 'tabanus': ['sabanut', 'sabutan', 'tabanus'], - 'tabaret': ['baretta', 'rabatte', 'tabaret'], - 'tabber': ['barbet', 'rabbet', 'tabber'], - 'tabella': ['ballate', 'tabella'], - 'tabes': ['baste', 'beast', 'tabes'], - 'tabet': ['betta', 'tabet'], - 'tabinet': ['bettina', 'tabinet', 'tibetan'], - 'tabira': ['arabit', 'tabira'], - 'tabitha': ['habitat', 'tabitha'], - 'tabitude': ['dubitate', 'tabitude'], - 'table': ['batel', 'blate', 'bleat', 'table'], - 'tabled': ['dablet', 'tabled'], - 'tablemaker': ['marketable', 'tablemaker'], - 'tabler': ['albert', 'balter', 'labret', 'tabler'], - 'tables': ['ablest', 'stable', 'tables'], - 'tablet': ['battel', 'battle', 'tablet'], - 'tabletary': ['tabletary', 'treatably'], - 'tabling': ['batling', 'tabling'], - 'tabophobia': ['batophobia', 'tabophobia'], - 'tabor': ['abort', 'tabor'], - 'taborer': ['arboret', 'roberta', 'taborer'], - 'taboret': ['abettor', 'taboret'], - 'taborin': ['abortin', 'taborin'], - 'tabour': ['outbar', 'rubato', 'tabour'], - 'tabouret': ['obturate', 'tabouret'], - 'tabret': ['batter', 'bertat', 'tabret', 'tarbet'], - 'tabu': ['abut', 'tabu', 'tuba'], - 'tabula': ['ablaut', 'tabula'], - 'tabulare': ['bataleur', 'tabulare'], - 'tabule': ['batule', 'betula', 'tabule'], - 'taccaceae': ['cactaceae', 'taccaceae'], - 'taccaceous': ['cactaceous', 'taccaceous'], - 'tach': ['chat', 'tach'], - 'tache': ['cheat', 'tache', 'teach', 'theca'], - 'tacheless': ['tacheless', 'teachless'], - 'tachina': ['ithacan', 'tachina'], - 'tachinidae': ['anthicidae', 'tachinidae'], - 'tachograph': ['cathograph', 'tachograph'], - 'tacit': ['attic', 'catti', 'tacit'], - 'tacitly': ['cattily', 'tacitly'], - 'tacitness': ['cattiness', 'tacitness'], - 'taciturn': ['taciturn', 'urticant'], - 'tacker': ['racket', 'retack', 'tacker'], - 'tacksman': ['stackman', 'tacksman'], - 'taconian': ['catonian', 'taconian'], - 'taconic': ['cantico', 'catonic', 'taconic'], - 'tacso': ['ascot', 'coast', 'costa', 'tacso', 'tasco'], - 'tacsonia': ['acontias', 'tacsonia'], - 'tactile': ['lattice', 'tactile'], - 'tade': ['adet', 'date', 'tade', 'tead', 'teda'], - 'tadpole': ['platode', 'tadpole'], - 'tae': ['ate', 'eat', 'eta', 'tae', 'tea'], - 'tael': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'taen': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'taenia': ['aetian', 'antiae', 'taenia'], - 'taeniada': ['anatidae', 'taeniada'], - 'taenial': ['laniate', 'natalie', 'taenial'], - 'taenian': ['ananite', 'anatine', 'taenian'], - 'taenicide': ['deciatine', 'diacetine', 'taenicide', 'teniacide'], - 'taeniform': ['forminate', 'fremontia', 'taeniform'], - 'taenioid': ['ideation', 'iodinate', 'taenioid'], - 'taetsia': ['isatate', 'satiate', 'taetsia'], - 'tag': ['gat', 'tag'], - 'tagetes': ['gestate', 'tagetes'], - 'tagetol': ['lagetto', 'tagetol'], - 'tagged': ['gadget', 'tagged'], - 'tagger': ['garget', 'tagger'], - 'tagilite': ['litigate', 'tagilite'], - 'tagish': ['ghaist', 'tagish'], - 'taglike': ['glaiket', 'taglike'], - 'tagrag': ['ragtag', 'tagrag'], - 'tagsore': ['storage', 'tagsore'], - 'taheen': ['ethane', 'taheen'], - 'tahil': ['ihlat', 'tahil'], - 'tahin': ['ahint', 'hiant', 'tahin'], - 'tahr': ['hart', 'rath', 'tahr', 'thar', 'trah'], - 'tahsil': ['latish', 'tahsil'], - 'tahsin': ['snaith', 'tahsin'], - 'tai': ['ait', 'ati', 'ita', 'tai'], - 'taich': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'], - 'taigle': ['aiglet', 'ligate', 'taigle', 'tailge'], - 'tail': ['alit', 'tail', 'tali'], - 'tailage': ['agalite', 'tailage', 'taliage'], - 'tailboard': ['broadtail', 'tailboard'], - 'tailed': ['detail', 'dietal', 'dilate', 'edital', 'tailed'], - 'tailer': ['lirate', 'retail', 'retial', 'tailer'], - 'tailet': ['latite', 'tailet', 'tailte', 'talite'], - 'tailge': ['aiglet', 'ligate', 'taigle', 'tailge'], - 'tailing': ['gitalin', 'tailing'], - 'taille': ['taille', 'telial'], - 'tailoring': ['gratiolin', 'largition', 'tailoring'], - 'tailorman': ['antimoral', 'tailorman'], - 'tailory': ['orality', 'tailory'], - 'tailpin': ['pintail', 'tailpin'], - 'tailsman': ['staminal', 'tailsman', 'talisman'], - 'tailte': ['latite', 'tailet', 'tailte', 'talite'], - 'taily': ['laity', 'taily'], - 'taimen': ['etamin', 'inmate', 'taimen', 'tamein'], - 'tain': ['aint', 'anti', 'tain', 'tina'], - 'tainan': ['naiant', 'tainan'], - 'taino': ['niota', 'taino'], - 'taint': ['taint', 'tanti', 'tinta', 'titan'], - 'tainture': ['tainture', 'unattire'], - 'taipan': ['aptian', 'patina', 'taipan'], - 'taipo': ['patio', 'taipo', 'topia'], - 'tairge': ['gaiter', 'tairge', 'triage'], - 'tairn': ['riant', 'tairn', 'tarin', 'train'], - 'taise': ['saite', 'taise'], - 'taistrel': ['starlite', 'taistrel'], - 'taistril': ['taistril', 'trialist'], - 'taivers': ['staiver', 'taivers'], - 'taj': ['jat', 'taj'], - 'tajik': ['jatki', 'tajik'], - 'takar': ['katar', 'takar'], - 'take': ['kate', 'keta', 'take', 'teak'], - 'takedown': ['downtake', 'takedown'], - 'taker': ['kerat', 'taker'], - 'takin': ['kitan', 'takin'], - 'takings': ['gitksan', 'skating', 'takings'], - 'taky': ['katy', 'kyat', 'taky'], - 'tal': ['alt', 'lat', 'tal'], - 'tala': ['lata', 'taal', 'tala'], - 'talapoin': ['palation', 'talapoin'], - 'talar': ['altar', 'artal', 'ratal', 'talar'], - 'talari': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'], - 'talc': ['clat', 'talc'], - 'talcer': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'], - 'talcher': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'], - 'talcoid': ['cotidal', 'lactoid', 'talcoid'], - 'talcose': ['alecost', 'lactose', 'scotale', 'talcose'], - 'talcous': ['costula', 'locusta', 'talcous'], - 'tald': ['dalt', 'tald'], - 'tale': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'taled': ['adlet', 'dealt', 'delta', 'lated', 'taled'], - 'talent': ['latent', 'latten', 'nattle', 'talent', 'tantle'], - 'taler': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'tales': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'], - 'tali': ['alit', 'tail', 'tali'], - 'taliage': ['agalite', 'tailage', 'taliage'], - 'taligrade': ['taligrade', 'tragedial'], - 'talinum': ['multani', 'talinum'], - 'talion': ['italon', 'lation', 'talion'], - 'taliped': ['plaited', 'taliped'], - 'talipedic': ['talipedic', 'talpicide'], - 'talipes': ['aliptes', 'pastile', 'talipes'], - 'talipot': ['ptilota', 'talipot', 'toptail'], - 'talis': ['alist', 'litas', 'slait', 'talis'], - 'talisman': ['staminal', 'tailsman', 'talisman'], - 'talite': ['latite', 'tailet', 'tailte', 'talite'], - 'talker': ['kartel', 'retalk', 'talker'], - 'tallage': ['gallate', 'tallage'], - 'tallero': ['reallot', 'rotella', 'tallero'], - 'talles': ['sallet', 'stella', 'talles'], - 'talliage': ['allagite', 'alligate', 'talliage'], - 'tallier': ['literal', 'tallier'], - 'tallyho': ['loathly', 'tallyho'], - 'talon': ['notal', 'ontal', 'talon', 'tolan', 'tonal'], - 'taloned': ['taloned', 'toledan'], - 'talonid': ['itoland', 'talonid', 'tindalo'], - 'talose': ['lotase', 'osteal', 'solate', 'stolae', 'talose'], - 'talpa': ['aptal', 'palta', 'talpa'], - 'talpicide': ['talipedic', 'talpicide'], - 'talpidae': ['lapidate', 'talpidae'], - 'talpine': ['pantile', 'pentail', 'platine', 'talpine'], - 'talpoid': ['platoid', 'talpoid'], - 'taluche': ['auchlet', 'cutheal', 'taluche'], - 'taluka': ['latuka', 'taluka'], - 'talus': ['latus', 'sault', 'talus'], - 'tam': ['amt', 'mat', 'tam'], - 'tama': ['atma', 'tama'], - 'tamale': ['malate', 'meatal', 'tamale'], - 'tamanac': ['matacan', 'tamanac'], - 'tamanaca': ['atacaman', 'tamanaca'], - 'tamanoir': ['animator', 'tamanoir'], - 'tamanu': ['anatum', 'mantua', 'tamanu'], - 'tamara': ['armata', 'matara', 'tamara'], - 'tamarao': ['tamarao', 'tamaroa'], - 'tamarin': ['martian', 'tamarin'], - 'tamaroa': ['tamarao', 'tamaroa'], - 'tambor': ['tambor', 'tromba'], - 'tamboura': ['marabout', 'marabuto', 'tamboura'], - 'tambourer': ['arboretum', 'tambourer'], - 'tambreet': ['ambrette', 'tambreet'], - 'tamburan': ['rambutan', 'tamburan'], - 'tame': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'], - 'tamein': ['etamin', 'inmate', 'taimen', 'tamein'], - 'tameless': ['mateless', 'meatless', 'tameless', 'teamless'], - 'tamelessness': ['matelessness', 'tamelessness'], - 'tamely': ['mately', 'tamely'], - 'tamer': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'tamise': ['samite', 'semita', 'tamise', 'teaism'], - 'tampin': ['pitman', 'tampin', 'tipman'], - 'tampion': ['maintop', 'ptomain', 'tampion', 'timpano'], - 'tampioned': ['ademption', 'tampioned'], - 'tampon': ['potman', 'tampon', 'topman'], - 'tamul': ['lamut', 'tamul'], - 'tamus': ['matsu', 'tamus', 'tsuma'], - 'tan': ['ant', 'nat', 'tan'], - 'tana': ['anat', 'anta', 'tana'], - 'tanach': ['acanth', 'anchat', 'tanach'], - 'tanager': ['argante', 'granate', 'tanager'], - 'tanagridae': ['tanagridae', 'tangaridae'], - 'tanagrine': ['argentina', 'tanagrine'], - 'tanagroid': ['gradation', 'indagator', 'tanagroid'], - 'tanak': ['kanat', 'tanak', 'tanka'], - 'tanaka': ['nataka', 'tanaka'], - 'tanala': ['atalan', 'tanala'], - 'tanan': ['annat', 'tanan'], - 'tanbur': ['tanbur', 'turban'], - 'tancel': ['cantle', 'cental', 'lancet', 'tancel'], - 'tanchoir': ['anorthic', 'anthroic', 'tanchoir'], - 'tandemist': ['misattend', 'tandemist'], - 'tandle': ['dental', 'tandle'], - 'tandour': ['rotunda', 'tandour'], - 'tane': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'tang': ['gant', 'gnat', 'tang'], - 'tanga': ['ganta', 'tanga'], - 'tangaridae': ['tanagridae', 'tangaridae'], - 'tangelo': ['angelot', 'tangelo'], - 'tanger': ['argent', 'garnet', 'garten', 'tanger'], - 'tangerine': ['argentine', 'tangerine'], - 'tangfish': ['shafting', 'tangfish'], - 'tangi': ['giant', 'tangi', 'tiang'], - 'tangibile': ['bigential', 'tangibile'], - 'tangible': ['bleating', 'tangible'], - 'tangie': ['eating', 'ingate', 'tangie'], - 'tangier': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'], - 'tangle': ['tangle', 'telang'], - 'tangling': ['gnatling', 'tangling'], - 'tango': ['tango', 'tonga'], - 'tangs': ['angst', 'stang', 'tangs'], - 'tangue': ['gunate', 'tangue'], - 'tangum': ['tangum', 'tugman'], - 'tangun': ['tangun', 'tungan'], - 'tanh': ['hant', 'tanh', 'than'], - 'tanha': ['atnah', 'tanha', 'thana'], - 'tania': ['anita', 'niata', 'tania'], - 'tanica': ['actian', 'natica', 'tanica'], - 'tanier': ['nerita', 'ratine', 'retain', 'retina', 'tanier'], - 'tanist': ['astint', 'tanist'], - 'tanitic': ['tanitic', 'titanic'], - 'tanka': ['kanat', 'tanak', 'tanka'], - 'tankle': ['anklet', 'lanket', 'tankle'], - 'tanling': ['antling', 'tanling'], - 'tannaic': ['cantina', 'tannaic'], - 'tannase': ['annates', 'tannase'], - 'tannogallate': ['gallotannate', 'tannogallate'], - 'tannogallic': ['gallotannic', 'tannogallic'], - 'tannogen': ['nonagent', 'tannogen'], - 'tanproof': ['antproof', 'tanproof'], - 'tanquen': ['quannet', 'tanquen'], - 'tanrec': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'tansy': ['nasty', 'styan', 'tansy'], - 'tantalean': ['antenatal', 'atlantean', 'tantalean'], - 'tantalic': ['atlantic', 'tantalic'], - 'tantalite': ['atlantite', 'tantalite'], - 'tantara': ['tantara', 'tartana'], - 'tantarara': ['tantarara', 'tarantara'], - 'tanti': ['taint', 'tanti', 'tinta', 'titan'], - 'tantle': ['latent', 'latten', 'nattle', 'talent', 'tantle'], - 'tantra': ['rattan', 'tantra', 'tartan'], - 'tantrism': ['tantrism', 'transmit'], - 'tantum': ['mutant', 'tantum', 'tutman'], - 'tanzeb': ['batzen', 'bezant', 'tanzeb'], - 'tao': ['oat', 'tao', 'toa'], - 'taoistic': ['iotacist', 'taoistic'], - 'taos': ['oast', 'stoa', 'taos'], - 'tap': ['apt', 'pat', 'tap'], - 'tapa': ['atap', 'pata', 'tapa'], - 'tapalo': ['patola', 'tapalo'], - 'tapas': ['patas', 'tapas'], - 'tape': ['pate', 'peat', 'tape', 'teap'], - 'tapeline': ['petaline', 'tapeline'], - 'tapeman': ['peatman', 'tapeman'], - 'tapen': ['enapt', 'paten', 'penta', 'tapen'], - 'taper': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'], - 'tapered': ['padtree', 'predate', 'tapered'], - 'tapering': ['partigen', 'tapering'], - 'taperly': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'], - 'taperness': ['apertness', 'peartness', 'taperness'], - 'tapestring': ['spattering', 'tapestring'], - 'tapestry': ['tapestry', 'tryptase'], - 'tapet': ['patte', 'tapet'], - 'tapete': ['pattee', 'tapete'], - 'taphouse': ['outshape', 'taphouse'], - 'taphria': ['pitarah', 'taphria'], - 'taphrina': ['parthian', 'taphrina'], - 'tapir': ['atrip', 'tapir'], - 'tapiro': ['portia', 'tapiro'], - 'tapirus': ['tapirus', 'upstair'], - 'tapis': ['piast', 'stipa', 'tapis'], - 'taplash': ['asphalt', 'spathal', 'taplash'], - 'tapmost': ['tapmost', 'topmast'], - 'tapnet': ['patent', 'patten', 'tapnet'], - 'tapoa': ['opata', 'patao', 'tapoa'], - 'taposa': ['sapota', 'taposa'], - 'taproom': ['protoma', 'taproom'], - 'taproot': ['potator', 'taproot'], - 'taps': ['past', 'spat', 'stap', 'taps'], - 'tapster': ['spatter', 'tapster'], - 'tapu': ['patu', 'paut', 'tapu'], - 'tapuyo': ['outpay', 'tapuyo'], - 'taqua': ['quata', 'taqua'], - 'tar': ['art', 'rat', 'tar', 'tra'], - 'tara': ['rata', 'taar', 'tara'], - 'taraf': ['taraf', 'tarfa'], - 'tarai': ['arati', 'atria', 'riata', 'tarai', 'tiara'], - 'taranchi': ['taranchi', 'thracian'], - 'tarantara': ['tantarara', 'tarantara'], - 'tarapin': ['patarin', 'tarapin'], - 'tarasc': ['castra', 'tarasc'], - 'tarbet': ['batter', 'bertat', 'tabret', 'tarbet'], - 'tardle': ['dartle', 'tardle'], - 'tardy': ['tardy', 'trady'], - 'tare': ['rate', 'tare', 'tear', 'tera'], - 'tarente': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'], - 'tarentine': ['entertain', 'tarentine', 'terentian'], - 'tarfa': ['taraf', 'tarfa'], - 'targe': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'], - 'targeman': ['grateman', 'mangrate', 'mentagra', 'targeman'], - 'targer': ['garret', 'garter', 'grater', 'targer'], - 'target': ['gatter', 'target'], - 'targetman': ['targetman', 'termagant'], - 'targum': ['artgum', 'targum'], - 'tarheel': ['leather', 'tarheel'], - 'tarheeler': ['leatherer', 'releather', 'tarheeler'], - 'tari': ['airt', 'rita', 'tari', 'tiar'], - 'tarie': ['arite', 'artie', 'irate', 'retia', 'tarie'], - 'tarin': ['riant', 'tairn', 'tarin', 'train'], - 'tarish': ['rashti', 'tarish'], - 'tarletan': ['alterant', 'tarletan'], - 'tarlike': ['artlike', 'ratlike', 'tarlike'], - 'tarmac': ['mactra', 'tarmac'], - 'tarman': ['mantra', 'tarman'], - 'tarmi': ['mitra', 'tarmi', 'timar', 'tirma'], - 'tarn': ['natr', 'rant', 'tarn', 'tran'], - 'tarnal': ['antral', 'tarnal'], - 'tarnish': ['tarnish', 'trishna'], - 'tarnside': ['stradine', 'strained', 'tarnside'], - 'taro': ['rota', 'taro', 'tora'], - 'taroc': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'], - 'tarocco': ['coactor', 'tarocco'], - 'tarok': ['kotar', 'tarok'], - 'tarot': ['ottar', 'tarot', 'torta', 'troat'], - 'tarp': ['part', 'prat', 'rapt', 'tarp', 'trap'], - 'tarpan': ['partan', 'tarpan'], - 'tarpaulin': ['tarpaulin', 'unpartial'], - 'tarpeian': ['patarine', 'tarpeian'], - 'tarpon': ['patron', 'tarpon'], - 'tarquin': ['quatrin', 'tarquin'], - 'tarragon': ['arrogant', 'tarragon'], - 'tarred': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'tarrer': ['tarrer', 'terrar'], - 'tarriance': ['antiracer', 'tarriance'], - 'tarrie': ['arriet', 'tarrie'], - 'tars': ['sart', 'star', 'stra', 'tars', 'tsar'], - 'tarsal': ['astral', 'tarsal'], - 'tarsale': ['alaster', 'tarsale'], - 'tarsalgia': ['astragali', 'tarsalgia'], - 'tarse': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'], - 'tarsi': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'tarsia': ['arista', 'tarsia'], - 'tarsier': ['astrier', 'tarsier'], - 'tarsipes': ['piratess', 'serapist', 'tarsipes'], - 'tarsitis': ['satirist', 'tarsitis'], - 'tarsome': ['maestro', 'tarsome'], - 'tarsonemid': ['mosandrite', 'tarsonemid'], - 'tarsonemus': ['sarmentous', 'tarsonemus'], - 'tarsus': ['rastus', 'tarsus'], - 'tartan': ['rattan', 'tantra', 'tartan'], - 'tartana': ['tantara', 'tartana'], - 'tartaret': ['tartaret', 'tartrate'], - 'tartarin': ['tartarin', 'triratna'], - 'tartarous': ['saturator', 'tartarous'], - 'tarten': ['attern', 'natter', 'ratten', 'tarten'], - 'tartish': ['athirst', 'rattish', 'tartish'], - 'tartle': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'], - 'tartlet': ['tartlet', 'tattler'], - 'tartly': ['rattly', 'tartly'], - 'tartrate': ['tartaret', 'tartrate'], - 'taruma': ['taruma', 'trauma'], - 'tarve': ['avert', 'tarve', 'taver', 'trave'], - 'tarweed': ['dewater', 'tarweed', 'watered'], - 'tarwood': ['ratwood', 'tarwood'], - 'taryba': ['baryta', 'taryba'], - 'tasco': ['ascot', 'coast', 'costa', 'tacso', 'tasco'], - 'tash': ['shat', 'tash'], - 'tasheriff': ['fireshaft', 'tasheriff'], - 'tashie': ['saithe', 'tashie', 'teaish'], - 'tashrif': ['ratfish', 'tashrif'], - 'tasian': ['astian', 'tasian'], - 'tasimetry': ['myristate', 'tasimetry'], - 'task': ['skat', 'task'], - 'tasker': ['skater', 'staker', 'strake', 'streak', 'tasker'], - 'taslet': ['latest', 'sattle', 'taslet'], - 'tasmanite': ['emanatist', 'staminate', 'tasmanite'], - 'tassah': ['shasta', 'tassah'], - 'tasse': ['asset', 'tasse'], - 'tassel': ['lasset', 'tassel'], - 'tasseler': ['rateless', 'tasseler', 'tearless', 'tesseral'], - 'tasser': ['assert', 'tasser'], - 'tassie': ['siesta', 'tassie'], - 'tastable': ['statable', 'tastable'], - 'taste': ['state', 'taste', 'tates', 'testa'], - 'tasted': ['stated', 'tasted'], - 'tasteful': ['stateful', 'tasteful'], - 'tastefully': ['statefully', 'tastefully'], - 'tastefulness': ['statefulness', 'tastefulness'], - 'tasteless': ['stateless', 'tasteless'], - 'taster': ['stater', 'taster', 'testar'], - 'tasu': ['saut', 'tasu', 'utas'], - 'tatar': ['attar', 'tatar'], - 'tatarize': ['tatarize', 'zaratite'], - 'tatchy': ['chatty', 'tatchy'], - 'tate': ['etta', 'tate', 'teat'], - 'tater': ['atter', 'tater', 'teart', 'tetra', 'treat'], - 'tates': ['state', 'taste', 'tates', 'testa'], - 'tath': ['hatt', 'tath', 'that'], - 'tatian': ['attain', 'tatian'], - 'tatler': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'], - 'tatterly': ['tatterly', 'tattlery'], - 'tattler': ['tartlet', 'tattler'], - 'tattlery': ['tatterly', 'tattlery'], - 'tatu': ['tatu', 'taut'], - 'tau': ['tau', 'tua', 'uta'], - 'taube': ['butea', 'taube', 'tubae'], - 'taula': ['aluta', 'taula'], - 'taum': ['muta', 'taum'], - 'taun': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'], - 'taungthu': ['taungthu', 'untaught'], - 'taupe': ['taupe', 'upeat'], - 'taupo': ['apout', 'taupo'], - 'taur': ['ruta', 'taur'], - 'taurean': ['taurean', 'uranate'], - 'tauric': ['tauric', 'uratic', 'urtica'], - 'taurine': ['ruinate', 'taurine', 'uranite', 'urinate'], - 'taurocol': ['outcarol', 'taurocol'], - 'taut': ['tatu', 'taut'], - 'tauten': ['attune', 'nutate', 'tauten'], - 'tautomeric': ['autometric', 'tautomeric'], - 'tautomery': ['autometry', 'tautomery'], - 'tav': ['tav', 'vat'], - 'tavast': ['sattva', 'tavast'], - 'tave': ['tave', 'veta'], - 'taver': ['avert', 'tarve', 'taver', 'trave'], - 'tavers': ['starve', 'staver', 'strave', 'tavers', 'versta'], - 'tavert': ['tavert', 'vatter'], - 'tavola': ['tavola', 'volata'], - 'taw': ['taw', 'twa', 'wat'], - 'tawa': ['awat', 'tawa'], - 'tawer': ['tawer', 'water', 'wreat'], - 'tawery': ['tawery', 'watery'], - 'tawite': ['tawite', 'tawtie', 'twaite'], - 'tawn': ['nawt', 'tawn', 'want'], - 'tawny': ['tawny', 'wanty'], - 'taws': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'], - 'tawse': ['awest', 'sweat', 'tawse', 'waste'], - 'tawtie': ['tawite', 'tawtie', 'twaite'], - 'taxed': ['detax', 'taxed'], - 'taxer': ['extra', 'retax', 'taxer'], - 'tay': ['tay', 'yat'], - 'tayer': ['tayer', 'teary'], - 'tchai': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'], - 'tche': ['chet', 'etch', 'tche', 'tech'], - 'tchi': ['chit', 'itch', 'tchi'], - 'tchu': ['chut', 'tchu', 'utch'], - 'tchwi': ['tchwi', 'wicht', 'witch'], - 'tea': ['ate', 'eat', 'eta', 'tae', 'tea'], - 'teaberry': ['betrayer', 'eatberry', 'rebetray', 'teaberry'], - 'teaboy': ['betoya', 'teaboy'], - 'teacart': ['caretta', 'teacart', 'tearcat'], - 'teach': ['cheat', 'tache', 'teach', 'theca'], - 'teachable': ['cheatable', 'teachable'], - 'teachableness': ['cheatableness', 'teachableness'], - 'teache': ['achete', 'hecate', 'teache', 'thecae'], - 'teacher': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'], - 'teachery': ['cheatery', 'cytherea', 'teachery'], - 'teaching': ['cheating', 'teaching'], - 'teachingly': ['cheatingly', 'teachingly'], - 'teachless': ['tacheless', 'teachless'], - 'tead': ['adet', 'date', 'tade', 'tead', 'teda'], - 'teaer': ['arete', 'eater', 'teaer'], - 'teagle': ['eaglet', 'legate', 'teagle', 'telega'], - 'teaish': ['saithe', 'tashie', 'teaish'], - 'teaism': ['samite', 'semita', 'tamise', 'teaism'], - 'teak': ['kate', 'keta', 'take', 'teak'], - 'teal': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'], - 'team': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'], - 'teamer': ['reetam', 'retame', 'teamer'], - 'teaming': ['mintage', 'teaming', 'tegmina'], - 'teamless': ['mateless', 'meatless', 'tameless', 'teamless'], - 'teamman': ['meatman', 'teamman'], - 'teamster': ['teamster', 'trametes'], - 'tean': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'], - 'teanal': ['anteal', 'lanate', 'teanal'], - 'teap': ['pate', 'peat', 'tape', 'teap'], - 'teapot': ['aptote', 'optate', 'potate', 'teapot'], - 'tear': ['rate', 'tare', 'tear', 'tera'], - 'tearable': ['elabrate', 'tearable'], - 'tearably': ['betrayal', 'tearably'], - 'tearcat': ['caretta', 'teacart', 'tearcat'], - 'teardown': ['danewort', 'teardown'], - 'teardrop': ['predator', 'protrade', 'teardrop'], - 'tearer': ['rerate', 'retare', 'tearer'], - 'tearful': ['faulter', 'refutal', 'tearful'], - 'tearing': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'], - 'tearless': ['rateless', 'tasseler', 'tearless', 'tesseral'], - 'tearlike': ['keralite', 'tearlike'], - 'tearpit': ['partite', 'tearpit'], - 'teart': ['atter', 'tater', 'teart', 'tetra', 'treat'], - 'teary': ['tayer', 'teary'], - 'teasably': ['stayable', 'teasably'], - 'tease': ['setae', 'tease'], - 'teasel': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'], - 'teaser': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'teasing': ['easting', - 'gainset', - 'genista', - 'ingesta', - 'seating', - 'signate', - 'teasing'], - 'teasler': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'], - 'teasy': ['teasy', 'yeast'], - 'teat': ['etta', 'tate', 'teat'], - 'teather': ['teather', 'theater', 'thereat'], - 'tebu': ['bute', 'tebu', 'tube'], - 'teca': ['cate', 'teca'], - 'tecali': ['calite', 'laetic', 'tecali'], - 'tech': ['chet', 'etch', 'tche', 'tech'], - 'techily': ['ethylic', 'techily'], - 'technica': ['atechnic', 'catechin', 'technica'], - 'technocracy': ['conycatcher', 'technocracy'], - 'technopsychology': ['psychotechnology', 'technopsychology'], - 'techous': ['souchet', 'techous', 'tousche'], - 'techy': ['techy', 'tyche'], - 'tecla': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'], - 'teco': ['cote', 'teco'], - 'tecoma': ['comate', 'metoac', 'tecoma'], - 'tecomin': ['centimo', 'entomic', 'tecomin'], - 'tecon': ['cento', 'conte', 'tecon'], - 'tectal': ['cattle', 'tectal'], - 'tectology': ['ctetology', 'tectology'], - 'tectona': ['oncetta', 'tectona'], - 'tectospinal': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'], - 'tecuma': ['acetum', 'tecuma'], - 'tecuna': ['tecuna', 'uncate'], - 'teda': ['adet', 'date', 'tade', 'tead', 'teda'], - 'tedious': ['outside', 'tedious'], - 'tediousness': ['outsideness', 'tediousness'], - 'teedle': ['delete', 'teedle'], - 'teel': ['leet', 'lete', 'teel', 'tele'], - 'teem': ['meet', 'mete', 'teem'], - 'teemer': ['meeter', 'remeet', 'teemer'], - 'teeming': ['meeting', 'teeming', 'tegmine'], - 'teems': ['teems', 'temse'], - 'teen': ['neet', 'nete', 'teen'], - 'teens': ['steen', 'teens', 'tense'], - 'teer': ['reet', 'teer', 'tree'], - 'teerer': ['retree', 'teerer'], - 'teest': ['teest', 'teste'], - 'teet': ['teet', 'tete'], - 'teeter': ['teeter', 'terete'], - 'teeth': ['teeth', 'theet'], - 'teething': ['genthite', 'teething'], - 'teg': ['get', 'teg'], - 'tegean': ['geneat', 'negate', 'tegean'], - 'tegmina': ['mintage', 'teaming', 'tegmina'], - 'tegminal': ['ligament', 'metaling', 'tegminal'], - 'tegmine': ['meeting', 'teeming', 'tegmine'], - 'tegular': ['gaulter', 'tegular'], - 'teheran': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'], - 'tehsildar': ['heraldist', 'tehsildar'], - 'teian': ['entia', 'teian', 'tenai', 'tinea'], - 'teicher': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'], - 'teil': ['lite', 'teil', 'teli', 'tile'], - 'teind': ['detin', 'teind', 'tined'], - 'teinder': ['nitered', 'redient', 'teinder'], - 'teinland': ['dentinal', 'teinland', 'tendinal'], - 'teioid': ['iodite', 'teioid'], - 'teju': ['jute', 'teju'], - 'telamon': ['omental', 'telamon'], - 'telang': ['tangle', 'telang'], - 'telar': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'], - 'telarian': ['retainal', 'telarian'], - 'telary': ['lyrate', 'raylet', 'realty', 'telary'], - 'tele': ['leet', 'lete', 'teel', 'tele'], - 'telecast': ['castelet', 'telecast'], - 'telega': ['eaglet', 'legate', 'teagle', 'telega'], - 'telegn': ['gentle', 'telegn'], - 'telegrapher': ['retelegraph', 'telegrapher'], - 'telei': ['elite', 'telei'], - 'telephone': ['phenetole', 'telephone'], - 'telephony': ['polythene', 'telephony'], - 'telephotograph': ['phototelegraph', 'telephotograph'], - 'telephotographic': ['phototelegraphic', 'telephotographic'], - 'telephotography': ['phototelegraphy', 'telephotography'], - 'teleradiophone': ['radiotelephone', 'teleradiophone'], - 'teleran': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'], - 'teleseism': ['messelite', 'semisteel', 'teleseism'], - 'telespectroscope': ['spectrotelescope', 'telespectroscope'], - 'telestereoscope': ['stereotelescope', 'telestereoscope'], - 'telestial': ['satellite', 'telestial'], - 'telestic': ['telestic', 'testicle'], - 'telfer': ['felter', 'telfer', 'trefle'], - 'teli': ['lite', 'teil', 'teli', 'tile'], - 'telial': ['taille', 'telial'], - 'telic': ['clite', 'telic'], - 'telinga': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'], - 'tellach': ['hellcat', 'tellach'], - 'teller': ['retell', 'teller'], - 'tellima': ['mitella', 'tellima'], - 'tellina': ['nitella', 'tellina'], - 'tellurian': ['tellurian', 'unliteral'], - 'telome': ['omelet', 'telome'], - 'telonism': ['melonist', 'telonism'], - 'telopsis': ['polistes', 'telopsis'], - 'telpath': ['pathlet', 'telpath'], - 'telson': ['solent', 'stolen', 'telson'], - 'telsonic': ['lentisco', 'telsonic'], - 'telt': ['lett', 'telt'], - 'tema': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'], - 'teman': ['ament', 'meant', 'teman'], - 'temin': ['metin', 'temin', 'timne'], - 'temp': ['empt', 'temp'], - 'tempean': ['peteman', 'tempean'], - 'temper': ['temper', 'tempre'], - 'tempera': ['premate', 'tempera'], - 'temperer': ['retemper', 'temperer'], - 'temperish': ['herpetism', 'metership', 'metreship', 'temperish'], - 'templar': ['templar', 'trample'], - 'template': ['palmette', 'template'], - 'temple': ['pelmet', 'temple'], - 'tempora': ['pteroma', 'tempora'], - 'temporarily': ['polarimetry', 'premorality', 'temporarily'], - 'temporofrontal': ['frontotemporal', 'temporofrontal'], - 'temporooccipital': ['occipitotemporal', 'temporooccipital'], - 'temporoparietal': ['parietotemporal', 'temporoparietal'], - 'tempre': ['temper', 'tempre'], - 'tempter': ['retempt', 'tempter'], - 'temse': ['teems', 'temse'], - 'temser': ['mester', 'restem', 'temser', 'termes'], - 'temulent': ['temulent', 'unmettle'], - 'ten': ['net', 'ten'], - 'tenable': ['beltane', 'tenable'], - 'tenace': ['cetane', 'tenace'], - 'tenai': ['entia', 'teian', 'tenai', 'tinea'], - 'tenanter': ['retenant', 'tenanter'], - 'tenantless': ['latentness', 'tenantless'], - 'tencteri': ['reticent', 'tencteri'], - 'tend': ['dent', 'tend'], - 'tender': ['denter', 'rented', 'tender'], - 'tenderer': ['retender', 'tenderer'], - 'tenderish': ['disherent', 'hinderest', 'tenderish'], - 'tendinal': ['dentinal', 'teinland', 'tendinal'], - 'tendinitis': ['dentinitis', 'tendinitis'], - 'tendour': ['tendour', 'unroted'], - 'tendril': ['tendril', 'trindle'], - 'tendron': ['donnert', 'tendron'], - 'teneral': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'], - 'teneriffe': ['fifteener', 'teneriffe'], - 'tenesmus': ['muteness', 'tenesmus'], - 'teng': ['gent', 'teng'], - 'tengu': ['tengu', 'unget'], - 'teniacidal': ['acetanilid', 'laciniated', 'teniacidal'], - 'teniacide': ['deciatine', 'diacetine', 'taenicide', 'teniacide'], - 'tenible': ['beltine', 'tenible'], - 'tenino': ['intone', 'tenino'], - 'tenline': ['lenient', 'tenline'], - 'tenner': ['rennet', 'tenner'], - 'tennis': ['innest', 'sennit', 'sinnet', 'tennis'], - 'tenomyotomy': ['myotenotomy', 'tenomyotomy'], - 'tenon': ['nonet', 'tenon'], - 'tenoner': ['enteron', 'tenoner'], - 'tenonian': ['annotine', 'tenonian'], - 'tenonitis': ['sentition', 'tenonitis'], - 'tenontophyma': ['nematophyton', 'tenontophyma'], - 'tenophyte': ['entophyte', 'tenophyte'], - 'tenoplastic': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'], - 'tenor': ['noter', 'tenor', 'toner', 'trone'], - 'tenorist': ['ortstein', 'tenorist'], - 'tenovaginitis': ['investigation', 'tenovaginitis'], - 'tenpin': ['pinnet', 'tenpin'], - 'tenrec': ['center', 'recent', 'tenrec'], - 'tense': ['steen', 'teens', 'tense'], - 'tensible': ['nebelist', 'stilbene', 'tensible'], - 'tensile': ['leisten', 'setline', 'tensile'], - 'tension': ['stenion', 'tension'], - 'tensional': ['alstonine', 'tensional'], - 'tensive': ['estevin', 'tensive'], - 'tenson': ['sonnet', 'stonen', 'tenson'], - 'tensor': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'], - 'tentable': ['nettable', 'tentable'], - 'tentacle': ['ectental', 'tentacle'], - 'tentage': ['genetta', 'tentage'], - 'tentation': ['attention', 'tentation'], - 'tentative': ['attentive', 'tentative'], - 'tentatively': ['attentively', 'tentatively'], - 'tentativeness': ['attentiveness', 'tentativeness'], - 'tented': ['detent', 'netted', 'tented'], - 'tenter': ['netter', 'retent', 'tenter'], - 'tention': ['nettion', 'tention', 'tontine'], - 'tentorial': ['natrolite', 'tentorial'], - 'tenty': ['netty', 'tenty'], - 'tenuiroster': ['tenuiroster', 'urosternite'], - 'tenuistriate': ['intersituate', 'tenuistriate'], - 'tenure': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'], - 'tenurial': ['lutrinae', 'retinula', 'rutelian', 'tenurial'], - 'teocalli': ['colletia', 'teocalli'], - 'teosinte': ['noisette', 'teosinte'], - 'tepache': ['heptace', 'tepache'], - 'tepal': ['leapt', - 'palet', - 'patel', - 'pelta', - 'petal', - 'plate', - 'pleat', - 'tepal'], - 'tepanec': ['pentace', 'tepanec'], - 'tepecano': ['conepate', 'tepecano'], - 'tephrite': ['perthite', 'tephrite'], - 'tephritic': ['perthitic', 'tephritic'], - 'tephroite': ['heptorite', 'tephroite'], - 'tephrosis': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'], - 'tepor': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'], - 'tequila': ['liquate', 'tequila'], - 'tera': ['rate', 'tare', 'tear', 'tera'], - 'teraglin': ['integral', 'teraglin', 'triangle'], - 'terap': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'], - 'teras': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'], - 'teratism': ['mistreat', 'teratism'], - 'terbia': ['baiter', 'barite', 'rebait', 'terbia'], - 'terbium': ['burmite', 'imbrute', 'terbium'], - 'tercelet': ['electret', 'tercelet'], - 'terceron': ['corrente', 'terceron'], - 'tercia': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'], - 'tercine': ['citrene', 'enteric', 'enticer', 'tercine'], - 'tercio': ['erotic', 'tercio'], - 'terebilic': ['celtiberi', 'terebilic'], - 'terebinthian': ['terebinthian', 'terebinthina'], - 'terebinthina': ['terebinthian', 'terebinthina'], - 'terebra': ['rebater', 'terebra'], - 'terebral': ['barrelet', 'terebral'], - 'terentian': ['entertain', 'tarentine', 'terentian'], - 'teresa': ['asteer', - 'easter', - 'eastre', - 'reseat', - 'saeter', - 'seater', - 'staree', - 'teaser', - 'teresa'], - 'teresian': ['arsenite', 'resinate', 'teresian', 'teresina'], - 'teresina': ['arsenite', 'resinate', 'teresian', 'teresina'], - 'terete': ['teeter', 'terete'], - 'teretial': ['laterite', 'literate', 'teretial'], - 'tereus': ['retuse', 'tereus'], - 'tergal': ['raglet', 'tergal'], - 'tergant': ['garnett', 'gnatter', 'gratten', 'tergant'], - 'tergeminous': ['mentigerous', 'tergeminous'], - 'teri': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'], - 'teriann': ['entrain', 'teriann'], - 'terma': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'termagant': ['targetman', 'termagant'], - 'termes': ['mester', 'restem', 'temser', 'termes'], - 'termin': ['minter', 'remint', 'termin'], - 'terminal': ['terminal', 'tramline'], - 'terminalia': ['laminarite', 'terminalia'], - 'terminate': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'], - 'termini': ['interim', 'termini'], - 'terminine': ['intermine', 'nemertini', 'terminine'], - 'terminus': ['numerist', 'terminus'], - 'termital': ['remittal', 'termital'], - 'termite': ['emitter', 'termite'], - 'termly': ['myrtle', 'termly'], - 'termon': ['mentor', 'merton', 'termon', 'tormen'], - 'termor': ['termor', 'tremor'], - 'tern': ['rent', 'tern'], - 'terna': ['antre', 'arent', 'retan', 'terna'], - 'ternal': ['altern', 'antler', 'learnt', 'rental', 'ternal'], - 'ternar': ['arrent', 'errant', 'ranter', 'ternar'], - 'ternarious': ['souterrain', 'ternarious', 'trouserian'], - 'ternate': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'], - 'terne': ['enter', 'neter', 'renet', 'terne', 'treen'], - 'ternion': ['intoner', 'ternion'], - 'ternlet': ['nettler', 'ternlet'], - 'terp': ['pert', 'petr', 'terp'], - 'terpane': ['patener', 'pearten', 'petrean', 'terpane'], - 'terpeneless': ['repleteness', 'terpeneless'], - 'terpin': ['nipter', 'terpin'], - 'terpine': ['petrine', 'terpine'], - 'terpineol': ['interlope', 'interpole', 'repletion', 'terpineol'], - 'terpinol': ['pointrel', 'terpinol'], - 'terrace': ['caterer', 'recrate', 'retrace', 'terrace'], - 'terraciform': ['crateriform', 'terraciform'], - 'terrage': ['greater', 'regrate', 'terrage'], - 'terrain': ['arterin', 'retrain', 'terrain', 'trainer'], - 'terral': ['retral', 'terral'], - 'terrance': ['canterer', 'recanter', 'recreant', 'terrance'], - 'terrapin': ['pretrain', 'terrapin'], - 'terrar': ['tarrer', 'terrar'], - 'terrence': ['centerer', 'recenter', 'recentre', 'terrence'], - 'terrene': ['enterer', 'terrene'], - 'terret': ['retter', 'terret'], - 'terri': ['terri', 'tirer', 'trier'], - 'terrier': ['retirer', 'terrier'], - 'terrine': ['reinter', 'terrine'], - 'terron': ['terron', 'treron', 'troner'], - 'terry': ['retry', 'terry'], - 'terse': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'tersely': ['restyle', 'tersely'], - 'tersion': ['oestrin', 'tersion'], - 'tertia': ['attire', 'ratite', 'tertia'], - 'tertian': ['intreat', 'iterant', 'nitrate', 'tertian'], - 'tertiana': ['attainer', 'reattain', 'tertiana'], - 'terton': ['rotten', 'terton'], - 'tervee': ['revete', 'tervee'], - 'terzina': ['retzian', 'terzina'], - 'terzo': ['terzo', 'tozer'], - 'tesack': ['casket', 'tesack'], - 'teskere': ['skeeter', 'teskere'], - 'tessella': ['satelles', 'tessella'], - 'tesseral': ['rateless', 'tasseler', 'tearless', 'tesseral'], - 'test': ['sett', 'stet', 'test'], - 'testa': ['state', 'taste', 'tates', 'testa'], - 'testable': ['settable', 'testable'], - 'testament': ['statement', 'testament'], - 'testar': ['stater', 'taster', 'testar'], - 'teste': ['teest', 'teste'], - 'tested': ['detest', 'tested'], - 'testee': ['settee', 'testee'], - 'tester': ['retest', 'setter', 'street', 'tester'], - 'testes': ['sestet', 'testes', 'tsetse'], - 'testicle': ['telestic', 'testicle'], - 'testicular': ['testicular', 'trisulcate'], - 'testily': ['stylite', 'testily'], - 'testing': ['setting', 'testing'], - 'teston': ['ostent', 'teston'], - 'testor': ['sotter', 'testor'], - 'testril': ['litster', 'slitter', 'stilter', 'testril'], - 'testy': ['testy', 'tyste'], - 'tetanic': ['nictate', 'tetanic'], - 'tetanical': ['cantalite', 'lactinate', 'tetanical'], - 'tetanoid': ['antidote', 'tetanoid'], - 'tetanus': ['tetanus', 'unstate', 'untaste'], - 'tetarconid': ['detraction', 'doctrinate', 'tetarconid'], - 'tetard': ['tetard', 'tetrad'], - 'tetchy': ['chetty', 'tetchy'], - 'tete': ['teet', 'tete'], - 'tetel': ['ettle', 'tetel'], - 'tether': ['hetter', 'tether'], - 'tethys': ['stythe', 'tethys'], - 'tetra': ['atter', 'tater', 'teart', 'tetra', 'treat'], - 'tetracid': ['citrated', 'tetracid', 'tetradic'], - 'tetrad': ['tetard', 'tetrad'], - 'tetradic': ['citrated', 'tetracid', 'tetradic'], - 'tetragonia': ['giornatate', 'tetragonia'], - 'tetrahexahedron': ['hexatetrahedron', 'tetrahexahedron'], - 'tetrakishexahedron': ['hexakistetrahedron', 'tetrakishexahedron'], - 'tetralin': ['tetralin', 'triental'], - 'tetramin': ['intermat', 'martinet', 'tetramin'], - 'tetramine': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'], - 'tetrander': ['retardent', 'tetrander'], - 'tetrandrous': ['tetrandrous', 'unrostrated'], - 'tetrane': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'], - 'tetrao': ['rotate', 'tetrao'], - 'tetraodon': ['detonator', 'tetraodon'], - 'tetraonine': ['entoretina', 'tetraonine'], - 'tetraplous': ['supertotal', 'tetraplous'], - 'tetrasporic': ['tetrasporic', 'triceratops'], - 'tetraxonia': ['retaxation', 'tetraxonia'], - 'tetrical': ['tetrical', 'tractile'], - 'tetricous': ['tetricous', 'toreutics'], - 'tetronic': ['contrite', 'tetronic'], - 'tetrose': ['rosette', 'tetrose'], - 'tetterous': ['outstreet', 'tetterous'], - 'teucri': ['curite', 'teucri', 'uretic'], - 'teucrian': ['anuretic', 'centauri', 'centuria', 'teucrian'], - 'teucrin': ['nutrice', 'teucrin'], - 'teuk': ['ketu', 'teuk', 'tuke'], - 'tew': ['tew', 'wet'], - 'tewa': ['tewa', 'twae', 'weta'], - 'tewel': ['tewel', 'tweel'], - 'tewer': ['rewet', 'tewer', 'twere'], - 'tewit': ['tewit', 'twite'], - 'tewly': ['tewly', 'wetly'], - 'tha': ['aht', 'hat', 'tha'], - 'thai': ['hati', 'thai'], - 'thais': ['shita', 'thais'], - 'thalami': ['hamital', 'thalami'], - 'thaler': ['arthel', 'halter', 'lather', 'thaler'], - 'thalia': ['hiatal', 'thalia'], - 'thaliard': ['hardtail', 'thaliard'], - 'thamesis': ['mathesis', 'thamesis'], - 'than': ['hant', 'tanh', 'than'], - 'thana': ['atnah', 'tanha', 'thana'], - 'thanan': ['nathan', 'thanan'], - 'thanatism': ['staithman', 'thanatism'], - 'thanatotic': ['chattation', 'thanatotic'], - 'thane': ['enhat', 'ethan', 'nathe', 'neath', 'thane'], - 'thanker': ['rethank', 'thanker'], - 'thapes': ['spathe', 'thapes'], - 'thar': ['hart', 'rath', 'tahr', 'thar', 'trah'], - 'tharen': ['anther', 'nather', 'tharen', 'thenar'], - 'tharm': ['tharm', 'thram'], - 'thasian': ['ashanti', 'sanhita', 'shaitan', 'thasian'], - 'that': ['hatt', 'tath', 'that'], - 'thatcher': ['rethatch', 'thatcher'], - 'thaw': ['thaw', 'wath', 'what'], - 'thawer': ['rethaw', 'thawer', 'wreath'], - 'the': ['het', 'the'], - 'thea': ['ahet', 'haet', 'hate', 'heat', 'thea'], - 'theah': ['heath', 'theah'], - 'thearchy': ['hatchery', 'thearchy'], - 'theat': ['theat', 'theta'], - 'theater': ['teather', 'theater', 'thereat'], - 'theatricism': ['chemiatrist', 'chrismatite', 'theatricism'], - 'theatropolis': ['strophiolate', 'theatropolis'], - 'theatry': ['hattery', 'theatry'], - 'theb': ['beth', 'theb'], - 'thebaid': ['habited', 'thebaid'], - 'theca': ['cheat', 'tache', 'teach', 'theca'], - 'thecae': ['achete', 'hecate', 'teache', 'thecae'], - 'thecal': ['achtel', 'chalet', 'thecal', 'thecla'], - 'thecasporal': ['archapostle', 'thecasporal'], - 'thecata': ['attache', 'thecata'], - 'thecitis': ['ethicist', 'thecitis', 'theistic'], - 'thecla': ['achtel', 'chalet', 'thecal', 'thecla'], - 'theer': ['ether', 'rethe', 'theer', 'there', 'three'], - 'theet': ['teeth', 'theet'], - 'thegn': ['ghent', 'thegn'], - 'thegnly': ['lengthy', 'thegnly'], - 'theine': ['ethine', 'theine'], - 'their': ['ither', 'their'], - 'theirn': ['hinter', 'nither', 'theirn'], - 'theirs': ['shrite', 'theirs'], - 'theism': ['theism', 'themis'], - 'theist': ['theist', 'thetis'], - 'theistic': ['ethicist', 'thecitis', 'theistic'], - 'thema': ['ahmet', 'thema'], - 'thematic': ['mathetic', 'thematic'], - 'thematist': ['hattemist', 'thematist'], - 'themer': ['mether', 'themer'], - 'themis': ['theism', 'themis'], - 'themistian': ['antitheism', 'themistian'], - 'then': ['hent', 'neth', 'then'], - 'thenal': ['ethnal', 'hantle', 'lathen', 'thenal'], - 'thenar': ['anther', 'nather', 'tharen', 'thenar'], - 'theobald': ['bolthead', 'theobald'], - 'theocrasia': ['oireachtas', 'theocrasia'], - 'theocrat': ['theocrat', 'trochate'], - 'theocratic': ['rheotactic', 'theocratic'], - 'theodora': ['dorothea', 'theodora'], - 'theodore': ['theodore', 'treehood'], - 'theogonal': ['halogeton', 'theogonal'], - 'theologic': ['ethologic', 'theologic'], - 'theological': ['ethological', 'lethologica', 'theological'], - 'theologism': ['hemologist', 'theologism'], - 'theology': ['ethology', 'theology'], - 'theophanic': ['phaethonic', 'theophanic'], - 'theophilist': ['philotheist', 'theophilist'], - 'theopsychism': ['psychotheism', 'theopsychism'], - 'theorbo': ['boother', 'theorbo'], - 'theorematic': ['heteratomic', 'theorematic'], - 'theoretic': ['heterotic', 'theoretic'], - 'theoretician': ['heretication', 'theoretician'], - 'theorician': ['antiheroic', 'theorician'], - 'theorics': ['chirotes', 'theorics'], - 'theorism': ['homerist', 'isotherm', 'otherism', 'theorism'], - 'theorist': ['otherist', 'theorist'], - 'theorizer': ['rhetorize', 'theorizer'], - 'theorum': ['mouther', 'theorum'], - 'theotherapy': ['heteropathy', 'theotherapy'], - 'therblig': ['blighter', 'therblig'], - 'there': ['ether', 'rethe', 'theer', 'there', 'three'], - 'thereas': ['thereas', 'theresa'], - 'thereat': ['teather', 'theater', 'thereat'], - 'therein': ['enherit', 'etherin', 'neither', 'therein'], - 'thereness': ['retheness', 'thereness', 'threeness'], - 'thereology': ['heterology', 'thereology'], - 'theres': ['esther', 'hester', 'theres'], - 'theresa': ['thereas', 'theresa'], - 'therese': ['sheeter', 'therese'], - 'therewithal': ['therewithal', 'whitleather'], - 'theriac': ['certhia', 'rhaetic', 'theriac'], - 'therial': ['hairlet', 'therial'], - 'theriodic': ['dichroite', 'erichtoid', 'theriodic'], - 'theriodonta': ['dehortation', 'theriodonta'], - 'thermantic': ['intermatch', 'thermantic'], - 'thermo': ['mother', 'thermo'], - 'thermobarograph': ['barothermograph', 'thermobarograph'], - 'thermoelectric': ['electrothermic', 'thermoelectric'], - 'thermoelectrometer': ['electrothermometer', 'thermoelectrometer'], - 'thermogalvanometer': ['galvanothermometer', 'thermogalvanometer'], - 'thermogeny': ['mythogreen', 'thermogeny'], - 'thermography': ['mythographer', 'thermography'], - 'thermology': ['mythologer', 'thermology'], - 'thermos': ['smother', 'thermos'], - 'thermotype': ['phytometer', 'thermotype'], - 'thermotypic': ['phytometric', 'thermotypic'], - 'thermotypy': ['phytometry', 'thermotypy'], - 'theroid': ['rhodite', 'theroid'], - 'theron': ['hornet', 'nother', 'theron', 'throne'], - 'thersitical': ['thersitical', 'trachelitis'], - 'these': ['sheet', 'these'], - 'thesean': ['sneathe', 'thesean'], - 'thesial': ['heliast', 'thesial'], - 'thesis': ['shiest', 'thesis'], - 'theta': ['theat', 'theta'], - 'thetical': ['athletic', 'thetical'], - 'thetis': ['theist', 'thetis'], - 'thew': ['hewt', 'thew', 'whet'], - 'they': ['they', 'yeth'], - 'theyre': ['theyre', 'yether'], - 'thicken': ['kitchen', 'thicken'], - 'thickener': ['kitchener', 'rethicken', 'thickener'], - 'thicket': ['chettik', 'thicket'], - 'thienyl': ['ethylin', 'thienyl'], - 'thig': ['gith', 'thig'], - 'thigh': ['hight', 'thigh'], - 'thill': ['illth', 'thill'], - 'thin': ['hint', 'thin'], - 'thing': ['night', 'thing'], - 'thingal': ['halting', 'lathing', 'thingal'], - 'thingless': ['lightness', 'nightless', 'thingless'], - 'thinglet': ['thinglet', 'thlinget'], - 'thinglike': ['nightlike', 'thinglike'], - 'thingly': ['nightly', 'thingly'], - 'thingman': ['nightman', 'thingman'], - 'thinker': ['rethink', 'thinker'], - 'thio': ['hoit', 'hoti', 'thio'], - 'thiocresol': ['holosteric', 'thiocresol'], - 'thiol': ['litho', 'thiol', 'tholi'], - 'thiolacetic': ['heliotactic', 'thiolacetic'], - 'thiophenol': ['lithophone', 'thiophenol'], - 'thiopyran': ['phoniatry', 'thiopyran'], - 'thirlage': ['litharge', 'thirlage'], - 'this': ['hist', 'sith', 'this', 'tshi'], - 'thissen': ['sithens', 'thissen'], - 'thistle': ['lettish', 'thistle'], - 'thlinget': ['thinglet', 'thlinget'], - 'tho': ['hot', 'tho'], - 'thob': ['both', 'thob'], - 'thole': ['helot', 'hotel', 'thole'], - 'tholi': ['litho', 'thiol', 'tholi'], - 'tholos': ['soloth', 'tholos'], - 'thomaean': ['amaethon', 'thomaean'], - 'thomasine': ['hematosin', 'thomasine'], - 'thomisid': ['isthmoid', 'thomisid'], - 'thomsonite': ['monotheist', 'thomsonite'], - 'thonder': ['thonder', 'thorned'], - 'thonga': ['gnatho', 'thonga'], - 'thoo': ['hoot', 'thoo', 'toho'], - 'thoom': ['mooth', 'thoom'], - 'thoracectomy': ['chromatocyte', 'thoracectomy'], - 'thoracic': ['thoracic', 'tocharic', 'trochaic'], - 'thoral': ['harlot', 'orthal', 'thoral'], - 'thore': ['other', 'thore', 'throe', 'toher'], - 'thoric': ['chorti', 'orthic', 'thoric', 'trochi'], - 'thorina': ['orthian', 'thorina'], - 'thorite': ['hortite', 'orthite', 'thorite'], - 'thorn': ['north', 'thorn'], - 'thorned': ['thonder', 'thorned'], - 'thornhead': ['rhodanthe', 'thornhead'], - 'thorny': ['rhyton', 'thorny'], - 'thoro': ['ortho', 'thoro'], - 'thort': ['thort', 'troth'], - 'thos': ['host', 'shot', 'thos', 'tosh'], - 'those': ['ethos', 'shote', 'those'], - 'thowel': ['howlet', 'thowel'], - 'thraces': ['stacher', 'thraces'], - 'thracian': ['taranchi', 'thracian'], - 'thraep': ['thraep', 'threap'], - 'thrain': ['hartin', 'thrain'], - 'thram': ['tharm', 'thram'], - 'thrang': ['granth', 'thrang'], - 'thrasher': ['rethrash', 'thrasher'], - 'thrast': ['strath', 'thrast'], - 'thraw': ['thraw', 'warth', 'whart', 'wrath'], - 'thread': ['dearth', 'hatred', 'rathed', 'thread'], - 'threaden': ['adherent', 'headrent', 'neatherd', 'threaden'], - 'threader': ['rethread', 'threader'], - 'threadworm': ['motherward', 'threadworm'], - 'thready': ['hydrate', 'thready'], - 'threap': ['thraep', 'threap'], - 'threat': ['hatter', 'threat'], - 'threatener': ['rethreaten', 'threatener'], - 'three': ['ether', 'rethe', 'theer', 'there', 'three'], - 'threeling': ['lightener', 'relighten', 'threeling'], - 'threeness': ['retheness', 'thereness', 'threeness'], - 'threne': ['erthen', 'henter', 'nether', 'threne'], - 'threnode': ['dethrone', 'threnode'], - 'threnodic': ['chondrite', 'threnodic'], - 'threnos': ['shorten', 'threnos'], - 'thresher': ['rethresh', 'thresher'], - 'thrice': ['cither', 'thrice'], - 'thriller': ['rethrill', 'thriller'], - 'thripel': ['philter', 'thripel'], - 'thripidae': ['rhipidate', 'thripidae'], - 'throat': ['athort', 'throat'], - 'throb': ['broth', 'throb'], - 'throe': ['other', 'thore', 'throe', 'toher'], - 'thronal': ['althorn', 'anthrol', 'thronal'], - 'throne': ['hornet', 'nother', 'theron', 'throne'], - 'throu': ['routh', 'throu'], - 'throughout': ['outthrough', 'throughout'], - 'throw': ['throw', 'whort', 'worth', 'wroth'], - 'throwdown': ['downthrow', 'throwdown'], - 'thrower': ['rethrow', 'thrower'], - 'throwing': ['ingrowth', 'throwing'], - 'throwout': ['outthrow', 'outworth', 'throwout'], - 'thrum': ['thrum', 'thurm'], - 'thrust': ['struth', 'thrust'], - 'thruster': ['rethrust', 'thruster'], - 'thuan': ['ahunt', 'haunt', 'thuan', 'unhat'], - 'thulr': ['thulr', 'thurl'], - 'thunderbearing': ['thunderbearing', 'underbreathing'], - 'thunderer': ['rethunder', 'thunderer'], - 'thundering': ['thundering', 'underthing'], - 'thuoc': ['couth', 'thuoc', 'touch'], - 'thurl': ['thulr', 'thurl'], - 'thurm': ['thrum', 'thurm'], - 'thurse': ['reshut', 'suther', 'thurse', 'tusher'], - 'thurt': ['thurt', 'truth'], - 'thus': ['shut', 'thus', 'tush'], - 'thusness': ['shutness', 'thusness'], - 'thwacker': ['thwacker', 'whatreck'], - 'thwartover': ['overthwart', 'thwartover'], - 'thymelic': ['methylic', 'thymelic'], - 'thymetic': ['hymettic', 'thymetic'], - 'thymus': ['mythus', 'thymus'], - 'thyreogenous': ['heterogynous', 'thyreogenous'], - 'thyreohyoid': ['hyothyreoid', 'thyreohyoid'], - 'thyreoid': ['hydriote', 'thyreoid'], - 'thyreoidal': ['thyreoidal', 'thyroideal'], - 'thyreosis': ['oysterish', 'thyreosis'], - 'thyris': ['shirty', 'thyris'], - 'thyrocricoid': ['cricothyroid', 'thyrocricoid'], - 'thyrogenic': ['thyrogenic', 'trichogyne'], - 'thyrohyoid': ['hyothyroid', 'thyrohyoid'], - 'thyroideal': ['thyreoidal', 'thyroideal'], - 'thyroiodin': ['iodothyrin', 'thyroiodin'], - 'thyroprivic': ['thyroprivic', 'vitrophyric'], - 'thysanopteran': ['parasyntheton', 'thysanopteran'], - 'thysel': ['shelty', 'thysel'], - 'ti': ['it', 'ti'], - 'tiang': ['giant', 'tangi', 'tiang'], - 'tiao': ['iota', 'tiao'], - 'tiar': ['airt', 'rita', 'tari', 'tiar'], - 'tiara': ['arati', 'atria', 'riata', 'tarai', 'tiara'], - 'tiarella': ['arillate', 'tiarella'], - 'tib': ['bit', 'tib'], - 'tibetan': ['bettina', 'tabinet', 'tibetan'], - 'tibial': ['bilati', 'tibial'], - 'tibiale': ['biliate', 'tibiale'], - 'tibiofemoral': ['femorotibial', 'tibiofemoral'], - 'tic': ['cit', 'tic'], - 'ticca': ['cacti', 'ticca'], - 'tice': ['ceti', 'cite', 'tice'], - 'ticer': ['citer', 'recti', 'ticer', 'trice'], - 'tichodroma': ['chromatoid', 'tichodroma'], - 'ticketer': ['reticket', 'ticketer'], - 'tickler': ['tickler', 'trickle'], - 'tickproof': ['prickfoot', 'tickproof'], - 'ticuna': ['anicut', 'nautic', 'ticuna', 'tunica'], - 'ticunan': ['ticunan', 'tunican'], - 'tid': ['dit', 'tid'], - 'tidal': ['datil', 'dital', 'tidal', 'tilda'], - 'tiddley': ['lyddite', 'tiddley'], - 'tide': ['diet', 'dite', 'edit', 'tide', 'tied'], - 'tidely': ['idlety', 'lydite', 'tidely', 'tidley'], - 'tiding': ['tiding', 'tingid'], - 'tidley': ['idlety', 'lydite', 'tidely', 'tidley'], - 'tied': ['diet', 'dite', 'edit', 'tide', 'tied'], - 'tien': ['iten', 'neti', 'tien', 'tine'], - 'tiepin': ['pinite', 'tiepin'], - 'tier': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'], - 'tierce': ['cerite', 'certie', 'recite', 'tierce'], - 'tiered': ['dieter', 'tiered'], - 'tierer': ['errite', 'reiter', 'retier', 'retire', 'tierer'], - 'tiffy': ['fifty', 'tiffy'], - 'tifter': ['fitter', 'tifter'], - 'tig': ['git', 'tig'], - 'tigella': ['tigella', 'tillage'], - 'tiger': ['tiger', 'tigre'], - 'tigereye': ['geyerite', 'tigereye'], - 'tightener': ['retighten', 'tightener'], - 'tiglinic': ['lignitic', 'tiglinic'], - 'tigre': ['tiger', 'tigre'], - 'tigrean': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'], - 'tigress': ['striges', 'tigress'], - 'tigrine': ['igniter', 'ringite', 'tigrine'], - 'tigurine': ['intrigue', 'tigurine'], - 'tikka': ['katik', 'tikka'], - 'tikur': ['tikur', 'turki'], - 'til': ['lit', 'til'], - 'tilaite': ['italite', 'letitia', 'tilaite'], - 'tilda': ['datil', 'dital', 'tidal', 'tilda'], - 'tilde': ['tilde', 'tiled'], - 'tile': ['lite', 'teil', 'teli', 'tile'], - 'tiled': ['tilde', 'tiled'], - 'tiler': ['liter', 'tiler'], - 'tilery': ['tilery', 'tilyer'], - 'tileways': ['sweatily', 'tileways'], - 'tileyard': ['dielytra', 'tileyard'], - 'tilia': ['itali', 'tilia'], - 'tilikum': ['kulimit', 'tilikum'], - 'till': ['lilt', 'till'], - 'tillable': ['belltail', 'bletilla', 'tillable'], - 'tillaea': ['alalite', 'tillaea'], - 'tillage': ['tigella', 'tillage'], - 'tiller': ['retill', 'rillet', 'tiller'], - 'tilmus': ['litmus', 'tilmus'], - 'tilpah': ['lapith', 'tilpah'], - 'tilter': ['litter', 'tilter', 'titler'], - 'tilting': ['tilting', 'titling', 'tlingit'], - 'tiltup': ['tiltup', 'uptilt'], - 'tilyer': ['tilery', 'tilyer'], - 'timable': ['limbate', 'timable', 'timbale'], - 'timaeus': ['metusia', 'suimate', 'timaeus'], - 'timaline': ['meliatin', 'timaline'], - 'timani': ['intima', 'timani'], - 'timar': ['mitra', 'tarmi', 'timar', 'tirma'], - 'timbal': ['limbat', 'timbal'], - 'timbale': ['limbate', 'timable', 'timbale'], - 'timber': ['betrim', 'timber', 'timbre'], - 'timbered': ['bemitred', 'timbered'], - 'timberer': ['retimber', 'timberer'], - 'timberlike': ['kimberlite', 'timberlike'], - 'timbre': ['betrim', 'timber', 'timbre'], - 'time': ['emit', 'item', 'mite', 'time'], - 'timecard': ['dermatic', 'timecard'], - 'timed': ['demit', 'timed'], - 'timeproof': ['miteproof', 'timeproof'], - 'timer': ['merit', 'miter', 'mitre', 'remit', 'timer'], - 'times': ['metis', 'smite', 'stime', 'times'], - 'timesaving': ['negativism', 'timesaving'], - 'timework': ['timework', 'worktime'], - 'timid': ['dimit', 'timid'], - 'timidly': ['mytilid', 'timidly'], - 'timidness': ['destinism', 'timidness'], - 'timish': ['isthmi', 'timish'], - 'timne': ['metin', 'temin', 'timne'], - 'timo': ['itmo', 'moit', 'omit', 'timo'], - 'timon': ['minot', 'timon', 'tomin'], - 'timorese': ['rosetime', 'timorese', 'tiresome'], - 'timpani': ['impaint', 'timpani'], - 'timpano': ['maintop', 'ptomain', 'tampion', 'timpano'], - 'tin': ['nit', 'tin'], - 'tina': ['aint', 'anti', 'tain', 'tina'], - 'tincal': ['catlin', 'tincal'], - 'tinchel': ['linchet', 'tinchel'], - 'tinctorial': ['tinctorial', 'trinoctial'], - 'tind': ['dint', 'tind'], - 'tindal': ['antlid', 'tindal'], - 'tindalo': ['itoland', 'talonid', 'tindalo'], - 'tinder': ['dirten', 'rident', 'tinder'], - 'tindered': ['dendrite', 'tindered'], - 'tinderous': ['detrusion', 'tinderous', 'unstoried'], - 'tine': ['iten', 'neti', 'tien', 'tine'], - 'tinea': ['entia', 'teian', 'tenai', 'tinea'], - 'tineal': ['entail', 'tineal'], - 'tinean': ['annite', 'innate', 'tinean'], - 'tined': ['detin', 'teind', 'tined'], - 'tineid': ['indite', 'tineid'], - 'tineman': ['mannite', 'tineman'], - 'tineoid': ['edition', 'odinite', 'otidine', 'tineoid'], - 'tinetare': ['intereat', 'tinetare'], - 'tinety': ['entity', 'tinety'], - 'tinged': ['nidget', 'tinged'], - 'tinger': ['engirt', 'tinger'], - 'tingid': ['tiding', 'tingid'], - 'tingitidae': ['indigitate', 'tingitidae'], - 'tingler': ['ringlet', 'tingler', 'tringle'], - 'tinhouse': ['outshine', 'tinhouse'], - 'tink': ['knit', 'tink'], - 'tinker': ['reknit', 'tinker'], - 'tinkerer': ['retinker', 'tinkerer'], - 'tinkler': ['tinkler', 'trinkle'], - 'tinlet': ['litten', 'tinlet'], - 'tinne': ['innet', 'tinne'], - 'tinned': ['dentin', 'indent', 'intend', 'tinned'], - 'tinner': ['intern', 'tinner'], - 'tinnet': ['intent', 'tinnet'], - 'tino': ['into', 'nito', 'oint', 'tino'], - 'tinoceras': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'], - 'tinosa': ['sotnia', 'tinosa'], - 'tinsel': ['enlist', 'listen', 'silent', 'tinsel'], - 'tinselly': ['silently', 'tinselly'], - 'tinta': ['taint', 'tanti', 'tinta', 'titan'], - 'tintage': ['attinge', 'tintage'], - 'tinter': ['nitter', 'tinter'], - 'tintie': ['tintie', 'titien'], - 'tintiness': ['insistent', 'tintiness'], - 'tinty': ['nitty', 'tinty'], - 'tinworker': ['interwork', 'tinworker'], - 'tionontates': ['ostentation', 'tionontates'], - 'tip': ['pit', 'tip'], - 'tipe': ['piet', 'tipe'], - 'tipful': ['tipful', 'uplift'], - 'tipless': ['pitless', 'tipless'], - 'tipman': ['pitman', 'tampin', 'tipman'], - 'tipper': ['rippet', 'tipper'], - 'tippler': ['ripplet', 'tippler', 'tripple'], - 'tipster': ['spitter', 'tipster'], - 'tipstock': ['potstick', 'tipstock'], - 'tipula': ['tipula', 'tulipa'], - 'tiralee': ['atelier', 'tiralee'], - 'tire': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'], - 'tired': ['diter', 'tired', 'tried'], - 'tiredly': ['tiredly', 'triedly'], - 'tiredness': ['dissenter', 'tiredness'], - 'tireless': ['riteless', 'tireless'], - 'tirelessness': ['ritelessness', 'tirelessness'], - 'tiremaid': ['dimetria', 'mitridae', 'tiremaid', 'triamide'], - 'tireman': ['minaret', 'raiment', 'tireman'], - 'tirer': ['terri', 'tirer', 'trier'], - 'tiresmith': ['tiresmith', 'tritheism'], - 'tiresome': ['rosetime', 'timorese', 'tiresome'], - 'tirma': ['mitra', 'tarmi', 'timar', 'tirma'], - 'tirolean': ['oriental', 'relation', 'tirolean'], - 'tirolese': ['literose', 'roselite', 'tirolese'], - 'tirve': ['rivet', 'tirve', 'tiver'], - 'tisane': ['satine', 'tisane'], - 'tisar': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'titan': ['taint', 'tanti', 'tinta', 'titan'], - 'titaness': ['antistes', 'titaness'], - 'titanic': ['tanitic', 'titanic'], - 'titano': ['otiant', 'titano'], - 'titanocolumbate': ['columbotitanate', 'titanocolumbate'], - 'titanofluoride': ['rotundifoliate', 'titanofluoride'], - 'titanosaur': ['saturation', 'titanosaur'], - 'titanosilicate': ['silicotitanate', 'titanosilicate'], - 'titanous': ['outsaint', 'titanous'], - 'titanyl': ['nattily', 'titanyl'], - 'titar': ['ratti', 'titar', 'trait'], - 'titer': ['titer', 'titre', 'trite'], - 'tithable': ['hittable', 'tithable'], - 'tither': ['hitter', 'tither'], - 'tithonic': ['chinotti', 'tithonic'], - 'titien': ['tintie', 'titien'], - 'titleboard': ['titleboard', 'trilobated'], - 'titler': ['litter', 'tilter', 'titler'], - 'titling': ['tilting', 'titling', 'tlingit'], - 'titrate': ['attrite', 'titrate'], - 'titration': ['attrition', 'titration'], - 'titre': ['titer', 'titre', 'trite'], - 'tiver': ['rivet', 'tirve', 'tiver'], - 'tiza': ['itza', 'tiza', 'zati'], - 'tlaco': ['lacto', 'tlaco'], - 'tlingit': ['tilting', 'titling', 'tlingit'], - 'tmesis': ['misset', 'tmesis'], - 'toa': ['oat', 'tao', 'toa'], - 'toad': ['doat', 'toad', 'toda'], - 'toader': ['doater', 'toader'], - 'toadflower': ['floodwater', 'toadflower', 'waterflood'], - 'toadier': ['roadite', 'toadier'], - 'toadish': ['doatish', 'toadish'], - 'toady': ['toady', 'today'], - 'toadyish': ['toadyish', 'todayish'], - 'toag': ['goat', 'toag', 'toga'], - 'toast': ['stoat', 'toast'], - 'toaster': ['retoast', 'rosetta', 'stoater', 'toaster'], - 'toba': ['boat', 'bota', 'toba'], - 'tobe': ['bote', 'tobe'], - 'tobiah': ['bhotia', 'tobiah'], - 'tobine': ['botein', 'tobine'], - 'toccata': ['attacco', 'toccata'], - 'tocharese': ['escheator', 'tocharese'], - 'tocharian': ['archontia', 'tocharian'], - 'tocharic': ['thoracic', 'tocharic', 'trochaic'], - 'tocher': ['hector', 'rochet', 'tocher', 'troche'], - 'toco': ['coot', 'coto', 'toco'], - 'tocogenetic': ['geotectonic', 'tocogenetic'], - 'tocometer': ['octometer', 'rectotome', 'tocometer'], - 'tocsin': ['nostic', 'sintoc', 'tocsin'], - 'tod': ['dot', 'tod'], - 'toda': ['doat', 'toad', 'toda'], - 'today': ['toady', 'today'], - 'todayish': ['toadyish', 'todayish'], - 'toddle': ['dodlet', 'toddle'], - 'tode': ['dote', 'tode', 'toed'], - 'todea': ['deota', 'todea'], - 'tody': ['doty', 'tody'], - 'toecap': ['capote', 'toecap'], - 'toed': ['dote', 'tode', 'toed'], - 'toeless': ['osselet', 'sestole', 'toeless'], - 'toenail': ['alnoite', 'elation', 'toenail'], - 'tog': ['got', 'tog'], - 'toga': ['goat', 'toag', 'toga'], - 'togaed': ['dogate', 'dotage', 'togaed'], - 'togalike': ['goatlike', 'togalike'], - 'toggel': ['goglet', 'toggel', 'toggle'], - 'toggle': ['goglet', 'toggel', 'toggle'], - 'togs': ['stog', 'togs'], - 'toher': ['other', 'thore', 'throe', 'toher'], - 'toho': ['hoot', 'thoo', 'toho'], - 'tohunga': ['hangout', 'tohunga'], - 'toi': ['ito', 'toi'], - 'toil': ['ilot', 'toil'], - 'toiler': ['loiter', 'toiler', 'triole'], - 'toilet': ['lottie', 'toilet', 'tolite'], - 'toiletry': ['toiletry', 'tyrolite'], - 'toise': ['sotie', 'toise'], - 'tokay': ['otyak', 'tokay'], - 'toke': ['keto', 'oket', 'toke'], - 'toko': ['koto', 'toko', 'took'], - 'tol': ['lot', 'tol'], - 'tolamine': ['lomatine', 'tolamine'], - 'tolan': ['notal', 'ontal', 'talon', 'tolan', 'tonal'], - 'tolane': ['etalon', 'tolane'], - 'told': ['dolt', 'told'], - 'tole': ['leto', 'lote', 'tole'], - 'toledan': ['taloned', 'toledan'], - 'toledo': ['toledo', 'toodle'], - 'tolerance': ['antrocele', 'coeternal', 'tolerance'], - 'tolerancy': ['alectryon', 'tolerancy'], - 'tolidine': ['lindoite', 'tolidine'], - 'tolite': ['lottie', 'toilet', 'tolite'], - 'tollery': ['tollery', 'trolley'], - 'tolly': ['tolly', 'tolyl'], - 'tolpatch': ['potlatch', 'tolpatch'], - 'tolsey': ['tolsey', 'tylose'], - 'tolter': ['lotter', 'rottle', 'tolter'], - 'tolu': ['lout', 'tolu'], - 'toluic': ['coutil', 'toluic'], - 'toluifera': ['foliature', 'toluifera'], - 'tolyl': ['tolly', 'tolyl'], - 'tom': ['mot', 'tom'], - 'toma': ['atmo', 'atom', 'moat', 'toma'], - 'toman': ['manto', 'toman'], - 'tomas': ['atmos', 'stoma', 'tomas'], - 'tombac': ['combat', 'tombac'], - 'tome': ['mote', 'tome'], - 'tomentose': ['metosteon', 'tomentose'], - 'tomial': ['lomita', 'tomial'], - 'tomin': ['minot', 'timon', 'tomin'], - 'tomographic': ['motographic', 'tomographic'], - 'tomorn': ['morton', 'tomorn'], - 'tomorrow': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'], - 'ton': ['not', 'ton'], - 'tonal': ['notal', 'ontal', 'talon', 'tolan', 'tonal'], - 'tonalitive': ['levitation', 'tonalitive', 'velitation'], - 'tonation': ['notation', 'tonation'], - 'tone': ['note', 'tone'], - 'toned': ['donet', 'noted', 'toned'], - 'toneless': ['noteless', 'toneless'], - 'tonelessly': ['notelessly', 'tonelessly'], - 'tonelessness': ['notelessness', 'tonelessness'], - 'toner': ['noter', 'tenor', 'toner', 'trone'], - 'tonetic': ['entotic', 'tonetic'], - 'tonetics': ['stenotic', 'tonetics'], - 'tonga': ['tango', 'tonga'], - 'tongan': ['ganton', 'tongan'], - 'tongas': ['sontag', 'tongas'], - 'tonger': ['geront', 'tonger'], - 'tongrian': ['ignorant', 'tongrian'], - 'tongs': ['stong', 'tongs'], - 'tonicize': ['nicotize', 'tonicize'], - 'tonicoclonic': ['clonicotonic', 'tonicoclonic'], - 'tonify': ['notify', 'tonify'], - 'tonish': ['histon', 'shinto', 'tonish'], - 'tonk': ['knot', 'tonk'], - 'tonkin': ['inknot', 'tonkin'], - 'tonna': ['anton', 'notan', 'tonna'], - 'tonological': ['ontological', 'tonological'], - 'tonology': ['ontology', 'tonology'], - 'tonsorial': ['tonsorial', 'torsional'], - 'tonsure': ['snouter', 'tonsure', 'unstore'], - 'tonsured': ['tonsured', 'unsorted', 'unstored'], - 'tontine': ['nettion', 'tention', 'tontine'], - 'tonus': ['notus', 'snout', 'stoun', 'tonus'], - 'tony': ['tony', 'yont'], - 'too': ['oto', 'too'], - 'toodle': ['toledo', 'toodle'], - 'took': ['koto', 'toko', 'took'], - 'tool': ['loot', 'tool'], - 'tooler': ['looter', 'retool', 'rootle', 'tooler'], - 'tooling': ['ilongot', 'tooling'], - 'toom': ['moot', 'toom'], - 'toon': ['onto', 'oont', 'toon'], - 'toona': ['naoto', 'toona'], - 'toop': ['poot', 'toop', 'topo'], - 'toosh': ['shoot', 'sooth', 'sotho', 'toosh'], - 'toot': ['otto', 'toot', 'toto'], - 'toother': ['retooth', 'toother'], - 'toothpick': ['picktooth', 'toothpick'], - 'tootler': ['rootlet', 'tootler'], - 'top': ['opt', 'pot', 'top'], - 'toparch': ['caphtor', 'toparch'], - 'topass': ['potass', 'topass'], - 'topchrome': ['ectomorph', 'topchrome'], - 'tope': ['peto', 'poet', 'pote', 'tope'], - 'toper': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'], - 'topfull': ['plotful', 'topfull'], - 'toph': ['phot', 'toph'], - 'tophus': ['tophus', 'upshot'], - 'topia': ['patio', 'taipo', 'topia'], - 'topiarist': ['parotitis', 'topiarist'], - 'topic': ['optic', 'picot', 'topic'], - 'topical': ['capitol', 'coalpit', 'optical', 'topical'], - 'topically': ['optically', 'topically'], - 'toplike': ['kitlope', 'potlike', 'toplike'], - 'topline': ['pointel', 'pontile', 'topline'], - 'topmaker': ['potmaker', 'topmaker'], - 'topmaking': ['potmaking', 'topmaking'], - 'topman': ['potman', 'tampon', 'topman'], - 'topmast': ['tapmost', 'topmast'], - 'topo': ['poot', 'toop', 'topo'], - 'topographics': ['coprophagist', 'topographics'], - 'topography': ['optography', 'topography'], - 'topological': ['optological', 'topological'], - 'topologist': ['optologist', 'topologist'], - 'topology': ['optology', 'topology'], - 'toponymal': ['monotypal', 'toponymal'], - 'toponymic': ['monotypic', 'toponymic'], - 'toponymical': ['monotypical', 'toponymical'], - 'topophone': ['optophone', 'topophone'], - 'topotype': ['optotype', 'topotype'], - 'topple': ['loppet', 'topple'], - 'toppler': ['preplot', 'toppler'], - 'toprail': ['portail', 'toprail'], - 'tops': ['post', 'spot', 'stop', 'tops'], - 'topsail': ['apostil', 'topsail'], - 'topside': ['deposit', 'topside'], - 'topsman': ['postman', 'topsman'], - 'topsoil': ['loopist', 'poloist', 'topsoil'], - 'topstone': ['potstone', 'topstone'], - 'toptail': ['ptilota', 'talipot', 'toptail'], - 'toque': ['quote', 'toque'], - 'tor': ['ort', 'rot', 'tor'], - 'tora': ['rota', 'taro', 'tora'], - 'toral': ['latro', 'rotal', 'toral'], - 'toran': ['orant', 'rotan', 'toran', 'trona'], - 'torbanite': ['abortient', 'torbanite'], - 'torcel': ['colter', 'lector', 'torcel'], - 'torch': ['chort', 'rotch', 'torch'], - 'tore': ['rote', 'tore'], - 'tored': ['doter', 'tored', 'trode'], - 'torenia': ['otarine', 'torenia'], - 'torero': ['reroot', 'rooter', 'torero'], - 'toreutics': ['tetricous', 'toreutics'], - 'torfel': ['floret', 'forlet', 'lofter', 'torfel'], - 'torgot': ['grotto', 'torgot'], - 'toric': ['toric', 'troic'], - 'torinese': ['serotine', 'torinese'], - 'torma': ['amort', 'morat', 'torma'], - 'tormen': ['mentor', 'merton', 'termon', 'tormen'], - 'tormina': ['amintor', 'tormina'], - 'torn': ['torn', 'tron'], - 'tornachile': ['chlorinate', 'ectorhinal', 'tornachile'], - 'tornado': ['donator', 'odorant', 'tornado'], - 'tornal': ['latron', 'lontar', 'tornal'], - 'tornaria': ['rotarian', 'tornaria'], - 'tornarian': ['narration', 'tornarian'], - 'tornese': ['enstore', 'estrone', 'storeen', 'tornese'], - 'torney': ['torney', 'tyrone'], - 'tornit': ['intort', 'tornit', 'triton'], - 'tornus': ['tornus', 'unsort'], - 'toro': ['root', 'roto', 'toro'], - 'torose': ['seroot', 'sooter', 'torose'], - 'torpent': ['portent', 'torpent'], - 'torpescent': ['precontest', 'torpescent'], - 'torpid': ['torpid', 'tripod'], - 'torpify': ['portify', 'torpify'], - 'torpor': ['portor', 'torpor'], - 'torque': ['quoter', 'roquet', 'torque'], - 'torques': ['questor', 'torques'], - 'torrubia': ['rubiator', 'torrubia'], - 'torsade': ['rosated', 'torsade'], - 'torse': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'], - 'torsel': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'], - 'torsile': ['estriol', 'torsile'], - 'torsion': ['isotron', 'torsion'], - 'torsional': ['tonsorial', 'torsional'], - 'torsk': ['stork', 'torsk'], - 'torso': ['roost', 'torso'], - 'torsten': ['snotter', 'stentor', 'torsten'], - 'tort': ['tort', 'trot'], - 'torta': ['ottar', 'tarot', 'torta', 'troat'], - 'torteau': ['outrate', 'outtear', 'torteau'], - 'torticone': ['torticone', 'tritocone'], - 'tortile': ['lotrite', 'tortile', 'triolet'], - 'tortilla': ['littoral', 'tortilla'], - 'tortonian': ['intonator', 'tortonian'], - 'tortrices': ['tortrices', 'trisector'], - 'torture': ['torture', 'trouter', 'tutorer'], - 'toru': ['rout', 'toru', 'tour'], - 'torula': ['rotula', 'torula'], - 'torulaform': ['formulator', 'torulaform'], - 'toruliform': ['rotuliform', 'toruliform'], - 'torulose': ['outsoler', 'torulose'], - 'torulus': ['rotulus', 'torulus'], - 'torus': ['roust', 'rusot', 'stour', 'sutor', 'torus'], - 'torve': ['overt', 'rovet', 'torve', 'trove', 'voter'], - 'tory': ['royt', 'ryot', 'tory', 'troy', 'tyro'], - 'toryish': ['history', 'toryish'], - 'toryism': ['toryism', 'trisomy'], - 'tosephtas': ['posthaste', 'tosephtas'], - 'tosh': ['host', 'shot', 'thos', 'tosh'], - 'tosher': ['hoster', 'tosher'], - 'toshly': ['hostly', 'toshly'], - 'toshnail': ['histonal', 'toshnail'], - 'toss': ['sots', 'toss'], - 'tosser': ['retoss', 'tosser'], - 'tossily': ['tossily', 'tylosis'], - 'tossup': ['tossup', 'uptoss'], - 'tost': ['stot', 'tost'], - 'total': ['lotta', 'total'], - 'totanine': ['intonate', 'totanine'], - 'totaquin': ['quintato', 'totaquin'], - 'totchka': ['hattock', 'totchka'], - 'totem': ['motet', 'motte', 'totem'], - 'toter': ['ortet', 'otter', 'toter'], - 'tother': ['hotter', 'tother'], - 'toto': ['otto', 'toot', 'toto'], - 'toty': ['toty', 'tyto'], - 'tou': ['out', 'tou'], - 'toucan': ['toucan', 'tucano', 'uncoat'], - 'touch': ['couth', 'thuoc', 'touch'], - 'toucher': ['retouch', 'toucher'], - 'touchily': ['couthily', 'touchily'], - 'touchiness': ['couthiness', 'touchiness'], - 'touching': ['touching', 'ungothic'], - 'touchless': ['couthless', 'touchless'], - 'toug': ['gout', 'toug'], - 'tough': ['ought', 'tough'], - 'toughness': ['oughtness', 'toughness'], - 'toup': ['pout', 'toup'], - 'tour': ['rout', 'toru', 'tour'], - 'tourer': ['retour', 'router', 'tourer'], - 'touring': ['outgrin', 'outring', 'routing', 'touring'], - 'tourism': ['sumitro', 'tourism'], - 'touristy': ['touristy', 'yttrious'], - 'tourmalinic': ['latrocinium', 'tourmalinic'], - 'tournamental': ['tournamental', 'ultramontane'], - 'tourte': ['tourte', 'touter'], - 'tousche': ['souchet', 'techous', 'tousche'], - 'touser': ['ouster', 'souter', 'touser', 'trouse'], - 'tousle': ['lutose', 'solute', 'tousle'], - 'touter': ['tourte', 'touter'], - 'tovaria': ['aviator', 'tovaria'], - 'tow': ['tow', 'two', 'wot'], - 'towel': ['owlet', 'towel'], - 'tower': ['rowet', 'tower', 'wrote'], - 'town': ['nowt', 'town', 'wont'], - 'towned': ['towned', 'wonted'], - 'towser': ['restow', 'stower', 'towser', 'worset'], - 'towy': ['towy', 'yowt'], - 'toxemia': ['oximate', 'toxemia'], - 'toy': ['toy', 'yot'], - 'toyer': ['royet', 'toyer'], - 'toyful': ['outfly', 'toyful'], - 'toyless': ['systole', 'toyless'], - 'toysome': ['myosote', 'toysome'], - 'tozer': ['terzo', 'tozer'], - 'tra': ['art', 'rat', 'tar', 'tra'], - 'trabea': ['abater', 'artabe', 'eartab', 'trabea'], - 'trace': ['caret', - 'carte', - 'cater', - 'crate', - 'creat', - 'creta', - 'react', - 'recta', - 'trace'], - 'traceable': ['creatable', 'traceable'], - 'tracer': ['arrect', 'carter', 'crater', 'recart', 'tracer'], - 'tracheata': ['cathartae', 'tracheata'], - 'trachelitis': ['thersitical', 'trachelitis'], - 'tracheolaryngotomy': ['laryngotracheotomy', 'tracheolaryngotomy'], - 'trachinoid': ['anhidrotic', 'trachinoid'], - 'trachitis': ['citharist', 'trachitis'], - 'trachle': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'], - 'trachoma': ['achromat', 'trachoma'], - 'trachylinae': ['chatelainry', 'trachylinae'], - 'trachyte': ['chattery', 'ratchety', 'trachyte'], - 'tracker': ['retrack', 'tracker'], - 'trackside': ['sidetrack', 'trackside'], - 'tractator': ['attractor', 'tractator'], - 'tractile': ['tetrical', 'tractile'], - 'tracy': ['carty', 'tracy'], - 'trade': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'trader': ['darter', - 'dartre', - 'redart', - 'retard', - 'retrad', - 'tarred', - 'trader'], - 'trading': ['darting', 'trading'], - 'tradite': ['attired', 'tradite'], - 'traditioner': ['retradition', 'traditioner'], - 'traditionism': ['mistradition', 'traditionism'], - 'traditorship': ['podarthritis', 'traditorship'], - 'traducent': ['reductant', 'traducent', 'truncated'], - 'trady': ['tardy', 'trady'], - 'trag': ['grat', 'trag'], - 'tragedial': ['taligrade', 'tragedial'], - 'tragicomedy': ['comitragedy', 'tragicomedy'], - 'tragulina': ['tragulina', 'triangula'], - 'traguline': ['granulite', 'traguline'], - 'trah': ['hart', 'rath', 'tahr', 'thar', 'trah'], - 'traheen': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'], - 'traik': ['kitar', 'krait', 'rakit', 'traik'], - 'trail': ['litra', 'trail', 'trial'], - 'trailer': ['retiral', 'retrial', 'trailer'], - 'trailery': ['literary', 'trailery'], - 'trailing': ['ringtail', 'trailing'], - 'trailside': ['dialister', 'trailside'], - 'train': ['riant', 'tairn', 'tarin', 'train'], - 'trainable': ['albertina', 'trainable'], - 'trainage': ['antiager', 'trainage'], - 'trainboy': ['bonitary', 'trainboy'], - 'trained': ['antired', 'detrain', 'randite', 'trained'], - 'trainee': ['enteria', 'trainee', 'triaene'], - 'trainer': ['arterin', 'retrain', 'terrain', 'trainer'], - 'trainless': ['sternalis', 'trainless'], - 'trainster': ['restraint', 'retransit', 'trainster', 'transiter'], - 'traintime': ['intimater', 'traintime'], - 'trainy': ['rytina', 'trainy', 'tyrian'], - 'traipse': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'], - 'trait': ['ratti', 'titar', 'trait'], - 'tram': ['mart', 'tram'], - 'trama': ['matar', 'matra', 'trama'], - 'tramal': ['matral', 'tramal'], - 'trame': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'trametes': ['teamster', 'trametes'], - 'tramline': ['terminal', 'tramline'], - 'tramper': ['retramp', 'tramper'], - 'trample': ['templar', 'trample'], - 'trampoline': ['intemporal', 'trampoline'], - 'tran': ['natr', 'rant', 'tarn', 'tran'], - 'trance': ['canter', - 'creant', - 'cretan', - 'nectar', - 'recant', - 'tanrec', - 'trance'], - 'tranced': ['cantred', 'centrad', 'tranced'], - 'trancelike': ['nectarlike', 'trancelike'], - 'trankum': ['trankum', 'turkman'], - 'transamination': ['transamination', 'transanimation'], - 'transanimation': ['transamination', 'transanimation'], - 'transept': ['prestant', 'transept'], - 'transeptally': ['platysternal', 'transeptally'], - 'transformer': ['retransform', 'transformer'], - 'transfuge': ['afterguns', 'transfuge'], - 'transient': ['instanter', 'transient'], - 'transigent': ['astringent', 'transigent'], - 'transimpression': ['pretransmission', 'transimpression'], - 'transire': ['restrain', 'strainer', 'transire'], - 'transit': ['straint', 'transit', 'tristan'], - 'transiter': ['restraint', 'retransit', 'trainster', 'transiter'], - 'transitive': ['revisitant', 'transitive'], - 'transmarine': ['strainerman', 'transmarine'], - 'transmit': ['tantrism', 'transmit'], - 'transmold': ['landstorm', 'transmold'], - 'transoceanic': ['narcaciontes', 'transoceanic'], - 'transonic': ['constrain', 'transonic'], - 'transpire': ['prestrain', 'transpire'], - 'transplanter': ['retransplant', 'transplanter'], - 'transportee': ['paternoster', 'prosternate', 'transportee'], - 'transporter': ['retransport', 'transporter'], - 'transpose': ['patroness', 'transpose'], - 'transposer': ['transposer', 'transprose'], - 'transprose': ['transposer', 'transprose'], - 'trap': ['part', 'prat', 'rapt', 'tarp', 'trap'], - 'trapa': ['apart', 'trapa'], - 'trapes': ['paster', 'repast', 'trapes'], - 'trapfall': ['pratfall', 'trapfall'], - 'traphole': ['plethora', 'traphole'], - 'trappean': ['apparent', 'trappean'], - 'traps': ['spart', 'sprat', 'strap', 'traps'], - 'traship': ['harpist', 'traship'], - 'trasy': ['satyr', 'stary', 'stray', 'trasy'], - 'traulism': ['altruism', 'muralist', 'traulism', 'ultraism'], - 'trauma': ['taruma', 'trauma'], - 'travale': ['larvate', 'lavaret', 'travale'], - 'trave': ['avert', 'tarve', 'taver', 'trave'], - 'travel': ['travel', 'varlet'], - 'traveler': ['retravel', 'revertal', 'traveler'], - 'traversion': ['overstrain', 'traversion'], - 'travertine': ['travertine', 'trinervate'], - 'travoy': ['travoy', 'votary'], - 'tray': ['arty', 'atry', 'tray'], - 'treacle': ['electra', 'treacle'], - 'tread': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'], - 'treader': ['derater', 'retrade', 'retread', 'treader'], - 'treading': ['gradient', 'treading'], - 'treadle': ['delater', 'related', 'treadle'], - 'treason': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'], - 'treasonish': ['astonisher', 'reastonish', 'treasonish'], - 'treasonist': ['steatornis', 'treasonist'], - 'treasonous': ['anoestrous', 'treasonous'], - 'treasurer': ['serrature', 'treasurer'], - 'treat': ['atter', 'tater', 'teart', 'tetra', 'treat'], - 'treatably': ['tabletary', 'treatably'], - 'treatee': ['ateeter', 'treatee'], - 'treater': ['ettarre', 'retreat', 'treater'], - 'treatise': ['estriate', 'treatise'], - 'treaty': ['attery', 'treaty', 'yatter'], - 'treble': ['belter', 'elbert', 'treble'], - 'treculia': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'], - 'tree': ['reet', 'teer', 'tree'], - 'treed': ['deter', 'treed'], - 'treeful': ['fleuret', 'treeful'], - 'treehood': ['theodore', 'treehood'], - 'treemaker': ['marketeer', 'treemaker'], - 'treeman': ['remanet', 'remeant', 'treeman'], - 'treen': ['enter', 'neter', 'renet', 'terne', 'treen'], - 'treenail': ['elaterin', 'entailer', 'treenail'], - 'treeship': ['hepteris', 'treeship'], - 'tref': ['fret', 'reft', 'tref'], - 'trefle': ['felter', 'telfer', 'trefle'], - 'trellis': ['stiller', 'trellis'], - 'trema': ['armet', - 'mater', - 'merat', - 'metra', - 'ramet', - 'tamer', - 'terma', - 'trame', - 'trema'], - 'trematoid': ['meditator', 'trematoid'], - 'tremella': ['realmlet', 'tremella'], - 'tremie': ['metier', 'retime', 'tremie'], - 'tremolo': ['roomlet', 'tremolo'], - 'tremor': ['termor', 'tremor'], - 'trenail': ['entrail', - 'latiner', - 'latrine', - 'ratline', - 'reliant', - 'retinal', - 'trenail'], - 'trenchant': ['centranth', 'trenchant'], - 'trencher': ['retrench', 'trencher'], - 'trenchmaster': ['stretcherman', 'trenchmaster'], - 'trenchwise': ['trenchwise', 'winchester'], - 'trentine': ['renitent', 'trentine'], - 'trepan': ['arpent', - 'enrapt', - 'entrap', - 'panter', - 'parent', - 'pretan', - 'trepan'], - 'trephine': ['nephrite', 'prehnite', 'trephine'], - 'trepid': ['dipter', 'trepid'], - 'trepidation': ['departition', 'partitioned', 'trepidation'], - 'treron': ['terron', 'treron', 'troner'], - 'treronidae': ['reordinate', 'treronidae'], - 'tressed': ['dessert', 'tressed'], - 'tressful': ['tressful', 'turfless'], - 'tressour': ['tressour', 'trousers'], - 'trest': ['stert', 'stret', 'trest'], - 'trestle': ['settler', 'sterlet', 'trestle'], - 'trevor': ['trevor', 'trover'], - 'trews': ['strew', 'trews', 'wrest'], - 'trey': ['trey', 'tyre'], - 'tri': ['rit', 'tri'], - 'triable': ['betrail', 'librate', 'triable', 'trilabe'], - 'triace': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'], - 'triacid': ['arctiid', 'triacid', 'triadic'], - 'triacontane': ['recantation', 'triacontane'], - 'triaconter': ['retraction', 'triaconter'], - 'triactine': ['intricate', 'triactine'], - 'triadic': ['arctiid', 'triacid', 'triadic'], - 'triadical': ['raticidal', 'triadical'], - 'triadist': ['distrait', 'triadist'], - 'triaene': ['enteria', 'trainee', 'triaene'], - 'triage': ['gaiter', 'tairge', 'triage'], - 'trial': ['litra', 'trail', 'trial'], - 'trialism': ['mistrial', 'trialism'], - 'trialist': ['taistril', 'trialist'], - 'triamide': ['dimetria', 'mitridae', 'tiremaid', 'triamide'], - 'triamino': ['miniator', 'triamino'], - 'triandria': ['irradiant', 'triandria'], - 'triangle': ['integral', 'teraglin', 'triangle'], - 'triangula': ['tragulina', 'triangula'], - 'triannual': ['innatural', 'triannual'], - 'triannulate': ['antineutral', 'triannulate'], - 'triantelope': ['interpolate', 'triantelope'], - 'triapsidal': ['lapidarist', 'triapsidal'], - 'triareal': ['arterial', 'triareal'], - 'trias': ['arist', - 'astir', - 'sitar', - 'stair', - 'stria', - 'tarsi', - 'tisar', - 'trias'], - 'triassic': ['sarcitis', 'triassic'], - 'triazane': ['nazarite', 'nazirate', 'triazane'], - 'triazine': ['nazirite', 'triazine'], - 'tribade': ['redbait', 'tribade'], - 'tribase': ['baister', 'tribase'], - 'tribe': ['biter', 'tribe'], - 'tribelet': ['belitter', 'tribelet'], - 'triblet': ['blitter', 'brittle', 'triblet'], - 'tribonema': ['brominate', 'tribonema'], - 'tribuna': ['arbutin', 'tribuna'], - 'tribunal': ['tribunal', 'turbinal', 'untribal'], - 'tribunate': ['tribunate', 'turbinate'], - 'tribune': ['tribune', 'tuberin', 'turbine'], - 'tricae': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'], - 'trice': ['citer', 'recti', 'ticer', 'trice'], - 'tricennial': ['encrinital', 'tricennial'], - 'triceratops': ['tetrasporic', 'triceratops'], - 'triceria': ['criteria', 'triceria'], - 'tricerion': ['criterion', 'tricerion'], - 'tricerium': ['criterium', 'tricerium'], - 'trichinous': ['trichinous', 'unhistoric'], - 'trichogyne': ['thyrogenic', 'trichogyne'], - 'trichoid': ['hidrotic', 'trichoid'], - 'trichomanes': ['anchoretism', 'trichomanes'], - 'trichome': ['chromite', 'trichome'], - 'trichopore': ['horopteric', 'rheotropic', 'trichopore'], - 'trichosis': ['historics', 'trichosis'], - 'trichosporum': ['sporotrichum', 'trichosporum'], - 'trichroic': ['cirrhotic', 'trichroic'], - 'trichroism': ['trichroism', 'triorchism'], - 'trichromic': ['microcrith', 'trichromic'], - 'tricia': ['iatric', 'tricia'], - 'trickle': ['tickler', 'trickle'], - 'triclinate': ['intractile', 'triclinate'], - 'tricolumnar': ['tricolumnar', 'ultramicron'], - 'tricosane': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'], - 'tridacna': ['antacrid', 'cardiant', 'radicant', 'tridacna'], - 'tridecane': ['nectaried', 'tridecane'], - 'tridecene': ['intercede', 'tridecene'], - 'tridecyl': ['directly', 'tridecyl'], - 'tridiapason': ['disparation', 'tridiapason'], - 'tried': ['diter', 'tired', 'tried'], - 'triedly': ['tiredly', 'triedly'], - 'triene': ['entire', 'triene'], - 'triens': ['estrin', 'insert', 'sinter', 'sterin', 'triens'], - 'triental': ['tetralin', 'triental'], - 'triequal': ['quartile', 'requital', 'triequal'], - 'trier': ['terri', 'tirer', 'trier'], - 'trifle': ['fertil', 'filter', 'lifter', 'relift', 'trifle'], - 'trifler': ['flirter', 'trifler'], - 'triflet': ['flitter', 'triflet'], - 'trifling': ['flirting', 'trifling'], - 'triflingly': ['flirtingly', 'triflingly'], - 'trifolium': ['lituiform', 'trifolium'], - 'trig': ['girt', 'grit', 'trig'], - 'trigona': ['grotian', 'trigona'], - 'trigone': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'], - 'trigonia': ['rigation', 'trigonia'], - 'trigonid': ['trigonid', 'tringoid'], - 'trigyn': ['trigyn', 'trying'], - 'trilabe': ['betrail', 'librate', 'triable', 'trilabe'], - 'trilineate': ['retinalite', 'trilineate'], - 'trilisa': ['liatris', 'trilisa'], - 'trillet': ['rillett', 'trillet'], - 'trilobate': ['latrobite', 'trilobate'], - 'trilobated': ['titleboard', 'trilobated'], - 'trimacular': ['matricular', 'trimacular'], - 'trimensual': ['neutralism', 'trimensual'], - 'trimer': ['mitrer', 'retrim', 'trimer'], - 'trimesic': ['meristic', 'trimesic', 'trisemic'], - 'trimesitinic': ['interimistic', 'trimesitinic'], - 'trimesyl': ['trimesyl', 'tylerism'], - 'trimeter': ['remitter', 'trimeter'], - 'trimstone': ['sortiment', 'trimstone'], - 'trinalize': ['latinizer', 'trinalize'], - 'trindle': ['tendril', 'trindle'], - 'trine': ['inert', 'inter', 'niter', 'retin', 'trine'], - 'trinely': ['elytrin', 'inertly', 'trinely'], - 'trinervate': ['travertine', 'trinervate'], - 'trinerve': ['inverter', 'reinvert', 'trinerve'], - 'trineural': ['retinular', 'trineural'], - 'tringa': ['rating', 'tringa'], - 'tringle': ['ringlet', 'tingler', 'tringle'], - 'tringoid': ['trigonid', 'tringoid'], - 'trinket': ['knitter', 'trinket'], - 'trinkle': ['tinkler', 'trinkle'], - 'trinoctial': ['tinctorial', 'trinoctial'], - 'trinodine': ['rendition', 'trinodine'], - 'trintle': ['lettrin', 'trintle'], - 'trio': ['riot', 'roit', 'trio'], - 'triode': ['editor', 'triode'], - 'trioecism': ['eroticism', 'isometric', 'meroistic', 'trioecism'], - 'triole': ['loiter', 'toiler', 'triole'], - 'trioleic': ['elicitor', 'trioleic'], - 'triolet': ['lotrite', 'tortile', 'triolet'], - 'trionymal': ['normality', 'trionymal'], - 'triopidae': ['poritidae', 'triopidae'], - 'triops': ['ripost', 'triops', 'tripos'], - 'triorchism': ['trichroism', 'triorchism'], - 'triose': ['restio', 'sorite', 'sortie', 'triose'], - 'tripe': ['perit', 'retip', 'tripe'], - 'tripedal': ['dipteral', 'tripedal'], - 'tripel': ['tripel', 'triple'], - 'tripeman': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'], - 'tripersonal': ['intersporal', 'tripersonal'], - 'tripestone': ['septentrio', 'tripestone'], - 'triphane': ['perianth', 'triphane'], - 'triplane': ['interlap', 'repliant', 'triplane'], - 'triplasian': ['airplanist', 'triplasian'], - 'triplasic': ['pilastric', 'triplasic'], - 'triple': ['tripel', 'triple'], - 'triplice': ['perlitic', 'triplice'], - 'triplopia': ['propitial', 'triplopia'], - 'tripod': ['torpid', 'tripod'], - 'tripodal': ['dioptral', 'tripodal'], - 'tripodic': ['dioptric', 'tripodic'], - 'tripodical': ['dioptrical', 'tripodical'], - 'tripody': ['dioptry', 'tripody'], - 'tripos': ['ripost', 'triops', 'tripos'], - 'trippist': ['strippit', 'trippist'], - 'tripple': ['ripplet', 'tippler', 'tripple'], - 'tripsis': ['pristis', 'tripsis'], - 'tripsome': ['imposter', 'tripsome'], - 'tripudiant': ['antiputrid', 'tripudiant'], - 'tripyrenous': ['neurotripsy', 'tripyrenous'], - 'triratna': ['tartarin', 'triratna'], - 'trireme': ['meriter', 'miterer', 'trireme'], - 'trisalt': ['starlit', 'trisalt'], - 'trisected': ['decretist', 'trisected'], - 'trisector': ['tortrices', 'trisector'], - 'trisemic': ['meristic', 'trimesic', 'trisemic'], - 'trisetose': ['esoterist', 'trisetose'], - 'trishna': ['tarnish', 'trishna'], - 'trisilane': ['listerian', 'trisilane'], - 'triskele': ['kreistle', 'triskele'], - 'trismus': ['sistrum', 'trismus'], - 'trisome': ['erotism', 'mortise', 'trisome'], - 'trisomy': ['toryism', 'trisomy'], - 'trisonant': ['strontian', 'trisonant'], - 'trispinose': ['pirssonite', 'trispinose'], - 'trist': ['strit', 'trist'], - 'tristan': ['straint', 'transit', 'tristan'], - 'trisula': ['latirus', 'trisula'], - 'trisulcate': ['testicular', 'trisulcate'], - 'tritanope': ['antitrope', 'patronite', 'tritanope'], - 'tritanopic': ['antitropic', 'tritanopic'], - 'trite': ['titer', 'titre', 'trite'], - 'tritely': ['littery', 'tritely'], - 'triterpene': ['preterient', 'triterpene'], - 'tritheism': ['tiresmith', 'tritheism'], - 'trithionate': ['anorthitite', 'trithionate'], - 'tritocone': ['torticone', 'tritocone'], - 'tritoma': ['mattoir', 'tritoma'], - 'triton': ['intort', 'tornit', 'triton'], - 'triune': ['runite', 'triune', 'uniter', 'untire'], - 'trivalence': ['cantilever', 'trivalence'], - 'trivial': ['trivial', 'vitrail'], - 'trivialist': ['trivialist', 'vitrailist'], - 'troat': ['ottar', 'tarot', 'torta', 'troat'], - 'troca': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'], - 'trocar': ['carrot', 'trocar'], - 'trochaic': ['thoracic', 'tocharic', 'trochaic'], - 'trochate': ['theocrat', 'trochate'], - 'troche': ['hector', 'rochet', 'tocher', 'troche'], - 'trochi': ['chorti', 'orthic', 'thoric', 'trochi'], - 'trochidae': ['charioted', 'trochidae'], - 'trochila': ['acrolith', 'trochila'], - 'trochilic': ['chloritic', 'trochilic'], - 'trochlea': ['chlorate', 'trochlea'], - 'trochlearis': ['rhetoricals', 'trochlearis'], - 'trode': ['doter', 'tored', 'trode'], - 'trog': ['grot', 'trog'], - 'trogonidae': ['derogation', 'trogonidae'], - 'troiades': ['asteroid', 'troiades'], - 'troic': ['toric', 'troic'], - 'troika': ['korait', 'troika'], - 'trolley': ['tollery', 'trolley'], - 'tromba': ['tambor', 'tromba'], - 'trombe': ['retomb', 'trombe'], - 'trompe': ['emptor', 'trompe'], - 'tron': ['torn', 'tron'], - 'trona': ['orant', 'rotan', 'toran', 'trona'], - 'tronage': ['negator', 'tronage'], - 'trone': ['noter', 'tenor', 'toner', 'trone'], - 'troner': ['terron', 'treron', 'troner'], - 'troop': ['porto', 'proto', 'troop'], - 'trooper': ['protore', 'trooper'], - 'tropaeolum': ['pleurotoma', 'tropaeolum'], - 'tropaion': ['opinator', 'tropaion'], - 'tropal': ['patrol', 'portal', 'tropal'], - 'troparion': ['proration', 'troparion'], - 'tropary': ['parroty', 'portray', 'tropary'], - 'trope': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'], - 'tropeic': ['perotic', 'proteic', 'tropeic'], - 'tropeine': ['ereption', 'tropeine'], - 'troper': ['porret', 'porter', 'report', 'troper'], - 'trophema': ['metaphor', 'trophema'], - 'trophesial': ['hospitaler', 'trophesial'], - 'trophical': ['carpolith', 'politarch', 'trophical'], - 'trophodisc': ['doctorship', 'trophodisc'], - 'trophonema': ['homopteran', 'trophonema'], - 'trophotropic': ['prototrophic', 'trophotropic'], - 'tropical': ['plicator', 'tropical'], - 'tropically': ['polycitral', 'tropically'], - 'tropidine': ['direption', 'perdition', 'tropidine'], - 'tropine': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'], - 'tropism': ['primost', 'tropism'], - 'tropist': ['protist', 'tropist'], - 'tropistic': ['proctitis', 'protistic', 'tropistic'], - 'tropophyte': ['protophyte', 'tropophyte'], - 'tropophytic': ['protophytic', 'tropophytic'], - 'tropyl': ['portly', 'protyl', 'tropyl'], - 'trostera': ['rostrate', 'trostera'], - 'trot': ['tort', 'trot'], - 'troth': ['thort', 'troth'], - 'trotline': ['interlot', 'trotline'], - 'trouble': ['boulter', 'trouble'], - 'troughy': ['troughy', 'yoghurt'], - 'trounce': ['cornute', 'counter', 'recount', 'trounce'], - 'troupe': ['pouter', 'roupet', 'troupe'], - 'trouse': ['ouster', 'souter', 'touser', 'trouse'], - 'trouser': ['rouster', 'trouser'], - 'trouserian': ['souterrain', 'ternarious', 'trouserian'], - 'trousers': ['tressour', 'trousers'], - 'trout': ['trout', 'tutor'], - 'trouter': ['torture', 'trouter', 'tutorer'], - 'troutless': ['troutless', 'tutorless'], - 'trouty': ['trouty', 'tryout', 'tutory'], - 'trouvere': ['overtrue', 'overture', 'trouvere'], - 'trove': ['overt', 'rovet', 'torve', 'trove', 'voter'], - 'trover': ['trevor', 'trover'], - 'trow': ['trow', 'wort'], - 'trowel': ['rowlet', 'trowel', 'wolter'], - 'troy': ['royt', 'ryot', 'tory', 'troy', 'tyro'], - 'truandise': ['disnature', 'sturnidae', 'truandise'], - 'truant': ['truant', 'turtan'], - 'trub': ['brut', 'burt', 'trub', 'turb'], - 'trubu': ['burut', 'trubu'], - 'truce': ['cruet', 'eruct', 'recut', 'truce'], - 'truceless': ['cutleress', 'lecturess', 'truceless'], - 'trucial': ['curtail', 'trucial'], - 'trucks': ['struck', 'trucks'], - 'truculent': ['truculent', 'unclutter'], - 'truelove': ['revolute', 'truelove'], - 'truffle': ['fretful', 'truffle'], - 'trug': ['gurt', 'trug'], - 'truistical': ['altruistic', 'truistical', 'ultraistic'], - 'truly': ['rutyl', 'truly'], - 'trumperiness': ['surprisement', 'trumperiness'], - 'trumpie': ['imputer', 'trumpie'], - 'trun': ['runt', 'trun', 'turn'], - 'truncated': ['reductant', 'traducent', 'truncated'], - 'trundle': ['rundlet', 'trundle'], - 'trush': ['hurst', 'trush'], - 'trusion': ['nitrous', 'trusion'], - 'trust': ['strut', 'sturt', 'trust'], - 'trustee': ['surette', 'trustee'], - 'trusteeism': ['sestertium', 'trusteeism'], - 'trusten': ['entrust', 'stunter', 'trusten'], - 'truster': ['retrust', 'truster'], - 'trustle': ['slutter', 'trustle'], - 'truth': ['thurt', 'truth'], - 'trying': ['trigyn', 'trying'], - 'tryma': ['marty', 'tryma'], - 'tryout': ['trouty', 'tryout', 'tutory'], - 'trypa': ['party', 'trypa'], - 'trypan': ['pantry', 'trypan'], - 'tryptase': ['tapestry', 'tryptase'], - 'tsar': ['sart', 'star', 'stra', 'tars', 'tsar'], - 'tsardom': ['stardom', 'tsardom'], - 'tsarina': ['artisan', 'astrain', 'sartain', 'tsarina'], - 'tsarship': ['starship', 'tsarship'], - 'tsatlee': ['atelets', 'tsatlee'], - 'tsere': ['ester', - 'estre', - 'reest', - 'reset', - 'steer', - 'stere', - 'stree', - 'terse', - 'tsere'], - 'tsetse': ['sestet', 'testes', 'tsetse'], - 'tshi': ['hist', 'sith', 'this', 'tshi'], - 'tsia': ['atis', 'sita', 'tsia'], - 'tsine': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'], - 'tsiology': ['sitology', 'tsiology'], - 'tsoneca': ['costean', 'tsoneca'], - 'tsonecan': ['noncaste', 'tsonecan'], - 'tsuga': ['agust', 'tsuga'], - 'tsuma': ['matsu', 'tamus', 'tsuma'], - 'tsun': ['stun', 'sunt', 'tsun'], - 'tu': ['tu', 'ut'], - 'tua': ['tau', 'tua', 'uta'], - 'tuan': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'], - 'tuareg': ['argute', 'guetar', 'rugate', 'tuareg'], - 'tuarn': ['arnut', 'tuarn', 'untar'], - 'tub': ['but', 'tub'], - 'tuba': ['abut', 'tabu', 'tuba'], - 'tubae': ['butea', 'taube', 'tubae'], - 'tubal': ['balut', 'tubal'], - 'tubar': ['bruta', 'tubar'], - 'tubate': ['battue', 'tubate'], - 'tube': ['bute', 'tebu', 'tube'], - 'tuber': ['brute', 'buret', 'rebut', 'tuber'], - 'tubercula': ['lucubrate', 'tubercula'], - 'tuberin': ['tribune', 'tuberin', 'turbine'], - 'tuberless': ['butleress', 'tuberless'], - 'tublet': ['buttle', 'tublet'], - 'tuboovarial': ['ovariotubal', 'tuboovarial'], - 'tucana': ['canaut', 'tucana'], - 'tucano': ['toucan', 'tucano', 'uncoat'], - 'tuchun': ['tuchun', 'uncuth'], - 'tucker': ['retuck', 'tucker'], - 'tue': ['tue', 'ute'], - 'tueiron': ['routine', 'tueiron'], - 'tug': ['gut', 'tug'], - 'tughra': ['raught', 'tughra'], - 'tugless': ['gutless', 'tugless'], - 'tuglike': ['gutlike', 'tuglike'], - 'tugman': ['tangum', 'tugman'], - 'tuism': ['muist', 'tuism'], - 'tuke': ['ketu', 'teuk', 'tuke'], - 'tukra': ['kraut', 'tukra'], - 'tulare': ['tulare', 'uretal'], - 'tulasi': ['situal', 'situla', 'tulasi'], - 'tulchan': ['tulchan', 'unlatch'], - 'tule': ['lute', 'tule'], - 'tulipa': ['tipula', 'tulipa'], - 'tulisan': ['latinus', 'tulisan', 'unalist'], - 'tulsi': ['litus', 'sluit', 'tulsi'], - 'tumbler': ['tumbler', 'tumbrel'], - 'tumbrel': ['tumbler', 'tumbrel'], - 'tume': ['mute', 'tume'], - 'tumescence': ['mutescence', 'tumescence'], - 'tumorous': ['mortuous', 'tumorous'], - 'tumulary': ['mutulary', 'tumulary'], - 'tun': ['nut', 'tun'], - 'tuna': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'], - 'tunable': ['abluent', 'tunable'], - 'tunbellied': ['tunbellied', 'unbilleted'], - 'tunca': ['tunca', 'unact'], - 'tund': ['dunt', 'tund'], - 'tunder': ['runted', 'tunder', 'turned'], - 'tundra': ['durant', 'tundra'], - 'tuner': ['enrut', 'tuner', 'urent'], - 'tunga': ['gaunt', 'tunga'], - 'tungan': ['tangun', 'tungan'], - 'tungate': ['tungate', 'tutenag'], - 'tungo': ['tungo', 'ungot'], - 'tungstosilicate': ['silicotungstate', 'tungstosilicate'], - 'tungstosilicic': ['silicotungstic', 'tungstosilicic'], - 'tunic': ['cutin', 'incut', 'tunic'], - 'tunica': ['anicut', 'nautic', 'ticuna', 'tunica'], - 'tunican': ['ticunan', 'tunican'], - 'tunicary': ['nycturia', 'tunicary'], - 'tunicle': ['linecut', 'tunicle'], - 'tunicless': ['lentiscus', 'tunicless'], - 'tunist': ['suttin', 'tunist'], - 'tunk': ['knut', 'tunk'], - 'tunker': ['tunker', 'turken'], - 'tunlike': ['nutlike', 'tunlike'], - 'tunna': ['naunt', 'tunna'], - 'tunnel': ['nunlet', 'tunnel', 'unlent'], - 'tunnelman': ['annulment', 'tunnelman'], - 'tunner': ['runnet', 'tunner', 'unrent'], - 'tunnor': ['tunnor', 'untorn'], - 'tuno': ['tuno', 'unto'], - 'tup': ['put', 'tup'], - 'tur': ['rut', 'tur'], - 'turacin': ['curtain', 'turacin', 'turcian'], - 'turanian': ['nutarian', 'turanian'], - 'turanism': ['naturism', 'sturmian', 'turanism'], - 'turb': ['brut', 'burt', 'trub', 'turb'], - 'turban': ['tanbur', 'turban'], - 'turbaned': ['breadnut', 'turbaned'], - 'turbanless': ['substernal', 'turbanless'], - 'turbeh': ['hubert', 'turbeh'], - 'turbinal': ['tribunal', 'turbinal', 'untribal'], - 'turbinate': ['tribunate', 'turbinate'], - 'turbine': ['tribune', 'tuberin', 'turbine'], - 'turbined': ['turbined', 'underbit'], - 'turcian': ['curtain', 'turacin', 'turcian'], - 'turco': ['court', 'crout', 'turco'], - 'turcoman': ['courtman', 'turcoman'], - 'turdinae': ['indurate', 'turdinae'], - 'turdine': ['intrude', 'turdine', 'untired', 'untried'], - 'tureen': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'], - 'turfed': ['dufter', 'turfed'], - 'turfen': ['turfen', 'unfret'], - 'turfless': ['tressful', 'turfless'], - 'turgent': ['grutten', 'turgent'], - 'turk': ['kurt', 'turk'], - 'turken': ['tunker', 'turken'], - 'turki': ['tikur', 'turki'], - 'turkman': ['trankum', 'turkman'], - 'turma': ['martu', 'murat', 'turma'], - 'turn': ['runt', 'trun', 'turn'], - 'turndown': ['downturn', 'turndown'], - 'turned': ['runted', 'tunder', 'turned'], - 'turnel': ['runlet', 'turnel'], - 'turner': ['return', 'turner'], - 'turnhall': ['turnhall', 'unthrall'], - 'turnout': ['outturn', 'turnout'], - 'turnover': ['overturn', 'turnover'], - 'turnpin': ['turnpin', 'unprint'], - 'turns': ['snurt', 'turns'], - 'turntail': ['rutilant', 'turntail'], - 'turnup': ['turnup', 'upturn'], - 'turp': ['prut', 'turp'], - 'turpid': ['putrid', 'turpid'], - 'turpidly': ['putridly', 'turpidly'], - 'turps': ['spurt', 'turps'], - 'turret': ['rutter', 'turret'], - 'turricula': ['turricula', 'utricular'], - 'turse': ['serut', 'strue', 'turse', 'uster'], - 'tursenoi': ['rutinose', 'tursenoi'], - 'tursio': ['suitor', 'tursio'], - 'turtan': ['truant', 'turtan'], - 'tuscan': ['cantus', 'tuscan', 'uncast'], - 'tusche': ['schute', 'tusche'], - 'tush': ['shut', 'thus', 'tush'], - 'tusher': ['reshut', 'suther', 'thurse', 'tusher'], - 'tussal': ['saltus', 'tussal'], - 'tusser': ['russet', 'tusser'], - 'tussore': ['estrous', 'oestrus', 'sestuor', 'tussore'], - 'tutelo': ['outlet', 'tutelo'], - 'tutenag': ['tungate', 'tutenag'], - 'tutman': ['mutant', 'tantum', 'tutman'], - 'tutor': ['trout', 'tutor'], - 'tutorer': ['torture', 'trouter', 'tutorer'], - 'tutorial': ['outtrail', 'tutorial'], - 'tutorism': ['mistutor', 'tutorism'], - 'tutorless': ['troutless', 'tutorless'], - 'tutory': ['trouty', 'tryout', 'tutory'], - 'tuts': ['stut', 'tuts'], - 'tutster': ['stutter', 'tutster'], - 'twa': ['taw', 'twa', 'wat'], - 'twae': ['tewa', 'twae', 'weta'], - 'twain': ['atwin', 'twain', 'witan'], - 'twaite': ['tawite', 'tawtie', 'twaite'], - 'twal': ['twal', 'walt'], - 'twas': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'], - 'twat': ['twat', 'watt'], - 'twee': ['twee', 'weet'], - 'tweel': ['tewel', 'tweel'], - 'twere': ['rewet', 'tewer', 'twere'], - 'twi': ['twi', 'wit'], - 'twigsome': ['twigsome', 'wegotism'], - 'twin': ['twin', 'wint'], - 'twiner': ['twiner', 'winter'], - 'twingle': ['twingle', 'welting', 'winglet'], - 'twinkle': ['twinkle', 'winklet'], - 'twinkler': ['twinkler', 'wrinklet'], - 'twinter': ['twinter', 'written'], - 'twire': ['twire', 'write'], - 'twister': ['retwist', 'twister'], - 'twitchety': ['twitchety', 'witchetty'], - 'twite': ['tewit', 'twite'], - 'two': ['tow', 'two', 'wot'], - 'twoling': ['lingtow', 'twoling'], - 'tyche': ['techy', 'tyche'], - 'tydie': ['deity', 'tydie'], - 'tye': ['tye', 'yet'], - 'tyke': ['kyte', 'tyke'], - 'tylerism': ['trimesyl', 'tylerism'], - 'tyloma': ['latomy', 'tyloma'], - 'tylose': ['tolsey', 'tylose'], - 'tylosis': ['tossily', 'tylosis'], - 'tylotus': ['stoutly', 'tylotus'], - 'tylus': ['lusty', 'tylus'], - 'typal': ['aptly', 'patly', 'platy', 'typal'], - 'typees': ['steepy', 'typees'], - 'typer': ['perty', 'typer'], - 'typha': ['pathy', 'typha'], - 'typhia': ['pythia', 'typhia'], - 'typhic': ['phytic', 'pitchy', 'pythic', 'typhic'], - 'typhlopidae': ['heptaploidy', 'typhlopidae'], - 'typhoean': ['anophyte', 'typhoean'], - 'typhogenic': ['phytogenic', 'pythogenic', 'typhogenic'], - 'typhoid': ['phytoid', 'typhoid'], - 'typhonian': ['antiphony', 'typhonian'], - 'typhonic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'], - 'typhosis': ['phytosis', 'typhosis'], - 'typica': ['atypic', 'typica'], - 'typographer': ['petrography', 'pterography', 'typographer'], - 'typographic': ['graphotypic', 'pictography', 'typographic'], - 'typology': ['logotypy', 'typology'], - 'typophile': ['hippolyte', 'typophile'], - 'tyre': ['trey', 'tyre'], - 'tyrian': ['rytina', 'trainy', 'tyrian'], - 'tyro': ['royt', 'ryot', 'tory', 'troy', 'tyro'], - 'tyrocidin': ['nordicity', 'tyrocidin'], - 'tyrolean': ['neolatry', 'ornately', 'tyrolean'], - 'tyrolite': ['toiletry', 'tyrolite'], - 'tyrone': ['torney', 'tyrone'], - 'tyronism': ['smyrniot', 'tyronism'], - 'tyrosine': ['tyrosine', 'tyrsenoi'], - 'tyrrheni': ['erythrin', 'tyrrheni'], - 'tyrsenoi': ['tyrosine', 'tyrsenoi'], - 'tyste': ['testy', 'tyste'], - 'tyto': ['toty', 'tyto'], - 'uang': ['gaun', 'guan', 'guna', 'uang'], - 'ucal': ['caul', 'ucal'], - 'udal': ['auld', 'dual', 'laud', 'udal'], - 'udaler': ['lauder', 'udaler'], - 'udalman': ['ladanum', 'udalman'], - 'udo': ['duo', 'udo'], - 'uds': ['sud', 'uds'], - 'ugh': ['hug', 'ugh'], - 'uglisome': ['eulogism', 'uglisome'], - 'ugrian': ['gurian', 'ugrian'], - 'ugric': ['guric', 'ugric'], - 'uhtsong': ['gunshot', 'shotgun', 'uhtsong'], - 'uinal': ['inula', 'luian', 'uinal'], - 'uinta': ['uinta', 'uniat'], - 'ulcer': ['cruel', 'lucre', 'ulcer'], - 'ulcerate': ['celature', 'ulcerate'], - 'ulcerous': ['ulcerous', 'urceolus'], - 'ule': ['leu', 'lue', 'ule'], - 'ulema': ['amelu', 'leuma', 'ulema'], - 'uletic': ['lucite', 'luetic', 'uletic'], - 'ulex': ['luxe', 'ulex'], - 'ulla': ['lula', 'ulla'], - 'ulling': ['ulling', 'ungill'], - 'ulmin': ['linum', 'ulmin'], - 'ulminic': ['clinium', 'ulminic'], - 'ulmo': ['moul', 'ulmo'], - 'ulna': ['laun', 'luna', 'ulna', 'unal'], - 'ulnad': ['dunal', 'laund', 'lunda', 'ulnad'], - 'ulnar': ['lunar', 'ulnar', 'urnal'], - 'ulnare': ['lunare', 'neural', 'ulnare', 'unreal'], - 'ulnaria': ['lunaria', 'ulnaria', 'uralian'], - 'ulotrichi': ['ulotrichi', 'urolithic'], - 'ulster': ['luster', 'result', 'rustle', 'sutler', 'ulster'], - 'ulstered': ['deluster', 'ulstered'], - 'ulsterian': ['neuralist', 'ulsterian', 'unrealist'], - 'ulstering': ['resulting', 'ulstering'], - 'ulsterman': ['menstrual', 'ulsterman'], - 'ultima': ['mulita', 'ultima'], - 'ultimate': ['mutilate', 'ultimate'], - 'ultimation': ['mutilation', 'ultimation'], - 'ultonian': ['lunation', 'ultonian'], - 'ultra': ['lutra', 'ultra'], - 'ultrabasic': ['arcubalist', 'ultrabasic'], - 'ultraism': ['altruism', 'muralist', 'traulism', 'ultraism'], - 'ultraist': ['altruist', 'ultraist'], - 'ultraistic': ['altruistic', 'truistical', 'ultraistic'], - 'ultramicron': ['tricolumnar', 'ultramicron'], - 'ultraminute': ['intermutual', 'ultraminute'], - 'ultramontane': ['tournamental', 'ultramontane'], - 'ultranice': ['centurial', 'lucretian', 'ultranice'], - 'ultrasterile': ['reillustrate', 'ultrasterile'], - 'ulua': ['aulu', 'ulua'], - 'ulva': ['ulva', 'uval'], - 'um': ['mu', 'um'], - 'umbel': ['umbel', 'umble'], - 'umbellar': ['umbellar', 'umbrella'], - 'umber': ['brume', 'umber'], - 'umbilic': ['bulimic', 'umbilic'], - 'umbiliform': ['bulimiform', 'umbiliform'], - 'umble': ['umbel', 'umble'], - 'umbonial': ['olibanum', 'umbonial'], - 'umbral': ['brumal', 'labrum', 'lumbar', 'umbral'], - 'umbrel': ['lumber', 'rumble', 'umbrel'], - 'umbrella': ['umbellar', 'umbrella'], - 'umbrous': ['brumous', 'umbrous'], - 'ume': ['emu', 'ume'], - 'umlaut': ['mutual', 'umlaut'], - 'umph': ['hump', 'umph'], - 'umpire': ['impure', 'umpire'], - 'un': ['nu', 'un'], - 'unabetted': ['debutante', 'unabetted'], - 'unabhorred': ['unabhorred', 'unharbored'], - 'unable': ['nebula', 'unable', 'unbale'], - 'unaccumulate': ['acutenaculum', 'unaccumulate'], - 'unact': ['tunca', 'unact'], - 'unadherent': ['unadherent', 'underneath', 'underthane'], - 'unadmire': ['unadmire', 'underaim'], - 'unadmired': ['unadmired', 'undermaid'], - 'unadored': ['unadored', 'unroaded'], - 'unadvertised': ['disadventure', 'unadvertised'], - 'unafire': ['fuirena', 'unafire'], - 'unaged': ['augend', 'engaud', 'unaged'], - 'unagreed': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'], - 'unailing': ['inguinal', 'unailing'], - 'unaimed': ['numidae', 'unaimed'], - 'unaisled': ['unaisled', 'unsailed'], - 'unakite': ['kutenai', 'unakite'], - 'unal': ['laun', 'luna', 'ulna', 'unal'], - 'unalarming': ['unalarming', 'unmarginal'], - 'unalert': ['laurent', 'neutral', 'unalert'], - 'unalertly': ['neutrally', 'unalertly'], - 'unalertness': ['neutralness', 'unalertness'], - 'unalimentary': ['anteluminary', 'unalimentary'], - 'unalist': ['latinus', 'tulisan', 'unalist'], - 'unallotted': ['unallotted', 'untotalled'], - 'unalmsed': ['dulseman', 'unalmsed'], - 'unaltered': ['unaltered', 'unrelated'], - 'unaltering': ['unaltering', 'unrelating'], - 'unamassed': ['mussaenda', 'unamassed'], - 'unambush': ['subhuman', 'unambush'], - 'unamenability': ['unamenability', 'unnameability'], - 'unamenable': ['unamenable', 'unnameable'], - 'unamenableness': ['unamenableness', 'unnameableness'], - 'unamenably': ['unamenably', 'unnameably'], - 'unamend': ['mundane', 'unamend', 'unmaned', 'unnamed'], - 'unami': ['maniu', 'munia', 'unami'], - 'unapt': ['punta', 'unapt', 'untap'], - 'unarising': ['grusinian', 'unarising'], - 'unarm': ['muran', 'ruman', 'unarm', 'unram', 'urman'], - 'unarmed': ['duramen', 'maunder', 'unarmed'], - 'unarray': ['unarray', 'yaruran'], - 'unarrestable': ['subterraneal', 'unarrestable'], - 'unarrested': ['unarrested', 'unserrated'], - 'unarted': ['daunter', 'unarted', 'unrated', 'untread'], - 'unarticled': ['denticular', 'unarticled'], - 'unartistic': ['naturistic', 'unartistic'], - 'unartistical': ['naturalistic', 'unartistical'], - 'unartistically': ['naturistically', 'unartistically'], - 'unary': ['anury', 'unary', 'unray'], - 'unastray': ['auntsary', 'unastray'], - 'unathirst': ['struthian', 'unathirst'], - 'unattire': ['tainture', 'unattire'], - 'unattuned': ['unattuned', 'untaunted'], - 'unaverted': ['adventure', 'unaverted'], - 'unavertible': ['unavertible', 'unveritable'], - 'unbag': ['bugan', 'bunga', 'unbag'], - 'unbain': ['nubian', 'unbain'], - 'unbale': ['nebula', 'unable', 'unbale'], - 'unbar': ['buran', 'unbar', 'urban'], - 'unbare': ['eburna', 'unbare', 'unbear', 'urbane'], - 'unbarred': ['errabund', 'unbarred'], - 'unbased': ['subdean', 'unbased'], - 'unbaste': ['unbaste', 'unbeast'], - 'unbatted': ['debutant', 'unbatted'], - 'unbay': ['bunya', 'unbay'], - 'unbe': ['benu', 'unbe'], - 'unbear': ['eburna', 'unbare', 'unbear', 'urbane'], - 'unbearded': ['unbearded', 'unbreaded'], - 'unbeast': ['unbaste', 'unbeast'], - 'unbeavered': ['unbeavered', 'unbereaved'], - 'unbelied': ['unbelied', 'unedible'], - 'unbereaved': ['unbeavered', 'unbereaved'], - 'unbesot': ['subnote', 'subtone', 'unbesot'], - 'unbias': ['anubis', 'unbias'], - 'unbillet': ['bulletin', 'unbillet'], - 'unbilleted': ['tunbellied', 'unbilleted'], - 'unblasted': ['dunstable', 'unblasted', 'unstabled'], - 'unbled': ['bundle', 'unbled'], - 'unboasted': ['eastbound', 'unboasted'], - 'unboat': ['outban', 'unboat'], - 'unboding': ['bounding', 'unboding'], - 'unbog': ['bungo', 'unbog'], - 'unboiled': ['unboiled', 'unilobed'], - 'unboned': ['bounden', 'unboned'], - 'unborder': ['unborder', 'underorb'], - 'unbored': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'], - 'unboweled': ['unboweled', 'unelbowed'], - 'unbrace': ['bucrane', 'unbrace'], - 'unbraceleted': ['unbraceleted', 'uncelebrated'], - 'unbraid': ['barundi', 'unbraid'], - 'unbrailed': ['indurable', 'unbrailed', 'unridable'], - 'unbreaded': ['unbearded', 'unbreaded'], - 'unbred': ['bunder', 'burden', 'burned', 'unbred'], - 'unbribed': ['unbribed', 'unribbed'], - 'unbrief': ['unbrief', 'unfiber'], - 'unbriefed': ['unbriefed', 'unfibered'], - 'unbroiled': ['unbroiled', 'underboil'], - 'unbrushed': ['unbrushed', 'underbush'], - 'unbud': ['bundu', 'unbud', 'undub'], - 'unburden': ['unburden', 'unburned'], - 'unburned': ['unburden', 'unburned'], - 'unbuttered': ['unbuttered', 'unrebutted'], - 'unca': ['cuna', 'unca'], - 'uncage': ['cangue', 'uncage'], - 'uncambered': ['uncambered', 'unembraced'], - 'uncamerated': ['uncamerated', 'unmacerated'], - 'uncapable': ['uncapable', 'unpacable'], - 'uncaptious': ['uncaptious', 'usucaption'], - 'uncarted': ['uncarted', 'uncrated', 'underact', 'untraced'], - 'uncartooned': ['uncartooned', 'uncoronated'], - 'uncase': ['uncase', 'usance'], - 'uncask': ['uncask', 'unsack'], - 'uncasked': ['uncasked', 'unsacked'], - 'uncast': ['cantus', 'tuscan', 'uncast'], - 'uncatalogued': ['uncatalogued', 'uncoagulated'], - 'uncate': ['tecuna', 'uncate'], - 'uncaused': ['uncaused', 'unsauced'], - 'uncavalier': ['naviculare', 'uncavalier'], - 'uncelebrated': ['unbraceleted', 'uncelebrated'], - 'uncellar': ['lucernal', 'nucellar', 'uncellar'], - 'uncenter': ['uncenter', 'unrecent'], - 'uncertain': ['encurtain', 'runcinate', 'uncertain'], - 'uncertifiable': ['uncertifiable', 'unrectifiable'], - 'uncertified': ['uncertified', 'unrectified'], - 'unchain': ['chunnia', 'unchain'], - 'unchair': ['chunari', 'unchair'], - 'unchalked': ['unchalked', 'unhackled'], - 'uncharge': ['gunreach', 'uncharge'], - 'uncharm': ['uncharm', 'unmarch'], - 'uncharming': ['uncharming', 'unmarching'], - 'uncharred': ['uncharred', 'underarch'], - 'uncheat': ['uncheat', 'unteach'], - 'uncheating': ['uncheating', 'unteaching'], - 'unchoked': ['unchoked', 'unhocked'], - 'unchoosable': ['chaenolobus', 'unchoosable'], - 'unchosen': ['nonesuch', 'unchosen'], - 'uncial': ['cunila', 'lucian', 'lucina', 'uncial'], - 'unciferous': ['nuciferous', 'unciferous'], - 'unciform': ['nuciform', 'unciform'], - 'uncinate': ['nunciate', 'uncinate'], - 'unclaimed': ['unclaimed', 'undecimal', 'unmedical'], - 'unclay': ['lunacy', 'unclay'], - 'unclead': ['unclead', 'unlaced'], - 'unclear': ['crenula', 'lucarne', 'nuclear', 'unclear'], - 'uncleared': ['uncleared', 'undeclare'], - 'uncledom': ['columned', 'uncledom'], - 'uncleship': ['siphuncle', 'uncleship'], - 'uncloister': ['cornulites', 'uncloister'], - 'unclose': ['counsel', 'unclose'], - 'unclutter': ['truculent', 'unclutter'], - 'unco': ['cuon', 'unco'], - 'uncoagulated': ['uncatalogued', 'uncoagulated'], - 'uncoat': ['toucan', 'tucano', 'uncoat'], - 'uncoated': ['outdance', 'uncoated'], - 'uncoiled': ['nucleoid', 'uncoiled'], - 'uncoin': ['nuncio', 'uncoin'], - 'uncollapsed': ['uncollapsed', 'unscalloped'], - 'uncolored': ['uncolored', 'undercool'], - 'uncomic': ['muconic', 'uncomic'], - 'uncompatible': ['incomputable', 'uncompatible'], - 'uncomplaint': ['uncomplaint', 'uncompliant'], - 'uncomplete': ['couplement', 'uncomplete'], - 'uncompliant': ['uncomplaint', 'uncompliant'], - 'unconcerted': ['unconcerted', 'unconcreted'], - 'unconcreted': ['unconcerted', 'unconcreted'], - 'unconservable': ['unconservable', 'unconversable'], - 'unconstraint': ['noncurantist', 'unconstraint'], - 'uncontrasted': ['counterstand', 'uncontrasted'], - 'unconversable': ['unconservable', 'unconversable'], - 'uncoop': ['coupon', 'uncoop'], - 'uncooped': ['couponed', 'uncooped'], - 'uncope': ['pounce', 'uncope'], - 'uncopied': ['cupidone', 'uncopied'], - 'uncore': ['conure', 'rounce', 'uncore'], - 'uncored': ['crunode', 'uncored'], - 'uncorked': ['uncorked', 'unrocked'], - 'uncoronated': ['uncartooned', 'uncoronated'], - 'uncorrect': ['cocurrent', 'occurrent', 'uncorrect'], - 'uncorrugated': ['counterguard', 'uncorrugated'], - 'uncorseted': ['uncorseted', 'unescorted'], - 'uncostumed': ['uncostumed', 'uncustomed'], - 'uncoursed': ['uncoursed', 'unscoured'], - 'uncouth': ['uncouth', 'untouch'], - 'uncoverable': ['uncoverable', 'unrevocable'], - 'uncradled': ['uncradled', 'underclad'], - 'uncrated': ['uncarted', 'uncrated', 'underact', 'untraced'], - 'uncreased': ['uncreased', 'undercase'], - 'uncreatable': ['uncreatable', 'untraceable'], - 'uncreatableness': ['uncreatableness', 'untraceableness'], - 'uncreation': ['enunciator', 'uncreation'], - 'uncreative': ['uncreative', 'unreactive'], - 'uncredited': ['uncredited', 'undirected'], - 'uncrest': ['encrust', 'uncrest'], - 'uncrested': ['uncrested', 'undersect'], - 'uncried': ['inducer', 'uncried'], - 'uncrooked': ['uncrooked', 'undercook'], - 'uncrude': ['uncrude', 'uncured'], - 'unctional': ['continual', 'inoculant', 'unctional'], - 'unctioneer': ['recontinue', 'unctioneer'], - 'uncured': ['uncrude', 'uncured'], - 'uncustomed': ['uncostumed', 'uncustomed'], - 'uncuth': ['tuchun', 'uncuth'], - 'undam': ['maund', 'munda', 'numda', 'undam', 'unmad'], - 'undangered': ['undangered', 'underanged', 'ungardened'], - 'undarken': ['undarken', 'unranked'], - 'undashed': ['undashed', 'unshaded'], - 'undate': ['nudate', 'undate'], - 'unde': ['dune', 'nude', 'unde'], - 'undean': ['duenna', 'undean'], - 'undear': ['endura', 'neurad', 'undear', 'unread'], - 'undeceiver': ['undeceiver', 'unreceived'], - 'undecimal': ['unclaimed', 'undecimal', 'unmedical'], - 'undeclare': ['uncleared', 'undeclare'], - 'undecolic': ['coinclude', 'undecolic'], - 'undecorated': ['undecorated', 'undercoated'], - 'undefiled': ['undefiled', 'unfielded'], - 'undeified': ['undeified', 'unedified'], - 'undelible': ['undelible', 'unlibeled'], - 'undelight': ['undelight', 'unlighted'], - 'undelude': ['undelude', 'uneluded'], - 'undeluding': ['undeluding', 'unindulged'], - 'undemanded': ['undemanded', 'unmaddened'], - 'unden': ['dunne', 'unden'], - 'undeparted': ['dunderpate', 'undeparted'], - 'undepraved': ['undepraved', 'unpervaded'], - 'under': ['runed', 'under', 'unred'], - 'underact': ['uncarted', 'uncrated', 'underact', 'untraced'], - 'underacted': ['underacted', 'unredacted'], - 'underaction': ['denunciator', 'underaction'], - 'underage': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'], - 'underaid': ['underaid', 'unraided'], - 'underaim': ['unadmire', 'underaim'], - 'underanged': ['undangered', 'underanged', 'ungardened'], - 'underarch': ['uncharred', 'underarch'], - 'underarm': ['underarm', 'unmarred'], - 'underbake': ['underbake', 'underbeak'], - 'underbeak': ['underbake', 'underbeak'], - 'underbeat': ['eburnated', 'underbeat', 'unrebated'], - 'underbit': ['turbined', 'underbit'], - 'underboil': ['unbroiled', 'underboil'], - 'underbreathing': ['thunderbearing', 'underbreathing'], - 'underbrush': ['underbrush', 'undershrub'], - 'underbush': ['unbrushed', 'underbush'], - 'undercase': ['uncreased', 'undercase'], - 'underchap': ['underchap', 'unparched'], - 'underclad': ['uncradled', 'underclad'], - 'undercoat': ['cornuated', 'undercoat'], - 'undercoated': ['undecorated', 'undercoated'], - 'undercook': ['uncrooked', 'undercook'], - 'undercool': ['uncolored', 'undercool'], - 'undercut': ['undercut', 'unreduct'], - 'underdead': ['underdead', 'undreaded'], - 'underdig': ['underdig', 'ungirded', 'unridged'], - 'underdive': ['underdive', 'underived'], - 'underdo': ['redound', 'rounded', 'underdo'], - 'underdoer': ['underdoer', 'unordered'], - 'underdog': ['grounded', 'underdog', 'undergod'], - 'underdown': ['underdown', 'undrowned'], - 'underdrag': ['underdrag', 'undergrad'], - 'underdraw': ['underdraw', 'underward'], - 'undereat': ['denature', 'undereat'], - 'underer': ['endurer', 'underer'], - 'underfiend': ['underfiend', 'unfriended'], - 'underfill': ['underfill', 'unfrilled'], - 'underfire': ['underfire', 'unferried'], - 'underflow': ['underflow', 'wonderful'], - 'underfur': ['underfur', 'unfurred'], - 'undergo': ['guerdon', 'undergo', 'ungored'], - 'undergod': ['grounded', 'underdog', 'undergod'], - 'undergoer': ['guerdoner', 'reundergo', 'undergoer', 'undergore'], - 'undergore': ['guerdoner', 'reundergo', 'undergoer', 'undergore'], - 'undergown': ['undergown', 'unwronged'], - 'undergrad': ['underdrag', 'undergrad'], - 'undergrade': ['undergrade', 'unregarded'], - 'underheat': ['underheat', 'unearthed'], - 'underhonest': ['underhonest', 'unshortened'], - 'underhorse': ['underhorse', 'undershore'], - 'underived': ['underdive', 'underived'], - 'underkind': ['underkind', 'unkindred'], - 'underlap': ['pendular', 'underlap', 'uplander'], - 'underleaf': ['underleaf', 'unfederal'], - 'underlease': ['underlease', 'unreleased'], - 'underlegate': ['underlegate', 'unrelegated'], - 'underlid': ['underlid', 'unriddle'], - 'underlive': ['underlive', 'unreviled'], - 'underlying': ['enduringly', 'underlying'], - 'undermade': ['undermade', 'undreamed'], - 'undermaid': ['unadmired', 'undermaid'], - 'undermaker': ['undermaker', 'unremarked'], - 'undermaster': ['undermaster', 'understream'], - 'undermeal': ['denumeral', 'undermeal', 'unrealmed'], - 'undermine': ['undermine', 'unermined'], - 'undermost': ['undermost', 'unstormed'], - 'undermotion': ['undermotion', 'unmonitored'], - 'undern': ['dunner', 'undern'], - 'underneath': ['unadherent', 'underneath', 'underthane'], - 'undernote': ['undernote', 'undertone'], - 'undernoted': ['undernoted', 'undertoned'], - 'underntide': ['indentured', 'underntide'], - 'underorb': ['unborder', 'underorb'], - 'underpay': ['underpay', 'unprayed'], - 'underpeer': ['perendure', 'underpeer'], - 'underpick': ['underpick', 'unpricked'], - 'underpier': ['underpier', 'underripe'], - 'underpile': ['underpile', 'unreplied'], - 'underpose': ['underpose', 'unreposed'], - 'underpuke': ['underpuke', 'unperuked'], - 'underream': ['maunderer', 'underream'], - 'underripe': ['underpier', 'underripe'], - 'underrobe': ['rebounder', 'underrobe'], - 'undersap': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'], - 'undersea': ['undersea', 'unerased', 'unseared'], - 'underseam': ['underseam', 'unsmeared'], - 'undersect': ['uncrested', 'undersect'], - 'underserve': ['underserve', - 'underverse', - 'undeserver', - 'unreserved', - 'unreversed'], - 'underset': ['sederunt', 'underset', 'undesert', 'unrested'], - 'undershapen': ['undershapen', 'unsharpened'], - 'undershore': ['underhorse', 'undershore'], - 'undershrub': ['underbrush', 'undershrub'], - 'underside': ['underside', 'undesired'], - 'undersoil': ['undersoil', 'unsoldier'], - 'undersow': ['sewround', 'undersow'], - 'underspar': ['underspar', 'unsparred'], - 'understain': ['understain', 'unstrained'], - 'understand': ['understand', 'unstranded'], - 'understream': ['undermaster', 'understream'], - 'underthane': ['unadherent', 'underneath', 'underthane'], - 'underthing': ['thundering', 'underthing'], - 'undertide': ['durdenite', 'undertide'], - 'undertime': ['undertime', 'unmerited'], - 'undertimed': ['demiturned', 'undertimed'], - 'undertitle': ['undertitle', 'unlittered'], - 'undertone': ['undernote', 'undertone'], - 'undertoned': ['undernoted', 'undertoned'], - 'undertow': ['undertow', 'untrowed'], - 'undertread': ['undertread', 'unretarded'], - 'undertutor': ['undertutor', 'untortured'], - 'underverse': ['underserve', - 'underverse', - 'undeserver', - 'unreserved', - 'unreversed'], - 'underwage': ['underwage', 'unwagered'], - 'underward': ['underdraw', 'underward'], - 'underwarp': ['underwarp', 'underwrap'], - 'underwave': ['underwave', 'unwavered'], - 'underwrap': ['underwarp', 'underwrap'], - 'undesert': ['sederunt', 'underset', 'undesert', 'unrested'], - 'undeserve': ['undeserve', 'unsevered'], - 'undeserver': ['underserve', - 'underverse', - 'undeserver', - 'unreserved', - 'unreversed'], - 'undesign': ['undesign', 'unsigned', 'unsinged'], - 'undesired': ['underside', 'undesired'], - 'undeviated': ['denudative', 'undeviated'], - 'undieted': ['undieted', 'unedited'], - 'undig': ['gundi', 'undig'], - 'undirect': ['undirect', 'untriced'], - 'undirected': ['uncredited', 'undirected'], - 'undiscerned': ['undiscerned', 'unrescinded'], - 'undiscretion': ['discontinuer', 'undiscretion'], - 'undistress': ['sturdiness', 'undistress'], - 'undiverse': ['undiverse', 'unrevised'], - 'undog': ['undog', 'ungod'], - 'undrab': ['durban', 'undrab'], - 'undrag': ['durgan', 'undrag'], - 'undrape': ['undrape', 'unpared', 'unraped'], - 'undreaded': ['underdead', 'undreaded'], - 'undreamed': ['undermade', 'undreamed'], - 'undrowned': ['underdown', 'undrowned'], - 'undrugged': ['undrugged', 'ungrudged'], - 'undryable': ['endurably', 'undryable'], - 'undub': ['bundu', 'unbud', 'undub'], - 'undumped': ['pudendum', 'undumped'], - 'undy': ['duny', 'undy'], - 'uneager': ['geneura', 'uneager'], - 'unearned': ['unearned', 'unneared'], - 'unearnest': ['unearnest', 'uneastern'], - 'unearth': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'], - 'unearthed': ['underheat', 'unearthed'], - 'unearthly': ['unearthly', 'urethylan'], - 'uneastern': ['unearnest', 'uneastern'], - 'uneath': ['uneath', 'unhate'], - 'unebriate': ['beraunite', 'unebriate'], - 'unedge': ['dengue', 'unedge'], - 'unedible': ['unbelied', 'unedible'], - 'unedified': ['undeified', 'unedified'], - 'unedited': ['undieted', 'unedited'], - 'unelapsed': ['unelapsed', 'unpleased'], - 'unelated': ['antelude', 'unelated'], - 'unelbowed': ['unboweled', 'unelbowed'], - 'unelidible': ['ineludible', 'unelidible'], - 'uneluded': ['undelude', 'uneluded'], - 'unembased': ['sunbeamed', 'unembased'], - 'unembraced': ['uncambered', 'unembraced'], - 'unenabled': ['unenabled', 'unendable'], - 'unencored': ['denouncer', 'unencored'], - 'unendable': ['unenabled', 'unendable'], - 'unending': ['unending', 'unginned'], - 'unenervated': ['unenervated', 'unvenerated'], - 'unenlisted': ['unenlisted', 'unlistened', 'untinseled'], - 'unenterprised': ['superintender', 'unenterprised'], - 'unenviable': ['unenviable', 'unveniable'], - 'unenvied': ['unenvied', 'unveined'], - 'unequitable': ['unequitable', 'unquietable'], - 'unerased': ['undersea', 'unerased', 'unseared'], - 'unermined': ['undermine', 'unermined'], - 'unerratic': ['recurtain', 'unerratic'], - 'unerupted': ['unerupted', 'unreputed'], - 'unescorted': ['uncorseted', 'unescorted'], - 'unevil': ['unevil', 'unlive', 'unveil'], - 'unexactly': ['exultancy', 'unexactly'], - 'unexceptable': ['unexceptable', 'unexpectable'], - 'unexcepted': ['unexcepted', 'unexpected'], - 'unexcepting': ['unexcepting', 'unexpecting'], - 'unexpectable': ['unexceptable', 'unexpectable'], - 'unexpected': ['unexcepted', 'unexpected'], - 'unexpecting': ['unexcepting', 'unexpecting'], - 'unfabled': ['fundable', 'unfabled'], - 'unfaceted': ['fecundate', 'unfaceted'], - 'unfactional': ['afunctional', 'unfactional'], - 'unfactored': ['fecundator', 'unfactored'], - 'unfainting': ['antifungin', 'unfainting'], - 'unfallible': ['unfallible', 'unfillable'], - 'unfar': ['furan', 'unfar'], - 'unfarmed': ['unfarmed', 'unframed'], - 'unfederal': ['underleaf', 'unfederal'], - 'unfeeding': ['unfeeding', 'unfeigned'], - 'unfeeling': ['unfeeling', 'unfleeing'], - 'unfeigned': ['unfeeding', 'unfeigned'], - 'unfelt': ['fluent', 'netful', 'unfelt', 'unleft'], - 'unfelted': ['defluent', 'unfelted'], - 'unferried': ['underfire', 'unferried'], - 'unfiber': ['unbrief', 'unfiber'], - 'unfibered': ['unbriefed', 'unfibered'], - 'unfielded': ['undefiled', 'unfielded'], - 'unfiend': ['unfiend', 'unfined'], - 'unfiery': ['reunify', 'unfiery'], - 'unfillable': ['unfallible', 'unfillable'], - 'unfined': ['unfiend', 'unfined'], - 'unfired': ['unfired', 'unfried'], - 'unflag': ['fungal', 'unflag'], - 'unflat': ['flaunt', 'unflat'], - 'unfleeing': ['unfeeling', 'unfleeing'], - 'unfloured': ['unfloured', 'unfoldure'], - 'unfolder': ['flounder', 'reunfold', 'unfolder'], - 'unfolding': ['foundling', 'unfolding'], - 'unfoldure': ['unfloured', 'unfoldure'], - 'unforest': ['furstone', 'unforest'], - 'unforested': ['unforested', 'unfostered'], - 'unformality': ['fulminatory', 'unformality'], - 'unforward': ['unforward', 'unfroward'], - 'unfostered': ['unforested', 'unfostered'], - 'unfrail': ['rainful', 'unfrail'], - 'unframed': ['unfarmed', 'unframed'], - 'unfret': ['turfen', 'unfret'], - 'unfriable': ['funebrial', 'unfriable'], - 'unfried': ['unfired', 'unfried'], - 'unfriended': ['underfiend', 'unfriended'], - 'unfriending': ['unfriending', 'uninfringed'], - 'unfrilled': ['underfill', 'unfrilled'], - 'unfroward': ['unforward', 'unfroward'], - 'unfurl': ['unfurl', 'urnful'], - 'unfurred': ['underfur', 'unfurred'], - 'ungaite': ['ungaite', 'unitage'], - 'unganged': ['unganged', 'unnagged'], - 'ungardened': ['undangered', 'underanged', 'ungardened'], - 'ungarnish': ['ungarnish', 'unsharing'], - 'ungear': ['nauger', 'raunge', 'ungear'], - 'ungeared': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'], - 'ungelt': ['englut', 'gluten', 'ungelt'], - 'ungenerable': ['ungenerable', 'ungreenable'], - 'unget': ['tengu', 'unget'], - 'ungilded': ['deluding', 'ungilded'], - 'ungill': ['ulling', 'ungill'], - 'ungilt': ['glutin', 'luting', 'ungilt'], - 'unginned': ['unending', 'unginned'], - 'ungird': ['during', 'ungird'], - 'ungirded': ['underdig', 'ungirded', 'unridged'], - 'ungirdle': ['indulger', 'ungirdle'], - 'ungirt': ['ungirt', 'untrig'], - 'ungirth': ['hurting', 'ungirth', 'unright'], - 'ungirthed': ['ungirthed', 'unrighted'], - 'unglad': ['gandul', 'unglad'], - 'unglued': ['unglued', 'unguled'], - 'ungod': ['undog', 'ungod'], - 'ungold': ['dungol', 'ungold'], - 'ungone': ['guenon', 'ungone'], - 'ungored': ['guerdon', 'undergo', 'ungored'], - 'ungorge': ['gurgeon', 'ungorge'], - 'ungot': ['tungo', 'ungot'], - 'ungothic': ['touching', 'ungothic'], - 'ungraphic': ['ungraphic', 'uparching'], - 'ungreenable': ['ungenerable', 'ungreenable'], - 'ungrieved': ['gerundive', 'ungrieved'], - 'ungroined': ['ungroined', 'unignored'], - 'ungrudged': ['undrugged', 'ungrudged'], - 'ungual': ['ungual', 'ungula'], - 'ungueal': ['ungueal', 'ungulae'], - 'ungula': ['ungual', 'ungula'], - 'ungulae': ['ungueal', 'ungulae'], - 'unguled': ['unglued', 'unguled'], - 'ungulp': ['ungulp', 'unplug'], - 'unhabit': ['bhutani', 'unhabit'], - 'unhackled': ['unchalked', 'unhackled'], - 'unhairer': ['rhineura', 'unhairer'], - 'unhalsed': ['unhalsed', 'unlashed', 'unshaled'], - 'unhalted': ['unhalted', 'unlathed'], - 'unhalter': ['lutheran', 'unhalter'], - 'unhaltered': ['unhaltered', 'unlathered'], - 'unhamper': ['prehuman', 'unhamper'], - 'unharbored': ['unabhorred', 'unharbored'], - 'unhasped': ['unhasped', 'unphased', 'unshaped'], - 'unhat': ['ahunt', 'haunt', 'thuan', 'unhat'], - 'unhate': ['uneath', 'unhate'], - 'unhatingly': ['hauntingly', 'unhatingly'], - 'unhayed': ['unhayed', 'unheady'], - 'unheady': ['unhayed', 'unheady'], - 'unhearsed': ['unhearsed', 'unsheared'], - 'unheart': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'], - 'unhid': ['hindu', 'hundi', 'unhid'], - 'unhistoric': ['trichinous', 'unhistoric'], - 'unhittable': ['unhittable', 'untithable'], - 'unhoarded': ['roundhead', 'unhoarded'], - 'unhocked': ['unchoked', 'unhocked'], - 'unhoisted': ['hudsonite', 'unhoisted'], - 'unhorse': ['unhorse', 'unshore'], - 'unhose': ['unhose', 'unshoe'], - 'unhosed': ['unhosed', 'unshoed'], - 'unhurt': ['unhurt', 'unruth'], - 'uniat': ['uinta', 'uniat'], - 'uniate': ['auntie', 'uniate'], - 'unible': ['nubile', 'unible'], - 'uniced': ['induce', 'uniced'], - 'unicentral': ['incruental', 'unicentral'], - 'unideal': ['aliunde', 'unideal'], - 'unidentified': ['indefinitude', 'unidentified'], - 'unidly': ['unidly', 'yildun'], - 'unie': ['niue', 'unie'], - 'unifilar': ['friulian', 'unifilar'], - 'uniflorate': ['antifouler', 'fluorinate', 'uniflorate'], - 'unigenous': ['ingenuous', 'unigenous'], - 'unignored': ['ungroined', 'unignored'], - 'unilobar': ['orbulina', 'unilobar'], - 'unilobed': ['unboiled', 'unilobed'], - 'unimedial': ['aluminide', 'unimedial'], - 'unimpair': ['manipuri', 'unimpair'], - 'unimparted': ['diparentum', 'unimparted'], - 'unimportance': ['importunance', 'unimportance'], - 'unimpressible': ['unimpressible', 'unpermissible'], - 'unimpressive': ['unimpressive', 'unpermissive'], - 'unindented': ['unindented', 'unintended'], - 'unindulged': ['undeluding', 'unindulged'], - 'uninervate': ['aventurine', 'uninervate'], - 'uninfringed': ['unfriending', 'uninfringed'], - 'uningested': ['uningested', 'unsigneted'], - 'uninn': ['nunni', 'uninn'], - 'uninnate': ['eutannin', 'uninnate'], - 'uninodal': ['annuloid', 'uninodal'], - 'unintended': ['unindented', 'unintended'], - 'unintoned': ['nonunited', 'unintoned'], - 'uninured': ['uninured', 'unruined'], - 'unionist': ['inustion', 'unionist'], - 'unipersonal': ['spinoneural', 'unipersonal'], - 'unipod': ['dupion', 'unipod'], - 'uniradial': ['nidularia', 'uniradial'], - 'unireme': ['erineum', 'unireme'], - 'uniserrate': ['arseniuret', 'uniserrate'], - 'unison': ['nonius', 'unison'], - 'unitage': ['ungaite', 'unitage'], - 'unital': ['inlaut', 'unital'], - 'unite': ['intue', 'unite', 'untie'], - 'united': ['dunite', 'united', 'untied'], - 'uniter': ['runite', 'triune', 'uniter', 'untire'], - 'unitiveness': ['unitiveness', 'unsensitive'], - 'unitrope': ['eruption', 'unitrope'], - 'univied': ['univied', 'viduine'], - 'unket': ['knute', 'unket'], - 'unkilned': ['unkilned', 'unlinked'], - 'unkin': ['nunki', 'unkin'], - 'unkindred': ['underkind', 'unkindred'], - 'unlabiate': ['laubanite', 'unlabiate'], - 'unlabored': ['burdalone', 'unlabored'], - 'unlace': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'], - 'unlaced': ['unclead', 'unlaced'], - 'unlade': ['unlade', 'unlead'], - 'unlaid': ['dualin', 'ludian', 'unlaid'], - 'unlame': ['manuel', 'unlame'], - 'unlapped': ['unlapped', 'unpalped'], - 'unlarge': ['granule', 'unlarge', 'unregal'], - 'unlashed': ['unhalsed', 'unlashed', 'unshaled'], - 'unlasting': ['unlasting', 'unslating'], - 'unlatch': ['tulchan', 'unlatch'], - 'unlathed': ['unhalted', 'unlathed'], - 'unlathered': ['unhaltered', 'unlathered'], - 'unlay': ['unlay', 'yulan'], - 'unlead': ['unlade', 'unlead'], - 'unleasable': ['unleasable', 'unsealable'], - 'unleased': ['unleased', 'unsealed'], - 'unleash': ['hulsean', 'unleash'], - 'unled': ['lendu', 'unled'], - 'unleft': ['fluent', 'netful', 'unfelt', 'unleft'], - 'unlent': ['nunlet', 'tunnel', 'unlent'], - 'unlevied': ['unlevied', 'unveiled'], - 'unlibeled': ['undelible', 'unlibeled'], - 'unliberal': ['brunellia', 'unliberal'], - 'unlicensed': ['unlicensed', 'unsilenced'], - 'unlighted': ['undelight', 'unlighted'], - 'unliken': ['nunlike', 'unliken'], - 'unlime': ['lumine', 'unlime'], - 'unlinked': ['unkilned', 'unlinked'], - 'unlist': ['insult', 'sunlit', 'unlist', 'unslit'], - 'unlistened': ['unenlisted', 'unlistened', 'untinseled'], - 'unlit': ['unlit', 'until'], - 'unliteral': ['tellurian', 'unliteral'], - 'unlittered': ['undertitle', 'unlittered'], - 'unlive': ['unevil', 'unlive', 'unveil'], - 'unloaded': ['duodenal', 'unloaded'], - 'unloaden': ['unloaden', 'unloaned'], - 'unloader': ['unloader', 'urodelan'], - 'unloaned': ['unloaden', 'unloaned'], - 'unlodge': ['unlodge', 'unogled'], - 'unlogic': ['gulonic', 'unlogic'], - 'unlooped': ['unlooped', 'unpooled'], - 'unlooted': ['unlooted', 'untooled'], - 'unlost': ['unlost', 'unslot'], - 'unlowered': ['unlowered', 'unroweled'], - 'unlucid': ['nuculid', 'unlucid'], - 'unlumped': ['pendulum', 'unlumped', 'unplumed'], - 'unlured': ['unlured', 'unruled'], - 'unlyrical': ['runically', 'unlyrical'], - 'unmacerated': ['uncamerated', 'unmacerated'], - 'unmad': ['maund', 'munda', 'numda', 'undam', 'unmad'], - 'unmadded': ['addendum', 'unmadded'], - 'unmaddened': ['undemanded', 'unmaddened'], - 'unmaid': ['numida', 'unmaid'], - 'unmail': ['alumni', 'unmail'], - 'unmailed': ['adlumine', 'unmailed'], - 'unmaned': ['mundane', 'unamend', 'unmaned', 'unnamed'], - 'unmantle': ['unmantle', 'unmental'], - 'unmarch': ['uncharm', 'unmarch'], - 'unmarching': ['uncharming', 'unmarching'], - 'unmarginal': ['unalarming', 'unmarginal'], - 'unmarred': ['underarm', 'unmarred'], - 'unmashed': ['unmashed', 'unshamed'], - 'unmate': ['unmate', 'untame', 'unteam'], - 'unmated': ['unmated', 'untamed'], - 'unmaterial': ['manualiter', 'unmaterial'], - 'unmeated': ['unmeated', 'unteamed'], - 'unmedical': ['unclaimed', 'undecimal', 'unmedical'], - 'unmeet': ['unmeet', 'unteem'], - 'unmemoired': ['unmemoired', 'unmemoried'], - 'unmemoried': ['unmemoired', 'unmemoried'], - 'unmental': ['unmantle', 'unmental'], - 'unmerged': ['gerendum', 'unmerged'], - 'unmerited': ['undertime', 'unmerited'], - 'unmettle': ['temulent', 'unmettle'], - 'unminable': ['nelumbian', 'unminable'], - 'unmined': ['minuend', 'unmined'], - 'unminted': ['indument', 'unminted'], - 'unmisled': ['muslined', 'unmisled', 'unsmiled'], - 'unmiter': ['minuter', 'unmiter'], - 'unmodest': ['mudstone', 'unmodest'], - 'unmodish': ['muishond', 'unmodish'], - 'unmomentary': ['monumentary', 'unmomentary'], - 'unmonitored': ['undermotion', 'unmonitored'], - 'unmorbid': ['moribund', 'unmorbid'], - 'unmorose': ['enormous', 'unmorose'], - 'unmortised': ['semirotund', 'unmortised'], - 'unmotived': ['unmotived', 'unvomited'], - 'unmystical': ['stimulancy', 'unmystical'], - 'unnagged': ['unganged', 'unnagged'], - 'unnail': ['alnuin', 'unnail'], - 'unnameability': ['unamenability', 'unnameability'], - 'unnameable': ['unamenable', 'unnameable'], - 'unnameableness': ['unamenableness', 'unnameableness'], - 'unnameably': ['unamenably', 'unnameably'], - 'unnamed': ['mundane', 'unamend', 'unmaned', 'unnamed'], - 'unnational': ['annulation', 'unnational'], - 'unnative': ['unnative', 'venutian'], - 'unneared': ['unearned', 'unneared'], - 'unnest': ['unnest', 'unsent'], - 'unnetted': ['unnetted', 'untented'], - 'unnose': ['nonuse', 'unnose'], - 'unnoted': ['unnoted', 'untoned'], - 'unnoticed': ['continued', 'unnoticed'], - 'unoared': ['rondeau', 'unoared'], - 'unogled': ['unlodge', 'unogled'], - 'unomitted': ['dumontite', 'unomitted'], - 'unoperatic': ['precaution', 'unoperatic'], - 'unorbed': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'], - 'unorder': ['rondure', 'rounder', 'unorder'], - 'unordered': ['underdoer', 'unordered'], - 'unoriented': ['nonerudite', 'unoriented'], - 'unown': ['unown', 'unwon'], - 'unowned': ['enwound', 'unowned'], - 'unpacable': ['uncapable', 'unpacable'], - 'unpacker': ['reunpack', 'unpacker'], - 'unpaired': ['unpaired', 'unrepaid'], - 'unpale': ['unpale', 'uplane'], - 'unpalped': ['unlapped', 'unpalped'], - 'unpanel': ['unpanel', 'unpenal'], - 'unparceled': ['unparceled', 'unreplaced'], - 'unparched': ['underchap', 'unparched'], - 'unpared': ['undrape', 'unpared', 'unraped'], - 'unparsed': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'], - 'unparted': ['depurant', 'unparted'], - 'unpartial': ['tarpaulin', 'unpartial'], - 'unpenal': ['unpanel', 'unpenal'], - 'unpenetrable': ['unpenetrable', 'unrepentable'], - 'unpent': ['punnet', 'unpent'], - 'unperch': ['puncher', 'unperch'], - 'unpercolated': ['counterpaled', 'counterplead', 'unpercolated'], - 'unpermissible': ['unimpressible', 'unpermissible'], - 'unpermissive': ['unimpressive', 'unpermissive'], - 'unperuked': ['underpuke', 'unperuked'], - 'unpervaded': ['undepraved', 'unpervaded'], - 'unpetal': ['plutean', 'unpetal', 'unpleat'], - 'unpharasaic': ['parasuchian', 'unpharasaic'], - 'unphased': ['unhasped', 'unphased', 'unshaped'], - 'unphrased': ['unphrased', 'unsharped'], - 'unpickled': ['dunpickle', 'unpickled'], - 'unpierced': ['preinduce', 'unpierced'], - 'unpile': ['lupine', 'unpile', 'upline'], - 'unpiled': ['unpiled', 'unplied'], - 'unplace': ['cleanup', 'unplace'], - 'unplain': ['pinnula', 'unplain'], - 'unplait': ['nuptial', 'unplait'], - 'unplanted': ['pendulant', 'unplanted'], - 'unplat': ['puntal', 'unplat'], - 'unpleased': ['unelapsed', 'unpleased'], - 'unpleat': ['plutean', 'unpetal', 'unpleat'], - 'unpleated': ['pendulate', 'unpleated'], - 'unplied': ['unpiled', 'unplied'], - 'unplug': ['ungulp', 'unplug'], - 'unplumed': ['pendulum', 'unlumped', 'unplumed'], - 'unpoled': ['duplone', 'unpoled'], - 'unpolished': ['disulphone', 'unpolished'], - 'unpolitic': ['punctilio', 'unpolitic'], - 'unpooled': ['unlooped', 'unpooled'], - 'unposted': ['outspend', 'unposted'], - 'unpot': ['punto', 'unpot', 'untop'], - 'unprayed': ['underpay', 'unprayed'], - 'unprelatic': ['periculant', 'unprelatic'], - 'unpressed': ['resuspend', 'suspender', 'unpressed'], - 'unpricked': ['underpick', 'unpricked'], - 'unprint': ['turnpin', 'unprint'], - 'unprosaic': ['inocarpus', 'unprosaic'], - 'unproselyted': ['pseudelytron', 'unproselyted'], - 'unproud': ['roundup', 'unproud'], - 'unpursued': ['unpursued', 'unusurped'], - 'unpursuing': ['unpursuing', 'unusurping'], - 'unquietable': ['unequitable', 'unquietable'], - 'unrabbeted': ['beturbaned', 'unrabbeted'], - 'unraced': ['durance', 'redunca', 'unraced'], - 'unraided': ['underaid', 'unraided'], - 'unraised': ['denarius', 'desaurin', 'unraised'], - 'unram': ['muran', 'ruman', 'unarm', 'unram', 'urman'], - 'unranked': ['undarken', 'unranked'], - 'unraped': ['undrape', 'unpared', 'unraped'], - 'unrasped': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'], - 'unrated': ['daunter', 'unarted', 'unrated', 'untread'], - 'unravel': ['unravel', 'venular'], - 'unray': ['anury', 'unary', 'unray'], - 'unrayed': ['unrayed', 'unready'], - 'unreactive': ['uncreative', 'unreactive'], - 'unread': ['endura', 'neurad', 'undear', 'unread'], - 'unready': ['unrayed', 'unready'], - 'unreal': ['lunare', 'neural', 'ulnare', 'unreal'], - 'unrealism': ['semilunar', 'unrealism'], - 'unrealist': ['neuralist', 'ulsterian', 'unrealist'], - 'unrealmed': ['denumeral', 'undermeal', 'unrealmed'], - 'unrebated': ['eburnated', 'underbeat', 'unrebated'], - 'unrebutted': ['unbuttered', 'unrebutted'], - 'unreceived': ['undeceiver', 'unreceived'], - 'unrecent': ['uncenter', 'unrecent'], - 'unrecited': ['centuried', 'unrecited'], - 'unrectifiable': ['uncertifiable', 'unrectifiable'], - 'unrectified': ['uncertified', 'unrectified'], - 'unred': ['runed', 'under', 'unred'], - 'unredacted': ['underacted', 'unredacted'], - 'unreduct': ['undercut', 'unreduct'], - 'unreeve': ['revenue', 'unreeve'], - 'unreeving': ['unreeving', 'unveering'], - 'unregal': ['granule', 'unlarge', 'unregal'], - 'unregard': ['grandeur', 'unregard'], - 'unregarded': ['undergrade', 'unregarded'], - 'unrein': ['enruin', 'neurin', 'unrein'], - 'unreinstated': ['unreinstated', 'unstraitened'], - 'unrelated': ['unaltered', 'unrelated'], - 'unrelating': ['unaltering', 'unrelating'], - 'unreleased': ['underlease', 'unreleased'], - 'unrelegated': ['underlegate', 'unrelegated'], - 'unremarked': ['undermaker', 'unremarked'], - 'unrent': ['runnet', 'tunner', 'unrent'], - 'unrented': ['unrented', 'untender'], - 'unrepaid': ['unpaired', 'unrepaid'], - 'unrepentable': ['unpenetrable', 'unrepentable'], - 'unrepined': ['unrepined', 'unripened'], - 'unrepining': ['unrepining', 'unripening'], - 'unreplaced': ['unparceled', 'unreplaced'], - 'unreplied': ['underpile', 'unreplied'], - 'unreposed': ['underpose', 'unreposed'], - 'unreputed': ['unerupted', 'unreputed'], - 'unrescinded': ['undiscerned', 'unrescinded'], - 'unrescued': ['unrescued', 'unsecured'], - 'unreserved': ['underserve', - 'underverse', - 'undeserver', - 'unreserved', - 'unreversed'], - 'unresisted': ['unresisted', 'unsistered'], - 'unresolve': ['nervulose', 'unresolve', 'vulnerose'], - 'unrespect': ['unrespect', 'unscepter', 'unsceptre'], - 'unrespected': ['unrespected', 'unsceptered'], - 'unrested': ['sederunt', 'underset', 'undesert', 'unrested'], - 'unresting': ['insurgent', 'unresting'], - 'unretarded': ['undertread', 'unretarded'], - 'unreticent': ['entincture', 'unreticent'], - 'unretired': ['reintrude', 'unretired'], - 'unrevered': ['enverdure', 'unrevered'], - 'unreversed': ['underserve', - 'underverse', - 'undeserver', - 'unreserved', - 'unreversed'], - 'unreviled': ['underlive', 'unreviled'], - 'unrevised': ['undiverse', 'unrevised'], - 'unrevocable': ['uncoverable', 'unrevocable'], - 'unribbed': ['unbribed', 'unribbed'], - 'unrich': ['unrich', 'urchin'], - 'unrid': ['rundi', 'unrid'], - 'unridable': ['indurable', 'unbrailed', 'unridable'], - 'unriddle': ['underlid', 'unriddle'], - 'unride': ['diurne', 'inured', 'ruined', 'unride'], - 'unridged': ['underdig', 'ungirded', 'unridged'], - 'unrig': ['irgun', 'ruing', 'unrig'], - 'unright': ['hurting', 'ungirth', 'unright'], - 'unrighted': ['ungirthed', 'unrighted'], - 'unring': ['unring', 'urning'], - 'unringed': ['enduring', 'unringed'], - 'unripe': ['purine', 'unripe', 'uprein'], - 'unripely': ['pyruline', 'unripely'], - 'unripened': ['unrepined', 'unripened'], - 'unripening': ['unrepining', 'unripening'], - 'unroaded': ['unadored', 'unroaded'], - 'unrobed': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'], - 'unrocked': ['uncorked', 'unrocked'], - 'unroot': ['notour', 'unroot'], - 'unroped': ['pounder', 'repound', 'unroped'], - 'unrosed': ['resound', 'sounder', 'unrosed'], - 'unrostrated': ['tetrandrous', 'unrostrated'], - 'unrotated': ['rotundate', 'unrotated'], - 'unroted': ['tendour', 'unroted'], - 'unroused': ['unroused', 'unsoured'], - 'unrouted': ['unrouted', 'untoured'], - 'unrowed': ['rewound', 'unrowed', 'wounder'], - 'unroweled': ['unlowered', 'unroweled'], - 'unroyalist': ['unroyalist', 'unsolitary'], - 'unruined': ['uninured', 'unruined'], - 'unruled': ['unlured', 'unruled'], - 'unrun': ['unrun', 'unurn'], - 'unruth': ['unhurt', 'unruth'], - 'unsack': ['uncask', 'unsack'], - 'unsacked': ['uncasked', 'unsacked'], - 'unsacred': ['unsacred', 'unscared'], - 'unsad': ['sudan', 'unsad'], - 'unsadden': ['unsadden', 'unsanded'], - 'unsage': ['gnaeus', 'unsage'], - 'unsaid': ['sudani', 'unsaid'], - 'unsailed': ['unaisled', 'unsailed'], - 'unsaint': ['antisun', 'unsaint', 'unsatin', 'unstain'], - 'unsainted': ['unsainted', 'unstained'], - 'unsalt': ['sultan', 'unsalt'], - 'unsalted': ['unsalted', 'unslated', 'unstaled'], - 'unsanded': ['unsadden', 'unsanded'], - 'unsardonic': ['andronicus', 'unsardonic'], - 'unsashed': ['sunshade', 'unsashed'], - 'unsatable': ['sublanate', 'unsatable'], - 'unsatiable': ['balaustine', 'unsatiable'], - 'unsatin': ['antisun', 'unsaint', 'unsatin', 'unstain'], - 'unsauced': ['uncaused', 'unsauced'], - 'unscale': ['censual', 'unscale'], - 'unscalloped': ['uncollapsed', 'unscalloped'], - 'unscaly': ['ancylus', 'unscaly'], - 'unscared': ['unsacred', 'unscared'], - 'unscepter': ['unrespect', 'unscepter', 'unsceptre'], - 'unsceptered': ['unrespected', 'unsceptered'], - 'unsceptre': ['unrespect', 'unscepter', 'unsceptre'], - 'unscoured': ['uncoursed', 'unscoured'], - 'unseal': ['elanus', 'unseal'], - 'unsealable': ['unleasable', 'unsealable'], - 'unsealed': ['unleased', 'unsealed'], - 'unseared': ['undersea', 'unerased', 'unseared'], - 'unseat': ['nasute', 'nauset', 'unseat'], - 'unseated': ['unseated', 'unsedate', 'unteased'], - 'unsecured': ['unrescued', 'unsecured'], - 'unsedate': ['unseated', 'unsedate', 'unteased'], - 'unsee': ['ensue', 'seenu', 'unsee'], - 'unseethed': ['unseethed', 'unsheeted'], - 'unseizable': ['unseizable', 'unsizeable'], - 'unselect': ['esculent', 'unselect'], - 'unsensed': ['nudeness', 'unsensed'], - 'unsensitive': ['unitiveness', 'unsensitive'], - 'unsent': ['unnest', 'unsent'], - 'unsepulcher': ['unsepulcher', 'unsepulchre'], - 'unsepulchre': ['unsepulcher', 'unsepulchre'], - 'unserrated': ['unarrested', 'unserrated'], - 'unserved': ['unserved', 'unversed'], - 'unset': ['unset', 'usent'], - 'unsevered': ['undeserve', 'unsevered'], - 'unsewed': ['sunweed', 'unsewed'], - 'unsex': ['nexus', 'unsex'], - 'unshaded': ['undashed', 'unshaded'], - 'unshaled': ['unhalsed', 'unlashed', 'unshaled'], - 'unshamed': ['unmashed', 'unshamed'], - 'unshaped': ['unhasped', 'unphased', 'unshaped'], - 'unsharing': ['ungarnish', 'unsharing'], - 'unsharped': ['unphrased', 'unsharped'], - 'unsharpened': ['undershapen', 'unsharpened'], - 'unsheared': ['unhearsed', 'unsheared'], - 'unsheet': ['enthuse', 'unsheet'], - 'unsheeted': ['unseethed', 'unsheeted'], - 'unship': ['inpush', 'punish', 'unship'], - 'unshipment': ['punishment', 'unshipment'], - 'unshoe': ['unhose', 'unshoe'], - 'unshoed': ['unhosed', 'unshoed'], - 'unshore': ['unhorse', 'unshore'], - 'unshored': ['enshroud', 'unshored'], - 'unshortened': ['underhonest', 'unshortened'], - 'unsicker': ['cruisken', 'unsicker'], - 'unsickled': ['klendusic', 'unsickled'], - 'unsight': ['gutnish', 'husting', 'unsight'], - 'unsignable': ['unsignable', 'unsingable'], - 'unsigned': ['undesign', 'unsigned', 'unsinged'], - 'unsigneted': ['uningested', 'unsigneted'], - 'unsilenced': ['unlicensed', 'unsilenced'], - 'unsimple': ['splenium', 'unsimple'], - 'unsin': ['sunni', 'unsin'], - 'unsingable': ['unsignable', 'unsingable'], - 'unsinged': ['undesign', 'unsigned', 'unsinged'], - 'unsistered': ['unresisted', 'unsistered'], - 'unsizeable': ['unseizable', 'unsizeable'], - 'unskin': ['insunk', 'unskin'], - 'unslate': ['sultane', 'unslate'], - 'unslated': ['unsalted', 'unslated', 'unstaled'], - 'unslating': ['unlasting', 'unslating'], - 'unslept': ['unslept', 'unspelt'], - 'unslighted': ['sunlighted', 'unslighted'], - 'unslit': ['insult', 'sunlit', 'unlist', 'unslit'], - 'unslot': ['unlost', 'unslot'], - 'unsmeared': ['underseam', 'unsmeared'], - 'unsmiled': ['muslined', 'unmisled', 'unsmiled'], - 'unsnap': ['pannus', 'sannup', 'unsnap', 'unspan'], - 'unsnatch': ['unsnatch', 'unstanch'], - 'unsnow': ['unsnow', 'unsown'], - 'unsocial': ['sualocin', 'unsocial'], - 'unsoil': ['insoul', 'linous', 'nilous', 'unsoil'], - 'unsoiled': ['delusion', 'unsoiled'], - 'unsoldier': ['undersoil', 'unsoldier'], - 'unsole': ['ensoul', 'olenus', 'unsole'], - 'unsolitary': ['unroyalist', 'unsolitary'], - 'unsomber': ['unsomber', 'unsombre'], - 'unsombre': ['unsomber', 'unsombre'], - 'unsome': ['nomeus', 'unsome'], - 'unsore': ['souren', 'unsore', 'ursone'], - 'unsort': ['tornus', 'unsort'], - 'unsortable': ['neuroblast', 'unsortable'], - 'unsorted': ['tonsured', 'unsorted', 'unstored'], - 'unsoured': ['unroused', 'unsoured'], - 'unsown': ['unsnow', 'unsown'], - 'unspan': ['pannus', 'sannup', 'unsnap', 'unspan'], - 'unspar': ['surnap', 'unspar'], - 'unspared': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'], - 'unsparred': ['underspar', 'unsparred'], - 'unspecterlike': ['unspecterlike', 'unspectrelike'], - 'unspectrelike': ['unspecterlike', 'unspectrelike'], - 'unsped': ['unsped', 'upsend'], - 'unspelt': ['unslept', 'unspelt'], - 'unsphering': ['gunnership', 'unsphering'], - 'unspiable': ['subalpine', 'unspiable'], - 'unspike': ['spunkie', 'unspike'], - 'unspit': ['ptinus', 'unspit'], - 'unspoil': ['pulsion', 'unspoil', 'upsilon'], - 'unspot': ['pontus', 'unspot', 'unstop'], - 'unspread': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'], - 'unstabled': ['dunstable', 'unblasted', 'unstabled'], - 'unstain': ['antisun', 'unsaint', 'unsatin', 'unstain'], - 'unstained': ['unsainted', 'unstained'], - 'unstaled': ['unsalted', 'unslated', 'unstaled'], - 'unstanch': ['unsnatch', 'unstanch'], - 'unstar': ['saturn', 'unstar'], - 'unstatable': ['unstatable', 'untastable'], - 'unstate': ['tetanus', 'unstate', 'untaste'], - 'unstateable': ['unstateable', 'untasteable'], - 'unstated': ['unstated', 'untasted'], - 'unstating': ['unstating', 'untasting'], - 'unstayed': ['unstayed', 'unsteady'], - 'unsteady': ['unstayed', 'unsteady'], - 'unstercorated': ['countertrades', 'unstercorated'], - 'unstern': ['stunner', 'unstern'], - 'unstocked': ['duckstone', 'unstocked'], - 'unstoic': ['cotinus', 'suction', 'unstoic'], - 'unstoical': ['suctional', 'sulcation', 'unstoical'], - 'unstop': ['pontus', 'unspot', 'unstop'], - 'unstopple': ['pulpstone', 'unstopple'], - 'unstore': ['snouter', 'tonsure', 'unstore'], - 'unstored': ['tonsured', 'unsorted', 'unstored'], - 'unstoried': ['detrusion', 'tinderous', 'unstoried'], - 'unstormed': ['undermost', 'unstormed'], - 'unstrain': ['insurant', 'unstrain'], - 'unstrained': ['understain', 'unstrained'], - 'unstraitened': ['unreinstated', 'unstraitened'], - 'unstranded': ['understand', 'unstranded'], - 'unstrewed': ['unstrewed', 'unwrested'], - 'unsucculent': ['centunculus', 'unsucculent'], - 'unsued': ['unsued', 'unused'], - 'unsusceptible': ['unsusceptible', 'unsuspectible'], - 'unsusceptive': ['unsusceptive', 'unsuspective'], - 'unsuspectible': ['unsusceptible', 'unsuspectible'], - 'unsuspective': ['unsusceptive', 'unsuspective'], - 'untactful': ['fluctuant', 'untactful'], - 'untailed': ['nidulate', 'untailed'], - 'untame': ['unmate', 'untame', 'unteam'], - 'untamed': ['unmated', 'untamed'], - 'untanned': ['nunnated', 'untanned'], - 'untap': ['punta', 'unapt', 'untap'], - 'untar': ['arnut', 'tuarn', 'untar'], - 'untastable': ['unstatable', 'untastable'], - 'untaste': ['tetanus', 'unstate', 'untaste'], - 'untasteable': ['unstateable', 'untasteable'], - 'untasted': ['unstated', 'untasted'], - 'untasting': ['unstating', 'untasting'], - 'untaught': ['taungthu', 'untaught'], - 'untaunted': ['unattuned', 'untaunted'], - 'unteach': ['uncheat', 'unteach'], - 'unteaching': ['uncheating', 'unteaching'], - 'unteam': ['unmate', 'untame', 'unteam'], - 'unteamed': ['unmeated', 'unteamed'], - 'unteased': ['unseated', 'unsedate', 'unteased'], - 'unteem': ['unmeet', 'unteem'], - 'untemper': ['erumpent', 'untemper'], - 'untender': ['unrented', 'untender'], - 'untented': ['unnetted', 'untented'], - 'unthatch': ['nuthatch', 'unthatch'], - 'unthick': ['kutchin', 'unthick'], - 'unthrall': ['turnhall', 'unthrall'], - 'untiaraed': ['diuranate', 'untiaraed'], - 'untidy': ['nudity', 'untidy'], - 'untie': ['intue', 'unite', 'untie'], - 'untied': ['dunite', 'united', 'untied'], - 'until': ['unlit', 'until'], - 'untile': ['lutein', 'untile'], - 'untiled': ['diluent', 'untiled'], - 'untilted': ['dilutent', 'untilted', 'untitled'], - 'untimely': ['minutely', 'untimely'], - 'untin': ['nintu', 'ninut', 'untin'], - 'untine': ['ineunt', 'untine'], - 'untinseled': ['unenlisted', 'unlistened', 'untinseled'], - 'untirable': ['untirable', 'untriable'], - 'untire': ['runite', 'triune', 'uniter', 'untire'], - 'untired': ['intrude', 'turdine', 'untired', 'untried'], - 'untithable': ['unhittable', 'untithable'], - 'untitled': ['dilutent', 'untilted', 'untitled'], - 'unto': ['tuno', 'unto'], - 'untoiled': ['outlined', 'untoiled'], - 'untoned': ['unnoted', 'untoned'], - 'untooled': ['unlooted', 'untooled'], - 'untop': ['punto', 'unpot', 'untop'], - 'untorn': ['tunnor', 'untorn'], - 'untortured': ['undertutor', 'untortured'], - 'untotalled': ['unallotted', 'untotalled'], - 'untouch': ['uncouth', 'untouch'], - 'untoured': ['unrouted', 'untoured'], - 'untrace': ['centaur', 'untrace'], - 'untraceable': ['uncreatable', 'untraceable'], - 'untraceableness': ['uncreatableness', 'untraceableness'], - 'untraced': ['uncarted', 'uncrated', 'underact', 'untraced'], - 'untraceried': ['antireducer', 'reincrudate', 'untraceried'], - 'untradeable': ['untradeable', 'untreadable'], - 'untrain': ['antirun', 'untrain', 'urinant'], - 'untread': ['daunter', 'unarted', 'unrated', 'untread'], - 'untreadable': ['untradeable', 'untreadable'], - 'untreatable': ['entablature', 'untreatable'], - 'untreed': ['denture', 'untreed'], - 'untriable': ['untirable', 'untriable'], - 'untribal': ['tribunal', 'turbinal', 'untribal'], - 'untriced': ['undirect', 'untriced'], - 'untried': ['intrude', 'turdine', 'untired', 'untried'], - 'untrig': ['ungirt', 'untrig'], - 'untrod': ['rotund', 'untrod'], - 'untropical': ['ponticular', 'untropical'], - 'untroubled': ['outblunder', 'untroubled'], - 'untrowed': ['undertow', 'untrowed'], - 'untruss': ['sturnus', 'untruss'], - 'untutored': ['outturned', 'untutored'], - 'unurn': ['unrun', 'unurn'], - 'unused': ['unsued', 'unused'], - 'unusurped': ['unpursued', 'unusurped'], - 'unusurping': ['unpursuing', 'unusurping'], - 'unvailable': ['invaluable', 'unvailable'], - 'unveering': ['unreeving', 'unveering'], - 'unveil': ['unevil', 'unlive', 'unveil'], - 'unveiled': ['unlevied', 'unveiled'], - 'unveined': ['unenvied', 'unveined'], - 'unvenerated': ['unenervated', 'unvenerated'], - 'unveniable': ['unenviable', 'unveniable'], - 'unveritable': ['unavertible', 'unveritable'], - 'unversed': ['unserved', 'unversed'], - 'unvessel': ['unvessel', 'usselven'], - 'unvest': ['unvest', 'venust'], - 'unvomited': ['unmotived', 'unvomited'], - 'unwagered': ['underwage', 'unwagered'], - 'unwan': ['unwan', 'wunna'], - 'unware': ['unware', 'wauner'], - 'unwarp': ['unwarp', 'unwrap'], - 'unwary': ['runway', 'unwary'], - 'unwavered': ['underwave', 'unwavered'], - 'unwept': ['unwept', 'upwent'], - 'unwon': ['unown', 'unwon'], - 'unwrap': ['unwarp', 'unwrap'], - 'unwrested': ['unstrewed', 'unwrested'], - 'unwronged': ['undergown', 'unwronged'], - 'unyoung': ['unyoung', 'youngun'], - 'unze': ['unze', 'zenu'], - 'up': ['pu', 'up'], - 'uparching': ['ungraphic', 'uparching'], - 'uparise': ['spuriae', 'uparise', 'upraise'], - 'uparna': ['purana', 'uparna'], - 'upas': ['apus', 'supa', 'upas'], - 'upblast': ['subplat', 'upblast'], - 'upblow': ['blowup', 'upblow'], - 'upbreak': ['breakup', 'upbreak'], - 'upbuild': ['buildup', 'upbuild'], - 'upcast': ['catsup', 'upcast'], - 'upcatch': ['catchup', 'upcatch'], - 'upclimb': ['plumbic', 'upclimb'], - 'upclose': ['culpose', 'ploceus', 'upclose'], - 'upcock': ['cockup', 'upcock'], - 'upcoil': ['oilcup', 'upcoil'], - 'upcourse': ['cupreous', 'upcourse'], - 'upcover': ['overcup', 'upcover'], - 'upcreep': ['prepuce', 'upcreep'], - 'upcurrent': ['puncturer', 'upcurrent'], - 'upcut': ['cutup', 'upcut'], - 'updo': ['doup', 'updo'], - 'updraw': ['updraw', 'upward'], - 'updry': ['prudy', 'purdy', 'updry'], - 'upeat': ['taupe', 'upeat'], - 'upflare': ['rapeful', 'upflare'], - 'upflower': ['powerful', 'upflower'], - 'upgale': ['plague', 'upgale'], - 'upget': ['getup', 'upget'], - 'upgirt': ['ripgut', 'upgirt'], - 'upgo': ['goup', 'ogpu', 'upgo'], - 'upgrade': ['guepard', 'upgrade'], - 'uphelm': ['phleum', 'uphelm'], - 'uphold': ['holdup', 'uphold'], - 'upholder': ['reuphold', 'upholder'], - 'upholsterer': ['reupholster', 'upholsterer'], - 'upla': ['paul', 'upla'], - 'upland': ['dunlap', 'upland'], - 'uplander': ['pendular', 'underlap', 'uplander'], - 'uplane': ['unpale', 'uplane'], - 'upleap': ['papule', 'upleap'], - 'uplift': ['tipful', 'uplift'], - 'uplifter': ['reuplift', 'uplifter'], - 'upline': ['lupine', 'unpile', 'upline'], - 'uplock': ['lockup', 'uplock'], - 'upon': ['noup', 'puno', 'upon'], - 'uppers': ['supper', 'uppers'], - 'uppish': ['hippus', 'uppish'], - 'upraise': ['spuriae', 'uparise', 'upraise'], - 'uprear': ['parure', 'uprear'], - 'uprein': ['purine', 'unripe', 'uprein'], - 'uprip': ['ripup', 'uprip'], - 'uprisal': ['parulis', 'spirula', 'uprisal'], - 'uprisement': ['episternum', 'uprisement'], - 'upriser': ['siruper', 'upriser'], - 'uprist': ['purist', 'spruit', 'uprist', 'upstir'], - 'uproad': ['podura', 'uproad'], - 'uproom': ['moorup', 'uproom'], - 'uprose': ['poseur', 'pouser', 'souper', 'uprose'], - 'upscale': ['capsule', 'specula', 'upscale'], - 'upseal': ['apulse', 'upseal'], - 'upsend': ['unsped', 'upsend'], - 'upset': ['setup', 'stupe', 'upset'], - 'upsettable': ['subpeltate', 'upsettable'], - 'upsetter': ['upsetter', 'upstreet'], - 'upshore': ['ephorus', 'orpheus', 'upshore'], - 'upshot': ['tophus', 'upshot'], - 'upshut': ['pushtu', 'upshut'], - 'upsilon': ['pulsion', 'unspoil', 'upsilon'], - 'upsit': ['puist', 'upsit'], - 'upslant': ['pulsant', 'upslant'], - 'upsmite': ['impetus', 'upsmite'], - 'upsoar': ['parous', 'upsoar'], - 'upstair': ['tapirus', 'upstair'], - 'upstand': ['dustpan', 'upstand'], - 'upstare': ['pasteur', 'pasture', 'upstare'], - 'upstater': ['stuprate', 'upstater'], - 'upsteal': ['pulsate', 'spatule', 'upsteal'], - 'upstem': ['septum', 'upstem'], - 'upstir': ['purist', 'spruit', 'uprist', 'upstir'], - 'upstraight': ['straightup', 'upstraight'], - 'upstreet': ['upsetter', 'upstreet'], - 'upstrive': ['spurtive', 'upstrive'], - 'upsun': ['sunup', 'upsun'], - 'upsway': ['upsway', 'upways'], - 'uptake': ['ketupa', 'uptake'], - 'uptend': ['pudent', 'uptend'], - 'uptilt': ['tiltup', 'uptilt'], - 'uptoss': ['tossup', 'uptoss'], - 'uptrace': ['capture', 'uptrace'], - 'uptrain': ['pintura', 'puritan', 'uptrain'], - 'uptree': ['repute', 'uptree'], - 'uptrend': ['prudent', 'prunted', 'uptrend'], - 'upturn': ['turnup', 'upturn'], - 'upward': ['updraw', 'upward'], - 'upwarp': ['upwarp', 'upwrap'], - 'upways': ['upsway', 'upways'], - 'upwent': ['unwept', 'upwent'], - 'upwind': ['upwind', 'windup'], - 'upwrap': ['upwarp', 'upwrap'], - 'ura': ['aru', 'rua', 'ura'], - 'uracil': ['curial', 'lauric', 'uracil', 'uralic'], - 'uraemic': ['maurice', 'uraemic'], - 'uraeus': ['aureus', 'uraeus'], - 'ural': ['alur', 'laur', 'lura', 'raul', 'ural'], - 'urali': ['rauli', 'urali', 'urial'], - 'uralian': ['lunaria', 'ulnaria', 'uralian'], - 'uralic': ['curial', 'lauric', 'uracil', 'uralic'], - 'uralite': ['laurite', 'uralite'], - 'uralitize': ['ritualize', 'uralitize'], - 'uramido': ['doarium', 'uramido'], - 'uramil': ['rimula', 'uramil'], - 'uramino': ['mainour', 'uramino'], - 'uran': ['raun', 'uran', 'urna'], - 'uranate': ['taurean', 'uranate'], - 'urania': ['anuria', 'urania'], - 'uranic': ['anuric', 'cinura', 'uranic'], - 'uranine': ['aneurin', 'uranine'], - 'uranism': ['surinam', 'uranism'], - 'uranite': ['ruinate', 'taurine', 'uranite', 'urinate'], - 'uranographist': ['guarantorship', 'uranographist'], - 'uranolite': ['outlinear', 'uranolite'], - 'uranoscope': ['oenocarpus', 'uranoscope'], - 'uranospinite': ['resupination', 'uranospinite'], - 'uranotil': ['rotulian', 'uranotil'], - 'uranous': ['anurous', 'uranous'], - 'uranyl': ['lunary', 'uranyl'], - 'uranylic': ['culinary', 'uranylic'], - 'urari': ['aurir', 'urari'], - 'urase': ['serau', 'urase'], - 'uratic': ['tauric', 'uratic', 'urtica'], - 'urazine': ['azurine', 'urazine'], - 'urban': ['buran', 'unbar', 'urban'], - 'urbane': ['eburna', 'unbare', 'unbear', 'urbane'], - 'urbanite': ['braunite', 'urbanite', 'urbinate'], - 'urbian': ['burian', 'urbian'], - 'urbification': ['rubification', 'urbification'], - 'urbify': ['rubify', 'urbify'], - 'urbinate': ['braunite', 'urbanite', 'urbinate'], - 'urceiform': ['eruciform', 'urceiform'], - 'urceole': ['urceole', 'urocele'], - 'urceolina': ['aleuronic', 'urceolina'], - 'urceolus': ['ulcerous', 'urceolus'], - 'urchin': ['unrich', 'urchin'], - 'urd': ['rud', 'urd'], - 'urde': ['duer', 'dure', 'rude', 'urde'], - 'urdee': ['redue', 'urdee'], - 'ure': ['rue', 'ure'], - 'ureal': ['alure', 'ureal'], - 'uredine': ['reindue', 'uredine'], - 'ureic': ['curie', 'ureic'], - 'uremia': ['aumrie', 'uremia'], - 'uremic': ['cerium', 'uremic'], - 'urena': ['urena', 'urnae'], - 'urent': ['enrut', 'tuner', 'urent'], - 'uresis': ['issuer', 'uresis'], - 'uretal': ['tulare', 'uretal'], - 'ureter': ['retrue', 'ureter'], - 'ureteropyelogram': ['pyeloureterogram', 'ureteropyelogram'], - 'urethan': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'], - 'urethrascope': ['heterocarpus', 'urethrascope'], - 'urethrocystitis': ['cystourethritis', 'urethrocystitis'], - 'urethylan': ['unearthly', 'urethylan'], - 'uretic': ['curite', 'teucri', 'uretic'], - 'urf': ['fur', 'urf'], - 'urge': ['grue', 'urge'], - 'urgent': ['gunter', 'gurnet', 'urgent'], - 'urger': ['regur', 'urger'], - 'uria': ['arui', 'uria'], - 'uriah': ['huari', 'uriah'], - 'urial': ['rauli', 'urali', 'urial'], - 'urian': ['aurin', 'urian'], - 'uric': ['cuir', 'uric'], - 'urinal': ['laurin', 'urinal'], - 'urinant': ['antirun', 'untrain', 'urinant'], - 'urinate': ['ruinate', 'taurine', 'uranite', 'urinate'], - 'urination': ['ruination', 'urination'], - 'urinator': ['ruinator', 'urinator'], - 'urine': ['inure', 'urine'], - 'urinogenitary': ['genitourinary', 'urinogenitary'], - 'urinous': ['ruinous', 'urinous'], - 'urinousness': ['ruinousness', 'urinousness'], - 'urite': ['urite', 'uteri'], - 'urlar': ['rural', 'urlar'], - 'urled': ['duler', 'urled'], - 'urling': ['ruling', 'urling'], - 'urman': ['muran', 'ruman', 'unarm', 'unram', 'urman'], - 'urn': ['run', 'urn'], - 'urna': ['raun', 'uran', 'urna'], - 'urnae': ['urena', 'urnae'], - 'urnal': ['lunar', 'ulnar', 'urnal'], - 'urnful': ['unfurl', 'urnful'], - 'urning': ['unring', 'urning'], - 'uro': ['our', 'uro'], - 'urocele': ['urceole', 'urocele'], - 'urodela': ['roulade', 'urodela'], - 'urodelan': ['unloader', 'urodelan'], - 'urogaster': ['surrogate', 'urogaster'], - 'urogenital': ['regulation', 'urogenital'], - 'uroglena': ['lagunero', 'organule', 'uroglena'], - 'urolithic': ['ulotrichi', 'urolithic'], - 'urometer': ['outremer', 'urometer'], - 'uronic': ['cuorin', 'uronic'], - 'uropsile': ['perilous', 'uropsile'], - 'uroseptic': ['crepitous', 'euproctis', 'uroseptic'], - 'urosomatic': ['mortacious', 'urosomatic'], - 'urosteon': ['outsnore', 'urosteon'], - 'urosternite': ['tenuiroster', 'urosternite'], - 'urosthenic': ['cetorhinus', 'urosthenic'], - 'urostyle': ['elytrous', 'urostyle'], - 'urs': ['rus', 'sur', 'urs'], - 'ursa': ['rusa', 'saur', 'sura', 'ursa', 'usar'], - 'ursal': ['larus', 'sural', 'ursal'], - 'ursidae': ['residua', 'ursidae'], - 'ursine': ['insure', 'rusine', 'ursine'], - 'ursone': ['souren', 'unsore', 'ursone'], - 'ursuk': ['kurus', 'ursuk'], - 'ursula': ['laurus', 'ursula'], - 'urtica': ['tauric', 'uratic', 'urtica'], - 'urticales': ['sterculia', 'urticales'], - 'urticant': ['taciturn', 'urticant'], - 'urticose': ['citreous', 'urticose'], - 'usability': ['suability', 'usability'], - 'usable': ['suable', 'usable'], - 'usager': ['sauger', 'usager'], - 'usance': ['uncase', 'usance'], - 'usar': ['rusa', 'saur', 'sura', 'ursa', 'usar'], - 'usara': ['arusa', 'saura', 'usara'], - 'use': ['sue', 'use'], - 'usent': ['unset', 'usent'], - 'user': ['ruse', 'suer', 'sure', 'user'], - 'ush': ['shu', 'ush'], - 'ushabti': ['habitus', 'ushabti'], - 'ushak': ['kusha', 'shaku', 'ushak'], - 'usher': ['shure', 'usher'], - 'usitate': ['situate', 'usitate'], - 'usnic': ['incus', 'usnic'], - 'usque': ['equus', 'usque'], - 'usselven': ['unvessel', 'usselven'], - 'ust': ['stu', 'ust'], - 'uster': ['serut', 'strue', 'turse', 'uster'], - 'ustion': ['outsin', 'ustion'], - 'ustorious': ['sutorious', 'ustorious'], - 'ustulina': ['lutianus', 'nautilus', 'ustulina'], - 'usucaption': ['uncaptious', 'usucaption'], - 'usure': ['eurus', 'usure'], - 'usurper': ['pursuer', 'usurper'], - 'ut': ['tu', 'ut'], - 'uta': ['tau', 'tua', 'uta'], - 'utas': ['saut', 'tasu', 'utas'], - 'utch': ['chut', 'tchu', 'utch'], - 'ute': ['tue', 'ute'], - 'uteri': ['urite', 'uteri'], - 'uterine': ['neurite', 'retinue', 'reunite', 'uterine'], - 'uterocervical': ['overcirculate', 'uterocervical'], - 'uterus': ['suture', 'uterus'], - 'utile': ['luite', 'utile'], - 'utilizable': ['latibulize', 'utilizable'], - 'utopian': ['opuntia', 'utopian'], - 'utopism': ['positum', 'utopism'], - 'utopist': ['outspit', 'utopist'], - 'utricular': ['turricula', 'utricular'], - 'utriculosaccular': ['sacculoutricular', 'utriculosaccular'], - 'utrum': ['murut', 'utrum'], - 'utterer': ['reutter', 'utterer'], - 'uva': ['uva', 'vau'], - 'uval': ['ulva', 'uval'], - 'uveal': ['uveal', 'value'], - 'uviol': ['uviol', 'vouli'], - 'vacate': ['cavate', 'caveat', 'vacate'], - 'vacation': ['octavian', 'octavina', 'vacation'], - 'vacationer': ['acervation', 'vacationer'], - 'vaccinal': ['clavacin', 'vaccinal'], - 'vacillate': ['laticlave', 'vacillate'], - 'vacillation': ['cavillation', 'vacillation'], - 'vacuolate': ['autoclave', 'vacuolate'], - 'vade': ['dave', 'deva', 'vade', 'veda'], - 'vady': ['davy', 'vady'], - 'vage': ['gave', 'vage', 'vega'], - 'vagile': ['glaive', 'vagile'], - 'vaginant': ['navigant', 'vaginant'], - 'vaginate': ['navigate', 'vaginate'], - 'vaginoabdominal': ['abdominovaginal', 'vaginoabdominal'], - 'vaginoperineal': ['perineovaginal', 'vaginoperineal'], - 'vaginovesical': ['vaginovesical', 'vesicovaginal'], - 'vaguity': ['gavyuti', 'vaguity'], - 'vai': ['iva', 'vai', 'via'], - 'vail': ['vail', 'vali', 'vial', 'vila'], - 'vain': ['ivan', 'vain', 'vina'], - 'vair': ['ravi', 'riva', 'vair', 'vari', 'vira'], - 'vakass': ['kavass', 'vakass'], - 'vale': ['lave', 'vale', 'veal', 'vela'], - 'valence': ['enclave', 'levance', 'valence'], - 'valencia': ['valencia', 'valiance'], - 'valent': ['levant', 'valent'], - 'valentine': ['levantine', 'valentine'], - 'valeria': ['reavail', 'valeria'], - 'valeriana': ['laverania', 'valeriana'], - 'valeric': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'], - 'valerie': ['realive', 'valerie'], - 'valerin': ['elinvar', 'ravelin', 'reanvil', 'valerin'], - 'valerone': ['overlean', 'valerone'], - 'valeryl': ['ravelly', 'valeryl'], - 'valeur': ['valeur', 'valuer'], - 'vali': ['vail', 'vali', 'vial', 'vila'], - 'valiance': ['valencia', 'valiance'], - 'valiant': ['latvian', 'valiant'], - 'valine': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'], - 'vallar': ['larval', 'vallar'], - 'vallidom': ['vallidom', 'villadom'], - 'vallota': ['lavolta', 'vallota'], - 'valonia': ['novalia', 'valonia'], - 'valor': ['valor', 'volar'], - 'valsa': ['salva', 'valsa', 'vasal'], - 'valse': ['salve', 'selva', 'slave', 'valse'], - 'value': ['uveal', 'value'], - 'valuer': ['valeur', 'valuer'], - 'vamper': ['revamp', 'vamper'], - 'vane': ['evan', 'nave', 'vane'], - 'vaned': ['daven', 'vaned'], - 'vangee': ['avenge', 'geneva', 'vangee'], - 'vangeli': ['leaving', 'vangeli'], - 'vanir': ['invar', 'ravin', 'vanir'], - 'vanisher': ['enravish', 'ravenish', 'vanisher'], - 'vansire': ['servian', 'vansire'], - 'vapid': ['pavid', 'vapid'], - 'vapidity': ['pavidity', 'vapidity'], - 'vaporarium': ['parovarium', 'vaporarium'], - 'vara': ['avar', 'vara'], - 'varan': ['navar', 'varan', 'varna'], - 'vare': ['aver', 'rave', 'vare', 'vera'], - 'varec': ['carve', 'crave', 'varec'], - 'vari': ['ravi', 'riva', 'vair', 'vari', 'vira'], - 'variate': ['variate', 'vateria'], - 'varices': ['varices', 'viscera'], - 'varicula': ['avicular', 'varicula'], - 'variegator': ['arrogative', 'variegator'], - 'varier': ['arrive', 'varier'], - 'varietal': ['lievaart', 'varietal'], - 'variola': ['ovarial', 'variola'], - 'various': ['saviour', 'various'], - 'varlet': ['travel', 'varlet'], - 'varletry': ['varletry', 'veratryl'], - 'varna': ['navar', 'varan', 'varna'], - 'varnish': ['shirvan', 'varnish'], - 'varnisher': ['revarnish', 'varnisher'], - 'varsha': ['avshar', 'varsha'], - 'vasal': ['salva', 'valsa', 'vasal'], - 'vase': ['aves', 'save', 'vase'], - 'vasoepididymostomy': ['epididymovasostomy', 'vasoepididymostomy'], - 'vat': ['tav', 'vat'], - 'vateria': ['variate', 'vateria'], - 'vaticide': ['cavitied', 'vaticide'], - 'vaticinate': ['inactivate', 'vaticinate'], - 'vaticination': ['inactivation', 'vaticination'], - 'vatter': ['tavert', 'vatter'], - 'vau': ['uva', 'vau'], - 'vaudois': ['avidous', 'vaudois'], - 'veal': ['lave', 'vale', 'veal', 'vela'], - 'vealer': ['laveer', 'leaver', 'reveal', 'vealer'], - 'vealiness': ['aliveness', 'vealiness'], - 'vealy': ['leavy', 'vealy'], - 'vector': ['covert', 'vector'], - 'veda': ['dave', 'deva', 'vade', 'veda'], - 'vedaic': ['advice', 'vedaic'], - 'vedaism': ['adevism', 'vedaism'], - 'vedana': ['nevada', 'vedana', 'venada'], - 'vedanta': ['vedanta', 'vetanda'], - 'vedantism': ['adventism', 'vedantism'], - 'vedantist': ['adventist', 'vedantist'], - 'vedist': ['divest', 'vedist'], - 'vedro': ['dover', 'drove', 'vedro'], - 'vee': ['eve', 'vee'], - 'veen': ['even', 'neve', 'veen'], - 'veer': ['ever', 'reve', 'veer'], - 'veery': ['every', 'veery'], - 'vega': ['gave', 'vage', 'vega'], - 'vegasite': ['estivage', 'vegasite'], - 'vegetarian': ['renavigate', 'vegetarian'], - 'vei': ['vei', 'vie'], - 'veil': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'], - 'veiler': ['levier', 'relive', 'reveil', 'revile', 'veiler'], - 'veiltail': ['illative', 'veiltail'], - 'vein': ['vein', 'vine'], - 'veinal': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'], - 'veined': ['endive', 'envied', 'veined'], - 'veiner': ['enrive', 'envier', 'veiner', 'verine'], - 'veinless': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'], - 'veinlet': ['veinlet', 'vinelet'], - 'veinous': ['envious', 'niveous', 'veinous'], - 'veinstone': ['veinstone', 'vonsenite'], - 'veinwise': ['veinwise', 'vinewise'], - 'vela': ['lave', 'vale', 'veal', 'vela'], - 'velar': ['arvel', 'larve', 'laver', 'ravel', 'velar'], - 'velaric': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'], - 'velation': ['olivetan', 'velation'], - 'velic': ['clive', 'velic'], - 'veliform': ['overfilm', 'veliform'], - 'velitation': ['levitation', 'tonalitive', 'velitation'], - 'velo': ['levo', 'love', 'velo', 'vole'], - 'velte': ['elvet', 'velte'], - 'venada': ['nevada', 'vedana', 'venada'], - 'venal': ['elvan', 'navel', 'venal'], - 'venality': ['natively', 'venality'], - 'venatic': ['catvine', 'venatic'], - 'venation': ['innovate', 'venation'], - 'venator': ['rotanev', 'venator'], - 'venatorial': ['venatorial', 'venoatrial'], - 'vendace': ['devance', 'vendace'], - 'vender': ['revend', 'vender'], - 'veneer': ['evener', 'veneer'], - 'veneerer': ['reveneer', 'veneerer'], - 'veneralia': ['ravenelia', 'veneralia'], - 'venerant': ['revenant', 'venerant'], - 'venerate': ['enervate', 'venerate'], - 'veneration': ['enervation', 'veneration'], - 'venerative': ['enervative', 'venerative'], - 'venerator': ['enervator', 'renovater', 'venerator'], - 'venerer': ['renerve', 'venerer'], - 'veneres': ['sevener', 'veneres'], - 'veneti': ['veneti', 'venite'], - 'venetian': ['aventine', 'venetian'], - 'venial': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'], - 'venice': ['cevine', 'evince', 'venice'], - 'venie': ['nieve', 'venie'], - 'venite': ['veneti', 'venite'], - 'venoatrial': ['venatorial', 'venoatrial'], - 'venom': ['novem', 'venom'], - 'venosinal': ['slovenian', 'venosinal'], - 'venter': ['revent', 'venter'], - 'ventrad': ['ventrad', 'verdant'], - 'ventricose': ['convertise', 'ventricose'], - 'ventrine': ['inventer', 'reinvent', 'ventrine', 'vintener'], - 'ventrodorsad': ['dorsoventrad', 'ventrodorsad'], - 'ventrodorsal': ['dorsoventral', 'ventrodorsal'], - 'ventrodorsally': ['dorsoventrally', 'ventrodorsally'], - 'ventrolateral': ['lateroventral', 'ventrolateral'], - 'ventromedial': ['medioventral', 'ventromedial'], - 'ventromesal': ['mesoventral', 'ventromesal'], - 'venular': ['unravel', 'venular'], - 'venus': ['nevus', 'venus'], - 'venust': ['unvest', 'venust'], - 'venutian': ['unnative', 'venutian'], - 'vera': ['aver', 'rave', 'vare', 'vera'], - 'veraciousness': ['oversauciness', 'veraciousness'], - 'veratroidine': ['rederivation', 'veratroidine'], - 'veratrole': ['relevator', 'revelator', 'veratrole'], - 'veratryl': ['varletry', 'veratryl'], - 'verbal': ['barvel', 'blaver', 'verbal'], - 'verbality': ['verbality', 'veritably'], - 'verbatim': ['ambivert', 'verbatim'], - 'verbena': ['enbrave', 'verbena'], - 'verberate': ['verberate', 'vertebrae'], - 'verbose': ['observe', 'obverse', 'verbose'], - 'verbosely': ['obversely', 'verbosely'], - 'verdant': ['ventrad', 'verdant'], - 'verdea': ['evader', 'verdea'], - 'verdelho': ['overheld', 'verdelho'], - 'verdin': ['driven', 'nervid', 'verdin'], - 'verditer': ['diverter', 'redivert', 'verditer'], - 'vergi': ['giver', 'vergi'], - 'veri': ['rive', 'veri', 'vier', 'vire'], - 'veridical': ['larvicide', 'veridical'], - 'veridicous': ['recidivous', 'veridicous'], - 'verily': ['livery', 'verily'], - 'verine': ['enrive', 'envier', 'veiner', 'verine'], - 'verism': ['verism', 'vermis'], - 'verist': ['stiver', 'strive', 'verist'], - 'veritable': ['avertible', 'veritable'], - 'veritably': ['verbality', 'veritably'], - 'vermian': ['minerva', 'vermian'], - 'verminal': ['minerval', 'verminal'], - 'vermis': ['verism', 'vermis'], - 'vernacularist': ['intervascular', 'vernacularist'], - 'vernal': ['nerval', 'vernal'], - 'vernation': ['nervation', 'vernation'], - 'vernicose': ['coversine', 'vernicose'], - 'vernine': ['innerve', 'nervine', 'vernine'], - 'veronese': ['overseen', 'veronese'], - 'veronica': ['corvinae', 'veronica'], - 'verpa': ['paver', 'verpa'], - 'verre': ['rever', 'verre'], - 'verrucous': ['recurvous', 'verrucous'], - 'verruga': ['gravure', 'verruga'], - 'versable': ['beslaver', 'servable', 'versable'], - 'versal': ['salver', 'serval', 'slaver', 'versal'], - 'versant': ['servant', 'versant'], - 'versate': ['evestar', 'versate'], - 'versation': ['overstain', 'servation', 'versation'], - 'verse': ['serve', 'sever', 'verse'], - 'verser': ['revers', 'server', 'verser'], - 'verset': ['revest', 'servet', 'sterve', 'verset', 'vester'], - 'versicule': ['reclusive', 'versicule'], - 'versine': ['inverse', 'versine'], - 'versioner': ['reversion', 'versioner'], - 'versionist': ['overinsist', 'versionist'], - 'verso': ['servo', 'verso'], - 'versta': ['starve', 'staver', 'strave', 'tavers', 'versta'], - 'vertebrae': ['verberate', 'vertebrae'], - 'vertebrocostal': ['costovertebral', 'vertebrocostal'], - 'vertebrosacral': ['sacrovertebral', 'vertebrosacral'], - 'vertebrosternal': ['sternovertebral', 'vertebrosternal'], - 'vertiginate': ['integrative', 'vertiginate', 'vinaigrette'], - 'vesicant': ['cistvaen', 'vesicant'], - 'vesicoabdominal': ['abdominovesical', 'vesicoabdominal'], - 'vesicocervical': ['cervicovesical', 'vesicocervical'], - 'vesicointestinal': ['intestinovesical', 'vesicointestinal'], - 'vesicorectal': ['rectovesical', 'vesicorectal'], - 'vesicovaginal': ['vaginovesical', 'vesicovaginal'], - 'vespa': ['spave', 'vespa'], - 'vespertine': ['presentive', 'pretensive', 'vespertine'], - 'vespine': ['pensive', 'vespine'], - 'vesta': ['stave', 'vesta'], - 'vestalia': ['salivate', 'vestalia'], - 'vestee': ['steeve', 'vestee'], - 'vester': ['revest', 'servet', 'sterve', 'verset', 'vester'], - 'vestibula': ['sublative', 'vestibula'], - 'veta': ['tave', 'veta'], - 'vetanda': ['vedanta', 'vetanda'], - 'veteran': ['nervate', 'veteran'], - 'veto': ['veto', 'voet', 'vote'], - 'vetoer': ['revote', 'vetoer'], - 'via': ['iva', 'vai', 'via'], - 'vial': ['vail', 'vali', 'vial', 'vila'], - 'vialful': ['fluavil', 'fluvial', 'vialful'], - 'viand': ['divan', 'viand'], - 'viander': ['invader', 'ravined', 'viander'], - 'viatic': ['avitic', 'viatic'], - 'viatica': ['aviatic', 'viatica'], - 'vibrate': ['vibrate', 'vrbaite'], - 'vicar': ['vicar', 'vraic'], - 'vice': ['cive', 'vice'], - 'vicegeral': ['vicegeral', 'viceregal'], - 'viceregal': ['vicegeral', 'viceregal'], - 'victoriate': ['recitativo', 'victoriate'], - 'victrola': ['victrola', 'vortical'], - 'victualer': ['lucrative', 'revictual', 'victualer'], - 'vidonia': ['ovidian', 'vidonia'], - 'viduinae': ['induviae', 'viduinae'], - 'viduine': ['univied', 'viduine'], - 'vie': ['vei', 'vie'], - 'vienna': ['avenin', 'vienna'], - 'vier': ['rive', 'veri', 'vier', 'vire'], - 'vierling': ['reviling', 'vierling'], - 'view': ['view', 'wive'], - 'viewer': ['review', 'viewer'], - 'vigilante': ['genitival', 'vigilante'], - 'vigor': ['vigor', 'virgo'], - 'vila': ['vail', 'vali', 'vial', 'vila'], - 'vile': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'], - 'vilehearted': ['evilhearted', 'vilehearted'], - 'vilely': ['evilly', 'lively', 'vilely'], - 'vileness': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'], - 'villadom': ['vallidom', 'villadom'], - 'villeiness': ['liveliness', 'villeiness'], - 'villous': ['ovillus', 'villous'], - 'vimana': ['maniva', 'vimana'], - 'vina': ['ivan', 'vain', 'vina'], - 'vinaigrette': ['integrative', 'vertiginate', 'vinaigrette'], - 'vinaigrous': ['vinaigrous', 'viraginous'], - 'vinal': ['alvin', 'anvil', 'nival', 'vinal'], - 'vinalia': ['lavinia', 'vinalia'], - 'vinata': ['avanti', 'vinata'], - 'vinculate': ['vinculate', 'vulcanite'], - 'vine': ['vein', 'vine'], - 'vinea': ['avine', 'naive', 'vinea'], - 'vineal': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'], - 'vineatic': ['antivice', 'inactive', 'vineatic'], - 'vinegarist': ['gainstrive', 'vinegarist'], - 'vineless': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'], - 'vinelet': ['veinlet', 'vinelet'], - 'viner': ['riven', 'viner'], - 'vinewise': ['veinwise', 'vinewise'], - 'vinosity': ['nivosity', 'vinosity'], - 'vintener': ['inventer', 'reinvent', 'ventrine', 'vintener'], - 'vintneress': ['inventress', 'vintneress'], - 'viola': ['oliva', 'viola'], - 'violability': ['obliviality', 'violability'], - 'violaceous': ['olivaceous', 'violaceous'], - 'violanin': ['livonian', 'violanin'], - 'violational': ['avolitional', 'violational'], - 'violer': ['oliver', 'violer', 'virole'], - 'violescent': ['olivescent', 'violescent'], - 'violet': ['olivet', 'violet'], - 'violette': ['olivette', 'violette'], - 'violine': ['olivine', 'violine'], - 'vipera': ['pavier', 'vipera'], - 'viperess': ['pressive', 'viperess'], - 'viperian': ['viperian', 'viperina'], - 'viperina': ['viperian', 'viperina'], - 'viperous': ['pervious', 'previous', 'viperous'], - 'viperously': ['perviously', 'previously', 'viperously'], - 'viperousness': ['perviousness', 'previousness', 'viperousness'], - 'vira': ['ravi', 'riva', 'vair', 'vari', 'vira'], - 'viraginian': ['irvingiana', 'viraginian'], - 'viraginous': ['vinaigrous', 'viraginous'], - 'viral': ['rival', 'viral'], - 'virales': ['revisal', 'virales'], - 'vire': ['rive', 'veri', 'vier', 'vire'], - 'virent': ['invert', 'virent'], - 'virgate': ['virgate', 'vitrage'], - 'virgin': ['irving', 'riving', 'virgin'], - 'virginly': ['rivingly', 'virginly'], - 'virgo': ['vigor', 'virgo'], - 'virile': ['livier', 'virile'], - 'virole': ['oliver', 'violer', 'virole'], - 'virose': ['rivose', 'virose'], - 'virtual': ['virtual', 'vitular'], - 'virtuose': ['virtuose', 'vitreous'], - 'virulence': ['cervuline', 'virulence'], - 'visa': ['avis', 'siva', 'visa'], - 'viscera': ['varices', 'viscera'], - 'visceration': ['insectivora', 'visceration'], - 'visceroparietal': ['parietovisceral', 'visceroparietal'], - 'visceropleural': ['pleurovisceral', 'visceropleural'], - 'viscometer': ['semivector', 'viscometer'], - 'viscontal': ['viscontal', 'volcanist'], - 'vishal': ['lavish', 'vishal'], - 'visioner': ['revision', 'visioner'], - 'visit': ['visit', 'vitis'], - 'visitant': ['nativist', 'visitant'], - 'visitee': ['evisite', 'visitee'], - 'visiter': ['revisit', 'visiter'], - 'visitor': ['ivorist', 'visitor'], - 'vistal': ['vistal', 'vitals'], - 'visto': ['ovist', 'visto'], - 'vitals': ['vistal', 'vitals'], - 'vitis': ['visit', 'vitis'], - 'vitochemical': ['chemicovital', 'vitochemical'], - 'vitrage': ['virgate', 'vitrage'], - 'vitrail': ['trivial', 'vitrail'], - 'vitrailist': ['trivialist', 'vitrailist'], - 'vitrain': ['vitrain', 'vitrina'], - 'vitrean': ['avertin', 'vitrean'], - 'vitreous': ['virtuose', 'vitreous'], - 'vitrina': ['vitrain', 'vitrina'], - 'vitrine': ['inviter', 'vitrine'], - 'vitrophyric': ['thyroprivic', 'vitrophyric'], - 'vitular': ['virtual', 'vitular'], - 'vituperate': ['reputative', 'vituperate'], - 'vlei': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'], - 'vocaller': ['overcall', 'vocaller'], - 'vocate': ['avocet', 'octave', 'vocate'], - 'voet': ['veto', 'voet', 'vote'], - 'voeten': ['voeten', 'voteen'], - 'vogue': ['vogue', 'vouge'], - 'voided': ['devoid', 'voided'], - 'voider': ['devoir', 'voider'], - 'voidless': ['dissolve', 'voidless'], - 'voile': ['olive', 'ovile', 'voile'], - 'volable': ['lovable', 'volable'], - 'volage': ['lovage', 'volage'], - 'volar': ['valor', 'volar'], - 'volata': ['tavola', 'volata'], - 'volatic': ['volatic', 'voltaic'], - 'volcae': ['alcove', 'coeval', 'volcae'], - 'volcanist': ['viscontal', 'volcanist'], - 'vole': ['levo', 'love', 'velo', 'vole'], - 'volery': ['overly', 'volery'], - 'volitate': ['volitate', 'voltaite'], - 'volley': ['lovely', 'volley'], - 'volscian': ['slavonic', 'volscian'], - 'volta': ['volta', 'votal'], - 'voltaic': ['volatic', 'voltaic'], - 'voltaite': ['volitate', 'voltaite'], - 'volucrine': ['involucre', 'volucrine'], - 'volunteerism': ['multinervose', 'volunteerism'], - 'vomer': ['mover', 'vomer'], - 'vomiter': ['revomit', 'vomiter'], - 'vonsenite': ['veinstone', 'vonsenite'], - 'vortical': ['victrola', 'vortical'], - 'votal': ['volta', 'votal'], - 'votary': ['travoy', 'votary'], - 'vote': ['veto', 'voet', 'vote'], - 'voteen': ['voeten', 'voteen'], - 'voter': ['overt', 'rovet', 'torve', 'trove', 'voter'], - 'vouge': ['vogue', 'vouge'], - 'vouli': ['uviol', 'vouli'], - 'vowed': ['devow', 'vowed'], - 'vowel': ['vowel', 'wolve'], - 'vraic': ['vicar', 'vraic'], - 'vrbaite': ['vibrate', 'vrbaite'], - 'vulcanite': ['vinculate', 'vulcanite'], - 'vulnerose': ['nervulose', 'unresolve', 'vulnerose'], - 'vulpic': ['pulvic', 'vulpic'], - 'vulpine': ['pluvine', 'vulpine'], - 'wa': ['aw', 'wa'], - 'waag': ['awag', 'waag'], - 'waasi': ['isawa', 'waasi'], - 'wab': ['baw', 'wab'], - 'wabi': ['biwa', 'wabi'], - 'wabster': ['bestraw', 'wabster'], - 'wac': ['caw', 'wac'], - 'wachna': ['chawan', 'chwana', 'wachna'], - 'wack': ['cawk', 'wack'], - 'wacker': ['awreck', 'wacker'], - 'wacky': ['cawky', 'wacky'], - 'wad': ['awd', 'daw', 'wad'], - 'wadder': ['edward', 'wadder', 'warded'], - 'waddler': ['dawdler', 'waddler'], - 'waddling': ['dawdling', 'waddling'], - 'waddlingly': ['dawdlingly', 'waddlingly'], - 'waddy': ['dawdy', 'waddy'], - 'wadna': ['adawn', 'wadna'], - 'wadset': ['wadset', 'wasted'], - 'wae': ['awe', 'wae', 'wea'], - 'waeg': ['waeg', 'wage', 'wega'], - 'waer': ['waer', 'ware', 'wear'], - 'waesome': ['awesome', 'waesome'], - 'wag': ['gaw', 'wag'], - 'wage': ['waeg', 'wage', 'wega'], - 'wagerer': ['rewager', 'wagerer'], - 'wages': ['swage', 'wages'], - 'waggel': ['waggel', 'waggle'], - 'waggle': ['waggel', 'waggle'], - 'wagnerite': ['wagnerite', 'winterage'], - 'wagon': ['gowan', 'wagon', 'wonga'], - 'wah': ['haw', 'hwa', 'wah', 'wha'], - 'wahehe': ['heehaw', 'wahehe'], - 'wail': ['wail', 'wali'], - 'wailer': ['lawrie', 'wailer'], - 'wain': ['awin', 'wain'], - 'wainer': ['newari', 'wainer'], - 'wairsh': ['rawish', 'wairsh', 'warish'], - 'waist': ['swati', 'waist'], - 'waister': ['swertia', 'waister'], - 'waiterage': ['garewaite', 'waiterage'], - 'waitress': ['starwise', 'waitress'], - 'waiwai': ['iwaiwa', 'waiwai'], - 'wake': ['wake', 'weak', 'weka'], - 'wakener': ['rewaken', 'wakener'], - 'waker': ['waker', 'wreak'], - 'wakes': ['askew', 'wakes'], - 'wale': ['wale', 'weal'], - 'waled': ['dwale', 'waled', 'weald'], - 'waler': ['lerwa', 'waler'], - 'wali': ['wail', 'wali'], - 'waling': ['lawing', 'waling'], - 'walk': ['lawk', 'walk'], - 'walkout': ['outwalk', 'walkout'], - 'walkover': ['overwalk', 'walkover'], - 'walkside': ['sidewalk', 'walkside'], - 'waller': ['rewall', 'waller'], - 'wallet': ['wallet', 'wellat'], - 'wallhick': ['hickwall', 'wallhick'], - 'walloper': ['preallow', 'walloper'], - 'wallower': ['rewallow', 'wallower'], - 'walsh': ['shawl', 'walsh'], - 'walt': ['twal', 'walt'], - 'walter': ['lawter', 'walter'], - 'wame': ['wame', 'weam'], - 'wamp': ['mawp', 'wamp'], - 'wan': ['awn', 'naw', 'wan'], - 'wand': ['dawn', 'wand'], - 'wander': ['andrew', 'redawn', 'wander', 'warden'], - 'wandle': ['delawn', 'lawned', 'wandle'], - 'wandlike': ['dawnlike', 'wandlike'], - 'wandy': ['dawny', 'wandy'], - 'wane': ['anew', 'wane', 'wean'], - 'waned': ['awned', 'dewan', 'waned'], - 'wang': ['gawn', 'gnaw', 'wang'], - 'wanghee': ['wanghee', 'whangee'], - 'wangler': ['wangler', 'wrangle'], - 'waning': ['awning', 'waning'], - 'wankle': ['knawel', 'wankle'], - 'wanly': ['lawny', 'wanly'], - 'want': ['nawt', 'tawn', 'want'], - 'wanty': ['tawny', 'wanty'], - 'wany': ['awny', 'wany', 'yawn'], - 'wap': ['paw', 'wap'], - 'war': ['raw', 'war'], - 'warble': ['bawler', 'brelaw', 'rebawl', 'warble'], - 'warbler': ['brawler', 'warbler'], - 'warbling': ['brawling', 'warbling'], - 'warblingly': ['brawlingly', 'warblingly'], - 'warbly': ['brawly', 'byrlaw', 'warbly'], - 'ward': ['draw', 'ward'], - 'wardable': ['drawable', 'wardable'], - 'warded': ['edward', 'wadder', 'warded'], - 'warden': ['andrew', 'redawn', 'wander', 'warden'], - 'warder': ['drawer', 'redraw', 'reward', 'warder'], - 'warderer': ['redrawer', 'rewarder', 'warderer'], - 'warding': ['drawing', 'ginward', 'warding'], - 'wardman': ['manward', 'wardman'], - 'wardmote': ['damewort', 'wardmote'], - 'wardrobe': ['drawbore', 'wardrobe'], - 'wardroom': ['roomward', 'wardroom'], - 'wardship': ['shipward', 'wardship'], - 'wardsman': ['manwards', 'wardsman'], - 'ware': ['waer', 'ware', 'wear'], - 'warehouse': ['housewear', 'warehouse'], - 'warf': ['warf', 'wraf'], - 'warish': ['rawish', 'wairsh', 'warish'], - 'warlock': ['lacwork', 'warlock'], - 'warmed': ['meward', 'warmed'], - 'warmer': ['rewarm', 'warmer'], - 'warmhouse': ['housewarm', 'warmhouse'], - 'warmish': ['warmish', 'wishram'], - 'warn': ['warn', 'wran'], - 'warnel': ['lawner', 'warnel'], - 'warner': ['rewarn', 'warner', 'warren'], - 'warp': ['warp', 'wrap'], - 'warper': ['prewar', 'rewrap', 'warper'], - 'warree': ['rewear', 'warree', 'wearer'], - 'warren': ['rewarn', 'warner', 'warren'], - 'warri': ['warri', 'wirra'], - 'warse': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'], - 'warsel': ['swaler', 'warsel', 'warsle'], - 'warsle': ['swaler', 'warsel', 'warsle'], - 'warst': ['straw', 'swart', 'warst'], - 'warth': ['thraw', 'warth', 'whart', 'wrath'], - 'warua': ['warua', 'waura'], - 'warve': ['warve', 'waver'], - 'wary': ['awry', 'wary'], - 'was': ['saw', 'swa', 'was'], - 'wasel': ['swale', 'sweal', 'wasel'], - 'wash': ['shaw', 'wash'], - 'washen': ['washen', 'whenas'], - 'washer': ['hawser', 'rewash', 'washer'], - 'washington': ['nowanights', 'washington'], - 'washland': ['landwash', 'washland'], - 'washoan': ['shawano', 'washoan'], - 'washout': ['outwash', 'washout'], - 'washy': ['shawy', 'washy'], - 'wasnt': ['stawn', 'wasnt'], - 'wasp': ['swap', 'wasp'], - 'waspily': ['slipway', 'waspily'], - 'wast': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'], - 'waste': ['awest', 'sweat', 'tawse', 'waste'], - 'wasted': ['wadset', 'wasted'], - 'wasteful': ['sweatful', 'wasteful'], - 'wasteless': ['sweatless', 'wasteless'], - 'wasteproof': ['sweatproof', 'wasteproof'], - 'wastrel': ['wastrel', 'wrastle'], - 'wat': ['taw', 'twa', 'wat'], - 'watchdog': ['dogwatch', 'watchdog'], - 'watchout': ['outwatch', 'watchout'], - 'water': ['tawer', 'water', 'wreat'], - 'waterbrain': ['brainwater', 'waterbrain'], - 'watered': ['dewater', 'tarweed', 'watered'], - 'waterer': ['rewater', 'waterer'], - 'waterflood': ['floodwater', 'toadflower', 'waterflood'], - 'waterhead': ['headwater', 'waterhead'], - 'wateriness': ['earwitness', 'wateriness'], - 'waterlog': ['galewort', 'waterlog'], - 'watershed': ['drawsheet', 'watershed'], - 'watery': ['tawery', 'watery'], - 'wath': ['thaw', 'wath', 'what'], - 'watt': ['twat', 'watt'], - 'wauf': ['awfu', 'wauf'], - 'wauner': ['unware', 'wauner'], - 'waura': ['warua', 'waura'], - 'waver': ['warve', 'waver'], - 'waxer': ['rewax', 'waxer'], - 'way': ['way', 'yaw'], - 'wayback': ['backway', 'wayback'], - 'waygang': ['gangway', 'waygang'], - 'waygate': ['gateway', 'getaway', 'waygate'], - 'wayman': ['manway', 'wayman'], - 'ways': ['sway', 'ways', 'yaws'], - 'wayside': ['sideway', 'wayside'], - 'wea': ['awe', 'wae', 'wea'], - 'weak': ['wake', 'weak', 'weka'], - 'weakener': ['reweaken', 'weakener'], - 'weakliness': ['weakliness', 'weaselskin'], - 'weal': ['wale', 'weal'], - 'weald': ['dwale', 'waled', 'weald'], - 'weam': ['wame', 'weam'], - 'wean': ['anew', 'wane', 'wean'], - 'weanel': ['leewan', 'weanel'], - 'wear': ['waer', 'ware', 'wear'], - 'wearer': ['rewear', 'warree', 'wearer'], - 'weasand': ['sandawe', 'weasand'], - 'weaselskin': ['weakliness', 'weaselskin'], - 'weather': ['weather', 'whereat', 'wreathe'], - 'weathered': ['heartweed', 'weathered'], - 'weaver': ['rewave', 'weaver'], - 'webster': ['bestrew', 'webster'], - 'wed': ['dew', 'wed'], - 'wede': ['wede', 'weed'], - 'wedge': ['gweed', 'wedge'], - 'wedger': ['edgrew', 'wedger'], - 'wedset': ['stewed', 'wedset'], - 'wee': ['ewe', 'wee'], - 'weed': ['wede', 'weed'], - 'weedhook': ['hookweed', 'weedhook'], - 'weedy': ['dewey', 'weedy'], - 'ween': ['ween', 'wene'], - 'weeps': ['sweep', 'weeps'], - 'weet': ['twee', 'weet'], - 'wega': ['waeg', 'wage', 'wega'], - 'wegotism': ['twigsome', 'wegotism'], - 'weigher': ['reweigh', 'weigher'], - 'weir': ['weir', 'weri', 'wire'], - 'weirangle': ['weirangle', 'wierangle'], - 'weird': ['weird', 'wired', 'wride', 'wried'], - 'weka': ['wake', 'weak', 'weka'], - 'weld': ['lewd', 'weld'], - 'weldable': ['ballweed', 'weldable'], - 'welder': ['reweld', 'welder'], - 'weldor': ['lowder', 'weldor', 'wordle'], - 'welf': ['flew', 'welf'], - 'welkin': ['welkin', 'winkel', 'winkle'], - 'well': ['llew', 'well'], - 'wellat': ['wallet', 'wellat'], - 'wels': ['slew', 'wels'], - 'welshry': ['shrewly', 'welshry'], - 'welting': ['twingle', 'welting', 'winglet'], - 'wem': ['mew', 'wem'], - 'wen': ['new', 'wen'], - 'wende': ['endew', 'wende'], - 'wendi': ['dwine', 'edwin', 'wendi', 'widen', 'wined'], - 'wene': ['ween', 'wene'], - 'went': ['newt', 'went'], - 'were': ['ewer', 'were'], - 'weri': ['weir', 'weri', 'wire'], - 'werther': ['werther', 'wherret'], - 'wes': ['sew', 'wes'], - 'weskit': ['weskit', 'wisket'], - 'west': ['stew', 'west'], - 'weste': ['sweet', 'weste'], - 'westering': ['swingtree', 'westering'], - 'westy': ['stewy', 'westy'], - 'wet': ['tew', 'wet'], - 'weta': ['tewa', 'twae', 'weta'], - 'wetly': ['tewly', 'wetly'], - 'wey': ['wey', 'wye', 'yew'], - 'wha': ['haw', 'hwa', 'wah', 'wha'], - 'whack': ['chawk', 'whack'], - 'whale': ['whale', 'wheal'], - 'wham': ['hawm', 'wham'], - 'whame': ['whame', 'wheam'], - 'whangee': ['wanghee', 'whangee'], - 'whare': ['hawer', 'whare'], - 'whart': ['thraw', 'warth', 'whart', 'wrath'], - 'whase': ['hawse', 'shewa', 'whase'], - 'what': ['thaw', 'wath', 'what'], - 'whatreck': ['thwacker', 'whatreck'], - 'whats': ['swath', 'whats'], - 'wheal': ['whale', 'wheal'], - 'wheam': ['whame', 'wheam'], - 'wheat': ['awhet', 'wheat'], - 'wheatear': ['aweather', 'wheatear'], - 'wheedle': ['wheedle', 'wheeled'], - 'wheel': ['hewel', 'wheel'], - 'wheeled': ['wheedle', 'wheeled'], - 'wheelroad': ['rowelhead', 'wheelroad'], - 'wheer': ['hewer', 'wheer', 'where'], - 'whein': ['whein', 'whine'], - 'when': ['hewn', 'when'], - 'whenas': ['washen', 'whenas'], - 'whenso': ['whenso', 'whosen'], - 'where': ['hewer', 'wheer', 'where'], - 'whereat': ['weather', 'whereat', 'wreathe'], - 'whereon': ['nowhere', 'whereon'], - 'wherret': ['werther', 'wherret'], - 'wherrit': ['wherrit', 'whirret', 'writher'], - 'whet': ['hewt', 'thew', 'whet'], - 'whichever': ['everwhich', 'whichever'], - 'whicken': ['chewink', 'whicken'], - 'whilter': ['whilter', 'whirtle'], - 'whine': ['whein', 'whine'], - 'whipper': ['prewhip', 'whipper'], - 'whirler': ['rewhirl', 'whirler'], - 'whirret': ['wherrit', 'whirret', 'writher'], - 'whirtle': ['whilter', 'whirtle'], - 'whisperer': ['rewhisper', 'whisperer'], - 'whisson': ['snowish', 'whisson'], - 'whist': ['swith', 'whist', 'whits', 'wisht'], - 'whister': ['swither', 'whister', 'withers'], - 'whit': ['whit', 'with'], - 'white': ['white', 'withe'], - 'whiten': ['whiten', 'withen'], - 'whitener': ['rewhiten', 'whitener'], - 'whitepot': ['whitepot', 'whitetop'], - 'whites': ['swithe', 'whites'], - 'whitetop': ['whitepot', 'whitetop'], - 'whitewood': ['whitewood', 'withewood'], - 'whitleather': ['therewithal', 'whitleather'], - 'whitmanese': ['anthemwise', 'whitmanese'], - 'whits': ['swith', 'whist', 'whits', 'wisht'], - 'whity': ['whity', 'withy'], - 'who': ['how', 'who'], - 'whoever': ['everwho', 'however', 'whoever'], - 'whole': ['howel', 'whole'], - 'whomsoever': ['howsomever', 'whomsoever', 'whosomever'], - 'whoreship': ['horsewhip', 'whoreship'], - 'whort': ['throw', 'whort', 'worth', 'wroth'], - 'whosen': ['whenso', 'whosen'], - 'whosomever': ['howsomever', 'whomsoever', 'whosomever'], - 'wicht': ['tchwi', 'wicht', 'witch'], - 'widdle': ['widdle', 'wilded'], - 'widely': ['dewily', 'widely', 'wieldy'], - 'widen': ['dwine', 'edwin', 'wendi', 'widen', 'wined'], - 'widener': ['rewiden', 'widener'], - 'wideness': ['dewiness', 'wideness'], - 'widgeon': ['gowdnie', 'widgeon'], - 'wieldy': ['dewily', 'widely', 'wieldy'], - 'wierangle': ['weirangle', 'wierangle'], - 'wigan': ['awing', 'wigan'], - 'wiggler': ['wiggler', 'wriggle'], - 'wilded': ['widdle', 'wilded'], - 'wildness': ['wildness', 'windless'], - 'winchester': ['trenchwise', 'winchester'], - 'windbreak': ['breakwind', 'windbreak'], - 'winder': ['rewind', 'winder'], - 'windgall': ['dingwall', 'windgall'], - 'windles': ['swindle', 'windles'], - 'windless': ['wildness', 'windless'], - 'windstorm': ['stormwind', 'windstorm'], - 'windup': ['upwind', 'windup'], - 'wined': ['dwine', 'edwin', 'wendi', 'widen', 'wined'], - 'winer': ['erwin', 'rewin', 'winer'], - 'winglet': ['twingle', 'welting', 'winglet'], - 'winkel': ['welkin', 'winkel', 'winkle'], - 'winkle': ['welkin', 'winkel', 'winkle'], - 'winklet': ['twinkle', 'winklet'], - 'winnard': ['indrawn', 'winnard'], - 'winnel': ['winnel', 'winnle'], - 'winnle': ['winnel', 'winnle'], - 'winsome': ['owenism', 'winsome'], - 'wint': ['twin', 'wint'], - 'winter': ['twiner', 'winter'], - 'winterage': ['wagnerite', 'winterage'], - 'wintered': ['interwed', 'wintered'], - 'winterish': ['interwish', 'winterish'], - 'winze': ['winze', 'wizen'], - 'wips': ['wips', 'wisp'], - 'wire': ['weir', 'weri', 'wire'], - 'wired': ['weird', 'wired', 'wride', 'wried'], - 'wirer': ['wirer', 'wrier'], - 'wirra': ['warri', 'wirra'], - 'wiselike': ['likewise', 'wiselike'], - 'wiseman': ['manwise', 'wiseman'], - 'wisen': ['sinew', 'swine', 'wisen'], - 'wiser': ['swire', 'wiser'], - 'wisewoman': ['wisewoman', 'womanwise'], - 'wisher': ['rewish', 'wisher'], - 'wishmay': ['wishmay', 'yahwism'], - 'wishram': ['warmish', 'wishram'], - 'wisht': ['swith', 'whist', 'whits', 'wisht'], - 'wisket': ['weskit', 'wisket'], - 'wisp': ['wips', 'wisp'], - 'wispy': ['swipy', 'wispy'], - 'wit': ['twi', 'wit'], - 'witan': ['atwin', 'twain', 'witan'], - 'witch': ['tchwi', 'wicht', 'witch'], - 'witchetty': ['twitchety', 'witchetty'], - 'with': ['whit', 'with'], - 'withdrawer': ['rewithdraw', 'withdrawer'], - 'withe': ['white', 'withe'], - 'withen': ['whiten', 'withen'], - 'wither': ['wither', 'writhe'], - 'withered': ['redwithe', 'withered'], - 'withering': ['withering', 'wrightine'], - 'withers': ['swither', 'whister', 'withers'], - 'withewood': ['whitewood', 'withewood'], - 'within': ['inwith', 'within'], - 'without': ['outwith', 'without'], - 'withy': ['whity', 'withy'], - 'wive': ['view', 'wive'], - 'wiver': ['wiver', 'wrive'], - 'wizen': ['winze', 'wizen'], - 'wo': ['ow', 'wo'], - 'woader': ['redowa', 'woader'], - 'wob': ['bow', 'wob'], - 'wod': ['dow', 'owd', 'wod'], - 'woe': ['owe', 'woe'], - 'woibe': ['bowie', 'woibe'], - 'wold': ['dowl', 'wold'], - 'wolf': ['flow', 'fowl', 'wolf'], - 'wolfer': ['flower', 'fowler', 'reflow', 'wolfer'], - 'wolter': ['rowlet', 'trowel', 'wolter'], - 'wolve': ['vowel', 'wolve'], - 'womanpost': ['postwoman', 'womanpost'], - 'womanwise': ['wisewoman', 'womanwise'], - 'won': ['now', 'own', 'won'], - 'wonder': ['downer', 'wonder', 'worden'], - 'wonderful': ['underflow', 'wonderful'], - 'wone': ['enow', 'owen', 'wone'], - 'wong': ['gown', 'wong'], - 'wonga': ['gowan', 'wagon', 'wonga'], - 'wonner': ['renown', 'wonner'], - 'wont': ['nowt', 'town', 'wont'], - 'wonted': ['towned', 'wonted'], - 'woodbark': ['bookward', 'woodbark'], - 'woodbind': ['bindwood', 'woodbind'], - 'woodbush': ['bushwood', 'woodbush'], - 'woodchat': ['chatwood', 'woodchat'], - 'wooden': ['enwood', 'wooden'], - 'woodfish': ['fishwood', 'woodfish'], - 'woodhack': ['hackwood', 'woodhack'], - 'woodhorse': ['horsewood', 'woodhorse'], - 'woodness': ['sowdones', 'woodness'], - 'woodpecker': ['peckerwood', 'woodpecker'], - 'woodrock': ['corkwood', 'rockwood', 'woodrock'], - 'woodsilver': ['silverwood', 'woodsilver'], - 'woodstone': ['stonewood', 'woodstone'], - 'woodworm': ['woodworm', 'wormwood'], - 'wooled': ['dewool', 'elwood', 'wooled'], - 'woons': ['swoon', 'woons'], - 'woosh': ['howso', 'woosh'], - 'wop': ['pow', 'wop'], - 'worble': ['blower', 'bowler', 'reblow', 'worble'], - 'word': ['drow', 'word'], - 'wordage': ['dowager', 'wordage'], - 'worden': ['downer', 'wonder', 'worden'], - 'worder': ['reword', 'worder'], - 'wordily': ['rowdily', 'wordily'], - 'wordiness': ['rowdiness', 'wordiness'], - 'wordle': ['lowder', 'weldor', 'wordle'], - 'wordsman': ['sandworm', 'swordman', 'wordsman'], - 'wordsmanship': ['swordmanship', 'wordsmanship'], - 'wordy': ['dowry', 'rowdy', 'wordy'], - 'wore': ['ower', 'wore'], - 'workbasket': ['basketwork', 'workbasket'], - 'workbench': ['benchwork', 'workbench'], - 'workbook': ['bookwork', 'workbook'], - 'workbox': ['boxwork', 'workbox'], - 'workday': ['daywork', 'workday'], - 'worker': ['rework', 'worker'], - 'workhand': ['handwork', 'workhand'], - 'workhouse': ['housework', 'workhouse'], - 'working': ['kingrow', 'working'], - 'workmaster': ['masterwork', 'workmaster'], - 'workout': ['outwork', 'workout'], - 'workpiece': ['piecework', 'workpiece'], - 'workship': ['shipwork', 'workship'], - 'workshop': ['shopwork', 'workshop'], - 'worktime': ['timework', 'worktime'], - 'wormed': ['deworm', 'wormed'], - 'wormer': ['merrow', 'wormer'], - 'wormroot': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'], - 'wormship': ['shipworm', 'wormship'], - 'wormwood': ['woodworm', 'wormwood'], - 'worse': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'], - 'worset': ['restow', 'stower', 'towser', 'worset'], - 'worst': ['strow', 'worst'], - 'wort': ['trow', 'wort'], - 'worth': ['throw', 'whort', 'worth', 'wroth'], - 'worthful': ['worthful', 'wrothful'], - 'worthily': ['worthily', 'wrothily'], - 'worthiness': ['worthiness', 'wrothiness'], - 'worthy': ['worthy', 'wrothy'], - 'wot': ['tow', 'two', 'wot'], - 'wots': ['sowt', 'stow', 'swot', 'wots'], - 'wounder': ['rewound', 'unrowed', 'wounder'], - 'woy': ['woy', 'yow'], - 'wraf': ['warf', 'wraf'], - 'wrainbolt': ['browntail', 'wrainbolt'], - 'wraitly': ['wraitly', 'wrytail'], - 'wran': ['warn', 'wran'], - 'wrangle': ['wangler', 'wrangle'], - 'wrap': ['warp', 'wrap'], - 'wrapper': ['prewrap', 'wrapper'], - 'wrastle': ['wastrel', 'wrastle'], - 'wrath': ['thraw', 'warth', 'whart', 'wrath'], - 'wreak': ['waker', 'wreak'], - 'wreat': ['tawer', 'water', 'wreat'], - 'wreath': ['rethaw', 'thawer', 'wreath'], - 'wreathe': ['weather', 'whereat', 'wreathe'], - 'wrest': ['strew', 'trews', 'wrest'], - 'wrester': ['strewer', 'wrester'], - 'wrestle': ['swelter', 'wrestle'], - 'wride': ['weird', 'wired', 'wride', 'wried'], - 'wried': ['weird', 'wired', 'wride', 'wried'], - 'wrier': ['wirer', 'wrier'], - 'wriggle': ['wiggler', 'wriggle'], - 'wrightine': ['withering', 'wrightine'], - 'wrinklet': ['twinkler', 'wrinklet'], - 'write': ['twire', 'write'], - 'writhe': ['wither', 'writhe'], - 'writher': ['wherrit', 'whirret', 'writher'], - 'written': ['twinter', 'written'], - 'wrive': ['wiver', 'wrive'], - 'wro': ['row', 'wro'], - 'wroken': ['knower', 'reknow', 'wroken'], - 'wrong': ['grown', 'wrong'], - 'wrote': ['rowet', 'tower', 'wrote'], - 'wroth': ['throw', 'whort', 'worth', 'wroth'], - 'wrothful': ['worthful', 'wrothful'], - 'wrothily': ['worthily', 'wrothily'], - 'wrothiness': ['worthiness', 'wrothiness'], - 'wrothy': ['worthy', 'wrothy'], - 'wrytail': ['wraitly', 'wrytail'], - 'wunna': ['unwan', 'wunna'], - 'wyde': ['dewy', 'wyde'], - 'wye': ['wey', 'wye', 'yew'], - 'wype': ['pewy', 'wype'], - 'wyson': ['snowy', 'wyson'], - 'xanthein': ['xanthein', 'xanthine'], - 'xanthine': ['xanthein', 'xanthine'], - 'xanthopurpurin': ['purpuroxanthin', 'xanthopurpurin'], - 'xema': ['amex', 'exam', 'xema'], - 'xenia': ['axine', 'xenia'], - 'xenial': ['alexin', 'xenial'], - 'xenoparasite': ['exasperation', 'xenoparasite'], - 'xeres': ['resex', 'xeres'], - 'xerophytic': ['hypertoxic', 'xerophytic'], - 'xerotic': ['excitor', 'xerotic'], - 'xylic': ['cylix', 'xylic'], - 'xylitone': ['xylitone', 'xylonite'], - 'xylonite': ['xylitone', 'xylonite'], - 'xylophone': ['oxyphenol', 'xylophone'], - 'xylose': ['lyxose', 'xylose'], - 'xyst': ['styx', 'xyst'], - 'xyster': ['sextry', 'xyster'], - 'xysti': ['sixty', 'xysti'], - 'ya': ['ay', 'ya'], - 'yaba': ['baya', 'yaba'], - 'yabber': ['babery', 'yabber'], - 'yacht': ['cathy', 'cyath', 'yacht'], - 'yachtist': ['chastity', 'yachtist'], - 'yad': ['ady', 'day', 'yad'], - 'yaff': ['affy', 'yaff'], - 'yagnob': ['boyang', 'yagnob'], - 'yah': ['hay', 'yah'], - 'yahwism': ['wishmay', 'yahwism'], - 'yair': ['airy', 'yair'], - 'yaird': ['dairy', 'diary', 'yaird'], - 'yak': ['kay', 'yak'], - 'yakan': ['kayan', 'yakan'], - 'yakima': ['kamiya', 'yakima'], - 'yakka': ['kayak', 'yakka'], - 'yalb': ['ably', 'blay', 'yalb'], - 'yali': ['ilya', 'yali'], - 'yalla': ['allay', 'yalla'], - 'yallaer': ['allayer', 'yallaer'], - 'yam': ['amy', 'may', 'mya', 'yam'], - 'yamel': ['mealy', 'yamel'], - 'yamen': ['maney', 'yamen'], - 'yamilke': ['maylike', 'yamilke'], - 'yamph': ['phyma', 'yamph'], - 'yan': ['any', 'nay', 'yan'], - 'yana': ['anay', 'yana'], - 'yander': ['denary', 'yander'], - 'yap': ['pay', 'pya', 'yap'], - 'yapness': ['synapse', 'yapness'], - 'yapper': ['papery', 'prepay', 'yapper'], - 'yapster': ['atrepsy', 'yapster'], - 'yar': ['ary', 'ray', 'yar'], - 'yarb': ['bray', 'yarb'], - 'yard': ['adry', 'dray', 'yard'], - 'yardage': ['drayage', 'yardage'], - 'yarder': ['dreary', 'yarder'], - 'yardman': ['drayman', 'yardman'], - 'yare': ['aery', 'eyra', 'yare', 'year'], - 'yark': ['kyar', 'yark'], - 'yarl': ['aryl', 'lyra', 'ryal', 'yarl'], - 'yarm': ['army', 'mary', 'myra', 'yarm'], - 'yarn': ['nary', 'yarn'], - 'yarr': ['arry', 'yarr'], - 'yarrow': ['arrowy', 'yarrow'], - 'yaruran': ['unarray', 'yaruran'], - 'yas': ['say', 'yas'], - 'yasht': ['hasty', 'yasht'], - 'yat': ['tay', 'yat'], - 'yate': ['yate', 'yeat', 'yeta'], - 'yatter': ['attery', 'treaty', 'yatter'], - 'yaw': ['way', 'yaw'], - 'yawler': ['lawyer', 'yawler'], - 'yawn': ['awny', 'wany', 'yawn'], - 'yaws': ['sway', 'ways', 'yaws'], - 'ye': ['ey', 'ye'], - 'yea': ['aye', 'yea'], - 'yeah': ['ahey', 'eyah', 'yeah'], - 'year': ['aery', 'eyra', 'yare', 'year'], - 'yeard': ['deary', 'deray', 'rayed', 'ready', 'yeard'], - 'yearly': ['layery', 'yearly'], - 'yearn': ['enray', 'yearn'], - 'yearth': ['earthy', 'hearty', 'yearth'], - 'yeast': ['teasy', 'yeast'], - 'yeat': ['yate', 'yeat', 'yeta'], - 'yeather': ['erythea', 'hetaery', 'yeather'], - 'yed': ['dey', 'dye', 'yed'], - 'yede': ['eyed', 'yede'], - 'yee': ['eye', 'yee'], - 'yeel': ['eely', 'yeel'], - 'yees': ['yees', 'yese'], - 'yegg': ['eggy', 'yegg'], - 'yelk': ['kyle', 'yelk'], - 'yelm': ['elmy', 'yelm'], - 'yelmer': ['merely', 'yelmer'], - 'yelper': ['peerly', 'yelper'], - 'yemen': ['enemy', 'yemen'], - 'yemeni': ['menyie', 'yemeni'], - 'yen': ['eyn', 'nye', 'yen'], - 'yender': ['redeny', 'yender'], - 'yeo': ['yeo', 'yoe'], - 'yeorling': ['legionry', 'yeorling'], - 'yer': ['rye', 'yer'], - 'yerb': ['brey', 'byre', 'yerb'], - 'yerba': ['barye', 'beray', 'yerba'], - 'yerd': ['dyer', 'yerd'], - 'yere': ['eyer', 'eyre', 'yere'], - 'yern': ['ryen', 'yern'], - 'yes': ['sey', 'sye', 'yes'], - 'yese': ['yees', 'yese'], - 'yest': ['stey', 'yest'], - 'yester': ['reesty', 'yester'], - 'yestern': ['streyne', 'styrene', 'yestern'], - 'yet': ['tye', 'yet'], - 'yeta': ['yate', 'yeat', 'yeta'], - 'yeth': ['they', 'yeth'], - 'yether': ['theyre', 'yether'], - 'yetlin': ['lenity', 'yetlin'], - 'yew': ['wey', 'wye', 'yew'], - 'yielden': ['needily', 'yielden'], - 'yielder': ['reedily', 'reyield', 'yielder'], - 'yildun': ['unidly', 'yildun'], - 'yill': ['illy', 'lily', 'yill'], - 'yirm': ['miry', 'rimy', 'yirm'], - 'ym': ['my', 'ym'], - 'yock': ['coky', 'yock'], - 'yodel': ['doyle', 'yodel'], - 'yoe': ['yeo', 'yoe'], - 'yoghurt': ['troughy', 'yoghurt'], - 'yogin': ['goyin', 'yogin'], - 'yoi': ['iyo', 'yoi'], - 'yoker': ['rokey', 'yoker'], - 'yolk': ['kylo', 'yolk'], - 'yom': ['moy', 'yom'], - 'yomud': ['moudy', 'yomud'], - 'yon': ['noy', 'yon'], - 'yond': ['ondy', 'yond'], - 'yonder': ['rodney', 'yonder'], - 'yont': ['tony', 'yont'], - 'yor': ['ory', 'roy', 'yor'], - 'yore': ['oyer', 'roey', 'yore'], - 'york': ['kory', 'roky', 'york'], - 'yot': ['toy', 'yot'], - 'yote': ['eyot', 'yote'], - 'youngun': ['unyoung', 'youngun'], - 'yours': ['soury', 'yours'], - 'yoursel': ['elusory', 'yoursel'], - 'yoven': ['envoy', 'nevoy', 'yoven'], - 'yow': ['woy', 'yow'], - 'yowl': ['lowy', 'owly', 'yowl'], - 'yowler': ['lowery', 'owlery', 'rowley', 'yowler'], - 'yowt': ['towy', 'yowt'], - 'yox': ['oxy', 'yox'], - 'yttrious': ['touristy', 'yttrious'], - 'yuca': ['cuya', 'yuca'], - 'yuckel': ['yuckel', 'yuckle'], - 'yuckle': ['yuckel', 'yuckle'], - 'yulan': ['unlay', 'yulan'], - 'yurok': ['rouky', 'yurok'], - 'zabian': ['banzai', 'zabian'], - 'zabra': ['braza', 'zabra'], - 'zacate': ['azteca', 'zacate'], - 'zad': ['adz', 'zad'], - 'zag': ['gaz', 'zag'], - 'zain': ['nazi', 'zain'], - 'zaman': ['namaz', 'zaman'], - 'zamenis': ['sizeman', 'zamenis'], - 'zaparoan': ['parazoan', 'zaparoan'], - 'zaratite': ['tatarize', 'zaratite'], - 'zati': ['itza', 'tiza', 'zati'], - 'zeal': ['laze', 'zeal'], - 'zealotism': ['solmizate', 'zealotism'], - 'zebra': ['braze', 'zebra'], - 'zein': ['inez', 'zein'], - 'zelanian': ['annalize', 'zelanian'], - 'zelatrice': ['cartelize', 'zelatrice'], - 'zemmi': ['zemmi', 'zimme'], - 'zendic': ['dezinc', 'zendic'], - 'zenick': ['zenick', 'zincke'], - 'zenu': ['unze', 'zenu'], - 'zequin': ['quinze', 'zequin'], - 'zerda': ['adzer', 'zerda'], - 'zerma': ['mazer', 'zerma'], - 'ziarat': ['atazir', 'ziarat'], - 'zibet': ['bizet', 'zibet'], - 'ziega': ['gaize', 'ziega'], - 'zimme': ['zemmi', 'zimme'], - 'zincite': ['citizen', 'zincite'], - 'zincke': ['zenick', 'zincke'], - 'zinco': ['zinco', 'zonic'], - 'zion': ['nozi', 'zion'], - 'zira': ['izar', 'zira'], - 'zirconate': ['narcotize', 'zirconate'], - 'zoa': ['azo', 'zoa'], - 'zoanthidae': ['zoanthidae', 'zoanthidea'], - 'zoanthidea': ['zoanthidae', 'zoanthidea'], - 'zoarite': ['azorite', 'zoarite'], - 'zobo': ['bozo', 'zobo'], - 'zoeal': ['azole', 'zoeal'], - 'zogan': ['gazon', 'zogan'], - 'zolotink': ['zolotink', 'zolotnik'], - 'zolotnik': ['zolotink', 'zolotnik'], - 'zonaria': ['arizona', 'azorian', 'zonaria'], - 'zoned': ['dozen', 'zoned'], - 'zonic': ['zinco', 'zonic'], - 'zonotrichia': ['chorization', 'rhizoctonia', 'zonotrichia'], - 'zoonal': ['alonzo', 'zoonal'], - 'zoonic': ['ozonic', 'zoonic'], - 'zoonomic': ['monozoic', 'zoonomic'], - 'zoopathy': ['phytozoa', 'zoopathy', 'zoophyta'], - 'zoophilic': ['philozoic', 'zoophilic'], - 'zoophilist': ['philozoist', 'zoophilist'], - 'zoophyta': ['phytozoa', 'zoopathy', 'zoophyta'], - 'zoospermatic': ['spermatozoic', 'zoospermatic'], - 'zoosporic': ['sporozoic', 'zoosporic'], - 'zootype': ['ozotype', 'zootype'], - 'zyga': ['gazy', 'zyga'], - 'zygal': ['glazy', 'zygal']} \ No newline at end of file diff --git a/strings/autocomplete_using_trie.py b/strings/autocomplete_using_trie.py deleted file mode 100644 index 77a3050ab15f..000000000000 --- a/strings/autocomplete_using_trie.py +++ /dev/null @@ -1,65 +0,0 @@ -from __future__ import annotations - -END = "#" - - -class Trie: - def __init__(self) -> None: - self._trie: dict = {} - - def insert_word(self, text: str) -> None: - trie = self._trie - for char in text: - if char not in trie: - trie[char] = {} - trie = trie[char] - trie[END] = True - - def find_word(self, prefix: str) -> tuple | list: - trie = self._trie - for char in prefix: - if char in trie: - trie = trie[char] - else: - return [] - return self._elements(trie) - - def _elements(self, d: dict) -> tuple: - result = [] - for c, v in d.items(): - sub_result = [" "] if c == END else [(c + s) for s in self._elements(v)] - result.extend(sub_result) - return tuple(result) - - -trie = Trie() -words = ("depart", "detergent", "daring", "dog", "deer", "deal") -for word in words: - trie.insert_word(word) - - -def autocomplete_using_trie(string: str) -> tuple: - """ - >>> trie = Trie() - >>> for word in words: - ... trie.insert_word(word) - ... - >>> matches = autocomplete_using_trie("de") - >>> "detergent " in matches - True - >>> "dog " in matches - False - """ - suffixes = trie.find_word(string) - return tuple(string + word for word in suffixes) - - -def main() -> None: - print(autocomplete_using_trie("de")) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() diff --git a/strings/barcode_validator.py b/strings/barcode_validator.py deleted file mode 100644 index b4f3864e2642..000000000000 --- a/strings/barcode_validator.py +++ /dev/null @@ -1,89 +0,0 @@ -""" -https://en.wikipedia.org/wiki/Check_digit#Algorithms -""" - - -def get_check_digit(barcode: int) -> int: - """ - Returns the last digit of barcode by excluding the last digit first - and then computing to reach the actual last digit from the remaining - 12 digits. - - >>> get_check_digit(8718452538119) - 9 - >>> get_check_digit(87184523) - 5 - >>> get_check_digit(87193425381086) - 9 - >>> [get_check_digit(x) for x in range(0, 100, 10)] - [0, 7, 4, 1, 8, 5, 2, 9, 6, 3] - """ - barcode //= 10 # exclude the last digit - checker = False - s = 0 - - # extract and check each digit - while barcode != 0: - mult = 1 if checker else 3 - s += mult * (barcode % 10) - barcode //= 10 - checker = not checker - - return (10 - (s % 10)) % 10 - - -def is_valid(barcode: int) -> bool: - """ - Checks for length of barcode and last-digit - Returns boolean value of validity of barcode - - >>> is_valid(8718452538119) - True - >>> is_valid(87184525) - False - >>> is_valid(87193425381089) - False - >>> is_valid(0) - False - >>> is_valid(dwefgiweuf) - Traceback (most recent call last): - ... - NameError: name 'dwefgiweuf' is not defined - """ - return len(str(barcode)) == 13 and get_check_digit(barcode) == barcode % 10 - - -def get_barcode(barcode: str) -> int: - """ - Returns the barcode as an integer - - >>> get_barcode("8718452538119") - 8718452538119 - >>> get_barcode("dwefgiweuf") - Traceback (most recent call last): - ... - ValueError: Barcode 'dwefgiweuf' has alphabetic characters. - """ - if str(barcode).isalpha(): - msg = f"Barcode '{barcode}' has alphabetic characters." - raise ValueError(msg) - elif int(barcode) < 0: - raise ValueError("The entered barcode has a negative value. Try again.") - else: - return int(barcode) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - """ - Enter a barcode. - - """ - barcode = get_barcode(input("Barcode: ").strip()) - - if is_valid(barcode): - print(f"'{barcode}' is a valid barcode.") - else: - print(f"'{barcode}' is NOT a valid barcode.") diff --git a/strings/bitap_string_match.py b/strings/bitap_string_match.py deleted file mode 100644 index bd8a0f0d73ec..000000000000 --- a/strings/bitap_string_match.py +++ /dev/null @@ -1,79 +0,0 @@ -""" -Bitap exact string matching -https://en.wikipedia.org/wiki/Bitap_algorithm - -Searches for a pattern inside text, and returns the index of the first occurrence -of the pattern. Both text and pattern consist of lowercase alphabetical characters only. - -Complexity: O(m*n) - n = length of text - m = length of pattern - -Python doctests can be run using this command: -python3 -m doctest -v bitap_string_match.py -""" - - -def bitap_string_match(text: str, pattern: str) -> int: - """ - Retrieves the index of the first occurrence of pattern in text. - - Args: - text: A string consisting only of lowercase alphabetical characters. - pattern: A string consisting only of lowercase alphabetical characters. - - Returns: - int: The index where pattern first occurs. Return -1 if not found. - - >>> bitap_string_match('abdabababc', 'ababc') - 5 - >>> bitap_string_match('aaaaaaaaaaaaaaaaaa', 'a') - 0 - >>> bitap_string_match('zxywsijdfosdfnso', 'zxywsijdfosdfnso') - 0 - >>> bitap_string_match('abdabababc', '') - 0 - >>> bitap_string_match('abdabababc', 'c') - 9 - >>> bitap_string_match('abdabababc', 'fofosdfo') - -1 - >>> bitap_string_match('abdab', 'fofosdfo') - -1 - """ - if not pattern: - return 0 - m = len(pattern) - if m > len(text): - return -1 - - # Initial state of bit string 1110 - state = ~1 - # Bit = 0 if character appears at index, and 1 otherwise - pattern_mask: list[int] = [~0] * 27 # 1111 - - for i, char in enumerate(pattern): - # For the pattern mask for this character, set the bit to 0 for each i - # the character appears. - pattern_index: int = ord(char) - ord("a") - pattern_mask[pattern_index] &= ~(1 << i) - - for i, char in enumerate(text): - text_index = ord(char) - ord("a") - # If this character does not appear in pattern, it's pattern mask is 1111. - # Performing a bitwise OR between state and 1111 will reset the state to 1111 - # and start searching the start of pattern again. - state |= pattern_mask[text_index] - state <<= 1 - - # If the mth bit (counting right to left) of the state is 0, then we have - # found pattern in text - if (state & (1 << m)) == 0: - return i - m + 1 - - return -1 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/boyer_moore_search.py b/strings/boyer_moore_search.py deleted file mode 100644 index 9615d2fd659b..000000000000 --- a/strings/boyer_moore_search.py +++ /dev/null @@ -1,87 +0,0 @@ -""" -The algorithm finds the pattern in given text using following rule. - -The bad-character rule considers the mismatched character in Text. -The next occurrence of that character to the left in Pattern is found, - -If the mismatched character occurs to the left in Pattern, -a shift is proposed that aligns text block and pattern. - -If the mismatched character does not occur to the left in Pattern, -a shift is proposed that moves the entirety of Pattern past -the point of mismatch in the text. - -If there no mismatch then the pattern matches with text block. - -Time Complexity : O(n/m) - n=length of main string - m=length of pattern string -""" - -from __future__ import annotations - - -class BoyerMooreSearch: - def __init__(self, text: str, pattern: str): - self.text, self.pattern = text, pattern - self.textLen, self.patLen = len(text), len(pattern) - - def match_in_pattern(self, char: str) -> int: - """finds the index of char in pattern in reverse order - - Parameters : - char (chr): character to be searched - - Returns : - i (int): index of char from last in pattern - -1 (int): if char is not found in pattern - """ - - for i in range(self.patLen - 1, -1, -1): - if char == self.pattern[i]: - return i - return -1 - - def mismatch_in_text(self, current_pos: int) -> int: - """ - find the index of mis-matched character in text when compared with pattern - from last - - Parameters : - current_pos (int): current index position of text - - Returns : - i (int): index of mismatched char from last in text - -1 (int): if there is no mismatch between pattern and text block - """ - - for i in range(self.patLen - 1, -1, -1): - if self.pattern[i] != self.text[current_pos + i]: - return current_pos + i - return -1 - - def bad_character_heuristic(self) -> list[int]: - # searches pattern in text and returns index positions - positions = [] - for i in range(self.textLen - self.patLen + 1): - mismatch_index = self.mismatch_in_text(i) - if mismatch_index == -1: - positions.append(i) - else: - match_index = self.match_in_pattern(self.text[mismatch_index]) - i = ( - mismatch_index - match_index - ) # shifting index lgtm [py/multiple-definition] - return positions - - -text = "ABAABA" -pattern = "AB" -bms = BoyerMooreSearch(text, pattern) -positions = bms.bad_character_heuristic() - -if len(positions) == 0: - print("No match found") -else: - print("Pattern found in following positions: ") - print(positions) diff --git a/strings/camel_case_to_snake_case.py b/strings/camel_case_to_snake_case.py deleted file mode 100644 index 582907be2edb..000000000000 --- a/strings/camel_case_to_snake_case.py +++ /dev/null @@ -1,60 +0,0 @@ -def camel_to_snake_case(input_str: str) -> str: - """ - Transforms a camelCase (or PascalCase) string to snake_case - - >>> camel_to_snake_case("someRandomString") - 'some_random_string' - - >>> camel_to_snake_case("SomeRandomStr#ng") - 'some_random_str_ng' - - >>> camel_to_snake_case("123someRandom123String123") - '123_some_random_123_string_123' - - >>> camel_to_snake_case("123SomeRandom123String123") - '123_some_random_123_string_123' - - >>> camel_to_snake_case(123) - Traceback (most recent call last): - ... - ValueError: Expected string as input, found <class 'int'> - - """ - - # check for invalid input type - if not isinstance(input_str, str): - msg = f"Expected string as input, found {type(input_str)}" - raise ValueError(msg) - - snake_str = "" - - for index, char in enumerate(input_str): - if char.isupper(): - snake_str += "_" + char.lower() - - # if char is lowercase but proceeded by a digit: - elif input_str[index - 1].isdigit() and char.islower(): - snake_str += "_" + char - - # if char is a digit proceeded by a letter: - elif input_str[index - 1].isalpha() and char.isnumeric(): - snake_str += "_" + char.lower() - - # if char is not alphanumeric: - elif not char.isalnum(): - snake_str += "_" - - else: - snake_str += char - - # remove leading underscore - if snake_str[0] == "_": - snake_str = snake_str[1:] - - return snake_str - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/can_string_be_rearranged_as_palindrome.py b/strings/can_string_be_rearranged_as_palindrome.py deleted file mode 100644 index 95cda8b72180..000000000000 --- a/strings/can_string_be_rearranged_as_palindrome.py +++ /dev/null @@ -1,113 +0,0 @@ -# Created by susmith98 - -from collections import Counter -from timeit import timeit - -# Problem Description: -# Check if characters of the given string can be rearranged to form a palindrome. -# Counter is faster for long strings and non-Counter is faster for short strings. - - -def can_string_be_rearranged_as_palindrome_counter( - input_str: str = "", -) -> bool: - """ - A Palindrome is a String that reads the same forward as it does backwards. - Examples of Palindromes mom, dad, malayalam - >>> can_string_be_rearranged_as_palindrome_counter("Momo") - True - >>> can_string_be_rearranged_as_palindrome_counter("Mother") - False - >>> can_string_be_rearranged_as_palindrome_counter("Father") - False - >>> can_string_be_rearranged_as_palindrome_counter("A man a plan a canal Panama") - True - """ - return sum(c % 2 for c in Counter(input_str.replace(" ", "").lower()).values()) < 2 - - -def can_string_be_rearranged_as_palindrome(input_str: str = "") -> bool: - """ - A Palindrome is a String that reads the same forward as it does backwards. - Examples of Palindromes mom, dad, malayalam - >>> can_string_be_rearranged_as_palindrome("Momo") - True - >>> can_string_be_rearranged_as_palindrome("Mother") - False - >>> can_string_be_rearranged_as_palindrome("Father") - False - >>> can_string_be_rearranged_as_palindrome_counter("A man a plan a canal Panama") - True - """ - if len(input_str) == 0: - return True - lower_case_input_str = input_str.replace(" ", "").lower() - # character_freq_dict: Stores the frequency of every character in the input string - character_freq_dict: dict[str, int] = {} - - for character in lower_case_input_str: - character_freq_dict[character] = character_freq_dict.get(character, 0) + 1 - """ - Above line of code is equivalent to: - 1) Getting the frequency of current character till previous index - >>> character_freq = character_freq_dict.get(character, 0) - 2) Incrementing the frequency of current character by 1 - >>> character_freq = character_freq + 1 - 3) Updating the frequency of current character - >>> character_freq_dict[character] = character_freq - """ - """ - OBSERVATIONS: - Even length palindrome - -> Every character appears even no.of times. - Odd length palindrome - -> Every character appears even no.of times except for one character. - LOGIC: - Step 1: We'll count number of characters that appear odd number of times i.e oddChar - Step 2:If we find more than 1 character that appears odd number of times, - It is not possible to rearrange as a palindrome - """ - odd_char = 0 - - for character_count in character_freq_dict.values(): - if character_count % 2: - odd_char += 1 - return not odd_char > 1 - - -def benchmark(input_str: str = "") -> None: - """ - Benchmark code for comparing above 2 functions - """ - print("\nFor string = ", input_str, ":") - print( - "> can_string_be_rearranged_as_palindrome_counter()", - "\tans =", - can_string_be_rearranged_as_palindrome_counter(input_str), - "\ttime =", - timeit( - "z.can_string_be_rearranged_as_palindrome_counter(z.check_str)", - setup="import __main__ as z", - ), - "seconds", - ) - print( - "> can_string_be_rearranged_as_palindrome()", - "\tans =", - can_string_be_rearranged_as_palindrome(input_str), - "\ttime =", - timeit( - "z.can_string_be_rearranged_as_palindrome(z.check_str)", - setup="import __main__ as z", - ), - "seconds", - ) - - -if __name__ == "__main__": - check_str = input( - "Enter string to determine if it can be rearranged as a palindrome or not: " - ).strip() - benchmark(check_str) - status = can_string_be_rearranged_as_palindrome_counter(check_str) - print(f"{check_str} can {'' if status else 'not '}be rearranged as a palindrome") diff --git a/strings/capitalize.py b/strings/capitalize.py deleted file mode 100644 index c0b45e0d9614..000000000000 --- a/strings/capitalize.py +++ /dev/null @@ -1,32 +0,0 @@ -from string import ascii_lowercase, ascii_uppercase - - -def capitalize(sentence: str) -> str: - """ - Capitalizes the first letter of a sentence or word. - - >>> capitalize("hello world") - 'Hello world' - >>> capitalize("123 hello world") - '123 hello world' - >>> capitalize(" hello world") - ' hello world' - >>> capitalize("a") - 'A' - >>> capitalize("") - '' - """ - if not sentence: - return "" - - # Create a dictionary that maps lowercase letters to uppercase letters - # Capitalize the first character if it's a lowercase letter - # Concatenate the capitalized character with the rest of the string - lower_to_upper = dict(zip(ascii_lowercase, ascii_uppercase)) - return lower_to_upper.get(sentence[0], sentence[0]) + sentence[1:] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/check_anagrams.py b/strings/check_anagrams.py deleted file mode 100644 index d747368b2373..000000000000 --- a/strings/check_anagrams.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -wiki: https://en.wikipedia.org/wiki/Anagram -""" - -from collections import defaultdict - - -def check_anagrams(first_str: str, second_str: str) -> bool: - """ - Two strings are anagrams if they are made up of the same letters but are - arranged differently (ignoring the case). - >>> check_anagrams('Silent', 'Listen') - True - >>> check_anagrams('This is a string', 'Is this a string') - True - >>> check_anagrams('This is a string', 'Is this a string') - True - >>> check_anagrams('There', 'Their') - False - """ - first_str = first_str.lower().strip() - second_str = second_str.lower().strip() - - # Remove whitespace - first_str = first_str.replace(" ", "") - second_str = second_str.replace(" ", "") - - # Strings of different lengths are not anagrams - if len(first_str) != len(second_str): - return False - - # Default values for count should be 0 - count: defaultdict[str, int] = defaultdict(int) - - # For each character in input strings, - # increment count in the corresponding - for i in range(len(first_str)): - count[first_str[i]] += 1 - count[second_str[i]] -= 1 - - return all(_count == 0 for _count in count.values()) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - input_a = input("Enter the first string ").strip() - input_b = input("Enter the second string ").strip() - - status = check_anagrams(input_a, input_b) - print(f"{input_a} and {input_b} are {'' if status else 'not '}anagrams.") diff --git a/strings/count_vowels.py b/strings/count_vowels.py deleted file mode 100644 index 8a52b331c81b..000000000000 --- a/strings/count_vowels.py +++ /dev/null @@ -1,34 +0,0 @@ -def count_vowels(s: str) -> int: - """ - Count the number of vowels in a given string. - - :param s: Input string to count vowels in. - :return: Number of vowels in the input string. - - Examples: - >>> count_vowels("hello world") - 3 - >>> count_vowels("HELLO WORLD") - 3 - >>> count_vowels("123 hello world") - 3 - >>> count_vowels("") - 0 - >>> count_vowels("a quick brown fox") - 5 - >>> count_vowels("the quick BROWN fox") - 5 - >>> count_vowels("PYTHON") - 1 - """ - if not isinstance(s, str): - raise ValueError("Input must be a string") - - vowels = "aeiouAEIOU" - return sum(1 for char in s if char in vowels) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/credit_card_validator.py b/strings/credit_card_validator.py deleted file mode 100644 index b8da1c745124..000000000000 --- a/strings/credit_card_validator.py +++ /dev/null @@ -1,103 +0,0 @@ -""" -Functions for testing the validity of credit card numbers. - -https://en.wikipedia.org/wiki/Luhn_algorithm -""" - - -def validate_initial_digits(credit_card_number: str) -> bool: - """ - Function to validate initial digits of a given credit card number. - >>> valid = "4111111111111111 41111111111111 34 35 37 412345 523456 634567" - >>> all(validate_initial_digits(cc) for cc in valid.split()) - True - >>> invalid = "14 25 76 32323 36111111111111" - >>> all(validate_initial_digits(cc) is False for cc in invalid.split()) - True - """ - return credit_card_number.startswith(("34", "35", "37", "4", "5", "6")) - - -def luhn_validation(credit_card_number: str) -> bool: - """ - Function to luhn algorithm validation for a given credit card number. - >>> luhn_validation('4111111111111111') - True - >>> luhn_validation('36111111111111') - True - >>> luhn_validation('41111111111111') - False - """ - cc_number = credit_card_number - total = 0 - half_len = len(cc_number) - 2 - for i in range(half_len, -1, -2): - # double the value of every second digit - digit = int(cc_number[i]) - digit *= 2 - # If doubling of a number results in a two digit number - # i.e greater than 9(e.g., 6 x 2 = 12), - # then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6), - # to get a single digit number. - if digit > 9: - digit %= 10 - digit += 1 - cc_number = cc_number[:i] + str(digit) + cc_number[i + 1 :] - total += digit - - # Sum up the remaining digits - for i in range(len(cc_number) - 1, -1, -2): - total += int(cc_number[i]) - - return total % 10 == 0 - - -def validate_credit_card_number(credit_card_number: str) -> bool: - """ - Function to validate the given credit card number. - >>> validate_credit_card_number('4111111111111111') - 4111111111111111 is a valid credit card number. - True - >>> validate_credit_card_number('helloworld$') - helloworld$ is an invalid credit card number because it has nonnumerical characters. - False - >>> validate_credit_card_number('32323') - 32323 is an invalid credit card number because of its length. - False - >>> validate_credit_card_number('32323323233232332323') - 32323323233232332323 is an invalid credit card number because of its length. - False - >>> validate_credit_card_number('36111111111111') - 36111111111111 is an invalid credit card number because of its first two digits. - False - >>> validate_credit_card_number('41111111111111') - 41111111111111 is an invalid credit card number because it fails the Luhn check. - False - """ - error_message = f"{credit_card_number} is an invalid credit card number because" - if not credit_card_number.isdigit(): - print(f"{error_message} it has nonnumerical characters.") - return False - - if not 13 <= len(credit_card_number) <= 16: - print(f"{error_message} of its length.") - return False - - if not validate_initial_digits(credit_card_number): - print(f"{error_message} of its first two digits.") - return False - - if not luhn_validation(credit_card_number): - print(f"{error_message} it fails the Luhn check.") - return False - - print(f"{credit_card_number} is a valid credit card number.") - return True - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - validate_credit_card_number("4111111111111111") - validate_credit_card_number("32323") diff --git a/strings/damerau_levenshtein_distance.py b/strings/damerau_levenshtein_distance.py deleted file mode 100644 index 72de019499e2..000000000000 --- a/strings/damerau_levenshtein_distance.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -This script is a implementation of the Damerau-Levenshtein distance algorithm. - -It's an algorithm that measures the edit distance between two string sequences - -More information about this algorithm can be found in this wikipedia article: -https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance -""" - - -def damerau_levenshtein_distance(first_string: str, second_string: str) -> int: - """ - Implements the Damerau-Levenshtein distance algorithm that measures - the edit distance between two strings. - - Parameters: - first_string: The first string to compare - second_string: The second string to compare - - Returns: - distance: The edit distance between the first and second strings - - >>> damerau_levenshtein_distance("cat", "cut") - 1 - >>> damerau_levenshtein_distance("kitten", "sitting") - 3 - >>> damerau_levenshtein_distance("hello", "world") - 4 - >>> damerau_levenshtein_distance("book", "back") - 2 - >>> damerau_levenshtein_distance("container", "containment") - 3 - >>> damerau_levenshtein_distance("container", "containment") - 3 - """ - # Create a dynamic programming matrix to store the distances - dp_matrix = [[0] * (len(second_string) + 1) for _ in range(len(first_string) + 1)] - - # Initialize the matrix - for i in range(len(first_string) + 1): - dp_matrix[i][0] = i - for j in range(len(second_string) + 1): - dp_matrix[0][j] = j - - # Fill the matrix - for i, first_char in enumerate(first_string, start=1): - for j, second_char in enumerate(second_string, start=1): - cost = int(first_char != second_char) - - dp_matrix[i][j] = min( - dp_matrix[i - 1][j] + 1, # Deletion - dp_matrix[i][j - 1] + 1, # Insertion - dp_matrix[i - 1][j - 1] + cost, # Substitution - ) - - if ( - i > 1 - and j > 1 - and first_string[i - 1] == second_string[j - 2] - and first_string[i - 2] == second_string[j - 1] - ): - # Transposition - dp_matrix[i][j] = min(dp_matrix[i][j], dp_matrix[i - 2][j - 2] + cost) - - return dp_matrix[-1][-1] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/detecting_english_programmatically.py b/strings/detecting_english_programmatically.py deleted file mode 100644 index e30e2ea8dd8b..000000000000 --- a/strings/detecting_english_programmatically.py +++ /dev/null @@ -1,62 +0,0 @@ -import os -from string import ascii_letters - -LETTERS_AND_SPACE = ascii_letters + " \t\n" - - -def load_dictionary() -> dict[str, None]: - path = os.path.split(os.path.realpath(__file__)) - english_words: dict[str, None] = {} - with open(path[0] + "/dictionary.txt") as dictionary_file: - for word in dictionary_file.read().split("\n"): - english_words[word] = None - return english_words - - -ENGLISH_WORDS = load_dictionary() - - -def get_english_count(message: str) -> float: - message = message.upper() - message = remove_non_letters(message) - possible_words = message.split() - matches = len([word for word in possible_words if word in ENGLISH_WORDS]) - return float(matches) / len(possible_words) - - -def remove_non_letters(message: str) -> str: - """ - >>> remove_non_letters("Hi! how are you?") - 'Hi how are you' - >>> remove_non_letters("P^y%t)h@o*n") - 'Python' - >>> remove_non_letters("1+1=2") - '' - >>> remove_non_letters("www.google.com/") - 'wwwgooglecom' - >>> remove_non_letters("") - '' - """ - return "".join(symbol for symbol in message if symbol in LETTERS_AND_SPACE) - - -def is_english( - message: str, word_percentage: int = 20, letter_percentage: int = 85 -) -> bool: - """ - >>> is_english('Hello World') - True - >>> is_english('llold HorWd') - False - """ - words_match = get_english_count(message) * 100 >= word_percentage - num_letters = len(remove_non_letters(message)) - message_letters_percentage = (float(num_letters) / len(message)) * 100 - letters_match = message_letters_percentage >= letter_percentage - return words_match and letters_match - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/dictionary.txt b/strings/dictionary.txt deleted file mode 100644 index 75838996ba08..000000000000 --- a/strings/dictionary.txt +++ /dev/null @@ -1,45334 +0,0 @@ -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 -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 -AFORETHOUGHT -AFOUL -AFRAID -AFRESH -AFRICA -AFRICAN -AFRICANIZATION -AFRICANIZATIONS -AFRICANIZE -AFRICANIZED -AFRICANIZES -AFRICANIZING -AFRICANS -AFRIKAANS -AFRIKANER -AFRIKANERS -AFT -AFTER -AFTEREFFECT -AFTERGLOW -AFTERIMAGE -AFTERLIFE -AFTERMATH -AFTERMOST -AFTERNOON -AFTERNOONS -AFTERSHOCK -AFTERSHOCKS -AFTERTHOUGHT -AFTERTHOUGHTS -AFTERWARD -AFTERWARDS -AGAIN -AGAINST -AGAMEMNON -AGAPE -AGAR -AGATE -AGATES -AGATHA -AGE -AGED -AGEE -AGELESS -AGENCIES -AGENCY -AGENDA -AGENDAS -AGENT -AGENTS -AGER -AGERS -AGES -AGGIE -AGGIES -AGGLOMERATE -AGGLOMERATED -AGGLOMERATES -AGGLOMERATION -AGGLUTINATE -AGGLUTINATED -AGGLUTINATES -AGGLUTINATING -AGGLUTINATION -AGGLUTININ -AGGLUTININS -AGGRANDIZE -AGGRAVATE -AGGRAVATED -AGGRAVATES -AGGRAVATION -AGGREGATE -AGGREGATED -AGGREGATELY -AGGREGATES -AGGREGATING -AGGREGATION -AGGREGATIONS -AGGRESSION -AGGRESSIONS -AGGRESSIVE -AGGRESSIVELY -AGGRESSIVENESS -AGGRESSOR -AGGRESSORS -AGGRIEVE -AGGRIEVED -AGGRIEVES -AGGRIEVING -AGHAST -AGILE -AGILELY -AGILITY -AGING -AGITATE -AGITATED -AGITATES -AGITATING -AGITATION -AGITATIONS -AGITATOR -AGITATORS -AGLEAM -AGLOW -AGNES -AGNEW -AGNOSTIC -AGNOSTICS -AGO -AGOG -AGONIES -AGONIZE -AGONIZED -AGONIZES -AGONIZING -AGONIZINGLY -AGONY -AGRARIAN -AGREE -AGREEABLE -AGREEABLY -AGREED -AGREEING -AGREEMENT -AGREEMENTS -AGREER -AGREERS -AGREES -AGRICOLA -AGRICULTURAL -AGRICULTURALLY -AGRICULTURE -AGUE -AGWAY -AHEAD -AHMADABAD -AHMEDABAD -AID -AIDA -AIDE -AIDED -AIDES -AIDING -AIDS -AIKEN -AIL -AILEEN -AILERON -AILERONS -AILING -AILMENT -AILMENTS -AIM -AIMED -AIMER -AIMERS -AIMING -AIMLESS -AIMLESSLY -AIMS -AINU -AINUS -AIR -AIRBAG -AIRBAGS -AIRBORNE -AIRBUS -AIRCRAFT -AIRDROP -AIRDROPS -AIRED -AIREDALE -AIRER -AIRERS -AIRES -AIRFARE -AIRFIELD -AIRFIELDS -AIRFLOW -AIRFOIL -AIRFOILS -AIRFRAME -AIRFRAMES -AIRILY -AIRING -AIRINGS -AIRLESS -AIRLIFT -AIRLIFTS -AIRLINE -AIRLINER -AIRLINES -AIRLOCK -AIRLOCKS -AIRMAIL -AIRMAILS -AIRMAN -AIRMEN -AIRPLANE -AIRPLANES -AIRPORT -AIRPORTS -AIRS -AIRSHIP -AIRSHIPS -AIRSPACE -AIRSPEED -AIRSTRIP -AIRSTRIPS -AIRTIGHT -AIRWAY -AIRWAYS -AIRY -AISLE -AITKEN -AJAR -AJAX -AKERS -AKIMBO -AKIN -AKRON -ALABAMA -ALABAMANS -ALABAMIAN -ALABASTER -ALACRITY -ALADDIN -ALAMEDA -ALAMO -ALAMOS -ALAN -ALAR -ALARM -ALARMED -ALARMING -ALARMINGLY -ALARMIST -ALARMS -ALAS -ALASKA -ALASKAN -ALASTAIR -ALBA -ALBACORE -ALBANIA -ALBANIAN -ALBANIANS -ALBANY -ALBATROSS -ALBEIT -ALBERICH -ALBERT -ALBERTA -ALBERTO -ALBRECHT -ALBRIGHT -ALBUM -ALBUMIN -ALBUMS -ALBUQUERQUE -ALCESTIS -ALCHEMY -ALCIBIADES -ALCMENA -ALCOA -ALCOHOL -ALCOHOLIC -ALCOHOLICS -ALCOHOLISM -ALCOHOLS -ALCOTT -ALCOVE -ALCOVES -ALDEBARAN -ALDEN -ALDER -ALDERMAN -ALDERMEN -ALDRICH -ALE -ALEC -ALECK -ALEE -ALERT -ALERTED -ALERTEDLY -ALERTER -ALERTERS -ALERTING -ALERTLY -ALERTNESS -ALERTS -ALEUT -ALEUTIAN -ALEX -ALEXANDER -ALEXANDRA -ALEXANDRE -ALEXANDRIA -ALEXANDRINE -ALEXEI -ALEXIS -ALFA -ALFALFA -ALFONSO -ALFRED -ALFREDO -ALFRESCO -ALGA -ALGAE -ALGAECIDE -ALGEBRA -ALGEBRAIC -ALGEBRAICALLY -ALGEBRAS -ALGENIB -ALGER -ALGERIA -ALGERIAN -ALGIERS -ALGINATE -ALGOL -ALGOL -ALGONQUIAN -ALGONQUIN -ALGORITHM -ALGORITHMIC -ALGORITHMICALLY -ALGORITHMS -ALHAMBRA -ALI -ALIAS -ALIASED -ALIASES -ALIASING -ALIBI -ALIBIS -ALICE -ALICIA -ALIEN -ALIENATE -ALIENATED -ALIENATES -ALIENATING -ALIENATION -ALIENS -ALIGHT -ALIGN -ALIGNED -ALIGNING -ALIGNMENT -ALIGNMENTS -ALIGNS -ALIKE -ALIMENT -ALIMENTS -ALIMONY -ALISON -ALISTAIR -ALIVE -ALKALI -ALKALINE -ALKALIS -ALKALOID -ALKALOIDS -ALKYL -ALL -ALLAH -ALLAN -ALLAY -ALLAYED -ALLAYING -ALLAYS -ALLEGATION -ALLEGATIONS -ALLEGE -ALLEGED -ALLEGEDLY -ALLEGES -ALLEGHENIES -ALLEGHENY -ALLEGIANCE -ALLEGIANCES -ALLEGING -ALLEGORIC -ALLEGORICAL -ALLEGORICALLY -ALLEGORIES -ALLEGORY -ALLEGRA -ALLEGRETTO -ALLEGRETTOS -ALLELE -ALLELES -ALLEMANDE -ALLEN -ALLENDALE -ALLENTOWN -ALLERGIC -ALLERGIES -ALLERGY -ALLEVIATE -ALLEVIATED -ALLEVIATES -ALLEVIATING -ALLEVIATION -ALLEY -ALLEYS -ALLEYWAY -ALLEYWAYS -ALLIANCE -ALLIANCES -ALLIED -ALLIES -ALLIGATOR -ALLIGATORS -ALLIS -ALLISON -ALLITERATION -ALLITERATIONS -ALLITERATIVE -ALLOCATABLE -ALLOCATE -ALLOCATED -ALLOCATES -ALLOCATING -ALLOCATION -ALLOCATIONS -ALLOCATOR -ALLOCATORS -ALLOPHONE -ALLOPHONES -ALLOPHONIC -ALLOT -ALLOTMENT -ALLOTMENTS -ALLOTS -ALLOTTED -ALLOTTER -ALLOTTING -ALLOW -ALLOWABLE -ALLOWABLY -ALLOWANCE -ALLOWANCES -ALLOWED -ALLOWING -ALLOWS -ALLOY -ALLOYS -ALLSTATE -ALLUDE -ALLUDED -ALLUDES -ALLUDING -ALLURE -ALLUREMENT -ALLURING -ALLUSION -ALLUSIONS -ALLUSIVE -ALLUSIVENESS -ALLY -ALLYING -ALLYN -ALMA -ALMADEN -ALMANAC -ALMANACS -ALMIGHTY -ALMOND -ALMONDS -ALMONER -ALMOST -ALMS -ALMSMAN -ALNICO -ALOE -ALOES -ALOFT -ALOHA -ALONE -ALONENESS -ALONG -ALONGSIDE -ALOOF -ALOOFNESS -ALOUD -ALPERT -ALPHA -ALPHABET -ALPHABETIC -ALPHABETICAL -ALPHABETICALLY -ALPHABETICS -ALPHABETIZE -ALPHABETIZED -ALPHABETIZES -ALPHABETIZING -ALPHABETS -ALPHANUMERIC -ALPHERATZ -ALPHONSE -ALPINE -ALPS -ALREADY -ALSATIAN -ALSATIANS -ALSO -ALSOP -ALTAIR -ALTAR -ALTARS -ALTER -ALTERABLE -ALTERATION -ALTERATIONS -ALTERCATION -ALTERCATIONS -ALTERED -ALTERER -ALTERERS -ALTERING -ALTERNATE -ALTERNATED -ALTERNATELY -ALTERNATES -ALTERNATING -ALTERNATION -ALTERNATIONS -ALTERNATIVE -ALTERNATIVELY -ALTERNATIVES -ALTERNATOR -ALTERNATORS -ALTERS -ALTHAEA -ALTHOUGH -ALTITUDE -ALTITUDES -ALTOGETHER -ALTON -ALTOS -ALTRUISM -ALTRUIST -ALTRUISTIC -ALTRUISTICALLY -ALUM -ALUMINUM -ALUMNA -ALUMNAE -ALUMNI -ALUMNUS -ALUNDUM -ALVA -ALVAREZ -ALVEOLAR -ALVEOLI -ALVEOLUS -ALVIN -ALWAYS -ALYSSA -AMADEUS -AMAIN -AMALGAM -AMALGAMATE -AMALGAMATED -AMALGAMATES -AMALGAMATING -AMALGAMATION -AMALGAMS -AMANDA -AMANUENSIS -AMARETTO -AMARILLO -AMASS -AMASSED -AMASSES -AMASSING -AMATEUR -AMATEURISH -AMATEURISHNESS -AMATEURISM -AMATEURS -AMATORY -AMAZE -AMAZED -AMAZEDLY -AMAZEMENT -AMAZER -AMAZERS -AMAZES -AMAZING -AMAZINGLY -AMAZON -AMAZONS -AMBASSADOR -AMBASSADORS -AMBER -AMBIANCE -AMBIDEXTROUS -AMBIDEXTROUSLY -AMBIENT -AMBIGUITIES -AMBIGUITY -AMBIGUOUS -AMBIGUOUSLY -AMBITION -AMBITIONS -AMBITIOUS -AMBITIOUSLY -AMBIVALENCE -AMBIVALENT -AMBIVALENTLY -AMBLE -AMBLED -AMBLER -AMBLES -AMBLING -AMBROSIAL -AMBULANCE -AMBULANCES -AMBULATORY -AMBUSCADE -AMBUSH -AMBUSHED -AMBUSHES -AMDAHL -AMELIA -AMELIORATE -AMELIORATED -AMELIORATING -AMELIORATION -AMEN -AMENABLE -AMEND -AMENDED -AMENDING -AMENDMENT -AMENDMENTS -AMENDS -AMENITIES -AMENITY -AMENORRHEA -AMERADA -AMERICA -AMERICAN -AMERICANA -AMERICANISM -AMERICANIZATION -AMERICANIZATIONS -AMERICANIZE -AMERICANIZER -AMERICANIZERS -AMERICANIZES -AMERICANS -AMERICAS -AMERICIUM -AMES -AMHARIC -AMHERST -AMIABLE -AMICABLE -AMICABLY -AMID -AMIDE -AMIDST -AMIGA -AMIGO -AMINO -AMISS -AMITY -AMMAN -AMMERMAN -AMMO -AMMONIA -AMMONIAC -AMMONIUM -AMMUNITION -AMNESTY -AMOCO -AMOEBA -AMOEBAE -AMOEBAS -AMOK -AMONG -AMONGST -AMONTILLADO -AMORAL -AMORALITY -AMORIST -AMOROUS -AMORPHOUS -AMORPHOUSLY -AMORTIZE -AMORTIZED -AMORTIZES -AMORTIZING -AMOS -AMOUNT -AMOUNTED -AMOUNTER -AMOUNTERS -AMOUNTING -AMOUNTS -AMOUR -AMPERAGE -AMPERE -AMPERES -AMPERSAND -AMPERSANDS -AMPEX -AMPHETAMINE -AMPHETAMINES -AMPHIBIAN -AMPHIBIANS -AMPHIBIOUS -AMPHIBIOUSLY -AMPHIBOLOGY -AMPHITHEATER -AMPHITHEATERS -AMPLE -AMPLIFICATION -AMPLIFIED -AMPLIFIER -AMPLIFIERS -AMPLIFIES -AMPLIFY -AMPLIFYING -AMPLITUDE -AMPLITUDES -AMPLY -AMPOULE -AMPOULES -AMPUTATE -AMPUTATED -AMPUTATES -AMPUTATING -AMSTERDAM -AMTRAK -AMULET -AMULETS -AMUSE -AMUSED -AMUSEDLY -AMUSEMENT -AMUSEMENTS -AMUSER -AMUSERS -AMUSES -AMUSING -AMUSINGLY -AMY -AMYL -ANABAPTIST -ANABAPTISTS -ANABEL -ANACHRONISM -ANACHRONISMS -ANACHRONISTICALLY -ANACONDA -ANACONDAS -ANACREON -ANAEROBIC -ANAGRAM -ANAGRAMS -ANAHEIM -ANAL -ANALECTS -ANALOG -ANALOGICAL -ANALOGIES -ANALOGOUS -ANALOGOUSLY -ANALOGUE -ANALOGUES -ANALOGY -ANALYSES -ANALYSIS -ANALYST -ANALYSTS -ANALYTIC -ANALYTICAL -ANALYTICALLY -ANALYTICITIES -ANALYTICITY -ANALYZABLE -ANALYZE -ANALYZED -ANALYZER -ANALYZERS -ANALYZES -ANALYZING -ANAPHORA -ANAPHORIC -ANAPHORICALLY -ANAPLASMOSIS -ANARCHIC -ANARCHICAL -ANARCHISM -ANARCHIST -ANARCHISTS -ANARCHY -ANASTASIA -ANASTOMOSES -ANASTOMOSIS -ANASTOMOTIC -ANATHEMA -ANATOLE -ANATOLIA -ANATOLIAN -ANATOMIC -ANATOMICAL -ANATOMICALLY -ANATOMY -ANCESTOR -ANCESTORS -ANCESTRAL -ANCESTRY -ANCHOR -ANCHORAGE -ANCHORAGES -ANCHORED -ANCHORING -ANCHORITE -ANCHORITISM -ANCHORS -ANCHOVIES -ANCHOVY -ANCIENT -ANCIENTLY -ANCIENTS -ANCILLARY -AND -ANDALUSIA -ANDALUSIAN -ANDALUSIANS -ANDEAN -ANDERS -ANDERSEN -ANDERSON -ANDES -ANDING -ANDORRA -ANDOVER -ANDRE -ANDREA -ANDREI -ANDREW -ANDREWS -ANDROMACHE -ANDROMEDA -ANDY -ANECDOTAL -ANECDOTE -ANECDOTES -ANECHOIC -ANEMIA -ANEMIC -ANEMOMETER -ANEMOMETERS -ANEMOMETRY -ANEMONE -ANESTHESIA -ANESTHETIC -ANESTHETICALLY -ANESTHETICS -ANESTHETIZE -ANESTHETIZED -ANESTHETIZES -ANESTHETIZING -ANEW -ANGEL -ANGELA -ANGELENO -ANGELENOS -ANGELES -ANGELIC -ANGELICA -ANGELINA -ANGELINE -ANGELO -ANGELS -ANGER -ANGERED -ANGERING -ANGERS -ANGIE -ANGIOGRAPHY -ANGLE -ANGLED -ANGLER -ANGLERS -ANGLES -ANGLIA -ANGLICAN -ANGLICANISM -ANGLICANIZE -ANGLICANIZES -ANGLICANS -ANGLING -ANGLO -ANGLOPHILIA -ANGLOPHOBIA -ANGOLA -ANGORA -ANGRIER -ANGRIEST -ANGRILY -ANGRY -ANGST -ANGSTROM -ANGUISH -ANGUISHED -ANGULAR -ANGULARLY -ANGUS -ANHEUSER -ANHYDROUS -ANHYDROUSLY -ANILINE -ANIMAL -ANIMALS -ANIMATE -ANIMATED -ANIMATEDLY -ANIMATELY -ANIMATENESS -ANIMATES -ANIMATING -ANIMATION -ANIMATIONS -ANIMATOR -ANIMATORS -ANIMISM -ANIMIZED -ANIMOSITY -ANION -ANIONIC -ANIONS -ANISE -ANISEIKONIC -ANISOTROPIC -ANISOTROPY -ANITA -ANKARA -ANKLE -ANKLES -ANN -ANNA -ANNAL -ANNALIST -ANNALISTIC -ANNALS -ANNAPOLIS -ANNE -ANNETTE -ANNEX -ANNEXATION -ANNEXED -ANNEXES -ANNEXING -ANNIE -ANNIHILATE -ANNIHILATED -ANNIHILATES -ANNIHILATING -ANNIHILATION -ANNIVERSARIES -ANNIVERSARY -ANNOTATE -ANNOTATED -ANNOTATES -ANNOTATING -ANNOTATION -ANNOTATIONS -ANNOUNCE -ANNOUNCED -ANNOUNCEMENT -ANNOUNCEMENTS -ANNOUNCER -ANNOUNCERS -ANNOUNCES -ANNOUNCING -ANNOY -ANNOYANCE -ANNOYANCES -ANNOYED -ANNOYER -ANNOYERS -ANNOYING -ANNOYINGLY -ANNOYS -ANNUAL -ANNUALLY -ANNUALS -ANNUITY -ANNUL -ANNULAR -ANNULI -ANNULLED -ANNULLING -ANNULMENT -ANNULMENTS -ANNULS -ANNULUS -ANNUM -ANNUNCIATE -ANNUNCIATED -ANNUNCIATES -ANNUNCIATING -ANNUNCIATOR -ANNUNCIATORS -ANODE -ANODES -ANODIZE -ANODIZED -ANODIZES -ANOINT -ANOINTED -ANOINTING -ANOINTS -ANOMALIES -ANOMALOUS -ANOMALOUSLY -ANOMALY -ANOMIC -ANOMIE -ANON -ANONYMITY -ANONYMOUS -ANONYMOUSLY -ANOREXIA -ANOTHER -ANSELM -ANSELMO -ANSI -ANSWER -ANSWERABLE -ANSWERED -ANSWERER -ANSWERERS -ANSWERING -ANSWERS -ANT -ANTAEUS -ANTAGONISM -ANTAGONISMS -ANTAGONIST -ANTAGONISTIC -ANTAGONISTICALLY -ANTAGONISTS -ANTAGONIZE -ANTAGONIZED -ANTAGONIZES -ANTAGONIZING -ANTARCTIC -ANTARCTICA -ANTARES -ANTE -ANTEATER -ANTEATERS -ANTECEDENT -ANTECEDENTS -ANTEDATE -ANTELOPE -ANTELOPES -ANTENNA -ANTENNAE -ANTENNAS -ANTERIOR -ANTHEM -ANTHEMS -ANTHER -ANTHOLOGIES -ANTHOLOGY -ANTHONY -ANTHRACITE -ANTHROPOLOGICAL -ANTHROPOLOGICALLY -ANTHROPOLOGIST -ANTHROPOLOGISTS -ANTHROPOLOGY -ANTHROPOMORPHIC -ANTHROPOMORPHICALLY -ANTI -ANTIBACTERIAL -ANTIBIOTIC -ANTIBIOTICS -ANTIBODIES -ANTIBODY -ANTIC -ANTICIPATE -ANTICIPATED -ANTICIPATES -ANTICIPATING -ANTICIPATION -ANTICIPATIONS -ANTICIPATORY -ANTICOAGULATION -ANTICOMPETITIVE -ANTICS -ANTIDISESTABLISHMENTARIANISM -ANTIDOTE -ANTIDOTES -ANTIETAM -ANTIFORMANT -ANTIFUNDAMENTALIST -ANTIGEN -ANTIGENS -ANTIGONE -ANTIHISTORICAL -ANTILLES -ANTIMICROBIAL -ANTIMONY -ANTINOMIAN -ANTINOMY -ANTIOCH -ANTIPATHY -ANTIPHONAL -ANTIPODE -ANTIPODES -ANTIQUARIAN -ANTIQUARIANS -ANTIQUATE -ANTIQUATED -ANTIQUE -ANTIQUES -ANTIQUITIES -ANTIQUITY -ANTIREDEPOSITION -ANTIRESONANCE -ANTIRESONATOR -ANTISEMITIC -ANTISEMITISM -ANTISEPTIC -ANTISERA -ANTISERUM -ANTISLAVERY -ANTISOCIAL -ANTISUBMARINE -ANTISYMMETRIC -ANTISYMMETRY -ANTITHESIS -ANTITHETICAL -ANTITHYROID -ANTITOXIN -ANTITOXINS -ANTITRUST -ANTLER -ANTLERED -ANTOINE -ANTOINETTE -ANTON -ANTONIO -ANTONOVICS -ANTONY -ANTS -ANTWERP -ANUS -ANVIL -ANVILS -ANXIETIES -ANXIETY -ANXIOUS -ANXIOUSLY -ANY -ANYBODY -ANYHOW -ANYMORE -ANYONE -ANYPLACE -ANYTHING -ANYTIME -ANYWAY -ANYWHERE -AORTA -APACE -APACHES -APALACHICOLA -APART -APARTMENT -APARTMENTS -APATHETIC -APATHY -APE -APED -APERIODIC -APERIODICITY -APERTURE -APES -APETALOUS -APEX -APHASIA -APHASIC -APHELION -APHID -APHIDS -APHONIC -APHORISM -APHORISMS -APHRODITE -APIARIES -APIARY -APICAL -APIECE -APING -APISH -APLENTY -APLOMB -APOCALYPSE -APOCALYPTIC -APOCRYPHA -APOCRYPHAL -APOGEE -APOGEES -APOLLINAIRE -APOLLO -APOLLONIAN -APOLOGETIC -APOLOGETICALLY -APOLOGIA -APOLOGIES -APOLOGIST -APOLOGISTS -APOLOGIZE -APOLOGIZED -APOLOGIZES -APOLOGIZING -APOLOGY -APOSTATE -APOSTLE -APOSTLES -APOSTOLIC -APOSTROPHE -APOSTROPHES -APOTHECARY -APOTHEGM -APOTHEOSES -APOTHEOSIS -APPALACHIA -APPALACHIAN -APPALACHIANS -APPALL -APPALLED -APPALLING -APPALLINGLY -APPALOOSAS -APPANAGE -APPARATUS -APPAREL -APPARELED -APPARENT -APPARENTLY -APPARITION -APPARITIONS -APPEAL -APPEALED -APPEALER -APPEALERS -APPEALING -APPEALINGLY -APPEALS -APPEAR -APPEARANCE -APPEARANCES -APPEARED -APPEARER -APPEARERS -APPEARING -APPEARS -APPEASE -APPEASED -APPEASEMENT -APPEASES -APPEASING -APPELLANT -APPELLANTS -APPELLATE -APPELLATION -APPEND -APPENDAGE -APPENDAGES -APPENDED -APPENDER -APPENDERS -APPENDICES -APPENDICITIS -APPENDING -APPENDIX -APPENDIXES -APPENDS -APPERTAIN -APPERTAINS -APPETITE -APPETITES -APPETIZER -APPETIZING -APPIA -APPIAN -APPLAUD -APPLAUDED -APPLAUDING -APPLAUDS -APPLAUSE -APPLE -APPLEBY -APPLEJACK -APPLES -APPLETON -APPLIANCE -APPLIANCES -APPLICABILITY -APPLICABLE -APPLICANT -APPLICANTS -APPLICATION -APPLICATIONS -APPLICATIVE -APPLICATIVELY -APPLICATOR -APPLICATORS -APPLIED -APPLIER -APPLIERS -APPLIES -APPLIQUE -APPLY -APPLYING -APPOINT -APPOINTED -APPOINTEE -APPOINTEES -APPOINTER -APPOINTERS -APPOINTING -APPOINTIVE -APPOINTMENT -APPOINTMENTS -APPOINTS -APPOMATTOX -APPORTION -APPORTIONED -APPORTIONING -APPORTIONMENT -APPORTIONMENTS -APPORTIONS -APPOSITE -APPRAISAL -APPRAISALS -APPRAISE -APPRAISED -APPRAISER -APPRAISERS -APPRAISES -APPRAISING -APPRAISINGLY -APPRECIABLE -APPRECIABLY -APPRECIATE -APPRECIATED -APPRECIATES -APPRECIATING -APPRECIATION -APPRECIATIONS -APPRECIATIVE -APPRECIATIVELY -APPREHEND -APPREHENDED -APPREHENSIBLE -APPREHENSION -APPREHENSIONS -APPREHENSIVE -APPREHENSIVELY -APPREHENSIVENESS -APPRENTICE -APPRENTICED -APPRENTICES -APPRENTICESHIP -APPRISE -APPRISED -APPRISES -APPRISING -APPROACH -APPROACHABILITY -APPROACHABLE -APPROACHED -APPROACHER -APPROACHERS -APPROACHES -APPROACHING -APPROBATE -APPROBATION -APPROPRIATE -APPROPRIATED -APPROPRIATELY -APPROPRIATENESS -APPROPRIATES -APPROPRIATING -APPROPRIATION -APPROPRIATIONS -APPROPRIATOR -APPROPRIATORS -APPROVAL -APPROVALS -APPROVE -APPROVED -APPROVER -APPROVERS -APPROVES -APPROVING -APPROVINGLY -APPROXIMATE -APPROXIMATED -APPROXIMATELY -APPROXIMATES -APPROXIMATING -APPROXIMATION -APPROXIMATIONS -APPURTENANCE -APPURTENANCES -APRICOT -APRICOTS -APRIL -APRILS -APRON -APRONS -APROPOS -APSE -APSIS -APT -APTITUDE -APTITUDES -APTLY -APTNESS -AQUA -AQUARIA -AQUARIUM -AQUARIUS -AQUATIC -AQUEDUCT -AQUEDUCTS -AQUEOUS -AQUIFER -AQUIFERS -AQUILA -AQUINAS -ARAB -ARABESQUE -ARABIA -ARABIAN -ARABIANIZE -ARABIANIZES -ARABIANS -ARABIC -ARABICIZE -ARABICIZES -ARABLE -ARABS -ARABY -ARACHNE -ARACHNID -ARACHNIDS -ARAMCO -ARAPAHO -ARBITER -ARBITERS -ARBITRARILY -ARBITRARINESS -ARBITRARY -ARBITRATE -ARBITRATED -ARBITRATES -ARBITRATING -ARBITRATION -ARBITRATOR -ARBITRATORS -ARBOR -ARBOREAL -ARBORS -ARC -ARCADE -ARCADED -ARCADES -ARCADIA -ARCADIAN -ARCANE -ARCED -ARCH -ARCHAIC -ARCHAICALLY -ARCHAICNESS -ARCHAISM -ARCHAIZE -ARCHANGEL -ARCHANGELS -ARCHBISHOP -ARCHDIOCESE -ARCHDIOCESES -ARCHED -ARCHENEMY -ARCHEOLOGICAL -ARCHEOLOGIST -ARCHEOLOGY -ARCHER -ARCHERS -ARCHERY -ARCHES -ARCHETYPE -ARCHFOOL -ARCHIBALD -ARCHIE -ARCHIMEDES -ARCHING -ARCHIPELAGO -ARCHIPELAGOES -ARCHITECT -ARCHITECTONIC -ARCHITECTS -ARCHITECTURAL -ARCHITECTURALLY -ARCHITECTURE -ARCHITECTURES -ARCHIVAL -ARCHIVE -ARCHIVED -ARCHIVER -ARCHIVERS -ARCHIVES -ARCHIVING -ARCHIVIST -ARCHLY -ARCING -ARCLIKE -ARCO -ARCS -ARCSINE -ARCTANGENT -ARCTIC -ARCTURUS -ARDEN -ARDENT -ARDENTLY -ARDOR -ARDUOUS -ARDUOUSLY -ARDUOUSNESS -ARE -AREA -AREAS -ARENA -ARENAS -AREQUIPA -ARES -ARGENTINA -ARGENTINIAN -ARGIVE -ARGO -ARGON -ARGONAUT -ARGONAUTS -ARGONNE -ARGOS -ARGOT -ARGUABLE -ARGUABLY -ARGUE -ARGUED -ARGUER -ARGUERS -ARGUES -ARGUING -ARGUMENT -ARGUMENTATION -ARGUMENTATIVE -ARGUMENTS -ARGUS -ARIADNE -ARIANISM -ARIANIST -ARIANISTS -ARID -ARIDITY -ARIES -ARIGHT -ARISE -ARISEN -ARISER -ARISES -ARISING -ARISINGS -ARISTOCRACY -ARISTOCRAT -ARISTOCRATIC -ARISTOCRATICALLY -ARISTOCRATS -ARISTOTELIAN -ARISTOTLE -ARITHMETIC -ARITHMETICAL -ARITHMETICALLY -ARITHMETICS -ARITHMETIZE -ARITHMETIZED -ARITHMETIZES -ARIZONA -ARK -ARKANSAN -ARKANSAS -ARLEN -ARLENE -ARLINGTON -ARM -ARMADA -ARMADILLO -ARMADILLOS -ARMAGEDDON -ARMAGNAC -ARMAMENT -ARMAMENTS -ARMATA -ARMCHAIR -ARMCHAIRS -ARMCO -ARMED -ARMENIA -ARMENIAN -ARMER -ARMERS -ARMFUL -ARMHOLE -ARMIES -ARMING -ARMISTICE -ARMLOAD -ARMONK -ARMOR -ARMORED -ARMORER -ARMORY -ARMOUR -ARMPIT -ARMPITS -ARMS -ARMSTRONG -ARMY -ARNOLD -AROMA -AROMAS -AROMATIC -AROSE -AROUND -AROUSAL -AROUSE -AROUSED -AROUSES -AROUSING -ARPA -ARPANET -ARPANET -ARPEGGIO -ARPEGGIOS -ARRACK -ARRAGON -ARRAIGN -ARRAIGNED -ARRAIGNING -ARRAIGNMENT -ARRAIGNMENTS -ARRAIGNS -ARRANGE -ARRANGED -ARRANGEMENT -ARRANGEMENTS -ARRANGER -ARRANGERS -ARRANGES -ARRANGING -ARRANT -ARRAY -ARRAYED -ARRAYS -ARREARS -ARREST -ARRESTED -ARRESTER -ARRESTERS -ARRESTING -ARRESTINGLY -ARRESTOR -ARRESTORS -ARRESTS -ARRHENIUS -ARRIVAL -ARRIVALS -ARRIVE -ARRIVED -ARRIVES -ARRIVING -ARROGANCE -ARROGANT -ARROGANTLY -ARROGATE -ARROGATED -ARROGATES -ARROGATING -ARROGATION -ARROW -ARROWED -ARROWHEAD -ARROWHEADS -ARROWS -ARROYO -ARROYOS -ARSENAL -ARSENALS -ARSENIC -ARSINE -ARSON -ART -ARTEMIA -ARTEMIS -ARTERIAL -ARTERIES -ARTERIOLAR -ARTERIOLE -ARTERIOLES -ARTERIOSCLEROSIS -ARTERY -ARTFUL -ARTFULLY -ARTFULNESS -ARTHRITIS -ARTHROPOD -ARTHROPODS -ARTHUR -ARTICHOKE -ARTICHOKES -ARTICLE -ARTICLES -ARTICULATE -ARTICULATED -ARTICULATELY -ARTICULATENESS -ARTICULATES -ARTICULATING -ARTICULATION -ARTICULATIONS -ARTICULATOR -ARTICULATORS -ARTICULATORY -ARTIE -ARTIFACT -ARTIFACTS -ARTIFICE -ARTIFICER -ARTIFICES -ARTIFICIAL -ARTIFICIALITIES -ARTIFICIALITY -ARTIFICIALLY -ARTIFICIALNESS -ARTILLERIST -ARTILLERY -ARTISAN -ARTISANS -ARTIST -ARTISTIC -ARTISTICALLY -ARTISTRY -ARTISTS -ARTLESS -ARTS -ARTURO -ARTWORK -ARUBA -ARYAN -ARYANS -ASBESTOS -ASCEND -ASCENDANCY -ASCENDANT -ASCENDED -ASCENDENCY -ASCENDENT -ASCENDER -ASCENDERS -ASCENDING -ASCENDS -ASCENSION -ASCENSIONS -ASCENT -ASCERTAIN -ASCERTAINABLE -ASCERTAINED -ASCERTAINING -ASCERTAINS -ASCETIC -ASCETICISM -ASCETICS -ASCII -ASCOT -ASCRIBABLE -ASCRIBE -ASCRIBED -ASCRIBES -ASCRIBING -ASCRIPTION -ASEPTIC -ASH -ASHAMED -ASHAMEDLY -ASHEN -ASHER -ASHES -ASHEVILLE -ASHLAND -ASHLEY -ASHMAN -ASHMOLEAN -ASHORE -ASHTRAY -ASHTRAYS -ASIA -ASIAN -ASIANS -ASIATIC -ASIATICIZATION -ASIATICIZATIONS -ASIATICIZE -ASIATICIZES -ASIATICS -ASIDE -ASILOMAR -ASININE -ASK -ASKANCE -ASKED -ASKER -ASKERS -ASKEW -ASKING -ASKS -ASLEEP -ASOCIAL -ASP -ASPARAGUS -ASPECT -ASPECTS -ASPEN -ASPERSION -ASPERSIONS -ASPHALT -ASPHYXIA -ASPIC -ASPIRANT -ASPIRANTS -ASPIRATE -ASPIRATED -ASPIRATES -ASPIRATING -ASPIRATION -ASPIRATIONS -ASPIRATOR -ASPIRATORS -ASPIRE -ASPIRED -ASPIRES -ASPIRIN -ASPIRING -ASPIRINS -ASS -ASSAIL -ASSAILANT -ASSAILANTS -ASSAILED -ASSAILING -ASSAILS -ASSAM -ASSASSIN -ASSASSINATE -ASSASSINATED -ASSASSINATES -ASSASSINATING -ASSASSINATION -ASSASSINATIONS -ASSASSINS -ASSAULT -ASSAULTED -ASSAULTING -ASSAULTS -ASSAY -ASSAYED -ASSAYING -ASSEMBLAGE -ASSEMBLAGES -ASSEMBLE -ASSEMBLED -ASSEMBLER -ASSEMBLERS -ASSEMBLES -ASSEMBLIES -ASSEMBLING -ASSEMBLY -ASSENT -ASSENTED -ASSENTER -ASSENTING -ASSENTS -ASSERT -ASSERTED -ASSERTER -ASSERTERS -ASSERTING -ASSERTION -ASSERTIONS -ASSERTIVE -ASSERTIVELY -ASSERTIVENESS -ASSERTS -ASSES -ASSESS -ASSESSED -ASSESSES -ASSESSING -ASSESSMENT -ASSESSMENTS -ASSESSOR -ASSESSORS -ASSET -ASSETS -ASSIDUITY -ASSIDUOUS -ASSIDUOUSLY -ASSIGN -ASSIGNABLE -ASSIGNED -ASSIGNEE -ASSIGNEES -ASSIGNER -ASSIGNERS -ASSIGNING -ASSIGNMENT -ASSIGNMENTS -ASSIGNS -ASSIMILATE -ASSIMILATED -ASSIMILATES -ASSIMILATING -ASSIMILATION -ASSIMILATIONS -ASSIST -ASSISTANCE -ASSISTANCES -ASSISTANT -ASSISTANTS -ASSISTANTSHIP -ASSISTANTSHIPS -ASSISTED -ASSISTING -ASSISTS -ASSOCIATE -ASSOCIATED -ASSOCIATES -ASSOCIATING -ASSOCIATION -ASSOCIATIONAL -ASSOCIATIONS -ASSOCIATIVE -ASSOCIATIVELY -ASSOCIATIVITY -ASSOCIATOR -ASSOCIATORS -ASSONANCE -ASSONANT -ASSORT -ASSORTED -ASSORTMENT -ASSORTMENTS -ASSORTS -ASSUAGE -ASSUAGED -ASSUAGES -ASSUME -ASSUMED -ASSUMES -ASSUMING -ASSUMPTION -ASSUMPTIONS -ASSURANCE -ASSURANCES -ASSURE -ASSURED -ASSUREDLY -ASSURER -ASSURERS -ASSURES -ASSURING -ASSURINGLY -ASSYRIA -ASSYRIAN -ASSYRIANIZE -ASSYRIANIZES -ASSYRIOLOGY -ASTAIRE -ASTAIRES -ASTARTE -ASTATINE -ASTER -ASTERISK -ASTERISKS -ASTEROID -ASTEROIDAL -ASTEROIDS -ASTERS -ASTHMA -ASTON -ASTONISH -ASTONISHED -ASTONISHES -ASTONISHING -ASTONISHINGLY -ASTONISHMENT -ASTOR -ASTORIA -ASTOUND -ASTOUNDED -ASTOUNDING -ASTOUNDS -ASTRAL -ASTRAY -ASTRIDE -ASTRINGENCY -ASTRINGENT -ASTROLOGY -ASTRONAUT -ASTRONAUTICS -ASTRONAUTS -ASTRONOMER -ASTRONOMERS -ASTRONOMICAL -ASTRONOMICALLY -ASTRONOMY -ASTROPHYSICAL -ASTROPHYSICS -ASTUTE -ASTUTELY -ASTUTENESS -ASUNCION -ASUNDER -ASYLUM -ASYMMETRIC -ASYMMETRICALLY -ASYMMETRY -ASYMPTOMATICALLY -ASYMPTOTE -ASYMPTOTES -ASYMPTOTIC -ASYMPTOTICALLY -ASYNCHRONISM -ASYNCHRONOUS -ASYNCHRONOUSLY -ASYNCHRONY -ATALANTA -ATARI -ATAVISTIC -ATCHISON -ATE -ATEMPORAL -ATHABASCAN -ATHEISM -ATHEIST -ATHEISTIC -ATHEISTS -ATHENA -ATHENIAN -ATHENIANS -ATHENS -ATHEROSCLEROSIS -ATHLETE -ATHLETES -ATHLETIC -ATHLETICISM -ATHLETICS -ATKINS -ATKINSON -ATLANTA -ATLANTIC -ATLANTICA -ATLANTIS -ATLAS -ATMOSPHERE -ATMOSPHERES -ATMOSPHERIC -ATOLL -ATOLLS -ATOM -ATOMIC -ATOMICALLY -ATOMICS -ATOMIZATION -ATOMIZE -ATOMIZED -ATOMIZES -ATOMIZING -ATOMS -ATONAL -ATONALLY -ATONE -ATONED -ATONEMENT -ATONES -ATOP -ATREUS -ATROCIOUS -ATROCIOUSLY -ATROCITIES -ATROCITY -ATROPHIC -ATROPHIED -ATROPHIES -ATROPHY -ATROPHYING -ATROPOS -ATTACH -ATTACHE -ATTACHED -ATTACHER -ATTACHERS -ATTACHES -ATTACHING -ATTACHMENT -ATTACHMENTS -ATTACK -ATTACKABLE -ATTACKED -ATTACKER -ATTACKERS -ATTACKING -ATTACKS -ATTAIN -ATTAINABLE -ATTAINABLY -ATTAINED -ATTAINER -ATTAINERS -ATTAINING -ATTAINMENT -ATTAINMENTS -ATTAINS -ATTEMPT -ATTEMPTED -ATTEMPTER -ATTEMPTERS -ATTEMPTING -ATTEMPTS -ATTEND -ATTENDANCE -ATTENDANCES -ATTENDANT -ATTENDANTS -ATTENDED -ATTENDEE -ATTENDEES -ATTENDER -ATTENDERS -ATTENDING -ATTENDS -ATTENTION -ATTENTIONAL -ATTENTIONALITY -ATTENTIONS -ATTENTIVE -ATTENTIVELY -ATTENTIVENESS -ATTENUATE -ATTENUATED -ATTENUATES -ATTENUATING -ATTENUATION -ATTENUATOR -ATTENUATORS -ATTEST -ATTESTED -ATTESTING -ATTESTS -ATTIC -ATTICA -ATTICS -ATTIRE -ATTIRED -ATTIRES -ATTIRING -ATTITUDE -ATTITUDES -ATTITUDINAL -ATTLEE -ATTORNEY -ATTORNEYS -ATTRACT -ATTRACTED -ATTRACTING -ATTRACTION -ATTRACTIONS -ATTRACTIVE -ATTRACTIVELY -ATTRACTIVENESS -ATTRACTOR -ATTRACTORS -ATTRACTS -ATTRIBUTABLE -ATTRIBUTE -ATTRIBUTED -ATTRIBUTES -ATTRIBUTING -ATTRIBUTION -ATTRIBUTIONS -ATTRIBUTIVE -ATTRIBUTIVELY -ATTRITION -ATTUNE -ATTUNED -ATTUNES -ATTUNING -ATWATER -ATWOOD -ATYPICAL -ATYPICALLY -AUBERGE -AUBREY -AUBURN -AUCKLAND -AUCTION -AUCTIONEER -AUCTIONEERS -AUDACIOUS -AUDACIOUSLY -AUDACIOUSNESS -AUDACITY -AUDIBLE -AUDIBLY -AUDIENCE -AUDIENCES -AUDIO -AUDIOGRAM -AUDIOGRAMS -AUDIOLOGICAL -AUDIOLOGIST -AUDIOLOGISTS -AUDIOLOGY -AUDIOMETER -AUDIOMETERS -AUDIOMETRIC -AUDIOMETRY -AUDIT -AUDITED -AUDITING -AUDITION -AUDITIONED -AUDITIONING -AUDITIONS -AUDITOR -AUDITORIUM -AUDITORS -AUDITORY -AUDITS -AUDREY -AUDUBON -AUERBACH -AUGEAN -AUGER -AUGERS -AUGHT -AUGMENT -AUGMENTATION -AUGMENTED -AUGMENTING -AUGMENTS -AUGUR -AUGURS -AUGUST -AUGUSTA -AUGUSTAN -AUGUSTINE -AUGUSTLY -AUGUSTNESS -AUGUSTUS -AUNT -AUNTS -AURA -AURAL -AURALLY -AURAS -AURELIUS -AUREOLE -AUREOMYCIN -AURIGA -AURORA -AUSCHWITZ -AUSCULTATE -AUSCULTATED -AUSCULTATES -AUSCULTATING -AUSCULTATION -AUSCULTATIONS -AUSPICE -AUSPICES -AUSPICIOUS -AUSPICIOUSLY -AUSTERE -AUSTERELY -AUSTERITY -AUSTIN -AUSTRALIA -AUSTRALIAN -AUSTRALIANIZE -AUSTRALIANIZES -AUSTRALIS -AUSTRIA -AUSTRIAN -AUSTRIANIZE -AUSTRIANIZES -AUTHENTIC -AUTHENTICALLY -AUTHENTICATE -AUTHENTICATED -AUTHENTICATES -AUTHENTICATING -AUTHENTICATION -AUTHENTICATIONS -AUTHENTICATOR -AUTHENTICATORS -AUTHENTICITY -AUTHOR -AUTHORED -AUTHORING -AUTHORITARIAN -AUTHORITARIANISM -AUTHORITATIVE -AUTHORITATIVELY -AUTHORITIES -AUTHORITY -AUTHORIZATION -AUTHORIZATIONS -AUTHORIZE -AUTHORIZED -AUTHORIZER -AUTHORIZERS -AUTHORIZES -AUTHORIZING -AUTHORS -AUTHORSHIP -AUTISM -AUTISTIC -AUTO -AUTOBIOGRAPHIC -AUTOBIOGRAPHICAL -AUTOBIOGRAPHIES -AUTOBIOGRAPHY -AUTOCOLLIMATOR -AUTOCORRELATE -AUTOCORRELATION -AUTOCRACIES -AUTOCRACY -AUTOCRAT -AUTOCRATIC -AUTOCRATICALLY -AUTOCRATS -AUTODECREMENT -AUTODECREMENTED -AUTODECREMENTS -AUTODIALER -AUTOFLUORESCENCE -AUTOGRAPH -AUTOGRAPHED -AUTOGRAPHING -AUTOGRAPHS -AUTOINCREMENT -AUTOINCREMENTED -AUTOINCREMENTS -AUTOINDEX -AUTOINDEXING -AUTOMATA -AUTOMATE -AUTOMATED -AUTOMATES -AUTOMATIC -AUTOMATICALLY -AUTOMATING -AUTOMATION -AUTOMATON -AUTOMOBILE -AUTOMOBILES -AUTOMOTIVE -AUTONAVIGATOR -AUTONAVIGATORS -AUTONOMIC -AUTONOMOUS -AUTONOMOUSLY -AUTONOMY -AUTOPILOT -AUTOPILOTS -AUTOPSIED -AUTOPSIES -AUTOPSY -AUTOREGRESSIVE -AUTOS -AUTOSUGGESTIBILITY -AUTOTRANSFORMER -AUTUMN -AUTUMNAL -AUTUMNS -AUXILIARIES -AUXILIARY -AVAIL -AVAILABILITIES -AVAILABILITY -AVAILABLE -AVAILABLY -AVAILED -AVAILER -AVAILERS -AVAILING -AVAILS -AVALANCHE -AVALANCHED -AVALANCHES -AVALANCHING -AVANT -AVARICE -AVARICIOUS -AVARICIOUSLY -AVENGE -AVENGED -AVENGER -AVENGES -AVENGING -AVENTINE -AVENTINO -AVENUE -AVENUES -AVER -AVERAGE -AVERAGED -AVERAGES -AVERAGING -AVERNUS -AVERRED -AVERRER -AVERRING -AVERS -AVERSE -AVERSION -AVERSIONS -AVERT -AVERTED -AVERTING -AVERTS -AVERY -AVESTA -AVIAN -AVIARIES -AVIARY -AVIATION -AVIATOR -AVIATORS -AVID -AVIDITY -AVIDLY -AVIGNON -AVIONIC -AVIONICS -AVIS -AVIV -AVOCADO -AVOCADOS -AVOCATION -AVOCATIONS -AVOGADRO -AVOID -AVOIDABLE -AVOIDABLY -AVOIDANCE -AVOIDED -AVOIDER -AVOIDERS -AVOIDING -AVOIDS -AVON -AVOUCH -AVOW -AVOWAL -AVOWED -AVOWS -AWAIT -AWAITED -AWAITING -AWAITS -AWAKE -AWAKEN -AWAKENED -AWAKENING -AWAKENS -AWAKES -AWAKING -AWARD -AWARDED -AWARDER -AWARDERS -AWARDING -AWARDS -AWARE -AWARENESS -AWASH -AWAY -AWE -AWED -AWESOME -AWFUL -AWFULLY -AWFULNESS -AWHILE -AWKWARD -AWKWARDLY -AWKWARDNESS -AWL -AWLS -AWNING -AWNINGS -AWOKE -AWRY -AXED -AXEL -AXER -AXERS -AXES -AXIAL -AXIALLY -AXING -AXIOLOGICAL -AXIOM -AXIOMATIC -AXIOMATICALLY -AXIOMATIZATION -AXIOMATIZATIONS -AXIOMATIZE -AXIOMATIZED -AXIOMATIZES -AXIOMATIZING -AXIOMS -AXIS -AXLE -AXLES -AXOLOTL -AXOLOTLS -AXON -AXONS -AYE -AYERS -AYES -AYLESBURY -AZALEA -AZALEAS -AZERBAIJAN -AZIMUTH -AZIMUTHS -AZORES -AZTEC -AZTECAN -AZURE -BABBAGE -BABBLE -BABBLED -BABBLES -BABBLING -BABCOCK -BABE -BABEL -BABELIZE -BABELIZES -BABES -BABIED -BABIES -BABKA -BABOON -BABOONS -BABUL -BABY -BABYHOOD -BABYING -BABYISH -BABYLON -BABYLONIAN -BABYLONIANS -BABYLONIZE -BABYLONIZES -BABYSIT -BABYSITTING -BACCALAUREATE -BACCHUS -BACH -BACHELOR -BACHELORS -BACILLI -BACILLUS -BACK -BACKACHE -BACKACHES -BACKARROW -BACKBEND -BACKBENDS -BACKBOARD -BACKBONE -BACKBONES -BACKDROP -BACKDROPS -BACKED -BACKER -BACKERS -BACKFILL -BACKFIRING -BACKGROUND -BACKGROUNDS -BACKHAND -BACKING -BACKLASH -BACKLOG -BACKLOGGED -BACKLOGS -BACKORDER -BACKPACK -BACKPACKS -BACKPLANE -BACKPLANES -BACKPLATE -BACKS -BACKSCATTER -BACKSCATTERED -BACKSCATTERING -BACKSCATTERS -BACKSIDE -BACKSLASH -BACKSLASHES -BACKSPACE -BACKSPACED -BACKSPACES -BACKSPACING -BACKSTAGE -BACKSTAIRS -BACKSTITCH -BACKSTITCHED -BACKSTITCHES -BACKSTITCHING -BACKSTOP -BACKTRACK -BACKTRACKED -BACKTRACKER -BACKTRACKERS -BACKTRACKING -BACKTRACKS -BACKUP -BACKUPS -BACKUS -BACKWARD -BACKWARDNESS -BACKWARDS -BACKWATER -BACKWATERS -BACKWOODS -BACKYARD -BACKYARDS -BACON -BACTERIA -BACTERIAL -BACTERIUM -BAD -BADE -BADEN -BADGE -BADGER -BADGERED -BADGERING -BADGERS -BADGES -BADLANDS -BADLY -BADMINTON -BADNESS -BAFFIN -BAFFLE -BAFFLED -BAFFLER -BAFFLERS -BAFFLING -BAG -BAGATELLE -BAGATELLES -BAGEL -BAGELS -BAGGAGE -BAGGED -BAGGER -BAGGERS -BAGGING -BAGGY -BAGHDAD -BAGLEY -BAGPIPE -BAGPIPES -BAGRODIA -BAGRODIAS -BAGS -BAH -BAHAMA -BAHAMAS -BAHREIN -BAIL -BAILEY -BAILEYS -BAILIFF -BAILIFFS -BAILING -BAIRD -BAIRDI -BAIRN -BAIT -BAITED -BAITER -BAITING -BAITS -BAJA -BAKE -BAKED -BAKELITE -BAKER -BAKERIES -BAKERS -BAKERSFIELD -BAKERY -BAKES -BAKHTIARI -BAKING -BAKLAVA -BAKU -BALALAIKA -BALALAIKAS -BALANCE -BALANCED -BALANCER -BALANCERS -BALANCES -BALANCING -BALBOA -BALCONIES -BALCONY -BALD -BALDING -BALDLY -BALDNESS -BALDWIN -BALE -BALEFUL -BALER -BALES -BALFOUR -BALI -BALINESE -BALK -BALKAN -BALKANIZATION -BALKANIZATIONS -BALKANIZE -BALKANIZED -BALKANIZES -BALKANIZING -BALKANS -BALKED -BALKINESS -BALKING -BALKS -BALKY -BALL -BALLAD -BALLADS -BALLARD -BALLARDS -BALLAST -BALLASTS -BALLED -BALLER -BALLERINA -BALLERINAS -BALLERS -BALLET -BALLETS -BALLGOWN -BALLING -BALLISTIC -BALLISTICS -BALLOON -BALLOONED -BALLOONER -BALLOONERS -BALLOONING -BALLOONS -BALLOT -BALLOTS -BALLPARK -BALLPARKS -BALLPLAYER -BALLPLAYERS -BALLROOM -BALLROOMS -BALLS -BALLYHOO -BALM -BALMS -BALMY -BALSA -BALSAM -BALTIC -BALTIMORE -BALTIMOREAN -BALUSTRADE -BALUSTRADES -BALZAC -BAMAKO -BAMBERGER -BAMBI -BAMBOO -BAN -BANACH -BANAL -BANALLY -BANANA -BANANAS -BANBURY -BANCROFT -BAND -BANDAGE -BANDAGED -BANDAGES -BANDAGING -BANDED -BANDIED -BANDIES -BANDING -BANDIT -BANDITS -BANDPASS -BANDS -BANDSTAND -BANDSTANDS -BANDWAGON -BANDWAGONS -BANDWIDTH -BANDWIDTHS -BANDY -BANDYING -BANE -BANEFUL -BANG -BANGED -BANGING -BANGLADESH -BANGLE -BANGLES -BANGOR -BANGS -BANGUI -BANISH -BANISHED -BANISHES -BANISHING -BANISHMENT -BANISTER -BANISTERS -BANJO -BANJOS -BANK -BANKED -BANKER -BANKERS -BANKING -BANKRUPT -BANKRUPTCIES -BANKRUPTCY -BANKRUPTED -BANKRUPTING -BANKRUPTS -BANKS -BANNED -BANNER -BANNERS -BANNING -BANQUET -BANQUETING -BANQUETINGS -BANQUETS -BANS -BANSHEE -BANSHEES -BANTAM -BANTER -BANTERED -BANTERING -BANTERS -BANTU -BANTUS -BAPTISM -BAPTISMAL -BAPTISMS -BAPTIST -BAPTISTE -BAPTISTERY -BAPTISTRIES -BAPTISTRY -BAPTISTS -BAPTIZE -BAPTIZED -BAPTIZES -BAPTIZING -BAR -BARB -BARBADOS -BARBARA -BARBARIAN -BARBARIANS -BARBARIC -BARBARISM -BARBARITIES -BARBARITY -BARBAROUS -BARBAROUSLY -BARBECUE -BARBECUED -BARBECUES -BARBED -BARBELL -BARBELLS -BARBER -BARBITAL -BARBITURATE -BARBITURATES -BARBOUR -BARBS -BARCELONA -BARCLAY -BARD -BARDS -BARE -BARED -BAREFACED -BAREFOOT -BAREFOOTED -BARELY -BARENESS -BARER -BARES -BAREST -BARFLIES -BARFLY -BARGAIN -BARGAINED -BARGAINING -BARGAINS -BARGE -BARGES -BARGING -BARHOP -BARING -BARITONE -BARITONES -BARIUM -BARK -BARKED -BARKER -BARKERS -BARKING -BARKS -BARLEY -BARLOW -BARN -BARNABAS -BARNARD -BARNES -BARNET -BARNETT -BARNEY -BARNHARD -BARNS -BARNSTORM -BARNSTORMED -BARNSTORMING -BARNSTORMS -BARNUM -BARNYARD -BARNYARDS -BAROMETER -BAROMETERS -BAROMETRIC -BARON -BARONESS -BARONIAL -BARONIES -BARONS -BARONY -BAROQUE -BAROQUENESS -BARR -BARRACK -BARRACKS -BARRAGE -BARRAGES -BARRED -BARREL -BARRELLED -BARRELLING -BARRELS -BARREN -BARRENNESS -BARRETT -BARRICADE -BARRICADES -BARRIER -BARRIERS -BARRING -BARRINGER -BARRINGTON -BARRON -BARROW -BARRY -BARRYMORE -BARRYMORES -BARS -BARSTOW -BART -BARTENDER -BARTENDERS -BARTER -BARTERED -BARTERING -BARTERS -BARTH -BARTHOLOMEW -BARTLETT -BARTOK -BARTON -BASAL -BASALT -BASCOM -BASE -BASEBALL -BASEBALLS -BASEBAND -BASEBOARD -BASEBOARDS -BASED -BASEL -BASELESS -BASELINE -BASELINES -BASELY -BASEMAN -BASEMENT -BASEMENTS -BASENESS -BASER -BASES -BASH -BASHED -BASHES -BASHFUL -BASHFULNESS -BASHING -BASIC -BASIC -BASIC -BASICALLY -BASICS -BASIE -BASIL -BASIN -BASING -BASINS -BASIS -BASK -BASKED -BASKET -BASKETBALL -BASKETBALLS -BASKETS -BASKING -BASQUE -BASS -BASSES -BASSET -BASSETT -BASSINET -BASSINETS -BASTARD -BASTARDS -BASTE -BASTED -BASTES -BASTING -BASTION -BASTIONS -BAT -BATAVIA -BATCH -BATCHED -BATCHELDER -BATCHES -BATEMAN -BATES -BATH -BATHE -BATHED -BATHER -BATHERS -BATHES -BATHING -BATHOS -BATHROBE -BATHROBES -BATHROOM -BATHROOMS -BATHS -BATHTUB -BATHTUBS -BATHURST -BATISTA -BATON -BATONS -BATOR -BATS -BATTALION -BATTALIONS -BATTED -BATTELLE -BATTEN -BATTENS -BATTER -BATTERED -BATTERIES -BATTERING -BATTERS -BATTERY -BATTING -BATTLE -BATTLED -BATTLEFIELD -BATTLEFIELDS -BATTLEFRONT -BATTLEFRONTS -BATTLEGROUND -BATTLEGROUNDS -BATTLEMENT -BATTLEMENTS -BATTLER -BATTLERS -BATTLES -BATTLESHIP -BATTLESHIPS -BATTLING -BAUBLE -BAUBLES -BAUD -BAUDELAIRE -BAUER -BAUHAUS -BAUSCH -BAUXITE -BAVARIA -BAVARIAN -BAWDY -BAWL -BAWLED -BAWLING -BAWLS -BAXTER -BAY -BAYDA -BAYED -BAYES -BAYESIAN -BAYING -BAYLOR -BAYONET -BAYONETS -BAYONNE -BAYOU -BAYOUS -BAYPORT -BAYREUTH -BAYS -BAZAAR -BAZAARS -BEACH -BEACHED -BEACHES -BEACHHEAD -BEACHHEADS -BEACHING -BEACON -BEACONS -BEAD -BEADED -BEADING -BEADLE -BEADLES -BEADS -BEADY -BEAGLE -BEAGLES -BEAK -BEAKED -BEAKER -BEAKERS -BEAKS -BEAM -BEAMED -BEAMER -BEAMERS -BEAMING -BEAMS -BEAN -BEANBAG -BEANED -BEANER -BEANERS -BEANING -BEANS -BEAR -BEARABLE -BEARABLY -BEARD -BEARDED -BEARDLESS -BEARDS -BEARDSLEY -BEARER -BEARERS -BEARING -BEARINGS -BEARISH -BEARS -BEAST -BEASTLY -BEASTS -BEAT -BEATABLE -BEATABLY -BEATEN -BEATER -BEATERS -BEATIFIC -BEATIFICATION -BEATIFY -BEATING -BEATINGS -BEATITUDE -BEATITUDES -BEATNIK -BEATNIKS -BEATRICE -BEATS -BEAU -BEAUCHAMPS -BEAUJOLAIS -BEAUMONT -BEAUREGARD -BEAUS -BEAUTEOUS -BEAUTEOUSLY -BEAUTIES -BEAUTIFICATIONS -BEAUTIFIED -BEAUTIFIER -BEAUTIFIERS -BEAUTIFIES -BEAUTIFUL -BEAUTIFULLY -BEAUTIFY -BEAUTIFYING -BEAUTY -BEAVER -BEAVERS -BEAVERTON -BECALM -BECALMED -BECALMING -BECALMS -BECAME -BECAUSE -BECHTEL -BECK -BECKER -BECKMAN -BECKON -BECKONED -BECKONING -BECKONS -BECKY -BECOME -BECOMES -BECOMING -BECOMINGLY -BED -BEDAZZLE -BEDAZZLED -BEDAZZLEMENT -BEDAZZLES -BEDAZZLING -BEDBUG -BEDBUGS -BEDDED -BEDDER -BEDDERS -BEDDING -BEDEVIL -BEDEVILED -BEDEVILING -BEDEVILS -BEDFAST -BEDFORD -BEDLAM -BEDPOST -BEDPOSTS -BEDRAGGLE -BEDRAGGLED -BEDRIDDEN -BEDROCK -BEDROOM -BEDROOMS -BEDS -BEDSIDE -BEDSPREAD -BEDSPREADS -BEDSPRING -BEDSPRINGS -BEDSTEAD -BEDSTEADS -BEDTIME -BEE -BEEBE -BEECH -BEECHAM -BEECHEN -BEECHER -BEEF -BEEFED -BEEFER -BEEFERS -BEEFING -BEEFS -BEEFSTEAK -BEEFY -BEEHIVE -BEEHIVES -BEEN -BEEP -BEEPS -BEER -BEERS -BEES -BEET -BEETHOVEN -BEETLE -BEETLED -BEETLES -BEETLING -BEETS -BEFALL -BEFALLEN -BEFALLING -BEFALLS -BEFELL -BEFIT -BEFITS -BEFITTED -BEFITTING -BEFOG -BEFOGGED -BEFOGGING -BEFORE -BEFOREHAND -BEFOUL -BEFOULED -BEFOULING -BEFOULS -BEFRIEND -BEFRIENDED -BEFRIENDING -BEFRIENDS -BEFUDDLE -BEFUDDLED -BEFUDDLES -BEFUDDLING -BEG -BEGAN -BEGET -BEGETS -BEGETTING -BEGGAR -BEGGARLY -BEGGARS -BEGGARY -BEGGED -BEGGING -BEGIN -BEGINNER -BEGINNERS -BEGINNING -BEGINNINGS -BEGINS -BEGOT -BEGOTTEN -BEGRUDGE -BEGRUDGED -BEGRUDGES -BEGRUDGING -BEGRUDGINGLY -BEGS -BEGUILE -BEGUILED -BEGUILES -BEGUILING -BEGUN -BEHALF -BEHAVE -BEHAVED -BEHAVES -BEHAVING -BEHAVIOR -BEHAVIORAL -BEHAVIORALLY -BEHAVIORISM -BEHAVIORISTIC -BEHAVIORS -BEHEAD -BEHEADING -BEHELD -BEHEMOTH -BEHEMOTHS -BEHEST -BEHIND -BEHOLD -BEHOLDEN -BEHOLDER -BEHOLDERS -BEHOLDING -BEHOLDS -BEHOOVE -BEHOOVES -BEIGE -BEIJING -BEING -BEINGS -BEIRUT -BELA -BELABOR -BELABORED -BELABORING -BELABORS -BELATED -BELATEDLY -BELAY -BELAYED -BELAYING -BELAYS -BELCH -BELCHED -BELCHES -BELCHING -BELFAST -BELFRIES -BELFRY -BELGIAN -BELGIANS -BELGIUM -BELGRADE -BELIE -BELIED -BELIEF -BELIEFS -BELIES -BELIEVABLE -BELIEVABLY -BELIEVE -BELIEVED -BELIEVER -BELIEVERS -BELIEVES -BELIEVING -BELITTLE -BELITTLED -BELITTLES -BELITTLING -BELIZE -BELL -BELLA -BELLAMY -BELLATRIX -BELLBOY -BELLBOYS -BELLE -BELLES -BELLEVILLE -BELLHOP -BELLHOPS -BELLICOSE -BELLICOSITY -BELLIES -BELLIGERENCE -BELLIGERENT -BELLIGERENTLY -BELLIGERENTS -BELLINGHAM -BELLINI -BELLMAN -BELLMEN -BELLOVIN -BELLOW -BELLOWED -BELLOWING -BELLOWS -BELLS -BELLUM -BELLWETHER -BELLWETHERS -BELLWOOD -BELLY -BELLYACHE -BELLYFULL -BELMONT -BELOIT -BELONG -BELONGED -BELONGING -BELONGINGS -BELONGS -BELOVED -BELOW -BELSHAZZAR -BELT -BELTED -BELTING -BELTON -BELTS -BELTSVILLE -BELUSHI -BELY -BELYING -BEMOAN -BEMOANED -BEMOANING -BEMOANS -BEN -BENARES -BENCH -BENCHED -BENCHES -BENCHMARK -BENCHMARKING -BENCHMARKS -BEND -BENDABLE -BENDER -BENDERS -BENDING -BENDIX -BENDS -BENEATH -BENEDICT -BENEDICTINE -BENEDICTION -BENEDICTIONS -BENEDIKT -BENEFACTOR -BENEFACTORS -BENEFICENCE -BENEFICENCES -BENEFICENT -BENEFICIAL -BENEFICIALLY -BENEFICIARIES -BENEFICIARY -BENEFIT -BENEFITED -BENEFITING -BENEFITS -BENEFITTED -BENEFITTING -BENELUX -BENEVOLENCE -BENEVOLENT -BENGAL -BENGALI -BENIGHTED -BENIGN -BENIGNLY -BENJAMIN -BENNETT -BENNINGTON -BENNY -BENSON -BENT -BENTHAM -BENTLEY -BENTLEYS -BENTON -BENZ -BENZEDRINE -BENZENE -BEOGRAD -BEOWULF -BEQUEATH -BEQUEATHAL -BEQUEATHED -BEQUEATHING -BEQUEATHS -BEQUEST -BEQUESTS -BERATE -BERATED -BERATES -BERATING -BEREA -BEREAVE -BEREAVED -BEREAVEMENT -BEREAVEMENTS -BEREAVES -BEREAVING -BEREFT -BERENICES -BERESFORD -BERET -BERETS -BERGEN -BERGLAND -BERGLUND -BERGMAN -BERGSON -BERGSTEN -BERGSTROM -BERIBBONED -BERIBERI -BERINGER -BERKELEY -BERKELIUM -BERKOWITZ -BERKSHIRE -BERKSHIRES -BERLIN -BERLINER -BERLINERS -BERLINIZE -BERLINIZES -BERLIOZ -BERLITZ -BERMAN -BERMUDA -BERN -BERNADINE -BERNARD -BERNARDINE -BERNARDINO -BERNARDO -BERNE -BERNET -BERNHARD -BERNICE -BERNIE -BERNIECE -BERNINI -BERNOULLI -BERNSTEIN -BERRA -BERRIES -BERRY -BERSERK -BERT -BERTH -BERTHA -BERTHS -BERTIE -BERTRAM -BERTRAND -BERWICK -BERYL -BERYLLIUM -BESEECH -BESEECHES -BESEECHING -BESET -BESETS -BESETTING -BESIDE -BESIDES -BESIEGE -BESIEGED -BESIEGER -BESIEGERS -BESIEGING -BESMIRCH -BESMIRCHED -BESMIRCHES -BESMIRCHING -BESOTTED -BESOTTER -BESOTTING -BESOUGHT -BESPEAK -BESPEAKS -BESPECTACLED -BESPOKE -BESS -BESSEL -BESSEMER -BESSEMERIZE -BESSEMERIZES -BESSIE -BEST -BESTED -BESTIAL -BESTING -BESTIR -BESTIRRING -BESTOW -BESTOWAL -BESTOWED -BESTS -BESTSELLER -BESTSELLERS -BESTSELLING -BET -BETA -BETATRON -BETEL -BETELGEUSE -BETHESDA -BETHLEHEM -BETIDE -BETRAY -BETRAYAL -BETRAYED -BETRAYER -BETRAYING -BETRAYS -BETROTH -BETROTHAL -BETROTHED -BETS -BETSEY -BETSY -BETTE -BETTER -BETTERED -BETTERING -BETTERMENT -BETTERMENTS -BETTERS -BETTIES -BETTING -BETTY -BETWEEN -BETWIXT -BEVEL -BEVELED -BEVELING -BEVELS -BEVERAGE -BEVERAGES -BEVERLY -BEVY -BEWAIL -BEWAILED -BEWAILING -BEWAILS -BEWARE -BEWHISKERED -BEWILDER -BEWILDERED -BEWILDERING -BEWILDERINGLY -BEWILDERMENT -BEWILDERS -BEWITCH -BEWITCHED -BEWITCHES -BEWITCHING -BEYOND -BHUTAN -BIALYSTOK -BIANCO -BIANNUAL -BIAS -BIASED -BIASES -BIASING -BIB -BIBBED -BIBBING -BIBLE -BIBLES -BIBLICAL -BIBLICALLY -BIBLIOGRAPHIC -BIBLIOGRAPHICAL -BIBLIOGRAPHIES -BIBLIOGRAPHY -BIBLIOPHILE -BIBS -BICAMERAL -BICARBONATE -BICENTENNIAL -BICEP -BICEPS -BICKER -BICKERED -BICKERING -BICKERS -BICONCAVE -BICONNECTED -BICONVEX -BICYCLE -BICYCLED -BICYCLER -BICYCLERS -BICYCLES -BICYCLING -BID -BIDDABLE -BIDDEN -BIDDER -BIDDERS -BIDDIES -BIDDING -BIDDLE -BIDDY -BIDE -BIDIRECTIONAL -BIDS -BIEN -BIENNIAL -BIENNIUM -BIENVILLE -BIER -BIERCE -BIFOCAL -BIFOCALS -BIFURCATE -BIG -BIGELOW -BIGGER -BIGGEST -BIGGS -BIGHT -BIGHTS -BIGNESS -BIGOT -BIGOTED -BIGOTRY -BIGOTS -BIHARMONIC -BIJECTION -BIJECTIONS -BIJECTIVE -BIJECTIVELY -BIKE -BIKES -BIKING -BIKINI -BIKINIS -BILABIAL -BILATERAL -BILATERALLY -BILBAO -BILBO -BILE -BILGE -BILGES -BILINEAR -BILINGUAL -BILK -BILKED -BILKING -BILKS -BILL -BILLBOARD -BILLBOARDS -BILLED -BILLER -BILLERS -BILLET -BILLETED -BILLETING -BILLETS -BILLIARD -BILLIARDS -BILLIE -BILLIKEN -BILLIKENS -BILLING -BILLINGS -BILLION -BILLIONS -BILLIONTH -BILLOW -BILLOWED -BILLOWS -BILLS -BILTMORE -BIMETALLIC -BIMETALLISM -BIMINI -BIMODAL -BIMOLECULAR -BIMONTHLIES -BIMONTHLY -BIN -BINARIES -BINARY -BINAURAL -BIND -BINDER -BINDERS -BINDING -BINDINGS -BINDS -BING -BINGE -BINGES -BINGHAM -BINGHAMTON -BINGO -BINI -BINOCULAR -BINOCULARS -BINOMIAL -BINS -BINUCLEAR -BIOCHEMICAL -BIOCHEMIST -BIOCHEMISTRY -BIOFEEDBACK -BIOGRAPHER -BIOGRAPHERS -BIOGRAPHIC -BIOGRAPHICAL -BIOGRAPHICALLY -BIOGRAPHIES -BIOGRAPHY -BIOLOGICAL -BIOLOGICALLY -BIOLOGIST -BIOLOGISTS -BIOLOGY -BIOMEDICAL -BIOMEDICINE -BIOPHYSICAL -BIOPHYSICIST -BIOPHYSICS -BIOPSIES -BIOPSY -BIOSCIENCE -BIOSPHERE -BIOSTATISTIC -BIOSYNTHESIZE -BIOTA -BIOTIC -BIPARTISAN -BIPARTITE -BIPED -BIPEDS -BIPLANE -BIPLANES -BIPOLAR -BIRACIAL -BIRCH -BIRCHEN -BIRCHES -BIRD -BIRDBATH -BIRDBATHS -BIRDIE -BIRDIED -BIRDIES -BIRDLIKE -BIRDS -BIREFRINGENCE -BIREFRINGENT -BIRGIT -BIRMINGHAM -BIRMINGHAMIZE -BIRMINGHAMIZES -BIRTH -BIRTHDAY -BIRTHDAYS -BIRTHED -BIRTHPLACE -BIRTHPLACES -BIRTHRIGHT -BIRTHRIGHTS -BIRTHS -BISCAYNE -BISCUIT -BISCUITS -BISECT -BISECTED -BISECTING -BISECTION -BISECTIONS -BISECTOR -BISECTORS -BISECTS -BISHOP -BISHOPS -BISMARCK -BISMARK -BISMUTH -BISON -BISONS -BISQUE -BISQUES -BISSAU -BISTABLE -BISTATE -BIT -BITCH -BITCHES -BITE -BITER -BITERS -BITES -BITING -BITINGLY -BITMAP -BITNET -BITS -BITTEN -BITTER -BITTERER -BITTEREST -BITTERLY -BITTERNESS -BITTERNUT -BITTERROOT -BITTERS -BITTERSWEET -BITUMEN -BITUMINOUS -BITWISE -BIVALVE -BIVALVES -BIVARIATE -BIVOUAC -BIVOUACS -BIWEEKLY -BIZARRE -BIZET -BLAB -BLABBED -BLABBERMOUTH -BLABBERMOUTHS -BLABBING -BLABS -BLACK -BLACKBERRIES -BLACKBERRY -BLACKBIRD -BLACKBIRDS -BLACKBOARD -BLACKBOARDS -BLACKBURN -BLACKED -BLACKEN -BLACKENED -BLACKENING -BLACKENS -BLACKER -BLACKEST -BLACKFEET -BLACKFOOT -BLACKFOOTS -BLACKING -BLACKJACK -BLACKJACKS -BLACKLIST -BLACKLISTED -BLACKLISTING -BLACKLISTS -BLACKLY -BLACKMAIL -BLACKMAILED -BLACKMAILER -BLACKMAILERS -BLACKMAILING -BLACKMAILS -BLACKMAN -BLACKMER -BLACKNESS -BLACKOUT -BLACKOUTS -BLACKS -BLACKSMITH -BLACKSMITHS -BLACKSTONE -BLACKWELL -BLACKWELLS -BLADDER -BLADDERS -BLADE -BLADES -BLAINE -BLAIR -BLAKE -BLAKEY -BLAMABLE -BLAME -BLAMED -BLAMELESS -BLAMELESSNESS -BLAMER -BLAMERS -BLAMES -BLAMEWORTHY -BLAMING -BLANCH -BLANCHARD -BLANCHE -BLANCHED -BLANCHES -BLANCHING -BLAND -BLANDLY -BLANDNESS -BLANK -BLANKED -BLANKER -BLANKEST -BLANKET -BLANKETED -BLANKETER -BLANKETERS -BLANKETING -BLANKETS -BLANKING -BLANKLY -BLANKNESS -BLANKS -BLANTON -BLARE -BLARED -BLARES -BLARING -BLASE -BLASPHEME -BLASPHEMED -BLASPHEMES -BLASPHEMIES -BLASPHEMING -BLASPHEMOUS -BLASPHEMOUSLY -BLASPHEMOUSNESS -BLASPHEMY -BLAST -BLASTED -BLASTER -BLASTERS -BLASTING -BLASTS -BLATANT -BLATANTLY -BLATZ -BLAZE -BLAZED -BLAZER -BLAZERS -BLAZES -BLAZING -BLEACH -BLEACHED -BLEACHER -BLEACHERS -BLEACHES -BLEACHING -BLEAK -BLEAKER -BLEAKLY -BLEAKNESS -BLEAR -BLEARY -BLEAT -BLEATING -BLEATS -BLED -BLEED -BLEEDER -BLEEDING -BLEEDINGS -BLEEDS -BLEEKER -BLEMISH -BLEMISHES -BLEND -BLENDED -BLENDER -BLENDING -BLENDS -BLENHEIM -BLESS -BLESSED -BLESSING -BLESSINGS -BLEW -BLIGHT -BLIGHTED -BLIMP -BLIMPS -BLIND -BLINDED -BLINDER -BLINDERS -BLINDFOLD -BLINDFOLDED -BLINDFOLDING -BLINDFOLDS -BLINDING -BLINDINGLY -BLINDLY -BLINDNESS -BLINDS -BLINK -BLINKED -BLINKER -BLINKERS -BLINKING -BLINKS -BLINN -BLIP -BLIPS -BLISS -BLISSFUL -BLISSFULLY -BLISTER -BLISTERED -BLISTERING -BLISTERS -BLITHE -BLITHELY -BLITZ -BLITZES -BLITZKRIEG -BLIZZARD -BLIZZARDS -BLOAT -BLOATED -BLOATER -BLOATING -BLOATS -BLOB -BLOBS -BLOC -BLOCH -BLOCK -BLOCKADE -BLOCKADED -BLOCKADES -BLOCKADING -BLOCKAGE -BLOCKAGES -BLOCKED -BLOCKER -BLOCKERS -BLOCKHOUSE -BLOCKHOUSES -BLOCKING -BLOCKS -BLOCS -BLOKE -BLOKES -BLOMBERG -BLOMQUIST -BLOND -BLONDE -BLONDES -BLONDS -BLOOD -BLOODBATH -BLOODED -BLOODHOUND -BLOODHOUNDS -BLOODIED -BLOODIEST -BLOODLESS -BLOODS -BLOODSHED -BLOODSHOT -BLOODSTAIN -BLOODSTAINED -BLOODSTAINS -BLOODSTREAM -BLOODY -BLOOM -BLOOMED -BLOOMERS -BLOOMFIELD -BLOOMING -BLOOMINGTON -BLOOMS -BLOOPER -BLOSSOM -BLOSSOMED -BLOSSOMS -BLOT -BLOTS -BLOTTED -BLOTTING -BLOUSE -BLOUSES -BLOW -BLOWER -BLOWERS -BLOWFISH -BLOWING -BLOWN -BLOWOUT -BLOWS -BLOWUP -BLUBBER -BLUDGEON -BLUDGEONED -BLUDGEONING -BLUDGEONS -BLUE -BLUEBERRIES -BLUEBERRY -BLUEBIRD -BLUEBIRDS -BLUEBONNET -BLUEBONNETS -BLUEFISH -BLUENESS -BLUEPRINT -BLUEPRINTS -BLUER -BLUES -BLUEST -BLUESTOCKING -BLUFF -BLUFFING -BLUFFS -BLUING -BLUISH -BLUM -BLUMENTHAL -BLUNDER -BLUNDERBUSS -BLUNDERED -BLUNDERING -BLUNDERINGS -BLUNDERS -BLUNT -BLUNTED -BLUNTER -BLUNTEST -BLUNTING -BLUNTLY -BLUNTNESS -BLUNTS -BLUR -BLURB -BLURRED -BLURRING -BLURRY -BLURS -BLURT -BLURTED -BLURTING -BLURTS -BLUSH -BLUSHED -BLUSHES -BLUSHING -BLUSTER -BLUSTERED -BLUSTERING -BLUSTERS -BLUSTERY -BLYTHE -BOA -BOAR -BOARD -BOARDED -BOARDER -BOARDERS -BOARDING -BOARDINGHOUSE -BOARDINGHOUSES -BOARDS -BOARSH -BOAST -BOASTED -BOASTER -BOASTERS -BOASTFUL -BOASTFULLY -BOASTING -BOASTINGS -BOASTS -BOAT -BOATER -BOATERS -BOATHOUSE -BOATHOUSES -BOATING -BOATLOAD -BOATLOADS -BOATMAN -BOATMEN -BOATS -BOATSMAN -BOATSMEN -BOATSWAIN -BOATSWAINS -BOATYARD -BOATYARDS -BOB -BOBBED -BOBBIE -BOBBIN -BOBBING -BOBBINS -BOBBSEY -BOBBY -BOBOLINK -BOBOLINKS -BOBROW -BOBS -BOBWHITE -BOBWHITES -BOCA -BODE -BODENHEIM -BODES -BODICE -BODIED -BODIES -BODILY -BODLEIAN -BODY -BODYBUILDER -BODYBUILDERS -BODYBUILDING -BODYGUARD -BODYGUARDS -BODYWEIGHT -BOEING -BOEOTIA -BOEOTIAN -BOER -BOERS -BOG -BOGART -BOGARTIAN -BOGEYMEN -BOGGED -BOGGLE -BOGGLED -BOGGLES -BOGGLING -BOGOTA -BOGS -BOGUS -BOHEME -BOHEMIA -BOHEMIAN -BOHEMIANISM -BOHR -BOIL -BOILED -BOILER -BOILERPLATE -BOILERS -BOILING -BOILS -BOIS -BOISE -BOISTEROUS -BOISTEROUSLY -BOLD -BOLDER -BOLDEST -BOLDFACE -BOLDLY -BOLDNESS -BOLIVIA -BOLIVIAN -BOLL -BOLOGNA -BOLSHEVIK -BOLSHEVIKS -BOLSHEVISM -BOLSHEVIST -BOLSHEVISTIC -BOLSHOI -BOLSTER -BOLSTERED -BOLSTERING -BOLSTERS -BOLT -BOLTED -BOLTING -BOLTON -BOLTS -BOLTZMANN -BOMB -BOMBARD -BOMBARDED -BOMBARDING -BOMBARDMENT -BOMBARDS -BOMBAST -BOMBASTIC -BOMBAY -BOMBED -BOMBER -BOMBERS -BOMBING -BOMBINGS -BOMBPROOF -BOMBS -BONANZA -BONANZAS -BONAPARTE -BONAVENTURE -BOND -BONDAGE -BONDED -BONDER -BONDERS -BONDING -BONDS -BONDSMAN -BONDSMEN -BONE -BONED -BONER -BONERS -BONES -BONFIRE -BONFIRES -BONG -BONHAM -BONIFACE -BONING -BONN -BONNET -BONNETED -BONNETS -BONNEVILLE -BONNIE -BONNY -BONTEMPO -BONUS -BONUSES -BONY -BOO -BOOB -BOOBOO -BOOBY -BOOK -BOOKCASE -BOOKCASES -BOOKED -BOOKER -BOOKERS -BOOKIE -BOOKIES -BOOKING -BOOKINGS -BOOKISH -BOOKKEEPER -BOOKKEEPERS -BOOKKEEPING -BOOKLET -BOOKLETS -BOOKMARK -BOOKS -BOOKSELLER -BOOKSELLERS -BOOKSHELF -BOOKSHELVES -BOOKSTORE -BOOKSTORES -BOOKWORM -BOOLEAN -BOOLEANS -BOOM -BOOMED -BOOMERANG -BOOMERANGS -BOOMING -BOOMS -BOON -BOONE -BOONTON -BOOR -BOORISH -BOORS -BOOS -BOOST -BOOSTED -BOOSTER -BOOSTING -BOOSTS -BOOT -BOOTABLE -BOOTED -BOOTES -BOOTH -BOOTHS -BOOTING -BOOTLE -BOOTLEG -BOOTLEGGED -BOOTLEGGER -BOOTLEGGERS -BOOTLEGGING -BOOTLEGS -BOOTS -BOOTSTRAP -BOOTSTRAPPED -BOOTSTRAPPING -BOOTSTRAPS -BOOTY -BOOZE -BORATE -BORATES -BORAX -BORDEAUX -BORDELLO -BORDELLOS -BORDEN -BORDER -BORDERED -BORDERING -BORDERINGS -BORDERLAND -BORDERLANDS -BORDERLINE -BORDERS -BORE -BOREALIS -BOREAS -BORED -BOREDOM -BORER -BORES -BORG -BORIC -BORING -BORIS -BORN -BORNE -BORNEO -BORON -BOROUGH -BOROUGHS -BORROUGHS -BORROW -BORROWED -BORROWER -BORROWERS -BORROWING -BORROWS -BOSCH -BOSE -BOSOM -BOSOMS -BOSPORUS -BOSS -BOSSED -BOSSES -BOSTITCH -BOSTON -BOSTONIAN -BOSTONIANS -BOSUN -BOSWELL -BOSWELLIZE -BOSWELLIZES -BOTANICAL -BOTANIST -BOTANISTS -BOTANY -BOTCH -BOTCHED -BOTCHER -BOTCHERS -BOTCHES -BOTCHING -BOTH -BOTHER -BOTHERED -BOTHERING -BOTHERS -BOTHERSOME -BOTSWANA -BOTTLE -BOTTLED -BOTTLENECK -BOTTLENECKS -BOTTLER -BOTTLERS -BOTTLES -BOTTLING -BOTTOM -BOTTOMED -BOTTOMING -BOTTOMLESS -BOTTOMS -BOTULINUS -BOTULISM -BOUCHER -BOUFFANT -BOUGH -BOUGHS -BOUGHT -BOULDER -BOULDERS -BOULEVARD -BOULEVARDS -BOUNCE -BOUNCED -BOUNCER -BOUNCES -BOUNCING -BOUNCY -BOUND -BOUNDARIES -BOUNDARY -BOUNDED -BOUNDEN -BOUNDING -BOUNDLESS -BOUNDLESSNESS -BOUNDS -BOUNTEOUS -BOUNTEOUSLY -BOUNTIES -BOUNTIFUL -BOUNTY -BOUQUET -BOUQUETS -BOURBAKI -BOURBON -BOURGEOIS -BOURGEOISIE -BOURNE -BOUSTROPHEDON -BOUSTROPHEDONIC -BOUT -BOUTIQUE -BOUTS -BOUVIER -BOVINE -BOVINES -BOW -BOWDITCH -BOWDLERIZE -BOWDLERIZED -BOWDLERIZES -BOWDLERIZING -BOWDOIN -BOWED -BOWEL -BOWELS -BOWEN -BOWER -BOWERS -BOWES -BOWING -BOWL -BOWLED -BOWLER -BOWLERS -BOWLINE -BOWLINES -BOWLING -BOWLS -BOWMAN -BOWS -BOWSTRING -BOWSTRINGS -BOX -BOXCAR -BOXCARS -BOXED -BOXER -BOXERS -BOXES -BOXFORD -BOXING -BOXTOP -BOXTOPS -BOXWOOD -BOY -BOYCE -BOYCOTT -BOYCOTTED -BOYCOTTS -BOYD -BOYFRIEND -BOYFRIENDS -BOYHOOD -BOYISH -BOYISHNESS -BOYLE -BOYLSTON -BOYS -BRA -BRACE -BRACED -BRACELET -BRACELETS -BRACES -BRACING -BRACKET -BRACKETED -BRACKETING -BRACKETS -BRACKISH -BRADBURY -BRADFORD -BRADLEY -BRADSHAW -BRADY -BRAE -BRAES -BRAG -BRAGG -BRAGGED -BRAGGER -BRAGGING -BRAGS -BRAHMAPUTRA -BRAHMS -BRAHMSIAN -BRAID -BRAIDED -BRAIDING -BRAIDS -BRAILLE -BRAIN -BRAINARD -BRAINARDS -BRAINCHILD -BRAINED -BRAINING -BRAINS -BRAINSTEM -BRAINSTEMS -BRAINSTORM -BRAINSTORMS -BRAINWASH -BRAINWASHED -BRAINWASHES -BRAINWASHING -BRAINY -BRAKE -BRAKED -BRAKEMAN -BRAKES -BRAKING -BRAMBLE -BRAMBLES -BRAMBLY -BRAN -BRANCH -BRANCHED -BRANCHES -BRANCHING -BRANCHINGS -BRANCHVILLE -BRAND -BRANDED -BRANDEIS -BRANDEL -BRANDENBURG -BRANDING -BRANDISH -BRANDISHES -BRANDISHING -BRANDON -BRANDS -BRANDT -BRANDY -BRANDYWINE -BRANIFF -BRANNON -BRAS -BRASH -BRASHLY -BRASHNESS -BRASILIA -BRASS -BRASSES -BRASSIERE -BRASSTOWN -BRASSY -BRAT -BRATS -BRAUN -BRAVADO -BRAVE -BRAVED -BRAVELY -BRAVENESS -BRAVER -BRAVERY -BRAVES -BRAVEST -BRAVING -BRAVO -BRAVOS -BRAWL -BRAWLER -BRAWLING -BRAWN -BRAY -BRAYED -BRAYER -BRAYING -BRAYS -BRAZE -BRAZED -BRAZEN -BRAZENLY -BRAZENNESS -BRAZES -BRAZIER -BRAZIERS -BRAZIL -BRAZILIAN -BRAZING -BRAZZAVILLE -BREACH -BREACHED -BREACHER -BREACHERS -BREACHES -BREACHING -BREAD -BREADBOARD -BREADBOARDS -BREADBOX -BREADBOXES -BREADED -BREADING -BREADS -BREADTH -BREADWINNER -BREADWINNERS -BREAK -BREAKABLE -BREAKABLES -BREAKAGE -BREAKAWAY -BREAKDOWN -BREAKDOWNS -BREAKER -BREAKERS -BREAKFAST -BREAKFASTED -BREAKFASTER -BREAKFASTERS -BREAKFASTING -BREAKFASTS -BREAKING -BREAKPOINT -BREAKPOINTS -BREAKS -BREAKTHROUGH -BREAKTHROUGHES -BREAKTHROUGHS -BREAKUP -BREAKWATER -BREAKWATERS -BREAST -BREASTED -BREASTS -BREASTWORK -BREASTWORKS -BREATH -BREATHABLE -BREATHE -BREATHED -BREATHER -BREATHERS -BREATHES -BREATHING -BREATHLESS -BREATHLESSLY -BREATHS -BREATHTAKING -BREATHTAKINGLY -BREATHY -BRED -BREECH -BREECHES -BREED -BREEDER -BREEDING -BREEDS -BREEZE -BREEZES -BREEZILY -BREEZY -BREMEN -BREMSSTRAHLUNG -BRENDA -BRENDAN -BRENNAN -BRENNER -BRENT -BRESENHAM -BREST -BRETHREN -BRETON -BRETONS -BRETT -BREVE -BREVET -BREVETED -BREVETING -BREVETS -BREVITY -BREW -BREWED -BREWER -BREWERIES -BREWERS -BREWERY -BREWING -BREWS -BREWSTER -BRIAN -BRIAR -BRIARS -BRIBE -BRIBED -BRIBER -BRIBERS -BRIBERY -BRIBES -BRIBING -BRICE -BRICK -BRICKBAT -BRICKED -BRICKER -BRICKLAYER -BRICKLAYERS -BRICKLAYING -BRICKS -BRIDAL -BRIDE -BRIDEGROOM -BRIDES -BRIDESMAID -BRIDESMAIDS -BRIDEWELL -BRIDGE -BRIDGEABLE -BRIDGED -BRIDGEHEAD -BRIDGEHEADS -BRIDGEPORT -BRIDGES -BRIDGET -BRIDGETOWN -BRIDGEWATER -BRIDGEWORK -BRIDGING -BRIDLE -BRIDLED -BRIDLES -BRIDLING -BRIE -BRIEF -BRIEFCASE -BRIEFCASES -BRIEFED -BRIEFER -BRIEFEST -BRIEFING -BRIEFINGS -BRIEFLY -BRIEFNESS -BRIEFS -BRIEN -BRIER -BRIG -BRIGADE -BRIGADES -BRIGADIER -BRIGADIERS -BRIGADOON -BRIGANTINE -BRIGGS -BRIGHAM -BRIGHT -BRIGHTEN -BRIGHTENED -BRIGHTENER -BRIGHTENERS -BRIGHTENING -BRIGHTENS -BRIGHTER -BRIGHTEST -BRIGHTLY -BRIGHTNESS -BRIGHTON -BRIGS -BRILLIANCE -BRILLIANCY -BRILLIANT -BRILLIANTLY -BRILLOUIN -BRIM -BRIMFUL -BRIMMED -BRIMMING -BRIMSTONE -BRINDISI -BRINDLE -BRINDLED -BRINE -BRING -BRINGER -BRINGERS -BRINGING -BRINGS -BRINK -BRINKLEY -BRINKMANSHIP -BRINY -BRISBANE -BRISK -BRISKER -BRISKLY -BRISKNESS -BRISTLE -BRISTLED -BRISTLES -BRISTLING -BRISTOL -BRITAIN -BRITANNIC -BRITANNICA -BRITCHES -BRITISH -BRITISHER -BRITISHLY -BRITON -BRITONS -BRITTANY -BRITTEN -BRITTLE -BRITTLENESS -BROACH -BROACHED -BROACHES -BROACHING -BROAD -BROADBAND -BROADCAST -BROADCASTED -BROADCASTER -BROADCASTERS -BROADCASTING -BROADCASTINGS -BROADCASTS -BROADEN -BROADENED -BROADENER -BROADENERS -BROADENING -BROADENINGS -BROADENS -BROADER -BROADEST -BROADLY -BROADNESS -BROADSIDE -BROADWAY -BROCADE -BROCADED -BROCCOLI -BROCHURE -BROCHURES -BROCK -BROGLIE -BROIL -BROILED -BROILER -BROILERS -BROILING -BROILS -BROKE -BROKEN -BROKENLY -BROKENNESS -BROKER -BROKERAGE -BROKERS -BROMFIELD -BROMIDE -BROMIDES -BROMINE -BROMLEY -BRONCHI -BRONCHIAL -BRONCHIOLE -BRONCHIOLES -BRONCHITIS -BRONCHUS -BRONTOSAURUS -BRONX -BRONZE -BRONZED -BRONZES -BROOCH -BROOCHES -BROOD -BROODER -BROODING -BROODS -BROOK -BROOKDALE -BROOKE -BROOKED -BROOKFIELD -BROOKHAVEN -BROOKLINE -BROOKLYN -BROOKMONT -BROOKS -BROOM -BROOMS -BROOMSTICK -BROOMSTICKS -BROTH -BROTHEL -BROTHELS -BROTHER -BROTHERHOOD -BROTHERLINESS -BROTHERLY -BROTHERS -BROUGHT -BROW -BROWBEAT -BROWBEATEN -BROWBEATING -BROWBEATS -BROWN -BROWNE -BROWNED -BROWNELL -BROWNER -BROWNEST -BROWNIAN -BROWNIE -BROWNIES -BROWNING -BROWNISH -BROWNNESS -BROWNS -BROWS -BROWSE -BROWSING -BRUCE -BRUCKNER -BRUEGEL -BRUISE -BRUISED -BRUISES -BRUISING -BRUMIDI -BRUNCH -BRUNCHES -BRUNETTE -BRUNHILDE -BRUNO -BRUNSWICK -BRUNT -BRUSH -BRUSHED -BRUSHES -BRUSHFIRE -BRUSHFIRES -BRUSHING -BRUSHLIKE -BRUSHY -BRUSQUE -BRUSQUELY -BRUSSELS -BRUTAL -BRUTALITIES -BRUTALITY -BRUTALIZE -BRUTALIZED -BRUTALIZES -BRUTALIZING -BRUTALLY -BRUTE -BRUTES -BRUTISH -BRUXELLES -BRYAN -BRYANT -BRYCE -BRYN -BUBBLE -BUBBLED -BUBBLES -BUBBLING -BUBBLY -BUCHANAN -BUCHAREST -BUCHENWALD -BUCHWALD -BUCK -BUCKBOARD -BUCKBOARDS -BUCKED -BUCKET -BUCKETS -BUCKING -BUCKLE -BUCKLED -BUCKLER -BUCKLES -BUCKLEY -BUCKLING -BUCKNELL -BUCKS -BUCKSHOT -BUCKSKIN -BUCKSKINS -BUCKWHEAT -BUCKY -BUCOLIC -BUD -BUDAPEST -BUDD -BUDDED -BUDDHA -BUDDHISM -BUDDHIST -BUDDHISTS -BUDDIES -BUDDING -BUDDY -BUDGE -BUDGED -BUDGES -BUDGET -BUDGETARY -BUDGETED -BUDGETER -BUDGETERS -BUDGETING -BUDGETS -BUDGING -BUDS -BUDWEISER -BUDWEISERS -BUEHRING -BUENA -BUENOS -BUFF -BUFFALO -BUFFALOES -BUFFER -BUFFERED -BUFFERING -BUFFERS -BUFFET -BUFFETED -BUFFETING -BUFFETINGS -BUFFETS -BUFFOON -BUFFOONS -BUFFS -BUG -BUGABOO -BUGATTI -BUGEYED -BUGGED -BUGGER -BUGGERS -BUGGIES -BUGGING -BUGGY -BUGLE -BUGLED -BUGLER -BUGLES -BUGLING -BUGS -BUICK -BUILD -BUILDER -BUILDERS -BUILDING -BUILDINGS -BUILDS -BUILDUP -BUILDUPS -BUILT -BUILTIN -BUJUMBURA -BULB -BULBA -BULBS -BULGARIA -BULGARIAN -BULGE -BULGED -BULGING -BULK -BULKED -BULKHEAD -BULKHEADS -BULKS -BULKY -BULL -BULLDOG -BULLDOGS -BULLDOZE -BULLDOZED -BULLDOZER -BULLDOZES -BULLDOZING -BULLED -BULLET -BULLETIN -BULLETINS -BULLETS -BULLFROG -BULLIED -BULLIES -BULLING -BULLION -BULLISH -BULLOCK -BULLS -BULLSEYE -BULLY -BULLYING -BULWARK -BUM -BUMBLE -BUMBLEBEE -BUMBLEBEES -BUMBLED -BUMBLER -BUMBLERS -BUMBLES -BUMBLING -BUMBRY -BUMMED -BUMMING -BUMP -BUMPED -BUMPER -BUMPERS -BUMPING -BUMPS -BUMPTIOUS -BUMPTIOUSLY -BUMPTIOUSNESS -BUMS -BUN -BUNCH -BUNCHED -BUNCHES -BUNCHING -BUNDESTAG -BUNDLE -BUNDLED -BUNDLES -BUNDLING -BUNDOORA -BUNDY -BUNGALOW -BUNGALOWS -BUNGLE -BUNGLED -BUNGLER -BUNGLERS -BUNGLES -BUNGLING -BUNION -BUNIONS -BUNK -BUNKER -BUNKERED -BUNKERS -BUNKHOUSE -BUNKHOUSES -BUNKMATE -BUNKMATES -BUNKS -BUNNIES -BUNNY -BUNS -BUNSEN -BUNT -BUNTED -BUNTER -BUNTERS -BUNTING -BUNTS -BUNYAN -BUOY -BUOYANCY -BUOYANT -BUOYED -BUOYS -BURBANK -BURCH -BURDEN -BURDENED -BURDENING -BURDENS -BURDENSOME -BUREAU -BUREAUCRACIES -BUREAUCRACY -BUREAUCRAT -BUREAUCRATIC -BUREAUCRATS -BUREAUS -BURGEON -BURGEONED -BURGEONING -BURGESS -BURGESSES -BURGHER -BURGHERS -BURGLAR -BURGLARIES -BURGLARIZE -BURGLARIZED -BURGLARIZES -BURGLARIZING -BURGLARPROOF -BURGLARPROOFED -BURGLARPROOFING -BURGLARPROOFS -BURGLARS -BURGLARY -BURGUNDIAN -BURGUNDIES -BURGUNDY -BURIAL -BURIED -BURIES -BURKE -BURKES -BURL -BURLESQUE -BURLESQUES -BURLINGAME -BURLINGTON -BURLY -BURMA -BURMESE -BURN -BURNE -BURNED -BURNER -BURNERS -BURNES -BURNETT -BURNHAM -BURNING -BURNINGLY -BURNINGS -BURNISH -BURNISHED -BURNISHES -BURNISHING -BURNS -BURNSIDE -BURNSIDES -BURNT -BURNTLY -BURNTNESS -BURP -BURPED -BURPING -BURPS -BURR -BURROUGHS -BURROW -BURROWED -BURROWER -BURROWING -BURROWS -BURRS -BURSA -BURSITIS -BURST -BURSTINESS -BURSTING -BURSTS -BURSTY -BURT -BURTON -BURTT -BURUNDI -BURY -BURYING -BUS -BUSBOY -BUSBOYS -BUSCH -BUSED -BUSES -BUSH -BUSHEL -BUSHELS -BUSHES -BUSHING -BUSHNELL -BUSHWHACK -BUSHWHACKED -BUSHWHACKING -BUSHWHACKS -BUSHY -BUSIED -BUSIER -BUSIEST -BUSILY -BUSINESS -BUSINESSES -BUSINESSLIKE -BUSINESSMAN -BUSINESSMEN -BUSING -BUSS -BUSSED -BUSSES -BUSSING -BUST -BUSTARD -BUSTARDS -BUSTED -BUSTER -BUSTLE -BUSTLING -BUSTS -BUSY -BUT -BUTANE -BUTCHER -BUTCHERED -BUTCHERS -BUTCHERY -BUTLER -BUTLERS -BUTT -BUTTE -BUTTED -BUTTER -BUTTERBALL -BUTTERCUP -BUTTERED -BUTTERER -BUTTERERS -BUTTERFAT -BUTTERFIELD -BUTTERFLIES -BUTTERFLY -BUTTERING -BUTTERMILK -BUTTERNUT -BUTTERS -BUTTERY -BUTTES -BUTTING -BUTTOCK -BUTTOCKS -BUTTON -BUTTONED -BUTTONHOLE -BUTTONHOLES -BUTTONING -BUTTONS -BUTTRESS -BUTTRESSED -BUTTRESSES -BUTTRESSING -BUTTRICK -BUTTS -BUTYL -BUTYRATE -BUXOM -BUXTEHUDE -BUXTON -BUY -BUYER -BUYERS -BUYING -BUYS -BUZZ -BUZZARD -BUZZARDS -BUZZED -BUZZER -BUZZES -BUZZING -BUZZWORD -BUZZWORDS -BUZZY -BYE -BYERS -BYGONE -BYLAW -BYLAWS -BYLINE -BYLINES -BYPASS -BYPASSED -BYPASSES -BYPASSING -BYPRODUCT -BYPRODUCTS -BYRD -BYRNE -BYRON -BYRONIC -BYRONISM -BYRONIZE -BYRONIZES -BYSTANDER -BYSTANDERS -BYTE -BYTES -BYWAY -BYWAYS -BYWORD -BYWORDS -BYZANTINE -BYZANTINIZE -BYZANTINIZES -BYZANTIUM -CAB -CABAL -CABANA -CABARET -CABBAGE -CABBAGES -CABDRIVER -CABIN -CABINET -CABINETS -CABINS -CABLE -CABLED -CABLES -CABLING -CABOOSE -CABOT -CABS -CACHE -CACHED -CACHES -CACHING -CACKLE -CACKLED -CACKLER -CACKLES -CACKLING -CACTI -CACTUS -CADAVER -CADENCE -CADENCED -CADILLAC -CADILLACS -CADRES -CADY -CAESAR -CAESARIAN -CAESARIZE -CAESARIZES -CAFE -CAFES -CAFETERIA -CAGE -CAGED -CAGER -CAGERS -CAGES -CAGING -CAHILL -CAIMAN -CAIN -CAINE -CAIRN -CAIRO -CAJOLE -CAJOLED -CAJOLES -CAJOLING -CAJUN -CAJUNS -CAKE -CAKED -CAKES -CAKING -CALAIS -CALAMITIES -CALAMITOUS -CALAMITY -CALCEOLARIA -CALCIFY -CALCIUM -CALCOMP -CALCOMP -CALCOMP -CALCULATE -CALCULATED -CALCULATES -CALCULATING -CALCULATION -CALCULATIONS -CALCULATIVE -CALCULATOR -CALCULATORS -CALCULI -CALCULUS -CALCUTTA -CALDER -CALDERA -CALDWELL -CALEB -CALENDAR -CALENDARS -CALF -CALFSKIN -CALGARY -CALHOUN -CALIBER -CALIBERS -CALIBRATE -CALIBRATED -CALIBRATES -CALIBRATING -CALIBRATION -CALIBRATIONS -CALICO -CALIFORNIA -CALIFORNIAN -CALIFORNIANS -CALIGULA -CALIPH -CALIPHS -CALKINS -CALL -CALLABLE -CALLAGHAN -CALLAHAN -CALLAN -CALLED -CALLER -CALLERS -CALLING -CALLIOPE -CALLISTO -CALLOUS -CALLOUSED -CALLOUSLY -CALLOUSNESS -CALLS -CALLUS -CALM -CALMED -CALMER -CALMEST -CALMING -CALMINGLY -CALMLY -CALMNESS -CALMS -CALORIC -CALORIE -CALORIES -CALORIMETER -CALORIMETRIC -CALORIMETRY -CALTECH -CALUMNY -CALVARY -CALVE -CALVERT -CALVES -CALVIN -CALVINIST -CALVINIZE -CALVINIZES -CALYPSO -CAM -CAMBODIA -CAMBRIAN -CAMBRIDGE -CAMDEN -CAME -CAMEL -CAMELOT -CAMELS -CAMEMBERT -CAMERA -CAMERAMAN -CAMERAMEN -CAMERAS -CAMERON -CAMEROON -CAMEROUN -CAMILLA -CAMILLE -CAMINO -CAMOUFLAGE -CAMOUFLAGED -CAMOUFLAGES -CAMOUFLAGING -CAMP -CAMPAIGN -CAMPAIGNED -CAMPAIGNER -CAMPAIGNERS -CAMPAIGNING -CAMPAIGNS -CAMPBELL -CAMPBELLSPORT -CAMPED -CAMPER -CAMPERS -CAMPFIRE -CAMPGROUND -CAMPING -CAMPS -CAMPSITE -CAMPUS -CAMPUSES -CAN -CANAAN -CANADA -CANADIAN -CANADIANIZATION -CANADIANIZATIONS -CANADIANIZE -CANADIANIZES -CANADIANS -CANAL -CANALS -CANARIES -CANARY -CANAVERAL -CANBERRA -CANCEL -CANCELED -CANCELING -CANCELLATION -CANCELLATIONS -CANCELS -CANCER -CANCEROUS -CANCERS -CANDACE -CANDID -CANDIDACY -CANDIDATE -CANDIDATES -CANDIDE -CANDIDLY -CANDIDNESS -CANDIED -CANDIES -CANDLE -CANDLELIGHT -CANDLER -CANDLES -CANDLESTICK -CANDLESTICKS -CANDLEWICK -CANDOR -CANDY -CANE -CANER -CANFIELD -CANINE -CANIS -CANISTER -CANKER -CANKERWORM -CANNABIS -CANNED -CANNEL -CANNER -CANNERS -CANNERY -CANNIBAL -CANNIBALIZE -CANNIBALIZED -CANNIBALIZES -CANNIBALIZING -CANNIBALS -CANNING -CANNISTER -CANNISTERS -CANNON -CANNONBALL -CANNONS -CANNOT -CANNY -CANOE -CANOES -CANOGA -CANON -CANONIC -CANONICAL -CANONICALIZATION -CANONICALIZE -CANONICALIZED -CANONICALIZES -CANONICALIZING -CANONICALLY -CANONICALS -CANONS -CANOPUS -CANOPY -CANS -CANT -CANTABRIGIAN -CANTALOUPE -CANTANKEROUS -CANTANKEROUSLY -CANTEEN -CANTERBURY -CANTILEVER -CANTO -CANTON -CANTONESE -CANTONS -CANTOR -CANTORS -CANUTE -CANVAS -CANVASES -CANVASS -CANVASSED -CANVASSER -CANVASSERS -CANVASSES -CANVASSING -CANYON -CANYONS -CAP -CAPABILITIES -CAPABILITY -CAPABLE -CAPABLY -CAPACIOUS -CAPACIOUSLY -CAPACIOUSNESS -CAPACITANCE -CAPACITANCES -CAPACITIES -CAPACITIVE -CAPACITOR -CAPACITORS -CAPACITY -CAPE -CAPER -CAPERS -CAPES -CAPET -CAPETOWN -CAPILLARY -CAPISTRANO -CAPITA -CAPITAL -CAPITALISM -CAPITALIST -CAPITALISTS -CAPITALIZATION -CAPITALIZATIONS -CAPITALIZE -CAPITALIZED -CAPITALIZER -CAPITALIZERS -CAPITALIZES -CAPITALIZING -CAPITALLY -CAPITALS -CAPITAN -CAPITOL -CAPITOLINE -CAPITOLS -CAPPED -CAPPING -CAPPY -CAPRICE -CAPRICIOUS -CAPRICIOUSLY -CAPRICIOUSNESS -CAPRICORN -CAPS -CAPSICUM -CAPSTAN -CAPSTONE -CAPSULE -CAPTAIN -CAPTAINED -CAPTAINING -CAPTAINS -CAPTION -CAPTIONS -CAPTIVATE -CAPTIVATED -CAPTIVATES -CAPTIVATING -CAPTIVATION -CAPTIVE -CAPTIVES -CAPTIVITY -CAPTOR -CAPTORS -CAPTURE -CAPTURED -CAPTURER -CAPTURERS -CAPTURES -CAPTURING -CAPUTO -CAPYBARA -CAR -CARACAS -CARAMEL -CARAVAN -CARAVANS -CARAWAY -CARBOHYDRATE -CARBOLIC -CARBOLOY -CARBON -CARBONATE -CARBONATES -CARBONATION -CARBONDALE -CARBONE -CARBONES -CARBONIC -CARBONIZATION -CARBONIZE -CARBONIZED -CARBONIZER -CARBONIZERS -CARBONIZES -CARBONIZING -CARBONS -CARBORUNDUM -CARBUNCLE -CARCASS -CARCASSES -CARCINOGEN -CARCINOGENIC -CARCINOMA -CARD -CARDBOARD -CARDER -CARDIAC -CARDIFF -CARDINAL -CARDINALITIES -CARDINALITY -CARDINALLY -CARDINALS -CARDIOD -CARDIOLOGY -CARDIOVASCULAR -CARDS -CARE -CARED -CAREEN -CAREER -CAREERS -CAREFREE -CAREFUL -CAREFULLY -CAREFULNESS -CARELESS -CARELESSLY -CARELESSNESS -CARES -CARESS -CARESSED -CARESSER -CARESSES -CARESSING -CARET -CARETAKER -CAREY -CARGILL -CARGO -CARGOES -CARIB -CARIBBEAN -CARIBOU -CARICATURE -CARING -CARL -CARLA -CARLETON -CARLETONIAN -CARLIN -CARLISLE -CARLO -CARLOAD -CARLSBAD -CARLSBADS -CARLSON -CARLTON -CARLYLE -CARMELA -CARMEN -CARMICHAEL -CARNAGE -CARNAL -CARNATION -CARNEGIE -CARNIVAL -CARNIVALS -CARNIVOROUS -CARNIVOROUSLY -CAROL -CAROLINA -CAROLINAS -CAROLINE -CAROLINGIAN -CAROLINIAN -CAROLINIANS -CAROLS -CAROLYN -CARP -CARPATHIA -CARPATHIANS -CARPENTER -CARPENTERS -CARPENTRY -CARPET -CARPETED -CARPETING -CARPETS -CARPORT -CARR -CARRARA -CARRIAGE -CARRIAGES -CARRIE -CARRIED -CARRIER -CARRIERS -CARRIES -CARRION -CARROLL -CARROT -CARROTS -CARRUTHERS -CARRY -CARRYING -CARRYOVER -CARRYOVERS -CARS -CARSON -CART -CARTED -CARTEL -CARTER -CARTERS -CARTESIAN -CARTHAGE -CARTHAGINIAN -CARTILAGE -CARTING -CARTOGRAPHER -CARTOGRAPHIC -CARTOGRAPHY -CARTON -CARTONS -CARTOON -CARTOONS -CARTRIDGE -CARTRIDGES -CARTS -CARTWHEEL -CARTY -CARUSO -CARVE -CARVED -CARVER -CARVES -CARVING -CARVINGS -CASANOVA -CASCADABLE -CASCADE -CASCADED -CASCADES -CASCADING -CASE -CASED -CASEMENT -CASEMENTS -CASES -CASEWORK -CASEY -CASH -CASHED -CASHER -CASHERS -CASHES -CASHEW -CASHIER -CASHIERS -CASHING -CASHMERE -CASING -CASINGS -CASINO -CASK -CASKET -CASKETS -CASKS -CASPIAN -CASSANDRA -CASSEROLE -CASSEROLES -CASSETTE -CASSIOPEIA -CASSITE -CASSITES -CASSIUS -CASSOCK -CAST -CASTE -CASTER -CASTERS -CASTES -CASTIGATE -CASTILLO -CASTING -CASTLE -CASTLED -CASTLES -CASTOR -CASTRO -CASTROISM -CASTS -CASUAL -CASUALLY -CASUALNESS -CASUALS -CASUALTIES -CASUALTY -CAT -CATACLYSMIC -CATALAN -CATALINA -CATALOG -CATALOGED -CATALOGER -CATALOGING -CATALOGS -CATALONIA -CATALYST -CATALYSTS -CATALYTIC -CATAPULT -CATARACT -CATASTROPHE -CATASTROPHES -CATASTROPHIC -CATAWBA -CATCH -CATCHABLE -CATCHER -CATCHERS -CATCHES -CATCHING -CATEGORICAL -CATEGORICALLY -CATEGORIES -CATEGORIZATION -CATEGORIZE -CATEGORIZED -CATEGORIZER -CATEGORIZERS -CATEGORIZES -CATEGORIZING -CATEGORY -CATER -CATERED -CATERER -CATERING -CATERPILLAR -CATERPILLARS -CATERS -CATHEDRAL -CATHEDRALS -CATHERINE -CATHERWOOD -CATHETER -CATHETERS -CATHODE -CATHODES -CATHOLIC -CATHOLICISM -CATHOLICISMS -CATHOLICS -CATHY -CATLIKE -CATNIP -CATS -CATSKILL -CATSKILLS -CATSUP -CATTAIL -CATTLE -CATTLEMAN -CATTLEMEN -CAUCASIAN -CAUCASIANS -CAUCASUS -CAUCHY -CAUCUS -CAUGHT -CAULDRON -CAULDRONS -CAULIFLOWER -CAULK -CAUSAL -CAUSALITY -CAUSALLY -CAUSATION -CAUSATIONS -CAUSE -CAUSED -CAUSER -CAUSES -CAUSEWAY -CAUSEWAYS -CAUSING -CAUSTIC -CAUSTICLY -CAUSTICS -CAUTION -CAUTIONED -CAUTIONER -CAUTIONERS -CAUTIONING -CAUTIONINGS -CAUTIONS -CAUTIOUS -CAUTIOUSLY -CAUTIOUSNESS -CAVALIER -CAVALIERLY -CAVALIERNESS -CAVALRY -CAVE -CAVEAT -CAVEATS -CAVED -CAVEMAN -CAVEMEN -CAVENDISH -CAVERN -CAVERNOUS -CAVERNS -CAVES -CAVIAR -CAVIL -CAVINESS -CAVING -CAVITIES -CAVITY -CAW -CAWING -CAYLEY -CAYUGA -CEASE -CEASED -CEASELESS -CEASELESSLY -CEASELESSNESS -CEASES -CEASING -CECIL -CECILIA -CECROPIA -CEDAR -CEDE -CEDED -CEDING -CEDRIC -CEILING -CEILINGS -CELANESE -CELEBES -CELEBRATE -CELEBRATED -CELEBRATES -CELEBRATING -CELEBRATION -CELEBRATIONS -CELEBRITIES -CELEBRITY -CELERITY -CELERY -CELESTE -CELESTIAL -CELESTIALLY -CELIA -CELL -CELLAR -CELLARS -CELLED -CELLIST -CELLISTS -CELLOPHANE -CELLS -CELLULAR -CELLULOSE -CELSIUS -CELT -CELTIC -CELTICIZE -CELTICIZES -CEMENT -CEMENTED -CEMENTING -CEMENTS -CEMETERIES -CEMETERY -CENOZOIC -CENSOR -CENSORED -CENSORING -CENSORS -CENSORSHIP -CENSURE -CENSURED -CENSURER -CENSURES -CENSUS -CENSUSES -CENT -CENTAUR -CENTENARY -CENTENNIAL -CENTER -CENTERED -CENTERING -CENTERPIECE -CENTERPIECES -CENTERS -CENTIGRADE -CENTIMETER -CENTIMETERS -CENTIPEDE -CENTIPEDES -CENTRAL -CENTRALIA -CENTRALISM -CENTRALIST -CENTRALIZATION -CENTRALIZE -CENTRALIZED -CENTRALIZES -CENTRALIZING -CENTRALLY -CENTREX -CENTREX -CENTRIFUGAL -CENTRIFUGE -CENTRIPETAL -CENTRIST -CENTROID -CENTS -CENTURIES -CENTURY -CEPHEUS -CERAMIC -CERBERUS -CEREAL -CEREALS -CEREBELLUM -CEREBRAL -CEREMONIAL -CEREMONIALLY -CEREMONIALNESS -CEREMONIES -CEREMONY -CERES -CERN -CERTAIN -CERTAINLY -CERTAINTIES -CERTAINTY -CERTIFIABLE -CERTIFICATE -CERTIFICATES -CERTIFICATION -CERTIFICATIONS -CERTIFIED -CERTIFIER -CERTIFIERS -CERTIFIES -CERTIFY -CERTIFYING -CERVANTES -CESARE -CESSATION -CESSATIONS -CESSNA -CETUS -CEYLON -CEZANNE -CEZANNES -CHABLIS -CHABLISES -CHAD -CHADWICK -CHAFE -CHAFER -CHAFF -CHAFFER -CHAFFEY -CHAFFING -CHAFING -CHAGRIN -CHAIN -CHAINED -CHAINING -CHAINS -CHAIR -CHAIRED -CHAIRING -CHAIRLADY -CHAIRMAN -CHAIRMEN -CHAIRPERSON -CHAIRPERSONS -CHAIRS -CHAIRWOMAN -CHAIRWOMEN -CHALICE -CHALICES -CHALK -CHALKED -CHALKING -CHALKS -CHALLENGE -CHALLENGED -CHALLENGER -CHALLENGERS -CHALLENGES -CHALLENGING -CHALMERS -CHAMBER -CHAMBERED -CHAMBERLAIN -CHAMBERLAINS -CHAMBERMAID -CHAMBERS -CHAMELEON -CHAMPAGNE -CHAMPAIGN -CHAMPION -CHAMPIONED -CHAMPIONING -CHAMPIONS -CHAMPIONSHIP -CHAMPIONSHIPS -CHAMPLAIN -CHANCE -CHANCED -CHANCELLOR -CHANCELLORSVILLE -CHANCERY -CHANCES -CHANCING -CHANDELIER -CHANDELIERS -CHANDIGARH -CHANG -CHANGE -CHANGEABILITY -CHANGEABLE -CHANGEABLY -CHANGED -CHANGEOVER -CHANGER -CHANGERS -CHANGES -CHANGING -CHANNEL -CHANNELED -CHANNELING -CHANNELLED -CHANNELLER -CHANNELLERS -CHANNELLING -CHANNELS -CHANNING -CHANT -CHANTED -CHANTER -CHANTICLEER -CHANTICLEERS -CHANTILLY -CHANTING -CHANTS -CHAO -CHAOS -CHAOTIC -CHAP -CHAPEL -CHAPELS -CHAPERON -CHAPERONE -CHAPERONED -CHAPLAIN -CHAPLAINS -CHAPLIN -CHAPMAN -CHAPS -CHAPTER -CHAPTERS -CHAR -CHARACTER -CHARACTERISTIC -CHARACTERISTICALLY -CHARACTERISTICS -CHARACTERIZABLE -CHARACTERIZATION -CHARACTERIZATIONS -CHARACTERIZE -CHARACTERIZED -CHARACTERIZER -CHARACTERIZERS -CHARACTERIZES -CHARACTERIZING -CHARACTERS -CHARCOAL -CHARCOALED -CHARGE -CHARGEABLE -CHARGED -CHARGER -CHARGERS -CHARGES -CHARGING -CHARIOT -CHARIOTS -CHARISMA -CHARISMATIC -CHARITABLE -CHARITABLENESS -CHARITIES -CHARITY -CHARLEMAGNE -CHARLEMAGNES -CHARLES -CHARLESTON -CHARLEY -CHARLIE -CHARLOTTE -CHARLOTTESVILLE -CHARM -CHARMED -CHARMER -CHARMERS -CHARMING -CHARMINGLY -CHARMS -CHARON -CHARS -CHART -CHARTA -CHARTABLE -CHARTED -CHARTER -CHARTERED -CHARTERING -CHARTERS -CHARTING -CHARTINGS -CHARTRES -CHARTREUSE -CHARTS -CHARYBDIS -CHASE -CHASED -CHASER -CHASERS -CHASES -CHASING -CHASM -CHASMS -CHASSIS -CHASTE -CHASTELY -CHASTENESS -CHASTISE -CHASTISED -CHASTISER -CHASTISERS -CHASTISES -CHASTISING -CHASTITY -CHAT -CHATEAU -CHATEAUS -CHATHAM -CHATTAHOOCHEE -CHATTANOOGA -CHATTEL -CHATTER -CHATTERED -CHATTERER -CHATTERING -CHATTERS -CHATTING -CHATTY -CHAUCER -CHAUFFEUR -CHAUFFEURED -CHAUNCEY -CHAUTAUQUA -CHEAP -CHEAPEN -CHEAPENED -CHEAPENING -CHEAPENS -CHEAPER -CHEAPEST -CHEAPLY -CHEAPNESS -CHEAT -CHEATED -CHEATER -CHEATERS -CHEATING -CHEATS -CHECK -CHECKABLE -CHECKBOOK -CHECKBOOKS -CHECKED -CHECKER -CHECKERBOARD -CHECKERBOARDED -CHECKERBOARDING -CHECKERS -CHECKING -CHECKLIST -CHECKOUT -CHECKPOINT -CHECKPOINTS -CHECKS -CHECKSUM -CHECKSUMMED -CHECKSUMMING -CHECKSUMS -CHECKUP -CHEEK -CHEEKBONE -CHEEKS -CHEEKY -CHEER -CHEERED -CHEERER -CHEERFUL -CHEERFULLY -CHEERFULNESS -CHEERILY -CHEERINESS -CHEERING -CHEERLEADER -CHEERLESS -CHEERLESSLY -CHEERLESSNESS -CHEERS -CHEERY -CHEESE -CHEESECLOTH -CHEESES -CHEESY -CHEETAH -CHEF -CHEFS -CHEKHOV -CHELSEA -CHEMICAL -CHEMICALLY -CHEMICALS -CHEMISE -CHEMIST -CHEMISTRIES -CHEMISTRY -CHEMISTS -CHEN -CHENEY -CHENG -CHERISH -CHERISHED -CHERISHES -CHERISHING -CHERITON -CHEROKEE -CHEROKEES -CHERRIES -CHERRY -CHERUB -CHERUBIM -CHERUBS -CHERYL -CHESAPEAKE -CHESHIRE -CHESS -CHEST -CHESTER -CHESTERFIELD -CHESTERTON -CHESTNUT -CHESTNUTS -CHESTS -CHEVROLET -CHEVY -CHEW -CHEWED -CHEWER -CHEWERS -CHEWING -CHEWS -CHEYENNE -CHEYENNES -CHIANG -CHIC -CHICAGO -CHICAGOAN -CHICAGOANS -CHICANA -CHICANAS -CHICANERY -CHICANO -CHICANOS -CHICK -CHICKADEE -CHICKADEES -CHICKASAWS -CHICKEN -CHICKENS -CHICKS -CHIDE -CHIDED -CHIDES -CHIDING -CHIEF -CHIEFLY -CHIEFS -CHIEFTAIN -CHIEFTAINS -CHIFFON -CHILD -CHILDBIRTH -CHILDHOOD -CHILDISH -CHILDISHLY -CHILDISHNESS -CHILDLIKE -CHILDREN -CHILE -CHILEAN -CHILES -CHILI -CHILL -CHILLED -CHILLER -CHILLERS -CHILLIER -CHILLINESS -CHILLING -CHILLINGLY -CHILLS -CHILLY -CHIME -CHIMERA -CHIMES -CHIMNEY -CHIMNEYS -CHIMPANZEE -CHIN -CHINA -CHINAMAN -CHINAMEN -CHINAS -CHINATOWN -CHINESE -CHING -CHINK -CHINKED -CHINKS -CHINNED -CHINNER -CHINNERS -CHINNING -CHINOOK -CHINS -CHINTZ -CHIP -CHIPMUNK -CHIPMUNKS -CHIPPENDALE -CHIPPEWA -CHIPS -CHIROPRACTOR -CHIRP -CHIRPED -CHIRPING -CHIRPS -CHISEL -CHISELED -CHISELER -CHISELS -CHISHOLM -CHIT -CHIVALROUS -CHIVALROUSLY -CHIVALROUSNESS -CHIVALRY -CHLOE -CHLORINE -CHLOROFORM -CHLOROPHYLL -CHLOROPLAST -CHLOROPLASTS -CHOCK -CHOCKS -CHOCOLATE -CHOCOLATES -CHOCTAW -CHOCTAWS -CHOICE -CHOICES -CHOICEST -CHOIR -CHOIRS -CHOKE -CHOKED -CHOKER -CHOKERS -CHOKES -CHOKING -CHOLERA -CHOMSKY -CHOOSE -CHOOSER -CHOOSERS -CHOOSES -CHOOSING -CHOP -CHOPIN -CHOPPED -CHOPPER -CHOPPERS -CHOPPING -CHOPPY -CHOPS -CHORAL -CHORD -CHORDATE -CHORDED -CHORDING -CHORDS -CHORE -CHOREOGRAPH -CHOREOGRAPHY -CHORES -CHORING -CHORTLE -CHORUS -CHORUSED -CHORUSES -CHOSE -CHOSEN -CHOU -CHOWDER -CHRIS -CHRIST -CHRISTEN -CHRISTENDOM -CHRISTENED -CHRISTENING -CHRISTENS -CHRISTENSEN -CHRISTENSON -CHRISTIAN -CHRISTIANA -CHRISTIANITY -CHRISTIANIZATION -CHRISTIANIZATIONS -CHRISTIANIZE -CHRISTIANIZER -CHRISTIANIZERS -CHRISTIANIZES -CHRISTIANIZING -CHRISTIANS -CHRISTIANSEN -CHRISTIANSON -CHRISTIE -CHRISTINA -CHRISTINE -CHRISTLIKE -CHRISTMAS -CHRISTOFFEL -CHRISTOPH -CHRISTOPHER -CHRISTY -CHROMATOGRAM -CHROMATOGRAPH -CHROMATOGRAPHY -CHROME -CHROMIUM -CHROMOSPHERE -CHRONIC -CHRONICLE -CHRONICLED -CHRONICLER -CHRONICLERS -CHRONICLES -CHRONOGRAPH -CHRONOGRAPHY -CHRONOLOGICAL -CHRONOLOGICALLY -CHRONOLOGIES -CHRONOLOGY -CHRYSANTHEMUM -CHRYSLER -CHUBBIER -CHUBBIEST -CHUBBINESS -CHUBBY -CHUCK -CHUCKLE -CHUCKLED -CHUCKLES -CHUCKS -CHUM -CHUNGKING -CHUNK -CHUNKS -CHUNKY -CHURCH -CHURCHES -CHURCHGOER -CHURCHGOING -CHURCHILL -CHURCHILLIAN -CHURCHLY -CHURCHMAN -CHURCHMEN -CHURCHWOMAN -CHURCHWOMEN -CHURCHYARD -CHURCHYARDS -CHURN -CHURNED -CHURNING -CHURNS -CHUTE -CHUTES -CHUTZPAH -CICADA -CICERO -CICERONIAN -CICERONIANIZE -CICERONIANIZES -CIDER -CIGAR -CIGARETTE -CIGARETTES -CIGARS -CILIA -CINCINNATI -CINDER -CINDERELLA -CINDERS -CINDY -CINEMA -CINEMATIC -CINERAMA -CINNAMON -CIPHER -CIPHERS -CIPHERTEXT -CIPHERTEXTS -CIRCA -CIRCE -CIRCLE -CIRCLED -CIRCLES -CIRCLET -CIRCLING -CIRCUIT -CIRCUITOUS -CIRCUITOUSLY -CIRCUITRY -CIRCUITS -CIRCULANT -CIRCULAR -CIRCULARITY -CIRCULARLY -CIRCULATE -CIRCULATED -CIRCULATES -CIRCULATING -CIRCULATION -CIRCUMCISE -CIRCUMCISION -CIRCUMFERENCE -CIRCUMFLEX -CIRCUMLOCUTION -CIRCUMLOCUTIONS -CIRCUMNAVIGATE -CIRCUMNAVIGATED -CIRCUMNAVIGATES -CIRCUMPOLAR -CIRCUMSCRIBE -CIRCUMSCRIBED -CIRCUMSCRIBING -CIRCUMSCRIPTION -CIRCUMSPECT -CIRCUMSPECTION -CIRCUMSPECTLY -CIRCUMSTANCE -CIRCUMSTANCED -CIRCUMSTANCES -CIRCUMSTANTIAL -CIRCUMSTANTIALLY -CIRCUMVENT -CIRCUMVENTABLE -CIRCUMVENTED -CIRCUMVENTING -CIRCUMVENTS -CIRCUS -CIRCUSES -CISTERN -CISTERNS -CITADEL -CITADELS -CITATION -CITATIONS -CITE -CITED -CITES -CITIES -CITING -CITIZEN -CITIZENS -CITIZENSHIP -CITROEN -CITRUS -CITY -CITYSCAPE -CITYWIDE -CIVET -CIVIC -CIVICS -CIVIL -CIVILIAN -CIVILIANS -CIVILITY -CIVILIZATION -CIVILIZATIONS -CIVILIZE -CIVILIZED -CIVILIZES -CIVILIZING -CIVILLY -CLAD -CLADDING -CLAIM -CLAIMABLE -CLAIMANT -CLAIMANTS -CLAIMED -CLAIMING -CLAIMS -CLAIRE -CLAIRVOYANT -CLAIRVOYANTLY -CLAM -CLAMBER -CLAMBERED -CLAMBERING -CLAMBERS -CLAMOR -CLAMORED -CLAMORING -CLAMOROUS -CLAMORS -CLAMP -CLAMPED -CLAMPING -CLAMPS -CLAMS -CLAN -CLANDESTINE -CLANG -CLANGED -CLANGING -CLANGS -CLANK -CLANNISH -CLAP -CLAPBOARD -CLAPEYRON -CLAPPING -CLAPS -CLARA -CLARE -CLAREMONT -CLARENCE -CLARENDON -CLARIFICATION -CLARIFICATIONS -CLARIFIED -CLARIFIES -CLARIFY -CLARIFYING -CLARINET -CLARITY -CLARK -CLARKE -CLARRIDGE -CLASH -CLASHED -CLASHES -CLASHING -CLASP -CLASPED -CLASPING -CLASPS -CLASS -CLASSED -CLASSES -CLASSIC -CLASSICAL -CLASSICALLY -CLASSICS -CLASSIFIABLE -CLASSIFICATION -CLASSIFICATIONS -CLASSIFIED -CLASSIFIER -CLASSIFIERS -CLASSIFIES -CLASSIFY -CLASSIFYING -CLASSMATE -CLASSMATES -CLASSROOM -CLASSROOMS -CLASSY -CLATTER -CLATTERED -CLATTERING -CLAUDE -CLAUDIA -CLAUDIO -CLAUS -CLAUSE -CLAUSEN -CLAUSES -CLAUSIUS -CLAUSTROPHOBIA -CLAUSTROPHOBIC -CLAW -CLAWED -CLAWING -CLAWS -CLAY -CLAYS -CLAYTON -CLEAN -CLEANED -CLEANER -CLEANERS -CLEANEST -CLEANING -CLEANLINESS -CLEANLY -CLEANNESS -CLEANS -CLEANSE -CLEANSED -CLEANSER -CLEANSERS -CLEANSES -CLEANSING -CLEANUP -CLEAR -CLEARANCE -CLEARANCES -CLEARED -CLEARER -CLEAREST -CLEARING -CLEARINGS -CLEARLY -CLEARNESS -CLEARS -CLEARWATER -CLEAVAGE -CLEAVE -CLEAVED -CLEAVER -CLEAVERS -CLEAVES -CLEAVING -CLEFT -CLEFTS -CLEMENCY -CLEMENS -CLEMENT -CLEMENTE -CLEMSON -CLENCH -CLENCHED -CLENCHES -CLERGY -CLERGYMAN -CLERGYMEN -CLERICAL -CLERK -CLERKED -CLERKING -CLERKS -CLEVELAND -CLEVER -CLEVERER -CLEVEREST -CLEVERLY -CLEVERNESS -CLICHE -CLICHES -CLICK -CLICKED -CLICKING -CLICKS -CLIENT -CLIENTELE -CLIENTS -CLIFF -CLIFFORD -CLIFFS -CLIFTON -CLIMATE -CLIMATES -CLIMATIC -CLIMATICALLY -CLIMATOLOGY -CLIMAX -CLIMAXED -CLIMAXES -CLIMB -CLIMBED -CLIMBER -CLIMBERS -CLIMBING -CLIMBS -CLIME -CLIMES -CLINCH -CLINCHED -CLINCHER -CLINCHES -CLING -CLINGING -CLINGS -CLINIC -CLINICAL -CLINICALLY -CLINICIAN -CLINICS -CLINK -CLINKED -CLINKER -CLINT -CLINTON -CLIO -CLIP -CLIPBOARD -CLIPPED -CLIPPER -CLIPPERS -CLIPPING -CLIPPINGS -CLIPS -CLIQUE -CLIQUES -CLITORIS -CLIVE -CLOAK -CLOAKROOM -CLOAKS -CLOBBER -CLOBBERED -CLOBBERING -CLOBBERS -CLOCK -CLOCKED -CLOCKER -CLOCKERS -CLOCKING -CLOCKINGS -CLOCKS -CLOCKWATCHER -CLOCKWISE -CLOCKWORK -CLOD -CLODS -CLOG -CLOGGED -CLOGGING -CLOGS -CLOISTER -CLOISTERS -CLONE -CLONED -CLONES -CLONING -CLOSE -CLOSED -CLOSELY -CLOSENESS -CLOSENESSES -CLOSER -CLOSERS -CLOSES -CLOSEST -CLOSET -CLOSETED -CLOSETS -CLOSEUP -CLOSING -CLOSURE -CLOSURES -CLOT -CLOTH -CLOTHE -CLOTHED -CLOTHES -CLOTHESHORSE -CLOTHESLINE -CLOTHING -CLOTHO -CLOTTING -CLOTURE -CLOUD -CLOUDBURST -CLOUDED -CLOUDIER -CLOUDIEST -CLOUDINESS -CLOUDING -CLOUDLESS -CLOUDS -CLOUDY -CLOUT -CLOVE -CLOVER -CLOVES -CLOWN -CLOWNING -CLOWNS -CLUB -CLUBBED -CLUBBING -CLUBHOUSE -CLUBROOM -CLUBS -CLUCK -CLUCKED -CLUCKING -CLUCKS -CLUE -CLUES -CLUJ -CLUMP -CLUMPED -CLUMPING -CLUMPS -CLUMSILY -CLUMSINESS -CLUMSY -CLUNG -CLUSTER -CLUSTERED -CLUSTERING -CLUSTERINGS -CLUSTERS -CLUTCH -CLUTCHED -CLUTCHES -CLUTCHING -CLUTTER -CLUTTERED -CLUTTERING -CLUTTERS -CLYDE -CLYTEMNESTRA -COACH -COACHED -COACHER -COACHES -COACHING -COACHMAN -COACHMEN -COAGULATE -COAL -COALESCE -COALESCED -COALESCES -COALESCING -COALITION -COALS -COARSE -COARSELY -COARSEN -COARSENED -COARSENESS -COARSER -COARSEST -COAST -COASTAL -COASTED -COASTER -COASTERS -COASTING -COASTLINE -COASTS -COAT -COATED -COATES -COATING -COATINGS -COATS -COATTAIL -COAUTHOR -COAX -COAXED -COAXER -COAXES -COAXIAL -COAXING -COBALT -COBB -COBBLE -COBBLER -COBBLERS -COBBLESTONE -COBOL -COBOL -COBRA -COBWEB -COBWEBS -COCA -COCAINE -COCHISE -COCHRAN -COCHRANE -COCK -COCKED -COCKING -COCKPIT -COCKROACH -COCKS -COCKTAIL -COCKTAILS -COCKY -COCO -COCOA -COCONUT -COCONUTS -COCOON -COCOONS -COD -CODDINGTON -CODDLE -CODE -CODED -CODEINE -CODER -CODERS -CODES -CODEWORD -CODEWORDS -CODFISH -CODICIL -CODIFICATION -CODIFICATIONS -CODIFIED -CODIFIER -CODIFIERS -CODIFIES -CODIFY -CODIFYING -CODING -CODINGS -CODPIECE -CODY -COED -COEDITOR -COEDUCATION -COEFFICIENT -COEFFICIENTS -COEQUAL -COERCE -COERCED -COERCES -COERCIBLE -COERCING -COERCION -COERCIVE -COEXIST -COEXISTED -COEXISTENCE -COEXISTING -COEXISTS -COFACTOR -COFFEE -COFFEECUP -COFFEEPOT -COFFEES -COFFER -COFFERS -COFFEY -COFFIN -COFFINS -COFFMAN -COG -COGENT -COGENTLY -COGITATE -COGITATED -COGITATES -COGITATING -COGITATION -COGNAC -COGNITION -COGNITIVE -COGNITIVELY -COGNIZANCE -COGNIZANT -COGS -COHABITATION -COHABITATIONS -COHEN -COHERE -COHERED -COHERENCE -COHERENT -COHERENTLY -COHERES -COHERING -COHESION -COHESIVE -COHESIVELY -COHESIVENESS -COHN -COHORT -COIL -COILED -COILING -COILS -COIN -COINAGE -COINCIDE -COINCIDED -COINCIDENCE -COINCIDENCES -COINCIDENT -COINCIDENTAL -COINCIDES -COINCIDING -COINED -COINER -COINING -COINS -COKE -COKES -COLANDER -COLBY -COLD -COLDER -COLDEST -COLDLY -COLDNESS -COLDS -COLE -COLEMAN -COLERIDGE -COLETTE -COLGATE -COLICKY -COLIFORM -COLISEUM -COLLABORATE -COLLABORATED -COLLABORATES -COLLABORATING -COLLABORATION -COLLABORATIONS -COLLABORATIVE -COLLABORATOR -COLLABORATORS -COLLAGEN -COLLAPSE -COLLAPSED -COLLAPSES -COLLAPSIBLE -COLLAPSING -COLLAR -COLLARBONE -COLLARED -COLLARING -COLLARS -COLLATE -COLLATERAL -COLLEAGUE -COLLEAGUES -COLLECT -COLLECTED -COLLECTIBLE -COLLECTING -COLLECTION -COLLECTIONS -COLLECTIVE -COLLECTIVELY -COLLECTIVES -COLLECTOR -COLLECTORS -COLLECTS -COLLEGE -COLLEGES -COLLEGIAN -COLLEGIATE -COLLIDE -COLLIDED -COLLIDES -COLLIDING -COLLIE -COLLIER -COLLIES -COLLINS -COLLISION -COLLISIONS -COLLOIDAL -COLLOQUIA -COLLOQUIAL -COLLOQUIUM -COLLOQUY -COLLUSION -COLOGNE -COLOMBIA -COLOMBIAN -COLOMBIANS -COLOMBO -COLON -COLONEL -COLONELS -COLONIAL -COLONIALLY -COLONIALS -COLONIES -COLONIST -COLONISTS -COLONIZATION -COLONIZE -COLONIZED -COLONIZER -COLONIZERS -COLONIZES -COLONIZING -COLONS -COLONY -COLOR -COLORADO -COLORED -COLORER -COLORERS -COLORFUL -COLORING -COLORINGS -COLORLESS -COLORS -COLOSSAL -COLOSSEUM -COLT -COLTS -COLUMBIA -COLUMBIAN -COLUMBUS -COLUMN -COLUMNIZE -COLUMNIZED -COLUMNIZES -COLUMNIZING -COLUMNS -COMANCHE -COMB -COMBAT -COMBATANT -COMBATANTS -COMBATED -COMBATING -COMBATIVE -COMBATS -COMBED -COMBER -COMBERS -COMBINATION -COMBINATIONAL -COMBINATIONS -COMBINATOR -COMBINATORIAL -COMBINATORIALLY -COMBINATORIC -COMBINATORICS -COMBINATORS -COMBINE -COMBINED -COMBINES -COMBING -COMBINGS -COMBINING -COMBS -COMBUSTIBLE -COMBUSTION -COMDEX -COME -COMEBACK -COMEDIAN -COMEDIANS -COMEDIC -COMEDIES -COMEDY -COMELINESS -COMELY -COMER -COMERS -COMES -COMESTIBLE -COMET -COMETARY -COMETS -COMFORT -COMFORTABILITIES -COMFORTABILITY -COMFORTABLE -COMFORTABLY -COMFORTED -COMFORTER -COMFORTERS -COMFORTING -COMFORTINGLY -COMFORTS -COMIC -COMICAL -COMICALLY -COMICS -COMINFORM -COMING -COMINGS -COMMA -COMMAND -COMMANDANT -COMMANDANTS -COMMANDED -COMMANDEER -COMMANDER -COMMANDERS -COMMANDING -COMMANDINGLY -COMMANDMENT -COMMANDMENTS -COMMANDO -COMMANDS -COMMAS -COMMEMORATE -COMMEMORATED -COMMEMORATES -COMMEMORATING -COMMEMORATION -COMMEMORATIVE -COMMENCE -COMMENCED -COMMENCEMENT -COMMENCEMENTS -COMMENCES -COMMENCING -COMMEND -COMMENDATION -COMMENDATIONS -COMMENDED -COMMENDING -COMMENDS -COMMENSURATE -COMMENT -COMMENTARIES -COMMENTARY -COMMENTATOR -COMMENTATORS -COMMENTED -COMMENTING -COMMENTS -COMMERCE -COMMERCIAL -COMMERCIALLY -COMMERCIALNESS -COMMERCIALS -COMMISSION -COMMISSIONED -COMMISSIONER -COMMISSIONERS -COMMISSIONING -COMMISSIONS -COMMIT -COMMITMENT -COMMITMENTS -COMMITS -COMMITTED -COMMITTEE -COMMITTEEMAN -COMMITTEEMEN -COMMITTEES -COMMITTEEWOMAN -COMMITTEEWOMEN -COMMITTING -COMMODITIES -COMMODITY -COMMODORE -COMMODORES -COMMON -COMMONALITIES -COMMONALITY -COMMONER -COMMONERS -COMMONEST -COMMONLY -COMMONNESS -COMMONPLACE -COMMONPLACES -COMMONS -COMMONWEALTH -COMMONWEALTHS -COMMOTION -COMMUNAL -COMMUNALLY -COMMUNE -COMMUNES -COMMUNICANT -COMMUNICANTS -COMMUNICATE -COMMUNICATED -COMMUNICATES -COMMUNICATING -COMMUNICATION -COMMUNICATIONS -COMMUNICATIVE -COMMUNICATOR -COMMUNICATORS -COMMUNION -COMMUNIST -COMMUNISTS -COMMUNITIES -COMMUNITY -COMMUTATIVE -COMMUTATIVITY -COMMUTE -COMMUTED -COMMUTER -COMMUTERS -COMMUTES -COMMUTING -COMPACT -COMPACTED -COMPACTER -COMPACTEST -COMPACTING -COMPACTION -COMPACTLY -COMPACTNESS -COMPACTOR -COMPACTORS -COMPACTS -COMPANIES -COMPANION -COMPANIONABLE -COMPANIONS -COMPANIONSHIP -COMPANY -COMPARABILITY -COMPARABLE -COMPARABLY -COMPARATIVE -COMPARATIVELY -COMPARATIVES -COMPARATOR -COMPARATORS -COMPARE -COMPARED -COMPARES -COMPARING -COMPARISON -COMPARISONS -COMPARTMENT -COMPARTMENTALIZE -COMPARTMENTALIZED -COMPARTMENTALIZES -COMPARTMENTALIZING -COMPARTMENTED -COMPARTMENTS -COMPASS -COMPASSION -COMPASSIONATE -COMPASSIONATELY -COMPATIBILITIES -COMPATIBILITY -COMPATIBLE -COMPATIBLES -COMPATIBLY -COMPEL -COMPELLED -COMPELLING -COMPELLINGLY -COMPELS -COMPENDIUM -COMPENSATE -COMPENSATED -COMPENSATES -COMPENSATING -COMPENSATION -COMPENSATIONS -COMPENSATORY -COMPETE -COMPETED -COMPETENCE -COMPETENCY -COMPETENT -COMPETENTLY -COMPETES -COMPETING -COMPETITION -COMPETITIONS -COMPETITIVE -COMPETITIVELY -COMPETITOR -COMPETITORS -COMPILATION -COMPILATIONS -COMPILE -COMPILED -COMPILER -COMPILERS -COMPILES -COMPILING -COMPLACENCY -COMPLAIN -COMPLAINED -COMPLAINER -COMPLAINERS -COMPLAINING -COMPLAINS -COMPLAINT -COMPLAINTS -COMPLEMENT -COMPLEMENTARY -COMPLEMENTED -COMPLEMENTER -COMPLEMENTERS -COMPLEMENTING -COMPLEMENTS -COMPLETE -COMPLETED -COMPLETELY -COMPLETENESS -COMPLETES -COMPLETING -COMPLETION -COMPLETIONS -COMPLEX -COMPLEXES -COMPLEXION -COMPLEXITIES -COMPLEXITY -COMPLEXLY -COMPLIANCE -COMPLIANT -COMPLICATE -COMPLICATED -COMPLICATES -COMPLICATING -COMPLICATION -COMPLICATIONS -COMPLICATOR -COMPLICATORS -COMPLICITY -COMPLIED -COMPLIMENT -COMPLIMENTARY -COMPLIMENTED -COMPLIMENTER -COMPLIMENTERS -COMPLIMENTING -COMPLIMENTS -COMPLY -COMPLYING -COMPONENT -COMPONENTRY -COMPONENTS -COMPONENTWISE -COMPOSE -COMPOSED -COMPOSEDLY -COMPOSER -COMPOSERS -COMPOSES -COMPOSING -COMPOSITE -COMPOSITES -COMPOSITION -COMPOSITIONAL -COMPOSITIONS -COMPOST -COMPOSURE -COMPOUND -COMPOUNDED -COMPOUNDING -COMPOUNDS -COMPREHEND -COMPREHENDED -COMPREHENDING -COMPREHENDS -COMPREHENSIBILITY -COMPREHENSIBLE -COMPREHENSION -COMPREHENSIVE -COMPREHENSIVELY -COMPRESS -COMPRESSED -COMPRESSES -COMPRESSIBLE -COMPRESSING -COMPRESSION -COMPRESSIVE -COMPRESSOR -COMPRISE -COMPRISED -COMPRISES -COMPRISING -COMPROMISE -COMPROMISED -COMPROMISER -COMPROMISERS -COMPROMISES -COMPROMISING -COMPROMISINGLY -COMPTON -COMPTROLLER -COMPTROLLERS -COMPULSION -COMPULSIONS -COMPULSIVE -COMPULSORY -COMPUNCTION -COMPUSERVE -COMPUTABILITY -COMPUTABLE -COMPUTATION -COMPUTATIONAL -COMPUTATIONALLY -COMPUTATIONS -COMPUTE -COMPUTED -COMPUTER -COMPUTERIZE -COMPUTERIZED -COMPUTERIZES -COMPUTERIZING -COMPUTERS -COMPUTES -COMPUTING -COMRADE -COMRADELY -COMRADES -COMRADESHIP -CON -CONAKRY -CONANT -CONCATENATE -CONCATENATED -CONCATENATES -CONCATENATING -CONCATENATION -CONCATENATIONS -CONCAVE -CONCEAL -CONCEALED -CONCEALER -CONCEALERS -CONCEALING -CONCEALMENT -CONCEALS -CONCEDE -CONCEDED -CONCEDES -CONCEDING -CONCEIT -CONCEITED -CONCEITS -CONCEIVABLE -CONCEIVABLY -CONCEIVE -CONCEIVED -CONCEIVES -CONCEIVING -CONCENTRATE -CONCENTRATED -CONCENTRATES -CONCENTRATING -CONCENTRATION -CONCENTRATIONS -CONCENTRATOR -CONCENTRATORS -CONCENTRIC -CONCEPT -CONCEPTION -CONCEPTIONS -CONCEPTS -CONCEPTUAL -CONCEPTUALIZATION -CONCEPTUALIZATIONS -CONCEPTUALIZE -CONCEPTUALIZED -CONCEPTUALIZES -CONCEPTUALIZING -CONCEPTUALLY -CONCERN -CONCERNED -CONCERNEDLY -CONCERNING -CONCERNS -CONCERT -CONCERTED -CONCERTMASTER -CONCERTO -CONCERTS -CONCESSION -CONCESSIONS -CONCILIATE -CONCILIATORY -CONCISE -CONCISELY -CONCISENESS -CONCLAVE -CONCLUDE -CONCLUDED -CONCLUDES -CONCLUDING -CONCLUSION -CONCLUSIONS -CONCLUSIVE -CONCLUSIVELY -CONCOCT -CONCOMITANT -CONCORD -CONCORDANT -CONCORDE -CONCORDIA -CONCOURSE -CONCRETE -CONCRETELY -CONCRETENESS -CONCRETES -CONCRETION -CONCUBINE -CONCUR -CONCURRED -CONCURRENCE -CONCURRENCIES -CONCURRENCY -CONCURRENT -CONCURRENTLY -CONCURRING -CONCURS -CONCUSSION -CONDEMN -CONDEMNATION -CONDEMNATIONS -CONDEMNED -CONDEMNER -CONDEMNERS -CONDEMNING -CONDEMNS -CONDENSATION -CONDENSE -CONDENSED -CONDENSER -CONDENSES -CONDENSING -CONDESCEND -CONDESCENDING -CONDITION -CONDITIONAL -CONDITIONALLY -CONDITIONALS -CONDITIONED -CONDITIONER -CONDITIONERS -CONDITIONING -CONDITIONS -CONDOM -CONDONE -CONDONED -CONDONES -CONDONING -CONDUCE -CONDUCIVE -CONDUCIVENESS -CONDUCT -CONDUCTANCE -CONDUCTED -CONDUCTING -CONDUCTION -CONDUCTIVE -CONDUCTIVITY -CONDUCTOR -CONDUCTORS -CONDUCTS -CONDUIT -CONE -CONES -CONESTOGA -CONFECTIONERY -CONFEDERACY -CONFEDERATE -CONFEDERATES -CONFEDERATION -CONFEDERATIONS -CONFER -CONFEREE -CONFERENCE -CONFERENCES -CONFERRED -CONFERRER -CONFERRERS -CONFERRING -CONFERS -CONFESS -CONFESSED -CONFESSES -CONFESSING -CONFESSION -CONFESSIONS -CONFESSOR -CONFESSORS -CONFIDANT -CONFIDANTS -CONFIDE -CONFIDED -CONFIDENCE -CONFIDENCES -CONFIDENT -CONFIDENTIAL -CONFIDENTIALITY -CONFIDENTIALLY -CONFIDENTLY -CONFIDES -CONFIDING -CONFIDINGLY -CONFIGURABLE -CONFIGURATION -CONFIGURATIONS -CONFIGURE -CONFIGURED -CONFIGURES -CONFIGURING -CONFINE -CONFINED -CONFINEMENT -CONFINEMENTS -CONFINER -CONFINES -CONFINING -CONFIRM -CONFIRMATION -CONFIRMATIONS -CONFIRMATORY -CONFIRMED -CONFIRMING -CONFIRMS -CONFISCATE -CONFISCATED -CONFISCATES -CONFISCATING -CONFISCATION -CONFISCATIONS -CONFLAGRATION -CONFLICT -CONFLICTED -CONFLICTING -CONFLICTS -CONFLUENT -CONFOCAL -CONFORM -CONFORMAL -CONFORMANCE -CONFORMED -CONFORMING -CONFORMITY -CONFORMS -CONFOUND -CONFOUNDED -CONFOUNDING -CONFOUNDS -CONFRONT -CONFRONTATION -CONFRONTATIONS -CONFRONTED -CONFRONTER -CONFRONTERS -CONFRONTING -CONFRONTS -CONFUCIAN -CONFUCIANISM -CONFUCIUS -CONFUSE -CONFUSED -CONFUSER -CONFUSERS -CONFUSES -CONFUSING -CONFUSINGLY -CONFUSION -CONFUSIONS -CONGENIAL -CONGENIALLY -CONGENITAL -CONGEST -CONGESTED -CONGESTION -CONGESTIVE -CONGLOMERATE -CONGO -CONGOLESE -CONGRATULATE -CONGRATULATED -CONGRATULATION -CONGRATULATIONS -CONGRATULATORY -CONGREGATE -CONGREGATED -CONGREGATES -CONGREGATING -CONGREGATION -CONGREGATIONS -CONGRESS -CONGRESSES -CONGRESSIONAL -CONGRESSIONALLY -CONGRESSMAN -CONGRESSMEN -CONGRESSWOMAN -CONGRESSWOMEN -CONGRUENCE -CONGRUENT -CONIC -CONIFER -CONIFEROUS -CONJECTURE -CONJECTURED -CONJECTURES -CONJECTURING -CONJOINED -CONJUGAL -CONJUGATE -CONJUNCT -CONJUNCTED -CONJUNCTION -CONJUNCTIONS -CONJUNCTIVE -CONJUNCTIVELY -CONJUNCTS -CONJUNCTURE -CONJURE -CONJURED -CONJURER -CONJURES -CONJURING -CONKLIN -CONLEY -CONNALLY -CONNECT -CONNECTED -CONNECTEDNESS -CONNECTICUT -CONNECTING -CONNECTION -CONNECTIONLESS -CONNECTIONS -CONNECTIVE -CONNECTIVES -CONNECTIVITY -CONNECTOR -CONNECTORS -CONNECTS -CONNELLY -CONNER -CONNIE -CONNIVANCE -CONNIVE -CONNOISSEUR -CONNOISSEURS -CONNORS -CONNOTATION -CONNOTATIVE -CONNOTE -CONNOTED -CONNOTES -CONNOTING -CONNUBIAL -CONQUER -CONQUERABLE -CONQUERED -CONQUERER -CONQUERERS -CONQUERING -CONQUEROR -CONQUERORS -CONQUERS -CONQUEST -CONQUESTS -CONRAD -CONRAIL -CONSCIENCE -CONSCIENCES -CONSCIENTIOUS -CONSCIENTIOUSLY -CONSCIOUS -CONSCIOUSLY -CONSCIOUSNESS -CONSCRIPT -CONSCRIPTION -CONSECRATE -CONSECRATION -CONSECUTIVE -CONSECUTIVELY -CONSENSUAL -CONSENSUS -CONSENT -CONSENTED -CONSENTER -CONSENTERS -CONSENTING -CONSENTS -CONSEQUENCE -CONSEQUENCES -CONSEQUENT -CONSEQUENTIAL -CONSEQUENTIALITIES -CONSEQUENTIALITY -CONSEQUENTLY -CONSEQUENTS -CONSERVATION -CONSERVATIONIST -CONSERVATIONISTS -CONSERVATIONS -CONSERVATISM -CONSERVATIVE -CONSERVATIVELY -CONSERVATIVES -CONSERVATOR -CONSERVE -CONSERVED -CONSERVES -CONSERVING -CONSIDER -CONSIDERABLE -CONSIDERABLY -CONSIDERATE -CONSIDERATELY -CONSIDERATION -CONSIDERATIONS -CONSIDERED -CONSIDERING -CONSIDERS -CONSIGN -CONSIGNED -CONSIGNING -CONSIGNS -CONSIST -CONSISTED -CONSISTENCY -CONSISTENT -CONSISTENTLY -CONSISTING -CONSISTS -CONSOLABLE -CONSOLATION -CONSOLATIONS -CONSOLE -CONSOLED -CONSOLER -CONSOLERS -CONSOLES -CONSOLIDATE -CONSOLIDATED -CONSOLIDATES -CONSOLIDATING -CONSOLIDATION -CONSOLING -CONSOLINGLY -CONSONANT -CONSONANTS -CONSORT -CONSORTED -CONSORTING -CONSORTIUM -CONSORTS -CONSPICUOUS -CONSPICUOUSLY -CONSPIRACIES -CONSPIRACY -CONSPIRATOR -CONSPIRATORS -CONSPIRE -CONSPIRED -CONSPIRES -CONSPIRING -CONSTABLE -CONSTABLES -CONSTANCE -CONSTANCY -CONSTANT -CONSTANTINE -CONSTANTINOPLE -CONSTANTLY -CONSTANTS -CONSTELLATION -CONSTELLATIONS -CONSTERNATION -CONSTITUENCIES -CONSTITUENCY -CONSTITUENT -CONSTITUENTS -CONSTITUTE -CONSTITUTED -CONSTITUTES -CONSTITUTING -CONSTITUTION -CONSTITUTIONAL -CONSTITUTIONALITY -CONSTITUTIONALLY -CONSTITUTIONS -CONSTITUTIVE -CONSTRAIN -CONSTRAINED -CONSTRAINING -CONSTRAINS -CONSTRAINT -CONSTRAINTS -CONSTRICT -CONSTRUCT -CONSTRUCTED -CONSTRUCTIBILITY -CONSTRUCTIBLE -CONSTRUCTING -CONSTRUCTION -CONSTRUCTIONS -CONSTRUCTIVE -CONSTRUCTIVELY -CONSTRUCTOR -CONSTRUCTORS -CONSTRUCTS -CONSTRUE -CONSTRUED -CONSTRUING -CONSUL -CONSULAR -CONSULATE -CONSULATES -CONSULS -CONSULT -CONSULTANT -CONSULTANTS -CONSULTATION -CONSULTATIONS -CONSULTATIVE -CONSULTED -CONSULTING -CONSULTS -CONSUMABLE -CONSUME -CONSUMED -CONSUMER -CONSUMERS -CONSUMES -CONSUMING -CONSUMMATE -CONSUMMATED -CONSUMMATELY -CONSUMMATION -CONSUMPTION -CONSUMPTIONS -CONSUMPTIVE -CONSUMPTIVELY -CONTACT -CONTACTED -CONTACTING -CONTACTS -CONTAGION -CONTAGIOUS -CONTAGIOUSLY -CONTAIN -CONTAINABLE -CONTAINED -CONTAINER -CONTAINERS -CONTAINING -CONTAINMENT -CONTAINMENTS -CONTAINS -CONTAMINATE -CONTAMINATED -CONTAMINATES -CONTAMINATING -CONTAMINATION -CONTEMPLATE -CONTEMPLATED -CONTEMPLATES -CONTEMPLATING -CONTEMPLATION -CONTEMPLATIONS -CONTEMPLATIVE -CONTEMPORARIES -CONTEMPORARINESS -CONTEMPORARY -CONTEMPT -CONTEMPTIBLE -CONTEMPTUOUS -CONTEMPTUOUSLY -CONTEND -CONTENDED -CONTENDER -CONTENDERS -CONTENDING -CONTENDS -CONTENT -CONTENTED -CONTENTING -CONTENTION -CONTENTIONS -CONTENTLY -CONTENTMENT -CONTENTS -CONTEST -CONTESTABLE -CONTESTANT -CONTESTED -CONTESTER -CONTESTERS -CONTESTING -CONTESTS -CONTEXT -CONTEXTS -CONTEXTUAL -CONTEXTUALLY -CONTIGUITY -CONTIGUOUS -CONTIGUOUSLY -CONTINENT -CONTINENTAL -CONTINENTALLY -CONTINENTS -CONTINGENCIES -CONTINGENCY -CONTINGENT -CONTINGENTS -CONTINUAL -CONTINUALLY -CONTINUANCE -CONTINUANCES -CONTINUATION -CONTINUATIONS -CONTINUE -CONTINUED -CONTINUES -CONTINUING -CONTINUITIES -CONTINUITY -CONTINUOUS -CONTINUOUSLY -CONTINUUM -CONTORTIONS -CONTOUR -CONTOURED -CONTOURING -CONTOURS -CONTRABAND -CONTRACEPTION -CONTRACEPTIVE -CONTRACT -CONTRACTED -CONTRACTING -CONTRACTION -CONTRACTIONS -CONTRACTOR -CONTRACTORS -CONTRACTS -CONTRACTUAL -CONTRACTUALLY -CONTRADICT -CONTRADICTED -CONTRADICTING -CONTRADICTION -CONTRADICTIONS -CONTRADICTORY -CONTRADICTS -CONTRADISTINCTION -CONTRADISTINCTIONS -CONTRAPOSITIVE -CONTRAPOSITIVES -CONTRAPTION -CONTRAPTIONS -CONTRARINESS -CONTRARY -CONTRAST -CONTRASTED -CONTRASTER -CONTRASTERS -CONTRASTING -CONTRASTINGLY -CONTRASTS -CONTRIBUTE -CONTRIBUTED -CONTRIBUTES -CONTRIBUTING -CONTRIBUTION -CONTRIBUTIONS -CONTRIBUTOR -CONTRIBUTORILY -CONTRIBUTORS -CONTRIBUTORY -CONTRITE -CONTRITION -CONTRIVANCE -CONTRIVANCES -CONTRIVE -CONTRIVED -CONTRIVER -CONTRIVES -CONTRIVING -CONTROL -CONTROLLABILITY -CONTROLLABLE -CONTROLLABLY -CONTROLLED -CONTROLLER -CONTROLLERS -CONTROLLING -CONTROLS -CONTROVERSIAL -CONTROVERSIES -CONTROVERSY -CONTROVERTIBLE -CONTUMACIOUS -CONTUMACY -CONUNDRUM -CONUNDRUMS -CONVAIR -CONVALESCENT -CONVECT -CONVENE -CONVENED -CONVENES -CONVENIENCE -CONVENIENCES -CONVENIENT -CONVENIENTLY -CONVENING -CONVENT -CONVENTION -CONVENTIONAL -CONVENTIONALLY -CONVENTIONS -CONVENTS -CONVERGE -CONVERGED -CONVERGENCE -CONVERGENT -CONVERGES -CONVERGING -CONVERSANT -CONVERSANTLY -CONVERSATION -CONVERSATIONAL -CONVERSATIONALLY -CONVERSATIONS -CONVERSE -CONVERSED -CONVERSELY -CONVERSES -CONVERSING -CONVERSION -CONVERSIONS -CONVERT -CONVERTED -CONVERTER -CONVERTERS -CONVERTIBILITY -CONVERTIBLE -CONVERTING -CONVERTS -CONVEX -CONVEY -CONVEYANCE -CONVEYANCES -CONVEYED -CONVEYER -CONVEYERS -CONVEYING -CONVEYOR -CONVEYS -CONVICT -CONVICTED -CONVICTING -CONVICTION -CONVICTIONS -CONVICTS -CONVINCE -CONVINCED -CONVINCER -CONVINCERS -CONVINCES -CONVINCING -CONVINCINGLY -CONVIVIAL -CONVOKE -CONVOLUTED -CONVOLUTION -CONVOY -CONVOYED -CONVOYING -CONVOYS -CONVULSE -CONVULSION -CONVULSIONS -CONWAY -COO -COOING -COOK -COOKBOOK -COOKE -COOKED -COOKERY -COOKIE -COOKIES -COOKING -COOKS -COOKY -COOL -COOLED -COOLER -COOLERS -COOLEST -COOLEY -COOLIDGE -COOLIE -COOLIES -COOLING -COOLLY -COOLNESS -COOLS -COON -COONS -COOP -COOPED -COOPER -COOPERATE -COOPERATED -COOPERATES -COOPERATING -COOPERATION -COOPERATIONS -COOPERATIVE -COOPERATIVELY -COOPERATIVES -COOPERATOR -COOPERATORS -COOPERS -COOPS -COORDINATE -COORDINATED -COORDINATES -COORDINATING -COORDINATION -COORDINATIONS -COORDINATOR -COORDINATORS -COORS -COP -COPE -COPED -COPELAND -COPENHAGEN -COPERNICAN -COPERNICUS -COPES -COPIED -COPIER -COPIERS -COPIES -COPING -COPINGS -COPIOUS -COPIOUSLY -COPIOUSNESS -COPLANAR -COPPER -COPPERFIELD -COPPERHEAD -COPPERS -COPRA -COPROCESSOR -COPS -COPSE -COPY -COPYING -COPYRIGHT -COPYRIGHTABLE -COPYRIGHTED -COPYRIGHTS -COPYWRITER -COQUETTE -CORAL -CORBETT -CORCORAN -CORD -CORDED -CORDER -CORDIAL -CORDIALITY -CORDIALLY -CORDS -CORE -CORED -CORER -CORERS -CORES -COREY -CORIANDER -CORING -CORINTH -CORINTHIAN -CORINTHIANIZE -CORINTHIANIZES -CORINTHIANS -CORIOLANUS -CORK -CORKED -CORKER -CORKERS -CORKING -CORKS -CORKSCREW -CORMORANT -CORN -CORNEA -CORNELIA -CORNELIAN -CORNELIUS -CORNELL -CORNER -CORNERED -CORNERS -CORNERSTONE -CORNERSTONES -CORNET -CORNFIELD -CORNFIELDS -CORNING -CORNISH -CORNMEAL -CORNS -CORNSTARCH -CORNUCOPIA -CORNWALL -CORNWALLIS -CORNY -COROLLARIES -COROLLARY -CORONADO -CORONARIES -CORONARY -CORONATION -CORONER -CORONET -CORONETS -COROUTINE -COROUTINES -CORPORAL -CORPORALS -CORPORATE -CORPORATELY -CORPORATION -CORPORATIONS -CORPS -CORPSE -CORPSES -CORPULENT -CORPUS -CORPUSCULAR -CORRAL -CORRECT -CORRECTABLE -CORRECTED -CORRECTING -CORRECTION -CORRECTIONS -CORRECTIVE -CORRECTIVELY -CORRECTIVES -CORRECTLY -CORRECTNESS -CORRECTOR -CORRECTS -CORRELATE -CORRELATED -CORRELATES -CORRELATING -CORRELATION -CORRELATIONS -CORRELATIVE -CORRESPOND -CORRESPONDED -CORRESPONDENCE -CORRESPONDENCES -CORRESPONDENT -CORRESPONDENTS -CORRESPONDING -CORRESPONDINGLY -CORRESPONDS -CORRIDOR -CORRIDORS -CORRIGENDA -CORRIGENDUM -CORRIGIBLE -CORROBORATE -CORROBORATED -CORROBORATES -CORROBORATING -CORROBORATION -CORROBORATIONS -CORROBORATIVE -CORRODE -CORROSION -CORROSIVE -CORRUGATE -CORRUPT -CORRUPTED -CORRUPTER -CORRUPTIBLE -CORRUPTING -CORRUPTION -CORRUPTIONS -CORRUPTS -CORSET -CORSICA -CORSICAN -CORTEX -CORTEZ -CORTICAL -CORTLAND -CORVALLIS -CORVUS -CORYDORAS -COSGROVE -COSINE -COSINES -COSMETIC -COSMETICS -COSMIC -COSMOLOGY -COSMOPOLITAN -COSMOS -COSPONSOR -COSSACK -COST -COSTA -COSTED -COSTELLO -COSTING -COSTLY -COSTS -COSTUME -COSTUMED -COSTUMER -COSTUMES -COSTUMING -COSY -COT -COTANGENT -COTILLION -COTS -COTTAGE -COTTAGER -COTTAGES -COTTON -COTTONMOUTH -COTTONS -COTTONSEED -COTTONWOOD -COTTRELL -COTYLEDON -COTYLEDONS -COUCH -COUCHED -COUCHES -COUCHING -COUGAR -COUGH -COUGHED -COUGHING -COUGHS -COULD -COULOMB -COULTER -COUNCIL -COUNCILLOR -COUNCILLORS -COUNCILMAN -COUNCILMEN -COUNCILS -COUNCILWOMAN -COUNCILWOMEN -COUNSEL -COUNSELED -COUNSELING -COUNSELLED -COUNSELLING -COUNSELLOR -COUNSELLORS -COUNSELOR -COUNSELORS -COUNSELS -COUNT -COUNTABLE -COUNTABLY -COUNTED -COUNTENANCE -COUNTER -COUNTERACT -COUNTERACTED -COUNTERACTING -COUNTERACTIVE -COUNTERARGUMENT -COUNTERATTACK -COUNTERBALANCE -COUNTERCLOCKWISE -COUNTERED -COUNTEREXAMPLE -COUNTEREXAMPLES -COUNTERFEIT -COUNTERFEITED -COUNTERFEITER -COUNTERFEITING -COUNTERFLOW -COUNTERING -COUNTERINTUITIVE -COUNTERMAN -COUNTERMEASURE -COUNTERMEASURES -COUNTERMEN -COUNTERPART -COUNTERPARTS -COUNTERPOINT -COUNTERPOINTING -COUNTERPOISE -COUNTERPRODUCTIVE -COUNTERPROPOSAL -COUNTERREVOLUTION -COUNTERS -COUNTERSINK -COUNTERSUNK -COUNTESS -COUNTIES -COUNTING -COUNTLESS -COUNTRIES -COUNTRY -COUNTRYMAN -COUNTRYMEN -COUNTRYSIDE -COUNTRYWIDE -COUNTS -COUNTY -COUNTYWIDE -COUPLE -COUPLED -COUPLER -COUPLERS -COUPLES -COUPLING -COUPLINGS -COUPON -COUPONS -COURAGE -COURAGEOUS -COURAGEOUSLY -COURIER -COURIERS -COURSE -COURSED -COURSER -COURSES -COURSING -COURT -COURTED -COURTEOUS -COURTEOUSLY -COURTER -COURTERS -COURTESAN -COURTESIES -COURTESY -COURTHOUSE -COURTHOUSES -COURTIER -COURTIERS -COURTING -COURTLY -COURTNEY -COURTROOM -COURTROOMS -COURTS -COURTSHIP -COURTYARD -COURTYARDS -COUSIN -COUSINS -COVALENT -COVARIANT -COVE -COVENANT -COVENANTS -COVENT -COVENTRY -COVER -COVERABLE -COVERAGE -COVERED -COVERING -COVERINGS -COVERLET -COVERLETS -COVERS -COVERT -COVERTLY -COVES -COVET -COVETED -COVETING -COVETOUS -COVETOUSNESS -COVETS -COW -COWAN -COWARD -COWARDICE -COWARDLY -COWBOY -COWBOYS -COWED -COWER -COWERED -COWERER -COWERERS -COWERING -COWERINGLY -COWERS -COWHERD -COWHIDE -COWING -COWL -COWLICK -COWLING -COWLS -COWORKER -COWS -COWSLIP -COWSLIPS -COYOTE -COYOTES -COYPU -COZIER -COZINESS -COZY -CRAB -CRABAPPLE -CRABS -CRACK -CRACKED -CRACKER -CRACKERS -CRACKING -CRACKLE -CRACKLED -CRACKLES -CRACKLING -CRACKPOT -CRACKS -CRADLE -CRADLED -CRADLES -CRAFT -CRAFTED -CRAFTER -CRAFTINESS -CRAFTING -CRAFTS -CRAFTSMAN -CRAFTSMEN -CRAFTSPEOPLE -CRAFTSPERSON -CRAFTY -CRAG -CRAGGY -CRAGS -CRAIG -CRAM -CRAMER -CRAMMING -CRAMP -CRAMPS -CRAMS -CRANBERRIES -CRANBERRY -CRANDALL -CRANE -CRANES -CRANFORD -CRANIA -CRANIUM -CRANK -CRANKCASE -CRANKED -CRANKIER -CRANKIEST -CRANKILY -CRANKING -CRANKS -CRANKSHAFT -CRANKY -CRANNY -CRANSTON -CRASH -CRASHED -CRASHER -CRASHERS -CRASHES -CRASHING -CRASS -CRATE -CRATER -CRATERS -CRATES -CRAVAT -CRAVATS -CRAVE -CRAVED -CRAVEN -CRAVES -CRAVING -CRAWFORD -CRAWL -CRAWLED -CRAWLER -CRAWLERS -CRAWLING -CRAWLS -CRAY -CRAYON -CRAYS -CRAZE -CRAZED -CRAZES -CRAZIER -CRAZIEST -CRAZILY -CRAZINESS -CRAZING -CRAZY -CREAK -CREAKED -CREAKING -CREAKS -CREAKY -CREAM -CREAMED -CREAMER -CREAMERS -CREAMERY -CREAMING -CREAMS -CREAMY -CREASE -CREASED -CREASES -CREASING -CREATE -CREATED -CREATES -CREATING -CREATION -CREATIONS -CREATIVE -CREATIVELY -CREATIVENESS -CREATIVITY -CREATOR -CREATORS -CREATURE -CREATURES -CREDENCE -CREDENTIAL -CREDIBILITY -CREDIBLE -CREDIBLY -CREDIT -CREDITABLE -CREDITABLY -CREDITED -CREDITING -CREDITOR -CREDITORS -CREDITS -CREDULITY -CREDULOUS -CREDULOUSNESS -CREE -CREED -CREEDS -CREEK -CREEKS -CREEP -CREEPER -CREEPERS -CREEPING -CREEPS -CREEPY -CREIGHTON -CREMATE -CREMATED -CREMATES -CREMATING -CREMATION -CREMATIONS -CREMATORY -CREOLE -CREON -CREPE -CREPT -CRESCENT -CRESCENTS -CREST -CRESTED -CRESTFALLEN -CRESTS -CRESTVIEW -CRETACEOUS -CRETACEOUSLY -CRETAN -CRETE -CRETIN -CREVICE -CREVICES -CREW -CREWCUT -CREWED -CREWING -CREWS -CRIB -CRIBS -CRICKET -CRICKETS -CRIED -CRIER -CRIERS -CRIES -CRIME -CRIMEA -CRIMEAN -CRIMES -CRIMINAL -CRIMINALLY -CRIMINALS -CRIMINATE -CRIMSON -CRIMSONING -CRINGE -CRINGED -CRINGES -CRINGING -CRIPPLE -CRIPPLED -CRIPPLES -CRIPPLING -CRISES -CRISIS -CRISP -CRISPIN -CRISPLY -CRISPNESS -CRISSCROSS -CRITERIA -CRITERION -CRITIC -CRITICAL -CRITICALLY -CRITICISM -CRITICISMS -CRITICIZE -CRITICIZED -CRITICIZES -CRITICIZING -CRITICS -CRITIQUE -CRITIQUES -CRITIQUING -CRITTER -CROAK -CROAKED -CROAKING -CROAKS -CROATIA -CROATIAN -CROCHET -CROCHETS -CROCK -CROCKERY -CROCKETT -CROCKS -CROCODILE -CROCUS -CROFT -CROIX -CROMWELL -CROMWELLIAN -CROOK -CROOKED -CROOKS -CROP -CROPPED -CROPPER -CROPPERS -CROPPING -CROPS -CROSBY -CROSS -CROSSABLE -CROSSBAR -CROSSBARS -CROSSED -CROSSER -CROSSERS -CROSSES -CROSSING -CROSSINGS -CROSSLY -CROSSOVER -CROSSOVERS -CROSSPOINT -CROSSROAD -CROSSTALK -CROSSWALK -CROSSWORD -CROSSWORDS -CROTCH -CROTCHETY -CROUCH -CROUCHED -CROUCHING -CROW -CROWD -CROWDED -CROWDER -CROWDING -CROWDS -CROWED -CROWING -CROWLEY -CROWN -CROWNED -CROWNING -CROWNS -CROWS -CROYDON -CRUCIAL -CRUCIALLY -CRUCIBLE -CRUCIFIED -CRUCIFIES -CRUCIFIX -CRUCIFIXION -CRUCIFY -CRUCIFYING -CRUD -CRUDDY -CRUDE -CRUDELY -CRUDENESS -CRUDER -CRUDEST -CRUEL -CRUELER -CRUELEST -CRUELLY -CRUELTY -CRUICKSHANK -CRUISE -CRUISER -CRUISERS -CRUISES -CRUISING -CRUMB -CRUMBLE -CRUMBLED -CRUMBLES -CRUMBLING -CRUMBLY -CRUMBS -CRUMMY -CRUMPLE -CRUMPLED -CRUMPLES -CRUMPLING -CRUNCH -CRUNCHED -CRUNCHES -CRUNCHIER -CRUNCHIEST -CRUNCHING -CRUNCHY -CRUSADE -CRUSADER -CRUSADERS -CRUSADES -CRUSADING -CRUSH -CRUSHABLE -CRUSHED -CRUSHER -CRUSHERS -CRUSHES -CRUSHING -CRUSHINGLY -CRUSOE -CRUST -CRUSTACEAN -CRUSTACEANS -CRUSTS -CRUTCH -CRUTCHES -CRUX -CRUXES -CRUZ -CRY -CRYING -CRYOGENIC -CRYPT -CRYPTANALYSIS -CRYPTANALYST -CRYPTANALYTIC -CRYPTIC -CRYPTOGRAM -CRYPTOGRAPHER -CRYPTOGRAPHIC -CRYPTOGRAPHICALLY -CRYPTOGRAPHY -CRYPTOLOGIST -CRYPTOLOGY -CRYSTAL -CRYSTALLINE -CRYSTALLIZE -CRYSTALLIZED -CRYSTALLIZES -CRYSTALLIZING -CRYSTALS -CUB -CUBA -CUBAN -CUBANIZE -CUBANIZES -CUBANS -CUBBYHOLE -CUBE -CUBED -CUBES -CUBIC -CUBS -CUCKOO -CUCKOOS -CUCUMBER -CUCUMBERS -CUDDLE -CUDDLED -CUDDLY -CUDGEL -CUDGELS -CUE -CUED -CUES -CUFF -CUFFLINK -CUFFS -CUISINE -CULBERTSON -CULINARY -CULL -CULLED -CULLER -CULLING -CULLS -CULMINATE -CULMINATED -CULMINATES -CULMINATING -CULMINATION -CULPA -CULPABLE -CULPRIT -CULPRITS -CULT -CULTIVABLE -CULTIVATE -CULTIVATED -CULTIVATES -CULTIVATING -CULTIVATION -CULTIVATIONS -CULTIVATOR -CULTIVATORS -CULTS -CULTURAL -CULTURALLY -CULTURE -CULTURED -CULTURES -CULTURING -CULVER -CULVERS -CUMBERLAND -CUMBERSOME -CUMMINGS -CUMMINS -CUMULATIVE -CUMULATIVELY -CUNARD -CUNNILINGUS -CUNNING -CUNNINGHAM -CUNNINGLY -CUP -CUPBOARD -CUPBOARDS -CUPERTINO -CUPFUL -CUPID -CUPPED -CUPPING -CUPS -CURABLE -CURABLY -CURB -CURBING -CURBS -CURD -CURDLE -CURE -CURED -CURES -CURFEW -CURFEWS -CURING -CURIOSITIES -CURIOSITY -CURIOUS -CURIOUSER -CURIOUSEST -CURIOUSLY -CURL -CURLED -CURLER -CURLERS -CURLICUE -CURLING -CURLS -CURLY -CURRAN -CURRANT -CURRANTS -CURRENCIES -CURRENCY -CURRENT -CURRENTLY -CURRENTNESS -CURRENTS -CURRICULAR -CURRICULUM -CURRICULUMS -CURRIED -CURRIES -CURRY -CURRYING -CURS -CURSE -CURSED -CURSES -CURSING -CURSIVE -CURSOR -CURSORILY -CURSORS -CURSORY -CURT -CURTAIL -CURTAILED -CURTAILS -CURTAIN -CURTAINED -CURTAINS -CURTATE -CURTIS -CURTLY -CURTNESS -CURTSIES -CURTSY -CURVACEOUS -CURVATURE -CURVE -CURVED -CURVES -CURVILINEAR -CURVING -CUSHING -CUSHION -CUSHIONED -CUSHIONING -CUSHIONS -CUSHMAN -CUSP -CUSPS -CUSTARD -CUSTER -CUSTODIAL -CUSTODIAN -CUSTODIANS -CUSTODY -CUSTOM -CUSTOMARILY -CUSTOMARY -CUSTOMER -CUSTOMERS -CUSTOMIZABLE -CUSTOMIZATION -CUSTOMIZATIONS -CUSTOMIZE -CUSTOMIZED -CUSTOMIZER -CUSTOMIZERS -CUSTOMIZES -CUSTOMIZING -CUSTOMS -CUT -CUTANEOUS -CUTBACK -CUTE -CUTEST -CUTLASS -CUTLET -CUTOFF -CUTOUT -CUTOVER -CUTS -CUTTER -CUTTERS -CUTTHROAT -CUTTING -CUTTINGLY -CUTTINGS -CUTTLEFISH -CUVIER -CUZCO -CYANAMID -CYANIDE -CYBERNETIC -CYBERNETICS -CYBERSPACE -CYCLADES -CYCLE -CYCLED -CYCLES -CYCLIC -CYCLICALLY -CYCLING -CYCLOID -CYCLOIDAL -CYCLOIDS -CYCLONE -CYCLONES -CYCLOPS -CYCLOTRON -CYCLOTRONS -CYGNUS -CYLINDER -CYLINDERS -CYLINDRICAL -CYMBAL -CYMBALS -CYNIC -CYNICAL -CYNICALLY -CYNTHIA -CYPRESS -CYPRIAN -CYPRIOT -CYPRUS -CYRIL -CYRILLIC -CYRUS -CYST -CYSTS -CYTOLOGY -CYTOPLASM -CZAR -CZECH -CZECHIZATION -CZECHIZATIONS -CZECHOSLOVAKIA -CZERNIAK -DABBLE -DABBLED -DABBLER -DABBLES -DABBLING -DACCA -DACRON -DACTYL -DACTYLIC -DAD -DADA -DADAISM -DADAIST -DADAISTIC -DADDY -DADE -DADS -DAEDALUS -DAEMON -DAEMONS -DAFFODIL -DAFFODILS -DAGGER -DAHL -DAHLIA -DAHOMEY -DAILEY -DAILIES -DAILY -DAIMLER -DAINTILY -DAINTINESS -DAINTY -DAIRY -DAIRYLEA -DAISIES -DAISY -DAKAR -DAKOTA -DALE -DALES -DALEY -DALHOUSIE -DALI -DALLAS -DALTON -DALY -DALZELL -DAM -DAMAGE -DAMAGED -DAMAGER -DAMAGERS -DAMAGES -DAMAGING -DAMASCUS -DAMASK -DAME -DAMMING -DAMN -DAMNATION -DAMNED -DAMNING -DAMNS -DAMOCLES -DAMON -DAMP -DAMPEN -DAMPENS -DAMPER -DAMPING -DAMPNESS -DAMS -DAMSEL -DAMSELS -DAN -DANA -DANBURY -DANCE -DANCED -DANCER -DANCERS -DANCES -DANCING -DANDELION -DANDELIONS -DANDY -DANE -DANES -DANGER -DANGEROUS -DANGEROUSLY -DANGERS -DANGLE -DANGLED -DANGLES -DANGLING -DANIEL -DANIELS -DANIELSON -DANISH -DANIZATION -DANIZATIONS -DANIZE -DANIZES -DANNY -DANTE -DANUBE -DANUBIAN -DANVILLE -DANZIG -DAPHNE -DAR -DARE -DARED -DARER -DARERS -DARES -DARESAY -DARING -DARINGLY -DARIUS -DARK -DARKEN -DARKER -DARKEST -DARKLY -DARKNESS -DARKROOM -DARLENE -DARLING -DARLINGS -DARLINGTON -DARN -DARNED -DARNER -DARNING -DARNS -DARPA -DARRELL -DARROW -DARRY -DART -DARTED -DARTER -DARTING -DARTMOUTH -DARTS -DARWIN -DARWINIAN -DARWINISM -DARWINISTIC -DARWINIZE -DARWINIZES -DASH -DASHBOARD -DASHED -DASHER -DASHERS -DASHES -DASHING -DASHINGLY -DATA -DATABASE -DATABASES -DATAGRAM -DATAGRAMS -DATAMATION -DATAMEDIA -DATE -DATED -DATELINE -DATER -DATES -DATING -DATIVE -DATSUN -DATUM -DAUGHERTY -DAUGHTER -DAUGHTERLY -DAUGHTERS -DAUNT -DAUNTED -DAUNTLESS -DAVE -DAVID -DAVIDSON -DAVIE -DAVIES -DAVINICH -DAVIS -DAVISON -DAVY -DAWN -DAWNED -DAWNING -DAWNS -DAWSON -DAY -DAYBREAK -DAYDREAM -DAYDREAMING -DAYDREAMS -DAYLIGHT -DAYLIGHTS -DAYS -DAYTIME -DAYTON -DAYTONA -DAZE -DAZED -DAZZLE -DAZZLED -DAZZLER -DAZZLES -DAZZLING -DAZZLINGLY -DEACON -DEACONS -DEACTIVATE -DEAD -DEADEN -DEADLINE -DEADLINES -DEADLOCK -DEADLOCKED -DEADLOCKING -DEADLOCKS -DEADLY -DEADNESS -DEADWOOD -DEAF -DEAFEN -DEAFER -DEAFEST -DEAFNESS -DEAL -DEALER -DEALERS -DEALERSHIP -DEALING -DEALINGS -DEALLOCATE -DEALLOCATED -DEALLOCATING -DEALLOCATION -DEALLOCATIONS -DEALS -DEALT -DEAN -DEANE -DEANNA -DEANS -DEAR -DEARBORN -DEARER -DEAREST -DEARLY -DEARNESS -DEARTH -DEARTHS -DEATH -DEATHBED -DEATHLY -DEATHS -DEBACLE -DEBAR -DEBASE -DEBATABLE -DEBATE -DEBATED -DEBATER -DEBATERS -DEBATES -DEBATING -DEBAUCH -DEBAUCHERY -DEBBIE -DEBBY -DEBILITATE -DEBILITATED -DEBILITATES -DEBILITATING -DEBILITY -DEBIT -DEBITED -DEBORAH -DEBRA -DEBRIEF -DEBRIS -DEBT -DEBTOR -DEBTS -DEBUG -DEBUGGED -DEBUGGER -DEBUGGERS -DEBUGGING -DEBUGS -DEBUNK -DEBUSSY -DEBUTANTE -DEC -DECADE -DECADENCE -DECADENT -DECADENTLY -DECADES -DECAL -DECATHLON -DECATUR -DECAY -DECAYED -DECAYING -DECAYS -DECCA -DECEASE -DECEASED -DECEASES -DECEASING -DECEDENT -DECEIT -DECEITFUL -DECEITFULLY -DECEITFULNESS -DECEIVE -DECEIVED -DECEIVER -DECEIVERS -DECEIVES -DECEIVING -DECELERATE -DECELERATED -DECELERATES -DECELERATING -DECELERATION -DECEMBER -DECEMBERS -DECENCIES -DECENCY -DECENNIAL -DECENT -DECENTLY -DECENTRALIZATION -DECENTRALIZED -DECEPTION -DECEPTIONS -DECEPTIVE -DECEPTIVELY -DECERTIFY -DECIBEL -DECIDABILITY -DECIDABLE -DECIDE -DECIDED -DECIDEDLY -DECIDES -DECIDING -DECIDUOUS -DECIMAL -DECIMALS -DECIMATE -DECIMATED -DECIMATES -DECIMATING -DECIMATION -DECIPHER -DECIPHERED -DECIPHERER -DECIPHERING -DECIPHERS -DECISION -DECISIONS -DECISIVE -DECISIVELY -DECISIVENESS -DECK -DECKED -DECKER -DECKING -DECKINGS -DECKS -DECLARATION -DECLARATIONS -DECLARATIVE -DECLARATIVELY -DECLARATIVES -DECLARATOR -DECLARATORY -DECLARE -DECLARED -DECLARER -DECLARERS -DECLARES -DECLARING -DECLASSIFY -DECLINATION -DECLINATIONS -DECLINE -DECLINED -DECLINER -DECLINERS -DECLINES -DECLINING -DECNET -DECODE -DECODED -DECODER -DECODERS -DECODES -DECODING -DECODINGS -DECOLLETAGE -DECOLLIMATE -DECOMPILE -DECOMPOSABILITY -DECOMPOSABLE -DECOMPOSE -DECOMPOSED -DECOMPOSES -DECOMPOSING -DECOMPOSITION -DECOMPOSITIONS -DECOMPRESS -DECOMPRESSION -DECORATE -DECORATED -DECORATES -DECORATING -DECORATION -DECORATIONS -DECORATIVE -DECORUM -DECOUPLE -DECOUPLED -DECOUPLES -DECOUPLING -DECOY -DECOYS -DECREASE -DECREASED -DECREASES -DECREASING -DECREASINGLY -DECREE -DECREED -DECREEING -DECREES -DECREMENT -DECREMENTED -DECREMENTING -DECREMENTS -DECRYPT -DECRYPTED -DECRYPTING -DECRYPTION -DECRYPTS -DECSTATION -DECSYSTEM -DECTAPE -DEDICATE -DEDICATED -DEDICATES -DEDICATING -DEDICATION -DEDUCE -DEDUCED -DEDUCER -DEDUCES -DEDUCIBLE -DEDUCING -DEDUCT -DEDUCTED -DEDUCTIBLE -DEDUCTING -DEDUCTION -DEDUCTIONS -DEDUCTIVE -DEE -DEED -DEEDED -DEEDING -DEEDS -DEEM -DEEMED -DEEMING -DEEMPHASIZE -DEEMPHASIZED -DEEMPHASIZES -DEEMPHASIZING -DEEMS -DEEP -DEEPEN -DEEPENED -DEEPENING -DEEPENS -DEEPER -DEEPEST -DEEPLY -DEEPS -DEER -DEERE -DEFACE -DEFAULT -DEFAULTED -DEFAULTER -DEFAULTING -DEFAULTS -DEFEAT -DEFEATED -DEFEATING -DEFEATS -DEFECATE -DEFECT -DEFECTED -DEFECTING -DEFECTION -DEFECTIONS -DEFECTIVE -DEFECTS -DEFEND -DEFENDANT -DEFENDANTS -DEFENDED -DEFENDER -DEFENDERS -DEFENDING -DEFENDS -DEFENESTRATE -DEFENESTRATED -DEFENESTRATES -DEFENESTRATING -DEFENESTRATION -DEFENSE -DEFENSELESS -DEFENSES -DEFENSIBLE -DEFENSIVE -DEFER -DEFERENCE -DEFERMENT -DEFERMENTS -DEFERRABLE -DEFERRED -DEFERRER -DEFERRERS -DEFERRING -DEFERS -DEFIANCE -DEFIANT -DEFIANTLY -DEFICIENCIES -DEFICIENCY -DEFICIENT -DEFICIT -DEFICITS -DEFIED -DEFIES -DEFILE -DEFILING -DEFINABLE -DEFINE -DEFINED -DEFINER -DEFINES -DEFINING -DEFINITE -DEFINITELY -DEFINITENESS -DEFINITION -DEFINITIONAL -DEFINITIONS -DEFINITIVE -DEFLATE -DEFLATER -DEFLECT -DEFOCUS -DEFOE -DEFOREST -DEFORESTATION -DEFORM -DEFORMATION -DEFORMATIONS -DEFORMED -DEFORMITIES -DEFORMITY -DEFRAUD -DEFRAY -DEFROST -DEFTLY -DEFUNCT -DEFY -DEFYING -DEGENERACY -DEGENERATE -DEGENERATED -DEGENERATES -DEGENERATING -DEGENERATION -DEGENERATIVE -DEGRADABLE -DEGRADATION -DEGRADATIONS -DEGRADE -DEGRADED -DEGRADES -DEGRADING -DEGREE -DEGREES -DEHUMIDIFY -DEHYDRATE -DEIFY -DEIGN -DEIGNED -DEIGNING -DEIGNS -DEIMOS -DEIRDRE -DEIRDRES -DEITIES -DEITY -DEJECTED -DEJECTEDLY -DEKALB -DEKASTERE -DEL -DELANEY -DELANO -DELAWARE -DELAY -DELAYED -DELAYING -DELAYS -DELEGATE -DELEGATED -DELEGATES -DELEGATING -DELEGATION -DELEGATIONS -DELETE -DELETED -DELETER -DELETERIOUS -DELETES -DELETING -DELETION -DELETIONS -DELFT -DELHI -DELIA -DELIBERATE -DELIBERATED -DELIBERATELY -DELIBERATENESS -DELIBERATES -DELIBERATING -DELIBERATION -DELIBERATIONS -DELIBERATIVE -DELIBERATOR -DELIBERATORS -DELICACIES -DELICACY -DELICATE -DELICATELY -DELICATESSEN -DELICIOUS -DELICIOUSLY -DELIGHT -DELIGHTED -DELIGHTEDLY -DELIGHTFUL -DELIGHTFULLY -DELIGHTING -DELIGHTS -DELILAH -DELIMIT -DELIMITATION -DELIMITED -DELIMITER -DELIMITERS -DELIMITING -DELIMITS -DELINEAMENT -DELINEATE -DELINEATED -DELINEATES -DELINEATING -DELINEATION -DELINQUENCY -DELINQUENT -DELIRIOUS -DELIRIOUSLY -DELIRIUM -DELIVER -DELIVERABLE -DELIVERABLES -DELIVERANCE -DELIVERED -DELIVERER -DELIVERERS -DELIVERIES -DELIVERING -DELIVERS -DELIVERY -DELL -DELLA -DELLS -DELLWOOD -DELMARVA -DELPHI -DELPHIC -DELPHICALLY -DELPHINUS -DELTA -DELTAS -DELUDE -DELUDED -DELUDES -DELUDING -DELUGE -DELUGED -DELUGES -DELUSION -DELUSIONS -DELUXE -DELVE -DELVES -DELVING -DEMAGNIFY -DEMAGOGUE -DEMAND -DEMANDED -DEMANDER -DEMANDING -DEMANDINGLY -DEMANDS -DEMARCATE -DEMEANOR -DEMENTED -DEMERIT -DEMETER -DEMIGOD -DEMISE -DEMO -DEMOCRACIES -DEMOCRACY -DEMOCRAT -DEMOCRATIC -DEMOCRATICALLY -DEMOCRATS -DEMODULATE -DEMODULATOR -DEMOGRAPHIC -DEMOLISH -DEMOLISHED -DEMOLISHES -DEMOLITION -DEMON -DEMONIAC -DEMONIC -DEMONS -DEMONSTRABLE -DEMONSTRATE -DEMONSTRATED -DEMONSTRATES -DEMONSTRATING -DEMONSTRATION -DEMONSTRATIONS -DEMONSTRATIVE -DEMONSTRATIVELY -DEMONSTRATOR -DEMONSTRATORS -DEMORALIZE -DEMORALIZED -DEMORALIZES -DEMORALIZING -DEMORGAN -DEMOTE -DEMOUNTABLE -DEMPSEY -DEMULTIPLEX -DEMULTIPLEXED -DEMULTIPLEXER -DEMULTIPLEXERS -DEMULTIPLEXING -DEMUR -DEMYTHOLOGIZE -DEN -DENATURE -DENEB -DENEBOLA -DENEEN -DENIABLE -DENIAL -DENIALS -DENIED -DENIER -DENIES -DENIGRATE -DENIGRATED -DENIGRATES -DENIGRATING -DENIZEN -DENMARK -DENNIS -DENNY -DENOMINATE -DENOMINATION -DENOMINATIONS -DENOMINATOR -DENOMINATORS -DENOTABLE -DENOTATION -DENOTATIONAL -DENOTATIONALLY -DENOTATIONS -DENOTATIVE -DENOTE -DENOTED -DENOTES -DENOTING -DENOUNCE -DENOUNCED -DENOUNCES -DENOUNCING -DENS -DENSE -DENSELY -DENSENESS -DENSER -DENSEST -DENSITIES -DENSITY -DENT -DENTAL -DENTALLY -DENTED -DENTING -DENTIST -DENTISTRY -DENTISTS -DENTON -DENTS -DENTURE -DENUDE -DENUMERABLE -DENUNCIATE -DENUNCIATION -DENVER -DENY -DENYING -DEODORANT -DEOXYRIBONUCLEIC -DEPART -DEPARTED -DEPARTING -DEPARTMENT -DEPARTMENTAL -DEPARTMENTS -DEPARTS -DEPARTURE -DEPARTURES -DEPEND -DEPENDABILITY -DEPENDABLE -DEPENDABLY -DEPENDED -DEPENDENCE -DEPENDENCIES -DEPENDENCY -DEPENDENT -DEPENDENTLY -DEPENDENTS -DEPENDING -DEPENDS -DEPICT -DEPICTED -DEPICTING -DEPICTS -DEPLETE -DEPLETED -DEPLETES -DEPLETING -DEPLETION -DEPLETIONS -DEPLORABLE -DEPLORE -DEPLORED -DEPLORES -DEPLORING -DEPLOY -DEPLOYED -DEPLOYING -DEPLOYMENT -DEPLOYMENTS -DEPLOYS -DEPORT -DEPORTATION -DEPORTEE -DEPORTMENT -DEPOSE -DEPOSED -DEPOSES -DEPOSIT -DEPOSITARY -DEPOSITED -DEPOSITING -DEPOSITION -DEPOSITIONS -DEPOSITOR -DEPOSITORS -DEPOSITORY -DEPOSITS -DEPOT -DEPOTS -DEPRAVE -DEPRAVED -DEPRAVITY -DEPRECATE -DEPRECIATE -DEPRECIATED -DEPRECIATES -DEPRECIATION -DEPRESS -DEPRESSED -DEPRESSES -DEPRESSING -DEPRESSION -DEPRESSIONS -DEPRIVATION -DEPRIVATIONS -DEPRIVE -DEPRIVED -DEPRIVES -DEPRIVING -DEPTH -DEPTHS -DEPUTIES -DEPUTY -DEQUEUE -DEQUEUED -DEQUEUES -DEQUEUING -DERAIL -DERAILED -DERAILING -DERAILS -DERBY -DERBYSHIRE -DEREFERENCE -DEREGULATE -DEREGULATED -DEREK -DERIDE -DERISION -DERIVABLE -DERIVATION -DERIVATIONS -DERIVATIVE -DERIVATIVES -DERIVE -DERIVED -DERIVES -DERIVING -DEROGATORY -DERRICK -DERRIERE -DERVISH -DES -DESCARTES -DESCEND -DESCENDANT -DESCENDANTS -DESCENDED -DESCENDENT -DESCENDER -DESCENDERS -DESCENDING -DESCENDS -DESCENT -DESCENTS -DESCRIBABLE -DESCRIBE -DESCRIBED -DESCRIBER -DESCRIBES -DESCRIBING -DESCRIPTION -DESCRIPTIONS -DESCRIPTIVE -DESCRIPTIVELY -DESCRIPTIVES -DESCRIPTOR -DESCRIPTORS -DESCRY -DESECRATE -DESEGREGATE -DESERT -DESERTED -DESERTER -DESERTERS -DESERTING -DESERTION -DESERTIONS -DESERTS -DESERVE -DESERVED -DESERVES -DESERVING -DESERVINGLY -DESERVINGS -DESIDERATA -DESIDERATUM -DESIGN -DESIGNATE -DESIGNATED -DESIGNATES -DESIGNATING -DESIGNATION -DESIGNATIONS -DESIGNATOR -DESIGNATORS -DESIGNED -DESIGNER -DESIGNERS -DESIGNING -DESIGNS -DESIRABILITY -DESIRABLE -DESIRABLY -DESIRE -DESIRED -DESIRES -DESIRING -DESIROUS -DESIST -DESK -DESKS -DESKTOP -DESMOND -DESOLATE -DESOLATELY -DESOLATION -DESOLATIONS -DESPAIR -DESPAIRED -DESPAIRING -DESPAIRINGLY -DESPAIRS -DESPATCH -DESPATCHED -DESPERADO -DESPERATE -DESPERATELY -DESPERATION -DESPICABLE -DESPISE -DESPISED -DESPISES -DESPISING -DESPITE -DESPOIL -DESPONDENT -DESPOT -DESPOTIC -DESPOTISM -DESPOTS -DESSERT -DESSERTS -DESSICATE -DESTABILIZE -DESTINATION -DESTINATIONS -DESTINE -DESTINED -DESTINIES -DESTINY -DESTITUTE -DESTITUTION -DESTROY -DESTROYED -DESTROYER -DESTROYERS -DESTROYING -DESTROYS -DESTRUCT -DESTRUCTION -DESTRUCTIONS -DESTRUCTIVE -DESTRUCTIVELY -DESTRUCTIVENESS -DESTRUCTOR -DESTUFF -DESTUFFING -DESTUFFS -DESUETUDE -DESULTORY -DESYNCHRONIZE -DETACH -DETACHED -DETACHER -DETACHES -DETACHING -DETACHMENT -DETACHMENTS -DETAIL -DETAILED -DETAILING -DETAILS -DETAIN -DETAINED -DETAINING -DETAINS -DETECT -DETECTABLE -DETECTABLY -DETECTED -DETECTING -DETECTION -DETECTIONS -DETECTIVE -DETECTIVES -DETECTOR -DETECTORS -DETECTS -DETENTE -DETENTION -DETER -DETERGENT -DETERIORATE -DETERIORATED -DETERIORATES -DETERIORATING -DETERIORATION -DETERMINABLE -DETERMINACY -DETERMINANT -DETERMINANTS -DETERMINATE -DETERMINATELY -DETERMINATION -DETERMINATIONS -DETERMINATIVE -DETERMINE -DETERMINED -DETERMINER -DETERMINERS -DETERMINES -DETERMINING -DETERMINISM -DETERMINISTIC -DETERMINISTICALLY -DETERRED -DETERRENT -DETERRING -DETEST -DETESTABLE -DETESTED -DETOUR -DETRACT -DETRACTOR -DETRACTORS -DETRACTS -DETRIMENT -DETRIMENTAL -DETROIT -DEUCE -DEUS -DEUTERIUM -DEUTSCH -DEVASTATE -DEVASTATED -DEVASTATES -DEVASTATING -DEVASTATION -DEVELOP -DEVELOPED -DEVELOPER -DEVELOPERS -DEVELOPING -DEVELOPMENT -DEVELOPMENTAL -DEVELOPMENTS -DEVELOPS -DEVIANT -DEVIANTS -DEVIATE -DEVIATED -DEVIATES -DEVIATING -DEVIATION -DEVIATIONS -DEVICE -DEVICES -DEVIL -DEVILISH -DEVILISHLY -DEVILS -DEVIOUS -DEVISE -DEVISED -DEVISES -DEVISING -DEVISINGS -DEVOID -DEVOLVE -DEVON -DEVONSHIRE -DEVOTE -DEVOTED -DEVOTEDLY -DEVOTEE -DEVOTEES -DEVOTES -DEVOTING -DEVOTION -DEVOTIONS -DEVOUR -DEVOURED -DEVOURER -DEVOURS -DEVOUT -DEVOUTLY -DEVOUTNESS -DEW -DEWDROP -DEWDROPS -DEWEY -DEWITT -DEWY -DEXEDRINE -DEXTERITY -DHABI -DIABETES -DIABETIC -DIABOLIC -DIACHRONIC -DIACRITICAL -DIADEM -DIAGNOSABLE -DIAGNOSE -DIAGNOSED -DIAGNOSES -DIAGNOSING -DIAGNOSIS -DIAGNOSTIC -DIAGNOSTICIAN -DIAGNOSTICS -DIAGONAL -DIAGONALLY -DIAGONALS -DIAGRAM -DIAGRAMMABLE -DIAGRAMMATIC -DIAGRAMMATICALLY -DIAGRAMMED -DIAGRAMMER -DIAGRAMMERS -DIAGRAMMING -DIAGRAMS -DIAL -DIALECT -DIALECTIC -DIALECTS -DIALED -DIALER -DIALERS -DIALING -DIALOG -DIALOGS -DIALOGUE -DIALOGUES -DIALS -DIALUP -DIALYSIS -DIAMAGNETIC -DIAMETER -DIAMETERS -DIAMETRIC -DIAMETRICALLY -DIAMOND -DIAMONDS -DIANA -DIANE -DIANNE -DIAPER -DIAPERS -DIAPHRAGM -DIAPHRAGMS -DIARIES -DIARRHEA -DIARY -DIATRIBE -DIATRIBES -DIBBLE -DICE -DICHOTOMIZE -DICHOTOMY -DICKENS -DICKERSON -DICKINSON -DICKSON -DICKY -DICTATE -DICTATED -DICTATES -DICTATING -DICTATION -DICTATIONS -DICTATOR -DICTATORIAL -DICTATORS -DICTATORSHIP -DICTION -DICTIONARIES -DICTIONARY -DICTUM -DICTUMS -DID -DIDACTIC -DIDDLE -DIDO -DIE -DIEBOLD -DIED -DIEGO -DIEHARD -DIELECTRIC -DIELECTRICS -DIEM -DIES -DIESEL -DIET -DIETARY -DIETER -DIETERS -DIETETIC -DIETICIAN -DIETITIAN -DIETITIANS -DIETRICH -DIETS -DIETZ -DIFFER -DIFFERED -DIFFERENCE -DIFFERENCES -DIFFERENT -DIFFERENTIABLE -DIFFERENTIAL -DIFFERENTIALS -DIFFERENTIATE -DIFFERENTIATED -DIFFERENTIATES -DIFFERENTIATING -DIFFERENTIATION -DIFFERENTIATIONS -DIFFERENTIATORS -DIFFERENTLY -DIFFERER -DIFFERERS -DIFFERING -DIFFERS -DIFFICULT -DIFFICULTIES -DIFFICULTLY -DIFFICULTY -DIFFRACT -DIFFUSE -DIFFUSED -DIFFUSELY -DIFFUSER -DIFFUSERS -DIFFUSES -DIFFUSIBLE -DIFFUSING -DIFFUSION -DIFFUSIONS -DIFFUSIVE -DIG -DIGEST -DIGESTED -DIGESTIBLE -DIGESTING -DIGESTION -DIGESTIVE -DIGESTS -DIGGER -DIGGERS -DIGGING -DIGGINGS -DIGIT -DIGITAL -DIGITALIS -DIGITALLY -DIGITIZATION -DIGITIZE -DIGITIZED -DIGITIZES -DIGITIZING -DIGITS -DIGNIFIED -DIGNIFY -DIGNITARY -DIGNITIES -DIGNITY -DIGRAM -DIGRESS -DIGRESSED -DIGRESSES -DIGRESSING -DIGRESSION -DIGRESSIONS -DIGRESSIVE -DIGS -DIHEDRAL -DIJKSTRA -DIJON -DIKE -DIKES -DILAPIDATE -DILATATION -DILATE -DILATED -DILATES -DILATING -DILATION -DILDO -DILEMMA -DILEMMAS -DILIGENCE -DILIGENT -DILIGENTLY -DILL -DILLON -DILOGARITHM -DILUTE -DILUTED -DILUTES -DILUTING -DILUTION -DIM -DIMAGGIO -DIME -DIMENSION -DIMENSIONAL -DIMENSIONALITY -DIMENSIONALLY -DIMENSIONED -DIMENSIONING -DIMENSIONS -DIMES -DIMINISH -DIMINISHED -DIMINISHES -DIMINISHING -DIMINUTION -DIMINUTIVE -DIMLY -DIMMED -DIMMER -DIMMERS -DIMMEST -DIMMING -DIMNESS -DIMPLE -DIMS -DIN -DINAH -DINE -DINED -DINER -DINERS -DINES -DING -DINGHY -DINGINESS -DINGO -DINGY -DINING -DINNER -DINNERS -DINNERTIME -DINNERWARE -DINOSAUR -DINT -DIOCLETIAN -DIODE -DIODES -DIOGENES -DION -DIONYSIAN -DIONYSUS -DIOPHANTINE -DIOPTER -DIORAMA -DIOXIDE -DIP -DIPHTHERIA -DIPHTHONG -DIPLOMA -DIPLOMACY -DIPLOMAS -DIPLOMAT -DIPLOMATIC -DIPLOMATS -DIPOLE -DIPPED -DIPPER -DIPPERS -DIPPING -DIPPINGS -DIPS -DIRAC -DIRE -DIRECT -DIRECTED -DIRECTING -DIRECTION -DIRECTIONAL -DIRECTIONALITY -DIRECTIONALLY -DIRECTIONS -DIRECTIVE -DIRECTIVES -DIRECTLY -DIRECTNESS -DIRECTOR -DIRECTORATE -DIRECTORIES -DIRECTORS -DIRECTORY -DIRECTRICES -DIRECTRIX -DIRECTS -DIRGE -DIRGES -DIRICHLET -DIRT -DIRTIER -DIRTIEST -DIRTILY -DIRTINESS -DIRTS -DIRTY -DIS -DISABILITIES -DISABILITY -DISABLE -DISABLED -DISABLER -DISABLERS -DISABLES -DISABLING -DISADVANTAGE -DISADVANTAGEOUS -DISADVANTAGES -DISAFFECTED -DISAFFECTION -DISAGREE -DISAGREEABLE -DISAGREED -DISAGREEING -DISAGREEMENT -DISAGREEMENTS -DISAGREES -DISALLOW -DISALLOWED -DISALLOWING -DISALLOWS -DISAMBIGUATE -DISAMBIGUATED -DISAMBIGUATES -DISAMBIGUATING -DISAMBIGUATION -DISAMBIGUATIONS -DISAPPEAR -DISAPPEARANCE -DISAPPEARANCES -DISAPPEARED -DISAPPEARING -DISAPPEARS -DISAPPOINT -DISAPPOINTED -DISAPPOINTING -DISAPPOINTMENT -DISAPPOINTMENTS -DISAPPROVAL -DISAPPROVE -DISAPPROVED -DISAPPROVES -DISARM -DISARMAMENT -DISARMED -DISARMING -DISARMS -DISASSEMBLE -DISASSEMBLED -DISASSEMBLES -DISASSEMBLING -DISASSEMBLY -DISASTER -DISASTERS -DISASTROUS -DISASTROUSLY -DISBAND -DISBANDED -DISBANDING -DISBANDS -DISBURSE -DISBURSED -DISBURSEMENT -DISBURSEMENTS -DISBURSES -DISBURSING -DISC -DISCARD -DISCARDED -DISCARDING -DISCARDS -DISCERN -DISCERNED -DISCERNIBILITY -DISCERNIBLE -DISCERNIBLY -DISCERNING -DISCERNINGLY -DISCERNMENT -DISCERNS -DISCHARGE -DISCHARGED -DISCHARGES -DISCHARGING -DISCIPLE -DISCIPLES -DISCIPLINARY -DISCIPLINE -DISCIPLINED -DISCIPLINES -DISCIPLINING -DISCLAIM -DISCLAIMED -DISCLAIMER -DISCLAIMS -DISCLOSE -DISCLOSED -DISCLOSES -DISCLOSING -DISCLOSURE -DISCLOSURES -DISCOMFORT -DISCONCERT -DISCONCERTING -DISCONCERTINGLY -DISCONNECT -DISCONNECTED -DISCONNECTING -DISCONNECTION -DISCONNECTS -DISCONTENT -DISCONTENTED -DISCONTINUANCE -DISCONTINUE -DISCONTINUED -DISCONTINUES -DISCONTINUITIES -DISCONTINUITY -DISCONTINUOUS -DISCORD -DISCORDANT -DISCOUNT -DISCOUNTED -DISCOUNTING -DISCOUNTS -DISCOURAGE -DISCOURAGED -DISCOURAGEMENT -DISCOURAGES -DISCOURAGING -DISCOURSE -DISCOURSES -DISCOVER -DISCOVERED -DISCOVERER -DISCOVERERS -DISCOVERIES -DISCOVERING -DISCOVERS -DISCOVERY -DISCREDIT -DISCREDITED -DISCREET -DISCREETLY -DISCREPANCIES -DISCREPANCY -DISCRETE -DISCRETELY -DISCRETENESS -DISCRETION -DISCRETIONARY -DISCRIMINANT -DISCRIMINATE -DISCRIMINATED -DISCRIMINATES -DISCRIMINATING -DISCRIMINATION -DISCRIMINATORY -DISCS -DISCUSS -DISCUSSANT -DISCUSSED -DISCUSSES -DISCUSSING -DISCUSSION -DISCUSSIONS -DISDAIN -DISDAINING -DISDAINS -DISEASE -DISEASED -DISEASES -DISEMBOWEL -DISENGAGE -DISENGAGED -DISENGAGES -DISENGAGING -DISENTANGLE -DISENTANGLING -DISFIGURE -DISFIGURED -DISFIGURES -DISFIGURING -DISGORGE -DISGRACE -DISGRACED -DISGRACEFUL -DISGRACEFULLY -DISGRACES -DISGRUNTLE -DISGRUNTLED -DISGUISE -DISGUISED -DISGUISES -DISGUST -DISGUSTED -DISGUSTEDLY -DISGUSTFUL -DISGUSTING -DISGUSTINGLY -DISGUSTS -DISH -DISHEARTEN -DISHEARTENING -DISHED -DISHES -DISHEVEL -DISHING -DISHONEST -DISHONESTLY -DISHONESTY -DISHONOR -DISHONORABLE -DISHONORED -DISHONORING -DISHONORS -DISHWASHER -DISHWASHERS -DISHWASHING -DISHWATER -DISILLUSION -DISILLUSIONED -DISILLUSIONING -DISILLUSIONMENT -DISILLUSIONMENTS -DISINCLINED -DISINGENUOUS -DISINTERESTED -DISINTERESTEDNESS -DISJOINT -DISJOINTED -DISJOINTLY -DISJOINTNESS -DISJUNCT -DISJUNCTION -DISJUNCTIONS -DISJUNCTIVE -DISJUNCTIVELY -DISJUNCTS -DISK -DISKETTE -DISKETTES -DISKS -DISLIKE -DISLIKED -DISLIKES -DISLIKING -DISLOCATE -DISLOCATED -DISLOCATES -DISLOCATING -DISLOCATION -DISLOCATIONS -DISLODGE -DISLODGED -DISMAL -DISMALLY -DISMAY -DISMAYED -DISMAYING -DISMEMBER -DISMEMBERED -DISMEMBERMENT -DISMEMBERS -DISMISS -DISMISSAL -DISMISSALS -DISMISSED -DISMISSER -DISMISSERS -DISMISSES -DISMISSING -DISMOUNT -DISMOUNTED -DISMOUNTING -DISMOUNTS -DISNEY -DISNEYLAND -DISOBEDIENCE -DISOBEDIENT -DISOBEY -DISOBEYED -DISOBEYING -DISOBEYS -DISORDER -DISORDERED -DISORDERLY -DISORDERS -DISORGANIZED -DISOWN -DISOWNED -DISOWNING -DISOWNS -DISPARAGE -DISPARATE -DISPARITIES -DISPARITY -DISPASSIONATE -DISPATCH -DISPATCHED -DISPATCHER -DISPATCHERS -DISPATCHES -DISPATCHING -DISPEL -DISPELL -DISPELLED -DISPELLING -DISPELS -DISPENSARY -DISPENSATION -DISPENSE -DISPENSED -DISPENSER -DISPENSERS -DISPENSES -DISPENSING -DISPERSAL -DISPERSE -DISPERSED -DISPERSES -DISPERSING -DISPERSION -DISPERSIONS -DISPLACE -DISPLACED -DISPLACEMENT -DISPLACEMENTS -DISPLACES -DISPLACING -DISPLAY -DISPLAYABLE -DISPLAYED -DISPLAYER -DISPLAYING -DISPLAYS -DISPLEASE -DISPLEASED -DISPLEASES -DISPLEASING -DISPLEASURE -DISPOSABLE -DISPOSAL -DISPOSALS -DISPOSE -DISPOSED -DISPOSER -DISPOSES -DISPOSING -DISPOSITION -DISPOSITIONS -DISPOSSESSED -DISPROPORTIONATE -DISPROVE -DISPROVED -DISPROVES -DISPROVING -DISPUTE -DISPUTED -DISPUTER -DISPUTERS -DISPUTES -DISPUTING -DISQUALIFICATION -DISQUALIFIED -DISQUALIFIES -DISQUALIFY -DISQUALIFYING -DISQUIET -DISQUIETING -DISRAELI -DISREGARD -DISREGARDED -DISREGARDING -DISREGARDS -DISRESPECTFUL -DISRUPT -DISRUPTED -DISRUPTING -DISRUPTION -DISRUPTIONS -DISRUPTIVE -DISRUPTS -DISSATISFACTION -DISSATISFACTIONS -DISSATISFACTORY -DISSATISFIED -DISSECT -DISSECTS -DISSEMBLE -DISSEMINATE -DISSEMINATED -DISSEMINATES -DISSEMINATING -DISSEMINATION -DISSENSION -DISSENSIONS -DISSENT -DISSENTED -DISSENTER -DISSENTERS -DISSENTING -DISSENTS -DISSERTATION -DISSERTATIONS -DISSERVICE -DISSIDENT -DISSIDENTS -DISSIMILAR -DISSIMILARITIES -DISSIMILARITY -DISSIPATE -DISSIPATED -DISSIPATES -DISSIPATING -DISSIPATION -DISSOCIATE -DISSOCIATED -DISSOCIATES -DISSOCIATING -DISSOCIATION -DISSOLUTION -DISSOLUTIONS -DISSOLVE -DISSOLVED -DISSOLVES -DISSOLVING -DISSONANT -DISSUADE -DISTAFF -DISTAL -DISTALLY -DISTANCE -DISTANCES -DISTANT -DISTANTLY -DISTASTE -DISTASTEFUL -DISTASTEFULLY -DISTASTES -DISTEMPER -DISTEMPERED -DISTEMPERS -DISTILL -DISTILLATION -DISTILLED -DISTILLER -DISTILLERS -DISTILLERY -DISTILLING -DISTILLS -DISTINCT -DISTINCTION -DISTINCTIONS -DISTINCTIVE -DISTINCTIVELY -DISTINCTIVENESS -DISTINCTLY -DISTINCTNESS -DISTINGUISH -DISTINGUISHABLE -DISTINGUISHED -DISTINGUISHES -DISTINGUISHING -DISTORT -DISTORTED -DISTORTING -DISTORTION -DISTORTIONS -DISTORTS -DISTRACT -DISTRACTED -DISTRACTING -DISTRACTION -DISTRACTIONS -DISTRACTS -DISTRAUGHT -DISTRESS -DISTRESSED -DISTRESSES -DISTRESSING -DISTRIBUTE -DISTRIBUTED -DISTRIBUTES -DISTRIBUTING -DISTRIBUTION -DISTRIBUTIONAL -DISTRIBUTIONS -DISTRIBUTIVE -DISTRIBUTIVITY -DISTRIBUTOR -DISTRIBUTORS -DISTRICT -DISTRICTS -DISTRUST -DISTRUSTED -DISTURB -DISTURBANCE -DISTURBANCES -DISTURBED -DISTURBER -DISTURBING -DISTURBINGLY -DISTURBS -DISUSE -DITCH -DITCHES -DITHER -DITTO -DITTY -DITZEL -DIURNAL -DIVAN -DIVANS -DIVE -DIVED -DIVER -DIVERGE -DIVERGED -DIVERGENCE -DIVERGENCES -DIVERGENT -DIVERGES -DIVERGING -DIVERS -DIVERSE -DIVERSELY -DIVERSIFICATION -DIVERSIFIED -DIVERSIFIES -DIVERSIFY -DIVERSIFYING -DIVERSION -DIVERSIONARY -DIVERSIONS -DIVERSITIES -DIVERSITY -DIVERT -DIVERTED -DIVERTING -DIVERTS -DIVES -DIVEST -DIVESTED -DIVESTING -DIVESTITURE -DIVESTS -DIVIDE -DIVIDED -DIVIDEND -DIVIDENDS -DIVIDER -DIVIDERS -DIVIDES -DIVIDING -DIVINE -DIVINELY -DIVINER -DIVING -DIVINING -DIVINITIES -DIVINITY -DIVISIBILITY -DIVISIBLE -DIVISION -DIVISIONAL -DIVISIONS -DIVISIVE -DIVISOR -DIVISORS -DIVORCE -DIVORCED -DIVORCEE -DIVULGE -DIVULGED -DIVULGES -DIVULGING -DIXIE -DIXIECRATS -DIXIELAND -DIXON -DIZZINESS -DIZZY -DJAKARTA -DMITRI -DNIEPER -DOBBIN -DOBBS -DOBERMAN -DOC -DOCILE -DOCK -DOCKED -DOCKET -DOCKS -DOCKSIDE -DOCKYARD -DOCTOR -DOCTORAL -DOCTORATE -DOCTORATES -DOCTORED -DOCTORS -DOCTRINAIRE -DOCTRINAL -DOCTRINE -DOCTRINES -DOCUMENT -DOCUMENTARIES -DOCUMENTARY -DOCUMENTATION -DOCUMENTATIONS -DOCUMENTED -DOCUMENTER -DOCUMENTERS -DOCUMENTING -DOCUMENTS -DODD -DODECAHEDRA -DODECAHEDRAL -DODECAHEDRON -DODGE -DODGED -DODGER -DODGERS -DODGING -DODINGTON -DODSON -DOE -DOER -DOERS -DOES -DOG -DOGE -DOGGED -DOGGEDLY -DOGGEDNESS -DOGGING -DOGHOUSE -DOGMA -DOGMAS -DOGMATIC -DOGMATISM -DOGS -DOGTOWN -DOHERTY -DOING -DOINGS -DOLAN -DOLDRUM -DOLE -DOLED -DOLEFUL -DOLEFULLY -DOLES -DOLL -DOLLAR -DOLLARS -DOLLIES -DOLLS -DOLLY -DOLORES -DOLPHIN -DOLPHINS -DOMAIN -DOMAINS -DOME -DOMED -DOMENICO -DOMES -DOMESDAY -DOMESTIC -DOMESTICALLY -DOMESTICATE -DOMESTICATED -DOMESTICATES -DOMESTICATING -DOMESTICATION -DOMICILE -DOMINANCE -DOMINANT -DOMINANTLY -DOMINATE -DOMINATED -DOMINATES -DOMINATING -DOMINATION -DOMINEER -DOMINEERING -DOMINGO -DOMINIC -DOMINICAN -DOMINICANS -DOMINICK -DOMINION -DOMINIQUE -DOMINO -DON -DONAHUE -DONALD -DONALDSON -DONATE -DONATED -DONATES -DONATING -DONATION -DONE -DONECK -DONKEY -DONKEYS -DONNA -DONNELLY -DONNER -DONNYBROOK -DONOR -DONOVAN -DONS -DOODLE -DOOLEY -DOOLITTLE -DOOM -DOOMED -DOOMING -DOOMS -DOOMSDAY -DOOR -DOORBELL -DOORKEEPER -DOORMAN -DOORMEN -DOORS -DOORSTEP -DOORSTEPS -DOORWAY -DOORWAYS -DOPE -DOPED -DOPER -DOPERS -DOPES -DOPING -DOPPLER -DORA -DORADO -DORCAS -DORCHESTER -DOREEN -DORIA -DORIC -DORICIZE -DORICIZES -DORIS -DORMANT -DORMITORIES -DORMITORY -DOROTHEA -DOROTHY -DORSET -DORTMUND -DOSAGE -DOSE -DOSED -DOSES -DOSSIER -DOSSIERS -DOSTOEVSKY -DOT -DOTE -DOTED -DOTES -DOTING -DOTINGLY -DOTS -DOTTED -DOTTING -DOUBLE -DOUBLED -DOUBLEDAY -DOUBLEHEADER -DOUBLER -DOUBLERS -DOUBLES -DOUBLET -DOUBLETON -DOUBLETS -DOUBLING -DOUBLOON -DOUBLY -DOUBT -DOUBTABLE -DOUBTED -DOUBTER -DOUBTERS -DOUBTFUL -DOUBTFULLY -DOUBTING -DOUBTLESS -DOUBTLESSLY -DOUBTS -DOUG -DOUGH -DOUGHERTY -DOUGHNUT -DOUGHNUTS -DOUGLAS -DOUGLASS -DOVE -DOVER -DOVES -DOVETAIL -DOW -DOWAGER -DOWEL -DOWLING -DOWN -DOWNCAST -DOWNED -DOWNERS -DOWNEY -DOWNFALL -DOWNFALLEN -DOWNGRADE -DOWNHILL -DOWNING -DOWNLINK -DOWNLINKS -DOWNLOAD -DOWNLOADED -DOWNLOADING -DOWNLOADS -DOWNPLAY -DOWNPLAYED -DOWNPLAYING -DOWNPLAYS -DOWNPOUR -DOWNRIGHT -DOWNS -DOWNSIDE -DOWNSTAIRS -DOWNSTREAM -DOWNTOWN -DOWNTOWNS -DOWNTRODDEN -DOWNTURN -DOWNWARD -DOWNWARDS -DOWNY -DOWRY -DOYLE -DOZE -DOZED -DOZEN -DOZENS -DOZENTH -DOZES -DOZING -DRAB -DRACO -DRACONIAN -DRAFT -DRAFTED -DRAFTEE -DRAFTER -DRAFTERS -DRAFTING -DRAFTS -DRAFTSMAN -DRAFTSMEN -DRAFTY -DRAG -DRAGGED -DRAGGING -DRAGNET -DRAGON -DRAGONFLY -DRAGONHEAD -DRAGONS -DRAGOON -DRAGOONED -DRAGOONS -DRAGS -DRAIN -DRAINAGE -DRAINED -DRAINER -DRAINING -DRAINS -DRAKE -DRAM -DRAMA -DRAMAMINE -DRAMAS -DRAMATIC -DRAMATICALLY -DRAMATICS -DRAMATIST -DRAMATISTS -DRANK -DRAPE -DRAPED -DRAPER -DRAPERIES -DRAPERS -DRAPERY -DRAPES -DRASTIC -DRASTICALLY -DRAUGHT -DRAUGHTS -DRAVIDIAN -DRAW -DRAWBACK -DRAWBACKS -DRAWBRIDGE -DRAWBRIDGES -DRAWER -DRAWERS -DRAWING -DRAWINGS -DRAWL -DRAWLED -DRAWLING -DRAWLS -DRAWN -DRAWNLY -DRAWNNESS -DRAWS -DREAD -DREADED -DREADFUL -DREADFULLY -DREADING -DREADNOUGHT -DREADS -DREAM -DREAMBOAT -DREAMED -DREAMER -DREAMERS -DREAMILY -DREAMING -DREAMLIKE -DREAMS -DREAMT -DREAMY -DREARINESS -DREARY -DREDGE -DREGS -DRENCH -DRENCHED -DRENCHES -DRENCHING -DRESS -DRESSED -DRESSER -DRESSERS -DRESSES -DRESSING -DRESSINGS -DRESSMAKER -DRESSMAKERS -DREW -DREXEL -DREYFUSS -DRIED -DRIER -DRIERS -DRIES -DRIEST -DRIFT -DRIFTED -DRIFTER -DRIFTERS -DRIFTING -DRIFTS -DRILL -DRILLED -DRILLER -DRILLING -DRILLS -DRILY -DRINK -DRINKABLE -DRINKER -DRINKERS -DRINKING -DRINKS -DRIP -DRIPPING -DRIPPY -DRIPS -DRISCOLL -DRIVE -DRIVEN -DRIVER -DRIVERS -DRIVES -DRIVEWAY -DRIVEWAYS -DRIVING -DRIZZLE -DRIZZLY -DROLL -DROMEDARY -DRONE -DRONES -DROOL -DROOP -DROOPED -DROOPING -DROOPS -DROOPY -DROP -DROPLET -DROPOUT -DROPPED -DROPPER -DROPPERS -DROPPING -DROPPINGS -DROPS -DROSOPHILA -DROUGHT -DROUGHTS -DROVE -DROVER -DROVERS -DROVES -DROWN -DROWNED -DROWNING -DROWNINGS -DROWNS -DROWSINESS -DROWSY -DRUBBING -DRUDGE -DRUDGERY -DRUG -DRUGGIST -DRUGGISTS -DRUGS -DRUGSTORE -DRUM -DRUMHEAD -DRUMMED -DRUMMER -DRUMMERS -DRUMMING -DRUMMOND -DRUMS -DRUNK -DRUNKARD -DRUNKARDS -DRUNKEN -DRUNKENNESS -DRUNKER -DRUNKLY -DRUNKS -DRURY -DRY -DRYDEN -DRYING -DRYLY -DUAL -DUALISM -DUALITIES -DUALITY -DUANE -DUB -DUBBED -DUBHE -DUBIOUS -DUBIOUSLY -DUBIOUSNESS -DUBLIN -DUBS -DUBUQUE -DUCHESS -DUCHESSES -DUCHY -DUCK -DUCKED -DUCKING -DUCKLING -DUCKS -DUCT -DUCTS -DUD -DUDLEY -DUE -DUEL -DUELING -DUELS -DUES -DUET -DUFFY -DUG -DUGAN -DUKE -DUKES -DULL -DULLED -DULLER -DULLES -DULLEST -DULLING -DULLNESS -DULLS -DULLY -DULUTH -DULY -DUMB -DUMBBELL -DUMBBELLS -DUMBER -DUMBEST -DUMBLY -DUMBNESS -DUMMIES -DUMMY -DUMP -DUMPED -DUMPER -DUMPING -DUMPS -DUMPTY -DUNBAR -DUNCAN -DUNCE -DUNCES -DUNDEE -DUNE -DUNEDIN -DUNES -DUNG -DUNGEON -DUNGEONS -DUNHAM -DUNK -DUNKIRK -DUNLAP -DUNLOP -DUNN -DUNNE -DUPE -DUPLEX -DUPLICABLE -DUPLICATE -DUPLICATED -DUPLICATES -DUPLICATING -DUPLICATION -DUPLICATIONS -DUPLICATOR -DUPLICATORS -DUPLICITY -DUPONT -DUPONT -DUPONTS -DUPONTS -DUQUESNE -DURABILITIES -DURABILITY -DURABLE -DURABLY -DURANGO -DURATION -DURATIONS -DURER -DURERS -DURESS -DURHAM -DURING -DURKEE -DURKIN -DURRELL -DURWARD -DUSENBERG -DUSENBURY -DUSK -DUSKINESS -DUSKY -DUSSELDORF -DUST -DUSTBIN -DUSTED -DUSTER -DUSTERS -DUSTIER -DUSTIEST -DUSTIN -DUSTING -DUSTS -DUSTY -DUTCH -DUTCHESS -DUTCHMAN -DUTCHMEN -DUTIES -DUTIFUL -DUTIFULLY -DUTIFULNESS -DUTTON -DUTY -DVORAK -DWARF -DWARFED -DWARFS -DWARVES -DWELL -DWELLED -DWELLER -DWELLERS -DWELLING -DWELLINGS -DWELLS -DWELT -DWIGHT -DWINDLE -DWINDLED -DWINDLING -DWYER -DYAD -DYADIC -DYE -DYED -DYEING -DYER -DYERS -DYES -DYING -DYKE -DYLAN -DYNAMIC -DYNAMICALLY -DYNAMICS -DYNAMISM -DYNAMITE -DYNAMITED -DYNAMITES -DYNAMITING -DYNAMO -DYNASTIC -DYNASTIES -DYNASTY -DYNE -DYSENTERY -DYSPEPTIC -DYSTROPHY -EACH -EAGAN -EAGER -EAGERLY -EAGERNESS -EAGLE -EAGLES -EAR -EARDRUM -EARED -EARL -EARLIER -EARLIEST -EARLINESS -EARLS -EARLY -EARMARK -EARMARKED -EARMARKING -EARMARKINGS -EARMARKS -EARN -EARNED -EARNER -EARNERS -EARNEST -EARNESTLY -EARNESTNESS -EARNING -EARNINGS -EARNS -EARP -EARPHONE -EARRING -EARRINGS -EARS -EARSPLITTING -EARTH -EARTHEN -EARTHENWARE -EARTHLINESS -EARTHLING -EARTHLY -EARTHMAN -EARTHMEN -EARTHMOVER -EARTHQUAKE -EARTHQUAKES -EARTHS -EARTHWORM -EARTHWORMS -EARTHY -EASE -EASED -EASEL -EASEMENT -EASEMENTS -EASES -EASIER -EASIEST -EASILY -EASINESS -EASING -EAST -EASTBOUND -EASTER -EASTERN -EASTERNER -EASTERNERS -EASTERNMOST -EASTHAMPTON -EASTLAND -EASTMAN -EASTWARD -EASTWARDS -EASTWICK -EASTWOOD -EASY -EASYGOING -EAT -EATEN -EATER -EATERS -EATING -EATINGS -EATON -EATS -EAVES -EAVESDROP -EAVESDROPPED -EAVESDROPPER -EAVESDROPPERS -EAVESDROPPING -EAVESDROPS -EBB -EBBING -EBBS -EBEN -EBONY -ECCENTRIC -ECCENTRICITIES -ECCENTRICITY -ECCENTRICS -ECCLES -ECCLESIASTICAL -ECHELON -ECHO -ECHOED -ECHOES -ECHOING -ECLECTIC -ECLIPSE -ECLIPSED -ECLIPSES -ECLIPSING -ECLIPTIC -ECOLE -ECOLOGY -ECONOMETRIC -ECONOMETRICA -ECONOMIC -ECONOMICAL -ECONOMICALLY -ECONOMICS -ECONOMIES -ECONOMIST -ECONOMISTS -ECONOMIZE -ECONOMIZED -ECONOMIZER -ECONOMIZERS -ECONOMIZES -ECONOMIZING -ECONOMY -ECOSYSTEM -ECSTASY -ECSTATIC -ECUADOR -ECUADORIAN -EDDIE -EDDIES -EDDY -EDEN -EDENIZATION -EDENIZATIONS -EDENIZE -EDENIZES -EDGAR -EDGE -EDGED -EDGERTON -EDGES -EDGEWATER -EDGEWOOD -EDGING -EDIBLE -EDICT -EDICTS -EDIFICE -EDIFICES -EDINBURGH -EDISON -EDIT -EDITED -EDITH -EDITING -EDITION -EDITIONS -EDITOR -EDITORIAL -EDITORIALLY -EDITORIALS -EDITORS -EDITS -EDMONDS -EDMONDSON -EDMONTON -EDMUND -EDNA -EDSGER -EDUARD -EDUARDO -EDUCABLE -EDUCATE -EDUCATED -EDUCATES -EDUCATING -EDUCATION -EDUCATIONAL -EDUCATIONALLY -EDUCATIONS -EDUCATOR -EDUCATORS -EDWARD -EDWARDIAN -EDWARDINE -EDWARDS -EDWIN -EDWINA -EEL -EELGRASS -EELS -EERIE -EERILY -EFFECT -EFFECTED -EFFECTING -EFFECTIVE -EFFECTIVELY -EFFECTIVENESS -EFFECTOR -EFFECTORS -EFFECTS -EFFECTUALLY -EFFECTUATE -EFFEMINATE -EFFICACY -EFFICIENCIES -EFFICIENCY -EFFICIENT -EFFICIENTLY -EFFIE -EFFIGY -EFFORT -EFFORTLESS -EFFORTLESSLY -EFFORTLESSNESS -EFFORTS -EGALITARIAN -EGAN -EGG -EGGED -EGGHEAD -EGGING -EGGPLANT -EGGS -EGGSHELL -EGO -EGOCENTRIC -EGOS -EGOTISM -EGOTIST -EGYPT -EGYPTIAN -EGYPTIANIZATION -EGYPTIANIZATIONS -EGYPTIANIZE -EGYPTIANIZES -EGYPTIANS -EGYPTIZE -EGYPTIZES -EGYPTOLOGY -EHRLICH -EICHMANN -EIFFEL -EIGENFUNCTION -EIGENSTATE -EIGENVALUE -EIGENVALUES -EIGENVECTOR -EIGHT -EIGHTEEN -EIGHTEENS -EIGHTEENTH -EIGHTFOLD -EIGHTH -EIGHTHES -EIGHTIES -EIGHTIETH -EIGHTS -EIGHTY -EILEEN -EINSTEIN -EINSTEINIAN -EIRE -EISENHOWER -EISNER -EITHER -EJACULATE -EJACULATED -EJACULATES -EJACULATING -EJACULATION -EJACULATIONS -EJECT -EJECTED -EJECTING -EJECTS -EKBERG -EKE -EKED -EKES -EKSTROM -EKTACHROME -ELABORATE -ELABORATED -ELABORATELY -ELABORATENESS -ELABORATES -ELABORATING -ELABORATION -ELABORATIONS -ELABORATORS -ELAINE -ELAPSE -ELAPSED -ELAPSES -ELAPSING -ELASTIC -ELASTICALLY -ELASTICITY -ELBA -ELBOW -ELBOWING -ELBOWS -ELDER -ELDERLY -ELDERS -ELDEST -ELDON -ELEANOR -ELEAZAR -ELECT -ELECTED -ELECTING -ELECTION -ELECTIONS -ELECTIVE -ELECTIVES -ELECTOR -ELECTORAL -ELECTORATE -ELECTORS -ELECTRA -ELECTRIC -ELECTRICAL -ELECTRICALLY -ELECTRICALNESS -ELECTRICIAN -ELECTRICITY -ELECTRIFICATION -ELECTRIFY -ELECTRIFYING -ELECTRO -ELECTROCARDIOGRAM -ELECTROCARDIOGRAPH -ELECTROCUTE -ELECTROCUTED -ELECTROCUTES -ELECTROCUTING -ELECTROCUTION -ELECTROCUTIONS -ELECTRODE -ELECTRODES -ELECTROENCEPHALOGRAM -ELECTROENCEPHALOGRAPH -ELECTROENCEPHALOGRAPHY -ELECTROLYSIS -ELECTROLYTE -ELECTROLYTES -ELECTROLYTIC -ELECTROMAGNETIC -ELECTROMECHANICAL -ELECTRON -ELECTRONIC -ELECTRONICALLY -ELECTRONICS -ELECTRONS -ELECTROPHORESIS -ELECTROPHORUS -ELECTS -ELEGANCE -ELEGANT -ELEGANTLY -ELEGY -ELEMENT -ELEMENTAL -ELEMENTALS -ELEMENTARY -ELEMENTS -ELENA -ELEPHANT -ELEPHANTS -ELEVATE -ELEVATED -ELEVATES -ELEVATION -ELEVATOR -ELEVATORS -ELEVEN -ELEVENS -ELEVENTH -ELF -ELGIN -ELI -ELICIT -ELICITED -ELICITING -ELICITS -ELIDE -ELIGIBILITY -ELIGIBLE -ELIJAH -ELIMINATE -ELIMINATED -ELIMINATES -ELIMINATING -ELIMINATION -ELIMINATIONS -ELIMINATOR -ELIMINATORS -ELINOR -ELIOT -ELISABETH -ELISHA -ELISION -ELITE -ELITIST -ELIZABETH -ELIZABETHAN -ELIZABETHANIZE -ELIZABETHANIZES -ELIZABETHANS -ELK -ELKHART -ELKS -ELLA -ELLEN -ELLIE -ELLIOT -ELLIOTT -ELLIPSE -ELLIPSES -ELLIPSIS -ELLIPSOID -ELLIPSOIDAL -ELLIPSOIDS -ELLIPTIC -ELLIPTICAL -ELLIPTICALLY -ELLIS -ELLISON -ELLSWORTH -ELLWOOD -ELM -ELMER -ELMHURST -ELMIRA -ELMS -ELMSFORD -ELOISE -ELOPE -ELOQUENCE -ELOQUENT -ELOQUENTLY -ELROY -ELSE -ELSEVIER -ELSEWHERE -ELSIE -ELSINORE -ELTON -ELUCIDATE -ELUCIDATED -ELUCIDATES -ELUCIDATING -ELUCIDATION -ELUDE -ELUDED -ELUDES -ELUDING -ELUSIVE -ELUSIVELY -ELUSIVENESS -ELVES -ELVIS -ELY -ELYSEE -ELYSEES -ELYSIUM -EMACIATE -EMACIATED -EMACS -EMANATE -EMANATING -EMANCIPATE -EMANCIPATION -EMANUEL -EMASCULATE -EMBALM -EMBARGO -EMBARGOES -EMBARK -EMBARKED -EMBARKS -EMBARRASS -EMBARRASSED -EMBARRASSES -EMBARRASSING -EMBARRASSMENT -EMBASSIES -EMBASSY -EMBED -EMBEDDED -EMBEDDING -EMBEDS -EMBELLISH -EMBELLISHED -EMBELLISHES -EMBELLISHING -EMBELLISHMENT -EMBELLISHMENTS -EMBER -EMBEZZLE -EMBLEM -EMBODIED -EMBODIES -EMBODIMENT -EMBODIMENTS -EMBODY -EMBODYING -EMBOLDEN -EMBRACE -EMBRACED -EMBRACES -EMBRACING -EMBROIDER -EMBROIDERED -EMBROIDERIES -EMBROIDERS -EMBROIDERY -EMBROIL -EMBRYO -EMBRYOLOGY -EMBRYOS -EMERALD -EMERALDS -EMERGE -EMERGED -EMERGENCE -EMERGENCIES -EMERGENCY -EMERGENT -EMERGES -EMERGING -EMERITUS -EMERSON -EMERY -EMIGRANT -EMIGRANTS -EMIGRATE -EMIGRATED -EMIGRATES -EMIGRATING -EMIGRATION -EMIL -EMILE -EMILIO -EMILY -EMINENCE -EMINENT -EMINENTLY -EMISSARY -EMISSION -EMIT -EMITS -EMITTED -EMITTER -EMITTING -EMMA -EMMANUEL -EMMETT -EMORY -EMOTION -EMOTIONAL -EMOTIONALLY -EMOTIONS -EMPATHY -EMPEROR -EMPERORS -EMPHASES -EMPHASIS -EMPHASIZE -EMPHASIZED -EMPHASIZES -EMPHASIZING -EMPHATIC -EMPHATICALLY -EMPIRE -EMPIRES -EMPIRICAL -EMPIRICALLY -EMPIRICIST -EMPIRICISTS -EMPLOY -EMPLOYABLE -EMPLOYED -EMPLOYEE -EMPLOYEES -EMPLOYER -EMPLOYERS -EMPLOYING -EMPLOYMENT -EMPLOYMENTS -EMPLOYS -EMPORIUM -EMPOWER -EMPOWERED -EMPOWERING -EMPOWERS -EMPRESS -EMPTIED -EMPTIER -EMPTIES -EMPTIEST -EMPTILY -EMPTINESS -EMPTY -EMPTYING -EMULATE -EMULATED -EMULATES -EMULATING -EMULATION -EMULATIONS -EMULATOR -EMULATORS -ENABLE -ENABLED -ENABLER -ENABLERS -ENABLES -ENABLING -ENACT -ENACTED -ENACTING -ENACTMENT -ENACTS -ENAMEL -ENAMELED -ENAMELING -ENAMELS -ENCAMP -ENCAMPED -ENCAMPING -ENCAMPS -ENCAPSULATE -ENCAPSULATED -ENCAPSULATES -ENCAPSULATING -ENCAPSULATION -ENCASED -ENCHANT -ENCHANTED -ENCHANTER -ENCHANTING -ENCHANTMENT -ENCHANTRESS -ENCHANTS -ENCIPHER -ENCIPHERED -ENCIPHERING -ENCIPHERS -ENCIRCLE -ENCIRCLED -ENCIRCLES -ENCLOSE -ENCLOSED -ENCLOSES -ENCLOSING -ENCLOSURE -ENCLOSURES -ENCODE -ENCODED -ENCODER -ENCODERS -ENCODES -ENCODING -ENCODINGS -ENCOMPASS -ENCOMPASSED -ENCOMPASSES -ENCOMPASSING -ENCORE -ENCOUNTER -ENCOUNTERED -ENCOUNTERING -ENCOUNTERS -ENCOURAGE -ENCOURAGED -ENCOURAGEMENT -ENCOURAGEMENTS -ENCOURAGES -ENCOURAGING -ENCOURAGINGLY -ENCROACH -ENCRUST -ENCRYPT -ENCRYPTED -ENCRYPTING -ENCRYPTION -ENCRYPTIONS -ENCRYPTS -ENCUMBER -ENCUMBERED -ENCUMBERING -ENCUMBERS -ENCYCLOPEDIA -ENCYCLOPEDIAS -ENCYCLOPEDIC -END -ENDANGER -ENDANGERED -ENDANGERING -ENDANGERS -ENDEAR -ENDEARED -ENDEARING -ENDEARS -ENDEAVOR -ENDEAVORED -ENDEAVORING -ENDEAVORS -ENDED -ENDEMIC -ENDER -ENDERS -ENDGAME -ENDICOTT -ENDING -ENDINGS -ENDLESS -ENDLESSLY -ENDLESSNESS -ENDORSE -ENDORSED -ENDORSEMENT -ENDORSES -ENDORSING -ENDOW -ENDOWED -ENDOWING -ENDOWMENT -ENDOWMENTS -ENDOWS -ENDPOINT -ENDS -ENDURABLE -ENDURABLY -ENDURANCE -ENDURE -ENDURED -ENDURES -ENDURING -ENDURINGLY -ENEMA -ENEMAS -ENEMIES -ENEMY -ENERGETIC -ENERGIES -ENERGIZE -ENERGY -ENERVATE -ENFEEBLE -ENFIELD -ENFORCE -ENFORCEABLE -ENFORCED -ENFORCEMENT -ENFORCER -ENFORCERS -ENFORCES -ENFORCING -ENFRANCHISE -ENG -ENGAGE -ENGAGED -ENGAGEMENT -ENGAGEMENTS -ENGAGES -ENGAGING -ENGAGINGLY -ENGEL -ENGELS -ENGENDER -ENGENDERED -ENGENDERING -ENGENDERS -ENGINE -ENGINEER -ENGINEERED -ENGINEERING -ENGINEERS -ENGINES -ENGLAND -ENGLANDER -ENGLANDERS -ENGLE -ENGLEWOOD -ENGLISH -ENGLISHIZE -ENGLISHIZES -ENGLISHMAN -ENGLISHMEN -ENGRAVE -ENGRAVED -ENGRAVER -ENGRAVES -ENGRAVING -ENGRAVINGS -ENGROSS -ENGROSSED -ENGROSSING -ENGULF -ENHANCE -ENHANCED -ENHANCEMENT -ENHANCEMENTS -ENHANCES -ENHANCING -ENID -ENIGMA -ENIGMATIC -ENJOIN -ENJOINED -ENJOINING -ENJOINS -ENJOY -ENJOYABLE -ENJOYABLY -ENJOYED -ENJOYING -ENJOYMENT -ENJOYS -ENLARGE -ENLARGED -ENLARGEMENT -ENLARGEMENTS -ENLARGER -ENLARGERS -ENLARGES -ENLARGING -ENLIGHTEN -ENLIGHTENED -ENLIGHTENING -ENLIGHTENMENT -ENLIST -ENLISTED -ENLISTMENT -ENLISTS -ENLIVEN -ENLIVENED -ENLIVENING -ENLIVENS -ENMITIES -ENMITY -ENNOBLE -ENNOBLED -ENNOBLES -ENNOBLING -ENNUI -ENOCH -ENORMITIES -ENORMITY -ENORMOUS -ENORMOUSLY -ENOS -ENOUGH -ENQUEUE -ENQUEUED -ENQUEUES -ENQUIRE -ENQUIRED -ENQUIRER -ENQUIRES -ENQUIRY -ENRAGE -ENRAGED -ENRAGES -ENRAGING -ENRAPTURE -ENRICH -ENRICHED -ENRICHES -ENRICHING -ENRICO -ENROLL -ENROLLED -ENROLLING -ENROLLMENT -ENROLLMENTS -ENROLLS -ENSEMBLE -ENSEMBLES -ENSIGN -ENSIGNS -ENSLAVE -ENSLAVED -ENSLAVES -ENSLAVING -ENSNARE -ENSNARED -ENSNARES -ENSNARING -ENSOLITE -ENSUE -ENSUED -ENSUES -ENSUING -ENSURE -ENSURED -ENSURER -ENSURERS -ENSURES -ENSURING -ENTAIL -ENTAILED -ENTAILING -ENTAILS -ENTANGLE -ENTER -ENTERED -ENTERING -ENTERPRISE -ENTERPRISES -ENTERPRISING -ENTERS -ENTERTAIN -ENTERTAINED -ENTERTAINER -ENTERTAINERS -ENTERTAINING -ENTERTAININGLY -ENTERTAINMENT -ENTERTAINMENTS -ENTERTAINS -ENTHUSIASM -ENTHUSIASMS -ENTHUSIAST -ENTHUSIASTIC -ENTHUSIASTICALLY -ENTHUSIASTS -ENTICE -ENTICED -ENTICER -ENTICERS -ENTICES -ENTICING -ENTIRE -ENTIRELY -ENTIRETIES -ENTIRETY -ENTITIES -ENTITLE -ENTITLED -ENTITLES -ENTITLING -ENTITY -ENTOMB -ENTRANCE -ENTRANCED -ENTRANCES -ENTRAP -ENTREAT -ENTREATED -ENTREATY -ENTREE -ENTRENCH -ENTRENCHED -ENTRENCHES -ENTRENCHING -ENTREPRENEUR -ENTREPRENEURIAL -ENTREPRENEURS -ENTRIES -ENTROPY -ENTRUST -ENTRUSTED -ENTRUSTING -ENTRUSTS -ENTRY -ENUMERABLE -ENUMERATE -ENUMERATED -ENUMERATES -ENUMERATING -ENUMERATION -ENUMERATIVE -ENUMERATOR -ENUMERATORS -ENUNCIATION -ENVELOP -ENVELOPE -ENVELOPED -ENVELOPER -ENVELOPES -ENVELOPING -ENVELOPS -ENVIED -ENVIES -ENVIOUS -ENVIOUSLY -ENVIOUSNESS -ENVIRON -ENVIRONING -ENVIRONMENT -ENVIRONMENTAL -ENVIRONMENTS -ENVIRONS -ENVISAGE -ENVISAGED -ENVISAGES -ENVISION -ENVISIONED -ENVISIONING -ENVISIONS -ENVOY -ENVOYS -ENVY -ENZYME -EOCENE -EPAULET -EPAULETS -EPHEMERAL -EPHESIAN -EPHESIANS -EPHESUS -EPHRAIM -EPIC -EPICENTER -EPICS -EPICUREAN -EPICURIZE -EPICURIZES -EPICURUS -EPIDEMIC -EPIDEMICS -EPIDERMIS -EPIGRAM -EPILEPTIC -EPILOGUE -EPIPHANY -EPISCOPAL -EPISCOPALIAN -EPISCOPALIANIZE -EPISCOPALIANIZES -EPISODE -EPISODES -EPISTEMOLOGICAL -EPISTEMOLOGY -EPISTLE -EPISTLES -EPITAPH -EPITAPHS -EPITAXIAL -EPITAXIALLY -EPITHET -EPITHETS -EPITOMIZE -EPITOMIZED -EPITOMIZES -EPITOMIZING -EPOCH -EPOCHS -EPSILON -EPSOM -EPSTEIN -EQUAL -EQUALED -EQUALING -EQUALITIES -EQUALITY -EQUALIZATION -EQUALIZE -EQUALIZED -EQUALIZER -EQUALIZERS -EQUALIZES -EQUALIZING -EQUALLY -EQUALS -EQUATE -EQUATED -EQUATES -EQUATING -EQUATION -EQUATIONS -EQUATOR -EQUATORIAL -EQUATORS -EQUESTRIAN -EQUIDISTANT -EQUILATERAL -EQUILIBRATE -EQUILIBRIA -EQUILIBRIUM -EQUILIBRIUMS -EQUINOX -EQUIP -EQUIPMENT -EQUIPOISE -EQUIPPED -EQUIPPING -EQUIPS -EQUITABLE -EQUITABLY -EQUITY -EQUIVALENCE -EQUIVALENCES -EQUIVALENT -EQUIVALENTLY -EQUIVALENTS -EQUIVOCAL -EQUIVOCALLY -ERA -ERADICATE -ERADICATED -ERADICATES -ERADICATING -ERADICATION -ERAS -ERASABLE -ERASE -ERASED -ERASER -ERASERS -ERASES -ERASING -ERASMUS -ERASTUS -ERASURE -ERATO -ERATOSTHENES -ERE -ERECT -ERECTED -ERECTING -ERECTION -ERECTIONS -ERECTOR -ERECTORS -ERECTS -ERG -ERGO -ERGODIC -ERIC -ERICH -ERICKSON -ERICSSON -ERIE -ERIK -ERIKSON -ERIS -ERLANG -ERLENMEYER -ERLENMEYERS -ERMINE -ERMINES -ERNE -ERNEST -ERNESTINE -ERNIE -ERNST -ERODE -EROS -EROSION -EROTIC -EROTICA -ERR -ERRAND -ERRANT -ERRATA -ERRATIC -ERRATUM -ERRED -ERRING -ERRINGLY -ERROL -ERRONEOUS -ERRONEOUSLY -ERRONEOUSNESS -ERROR -ERRORS -ERRS -ERSATZ -ERSKINE -ERUDITE -ERUPT -ERUPTION -ERVIN -ERWIN -ESCALATE -ESCALATED -ESCALATES -ESCALATING -ESCALATION -ESCAPABLE -ESCAPADE -ESCAPADES -ESCAPE -ESCAPED -ESCAPEE -ESCAPEES -ESCAPES -ESCAPING -ESCHERICHIA -ESCHEW -ESCHEWED -ESCHEWING -ESCHEWS -ESCORT -ESCORTED -ESCORTING -ESCORTS -ESCROW -ESKIMO -ESKIMOIZED -ESKIMOIZEDS -ESKIMOS -ESMARK -ESOTERIC -ESPAGNOL -ESPECIAL -ESPECIALLY -ESPIONAGE -ESPOSITO -ESPOUSE -ESPOUSED -ESPOUSES -ESPOUSING -ESPRIT -ESPY -ESQUIRE -ESQUIRES -ESSAY -ESSAYED -ESSAYS -ESSEN -ESSENCE -ESSENCES -ESSENIZE -ESSENIZES -ESSENTIAL -ESSENTIALLY -ESSENTIALS -ESSEX -ESTABLISH -ESTABLISHED -ESTABLISHES -ESTABLISHING -ESTABLISHMENT -ESTABLISHMENTS -ESTATE -ESTATES -ESTEEM -ESTEEMED -ESTEEMING -ESTEEMS -ESTELLA -ESTES -ESTHER -ESTHETICS -ESTIMATE -ESTIMATED -ESTIMATES -ESTIMATING -ESTIMATION -ESTIMATIONS -ESTONIA -ESTONIAN -ETCH -ETCHING -ETERNAL -ETERNALLY -ETERNITIES -ETERNITY -ETHAN -ETHEL -ETHER -ETHEREAL -ETHEREALLY -ETHERNET -ETHERNETS -ETHERS -ETHIC -ETHICAL -ETHICALLY -ETHICS -ETHIOPIA -ETHIOPIANS -ETHNIC -ETIQUETTE -ETRURIA -ETRUSCAN -ETYMOLOGY -EUCALYPTUS -EUCHARIST -EUCLID -EUCLIDEAN -EUGENE -EUGENIA -EULER -EULERIAN -EUMENIDES -EUNICE -EUNUCH -EUNUCHS -EUPHEMISM -EUPHEMISMS -EUPHORIA -EUPHORIC -EUPHRATES -EURASIA -EURASIAN -EUREKA -EURIPIDES -EUROPA -EUROPE -EUROPEAN -EUROPEANIZATION -EUROPEANIZATIONS -EUROPEANIZE -EUROPEANIZED -EUROPEANIZES -EUROPEANS -EURYDICE -EUTERPE -EUTHANASIA -EVA -EVACUATE -EVACUATED -EVACUATION -EVADE -EVADED -EVADES -EVADING -EVALUATE -EVALUATED -EVALUATES -EVALUATING -EVALUATION -EVALUATIONS -EVALUATIVE -EVALUATOR -EVALUATORS -EVANGELINE -EVANS -EVANSTON -EVANSVILLE -EVAPORATE -EVAPORATED -EVAPORATING -EVAPORATION -EVAPORATIVE -EVASION -EVASIVE -EVE -EVELYN -EVEN -EVENED -EVENHANDED -EVENHANDEDLY -EVENHANDEDNESS -EVENING -EVENINGS -EVENLY -EVENNESS -EVENS -EVENSEN -EVENT -EVENTFUL -EVENTFULLY -EVENTS -EVENTUAL -EVENTUALITIES -EVENTUALITY -EVENTUALLY -EVER -EVEREADY -EVEREST -EVERETT -EVERGLADE -EVERGLADES -EVERGREEN -EVERHART -EVERLASTING -EVERLASTINGLY -EVERMORE -EVERY -EVERYBODY -EVERYDAY -EVERYONE -EVERYTHING -EVERYWHERE -EVICT -EVICTED -EVICTING -EVICTION -EVICTIONS -EVICTS -EVIDENCE -EVIDENCED -EVIDENCES -EVIDENCING -EVIDENT -EVIDENTLY -EVIL -EVILLER -EVILLY -EVILS -EVINCE -EVINCED -EVINCES -EVOKE -EVOKED -EVOKES -EVOKING -EVOLUTE -EVOLUTES -EVOLUTION -EVOLUTIONARY -EVOLUTIONS -EVOLVE -EVOLVED -EVOLVES -EVOLVING -EWE -EWEN -EWES -EWING -EXACERBATE -EXACERBATED -EXACERBATES -EXACERBATING -EXACERBATION -EXACERBATIONS -EXACT -EXACTED -EXACTING -EXACTINGLY -EXACTION -EXACTIONS -EXACTITUDE -EXACTLY -EXACTNESS -EXACTS -EXAGGERATE -EXAGGERATED -EXAGGERATES -EXAGGERATING -EXAGGERATION -EXAGGERATIONS -EXALT -EXALTATION -EXALTED -EXALTING -EXALTS -EXAM -EXAMINATION -EXAMINATIONS -EXAMINE -EXAMINED -EXAMINER -EXAMINERS -EXAMINES -EXAMINING -EXAMPLE -EXAMPLES -EXAMS -EXASPERATE -EXASPERATED -EXASPERATES -EXASPERATING -EXASPERATION -EXCAVATE -EXCAVATED -EXCAVATES -EXCAVATING -EXCAVATION -EXCAVATIONS -EXCEED -EXCEEDED -EXCEEDING -EXCEEDINGLY -EXCEEDS -EXCEL -EXCELLED -EXCELLENCE -EXCELLENCES -EXCELLENCY -EXCELLENT -EXCELLENTLY -EXCELLING -EXCELS -EXCEPT -EXCEPTED -EXCEPTING -EXCEPTION -EXCEPTIONABLE -EXCEPTIONAL -EXCEPTIONALLY -EXCEPTIONS -EXCEPTS -EXCERPT -EXCERPTED -EXCERPTS -EXCESS -EXCESSES -EXCESSIVE -EXCESSIVELY -EXCHANGE -EXCHANGEABLE -EXCHANGED -EXCHANGES -EXCHANGING -EXCHEQUER -EXCHEQUERS -EXCISE -EXCISED -EXCISES -EXCISING -EXCISION -EXCITABLE -EXCITATION -EXCITATIONS -EXCITE -EXCITED -EXCITEDLY -EXCITEMENT -EXCITES -EXCITING -EXCITINGLY -EXCITON -EXCLAIM -EXCLAIMED -EXCLAIMER -EXCLAIMERS -EXCLAIMING -EXCLAIMS -EXCLAMATION -EXCLAMATIONS -EXCLAMATORY -EXCLUDE -EXCLUDED -EXCLUDES -EXCLUDING -EXCLUSION -EXCLUSIONARY -EXCLUSIONS -EXCLUSIVE -EXCLUSIVELY -EXCLUSIVENESS -EXCLUSIVITY -EXCOMMUNICATE -EXCOMMUNICATED -EXCOMMUNICATES -EXCOMMUNICATING -EXCOMMUNICATION -EXCRETE -EXCRETED -EXCRETES -EXCRETING -EXCRETION -EXCRETIONS -EXCRETORY -EXCRUCIATE -EXCURSION -EXCURSIONS -EXCUSABLE -EXCUSABLY -EXCUSE -EXCUSED -EXCUSES -EXCUSING -EXEC -EXECUTABLE -EXECUTE -EXECUTED -EXECUTES -EXECUTING -EXECUTION -EXECUTIONAL -EXECUTIONER -EXECUTIONS -EXECUTIVE -EXECUTIVES -EXECUTOR -EXECUTORS -EXEMPLAR -EXEMPLARY -EXEMPLIFICATION -EXEMPLIFIED -EXEMPLIFIER -EXEMPLIFIERS -EXEMPLIFIES -EXEMPLIFY -EXEMPLIFYING -EXEMPT -EXEMPTED -EXEMPTING -EXEMPTION -EXEMPTS -EXERCISE -EXERCISED -EXERCISER -EXERCISERS -EXERCISES -EXERCISING -EXERT -EXERTED -EXERTING -EXERTION -EXERTIONS -EXERTS -EXETER -EXHALE -EXHALED -EXHALES -EXHALING -EXHAUST -EXHAUSTED -EXHAUSTEDLY -EXHAUSTING -EXHAUSTION -EXHAUSTIVE -EXHAUSTIVELY -EXHAUSTS -EXHIBIT -EXHIBITED -EXHIBITING -EXHIBITION -EXHIBITIONS -EXHIBITOR -EXHIBITORS -EXHIBITS -EXHILARATE -EXHORT -EXHORTATION -EXHORTATIONS -EXHUME -EXIGENCY -EXILE -EXILED -EXILES -EXILING -EXIST -EXISTED -EXISTENCE -EXISTENT -EXISTENTIAL -EXISTENTIALISM -EXISTENTIALIST -EXISTENTIALISTS -EXISTENTIALLY -EXISTING -EXISTS -EXIT -EXITED -EXITING -EXITS -EXODUS -EXORBITANT -EXORBITANTLY -EXORCISM -EXORCIST -EXOSKELETON -EXOTIC -EXPAND -EXPANDABLE -EXPANDED -EXPANDER -EXPANDERS -EXPANDING -EXPANDS -EXPANSE -EXPANSES -EXPANSIBLE -EXPANSION -EXPANSIONISM -EXPANSIONS -EXPANSIVE -EXPECT -EXPECTANCY -EXPECTANT -EXPECTANTLY -EXPECTATION -EXPECTATIONS -EXPECTED -EXPECTEDLY -EXPECTING -EXPECTINGLY -EXPECTS -EXPEDIENCY -EXPEDIENT -EXPEDIENTLY -EXPEDITE -EXPEDITED -EXPEDITES -EXPEDITING -EXPEDITION -EXPEDITIONS -EXPEDITIOUS -EXPEDITIOUSLY -EXPEL -EXPELLED -EXPELLING -EXPELS -EXPEND -EXPENDABLE -EXPENDED -EXPENDING -EXPENDITURE -EXPENDITURES -EXPENDS -EXPENSE -EXPENSES -EXPENSIVE -EXPENSIVELY -EXPERIENCE -EXPERIENCED -EXPERIENCES -EXPERIENCING -EXPERIMENT -EXPERIMENTAL -EXPERIMENTALLY -EXPERIMENTATION -EXPERIMENTATIONS -EXPERIMENTED -EXPERIMENTER -EXPERIMENTERS -EXPERIMENTING -EXPERIMENTS -EXPERT -EXPERTISE -EXPERTLY -EXPERTNESS -EXPERTS -EXPIRATION -EXPIRATIONS -EXPIRE -EXPIRED -EXPIRES -EXPIRING -EXPLAIN -EXPLAINABLE -EXPLAINED -EXPLAINER -EXPLAINERS -EXPLAINING -EXPLAINS -EXPLANATION -EXPLANATIONS -EXPLANATORY -EXPLETIVE -EXPLICIT -EXPLICITLY -EXPLICITNESS -EXPLODE -EXPLODED -EXPLODES -EXPLODING -EXPLOIT -EXPLOITABLE -EXPLOITATION -EXPLOITATIONS -EXPLOITED -EXPLOITER -EXPLOITERS -EXPLOITING -EXPLOITS -EXPLORATION -EXPLORATIONS -EXPLORATORY -EXPLORE -EXPLORED -EXPLORER -EXPLORERS -EXPLORES -EXPLORING -EXPLOSION -EXPLOSIONS -EXPLOSIVE -EXPLOSIVELY -EXPLOSIVES -EXPONENT -EXPONENTIAL -EXPONENTIALLY -EXPONENTIALS -EXPONENTIATE -EXPONENTIATED -EXPONENTIATES -EXPONENTIATING -EXPONENTIATION -EXPONENTIATIONS -EXPONENTS -EXPORT -EXPORTATION -EXPORTED -EXPORTER -EXPORTERS -EXPORTING -EXPORTS -EXPOSE -EXPOSED -EXPOSER -EXPOSERS -EXPOSES -EXPOSING -EXPOSITION -EXPOSITIONS -EXPOSITORY -EXPOSURE -EXPOSURES -EXPOUND -EXPOUNDED -EXPOUNDER -EXPOUNDING -EXPOUNDS -EXPRESS -EXPRESSED -EXPRESSES -EXPRESSIBILITY -EXPRESSIBLE -EXPRESSIBLY -EXPRESSING -EXPRESSION -EXPRESSIONS -EXPRESSIVE -EXPRESSIVELY -EXPRESSIVENESS -EXPRESSLY -EXPULSION -EXPUNGE -EXPUNGED -EXPUNGES -EXPUNGING -EXPURGATE -EXQUISITE -EXQUISITELY -EXQUISITENESS -EXTANT -EXTEMPORANEOUS -EXTEND -EXTENDABLE -EXTENDED -EXTENDING -EXTENDS -EXTENSIBILITY -EXTENSIBLE -EXTENSION -EXTENSIONS -EXTENSIVE -EXTENSIVELY -EXTENT -EXTENTS -EXTENUATE -EXTENUATED -EXTENUATING -EXTENUATION -EXTERIOR -EXTERIORS -EXTERMINATE -EXTERMINATED -EXTERMINATES -EXTERMINATING -EXTERMINATION -EXTERNAL -EXTERNALLY -EXTINCT -EXTINCTION -EXTINGUISH -EXTINGUISHED -EXTINGUISHER -EXTINGUISHES -EXTINGUISHING -EXTIRPATE -EXTOL -EXTORT -EXTORTED -EXTORTION -EXTRA -EXTRACT -EXTRACTED -EXTRACTING -EXTRACTION -EXTRACTIONS -EXTRACTOR -EXTRACTORS -EXTRACTS -EXTRACURRICULAR -EXTRAMARITAL -EXTRANEOUS -EXTRANEOUSLY -EXTRANEOUSNESS -EXTRAORDINARILY -EXTRAORDINARINESS -EXTRAORDINARY -EXTRAPOLATE -EXTRAPOLATED -EXTRAPOLATES -EXTRAPOLATING -EXTRAPOLATION -EXTRAPOLATIONS -EXTRAS -EXTRATERRESTRIAL -EXTRAVAGANCE -EXTRAVAGANT -EXTRAVAGANTLY -EXTRAVAGANZA -EXTREMAL -EXTREME -EXTREMELY -EXTREMES -EXTREMIST -EXTREMISTS -EXTREMITIES -EXTREMITY -EXTRICATE -EXTRINSIC -EXTROVERT -EXUBERANCE -EXULT -EXULTATION -EXXON -EYE -EYEBALL -EYEBROW -EYEBROWS -EYED -EYEFUL -EYEGLASS -EYEGLASSES -EYEING -EYELASH -EYELID -EYELIDS -EYEPIECE -EYEPIECES -EYER -EYERS -EYES -EYESIGHT -EYEWITNESS -EYEWITNESSES -EYING -EZEKIEL -EZRA -FABER -FABIAN -FABLE -FABLED -FABLES -FABRIC -FABRICATE -FABRICATED -FABRICATES -FABRICATING -FABRICATION -FABRICS -FABULOUS -FABULOUSLY -FACADE -FACADED -FACADES -FACE -FACED -FACES -FACET -FACETED -FACETS -FACIAL -FACILE -FACILELY -FACILITATE -FACILITATED -FACILITATES -FACILITATING -FACILITIES -FACILITY -FACING -FACINGS -FACSIMILE -FACSIMILES -FACT -FACTION -FACTIONS -FACTIOUS -FACTO -FACTOR -FACTORED -FACTORIAL -FACTORIES -FACTORING -FACTORIZATION -FACTORIZATIONS -FACTORS -FACTORY -FACTS -FACTUAL -FACTUALLY -FACULTIES -FACULTY -FADE -FADED -FADEOUT -FADER -FADERS -FADES -FADING -FAFNIR -FAG -FAGIN -FAGS -FAHEY -FAHRENHEIT -FAHRENHEITS -FAIL -FAILED -FAILING -FAILINGS -FAILS -FAILSOFT -FAILURE -FAILURES -FAIN -FAINT -FAINTED -FAINTER -FAINTEST -FAINTING -FAINTLY -FAINTNESS -FAINTS -FAIR -FAIRBANKS -FAIRCHILD -FAIRER -FAIREST -FAIRFAX -FAIRFIELD -FAIRIES -FAIRING -FAIRLY -FAIRMONT -FAIRNESS -FAIRPORT -FAIRS -FAIRVIEW -FAIRY -FAIRYLAND -FAITH -FAITHFUL -FAITHFULLY -FAITHFULNESS -FAITHLESS -FAITHLESSLY -FAITHLESSNESS -FAITHS -FAKE -FAKED -FAKER -FAKES -FAKING -FALCON -FALCONER -FALCONS -FALK -FALKLAND -FALKLANDS -FALL -FALLACIES -FALLACIOUS -FALLACY -FALLEN -FALLIBILITY -FALLIBLE -FALLING -FALLOPIAN -FALLOUT -FALLOW -FALLS -FALMOUTH -FALSE -FALSEHOOD -FALSEHOODS -FALSELY -FALSENESS -FALSIFICATION -FALSIFIED -FALSIFIES -FALSIFY -FALSIFYING -FALSITY -FALSTAFF -FALTER -FALTERED -FALTERS -FAME -FAMED -FAMES -FAMILIAL -FAMILIAR -FAMILIARITIES -FAMILIARITY -FAMILIARIZATION -FAMILIARIZE -FAMILIARIZED -FAMILIARIZES -FAMILIARIZING -FAMILIARLY -FAMILIARNESS -FAMILIES -FAMILISM -FAMILY -FAMINE -FAMINES -FAMISH -FAMOUS -FAMOUSLY -FAN -FANATIC -FANATICISM -FANATICS -FANCIED -FANCIER -FANCIERS -FANCIES -FANCIEST -FANCIFUL -FANCIFULLY -FANCILY -FANCINESS -FANCY -FANCYING -FANFARE -FANFOLD -FANG -FANGLED -FANGS -FANNED -FANNIES -FANNING -FANNY -FANOUT -FANS -FANTASIES -FANTASIZE -FANTASTIC -FANTASY -FAQ -FAR -FARAD -FARADAY -FARAWAY -FARBER -FARCE -FARCES -FARE -FARED -FARES -FAREWELL -FAREWELLS -FARFETCHED -FARGO -FARINA -FARING -FARKAS -FARLEY -FARM -FARMED -FARMER -FARMERS -FARMHOUSE -FARMHOUSES -FARMING -FARMINGTON -FARMLAND -FARMS -FARMYARD -FARMYARDS -FARNSWORTH -FARRELL -FARSIGHTED -FARTHER -FARTHEST -FARTHING -FASCICLE -FASCINATE -FASCINATED -FASCINATES -FASCINATING -FASCINATION -FASCISM -FASCIST -FASHION -FASHIONABLE -FASHIONABLY -FASHIONED -FASHIONING -FASHIONS -FAST -FASTED -FASTEN -FASTENED -FASTENER -FASTENERS -FASTENING -FASTENINGS -FASTENS -FASTER -FASTEST -FASTIDIOUS -FASTING -FASTNESS -FASTS -FAT -FATAL -FATALITIES -FATALITY -FATALLY -FATALS -FATE -FATED -FATEFUL -FATES -FATHER -FATHERED -FATHERLAND -FATHERLY -FATHERS -FATHOM -FATHOMED -FATHOMING -FATHOMS -FATIGUE -FATIGUED -FATIGUES -FATIGUING -FATIMA -FATNESS -FATS -FATTEN -FATTENED -FATTENER -FATTENERS -FATTENING -FATTENS -FATTER -FATTEST -FATTY -FAUCET -FAULKNER -FAULKNERIAN -FAULT -FAULTED -FAULTING -FAULTLESS -FAULTLESSLY -FAULTS -FAULTY -FAUN -FAUNA -FAUNTLEROY -FAUST -FAUSTIAN -FAUSTUS -FAVOR -FAVORABLE -FAVORABLY -FAVORED -FAVORER -FAVORING -FAVORITE -FAVORITES -FAVORITISM -FAVORS -FAWKES -FAWN -FAWNED -FAWNING -FAWNS -FAYETTE -FAYETTEVILLE -FAZE -FEAR -FEARED -FEARFUL -FEARFULLY -FEARING -FEARLESS -FEARLESSLY -FEARLESSNESS -FEARS -FEARSOME -FEASIBILITY -FEASIBLE -FEAST -FEASTED -FEASTING -FEASTS -FEAT -FEATHER -FEATHERBED -FEATHERBEDDING -FEATHERED -FEATHERER -FEATHERERS -FEATHERING -FEATHERMAN -FEATHERS -FEATHERWEIGHT -FEATHERY -FEATS -FEATURE -FEATURED -FEATURES -FEATURING -FEBRUARIES -FEBRUARY -FECUND -FED -FEDDERS -FEDERAL -FEDERALIST -FEDERALLY -FEDERALS -FEDERATION -FEDORA -FEE -FEEBLE -FEEBLENESS -FEEBLER -FEEBLEST -FEEBLY -FEED -FEEDBACK -FEEDER -FEEDERS -FEEDING -FEEDINGS -FEEDS -FEEL -FEELER -FEELERS -FEELING -FEELINGLY -FEELINGS -FEELS -FEENEY -FEES -FEET -FEIGN -FEIGNED -FEIGNING -FELDER -FELDMAN -FELICE -FELICIA -FELICITIES -FELICITY -FELINE -FELIX -FELL -FELLATIO -FELLED -FELLING -FELLINI -FELLOW -FELLOWS -FELLOWSHIP -FELLOWSHIPS -FELON -FELONIOUS -FELONY -FELT -FELTS -FEMALE -FEMALES -FEMININE -FEMININITY -FEMINISM -FEMINIST -FEMUR -FEMURS -FEN -FENCE -FENCED -FENCER -FENCERS -FENCES -FENCING -FEND -FENTON -FENWICK -FERBER -FERDINAND -FERDINANDO -FERGUSON -FERMAT -FERMENT -FERMENTATION -FERMENTATIONS -FERMENTED -FERMENTING -FERMENTS -FERMI -FERN -FERNANDO -FERNS -FEROCIOUS -FEROCIOUSLY -FEROCIOUSNESS -FEROCITY -FERREIRA -FERRER -FERRET -FERRIED -FERRIES -FERRITE -FERRY -FERTILE -FERTILELY -FERTILITY -FERTILIZATION -FERTILIZE -FERTILIZED -FERTILIZER -FERTILIZERS -FERTILIZES -FERTILIZING -FERVENT -FERVENTLY -FERVOR -FERVORS -FESS -FESTIVAL -FESTIVALS -FESTIVE -FESTIVELY -FESTIVITIES -FESTIVITY -FETAL -FETCH -FETCHED -FETCHES -FETCHING -FETCHINGLY -FETID -FETISH -FETTER -FETTERED -FETTERS -FETTLE -FETUS -FEUD -FEUDAL -FEUDALISM -FEUDS -FEVER -FEVERED -FEVERISH -FEVERISHLY -FEVERS -FEW -FEWER -FEWEST -FEWNESS -FIANCE -FIANCEE -FIASCO -FIAT -FIB -FIBBING -FIBER -FIBERGLAS -FIBERS -FIBONACCI -FIBROSITIES -FIBROSITY -FIBROUS -FIBROUSLY -FICKLE -FICKLENESS -FICTION -FICTIONAL -FICTIONALLY -FICTIONS -FICTITIOUS -FICTITIOUSLY -FIDDLE -FIDDLED -FIDDLER -FIDDLES -FIDDLESTICK -FIDDLESTICKS -FIDDLING -FIDEL -FIDELITY -FIDGET -FIDUCIAL -FIEF -FIEFDOM -FIELD -FIELDED -FIELDER -FIELDERS -FIELDING -FIELDS -FIELDWORK -FIEND -FIENDISH -FIERCE -FIERCELY -FIERCENESS -FIERCER -FIERCEST -FIERY -FIFE -FIFTEEN -FIFTEENS -FIFTEENTH -FIFTH -FIFTIES -FIFTIETH -FIFTY -FIG -FIGARO -FIGHT -FIGHTER -FIGHTERS -FIGHTING -FIGHTS -FIGS -FIGURATIVE -FIGURATIVELY -FIGURE -FIGURED -FIGURES -FIGURING -FIGURINGS -FIJI -FIJIAN -FIJIANS -FILAMENT -FILAMENTS -FILE -FILED -FILENAME -FILENAMES -FILER -FILES -FILIAL -FILIBUSTER -FILING -FILINGS -FILIPINO -FILIPINOS -FILIPPO -FILL -FILLABLE -FILLED -FILLER -FILLERS -FILLING -FILLINGS -FILLMORE -FILLS -FILLY -FILM -FILMED -FILMING -FILMS -FILTER -FILTERED -FILTERING -FILTERS -FILTH -FILTHIER -FILTHIEST -FILTHINESS -FILTHY -FIN -FINAL -FINALITY -FINALIZATION -FINALIZE -FINALIZED -FINALIZES -FINALIZING -FINALLY -FINALS -FINANCE -FINANCED -FINANCES -FINANCIAL -FINANCIALLY -FINANCIER -FINANCIERS -FINANCING -FIND -FINDER -FINDERS -FINDING -FINDINGS -FINDS -FINE -FINED -FINELY -FINENESS -FINER -FINES -FINESSE -FINESSED -FINESSING -FINEST -FINGER -FINGERED -FINGERING -FINGERINGS -FINGERNAIL -FINGERPRINT -FINGERPRINTS -FINGERS -FINGERTIP -FINICKY -FINING -FINISH -FINISHED -FINISHER -FINISHERS -FINISHES -FINISHING -FINITE -FINITELY -FINITENESS -FINK -FINLAND -FINLEY -FINN -FINNEGAN -FINNISH -FINNS -FINNY -FINS -FIORELLO -FIORI -FIR -FIRE -FIREARM -FIREARMS -FIREBOAT -FIREBREAK -FIREBUG -FIRECRACKER -FIRED -FIREFLIES -FIREFLY -FIREHOUSE -FIRELIGHT -FIREMAN -FIREMEN -FIREPLACE -FIREPLACES -FIREPOWER -FIREPROOF -FIRER -FIRERS -FIRES -FIRESIDE -FIRESTONE -FIREWALL -FIREWOOD -FIREWORKS -FIRING -FIRINGS -FIRM -FIRMAMENT -FIRMED -FIRMER -FIRMEST -FIRMING -FIRMLY -FIRMNESS -FIRMS -FIRMWARE -FIRST -FIRSTHAND -FIRSTLY -FIRSTS -FISCAL -FISCALLY -FISCHBEIN -FISCHER -FISH -FISHED -FISHER -FISHERMAN -FISHERMEN -FISHERS -FISHERY -FISHES -FISHING -FISHKILL -FISHMONGER -FISHPOND -FISHY -FISK -FISKE -FISSION -FISSURE -FISSURED -FIST -FISTED -FISTICUFF -FISTS -FIT -FITCH -FITCHBURG -FITFUL -FITFULLY -FITLY -FITNESS -FITS -FITTED -FITTER -FITTERS -FITTING -FITTINGLY -FITTINGS -FITZGERALD -FITZPATRICK -FITZROY -FIVE -FIVEFOLD -FIVES -FIX -FIXATE -FIXATED -FIXATES -FIXATING -FIXATION -FIXATIONS -FIXED -FIXEDLY -FIXEDNESS -FIXER -FIXERS -FIXES -FIXING -FIXINGS -FIXTURE -FIXTURES -FIZEAU -FIZZLE -FIZZLED -FLABBERGAST -FLABBERGASTED -FLACK -FLAG -FLAGELLATE -FLAGGED -FLAGGING -FLAGLER -FLAGPOLE -FLAGRANT -FLAGRANTLY -FLAGS -FLAGSTAFF -FLAIL -FLAIR -FLAK -FLAKE -FLAKED -FLAKES -FLAKING -FLAKY -FLAM -FLAMBOYANT -FLAME -FLAMED -FLAMER -FLAMERS -FLAMES -FLAMING -FLAMMABLE -FLANAGAN -FLANDERS -FLANK -FLANKED -FLANKER -FLANKING -FLANKS -FLANNEL -FLANNELS -FLAP -FLAPS -FLARE -FLARED -FLARES -FLARING -FLASH -FLASHBACK -FLASHED -FLASHER -FLASHERS -FLASHES -FLASHING -FLASHLIGHT -FLASHLIGHTS -FLASHY -FLASK -FLAT -FLATBED -FLATLY -FLATNESS -FLATS -FLATTEN -FLATTENED -FLATTENING -FLATTER -FLATTERED -FLATTERER -FLATTERING -FLATTERY -FLATTEST -FLATULENT -FLATUS -FLATWORM -FLAUNT -FLAUNTED -FLAUNTING -FLAUNTS -FLAVOR -FLAVORED -FLAVORING -FLAVORINGS -FLAVORS -FLAW -FLAWED -FLAWLESS -FLAWLESSLY -FLAWS -FLAX -FLAXEN -FLEA -FLEAS -FLED -FLEDERMAUS -FLEDGED -FLEDGLING -FLEDGLINGS -FLEE -FLEECE -FLEECES -FLEECY -FLEEING -FLEES -FLEET -FLEETEST -FLEETING -FLEETLY -FLEETNESS -FLEETS -FLEISCHMAN -FLEISHER -FLEMING -FLEMINGS -FLEMISH -FLEMISHED -FLEMISHES -FLEMISHING -FLESH -FLESHED -FLESHES -FLESHING -FLESHLY -FLESHY -FLETCHER -FLETCHERIZE -FLETCHERIZES -FLEW -FLEX -FLEXIBILITIES -FLEXIBILITY -FLEXIBLE -FLEXIBLY -FLICK -FLICKED -FLICKER -FLICKERING -FLICKING -FLICKS -FLIER -FLIERS -FLIES -FLIGHT -FLIGHTS -FLIMSY -FLINCH -FLINCHED -FLINCHES -FLINCHING -FLING -FLINGS -FLINT -FLINTY -FLIP -FLIPFLOP -FLIPPED -FLIPS -FLIRT -FLIRTATION -FLIRTATIOUS -FLIRTED -FLIRTING -FLIRTS -FLIT -FLITTING -FLO -FLOAT -FLOATED -FLOATER -FLOATING -FLOATS -FLOCK -FLOCKED -FLOCKING -FLOCKS -FLOG -FLOGGING -FLOOD -FLOODED -FLOODING -FLOODLIGHT -FLOODLIT -FLOODS -FLOOR -FLOORED -FLOORING -FLOORINGS -FLOORS -FLOP -FLOPPIES -FLOPPILY -FLOPPING -FLOPPY -FLOPS -FLORA -FLORAL -FLORENCE -FLORENTINE -FLORID -FLORIDA -FLORIDIAN -FLORIDIANS -FLORIN -FLORIST -FLOSS -FLOSSED -FLOSSES -FLOSSING -FLOTATION -FLOTILLA -FLOUNDER -FLOUNDERED -FLOUNDERING -FLOUNDERS -FLOUR -FLOURED -FLOURISH -FLOURISHED -FLOURISHES -FLOURISHING -FLOW -FLOWCHART -FLOWCHARTING -FLOWCHARTS -FLOWED -FLOWER -FLOWERED -FLOWERINESS -FLOWERING -FLOWERPOT -FLOWERS -FLOWERY -FLOWING -FLOWN -FLOWS -FLOYD -FLU -FLUCTUATE -FLUCTUATES -FLUCTUATING -FLUCTUATION -FLUCTUATIONS -FLUE -FLUENCY -FLUENT -FLUENTLY -FLUFF -FLUFFIER -FLUFFIEST -FLUFFY -FLUID -FLUIDITY -FLUIDLY -FLUIDS -FLUKE -FLUNG -FLUNKED -FLUORESCE -FLUORESCENT -FLURRIED -FLURRY -FLUSH -FLUSHED -FLUSHES -FLUSHING -FLUTE -FLUTED -FLUTING -FLUTTER -FLUTTERED -FLUTTERING -FLUTTERS -FLUX -FLY -FLYABLE -FLYER -FLYERS -FLYING -FLYNN -FOAL -FOAM -FOAMED -FOAMING -FOAMS -FOAMY -FOB -FOBBING -FOCAL -FOCALLY -FOCI -FOCUS -FOCUSED -FOCUSES -FOCUSING -FOCUSSED -FODDER -FOE -FOES -FOG -FOGARTY -FOGGED -FOGGIER -FOGGIEST -FOGGILY -FOGGING -FOGGY -FOGS -FOGY -FOIBLE -FOIL -FOILED -FOILING -FOILS -FOIST -FOLD -FOLDED -FOLDER -FOLDERS -FOLDING -FOLDOUT -FOLDS -FOLEY -FOLIAGE -FOLK -FOLKLORE -FOLKS -FOLKSONG -FOLKSY -FOLLIES -FOLLOW -FOLLOWED -FOLLOWER -FOLLOWERS -FOLLOWING -FOLLOWINGS -FOLLOWS -FOLLY -FOLSOM -FOMALHAUT -FOND -FONDER -FONDLE -FONDLED -FONDLES -FONDLING -FONDLY -FONDNESS -FONT -FONTAINE -FONTAINEBLEAU -FONTANA -FONTS -FOOD -FOODS -FOODSTUFF -FOODSTUFFS -FOOL -FOOLED -FOOLHARDY -FOOLING -FOOLISH -FOOLISHLY -FOOLISHNESS -FOOLPROOF -FOOLS -FOOT -FOOTAGE -FOOTBALL -FOOTBALLS -FOOTBRIDGE -FOOTE -FOOTED -FOOTER -FOOTERS -FOOTFALL -FOOTHILL -FOOTHOLD -FOOTING -FOOTMAN -FOOTNOTE -FOOTNOTES -FOOTPATH -FOOTPRINT -FOOTPRINTS -FOOTSTEP -FOOTSTEPS -FOR -FORAGE -FORAGED -FORAGES -FORAGING -FORAY -FORAYS -FORBADE -FORBEAR -FORBEARANCE -FORBEARS -FORBES -FORBID -FORBIDDEN -FORBIDDING -FORBIDS -FORCE -FORCED -FORCEFUL -FORCEFULLY -FORCEFULNESS -FORCER -FORCES -FORCIBLE -FORCIBLY -FORCING -FORD -FORDHAM -FORDS -FORE -FOREARM -FOREARMS -FOREBODING -FORECAST -FORECASTED -FORECASTER -FORECASTERS -FORECASTING -FORECASTLE -FORECASTS -FOREFATHER -FOREFATHERS -FOREFINGER -FOREFINGERS -FOREGO -FOREGOES -FOREGOING -FOREGONE -FOREGROUND -FOREHEAD -FOREHEADS -FOREIGN -FOREIGNER -FOREIGNERS -FOREIGNS -FOREMAN -FOREMOST -FORENOON -FORENSIC -FORERUNNERS -FORESEE -FORESEEABLE -FORESEEN -FORESEES -FORESIGHT -FORESIGHTED -FOREST -FORESTALL -FORESTALLED -FORESTALLING -FORESTALLMENT -FORESTALLS -FORESTED -FORESTER -FORESTERS -FORESTRY -FORESTS -FORETELL -FORETELLING -FORETELLS -FORETOLD -FOREVER -FOREWARN -FOREWARNED -FOREWARNING -FOREWARNINGS -FOREWARNS -FORFEIT -FORFEITED -FORFEITURE -FORGAVE -FORGE -FORGED -FORGER -FORGERIES -FORGERY -FORGES -FORGET -FORGETFUL -FORGETFULNESS -FORGETS -FORGETTABLE -FORGETTABLY -FORGETTING -FORGING -FORGIVABLE -FORGIVABLY -FORGIVE -FORGIVEN -FORGIVENESS -FORGIVES -FORGIVING -FORGIVINGLY -FORGOT -FORGOTTEN -FORK -FORKED -FORKING -FORKLIFT -FORKS -FORLORN -FORLORNLY -FORM -FORMAL -FORMALISM -FORMALISMS -FORMALITIES -FORMALITY -FORMALIZATION -FORMALIZATIONS -FORMALIZE -FORMALIZED -FORMALIZES -FORMALIZING -FORMALLY -FORMANT -FORMANTS -FORMAT -FORMATION -FORMATIONS -FORMATIVE -FORMATIVELY -FORMATS -FORMATTED -FORMATTER -FORMATTERS -FORMATTING -FORMED -FORMER -FORMERLY -FORMICA -FORMICAS -FORMIDABLE -FORMING -FORMOSA -FORMOSAN -FORMS -FORMULA -FORMULAE -FORMULAS -FORMULATE -FORMULATED -FORMULATES -FORMULATING -FORMULATION -FORMULATIONS -FORMULATOR -FORMULATORS -FORNICATION -FORREST -FORSAKE -FORSAKEN -FORSAKES -FORSAKING -FORSYTHE -FORT -FORTE -FORTESCUE -FORTH -FORTHCOMING -FORTHRIGHT -FORTHWITH -FORTIER -FORTIES -FORTIETH -FORTIFICATION -FORTIFICATIONS -FORTIFIED -FORTIFIES -FORTIFY -FORTIFYING -FORTIORI -FORTITUDE -FORTNIGHT -FORTNIGHTLY -FORTRAN -FORTRAN -FORTRESS -FORTRESSES -FORTS -FORTUITOUS -FORTUITOUSLY -FORTUNATE -FORTUNATELY -FORTUNE -FORTUNES -FORTY -FORUM -FORUMS -FORWARD -FORWARDED -FORWARDER -FORWARDING -FORWARDNESS -FORWARDS -FOSS -FOSSIL -FOSTER -FOSTERED -FOSTERING -FOSTERS -FOUGHT -FOUL -FOULED -FOULEST -FOULING -FOULLY -FOULMOUTH -FOULNESS -FOULS -FOUND -FOUNDATION -FOUNDATIONS -FOUNDED -FOUNDER -FOUNDERED -FOUNDERS -FOUNDING -FOUNDLING -FOUNDRIES -FOUNDRY -FOUNDS -FOUNT -FOUNTAIN -FOUNTAINS -FOUNTS -FOUR -FOURFOLD -FOURIER -FOURS -FOURSCORE -FOURSOME -FOURSQUARE -FOURTEEN -FOURTEENS -FOURTEENTH -FOURTH -FOWL -FOWLER -FOWLS -FOX -FOXES -FOXHALL -FRACTION -FRACTIONAL -FRACTIONALLY -FRACTIONS -FRACTURE -FRACTURED -FRACTURES -FRACTURING -FRAGILE -FRAGMENT -FRAGMENTARY -FRAGMENTATION -FRAGMENTED -FRAGMENTING -FRAGMENTS -FRAGRANCE -FRAGRANCES -FRAGRANT -FRAGRANTLY -FRAIL -FRAILEST -FRAILTY -FRAME -FRAMED -FRAMER -FRAMES -FRAMEWORK -FRAMEWORKS -FRAMING -FRAN -FRANC -FRANCAISE -FRANCE -FRANCES -FRANCESCA -FRANCESCO -FRANCHISE -FRANCHISES -FRANCIE -FRANCINE -FRANCIS -FRANCISCAN -FRANCISCANS -FRANCISCO -FRANCIZE -FRANCIZES -FRANCO -FRANCOIS -FRANCOISE -FRANCS -FRANK -FRANKED -FRANKEL -FRANKER -FRANKEST -FRANKFORT -FRANKFURT -FRANKIE -FRANKING -FRANKLINIZATION -FRANKLINIZATIONS -FRANKLY -FRANKNESS -FRANKS -FRANNY -FRANTIC -FRANTICALLY -FRANZ -FRASER -FRATERNAL -FRATERNALLY -FRATERNITIES -FRATERNITY -FRAU -FRAUD -FRAUDS -FRAUDULENT -FRAUGHT -FRAY -FRAYED -FRAYING -FRAYNE -FRAYS -FRAZIER -FRAZZLE -FREAK -FREAKISH -FREAKS -FRECKLE -FRECKLED -FRECKLES -FRED -FREDDIE -FREDDY -FREDERIC -FREDERICK -FREDERICKS -FREDERICKSBURG -FREDERICO -FREDERICTON -FREDHOLM -FREDRICK -FREDRICKSON -FREE -FREED -FREEDMAN -FREEDOM -FREEDOMS -FREEING -FREEINGS -FREELY -FREEMAN -FREEMASON -FREEMASONRY -FREEMASONS -FREENESS -FREEPORT -FREER -FREES -FREEST -FREESTYLE -FREETOWN -FREEWAY -FREEWHEEL -FREEZE -FREEZER -FREEZERS -FREEZES -FREEZING -FREIDA -FREIGHT -FREIGHTED -FREIGHTER -FREIGHTERS -FREIGHTING -FREIGHTS -FRENCH -FRENCHIZE -FRENCHIZES -FRENCHMAN -FRENCHMEN -FRENETIC -FRENZIED -FRENZY -FREON -FREQUENCIES -FREQUENCY -FREQUENT -FREQUENTED -FREQUENTER -FREQUENTERS -FREQUENTING -FREQUENTLY -FREQUENTS -FRESCO -FRESCOES -FRESH -FRESHEN -FRESHENED -FRESHENER -FRESHENERS -FRESHENING -FRESHENS -FRESHER -FRESHEST -FRESHLY -FRESHMAN -FRESHMEN -FRESHNESS -FRESHWATER -FRESNEL -FRESNO -FRET -FRETFUL -FRETFULLY -FRETFULNESS -FREUD -FREUDIAN -FREUDIANISM -FREUDIANISMS -FREUDIANS -FREY -FREYA -FRIAR -FRIARS -FRICATIVE -FRICATIVES -FRICK -FRICTION -FRICTIONLESS -FRICTIONS -FRIDAY -FRIDAYS -FRIED -FRIEDMAN -FRIEDRICH -FRIEND -FRIENDLESS -FRIENDLIER -FRIENDLIEST -FRIENDLINESS -FRIENDLY -FRIENDS -FRIENDSHIP -FRIENDSHIPS -FRIES -FRIESLAND -FRIEZE -FRIEZES -FRIGATE -FRIGATES -FRIGGA -FRIGHT -FRIGHTEN -FRIGHTENED -FRIGHTENING -FRIGHTENINGLY -FRIGHTENS -FRIGHTFUL -FRIGHTFULLY -FRIGHTFULNESS -FRIGID -FRIGIDAIRE -FRILL -FRILLS -FRINGE -FRINGED -FRISBEE -FRISIA -FRISIAN -FRISK -FRISKED -FRISKING -FRISKS -FRISKY -FRITO -FRITTER -FRITZ -FRIVOLITY -FRIVOLOUS -FRIVOLOUSLY -FRO -FROCK -FROCKS -FROG -FROGS -FROLIC -FROLICS -FROM -FRONT -FRONTAGE -FRONTAL -FRONTED -FRONTIER -FRONTIERS -FRONTIERSMAN -FRONTIERSMEN -FRONTING -FRONTS -FROST -FROSTBELT -FROSTBITE -FROSTBITTEN -FROSTED -FROSTING -FROSTS -FROSTY -FROTH -FROTHING -FROTHY -FROWN -FROWNED -FROWNING -FROWNS -FROZE -FROZEN -FROZENLY -FRUEHAUF -FRUGAL -FRUGALLY -FRUIT -FRUITFUL -FRUITFULLY -FRUITFULNESS -FRUITION -FRUITLESS -FRUITLESSLY -FRUITS -FRUSTRATE -FRUSTRATED -FRUSTRATES -FRUSTRATING -FRUSTRATION -FRUSTRATIONS -FRY -FRYE -FUCHS -FUCHSIA -FUDGE -FUEL -FUELED -FUELING -FUELS -FUGITIVE -FUGITIVES -FUGUE -FUJI -FUJITSU -FULBRIGHT -FULBRIGHTS -FULCRUM -FULFILL -FULFILLED -FULFILLING -FULFILLMENT -FULFILLMENTS -FULFILLS -FULL -FULLER -FULLERTON -FULLEST -FULLNESS -FULLY -FULMINATE -FULTON -FUMBLE -FUMBLED -FUMBLING -FUME -FUMED -FUMES -FUMING -FUN -FUNCTION -FUNCTIONAL -FUNCTIONALITIES -FUNCTIONALITY -FUNCTIONALLY -FUNCTIONALS -FUNCTIONARY -FUNCTIONED -FUNCTIONING -FUNCTIONS -FUNCTOR -FUNCTORS -FUND -FUNDAMENTAL -FUNDAMENTALLY -FUNDAMENTALS -FUNDED -FUNDER -FUNDERS -FUNDING -FUNDS -FUNERAL -FUNERALS -FUNEREAL -FUNGAL -FUNGI -FUNGIBLE -FUNGICIDE -FUNGUS -FUNK -FUNNEL -FUNNELED -FUNNELING -FUNNELS -FUNNIER -FUNNIEST -FUNNILY -FUNNINESS -FUNNY -FUR -FURIES -FURIOUS -FURIOUSER -FURIOUSLY -FURLONG -FURLOUGH -FURMAN -FURNACE -FURNACES -FURNISH -FURNISHED -FURNISHES -FURNISHING -FURNISHINGS -FURNITURE -FURRIER -FURROW -FURROWED -FURROWS -FURRY -FURS -FURTHER -FURTHERED -FURTHERING -FURTHERMORE -FURTHERMOST -FURTHERS -FURTHEST -FURTIVE -FURTIVELY -FURTIVENESS -FURY -FUSE -FUSED -FUSES -FUSING -FUSION -FUSS -FUSSING -FUSSY -FUTILE -FUTILITY -FUTURE -FUTURES -FUTURISTIC -FUZZ -FUZZIER -FUZZINESS -FUZZY -GAB -GABARDINE -GABBING -GABERONES -GABLE -GABLED -GABLER -GABLES -GABON -GABORONE -GABRIEL -GABRIELLE -GAD -GADFLY -GADGET -GADGETRY -GADGETS -GAELIC -GAELICIZATION -GAELICIZATIONS -GAELICIZE -GAELICIZES -GAG -GAGGED -GAGGING -GAGING -GAGS -GAIETIES -GAIETY -GAIL -GAILY -GAIN -GAINED -GAINER -GAINERS -GAINES -GAINESVILLE -GAINFUL -GAINING -GAINS -GAIT -GAITED -GAITER -GAITERS -GAITHERSBURG -GALACTIC -GALAHAD -GALAPAGOS -GALATEA -GALATEAN -GALATEANS -GALATIA -GALATIANS -GALAXIES -GALAXY -GALBREATH -GALE -GALEN -GALILEAN -GALILEE -GALILEO -GALL -GALLAGHER -GALLANT -GALLANTLY -GALLANTRY -GALLANTS -GALLED -GALLERIED -GALLERIES -GALLERY -GALLEY -GALLEYS -GALLING -GALLON -GALLONS -GALLOP -GALLOPED -GALLOPER -GALLOPING -GALLOPS -GALLOWAY -GALLOWS -GALLS -GALLSTONE -GALLUP -GALOIS -GALT -GALVESTON -GALVIN -GALWAY -GAMBIA -GAMBIT -GAMBLE -GAMBLED -GAMBLER -GAMBLERS -GAMBLES -GAMBLING -GAMBOL -GAME -GAMED -GAMELY -GAMENESS -GAMES -GAMING -GAMMA -GANDER -GANDHI -GANDHIAN -GANG -GANGES -GANGLAND -GANGLING -GANGPLANK -GANGRENE -GANGS -GANGSTER -GANGSTERS -GANNETT -GANTRY -GANYMEDE -GAP -GAPE -GAPED -GAPES -GAPING -GAPS -GARAGE -GARAGED -GARAGES -GARB -GARBAGE -GARBAGES -GARBED -GARBLE -GARBLED -GARCIA -GARDEN -GARDENED -GARDENER -GARDENERS -GARDENING -GARDENS -GARDNER -GARFIELD -GARFUNKEL -GARGANTUAN -GARGLE -GARGLED -GARGLES -GARGLING -GARIBALDI -GARLAND -GARLANDED -GARLIC -GARMENT -GARMENTS -GARNER -GARNERED -GARNETT -GARNISH -GARRETT -GARRISON -GARRISONED -GARRISONIAN -GARRY -GARTER -GARTERS -GARTH -GARVEY -GARY -GAS -GASCONY -GASEOUS -GASEOUSLY -GASES -GASH -GASHES -GASKET -GASLIGHT -GASOLINE -GASP -GASPED -GASPEE -GASPING -GASPS -GASSED -GASSER -GASSET -GASSING -GASSINGS -GASSY -GASTON -GASTRIC -GASTROINTESTINAL -GASTRONOME -GASTRONOMY -GATE -GATED -GATES -GATEWAY -GATEWAYS -GATHER -GATHERED -GATHERER -GATHERERS -GATHERING -GATHERINGS -GATHERS -GATING -GATLINBURG -GATOR -GATSBY -GAUCHE -GAUDINESS -GAUDY -GAUGE -GAUGED -GAUGES -GAUGUIN -GAUL -GAULLE -GAULS -GAUNT -GAUNTLEY -GAUNTNESS -GAUSSIAN -GAUTAMA -GAUZE -GAVE -GAVEL -GAVIN -GAWK -GAWKY -GAY -GAYER -GAYEST -GAYETY -GAYLOR -GAYLORD -GAYLY -GAYNESS -GAYNOR -GAZE -GAZED -GAZELLE -GAZER -GAZERS -GAZES -GAZETTE -GAZING -GEAR -GEARED -GEARING -GEARS -GEARY -GECKO -GEESE -GEHRIG -GEIGER -GEIGY -GEISHA -GEL -GELATIN -GELATINE -GELATINOUS -GELD -GELLED -GELLING -GELS -GEM -GEMINI -GEMINID -GEMMA -GEMS -GENDER -GENDERS -GENE -GENEALOGY -GENERAL -GENERALIST -GENERALISTS -GENERALITIES -GENERALITY -GENERALIZATION -GENERALIZATIONS -GENERALIZE -GENERALIZED -GENERALIZER -GENERALIZERS -GENERALIZES -GENERALIZING -GENERALLY -GENERALS -GENERATE -GENERATED -GENERATES -GENERATING -GENERATION -GENERATIONS -GENERATIVE -GENERATOR -GENERATORS -GENERIC -GENERICALLY -GENEROSITIES -GENEROSITY -GENEROUS -GENEROUSLY -GENEROUSNESS -GENES -GENESCO -GENESIS -GENETIC -GENETICALLY -GENEVA -GENEVIEVE -GENIAL -GENIALLY -GENIE -GENIUS -GENIUSES -GENOA -GENRE -GENRES -GENT -GENTEEL -GENTILE -GENTLE -GENTLEMAN -GENTLEMANLY -GENTLEMEN -GENTLENESS -GENTLER -GENTLEST -GENTLEWOMAN -GENTLY -GENTRY -GENUINE -GENUINELY -GENUINENESS -GENUS -GEOCENTRIC -GEODESIC -GEODESY -GEODETIC -GEOFF -GEOFFREY -GEOGRAPHER -GEOGRAPHIC -GEOGRAPHICAL -GEOGRAPHICALLY -GEOGRAPHY -GEOLOGICAL -GEOLOGIST -GEOLOGISTS -GEOLOGY -GEOMETRIC -GEOMETRICAL -GEOMETRICALLY -GEOMETRICIAN -GEOMETRIES -GEOMETRY -GEOPHYSICAL -GEOPHYSICS -GEORGE -GEORGES -GEORGETOWN -GEORGIA -GEORGIAN -GEORGIANS -GEOSYNCHRONOUS -GERALD -GERALDINE -GERANIUM -GERARD -GERBER -GERBIL -GERHARD -GERHARDT -GERIATRIC -GERM -GERMAN -GERMANE -GERMANIA -GERMANIC -GERMANS -GERMANTOWN -GERMANY -GERMICIDE -GERMINAL -GERMINATE -GERMINATED -GERMINATES -GERMINATING -GERMINATION -GERMS -GEROME -GERRY -GERSHWIN -GERSHWINS -GERTRUDE -GERUND -GESTAPO -GESTURE -GESTURED -GESTURES -GESTURING -GET -GETAWAY -GETS -GETTER -GETTERS -GETTING -GETTY -GETTYSBURG -GEYSER -GHANA -GHANIAN -GHASTLY -GHENT -GHETTO -GHOST -GHOSTED -GHOSTLY -GHOSTS -GIACOMO -GIANT -GIANTS -GIBBERISH -GIBBONS -GIBBS -GIBBY -GIBRALTAR -GIBSON -GIDDINESS -GIDDINGS -GIDDY -GIDEON -GIFFORD -GIFT -GIFTED -GIFTS -GIG -GIGABIT -GIGABITS -GIGABYTE -GIGABYTES -GIGACYCLE -GIGAHERTZ -GIGANTIC -GIGAVOLT -GIGAWATT -GIGGLE -GIGGLED -GIGGLES -GIGGLING -GIL -GILBERTSON -GILCHRIST -GILD -GILDED -GILDING -GILDS -GILEAD -GILES -GILKSON -GILL -GILLESPIE -GILLETTE -GILLIGAN -GILLS -GILMORE -GILT -GIMBEL -GIMMICK -GIMMICKS -GIN -GINA -GINGER -GINGERBREAD -GINGERLY -GINGHAM -GINGHAMS -GINN -GINO -GINS -GINSBERG -GINSBURG -GIOCONDA -GIORGIO -GIOVANNI -GIPSIES -GIPSY -GIRAFFE -GIRAFFES -GIRD -GIRDER -GIRDERS -GIRDLE -GIRL -GIRLFRIEND -GIRLIE -GIRLISH -GIRLS -GIRT -GIRTH -GIST -GIULIANO -GIUSEPPE -GIVE -GIVEAWAY -GIVEN -GIVER -GIVERS -GIVES -GIVING -GLACIAL -GLACIER -GLACIERS -GLAD -GLADDEN -GLADDER -GLADDEST -GLADE -GLADIATOR -GLADLY -GLADNESS -GLADSTONE -GLADYS -GLAMOR -GLAMOROUS -GLAMOUR -GLANCE -GLANCED -GLANCES -GLANCING -GLAND -GLANDS -GLANDULAR -GLARE -GLARED -GLARES -GLARING -GLARINGLY -GLASGOW -GLASS -GLASSED -GLASSES -GLASSY -GLASWEGIAN -GLAUCOMA -GLAZE -GLAZED -GLAZER -GLAZES -GLAZING -GLEAM -GLEAMED -GLEAMING -GLEAMS -GLEAN -GLEANED -GLEANER -GLEANING -GLEANINGS -GLEANS -GLEASON -GLEE -GLEEFUL -GLEEFULLY -GLEES -GLEN -GLENDA -GLENDALE -GLENN -GLENS -GLIDDEN -GLIDE -GLIDED -GLIDER -GLIDERS -GLIDES -GLIMMER -GLIMMERED -GLIMMERING -GLIMMERS -GLIMPSE -GLIMPSED -GLIMPSES -GLINT -GLINTED -GLINTING -GLINTS -GLISTEN -GLISTENED -GLISTENING -GLISTENS -GLITCH -GLITTER -GLITTERED -GLITTERING -GLITTERS -GLOAT -GLOBAL -GLOBALLY -GLOBE -GLOBES -GLOBULAR -GLOBULARITY -GLOOM -GLOOMILY -GLOOMY -GLORIA -GLORIANA -GLORIES -GLORIFICATION -GLORIFIED -GLORIFIES -GLORIFY -GLORIOUS -GLORIOUSLY -GLORY -GLORYING -GLOSS -GLOSSARIES -GLOSSARY -GLOSSED -GLOSSES -GLOSSING -GLOSSY -GLOTTAL -GLOUCESTER -GLOVE -GLOVED -GLOVER -GLOVERS -GLOVES -GLOVING -GLOW -GLOWED -GLOWER -GLOWERS -GLOWING -GLOWINGLY -GLOWS -GLUE -GLUED -GLUES -GLUING -GLUT -GLUTTON -GLYNN -GNASH -GNAT -GNATS -GNAW -GNAWED -GNAWING -GNAWS -GNOME -GNOMON -GNU -GOA -GOAD -GOADED -GOAL -GOALS -GOAT -GOATEE -GOATEES -GOATS -GOBBLE -GOBBLED -GOBBLER -GOBBLERS -GOBBLES -GOBI -GOBLET -GOBLETS -GOBLIN -GOBLINS -GOD -GODDARD -GODDESS -GODDESSES -GODFATHER -GODFREY -GODHEAD -GODLIKE -GODLY -GODMOTHER -GODMOTHERS -GODOT -GODPARENT -GODS -GODSEND -GODSON -GODWIN -GODZILLA -GOES -GOETHE -GOFF -GOGGLES -GOGH -GOING -GOINGS -GOLD -GOLDA -GOLDBERG -GOLDEN -GOLDENLY -GOLDENNESS -GOLDENROD -GOLDFIELD -GOLDFISH -GOLDING -GOLDMAN -GOLDS -GOLDSMITH -GOLDSTEIN -GOLDSTINE -GOLDWATER -GOLETA -GOLF -GOLFER -GOLFERS -GOLFING -GOLIATH -GOLLY -GOMEZ -GONDOLA -GONE -GONER -GONG -GONGS -GONZALES -GONZALEZ -GOOD -GOODBY -GOODBYE -GOODE -GOODIES -GOODLY -GOODMAN -GOODNESS -GOODRICH -GOODS -GOODWILL -GOODWIN -GOODY -GOODYEAR -GOOF -GOOFED -GOOFS -GOOFY -GOOSE -GOPHER -GORDIAN -GORDON -GORE -GOREN -GORGE -GORGEOUS -GORGEOUSLY -GORGES -GORGING -GORHAM -GORILLA -GORILLAS -GORKY -GORTON -GORY -GOSH -GOSPEL -GOSPELERS -GOSPELS -GOSSIP -GOSSIPED -GOSSIPING -GOSSIPS -GOT -GOTHAM -GOTHIC -GOTHICALLY -GOTHICISM -GOTHICIZE -GOTHICIZED -GOTHICIZER -GOTHICIZERS -GOTHICIZES -GOTHICIZING -GOTO -GOTOS -GOTTEN -GOTTFRIED -GOUCHER -GOUDA -GOUGE -GOUGED -GOUGES -GOUGING -GOULD -GOURD -GOURMET -GOUT -GOVERN -GOVERNANCE -GOVERNED -GOVERNESS -GOVERNING -GOVERNMENT -GOVERNMENTAL -GOVERNMENTALLY -GOVERNMENTS -GOVERNOR -GOVERNORS -GOVERNS -GOWN -GOWNED -GOWNS -GRAB -GRABBED -GRABBER -GRABBERS -GRABBING -GRABBINGS -GRABS -GRACE -GRACED -GRACEFUL -GRACEFULLY -GRACEFULNESS -GRACES -GRACIE -GRACING -GRACIOUS -GRACIOUSLY -GRACIOUSNESS -GRAD -GRADATION -GRADATIONS -GRADE -GRADED -GRADER -GRADERS -GRADES -GRADIENT -GRADIENTS -GRADING -GRADINGS -GRADUAL -GRADUALLY -GRADUATE -GRADUATED -GRADUATES -GRADUATING -GRADUATION -GRADUATIONS -GRADY -GRAFF -GRAFT -GRAFTED -GRAFTER -GRAFTING -GRAFTON -GRAFTS -GRAHAM -GRAHAMS -GRAIL -GRAIN -GRAINED -GRAINING -GRAINS -GRAM -GRAMMAR -GRAMMARIAN -GRAMMARS -GRAMMATIC -GRAMMATICAL -GRAMMATICALLY -GRAMS -GRANARIES -GRANARY -GRAND -GRANDCHILD -GRANDCHILDREN -GRANDDAUGHTER -GRANDER -GRANDEST -GRANDEUR -GRANDFATHER -GRANDFATHERS -GRANDIOSE -GRANDLY -GRANDMA -GRANDMOTHER -GRANDMOTHERS -GRANDNEPHEW -GRANDNESS -GRANDNIECE -GRANDPA -GRANDPARENT -GRANDS -GRANDSON -GRANDSONS -GRANDSTAND -GRANGE -GRANITE -GRANNY -GRANOLA -GRANT -GRANTED -GRANTEE -GRANTER -GRANTING -GRANTOR -GRANTS -GRANULARITY -GRANULATE -GRANULATED -GRANULATES -GRANULATING -GRANVILLE -GRAPE -GRAPEFRUIT -GRAPES -GRAPEVINE -GRAPH -GRAPHED -GRAPHIC -GRAPHICAL -GRAPHICALLY -GRAPHICS -GRAPHING -GRAPHITE -GRAPHS -GRAPPLE -GRAPPLED -GRAPPLING -GRASP -GRASPABLE -GRASPED -GRASPING -GRASPINGLY -GRASPS -GRASS -GRASSED -GRASSERS -GRASSES -GRASSIER -GRASSIEST -GRASSLAND -GRASSY -GRATE -GRATED -GRATEFUL -GRATEFULLY -GRATEFULNESS -GRATER -GRATES -GRATIFICATION -GRATIFIED -GRATIFY -GRATIFYING -GRATING -GRATINGS -GRATIS -GRATITUDE -GRATUITIES -GRATUITOUS -GRATUITOUSLY -GRATUITOUSNESS -GRATUITY -GRAVE -GRAVEL -GRAVELLY -GRAVELY -GRAVEN -GRAVENESS -GRAVER -GRAVES -GRAVEST -GRAVESTONE -GRAVEYARD -GRAVITATE -GRAVITATION -GRAVITATIONAL -GRAVITY -GRAVY -GRAY -GRAYED -GRAYER -GRAYEST -GRAYING -GRAYNESS -GRAYSON -GRAZE -GRAZED -GRAZER -GRAZING -GREASE -GREASED -GREASES -GREASY -GREAT -GREATER -GREATEST -GREATLY -GREATNESS -GRECIAN -GRECIANIZE -GRECIANIZES -GREECE -GREED -GREEDILY -GREEDINESS -GREEDY -GREEK -GREEKIZE -GREEKIZES -GREEKS -GREEN -GREENBELT -GREENBERG -GREENBLATT -GREENBRIAR -GREENE -GREENER -GREENERY -GREENEST -GREENFELD -GREENFIELD -GREENGROCER -GREENHOUSE -GREENHOUSES -GREENING -GREENISH -GREENLAND -GREENLY -GREENNESS -GREENS -GREENSBORO -GREENSVILLE -GREENTREE -GREENVILLE -GREENWARE -GREENWICH -GREER -GREET -GREETED -GREETER -GREETING -GREETINGS -GREETS -GREG -GREGARIOUS -GREGG -GREGORIAN -GREGORY -GRENADE -GRENADES -GRENDEL -GRENIER -GRENOBLE -GRENVILLE -GRESHAM -GRETA -GRETCHEN -GREW -GREY -GREYEST -GREYHOUND -GREYING -GRID -GRIDDLE -GRIDIRON -GRIDS -GRIEF -GRIEFS -GRIEVANCE -GRIEVANCES -GRIEVE -GRIEVED -GRIEVER -GRIEVERS -GRIEVES -GRIEVING -GRIEVINGLY -GRIEVOUS -GRIEVOUSLY -GRIFFITH -GRILL -GRILLED -GRILLING -GRILLS -GRIM -GRIMACE -GRIMALDI -GRIME -GRIMED -GRIMES -GRIMLY -GRIMM -GRIMNESS -GRIN -GRIND -GRINDER -GRINDERS -GRINDING -GRINDINGS -GRINDS -GRINDSTONE -GRINDSTONES -GRINNING -GRINS -GRIP -GRIPE -GRIPED -GRIPES -GRIPING -GRIPPED -GRIPPING -GRIPPINGLY -GRIPS -GRIS -GRISLY -GRIST -GRISWOLD -GRIT -GRITS -GRITTY -GRIZZLY -GROAN -GROANED -GROANER -GROANERS -GROANING -GROANS -GROCER -GROCERIES -GROCERS -GROCERY -GROGGY -GROIN -GROOM -GROOMED -GROOMING -GROOMS -GROOT -GROOVE -GROOVED -GROOVES -GROPE -GROPED -GROPES -GROPING -GROSS -GROSSED -GROSSER -GROSSES -GROSSEST -GROSSET -GROSSING -GROSSLY -GROSSMAN -GROSSNESS -GROSVENOR -GROTESQUE -GROTESQUELY -GROTESQUES -GROTON -GROTTO -GROTTOS -GROUND -GROUNDED -GROUNDER -GROUNDERS -GROUNDING -GROUNDS -GROUNDWORK -GROUP -GROUPED -GROUPING -GROUPINGS -GROUPS -GROUSE -GROVE -GROVEL -GROVELED -GROVELING -GROVELS -GROVER -GROVERS -GROVES -GROW -GROWER -GROWERS -GROWING -GROWL -GROWLED -GROWLING -GROWLS -GROWN -GROWNUP -GROWNUPS -GROWS -GROWTH -GROWTHS -GRUB -GRUBBY -GRUBS -GRUDGE -GRUDGES -GRUDGINGLY -GRUESOME -GRUFF -GRUFFLY -GRUMBLE -GRUMBLED -GRUMBLES -GRUMBLING -GRUMMAN -GRUNT -GRUNTED -GRUNTING -GRUNTS -GRUSKY -GRUYERE -GUADALUPE -GUAM -GUANO -GUARANTEE -GUARANTEED -GUARANTEEING -GUARANTEER -GUARANTEERS -GUARANTEES -GUARANTY -GUARD -GUARDED -GUARDEDLY -GUARDHOUSE -GUARDIA -GUARDIAN -GUARDIANS -GUARDIANSHIP -GUARDING -GUARDS -GUATEMALA -GUATEMALAN -GUBERNATORIAL -GUELPH -GUENTHER -GUERRILLA -GUERRILLAS -GUESS -GUESSED -GUESSES -GUESSING -GUESSWORK -GUEST -GUESTS -GUGGENHEIM -GUHLEMAN -GUIANA -GUIDANCE -GUIDE -GUIDEBOOK -GUIDEBOOKS -GUIDED -GUIDELINE -GUIDELINES -GUIDES -GUIDING -GUILD -GUILDER -GUILDERS -GUILE -GUILFORD -GUILT -GUILTIER -GUILTIEST -GUILTILY -GUILTINESS -GUILTLESS -GUILTLESSLY -GUILTY -GUINEA -GUINEVERE -GUISE -GUISES -GUITAR -GUITARS -GUJARAT -GUJARATI -GULCH -GULCHES -GULF -GULFS -GULL -GULLAH -GULLED -GULLIES -GULLING -GULLS -GULLY -GULP -GULPED -GULPS -GUM -GUMMING -GUMPTION -GUMS -GUN -GUNDERSON -GUNFIRE -GUNMAN -GUNMEN -GUNNAR -GUNNED -GUNNER -GUNNERS -GUNNERY -GUNNING -GUNNY -GUNPLAY -GUNPOWDER -GUNS -GUNSHOT -GUNTHER -GURGLE -GURKHA -GURU -GUS -GUSH -GUSHED -GUSHER -GUSHES -GUSHING -GUST -GUSTAFSON -GUSTAV -GUSTAVE -GUSTAVUS -GUSTO -GUSTS -GUSTY -GUT -GUTENBERG -GUTHRIE -GUTS -GUTSY -GUTTER -GUTTERED -GUTTERS -GUTTING -GUTTURAL -GUY -GUYANA -GUYED -GUYER -GUYERS -GUYING -GUYS -GWEN -GWYN -GYMNASIUM -GYMNASIUMS -GYMNAST -GYMNASTIC -GYMNASTICS -GYMNASTS -GYPSIES -GYPSY -GYRO -GYROCOMPASS -GYROSCOPE -GYROSCOPES -HAAG -HAAS -HABEAS -HABERMAN -HABIB -HABIT -HABITAT -HABITATION -HABITATIONS -HABITATS -HABITS -HABITUAL -HABITUALLY -HABITUALNESS -HACK -HACKED -HACKER -HACKERS -HACKETT -HACKING -HACKNEYED -HACKS -HACKSAW -HAD -HADAMARD -HADDAD -HADDOCK -HADES -HADLEY -HADRIAN -HAFIZ -HAG -HAGEN -HAGER -HAGGARD -HAGGARDLY -HAGGLE -HAGSTROM -HAGUE -HAHN -HAIFA -HAIL -HAILED -HAILING -HAILS -HAILSTONE -HAILSTORM -HAINES -HAIR -HAIRCUT -HAIRCUTS -HAIRIER -HAIRINESS -HAIRLESS -HAIRPIN -HAIRS -HAIRY -HAITI -HAITIAN -HAL -HALCYON -HALE -HALER -HALEY -HALF -HALFHEARTED -HALFWAY -HALIFAX -HALL -HALLEY -HALLINAN -HALLMARK -HALLMARKS -HALLOW -HALLOWED -HALLOWEEN -HALLS -HALLUCINATE -HALLWAY -HALLWAYS -HALOGEN -HALPERN -HALSEY -HALSTEAD -HALT -HALTED -HALTER -HALTERS -HALTING -HALTINGLY -HALTS -HALVE -HALVED -HALVERS -HALVERSON -HALVES -HALVING -HAM -HAMAL -HAMBURG -HAMBURGER -HAMBURGERS -HAMEY -HAMILTON -HAMILTONIAN -HAMILTONIANS -HAMLET -HAMLETS -HAMLIN -HAMMER -HAMMERED -HAMMERING -HAMMERS -HAMMETT -HAMMING -HAMMOCK -HAMMOCKS -HAMMOND -HAMPER -HAMPERED -HAMPERS -HAMPSHIRE -HAMPTON -HAMS -HAMSTER -HAN -HANCOCK -HAND -HANDBAG -HANDBAGS -HANDBOOK -HANDBOOKS -HANDCUFF -HANDCUFFED -HANDCUFFING -HANDCUFFS -HANDED -HANDEL -HANDFUL -HANDFULS -HANDGUN -HANDICAP -HANDICAPPED -HANDICAPS -HANDIER -HANDIEST -HANDILY -HANDINESS -HANDING -HANDIWORK -HANDKERCHIEF -HANDKERCHIEFS -HANDLE -HANDLED -HANDLER -HANDLERS -HANDLES -HANDLING -HANDMAID -HANDOUT -HANDS -HANDSHAKE -HANDSHAKES -HANDSHAKING -HANDSOME -HANDSOMELY -HANDSOMENESS -HANDSOMER -HANDSOMEST -HANDWRITING -HANDWRITTEN -HANDY -HANEY -HANFORD -HANG -HANGAR -HANGARS -HANGED -HANGER -HANGERS -HANGING -HANGMAN -HANGMEN -HANGOUT -HANGOVER -HANGOVERS -HANGS -HANKEL -HANLEY -HANLON -HANNA -HANNAH -HANNIBAL -HANOI -HANOVER -HANOVERIAN -HANOVERIANIZE -HANOVERIANIZES -HANOVERIZE -HANOVERIZES -HANS -HANSEL -HANSEN -HANSON -HANUKKAH -HAP -HAPGOOD -HAPHAZARD -HAPHAZARDLY -HAPHAZARDNESS -HAPLESS -HAPLESSLY -HAPLESSNESS -HAPLY -HAPPEN -HAPPENED -HAPPENING -HAPPENINGS -HAPPENS -HAPPIER -HAPPIEST -HAPPILY -HAPPINESS -HAPPY -HAPSBURG -HARASS -HARASSED -HARASSES -HARASSING -HARASSMENT -HARBIN -HARBINGER -HARBOR -HARBORED -HARBORING -HARBORS -HARCOURT -HARD -HARDBOILED -HARDCOPY -HARDEN -HARDER -HARDEST -HARDHAT -HARDIN -HARDINESS -HARDING -HARDLY -HARDNESS -HARDSCRABBLE -HARDSHIP -HARDSHIPS -HARDWARE -HARDWIRED -HARDWORKING -HARDY -HARE -HARELIP -HAREM -HARES -HARK -HARKEN -HARLAN -HARLEM -HARLEY -HARLOT -HARLOTS -HARM -HARMED -HARMFUL -HARMFULLY -HARMFULNESS -HARMING -HARMLESS -HARMLESSLY -HARMLESSNESS -HARMON -HARMONIC -HARMONICS -HARMONIES -HARMONIOUS -HARMONIOUSLY -HARMONIOUSNESS -HARMONIST -HARMONISTIC -HARMONISTICALLY -HARMONIZE -HARMONY -HARMS -HARNESS -HARNESSED -HARNESSING -HAROLD -HARP -HARPER -HARPERS -HARPING -HARPY -HARRIED -HARRIER -HARRIET -HARRIMAN -HARRINGTON -HARRIS -HARRISBURG -HARRISON -HARRISONBURG -HARROW -HARROWED -HARROWING -HARROWS -HARRY -HARSH -HARSHER -HARSHLY -HARSHNESS -HART -HARTFORD -HARTLEY -HARTMAN -HARVARD -HARVARDIZE -HARVARDIZES -HARVEST -HARVESTED -HARVESTER -HARVESTING -HARVESTS -HARVEY -HARVEYIZE -HARVEYIZES -HARVEYS -HAS -HASH -HASHED -HASHER -HASHES -HASHING -HASHISH -HASKELL -HASKINS -HASSLE -HASTE -HASTEN -HASTENED -HASTENING -HASTENS -HASTILY -HASTINESS -HASTINGS -HASTY -HAT -HATCH -HATCHED -HATCHET -HATCHETS -HATCHING -HATCHURE -HATE -HATED -HATEFUL -HATEFULLY -HATEFULNESS -HATER -HATES -HATFIELD -HATHAWAY -HATING -HATRED -HATS -HATTERAS -HATTIE -HATTIESBURG -HATTIZE -HATTIZES -HAUGEN -HAUGHTILY -HAUGHTINESS -HAUGHTY -HAUL -HAULED -HAULER -HAULING -HAULS -HAUNCH -HAUNCHES -HAUNT -HAUNTED -HAUNTER -HAUNTING -HAUNTS -HAUSA -HAUSDORFF -HAUSER -HAVANA -HAVE -HAVEN -HAVENS -HAVES -HAVILLAND -HAVING -HAVOC -HAWAII -HAWAIIAN -HAWK -HAWKED -HAWKER -HAWKERS -HAWKINS -HAWKS -HAWLEY -HAWTHORNE -HAY -HAYDEN -HAYDN -HAYES -HAYING -HAYNES -HAYS -HAYSTACK -HAYWARD -HAYWOOD -HAZARD -HAZARDOUS -HAZARDS -HAZE -HAZEL -HAZES -HAZINESS -HAZY -HEAD -HEADACHE -HEADACHES -HEADED -HEADER -HEADERS -HEADGEAR -HEADING -HEADINGS -HEADLAND -HEADLANDS -HEADLIGHT -HEADLINE -HEADLINED -HEADLINES -HEADLINING -HEADLONG -HEADMASTER -HEADPHONE -HEADQUARTERS -HEADROOM -HEADS -HEADSET -HEADWAY -HEAL -HEALED -HEALER -HEALERS -HEALEY -HEALING -HEALS -HEALTH -HEALTHFUL -HEALTHFULLY -HEALTHFULNESS -HEALTHIER -HEALTHIEST -HEALTHILY -HEALTHINESS -HEALTHY -HEALY -HEAP -HEAPED -HEAPING -HEAPS -HEAR -HEARD -HEARER -HEARERS -HEARING -HEARINGS -HEARKEN -HEARS -HEARSAY -HEARST -HEART -HEARTBEAT -HEARTBREAK -HEARTEN -HEARTIEST -HEARTILY -HEARTINESS -HEARTLESS -HEARTS -HEARTWOOD -HEARTY -HEAT -HEATABLE -HEATED -HEATEDLY -HEATER -HEATERS -HEATH -HEATHEN -HEATHER -HEATHKIT -HEATHMAN -HEATING -HEATS -HEAVE -HEAVED -HEAVEN -HEAVENLY -HEAVENS -HEAVER -HEAVERS -HEAVES -HEAVIER -HEAVIEST -HEAVILY -HEAVINESS -HEAVING -HEAVY -HEAVYWEIGHT -HEBE -HEBRAIC -HEBRAICIZE -HEBRAICIZES -HEBREW -HEBREWS -HEBRIDES -HECATE -HECK -HECKLE -HECKMAN -HECTIC -HECUBA -HEDDA -HEDGE -HEDGED -HEDGEHOG -HEDGEHOGS -HEDGES -HEDONISM -HEDONIST -HEED -HEEDED -HEEDLESS -HEEDLESSLY -HEEDLESSNESS -HEEDS -HEEL -HEELED -HEELERS -HEELING -HEELS -HEFTY -HEGEL -HEGELIAN -HEGELIANIZE -HEGELIANIZES -HEGEMONY -HEIDEGGER -HEIDELBERG -HEIFER -HEIGHT -HEIGHTEN -HEIGHTENED -HEIGHTENING -HEIGHTENS -HEIGHTS -HEINE -HEINLEIN -HEINOUS -HEINOUSLY -HEINRICH -HEINZ -HEINZE -HEIR -HEIRESS -HEIRESSES -HEIRS -HEISENBERG -HEISER -HELD -HELEN -HELENA -HELENE -HELGA -HELICAL -HELICOPTER -HELIOCENTRIC -HELIOPOLIS -HELIUM -HELIX -HELL -HELLENIC -HELLENIZATION -HELLENIZATIONS -HELLENIZE -HELLENIZED -HELLENIZES -HELLENIZING -HELLESPONT -HELLFIRE -HELLISH -HELLMAN -HELLO -HELLS -HELM -HELMET -HELMETS -HELMHOLTZ -HELMSMAN -HELMUT -HELP -HELPED -HELPER -HELPERS -HELPFUL -HELPFULLY -HELPFULNESS -HELPING -HELPLESS -HELPLESSLY -HELPLESSNESS -HELPMATE -HELPS -HELSINKI -HELVETICA -HEM -HEMINGWAY -HEMISPHERE -HEMISPHERES -HEMLOCK -HEMLOCKS -HEMOGLOBIN -HEMORRHOID -HEMOSTAT -HEMOSTATS -HEMP -HEMPEN -HEMPSTEAD -HEMS -HEN -HENCE -HENCEFORTH -HENCHMAN -HENCHMEN -HENDERSON -HENDRICK -HENDRICKS -HENDRICKSON -HENDRIX -HENLEY -HENNESSEY -HENNESSY -HENNING -HENPECK -HENRI -HENRIETTA -HENS -HEPATITIS -HEPBURN -HER -HERA -HERACLITUS -HERALD -HERALDED -HERALDING -HERALDS -HERB -HERBERT -HERBIVORE -HERBIVOROUS -HERBS -HERCULEAN -HERCULES -HERD -HERDED -HERDER -HERDING -HERDS -HERE -HEREABOUT -HEREABOUTS -HEREAFTER -HEREBY -HEREDITARY -HEREDITY -HEREFORD -HEREIN -HEREINAFTER -HEREOF -HERES -HERESY -HERETIC -HERETICS -HERETO -HERETOFORE -HEREUNDER -HEREWITH -HERITAGE -HERITAGES -HERKIMER -HERMAN -HERMANN -HERMES -HERMETIC -HERMETICALLY -HERMIT -HERMITE -HERMITIAN -HERMITS -HERMOSA -HERNANDEZ -HERO -HERODOTUS -HEROES -HEROIC -HEROICALLY -HEROICS -HEROIN -HEROINE -HEROINES -HEROISM -HERON -HERONS -HERPES -HERR -HERRING -HERRINGS -HERRINGTON -HERS -HERSCHEL -HERSELF -HERSEY -HERSHEL -HERSHEY -HERTZ -HERTZOG -HESITANT -HESITANTLY -HESITATE -HESITATED -HESITATES -HESITATING -HESITATINGLY -HESITATION -HESITATIONS -HESPERUS -HESS -HESSE -HESSIAN -HESSIANS -HESTER -HETEROGENEITY -HETEROGENEOUS -HETEROGENEOUSLY -HETEROGENEOUSNESS -HETEROGENOUS -HETEROSEXUAL -HETMAN -HETTIE -HETTY -HEUBLEIN -HEURISTIC -HEURISTICALLY -HEURISTICS -HEUSEN -HEUSER -HEW -HEWED -HEWER -HEWETT -HEWITT -HEWLETT -HEWS -HEX -HEXADECIMAL -HEXAGON -HEXAGONAL -HEXAGONALLY -HEXAGONS -HEY -HEYWOOD -HIATT -HIAWATHA -HIBBARD -HIBERNATE -HIBERNIA -HICK -HICKEY -HICKEYS -HICKMAN -HICKOK -HICKORY -HICKS -HID -HIDDEN -HIDE -HIDEOUS -HIDEOUSLY -HIDEOUSNESS -HIDEOUT -HIDEOUTS -HIDES -HIDING -HIERARCHAL -HIERARCHIC -HIERARCHICAL -HIERARCHICALLY -HIERARCHIES -HIERARCHY -HIERONYMUS -HIGGINS -HIGH -HIGHER -HIGHEST -HIGHFIELD -HIGHLAND -HIGHLANDER -HIGHLANDS -HIGHLIGHT -HIGHLIGHTED -HIGHLIGHTING -HIGHLIGHTS -HIGHLY -HIGHNESS -HIGHNESSES -HIGHWAY -HIGHWAYMAN -HIGHWAYMEN -HIGHWAYS -HIJACK -HIJACKED -HIKE -HIKED -HIKER -HIKES -HIKING -HILARIOUS -HILARIOUSLY -HILARITY -HILBERT -HILDEBRAND -HILL -HILLARY -HILLBILLY -HILLCREST -HILLEL -HILLOCK -HILLS -HILLSBORO -HILLSDALE -HILLSIDE -HILLSIDES -HILLTOP -HILLTOPS -HILT -HILTON -HILTS -HIM -HIMALAYA -HIMALAYAS -HIMMLER -HIMSELF -HIND -HINDER -HINDERED -HINDERING -HINDERS -HINDI -HINDRANCE -HINDRANCES -HINDSIGHT -HINDU -HINDUISM -HINDUS -HINDUSTAN -HINES -HINGE -HINGED -HINGES -HINKLE -HINMAN -HINSDALE -HINT -HINTED -HINTING -HINTS -HIP -HIPPO -HIPPOCRATES -HIPPOCRATIC -HIPPOPOTAMUS -HIPS -HIRAM -HIRE -HIRED -HIRER -HIRERS -HIRES -HIREY -HIRING -HIRINGS -HIROSHI -HIROSHIMA -HIRSCH -HIS -HISPANIC -HISPANICIZE -HISPANICIZES -HISPANICS -HISS -HISSED -HISSES -HISSING -HISTOGRAM -HISTOGRAMS -HISTORIAN -HISTORIANS -HISTORIC -HISTORICAL -HISTORICALLY -HISTORIES -HISTORY -HIT -HITACHI -HITCH -HITCHCOCK -HITCHED -HITCHHIKE -HITCHHIKED -HITCHHIKER -HITCHHIKERS -HITCHHIKES -HITCHHIKING -HITCHING -HITHER -HITHERTO -HITLER -HITLERIAN -HITLERISM -HITLERITE -HITLERITES -HITS -HITTER -HITTERS -HITTING -HIVE -HOAGLAND -HOAR -HOARD -HOARDER -HOARDING -HOARINESS -HOARSE -HOARSELY -HOARSENESS -HOARY -HOBART -HOBBES -HOBBIES -HOBBLE -HOBBLED -HOBBLES -HOBBLING -HOBBS -HOBBY -HOBBYHORSE -HOBBYIST -HOBBYISTS -HOBDAY -HOBOKEN -HOCKEY -HODGEPODGE -HODGES -HODGKIN -HOE -HOES -HOFF -HOFFMAN -HOG -HOGGING -HOGS -HOIST -HOISTED -HOISTING -HOISTS -HOKAN -HOLBROOK -HOLCOMB -HOLD -HOLDEN -HOLDER -HOLDERS -HOLDING -HOLDINGS -HOLDS -HOLE -HOLED -HOLES -HOLIDAY -HOLIDAYS -HOLIES -HOLINESS -HOLISTIC -HOLLAND -HOLLANDAISE -HOLLANDER -HOLLERITH -HOLLINGSWORTH -HOLLISTER -HOLLOW -HOLLOWAY -HOLLOWED -HOLLOWING -HOLLOWLY -HOLLOWNESS -HOLLOWS -HOLLY -HOLLYWOOD -HOLLYWOODIZE -HOLLYWOODIZES -HOLM -HOLMAN -HOLMDEL -HOLMES -HOLOCAUST -HOLOCENE -HOLOGRAM -HOLOGRAMS -HOLST -HOLSTEIN -HOLY -HOLYOKE -HOLZMAN -HOM -HOMAGE -HOME -HOMED -HOMELESS -HOMELY -HOMEMADE -HOMEMAKER -HOMEMAKERS -HOMEOMORPHIC -HOMEOMORPHISM -HOMEOMORPHISMS -HOMEOPATH -HOMEOWNER -HOMER -HOMERIC -HOMERS -HOMES -HOMESICK -HOMESICKNESS -HOMESPUN -HOMESTEAD -HOMESTEADER -HOMESTEADERS -HOMESTEADS -HOMEWARD -HOMEWARDS -HOMEWORK -HOMICIDAL -HOMICIDE -HOMING -HOMO -HOMOGENEITIES -HOMOGENEITY -HOMOGENEOUS -HOMOGENEOUSLY -HOMOGENEOUSNESS -HOMOMORPHIC -HOMOMORPHISM -HOMOMORPHISMS -HOMOSEXUAL -HONDA -HONDO -HONDURAS -HONE -HONED -HONER -HONES -HONEST -HONESTLY -HONESTY -HONEY -HONEYBEE -HONEYCOMB -HONEYCOMBED -HONEYDEW -HONEYMOON -HONEYMOONED -HONEYMOONER -HONEYMOONERS -HONEYMOONING -HONEYMOONS -HONEYSUCKLE -HONEYWELL -HONING -HONOLULU -HONOR -HONORABLE -HONORABLENESS -HONORABLY -HONORARIES -HONORARIUM -HONORARY -HONORED -HONORER -HONORING -HONORS -HONSHU -HOOD -HOODED -HOODLUM -HOODS -HOODWINK -HOODWINKED -HOODWINKING -HOODWINKS -HOOF -HOOFS -HOOK -HOOKED -HOOKER -HOOKERS -HOOKING -HOOKS -HOOKUP -HOOKUPS -HOOP -HOOPER -HOOPS -HOOSIER -HOOSIERIZE -HOOSIERIZES -HOOT -HOOTED -HOOTER -HOOTING -HOOTS -HOOVER -HOOVERIZE -HOOVERIZES -HOOVES -HOP -HOPE -HOPED -HOPEFUL -HOPEFULLY -HOPEFULNESS -HOPEFULS -HOPELESS -HOPELESSLY -HOPELESSNESS -HOPES -HOPI -HOPING -HOPKINS -HOPKINSIAN -HOPPER -HOPPERS -HOPPING -HOPS -HORACE -HORATIO -HORDE -HORDES -HORIZON -HORIZONS -HORIZONTAL -HORIZONTALLY -HORMONE -HORMONES -HORN -HORNBLOWER -HORNED -HORNET -HORNETS -HORNS -HORNY -HOROWITZ -HORRENDOUS -HORRENDOUSLY -HORRIBLE -HORRIBLENESS -HORRIBLY -HORRID -HORRIDLY -HORRIFIED -HORRIFIES -HORRIFY -HORRIFYING -HORROR -HORRORS -HORSE -HORSEBACK -HORSEFLESH -HORSEFLY -HORSEMAN -HORSEPLAY -HORSEPOWER -HORSES -HORSESHOE -HORSESHOER -HORTICULTURE -HORTON -HORUS -HOSE -HOSES -HOSPITABLE -HOSPITABLY -HOSPITAL -HOSPITALITY -HOSPITALIZE -HOSPITALIZED -HOSPITALIZES -HOSPITALIZING -HOSPITALS -HOST -HOSTAGE -HOSTAGES -HOSTED -HOSTESS -HOSTESSES -HOSTILE -HOSTILELY -HOSTILITIES -HOSTILITY -HOSTING -HOSTS -HOT -HOTEL -HOTELS -HOTLY -HOTNESS -HOTTENTOT -HOTTER -HOTTEST -HOUDAILLE -HOUDINI -HOUGHTON -HOUND -HOUNDED -HOUNDING -HOUNDS -HOUR -HOURGLASS -HOURLY -HOURS -HOUSE -HOUSEBOAT -HOUSEBROKEN -HOUSED -HOUSEFLIES -HOUSEFLY -HOUSEHOLD -HOUSEHOLDER -HOUSEHOLDERS -HOUSEHOLDS -HOUSEKEEPER -HOUSEKEEPERS -HOUSEKEEPING -HOUSES -HOUSETOP -HOUSETOPS -HOUSEWIFE -HOUSEWIFELY -HOUSEWIVES -HOUSEWORK -HOUSING -HOUSTON -HOVEL -HOVELS -HOVER -HOVERED -HOVERING -HOVERS -HOW -HOWARD -HOWE -HOWELL -HOWEVER -HOWL -HOWLED -HOWLER -HOWLING -HOWLS -HOYT -HROTHGAR -HUB -HUBBARD -HUBBELL -HUBER -HUBERT -HUBRIS -HUBS -HUCK -HUDDLE -HUDDLED -HUDDLING -HUDSON -HUE -HUES -HUEY -HUFFMAN -HUG -HUGE -HUGELY -HUGENESS -HUGGING -HUGGINS -HUGH -HUGHES -HUGO -HUH -HULL -HULLS -HUM -HUMAN -HUMANE -HUMANELY -HUMANENESS -HUMANITARIAN -HUMANITIES -HUMANITY -HUMANLY -HUMANNESS -HUMANS -HUMBLE -HUMBLED -HUMBLENESS -HUMBLER -HUMBLEST -HUMBLING -HUMBLY -HUMBOLDT -HUMBUG -HUME -HUMERUS -HUMID -HUMIDIFICATION -HUMIDIFIED -HUMIDIFIER -HUMIDIFIERS -HUMIDIFIES -HUMIDIFY -HUMIDIFYING -HUMIDITY -HUMIDLY -HUMILIATE -HUMILIATED -HUMILIATES -HUMILIATING -HUMILIATION -HUMILIATIONS -HUMILITY -HUMMED -HUMMEL -HUMMING -HUMMINGBIRD -HUMOR -HUMORED -HUMORER -HUMORERS -HUMORING -HUMOROUS -HUMOROUSLY -HUMOROUSNESS -HUMORS -HUMP -HUMPBACK -HUMPED -HUMPHREY -HUMPTY -HUMS -HUN -HUNCH -HUNCHED -HUNCHES -HUNDRED -HUNDREDFOLD -HUNDREDS -HUNDREDTH -HUNG -HUNGARIAN -HUNGARY -HUNGER -HUNGERED -HUNGERING -HUNGERS -HUNGRIER -HUNGRIEST -HUNGRILY -HUNGRY -HUNK -HUNKS -HUNS -HUNT -HUNTED -HUNTER -HUNTERS -HUNTING -HUNTINGTON -HUNTLEY -HUNTS -HUNTSMAN -HUNTSVILLE -HURD -HURDLE -HURL -HURLED -HURLER -HURLERS -HURLING -HURON -HURONS -HURRAH -HURRICANE -HURRICANES -HURRIED -HURRIEDLY -HURRIES -HURRY -HURRYING -HURST -HURT -HURTING -HURTLE -HURTLING -HURTS -HURWITZ -HUSBAND -HUSBANDRY -HUSBANDS -HUSH -HUSHED -HUSHES -HUSHING -HUSK -HUSKED -HUSKER -HUSKINESS -HUSKING -HUSKS -HUSKY -HUSTLE -HUSTLED -HUSTLER -HUSTLES -HUSTLING -HUSTON -HUT -HUTCH -HUTCHINS -HUTCHINSON -HUTCHISON -HUTS -HUXLEY -HUXTABLE -HYACINTH -HYADES -HYANNIS -HYBRID -HYDE -HYDRA -HYDRANT -HYDRAULIC -HYDRO -HYDRODYNAMIC -HYDRODYNAMICS -HYDROGEN -HYDROGENS -HYENA -HYGIENE -HYMAN -HYMEN -HYMN -HYMNS -HYPER -HYPERBOLA -HYPERBOLIC -HYPERTEXT -HYPHEN -HYPHENATE -HYPHENS -HYPNOSIS -HYPNOTIC -HYPOCRISIES -HYPOCRISY -HYPOCRITE -HYPOCRITES -HYPODERMIC -HYPODERMICS -HYPOTHESES -HYPOTHESIS -HYPOTHESIZE -HYPOTHESIZED -HYPOTHESIZER -HYPOTHESIZES -HYPOTHESIZING -HYPOTHETICAL -HYPOTHETICALLY -HYSTERESIS -HYSTERICAL -HYSTERICALLY -IAN -IBERIA -IBERIAN -IBEX -IBID -IBIS -IBN -IBSEN -ICARUS -ICE -ICEBERG -ICEBERGS -ICEBOX -ICED -ICELAND -ICELANDIC -ICES -ICICLE -ICINESS -ICING -ICINGS -ICON -ICONOCLASM -ICONOCLAST -ICONS -ICOSAHEDRA -ICOSAHEDRAL -ICOSAHEDRON -ICY -IDA -IDAHO -IDEA -IDEAL -IDEALISM -IDEALISTIC -IDEALIZATION -IDEALIZATIONS -IDEALIZE -IDEALIZED -IDEALIZES -IDEALIZING -IDEALLY -IDEALS -IDEAS -IDEM -IDEMPOTENCY -IDEMPOTENT -IDENTICAL -IDENTICALLY -IDENTIFIABLE -IDENTIFIABLY -IDENTIFICATION -IDENTIFICATIONS -IDENTIFIED -IDENTIFIER -IDENTIFIERS -IDENTIFIES -IDENTIFY -IDENTIFYING -IDENTITIES -IDENTITY -IDEOLOGICAL -IDEOLOGICALLY -IDEOLOGY -IDIOCY -IDIOM -IDIOSYNCRASIES -IDIOSYNCRASY -IDIOSYNCRATIC -IDIOT -IDIOTIC -IDIOTS -IDLE -IDLED -IDLENESS -IDLER -IDLERS -IDLES -IDLEST -IDLING -IDLY -IDOL -IDOLATRY -IDOLS -IFNI -IGLOO -IGNITE -IGNITION -IGNOBLE -IGNOMINIOUS -IGNORAMUS -IGNORANCE -IGNORANT -IGNORANTLY -IGNORE -IGNORED -IGNORES -IGNORING -IGOR -IKE -ILIAD -ILIADIZE -ILIADIZES -ILL -ILLEGAL -ILLEGALITIES -ILLEGALITY -ILLEGALLY -ILLEGITIMATE -ILLICIT -ILLICITLY -ILLINOIS -ILLITERACY -ILLITERATE -ILLNESS -ILLNESSES -ILLOGICAL -ILLOGICALLY -ILLS -ILLUMINATE -ILLUMINATED -ILLUMINATES -ILLUMINATING -ILLUMINATION -ILLUMINATIONS -ILLUSION -ILLUSIONS -ILLUSIVE -ILLUSIVELY -ILLUSORY -ILLUSTRATE -ILLUSTRATED -ILLUSTRATES -ILLUSTRATING -ILLUSTRATION -ILLUSTRATIONS -ILLUSTRATIVE -ILLUSTRATIVELY -ILLUSTRATOR -ILLUSTRATORS -ILLUSTRIOUS -ILLUSTRIOUSNESS -ILLY -ILONA -ILYUSHIN -IMAGE -IMAGEN -IMAGERY -IMAGES -IMAGINABLE -IMAGINABLY -IMAGINARY -IMAGINATION -IMAGINATIONS -IMAGINATIVE -IMAGINATIVELY -IMAGINE -IMAGINED -IMAGINES -IMAGING -IMAGINING -IMAGININGS -IMBALANCE -IMBALANCES -IMBECILE -IMBIBE -IMBRIUM -IMITATE -IMITATED -IMITATES -IMITATING -IMITATION -IMITATIONS -IMITATIVE -IMMACULATE -IMMACULATELY -IMMATERIAL -IMMATERIALLY -IMMATURE -IMMATURITY -IMMEDIACIES -IMMEDIACY -IMMEDIATE -IMMEDIATELY -IMMEMORIAL -IMMENSE -IMMENSELY -IMMERSE -IMMERSED -IMMERSES -IMMERSION -IMMIGRANT -IMMIGRANTS -IMMIGRATE -IMMIGRATED -IMMIGRATES -IMMIGRATING -IMMIGRATION -IMMINENT -IMMINENTLY -IMMODERATE -IMMODEST -IMMORAL -IMMORTAL -IMMORTALITY -IMMORTALLY -IMMOVABILITY -IMMOVABLE -IMMOVABLY -IMMUNE -IMMUNITIES -IMMUNITY -IMMUNIZATION -IMMUTABLE -IMP -IMPACT -IMPACTED -IMPACTING -IMPACTION -IMPACTOR -IMPACTORS -IMPACTS -IMPAIR -IMPAIRED -IMPAIRING -IMPAIRS -IMPALE -IMPART -IMPARTED -IMPARTIAL -IMPARTIALLY -IMPARTS -IMPASSE -IMPASSIVE -IMPATIENCE -IMPATIENT -IMPATIENTLY -IMPEACH -IMPEACHABLE -IMPEACHED -IMPEACHMENT -IMPECCABLE -IMPEDANCE -IMPEDANCES -IMPEDE -IMPEDED -IMPEDES -IMPEDIMENT -IMPEDIMENTS -IMPEDING -IMPEL -IMPELLED -IMPELLING -IMPEND -IMPENDING -IMPENETRABILITY -IMPENETRABLE -IMPENETRABLY -IMPERATIVE -IMPERATIVELY -IMPERATIVES -IMPERCEIVABLE -IMPERCEPTIBLE -IMPERFECT -IMPERFECTION -IMPERFECTIONS -IMPERFECTLY -IMPERIAL -IMPERIALISM -IMPERIALIST -IMPERIALISTS -IMPERIL -IMPERILED -IMPERIOUS -IMPERIOUSLY -IMPERMANENCE -IMPERMANENT -IMPERMEABLE -IMPERMISSIBLE -IMPERSONAL -IMPERSONALLY -IMPERSONATE -IMPERSONATED -IMPERSONATES -IMPERSONATING -IMPERSONATION -IMPERSONATIONS -IMPERTINENT -IMPERTINENTLY -IMPERVIOUS -IMPERVIOUSLY -IMPETUOUS -IMPETUOUSLY -IMPETUS -IMPINGE -IMPINGED -IMPINGES -IMPINGING -IMPIOUS -IMPLACABLE -IMPLANT -IMPLANTED -IMPLANTING -IMPLANTS -IMPLAUSIBLE -IMPLEMENT -IMPLEMENTABLE -IMPLEMENTATION -IMPLEMENTATIONS -IMPLEMENTED -IMPLEMENTER -IMPLEMENTING -IMPLEMENTOR -IMPLEMENTORS -IMPLEMENTS -IMPLICANT -IMPLICANTS -IMPLICATE -IMPLICATED -IMPLICATES -IMPLICATING -IMPLICATION -IMPLICATIONS -IMPLICIT -IMPLICITLY -IMPLICITNESS -IMPLIED -IMPLIES -IMPLORE -IMPLORED -IMPLORING -IMPLY -IMPLYING -IMPOLITE -IMPORT -IMPORTANCE -IMPORTANT -IMPORTANTLY -IMPORTATION -IMPORTED -IMPORTER -IMPORTERS -IMPORTING -IMPORTS -IMPOSE -IMPOSED -IMPOSES -IMPOSING -IMPOSITION -IMPOSITIONS -IMPOSSIBILITIES -IMPOSSIBILITY -IMPOSSIBLE -IMPOSSIBLY -IMPOSTOR -IMPOSTORS -IMPOTENCE -IMPOTENCY -IMPOTENT -IMPOUND -IMPOVERISH -IMPOVERISHED -IMPOVERISHMENT -IMPRACTICABLE -IMPRACTICAL -IMPRACTICALITY -IMPRACTICALLY -IMPRECISE -IMPRECISELY -IMPRECISION -IMPREGNABLE -IMPREGNATE -IMPRESS -IMPRESSED -IMPRESSER -IMPRESSES -IMPRESSIBLE -IMPRESSING -IMPRESSION -IMPRESSIONABLE -IMPRESSIONIST -IMPRESSIONISTIC -IMPRESSIONS -IMPRESSIVE -IMPRESSIVELY -IMPRESSIVENESS -IMPRESSMENT -IMPRIMATUR -IMPRINT -IMPRINTED -IMPRINTING -IMPRINTS -IMPRISON -IMPRISONED -IMPRISONING -IMPRISONMENT -IMPRISONMENTS -IMPRISONS -IMPROBABILITY -IMPROBABLE -IMPROMPTU -IMPROPER -IMPROPERLY -IMPROPRIETY -IMPROVE -IMPROVED -IMPROVEMENT -IMPROVEMENTS -IMPROVES -IMPROVING -IMPROVISATION -IMPROVISATIONAL -IMPROVISATIONS -IMPROVISE -IMPROVISED -IMPROVISER -IMPROVISERS -IMPROVISES -IMPROVISING -IMPRUDENT -IMPS -IMPUDENT -IMPUDENTLY -IMPUGN -IMPULSE -IMPULSES -IMPULSION -IMPULSIVE -IMPUNITY -IMPURE -IMPURITIES -IMPURITY -IMPUTE -IMPUTED -INABILITY -INACCESSIBLE -INACCURACIES -INACCURACY -INACCURATE -INACTION -INACTIVATE -INACTIVE -INACTIVITY -INADEQUACIES -INADEQUACY -INADEQUATE -INADEQUATELY -INADEQUATENESS -INADMISSIBILITY -INADMISSIBLE -INADVERTENT -INADVERTENTLY -INADVISABLE -INALIENABLE -INALTERABLE -INANE -INANIMATE -INANIMATELY -INANNA -INAPPLICABLE -INAPPROACHABLE -INAPPROPRIATE -INAPPROPRIATENESS -INASMUCH -INATTENTION -INAUDIBLE -INAUGURAL -INAUGURATE -INAUGURATED -INAUGURATING -INAUGURATION -INAUSPICIOUS -INBOARD -INBOUND -INBREED -INCA -INCALCULABLE -INCANDESCENT -INCANTATION -INCAPABLE -INCAPACITATE -INCAPACITATING -INCARCERATE -INCARNATION -INCARNATIONS -INCAS -INCENDIARIES -INCENDIARY -INCENSE -INCENSED -INCENSES -INCENTIVE -INCENTIVES -INCEPTION -INCESSANT -INCESSANTLY -INCEST -INCESTUOUS -INCH -INCHED -INCHES -INCHING -INCIDENCE -INCIDENT -INCIDENTAL -INCIDENTALLY -INCIDENTALS -INCIDENTS -INCINERATE -INCIPIENT -INCISIVE -INCITE -INCITED -INCITEMENT -INCITES -INCITING -INCLEMENT -INCLINATION -INCLINATIONS -INCLINE -INCLINED -INCLINES -INCLINING -INCLOSE -INCLOSED -INCLOSES -INCLOSING -INCLUDE -INCLUDED -INCLUDES -INCLUDING -INCLUSION -INCLUSIONS -INCLUSIVE -INCLUSIVELY -INCLUSIVENESS -INCOHERENCE -INCOHERENT -INCOHERENTLY -INCOME -INCOMES -INCOMING -INCOMMENSURABLE -INCOMMENSURATE -INCOMMUNICABLE -INCOMPARABLE -INCOMPARABLY -INCOMPATIBILITIES -INCOMPATIBILITY -INCOMPATIBLE -INCOMPATIBLY -INCOMPETENCE -INCOMPETENT -INCOMPETENTS -INCOMPLETE -INCOMPLETELY -INCOMPLETENESS -INCOMPREHENSIBILITY -INCOMPREHENSIBLE -INCOMPREHENSIBLY -INCOMPREHENSION -INCOMPRESSIBLE -INCOMPUTABLE -INCONCEIVABLE -INCONCLUSIVE -INCONGRUITY -INCONGRUOUS -INCONSEQUENTIAL -INCONSEQUENTIALLY -INCONSIDERABLE -INCONSIDERATE -INCONSIDERATELY -INCONSIDERATENESS -INCONSISTENCIES -INCONSISTENCY -INCONSISTENT -INCONSISTENTLY -INCONSPICUOUS -INCONTESTABLE -INCONTROVERTIBLE -INCONTROVERTIBLY -INCONVENIENCE -INCONVENIENCED -INCONVENIENCES -INCONVENIENCING -INCONVENIENT -INCONVENIENTLY -INCONVERTIBLE -INCORPORATE -INCORPORATED -INCORPORATES -INCORPORATING -INCORPORATION -INCORRECT -INCORRECTLY -INCORRECTNESS -INCORRIGIBLE -INCREASE -INCREASED -INCREASES -INCREASING -INCREASINGLY -INCREDIBLE -INCREDIBLY -INCREDULITY -INCREDULOUS -INCREDULOUSLY -INCREMENT -INCREMENTAL -INCREMENTALLY -INCREMENTED -INCREMENTER -INCREMENTING -INCREMENTS -INCRIMINATE -INCUBATE -INCUBATED -INCUBATES -INCUBATING -INCUBATION -INCUBATOR -INCUBATORS -INCULCATE -INCUMBENT -INCUR -INCURABLE -INCURRED -INCURRING -INCURS -INCURSION -INDEBTED -INDEBTEDNESS -INDECENT -INDECIPHERABLE -INDECISION -INDECISIVE -INDEED -INDEFATIGABLE -INDEFENSIBLE -INDEFINITE -INDEFINITELY -INDEFINITENESS -INDELIBLE -INDEMNIFY -INDEMNITY -INDENT -INDENTATION -INDENTATIONS -INDENTED -INDENTING -INDENTS -INDENTURE -INDEPENDENCE -INDEPENDENT -INDEPENDENTLY -INDESCRIBABLE -INDESTRUCTIBLE -INDETERMINACIES -INDETERMINACY -INDETERMINATE -INDETERMINATELY -INDEX -INDEXABLE -INDEXED -INDEXES -INDEXING -INDIA -INDIAN -INDIANA -INDIANAPOLIS -INDIANS -INDICATE -INDICATED -INDICATES -INDICATING -INDICATION -INDICATIONS -INDICATIVE -INDICATOR -INDICATORS -INDICES -INDICT -INDICTMENT -INDICTMENTS -INDIES -INDIFFERENCE -INDIFFERENT -INDIFFERENTLY -INDIGENOUS -INDIGENOUSLY -INDIGENOUSNESS -INDIGESTIBLE -INDIGESTION -INDIGNANT -INDIGNANTLY -INDIGNATION -INDIGNITIES -INDIGNITY -INDIGO -INDIRA -INDIRECT -INDIRECTED -INDIRECTING -INDIRECTION -INDIRECTIONS -INDIRECTLY -INDIRECTS -INDISCREET -INDISCRETION -INDISCRIMINATE -INDISCRIMINATELY -INDISPENSABILITY -INDISPENSABLE -INDISPENSABLY -INDISPUTABLE -INDISTINCT -INDISTINGUISHABLE -INDIVIDUAL -INDIVIDUALISM -INDIVIDUALISTIC -INDIVIDUALITY -INDIVIDUALIZE -INDIVIDUALIZED -INDIVIDUALIZES -INDIVIDUALIZING -INDIVIDUALLY -INDIVIDUALS -INDIVISIBILITY -INDIVISIBLE -INDO -INDOCHINA -INDOCHINESE -INDOCTRINATE -INDOCTRINATED -INDOCTRINATES -INDOCTRINATING -INDOCTRINATION -INDOEUROPEAN -INDOLENT -INDOLENTLY -INDOMITABLE -INDONESIA -INDONESIAN -INDOOR -INDOORS -INDUBITABLE -INDUCE -INDUCED -INDUCEMENT -INDUCEMENTS -INDUCER -INDUCES -INDUCING -INDUCT -INDUCTANCE -INDUCTANCES -INDUCTED -INDUCTEE -INDUCTING -INDUCTION -INDUCTIONS -INDUCTIVE -INDUCTIVELY -INDUCTOR -INDUCTORS -INDUCTS -INDULGE -INDULGED -INDULGENCE -INDULGENCES -INDULGENT -INDULGING -INDUS -INDUSTRIAL -INDUSTRIALISM -INDUSTRIALIST -INDUSTRIALISTS -INDUSTRIALIZATION -INDUSTRIALIZED -INDUSTRIALLY -INDUSTRIALS -INDUSTRIES -INDUSTRIOUS -INDUSTRIOUSLY -INDUSTRIOUSNESS -INDUSTRY -INDY -INEFFECTIVE -INEFFECTIVELY -INEFFECTIVENESS -INEFFECTUAL -INEFFICIENCIES -INEFFICIENCY -INEFFICIENT -INEFFICIENTLY -INELEGANT -INELIGIBLE -INEPT -INEQUALITIES -INEQUALITY -INEQUITABLE -INEQUITY -INERT -INERTIA -INERTIAL -INERTLY -INERTNESS -INESCAPABLE -INESCAPABLY -INESSENTIAL -INESTIMABLE -INEVITABILITIES -INEVITABILITY -INEVITABLE -INEVITABLY -INEXACT -INEXCUSABLE -INEXCUSABLY -INEXHAUSTIBLE -INEXORABLE -INEXORABLY -INEXPENSIVE -INEXPENSIVELY -INEXPERIENCE -INEXPERIENCED -INEXPLICABLE -INFALLIBILITY -INFALLIBLE -INFALLIBLY -INFAMOUS -INFAMOUSLY -INFAMY -INFANCY -INFANT -INFANTILE -INFANTRY -INFANTRYMAN -INFANTRYMEN -INFANTS -INFARCT -INFATUATE -INFEASIBLE -INFECT -INFECTED -INFECTING -INFECTION -INFECTIONS -INFECTIOUS -INFECTIOUSLY -INFECTIVE -INFECTS -INFER -INFERENCE -INFERENCES -INFERENTIAL -INFERIOR -INFERIORITY -INFERIORS -INFERNAL -INFERNALLY -INFERNO -INFERNOS -INFERRED -INFERRING -INFERS -INFERTILE -INFEST -INFESTED -INFESTING -INFESTS -INFIDEL -INFIDELITY -INFIDELS -INFIGHTING -INFILTRATE -INFINITE -INFINITELY -INFINITENESS -INFINITESIMAL -INFINITIVE -INFINITIVES -INFINITUDE -INFINITUM -INFINITY -INFIRM -INFIRMARY -INFIRMITY -INFIX -INFLAME -INFLAMED -INFLAMMABLE -INFLAMMATION -INFLAMMATORY -INFLATABLE -INFLATE -INFLATED -INFLATER -INFLATES -INFLATING -INFLATION -INFLATIONARY -INFLEXIBILITY -INFLEXIBLE -INFLICT -INFLICTED -INFLICTING -INFLICTS -INFLOW -INFLUENCE -INFLUENCED -INFLUENCES -INFLUENCING -INFLUENTIAL -INFLUENTIALLY -INFLUENZA -INFORM -INFORMAL -INFORMALITY -INFORMALLY -INFORMANT -INFORMANTS -INFORMATICA -INFORMATION -INFORMATIONAL -INFORMATIVE -INFORMATIVELY -INFORMED -INFORMER -INFORMERS -INFORMING -INFORMS -INFRA -INFRARED -INFRASTRUCTURE -INFREQUENT -INFREQUENTLY -INFRINGE -INFRINGED -INFRINGEMENT -INFRINGEMENTS -INFRINGES -INFRINGING -INFURIATE -INFURIATED -INFURIATES -INFURIATING -INFURIATION -INFUSE -INFUSED -INFUSES -INFUSING -INFUSION -INFUSIONS -INGENIOUS -INGENIOUSLY -INGENIOUSNESS -INGENUITY -INGENUOUS -INGERSOLL -INGEST -INGESTION -INGLORIOUS -INGOT -INGRAM -INGRATE -INGRATIATE -INGRATITUDE -INGREDIENT -INGREDIENTS -INGROWN -INHABIT -INHABITABLE -INHABITANCE -INHABITANT -INHABITANTS -INHABITED -INHABITING -INHABITS -INHALE -INHALED -INHALER -INHALES -INHALING -INHERE -INHERENT -INHERENTLY -INHERES -INHERIT -INHERITABLE -INHERITANCE -INHERITANCES -INHERITED -INHERITING -INHERITOR -INHERITORS -INHERITRESS -INHERITRESSES -INHERITRICES -INHERITRIX -INHERITS -INHIBIT -INHIBITED -INHIBITING -INHIBITION -INHIBITIONS -INHIBITOR -INHIBITORS -INHIBITORY -INHIBITS -INHOMOGENEITIES -INHOMOGENEITY -INHOMOGENEOUS -INHOSPITABLE -INHUMAN -INHUMANE -INIMICAL -INIMITABLE -INIQUITIES -INIQUITY -INITIAL -INITIALED -INITIALING -INITIALIZATION -INITIALIZATIONS -INITIALIZE -INITIALIZED -INITIALIZER -INITIALIZERS -INITIALIZES -INITIALIZING -INITIALLY -INITIALS -INITIATE -INITIATED -INITIATES -INITIATING -INITIATION -INITIATIONS -INITIATIVE -INITIATIVES -INITIATOR -INITIATORS -INJECT -INJECTED -INJECTING -INJECTION -INJECTIONS -INJECTIVE -INJECTS -INJUDICIOUS -INJUN -INJUNCTION -INJUNCTIONS -INJUNS -INJURE -INJURED -INJURES -INJURIES -INJURING -INJURIOUS -INJURY -INJUSTICE -INJUSTICES -INK -INKED -INKER -INKERS -INKING -INKINGS -INKLING -INKLINGS -INKS -INLAID -INLAND -INLAY -INLET -INLETS -INLINE -INMAN -INMATE -INMATES -INN -INNARDS -INNATE -INNATELY -INNER -INNERMOST -INNING -INNINGS -INNOCENCE -INNOCENT -INNOCENTLY -INNOCENTS -INNOCUOUS -INNOCUOUSLY -INNOCUOUSNESS -INNOVATE -INNOVATION -INNOVATIONS -INNOVATIVE -INNS -INNUENDO -INNUMERABILITY -INNUMERABLE -INNUMERABLY -INOCULATE -INOPERABLE -INOPERATIVE -INOPPORTUNE -INORDINATE -INORDINATELY -INORGANIC -INPUT -INPUTS -INQUEST -INQUIRE -INQUIRED -INQUIRER -INQUIRERS -INQUIRES -INQUIRIES -INQUIRING -INQUIRY -INQUISITION -INQUISITIONS -INQUISITIVE -INQUISITIVELY -INQUISITIVENESS -INROAD -INROADS -INSANE -INSANELY -INSANITY -INSATIABLE -INSCRIBE -INSCRIBED -INSCRIBES -INSCRIBING -INSCRIPTION -INSCRIPTIONS -INSCRUTABLE -INSECT -INSECTICIDE -INSECTS -INSECURE -INSECURELY -INSEMINATE -INSENSIBLE -INSENSITIVE -INSENSITIVELY -INSENSITIVITY -INSEPARABLE -INSERT -INSERTED -INSERTING -INSERTION -INSERTIONS -INSERTS -INSET -INSIDE -INSIDER -INSIDERS -INSIDES -INSIDIOUS -INSIDIOUSLY -INSIDIOUSNESS -INSIGHT -INSIGHTFUL -INSIGHTS -INSIGNIA -INSIGNIFICANCE -INSIGNIFICANT -INSINCERE -INSINCERITY -INSINUATE -INSINUATED -INSINUATES -INSINUATING -INSINUATION -INSINUATIONS -INSIPID -INSIST -INSISTED -INSISTENCE -INSISTENT -INSISTENTLY -INSISTING -INSISTS -INSOFAR -INSOLENCE -INSOLENT -INSOLENTLY -INSOLUBLE -INSOLVABLE -INSOLVENT -INSOMNIA -INSOMNIAC -INSPECT -INSPECTED -INSPECTING -INSPECTION -INSPECTIONS -INSPECTOR -INSPECTORS -INSPECTS -INSPIRATION -INSPIRATIONS -INSPIRE -INSPIRED -INSPIRER -INSPIRES -INSPIRING -INSTABILITIES -INSTABILITY -INSTALL -INSTALLATION -INSTALLATIONS -INSTALLED -INSTALLER -INSTALLERS -INSTALLING -INSTALLMENT -INSTALLMENTS -INSTALLS -INSTANCE -INSTANCES -INSTANT -INSTANTANEOUS -INSTANTANEOUSLY -INSTANTER -INSTANTIATE -INSTANTIATED -INSTANTIATES -INSTANTIATING -INSTANTIATION -INSTANTIATIONS -INSTANTLY -INSTANTS -INSTEAD -INSTIGATE -INSTIGATED -INSTIGATES -INSTIGATING -INSTIGATOR -INSTIGATORS -INSTILL -INSTINCT -INSTINCTIVE -INSTINCTIVELY -INSTINCTS -INSTINCTUAL -INSTITUTE -INSTITUTED -INSTITUTER -INSTITUTERS -INSTITUTES -INSTITUTING -INSTITUTION -INSTITUTIONAL -INSTITUTIONALIZE -INSTITUTIONALIZED -INSTITUTIONALIZES -INSTITUTIONALIZING -INSTITUTIONALLY -INSTITUTIONS -INSTRUCT -INSTRUCTED -INSTRUCTING -INSTRUCTION -INSTRUCTIONAL -INSTRUCTIONS -INSTRUCTIVE -INSTRUCTIVELY -INSTRUCTOR -INSTRUCTORS -INSTRUCTS -INSTRUMENT -INSTRUMENTAL -INSTRUMENTALIST -INSTRUMENTALISTS -INSTRUMENTALLY -INSTRUMENTALS -INSTRUMENTATION -INSTRUMENTED -INSTRUMENTING -INSTRUMENTS -INSUBORDINATE -INSUFFERABLE -INSUFFICIENT -INSUFFICIENTLY -INSULAR -INSULATE -INSULATED -INSULATES -INSULATING -INSULATION -INSULATOR -INSULATORS -INSULIN -INSULT -INSULTED -INSULTING -INSULTS -INSUPERABLE -INSUPPORTABLE -INSURANCE -INSURE -INSURED -INSURER -INSURERS -INSURES -INSURGENT -INSURGENTS -INSURING -INSURMOUNTABLE -INSURRECTION -INSURRECTIONS -INTACT -INTANGIBLE -INTANGIBLES -INTEGER -INTEGERS -INTEGRABLE -INTEGRAL -INTEGRALS -INTEGRAND -INTEGRATE -INTEGRATED -INTEGRATES -INTEGRATING -INTEGRATION -INTEGRATIONS -INTEGRATIVE -INTEGRITY -INTEL -INTELLECT -INTELLECTS -INTELLECTUAL -INTELLECTUALLY -INTELLECTUALS -INTELLIGENCE -INTELLIGENT -INTELLIGENTLY -INTELLIGENTSIA -INTELLIGIBILITY -INTELLIGIBLE -INTELLIGIBLY -INTELSAT -INTEMPERATE -INTEND -INTENDED -INTENDING -INTENDS -INTENSE -INTENSELY -INTENSIFICATION -INTENSIFIED -INTENSIFIER -INTENSIFIERS -INTENSIFIES -INTENSIFY -INTENSIFYING -INTENSITIES -INTENSITY -INTENSIVE -INTENSIVELY -INTENT -INTENTION -INTENTIONAL -INTENTIONALLY -INTENTIONED -INTENTIONS -INTENTLY -INTENTNESS -INTENTS -INTER -INTERACT -INTERACTED -INTERACTING -INTERACTION -INTERACTIONS -INTERACTIVE -INTERACTIVELY -INTERACTIVITY -INTERACTS -INTERCEPT -INTERCEPTED -INTERCEPTING -INTERCEPTION -INTERCEPTOR -INTERCEPTS -INTERCHANGE -INTERCHANGEABILITY -INTERCHANGEABLE -INTERCHANGEABLY -INTERCHANGED -INTERCHANGER -INTERCHANGES -INTERCHANGING -INTERCHANGINGS -INTERCHANNEL -INTERCITY -INTERCOM -INTERCOMMUNICATE -INTERCOMMUNICATED -INTERCOMMUNICATES -INTERCOMMUNICATING -INTERCOMMUNICATION -INTERCONNECT -INTERCONNECTED -INTERCONNECTING -INTERCONNECTION -INTERCONNECTIONS -INTERCONNECTS -INTERCONTINENTAL -INTERCOURSE -INTERDATA -INTERDEPENDENCE -INTERDEPENDENCIES -INTERDEPENDENCY -INTERDEPENDENT -INTERDICT -INTERDICTION -INTERDISCIPLINARY -INTEREST -INTERESTED -INTERESTING -INTERESTINGLY -INTERESTS -INTERFACE -INTERFACED -INTERFACER -INTERFACES -INTERFACING -INTERFERE -INTERFERED -INTERFERENCE -INTERFERENCES -INTERFERES -INTERFERING -INTERFERINGLY -INTERFEROMETER -INTERFEROMETRIC -INTERFEROMETRY -INTERFRAME -INTERGROUP -INTERIM -INTERIOR -INTERIORS -INTERJECT -INTERLACE -INTERLACED -INTERLACES -INTERLACING -INTERLEAVE -INTERLEAVED -INTERLEAVES -INTERLEAVING -INTERLINK -INTERLINKED -INTERLINKS -INTERLISP -INTERMEDIARY -INTERMEDIATE -INTERMEDIATES -INTERMINABLE -INTERMINGLE -INTERMINGLED -INTERMINGLES -INTERMINGLING -INTERMISSION -INTERMITTENT -INTERMITTENTLY -INTERMIX -INTERMIXED -INTERMODULE -INTERN -INTERNAL -INTERNALIZE -INTERNALIZED -INTERNALIZES -INTERNALIZING -INTERNALLY -INTERNALS -INTERNATIONAL -INTERNATIONALITY -INTERNATIONALLY -INTERNED -INTERNET -INTERNET -INTERNETWORK -INTERNING -INTERNS -INTERNSHIP -INTEROFFICE -INTERPERSONAL -INTERPLAY -INTERPOL -INTERPOLATE -INTERPOLATED -INTERPOLATES -INTERPOLATING -INTERPOLATION -INTERPOLATIONS -INTERPOSE -INTERPOSED -INTERPOSES -INTERPOSING -INTERPRET -INTERPRETABLE -INTERPRETATION -INTERPRETATIONS -INTERPRETED -INTERPRETER -INTERPRETERS -INTERPRETING -INTERPRETIVE -INTERPRETIVELY -INTERPRETS -INTERPROCESS -INTERRELATE -INTERRELATED -INTERRELATES -INTERRELATING -INTERRELATION -INTERRELATIONS -INTERRELATIONSHIP -INTERRELATIONSHIPS -INTERROGATE -INTERROGATED -INTERROGATES -INTERROGATING -INTERROGATION -INTERROGATIONS -INTERROGATIVE -INTERRUPT -INTERRUPTED -INTERRUPTIBLE -INTERRUPTING -INTERRUPTION -INTERRUPTIONS -INTERRUPTIVE -INTERRUPTS -INTERSECT -INTERSECTED -INTERSECTING -INTERSECTION -INTERSECTIONS -INTERSECTS -INTERSPERSE -INTERSPERSED -INTERSPERSES -INTERSPERSING -INTERSPERSION -INTERSTAGE -INTERSTATE -INTERTWINE -INTERTWINED -INTERTWINES -INTERTWINING -INTERVAL -INTERVALS -INTERVENE -INTERVENED -INTERVENES -INTERVENING -INTERVENTION -INTERVENTIONS -INTERVIEW -INTERVIEWED -INTERVIEWEE -INTERVIEWER -INTERVIEWERS -INTERVIEWING -INTERVIEWS -INTERWOVEN -INTESTATE -INTESTINAL -INTESTINE -INTESTINES -INTIMACY -INTIMATE -INTIMATED -INTIMATELY -INTIMATING -INTIMATION -INTIMATIONS -INTIMIDATE -INTIMIDATED -INTIMIDATES -INTIMIDATING -INTIMIDATION -INTO -INTOLERABLE -INTOLERABLY -INTOLERANCE -INTOLERANT -INTONATION -INTONATIONS -INTONE -INTOXICANT -INTOXICATE -INTOXICATED -INTOXICATING -INTOXICATION -INTRACTABILITY -INTRACTABLE -INTRACTABLY -INTRAGROUP -INTRALINE -INTRAMURAL -INTRAMUSCULAR -INTRANSIGENT -INTRANSITIVE -INTRANSITIVELY -INTRAOFFICE -INTRAPROCESS -INTRASTATE -INTRAVENOUS -INTREPID -INTRICACIES -INTRICACY -INTRICATE -INTRICATELY -INTRIGUE -INTRIGUED -INTRIGUES -INTRIGUING -INTRINSIC -INTRINSICALLY -INTRODUCE -INTRODUCED -INTRODUCES -INTRODUCING -INTRODUCTION -INTRODUCTIONS -INTRODUCTORY -INTROSPECT -INTROSPECTION -INTROSPECTIONS -INTROSPECTIVE -INTROVERT -INTROVERTED -INTRUDE -INTRUDED -INTRUDER -INTRUDERS -INTRUDES -INTRUDING -INTRUSION -INTRUSIONS -INTRUST -INTUBATE -INTUBATED -INTUBATES -INTUBATION -INTUITION -INTUITIONIST -INTUITIONS -INTUITIVE -INTUITIVELY -INUNDATE -INVADE -INVADED -INVADER -INVADERS -INVADES -INVADING -INVALID -INVALIDATE -INVALIDATED -INVALIDATES -INVALIDATING -INVALIDATION -INVALIDATIONS -INVALIDITIES -INVALIDITY -INVALIDLY -INVALIDS -INVALUABLE -INVARIABLE -INVARIABLY -INVARIANCE -INVARIANT -INVARIANTLY -INVARIANTS -INVASION -INVASIONS -INVECTIVE -INVENT -INVENTED -INVENTING -INVENTION -INVENTIONS -INVENTIVE -INVENTIVELY -INVENTIVENESS -INVENTOR -INVENTORIES -INVENTORS -INVENTORY -INVENTS -INVERNESS -INVERSE -INVERSELY -INVERSES -INVERSION -INVERSIONS -INVERT -INVERTEBRATE -INVERTEBRATES -INVERTED -INVERTER -INVERTERS -INVERTIBLE -INVERTING -INVERTS -INVEST -INVESTED -INVESTIGATE -INVESTIGATED -INVESTIGATES -INVESTIGATING -INVESTIGATION -INVESTIGATIONS -INVESTIGATIVE -INVESTIGATOR -INVESTIGATORS -INVESTIGATORY -INVESTING -INVESTMENT -INVESTMENTS -INVESTOR -INVESTORS -INVESTS -INVETERATE -INVIGORATE -INVINCIBLE -INVISIBILITY -INVISIBLE -INVISIBLY -INVITATION -INVITATIONS -INVITE -INVITED -INVITES -INVITING -INVOCABLE -INVOCATION -INVOCATIONS -INVOICE -INVOICED -INVOICES -INVOICING -INVOKE -INVOKED -INVOKER -INVOKES -INVOKING -INVOLUNTARILY -INVOLUNTARY -INVOLVE -INVOLVED -INVOLVEMENT -INVOLVEMENTS -INVOLVES -INVOLVING -INWARD -INWARDLY -INWARDNESS -INWARDS -IODINE -ION -IONIAN -IONIANS -IONICIZATION -IONICIZATIONS -IONICIZE -IONICIZES -IONOSPHERE -IONOSPHERIC -IONS -IOTA -IOWA -IRA -IRAN -IRANIAN -IRANIANS -IRANIZE -IRANIZES -IRAQ -IRAQI -IRAQIS -IRATE -IRATELY -IRATENESS -IRE -IRELAND -IRENE -IRES -IRIS -IRISH -IRISHIZE -IRISHIZES -IRISHMAN -IRISHMEN -IRK -IRKED -IRKING -IRKS -IRKSOME -IRMA -IRON -IRONED -IRONIC -IRONICAL -IRONICALLY -IRONIES -IRONING -IRONINGS -IRONS -IRONY -IROQUOIS -IRRADIATE -IRRATIONAL -IRRATIONALLY -IRRATIONALS -IRRAWADDY -IRRECONCILABLE -IRRECOVERABLE -IRREDUCIBLE -IRREDUCIBLY -IRREFLEXIVE -IRREFUTABLE -IRREGULAR -IRREGULARITIES -IRREGULARITY -IRREGULARLY -IRREGULARS -IRRELEVANCE -IRRELEVANCES -IRRELEVANT -IRRELEVANTLY -IRREPLACEABLE -IRREPRESSIBLE -IRREPRODUCIBILITY -IRREPRODUCIBLE -IRRESISTIBLE -IRRESPECTIVE -IRRESPECTIVELY -IRRESPONSIBLE -IRRESPONSIBLY -IRRETRIEVABLY -IRREVERENT -IRREVERSIBILITY -IRREVERSIBLE -IRREVERSIBLY -IRREVOCABLE -IRREVOCABLY -IRRIGATE -IRRIGATED -IRRIGATES -IRRIGATING -IRRIGATION -IRRITABLE -IRRITANT -IRRITATE -IRRITATED -IRRITATES -IRRITATING -IRRITATION -IRRITATIONS -IRVIN -IRVINE -IRVING -IRWIN -ISAAC -ISAACS -ISAACSON -ISABEL -ISABELLA -ISADORE -ISAIAH -ISFAHAN -ISING -ISIS -ISLAM -ISLAMABAD -ISLAMIC -ISLAMIZATION -ISLAMIZATIONS -ISLAMIZE -ISLAMIZES -ISLAND -ISLANDER -ISLANDERS -ISLANDIA -ISLANDS -ISLE -ISLES -ISLET -ISLETS -ISOLATE -ISOLATED -ISOLATES -ISOLATING -ISOLATION -ISOLATIONS -ISOLDE -ISOMETRIC -ISOMORPHIC -ISOMORPHICALLY -ISOMORPHISM -ISOMORPHISMS -ISOTOPE -ISOTOPES -ISRAEL -ISRAELI -ISRAELIS -ISRAELITE -ISRAELITES -ISRAELITIZE -ISRAELITIZES -ISSUANCE -ISSUE -ISSUED -ISSUER -ISSUERS -ISSUES -ISSUING -ISTANBUL -ISTHMUS -ISTVAN -ITALIAN -ITALIANIZATION -ITALIANIZATIONS -ITALIANIZE -ITALIANIZER -ITALIANIZERS -ITALIANIZES -ITALIANS -ITALIC -ITALICIZE -ITALICIZED -ITALICS -ITALY -ITCH -ITCHES -ITCHING -ITEL -ITEM -ITEMIZATION -ITEMIZATIONS -ITEMIZE -ITEMIZED -ITEMIZES -ITEMIZING -ITEMS -ITERATE -ITERATED -ITERATES -ITERATING -ITERATION -ITERATIONS -ITERATIVE -ITERATIVELY -ITERATOR -ITERATORS -ITHACA -ITHACAN -ITINERARIES -ITINERARY -ITO -ITS -ITSELF -IVAN -IVANHOE -IVERSON -IVIES -IVORY -IVY -IZAAK -IZVESTIA -JAB -JABBED -JABBING -JABLONSKY -JABS -JACK -JACKASS -JACKET -JACKETED -JACKETS -JACKIE -JACKING -JACKKNIFE -JACKMAN -JACKPOT -JACKSON -JACKSONIAN -JACKSONS -JACKSONVILLE -JACKY -JACOB -JACOBEAN -JACOBI -JACOBIAN -JACOBINIZE -JACOBITE -JACOBS -JACOBSEN -JACOBSON -JACOBUS -JACOBY -JACQUELINE -JACQUES -JADE -JADED -JAEGER -JAGUAR -JAIL -JAILED -JAILER -JAILERS -JAILING -JAILS -JAIME -JAKARTA -JAKE -JAKES -JAM -JAMAICA -JAMAICAN -JAMES -JAMESON -JAMESTOWN -JAMMED -JAMMING -JAMS -JANE -JANEIRO -JANESVILLE -JANET -JANICE -JANIS -JANITOR -JANITORS -JANOS -JANSEN -JANSENIST -JANUARIES -JANUARY -JANUS -JAPAN -JAPANESE -JAPANIZATION -JAPANIZATIONS -JAPANIZE -JAPANIZED -JAPANIZES -JAPANIZING -JAR -JARGON -JARRED -JARRING -JARRINGLY -JARS -JARVIN -JASON -JASTROW -JAUNDICE -JAUNT -JAUNTINESS -JAUNTS -JAUNTY -JAVA -JAVANESE -JAVELIN -JAVELINS -JAW -JAWBONE -JAWS -JAY -JAYCEE -JAYCEES -JAZZ -JAZZY -JEALOUS -JEALOUSIES -JEALOUSLY -JEALOUSY -JEAN -JEANNE -JEANNIE -JEANS -JED -JEEP -JEEPS -JEER -JEERS -JEFF -JEFFERSON -JEFFERSONIAN -JEFFERSONIANS -JEFFREY -JEHOVAH -JELLIES -JELLO -JELLY -JELLYFISH -JENKINS -JENNIE -JENNIFER -JENNINGS -JENNY -JENSEN -JEOPARDIZE -JEOPARDIZED -JEOPARDIZES -JEOPARDIZING -JEOPARDY -JEREMIAH -JEREMY -JERES -JERICHO -JERK -JERKED -JERKINESS -JERKING -JERKINGS -JERKS -JERKY -JEROBOAM -JEROME -JERRY -JERSEY -JERSEYS -JERUSALEM -JESSE -JESSICA -JESSIE -JESSY -JEST -JESTED -JESTER -JESTING -JESTS -JESUIT -JESUITISM -JESUITIZE -JESUITIZED -JESUITIZES -JESUITIZING -JESUITS -JESUS -JET -JETLINER -JETS -JETTED -JETTING -JEW -JEWEL -JEWELED -JEWELER -JEWELL -JEWELLED -JEWELRIES -JEWELRY -JEWELS -JEWETT -JEWISH -JEWISHNESS -JEWS -JIFFY -JIG -JIGS -JIGSAW -JILL -JIM -JIMENEZ -JIMMIE -JINGLE -JINGLED -JINGLING -JINNY -JITTER -JITTERBUG -JITTERY -JOAN -JOANNA -JOANNE -JOAQUIN -JOB -JOBREL -JOBS -JOCKEY -JOCKSTRAP -JOCUND -JODY -JOE -JOEL -JOES -JOG -JOGGING -JOGS -JOHANN -JOHANNA -JOHANNES -JOHANNESBURG -JOHANSEN -JOHANSON -JOHN -JOHNNIE -JOHNNY -JOHNS -JOHNSEN -JOHNSON -JOHNSTON -JOHNSTOWN -JOIN -JOINED -JOINER -JOINERS -JOINING -JOINS -JOINT -JOINTLY -JOINTS -JOKE -JOKED -JOKER -JOKERS -JOKES -JOKING -JOKINGLY -JOLIET -JOLLA -JOLLY -JOLT -JOLTED -JOLTING -JOLTS -JON -JONAS -JONATHAN -JONATHANIZATION -JONATHANIZATIONS -JONES -JONESES -JONQUIL -JOPLIN -JORDAN -JORDANIAN -JORGE -JORGENSEN -JORGENSON -JOSE -JOSEF -JOSEPH -JOSEPHINE -JOSEPHSON -JOSEPHUS -JOSHUA -JOSIAH -JOSTLE -JOSTLED -JOSTLES -JOSTLING -JOT -JOTS -JOTTED -JOTTING -JOULE -JOURNAL -JOURNALISM -JOURNALIST -JOURNALISTS -JOURNALIZE -JOURNALIZED -JOURNALIZES -JOURNALIZING -JOURNALS -JOURNEY -JOURNEYED -JOURNEYING -JOURNEYINGS -JOURNEYMAN -JOURNEYMEN -JOURNEYS -JOUST -JOUSTED -JOUSTING -JOUSTS -JOVANOVICH -JOVE -JOVIAL -JOVIAN -JOY -JOYCE -JOYFUL -JOYFULLY -JOYOUS -JOYOUSLY -JOYOUSNESS -JOYRIDE -JOYS -JOYSTICK -JUAN -JUANITA -JUBAL -JUBILEE -JUDAICA -JUDAISM -JUDAS -JUDD -JUDDER -JUDDERED -JUDDERING -JUDDERS -JUDE -JUDEA -JUDGE -JUDGED -JUDGES -JUDGING -JUDGMENT -JUDGMENTS -JUDICIAL -JUDICIARY -JUDICIOUS -JUDICIOUSLY -JUDITH -JUDO -JUDSON -JUDY -JUG -JUGGLE -JUGGLER -JUGGLERS -JUGGLES -JUGGLING -JUGOSLAVIA -JUGS -JUICE -JUICES -JUICIEST -JUICY -JUKES -JULES -JULIA -JULIAN -JULIE -JULIES -JULIET -JULIO -JULIUS -JULY -JUMBLE -JUMBLED -JUMBLES -JUMBO -JUMP -JUMPED -JUMPER -JUMPERS -JUMPING -JUMPS -JUMPY -JUNCTION -JUNCTIONS -JUNCTURE -JUNCTURES -JUNE -JUNEAU -JUNES -JUNG -JUNGIAN -JUNGLE -JUNGLES -JUNIOR -JUNIORS -JUNIPER -JUNK -JUNKER -JUNKERS -JUNKS -JUNKY -JUNO -JUNTA -JUPITER -JURA -JURAS -JURASSIC -JURE -JURIES -JURISDICTION -JURISDICTIONS -JURISPRUDENCE -JURIST -JUROR -JURORS -JURY -JUST -JUSTICE -JUSTICES -JUSTIFIABLE -JUSTIFIABLY -JUSTIFICATION -JUSTIFICATIONS -JUSTIFIED -JUSTIFIER -JUSTIFIERS -JUSTIFIES -JUSTIFY -JUSTIFYING -JUSTINE -JUSTINIAN -JUSTLY -JUSTNESS -JUT -JUTISH -JUTLAND -JUTTING -JUVENILE -JUVENILES -JUXTAPOSE -JUXTAPOSED -JUXTAPOSES -JUXTAPOSING -KABUKI -KABUL -KADDISH -KAFKA -KAFKAESQUE -KAHN -KAJAR -KALAMAZOO -KALI -KALMUK -KAMCHATKA -KAMIKAZE -KAMIKAZES -KAMPALA -KAMPUCHEA -KANARESE -KANE -KANGAROO -KANJI -KANKAKEE -KANNADA -KANSAS -KANT -KANTIAN -KAPLAN -KAPPA -KARACHI -KARAMAZOV -KARATE -KAREN -KARL -KAROL -KARP -KASHMIR -KASKASKIA -KATE -KATHARINE -KATHERINE -KATHLEEN -KATHY -KATIE -KATMANDU -KATOWICE -KATZ -KAUFFMAN -KAUFMAN -KAY -KEATON -KEATS -KEEGAN -KEEL -KEELED -KEELING -KEELS -KEEN -KEENAN -KEENER -KEENEST -KEENLY -KEENNESS -KEEP -KEEPER -KEEPERS -KEEPING -KEEPS -KEITH -KELLER -KELLEY -KELLOGG -KELLY -KELSEY -KELVIN -KEMP -KEN -KENDALL -KENILWORTH -KENNAN -KENNECOTT -KENNEDY -KENNEL -KENNELS -KENNETH -KENNEY -KENNING -KENNY -KENOSHA -KENSINGTON -KENT -KENTON -KENTUCKY -KENYA -KENYON -KEPLER -KEPT -KERCHIEF -KERCHIEFS -KERMIT -KERN -KERNEL -KERNELS -KERNIGHAN -KEROSENE -KEROUAC -KERR -KESSLER -KETCHUP -KETTERING -KETTLE -KETTLES -KEVIN -KEWASKUM -KEWAUNEE -KEY -KEYBOARD -KEYBOARDS -KEYED -KEYES -KEYHOLE -KEYING -KEYNES -KEYNESIAN -KEYNOTE -KEYPAD -KEYPADS -KEYS -KEYSTROKE -KEYSTROKES -KEYWORD -KEYWORDS -KHARTOUM -KHMER -KHRUSHCHEV -KHRUSHCHEVS -KICK -KICKAPOO -KICKED -KICKER -KICKERS -KICKING -KICKOFF -KICKS -KID -KIDDE -KIDDED -KIDDIE -KIDDING -KIDNAP -KIDNAPPER -KIDNAPPERS -KIDNAPPING -KIDNAPPINGS -KIDNAPS -KIDNEY -KIDNEYS -KIDS -KIEFFER -KIEL -KIEV -KIEWIT -KIGALI -KIKUYU -KILGORE -KILIMANJARO -KILL -KILLEBREW -KILLED -KILLER -KILLERS -KILLING -KILLINGLY -KILLINGS -KILLJOY -KILLS -KILOBIT -KILOBITS -KILOBLOCK -KILOBYTE -KILOBYTES -KILOGRAM -KILOGRAMS -KILOHERTZ -KILOHM -KILOJOULE -KILOMETER -KILOMETERS -KILOTON -KILOVOLT -KILOWATT -KILOWORD -KIM -KIMBALL -KIMBERLY -KIMONO -KIN -KIND -KINDER -KINDERGARTEN -KINDEST -KINDHEARTED -KINDLE -KINDLED -KINDLES -KINDLING -KINDLY -KINDNESS -KINDRED -KINDS -KINETIC -KING -KINGDOM -KINGDOMS -KINGLY -KINGPIN -KINGS -KINGSBURY -KINGSLEY -KINGSTON -KINGSTOWN -KINGWOOD -KINK -KINKY -KINNEY -KINNICKINNIC -KINSEY -KINSHASHA -KINSHIP -KINSMAN -KIOSK -KIOWA -KIPLING -KIRBY -KIRCHNER -KIRCHOFF -KIRK -KIRKLAND -KIRKPATRICK -KIRKWOOD -KIROV -KISS -KISSED -KISSER -KISSERS -KISSES -KISSING -KIT -KITAKYUSHU -KITCHEN -KITCHENETTE -KITCHENS -KITE -KITED -KITES -KITING -KITS -KITTEN -KITTENISH -KITTENS -KITTY -KIWANIS -KLAN -KLAUS -KLAXON -KLEIN -KLEINROCK -KLINE -KLUDGE -KLUDGES -KLUX -KLYSTRON -KNACK -KNAPP -KNAPSACK -KNAPSACKS -KNAUER -KNAVE -KNAVES -KNEAD -KNEADS -KNEE -KNEECAP -KNEED -KNEEING -KNEEL -KNEELED -KNEELING -KNEELS -KNEES -KNELL -KNELLS -KNELT -KNEW -KNICKERBOCKER -KNICKERBOCKERS -KNIFE -KNIFED -KNIFES -KNIFING -KNIGHT -KNIGHTED -KNIGHTHOOD -KNIGHTING -KNIGHTLY -KNIGHTS -KNIGHTSBRIDGE -KNIT -KNITS -KNIVES -KNOB -KNOBELOCH -KNOBS -KNOCK -KNOCKDOWN -KNOCKED -KNOCKER -KNOCKERS -KNOCKING -KNOCKOUT -KNOCKS -KNOLL -KNOLLS -KNOSSOS -KNOT -KNOTS -KNOTT -KNOTTED -KNOTTING -KNOW -KNOWABLE -KNOWER -KNOWHOW -KNOWING -KNOWINGLY -KNOWLEDGE -KNOWLEDGEABLE -KNOWLES -KNOWLTON -KNOWN -KNOWS -KNOX -KNOXVILLE -KNUCKLE -KNUCKLED -KNUCKLES -KNUDSEN -KNUDSON -KNUTH -KNUTSEN -KNUTSON -KOALA -KOBAYASHI -KOCH -KOCHAB -KODACHROME -KODAK -KODIAK -KOENIG -KOENIGSBERG -KOHLER -KONG -KONRAD -KOPPERS -KORAN -KOREA -KOREAN -KOREANS -KOSHER -KOVACS -KOWALEWSKI -KOWALSKI -KOWLOON -KOWTOW -KRAEMER -KRAKATOA -KRAKOW -KRAMER -KRAUSE -KREBS -KREMLIN -KRESGE -KRIEGER -KRISHNA -KRISTIN -KRONECKER -KRUEGER -KRUGER -KRUSE -KUALA -KUDO -KUENNING -KUHN -KUMAR -KURD -KURDISH -KURT -KUWAIT -KUWAITI -KYOTO -LAB -LABAN -LABEL -LABELED -LABELING -LABELLED -LABELLER -LABELLERS -LABELLING -LABELS -LABOR -LABORATORIES -LABORATORY -LABORED -LABORER -LABORERS -LABORING -LABORINGS -LABORIOUS -LABORIOUSLY -LABORS -LABRADOR -LABS -LABYRINTH -LABYRINTHS -LAC -LACE -LACED -LACERATE -LACERATED -LACERATES -LACERATING -LACERATION -LACERATIONS -LACERTA -LACES -LACEY -LACHESIS -LACING -LACK -LACKAWANNA -LACKED -LACKEY -LACKING -LACKS -LACQUER -LACQUERED -LACQUERS -LACROSSE -LACY -LAD -LADDER -LADEN -LADIES -LADING -LADLE -LADS -LADY -LADYLIKE -LAFAYETTE -LAG -LAGER -LAGERS -LAGOON -LAGOONS -LAGOS -LAGRANGE -LAGRANGIAN -LAGS -LAGUERRE -LAGUNA -LAHORE -LAID -LAIDLAW -LAIN -LAIR -LAIRS -LAISSEZ -LAKE -LAKEHURST -LAKES -LAKEWOOD -LAMAR -LAMARCK -LAMB -LAMBDA -LAMBDAS -LAMBERT -LAMBS -LAME -LAMED -LAMELY -LAMENESS -LAMENT -LAMENTABLE -LAMENTATION -LAMENTATIONS -LAMENTED -LAMENTING -LAMENTS -LAMES -LAMINAR -LAMING -LAMP -LAMPLIGHT -LAMPOON -LAMPORT -LAMPREY -LAMPS -LANA -LANCASHIRE -LANCASTER -LANCE -LANCED -LANCELOT -LANCER -LANCES -LAND -LANDED -LANDER -LANDERS -LANDFILL -LANDING -LANDINGS -LANDIS -LANDLADIES -LANDLADY -LANDLORD -LANDLORDS -LANDMARK -LANDMARKS -LANDOWNER -LANDOWNERS -LANDS -LANDSCAPE -LANDSCAPED -LANDSCAPES -LANDSCAPING -LANDSLIDE -LANDWEHR -LANE -LANES -LANG -LANGE -LANGELAND -LANGFORD -LANGLEY -LANGMUIR -LANGUAGE -LANGUAGES -LANGUID -LANGUIDLY -LANGUIDNESS -LANGUISH -LANGUISHED -LANGUISHES -LANGUISHING -LANKA -LANSING -LANTERN -LANTERNS -LAO -LAOCOON -LAOS -LAOTIAN -LAOTIANS -LAP -LAPEL -LAPELS -LAPLACE -LAPLACIAN -LAPPING -LAPS -LAPSE -LAPSED -LAPSES -LAPSING -LARAMIE -LARD -LARDER -LAREDO -LARES -LARGE -LARGELY -LARGENESS -LARGER -LARGEST -LARK -LARKIN -LARKS -LARRY -LARS -LARSEN -LARSON -LARVA -LARVAE -LARYNX -LASCIVIOUS -LASER -LASERS -LASH -LASHED -LASHES -LASHING -LASHINGS -LASS -LASSES -LASSO -LAST -LASTED -LASTING -LASTLY -LASTS -LASZLO -LATCH -LATCHED -LATCHES -LATCHING -LATE -LATELY -LATENCY -LATENESS -LATENT -LATER -LATERAL -LATERALLY -LATERAN -LATEST -LATEX -LATHE -LATHROP -LATIN -LATINATE -LATINITY -LATINIZATION -LATINIZATIONS -LATINIZE -LATINIZED -LATINIZER -LATINIZERS -LATINIZES -LATINIZING -LATITUDE -LATITUDES -LATRINE -LATRINES -LATROBE -LATTER -LATTERLY -LATTICE -LATTICES -LATTIMER -LATVIA -LAUDABLE -LAUDERDALE -LAUE -LAUGH -LAUGHABLE -LAUGHABLY -LAUGHED -LAUGHING -LAUGHINGLY -LAUGHINGSTOCK -LAUGHLIN -LAUGHS -LAUGHTER -LAUNCH -LAUNCHED -LAUNCHER -LAUNCHES -LAUNCHING -LAUNCHINGS -LAUNDER -LAUNDERED -LAUNDERER -LAUNDERING -LAUNDERINGS -LAUNDERS -LAUNDROMAT -LAUNDROMATS -LAUNDRY -LAUREATE -LAUREL -LAURELS -LAUREN -LAURENCE -LAURENT -LAURENTIAN -LAURIE -LAUSANNE -LAVA -LAVATORIES -LAVATORY -LAVENDER -LAVISH -LAVISHED -LAVISHING -LAVISHLY -LAVOISIER -LAW -LAWBREAKER -LAWFORD -LAWFUL -LAWFULLY -LAWGIVER -LAWLESS -LAWLESSNESS -LAWN -LAWNS -LAWRENCE -LAWRENCEVILLE -LAWS -LAWSON -LAWSUIT -LAWSUITS -LAWYER -LAWYERS -LAX -LAXATIVE -LAY -LAYER -LAYERED -LAYERING -LAYERS -LAYING -LAYMAN -LAYMEN -LAYOFF -LAYOFFS -LAYOUT -LAYOUTS -LAYS -LAYTON -LAZARUS -LAZED -LAZIER -LAZIEST -LAZILY -LAZINESS -LAZING -LAZY -LAZYBONES -LEAD -LEADED -LEADEN -LEADER -LEADERS -LEADERSHIP -LEADERSHIPS -LEADING -LEADINGS -LEADS -LEAF -LEAFED -LEAFIEST -LEAFING -LEAFLESS -LEAFLET -LEAFLETS -LEAFY -LEAGUE -LEAGUED -LEAGUER -LEAGUERS -LEAGUES -LEAK -LEAKAGE -LEAKAGES -LEAKED -LEAKING -LEAKS -LEAKY -LEAN -LEANDER -LEANED -LEANER -LEANEST -LEANING -LEANNESS -LEANS -LEAP -LEAPED -LEAPFROG -LEAPING -LEAPS -LEAPT -LEAR -LEARN -LEARNED -LEARNER -LEARNERS -LEARNING -LEARNS -LEARY -LEASE -LEASED -LEASES -LEASH -LEASHES -LEASING -LEAST -LEATHER -LEATHERED -LEATHERN -LEATHERNECK -LEATHERS -LEAVE -LEAVED -LEAVEN -LEAVENED -LEAVENING -LEAVENWORTH -LEAVES -LEAVING -LEAVINGS -LEBANESE -LEBANON -LEBESGUE -LECHERY -LECTURE -LECTURED -LECTURER -LECTURERS -LECTURES -LECTURING -LED -LEDGE -LEDGER -LEDGERS -LEDGES -LEE -LEECH -LEECHES -LEEDS -LEEK -LEER -LEERY -LEES -LEEUWENHOEK -LEEWARD -LEEWAY -LEFT -LEFTIST -LEFTISTS -LEFTMOST -LEFTOVER -LEFTOVERS -LEFTWARD -LEG -LEGACIES -LEGACY -LEGAL -LEGALITY -LEGALIZATION -LEGALIZE -LEGALIZED -LEGALIZES -LEGALIZING -LEGALLY -LEGEND -LEGENDARY -LEGENDRE -LEGENDS -LEGER -LEGERS -LEGGED -LEGGINGS -LEGIBILITY -LEGIBLE -LEGIBLY -LEGION -LEGIONS -LEGISLATE -LEGISLATED -LEGISLATES -LEGISLATING -LEGISLATION -LEGISLATIVE -LEGISLATOR -LEGISLATORS -LEGISLATURE -LEGISLATURES -LEGITIMACY -LEGITIMATE -LEGITIMATELY -LEGS -LEGUME -LEHIGH -LEHMAN -LEIBNIZ -LEIDEN -LEIGH -LEIGHTON -LEILA -LEIPZIG -LEISURE -LEISURELY -LELAND -LEMKE -LEMMA -LEMMAS -LEMMING -LEMMINGS -LEMON -LEMONADE -LEMONS -LEMUEL -LEN -LENA -LEND -LENDER -LENDERS -LENDING -LENDS -LENGTH -LENGTHEN -LENGTHENED -LENGTHENING -LENGTHENS -LENGTHLY -LENGTHS -LENGTHWISE -LENGTHY -LENIENCY -LENIENT -LENIENTLY -LENIN -LENINGRAD -LENINISM -LENINIST -LENNOX -LENNY -LENORE -LENS -LENSES -LENT -LENTEN -LENTIL -LENTILS -LEO -LEON -LEONA -LEONARD -LEONARDO -LEONE -LEONID -LEOPARD -LEOPARDS -LEOPOLD -LEOPOLDVILLE -LEPER -LEPROSY -LEROY -LESBIAN -LESBIANS -LESLIE -LESOTHO -LESS -LESSEN -LESSENED -LESSENING -LESSENS -LESSER -LESSON -LESSONS -LESSOR -LEST -LESTER -LET -LETHAL -LETHE -LETITIA -LETS -LETTER -LETTERED -LETTERER -LETTERHEAD -LETTERING -LETTERS -LETTING -LETTUCE -LEUKEMIA -LEV -LEVEE -LEVEES -LEVEL -LEVELED -LEVELER -LEVELING -LEVELLED -LEVELLER -LEVELLEST -LEVELLING -LEVELLY -LEVELNESS -LEVELS -LEVER -LEVERAGE -LEVERS -LEVI -LEVIABLE -LEVIED -LEVIES -LEVIN -LEVINE -LEVIS -LEVITICUS -LEVITT -LEVITY -LEVY -LEVYING -LEW -LEWD -LEWDLY -LEWDNESS -LEWELLYN -LEXICAL -LEXICALLY -LEXICOGRAPHIC -LEXICOGRAPHICAL -LEXICOGRAPHICALLY -LEXICON -LEXICONS -LEXINGTON -LEYDEN -LIABILITIES -LIABILITY -LIABLE -LIAISON -LIAISONS -LIAR -LIARS -LIBEL -LIBELOUS -LIBERACE -LIBERAL -LIBERALIZE -LIBERALIZED -LIBERALIZES -LIBERALIZING -LIBERALLY -LIBERALS -LIBERATE -LIBERATED -LIBERATES -LIBERATING -LIBERATION -LIBERATOR -LIBERATORS -LIBERIA -LIBERTARIAN -LIBERTIES -LIBERTY -LIBIDO -LIBRARIAN -LIBRARIANS -LIBRARIES -LIBRARY -LIBRETTO -LIBREVILLE -LIBYA -LIBYAN -LICE -LICENSE -LICENSED -LICENSEE -LICENSES -LICENSING -LICENSOR -LICENTIOUS -LICHEN -LICHENS -LICHTER -LICK -LICKED -LICKING -LICKS -LICORICE -LID -LIDS -LIE -LIEBERMAN -LIECHTENSTEIN -LIED -LIEGE -LIEN -LIENS -LIES -LIEU -LIEUTENANT -LIEUTENANTS -LIFE -LIFEBLOOD -LIFEBOAT -LIFEGUARD -LIFELESS -LIFELESSNESS -LIFELIKE -LIFELONG -LIFER -LIFESPAN -LIFESTYLE -LIFESTYLES -LIFETIME -LIFETIMES -LIFT -LIFTED -LIFTER -LIFTERS -LIFTING -LIFTS -LIGAMENT -LIGATURE -LIGGET -LIGGETT -LIGHT -LIGHTED -LIGHTEN -LIGHTENS -LIGHTER -LIGHTERS -LIGHTEST -LIGHTFACE -LIGHTHEARTED -LIGHTHOUSE -LIGHTHOUSES -LIGHTING -LIGHTLY -LIGHTNESS -LIGHTNING -LIGHTNINGS -LIGHTS -LIGHTWEIGHT -LIKE -LIKED -LIKELIER -LIKELIEST -LIKELIHOOD -LIKELIHOODS -LIKELINESS -LIKELY -LIKEN -LIKENED -LIKENESS -LIKENESSES -LIKENING -LIKENS -LIKES -LIKEWISE -LIKING -LILA -LILAC -LILACS -LILIAN -LILIES -LILLIAN -LILLIPUT -LILLIPUTIAN -LILLIPUTIANIZE -LILLIPUTIANIZES -LILLY -LILY -LIMA -LIMAN -LIMB -LIMBER -LIMBO -LIMBS -LIME -LIMELIGHT -LIMERICK -LIMES -LIMESTONE -LIMIT -LIMITABILITY -LIMITABLY -LIMITATION -LIMITATIONS -LIMITED -LIMITER -LIMITERS -LIMITING -LIMITLESS -LIMITS -LIMOUSINE -LIMP -LIMPED -LIMPING -LIMPLY -LIMPNESS -LIMPS -LIN -LINCOLN -LIND -LINDA -LINDBERG -LINDBERGH -LINDEN -LINDHOLM -LINDQUIST -LINDSAY -LINDSEY -LINDSTROM -LINDY -LINE -LINEAR -LINEARITIES -LINEARITY -LINEARIZABLE -LINEARIZE -LINEARIZED -LINEARIZES -LINEARIZING -LINEARLY -LINED -LINEN -LINENS -LINER -LINERS -LINES -LINEUP -LINGER -LINGERED -LINGERIE -LINGERING -LINGERS -LINGO -LINGUA -LINGUIST -LINGUISTIC -LINGUISTICALLY -LINGUISTICS -LINGUISTS -LINING -LININGS -LINK -LINKAGE -LINKAGES -LINKED -LINKER -LINKERS -LINKING -LINKS -LINNAEUS -LINOLEUM -LINOTYPE -LINSEED -LINT -LINTON -LINUS -LINUX -LION -LIONEL -LIONESS -LIONESSES -LIONS -LIP -LIPPINCOTT -LIPS -LIPSCHITZ -LIPSCOMB -LIPSTICK -LIPTON -LIQUID -LIQUIDATE -LIQUIDATION -LIQUIDATIONS -LIQUIDITY -LIQUIDS -LIQUOR -LIQUORS -LISA -LISBON -LISE -LISP -LISPED -LISPING -LISPS -LISS -LISSAJOUS -LIST -LISTED -LISTEN -LISTENED -LISTENER -LISTENERS -LISTENING -LISTENS -LISTER -LISTERIZE -LISTERIZES -LISTERS -LISTING -LISTINGS -LISTLESS -LISTON -LISTS -LIT -LITANY -LITER -LITERACY -LITERAL -LITERALLY -LITERALNESS -LITERALS -LITERARY -LITERATE -LITERATURE -LITERATURES -LITERS -LITHE -LITHOGRAPH -LITHOGRAPHY -LITHUANIA -LITHUANIAN -LITIGANT -LITIGATE -LITIGATION -LITIGIOUS -LITMUS -LITTER -LITTERBUG -LITTERED -LITTERING -LITTERS -LITTLE -LITTLENESS -LITTLER -LITTLEST -LITTLETON -LITTON -LIVABLE -LIVABLY -LIVE -LIVED -LIVELIHOOD -LIVELY -LIVENESS -LIVER -LIVERIED -LIVERMORE -LIVERPOOL -LIVERPUDLIAN -LIVERS -LIVERY -LIVES -LIVESTOCK -LIVID -LIVING -LIVINGSTON -LIZ -LIZARD -LIZARDS -LIZZIE -LIZZY -LLOYD -LOAD -LOADED -LOADER -LOADERS -LOADING -LOADINGS -LOADS -LOAF -LOAFED -LOAFER -LOAN -LOANED -LOANING -LOANS -LOATH -LOATHE -LOATHED -LOATHING -LOATHLY -LOATHSOME -LOAVES -LOBBIED -LOBBIES -LOBBY -LOBBYING -LOBE -LOBES -LOBSTER -LOBSTERS -LOCAL -LOCALITIES -LOCALITY -LOCALIZATION -LOCALIZE -LOCALIZED -LOCALIZES -LOCALIZING -LOCALLY -LOCALS -LOCATE -LOCATED -LOCATES -LOCATING -LOCATION -LOCATIONS -LOCATIVE -LOCATIVES -LOCATOR -LOCATORS -LOCI -LOCK -LOCKE -LOCKED -LOCKER -LOCKERS -LOCKHART -LOCKHEED -LOCKIAN -LOCKING -LOCKINGS -LOCKOUT -LOCKOUTS -LOCKS -LOCKSMITH -LOCKSTEP -LOCKUP -LOCKUPS -LOCKWOOD -LOCOMOTION -LOCOMOTIVE -LOCOMOTIVES -LOCUS -LOCUST -LOCUSTS -LODGE -LODGED -LODGER -LODGES -LODGING -LODGINGS -LODOWICK -LOEB -LOFT -LOFTINESS -LOFTS -LOFTY -LOGAN -LOGARITHM -LOGARITHMIC -LOGARITHMICALLY -LOGARITHMS -LOGGED -LOGGER -LOGGERS -LOGGING -LOGIC -LOGICAL -LOGICALLY -LOGICIAN -LOGICIANS -LOGICS -LOGIN -LOGINS -LOGISTIC -LOGISTICS -LOGJAM -LOGO -LOGS -LOIN -LOINCLOTH -LOINS -LOIRE -LOIS -LOITER -LOITERED -LOITERER -LOITERING -LOITERS -LOKI -LOLA -LOMB -LOMBARD -LOMBARDY -LOME -LONDON -LONDONDERRY -LONDONER -LONDONIZATION -LONDONIZATIONS -LONDONIZE -LONDONIZES -LONE -LONELIER -LONELIEST -LONELINESS -LONELY -LONER -LONERS -LONESOME -LONG -LONGED -LONGER -LONGEST -LONGEVITY -LONGFELLOW -LONGHAND -LONGING -LONGINGS -LONGITUDE -LONGITUDES -LONGS -LONGSTANDING -LONGSTREET -LOOK -LOOKAHEAD -LOOKED -LOOKER -LOOKERS -LOOKING -LOOKOUT -LOOKS -LOOKUP -LOOKUPS -LOOM -LOOMED -LOOMING -LOOMIS -LOOMS -LOON -LOOP -LOOPED -LOOPHOLE -LOOPHOLES -LOOPING -LOOPS -LOOSE -LOOSED -LOOSELEAF -LOOSELY -LOOSEN -LOOSENED -LOOSENESS -LOOSENING -LOOSENS -LOOSER -LOOSES -LOOSEST -LOOSING -LOOT -LOOTED -LOOTER -LOOTING -LOOTS -LOPEZ -LOPSIDED -LORD -LORDLY -LORDS -LORDSHIP -LORE -LORELEI -LOREN -LORENTZIAN -LORENZ -LORETTA -LORINDA -LORRAINE -LORRY -LOS -LOSE -LOSER -LOSERS -LOSES -LOSING -LOSS -LOSSES -LOSSIER -LOSSIEST -LOSSY -LOST -LOT -LOTHARIO -LOTION -LOTS -LOTTE -LOTTERY -LOTTIE -LOTUS -LOU -LOUD -LOUDER -LOUDEST -LOUDLY -LOUDNESS -LOUDSPEAKER -LOUDSPEAKERS -LOUIS -LOUISA -LOUISE -LOUISIANA -LOUISIANAN -LOUISVILLE -LOUNGE -LOUNGED -LOUNGES -LOUNGING -LOUNSBURY -LOURDES -LOUSE -LOUSY -LOUT -LOUVRE -LOVABLE -LOVABLY -LOVE -LOVED -LOVEJOY -LOVELACE -LOVELAND -LOVELIER -LOVELIES -LOVELIEST -LOVELINESS -LOVELORN -LOVELY -LOVER -LOVERS -LOVES -LOVING -LOVINGLY -LOW -LOWE -LOWELL -LOWER -LOWERED -LOWERING -LOWERS -LOWEST -LOWLAND -LOWLANDS -LOWLIEST -LOWLY -LOWNESS -LOWRY -LOWS -LOY -LOYAL -LOYALLY -LOYALTIES -LOYALTY -LOYOLA -LUBBOCK -LUBELL -LUBRICANT -LUBRICATE -LUBRICATION -LUCAS -LUCERNE -LUCIA -LUCIAN -LUCID -LUCIEN -LUCIFER -LUCILLE -LUCIUS -LUCK -LUCKED -LUCKIER -LUCKIEST -LUCKILY -LUCKLESS -LUCKS -LUCKY -LUCRATIVE -LUCRETIA -LUCRETIUS -LUCY -LUDICROUS -LUDICROUSLY -LUDICROUSNESS -LUDLOW -LUDMILLA -LUDWIG -LUFTHANSA -LUFTWAFFE -LUGGAGE -LUIS -LUKE -LUKEWARM -LULL -LULLABY -LULLED -LULLS -LUMBER -LUMBERED -LUMBERING -LUMINOUS -LUMINOUSLY -LUMMOX -LUMP -LUMPED -LUMPING -LUMPS -LUMPUR -LUMPY -LUNAR -LUNATIC -LUNCH -LUNCHED -LUNCHEON -LUNCHEONS -LUNCHES -LUNCHING -LUND -LUNDBERG -LUNDQUIST -LUNG -LUNGED -LUNGS -LURA -LURCH -LURCHED -LURCHES -LURCHING -LURE -LURED -LURES -LURING -LURK -LURKED -LURKING -LURKS -LUSAKA -LUSCIOUS -LUSCIOUSLY -LUSCIOUSNESS -LUSH -LUST -LUSTER -LUSTFUL -LUSTILY -LUSTINESS -LUSTROUS -LUSTS -LUSTY -LUTE -LUTES -LUTHER -LUTHERAN -LUTHERANIZE -LUTHERANIZER -LUTHERANIZERS -LUTHERANIZES -LUTZ -LUXEMBOURG -LUXEMBURG -LUXURIANT -LUXURIANTLY -LUXURIES -LUXURIOUS -LUXURIOUSLY -LUXURY -LUZON -LYDIA -LYING -LYKES -LYLE -LYMAN -LYMPH -LYNCH -LYNCHBURG -LYNCHED -LYNCHER -LYNCHES -LYNDON -LYNN -LYNX -LYNXES -LYON -LYONS -LYRA -LYRE -LYRIC -LYRICS -LYSENKO -MABEL -MAC -MACADAMIA -MACARTHUR -MACARTHUR -MACASSAR -MACAULAY -MACAULAYAN -MACAULAYISM -MACAULAYISMS -MACBETH -MACDONALD -MACDONALD -MACDOUGALL -MACDOUGALL -MACDRAW -MACE -MACED -MACEDON -MACEDONIA -MACEDONIAN -MACES -MACGREGOR -MACGREGOR -MACH -MACHIAVELLI -MACHIAVELLIAN -MACHINATION -MACHINE -MACHINED -MACHINELIKE -MACHINERY -MACHINES -MACHINING -MACHO -MACINTOSH -MACINTOSH -MACINTOSH -MACKENZIE -MACKENZIE -MACKEREL -MACKEY -MACKINAC -MACKINAW -MACMAHON -MACMILLAN -MACMILLAN -MACON -MACPAINT -MACRO -MACROECONOMICS -MACROMOLECULE -MACROMOLECULES -MACROPHAGE -MACROS -MACROSCOPIC -MAD -MADAGASCAR -MADAM -MADAME -MADAMES -MADDEN -MADDENING -MADDER -MADDEST -MADDOX -MADE -MADEIRA -MADELEINE -MADELINE -MADHOUSE -MADHYA -MADISON -MADLY -MADMAN -MADMEN -MADNESS -MADONNA -MADONNAS -MADRAS -MADRID -MADSEN -MAE -MAELSTROM -MAESTRO -MAFIA -MAFIOSI -MAGAZINE -MAGAZINES -MAGDALENE -MAGELLAN -MAGELLANIC -MAGENTA -MAGGIE -MAGGOT -MAGGOTS -MAGIC -MAGICAL -MAGICALLY -MAGICIAN -MAGICIANS -MAGILL -MAGISTRATE -MAGISTRATES -MAGNA -MAGNESIUM -MAGNET -MAGNETIC -MAGNETICALLY -MAGNETISM -MAGNETISMS -MAGNETIZABLE -MAGNETIZED -MAGNETO -MAGNIFICATION -MAGNIFICENCE -MAGNIFICENT -MAGNIFICENTLY -MAGNIFIED -MAGNIFIER -MAGNIFIES -MAGNIFY -MAGNIFYING -MAGNITUDE -MAGNITUDES -MAGNOLIA -MAGNUM -MAGNUSON -MAGOG -MAGPIE -MAGRUDER -MAGUIRE -MAGUIRES -MAHARASHTRA -MAHAYANA -MAHAYANIST -MAHOGANY -MAHONEY -MAID -MAIDEN -MAIDENS -MAIDS -MAIER -MAIL -MAILABLE -MAILBOX -MAILBOXES -MAILED -MAILER -MAILING -MAILINGS -MAILMAN -MAILMEN -MAILS -MAIM -MAIMED -MAIMING -MAIMS -MAIN -MAINE -MAINFRAME -MAINFRAMES -MAINLAND -MAINLINE -MAINLY -MAINS -MAINSTAY -MAINSTREAM -MAINTAIN -MAINTAINABILITY -MAINTAINABLE -MAINTAINED -MAINTAINER -MAINTAINERS -MAINTAINING -MAINTAINS -MAINTENANCE -MAINTENANCES -MAIZE -MAJESTIC -MAJESTIES -MAJESTY -MAJOR -MAJORCA -MAJORED -MAJORING -MAJORITIES -MAJORITY -MAJORS -MAKABLE -MAKE -MAKER -MAKERS -MAKES -MAKESHIFT -MAKEUP -MAKEUPS -MAKING -MAKINGS -MALABAR -MALADIES -MALADY -MALAGASY -MALAMUD -MALARIA -MALAWI -MALAY -MALAYIZE -MALAYIZES -MALAYSIA -MALAYSIAN -MALCOLM -MALCONTENT -MALDEN -MALDIVE -MALE -MALEFACTOR -MALEFACTORS -MALENESS -MALES -MALEVOLENT -MALFORMED -MALFUNCTION -MALFUNCTIONED -MALFUNCTIONING -MALFUNCTIONS -MALI -MALIBU -MALICE -MALICIOUS -MALICIOUSLY -MALICIOUSNESS -MALIGN -MALIGNANT -MALIGNANTLY -MALL -MALLARD -MALLET -MALLETS -MALLORY -MALNUTRITION -MALONE -MALONEY -MALPRACTICE -MALRAUX -MALT -MALTA -MALTED -MALTESE -MALTHUS -MALTHUSIAN -MALTON -MALTS -MAMA -MAMMA -MAMMAL -MAMMALIAN -MAMMALS -MAMMAS -MAMMOTH -MAN -MANAGE -MANAGEABLE -MANAGEABLENESS -MANAGED -MANAGEMENT -MANAGEMENTS -MANAGER -MANAGERIAL -MANAGERS -MANAGES -MANAGING -MANAGUA -MANAMA -MANCHESTER -MANCHURIA -MANDARIN -MANDATE -MANDATED -MANDATES -MANDATING -MANDATORY -MANDELBROT -MANDIBLE -MANE -MANES -MANEUVER -MANEUVERED -MANEUVERING -MANEUVERS -MANFRED -MANGER -MANGERS -MANGLE -MANGLED -MANGLER -MANGLES -MANGLING -MANHATTAN -MANHATTANIZE -MANHATTANIZES -MANHOLE -MANHOOD -MANIA -MANIAC -MANIACAL -MANIACS -MANIC -MANICURE -MANICURED -MANICURES -MANICURING -MANIFEST -MANIFESTATION -MANIFESTATIONS -MANIFESTED -MANIFESTING -MANIFESTLY -MANIFESTS -MANIFOLD -MANIFOLDS -MANILA -MANIPULABILITY -MANIPULABLE -MANIPULATABLE -MANIPULATE -MANIPULATED -MANIPULATES -MANIPULATING -MANIPULATION -MANIPULATIONS -MANIPULATIVE -MANIPULATOR -MANIPULATORS -MANIPULATORY -MANITOBA -MANITOWOC -MANKIND -MANKOWSKI -MANLEY -MANLY -MANN -MANNED -MANNER -MANNERED -MANNERLY -MANNERS -MANNING -MANOMETER -MANOMETERS -MANOR -MANORS -MANPOWER -MANS -MANSFIELD -MANSION -MANSIONS -MANSLAUGHTER -MANTEL -MANTELS -MANTIS -MANTISSA -MANTISSAS -MANTLE -MANTLEPIECE -MANTLES -MANUAL -MANUALLY -MANUALS -MANUEL -MANUFACTURE -MANUFACTURED -MANUFACTURER -MANUFACTURERS -MANUFACTURES -MANUFACTURING -MANURE -MANUSCRIPT -MANUSCRIPTS -MANVILLE -MANY -MAO -MAORI -MAP -MAPLE -MAPLECREST -MAPLES -MAPPABLE -MAPPED -MAPPING -MAPPINGS -MAPS -MARATHON -MARBLE -MARBLES -MARBLING -MARC -MARCEAU -MARCEL -MARCELLO -MARCH -MARCHED -MARCHER -MARCHES -MARCHING -MARCIA -MARCO -MARCOTTE -MARCUS -MARCY -MARDI -MARDIS -MARE -MARES -MARGARET -MARGARINE -MARGERY -MARGIN -MARGINAL -MARGINALLY -MARGINS -MARGO -MARGUERITE -MARIANNE -MARIE -MARIETTA -MARIGOLD -MARIJUANA -MARILYN -MARIN -MARINA -MARINADE -MARINATE -MARINE -MARINER -MARINES -MARINO -MARIO -MARION -MARIONETTE -MARITAL -MARITIME -MARJORIE -MARJORY -MARK -MARKABLE -MARKED -MARKEDLY -MARKER -MARKERS -MARKET -MARKETABILITY -MARKETABLE -MARKETED -MARKETING -MARKETINGS -MARKETPLACE -MARKETPLACES -MARKETS -MARKHAM -MARKING -MARKINGS -MARKISM -MARKOV -MARKOVIAN -MARKOVITZ -MARKS -MARLBORO -MARLBOROUGH -MARLENE -MARLOWE -MARMALADE -MARMOT -MAROON -MARQUETTE -MARQUIS -MARRIAGE -MARRIAGEABLE -MARRIAGES -MARRIED -MARRIES -MARRIOTT -MARROW -MARRY -MARRYING -MARS -MARSEILLES -MARSH -MARSHA -MARSHAL -MARSHALED -MARSHALING -MARSHALL -MARSHALLED -MARSHALLING -MARSHALS -MARSHES -MARSHMALLOW -MART -MARTEN -MARTHA -MARTIAL -MARTIAN -MARTIANS -MARTINEZ -MARTINGALE -MARTINI -MARTINIQUE -MARTINSON -MARTS -MARTY -MARTYR -MARTYRDOM -MARTYRS -MARVEL -MARVELED -MARVELLED -MARVELLING -MARVELOUS -MARVELOUSLY -MARVELOUSNESS -MARVELS -MARVIN -MARX -MARXIAN -MARXISM -MARXISMS -MARXIST -MARY -MARYLAND -MARYLANDERS -MASCARA -MASCULINE -MASCULINELY -MASCULINITY -MASERU -MASH -MASHED -MASHES -MASHING -MASK -MASKABLE -MASKED -MASKER -MASKING -MASKINGS -MASKS -MASOCHIST -MASOCHISTS -MASON -MASONIC -MASONITE -MASONRY -MASONS -MASQUERADE -MASQUERADER -MASQUERADES -MASQUERADING -MASS -MASSACHUSETTS -MASSACRE -MASSACRED -MASSACRES -MASSAGE -MASSAGES -MASSAGING -MASSED -MASSES -MASSEY -MASSING -MASSIVE -MAST -MASTED -MASTER -MASTERED -MASTERFUL -MASTERFULLY -MASTERING -MASTERINGS -MASTERLY -MASTERMIND -MASTERPIECE -MASTERPIECES -MASTERS -MASTERY -MASTODON -MASTS -MASTURBATE -MASTURBATED -MASTURBATES -MASTURBATING -MASTURBATION -MAT -MATCH -MATCHABLE -MATCHED -MATCHER -MATCHERS -MATCHES -MATCHING -MATCHINGS -MATCHLESS -MATE -MATED -MATEO -MATER -MATERIAL -MATERIALIST -MATERIALIZE -MATERIALIZED -MATERIALIZES -MATERIALIZING -MATERIALLY -MATERIALS -MATERNAL -MATERNALLY -MATERNITY -MATES -MATH -MATHEMATICA -MATHEMATICAL -MATHEMATICALLY -MATHEMATICIAN -MATHEMATICIANS -MATHEMATICS -MATHEMATIK -MATHEWSON -MATHIAS -MATHIEU -MATILDA -MATING -MATINGS -MATISSE -MATISSES -MATRIARCH -MATRIARCHAL -MATRICES -MATRICULATE -MATRICULATION -MATRIMONIAL -MATRIMONY -MATRIX -MATROID -MATRON -MATRONLY -MATS -MATSON -MATSUMOTO -MATT -MATTED -MATTER -MATTERED -MATTERS -MATTHEW -MATTHEWS -MATTIE -MATTRESS -MATTRESSES -MATTSON -MATURATION -MATURE -MATURED -MATURELY -MATURES -MATURING -MATURITIES -MATURITY -MAUDE -MAUL -MAUREEN -MAURICE -MAURICIO -MAURINE -MAURITANIA -MAURITIUS -MAUSOLEUM -MAVERICK -MAVIS -MAWR -MAX -MAXIM -MAXIMA -MAXIMAL -MAXIMALLY -MAXIMILIAN -MAXIMIZE -MAXIMIZED -MAXIMIZER -MAXIMIZERS -MAXIMIZES -MAXIMIZING -MAXIMS -MAXIMUM -MAXIMUMS -MAXINE -MAXTOR -MAXWELL -MAXWELLIAN -MAY -MAYA -MAYANS -MAYBE -MAYER -MAYFAIR -MAYFLOWER -MAYHAP -MAYHEM -MAYNARD -MAYO -MAYONNAISE -MAYOR -MAYORAL -MAYORS -MAZDA -MAZE -MAZES -MBABANE -MCADAM -MCADAMS -MCALLISTER -MCBRIDE -MCCABE -MCCALL -MCCALLUM -MCCANN -MCCARTHY -MCCARTY -MCCAULEY -MCCLAIN -MCCLELLAN -MCCLURE -MCCLUSKEY -MCCONNEL -MCCONNELL -MCCORMICK -MCCOY -MCCRACKEN -MCCULLOUGH -MCDANIEL -MCDERMOTT -MCDONALD -MCDONNELL -MCDOUGALL -MCDOWELL -MCELHANEY -MCELROY -MCFADDEN -MCFARLAND -MCGEE -MCGILL -MCGINNIS -MCGOVERN -MCGOWAN -MCGRATH -MCGRAW -MCGREGOR -MCGUIRE -MCHUGH -MCINTOSH -MCINTYRE -MCKAY -MCKEE -MCKENNA -MCKENZIE -MCKEON -MCKESSON -MCKINLEY -MCKINNEY -MCKNIGHT -MCLANAHAN -MCLAUGHLIN -MCLEAN -MCLEOD -MCMAHON -MCMARTIN -MCMILLAN -MCMULLEN -MCNALLY -MCNAUGHTON -MCNEIL -MCNULTY -MCPHERSON -MEAD -MEADOW -MEADOWS -MEAGER -MEAGERLY -MEAGERNESS -MEAL -MEALS -MEALTIME -MEALY -MEAN -MEANDER -MEANDERED -MEANDERING -MEANDERS -MEANER -MEANEST -MEANING -MEANINGFUL -MEANINGFULLY -MEANINGFULNESS -MEANINGLESS -MEANINGLESSLY -MEANINGLESSNESS -MEANINGS -MEANLY -MEANNESS -MEANS -MEANT -MEANTIME -MEANWHILE -MEASLE -MEASLES -MEASURABLE -MEASURABLY -MEASURE -MEASURED -MEASUREMENT -MEASUREMENTS -MEASURER -MEASURES -MEASURING -MEAT -MEATS -MEATY -MECCA -MECHANIC -MECHANICAL -MECHANICALLY -MECHANICS -MECHANISM -MECHANISMS -MECHANIZATION -MECHANIZATIONS -MECHANIZE -MECHANIZED -MECHANIZES -MECHANIZING -MEDAL -MEDALLION -MEDALLIONS -MEDALS -MEDDLE -MEDDLED -MEDDLER -MEDDLES -MEDDLING -MEDEA -MEDFIELD -MEDFORD -MEDIA -MEDIAN -MEDIANS -MEDIATE -MEDIATED -MEDIATES -MEDIATING -MEDIATION -MEDIATIONS -MEDIATOR -MEDIC -MEDICAID -MEDICAL -MEDICALLY -MEDICARE -MEDICI -MEDICINAL -MEDICINALLY -MEDICINE -MEDICINES -MEDICIS -MEDICS -MEDIEVAL -MEDIOCRE -MEDIOCRITY -MEDITATE -MEDITATED -MEDITATES -MEDITATING -MEDITATION -MEDITATIONS -MEDITATIVE -MEDITERRANEAN -MEDITERRANEANIZATION -MEDITERRANEANIZATIONS -MEDITERRANEANIZE -MEDITERRANEANIZES -MEDIUM -MEDIUMS -MEDLEY -MEDUSA -MEDUSAN -MEEK -MEEKER -MEEKEST -MEEKLY -MEEKNESS -MEET -MEETING -MEETINGHOUSE -MEETINGS -MEETS -MEG -MEGABAUD -MEGABIT -MEGABITS -MEGABYTE -MEGABYTES -MEGAHERTZ -MEGALOMANIA -MEGATON -MEGAVOLT -MEGAWATT -MEGAWORD -MEGAWORDS -MEGOHM -MEIER -MEIJI -MEISTER -MEISTERSINGER -MEKONG -MEL -MELAMPUS -MELANCHOLY -MELANESIA -MELANESIAN -MELANIE -MELBOURNE -MELCHER -MELINDA -MELISANDE -MELISSA -MELLON -MELLOW -MELLOWED -MELLOWING -MELLOWNESS -MELLOWS -MELODIES -MELODIOUS -MELODIOUSLY -MELODIOUSNESS -MELODRAMA -MELODRAMAS -MELODRAMATIC -MELODY -MELON -MELONS -MELPOMENE -MELT -MELTED -MELTING -MELTINGLY -MELTS -MELVILLE -MELVIN -MEMBER -MEMBERS -MEMBERSHIP -MEMBERSHIPS -MEMBRANE -MEMENTO -MEMO -MEMOIR -MEMOIRS -MEMORABILIA -MEMORABLE -MEMORABLENESS -MEMORANDA -MEMORANDUM -MEMORIAL -MEMORIALLY -MEMORIALS -MEMORIES -MEMORIZATION -MEMORIZE -MEMORIZED -MEMORIZER -MEMORIZES -MEMORIZING -MEMORY -MEMORYLESS -MEMOS -MEMPHIS -MEN -MENACE -MENACED -MENACING -MENAGERIE -MENARCHE -MENCKEN -MEND -MENDACIOUS -MENDACITY -MENDED -MENDEL -MENDELIAN -MENDELIZE -MENDELIZES -MENDELSSOHN -MENDER -MENDING -MENDOZA -MENDS -MENELAUS -MENIAL -MENIALS -MENLO -MENNONITE -MENNONITES -MENOMINEE -MENORCA -MENS -MENSCH -MENSTRUATE -MENSURABLE -MENSURATION -MENTAL -MENTALITIES -MENTALITY -MENTALLY -MENTION -MENTIONABLE -MENTIONED -MENTIONER -MENTIONERS -MENTIONING -MENTIONS -MENTOR -MENTORS -MENU -MENUS -MENZIES -MEPHISTOPHELES -MERCANTILE -MERCATOR -MERCEDES -MERCENARIES -MERCENARINESS -MERCENARY -MERCHANDISE -MERCHANDISER -MERCHANDISING -MERCHANT -MERCHANTS -MERCIFUL -MERCIFULLY -MERCILESS -MERCILESSLY -MERCK -MERCURIAL -MERCURY -MERCY -MERE -MEREDITH -MERELY -MEREST -MERGE -MERGED -MERGER -MERGERS -MERGES -MERGING -MERIDIAN -MERINGUE -MERIT -MERITED -MERITING -MERITORIOUS -MERITORIOUSLY -MERITORIOUSNESS -MERITS -MERIWETHER -MERLE -MERMAID -MERRIAM -MERRICK -MERRIEST -MERRILL -MERRILY -MERRIMAC -MERRIMACK -MERRIMENT -MERRITT -MERRY -MERRYMAKE -MERVIN -MESCALINE -MESH -MESON -MESOPOTAMIA -MESOZOIC -MESQUITE -MESS -MESSAGE -MESSAGES -MESSED -MESSENGER -MESSENGERS -MESSES -MESSIAH -MESSIAHS -MESSIER -MESSIEST -MESSILY -MESSINESS -MESSING -MESSY -MET -META -METABOLIC -METABOLISM -METACIRCULAR -METACIRCULARITY -METAL -METALANGUAGE -METALLIC -METALLIZATION -METALLIZATIONS -METALLURGY -METALS -METAMATHEMATICAL -METAMORPHOSIS -METAPHOR -METAPHORICAL -METAPHORICALLY -METAPHORS -METAPHYSICAL -METAPHYSICALLY -METAPHYSICS -METAVARIABLE -METCALF -METE -METED -METEOR -METEORIC -METEORITE -METEORITIC -METEOROLOGY -METEORS -METER -METERING -METERS -METES -METHANE -METHOD -METHODICAL -METHODICALLY -METHODICALNESS -METHODISM -METHODIST -METHODISTS -METHODOLOGICAL -METHODOLOGICALLY -METHODOLOGIES -METHODOLOGISTS -METHODOLOGY -METHODS -METHUEN -METHUSELAH -METHUSELAHS -METICULOUSLY -METING -METRECAL -METRIC -METRICAL -METRICS -METRO -METRONOME -METROPOLIS -METROPOLITAN -METS -METTLE -METTLESOME -METZLER -MEW -MEWED -MEWS -MEXICAN -MEXICANIZE -MEXICANIZES -MEXICANS -MEXICO -MEYER -MEYERS -MIAMI -MIASMA -MICA -MICE -MICHAEL -MICHAELS -MICHEL -MICHELANGELO -MICHELE -MICHELIN -MICHELSON -MICHIGAN -MICK -MICKEY -MICKIE -MICKY -MICRO -MICROARCHITECTS -MICROARCHITECTURE -MICROARCHITECTURES -MICROBIAL -MICROBICIDAL -MICROBICIDE -MICROCODE -MICROCODED -MICROCODES -MICROCODING -MICROCOMPUTER -MICROCOMPUTERS -MICROCOSM -MICROCYCLE -MICROCYCLES -MICROECONOMICS -MICROELECTRONICS -MICROFILM -MICROFILMS -MICROFINANCE -MICROGRAMMING -MICROINSTRUCTION -MICROINSTRUCTIONS -MICROJUMP -MICROJUMPS -MICROLEVEL -MICRON -MICRONESIA -MICRONESIAN -MICROOPERATIONS -MICROPHONE -MICROPHONES -MICROPHONING -MICROPORT -MICROPROCEDURE -MICROPROCEDURES -MICROPROCESSING -MICROPROCESSOR -MICROPROCESSORS -MICROPROGRAM -MICROPROGRAMMABLE -MICROPROGRAMMED -MICROPROGRAMMER -MICROPROGRAMMING -MICROPROGRAMS -MICROS -MICROSCOPE -MICROSCOPES -MICROSCOPIC -MICROSCOPY -MICROSECOND -MICROSECONDS -MICROSOFT -MICROSTORE -MICROSYSTEMS -MICROVAX -MICROVAXES -MICROWAVE -MICROWAVES -MICROWORD -MICROWORDS -MID -MIDAS -MIDDAY -MIDDLE -MIDDLEBURY -MIDDLEMAN -MIDDLEMEN -MIDDLES -MIDDLESEX -MIDDLETON -MIDDLETOWN -MIDDLING -MIDGET -MIDLANDIZE -MIDLANDIZES -MIDNIGHT -MIDNIGHTS -MIDPOINT -MIDPOINTS -MIDRANGE -MIDSCALE -MIDSECTION -MIDSHIPMAN -MIDSHIPMEN -MIDST -MIDSTREAM -MIDSTS -MIDSUMMER -MIDWAY -MIDWEEK -MIDWEST -MIDWESTERN -MIDWESTERNER -MIDWESTERNERS -MIDWIFE -MIDWINTER -MIDWIVES -MIEN -MIGHT -MIGHTIER -MIGHTIEST -MIGHTILY -MIGHTINESS -MIGHTY -MIGRANT -MIGRATE -MIGRATED -MIGRATES -MIGRATING -MIGRATION -MIGRATIONS -MIGRATORY -MIGUEL -MIKE -MIKHAIL -MIKOYAN -MILAN -MILD -MILDER -MILDEST -MILDEW -MILDLY -MILDNESS -MILDRED -MILE -MILEAGE -MILES -MILESTONE -MILESTONES -MILITANT -MILITANTLY -MILITARILY -MILITARISM -MILITARY -MILITIA -MILK -MILKED -MILKER -MILKERS -MILKINESS -MILKING -MILKMAID -MILKMAIDS -MILKS -MILKY -MILL -MILLARD -MILLED -MILLENNIUM -MILLER -MILLET -MILLIAMMETER -MILLIAMPERE -MILLIE -MILLIJOULE -MILLIKAN -MILLIMETER -MILLIMETERS -MILLINERY -MILLING -MILLINGTON -MILLION -MILLIONAIRE -MILLIONAIRES -MILLIONS -MILLIONTH -MILLIPEDE -MILLIPEDES -MILLISECOND -MILLISECONDS -MILLIVOLT -MILLIVOLTMETER -MILLIWATT -MILLS -MILLSTONE -MILLSTONES -MILNE -MILQUETOAST -MILQUETOASTS -MILTON -MILTONIAN -MILTONIC -MILTONISM -MILTONIST -MILTONIZE -MILTONIZED -MILTONIZES -MILTONIZING -MILWAUKEE -MIMEOGRAPH -MIMI -MIMIC -MIMICKED -MIMICKING -MIMICS -MINARET -MINCE -MINCED -MINCEMEAT -MINCES -MINCING -MIND -MINDANAO -MINDED -MINDFUL -MINDFULLY -MINDFULNESS -MINDING -MINDLESS -MINDLESSLY -MINDS -MINE -MINED -MINEFIELD -MINER -MINERAL -MINERALS -MINERS -MINERVA -MINES -MINESWEEPER -MINGLE -MINGLED -MINGLES -MINGLING -MINI -MINIATURE -MINIATURES -MINIATURIZATION -MINIATURIZE -MINIATURIZED -MINIATURIZES -MINIATURIZING -MINICOMPUTER -MINICOMPUTERS -MINIMA -MINIMAL -MINIMALLY -MINIMAX -MINIMIZATION -MINIMIZATIONS -MINIMIZE -MINIMIZED -MINIMIZER -MINIMIZERS -MINIMIZES -MINIMIZING -MINIMUM -MINING -MINION -MINIS -MINISTER -MINISTERED -MINISTERING -MINISTERS -MINISTRIES -MINISTRY -MINK -MINKS -MINNEAPOLIS -MINNESOTA -MINNIE -MINNOW -MINNOWS -MINOAN -MINOR -MINORING -MINORITIES -MINORITY -MINORS -MINOS -MINOTAUR -MINSK -MINSKY -MINSTREL -MINSTRELS -MINT -MINTED -MINTER -MINTING -MINTS -MINUEND -MINUET -MINUS -MINUSCULE -MINUTE -MINUTELY -MINUTEMAN -MINUTEMEN -MINUTENESS -MINUTER -MINUTES -MIOCENE -MIPS -MIRA -MIRACLE -MIRACLES -MIRACULOUS -MIRACULOUSLY -MIRAGE -MIRANDA -MIRE -MIRED -MIRES -MIRFAK -MIRIAM -MIRROR -MIRRORED -MIRRORING -MIRRORS -MIRTH -MISANTHROPE -MISBEHAVING -MISCALCULATION -MISCALCULATIONS -MISCARRIAGE -MISCARRY -MISCEGENATION -MISCELLANEOUS -MISCELLANEOUSLY -MISCELLANEOUSNESS -MISCHIEF -MISCHIEVOUS -MISCHIEVOUSLY -MISCHIEVOUSNESS -MISCONCEPTION -MISCONCEPTIONS -MISCONDUCT -MISCONSTRUE -MISCONSTRUED -MISCONSTRUES -MISDEMEANORS -MISER -MISERABLE -MISERABLENESS -MISERABLY -MISERIES -MISERLY -MISERS -MISERY -MISFIT -MISFITS -MISFORTUNE -MISFORTUNES -MISGIVING -MISGIVINGS -MISGUIDED -MISHAP -MISHAPS -MISINFORMED -MISJUDGED -MISJUDGMENT -MISLEAD -MISLEADING -MISLEADS -MISLED -MISMANAGEMENT -MISMATCH -MISMATCHED -MISMATCHES -MISMATCHING -MISNOMER -MISPLACE -MISPLACED -MISPLACES -MISPLACING -MISPRONUNCIATION -MISREPRESENTATION -MISREPRESENTATIONS -MISS -MISSED -MISSES -MISSHAPEN -MISSILE -MISSILES -MISSING -MISSION -MISSIONARIES -MISSIONARY -MISSIONER -MISSIONS -MISSISSIPPI -MISSISSIPPIAN -MISSISSIPPIANS -MISSIVE -MISSOULA -MISSOURI -MISSPELL -MISSPELLED -MISSPELLING -MISSPELLINGS -MISSPELLS -MISSY -MIST -MISTAKABLE -MISTAKE -MISTAKEN -MISTAKENLY -MISTAKES -MISTAKING -MISTED -MISTER -MISTERS -MISTINESS -MISTING -MISTLETOE -MISTRESS -MISTRUST -MISTRUSTED -MISTS -MISTY -MISTYPE -MISTYPED -MISTYPES -MISTYPING -MISUNDERSTAND -MISUNDERSTANDER -MISUNDERSTANDERS -MISUNDERSTANDING -MISUNDERSTANDINGS -MISUNDERSTOOD -MISUSE -MISUSED -MISUSES -MISUSING -MITCH -MITCHELL -MITER -MITIGATE -MITIGATED -MITIGATES -MITIGATING -MITIGATION -MITIGATIVE -MITRE -MITRES -MITTEN -MITTENS -MIX -MIXED -MIXER -MIXERS -MIXES -MIXING -MIXTURE -MIXTURES -MIXUP -MIZAR -MNEMONIC -MNEMONICALLY -MNEMONICS -MOAN -MOANED -MOANS -MOAT -MOATS -MOB -MOBIL -MOBILE -MOBILITY -MOBS -MOBSTER -MOCCASIN -MOCCASINS -MOCK -MOCKED -MOCKER -MOCKERY -MOCKING -MOCKINGBIRD -MOCKS -MOCKUP -MODAL -MODALITIES -MODALITY -MODALLY -MODE -MODEL -MODELED -MODELING -MODELINGS -MODELS -MODEM -MODEMS -MODERATE -MODERATED -MODERATELY -MODERATENESS -MODERATES -MODERATING -MODERATION -MODERN -MODERNITY -MODERNIZE -MODERNIZED -MODERNIZER -MODERNIZING -MODERNLY -MODERNNESS -MODERNS -MODES -MODEST -MODESTLY -MODESTO -MODESTY -MODICUM -MODIFIABILITY -MODIFIABLE -MODIFICATION -MODIFICATIONS -MODIFIED -MODIFIER -MODIFIERS -MODIFIES -MODIFY -MODIFYING -MODULA -MODULAR -MODULARITY -MODULARIZATION -MODULARIZE -MODULARIZED -MODULARIZES -MODULARIZING -MODULARLY -MODULATE -MODULATED -MODULATES -MODULATING -MODULATION -MODULATIONS -MODULATOR -MODULATORS -MODULE -MODULES -MODULI -MODULO -MODULUS -MODUS -MOE -MOEN -MOGADISCIO -MOGADISHU -MOGHUL -MOHAMMED -MOHAMMEDAN -MOHAMMEDANISM -MOHAMMEDANIZATION -MOHAMMEDANIZATIONS -MOHAMMEDANIZE -MOHAMMEDANIZES -MOHAWK -MOHR -MOINES -MOISEYEV -MOIST -MOISTEN -MOISTLY -MOISTNESS -MOISTURE -MOLAR -MOLASSES -MOLD -MOLDAVIA -MOLDED -MOLDER -MOLDING -MOLDS -MOLE -MOLECULAR -MOLECULE -MOLECULES -MOLEHILL -MOLES -MOLEST -MOLESTED -MOLESTING -MOLESTS -MOLIERE -MOLINE -MOLL -MOLLIE -MOLLIFY -MOLLUSK -MOLLY -MOLLYCODDLE -MOLOCH -MOLOCHIZE -MOLOCHIZES -MOLOTOV -MOLTEN -MOLUCCAS -MOMENT -MOMENTARILY -MOMENTARINESS -MOMENTARY -MOMENTOUS -MOMENTOUSLY -MOMENTOUSNESS -MOMENTS -MOMENTUM -MOMMY -MONA -MONACO -MONADIC -MONARCH -MONARCHIES -MONARCHS -MONARCHY -MONASH -MONASTERIES -MONASTERY -MONASTIC -MONDAY -MONDAYS -MONET -MONETARISM -MONETARY -MONEY -MONEYED -MONEYS -MONFORT -MONGOLIA -MONGOLIAN -MONGOLIANISM -MONGOOSE -MONICA -MONITOR -MONITORED -MONITORING -MONITORS -MONK -MONKEY -MONKEYED -MONKEYING -MONKEYS -MONKISH -MONKS -MONMOUTH -MONOALPHABETIC -MONOCEROS -MONOCHROMATIC -MONOCHROME -MONOCOTYLEDON -MONOCULAR -MONOGAMOUS -MONOGAMY -MONOGRAM -MONOGRAMS -MONOGRAPH -MONOGRAPHES -MONOGRAPHS -MONOLITH -MONOLITHIC -MONOLOGUE -MONONGAHELA -MONOPOLIES -MONOPOLIZE -MONOPOLIZED -MONOPOLIZING -MONOPOLY -MONOPROGRAMMED -MONOPROGRAMMING -MONOSTABLE -MONOTHEISM -MONOTONE -MONOTONIC -MONOTONICALLY -MONOTONICITY -MONOTONOUS -MONOTONOUSLY -MONOTONOUSNESS -MONOTONY -MONROE -MONROVIA -MONSANTO -MONSOON -MONSTER -MONSTERS -MONSTROSITY -MONSTROUS -MONSTROUSLY -MONT -MONTAGUE -MONTAIGNE -MONTANA -MONTANAN -MONTCLAIR -MONTENEGRIN -MONTENEGRO -MONTEREY -MONTEVERDI -MONTEVIDEO -MONTGOMERY -MONTH -MONTHLY -MONTHS -MONTICELLO -MONTMARTRE -MONTPELIER -MONTRACHET -MONTREAL -MONTY -MONUMENT -MONUMENTAL -MONUMENTALLY -MONUMENTS -MOO -MOOD -MOODINESS -MOODS -MOODY -MOON -MOONED -MOONEY -MOONING -MOONLIGHT -MOONLIGHTER -MOONLIGHTING -MOONLIKE -MOONLIT -MOONS -MOONSHINE -MOOR -MOORE -MOORED -MOORING -MOORINGS -MOORISH -MOORS -MOOSE -MOOT -MOP -MOPED -MOPS -MORAINE -MORAL -MORALE -MORALITIES -MORALITY -MORALLY -MORALS -MORAN -MORASS -MORATORIUM -MORAVIA -MORAVIAN -MORAVIANIZED -MORAVIANIZEDS -MORBID -MORBIDLY -MORBIDNESS -MORE -MOREHOUSE -MORELAND -MOREOVER -MORES -MORESBY -MORGAN -MORIARTY -MORIBUND -MORLEY -MORMON -MORN -MORNING -MORNINGS -MOROCCAN -MOROCCO -MORON -MOROSE -MORPHINE -MORPHISM -MORPHISMS -MORPHOLOGICAL -MORPHOLOGY -MORRILL -MORRIS -MORRISON -MORRISSEY -MORRISTOWN -MORROW -MORSE -MORSEL -MORSELS -MORTAL -MORTALITY -MORTALLY -MORTALS -MORTAR -MORTARED -MORTARING -MORTARS -MORTEM -MORTGAGE -MORTGAGES -MORTICIAN -MORTIFICATION -MORTIFIED -MORTIFIES -MORTIFY -MORTIFYING -MORTIMER -MORTON -MOSAIC -MOSAICS -MOSCONE -MOSCOW -MOSER -MOSES -MOSLEM -MOSLEMIZE -MOSLEMIZES -MOSLEMS -MOSQUE -MOSQUITO -MOSQUITOES -MOSS -MOSSBERG -MOSSES -MOSSY -MOST -MOSTLY -MOTEL -MOTELS -MOTH -MOTHBALL -MOTHBALLS -MOTHER -MOTHERED -MOTHERER -MOTHERERS -MOTHERHOOD -MOTHERING -MOTHERLAND -MOTHERLY -MOTHERS -MOTIF -MOTIFS -MOTION -MOTIONED -MOTIONING -MOTIONLESS -MOTIONLESSLY -MOTIONLESSNESS -MOTIONS -MOTIVATE -MOTIVATED -MOTIVATES -MOTIVATING -MOTIVATION -MOTIVATIONS -MOTIVE -MOTIVES -MOTLEY -MOTOR -MOTORCAR -MOTORCARS -MOTORCYCLE -MOTORCYCLES -MOTORING -MOTORIST -MOTORISTS -MOTORIZE -MOTORIZED -MOTORIZES -MOTORIZING -MOTOROLA -MOTORS -MOTTO -MOTTOES -MOULD -MOULDING -MOULTON -MOUND -MOUNDED -MOUNDS -MOUNT -MOUNTABLE -MOUNTAIN -MOUNTAINEER -MOUNTAINEERING -MOUNTAINEERS -MOUNTAINOUS -MOUNTAINOUSLY -MOUNTAINS -MOUNTED -MOUNTER -MOUNTING -MOUNTINGS -MOUNTS -MOURN -MOURNED -MOURNER -MOURNERS -MOURNFUL -MOURNFULLY -MOURNFULNESS -MOURNING -MOURNS -MOUSE -MOUSER -MOUSES -MOUSETRAP -MOUSY -MOUTH -MOUTHE -MOUTHED -MOUTHES -MOUTHFUL -MOUTHING -MOUTHPIECE -MOUTHS -MOUTON -MOVABLE -MOVE -MOVED -MOVEMENT -MOVEMENTS -MOVER -MOVERS -MOVES -MOVIE -MOVIES -MOVING -MOVINGS -MOW -MOWED -MOWER -MOWS -MOYER -MOZART -MUCH -MUCK -MUCKER -MUCKING -MUCUS -MUD -MUDD -MUDDIED -MUDDINESS -MUDDLE -MUDDLED -MUDDLEHEAD -MUDDLER -MUDDLERS -MUDDLES -MUDDLING -MUDDY -MUELLER -MUENSTER -MUFF -MUFFIN -MUFFINS -MUFFLE -MUFFLED -MUFFLER -MUFFLES -MUFFLING -MUFFS -MUG -MUGGING -MUGS -MUHAMMAD -MUIR -MUKDEN -MULATTO -MULBERRIES -MULBERRY -MULE -MULES -MULL -MULLAH -MULLEN -MULTI -MULTIBIT -MULTIBUS -MULTIBYTE -MULTICAST -MULTICASTING -MULTICASTS -MULTICELLULAR -MULTICOMPUTER -MULTICS -MULTICS -MULTIDIMENSIONAL -MULTILATERAL -MULTILAYER -MULTILAYERED -MULTILEVEL -MULTIMEDIA -MULTINATIONAL -MULTIPLE -MULTIPLES -MULTIPLEX -MULTIPLEXED -MULTIPLEXER -MULTIPLEXERS -MULTIPLEXES -MULTIPLEXING -MULTIPLEXOR -MULTIPLEXORS -MULTIPLICAND -MULTIPLICANDS -MULTIPLICATION -MULTIPLICATIONS -MULTIPLICATIVE -MULTIPLICATIVES -MULTIPLICITY -MULTIPLIED -MULTIPLIER -MULTIPLIERS -MULTIPLIES -MULTIPLY -MULTIPLYING -MULTIPROCESS -MULTIPROCESSING -MULTIPROCESSOR -MULTIPROCESSORS -MULTIPROGRAM -MULTIPROGRAMMED -MULTIPROGRAMMING -MULTISTAGE -MULTITUDE -MULTITUDES -MULTIUSER -MULTIVARIATE -MULTIWORD -MUMBLE -MUMBLED -MUMBLER -MUMBLERS -MUMBLES -MUMBLING -MUMBLINGS -MUMFORD -MUMMIES -MUMMY -MUNCH -MUNCHED -MUNCHING -MUNCIE -MUNDANE -MUNDANELY -MUNDT -MUNG -MUNICH -MUNICIPAL -MUNICIPALITIES -MUNICIPALITY -MUNICIPALLY -MUNITION -MUNITIONS -MUNROE -MUNSEY -MUNSON -MUONG -MURAL -MURDER -MURDERED -MURDERER -MURDERERS -MURDERING -MURDEROUS -MURDEROUSLY -MURDERS -MURIEL -MURKY -MURMUR -MURMURED -MURMURER -MURMURING -MURMURS -MURPHY -MURRAY -MURROW -MUSCAT -MUSCLE -MUSCLED -MUSCLES -MUSCLING -MUSCOVITE -MUSCOVY -MUSCULAR -MUSCULATURE -MUSE -MUSED -MUSES -MUSEUM -MUSEUMS -MUSH -MUSHROOM -MUSHROOMED -MUSHROOMING -MUSHROOMS -MUSHY -MUSIC -MUSICAL -MUSICALLY -MUSICALS -MUSICIAN -MUSICIANLY -MUSICIANS -MUSICOLOGY -MUSING -MUSINGS -MUSK -MUSKEGON -MUSKET -MUSKETS -MUSKOX -MUSKOXEN -MUSKRAT -MUSKRATS -MUSKS -MUSLIM -MUSLIMS -MUSLIN -MUSSEL -MUSSELS -MUSSOLINI -MUSSOLINIS -MUSSORGSKY -MUST -MUSTACHE -MUSTACHED -MUSTACHES -MUSTARD -MUSTER -MUSTINESS -MUSTS -MUSTY -MUTABILITY -MUTABLE -MUTABLENESS -MUTANDIS -MUTANT -MUTATE -MUTATED -MUTATES -MUTATING -MUTATION -MUTATIONS -MUTATIS -MUTATIVE -MUTE -MUTED -MUTELY -MUTENESS -MUTILATE -MUTILATED -MUTILATES -MUTILATING -MUTILATION -MUTINIES -MUTINY -MUTT -MUTTER -MUTTERED -MUTTERER -MUTTERERS -MUTTERING -MUTTERS -MUTTON -MUTUAL -MUTUALLY -MUZAK -MUZO -MUZZLE -MUZZLES -MYCENAE -MYCENAEAN -MYERS -MYNHEER -MYRA -MYRIAD -MYRON -MYRTLE -MYSELF -MYSORE -MYSTERIES -MYSTERIOUS -MYSTERIOUSLY -MYSTERIOUSNESS -MYSTERY -MYSTIC -MYSTICAL -MYSTICS -MYSTIFY -MYTH -MYTHICAL -MYTHOLOGIES -MYTHOLOGY -NAB -NABISCO -NABLA -NABLAS -NADIA -NADINE -NADIR -NAG -NAGASAKI -NAGGED -NAGGING -NAGOYA -NAGS -NAGY -NAIL -NAILED -NAILING -NAILS -NAIR -NAIROBI -NAIVE -NAIVELY -NAIVENESS -NAIVETE -NAKAMURA -NAKAYAMA -NAKED -NAKEDLY -NAKEDNESS -NAKOMA -NAME -NAMEABLE -NAMED -NAMELESS -NAMELESSLY -NAMELY -NAMER -NAMERS -NAMES -NAMESAKE -NAMESAKES -NAMING -NAN -NANCY -NANETTE -NANKING -NANOINSTRUCTION -NANOINSTRUCTIONS -NANOOK -NANOPROGRAM -NANOPROGRAMMING -NANOSECOND -NANOSECONDS -NANOSTORE -NANOSTORES -NANTUCKET -NAOMI -NAP -NAPKIN -NAPKINS -NAPLES -NAPOLEON -NAPOLEONIC -NAPOLEONIZE -NAPOLEONIZES -NAPS -NARBONNE -NARCISSUS -NARCOTIC -NARCOTICS -NARRAGANSETT -NARRATE -NARRATION -NARRATIVE -NARRATIVES -NARROW -NARROWED -NARROWER -NARROWEST -NARROWING -NARROWLY -NARROWNESS -NARROWS -NARY -NASA -NASAL -NASALLY -NASAS -NASH -NASHUA -NASHVILLE -NASSAU -NASTIER -NASTIEST -NASTILY -NASTINESS -NASTY -NAT -NATAL -NATALIE -NATCHEZ -NATE -NATHAN -NATHANIEL -NATION -NATIONAL -NATIONALIST -NATIONALISTS -NATIONALITIES -NATIONALITY -NATIONALIZATION -NATIONALIZE -NATIONALIZED -NATIONALIZES -NATIONALIZING -NATIONALLY -NATIONALS -NATIONHOOD -NATIONS -NATIONWIDE -NATIVE -NATIVELY -NATIVES -NATIVITY -NATO -NATOS -NATURAL -NATURALISM -NATURALIST -NATURALIZATION -NATURALLY -NATURALNESS -NATURALS -NATURE -NATURED -NATURES -NAUGHT -NAUGHTIER -NAUGHTINESS -NAUGHTY -NAUR -NAUSEA -NAUSEATE -NAUSEUM -NAVAHO -NAVAJO -NAVAL -NAVALLY -NAVEL -NAVIES -NAVIGABLE -NAVIGATE -NAVIGATED -NAVIGATES -NAVIGATING -NAVIGATION -NAVIGATOR -NAVIGATORS -NAVONA -NAVY -NAY -NAZARENE -NAZARETH -NAZI -NAZIS -NAZISM -NDJAMENA -NEAL -NEANDERTHAL -NEAPOLITAN -NEAR -NEARBY -NEARED -NEARER -NEAREST -NEARING -NEARLY -NEARNESS -NEARS -NEARSIGHTED -NEAT -NEATER -NEATEST -NEATLY -NEATNESS -NEBRASKA -NEBRASKAN -NEBUCHADNEZZAR -NEBULA -NEBULAR -NEBULOUS -NECESSARIES -NECESSARILY -NECESSARY -NECESSITATE -NECESSITATED -NECESSITATES -NECESSITATING -NECESSITATION -NECESSITIES -NECESSITY -NECK -NECKING -NECKLACE -NECKLACES -NECKLINE -NECKS -NECKTIE -NECKTIES -NECROSIS -NECTAR -NED -NEED -NEEDED -NEEDFUL -NEEDHAM -NEEDING -NEEDLE -NEEDLED -NEEDLER -NEEDLERS -NEEDLES -NEEDLESS -NEEDLESSLY -NEEDLESSNESS -NEEDLEWORK -NEEDLING -NEEDS -NEEDY -NEFF -NEGATE -NEGATED -NEGATES -NEGATING -NEGATION -NEGATIONS -NEGATIVE -NEGATIVELY -NEGATIVES -NEGATOR -NEGATORS -NEGLECT -NEGLECTED -NEGLECTING -NEGLECTS -NEGLIGEE -NEGLIGENCE -NEGLIGENT -NEGLIGIBLE -NEGOTIABLE -NEGOTIATE -NEGOTIATED -NEGOTIATES -NEGOTIATING -NEGOTIATION -NEGOTIATIONS -NEGRO -NEGROES -NEGROID -NEGROIZATION -NEGROIZATIONS -NEGROIZE -NEGROIZES -NEHRU -NEIGH -NEIGHBOR -NEIGHBORHOOD -NEIGHBORHOODS -NEIGHBORING -NEIGHBORLY -NEIGHBORS -NEIL -NEITHER -NELL -NELLIE -NELSEN -NELSON -NEMESIS -NEOCLASSIC -NEON -NEONATAL -NEOPHYTE -NEOPHYTES -NEPAL -NEPALI -NEPHEW -NEPHEWS -NEPTUNE -NERO -NERVE -NERVES -NERVOUS -NERVOUSLY -NERVOUSNESS -NESS -NEST -NESTED -NESTER -NESTING -NESTLE -NESTLED -NESTLES -NESTLING -NESTOR -NESTS -NET -NETHER -NETHERLANDS -NETS -NETTED -NETTING -NETTLE -NETTLED -NETWORK -NETWORKED -NETWORKING -NETWORKS -NEUMANN -NEURAL -NEURITIS -NEUROLOGICAL -NEUROLOGISTS -NEURON -NEURONS -NEUROSES -NEUROSIS -NEUROTIC -NEUTER -NEUTRAL -NEUTRALITIES -NEUTRALITY -NEUTRALIZE -NEUTRALIZED -NEUTRALIZING -NEUTRALLY -NEUTRINO -NEUTRINOS -NEUTRON -NEVA -NEVADA -NEVER -NEVERTHELESS -NEVINS -NEW -NEWARK -NEWBOLD -NEWBORN -NEWBURY -NEWBURYPORT -NEWCASTLE -NEWCOMER -NEWCOMERS -NEWELL -NEWER -NEWEST -NEWFOUNDLAND -NEWLY -NEWLYWED -NEWMAN -NEWMANIZE -NEWMANIZES -NEWNESS -NEWPORT -NEWS -NEWSCAST -NEWSGROUP -NEWSLETTER -NEWSLETTERS -NEWSMAN -NEWSMEN -NEWSPAPER -NEWSPAPERS -NEWSSTAND -NEWSWEEK -NEWSWEEKLY -NEWT -NEWTON -NEWTONIAN -NEXT -NGUYEN -NIAGARA -NIAMEY -NIBBLE -NIBBLED -NIBBLER -NIBBLERS -NIBBLES -NIBBLING -NIBELUNG -NICARAGUA -NICCOLO -NICE -NICELY -NICENESS -NICER -NICEST -NICHE -NICHOLAS -NICHOLLS -NICHOLS -NICHOLSON -NICK -NICKED -NICKEL -NICKELS -NICKER -NICKING -NICKLAUS -NICKNAME -NICKNAMED -NICKNAMES -NICKS -NICODEMUS -NICOSIA -NICOTINE -NIECE -NIECES -NIELSEN -NIELSON -NIETZSCHE -NIFTY -NIGER -NIGERIA -NIGERIAN -NIGH -NIGHT -NIGHTCAP -NIGHTCLUB -NIGHTFALL -NIGHTGOWN -NIGHTINGALE -NIGHTINGALES -NIGHTLY -NIGHTMARE -NIGHTMARES -NIGHTMARISH -NIGHTS -NIGHTTIME -NIHILISM -NIJINSKY -NIKKO -NIKOLAI -NIL -NILE -NILSEN -NILSSON -NIMBLE -NIMBLENESS -NIMBLER -NIMBLY -NIMBUS -NINA -NINE -NINEFOLD -NINES -NINETEEN -NINETEENS -NINETEENTH -NINETIES -NINETIETH -NINETY -NINEVEH -NINTH -NIOBE -NIP -NIPPLE -NIPPON -NIPPONIZE -NIPPONIZES -NIPS -NITRIC -NITROGEN -NITROUS -NITTY -NIXON -NOAH -NOBEL -NOBILITY -NOBLE -NOBLEMAN -NOBLENESS -NOBLER -NOBLES -NOBLEST -NOBLY -NOBODY -NOCTURNAL -NOCTURNALLY -NOD -NODAL -NODDED -NODDING -NODE -NODES -NODS -NODULAR -NODULE -NOEL -NOETHERIAN -NOISE -NOISELESS -NOISELESSLY -NOISES -NOISIER -NOISILY -NOISINESS -NOISY -NOLAN -NOLL -NOMENCLATURE -NOMINAL -NOMINALLY -NOMINATE -NOMINATED -NOMINATING -NOMINATION -NOMINATIVE -NOMINEE -NON -NONADAPTIVE -NONBIODEGRADABLE -NONBLOCKING -NONCE -NONCHALANT -NONCOMMERCIAL -NONCOMMUNICATION -NONCONSECUTIVELY -NONCONSERVATIVE -NONCRITICAL -NONCYCLIC -NONDECREASING -NONDESCRIPT -NONDESCRIPTLY -NONDESTRUCTIVELY -NONDETERMINACY -NONDETERMINATE -NONDETERMINATELY -NONDETERMINISM -NONDETERMINISTIC -NONDETERMINISTICALLY -NONE -NONEMPTY -NONETHELESS -NONEXISTENCE -NONEXISTENT -NONEXTENSIBLE -NONFUNCTIONAL -NONGOVERNMENTAL -NONIDEMPOTENT -NONINTERACTING -NONINTERFERENCE -NONINTERLEAVED -NONINTRUSIVE -NONINTUITIVE -NONINVERTING -NONLINEAR -NONLINEARITIES -NONLINEARITY -NONLINEARLY -NONLOCAL -NONMASKABLE -NONMATHEMATICAL -NONMILITARY -NONNEGATIVE -NONNEGLIGIBLE -NONNUMERICAL -NONOGENARIAN -NONORTHOGONAL -NONORTHOGONALITY -NONPERISHABLE -NONPERSISTENT -NONPORTABLE -NONPROCEDURAL -NONPROCEDURALLY -NONPROFIT -NONPROGRAMMABLE -NONPROGRAMMER -NONSEGMENTED -NONSENSE -NONSENSICAL -NONSEQUENTIAL -NONSPECIALIST -NONSPECIALISTS -NONSTANDARD -NONSYNCHRONOUS -NONTECHNICAL -NONTERMINAL -NONTERMINALS -NONTERMINATING -NONTERMINATION -NONTHERMAL -NONTRANSPARENT -NONTRIVIAL -NONUNIFORM -NONUNIFORMITY -NONZERO -NOODLE -NOOK -NOOKS -NOON -NOONDAY -NOONS -NOONTIDE -NOONTIME -NOOSE -NOR -NORA -NORDHOFF -NORDIC -NORDSTROM -NOREEN -NORFOLK -NORM -NORMA -NORMAL -NORMALCY -NORMALITY -NORMALIZATION -NORMALIZE -NORMALIZED -NORMALIZES -NORMALIZING -NORMALLY -NORMALS -NORMAN -NORMANDY -NORMANIZATION -NORMANIZATIONS -NORMANIZE -NORMANIZER -NORMANIZERS -NORMANIZES -NORMATIVE -NORMS -NORRIS -NORRISTOWN -NORSE -NORTH -NORTHAMPTON -NORTHBOUND -NORTHEAST -NORTHEASTER -NORTHEASTERN -NORTHERLY -NORTHERN -NORTHERNER -NORTHERNERS -NORTHERNLY -NORTHFIELD -NORTHROP -NORTHRUP -NORTHUMBERLAND -NORTHWARD -NORTHWARDS -NORTHWEST -NORTHWESTERN -NORTON -NORWALK -NORWAY -NORWEGIAN -NORWICH -NOSE -NOSED -NOSES -NOSING -NOSTALGIA -NOSTALGIC -NOSTRADAMUS -NOSTRAND -NOSTRIL -NOSTRILS -NOT -NOTABLE -NOTABLES -NOTABLY -NOTARIZE -NOTARIZED -NOTARIZES -NOTARIZING -NOTARY -NOTATION -NOTATIONAL -NOTATIONS -NOTCH -NOTCHED -NOTCHES -NOTCHING -NOTE -NOTEBOOK -NOTEBOOKS -NOTED -NOTES -NOTEWORTHY -NOTHING -NOTHINGNESS -NOTHINGS -NOTICE -NOTICEABLE -NOTICEABLY -NOTICED -NOTICES -NOTICING -NOTIFICATION -NOTIFICATIONS -NOTIFIED -NOTIFIER -NOTIFIERS -NOTIFIES -NOTIFY -NOTIFYING -NOTING -NOTION -NOTIONS -NOTORIETY -NOTORIOUS -NOTORIOUSLY -NOTRE -NOTTINGHAM -NOTWITHSTANDING -NOUAKCHOTT -NOUN -NOUNS -NOURISH -NOURISHED -NOURISHES -NOURISHING -NOURISHMENT -NOVAK -NOVEL -NOVELIST -NOVELISTS -NOVELS -NOVELTIES -NOVELTY -NOVEMBER -NOVEMBERS -NOVICE -NOVICES -NOVOSIBIRSK -NOW -NOWADAYS -NOWHERE -NOXIOUS -NOYES -NOZZLE -NUANCE -NUANCES -NUBIA -NUBIAN -NUBILE -NUCLEAR -NUCLEI -NUCLEIC -NUCLEOTIDE -NUCLEOTIDES -NUCLEUS -NUCLIDE -NUDE -NUDGE -NUDGED -NUDITY -NUGENT -NUGGET -NUISANCE -NUISANCES -NULL -NULLARY -NULLED -NULLIFIED -NULLIFIERS -NULLIFIES -NULLIFY -NULLIFYING -NULLS -NUMB -NUMBED -NUMBER -NUMBERED -NUMBERER -NUMBERING -NUMBERLESS -NUMBERS -NUMBING -NUMBLY -NUMBNESS -NUMBS -NUMERABLE -NUMERAL -NUMERALS -NUMERATOR -NUMERATORS -NUMERIC -NUMERICAL -NUMERICALLY -NUMERICS -NUMEROUS -NUMISMATIC -NUMISMATIST -NUN -NUNS -NUPTIAL -NURSE -NURSED -NURSERIES -NURSERY -NURSES -NURSING -NURTURE -NURTURED -NURTURES -NURTURING -NUT -NUTATE -NUTRIA -NUTRIENT -NUTRITION -NUTRITIOUS -NUTS -NUTSHELL -NUTSHELLS -NUZZLE -NYLON -NYMPH -NYMPHOMANIA -NYMPHOMANIAC -NYMPHS -NYQUIST -OAF -OAK -OAKEN -OAKLAND -OAKLEY -OAKMONT -OAKS -OAR -OARS -OASES -OASIS -OAT -OATEN -OATH -OATHS -OATMEAL -OATS -OBEDIENCE -OBEDIENCES -OBEDIENT -OBEDIENTLY -OBELISK -OBERLIN -OBERON -OBESE -OBEY -OBEYED -OBEYING -OBEYS -OBFUSCATE -OBFUSCATORY -OBITUARY -OBJECT -OBJECTED -OBJECTING -OBJECTION -OBJECTIONABLE -OBJECTIONS -OBJECTIVE -OBJECTIVELY -OBJECTIVES -OBJECTOR -OBJECTORS -OBJECTS -OBLIGATED -OBLIGATION -OBLIGATIONS -OBLIGATORY -OBLIGE -OBLIGED -OBLIGES -OBLIGING -OBLIGINGLY -OBLIQUE -OBLIQUELY -OBLIQUENESS -OBLITERATE -OBLITERATED -OBLITERATES -OBLITERATING -OBLITERATION -OBLIVION -OBLIVIOUS -OBLIVIOUSLY -OBLIVIOUSNESS -OBLONG -OBNOXIOUS -OBOE -OBSCENE -OBSCURE -OBSCURED -OBSCURELY -OBSCURER -OBSCURES -OBSCURING -OBSCURITIES -OBSCURITY -OBSEQUIOUS -OBSERVABLE -OBSERVANCE -OBSERVANCES -OBSERVANT -OBSERVATION -OBSERVATIONS -OBSERVATORY -OBSERVE -OBSERVED -OBSERVER -OBSERVERS -OBSERVES -OBSERVING -OBSESSION -OBSESSIONS -OBSESSIVE -OBSOLESCENCE -OBSOLESCENT -OBSOLETE -OBSOLETED -OBSOLETES -OBSOLETING -OBSTACLE -OBSTACLES -OBSTINACY -OBSTINATE -OBSTINATELY -OBSTRUCT -OBSTRUCTED -OBSTRUCTING -OBSTRUCTION -OBSTRUCTIONS -OBSTRUCTIVE -OBTAIN -OBTAINABLE -OBTAINABLY -OBTAINED -OBTAINING -OBTAINS -OBVIATE -OBVIATED -OBVIATES -OBVIATING -OBVIATION -OBVIATIONS -OBVIOUS -OBVIOUSLY -OBVIOUSNESS -OCCAM -OCCASION -OCCASIONAL -OCCASIONALLY -OCCASIONED -OCCASIONING -OCCASIONINGS -OCCASIONS -OCCIDENT -OCCIDENTAL -OCCIDENTALIZATION -OCCIDENTALIZATIONS -OCCIDENTALIZE -OCCIDENTALIZED -OCCIDENTALIZES -OCCIDENTALIZING -OCCIDENTALS -OCCIPITAL -OCCLUDE -OCCLUDED -OCCLUDES -OCCLUSION -OCCLUSIONS -OCCULT -OCCUPANCIES -OCCUPANCY -OCCUPANT -OCCUPANTS -OCCUPATION -OCCUPATIONAL -OCCUPATIONALLY -OCCUPATIONS -OCCUPIED -OCCUPIER -OCCUPIES -OCCUPY -OCCUPYING -OCCUR -OCCURRED -OCCURRENCE -OCCURRENCES -OCCURRING -OCCURS -OCEAN -OCEANIA -OCEANIC -OCEANOGRAPHY -OCEANS -OCONOMOWOC -OCTAGON -OCTAGONAL -OCTAHEDRA -OCTAHEDRAL -OCTAHEDRON -OCTAL -OCTANE -OCTAVE -OCTAVES -OCTAVIA -OCTET -OCTETS -OCTOBER -OCTOBERS -OCTOGENARIAN -OCTOPUS -ODD -ODDER -ODDEST -ODDITIES -ODDITY -ODDLY -ODDNESS -ODDS -ODE -ODERBERG -ODERBERGS -ODES -ODESSA -ODIN -ODIOUS -ODIOUSLY -ODIOUSNESS -ODIUM -ODOR -ODOROUS -ODOROUSLY -ODOROUSNESS -ODORS -ODYSSEUS -ODYSSEY -OEDIPAL -OEDIPALLY -OEDIPUS -OFF -OFFENBACH -OFFEND -OFFENDED -OFFENDER -OFFENDERS -OFFENDING -OFFENDS -OFFENSE -OFFENSES -OFFENSIVE -OFFENSIVELY -OFFENSIVENESS -OFFER -OFFERED -OFFERER -OFFERERS -OFFERING -OFFERINGS -OFFERS -OFFHAND -OFFICE -OFFICEMATE -OFFICER -OFFICERS -OFFICES -OFFICIAL -OFFICIALDOM -OFFICIALLY -OFFICIALS -OFFICIATE -OFFICIO -OFFICIOUS -OFFICIOUSLY -OFFICIOUSNESS -OFFING -OFFLOAD -OFFS -OFFSET -OFFSETS -OFFSETTING -OFFSHORE -OFFSPRING -OFT -OFTEN -OFTENTIMES -OGDEN -OHIO -OHM -OHMMETER -OIL -OILCLOTH -OILED -OILER -OILERS -OILIER -OILIEST -OILING -OILS -OILY -OINTMENT -OJIBWA -OKAMOTO -OKAY -OKINAWA -OKLAHOMA -OKLAHOMAN -OLAF -OLAV -OLD -OLDEN -OLDENBURG -OLDER -OLDEST -OLDNESS -OLDSMOBILE -OLDUVAI -OLDY -OLEANDER -OLEG -OLEOMARGARINE -OLGA -OLIGARCHY -OLIGOCENE -OLIN -OLIVE -OLIVER -OLIVERS -OLIVES -OLIVETTI -OLIVIA -OLIVIER -OLSEN -OLSON -OLYMPIA -OLYMPIAN -OLYMPIANIZE -OLYMPIANIZES -OLYMPIC -OLYMPICS -OLYMPUS -OMAHA -OMAN -OMEGA -OMELET -OMEN -OMENS -OMICRON -OMINOUS -OMINOUSLY -OMINOUSNESS -OMISSION -OMISSIONS -OMIT -OMITS -OMITTED -OMITTING -OMNIBUS -OMNIDIRECTIONAL -OMNIPOTENT -OMNIPRESENT -OMNISCIENT -OMNISCIENTLY -OMNIVORE -ONANISM -ONCE -ONCOLOGY -ONE -ONEIDA -ONENESS -ONEROUS -ONES -ONESELF -ONETIME -ONGOING -ONION -ONIONS -ONLINE -ONLOOKER -ONLY -ONONDAGA -ONRUSH -ONSET -ONSETS -ONSLAUGHT -ONTARIO -ONTO -ONTOLOGY -ONUS -ONWARD -ONWARDS -ONYX -OOZE -OOZED -OPACITY -OPAL -OPALS -OPAQUE -OPAQUELY -OPAQUENESS -OPCODE -OPEC -OPEL -OPEN -OPENED -OPENER -OPENERS -OPENING -OPENINGS -OPENLY -OPENNESS -OPENS -OPERA -OPERABLE -OPERAND -OPERANDI -OPERANDS -OPERAS -OPERATE -OPERATED -OPERATES -OPERATING -OPERATION -OPERATIONAL -OPERATIONALLY -OPERATIONS -OPERATIVE -OPERATIVES -OPERATOR -OPERATORS -OPERETTA -OPHIUCHUS -OPHIUCUS -OPIATE -OPINION -OPINIONS -OPIUM -OPOSSUM -OPPENHEIMER -OPPONENT -OPPONENTS -OPPORTUNE -OPPORTUNELY -OPPORTUNISM -OPPORTUNISTIC -OPPORTUNITIES -OPPORTUNITY -OPPOSABLE -OPPOSE -OPPOSED -OPPOSES -OPPOSING -OPPOSITE -OPPOSITELY -OPPOSITENESS -OPPOSITES -OPPOSITION -OPPRESS -OPPRESSED -OPPRESSES -OPPRESSING -OPPRESSION -OPPRESSIVE -OPPRESSOR -OPPRESSORS -OPPROBRIUM -OPT -OPTED -OPTHALMIC -OPTIC -OPTICAL -OPTICALLY -OPTICS -OPTIMA -OPTIMAL -OPTIMALITY -OPTIMALLY -OPTIMISM -OPTIMIST -OPTIMISTIC -OPTIMISTICALLY -OPTIMIZATION -OPTIMIZATIONS -OPTIMIZE -OPTIMIZED -OPTIMIZER -OPTIMIZERS -OPTIMIZES -OPTIMIZING -OPTIMUM -OPTING -OPTION -OPTIONAL -OPTIONALLY -OPTIONS -OPTOACOUSTIC -OPTOMETRIST -OPTOMETRY -OPTS -OPULENCE -OPULENT -OPUS -ORACLE -ORACLES -ORAL -ORALLY -ORANGE -ORANGES -ORANGUTAN -ORATION -ORATIONS -ORATOR -ORATORIES -ORATORS -ORATORY -ORB -ORBIT -ORBITAL -ORBITALLY -ORBITED -ORBITER -ORBITERS -ORBITING -ORBITS -ORCHARD -ORCHARDS -ORCHESTRA -ORCHESTRAL -ORCHESTRAS -ORCHESTRATE -ORCHID -ORCHIDS -ORDAIN -ORDAINED -ORDAINING -ORDAINS -ORDEAL -ORDER -ORDERED -ORDERING -ORDERINGS -ORDERLIES -ORDERLY -ORDERS -ORDINAL -ORDINANCE -ORDINANCES -ORDINARILY -ORDINARINESS -ORDINARY -ORDINATE -ORDINATES -ORDINATION -ORE -OREGANO -OREGON -OREGONIANS -ORES -ORESTEIA -ORESTES -ORGAN -ORGANIC -ORGANISM -ORGANISMS -ORGANIST -ORGANISTS -ORGANIZABLE -ORGANIZATION -ORGANIZATIONAL -ORGANIZATIONALLY -ORGANIZATIONS -ORGANIZE -ORGANIZED -ORGANIZER -ORGANIZERS -ORGANIZES -ORGANIZING -ORGANS -ORGASM -ORGIASTIC -ORGIES -ORGY -ORIENT -ORIENTAL -ORIENTALIZATION -ORIENTALIZATIONS -ORIENTALIZE -ORIENTALIZED -ORIENTALIZES -ORIENTALIZING -ORIENTALS -ORIENTATION -ORIENTATIONS -ORIENTED -ORIENTING -ORIENTS -ORIFICE -ORIFICES -ORIGIN -ORIGINAL -ORIGINALITY -ORIGINALLY -ORIGINALS -ORIGINATE -ORIGINATED -ORIGINATES -ORIGINATING -ORIGINATION -ORIGINATOR -ORIGINATORS -ORIGINS -ORIN -ORINOCO -ORIOLE -ORION -ORKNEY -ORLANDO -ORLEANS -ORLICK -ORLY -ORNAMENT -ORNAMENTAL -ORNAMENTALLY -ORNAMENTATION -ORNAMENTED -ORNAMENTING -ORNAMENTS -ORNATE -ORNERY -ORONO -ORPHAN -ORPHANAGE -ORPHANED -ORPHANS -ORPHEUS -ORPHIC -ORPHICALLY -ORR -ORTEGA -ORTHANT -ORTHODONTIST -ORTHODOX -ORTHODOXY -ORTHOGONAL -ORTHOGONALITY -ORTHOGONALLY -ORTHOPEDIC -ORVILLE -ORWELL -ORWELLIAN -OSAKA -OSBERT -OSBORN -OSBORNE -OSCAR -OSCILLATE -OSCILLATED -OSCILLATES -OSCILLATING -OSCILLATION -OSCILLATIONS -OSCILLATOR -OSCILLATORS -OSCILLATORY -OSCILLOSCOPE -OSCILLOSCOPES -OSGOOD -OSHKOSH -OSIRIS -OSLO -OSMOSIS -OSMOTIC -OSSIFY -OSTENSIBLE -OSTENSIBLY -OSTENTATIOUS -OSTEOPATH -OSTEOPATHIC -OSTEOPATHY -OSTEOPOROSIS -OSTRACISM -OSTRANDER -OSTRICH -OSTRICHES -OSWALD -OTHELLO -OTHER -OTHERS -OTHERWISE -OTHERWORLDLY -OTIS -OTT -OTTAWA -OTTER -OTTERS -OTTO -OTTOMAN -OTTOMANIZATION -OTTOMANIZATIONS -OTTOMANIZE -OTTOMANIZES -OUAGADOUGOU -OUCH -OUGHT -OUNCE -OUNCES -OUR -OURS -OURSELF -OURSELVES -OUST -OUT -OUTBOUND -OUTBREAK -OUTBREAKS -OUTBURST -OUTBURSTS -OUTCAST -OUTCASTS -OUTCOME -OUTCOMES -OUTCRIES -OUTCRY -OUTDATED -OUTDO -OUTDOOR -OUTDOORS -OUTER -OUTERMOST -OUTFIT -OUTFITS -OUTFITTED -OUTGOING -OUTGREW -OUTGROW -OUTGROWING -OUTGROWN -OUTGROWS -OUTGROWTH -OUTING -OUTLANDISH -OUTLAST -OUTLASTS -OUTLAW -OUTLAWED -OUTLAWING -OUTLAWS -OUTLAY -OUTLAYS -OUTLET -OUTLETS -OUTLINE -OUTLINED -OUTLINES -OUTLINING -OUTLIVE -OUTLIVED -OUTLIVES -OUTLIVING -OUTLOOK -OUTLYING -OUTNUMBERED -OUTPERFORM -OUTPERFORMED -OUTPERFORMING -OUTPERFORMS -OUTPOST -OUTPOSTS -OUTPUT -OUTPUTS -OUTPUTTING -OUTRAGE -OUTRAGED -OUTRAGEOUS -OUTRAGEOUSLY -OUTRAGES -OUTRIGHT -OUTRUN -OUTRUNS -OUTS -OUTSET -OUTSIDE -OUTSIDER -OUTSIDERS -OUTSKIRTS -OUTSTANDING -OUTSTANDINGLY -OUTSTRETCHED -OUTSTRIP -OUTSTRIPPED -OUTSTRIPPING -OUTSTRIPS -OUTVOTE -OUTVOTED -OUTVOTES -OUTVOTING -OUTWARD -OUTWARDLY -OUTWEIGH -OUTWEIGHED -OUTWEIGHING -OUTWEIGHS -OUTWIT -OUTWITS -OUTWITTED -OUTWITTING -OVAL -OVALS -OVARIES -OVARY -OVEN -OVENS -OVER -OVERALL -OVERALLS -OVERBOARD -OVERCAME -OVERCOAT -OVERCOATS -OVERCOME -OVERCOMES -OVERCOMING -OVERCROWD -OVERCROWDED -OVERCROWDING -OVERCROWDS -OVERDONE -OVERDOSE -OVERDRAFT -OVERDRAFTS -OVERDUE -OVEREMPHASIS -OVEREMPHASIZED -OVERESTIMATE -OVERESTIMATED -OVERESTIMATES -OVERESTIMATING -OVERESTIMATION -OVERFLOW -OVERFLOWED -OVERFLOWING -OVERFLOWS -OVERGROWN -OVERHANG -OVERHANGING -OVERHANGS -OVERHAUL -OVERHAULING -OVERHEAD -OVERHEADS -OVERHEAR -OVERHEARD -OVERHEARING -OVERHEARS -OVERJOY -OVERJOYED -OVERKILL -OVERLAND -OVERLAP -OVERLAPPED -OVERLAPPING -OVERLAPS -OVERLAY -OVERLAYING -OVERLAYS -OVERLOAD -OVERLOADED -OVERLOADING -OVERLOADS -OVERLOOK -OVERLOOKED -OVERLOOKING -OVERLOOKS -OVERLY -OVERNIGHT -OVERNIGHTER -OVERNIGHTERS -OVERPOWER -OVERPOWERED -OVERPOWERING -OVERPOWERS -OVERPRINT -OVERPRINTED -OVERPRINTING -OVERPRINTS -OVERPRODUCTION -OVERRIDDEN -OVERRIDE -OVERRIDES -OVERRIDING -OVERRODE -OVERRULE -OVERRULED -OVERRULES -OVERRUN -OVERRUNNING -OVERRUNS -OVERSEAS -OVERSEE -OVERSEEING -OVERSEER -OVERSEERS -OVERSEES -OVERSHADOW -OVERSHADOWED -OVERSHADOWING -OVERSHADOWS -OVERSHOOT -OVERSHOT -OVERSIGHT -OVERSIGHTS -OVERSIMPLIFIED -OVERSIMPLIFIES -OVERSIMPLIFY -OVERSIMPLIFYING -OVERSIZED -OVERSTATE -OVERSTATED -OVERSTATEMENT -OVERSTATEMENTS -OVERSTATES -OVERSTATING -OVERSTOCKS -OVERSUBSCRIBED -OVERT -OVERTAKE -OVERTAKEN -OVERTAKER -OVERTAKERS -OVERTAKES -OVERTAKING -OVERTHREW -OVERTHROW -OVERTHROWN -OVERTIME -OVERTLY -OVERTONE -OVERTONES -OVERTOOK -OVERTURE -OVERTURES -OVERTURN -OVERTURNED -OVERTURNING -OVERTURNS -OVERUSE -OVERVIEW -OVERVIEWS -OVERWHELM -OVERWHELMED -OVERWHELMING -OVERWHELMINGLY -OVERWHELMS -OVERWORK -OVERWORKED -OVERWORKING -OVERWORKS -OVERWRITE -OVERWRITES -OVERWRITING -OVERWRITTEN -OVERZEALOUS -OVID -OWE -OWED -OWEN -OWENS -OWES -OWING -OWL -OWLS -OWN -OWNED -OWNER -OWNERS -OWNERSHIP -OWNERSHIPS -OWNING -OWNS -OXEN -OXFORD -OXIDE -OXIDES -OXIDIZE -OXIDIZED -OXNARD -OXONIAN -OXYGEN -OYSTER -OYSTERS -OZARK -OZARKS -OZONE -OZZIE -PABLO -PABST -PACE -PACED -PACEMAKER -PACER -PACERS -PACES -PACIFIC -PACIFICATION -PACIFIED -PACIFIER -PACIFIES -PACIFISM -PACIFIST -PACIFY -PACING -PACK -PACKAGE -PACKAGED -PACKAGER -PACKAGERS -PACKAGES -PACKAGING -PACKAGINGS -PACKARD -PACKARDS -PACKED -PACKER -PACKERS -PACKET -PACKETS -PACKING -PACKS -PACKWOOD -PACT -PACTS -PAD -PADDED -PADDING -PADDLE -PADDOCK -PADDY -PADLOCK -PADS -PAGAN -PAGANINI -PAGANS -PAGE -PAGEANT -PAGEANTRY -PAGEANTS -PAGED -PAGER -PAGERS -PAGES -PAGINATE -PAGINATED -PAGINATES -PAGINATING -PAGINATION -PAGING -PAGODA -PAID -PAIL -PAILS -PAIN -PAINE -PAINED -PAINFUL -PAINFULLY -PAINLESS -PAINS -PAINSTAKING -PAINSTAKINGLY -PAINT -PAINTED -PAINTER -PAINTERS -PAINTING -PAINTINGS -PAINTS -PAIR -PAIRED -PAIRING -PAIRINGS -PAIRS -PAIRWISE -PAJAMA -PAJAMAS -PAKISTAN -PAKISTANI -PAKISTANIS -PAL -PALACE -PALACES -PALATE -PALATES -PALATINE -PALE -PALED -PALELY -PALENESS -PALEOLITHIC -PALEOZOIC -PALER -PALERMO -PALES -PALEST -PALESTINE -PALESTINIAN -PALFREY -PALINDROME -PALINDROMIC -PALING -PALL -PALLADIAN -PALLADIUM -PALLIATE -PALLIATIVE -PALLID -PALM -PALMED -PALMER -PALMING -PALMOLIVE -PALMS -PALMYRA -PALO -PALOMAR -PALPABLE -PALS -PALSY -PAM -PAMELA -PAMPER -PAMPHLET -PAMPHLETS -PAN -PANACEA -PANACEAS -PANAMA -PANAMANIAN -PANCAKE -PANCAKES -PANCHO -PANDA -PANDANUS -PANDAS -PANDEMIC -PANDEMONIUM -PANDER -PANDORA -PANE -PANEL -PANELED -PANELING -PANELIST -PANELISTS -PANELS -PANES -PANG -PANGAEA -PANGS -PANIC -PANICKED -PANICKING -PANICKY -PANICS -PANNED -PANNING -PANORAMA -PANORAMIC -PANS -PANSIES -PANSY -PANT -PANTED -PANTHEISM -PANTHEIST -PANTHEON -PANTHER -PANTHERS -PANTIES -PANTING -PANTOMIME -PANTRIES -PANTRY -PANTS -PANTY -PANTYHOSE -PAOLI -PAPA -PAPAL -PAPER -PAPERBACK -PAPERBACKS -PAPERED -PAPERER -PAPERERS -PAPERING -PAPERINGS -PAPERS -PAPERWEIGHT -PAPERWORK -PAPOOSE -PAPPAS -PAPUA -PAPYRUS -PAR -PARABOLA -PARABOLIC -PARABOLOID -PARABOLOIDAL -PARACHUTE -PARACHUTED -PARACHUTES -PARADE -PARADED -PARADES -PARADIGM -PARADIGMS -PARADING -PARADISE -PARADOX -PARADOXES -PARADOXICAL -PARADOXICALLY -PARAFFIN -PARAGON -PARAGONS -PARAGRAPH -PARAGRAPHING -PARAGRAPHS -PARAGUAY -PARAGUAYAN -PARAGUAYANS -PARAKEET -PARALLAX -PARALLEL -PARALLELED -PARALLELING -PARALLELISM -PARALLELIZE -PARALLELIZED -PARALLELIZES -PARALLELIZING -PARALLELOGRAM -PARALLELOGRAMS -PARALLELS -PARALYSIS -PARALYZE -PARALYZED -PARALYZES -PARALYZING -PARAMETER -PARAMETERIZABLE -PARAMETERIZATION -PARAMETERIZATIONS -PARAMETERIZE -PARAMETERIZED -PARAMETERIZES -PARAMETERIZING -PARAMETERLESS -PARAMETERS -PARAMETRIC -PARAMETRIZED -PARAMILITARY -PARAMOUNT -PARAMUS -PARANOIA -PARANOIAC -PARANOID -PARANORMAL -PARAPET -PARAPETS -PARAPHERNALIA -PARAPHRASE -PARAPHRASED -PARAPHRASES -PARAPHRASING -PARAPSYCHOLOGY -PARASITE -PARASITES -PARASITIC -PARASITICS -PARASOL -PARBOIL -PARC -PARCEL -PARCELED -PARCELING -PARCELS -PARCH -PARCHED -PARCHMENT -PARDON -PARDONABLE -PARDONABLY -PARDONED -PARDONER -PARDONERS -PARDONING -PARDONS -PARE -PAREGORIC -PARENT -PARENTAGE -PARENTAL -PARENTHESES -PARENTHESIS -PARENTHESIZED -PARENTHESIZES -PARENTHESIZING -PARENTHETIC -PARENTHETICAL -PARENTHETICALLY -PARENTHOOD -PARENTS -PARES -PARETO -PARIAH -PARIMUTUEL -PARING -PARINGS -PARIS -PARISH -PARISHES -PARISHIONER -PARISIAN -PARISIANIZATION -PARISIANIZATIONS -PARISIANIZE -PARISIANIZES -PARITY -PARK -PARKE -PARKED -PARKER -PARKERS -PARKERSBURG -PARKHOUSE -PARKING -PARKINSON -PARKINSONIAN -PARKLAND -PARKLIKE -PARKS -PARKWAY -PARLAY -PARLEY -PARLIAMENT -PARLIAMENTARIAN -PARLIAMENTARY -PARLIAMENTS -PARLOR -PARLORS -PARMESAN -PAROCHIAL -PARODY -PAROLE -PAROLED -PAROLES -PAROLING -PARR -PARRIED -PARRISH -PARROT -PARROTING -PARROTS -PARRS -PARRY -PARS -PARSE -PARSED -PARSER -PARSERS -PARSES -PARSI -PARSIFAL -PARSIMONY -PARSING -PARSINGS -PARSLEY -PARSON -PARSONS -PART -PARTAKE -PARTAKER -PARTAKES -PARTAKING -PARTED -PARTER -PARTERS -PARTHENON -PARTHIA -PARTIAL -PARTIALITY -PARTIALLY -PARTICIPANT -PARTICIPANTS -PARTICIPATE -PARTICIPATED -PARTICIPATES -PARTICIPATING -PARTICIPATION -PARTICIPLE -PARTICLE -PARTICLES -PARTICULAR -PARTICULARLY -PARTICULARS -PARTICULATE -PARTIES -PARTING -PARTINGS -PARTISAN -PARTISANS -PARTITION -PARTITIONED -PARTITIONING -PARTITIONS -PARTLY -PARTNER -PARTNERED -PARTNERS -PARTNERSHIP -PARTOOK -PARTRIDGE -PARTRIDGES -PARTS -PARTY -PASADENA -PASCAL -PASCAL -PASO -PASS -PASSAGE -PASSAGES -PASSAGEWAY -PASSAIC -PASSE -PASSED -PASSENGER -PASSENGERS -PASSER -PASSERS -PASSES -PASSING -PASSION -PASSIONATE -PASSIONATELY -PASSIONS -PASSIVATE -PASSIVE -PASSIVELY -PASSIVENESS -PASSIVITY -PASSOVER -PASSPORT -PASSPORTS -PASSWORD -PASSWORDS -PAST -PASTE -PASTED -PASTEL -PASTERNAK -PASTES -PASTEUR -PASTIME -PASTIMES -PASTING -PASTNESS -PASTOR -PASTORAL -PASTORS -PASTRY -PASTS -PASTURE -PASTURES -PAT -PATAGONIA -PATAGONIANS -PATCH -PATCHED -PATCHES -PATCHING -PATCHWORK -PATCHY -PATE -PATEN -PATENT -PATENTABLE -PATENTED -PATENTER -PATENTERS -PATENTING -PATENTLY -PATENTS -PATERNAL -PATERNALLY -PATERNOSTER -PATERSON -PATH -PATHETIC -PATHNAME -PATHNAMES -PATHOGEN -PATHOGENESIS -PATHOLOGICAL -PATHOLOGY -PATHOS -PATHS -PATHWAY -PATHWAYS -PATIENCE -PATIENT -PATIENTLY -PATIENTS -PATINA -PATIO -PATRIARCH -PATRIARCHAL -PATRIARCHS -PATRIARCHY -PATRICE -PATRICIA -PATRICIAN -PATRICIANS -PATRICK -PATRIMONIAL -PATRIMONY -PATRIOT -PATRIOTIC -PATRIOTISM -PATRIOTS -PATROL -PATROLLED -PATROLLING -PATROLMAN -PATROLMEN -PATROLS -PATRON -PATRONAGE -PATRONIZE -PATRONIZED -PATRONIZES -PATRONIZING -PATRONS -PATS -PATSIES -PATSY -PATTER -PATTERED -PATTERING -PATTERINGS -PATTERN -PATTERNED -PATTERNING -PATTERNS -PATTERS -PATTERSON -PATTI -PATTIES -PATTON -PATTY -PAUCITY -PAUL -PAULA -PAULETTE -PAULI -PAULINE -PAULING -PAULINIZE -PAULINIZES -PAULO -PAULSEN -PAULSON -PAULUS -PAUNCH -PAUNCHY -PAUPER -PAUSE -PAUSED -PAUSES -PAUSING -PAVE -PAVED -PAVEMENT -PAVEMENTS -PAVES -PAVILION -PAVILIONS -PAVING -PAVLOV -PAVLOVIAN -PAW -PAWING -PAWN -PAWNS -PAWNSHOP -PAWS -PAWTUCKET -PAY -PAYABLE -PAYCHECK -PAYCHECKS -PAYED -PAYER -PAYERS -PAYING -PAYMENT -PAYMENTS -PAYNE -PAYNES -PAYNIZE -PAYNIZES -PAYOFF -PAYOFFS -PAYROLL -PAYS -PAYSON -PAZ -PEA -PEABODY -PEACE -PEACEABLE -PEACEFUL -PEACEFULLY -PEACEFULNESS -PEACETIME -PEACH -PEACHES -PEACHTREE -PEACOCK -PEACOCKS -PEAK -PEAKED -PEAKS -PEAL -PEALE -PEALED -PEALING -PEALS -PEANUT -PEANUTS -PEAR -PEARCE -PEARL -PEARLS -PEARLY -PEARS -PEARSON -PEAS -PEASANT -PEASANTRY -PEASANTS -PEASE -PEAT -PEBBLE -PEBBLES -PECCARY -PECK -PECKED -PECKING -PECKS -PECOS -PECTORAL -PECULIAR -PECULIARITIES -PECULIARITY -PECULIARLY -PECUNIARY -PEDAGOGIC -PEDAGOGICAL -PEDAGOGICALLY -PEDAGOGY -PEDAL -PEDANT -PEDANTIC -PEDANTRY -PEDDLE -PEDDLER -PEDDLERS -PEDESTAL -PEDESTRIAN -PEDESTRIANS -PEDIATRIC -PEDIATRICIAN -PEDIATRICS -PEDIGREE -PEDRO -PEEK -PEEKED -PEEKING -PEEKS -PEEL -PEELED -PEELING -PEELS -PEEP -PEEPED -PEEPER -PEEPHOLE -PEEPING -PEEPS -PEER -PEERED -PEERING -PEERLESS -PEERS -PEG -PEGASUS -PEGBOARD -PEGGY -PEGS -PEIPING -PEJORATIVE -PEKING -PELHAM -PELICAN -PELLAGRA -PELOPONNESE -PELT -PELTING -PELTS -PELVIC -PELVIS -PEMBROKE -PEN -PENAL -PENALIZE -PENALIZED -PENALIZES -PENALIZING -PENALTIES -PENALTY -PENANCE -PENCE -PENCHANT -PENCIL -PENCILED -PENCILS -PEND -PENDANT -PENDED -PENDING -PENDLETON -PENDS -PENDULUM -PENDULUMS -PENELOPE -PENETRABLE -PENETRATE -PENETRATED -PENETRATES -PENETRATING -PENETRATINGLY -PENETRATION -PENETRATIONS -PENETRATIVE -PENETRATOR -PENETRATORS -PENGUIN -PENGUINS -PENH -PENICILLIN -PENINSULA -PENINSULAS -PENIS -PENISES -PENITENT -PENITENTIARY -PENN -PENNED -PENNIES -PENNILESS -PENNING -PENNSYLVANIA -PENNY -PENROSE -PENS -PENSACOLA -PENSION -PENSIONER -PENSIONS -PENSIVE -PENT -PENTAGON -PENTAGONS -PENTATEUCH -PENTECOST -PENTECOSTAL -PENTHOUSE -PENULTIMATE -PENUMBRA -PEONY -PEOPLE -PEOPLED -PEOPLES -PEORIA -PEP -PEPPER -PEPPERED -PEPPERING -PEPPERMINT -PEPPERONI -PEPPERS -PEPPERY -PEPPY -PEPSI -PEPSICO -PEPSICO -PEPTIDE -PER -PERCEIVABLE -PERCEIVABLY -PERCEIVE -PERCEIVED -PERCEIVER -PERCEIVERS -PERCEIVES -PERCEIVING -PERCENT -PERCENTAGE -PERCENTAGES -PERCENTILE -PERCENTILES -PERCENTS -PERCEPTIBLE -PERCEPTIBLY -PERCEPTION -PERCEPTIONS -PERCEPTIVE -PERCEPTIVELY -PERCEPTUAL -PERCEPTUALLY -PERCH -PERCHANCE -PERCHED -PERCHES -PERCHING -PERCIVAL -PERCUSSION -PERCUTANEOUS -PERCY -PEREMPTORY -PERENNIAL -PERENNIALLY -PEREZ -PERFECT -PERFECTED -PERFECTIBLE -PERFECTING -PERFECTION -PERFECTIONIST -PERFECTIONISTS -PERFECTLY -PERFECTNESS -PERFECTS -PERFORCE -PERFORM -PERFORMANCE -PERFORMANCES -PERFORMED -PERFORMER -PERFORMERS -PERFORMING -PERFORMS -PERFUME -PERFUMED -PERFUMES -PERFUMING -PERFUNCTORY -PERGAMON -PERHAPS -PERICLEAN -PERICLES -PERIHELION -PERIL -PERILLA -PERILOUS -PERILOUSLY -PERILS -PERIMETER -PERIOD -PERIODIC -PERIODICAL -PERIODICALLY -PERIODICALS -PERIODS -PERIPHERAL -PERIPHERALLY -PERIPHERALS -PERIPHERIES -PERIPHERY -PERISCOPE -PERISH -PERISHABLE -PERISHABLES -PERISHED -PERISHER -PERISHERS -PERISHES -PERISHING -PERJURE -PERJURY -PERK -PERKINS -PERKY -PERLE -PERMANENCE -PERMANENT -PERMANENTLY -PERMEABLE -PERMEATE -PERMEATED -PERMEATES -PERMEATING -PERMEATION -PERMIAN -PERMISSIBILITY -PERMISSIBLE -PERMISSIBLY -PERMISSION -PERMISSIONS -PERMISSIVE -PERMISSIVELY -PERMIT -PERMITS -PERMITTED -PERMITTING -PERMUTATION -PERMUTATIONS -PERMUTE -PERMUTED -PERMUTES -PERMUTING -PERNICIOUS -PERNOD -PEROXIDE -PERPENDICULAR -PERPENDICULARLY -PERPENDICULARS -PERPETRATE -PERPETRATED -PERPETRATES -PERPETRATING -PERPETRATION -PERPETRATIONS -PERPETRATOR -PERPETRATORS -PERPETUAL -PERPETUALLY -PERPETUATE -PERPETUATED -PERPETUATES -PERPETUATING -PERPETUATION -PERPETUITY -PERPLEX -PERPLEXED -PERPLEXING -PERPLEXITY -PERRY -PERSECUTE -PERSECUTED -PERSECUTES -PERSECUTING -PERSECUTION -PERSECUTOR -PERSECUTORS -PERSEID -PERSEPHONE -PERSEUS -PERSEVERANCE -PERSEVERE -PERSEVERED -PERSEVERES -PERSEVERING -PERSHING -PERSIA -PERSIAN -PERSIANIZATION -PERSIANIZATIONS -PERSIANIZE -PERSIANIZES -PERSIANS -PERSIST -PERSISTED -PERSISTENCE -PERSISTENT -PERSISTENTLY -PERSISTING -PERSISTS -PERSON -PERSONAGE -PERSONAGES -PERSONAL -PERSONALITIES -PERSONALITY -PERSONALIZATION -PERSONALIZE -PERSONALIZED -PERSONALIZES -PERSONALIZING -PERSONALLY -PERSONIFICATION -PERSONIFIED -PERSONIFIES -PERSONIFY -PERSONIFYING -PERSONNEL -PERSONS -PERSPECTIVE -PERSPECTIVES -PERSPICUOUS -PERSPICUOUSLY -PERSPIRATION -PERSPIRE -PERSUADABLE -PERSUADE -PERSUADED -PERSUADER -PERSUADERS -PERSUADES -PERSUADING -PERSUASION -PERSUASIONS -PERSUASIVE -PERSUASIVELY -PERSUASIVENESS -PERTAIN -PERTAINED -PERTAINING -PERTAINS -PERTH -PERTINENT -PERTURB -PERTURBATION -PERTURBATIONS -PERTURBED -PERU -PERUSAL -PERUSE -PERUSED -PERUSER -PERUSERS -PERUSES -PERUSING -PERUVIAN -PERUVIANIZE -PERUVIANIZES -PERUVIANS -PERVADE -PERVADED -PERVADES -PERVADING -PERVASIVE -PERVASIVELY -PERVERSION -PERVERT -PERVERTED -PERVERTS -PESSIMISM -PESSIMIST -PESSIMISTIC -PEST -PESTER -PESTICIDE -PESTILENCE -PESTILENT -PESTS -PET -PETAL -PETALS -PETE -PETER -PETERS -PETERSBURG -PETERSEN -PETERSON -PETITION -PETITIONED -PETITIONER -PETITIONING -PETITIONS -PETKIEWICZ -PETRI -PETROLEUM -PETS -PETTED -PETTER -PETTERS -PETTIBONE -PETTICOAT -PETTICOATS -PETTINESS -PETTING -PETTY -PETULANCE -PETULANT -PEUGEOT -PEW -PEWAUKEE -PEWS -PEWTER -PFIZER -PHAEDRA -PHANTOM -PHANTOMS -PHARMACEUTIC -PHARMACIST -PHARMACOLOGY -PHARMACOPOEIA -PHARMACY -PHASE -PHASED -PHASER -PHASERS -PHASES -PHASING -PHEASANT -PHEASANTS -PHELPS -PHENOMENA -PHENOMENAL -PHENOMENALLY -PHENOMENOLOGICAL -PHENOMENOLOGICALLY -PHENOMENOLOGIES -PHENOMENOLOGY -PHENOMENON -PHI -PHIGS -PHIL -PHILADELPHIA -PHILANTHROPY -PHILCO -PHILHARMONIC -PHILIP -PHILIPPE -PHILIPPIANS -PHILIPPINE -PHILIPPINES -PHILISTINE -PHILISTINES -PHILISTINIZE -PHILISTINIZES -PHILLIES -PHILLIP -PHILLIPS -PHILLY -PHILOSOPHER -PHILOSOPHERS -PHILOSOPHIC -PHILOSOPHICAL -PHILOSOPHICALLY -PHILOSOPHIES -PHILOSOPHIZE -PHILOSOPHIZED -PHILOSOPHIZER -PHILOSOPHIZERS -PHILOSOPHIZES -PHILOSOPHIZING -PHILOSOPHY -PHIPPS -PHOBOS -PHOENICIA -PHOENIX -PHONE -PHONED -PHONEME -PHONEMES -PHONEMIC -PHONES -PHONETIC -PHONETICS -PHONING -PHONOGRAPH -PHONOGRAPHS -PHONY -PHOSGENE -PHOSPHATE -PHOSPHATES -PHOSPHOR -PHOSPHORESCENT -PHOSPHORIC -PHOSPHORUS -PHOTO -PHOTOCOPIED -PHOTOCOPIER -PHOTOCOPIERS -PHOTOCOPIES -PHOTOCOPY -PHOTOCOPYING -PHOTODIODE -PHOTODIODES -PHOTOGENIC -PHOTOGRAPH -PHOTOGRAPHED -PHOTOGRAPHER -PHOTOGRAPHERS -PHOTOGRAPHIC -PHOTOGRAPHING -PHOTOGRAPHS -PHOTOGRAPHY -PHOTON -PHOTOS -PHOTOSENSITIVE -PHOTOTYPESETTER -PHOTOTYPESETTERS -PHRASE -PHRASED -PHRASEOLOGY -PHRASES -PHRASING -PHRASINGS -PHYLA -PHYLLIS -PHYLUM -PHYSIC -PHYSICAL -PHYSICALLY -PHYSICALNESS -PHYSICALS -PHYSICIAN -PHYSICIANS -PHYSICIST -PHYSICISTS -PHYSICS -PHYSIOLOGICAL -PHYSIOLOGICALLY -PHYSIOLOGY -PHYSIOTHERAPIST -PHYSIOTHERAPY -PHYSIQUE -PHYTOPLANKTON -PIANIST -PIANO -PIANOS -PICA -PICAS -PICASSO -PICAYUNE -PICCADILLY -PICCOLO -PICK -PICKAXE -PICKED -PICKER -PICKERING -PICKERS -PICKET -PICKETED -PICKETER -PICKETERS -PICKETING -PICKETS -PICKETT -PICKFORD -PICKING -PICKINGS -PICKLE -PICKLED -PICKLES -PICKLING -PICKMAN -PICKS -PICKUP -PICKUPS -PICKY -PICNIC -PICNICKED -PICNICKING -PICNICS -PICOFARAD -PICOJOULE -PICOSECOND -PICT -PICTORIAL -PICTORIALLY -PICTURE -PICTURED -PICTURES -PICTURESQUE -PICTURESQUENESS -PICTURING -PIDDLE -PIDGIN -PIE -PIECE -PIECED -PIECEMEAL -PIECES -PIECEWISE -PIECING -PIEDFORT -PIEDMONT -PIER -PIERCE -PIERCED -PIERCES -PIERCING -PIERRE -PIERS -PIERSON -PIES -PIETY -PIEZOELECTRIC -PIG -PIGEON -PIGEONHOLE -PIGEONS -PIGGISH -PIGGY -PIGGYBACK -PIGGYBACKED -PIGGYBACKING -PIGGYBACKS -PIGMENT -PIGMENTATION -PIGMENTED -PIGMENTS -PIGPEN -PIGS -PIGSKIN -PIGTAIL -PIKE -PIKER -PIKES -PILATE -PILE -PILED -PILERS -PILES -PILFER -PILFERAGE -PILGRIM -PILGRIMAGE -PILGRIMAGES -PILGRIMS -PILING -PILINGS -PILL -PILLAGE -PILLAGED -PILLAR -PILLARED -PILLARS -PILLORY -PILLOW -PILLOWS -PILLS -PILLSBURY -PILOT -PILOTING -PILOTS -PIMP -PIMPLE -PIN -PINAFORE -PINBALL -PINCH -PINCHED -PINCHES -PINCHING -PINCUSHION -PINE -PINEAPPLE -PINEAPPLES -PINED -PINEHURST -PINES -PING -PINHEAD -PINHOLE -PINING -PINION -PINK -PINKER -PINKEST -PINKIE -PINKISH -PINKLY -PINKNESS -PINKS -PINNACLE -PINNACLES -PINNED -PINNING -PINNINGS -PINOCHLE -PINPOINT -PINPOINTING -PINPOINTS -PINS -PINSCHER -PINSKY -PINT -PINTO -PINTS -PINWHEEL -PION -PIONEER -PIONEERED -PIONEERING -PIONEERS -PIOTR -PIOUS -PIOUSLY -PIP -PIPE -PIPED -PIPELINE -PIPELINED -PIPELINES -PIPELINING -PIPER -PIPERS -PIPES -PIPESTONE -PIPETTE -PIPING -PIQUE -PIRACY -PIRAEUS -PIRATE -PIRATES -PISA -PISCATAWAY -PISCES -PISS -PISTACHIO -PISTIL -PISTILS -PISTOL -PISTOLS -PISTON -PISTONS -PIT -PITCH -PITCHED -PITCHER -PITCHERS -PITCHES -PITCHFORK -PITCHING -PITEOUS -PITEOUSLY -PITFALL -PITFALLS -PITH -PITHED -PITHES -PITHIER -PITHIEST -PITHINESS -PITHING -PITHY -PITIABLE -PITIED -PITIER -PITIERS -PITIES -PITIFUL -PITIFULLY -PITILESS -PITILESSLY -PITNEY -PITS -PITT -PITTED -PITTSBURGH -PITTSBURGHERS -PITTSFIELD -PITTSTON -PITUITARY -PITY -PITYING -PITYINGLY -PIUS -PIVOT -PIVOTAL -PIVOTING -PIVOTS -PIXEL -PIXELS -PIZARRO -PIZZA -PLACARD -PLACARDS -PLACATE -PLACE -PLACEBO -PLACED -PLACEHOLDER -PLACEMENT -PLACEMENTS -PLACENTA -PLACENTAL -PLACER -PLACES -PLACID -PLACIDLY -PLACING -PLAGIARISM -PLAGIARIST -PLAGUE -PLAGUED -PLAGUES -PLAGUING -PLAID -PLAIDS -PLAIN -PLAINER -PLAINEST -PLAINFIELD -PLAINLY -PLAINNESS -PLAINS -PLAINTEXT -PLAINTEXTS -PLAINTIFF -PLAINTIFFS -PLAINTIVE -PLAINTIVELY -PLAINTIVENESS -PLAINVIEW -PLAIT -PLAITS -PLAN -PLANAR -PLANARITY -PLANCK -PLANE -PLANED -PLANELOAD -PLANER -PLANERS -PLANES -PLANET -PLANETARIA -PLANETARIUM -PLANETARY -PLANETESIMAL -PLANETOID -PLANETS -PLANING -PLANK -PLANKING -PLANKS -PLANKTON -PLANNED -PLANNER -PLANNERS -PLANNING -PLANOCONCAVE -PLANOCONVEX -PLANS -PLANT -PLANTATION -PLANTATIONS -PLANTED -PLANTER -PLANTERS -PLANTING -PLANTINGS -PLANTS -PLAQUE -PLASMA -PLASTER -PLASTERED -PLASTERER -PLASTERING -PLASTERS -PLASTIC -PLASTICITY -PLASTICS -PLATE -PLATEAU -PLATEAUS -PLATED -PLATELET -PLATELETS -PLATEN -PLATENS -PLATES -PLATFORM -PLATFORMS -PLATING -PLATINUM -PLATITUDE -PLATO -PLATONIC -PLATONISM -PLATONIST -PLATOON -PLATTE -PLATTER -PLATTERS -PLATTEVILLE -PLAUSIBILITY -PLAUSIBLE -PLAY -PLAYABLE -PLAYBACK -PLAYBOY -PLAYED -PLAYER -PLAYERS -PLAYFUL -PLAYFULLY -PLAYFULNESS -PLAYGROUND -PLAYGROUNDS -PLAYHOUSE -PLAYING -PLAYMATE -PLAYMATES -PLAYOFF -PLAYROOM -PLAYS -PLAYTHING -PLAYTHINGS -PLAYTIME -PLAYWRIGHT -PLAYWRIGHTS -PLAYWRITING -PLAZA -PLEA -PLEAD -PLEADED -PLEADER -PLEADING -PLEADS -PLEAS -PLEASANT -PLEASANTLY -PLEASANTNESS -PLEASE -PLEASED -PLEASES -PLEASING -PLEASINGLY -PLEASURE -PLEASURES -PLEAT -PLEBEIAN -PLEBIAN -PLEBISCITE -PLEBISCITES -PLEDGE -PLEDGED -PLEDGES -PLEIADES -PLEISTOCENE -PLENARY -PLENIPOTENTIARY -PLENTEOUS -PLENTIFUL -PLENTIFULLY -PLENTY -PLETHORA -PLEURISY -PLEXIGLAS -PLIABLE -PLIANT -PLIED -PLIERS -PLIES -PLIGHT -PLINY -PLIOCENE -PLOD -PLODDING -PLOT -PLOTS -PLOTTED -PLOTTER -PLOTTERS -PLOTTING -PLOW -PLOWED -PLOWER -PLOWING -PLOWMAN -PLOWS -PLOWSHARE -PLOY -PLOYS -PLUCK -PLUCKED -PLUCKING -PLUCKS -PLUCKY -PLUG -PLUGGABLE -PLUGGED -PLUGGING -PLUGS -PLUM -PLUMAGE -PLUMB -PLUMBED -PLUMBING -PLUMBS -PLUME -PLUMED -PLUMES -PLUMMET -PLUMMETING -PLUMP -PLUMPED -PLUMPNESS -PLUMS -PLUNDER -PLUNDERED -PLUNDERER -PLUNDERERS -PLUNDERING -PLUNDERS -PLUNGE -PLUNGED -PLUNGER -PLUNGERS -PLUNGES -PLUNGING -PLUNK -PLURAL -PLURALITY -PLURALS -PLUS -PLUSES -PLUSH -PLUTARCH -PLUTO -PLUTONIUM -PLY -PLYMOUTH -PLYWOOD -PNEUMATIC -PNEUMONIA -POACH -POACHER -POACHES -POCAHONTAS -POCKET -POCKETBOOK -POCKETBOOKS -POCKETED -POCKETFUL -POCKETING -POCKETS -POCONO -POCONOS -POD -PODIA -PODIUM -PODS -PODUNK -POE -POEM -POEMS -POET -POETIC -POETICAL -POETICALLY -POETICS -POETRIES -POETRY -POETS -POGO -POGROM -POIGNANCY -POIGNANT -POINCARE -POINDEXTER -POINT -POINTED -POINTEDLY -POINTER -POINTERS -POINTING -POINTLESS -POINTS -POINTY -POISE -POISED -POISES -POISON -POISONED -POISONER -POISONING -POISONOUS -POISONOUSNESS -POISONS -POISSON -POKE -POKED -POKER -POKERFACE -POKES -POKING -POLAND -POLAR -POLARIS -POLARITIES -POLARITY -POLAROID -POLE -POLECAT -POLED -POLEMIC -POLEMICS -POLES -POLICE -POLICED -POLICEMAN -POLICEMEN -POLICES -POLICIES -POLICING -POLICY -POLING -POLIO -POLISH -POLISHED -POLISHER -POLISHERS -POLISHES -POLISHING -POLITBURO -POLITE -POLITELY -POLITENESS -POLITER -POLITEST -POLITIC -POLITICAL -POLITICALLY -POLITICIAN -POLITICIANS -POLITICKING -POLITICS -POLK -POLKA -POLL -POLLARD -POLLED -POLLEN -POLLING -POLLOI -POLLS -POLLUTANT -POLLUTE -POLLUTED -POLLUTES -POLLUTING -POLLUTION -POLLUX -POLO -POLYALPHABETIC -POLYGON -POLYGONS -POLYHYMNIA -POLYMER -POLYMERS -POLYMORPHIC -POLYNESIA -POLYNESIAN -POLYNOMIAL -POLYNOMIALS -POLYPHEMUS -POLYTECHNIC -POLYTHEIST -POMERANIA -POMERANIAN -POMONA -POMP -POMPADOUR -POMPEII -POMPEY -POMPOSITY -POMPOUS -POMPOUSLY -POMPOUSNESS -PONCE -PONCHARTRAIN -PONCHO -POND -PONDER -PONDERED -PONDERING -PONDEROUS -PONDERS -PONDS -PONG -PONIES -PONTIAC -PONTIFF -PONTIFIC -PONTIFICATE -PONY -POOCH -POODLE -POOL -POOLE -POOLED -POOLING -POOLS -POOR -POORER -POOREST -POORLY -POORNESS -POP -POPCORN -POPE -POPEK -POPEKS -POPISH -POPLAR -POPLIN -POPPED -POPPIES -POPPING -POPPY -POPS -POPSICLE -POPSICLES -POPULACE -POPULAR -POPULARITY -POPULARIZATION -POPULARIZE -POPULARIZED -POPULARIZES -POPULARIZING -POPULARLY -POPULATE -POPULATED -POPULATES -POPULATING -POPULATION -POPULATIONS -POPULOUS -POPULOUSNESS -PORCELAIN -PORCH -PORCHES -PORCINE -PORCUPINE -PORCUPINES -PORE -PORED -PORES -PORING -PORK -PORKER -PORNOGRAPHER -PORNOGRAPHIC -PORNOGRAPHY -POROUS -PORPOISE -PORRIDGE -PORT -PORTABILITY -PORTABLE -PORTAGE -PORTAL -PORTALS -PORTE -PORTED -PORTEND -PORTENDED -PORTENDING -PORTENDS -PORTENT -PORTENTOUS -PORTER -PORTERHOUSE -PORTERS -PORTFOLIO -PORTFOLIOS -PORTIA -PORTICO -PORTING -PORTION -PORTIONS -PORTLAND -PORTLY -PORTMANTEAU -PORTO -PORTRAIT -PORTRAITS -PORTRAY -PORTRAYAL -PORTRAYED -PORTRAYING -PORTRAYS -PORTS -PORTSMOUTH -PORTUGAL -PORTUGUESE -POSE -POSED -POSEIDON -POSER -POSERS -POSES -POSH -POSING -POSIT -POSITED -POSITING -POSITION -POSITIONAL -POSITIONED -POSITIONING -POSITIONS -POSITIVE -POSITIVELY -POSITIVENESS -POSITIVES -POSITRON -POSITS -POSNER -POSSE -POSSESS -POSSESSED -POSSESSES -POSSESSING -POSSESSION -POSSESSIONAL -POSSESSIONS -POSSESSIVE -POSSESSIVELY -POSSESSIVENESS -POSSESSOR -POSSESSORS -POSSIBILITIES -POSSIBILITY -POSSIBLE -POSSIBLY -POSSUM -POSSUMS -POST -POSTAGE -POSTAL -POSTCARD -POSTCONDITION -POSTDOCTORAL -POSTED -POSTER -POSTERIOR -POSTERIORI -POSTERITY -POSTERS -POSTFIX -POSTGRADUATE -POSTING -POSTLUDE -POSTMAN -POSTMARK -POSTMASTER -POSTMASTERS -POSTMORTEM -POSTOPERATIVE -POSTORDER -POSTPONE -POSTPONED -POSTPONING -POSTPROCESS -POSTPROCESSOR -POSTS -POSTSCRIPT -POSTSCRIPTS -POSTULATE -POSTULATED -POSTULATES -POSTULATING -POSTULATION -POSTULATIONS -POSTURE -POSTURES -POT -POTABLE -POTASH -POTASSIUM -POTATO -POTATOES -POTBELLY -POTEMKIN -POTENT -POTENTATE -POTENTATES -POTENTIAL -POTENTIALITIES -POTENTIALITY -POTENTIALLY -POTENTIALS -POTENTIATING -POTENTIOMETER -POTENTIOMETERS -POTHOLE -POTION -POTLATCH -POTOMAC -POTPOURRI -POTS -POTSDAM -POTTAWATOMIE -POTTED -POTTER -POTTERS -POTTERY -POTTING -POTTS -POUCH -POUCHES -POUGHKEEPSIE -POULTICE -POULTRY -POUNCE -POUNCED -POUNCES -POUNCING -POUND -POUNDED -POUNDER -POUNDERS -POUNDING -POUNDS -POUR -POURED -POURER -POURERS -POURING -POURS -POUSSIN -POUSSINS -POUT -POUTED -POUTING -POUTS -POVERTY -POWDER -POWDERED -POWDERING -POWDERPUFF -POWDERS -POWDERY -POWELL -POWER -POWERED -POWERFUL -POWERFULLY -POWERFULNESS -POWERING -POWERLESS -POWERLESSLY -POWERLESSNESS -POWERS -POX -POYNTING -PRACTICABLE -PRACTICABLY -PRACTICAL -PRACTICALITY -PRACTICALLY -PRACTICE -PRACTICED -PRACTICES -PRACTICING -PRACTITIONER -PRACTITIONERS -PRADESH -PRADO -PRAGMATIC -PRAGMATICALLY -PRAGMATICS -PRAGMATISM -PRAGMATIST -PRAGUE -PRAIRIE -PRAISE -PRAISED -PRAISER -PRAISERS -PRAISES -PRAISEWORTHY -PRAISING -PRAISINGLY -PRANCE -PRANCED -PRANCER -PRANCING -PRANK -PRANKS -PRATE -PRATT -PRATTVILLE -PRAVDA -PRAY -PRAYED -PRAYER -PRAYERS -PRAYING -PREACH -PREACHED -PREACHER -PREACHERS -PREACHES -PREACHING -PREALLOCATE -PREALLOCATED -PREALLOCATING -PREAMBLE -PREAMBLES -PREASSIGN -PREASSIGNED -PREASSIGNING -PREASSIGNS -PRECAMBRIAN -PRECARIOUS -PRECARIOUSLY -PRECARIOUSNESS -PRECAUTION -PRECAUTIONS -PRECEDE -PRECEDED -PRECEDENCE -PRECEDENCES -PRECEDENT -PRECEDENTED -PRECEDENTS -PRECEDES -PRECEDING -PRECEPT -PRECEPTS -PRECESS -PRECESSION -PRECINCT -PRECINCTS -PRECIOUS -PRECIOUSLY -PRECIOUSNESS -PRECIPICE -PRECIPITABLE -PRECIPITATE -PRECIPITATED -PRECIPITATELY -PRECIPITATENESS -PRECIPITATES -PRECIPITATING -PRECIPITATION -PRECIPITOUS -PRECIPITOUSLY -PRECISE -PRECISELY -PRECISENESS -PRECISION -PRECISIONS -PRECLUDE -PRECLUDED -PRECLUDES -PRECLUDING -PRECOCIOUS -PRECOCIOUSLY -PRECOCITY -PRECOMPUTE -PRECOMPUTED -PRECOMPUTING -PRECONCEIVE -PRECONCEIVED -PRECONCEPTION -PRECONCEPTIONS -PRECONDITION -PRECONDITIONED -PRECONDITIONS -PRECURSOR -PRECURSORS -PREDATE -PREDATED -PREDATES -PREDATING -PREDATORY -PREDECESSOR -PREDECESSORS -PREDEFINE -PREDEFINED -PREDEFINES -PREDEFINING -PREDEFINITION -PREDEFINITIONS -PREDETERMINATION -PREDETERMINE -PREDETERMINED -PREDETERMINES -PREDETERMINING -PREDICAMENT -PREDICATE -PREDICATED -PREDICATES -PREDICATING -PREDICATION -PREDICATIONS -PREDICT -PREDICTABILITY -PREDICTABLE -PREDICTABLY -PREDICTED -PREDICTING -PREDICTION -PREDICTIONS -PREDICTIVE -PREDICTOR -PREDICTS -PREDILECTION -PREDILECTIONS -PREDISPOSITION -PREDOMINANT -PREDOMINANTLY -PREDOMINATE -PREDOMINATED -PREDOMINATELY -PREDOMINATES -PREDOMINATING -PREDOMINATION -PREEMINENCE -PREEMINENT -PREEMPT -PREEMPTED -PREEMPTING -PREEMPTION -PREEMPTIVE -PREEMPTOR -PREEMPTS -PREEN -PREEXISTING -PREFAB -PREFABRICATE -PREFACE -PREFACED -PREFACES -PREFACING -PREFER -PREFERABLE -PREFERABLY -PREFERENCE -PREFERENCES -PREFERENTIAL -PREFERENTIALLY -PREFERRED -PREFERRING -PREFERS -PREFIX -PREFIXED -PREFIXES -PREFIXING -PREGNANCY -PREGNANT -PREHISTORIC -PREINITIALIZE -PREINITIALIZED -PREINITIALIZES -PREINITIALIZING -PREJUDGE -PREJUDGED -PREJUDICE -PREJUDICED -PREJUDICES -PREJUDICIAL -PRELATE -PRELIMINARIES -PRELIMINARY -PRELUDE -PRELUDES -PREMATURE -PREMATURELY -PREMATURITY -PREMEDITATED -PREMEDITATION -PREMIER -PREMIERS -PREMISE -PREMISES -PREMIUM -PREMIUMS -PREMONITION -PRENATAL -PRENTICE -PRENTICED -PRENTICING -PREOCCUPATION -PREOCCUPIED -PREOCCUPIES -PREOCCUPY -PREP -PREPARATION -PREPARATIONS -PREPARATIVE -PREPARATIVES -PREPARATORY -PREPARE -PREPARED -PREPARES -PREPARING -PREPEND -PREPENDED -PREPENDING -PREPOSITION -PREPOSITIONAL -PREPOSITIONS -PREPOSTEROUS -PREPOSTEROUSLY -PREPROCESSED -PREPROCESSING -PREPROCESSOR -PREPROCESSORS -PREPRODUCTION -PREPROGRAMMED -PREREQUISITE -PREREQUISITES -PREROGATIVE -PREROGATIVES -PRESBYTERIAN -PRESBYTERIANISM -PRESBYTERIANIZE -PRESBYTERIANIZES -PRESCOTT -PRESCRIBE -PRESCRIBED -PRESCRIBES -PRESCRIPTION -PRESCRIPTIONS -PRESCRIPTIVE -PRESELECT -PRESELECTED -PRESELECTING -PRESELECTS -PRESENCE -PRESENCES -PRESENT -PRESENTATION -PRESENTATIONS -PRESENTED -PRESENTER -PRESENTING -PRESENTLY -PRESENTNESS -PRESENTS -PRESERVATION -PRESERVATIONS -PRESERVE -PRESERVED -PRESERVER -PRESERVERS -PRESERVES -PRESERVING -PRESET -PRESIDE -PRESIDED -PRESIDENCY -PRESIDENT -PRESIDENTIAL -PRESIDENTS -PRESIDES -PRESIDING -PRESLEY -PRESS -PRESSED -PRESSER -PRESSES -PRESSING -PRESSINGS -PRESSURE -PRESSURED -PRESSURES -PRESSURING -PRESSURIZE -PRESSURIZED -PRESTIDIGITATE -PRESTIGE -PRESTIGIOUS -PRESTON -PRESUMABLY -PRESUME -PRESUMED -PRESUMES -PRESUMING -PRESUMPTION -PRESUMPTIONS -PRESUMPTIVE -PRESUMPTUOUS -PRESUMPTUOUSNESS -PRESUPPOSE -PRESUPPOSED -PRESUPPOSES -PRESUPPOSING -PRESUPPOSITION -PRETEND -PRETENDED -PRETENDER -PRETENDERS -PRETENDING -PRETENDS -PRETENSE -PRETENSES -PRETENSION -PRETENSIONS -PRETENTIOUS -PRETENTIOUSLY -PRETENTIOUSNESS -PRETEXT -PRETEXTS -PRETORIA -PRETORIAN -PRETTIER -PRETTIEST -PRETTILY -PRETTINESS -PRETTY -PREVAIL -PREVAILED -PREVAILING -PREVAILINGLY -PREVAILS -PREVALENCE -PREVALENT -PREVALENTLY -PREVENT -PREVENTABLE -PREVENTABLY -PREVENTED -PREVENTING -PREVENTION -PREVENTIVE -PREVENTIVES -PREVENTS -PREVIEW -PREVIEWED -PREVIEWING -PREVIEWS -PREVIOUS -PREVIOUSLY -PREY -PREYED -PREYING -PREYS -PRIAM -PRICE -PRICED -PRICELESS -PRICER -PRICERS -PRICES -PRICING -PRICK -PRICKED -PRICKING -PRICKLY -PRICKS -PRIDE -PRIDED -PRIDES -PRIDING -PRIEST -PRIESTLEY -PRIGGISH -PRIM -PRIMA -PRIMACY -PRIMAL -PRIMARIES -PRIMARILY -PRIMARY -PRIMATE -PRIME -PRIMED -PRIMENESS -PRIMER -PRIMERS -PRIMES -PRIMEVAL -PRIMING -PRIMITIVE -PRIMITIVELY -PRIMITIVENESS -PRIMITIVES -PRIMROSE -PRINCE -PRINCELY -PRINCES -PRINCESS -PRINCESSES -PRINCETON -PRINCIPAL -PRINCIPALITIES -PRINCIPALITY -PRINCIPALLY -PRINCIPALS -PRINCIPIA -PRINCIPLE -PRINCIPLED -PRINCIPLES -PRINT -PRINTABLE -PRINTABLY -PRINTED -PRINTER -PRINTERS -PRINTING -PRINTOUT -PRINTS -PRIOR -PRIORI -PRIORITIES -PRIORITY -PRIORY -PRISCILLA -PRISM -PRISMS -PRISON -PRISONER -PRISONERS -PRISONS -PRISTINE -PRITCHARD -PRIVACIES -PRIVACY -PRIVATE -PRIVATELY -PRIVATES -PRIVATION -PRIVATIONS -PRIVIES -PRIVILEGE -PRIVILEGED -PRIVILEGES -PRIVY -PRIZE -PRIZED -PRIZER -PRIZERS -PRIZES -PRIZEWINNING -PRIZING -PRO -PROBABILISTIC -PROBABILISTICALLY -PROBABILITIES -PROBABILITY -PROBABLE -PROBABLY -PROBATE -PROBATED -PROBATES -PROBATING -PROBATION -PROBATIVE -PROBE -PROBED -PROBES -PROBING -PROBINGS -PROBITY -PROBLEM -PROBLEMATIC -PROBLEMATICAL -PROBLEMATICALLY -PROBLEMS -PROCAINE -PROCEDURAL -PROCEDURALLY -PROCEDURE -PROCEDURES -PROCEED -PROCEEDED -PROCEEDING -PROCEEDINGS -PROCEEDS -PROCESS -PROCESSED -PROCESSES -PROCESSING -PROCESSION -PROCESSOR -PROCESSORS -PROCLAIM -PROCLAIMED -PROCLAIMER -PROCLAIMERS -PROCLAIMING -PROCLAIMS -PROCLAMATION -PROCLAMATIONS -PROCLIVITIES -PROCLIVITY -PROCOTOLS -PROCRASTINATE -PROCRASTINATED -PROCRASTINATES -PROCRASTINATING -PROCRASTINATION -PROCREATE -PROCRUSTEAN -PROCRUSTEANIZE -PROCRUSTEANIZES -PROCRUSTES -PROCTER -PROCURE -PROCURED -PROCUREMENT -PROCUREMENTS -PROCURER -PROCURERS -PROCURES -PROCURING -PROCYON -PROD -PRODIGAL -PRODIGALLY -PRODIGIOUS -PRODIGY -PRODUCE -PRODUCED -PRODUCER -PRODUCERS -PRODUCES -PRODUCIBLE -PRODUCING -PRODUCT -PRODUCTION -PRODUCTIONS -PRODUCTIVE -PRODUCTIVELY -PRODUCTIVITY -PRODUCTS -PROFANE -PROFANELY -PROFESS -PROFESSED -PROFESSES -PROFESSING -PROFESSION -PROFESSIONAL -PROFESSIONALISM -PROFESSIONALLY -PROFESSIONALS -PROFESSIONS -PROFESSOR -PROFESSORIAL -PROFESSORS -PROFFER -PROFFERED -PROFFERS -PROFICIENCY -PROFICIENT -PROFICIENTLY -PROFILE -PROFILED -PROFILES -PROFILING -PROFIT -PROFITABILITY -PROFITABLE -PROFITABLY -PROFITED -PROFITEER -PROFITEERS -PROFITING -PROFITS -PROFITTED -PROFLIGATE -PROFOUND -PROFOUNDEST -PROFOUNDLY -PROFUNDITY -PROFUSE -PROFUSION -PROGENITOR -PROGENY -PROGNOSIS -PROGNOSTICATE -PROGRAM -PROGRAMMABILITY -PROGRAMMABLE -PROGRAMMED -PROGRAMMER -PROGRAMMERS -PROGRAMMING -PROGRAMS -PROGRESS -PROGRESSED -PROGRESSES -PROGRESSING -PROGRESSION -PROGRESSIONS -PROGRESSIVE -PROGRESSIVELY -PROHIBIT -PROHIBITED -PROHIBITING -PROHIBITION -PROHIBITIONS -PROHIBITIVE -PROHIBITIVELY -PROHIBITORY -PROHIBITS -PROJECT -PROJECTED -PROJECTILE -PROJECTING -PROJECTION -PROJECTIONS -PROJECTIVE -PROJECTIVELY -PROJECTOR -PROJECTORS -PROJECTS -PROKOFIEFF -PROKOFIEV -PROLATE -PROLEGOMENA -PROLETARIAT -PROLIFERATE -PROLIFERATED -PROLIFERATES -PROLIFERATING -PROLIFERATION -PROLIFIC -PROLIX -PROLOG -PROLOGUE -PROLONG -PROLONGATE -PROLONGED -PROLONGING -PROLONGS -PROMENADE -PROMENADES -PROMETHEAN -PROMETHEUS -PROMINENCE -PROMINENT -PROMINENTLY -PROMISCUOUS -PROMISE -PROMISED -PROMISES -PROMISING -PROMONTORY -PROMOTE -PROMOTED -PROMOTER -PROMOTERS -PROMOTES -PROMOTING -PROMOTION -PROMOTIONAL -PROMOTIONS -PROMPT -PROMPTED -PROMPTER -PROMPTEST -PROMPTING -PROMPTINGS -PROMPTLY -PROMPTNESS -PROMPTS -PROMULGATE -PROMULGATED -PROMULGATES -PROMULGATING -PROMULGATION -PRONE -PRONENESS -PRONG -PRONGED -PRONGS -PRONOUN -PRONOUNCE -PRONOUNCEABLE -PRONOUNCED -PRONOUNCEMENT -PRONOUNCEMENTS -PRONOUNCES -PRONOUNCING -PRONOUNS -PRONUNCIATION -PRONUNCIATIONS -PROOF -PROOFREAD -PROOFREADER -PROOFS -PROP -PROPAGANDA -PROPAGANDIST -PROPAGATE -PROPAGATED -PROPAGATES -PROPAGATING -PROPAGATION -PROPAGATIONS -PROPANE -PROPEL -PROPELLANT -PROPELLED -PROPELLER -PROPELLERS -PROPELLING -PROPELS -PROPENSITY -PROPER -PROPERLY -PROPERNESS -PROPERTIED -PROPERTIES -PROPERTY -PROPHECIES -PROPHECY -PROPHESIED -PROPHESIER -PROPHESIES -PROPHESY -PROPHET -PROPHETIC -PROPHETS -PROPITIOUS -PROPONENT -PROPONENTS -PROPORTION -PROPORTIONAL -PROPORTIONALLY -PROPORTIONATELY -PROPORTIONED -PROPORTIONING -PROPORTIONMENT -PROPORTIONS -PROPOS -PROPOSAL -PROPOSALS -PROPOSE -PROPOSED -PROPOSER -PROPOSES -PROPOSING -PROPOSITION -PROPOSITIONAL -PROPOSITIONALLY -PROPOSITIONED -PROPOSITIONING -PROPOSITIONS -PROPOUND -PROPOUNDED -PROPOUNDING -PROPOUNDS -PROPRIETARY -PROPRIETOR -PROPRIETORS -PROPRIETY -PROPS -PROPULSION -PROPULSIONS -PRORATE -PRORATED -PRORATES -PROS -PROSCENIUM -PROSCRIBE -PROSCRIPTION -PROSE -PROSECUTE -PROSECUTED -PROSECUTES -PROSECUTING -PROSECUTION -PROSECUTIONS -PROSECUTOR -PROSELYTIZE -PROSELYTIZED -PROSELYTIZES -PROSELYTIZING -PROSERPINE -PROSODIC -PROSODICS -PROSPECT -PROSPECTED -PROSPECTING -PROSPECTION -PROSPECTIONS -PROSPECTIVE -PROSPECTIVELY -PROSPECTIVES -PROSPECTOR -PROSPECTORS -PROSPECTS -PROSPECTUS -PROSPER -PROSPERED -PROSPERING -PROSPERITY -PROSPEROUS -PROSPERS -PROSTATE -PROSTHETIC -PROSTITUTE -PROSTITUTION -PROSTRATE -PROSTRATION -PROTAGONIST -PROTEAN -PROTECT -PROTECTED -PROTECTING -PROTECTION -PROTECTIONS -PROTECTIVE -PROTECTIVELY -PROTECTIVENESS -PROTECTOR -PROTECTORATE -PROTECTORS -PROTECTS -PROTEGE -PROTEGES -PROTEIN -PROTEINS -PROTEST -PROTESTANT -PROTESTANTISM -PROTESTANTIZE -PROTESTANTIZES -PROTESTATION -PROTESTATIONS -PROTESTED -PROTESTING -PROTESTINGLY -PROTESTOR -PROTESTS -PROTISTA -PROTOCOL -PROTOCOLS -PROTON -PROTONS -PROTOPHYTA -PROTOPLASM -PROTOTYPE -PROTOTYPED -PROTOTYPES -PROTOTYPICAL -PROTOTYPICALLY -PROTOTYPING -PROTOZOA -PROTOZOAN -PROTRACT -PROTRUDE -PROTRUDED -PROTRUDES -PROTRUDING -PROTRUSION -PROTRUSIONS -PROTUBERANT -PROUD -PROUDER -PROUDEST -PROUDLY -PROUST -PROVABILITY -PROVABLE -PROVABLY -PROVE -PROVED -PROVEN -PROVENANCE -PROVENCE -PROVER -PROVERB -PROVERBIAL -PROVERBS -PROVERS -PROVES -PROVIDE -PROVIDED -PROVIDENCE -PROVIDENT -PROVIDER -PROVIDERS -PROVIDES -PROVIDING -PROVINCE -PROVINCES -PROVINCIAL -PROVING -PROVISION -PROVISIONAL -PROVISIONALLY -PROVISIONED -PROVISIONING -PROVISIONS -PROVISO -PROVOCATION -PROVOKE -PROVOKED -PROVOKES -PROVOST -PROW -PROWESS -PROWL -PROWLED -PROWLER -PROWLERS -PROWLING -PROWS -PROXIMAL -PROXIMATE -PROXIMITY -PROXMIRE -PROXY -PRUDENCE -PRUDENT -PRUDENTIAL -PRUDENTLY -PRUNE -PRUNED -PRUNER -PRUNERS -PRUNES -PRUNING -PRURIENT -PRUSSIA -PRUSSIAN -PRUSSIANIZATION -PRUSSIANIZATIONS -PRUSSIANIZE -PRUSSIANIZER -PRUSSIANIZERS -PRUSSIANIZES -PRY -PRYING -PSALM -PSALMS -PSEUDO -PSEUDOFILES -PSEUDOINSTRUCTION -PSEUDOINSTRUCTIONS -PSEUDONYM -PSEUDOPARALLELISM -PSILOCYBIN -PSYCH -PSYCHE -PSYCHEDELIC -PSYCHES -PSYCHIATRIC -PSYCHIATRIST -PSYCHIATRISTS -PSYCHIATRY -PSYCHIC -PSYCHO -PSYCHOANALYSIS -PSYCHOANALYST -PSYCHOANALYTIC -PSYCHOBIOLOGY -PSYCHOLOGICAL -PSYCHOLOGICALLY -PSYCHOLOGIST -PSYCHOLOGISTS -PSYCHOLOGY -PSYCHOPATH -PSYCHOPATHIC -PSYCHOPHYSIC -PSYCHOSES -PSYCHOSIS -PSYCHOSOCIAL -PSYCHOSOMATIC -PSYCHOTHERAPEUTIC -PSYCHOTHERAPIST -PSYCHOTHERAPY -PSYCHOTIC -PTOLEMAIC -PTOLEMAISTS -PTOLEMY -PUB -PUBERTY -PUBLIC -PUBLICATION -PUBLICATIONS -PUBLICITY -PUBLICIZE -PUBLICIZED -PUBLICIZES -PUBLICIZING -PUBLICLY -PUBLISH -PUBLISHED -PUBLISHER -PUBLISHERS -PUBLISHES -PUBLISHING -PUBS -PUCCINI -PUCKER -PUCKERED -PUCKERING -PUCKERS -PUDDING -PUDDINGS -PUDDLE -PUDDLES -PUDDLING -PUERTO -PUFF -PUFFED -PUFFIN -PUFFING -PUFFS -PUGH -PUKE -PULASKI -PULITZER -PULL -PULLED -PULLER -PULLEY -PULLEYS -PULLING -PULLINGS -PULLMAN -PULLMANIZE -PULLMANIZES -PULLMANS -PULLOVER -PULLS -PULMONARY -PULP -PULPING -PULPIT -PULPITS -PULSAR -PULSATE -PULSATION -PULSATIONS -PULSE -PULSED -PULSES -PULSING -PUMA -PUMICE -PUMMEL -PUMP -PUMPED -PUMPING -PUMPKIN -PUMPKINS -PUMPS -PUN -PUNCH -PUNCHED -PUNCHER -PUNCHES -PUNCHING -PUNCTUAL -PUNCTUALLY -PUNCTUATION -PUNCTURE -PUNCTURED -PUNCTURES -PUNCTURING -PUNDIT -PUNGENT -PUNIC -PUNISH -PUNISHABLE -PUNISHED -PUNISHES -PUNISHING -PUNISHMENT -PUNISHMENTS -PUNITIVE -PUNJAB -PUNJABI -PUNS -PUNT -PUNTED -PUNTING -PUNTS -PUNY -PUP -PUPA -PUPIL -PUPILS -PUPPET -PUPPETEER -PUPPETS -PUPPIES -PUPPY -PUPS -PURCELL -PURCHASE -PURCHASED -PURCHASER -PURCHASERS -PURCHASES -PURCHASING -PURDUE -PURE -PURELY -PURER -PUREST -PURGATORY -PURGE -PURGED -PURGES -PURGING -PURIFICATION -PURIFICATIONS -PURIFIED -PURIFIER -PURIFIERS -PURIFIES -PURIFY -PURIFYING -PURINA -PURIST -PURITAN -PURITANIC -PURITANIZE -PURITANIZER -PURITANIZERS -PURITANIZES -PURITY -PURPLE -PURPLER -PURPLEST -PURPORT -PURPORTED -PURPORTEDLY -PURPORTER -PURPORTERS -PURPORTING -PURPORTS -PURPOSE -PURPOSED -PURPOSEFUL -PURPOSEFULLY -PURPOSELY -PURPOSES -PURPOSIVE -PURR -PURRED -PURRING -PURRS -PURSE -PURSED -PURSER -PURSES -PURSUANT -PURSUE -PURSUED -PURSUER -PURSUERS -PURSUES -PURSUING -PURSUIT -PURSUITS -PURVEYOR -PURVIEW -PUS -PUSAN -PUSEY -PUSH -PUSHBUTTON -PUSHDOWN -PUSHED -PUSHER -PUSHERS -PUSHES -PUSHING -PUSS -PUSSY -PUSSYCAT -PUT -PUTNAM -PUTS -PUTT -PUTTER -PUTTERING -PUTTERS -PUTTING -PUTTY -PUZZLE -PUZZLED -PUZZLEMENT -PUZZLER -PUZZLERS -PUZZLES -PUZZLING -PUZZLINGS -PYGMALION -PYGMIES -PYGMY -PYLE -PYONGYANG -PYOTR -PYRAMID -PYRAMIDS -PYRE -PYREX -PYRRHIC -PYTHAGORAS -PYTHAGOREAN -PYTHAGOREANIZE -PYTHAGOREANIZES -PYTHAGOREANS -PYTHON -QATAR -QUA -QUACK -QUACKED -QUACKERY -QUACKS -QUAD -QUADRANGLE -QUADRANGULAR -QUADRANT -QUADRANTS -QUADRATIC -QUADRATICAL -QUADRATICALLY -QUADRATICS -QUADRATURE -QUADRATURES -QUADRENNIAL -QUADRILATERAL -QUADRILLION -QUADRUPLE -QUADRUPLED -QUADRUPLES -QUADRUPLING -QUADRUPOLE -QUAFF -QUAGMIRE -QUAGMIRES -QUAHOG -QUAIL -QUAILS -QUAINT -QUAINTLY -QUAINTNESS -QUAKE -QUAKED -QUAKER -QUAKERESS -QUAKERIZATION -QUAKERIZATIONS -QUAKERIZE -QUAKERIZES -QUAKERS -QUAKES -QUAKING -QUALIFICATION -QUALIFICATIONS -QUALIFIED -QUALIFIER -QUALIFIERS -QUALIFIES -QUALIFY -QUALIFYING -QUALITATIVE -QUALITATIVELY -QUALITIES -QUALITY -QUALM -QUANDARIES -QUANDARY -QUANTA -QUANTICO -QUANTIFIABLE -QUANTIFICATION -QUANTIFICATIONS -QUANTIFIED -QUANTIFIER -QUANTIFIERS -QUANTIFIES -QUANTIFY -QUANTIFYING -QUANTILE -QUANTITATIVE -QUANTITATIVELY -QUANTITIES -QUANTITY -QUANTIZATION -QUANTIZE -QUANTIZED -QUANTIZES -QUANTIZING -QUANTUM -QUARANTINE -QUARANTINES -QUARANTINING -QUARK -QUARREL -QUARRELED -QUARRELING -QUARRELS -QUARRELSOME -QUARRIES -QUARRY -QUART -QUARTER -QUARTERBACK -QUARTERED -QUARTERING -QUARTERLY -QUARTERMASTER -QUARTERS -QUARTET -QUARTETS -QUARTILE -QUARTS -QUARTZ -QUARTZITE -QUASAR -QUASH -QUASHED -QUASHES -QUASHING -QUASI -QUASIMODO -QUATERNARY -QUAVER -QUAVERED -QUAVERING -QUAVERS -QUAY -QUEASY -QUEBEC -QUEEN -QUEENLY -QUEENS -QUEENSLAND -QUEER -QUEERER -QUEEREST -QUEERLY -QUEERNESS -QUELL -QUELLING -QUENCH -QUENCHED -QUENCHES -QUENCHING -QUERIED -QUERIES -QUERY -QUERYING -QUEST -QUESTED -QUESTER -QUESTERS -QUESTING -QUESTION -QUESTIONABLE -QUESTIONABLY -QUESTIONED -QUESTIONER -QUESTIONERS -QUESTIONING -QUESTIONINGLY -QUESTIONINGS -QUESTIONNAIRE -QUESTIONNAIRES -QUESTIONS -QUESTS -QUEUE -QUEUED -QUEUEING -QUEUER -QUEUERS -QUEUES -QUEUING -QUEZON -QUIBBLE -QUICHUA -QUICK -QUICKEN -QUICKENED -QUICKENING -QUICKENS -QUICKER -QUICKEST -QUICKIE -QUICKLIME -QUICKLY -QUICKNESS -QUICKSAND -QUICKSILVER -QUIESCENT -QUIET -QUIETED -QUIETER -QUIETEST -QUIETING -QUIETLY -QUIETNESS -QUIETS -QUIETUDE -QUILL -QUILT -QUILTED -QUILTING -QUILTS -QUINCE -QUININE -QUINN -QUINT -QUINTET -QUINTILLION -QUIP -QUIRINAL -QUIRK -QUIRKY -QUIT -QUITE -QUITO -QUITS -QUITTER -QUITTERS -QUITTING -QUIVER -QUIVERED -QUIVERING -QUIVERS -QUIXOTE -QUIXOTIC -QUIXOTISM -QUIZ -QUIZZED -QUIZZES -QUIZZICAL -QUIZZING -QUO -QUONSET -QUORUM -QUOTA -QUOTAS -QUOTATION -QUOTATIONS -QUOTE -QUOTED -QUOTES -QUOTH -QUOTIENT -QUOTIENTS -QUOTING -RABAT -RABBI -RABBIT -RABBITS -RABBLE -RABID -RABIES -RABIN -RACCOON -RACCOONS -RACE -RACED -RACER -RACERS -RACES -RACETRACK -RACHEL -RACHMANINOFF -RACIAL -RACIALLY -RACINE -RACING -RACK -RACKED -RACKET -RACKETEER -RACKETEERING -RACKETEERS -RACKETS -RACKING -RACKS -RADAR -RADARS -RADCLIFFE -RADIAL -RADIALLY -RADIAN -RADIANCE -RADIANT -RADIANTLY -RADIATE -RADIATED -RADIATES -RADIATING -RADIATION -RADIATIONS -RADIATOR -RADIATORS -RADICAL -RADICALLY -RADICALS -RADICES -RADII -RADIO -RADIOACTIVE -RADIOASTRONOMY -RADIOED -RADIOGRAPHY -RADIOING -RADIOLOGY -RADIOS -RADISH -RADISHES -RADIUM -RADIUS -RADIX -RADON -RAE -RAFAEL -RAFFERTY -RAFT -RAFTER -RAFTERS -RAFTS -RAG -RAGE -RAGED -RAGES -RAGGED -RAGGEDLY -RAGGEDNESS -RAGING -RAGS -RAGUSAN -RAGWEED -RAID -RAIDED -RAIDER -RAIDERS -RAIDING -RAIDS -RAIL -RAILED -RAILER -RAILERS -RAILING -RAILROAD -RAILROADED -RAILROADER -RAILROADERS -RAILROADING -RAILROADS -RAILS -RAILWAY -RAILWAYS -RAIMENT -RAIN -RAINBOW -RAINCOAT -RAINCOATS -RAINDROP -RAINDROPS -RAINED -RAINFALL -RAINIER -RAINIEST -RAINING -RAINS -RAINSTORM -RAINY -RAISE -RAISED -RAISER -RAISERS -RAISES -RAISIN -RAISING -RAKE -RAKED -RAKES -RAKING -RALEIGH -RALLIED -RALLIES -RALLY -RALLYING -RALPH -RALSTON -RAM -RAMADA -RAMAN -RAMBLE -RAMBLER -RAMBLES -RAMBLING -RAMBLINGS -RAMIFICATION -RAMIFICATIONS -RAMIREZ -RAMO -RAMONA -RAMP -RAMPAGE -RAMPANT -RAMPART -RAMPS -RAMROD -RAMS -RAMSEY -RAN -RANCH -RANCHED -RANCHER -RANCHERS -RANCHES -RANCHING -RANCID -RAND -RANDALL -RANDOLPH -RANDOM -RANDOMIZATION -RANDOMIZE -RANDOMIZED -RANDOMIZES -RANDOMLY -RANDOMNESS -RANDY -RANG -RANGE -RANGED -RANGELAND -RANGER -RANGERS -RANGES -RANGING -RANGOON -RANGY -RANIER -RANK -RANKED -RANKER -RANKERS -RANKEST -RANKIN -RANKINE -RANKING -RANKINGS -RANKLE -RANKLY -RANKNESS -RANKS -RANSACK -RANSACKED -RANSACKING -RANSACKS -RANSOM -RANSOMER -RANSOMING -RANSOMS -RANT -RANTED -RANTER -RANTERS -RANTING -RANTS -RAOUL -RAP -RAPACIOUS -RAPE -RAPED -RAPER -RAPES -RAPHAEL -RAPID -RAPIDITY -RAPIDLY -RAPIDS -RAPIER -RAPING -RAPPORT -RAPPROCHEMENT -RAPS -RAPT -RAPTLY -RAPTURE -RAPTURES -RAPTUROUS -RAPUNZEL -RARE -RARELY -RARENESS -RARER -RAREST -RARITAN -RARITY -RASCAL -RASCALLY -RASCALS -RASH -RASHER -RASHLY -RASHNESS -RASMUSSEN -RASP -RASPBERRY -RASPED -RASPING -RASPS -RASTER -RASTUS -RAT -RATE -RATED -RATER -RATERS -RATES -RATFOR -RATHER -RATIFICATION -RATIFIED -RATIFIES -RATIFY -RATIFYING -RATING -RATINGS -RATIO -RATION -RATIONAL -RATIONALE -RATIONALES -RATIONALITIES -RATIONALITY -RATIONALIZATION -RATIONALIZATIONS -RATIONALIZE -RATIONALIZED -RATIONALIZES -RATIONALIZING -RATIONALLY -RATIONALS -RATIONING -RATIONS -RATIOS -RATS -RATTLE -RATTLED -RATTLER -RATTLERS -RATTLES -RATTLESNAKE -RATTLESNAKES -RATTLING -RAUCOUS -RAUL -RAVAGE -RAVAGED -RAVAGER -RAVAGERS -RAVAGES -RAVAGING -RAVE -RAVED -RAVEN -RAVENING -RAVENOUS -RAVENOUSLY -RAVENS -RAVES -RAVINE -RAVINES -RAVING -RAVINGS -RAW -RAWER -RAWEST -RAWLINGS -RAWLINS -RAWLINSON -RAWLY -RAWNESS -RAWSON -RAY -RAYBURN -RAYLEIGH -RAYMOND -RAYMONDVILLE -RAYS -RAYTHEON -RAZE -RAZOR -RAZORS -REABBREVIATE -REABBREVIATED -REABBREVIATES -REABBREVIATING -REACH -REACHABILITY -REACHABLE -REACHABLY -REACHED -REACHER -REACHES -REACHING -REACQUIRED -REACT -REACTED -REACTING -REACTION -REACTIONARIES -REACTIONARY -REACTIONS -REACTIVATE -REACTIVATED -REACTIVATES -REACTIVATING -REACTIVATION -REACTIVE -REACTIVELY -REACTIVITY -REACTOR -REACTORS -REACTS -READ -READABILITY -READABLE -READER -READERS -READIED -READIER -READIES -READIEST -READILY -READINESS -READING -READINGS -READJUSTED -READOUT -READOUTS -READS -READY -READYING -REAGAN -REAL -REALEST -REALIGN -REALIGNED -REALIGNING -REALIGNS -REALISM -REALIST -REALISTIC -REALISTICALLY -REALISTS -REALITIES -REALITY -REALIZABLE -REALIZABLY -REALIZATION -REALIZATIONS -REALIZE -REALIZED -REALIZES -REALIZING -REALLOCATE -REALLY -REALM -REALMS -REALNESS -REALS -REALTOR -REAM -REANALYZE -REANALYZES -REANALYZING -REAP -REAPED -REAPER -REAPING -REAPPEAR -REAPPEARED -REAPPEARING -REAPPEARS -REAPPRAISAL -REAPPRAISALS -REAPS -REAR -REARED -REARING -REARRANGE -REARRANGEABLE -REARRANGED -REARRANGEMENT -REARRANGEMENTS -REARRANGES -REARRANGING -REARREST -REARRESTED -REARS -REASON -REASONABLE -REASONABLENESS -REASONABLY -REASONED -REASONER -REASONING -REASONINGS -REASONS -REASSEMBLE -REASSEMBLED -REASSEMBLES -REASSEMBLING -REASSEMBLY -REASSESSMENT -REASSESSMENTS -REASSIGN -REASSIGNED -REASSIGNING -REASSIGNMENT -REASSIGNMENTS -REASSIGNS -REASSURE -REASSURED -REASSURES -REASSURING -REAWAKEN -REAWAKENED -REAWAKENING -REAWAKENS -REBATE -REBATES -REBECCA -REBEL -REBELLED -REBELLING -REBELLION -REBELLIONS -REBELLIOUS -REBELLIOUSLY -REBELLIOUSNESS -REBELS -REBIND -REBINDING -REBINDS -REBOOT -REBOOTED -REBOOTING -REBOOTS -REBOUND -REBOUNDED -REBOUNDING -REBOUNDS -REBROADCAST -REBROADCASTING -REBROADCASTS -REBUFF -REBUFFED -REBUILD -REBUILDING -REBUILDS -REBUILT -REBUKE -REBUKED -REBUKES -REBUKING -REBUTTAL -REBUTTED -REBUTTING -RECALCITRANT -RECALCULATE -RECALCULATED -RECALCULATES -RECALCULATING -RECALCULATION -RECALCULATIONS -RECALIBRATE -RECALIBRATED -RECALIBRATES -RECALIBRATING -RECALL -RECALLED -RECALLING -RECALLS -RECANT -RECAPITULATE -RECAPITULATED -RECAPITULATES -RECAPITULATION -RECAPTURE -RECAPTURED -RECAPTURES -RECAPTURING -RECAST -RECASTING -RECASTS -RECEDE -RECEDED -RECEDES -RECEDING -RECEIPT -RECEIPTS -RECEIVABLE -RECEIVE -RECEIVED -RECEIVER -RECEIVERS -RECEIVES -RECEIVING -RECENT -RECENTLY -RECENTNESS -RECEPTACLE -RECEPTACLES -RECEPTION -RECEPTIONIST -RECEPTIONS -RECEPTIVE -RECEPTIVELY -RECEPTIVENESS -RECEPTIVITY -RECEPTOR -RECESS -RECESSED -RECESSES -RECESSION -RECESSIVE -RECIFE -RECIPE -RECIPES -RECIPIENT -RECIPIENTS -RECIPROCAL -RECIPROCALLY -RECIPROCATE -RECIPROCATED -RECIPROCATES -RECIPROCATING -RECIPROCATION -RECIPROCITY -RECIRCULATE -RECIRCULATED -RECIRCULATES -RECIRCULATING -RECITAL -RECITALS -RECITATION -RECITATIONS -RECITE -RECITED -RECITER -RECITES -RECITING -RECKLESS -RECKLESSLY -RECKLESSNESS -RECKON -RECKONED -RECKONER -RECKONING -RECKONINGS -RECKONS -RECLAIM -RECLAIMABLE -RECLAIMED -RECLAIMER -RECLAIMERS -RECLAIMING -RECLAIMS -RECLAMATION -RECLAMATIONS -RECLASSIFICATION -RECLASSIFIED -RECLASSIFIES -RECLASSIFY -RECLASSIFYING -RECLINE -RECLINING -RECODE -RECODED -RECODES -RECODING -RECOGNITION -RECOGNITIONS -RECOGNIZABILITY -RECOGNIZABLE -RECOGNIZABLY -RECOGNIZE -RECOGNIZED -RECOGNIZER -RECOGNIZERS -RECOGNIZES -RECOGNIZING -RECOIL -RECOILED -RECOILING -RECOILS -RECOLLECT -RECOLLECTED -RECOLLECTING -RECOLLECTION -RECOLLECTIONS -RECOMBINATION -RECOMBINE -RECOMBINED -RECOMBINES -RECOMBINING -RECOMMEND -RECOMMENDATION -RECOMMENDATIONS -RECOMMENDED -RECOMMENDER -RECOMMENDING -RECOMMENDS -RECOMPENSE -RECOMPILE -RECOMPILED -RECOMPILES -RECOMPILING -RECOMPUTE -RECOMPUTED -RECOMPUTES -RECOMPUTING -RECONCILE -RECONCILED -RECONCILER -RECONCILES -RECONCILIATION -RECONCILING -RECONFIGURABLE -RECONFIGURATION -RECONFIGURATIONS -RECONFIGURE -RECONFIGURED -RECONFIGURER -RECONFIGURES -RECONFIGURING -RECONNECT -RECONNECTED -RECONNECTING -RECONNECTION -RECONNECTS -RECONSIDER -RECONSIDERATION -RECONSIDERED -RECONSIDERING -RECONSIDERS -RECONSTITUTED -RECONSTRUCT -RECONSTRUCTED -RECONSTRUCTING -RECONSTRUCTION -RECONSTRUCTS -RECONVERTED -RECONVERTS -RECORD -RECORDED -RECORDER -RECORDERS -RECORDING -RECORDINGS -RECORDS -RECOUNT -RECOUNTED -RECOUNTING -RECOUNTS -RECOURSE -RECOVER -RECOVERABLE -RECOVERED -RECOVERIES -RECOVERING -RECOVERS -RECOVERY -RECREATE -RECREATED -RECREATES -RECREATING -RECREATION -RECREATIONAL -RECREATIONS -RECREATIVE -RECRUIT -RECRUITED -RECRUITER -RECRUITING -RECRUITS -RECTA -RECTANGLE -RECTANGLES -RECTANGULAR -RECTIFY -RECTOR -RECTORS -RECTUM -RECTUMS -RECUPERATE -RECUR -RECURRENCE -RECURRENCES -RECURRENT -RECURRENTLY -RECURRING -RECURS -RECURSE -RECURSED -RECURSES -RECURSING -RECURSION -RECURSIONS -RECURSIVE -RECURSIVELY -RECYCLABLE -RECYCLE -RECYCLED -RECYCLES -RECYCLING -RED -REDBREAST -REDCOAT -REDDEN -REDDENED -REDDER -REDDEST -REDDISH -REDDISHNESS -REDECLARE -REDECLARED -REDECLARES -REDECLARING -REDEEM -REDEEMED -REDEEMER -REDEEMERS -REDEEMING -REDEEMS -REDEFINE -REDEFINED -REDEFINES -REDEFINING -REDEFINITION -REDEFINITIONS -REDEMPTION -REDESIGN -REDESIGNED -REDESIGNING -REDESIGNS -REDEVELOPMENT -REDFORD -REDHEAD -REDHOOK -REDIRECT -REDIRECTED -REDIRECTING -REDIRECTION -REDIRECTIONS -REDISPLAY -REDISPLAYED -REDISPLAYING -REDISPLAYS -REDISTRIBUTE -REDISTRIBUTED -REDISTRIBUTES -REDISTRIBUTING -REDLY -REDMOND -REDNECK -REDNESS -REDO -REDONE -REDOUBLE -REDOUBLED -REDRAW -REDRAWN -REDRESS -REDRESSED -REDRESSES -REDRESSING -REDS -REDSTONE -REDUCE -REDUCED -REDUCER -REDUCERS -REDUCES -REDUCIBILITY -REDUCIBLE -REDUCIBLY -REDUCING -REDUCTION -REDUCTIONS -REDUNDANCIES -REDUNDANCY -REDUNDANT -REDUNDANTLY -REDWOOD -REED -REEDS -REEDUCATION -REEDVILLE -REEF -REEFER -REEFS -REEL -REELECT -REELECTED -REELECTING -REELECTS -REELED -REELER -REELING -REELS -REEMPHASIZE -REEMPHASIZED -REEMPHASIZES -REEMPHASIZING -REENABLED -REENFORCEMENT -REENTER -REENTERED -REENTERING -REENTERS -REENTRANT -REESE -REESTABLISH -REESTABLISHED -REESTABLISHES -REESTABLISHING -REEVALUATE -REEVALUATED -REEVALUATES -REEVALUATING -REEVALUATION -REEVES -REEXAMINE -REEXAMINED -REEXAMINES -REEXAMINING -REEXECUTED -REFER -REFEREE -REFEREED -REFEREEING -REFEREES -REFERENCE -REFERENCED -REFERENCER -REFERENCES -REFERENCING -REFERENDA -REFERENDUM -REFERENDUMS -REFERENT -REFERENTIAL -REFERENTIALITY -REFERENTIALLY -REFERENTS -REFERRAL -REFERRALS -REFERRED -REFERRING -REFERS -REFILL -REFILLABLE -REFILLED -REFILLING -REFILLS -REFINE -REFINED -REFINEMENT -REFINEMENTS -REFINER -REFINERY -REFINES -REFINING -REFLECT -REFLECTED -REFLECTING -REFLECTION -REFLECTIONS -REFLECTIVE -REFLECTIVELY -REFLECTIVITY -REFLECTOR -REFLECTORS -REFLECTS -REFLEX -REFLEXES -REFLEXIVE -REFLEXIVELY -REFLEXIVENESS -REFLEXIVITY -REFORESTATION -REFORM -REFORMABLE -REFORMAT -REFORMATION -REFORMATORY -REFORMATS -REFORMATTED -REFORMATTING -REFORMED -REFORMER -REFORMERS -REFORMING -REFORMS -REFORMULATE -REFORMULATED -REFORMULATES -REFORMULATING -REFORMULATION -REFRACT -REFRACTED -REFRACTION -REFRACTORY -REFRAGMENT -REFRAIN -REFRAINED -REFRAINING -REFRAINS -REFRESH -REFRESHED -REFRESHER -REFRESHERS -REFRESHES -REFRESHING -REFRESHINGLY -REFRESHMENT -REFRESHMENTS -REFRIGERATE -REFRIGERATOR -REFRIGERATORS -REFUEL -REFUELED -REFUELING -REFUELS -REFUGE -REFUGEE -REFUGEES -REFUSAL -REFUSE -REFUSED -REFUSES -REFUSING -REFUTABLE -REFUTATION -REFUTE -REFUTED -REFUTER -REFUTES -REFUTING -REGAIN -REGAINED -REGAINING -REGAINS -REGAL -REGALED -REGALLY -REGARD -REGARDED -REGARDING -REGARDLESS -REGARDS -REGATTA -REGENERATE -REGENERATED -REGENERATES -REGENERATING -REGENERATION -REGENERATIVE -REGENERATOR -REGENERATORS -REGENT -REGENTS -REGIME -REGIMEN -REGIMENT -REGIMENTATION -REGIMENTED -REGIMENTS -REGIMES -REGINA -REGINALD -REGION -REGIONAL -REGIONALLY -REGIONS -REGIS -REGISTER -REGISTERED -REGISTERING -REGISTERS -REGISTRAR -REGISTRATION -REGISTRATIONS -REGISTRY -REGRESS -REGRESSED -REGRESSES -REGRESSING -REGRESSION -REGRESSIONS -REGRESSIVE -REGRET -REGRETFUL -REGRETFULLY -REGRETS -REGRETTABLE -REGRETTABLY -REGRETTED -REGRETTING -REGROUP -REGROUPED -REGROUPING -REGULAR -REGULARITIES -REGULARITY -REGULARLY -REGULARS -REGULATE -REGULATED -REGULATES -REGULATING -REGULATION -REGULATIONS -REGULATIVE -REGULATOR -REGULATORS -REGULATORY -REGULUS -REHABILITATE -REHEARSAL -REHEARSALS -REHEARSE -REHEARSED -REHEARSER -REHEARSES -REHEARSING -REICH -REICHENBERG -REICHSTAG -REID -REIGN -REIGNED -REIGNING -REIGNS -REILLY -REIMBURSABLE -REIMBURSE -REIMBURSED -REIMBURSEMENT -REIMBURSEMENTS -REIN -REINCARNATE -REINCARNATED -REINCARNATION -REINDEER -REINED -REINFORCE -REINFORCED -REINFORCEMENT -REINFORCEMENTS -REINFORCER -REINFORCES -REINFORCING -REINHARD -REINHARDT -REINHOLD -REINITIALIZE -REINITIALIZED -REINITIALIZING -REINS -REINSERT -REINSERTED -REINSERTING -REINSERTS -REINSTATE -REINSTATED -REINSTATEMENT -REINSTATES -REINSTATING -REINTERPRET -REINTERPRETED -REINTERPRETING -REINTERPRETS -REINTRODUCE -REINTRODUCED -REINTRODUCES -REINTRODUCING -REINVENT -REINVENTED -REINVENTING -REINVENTS -REITERATE -REITERATED -REITERATES -REITERATING -REITERATION -REJECT -REJECTED -REJECTING -REJECTION -REJECTIONS -REJECTOR -REJECTORS -REJECTS -REJOICE -REJOICED -REJOICER -REJOICES -REJOICING -REJOIN -REJOINDER -REJOINED -REJOINING -REJOINS -RELABEL -RELABELED -RELABELING -RELABELLED -RELABELLING -RELABELS -RELAPSE -RELATE -RELATED -RELATER -RELATES -RELATING -RELATION -RELATIONAL -RELATIONALLY -RELATIONS -RELATIONSHIP -RELATIONSHIPS -RELATIVE -RELATIVELY -RELATIVENESS -RELATIVES -RELATIVISM -RELATIVISTIC -RELATIVISTICALLY -RELATIVITY -RELAX -RELAXATION -RELAXATIONS -RELAXED -RELAXER -RELAXES -RELAXING -RELAY -RELAYED -RELAYING -RELAYS -RELEASE -RELEASED -RELEASES -RELEASING -RELEGATE -RELEGATED -RELEGATES -RELEGATING -RELENT -RELENTED -RELENTING -RELENTLESS -RELENTLESSLY -RELENTLESSNESS -RELENTS -RELEVANCE -RELEVANCES -RELEVANT -RELEVANTLY -RELIABILITY -RELIABLE -RELIABLY -RELIANCE -RELIANT -RELIC -RELICS -RELIED -RELIEF -RELIES -RELIEVE -RELIEVED -RELIEVER -RELIEVERS -RELIEVES -RELIEVING -RELIGION -RELIGIONS -RELIGIOUS -RELIGIOUSLY -RELIGIOUSNESS -RELINK -RELINQUISH -RELINQUISHED -RELINQUISHES -RELINQUISHING -RELISH -RELISHED -RELISHES -RELISHING -RELIVE -RELIVES -RELIVING -RELOAD -RELOADED -RELOADER -RELOADING -RELOADS -RELOCATABLE -RELOCATE -RELOCATED -RELOCATES -RELOCATING -RELOCATION -RELOCATIONS -RELUCTANCE -RELUCTANT -RELUCTANTLY -RELY -RELYING -REMAIN -REMAINDER -REMAINDERS -REMAINED -REMAINING -REMAINS -REMARK -REMARKABLE -REMARKABLENESS -REMARKABLY -REMARKED -REMARKING -REMARKS -REMBRANDT -REMEDIAL -REMEDIED -REMEDIES -REMEDY -REMEDYING -REMEMBER -REMEMBERED -REMEMBERING -REMEMBERS -REMEMBRANCE -REMEMBRANCES -REMIND -REMINDED -REMINDER -REMINDERS -REMINDING -REMINDS -REMINGTON -REMINISCENCE -REMINISCENCES -REMINISCENT -REMINISCENTLY -REMISS -REMISSION -REMIT -REMITTANCE -REMNANT -REMNANTS -REMODEL -REMODELED -REMODELING -REMODELS -REMONSTRATE -REMONSTRATED -REMONSTRATES -REMONSTRATING -REMONSTRATION -REMONSTRATIVE -REMORSE -REMORSEFUL -REMOTE -REMOTELY -REMOTENESS -REMOTEST -REMOVABLE -REMOVAL -REMOVALS -REMOVE -REMOVED -REMOVER -REMOVES -REMOVING -REMUNERATE -REMUNERATION -REMUS -REMY -RENA -RENAISSANCE -RENAL -RENAME -RENAMED -RENAMES -RENAMING -RENAULT -RENAULTS -REND -RENDER -RENDERED -RENDERING -RENDERINGS -RENDERS -RENDEZVOUS -RENDING -RENDITION -RENDITIONS -RENDS -RENE -RENEE -RENEGADE -RENEGOTIABLE -RENEW -RENEWABLE -RENEWAL -RENEWED -RENEWER -RENEWING -RENEWS -RENO -RENOIR -RENOUNCE -RENOUNCES -RENOUNCING -RENOVATE -RENOVATED -RENOVATION -RENOWN -RENOWNED -RENSSELAER -RENT -RENTAL -RENTALS -RENTED -RENTING -RENTS -RENUMBER -RENUMBERING -RENUMBERS -RENUNCIATE -RENUNCIATION -RENVILLE -REOCCUR -REOPEN -REOPENED -REOPENING -REOPENS -REORDER -REORDERED -REORDERING -REORDERS -REORGANIZATION -REORGANIZATIONS -REORGANIZE -REORGANIZED -REORGANIZES -REORGANIZING -REPACKAGE -REPAID -REPAIR -REPAIRED -REPAIRER -REPAIRING -REPAIRMAN -REPAIRMEN -REPAIRS -REPARATION -REPARATIONS -REPARTEE -REPARTITION -REPAST -REPASTS -REPAY -REPAYING -REPAYS -REPEAL -REPEALED -REPEALER -REPEALING -REPEALS -REPEAT -REPEATABLE -REPEATED -REPEATEDLY -REPEATER -REPEATERS -REPEATING -REPEATS -REPEL -REPELLED -REPELLENT -REPELS -REPENT -REPENTANCE -REPENTED -REPENTING -REPENTS -REPERCUSSION -REPERCUSSIONS -REPERTOIRE -REPERTORY -REPETITION -REPETITIONS -REPETITIOUS -REPETITIVE -REPETITIVELY -REPETITIVENESS -REPHRASE -REPHRASED -REPHRASES -REPHRASING -REPINE -REPLACE -REPLACEABLE -REPLACED -REPLACEMENT -REPLACEMENTS -REPLACER -REPLACES -REPLACING -REPLAY -REPLAYED -REPLAYING -REPLAYS -REPLENISH -REPLENISHED -REPLENISHES -REPLENISHING -REPLETE -REPLETENESS -REPLETION -REPLICA -REPLICAS -REPLICATE -REPLICATED -REPLICATES -REPLICATING -REPLICATION -REPLICATIONS -REPLIED -REPLIES -REPLY -REPLYING -REPORT -REPORTED -REPORTEDLY -REPORTER -REPORTERS -REPORTING -REPORTS -REPOSE -REPOSED -REPOSES -REPOSING -REPOSITION -REPOSITIONED -REPOSITIONING -REPOSITIONS -REPOSITORIES -REPOSITORY -REPREHENSIBLE -REPRESENT -REPRESENTABLE -REPRESENTABLY -REPRESENTATION -REPRESENTATIONAL -REPRESENTATIONALLY -REPRESENTATIONS -REPRESENTATIVE -REPRESENTATIVELY -REPRESENTATIVENESS -REPRESENTATIVES -REPRESENTED -REPRESENTING -REPRESENTS -REPRESS -REPRESSED -REPRESSES -REPRESSING -REPRESSION -REPRESSIONS -REPRESSIVE -REPRIEVE -REPRIEVED -REPRIEVES -REPRIEVING -REPRIMAND -REPRINT -REPRINTED -REPRINTING -REPRINTS -REPRISAL -REPRISALS -REPROACH -REPROACHED -REPROACHES -REPROACHING -REPROBATE -REPRODUCE -REPRODUCED -REPRODUCER -REPRODUCERS -REPRODUCES -REPRODUCIBILITIES -REPRODUCIBILITY -REPRODUCIBLE -REPRODUCIBLY -REPRODUCING -REPRODUCTION -REPRODUCTIONS -REPROGRAM -REPROGRAMMED -REPROGRAMMING -REPROGRAMS -REPROOF -REPROVE -REPROVER -REPTILE -REPTILES -REPTILIAN -REPUBLIC -REPUBLICAN -REPUBLICANS -REPUBLICS -REPUDIATE -REPUDIATED -REPUDIATES -REPUDIATING -REPUDIATION -REPUDIATIONS -REPUGNANT -REPULSE -REPULSED -REPULSES -REPULSING -REPULSION -REPULSIONS -REPULSIVE -REPUTABLE -REPUTABLY -REPUTATION -REPUTATIONS -REPUTE -REPUTED -REPUTEDLY -REPUTES -REQUEST -REQUESTED -REQUESTER -REQUESTERS -REQUESTING -REQUESTS -REQUIRE -REQUIRED -REQUIREMENT -REQUIREMENTS -REQUIRES -REQUIRING -REQUISITE -REQUISITES -REQUISITION -REQUISITIONED -REQUISITIONING -REQUISITIONS -REREAD -REREGISTER -REROUTE -REROUTED -REROUTES -REROUTING -RERUN -RERUNS -RESCHEDULE -RESCIND -RESCUE -RESCUED -RESCUER -RESCUERS -RESCUES -RESCUING -RESEARCH -RESEARCHED -RESEARCHER -RESEARCHERS -RESEARCHES -RESEARCHING -RESELECT -RESELECTED -RESELECTING -RESELECTS -RESELL -RESELLING -RESEMBLANCE -RESEMBLANCES -RESEMBLE -RESEMBLED -RESEMBLES -RESEMBLING -RESENT -RESENTED -RESENTFUL -RESENTFULLY -RESENTING -RESENTMENT -RESENTS -RESERPINE -RESERVATION -RESERVATIONS -RESERVE -RESERVED -RESERVER -RESERVES -RESERVING -RESERVOIR -RESERVOIRS -RESET -RESETS -RESETTING -RESETTINGS -RESIDE -RESIDED -RESIDENCE -RESIDENCES -RESIDENT -RESIDENTIAL -RESIDENTIALLY -RESIDENTS -RESIDES -RESIDING -RESIDUAL -RESIDUE -RESIDUES -RESIGN -RESIGNATION -RESIGNATIONS -RESIGNED -RESIGNING -RESIGNS -RESILIENT -RESIN -RESINS -RESIST -RESISTABLE -RESISTANCE -RESISTANCES -RESISTANT -RESISTANTLY -RESISTED -RESISTIBLE -RESISTING -RESISTIVE -RESISTIVITY -RESISTOR -RESISTORS -RESISTS -RESOLUTE -RESOLUTELY -RESOLUTENESS -RESOLUTION -RESOLUTIONS -RESOLVABLE -RESOLVE -RESOLVED -RESOLVER -RESOLVERS -RESOLVES -RESOLVING -RESONANCE -RESONANCES -RESONANT -RESONATE -RESORT -RESORTED -RESORTING -RESORTS -RESOUND -RESOUNDING -RESOUNDS -RESOURCE -RESOURCEFUL -RESOURCEFULLY -RESOURCEFULNESS -RESOURCES -RESPECT -RESPECTABILITY -RESPECTABLE -RESPECTABLY -RESPECTED -RESPECTER -RESPECTFUL -RESPECTFULLY -RESPECTFULNESS -RESPECTING -RESPECTIVE -RESPECTIVELY -RESPECTS -RESPIRATION -RESPIRATOR -RESPIRATORY -RESPITE -RESPLENDENT -RESPLENDENTLY -RESPOND -RESPONDED -RESPONDENT -RESPONDENTS -RESPONDER -RESPONDING -RESPONDS -RESPONSE -RESPONSES -RESPONSIBILITIES -RESPONSIBILITY -RESPONSIBLE -RESPONSIBLENESS -RESPONSIBLY -RESPONSIVE -RESPONSIVELY -RESPONSIVENESS -REST -RESTART -RESTARTED -RESTARTING -RESTARTS -RESTATE -RESTATED -RESTATEMENT -RESTATES -RESTATING -RESTAURANT -RESTAURANTS -RESTAURATEUR -RESTED -RESTFUL -RESTFULLY -RESTFULNESS -RESTING -RESTITUTION -RESTIVE -RESTLESS -RESTLESSLY -RESTLESSNESS -RESTORATION -RESTORATIONS -RESTORE -RESTORED -RESTORER -RESTORERS -RESTORES -RESTORING -RESTRAIN -RESTRAINED -RESTRAINER -RESTRAINERS -RESTRAINING -RESTRAINS -RESTRAINT -RESTRAINTS -RESTRICT -RESTRICTED -RESTRICTING -RESTRICTION -RESTRICTIONS -RESTRICTIVE -RESTRICTIVELY -RESTRICTS -RESTROOM -RESTRUCTURE -RESTRUCTURED -RESTRUCTURES -RESTRUCTURING -RESTS -RESULT -RESULTANT -RESULTANTLY -RESULTANTS -RESULTED -RESULTING -RESULTS -RESUMABLE -RESUME -RESUMED -RESUMES -RESUMING -RESUMPTION -RESUMPTIONS -RESURGENT -RESURRECT -RESURRECTED -RESURRECTING -RESURRECTION -RESURRECTIONS -RESURRECTOR -RESURRECTORS -RESURRECTS -RESUSCITATE -RESYNCHRONIZATION -RESYNCHRONIZE -RESYNCHRONIZED -RESYNCHRONIZING -RETAIL -RETAILER -RETAILERS -RETAILING -RETAIN -RETAINED -RETAINER -RETAINERS -RETAINING -RETAINMENT -RETAINS -RETALIATE -RETALIATION -RETALIATORY -RETARD -RETARDED -RETARDER -RETARDING -RETCH -RETENTION -RETENTIONS -RETENTIVE -RETENTIVELY -RETENTIVENESS -RETICLE -RETICLES -RETICULAR -RETICULATE -RETICULATED -RETICULATELY -RETICULATES -RETICULATING -RETICULATION -RETINA -RETINAL -RETINAS -RETINUE -RETIRE -RETIRED -RETIREE -RETIREMENT -RETIREMENTS -RETIRES -RETIRING -RETORT -RETORTED -RETORTS -RETRACE -RETRACED -RETRACES -RETRACING -RETRACT -RETRACTED -RETRACTING -RETRACTION -RETRACTIONS -RETRACTS -RETRAIN -RETRAINED -RETRAINING -RETRAINS -RETRANSLATE -RETRANSLATED -RETRANSMISSION -RETRANSMISSIONS -RETRANSMIT -RETRANSMITS -RETRANSMITTED -RETRANSMITTING -RETREAT -RETREATED -RETREATING -RETREATS -RETRIBUTION -RETRIED -RETRIER -RETRIERS -RETRIES -RETRIEVABLE -RETRIEVAL -RETRIEVALS -RETRIEVE -RETRIEVED -RETRIEVER -RETRIEVERS -RETRIEVES -RETRIEVING -RETROACTIVE -RETROACTIVELY -RETROFIT -RETROFITTING -RETROGRADE -RETROSPECT -RETROSPECTION -RETROSPECTIVE -RETRY -RETRYING -RETURN -RETURNABLE -RETURNED -RETURNER -RETURNING -RETURNS -RETYPE -RETYPED -RETYPES -RETYPING -REUB -REUBEN -REUNION -REUNIONS -REUNITE -REUNITED -REUNITING -REUSABLE -REUSE -REUSED -REUSES -REUSING -REUTERS -REUTHER -REVAMP -REVAMPED -REVAMPING -REVAMPS -REVEAL -REVEALED -REVEALING -REVEALS -REVEL -REVELATION -REVELATIONS -REVELED -REVELER -REVELING -REVELRY -REVELS -REVENGE -REVENGER -REVENUE -REVENUERS -REVENUES -REVERBERATE -REVERE -REVERED -REVERENCE -REVEREND -REVERENDS -REVERENT -REVERENTLY -REVERES -REVERIE -REVERIFIED -REVERIFIES -REVERIFY -REVERIFYING -REVERING -REVERSAL -REVERSALS -REVERSE -REVERSED -REVERSELY -REVERSER -REVERSES -REVERSIBLE -REVERSING -REVERSION -REVERT -REVERTED -REVERTING -REVERTS -REVIEW -REVIEWED -REVIEWER -REVIEWERS -REVIEWING -REVIEWS -REVILE -REVILED -REVILER -REVILING -REVISE -REVISED -REVISER -REVISES -REVISING -REVISION -REVISIONARY -REVISIONS -REVISIT -REVISITED -REVISITING -REVISITS -REVIVAL -REVIVALS -REVIVE -REVIVED -REVIVER -REVIVES -REVIVING -REVOCABLE -REVOCATION -REVOKE -REVOKED -REVOKER -REVOKES -REVOKING -REVOLT -REVOLTED -REVOLTER -REVOLTING -REVOLTINGLY -REVOLTS -REVOLUTION -REVOLUTIONARIES -REVOLUTIONARY -REVOLUTIONIZE -REVOLUTIONIZED -REVOLUTIONIZER -REVOLUTIONS -REVOLVE -REVOLVED -REVOLVER -REVOLVERS -REVOLVES -REVOLVING -REVULSION -REWARD -REWARDED -REWARDING -REWARDINGLY -REWARDS -REWIND -REWINDING -REWINDS -REWIRE -REWORK -REWORKED -REWORKING -REWORKS -REWOUND -REWRITE -REWRITES -REWRITING -REWRITTEN -REX -REYKJAVIK -REYNOLDS -RHAPSODY -RHEA -RHEIMS -RHEINHOLDT -RHENISH -RHESUS -RHETORIC -RHEUMATIC -RHEUMATISM -RHINE -RHINESTONE -RHINO -RHINOCEROS -RHO -RHODA -RHODE -RHODES -RHODESIA -RHODODENDRON -RHOMBIC -RHOMBUS -RHUBARB -RHYME -RHYMED -RHYMES -RHYMING -RHYTHM -RHYTHMIC -RHYTHMICALLY -RHYTHMS -RIB -RIBALD -RIBBED -RIBBING -RIBBON -RIBBONS -RIBOFLAVIN -RIBONUCLEIC -RIBS -RICA -RICAN -RICANISM -RICANS -RICE -RICH -RICHARD -RICHARDS -RICHARDSON -RICHER -RICHES -RICHEST -RICHEY -RICHFIELD -RICHLAND -RICHLY -RICHMOND -RICHNESS -RICHTER -RICK -RICKENBAUGH -RICKETS -RICKETTSIA -RICKETY -RICKSHAW -RICKSHAWS -RICO -RICOCHET -RID -RIDDANCE -RIDDEN -RIDDING -RIDDLE -RIDDLED -RIDDLES -RIDDLING -RIDE -RIDER -RIDERS -RIDES -RIDGE -RIDGEFIELD -RIDGEPOLE -RIDGES -RIDGWAY -RIDICULE -RIDICULED -RIDICULES -RIDICULING -RIDICULOUS -RIDICULOUSLY -RIDICULOUSNESS -RIDING -RIDS -RIEMANN -RIEMANNIAN -RIFLE -RIFLED -RIFLEMAN -RIFLER -RIFLES -RIFLING -RIFT -RIG -RIGA -RIGEL -RIGGING -RIGGS -RIGHT -RIGHTED -RIGHTEOUS -RIGHTEOUSLY -RIGHTEOUSNESS -RIGHTER -RIGHTFUL -RIGHTFULLY -RIGHTFULNESS -RIGHTING -RIGHTLY -RIGHTMOST -RIGHTNESS -RIGHTS -RIGHTWARD -RIGID -RIGIDITY -RIGIDLY -RIGOR -RIGOROUS -RIGOROUSLY -RIGORS -RIGS -RILEY -RILKE -RILL -RIM -RIME -RIMS -RIND -RINDS -RINEHART -RING -RINGED -RINGER -RINGERS -RINGING -RINGINGLY -RINGINGS -RINGS -RINGSIDE -RINK -RINSE -RINSED -RINSER -RINSES -RINSING -RIO -RIORDAN -RIOT -RIOTED -RIOTER -RIOTERS -RIOTING -RIOTOUS -RIOTS -RIP -RIPE -RIPELY -RIPEN -RIPENESS -RIPLEY -RIPOFF -RIPPED -RIPPING -RIPPLE -RIPPLED -RIPPLES -RIPPLING -RIPS -RISC -RISE -RISEN -RISER -RISERS -RISES -RISING -RISINGS -RISK -RISKED -RISKING -RISKS -RISKY -RITCHIE -RITE -RITES -RITTER -RITUAL -RITUALLY -RITUALS -RITZ -RIVAL -RIVALED -RIVALLED -RIVALLING -RIVALRIES -RIVALRY -RIVALS -RIVER -RIVERBANK -RIVERFRONT -RIVERS -RIVERSIDE -RIVERVIEW -RIVET -RIVETER -RIVETS -RIVIERA -RIVULET -RIVULETS -RIYADH -ROACH -ROAD -ROADBED -ROADBLOCK -ROADS -ROADSIDE -ROADSTER -ROADSTERS -ROADWAY -ROADWAYS -ROAM -ROAMED -ROAMING -ROAMS -ROAR -ROARED -ROARER -ROARING -ROARS -ROAST -ROASTED -ROASTER -ROASTING -ROASTS -ROB -ROBBED -ROBBER -ROBBERIES -ROBBERS -ROBBERY -ROBBIE -ROBBIN -ROBBING -ROBBINS -ROBE -ROBED -ROBERT -ROBERTA -ROBERTO -ROBERTS -ROBERTSON -ROBERTSONS -ROBES -ROBIN -ROBING -ROBINS -ROBINSON -ROBINSONVILLE -ROBOT -ROBOTIC -ROBOTICS -ROBOTS -ROBS -ROBUST -ROBUSTLY -ROBUSTNESS -ROCCO -ROCHESTER -ROCHFORD -ROCK -ROCKABYE -ROCKAWAY -ROCKAWAYS -ROCKED -ROCKEFELLER -ROCKER -ROCKERS -ROCKET -ROCKETED -ROCKETING -ROCKETS -ROCKFORD -ROCKIES -ROCKING -ROCKLAND -ROCKS -ROCKVILLE -ROCKWELL -ROCKY -ROD -RODE -RODENT -RODENTS -RODEO -RODGERS -RODNEY -RODRIGUEZ -RODS -ROE -ROENTGEN -ROGER -ROGERS -ROGUE -ROGUES -ROLAND -ROLE -ROLES -ROLL -ROLLBACK -ROLLED -ROLLER -ROLLERS -ROLLIE -ROLLING -ROLLINS -ROLLS -ROMAN -ROMANCE -ROMANCER -ROMANCERS -ROMANCES -ROMANCING -ROMANESQUE -ROMANIA -ROMANIZATIONS -ROMANIZER -ROMANIZERS -ROMANIZES -ROMANO -ROMANS -ROMANTIC -ROMANTICS -ROME -ROMELDALE -ROMEO -ROMP -ROMPED -ROMPER -ROMPING -ROMPS -ROMULUS -RON -RONALD -RONNIE -ROOF -ROOFED -ROOFER -ROOFING -ROOFS -ROOFTOP -ROOK -ROOKIE -ROOM -ROOMED -ROOMER -ROOMERS -ROOMFUL -ROOMING -ROOMMATE -ROOMS -ROOMY -ROONEY -ROOSEVELT -ROOSEVELTIAN -ROOST -ROOSTER -ROOSTERS -ROOT -ROOTED -ROOTER -ROOTING -ROOTS -ROPE -ROPED -ROPER -ROPERS -ROPES -ROPING -ROQUEMORE -RORSCHACH -ROSA -ROSABELLE -ROSALIE -ROSARY -ROSE -ROSEBUD -ROSEBUDS -ROSEBUSH -ROSELAND -ROSELLA -ROSEMARY -ROSEN -ROSENBERG -ROSENBLUM -ROSENTHAL -ROSENZWEIG -ROSES -ROSETTA -ROSETTE -ROSIE -ROSINESS -ROSS -ROSSI -ROSTER -ROSTRUM -ROSWELL -ROSY -ROT -ROTARIAN -ROTARIANS -ROTARY -ROTATE -ROTATED -ROTATES -ROTATING -ROTATION -ROTATIONAL -ROTATIONS -ROTATOR -ROTH -ROTHSCHILD -ROTOR -ROTS -ROTTEN -ROTTENNESS -ROTTERDAM -ROTTING -ROTUND -ROTUNDA -ROUGE -ROUGH -ROUGHED -ROUGHEN -ROUGHER -ROUGHEST -ROUGHLY -ROUGHNECK -ROUGHNESS -ROULETTE -ROUND -ROUNDABOUT -ROUNDED -ROUNDEDNESS -ROUNDER -ROUNDEST -ROUNDHEAD -ROUNDHOUSE -ROUNDING -ROUNDLY -ROUNDNESS -ROUNDOFF -ROUNDS -ROUNDTABLE -ROUNDUP -ROUNDWORM -ROURKE -ROUSE -ROUSED -ROUSES -ROUSING -ROUSSEAU -ROUSTABOUT -ROUT -ROUTE -ROUTED -ROUTER -ROUTERS -ROUTES -ROUTINE -ROUTINELY -ROUTINES -ROUTING -ROUTINGS -ROVE -ROVED -ROVER -ROVES -ROVING -ROW -ROWBOAT -ROWDY -ROWE -ROWED -ROWENA -ROWER -ROWING -ROWLAND -ROWLEY -ROWS -ROXBURY -ROXY -ROY -ROYAL -ROYALIST -ROYALISTS -ROYALLY -ROYALTIES -ROYALTY -ROYCE -ROZELLE -RUANDA -RUB -RUBAIYAT -RUBBED -RUBBER -RUBBERS -RUBBERY -RUBBING -RUBBISH -RUBBLE -RUBDOWN -RUBE -RUBEN -RUBENS -RUBIES -RUBIN -RUBLE -RUBLES -RUBOUT -RUBS -RUBY -RUDDER -RUDDERS -RUDDINESS -RUDDY -RUDE -RUDELY -RUDENESS -RUDIMENT -RUDIMENTARY -RUDIMENTS -RUDOLF -RUDOLPH -RUDY -RUDYARD -RUE -RUEFULLY -RUFFIAN -RUFFIANLY -RUFFIANS -RUFFLE -RUFFLED -RUFFLES -RUFUS -RUG -RUGGED -RUGGEDLY -RUGGEDNESS -RUGS -RUIN -RUINATION -RUINATIONS -RUINED -RUINING -RUINOUS -RUINOUSLY -RUINS -RULE -RULED -RULER -RULERS -RULES -RULING -RULINGS -RUM -RUMANIA -RUMANIAN -RUMANIANS -RUMBLE -RUMBLED -RUMBLER -RUMBLES -RUMBLING -RUMEN -RUMFORD -RUMMAGE -RUMMEL -RUMMY -RUMOR -RUMORED -RUMORS -RUMP -RUMPLE -RUMPLED -RUMPLY -RUMPUS -RUN -RUNAWAY -RUNDOWN -RUNG -RUNGE -RUNGS -RUNNABLE -RUNNER -RUNNERS -RUNNING -RUNNYMEDE -RUNOFF -RUNS -RUNT -RUNTIME -RUNYON -RUPEE -RUPPERT -RUPTURE -RUPTURED -RUPTURES -RUPTURING -RURAL -RURALLY -RUSH -RUSHED -RUSHER -RUSHES -RUSHING -RUSHMORE -RUSS -RUSSELL -RUSSET -RUSSIA -RUSSIAN -RUSSIANIZATIONS -RUSSIANIZES -RUSSIANS -RUSSO -RUST -RUSTED -RUSTIC -RUSTICATE -RUSTICATED -RUSTICATES -RUSTICATING -RUSTICATION -RUSTING -RUSTLE -RUSTLED -RUSTLER -RUSTLERS -RUSTLING -RUSTS -RUSTY -RUT -RUTGERS -RUTH -RUTHERFORD -RUTHLESS -RUTHLESSLY -RUTHLESSNESS -RUTLAND -RUTLEDGE -RUTS -RWANDA -RYAN -RYDBERG -RYDER -RYE -SABBATH -SABBATHIZE -SABBATHIZES -SABBATICAL -SABER -SABERS -SABINA -SABINE -SABLE -SABLES -SABOTAGE -SACHS -SACK -SACKER -SACKING -SACKS -SACRAMENT -SACRAMENTO -SACRED -SACREDLY -SACREDNESS -SACRIFICE -SACRIFICED -SACRIFICER -SACRIFICERS -SACRIFICES -SACRIFICIAL -SACRIFICIALLY -SACRIFICING -SACRILEGE -SACRILEGIOUS -SACROSANCT -SAD -SADDEN -SADDENED -SADDENS -SADDER -SADDEST -SADDLE -SADDLEBAG -SADDLED -SADDLES -SADIE -SADISM -SADIST -SADISTIC -SADISTICALLY -SADISTS -SADLER -SADLY -SADNESS -SAFARI -SAFE -SAFEGUARD -SAFEGUARDED -SAFEGUARDING -SAFEGUARDS -SAFEKEEPING -SAFELY -SAFENESS -SAFER -SAFES -SAFEST -SAFETIES -SAFETY -SAFFRON -SAG -SAGA -SAGACIOUS -SAGACITY -SAGE -SAGEBRUSH -SAGELY -SAGES -SAGGING -SAGINAW -SAGITTAL -SAGITTARIUS -SAGS -SAGUARO -SAHARA -SAID -SAIGON -SAIL -SAILBOAT -SAILED -SAILFISH -SAILING -SAILOR -SAILORLY -SAILORS -SAILS -SAINT -SAINTED -SAINTHOOD -SAINTLY -SAINTS -SAKE -SAKES -SAL -SALAAM -SALABLE -SALAD -SALADS -SALAMANDER -SALAMI -SALARIED -SALARIES -SALARY -SALE -SALEM -SALERNO -SALES -SALESGIRL -SALESIAN -SALESLADY -SALESMAN -SALESMEN -SALESPERSON -SALIENT -SALINA -SALINE -SALISBURY -SALISH -SALIVA -SALIVARY -SALIVATE -SALK -SALLE -SALLIES -SALLOW -SALLY -SALLYING -SALMON -SALON -SALONS -SALOON -SALOONS -SALT -SALTED -SALTER -SALTERS -SALTIER -SALTIEST -SALTINESS -SALTING -SALTON -SALTS -SALTY -SALUTARY -SALUTATION -SALUTATIONS -SALUTE -SALUTED -SALUTES -SALUTING -SALVADOR -SALVADORAN -SALVAGE -SALVAGED -SALVAGER -SALVAGES -SALVAGING -SALVATION -SALVATORE -SALVE -SALVER -SALVES -SALZ -SAM -SAMARITAN -SAME -SAMENESS -SAMMY -SAMOA -SAMOAN -SAMPLE -SAMPLED -SAMPLER -SAMPLERS -SAMPLES -SAMPLING -SAMPLINGS -SAMPSON -SAMSON -SAMUEL -SAMUELS -SAMUELSON -SAN -SANA -SANATORIA -SANATORIUM -SANBORN -SANCHEZ -SANCHO -SANCTIFICATION -SANCTIFIED -SANCTIFY -SANCTIMONIOUS -SANCTION -SANCTIONED -SANCTIONING -SANCTIONS -SANCTITY -SANCTUARIES -SANCTUARY -SANCTUM -SAND -SANDAL -SANDALS -SANDBAG -SANDBURG -SANDED -SANDER -SANDERLING -SANDERS -SANDERSON -SANDIA -SANDING -SANDMAN -SANDPAPER -SANDRA -SANDS -SANDSTONE -SANDUSKY -SANDWICH -SANDWICHES -SANDY -SANE -SANELY -SANER -SANEST -SANFORD -SANG -SANGUINE -SANHEDRIN -SANITARIUM -SANITARY -SANITATION -SANITY -SANK -SANSKRIT -SANSKRITIC -SANSKRITIZE -SANTA -SANTAYANA -SANTIAGO -SANTO -SAO -SAP -SAPIENS -SAPLING -SAPLINGS -SAPPHIRE -SAPPHO -SAPS -SAPSUCKER -SARA -SARACEN -SARACENS -SARAH -SARAN -SARASOTA -SARATOGA -SARCASM -SARCASMS -SARCASTIC -SARDINE -SARDINIA -SARDONIC -SARGENT -SARI -SARTRE -SASH -SASKATCHEWAN -SASKATOON -SAT -SATAN -SATANIC -SATANISM -SATANIST -SATCHEL -SATCHELS -SATE -SATED -SATELLITE -SATELLITES -SATES -SATIN -SATING -SATIRE -SATIRES -SATIRIC -SATISFACTION -SATISFACTIONS -SATISFACTORILY -SATISFACTORY -SATISFIABILITY -SATISFIABLE -SATISFIED -SATISFIES -SATISFY -SATISFYING -SATURATE -SATURATED -SATURATES -SATURATING -SATURATION -SATURDAY -SATURDAYS -SATURN -SATURNALIA -SATURNISM -SATYR -SAUCE -SAUCEPAN -SAUCEPANS -SAUCER -SAUCERS -SAUCES -SAUCY -SAUD -SAUDI -SAUKVILLE -SAUL -SAULT -SAUNDERS -SAUNTER -SAUSAGE -SAUSAGES -SAVAGE -SAVAGED -SAVAGELY -SAVAGENESS -SAVAGER -SAVAGERS -SAVAGES -SAVAGING -SAVANNAH -SAVE -SAVED -SAVER -SAVERS -SAVES -SAVING -SAVINGS -SAVIOR -SAVIORS -SAVIOUR -SAVONAROLA -SAVOR -SAVORED -SAVORING -SAVORS -SAVORY -SAVOY -SAVOYARD -SAVOYARDS -SAW -SAWDUST -SAWED -SAWFISH -SAWING -SAWMILL -SAWMILLS -SAWS -SAWTOOTH -SAX -SAXON -SAXONIZATION -SAXONIZATIONS -SAXONIZE -SAXONIZES -SAXONS -SAXONY -SAXOPHONE -SAXTON -SAY -SAYER -SAYERS -SAYING -SAYINGS -SAYS -SCAB -SCABBARD -SCABBARDS -SCABROUS -SCAFFOLD -SCAFFOLDING -SCAFFOLDINGS -SCAFFOLDS -SCALA -SCALABLE -SCALAR -SCALARS -SCALD -SCALDED -SCALDING -SCALE -SCALED -SCALES -SCALING -SCALINGS -SCALLOP -SCALLOPED -SCALLOPS -SCALP -SCALPS -SCALY -SCAMPER -SCAMPERING -SCAMPERS -SCAN -SCANDAL -SCANDALOUS -SCANDALS -SCANDINAVIA -SCANDINAVIAN -SCANDINAVIANS -SCANNED -SCANNER -SCANNERS -SCANNING -SCANS -SCANT -SCANTIER -SCANTIEST -SCANTILY -SCANTINESS -SCANTLY -SCANTY -SCAPEGOAT -SCAR -SCARBOROUGH -SCARCE -SCARCELY -SCARCENESS -SCARCER -SCARCITY -SCARE -SCARECROW -SCARED -SCARES -SCARF -SCARING -SCARLATTI -SCARLET -SCARS -SCARSDALE -SCARVES -SCARY -SCATTER -SCATTERBRAIN -SCATTERED -SCATTERING -SCATTERS -SCENARIO -SCENARIOS -SCENE -SCENERY -SCENES -SCENIC -SCENT -SCENTED -SCENTS -SCEPTER -SCEPTERS -SCHAEFER -SCHAEFFER -SCHAFER -SCHAFFNER -SCHANTZ -SCHAPIRO -SCHEDULABLE -SCHEDULE -SCHEDULED -SCHEDULER -SCHEDULERS -SCHEDULES -SCHEDULING -SCHEHERAZADE -SCHELLING -SCHEMA -SCHEMAS -SCHEMATA -SCHEMATIC -SCHEMATICALLY -SCHEMATICS -SCHEME -SCHEMED -SCHEMER -SCHEMERS -SCHEMES -SCHEMING -SCHILLER -SCHISM -SCHIZOPHRENIA -SCHLESINGER -SCHLITZ -SCHLOSS -SCHMIDT -SCHMITT -SCHNABEL -SCHNEIDER -SCHOENBERG -SCHOFIELD -SCHOLAR -SCHOLARLY -SCHOLARS -SCHOLARSHIP -SCHOLARSHIPS -SCHOLASTIC -SCHOLASTICALLY -SCHOLASTICS -SCHOOL -SCHOOLBOY -SCHOOLBOYS -SCHOOLED -SCHOOLER -SCHOOLERS -SCHOOLHOUSE -SCHOOLHOUSES -SCHOOLING -SCHOOLMASTER -SCHOOLMASTERS -SCHOOLROOM -SCHOOLROOMS -SCHOOLS -SCHOONER -SCHOPENHAUER -SCHOTTKY -SCHROEDER -SCHROEDINGER -SCHUBERT -SCHULTZ -SCHULZ -SCHUMACHER -SCHUMAN -SCHUMANN -SCHUSTER -SCHUYLER -SCHUYLKILL -SCHWAB -SCHWARTZ -SCHWEITZER -SCIENCE -SCIENCES -SCIENTIFIC -SCIENTIFICALLY -SCIENTIST -SCIENTISTS -SCISSOR -SCISSORED -SCISSORING -SCISSORS -SCLEROSIS -SCLEROTIC -SCOFF -SCOFFED -SCOFFER -SCOFFING -SCOFFS -SCOLD -SCOLDED -SCOLDING -SCOLDS -SCOOP -SCOOPED -SCOOPING -SCOOPS -SCOOT -SCOPE -SCOPED -SCOPES -SCOPING -SCORCH -SCORCHED -SCORCHER -SCORCHES -SCORCHING -SCORE -SCOREBOARD -SCORECARD -SCORED -SCORER -SCORERS -SCORES -SCORING -SCORINGS -SCORN -SCORNED -SCORNER -SCORNFUL -SCORNFULLY -SCORNING -SCORNS -SCORPIO -SCORPION -SCORPIONS -SCOT -SCOTCH -SCOTCHGARD -SCOTCHMAN -SCOTIA -SCOTIAN -SCOTLAND -SCOTS -SCOTSMAN -SCOTSMEN -SCOTT -SCOTTISH -SCOTTSDALE -SCOTTY -SCOUNDREL -SCOUNDRELS -SCOUR -SCOURED -SCOURGE -SCOURING -SCOURS -SCOUT -SCOUTED -SCOUTING -SCOUTS -SCOW -SCOWL -SCOWLED -SCOWLING -SCOWLS -SCRAM -SCRAMBLE -SCRAMBLED -SCRAMBLER -SCRAMBLES -SCRAMBLING -SCRANTON -SCRAP -SCRAPE -SCRAPED -SCRAPER -SCRAPERS -SCRAPES -SCRAPING -SCRAPINGS -SCRAPPED -SCRAPS -SCRATCH -SCRATCHED -SCRATCHER -SCRATCHERS -SCRATCHES -SCRATCHING -SCRATCHY -SCRAWL -SCRAWLED -SCRAWLING -SCRAWLS -SCRAWNY -SCREAM -SCREAMED -SCREAMER -SCREAMERS -SCREAMING -SCREAMS -SCREECH -SCREECHED -SCREECHES -SCREECHING -SCREEN -SCREENED -SCREENING -SCREENINGS -SCREENPLAY -SCREENS -SCREW -SCREWBALL -SCREWDRIVER -SCREWED -SCREWING -SCREWS -SCRIBBLE -SCRIBBLED -SCRIBBLER -SCRIBBLES -SCRIBE -SCRIBES -SCRIBING -SCRIBNERS -SCRIMMAGE -SCRIPPS -SCRIPT -SCRIPTS -SCRIPTURE -SCRIPTURES -SCROLL -SCROLLED -SCROLLING -SCROLLS -SCROOGE -SCROUNGE -SCRUB -SCRUMPTIOUS -SCRUPLE -SCRUPULOUS -SCRUPULOUSLY -SCRUTINIZE -SCRUTINIZED -SCRUTINIZING -SCRUTINY -SCUBA -SCUD -SCUFFLE -SCUFFLED -SCUFFLES -SCUFFLING -SCULPT -SCULPTED -SCULPTOR -SCULPTORS -SCULPTS -SCULPTURE -SCULPTURED -SCULPTURES -SCURRIED -SCURRY -SCURVY -SCUTTLE -SCUTTLED -SCUTTLES -SCUTTLING -SCYLLA -SCYTHE -SCYTHES -SCYTHIA -SEA -SEABOARD -SEABORG -SEABROOK -SEACOAST -SEACOASTS -SEAFOOD -SEAGATE -SEAGRAM -SEAGULL -SEAHORSE -SEAL -SEALED -SEALER -SEALING -SEALS -SEALY -SEAM -SEAMAN -SEAMED -SEAMEN -SEAMING -SEAMS -SEAMY -SEAN -SEAPORT -SEAPORTS -SEAQUARIUM -SEAR -SEARCH -SEARCHED -SEARCHER -SEARCHERS -SEARCHES -SEARCHING -SEARCHINGLY -SEARCHINGS -SEARCHLIGHT -SEARED -SEARING -SEARINGLY -SEARS -SEAS -SEASHORE -SEASHORES -SEASIDE -SEASON -SEASONABLE -SEASONABLY -SEASONAL -SEASONALLY -SEASONED -SEASONER -SEASONERS -SEASONING -SEASONINGS -SEASONS -SEAT -SEATED -SEATING -SEATS -SEATTLE -SEAWARD -SEAWEED -SEBASTIAN -SECANT -SECEDE -SECEDED -SECEDES -SECEDING -SECESSION -SECLUDE -SECLUDED -SECLUSION -SECOND -SECONDARIES -SECONDARILY -SECONDARY -SECONDED -SECONDER -SECONDERS -SECONDHAND -SECONDING -SECONDLY -SECONDS -SECRECY -SECRET -SECRETARIAL -SECRETARIAT -SECRETARIES -SECRETARY -SECRETE -SECRETED -SECRETES -SECRETING -SECRETION -SECRETIONS -SECRETIVE -SECRETIVELY -SECRETLY -SECRETS -SECT -SECTARIAN -SECTION -SECTIONAL -SECTIONED -SECTIONING -SECTIONS -SECTOR -SECTORS -SECTS -SECULAR -SECURE -SECURED -SECURELY -SECURES -SECURING -SECURINGS -SECURITIES -SECURITY -SEDAN -SEDATE -SEDGE -SEDGWICK -SEDIMENT -SEDIMENTARY -SEDIMENTS -SEDITION -SEDITIOUS -SEDUCE -SEDUCED -SEDUCER -SEDUCERS -SEDUCES -SEDUCING -SEDUCTION -SEDUCTIVE -SEE -SEED -SEEDED -SEEDER -SEEDERS -SEEDING -SEEDINGS -SEEDLING -SEEDLINGS -SEEDS -SEEDY -SEEING -SEEK -SEEKER -SEEKERS -SEEKING -SEEKS -SEELEY -SEEM -SEEMED -SEEMING -SEEMINGLY -SEEMLY -SEEMS -SEEN -SEEP -SEEPAGE -SEEPED -SEEPING -SEEPS -SEER -SEERS -SEERSUCKER -SEES -SEETHE -SEETHED -SEETHES -SEETHING -SEGMENT -SEGMENTATION -SEGMENTATIONS -SEGMENTED -SEGMENTING -SEGMENTS -SEGOVIA -SEGREGATE -SEGREGATED -SEGREGATES -SEGREGATING -SEGREGATION -SEGUNDO -SEIDEL -SEISMIC -SEISMOGRAPH -SEISMOLOGY -SEIZE -SEIZED -SEIZES -SEIZING -SEIZURE -SEIZURES -SELDOM -SELECT -SELECTED -SELECTING -SELECTION -SELECTIONS -SELECTIVE -SELECTIVELY -SELECTIVITY -SELECTMAN -SELECTMEN -SELECTOR -SELECTORS -SELECTRIC -SELECTS -SELENA -SELENIUM -SELF -SELFISH -SELFISHLY -SELFISHNESS -SELFRIDGE -SELFSAME -SELKIRK -SELL -SELLER -SELLERS -SELLING -SELLOUT -SELLS -SELMA -SELTZER -SELVES -SELWYN -SEMANTIC -SEMANTICAL -SEMANTICALLY -SEMANTICIST -SEMANTICISTS -SEMANTICS -SEMAPHORE -SEMAPHORES -SEMBLANCE -SEMESTER -SEMESTERS -SEMI -SEMIAUTOMATED -SEMICOLON -SEMICOLONS -SEMICONDUCTOR -SEMICONDUCTORS -SEMINAL -SEMINAR -SEMINARIAN -SEMINARIES -SEMINARS -SEMINARY -SEMINOLE -SEMIPERMANENT -SEMIPERMANENTLY -SEMIRAMIS -SEMITE -SEMITIC -SEMITICIZE -SEMITICIZES -SEMITIZATION -SEMITIZATIONS -SEMITIZE -SEMITIZES -SENATE -SENATES -SENATOR -SENATORIAL -SENATORS -SEND -SENDER -SENDERS -SENDING -SENDS -SENECA -SENEGAL -SENILE -SENIOR -SENIORITY -SENIORS -SENSATION -SENSATIONAL -SENSATIONALLY -SENSATIONS -SENSE -SENSED -SENSELESS -SENSELESSLY -SENSELESSNESS -SENSES -SENSIBILITIES -SENSIBILITY -SENSIBLE -SENSIBLY -SENSING -SENSITIVE -SENSITIVELY -SENSITIVENESS -SENSITIVES -SENSITIVITIES -SENSITIVITY -SENSOR -SENSORS -SENSORY -SENSUAL -SENSUOUS -SENT -SENTENCE -SENTENCED -SENTENCES -SENTENCING -SENTENTIAL -SENTIMENT -SENTIMENTAL -SENTIMENTALLY -SENTIMENTS -SENTINEL -SENTINELS -SENTRIES -SENTRY -SEOUL -SEPARABLE -SEPARATE -SEPARATED -SEPARATELY -SEPARATENESS -SEPARATES -SEPARATING -SEPARATION -SEPARATIONS -SEPARATOR -SEPARATORS -SEPIA -SEPOY -SEPT -SEPTEMBER -SEPTEMBERS -SEPULCHER -SEPULCHERS -SEQUEL -SEQUELS -SEQUENCE -SEQUENCED -SEQUENCER -SEQUENCERS -SEQUENCES -SEQUENCING -SEQUENCINGS -SEQUENTIAL -SEQUENTIALITY -SEQUENTIALIZE -SEQUENTIALIZED -SEQUENTIALIZES -SEQUENTIALIZING -SEQUENTIALLY -SEQUESTER -SEQUOIA -SERAFIN -SERBIA -SERBIAN -SERBIANS -SERENDIPITOUS -SERENDIPITY -SERENE -SERENELY -SERENITY -SERF -SERFS -SERGEANT -SERGEANTS -SERGEI -SERIAL -SERIALIZABILITY -SERIALIZABLE -SERIALIZATION -SERIALIZATIONS -SERIALIZE -SERIALIZED -SERIALIZES -SERIALIZING -SERIALLY -SERIALS -SERIES -SERIF -SERIOUS -SERIOUSLY -SERIOUSNESS -SERMON -SERMONS -SERPENS -SERPENT -SERPENTINE -SERPENTS -SERRA -SERUM -SERUMS -SERVANT -SERVANTS -SERVE -SERVED -SERVER -SERVERS -SERVES -SERVICE -SERVICEABILITY -SERVICEABLE -SERVICED -SERVICEMAN -SERVICEMEN -SERVICES -SERVICING -SERVILE -SERVING -SERVINGS -SERVITUDE -SERVO -SERVOMECHANISM -SESAME -SESSION -SESSIONS -SET -SETBACK -SETH -SETS -SETTABLE -SETTER -SETTERS -SETTING -SETTINGS -SETTLE -SETTLED -SETTLEMENT -SETTLEMENTS -SETTLER -SETTLERS -SETTLES -SETTLING -SETUP -SETUPS -SEVEN -SEVENFOLD -SEVENS -SEVENTEEN -SEVENTEENS -SEVENTEENTH -SEVENTH -SEVENTIES -SEVENTIETH -SEVENTY -SEVER -SEVERAL -SEVERALFOLD -SEVERALLY -SEVERANCE -SEVERE -SEVERED -SEVERELY -SEVERER -SEVEREST -SEVERING -SEVERITIES -SEVERITY -SEVERN -SEVERS -SEVILLE -SEW -SEWAGE -SEWARD -SEWED -SEWER -SEWERS -SEWING -SEWS -SEX -SEXED -SEXES -SEXIST -SEXTANS -SEXTET -SEXTILLION -SEXTON -SEXTUPLE -SEXTUPLET -SEXUAL -SEXUALITY -SEXUALLY -SEXY -SEYCHELLES -SEYMOUR -SHABBY -SHACK -SHACKED -SHACKLE -SHACKLED -SHACKLES -SHACKLING -SHACKS -SHADE -SHADED -SHADES -SHADIER -SHADIEST -SHADILY -SHADINESS -SHADING -SHADINGS -SHADOW -SHADOWED -SHADOWING -SHADOWS -SHADOWY -SHADY -SHAFER -SHAFFER -SHAFT -SHAFTS -SHAGGY -SHAKABLE -SHAKABLY -SHAKE -SHAKEDOWN -SHAKEN -SHAKER -SHAKERS -SHAKES -SHAKESPEARE -SHAKESPEAREAN -SHAKESPEARIAN -SHAKESPEARIZE -SHAKESPEARIZES -SHAKINESS -SHAKING -SHAKY -SHALE -SHALL -SHALLOW -SHALLOWER -SHALLOWLY -SHALLOWNESS -SHAM -SHAMBLES -SHAME -SHAMED -SHAMEFUL -SHAMEFULLY -SHAMELESS -SHAMELESSLY -SHAMES -SHAMING -SHAMPOO -SHAMROCK -SHAMS -SHANGHAI -SHANGHAIED -SHANGHAIING -SHANGHAIINGS -SHANGHAIS -SHANNON -SHANTIES -SHANTUNG -SHANTY -SHAPE -SHAPED -SHAPELESS -SHAPELESSLY -SHAPELESSNESS -SHAPELY -SHAPER -SHAPERS -SHAPES -SHAPING -SHAPIRO -SHARABLE -SHARD -SHARE -SHAREABLE -SHARECROPPER -SHARECROPPERS -SHARED -SHAREHOLDER -SHAREHOLDERS -SHARER -SHARERS -SHARES -SHARI -SHARING -SHARK -SHARKS -SHARON -SHARP -SHARPE -SHARPEN -SHARPENED -SHARPENING -SHARPENS -SHARPER -SHARPEST -SHARPLY -SHARPNESS -SHARPSHOOT -SHASTA -SHATTER -SHATTERED -SHATTERING -SHATTERPROOF -SHATTERS -SHATTUCK -SHAVE -SHAVED -SHAVEN -SHAVES -SHAVING -SHAVINGS -SHAWANO -SHAWL -SHAWLS -SHAWNEE -SHE -SHEA -SHEAF -SHEAR -SHEARED -SHEARER -SHEARING -SHEARS -SHEATH -SHEATHING -SHEATHS -SHEAVES -SHEBOYGAN -SHED -SHEDDING -SHEDIR -SHEDS -SHEEHAN -SHEEN -SHEEP -SHEEPSKIN -SHEER -SHEERED -SHEET -SHEETED -SHEETING -SHEETS -SHEFFIELD -SHEIK -SHEILA -SHELBY -SHELDON -SHELF -SHELL -SHELLED -SHELLER -SHELLEY -SHELLING -SHELLS -SHELTER -SHELTERED -SHELTERING -SHELTERS -SHELTON -SHELVE -SHELVED -SHELVES -SHELVING -SHENANDOAH -SHENANIGAN -SHEPARD -SHEPHERD -SHEPHERDS -SHEPPARD -SHERATON -SHERBET -SHERIDAN -SHERIFF -SHERIFFS -SHERLOCK -SHERMAN -SHERRILL -SHERRY -SHERWIN -SHERWOOD -SHIBBOLETH -SHIED -SHIELD -SHIELDED -SHIELDING -SHIELDS -SHIES -SHIFT -SHIFTED -SHIFTER -SHIFTERS -SHIFTIER -SHIFTIEST -SHIFTILY -SHIFTINESS -SHIFTING -SHIFTS -SHIFTY -SHIITE -SHIITES -SHILL -SHILLING -SHILLINGS -SHILLONG -SHILOH -SHIMMER -SHIMMERING -SHIN -SHINBONE -SHINE -SHINED -SHINER -SHINERS -SHINES -SHINGLE -SHINGLES -SHINING -SHININGLY -SHINTO -SHINTOISM -SHINTOIZE -SHINTOIZES -SHINY -SHIP -SHIPBOARD -SHIPBUILDING -SHIPLEY -SHIPMATE -SHIPMENT -SHIPMENTS -SHIPPED -SHIPPER -SHIPPERS -SHIPPING -SHIPS -SHIPSHAPE -SHIPWRECK -SHIPWRECKED -SHIPWRECKS -SHIPYARD -SHIRE -SHIRK -SHIRKER -SHIRKING -SHIRKS -SHIRLEY -SHIRT -SHIRTING -SHIRTS -SHIT -SHIVA -SHIVER -SHIVERED -SHIVERER -SHIVERING -SHIVERS -SHMUEL -SHOAL -SHOALS -SHOCK -SHOCKED -SHOCKER -SHOCKERS -SHOCKING -SHOCKINGLY -SHOCKLEY -SHOCKS -SHOD -SHODDY -SHOE -SHOED -SHOEHORN -SHOEING -SHOELACE -SHOEMAKER -SHOES -SHOESTRING -SHOJI -SHONE -SHOOK -SHOOT -SHOOTER -SHOOTERS -SHOOTING -SHOOTINGS -SHOOTS -SHOP -SHOPKEEPER -SHOPKEEPERS -SHOPPED -SHOPPER -SHOPPERS -SHOPPING -SHOPS -SHOPWORN -SHORE -SHORELINE -SHORES -SHOREWOOD -SHORN -SHORT -SHORTAGE -SHORTAGES -SHORTCOMING -SHORTCOMINGS -SHORTCUT -SHORTCUTS -SHORTED -SHORTEN -SHORTENED -SHORTENING -SHORTENS -SHORTER -SHORTEST -SHORTFALL -SHORTHAND -SHORTHANDED -SHORTING -SHORTISH -SHORTLY -SHORTNESS -SHORTS -SHORTSIGHTED -SHORTSTOP -SHOSHONE -SHOT -SHOTGUN -SHOTGUNS -SHOTS -SHOULD -SHOULDER -SHOULDERED -SHOULDERING -SHOULDERS -SHOUT -SHOUTED -SHOUTER -SHOUTERS -SHOUTING -SHOUTS -SHOVE -SHOVED -SHOVEL -SHOVELED -SHOVELS -SHOVES -SHOVING -SHOW -SHOWBOAT -SHOWCASE -SHOWDOWN -SHOWED -SHOWER -SHOWERED -SHOWERING -SHOWERS -SHOWING -SHOWINGS -SHOWN -SHOWPIECE -SHOWROOM -SHOWS -SHOWY -SHRANK -SHRAPNEL -SHRED -SHREDDER -SHREDDING -SHREDS -SHREVEPORT -SHREW -SHREWD -SHREWDEST -SHREWDLY -SHREWDNESS -SHREWS -SHRIEK -SHRIEKED -SHRIEKING -SHRIEKS -SHRILL -SHRILLED -SHRILLING -SHRILLNESS -SHRILLY -SHRIMP -SHRINE -SHRINES -SHRINK -SHRINKABLE -SHRINKAGE -SHRINKING -SHRINKS -SHRIVEL -SHRIVELED -SHROUD -SHROUDED -SHRUB -SHRUBBERY -SHRUBS -SHRUG -SHRUGS -SHRUNK -SHRUNKEN -SHU -SHUDDER -SHUDDERED -SHUDDERING -SHUDDERS -SHUFFLE -SHUFFLEBOARD -SHUFFLED -SHUFFLES -SHUFFLING -SHULMAN -SHUN -SHUNS -SHUNT -SHUT -SHUTDOWN -SHUTDOWNS -SHUTOFF -SHUTOUT -SHUTS -SHUTTER -SHUTTERED -SHUTTERS -SHUTTING -SHUTTLE -SHUTTLECOCK -SHUTTLED -SHUTTLES -SHUTTLING -SHY -SHYLOCK -SHYLOCKIAN -SHYLY -SHYNESS -SIAM -SIAMESE -SIAN -SIBERIA -SIBERIAN -SIBLEY -SIBLING -SIBLINGS -SICILIAN -SICILIANA -SICILIANS -SICILY -SICK -SICKEN -SICKER -SICKEST -SICKLE -SICKLY -SICKNESS -SICKNESSES -SICKROOM -SIDE -SIDEARM -SIDEBAND -SIDEBOARD -SIDEBOARDS -SIDEBURNS -SIDECAR -SIDED -SIDELIGHT -SIDELIGHTS -SIDELINE -SIDEREAL -SIDES -SIDESADDLE -SIDESHOW -SIDESTEP -SIDETRACK -SIDEWALK -SIDEWALKS -SIDEWAYS -SIDEWISE -SIDING -SIDINGS -SIDNEY -SIEGE -SIEGEL -SIEGES -SIEGFRIED -SIEGLINDA -SIEGMUND -SIEMENS -SIENA -SIERRA -SIEVE -SIEVES -SIFFORD -SIFT -SIFTED -SIFTER -SIFTING -SIGGRAPH -SIGH -SIGHED -SIGHING -SIGHS -SIGHT -SIGHTED -SIGHTING -SIGHTINGS -SIGHTLY -SIGHTS -SIGHTSEEING -SIGMA -SIGMUND -SIGN -SIGNAL -SIGNALED -SIGNALING -SIGNALLED -SIGNALLING -SIGNALLY -SIGNALS -SIGNATURE -SIGNATURES -SIGNED -SIGNER -SIGNERS -SIGNET -SIGNIFICANCE -SIGNIFICANT -SIGNIFICANTLY -SIGNIFICANTS -SIGNIFICATION -SIGNIFIED -SIGNIFIES -SIGNIFY -SIGNIFYING -SIGNING -SIGNS -SIKH -SIKHES -SIKHS -SIKKIM -SIKKIMESE -SIKORSKY -SILAS -SILENCE -SILENCED -SILENCER -SILENCERS -SILENCES -SILENCING -SILENT -SILENTLY -SILHOUETTE -SILHOUETTED -SILHOUETTES -SILICA -SILICATE -SILICON -SILICONE -SILK -SILKEN -SILKIER -SILKIEST -SILKILY -SILKINE -SILKS -SILKY -SILL -SILLIEST -SILLINESS -SILLS -SILLY -SILO -SILT -SILTED -SILTING -SILTS -SILVER -SILVERED -SILVERING -SILVERMAN -SILVERS -SILVERSMITH -SILVERSTEIN -SILVERWARE -SILVERY -SIMILAR -SIMILARITIES -SIMILARITY -SIMILARLY -SIMILE -SIMILITUDE -SIMLA -SIMMER -SIMMERED -SIMMERING -SIMMERS -SIMMONS -SIMMONSVILLE -SIMMS -SIMON -SIMONS -SIMONSON -SIMPLE -SIMPLEMINDED -SIMPLENESS -SIMPLER -SIMPLEST -SIMPLETON -SIMPLEX -SIMPLICITIES -SIMPLICITY -SIMPLIFICATION -SIMPLIFICATIONS -SIMPLIFIED -SIMPLIFIER -SIMPLIFIERS -SIMPLIFIES -SIMPLIFY -SIMPLIFYING -SIMPLISTIC -SIMPLY -SIMPSON -SIMS -SIMULA -SIMULA -SIMULATE -SIMULATED -SIMULATES -SIMULATING -SIMULATION -SIMULATIONS -SIMULATOR -SIMULATORS -SIMULCAST -SIMULTANEITY -SIMULTANEOUS -SIMULTANEOUSLY -SINAI -SINATRA -SINBAD -SINCE -SINCERE -SINCERELY -SINCEREST -SINCERITY -SINCLAIR -SINE -SINES -SINEW -SINEWS -SINEWY -SINFUL -SINFULLY -SINFULNESS -SING -SINGABLE -SINGAPORE -SINGBORG -SINGE -SINGED -SINGER -SINGERS -SINGING -SINGINGLY -SINGLE -SINGLED -SINGLEHANDED -SINGLENESS -SINGLES -SINGLET -SINGLETON -SINGLETONS -SINGLING -SINGLY -SINGS -SINGSONG -SINGULAR -SINGULARITIES -SINGULARITY -SINGULARLY -SINISTER -SINK -SINKED -SINKER -SINKERS -SINKHOLE -SINKING -SINKS -SINNED -SINNER -SINNERS -SINNING -SINS -SINUOUS -SINUS -SINUSOID -SINUSOIDAL -SINUSOIDS -SIOUX -SIP -SIPHON -SIPHONING -SIPPING -SIPS -SIR -SIRE -SIRED -SIREN -SIRENS -SIRES -SIRIUS -SIRS -SIRUP -SISTER -SISTERLY -SISTERS -SISTINE -SISYPHEAN -SISYPHUS -SIT -SITE -SITED -SITES -SITING -SITS -SITTER -SITTERS -SITTING -SITTINGS -SITU -SITUATE -SITUATED -SITUATES -SITUATING -SITUATION -SITUATIONAL -SITUATIONALLY -SITUATIONS -SIVA -SIX -SIXES -SIXFOLD -SIXGUN -SIXPENCE -SIXTEEN -SIXTEENS -SIXTEENTH -SIXTH -SIXTIES -SIXTIETH -SIXTY -SIZABLE -SIZE -SIZED -SIZES -SIZING -SIZINGS -SIZZLE -SKATE -SKATED -SKATER -SKATERS -SKATES -SKATING -SKELETAL -SKELETON -SKELETONS -SKEPTIC -SKEPTICAL -SKEPTICALLY -SKEPTICISM -SKEPTICS -SKETCH -SKETCHBOOK -SKETCHED -SKETCHES -SKETCHILY -SKETCHING -SKETCHPAD -SKETCHY -SKEW -SKEWED -SKEWER -SKEWERS -SKEWING -SKEWS -SKI -SKID -SKIDDING -SKIED -SKIES -SKIFF -SKIING -SKILL -SKILLED -SKILLET -SKILLFUL -SKILLFULLY -SKILLFULNESS -SKILLS -SKIM -SKIMMED -SKIMMING -SKIMP -SKIMPED -SKIMPING -SKIMPS -SKIMPY -SKIMS -SKIN -SKINDIVE -SKINNED -SKINNER -SKINNERS -SKINNING -SKINNY -SKINS -SKIP -SKIPPED -SKIPPER -SKIPPERS -SKIPPING -SKIPPY -SKIPS -SKIRMISH -SKIRMISHED -SKIRMISHER -SKIRMISHERS -SKIRMISHES -SKIRMISHING -SKIRT -SKIRTED -SKIRTING -SKIRTS -SKIS -SKIT -SKOPJE -SKULK -SKULKED -SKULKER -SKULKING -SKULKS -SKULL -SKULLCAP -SKULLDUGGERY -SKULLS -SKUNK -SKUNKS -SKY -SKYE -SKYHOOK -SKYJACK -SKYLARK -SKYLARKING -SKYLARKS -SKYLIGHT -SKYLIGHTS -SKYLINE -SKYROCKETS -SKYSCRAPER -SKYSCRAPERS -SLAB -SLACK -SLACKEN -SLACKER -SLACKING -SLACKLY -SLACKNESS -SLACKS -SLAIN -SLAM -SLAMMED -SLAMMING -SLAMS -SLANDER -SLANDERER -SLANDEROUS -SLANDERS -SLANG -SLANT -SLANTED -SLANTING -SLANTS -SLAP -SLAPPED -SLAPPING -SLAPS -SLAPSTICK -SLASH -SLASHED -SLASHES -SLASHING -SLAT -SLATE -SLATED -SLATER -SLATES -SLATS -SLAUGHTER -SLAUGHTERED -SLAUGHTERHOUSE -SLAUGHTERING -SLAUGHTERS -SLAV -SLAVE -SLAVER -SLAVERY -SLAVES -SLAVIC -SLAVICIZE -SLAVICIZES -SLAVISH -SLAVIZATION -SLAVIZATIONS -SLAVIZE -SLAVIZES -SLAVONIC -SLAVONICIZE -SLAVONICIZES -SLAVS -SLAY -SLAYER -SLAYERS -SLAYING -SLAYS -SLED -SLEDDING -SLEDGE -SLEDGEHAMMER -SLEDGES -SLEDS -SLEEK -SLEEP -SLEEPER -SLEEPERS -SLEEPILY -SLEEPINESS -SLEEPING -SLEEPLESS -SLEEPLESSLY -SLEEPLESSNESS -SLEEPS -SLEEPWALK -SLEEPY -SLEET -SLEEVE -SLEEVES -SLEIGH -SLEIGHS -SLEIGHT -SLENDER -SLENDERER -SLEPT -SLESINGER -SLEUTH -SLEW -SLEWING -SLICE -SLICED -SLICER -SLICERS -SLICES -SLICING -SLICK -SLICKER -SLICKERS -SLICKS -SLID -SLIDE -SLIDER -SLIDERS -SLIDES -SLIDING -SLIGHT -SLIGHTED -SLIGHTER -SLIGHTEST -SLIGHTING -SLIGHTLY -SLIGHTNESS -SLIGHTS -SLIM -SLIME -SLIMED -SLIMLY -SLIMY -SLING -SLINGING -SLINGS -SLINGSHOT -SLIP -SLIPPAGE -SLIPPED -SLIPPER -SLIPPERINESS -SLIPPERS -SLIPPERY -SLIPPING -SLIPS -SLIT -SLITHER -SLITS -SLIVER -SLOAN -SLOANE -SLOB -SLOCUM -SLOGAN -SLOGANS -SLOOP -SLOP -SLOPE -SLOPED -SLOPER -SLOPERS -SLOPES -SLOPING -SLOPPED -SLOPPINESS -SLOPPING -SLOPPY -SLOPS -SLOT -SLOTH -SLOTHFUL -SLOTHS -SLOTS -SLOTTED -SLOTTING -SLOUCH -SLOUCHED -SLOUCHES -SLOUCHING -SLOVAKIA -SLOVENIA -SLOW -SLOWDOWN -SLOWED -SLOWER -SLOWEST -SLOWING -SLOWLY -SLOWNESS -SLOWS -SLUDGE -SLUG -SLUGGISH -SLUGGISHLY -SLUGGISHNESS -SLUGS -SLUICE -SLUM -SLUMBER -SLUMBERED -SLUMMING -SLUMP -SLUMPED -SLUMPS -SLUMS -SLUNG -SLUR -SLURP -SLURRING -SLURRY -SLURS -SLY -SLYLY -SMACK -SMACKED -SMACKING -SMACKS -SMALL -SMALLER -SMALLEST -SMALLEY -SMALLISH -SMALLNESS -SMALLPOX -SMALLTIME -SMALLWOOD -SMART -SMARTED -SMARTER -SMARTEST -SMARTLY -SMARTNESS -SMASH -SMASHED -SMASHER -SMASHERS -SMASHES -SMASHING -SMASHINGLY -SMATTERING -SMEAR -SMEARED -SMEARING -SMEARS -SMELL -SMELLED -SMELLING -SMELLS -SMELLY -SMELT -SMELTER -SMELTS -SMILE -SMILED -SMILES -SMILING -SMILINGLY -SMIRK -SMITE -SMITH -SMITHEREENS -SMITHFIELD -SMITHS -SMITHSON -SMITHSONIAN -SMITHTOWN -SMITHY -SMITTEN -SMOCK -SMOCKING -SMOCKS -SMOG -SMOKABLE -SMOKE -SMOKED -SMOKER -SMOKERS -SMOKES -SMOKESCREEN -SMOKESTACK -SMOKIES -SMOKING -SMOKY -SMOLDER -SMOLDERED -SMOLDERING -SMOLDERS -SMOOCH -SMOOTH -SMOOTHBORE -SMOOTHED -SMOOTHER -SMOOTHES -SMOOTHEST -SMOOTHING -SMOOTHLY -SMOOTHNESS -SMOTE -SMOTHER -SMOTHERED -SMOTHERING -SMOTHERS -SMUCKER -SMUDGE -SMUG -SMUGGLE -SMUGGLED -SMUGGLER -SMUGGLERS -SMUGGLES -SMUGGLING -SMUT -SMUTTY -SMYRNA -SMYTHE -SNACK -SNAFU -SNAG -SNAIL -SNAILS -SNAKE -SNAKED -SNAKELIKE -SNAKES -SNAP -SNAPDRAGON -SNAPPED -SNAPPER -SNAPPERS -SNAPPILY -SNAPPING -SNAPPY -SNAPS -SNAPSHOT -SNAPSHOTS -SNARE -SNARED -SNARES -SNARING -SNARK -SNARL -SNARLED -SNARLING -SNATCH -SNATCHED -SNATCHES -SNATCHING -SNAZZY -SNEAD -SNEAK -SNEAKED -SNEAKER -SNEAKERS -SNEAKIER -SNEAKIEST -SNEAKILY -SNEAKINESS -SNEAKING -SNEAKS -SNEAKY -SNEED -SNEER -SNEERED -SNEERING -SNEERS -SNEEZE -SNEEZED -SNEEZES -SNEEZING -SNIDER -SNIFF -SNIFFED -SNIFFING -SNIFFLE -SNIFFS -SNIFTER -SNIGGER -SNIP -SNIPE -SNIPPET -SNIVEL -SNOB -SNOBBERY -SNOBBISH -SNODGRASS -SNOOP -SNOOPED -SNOOPING -SNOOPS -SNOOPY -SNORE -SNORED -SNORES -SNORING -SNORKEL -SNORT -SNORTED -SNORTING -SNORTS -SNOTTY -SNOUT -SNOUTS -SNOW -SNOWBALL -SNOWBELT -SNOWED -SNOWFALL -SNOWFLAKE -SNOWIER -SNOWIEST -SNOWILY -SNOWING -SNOWMAN -SNOWMEN -SNOWS -SNOWSHOE -SNOWSHOES -SNOWSTORM -SNOWY -SNUB -SNUFF -SNUFFED -SNUFFER -SNUFFING -SNUFFS -SNUG -SNUGGLE -SNUGGLED -SNUGGLES -SNUGGLING -SNUGLY -SNUGNESS -SNYDER -SOAK -SOAKED -SOAKING -SOAKS -SOAP -SOAPED -SOAPING -SOAPS -SOAPY -SOAR -SOARED -SOARING -SOARS -SOB -SOBBING -SOBER -SOBERED -SOBERING -SOBERLY -SOBERNESS -SOBERS -SOBRIETY -SOBS -SOCCER -SOCIABILITY -SOCIABLE -SOCIABLY -SOCIAL -SOCIALISM -SOCIALIST -SOCIALISTS -SOCIALIZE -SOCIALIZED -SOCIALIZES -SOCIALIZING -SOCIALLY -SOCIETAL -SOCIETIES -SOCIETY -SOCIOECONOMIC -SOCIOLOGICAL -SOCIOLOGICALLY -SOCIOLOGIST -SOCIOLOGISTS -SOCIOLOGY -SOCK -SOCKED -SOCKET -SOCKETS -SOCKING -SOCKS -SOCRATES -SOCRATIC -SOD -SODA -SODDY -SODIUM -SODOMY -SODS -SOFA -SOFAS -SOFIA -SOFT -SOFTBALL -SOFTEN -SOFTENED -SOFTENING -SOFTENS -SOFTER -SOFTEST -SOFTLY -SOFTNESS -SOFTWARE -SOFTWARES -SOGGY -SOIL -SOILED -SOILING -SOILS -SOIREE -SOJOURN -SOJOURNER -SOJOURNERS -SOL -SOLACE -SOLACED -SOLAR -SOLD -SOLDER -SOLDERED -SOLDIER -SOLDIERING -SOLDIERLY -SOLDIERS -SOLE -SOLELY -SOLEMN -SOLEMNITY -SOLEMNLY -SOLEMNNESS -SOLENOID -SOLES -SOLICIT -SOLICITATION -SOLICITED -SOLICITING -SOLICITOR -SOLICITOUS -SOLICITS -SOLICITUDE -SOLID -SOLIDARITY -SOLIDIFICATION -SOLIDIFIED -SOLIDIFIES -SOLIDIFY -SOLIDIFYING -SOLIDITY -SOLIDLY -SOLIDNESS -SOLIDS -SOLILOQUY -SOLITAIRE -SOLITARY -SOLITUDE -SOLITUDES -SOLLY -SOLO -SOLOMON -SOLON -SOLOS -SOLOVIEV -SOLSTICE -SOLUBILITY -SOLUBLE -SOLUTION -SOLUTIONS -SOLVABLE -SOLVE -SOLVED -SOLVENT -SOLVENTS -SOLVER -SOLVERS -SOLVES -SOLVING -SOMALI -SOMALIA -SOMALIS -SOMATIC -SOMBER -SOMBERLY -SOME -SOMEBODY -SOMEDAY -SOMEHOW -SOMEONE -SOMEPLACE -SOMERS -SOMERSAULT -SOMERSET -SOMERVILLE -SOMETHING -SOMETIME -SOMETIMES -SOMEWHAT -SOMEWHERE -SOMMELIER -SOMMERFELD -SOMNOLENT -SON -SONAR -SONATA -SONENBERG -SONG -SONGBOOK -SONGS -SONIC -SONNET -SONNETS -SONNY -SONOMA -SONORA -SONS -SONY -SOON -SOONER -SOONEST -SOOT -SOOTH -SOOTHE -SOOTHED -SOOTHER -SOOTHES -SOOTHING -SOOTHSAYER -SOPHIA -SOPHIAS -SOPHIE -SOPHISTICATED -SOPHISTICATION -SOPHISTRY -SOPHOCLEAN -SOPHOCLES -SOPHOMORE -SOPHOMORES -SOPRANO -SORCERER -SORCERERS -SORCERY -SORDID -SORDIDLY -SORDIDNESS -SORE -SORELY -SORENESS -SORENSEN -SORENSON -SORER -SORES -SOREST -SORGHUM -SORORITY -SORREL -SORRENTINE -SORRIER -SORRIEST -SORROW -SORROWFUL -SORROWFULLY -SORROWS -SORRY -SORT -SORTED -SORTER -SORTERS -SORTIE -SORTING -SORTS -SOUGHT -SOUL -SOULFUL -SOULS -SOUND -SOUNDED -SOUNDER -SOUNDEST -SOUNDING -SOUNDINGS -SOUNDLY -SOUNDNESS -SOUNDPROOF -SOUNDS -SOUP -SOUPED -SOUPS -SOUR -SOURCE -SOURCES -SOURDOUGH -SOURED -SOURER -SOUREST -SOURING -SOURLY -SOURNESS -SOURS -SOUSA -SOUTH -SOUTHAMPTON -SOUTHBOUND -SOUTHEAST -SOUTHEASTERN -SOUTHERN -SOUTHERNER -SOUTHERNERS -SOUTHERNMOST -SOUTHERNWOOD -SOUTHEY -SOUTHFIELD -SOUTHLAND -SOUTHPAW -SOUTHWARD -SOUTHWEST -SOUTHWESTERN -SOUVENIR -SOVEREIGN -SOVEREIGNS -SOVEREIGNTY -SOVIET -SOVIETS -SOW -SOWN -SOY -SOYA -SOYBEAN -SPA -SPACE -SPACECRAFT -SPACED -SPACER -SPACERS -SPACES -SPACESHIP -SPACESHIPS -SPACESUIT -SPACEWAR -SPACING -SPACINGS -SPACIOUS -SPADED -SPADES -SPADING -SPAFFORD -SPAHN -SPAIN -SPALDING -SPAN -SPANDREL -SPANIARD -SPANIARDIZATION -SPANIARDIZATIONS -SPANIARDIZE -SPANIARDIZES -SPANIARDS -SPANIEL -SPANISH -SPANISHIZE -SPANISHIZES -SPANK -SPANKED -SPANKING -SPANKS -SPANNED -SPANNER -SPANNERS -SPANNING -SPANS -SPARC -SPARCSTATION -SPARE -SPARED -SPARELY -SPARENESS -SPARER -SPARES -SPAREST -SPARING -SPARINGLY -SPARK -SPARKED -SPARKING -SPARKLE -SPARKLING -SPARKMAN -SPARKS -SPARRING -SPARROW -SPARROWS -SPARSE -SPARSELY -SPARSENESS -SPARSER -SPARSEST -SPARTA -SPARTAN -SPARTANIZE -SPARTANIZES -SPASM -SPASTIC -SPAT -SPATE -SPATES -SPATIAL -SPATIALLY -SPATTER -SPATTERED -SPATULA -SPAULDING -SPAWN -SPAWNED -SPAWNING -SPAWNS -SPAYED -SPEAK -SPEAKABLE -SPEAKEASY -SPEAKER -SPEAKERPHONE -SPEAKERPHONES -SPEAKERS -SPEAKING -SPEAKS -SPEAR -SPEARED -SPEARMINT -SPEARS -SPEC -SPECIAL -SPECIALIST -SPECIALISTS -SPECIALIZATION -SPECIALIZATIONS -SPECIALIZE -SPECIALIZED -SPECIALIZES -SPECIALIZING -SPECIALLY -SPECIALS -SPECIALTIES -SPECIALTY -SPECIE -SPECIES -SPECIFIABLE -SPECIFIC -SPECIFICALLY -SPECIFICATION -SPECIFICATIONS -SPECIFICITY -SPECIFICS -SPECIFIED -SPECIFIER -SPECIFIERS -SPECIFIES -SPECIFY -SPECIFYING -SPECIMEN -SPECIMENS -SPECIOUS -SPECK -SPECKLE -SPECKLED -SPECKLES -SPECKS -SPECTACLE -SPECTACLED -SPECTACLES -SPECTACULAR -SPECTACULARLY -SPECTATOR -SPECTATORS -SPECTER -SPECTERS -SPECTOR -SPECTRA -SPECTRAL -SPECTROGRAM -SPECTROGRAMS -SPECTROGRAPH -SPECTROGRAPHIC -SPECTROGRAPHY -SPECTROMETER -SPECTROPHOTOMETER -SPECTROPHOTOMETRY -SPECTROSCOPE -SPECTROSCOPIC -SPECTROSCOPY -SPECTRUM -SPECULATE -SPECULATED -SPECULATES -SPECULATING -SPECULATION -SPECULATIONS -SPECULATIVE -SPECULATOR -SPECULATORS -SPED -SPEECH -SPEECHES -SPEECHLESS -SPEECHLESSNESS -SPEED -SPEEDBOAT -SPEEDED -SPEEDER -SPEEDERS -SPEEDILY -SPEEDING -SPEEDOMETER -SPEEDS -SPEEDUP -SPEEDUPS -SPEEDY -SPELL -SPELLBOUND -SPELLED -SPELLER -SPELLERS -SPELLING -SPELLINGS -SPELLS -SPENCER -SPENCERIAN -SPEND -SPENDER -SPENDERS -SPENDING -SPENDS -SPENGLERIAN -SPENT -SPERM -SPERRY -SPHERE -SPHERES -SPHERICAL -SPHERICALLY -SPHEROID -SPHEROIDAL -SPHINX -SPICA -SPICE -SPICED -SPICES -SPICINESS -SPICY -SPIDER -SPIDERS -SPIDERY -SPIEGEL -SPIES -SPIGOT -SPIKE -SPIKED -SPIKES -SPILL -SPILLED -SPILLER -SPILLING -SPILLS -SPILT -SPIN -SPINACH -SPINAL -SPINALLY -SPINDLE -SPINDLED -SPINDLING -SPINE -SPINNAKER -SPINNER -SPINNERS -SPINNING -SPINOFF -SPINS -SPINSTER -SPINY -SPIRAL -SPIRALED -SPIRALING -SPIRALLY -SPIRE -SPIRES -SPIRIT -SPIRITED -SPIRITEDLY -SPIRITING -SPIRITS -SPIRITUAL -SPIRITUALLY -SPIRITUALS -SPIRO -SPIT -SPITE -SPITED -SPITEFUL -SPITEFULLY -SPITEFULNESS -SPITES -SPITFIRE -SPITING -SPITS -SPITTING -SPITTLE -SPITZ -SPLASH -SPLASHED -SPLASHES -SPLASHING -SPLASHY -SPLEEN -SPLENDID -SPLENDIDLY -SPLENDOR -SPLENETIC -SPLICE -SPLICED -SPLICER -SPLICERS -SPLICES -SPLICING -SPLICINGS -SPLINE -SPLINES -SPLINT -SPLINTER -SPLINTERED -SPLINTERS -SPLINTERY -SPLIT -SPLITS -SPLITTER -SPLITTERS -SPLITTING -SPLURGE -SPOIL -SPOILAGE -SPOILED -SPOILER -SPOILERS -SPOILING -SPOILS -SPOKANE -SPOKE -SPOKED -SPOKEN -SPOKES -SPOKESMAN -SPOKESMEN -SPONGE -SPONGED -SPONGER -SPONGERS -SPONGES -SPONGING -SPONGY -SPONSOR -SPONSORED -SPONSORING -SPONSORS -SPONSORSHIP -SPONTANEITY -SPONTANEOUS -SPONTANEOUSLY -SPOOF -SPOOK -SPOOKY -SPOOL -SPOOLED -SPOOLER -SPOOLERS -SPOOLING -SPOOLS -SPOON -SPOONED -SPOONFUL -SPOONING -SPOONS -SPORADIC -SPORE -SPORES -SPORT -SPORTED -SPORTING -SPORTINGLY -SPORTIVE -SPORTS -SPORTSMAN -SPORTSMEN -SPORTSWEAR -SPORTSWRITER -SPORTSWRITING -SPORTY -SPOSATO -SPOT -SPOTLESS -SPOTLESSLY -SPOTLIGHT -SPOTS -SPOTTED -SPOTTER -SPOTTERS -SPOTTING -SPOTTY -SPOUSE -SPOUSES -SPOUT -SPOUTED -SPOUTING -SPOUTS -SPRAGUE -SPRAIN -SPRANG -SPRAWL -SPRAWLED -SPRAWLING -SPRAWLS -SPRAY -SPRAYED -SPRAYER -SPRAYING -SPRAYS -SPREAD -SPREADER -SPREADERS -SPREADING -SPREADINGS -SPREADS -SPREADSHEET -SPREE -SPREES -SPRIG -SPRIGHTLY -SPRING -SPRINGBOARD -SPRINGER -SPRINGERS -SPRINGFIELD -SPRINGIER -SPRINGIEST -SPRINGINESS -SPRINGING -SPRINGS -SPRINGTIME -SPRINGY -SPRINKLE -SPRINKLED -SPRINKLER -SPRINKLES -SPRINKLING -SPRINT -SPRINTED -SPRINTER -SPRINTERS -SPRINTING -SPRINTS -SPRITE -SPROCKET -SPROUL -SPROUT -SPROUTED -SPROUTING -SPRUCE -SPRUCED -SPRUNG -SPUDS -SPUN -SPUNK -SPUR -SPURIOUS -SPURN -SPURNED -SPURNING -SPURNS -SPURS -SPURT -SPURTED -SPURTING -SPURTS -SPUTTER -SPUTTERED -SPY -SPYGLASS -SPYING -SQUABBLE -SQUABBLED -SQUABBLES -SQUABBLING -SQUAD -SQUADRON -SQUADRONS -SQUADS -SQUALID -SQUALL -SQUALLS -SQUANDER -SQUARE -SQUARED -SQUARELY -SQUARENESS -SQUARER -SQUARES -SQUAREST -SQUARESVILLE -SQUARING -SQUASH -SQUASHED -SQUASHING -SQUAT -SQUATS -SQUATTING -SQUAW -SQUAWK -SQUAWKED -SQUAWKING -SQUAWKS -SQUEAK -SQUEAKED -SQUEAKING -SQUEAKS -SQUEAKY -SQUEAL -SQUEALED -SQUEALING -SQUEALS -SQUEAMISH -SQUEEZE -SQUEEZED -SQUEEZER -SQUEEZES -SQUEEZING -SQUELCH -SQUIBB -SQUID -SQUINT -SQUINTED -SQUINTING -SQUIRE -SQUIRES -SQUIRM -SQUIRMED -SQUIRMS -SQUIRMY -SQUIRREL -SQUIRRELED -SQUIRRELING -SQUIRRELS -SQUIRT -SQUISHY -SRI -STAB -STABBED -STABBING -STABILE -STABILITIES -STABILITY -STABILIZE -STABILIZED -STABILIZER -STABILIZERS -STABILIZES -STABILIZING -STABLE -STABLED -STABLER -STABLES -STABLING -STABLY -STABS -STACK -STACKED -STACKING -STACKS -STACY -STADIA -STADIUM -STAFF -STAFFED -STAFFER -STAFFERS -STAFFING -STAFFORD -STAFFORDSHIRE -STAFFS -STAG -STAGE -STAGECOACH -STAGECOACHES -STAGED -STAGER -STAGERS -STAGES -STAGGER -STAGGERED -STAGGERING -STAGGERS -STAGING -STAGNANT -STAGNATE -STAGNATION -STAGS -STAHL -STAID -STAIN -STAINED -STAINING -STAINLESS -STAINS -STAIR -STAIRCASE -STAIRCASES -STAIRS -STAIRWAY -STAIRWAYS -STAIRWELL -STAKE -STAKED -STAKES -STALACTITE -STALE -STALEMATE -STALEY -STALIN -STALINIST -STALINS -STALK -STALKED -STALKING -STALL -STALLED -STALLING -STALLINGS -STALLION -STALLS -STALWART -STALWARTLY -STAMEN -STAMENS -STAMFORD -STAMINA -STAMMER -STAMMERED -STAMMERER -STAMMERING -STAMMERS -STAMP -STAMPED -STAMPEDE -STAMPEDED -STAMPEDES -STAMPEDING -STAMPER -STAMPERS -STAMPING -STAMPS -STAN -STANCH -STANCHEST -STANCHION -STAND -STANDARD -STANDARDIZATION -STANDARDIZE -STANDARDIZED -STANDARDIZES -STANDARDIZING -STANDARDLY -STANDARDS -STANDBY -STANDING -STANDINGS -STANDISH -STANDOFF -STANDPOINT -STANDPOINTS -STANDS -STANDSTILL -STANFORD -STANHOPE -STANLEY -STANS -STANTON -STANZA -STANZAS -STAPHYLOCOCCUS -STAPLE -STAPLER -STAPLES -STAPLETON -STAPLING -STAR -STARBOARD -STARCH -STARCHED -STARDOM -STARE -STARED -STARER -STARES -STARFISH -STARGATE -STARING -STARK -STARKEY -STARKLY -STARLET -STARLIGHT -STARLING -STARR -STARRED -STARRING -STARRY -STARS -START -STARTED -STARTER -STARTERS -STARTING -STARTLE -STARTLED -STARTLES -STARTLING -STARTS -STARTUP -STARTUPS -STARVATION -STARVE -STARVED -STARVES -STARVING -STATE -STATED -STATELY -STATEMENT -STATEMENTS -STATEN -STATES -STATESMAN -STATESMANLIKE -STATESMEN -STATEWIDE -STATIC -STATICALLY -STATING -STATION -STATIONARY -STATIONED -STATIONER -STATIONERY -STATIONING -STATIONMASTER -STATIONS -STATISTIC -STATISTICAL -STATISTICALLY -STATISTICIAN -STATISTICIANS -STATISTICS -STATLER -STATUE -STATUES -STATUESQUE -STATUESQUELY -STATUESQUENESS -STATUETTE -STATURE -STATUS -STATUSES -STATUTE -STATUTES -STATUTORILY -STATUTORINESS -STATUTORY -STAUFFER -STAUNCH -STAUNCHEST -STAUNCHLY -STAUNTON -STAVE -STAVED -STAVES -STAY -STAYED -STAYING -STAYS -STEAD -STEADFAST -STEADFASTLY -STEADFASTNESS -STEADIED -STEADIER -STEADIES -STEADIEST -STEADILY -STEADINESS -STEADY -STEADYING -STEAK -STEAKS -STEAL -STEALER -STEALING -STEALS -STEALTH -STEALTHILY -STEALTHY -STEAM -STEAMBOAT -STEAMBOATS -STEAMED -STEAMER -STEAMERS -STEAMING -STEAMS -STEAMSHIP -STEAMSHIPS -STEAMY -STEARNS -STEED -STEEL -STEELE -STEELED -STEELERS -STEELING -STEELMAKER -STEELS -STEELY -STEEN -STEEP -STEEPED -STEEPER -STEEPEST -STEEPING -STEEPLE -STEEPLES -STEEPLY -STEEPNESS -STEEPS -STEER -STEERABLE -STEERED -STEERING -STEERS -STEFAN -STEGOSAURUS -STEINBECK -STEINBERG -STEINER -STELLA -STELLAR -STEM -STEMMED -STEMMING -STEMS -STENCH -STENCHES -STENCIL -STENCILS -STENDHAL -STENDLER -STENOGRAPHER -STENOGRAPHERS -STENOTYPE -STEP -STEPCHILD -STEPHAN -STEPHANIE -STEPHEN -STEPHENS -STEPHENSON -STEPMOTHER -STEPMOTHERS -STEPPED -STEPPER -STEPPING -STEPS -STEPSON -STEPWISE -STEREO -STEREOS -STEREOSCOPIC -STEREOTYPE -STEREOTYPED -STEREOTYPES -STEREOTYPICAL -STERILE -STERILIZATION -STERILIZATIONS -STERILIZE -STERILIZED -STERILIZER -STERILIZES -STERILIZING -STERLING -STERN -STERNBERG -STERNLY -STERNNESS -STERNO -STERNS -STETHOSCOPE -STETSON -STETSONS -STEUBEN -STEVE -STEVEDORE -STEVEN -STEVENS -STEVENSON -STEVIE -STEW -STEWARD -STEWARDESS -STEWARDS -STEWART -STEWED -STEWS -STICK -STICKER -STICKERS -STICKIER -STICKIEST -STICKILY -STICKINESS -STICKING -STICKLEBACK -STICKS -STICKY -STIFF -STIFFEN -STIFFENS -STIFFER -STIFFEST -STIFFLY -STIFFNESS -STIFFS -STIFLE -STIFLED -STIFLES -STIFLING -STIGMA -STIGMATA -STILE -STILES -STILETTO -STILL -STILLBIRTH -STILLBORN -STILLED -STILLER -STILLEST -STILLING -STILLNESS -STILLS -STILLWELL -STILT -STILTS -STIMSON -STIMULANT -STIMULANTS -STIMULATE -STIMULATED -STIMULATES -STIMULATING -STIMULATION -STIMULATIONS -STIMULATIVE -STIMULI -STIMULUS -STING -STINGING -STINGS -STINGY -STINK -STINKER -STINKERS -STINKING -STINKS -STINT -STIPEND -STIPENDS -STIPULATE -STIPULATED -STIPULATES -STIPULATING -STIPULATION -STIPULATIONS -STIR -STIRLING -STIRRED -STIRRER -STIRRERS -STIRRING -STIRRINGLY -STIRRINGS -STIRRUP -STIRS -STITCH -STITCHED -STITCHES -STITCHING -STOCHASTIC -STOCHASTICALLY -STOCK -STOCKADE -STOCKADES -STOCKBROKER -STOCKED -STOCKER -STOCKERS -STOCKHOLDER -STOCKHOLDERS -STOCKHOLM -STOCKING -STOCKINGS -STOCKPILE -STOCKROOM -STOCKS -STOCKTON -STOCKY -STODGY -STOICHIOMETRY -STOKE -STOKES -STOLE -STOLEN -STOLES -STOLID -STOMACH -STOMACHED -STOMACHER -STOMACHES -STOMACHING -STOMP -STONE -STONED -STONEHENGE -STONES -STONING -STONY -STOOD -STOOGE -STOOL -STOOP -STOOPED -STOOPING -STOOPS -STOP -STOPCOCK -STOPCOCKS -STOPGAP -STOPOVER -STOPPABLE -STOPPAGE -STOPPED -STOPPER -STOPPERS -STOPPING -STOPS -STOPWATCH -STORAGE -STORAGES -STORE -STORED -STOREHOUSE -STOREHOUSES -STOREKEEPER -STOREROOM -STORES -STOREY -STOREYED -STOREYS -STORIED -STORIES -STORING -STORK -STORKS -STORM -STORMED -STORMIER -STORMIEST -STORMINESS -STORMING -STORMS -STORMY -STORY -STORYBOARD -STORYTELLER -STOUFFER -STOUT -STOUTER -STOUTEST -STOUTLY -STOUTNESS -STOVE -STOVES -STOW -STOWE -STOWED -STRADDLE -STRAFE -STRAGGLE -STRAGGLED -STRAGGLER -STRAGGLERS -STRAGGLES -STRAGGLING -STRAIGHT -STRAIGHTAWAY -STRAIGHTEN -STRAIGHTENED -STRAIGHTENS -STRAIGHTER -STRAIGHTEST -STRAIGHTFORWARD -STRAIGHTFORWARDLY -STRAIGHTFORWARDNESS -STRAIGHTNESS -STRAIGHTWAY -STRAIN -STRAINED -STRAINER -STRAINERS -STRAINING -STRAINS -STRAIT -STRAITEN -STRAITS -STRAND -STRANDED -STRANDING -STRANDS -STRANGE -STRANGELY -STRANGENESS -STRANGER -STRANGERS -STRANGEST -STRANGLE -STRANGLED -STRANGLER -STRANGLERS -STRANGLES -STRANGLING -STRANGLINGS -STRANGULATION -STRANGULATIONS -STRAP -STRAPS -STRASBOURG -STRATAGEM -STRATAGEMS -STRATEGIC -STRATEGIES -STRATEGIST -STRATEGY -STRATFORD -STRATIFICATION -STRATIFICATIONS -STRATIFIED -STRATIFIES -STRATIFY -STRATOSPHERE -STRATOSPHERIC -STRATTON -STRATUM -STRAUSS -STRAVINSKY -STRAW -STRAWBERRIES -STRAWBERRY -STRAWS -STRAY -STRAYED -STRAYS -STREAK -STREAKED -STREAKS -STREAM -STREAMED -STREAMER -STREAMERS -STREAMING -STREAMLINE -STREAMLINED -STREAMLINER -STREAMLINES -STREAMLINING -STREAMS -STREET -STREETCAR -STREETCARS -STREETERS -STREETS -STRENGTH -STRENGTHEN -STRENGTHENED -STRENGTHENER -STRENGTHENING -STRENGTHENS -STRENGTHS -STRENUOUS -STRENUOUSLY -STREPTOCOCCUS -STRESS -STRESSED -STRESSES -STRESSFUL -STRESSING -STRETCH -STRETCHED -STRETCHER -STRETCHERS -STRETCHES -STRETCHING -STREW -STREWN -STREWS -STRICKEN -STRICKLAND -STRICT -STRICTER -STRICTEST -STRICTLY -STRICTNESS -STRICTURE -STRIDE -STRIDER -STRIDES -STRIDING -STRIFE -STRIKE -STRIKEBREAKER -STRIKER -STRIKERS -STRIKES -STRIKING -STRIKINGLY -STRINDBERG -STRING -STRINGED -STRINGENT -STRINGENTLY -STRINGER -STRINGERS -STRINGIER -STRINGIEST -STRINGINESS -STRINGING -STRINGS -STRINGY -STRIP -STRIPE -STRIPED -STRIPES -STRIPPED -STRIPPER -STRIPPERS -STRIPPING -STRIPS -STRIPTEASE -STRIVE -STRIVEN -STRIVES -STRIVING -STRIVINGS -STROBE -STROBED -STROBES -STROBOSCOPIC -STRODE -STROKE -STROKED -STROKER -STROKERS -STROKES -STROKING -STROLL -STROLLED -STROLLER -STROLLING -STROLLS -STROM -STROMBERG -STRONG -STRONGER -STRONGEST -STRONGHEART -STRONGHOLD -STRONGLY -STRONTIUM -STROVE -STRUCK -STRUCTURAL -STRUCTURALLY -STRUCTURE -STRUCTURED -STRUCTURER -STRUCTURES -STRUCTURING -STRUGGLE -STRUGGLED -STRUGGLES -STRUGGLING -STRUNG -STRUT -STRUTS -STRUTTING -STRYCHNINE -STU -STUART -STUB -STUBBLE -STUBBLEFIELD -STUBBLEFIELDS -STUBBORN -STUBBORNLY -STUBBORNNESS -STUBBY -STUBS -STUCCO -STUCK -STUD -STUDEBAKER -STUDENT -STUDENTS -STUDIED -STUDIES -STUDIO -STUDIOS -STUDIOUS -STUDIOUSLY -STUDS -STUDY -STUDYING -STUFF -STUFFED -STUFFIER -STUFFIEST -STUFFING -STUFFS -STUFFY -STUMBLE -STUMBLED -STUMBLES -STUMBLING -STUMP -STUMPED -STUMPING -STUMPS -STUN -STUNG -STUNNING -STUNNINGLY -STUNT -STUNTS -STUPEFY -STUPEFYING -STUPENDOUS -STUPENDOUSLY -STUPID -STUPIDEST -STUPIDITIES -STUPIDITY -STUPIDLY -STUPOR -STURBRIDGE -STURDINESS -STURDY -STURGEON -STURM -STUTTER -STUTTGART -STUYVESANT -STYGIAN -STYLE -STYLED -STYLER -STYLERS -STYLES -STYLI -STYLING -STYLISH -STYLISHLY -STYLISHNESS -STYLISTIC -STYLISTICALLY -STYLIZED -STYLUS -STYROFOAM -STYX -SUAVE -SUB -SUBATOMIC -SUBCHANNEL -SUBCHANNELS -SUBCLASS -SUBCLASSES -SUBCOMMITTEES -SUBCOMPONENT -SUBCOMPONENTS -SUBCOMPUTATION -SUBCOMPUTATIONS -SUBCONSCIOUS -SUBCONSCIOUSLY -SUBCULTURE -SUBCULTURES -SUBCYCLE -SUBCYCLES -SUBDIRECTORIES -SUBDIRECTORY -SUBDIVIDE -SUBDIVIDED -SUBDIVIDES -SUBDIVIDING -SUBDIVISION -SUBDIVISIONS -SUBDOMAINS -SUBDUE -SUBDUED -SUBDUES -SUBDUING -SUBEXPRESSION -SUBEXPRESSIONS -SUBFIELD -SUBFIELDS -SUBFILE -SUBFILES -SUBGOAL -SUBGOALS -SUBGRAPH -SUBGRAPHS -SUBGROUP -SUBGROUPS -SUBINTERVAL -SUBINTERVALS -SUBJECT -SUBJECTED -SUBJECTING -SUBJECTION -SUBJECTIVE -SUBJECTIVELY -SUBJECTIVITY -SUBJECTS -SUBLANGUAGE -SUBLANGUAGES -SUBLAYER -SUBLAYERS -SUBLIMATION -SUBLIMATIONS -SUBLIME -SUBLIMED -SUBLIST -SUBLISTS -SUBMARINE -SUBMARINER -SUBMARINERS -SUBMARINES -SUBMERGE -SUBMERGED -SUBMERGES -SUBMERGING -SUBMISSION -SUBMISSIONS -SUBMISSIVE -SUBMIT -SUBMITS -SUBMITTAL -SUBMITTED -SUBMITTING -SUBMODE -SUBMODES -SUBMODULE -SUBMODULES -SUBMULTIPLEXED -SUBNET -SUBNETS -SUBNETWORK -SUBNETWORKS -SUBOPTIMAL -SUBORDINATE -SUBORDINATED -SUBORDINATES -SUBORDINATION -SUBPARTS -SUBPHASES -SUBPOENA -SUBPROBLEM -SUBPROBLEMS -SUBPROCESSES -SUBPROGRAM -SUBPROGRAMS -SUBPROJECT -SUBPROOF -SUBPROOFS -SUBRANGE -SUBRANGES -SUBROUTINE -SUBROUTINES -SUBS -SUBSCHEMA -SUBSCHEMAS -SUBSCRIBE -SUBSCRIBED -SUBSCRIBER -SUBSCRIBERS -SUBSCRIBES -SUBSCRIBING -SUBSCRIPT -SUBSCRIPTED -SUBSCRIPTING -SUBSCRIPTION -SUBSCRIPTIONS -SUBSCRIPTS -SUBSECTION -SUBSECTIONS -SUBSEGMENT -SUBSEGMENTS -SUBSEQUENCE -SUBSEQUENCES -SUBSEQUENT -SUBSEQUENTLY -SUBSERVIENT -SUBSET -SUBSETS -SUBSIDE -SUBSIDED -SUBSIDES -SUBSIDIARIES -SUBSIDIARY -SUBSIDIES -SUBSIDING -SUBSIDIZE -SUBSIDIZED -SUBSIDIZES -SUBSIDIZING -SUBSIDY -SUBSIST -SUBSISTED -SUBSISTENCE -SUBSISTENT -SUBSISTING -SUBSISTS -SUBSLOT -SUBSLOTS -SUBSPACE -SUBSPACES -SUBSTANCE -SUBSTANCES -SUBSTANTIAL -SUBSTANTIALLY -SUBSTANTIATE -SUBSTANTIATED -SUBSTANTIATES -SUBSTANTIATING -SUBSTANTIATION -SUBSTANTIATIONS -SUBSTANTIVE -SUBSTANTIVELY -SUBSTANTIVITY -SUBSTATION -SUBSTATIONS -SUBSTITUTABILITY -SUBSTITUTABLE -SUBSTITUTE -SUBSTITUTED -SUBSTITUTES -SUBSTITUTING -SUBSTITUTION -SUBSTITUTIONS -SUBSTRATE -SUBSTRATES -SUBSTRING -SUBSTRINGS -SUBSTRUCTURE -SUBSTRUCTURES -SUBSUME -SUBSUMED -SUBSUMES -SUBSUMING -SUBSYSTEM -SUBSYSTEMS -SUBTASK -SUBTASKS -SUBTERFUGE -SUBTERRANEAN -SUBTITLE -SUBTITLED -SUBTITLES -SUBTLE -SUBTLENESS -SUBTLER -SUBTLEST -SUBTLETIES -SUBTLETY -SUBTLY -SUBTOTAL -SUBTRACT -SUBTRACTED -SUBTRACTING -SUBTRACTION -SUBTRACTIONS -SUBTRACTOR -SUBTRACTORS -SUBTRACTS -SUBTRAHEND -SUBTRAHENDS -SUBTREE -SUBTREES -SUBUNIT -SUBUNITS -SUBURB -SUBURBAN -SUBURBIA -SUBURBS -SUBVERSION -SUBVERSIVE -SUBVERT -SUBVERTED -SUBVERTER -SUBVERTING -SUBVERTS -SUBWAY -SUBWAYS -SUCCEED -SUCCEEDED -SUCCEEDING -SUCCEEDS -SUCCESS -SUCCESSES -SUCCESSFUL -SUCCESSFULLY -SUCCESSION -SUCCESSIONS -SUCCESSIVE -SUCCESSIVELY -SUCCESSOR -SUCCESSORS -SUCCINCT -SUCCINCTLY -SUCCINCTNESS -SUCCOR -SUCCUMB -SUCCUMBED -SUCCUMBING -SUCCUMBS -SUCH -SUCK -SUCKED -SUCKER -SUCKERS -SUCKING -SUCKLE -SUCKLING -SUCKS -SUCTION -SUDAN -SUDANESE -SUDANIC -SUDDEN -SUDDENLY -SUDDENNESS -SUDS -SUDSING -SUE -SUED -SUES -SUEZ -SUFFER -SUFFERANCE -SUFFERED -SUFFERER -SUFFERERS -SUFFERING -SUFFERINGS -SUFFERS -SUFFICE -SUFFICED -SUFFICES -SUFFICIENCY -SUFFICIENT -SUFFICIENTLY -SUFFICING -SUFFIX -SUFFIXED -SUFFIXER -SUFFIXES -SUFFIXING -SUFFOCATE -SUFFOCATED -SUFFOCATES -SUFFOCATING -SUFFOCATION -SUFFOLK -SUFFRAGE -SUFFRAGETTE -SUGAR -SUGARED -SUGARING -SUGARINGS -SUGARS -SUGGEST -SUGGESTED -SUGGESTIBLE -SUGGESTING -SUGGESTION -SUGGESTIONS -SUGGESTIVE -SUGGESTIVELY -SUGGESTS -SUICIDAL -SUICIDALLY -SUICIDE -SUICIDES -SUING -SUIT -SUITABILITY -SUITABLE -SUITABLENESS -SUITABLY -SUITCASE -SUITCASES -SUITE -SUITED -SUITERS -SUITES -SUITING -SUITOR -SUITORS -SUITS -SUKARNO -SULFA -SULFUR -SULFURIC -SULFUROUS -SULK -SULKED -SULKINESS -SULKING -SULKS -SULKY -SULLEN -SULLENLY -SULLENNESS -SULLIVAN -SULPHATE -SULPHUR -SULPHURED -SULPHURIC -SULTAN -SULTANS -SULTRY -SULZBERGER -SUM -SUMAC -SUMATRA -SUMERIA -SUMERIAN -SUMMAND -SUMMANDS -SUMMARIES -SUMMARILY -SUMMARIZATION -SUMMARIZATIONS -SUMMARIZE -SUMMARIZED -SUMMARIZES -SUMMARIZING -SUMMARY -SUMMATION -SUMMATIONS -SUMMED -SUMMER -SUMMERDALE -SUMMERS -SUMMERTIME -SUMMING -SUMMIT -SUMMITRY -SUMMON -SUMMONED -SUMMONER -SUMMONERS -SUMMONING -SUMMONS -SUMMONSES -SUMNER -SUMPTUOUS -SUMS -SUMTER -SUN -SUNBEAM -SUNBEAMS -SUNBELT -SUNBONNET -SUNBURN -SUNBURNT -SUNDAY -SUNDAYS -SUNDER -SUNDIAL -SUNDOWN -SUNDRIES -SUNDRY -SUNFLOWER -SUNG -SUNGLASS -SUNGLASSES -SUNK -SUNKEN -SUNLIGHT -SUNLIT -SUNNED -SUNNING -SUNNY -SUNNYVALE -SUNRISE -SUNS -SUNSET -SUNSHINE -SUNSPOT -SUNTAN -SUNTANNED -SUNTANNING -SUPER -SUPERB -SUPERBLOCK -SUPERBLY -SUPERCOMPUTER -SUPERCOMPUTERS -SUPEREGO -SUPEREGOS -SUPERFICIAL -SUPERFICIALLY -SUPERFLUITIES -SUPERFLUITY -SUPERFLUOUS -SUPERFLUOUSLY -SUPERGROUP -SUPERGROUPS -SUPERHUMAN -SUPERHUMANLY -SUPERIMPOSE -SUPERIMPOSED -SUPERIMPOSES -SUPERIMPOSING -SUPERINTEND -SUPERINTENDENT -SUPERINTENDENTS -SUPERIOR -SUPERIORITY -SUPERIORS -SUPERLATIVE -SUPERLATIVELY -SUPERLATIVES -SUPERMARKET -SUPERMARKETS -SUPERMINI -SUPERMINIS -SUPERNATURAL -SUPERPOSE -SUPERPOSED -SUPERPOSES -SUPERPOSING -SUPERPOSITION -SUPERSCRIPT -SUPERSCRIPTED -SUPERSCRIPTING -SUPERSCRIPTS -SUPERSEDE -SUPERSEDED -SUPERSEDES -SUPERSEDING -SUPERSET -SUPERSETS -SUPERSTITION -SUPERSTITIONS -SUPERSTITIOUS -SUPERUSER -SUPERVISE -SUPERVISED -SUPERVISES -SUPERVISING -SUPERVISION -SUPERVISOR -SUPERVISORS -SUPERVISORY -SUPINE -SUPPER -SUPPERS -SUPPLANT -SUPPLANTED -SUPPLANTING -SUPPLANTS -SUPPLE -SUPPLEMENT -SUPPLEMENTAL -SUPPLEMENTARY -SUPPLEMENTED -SUPPLEMENTING -SUPPLEMENTS -SUPPLENESS -SUPPLICATION -SUPPLIED -SUPPLIER -SUPPLIERS -SUPPLIES -SUPPLY -SUPPLYING -SUPPORT -SUPPORTABLE -SUPPORTED -SUPPORTER -SUPPORTERS -SUPPORTING -SUPPORTINGLY -SUPPORTIVE -SUPPORTIVELY -SUPPORTS -SUPPOSE -SUPPOSED -SUPPOSEDLY -SUPPOSES -SUPPOSING -SUPPOSITION -SUPPOSITIONS -SUPPRESS -SUPPRESSED -SUPPRESSES -SUPPRESSING -SUPPRESSION -SUPPRESSOR -SUPPRESSORS -SUPRANATIONAL -SUPREMACY -SUPREME -SUPREMELY -SURCHARGE -SURE -SURELY -SURENESS -SURETIES -SURETY -SURF -SURFACE -SURFACED -SURFACENESS -SURFACES -SURFACING -SURGE -SURGED -SURGEON -SURGEONS -SURGERY -SURGES -SURGICAL -SURGICALLY -SURGING -SURLINESS -SURLY -SURMISE -SURMISED -SURMISES -SURMOUNT -SURMOUNTED -SURMOUNTING -SURMOUNTS -SURNAME -SURNAMES -SURPASS -SURPASSED -SURPASSES -SURPASSING -SURPLUS -SURPLUSES -SURPRISE -SURPRISED -SURPRISES -SURPRISING -SURPRISINGLY -SURREAL -SURRENDER -SURRENDERED -SURRENDERING -SURRENDERS -SURREPTITIOUS -SURREY -SURROGATE -SURROGATES -SURROUND -SURROUNDED -SURROUNDING -SURROUNDINGS -SURROUNDS -SURTAX -SURVEY -SURVEYED -SURVEYING -SURVEYOR -SURVEYORS -SURVEYS -SURVIVAL -SURVIVALS -SURVIVE -SURVIVED -SURVIVES -SURVIVING -SURVIVOR -SURVIVORS -SUS -SUSAN -SUSANNE -SUSCEPTIBLE -SUSIE -SUSPECT -SUSPECTED -SUSPECTING -SUSPECTS -SUSPEND -SUSPENDED -SUSPENDER -SUSPENDERS -SUSPENDING -SUSPENDS -SUSPENSE -SUSPENSES -SUSPENSION -SUSPENSIONS -SUSPICION -SUSPICIONS -SUSPICIOUS -SUSPICIOUSLY -SUSQUEHANNA -SUSSEX -SUSTAIN -SUSTAINED -SUSTAINING -SUSTAINS -SUSTENANCE -SUTHERLAND -SUTTON -SUTURE -SUTURES -SUWANEE -SUZANNE -SUZERAINTY -SUZUKI -SVELTE -SVETLANA -SWAB -SWABBING -SWAGGER -SWAGGERED -SWAGGERING -SWAHILI -SWAIN -SWAINS -SWALLOW -SWALLOWED -SWALLOWING -SWALLOWS -SWALLOWTAIL -SWAM -SWAMI -SWAMP -SWAMPED -SWAMPING -SWAMPS -SWAMPY -SWAN -SWANK -SWANKY -SWANLIKE -SWANS -SWANSEA -SWANSON -SWAP -SWAPPED -SWAPPING -SWAPS -SWARM -SWARMED -SWARMING -SWARMS -SWARTHMORE -SWARTHOUT -SWARTHY -SWARTZ -SWASTIKA -SWAT -SWATTED -SWAY -SWAYED -SWAYING -SWAZILAND -SWEAR -SWEARER -SWEARING -SWEARS -SWEAT -SWEATED -SWEATER -SWEATERS -SWEATING -SWEATS -SWEATSHIRT -SWEATY -SWEDE -SWEDEN -SWEDES -SWEDISH -SWEENEY -SWEENEYS -SWEEP -SWEEPER -SWEEPERS -SWEEPING -SWEEPINGS -SWEEPS -SWEEPSTAKES -SWEET -SWEETEN -SWEETENED -SWEETENER -SWEETENERS -SWEETENING -SWEETENINGS -SWEETENS -SWEETER -SWEETEST -SWEETHEART -SWEETHEARTS -SWEETISH -SWEETLY -SWEETNESS -SWEETS -SWELL -SWELLED -SWELLING -SWELLINGS -SWELLS -SWELTER -SWENSON -SWEPT -SWERVE -SWERVED -SWERVES -SWERVING -SWIFT -SWIFTER -SWIFTEST -SWIFTLY -SWIFTNESS -SWIM -SWIMMER -SWIMMERS -SWIMMING -SWIMMINGLY -SWIMS -SWIMSUIT -SWINBURNE -SWINDLE -SWINE -SWING -SWINGER -SWINGERS -SWINGING -SWINGS -SWINK -SWIPE -SWIRL -SWIRLED -SWIRLING -SWISH -SWISHED -SWISS -SWITCH -SWITCHBLADE -SWITCHBOARD -SWITCHBOARDS -SWITCHED -SWITCHER -SWITCHERS -SWITCHES -SWITCHING -SWITCHINGS -SWITCHMAN -SWITZER -SWITZERLAND -SWIVEL -SWIZZLE -SWOLLEN -SWOON -SWOOP -SWOOPED -SWOOPING -SWOOPS -SWORD -SWORDFISH -SWORDS -SWORE -SWORN -SWUM -SWUNG -SYBIL -SYCAMORE -SYCOPHANT -SYCOPHANTIC -SYDNEY -SYKES -SYLLABLE -SYLLABLES -SYLLOGISM -SYLLOGISMS -SYLLOGISTIC -SYLOW -SYLVAN -SYLVANIA -SYLVESTER -SYLVIA -SYLVIE -SYMBIOSIS -SYMBIOTIC -SYMBOL -SYMBOLIC -SYMBOLICALLY -SYMBOLICS -SYMBOLISM -SYMBOLIZATION -SYMBOLIZE -SYMBOLIZED -SYMBOLIZES -SYMBOLIZING -SYMBOLS -SYMINGTON -SYMMETRIC -SYMMETRICAL -SYMMETRICALLY -SYMMETRIES -SYMMETRY -SYMPATHETIC -SYMPATHIES -SYMPATHIZE -SYMPATHIZED -SYMPATHIZER -SYMPATHIZERS -SYMPATHIZES -SYMPATHIZING -SYMPATHIZINGLY -SYMPATHY -SYMPHONIC -SYMPHONIES -SYMPHONY -SYMPOSIA -SYMPOSIUM -SYMPOSIUMS -SYMPTOM -SYMPTOMATIC -SYMPTOMS -SYNAGOGUE -SYNAPSE -SYNAPSES -SYNAPTIC -SYNCHRONISM -SYNCHRONIZATION -SYNCHRONIZE -SYNCHRONIZED -SYNCHRONIZER -SYNCHRONIZERS -SYNCHRONIZES -SYNCHRONIZING -SYNCHRONOUS -SYNCHRONOUSLY -SYNCHRONY -SYNCHROTRON -SYNCOPATE -SYNDICATE -SYNDICATED -SYNDICATES -SYNDICATION -SYNDROME -SYNDROMES -SYNERGISM -SYNERGISTIC -SYNERGY -SYNGE -SYNOD -SYNONYM -SYNONYMOUS -SYNONYMOUSLY -SYNONYMS -SYNOPSES -SYNOPSIS -SYNTACTIC -SYNTACTICAL -SYNTACTICALLY -SYNTAX -SYNTAXES -SYNTHESIS -SYNTHESIZE -SYNTHESIZED -SYNTHESIZER -SYNTHESIZERS -SYNTHESIZES -SYNTHESIZING -SYNTHETIC -SYNTHETICS -SYRACUSE -SYRIA -SYRIAN -SYRIANIZE -SYRIANIZES -SYRIANS -SYRINGE -SYRINGES -SYRUP -SYRUPY -SYSTEM -SYSTEMATIC -SYSTEMATICALLY -SYSTEMATIZE -SYSTEMATIZED -SYSTEMATIZES -SYSTEMATIZING -SYSTEMIC -SYSTEMS -SYSTEMWIDE -SZILARD -TAB -TABERNACLE -TABERNACLES -TABLE -TABLEAU -TABLEAUS -TABLECLOTH -TABLECLOTHS -TABLED -TABLES -TABLESPOON -TABLESPOONFUL -TABLESPOONFULS -TABLESPOONS -TABLET -TABLETS -TABLING -TABOO -TABOOS -TABS -TABULAR -TABULATE -TABULATED -TABULATES -TABULATING -TABULATION -TABULATIONS -TABULATOR -TABULATORS -TACHOMETER -TACHOMETERS -TACIT -TACITLY -TACITUS -TACK -TACKED -TACKING -TACKLE -TACKLES -TACOMA -TACT -TACTIC -TACTICS -TACTILE -TAFT -TAG -TAGGED -TAGGING -TAGS -TAHITI -TAHOE -TAIL -TAILED -TAILING -TAILOR -TAILORED -TAILORING -TAILORS -TAILS -TAINT -TAINTED -TAIPEI -TAIWAN -TAIWANESE -TAKE -TAKEN -TAKER -TAKERS -TAKES -TAKING -TAKINGS -TALE -TALENT -TALENTED -TALENTS -TALES -TALK -TALKATIVE -TALKATIVELY -TALKATIVENESS -TALKED -TALKER -TALKERS -TALKIE -TALKING -TALKS -TALL -TALLADEGA -TALLAHASSEE -TALLAHATCHIE -TALLAHOOSA -TALLCHIEF -TALLER -TALLEST -TALLEYRAND -TALLNESS -TALLOW -TALLY -TALMUD -TALMUDISM -TALMUDIZATION -TALMUDIZATIONS -TALMUDIZE -TALMUDIZES -TAME -TAMED -TAMELY -TAMENESS -TAMER -TAMES -TAMIL -TAMING -TAMMANY -TAMMANYIZE -TAMMANYIZES -TAMPA -TAMPER -TAMPERED -TAMPERING -TAMPERS -TAN -TANAKA -TANANARIVE -TANDEM -TANG -TANGANYIKA -TANGENT -TANGENTIAL -TANGENTS -TANGIBLE -TANGIBLY -TANGLE -TANGLED -TANGY -TANK -TANKER -TANKERS -TANKS -TANNENBAUM -TANNER -TANNERS -TANTALIZING -TANTALIZINGLY -TANTALUS -TANTAMOUNT -TANTRUM -TANTRUMS -TANYA -TANZANIA -TAOISM -TAOIST -TAOS -TAP -TAPE -TAPED -TAPER -TAPERED -TAPERING -TAPERS -TAPES -TAPESTRIES -TAPESTRY -TAPING -TAPINGS -TAPPED -TAPPER -TAPPERS -TAPPING -TAPROOT -TAPROOTS -TAPS -TAR -TARA -TARBELL -TARDINESS -TARDY -TARGET -TARGETED -TARGETING -TARGETS -TARIFF -TARIFFS -TARRY -TARRYTOWN -TART -TARTARY -TARTLY -TARTNESS -TARTUFFE -TARZAN -TASK -TASKED -TASKING -TASKS -TASMANIA -TASS -TASSEL -TASSELS -TASTE -TASTED -TASTEFUL -TASTEFULLY -TASTEFULNESS -TASTELESS -TASTELESSLY -TASTER -TASTERS -TASTES -TASTING -TATE -TATTER -TATTERED -TATTOO -TATTOOED -TATTOOS -TAU -TAUGHT -TAUNT -TAUNTED -TAUNTER -TAUNTING -TAUNTS -TAURUS -TAUT -TAUTLY -TAUTNESS -TAUTOLOGICAL -TAUTOLOGICALLY -TAUTOLOGIES -TAUTOLOGY -TAVERN -TAVERNS -TAWNEY -TAWNY -TAX -TAXABLE -TAXATION -TAXED -TAXES -TAXI -TAXICAB -TAXICABS -TAXIED -TAXIING -TAXING -TAXIS -TAXONOMIC -TAXONOMICALLY -TAXONOMY -TAXPAYER -TAXPAYERS -TAYLOR -TAYLORIZE -TAYLORIZES -TAYLORS -TCHAIKOVSKY -TEA -TEACH -TEACHABLE -TEACHER -TEACHERS -TEACHES -TEACHING -TEACHINGS -TEACUP -TEAM -TEAMED -TEAMING -TEAMS -TEAR -TEARED -TEARFUL -TEARFULLY -TEARING -TEARS -TEAS -TEASE -TEASED -TEASES -TEASING -TEASPOON -TEASPOONFUL -TEASPOONFULS -TEASPOONS -TECHNICAL -TECHNICALITIES -TECHNICALITY -TECHNICALLY -TECHNICIAN -TECHNICIANS -TECHNION -TECHNIQUE -TECHNIQUES -TECHNOLOGICAL -TECHNOLOGICALLY -TECHNOLOGIES -TECHNOLOGIST -TECHNOLOGISTS -TECHNOLOGY -TED -TEDDY -TEDIOUS -TEDIOUSLY -TEDIOUSNESS -TEDIUM -TEEM -TEEMED -TEEMING -TEEMS -TEEN -TEENAGE -TEENAGED -TEENAGER -TEENAGERS -TEENS -TEETH -TEETHE -TEETHED -TEETHES -TEETHING -TEFLON -TEGUCIGALPA -TEHERAN -TEHRAN -TEKTRONIX -TELECOMMUNICATION -TELECOMMUNICATIONS -TELEDYNE -TELEFUNKEN -TELEGRAM -TELEGRAMS -TELEGRAPH -TELEGRAPHED -TELEGRAPHER -TELEGRAPHERS -TELEGRAPHIC -TELEGRAPHING -TELEGRAPHS -TELEMANN -TELEMETRY -TELEOLOGICAL -TELEOLOGICALLY -TELEOLOGY -TELEPATHY -TELEPHONE -TELEPHONED -TELEPHONER -TELEPHONERS -TELEPHONES -TELEPHONIC -TELEPHONING -TELEPHONY -TELEPROCESSING -TELESCOPE -TELESCOPED -TELESCOPES -TELESCOPING -TELETEX -TELETEXT -TELETYPE -TELETYPES -TELEVISE -TELEVISED -TELEVISES -TELEVISING -TELEVISION -TELEVISIONS -TELEVISOR -TELEVISORS -TELEX -TELL -TELLER -TELLERS -TELLING -TELLS -TELNET -TELNET -TEMPER -TEMPERAMENT -TEMPERAMENTAL -TEMPERAMENTS -TEMPERANCE -TEMPERATE -TEMPERATELY -TEMPERATENESS -TEMPERATURE -TEMPERATURES -TEMPERED -TEMPERING -TEMPERS -TEMPEST -TEMPESTUOUS -TEMPESTUOUSLY -TEMPLATE -TEMPLATES -TEMPLE -TEMPLEMAN -TEMPLES -TEMPLETON -TEMPORAL -TEMPORALLY -TEMPORARIES -TEMPORARILY -TEMPORARY -TEMPT -TEMPTATION -TEMPTATIONS -TEMPTED -TEMPTER -TEMPTERS -TEMPTING -TEMPTINGLY -TEMPTS -TEN -TENACIOUS -TENACIOUSLY -TENANT -TENANTS -TEND -TENDED -TENDENCIES -TENDENCY -TENDER -TENDERLY -TENDERNESS -TENDERS -TENDING -TENDS -TENEMENT -TENEMENTS -TENEX -TENEX -TENFOLD -TENNECO -TENNESSEE -TENNEY -TENNIS -TENNYSON -TENOR -TENORS -TENS -TENSE -TENSED -TENSELY -TENSENESS -TENSER -TENSES -TENSEST -TENSING -TENSION -TENSIONS -TENT -TENTACLE -TENTACLED -TENTACLES -TENTATIVE -TENTATIVELY -TENTED -TENTH -TENTING -TENTS -TENURE -TERESA -TERM -TERMED -TERMINAL -TERMINALLY -TERMINALS -TERMINATE -TERMINATED -TERMINATES -TERMINATING -TERMINATION -TERMINATIONS -TERMINATOR -TERMINATORS -TERMING -TERMINOLOGIES -TERMINOLOGY -TERMINUS -TERMS -TERMWISE -TERNARY -TERPSICHORE -TERRA -TERRACE -TERRACED -TERRACES -TERRAIN -TERRAINS -TERRAN -TERRE -TERRESTRIAL -TERRESTRIALS -TERRIBLE -TERRIBLY -TERRIER -TERRIERS -TERRIFIC -TERRIFIED -TERRIFIES -TERRIFY -TERRIFYING -TERRITORIAL -TERRITORIES -TERRITORY -TERROR -TERRORISM -TERRORIST -TERRORISTIC -TERRORISTS -TERRORIZE -TERRORIZED -TERRORIZES -TERRORIZING -TERRORS -TERTIARY -TESS -TESSIE -TEST -TESTABILITY -TESTABLE -TESTAMENT -TESTAMENTS -TESTED -TESTER -TESTERS -TESTICLE -TESTICLES -TESTIFIED -TESTIFIER -TESTIFIERS -TESTIFIES -TESTIFY -TESTIFYING -TESTIMONIES -TESTIMONY -TESTING -TESTINGS -TESTS -TEUTONIC -TEX -TEX -TEXACO -TEXAN -TEXANS -TEXAS -TEXASES -TEXT -TEXTBOOK -TEXTBOOKS -TEXTILE -TEXTILES -TEXTRON -TEXTS -TEXTUAL -TEXTUALLY -TEXTURE -TEXTURED -TEXTURES -THAI -THAILAND -THALIA -THAMES -THAN -THANK -THANKED -THANKFUL -THANKFULLY -THANKFULNESS -THANKING -THANKLESS -THANKLESSLY -THANKLESSNESS -THANKS -THANKSGIVING -THANKSGIVINGS -THAT -THATCH -THATCHES -THATS -THAW -THAWED -THAWING -THAWS -THAYER -THE -THEA -THEATER -THEATERS -THEATRICAL -THEATRICALLY -THEATRICALS -THEBES -THEFT -THEFTS -THEIR -THEIRS -THELMA -THEM -THEMATIC -THEME -THEMES -THEMSELVES -THEN -THENCE -THENCEFORTH -THEODORE -THEODOSIAN -THEODOSIUS -THEOLOGICAL -THEOLOGY -THEOREM -THEOREMS -THEORETIC -THEORETICAL -THEORETICALLY -THEORETICIANS -THEORIES -THEORIST -THEORISTS -THEORIZATION -THEORIZATIONS -THEORIZE -THEORIZED -THEORIZER -THEORIZERS -THEORIZES -THEORIZING -THEORY -THERAPEUTIC -THERAPIES -THERAPIST -THERAPISTS -THERAPY -THERE -THEREABOUTS -THEREAFTER -THEREBY -THEREFORE -THEREIN -THEREOF -THEREON -THERESA -THERETO -THEREUPON -THEREWITH -THERMAL -THERMODYNAMIC -THERMODYNAMICS -THERMOFAX -THERMOMETER -THERMOMETERS -THERMOSTAT -THERMOSTATS -THESE -THESES -THESEUS -THESIS -THESSALONIAN -THESSALY -THETIS -THEY -THICK -THICKEN -THICKENS -THICKER -THICKEST -THICKET -THICKETS -THICKLY -THICKNESS -THIEF -THIENSVILLE -THIEVE -THIEVES -THIEVING -THIGH -THIGHS -THIMBLE -THIMBLES -THIMBU -THIN -THING -THINGS -THINK -THINKABLE -THINKABLY -THINKER -THINKERS -THINKING -THINKS -THINLY -THINNER -THINNESS -THINNEST -THIRD -THIRDLY -THIRDS -THIRST -THIRSTED -THIRSTS -THIRSTY -THIRTEEN -THIRTEENS -THIRTEENTH -THIRTIES -THIRTIETH -THIRTY -THIS -THISTLE -THOMAS -THOMISTIC -THOMPSON -THOMSON -THONG -THOR -THOREAU -THORN -THORNBURG -THORNS -THORNTON -THORNY -THOROUGH -THOROUGHFARE -THOROUGHFARES -THOROUGHLY -THOROUGHNESS -THORPE -THORSTEIN -THOSE -THOUGH -THOUGHT -THOUGHTFUL -THOUGHTFULLY -THOUGHTFULNESS -THOUGHTLESS -THOUGHTLESSLY -THOUGHTLESSNESS -THOUGHTS -THOUSAND -THOUSANDS -THOUSANDTH -THRACE -THRACIAN -THRASH -THRASHED -THRASHER -THRASHES -THRASHING -THREAD -THREADED -THREADER -THREADERS -THREADING -THREADS -THREAT -THREATEN -THREATENED -THREATENING -THREATENS -THREATS -THREE -THREEFOLD -THREES -THREESCORE -THRESHOLD -THRESHOLDS -THREW -THRICE -THRIFT -THRIFTY -THRILL -THRILLED -THRILLER -THRILLERS -THRILLING -THRILLINGLY -THRILLS -THRIVE -THRIVED -THRIVES -THRIVING -THROAT -THROATED -THROATS -THROB -THROBBED -THROBBING -THROBS -THRONE -THRONEBERRY -THRONES -THRONG -THRONGS -THROTTLE -THROTTLED -THROTTLES -THROTTLING -THROUGH -THROUGHOUT -THROUGHPUT -THROW -THROWER -THROWING -THROWN -THROWS -THRUSH -THRUST -THRUSTER -THRUSTERS -THRUSTING -THRUSTS -THUBAN -THUD -THUDS -THUG -THUGS -THULE -THUMB -THUMBED -THUMBING -THUMBS -THUMP -THUMPED -THUMPING -THUNDER -THUNDERBOLT -THUNDERBOLTS -THUNDERED -THUNDERER -THUNDERERS -THUNDERING -THUNDERS -THUNDERSTORM -THUNDERSTORMS -THURBER -THURMAN -THURSDAY -THURSDAYS -THUS -THUSLY -THWART -THWARTED -THWARTING -THWARTS -THYSELF -TIBER -TIBET -TIBETAN -TIBURON -TICK -TICKED -TICKER -TICKERS -TICKET -TICKETS -TICKING -TICKLE -TICKLED -TICKLES -TICKLING -TICKLISH -TICKS -TICONDEROGA -TIDAL -TIDALLY -TIDE -TIDED -TIDES -TIDIED -TIDINESS -TIDING -TIDINGS -TIDY -TIDYING -TIE -TIECK -TIED -TIENTSIN -TIER -TIERS -TIES -TIFFANY -TIGER -TIGERS -TIGHT -TIGHTEN -TIGHTENED -TIGHTENER -TIGHTENERS -TIGHTENING -TIGHTENINGS -TIGHTENS -TIGHTER -TIGHTEST -TIGHTLY -TIGHTNESS -TIGRIS -TIJUANA -TILDE -TILE -TILED -TILES -TILING -TILL -TILLABLE -TILLED -TILLER -TILLERS -TILLICH -TILLIE -TILLING -TILLS -TILT -TILTED -TILTING -TILTS -TIM -TIMBER -TIMBERED -TIMBERING -TIMBERS -TIME -TIMED -TIMELESS -TIMELESSLY -TIMELESSNESS -TIMELY -TIMEOUT -TIMEOUTS -TIMER -TIMERS -TIMES -TIMESHARE -TIMESHARES -TIMESHARING -TIMESTAMP -TIMESTAMPS -TIMETABLE -TIMETABLES -TIMEX -TIMID -TIMIDITY -TIMIDLY -TIMING -TIMINGS -TIMMY -TIMON -TIMONIZE -TIMONIZES -TIMS -TIN -TINA -TINCTURE -TINGE -TINGED -TINGLE -TINGLED -TINGLES -TINGLING -TINIER -TINIEST -TINILY -TININESS -TINKER -TINKERED -TINKERING -TINKERS -TINKLE -TINKLED -TINKLES -TINKLING -TINNIER -TINNIEST -TINNILY -TINNINESS -TINNY -TINS -TINSELTOWN -TINT -TINTED -TINTING -TINTS -TINY -TIOGA -TIP -TIPPECANOE -TIPPED -TIPPER -TIPPERARY -TIPPERS -TIPPING -TIPS -TIPTOE -TIRANA -TIRE -TIRED -TIREDLY -TIRELESS -TIRELESSLY -TIRELESSNESS -TIRES -TIRESOME -TIRESOMELY -TIRESOMENESS -TIRING -TISSUE -TISSUES -TIT -TITAN -TITHE -TITHER -TITHES -TITHING -TITLE -TITLED -TITLES -TITO -TITS -TITTER -TITTERS -TITUS -TOAD -TOADS -TOAST -TOASTED -TOASTER -TOASTING -TOASTS -TOBACCO -TOBAGO -TOBY -TODAY -TODAYS -TODD -TOE -TOES -TOGETHER -TOGETHERNESS -TOGGLE -TOGGLED -TOGGLES -TOGGLING -TOGO -TOIL -TOILED -TOILER -TOILET -TOILETS -TOILING -TOILS -TOKEN -TOKENS -TOKYO -TOLAND -TOLD -TOLEDO -TOLERABILITY -TOLERABLE -TOLERABLY -TOLERANCE -TOLERANCES -TOLERANT -TOLERANTLY -TOLERATE -TOLERATED -TOLERATES -TOLERATING -TOLERATION -TOLL -TOLLED -TOLLEY -TOLLS -TOLSTOY -TOM -TOMAHAWK -TOMAHAWKS -TOMATO -TOMATOES -TOMB -TOMBIGBEE -TOMBS -TOMLINSON -TOMMIE -TOMOGRAPHY -TOMORROW -TOMORROWS -TOMPKINS -TON -TONE -TONED -TONER -TONES -TONGS -TONGUE -TONGUED -TONGUES -TONI -TONIC -TONICS -TONIGHT -TONING -TONIO -TONNAGE -TONS -TONSIL -TOO -TOOK -TOOL -TOOLED -TOOLER -TOOLERS -TOOLING -TOOLS -TOOMEY -TOOTH -TOOTHBRUSH -TOOTHBRUSHES -TOOTHPASTE -TOOTHPICK -TOOTHPICKS -TOP -TOPEKA -TOPER -TOPIC -TOPICAL -TOPICALLY -TOPICS -TOPMOST -TOPOGRAPHY -TOPOLOGICAL -TOPOLOGIES -TOPOLOGY -TOPPLE -TOPPLED -TOPPLES -TOPPLING -TOPS -TOPSY -TORAH -TORCH -TORCHES -TORE -TORIES -TORMENT -TORMENTED -TORMENTER -TORMENTERS -TORMENTING -TORN -TORNADO -TORNADOES -TORONTO -TORPEDO -TORPEDOES -TORQUE -TORQUEMADA -TORRANCE -TORRENT -TORRENTS -TORRID -TORTOISE -TORTOISES -TORTURE -TORTURED -TORTURER -TORTURERS -TORTURES -TORTURING -TORUS -TORUSES -TORY -TORYIZE -TORYIZES -TOSCA -TOSCANINI -TOSHIBA -TOSS -TOSSED -TOSSES -TOSSING -TOTAL -TOTALED -TOTALING -TOTALITIES -TOTALITY -TOTALLED -TOTALLER -TOTALLERS -TOTALLING -TOTALLY -TOTALS -TOTO -TOTTER -TOTTERED -TOTTERING -TOTTERS -TOUCH -TOUCHABLE -TOUCHED -TOUCHES -TOUCHIER -TOUCHIEST -TOUCHILY -TOUCHINESS -TOUCHING -TOUCHINGLY -TOUCHY -TOUGH -TOUGHEN -TOUGHER -TOUGHEST -TOUGHLY -TOUGHNESS -TOULOUSE -TOUR -TOURED -TOURING -TOURIST -TOURISTS -TOURNAMENT -TOURNAMENTS -TOURS -TOW -TOWARD -TOWARDS -TOWED -TOWEL -TOWELING -TOWELLED -TOWELLING -TOWELS -TOWER -TOWERED -TOWERING -TOWERS -TOWN -TOWNLEY -TOWNS -TOWNSEND -TOWNSHIP -TOWNSHIPS -TOWSLEY -TOY -TOYED -TOYING -TOYNBEE -TOYOTA -TOYS -TRACE -TRACEABLE -TRACED -TRACER -TRACERS -TRACES -TRACING -TRACINGS -TRACK -TRACKED -TRACKER -TRACKERS -TRACKING -TRACKS -TRACT -TRACTABILITY -TRACTABLE -TRACTARIANS -TRACTIVE -TRACTOR -TRACTORS -TRACTS -TRACY -TRADE -TRADED -TRADEMARK -TRADEMARKS -TRADEOFF -TRADEOFFS -TRADER -TRADERS -TRADES -TRADESMAN -TRADING -TRADITION -TRADITIONAL -TRADITIONALLY -TRADITIONS -TRAFFIC -TRAFFICKED -TRAFFICKER -TRAFFICKERS -TRAFFICKING -TRAFFICS -TRAGEDIES -TRAGEDY -TRAGIC -TRAGICALLY -TRAIL -TRAILED -TRAILER -TRAILERS -TRAILING -TRAILINGS -TRAILS -TRAIN -TRAINED -TRAINEE -TRAINEES -TRAINER -TRAINERS -TRAINING -TRAINS -TRAIT -TRAITOR -TRAITORS -TRAITS -TRAJECTORIES -TRAJECTORY -TRAMP -TRAMPED -TRAMPING -TRAMPLE -TRAMPLED -TRAMPLER -TRAMPLES -TRAMPLING -TRAMPS -TRANCE -TRANCES -TRANQUIL -TRANQUILITY -TRANQUILLY -TRANSACT -TRANSACTION -TRANSACTIONS -TRANSATLANTIC -TRANSCEIVE -TRANSCEIVER -TRANSCEIVERS -TRANSCEND -TRANSCENDED -TRANSCENDENT -TRANSCENDING -TRANSCENDS -TRANSCONTINENTAL -TRANSCRIBE -TRANSCRIBED -TRANSCRIBER -TRANSCRIBERS -TRANSCRIBES -TRANSCRIBING -TRANSCRIPT -TRANSCRIPTION -TRANSCRIPTIONS -TRANSCRIPTS -TRANSFER -TRANSFERABILITY -TRANSFERABLE -TRANSFERAL -TRANSFERALS -TRANSFERENCE -TRANSFERRED -TRANSFERRER -TRANSFERRERS -TRANSFERRING -TRANSFERS -TRANSFINITE -TRANSFORM -TRANSFORMABLE -TRANSFORMATION -TRANSFORMATIONAL -TRANSFORMATIONS -TRANSFORMED -TRANSFORMER -TRANSFORMERS -TRANSFORMING -TRANSFORMS -TRANSGRESS -TRANSGRESSED -TRANSGRESSION -TRANSGRESSIONS -TRANSIENCE -TRANSIENCY -TRANSIENT -TRANSIENTLY -TRANSIENTS -TRANSISTOR -TRANSISTORIZE -TRANSISTORIZED -TRANSISTORIZING -TRANSISTORS -TRANSIT -TRANSITE -TRANSITION -TRANSITIONAL -TRANSITIONED -TRANSITIONS -TRANSITIVE -TRANSITIVELY -TRANSITIVENESS -TRANSITIVITY -TRANSITORY -TRANSLATABILITY -TRANSLATABLE -TRANSLATE -TRANSLATED -TRANSLATES -TRANSLATING -TRANSLATION -TRANSLATIONAL -TRANSLATIONS -TRANSLATOR -TRANSLATORS -TRANSLUCENT -TRANSMISSION -TRANSMISSIONS -TRANSMIT -TRANSMITS -TRANSMITTAL -TRANSMITTED -TRANSMITTER -TRANSMITTERS -TRANSMITTING -TRANSMOGRIFICATION -TRANSMOGRIFY -TRANSPACIFIC -TRANSPARENCIES -TRANSPARENCY -TRANSPARENT -TRANSPARENTLY -TRANSPIRE -TRANSPIRED -TRANSPIRES -TRANSPIRING -TRANSPLANT -TRANSPLANTED -TRANSPLANTING -TRANSPLANTS -TRANSPONDER -TRANSPONDERS -TRANSPORT -TRANSPORTABILITY -TRANSPORTATION -TRANSPORTED -TRANSPORTER -TRANSPORTERS -TRANSPORTING -TRANSPORTS -TRANSPOSE -TRANSPOSED -TRANSPOSES -TRANSPOSING -TRANSPOSITION -TRANSPUTER -TRANSVAAL -TRANSYLVANIA -TRAP -TRAPEZOID -TRAPEZOIDAL -TRAPEZOIDS -TRAPPED -TRAPPER -TRAPPERS -TRAPPING -TRAPPINGS -TRAPS -TRASH -TRASTEVERE -TRAUMA -TRAUMATIC -TRAVAIL -TRAVEL -TRAVELED -TRAVELER -TRAVELERS -TRAVELING -TRAVELINGS -TRAVELS -TRAVERSAL -TRAVERSALS -TRAVERSE -TRAVERSED -TRAVERSES -TRAVERSING -TRAVESTIES -TRAVESTY -TRAVIS -TRAY -TRAYS -TREACHERIES -TREACHEROUS -TREACHEROUSLY -TREACHERY -TREAD -TREADING -TREADS -TREADWELL -TREASON -TREASURE -TREASURED -TREASURER -TREASURES -TREASURIES -TREASURING -TREASURY -TREAT -TREATED -TREATIES -TREATING -TREATISE -TREATISES -TREATMENT -TREATMENTS -TREATS -TREATY -TREBLE -TREE -TREES -TREETOP -TREETOPS -TREK -TREKS -TREMBLE -TREMBLED -TREMBLES -TREMBLING -TREMENDOUS -TREMENDOUSLY -TREMOR -TREMORS -TRENCH -TRENCHER -TRENCHES -TREND -TRENDING -TRENDS -TRENTON -TRESPASS -TRESPASSED -TRESPASSER -TRESPASSERS -TRESPASSES -TRESS -TRESSES -TREVELYAN -TRIAL -TRIALS -TRIANGLE -TRIANGLES -TRIANGULAR -TRIANGULARLY -TRIANGULUM -TRIANON -TRIASSIC -TRIBAL -TRIBE -TRIBES -TRIBUNAL -TRIBUNALS -TRIBUNE -TRIBUNES -TRIBUTARY -TRIBUTE -TRIBUTES -TRICERATOPS -TRICHINELLA -TRICHOTOMY -TRICK -TRICKED -TRICKIER -TRICKIEST -TRICKINESS -TRICKING -TRICKLE -TRICKLED -TRICKLES -TRICKLING -TRICKS -TRICKY -TRIED -TRIER -TRIERS -TRIES -TRIFLE -TRIFLER -TRIFLES -TRIFLING -TRIGGER -TRIGGERED -TRIGGERING -TRIGGERS -TRIGONOMETRIC -TRIGONOMETRY -TRIGRAM -TRIGRAMS -TRIHEDRAL -TRILATERAL -TRILL -TRILLED -TRILLION -TRILLIONS -TRILLIONTH -TRIM -TRIMBLE -TRIMLY -TRIMMED -TRIMMER -TRIMMEST -TRIMMING -TRIMMINGS -TRIMNESS -TRIMS -TRINIDAD -TRINKET -TRINKETS -TRIO -TRIP -TRIPLE -TRIPLED -TRIPLES -TRIPLET -TRIPLETS -TRIPLETT -TRIPLING -TRIPOD -TRIPS -TRISTAN -TRIUMPH -TRIUMPHAL -TRIUMPHANT -TRIUMPHANTLY -TRIUMPHED -TRIUMPHING -TRIUMPHS -TRIVIA -TRIVIAL -TRIVIALITIES -TRIVIALITY -TRIVIALLY -TROBRIAND -TROD -TROJAN -TROLL -TROLLEY -TROLLEYS -TROLLS -TROOP -TROOPER -TROOPERS -TROOPS -TROPEZ -TROPHIES -TROPHY -TROPIC -TROPICAL -TROPICS -TROT -TROTS -TROTSKY -TROUBLE -TROUBLED -TROUBLEMAKER -TROUBLEMAKERS -TROUBLES -TROUBLESHOOT -TROUBLESHOOTER -TROUBLESHOOTERS -TROUBLESHOOTING -TROUBLESHOOTS -TROUBLESOME -TROUBLESOMELY -TROUBLING -TROUGH -TROUSER -TROUSERS -TROUT -TROUTMAN -TROWEL -TROWELS -TROY -TRUANT -TRUANTS -TRUCE -TRUCK -TRUCKED -TRUCKEE -TRUCKER -TRUCKERS -TRUCKING -TRUCKS -TRUDEAU -TRUDGE -TRUDGED -TRUDY -TRUE -TRUED -TRUER -TRUES -TRUEST -TRUING -TRUISM -TRUISMS -TRUJILLO -TRUK -TRULY -TRUMAN -TRUMBULL -TRUMP -TRUMPED -TRUMPET -TRUMPETER -TRUMPS -TRUNCATE -TRUNCATED -TRUNCATES -TRUNCATING -TRUNCATION -TRUNCATIONS -TRUNK -TRUNKS -TRUST -TRUSTED -TRUSTEE -TRUSTEES -TRUSTFUL -TRUSTFULLY -TRUSTFULNESS -TRUSTING -TRUSTINGLY -TRUSTS -TRUSTWORTHINESS -TRUSTWORTHY -TRUSTY -TRUTH -TRUTHFUL -TRUTHFULLY -TRUTHFULNESS -TRUTHS -TRY -TRYING -TSUNEMATSU -TUB -TUBE -TUBER -TUBERCULOSIS -TUBERS -TUBES -TUBING -TUBS -TUCK -TUCKED -TUCKER -TUCKING -TUCKS -TUCSON -TUDOR -TUESDAY -TUESDAYS -TUFT -TUFTS -TUG -TUGS -TUITION -TULANE -TULIP -TULIPS -TULSA -TUMBLE -TUMBLED -TUMBLER -TUMBLERS -TUMBLES -TUMBLING -TUMOR -TUMORS -TUMULT -TUMULTS -TUMULTUOUS -TUNABLE -TUNE -TUNED -TUNER -TUNERS -TUNES -TUNIC -TUNICS -TUNING -TUNIS -TUNISIA -TUNISIAN -TUNNEL -TUNNELED -TUNNELS -TUPLE -TUPLES -TURBAN -TURBANS -TURBULENCE -TURBULENT -TURBULENTLY -TURF -TURGID -TURGIDLY -TURIN -TURING -TURKEY -TURKEYS -TURKISH -TURKIZE -TURKIZES -TURMOIL -TURMOILS -TURN -TURNABLE -TURNAROUND -TURNED -TURNER -TURNERS -TURNING -TURNINGS -TURNIP -TURNIPS -TURNOVER -TURNS -TURPENTINE -TURQUOISE -TURRET -TURRETS -TURTLE -TURTLENECK -TURTLES -TUSCALOOSA -TUSCAN -TUSCANIZE -TUSCANIZES -TUSCANY -TUSCARORA -TUSKEGEE -TUTANKHAMEN -TUTANKHAMON -TUTANKHAMUN -TUTENKHAMON -TUTOR -TUTORED -TUTORIAL -TUTORIALS -TUTORING -TUTORS -TUTTLE -TWAIN -TWANG -TWAS -TWEED -TWELFTH -TWELVE -TWELVES -TWENTIES -TWENTIETH -TWENTY -TWICE -TWIG -TWIGS -TWILIGHT -TWILIGHTS -TWILL -TWIN -TWINE -TWINED -TWINER -TWINKLE -TWINKLED -TWINKLER -TWINKLES -TWINKLING -TWINS -TWIRL -TWIRLED -TWIRLER -TWIRLING -TWIRLS -TWIST -TWISTED -TWISTER -TWISTERS -TWISTING -TWISTS -TWITCH -TWITCHED -TWITCHING -TWITTER -TWITTERED -TWITTERING -TWO -TWOFOLD -TWOMBLY -TWOS -TYBURN -TYING -TYLER -TYLERIZE -TYLERIZES -TYNDALL -TYPE -TYPED -TYPEOUT -TYPES -TYPESETTER -TYPEWRITER -TYPEWRITERS -TYPHOID -TYPHON -TYPICAL -TYPICALLY -TYPICALNESS -TYPIFIED -TYPIFIES -TYPIFY -TYPIFYING -TYPING -TYPIST -TYPISTS -TYPO -TYPOGRAPHIC -TYPOGRAPHICAL -TYPOGRAPHICALLY -TYPOGRAPHY -TYRANNICAL -TYRANNOSAURUS -TYRANNY -TYRANT -TYRANTS -TYSON -TZELTAL -UBIQUITOUS -UBIQUITOUSLY -UBIQUITY -UDALL -UGANDA -UGH -UGLIER -UGLIEST -UGLINESS -UGLY -UKRAINE -UKRAINIAN -UKRAINIANS -ULAN -ULCER -ULCERS -ULLMAN -ULSTER -ULTIMATE -ULTIMATELY -ULTRA -ULTRASONIC -ULTRIX -ULTRIX -ULYSSES -UMBRAGE -UMBRELLA -UMBRELLAS -UMPIRE -UMPIRES -UNABATED -UNABBREVIATED -UNABLE -UNACCEPTABILITY -UNACCEPTABLE -UNACCEPTABLY -UNACCOUNTABLE -UNACCUSTOMED -UNACHIEVABLE -UNACKNOWLEDGED -UNADULTERATED -UNAESTHETICALLY -UNAFFECTED -UNAFFECTEDLY -UNAFFECTEDNESS -UNAIDED -UNALIENABILITY -UNALIENABLE -UNALTERABLY -UNALTERED -UNAMBIGUOUS -UNAMBIGUOUSLY -UNAMBITIOUS -UNANALYZABLE -UNANIMITY -UNANIMOUS -UNANIMOUSLY -UNANSWERABLE -UNANSWERED -UNANTICIPATED -UNARMED -UNARY -UNASSAILABLE -UNASSIGNED -UNASSISTED -UNATTAINABILITY -UNATTAINABLE -UNATTENDED -UNATTRACTIVE -UNATTRACTIVELY -UNAUTHORIZED -UNAVAILABILITY -UNAVAILABLE -UNAVOIDABLE -UNAVOIDABLY -UNAWARE -UNAWARENESS -UNAWARES -UNBALANCED -UNBEARABLE -UNBECOMING -UNBELIEVABLE -UNBIASED -UNBIND -UNBLOCK -UNBLOCKED -UNBLOCKING -UNBLOCKS -UNBORN -UNBOUND -UNBOUNDED -UNBREAKABLE -UNBRIDLED -UNBROKEN -UNBUFFERED -UNCANCELLED -UNCANNY -UNCAPITALIZED -UNCAUGHT -UNCERTAIN -UNCERTAINLY -UNCERTAINTIES -UNCERTAINTY -UNCHANGEABLE -UNCHANGED -UNCHANGING -UNCLAIMED -UNCLASSIFIED -UNCLE -UNCLEAN -UNCLEANLY -UNCLEANNESS -UNCLEAR -UNCLEARED -UNCLES -UNCLOSED -UNCOMFORTABLE -UNCOMFORTABLY -UNCOMMITTED -UNCOMMON -UNCOMMONLY -UNCOMPROMISING -UNCOMPUTABLE -UNCONCERNED -UNCONCERNEDLY -UNCONDITIONAL -UNCONDITIONALLY -UNCONNECTED -UNCONSCIONABLE -UNCONSCIOUS -UNCONSCIOUSLY -UNCONSCIOUSNESS -UNCONSTITUTIONAL -UNCONSTRAINED -UNCONTROLLABILITY -UNCONTROLLABLE -UNCONTROLLABLY -UNCONTROLLED -UNCONVENTIONAL -UNCONVENTIONALLY -UNCONVINCED -UNCONVINCING -UNCOORDINATED -UNCORRECTABLE -UNCORRECTED -UNCOUNTABLE -UNCOUNTABLY -UNCOUTH -UNCOVER -UNCOVERED -UNCOVERING -UNCOVERS -UNDAMAGED -UNDAUNTED -UNDAUNTEDLY -UNDECIDABLE -UNDECIDED -UNDECLARED -UNDECOMPOSABLE -UNDEFINABILITY -UNDEFINED -UNDELETED -UNDENIABLE -UNDENIABLY -UNDER -UNDERBRUSH -UNDERDONE -UNDERESTIMATE -UNDERESTIMATED -UNDERESTIMATES -UNDERESTIMATING -UNDERESTIMATION -UNDERFLOW -UNDERFLOWED -UNDERFLOWING -UNDERFLOWS -UNDERFOOT -UNDERGO -UNDERGOES -UNDERGOING -UNDERGONE -UNDERGRADUATE -UNDERGRADUATES -UNDERGROUND -UNDERLIE -UNDERLIES -UNDERLINE -UNDERLINED -UNDERLINES -UNDERLING -UNDERLINGS -UNDERLINING -UNDERLININGS -UNDERLOADED -UNDERLYING -UNDERMINE -UNDERMINED -UNDERMINES -UNDERMINING -UNDERNEATH -UNDERPINNING -UNDERPINNINGS -UNDERPLAY -UNDERPLAYED -UNDERPLAYING -UNDERPLAYS -UNDERSCORE -UNDERSCORED -UNDERSCORES -UNDERSTAND -UNDERSTANDABILITY -UNDERSTANDABLE -UNDERSTANDABLY -UNDERSTANDING -UNDERSTANDINGLY -UNDERSTANDINGS -UNDERSTANDS -UNDERSTATED -UNDERSTOOD -UNDERTAKE -UNDERTAKEN -UNDERTAKER -UNDERTAKERS -UNDERTAKES -UNDERTAKING -UNDERTAKINGS -UNDERTOOK -UNDERWATER -UNDERWAY -UNDERWEAR -UNDERWENT -UNDERWORLD -UNDERWRITE -UNDERWRITER -UNDERWRITERS -UNDERWRITES -UNDERWRITING -UNDESIRABILITY -UNDESIRABLE -UNDETECTABLE -UNDETECTED -UNDETERMINED -UNDEVELOPED -UNDID -UNDIMINISHED -UNDIRECTED -UNDISCIPLINED -UNDISCOVERED -UNDISTURBED -UNDIVIDED -UNDO -UNDOCUMENTED -UNDOES -UNDOING -UNDOINGS -UNDONE -UNDOUBTEDLY -UNDRESS -UNDRESSED -UNDRESSES -UNDRESSING -UNDUE -UNDULY -UNEASILY -UNEASINESS -UNEASY -UNECONOMIC -UNECONOMICAL -UNEMBELLISHED -UNEMPLOYED -UNEMPLOYMENT -UNENCRYPTED -UNENDING -UNENLIGHTENING -UNEQUAL -UNEQUALED -UNEQUALLY -UNEQUIVOCAL -UNEQUIVOCALLY -UNESCO -UNESSENTIAL -UNEVALUATED -UNEVEN -UNEVENLY -UNEVENNESS -UNEVENTFUL -UNEXCUSED -UNEXPANDED -UNEXPECTED -UNEXPECTEDLY -UNEXPLAINED -UNEXPLORED -UNEXTENDED -UNFAIR -UNFAIRLY -UNFAIRNESS -UNFAITHFUL -UNFAITHFULLY -UNFAITHFULNESS -UNFAMILIAR -UNFAMILIARITY -UNFAMILIARLY -UNFAVORABLE -UNFETTERED -UNFINISHED -UNFIT -UNFITNESS -UNFLAGGING -UNFOLD -UNFOLDED -UNFOLDING -UNFOLDS -UNFORESEEN -UNFORGEABLE -UNFORGIVING -UNFORMATTED -UNFORTUNATE -UNFORTUNATELY -UNFORTUNATES -UNFOUNDED -UNFRIENDLINESS -UNFRIENDLY -UNFULFILLED -UNGRAMMATICAL -UNGRATEFUL -UNGRATEFULLY -UNGRATEFULNESS -UNGROUNDED -UNGUARDED -UNGUIDED -UNHAPPIER -UNHAPPIEST -UNHAPPILY -UNHAPPINESS -UNHAPPY -UNHARMED -UNHEALTHY -UNHEARD -UNHEEDED -UNIBUS -UNICORN -UNICORNS -UNICYCLE -UNIDENTIFIED -UNIDIRECTIONAL -UNIDIRECTIONALITY -UNIDIRECTIONALLY -UNIFICATION -UNIFICATIONS -UNIFIED -UNIFIER -UNIFIERS -UNIFIES -UNIFORM -UNIFORMED -UNIFORMITY -UNIFORMLY -UNIFORMS -UNIFY -UNIFYING -UNILLUMINATING -UNIMAGINABLE -UNIMPEDED -UNIMPLEMENTED -UNIMPORTANT -UNINDENTED -UNINITIALIZED -UNINSULATED -UNINTELLIGIBLE -UNINTENDED -UNINTENTIONAL -UNINTENTIONALLY -UNINTERESTING -UNINTERESTINGLY -UNINTERPRETED -UNINTERRUPTED -UNINTERRUPTEDLY -UNION -UNIONIZATION -UNIONIZE -UNIONIZED -UNIONIZER -UNIONIZERS -UNIONIZES -UNIONIZING -UNIONS -UNIPLUS -UNIPROCESSOR -UNIQUE -UNIQUELY -UNIQUENESS -UNIROYAL -UNISOFT -UNISON -UNIT -UNITARIAN -UNITARIANIZE -UNITARIANIZES -UNITARIANS -UNITE -UNITED -UNITES -UNITIES -UNITING -UNITS -UNITY -UNIVAC -UNIVALVE -UNIVALVES -UNIVERSAL -UNIVERSALITY -UNIVERSALLY -UNIVERSALS -UNIVERSE -UNIVERSES -UNIVERSITIES -UNIVERSITY -UNIX -UNIX -UNJUST -UNJUSTIFIABLE -UNJUSTIFIED -UNJUSTLY -UNKIND -UNKINDLY -UNKINDNESS -UNKNOWABLE -UNKNOWING -UNKNOWINGLY -UNKNOWN -UNKNOWNS -UNLABELLED -UNLAWFUL -UNLAWFULLY -UNLEASH -UNLEASHED -UNLEASHES -UNLEASHING -UNLESS -UNLIKE -UNLIKELY -UNLIKENESS -UNLIMITED -UNLINK -UNLINKED -UNLINKING -UNLINKS -UNLOAD -UNLOADED -UNLOADING -UNLOADS -UNLOCK -UNLOCKED -UNLOCKING -UNLOCKS -UNLUCKY -UNMANAGEABLE -UNMANAGEABLY -UNMANNED -UNMARKED -UNMARRIED -UNMASK -UNMASKED -UNMATCHED -UNMENTIONABLE -UNMERCIFUL -UNMERCIFULLY -UNMISTAKABLE -UNMISTAKABLY -UNMODIFIED -UNMOVED -UNNAMED -UNNATURAL -UNNATURALLY -UNNATURALNESS -UNNECESSARILY -UNNECESSARY -UNNEEDED -UNNERVE -UNNERVED -UNNERVES -UNNERVING -UNNOTICED -UNOBSERVABLE -UNOBSERVED -UNOBTAINABLE -UNOCCUPIED -UNOFFICIAL -UNOFFICIALLY -UNOPENED -UNORDERED -UNPACK -UNPACKED -UNPACKING -UNPACKS -UNPAID -UNPARALLELED -UNPARSED -UNPLANNED -UNPLEASANT -UNPLEASANTLY -UNPLEASANTNESS -UNPLUG -UNPOPULAR -UNPOPULARITY -UNPRECEDENTED -UNPREDICTABLE -UNPREDICTABLY -UNPRESCRIBED -UNPRESERVED -UNPRIMED -UNPROFITABLE -UNPROJECTED -UNPROTECTED -UNPROVABILITY -UNPROVABLE -UNPROVEN -UNPUBLISHED -UNQUALIFIED -UNQUALIFIEDLY -UNQUESTIONABLY -UNQUESTIONED -UNQUOTED -UNRAVEL -UNRAVELED -UNRAVELING -UNRAVELS -UNREACHABLE -UNREAL -UNREALISTIC -UNREALISTICALLY -UNREASONABLE -UNREASONABLENESS -UNREASONABLY -UNRECOGNIZABLE -UNRECOGNIZED -UNREGULATED -UNRELATED -UNRELIABILITY -UNRELIABLE -UNREPORTED -UNREPRESENTABLE -UNRESOLVED -UNRESPONSIVE -UNREST -UNRESTRAINED -UNRESTRICTED -UNRESTRICTEDLY -UNRESTRICTIVE -UNROLL -UNROLLED -UNROLLING -UNROLLS -UNRULY -UNSAFE -UNSAFELY -UNSANITARY -UNSATISFACTORY -UNSATISFIABILITY -UNSATISFIABLE -UNSATISFIED -UNSATISFYING -UNSCRUPULOUS -UNSEEDED -UNSEEN -UNSELECTED -UNSELFISH -UNSELFISHLY -UNSELFISHNESS -UNSENT -UNSETTLED -UNSETTLING -UNSHAKEN -UNSHARED -UNSIGNED -UNSKILLED -UNSLOTTED -UNSOLVABLE -UNSOLVED -UNSOPHISTICATED -UNSOUND -UNSPEAKABLE -UNSPECIFIED -UNSTABLE -UNSTEADINESS -UNSTEADY -UNSTRUCTURED -UNSUCCESSFUL -UNSUCCESSFULLY -UNSUITABLE -UNSUITED -UNSUPPORTED -UNSURE -UNSURPRISING -UNSURPRISINGLY -UNSYNCHRONIZED -UNTAGGED -UNTAPPED -UNTENABLE -UNTERMINATED -UNTESTED -UNTHINKABLE -UNTHINKING -UNTIDINESS -UNTIDY -UNTIE -UNTIED -UNTIES -UNTIL -UNTIMELY -UNTO -UNTOLD -UNTOUCHABLE -UNTOUCHABLES -UNTOUCHED -UNTOWARD -UNTRAINED -UNTRANSLATED -UNTREATED -UNTRIED -UNTRUE -UNTRUTHFUL -UNTRUTHFULNESS -UNTYING -UNUSABLE -UNUSED -UNUSUAL -UNUSUALLY -UNVARYING -UNVEIL -UNVEILED -UNVEILING -UNVEILS -UNWANTED -UNWELCOME -UNWHOLESOME -UNWIELDINESS -UNWIELDY -UNWILLING -UNWILLINGLY -UNWILLINGNESS -UNWIND -UNWINDER -UNWINDERS -UNWINDING -UNWINDS -UNWISE -UNWISELY -UNWISER -UNWISEST -UNWITTING -UNWITTINGLY -UNWORTHINESS -UNWORTHY -UNWOUND -UNWRAP -UNWRAPPED -UNWRAPPING -UNWRAPS -UNWRITTEN -UPBRAID -UPCOMING -UPDATE -UPDATED -UPDATER -UPDATES -UPDATING -UPGRADE -UPGRADED -UPGRADES -UPGRADING -UPHELD -UPHILL -UPHOLD -UPHOLDER -UPHOLDERS -UPHOLDING -UPHOLDS -UPHOLSTER -UPHOLSTERED -UPHOLSTERER -UPHOLSTERING -UPHOLSTERS -UPKEEP -UPLAND -UPLANDS -UPLIFT -UPLINK -UPLINKS -UPLOAD -UPON -UPPER -UPPERMOST -UPRIGHT -UPRIGHTLY -UPRIGHTNESS -UPRISING -UPRISINGS -UPROAR -UPROOT -UPROOTED -UPROOTING -UPROOTS -UPSET -UPSETS -UPSHOT -UPSHOTS -UPSIDE -UPSTAIRS -UPSTREAM -UPTON -UPTURN -UPTURNED -UPTURNING -UPTURNS -UPWARD -UPWARDS -URANIA -URANUS -URBAN -URBANA -URCHIN -URCHINS -URDU -URGE -URGED -URGENT -URGENTLY -URGES -URGING -URGINGS -URI -URINATE -URINATED -URINATES -URINATING -URINATION -URINE -URIS -URN -URNS -URQUHART -URSA -URSULA -URSULINE -URUGUAY -URUGUAYAN -URUGUAYANS -USABILITY -USABLE -USABLY -USAGE -USAGES -USE -USED -USEFUL -USEFULLY -USEFULNESS -USELESS -USELESSLY -USELESSNESS -USENET -USENIX -USER -USERS -USES -USHER -USHERED -USHERING -USHERS -USING -USUAL -USUALLY -USURP -USURPED -USURPER -UTAH -UTENSIL -UTENSILS -UTICA -UTILITIES -UTILITY -UTILIZATION -UTILIZATIONS -UTILIZE -UTILIZED -UTILIZES -UTILIZING -UTMOST -UTOPIA -UTOPIAN -UTOPIANIZE -UTOPIANIZES -UTOPIANS -UTRECHT -UTTER -UTTERANCE -UTTERANCES -UTTERED -UTTERING -UTTERLY -UTTERMOST -UTTERS -UZI -VACANCIES -VACANCY -VACANT -VACANTLY -VACATE -VACATED -VACATES -VACATING -VACATION -VACATIONED -VACATIONER -VACATIONERS -VACATIONING -VACATIONS -VACUO -VACUOUS -VACUOUSLY -VACUUM -VACUUMED -VACUUMING -VADUZ -VAGABOND -VAGABONDS -VAGARIES -VAGARY -VAGINA -VAGINAS -VAGRANT -VAGRANTLY -VAGUE -VAGUELY -VAGUENESS -VAGUER -VAGUEST -VAIL -VAIN -VAINLY -VALE -VALENCE -VALENCES -VALENTINE -VALENTINES -VALERIE -VALERY -VALES -VALET -VALETS -VALHALLA -VALIANT -VALIANTLY -VALID -VALIDATE -VALIDATED -VALIDATES -VALIDATING -VALIDATION -VALIDITY -VALIDLY -VALIDNESS -VALKYRIE -VALLETTA -VALLEY -VALLEYS -VALOIS -VALOR -VALPARAISO -VALUABLE -VALUABLES -VALUABLY -VALUATION -VALUATIONS -VALUE -VALUED -VALUER -VALUERS -VALUES -VALUING -VALVE -VALVES -VAMPIRE -VAN -VANCE -VANCEMENT -VANCOUVER -VANDALIZE -VANDALIZED -VANDALIZES -VANDALIZING -VANDENBERG -VANDERBILT -VANDERBURGH -VANDERPOEL -VANE -VANES -VANESSA -VANGUARD -VANILLA -VANISH -VANISHED -VANISHER -VANISHES -VANISHING -VANISHINGLY -VANITIES -VANITY -VANQUISH -VANQUISHED -VANQUISHES -VANQUISHING -VANS -VANTAGE -VAPOR -VAPORING -VAPORS -VARIABILITY -VARIABLE -VARIABLENESS -VARIABLES -VARIABLY -VARIAN -VARIANCE -VARIANCES -VARIANT -VARIANTLY -VARIANTS -VARIATION -VARIATIONS -VARIED -VARIES -VARIETIES -VARIETY -VARIOUS -VARIOUSLY -VARITYPE -VARITYPING -VARNISH -VARNISHES -VARY -VARYING -VARYINGS -VASE -VASES -VASQUEZ -VASSAL -VASSAR -VAST -VASTER -VASTEST -VASTLY -VASTNESS -VAT -VATICAN -VATICANIZATION -VATICANIZATIONS -VATICANIZE -VATICANIZES -VATS -VAUDEVILLE -VAUDOIS -VAUGHAN -VAUGHN -VAULT -VAULTED -VAULTER -VAULTING -VAULTS -VAUNT -VAUNTED -VAX -VAXES -VEAL -VECTOR -VECTORIZATION -VECTORIZING -VECTORS -VEDA -VEER -VEERED -VEERING -VEERS -VEGA -VEGANISM -VEGAS -VEGETABLE -VEGETABLES -VEGETARIAN -VEGETARIANS -VEGETATE -VEGETATED -VEGETATES -VEGETATING -VEGETATION -VEGETATIVE -VEHEMENCE -VEHEMENT -VEHEMENTLY -VEHICLE -VEHICLES -VEHICULAR -VEIL -VEILED -VEILING -VEILS -VEIN -VEINED -VEINING -VEINS -VELA -VELASQUEZ -VELLA -VELOCITIES -VELOCITY -VELVET -VENDOR -VENDORS -VENERABLE -VENERATION -VENETIAN -VENETO -VENEZUELA -VENEZUELAN -VENGEANCE -VENIAL -VENICE -VENISON -VENN -VENOM -VENOMOUS -VENOMOUSLY -VENT -VENTED -VENTILATE -VENTILATED -VENTILATES -VENTILATING -VENTILATION -VENTRICLE -VENTRICLES -VENTS -VENTURA -VENTURE -VENTURED -VENTURER -VENTURERS -VENTURES -VENTURING -VENTURINGS -VENUS -VENUSIAN -VENUSIANS -VERA -VERACITY -VERANDA -VERANDAS -VERB -VERBAL -VERBALIZE -VERBALIZED -VERBALIZES -VERBALIZING -VERBALLY -VERBOSE -VERBS -VERDE -VERDERER -VERDI -VERDICT -VERDURE -VERGE -VERGER -VERGES -VERGIL -VERIFIABILITY -VERIFIABLE -VERIFICATION -VERIFICATIONS -VERIFIED -VERIFIER -VERIFIERS -VERIFIES -VERIFY -VERIFYING -VERILY -VERITABLE -VERLAG -VERMIN -VERMONT -VERN -VERNA -VERNACULAR -VERNE -VERNON -VERONA -VERONICA -VERSA -VERSAILLES -VERSATEC -VERSATILE -VERSATILITY -VERSE -VERSED -VERSES -VERSING -VERSION -VERSIONS -VERSUS -VERTEBRATE -VERTEBRATES -VERTEX -VERTICAL -VERTICALLY -VERTICALNESS -VERTICES -VERY -VESSEL -VESSELS -VEST -VESTED -VESTIGE -VESTIGES -VESTIGIAL -VESTS -VESUVIUS -VETERAN -VETERANS -VETERINARIAN -VETERINARIANS -VETERINARY -VETO -VETOED -VETOER -VETOES -VEX -VEXATION -VEXED -VEXES -VEXING -VIA -VIABILITY -VIABLE -VIABLY -VIAL -VIALS -VIBRATE -VIBRATED -VIBRATING -VIBRATION -VIBRATIONS -VIBRATOR -VIC -VICE -VICEROY -VICES -VICHY -VICINITY -VICIOUS -VICIOUSLY -VICIOUSNESS -VICISSITUDE -VICISSITUDES -VICKERS -VICKSBURG -VICKY -VICTIM -VICTIMIZE -VICTIMIZED -VICTIMIZER -VICTIMIZERS -VICTIMIZES -VICTIMIZING -VICTIMS -VICTOR -VICTORIA -VICTORIAN -VICTORIANIZE -VICTORIANIZES -VICTORIANS -VICTORIES -VICTORIOUS -VICTORIOUSLY -VICTORS -VICTORY -VICTROLA -VICTUAL -VICTUALER -VICTUALS -VIDA -VIDAL -VIDEO -VIDEOTAPE -VIDEOTAPES -VIDEOTEX -VIE -VIED -VIENNA -VIENNESE -VIENTIANE -VIER -VIES -VIET -VIETNAM -VIETNAMESE -VIEW -VIEWABLE -VIEWED -VIEWER -VIEWERS -VIEWING -VIEWPOINT -VIEWPOINTS -VIEWS -VIGILANCE -VIGILANT -VIGILANTE -VIGILANTES -VIGILANTLY -VIGNETTE -VIGNETTES -VIGOR -VIGOROUS -VIGOROUSLY -VIKING -VIKINGS -VIKRAM -VILE -VILELY -VILENESS -VILIFICATION -VILIFICATIONS -VILIFIED -VILIFIES -VILIFY -VILIFYING -VILLA -VILLAGE -VILLAGER -VILLAGERS -VILLAGES -VILLAIN -VILLAINOUS -VILLAINOUSLY -VILLAINOUSNESS -VILLAINS -VILLAINY -VILLAS -VINCE -VINCENT -VINCI -VINDICATE -VINDICATED -VINDICATION -VINDICTIVE -VINDICTIVELY -VINDICTIVENESS -VINE -VINEGAR -VINES -VINEYARD -VINEYARDS -VINSON -VINTAGE -VIOLATE -VIOLATED -VIOLATES -VIOLATING -VIOLATION -VIOLATIONS -VIOLATOR -VIOLATORS -VIOLENCE -VIOLENT -VIOLENTLY -VIOLET -VIOLETS -VIOLIN -VIOLINIST -VIOLINISTS -VIOLINS -VIPER -VIPERS -VIRGIL -VIRGIN -VIRGINIA -VIRGINIAN -VIRGINIANS -VIRGINITY -VIRGINS -VIRGO -VIRTUAL -VIRTUALLY -VIRTUE -VIRTUES -VIRTUOSO -VIRTUOSOS -VIRTUOUS -VIRTUOUSLY -VIRULENT -VIRUS -VIRUSES -VISA -VISAGE -VISAS -VISCOUNT -VISCOUNTS -VISCOUS -VISHNU -VISIBILITY -VISIBLE -VISIBLY -VISIGOTH -VISIGOTHS -VISION -VISIONARY -VISIONS -VISIT -VISITATION -VISITATIONS -VISITED -VISITING -VISITOR -VISITORS -VISITS -VISOR -VISORS -VISTA -VISTAS -VISUAL -VISUALIZE -VISUALIZED -VISUALIZER -VISUALIZES -VISUALIZING -VISUALLY -VITA -VITAE -VITAL -VITALITY -VITALLY -VITALS -VITO -VITUS -VIVALDI -VIVIAN -VIVID -VIVIDLY -VIVIDNESS -VIZIER -VLADIMIR -VLADIVOSTOK -VOCABULARIES -VOCABULARY -VOCAL -VOCALLY -VOCALS -VOCATION -VOCATIONAL -VOCATIONALLY -VOCATIONS -VOGEL -VOGUE -VOICE -VOICED -VOICER -VOICERS -VOICES -VOICING -VOID -VOIDED -VOIDER -VOIDING -VOIDS -VOLATILE -VOLATILITIES -VOLATILITY -VOLCANIC -VOLCANO -VOLCANOS -VOLITION -VOLKSWAGEN -VOLKSWAGENS -VOLLEY -VOLLEYBALL -VOLLEYBALLS -VOLSTEAD -VOLT -VOLTA -VOLTAGE -VOLTAGES -VOLTAIRE -VOLTERRA -VOLTS -VOLUME -VOLUMES -VOLUNTARILY -VOLUNTARY -VOLUNTEER -VOLUNTEERED -VOLUNTEERING -VOLUNTEERS -VOLVO -VOMIT -VOMITED -VOMITING -VOMITS -VORTEX -VOSS -VOTE -VOTED -VOTER -VOTERS -VOTES -VOTING -VOTIVE -VOUCH -VOUCHER -VOUCHERS -VOUCHES -VOUCHING -VOUGHT -VOW -VOWED -VOWEL -VOWELS -VOWER -VOWING -VOWS -VOYAGE -VOYAGED -VOYAGER -VOYAGERS -VOYAGES -VOYAGING -VOYAGINGS -VREELAND -VULCAN -VULCANISM -VULGAR -VULGARLY -VULNERABILITIES -VULNERABILITY -VULNERABLE -VULTURE -VULTURES -WAALS -WABASH -WACKE -WACKY -WACO -WADE -WADED -WADER -WADES -WADING -WADSWORTH -WAFER -WAFERS -WAFFLE -WAFFLES -WAFT -WAG -WAGE -WAGED -WAGER -WAGERS -WAGES -WAGING -WAGNER -WAGNERIAN -WAGNERIZE -WAGNERIZES -WAGON -WAGONER -WAGONS -WAGS -WAHL -WAIL -WAILED -WAILING -WAILS -WAINWRIGHT -WAIST -WAISTCOAT -WAISTCOATS -WAISTS -WAIT -WAITE -WAITED -WAITER -WAITERS -WAITING -WAITRESS -WAITRESSES -WAITS -WAIVE -WAIVED -WAIVER -WAIVERABLE -WAIVES -WAIVING -WAKE -WAKED -WAKEFIELD -WAKEN -WAKENED -WAKENING -WAKES -WAKEUP -WAKING -WALBRIDGE -WALCOTT -WALDEN -WALDENSIAN -WALDO -WALDORF -WALDRON -WALES -WALFORD -WALGREEN -WALK -WALKED -WALKER -WALKERS -WALKING -WALKS -WALL -WALLACE -WALLED -WALLENSTEIN -WALLER -WALLET -WALLETS -WALLING -WALLIS -WALLOW -WALLOWED -WALLOWING -WALLOWS -WALLS -WALNUT -WALNUTS -WALPOLE -WALRUS -WALRUSES -WALSH -WALT -WALTER -WALTERS -WALTHAM -WALTON -WALTZ -WALTZED -WALTZES -WALTZING -WALWORTH -WAN -WAND -WANDER -WANDERED -WANDERER -WANDERERS -WANDERING -WANDERINGS -WANDERS -WANE -WANED -WANES -WANG -WANING -WANLY -WANSEE -WANSLEY -WANT -WANTED -WANTING -WANTON -WANTONLY -WANTONNESS -WANTS -WAPATO -WAPPINGER -WAR -WARBLE -WARBLED -WARBLER -WARBLES -WARBLING -WARBURTON -WARD -WARDEN -WARDENS -WARDER -WARDROBE -WARDROBES -WARDS -WARE -WAREHOUSE -WAREHOUSES -WAREHOUSING -WARES -WARFARE -WARFIELD -WARILY -WARINESS -WARING -WARLIKE -WARM -WARMED -WARMER -WARMERS -WARMEST -WARMING -WARMLY -WARMS -WARMTH -WARN -WARNED -WARNER -WARNING -WARNINGLY -WARNINGS -WARNOCK -WARNS -WARP -WARPED -WARPING -WARPS -WARRANT -WARRANTED -WARRANTIES -WARRANTING -WARRANTS -WARRANTY -WARRED -WARRING -WARRIOR -WARRIORS -WARS -WARSAW -WARSHIP -WARSHIPS -WART -WARTIME -WARTS -WARWICK -WARY -WAS -WASH -WASHBURN -WASHED -WASHER -WASHERS -WASHES -WASHING -WASHINGS -WASHINGTON -WASHOE -WASP -WASPS -WASSERMAN -WASTE -WASTED -WASTEFUL -WASTEFULLY -WASTEFULNESS -WASTES -WASTING -WATANABE -WATCH -WATCHED -WATCHER -WATCHERS -WATCHES -WATCHFUL -WATCHFULLY -WATCHFULNESS -WATCHING -WATCHINGS -WATCHMAN -WATCHWORD -WATCHWORDS -WATER -WATERBURY -WATERED -WATERFALL -WATERFALLS -WATERGATE -WATERHOUSE -WATERING -WATERINGS -WATERLOO -WATERMAN -WATERPROOF -WATERPROOFING -WATERS -WATERTOWN -WATERWAY -WATERWAYS -WATERY -WATKINS -WATSON -WATTENBERG -WATTERSON -WATTS -WAUKESHA -WAUNONA -WAUPACA -WAUPUN -WAUSAU -WAUWATOSA -WAVE -WAVED -WAVEFORM -WAVEFORMS -WAVEFRONT -WAVEFRONTS -WAVEGUIDES -WAVELAND -WAVELENGTH -WAVELENGTHS -WAVER -WAVERS -WAVES -WAVING -WAX -WAXED -WAXEN -WAXER -WAXERS -WAXES -WAXING -WAXY -WAY -WAYNE -WAYNESBORO -WAYS -WAYSIDE -WAYWARD -WEAK -WEAKEN -WEAKENED -WEAKENING -WEAKENS -WEAKER -WEAKEST -WEAKLY -WEAKNESS -WEAKNESSES -WEALTH -WEALTHIEST -WEALTHS -WEALTHY -WEAN -WEANED -WEANING -WEAPON -WEAPONS -WEAR -WEARABLE -WEARER -WEARIED -WEARIER -WEARIEST -WEARILY -WEARINESS -WEARING -WEARISOME -WEARISOMELY -WEARS -WEARY -WEARYING -WEASEL -WEASELS -WEATHER -WEATHERCOCK -WEATHERCOCKS -WEATHERED -WEATHERFORD -WEATHERING -WEATHERS -WEAVE -WEAVER -WEAVES -WEAVING -WEB -WEBB -WEBBER -WEBS -WEBSTER -WEBSTERVILLE -WEDDED -WEDDING -WEDDINGS -WEDGE -WEDGED -WEDGES -WEDGING -WEDLOCK -WEDNESDAY -WEDNESDAYS -WEDS -WEE -WEED -WEEDS -WEEK -WEEKEND -WEEKENDS -WEEKLY -WEEKS -WEEP -WEEPER -WEEPING -WEEPS -WEHR -WEI -WEIBULL -WEIDER -WEIDMAN -WEIERSTRASS -WEIGH -WEIGHED -WEIGHING -WEIGHINGS -WEIGHS -WEIGHT -WEIGHTED -WEIGHTING -WEIGHTS -WEIGHTY -WEINBERG -WEINER -WEINSTEIN -WEIRD -WEIRDLY -WEISENHEIMER -WEISS -WEISSMAN -WEISSMULLER -WELCH -WELCHER -WELCHES -WELCOME -WELCOMED -WELCOMES -WELCOMING -WELD -WELDED -WELDER -WELDING -WELDON -WELDS -WELDWOOD -WELFARE -WELL -WELLED -WELLER -WELLES -WELLESLEY -WELLING -WELLINGTON -WELLMAN -WELLS -WELLSVILLE -WELMERS -WELSH -WELTON -WENCH -WENCHES -WENDELL -WENDY -WENT -WENTWORTH -WEPT -WERE -WERNER -WERTHER -WESLEY -WESLEYAN -WESSON -WEST -WESTBOUND -WESTBROOK -WESTCHESTER -WESTERN -WESTERNER -WESTERNERS -WESTFIELD -WESTHAMPTON -WESTINGHOUSE -WESTMINSTER -WESTMORE -WESTON -WESTPHALIA -WESTPORT -WESTWARD -WESTWARDS -WESTWOOD -WET -WETLY -WETNESS -WETS -WETTED -WETTER -WETTEST -WETTING -WEYERHAUSER -WHACK -WHACKED -WHACKING -WHACKS -WHALE -WHALEN -WHALER -WHALES -WHALING -WHARF -WHARTON -WHARVES -WHAT -WHATEVER -WHATLEY -WHATSOEVER -WHEAT -WHEATEN -WHEATLAND -WHEATON -WHEATSTONE -WHEEL -WHEELED -WHEELER -WHEELERS -WHEELING -WHEELINGS -WHEELOCK -WHEELS -WHELAN -WHELLER -WHELP -WHEN -WHENCE -WHENEVER -WHERE -WHEREABOUTS -WHEREAS -WHEREBY -WHEREIN -WHEREUPON -WHEREVER -WHETHER -WHICH -WHICHEVER -WHILE -WHIM -WHIMPER -WHIMPERED -WHIMPERING -WHIMPERS -WHIMS -WHIMSICAL -WHIMSICALLY -WHIMSIES -WHIMSY -WHINE -WHINED -WHINES -WHINING -WHIP -WHIPPANY -WHIPPED -WHIPPER -WHIPPERS -WHIPPING -WHIPPINGS -WHIPPLE -WHIPS -WHIRL -WHIRLED -WHIRLING -WHIRLPOOL -WHIRLPOOLS -WHIRLS -WHIRLWIND -WHIRR -WHIRRING -WHISK -WHISKED -WHISKER -WHISKERS -WHISKEY -WHISKING -WHISKS -WHISPER -WHISPERED -WHISPERING -WHISPERINGS -WHISPERS -WHISTLE -WHISTLED -WHISTLER -WHISTLERS -WHISTLES -WHISTLING -WHIT -WHITAKER -WHITCOMB -WHITE -WHITEHALL -WHITEHORSE -WHITELEAF -WHITELEY -WHITELY -WHITEN -WHITENED -WHITENER -WHITENERS -WHITENESS -WHITENING -WHITENS -WHITER -WHITES -WHITESPACE -WHITEST -WHITEWASH -WHITEWASHED -WHITEWATER -WHITFIELD -WHITING -WHITLOCK -WHITMAN -WHITMANIZE -WHITMANIZES -WHITNEY -WHITTAKER -WHITTIER -WHITTLE -WHITTLED -WHITTLES -WHITTLING -WHIZ -WHIZZED -WHIZZES -WHIZZING -WHO -WHOEVER -WHOLE -WHOLEHEARTED -WHOLEHEARTEDLY -WHOLENESS -WHOLES -WHOLESALE -WHOLESALER -WHOLESALERS -WHOLESOME -WHOLESOMENESS -WHOLLY -WHOM -WHOMEVER -WHOOP -WHOOPED -WHOOPING -WHOOPS -WHORE -WHORES -WHORL -WHORLS -WHOSE -WHY -WICHITA -WICK -WICKED -WICKEDLY -WICKEDNESS -WICKER -WICKS -WIDE -WIDEBAND -WIDELY -WIDEN -WIDENED -WIDENER -WIDENING -WIDENS -WIDER -WIDESPREAD -WIDEST -WIDGET -WIDOW -WIDOWED -WIDOWER -WIDOWERS -WIDOWS -WIDTH -WIDTHS -WIELAND -WIELD -WIELDED -WIELDER -WIELDING -WIELDS -WIER -WIFE -WIFELY -WIG -WIGGINS -WIGHTMAN -WIGS -WIGWAM -WILBUR -WILCOX -WILD -WILDCAT -WILDCATS -WILDER -WILDERNESS -WILDEST -WILDLY -WILDNESS -WILE -WILES -WILEY -WILFRED -WILHELM -WILHELMINA -WILINESS -WILKES -WILKIE -WILKINS -WILKINSON -WILL -WILLA -WILLAMETTE -WILLARD -WILLCOX -WILLED -WILLEM -WILLFUL -WILLFULLY -WILLIAM -WILLIAMS -WILLIAMSBURG -WILLIAMSON -WILLIE -WILLIED -WILLIES -WILLING -WILLINGLY -WILLINGNESS -WILLIS -WILLISSON -WILLOUGHBY -WILLOW -WILLOWS -WILLS -WILLY -WILMA -WILMETTE -WILMINGTON -WILSHIRE -WILSON -WILSONIAN -WILT -WILTED -WILTING -WILTS -WILTSHIRE -WILY -WIN -WINCE -WINCED -WINCES -WINCHELL -WINCHESTER -WINCING -WIND -WINDED -WINDER -WINDERS -WINDING -WINDMILL -WINDMILLS -WINDOW -WINDOWS -WINDS -WINDSOR -WINDY -WINE -WINED -WINEHEAD -WINER -WINERS -WINES -WINFIELD -WING -WINGED -WINGING -WINGS -WINIFRED -WINING -WINK -WINKED -WINKER -WINKING -WINKS -WINNEBAGO -WINNER -WINNERS -WINNETKA -WINNIE -WINNING -WINNINGLY -WINNINGS -WINNIPEG -WINNIPESAUKEE -WINOGRAD -WINOOSKI -WINS -WINSBOROUGH -WINSETT -WINSLOW -WINSTON -WINTER -WINTERED -WINTERING -WINTERS -WINTHROP -WINTRY -WIPE -WIPED -WIPER -WIPERS -WIPES -WIPING -WIRE -WIRED -WIRELESS -WIRES -WIRETAP -WIRETAPPERS -WIRETAPPING -WIRETAPS -WIRINESS -WIRING -WIRY -WISCONSIN -WISDOM -WISDOMS -WISE -WISED -WISELY -WISENHEIMER -WISER -WISEST -WISH -WISHED -WISHER -WISHERS -WISHES -WISHFUL -WISHING -WISP -WISPS -WISTFUL -WISTFULLY -WISTFULNESS -WIT -WITCH -WITCHCRAFT -WITCHES -WITCHING -WITH -WITHAL -WITHDRAW -WITHDRAWAL -WITHDRAWALS -WITHDRAWING -WITHDRAWN -WITHDRAWS -WITHDREW -WITHER -WITHERS -WITHERSPOON -WITHHELD -WITHHOLD -WITHHOLDER -WITHHOLDERS -WITHHOLDING -WITHHOLDINGS -WITHHOLDS -WITHIN -WITHOUT -WITHSTAND -WITHSTANDING -WITHSTANDS -WITHSTOOD -WITNESS -WITNESSED -WITNESSES -WITNESSING -WITS -WITT -WITTGENSTEIN -WITTY -WIVES -WIZARD -WIZARDS -WOE -WOEFUL -WOEFULLY -WOKE -WOLCOTT -WOLF -WOLFE -WOLFF -WOLFGANG -WOLVERTON -WOLVES -WOMAN -WOMANHOOD -WOMANLY -WOMB -WOMBS -WOMEN -WON -WONDER -WONDERED -WONDERFUL -WONDERFULLY -WONDERFULNESS -WONDERING -WONDERINGLY -WONDERMENT -WONDERS -WONDROUS -WONDROUSLY -WONG -WONT -WONTED -WOO -WOOD -WOODARD -WOODBERRY -WOODBURY -WOODCHUCK -WOODCHUCKS -WOODCOCK -WOODCOCKS -WOODED -WOODEN -WOODENLY -WOODENNESS -WOODLAND -WOODLAWN -WOODMAN -WOODPECKER -WOODPECKERS -WOODROW -WOODS -WOODSTOCK -WOODWARD -WOODWARDS -WOODWORK -WOODWORKING -WOODY -WOOED -WOOER -WOOF -WOOFED -WOOFER -WOOFERS -WOOFING -WOOFS -WOOING -WOOL -WOOLEN -WOOLLY -WOOLS -WOOLWORTH -WOONSOCKET -WOOS -WOOSTER -WORCESTER -WORCESTERSHIRE -WORD -WORDED -WORDILY -WORDINESS -WORDING -WORDS -WORDSWORTH -WORDY -WORE -WORK -WORKABLE -WORKABLY -WORKBENCH -WORKBENCHES -WORKBOOK -WORKBOOKS -WORKED -WORKER -WORKERS -WORKHORSE -WORKHORSES -WORKING -WORKINGMAN -WORKINGS -WORKLOAD -WORKMAN -WORKMANSHIP -WORKMEN -WORKS -WORKSHOP -WORKSHOPS -WORKSPACE -WORKSTATION -WORKSTATIONS -WORLD -WORLDLINESS -WORLDLY -WORLDS -WORLDWIDE -WORM -WORMED -WORMING -WORMS -WORN -WORRIED -WORRIER -WORRIERS -WORRIES -WORRISOME -WORRY -WORRYING -WORRYINGLY -WORSE -WORSHIP -WORSHIPED -WORSHIPER -WORSHIPFUL -WORSHIPING -WORSHIPS -WORST -WORSTED -WORTH -WORTHIEST -WORTHINESS -WORTHINGTON -WORTHLESS -WORTHLESSNESS -WORTHS -WORTHWHILE -WORTHWHILENESS -WORTHY -WOTAN -WOULD -WOUND -WOUNDED -WOUNDING -WOUNDS -WOVE -WOVEN -WRANGLE -WRANGLED -WRANGLER -WRAP -WRAPAROUND -WRAPPED -WRAPPER -WRAPPERS -WRAPPING -WRAPPINGS -WRAPS -WRATH -WREAK -WREAKS -WREATH -WREATHED -WREATHES -WRECK -WRECKAGE -WRECKED -WRECKER -WRECKERS -WRECKING -WRECKS -WREN -WRENCH -WRENCHED -WRENCHES -WRENCHING -WRENS -WREST -WRESTLE -WRESTLER -WRESTLES -WRESTLING -WRESTLINGS -WRETCH -WRETCHED -WRETCHEDNESS -WRETCHES -WRIGGLE -WRIGGLED -WRIGGLER -WRIGGLES -WRIGGLING -WRIGLEY -WRING -WRINGER -WRINGS -WRINKLE -WRINKLED -WRINKLES -WRIST -WRISTS -WRISTWATCH -WRISTWATCHES -WRIT -WRITABLE -WRITE -WRITER -WRITERS -WRITES -WRITHE -WRITHED -WRITHES -WRITHING -WRITING -WRITINGS -WRITS -WRITTEN -WRONG -WRONGED -WRONGING -WRONGLY -WRONGS -WRONSKIAN -WROTE -WROUGHT -WRUNG -WUHAN -WYANDOTTE -WYATT -WYETH -WYLIE -WYMAN -WYNER -WYNN -WYOMING -XANTHUS -XAVIER -XEBEC -XENAKIS -XENIA -XENIX -XEROX -XEROXED -XEROXES -XEROXING -XERXES -XHOSA -YAGI -YAKIMA -YALE -YALIES -YALTA -YAMAHA -YANK -YANKED -YANKEE -YANKEES -YANKING -YANKS -YANKTON -YAOUNDE -YAQUI -YARD -YARDS -YARDSTICK -YARDSTICKS -YARMOUTH -YARN -YARNS -YATES -YAUNDE -YAWN -YAWNER -YAWNING -YEA -YEAGER -YEAR -YEARLY -YEARN -YEARNED -YEARNING -YEARNINGS -YEARS -YEAS -YEAST -YEASTS -YEATS -YELL -YELLED -YELLER -YELLING -YELLOW -YELLOWED -YELLOWER -YELLOWEST -YELLOWING -YELLOWISH -YELLOWKNIFE -YELLOWNESS -YELLOWS -YELLOWSTONE -YELP -YELPED -YELPING -YELPS -YEMEN -YENTL -YEOMAN -YEOMEN -YERKES -YES -YESTERDAY -YESTERDAYS -YET -YIDDISH -YIELD -YIELDED -YIELDING -YIELDS -YODER -YOKE -YOKES -YOKNAPATAWPHA -YOKOHAMA -YOKUTS -YON -YONDER -YONKERS -YORICK -YORK -YORKER -YORKERS -YORKSHIRE -YORKTOWN -YOSEMITE -YOST -YOU -YOUNG -YOUNGER -YOUNGEST -YOUNGLY -YOUNGSTER -YOUNGSTERS -YOUNGSTOWN -YOUR -YOURS -YOURSELF -YOURSELVES -YOUTH -YOUTHES -YOUTHFUL -YOUTHFULLY -YOUTHFULNESS -YPSILANTI -YUBA -YUCATAN -YUGOSLAV -YUGOSLAVIA -YUGOSLAVIAN -YUGOSLAVIANS -YUH -YUKI -YUKON -YURI -YVES -YVETTE -ZACHARY -ZAGREB -ZAIRE -ZAMBIA -ZAN -ZANZIBAR -ZEAL -ZEALAND -ZEALOUS -ZEALOUSLY -ZEALOUSNESS -ZEBRA -ZEBRAS -ZEFFIRELLI -ZEISS -ZELLERBACH -ZEN -ZENITH -ZENNIST -ZERO -ZEROED -ZEROES -ZEROING -ZEROS -ZEROTH -ZEST -ZEUS -ZIEGFELD -ZIEGFELDS -ZIEGLER -ZIGGY -ZIGZAG -ZILLIONS -ZIMMERMAN -ZINC -ZION -ZIONISM -ZIONIST -ZIONISTS -ZIONS -ZODIAC -ZOE -ZOMBA -ZONAL -ZONALLY -ZONE -ZONED -ZONES -ZONING -ZOO -ZOOLOGICAL -ZOOLOGICALLY -ZOOM -ZOOMS -ZOOS -ZORN -ZOROASTER -ZOROASTRIAN -ZULU -ZULUS -ZURICH diff --git a/strings/dna.py b/strings/dna.py deleted file mode 100644 index 33e1063f4124..000000000000 --- a/strings/dna.py +++ /dev/null @@ -1,30 +0,0 @@ -import re - - -def dna(dna: str) -> str: - """ - https://en.wikipedia.org/wiki/DNA - Returns the second side of a DNA strand - - >>> dna("GCTA") - 'CGAT' - >>> dna("ATGC") - 'TACG' - >>> dna("CTGA") - 'GACT' - >>> dna("GFGG") - Traceback (most recent call last): - ... - ValueError: Invalid Strand - """ - - if len(re.findall("[ATCG]", dna)) != len(dna): - raise ValueError("Invalid Strand") - - return dna.translate(dna.maketrans("ATCG", "TAGC")) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/edit_distance.py b/strings/edit_distance.py deleted file mode 100644 index e842c8555c8e..000000000000 --- a/strings/edit_distance.py +++ /dev/null @@ -1,32 +0,0 @@ -def edit_distance(source: str, target: str) -> int: - """ - Edit distance algorithm is a string metric, i.e., it is a way of quantifying how - dissimilar two strings are to one another. It is measured by counting the minimum - number of operations required to transform one string into another. - - This implementation assumes that the cost of operations (insertion, deletion and - substitution) is always 1 - - Args: - source: the initial string with respect to which we are calculating the edit - distance for the target - target: the target string, formed after performing n operations on the source string - - >>> edit_distance("GATTIC", "GALTIC") - 1 - """ - if len(source) == 0: - return len(target) - elif len(target) == 0: - return len(source) - - delta = int(source[-1] != target[-1]) # Substitution - return min( - edit_distance(source[:-1], target[:-1]) + delta, - edit_distance(source, target[:-1]) + 1, - edit_distance(source[:-1], target) + 1, - ) - - -if __name__ == "__main__": - print(edit_distance("ATCGCTG", "TAGCTAA")) # Answer is 4 diff --git a/strings/frequency_finder.py b/strings/frequency_finder.py deleted file mode 100644 index 8479c81ae464..000000000000 --- a/strings/frequency_finder.py +++ /dev/null @@ -1,103 +0,0 @@ -# Frequency Finder - -import string - -# frequency taken from https://en.wikipedia.org/wiki/Letter_frequency -english_letter_freq = { - "E": 12.70, - "T": 9.06, - "A": 8.17, - "O": 7.51, - "I": 6.97, - "N": 6.75, - "S": 6.33, - "H": 6.09, - "R": 5.99, - "D": 4.25, - "L": 4.03, - "C": 2.78, - "U": 2.76, - "M": 2.41, - "W": 2.36, - "F": 2.23, - "G": 2.02, - "Y": 1.97, - "P": 1.93, - "B": 1.29, - "V": 0.98, - "K": 0.77, - "J": 0.15, - "X": 0.15, - "Q": 0.10, - "Z": 0.07, -} -ETAOIN = "ETAOINSHRDLCUMWFGYPBVKJXQZ" -LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - - -def get_letter_count(message: str) -> dict[str, int]: - letter_count = {letter: 0 for letter in string.ascii_uppercase} - for letter in message.upper(): - if letter in LETTERS: - letter_count[letter] += 1 - - return letter_count - - -def get_item_at_index_zero(x: tuple) -> str: - return x[0] - - -def get_frequency_order(message: str) -> str: - """ - Get the frequency order of the letters in the given string - >>> get_frequency_order('Hello World') - 'LOWDRHEZQXJKVBPYGFMUCSNIAT' - >>> get_frequency_order('Hello@') - 'LHOEZQXJKVBPYGFWMUCDRSNIAT' - >>> get_frequency_order('h') - 'HZQXJKVBPYGFWMUCLDRSNIOATE' - """ - letter_to_freq = get_letter_count(message) - freq_to_letter: dict[int, list[str]] = { - freq: [] for letter, freq in letter_to_freq.items() - } - for letter in LETTERS: - freq_to_letter[letter_to_freq[letter]].append(letter) - - freq_to_letter_str: dict[int, str] = {} - - for freq in freq_to_letter: - freq_to_letter[freq].sort(key=ETAOIN.find, reverse=True) - freq_to_letter_str[freq] = "".join(freq_to_letter[freq]) - - freq_pairs = list(freq_to_letter_str.items()) - freq_pairs.sort(key=get_item_at_index_zero, reverse=True) - - freq_order: list[str] = [freq_pair[1] for freq_pair in freq_pairs] - - return "".join(freq_order) - - -def english_freq_match_score(message: str) -> int: - """ - >>> english_freq_match_score('Hello World') - 1 - """ - freq_order = get_frequency_order(message) - match_score = 0 - for common_letter in ETAOIN[:6]: - if common_letter in freq_order[:6]: - match_score += 1 - - for uncommon_letter in ETAOIN[-6:]: - if uncommon_letter in freq_order[-6:]: - match_score += 1 - - return match_score - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/hamming_distance.py b/strings/hamming_distance.py deleted file mode 100644 index a28949172aa4..000000000000 --- a/strings/hamming_distance.py +++ /dev/null @@ -1,40 +0,0 @@ -def hamming_distance(string1: str, string2: str) -> int: - """Calculate the Hamming distance between two equal length strings - In information theory, the Hamming distance between two strings of equal - length is the number of positions at which the corresponding symbols are - different. https://en.wikipedia.org/wiki/Hamming_distance - - Args: - string1 (str): Sequence 1 - string2 (str): Sequence 2 - - Returns: - int: Hamming distance - - >>> hamming_distance("python", "python") - 0 - >>> hamming_distance("karolin", "kathrin") - 3 - >>> hamming_distance("00000", "11111") - 5 - >>> hamming_distance("karolin", "kath") - Traceback (most recent call last): - ... - ValueError: String lengths must match! - """ - if len(string1) != len(string2): - raise ValueError("String lengths must match!") - - count = 0 - - for char1, char2 in zip(string1, string2): - if char1 != char2: - count += 1 - - return count - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/indian_phone_validator.py b/strings/indian_phone_validator.py deleted file mode 100644 index 07161a63a7af..000000000000 --- a/strings/indian_phone_validator.py +++ /dev/null @@ -1,29 +0,0 @@ -import re - - -def indian_phone_validator(phone: str) -> bool: - """ - Determine whether the string is a valid phone number or not - :param phone: - :return: Boolean - >>> indian_phone_validator("+91123456789") - False - >>> indian_phone_validator("+919876543210") - True - >>> indian_phone_validator("01234567896") - False - >>> indian_phone_validator("919876543218") - True - >>> indian_phone_validator("+91-1234567899") - False - >>> indian_phone_validator("+91-9876543218") - True - """ - pat = re.compile(r"^(\+91[\-\s]?)?[0]?(91)?[789]\d{9}$") - if match := re.search(pat, phone): - return match.string == phone - return False - - -if __name__ == "__main__": - print(indian_phone_validator("+918827897895")) diff --git a/strings/is_contains_unique_chars.py b/strings/is_contains_unique_chars.py deleted file mode 100644 index d6b698e769f8..000000000000 --- a/strings/is_contains_unique_chars.py +++ /dev/null @@ -1,31 +0,0 @@ -def is_contains_unique_chars(input_str: str) -> bool: - """ - Check if all characters in the string is unique or not. - >>> is_contains_unique_chars("I_love.py") - True - >>> is_contains_unique_chars("I don't love Python") - False - - Time complexity: O(n) - Space complexity: O(1) 19320 bytes as we are having 144697 characters in unicode - """ - - # Each bit will represent each unicode character - # For example 65th bit representing 'A' - # https://stackoverflow.com/a/12811293 - bitmap = 0 - for ch in input_str: - ch_unicode = ord(ch) - ch_bit_index_on = pow(2, ch_unicode) - - # If we already turned on bit for current character's unicode - if bitmap >> ch_unicode & 1 == 1: - return False - bitmap |= ch_bit_index_on - return True - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/is_isogram.py b/strings/is_isogram.py deleted file mode 100644 index a9d9acc8138e..000000000000 --- a/strings/is_isogram.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -wiki: https://en.wikipedia.org/wiki/Heterogram_(literature)#Isograms -""" - - -def is_isogram(string: str) -> bool: - """ - An isogram is a word in which no letter is repeated. - Examples of isograms are uncopyrightable and ambidextrously. - >>> is_isogram('Uncopyrightable') - True - >>> is_isogram('allowance') - False - >>> is_isogram('copy1') - Traceback (most recent call last): - ... - ValueError: String must only contain alphabetic characters. - """ - if not all(x.isalpha() for x in string): - raise ValueError("String must only contain alphabetic characters.") - - letters = sorted(string.lower()) - return len(letters) == len(set(letters)) - - -if __name__ == "__main__": - input_str = input("Enter a string ").strip() - - isogram = is_isogram(input_str) - print(f"{input_str} is {'an' if isogram else 'not an'} isogram.") diff --git a/strings/is_pangram.py b/strings/is_pangram.py deleted file mode 100644 index c8b894b7ea31..000000000000 --- a/strings/is_pangram.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -wiki: https://en.wikipedia.org/wiki/Pangram -""" - - -def is_pangram( - input_str: str = "The quick brown fox jumps over the lazy dog", -) -> bool: - """ - A Pangram String contains all the alphabets at least once. - >>> is_pangram("The quick brown fox jumps over the lazy dog") - True - >>> is_pangram("Waltz, bad nymph, for quick jigs vex.") - True - >>> is_pangram("Jived fox nymph grabs quick waltz.") - True - >>> is_pangram("My name is Unknown") - False - >>> is_pangram("The quick brown fox jumps over the la_y dog") - False - >>> is_pangram() - True - """ - # Declare frequency as a set to have unique occurrences of letters - frequency = set() - - # Replace all the whitespace in our sentence - input_str = input_str.replace(" ", "") - for alpha in input_str: - if "a" <= alpha.lower() <= "z": - frequency.add(alpha.lower()) - return len(frequency) == 26 - - -def is_pangram_faster( - input_str: str = "The quick brown fox jumps over the lazy dog", -) -> bool: - """ - >>> is_pangram_faster("The quick brown fox jumps over the lazy dog") - True - >>> is_pangram_faster("Waltz, bad nymph, for quick jigs vex.") - True - >>> is_pangram_faster("Jived fox nymph grabs quick waltz.") - True - >>> is_pangram_faster("The quick brown fox jumps over the la_y dog") - False - >>> is_pangram_faster() - True - """ - flag = [False] * 26 - for char in input_str: - if char.islower(): - flag[ord(char) - 97] = True - elif char.isupper(): - flag[ord(char) - 65] = True - return all(flag) - - -def is_pangram_fastest( - input_str: str = "The quick brown fox jumps over the lazy dog", -) -> bool: - """ - >>> is_pangram_fastest("The quick brown fox jumps over the lazy dog") - True - >>> is_pangram_fastest("Waltz, bad nymph, for quick jigs vex.") - True - >>> is_pangram_fastest("Jived fox nymph grabs quick waltz.") - True - >>> is_pangram_fastest("The quick brown fox jumps over the la_y dog") - False - >>> is_pangram_fastest() - True - """ - return len({char for char in input_str.lower() if char.isalpha()}) == 26 - - -def benchmark() -> None: - """ - Benchmark code comparing different version. - """ - from timeit import timeit - - setup = "from __main__ import is_pangram, is_pangram_faster, is_pangram_fastest" - print(timeit("is_pangram()", setup=setup)) - print(timeit("is_pangram_faster()", setup=setup)) - print(timeit("is_pangram_fastest()", setup=setup)) - # 5.348480500048026, 2.6477354579837993, 1.8470395830227062 - # 5.036091582966037, 2.644472333951853, 1.8869528750656173 - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - benchmark() diff --git a/strings/is_polish_national_id.py b/strings/is_polish_national_id.py deleted file mode 100644 index 8b463a24532a..000000000000 --- a/strings/is_polish_national_id.py +++ /dev/null @@ -1,92 +0,0 @@ -def is_polish_national_id(input_str: str) -> bool: - """ - Verification of the correctness of the PESEL number. - www-gov-pl.translate.goog/web/gov/czym-jest-numer-pesel?_x_tr_sl=auto&_x_tr_tl=en - - PESEL can start with 0, that's why we take str as input, - but convert it to int for some calculations. - - - >>> is_polish_national_id(123) - Traceback (most recent call last): - ... - ValueError: Expected str as input, found <class 'int'> - - >>> is_polish_national_id("abc") - Traceback (most recent call last): - ... - ValueError: Expected number as input - - >>> is_polish_national_id("02070803628") # correct PESEL - True - - >>> is_polish_national_id("02150803629") # wrong month - False - - >>> is_polish_national_id("02075503622") # wrong day - False - - >>> is_polish_national_id("-99012212349") # wrong range - False - - >>> is_polish_national_id("990122123499999") # wrong range - False - - >>> is_polish_national_id("02070803621") # wrong checksum - False - """ - - # check for invalid input type - if not isinstance(input_str, str): - msg = f"Expected str as input, found {type(input_str)}" - raise ValueError(msg) - - # check if input can be converted to int - try: - input_int = int(input_str) - except ValueError: - msg = "Expected number as input" - raise ValueError(msg) - - # check number range - if not 10100000 <= input_int <= 99923199999: - return False - - # check month correctness - month = int(input_str[2:4]) - - if ( - month not in range(1, 13) # year 1900-1999 - and month not in range(21, 33) # 2000-2099 - and month not in range(41, 53) # 2100-2199 - and month not in range(61, 73) # 2200-2299 - and month not in range(81, 93) # 1800-1899 - ): - return False - - # check day correctness - day = int(input_str[4:6]) - - if day not in range(1, 32): - return False - - # check the checksum - multipliers = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3] - subtotal = 0 - - digits_to_check = str(input_str)[:-1] # cut off the checksum - - for index, digit in enumerate(digits_to_check): - # Multiply corresponding digits and multipliers. - # In case of a double-digit result, add only the last digit. - subtotal += (int(digit) * multipliers[index]) % 10 - - checksum = 10 - subtotal % 10 - - return checksum == input_int % 10 - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/is_spain_national_id.py b/strings/is_spain_national_id.py deleted file mode 100644 index 60d06e123aae..000000000000 --- a/strings/is_spain_national_id.py +++ /dev/null @@ -1,73 +0,0 @@ -NUMBERS_PLUS_LETTER = "Input must be a string of 8 numbers plus letter" -LOOKUP_LETTERS = "TRWAGMYFPDXBNJZSQVHLCKE" - - -def is_spain_national_id(spanish_id: str) -> bool: - """ - Spain National Id is a string composed by 8 numbers plus a letter - The letter in fact is not part of the ID, it acts as a validator, - checking you didn't do a mistake when entering it on a system or - are giving a fake one. - - https://en.wikipedia.org/wiki/Documento_Nacional_de_Identidad_(Spain)#Number - - >>> is_spain_national_id("12345678Z") - True - >>> is_spain_national_id("12345678z") # It is case-insensitive - True - >>> is_spain_national_id("12345678x") - False - >>> is_spain_national_id("12345678I") - False - >>> is_spain_national_id("12345678-Z") # Some systems add a dash - True - >>> is_spain_national_id("12345678") - Traceback (most recent call last): - ... - ValueError: Input must be a string of 8 numbers plus letter - >>> is_spain_national_id("123456709") - Traceback (most recent call last): - ... - ValueError: Input must be a string of 8 numbers plus letter - >>> is_spain_national_id("1234567--Z") - Traceback (most recent call last): - ... - ValueError: Input must be a string of 8 numbers plus letter - >>> is_spain_national_id("1234Z") - Traceback (most recent call last): - ... - ValueError: Input must be a string of 8 numbers plus letter - >>> is_spain_national_id("1234ZzZZ") - Traceback (most recent call last): - ... - ValueError: Input must be a string of 8 numbers plus letter - >>> is_spain_national_id(12345678) - Traceback (most recent call last): - ... - TypeError: Expected string as input, found int - """ - - if not isinstance(spanish_id, str): - msg = f"Expected string as input, found {type(spanish_id).__name__}" - raise TypeError(msg) - - spanish_id_clean = spanish_id.replace("-", "").upper() - if len(spanish_id_clean) != 9: - raise ValueError(NUMBERS_PLUS_LETTER) - - try: - number = int(spanish_id_clean[0:8]) - letter = spanish_id_clean[8] - except ValueError as ex: - raise ValueError(NUMBERS_PLUS_LETTER) from ex - - if letter.isdigit(): - raise ValueError(NUMBERS_PLUS_LETTER) - - return letter == LOOKUP_LETTERS[number % 23] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/is_srilankan_phone_number.py b/strings/is_srilankan_phone_number.py deleted file mode 100644 index 6456f85e1a3d..000000000000 --- a/strings/is_srilankan_phone_number.py +++ /dev/null @@ -1,33 +0,0 @@ -import re - - -def is_sri_lankan_phone_number(phone: str) -> bool: - """ - Determine whether the string is a valid sri lankan mobile phone number or not - References: https://aye.sh/blog/sri-lankan-phone-number-regex - - >>> is_sri_lankan_phone_number("+94773283048") - True - >>> is_sri_lankan_phone_number("+9477-3283048") - True - >>> is_sri_lankan_phone_number("0718382399") - True - >>> is_sri_lankan_phone_number("0094702343221") - True - >>> is_sri_lankan_phone_number("075 3201568") - True - >>> is_sri_lankan_phone_number("07779209245") - False - >>> is_sri_lankan_phone_number("0957651234") - False - """ - - pattern = re.compile(r"^(?:0|94|\+94|0{2}94)7(0|1|2|4|5|6|7|8)(-| |)\d{7}$") - - return bool(re.search(pattern, phone)) - - -if __name__ == "__main__": - phone = "0094702343221" - - print(is_sri_lankan_phone_number(phone)) diff --git a/strings/is_valid_email_address.py b/strings/is_valid_email_address.py deleted file mode 100644 index c3bf7df7349d..000000000000 --- a/strings/is_valid_email_address.py +++ /dev/null @@ -1,115 +0,0 @@ -""" -Implements an is valid email address algorithm - -@ https://en.wikipedia.org/wiki/Email_address -""" - -import string - -email_tests: tuple[tuple[str, bool], ...] = ( - ("simple@example.com", True), - ("very.common@example.com", True), - ("disposable.style.email.with+symbol@example.com", True), - ("other-email-with-hyphen@and.subdomains.example.com", True), - ("fully-qualified-domain@example.com", True), - ("user.name+tag+sorting@example.com", True), - ("x@example.com", True), - ("example-indeed@strange-example.com", True), - ("test/test@test.com", True), - ( - "123456789012345678901234567890123456789012345678901234567890123@example.com", - True, - ), - ("admin@mailserver1", True), - ("example@s.example", True), - ("Abc.example.com", False), - ("A@b@c@example.com", False), - ("abc@example..com", False), - ("a(c)d,e:f;g<h>i[j\\k]l@example.com", False), - ( - "12345678901234567890123456789012345678901234567890123456789012345@example.com", - False, - ), - ("i.like.underscores@but_its_not_allowed_in_this_part", False), - ("", False), -) - -# The maximum octets (one character as a standard unicode character is one byte) -# that the local part and the domain part can have -MAX_LOCAL_PART_OCTETS = 64 -MAX_DOMAIN_OCTETS = 255 - - -def is_valid_email_address(email: str) -> bool: - """ - Returns True if the passed email address is valid. - - The local part of the email precedes the singular @ symbol and - is associated with a display-name. For example, "john.smith" - The domain is stricter than the local part and follows the @ symbol. - - Global email checks: - 1. There can only be one @ symbol in the email address. Technically if the - @ symbol is quoted in the local-part, then it is valid, however this - implementation ignores "" for now. - (See https://en.wikipedia.org/wiki/Email_address#:~:text=If%20quoted,) - 2. The local-part and the domain are limited to a certain number of octets. With - unicode storing a single character in one byte, each octet is equivalent to - a character. Hence, we can just check the length of the string. - Checks for the local-part: - 3. The local-part may contain: upper and lowercase latin letters, digits 0 to 9, - and printable characters (!#$%&'*+-/=?^_`{|}~) - 4. The local-part may also contain a "." in any place that is not the first or - last character, and may not have more than one "." consecutively. - - Checks for the domain: - 5. The domain may contain: upper and lowercase latin letters and digits 0 to 9 - 6. Hyphen "-", provided that it is not the first or last character - 7. The domain may also contain a "." in any place that is not the first or - last character, and may not have more than one "." consecutively. - - >>> for email, valid in email_tests: - ... assert is_valid_email_address(email) == valid - """ - - # (1.) Make sure that there is only one @ symbol in the email address - if email.count("@") != 1: - return False - - local_part, domain = email.split("@") - # (2.) Check octet length of the local part and domain - if len(local_part) > MAX_LOCAL_PART_OCTETS or len(domain) > MAX_DOMAIN_OCTETS: - return False - - # (3.) Validate the characters in the local-part - if any( - char not in string.ascii_letters + string.digits + ".(!#$%&'*+-/=?^_`{|}~)" - for char in local_part - ): - return False - - # (4.) Validate the placement of "." characters in the local-part - if local_part.startswith(".") or local_part.endswith(".") or ".." in local_part: - return False - - # (5.) Validate the characters in the domain - if any(char not in string.ascii_letters + string.digits + ".-" for char in domain): - return False - - # (6.) Validate the placement of "-" characters - if domain.startswith("-") or domain.endswith("."): - return False - - # (7.) Validate the placement of "." characters - return not (domain.startswith(".") or domain.endswith(".") or ".." in domain) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - for email, valid in email_tests: - is_valid = is_valid_email_address(email) - assert is_valid == valid, f"{email} is {is_valid}" - print(f"Email address {email} is {'not ' if not is_valid else ''}valid") diff --git a/strings/jaro_winkler.py b/strings/jaro_winkler.py deleted file mode 100644 index cae2068fabc1..000000000000 --- a/strings/jaro_winkler.py +++ /dev/null @@ -1,78 +0,0 @@ -"""https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance""" - - -def jaro_winkler(str1: str, str2: str) -> float: - """ - Jaro-Winkler distance is a string metric measuring an edit distance between two - sequences. - Output value is between 0.0 and 1.0. - - >>> jaro_winkler("martha", "marhta") - 0.9611111111111111 - >>> jaro_winkler("CRATE", "TRACE") - 0.7333333333333334 - >>> jaro_winkler("test", "dbdbdbdb") - 0.0 - >>> jaro_winkler("test", "test") - 1.0 - >>> jaro_winkler("hello world", "HeLLo W0rlD") - 0.6363636363636364 - >>> jaro_winkler("test", "") - 0.0 - >>> jaro_winkler("hello", "world") - 0.4666666666666666 - >>> jaro_winkler("hell**o", "*world") - 0.4365079365079365 - """ - - def get_matched_characters(_str1: str, _str2: str) -> str: - matched = [] - limit = min(len(_str1), len(_str2)) // 2 - for i, char in enumerate(_str1): - left = int(max(0, i - limit)) - right = int(min(i + limit + 1, len(_str2))) - if char in _str2[left:right]: - matched.append(char) - _str2 = f"{_str2[0:_str2.index(char)]} {_str2[_str2.index(char) + 1:]}" - - return "".join(matched) - - # matching characters - matching_1 = get_matched_characters(str1, str2) - matching_2 = get_matched_characters(str2, str1) - match_count = len(matching_1) - - # transposition - transpositions = ( - len([(c1, c2) for c1, c2 in zip(matching_1, matching_2) if c1 != c2]) // 2 - ) - - if not match_count: - jaro = 0.0 - else: - jaro = ( - 1 - / 3 - * ( - match_count / len(str1) - + match_count / len(str2) - + (match_count - transpositions) / match_count - ) - ) - - # common prefix up to 4 characters - prefix_len = 0 - for c1, c2 in zip(str1[:4], str2[:4]): - if c1 == c2: - prefix_len += 1 - else: - break - - return jaro + 0.1 * prefix_len * (1 - jaro) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(jaro_winkler("hello", "world")) diff --git a/strings/join.py b/strings/join.py deleted file mode 100644 index 5c02f65a20ce..000000000000 --- a/strings/join.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Program to join a list of strings with a separator -""" - - -def join(separator: str, separated: list[str]) -> str: - """ - Joins a list of strings using a separator - and returns the result. - - :param separator: Separator to be used - for joining the strings. - :param separated: List of strings to be joined. - - :return: Joined string with the specified separator. - - Examples: - - >>> join("", ["a", "b", "c", "d"]) - 'abcd' - >>> join("#", ["a", "b", "c", "d"]) - 'a#b#c#d' - >>> join("#", "a") - 'a' - >>> join(" ", ["You", "are", "amazing!"]) - 'You are amazing!' - - This example should raise an - exception for non-string elements: - >>> join("#", ["a", "b", "c", 1]) - Traceback (most recent call last): - ... - Exception: join() accepts only strings - - Additional test case with a different separator: - >>> join("-", ["apple", "banana", "cherry"]) - 'apple-banana-cherry' - """ - - joined = "" - for word_or_phrase in separated: - if not isinstance(word_or_phrase, str): - raise Exception("join() accepts only strings") - joined += word_or_phrase + separator - - # Remove the trailing separator - # by stripping it from the result - return joined.strip(separator) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/knuth_morris_pratt.py b/strings/knuth_morris_pratt.py deleted file mode 100644 index 5120779c571e..000000000000 --- a/strings/knuth_morris_pratt.py +++ /dev/null @@ -1,101 +0,0 @@ -from __future__ import annotations - - -def knuth_morris_pratt(text: str, pattern: str) -> int: - """ - The Knuth-Morris-Pratt Algorithm for finding a pattern within a piece of text - with complexity O(n + m) - - 1) Preprocess pattern to identify any suffixes that are identical to prefixes - - This tells us where to continue from if we get a mismatch between a character - in our pattern and the text. - - 2) Step through the text one character at a time and compare it to a character in - the pattern updating our location within the pattern if necessary - - >>> kmp = "knuth_morris_pratt" - >>> all( - ... knuth_morris_pratt(kmp, s) == kmp.find(s) - ... for s in ("kn", "h_m", "rr", "tt", "not there") - ... ) - True - """ - - # 1) Construct the failure array - failure = get_failure_array(pattern) - - # 2) Step through text searching for pattern - i, j = 0, 0 # index into text, pattern - while i < len(text): - if pattern[j] == text[i]: - if j == (len(pattern) - 1): - return i - j - j += 1 - - # if this is a prefix in our pattern - # just go back far enough to continue - elif j > 0: - j = failure[j - 1] - continue - i += 1 - return -1 - - -def get_failure_array(pattern: str) -> list[int]: - """ - Calculates the new index we should go to if we fail a comparison - :param pattern: - :return: - """ - failure = [0] - i = 0 - j = 1 - while j < len(pattern): - if pattern[i] == pattern[j]: - i += 1 - elif i > 0: - i = failure[i - 1] - continue - j += 1 - failure.append(i) - return failure - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - # Test 1) - pattern = "abc1abc12" - text1 = "alskfjaldsabc1abc1abc12k23adsfabcabc" - text2 = "alskfjaldsk23adsfabcabc" - assert knuth_morris_pratt(text1, pattern) - assert knuth_morris_pratt(text2, pattern) - - # Test 2) - pattern = "ABABX" - text = "ABABZABABYABABX" - assert knuth_morris_pratt(text, pattern) - - # Test 3) - pattern = "AAAB" - text = "ABAAAAAB" - assert knuth_morris_pratt(text, pattern) - - # Test 4) - pattern = "abcdabcy" - text = "abcxabcdabxabcdabcdabcy" - assert knuth_morris_pratt(text, pattern) - - # Test 5) -> Doctests - kmp = "knuth_morris_pratt" - assert all( - knuth_morris_pratt(kmp, s) == kmp.find(s) - for s in ("kn", "h_m", "rr", "tt", "not there") - ) - - # Test 6) - pattern = "aabaabaaa" - assert get_failure_array(pattern) == [0, 1, 0, 1, 2, 3, 4, 5, 2] diff --git a/strings/levenshtein_distance.py b/strings/levenshtein_distance.py deleted file mode 100644 index 3af6608723a5..000000000000 --- a/strings/levenshtein_distance.py +++ /dev/null @@ -1,125 +0,0 @@ -from collections.abc import Callable - - -def levenshtein_distance(first_word: str, second_word: str) -> int: - """ - Implementation of the Levenshtein distance in Python. - :param first_word: the first word to measure the difference. - :param second_word: the second word to measure the difference. - :return: the levenshtein distance between the two words. - Examples: - >>> levenshtein_distance("planet", "planetary") - 3 - >>> levenshtein_distance("", "test") - 4 - >>> levenshtein_distance("book", "back") - 2 - >>> levenshtein_distance("book", "book") - 0 - >>> levenshtein_distance("test", "") - 4 - >>> levenshtein_distance("", "") - 0 - >>> levenshtein_distance("orchestration", "container") - 10 - """ - # The longer word should come first - if len(first_word) < len(second_word): - return levenshtein_distance(second_word, first_word) - - if len(second_word) == 0: - return len(first_word) - - previous_row = list(range(len(second_word) + 1)) - - for i, c1 in enumerate(first_word): - current_row = [i + 1] - - for j, c2 in enumerate(second_word): - # Calculate insertions, deletions, and substitutions - insertions = previous_row[j + 1] + 1 - deletions = current_row[j] + 1 - substitutions = previous_row[j] + (c1 != c2) - - # Get the minimum to append to the current row - current_row.append(min(insertions, deletions, substitutions)) - - # Store the previous row - previous_row = current_row - - # Returns the last element (distance) - return previous_row[-1] - - -def levenshtein_distance_optimized(first_word: str, second_word: str) -> int: - """ - Compute the Levenshtein distance between two words (strings). - The function is optimized for efficiency by modifying rows in place. - :param first_word: the first word to measure the difference. - :param second_word: the second word to measure the difference. - :return: the Levenshtein distance between the two words. - Examples: - >>> levenshtein_distance_optimized("planet", "planetary") - 3 - >>> levenshtein_distance_optimized("", "test") - 4 - >>> levenshtein_distance_optimized("book", "back") - 2 - >>> levenshtein_distance_optimized("book", "book") - 0 - >>> levenshtein_distance_optimized("test", "") - 4 - >>> levenshtein_distance_optimized("", "") - 0 - >>> levenshtein_distance_optimized("orchestration", "container") - 10 - """ - if len(first_word) < len(second_word): - return levenshtein_distance_optimized(second_word, first_word) - - if len(second_word) == 0: - return len(first_word) - - previous_row = list(range(len(second_word) + 1)) - - for i, c1 in enumerate(first_word): - current_row = [i + 1] + [0] * len(second_word) - - for j, c2 in enumerate(second_word): - insertions = previous_row[j + 1] + 1 - deletions = current_row[j] + 1 - substitutions = previous_row[j] + (c1 != c2) - current_row[j + 1] = min(insertions, deletions, substitutions) - - previous_row = current_row - - return previous_row[-1] - - -def benchmark_levenshtein_distance(func: Callable) -> None: - """ - Benchmark the Levenshtein distance function. - :param str: The name of the function being benchmarked. - :param func: The function to be benchmarked. - """ - from timeit import timeit - - stmt = f"{func.__name__}('sitting', 'kitten')" - setup = f"from __main__ import {func.__name__}" - number = 25_000 - result = timeit(stmt=stmt, setup=setup, number=number) - print(f"{func.__name__:<30} finished {number:,} runs in {result:.5f} seconds") - - -if __name__ == "__main__": - # Get user input for words - first_word = input("Enter the first word for Levenshtein distance:\n").strip() - second_word = input("Enter the second word for Levenshtein distance:\n").strip() - - # Calculate and print Levenshtein distances - print(f"{levenshtein_distance(first_word, second_word) = }") - print(f"{levenshtein_distance_optimized(first_word, second_word) = }") - - # Benchmark the Levenshtein distance functions - benchmark_levenshtein_distance(levenshtein_distance) - benchmark_levenshtein_distance(levenshtein_distance_optimized) diff --git a/strings/lower.py b/strings/lower.py deleted file mode 100644 index 49256b0169ef..000000000000 --- a/strings/lower.py +++ /dev/null @@ -1,26 +0,0 @@ -def lower(word: str) -> str: - """ - Will convert the entire string to lowercase letters - - >>> lower("wow") - 'wow' - >>> lower("HellZo") - 'hellzo' - >>> lower("WHAT") - 'what' - >>> lower("wh[]32") - 'wh[]32' - >>> lower("whAT") - 'what' - """ - - # Converting to ASCII value, obtaining the integer representation - # and checking to see if the character is a capital letter. - # If it is a capital letter, it is shifted by 32, making it a lowercase letter. - return "".join(chr(ord(char) + 32) if "A" <= char <= "Z" else char for char in word) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/manacher.py b/strings/manacher.py deleted file mode 100644 index af1b10cf81fb..000000000000 --- a/strings/manacher.py +++ /dev/null @@ -1,109 +0,0 @@ -def palindromic_string(input_string: str) -> str: - """ - >>> palindromic_string('abbbaba') - 'abbba' - >>> palindromic_string('ababa') - 'ababa' - - Manacher's algorithm which finds Longest palindromic Substring in linear time. - - 1. first this convert input_string("xyx") into new_string("x|y|x") where odd - positions are actual input characters. - 2. for each character in new_string it find corresponding length and - store the length and left,right to store previously calculated info. - (please look the explanation for details) - - 3. return corresponding output_string by removing all "|" - """ - max_length = 0 - - # if input_string is "aba" than new_input_string become "a|b|a" - new_input_string = "" - output_string = "" - - # append each character + "|" in new_string for range(0, length-1) - for i in input_string[: len(input_string) - 1]: - new_input_string += i + "|" - # append last character - new_input_string += input_string[-1] - - # we will store the starting and ending of previous furthest ending palindromic - # substring - left, right = 0, 0 - - # length[i] shows the length of palindromic substring with center i - length = [1 for i in range(len(new_input_string))] - - # for each character in new_string find corresponding palindromic string - start = 0 - for j in range(len(new_input_string)): - k = 1 if j > right else min(length[left + right - j] // 2, right - j + 1) - while ( - j - k >= 0 - and j + k < len(new_input_string) - and new_input_string[k + j] == new_input_string[j - k] - ): - k += 1 - - length[j] = 2 * k - 1 - - # does this string is ending after the previously explored end (that is right) ? - # if yes the update the new right to the last index of this - if j + k - 1 > right: - left = j - k + 1 - right = j + k - 1 - - # update max_length and start position - if max_length < length[j]: - max_length = length[j] - start = j - - # create that string - s = new_input_string[start - max_length // 2 : start + max_length // 2 + 1] - for i in s: - if i != "|": - output_string += i - - return output_string - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - -""" -...a0...a1...a2.....a3......a4...a5...a6.... - -consider the string for which we are calculating the longest palindromic substring is -shown above where ... are some characters in between and right now we are calculating -the length of palindromic substring with center at a5 with following conditions : -i) we have stored the length of palindromic substring which has center at a3 - (starts at left ends at right) and it is the furthest ending till now, - and it has ending after a6 -ii) a2 and a4 are equally distant from a3 so char(a2) == char(a4) -iii) a0 and a6 are equally distant from a3 so char(a0) == char(a6) -iv) a1 is corresponding equal character of a5 in palindrome with center a3 (remember - that in below derivation of a4==a6) - -now for a5 we will calculate the length of palindromic substring with center as a5 but -can we use previously calculated information in some way? -Yes, look the above string we know that a5 is inside the palindrome with center a3 and -previously we have calculated that -a0==a2 (palindrome of center a1) -a2==a4 (palindrome of center a3) -a0==a6 (palindrome of center a3) -so a4==a6 - -so we can say that palindrome at center a5 is at least as long as palindrome at center -a1 but this only holds if a0 and a6 are inside the limits of palindrome centered at a3 -so finally .. - -len_of_palindrome__at(a5) = min(len_of_palindrome_at(a1), right-a5) -where a3 lies from left to right and we have to keep updating that - -and if the a5 lies outside of left,right boundary we calculate length of palindrome with -bruteforce and update left,right. - -it gives the linear time complexity just like z-function -""" diff --git a/strings/min_cost_string_conversion.py b/strings/min_cost_string_conversion.py deleted file mode 100644 index a5a3c4a4e3f8..000000000000 --- a/strings/min_cost_string_conversion.py +++ /dev/null @@ -1,162 +0,0 @@ -""" -Algorithm for calculating the most cost-efficient sequence for converting one string -into another. -The only allowed operations are ---- Cost to copy a character is copy_cost ---- Cost to replace a character is replace_cost ---- Cost to delete a character is delete_cost ---- Cost to insert a character is insert_cost -""" - - -def compute_transform_tables( - source_string: str, - destination_string: str, - copy_cost: int, - replace_cost: int, - delete_cost: int, - insert_cost: int, -) -> tuple[list[list[int]], list[list[str]]]: - """ - Finds the most cost efficient sequence - for converting one string into another. - - >>> costs, operations = compute_transform_tables("cat", "cut", 1, 2, 3, 3) - >>> costs[0][:4] - [0, 3, 6, 9] - >>> costs[2][:4] - [6, 4, 3, 6] - >>> operations[0][:4] - ['0', 'Ic', 'Iu', 'It'] - >>> operations[3][:4] - ['Dt', 'Dt', 'Rtu', 'Ct'] - - >>> compute_transform_tables("", "", 1, 2, 3, 3) - ([[0]], [['0']]) - """ - source_seq = list(source_string) - destination_seq = list(destination_string) - len_source_seq = len(source_seq) - len_destination_seq = len(destination_seq) - costs = [ - [0 for _ in range(len_destination_seq + 1)] for _ in range(len_source_seq + 1) - ] - ops = [ - ["0" for _ in range(len_destination_seq + 1)] for _ in range(len_source_seq + 1) - ] - - for i in range(1, len_source_seq + 1): - costs[i][0] = i * delete_cost - ops[i][0] = f"D{source_seq[i - 1]}" - - for i in range(1, len_destination_seq + 1): - costs[0][i] = i * insert_cost - ops[0][i] = f"I{destination_seq[i - 1]}" - - for i in range(1, len_source_seq + 1): - for j in range(1, len_destination_seq + 1): - if source_seq[i - 1] == destination_seq[j - 1]: - costs[i][j] = costs[i - 1][j - 1] + copy_cost - ops[i][j] = f"C{source_seq[i - 1]}" - else: - costs[i][j] = costs[i - 1][j - 1] + replace_cost - ops[i][j] = f"R{source_seq[i - 1]}" + str(destination_seq[j - 1]) - - if costs[i - 1][j] + delete_cost < costs[i][j]: - costs[i][j] = costs[i - 1][j] + delete_cost - ops[i][j] = f"D{source_seq[i - 1]}" - - if costs[i][j - 1] + insert_cost < costs[i][j]: - costs[i][j] = costs[i][j - 1] + insert_cost - ops[i][j] = f"I{destination_seq[j - 1]}" - - return costs, ops - - -def assemble_transformation(ops: list[list[str]], i: int, j: int) -> list[str]: - """ - Assembles the transformations based on the ops table. - - >>> ops = [['0', 'Ic', 'Iu', 'It'], - ... ['Dc', 'Cc', 'Iu', 'It'], - ... ['Da', 'Da', 'Rau', 'Rat'], - ... ['Dt', 'Dt', 'Rtu', 'Ct']] - >>> x = len(ops) - 1 - >>> y = len(ops[0]) - 1 - >>> assemble_transformation(ops, x, y) - ['Cc', 'Rau', 'Ct'] - - >>> ops1 = [['0']] - >>> x1 = len(ops1) - 1 - >>> y1 = len(ops1[0]) - 1 - >>> assemble_transformation(ops1, x1, y1) - [] - """ - if i == 0 and j == 0: - return [] - elif ops[i][j][0] in {"C", "R"}: - seq = assemble_transformation(ops, i - 1, j - 1) - seq.append(ops[i][j]) - return seq - elif ops[i][j][0] == "D": - seq = assemble_transformation(ops, i - 1, j) - seq.append(ops[i][j]) - return seq - else: - seq = assemble_transformation(ops, i, j - 1) - seq.append(ops[i][j]) - return seq - - -if __name__ == "__main__": - _, operations = compute_transform_tables("Python", "Algorithms", -1, 1, 2, 2) - - m = len(operations) - n = len(operations[0]) - sequence = assemble_transformation(operations, m - 1, n - 1) - - string = list("Python") - i = 0 - cost = 0 - - with open("min_cost.txt", "w") as file: - for op in sequence: - print("".join(string)) - - if op[0] == "C": - file.write("%-16s" % "Copy %c" % op[1]) - file.write("\t\t\t" + "".join(string)) - file.write("\r\n") - - cost -= 1 - elif op[0] == "R": - string[i] = op[2] - - file.write("%-16s" % ("Replace %c" % op[1] + " with " + str(op[2]))) - file.write("\t\t" + "".join(string)) - file.write("\r\n") - - cost += 1 - elif op[0] == "D": - string.pop(i) - - file.write("%-16s" % "Delete %c" % op[1]) - file.write("\t\t\t" + "".join(string)) - file.write("\r\n") - - cost += 2 - else: - string.insert(i, op[1]) - - file.write("%-16s" % "Insert %c" % op[1]) - file.write("\t\t\t" + "".join(string)) - file.write("\r\n") - - cost += 2 - - i += 1 - - print("".join(string)) - print("Cost: ", cost) - - file.write("\r\nMinimum cost: " + str(cost)) diff --git a/strings/naive_string_search.py b/strings/naive_string_search.py deleted file mode 100644 index 31599008720c..000000000000 --- a/strings/naive_string_search.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -https://en.wikipedia.org/wiki/String-searching_algorithm#Na%C3%AFve_string_search -this algorithm tries to find the pattern from every position of -the mainString if pattern is found from position i it add it to -the answer and does the same for position i+1 -Complexity : O(n*m) - n=length of main string - m=length of pattern string -""" - - -def naive_pattern_search(s: str, pattern: str) -> list: - """ - >>> naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC") - [4, 10, 18] - >>> naive_pattern_search("ABC", "ABAAABCDBBABCDDEBCABC") - [] - >>> naive_pattern_search("", "ABC") - [] - >>> naive_pattern_search("TEST", "TEST") - [0] - >>> naive_pattern_search("ABCDEGFTEST", "TEST") - [7] - """ - pat_len = len(pattern) - position = [] - for i in range(len(s) - pat_len + 1): - match_found = True - for j in range(pat_len): - if s[i + j] != pattern[j]: - match_found = False - break - if match_found: - position.append(i) - return position - - -if __name__ == "__main__": - assert naive_pattern_search("ABCDEFG", "DE") == [3] - print(naive_pattern_search("ABAAABCDBBABCDDEBCABC", "ABC")) diff --git a/strings/ngram.py b/strings/ngram.py deleted file mode 100644 index 0b13e34a4732..000000000000 --- a/strings/ngram.py +++ /dev/null @@ -1,23 +0,0 @@ -""" -https://en.wikipedia.org/wiki/N-gram -""" - - -def create_ngram(sentence: str, ngram_size: int) -> list[str]: - """ - Create ngrams from a sentence - - >>> create_ngram("I am a sentence", 2) - ['I ', ' a', 'am', 'm ', ' a', 'a ', ' s', 'se', 'en', 'nt', 'te', 'en', 'nc', 'ce'] - >>> create_ngram("I am an NLPer", 2) - ['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er'] - >>> create_ngram("This is short", 50) - [] - """ - return [sentence[i : i + ngram_size] for i in range(len(sentence) - ngram_size + 1)] - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/palindrome.py b/strings/palindrome.py deleted file mode 100644 index bfdb3ddcf396..000000000000 --- a/strings/palindrome.py +++ /dev/null @@ -1,104 +0,0 @@ -# Algorithms to determine if a string is palindrome - -from timeit import timeit - -test_data = { - "MALAYALAM": True, - "String": False, - "rotor": True, - "level": True, - "A": True, - "BB": True, - "ABC": False, - "amanaplanacanalpanama": True, # "a man a plan a canal panama" -} -# Ensure our test data is valid -assert all((key == key[::-1]) is value for key, value in test_data.items()) - - -def is_palindrome(s: str) -> bool: - """ - Return True if s is a palindrome otherwise return False. - - >>> all(is_palindrome(key) is value for key, value in test_data.items()) - True - """ - - start_i = 0 - end_i = len(s) - 1 - while start_i < end_i: - if s[start_i] == s[end_i]: - start_i += 1 - end_i -= 1 - else: - return False - return True - - -def is_palindrome_traversal(s: str) -> bool: - """ - Return True if s is a palindrome otherwise return False. - - >>> all(is_palindrome_traversal(key) is value for key, value in test_data.items()) - True - """ - end = len(s) // 2 - n = len(s) - - # We need to traverse till half of the length of string - # as we can get access of the i'th last element from - # i'th index. - # eg: [0,1,2,3,4,5] => 4th index can be accessed - # with the help of 1st index (i==n-i-1) - # where n is length of string - return all(s[i] == s[n - i - 1] for i in range(end)) - - -def is_palindrome_recursive(s: str) -> bool: - """ - Return True if s is a palindrome otherwise return False. - - >>> all(is_palindrome_recursive(key) is value for key, value in test_data.items()) - True - """ - if len(s) <= 2: - return True - if s[0] == s[len(s) - 1]: - return is_palindrome_recursive(s[1:-1]) - else: - return False - - -def is_palindrome_slice(s: str) -> bool: - """ - Return True if s is a palindrome otherwise return False. - - >>> all(is_palindrome_slice(key) is value for key, value in test_data.items()) - True - """ - return s == s[::-1] - - -def benchmark_function(name: str) -> None: - stmt = f"all({name}(key) is value for key, value in test_data.items())" - setup = f"from __main__ import test_data, {name}" - number = 500000 - result = timeit(stmt=stmt, setup=setup, number=number) - print(f"{name:<35} finished {number:,} runs in {result:.5f} seconds") - - -if __name__ == "__main__": - for key, value in test_data.items(): - assert is_palindrome(key) is is_palindrome_recursive(key) - assert is_palindrome(key) is is_palindrome_slice(key) - print(f"{key:21} {value}") - print("a man a plan a canal panama") - - # finished 500,000 runs in 0.46793 seconds - benchmark_function("is_palindrome_slice") - # finished 500,000 runs in 0.85234 seconds - benchmark_function("is_palindrome") - # finished 500,000 runs in 1.32028 seconds - benchmark_function("is_palindrome_recursive") - # finished 500,000 runs in 2.08679 seconds - benchmark_function("is_palindrome_traversal") diff --git a/strings/pig_latin.py b/strings/pig_latin.py deleted file mode 100644 index 457dbb5a6cf6..000000000000 --- a/strings/pig_latin.py +++ /dev/null @@ -1,44 +0,0 @@ -def pig_latin(word: str) -> str: - """Compute the piglatin of a given string. - - https://en.wikipedia.org/wiki/Pig_Latin - - Usage examples: - >>> pig_latin("pig") - 'igpay' - >>> pig_latin("latin") - 'atinlay' - >>> pig_latin("banana") - 'ananabay' - >>> pig_latin("friends") - 'iendsfray' - >>> pig_latin("smile") - 'ilesmay' - >>> pig_latin("string") - 'ingstray' - >>> pig_latin("eat") - 'eatway' - >>> pig_latin("omelet") - 'omeletway' - >>> pig_latin("are") - 'areway' - >>> pig_latin(" ") - '' - >>> pig_latin(None) - '' - """ - if not (word or "").strip(): - return "" - word = word.lower() - if word[0] in "aeiou": - return f"{word}way" - for i, char in enumerate(word): # noqa: B007 - if char in "aeiou": - break - return f"{word[i:]}{word[:i]}ay" - - -if __name__ == "__main__": - print(f"{pig_latin('friends') = }") - word = input("Enter a word: ") - print(f"{pig_latin(word) = }") diff --git a/strings/prefix_function.py b/strings/prefix_function.py deleted file mode 100644 index 04987deef469..000000000000 --- a/strings/prefix_function.py +++ /dev/null @@ -1,64 +0,0 @@ -""" -https://cp-algorithms.com/string/prefix-function.html - -Prefix function Knuth-Morris-Pratt algorithm - -Different algorithm than Knuth-Morris-Pratt pattern finding - -E.x. Finding longest prefix which is also suffix - -Time Complexity: O(n) - where n is the length of the string -""" - - -def prefix_function(input_string: str) -> list: - """ - For the given string this function computes value for each index(i), - which represents the longest coincidence of prefix and suffix - for given substring (input_str[0...i]) - - For the value of the first element the algorithm always returns 0 - - >>> prefix_function("aabcdaabc") - [0, 1, 0, 0, 0, 1, 2, 3, 4] - >>> prefix_function("asdasdad") - [0, 0, 0, 1, 2, 3, 4, 0] - """ - - # list for the result values - prefix_result = [0] * len(input_string) - - for i in range(1, len(input_string)): - # use last results for better performance - dynamic programming - j = prefix_result[i - 1] - while j > 0 and input_string[i] != input_string[j]: - j = prefix_result[j - 1] - - if input_string[i] == input_string[j]: - j += 1 - prefix_result[i] = j - - return prefix_result - - -def longest_prefix(input_str: str) -> int: - """ - Prefix-function use case - Finding longest prefix which is suffix as well - - >>> longest_prefix("aabcdaabc") - 4 - >>> longest_prefix("asdasdad") - 4 - >>> longest_prefix("abcab") - 2 - """ - - # just returning maximum value of the array gives us answer - return max(prefix_function(input_str)) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/rabin_karp.py b/strings/rabin_karp.py deleted file mode 100644 index 9c0d0fe5c739..000000000000 --- a/strings/rabin_karp.py +++ /dev/null @@ -1,91 +0,0 @@ -# Numbers of alphabet which we call base -alphabet_size = 256 -# Modulus to hash a string -modulus = 1000003 - - -def rabin_karp(pattern: str, text: str) -> bool: - """ - The Rabin-Karp Algorithm for finding a pattern within a piece of text - with complexity O(nm), most efficient when it is used with multiple patterns - as it is able to check if any of a set of patterns match a section of text in o(1) - given the precomputed hashes. - - This will be the simple version which only assumes one pattern is being searched - for but it's not hard to modify - - 1) Calculate pattern hash - - 2) Step through the text one character at a time passing a window with the same - length as the pattern - calculating the hash of the text within the window compare it with the hash - of the pattern. Only testing equality if the hashes match - """ - p_len = len(pattern) - t_len = len(text) - if p_len > t_len: - return False - - p_hash = 0 - text_hash = 0 - modulus_power = 1 - - # Calculating the hash of pattern and substring of text - for i in range(p_len): - p_hash = (ord(pattern[i]) + p_hash * alphabet_size) % modulus - text_hash = (ord(text[i]) + text_hash * alphabet_size) % modulus - if i == p_len - 1: - continue - modulus_power = (modulus_power * alphabet_size) % modulus - - for i in range(t_len - p_len + 1): - if text_hash == p_hash and text[i : i + p_len] == pattern: - return True - if i == t_len - p_len: - continue - # Calculate the https://en.wikipedia.org/wiki/Rolling_hash - text_hash = ( - (text_hash - ord(text[i]) * modulus_power) * alphabet_size - + ord(text[i + p_len]) - ) % modulus - return False - - -def test_rabin_karp() -> None: - """ - >>> test_rabin_karp() - Success. - """ - # Test 1) - pattern = "abc1abc12" - text1 = "alskfjaldsabc1abc1abc12k23adsfabcabc" - text2 = "alskfjaldsk23adsfabcabc" - assert rabin_karp(pattern, text1) - assert not rabin_karp(pattern, text2) - - # Test 2) - pattern = "ABABX" - text = "ABABZABABYABABX" - assert rabin_karp(pattern, text) - - # Test 3) - pattern = "AAAB" - text = "ABAAAAAB" - assert rabin_karp(pattern, text) - - # Test 4) - pattern = "abcdabcy" - text = "abcxabcdabxabcdabcdabcy" - assert rabin_karp(pattern, text) - - # Test 5) - pattern = "Lü" - text = "Lüsai" - assert rabin_karp(pattern, text) - pattern = "Lue" - assert not rabin_karp(pattern, text) - print("Success.") - - -if __name__ == "__main__": - test_rabin_karp() diff --git a/strings/remove_duplicate.py b/strings/remove_duplicate.py deleted file mode 100644 index 5ab0e9962752..000000000000 --- a/strings/remove_duplicate.py +++ /dev/null @@ -1,15 +0,0 @@ -def remove_duplicates(sentence: str) -> str: - """ - Remove duplicates from sentence - >>> remove_duplicates("Python is great and Java is also great") - 'Java Python also and great is' - >>> remove_duplicates("Python is great and Java is also great") - 'Java Python also and great is' - """ - return " ".join(sorted(set(sentence.split()))) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/reverse_letters.py b/strings/reverse_letters.py deleted file mode 100644 index 4f73f816b382..000000000000 --- a/strings/reverse_letters.py +++ /dev/null @@ -1,24 +0,0 @@ -def reverse_letters(sentence: str, length: int = 0) -> str: - """ - Reverse all words that are longer than the given length of characters in a sentence. - If unspecified, length is taken as 0 - - >>> reverse_letters("Hey wollef sroirraw", 3) - 'Hey fellow warriors' - >>> reverse_letters("nohtyP is nohtyP", 2) - 'Python is Python' - >>> reverse_letters("1 12 123 1234 54321 654321", 0) - '1 21 321 4321 12345 123456' - >>> reverse_letters("racecar") - 'racecar' - """ - return " ".join( - "".join(word[::-1]) if len(word) > length else word for word in sentence.split() - ) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - print(reverse_letters("Hey wollef sroirraw")) diff --git a/strings/reverse_words.py b/strings/reverse_words.py deleted file mode 100644 index 504c1c2089dd..000000000000 --- a/strings/reverse_words.py +++ /dev/null @@ -1,15 +0,0 @@ -def reverse_words(input_str: str) -> str: - """ - Reverses words in a given string - >>> reverse_words("I love Python") - 'Python love I' - >>> reverse_words("I Love Python") - 'Python Love I' - """ - return " ".join(input_str.split()[::-1]) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/snake_case_to_camel_pascal_case.py b/strings/snake_case_to_camel_pascal_case.py deleted file mode 100644 index 8219337a63b0..000000000000 --- a/strings/snake_case_to_camel_pascal_case.py +++ /dev/null @@ -1,52 +0,0 @@ -def snake_to_camel_case(input_str: str, use_pascal: bool = False) -> str: - """ - Transforms a snake_case given string to camelCase (or PascalCase if indicated) - (defaults to not use Pascal) - - >>> snake_to_camel_case("some_random_string") - 'someRandomString' - - >>> snake_to_camel_case("some_random_string", use_pascal=True) - 'SomeRandomString' - - >>> snake_to_camel_case("some_random_string_with_numbers_123") - 'someRandomStringWithNumbers123' - - >>> snake_to_camel_case("some_random_string_with_numbers_123", use_pascal=True) - 'SomeRandomStringWithNumbers123' - - >>> snake_to_camel_case(123) - Traceback (most recent call last): - ... - ValueError: Expected string as input, found <class 'int'> - - >>> snake_to_camel_case("some_string", use_pascal="True") - Traceback (most recent call last): - ... - ValueError: Expected boolean as use_pascal parameter, found <class 'str'> - """ - - if not isinstance(input_str, str): - msg = f"Expected string as input, found {type(input_str)}" - raise ValueError(msg) - if not isinstance(use_pascal, bool): - msg = f"Expected boolean as use_pascal parameter, found {type(use_pascal)}" - raise ValueError(msg) - - words = input_str.split("_") - - start_index = 0 if use_pascal else 1 - - words_to_capitalize = words[start_index:] - - capitalized_words = [word[0].upper() + word[1:] for word in words_to_capitalize] - - initial_word = "" if use_pascal else words[0] - - return "".join([initial_word, *capitalized_words]) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/split.py b/strings/split.py deleted file mode 100644 index b62b86d2401f..000000000000 --- a/strings/split.py +++ /dev/null @@ -1,34 +0,0 @@ -def split(string: str, separator: str = " ") -> list: - """ - Will split the string up into all the values separated by the separator - (defaults to spaces) - - >>> split("apple#banana#cherry#orange",separator='#') - ['apple', 'banana', 'cherry', 'orange'] - - >>> split("Hello there") - ['Hello', 'there'] - - >>> split("11/22/63",separator = '/') - ['11', '22', '63'] - - >>> split("12:43:39",separator = ":") - ['12', '43', '39'] - """ - - split_words = [] - - last_index = 0 - for index, char in enumerate(string): - if char == separator: - split_words.append(string[last_index:index]) - last_index = index + 1 - elif index + 1 == len(string): - split_words.append(string[last_index : index + 1]) - return split_words - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/string_switch_case.py b/strings/string_switch_case.py deleted file mode 100644 index c16d9fa552f9..000000000000 --- a/strings/string_switch_case.py +++ /dev/null @@ -1,122 +0,0 @@ -import re - -""" -general info: -https://en.wikipedia.org/wiki/Naming_convention_(programming)#Python_and_Ruby - -pascal case [ an upper Camel Case ]: https://en.wikipedia.org/wiki/Camel_case - -camel case: https://en.wikipedia.org/wiki/Camel_case - -kebab case [ can be found in general info ]: -https://en.wikipedia.org/wiki/Naming_convention_(programming)#Python_and_Ruby - -snake case: https://en.wikipedia.org/wiki/Snake_case -""" - - -# assistant functions -def split_input(str_: str) -> list: - """ - >>> split_input("one two 31235three4four") - [['one', 'two', '31235three4four']] - """ - return [char.split() for char in re.split(r"[^ a-z A-Z 0-9 \s]", str_)] - - -def to_simple_case(str_: str) -> str: - """ - >>> to_simple_case("one two 31235three4four") - 'OneTwo31235three4four' - >>> to_simple_case("This should be combined") - 'ThisShouldBeCombined' - >>> to_simple_case("The first letters are capitalized, then string is merged") - 'TheFirstLettersAreCapitalizedThenStringIsMerged' - >>> to_simple_case("special characters :, ', %, ^, $, are ignored") - 'SpecialCharactersAreIgnored' - """ - string_split = split_input(str_) - return "".join( - ["".join([char.capitalize() for char in sub_str]) for sub_str in string_split] - ) - - -def to_complex_case(text: str, upper: bool, separator: str) -> str: - """ - Returns the string concatenated with the delimiter we provide. - - Parameters: - @text: The string on which we want to perform operation - @upper: Boolean value to determine whether we want capitalized result or not - @separator: The delimiter with which we want to concatenate words - - Examples: - >>> to_complex_case("one two 31235three4four", True, "_") - 'ONE_TWO_31235THREE4FOUR' - >>> to_complex_case("one two 31235three4four", False, "-") - 'one-two-31235three4four' - """ - try: - string_split = split_input(text) - if upper: - res_str = "".join( - [ - separator.join([char.upper() for char in sub_str]) - for sub_str in string_split - ] - ) - else: - res_str = "".join( - [ - separator.join([char.lower() for char in sub_str]) - for sub_str in string_split - ] - ) - return res_str - except IndexError: - return "not valid string" - - -# main content -def to_pascal_case(text: str) -> str: - """ - >>> to_pascal_case("one two 31235three4four") - 'OneTwo31235three4four' - """ - return to_simple_case(text) - - -def to_camel_case(text: str) -> str: - """ - >>> to_camel_case("one two 31235three4four") - 'oneTwo31235three4four' - """ - try: - res_str = to_simple_case(text) - return res_str[0].lower() + res_str[1:] - except IndexError: - return "not valid string" - - -def to_snake_case(text: str, upper: bool) -> str: - """ - >>> to_snake_case("one two 31235three4four", True) - 'ONE_TWO_31235THREE4FOUR' - >>> to_snake_case("one two 31235three4four", False) - 'one_two_31235three4four' - """ - return to_complex_case(text, upper, "_") - - -def to_kebab_case(text: str, upper: bool) -> str: - """ - >>> to_kebab_case("one two 31235three4four", True) - 'ONE-TWO-31235THREE4FOUR' - >>> to_kebab_case("one two 31235three4four", False) - 'one-two-31235three4four' - """ - return to_complex_case(text, upper, "-") - - -if __name__ == "__main__": - __import__("doctest").testmod() diff --git a/strings/strip.py b/strings/strip.py deleted file mode 100644 index d4f901f0c7ea..000000000000 --- a/strings/strip.py +++ /dev/null @@ -1,33 +0,0 @@ -def strip(user_string: str, characters: str = " \t\n\r") -> str: - """ - Remove leading and trailing characters (whitespace by default) from a string. - - Args: - user_string (str): The input string to be stripped. - characters (str, optional): Optional characters to be removed - (default is whitespace). - - Returns: - str: The stripped string. - - Examples: - >>> strip(" hello ") - 'hello' - >>> strip("...world...", ".") - 'world' - >>> strip("123hello123", "123") - 'hello' - >>> strip("") - '' - """ - - start = 0 - end = len(user_string) - - while start < end and user_string[start] in characters: - start += 1 - - while end > start and user_string[end - 1] in characters: - end -= 1 - - return user_string[start:end] diff --git a/strings/text_justification.py b/strings/text_justification.py deleted file mode 100644 index e025edcfe13f..000000000000 --- a/strings/text_justification.py +++ /dev/null @@ -1,91 +0,0 @@ -def text_justification(word: str, max_width: int) -> list: - """ - Will format the string such that each line has exactly - (max_width) characters and is fully (left and right) justified, - and return the list of justified text. - - example 1: - string = "This is an example of text justification." - max_width = 16 - - output = ['This is an', - 'example of text', - 'justification. '] - - >>> text_justification("This is an example of text justification.", 16) - ['This is an', 'example of text', 'justification. '] - - example 2: - string = "Two roads diverged in a yellow wood" - max_width = 16 - output = ['Two roads', - 'diverged in a', - 'yellow wood '] - - >>> text_justification("Two roads diverged in a yellow wood", 16) - ['Two roads', 'diverged in a', 'yellow wood '] - - Time complexity: O(m*n) - Space complexity: O(m*n) - """ - - # Converting string into list of strings split by a space - words = word.split() - - def justify(line: list, width: int, max_width: int) -> str: - overall_spaces_count = max_width - width - words_count = len(line) - if len(line) == 1: - # if there is only word in line - # just insert overall_spaces_count for the remainder of line - return line[0] + " " * overall_spaces_count - else: - spaces_to_insert_between_words = words_count - 1 - # num_spaces_between_words_list[i] : tells you to insert - # num_spaces_between_words_list[i] spaces - # after word on line[i] - num_spaces_between_words_list = spaces_to_insert_between_words * [ - overall_spaces_count // spaces_to_insert_between_words - ] - spaces_count_in_locations = ( - overall_spaces_count % spaces_to_insert_between_words - ) - # distribute spaces via round robin to the left words - for i in range(spaces_count_in_locations): - num_spaces_between_words_list[i] += 1 - aligned_words_list = [] - for i in range(spaces_to_insert_between_words): - # add the word - aligned_words_list.append(line[i]) - # add the spaces to insert - aligned_words_list.append(num_spaces_between_words_list[i] * " ") - # just add the last word to the sentence - aligned_words_list.append(line[-1]) - # join the aligned words list to form a justified line - return "".join(aligned_words_list) - - answer = [] - line: list[str] = [] - width = 0 - for inner_word in words: - if width + len(inner_word) + len(line) <= max_width: - # keep adding words until we can fill out max_width - # width = sum of length of all words (without overall_spaces_count) - # len(inner_word) = length of current inner_word - # len(line) = number of overall_spaces_count to insert between words - line.append(inner_word) - width += len(inner_word) - else: - # justify the line and add it to result - answer.append(justify(line, width, max_width)) - # reset new line and new width - line, width = [inner_word], len(inner_word) - remaining_spaces = max_width - width - len(line) - answer.append(" ".join(line) + (remaining_spaces + 1) * " ") - return answer - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/title.py b/strings/title.py deleted file mode 100644 index 1ec2df548e2d..000000000000 --- a/strings/title.py +++ /dev/null @@ -1,57 +0,0 @@ -def to_title_case(word: str) -> str: - """ - Converts a string to capitalized case, preserving the input as is - - >>> to_title_case("Aakash") - 'Aakash' - - >>> to_title_case("aakash") - 'Aakash' - - >>> to_title_case("AAKASH") - 'Aakash' - - >>> to_title_case("aAkAsH") - 'Aakash' - """ - - """ - Convert the first character to uppercase if it's lowercase - """ - if "a" <= word[0] <= "z": - word = chr(ord(word[0]) - 32) + word[1:] - - """ - Convert the remaining characters to lowercase if they are uppercase - """ - for i in range(1, len(word)): - if "A" <= word[i] <= "Z": - word = word[:i] + chr(ord(word[i]) + 32) + word[i + 1 :] - - return word - - -def sentence_to_title_case(input_str: str) -> str: - """ - Converts a string to title case, preserving the input as is - - >>> sentence_to_title_case("Aakash Giri") - 'Aakash Giri' - - >>> sentence_to_title_case("aakash giri") - 'Aakash Giri' - - >>> sentence_to_title_case("AAKASH GIRI") - 'Aakash Giri' - - >>> sentence_to_title_case("aAkAsH gIrI") - 'Aakash Giri' - """ - - return " ".join(to_title_case(word) for word in input_str.split()) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/top_k_frequent_words.py b/strings/top_k_frequent_words.py deleted file mode 100644 index 40fa7fc85cd1..000000000000 --- a/strings/top_k_frequent_words.py +++ /dev/null @@ -1,100 +0,0 @@ -""" -Finds the top K most frequent words from the provided word list. - -This implementation aims to show how to solve the problem using the Heap class -already present in this repository. -Computing order statistics is, in fact, a typical usage of heaps. - -This is mostly shown for educational purposes, since the problem can be solved -in a few lines using collections.Counter from the Python standard library: - -from collections import Counter -def top_k_frequent_words(words, k_value): - return [x[0] for x in Counter(words).most_common(k_value)] -""" - -from collections import Counter -from functools import total_ordering - -from data_structures.heap.heap import Heap - - -@total_ordering -class WordCount: - def __init__(self, word: str, count: int) -> None: - self.word = word - self.count = count - - def __eq__(self, other: object) -> bool: - """ - >>> WordCount('a', 1).__eq__(WordCount('b', 1)) - True - >>> WordCount('a', 1).__eq__(WordCount('a', 1)) - True - >>> WordCount('a', 1).__eq__(WordCount('a', 2)) - False - >>> WordCount('a', 1).__eq__(WordCount('b', 2)) - False - >>> WordCount('a', 1).__eq__(1) - NotImplemented - """ - if not isinstance(other, WordCount): - return NotImplemented - return self.count == other.count - - def __lt__(self, other: object) -> bool: - """ - >>> WordCount('a', 1).__lt__(WordCount('b', 1)) - False - >>> WordCount('a', 1).__lt__(WordCount('a', 1)) - False - >>> WordCount('a', 1).__lt__(WordCount('a', 2)) - True - >>> WordCount('a', 1).__lt__(WordCount('b', 2)) - True - >>> WordCount('a', 2).__lt__(WordCount('a', 1)) - False - >>> WordCount('a', 2).__lt__(WordCount('b', 1)) - False - >>> WordCount('a', 1).__lt__(1) - NotImplemented - """ - if not isinstance(other, WordCount): - return NotImplemented - return self.count < other.count - - -def top_k_frequent_words(words: list[str], k_value: int) -> list[str]: - """ - Returns the `k_value` most frequently occurring words, - in non-increasing order of occurrence. - In this context, a word is defined as an element in the provided list. - - In case `k_value` is greater than the number of distinct words, a value of k equal - to the number of distinct words will be considered, instead. - - >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 3) - ['c', 'a', 'b'] - >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 2) - ['c', 'a'] - >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 1) - ['c'] - >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 0) - [] - >>> top_k_frequent_words([], 1) - [] - >>> top_k_frequent_words(['a', 'a'], 2) - ['a'] - """ - heap: Heap[WordCount] = Heap() - count_by_word = Counter(words) - heap.build_max_heap( - [WordCount(word, count) for word, count in count_by_word.items()] - ) - return [heap.extract_max().word for _ in range(min(k_value, len(count_by_word)))] - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/strings/upper.py b/strings/upper.py deleted file mode 100644 index 0f68a27b99c6..000000000000 --- a/strings/upper.py +++ /dev/null @@ -1,22 +0,0 @@ -def upper(word: str) -> str: - """ - Convert an entire string to ASCII uppercase letters by looking for lowercase ASCII - letters and subtracting 32 from their integer representation to get the uppercase - letter. - - >>> upper("wow") - 'WOW' - >>> upper("Hello") - 'HELLO' - >>> upper("WHAT") - 'WHAT' - >>> upper("wh[]32") - 'WH[]32' - """ - return "".join(chr(ord(char) - 32) if "a" <= char <= "z" else char for char in word) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() diff --git a/strings/wave.py b/strings/wave.py deleted file mode 100644 index 69d534432420..000000000000 --- a/strings/wave.py +++ /dev/null @@ -1,20 +0,0 @@ -def wave(txt: str) -> list: - """ - Returns a so called 'wave' of a given string - >>> wave('cat') - ['Cat', 'cAt', 'caT'] - >>> wave('one') - ['One', 'oNe', 'onE'] - >>> wave('book') - ['Book', 'bOok', 'boOk', 'booK'] - """ - - return [ - txt[:a] + txt[a].upper() + txt[a + 1 :] - for a in range(len(txt)) - if txt[a].isalpha() - ] - - -if __name__ == "__main__": - __import__("doctest").testmod() diff --git a/strings/wildcard_pattern_matching.py b/strings/wildcard_pattern_matching.py deleted file mode 100644 index 83c8d834cca9..000000000000 --- a/strings/wildcard_pattern_matching.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -Implementation of regular expression matching with support for '.' and '*'. -'.' Matches any single character. -'*' Matches zero or more of the preceding element. -The matching should cover the entire input string (not partial). - -""" - - -def match_pattern(input_string: str, pattern: str) -> bool: - """ - uses bottom-up dynamic programming solution for matching the input - string with a given pattern. - - Runtime: O(len(input_string)*len(pattern)) - - Arguments - -------- - input_string: str, any string which should be compared with the pattern - pattern: str, the string that represents a pattern and may contain - '.' for single character matches and '*' for zero or more of preceding character - matches - - Note - ---- - the pattern cannot start with a '*', - because there should be at least one character before * - - Returns - ------- - A Boolean denoting whether the given string follows the pattern - - Examples - ------- - >>> match_pattern("aab", "c*a*b") - True - >>> match_pattern("dabc", "*abc") - False - >>> match_pattern("aaa", "aa") - False - >>> match_pattern("aaa", "a.a") - True - >>> match_pattern("aaab", "aa*") - False - >>> match_pattern("aaab", ".*") - True - >>> match_pattern("a", "bbbb") - False - >>> match_pattern("", "bbbb") - False - >>> match_pattern("a", "") - False - >>> match_pattern("", "") - True - """ - - len_string = len(input_string) + 1 - len_pattern = len(pattern) + 1 - - # dp is a 2d matrix where dp[i][j] denotes whether prefix string of - # length i of input_string matches with prefix string of length j of - # given pattern. - # "dp" stands for dynamic programming. - dp = [[0 for i in range(len_pattern)] for j in range(len_string)] - - # since string of zero length match pattern of zero length - dp[0][0] = 1 - - # since pattern of zero length will never match with string of non-zero length - for i in range(1, len_string): - dp[i][0] = 0 - - # since string of zero length will match with pattern where there - # is at least one * alternatively - for j in range(1, len_pattern): - dp[0][j] = dp[0][j - 2] if pattern[j - 1] == "*" else 0 - - # now using bottom-up approach to find for all remaining lengths - for i in range(1, len_string): - for j in range(1, len_pattern): - if input_string[i - 1] == pattern[j - 1] or pattern[j - 1] == ".": - dp[i][j] = dp[i - 1][j - 1] - - elif pattern[j - 1] == "*": - if dp[i][j - 2] == 1: - dp[i][j] = 1 - elif pattern[j - 2] in (input_string[i - 1], "."): - dp[i][j] = dp[i - 1][j] - else: - dp[i][j] = 0 - else: - dp[i][j] = 0 - - return bool(dp[-1][-1]) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - # inputing the strings - # input_string = input("input a string :") - # pattern = input("input a pattern :") - - input_string = "aab" - pattern = "c*a*b" - - # using function to check whether given string matches the given pattern - if match_pattern(input_string, pattern): - print(f"{input_string} matches the given pattern {pattern}") - else: - print(f"{input_string} does not match with the given pattern {pattern}") diff --git a/strings/word_occurrence.py b/strings/word_occurrence.py deleted file mode 100644 index 5a18ebf771e4..000000000000 --- a/strings/word_occurrence.py +++ /dev/null @@ -1,26 +0,0 @@ -# Created by sarathkaul on 17/11/19 -# Modified by Arkadip Bhattacharya(@darkmatter18) on 20/04/2020 -from collections import defaultdict - - -def word_occurrence(sentence: str) -> dict: - """ - >>> from collections import Counter - >>> SENTENCE = "a b A b c b d b d e f e g e h e i e j e 0" - >>> occurence_dict = word_occurrence(SENTENCE) - >>> all(occurence_dict[word] == count for word, count - ... in Counter(SENTENCE.split()).items()) - True - >>> dict(word_occurrence("Two spaces")) - {'Two': 1, 'spaces': 1} - """ - occurrence: defaultdict[str, int] = defaultdict(int) - # Creating a dictionary containing count of each word - for word in sentence.split(): - occurrence[word] += 1 - return occurrence - - -if __name__ == "__main__": - for word, count in word_occurrence("INPUT STRING").items(): - print(f"{word}: {count}") diff --git a/strings/word_patterns.py b/strings/word_patterns.py deleted file mode 100644 index ed603e9fefeb..000000000000 --- a/strings/word_patterns.py +++ /dev/null @@ -1,65 +0,0 @@ -def get_word_pattern(word: str) -> str: - """ - Returns numerical pattern of character appearances in given word - >>> get_word_pattern("") - '' - >>> get_word_pattern(" ") - '0' - >>> get_word_pattern("pattern") - '0.1.2.2.3.4.5' - >>> get_word_pattern("word pattern") - '0.1.2.3.4.5.6.7.7.8.2.9' - >>> get_word_pattern("get word pattern") - '0.1.2.3.4.5.6.7.3.8.9.2.2.1.6.10' - >>> get_word_pattern() - Traceback (most recent call last): - ... - TypeError: get_word_pattern() missing 1 required positional argument: 'word' - >>> get_word_pattern(1) - Traceback (most recent call last): - ... - AttributeError: 'int' object has no attribute 'upper' - >>> get_word_pattern(1.1) - Traceback (most recent call last): - ... - AttributeError: 'float' object has no attribute 'upper' - >>> get_word_pattern([]) - Traceback (most recent call last): - ... - AttributeError: 'list' object has no attribute 'upper' - """ - word = word.upper() - next_num = 0 - letter_nums = {} - word_pattern = [] - - for letter in word: - if letter not in letter_nums: - letter_nums[letter] = str(next_num) - next_num += 1 - word_pattern.append(letter_nums[letter]) - return ".".join(word_pattern) - - -if __name__ == "__main__": - import pprint - import time - - start_time = time.time() - with open("dictionary.txt") as in_file: - word_list = in_file.read().splitlines() - - all_patterns: dict = {} - for word in word_list: - pattern = get_word_pattern(word) - if pattern in all_patterns: - all_patterns[pattern].append(word) - else: - all_patterns[pattern] = [word] - - with open("word_patterns.txt", "w") as out_file: - out_file.write(pprint.pformat(all_patterns)) - - total_time = round(time.time() - start_time, 2) - print(f"Done! {len(all_patterns):,} word patterns found in {total_time} seconds.") - # Done! 9,581 word patterns found in 0.58 seconds. diff --git a/strings/words.txt b/strings/words.txt deleted file mode 100644 index 4be557ed63be..000000000000 --- a/strings/words.txt +++ /dev/null @@ -1,235886 +0,0 @@ -A -a -aa -aal -aalii -aam -Aani -aardvark -aardwolf -Aaron -Aaronic -Aaronical -Aaronite -Aaronitic -Aaru -Ab -aba -Ababdeh -Ababua -abac -abaca -abacate -abacay -abacinate -abacination -abaciscus -abacist -aback -abactinal -abactinally -abaction -abactor -abaculus -abacus -Abadite -abaff -abaft -abaisance -abaiser -abaissed -abalienate -abalienation -abalone -Abama -abampere -abandon -abandonable -abandoned -abandonedly -abandonee -abandoner -abandonment -Abanic -Abantes -abaptiston -Abarambo -Abaris -abarthrosis -abarticular -abarticulation -abas -abase -abased -abasedly -abasedness -abasement -abaser -Abasgi -abash -abashed -abashedly -abashedness -abashless -abashlessly -abashment -abasia -abasic -abask -Abassin -abastardize -abatable -abate -abatement -abater -abatis -abatised -abaton -abator -abattoir -Abatua -abature -abave -abaxial -abaxile -abaze -abb -Abba -abbacomes -abbacy -Abbadide -abbas -abbasi -abbassi -Abbasside -abbatial -abbatical -abbess -abbey -abbeystede -Abbie -abbot -abbotcy -abbotnullius -abbotship -abbreviate -abbreviately -abbreviation -abbreviator -abbreviatory -abbreviature -Abby -abcoulomb -abdal -abdat -Abderian -Abderite -abdest -abdicable -abdicant -abdicate -abdication -abdicative -abdicator -Abdiel -abditive -abditory -abdomen -abdominal -Abdominales -abdominalian -abdominally -abdominoanterior -abdominocardiac -abdominocentesis -abdominocystic -abdominogenital -abdominohysterectomy -abdominohysterotomy -abdominoposterior -abdominoscope -abdominoscopy -abdominothoracic -abdominous -abdominovaginal -abdominovesical -abduce -abducens -abducent -abduct -abduction -abductor -Abe -abeam -abear -abearance -abecedarian -abecedarium -abecedary -abed -abeigh -Abel -abele -Abelia -Abelian -Abelicea -Abelite -abelite -Abelmoschus -abelmosk -Abelonian -abeltree -Abencerrages -abenteric -abepithymia -Aberdeen -aberdevine -Aberdonian -Aberia -aberrance -aberrancy -aberrant -aberrate -aberration -aberrational -aberrator -aberrometer -aberroscope -aberuncator -abet -abetment -abettal -abettor -abevacuation -abey -abeyance -abeyancy -abeyant -abfarad -abhenry -abhiseka -abhominable -abhor -abhorrence -abhorrency -abhorrent -abhorrently -abhorrer -abhorrible -abhorring -Abhorson -abidal -abidance -abide -abider -abidi -abiding -abidingly -abidingness -Abie -Abies -abietate -abietene -abietic -abietin -Abietineae -abietineous -abietinic -Abiezer -Abigail -abigail -abigailship -abigeat -abigeus -abilao -ability -abilla -abilo -abintestate -abiogenesis -abiogenesist -abiogenetic -abiogenetical -abiogenetically -abiogenist -abiogenous -abiogeny -abiological -abiologically -abiology -abiosis -abiotic -abiotrophic -abiotrophy -Abipon -abir -abirritant -abirritate -abirritation -abirritative -abiston -Abitibi -abiuret -abject -abjectedness -abjection -abjective -abjectly -abjectness -abjoint -abjudge -abjudicate -abjudication -abjunction -abjunctive -abjuration -abjuratory -abjure -abjurement -abjurer -abkar -abkari -Abkhas -Abkhasian -ablach -ablactate -ablactation -ablare -ablastemic -ablastous -ablate -ablation -ablatitious -ablatival -ablative -ablator -ablaut -ablaze -able -ableeze -ablegate -ableness -ablepharia -ablepharon -ablepharous -Ablepharus -ablepsia -ableptical -ableptically -abler -ablest -ablewhackets -ablins -abloom -ablow -ablude -abluent -ablush -ablution -ablutionary -abluvion -ably -abmho -Abnaki -abnegate -abnegation -abnegative -abnegator -Abner -abnerval -abnet -abneural -abnormal -abnormalism -abnormalist -abnormality -abnormalize -abnormally -abnormalness -abnormity -abnormous -abnumerable -Abo -aboard -Abobra -abode -abodement -abody -abohm -aboil -abolish -abolisher -abolishment -abolition -abolitionary -abolitionism -abolitionist -abolitionize -abolla -aboma -abomasum -abomasus -abominable -abominableness -abominably -abominate -abomination -abominator -abomine -Abongo -aboon -aborad -aboral -aborally -abord -aboriginal -aboriginality -aboriginally -aboriginary -aborigine -abort -aborted -aborticide -abortient -abortifacient -abortin -abortion -abortional -abortionist -abortive -abortively -abortiveness -abortus -abouchement -abound -abounder -abounding -aboundingly -about -abouts -above -aboveboard -abovedeck -aboveground -aboveproof -abovestairs -abox -abracadabra -abrachia -abradant -abrade -abrader -Abraham -Abrahamic -Abrahamidae -Abrahamite -Abrahamitic -abraid -Abram -Abramis -abranchial -abranchialism -abranchian -Abranchiata -abranchiate -abranchious -abrasax -abrase -abrash -abrasiometer -abrasion -abrasive -abrastol -abraum -abraxas -abreact -abreaction -abreast -abrenounce -abret -abrico -abridge -abridgeable -abridged -abridgedly -abridger -abridgment -abrim -abrin -abristle -abroach -abroad -Abrocoma -abrocome -abrogable -abrogate -abrogation -abrogative -abrogator -Abroma -Abronia -abrook -abrotanum -abrotine -abrupt -abruptedly -abruption -abruptly -abruptness -Abrus -Absalom -absampere -Absaroka -absarokite -abscess -abscessed -abscession -abscessroot -abscind -abscise -abscision -absciss -abscissa -abscissae -abscisse -abscission -absconce -abscond -absconded -abscondedly -abscondence -absconder -absconsa -abscoulomb -absence -absent -absentation -absentee -absenteeism -absenteeship -absenter -absently -absentment -absentmindedly -absentness -absfarad -abshenry -Absi -absinthe -absinthial -absinthian -absinthiate -absinthic -absinthin -absinthine -absinthism -absinthismic -absinthium -absinthol -absit -absmho -absohm -absolute -absolutely -absoluteness -absolution -absolutism -absolutist -absolutistic -absolutistically -absolutive -absolutization -absolutize -absolutory -absolvable -absolvatory -absolve -absolvent -absolver -absolvitor -absolvitory -absonant -absonous -absorb -absorbability -absorbable -absorbed -absorbedly -absorbedness -absorbefacient -absorbency -absorbent -absorber -absorbing -absorbingly -absorbition -absorpt -absorptance -absorptiometer -absorptiometric -absorption -absorptive -absorptively -absorptiveness -absorptivity -absquatulate -abstain -abstainer -abstainment -abstemious -abstemiously -abstemiousness -abstention -abstentionist -abstentious -absterge -abstergent -abstersion -abstersive -abstersiveness -abstinence -abstinency -abstinent -abstinential -abstinently -abstract -abstracted -abstractedly -abstractedness -abstracter -abstraction -abstractional -abstractionism -abstractionist -abstractitious -abstractive -abstractively -abstractiveness -abstractly -abstractness -abstractor -abstrahent -abstricted -abstriction -abstruse -abstrusely -abstruseness -abstrusion -abstrusity -absume -absumption -absurd -absurdity -absurdly -absurdness -absvolt -Absyrtus -abterminal -abthain -abthainrie -abthainry -abthanage -Abu -abu -abucco -abulia -abulic -abulomania -abuna -abundance -abundancy -abundant -Abundantia -abundantly -abura -aburabozu -aburban -aburst -aburton -abusable -abuse -abusedly -abusee -abuseful -abusefully -abusefulness -abuser -abusion -abusious -abusive -abusively -abusiveness -abut -Abuta -Abutilon -abutment -abuttal -abutter -abutting -abuzz -abvolt -abwab -aby -abysm -abysmal -abysmally -abyss -abyssal -Abyssinian -abyssobenthonic -abyssolith -abyssopelagic -acacatechin -acacatechol -acacetin -Acacia -Acacian -acaciin -acacin -academe -academial -academian -Academic -academic -academical -academically -academicals -academician -academicism -academism -academist -academite -academization -academize -Academus -academy -Acadia -acadialite -Acadian -Acadie -Acaena -acajou -acaleph -Acalepha -Acalephae -acalephan -acalephoid -acalycal -acalycine -acalycinous -acalyculate -Acalypha -Acalypterae -Acalyptrata -Acalyptratae -acalyptrate -Acamar -acampsia -acana -acanaceous -acanonical -acanth -acantha -Acanthaceae -acanthaceous -acanthad -Acantharia -Acanthia -acanthial -acanthin -acanthine -acanthion -acanthite -acanthocarpous -Acanthocephala -acanthocephalan -Acanthocephali -acanthocephalous -Acanthocereus -acanthocladous -Acanthodea -acanthodean -Acanthodei -Acanthodes -acanthodian -Acanthodidae -Acanthodii -Acanthodini -acanthoid -Acantholimon -acanthological -acanthology -acantholysis -acanthoma -Acanthomeridae -acanthon -Acanthopanax -Acanthophis -acanthophorous -acanthopod -acanthopodous -acanthopomatous -acanthopore -acanthopteran -Acanthopteri -acanthopterous -acanthopterygian -Acanthopterygii -acanthosis -acanthous -Acanthuridae -Acanthurus -acanthus -acapnia -acapnial -acapsular -acapu -acapulco -acara -Acarapis -acardia -acardiac -acari -acarian -acariasis -acaricidal -acaricide -acarid -Acarida -Acaridea -acaridean -acaridomatium -acariform -Acarina -acarine -acarinosis -acarocecidium -acarodermatitis -acaroid -acarol -acarologist -acarology -acarophilous -acarophobia -acarotoxic -acarpelous -acarpous -Acarus -Acastus -acatalectic -acatalepsia -acatalepsy -acataleptic -acatallactic -acatamathesia -acataphasia -acataposis -acatastasia -acatastatic -acate -acategorical -acatery -acatharsia -acatharsy -acatholic -acaudal -acaudate -acaulescent -acauline -acaulose -acaulous -acca -accede -accedence -acceder -accelerable -accelerando -accelerant -accelerate -accelerated -acceleratedly -acceleration -accelerative -accelerator -acceleratory -accelerograph -accelerometer -accend -accendibility -accendible -accension -accensor -accent -accentless -accentor -accentuable -accentual -accentuality -accentually -accentuate -accentuation -accentuator -accentus -accept -acceptability -acceptable -acceptableness -acceptably -acceptance -acceptancy -acceptant -acceptation -accepted -acceptedly -accepter -acceptilate -acceptilation -acception -acceptive -acceptor -acceptress -accerse -accersition -accersitor -access -accessarily -accessariness -accessary -accessaryship -accessibility -accessible -accessibly -accession -accessional -accessioner -accessive -accessively -accessless -accessorial -accessorily -accessoriness -accessorius -accessory -accidence -accidency -accident -accidental -accidentalism -accidentalist -accidentality -accidentally -accidentalness -accidented -accidential -accidentiality -accidently -accidia -accidie -accinge -accipient -Accipiter -accipitral -accipitrary -Accipitres -accipitrine -accismus -accite -acclaim -acclaimable -acclaimer -acclamation -acclamator -acclamatory -acclimatable -acclimatation -acclimate -acclimatement -acclimation -acclimatizable -acclimatization -acclimatize -acclimatizer -acclimature -acclinal -acclinate -acclivitous -acclivity -acclivous -accloy -accoast -accoil -accolade -accoladed -accolated -accolent -accolle -accombination -accommodable -accommodableness -accommodate -accommodately -accommodateness -accommodating -accommodatingly -accommodation -accommodational -accommodative -accommodativeness -accommodator -accompanier -accompaniment -accompanimental -accompanist -accompany -accompanyist -accompletive -accomplice -accompliceship -accomplicity -accomplish -accomplishable -accomplished -accomplisher -accomplishment -accomplisht -accompt -accord -accordable -accordance -accordancy -accordant -accordantly -accorder -according -accordingly -accordion -accordionist -accorporate -accorporation -accost -accostable -accosted -accouche -accouchement -accoucheur -accoucheuse -account -accountability -accountable -accountableness -accountably -accountancy -accountant -accountantship -accounting -accountment -accouple -accouplement -accouter -accouterment -accoy -accredit -accreditate -accreditation -accredited -accreditment -accrementitial -accrementition -accresce -accrescence -accrescent -accretal -accrete -accretion -accretionary -accretive -accroach -accroides -accrual -accrue -accruement -accruer -accubation -accubitum -accubitus -accultural -acculturate -acculturation -acculturize -accumbency -accumbent -accumber -accumulable -accumulate -accumulation -accumulativ -accumulative -accumulatively -accumulativeness -accumulator -accuracy -accurate -accurately -accurateness -accurse -accursed -accursedly -accursedness -accusable -accusably -accusal -accusant -accusation -accusatival -accusative -accusatively -accusatorial -accusatorially -accusatory -accusatrix -accuse -accused -accuser -accusingly -accusive -accustom -accustomed -accustomedly -accustomedness -ace -aceacenaphthene -aceanthrene -aceanthrenequinone -acecaffine -aceconitic -acedia -acediamine -acediast -acedy -Aceldama -Acemetae -Acemetic -acenaphthene -acenaphthenyl -acenaphthylene -acentric -acentrous -aceologic -aceology -acephal -Acephala -acephalan -Acephali -acephalia -Acephalina -acephaline -acephalism -acephalist -Acephalite -acephalocyst -acephalous -acephalus -Acer -Aceraceae -aceraceous -Acerae -Acerata -acerate -Acerates -acerathere -Aceratherium -aceratosis -acerb -Acerbas -acerbate -acerbic -acerbity -acerdol -acerin -acerose -acerous -acerra -acertannin -acervate -acervately -acervation -acervative -acervose -acervuline -acervulus -acescence -acescency -acescent -aceship -acesodyne -Acestes -acetabular -Acetabularia -acetabuliferous -acetabuliform -acetabulous -acetabulum -acetacetic -acetal -acetaldehydase -acetaldehyde -acetaldehydrase -acetalization -acetalize -acetamide -acetamidin -acetamidine -acetamido -acetaminol -acetanilid -acetanilide -acetanion -acetaniside -acetanisidide -acetannin -acetarious -acetarsone -acetate -acetated -acetation -acetbromamide -acetenyl -acethydrazide -acetic -acetification -acetifier -acetify -acetimeter -acetimetry -acetin -acetize -acetmethylanilide -acetnaphthalide -acetoacetanilide -acetoacetate -acetoacetic -acetoamidophenol -acetoarsenite -Acetobacter -acetobenzoic -acetobromanilide -acetochloral -acetocinnamene -acetoin -acetol -acetolysis -acetolytic -acetometer -acetometrical -acetometrically -acetometry -acetomorphine -acetonaphthone -acetonate -acetonation -acetone -acetonemia -acetonemic -acetonic -acetonitrile -acetonization -acetonize -acetonuria -acetonurometer -acetonyl -acetonylacetone -acetonylidene -acetophenetide -acetophenin -acetophenine -acetophenone -acetopiperone -acetopyrin -acetosalicylic -acetose -acetosity -acetosoluble -acetothienone -acetotoluide -acetotoluidine -acetous -acetoveratrone -acetoxime -acetoxyl -acetoxyphthalide -acetphenetid -acetphenetidin -acetract -acettoluide -acetum -aceturic -acetyl -acetylacetonates -acetylacetone -acetylamine -acetylate -acetylation -acetylator -acetylbenzene -acetylbenzoate -acetylbenzoic -acetylbiuret -acetylcarbazole -acetylcellulose -acetylcholine -acetylcyanide -acetylenation -acetylene -acetylenediurein -acetylenic -acetylenyl -acetylfluoride -acetylglycine -acetylhydrazine -acetylic -acetylide -acetyliodide -acetylizable -acetylization -acetylize -acetylizer -acetylmethylcarbinol -acetylperoxide -acetylphenol -acetylphenylhydrazine -acetylrosaniline -acetylsalicylate -acetylsalol -acetyltannin -acetylthymol -acetyltropeine -acetylurea -ach -Achaean -Achaemenian -Achaemenid -Achaemenidae -Achaemenidian -Achaenodon -Achaeta -achaetous -achage -Achagua -Achakzai -achalasia -Achamoth -Achango -achar -Achariaceae -Achariaceous -achate -Achates -Achatina -Achatinella -Achatinidae -ache -acheilia -acheilous -acheiria -acheirous -acheirus -Achen -achene -achenial -achenium -achenocarp -achenodium -acher -Achernar -Acheronian -Acherontic -Acherontical -achete -Achetidae -Acheulean -acheweed -achievable -achieve -achievement -achiever -achigan -achilary -achill -Achillea -Achillean -Achilleid -achilleine -Achillize -achillobursitis -achillodynia -achime -Achimenes -Achinese -aching -achingly -achira -Achitophel -achlamydate -Achlamydeae -achlamydeous -achlorhydria -achlorophyllous -achloropsia -Achmetha -acholia -acholic -Acholoe -acholous -acholuria -acholuric -Achomawi -achondrite -achondritic -achondroplasia -achondroplastic -achor -achordal -Achordata -achordate -Achorion -Achras -achree -achroacyte -Achroanthes -achrodextrin -achrodextrinase -achroglobin -achroiocythaemia -achroiocythemia -achroite -achroma -achromacyte -achromasia -achromat -achromate -Achromatiaceae -achromatic -achromatically -achromaticity -achromatin -achromatinic -achromatism -Achromatium -achromatizable -achromatization -achromatize -achromatocyte -achromatolysis -achromatope -achromatophile -achromatopia -achromatopsia -achromatopsy -achromatosis -achromatous -achromaturia -achromia -achromic -Achromobacter -Achromobacterieae -achromoderma -achromophilous -achromotrichia -achromous -achronical -achroodextrin -achroodextrinase -achroous -achropsia -achtehalber -achtel -achtelthaler -Achuas -achy -achylia -achylous -achymia -achymous -Achyranthes -Achyrodes -acichloride -acicula -acicular -acicularly -aciculate -aciculated -aciculum -acid -Acidanthera -Acidaspis -acidemia -acider -acidic -acidiferous -acidifiable -acidifiant -acidific -acidification -acidifier -acidify -acidimeter -acidimetric -acidimetrical -acidimetrically -acidimetry -acidite -acidity -acidize -acidly -acidness -acidoid -acidology -acidometer -acidometry -acidophile -acidophilic -acidophilous -acidoproteolytic -acidosis -acidosteophyte -acidotic -acidproof -acidulate -acidulent -acidulous -aciduric -acidyl -acier -acierage -Acieral -acierate -acieration -aciform -aciliate -aciliated -Acilius -acinaceous -acinaces -acinacifolious -acinaciform -acinar -acinarious -acinary -Acineta -Acinetae -acinetan -Acinetaria -acinetarian -acinetic -acinetiform -Acinetina -acinetinan -acinic -aciniform -acinose -acinotubular -acinous -acinus -Acipenser -Acipenseres -acipenserid -Acipenseridae -acipenserine -acipenseroid -Acipenseroidei -Acis -aciurgy -acker -ackey -ackman -acknow -acknowledge -acknowledgeable -acknowledged -acknowledgedly -acknowledger -aclastic -acle -acleidian -acleistous -Aclemon -aclidian -aclinal -aclinic -acloud -aclys -Acmaea -Acmaeidae -acmatic -acme -acmesthesia -acmic -Acmispon -acmite -acne -acneform -acneiform -acnemia -Acnida -acnodal -acnode -Acocanthera -acocantherin -acock -acockbill -acocotl -Acoela -Acoelomata -acoelomate -acoelomatous -Acoelomi -acoelomous -acoelous -Acoemetae -Acoemeti -Acoemetic -acoin -acoine -Acolapissa -acold -Acolhua -Acolhuan -acologic -acology -acolous -acoluthic -acolyte -acolythate -Acoma -acoma -acomia -acomous -aconative -acondylose -acondylous -acone -aconic -aconin -aconine -aconital -aconite -aconitia -aconitic -aconitin -aconitine -Aconitum -Acontias -acontium -Acontius -aconuresis -acopic -acopon -acopyrin -acopyrine -acor -acorea -acoria -acorn -acorned -Acorus -acosmic -acosmism -acosmist -acosmistic -acotyledon -acotyledonous -acouasm -acouchi -acouchy -acoumeter -acoumetry -acouometer -acouophonia -acoupa -acousmata -acousmatic -acoustic -acoustical -acoustically -acoustician -acousticolateral -Acousticon -acoustics -acquaint -acquaintance -acquaintanceship -acquaintancy -acquaintant -acquainted -acquaintedness -acquest -acquiesce -acquiescement -acquiescence -acquiescency -acquiescent -acquiescently -acquiescer -acquiescingly -acquirability -acquirable -acquire -acquired -acquirement -acquirenda -acquirer -acquisible -acquisite -acquisited -acquisition -acquisitive -acquisitively -acquisitiveness -acquisitor -acquisitum -acquist -acquit -acquitment -acquittal -acquittance -acquitter -Acrab -acracy -acraein -Acraeinae -acraldehyde -Acrania -acranial -acraniate -acrasia -Acrasiaceae -Acrasiales -Acrasida -Acrasieae -Acraspeda -acraspedote -acratia -acraturesis -acrawl -acraze -acre -acreable -acreage -acreak -acream -acred -Acredula -acreman -acrestaff -acrid -acridan -acridian -acridic -Acrididae -Acridiidae -acridine -acridinic -acridinium -acridity -Acridium -acridly -acridness -acridone -acridonium -acridophagus -acridyl -acriflavin -acriflavine -acrimonious -acrimoniously -acrimoniousness -acrimony -acrindoline -acrinyl -acrisia -Acrisius -Acrita -acritan -acrite -acritical -acritol -Acroa -acroaesthesia -acroama -acroamatic -acroamatics -acroanesthesia -acroarthritis -acroasphyxia -acroataxia -acroatic -acrobacy -acrobat -Acrobates -acrobatholithic -acrobatic -acrobatical -acrobatically -acrobatics -acrobatism -acroblast -acrobryous -acrobystitis -Acrocarpi -acrocarpous -acrocephalia -acrocephalic -acrocephalous -acrocephaly -Acrocera -Acroceratidae -Acroceraunian -Acroceridae -Acrochordidae -Acrochordinae -acrochordon -Acroclinium -Acrocomia -acroconidium -acrocontracture -acrocoracoid -acrocyanosis -acrocyst -acrodactylum -acrodermatitis -acrodont -acrodontism -acrodrome -acrodromous -Acrodus -acrodynia -acroesthesia -acrogamous -acrogamy -acrogen -acrogenic -acrogenous -acrogenously -acrography -Acrogynae -acrogynae -acrogynous -acrolein -acrolith -acrolithan -acrolithic -acrologic -acrologically -acrologism -acrologue -acrology -acromania -acromastitis -acromegalia -acromegalic -acromegaly -acromelalgia -acrometer -acromial -acromicria -acromioclavicular -acromiocoracoid -acromiodeltoid -acromiohumeral -acromiohyoid -acromion -acromioscapular -acromiosternal -acromiothoracic -acromonogrammatic -acromphalus -Acromyodi -acromyodian -acromyodic -acromyodous -acromyotonia -acromyotonus -acron -acronarcotic -acroneurosis -acronical -acronically -acronyc -acronych -Acronycta -acronyctous -acronym -acronymic -acronymize -acronymous -acronyx -acrook -acroparalysis -acroparesthesia -acropathology -acropathy -acropetal -acropetally -acrophobia -acrophonetic -acrophonic -acrophony -acropodium -acropoleis -acropolis -acropolitan -Acropora -acrorhagus -acrorrheuma -acrosarc -acrosarcum -acroscleriasis -acroscleroderma -acroscopic -acrose -acrosome -acrosphacelus -acrospire -acrospore -acrosporous -across -acrostic -acrostical -acrostically -acrostichal -Acrosticheae -acrostichic -acrostichoid -Acrostichum -acrosticism -acrostolion -acrostolium -acrotarsial -acrotarsium -acroteleutic -acroterial -acroteric -acroterium -Acrothoracica -acrotic -acrotism -acrotomous -Acrotreta -Acrotretidae -acrotrophic -acrotrophoneurosis -Acrux -Acrydium -acryl -acrylaldehyde -acrylate -acrylic -acrylonitrile -acrylyl -act -acta -actability -actable -Actaea -Actaeaceae -Actaeon -Actaeonidae -Actiad -Actian -actification -actifier -actify -actin -actinal -actinally -actinautographic -actinautography -actine -actinenchyma -acting -Actinia -actinian -Actiniaria -actiniarian -actinic -actinically -Actinidia -Actinidiaceae -actiniferous -actiniform -actinine -actiniochrome -actiniohematin -Actiniomorpha -actinism -Actinistia -actinium -actinobacillosis -Actinobacillus -actinoblast -actinobranch -actinobranchia -actinocarp -actinocarpic -actinocarpous -actinochemistry -actinocrinid -Actinocrinidae -actinocrinite -Actinocrinus -actinocutitis -actinodermatitis -actinodielectric -actinodrome -actinodromous -actinoelectric -actinoelectrically -actinoelectricity -actinogonidiate -actinogram -actinograph -actinography -actinoid -Actinoida -Actinoidea -actinolite -actinolitic -actinologous -actinologue -actinology -actinomere -actinomeric -actinometer -actinometric -actinometrical -actinometry -actinomorphic -actinomorphous -actinomorphy -Actinomyces -Actinomycetaceae -Actinomycetales -actinomycete -actinomycetous -actinomycin -actinomycoma -actinomycosis -actinomycotic -Actinomyxidia -Actinomyxidiida -actinon -Actinonema -actinoneuritis -actinophone -actinophonic -actinophore -actinophorous -actinophryan -Actinophrys -Actinopoda -actinopraxis -actinopteran -Actinopteri -actinopterous -actinopterygian -Actinopterygii -actinopterygious -actinoscopy -actinosoma -actinosome -Actinosphaerium -actinost -actinostereoscopy -actinostomal -actinostome -actinotherapeutic -actinotherapeutics -actinotherapy -actinotoxemia -actinotrichium -actinotrocha -actinouranium -Actinozoa -actinozoal -actinozoan -actinozoon -actinula -action -actionable -actionably -actional -actionary -actioner -actionize -actionless -Actipylea -Actium -activable -activate -activation -activator -active -actively -activeness -activin -activism -activist -activital -activity -activize -actless -actomyosin -acton -actor -actorship -actress -Acts -actu -actual -actualism -actualist -actualistic -actuality -actualization -actualize -actually -actualness -actuarial -actuarially -actuarian -actuary -actuaryship -actuation -actuator -acture -acturience -actutate -acuaesthesia -Acuan -acuate -acuation -Acubens -acuclosure -acuductor -acuesthesia -acuity -aculea -Aculeata -aculeate -aculeated -aculeiform -aculeolate -aculeolus -aculeus -acumen -acuminate -acumination -acuminose -acuminous -acuminulate -acupress -acupressure -acupunctuate -acupunctuation -acupuncturation -acupuncturator -acupuncture -acurative -acushla -acutangular -acutate -acute -acutely -acutenaculum -acuteness -acutiator -acutifoliate -Acutilinguae -acutilingual -acutilobate -acutiplantar -acutish -acutograve -acutonodose -acutorsion -acyanoblepsia -acyanopsia -acyclic -acyesis -acyetic -acyl -acylamido -acylamidobenzene -acylamino -acylate -acylation -acylogen -acyloin -acyloxy -acyloxymethane -acyrological -acyrology -acystia -ad -Ada -adactyl -adactylia -adactylism -adactylous -Adad -adad -adage -adagial -adagietto -adagio -Adai -Adaize -Adam -adamant -adamantean -adamantine -adamantinoma -adamantoblast -adamantoblastoma -adamantoid -adamantoma -adamas -Adamastor -adambulacral -adamellite -Adamhood -Adamic -Adamical -Adamically -adamine -Adamite -adamite -Adamitic -Adamitical -Adamitism -Adamsia -adamsite -adance -adangle -Adansonia -Adapa -adapid -Adapis -adapt -adaptability -adaptable -adaptation -adaptational -adaptationally -adaptative -adaptedness -adapter -adaption -adaptional -adaptionism -adaptitude -adaptive -adaptively -adaptiveness -adaptometer -adaptor -adaptorial -Adar -adarme -adat -adati -adatom -adaunt -adaw -adawe -adawlut -adawn -adaxial -aday -adays -adazzle -adcraft -add -Adda -adda -addability -addable -addax -addebted -added -addedly -addend -addenda -addendum -adder -adderbolt -adderfish -adderspit -adderwort -addibility -addible -addicent -addict -addicted -addictedness -addiction -Addie -addiment -Addisonian -Addisoniana -additament -additamentary -addition -additional -additionally -additionary -additionist -addititious -additive -additively -additivity -additory -addle -addlebrain -addlebrained -addlehead -addleheaded -addleheadedly -addleheadedness -addlement -addleness -addlepate -addlepated -addlepatedness -addleplot -addlings -addlins -addorsed -address -addressee -addresser -addressful -Addressograph -addressor -addrest -Addu -adduce -adducent -adducer -adducible -adduct -adduction -adductive -adductor -Addy -Ade -ade -adead -adeem -adeep -Adela -Adelaide -Adelarthra -Adelarthrosomata -adelarthrosomatous -Adelbert -Adelea -Adeleidae -Adelges -Adelia -Adelina -Adeline -adeling -adelite -Adeliza -adelocerous -Adelochorda -adelocodonic -adelomorphic -adelomorphous -adelopod -Adelops -Adelphi -Adelphian -adelphogamy -Adelphoi -adelpholite -adelphophagy -ademonist -adempted -ademption -adenalgia -adenalgy -Adenanthera -adenase -adenasthenia -adendric -adendritic -adenectomy -adenectopia -adenectopic -adenemphractic -adenemphraxis -adenia -adeniform -adenine -adenitis -adenization -adenoacanthoma -adenoblast -adenocancroid -adenocarcinoma -adenocarcinomatous -adenocele -adenocellulitis -adenochondroma -adenochondrosarcoma -adenochrome -adenocyst -adenocystoma -adenocystomatous -adenodermia -adenodiastasis -adenodynia -adenofibroma -adenofibrosis -adenogenesis -adenogenous -adenographer -adenographic -adenographical -adenography -adenohypersthenia -adenoid -adenoidal -adenoidism -adenoliomyofibroma -adenolipoma -adenolipomatosis -adenologaditis -adenological -adenology -adenolymphocele -adenolymphoma -adenoma -adenomalacia -adenomatome -adenomatous -adenomeningeal -adenometritis -adenomycosis -adenomyofibroma -adenomyoma -adenomyxoma -adenomyxosarcoma -adenoncus -adenoneural -adenoneure -adenopathy -adenopharyngeal -adenopharyngitis -adenophlegmon -Adenophora -adenophore -adenophorous -adenophthalmia -adenophyllous -adenophyma -adenopodous -adenosarcoma -adenosclerosis -adenose -adenosine -adenosis -adenostemonous -Adenostoma -adenotome -adenotomic -adenotomy -adenotyphoid -adenotyphus -adenyl -adenylic -Adeodatus -Adeona -Adephaga -adephagan -adephagia -adephagous -adept -adeptness -adeptship -adequacy -adequate -adequately -adequateness -adequation -adequative -adermia -adermin -Adessenarian -adet -adevism -adfected -adfix -adfluxion -adglutinate -Adhafera -adhaka -adhamant -Adhara -adharma -adhere -adherence -adherency -adherent -adherently -adherer -adherescence -adherescent -adhesion -adhesional -adhesive -adhesively -adhesivemeter -adhesiveness -adhibit -adhibition -adiabatic -adiabatically -adiabolist -adiactinic -adiadochokinesis -adiagnostic -adiantiform -Adiantum -adiaphon -adiaphonon -adiaphoral -adiaphoresis -adiaphoretic -adiaphorism -adiaphorist -adiaphoristic -adiaphorite -adiaphoron -adiaphorous -adiate -adiathermal -adiathermancy -adiathermanous -adiathermic -adiathetic -adiation -Adib -Adicea -adicity -Adiel -adieu -adieux -Adigei -Adighe -Adigranth -adigranth -Adin -Adinida -adinidan -adinole -adion -adipate -adipescent -adipic -adipinic -adipocele -adipocellulose -adipocere -adipoceriform -adipocerous -adipocyte -adipofibroma -adipogenic -adipogenous -adipoid -adipolysis -adipolytic -adipoma -adipomatous -adipometer -adipopexia -adipopexis -adipose -adiposeness -adiposis -adiposity -adiposogenital -adiposuria -adipous -adipsia -adipsic -adipsous -adipsy -adipyl -Adirondack -adit -adital -aditus -adjacency -adjacent -adjacently -adjag -adject -adjection -adjectional -adjectival -adjectivally -adjective -adjectively -adjectivism -adjectivitis -adjiger -adjoin -adjoined -adjoinedly -adjoining -adjoint -adjourn -adjournal -adjournment -adjudge -adjudgeable -adjudger -adjudgment -adjudicate -adjudication -adjudicative -adjudicator -adjudicature -adjunct -adjunction -adjunctive -adjunctively -adjunctly -adjuration -adjuratory -adjure -adjurer -adjust -adjustable -adjustably -adjustage -adjustation -adjuster -adjustive -adjustment -adjutage -adjutancy -adjutant -adjutantship -adjutorious -adjutory -adjutrice -adjuvant -Adlai -adlay -adless -adlet -Adlumia -adlumidine -adlumine -adman -admarginate -admaxillary -admeasure -admeasurement -admeasurer -admedial -admedian -admensuration -admi -adminicle -adminicula -adminicular -adminiculary -adminiculate -adminiculation -adminiculum -administer -administerd -administerial -administrable -administrant -administrate -administration -administrational -administrative -administratively -administrator -administratorship -administratress -administratrices -administratrix -admirability -admirable -admirableness -admirably -admiral -admiralship -admiralty -admiration -admirative -admirator -admire -admired -admiredly -admirer -admiring -admiringly -admissibility -admissible -admissibleness -admissibly -admission -admissive -admissory -admit -admittable -admittance -admitted -admittedly -admittee -admitter -admittible -admix -admixtion -admixture -admonish -admonisher -admonishingly -admonishment -admonition -admonitioner -admonitionist -admonitive -admonitively -admonitor -admonitorial -admonitorily -admonitory -admonitrix -admortization -adnascence -adnascent -adnate -adnation -adnephrine -adnerval -adneural -adnex -adnexal -adnexed -adnexitis -adnexopexy -adnominal -adnominally -adnomination -adnoun -ado -adobe -adolesce -adolescence -adolescency -adolescent -adolescently -Adolph -Adolphus -Adonai -Adonean -Adonia -Adoniad -Adonian -Adonic -adonidin -adonin -Adoniram -Adonis -adonite -adonitol -adonize -adoperate -adoperation -adopt -adoptability -adoptable -adoptant -adoptative -adopted -adoptedly -adoptee -adopter -adoptian -adoptianism -adoptianist -adoption -adoptional -adoptionism -adoptionist -adoptious -adoptive -adoptively -adorability -adorable -adorableness -adorably -adoral -adorally -adorant -Adorantes -adoration -adoratory -adore -adorer -Adoretus -adoringly -adorn -adorner -adorningly -adornment -adosculation -adossed -adoulie -adown -Adoxa -Adoxaceae -adoxaceous -adoxography -adoxy -adoze -adpao -adpress -adpromission -adradial -adradially -adradius -Adramelech -Adrammelech -adread -adream -adreamed -adreamt -adrectal -adrenal -adrenalectomize -adrenalectomy -Adrenalin -adrenaline -adrenalize -adrenalone -adrenergic -adrenin -adrenine -adrenochrome -adrenocortical -adrenocorticotropic -adrenolysis -adrenolytic -adrenotropic -Adrian -Adriana -Adriatic -Adrienne -adrift -adrip -adroit -adroitly -adroitness -adroop -adrop -adrostral -adrowse -adrue -adry -adsbud -adscendent -adscititious -adscititiously -adscript -adscripted -adscription -adscriptitious -adscriptitius -adscriptive -adsessor -adsheart -adsignification -adsignify -adsmith -adsmithing -adsorb -adsorbable -adsorbate -adsorbent -adsorption -adsorptive -adstipulate -adstipulation -adstipulator -adterminal -adtevac -adular -adularescence -adularia -adulate -adulation -adulator -adulatory -adulatress -Adullam -Adullamite -adult -adulter -adulterant -adulterate -adulterately -adulterateness -adulteration -adulterator -adulterer -adulteress -adulterine -adulterize -adulterous -adulterously -adultery -adulthood -adulticidal -adulticide -adultness -adultoid -adumbral -adumbrant -adumbrate -adumbration -adumbrative -adumbratively -adunc -aduncate -aduncated -aduncity -aduncous -adusk -adust -adustion -adustiosis -Advaita -advance -advanceable -advanced -advancedness -advancement -advancer -advancing -advancingly -advancive -advantage -advantageous -advantageously -advantageousness -advection -advectitious -advective -advehent -advene -advenience -advenient -Advent -advential -Adventism -Adventist -adventitia -adventitious -adventitiously -adventitiousness -adventive -adventual -adventure -adventureful -adventurement -adventurer -adventureship -adventuresome -adventuresomely -adventuresomeness -adventuress -adventurish -adventurous -adventurously -adventurousness -adverb -adverbial -adverbiality -adverbialize -adverbially -adverbiation -adversant -adversaria -adversarious -adversary -adversative -adversatively -adverse -adversely -adverseness -adversifoliate -adversifolious -adversity -advert -advertence -advertency -advertent -advertently -advertisable -advertise -advertisee -advertisement -advertiser -advertising -advice -adviceful -advisability -advisable -advisableness -advisably -advisal -advisatory -advise -advised -advisedly -advisedness -advisee -advisement -adviser -advisership -advisive -advisiveness -advisor -advisorily -advisory -advocacy -advocate -advocateship -advocatess -advocation -advocator -advocatory -advocatress -advocatrice -advocatrix -advolution -advowee -advowson -ady -adynamia -adynamic -adynamy -adyta -adyton -adytum -adz -adze -adzer -adzooks -ae -Aeacides -Aeacus -Aeaean -Aechmophorus -aecial -Aecidiaceae -aecidial -aecidioform -Aecidiomycetes -aecidiospore -aecidiostage -aecidium -aeciospore -aeciostage -aecioteliospore -aeciotelium -aecium -aedeagus -Aedes -aedicula -aedile -aedileship -aedilian -aedilic -aedilitian -aedility -aedoeagus -aefald -aefaldness -aefaldy -aefauld -aegagropila -aegagropile -aegagrus -Aegean -aegerian -aegeriid -Aegeriidae -Aegialitis -aegicrania -Aegina -Aeginetan -Aeginetic -Aegipan -aegirine -aegirinolite -aegirite -aegis -Aegisthus -Aegithalos -Aegithognathae -aegithognathism -aegithognathous -Aegle -Aegopodium -aegrotant -aegyptilla -aegyrite -aeluroid -Aeluroidea -aelurophobe -aelurophobia -aeluropodous -aenach -aenean -aeneolithic -aeneous -aenigmatite -aeolharmonica -Aeolia -Aeolian -Aeolic -Aeolicism -aeolid -Aeolidae -Aeolididae -aeolina -aeoline -aeolipile -Aeolis -Aeolism -Aeolist -aeolistic -aeolodicon -aeolodion -aeolomelodicon -aeolopantalon -aeolotropic -aeolotropism -aeolotropy -aeolsklavier -aeon -aeonial -aeonian -aeonist -Aepyceros -Aepyornis -Aepyornithidae -Aepyornithiformes -Aequi -Aequian -Aequiculi -Aequipalpia -aequoreal -aer -aerage -aerarian -aerarium -aerate -aeration -aerator -aerenchyma -aerenterectasia -aerial -aerialist -aeriality -aerially -aerialness -aeric -aerical -Aerides -aerie -aeried -aerifaction -aeriferous -aerification -aeriform -aerify -aero -Aerobacter -aerobate -aerobatic -aerobatics -aerobe -aerobian -aerobic -aerobically -aerobiologic -aerobiological -aerobiologically -aerobiologist -aerobiology -aerobion -aerobiont -aerobioscope -aerobiosis -aerobiotic -aerobiotically -aerobious -aerobium -aeroboat -Aerobranchia -aerobranchiate -aerobus -aerocamera -aerocartograph -Aerocharidae -aerocolpos -aerocraft -aerocurve -aerocyst -aerodermectasia -aerodone -aerodonetic -aerodonetics -aerodrome -aerodromics -aerodynamic -aerodynamical -aerodynamicist -aerodynamics -aerodyne -aeroembolism -aeroenterectasia -aerofoil -aerogel -aerogen -aerogenes -aerogenesis -aerogenic -aerogenically -aerogenous -aerogeologist -aerogeology -aerognosy -aerogram -aerograph -aerographer -aerographic -aerographical -aerographics -aerography -aerogun -aerohydrodynamic -aerohydropathy -aerohydroplane -aerohydrotherapy -aerohydrous -aeroides -aerolite -aerolith -aerolithology -aerolitic -aerolitics -aerologic -aerological -aerologist -aerology -aeromaechanic -aeromancer -aeromancy -aeromantic -aeromarine -aeromechanical -aeromechanics -aerometeorograph -aerometer -aerometric -aerometry -aeromotor -aeronat -aeronaut -aeronautic -aeronautical -aeronautically -aeronautics -aeronautism -aeronef -aeroneurosis -aeropathy -Aerope -aeroperitoneum -aeroperitonia -aerophagia -aerophagist -aerophagy -aerophane -aerophilatelic -aerophilatelist -aerophilately -aerophile -aerophilic -aerophilous -aerophobia -aerophobic -aerophone -aerophor -aerophore -aerophotography -aerophysical -aerophysics -aerophyte -aeroplane -aeroplaner -aeroplanist -aeropleustic -aeroporotomy -aeroscepsis -aeroscepsy -aeroscope -aeroscopic -aeroscopically -aeroscopy -aerose -aerosiderite -aerosiderolite -Aerosol -aerosol -aerosphere -aerosporin -aerostat -aerostatic -aerostatical -aerostatics -aerostation -aerosteam -aerotactic -aerotaxis -aerotechnical -aerotherapeutics -aerotherapy -aerotonometer -aerotonometric -aerotonometry -aerotropic -aerotropism -aeroyacht -aeruginous -aerugo -aery -aes -Aeschylean -Aeschynanthus -Aeschynomene -aeschynomenous -Aesculaceae -aesculaceous -Aesculapian -Aesculapius -Aesculus -Aesopian -Aesopic -aesthete -aesthetic -aesthetical -aesthetically -aesthetician -aestheticism -aestheticist -aestheticize -aesthetics -aesthiology -aesthophysiology -Aestii -aethalioid -aethalium -aetheogam -aetheogamic -aetheogamous -aethered -Aethionema -aethogen -aethrioscope -Aethusa -Aetian -aetiogenic -aetiotropic -aetiotropically -Aetobatidae -Aetobatus -Aetolian -Aetomorphae -aetosaur -aetosaurian -Aetosaurus -aevia -aface -afaint -Afar -afar -afara -afear -afeard -afeared -afebrile -Afenil -afernan -afetal -affa -affability -affable -affableness -affably -affabrous -affair -affaite -affect -affectable -affectate -affectation -affectationist -affected -affectedly -affectedness -affecter -affectibility -affectible -affecting -affectingly -affection -affectional -affectionally -affectionate -affectionately -affectionateness -affectioned -affectious -affective -affectively -affectivity -affeer -affeerer -affeerment -affeir -affenpinscher -affenspalte -afferent -affettuoso -affiance -affiancer -affiant -affidation -affidavit -affidavy -affiliable -affiliate -affiliation -affinal -affination -affine -affined -affinely -affinitative -affinitatively -affinite -affinition -affinitive -affinity -affirm -affirmable -affirmably -affirmance -affirmant -affirmation -affirmative -affirmatively -affirmatory -affirmer -affirmingly -affix -affixal -affixation -affixer -affixion -affixture -afflation -afflatus -afflict -afflicted -afflictedness -afflicter -afflicting -afflictingly -affliction -afflictionless -afflictive -afflictively -affluence -affluent -affluently -affluentness -afflux -affluxion -afforce -afforcement -afford -affordable -afforest -afforestable -afforestation -afforestment -afformative -affranchise -affranchisement -affray -affrayer -affreight -affreighter -affreightment -affricate -affricated -affrication -affricative -affright -affrighted -affrightedly -affrighter -affrightful -affrightfully -affrightingly -affrightment -affront -affronte -affronted -affrontedly -affrontedness -affronter -affronting -affrontingly -affrontingness -affrontive -affrontiveness -affrontment -affuse -affusion -affy -Afghan -afghani -afield -Afifi -afikomen -afire -aflagellar -aflame -aflare -aflat -aflaunt -aflicker -aflight -afloat -aflow -aflower -afluking -aflush -aflutter -afoam -afoot -afore -aforehand -aforenamed -aforesaid -aforethought -aforetime -aforetimes -afortiori -afoul -afraid -afraidness -Aframerican -Afrasia -Afrasian -afreet -afresh -afret -Afric -African -Africana -Africanism -Africanist -Africanization -Africanize -Africanoid -Africanthropus -Afridi -Afrikaans -Afrikander -Afrikanderdom -Afrikanderism -Afrikaner -Afrogaea -Afrogaean -afront -afrown -Afshah -Afshar -aft -aftaba -after -afteract -afterage -afterattack -afterband -afterbeat -afterbirth -afterblow -afterbody -afterbrain -afterbreach -afterbreast -afterburner -afterburning -aftercare -aftercareer -aftercast -aftercataract -aftercause -afterchance -afterchrome -afterchurch -afterclap -afterclause -aftercome -aftercomer -aftercoming -aftercooler -aftercost -aftercourse -aftercrop -aftercure -afterdamp -afterdate -afterdays -afterdeck -afterdinner -afterdrain -afterdrops -aftereffect -afterend -aftereye -afterfall -afterfame -afterfeed -afterfermentation -afterform -afterfriend -afterfruits -afterfuture -aftergame -aftergas -afterglide -afterglow -aftergo -aftergood -aftergrass -aftergrave -aftergrief -aftergrind -aftergrowth -afterguard -afterguns -afterhand -afterharm -afterhatch -afterhelp -afterhend -afterhold -afterhope -afterhours -afterimage -afterimpression -afterings -afterking -afterknowledge -afterlife -afterlifetime -afterlight -afterloss -afterlove -aftermark -aftermarriage -aftermass -aftermast -aftermath -aftermatter -aftermeal -aftermilk -aftermost -afternight -afternoon -afternoons -afternose -afternote -afteroar -afterpain -afterpart -afterpast -afterpeak -afterpiece -afterplanting -afterplay -afterpressure -afterproof -afterrake -afterreckoning -afterrider -afterripening -afterroll -afterschool -aftersend -aftersensation -aftershaft -aftershafted -aftershine -aftership -aftershock -aftersong -aftersound -afterspeech -afterspring -afterstain -afterstate -afterstorm -afterstrain -afterstretch -afterstudy -afterswarm -afterswarming -afterswell -aftertan -aftertask -aftertaste -afterthinker -afterthought -afterthoughted -afterthrift -aftertime -aftertimes -aftertouch -aftertreatment -aftertrial -afterturn -aftervision -afterwale -afterwar -afterward -afterwards -afterwash -afterwhile -afterwisdom -afterwise -afterwit -afterwitted -afterwork -afterworking -afterworld -afterwrath -afterwrist -aftmost -Aftonian -aftosa -aftward -aftwards -afunction -afunctional -afwillite -Afzelia -aga -agabanee -agacante -agacella -Agaces -Agade -Agag -again -against -againstand -agal -agalactia -agalactic -agalactous -agalawood -agalaxia -agalaxy -Agalena -Agalenidae -Agalinis -agalite -agalloch -agallochum -agallop -agalma -agalmatolite -agalwood -Agama -agama -Agamae -Agamemnon -agamete -agami -agamian -agamic -agamically -agamid -Agamidae -agamobium -agamogenesis -agamogenetic -agamogenetically -agamogony -agamoid -agamont -agamospore -agamous -agamy -aganglionic -Aganice -Aganippe -Agao -Agaonidae -Agapanthus -agape -Agapemone -Agapemonian -Agapemonist -Agapemonite -agapetae -agapeti -agapetid -Agapetidae -Agapornis -agar -agaric -agaricaceae -agaricaceous -Agaricales -agaricic -agariciform -agaricin -agaricine -agaricoid -Agaricus -Agaristidae -agarita -Agarum -agarwal -agasp -Agastache -Agastreae -agastric -agastroneuria -agate -agateware -Agatha -Agathaea -Agathaumas -agathin -Agathis -agathism -agathist -agathodaemon -agathodaemonic -agathokakological -agathology -Agathosma -agatiferous -agatiform -agatine -agatize -agatoid -agaty -Agau -Agave -agavose -Agawam -Agaz -agaze -agazed -Agdistis -age -aged -agedly -agedness -agee -Agelacrinites -Agelacrinitidae -Agelaius -Agelaus -ageless -agelessness -agelong -agen -Agena -agency -agenda -agendum -agenesia -agenesic -agenesis -agennetic -agent -agentess -agential -agentival -agentive -agentry -agentship -ageometrical -ager -Ageratum -ageusia -ageusic -ageustia -agger -aggerate -aggeration -aggerose -Aggie -agglomerant -agglomerate -agglomerated -agglomeratic -agglomeration -agglomerative -agglomerator -agglutinability -agglutinable -agglutinant -agglutinate -agglutination -agglutinationist -agglutinative -agglutinator -agglutinin -agglutinize -agglutinogen -agglutinogenic -agglutinoid -agglutinoscope -agglutogenic -aggradation -aggradational -aggrade -aggrandizable -aggrandize -aggrandizement -aggrandizer -aggrate -aggravate -aggravating -aggravatingly -aggravation -aggravative -aggravator -aggregable -aggregant -Aggregata -Aggregatae -aggregate -aggregately -aggregateness -aggregation -aggregative -aggregator -aggregatory -aggress -aggressin -aggression -aggressionist -aggressive -aggressively -aggressiveness -aggressor -aggrievance -aggrieve -aggrieved -aggrievedly -aggrievedness -aggrievement -aggroup -aggroupment -aggry -aggur -agha -Aghan -aghanee -aghast -aghastness -Aghlabite -Aghorapanthi -Aghori -Agialid -Agib -Agiel -agilawood -agile -agilely -agileness -agility -agillawood -aging -agio -agiotage -agist -agistator -agistment -agistor -agitable -agitant -agitate -agitatedly -agitation -agitational -agitationist -agitative -agitator -agitatorial -agitatrix -agitprop -Agkistrodon -agla -Aglaia -aglance -Aglaonema -Aglaos -aglaozonia -aglare -Aglaspis -Aglauros -agleaf -agleam -aglet -aglethead -agley -aglimmer -aglint -Aglipayan -Aglipayano -aglitter -aglobulia -Aglossa -aglossal -aglossate -aglossia -aglow -aglucon -aglutition -aglycosuric -Aglypha -aglyphodont -Aglyphodonta -Aglyphodontia -aglyphous -agmatine -agmatology -agminate -agminated -agnail -agname -agnamed -agnate -Agnatha -agnathia -agnathic -Agnathostomata -agnathostomatous -agnathous -agnatic -agnatically -agnation -agnel -Agnes -agnification -agnize -Agnoetae -Agnoete -Agnoetism -agnoiology -Agnoite -agnomen -agnomical -agnominal -agnomination -agnosia -agnosis -agnostic -agnostically -agnosticism -Agnostus -agnosy -Agnotozoic -agnus -ago -agog -agoge -agogic -agogics -agoho -agoing -agomensin -agomphiasis -agomphious -agomphosis -agon -agonal -agone -agoniada -agoniadin -agoniatite -Agoniatites -agonic -agonied -agonist -Agonista -agonistarch -agonistic -agonistically -agonistics -agonium -agonize -agonizedly -agonizer -agonizingly -Agonostomus -agonothete -agonothetic -agony -agora -agoranome -agoraphobia -agouara -agouta -agouti -agpaite -agpaitic -Agra -agraffee -agrah -agral -agrammatical -agrammatism -Agrania -agranulocyte -agranulocytosis -agranuloplastic -Agrapha -agraphia -agraphic -agrarian -agrarianism -agrarianize -agrarianly -Agrauleum -agre -agree -agreeability -agreeable -agreeableness -agreeably -agreed -agreeing -agreeingly -agreement -agreer -agregation -agrege -agrestal -agrestial -agrestian -agrestic -agria -agricere -agricole -agricolist -agricolite -agricolous -agricultor -agricultural -agriculturalist -agriculturally -agriculture -agriculturer -agriculturist -Agrilus -Agrimonia -agrimony -agrimotor -agrin -Agriochoeridae -Agriochoerus -agriological -agriologist -agriology -Agrionia -agrionid -Agrionidae -Agriotes -Agriotypidae -Agriotypus -agrise -agrito -agroan -agrobiologic -agrobiological -agrobiologically -agrobiologist -agrobiology -agrogeological -agrogeologically -agrogeology -agrologic -agrological -agrologically -agrology -agrom -Agromyza -agromyzid -Agromyzidae -agronome -agronomial -agronomic -agronomical -agronomics -agronomist -agronomy -agroof -agrope -Agropyron -Agrostemma -agrosteral -Agrostis -agrostographer -agrostographic -agrostographical -agrostography -agrostologic -agrostological -agrostologist -agrostology -agrotechny -Agrotis -aground -agrufe -agruif -agrypnia -agrypnotic -agsam -agua -aguacate -Aguacateca -aguavina -Agudist -ague -aguelike -agueproof -agueweed -aguey -aguilarite -aguilawood -aguinaldo -aguirage -aguish -aguishly -aguishness -agunah -agush -agust -agy -Agyieus -agynarious -agynary -agynous -agyrate -agyria -Ah -ah -aha -ahaaina -ahankara -Ahantchuyuk -ahartalav -ahaunch -ahead -aheap -ahem -Ahepatokla -Ahet -ahey -ahimsa -ahind -ahint -Ahir -ahluwalia -ahmadi -Ahmadiya -Ahmed -Ahmet -Ahnfeltia -aho -Ahom -ahong -ahorse -ahorseback -Ahousaht -ahoy -Ahrendahronon -Ahriman -Ahrimanian -ahsan -Aht -Ahtena -ahu -ahuatle -ahuehuete -ahull -ahum -ahungered -ahungry -ahunt -ahura -ahush -ahwal -ahypnia -ai -Aias -Aiawong -aichmophobia -aid -aidable -aidance -aidant -aide -Aidenn -aider -Aides -aidful -aidless -aiel -aigialosaur -Aigialosauridae -Aigialosaurus -aiglet -aigremore -aigrette -aiguille -aiguillesque -aiguillette -aiguilletted -aikinite -ail -ailantery -ailanthic -Ailanthus -ailantine -ailanto -aile -Aileen -aileron -ailette -Ailie -ailing -aillt -ailment -ailsyte -Ailuridae -ailuro -ailuroid -Ailuroidea -Ailuropoda -Ailuropus -Ailurus -ailweed -aim -Aimak -aimara -Aimee -aimer -aimful -aimfully -aiming -aimless -aimlessly -aimlessness -Aimore -aimworthiness -ainaleh -ainhum -ainoi -ainsell -aint -Ainu -aion -aionial -air -Aira -airable -airampo -airan -airbound -airbrained -airbrush -aircraft -aircraftman -aircraftsman -aircraftswoman -aircraftwoman -aircrew -aircrewman -airdock -airdrome -airdrop -aire -Airedale -airedale -airer -airfield -airfoil -airframe -airfreight -airfreighter -airgraphics -airhead -airiferous -airified -airily -airiness -airing -airish -airless -airlift -airlike -airliner -airmail -airman -airmanship -airmark -airmarker -airmonger -airohydrogen -airometer -airpark -airphobia -airplane -airplanist -airport -airproof -airscape -airscrew -airship -airsick -airsickness -airstrip -airt -airtight -airtightly -airtightness -airward -airwards -airway -airwayman -airwoman -airworthiness -airworthy -airy -aischrolatreia -aiseweed -aisle -aisled -aisleless -aisling -Aissaoua -Aissor -aisteoir -Aistopoda -Aistopodes -ait -aitch -aitchbone -aitchless -aitchpiece -aitesis -aithochroi -aition -aitiotropic -Aitkenite -Aitutakian -aiwan -Aix -aizle -Aizoaceae -aizoaceous -Aizoon -Ajaja -ajaja -ajangle -ajar -ajari -Ajatasatru -ajava -ajhar -ajivika -ajog -ajoint -ajowan -Ajuga -ajutment -ak -Aka -aka -Akal -akala -Akali -akalimba -akamatsu -Akamnik -Akan -Akanekunik -Akania -Akaniaceae -akaroa -akasa -Akawai -akazga -akazgine -akcheh -ake -akeake -akebi -Akebia -akee -akeki -akeley -akenobeite -akepiro -akerite -akey -Akha -Akhissar -Akhlame -Akhmimic -akhoond -akhrot -akhyana -akia -Akim -akimbo -akin -akindle -akinesia -akinesic -akinesis -akinete -akinetic -Akiskemikinik -Akiyenik -Akka -Akkad -Akkadian -Akkadist -akmudar -akmuddar -aknee -ako -akoasm -akoasma -akoluthia -akonge -Akontae -Akoulalion -akov -akpek -Akra -akra -Akrabattine -akroasis -akrochordite -akroterion -Aktistetae -Aktistete -Aktivismus -Aktivist -aku -akuammine -akule -akund -Akwapim -Al -al -ala -Alabama -Alabaman -Alabamian -alabamide -alabamine -alabandite -alabarch -alabaster -alabastos -alabastrian -alabastrine -alabastrites -alabastron -alabastrum -alacha -alack -alackaday -alacreatine -alacreatinine -alacrify -alacritous -alacrity -Alactaga -alada -Aladdin -Aladdinize -Aladfar -Aladinist -alaihi -Alain -alaite -Alaki -Alala -alala -alalite -alalonga -alalunga -alalus -Alamanni -Alamannian -Alamannic -alameda -alamo -alamodality -alamonti -alamosite -alamoth -Alan -alan -aland -Alangiaceae -alangin -alangine -Alangium -alani -alanine -alannah -Alans -alantic -alantin -alantol -alantolactone -alantolic -alanyl -alar -Alarbus -alares -Alaria -Alaric -alarm -alarmable -alarmed -alarmedly -alarming -alarmingly -alarmism -alarmist -Alarodian -alarum -alary -alas -Alascan -Alaska -alaskaite -Alaskan -alaskite -Alastair -Alaster -alastrim -alate -alated -alatern -alaternus -alation -Alauda -Alaudidae -alaudine -Alaunian -Alawi -Alb -alb -alba -albacore -albahaca -Albainn -Alban -alban -Albanenses -Albanensian -Albania -Albanian -albanite -Albany -albarco -albardine -albarello -albarium -albaspidin -albata -Albatros -albatross -albe -albedo -albedograph -albee -albeit -Alberene -Albert -Alberta -albertin -Albertina -Albertine -Albertinian -Albertist -albertite -Alberto -albertustaler -albertype -albescence -albescent -albespine -albetad -Albi -Albian -albicans -albicant -albication -albiculi -albification -albificative -albiflorous -albify -Albigenses -Albigensian -Albigensianism -Albin -albinal -albiness -albinic -albinism -albinistic -albino -albinoism -albinotic -albinuria -Albion -Albireo -albite -albitic -albitite -albitization -albitophyre -Albizzia -albocarbon -albocinereous -Albococcus -albocracy -Alboin -albolite -albolith -albopannin -albopruinose -alboranite -Albrecht -Albright -albronze -Albruna -Albuca -Albuginaceae -albuginea -albugineous -albuginitis -albugo -album -albumean -albumen -albumenization -albumenize -albumenizer -albumimeter -albumin -albuminate -albuminaturia -albuminiferous -albuminiform -albuminimeter -albuminimetry -albuminiparous -albuminization -albuminize -albuminocholia -albuminofibrin -albuminogenous -albuminoid -albuminoidal -albuminolysis -albuminometer -albuminometry -albuminone -albuminorrhea -albuminoscope -albuminose -albuminosis -albuminous -albuminousness -albuminuria -albuminuric -albumoid -albumoscope -albumose -albumosuria -alburn -alburnous -alburnum -albus -albutannin -Albyn -Alca -Alcaaba -Alcae -Alcaic -alcaide -alcalde -alcaldeship -alcaldia -Alcaligenes -alcalizate -Alcalzar -alcamine -alcanna -Alcantara -Alcantarines -alcarraza -alcatras -alcazar -Alcedines -Alcedinidae -Alcedininae -Alcedo -alcelaphine -Alcelaphus -Alces -alchemic -alchemical -alchemically -Alchemilla -alchemist -alchemistic -alchemistical -alchemistry -alchemize -alchemy -alchera -alcheringa -alchimy -alchitran -alchochoden -Alchornea -alchymy -Alcibiadean -Alcicornium -Alcidae -alcidine -alcine -Alcippe -alclad -alco -alcoate -alcogel -alcogene -alcohate -alcohol -alcoholate -alcoholature -alcoholdom -alcoholemia -alcoholic -alcoholically -alcoholicity -alcoholimeter -alcoholism -alcoholist -alcoholizable -alcoholization -alcoholize -alcoholmeter -alcoholmetric -alcoholomania -alcoholometer -alcoholometric -alcoholometrical -alcoholometry -alcoholophilia -alcoholuria -alcoholysis -alcoholytic -Alcor -Alcoran -Alcoranic -Alcoranist -alcornoco -alcornoque -alcosol -Alcotate -alcove -alcovinometer -Alcuinian -alcyon -Alcyonacea -alcyonacean -Alcyonaria -alcyonarian -Alcyone -Alcyones -Alcyoniaceae -alcyonic -alcyoniform -Alcyonium -alcyonoid -aldamine -aldane -aldazin -aldazine -aldeament -Aldebaran -aldebaranium -aldehol -aldehydase -aldehyde -aldehydic -aldehydine -aldehydrol -alder -Alderamin -alderman -aldermanate -aldermancy -aldermaness -aldermanic -aldermanical -aldermanity -aldermanlike -aldermanly -aldermanry -aldermanship -aldern -Alderney -alderwoman -Aldhafara -Aldhafera -aldim -aldime -aldimine -Aldine -aldine -aldoheptose -aldohexose -aldoketene -aldol -aldolization -aldolize -aldononose -aldopentose -aldose -aldoside -aldoxime -Aldrovanda -Aldus -ale -Alea -aleak -aleatory -alebench -aleberry -Alebion -alec -alecithal -alecize -Aleck -aleconner -alecost -Alectoria -alectoria -Alectorides -alectoridine -alectorioid -Alectoris -alectoromachy -alectoromancy -Alectoromorphae -alectoromorphous -Alectoropodes -alectoropodous -Alectrion -Alectrionidae -alectryomachy -alectryomancy -Alectryon -alecup -alee -alef -alefnull -aleft -alefzero -alegar -alehoof -alehouse -Alejandro -alem -alemana -Alemanni -Alemannian -Alemannic -Alemannish -alembic -alembicate -alembroth -Alemite -alemite -alemmal -alemonger -alen -Alencon -Aleochara -aleph -alephs -alephzero -alepidote -alepole -alepot -Aleppine -Aleppo -alerce -alerse -alert -alertly -alertness -alesan -alestake -aletap -aletaster -Alethea -alethiology -alethopteis -alethopteroid -alethoscope -aletocyte -Aletris -alette -aleukemic -Aleurites -aleuritic -Aleurobius -Aleurodes -Aleurodidae -aleuromancy -aleurometer -aleuronat -aleurone -aleuronic -aleuroscope -Aleut -Aleutian -Aleutic -aleutite -alevin -alewife -Alex -Alexander -alexanders -Alexandra -Alexandreid -Alexandrian -Alexandrianism -Alexandrina -Alexandrine -alexandrite -Alexas -Alexia -alexia -Alexian -alexic -alexin -alexinic -alexipharmacon -alexipharmacum -alexipharmic -alexipharmical -alexipyretic -Alexis -alexiteric -alexiterical -Alexius -aleyard -Aleyrodes -aleyrodid -Aleyrodidae -Alf -alf -alfa -alfaje -alfalfa -alfaqui -alfaquin -alfenide -alfet -alfilaria -alfileria -alfilerilla -alfilerillo -alfiona -Alfirk -alfonsin -alfonso -alforja -Alfred -Alfreda -alfresco -alfridaric -alfridary -Alfur -Alfurese -Alfuro -alga -algae -algaecide -algaeological -algaeologist -algaeology -algaesthesia -algaesthesis -algal -algalia -Algaroth -algarroba -algarrobilla -algarrobin -Algarsife -Algarsyf -algate -Algebar -algebra -algebraic -algebraical -algebraically -algebraist -algebraization -algebraize -Algedi -algedo -algedonic -algedonics -algefacient -Algenib -Algerian -Algerine -algerine -Algernon -algesia -algesic -algesis -algesthesis -algetic -Algic -algic -algid -algidity -algidness -Algieba -algific -algin -alginate -algine -alginic -alginuresis -algiomuscular -algist -algivorous -algocyan -algodoncillo -algodonite -algoesthesiometer -algogenic -algoid -Algol -algolagnia -algolagnic -algolagnist -algolagny -algological -algologist -algology -Algoman -algometer -algometric -algometrical -algometrically -algometry -Algomian -Algomic -Algonkian -Algonquian -Algonquin -algophilia -algophilist -algophobia -algor -Algorab -Algores -algorism -algorismic -algorist -algoristic -algorithm -algorithmic -algosis -algous -algovite -algraphic -algraphy -alguazil -algum -Algy -Alhagi -Alhambra -Alhambraic -Alhambresque -Alhena -alhenna -alias -Alibamu -alibangbang -alibi -alibility -alible -Alicant -Alice -alichel -Alichino -Alicia -Alick -alicoche -alictisal -alicyclic -Alida -alidade -Alids -alien -alienability -alienable -alienage -alienate -alienation -alienator -aliency -alienee -aliener -alienicola -alienigenate -alienism -alienist -alienize -alienor -alienship -aliethmoid -aliethmoidal -alif -aliferous -aliform -aligerous -alight -align -aligner -alignment -aligreek -aliipoe -alike -alikeness -alikewise -Alikuluf -Alikulufan -alilonghi -alima -aliment -alimental -alimentally -alimentariness -alimentary -alimentation -alimentative -alimentatively -alimentativeness -alimenter -alimentic -alimentive -alimentiveness -alimentotherapy -alimentum -alimonied -alimony -alin -alinasal -Aline -alineation -alintatao -aliofar -Alioth -alipata -aliped -aliphatic -alipterion -aliptes -aliptic -aliquant -aliquot -aliseptal -alish -alisier -Alisma -Alismaceae -alismaceous -alismad -alismal -Alismales -Alismataceae -alismoid -aliso -Alison -alison -alisonite -alisp -alisphenoid -alisphenoidal -alist -Alister -alit -alite -alitrunk -aliturgic -aliturgical -aliunde -alive -aliveness -alivincular -Alix -aliyah -alizarate -alizari -alizarin -aljoba -alk -alkahest -alkahestic -alkahestica -alkahestical -Alkaid -alkalamide -alkalemia -alkalescence -alkalescency -alkalescent -alkali -alkalic -alkaliferous -alkalifiable -alkalify -alkaligen -alkaligenous -alkalimeter -alkalimetric -alkalimetrical -alkalimetrically -alkalimetry -alkaline -alkalinity -alkalinization -alkalinize -alkalinuria -alkalizable -alkalizate -alkalization -alkalize -alkalizer -alkaloid -alkaloidal -alkalometry -alkalosis -alkalous -Alkalurops -alkamin -alkamine -alkane -alkanet -Alkanna -alkannin -Alkaphrah -alkapton -alkaptonuria -alkaptonuric -alkargen -alkarsin -alkekengi -alkene -alkenna -alkenyl -alkermes -Alkes -alkide -alkine -alkool -Alkoran -Alkoranic -alkoxide -alkoxy -alkoxyl -alky -alkyd -alkyl -alkylamine -alkylate -alkylation -alkylene -alkylic -alkylidene -alkylize -alkylogen -alkyloxy -alkyne -all -allabuta -allactite -allaeanthus -allagite -allagophyllous -allagostemonous -Allah -allalinite -Allamanda -allamotti -Allan -allan -allanite -allanitic -allantiasis -allantochorion -allantoic -allantoid -allantoidal -Allantoidea -allantoidean -allantoidian -allantoin -allantoinase -allantoinuria -allantois -allantoxaidin -allanturic -Allasch -allassotonic -allative -allatrate -allay -allayer -allayment -allbone -Alle -allecret -allectory -allegate -allegation -allegator -allege -allegeable -allegedly -allegement -alleger -Alleghenian -Allegheny -allegiance -allegiancy -allegiant -allegoric -allegorical -allegorically -allegoricalness -allegorism -allegorist -allegorister -allegoristic -allegorization -allegorize -allegorizer -allegory -allegretto -allegro -allele -allelic -allelism -allelocatalytic -allelomorph -allelomorphic -allelomorphism -allelotropic -allelotropism -allelotropy -alleluia -alleluiatic -allemand -allemande -allemontite -Allen -allenarly -allene -Allentiac -Allentiacan -aller -allergen -allergenic -allergia -allergic -allergin -allergist -allergy -allerion -allesthesia -alleviate -alleviatingly -alleviation -alleviative -alleviator -alleviatory -alley -alleyed -alleyite -alleyway -allgood -Allhallow -Allhallowtide -allheal -alliable -alliably -Alliaceae -alliaceous -alliance -alliancer -Alliaria -allicampane -allice -allicholly -alliciency -allicient -Allie -allied -Allies -allies -alligate -alligator -alligatored -allineate -allineation -Allionia -Allioniaceae -allision -alliteral -alliterate -alliteration -alliterational -alliterationist -alliterative -alliteratively -alliterativeness -alliterator -Allium -allivalite -allmouth -allness -Allobroges -allocable -allocaffeine -allocatable -allocate -allocatee -allocation -allocator -allochetia -allochetite -allochezia -allochiral -allochirally -allochiria -allochlorophyll -allochroic -allochroite -allochromatic -allochroous -allochthonous -allocinnamic -alloclase -alloclasite -allocochick -allocrotonic -allocryptic -allocute -allocution -allocutive -allocyanine -allodelphite -allodesmism -alloeosis -alloeostropha -alloeotic -alloerotic -alloerotism -allogamous -allogamy -allogene -allogeneity -allogeneous -allogenic -allogenically -allograph -alloiogenesis -alloisomer -alloisomeric -alloisomerism -allokinesis -allokinetic -allokurtic -allomerism -allomerous -allometric -allometry -allomorph -allomorphic -allomorphism -allomorphite -allomucic -allonomous -allonym -allonymous -allopalladium -allopath -allopathetic -allopathetically -allopathic -allopathically -allopathist -allopathy -allopatric -allopatrically -allopatry -allopelagic -allophanamide -allophanates -allophane -allophanic -allophone -allophyle -allophylian -allophylic -Allophylus -allophytoid -alloplasm -alloplasmatic -alloplasmic -alloplast -alloplastic -alloplasty -alloploidy -allopolyploid -allopsychic -alloquial -alloquialism -alloquy -allorhythmia -allorrhyhmia -allorrhythmic -allosaur -Allosaurus -allose -allosematic -allosome -allosyndesis -allosyndetic -allot -allotee -allotelluric -allotheism -Allotheria -allothigene -allothigenetic -allothigenetically -allothigenic -allothigenous -allothimorph -allothimorphic -allothogenic -allothogenous -allotment -allotriodontia -Allotriognathi -allotriomorphic -allotriophagia -allotriophagy -allotriuria -allotrope -allotrophic -allotropic -allotropical -allotropically -allotropicity -allotropism -allotropize -allotropous -allotropy -allotrylic -allottable -allottee -allotter -allotype -allotypical -allover -allow -allowable -allowableness -allowably -allowance -allowedly -allower -alloxan -alloxanate -alloxanic -alloxantin -alloxuraemia -alloxuremia -alloxuric -alloxyproteic -alloy -alloyage -allozooid -allseed -allspice -allthing -allthorn -alltud -allude -allure -allurement -allurer -alluring -alluringly -alluringness -allusion -allusive -allusively -allusiveness -alluvia -alluvial -alluviate -alluviation -alluvion -alluvious -alluvium -allwhere -allwhither -allwork -Allworthy -Ally -ally -allyl -allylamine -allylate -allylation -allylene -allylic -allylthiourea -Alma -alma -Almach -almaciga -almacigo -almadia -almadie -almagest -almagra -Almain -Alman -almanac -almandine -almandite -alme -almeidina -almemar -Almerian -almeriite -Almida -almightily -almightiness -almighty -almique -Almira -almirah -almochoden -Almohad -Almohade -Almohades -almoign -Almon -almon -almond -almondy -almoner -almonership -almonry -Almoravid -Almoravide -Almoravides -almost -almous -alms -almsdeed -almsfolk -almsful -almsgiver -almsgiving -almshouse -almsman -almswoman -almucantar -almuce -almud -almude -almug -Almuredin -almuten -aln -alnage -alnager -alnagership -Alnaschar -Alnascharism -alnein -alnico -Alnilam -alniresinol -Alnitak -Alnitham -alniviridol -alnoite -alnuin -Alnus -alo -Aloadae -Alocasia -alochia -alod -alodial -alodialism -alodialist -alodiality -alodially -alodian -alodiary -alodification -alodium -alody -aloe -aloed -aloelike -aloemodin -aloeroot -aloesol -aloeswood -aloetic -aloetical -aloewood -aloft -alogia -Alogian -alogical -alogically -alogism -alogy -aloid -aloin -Alois -aloisiite -aloma -alomancy -alone -aloneness -along -alongshore -alongshoreman -alongside -alongst -Alonso -Alonsoa -Alonzo -aloof -aloofly -aloofness -aloose -alop -alopecia -Alopecias -alopecist -alopecoid -Alopecurus -alopeke -Alopias -Alopiidae -Alosa -alose -Alouatta -alouatte -aloud -alow -alowe -Aloxite -Aloysia -Aloysius -alp -alpaca -alpasotes -Alpax -alpeen -Alpen -alpenglow -alpenhorn -alpenstock -alpenstocker -alpestral -alpestrian -alpestrine -alpha -alphabet -alphabetarian -alphabetic -alphabetical -alphabetically -alphabetics -alphabetiform -alphabetism -alphabetist -alphabetization -alphabetize -alphabetizer -Alphard -alphatoluic -Alphean -Alphecca -alphenic -Alpheratz -alphitomancy -alphitomorphous -alphol -Alphonist -Alphonse -Alphonsine -Alphonsism -Alphonso -alphorn -alphos -alphosis -alphyl -Alpian -Alpid -alpieu -alpigene -Alpine -alpine -alpinely -alpinery -alpinesque -Alpinia -Alpiniaceae -Alpinism -Alpinist -alpist -Alpujarra -alqueire -alquier -alquifou -alraun -alreadiness -already -alright -alrighty -alroot -alruna -Alsatia -Alsatian -alsbachite -Alshain -Alsinaceae -alsinaceous -Alsine -also -alsoon -Alsophila -Alstonia -alstonidine -alstonine -alstonite -Alstroemeria -alsweill -alt -Altaian -Altaic -Altaid -Altair -altaite -Altamira -altar -altarage -altared -altarist -altarlet -altarpiece -altarwise -altazimuth -alter -alterability -alterable -alterableness -alterably -alterant -alterate -alteration -alterative -altercate -altercation -altercative -alteregoism -alteregoistic -alterer -alterity -altern -alternacy -alternance -alternant -Alternanthera -Alternaria -alternariose -alternate -alternately -alternateness -alternating -alternatingly -alternation -alternationist -alternative -alternatively -alternativeness -alternativity -alternator -alterne -alternifoliate -alternipetalous -alternipinnate -alternisepalous -alternize -alterocentric -Althaea -althaein -Althea -althea -althein -altheine -althionic -altho -althorn -although -Altica -Alticamelus -altigraph -altilik -altiloquence -altiloquent -altimeter -altimetrical -altimetrically -altimetry -altin -altincar -Altingiaceae -altingiaceous -altininck -altiplano -altiscope -altisonant -altisonous -altissimo -altitude -altitudinal -altitudinarian -alto -altogether -altogetherness -altometer -altoun -altrices -altricial -altropathy -altrose -altruism -altruist -altruistic -altruistically -altschin -altun -Aluco -Aluconidae -Aluconinae -aludel -Aludra -alula -alular -alulet -Alulim -alum -alumbloom -Alumel -alumic -alumiferous -alumina -aluminaphone -aluminate -alumine -aluminic -aluminide -aluminiferous -aluminiform -aluminish -aluminite -aluminium -aluminize -aluminoferric -aluminographic -aluminography -aluminose -aluminosilicate -aluminosis -aluminosity -aluminothermic -aluminothermics -aluminothermy -aluminotype -aluminous -aluminum -aluminyl -alumish -alumite -alumium -alumna -alumnae -alumnal -alumni -alumniate -Alumnol -alumnus -alumohydrocalcite -alumroot -Alundum -aluniferous -alunite -alunogen -alupag -Alur -alure -alurgite -alushtite -aluta -alutaceous -Alvah -Alvan -alvar -alvearium -alveary -alveloz -alveola -alveolar -alveolariform -alveolary -alveolate -alveolated -alveolation -alveole -alveolectomy -alveoli -alveoliform -alveolite -Alveolites -alveolitis -alveoloclasia -alveolocondylean -alveolodental -alveololabial -alveololingual -alveolonasal -alveolosubnasal -alveolotomy -alveolus -alveus -alviducous -Alvin -Alvina -alvine -Alvissmal -alvite -alvus -alway -always -aly -Alya -alycompaine -alymphia -alymphopotent -alypin -alysson -Alyssum -alytarch -Alytes -am -ama -amaas -Amabel -amability -amacratic -amacrinal -amacrine -amadavat -amadelphous -Amadi -Amadis -amadou -Amaethon -Amafingo -amaga -amah -Amahuaca -amain -amaister -amakebe -Amakosa -amala -amalaita -amalaka -Amalfian -Amalfitan -amalgam -amalgamable -amalgamate -amalgamation -amalgamationist -amalgamative -amalgamatize -amalgamator -amalgamist -amalgamization -amalgamize -Amalings -Amalrician -amaltas -amamau -Amampondo -Amanda -amandin -Amandus -amang -amani -amania -Amanist -Amanita -amanitin -amanitine -Amanitopsis -amanori -amanous -amantillo -amanuenses -amanuensis -amapa -Amapondo -amar -Amara -Amarantaceae -amarantaceous -amaranth -Amaranthaceae -amaranthaceous -amaranthine -amaranthoid -Amaranthus -amarantite -Amarantus -amarelle -amarevole -amargoso -amarillo -amarin -amarine -amaritude -amarity -amaroid -amaroidal -Amarth -amarthritis -amaryllid -Amaryllidaceae -amaryllidaceous -amaryllideous -Amaryllis -amasesis -amass -amassable -amasser -amassment -Amasta -amasthenic -amastia -amasty -Amatembu -amaterialistic -amateur -amateurish -amateurishly -amateurishness -amateurism -amateurship -Amati -amative -amatively -amativeness -amatol -amatorial -amatorially -amatorian -amatorious -amatory -amatrice -amatungula -amaurosis -amaurotic -amaze -amazed -amazedly -amazedness -amazeful -amazement -amazia -Amazilia -amazing -amazingly -Amazon -Amazona -Amazonian -Amazonism -amazonite -Amazulu -amba -ambage -ambagiosity -ambagious -ambagiously -ambagiousness -ambagitory -ambalam -amban -ambar -ambaree -ambarella -ambary -ambash -ambassade -Ambassadeur -ambassador -ambassadorial -ambassadorially -ambassadorship -ambassadress -ambassage -ambassy -ambatch -ambatoarinite -ambay -ambeer -amber -amberfish -ambergris -amberiferous -amberite -amberoid -amberous -ambery -ambicolorate -ambicoloration -ambidexter -ambidexterity -ambidextral -ambidextrous -ambidextrously -ambidextrousness -ambience -ambiency -ambiens -ambient -ambier -ambigenous -ambiguity -ambiguous -ambiguously -ambiguousness -ambilateral -ambilateralaterally -ambilaterality -ambilevous -ambilian -ambilogy -ambiopia -ambiparous -ambisinister -ambisinistrous -ambisporangiate -ambisyllabic -ambit -ambital -ambitendency -ambition -ambitionist -ambitionless -ambitionlessly -ambitious -ambitiously -ambitiousness -ambitty -ambitus -ambivalence -ambivalency -ambivalent -ambivert -amble -ambler -ambling -amblingly -amblotic -amblyacousia -amblyaphia -Amblycephalidae -Amblycephalus -amblychromatic -Amblydactyla -amblygeusia -amblygon -amblygonal -amblygonite -amblyocarpous -Amblyomma -amblyope -amblyopia -amblyopic -Amblyopsidae -Amblyopsis -amblyoscope -amblypod -Amblypoda -amblypodous -Amblyrhynchus -amblystegite -Amblystoma -ambo -amboceptoid -amboceptor -Ambocoelia -Amboina -Amboinese -ambomalleal -ambon -ambonite -Ambonnay -ambos -ambosexous -ambosexual -ambrain -ambrein -ambrette -Ambrica -ambrite -ambroid -ambrology -Ambrose -ambrose -ambrosia -ambrosiac -Ambrosiaceae -ambrosiaceous -ambrosial -ambrosially -Ambrosian -ambrosian -ambrosiate -ambrosin -ambrosine -Ambrosio -ambrosterol -ambrotype -ambry -ambsace -ambulacral -ambulacriform -ambulacrum -ambulance -ambulancer -ambulant -ambulate -ambulatio -ambulation -ambulative -ambulator -Ambulatoria -ambulatorial -ambulatorium -ambulatory -ambuling -ambulomancy -amburbial -ambury -ambuscade -ambuscader -ambush -ambusher -ambushment -Ambystoma -Ambystomidae -amchoor -ame -amebiform -Amedeo -ameed -ameen -Ameiuridae -Ameiurus -Ameiva -Amelanchier -amelcorn -Amelia -amelia -amelification -ameliorable -ameliorableness -ameliorant -ameliorate -amelioration -ameliorativ -ameliorative -ameliorator -amellus -ameloblast -ameloblastic -amelu -amelus -Amen -amen -amenability -amenable -amenableness -amenably -amend -amendable -amendableness -amendatory -amende -amender -amendment -amends -amene -amenia -Amenism -Amenite -amenity -amenorrhea -amenorrheal -amenorrheic -amenorrhoea -ament -amentaceous -amental -amentia -Amentiferae -amentiferous -amentiform -amentulum -amentum -amerce -amerceable -amercement -amercer -amerciament -America -American -Americana -Americanese -Americanism -Americanist -Americanistic -Americanitis -Americanization -Americanize -Americanizer -Americanly -Americanoid -Americaward -Americawards -americium -Americomania -Americophobe -Amerimnon -Amerind -Amerindian -Amerindic -amerism -ameristic -amesite -Ametabola -ametabole -ametabolia -ametabolian -ametabolic -ametabolism -ametabolous -ametaboly -ametallous -amethodical -amethodically -amethyst -amethystine -ametoecious -ametria -ametrometer -ametrope -ametropia -ametropic -ametrous -Amex -amgarn -amhar -amherstite -amhran -Ami -ami -Amia -amiability -amiable -amiableness -amiably -amianth -amianthiform -amianthine -Amianthium -amianthoid -amianthoidal -amianthus -amic -amicability -amicable -amicableness -amicably -amical -amice -amiced -amicicide -amicrobic -amicron -amicronucleate -amid -amidase -amidate -amidation -amide -amidic -amidid -amidide -amidin -amidine -Amidism -Amidist -amido -amidoacetal -amidoacetic -amidoacetophenone -amidoaldehyde -amidoazo -amidoazobenzene -amidoazobenzol -amidocaffeine -amidocapric -amidofluorid -amidofluoride -amidogen -amidoguaiacol -amidohexose -amidoketone -amidol -amidomyelin -amidon -amidophenol -amidophosphoric -amidoplast -amidoplastid -amidopyrine -amidosuccinamic -amidosulphonal -amidothiazole -amidoxime -amidoxy -amidoxyl -amidrazone -amidship -amidships -amidst -amidstream -amidulin -Amigo -Amiidae -amil -Amiles -Amiloun -amimia -amimide -amin -aminate -amination -amine -amini -aminic -aminity -aminization -aminize -amino -aminoacetal -aminoacetanilide -aminoacetic -aminoacetone -aminoacetophenetidine -aminoacetophenone -aminoacidemia -aminoaciduria -aminoanthraquinone -aminoazobenzene -aminobarbituric -aminobenzaldehyde -aminobenzamide -aminobenzene -aminobenzoic -aminocaproic -aminodiphenyl -aminoethionic -aminoformic -aminogen -aminoglutaric -aminoguanidine -aminoid -aminoketone -aminolipin -aminolysis -aminolytic -aminomalonic -aminomyelin -aminophenol -aminoplast -aminoplastic -aminopropionic -aminopurine -aminopyrine -aminoquinoline -aminosis -aminosuccinamic -aminosulphonic -aminothiophen -aminovaleric -aminoxylol -Aminta -Amintor -Amioidei -Amir -amir -Amiranha -amiray -amirship -Amish -Amishgo -amiss -amissibility -amissible -amissness -Amita -Amitabha -amitosis -amitotic -amitotically -amity -amixia -Amizilis -amla -amli -amlikar -amlong -Amma -amma -amman -Ammanite -ammelide -ammelin -ammeline -ammer -ammeter -Ammi -Ammiaceae -ammiaceous -ammine -amminochloride -amminolysis -amminolytic -ammiolite -ammo -Ammobium -ammochaeta -ammochryse -ammocoete -ammocoetes -ammocoetid -Ammocoetidae -ammocoetiform -ammocoetoid -Ammodytes -Ammodytidae -ammodytoid -ammonal -ammonate -ammonation -Ammonea -ammonia -ammoniacal -ammoniacum -ammoniate -ammoniation -ammonic -ammonical -ammoniemia -ammonification -ammonifier -ammonify -ammoniojarosite -ammonion -ammonionitrate -Ammonite -ammonite -Ammonites -Ammonitess -ammonitic -ammoniticone -ammonitiferous -Ammonitish -ammonitoid -Ammonitoidea -ammonium -ammoniuria -ammonization -ammono -ammonobasic -ammonocarbonic -ammonocarbonous -ammonoid -Ammonoidea -ammonoidean -ammonolysis -ammonolytic -ammonolyze -Ammophila -ammophilous -ammoresinol -ammotherapy -ammu -ammunition -amnemonic -amnesia -amnesic -amnestic -amnesty -amnia -amniac -amniatic -amnic -Amnigenia -amnioallantoic -amniocentesis -amniochorial -amnioclepsis -amniomancy -amnion -Amnionata -amnionate -amnionic -amniorrhea -Amniota -amniote -amniotic -amniotitis -amniotome -amober -amobyr -amoeba -amoebae -Amoebaea -amoebaean -amoebaeum -amoebalike -amoeban -amoebian -amoebiasis -amoebic -amoebicide -amoebid -Amoebida -Amoebidae -amoebiform -Amoebobacter -Amoebobacterieae -amoebocyte -Amoebogeniae -amoeboid -amoeboidism -amoebous -amoebula -amok -amoke -amole -amolilla -amomal -Amomales -Amomis -amomum -among -amongst -amontillado -amor -amorado -amoraic -amoraim -amoral -amoralism -amoralist -amorality -amoralize -Amores -amoret -amoretto -Amoreuxia -amorism -amorist -amoristic -Amorite -Amoritic -Amoritish -amorosity -amoroso -amorous -amorously -amorousness -Amorpha -amorphia -amorphic -amorphinism -amorphism -Amorphophallus -amorphophyte -amorphotae -amorphous -amorphously -amorphousness -amorphus -amorphy -amort -amortisseur -amortizable -amortization -amortize -amortizement -Amorua -Amos -Amoskeag -amotion -amotus -amount -amour -amourette -amovability -amovable -amove -Amoy -Amoyan -Amoyese -ampalaya -ampalea -ampangabeite -ampasimenite -Ampelidaceae -ampelidaceous -Ampelidae -ampelideous -Ampelis -ampelite -ampelitic -ampelographist -ampelography -ampelopsidin -ampelopsin -Ampelopsis -Ampelosicyos -ampelotherapy -amper -amperage -ampere -amperemeter -Amperian -amperometer -ampersand -ampery -amphanthium -ampheclexis -ampherotokous -ampherotoky -amphetamine -amphiarthrodial -amphiarthrosis -amphiaster -amphibalus -Amphibia -amphibial -amphibian -amphibichnite -amphibiety -amphibiological -amphibiology -amphibion -amphibiotic -Amphibiotica -amphibious -amphibiously -amphibiousness -amphibium -amphiblastic -amphiblastula -amphiblestritis -Amphibola -amphibole -amphibolia -amphibolic -amphiboliferous -amphiboline -amphibolite -amphibolitic -amphibological -amphibologically -amphibologism -amphibology -amphibolous -amphiboly -amphibrach -amphibrachic -amphibryous -Amphicarpa -Amphicarpaea -amphicarpic -amphicarpium -amphicarpogenous -amphicarpous -amphicentric -amphichroic -amphichrom -amphichromatic -amphichrome -amphicoelian -amphicoelous -Amphicondyla -amphicondylous -amphicrania -amphicreatinine -amphicribral -amphictyon -amphictyonian -amphictyonic -amphictyony -Amphicyon -Amphicyonidae -amphicyrtic -amphicyrtous -amphicytula -amphid -amphide -amphidesmous -amphidetic -amphidiarthrosis -amphidiploid -amphidiploidy -amphidisc -Amphidiscophora -amphidiscophoran -amphierotic -amphierotism -Amphigaea -amphigam -Amphigamae -amphigamous -amphigastrium -amphigastrula -amphigean -amphigen -amphigene -amphigenesis -amphigenetic -amphigenous -amphigenously -amphigonic -amphigonium -amphigonous -amphigony -amphigoric -amphigory -amphigouri -amphikaryon -amphilogism -amphilogy -amphimacer -amphimictic -amphimictical -amphimictically -amphimixis -amphimorula -Amphinesian -Amphineura -amphineurous -amphinucleus -Amphion -Amphionic -Amphioxi -Amphioxidae -Amphioxides -Amphioxididae -amphioxus -amphipeptone -amphiphloic -amphiplatyan -Amphipleura -amphiploid -amphiploidy -amphipneust -Amphipneusta -amphipneustic -Amphipnous -amphipod -Amphipoda -amphipodal -amphipodan -amphipodiform -amphipodous -amphiprostylar -amphiprostyle -amphiprotic -amphipyrenin -Amphirhina -amphirhinal -amphirhine -amphisarca -amphisbaena -amphisbaenian -amphisbaenic -Amphisbaenidae -amphisbaenoid -amphisbaenous -amphiscians -amphiscii -Amphisile -Amphisilidae -amphispermous -amphisporangiate -amphispore -Amphistoma -amphistomatic -amphistome -amphistomoid -amphistomous -Amphistomum -amphistylar -amphistylic -amphistyly -amphitene -amphitheater -amphitheatered -amphitheatral -amphitheatric -amphitheatrical -amphitheatrically -amphithecial -amphithecium -amphithect -amphithyron -amphitokal -amphitokous -amphitoky -amphitriaene -amphitrichous -Amphitrite -amphitropal -amphitropous -Amphitruo -Amphitryon -Amphiuma -Amphiumidae -amphivasal -amphivorous -Amphizoidae -amphodarch -amphodelite -amphodiplopia -amphogenous -ampholyte -amphopeptone -amphophil -amphophile -amphophilic -amphophilous -amphora -amphoral -amphore -amphorette -amphoric -amphoricity -amphoriloquy -amphorophony -amphorous -amphoteric -Amphrysian -ample -amplectant -ampleness -amplexation -amplexicaudate -amplexicaul -amplexicauline -amplexifoliate -amplexus -ampliate -ampliation -ampliative -amplicative -amplidyne -amplification -amplificative -amplificator -amplificatory -amplifier -amplify -amplitude -amply -ampollosity -ampongue -ampoule -ampul -ampulla -ampullaceous -ampullar -Ampullaria -Ampullariidae -ampullary -ampullate -ampullated -ampulliform -ampullitis -ampullula -amputate -amputation -amputational -amputative -amputator -amputee -ampyx -amra -amreeta -amrita -Amritsar -amsath -amsel -Amsonia -Amsterdamer -amt -amtman -Amuchco -amuck -Amueixa -amuguis -amula -amulet -amuletic -amulla -amunam -amurca -amurcosity -amurcous -Amurru -amusable -amuse -amused -amusedly -amusee -amusement -amuser -amusette -Amusgo -amusia -amusing -amusingly -amusingness -amusive -amusively -amusiveness -amutter -amuyon -amuyong -amuze -amvis -Amy -amy -Amyclaean -Amyclas -amyelencephalia -amyelencephalic -amyelencephalous -amyelia -amyelic -amyelinic -amyelonic -amyelous -amygdal -amygdala -Amygdalaceae -amygdalaceous -amygdalase -amygdalate -amygdalectomy -amygdalic -amygdaliferous -amygdaliform -amygdalin -amygdaline -amygdalinic -amygdalitis -amygdaloid -amygdaloidal -amygdalolith -amygdaloncus -amygdalopathy -amygdalothripsis -amygdalotome -amygdalotomy -Amygdalus -amygdonitrile -amygdophenin -amygdule -amyl -amylaceous -amylamine -amylan -amylase -amylate -amylemia -amylene -amylenol -amylic -amylidene -amyliferous -amylin -amylo -amylocellulose -amyloclastic -amylocoagulase -amylodextrin -amylodyspepsia -amylogen -amylogenesis -amylogenic -amylohydrolysis -amylohydrolytic -amyloid -amyloidal -amyloidosis -amyloleucite -amylolysis -amylolytic -amylom -amylometer -amylon -amylopectin -amylophagia -amylophosphate -amylophosphoric -amyloplast -amyloplastic -amyloplastid -amylopsin -amylose -amylosis -amylosynthesis -amylum -amyluria -Amynodon -amynodont -amyosthenia -amyosthenic -amyotaxia -amyotonia -amyotrophia -amyotrophic -amyotrophy -amyous -Amyraldism -Amyraldist -Amyridaceae -amyrin -Amyris -amyrol -amyroot -Amytal -amyxorrhea -amyxorrhoea -an -Ana -ana -Anabaena -Anabantidae -Anabaptism -Anabaptist -Anabaptistic -Anabaptistical -Anabaptistically -Anabaptistry -anabaptize -Anabas -anabasine -anabasis -anabasse -anabata -anabathmos -anabatic -anaberoga -anabibazon -anabiosis -anabiotic -Anablepidae -Anableps -anabo -anabohitsite -anabolic -anabolin -anabolism -anabolite -anabolize -anabong -anabranch -anabrosis -anabrotic -anacahuita -anacahuite -anacalypsis -anacampsis -anacamptic -anacamptically -anacamptics -anacamptometer -anacanth -anacanthine -Anacanthini -anacanthous -anacara -anacard -Anacardiaceae -anacardiaceous -anacardic -Anacardium -anacatadidymus -anacatharsis -anacathartic -anacephalaeosis -anacephalize -Anaces -Anacharis -anachorism -anachromasis -anachronic -anachronical -anachronically -anachronism -anachronismatical -anachronist -anachronistic -anachronistical -anachronistically -anachronize -anachronous -anachronously -anachueta -anacid -anacidity -anaclasis -anaclastic -anaclastics -Anaclete -anacleticum -anaclinal -anaclisis -anaclitic -anacoenosis -anacoluthia -anacoluthic -anacoluthically -anacoluthon -anaconda -Anacreon -Anacreontic -Anacreontically -anacrisis -Anacrogynae -anacrogynae -anacrogynous -anacromyodian -anacrotic -anacrotism -anacrusis -anacrustic -anacrustically -anaculture -anacusia -anacusic -anacusis -Anacyclus -anadem -anadenia -anadicrotic -anadicrotism -anadidymus -anadiplosis -anadipsia -anadipsic -anadrom -anadromous -Anadyomene -anaematosis -anaemia -anaemic -anaeretic -anaerobation -anaerobe -anaerobia -anaerobian -anaerobic -anaerobically -anaerobies -anaerobion -anaerobiont -anaerobiosis -anaerobiotic -anaerobiotically -anaerobious -anaerobism -anaerobium -anaerophyte -anaeroplastic -anaeroplasty -anaesthesia -anaesthesiant -anaesthetically -anaesthetizer -anaetiological -anagalactic -Anagallis -anagap -anagenesis -anagenetic -anagep -anagignoskomena -anaglyph -anaglyphic -anaglyphical -anaglyphics -anaglyphoscope -anaglyphy -anaglyptic -anaglyptical -anaglyptics -anaglyptograph -anaglyptographic -anaglyptography -anaglypton -anagnorisis -anagnost -anagoge -anagogic -anagogical -anagogically -anagogics -anagogy -anagram -anagrammatic -anagrammatical -anagrammatically -anagrammatism -anagrammatist -anagrammatize -anagrams -anagraph -anagua -anagyrin -anagyrine -Anagyris -anahau -Anahita -Anaitis -Anakes -anakinesis -anakinetic -anakinetomer -anakinetomeric -anakoluthia -anakrousis -anaktoron -anal -analabos -analav -analcime -analcimite -analcite -analcitite -analecta -analectic -analects -analemma -analemmatic -analepsis -analepsy -analeptic -analeptical -analgen -analgesia -analgesic -Analgesidae -analgesis -analgesist -analgetic -analgia -analgic -analgize -analkalinity -anallagmatic -anallantoic -Anallantoidea -anallantoidean -anallergic -anally -analogic -analogical -analogically -analogicalness -analogion -analogism -analogist -analogistic -analogize -analogon -analogous -analogously -analogousness -analogue -analogy -analphabet -analphabete -analphabetic -analphabetical -analphabetism -analysability -analysable -analysand -analysation -analyse -analyser -analyses -analysis -analyst -analytic -analytical -analytically -analytics -analyzability -analyzable -analyzation -analyze -analyzer -Anam -anam -anama -anamesite -anametadromous -Anamirta -anamirtin -Anamite -anamite -anammonid -anammonide -anamnesis -anamnestic -anamnestically -Anamnia -Anamniata -Anamnionata -anamnionic -Anamniota -anamniote -anamniotic -anamorphic -anamorphism -anamorphoscope -anamorphose -anamorphosis -anamorphote -anamorphous -anan -anana -ananaplas -ananaples -ananas -ananda -anandrarious -anandria -anandrous -ananepionic -anangioid -anangular -Ananias -Ananism -Ananite -anankastic -Anansi -Ananta -anantherate -anantherous -ananthous -ananym -anapaest -anapaestic -anapaestical -anapaestically -anapaganize -anapaite -anapanapa -anapeiratic -anaphalantiasis -Anaphalis -anaphase -Anaphe -anaphia -anaphora -anaphoral -anaphoria -anaphoric -anaphorical -anaphrodisia -anaphrodisiac -anaphroditic -anaphroditous -anaphylactic -anaphylactin -anaphylactogen -anaphylactogenic -anaphylactoid -anaphylatoxin -anaphylaxis -anaphyte -anaplasia -anaplasis -anaplasm -Anaplasma -anaplasmosis -anaplastic -anaplasty -anaplerosis -anaplerotic -anapnea -anapneic -anapnoeic -anapnograph -anapnoic -anapnometer -anapodeictic -anapophysial -anapophysis -anapsid -Anapsida -anapsidan -Anapterygota -anapterygote -anapterygotism -anapterygotous -Anaptomorphidae -Anaptomorphus -anaptotic -anaptychus -anaptyctic -anaptyctical -anaptyxis -anaqua -anarcestean -Anarcestes -anarch -anarchal -anarchial -anarchic -anarchical -anarchically -anarchism -anarchist -anarchistic -anarchize -anarchoindividualist -anarchosocialist -anarchosyndicalism -anarchosyndicalist -anarchy -anarcotin -anareta -anaretic -anaretical -anargyros -anarthria -anarthric -anarthropod -Anarthropoda -anarthropodous -anarthrosis -anarthrous -anarthrously -anarthrousness -anartismos -anarya -Anaryan -Anas -Anasa -anasarca -anasarcous -Anasazi -anaschistic -anaseismic -Anasitch -anaspadias -anaspalin -Anaspida -Anaspidacea -Anaspides -anastalsis -anastaltic -Anastasia -Anastasian -anastasimon -anastasimos -anastasis -Anastasius -anastate -anastatic -Anastatica -Anastatus -anastigmat -anastigmatic -anastomose -anastomosis -anastomotic -Anastomus -anastrophe -Anastrophia -Anat -anatase -anatexis -anathema -anathematic -anathematical -anathematically -anathematism -anathematization -anathematize -anathematizer -anatheme -anathemize -Anatherum -Anatidae -anatifa -Anatifae -anatifer -anatiferous -Anatinacea -Anatinae -anatine -anatocism -Anatole -Anatolian -Anatolic -Anatoly -anatomic -anatomical -anatomically -anatomicobiological -anatomicochirurgical -anatomicomedical -anatomicopathologic -anatomicopathological -anatomicophysiologic -anatomicophysiological -anatomicosurgical -anatomism -anatomist -anatomization -anatomize -anatomizer -anatomopathologic -anatomopathological -anatomy -anatopism -anatox -anatoxin -anatreptic -anatripsis -anatripsology -anatriptic -anatron -anatropal -anatropia -anatropous -Anatum -anaudia -anaunter -anaunters -Anax -Anaxagorean -Anaxagorize -anaxial -Anaximandrian -anaxon -anaxone -Anaxonia -anay -anazoturia -anba -anbury -Ancerata -ancestor -ancestorial -ancestorially -ancestral -ancestrally -ancestress -ancestrial -ancestrian -ancestry -Ancha -Anchat -Anchietea -anchietin -anchietine -anchieutectic -anchimonomineral -Anchisaurus -Anchises -Anchistea -Anchistopoda -anchithere -anchitherioid -anchor -anchorable -anchorage -anchorate -anchored -anchorer -anchoress -anchoret -anchoretic -anchoretical -anchoretish -anchoretism -anchorhold -anchorite -anchoritess -anchoritic -anchoritical -anchoritish -anchoritism -anchorless -anchorlike -anchorwise -anchovy -Anchtherium -Anchusa -anchusin -anchusine -anchylose -anchylosis -ancience -anciency -ancient -ancientism -anciently -ancientness -ancientry -ancienty -ancile -ancilla -ancillary -ancipital -ancipitous -Ancistrocladaceae -ancistrocladaceous -Ancistrocladus -ancistroid -ancon -Ancona -anconad -anconagra -anconal -ancone -anconeal -anconeous -anconeus -anconitis -anconoid -ancony -ancora -ancoral -Ancyloceras -Ancylocladus -Ancylodactyla -ancylopod -Ancylopoda -Ancylostoma -ancylostome -ancylostomiasis -Ancylostomum -Ancylus -Ancyrean -Ancyrene -and -anda -andabatarian -Andalusian -andalusite -Andaman -Andamanese -andante -andantino -Andaqui -Andaquian -Andarko -Andaste -Ande -Andean -Anderson -Andesic -andesine -andesinite -andesite -andesitic -Andevo -Andhra -Andi -Andian -Andine -Andira -andirin -andirine -andiroba -andiron -Andoke -andorite -Andorobo -Andorran -andouillet -andradite -andranatomy -andrarchy -Andre -Andrea -Andreaea -Andreaeaceae -Andreaeales -Andreas -Andrena -andrenid -Andrenidae -Andrew -andrewsite -Andria -Andriana -Andrias -andric -Andries -androcentric -androcephalous -androcephalum -androclinium -Androclus -androconium -androcracy -androcratic -androcyte -androdioecious -androdioecism -androdynamous -androecial -androecium -androgametangium -androgametophore -androgen -androgenesis -androgenetic -androgenic -androgenous -androginous -androgone -androgonia -androgonial -androgonidium -androgonium -Andrographis -andrographolide -androgynal -androgynary -androgyne -androgyneity -androgynia -androgynism -androgynous -androgynus -androgyny -android -androidal -androkinin -androl -androlepsia -androlepsy -Andromache -andromania -Andromaque -Andromeda -Andromede -andromedotoxin -andromonoecious -andromonoecism -andromorphous -andron -Andronicus -andronitis -andropetalar -andropetalous -androphagous -androphobia -androphonomania -androphore -androphorous -androphorum -androphyll -Andropogon -Androsace -Androscoggin -androseme -androsin -androsphinx -androsporangium -androspore -androsterone -androtauric -androtomy -Andy -anear -aneath -anecdota -anecdotage -anecdotal -anecdotalism -anecdote -anecdotic -anecdotical -anecdotically -anecdotist -anele -anelectric -anelectrode -anelectrotonic -anelectrotonus -anelytrous -anematosis -Anemia -anemia -anemic -anemobiagraph -anemochord -anemoclastic -anemogram -anemograph -anemographic -anemographically -anemography -anemological -anemology -anemometer -anemometric -anemometrical -anemometrically -anemometrograph -anemometrographic -anemometrographically -anemometry -anemonal -anemone -Anemonella -anemonin -anemonol -anemony -anemopathy -anemophile -anemophilous -anemophily -Anemopsis -anemoscope -anemosis -anemotaxis -anemotropic -anemotropism -anencephalia -anencephalic -anencephalotrophia -anencephalous -anencephalus -anencephaly -anend -anenergia -anenst -anent -anenterous -anepia -anepigraphic -anepigraphous -anepiploic -anepithymia -anerethisia -aneretic -anergia -anergic -anergy -anerly -aneroid -aneroidograph -anerotic -anerythroplasia -anerythroplastic -anes -anesis -anesthesia -anesthesiant -anesthesimeter -anesthesiologist -anesthesiology -anesthesis -anesthetic -anesthetically -anesthetist -anesthetization -anesthetize -anesthetizer -anesthyl -anethole -Anethum -anetiological -aneuploid -aneuploidy -aneuria -aneuric -aneurilemmic -aneurin -aneurism -aneurismally -aneurysm -aneurysmal -aneurysmally -aneurysmatic -anew -Anezeh -anfractuose -anfractuosity -anfractuous -anfractuousness -anfracture -Angami -Angara -angaralite -angaria -angary -Angdistis -angekok -angel -Angela -angelate -angeldom -Angeleno -angelet -angeleyes -angelfish -angelhood -angelic -Angelica -angelica -Angelical -angelical -angelically -angelicalness -Angelican -angelicic -angelicize -angelico -angelin -Angelina -angeline -angelique -angelize -angellike -Angelo -angelocracy -angelographer -angelolater -angelolatry -angelologic -angelological -angelology -angelomachy -Angelonia -angelophany -angelot -angelship -Angelus -anger -angerly -Angerona -Angeronalia -Angers -Angetenar -Angevin -angeyok -angiasthenia -angico -Angie -angiectasis -angiectopia -angiemphraxis -angiitis -angild -angili -angina -anginal -anginiform -anginoid -anginose -anginous -angioasthenia -angioataxia -angioblast -angioblastic -angiocarditis -angiocarp -angiocarpian -angiocarpic -angiocarpous -angiocavernous -angiocholecystitis -angiocholitis -angiochondroma -angioclast -angiocyst -angiodermatitis -angiodiascopy -angioelephantiasis -angiofibroma -angiogenesis -angiogenic -angiogeny -angioglioma -angiograph -angiography -angiohyalinosis -angiohydrotomy -angiohypertonia -angiohypotonia -angioid -angiokeratoma -angiokinesis -angiokinetic -angioleucitis -angiolipoma -angiolith -angiology -angiolymphitis -angiolymphoma -angioma -angiomalacia -angiomatosis -angiomatous -angiomegaly -angiometer -angiomyocardiac -angiomyoma -angiomyosarcoma -angioneoplasm -angioneurosis -angioneurotic -angionoma -angionosis -angioparalysis -angioparalytic -angioparesis -angiopathy -angiophorous -angioplany -angioplasty -angioplerosis -angiopoietic -angiopressure -angiorrhagia -angiorrhaphy -angiorrhea -angiorrhexis -angiosarcoma -angiosclerosis -angiosclerotic -angioscope -angiosis -angiospasm -angiospastic -angiosperm -Angiospermae -angiospermal -angiospermatous -angiospermic -angiospermous -angiosporous -angiostegnosis -angiostenosis -angiosteosis -angiostomize -angiostomy -angiostrophy -angiosymphysis -angiotasis -angiotelectasia -angiothlipsis -angiotome -angiotomy -angiotonic -angiotonin -angiotribe -angiotripsy -angiotrophic -Angka -anglaise -angle -angleberry -angled -anglehook -anglepod -angler -Angles -anglesite -anglesmith -angletouch -angletwitch -anglewing -anglewise -angleworm -Anglian -Anglic -Anglican -Anglicanism -Anglicanize -Anglicanly -Anglicanum -Anglicism -Anglicist -Anglicization -anglicization -Anglicize -anglicize -Anglification -Anglify -anglimaniac -angling -Anglish -Anglist -Anglistics -Anglogaea -Anglogaean -angloid -Angloman -Anglomane -Anglomania -Anglomaniac -Anglophile -Anglophobe -Anglophobia -Anglophobiac -Anglophobic -Anglophobist -ango -Angola -angolar -Angolese -angor -Angora -angostura -Angouleme -Angoumian -Angraecum -angrily -angriness -angrite -angry -angst -angster -Angstrom -angstrom -anguid -Anguidae -anguiform -Anguilla -Anguillaria -Anguillidae -anguilliform -anguilloid -Anguillula -Anguillulidae -Anguimorpha -anguine -anguineal -anguineous -Anguinidae -anguiped -Anguis -anguis -anguish -anguished -anguishful -anguishous -anguishously -angula -angular -angulare -angularity -angularization -angularize -angularly -angularness -angulate -angulated -angulately -angulateness -angulation -angulatogibbous -angulatosinuous -anguliferous -angulinerved -Anguloa -angulodentate -angulometer -angulosity -angulosplenial -angulous -anguria -Angus -angusticlave -angustifoliate -angustifolious -angustirostrate -angustisellate -angustiseptal -angustiseptate -angwantibo -anhalamine -anhaline -anhalonine -Anhalonium -anhalouidine -anhang -Anhanga -anharmonic -anhedonia -anhedral -anhedron -anhelation -anhelous -anhematosis -anhemolytic -anhidrosis -anhidrotic -anhima -Anhimae -Anhimidae -anhinga -anhistic -anhistous -anhungered -anhungry -anhydrate -anhydration -anhydremia -anhydremic -anhydric -anhydride -anhydridization -anhydridize -anhydrite -anhydrization -anhydrize -anhydroglocose -anhydromyelia -anhydrous -anhydroxime -anhysteretic -ani -Aniba -Anice -aniconic -aniconism -anicular -anicut -anidian -anidiomatic -anidiomatical -anidrosis -Aniellidae -aniente -anigh -anight -anights -anil -anilao -anilau -anile -anileness -anilic -anilid -anilide -anilidic -anilidoxime -aniline -anilinism -anilinophile -anilinophilous -anility -anilla -anilopyrin -anilopyrine -anima -animability -animable -animableness -animadversion -animadversional -animadversive -animadversiveness -animadvert -animadverter -animal -animalcula -animalculae -animalcular -animalcule -animalculine -animalculism -animalculist -animalculous -animalculum -animalhood -Animalia -animalian -animalic -animalier -animalish -animalism -animalist -animalistic -animality -Animalivora -animalivore -animalivorous -animalization -animalize -animally -animastic -animastical -animate -animated -animatedly -animately -animateness -animater -animating -animatingly -animation -animatism -animatistic -animative -animatograph -animator -anime -animi -Animikean -animikite -animism -animist -animistic -animize -animosity -animotheism -animous -animus -anion -anionic -aniridia -anis -anisal -anisalcohol -anisaldehyde -anisaldoxime -anisamide -anisandrous -anisanilide -anisate -anischuria -anise -aniseed -aniseikonia -aniseikonic -aniselike -aniseroot -anisette -anisic -anisidin -anisidine -anisil -anisilic -anisobranchiate -anisocarpic -anisocarpous -anisocercal -anisochromatic -anisochromia -anisocoria -anisocotyledonous -anisocotyly -anisocratic -anisocycle -anisocytosis -anisodactyl -Anisodactyla -Anisodactyli -anisodactylic -anisodactylous -anisodont -anisogamete -anisogamous -anisogamy -anisogenous -anisogeny -anisognathism -anisognathous -anisogynous -anisoin -anisole -anisoleucocytosis -Anisomeles -anisomelia -anisomelus -anisomeric -anisomerous -anisometric -anisometrope -anisometropia -anisometropic -anisomyarian -Anisomyodi -anisomyodian -anisomyodous -anisopetalous -anisophyllous -anisophylly -anisopia -anisopleural -anisopleurous -anisopod -Anisopoda -anisopodal -anisopodous -anisopogonous -Anisoptera -anisopterous -anisosepalous -anisospore -anisostaminous -anisostemonous -anisosthenic -anisostichous -Anisostichus -anisostomous -anisotonic -anisotropal -anisotrope -anisotropic -anisotropical -anisotropically -anisotropism -anisotropous -anisotropy -anisoyl -anisum -anisuria -anisyl -anisylidene -Anita -anither -anitrogenous -anjan -Anjou -ankaramite -ankaratrite -ankee -anker -ankerite -ankh -ankle -anklebone -anklejack -anklet -anklong -Ankoli -Ankou -ankus -ankusha -ankylenteron -ankyloblepharon -ankylocheilia -ankylodactylia -ankylodontia -ankyloglossia -ankylomele -ankylomerism -ankylophobia -ankylopodia -ankylopoietic -ankyloproctia -ankylorrhinia -Ankylosaurus -ankylose -ankylosis -ankylostoma -ankylotia -ankylotic -ankylotome -ankylotomy -ankylurethria -ankyroid -anlace -anlaut -Ann -ann -Anna -anna -Annabel -annabergite -annal -annale -annaline -annalism -annalist -annalistic -annalize -annals -Annam -Annamese -Annamite -Annamitic -Annapurna -Annard -annat -annates -annatto -Anne -anneal -annealer -annectent -annection -annelid -Annelida -annelidan -Annelides -annelidian -annelidous -annelism -Annellata -anneloid -annerodite -Anneslia -annet -Annette -annex -annexa -annexable -annexal -annexation -annexational -annexationist -annexer -annexion -annexionist -annexitis -annexive -annexment -annexure -annidalin -Annie -Anniellidae -annihilability -annihilable -annihilate -annihilation -annihilationism -annihilationist -annihilative -annihilator -annihilatory -Annist -annite -anniversarily -anniversariness -anniversary -anniverse -annodated -Annona -annona -Annonaceae -annonaceous -annotate -annotater -annotation -annotative -annotator -annotatory -annotine -annotinous -announce -announceable -announcement -announcer -annoy -annoyance -annoyancer -annoyer -annoyful -annoying -annoyingly -annoyingness -annoyment -annual -annualist -annualize -annually -annuary -annueler -annuent -annuitant -annuity -annul -annular -Annularia -annularity -annularly -annulary -Annulata -annulate -annulated -annulation -annulet -annulettee -annulism -annullable -annullate -annullation -annuller -annulment -annuloid -Annuloida -Annulosa -annulosan -annulose -annulus -annunciable -annunciate -annunciation -annunciative -annunciator -annunciatory -anoa -Anobiidae -anocarpous -anociassociation -anococcygeal -anodal -anode -anodendron -anodic -anodically -anodize -Anodon -Anodonta -anodontia -anodos -anodyne -anodynia -anodynic -anodynous -anoegenetic -anoesia -anoesis -anoestrous -anoestrum -anoestrus -anoetic -anogenic -anogenital -Anogra -anoil -anoine -anoint -anointer -anointment -anole -anoli -anolian -Anolis -Anolympiad -anolyte -Anomala -anomaliflorous -anomaliped -anomalism -anomalist -anomalistic -anomalistical -anomalistically -anomalocephalus -anomaloflorous -Anomalogonatae -anomalogonatous -Anomalon -anomalonomy -Anomalopteryx -anomaloscope -anomalotrophy -anomalous -anomalously -anomalousness -anomalure -Anomaluridae -Anomalurus -anomaly -Anomatheca -Anomia -Anomiacea -Anomiidae -anomite -anomocarpous -anomodont -Anomodontia -Anomoean -Anomoeanism -anomophyllous -anomorhomboid -anomorhomboidal -anomphalous -Anomura -anomural -anomuran -anomurous -anomy -anon -anonang -anoncillo -anonol -anonychia -anonym -anonyma -anonymity -anonymous -anonymously -anonymousness -anonymuncule -anoopsia -anoperineal -anophele -Anopheles -Anophelinae -anopheline -anophoria -anophthalmia -anophthalmos -Anophthalmus -anophyte -anopia -anopisthographic -Anopla -Anoplanthus -anoplocephalic -anoplonemertean -Anoplonemertini -anoplothere -Anoplotheriidae -anoplotherioid -Anoplotherium -anoplotheroid -Anoplura -anopluriform -anopsia -anopubic -anorak -anorchia -anorchism -anorchous -anorchus -anorectal -anorectic -anorectous -anorexia -anorexy -anorgana -anorganic -anorganism -anorganology -anormal -anormality -anorogenic -anorth -anorthic -anorthite -anorthitic -anorthitite -anorthoclase -anorthographic -anorthographical -anorthographically -anorthography -anorthophyre -anorthopia -anorthoscope -anorthose -anorthosite -anoscope -anoscopy -Anosia -anosmatic -anosmia -anosmic -anosphrasia -anosphresia -anospinal -anostosis -Anostraca -anoterite -another -anotherkins -anotia -anotropia -anotta -anotto -anotus -anounou -Anous -anovesical -anoxemia -anoxemic -anoxia -anoxic -anoxidative -anoxybiosis -anoxybiotic -anoxyscope -ansa -ansar -ansarian -Ansarie -ansate -ansation -Anseis -Ansel -Anselm -Anselmian -Anser -anserated -Anseres -Anseriformes -Anserinae -anserine -anserous -anspessade -ansu -ansulate -answer -answerability -answerable -answerableness -answerably -answerer -answeringly -answerless -answerlessly -ant -Anta -anta -antacid -antacrid -antadiform -Antaean -Antaeus -antagonism -antagonist -antagonistic -antagonistical -antagonistically -antagonization -antagonize -antagonizer -antagony -Antaimerina -Antaios -Antaiva -antal -antalgesic -antalgol -antalkali -antalkaline -antambulacral -antanacathartic -antanaclasis -Antanandro -antanemic -antapex -antaphrodisiac -antaphroditic -antapocha -antapodosis -antapology -antapoplectic -Antar -Antara -antarchism -antarchist -antarchistic -antarchistical -antarchy -Antarctalia -Antarctalian -antarctic -Antarctica -antarctica -antarctical -antarctically -Antarctogaea -Antarctogaean -Antares -antarthritic -antasphyctic -antasthenic -antasthmatic -antatrophic -antdom -ante -anteact -anteal -anteambulate -anteambulation -anteater -antebaptismal -antebath -antebrachial -antebrachium -antebridal -antecabinet -antecaecal -antecardium -antecavern -antecedaneous -antecedaneously -antecede -antecedence -antecedency -antecedent -antecedental -antecedently -antecessor -antechamber -antechapel -Antechinomys -antechoir -antechurch -anteclassical -antecloset -antecolic -antecommunion -anteconsonantal -antecornu -antecourt -antecoxal -antecubital -antecurvature -antedate -antedawn -antediluvial -antediluvially -antediluvian -Antedon -antedonin -antedorsal -antefebrile -antefix -antefixal -anteflected -anteflexed -anteflexion -antefurca -antefurcal -antefuture -antegarden -antegrade -antehall -antehistoric -antehuman -antehypophysis -anteinitial -antejentacular -antejudiciary -antejuramentum -antelabium -antelegal -antelocation -antelope -antelopian -antelucan -antelude -anteluminary -antemarginal -antemarital -antemedial -antemeridian -antemetallic -antemetic -antemillennial -antemingent -antemortal -antemundane -antemural -antenarial -antenatal -antenatalitial -antenati -antenave -antenna -antennae -antennal -Antennaria -antennariid -Antennariidae -Antennarius -antennary -Antennata -antennate -antenniferous -antenniform -antennula -antennular -antennulary -antennule -antenodal -antenoon -Antenor -antenumber -anteoccupation -anteocular -anteopercle -anteoperculum -anteorbital -antepagmenta -antepagments -antepalatal -antepaschal -antepast -antepatriarchal -antepectoral -antepectus -antependium -antepenult -antepenultima -antepenultimate -antephialtic -antepileptic -antepirrhema -anteporch -anteportico -anteposition -anteposthumous -anteprandial -antepredicament -antepredicamental -antepreterit -antepretonic -anteprohibition -anteprostate -anteprostatic -antepyretic -antequalm -antereformation -antereformational -anteresurrection -anterethic -anterevolutional -anterevolutionary -anteriad -anterior -anteriority -anteriorly -anteriorness -anteroclusion -anterodorsal -anteroexternal -anterofixation -anteroflexion -anterofrontal -anterograde -anteroinferior -anterointerior -anterointernal -anterolateral -anterolaterally -anteromedial -anteromedian -anteroom -anteroparietal -anteroposterior -anteroposteriorly -anteropygal -anterospinal -anterosuperior -anteroventral -anteroventrally -antes -antescript -antesignanus -antespring -antestature -antesternal -antesternum -antesunrise -antesuperior -antetemple -antetype -Anteva -antevenient -anteversion -antevert -antevocalic -antewar -anthecological -anthecologist -anthecology -Antheia -anthela -anthelion -anthelmintic -anthem -anthema -anthemene -anthemia -Anthemideae -anthemion -Anthemis -anthemwise -anthemy -anther -Antheraea -antheral -Anthericum -antherid -antheridial -antheridiophore -antheridium -antheriferous -antheriform -antherless -antherogenous -antheroid -antherozoid -antherozoidal -antherozooid -antherozooidal -anthesis -Anthesteria -Anthesteriac -anthesterin -Anthesterion -anthesterol -antheximeter -Anthicidae -Anthidium -anthill -Anthinae -anthine -anthobiology -anthocarp -anthocarpous -anthocephalous -Anthoceros -Anthocerotaceae -Anthocerotales -anthocerote -anthochlor -anthochlorine -anthoclinium -anthocyan -anthocyanidin -anthocyanin -anthodium -anthoecological -anthoecologist -anthoecology -anthogenesis -anthogenetic -anthogenous -anthography -anthoid -anthokyan -antholite -anthological -anthologically -anthologion -anthologist -anthologize -anthology -antholysis -Antholyza -anthomania -anthomaniac -Anthomedusae -anthomedusan -Anthomyia -anthomyiid -Anthomyiidae -Anthonin -Anthonomus -Anthony -anthood -anthophagous -Anthophila -anthophile -anthophilian -anthophilous -anthophobia -Anthophora -anthophore -Anthophoridae -anthophorous -anthophyllite -anthophyllitic -Anthophyta -anthophyte -anthorine -anthosiderite -Anthospermum -anthotaxis -anthotaxy -anthotropic -anthotropism -anthoxanthin -Anthoxanthum -Anthozoa -anthozoan -anthozoic -anthozooid -anthozoon -anthracemia -anthracene -anthraceniferous -anthrachrysone -anthracia -anthracic -anthraciferous -anthracin -anthracite -anthracitic -anthracitiferous -anthracitious -anthracitism -anthracitization -anthracnose -anthracnosis -anthracocide -anthracoid -anthracolithic -anthracomancy -Anthracomarti -anthracomartian -Anthracomartus -anthracometer -anthracometric -anthraconecrosis -anthraconite -Anthracosaurus -anthracosis -anthracothere -Anthracotheriidae -Anthracotherium -anthracotic -anthracyl -anthradiol -anthradiquinone -anthraflavic -anthragallol -anthrahydroquinone -anthramine -anthranil -anthranilate -anthranilic -anthranol -anthranone -anthranoyl -anthranyl -anthraphenone -anthrapurpurin -anthrapyridine -anthraquinol -anthraquinone -anthraquinonyl -anthrarufin -anthratetrol -anthrathiophene -anthratriol -anthrax -anthraxolite -anthraxylon -Anthrenus -anthribid -Anthribidae -Anthriscus -anthrohopobiological -anthroic -anthrol -anthrone -anthropic -anthropical -Anthropidae -anthropobiologist -anthropobiology -anthropocentric -anthropocentrism -anthropoclimatologist -anthropoclimatology -anthropocosmic -anthropodeoxycholic -Anthropodus -anthropogenesis -anthropogenetic -anthropogenic -anthropogenist -anthropogenous -anthropogeny -anthropogeographer -anthropogeographical -anthropogeography -anthropoglot -anthropogony -anthropography -anthropoid -anthropoidal -Anthropoidea -anthropoidean -anthropolater -anthropolatric -anthropolatry -anthropolite -anthropolithic -anthropolitic -anthropological -anthropologically -anthropologist -anthropology -anthropomancy -anthropomantic -anthropomantist -anthropometer -anthropometric -anthropometrical -anthropometrically -anthropometrist -anthropometry -anthropomorph -Anthropomorpha -anthropomorphic -anthropomorphical -anthropomorphically -Anthropomorphidae -anthropomorphism -anthropomorphist -anthropomorphite -anthropomorphitic -anthropomorphitical -anthropomorphitism -anthropomorphization -anthropomorphize -anthropomorphological -anthropomorphologically -anthropomorphology -anthropomorphosis -anthropomorphotheist -anthropomorphous -anthropomorphously -anthroponomical -anthroponomics -anthroponomist -anthroponomy -anthropopathia -anthropopathic -anthropopathically -anthropopathism -anthropopathite -anthropopathy -anthropophagi -anthropophagic -anthropophagical -anthropophaginian -anthropophagism -anthropophagist -anthropophagistic -anthropophagite -anthropophagize -anthropophagous -anthropophagously -anthropophagy -anthropophilous -anthropophobia -anthropophuism -anthropophuistic -anthropophysiography -anthropophysite -Anthropopithecus -anthropopsychic -anthropopsychism -Anthropos -anthroposcopy -anthroposociologist -anthroposociology -anthroposomatology -anthroposophical -anthroposophist -anthroposophy -anthropoteleoclogy -anthropoteleological -anthropotheism -anthropotomical -anthropotomist -anthropotomy -anthropotoxin -Anthropozoic -anthropurgic -anthroropolith -anthroxan -anthroxanic -anthryl -anthrylene -Anthurium -Anthus -Anthyllis -anthypophora -anthypophoretic -Anti -anti -antiabolitionist -antiabrasion -antiabrin -antiabsolutist -antiacid -antiadiaphorist -antiaditis -antiadministration -antiae -antiaesthetic -antiager -antiagglutinating -antiagglutinin -antiaggression -antiaggressionist -antiaggressive -antiaircraft -antialbumid -antialbumin -antialbumose -antialcoholic -antialcoholism -antialcoholist -antialdoxime -antialexin -antialien -antiamboceptor -antiamusement -antiamylase -antianaphylactogen -antianaphylaxis -antianarchic -antianarchist -antiangular -antiannexation -antiannexationist -antianopheline -antianthrax -antianthropocentric -antianthropomorphism -antiantibody -antiantidote -antiantienzyme -antiantitoxin -antiaphrodisiac -antiaphthic -antiapoplectic -antiapostle -antiaquatic -antiar -Antiarcha -Antiarchi -antiarin -Antiaris -antiaristocrat -antiarthritic -antiascetic -antiasthmatic -antiastronomical -antiatheism -antiatheist -antiatonement -antiattrition -antiautolysin -antibacchic -antibacchius -antibacterial -antibacteriolytic -antiballooner -antibalm -antibank -antibasilican -antibenzaldoxime -antiberiberin -antibibliolatry -antibigotry -antibilious -antibiont -antibiosis -antibiotic -antibishop -antiblastic -antiblennorrhagic -antiblock -antiblue -antibody -antiboxing -antibreakage -antibridal -antibromic -antibubonic -Antiburgher -antic -anticachectic -antical -anticalcimine -anticalculous -anticalligraphic -anticancer -anticapital -anticapitalism -anticapitalist -anticardiac -anticardium -anticarious -anticarnivorous -anticaste -anticatalase -anticatalyst -anticatalytic -anticatalyzer -anticatarrhal -anticathexis -anticathode -anticaustic -anticensorship -anticentralization -anticephalalgic -anticeremonial -anticeremonialism -anticeremonialist -anticheater -antichlor -antichlorine -antichloristic -antichlorotic -anticholagogue -anticholinergic -antichoromanic -antichorus -antichresis -antichretic -antichrist -antichristian -antichristianity -antichristianly -antichrome -antichronical -antichronically -antichthon -antichurch -antichurchian -antichymosin -anticipant -anticipatable -anticipate -anticipation -anticipative -anticipatively -anticipator -anticipatorily -anticipatory -anticivic -anticivism -anticize -anticker -anticlactic -anticlassical -anticlassicist -Anticlea -anticlergy -anticlerical -anticlericalism -anticlimactic -anticlimax -anticlinal -anticline -anticlinorium -anticlockwise -anticlogging -anticly -anticnemion -anticness -anticoagulant -anticoagulating -anticoagulative -anticoagulin -anticogitative -anticolic -anticombination -anticomet -anticomment -anticommercial -anticommunist -anticomplement -anticomplementary -anticomplex -anticonceptionist -anticonductor -anticonfederationist -anticonformist -anticonscience -anticonscription -anticonscriptive -anticonstitutional -anticonstitutionalist -anticonstitutionally -anticontagion -anticontagionist -anticontagious -anticonventional -anticonventionalism -anticonvulsive -anticor -anticorn -anticorrosion -anticorrosive -anticorset -anticosine -anticosmetic -anticouncil -anticourt -anticourtier -anticous -anticovenanter -anticovenanting -anticreation -anticreative -anticreator -anticreep -anticreeper -anticreeping -anticrepuscular -anticrepuscule -anticrisis -anticritic -anticritique -anticrochet -anticrotalic -anticryptic -anticum -anticyclic -anticyclone -anticyclonic -anticyclonically -anticynic -anticytolysin -anticytotoxin -antidactyl -antidancing -antidecalogue -antideflation -antidemocrat -antidemocratic -antidemocratical -antidemoniac -antidetonant -antidetonating -antidiabetic -antidiastase -Antidicomarian -Antidicomarianite -antidictionary -antidiffuser -antidinic -antidiphtheria -antidiphtheric -antidiphtherin -antidiphtheritic -antidisciplinarian -antidivine -antidivorce -antidogmatic -antidomestic -antidominican -Antidorcas -antidoron -antidotal -antidotally -antidotary -antidote -antidotical -antidotically -antidotism -antidraft -antidrag -antidromal -antidromic -antidromically -antidromous -antidromy -antidrug -antiduke -antidumping -antidynamic -antidynastic -antidyscratic -antidysenteric -antidysuric -antiecclesiastic -antiecclesiastical -antiedemic -antieducation -antieducational -antiegotism -antiejaculation -antiemetic -antiemperor -antiempirical -antiendotoxin -antiendowment -antienergistic -antienthusiastic -antienzyme -antienzymic -antiepicenter -antiepileptic -antiepiscopal -antiepiscopist -antiepithelial -antierosion -antierysipelas -Antietam -antiethnic -antieugenic -antievangelical -antievolution -antievolutionist -antiexpansionist -antiexporting -antiextreme -antieyestrain -antiface -antifaction -antifame -antifanatic -antifat -antifatigue -antifebrile -antifederal -antifederalism -antifederalist -antifelon -antifelony -antifeminism -antifeminist -antiferment -antifermentative -antifertilizer -antifeudal -antifeudalism -antifibrinolysin -antifibrinolysis -antifideism -antifire -antiflash -antiflattering -antiflatulent -antiflux -antifoam -antifoaming -antifogmatic -antiforeign -antiforeignism -antiformin -antifouler -antifouling -antifowl -antifreeze -antifreezing -antifriction -antifrictional -antifrost -antifundamentalist -antifungin -antigalactagogue -antigalactic -antigambling -antiganting -antigen -antigenic -antigenicity -antighostism -antigigmanic -antiglare -antiglyoxalase -antigod -Antigone -antigonococcic -Antigonon -antigonorrheic -Antigonus -antigorite -antigovernment -antigraft -antigrammatical -antigraph -antigravitate -antigravitational -antigropelos -antigrowth -Antiguan -antiguggler -antigyrous -antihalation -antiharmonist -antihectic -antihelix -antihelminthic -antihemagglutinin -antihemisphere -antihemoglobin -antihemolysin -antihemolytic -antihemorrhagic -antihemorrheidal -antihero -antiheroic -antiheroism -antiheterolysin -antihidrotic -antihierarchical -antihierarchist -antihistamine -antihistaminic -antiholiday -antihormone -antihuff -antihum -antihuman -antihumbuggist -antihunting -antihydrophobic -antihydropic -antihydropin -antihygienic -antihylist -antihypnotic -antihypochondriac -antihypophora -antihysteric -Antikamnia -antikathode -antikenotoxin -antiketogen -antiketogenesis -antiketogenic -antikinase -antiking -antiknock -antilabor -antilaborist -antilacrosse -antilacrosser -antilactase -antilapsarian -antileague -antilegalist -antilegomena -antilemic -antilens -antilepsis -antileptic -antilethargic -antileveling -Antilia -antiliberal -antilibration -antilift -antilipase -antilipoid -antiliquor -antilithic -antiliturgical -antiliturgist -Antillean -antilobium -Antilocapra -Antilocapridae -Antilochus -antiloemic -antilogarithm -antilogic -antilogical -antilogism -antilogous -antilogy -antiloimic -Antilope -Antilopinae -antilottery -antiluetin -antilynching -antilysin -antilysis -antilyssic -antilytic -antimacassar -antimachine -antimachinery -antimagistratical -antimalaria -antimalarial -antimallein -antimaniac -antimaniacal -Antimarian -antimark -antimartyr -antimask -antimasker -Antimason -Antimasonic -Antimasonry -antimasque -antimasquer -antimasquerade -antimaterialist -antimaterialistic -antimatrimonial -antimatrimonialist -antimedical -antimedieval -antimelancholic -antimellin -antimeningococcic -antimension -antimensium -antimephitic -antimere -antimerger -antimeric -Antimerina -antimerism -antimeristem -antimetabole -antimetathesis -antimetathetic -antimeter -antimethod -antimetrical -antimetropia -antimetropic -antimiasmatic -antimicrobic -antimilitarism -antimilitarist -antimilitary -antiministerial -antiministerialist -antiminsion -antimiscegenation -antimission -antimissionary -antimissioner -antimixing -antimnemonic -antimodel -antimodern -antimonarchial -antimonarchic -antimonarchical -antimonarchically -antimonarchicalness -antimonarchist -antimonate -antimonial -antimoniate -antimoniated -antimonic -antimonid -antimonide -antimoniferous -antimonious -antimonite -antimonium -antimoniuret -antimoniureted -antimoniuretted -antimonopolist -antimonopoly -antimonsoon -antimony -antimonyl -antimoral -antimoralism -antimoralist -antimosquito -antimusical -antimycotic -antimythic -antimythical -antinarcotic -antinarrative -antinational -antinationalist -antinationalistic -antinatural -antinegro -antinegroism -antineologian -antinephritic -antinepotic -antineuralgic -antineuritic -antineurotoxin -antineutral -antinial -antinicotine -antinion -antinode -antinoise -antinome -antinomian -antinomianism -antinomic -antinomical -antinomist -antinomy -antinormal -antinosarian -Antinous -Antiochene -Antiochian -Antiochianism -antiodont -antiodontalgic -Antiope -antiopelmous -antiophthalmic -antiopium -antiopiumist -antiopiumite -antioptimist -antioptionist -antiorgastic -antiorthodox -antioxidant -antioxidase -antioxidizer -antioxidizing -antioxygen -antioxygenation -antioxygenator -antioxygenic -antipacifist -antipapacy -antipapal -antipapalist -antipapism -antipapist -antipapistical -antiparabema -antiparagraphe -antiparagraphic -antiparallel -antiparallelogram -antiparalytic -antiparalytical -antiparasitic -antiparastatitis -antiparliament -antiparliamental -antiparliamentarist -antiparliamentary -antipart -Antipasch -Antipascha -antipass -antipastic -Antipatharia -antipatharian -antipathetic -antipathetical -antipathetically -antipatheticalness -antipathic -Antipathida -antipathist -antipathize -antipathogen -antipathy -antipatriarch -antipatriarchal -antipatriot -antipatriotic -antipatriotism -antipedal -Antipedobaptism -Antipedobaptist -antipeduncular -antipellagric -antipepsin -antipeptone -antiperiodic -antiperistalsis -antiperistaltic -antiperistasis -antiperistatic -antiperistatical -antiperistatically -antipersonnel -antiperthite -antipestilential -antipetalous -antipewism -antiphagocytic -antipharisaic -antipharmic -antiphase -antiphilosophic -antiphilosophical -antiphlogistian -antiphlogistic -antiphon -antiphonal -antiphonally -antiphonary -antiphoner -antiphonetic -antiphonic -antiphonical -antiphonically -antiphonon -antiphony -antiphrasis -antiphrastic -antiphrastical -antiphrastically -antiphthisic -antiphthisical -antiphylloxeric -antiphysic -antiphysical -antiphysician -antiplague -antiplanet -antiplastic -antiplatelet -antipleion -antiplenist -antiplethoric -antipleuritic -antiplurality -antipneumococcic -antipodagric -antipodagron -antipodal -antipode -antipodean -antipodes -antipodic -antipodism -antipodist -antipoetic -antipoints -antipolar -antipole -antipolemist -antipolitical -antipollution -antipolo -antipolygamy -antipolyneuritic -antipool -antipooling -antipope -antipopery -antipopular -antipopulationist -antiportable -antiposition -antipoverty -antipragmatic -antipragmatist -antiprecipitin -antipredeterminant -antiprelate -antiprelatic -antiprelatist -antipreparedness -antiprestidigitation -antipriest -antipriestcraft -antiprime -antiprimer -antipriming -antiprinciple -antiprism -antiproductionist -antiprofiteering -antiprohibition -antiprohibitionist -antiprojectivity -antiprophet -antiprostate -antiprostatic -antiprotease -antiproteolysis -antiprotozoal -antiprudential -antipruritic -antipsalmist -antipsoric -antiptosis -antipudic -antipuritan -antiputrefaction -antiputrefactive -antiputrescent -antiputrid -antipyic -antipyonin -antipyresis -antipyretic -Antipyrine -antipyrotic -antipyryl -antiqua -antiquarian -antiquarianism -antiquarianize -antiquarianly -antiquarism -antiquartan -antiquary -antiquate -antiquated -antiquatedness -antiquation -antique -antiquely -antiqueness -antiquer -antiquing -antiquist -antiquitarian -antiquity -antirabic -antirabies -antiracemate -antiracer -antirachitic -antirachitically -antiracing -antiradiating -antiradiation -antiradical -antirailwayist -antirational -antirationalism -antirationalist -antirationalistic -antirattler -antireactive -antirealism -antirealistic -antirebating -antirecruiting -antired -antireducer -antireform -antireformer -antireforming -antireformist -antireligion -antireligious -antiremonstrant -antirennet -antirennin -antirent -antirenter -antirentism -antirepublican -antireservationist -antirestoration -antireticular -antirevisionist -antirevolutionary -antirevolutionist -antirheumatic -antiricin -antirickets -antiritual -antiritualistic -antirobin -antiromance -antiromantic -antiromanticism -antiroyal -antiroyalist -Antirrhinum -antirumor -antirun -antirust -antisacerdotal -antisacerdotalist -antisaloon -antisalooner -antisavage -antiscabious -antiscale -antischolastic -antischool -antiscians -antiscientific -antiscion -antiscolic -antiscorbutic -antiscorbutical -antiscrofulous -antiseismic -antiselene -antisensitizer -antisensuous -antisensuousness -antisepalous -antisepsin -antisepsis -antiseptic -antiseptical -antiseptically -antisepticism -antisepticist -antisepticize -antiseption -antiseptize -antiserum -antishipping -Antisi -antisialagogue -antisialic -antisiccative -antisideric -antisilverite -antisimoniacal -antisine -antisiphon -antisiphonal -antiskeptical -antiskid -antiskidding -antislavery -antislaveryism -antislickens -antislip -antismoking -antisnapper -antisocial -antisocialist -antisocialistic -antisocialistically -antisociality -antisolar -antisophist -antisoporific -antispace -antispadix -antispasis -antispasmodic -antispast -antispastic -antispectroscopic -antispermotoxin -antispiritual -antispirochetic -antisplasher -antisplenetic -antisplitting -antispreader -antispreading -antisquama -antisquatting -antistadholder -antistadholderian -antistalling -antistaphylococcic -antistate -antistatism -antistatist -antisteapsin -antisterility -antistes -antistimulant -antistock -antistreptococcal -antistreptococcic -antistreptococcin -antistreptococcus -antistrike -antistrophal -antistrophe -antistrophic -antistrophically -antistrophize -antistrophon -antistrumatic -antistrumous -antisubmarine -antisubstance -antisudoral -antisudorific -antisuffrage -antisuffragist -antisun -antisupernaturalism -antisupernaturalist -antisurplician -antisymmetrical -antisyndicalism -antisyndicalist -antisynod -antisyphilitic -antitabetic -antitabloid -antitangent -antitank -antitarnish -antitartaric -antitax -antiteetotalism -antitegula -antitemperance -antitetanic -antitetanolysin -antithalian -antitheft -antitheism -antitheist -antitheistic -antitheistical -antitheistically -antithenar -antitheologian -antitheological -antithermic -antithermin -antitheses -antithesis -antithesism -antithesize -antithet -antithetic -antithetical -antithetically -antithetics -antithrombic -antithrombin -antitintinnabularian -antitobacco -antitobacconal -antitobacconist -antitonic -antitorpedo -antitoxic -antitoxin -antitrade -antitrades -antitraditional -antitragal -antitragic -antitragicus -antitragus -antitrismus -antitrochanter -antitropal -antitrope -antitropic -antitropical -antitropous -antitropy -antitrust -antitrypsin -antitryptic -antituberculin -antituberculosis -antituberculotic -antituberculous -antiturnpikeism -antitwilight -antitypal -antitype -antityphoid -antitypic -antitypical -antitypically -antitypy -antityrosinase -antiunion -antiunionist -antiuratic -antiurease -antiusurious -antiutilitarian -antivaccination -antivaccinationist -antivaccinator -antivaccinist -antivariolous -antivenefic -antivenereal -antivenin -antivenom -antivenomous -antivermicular -antivibrating -antivibrator -antivibratory -antivice -antiviral -antivirus -antivitalist -antivitalistic -antivitamin -antivivisection -antivivisectionist -antivolition -antiwar -antiwarlike -antiwaste -antiwedge -antiweed -antiwit -antixerophthalmic -antizealot -antizymic -antizymotic -antler -antlered -antlerite -antlerless -antlia -antliate -Antlid -antling -antluetic -antodontalgic -antoeci -antoecian -antoecians -Antoinette -Anton -Antonella -Antonia -Antonina -antoninianus -Antonio -antonomasia -antonomastic -antonomastical -antonomastically -antonomasy -Antony -antonym -antonymous -antonymy -antorbital -antproof -antra -antral -antralgia -antre -antrectomy -antrin -antritis -antrocele -antronasal -antrophore -antrophose -antrorse -antrorsely -antroscope -antroscopy -Antrostomus -antrotome -antrotomy -antrotympanic -antrotympanitis -antrum -antrustion -antrustionship -antship -Antu -antu -Antum -Antwerp -antwise -anubing -Anubis -anucleate -anukabiet -Anukit -anuloma -Anura -anuran -anuresis -anuretic -anuria -anuric -anurous -anury -anus -anusim -anusvara -anutraminosa -anvasser -anvil -anvilsmith -anxietude -anxiety -anxious -anxiously -anxiousness -any -anybody -Anychia -anyhow -anyone -anyplace -Anystidae -anything -anythingarian -anythingarianism -anyway -anyways -anywhen -anywhere -anywhereness -anywheres -anywhy -anywise -anywither -Anzac -Anzanian -Ao -aogiri -Aoife -aonach -Aonian -aorist -aoristic -aoristically -aorta -aortal -aortarctia -aortectasia -aortectasis -aortic -aorticorenal -aortism -aortitis -aortoclasia -aortoclasis -aortolith -aortomalacia -aortomalaxis -aortopathy -aortoptosia -aortoptosis -aortorrhaphy -aortosclerosis -aortostenosis -aortotomy -aosmic -Aotea -Aotearoa -Aotes -Aotus -aoudad -Aouellimiden -Aoul -apa -apabhramsa -apace -Apache -apache -Apachette -apachism -apachite -apadana -apagoge -apagogic -apagogical -apagogically -apaid -Apalachee -apalit -Apama -apandry -Apanteles -Apantesis -apanthropia -apanthropy -apar -Aparai -aparaphysate -aparejo -Apargia -aparithmesis -apart -apartheid -aparthrosis -apartment -apartmental -apartness -apasote -apastron -apatan -Apatela -apatetic -apathetic -apathetical -apathetically -apathic -apathism -apathist -apathistical -apathogenic -Apathus -apathy -apatite -Apatornis -Apatosaurus -Apaturia -Apayao -ape -apeak -apectomy -apedom -apehood -apeiron -apelet -apelike -apeling -apellous -Apemantus -Apennine -apenteric -apepsia -apepsinia -apepsy -apeptic -aper -aperch -aperea -aperient -aperiodic -aperiodically -aperiodicity -aperispermic -aperistalsis -aperitive -apert -apertly -apertness -apertometer -apertural -aperture -apertured -Aperu -apery -apesthesia -apesthetic -apesthetize -Apetalae -apetaloid -apetalose -apetalous -apetalousness -apetaly -apex -apexed -aphaeresis -aphaeretic -aphagia -aphakia -aphakial -aphakic -Aphanapteryx -Aphanes -aphanesite -Aphaniptera -aphanipterous -aphanite -aphanitic -aphanitism -Aphanomyces -aphanophyre -aphanozygous -Apharsathacites -aphasia -aphasiac -aphasic -Aphelandra -Aphelenchus -aphelian -Aphelinus -aphelion -apheliotropic -apheliotropically -apheliotropism -Aphelops -aphemia -aphemic -aphengescope -aphengoscope -aphenoscope -apheresis -apheretic -aphesis -apheta -aphetic -aphetically -aphetism -aphetize -aphicidal -aphicide -aphid -aphides -aphidian -aphidicide -aphidicolous -aphidid -Aphididae -Aphidiinae -aphidious -Aphidius -aphidivorous -aphidolysin -aphidophagous -aphidozer -aphilanthropy -Aphis -aphlaston -aphlebia -aphlogistic -aphnology -aphodal -aphodian -Aphodius -aphodus -aphonia -aphonic -aphonous -aphony -aphoria -aphorism -aphorismatic -aphorismer -aphorismic -aphorismical -aphorismos -aphorist -aphoristic -aphoristically -aphorize -aphorizer -Aphoruridae -aphotic -aphototactic -aphototaxis -aphototropic -aphototropism -Aphra -aphrasia -aphrite -aphrizite -aphrodisia -aphrodisiac -aphrodisiacal -aphrodisian -Aphrodision -Aphrodistic -Aphrodite -Aphroditeum -aphroditic -Aphroditidae -aphroditous -aphrolite -aphronia -aphrosiderite -aphtha -Aphthartodocetae -Aphthartodocetic -Aphthartodocetism -aphthic -aphthitalite -aphthoid -aphthong -aphthongal -aphthongia -aphthous -aphydrotropic -aphydrotropism -aphyllose -aphyllous -aphylly -aphyric -Apiaca -Apiaceae -apiaceous -Apiales -apian -apiarian -apiarist -apiary -apiator -apicad -apical -apically -apices -Apician -apicifixed -apicilar -apicillary -apicitis -apickaback -apicoectomy -apicolysis -apicula -apicular -apiculate -apiculated -apiculation -apicultural -apiculture -apiculturist -apiculus -Apidae -apiece -apieces -apigenin -apii -apiin -apikoros -apilary -Apina -Apinae -Apinage -apinch -aping -apinoid -apio -Apioceridae -apioid -apioidal -apiole -apiolin -apiologist -apiology -apionol -Apios -apiose -Apiosoma -apiphobia -Apis -apish -apishamore -apishly -apishness -apism -apitong -apitpat -Apium -apivorous -apjohnite -aplacental -Aplacentalia -Aplacentaria -Aplacophora -aplacophoran -aplacophorous -aplanat -aplanatic -aplanatically -aplanatism -Aplanobacter -aplanogamete -aplanospore -aplasia -aplastic -Aplectrum -aplenty -aplite -aplitic -aplobasalt -aplodiorite -Aplodontia -Aplodontiidae -aplomb -aplome -Aplopappus -aploperistomatous -aplostemonous -aplotaxene -aplotomy -Apluda -aplustre -Aplysia -apnea -apneal -apneic -apneumatic -apneumatosis -Apneumona -apneumonous -apneustic -apoaconitine -apoatropine -apobiotic -apoblast -apocaffeine -apocalypse -apocalypst -apocalypt -apocalyptic -apocalyptical -apocalyptically -apocalypticism -apocalyptism -apocalyptist -apocamphoric -apocarp -apocarpous -apocarpy -apocatastasis -apocatastatic -apocatharsis -apocenter -apocentric -apocentricity -apocha -apocholic -apochromat -apochromatic -apochromatism -apocinchonine -apocodeine -apocopate -apocopated -apocopation -apocope -apocopic -apocrenic -apocrisiary -Apocrita -apocrustic -apocryph -Apocrypha -apocryphal -apocryphalist -apocryphally -apocryphalness -apocryphate -apocryphon -Apocynaceae -apocynaceous -apocyneous -Apocynum -apod -Apoda -apodal -apodan -apodeipnon -apodeixis -apodema -apodemal -apodematal -apodeme -Apodes -Apodia -apodia -apodictic -apodictical -apodictically -apodictive -Apodidae -apodixis -apodosis -apodous -apodyterium -apoembryony -apofenchene -apogaeic -apogalacteum -apogamic -apogamically -apogamous -apogamously -apogamy -apogeal -apogean -apogee -apogeic -apogenous -apogeny -apogeotropic -apogeotropically -apogeotropism -Apogon -Apogonidae -apograph -apographal -apoharmine -apohyal -Apoidea -apoise -apojove -apokrea -apokreos -apolar -apolarity -apolaustic -apolegamic -Apolista -Apolistan -Apollinarian -Apollinarianism -Apolline -Apollo -Apollonia -Apollonian -Apollonic -apollonicon -Apollonistic -Apolloship -Apollyon -apologal -apologete -apologetic -apologetical -apologetically -apologetics -apologia -apologist -apologize -apologizer -apologue -apology -apolousis -Apolysin -apolysis -apolytikion -apomecometer -apomecometry -apometabolic -apometabolism -apometabolous -apometaboly -apomictic -apomictical -apomixis -apomorphia -apomorphine -aponeurology -aponeurorrhaphy -aponeurosis -aponeurositis -aponeurotic -aponeurotome -aponeurotomy -aponia -aponic -Aponogeton -Aponogetonaceae -aponogetonaceous -apoop -apopenptic -apopetalous -apophantic -apophasis -apophatic -Apophis -apophlegmatic -apophonia -apophony -apophorometer -apophthegm -apophthegmatist -apophyge -apophylactic -apophylaxis -apophyllite -apophyllous -apophysary -apophysate -apophyseal -apophysis -apophysitis -apoplasmodial -apoplastogamous -apoplectic -apoplectical -apoplectically -apoplectiform -apoplectoid -apoplex -apoplexy -apopyle -apoquinamine -apoquinine -aporetic -aporetical -aporhyolite -aporia -Aporobranchia -aporobranchian -Aporobranchiata -Aporocactus -Aporosa -aporose -aporphin -aporphine -Aporrhaidae -Aporrhais -aporrhaoid -aporrhegma -aport -aportoise -aposafranine -aposaturn -aposaturnium -aposematic -aposematically -aposepalous -aposia -aposiopesis -aposiopetic -apositia -apositic -aposoro -aposporogony -aposporous -apospory -apostasis -apostasy -apostate -apostatic -apostatical -apostatically -apostatism -apostatize -apostaxis -apostemate -apostematic -apostemation -apostematous -aposteme -aposteriori -aposthia -apostil -apostle -apostlehood -apostleship -apostolate -apostoless -apostoli -Apostolian -Apostolic -apostolic -apostolical -apostolically -apostolicalness -Apostolici -apostolicism -apostolicity -apostolize -Apostolos -apostrophal -apostrophation -apostrophe -apostrophic -apostrophied -apostrophize -apostrophus -Apotactic -Apotactici -apotelesm -apotelesmatic -apotelesmatical -apothecal -apothecary -apothecaryship -apothece -apothecial -apothecium -apothegm -apothegmatic -apothegmatical -apothegmatically -apothegmatist -apothegmatize -apothem -apotheose -apotheoses -apotheosis -apotheosize -apothesine -apothesis -apotome -apotracheal -apotropaic -apotropaion -apotropaism -apotropous -apoturmeric -apotype -apotypic -apout -apoxesis -Apoxyomenos -apozem -apozema -apozemical -apozymase -Appalachia -Appalachian -appall -appalling -appallingly -appallment -appalment -appanage -appanagist -apparatus -apparel -apparelment -apparence -apparency -apparent -apparently -apparentness -apparition -apparitional -apparitor -appassionata -appassionato -appay -appeal -appealability -appealable -appealer -appealing -appealingly -appealingness -appear -appearance -appearanced -appearer -appeasable -appeasableness -appeasably -appease -appeasement -appeaser -appeasing -appeasingly -appeasive -appellability -appellable -appellancy -appellant -appellate -appellation -appellational -appellative -appellatived -appellatively -appellativeness -appellatory -appellee -appellor -append -appendage -appendaged -appendalgia -appendance -appendancy -appendant -appendectomy -appendical -appendicalgia -appendice -appendicectasis -appendicectomy -appendices -appendicial -appendicious -appendicitis -appendicle -appendicocaecostomy -appendicostomy -appendicular -Appendicularia -appendicularian -Appendiculariidae -Appendiculata -appendiculate -appendiculated -appenditious -appendix -appendorontgenography -appendotome -appentice -apperceive -apperception -apperceptionism -apperceptionist -apperceptionistic -apperceptive -apperceptively -appercipient -appersonation -appertain -appertainment -appertinent -appet -appete -appetence -appetency -appetent -appetently -appetibility -appetible -appetibleness -appetite -appetition -appetitional -appetitious -appetitive -appetize -appetizement -appetizer -appetizingly -appinite -Appius -applanate -applanation -applaud -applaudable -applaudably -applauder -applaudingly -applause -applausive -applausively -apple -appleberry -appleblossom -applecart -appledrane -applegrower -applejack -applejohn -applemonger -applenut -appleringy -appleroot -applesauce -applewife -applewoman -appliable -appliableness -appliably -appliance -appliant -applicability -applicable -applicableness -applicably -applicancy -applicant -applicate -application -applicative -applicatively -applicator -applicatorily -applicatory -applied -appliedly -applier -applique -applosion -applosive -applot -applotment -apply -applyingly -applyment -appoggiatura -appoint -appointable -appointe -appointee -appointer -appointive -appointment -appointor -Appomatox -Appomattoc -apport -apportion -apportionable -apportioner -apportionment -apposability -apposable -appose -apposer -apposiopestic -apposite -appositely -appositeness -apposition -appositional -appositionally -appositive -appositively -appraisable -appraisal -appraise -appraisement -appraiser -appraising -appraisingly -appraisive -appreciable -appreciably -appreciant -appreciate -appreciatingly -appreciation -appreciational -appreciativ -appreciative -appreciatively -appreciativeness -appreciator -appreciatorily -appreciatory -appredicate -apprehend -apprehender -apprehendingly -apprehensibility -apprehensible -apprehensibly -apprehension -apprehensive -apprehensively -apprehensiveness -apprend -apprense -apprentice -apprenticehood -apprenticement -apprenticeship -appressed -appressor -appressorial -appressorium -appreteur -apprise -apprize -apprizement -apprizer -approach -approachability -approachabl -approachable -approachableness -approacher -approaching -approachless -approachment -approbate -approbation -approbative -approbativeness -approbator -approbatory -approof -appropinquate -appropinquation -appropinquity -appropre -appropriable -appropriate -appropriately -appropriateness -appropriation -appropriative -appropriativeness -appropriator -approvable -approvableness -approval -approvance -approve -approvedly -approvedness -approvement -approver -approvingly -approximal -approximate -approximately -approximation -approximative -approximatively -approximativeness -approximator -appulse -appulsion -appulsive -appulsively -appurtenance -appurtenant -apractic -apraxia -apraxic -apricate -aprication -aprickle -apricot -April -Aprilesque -Apriline -Aprilis -apriori -apriorism -apriorist -aprioristic -apriority -Aprocta -aproctia -aproctous -apron -aproneer -apronful -apronless -apronlike -apropos -aprosexia -aprosopia -aprosopous -aproterodont -apse -apselaphesia -apselaphesis -apsidal -apsidally -apsides -apsidiole -apsis -apsychia -apsychical -apt -Aptal -Aptenodytes -Aptera -apteral -apteran -apterial -apterium -apteroid -apterous -Apteryges -apterygial -Apterygidae -Apterygiformes -Apterygogenea -Apterygota -apterygote -apterygotous -Apteryx -Aptian -Aptiana -aptitude -aptitudinal -aptitudinally -aptly -aptness -aptote -aptotic -aptyalia -aptyalism -aptychus -Apulian -apulmonic -apulse -apurpose -Apus -apyonin -apyrene -apyretic -apyrexia -apyrexial -apyrexy -apyrotype -apyrous -aqua -aquabelle -aquabib -aquacade -aquacultural -aquaculture -aquaemanale -aquafortist -aquage -aquagreen -aquamarine -aquameter -aquaplane -aquapuncture -aquarelle -aquarellist -aquaria -aquarial -Aquarian -aquarian -Aquarid -Aquarii -aquariist -aquarium -Aquarius -aquarter -aquascutum -aquatic -aquatical -aquatically -aquatile -aquatint -aquatinta -aquatinter -aquation -aquativeness -aquatone -aquavalent -aquavit -aqueduct -aqueoglacial -aqueoigneous -aqueomercurial -aqueous -aqueously -aqueousness -aquicolous -aquicultural -aquiculture -aquiculturist -aquifer -aquiferous -Aquifoliaceae -aquifoliaceous -aquiform -Aquila -Aquilaria -aquilawood -aquilege -Aquilegia -Aquilian -Aquilid -aquiline -aquilino -aquincubital -aquincubitalism -Aquinist -aquintocubital -aquintocubitalism -aquiparous -Aquitanian -aquiver -aquo -aquocapsulitis -aquocarbonic -aquocellolitis -aquopentamminecobaltic -aquose -aquosity -aquotization -aquotize -ar -ara -Arab -araba -araban -arabana -Arabella -arabesque -arabesquely -arabesquerie -Arabian -Arabianize -Arabic -Arabicism -Arabicize -Arabidopsis -arability -arabin -arabinic -arabinose -arabinosic -Arabis -Arabism -Arabist -arabit -arabitol -arabiyeh -Arabize -arable -Arabophil -Araby -araca -Aracana -aracanga -aracari -Araceae -araceous -arachic -arachidonic -arachin -Arachis -arachnactis -Arachne -arachnean -arachnid -Arachnida -arachnidan -arachnidial -arachnidism -arachnidium -arachnism -Arachnites -arachnitis -arachnoid -arachnoidal -Arachnoidea -arachnoidea -arachnoidean -arachnoiditis -arachnological -arachnologist -arachnology -Arachnomorphae -arachnophagous -arachnopia -arad -Aradidae -arado -araeostyle -araeosystyle -Aragallus -Aragonese -Aragonian -aragonite -araguato -arain -Arains -Arakanese -arakawaite -arake -Arales -Aralia -Araliaceae -araliaceous -araliad -Araliaephyllum -aralie -Araliophyllum -aralkyl -aralkylated -Aramaean -Aramaic -Aramaicize -Aramaism -aramayoite -Aramidae -aramina -Araminta -Aramis -Aramitess -Aramu -Aramus -Aranea -Araneae -araneid -Araneida -araneidan -araneiform -Araneiformes -Araneiformia -aranein -Araneina -Araneoidea -araneologist -araneology -araneous -aranga -arango -Aranyaka -aranzada -arapahite -Arapaho -arapaima -araphorostic -arapunga -Araquaju -arar -Arara -arara -araracanga -ararao -ararauna -arariba -araroba -arati -aration -aratory -Araua -Arauan -Araucan -Araucanian -Araucano -Araucaria -Araucariaceae -araucarian -Araucarioxylon -Araujia -Arauna -Arawa -Arawak -Arawakan -Arawakian -arba -Arbacia -arbacin -arbalest -arbalester -arbalestre -arbalestrier -arbalist -arbalister -arbalo -Arbela -arbiter -arbitrable -arbitrager -arbitragist -arbitral -arbitrament -arbitrarily -arbitrariness -arbitrary -arbitrate -arbitration -arbitrational -arbitrationist -arbitrative -arbitrator -arbitratorship -arbitratrix -arbitrement -arbitrer -arbitress -arboloco -arbor -arboraceous -arboral -arborary -arborator -arboreal -arboreally -arborean -arbored -arboreous -arborescence -arborescent -arborescently -arboresque -arboret -arboreta -arboretum -arborical -arboricole -arboricoline -arboricolous -arboricultural -arboriculture -arboriculturist -arboriform -arborist -arborization -arborize -arboroid -arborolatry -arborous -arborvitae -arborway -arbuscle -arbuscula -arbuscular -arbuscule -arbusterol -arbustum -arbutase -arbute -arbutean -arbutin -arbutinase -arbutus -arc -arca -Arcacea -arcade -Arcadia -Arcadian -arcadian -Arcadianism -Arcadianly -Arcadic -Arcady -arcana -arcanal -arcane -arcanite -arcanum -arcate -arcature -Arcella -Arceuthobium -arch -archabomination -archae -archaecraniate -Archaeoceti -Archaeocyathidae -Archaeocyathus -archaeogeology -archaeographic -archaeographical -archaeography -archaeolatry -archaeolith -archaeolithic -archaeologer -archaeologian -archaeologic -archaeological -archaeologically -archaeologist -archaeology -Archaeopithecus -Archaeopteris -Archaeopterygiformes -Archaeopteryx -Archaeornis -Archaeornithes -archaeostoma -Archaeostomata -archaeostomatous -archagitator -archaic -archaical -archaically -archaicism -archaism -archaist -archaistic -archaize -archaizer -archangel -archangelic -Archangelica -archangelical -archangelship -archantagonist -archantiquary -archapostate -archapostle -archarchitect -archarios -archartist -archband -archbeacon -archbeadle -archbishop -archbishopess -archbishopric -archbishopry -archbotcher -archboutefeu -archbuffoon -archbuilder -archchampion -archchaplain -archcharlatan -archcheater -archchemic -archchief -archchronicler -archcity -archconfraternity -archconsoler -archconspirator -archcorrupter -archcorsair -archcount -archcozener -archcriminal -archcritic -archcrown -archcupbearer -archdapifer -archdapifership -archdeacon -archdeaconate -archdeaconess -archdeaconry -archdeaconship -archdean -archdeanery -archdeceiver -archdefender -archdemon -archdepredator -archdespot -archdetective -archdevil -archdiocesan -archdiocese -archdiplomatist -archdissembler -archdisturber -archdivine -archdogmatist -archdolt -archdruid -archducal -archduchess -archduchy -archduke -archdukedom -arche -archeal -Archean -archearl -archebiosis -archecclesiastic -archecentric -arched -archegone -archegonial -Archegoniata -Archegoniatae -archegoniate -archegoniophore -archegonium -archegony -Archegosaurus -archeion -Archelaus -Archelenis -archelogy -Archelon -archemperor -Archencephala -archencephalic -archenemy -archengineer -archenteric -archenteron -archeocyte -Archeozoic -Archer -archer -archeress -archerfish -archership -archery -arches -archespore -archesporial -archesporium -archetypal -archetypally -archetype -archetypic -archetypical -archetypically -archetypist -archeunuch -archeus -archexorcist -archfelon -archfiend -archfire -archflamen -archflatterer -archfoe -archfool -archform -archfounder -archfriend -archgenethliac -archgod -archgomeral -archgovernor -archgunner -archhead -archheart -archheresy -archheretic -archhost -archhouse -archhumbug -archhypocrisy -archhypocrite -Archiannelida -archiater -Archibald -archibenthal -archibenthic -archibenthos -archiblast -archiblastic -archiblastoma -archiblastula -Archibuteo -archicantor -archicarp -archicerebrum -Archichlamydeae -archichlamydeous -archicleistogamous -archicleistogamy -archicoele -archicontinent -archicyte -archicytula -Archidamus -Archidiaceae -archidiaconal -archidiaconate -archididascalian -archididascalos -Archidiskodon -Archidium -archidome -Archie -archiepiscopacy -archiepiscopal -archiepiscopally -archiepiscopate -archiereus -archigaster -archigastrula -archigenesis -archigonic -archigonocyte -archigony -archiheretical -archikaryon -archil -archilithic -Archilochian -archilowe -archimage -Archimago -archimagus -archimandrite -Archimedean -Archimedes -archimime -archimorphic -archimorula -archimperial -archimperialism -archimperialist -archimperialistic -archimpressionist -Archimycetes -archineuron -archinfamy -archinformer -arching -archipallial -archipallium -archipelagian -archipelagic -archipelago -archipin -archiplasm -archiplasmic -Archiplata -archiprelatical -archipresbyter -archipterygial -archipterygium -archisperm -Archispermae -archisphere -archispore -archistome -archisupreme -archisymbolical -architect -architective -architectonic -Architectonica -architectonically -architectonics -architectress -architectural -architecturalist -architecturally -architecture -architecturesque -Architeuthis -architis -architraval -architrave -architraved -architypographer -archival -archive -archivist -archivolt -archizoic -archjockey -archking -archknave -archleader -archlecher -archleveler -archlexicographer -archliar -archlute -archly -archmachine -archmagician -archmagirist -archmarshal -archmediocrity -archmessenger -archmilitarist -archmime -archminister -archmock -archmocker -archmockery -archmonarch -archmonarchist -archmonarchy -archmugwump -archmurderer -archmystagogue -archness -archocele -archocystosyrinx -archology -archon -archonship -archont -archontate -Archontia -archontic -archoplasm -archoplasmic -archoptoma -archoptosis -archorrhagia -archorrhea -archostegnosis -archostenosis -archosyrinx -archoverseer -archpall -archpapist -archpastor -archpatriarch -archpatron -archphilosopher -archphylarch -archpiece -archpilferer -archpillar -archpirate -archplagiarist -archplagiary -archplayer -archplotter -archplunderer -archplutocrat -archpoet -archpolitician -archpontiff -archpractice -archprelate -archprelatic -archprelatical -archpresbyter -archpresbyterate -archpresbytery -archpretender -archpriest -archpriesthood -archpriestship -archprimate -archprince -archprophet -archprotopope -archprototype -archpublican -archpuritan -archradical -archrascal -archreactionary -archrebel -archregent -archrepresentative -archrobber -archrogue -archruler -archsacrificator -archsacrificer -archsaint -archsatrap -archscoundrel -archseducer -archsee -archsewer -archshepherd -archsin -archsnob -archspirit -archspy -archsteward -archswindler -archsynagogue -archtempter -archthief -archtraitor -archtreasurer -archtreasurership -archturncoat -archtyrant -archurger -archvagabond -archvampire -archvestryman -archvillain -archvillainy -archvisitor -archwag -archway -archwench -archwise -archworker -archworkmaster -Archy -archy -Arcidae -Arcifera -arciferous -arcifinious -arciform -arcing -Arcite -arcked -arcking -arcocentrous -arcocentrum -arcograph -Arcos -Arctalia -Arctalian -Arctamerican -arctation -Arctia -arctian -arctic -arctically -arctician -arcticize -arcticward -arcticwards -arctiid -Arctiidae -Arctisca -Arctium -Arctocephalus -Arctogaea -Arctogaeal -Arctogaean -arctoid -Arctoidea -arctoidean -Arctomys -Arctos -Arctosis -Arctostaphylos -Arcturia -Arcturus -arcual -arcuale -arcuate -arcuated -arcuately -arcuation -arcubalist -arcubalister -arcula -arculite -ardassine -Ardea -Ardeae -ardeb -Ardeidae -Ardelia -ardella -ardency -ardennite -ardent -ardently -ardentness -Ardhamagadhi -Ardhanari -ardish -Ardisia -Ardisiaceae -ardoise -ardor -ardri -ardu -arduinite -arduous -arduously -arduousness -ardurous -are -area -areach -aread -areal -areality -Arean -arear -areasoner -areaway -Areca -Arecaceae -arecaceous -arecaidin -arecaidine -arecain -arecaine -Arecales -arecolidin -arecolidine -arecolin -arecoline -Arecuna -ared -areek -areel -arefact -arefaction -aregenerative -aregeneratory -areito -arena -arenaceous -arenae -Arenaria -arenariae -arenarious -arenation -arend -arendalite -areng -Arenga -Arenicola -arenicole -arenicolite -arenicolous -Arenig -arenilitic -arenoid -arenose -arenosity -arent -areocentric -areographer -areographic -areographical -areographically -areography -areola -areolar -areolate -areolated -areolation -areole -areolet -areologic -areological -areologically -areologist -areology -areometer -areometric -areometrical -areometry -Areopagist -Areopagite -Areopagitic -Areopagitica -Areopagus -areotectonics -areroscope -aretaics -arete -Arethusa -Arethuse -Aretinian -arfvedsonite -argal -argala -argali -argans -Argante -Argas -argasid -Argasidae -Argean -argeers -argel -Argemone -argemony -argenol -argent -argental -argentamid -argentamide -argentamin -argentamine -argentate -argentation -argenteous -argenter -argenteum -argentic -argenticyanide -argentide -argentiferous -Argentina -Argentine -argentine -Argentinean -Argentinian -Argentinidae -argentinitrate -Argentinize -Argentino -argention -argentite -argentojarosite -argentol -argentometric -argentometrically -argentometry -argenton -argentoproteinum -argentose -argentous -argentum -Argestes -arghan -arghel -arghool -Argid -argil -argillaceous -argilliferous -argillite -argillitic -argilloarenaceous -argillocalcareous -argillocalcite -argilloferruginous -argilloid -argillomagnesian -argillous -arginine -argininephosphoric -Argiope -Argiopidae -Argiopoidea -Argive -Argo -argo -Argoan -argol -argolet -Argolian -Argolic -Argolid -argon -Argonaut -Argonauta -Argonautic -Argonne -argosy -argot -argotic -Argovian -arguable -argue -arguer -argufier -argufy -Argulus -argument -argumental -argumentation -argumentatious -argumentative -argumentatively -argumentativeness -argumentator -argumentatory -Argus -argusfish -Argusianus -Arguslike -argute -argutely -arguteness -Argyle -Argyll -Argynnis -argyranthemous -argyranthous -Argyraspides -argyria -argyric -argyrite -argyrocephalous -argyrodite -Argyrol -Argyroneta -Argyropelecus -argyrose -argyrosis -Argyrosomus -argyrythrose -arhar -arhat -arhatship -Arhauaco -arhythmic -aria -Ariadne -Arian -Ariana -Arianism -Arianistic -Arianistical -Arianize -Arianizer -Arianrhod -aribine -Arician -aricine -arid -Arided -aridge -aridian -aridity -aridly -aridness -ariegite -Ariel -ariel -arienzo -Aries -arietation -Arietid -arietinous -arietta -aright -arightly -arigue -Ariidae -Arikara -aril -ariled -arillary -arillate -arillated -arilliform -arillode -arillodium -arilloid -arillus -Arimasp -Arimaspian -Arimathaean -Ariocarpus -Arioi -Arioian -Arion -ariose -arioso -ariot -aripple -Arisaema -arisard -arise -arisen -arist -arista -Aristarch -Aristarchian -aristarchy -aristate -Aristeas -Aristida -Aristides -Aristippus -aristocracy -aristocrat -aristocratic -aristocratical -aristocratically -aristocraticalness -aristocraticism -aristocraticness -aristocratism -aristodemocracy -aristodemocratical -aristogenesis -aristogenetic -aristogenic -aristogenics -Aristol -Aristolochia -Aristolochiaceae -aristolochiaceous -Aristolochiales -aristolochin -aristolochine -aristological -aristologist -aristology -aristomonarchy -Aristophanic -aristorepublicanism -Aristotelian -Aristotelianism -Aristotelic -Aristotelism -aristotype -aristulate -arite -arithmetic -arithmetical -arithmetically -arithmetician -arithmetization -arithmetize -arithmic -arithmocracy -arithmocratic -arithmogram -arithmograph -arithmography -arithmomania -arithmometer -Arius -Arivaipa -Arizona -Arizonan -Arizonian -arizonite -arjun -ark -Arkab -Arkansan -Arkansas -Arkansawyer -arkansite -Arkite -arkite -arkose -arkosic -arksutite -Arlene -Arleng -arles -Arline -arm -armada -armadilla -Armadillididae -Armadillidium -armadillo -Armado -Armageddon -Armageddonist -armagnac -armament -armamentarium -armamentary -armangite -armariolum -armarium -Armata -Armatoles -Armatoli -armature -armbone -armchair -armchaired -armed -armeniaceous -Armenian -Armenic -Armenize -Armenoid -armer -Armeria -Armeriaceae -armet -armful -armgaunt -armhole -armhoop -Armida -armied -armiferous -armiger -armigeral -armigerous -armil -armilla -Armillaria -armillary -armillate -armillated -arming -Arminian -Arminianism -Arminianize -Arminianizer -armipotence -armipotent -armisonant -armisonous -armistice -armless -armlet -armload -armoire -armonica -armor -Armoracia -armored -armorer -armorial -Armoric -Armorican -Armorician -armoried -armorist -armorproof -armorwise -armory -Armouchiquois -armozeen -armpiece -armpit -armplate -armrack -armrest -arms -armscye -armure -army -arn -arna -Arnaut -arnberry -Arne -Arneb -Arnebia -arnee -arni -arnica -Arnold -Arnoldist -Arnoseris -arnotta -arnotto -Arnusian -arnut -Aro -aroar -aroast -arock -aroeira -aroid -aroideous -Aroides -aroint -arolium -arolla -aroma -aromacity -aromadendrin -aromatic -aromatically -aromaticness -aromatite -aromatites -aromatization -aromatize -aromatizer -aromatophor -aromatophore -Aronia -aroon -Aroras -Arosaguntacook -arose -around -arousal -arouse -arousement -arouser -arow -aroxyl -arpeggiando -arpeggiated -arpeggiation -arpeggio -arpeggioed -arpen -arpent -arquerite -arquifoux -arracach -arracacha -Arracacia -arrack -arrah -arraign -arraigner -arraignment -arrame -arrange -arrangeable -arrangement -arranger -arrant -arrantly -Arras -arras -arrased -arrasene -arrastra -arrastre -arratel -arrau -array -arrayal -arrayer -arrayment -arrear -arrearage -arrect -arrector -arrendation -arrenotokous -arrenotoky -arrent -arrentable -arrentation -arreptitious -arrest -arrestable -arrestation -arrestee -arrester -arresting -arrestingly -arrestive -arrestment -arrestor -Arretine -arrhenal -Arrhenatherum -arrhenoid -arrhenotokous -arrhenotoky -arrhinia -arrhizal -arrhizous -arrhythmia -arrhythmic -arrhythmical -arrhythmically -arrhythmous -arrhythmy -arriage -arriba -arride -arridge -arrie -arriere -Arriet -arrimby -arris -arrish -arrisways -arriswise -arrival -arrive -arriver -arroba -arrogance -arrogancy -arrogant -arrogantly -arrogantness -arrogate -arrogatingly -arrogation -arrogative -arrogator -arrojadite -arrope -arrosive -arrow -arrowbush -arrowed -arrowhead -arrowheaded -arrowleaf -arrowless -arrowlet -arrowlike -arrowplate -arrowroot -arrowsmith -arrowstone -arrowweed -arrowwood -arrowworm -arrowy -arroyo -Arruague -Arry -Arryish -Arsacid -Arsacidan -arsanilic -arse -arsedine -arsenal -arsenate -arsenation -arseneted -arsenetted -arsenfast -arsenferratose -arsenhemol -arseniasis -arseniate -arsenic -arsenical -arsenicalism -arsenicate -arsenicism -arsenicize -arsenicophagy -arsenide -arseniferous -arsenillo -arseniopleite -arseniosiderite -arsenious -arsenism -arsenite -arsenium -arseniuret -arseniureted -arsenization -arseno -arsenobenzene -arsenobenzol -arsenobismite -arsenoferratin -arsenofuran -arsenohemol -arsenolite -arsenophagy -arsenophen -arsenophenol -arsenophenylglycin -arsenopyrite -arsenostyracol -arsenotherapy -arsenotungstates -arsenotungstic -arsenous -arsenoxide -arsenyl -arses -arsesmart -arsheen -arshin -arshine -arsine -arsinic -arsino -Arsinoitherium -arsis -arsle -arsmetrik -arsmetrike -arsnicker -arsoite -arson -arsonate -arsonation -arsonic -arsonist -arsonite -arsonium -arsono -arsonvalization -arsphenamine -arsyl -arsylene -Art -art -artaba -artabe -artal -Artamidae -Artamus -artar -artarine -artcraft -artefact -artel -Artemas -Artemia -Artemis -Artemisia -artemisic -artemisin -Artemision -Artemisium -arteriagra -arterial -arterialization -arterialize -arterially -arteriarctia -arteriasis -arteriectasia -arteriectasis -arteriectopia -arterin -arterioarctia -arteriocapillary -arteriococcygeal -arteriodialysis -arteriodiastasis -arteriofibrosis -arteriogenesis -arteriogram -arteriograph -arteriography -arteriole -arteriolith -arteriology -arteriolosclerosis -arteriomalacia -arteriometer -arteriomotor -arterionecrosis -arteriopalmus -arteriopathy -arteriophlebotomy -arterioplania -arterioplasty -arteriopressor -arteriorenal -arteriorrhagia -arteriorrhaphy -arteriorrhexis -arteriosclerosis -arteriosclerotic -arteriospasm -arteriostenosis -arteriostosis -arteriostrepsis -arteriosympathectomy -arteriotome -arteriotomy -arteriotrepsis -arterious -arteriovenous -arterioversion -arterioverter -arteritis -artery -Artesian -artesian -artful -artfully -artfulness -Artgum -artha -arthel -arthemis -arthragra -arthral -arthralgia -arthralgic -arthrectomy -arthredema -arthrempyesis -arthresthesia -arthritic -arthritical -arthriticine -arthritis -arthritism -arthrobacterium -arthrobranch -arthrobranchia -arthrocace -arthrocarcinoma -arthrocele -arthrochondritis -arthroclasia -arthrocleisis -arthroclisis -arthroderm -arthrodesis -arthrodia -arthrodial -arthrodic -Arthrodira -arthrodiran -arthrodire -arthrodirous -Arthrodonteae -arthrodynia -arthrodynic -arthroempyema -arthroempyesis -arthroendoscopy -Arthrogastra -arthrogastran -arthrogenous -arthrography -arthrogryposis -arthrolite -arthrolith -arthrolithiasis -arthrology -arthromeningitis -arthromere -arthromeric -arthrometer -arthrometry -arthroncus -arthroneuralgia -arthropathic -arthropathology -arthropathy -arthrophlogosis -arthrophyma -arthroplastic -arthroplasty -arthropleura -arthropleure -arthropod -Arthropoda -arthropodal -arthropodan -arthropodous -Arthropomata -arthropomatous -arthropterous -arthropyosis -arthrorheumatism -arthrorrhagia -arthrosclerosis -arthrosia -arthrosis -arthrospore -arthrosporic -arthrosporous -arthrosteitis -arthrosterigma -arthrostome -arthrostomy -Arthrostraca -arthrosynovitis -arthrosyrinx -arthrotome -arthrotomy -arthrotrauma -arthrotropic -arthrotyphoid -arthrous -arthroxerosis -Arthrozoa -arthrozoan -arthrozoic -Arthur -Arthurian -Arthuriana -artiad -artichoke -article -articled -articulability -articulable -articulacy -articulant -articular -articulare -articularly -articulary -Articulata -articulate -articulated -articulately -articulateness -articulation -articulationist -articulative -articulator -articulatory -articulite -articulus -Artie -artifact -artifactitious -artifice -artificer -artificership -artificial -artificialism -artificiality -artificialize -artificially -artificialness -artiller -artillerist -artillery -artilleryman -artilleryship -artiness -artinite -Artinskian -artiodactyl -Artiodactyla -artiodactylous -artiphyllous -artisan -artisanship -artist -artistdom -artiste -artistic -artistical -artistically -artistry -artless -artlessly -artlessness -artlet -artlike -Artocarpaceae -artocarpad -artocarpeous -artocarpous -Artocarpus -artolater -artophagous -artophorion -artotype -artotypy -Artotyrite -artware -arty -aru -Aruac -arui -aruke -Arulo -Arum -arumin -Aruncus -arundiferous -arundinaceous -Arundinaria -arundineous -Arundo -Arunta -arupa -arusa -arusha -arustle -arval -arvel -Arverni -Arvicola -arvicole -Arvicolinae -arvicoline -arvicolous -arviculture -arx -ary -Arya -Aryan -Aryanism -Aryanization -Aryanize -aryballoid -aryballus -aryepiglottic -aryl -arylamine -arylamino -arylate -arytenoid -arytenoidal -arzan -Arzava -Arzawa -arzrunite -arzun -As -as -Asa -asaddle -asafetida -Asahel -asak -asale -asana -Asaph -asaphia -Asaphic -asaphid -Asaphidae -Asaphus -asaprol -asarabacca -Asaraceae -Asarh -asarite -asaron -asarone -asarotum -Asarum -asbest -asbestic -asbestiform -asbestine -asbestinize -asbestoid -asbestoidal -asbestos -asbestosis -asbestous -asbestus -asbolin -asbolite -Ascabart -Ascalabota -ascan -Ascanian -Ascanius -ascare -ascariasis -ascaricidal -ascaricide -ascarid -Ascaridae -ascarides -Ascaridia -ascaridiasis -ascaridole -Ascaris -ascaron -Ascella -ascellus -ascend -ascendable -ascendance -ascendancy -ascendant -ascendence -ascendency -ascendent -ascender -ascendible -ascending -ascendingly -ascension -ascensional -ascensionist -Ascensiontide -ascensive -ascent -ascertain -ascertainable -ascertainableness -ascertainably -ascertainer -ascertainment -ascescency -ascescent -ascetic -ascetical -ascetically -asceticism -Ascetta -aschaffite -ascham -aschistic -asci -ascian -Ascidia -Ascidiacea -Ascidiae -ascidian -ascidiate -ascidicolous -ascidiferous -ascidiform -ascidioid -Ascidioida -Ascidioidea -Ascidiozoa -ascidiozooid -ascidium -asciferous -ascigerous -ascii -ascites -ascitic -ascitical -ascititious -asclent -Asclepiad -asclepiad -Asclepiadaceae -asclepiadaceous -Asclepiadae -Asclepiadean -asclepiadeous -Asclepiadic -Asclepian -Asclepias -asclepidin -asclepidoid -Asclepieion -asclepin -Asclepius -ascocarp -ascocarpous -Ascochyta -ascogenous -ascogone -ascogonial -ascogonidium -ascogonium -ascolichen -Ascolichenes -ascoma -ascomycetal -ascomycete -Ascomycetes -ascomycetous -ascon -Ascones -ascophore -ascophorous -Ascophyllum -ascorbic -ascospore -ascosporic -ascosporous -Ascot -ascot -Ascothoracica -ascribable -ascribe -ascript -ascription -ascriptitii -ascriptitious -ascriptitius -ascry -ascula -Ascupart -ascus -ascyphous -Ascyrum -asdic -ase -asearch -asecretory -aseethe -aseismatic -aseismic -aseismicity -aseity -aselgeia -asellate -Aselli -Asellidae -Aselline -Asellus -asem -asemasia -asemia -asepsis -aseptate -aseptic -aseptically -asepticism -asepticize -aseptify -aseptol -aseptolin -asexual -asexuality -asexualization -asexualize -asexually -asfetida -ash -Asha -ashake -ashame -ashamed -ashamedly -ashamedness -ashamnu -Ashangos -Ashantee -Ashanti -Asharasi -ashberry -ashcake -ashen -Asher -asherah -Asherites -ashery -ashes -ashet -ashily -ashimmer -ashine -ashiness -ashipboard -Ashir -ashiver -Ashkenazic -Ashkenazim -ashkoko -ashlar -ashlared -ashlaring -ashless -ashling -Ashluslay -ashman -Ashmolean -Ashochimi -ashore -ashpan -ashpit -ashplant -ashraf -ashrafi -ashthroat -Ashur -ashur -ashweed -ashwort -ashy -asialia -Asian -Asianic -Asianism -Asiarch -Asiarchate -Asiatic -Asiatical -Asiatically -Asiatican -Asiaticism -Asiaticization -Asiaticize -Asiatize -aside -asidehand -asideness -asiderite -asideu -asiento -asilid -Asilidae -Asilus -asimen -Asimina -asimmer -asinego -asinine -asininely -asininity -asiphonate -asiphonogama -asitia -ask -askable -askance -askant -askar -askari -asker -askew -askingly -askip -asklent -Asklepios -askos -Askr -aslant -aslantwise -aslaver -asleep -aslop -aslope -aslumber -asmack -asmalte -asmear -asmile -asmoke -asmolder -asniffle -asnort -asoak -asocial -asok -asoka -asomatophyte -asomatous -asonant -asonia -asop -asor -asouth -asp -aspace -aspalathus -Aspalax -asparagic -asparagine -asparaginic -asparaginous -asparagus -asparagyl -asparkle -aspartate -aspartic -aspartyl -Aspasia -Aspatia -aspect -aspectable -aspectant -aspection -aspectual -aspen -asper -asperate -asperation -aspergation -asperge -asperger -Asperges -aspergil -aspergill -Aspergillaceae -Aspergillales -aspergilliform -aspergillin -aspergillosis -aspergillum -aspergillus -Asperifoliae -asperifoliate -asperifolious -asperite -asperity -aspermatic -aspermatism -aspermatous -aspermia -aspermic -aspermous -asperous -asperously -asperse -aspersed -asperser -aspersion -aspersive -aspersively -aspersor -aspersorium -aspersory -Asperugo -Asperula -asperuloside -asperulous -asphalt -asphaltene -asphalter -asphaltic -asphaltite -asphaltum -aspheterism -aspheterize -asphodel -Asphodelaceae -Asphodeline -Asphodelus -asphyctic -asphyctous -asphyxia -asphyxial -asphyxiant -asphyxiate -asphyxiation -asphyxiative -asphyxiator -asphyxied -asphyxy -aspic -aspiculate -aspiculous -aspidate -aspidiaria -aspidinol -Aspidiotus -Aspidiske -Aspidistra -aspidium -Aspidobranchia -Aspidobranchiata -aspidobranchiate -Aspidocephali -Aspidochirota -Aspidoganoidei -aspidomancy -Aspidosperma -aspidospermine -aspirant -aspirata -aspirate -aspiration -aspirator -aspiratory -aspire -aspirer -aspirin -aspiring -aspiringly -aspiringness -aspish -asplanchnic -Asplenieae -asplenioid -Asplenium -asporogenic -asporogenous -asporous -asport -asportation -asporulate -aspout -asprawl -aspread -Aspredinidae -Aspredo -aspring -asprout -asquare -asquat -asqueal -asquint -asquirm -ass -assacu -assagai -assai -assail -assailable -assailableness -assailant -assailer -assailment -Assam -Assamese -Assamites -assapan -assapanic -assarion -assart -assary -assassin -assassinate -assassination -assassinative -assassinator -assassinatress -assassinist -assate -assation -assault -assaultable -assaulter -assaut -assay -assayable -assayer -assaying -assbaa -asse -assecuration -assecurator -assedation -assegai -asself -assemblable -assemblage -assemble -assembler -assembly -assemblyman -assent -assentaneous -assentation -assentatious -assentator -assentatorily -assentatory -assented -assenter -assentient -assenting -assentingly -assentive -assentiveness -assentor -assert -assertable -assertative -asserter -assertible -assertion -assertional -assertive -assertively -assertiveness -assertor -assertorial -assertorially -assertoric -assertorical -assertorically -assertorily -assertory -assertress -assertrix -assertum -assess -assessable -assessably -assessed -assessee -assession -assessionary -assessment -assessor -assessorial -assessorship -assessory -asset -assets -assever -asseverate -asseveratingly -asseveration -asseverative -asseveratively -asseveratory -asshead -assi -assibilate -assibilation -Assidean -assident -assidual -assidually -assiduity -assiduous -assiduously -assiduousness -assientist -assiento -assify -assign -assignability -assignable -assignably -assignat -assignation -assigned -assignee -assigneeship -assigner -assignment -assignor -assilag -assimilability -assimilable -assimilate -assimilation -assimilationist -assimilative -assimilativeness -assimilator -assimilatory -Assiniboin -assis -Assisan -assise -assish -assishly -assishness -assist -assistance -assistant -assistanted -assistantship -assistency -assister -assistful -assistive -assistless -assistor -assize -assizement -assizer -assizes -asslike -assman -Assmannshauser -assmanship -associability -associable -associableness -associate -associated -associatedness -associateship -association -associational -associationalism -associationalist -associationism -associationist -associationistic -associative -associatively -associativeness -associator -associatory -assoil -assoilment -assoilzie -assonance -assonanced -assonant -assonantal -assonantic -assonate -Assonia -assort -assortative -assorted -assortedness -assorter -assortive -assortment -assuade -assuage -assuagement -assuager -assuasive -assubjugate -assuetude -assumable -assumably -assume -assumed -assumedly -assumer -assuming -assumingly -assumingness -assumpsit -assumption -Assumptionist -assumptious -assumptiousness -assumptive -assumptively -assurable -assurance -assurant -assure -assured -assuredly -assuredness -assurer -assurge -assurgency -assurgent -assuring -assuringly -assyntite -Assyrian -Assyrianize -Assyriological -Assyriologist -Assyriologue -Assyriology -Assyroid -assythment -ast -asta -Astacidae -Astacus -Astakiwi -astalk -astarboard -astare -astart -Astarte -Astartian -Astartidae -astasia -astatic -astatically -astaticism -astatine -astatize -astatizer -astay -asteam -asteatosis -asteep -asteer -asteism -astelic -astely -aster -Asteraceae -asteraceous -Asterales -Asterella -astereognosis -asteria -asterial -Asterias -asteriated -Asteriidae -asterikos -asterin -Asterina -Asterinidae -asterioid -Asterion -asterion -Asterionella -asterisk -asterism -asterismal -astern -asternal -Asternata -asternia -Asterochiton -asteroid -asteroidal -Asteroidea -asteroidean -Asterolepidae -Asterolepis -Asterope -asterophyllite -Asterophyllites -Asterospondyli -asterospondylic -asterospondylous -Asteroxylaceae -Asteroxylon -Asterozoa -asterwort -asthenia -asthenic -asthenical -asthenobiosis -asthenobiotic -asthenolith -asthenology -asthenopia -asthenopic -asthenosphere -astheny -asthma -asthmatic -asthmatical -asthmatically -asthmatoid -asthmogenic -asthore -asthorin -Astian -astichous -astigmatic -astigmatical -astigmatically -astigmatism -astigmatizer -astigmatometer -astigmatoscope -astigmatoscopy -astigmia -astigmism -astigmometer -astigmometry -Astilbe -astilbe -astint -astipulate -astir -astite -astomatal -astomatous -astomia -astomous -astonied -astonish -astonishedly -astonisher -astonishing -astonishingly -astonishingness -astonishment -astony -astoop -astor -astound -astoundable -astounding -astoundingly -astoundment -Astrachan -astraddle -Astraea -Astraean -astraean -astraeid -Astraeidae -astraeiform -astragal -astragalar -astragalectomy -astragali -astragalocalcaneal -astragalocentral -astragalomancy -astragalonavicular -astragaloscaphoid -astragalotibial -Astragalus -astragalus -astrain -astrakanite -astrakhan -astral -astrally -astrand -Astrantia -astraphobia -astrapophobia -astray -astream -astrer -astrict -astriction -astrictive -astrictively -astrictiveness -Astrid -astride -astrier -astriferous -astrild -astringe -astringency -astringent -astringently -astringer -astroalchemist -astroblast -Astrocaryum -astrochemist -astrochemistry -astrochronological -astrocyte -astrocytoma -astrocytomata -astrodiagnosis -astrodome -astrofel -astrogeny -astroglia -astrognosy -astrogonic -astrogony -astrograph -astrographic -astrography -astroid -astroite -astrolabe -astrolabical -astrolater -astrolatry -astrolithology -astrologaster -astrologer -astrologian -astrologic -astrological -astrologically -astrologistic -astrologize -astrologous -astrology -astromancer -astromancy -astromantic -astrometeorological -astrometeorologist -astrometeorology -astrometer -astrometrical -astrometry -astronaut -astronautics -astronomer -astronomic -astronomical -astronomically -astronomics -astronomize -astronomy -Astropecten -Astropectinidae -astrophil -astrophobia -astrophotographic -astrophotography -astrophotometer -astrophotometrical -astrophotometry -astrophyllite -astrophysical -astrophysicist -astrophysics -Astrophyton -astroscope -Astroscopus -astroscopy -astrospectral -astrospectroscopic -astrosphere -astrotheology -astrut -astucious -astuciously -astucity -Astur -Asturian -astute -astutely -astuteness -astylar -Astylospongia -Astylosternus -asudden -asunder -Asuri -aswail -aswarm -asway -asweat -aswell -aswim -aswing -aswirl -aswoon -aswooned -asyla -asyllabia -asyllabic -asyllabical -asylum -asymbiotic -asymbolia -asymbolic -asymbolical -asymmetric -asymmetrical -asymmetrically -Asymmetron -asymmetry -asymptomatic -asymptote -asymptotic -asymptotical -asymptotically -asynapsis -asynaptic -asynartete -asynartetic -asynchronism -asynchronous -asyndesis -asyndetic -asyndetically -asyndeton -asynergia -asynergy -asyngamic -asyngamy -asyntactic -asyntrophy -asystole -asystolic -asystolism -asyzygetic -at -Ata -atabal -atabeg -atabek -Atabrine -Atacaman -Atacamenan -Atacamenian -Atacameno -atacamite -atactic -atactiform -Ataentsic -atafter -Ataigal -Ataiyal -Atalan -ataman -atamasco -Atamosco -atangle -atap -ataraxia -ataraxy -atatschite -ataunt -atavi -atavic -atavism -atavist -atavistic -atavistically -atavus -ataxaphasia -ataxia -ataxiagram -ataxiagraph -ataxiameter -ataxiaphasia -ataxic -ataxinomic -ataxite -ataxonomic -ataxophemia -ataxy -atazir -atbash -atchison -ate -Ateba -atebrin -atechnic -atechnical -atechny -ateeter -atef -atelectasis -atelectatic -ateleological -Ateles -atelestite -atelets -atelier -ateliosis -Atellan -atelo -atelocardia -atelocephalous -ateloglossia -atelognathia -atelomitic -atelomyelia -atelopodia -ateloprosopia -atelorachidia -atelostomia -atemporal -Aten -Atenism -Atenist -Aterian -ates -Atestine -ateuchi -ateuchus -Atfalati -Athabasca -Athabascan -athalamous -athalline -Athamantid -athanasia -Athanasian -Athanasianism -Athanasianist -athanasy -athanor -Athapascan -athar -Atharvan -Athecae -Athecata -athecate -atheism -atheist -atheistic -atheistical -atheistically -atheisticalness -atheize -atheizer -athelia -atheling -athematic -Athena -Athenaea -athenaeum -athenee -Athenian -Athenianly -athenor -Athens -atheological -atheologically -atheology -atheous -Athericera -athericeran -athericerous -atherine -Atherinidae -Atheriogaea -Atheriogaean -Atheris -athermancy -athermanous -athermic -athermous -atheroma -atheromasia -atheromata -atheromatosis -atheromatous -atherosclerosis -Atherosperma -Atherurus -athetesis -athetize -athetoid -athetosic -athetosis -athing -athirst -athlete -athletehood -athletic -athletical -athletically -athleticism -athletics -athletism -athletocracy -athlothete -athlothetes -athodyd -athort -athrepsia -athreptic -athrill -athrive -athrob -athrocyte -athrocytosis -athrogenic -athrong -athrough -athwart -athwarthawse -athwartship -athwartships -athwartwise -athymia -athymic -athymy -athyreosis -athyria -athyrid -Athyridae -Athyris -Athyrium -athyroid -athyroidism -athyrosis -Ati -Atik -Atikokania -atilt -atimon -atinga -atingle -atinkle -atip -atis -Atka -Atlanta -atlantad -atlantal -Atlantean -atlantes -Atlantic -atlantic -Atlantica -Atlantid -Atlantides -atlantite -atlantoaxial -atlantodidymus -atlantomastoid -atlantoodontoid -Atlantosaurus -Atlas -atlas -Atlaslike -atlatl -atle -atlee -atloaxoid -atloid -atloidean -atloidoaxoid -atma -atman -atmiatrics -atmiatry -atmid -atmidalbumin -atmidometer -atmidometry -atmo -atmocausis -atmocautery -atmoclastic -atmogenic -atmograph -atmologic -atmological -atmologist -atmology -atmolysis -atmolyzation -atmolyze -atmolyzer -atmometer -atmometric -atmometry -atmos -atmosphere -atmosphereful -atmosphereless -atmospheric -atmospherical -atmospherically -atmospherics -atmospherology -atmostea -atmosteal -atmosteon -Atnah -atocha -atocia -atokal -atoke -atokous -atoll -atom -atomatic -atomechanics -atomerg -atomic -atomical -atomically -atomician -atomicism -atomicity -atomics -atomiferous -atomism -atomist -atomistic -atomistical -atomistically -atomistics -atomity -atomization -atomize -atomizer -atomology -atomy -atonable -atonal -atonalism -atonalistic -atonality -atonally -atone -atonement -atoneness -atoner -atonia -atonic -atonicity -atoningly -atony -atop -Atophan -atophan -atopic -atopite -atopy -Atorai -Atossa -atour -atoxic -Atoxyl -atoxyl -atrabilarian -atrabilarious -atrabiliar -atrabiliarious -atrabiliary -atrabilious -atrabiliousness -atracheate -Atractaspis -Atragene -atragene -atrail -atrament -atramental -atramentary -atramentous -atraumatic -Atrebates -Atremata -atrematous -atremble -atrepsy -atreptic -atresia -atresic -atresy -atretic -atria -atrial -atrichia -atrichosis -atrichous -atrickle -Atridean -atrienses -atriensis -atriocoelomic -atrioporal -atriopore -atrioventricular -atrip -Atriplex -atrium -atrocha -atrochal -atrochous -atrocious -atrociously -atrociousness -atrocity -atrolactic -Atropa -atropaceous -atropal -atropamine -atrophia -atrophiated -atrophic -atrophied -atrophoderma -atrophy -atropia -atropic -Atropidae -atropine -atropinism -atropinization -atropinize -atropism -atropous -atrorubent -atrosanguineous -atroscine -atrous -atry -Atrypa -Atta -atta -Attacapan -attacco -attach -attachable -attachableness -attache -attached -attachedly -attacher -attacheship -attachment -attack -attackable -attacker -attacolite -Attacus -attacus -attagen -attaghan -attain -attainability -attainable -attainableness -attainder -attainer -attainment -attaint -attaintment -attainture -Attalea -attaleh -Attalid -attar -attargul -attask -attemper -attemperament -attemperance -attemperate -attemperately -attemperation -attemperator -attempt -attemptability -attemptable -attempter -attemptless -attend -attendance -attendancy -attendant -attendantly -attender -attendingly -attendment -attendress -attensity -attent -attention -attentional -attentive -attentively -attentiveness -attently -attenuable -attenuant -attenuate -attenuation -attenuative -attenuator -atter -attercop -attercrop -atterminal -attermine -atterminement -attern -attery -attest -attestable -attestant -attestation -attestative -attestator -attester -attestive -Attic -attic -Attical -Atticism -atticism -Atticist -Atticize -atticize -atticomastoid -attid -Attidae -attinge -attingence -attingency -attingent -attire -attired -attirement -attirer -attitude -attitudinal -attitudinarian -attitudinarianism -attitudinize -attitudinizer -Attiwendaronk -attorn -attorney -attorneydom -attorneyism -attorneyship -attornment -attract -attractability -attractable -attractableness -attractant -attracter -attractile -attractingly -attraction -attractionally -attractive -attractively -attractiveness -attractivity -attractor -attrahent -attrap -attributable -attributal -attribute -attributer -attribution -attributive -attributively -attributiveness -attrist -attrite -attrited -attriteness -attrition -attritive -attritus -attune -attunely -attunement -Atuami -atule -atumble -atune -atwain -atweel -atween -atwin -atwirl -atwist -atwitch -atwitter -atwixt -atwo -atypic -atypical -atypically -atypy -auantic -aube -aubepine -Aubrey -Aubrietia -aubrietia -aubrite -auburn -aubusson -Auca -auca -Aucan -Aucaner -Aucanian -Auchenia -auchenia -auchenium -auchlet -auction -auctionary -auctioneer -auctorial -Aucuba -aucuba -aucupate -audacious -audaciously -audaciousness -audacity -Audaean -Audian -Audibertia -audibility -audible -audibleness -audibly -audience -audiencier -audient -audile -audio -audiogenic -audiogram -audiologist -audiology -audiometer -audiometric -audiometry -Audion -audion -audiophile -audiphone -audit -audition -auditive -auditor -auditoria -auditorial -auditorially -auditorily -auditorium -auditorship -auditory -auditress -auditual -audivise -audiviser -audivision -Audrey -Audubonistic -Aueto -auganite -auge -Augean -augelite -augen -augend -auger -augerer -augh -aught -aughtlins -augite -augitic -augitite -augitophyre -augment -augmentable -augmentation -augmentationer -augmentative -augmentatively -augmented -augmentedly -augmenter -augmentive -augur -augural -augurate -augurial -augurous -augurship -augury -August -august -Augusta -augustal -Augustan -Augusti -Augustin -Augustinian -Augustinianism -Augustinism -augustly -augustness -Augustus -auh -auhuhu -Auk -auk -auklet -aula -aulacocarpous -Aulacodus -Aulacomniaceae -Aulacomnium -aulae -aularian -auld -auldfarrantlike -auletai -aulete -auletes -auletic -auletrides -auletris -aulic -aulicism -auloi -aulophyte -aulos -Aulostoma -Aulostomatidae -Aulostomi -aulostomid -Aulostomidae -Aulostomus -aulu -aum -aumaga -aumail -aumbry -aumery -aumil -aumildar -aumous -aumrie -auncel -aune -Aunjetitz -aunt -aunthood -auntie -auntish -auntlike -auntly -auntsary -auntship -aupaka -aura -aurae -aural -aurally -auramine -Aurantiaceae -aurantiaceous -Aurantium -aurantium -aurar -aurate -aurated -aureate -aureately -aureateness -aureation -aureity -Aurelia -aurelia -aurelian -Aurelius -Aureocasidium -aureola -aureole -aureolin -aureoline -aureomycin -aureous -aureously -auresca -aureus -auribromide -auric -aurichalcite -aurichalcum -aurichloride -aurichlorohydric -auricle -auricled -auricomous -Auricula -auricula -auriculae -auricular -auriculare -auriculares -Auricularia -auricularia -Auriculariaceae -auriculariae -Auriculariales -auricularian -auricularis -auricularly -auriculate -auriculated -auriculately -Auriculidae -auriculocranial -auriculoparietal -auriculotemporal -auriculoventricular -auriculovertical -auricyanhydric -auricyanic -auricyanide -auride -auriferous -aurific -aurification -auriform -aurify -Auriga -aurigal -aurigation -aurigerous -Aurigid -Aurignacian -aurilave -aurin -aurinasal -auriphone -auriphrygia -auriphrygiate -auripuncture -aurir -auriscalp -auriscalpia -auriscalpium -auriscope -auriscopy -aurist -aurite -aurivorous -auroauric -aurobromide -aurochloride -aurochs -aurocyanide -aurodiamine -auronal -aurophobia -aurophore -aurora -aurorae -auroral -aurorally -aurore -aurorean -Aurorian -aurorium -aurotellurite -aurothiosulphate -aurothiosulphuric -aurous -aurrescu -aurulent -aurum -aurure -auryl -Aus -auscult -auscultascope -auscultate -auscultation -auscultative -auscultator -auscultatory -Auscultoscope -auscultoscope -Aushar -auslaut -auslaute -Ausones -Ausonian -auspex -auspicate -auspice -auspices -auspicial -auspicious -auspiciously -auspiciousness -auspicy -Aussie -Austafrican -austenite -austenitic -Auster -austere -austerely -austereness -austerity -Austerlitz -Austin -Austral -austral -Australasian -australene -Australia -Australian -Australianism -Australianize -Australic -Australioid -australite -Australoid -Australopithecinae -australopithecine -Australopithecus -Australorp -Austrasian -Austrian -Austrianize -Austric -austrium -Austroasiatic -Austrogaea -Austrogaean -austromancy -Austronesian -Austrophil -Austrophile -Austrophilism -Austroriparian -ausu -ausubo -autacoid -autacoidal -autallotriomorphic -autantitypy -autarch -autarchic -autarchical -Autarchoglossa -autarchy -autarkic -autarkical -autarkist -autarky -aute -autechoscope -autecious -auteciously -auteciousness -autecism -autecologic -autecological -autecologically -autecologist -autecology -autecy -autem -authentic -authentical -authentically -authenticalness -authenticate -authentication -authenticator -authenticity -authenticly -authenticness -authigene -authigenetic -authigenic -authigenous -author -authorcraft -authoress -authorhood -authorial -authorially -authorish -authorism -authoritarian -authoritarianism -authoritative -authoritatively -authoritativeness -authority -authorizable -authorization -authorize -authorized -authorizer -authorless -authorling -authorly -authorship -authotype -autism -autist -autistic -auto -autoabstract -autoactivation -autoactive -autoaddress -autoagglutinating -autoagglutination -autoagglutinin -autoalarm -autoalkylation -autoallogamous -autoallogamy -autoanalysis -autoanalytic -autoantibody -autoanticomplement -autoantitoxin -autoasphyxiation -autoaspiration -autoassimilation -autobahn -autobasidia -Autobasidiomycetes -autobasidiomycetous -autobasidium -Autobasisii -autobiographal -autobiographer -autobiographic -autobiographical -autobiographically -autobiographist -autobiography -autobiology -autoblast -autoboat -autoboating -autobolide -autobus -autocab -autocade -autocall -autocamp -autocamper -autocamping -autocar -autocarist -autocarpian -autocarpic -autocarpous -autocatalepsy -autocatalysis -autocatalytic -autocatalytically -autocatalyze -autocatheterism -autocephalia -autocephality -autocephalous -autocephaly -autoceptive -autochemical -autocholecystectomy -autochrome -autochromy -autochronograph -autochthon -autochthonal -autochthonic -autochthonism -autochthonous -autochthonously -autochthonousness -autochthony -autocide -autocinesis -autoclasis -autoclastic -autoclave -autocoenobium -autocoherer -autocoid -autocollimation -autocollimator -autocolony -autocombustible -autocombustion -autocomplexes -autocondensation -autoconduction -autoconvection -autoconverter -autocopist -autocoprophagous -autocorrosion -autocracy -autocrat -autocratic -autocratical -autocratically -autocrator -autocratoric -autocratorical -autocratrix -autocratship -autocremation -autocriticism -autocystoplasty -autocytolysis -autocytolytic -autodecomposition -autodepolymerization -autodermic -autodestruction -autodetector -autodiagnosis -autodiagnostic -autodiagrammatic -autodidact -autodidactic -autodifferentiation -autodiffusion -autodigestion -autodigestive -autodrainage -autodrome -autodynamic -autodyne -autoecholalia -autoecic -autoecious -autoeciously -autoeciousness -autoecism -autoecous -autoecy -autoeducation -autoeducative -autoelectrolysis -autoelectrolytic -autoelectronic -autoelevation -autoepigraph -autoepilation -autoerotic -autoerotically -autoeroticism -autoerotism -autoexcitation -autofecundation -autofermentation -autoformation -autofrettage -autogamic -autogamous -autogamy -autogauge -autogeneal -autogenesis -autogenetic -autogenetically -autogenic -autogenous -autogenously -autogeny -Autogiro -autogiro -autognosis -autognostic -autograft -autografting -autogram -autograph -autographal -autographer -autographic -autographical -autographically -autographism -autographist -autographometer -autography -autogravure -Autoharp -autoharp -autoheader -autohemic -autohemolysin -autohemolysis -autohemolytic -autohemorrhage -autohemotherapy -autoheterodyne -autoheterosis -autohexaploid -autohybridization -autohypnosis -autohypnotic -autohypnotism -autohypnotization -autoicous -autoignition -autoimmunity -autoimmunization -autoinduction -autoinductive -autoinfection -autoinfusion -autoinhibited -autoinoculable -autoinoculation -autointellectual -autointoxicant -autointoxication -autoirrigation -autoist -autojigger -autojuggernaut -autokinesis -autokinetic -autokrator -autolaryngoscope -autolaryngoscopic -autolaryngoscopy -autolater -autolatry -autolavage -autolesion -autolimnetic -autolith -autoloading -autological -autologist -autologous -autology -autoluminescence -autoluminescent -autolysate -autolysin -autolysis -autolytic -Autolytus -autolyzate -autolyze -automa -automacy -automanual -automat -automata -automatic -automatical -automatically -automaticity -automatin -automatism -automatist -automatization -automatize -automatograph -automaton -automatonlike -automatous -automechanical -automelon -autometamorphosis -autometric -autometry -automobile -automobilism -automobilist -automobilistic -automobility -automolite -automonstration -automorph -automorphic -automorphically -automorphism -automotive -automotor -automower -automysophobia -autonegation -autonephrectomy -autonephrotoxin -autoneurotoxin -autonitridation -autonoetic -autonomasy -autonomic -autonomical -autonomically -autonomist -autonomize -autonomous -autonomously -autonomy -autonym -autoparasitism -autopathic -autopathography -autopathy -autopelagic -autopepsia -autophagi -autophagia -autophagous -autophagy -autophobia -autophoby -autophon -autophone -autophonoscope -autophonous -autophony -autophotoelectric -autophotograph -autophotometry -autophthalmoscope -autophyllogeny -autophyte -autophytic -autophytically -autophytograph -autophytography -autopilot -autoplagiarism -autoplasmotherapy -autoplast -autoplastic -autoplasty -autopneumatic -autopoint -autopoisonous -autopolar -autopolo -autopoloist -autopolyploid -autopore -autoportrait -autoportraiture -autopositive -autopotent -autoprogressive -autoproteolysis -autoprothesis -autopsic -autopsical -autopsy -autopsychic -autopsychoanalysis -autopsychology -autopsychorhythmia -autopsychosis -autoptic -autoptical -autoptically -autopticity -autopyotherapy -autoracemization -autoradiograph -autoradiographic -autoradiography -autoreduction -autoregenerator -autoregulation -autoreinfusion -autoretardation -autorhythmic -autorhythmus -autoriser -autorotation -autorrhaphy -Autosauri -Autosauria -autoschediasm -autoschediastic -autoschediastical -autoschediastically -autoschediaze -autoscience -autoscope -autoscopic -autoscopy -autosender -autosensitization -autosensitized -autosepticemia -autoserotherapy -autoserum -autosexing -autosight -autosign -autosite -autositic -autoskeleton -autosled -autoslip -autosomal -autosomatognosis -autosomatognostic -autosome -autosoteric -autosoterism -autospore -autosporic -autospray -autostability -autostage -autostandardization -autostarter -autostethoscope -autostylic -autostylism -autostyly -autosuggestibility -autosuggestible -autosuggestion -autosuggestionist -autosuggestive -autosuppression -autosymbiontic -autosymbolic -autosymbolical -autosymbolically -autosymnoia -Autosyn -autosyndesis -autotelegraph -autotelic -autotetraploid -autotetraploidy -autothaumaturgist -autotheater -autotheism -autotheist -autotherapeutic -autotherapy -autothermy -autotomic -autotomize -autotomous -autotomy -autotoxaemia -autotoxic -autotoxication -autotoxicity -autotoxicosis -autotoxin -autotoxis -autotractor -autotransformer -autotransfusion -autotransplant -autotransplantation -autotrepanation -autotriploid -autotriploidy -autotroph -autotrophic -autotrophy -autotropic -autotropically -autotropism -autotruck -autotuberculin -autoturning -autotype -autotyphization -autotypic -autotypography -autotypy -autourine -autovaccination -autovaccine -autovalet -autovalve -autovivisection -autoxeny -autoxidation -autoxidator -autoxidizability -autoxidizable -autoxidize -autoxidizer -autozooid -autrefois -autumn -autumnal -autumnally -autumnian -autumnity -Autunian -autunite -auxamylase -auxanogram -auxanology -auxanometer -auxesis -auxetic -auxetical -auxetically -auxiliar -auxiliarly -auxiliary -auxiliate -auxiliation -auxiliator -auxiliatory -auxilium -auximone -auxin -auxinic -auxinically -auxoaction -auxoamylase -auxoblast -auxobody -auxocardia -auxochrome -auxochromic -auxochromism -auxochromous -auxocyte -auxoflore -auxofluor -auxograph -auxographic -auxohormone -auxology -auxometer -auxospore -auxosubstance -auxotonic -auxotox -ava -avadana -avadavat -avadhuta -avahi -avail -availability -available -availableness -availably -availingly -availment -aval -avalanche -avalent -avalvular -Avanguardisti -avania -avanious -Avanti -avanturine -Avar -Avaradrano -avaremotemo -Avarian -avarice -avaricious -avariciously -avariciousness -Avarish -Avars -avascular -avast -avaunt -Ave -ave -avellan -avellane -avellaneous -avellano -avelonge -aveloz -Avena -avenaceous -avenage -avenalin -avener -avenge -avengeful -avengement -avenger -avengeress -avenging -avengingly -avenin -avenolith -avenous -avens -aventail -Aventine -aventurine -avenue -aver -avera -average -averagely -averager -averah -averil -averin -averment -Avernal -Avernus -averrable -averral -Averrhoa -Averroism -Averroist -Averroistic -averruncate -averruncation -averruncator -aversant -aversation -averse -aversely -averseness -aversion -aversive -avert -avertable -averted -avertedly -averter -avertible -Avertin -Avery -Aves -Avesta -Avestan -avian -avianization -avianize -aviarist -aviary -aviate -aviatic -aviation -aviator -aviatorial -aviatoriality -aviatory -aviatress -aviatrices -aviatrix -Avicennia -Avicenniaceae -Avicennism -avichi -avicide -avick -avicolous -Avicula -avicular -Avicularia -avicularia -avicularian -Aviculariidae -Avicularimorphae -avicularium -Aviculidae -aviculture -aviculturist -avid -avidious -avidiously -avidity -avidly -avidous -avidya -avifauna -avifaunal -avigate -avigation -avigator -Avignonese -avijja -Avikom -avine -aviolite -avirulence -avirulent -Avis -aviso -avital -avitaminosis -avitaminotic -avitic -avives -avizandum -avo -avocado -avocate -avocation -avocative -avocatory -avocet -avodire -avogadrite -avoid -avoidable -avoidably -avoidance -avoider -avoidless -avoidment -avoirdupois -avolate -avolation -avolitional -avondbloem -avouch -avouchable -avoucher -avouchment -avourneen -avow -avowable -avowableness -avowably -avowal -avowance -avowant -avowed -avowedly -avowedness -avower -avowry -avoyer -avoyership -Avshar -avulse -avulsion -avuncular -avunculate -aw -awa -Awabakal -awabi -Awadhi -awaft -awag -await -awaiter -Awaitlala -awakable -awake -awaken -awakenable -awakener -awakening -awakeningly -awakenment -awald -awalim -awalt -Awan -awane -awanting -awapuhi -award -awardable -awarder -awardment -aware -awaredom -awareness -awaruite -awash -awaste -awat -awatch -awater -awave -away -awayness -awber -awd -awe -awearied -aweary -aweather -aweband -awedness -awee -aweek -aweel -aweigh -Awellimiden -awesome -awesomely -awesomeness -awest -aweto -awfu -awful -awfully -awfulness -awheel -awheft -awhet -awhile -awhir -awhirl -awide -awiggle -awikiwiki -awin -awing -awink -awiwi -awkward -awkwardish -awkwardly -awkwardness -awl -awless -awlessness -awlwort -awmous -awn -awned -awner -awning -awninged -awnless -awnlike -awny -awoke -Awol -awork -awreck -awrist -awrong -awry -Awshar -ax -axal -axbreaker -axe -axed -Axel -axenic -axes -axfetch -axhammer -axhammered -axhead -axial -axiality -axially -axiate -axiation -Axifera -axiform -axifugal -axil -axile -axilemma -axilemmata -axilla -axillae -axillant -axillar -axillary -axine -axinite -axinomancy -axiolite -axiolitic -axiological -axiologically -axiologist -axiology -axiom -axiomatic -axiomatical -axiomatically -axiomatization -axiomatize -axion -axiopisty -Axis -axis -axised -axisymmetric -axisymmetrical -axite -axle -axled -axlesmith -axletree -axmaker -axmaking -axman -axmanship -axmaster -Axminster -axodendrite -axofugal -axogamy -axoid -axoidean -axolemma -axolotl -axolysis -axometer -axometric -axometry -axon -axonal -axoneure -axoneuron -Axonia -Axonolipa -axonolipous -axonometric -axonometry -Axonophora -axonophorous -Axonopus -axonost -axopetal -axophyte -axoplasm -axopodia -axopodium -axospermous -axostyle -axseed -axstone -axtree -Axumite -axunge -axweed -axwise -axwort -Ay -ay -ayacahuite -ayah -Ayahuca -Aydendron -aye -ayegreen -ayelp -ayenbite -ayin -Aylesbury -ayless -aylet -ayllu -Aymara -Aymaran -Aymoro -ayond -ayont -ayous -Ayrshire -Aythya -ayu -Ayubite -Ayyubid -azadrachta -azafrin -Azalea -azalea -Azande -azarole -azedarach -azelaic -azelate -Azelfafage -azeotrope -azeotropic -azeotropism -azeotropy -Azerbaijanese -Azerbaijani -Azerbaijanian -Azha -azide -aziethane -Azilian -azilut -Azimech -azimene -azimethylene -azimide -azimine -azimino -aziminobenzene -azimuth -azimuthal -azimuthally -azine -aziola -azlactone -azo -azobacter -azobenzene -azobenzil -azobenzoic -azobenzol -azoblack -azoch -azocochineal -azocoralline -azocorinth -azocyanide -azocyclic -azodicarboxylic -azodiphenyl -azodisulphonic -azoeosin -azoerythrin -azofication -azofier -azoflavine -azoformamide -azoformic -azofy -azogallein -azogreen -azogrenadine -azohumic -azoic -azoimide -azoisobutyronitrile -azole -azolitmin -Azolla -azomethine -azon -azonal -azonaphthalene -azonic -azonium -azoospermia -azoparaffin -azophen -azophenetole -azophenine -azophenol -azophenyl -azophenylene -azophosphin -azophosphore -azoprotein -Azorian -azorite -azorubine -azosulphine -azosulphonic -azotate -azote -azoted -azotemia -azotenesis -azotetrazole -azoth -azothionium -azotic -azotine -azotite -azotize -Azotobacter -Azotobacterieae -azotoluene -azotometer -azotorrhoea -azotous -azoturia -azovernine -azox -azoxazole -azoxime -azoxine -azoxonium -azoxy -azoxyanisole -azoxybenzene -azoxybenzoic -azoxynaphthalene -azoxyphenetole -azoxytoluidine -Aztec -Azteca -azteca -Aztecan -azthionium -azulene -azulite -azulmic -azumbre -azure -azurean -azured -azureous -azurine -azurite -azurmalachite -azurous -azury -Azygobranchia -Azygobranchiata -azygobranchiate -azygomatous -azygos -azygosperm -azygospore -azygous -azyme -azymite -azymous -B -b -ba -baa -baahling -Baal -baal -Baalath -Baalish -Baalism -Baalist -Baalite -Baalitical -Baalize -Baalshem -baar -Bab -baba -babacoote -babai -babasco -babassu -babaylan -Babbie -Babbitt -babbitt -babbitter -Babbittess -Babbittian -Babbittism -Babbittry -babblative -babble -babblement -babbler -babblesome -babbling -babblingly -babblish -babblishly -babbly -babby -Babcock -babe -babehood -Babel -Babeldom -babelet -Babelic -babelike -Babelish -Babelism -Babelize -babery -babeship -Babesia -babesiasis -Babhan -Babi -Babiana -babiche -babied -Babiism -babillard -Babine -babingtonite -babirusa -babish -babished -babishly -babishness -Babism -Babist -Babite -bablah -babloh -baboen -Babongo -baboo -baboodom -babooism -baboon -baboonery -baboonish -baboonroot -baboot -babouche -Babouvism -Babouvist -babroot -Babs -babu -Babua -babudom -babuina -babuism -babul -Babuma -Babungera -babushka -baby -babydom -babyfied -babyhood -babyhouse -babyish -babyishly -babyishness -babyism -babylike -Babylon -Babylonian -Babylonic -Babylonish -Babylonism -Babylonite -Babylonize -babyolatry -babyship -bac -bacaba -bacach -bacalao -bacao -bacbakiri -bacca -baccaceous -baccae -baccalaurean -baccalaureate -baccara -baccarat -baccate -baccated -Bacchae -bacchanal -Bacchanalia -bacchanalian -bacchanalianism -bacchanalianly -bacchanalism -bacchanalization -bacchanalize -bacchant -bacchante -bacchantes -bacchantic -bacchar -baccharis -baccharoid -baccheion -bacchiac -bacchian -Bacchic -bacchic -Bacchical -Bacchides -bacchii -bacchius -Bacchus -Bacchuslike -bacciferous -bacciform -baccivorous -bach -Bacharach -bache -bachel -bachelor -bachelordom -bachelorhood -bachelorism -bachelorize -bachelorlike -bachelorly -bachelorship -bachelorwise -bachelry -Bachichi -Bacillaceae -bacillar -Bacillariaceae -bacillariaceous -Bacillariales -Bacillarieae -Bacillariophyta -bacillary -bacillemia -bacilli -bacillian -bacillicidal -bacillicide -bacillicidic -bacilliculture -bacilliform -bacilligenic -bacilliparous -bacillite -bacillogenic -bacillogenous -bacillophobia -bacillosis -bacilluria -bacillus -Bacis -bacitracin -back -backache -backaching -backachy -backage -backband -backbearing -backbencher -backbite -backbiter -backbitingly -backblow -backboard -backbone -backboned -backboneless -backbonelessness -backbrand -backbreaker -backbreaking -backcap -backcast -backchain -backchat -backcourt -backcross -backdoor -backdown -backdrop -backed -backen -backer -backet -backfall -backfatter -backfield -backfill -backfiller -backfilling -backfire -backfiring -backflap -backflash -backflow -backfold -backframe -backfriend -backfurrow -backgame -backgammon -background -backhand -backhanded -backhandedly -backhandedness -backhander -backhatch -backheel -backhooker -backhouse -backie -backiebird -backing -backjaw -backjoint -backlands -backlash -backlashing -backless -backlet -backlings -backlog -backlotter -backmost -backpedal -backpiece -backplate -backrope -backrun -backsaw -backscraper -backset -backsetting -backsettler -backshift -backside -backsight -backslap -backslapper -backslapping -backslide -backslider -backslidingness -backspace -backspacer -backspang -backspier -backspierer -backspin -backspread -backspringing -backstaff -backstage -backstamp -backstay -backster -backstick -backstitch -backstone -backstop -backstrap -backstretch -backstring -backstrip -backstroke -backstromite -backswept -backswing -backsword -backswording -backswordman -backswordsman -backtack -backtender -backtenter -backtrack -backtracker -backtrick -backup -backveld -backvelder -backwall -backward -backwardation -backwardly -backwardness -backwards -backwash -backwasher -backwashing -backwater -backwatered -backway -backwood -backwoods -backwoodsiness -backwoodsman -backwoodsy -backword -backworm -backwort -backyarder -baclin -bacon -baconer -Baconian -Baconianism -Baconic -Baconism -Baconist -baconize -baconweed -bacony -Bacopa -bacteremia -bacteria -Bacteriaceae -bacteriaceous -bacterial -bacterially -bacterian -bacteric -bactericholia -bactericidal -bactericide -bactericidin -bacterid -bacteriemia -bacteriform -bacterin -bacterioagglutinin -bacterioblast -bacteriocyte -bacteriodiagnosis -bacteriofluorescin -bacteriogenic -bacteriogenous -bacteriohemolysin -bacterioid -bacterioidal -bacteriologic -bacteriological -bacteriologically -bacteriologist -bacteriology -bacteriolysin -bacteriolysis -bacteriolytic -bacteriolyze -bacteriopathology -bacteriophage -bacteriophagia -bacteriophagic -bacteriophagous -bacteriophagy -bacteriophobia -bacterioprecipitin -bacterioprotein -bacteriopsonic -bacteriopsonin -bacteriopurpurin -bacterioscopic -bacterioscopical -bacterioscopically -bacterioscopist -bacterioscopy -bacteriosis -bacteriosolvent -bacteriostasis -bacteriostat -bacteriostatic -bacteriotherapeutic -bacteriotherapy -bacteriotoxic -bacteriotoxin -bacteriotropic -bacteriotropin -bacteriotrypsin -bacterious -bacteritic -bacterium -bacteriuria -bacterization -bacterize -bacteroid -bacteroidal -Bacteroideae -Bacteroides -Bactrian -Bactris -Bactrites -bactriticone -bactritoid -bacula -bacule -baculi -baculiferous -baculiform -baculine -baculite -Baculites -baculitic -baculiticone -baculoid -baculum -baculus -bacury -bad -Badaga -badan -Badarian -badarrah -Badawi -baddeleyite -badderlocks -baddish -baddishly -baddishness -baddock -bade -badenite -badge -badgeless -badgeman -badger -badgerbrush -badgerer -badgeringly -badgerlike -badgerly -badgerweed -badiaga -badian -badigeon -badinage -badious -badland -badlands -badly -badminton -badness -Badon -Baduhenna -bae -Baedeker -Baedekerian -Baeria -baetuli -baetulus -baetyl -baetylic -baetylus -baetzner -bafaro -baff -baffeta -baffle -bafflement -baffler -baffling -bafflingly -bafflingness -baffy -baft -bafta -Bafyot -bag -baga -Baganda -bagani -bagasse -bagataway -bagatelle -bagatine -bagattini -bagattino -Bagaudae -Bagdad -Bagdi -bagel -bagful -baggage -baggageman -baggagemaster -baggager -baggala -bagganet -Baggara -bagged -bagger -baggie -baggily -bagginess -bagging -baggit -baggy -Bagheli -baghouse -Baginda -Bagirmi -bagleaves -baglike -bagmaker -bagmaking -bagman -bagnio -bagnut -bago -Bagobo -bagonet -bagpipe -bagpiper -bagpipes -bagplant -bagrationite -bagre -bagreef -bagroom -baguette -bagwig -bagwigged -bagworm -bagwyn -bah -Bahai -Bahaism -Bahaist -Baham -Bahama -Bahamian -bahan -bahar -Bahaullah -bahawder -bahay -bahera -bahiaite -Bahima -bahisti -Bahmani -Bahmanid -bahnung -baho -bahoe -bahoo -baht -Bahuma -bahur -bahut -Bahutu -bahuvrihi -Baianism -baidarka -Baidya -Baiera -baiginet -baignet -baikalite -baikerinite -baikerite -baikie -bail -bailable -bailage -bailee -bailer -bailey -bailie -bailiery -bailieship -bailiff -bailiffry -bailiffship -bailiwick -bailliage -baillone -Baillonella -bailment -bailor -bailpiece -bailsman -bailwood -bain -bainie -Baining -baioc -baiocchi -baiocco -bairagi -Bairam -bairn -bairnie -bairnish -bairnishness -bairnliness -bairnly -bairnteam -bairntime -bairnwort -Bais -Baisakh -baister -bait -baiter -baith -baittle -baitylos -baize -bajada -bajan -Bajardo -bajarigar -Bajau -Bajocian -bajra -bajree -bajri -bajury -baka -Bakairi -bakal -Bakalai -Bakalei -Bakatan -bake -bakeboard -baked -bakehouse -Bakelite -bakelite -bakelize -baken -bakeoven -bakepan -baker -bakerdom -bakeress -bakerite -bakerless -bakerly -bakership -bakery -bakeshop -bakestone -Bakhtiari -bakie -baking -bakingly -bakli -Bakongo -Bakshaish -baksheesh -baktun -Baku -baku -Bakuba -bakula -Bakunda -Bakuninism -Bakuninist -bakupari -Bakutu -Bakwiri -Bal -bal -Bala -Balaam -Balaamite -Balaamitical -balachong -balaclava -baladine -Balaena -Balaenicipites -balaenid -Balaenidae -balaenoid -Balaenoidea -balaenoidean -Balaenoptera -Balaenopteridae -balafo -balagan -balaghat -balai -Balaic -Balak -Balaklava -balalaika -Balan -balance -balanceable -balanced -balancedness -balancelle -balanceman -balancement -balancer -balancewise -balancing -balander -balandra -balandrana -balaneutics -balangay -balanic -balanid -Balanidae -balaniferous -balanism -balanite -Balanites -balanitis -balanoblennorrhea -balanocele -Balanoglossida -Balanoglossus -balanoid -Balanophora -Balanophoraceae -balanophoraceous -balanophore -balanophorin -balanoplasty -balanoposthitis -balanopreputial -Balanops -Balanopsidaceae -Balanopsidales -balanorrhagia -Balanta -Balante -balantidial -balantidiasis -balantidic -balantidiosis -Balantidium -Balanus -Balao -balao -Balarama -balas -balata -balatong -balatron -balatronic -balausta -balaustine -balaustre -Balawa -Balawu -balboa -balbriggan -balbutiate -balbutient -balbuties -balconet -balconied -balcony -bald -baldachin -baldachined -baldachini -baldachino -baldberry -baldcrown -balden -balder -balderdash -baldhead -baldicoot -Baldie -baldish -baldling -baldly -baldmoney -baldness -baldpate -baldrib -baldric -baldricked -baldricwise -balductum -Baldwin -baldy -bale -Balearian -Balearic -Balearica -baleen -balefire -baleful -balefully -balefulness -balei -baleise -baleless -baler -balete -Bali -bali -balibago -Balija -Balilla -baline -Balinese -balinger -balinghasay -balisaur -balistarius -Balistes -balistid -Balistidae -balistraria -balita -balk -Balkan -Balkanic -Balkanization -Balkanize -Balkar -balker -balkingly -Balkis -balky -ball -ballad -ballade -balladeer -ballader -balladeroyal -balladic -balladical -balladier -balladism -balladist -balladize -balladlike -balladling -balladmonger -balladmongering -balladry -balladwise -ballahoo -ballam -ballan -ballant -ballast -ballastage -ballaster -ballasting -ballata -ballate -ballatoon -balldom -balled -baller -ballerina -ballet -balletic -balletomane -Ballhausplatz -balli -ballist -ballista -ballistae -ballistic -ballistically -ballistician -ballistics -Ballistite -ballistocardiograph -ballium -ballmine -ballogan -ballonet -balloon -balloonation -ballooner -balloonery -balloonet -balloonfish -balloonflower -balloonful -ballooning -balloonish -balloonist -balloonlike -ballot -Ballota -ballotade -ballotage -balloter -balloting -ballotist -ballottement -ballow -Ballplatz -ballplayer -ballproof -ballroom -ballstock -ballup -ballweed -bally -ballyhack -ballyhoo -ballyhooer -ballywack -ballywrack -balm -balmacaan -Balmarcodes -Balmawhapple -balmily -balminess -balmlike -balmony -Balmoral -balmy -balneal -balneary -balneation -balneatory -balneographer -balneography -balneologic -balneological -balneologist -balneology -balneophysiology -balneotechnics -balneotherapeutics -balneotherapia -balneotherapy -Balnibarbi -Baloch -Baloghia -Balolo -balonea -baloney -baloo -Balopticon -Balor -Baloskion -Baloskionaceae -balow -balsa -balsam -balsamation -Balsamea -Balsameaceae -balsameaceous -balsamer -balsamic -balsamical -balsamically -balsamiferous -balsamina -Balsaminaceae -balsaminaceous -balsamine -balsamitic -balsamiticness -balsamize -balsamo -Balsamodendron -Balsamorrhiza -balsamous -balsamroot -balsamum -balsamweed -balsamy -Balt -baltei -balter -balteus -Balthasar -Balti -Baltic -Baltimore -Baltimorean -baltimorite -Baltis -balu -Baluba -Baluch -Baluchi -Baluchistan -baluchithere -baluchitheria -Baluchitherium -baluchitherium -Baluga -Balunda -balushai -baluster -balustered -balustrade -balustraded -balustrading -balut -balwarra -balza -Balzacian -balzarine -bam -Bamalip -Bamangwato -bamban -Bambara -bambini -bambino -bambocciade -bamboo -bamboozle -bamboozlement -bamboozler -Bambos -bamboula -Bambuba -Bambusa -Bambuseae -Bambute -bamoth -Ban -ban -Bana -banaba -banago -banak -banakite -banal -banality -banally -banana -Bananaland -Bananalander -Banande -bananist -bananivorous -banat -Banate -banatite -banausic -Banba -Banbury -banc -banca -bancal -banchi -banco -bancus -band -Banda -banda -bandage -bandager -bandagist -bandaite -bandaka -bandala -bandalore -bandanna -bandannaed -bandar -bandarlog -bandbox -bandboxical -bandboxy -bandcase -bandcutter -bande -bandeau -banded -bandelet -bander -Banderma -banderole -bandersnatch -bandfish -bandhava -bandhook -Bandhor -bandhu -bandi -bandicoot -bandicoy -bandie -bandikai -bandiness -banding -bandit -banditism -banditry -banditti -bandle -bandless -bandlessly -bandlessness -bandlet -bandman -bandmaster -bando -bandog -bandoleer -bandoleered -bandoline -bandonion -Bandor -bandore -bandrol -bandsman -bandstand -bandster -bandstring -Bandusia -Bandusian -bandwork -bandy -bandyball -bandyman -bane -baneberry -baneful -banefully -banefulness -banewort -Banff -bang -banga -Bangala -bangalay -bangalow -Bangash -bangboard -bange -banger -banghy -Bangia -Bangiaceae -bangiaceous -Bangiales -banging -bangkok -bangle -bangled -bangling -bangster -bangtail -Bangwaketsi -bani -banian -banig -banilad -banish -banisher -banishment -banister -Baniva -baniwa -baniya -banjo -banjoist -banjore -banjorine -banjuke -bank -bankable -Bankalachi -bankbook -banked -banker -bankera -bankerdom -bankeress -banket -bankfull -banking -bankman -bankrider -bankrupt -bankruptcy -bankruptism -bankruptlike -bankruptly -bankruptship -bankrupture -bankshall -Banksia -Banksian -bankside -banksman -bankweed -banky -banner -bannered -bannerer -banneret -bannerfish -bannerless -bannerlike -bannerman -bannerol -bannerwise -bannet -banning -bannister -Bannock -bannock -Bannockburn -banns -bannut -banovina -banquet -banqueteer -banqueteering -banqueter -banquette -bansalague -banshee -banstickle -bant -Bantam -bantam -bantamize -bantamweight -bantay -bantayan -banteng -banter -banterer -banteringly -bantery -Bantingism -bantingize -bantling -Bantoid -Bantu -banty -banuyo -banxring -banya -Banyai -banyan -Banyoro -Banyuls -banzai -baobab -bap -Baphia -Baphomet -Baphometic -Baptanodon -Baptisia -baptisin -baptism -baptismal -baptismally -Baptist -baptistery -baptistic -baptizable -baptize -baptizee -baptizement -baptizer -Baptornis -bar -bara -barabara -barabora -Barabra -Baraca -barad -baragnosis -baragouin -baragouinish -Baraithas -barajillo -Baralipton -Baramika -barandos -barangay -barasingha -barathea -barathra -barathrum -barauna -barb -Barbacoa -Barbacoan -barbacou -Barbadian -Barbados -barbal -barbaloin -Barbara -barbaralalia -Barbarea -barbaresque -Barbarian -barbarian -barbarianism -barbarianize -barbaric -barbarical -barbarically -barbarious -barbariousness -barbarism -barbarity -barbarization -barbarize -barbarous -barbarously -barbarousness -Barbary -barbary -barbas -barbasco -barbastel -barbate -barbated -barbatimao -barbe -barbecue -barbed -barbeiro -barbel -barbellate -barbellula -barbellulate -barber -barberess -barberfish -barberish -barberry -barbershop -barbet -barbette -Barbeyaceae -barbican -barbicel -barbigerous -barbion -barbital -barbitalism -barbiton -barbitone -barbitos -barbiturate -barbituric -barbless -barblet -barbone -barbotine -Barbra -barbudo -Barbula -barbulate -barbule -barbulyie -barbwire -Barcan -barcarole -barcella -barcelona -Barcoo -bard -bardane -bardash -bardcraft -bardel -Bardesanism -Bardesanist -Bardesanite -bardess -bardic -bardie -bardiglio -bardily -bardiness -barding -bardish -bardism -bardlet -bardlike -bardling -bardo -Bardolater -Bardolatry -Bardolph -Bardolphian -bardship -Bardulph -bardy -Bare -bare -bareback -barebacked -bareboat -barebone -bareboned -bareca -barefaced -barefacedly -barefacedness -barefit -barefoot -barefooted -barehanded -barehead -bareheaded -bareheadedness -barelegged -barely -barenecked -bareness -barer -baresark -baresma -baretta -barff -barfish -barfly -barful -bargain -bargainee -bargainer -bargainor -bargainwise -bargander -barge -bargeboard -bargee -bargeer -bargeese -bargehouse -bargelike -bargeload -bargeman -bargemaster -barger -bargh -bargham -barghest -bargoose -Bari -bari -baria -baric -barid -barie -barile -barilla -baring -baris -barish -barit -barite -baritone -barium -bark -barkbound -barkcutter -barkeeper -barken -barkentine -barker -barkery -barkevikite -barkevikitic -barkey -barkhan -barking -barkingly -Barkinji -barkle -barkless -barklyite -barkometer -barkpeel -barkpeeler -barkpeeling -barksome -barky -barlafumble -barlafummil -barless -barley -barleybird -barleybreak -barleycorn -barleyhood -barleymow -barleysick -barling -barlock -barlow -barm -barmaid -barman -barmaster -barmbrack -barmcloth -Barmecidal -Barmecide -barmkin -barmote -barmskin -barmy -barmybrained -barn -Barnabas -Barnabite -Barnaby -barnacle -Barnard -barnard -barnbrack -Barnburner -Barney -barney -barnful -barnhardtite -barnman -barnstorm -barnstormer -barnstorming -Barnumism -Barnumize -barny -barnyard -Baroco -barocyclonometer -barodynamic -barodynamics -barognosis -barogram -barograph -barographic -baroi -barolo -barology -Barolong -barometer -barometric -barometrical -barometrically -barometrograph -barometrography -barometry -barometz -baromotor -baron -baronage -baroness -baronet -baronetage -baronetcy -baronethood -baronetical -baronetship -barong -Baronga -baronial -baronize -baronry -baronship -barony -Baroque -baroque -baroscope -baroscopic -baroscopical -Barosma -barosmin -barotactic -barotaxis -barotaxy -barothermograph -barothermohygrograph -baroto -Barotse -barouche -barouchet -Barouni -baroxyton -barpost -barquantine -barra -barrabkie -barrable -barrabora -barracan -barrack -barracker -barraclade -barracoon -barracouta -barracuda -barrad -barragan -barrage -barragon -barramunda -barramundi -barranca -barrandite -barras -barrator -barratrous -barratrously -barratry -barred -barrel -barrelage -barreled -barreler -barrelet -barrelful -barrelhead -barrelmaker -barrelmaking -barrelwise -barren -barrenly -barrenness -barrenwort -barrer -barret -Barrett -barrette -barretter -barricade -barricader -barricado -barrico -barrier -barriguda -barrigudo -barrikin -barriness -barring -Barrington -Barringtonia -Barrio -barrio -barrister -barristerial -barristership -barristress -barroom -barrow -barrowful -Barrowist -barrowman -barrulee -barrulet -barrulety -barruly -Barry -barry -Barsac -barse -barsom -Bart -bartender -bartending -barter -barterer -barth -barthite -bartholinitis -Bartholomean -Bartholomew -Bartholomewtide -Bartholomite -bartizan -bartizaned -Bartlemy -Bartlett -Barton -barton -Bartonella -Bartonia -Bartram -Bartramia -Bartramiaceae -Bartramian -Bartsia -baru -Baruch -Barundi -baruria -barvel -barwal -barway -barways -barwise -barwood -barycenter -barycentric -barye -baryecoia -baryglossia -barylalia -barylite -baryphonia -baryphonic -baryphony -barysilite -barysphere -baryta -barytes -barythymia -barytic -barytine -barytocalcite -barytocelestine -barytocelestite -baryton -barytone -barytophyllite -barytostrontianite -barytosulphate -bas -basal -basale -basalia -basally -basalt -basaltes -basaltic -basaltiform -basaltine -basaltoid -basanite -basaree -Bascology -bascule -base -baseball -baseballdom -baseballer -baseboard -baseborn -basebred -based -basehearted -baseheartedness -baselard -baseless -baselessly -baselessness -baselike -baseliner -Basella -Basellaceae -basellaceous -basely -baseman -basement -basementward -baseness -basenji -bases -bash -bashaw -bashawdom -bashawism -bashawship -bashful -bashfully -bashfulness -Bashilange -Bashkir -bashlyk -Bashmuric -basial -basialveolar -basiarachnitis -basiarachnoiditis -basiate -basiation -Basibracteolate -basibranchial -basibranchiate -basibregmatic -basic -basically -basichromatic -basichromatin -basichromatinic -basichromiole -basicity -basicranial -basicytoparaplastin -basidia -basidial -basidigital -basidigitale -basidiogenetic -basidiolichen -Basidiolichenes -basidiomycete -Basidiomycetes -basidiomycetous -basidiophore -basidiospore -basidiosporous -basidium -basidorsal -basifacial -basification -basifier -basifixed -basifugal -basify -basigamous -basigamy -basigenic -basigenous -basiglandular -basigynium -basihyal -basihyoid -Basil -basil -basilar -Basilarchia -basilary -basilateral -basilemma -basileus -Basilian -basilic -Basilica -basilica -Basilicae -basilical -basilican -basilicate -basilicon -Basilics -Basilidian -Basilidianism -basilinna -basiliscan -basiliscine -Basiliscus -basilisk -basilissa -Basilosauridae -Basilosaurus -basilweed -basilysis -basilyst -basimesostasis -basin -basinasal -basinasial -basined -basinerved -basinet -basinlike -basioccipital -basion -basiophitic -basiophthalmite -basiophthalmous -basiotribe -basiotripsy -basiparachromatin -basiparaplastin -basipetal -basiphobia -basipodite -basipoditic -basipterygial -basipterygium -basipterygoid -basiradial -basirhinal -basirostral -basis -basiscopic -basisphenoid -basisphenoidal -basitemporal -basiventral -basivertebral -bask -basker -Baskerville -basket -basketball -basketballer -basketful -basketing -basketmaker -basketmaking -basketry -basketware -basketwoman -basketwood -basketwork -basketworm -Baskish -Baskonize -Basoche -Basoga -basoid -Basoko -Basommatophora -basommatophorous -bason -Basongo -basophile -basophilia -basophilic -basophilous -basophobia -basos -basote -Basque -basque -basqued -basquine -bass -Bassa -Bassalia -Bassalian -bassan -bassanello -bassanite -bassara -bassarid -Bassaris -Bassariscus -bassarisk -basset -bassetite -bassetta -Bassia -bassie -bassine -bassinet -bassist -bassness -basso -bassoon -bassoonist -bassorin -bassus -basswood -Bast -bast -basta -Bastaard -Bastard -bastard -bastardism -bastardization -bastardize -bastardliness -bastardly -bastardy -baste -basten -baster -bastide -bastille -bastinade -bastinado -basting -bastion -bastionary -bastioned -bastionet -bastite -bastnasite -basto -baston -basurale -Basuto -Bat -bat -bataan -batad -Batak -batakan -bataleur -Batan -batara -batata -Batatas -batatilla -Batavi -Batavian -batch -batcher -bate -batea -bateau -bateaux -bated -Batekes -batel -bateman -batement -bater -Batetela -batfish -batfowl -batfowler -batfowling -Bath -bath -Bathala -bathe -batheable -bather -bathetic -bathflower -bathhouse -bathic -bathing -bathless -bathman -bathmic -bathmism -bathmotropic -bathmotropism -bathochromatic -bathochromatism -bathochrome -bathochromic -bathochromy -bathoflore -bathofloric -batholite -batholith -batholithic -batholitic -bathometer -Bathonian -bathophobia -bathorse -bathos -bathrobe -bathroom -bathroomed -bathroot -bathtub -bathukolpian -bathukolpic -bathvillite -bathwort -bathyal -bathyanesthesia -bathybian -bathybic -bathybius -bathycentesis -bathychrome -bathycolpian -bathycolpic -bathycurrent -bathyesthesia -bathygraphic -bathyhyperesthesia -bathyhypesthesia -bathylimnetic -bathylite -bathylith -bathylithic -bathylitic -bathymeter -bathymetric -bathymetrical -bathymetrically -bathymetry -bathyorographical -bathypelagic -bathyplankton -bathyseism -bathysmal -bathysophic -bathysophical -bathysphere -bathythermograph -Batidaceae -batidaceous -batik -batiker -batikulin -batikuling -bating -batino -Batis -batiste -batitinan -batlan -batlike -batling -batlon -batman -Batocrinidae -Batocrinus -Batodendron -batoid -Batoidei -Batoka -baton -Batonga -batonistic -batonne -batophobia -Batrachia -batrachian -batrachiate -Batrachidae -Batrachium -batrachoid -Batrachoididae -batrachophagous -Batrachophidia -batrachophobia -batrachoplasty -Batrachospermum -bats -batsman -batsmanship -batster -batswing -batt -Batta -batta -battailous -Battak -Battakhin -battalia -battalion -battarism -battarismus -battel -batteler -batten -battener -battening -batter -batterable -battercake -batterdock -battered -batterer -batterfang -batteried -batterman -battery -batteryman -battik -batting -battish -battle -battled -battledore -battlefield -battleful -battleground -battlement -battlemented -battleplane -battler -battleship -battlesome -battlestead -battlewagon -battleward -battlewise -battological -battologist -battologize -battology -battue -batty -batukite -batule -Batussi -Batwa -batwing -batyphone -batz -batzen -bauble -baublery -baubling -Baubo -bauch -bauchle -bauckie -bauckiebird -baud -baudekin -baudrons -Bauera -Bauhinia -baul -bauleah -Baume -baumhauerite -baun -bauno -Baure -bauson -bausond -bauta -bauxite -bauxitite -Bavarian -bavaroy -bavary -bavenite -baviaantje -Bavian -bavian -baviere -bavin -Bavius -bavoso -baw -bawarchi -bawbee -bawcock -bawd -bawdily -bawdiness -bawdry -bawdship -bawdyhouse -bawl -bawler -bawley -bawn -Bawra -bawtie -baxter -Baxterian -Baxterianism -baxtone -bay -Baya -baya -bayadere -bayal -bayamo -Bayard -bayard -bayardly -bayberry -baybolt -baybush -baycuru -bayed -bayeta -baygall -bayhead -bayish -bayldonite -baylet -baylike -bayman -bayness -Bayogoula -bayok -bayonet -bayoneted -bayoneteer -bayou -baywood -bazaar -baze -Bazigar -bazoo -bazooka -bazzite -bdellid -Bdellidae -bdellium -bdelloid -Bdelloida -Bdellostoma -Bdellostomatidae -Bdellostomidae -bdellotomy -Bdelloura -Bdellouridae -be -Bea -beach -beachcomb -beachcomber -beachcombing -beached -beachhead -beachlamar -beachless -beachman -beachmaster -beachward -beachy -beacon -beaconage -beaconless -beaconwise -bead -beaded -beader -beadflush -beadhouse -beadily -beadiness -beading -beadle -beadledom -beadlehood -beadleism -beadlery -beadleship -beadlet -beadlike -beadman -beadroll -beadrow -beadsman -beadswoman -beadwork -beady -Beagle -beagle -beagling -beak -beaked -beaker -beakerful -beakerman -beakermen -beakful -beakhead -beakiron -beaklike -beaky -beal -beala -bealing -beallach -bealtared -Bealtine -Bealtuinn -beam -beamage -beambird -beamed -beamer -beamfilling -beamful -beamhouse -beamily -beaminess -beaming -beamingly -beamish -beamless -beamlet -beamlike -beamman -beamsman -beamster -beamwork -beamy -bean -beanbag -beanbags -beancod -beanery -beanfeast -beanfeaster -beanfield -beanie -beano -beansetter -beanshooter -beanstalk -beant -beanweed -beany -beaproned -bear -bearable -bearableness -bearably -bearance -bearbaiter -bearbaiting -bearbane -bearberry -bearbind -bearbine -bearcoot -beard -bearded -bearder -beardie -bearding -beardless -beardlessness -beardom -beardtongue -beardy -bearer -bearess -bearfoot -bearherd -bearhide -bearhound -bearing -bearish -bearishly -bearishness -bearlet -bearlike -bearm -bearship -bearskin -beartongue -bearward -bearwood -bearwort -beast -beastbane -beastdom -beasthood -beastie -beastily -beastish -beastishness -beastlike -beastlily -beastliness -beastling -beastlings -beastly -beastman -beastship -beat -Beata -beata -beatable -beatae -beatee -beaten -beater -beaterman -beath -beatific -beatifical -beatifically -beatificate -beatification -beatify -beatinest -beating -beatitude -Beatrice -Beatrix -beatster -beatus -beau -Beauclerc -beaufin -Beaufort -beauish -beauism -Beaujolais -Beaumontia -Beaune -beaupere -beauseant -beauship -beauteous -beauteously -beauteousness -beauti -beautician -beautied -beautification -beautifier -beautiful -beautifully -beautifulness -beautify -beautihood -beauty -beautydom -beautyship -beaux -beaver -Beaverboard -beaverboard -beavered -beaverette -beaverish -beaverism -beaverite -beaverize -Beaverkill -beaverkin -beaverlike -beaverpelt -beaverroot -beaverteen -beaverwood -beavery -beback -bebait -beballed -bebang -bebannered -bebar -bebaron -bebaste -bebat -bebathe -bebatter -bebay -bebeast -bebed -bebeerine -bebeeru -bebelted -bebilya -bebite -bebization -beblain -beblear -bebled -bebless -beblister -beblood -bebloom -beblotch -beblubber -bebog -bebop -beboss -bebotch -bebothered -bebouldered -bebrave -bebreech -bebrine -bebrother -bebrush -bebump -bebusy -bebuttoned -becall -becalm -becalmment -becap -becard -becarpet -becarve -becassocked -becater -because -beccafico -becense -bechained -bechalk -bechance -becharm -bechase -bechatter -bechauffeur -becheck -becher -bechern -bechignoned -bechirp -Bechtler -Bechuana -becircled -becivet -Beck -beck -beckelite -becker -becket -Beckie -beckiron -beckon -beckoner -beckoning -beckoningly -Becky -beclad -beclamor -beclamour -beclang -beclart -beclasp -beclatter -beclaw -becloak -beclog -beclothe -becloud -beclout -beclown -becluster -becobweb -becoiffed -becollier -becolme -becolor -becombed -become -becomes -becoming -becomingly -becomingness -becomma -becompass -becompliment -becoom -becoresh -becost -becousined -becovet -becoward -becquerelite -becram -becramp -becrampon -becrawl -becreep -becrime -becrimson -becrinolined -becripple -becroak -becross -becrowd -becrown -becrush -becrust -becry -becudgel -becuffed -becuiba -becumber -becuna -becurl -becurry -becurse -becurtained -becushioned -becut -bed -bedabble -bedad -bedaggered -bedamn -bedamp -bedangled -bedare -bedark -bedarken -bedash -bedaub -bedawn -beday -bedaze -bedazement -bedazzle -bedazzlement -bedazzling -bedazzlingly -bedboard -bedbug -bedcap -bedcase -bedchair -bedchamber -bedclothes -bedcord -bedcover -bedded -bedder -bedding -bedead -bedeaf -bedeafen -bedebt -bedeck -bedecorate -bedeguar -bedel -beden -bedene -bedesman -bedevil -bedevilment -bedew -bedewer -bedewoman -bedfast -bedfellow -bedfellowship -bedflower -bedfoot -Bedford -bedframe -bedgery -bedgoer -bedgown -bediademed -bediamonded -bediaper -bedight -bedikah -bedim -bedimple -bedin -bedip -bedirt -bedirter -bedirty -bedismal -bedizen -bedizenment -bedkey -bedlam -bedlamer -Bedlamic -bedlamism -bedlamite -bedlamitish -bedlamize -bedlar -bedless -bedlids -bedmaker -bedmaking -bedman -bedmate -bedoctor -bedog -bedolt -bedot -bedote -Bedouin -Bedouinism -bedouse -bedown -bedoyo -bedpan -bedplate -bedpost -bedquilt -bedrabble -bedraggle -bedragglement -bedrail -bedral -bedrape -bedravel -bedrench -bedress -bedribble -bedrid -bedridden -bedriddenness -bedrift -bedright -bedrip -bedrivel -bedrizzle -bedrock -bedroll -bedroom -bedrop -bedrown -bedrowse -bedrug -bedscrew -bedsick -bedside -bedsite -bedsock -bedsore -bedspread -bedspring -bedstaff -bedstand -bedstaves -bedstead -bedstock -bedstraw -bedstring -bedtick -bedticking -bedtime -bedub -beduchess -beduck -beduke -bedull -bedumb -bedunce -bedunch -bedung -bedur -bedusk -bedust -bedwarf -bedway -bedways -bedwell -bedye -Bee -bee -beearn -beebread -beech -beechdrops -beechen -beechnut -beechwood -beechwoods -beechy -beedged -beedom -beef -beefeater -beefer -beefhead -beefheaded -beefily -beefin -beefiness -beefish -beefishness -beefless -beeflower -beefsteak -beeftongue -beefwood -beefy -beegerite -beehead -beeheaded -beeherd -beehive -beehouse -beeish -beeishness -beek -beekeeper -beekeeping -beekite -Beekmantown -beelbow -beelike -beeline -beelol -Beelzebub -Beelzebubian -Beelzebul -beeman -beemaster -been -beennut -beer -beerage -beerbachite -beerbibber -beerhouse -beerily -beeriness -beerish -beerishly -beermaker -beermaking -beermonger -beerocracy -Beerothite -beerpull -beery -bees -beest -beestings -beeswax -beeswing -beeswinged -beet -beeth -Beethovenian -Beethovenish -Beethovian -beetle -beetled -beetlehead -beetleheaded -beetler -beetlestock -beetlestone -beetleweed -beetmister -beetrave -beetroot -beetrooty -beety -beeve -beevish -beeware -beeway -beeweed -beewise -beewort -befall -befame -befamilied -befamine -befan -befancy -befanned -befathered -befavor -befavour -befeather -beferned -befetished -befetter -befezzed -befiddle -befilch -befile -befilleted -befilmed -befilth -befinger -befire -befist -befit -befitting -befittingly -befittingness -beflag -beflannel -beflap -beflatter -beflea -befleck -beflounce -beflour -beflout -beflower -beflum -befluster -befoam -befog -befool -befoolment -befop -before -beforehand -beforeness -beforested -beforetime -beforetimes -befortune -befoul -befouler -befoulment -befountained -befraught -befreckle -befreeze -befreight -befret -befriend -befriender -befriendment -befrill -befringe -befriz -befrocked -befrogged -befrounce -befrumple -befuddle -befuddlement -befuddler -befume -befurbelowed -befurred -beg -begabled -begad -begall -begani -begar -begari -begarlanded -begarnish -begartered -begash -begat -begaud -begaudy -begay -begaze -begeck -begem -beget -begettal -begetter -beggable -beggar -beggardom -beggarer -beggaress -beggarhood -beggarism -beggarlike -beggarliness -beggarly -beggarman -beggarweed -beggarwise -beggarwoman -beggary -Beggiatoa -Beggiatoaceae -beggiatoaceous -begging -beggingly -beggingwise -Beghard -begift -begiggle -begild -begin -beginger -beginner -beginning -begird -begirdle -beglad -beglamour -beglare -beglerbeg -beglerbeglic -beglerbegluc -beglerbegship -beglerbey -beglic -beglide -beglitter -beglobed -begloom -begloze -begluc -beglue -begnaw -bego -begob -begobs -begoggled -begohm -begone -begonia -Begoniaceae -begoniaceous -Begoniales -begorra -begorry -begotten -begottenness -begoud -begowk -begowned -begrace -begrain -begrave -begray -begrease -begreen -begrett -begrim -begrime -begrimer -begroan -begrown -begrudge -begrudgingly -begruntle -begrutch -begrutten -beguard -beguess -beguile -beguileful -beguilement -beguiler -beguiling -beguilingly -Beguin -Beguine -beguine -begulf -begum -begun -begunk -begut -behale -behalf -behallow -behammer -behap -behatted -behave -behavior -behavioral -behaviored -behaviorism -behaviorist -behavioristic -behavioristically -behead -beheadal -beheader -beheadlined -behear -behears -behearse -behedge -beheld -behelp -behemoth -behen -behenate -behenic -behest -behind -behinder -behindhand -behindsight -behint -behn -behold -beholdable -beholden -beholder -beholding -beholdingness -behoney -behoof -behooped -behoot -behoove -behooveful -behoovefully -behoovefulness -behooves -behooving -behoovingly -behorn -behorror -behowl -behung -behusband -behymn -behypocrite -beice -Beid -beige -being -beingless -beingness -beinked -beira -beisa -Beja -bejabers -bejade -bejan -bejant -bejaundice -bejazz -bejel -bejewel -bejezebel -bejig -bejuggle -bejumble -bekah -bekerchief -bekick -bekilted -beking -bekinkinite -bekiss -bekko -beknave -beknight -beknit -beknived -beknotted -beknottedly -beknottedness -beknow -beknown -Bel -bel -bela -belabor -belaced -beladle -belady -belage -belah -Belait -Belaites -belam -Belamcanda -belanda -belar -belard -belash -belate -belated -belatedly -belatedness -belatticed -belaud -belauder -belavendered -belay -belayer -belch -belcher -beld -beldam -beldamship -belderroot -belduque -beleaf -beleaguer -beleaguerer -beleaguerment -beleap -beleave -belecture -beledgered -belee -belemnid -belemnite -Belemnites -belemnitic -Belemnitidae -belemnoid -Belemnoidea -beletter -belfried -belfry -belga -Belgae -Belgian -Belgic -Belgophile -Belgrade -Belgravia -Belgravian -Belial -Belialic -Belialist -belibel -belick -belie -belief -beliefful -belieffulness -beliefless -belier -believability -believable -believableness -believe -believer -believing -believingly -belight -beliked -Belili -belimousined -Belinda -Belinuridae -Belinurus -belion -beliquor -Belis -belite -belitter -belittle -belittlement -belittler -belive -bell -Bella -Bellabella -Bellacoola -belladonna -bellarmine -Bellatrix -bellbind -bellbird -bellbottle -bellboy -belle -belled -belledom -Belleek -bellehood -belleric -Bellerophon -Bellerophontidae -belletrist -belletristic -bellflower -bellhanger -bellhanging -bellhop -bellhouse -bellicism -bellicose -bellicosely -bellicoseness -bellicosity -bellied -belliferous -belligerence -belligerency -belligerent -belligerently -belling -bellipotent -Bellis -bellite -bellmaker -bellmaking -bellman -bellmanship -bellmaster -bellmouth -bellmouthed -Bellona -Bellonian -bellonion -bellote -Bellovaci -bellow -bellower -bellows -bellowsful -bellowslike -bellowsmaker -bellowsmaking -bellowsman -bellpull -belltail -belltopper -belltopperdom -bellware -bellwaver -bellweed -bellwether -bellwind -bellwine -bellwood -bellwort -belly -bellyache -bellyband -bellyer -bellyfish -bellyflaught -bellyful -bellying -bellyland -bellylike -bellyman -bellypiece -bellypinch -beloam -beloeilite -beloid -belomancy -Belone -belonesite -belong -belonger -belonging -belonid -Belonidae -belonite -belonoid -belonosphaerite -belord -Belostoma -Belostomatidae -Belostomidae -belout -belove -beloved -below -belowstairs -belozenged -Belshazzar -Belshazzaresque -belsire -belt -Beltane -belted -Beltene -belter -Beltian -beltie -beltine -belting -Beltir -Beltis -beltmaker -beltmaking -beltman -belton -beltwise -Beluchi -Belucki -beluga -belugite -belute -belve -belvedere -Belverdian -bely -belying -belyingly -belzebuth -bema -bemad -bemadam -bemaddening -bemail -bemaim -bemajesty -beman -bemangle -bemantle -bemar -bemartyr -bemask -bemaster -bemat -bemata -bemaul -bemazed -Bemba -Bembecidae -Bembex -bemeal -bemean -bemedaled -bemedalled -bementite -bemercy -bemingle -beminstrel -bemire -bemirement -bemirror -bemirrorment -bemist -bemistress -bemitered -bemitred -bemix -bemoan -bemoanable -bemoaner -bemoaning -bemoaningly -bemoat -bemock -bemoil -bemoisten -bemole -bemolt -bemonster -bemoon -bemotto -bemoult -bemouth -bemuck -bemud -bemuddle -bemuddlement -bemuddy -bemuffle -bemurmur -bemuse -bemused -bemusedly -bemusement -bemusk -bemuslined -bemuzzle -Ben -ben -bena -benab -Benacus -bename -benami -benamidar -benasty -benben -bench -benchboard -bencher -benchership -benchfellow -benchful -benching -benchland -benchlet -benchman -benchwork -benchy -bencite -bend -benda -bendability -bendable -bended -bender -bending -bendingly -bendlet -bendsome -bendwise -bendy -bene -beneaped -beneath -beneception -beneceptive -beneceptor -benedicite -Benedict -benedict -Benedicta -Benedictine -Benedictinism -benediction -benedictional -benedictionary -benedictive -benedictively -benedictory -Benedictus -benedight -benefaction -benefactive -benefactor -benefactorship -benefactory -benefactress -benefic -benefice -beneficed -beneficeless -beneficence -beneficent -beneficential -beneficently -beneficial -beneficially -beneficialness -beneficiary -beneficiaryship -beneficiate -beneficiation -benefit -benefiter -beneighbored -Benelux -benempt -benempted -beneplacito -benet -Benetnasch -benettle -Beneventan -Beneventana -benevolence -benevolent -benevolently -benevolentness -benevolist -beng -Bengal -Bengalese -Bengali -Bengalic -bengaline -Bengola -Beni -beni -benight -benighted -benightedness -benighten -benighter -benightmare -benightment -benign -benignancy -benignant -benignantly -benignity -benignly -Benin -Benincasa -benison -benitoite -benj -Benjamin -benjamin -benjaminite -Benjamite -Benjy -benjy -Benkulen -benmost -benn -benne -bennel -Bennet -bennet -Bennettitaceae -bennettitaceous -Bennettitales -Bennettites -bennetweed -Benny -benny -beno -benorth -benote -bensel -bensh -benshea -benshee -benshi -Benson -bent -bentang -benthal -Benthamic -Benthamism -Benthamite -benthic -benthon -benthonic -benthos -Bentincks -bentiness -benting -Benton -bentonite -bentstar -bentwood -benty -Benu -benumb -benumbed -benumbedness -benumbing -benumbingly -benumbment -benward -benweed -benzacridine -benzal -benzalacetone -benzalacetophenone -benzalaniline -benzalazine -benzalcohol -benzalcyanhydrin -benzaldehyde -benzaldiphenyl -benzaldoxime -benzalethylamine -benzalhydrazine -benzalphenylhydrazone -benzalphthalide -benzamide -benzamido -benzamine -benzaminic -benzamino -benzanalgen -benzanilide -benzanthrone -benzantialdoxime -benzazide -benzazimide -benzazine -benzazole -benzbitriazole -benzdiazine -benzdifuran -benzdioxazine -benzdioxdiazine -benzdioxtriazine -Benzedrine -benzein -benzene -benzenediazonium -benzenoid -benzenyl -benzhydrol -benzhydroxamic -benzidine -benzidino -benzil -benzilic -benzimidazole -benziminazole -benzinduline -benzine -benzo -benzoate -benzoated -benzoazurine -benzobis -benzocaine -benzocoumaran -benzodiazine -benzodiazole -benzoflavine -benzofluorene -benzofulvene -benzofuran -benzofuroquinoxaline -benzofuryl -benzoglycolic -benzoglyoxaline -benzohydrol -benzoic -benzoid -benzoin -benzoinated -benzoiodohydrin -benzol -benzolate -benzole -benzolize -benzomorpholine -benzonaphthol -benzonitrile -benzonitrol -benzoperoxide -benzophenanthrazine -benzophenanthroline -benzophenazine -benzophenol -benzophenone -benzophenothiazine -benzophenoxazine -benzophloroglucinol -benzophosphinic -benzophthalazine -benzopinacone -benzopyran -benzopyranyl -benzopyrazolone -benzopyrylium -benzoquinoline -benzoquinone -benzoquinoxaline -benzosulphimide -benzotetrazine -benzotetrazole -benzothiazine -benzothiazole -benzothiazoline -benzothiodiazole -benzothiofuran -benzothiophene -benzothiopyran -benzotoluide -benzotriazine -benzotriazole -benzotrichloride -benzotrifuran -benzoxate -benzoxy -benzoxyacetic -benzoxycamphor -benzoxyphenanthrene -benzoyl -benzoylate -benzoylation -benzoylformic -benzoylglycine -benzpinacone -benzthiophen -benztrioxazine -benzyl -benzylamine -benzylic -benzylidene -benzylpenicillin -beode -Beothuk -Beothukan -Beowulf -bepaid -Bepaint -bepale -bepaper -beparch -beparody -beparse -bepart -bepaste -bepastured -bepat -bepatched -bepaw -bepearl -bepelt -bepen -bepepper -beperiwigged -bepester -bepewed -bephilter -bephrase -bepicture -bepiece -bepierce -bepile -bepill -bepillared -bepimple -bepinch -bepistoled -bepity -beplague -beplaided -beplaster -beplumed -bepommel -bepowder -bepraise -bepraisement -bepraiser -beprank -bepray -bepreach -bepress -bepretty -bepride -beprose -bepuddle -bepuff -bepun -bepurple -bepuzzle -bepuzzlement -bequalm -bequeath -bequeathable -bequeathal -bequeather -bequeathment -bequest -bequirtle -bequote -ber -berain -berairou -berakah -berake -berakoth -berapt -berascal -berat -berate -berattle -beraunite -beray -berbamine -Berber -Berberi -Berberian -berberid -Berberidaceae -berberidaceous -berberine -Berberis -berberry -Berchemia -Berchta -berdache -bere -Berean -bereason -bereave -bereavement -bereaven -bereaver -bereft -berend -Berengaria -Berengarian -Berengarianism -berengelite -Berenice -Bereshith -beresite -beret -berewick -berg -bergalith -Bergama -Bergamask -bergamiol -Bergamo -Bergamot -bergamot -bergander -bergaptene -berger -berghaan -berginization -berginize -berglet -bergschrund -Bergsonian -Bergsonism -bergut -bergy -bergylt -berhyme -Beri -beribanded -beribboned -beriberi -beriberic -beride -berigora -beringed -beringite -beringleted -berinse -berith -Berkeleian -Berkeleianism -Berkeleyism -Berkeleyite -berkelium -berkovets -berkowitz -Berkshire -berley -berlin -berline -Berliner -berlinite -Berlinize -berm -Bermuda -Bermudian -bermudite -Bern -Bernard -Bernardina -Bernardine -berne -Bernese -Bernice -Bernicia -bernicle -Bernie -Berninesque -Bernoullian -berobed -Beroe -Beroida -Beroidae -beroll -Berossos -berouged -beround -berrendo -berret -berri -berried -berrier -berrigan -berrugate -berry -berrybush -berryless -berrylike -berrypicker -berrypicking -berseem -berserk -berserker -Bersiamite -Bersil -Bert -Bertat -Berteroa -berth -Bertha -berthage -berthed -berther -berthierite -berthing -Berthold -Bertholletia -Bertie -Bertolonia -Bertram -bertram -Bertrand -bertrandite -bertrum -beruffed -beruffled -berust -bervie -berycid -Berycidae -beryciform -berycine -berycoid -Berycoidea -berycoidean -Berycoidei -Berycomorphi -beryl -berylate -beryllia -berylline -berylliosis -beryllium -berylloid -beryllonate -beryllonite -beryllosis -Berytidae -Beryx -berzelianite -berzeliite -bes -besa -besagne -besaiel -besaint -besan -besanctify -besauce -bescab -bescarf -bescatter -bescent -bescorch -bescorn -bescoundrel -bescour -bescourge -bescramble -bescrape -bescratch -bescrawl -bescreen -bescribble -bescurf -bescurvy -bescutcheon -beseam -besee -beseech -beseecher -beseeching -beseechingly -beseechingness -beseechment -beseem -beseeming -beseemingly -beseemingness -beseemliness -beseemly -beseen -beset -besetment -besetter -besetting -beshackle -beshade -beshadow -beshag -beshake -beshame -beshawled -beshear -beshell -beshield -beshine -beshiver -beshlik -beshod -beshout -beshow -beshower -beshrew -beshriek -beshrivel -beshroud -besiclometer -beside -besides -besiege -besieged -besiegement -besieger -besieging -besiegingly -besigh -besilver -besin -besing -besiren -besit -beslab -beslap -beslash -beslave -beslaver -besleeve -beslime -beslimer -beslings -beslipper -beslobber -beslow -beslubber -beslur -beslushed -besmear -besmearer -besmell -besmile -besmirch -besmircher -besmirchment -besmoke -besmooth -besmother -besmouch -besmudge -besmut -besmutch -besnare -besneer -besnivel -besnow -besnuff -besodden -besogne -besognier -besoil -besom -besomer -besonnet -besoot -besoothe -besoothement -besot -besotment -besotted -besottedly -besottedness -besotting -besottingly -besought -besoul -besour -bespangle -bespate -bespatter -bespatterer -bespatterment -bespawl -bespeak -bespeakable -bespeaker -bespecked -bespeckle -bespecklement -bespectacled -besped -bespeech -bespeed -bespell -bespelled -bespend -bespete -bespew -bespice -bespill -bespin -bespirit -bespit -besplash -besplatter -besplit -bespoke -bespoken -bespot -bespottedness -bespouse -bespout -bespray -bespread -besprent -besprinkle -besprinkler -bespurred -besputter -bespy -besqueeze -besquib -besra -Bess -Bessarabian -Besselian -Bessemer -bessemer -Bessemerize -bessemerize -Bessera -Bessi -Bessie -Bessy -best -bestab -bestain -bestamp -bestar -bestare -bestarve -bestatued -bestay -bestayed -bestead -besteer -bestench -bester -bestial -bestialism -bestialist -bestiality -bestialize -bestially -bestiarian -bestiarianism -bestiary -bestick -bestill -bestink -bestir -bestness -bestock -bestore -bestorm -bestove -bestow -bestowable -bestowage -bestowal -bestower -bestowing -bestowment -bestraddle -bestrapped -bestraught -bestraw -bestreak -bestream -bestrew -bestrewment -bestride -bestripe -bestrode -bestubbled -bestuck -bestud -besugar -besuit -besully -beswarm -besweatered -besweeten -beswelter -beswim -beswinge -beswitch -bet -Beta -beta -betacism -betacismus -betafite -betag -betail -betailor -betaine -betainogen -betalk -betallow -betangle -betanglement -betask -betassel -betatron -betattered -betaxed -betear -beteela -beteem -betel -Betelgeuse -Beth -beth -bethabara -bethankit -bethel -Bethesda -bethflower -bethink -Bethlehem -Bethlehemite -bethought -bethrall -bethreaten -bethroot -Bethuel -bethumb -bethump -bethunder -bethwack -Bethylidae -betide -betimber -betimes -betinge -betipple -betire -betis -betitle -betocsin -betoil -betoken -betokener -betone -betongue -Betonica -betony -betorcin -betorcinol -betoss -betowel -betowered -Betoya -Betoyan -betrace -betrail -betrample -betrap -betravel -betray -betrayal -betrayer -betrayment -betread -betrend -betrim -betrinket -betroth -betrothal -betrothed -betrothment -betrough -betrousered -betrumpet -betrunk -Betsey -Betsileos -Betsimisaraka -betso -Betsy -Betta -betted -better -betterer -bettergates -bettering -betterly -betterment -bettermost -betterness -betters -Bettina -Bettine -betting -bettong -bettonga -Bettongia -bettor -Betty -betty -betuckered -Betula -Betulaceae -betulaceous -betulin -betulinamaric -betulinic -betulinol -Betulites -beturbaned -betusked -betutor -betutored -betwattled -between -betweenbrain -betweenity -betweenmaid -betweenness -betweenwhiles -betwine -betwit -betwixen -betwixt -beudantite -Beulah -beuniformed -bevatron -beveil -bevel -beveled -beveler -bevelled -bevelment -bevenom -bever -beverage -Beverly -beverse -bevesseled -bevesselled -beveto -bevillain -bevined -bevoiled -bevomit -bevue -bevy -bewail -bewailable -bewailer -bewailing -bewailingly -bewailment -bewaitered -bewall -beware -bewash -bewaste -bewater -beweary -beweep -beweeper -bewelcome -bewelter -bewept -bewest -bewet -bewhig -bewhiskered -bewhisper -bewhistle -bewhite -bewhiten -bewidow -bewig -bewigged -bewilder -bewildered -bewilderedly -bewilderedness -bewildering -bewilderingly -bewilderment -bewimple -bewinged -bewinter -bewired -bewitch -bewitchedness -bewitcher -bewitchery -bewitchful -bewitching -bewitchingly -bewitchingness -bewitchment -bewith -bewizard -bework -beworm -beworn -beworry -beworship -bewrap -bewrathed -bewray -bewrayer -bewrayingly -bewrayment -bewreath -bewreck -bewrite -bey -beydom -beylic -beylical -beyond -beyrichite -beyship -Bezaleel -Bezaleelian -bezant -bezantee -bezanty -bezel -bezesteen -bezetta -bezique -bezoar -bezoardic -bezonian -Bezpopovets -bezzi -bezzle -bezzo -bhabar -Bhadon -Bhaga -bhagavat -bhagavata -bhaiachari -bhaiyachara -bhakta -bhakti -bhalu -bhandar -bhandari -bhang -bhangi -Bhar -bhara -bharal -Bharata -bhat -bhava -Bhavani -bheesty -bhikku -bhikshu -Bhil -Bhili -Bhima -Bhojpuri -bhoosa -Bhotia -Bhotiya -Bhowani -bhoy -Bhumij -bhungi -bhungini -bhut -Bhutanese -Bhutani -bhutatathata -Bhutia -biabo -biacetyl -biacetylene -biacid -biacromial -biacuminate -biacuru -bialate -biallyl -bialveolar -Bianca -Bianchi -bianchite -bianco -biangular -biangulate -biangulated -biangulous -bianisidine -biannual -biannually -biannulate -biarchy -biarcuate -biarcuated -biarticular -biarticulate -biarticulated -bias -biasness -biasteric -biaswise -biatomic -biauricular -biauriculate -biaxal -biaxial -biaxiality -biaxially -biaxillary -bib -bibacious -bibacity -bibasic -bibation -bibb -bibber -bibble -bibbler -bibbons -bibcock -bibenzyl -bibi -Bibio -bibionid -Bibionidae -bibiri -bibitory -Bible -bibless -Biblic -Biblical -Biblicality -Biblically -Biblicism -Biblicist -Biblicistic -Biblicolegal -Biblicoliterary -Biblicopsychological -biblioclasm -biblioclast -bibliofilm -bibliogenesis -bibliognost -bibliognostic -bibliogony -bibliograph -bibliographer -bibliographic -bibliographical -bibliographically -bibliographize -bibliography -biblioklept -bibliokleptomania -bibliokleptomaniac -bibliolater -bibliolatrous -bibliolatry -bibliological -bibliologist -bibliology -bibliomancy -bibliomane -bibliomania -bibliomaniac -bibliomaniacal -bibliomanian -bibliomanianism -bibliomanism -bibliomanist -bibliopegic -bibliopegist -bibliopegistic -bibliopegy -bibliophage -bibliophagic -bibliophagist -bibliophagous -bibliophile -bibliophilic -bibliophilism -bibliophilist -bibliophilistic -bibliophily -bibliophobia -bibliopolar -bibliopole -bibliopolery -bibliopolic -bibliopolical -bibliopolically -bibliopolism -bibliopolist -bibliopolistic -bibliopoly -bibliosoph -bibliotaph -bibliotaphic -bibliothec -bibliotheca -bibliothecal -bibliothecarial -bibliothecarian -bibliothecary -bibliotherapeutic -bibliotherapist -bibliotherapy -bibliothetic -bibliotic -bibliotics -bibliotist -Biblism -Biblist -biblus -biborate -bibracteate -bibracteolate -bibulosity -bibulous -bibulously -bibulousness -Bibulus -bicalcarate -bicameral -bicameralism -bicamerist -bicapitate -bicapsular -bicarbonate -bicarbureted -bicarinate -bicarpellary -bicarpellate -bicaudal -bicaudate -Bice -bice -bicellular -bicentenary -bicentennial -bicephalic -bicephalous -biceps -bicetyl -bichir -bichloride -bichord -bichromate -bichromatic -bichromatize -bichrome -bichromic -bichy -biciliate -biciliated -bicipital -bicipitous -bicircular -bicirrose -bick -bicker -bickerer -bickern -biclavate -biclinium -bicollateral -bicollaterality -bicolligate -bicolor -bicolored -bicolorous -biconcave -biconcavity -bicondylar -bicone -biconic -biconical -biconically -biconjugate -biconsonantal -biconvex -bicorn -bicornate -bicorne -bicorned -bicornous -bicornuate -bicornuous -bicornute -bicorporal -bicorporate -bicorporeal -bicostate -bicrenate -bicrescentic -bicrofarad -bicron -bicrural -bicursal -bicuspid -bicuspidate -bicyanide -bicycle -bicycler -bicyclic -bicyclism -bicyclist -bicyclo -bicycloheptane -bicylindrical -bid -bidactyl -bidactyle -bidactylous -bidar -bidarka -bidcock -biddable -biddableness -biddably -biddance -Biddelian -bidder -bidding -Biddulphia -Biddulphiaceae -Biddy -biddy -bide -Bidens -bident -bidental -bidentate -bidented -bidential -bidenticulate -bider -bidet -bidigitate -bidimensional -biding -bidirectional -bidiurnal -Bidpai -bidri -biduous -bieberite -Biedermeier -bield -bieldy -bielectrolysis -bielenite -Bielid -Bielorouss -bien -bienly -bienness -biennia -biennial -biennially -biennium -bier -bierbalk -biethnic -bietle -bifacial -bifanged -bifara -bifarious -bifariously -bifer -biferous -biff -biffin -bifid -bifidate -bifidated -bifidity -bifidly -bifilar -bifilarly -bifistular -biflabellate -biflagellate -biflecnode -biflected -biflex -biflorate -biflorous -bifluoride -bifocal -bifoil -bifold -bifolia -bifoliate -bifoliolate -bifolium -biforked -biform -biformed -biformity -biforous -bifront -bifrontal -bifronted -bifurcal -bifurcate -bifurcated -bifurcately -bifurcation -big -biga -bigamic -bigamist -bigamistic -bigamize -bigamous -bigamously -bigamy -bigarade -bigaroon -bigarreau -bigbloom -bigemina -bigeminal -bigeminate -bigeminated -bigeminum -bigener -bigeneric -bigential -bigeye -bigg -biggah -biggen -bigger -biggest -biggin -biggish -biggonet -bigha -bighead -bighearted -bigheartedness -bighorn -bight -biglandular -biglenoid -biglot -bigmouth -bigmouthed -bigness -Bignonia -Bignoniaceae -bignoniaceous -bignoniad -bignou -bigoniac -bigonial -bigot -bigoted -bigotedly -bigotish -bigotry -bigotty -bigroot -bigthatch -biguanide -biguttate -biguttulate -bigwig -bigwigged -bigwiggedness -bigwiggery -bigwiggism -Bihai -Biham -bihamate -Bihari -biharmonic -bihourly -bihydrazine -bija -bijasal -bijou -bijouterie -bijoux -bijugate -bijugular -bike -bikh -bikhaconitine -bikini -Bikol -Bikram -Bikukulla -Bilaan -bilabe -bilabial -bilabiate -bilalo -bilamellar -bilamellate -bilamellated -bilaminar -bilaminate -bilaminated -bilander -bilateral -bilateralism -bilaterality -bilaterally -bilateralness -Bilati -bilberry -bilbie -bilbo -bilboquet -bilby -bilch -bilcock -bildar -bilders -bile -bilestone -bilge -bilgy -Bilharzia -bilharzial -bilharziasis -bilharzic -bilharziosis -bilianic -biliary -biliate -biliation -bilic -bilicyanin -bilifaction -biliferous -bilification -bilifuscin -bilify -bilihumin -bilimbi -bilimbing -biliment -Bilin -bilinear -bilineate -bilingual -bilingualism -bilingually -bilinguar -bilinguist -bilinigrin -bilinite -bilio -bilious -biliously -biliousness -biliprasin -bilipurpurin -bilipyrrhin -bilirubin -bilirubinemia -bilirubinic -bilirubinuria -biliteral -biliteralism -bilith -bilithon -biliverdic -biliverdin -bilixanthin -bilk -bilker -Bill -bill -billa -billable -billabong -billback -billbeetle -Billbergia -billboard -billbroking -billbug -billed -biller -billet -billeter -billethead -billeting -billetwood -billety -billfish -billfold -billhead -billheading -billholder -billhook -billian -billiard -billiardist -billiardly -billiards -Billie -Billiken -billikin -billing -billingsgate -billion -billionaire -billionism -billionth -billitonite -Billjim -billman -billon -billot -billow -billowiness -billowy -billposter -billposting -billsticker -billsticking -Billy -billy -billyboy -billycan -billycock -billyer -billyhood -billywix -bilo -bilobated -bilobe -bilobed -bilobiate -bilobular -bilocation -bilocellate -bilocular -biloculate -Biloculina -biloculine -bilophodont -Biloxi -bilsh -Bilskirnir -bilsted -biltong -biltongue -Bim -bimaculate -bimaculated -bimalar -Bimana -bimanal -bimane -bimanous -bimanual -bimanually -bimarginate -bimarine -bimastic -bimastism -bimastoid -bimasty -bimaxillary -bimbil -Bimbisara -bimeby -bimensal -bimester -bimestrial -bimetalic -bimetallism -bimetallist -bimetallistic -bimillenary -bimillennium -bimillionaire -Bimini -Bimmeler -bimodal -bimodality -bimolecular -bimonthly -bimotored -bimotors -bimucronate -bimuscular -bin -binal -binaphthyl -binarium -binary -binate -binately -bination -binational -binaural -binauricular -binbashi -bind -binder -bindery -bindheimite -binding -bindingly -bindingness -bindle -bindlet -bindoree -bindweb -bindweed -bindwith -bindwood -bine -binervate -bineweed -bing -binge -bingey -binghi -bingle -bingo -bingy -binh -Bini -biniodide -Binitarian -Binitarianism -bink -binman -binna -binnacle -binning -binnite -binnogue -bino -binocle -binocular -binocularity -binocularly -binoculate -binodal -binode -binodose -binodous -binomenclature -binomial -binomialism -binomially -binominal -binominated -binominous -binormal -binotic -binotonous -binous -binoxalate -binoxide -bint -bintangor -binturong -binuclear -binucleate -binucleated -binucleolate -binukau -Binzuru -biobibliographical -biobibliography -bioblast -bioblastic -biocatalyst -biocellate -biocentric -biochemic -biochemical -biochemically -biochemics -biochemist -biochemistry -biochemy -biochore -bioclimatic -bioclimatology -biocoenose -biocoenosis -biocoenotic -biocycle -biod -biodynamic -biodynamical -biodynamics -biodyne -bioecologic -bioecological -bioecologically -bioecologist -bioecology -biogen -biogenase -biogenesis -biogenesist -biogenetic -biogenetical -biogenetically -biogenetics -biogenous -biogeny -biogeochemistry -biogeographic -biogeographical -biogeographically -biogeography -biognosis -biograph -biographee -biographer -biographic -biographical -biographically -biographist -biographize -biography -bioherm -biokinetics -biolinguistics -biolith -biologese -biologic -biological -biologically -biologicohumanistic -biologism -biologist -biologize -biology -bioluminescence -bioluminescent -biolysis -biolytic -biomagnetic -biomagnetism -biomathematics -biome -biomechanical -biomechanics -biometeorology -biometer -biometric -biometrical -biometrically -biometrician -biometricist -biometrics -biometry -biomicroscopy -bion -bionergy -bionomic -bionomical -bionomically -bionomics -bionomist -bionomy -biophagism -biophagous -biophagy -biophilous -biophore -biophotophone -biophysical -biophysicochemical -biophysics -biophysiography -biophysiological -biophysiologist -biophysiology -biophyte -bioplasm -bioplasmic -bioplast -bioplastic -bioprecipitation -biopsic -biopsy -biopsychic -biopsychical -biopsychological -biopsychologist -biopsychology -biopyribole -bioral -biorbital -biordinal -bioreaction -biorgan -bios -bioscope -bioscopic -bioscopy -biose -biosis -biosocial -biosociological -biosphere -biostatic -biostatical -biostatics -biostatistics -biosterin -biosterol -biostratigraphy -biosynthesis -biosynthetic -biosystematic -biosystematics -biosystematist -biosystematy -Biota -biota -biotaxy -biotechnics -biotic -biotical -biotics -biotin -biotite -biotitic -biotome -biotomy -biotope -biotype -biotypic -biovular -biovulate -bioxalate -bioxide -bipack -bipaleolate -Bipaliidae -Bipalium -bipalmate -biparasitic -biparental -biparietal -biparous -biparted -bipartible -bipartient -bipartile -bipartisan -bipartisanship -bipartite -bipartitely -bipartition -biparty -bipaschal -bipectinate -bipectinated -biped -bipedal -bipedality -bipedism -bipeltate -bipennate -bipennated -bipenniform -biperforate -bipersonal -bipetalous -biphase -biphasic -biphenol -biphenyl -biphenylene -bipinnaria -bipinnate -bipinnated -bipinnately -bipinnatifid -bipinnatiparted -bipinnatipartite -bipinnatisect -bipinnatisected -biplanal -biplanar -biplane -biplicate -biplicity -biplosion -biplosive -bipod -bipolar -bipolarity -bipolarize -Bipont -Bipontine -biporose -biporous -biprism -biprong -bipunctal -bipunctate -bipunctual -bipupillate -bipyramid -bipyramidal -bipyridine -bipyridyl -biquadrantal -biquadrate -biquadratic -biquarterly -biquartz -biquintile -biracial -biracialism -biradial -biradiate -biradiated -biramous -birational -birch -birchbark -birchen -birching -birchman -birchwood -bird -birdbander -birdbanding -birdbath -birdberry -birdcall -birdcatcher -birdcatching -birdclapper -birdcraft -birddom -birdeen -birder -birdglue -birdhood -birdhouse -birdie -birdikin -birding -birdland -birdless -birdlet -birdlike -birdlime -birdling -birdlore -birdman -birdmouthed -birdnest -birdnester -birdseed -birdstone -birdweed -birdwise -birdwoman -birdy -birectangular -birefracting -birefraction -birefractive -birefringence -birefringent -bireme -biretta -Birgus -biri -biriba -birimose -birk -birken -Birkenhead -Birkenia -Birkeniidae -birkie -birkremite -birl -birle -birler -birlie -birlieman -birlinn -birma -Birmingham -Birminghamize -birn -birny -Biron -birostrate -birostrated -birotation -birotatory -birr -birse -birsle -birsy -birth -birthbed -birthday -birthland -birthless -birthmark -birthmate -birthnight -birthplace -birthright -birthroot -birthstone -birthstool -birthwort -birthy -bis -bisabol -bisaccate -bisacromial -bisalt -Bisaltae -bisantler -bisaxillary -bisbeeite -biscacha -Biscanism -Biscayan -Biscayanism -biscayen -Biscayner -bischofite -biscotin -biscuit -biscuiting -biscuitlike -biscuitmaker -biscuitmaking -biscuitroot -biscuitry -bisdiapason -bisdimethylamino -bisect -bisection -bisectional -bisectionally -bisector -bisectrices -bisectrix -bisegment -biseptate -biserial -biserially -biseriate -biseriately -biserrate -bisetose -bisetous -bisexed -bisext -bisexual -bisexualism -bisexuality -bisexually -bisexuous -bisglyoxaline -Bishareen -Bishari -Bisharin -bishop -bishopdom -bishopess -bishopful -bishophood -bishopless -bishoplet -bishoplike -bishopling -bishopric -bishopship -bishopweed -bisiliac -bisilicate -bisiliquous -bisimine -bisinuate -bisinuation -bisischiadic -bisischiatic -Bisley -bislings -bismar -Bismarck -Bismarckian -Bismarckianism -bismarine -bismerpund -bismillah -bismite -Bismosol -bismuth -bismuthal -bismuthate -bismuthic -bismuthide -bismuthiferous -bismuthine -bismuthinite -bismuthite -bismuthous -bismuthyl -bismutite -bismutoplagionite -bismutosmaltite -bismutosphaerite -bisnaga -bison -bisonant -bisontine -bisphenoid -bispinose -bispinous -bispore -bisporous -bisque -bisquette -bissext -bissextile -bisson -bistate -bistephanic -bister -bistered -bistetrazole -bisti -bistipular -bistipulate -bistipuled -bistort -Bistorta -bistournage -bistoury -bistratal -bistratose -bistriate -bistriazole -bistro -bisubstituted -bisubstitution -bisulcate -bisulfid -bisulphate -bisulphide -bisulphite -bisyllabic -bisyllabism -bisymmetric -bisymmetrical -bisymmetrically -bisymmetry -bit -bitable -bitangent -bitangential -bitanhol -bitartrate -bitbrace -bitch -bite -bitemporal -bitentaculate -biter -biternate -biternately -bitesheep -bitewing -bitheism -Bithynian -biti -biting -bitingly -bitingness -Bitis -bitless -bito -bitolyl -bitonality -bitreadle -bitripartite -bitripinnatifid -bitriseptate -bitrochanteric -bitstock -bitstone -bitt -bitted -bitten -bitter -bitterbark -bitterblain -bitterbloom -bitterbur -bitterbush -bitterful -bitterhead -bitterhearted -bitterheartedness -bittering -bitterish -bitterishness -bitterless -bitterling -bitterly -bittern -bitterness -bitternut -bitterroot -bitters -bittersweet -bitterweed -bitterwood -bitterworm -bitterwort -bitthead -bittie -Bittium -bittock -bitty -bitubercular -bituberculate -bituberculated -Bitulithic -bitulithic -bitume -bitumed -bitumen -bituminate -bituminiferous -bituminization -bituminize -bituminoid -bituminous -bitwise -bityite -bitypic -biune -biunial -biunity -biunivocal -biurate -biurea -biuret -bivalence -bivalency -bivalent -bivalve -bivalved -Bivalvia -bivalvian -bivalvous -bivalvular -bivariant -bivariate -bivascular -bivaulted -bivector -biventer -biventral -biverbal -bivinyl -bivious -bivittate -bivocal -bivocalized -bivoltine -bivoluminous -bivouac -biwa -biweekly -biwinter -Bixa -Bixaceae -bixaceous -bixbyite -bixin -biyearly -biz -bizardite -bizarre -bizarrely -bizarreness -Bizen -bizet -bizonal -bizone -Bizonia -bizygomatic -bizz -Bjorne -blab -blabber -blabberer -blachong -black -blackacre -blackamoor -blackback -blackball -blackballer -blackband -Blackbeard -blackbelly -blackberry -blackbine -blackbird -blackbirder -blackbirding -blackboard -blackboy -blackbreast -blackbush -blackbutt -blackcap -blackcoat -blackcock -blackdamp -blacken -blackener -blackening -blacker -blacketeer -blackey -blackeyes -blackface -Blackfeet -blackfellow -blackfellows -blackfin -blackfire -blackfish -blackfisher -blackfishing -Blackfoot -blackfoot -Blackfriars -blackguard -blackguardism -blackguardize -blackguardly -blackguardry -Blackhander -blackhead -blackheads -blackheart -blackhearted -blackheartedness -blackie -blacking -blackish -blackishly -blackishness -blackit -blackjack -blackland -blackleg -blackleggery -blacklegism -blacklegs -blackly -blackmail -blackmailer -blackneb -blackneck -blackness -blacknob -blackout -blackpoll -blackroot -blackseed -blackshirted -blacksmith -blacksmithing -blackstick -blackstrap -blacktail -blackthorn -blacktongue -blacktree -blackwash -blackwasher -blackwater -blackwood -blackwork -blackwort -blacky -blad -bladder -bladderet -bladderless -bladderlike -bladdernose -bladdernut -bladderpod -bladderseed -bladderweed -bladderwort -bladdery -blade -bladebone -bladed -bladelet -bladelike -blader -bladesmith -bladewise -blading -bladish -blady -bladygrass -blae -blaeberry -blaeness -blaewort -blaff -blaffert -blaflum -blah -blahlaut -blain -Blaine -Blair -blair -blairmorite -Blake -blake -blakeberyed -blamable -blamableness -blamably -blame -blamed -blameful -blamefully -blamefulness -blameless -blamelessly -blamelessness -blamer -blameworthiness -blameworthy -blaming -blamingly -blan -blanc -blanca -blancard -Blanch -blanch -blancher -blanching -blanchingly -blancmange -blancmanger -blanco -bland -blanda -Blandfordia -blandiloquence -blandiloquious -blandiloquous -blandish -blandisher -blandishing -blandishingly -blandishment -blandly -blandness -blank -blankard -blankbook -blanked -blankeel -blanket -blanketed -blanketeer -blanketflower -blanketing -blanketless -blanketmaker -blanketmaking -blanketry -blanketweed -blankety -blanking -blankish -Blankit -blankite -blankly -blankness -blanky -blanque -blanquillo -blare -Blarina -blarney -blarneyer -blarnid -blarny -blart -blas -blase -blash -blashy -Blasia -blaspheme -blasphemer -blasphemous -blasphemously -blasphemousness -blasphemy -blast -blasted -blastema -blastemal -blastematic -blastemic -blaster -blastful -blasthole -blastid -blastie -blasting -blastment -blastocarpous -blastocheme -blastochyle -blastocoele -blastocolla -blastocyst -blastocyte -blastoderm -blastodermatic -blastodermic -blastodisk -blastogenesis -blastogenetic -blastogenic -blastogeny -blastogranitic -blastoid -Blastoidea -blastoma -blastomata -blastomere -blastomeric -Blastomyces -blastomycete -Blastomycetes -blastomycetic -blastomycetous -blastomycosis -blastomycotic -blastoneuropore -Blastophaga -blastophitic -blastophoral -blastophore -blastophoric -blastophthoria -blastophthoric -blastophyllum -blastoporal -blastopore -blastoporic -blastoporphyritic -blastosphere -blastospheric -blastostylar -blastostyle -blastozooid -blastplate -blastula -blastulae -blastular -blastulation -blastule -blasty -blat -blatancy -blatant -blatantly -blate -blately -blateness -blather -blatherer -blatherskite -blathery -blatjang -Blatta -blatta -Blattariae -blatter -blatterer -blatti -blattid -Blattidae -blattiform -Blattodea -blattoid -Blattoidea -blaubok -Blaugas -blauwbok -blaver -blaw -blawort -blay -Blayne -blaze -blazer -blazing -blazingly -blazon -blazoner -blazoning -blazonment -blazonry -blazy -bleaberry -bleach -bleachability -bleachable -bleached -bleacher -bleacherite -bleacherman -bleachery -bleachfield -bleachground -bleachhouse -bleaching -bleachman -bleachworks -bleachyard -bleak -bleakish -bleakly -bleakness -bleaky -blear -bleared -blearedness -bleareye -bleariness -blearness -bleary -bleat -bleater -bleating -bleatingly -bleaty -bleb -blebby -blechnoid -Blechnum -bleck -blee -bleed -bleeder -bleeding -bleekbok -bleery -bleeze -bleezy -blellum -blemish -blemisher -blemishment -Blemmyes -blench -blencher -blenching -blenchingly -blencorn -blend -blendcorn -blende -blended -blender -blending -blendor -blendure -blendwater -blennadenitis -blennemesis -blennenteria -blennenteritis -blenniid -Blenniidae -blenniiform -Blenniiformes -blennioid -Blennioidea -blennocele -blennocystitis -blennoemesis -blennogenic -blennogenous -blennoid -blennoma -blennometritis -blennophlogisma -blennophlogosis -blennophthalmia -blennoptysis -blennorrhagia -blennorrhagic -blennorrhea -blennorrheal -blennorrhinia -blennosis -blennostasis -blennostatic -blennothorax -blennotorrhea -blennuria -blenny -blennymenitis -blent -bleo -blephara -blepharadenitis -blepharal -blepharanthracosis -blepharedema -blepharelcosis -blepharemphysema -Blephariglottis -blepharism -blepharitic -blepharitis -blepharoadenitis -blepharoadenoma -blepharoatheroma -blepharoblennorrhea -blepharocarcinoma -Blepharocera -Blepharoceridae -blepharochalasis -blepharochromidrosis -blepharoclonus -blepharocoloboma -blepharoconjunctivitis -blepharodiastasis -blepharodyschroia -blepharohematidrosis -blepharolithiasis -blepharomelasma -blepharoncosis -blepharoncus -blepharophimosis -blepharophryplasty -blepharophthalmia -blepharophyma -blepharoplast -blepharoplastic -blepharoplasty -blepharoplegia -blepharoptosis -blepharopyorrhea -blepharorrhaphy -blepharospasm -blepharospath -blepharosphincterectomy -blepharostat -blepharostenosis -blepharosymphysis -blepharosyndesmitis -blepharosynechia -blepharotomy -blepharydatis -Blephillia -blesbok -blesbuck -bless -blessed -blessedly -blessedness -blesser -blessing -blessingly -blest -blet -bletheration -Bletia -Bletilla -blewits -blibe -blick -blickey -Blighia -blight -blightbird -blighted -blighter -blighting -blightingly -blighty -blimbing -blimp -blimy -blind -blindage -blindball -blinded -blindedly -blinder -blindeyes -blindfast -blindfish -blindfold -blindfolded -blindfoldedness -blindfolder -blindfoldly -blinding -blindingly -blindish -blindless -blindling -blindly -blindness -blindstory -blindweed -blindworm -blink -blinkard -blinked -blinker -blinkered -blinking -blinkingly -blinks -blinky -blinter -blintze -blip -bliss -blissful -blissfully -blissfulness -blissless -blissom -blister -blistered -blistering -blisteringly -blisterweed -blisterwort -blistery -blite -blithe -blithebread -blitheful -blithefully -blithehearted -blithelike -blithely -blithemeat -blithen -blitheness -blither -blithering -blithesome -blithesomely -blithesomeness -blitter -Blitum -blitz -blitzbuggy -blitzkrieg -blizz -blizzard -blizzardly -blizzardous -blizzardy -blo -bloat -bloated -bloatedness -bloater -bloating -blob -blobbed -blobber -blobby -bloc -block -blockade -blockader -blockage -blockbuster -blocked -blocker -blockhead -blockheaded -blockheadedly -blockheadedness -blockheadish -blockheadishness -blockheadism -blockholer -blockhouse -blockiness -blocking -blockish -blockishly -blockishness -blocklayer -blocklike -blockmaker -blockmaking -blockman -blockpate -blockship -blocky -blodite -bloke -blolly -blomstrandine -blonde -blondeness -blondine -blood -bloodalley -bloodalp -bloodbeat -bloodberry -bloodbird -bloodcurdler -bloodcurdling -blooddrop -blooddrops -blooded -bloodfin -bloodflower -bloodguilt -bloodguiltiness -bloodguiltless -bloodguilty -bloodhound -bloodied -bloodily -bloodiness -bloodleaf -bloodless -bloodlessly -bloodlessness -bloodletter -bloodletting -bloodline -bloodmobile -bloodmonger -bloodnoun -bloodripe -bloodripeness -bloodroot -bloodshed -bloodshedder -bloodshedding -bloodshot -bloodshotten -bloodspiller -bloodspilling -bloodstain -bloodstained -bloodstainedness -bloodstanch -bloodstock -bloodstone -bloodstroke -bloodsuck -bloodsucker -bloodsucking -bloodthirst -bloodthirster -bloodthirstily -bloodthirstiness -bloodthirsting -bloodthirsty -bloodweed -bloodwite -bloodwood -bloodworm -bloodwort -bloodworthy -bloody -bloodybones -blooey -bloom -bloomage -bloomer -Bloomeria -bloomerism -bloomers -bloomery -bloomfell -blooming -bloomingly -bloomingness -bloomkin -bloomless -Bloomsburian -Bloomsbury -bloomy -bloop -blooper -blooping -blore -blosmy -blossom -blossombill -blossomed -blossomhead -blossomless -blossomry -blossomtime -blossomy -blot -blotch -blotched -blotchy -blotless -blotter -blottesque -blottesquely -blotting -blottingly -blotto -blotty -bloubiskop -blouse -bloused -blousing -blout -blow -blowback -blowball -blowcock -blowdown -blowen -blower -blowfish -blowfly -blowgun -blowhard -blowhole -blowiness -blowing -blowings -blowiron -blowlamp -blowline -blown -blowoff -blowout -blowpipe -blowpoint -blowproof -blowspray -blowth -blowtorch -blowtube -blowup -blowy -blowze -blowzed -blowzing -blowzy -blub -blubber -blubberer -blubbering -blubberingly -blubberman -blubberous -blubbery -blucher -bludgeon -bludgeoned -bludgeoneer -bludgeoner -blue -blueback -bluebead -Bluebeard -bluebeard -Bluebeardism -bluebell -bluebelled -blueberry -bluebill -bluebird -blueblaw -bluebonnet -bluebook -bluebottle -bluebreast -bluebuck -bluebush -bluebutton -bluecap -bluecoat -bluecup -bluefish -bluegill -bluegown -bluegrass -bluehearted -bluehearts -blueing -bluejack -bluejacket -bluejoint -blueleg -bluelegs -bluely -blueness -bluenose -Bluenoser -blueprint -blueprinter -bluer -blues -bluesides -bluestem -bluestocking -bluestockingish -bluestockingism -bluestone -bluestoner -bluet -bluethroat -bluetongue -bluetop -blueweed -bluewing -bluewood -bluey -bluff -bluffable -bluffer -bluffly -bluffness -bluffy -bluggy -bluing -bluish -bluishness -bluism -Blumea -blunder -blunderbuss -blunderer -blunderful -blunderhead -blunderheaded -blunderheadedness -blundering -blunderingly -blundersome -blunge -blunger -blunk -blunker -blunks -blunnen -blunt -blunter -blunthead -blunthearted -bluntie -bluntish -bluntly -bluntness -blup -blur -blurb -blurbist -blurred -blurredness -blurrer -blurry -blurt -blush -blusher -blushful -blushfully -blushfulness -blushiness -blushing -blushingly -blushless -blushwort -blushy -bluster -blusteration -blusterer -blustering -blusteringly -blusterous -blusterously -blustery -blype -bo -boa -Boaedon -boagane -Boanbura -Boanerges -boanergism -boar -boarcite -board -boardable -boarder -boarding -boardinghouse -boardlike -boardly -boardman -boardwalk -boardy -boarfish -boarhound -boarish -boarishly -boarishness -boarship -boarskin -boarspear -boarstaff -boarwood -boast -boaster -boastful -boastfully -boastfulness -boasting -boastive -boastless -boat -boatable -boatage -boatbill -boatbuilder -boatbuilding -boater -boatfalls -boatful -boathead -boatheader -boathouse -boatie -boating -boatkeeper -boatless -boatlike -boatlip -boatload -boatloader -boatloading -boatly -boatman -boatmanship -boatmaster -boatowner -boatsetter -boatshop -boatside -boatsman -boatswain -boattail -boatward -boatwise -boatwoman -boatwright -Bob -bob -boba -bobac -Bobadil -Bobadilian -Bobadilish -Bobadilism -bobbed -bobber -bobbery -Bobbie -bobbin -bobbiner -bobbinet -bobbing -Bobbinite -bobbinwork -bobbish -bobbishly -bobble -Bobby -bobby -bobcat -bobcoat -bobeche -bobfly -bobierrite -bobization -bobjerom -bobo -bobolink -bobotie -bobsled -bobsleigh -bobstay -bobtail -bobtailed -bobwhite -bobwood -bocaccio -bocal -bocardo -bocasine -bocca -boccale -boccarella -boccaro -bocce -Bocconia -boce -bocedization -Boche -bocher -Bochism -bock -bockerel -bockeret -bocking -bocoy -bod -bodach -bodacious -bodaciously -bode -bodeful -bodega -bodement -boden -bodenbenderite -boder -bodewash -bodge -bodger -bodgery -bodhi -bodhisattva -bodice -bodiced -bodicemaker -bodicemaking -bodied -bodier -bodieron -bodikin -bodiless -bodilessness -bodiliness -bodily -bodiment -boding -bodingly -bodkin -bodkinwise -bodle -Bodleian -Bodo -bodock -Bodoni -body -bodybending -bodybuilder -bodyguard -bodyhood -bodyless -bodymaker -bodymaking -bodyplate -bodywise -bodywood -bodywork -Boebera -Boedromion -Boehmenism -Boehmenist -Boehmenite -Boehmeria -boeotarch -Boeotian -Boeotic -Boer -Boerdom -Boerhavia -Boethian -Boethusian -bog -boga -bogan -bogard -bogart -bogberry -bogey -bogeyman -boggart -boggin -bogginess -boggish -boggle -bogglebo -boggler -boggy -boghole -bogie -bogieman -bogier -Bogijiab -bogland -boglander -bogle -bogledom -boglet -bogman -bogmire -Bogo -bogo -Bogomil -Bogomile -Bogomilian -bogong -Bogota -bogsucker -bogtrot -bogtrotter -bogtrotting -bogue -bogum -bogus -bogusness -bogway -bogwood -bogwort -bogy -bogydom -bogyism -bogyland -Bohairic -bohawn -bohea -Bohemia -Bohemian -Bohemianism -bohemium -bohereen -bohireen -boho -bohor -bohunk -boid -Boidae -Boii -Boiko -boil -boilable -boildown -boiled -boiler -boilerful -boilerhouse -boilerless -boilermaker -boilermaking -boilerman -boilersmith -boilerworks -boilery -boiling -boilinglike -boilingly -boilover -boily -Bois -boist -boisterous -boisterously -boisterousness -bojite -bojo -bokadam -bokard -bokark -boke -Bokhara -Bokharan -bokom -bola -Bolag -bolar -Bolboxalis -bold -bolden -Bolderian -boldhearted -boldine -boldly -boldness -boldo -Boldu -bole -bolection -bolectioned -boled -boleite -Bolelia -bolelike -bolero -Boletaceae -boletaceous -bolete -Boletus -boleweed -bolewort -bolide -bolimba -bolis -bolivar -bolivarite -bolivia -Bolivian -boliviano -bolk -boll -Bollandist -bollard -bolled -boller -bolling -bollock -bollworm -bolly -Bolo -bolo -Bologna -Bolognan -Bolognese -bolograph -bolographic -bolographically -bolography -Boloism -boloman -bolometer -bolometric -boloney -boloroot -Bolshevik -Bolsheviki -Bolshevikian -Bolshevism -Bolshevist -Bolshevistic -Bolshevistically -Bolshevize -Bolshie -bolson -bolster -bolsterer -bolsterwork -bolt -boltage -boltant -boltcutter -boltel -bolter -bolthead -boltheader -boltheading -bolthole -bolti -bolting -boltless -boltlike -boltmaker -boltmaking -Boltonia -boltonite -boltrope -boltsmith -boltstrake -boltuprightness -boltwork -bolus -Bolyaian -bom -boma -Bomarea -bomb -bombable -Bombacaceae -bombacaceous -bombard -bombarde -bombardelle -bombarder -bombardier -bombardment -bombardon -bombast -bombaster -bombastic -bombastically -bombastry -Bombax -Bombay -bombazet -bombazine -bombed -bomber -bombiccite -Bombidae -bombilate -bombilation -Bombinae -bombinate -bombination -bombo -bombola -bombonne -bombous -bombproof -bombshell -bombsight -Bombus -bombycid -Bombycidae -bombyciform -Bombycilla -Bombycillidae -Bombycina -bombycine -Bombyliidae -Bombyx -Bon -bon -bonaci -bonagh -bonaght -bonair -bonairly -bonairness -bonally -bonang -bonanza -Bonapartean -Bonapartism -Bonapartist -Bonasa -bonasus -bonaventure -Bonaveria -bonavist -Bonbo -bonbon -bonce -bond -bondage -bondager -bondar -bonded -Bondelswarts -bonder -bonderman -bondfolk -bondholder -bondholding -bonding -bondless -bondman -bondmanship -bondsman -bondstone -bondswoman -bonduc -bondwoman -bone -boneache -bonebinder -boneblack -bonebreaker -boned -bonedog -bonefish -boneflower -bonehead -boneheaded -boneless -bonelessly -bonelessness -bonelet -bonelike -Bonellia -boner -boneset -bonesetter -bonesetting -boneshaker -boneshaw -bonetail -bonewood -bonework -bonewort -Boney -bonfire -bong -Bongo -bongo -bonhomie -Boni -boniata -Boniface -bonification -boniform -bonify -boniness -boninite -bonitarian -bonitary -bonito -bonk -bonnaz -bonnet -bonneted -bonneter -bonnethead -bonnetless -bonnetlike -bonnetman -bonnibel -Bonnie -bonnily -bonniness -Bonny -bonny -bonnyclabber -bonnyish -bonnyvis -Bononian -bonsai -bonspiel -bontebok -bontebuck -bontequagga -Bontok -bonus -bonxie -bony -bonyfish -bonze -bonzer -bonzery -bonzian -boo -boob -boobery -boobily -boobook -booby -boobyalla -boobyish -boobyism -bood -boodie -boodle -boodledom -boodleism -boodleize -boodler -boody -boof -booger -boogiewoogie -boohoo -boojum -book -bookable -bookbinder -bookbindery -bookbinding -bookboard -bookcase -bookcraft -bookdealer -bookdom -booked -booker -bookery -bookfold -bookful -bookholder -bookhood -bookie -bookiness -booking -bookish -bookishly -bookishness -bookism -bookkeeper -bookkeeping -bookland -bookless -booklet -booklike -bookling -booklore -booklover -bookmaker -bookmaking -Bookman -bookman -bookmark -bookmarker -bookmate -bookmobile -bookmonger -bookplate -bookpress -bookrack -bookrest -bookroom -bookseller -booksellerish -booksellerism -bookselling -bookshelf -bookshop -bookstack -bookstall -bookstand -bookstore -bookward -bookwards -bookways -bookwise -bookwork -bookworm -bookwright -booky -bool -Boolian -booly -boolya -boom -boomable -boomage -boomah -boomboat -boomdas -boomer -boomerang -booming -boomingly -boomless -boomlet -boomorah -boomslang -boomslange -boomster -boomy -boon -boondock -boondocks -boondoggle -boondoggler -Boone -boonfellow -boongary -boonk -boonless -Boophilus -boopis -boor -boorish -boorishly -boorishness -boort -boose -boost -booster -boosterism -boosy -boot -bootblack -bootboy -booted -bootee -booter -bootery -Bootes -bootful -booth -boother -Boothian -boothite -bootholder -boothose -Bootid -bootied -bootikin -booting -bootjack -bootlace -bootleg -bootlegger -bootlegging -bootless -bootlessly -bootlessness -bootlick -bootlicker -bootmaker -bootmaking -boots -bootstrap -booty -bootyless -booze -boozed -boozer -boozily -booziness -boozy -bop -bopeep -boppist -bopyrid -Bopyridae -bopyridian -Bopyrus -bor -bora -borable -borachio -boracic -boraciferous -boracous -borage -Boraginaceae -boraginaceous -Borago -Borak -borak -boral -Boran -Borana -Borani -borasca -borasque -Borassus -borate -borax -Borboridae -Borborus -borborygmic -borborygmus -bord -bordage -bordar -bordarius -Bordeaux -bordel -bordello -border -bordered -borderer -Borderies -bordering -borderism -borderland -borderlander -borderless -borderline -bordermark -Borderside -bordroom -bordure -bordured -bore -boreable -boread -Boreades -boreal -borealis -borean -Boreas -borecole -boredom -boree -boreen -boregat -borehole -Boreiad -boreism -borele -borer -boresome -Boreus -borg -borgh -borghalpenny -Borghese -borh -boric -borickite -boride -borine -boring -boringly -boringness -Borinqueno -Boris -borish -borism -bority -borize -borlase -born -borne -Bornean -Borneo -borneol -borning -bornite -bornitic -bornyl -Boro -boro -Borocaine -borocalcite -borocarbide -borocitrate -borofluohydric -borofluoric -borofluoride -borofluorin -boroglycerate -boroglyceride -boroglycerine -borolanite -boron -boronatrocalcite -Boronia -boronic -borophenol -borophenylic -Bororo -Bororoan -borosalicylate -borosalicylic -borosilicate -borosilicic -borotungstate -borotungstic -borough -boroughlet -boroughmaster -boroughmonger -boroughmongering -boroughmongery -boroughship -borowolframic -borracha -borrel -Borrelia -Borrelomycetaceae -Borreria -Borrichia -Borromean -Borrovian -borrow -borrowable -borrower -borrowing -borsch -borscht -borsholder -borsht -borstall -bort -bortsch -borty -bortz -Boruca -Borussian -borwort -boryl -Borzicactus -borzoi -Bos -Bosc -boscage -bosch -boschbok -Boschneger -boschvark -boschveld -bose -Boselaphus -boser -bosh -Boshas -bosher -Bosjesman -bosjesman -bosk -bosker -bosket -boskiness -bosky -bosn -Bosniac -Bosniak -Bosnian -Bosnisch -bosom -bosomed -bosomer -bosomy -Bosporan -Bosporanic -Bosporian -bosporus -boss -bossage -bossdom -bossed -bosselated -bosselation -bosser -bosset -bossiness -bossing -bossism -bosslet -bossship -bossy -bostangi -bostanji -bosthoon -Boston -boston -Bostonese -Bostonian -bostonite -bostrychid -Bostrychidae -bostrychoid -bostrychoidal -bostryx -bosun -Boswellia -Boswellian -Boswelliana -Boswellism -Boswellize -bot -bota -botanic -botanical -botanically -botanist -botanize -botanizer -botanomancy -botanophile -botanophilist -botany -botargo -Botaurinae -Botaurus -botch -botched -botchedly -botcher -botcherly -botchery -botchily -botchiness -botchka -botchy -bote -Botein -botella -boterol -botfly -both -bother -botheration -botherer -botherheaded -botherment -bothersome -bothlike -Bothnian -Bothnic -bothrenchyma -Bothriocephalus -Bothriocidaris -Bothriolepis -bothrium -Bothrodendron -bothropic -Bothrops -bothros -bothsided -bothsidedness -bothway -bothy -Botocudo -botonee -botong -Botrychium -Botrydium -Botryllidae -Botryllus -botryogen -botryoid -botryoidal -botryoidally -botryolite -Botryomyces -botryomycoma -botryomycosis -botryomycotic -Botryopteriaceae -botryopterid -Botryopteris -botryose -botryotherapy -Botrytis -bott -bottekin -Botticellian -bottine -bottle -bottlebird -bottled -bottleflower -bottleful -bottlehead -bottleholder -bottlelike -bottlemaker -bottlemaking -bottleman -bottleneck -bottlenest -bottlenose -bottler -bottling -bottom -bottomchrome -bottomed -bottomer -bottoming -bottomless -bottomlessly -bottomlessness -bottommost -bottomry -bottstick -botuliform -botulin -botulinum -botulism -botulismus -bouchal -bouchaleen -boucharde -bouche -boucher -boucherism -boucherize -bouchette -boud -boudoir -bouffancy -bouffant -Bougainvillaea -Bougainvillea -Bougainvillia -Bougainvilliidae -bougar -bouge -bouget -bough -boughed -boughless -boughpot -bought -boughten -boughy -bougie -bouillabaisse -bouillon -bouk -boukit -boulangerite -Boulangism -Boulangist -boulder -boulderhead -bouldering -bouldery -boule -boulevard -boulevardize -boultel -boulter -boulterer -boun -bounce -bounceable -bounceably -bouncer -bouncing -bouncingly -bound -boundable -boundary -bounded -boundedly -boundedness -bounden -bounder -bounding -boundingly -boundless -boundlessly -boundlessness -boundly -boundness -bounteous -bounteously -bounteousness -bountied -bountiful -bountifully -bountifulness -bountith -bountree -bounty -bountyless -bouquet -bourasque -Bourbon -bourbon -Bourbonesque -Bourbonian -Bourbonism -Bourbonist -bourbonize -bourd -bourder -bourdon -bourette -bourg -bourgeois -bourgeoise -bourgeoisie -bourgeoisitic -Bourignian -Bourignianism -Bourignianist -Bourignonism -Bourignonist -bourn -bournless -bournonite -bourock -Bourout -bourse -bourtree -bouse -bouser -Boussingaultia -boussingaultite -boustrophedon -boustrophedonic -bousy -bout -boutade -Bouteloua -bouto -boutonniere -boutylka -Bouvardia -bouw -bovarism -bovarysm -bovate -bovenland -bovicide -boviculture -bovid -Bovidae -boviform -bovine -bovinely -bovinity -Bovista -bovoid -bovovaccination -bovovaccine -bow -bowable -bowback -bowbells -bowbent -bowboy -Bowdichia -bowdlerism -bowdlerization -bowdlerize -bowed -bowedness -bowel -boweled -bowelless -bowellike -bowels -bowenite -bower -bowerbird -bowerlet -bowermaiden -bowermay -bowerwoman -Bowery -bowery -Boweryish -bowet -bowfin -bowgrace -bowhead -bowie -bowieful -bowing -bowingly -bowk -bowkail -bowker -bowknot -bowl -bowla -bowleg -bowlegged -bowleggedness -bowler -bowless -bowlful -bowlike -bowline -bowling -bowllike -bowlmaker -bowls -bowly -bowmaker -bowmaking -bowman -bowpin -bowralite -bowshot -bowsprit -bowstave -bowstring -bowstringed -bowwoman -bowwood -bowwort -bowwow -bowyer -boxberry -boxboard -boxbush -boxcar -boxen -Boxer -boxer -Boxerism -boxfish -boxful -boxhaul -boxhead -boxing -boxkeeper -boxlike -boxmaker -boxmaking -boxman -boxthorn -boxty -boxwallah -boxwood -boxwork -boxy -boy -boyang -boyar -boyard -boyardism -boyardom -boyarism -Boyce -boycott -boycottage -boycotter -boycottism -Boyd -boydom -boyer -boyhood -boyish -boyishly -boyishness -boyism -boyla -boylike -boyology -boysenberry -boyship -boza -bozal -bozo -bozze -bra -brab -brabagious -brabant -Brabanter -Brabantine -brabble -brabblement -brabbler -brabblingly -Brabejum -braca -braccate -braccia -bracciale -braccianite -braccio -brace -braced -bracelet -braceleted -bracer -bracero -braces -brach -Brachelytra -brachelytrous -bracherer -brachering -brachet -brachial -brachialgia -brachialis -Brachiata -brachiate -brachiation -brachiator -brachiferous -brachigerous -Brachinus -brachiocephalic -brachiocrural -brachiocubital -brachiocyllosis -brachiofacial -brachiofaciolingual -brachioganoid -Brachioganoidei -brachiolaria -brachiolarian -brachiopod -Brachiopoda -brachiopode -brachiopodist -brachiopodous -brachioradial -brachioradialis -brachiorrhachidian -brachiorrheuma -brachiosaur -Brachiosaurus -brachiostrophosis -brachiotomy -brachistocephali -brachistocephalic -brachistocephalous -brachistocephaly -brachistochrone -brachistochronic -brachistochronous -brachium -brachtmema -brachyaxis -brachycardia -brachycatalectic -brachycephal -brachycephalic -brachycephalism -brachycephalization -brachycephalize -brachycephalous -brachycephaly -Brachycera -brachyceral -brachyceric -brachycerous -brachychronic -brachycnemic -Brachycome -brachycranial -brachydactyl -brachydactylic -brachydactylism -brachydactylous -brachydactyly -brachydiagonal -brachydodrome -brachydodromous -brachydomal -brachydomatic -brachydome -brachydont -brachydontism -brachyfacial -brachyglossal -brachygnathia -brachygnathism -brachygnathous -brachygrapher -brachygraphic -brachygraphical -brachygraphy -brachyhieric -brachylogy -brachymetropia -brachymetropic -Brachyoura -brachyphalangia -Brachyphyllum -brachypinacoid -brachypinacoidal -brachypleural -brachypnea -brachypodine -brachypodous -brachyprism -brachyprosopic -brachypterous -brachypyramid -brachyrrhinia -brachysclereid -brachyskelic -brachysm -brachystaphylic -Brachystegia -brachystochrone -Brachystomata -brachystomatous -brachystomous -brachytic -brachytypous -Brachyura -brachyural -brachyuran -brachyuranic -brachyure -brachyurous -Brachyurus -bracing -bracingly -bracingness -brack -brackebuschite -bracken -brackened -bracker -bracket -bracketing -bracketwise -brackish -brackishness -brackmard -bracky -Bracon -braconid -Braconidae -bract -bractea -bracteal -bracteate -bracted -bracteiform -bracteolate -bracteole -bracteose -bractless -bractlet -Brad -brad -bradawl -Bradbury -Bradburya -bradenhead -Bradford -Bradley -bradmaker -Bradshaw -bradsot -bradyacousia -bradycardia -bradycauma -bradycinesia -bradycrotic -bradydactylia -bradyesthesia -bradyglossia -bradykinesia -bradykinetic -bradylalia -bradylexia -bradylogia -bradynosus -bradypepsia -bradypeptic -bradyphagia -bradyphasia -bradyphemia -bradyphrasia -bradyphrenia -bradypnea -bradypnoea -bradypod -bradypode -Bradypodidae -bradypodoid -Bradypus -bradyseism -bradyseismal -bradyseismic -bradyseismical -bradyseismism -bradyspermatism -bradysphygmia -bradystalsis -bradyteleocinesia -bradyteleokinesis -bradytocia -bradytrophic -bradyuria -brae -braeface -braehead -braeman -braeside -brag -braggardism -braggart -braggartism -braggartly -braggartry -braggat -bragger -braggery -bragget -bragging -braggingly -braggish -braggishly -Bragi -bragite -bragless -braguette -Brahm -Brahma -brahmachari -Brahmahood -Brahmaic -Brahman -Brahmana -Brahmanaspati -Brahmanda -Brahmaness -Brahmanhood -Brahmani -Brahmanic -Brahmanical -Brahmanism -Brahmanist -Brahmanistic -Brahmanize -Brahmany -Brahmi -Brahmic -Brahmin -Brahminic -Brahminism -Brahmoism -Brahmsian -Brahmsite -Brahui -braid -braided -braider -braiding -Braidism -Braidist -brail -Braille -Braillist -brain -brainache -braincap -braincraft -brainer -brainfag -brainge -braininess -brainless -brainlessly -brainlessness -brainlike -brainpan -brains -brainsick -brainsickly -brainsickness -brainstone -brainward -brainwash -brainwasher -brainwashing -brainwater -brainwood -brainwork -brainworker -brainy -braird -braireau -brairo -braise -brake -brakeage -brakehand -brakehead -brakeless -brakeload -brakemaker -brakemaking -brakeman -braker -brakeroot -brakesman -brakie -braky -Bram -Bramantesque -Bramantip -bramble -brambleberry -bramblebush -brambled -brambling -brambly -brambrack -Bramia -bran -brancard -branch -branchage -branched -Branchellion -brancher -branchery -branchful -branchi -branchia -branchiae -branchial -Branchiata -branchiate -branchicolous -branchiferous -branchiform -branchihyal -branchiness -branching -Branchiobdella -branchiocardiac -branchiogenous -branchiomere -branchiomeric -branchiomerism -branchiopallial -branchiopod -Branchiopoda -branchiopodan -branchiopodous -Branchiopulmonata -branchiopulmonate -branchiosaur -Branchiosauria -branchiosaurian -Branchiosaurus -branchiostegal -Branchiostegidae -branchiostegite -branchiostegous -Branchiostoma -branchiostomid -Branchiostomidae -Branchipodidae -Branchipus -branchireme -Branchiura -branchiurous -branchless -branchlet -branchlike -branchling -branchman -branchstand -branchway -branchy -brand -branded -Brandenburg -Brandenburger -brander -brandering -Brandi -brandied -brandify -brandise -brandish -brandisher -brandisite -brandless -brandling -Brandon -brandreth -Brandy -brandy -brandyball -brandyman -brandywine -brangle -brangled -branglement -brangler -brangling -branial -brank -brankie -brankursine -branle -branner -brannerite -branny -bransle -bransolder -brant -Branta -brantail -brantness -Brasenia -brash -brashiness -brashness -brashy -brasiletto -brasque -brass -brassage -brassard -brassart -Brassavola -brassbound -brassbounder -brasse -brasser -brasset -Brassia -brassic -Brassica -Brassicaceae -brassicaceous -brassidic -brassie -brassiere -brassily -brassiness -brassish -brasslike -brassware -brasswork -brassworker -brassworks -brassy -brassylic -brat -bratling -bratstvo -brattach -brattice -bratticer -bratticing -brattie -brattish -brattishing -brattle -brauna -Brauneberger -Brauneria -braunite -Brauronia -Brauronian -Brava -bravade -bravado -bravadoism -brave -bravehearted -bravely -braveness -braver -bravery -braving -bravish -bravo -bravoite -bravura -bravuraish -braw -brawl -brawler -brawling -brawlingly -brawlsome -brawly -brawlys -brawn -brawned -brawnedness -brawner -brawnily -brawniness -brawny -braws -braxy -bray -brayer -brayera -brayerin -braystone -braza -braze -brazen -brazenface -brazenfaced -brazenfacedly -brazenly -brazenness -brazer -brazera -brazier -braziery -brazil -brazilein -brazilette -Brazilian -brazilin -brazilite -brazilwood -breach -breacher -breachful -breachy -bread -breadbasket -breadberry -breadboard -breadbox -breadearner -breadearning -breaden -breadfruit -breadless -breadlessness -breadmaker -breadmaking -breadman -breadnut -breadroot -breadseller -breadstuff -breadth -breadthen -breadthless -breadthriders -breadthways -breadthwise -breadwinner -breadwinning -breaghe -break -breakable -breakableness -breakably -breakage -breakaway -breakax -breakback -breakbones -breakdown -breaker -breakerman -breakfast -breakfaster -breakfastless -breaking -breakless -breakneck -breakoff -breakout -breakover -breakshugh -breakstone -breakthrough -breakup -breakwater -breakwind -bream -breards -breast -breastband -breastbeam -breastbone -breasted -breaster -breastfeeding -breastful -breastheight -breasthook -breastie -breasting -breastless -breastmark -breastpiece -breastpin -breastplate -breastplow -breastrail -breastrope -breastsummer -breastweed -breastwise -breastwood -breastwork -breath -breathable -breathableness -breathe -breathed -breather -breathful -breathiness -breathing -breathingly -breathless -breathlessly -breathlessness -breathseller -breathy -breba -breccia -breccial -brecciated -brecciation -brecham -Brechites -breck -brecken -bred -bredbergite -brede -bredi -bree -breech -breechblock -breechcloth -breechclout -breeched -breeches -breechesflower -breechesless -breeching -breechless -breechloader -breed -breedable -breedbate -breeder -breediness -breeding -breedy -breek -breekless -breekums -breeze -breezeful -breezeless -breezelike -breezeway -breezily -breeziness -breezy -bregma -bregmata -bregmate -bregmatic -brehon -brehonship -brei -breislakite -breithauptite -brekkle -brelaw -breloque -breme -bremely -bremeness -Bremia -bremsstrahlung -Brenda -Brendan -Brender -brennage -Brent -brent -Brenthis -brephic -Brescian -Bret -bret -bretelle -bretesse -breth -brethren -Breton -Bretonian -Bretschneideraceae -Brett -brett -brettice -Bretwalda -Bretwaldadom -Bretwaldaship -breunnerite -breva -breve -brevet -brevetcy -breviary -breviate -breviature -brevicaudate -brevicipitid -Brevicipitidae -breviconic -brevier -brevifoliate -breviger -brevilingual -breviloquence -breviloquent -breviped -brevipen -brevipennate -breviradiate -brevirostral -brevirostrate -Brevirostrines -brevit -brevity -brew -brewage -brewer -brewership -brewery -brewhouse -brewing -brewis -brewmaster -brewst -brewster -brewsterite -brey -Brian -briar -briarberry -Briard -Briarean -Briareus -briarroot -bribe -bribee -bribegiver -bribegiving -bribemonger -briber -bribery -bribetaker -bribetaking -bribeworthy -Bribri -brichen -brichette -brick -brickbat -brickcroft -brickel -bricken -brickfield -brickfielder -brickhood -bricking -brickish -brickkiln -bricklayer -bricklaying -brickle -brickleness -bricklike -brickliner -bricklining -brickly -brickmaker -brickmaking -brickmason -brickset -bricksetter -bricktimber -brickwise -brickwork -bricky -brickyard -bricole -bridal -bridale -bridaler -bridally -Bride -bride -bridebed -bridebowl -bridecake -bridechamber -bridecup -bridegod -bridegroom -bridegroomship -bridehead -bridehood -brideknot -bridelace -brideless -bridelike -bridely -bridemaid -bridemaiden -bridemaidship -brideship -bridesmaid -bridesmaiding -bridesman -bridestake -bridewain -brideweed -bridewell -bridewort -bridge -bridgeable -bridgeboard -bridgebote -bridgebuilder -bridgebuilding -bridged -bridgehead -bridgekeeper -bridgeless -bridgelike -bridgemaker -bridgemaking -bridgeman -bridgemaster -bridgepot -Bridger -bridger -Bridget -bridgetree -bridgeward -bridgewards -bridgeway -bridgework -bridging -bridle -bridled -bridleless -bridleman -bridler -bridling -bridoon -brief -briefing -briefless -brieflessly -brieflessness -briefly -briefness -briefs -brier -brierberry -briered -brierroot -brierwood -briery -brieve -brig -brigade -brigadier -brigadiership -brigalow -brigand -brigandage -brigander -brigandine -brigandish -brigandishly -brigandism -Brigantes -Brigantia -brigantine -brigatry -brigbote -brigetty -Briggs -Briggsian -Brighella -Brighid -bright -brighten -brightener -brightening -Brighteyes -brighteyes -brightish -brightly -brightness -brightsmith -brightsome -brightsomeness -brightwork -Brigid -Brigittine -brill -brilliance -brilliancy -brilliandeer -brilliant -brilliantine -brilliantly -brilliantness -brilliantwise -brilliolette -brillolette -brills -brim -brimborion -brimborium -brimful -brimfully -brimfulness -briming -brimless -brimmed -brimmer -brimming -brimmingly -brimstone -brimstonewort -brimstony -brin -brindlish -brine -brinehouse -brineless -brineman -briner -bring -bringal -bringall -bringer -brininess -brinish -brinishness -brinjal -brinjarry -brink -brinkless -briny -brioche -briolette -brique -briquette -brisk -brisken -brisket -briskish -briskly -briskness -brisling -brisque -briss -Brissotin -Brissotine -bristle -bristlebird -bristlecone -bristled -bristleless -bristlelike -bristler -bristletail -bristlewort -bristliness -bristly -Bristol -brisure -brit -Britain -Britannia -Britannian -Britannic -Britannically -britchka -brith -brither -Briticism -British -Britisher -Britishhood -Britishism -Britishly -Britishness -Briton -Britoness -britska -Brittany -britten -brittle -brittlebush -brittlely -brittleness -brittlestem -brittlewood -brittlewort -brittling -Briza -brizz -broach -broacher -broad -broadacre -broadax -broadbill -Broadbrim -broadbrim -broadcast -broadcaster -broadcloth -broaden -broadhead -broadhearted -broadhorn -broadish -broadleaf -broadloom -broadly -broadmouth -broadness -broadpiece -broadshare -broadsheet -broadside -broadspread -broadsword -broadtail -broadthroat -Broadway -broadway -Broadwayite -broadways -broadwife -broadwise -brob -Brobdingnag -Brobdingnagian -brocade -brocaded -brocard -brocardic -brocatel -brocatello -broccoli -broch -brochan -brochant -brochantite -broche -brochette -brochidodromous -brocho -brochure -brock -brockage -brocked -brocket -brockle -brod -brodder -brodeglass -brodequin -broderer -Brodiaea -Brodie -brog -brogan -brogger -broggerite -broggle -brogue -brogueful -brogueneer -broguer -broguery -broguish -broider -broiderer -broideress -broidery -broigne -broil -broiler -broiling -broilingly -brokage -broke -broken -brokenhearted -brokenheartedly -brokenheartedness -brokenly -brokenness -broker -brokerage -brokeress -brokership -broking -brolga -broll -brolly -broma -bromacetanilide -bromacetate -bromacetic -bromacetone -bromal -bromalbumin -bromamide -bromargyrite -bromate -bromaurate -bromauric -brombenzamide -brombenzene -brombenzyl -bromcamphor -bromcresol -brome -bromeigon -Bromeikon -bromeikon -Bromelia -Bromeliaceae -bromeliaceous -bromeliad -bromelin -bromellite -bromethyl -bromethylene -bromgelatin -bromhidrosis -bromhydrate -bromhydric -Bromian -bromic -bromide -bromidic -bromidically -bromidrosis -brominate -bromination -bromindigo -bromine -brominism -brominize -bromiodide -Bromios -bromism -bromite -Bromius -bromization -bromize -bromizer -bromlite -bromoacetone -bromoaurate -bromoauric -bromobenzene -bromobenzyl -bromocamphor -bromochlorophenol -bromocresol -bromocyanidation -bromocyanide -bromocyanogen -bromoethylene -bromoform -bromogelatin -bromohydrate -bromohydrin -bromoil -bromoiodide -bromoiodism -bromoiodized -bromoketone -bromol -bromomania -bromomenorrhea -bromomethane -bromometric -bromometrical -bromometrically -bromometry -bromonaphthalene -bromophenol -bromopicrin -bromopnea -bromoprotein -bromothymol -bromous -bromphenol -brompicrin -bromthymol -bromuret -Bromus -bromvogel -bromyrite -bronc -bronchadenitis -bronchi -bronchia -bronchial -bronchially -bronchiarctia -bronchiectasis -bronchiectatic -bronchiloquy -bronchiocele -bronchiocrisis -bronchiogenic -bronchiolar -bronchiole -bronchioli -bronchiolitis -bronchiolus -bronchiospasm -bronchiostenosis -bronchitic -bronchitis -bronchium -bronchoadenitis -bronchoalveolar -bronchoaspergillosis -bronchoblennorrhea -bronchocavernous -bronchocele -bronchocephalitis -bronchoconstriction -bronchoconstrictor -bronchodilatation -bronchodilator -bronchoegophony -bronchoesophagoscopy -bronchogenic -bronchohemorrhagia -broncholemmitis -broncholith -broncholithiasis -bronchomotor -bronchomucormycosis -bronchomycosis -bronchopathy -bronchophonic -bronchophony -bronchophthisis -bronchoplasty -bronchoplegia -bronchopleurisy -bronchopneumonia -bronchopneumonic -bronchopulmonary -bronchorrhagia -bronchorrhaphy -bronchorrhea -bronchoscope -bronchoscopic -bronchoscopist -bronchoscopy -bronchospasm -bronchostenosis -bronchostomy -bronchotetany -bronchotome -bronchotomist -bronchotomy -bronchotracheal -bronchotyphoid -bronchotyphus -bronchovesicular -bronchus -bronco -broncobuster -brongniardite -bronk -Bronteana -bronteon -brontephobia -Brontesque -bronteum -brontide -brontogram -brontograph -brontolite -brontology -brontometer -brontophobia -Brontops -Brontosaurus -brontoscopy -Brontotherium -Brontozoum -Bronx -bronze -bronzed -bronzelike -bronzen -bronzer -bronzesmith -bronzewing -bronzify -bronzine -bronzing -bronzite -bronzitite -bronzy -broo -brooch -brood -brooder -broodiness -brooding -broodingly -broodless -broodlet -broodling -broody -brook -brookable -Brooke -brooked -brookflower -brookie -brookite -brookless -brooklet -brooklike -brooklime -Brooklynite -brookside -brookweed -brooky -brool -broom -broombush -broomcorn -broomer -broommaker -broommaking -broomrape -broomroot -broomshank -broomstaff -broomstick -broomstraw -broomtail -broomweed -broomwood -broomwort -broomy -broon -broose -broozled -brose -Brosimum -brosot -brosy -brot -brotan -brotany -broth -brothel -brotheler -brothellike -brothelry -brother -brotherhood -brotherless -brotherlike -brotherliness -brotherly -brothership -Brotherton -brotherwort -brothy -brotocrystal -Brotula -brotulid -Brotulidae -brotuliform -brough -brougham -brought -Broussonetia -brow -browache -Browallia -browallia -browband -browbeat -browbeater -browbound -browden -browed -browis -browless -browman -brown -brownback -browner -Brownian -brownie -browniness -browning -Browningesque -brownish -Brownism -Brownist -Brownistic -Brownistical -brownly -brownness -brownout -brownstone -browntail -browntop -brownweed -brownwort -browny -browpiece -browpost -browse -browser -browsick -browsing -browst -bruang -Bruce -Brucella -brucellosis -Bruchidae -Bruchus -brucia -brucina -brucine -brucite -bruckle -bruckled -bruckleness -Bructeri -brugh -brugnatellite -bruin -bruise -bruiser -bruisewort -bruising -bruit -bruiter -bruke -Brule -brulee -brulyie -brulyiement -brumal -Brumalia -brumby -brume -Brummagem -brummagem -brumous -brumstane -brumstone -brunch -Brunella -Brunellia -Brunelliaceae -brunelliaceous -brunet -brunetness -brunette -brunetteness -Brunfelsia -brunissure -Brunistic -brunneous -Brunnichia -Bruno -Brunonia -Brunoniaceae -Brunonian -Brunonism -Brunswick -brunswick -brunt -bruscus -brush -brushable -brushball -brushbird -brushbush -brushed -brusher -brushes -brushet -brushful -brushiness -brushing -brushite -brushland -brushless -brushlessness -brushlet -brushlike -brushmaker -brushmaking -brushman -brushoff -brushproof -brushwood -brushwork -brushy -brusque -brusquely -brusqueness -Brussels -brustle -brut -Bruta -brutage -brutal -brutalism -brutalist -brutalitarian -brutality -brutalization -brutalize -brutally -brute -brutedom -brutelike -brutely -bruteness -brutification -brutify -bruting -brutish -brutishly -brutishness -brutism -brutter -Brutus -bruzz -Bryaceae -bryaceous -Bryales -Bryan -Bryanism -Bryanite -Bryanthus -Bryce -bryogenin -bryological -bryologist -bryology -Bryonia -bryonidin -bryonin -bryony -Bryophyllum -Bryophyta -bryophyte -bryophytic -Bryozoa -bryozoan -bryozoon -bryozoum -Brython -Brythonic -Bryum -Bu -bu -bual -buaze -bub -buba -bubal -bubaline -Bubalis -bubalis -Bubastid -Bubastite -bubble -bubbleless -bubblement -bubbler -bubbling -bubblingly -bubblish -bubbly -bubby -bubbybush -Bube -bubinga -Bubo -bubo -buboed -bubonalgia -bubonic -Bubonidae -bubonocele -bubukle -bucare -bucca -buccal -buccally -buccan -buccaneer -buccaneerish -buccate -Buccellarius -buccina -buccinal -buccinator -buccinatory -Buccinidae -bucciniform -buccinoid -Buccinum -Bucco -buccobranchial -buccocervical -buccogingival -buccolabial -buccolingual -bucconasal -Bucconidae -Bucconinae -buccopharyngeal -buccula -Bucculatrix -bucentaur -Bucephala -Bucephalus -Buceros -Bucerotes -Bucerotidae -Bucerotinae -Buchanan -Buchanite -buchite -Buchloe -Buchmanism -Buchmanite -Buchnera -buchnerite -buchonite -buchu -buck -buckaroo -buckberry -buckboard -buckbrush -buckbush -bucked -buckeen -bucker -bucket -bucketer -bucketful -bucketing -bucketmaker -bucketmaking -bucketman -buckety -buckeye -buckhorn -buckhound -buckie -bucking -buckish -buckishly -buckishness -buckjump -buckjumper -bucklandite -buckle -buckled -buckleless -buckler -Buckleya -buckling -bucklum -bucko -buckplate -buckpot -buckra -buckram -bucksaw -buckshee -buckshot -buckskin -buckskinned -buckstall -buckstay -buckstone -bucktail -buckthorn -bucktooth -buckwagon -buckwash -buckwasher -buckwashing -buckwheat -buckwheater -buckwheatlike -Bucky -bucky -bucoliast -bucolic -bucolical -bucolically -bucolicism -Bucorvinae -Bucorvus -bucrane -bucranium -Bud -bud -buda -buddage -budder -Buddh -Buddha -Buddhahood -Buddhaship -buddhi -Buddhic -Buddhism -Buddhist -Buddhistic -Buddhistical -Buddhology -budding -buddle -Buddleia -buddleman -buddler -buddy -budge -budger -budgeree -budgereegah -budgerigar -budgerow -budget -budgetary -budgeteer -budgeter -budgetful -Budh -budless -budlet -budlike -budmash -Budorcas -budtime -Budukha -Buduma -budwood -budworm -budzat -Buettneria -Buettneriaceae -bufagin -buff -buffable -buffalo -buffaloback -buffball -buffcoat -buffed -buffer -buffet -buffeter -buffing -buffle -bufflehead -bufflehorn -buffont -buffoon -buffoonery -buffoonesque -buffoonish -buffoonism -buffware -buffy -bufidin -bufo -Bufonidae -bufonite -bufotalin -bug -bugaboo -bugan -bugbane -bugbear -bugbeardom -bugbearish -bugbite -bugdom -bugfish -bugger -buggery -bugginess -buggy -buggyman -bughead -bughouse -Bugi -Buginese -Buginvillaea -bugle -bugled -bugler -buglet -bugleweed -buglewort -bugloss -bugologist -bugology -bugproof -bugre -bugseed -bugweed -bugwort -buhl -buhr -buhrstone -build -buildable -builder -building -buildingless -buildress -buildup -built -buirdly -buisson -buist -Bukat -Bukeyef -bukh -Bukidnon -bukshi -bulak -Bulanda -bulb -bulbaceous -bulbar -bulbed -bulbiferous -bulbiform -bulbil -Bulbilis -bulbilla -bulbless -bulblet -bulblike -bulbocapnin -bulbocapnine -bulbocavernosus -bulbocavernous -Bulbochaete -Bulbocodium -bulbomedullary -bulbomembranous -bulbonuclear -Bulbophyllum -bulborectal -bulbose -bulbospinal -bulbotuber -bulbous -bulbul -bulbule -bulby -bulchin -Bulgar -Bulgari -Bulgarian -Bulgaric -Bulgarophil -bulge -bulger -bulginess -bulgy -bulimia -bulimiac -bulimic -bulimiform -bulimoid -Bulimulidae -Bulimus -bulimy -bulk -bulked -bulker -bulkhead -bulkheaded -bulkily -bulkiness -bulkish -bulky -bull -bulla -bullace -bullamacow -bullan -bullary -bullate -bullated -bullation -bullback -bullbaiting -bullbat -bullbeggar -bullberry -bullbird -bullboat -bullcart -bullcomber -bulldog -bulldogged -bulldoggedness -bulldoggy -bulldogism -bulldoze -bulldozer -buller -bullet -bulleted -bullethead -bulletheaded -bulletheadedness -bulletin -bulletless -bulletlike -bulletmaker -bulletmaking -bulletproof -bulletwood -bullety -bullfeast -bullfight -bullfighter -bullfighting -bullfinch -bullfist -bullflower -bullfoot -bullfrog -bullhead -bullheaded -bullheadedly -bullheadedness -bullhide -bullhoof -bullhorn -Bullidae -bulliform -bullimong -bulling -bullion -bullionism -bullionist -bullionless -bullish -bullishly -bullishness -bullism -bullit -bullneck -bullnose -bullnut -bullock -bullocker -Bullockite -bullockman -bullocky -Bullom -bullous -bullpates -bullpoll -bullpout -bullskin -bullsticker -bullsucker -bullswool -bulltoad -bullule -bullweed -bullwhack -bullwhacker -bullwhip -bullwort -bully -bullyable -bullydom -bullyhuff -bullying -bullyism -bullyrag -bullyragger -bullyragging -bullyrook -bulrush -bulrushlike -bulrushy -bulse -bult -bulter -bultey -bultong -bultow -bulwand -bulwark -bum -bumbailiff -bumbailiffship -bumbarge -bumbaste -bumbaze -bumbee -bumbershoot -bumble -bumblebee -bumbleberry -Bumbledom -bumblefoot -bumblekite -bumblepuppy -bumbler -bumbo -bumboat -bumboatman -bumboatwoman -bumclock -Bumelia -bumicky -bummalo -bummaree -bummed -bummer -bummerish -bummie -bumming -bummler -bummock -bump -bumpee -bumper -bumperette -bumpily -bumpiness -bumping -bumpingly -bumpkin -bumpkinet -bumpkinish -bumpkinly -bumpology -bumptious -bumptiously -bumptiousness -bumpy -bumtrap -bumwood -bun -Buna -buna -buncal -bunce -bunch -bunchberry -buncher -bunchflower -bunchily -bunchiness -bunchy -buncombe -bund -Bunda -Bundahish -Bundeli -bunder -Bundestag -bundle -bundler -bundlerooted -bundlet -bundobust -bundook -Bundu -bundweed -bundy -bunemost -bung -Bunga -bungaloid -bungalow -bungarum -Bungarus -bungee -bungerly -bungey -bungfu -bungfull -bunghole -bungle -bungler -bunglesome -bungling -bunglingly -bungmaker -bungo -bungwall -bungy -Buninahua -bunion -bunk -bunker -bunkerman -bunkery -bunkhouse -bunkie -bunkload -bunko -bunkum -bunnell -bunny -bunnymouth -bunodont -Bunodonta -bunolophodont -Bunomastodontidae -bunoselenodont -bunsenite -bunt -buntal -bunted -Bunter -bunter -bunting -buntline -bunton -bunty -bunya -bunyah -bunyip -Bunyoro -buoy -buoyage -buoyance -buoyancy -buoyant -buoyantly -buoyantness -Buphaga -buphthalmia -buphthalmic -Buphthalmum -bupleurol -Bupleurum -buplever -buprestid -Buprestidae -buprestidan -Buprestis -bur -buran -burao -Burbank -burbank -burbankian -Burbankism -burbark -Burberry -burble -burbler -burbly -burbot -burbush -burd -burdalone -burden -burdener -burdenless -burdenous -burdensome -burdensomely -burdensomeness -burdie -Burdigalian -burdock -burdon -bure -bureau -bureaucracy -bureaucrat -bureaucratic -bureaucratical -bureaucratically -bureaucratism -bureaucratist -bureaucratization -bureaucratize -bureaux -burel -burele -buret -burette -burfish -burg -burgage -burgality -burgall -burgee -burgensic -burgeon -burgess -burgessdom -burggrave -burgh -burghal -burghalpenny -burghbote -burghemot -burgher -burgherage -burgherdom -burgheress -burgherhood -burghermaster -burghership -burghmaster -burghmoot -burglar -burglarious -burglariously -burglarize -burglarproof -burglary -burgle -burgomaster -burgomastership -burgonet -burgoo -burgoyne -burgrave -burgraviate -burgul -Burgundian -Burgundy -burgus -burgware -burhead -Burhinidae -Burhinus -Buri -buri -burial -burian -Buriat -buried -burier -burin -burinist -burion -buriti -burka -burke -burker -burkundaz -burl -burlap -burled -burler -burlesque -burlesquely -burlesquer -burlet -burletta -Burley -burlily -burliness -Burlington -burly -Burman -Burmannia -Burmanniaceae -burmanniaceous -Burmese -burmite -burn -burnable -burnbeat -burned -burner -burnet -burnetize -burnfire -burnie -burniebee -burning -burningly -burnish -burnishable -burnisher -burnishing -burnishment -burnoose -burnoosed -burnous -burnout -burnover -Burnsian -burnside -burnsides -burnt -burntweed -burnut -burnwood -burny -buro -burp -burr -burrah -burrawang -burred -burrel -burrer -burrgrailer -burring -burrish -burrito -burrknot -burro -burrobrush -burrow -burroweed -burrower -burrowstown -burry -bursa -bursal -bursar -bursarial -bursarship -bursary -bursate -bursattee -bursautee -burse -burseed -Bursera -Burseraceae -Burseraceous -bursicle -bursiculate -bursiform -bursitis -burst -burster -burstwort -burt -burthenman -burton -burtonization -burtonize -burucha -Burushaski -Burut -burweed -bury -burying -bus -Busaos -busby -buscarl -buscarle -bush -bushbeater -bushbuck -bushcraft -bushed -bushel -busheler -bushelful -bushelman -bushelwoman -busher -bushfighter -bushfighting -bushful -bushhammer -bushi -bushily -bushiness -bushing -bushland -bushless -bushlet -bushlike -bushmaker -bushmaking -Bushman -bushmanship -bushmaster -bushment -Bushongo -bushranger -bushranging -bushrope -bushveld -bushwa -bushwhack -bushwhacker -bushwhacking -bushwife -bushwoman -bushwood -bushy -busied -busily -busine -business -businesslike -businesslikeness -businessman -businesswoman -busk -busked -busker -busket -buskin -buskined -buskle -busky -busman -buss -busser -bussock -bussu -bust -bustard -busted -bustee -buster -busthead -bustic -busticate -bustle -bustled -bustler -bustling -bustlingly -busy -busybodied -busybody -busybodyish -busybodyism -busybodyness -Busycon -busyhead -busying -busyish -busyness -busywork -but -butadiene -butadiyne -butanal -butane -butanoic -butanol -butanolid -butanolide -butanone -butch -butcher -butcherbird -butcherdom -butcherer -butcheress -butchering -butcherless -butcherliness -butcherly -butcherous -butchery -Bute -Butea -butein -butene -butenyl -Buteo -buteonine -butic -butine -Butler -butler -butlerage -butlerdom -butleress -butlerism -butlerlike -butlership -butlery -butment -Butomaceae -butomaceous -Butomus -butoxy -butoxyl -Butsu -butt -butte -butter -butteraceous -butterback -butterball -butterbill -butterbird -butterbox -butterbump -butterbur -butterbush -buttercup -buttered -butterfat -butterfingered -butterfingers -butterfish -butterflower -butterfly -butterflylike -butterhead -butterine -butteriness -butteris -butterjags -butterless -butterlike -buttermaker -buttermaking -butterman -buttermilk -buttermonger -buttermouth -butternose -butternut -butterroot -butterscotch -butterweed -butterwife -butterwoman -butterworker -butterwort -butterwright -buttery -butteryfingered -buttgenbachite -butting -buttinsky -buttle -buttock -buttocked -buttocker -button -buttonball -buttonbur -buttonbush -buttoned -buttoner -buttonhold -buttonholder -buttonhole -buttonholer -buttonhook -buttonless -buttonlike -buttonmold -buttons -buttonweed -buttonwood -buttony -buttress -buttressless -buttresslike -buttstock -buttwoman -buttwood -butty -buttyman -butyl -butylamine -butylation -butylene -butylic -Butyn -butyne -butyr -butyraceous -butyral -butyraldehyde -butyrate -butyric -butyrically -butyrin -butyrinase -butyrochloral -butyrolactone -butyrometer -butyrometric -butyrone -butyrous -butyrousness -butyryl -Buxaceae -buxaceous -Buxbaumia -Buxbaumiaceae -buxerry -buxom -buxomly -buxomness -Buxus -buy -buyable -buyer -Buyides -buzane -buzylene -buzz -buzzard -buzzardlike -buzzardly -buzzer -buzzerphone -buzzgloak -buzzies -buzzing -buzzingly -buzzle -buzzwig -buzzy -by -Byblidaceae -Byblis -bycoket -bye -byee -byegaein -byeman -byepath -byerite -byerlite -byestreet -byeworker -byeworkman -bygane -byganging -bygo -bygoing -bygone -byhand -bylaw -bylawman -byname -bynedestin -Bynin -byon -byordinar -byordinary -byous -byously -bypass -bypasser -bypast -bypath -byplay -byre -byreman -byrewards -byrewoman -byrlaw -byrlawman -byrnie -byroad -Byron -Byronesque -Byronian -Byroniana -Byronic -Byronically -Byronics -Byronish -Byronism -Byronist -Byronite -Byronize -byrrus -Byrsonima -byrthynsak -Bysacki -bysen -bysmalith -byspell -byssaceous -byssal -byssiferous -byssin -byssine -byssinosis -byssogenous -byssoid -byssolite -byssus -bystander -bystreet -byth -bytime -bytownite -bytownitite -bywalk -bywalker -byway -bywoner -byword -bywork -Byzantian -Byzantine -Byzantinesque -Byzantinism -Byzantinize -C -c -ca -caam -caama -caaming -caapeba -caatinga -cab -caba -cabaan -caback -cabaho -cabal -cabala -cabalassou -cabaletta -cabalic -cabalism -cabalist -cabalistic -cabalistical -cabalistically -caballer -caballine -caban -cabana -cabaret -cabas -cabasset -cabassou -cabbage -cabbagehead -cabbagewood -cabbagy -cabber -cabble -cabbler -cabby -cabda -cabdriver -cabdriving -cabellerote -caber -cabernet -cabestro -cabezon -cabilliau -cabin -Cabinda -cabinet -cabinetmaker -cabinetmaking -cabinetry -cabinetwork -cabinetworker -cabinetworking -cabio -Cabirean -Cabiri -Cabiria -Cabirian -Cabiric -Cabiritic -cable -cabled -cablegram -cableless -cablelike -cableman -cabler -cablet -cableway -cabling -cabman -cabob -caboceer -cabochon -cabocle -Cabomba -Cabombaceae -caboodle -cabook -caboose -caboshed -cabot -cabotage -cabree -cabrerite -cabreuva -cabrilla -cabriole -cabriolet -cabrit -cabstand -cabureiba -cabuya -Caca -Cacajao -Cacalia -cacam -Cacan -Cacana -cacanthrax -cacao -Cacara -Cacatua -Cacatuidae -Cacatuinae -Caccabis -cacesthesia -cacesthesis -cachalot -cachaza -cache -cachectic -cachemia -cachemic -cachet -cachexia -cachexic -cachexy -cachibou -cachinnate -cachinnation -cachinnator -cachinnatory -cacholong -cachou -cachrys -cachucha -cachunde -Cacicus -cacidrosis -caciocavallo -cacique -caciqueship -caciquism -cack -cackerel -cackle -cackler -cacocholia -cacochroia -cacochylia -cacochymia -cacochymic -cacochymical -cacochymy -cacocnemia -cacodaemoniac -cacodaemonial -cacodaemonic -cacodemon -cacodemonia -cacodemoniac -cacodemonial -cacodemonic -cacodemonize -cacodemonomania -cacodontia -cacodorous -cacodoxian -cacodoxical -cacodoxy -cacodyl -cacodylate -cacodylic -cacoeconomy -cacoepist -cacoepistic -cacoepy -cacoethes -cacoethic -cacogalactia -cacogastric -cacogenesis -cacogenic -cacogenics -cacogeusia -cacoglossia -cacographer -cacographic -cacographical -cacography -cacology -cacomagician -cacomelia -cacomistle -cacomixl -cacomixle -cacomorphia -cacomorphosis -caconychia -caconym -caconymic -cacoon -cacopathy -cacopharyngia -cacophonia -cacophonic -cacophonical -cacophonically -cacophonist -cacophonize -cacophonous -cacophonously -cacophony -cacophthalmia -cacoplasia -cacoplastic -cacoproctia -cacorhythmic -cacorrhachis -cacorrhinia -cacosmia -cacospermia -cacosplanchnia -cacostomia -cacothansia -cacotheline -cacothesis -cacothymia -cacotrichia -cacotrophia -cacotrophic -cacotrophy -cacotype -cacoxene -cacoxenite -cacozeal -cacozealous -cacozyme -Cactaceae -cactaceous -Cactales -cacti -cactiform -cactoid -Cactus -cacuminal -cacuminate -cacumination -cacuminous -cacur -cad -cadalene -cadamba -cadastral -cadastration -cadastre -cadaver -cadaveric -cadaverine -cadaverize -cadaverous -cadaverously -cadaverousness -cadbait -cadbit -cadbote -caddice -caddiced -Caddie -caddie -caddis -caddised -caddish -caddishly -caddishness -caddle -Caddo -Caddoan -caddow -caddy -cade -cadelle -cadence -cadenced -cadency -cadent -cadential -cadenza -cader -caderas -Cadet -cadet -cadetcy -cadetship -cadette -cadew -cadge -cadger -cadgily -cadginess -cadgy -cadi -cadilesker -cadinene -cadism -cadiueio -cadjan -cadlock -Cadmean -cadmia -cadmic -cadmide -cadmiferous -cadmium -cadmiumize -Cadmopone -Cadmus -cados -cadrans -cadre -cadua -caduac -caduca -caducary -caducean -caduceus -caduciary -caducibranch -Caducibranchiata -caducibranchiate -caducicorn -caducity -caducous -cadus -Cadwal -Cadwallader -cadweed -caeca -caecal -caecally -caecectomy -caeciform -Caecilia -Caeciliae -caecilian -Caeciliidae -caecitis -caecocolic -caecostomy -caecotomy -caecum -Caedmonian -Caedmonic -Caelian -caelometer -Caelum -Caelus -Caenogaea -Caenogaean -Caenolestes -caenostylic -caenostyly -caeoma -caeremoniarius -Caerphilly -Caesalpinia -Caesalpiniaceae -caesalpiniaceous -Caesar -Caesardom -Caesarean -Caesareanize -Caesarian -Caesarism -Caesarist -Caesarize -caesaropapacy -caesaropapism -caesaropopism -Caesarotomy -Caesarship -caesious -caesura -caesural -caesuric -cafeneh -cafenet -cafeteria -caffa -caffeate -caffeic -caffeina -caffeine -caffeinic -caffeinism -caffeism -caffeol -caffeone -caffetannic -caffetannin -caffiso -caffle -caffoline -caffoy -cafh -cafiz -caftan -caftaned -cag -Cagayan -cage -caged -cageful -cageless -cagelike -cageling -cageman -cager -cagester -cagework -cagey -caggy -cagily -cagit -cagmag -Cagn -Cahenslyism -Cahill -cahincic -Cahita -cahiz -Cahnite -Cahokia -cahoot -cahot -cahow -Cahuapana -Cahuilla -caickle -caid -cailcedra -cailleach -caimacam -caimakam -caiman -caimitillo -caimito -Cain -cain -Caingang -Caingua -Cainian -Cainish -Cainism -Cainite -Cainitic -caique -caiquejee -Cairba -caird -Cairene -cairn -cairned -cairngorm -cairngorum -cairny -Cairo -caisson -caissoned -Caitanyas -Caite -caitiff -Cajan -Cajanus -cajeput -cajole -cajolement -cajoler -cajolery -cajoling -cajolingly -cajuela -Cajun -cajun -cajuput -cajuputene -cajuputol -Cakavci -Cakchikel -cake -cakebox -cakebread -cakehouse -cakemaker -cakemaking -caker -cakette -cakewalk -cakewalker -cakey -Cakile -caky -cal -calaba -Calabar -Calabari -calabash -calabaza -calabazilla -calaber -calaboose -calabrasella -Calabrese -calabrese -Calabrian -calade -Caladium -calais -calalu -Calamagrostis -calamanco -calamansi -Calamariaceae -calamariaceous -Calamariales -calamarian -calamarioid -calamaroid -calamary -calambac -calambour -calamiferous -calamiform -calaminary -calamine -calamint -Calamintha -calamistral -calamistrum -calamite -calamitean -Calamites -calamitoid -calamitous -calamitously -calamitousness -calamity -Calamodendron -calamondin -Calamopitys -Calamospermae -Calamostachys -calamus -calander -Calandra -calandria -Calandridae -Calandrinae -Calandrinia -calangay -calantas -Calanthe -calapite -Calappa -Calappidae -Calas -calascione -calash -Calathea -calathian -calathidium -calathiform -calathiscus -calathus -Calatrava -calaverite -calbroben -calcaneal -calcaneoastragalar -calcaneoastragaloid -calcaneocuboid -calcaneofibular -calcaneonavicular -calcaneoplantar -calcaneoscaphoid -calcaneotibial -calcaneum -calcaneus -calcar -calcarate -Calcarea -calcareoargillaceous -calcareobituminous -calcareocorneous -calcareosiliceous -calcareosulphurous -calcareous -calcareously -calcareousness -calcariferous -calcariform -calcarine -calced -calceiform -calcemia -Calceolaria -calceolate -Calchaqui -Calchaquian -calcic -calciclase -calcicole -calcicolous -calcicosis -calciferol -Calciferous -calciferous -calcific -calcification -calcified -calciform -calcifugal -calcifuge -calcifugous -calcify -calcigenous -calcigerous -calcimeter -calcimine -calciminer -calcinable -calcination -calcinatory -calcine -calcined -calciner -calcinize -calciobiotite -calciocarnotite -calcioferrite -calcioscheelite -calciovolborthite -calcipexy -calciphile -calciphilia -calciphilous -calciphobe -calciphobous -calciphyre -calciprivic -calcisponge -Calcispongiae -calcite -calcitestaceous -calcitic -calcitrant -calcitrate -calcitreation -calcium -calcivorous -calcographer -calcographic -calcography -calcrete -calculability -calculable -Calculagraph -calculary -calculate -calculated -calculatedly -calculating -calculatingly -calculation -calculational -calculative -calculator -calculatory -calculi -calculiform -calculist -calculous -calculus -Calcydon -calden -caldron -calean -Caleb -Caledonia -Caledonian -caledonite -calefacient -calefaction -calefactive -calefactor -calefactory -calelectric -calelectrical -calelectricity -Calemes -calendal -calendar -calendarer -calendarial -calendarian -calendaric -calender -calenderer -calendric -calendrical -calendry -calends -Calendula -calendulin -calentural -calenture -calenturist -calepin -calescence -calescent -calf -calfbound -calfhood -calfish -calfkill -calfless -calflike -calfling -calfskin -Caliban -Calibanism -caliber -calibered -calibogus -calibrate -calibration -calibrator -calibre -Caliburn -Caliburno -calicate -calices -caliciform -calicle -calico -calicoback -calicoed -calicular -caliculate -Calicut -calid -calidity -caliduct -California -Californian -californite -californium -caliga -caligated -caliginous -caliginously -caligo -Calimeris -Calinago -calinda -calinut -caliological -caliologist -caliology -calipash -calipee -caliper -caliperer -calipers -caliph -caliphal -caliphate -caliphship -Calista -calistheneum -calisthenic -calisthenical -calisthenics -Calite -caliver -calix -Calixtin -Calixtus -calk -calkage -calker -calkin -calking -call -Calla -callable -callainite -callant -callboy -caller -callet -calli -Callianassa -Callianassidae -Calliandra -Callicarpa -Callicebus -callid -callidity -callidness -calligraph -calligrapha -calligrapher -calligraphic -calligraphical -calligraphically -calligraphist -calligraphy -calling -Callionymidae -Callionymus -Calliope -calliophone -Calliopsis -calliper -calliperer -Calliphora -calliphorid -Calliphoridae -calliphorine -callipygian -callipygous -Callirrhoe -Callisaurus -callisection -callisteia -Callistemon -Callistephus -Callithrix -callithump -callithumpian -Callitrichaceae -callitrichaceous -Callitriche -Callitrichidae -Callitris -callitype -callo -Callorhynchidae -Callorhynchus -callosal -callose -callosity -callosomarginal -callosum -callous -callously -callousness -Callovian -callow -callower -callowman -callowness -Calluna -callus -Callynteria -calm -calmant -calmative -calmer -calmierer -calmingly -calmly -calmness -calmy -Calocarpum -Calochortaceae -Calochortus -calodemon -calography -calomba -calomel -calomorphic -Calonectria -Calonyction -calool -Calophyllum -Calopogon -calor -calorescence -calorescent -caloric -caloricity -calorie -calorifacient -calorific -calorifical -calorifically -calorification -calorifics -calorifier -calorify -calorigenic -calorimeter -calorimetric -calorimetrical -calorimetrically -calorimetry -calorimotor -caloris -calorisator -calorist -Calorite -calorize -calorizer -Calosoma -Calotermes -calotermitid -Calotermitidae -Calothrix -calotte -calotype -calotypic -calotypist -caloyer -calp -calpac -calpack -calpacked -calpulli -Caltha -caltrap -caltrop -calumba -calumet -calumniate -calumniation -calumniative -calumniator -calumniatory -calumnious -calumniously -calumniousness -calumny -Calusa -calutron -Calvados -calvaria -calvarium -Calvary -Calvatia -calve -calved -calver -calves -Calvin -Calvinian -Calvinism -Calvinist -Calvinistic -Calvinistical -Calvinistically -Calvinize -calvish -calvities -calvity -calvous -calx -calycanth -Calycanthaceae -calycanthaceous -calycanthemous -calycanthemy -calycanthine -Calycanthus -calycate -Calyceraceae -calyceraceous -calyces -calyciferous -calycifloral -calyciflorate -calyciflorous -calyciform -calycinal -calycine -calycle -calycled -Calycocarpum -calycoid -calycoideous -Calycophora -Calycophorae -calycophoran -Calycozoa -calycozoan -calycozoic -calycozoon -calycular -calyculate -calyculated -calycule -calyculus -Calydon -Calydonian -Calymene -calymma -calyphyomy -calypsist -Calypso -calypso -calypsonian -calypter -Calypterae -Calyptoblastea -calyptoblastic -Calyptorhynchus -calyptra -Calyptraea -Calyptranthes -Calyptrata -Calyptratae -calyptrate -calyptriform -calyptrimorphous -calyptro -calyptrogen -Calyptrogyne -Calystegia -calyx -cam -camaca -Camacan -camagon -camail -camailed -Camaldolensian -Camaldolese -Camaldolesian -Camaldolite -Camaldule -Camaldulian -camalote -caman -camansi -camara -camaraderie -Camarasaurus -camarilla -camass -Camassia -camata -camatina -Camaxtli -camb -Camball -Cambalo -Cambarus -cambaye -camber -Cambeva -cambial -cambiform -cambiogenetic -cambism -cambist -cambistry -cambium -Cambodian -cambogia -cambrel -cambresine -Cambrian -Cambric -cambricleaf -cambuca -Cambuscan -Cambyuskan -Came -came -cameist -camel -camelback -cameleer -Camelid -Camelidae -Camelina -cameline -camelish -camelishness -camelkeeper -Camellia -Camelliaceae -camellike -camellin -Camellus -camelman -cameloid -Cameloidea -camelopard -Camelopardalis -Camelopardid -Camelopardidae -Camelopardus -camelry -Camelus -Camembert -Camenae -Camenes -cameo -cameograph -cameography -camera -cameral -cameralism -cameralist -cameralistic -cameralistics -cameraman -Camerata -camerate -camerated -cameration -camerier -Camerina -Camerinidae -camerist -camerlingo -Cameronian -Camestres -camilla -camillus -camion -camisado -Camisard -camise -camisia -camisole -camlet -camleteen -Cammarum -cammed -cammock -cammocky -camomile -camoodi -camoodie -Camorra -Camorrism -Camorrist -Camorrista -camouflage -camouflager -camp -Campa -campagna -campagnol -campaign -campaigner -campana -campane -campanero -Campanian -campaniform -campanile -campaniliform -campanilla -campanini -campanist -campanistic -campanologer -campanological -campanologically -campanologist -campanology -Campanula -Campanulaceae -campanulaceous -Campanulales -campanular -Campanularia -Campanulariae -campanularian -Campanularidae -Campanulatae -campanulate -campanulated -campanulous -Campaspe -Campbellism -Campbellite -campbellite -campcraft -Campe -Campephagidae -campephagine -Campephilus -camper -campestral -campfight -campfire -campground -camphane -camphanic -camphanone -camphanyl -camphene -camphine -camphire -campho -camphocarboxylic -camphoid -camphol -campholic -campholide -campholytic -camphor -camphoraceous -camphorate -camphoric -camphorize -camphorone -camphoronic -camphoroyl -camphorphorone -camphorwood -camphory -camphoryl -camphylene -Campignian -campimeter -campimetrical -campimetry -Campine -campion -cample -campmaster -campo -Campodea -campodeid -Campodeidae -campodeiform -campodeoid -campody -Camponotus -campoo -camporee -campshed -campshedding -campsheeting -campshot -campstool -camptodrome -camptonite -Camptosorus -campulitropal -campulitropous -campus -campward -campylite -campylodrome -campylometer -Campyloneuron -campylospermous -campylotropal -campylotropous -camshach -camshachle -camshaft -camstane -camstone -camuning -camus -camused -camwood -can -Cana -Canaan -Canaanite -Canaanitess -Canaanitic -Canaanitish -canaba -Canacee -Canada -canada -Canadian -Canadianism -Canadianization -Canadianize -canadine -canadite -canadol -canaigre -canaille -canajong -canal -canalage -canalboat -canalicular -canaliculate -canaliculated -canaliculation -canaliculi -canaliculization -canaliculus -canaliferous -canaliform -canalization -canalize -canaller -canalling -canalman -canalside -Canamary -canamo -Cananaean -Cananga -Canangium -canape -canapina -canard -Canari -canari -Canarian -canarin -Canariote -Canarium -Canarsee -canary -canasta -canaster -canaut -Canavali -Canavalia -canavalin -Canberra -cancan -cancel -cancelable -cancelation -canceleer -canceler -cancellarian -cancellate -cancellated -cancellation -cancelli -cancellous -cancellus -cancelment -cancer -cancerate -canceration -cancerdrops -cancered -cancerigenic -cancerism -cancerophobe -cancerophobia -cancerous -cancerously -cancerousness -cancerroot -cancerweed -cancerwort -canch -canchalagua -Canchi -Cancri -Cancrid -cancriform -cancrinite -cancrisocial -cancrivorous -cancrizans -cancroid -cancrophagous -cancrum -cand -Candace -candareen -candela -candelabra -candelabrum -candelilla -candent -candescence -candescent -candescently -candid -candidacy -candidate -candidateship -candidature -candidly -candidness -candied -candier -candify -Candiot -candiru -candle -candleball -candlebeam -candleberry -candlebomb -candlebox -candlefish -candleholder -candlelight -candlelighted -candlelighter -candlelighting -candlelit -candlemaker -candlemaking -Candlemas -candlenut -candlepin -candler -candlerent -candleshine -candleshrift -candlestand -candlestick -candlesticked -candlestickward -candlewaster -candlewasting -candlewick -candlewood -candlewright -candock -Candollea -Candolleaceae -candolleaceous -candor -candroy -candy -candymaker -candymaking -candys -candystick -candytuft -candyweed -cane -canebrake -canel -canelike -canella -Canellaceae -canellaceous -Canelo -canelo -caneology -canephor -canephore -canephoros -canephroi -caner -canescence -canescent -canette -canewise -canework -Canfield -canfieldite -canful -cangan -cangia -cangle -cangler -cangue -canhoop -Canichana -Canichanan -canicola -Canicula -canicular -canicule -canid -Canidae -Canidia -canille -caninal -canine -caniniform -caninity -caninus -canioned -canions -Canis -Canisiana -canistel -canister -canities -canjac -cank -canker -cankerberry -cankerbird -cankereat -cankered -cankeredly -cankeredness -cankerflower -cankerous -cankerroot -cankerweed -cankerworm -cankerwort -cankery -canmaker -canmaking -canman -Canna -canna -cannabic -Cannabinaceae -cannabinaceous -cannabine -cannabinol -Cannabis -cannabism -Cannaceae -cannaceous -cannach -canned -cannel -cannelated -cannelure -cannelured -cannequin -canner -cannery -cannet -cannibal -cannibalean -cannibalic -cannibalish -cannibalism -cannibalistic -cannibalistically -cannibality -cannibalization -cannibalize -cannibally -cannikin -cannily -canniness -canning -cannon -cannonade -cannoned -cannoneer -cannoneering -Cannonism -cannonproof -cannonry -cannot -Cannstatt -cannula -cannular -cannulate -cannulated -canny -canoe -canoeing -Canoeiro -canoeist -canoeload -canoeman -canoewood -canon -canoncito -canoness -canonic -canonical -canonically -canonicalness -canonicals -canonicate -canonicity -canonics -canonist -canonistic -canonistical -canonizant -canonization -canonize -canonizer -canonlike -canonry -canonship -canoodle -canoodler -Canopic -canopic -Canopus -canopy -canorous -canorously -canorousness -Canossa -canroy -canroyer -canso -cant -Cantab -cantabank -cantabile -Cantabri -Cantabrian -Cantabrigian -Cantabrize -cantala -cantalite -cantaloupe -cantankerous -cantankerously -cantankerousness -cantar -cantara -cantaro -cantata -Cantate -cantation -cantative -cantatory -cantboard -canted -canteen -cantefable -canter -Canterburian -Canterburianism -Canterbury -canterer -canthal -Cantharellus -Cantharidae -cantharidal -cantharidate -cantharides -cantharidian -cantharidin -cantharidism -cantharidize -cantharis -cantharophilous -cantharus -canthectomy -canthitis -cantholysis -canthoplasty -canthorrhaphy -canthotomy -canthus -cantic -canticle -cantico -cantilena -cantilene -cantilever -cantilevered -cantillate -cantillation -cantily -cantina -cantiness -canting -cantingly -cantingness -cantion -cantish -cantle -cantlet -canto -Canton -canton -cantonal -cantonalism -cantoned -cantoner -Cantonese -cantonment -cantoon -cantor -cantoral -Cantorian -cantoris -cantorous -cantorship -cantred -cantref -cantrip -cantus -cantwise -canty -Canuck -canun -canvas -canvasback -canvasman -canvass -canvassy -cany -canyon -canzon -canzonet -caoba -Caodaism -Caodaist -caoutchouc -caoutchoucin -cap -capability -capable -capableness -capably -capacious -capaciously -capaciousness -capacitance -capacitate -capacitation -capacitative -capacitativly -capacitive -capacitor -capacity -capanna -capanne -caparison -capax -capcase -Cape -cape -caped -capel -capelet -capelin -capeline -Capella -capellet -caper -caperbush -capercaillie -capercally -capercut -caperer -capering -caperingly -Capernaism -Capernaite -Capernaitic -Capernaitical -Capernaitically -Capernaitish -capernoited -capernoitie -capernoity -capersome -caperwort -capes -capeskin -Capetian -Capetonian -capeweed -capewise -capful -Caph -caph -caphar -caphite -Caphtor -Caphtorim -capias -capicha -capillaceous -capillaire -capillament -capillarectasia -capillarily -capillarimeter -capillariness -capillariomotor -capillarity -capillary -capillation -capilliculture -capilliform -capillitial -capillitium -capillose -capistrate -capital -capitaldom -capitaled -capitalism -capitalist -capitalistic -capitalistically -capitalizable -capitalization -capitalize -capitally -capitalness -capitan -capitate -capitated -capitatim -capitation -capitative -capitatum -capitellar -capitellate -capitelliform -capitellum -Capito -Capitol -Capitolian -Capitoline -Capitolium -Capitonidae -Capitoninae -capitoul -capitoulate -capitulant -capitular -capitularly -capitulary -capitulate -capitulation -capitulator -capitulatory -capituliform -capitulum -capivi -capkin -capless -caplin -capmaker -capmaking -capman -capmint -Capnodium -Capnoides -capnomancy -capocchia -capomo -capon -caponier -caponize -caponizer -caporal -capot -capote -cappadine -Cappadocian -Capparidaceae -capparidaceous -Capparis -capped -cappelenite -capper -cappie -capping -capple -cappy -Capra -caprate -Caprella -Caprellidae -caprelline -capreol -capreolar -capreolary -capreolate -capreoline -Capreolus -Capri -capric -capriccetto -capricci -capriccio -caprice -capricious -capriciously -capriciousness -Capricorn -Capricornid -Capricornus -caprid -caprificate -caprification -caprificator -caprifig -Caprifoliaceae -caprifoliaceous -Caprifolium -caprifolium -capriform -caprigenous -Caprimulgi -Caprimulgidae -Caprimulgiformes -caprimulgine -Caprimulgus -caprin -caprine -caprinic -Capriola -capriole -Capriote -capriped -capripede -caprizant -caproate -caproic -caproin -Capromys -caprone -capronic -capronyl -caproyl -capryl -caprylate -caprylene -caprylic -caprylin -caprylone -caprylyl -capsa -capsaicin -Capsella -capsheaf -capshore -Capsian -capsicin -Capsicum -capsicum -capsid -Capsidae -capsizal -capsize -capstan -capstone -capsula -capsulae -capsular -capsulate -capsulated -capsulation -capsule -capsulectomy -capsuler -capsuliferous -capsuliform -capsuligerous -capsulitis -capsulociliary -capsulogenous -capsulolenticular -capsulopupillary -capsulorrhaphy -capsulotome -capsulotomy -capsumin -captaculum -captain -captaincy -captainess -captainly -captainry -captainship -captance -captation -caption -captious -captiously -captiousness -captivate -captivately -captivating -captivatingly -captivation -captivative -captivator -captivatrix -captive -captivity -captor -captress -capturable -capture -capturer -Capuan -capuche -capuched -Capuchin -capuchin -capucine -capulet -capulin -capybara -Caquetio -car -Cara -carabao -carabeen -carabid -Carabidae -carabidan -carabideous -carabidoid -carabin -carabineer -Carabini -caraboid -Carabus -carabus -caracal -caracara -caracol -caracole -caracoler -caracoli -caracolite -caracoller -caracore -caract -Caractacus -caracter -Caradoc -carafe -Caragana -Caraguata -caraguata -Caraho -caraibe -Caraipa -caraipi -Caraja -Carajas -carajura -caramba -carambola -carambole -caramel -caramelan -caramelen -caramelin -caramelization -caramelize -caramoussal -carancha -caranda -Carandas -caranday -carane -Caranga -carangid -Carangidae -carangoid -Carangus -caranna -Caranx -Carapa -carapace -carapaced -Carapache -Carapacho -carapacic -carapato -carapax -Carapidae -carapine -carapo -Carapus -Carara -carat -caratch -caraunda -caravan -caravaneer -caravanist -caravanner -caravansary -caravanserai -caravanserial -caravel -caraway -Carayan -carbacidometer -carbamate -carbamic -carbamide -carbamido -carbamine -carbamino -carbamyl -carbanil -carbanilic -carbanilide -carbarn -carbasus -carbazic -carbazide -carbazine -carbazole -carbazylic -carbeen -carbene -carberry -carbethoxy -carbethoxyl -carbide -carbimide -carbine -carbinol -carbinyl -carbo -carboazotine -carbocinchomeronic -carbodiimide -carbodynamite -carbogelatin -carbohemoglobin -carbohydrase -carbohydrate -carbohydraturia -carbohydrazide -carbohydride -carbohydrogen -carbolate -carbolated -carbolfuchsin -carbolic -carbolineate -Carbolineum -carbolize -Carboloy -carboluria -carbolxylol -carbomethene -carbomethoxy -carbomethoxyl -carbon -carbona -carbonaceous -carbonade -carbonado -Carbonari -Carbonarism -Carbonarist -carbonatation -carbonate -carbonation -carbonatization -carbonator -carbonemia -carbonero -carbonic -carbonide -Carboniferous -carboniferous -carbonification -carbonify -carbonigenous -carbonimeter -carbonimide -carbonite -carbonitride -carbonium -carbonizable -carbonization -carbonize -carbonizer -carbonless -Carbonnieux -carbonometer -carbonometry -carbonous -carbonuria -carbonyl -carbonylene -carbonylic -carbophilous -carbora -Carborundum -carborundum -carbosilicate -carbostyril -carboxide -carboxy -Carboxydomonas -carboxyhemoglobin -carboxyl -carboxylase -carboxylate -carboxylation -carboxylic -carboy -carboyed -carbro -carbromal -carbuilder -carbuncle -carbuncled -carbuncular -carbungi -carburant -carburate -carburation -carburator -carbure -carburet -carburetant -carburetor -carburization -carburize -carburizer -carburometer -carbyl -carbylamine -carcajou -carcake -carcanet -carcaneted -carcass -Carcavelhos -carceag -carcel -carceral -carcerate -carceration -Carcharhinus -Carcharias -carchariid -Carchariidae -carcharioid -Carcharodon -carcharodont -carcinemia -carcinogen -carcinogenesis -carcinogenic -carcinoid -carcinological -carcinologist -carcinology -carcinolysin -carcinolytic -carcinoma -carcinomata -carcinomatoid -carcinomatosis -carcinomatous -carcinomorphic -carcinophagous -carcinopolypus -carcinosarcoma -carcinosarcomata -Carcinoscorpius -carcinosis -carcoon -card -cardaissin -Cardamine -cardamom -Cardanic -cardboard -cardcase -cardecu -carded -cardel -carder -cardholder -cardia -cardiac -cardiacal -Cardiacea -cardiacean -cardiagra -cardiagram -cardiagraph -cardiagraphy -cardial -cardialgia -cardialgy -cardiameter -cardiamorphia -cardianesthesia -cardianeuria -cardiant -cardiaplegia -cardiarctia -cardiasthenia -cardiasthma -cardiataxia -cardiatomy -cardiatrophia -cardiauxe -Cardiazol -cardicentesis -cardiectasis -cardiectomize -cardiectomy -cardielcosis -cardiemphraxia -cardiform -Cardigan -cardigan -Cardiidae -cardin -cardinal -cardinalate -cardinalic -Cardinalis -cardinalism -cardinalist -cardinalitial -cardinalitian -cardinally -cardinalship -cardines -carding -cardioaccelerator -cardioarterial -cardioblast -cardiocarpum -cardiocele -cardiocentesis -cardiocirrhosis -cardioclasia -cardioclasis -cardiodilator -cardiodynamics -cardiodynia -cardiodysesthesia -cardiodysneuria -cardiogenesis -cardiogenic -cardiogram -cardiograph -cardiographic -cardiography -cardiohepatic -cardioid -cardiokinetic -cardiolith -cardiological -cardiologist -cardiology -cardiolysis -cardiomalacia -cardiomegaly -cardiomelanosis -cardiometer -cardiometric -cardiometry -cardiomotility -cardiomyoliposis -cardiomyomalacia -cardioncus -cardionecrosis -cardionephric -cardioneural -cardioneurosis -cardionosus -cardioparplasis -cardiopathic -cardiopathy -cardiopericarditis -cardiophobe -cardiophobia -cardiophrenia -cardioplasty -cardioplegia -cardiopneumatic -cardiopneumograph -cardioptosis -cardiopulmonary -cardiopuncture -cardiopyloric -cardiorenal -cardiorespiratory -cardiorrhaphy -cardiorrheuma -cardiorrhexis -cardioschisis -cardiosclerosis -cardioscope -cardiospasm -Cardiospermum -cardiosphygmogram -cardiosphygmograph -cardiosymphysis -cardiotherapy -cardiotomy -cardiotonic -cardiotoxic -cardiotrophia -cardiotrophotherapy -cardiovascular -cardiovisceral -cardipaludism -cardipericarditis -cardisophistical -carditic -carditis -Cardium -cardlike -cardmaker -cardmaking -cardo -cardol -cardon -cardona -cardoncillo -cardooer -cardoon -cardophagus -cardplayer -cardroom -cardsharp -cardsharping -cardstock -Carduaceae -carduaceous -Carduelis -Carduus -care -carecloth -careen -careenage -careener -career -careerer -careering -careeringly -careerist -carefree -careful -carefully -carefulness -careless -carelessly -carelessness -carene -carer -caress -caressant -caresser -caressing -caressingly -caressive -caressively -carest -caret -caretaker -caretaking -Caretta -Carettochelydidae -careworn -Carex -carfare -carfax -carfuffle -carful -carga -cargo -cargoose -carhop -carhouse -cariacine -Cariacus -cariama -Cariamae -Carian -Carib -Caribal -Cariban -Caribbean -Caribbee -Caribi -Caribisi -caribou -Carica -Caricaceae -caricaceous -caricatura -caricaturable -caricatural -caricature -caricaturist -caricetum -caricographer -caricography -caricologist -caricology -caricous -carid -Carida -Caridea -caridean -caridoid -Caridomorpha -caries -Carijona -carillon -carillonneur -carina -carinal -Carinaria -Carinatae -carinate -carinated -carination -Cariniana -cariniform -Carinthian -cariole -carioling -cariosity -carious -cariousness -Caripuna -Cariri -Caririan -Carisa -Carissa -caritative -caritive -Cariyo -cark -carking -carkingly -carkled -Carl -carl -carless -carlet -carlie -carlin -Carlina -carline -carling -carlings -carlish -carlishness -Carlisle -Carlism -Carlist -Carlo -carload -carloading -carloadings -Carlos -carlot -Carlovingian -carls -Carludovica -Carlylean -Carlyleian -Carlylese -Carlylesque -Carlylian -Carlylism -carmagnole -carmalum -Carman -carman -Carmanians -Carmel -Carmela -carmele -Carmelite -Carmelitess -carmeloite -Carmen -carminative -Carmine -carmine -carminette -carminic -carminite -carminophilous -carmoisin -carmot -Carnacian -carnage -carnaged -carnal -carnalism -carnalite -carnality -carnalize -carnallite -carnally -carnalness -carnaptious -Carnaria -carnassial -carnate -carnation -carnationed -carnationist -carnauba -carnaubic -carnaubyl -Carnegie -Carnegiea -carnelian -carneol -carneole -carneous -carney -carnic -carniferous -carniferrin -carnifex -carnification -carnifices -carnificial -carniform -carnify -Carniolan -carnival -carnivaler -carnivalesque -Carnivora -carnivoracity -carnivoral -carnivore -carnivorism -carnivorous -carnivorously -carnivorousness -carnose -carnosine -carnosity -carnotite -carnous -Caro -caroa -carob -caroba -caroche -Caroid -Carol -carol -Carolan -Carole -Carolean -caroler -caroli -carolin -Carolina -Caroline -caroline -Caroling -Carolingian -Carolinian -carolus -Carolyn -carom -carombolette -carone -caronic -caroome -caroon -carotene -carotenoid -carotic -carotid -carotidal -carotidean -carotin -carotinemia -carotinoid -caroubier -carousal -carouse -carouser -carousing -carousingly -carp -carpaine -carpal -carpale -carpalia -Carpathian -carpel -carpellary -carpellate -carpent -carpenter -Carpenteria -carpentering -carpentership -carpentry -carper -carpet -carpetbag -carpetbagger -carpetbaggery -carpetbaggism -carpetbagism -carpetbeater -carpeting -carpetlayer -carpetless -carpetmaker -carpetmaking -carpetmonger -carpetweb -carpetweed -carpetwork -carpetwoven -Carphiophiops -carpholite -Carphophis -carphosiderite -carpid -carpidium -carpincho -carping -carpingly -carpintero -Carpinus -Carpiodes -carpitis -carpium -carpocace -Carpocapsa -carpocarpal -carpocephala -carpocephalum -carpocerite -carpocervical -Carpocratian -Carpodacus -Carpodetus -carpogam -carpogamy -carpogenic -carpogenous -carpogone -carpogonial -carpogonium -Carpoidea -carpolite -carpolith -carpological -carpologically -carpologist -carpology -carpomania -carpometacarpal -carpometacarpus -carpopedal -Carpophaga -carpophagous -carpophalangeal -carpophore -carpophyll -carpophyte -carpopodite -carpopoditic -carpoptosia -carpoptosis -carport -carpos -carposperm -carposporangia -carposporangial -carposporangium -carpospore -carposporic -carposporous -carpostome -carpus -carquaise -carr -carrack -carrageen -carrageenin -Carrara -Carraran -carrel -carriable -carriage -carriageable -carriageful -carriageless -carriagesmith -carriageway -Carrick -carrick -Carrie -carried -carrier -carrion -carritch -carritches -carriwitchet -Carrizo -carrizo -carroch -carrollite -carronade -carrot -carrotage -carroter -carrotiness -carrottop -carrotweed -carrotwood -carroty -carrousel -carrow -Carry -carry -carryall -carrying -carrytale -carse -carshop -carsick -carsmith -Carsten -cart -cartable -cartaceous -cartage -cartboot -cartbote -carte -cartel -cartelism -cartelist -cartelization -cartelize -Carter -carter -Cartesian -Cartesianism -cartful -Carthaginian -carthame -carthamic -carthamin -Carthamus -Carthusian -Cartier -cartilage -cartilaginean -Cartilaginei -cartilagineous -Cartilagines -cartilaginification -cartilaginoid -cartilaginous -cartisane -Cartist -cartload -cartmaker -cartmaking -cartman -cartobibliography -cartogram -cartograph -cartographer -cartographic -cartographical -cartographically -cartography -cartomancy -carton -cartonnage -cartoon -cartoonist -cartouche -cartridge -cartsale -cartulary -cartway -cartwright -cartwrighting -carty -carua -carucage -carucal -carucate -carucated -Carum -caruncle -caruncula -carunculae -caruncular -carunculate -carunculated -carunculous -carvacrol -carvacryl -carval -carve -carvel -carven -carvene -carver -carvership -carvestrene -carving -carvoepra -carvol -carvomenthene -carvone -carvyl -carwitchet -Cary -Carya -caryatic -caryatid -caryatidal -caryatidean -caryatidic -caryl -Caryocar -Caryocaraceae -caryocaraceous -Caryophyllaceae -caryophyllaceous -caryophyllene -caryophylleous -caryophyllin -caryophyllous -Caryophyllus -caryopilite -caryopses -caryopsides -caryopsis -Caryopteris -Caryota -casaba -casabe -casal -casalty -Casamarca -Casanovanic -Casasia -casate -casaun -casava -casave -casavi -casbah -cascabel -cascade -Cascadia -Cascadian -cascadite -cascado -cascalho -cascalote -cascara -cascarilla -cascaron -casco -cascol -Case -case -Casearia -casease -caseate -caseation -casebook -casebox -cased -caseful -casefy -caseharden -caseic -casein -caseinate -caseinogen -casekeeper -Casel -caseless -caselessly -casemaker -casemaking -casemate -casemated -casement -casemented -caseolysis -caseose -caseous -caser -casern -caseum -caseweed -casewood -casework -caseworker -caseworm -Casey -cash -casha -cashable -cashableness -cashaw -cashbook -cashbox -cashboy -cashcuttee -cashel -cashew -cashgirl -Cashibo -cashier -cashierer -cashierment -cashkeeper -cashment -Cashmere -cashmere -cashmerette -Cashmirian -Casimir -Casimiroa -casing -casino -casiri -cask -casket -casking -casklike -Caslon -Caspar -Casparian -Casper -Caspian -casque -casqued -casquet -casquetel -casquette -cass -cassabanana -cassabully -cassady -Cassandra -cassareep -cassation -casse -Cassegrain -Cassegrainian -casselty -cassena -casserole -Cassia -cassia -Cassiaceae -Cassian -cassican -Cassicus -Cassida -cassideous -cassidid -Cassididae -Cassidinae -cassidony -Cassidulina -cassiduloid -Cassiduloidea -Cassie -cassie -Cassiepeia -cassimere -cassina -cassine -Cassinese -cassinette -Cassinian -cassino -cassinoid -cassioberry -Cassiope -Cassiopeia -Cassiopeian -Cassiopeid -cassiopeium -Cassis -cassis -cassiterite -Cassius -cassock -cassolette -casson -cassonade -cassoon -cassowary -cassumunar -Cassytha -Cassythaceae -cast -castable -castagnole -Castalia -Castalian -Castalides -Castalio -Castanea -castanean -castaneous -castanet -Castanopsis -Castanospermum -castaway -caste -casteless -castelet -castellan -castellano -castellanship -castellany -castellar -castellate -castellated -castellation -caster -casterless -casthouse -castice -castigable -castigate -castigation -castigative -castigator -castigatory -Castilian -Castilla -Castilleja -Castilloa -casting -castle -castled -castlelike -castlet -castlewards -castlewise -castling -castock -castoff -Castor -castor -Castores -castoreum -castorial -Castoridae -castorin -castorite -castorized -Castoroides -castory -castra -castral -castrametation -castrate -castrater -castration -castrator -castrensial -castrensian -castrum -castuli -casual -casualism -casualist -casuality -casually -casualness -casualty -Casuariidae -Casuariiformes -Casuarina -Casuarinaceae -casuarinaceous -Casuarinales -Casuarius -casuary -casuist -casuistess -casuistic -casuistical -casuistically -casuistry -casula -caswellite -Casziel -Cat -cat -catabaptist -catabases -catabasis -catabatic -catabibazon -catabiotic -catabolic -catabolically -catabolin -catabolism -catabolite -catabolize -catacaustic -catachreses -catachresis -catachrestic -catachrestical -catachrestically -catachthonian -cataclasm -cataclasmic -cataclastic -cataclinal -cataclysm -cataclysmal -cataclysmatic -cataclysmatist -cataclysmic -cataclysmically -cataclysmist -catacomb -catacorolla -catacoustics -catacromyodian -catacrotic -catacrotism -catacumbal -catadicrotic -catadicrotism -catadioptric -catadioptrical -catadioptrics -catadromous -catafalco -catafalque -catagenesis -catagenetic -catagmatic -Cataian -catakinesis -catakinetic -catakinetomer -catakinomeric -Catalan -Catalanganes -Catalanist -catalase -Catalaunian -catalecta -catalectic -catalecticant -catalepsis -catalepsy -cataleptic -cataleptiform -cataleptize -cataleptoid -catalexis -catalina -catalineta -catalinite -catallactic -catallactically -catallactics -catallum -catalogia -catalogic -catalogical -catalogist -catalogistic -catalogue -cataloguer -cataloguish -cataloguist -cataloguize -Catalonian -catalowne -Catalpa -catalpa -catalufa -catalyses -catalysis -catalyst -catalyte -catalytic -catalytical -catalytically -catalyzator -catalyze -catalyzer -catamaran -Catamarcan -Catamarenan -catamenia -catamenial -catamite -catamited -catamiting -catamount -catamountain -catan -Catananche -catapan -catapasm -catapetalous -cataphasia -cataphatic -cataphora -cataphoresis -cataphoretic -cataphoria -cataphoric -cataphract -Cataphracta -Cataphracti -cataphrenia -cataphrenic -Cataphrygian -cataphrygianism -cataphyll -cataphylla -cataphyllary -cataphyllum -cataphysical -cataplasia -cataplasis -cataplasm -catapleiite -cataplexy -catapult -catapultic -catapultier -cataract -cataractal -cataracted -cataractine -cataractous -cataractwise -cataria -catarinite -catarrh -catarrhal -catarrhally -catarrhed -Catarrhina -catarrhine -catarrhinian -catarrhous -catasarka -Catasetum -catasta -catastaltic -catastasis -catastate -catastatic -catasterism -catastrophal -catastrophe -catastrophic -catastrophical -catastrophically -catastrophism -catastrophist -catathymic -catatonia -catatoniac -catatonic -catawampous -catawampously -catawamptious -catawamptiously -catawampus -Catawba -catberry -catbird -catboat -catcall -catch -catchable -catchall -catchcry -catcher -catchfly -catchiness -catching -catchingly -catchingness -catchland -catchment -catchpenny -catchplate -catchpole -catchpolery -catchpoleship -catchpoll -catchpollery -catchup -catchwater -catchweed -catchweight -catchword -catchwork -catchy -catclaw -catdom -cate -catechesis -catechetic -catechetical -catechetically -catechin -catechism -catechismal -catechist -catechistic -catechistical -catechistically -catechizable -catechization -catechize -catechizer -catechol -catechu -catechumen -catechumenal -catechumenate -catechumenical -catechumenically -catechumenism -catechumenship -catechutannic -categorem -categorematic -categorematical -categorematically -categorial -categoric -categorical -categorically -categoricalness -categorist -categorization -categorize -category -catelectrotonic -catelectrotonus -catella -catena -catenae -catenarian -catenary -catenate -catenated -catenation -catenoid -catenulate -catepuce -cater -cateran -catercap -catercorner -caterer -caterership -cateress -caterpillar -caterpillared -caterpillarlike -caterva -caterwaul -caterwauler -caterwauling -Catesbaea -cateye -catface -catfaced -catfacing -catfall -catfish -catfoot -catfooted -catgut -Catha -Cathari -Catharina -Catharine -Catharism -Catharist -Catharistic -catharization -catharize -catharpin -catharping -Cathars -catharsis -Cathartae -Cathartes -cathartic -cathartical -cathartically -catharticalness -Cathartidae -Cathartides -Cathartolinum -Cathay -Cathayan -cathead -cathect -cathectic -cathection -cathedra -cathedral -cathedraled -cathedralesque -cathedralic -cathedrallike -cathedralwise -cathedratic -cathedratica -cathedratical -cathedratically -cathedraticum -cathepsin -Catherine -catheter -catheterism -catheterization -catheterize -catheti -cathetometer -cathetometric -cathetus -cathexion -cathexis -cathidine -cathin -cathine -cathinine -cathion -cathisma -cathodal -cathode -cathodic -cathodical -cathodically -cathodofluorescence -cathodograph -cathodography -cathodoluminescence -cathograph -cathography -cathole -catholic -catholical -catholically -catholicalness -catholicate -catholicism -catholicist -catholicity -catholicize -catholicizer -catholicly -catholicness -catholicon -catholicos -catholicus -catholyte -cathood -cathop -Cathrin -cathro -Cathryn -Cathy -Catilinarian -cation -cationic -cativo -catjang -catkin -catkinate -catlap -catlike -catlin -catling -catlinite -catmalison -catmint -catnip -catoblepas -Catocala -catocalid -catocathartic -catoctin -Catodon -catodont -catogene -catogenic -Catoism -Catonian -Catonic -Catonically -Catonism -catoptric -catoptrical -catoptrically -catoptrics -catoptrite -catoptromancy -catoptromantic -Catoquina -catostomid -Catostomidae -catostomoid -Catostomus -catpiece -catpipe -catproof -Catskill -catskin -catstep -catstick -catstitch -catstitcher -catstone -catsup -cattabu -cattail -cattalo -cattery -Catti -cattily -cattimandoo -cattiness -catting -cattish -cattishly -cattishness -cattle -cattlebush -cattlegate -cattleless -cattleman -Cattleya -cattleya -cattleyak -Catty -catty -cattyman -Catullian -catvine -catwalk -catwise -catwood -catwort -caubeen -cauboge -Caucasian -Caucasic -Caucasoid -cauch -cauchillo -caucho -caucus -cauda -caudad -caudae -caudal -caudally -caudalward -Caudata -caudata -caudate -caudated -caudation -caudatolenticular -caudatory -caudatum -caudex -caudices -caudicle -caudiform -caudillism -caudle -caudocephalad -caudodorsal -caudofemoral -caudolateral -caudotibial -caudotibialis -Caughnawaga -caught -cauk -caul -cauld -cauldrife -cauldrifeness -Caulerpa -Caulerpaceae -caulerpaceous -caules -caulescent -caulicle -caulicole -caulicolous -caulicule -cauliculus -cauliferous -cauliflorous -cauliflory -cauliflower -cauliform -cauligenous -caulinar -caulinary -cauline -caulis -Caulite -caulivorous -caulocarpic -caulocarpous -caulome -caulomer -caulomic -caulophylline -Caulophyllum -Caulopteris -caulopteris -caulosarc -caulotaxis -caulotaxy -caulote -caum -cauma -caumatic -caunch -Caunos -Caunus -caup -caupo -caupones -Cauqui -caurale -Caurus -causability -causable -causal -causalgia -causality -causally -causate -causation -causational -causationism -causationist -causative -causatively -causativeness -causativity -cause -causeful -causeless -causelessly -causelessness -causer -causerie -causeway -causewayman -causey -causidical -causing -causingness -causse -causson -caustic -caustical -caustically -causticiser -causticism -causticity -causticization -causticize -causticizer -causticly -causticness -caustification -caustify -Causus -cautel -cautelous -cautelously -cautelousness -cauter -cauterant -cauterization -cauterize -cautery -caution -cautionary -cautioner -cautionry -cautious -cautiously -cautiousness -cautivo -cava -cavae -caval -cavalcade -cavalero -cavalier -cavalierish -cavalierishness -cavalierism -cavalierly -cavalierness -cavaliero -cavaliership -cavalla -cavalry -cavalryman -cavascope -cavate -cavatina -cave -caveat -caveator -cavekeeper -cavel -cavelet -cavelike -cavendish -cavern -cavernal -caverned -cavernicolous -cavernitis -cavernlike -cavernoma -cavernous -cavernously -cavernulous -cavesson -cavetto -Cavia -caviar -cavicorn -Cavicornia -Cavidae -cavie -cavil -caviler -caviling -cavilingly -cavilingness -cavillation -Cavina -caving -cavings -cavish -cavitary -cavitate -cavitation -cavitied -cavity -caviya -cavort -cavus -cavy -caw -cawk -cawky -cawney -cawquaw -caxiri -caxon -Caxton -Caxtonian -cay -Cayapa -Cayapo -Cayenne -cayenne -cayenned -Cayleyan -cayman -Cayubaba -Cayubaban -Cayuga -Cayugan -Cayuse -Cayuvava -caza -cazimi -Ccoya -ce -Ceanothus -cearin -cease -ceaseless -ceaselessly -ceaselessness -ceasmic -Cebalrai -Cebatha -cebell -cebian -cebid -Cebidae -cebil -cebine -ceboid -cebollite -cebur -Cebus -cecidiologist -cecidiology -cecidium -cecidogenous -cecidologist -cecidology -cecidomyian -cecidomyiid -Cecidomyiidae -cecidomyiidous -Cecil -Cecile -Cecilia -cecilite -cecils -Cecily -cecity -cecograph -Cecomorphae -cecomorphic -cecostomy -Cecropia -Cecrops -cecutiency -cedar -cedarbird -cedared -cedarn -cedarware -cedarwood -cedary -cede -cedent -ceder -cedilla -cedrat -cedrate -cedre -Cedrela -cedrene -Cedric -cedrin -cedrine -cedriret -cedrium -cedrol -cedron -Cedrus -cedry -cedula -cee -Ceiba -ceibo -ceil -ceile -ceiler -ceilidh -ceiling -ceilinged -ceilingward -ceilingwards -ceilometer -Celadon -celadon -celadonite -Celaeno -celandine -Celanese -Celarent -Celastraceae -celastraceous -Celastrus -celation -celative -celature -Celebesian -celebrant -celebrate -celebrated -celebratedness -celebrater -celebration -celebrative -celebrator -celebratory -celebrity -celemin -celemines -celeomorph -Celeomorphae -celeomorphic -celeriac -celerity -celery -celesta -Celeste -celeste -celestial -celestiality -celestialize -celestially -celestialness -celestina -Celestine -celestine -Celestinian -celestite -celestitude -Celia -celiac -celiadelphus -celiagra -celialgia -celibacy -celibatarian -celibate -celibatic -celibatist -celibatory -celidographer -celidography -celiectasia -celiectomy -celiemia -celiitis -celiocele -celiocentesis -celiocolpotomy -celiocyesis -celiodynia -celioelytrotomy -celioenterotomy -celiogastrotomy -celiohysterotomy -celiolymph -celiomyalgia -celiomyodynia -celiomyomectomy -celiomyomotomy -celiomyositis -celioncus -celioparacentesis -celiopyosis -celiorrhaphy -celiorrhea -celiosalpingectomy -celiosalpingotomy -celioschisis -celioscope -celioscopy -celiotomy -celite -cell -cella -cellae -cellar -cellarage -cellarer -cellaress -cellaret -cellaring -cellarless -cellarman -cellarous -cellarway -cellarwoman -cellated -celled -Cellepora -cellepore -Cellfalcicula -celliferous -celliform -cellifugal -cellipetal -cellist -Cellite -cello -cellobiose -celloid -celloidin -celloist -cellophane -cellose -Cellucotton -cellular -cellularity -cellularly -cellulase -cellulate -cellulated -cellulation -cellule -cellulicidal -celluliferous -cellulifugal -cellulifugally -cellulin -cellulipetal -cellulipetally -cellulitis -cellulocutaneous -cellulofibrous -Celluloid -celluloid -celluloided -Cellulomonadeae -Cellulomonas -cellulose -cellulosic -cellulosity -cellulotoxic -cellulous -Cellvibrio -Celosia -Celotex -celotomy -Celsia -celsian -Celsius -Celt -celt -Celtdom -Celtiberi -Celtiberian -Celtic -Celtically -Celticism -Celticist -Celticize -Celtidaceae -celtiform -Celtillyrians -Celtis -Celtish -Celtism -Celtist -celtium -Celtization -Celtologist -Celtologue -Celtomaniac -Celtophil -Celtophobe -Celtophobia -celtuce -cembalist -cembalo -cement -cemental -cementation -cementatory -cementer -cementification -cementin -cementite -cementitious -cementless -cementmaker -cementmaking -cementoblast -cementoma -cementum -cemeterial -cemetery -cenacle -cenaculum -cenanthous -cenanthy -cencerro -Cenchrus -cendre -cenobian -cenobite -cenobitic -cenobitical -cenobitically -cenobitism -cenobium -cenoby -cenogenesis -cenogenetic -cenogenetically -cenogonous -Cenomanian -cenosite -cenosity -cenospecies -cenospecific -cenospecifically -cenotaph -cenotaphic -cenotaphy -Cenozoic -cenozoology -cense -censer -censerless -censive -censor -censorable -censorate -censorial -censorious -censoriously -censoriousness -censorship -censual -censurability -censurable -censurableness -censurably -censure -censureless -censurer -censureship -census -cent -centage -cental -centare -centaur -centaurdom -Centaurea -centauress -centauri -centaurial -centaurian -centauric -Centaurid -Centauridium -Centaurium -centauromachia -centauromachy -Centaurus -centaurus -centaury -centavo -centena -centenar -centenarian -centenarianism -centenary -centenier -centenionalis -centennial -centennially -center -centerable -centerboard -centered -centerer -centering -centerless -centermost -centerpiece -centervelic -centerward -centerwise -centesimal -centesimally -centesimate -centesimation -centesimi -centesimo -centesis -Centetes -centetid -Centetidae -centgener -centiar -centiare -centibar -centifolious -centigrade -centigram -centile -centiliter -centillion -centillionth -Centiloquy -centime -centimeter -centimo -centimolar -centinormal -centipedal -centipede -centiplume -centipoise -centistere -centistoke -centner -cento -centonical -centonism -centrad -central -centrale -Centrales -centralism -centralist -centralistic -centrality -centralization -centralize -centralizer -centrally -centralness -centranth -Centranthus -centrarchid -Centrarchidae -centrarchoid -Centraxonia -centraxonial -Centrechinoida -centric -Centricae -centrical -centricality -centrically -centricalness -centricipital -centriciput -centricity -centriffed -centrifugal -centrifugalization -centrifugalize -centrifugaller -centrifugally -centrifugate -centrifugation -centrifuge -centrifugence -centriole -centripetal -centripetalism -centripetally -centripetence -centripetency -centriscid -Centriscidae -centrisciform -centriscoid -Centriscus -centrist -centroacinar -centrobaric -centrobarical -centroclinal -centrode -centrodesmose -centrodesmus -centrodorsal -centrodorsally -centroid -centroidal -centrolecithal -Centrolepidaceae -centrolepidaceous -centrolinead -centrolineal -centromere -centronucleus -centroplasm -Centropomidae -Centropomus -Centrosema -centrosome -centrosomic -Centrosoyus -Centrospermae -centrosphere -centrosymmetric -centrosymmetry -Centrotus -centrum -centry -centum -centumvir -centumviral -centumvirate -Centunculus -centuple -centuplicate -centuplication -centuply -centuria -centurial -centuriate -centuriation -centuriator -centuried -centurion -century -ceorl -ceorlish -cep -cepa -cepaceous -cepe -cephaeline -Cephaelis -Cephalacanthidae -Cephalacanthus -cephalad -cephalagra -cephalalgia -cephalalgic -cephalalgy -cephalanthium -cephalanthous -Cephalanthus -Cephalaspis -Cephalata -cephalate -cephaldemae -cephalemia -cephaletron -Cephaleuros -cephalhematoma -cephalhydrocele -cephalic -cephalin -Cephalina -cephaline -cephalism -cephalitis -cephalization -cephaloauricular -Cephalobranchiata -cephalobranchiate -cephalocathartic -cephalocaudal -cephalocele -cephalocentesis -cephalocercal -Cephalocereus -cephalochord -Cephalochorda -cephalochordal -Cephalochordata -cephalochordate -cephaloclasia -cephaloclast -cephalocone -cephaloconic -cephalocyst -cephalodiscid -Cephalodiscida -Cephalodiscus -cephalodymia -cephalodymus -cephalodynia -cephalofacial -cephalogenesis -cephalogram -cephalograph -cephalohumeral -cephalohumeralis -cephaloid -cephalology -cephalomancy -cephalomant -cephalomelus -cephalomenia -cephalomeningitis -cephalomere -cephalometer -cephalometric -cephalometry -cephalomotor -cephalomyitis -cephalon -cephalonasal -cephalopagus -cephalopathy -cephalopharyngeal -cephalophine -cephalophorous -Cephalophus -cephalophyma -cephaloplegia -cephaloplegic -cephalopod -Cephalopoda -cephalopodan -cephalopodic -cephalopodous -Cephalopterus -cephalorachidian -cephalorhachidian -cephalosome -cephalospinal -Cephalosporium -cephalostyle -Cephalotaceae -cephalotaceous -Cephalotaxus -cephalotheca -cephalothecal -cephalothoracic -cephalothoracopagus -cephalothorax -cephalotome -cephalotomy -cephalotractor -cephalotribe -cephalotripsy -cephalotrocha -Cephalotus -cephalous -Cephas -Cepheid -cephid -Cephidae -Cephus -Cepolidae -ceps -ceptor -cequi -ceraceous -cerago -ceral -ceramal -cerambycid -Cerambycidae -Ceramiaceae -ceramiaceous -ceramic -ceramicite -ceramics -ceramidium -ceramist -Ceramium -ceramographic -ceramography -cerargyrite -ceras -cerasein -cerasin -cerastes -Cerastium -Cerasus -cerata -cerate -ceratectomy -cerated -ceratiasis -ceratiid -Ceratiidae -ceratioid -ceration -ceratite -Ceratites -ceratitic -Ceratitidae -Ceratitis -ceratitoid -Ceratitoidea -Ceratium -Ceratobatrachinae -ceratoblast -ceratobranchial -ceratocricoid -Ceratodidae -Ceratodontidae -Ceratodus -ceratofibrous -ceratoglossal -ceratoglossus -ceratohyal -ceratohyoid -ceratoid -ceratomandibular -ceratomania -Ceratonia -Ceratophrys -Ceratophyllaceae -ceratophyllaceous -Ceratophyllum -Ceratophyta -ceratophyte -Ceratops -Ceratopsia -ceratopsian -ceratopsid -Ceratopsidae -Ceratopteridaceae -ceratopteridaceous -Ceratopteris -ceratorhine -Ceratosa -Ceratosaurus -Ceratospongiae -ceratospongian -Ceratostomataceae -Ceratostomella -ceratotheca -ceratothecal -Ceratozamia -ceraunia -ceraunics -ceraunogram -ceraunograph -ceraunomancy -ceraunophone -ceraunoscope -ceraunoscopy -Cerberean -Cerberic -Cerberus -cercal -cercaria -cercarial -cercarian -cercariform -cercelee -cerci -Cercidiphyllaceae -Cercis -Cercocebus -Cercolabes -Cercolabidae -cercomonad -Cercomonadidae -Cercomonas -cercopid -Cercopidae -cercopithecid -Cercopithecidae -cercopithecoid -Cercopithecus -cercopod -Cercospora -Cercosporella -cercus -Cerdonian -cere -cereal -cerealian -cerealin -cerealism -cerealist -cerealose -cerebella -cerebellar -cerebellifugal -cerebellipetal -cerebellocortex -cerebellopontile -cerebellopontine -cerebellorubral -cerebellospinal -cerebellum -cerebra -cerebral -cerebralgia -cerebralism -cerebralist -cerebralization -cerebralize -cerebrally -cerebrasthenia -cerebrasthenic -cerebrate -cerebration -cerebrational -Cerebratulus -cerebric -cerebricity -cerebriform -cerebriformly -cerebrifugal -cerebrin -cerebripetal -cerebritis -cerebrize -cerebrocardiac -cerebrogalactose -cerebroganglion -cerebroganglionic -cerebroid -cerebrology -cerebroma -cerebromalacia -cerebromedullary -cerebromeningeal -cerebromeningitis -cerebrometer -cerebron -cerebronic -cerebroparietal -cerebropathy -cerebropedal -cerebrophysiology -cerebropontile -cerebropsychosis -cerebrorachidian -cerebrosclerosis -cerebroscope -cerebroscopy -cerebrose -cerebrosensorial -cerebroside -cerebrosis -cerebrospinal -cerebrospinant -cerebrosuria -cerebrotomy -cerebrotonia -cerebrotonic -cerebrovisceral -cerebrum -cerecloth -cered -cereless -cerement -ceremonial -ceremonialism -ceremonialist -ceremonialize -ceremonially -ceremonious -ceremoniously -ceremoniousness -ceremony -cereous -cerer -ceresin -Cereus -cerevis -ceria -Cerialia -cerianthid -Cerianthidae -cerianthoid -Cerianthus -ceric -ceride -ceriferous -cerigerous -cerillo -ceriman -cerin -cerine -Cerinthe -Cerinthian -Ceriomyces -Cerion -Cerionidae -ceriops -Ceriornis -cerise -cerite -Cerithiidae -cerithioid -Cerithium -cerium -cermet -cern -cerniture -cernuous -cero -cerograph -cerographic -cerographist -cerography -ceroline -cerolite -ceroma -ceromancy -cerophilous -ceroplast -ceroplastic -ceroplastics -ceroplasty -cerotate -cerote -cerotene -cerotic -cerotin -cerotype -cerous -ceroxyle -Ceroxylon -cerrero -cerrial -cerris -certain -certainly -certainty -Certhia -Certhiidae -certie -certifiable -certifiableness -certifiably -certificate -certification -certificative -certificator -certificatory -certified -certifier -certify -certiorari -certiorate -certioration -certis -certitude -certosina -certosino -certy -cerule -cerulean -cerulein -ceruleite -ceruleolactite -ceruleous -cerulescent -ceruleum -cerulignol -cerulignone -cerumen -ceruminal -ceruminiferous -ceruminous -cerumniparous -ceruse -cerussite -Cervantist -cervantite -cervical -Cervicapra -cervicaprine -cervicectomy -cervicicardiac -cervicide -cerviciplex -cervicispinal -cervicitis -cervicoauricular -cervicoaxillary -cervicobasilar -cervicobrachial -cervicobregmatic -cervicobuccal -cervicodorsal -cervicodynia -cervicofacial -cervicohumeral -cervicolabial -cervicolingual -cervicolumbar -cervicomuscular -cerviconasal -cervicorn -cervicoscapular -cervicothoracic -cervicovaginal -cervicovesical -cervid -Cervidae -Cervinae -cervine -cervisia -cervisial -cervix -cervoid -cervuline -Cervulus -Cervus -ceryl -Cerynean -Cesare -cesarevitch -cesarolite -cesious -cesium -cespititous -cespitose -cespitosely -cespitulose -cess -cessantly -cessation -cessative -cessavit -cesser -cession -cessionaire -cessionary -cessor -cesspipe -cesspit -cesspool -cest -Cestida -Cestidae -Cestoda -Cestodaria -cestode -cestoid -Cestoidea -cestoidean -Cestracion -cestraciont -Cestraciontes -Cestraciontidae -Cestrian -Cestrum -cestrum -cestus -Cetacea -cetacean -cetaceous -cetaceum -cetane -Cete -cetene -ceterach -ceti -cetic -ceticide -Cetid -cetin -Cetiosauria -cetiosaurian -Cetiosaurus -cetological -cetologist -cetology -Cetomorpha -cetomorphic -Cetonia -cetonian -Cetoniides -Cetoniinae -cetorhinid -Cetorhinidae -cetorhinoid -Cetorhinus -cetotolite -Cetraria -cetraric -cetrarin -Cetus -cetyl -cetylene -cetylic -cevadilla -cevadilline -cevadine -Cevennian -Cevenol -Cevenole -cevine -cevitamic -ceylanite -Ceylon -Ceylonese -ceylonite -ceyssatite -Ceyx -Cezannesque -cha -chaa -chab -chabasie -chabazite -Chablis -chabot -chabouk -chabuk -chabutra -Chac -chacate -chachalaca -Chachapuya -chack -Chackchiuma -chacker -chackle -chackler -chacma -Chaco -chacona -chacte -chad -chadacryst -Chaenactis -Chaenolobus -Chaenomeles -chaeta -Chaetangiaceae -Chaetangium -Chaetetes -Chaetetidae -Chaetifera -chaetiferous -Chaetites -Chaetitidae -Chaetochloa -Chaetodon -chaetodont -chaetodontid -Chaetodontidae -chaetognath -Chaetognatha -chaetognathan -chaetognathous -Chaetophora -Chaetophoraceae -chaetophoraceous -Chaetophorales -chaetophorous -chaetopod -Chaetopoda -chaetopodan -chaetopodous -chaetopterin -Chaetopterus -chaetosema -Chaetosoma -Chaetosomatidae -Chaetosomidae -chaetotactic -chaetotaxy -Chaetura -chafe -chafer -chafery -chafewax -chafeweed -chaff -chaffcutter -chaffer -chafferer -chaffinch -chaffiness -chaffing -chaffingly -chaffless -chafflike -chaffman -chaffseed -chaffwax -chaffweed -chaffy -chaft -chafted -Chaga -chagan -Chagga -chagrin -chaguar -chagul -chahar -chai -Chailletiaceae -chain -chainage -chained -chainer -chainette -chainless -chainlet -chainmaker -chainmaking -chainman -chainon -chainsmith -chainwale -chainwork -chair -chairer -chairless -chairmaker -chairmaking -chairman -chairmanship -chairmender -chairmending -chairwarmer -chairwoman -chais -chaise -chaiseless -Chait -chaitya -chaja -chaka -chakar -chakari -Chakavski -chakazi -chakdar -chakobu -chakra -chakram -chakravartin -chaksi -chal -chalaco -chalana -chalastic -Chalastogastra -chalaza -chalazal -chalaze -chalazian -chalaziferous -chalazion -chalazogam -chalazogamic -chalazogamy -chalazoidite -chalcanthite -Chalcedonian -chalcedonic -chalcedonous -chalcedony -chalcedonyx -chalchuite -chalcid -Chalcidian -Chalcidic -chalcidicum -chalcidid -Chalcididae -chalcidiform -chalcidoid -Chalcidoidea -Chalcioecus -Chalcis -chalcites -chalcocite -chalcograph -chalcographer -chalcographic -chalcographical -chalcographist -chalcography -chalcolite -chalcolithic -chalcomancy -chalcomenite -chalcon -chalcone -chalcophanite -chalcophyllite -chalcopyrite -chalcosiderite -chalcosine -chalcostibite -chalcotrichite -chalcotript -chalcus -Chaldaei -Chaldaic -Chaldaical -Chaldaism -Chaldean -Chaldee -chalder -chaldron -chalet -chalice -chaliced -chalicosis -chalicothere -chalicotheriid -Chalicotheriidae -chalicotherioid -Chalicotherium -Chalina -Chalinidae -chalinine -Chalinitis -chalk -chalkcutter -chalker -chalkiness -chalklike -chalkography -chalkosideric -chalkstone -chalkstony -chalkworker -chalky -challah -challenge -challengeable -challengee -challengeful -challenger -challengingly -challie -challis -challote -chalmer -chalon -chalone -Chalons -chalque -chalta -Chalukya -Chalukyan -chalumeau -chalutz -chalutzim -Chalybean -chalybeate -chalybeous -Chalybes -chalybite -Cham -cham -Chama -Chamacea -Chamacoco -Chamaebatia -Chamaecistus -chamaecranial -Chamaecrista -Chamaecyparis -Chamaedaphne -Chamaeleo -Chamaeleon -Chamaeleontidae -Chamaelirium -Chamaenerion -Chamaepericlymenum -chamaeprosopic -Chamaerops -chamaerrhine -Chamaesaura -Chamaesiphon -Chamaesiphonaceae -Chamaesiphonaceous -Chamaesiphonales -Chamaesyce -chamal -Chamar -chamar -chamber -chamberdeacon -chambered -chamberer -chambering -chamberlain -chamberlainry -chamberlainship -chamberlet -chamberleted -chamberletted -chambermaid -Chambertin -chamberwoman -Chambioa -chambray -chambrel -chambul -chamecephalic -chamecephalous -chamecephalus -chamecephaly -chameleon -chameleonic -chameleonize -chameleonlike -chamfer -chamferer -chamfron -Chamian -Chamicuro -Chamidae -chamisal -chamiso -Chamite -chamite -Chamkanni -chamma -chamois -Chamoisette -chamoisite -chamoline -Chamomilla -Chamorro -Chamos -champ -Champa -champac -champaca -champacol -champagne -champagneless -champagnize -champaign -champain -champaka -champer -champertor -champertous -champerty -champignon -champion -championess -championize -championless -championlike -championship -Champlain -Champlainic -champleve -champy -Chanabal -Chanca -chance -chanceful -chancefully -chancefulness -chancel -chanceled -chanceless -chancellery -chancellor -chancellorate -chancelloress -chancellorism -chancellorship -chancer -chancery -chancewise -chanche -chanchito -chanco -chancre -chancriform -chancroid -chancroidal -chancrous -chancy -chandala -chandam -chandelier -Chandi -chandi -chandler -chandleress -chandlering -chandlery -chandoo -chandu -chandul -Chane -chanfrin -Chang -chang -changa -changar -change -changeability -changeable -changeableness -changeably -changedale -changedness -changeful -changefully -changefulness -changeless -changelessly -changelessness -changeling -changement -changer -Changoan -Changos -Changuina -Changuinan -Chanidae -chank -chankings -channel -channelbill -channeled -channeler -channeling -channelization -channelize -channelled -channeller -channelling -channelwards -channer -chanson -chansonnette -chanst -chant -chantable -chanter -chanterelle -chantership -chantey -chanteyman -chanticleer -chanting -chantingly -chantlate -chantress -chantry -chao -chaogenous -chaology -chaos -chaotic -chaotical -chaotically -chaoticness -Chaouia -chap -Chapacura -Chapacuran -chapah -Chapanec -chaparral -chaparro -chapatty -chapbook -chape -chapeau -chapeaux -chaped -chapel -chapeless -chapelet -chapelgoer -chapelgoing -chapellage -chapellany -chapelman -chapelmaster -chapelry -chapelward -chaperno -chaperon -chaperonage -chaperone -chaperonless -chapfallen -chapin -chapiter -chapitral -chaplain -chaplaincy -chaplainry -chaplainship -chapless -chaplet -chapleted -chapman -chapmanship -chapournet -chapournetted -chappaul -chapped -chapper -chappie -chappin -chapping -chappow -chappy -chaps -chapt -chaptalization -chaptalize -chapter -chapteral -chapterful -chapwoman -char -Chara -charabanc -charabancer -charac -Characeae -characeous -characetum -characin -characine -characinid -Characinidae -characinoid -character -characterful -characterial -characterical -characterism -characterist -characteristic -characteristical -characteristically -characteristicalness -characteristicness -characterizable -characterization -characterize -characterizer -characterless -characterlessness -characterological -characterologist -characterology -charactery -charade -Charadrii -Charadriidae -charadriiform -Charadriiformes -charadrine -charadrioid -Charadriomorphae -Charadrius -Charales -charas -charbon -Charca -charcoal -charcoaly -charcutier -chard -chardock -chare -charer -charet -charette -charge -chargeability -chargeable -chargeableness -chargeably -chargee -chargeless -chargeling -chargeman -charger -chargeship -charging -Charicleia -charier -charily -chariness -chariot -charioted -chariotee -charioteer -charioteership -chariotlike -chariotman -chariotry -chariotway -charism -charisma -charismatic -Charissa -charisticary -charitable -charitableness -charitably -Charites -charity -charityless -charivari -chark -charka -charkha -charkhana -charlady -charlatan -charlatanic -charlatanical -charlatanically -charlatanish -charlatanism -charlatanistic -charlatanry -charlatanship -Charleen -Charlene -Charles -Charleston -Charley -Charlie -charlock -Charlotte -charm -charmedly -charmel -charmer -charmful -charmfully -charmfulness -charming -charmingly -charmingness -charmless -charmlessly -charmwise -charnel -charnockite -Charon -Charonian -Charonic -Charontas -Charophyta -charpit -charpoy -charqued -charqui -charr -Charruan -Charruas -charry -charshaf -charsingha -chart -chartaceous -charter -charterable -charterage -chartered -charterer -charterhouse -Charterist -charterless -chartermaster -charthouse -charting -Chartism -Chartist -chartist -chartless -chartographist -chartology -chartometer -chartophylax -chartreuse -Chartreux -chartroom -chartula -chartulary -charuk -charwoman -chary -Charybdian -Charybdis -chasable -chase -chaseable -chaser -Chasidim -chasing -chasm -chasma -chasmal -chasmed -chasmic -chasmogamic -chasmogamous -chasmogamy -chasmophyte -chasmy -chasse -Chasselas -chassepot -chasseur -chassignite -chassis -Chastacosta -chaste -chastely -chasten -chastener -chasteness -chasteningly -chastenment -chasteweed -chastisable -chastise -chastisement -chastiser -chastity -chasuble -chasubled -chat -chataka -Chateau -chateau -chateaux -chatelain -chatelaine -chatelainry -chatellany -chathamite -chati -Chatillon -Chatino -Chatot -chatoyance -chatoyancy -chatoyant -chatsome -chatta -chattable -Chattanooga -Chattanoogan -chattation -chattel -chattelhood -chattelism -chattelization -chattelize -chattelship -chatter -chatteration -chatterbag -chatterbox -chatterer -chattering -chatteringly -chattermag -chattermagging -Chattertonian -chattery -Chatti -chattily -chattiness -chatting -chattingly -chatty -chatwood -Chaucerian -Chauceriana -Chaucerianism -Chaucerism -Chauchat -chaudron -chauffer -chauffeur -chauffeurship -Chaui -chauk -chaukidari -Chauliodes -chaulmoogra -chaulmoograte -chaulmoogric -Chauna -chaus -chausseemeile -Chautauqua -Chautauquan -chaute -chauth -chauvinism -chauvinist -chauvinistic -chauvinistically -Chavante -Chavantean -chavender -chavibetol -chavicin -chavicine -chavicol -chavish -chaw -chawan -chawbacon -chawer -Chawia -chawk -chawl -chawstick -chay -chaya -chayaroot -Chayma -Chayota -chayote -chayroot -chazan -Chazy -che -cheap -cheapen -cheapener -cheapery -cheaping -cheapish -cheaply -cheapness -Cheapside -cheat -cheatable -cheatableness -cheatee -cheater -cheatery -cheating -cheatingly -cheatrie -Chebacco -chebec -chebel -chebog -chebule -chebulinic -Chechehet -Chechen -check -checkable -checkage -checkbird -checkbite -checkbook -checked -checker -checkerbelly -checkerberry -checkerbloom -checkerboard -checkerbreast -checkered -checkerist -checkers -checkerwise -checkerwork -checkhook -checkless -checkman -checkmate -checkoff -checkrack -checkrein -checkroll -checkroom -checkrope -checkrow -checkrowed -checkrower -checkstone -checkstrap -checkstring -checkup -checkweigher -checkwork -checky -cheddaring -cheddite -cheder -chedlock -chee -cheecha -cheechako -cheek -cheekbone -cheeker -cheekily -cheekiness -cheekish -cheekless -cheekpiece -cheeky -cheep -cheeper -cheepily -cheepiness -cheepy -cheer -cheered -cheerer -cheerful -cheerfulize -cheerfully -cheerfulness -cheerfulsome -cheerily -cheeriness -cheering -cheeringly -cheerio -cheerleader -cheerless -cheerlessly -cheerlessness -cheerly -cheery -cheese -cheeseboard -cheesebox -cheeseburger -cheesecake -cheesecloth -cheesecurd -cheesecutter -cheeseflower -cheeselip -cheesemonger -cheesemongering -cheesemongerly -cheesemongery -cheeseparer -cheeseparing -cheeser -cheesery -cheesewood -cheesiness -cheesy -cheet -cheetah -cheeter -cheetie -chef -Chefrinia -chegoe -chegre -Chehalis -Cheilanthes -cheilitis -Cheilodipteridae -Cheilodipterus -Cheilostomata -cheilostomatous -cheir -cheiragra -Cheiranthus -Cheirogaleus -Cheiroglossa -cheirognomy -cheirography -cheirolin -cheirology -cheiromancy -cheiromegaly -cheiropatagium -cheiropodist -cheiropody -cheiropompholyx -Cheiroptera -cheiropterygium -cheirosophy -cheirospasm -Cheirotherium -Cheka -chekan -cheke -cheki -Chekist -chekmak -chela -chelaship -chelate -chelation -chelem -chelerythrine -chelicer -chelicera -cheliceral -chelicerate -chelicere -chelide -chelidon -chelidonate -chelidonian -chelidonic -chelidonine -Chelidonium -Chelidosaurus -Cheliferidea -cheliferous -cheliform -chelingo -cheliped -Chellean -chello -Chelodina -chelodine -chelone -Chelonia -chelonian -chelonid -Chelonidae -cheloniid -Cheloniidae -chelonin -chelophore -chelp -Cheltenham -Chelura -Chelydidae -Chelydra -Chelydridae -chelydroid -chelys -Chemakuan -chemasthenia -chemawinite -Chemehuevi -chemesthesis -chemiatric -chemiatrist -chemiatry -chemic -chemical -chemicalization -chemicalize -chemically -chemicker -chemicoastrological -chemicobiologic -chemicobiology -chemicocautery -chemicodynamic -chemicoengineering -chemicoluminescence -chemicomechanical -chemicomineralogical -chemicopharmaceutical -chemicophysical -chemicophysics -chemicophysiological -chemicovital -chemigraph -chemigraphic -chemigraphy -chemiloon -chemiluminescence -chemiotactic -chemiotaxic -chemiotaxis -chemiotropic -chemiotropism -chemiphotic -chemis -chemise -chemisette -chemism -chemisorb -chemisorption -chemist -chemistry -chemitype -chemitypy -chemoceptor -chemokinesis -chemokinetic -chemolysis -chemolytic -chemolyze -chemoreception -chemoreceptor -chemoreflex -chemoresistance -chemoserotherapy -chemosis -chemosmosis -chemosmotic -chemosynthesis -chemosynthetic -chemotactic -chemotactically -chemotaxis -chemotaxy -chemotherapeutic -chemotherapeutics -chemotherapist -chemotherapy -chemotic -chemotropic -chemotropically -chemotropism -Chemung -chemurgic -chemurgical -chemurgy -Chen -chena -chende -chenevixite -Cheney -cheng -chenica -chenille -cheniller -chenopod -Chenopodiaceae -chenopodiaceous -Chenopodiales -Chenopodium -cheoplastic -chepster -cheque -Chequers -Chera -chercock -cherem -Cheremiss -Cheremissian -cherimoya -cherish -cherishable -cherisher -cherishing -cherishingly -cherishment -Cherkess -Cherkesser -Chermes -Chermidae -Chermish -Chernomorish -chernozem -Cherokee -cheroot -cherried -cherry -cherryblossom -cherrylike -chersonese -Chersydridae -chert -cherte -cherty -cherub -cherubic -cherubical -cherubically -cherubim -cherubimic -cherubimical -cherubin -Cherusci -Chervante -chervil -chervonets -Chesapeake -Cheshire -cheson -chess -chessboard -chessdom -chessel -chesser -chessist -chessman -chessmen -chesstree -chessylite -chest -Chester -chester -chesterfield -Chesterfieldian -chesterlite -chestful -chestily -chestiness -chestnut -chestnutty -chesty -Chet -cheth -chettik -chetty -chetverik -chetvert -chevage -cheval -chevalier -chevaline -chevance -cheve -cheven -chevener -chevesaile -chevin -Cheviot -chevisance -chevise -chevon -chevrette -chevron -chevrone -chevronel -chevronelly -chevronwise -chevrony -chevrotain -chevy -chew -chewbark -chewer -chewink -chewstick -chewy -Cheyenne -cheyney -chhatri -chi -chia -Chiam -Chian -Chianti -Chiapanec -Chiapanecan -chiaroscurist -chiaroscuro -chiasm -chiasma -chiasmal -chiasmatype -chiasmatypy -chiasmic -Chiasmodon -chiasmodontid -Chiasmodontidae -chiasmus -chiastic -chiastolite -chiastoneural -chiastoneurous -chiastoneury -chiaus -Chibcha -Chibchan -chibinite -chibouk -chibrit -chic -chicane -chicaner -chicanery -chicaric -chicayote -Chicha -chichi -chichicaste -Chichimec -chichimecan -chichipate -chichipe -chichituna -chick -chickabiddy -chickadee -Chickahominy -Chickamauga -chickaree -Chickasaw -chickasaw -chickell -chicken -chickenberry -chickenbill -chickenbreasted -chickenhearted -chickenheartedly -chickenheartedness -chickenhood -chickenweed -chickenwort -chicker -chickhood -chickling -chickstone -chickweed -chickwit -chicky -chicle -chicness -Chico -chico -Chicomecoatl -chicory -chicot -chicote -chicqued -chicquer -chicquest -chicquing -chid -chidden -chide -chider -chiding -chidingly -chidingness -chidra -chief -chiefdom -chiefery -chiefess -chiefest -chiefish -chiefless -chiefling -chiefly -chiefship -chieftain -chieftaincy -chieftainess -chieftainry -chieftainship -chieftess -chield -Chien -chien -chiffer -chiffon -chiffonade -chiffonier -chiffony -chifforobe -chigetai -chiggak -chigger -chiggerweed -chignon -chignoned -chigoe -chih -chihfu -Chihuahua -chikara -chil -chilacavote -chilalgia -chilarium -chilblain -Chilcat -child -childbearing -childbed -childbirth -childcrowing -childe -childed -Childermas -childhood -childing -childish -childishly -childishness -childkind -childless -childlessness -childlike -childlikeness -childly -childness -childrenite -childridden -childship -childward -chile -Chilean -Chileanization -Chileanize -chilectropion -chilenite -chili -chiliad -chiliadal -chiliadic -chiliagon -chiliahedron -chiliarch -chiliarchia -chiliarchy -chiliasm -chiliast -chiliastic -chilicote -chilicothe -chilidium -Chilina -Chilinidae -chiliomb -Chilion -chilitis -Chilkat -chill -chilla -chillagite -chilled -chiller -chillily -chilliness -chilling -chillingly -chillish -Chilliwack -chillness -chillo -chillroom -chillsome -chillum -chillumchee -chilly -chilognath -Chilognatha -chilognathan -chilognathous -chilogrammo -chiloma -Chilomastix -chiloncus -chiloplasty -chilopod -Chilopoda -chilopodan -chilopodous -Chilopsis -Chilostoma -Chilostomata -chilostomatous -chilostome -chilotomy -Chiltern -chilver -chimaera -chimaerid -Chimaeridae -chimaeroid -Chimaeroidei -Chimakuan -Chimakum -Chimalakwe -Chimalapa -Chimane -chimango -Chimaphila -Chimarikan -Chimariko -chimble -chime -chimer -chimera -chimeric -chimerical -chimerically -chimericalness -chimesmaster -chiminage -Chimmesyan -chimney -chimneyhead -chimneyless -chimneyman -Chimonanthus -chimopeelagic -chimpanzee -Chimu -Chin -chin -china -chinaberry -chinalike -Chinaman -chinamania -chinamaniac -chinampa -chinanta -Chinantecan -Chinantecs -chinaphthol -chinar -chinaroot -Chinatown -chinaware -chinawoman -chinband -chinch -chincha -Chinchasuyu -chinchayote -chinche -chincherinchee -chinchilla -chinching -chincloth -chincough -chine -chined -Chinee -Chinese -Chinesery -ching -chingma -Chingpaw -Chinhwan -chinik -chinin -Chink -chink -chinkara -chinker -chinkerinchee -chinking -chinkle -chinks -chinky -chinless -chinnam -chinned -chinny -chino -chinoa -chinol -Chinook -Chinookan -chinotoxine -chinotti -chinpiece -chinquapin -chinse -chint -chintz -chinwood -Chiococca -chiococcine -Chiogenes -chiolite -chionablepsia -Chionanthus -Chionaspis -Chionididae -Chionis -Chionodoxa -Chiot -chiotilla -Chip -chip -chipchap -chipchop -Chipewyan -chiplet -chipling -chipmunk -chippable -chippage -chipped -Chippendale -chipper -chipping -chippy -chips -chipwood -Chiquitan -Chiquito -chiragra -chiral -chiralgia -chirality -chirapsia -chirarthritis -chirata -Chiriana -Chiricahua -Chiriguano -chirimen -Chirino -chirinola -chiripa -chirivita -chirk -chirm -chiro -chirocosmetics -chirogale -chirognomic -chirognomically -chirognomist -chirognomy -chirognostic -chirograph -chirographary -chirographer -chirographic -chirographical -chirography -chirogymnast -chirological -chirologically -chirologist -chirology -chiromance -chiromancer -chiromancist -chiromancy -chiromant -chiromantic -chiromantical -Chiromantis -chiromegaly -chirometer -Chiromyidae -Chiromys -Chiron -chironomic -chironomid -Chironomidae -Chironomus -chironomy -chironym -chiropatagium -chiroplasty -chiropod -chiropodial -chiropodic -chiropodical -chiropodist -chiropodistry -chiropodous -chiropody -chiropompholyx -chiropractic -chiropractor -chiropraxis -chiropter -Chiroptera -chiropteran -chiropterite -chiropterophilous -chiropterous -chiropterygian -chiropterygious -chiropterygium -chirosophist -chirospasm -Chirotes -chirotherian -Chirotherium -chirothesia -chirotonsor -chirotonsory -chirotony -chirotype -chirp -chirper -chirpily -chirpiness -chirping -chirpingly -chirpling -chirpy -chirr -chirrup -chirruper -chirrupy -chirurgeon -chirurgery -Chisedec -chisel -chiseled -chiseler -chisellike -chiselly -chiselmouth -chit -Chita -chitak -chital -chitchat -chitchatty -Chitimacha -Chitimachan -chitin -chitinization -chitinized -chitinocalcareous -chitinogenous -chitinoid -chitinous -chiton -chitosamine -chitosan -chitose -chitra -Chitrali -chittamwood -chitter -chitterling -chitty -chivalresque -chivalric -chivalrous -chivalrously -chivalrousness -chivalry -chive -chivey -chiviatite -Chiwere -chkalik -chladnite -chlamyd -chlamydate -chlamydeous -Chlamydobacteriaceae -chlamydobacteriaceous -Chlamydobacteriales -Chlamydomonadaceae -Chlamydomonadidae -Chlamydomonas -Chlamydosaurus -Chlamydoselachidae -Chlamydoselachus -chlamydospore -Chlamydozoa -chlamydozoan -chlamyphore -Chlamyphorus -chlamys -Chleuh -chloanthite -chloasma -Chloe -chlor -chloracetate -chloragogen -chloral -chloralformamide -chloralide -chloralism -chloralization -chloralize -chloralose -chloralum -chloramide -chloramine -chloramphenicol -chloranemia -chloranemic -chloranhydride -chloranil -Chloranthaceae -chloranthaceous -Chloranthus -chloranthy -chlorapatite -chlorastrolite -chlorate -chlorazide -chlorcosane -chlordan -chlordane -chlore -Chlorella -Chlorellaceae -chlorellaceous -chloremia -chlorenchyma -chlorhydrate -chlorhydric -chloric -chloridate -chloridation -chloride -Chloridella -Chloridellidae -chlorider -chloridize -chlorimeter -chlorimetric -chlorimetry -chlorinate -chlorination -chlorinator -chlorine -chlorinize -chlorinous -chloriodide -Chlorion -Chlorioninae -chlorite -chloritic -chloritization -chloritize -chloritoid -chlorize -chlormethane -chlormethylic -chloroacetate -chloroacetic -chloroacetone -chloroacetophenone -chloroamide -chloroamine -chloroanaemia -chloroanemia -chloroaurate -chloroauric -chloroaurite -chlorobenzene -chlorobromide -chlorocalcite -chlorocarbonate -chlorochromates -chlorochromic -chlorochrous -Chlorococcaceae -Chlorococcales -Chlorococcum -Chlorococcus -chlorocresol -chlorocruorin -chlorodize -chloroform -chloroformate -chloroformic -chloroformism -chloroformist -chloroformization -chloroformize -chlorogenic -chlorogenine -chlorohydrin -chlorohydrocarbon -chloroiodide -chloroleucite -chloroma -chloromelanite -chlorometer -chloromethane -chlorometric -chlorometry -Chloromycetin -chloronitrate -chloropal -chloropalladates -chloropalladic -chlorophane -chlorophenol -chlorophoenicite -Chlorophora -Chlorophyceae -chlorophyceous -chlorophyl -chlorophyll -chlorophyllaceous -chlorophyllan -chlorophyllase -chlorophyllian -chlorophyllide -chlorophylliferous -chlorophylligenous -chlorophylligerous -chlorophyllin -chlorophyllite -chlorophylloid -chlorophyllose -chlorophyllous -chloropia -chloropicrin -chloroplast -chloroplastic -chloroplastid -chloroplatinate -chloroplatinic -chloroplatinite -chloroplatinous -chloroprene -chloropsia -chloroquine -chlorosilicate -chlorosis -chlorospinel -chlorosulphonic -chlorotic -chlorous -chlorozincate -chlorsalol -chloryl -Chnuphis -cho -choachyte -choana -choanate -Choanephora -choanocytal -choanocyte -Choanoflagellata -choanoflagellate -Choanoflagellida -Choanoflagellidae -choanoid -choanophorous -choanosomal -choanosome -choate -choaty -chob -choca -chocard -Chocho -chocho -chock -chockablock -chocker -chockler -chockman -Choco -Chocoan -chocolate -Choctaw -choel -choenix -Choeropsis -Choes -choffer -choga -chogak -chogset -Choiak -choice -choiceful -choiceless -choicelessness -choicely -choiceness -choicy -choil -choiler -choir -choirboy -choirlike -choirman -choirmaster -choirwise -Choisya -chokage -choke -chokeberry -chokebore -chokecherry -chokedamp -choker -chokered -chokerman -chokestrap -chokeweed -chokidar -choking -chokingly -chokra -choky -Chol -chol -Chola -chola -cholagogic -cholagogue -cholalic -cholane -cholangioitis -cholangitis -cholanic -cholanthrene -cholate -chold -choleate -cholecyanine -cholecyst -cholecystalgia -cholecystectasia -cholecystectomy -cholecystenterorrhaphy -cholecystenterostomy -cholecystgastrostomy -cholecystic -cholecystitis -cholecystnephrostomy -cholecystocolostomy -cholecystocolotomy -cholecystoduodenostomy -cholecystogastrostomy -cholecystogram -cholecystography -cholecystoileostomy -cholecystojejunostomy -cholecystokinin -cholecystolithiasis -cholecystolithotripsy -cholecystonephrostomy -cholecystopexy -cholecystorrhaphy -cholecystostomy -cholecystotomy -choledoch -choledochal -choledochectomy -choledochitis -choledochoduodenostomy -choledochoenterostomy -choledocholithiasis -choledocholithotomy -choledocholithotripsy -choledochoplasty -choledochorrhaphy -choledochostomy -choledochotomy -cholehematin -choleic -choleine -choleinic -cholelith -cholelithiasis -cholelithic -cholelithotomy -cholelithotripsy -cholelithotrity -cholemia -choleokinase -cholepoietic -choler -cholera -choleraic -choleric -cholericly -cholericness -choleriform -cholerigenous -cholerine -choleroid -choleromania -cholerophobia -cholerrhagia -cholestane -cholestanol -cholesteatoma -cholesteatomatous -cholestene -cholesterate -cholesteremia -cholesteric -cholesterin -cholesterinemia -cholesterinic -cholesterinuria -cholesterol -cholesterolemia -cholesteroluria -cholesterosis -cholesteryl -choletelin -choletherapy -choleuria -choli -choliamb -choliambic -choliambist -cholic -choline -cholinergic -cholinesterase -cholinic -cholla -choller -Cholo -cholochrome -cholocyanine -Choloepus -chologenetic -choloidic -choloidinic -chololith -chololithic -Cholonan -Cholones -cholophein -cholorrhea -choloscopy -cholterheaded -cholum -choluria -Choluteca -chomp -chondral -chondralgia -chondrarsenite -chondre -chondrectomy -chondrenchyma -chondric -chondrification -chondrify -chondrigen -chondrigenous -Chondrilla -chondrin -chondrinous -chondriocont -chondriome -chondriomere -chondriomite -chondriosomal -chondriosome -chondriosphere -chondrite -chondritic -chondritis -chondroadenoma -chondroalbuminoid -chondroangioma -chondroarthritis -chondroblast -chondroblastoma -chondrocarcinoma -chondrocele -chondroclasis -chondroclast -chondrocoracoid -chondrocostal -chondrocranial -chondrocranium -chondrocyte -chondrodite -chondroditic -chondrodynia -chondrodystrophia -chondrodystrophy -chondroendothelioma -chondroepiphysis -chondrofetal -chondrofibroma -chondrofibromatous -Chondroganoidei -chondrogen -chondrogenesis -chondrogenetic -chondrogenous -chondrogeny -chondroglossal -chondroglossus -chondrography -chondroid -chondroitic -chondroitin -chondrolipoma -chondrology -chondroma -chondromalacia -chondromatous -chondromucoid -Chondromyces -chondromyoma -chondromyxoma -chondromyxosarcoma -chondropharyngeal -chondropharyngeus -chondrophore -chondrophyte -chondroplast -chondroplastic -chondroplasty -chondroprotein -chondropterygian -Chondropterygii -chondropterygious -chondrosamine -chondrosarcoma -chondrosarcomatous -chondroseptum -chondrosin -chondrosis -chondroskeleton -chondrostean -Chondrostei -chondrosteoma -chondrosteous -chondrosternal -chondrotome -chondrotomy -chondroxiphoid -chondrule -chondrus -chonolith -chonta -Chontal -Chontalan -Chontaquiro -chontawood -choop -choosable -choosableness -choose -chooser -choosing -choosingly -choosy -chop -chopa -chopboat -chopfallen -chophouse -chopin -chopine -choplogic -chopped -chopper -choppered -chopping -choppy -chopstick -Chopunnish -Chora -choragic -choragion -choragium -choragus -choragy -Chorai -choral -choralcelo -choraleon -choralist -chorally -Chorasmian -chord -chorda -Chordaceae -chordacentrous -chordacentrum -chordaceous -chordal -chordally -chordamesoderm -Chordata -chordate -chorded -Chordeiles -chorditis -chordoid -chordomesoderm -chordotomy -chordotonal -chore -chorea -choreal -choreatic -choree -choregic -choregus -choregy -choreic -choreiform -choreograph -choreographer -choreographic -choreographical -choreography -choreoid -choreomania -chorepiscopal -chorepiscopus -choreus -choreutic -chorial -choriamb -choriambic -choriambize -choriambus -choric -chorine -chorioadenoma -chorioallantoic -chorioallantoid -chorioallantois -choriocapillaris -choriocapillary -choriocarcinoma -choriocele -chorioepithelioma -chorioid -chorioidal -chorioiditis -chorioidocyclitis -chorioidoiritis -chorioidoretinitis -chorioma -chorion -chorionepithelioma -chorionic -Chorioptes -chorioptic -chorioretinal -chorioretinitis -Choripetalae -choripetalous -choriphyllous -chorisepalous -chorisis -chorism -chorist -choristate -chorister -choristership -choristic -choristoblastoma -choristoma -choristry -chorization -chorizont -chorizontal -chorizontes -chorizontic -chorizontist -chorogi -chorograph -chorographer -chorographic -chorographical -chorographically -chorography -choroid -choroidal -choroidea -choroiditis -choroidocyclitis -choroidoiritis -choroidoretinitis -chorological -chorologist -chorology -choromania -choromanic -chorometry -chorook -Chorotega -Choroti -chort -chorten -Chorti -chortle -chortler -chortosterol -chorus -choruser -choruslike -Chorwat -choryos -chose -chosen -chott -Chou -Chouan -Chouanize -chouette -chough -chouka -choultry -choup -chouquette -chous -chouse -chouser -chousingha -chow -Chowanoc -chowchow -chowder -chowderhead -chowderheaded -chowk -chowry -choya -choyroot -Chozar -chrematheism -chrematist -chrematistic -chrematistics -chreotechnics -chresmology -chrestomathic -chrestomathics -chrestomathy -chria -chrimsel -Chris -chrism -chrisma -chrismal -chrismary -chrismatine -chrismation -chrismatite -chrismatize -chrismatory -chrismon -chrisom -chrisomloosing -chrisroot -Chrissie -Christ -Christabel -Christadelphian -Christadelphianism -christcross -Christdom -Christed -christen -Christendie -Christendom -christened -christener -christening -Christenmas -Christhood -Christiad -Christian -Christiana -Christiania -Christianiadeal -Christianism -christianite -Christianity -Christianization -Christianize -Christianizer -Christianlike -Christianly -Christianness -Christianogentilism -Christianography -Christianomastix -Christianopaganism -Christicide -Christie -Christiform -Christina -Christine -Christless -Christlessness -Christlike -Christlikeness -Christliness -Christly -Christmas -Christmasberry -Christmasing -Christmastide -Christmasy -Christocentric -Christofer -Christogram -Christolatry -Christological -Christologist -Christology -Christophany -Christophe -Christopher -Christos -chroatol -Chrobat -chroma -chromaffin -chromaffinic -chromammine -chromaphil -chromaphore -chromascope -chromate -chromatic -chromatical -chromatically -chromatician -chromaticism -chromaticity -chromatics -chromatid -chromatin -chromatinic -Chromatioideae -chromatism -chromatist -Chromatium -chromatize -chromatocyte -chromatodysopia -chromatogenous -chromatogram -chromatograph -chromatographic -chromatography -chromatoid -chromatology -chromatolysis -chromatolytic -chromatometer -chromatone -chromatopathia -chromatopathic -chromatopathy -chromatophil -chromatophile -chromatophilia -chromatophilic -chromatophilous -chromatophobia -chromatophore -chromatophoric -chromatophorous -chromatoplasm -chromatopsia -chromatoptometer -chromatoptometry -chromatoscope -chromatoscopy -chromatosis -chromatosphere -chromatospheric -chromatrope -chromaturia -chromatype -chromazurine -chromdiagnosis -chrome -chromene -chromesthesia -chromic -chromicize -chromid -Chromidae -Chromides -chromidial -Chromididae -chromidiogamy -chromidiosome -chromidium -chromidrosis -chromiferous -chromiole -chromism -chromite -chromitite -chromium -chromo -Chromobacterieae -Chromobacterium -chromoblast -chromocenter -chromocentral -chromochalcographic -chromochalcography -chromocollograph -chromocollographic -chromocollography -chromocollotype -chromocollotypy -chromocratic -chromocyte -chromocytometer -chromodermatosis -chromodiascope -chromogen -chromogene -chromogenesis -chromogenetic -chromogenic -chromogenous -chromogram -chromograph -chromoisomer -chromoisomeric -chromoisomerism -chromoleucite -chromolipoid -chromolith -chromolithic -chromolithograph -chromolithographer -chromolithographic -chromolithography -chromolysis -chromomere -chromometer -chromone -chromonema -chromoparous -chromophage -chromophane -chromophile -chromophilic -chromophilous -chromophobic -chromophore -chromophoric -chromophorous -chromophotograph -chromophotographic -chromophotography -chromophotolithograph -chromophyll -chromoplasm -chromoplasmic -chromoplast -chromoplastid -chromoprotein -chromopsia -chromoptometer -chromoptometrical -chromosantonin -chromoscope -chromoscopic -chromoscopy -chromosomal -chromosome -chromosphere -chromospheric -chromotherapist -chromotherapy -chromotrope -chromotropic -chromotropism -chromotropy -chromotype -chromotypic -chromotypographic -chromotypography -chromotypy -chromous -chromoxylograph -chromoxylography -chromule -chromy -chromyl -chronal -chronanagram -chronaxia -chronaxie -chronaxy -chronic -chronical -chronically -chronicity -chronicle -chronicler -chronicon -chronisotherm -chronist -chronobarometer -chronocinematography -chronocrator -chronocyclegraph -chronodeik -chronogeneous -chronogenesis -chronogenetic -chronogram -chronogrammatic -chronogrammatical -chronogrammatically -chronogrammatist -chronogrammic -chronograph -chronographer -chronographic -chronographical -chronographically -chronography -chronoisothermal -chronologer -chronologic -chronological -chronologically -chronologist -chronologize -chronology -chronomancy -chronomantic -chronometer -chronometric -chronometrical -chronometrically -chronometry -chrononomy -chronopher -chronophotograph -chronophotographic -chronophotography -Chronos -chronoscope -chronoscopic -chronoscopically -chronoscopy -chronosemic -chronostichon -chronothermal -chronothermometer -chronotropic -chronotropism -Chroococcaceae -chroococcaceous -Chroococcales -chroococcoid -Chroococcus -Chrosperma -chrotta -chrysal -chrysalid -chrysalidal -chrysalides -chrysalidian -chrysaline -chrysalis -chrysaloid -chrysamine -chrysammic -chrysamminic -Chrysamphora -chrysaniline -chrysanisic -chrysanthemin -chrysanthemum -chrysanthous -Chrysaor -chrysarobin -chrysatropic -chrysazin -chrysazol -chryselectrum -chryselephantine -Chrysemys -chrysene -chrysenic -chrysid -Chrysidella -chrysidid -Chrysididae -chrysin -Chrysippus -Chrysis -chrysoaristocracy -Chrysobalanaceae -Chrysobalanus -chrysoberyl -chrysobull -chrysocarpous -chrysochlore -Chrysochloridae -Chrysochloris -chrysochlorous -chrysochrous -chrysocolla -chrysocracy -chrysoeriol -chrysogen -chrysograph -chrysographer -chrysography -chrysohermidin -chrysoidine -chrysolite -chrysolitic -chrysology -Chrysolophus -chrysomelid -Chrysomelidae -chrysomonad -Chrysomonadales -Chrysomonadina -chrysomonadine -Chrysomyia -Chrysopa -chrysopal -chrysopee -chrysophan -chrysophanic -Chrysophanus -chrysophenine -chrysophilist -chrysophilite -Chrysophlyctis -chrysophyll -Chrysophyllum -chrysopid -Chrysopidae -chrysopoeia -chrysopoetic -chrysopoetics -chrysoprase -Chrysops -Chrysopsis -chrysorin -chrysosperm -Chrysosplenium -Chrysothamnus -Chrysothrix -chrysotile -Chrysotis -chrystocrene -chthonian -chthonic -chthonophagia -chthonophagy -chub -chubbed -chubbedness -chubbily -chubbiness -chubby -Chuchona -Chuck -chuck -chucker -chuckhole -chuckies -chucking -chuckingly -chuckle -chucklehead -chuckleheaded -chuckler -chucklingly -chuckrum -chuckstone -chuckwalla -chucky -Chud -chuddar -Chude -Chudic -Chueta -chufa -chuff -chuffy -chug -chugger -chuhra -Chuje -chukar -Chukchi -chukker -chukor -chulan -chullpa -chum -Chumashan -Chumawi -chummage -chummer -chummery -chummily -chummy -chump -chumpaka -chumpish -chumpishness -Chumpivilca -chumpy -chumship -Chumulu -Chun -chun -chunari -Chuncho -chunga -chunk -chunkhead -chunkily -chunkiness -chunky -chunner -chunnia -chunter -chupak -chupon -chuprassie -chuprassy -church -churchanity -churchcraft -churchdom -churchful -churchgoer -churchgoing -churchgrith -churchianity -churchified -churchiness -churching -churchish -churchism -churchite -churchless -churchlet -churchlike -churchliness -churchly -churchman -churchmanly -churchmanship -churchmaster -churchscot -churchward -churchwarden -churchwardenism -churchwardenize -churchwardenship -churchwards -churchway -churchwise -churchwoman -churchy -churchyard -churel -churinga -churl -churled -churlhood -churlish -churlishly -churlishness -churly -churm -churn -churnability -churnful -churning -churnmilk -churnstaff -Churoya -Churoyan -churr -Churrigueresque -churruck -churrus -churrworm -chut -chute -chuter -chutney -Chuvash -Chwana -chyack -chyak -chylaceous -chylangioma -chylaqueous -chyle -chylemia -chylidrosis -chylifaction -chylifactive -chylifactory -chyliferous -chylific -chylification -chylificatory -chyliform -chylify -chylocaulous -chylocauly -chylocele -chylocyst -chyloid -chylomicron -chylopericardium -chylophyllous -chylophylly -chylopoiesis -chylopoietic -chylosis -chylothorax -chylous -chyluria -chymaqueous -chymase -chyme -chymia -chymic -chymiferous -chymification -chymify -chymosin -chymosinogen -chymotrypsin -chymotrypsinogen -chymous -chypre -chytra -chytrid -Chytridiaceae -chytridiaceous -chytridial -Chytridiales -chytridiose -chytridiosis -Chytridium -Chytroi -cibarial -cibarian -cibarious -cibation -cibol -Cibola -Cibolan -Ciboney -cibophobia -ciborium -cibory -ciboule -cicad -cicada -Cicadellidae -cicadid -Cicadidae -cicala -cicatrice -cicatrices -cicatricial -cicatricle -cicatricose -cicatricula -cicatricule -cicatrisive -cicatrix -cicatrizant -cicatrizate -cicatrization -cicatrize -cicatrizer -cicatrose -Cicely -cicely -cicer -ciceronage -cicerone -ciceroni -Ciceronian -Ciceronianism -Ciceronianize -Ciceronic -Ciceronically -ciceronism -ciceronize -cichlid -Cichlidae -cichloid -cichoraceous -Cichoriaceae -cichoriaceous -Cichorium -Cicindela -cicindelid -cicindelidae -cicisbeism -ciclatoun -Ciconia -Ciconiae -ciconian -ciconiid -Ciconiidae -ciconiiform -Ciconiiformes -ciconine -ciconioid -Cicuta -cicutoxin -Cid -cidarid -Cidaridae -cidaris -Cidaroida -cider -ciderish -ciderist -ciderkin -cig -cigala -cigar -cigaresque -cigarette -cigarfish -cigarillo -cigarito -cigarless -cigua -ciguatera -cilectomy -cilia -ciliary -Ciliata -ciliate -ciliated -ciliately -ciliation -cilice -Cilician -cilicious -Cilicism -ciliella -ciliferous -ciliform -ciliiferous -ciliiform -Cilioflagellata -cilioflagellate -ciliograde -ciliolate -ciliolum -Ciliophora -cilioretinal -cilioscleral -ciliospinal -ciliotomy -cilium -cillosis -cimbia -Cimbri -Cimbrian -Cimbric -cimelia -cimex -cimicid -Cimicidae -cimicide -cimiciform -Cimicifuga -cimicifugin -cimicoid -ciminite -cimline -Cimmeria -Cimmerian -Cimmerianism -cimolite -cinch -cincher -cincholoipon -cincholoiponic -cinchomeronic -Cinchona -Cinchonaceae -cinchonaceous -cinchonamine -cinchonate -cinchonia -cinchonic -cinchonicine -cinchonidia -cinchonidine -cinchonine -cinchoninic -cinchonism -cinchonization -cinchonize -cinchonology -cinchophen -cinchotine -cinchotoxine -cincinnal -Cincinnati -Cincinnatia -Cincinnatian -cincinnus -Cinclidae -Cinclidotus -cinclis -Cinclus -cinct -cincture -cinder -Cinderella -cinderlike -cinderman -cinderous -cindery -Cindie -Cindy -cine -cinecamera -cinefilm -cinel -cinema -Cinemascope -cinematic -cinematical -cinematically -cinematize -cinematograph -cinematographer -cinematographic -cinematographical -cinematographically -cinematographist -cinematography -cinemelodrama -cinemize -cinemograph -cinenchyma -cinenchymatous -cinene -cinenegative -cineole -cineolic -cinephone -cinephotomicrography -cineplastics -cineplasty -cineraceous -Cinerama -Cineraria -cinerarium -cinerary -cineration -cinerator -cinerea -cinereal -cinereous -cineritious -cinevariety -cingle -cingular -cingulate -cingulated -cingulum -cinnabar -cinnabaric -cinnabarine -cinnamal -cinnamaldehyde -cinnamate -cinnamein -cinnamene -cinnamenyl -cinnamic -Cinnamodendron -cinnamol -cinnamomic -Cinnamomum -cinnamon -cinnamoned -cinnamonic -cinnamonlike -cinnamonroot -cinnamonwood -cinnamyl -cinnamylidene -cinnoline -cinnyl -cinquain -cinque -cinquecentism -cinquecentist -cinquecento -cinquefoil -cinquefoiled -cinquepace -cinter -Cinura -cinuran -cinurous -cion -cionectomy -cionitis -cionocranial -cionocranian -cionoptosis -cionorrhaphia -cionotome -cionotomy -Cipango -cipher -cipherable -cipherdom -cipherer -cipherhood -cipo -cipolin -cippus -circa -Circaea -Circaeaceae -Circaetus -Circassian -Circassic -Circe -Circean -Circensian -circinal -circinate -circinately -circination -Circinus -circiter -circle -circled -circler -circlet -circlewise -circling -circovarian -circuit -circuitable -circuital -circuiteer -circuiter -circuition -circuitman -circuitor -circuitous -circuitously -circuitousness -circuity -circulable -circulant -circular -circularism -circularity -circularization -circularize -circularizer -circularly -circularness -circularwise -circulate -circulation -circulative -circulator -circulatory -circumagitate -circumagitation -circumambages -circumambagious -circumambience -circumambiency -circumambient -circumambulate -circumambulation -circumambulator -circumambulatory -circumanal -circumantarctic -circumarctic -circumarticular -circumaviate -circumaviation -circumaviator -circumaxial -circumaxile -circumaxillary -circumbasal -circumbendibus -circumboreal -circumbuccal -circumbulbar -circumcallosal -Circumcellion -circumcenter -circumcentral -circumcinct -circumcincture -circumcircle -circumcise -circumciser -circumcision -circumclude -circumclusion -circumcolumnar -circumcone -circumconic -circumcorneal -circumcrescence -circumcrescent -circumdenudation -circumdiction -circumduce -circumduct -circumduction -circumesophagal -circumesophageal -circumference -circumferential -circumferentially -circumferentor -circumflant -circumflect -circumflex -circumflexion -circumfluence -circumfluent -circumfluous -circumforaneous -circumfulgent -circumfuse -circumfusile -circumfusion -circumgenital -circumgyrate -circumgyration -circumgyratory -circumhorizontal -circumincession -circuminsession -circuminsular -circumintestinal -circumitineration -circumjacence -circumjacency -circumjacent -circumlental -circumlitio -circumlittoral -circumlocute -circumlocution -circumlocutional -circumlocutionary -circumlocutionist -circumlocutory -circummeridian -circummeridional -circummigration -circummundane -circummure -circumnatant -circumnavigable -circumnavigate -circumnavigation -circumnavigator -circumnavigatory -circumneutral -circumnuclear -circumnutate -circumnutation -circumnutatory -circumocular -circumoesophagal -circumoral -circumorbital -circumpacific -circumpallial -circumparallelogram -circumpentagon -circumplicate -circumplication -circumpolar -circumpolygon -circumpose -circumposition -circumradius -circumrenal -circumrotate -circumrotation -circumrotatory -circumsail -circumscissile -circumscribable -circumscribe -circumscribed -circumscriber -circumscript -circumscription -circumscriptive -circumscriptively -circumscriptly -circumsinous -circumspangle -circumspatial -circumspect -circumspection -circumspective -circumspectively -circumspectly -circumspectness -circumspheral -circumstance -circumstanced -circumstantiability -circumstantiable -circumstantial -circumstantiality -circumstantially -circumstantialness -circumstantiate -circumstantiation -circumtabular -circumterraneous -circumterrestrial -circumtonsillar -circumtropical -circumumbilical -circumundulate -circumundulation -circumvallate -circumvallation -circumvascular -circumvent -circumventer -circumvention -circumventive -circumventor -circumviate -circumvolant -circumvolute -circumvolution -circumvolutory -circumvolve -circumzenithal -circus -circusy -cirque -cirrate -cirrated -Cirratulidae -Cirratulus -Cirrhopetalum -cirrhosed -cirrhosis -cirrhotic -cirrhous -cirri -cirribranch -cirriferous -cirriform -cirrigerous -cirrigrade -cirriped -Cirripedia -cirripedial -cirrolite -cirropodous -cirrose -Cirrostomi -cirrous -cirrus -cirsectomy -Cirsium -cirsocele -cirsoid -cirsomphalos -cirsophthalmia -cirsotome -cirsotomy -ciruela -cirurgian -Cisalpine -cisalpine -Cisalpinism -cisandine -cisatlantic -cisco -cise -cisele -cisgangetic -cisjurane -cisleithan -cismarine -Cismontane -cismontane -Cismontanism -cisoceanic -cispadane -cisplatine -cispontine -cisrhenane -Cissampelos -cissing -cissoid -cissoidal -Cissus -cist -cista -Cistaceae -cistaceous -cistae -cisted -Cistercian -Cistercianism -cistern -cisterna -cisternal -cistic -cistophoric -cistophorus -Cistudo -Cistus -cistvaen -cit -citable -citadel -citation -citator -citatory -cite -citee -Citellus -citer -citess -cithara -Citharexylum -citharist -citharista -citharoedi -citharoedic -citharoedus -cither -citied -citification -citified -citify -Citigradae -citigrade -citizen -citizendom -citizeness -citizenhood -citizenish -citizenism -citizenize -citizenly -citizenry -citizenship -citole -citraconate -citraconic -citral -citramide -citramontane -citrange -citrangeade -citrate -citrated -citrean -citrene -citreous -citric -citriculture -citriculturist -citril -citrin -citrination -citrine -citrinin -citrinous -citrometer -Citromyces -citron -citronade -citronella -citronellal -citronelle -citronellic -citronellol -citronin -citronwood -Citropsis -citropten -citrous -citrullin -Citrullus -Citrus -citrus -citrylidene -cittern -citua -city -citycism -citydom -cityfolk -cityful -cityish -cityless -cityness -cityscape -cityward -citywards -cive -civet -civetlike -civetone -civic -civically -civicism -civics -civil -civilian -civility -civilizable -civilization -civilizational -civilizatory -civilize -civilized -civilizedness -civilizee -civilizer -civilly -civilness -civism -Civitan -civvy -cixiid -Cixiidae -Cixo -clabber -clabbery -clachan -clack -Clackama -clackdish -clacker -clacket -clackety -clad -cladanthous -cladautoicous -cladding -cladine -cladocarpous -Cladocera -cladoceran -cladocerous -cladode -cladodial -cladodont -cladodontid -Cladodontidae -Cladodus -cladogenous -Cladonia -Cladoniaceae -cladoniaceous -cladonioid -Cladophora -Cladophoraceae -cladophoraceous -Cladophorales -cladophyll -cladophyllum -cladoptosis -cladose -Cladoselache -Cladoselachea -cladoselachian -Cladoselachidae -cladosiphonic -Cladosporium -Cladothrix -Cladrastis -cladus -clag -claggum -claggy -Claiborne -Claibornian -claim -claimable -claimant -claimer -claimless -clairaudience -clairaudient -clairaudiently -clairce -Claire -clairecole -clairecolle -clairschach -clairschacher -clairsentience -clairsentient -clairvoyance -clairvoyancy -clairvoyant -clairvoyantly -claith -claithes -claiver -Clallam -clam -clamant -clamantly -clamative -Clamatores -clamatorial -clamatory -clamb -clambake -clamber -clamberer -clamcracker -clame -clamer -clammed -clammer -clammily -clamminess -clamming -clammish -clammy -clammyweed -clamor -clamorer -clamorist -clamorous -clamorously -clamorousness -clamorsome -clamp -clamper -clamshell -clamworm -clan -clancular -clancularly -clandestine -clandestinely -clandestineness -clandestinity -clanfellow -clang -clangful -clangingly -clangor -clangorous -clangorously -Clangula -clanjamfray -clanjamfrey -clanjamfrie -clanjamphrey -clank -clankety -clanking -clankingly -clankingness -clankless -clanless -clanned -clanning -clannishly -clannishness -clansfolk -clanship -clansman -clansmanship -clanswoman -Claosaurus -clap -clapboard -clapbread -clapmatch -clapnet -clapped -clapper -clapperclaw -clapperclawer -clapperdudgeon -clappermaclaw -clapping -clapt -claptrap -clapwort -claque -claquer -Clara -clarabella -clarain -Clare -Clarence -Clarenceux -Clarenceuxship -Clarencieux -clarendon -claret -Claretian -Claribel -claribella -Clarice -clarifiant -clarification -clarifier -clarify -clarigation -clarin -Clarinda -clarinet -clarinetist -clarinettist -clarion -clarionet -Clarissa -Clarisse -Clarist -clarity -Clark -clark -clarkeite -Clarkia -claro -Claromontane -clarshech -clart -clarty -clary -clash -clasher -clashingly -clashy -clasmatocyte -clasmatosis -clasp -clasper -clasping -claspt -class -classable -classbook -classed -classer -classes -classfellow -classic -classical -classicalism -classicalist -classicality -classicalize -classically -classicalness -classicism -classicist -classicistic -classicize -classicolatry -classifiable -classific -classifically -classification -classificational -classificator -classificatory -classified -classifier -classis -classism -classman -classmanship -classmate -classroom -classwise -classwork -classy -clastic -clat -clatch -Clathraceae -clathraceous -Clathraria -clathrarian -clathrate -Clathrina -Clathrinidae -clathroid -clathrose -clathrulate -Clathrus -Clatsop -clatter -clatterer -clatteringly -clattertrap -clattery -clatty -Claude -claudent -claudetite -Claudia -Claudian -claudicant -claudicate -claudication -Claudio -Claudius -claught -clausal -clause -Clausilia -Clausiliidae -clausthalite -claustra -claustral -claustration -claustrophobia -claustrum -clausula -clausular -clausule -clausure -claut -clava -clavacin -claval -Clavaria -Clavariaceae -clavariaceous -clavate -clavated -clavately -clavation -clave -clavecin -clavecinist -clavel -clavelization -clavelize -clavellate -clavellated -claver -clavial -claviature -clavicembalo -Claviceps -clavichord -clavichordist -clavicithern -clavicle -clavicorn -clavicornate -Clavicornes -Clavicornia -clavicotomy -clavicular -clavicularium -claviculate -claviculus -clavicylinder -clavicymbal -clavicytherium -clavier -clavierist -claviform -claviger -clavigerous -claviharp -clavilux -claviol -clavipectoral -clavis -clavodeltoid -clavodeltoideus -clavola -clavolae -clavolet -clavus -clavy -claw -clawed -clawer -clawk -clawker -clawless -Clay -clay -claybank -claybrained -clayen -clayer -clayey -clayiness -clayish -claylike -clayman -claymore -Clayoquot -claypan -Clayton -Claytonia -clayware -clayweed -cleach -clead -cleaded -cleading -cleam -cleamer -clean -cleanable -cleaner -cleanhanded -cleanhandedness -cleanhearted -cleaning -cleanish -cleanlily -cleanliness -cleanly -cleanness -cleanout -cleansable -cleanse -cleanser -cleansing -cleanskins -cleanup -clear -clearable -clearage -clearance -clearcole -clearedness -clearer -clearheaded -clearheadedly -clearheadedness -clearhearted -clearing -clearinghouse -clearish -clearly -clearness -clearskins -clearstarch -clearweed -clearwing -cleat -cleavability -cleavable -cleavage -cleave -cleaveful -cleavelandite -cleaver -cleavers -cleaverwort -cleaving -cleavingly -cleche -cleck -cled -cledge -cledgy -cledonism -clee -cleek -cleeked -cleeky -clef -cleft -clefted -cleg -cleidagra -cleidarthritis -cleidocostal -cleidocranial -cleidohyoid -cleidomancy -cleidomastoid -cleidorrhexis -cleidoscapular -cleidosternal -cleidotomy -cleidotripsy -cleistocarp -cleistocarpous -cleistogamic -cleistogamically -cleistogamous -cleistogamously -cleistogamy -cleistogene -cleistogenous -cleistogeny -cleistothecium -Cleistothecopsis -cleithral -cleithrum -Clem -clem -Clematis -clematite -Clemclemalats -clemence -clemency -Clement -clement -Clementina -Clementine -clemently -clench -cleoid -Cleome -Cleopatra -clep -Clepsine -clepsydra -cleptobiosis -cleptobiotic -clerestoried -clerestory -clergy -clergyable -clergylike -clergyman -clergywoman -cleric -clerical -clericalism -clericalist -clericality -clericalize -clerically -clericate -clericature -clericism -clericity -clerid -Cleridae -clerihew -clerisy -clerk -clerkage -clerkdom -clerkery -clerkess -clerkhood -clerking -clerkish -clerkless -clerklike -clerkliness -clerkly -clerkship -Clerodendron -cleromancy -cleronomy -cleruch -cleruchial -cleruchic -cleruchy -Clerus -cletch -Clethra -Clethraceae -clethraceous -cleuch -cleve -cleveite -clever -cleverality -cleverish -cleverishly -cleverly -cleverness -clevis -clew -cliack -clianthus -cliche -click -clicker -clicket -clickless -clicky -Clidastes -cliency -client -clientage -cliental -cliented -clientelage -clientele -clientless -clientry -clientship -Cliff -cliff -cliffed -cliffless -clifflet -clifflike -Clifford -cliffside -cliffsman -cliffweed -cliffy -clift -Cliftonia -cliftonite -clifty -clima -Climaciaceae -climaciaceous -Climacium -climacteric -climacterical -climacterically -climactic -climactical -climactically -climacus -climata -climatal -climate -climath -climatic -climatical -climatically -Climatius -climatize -climatographical -climatography -climatologic -climatological -climatologically -climatologist -climatology -climatometer -climatotherapeutics -climatotherapy -climature -climax -climb -climbable -climber -climbing -clime -climograph -clinal -clinamen -clinamina -clinandria -clinandrium -clinanthia -clinanthium -clinch -clincher -clinchingly -clinchingness -cline -cling -clinger -clingfish -clinging -clingingly -clingingness -clingstone -clingy -clinia -clinic -clinical -clinically -clinician -clinicist -clinicopathological -clinium -clink -clinker -clinkerer -clinkery -clinking -clinkstone -clinkum -clinoaxis -clinocephalic -clinocephalism -clinocephalous -clinocephalus -clinocephaly -clinochlore -clinoclase -clinoclasite -clinodiagonal -clinodomatic -clinodome -clinograph -clinographic -clinohedral -clinohedrite -clinohumite -clinoid -clinologic -clinology -clinometer -clinometric -clinometrical -clinometry -clinopinacoid -clinopinacoidal -Clinopodium -clinoprism -clinopyramid -clinopyroxene -clinorhombic -clinospore -clinostat -clinquant -clint -clinting -Clinton -Clintonia -clintonite -clinty -Clio -Cliona -Clione -clip -clipei -clipeus -clippable -clipped -clipper -clipperman -clipping -clips -clipse -clipsheet -clipsome -clipt -clique -cliquedom -cliqueless -cliquish -cliquishly -cliquishness -cliquism -cliquy -cliseometer -clisere -clishmaclaver -Clisiocampa -Clistogastra -clit -clitch -clite -clitella -clitellar -clitelliferous -clitelline -clitellum -clitellus -clites -clithe -clithral -clithridiate -clitia -clition -Clitocybe -Clitoria -clitoridauxe -clitoridean -clitoridectomy -clitoriditis -clitoridotomy -clitoris -clitorism -clitoritis -clitter -clitterclatter -clival -clive -clivers -Clivia -clivis -clivus -cloaca -cloacal -cloacaline -cloacean -cloacinal -cloacinean -cloacitis -cloak -cloakage -cloaked -cloakedly -cloaking -cloakless -cloaklet -cloakmaker -cloakmaking -cloakroom -cloakwise -cloam -cloamen -cloamer -clobber -clobberer -clochan -cloche -clocher -clochette -clock -clockbird -clockcase -clocked -clocker -clockface -clockhouse -clockkeeper -clockless -clocklike -clockmaker -clockmaking -clockmutch -clockroom -clocksmith -clockwise -clockwork -clod -clodbreaker -clodder -cloddily -cloddiness -cloddish -cloddishly -cloddishness -cloddy -clodhead -clodhopper -clodhopping -clodlet -clodpate -clodpated -clodpoll -cloff -clog -clogdogdo -clogger -cloggily -clogginess -cloggy -cloghad -cloglike -clogmaker -clogmaking -clogwood -clogwyn -cloiochoanitic -cloisonless -cloisonne -cloister -cloisteral -cloistered -cloisterer -cloisterless -cloisterlike -cloisterliness -cloisterly -cloisterwise -cloistral -cloistress -cloit -clomb -clomben -clonal -clone -clonic -clonicity -clonicotonic -clonism -clonorchiasis -Clonorchis -Clonothrix -clonus -cloof -cloop -cloot -clootie -clop -cloragen -clorargyrite -cloriodid -closable -close -closecross -closed -closefisted -closefistedly -closefistedness -closehanded -closehearted -closely -closemouth -closemouthed -closen -closeness -closer -closestool -closet -closewing -closh -closish -closter -Closterium -clostridial -Clostridium -closure -clot -clotbur -clote -cloth -clothbound -clothe -clothes -clothesbag -clothesbasket -clothesbrush -clotheshorse -clothesline -clothesman -clothesmonger -clothespin -clothespress -clothesyard -clothier -clothify -Clothilda -clothing -clothmaker -clothmaking -Clotho -clothworker -clothy -clottage -clottedness -clotter -clotty -cloture -clotweed -cloud -cloudage -cloudberry -cloudburst -cloudcap -clouded -cloudful -cloudily -cloudiness -clouding -cloudland -cloudless -cloudlessly -cloudlessness -cloudlet -cloudlike -cloudling -cloudology -cloudscape -cloudship -cloudward -cloudwards -cloudy -clough -clour -clout -clouted -clouter -clouterly -clouty -clove -cloven -clovene -clover -clovered -cloverlay -cloverleaf -cloveroot -cloverroot -clovery -clow -clown -clownade -clownage -clownery -clownheal -clownish -clownishly -clownishness -clownship -clowring -cloy -cloyedness -cloyer -cloying -cloyingly -cloyingness -cloyless -cloysome -club -clubbability -clubbable -clubbed -clubber -clubbily -clubbing -clubbish -clubbism -clubbist -clubby -clubdom -clubfellow -clubfisted -clubfoot -clubfooted -clubhand -clubhaul -clubhouse -clubionid -Clubionidae -clubland -clubman -clubmate -clubmobile -clubmonger -clubridden -clubroom -clubroot -clubstart -clubster -clubweed -clubwoman -clubwood -cluck -clue -cluff -clump -clumpish -clumproot -clumpy -clumse -clumsily -clumsiness -clumsy -clunch -clung -Cluniac -Cluniacensian -Clunisian -Clunist -clunk -clupanodonic -Clupea -clupeid -Clupeidae -clupeiform -clupeine -Clupeodei -clupeoid -cluricaune -Clusia -Clusiaceae -clusiaceous -cluster -clusterberry -clustered -clusterfist -clustering -clusteringly -clustery -clutch -clutchman -cluther -clutter -clutterer -clutterment -cluttery -cly -Clyde -Clydesdale -Clydeside -Clydesider -clyer -clyfaker -clyfaking -Clymenia -clype -clypeal -Clypeaster -Clypeastridea -Clypeastrina -clypeastroid -Clypeastroida -Clypeastroidea -clypeate -clypeiform -clypeolar -clypeolate -clypeole -clypeus -clysis -clysma -clysmian -clysmic -clyster -clysterize -Clytemnestra -cnemapophysis -cnemial -cnemidium -Cnemidophorus -cnemis -Cneoraceae -cneoraceous -Cneorum -cnicin -Cnicus -cnida -Cnidaria -cnidarian -Cnidian -cnidoblast -cnidocell -cnidocil -cnidocyst -cnidophore -cnidophorous -cnidopod -cnidosac -Cnidoscolus -cnidosis -coabode -coabound -coabsume -coacceptor -coacervate -coacervation -coach -coachability -coachable -coachbuilder -coachbuilding -coachee -coacher -coachfellow -coachful -coaching -coachlet -coachmaker -coachmaking -coachman -coachmanship -coachmaster -coachsmith -coachsmithing -coachway -coachwhip -coachwise -coachwoman -coachwork -coachwright -coachy -coact -coaction -coactive -coactively -coactivity -coactor -coadamite -coadapt -coadaptation -coadequate -coadjacence -coadjacency -coadjacent -coadjacently -coadjudicator -coadjust -coadjustment -coadjutant -coadjutator -coadjute -coadjutement -coadjutive -coadjutor -coadjutorship -coadjutress -coadjutrix -coadjuvancy -coadjuvant -coadjuvate -coadminister -coadministration -coadministrator -coadministratrix -coadmiration -coadmire -coadmit -coadnate -coadore -coadsorbent -coadunate -coadunation -coadunative -coadunatively -coadunite -coadventure -coadventurer -coadvice -coaffirmation -coafforest -coaged -coagency -coagent -coaggregate -coaggregated -coaggregation -coagitate -coagitator -coagment -coagonize -coagriculturist -coagula -coagulability -coagulable -coagulant -coagulase -coagulate -coagulation -coagulative -coagulator -coagulatory -coagulin -coagulometer -coagulose -coagulum -Coahuiltecan -coaid -coaita -coak -coakum -coal -coalbag -coalbagger -coalbin -coalbox -coaldealer -coaler -coalesce -coalescence -coalescency -coalescent -coalfish -coalfitter -coalhole -coalification -coalify -Coalite -coalition -coalitional -coalitioner -coalitionist -coalize -coalizer -coalless -coalmonger -coalmouse -coalpit -coalrake -coalsack -coalternate -coalternation -coalternative -coaltitude -coaly -coalyard -coambassador -coambulant -coamiable -coaming -Coan -coanimate -coannex -coannihilate -coapostate -coapparition -coappear -coappearance -coapprehend -coapprentice -coappriser -coapprover -coapt -coaptate -coaptation -coaration -coarb -coarbiter -coarbitrator -coarctate -coarctation -coardent -coarrange -coarrangement -coarse -coarsely -coarsen -coarseness -coarsish -coascend -coassert -coasserter -coassession -coassessor -coassignee -coassist -coassistance -coassistant -coassume -coast -coastal -coastally -coaster -Coastguard -coastguardman -coasting -coastland -coastman -coastside -coastwaiter -coastward -coastwards -coastways -coastwise -coat -coated -coatee -coater -coati -coatie -coatimondie -coatimundi -coating -coatless -coatroom -coattail -coattailed -coattend -coattest -coattestation -coattestator -coaudience -coauditor -coaugment -coauthor -coauthority -coauthorship -coawareness -coax -coaxal -coaxation -coaxer -coaxial -coaxially -coaxing -coaxingly -coaxy -cob -cobaea -cobalt -cobaltammine -cobaltic -cobalticyanic -cobalticyanides -cobaltiferous -cobaltinitrite -cobaltite -cobaltocyanic -cobaltocyanide -cobaltous -cobang -cobbed -cobber -cobberer -cobbing -cobble -cobbler -cobblerfish -cobblerism -cobblerless -cobblership -cobblery -cobblestone -cobbling -cobbly -cobbra -cobby -cobcab -Cobdenism -Cobdenite -cobego -cobelief -cobeliever -cobelligerent -cobenignity -coberger -cobewail -cobhead -cobia -cobiron -cobishop -Cobitidae -Cobitis -coble -cobleman -Coblentzian -Cobleskill -cobless -cobloaf -cobnut -cobola -coboundless -cobourg -cobra -cobreathe -cobridgehead -cobriform -cobrother -cobstone -coburg -coburgess -coburgher -coburghership -Cobus -cobweb -cobwebbery -cobwebbing -cobwebby -cobwork -coca -cocaceous -cocaine -cocainism -cocainist -cocainization -cocainize -cocainomania -cocainomaniac -Cocama -Cocamama -cocamine -Cocanucos -cocarboxylase -cocash -cocashweed -cocause -cocautioner -Coccaceae -coccagee -coccal -Cocceian -Cocceianism -coccerin -cocci -coccid -Coccidae -coccidia -coccidial -coccidian -Coccidiidea -coccidioidal -Coccidioides -Coccidiomorpha -coccidiosis -coccidium -coccidology -cocciferous -cocciform -coccigenic -coccinella -coccinellid -Coccinellidae -coccionella -cocco -coccobacillus -coccochromatic -Coccogonales -coccogone -Coccogoneae -coccogonium -coccoid -coccolite -coccolith -coccolithophorid -Coccolithophoridae -Coccoloba -Coccolobis -Coccomyces -coccosphere -coccostean -coccosteid -Coccosteidae -Coccosteus -Coccothraustes -coccothraustine -Coccothrinax -coccous -coccule -cocculiferous -Cocculus -cocculus -coccus -coccydynia -coccygalgia -coccygeal -coccygean -coccygectomy -coccygerector -coccyges -coccygeus -coccygine -coccygodynia -coccygomorph -Coccygomorphae -coccygomorphic -coccygotomy -coccyodynia -coccyx -Coccyzus -cocentric -cochairman -cochal -cochief -Cochin -cochineal -cochlea -cochlear -cochleare -Cochlearia -cochlearifoliate -cochleariform -cochleate -cochleated -cochleiform -cochleitis -cochleous -cochlidiid -Cochlidiidae -cochliodont -Cochliodontidae -Cochliodus -Cochlospermaceae -cochlospermaceous -Cochlospermum -Cochranea -cochurchwarden -cocillana -cocircular -cocircularity -cocitizen -cocitizenship -cock -cockade -cockaded -Cockaigne -cockal -cockalorum -cockamaroo -cockarouse -cockateel -cockatoo -cockatrice -cockawee -cockbell -cockbill -cockbird -cockboat -cockbrain -cockchafer -cockcrow -cockcrower -cockcrowing -cocked -Cocker -cocker -cockerel -cockermeg -cockernony -cocket -cockeye -cockeyed -cockfight -cockfighting -cockhead -cockhorse -cockieleekie -cockily -cockiness -cocking -cockish -cockle -cockleboat -cocklebur -cockled -cockler -cockleshell -cocklet -cocklewife -cocklight -cockling -cockloft -cockly -cockmaster -cockmatch -cockmate -cockneian -cockneity -cockney -cockneybred -cockneydom -cockneyese -cockneyess -cockneyfication -cockneyfy -cockneyish -cockneyishly -cockneyism -cockneyize -cockneyland -cockneyship -cockpit -cockroach -cockscomb -cockscombed -cocksfoot -cockshead -cockshot -cockshut -cockshy -cockshying -cockspur -cockstone -cocksure -cocksuredom -cocksureism -cocksurely -cocksureness -cocksurety -cocktail -cockthrowing -cockup -cockweed -cocky -Cocle -coco -cocoa -cocoach -cocobolo -Coconino -coconnection -coconqueror -coconscious -coconsciously -coconsciousness -coconsecrator -coconspirator -coconstituent -cocontractor -Coconucan -Coconuco -coconut -cocoon -cocoonery -cocorico -cocoroot -Cocos -cocotte -cocovenantor -cocowood -cocowort -cocozelle -cocreate -cocreator -cocreatorship -cocreditor -cocrucify -coctile -coction -coctoantigen -coctoprecipitin -cocuisa -cocullo -cocurator -cocurrent -cocuswood -cocuyo -Cocytean -Cocytus -cod -coda -codamine -codbank -codder -codding -coddle -coddler -code -codebtor -codeclination -codecree -codefendant -codeine -codeless -codelight -codelinquency -codelinquent -codenization -codeposit -coder -coderive -codescendant -codespairer -codex -codfish -codfisher -codfishery -codger -codhead -codheaded -Codiaceae -codiaceous -Codiaeum -Codiales -codical -codices -codicil -codicilic -codicillary -codictatorship -codification -codifier -codify -codilla -codille -codiniac -codirectional -codirector -codiscoverer -codisjunct -codist -Codium -codivine -codling -codman -codo -codol -codomestication -codominant -codon -codpiece -codpitchings -Codrus -codshead -codworm -coe -coecal -coecum -coed -coeditor -coeditorship -coeducate -coeducation -coeducational -coeducationalism -coeducationalize -coeducationally -coeffect -coefficacy -coefficient -coefficiently -coeffluent -coeffluential -coelacanth -coelacanthid -Coelacanthidae -coelacanthine -Coelacanthini -coelacanthoid -coelacanthous -coelanaglyphic -coelar -coelarium -Coelastraceae -coelastraceous -Coelastrum -Coelata -coelder -coeldership -Coelebogyne -coelect -coelection -coelector -coelectron -coelelminth -Coelelminthes -coelelminthic -Coelentera -Coelenterata -coelenterate -coelenteric -coelenteron -coelestine -coelevate -coelho -coelia -coeliac -coelialgia -coelian -Coelicolae -Coelicolist -coeligenous -coelin -coeline -coeliomyalgia -coeliorrhea -coeliorrhoea -coelioscopy -coeliotomy -coeloblastic -coeloblastula -Coelococcus -coelodont -coelogastrula -Coeloglossum -Coelogyne -coelom -coeloma -Coelomata -coelomate -coelomatic -coelomatous -coelomesoblast -coelomic -Coelomocoela -coelomopore -coelonavigation -coelongated -coeloplanula -coelosperm -coelospermous -coelostat -coelozoic -coemanate -coembedded -coembody -coembrace -coeminency -coemperor -coemploy -coemployee -coemployment -coempt -coemption -coemptional -coemptionator -coemptive -coemptor -coenact -coenactor -coenaculous -coenamor -coenamorment -coenamourment -coenanthium -coendear -Coendidae -Coendou -coendure -coenenchym -coenenchyma -coenenchymal -coenenchymatous -coenenchyme -coenesthesia -coenesthesis -coenflame -coengage -coengager -coenjoy -coenobe -coenobiar -coenobic -coenobioid -coenobium -coenoblast -coenoblastic -coenocentrum -coenocyte -coenocytic -coenodioecism -coenoecial -coenoecic -coenoecium -coenogamete -coenomonoecism -coenosarc -coenosarcal -coenosarcous -coenosite -coenospecies -coenospecific -coenospecifically -coenosteal -coenosteum -coenotrope -coenotype -coenotypic -coenthrone -coenurus -coenzyme -coequal -coequality -coequalize -coequally -coequalness -coequate -coequated -coequation -coerce -coercement -coercer -coercibility -coercible -coercibleness -coercibly -coercion -coercionary -coercionist -coercitive -coercive -coercively -coerciveness -coercivity -Coerebidae -coeruleolactite -coessential -coessentiality -coessentially -coessentialness -coestablishment -coestate -coetaneity -coetaneous -coetaneously -coetaneousness -coeternal -coeternally -coeternity -coetus -coeval -coevality -coevally -coexchangeable -coexclusive -coexecutant -coexecutor -coexecutrix -coexert -coexertion -coexist -coexistence -coexistency -coexistent -coexpand -coexpanded -coexperiencer -coexpire -coexplosion -coextend -coextension -coextensive -coextensively -coextensiveness -coextent -cofactor -Cofane -cofaster -cofather -cofathership -cofeature -cofeoffee -coferment -cofermentation -coff -Coffea -coffee -coffeebush -coffeecake -coffeegrower -coffeegrowing -coffeehouse -coffeeleaf -coffeepot -coffeeroom -coffeetime -coffeeweed -coffeewood -coffer -cofferdam -cofferer -cofferfish -coffering -cofferlike -cofferwork -coffin -coffinless -coffinmaker -coffinmaking -coffle -coffret -cofighter -coforeknown -coformulator -cofounder -cofoundress -cofreighter -coft -cofunction -cog -cogence -cogency -cogener -cogeneric -cogent -cogently -cogged -cogger -coggie -cogging -coggle -coggledy -cogglety -coggly -coghle -cogitability -cogitable -cogitabund -cogitabundity -cogitabundly -cogitabundous -cogitant -cogitantly -cogitate -cogitatingly -cogitation -cogitative -cogitatively -cogitativeness -cogitativity -cogitator -coglorify -coglorious -cogman -cognac -cognate -cognateness -cognatic -cognatical -cognation -cognisable -cognisance -cognition -cognitional -cognitive -cognitively -cognitum -cognizability -cognizable -cognizableness -cognizably -cognizance -cognizant -cognize -cognizee -cognizer -cognizor -cognomen -cognominal -cognominate -cognomination -cognosce -cognoscent -cognoscibility -cognoscible -cognoscitive -cognoscitively -cogon -cogonal -cogovernment -cogovernor -cogracious -cograil -cogrediency -cogredient -cogroad -Cogswellia -coguarantor -coguardian -cogue -cogway -cogwheel -cogwood -cohabit -cohabitancy -cohabitant -cohabitation -coharmonious -coharmoniously -coharmonize -coheartedness -coheir -coheiress -coheirship -cohelper -cohelpership -Cohen -cohenite -coherald -cohere -coherence -coherency -coherent -coherently -coherer -coheretic -coheritage -coheritor -cohesibility -cohesible -cohesion -cohesive -cohesively -cohesiveness -cohibit -cohibition -cohibitive -cohibitor -coho -cohoba -cohobate -cohobation -cohobator -cohol -cohort -cohortation -cohortative -cohosh -cohune -cohusband -coidentity -coif -coifed -coiffure -coign -coigue -coil -coiled -coiler -coiling -coilsmith -coimmense -coimplicant -coimplicate -coimplore -coin -coinable -coinage -coincide -coincidence -coincidency -coincident -coincidental -coincidentally -coincidently -coincider -coinclination -coincline -coinclude -coincorporate -coindicant -coindicate -coindication -coindwelling -coiner -coinfeftment -coinfer -coinfinite -coinfinity -coinhabit -coinhabitant -coinhabitor -coinhere -coinherence -coinherent -coinheritance -coinheritor -coining -coinitial -coinmaker -coinmaking -coinmate -coinspire -coinstantaneity -coinstantaneous -coinstantaneously -coinstantaneousness -coinsurance -coinsure -cointense -cointension -cointensity -cointer -cointerest -cointersecting -cointise -Cointreau -coinventor -coinvolve -coiny -coir -coislander -coistrel -coistril -coital -coition -coiture -coitus -Coix -cojudge -cojuror -cojusticiar -coke -cokelike -cokeman -coker -cokernut -cokery -coking -coky -col -Cola -cola -colaborer -Colada -colalgia -Colan -colander -colane -colarin -colate -colation -colatitude -colatorium -colature -colauxe -colback -colberter -colbertine -Colbertism -colcannon -Colchian -Colchicaceae -colchicine -Colchicum -Colchis -colchyte -Colcine -colcothar -cold -colder -coldfinch -coldhearted -coldheartedly -coldheartedness -coldish -coldly -coldness -coldproof -coldslaw -Cole -cole -coleader -colecannon -colectomy -Coleen -colegatee -colegislator -colemanite -colemouse -Coleochaetaceae -coleochaetaceous -Coleochaete -Coleophora -Coleophoridae -coleopter -Coleoptera -coleopteral -coleopteran -coleopterist -coleopteroid -coleopterological -coleopterology -coleopteron -coleopterous -coleoptile -coleoptilum -coleorhiza -Coleosporiaceae -Coleosporium -coleplant -coleseed -coleslaw -colessee -colessor -coletit -coleur -Coleus -colewort -coli -Colias -colibacillosis -colibacterin -colibri -colic -colical -colichemarde -colicky -colicolitis -colicroot -colicweed -colicwort -colicystitis -colicystopyelitis -coliform -Coliidae -Coliiformes -colilysin -Colima -colima -Colin -colin -colinear -colinephritis -coling -Colinus -coliplication -colipuncture -colipyelitis -colipyuria -colisepsis -Coliseum -coliseum -colitic -colitis -colitoxemia -coliuria -Colius -colk -coll -Colla -collaborate -collaboration -collaborationism -collaborationist -collaborative -collaboratively -collaborator -collage -collagen -collagenic -collagenous -collapse -collapsibility -collapsible -collar -collarband -collarbird -collarbone -collard -collare -collared -collaret -collarino -collarless -collarman -collatable -collate -collatee -collateral -collaterality -collaterally -collateralness -collation -collationer -collatitious -collative -collator -collatress -collaud -collaudation -colleague -colleagueship -collect -collectability -collectable -collectanea -collectarium -collected -collectedly -collectedness -collectibility -collectible -collection -collectional -collectioner -collective -collectively -collectiveness -collectivism -collectivist -collectivistic -collectivistically -collectivity -collectivization -collectivize -collector -collectorate -collectorship -collectress -colleen -collegatary -college -colleger -collegial -collegialism -collegiality -collegian -collegianer -Collegiant -collegiate -collegiately -collegiateness -collegiation -collegium -Collembola -collembolan -collembole -collembolic -collembolous -collenchyma -collenchymatic -collenchymatous -collenchyme -collencytal -collencyte -Colleri -Colleries -Collery -collery -collet -colleter -colleterial -colleterium -Colletes -Colletia -colletic -Colletidae -colletin -Colletotrichum -colletside -colley -collibert -colliculate -colliculus -collide -collidine -collie -collied -collier -colliery -collieshangie -colliform -colligate -colligation -colligative -colligible -collimate -collimation -collimator -Collin -collin -collinal -colline -collinear -collinearity -collinearly -collineate -collineation -colling -collingly -collingual -Collins -collins -Collinsia -collinsite -Collinsonia -colliquate -colliquation -colliquative -colliquativeness -collision -collisional -collisive -colloblast -collobrierite -collocal -Collocalia -collocate -collocation -collocationable -collocative -collocatory -collochemistry -collochromate -collock -collocution -collocutor -collocutory -collodiochloride -collodion -collodionization -collodionize -collodiotype -collodium -collogue -colloid -colloidal -colloidality -colloidize -colloidochemical -Collomia -collop -colloped -collophanite -collophore -colloque -colloquia -colloquial -colloquialism -colloquialist -colloquiality -colloquialize -colloquially -colloquialness -colloquist -colloquium -colloquize -colloquy -collothun -collotype -collotypic -collotypy -colloxylin -colluctation -collude -colluder -collum -collumelliaceous -collusion -collusive -collusively -collusiveness -collutorium -collutory -colluvial -colluvies -colly -collyba -Collybia -Collyridian -collyrite -collyrium -collywest -collyweston -collywobbles -colmar -colobin -colobium -coloboma -Colobus -Colocasia -colocentesis -Colocephali -colocephalous -coloclysis -colocola -colocolic -colocynth -colocynthin -colodyspepsia -coloenteritis -cologarithm -Cologne -cololite -Colombian -colombier -colombin -Colombina -colometric -colometrically -colometry -colon -colonalgia -colonate -colonel -colonelcy -colonelship -colongitude -colonial -colonialism -colonialist -colonialize -colonially -colonialness -colonic -colonist -colonitis -colonizability -colonizable -colonization -colonizationist -colonize -colonizer -colonnade -colonnaded -colonnette -colonopathy -colonopexy -colonoscope -colonoscopy -colony -colopexia -colopexotomy -colopexy -colophane -colophany -colophene -colophenic -colophon -colophonate -Colophonian -colophonic -colophonist -colophonite -colophonium -colophony -coloplication -coloproctitis -coloptosis -colopuncture -coloquintid -coloquintida -color -colorability -colorable -colorableness -colorably -Coloradan -Colorado -colorado -coloradoite -colorant -colorate -coloration -colorational -colorationally -colorative -coloratura -colorature -colorcast -colorectitis -colorectostomy -colored -colorer -colorfast -colorful -colorfully -colorfulness -colorific -colorifics -colorimeter -colorimetric -colorimetrical -colorimetrically -colorimetrics -colorimetrist -colorimetry -colorin -coloring -colorist -coloristic -colorization -colorize -colorless -colorlessly -colorlessness -colormaker -colormaking -colorman -colorrhaphy -colors -colortype -Colorum -colory -coloss -colossal -colossality -colossally -colossean -Colosseum -colossi -Colossian -Colossochelys -colossus -Colossuswise -colostomy -colostral -colostration -colostric -colostrous -colostrum -colotomy -colotyphoid -colove -colp -colpenchyma -colpeo -colpeurynter -colpeurysis -colpindach -colpitis -colpocele -colpocystocele -colpohyperplasia -colpohysterotomy -colpoperineoplasty -colpoperineorrhaphy -colpoplastic -colpoplasty -colpoptosis -colporrhagia -colporrhaphy -colporrhea -colporrhexis -colport -colportage -colporter -colporteur -colposcope -colposcopy -colpotomy -colpus -Colt -colt -colter -colthood -coltish -coltishly -coltishness -coltpixie -coltpixy -coltsfoot -coltskin -Coluber -colubrid -Colubridae -colubriform -Colubriformes -Colubriformia -Colubrina -Colubrinae -colubrine -colubroid -colugo -Columba -columbaceous -Columbae -Columban -Columbanian -columbarium -columbary -columbate -columbeion -Columbella -Columbia -columbiad -Columbian -columbic -Columbid -Columbidae -columbier -columbiferous -Columbiformes -columbin -Columbine -columbine -columbite -columbium -columbo -columboid -columbotantalate -columbotitanate -columella -columellar -columellate -Columellia -Columelliaceae -columelliform -column -columnal -columnar -columnarian -columnarity -columnated -columned -columner -columniation -columniferous -columniform -columning -columnist -columnization -columnwise -colunar -colure -Colutea -Colville -coly -Colymbidae -colymbiform -colymbion -Colymbriformes -Colymbus -colyone -colyonic -colytic -colyum -colyumist -colza -coma -comacine -comagistracy -comagmatic -comaker -comal -comamie -Coman -Comanche -Comanchean -Comandra -comanic -comart -Comarum -comate -comatose -comatosely -comatoseness -comatosity -comatous -comatula -comatulid -comb -combaron -combat -combatable -combatant -combater -combative -combatively -combativeness -combativity -combed -comber -combfish -combflower -combinable -combinableness -combinant -combinantive -combinate -combination -combinational -combinative -combinator -combinatorial -combinatory -combine -combined -combinedly -combinedness -combinement -combiner -combing -combining -comble -combless -comblessness -combmaker -combmaking -comboloio -comboy -Combretaceae -combretaceous -Combretum -combure -comburendo -comburent -comburgess -comburimeter -comburimetry -comburivorous -combust -combustibility -combustible -combustibleness -combustibly -combustion -combustive -combustor -combwise -combwright -comby -come -comeback -Comecrudo -comedial -comedian -comediant -comedic -comedical -comedienne -comedietta -comedist -comedo -comedown -comedy -comelily -comeliness -comeling -comely -comendite -comenic -comephorous -comer -comes -comestible -comet -cometarium -cometary -comether -cometic -cometical -cometlike -cometographer -cometographical -cometography -cometoid -cometology -cometwise -comeuppance -comfit -comfiture -comfort -comfortable -comfortableness -comfortably -comforter -comfortful -comforting -comfortingly -comfortless -comfortlessly -comfortlessness -comfortress -comfortroot -comfrey -comfy -Comiakin -comic -comical -comicality -comically -comicalness -comicocratic -comicocynical -comicodidactic -comicography -comicoprosaic -comicotragedy -comicotragic -comicotragical -comicry -Comid -comiferous -Cominform -coming -comingle -comino -Comintern -comism -comital -comitant -comitatensian -comitative -comitatus -comitia -comitial -Comitium -comitragedy -comity -comma -command -commandable -commandant -commandedness -commandeer -commander -commandership -commandery -commanding -commandingly -commandingness -commandless -commandment -commando -commandoman -commandress -commassation -commassee -commatic -commation -commatism -commeasurable -commeasure -commeddle -Commelina -Commelinaceae -commelinaceous -commemorable -commemorate -commemoration -commemorational -commemorative -commemoratively -commemorativeness -commemorator -commemoratory -commemorize -commence -commenceable -commencement -commencer -commend -commendable -commendableness -commendably -commendador -commendam -commendatary -commendation -commendator -commendatory -commender -commendingly -commendment -commensal -commensalism -commensalist -commensalistic -commensality -commensally -commensurability -commensurable -commensurableness -commensurably -commensurate -commensurately -commensurateness -commensuration -comment -commentarial -commentarialism -commentary -commentate -commentation -commentator -commentatorial -commentatorially -commentatorship -commenter -commerce -commerceless -commercer -commerciable -commercial -commercialism -commercialist -commercialistic -commerciality -commercialization -commercialize -commercially -commercium -commerge -commie -comminate -commination -comminative -comminator -comminatory -commingle -comminglement -commingler -comminister -comminuate -comminute -comminution -comminutor -Commiphora -commiserable -commiserate -commiseratingly -commiseration -commiserative -commiseratively -commiserator -commissar -commissarial -commissariat -commissary -commissaryship -commission -commissionaire -commissional -commissionate -commissioner -commissionership -commissionship -commissive -commissively -commissural -commissure -commissurotomy -commit -commitment -committable -committal -committee -committeeism -committeeman -committeeship -committeewoman -committent -committer -committible -committor -commix -commixt -commixtion -commixture -commodatary -commodate -commodation -commodatum -commode -commodious -commodiously -commodiousness -commoditable -commodity -commodore -common -commonable -commonage -commonality -commonalty -commoner -commonership -commoney -commonish -commonition -commonize -commonly -commonness -commonplace -commonplaceism -commonplacely -commonplaceness -commonplacer -commons -commonsensible -commonsensibly -commonsensical -commonsensically -commonty -commonweal -commonwealth -commonwealthism -commorancy -commorant -commorient -commorth -commot -commotion -commotional -commotive -commove -communa -communal -communalism -communalist -communalistic -communality -communalization -communalize -communalizer -communally -communard -commune -communer -communicability -communicable -communicableness -communicably -communicant -communicate -communicatee -communicating -communication -communicative -communicatively -communicativeness -communicator -communicatory -communion -communionist -communique -communism -communist -communistery -communistic -communistically -communital -communitarian -communitary -communitive -communitorium -community -communization -communize -commutability -commutable -commutableness -commutant -commutate -commutation -commutative -commutatively -commutator -commute -commuter -commuting -commutual -commutuality -Comnenian -comoid -comolecule -comortgagee -comose -comourn -comourner -comournful -comous -Comox -compact -compacted -compactedly -compactedness -compacter -compactible -compaction -compactly -compactness -compactor -compacture -compages -compaginate -compagination -companator -companion -companionability -companionable -companionableness -companionably -companionage -companionate -companionize -companionless -companionship -companionway -company -comparability -comparable -comparableness -comparably -comparascope -comparate -comparatival -comparative -comparatively -comparativeness -comparativist -comparator -compare -comparer -comparison -comparition -comparograph -compart -compartition -compartment -compartmental -compartmentalization -compartmentalize -compartmentally -compartmentize -compass -compassable -compasser -compasses -compassing -compassion -compassionable -compassionate -compassionately -compassionateness -compassionless -compassive -compassivity -compassless -compaternity -compatibility -compatible -compatibleness -compatibly -compatriot -compatriotic -compatriotism -compear -compearance -compearant -compeer -compel -compellable -compellably -compellation -compellative -compellent -compeller -compelling -compellingly -compend -compendency -compendent -compendia -compendiary -compendiate -compendious -compendiously -compendiousness -compendium -compenetrate -compenetration -compensable -compensate -compensating -compensatingly -compensation -compensational -compensative -compensativeness -compensator -compensatory -compense -compenser -compesce -compete -competence -competency -competent -competently -competentness -competition -competitioner -competitive -competitively -competitiveness -competitor -competitorship -competitory -competitress -competitrix -compilation -compilator -compilatory -compile -compilement -compiler -compital -Compitalia -compitum -complacence -complacency -complacent -complacential -complacentially -complacently -complain -complainable -complainant -complainer -complainingly -complainingness -complaint -complaintive -complaintiveness -complaisance -complaisant -complaisantly -complaisantness -complanar -complanate -complanation -complect -complected -complement -complemental -complementally -complementalness -complementariness -complementarism -complementary -complementation -complementative -complementer -complementoid -complete -completedness -completely -completement -completeness -completer -completion -completive -completively -completory -complex -complexedness -complexification -complexify -complexion -complexionably -complexional -complexionally -complexioned -complexionist -complexionless -complexity -complexively -complexly -complexness -complexus -compliable -compliableness -compliably -compliance -compliancy -compliant -compliantly -complicacy -complicant -complicate -complicated -complicatedly -complicatedness -complication -complicative -complice -complicitous -complicity -complier -compliment -complimentable -complimental -complimentally -complimentalness -complimentarily -complimentariness -complimentary -complimentation -complimentative -complimenter -complimentingly -complin -complot -complotter -Complutensian -compluvium -comply -compo -compoer -compole -compone -componed -componency -componendo -component -componental -componented -compony -comport -comportment -compos -compose -composed -composedly -composedness -composer -composita -Compositae -composite -compositely -compositeness -composition -compositional -compositionally -compositive -compositively -compositor -compositorial -compositous -composograph -compossibility -compossible -compost -composture -composure -compotation -compotationship -compotator -compotatory -compote -compotor -compound -compoundable -compoundedness -compounder -compounding -compoundness -comprachico -comprador -comprecation -compreg -compregnate -comprehend -comprehender -comprehendible -comprehendingly -comprehense -comprehensibility -comprehensible -comprehensibleness -comprehensibly -comprehension -comprehensive -comprehensively -comprehensiveness -comprehensor -compresbyter -compresbyterial -compresence -compresent -compress -compressed -compressedly -compressibility -compressible -compressibleness -compressingly -compression -compressional -compressive -compressively -compressometer -compressor -compressure -comprest -compriest -comprisable -comprisal -comprise -comprised -compromise -compromiser -compromising -compromisingly -compromissary -compromission -compromissorial -compromit -compromitment -comprovincial -Compsilura -Compsoa -Compsognathus -Compsothlypidae -compter -Comptometer -Comptonia -comptroller -comptrollership -compulsative -compulsatively -compulsatorily -compulsatory -compulsed -compulsion -compulsitor -compulsive -compulsively -compulsiveness -compulsorily -compulsoriness -compulsory -compunction -compunctionary -compunctionless -compunctious -compunctiously -compunctive -compurgation -compurgator -compurgatorial -compurgatory -compursion -computability -computable -computably -computation -computational -computative -computativeness -compute -computer -computist -computus -comrade -comradely -comradery -comradeship -Comsomol -comstockery -Comtian -Comtism -Comtist -comurmurer -Comus -con -conacaste -conacre -conal -conalbumin -conamed -Conant -conarial -conarium -conation -conational -conationalistic -conative -conatus -conaxial -concamerate -concamerated -concameration -concanavalin -concaptive -concassation -concatenary -concatenate -concatenation -concatenator -concausal -concause -concavation -concave -concavely -concaveness -concaver -concavity -conceal -concealable -concealed -concealedly -concealedness -concealer -concealment -concede -conceded -concededly -conceder -conceit -conceited -conceitedly -conceitedness -conceitless -conceity -conceivability -conceivable -conceivableness -conceivably -conceive -conceiver -concelebrate -concelebration -concent -concenter -concentive -concentralization -concentrate -concentrated -concentration -concentrative -concentrativeness -concentrator -concentric -concentrically -concentricity -concentual -concentus -concept -conceptacle -conceptacular -conceptaculum -conception -conceptional -conceptionist -conceptism -conceptive -conceptiveness -conceptual -conceptualism -conceptualist -conceptualistic -conceptuality -conceptualization -conceptualize -conceptually -conceptus -concern -concerned -concernedly -concernedness -concerning -concerningly -concerningness -concernment -concert -concerted -concertedly -concertgoer -concertina -concertinist -concertist -concertize -concertizer -concertmaster -concertmeister -concertment -concerto -concertstuck -concessible -concession -concessionaire -concessional -concessionary -concessioner -concessionist -concessive -concessively -concessiveness -concessor -concettism -concettist -conch -concha -conchal -conchate -conche -conched -concher -Conchifera -conchiferous -conchiform -conchinine -conchiolin -conchitic -conchitis -Conchobor -conchoid -conchoidal -conchoidally -conchological -conchologically -conchologist -conchologize -conchology -conchometer -conchometry -Conchostraca -conchotome -Conchubar -Conchucu -conchuela -conchy -conchyliated -conchyliferous -conchylium -concierge -concile -conciliable -conciliabule -conciliabulum -conciliar -conciliate -conciliating -conciliatingly -conciliation -conciliationist -conciliative -conciliator -conciliatorily -conciliatoriness -conciliatory -concilium -concinnity -concinnous -concionator -concipiency -concipient -concise -concisely -conciseness -concision -conclamant -conclamation -conclave -conclavist -concludable -conclude -concluder -concluding -concludingly -conclusion -conclusional -conclusionally -conclusive -conclusively -conclusiveness -conclusory -concoagulate -concoagulation -concoct -concocter -concoction -concoctive -concoctor -concolor -concolorous -concomitance -concomitancy -concomitant -concomitantly -conconscious -Concord -concord -concordal -concordance -concordancer -concordant -concordantial -concordantly -concordat -concordatory -concorder -concordial -concordist -concordity -concorporate -Concorrezanes -concourse -concreate -concremation -concrement -concresce -concrescence -concrescible -concrescive -concrete -concretely -concreteness -concreter -concretion -concretional -concretionary -concretism -concretive -concretively -concretize -concretor -concubinage -concubinal -concubinarian -concubinary -concubinate -concubine -concubinehood -concubitancy -concubitant -concubitous -concubitus -concupiscence -concupiscent -concupiscible -concupiscibleness -concupy -concur -concurrence -concurrency -concurrent -concurrently -concurrentness -concurring -concurringly -concursion -concurso -concursus -concuss -concussant -concussion -concussional -concussive -concutient -concyclic -concyclically -cond -Condalia -condemn -condemnable -condemnably -condemnate -condemnation -condemnatory -condemned -condemner -condemning -condemningly -condensability -condensable -condensance -condensary -condensate -condensation -condensational -condensative -condensator -condense -condensed -condensedly -condensedness -condenser -condensery -condensity -condescend -condescendence -condescendent -condescender -condescending -condescendingly -condescendingness -condescension -condescensive -condescensively -condescensiveness -condiction -condictious -condiddle -condiddlement -condign -condigness -condignity -condignly -condiment -condimental -condimentary -condisciple -condistillation -condite -condition -conditional -conditionalism -conditionalist -conditionality -conditionalize -conditionally -conditionate -conditioned -conditioner -condivision -condolatory -condole -condolement -condolence -condolent -condoler -condoling -condolingly -condominate -condominium -condonable -condonance -condonation -condonative -condone -condonement -condoner -condor -conduce -conducer -conducing -conducingly -conducive -conduciveness -conduct -conductance -conductibility -conductible -conductility -conductimeter -conductio -conduction -conductional -conductitious -conductive -conductively -conductivity -conductometer -conductometric -conductor -conductorial -conductorless -conductorship -conductory -conductress -conductus -conduit -conduplicate -conduplicated -conduplication -condurangin -condurango -condylar -condylarth -Condylarthra -condylarthrosis -condylarthrous -condyle -condylectomy -condylion -condyloid -condyloma -condylomatous -condylome -condylopod -Condylopoda -condylopodous -condylos -condylotomy -Condylura -condylure -cone -coned -coneen -coneflower -conehead -coneighboring -coneine -conelet -conemaker -conemaking -Conemaugh -conenose -conepate -coner -cones -conessine -Conestoga -confab -confabular -confabulate -confabulation -confabulator -confabulatory -confact -confarreate -confarreation -confated -confect -confection -confectionary -confectioner -confectionery -Confed -confederacy -confederal -confederalist -confederate -confederater -confederatio -confederation -confederationist -confederatism -confederative -confederatize -confederator -confelicity -conferee -conference -conferential -conferment -conferrable -conferral -conferrer -conferruminate -conferted -Conferva -Confervaceae -confervaceous -conferval -Confervales -confervoid -Confervoideae -confervous -confess -confessable -confessant -confessarius -confessary -confessedly -confesser -confessing -confessingly -confession -confessional -confessionalian -confessionalism -confessionalist -confessionary -confessionist -confessor -confessorship -confessory -confidant -confide -confidence -confidency -confident -confidential -confidentiality -confidentially -confidentialness -confidentiary -confidently -confidentness -confider -confiding -confidingly -confidingness -configural -configurate -configuration -configurational -configurationally -configurationism -configurationist -configurative -configure -confinable -confine -confineable -confined -confinedly -confinedness -confineless -confinement -confiner -confining -confinity -confirm -confirmable -confirmand -confirmation -confirmative -confirmatively -confirmatorily -confirmatory -confirmed -confirmedly -confirmedness -confirmee -confirmer -confirming -confirmingly -confirmity -confirmment -confirmor -confiscable -confiscatable -confiscate -confiscation -confiscator -confiscatory -confitent -confiteor -confiture -confix -conflagrant -conflagrate -conflagration -conflagrative -conflagrator -conflagratory -conflate -conflated -conflation -conflict -conflicting -conflictingly -confliction -conflictive -conflictory -conflow -confluence -confluent -confluently -conflux -confluxibility -confluxible -confluxibleness -confocal -conform -conformability -conformable -conformableness -conformably -conformal -conformance -conformant -conformate -conformation -conformator -conformer -conformist -conformity -confound -confoundable -confounded -confoundedly -confoundedness -confounder -confounding -confoundingly -confrater -confraternal -confraternity -confraternization -confrere -confriar -confrication -confront -confrontal -confrontation -confronte -confronter -confrontment -Confucian -Confucianism -Confucianist -confusability -confusable -confusably -confuse -confused -confusedly -confusedness -confusingly -confusion -confusional -confusticate -confustication -confutable -confutation -confutative -confutator -confute -confuter -conga -congeable -congeal -congealability -congealable -congealableness -congealedness -congealer -congealment -congee -congelation -congelative -congelifraction -congeliturbate -congeliturbation -congener -congeneracy -congeneric -congenerical -congenerous -congenerousness -congenetic -congenial -congeniality -congenialize -congenially -congenialness -congenital -congenitally -congenitalness -conger -congeree -congest -congested -congestible -congestion -congestive -congiary -congius -conglobate -conglobately -conglobation -conglobe -conglobulate -conglomerate -conglomeratic -conglomeration -conglutin -conglutinant -conglutinate -conglutination -conglutinative -Congo -Congoese -Congolese -Congoleum -congou -congratulable -congratulant -congratulate -congratulation -congratulational -congratulator -congratulatory -congredient -congreet -congregable -congreganist -congregant -congregate -congregation -congregational -congregationalism -Congregationalist -congregationalize -congregationally -Congregationer -congregationist -congregative -congregativeness -congregator -Congreso -congress -congresser -congressional -congressionalist -congressionally -congressionist -congressist -congressive -congressman -Congresso -congresswoman -Congreve -Congridae -congroid -congruence -congruency -congruent -congruential -congruently -congruism -congruist -congruistic -congruity -congruous -congruously -congruousness -conhydrine -Coniacian -conic -conical -conicality -conically -conicalness -coniceine -conichalcite -conicine -conicity -conicle -conicoid -conicopoly -conics -Conidae -conidia -conidial -conidian -conidiiferous -conidioid -conidiophore -conidiophorous -conidiospore -conidium -conifer -Coniferae -coniferin -coniferophyte -coniferous -conification -coniform -Conilurus -conima -conimene -conin -conine -Coniogramme -Coniophora -Coniopterygidae -Conioselinum -coniosis -Coniothyrium -coniroster -conirostral -Conirostres -Conium -conject -conjective -conjecturable -conjecturably -conjectural -conjecturalist -conjecturality -conjecturally -conjecture -conjecturer -conjobble -conjoin -conjoined -conjoinedly -conjoiner -conjoint -conjointly -conjointment -conjointness -conjubilant -conjugable -conjugacy -conjugal -Conjugales -conjugality -conjugally -conjugant -conjugata -Conjugatae -conjugate -conjugated -conjugately -conjugateness -conjugation -conjugational -conjugationally -conjugative -conjugator -conjugial -conjugium -conjunct -conjunction -conjunctional -conjunctionally -conjunctiva -conjunctival -conjunctive -conjunctively -conjunctiveness -conjunctivitis -conjunctly -conjunctur -conjunctural -conjuncture -conjuration -conjurator -conjure -conjurement -conjurer -conjurership -conjuror -conjury -conk -conkanee -conker -conkers -conky -conn -connach -Connaraceae -connaraceous -connarite -Connarus -connascency -connascent -connatal -connate -connately -connateness -connation -connatural -connaturality -connaturalize -connaturally -connaturalness -connature -connaught -connect -connectable -connectant -connected -connectedly -connectedness -connectible -connection -connectional -connectival -connective -connectively -connectivity -connector -connellite -conner -connex -connexion -connexionalism -connexity -connexive -connexivum -connexus -Connie -conning -conniption -connivance -connivancy -connivant -connivantly -connive -connivent -conniver -Connochaetes -connoissance -connoisseur -connoisseurship -connotation -connotative -connotatively -connote -connotive -connotively -connubial -connubiality -connubially -connubiate -connubium -connumerate -connumeration -Conocarpus -Conocephalum -Conocephalus -conoclinium -conocuneus -conodont -conoid -conoidal -conoidally -conoidic -conoidical -conoidically -Conolophus -conominee -cononintelligent -Conopholis -conopid -Conopidae -conoplain -conopodium -Conopophaga -Conopophagidae -Conor -Conorhinus -conormal -conoscope -conourish -Conoy -conphaseolin -conplane -conquedle -conquer -conquerable -conquerableness -conqueress -conquering -conqueringly -conquerment -conqueror -conquest -conquian -conquinamine -conquinine -conquistador -Conrad -conrector -conrectorship -conred -Conringia -consanguine -consanguineal -consanguinean -consanguineous -consanguineously -consanguinity -conscience -conscienceless -consciencelessly -consciencelessness -consciencewise -conscient -conscientious -conscientiously -conscientiousness -conscionable -conscionableness -conscionably -conscious -consciously -consciousness -conscribe -conscript -conscription -conscriptional -conscriptionist -conscriptive -consecrate -consecrated -consecratedness -consecrater -consecration -consecrative -consecrator -consecratory -consectary -consecute -consecution -consecutive -consecutively -consecutiveness -consecutives -consenescence -consenescency -consension -consensual -consensually -consensus -consent -consentable -consentaneity -consentaneous -consentaneously -consentaneousness -consentant -consenter -consentful -consentfully -consentience -consentient -consentiently -consenting -consentingly -consentingness -consentive -consentively -consentment -consequence -consequency -consequent -consequential -consequentiality -consequentially -consequentialness -consequently -consertal -conservable -conservacy -conservancy -conservant -conservate -conservation -conservational -conservationist -conservatism -conservatist -conservative -conservatively -conservativeness -conservatize -conservatoire -conservator -conservatorio -conservatorium -conservatorship -conservatory -conservatrix -conserve -conserver -consider -considerability -considerable -considerableness -considerably -considerance -considerate -considerately -considerateness -consideration -considerative -consideratively -considerativeness -considerator -considered -considerer -considering -consideringly -consign -consignable -consignatary -consignation -consignatory -consignee -consigneeship -consigner -consignificant -consignificate -consignification -consignificative -consignificator -consignify -consignment -consignor -consiliary -consilience -consilient -consimilar -consimilarity -consimilate -consist -consistence -consistency -consistent -consistently -consistorial -consistorian -consistory -consociate -consociation -consociational -consociationism -consociative -consocies -consol -consolable -consolableness -consolably -Consolamentum -consolation -Consolato -consolatorily -consolatoriness -consolatory -consolatrix -console -consolement -consoler -consolidant -consolidate -consolidated -consolidation -consolidationist -consolidative -consolidator -consoling -consolingly -consolute -consomme -consonance -consonancy -consonant -consonantal -consonantic -consonantism -consonantize -consonantly -consonantness -consonate -consonous -consort -consortable -consorter -consortial -consortion -consortism -consortium -consortship -consound -conspecies -conspecific -conspectus -consperse -conspersion -conspicuity -conspicuous -conspicuously -conspicuousness -conspiracy -conspirant -conspiration -conspirative -conspirator -conspiratorial -conspiratorially -conspiratory -conspiratress -conspire -conspirer -conspiring -conspiringly -conspue -constable -constablery -constableship -constabless -constablewick -constabular -constabulary -Constance -constancy -constant -constantan -Constantine -Constantinian -Constantinopolitan -constantly -constantness -constat -constatation -constate -constatory -constellate -constellation -constellatory -consternate -consternation -constipate -constipation -constituency -constituent -constituently -constitute -constituter -constitution -constitutional -constitutionalism -constitutionalist -constitutionality -constitutionalization -constitutionalize -constitutionally -constitutionary -constitutioner -constitutionist -constitutive -constitutively -constitutiveness -constitutor -constrain -constrainable -constrained -constrainedly -constrainedness -constrainer -constraining -constrainingly -constrainment -constraint -constrict -constricted -constriction -constrictive -constrictor -constringe -constringency -constringent -construability -construable -construct -constructer -constructible -construction -constructional -constructionally -constructionism -constructionist -constructive -constructively -constructiveness -constructivism -constructivist -constructor -constructorship -constructure -construe -construer -constuprate -constupration -consubsist -consubsistency -consubstantial -consubstantialism -consubstantialist -consubstantiality -consubstantially -consubstantiate -consubstantiation -consubstantiationist -consubstantive -consuete -consuetitude -consuetude -consuetudinal -consuetudinary -consul -consulage -consular -consularity -consulary -consulate -consulship -consult -consultable -consultant -consultary -consultation -consultative -consultatory -consultee -consulter -consulting -consultive -consultively -consultor -consultory -consumable -consume -consumedly -consumeless -consumer -consuming -consumingly -consumingness -consummate -consummately -consummation -consummative -consummatively -consummativeness -consummator -consummatory -consumpt -consumpted -consumptible -consumption -consumptional -consumptive -consumptively -consumptiveness -consumptivity -consute -contabescence -contabescent -contact -contactor -contactual -contactually -contagion -contagioned -contagionist -contagiosity -contagious -contagiously -contagiousness -contagium -contain -containable -container -containment -contakion -contaminable -contaminant -contaminate -contamination -contaminative -contaminator -contaminous -contangential -contango -conte -contect -contection -contemn -contemner -contemnible -contemnibly -contemning -contemningly -contemnor -contemper -contemperate -contemperature -contemplable -contemplamen -contemplant -contemplate -contemplatingly -contemplation -contemplatist -contemplative -contemplatively -contemplativeness -contemplator -contemplature -contemporanean -contemporaneity -contemporaneous -contemporaneously -contemporaneousness -contemporarily -contemporariness -contemporary -contemporize -contempt -contemptful -contemptibility -contemptible -contemptibleness -contemptibly -contemptuous -contemptuously -contemptuousness -contendent -contender -contending -contendingly -contendress -content -contentable -contented -contentedly -contentedness -contentful -contention -contentional -contentious -contentiously -contentiousness -contentless -contently -contentment -contentness -contents -conter -conterminal -conterminant -contermine -conterminous -conterminously -conterminousness -contest -contestable -contestableness -contestably -contestant -contestation -contestee -contester -contestingly -contestless -context -contextive -contextual -contextually -contextural -contexture -contextured -conticent -contignation -contiguity -contiguous -contiguously -contiguousness -continence -continency -continent -continental -Continentaler -continentalism -continentalist -continentality -Continentalize -continentally -continently -contingence -contingency -contingent -contingential -contingentialness -contingently -contingentness -continuable -continual -continuality -continually -continualness -continuance -continuancy -continuando -continuant -continuantly -continuate -continuately -continuateness -continuation -continuative -continuatively -continuativeness -continuator -continue -continued -continuedly -continuedness -continuer -continuingly -continuist -continuity -continuous -continuously -continuousness -continuum -contise -contline -conto -contorniate -contorsive -contort -Contortae -contorted -contortedly -contortedness -contortion -contortional -contortionate -contortioned -contortionist -contortionistic -contortive -contour -contourne -contra -contraband -contrabandage -contrabandery -contrabandism -contrabandist -contrabandista -contrabass -contrabassist -contrabasso -contracapitalist -contraception -contraceptionist -contraceptive -contracivil -contraclockwise -contract -contractable -contractant -contractation -contracted -contractedly -contractedness -contractee -contracter -contractibility -contractible -contractibleness -contractibly -contractile -contractility -contraction -contractional -contractionist -contractive -contractively -contractiveness -contractor -contractual -contractually -contracture -contractured -contradebt -contradict -contradictable -contradictedness -contradicter -contradiction -contradictional -contradictious -contradictiously -contradictiousness -contradictive -contradictively -contradictiveness -contradictor -contradictorily -contradictoriness -contradictory -contradiscriminate -contradistinct -contradistinction -contradistinctive -contradistinctively -contradistinctly -contradistinguish -contradivide -contrafacture -contrafagotto -contrafissura -contraflexure -contraflow -contrafocal -contragredience -contragredient -contrahent -contrail -contraindicate -contraindication -contraindicative -contralateral -contralto -contramarque -contranatural -contrantiscion -contraoctave -contraparallelogram -contraplex -contrapolarization -contrapone -contraponend -Contraposaune -contrapose -contraposit -contraposita -contraposition -contrapositive -contraprogressist -contraprop -contraproposal -contraption -contraptious -contrapuntal -contrapuntalist -contrapuntally -contrapuntist -contrapunto -contrarational -contraregular -contraregularity -contraremonstrance -contraremonstrant -contrarevolutionary -contrariant -contrariantly -contrariety -contrarily -contrariness -contrarious -contrariously -contrariousness -contrariwise -contrarotation -contrary -contrascriptural -contrast -contrastable -contrastably -contrastedly -contrastimulant -contrastimulation -contrastimulus -contrastingly -contrastive -contrastively -contrastment -contrasty -contrasuggestible -contratabular -contrate -contratempo -contratenor -contravalence -contravallation -contravariant -contravene -contravener -contravention -contraversion -contravindicate -contravindication -contrawise -contrayerva -contrectation -contreface -contrefort -contretemps -contributable -contribute -contribution -contributional -contributive -contributively -contributiveness -contributor -contributorial -contributorship -contributory -contrite -contritely -contriteness -contrition -contriturate -contrivance -contrivancy -contrive -contrivement -contriver -control -controllability -controllable -controllableness -controllably -controller -controllership -controlless -controllingly -controlment -controversial -controversialism -controversialist -controversialize -controversially -controversion -controversional -controversionalism -controversionalist -controversy -controvert -controverter -controvertible -controvertibly -controvertist -contubernal -contubernial -contubernium -contumacious -contumaciously -contumaciousness -contumacity -contumacy -contumelious -contumeliously -contumeliousness -contumely -contund -conturbation -contuse -contusion -contusioned -contusive -conubium -Conularia -conumerary -conumerous -conundrum -conundrumize -conurbation -conure -Conuropsis -Conurus -conus -conusable -conusance -conusant -conusee -conusor -conutrition -conuzee -conuzor -convalesce -convalescence -convalescency -convalescent -convalescently -convallamarin -Convallaria -Convallariaceae -convallariaceous -convallarin -convect -convection -convectional -convective -convectively -convector -convenable -convenably -convene -convenee -convener -convenership -convenience -conveniency -convenient -conveniently -convenientness -convent -conventical -conventically -conventicle -conventicler -conventicular -convention -conventional -conventionalism -conventionalist -conventionality -conventionalization -conventionalize -conventionally -conventionary -conventioner -conventionism -conventionist -conventionize -conventual -conventually -converge -convergement -convergence -convergency -convergent -convergescence -converging -conversable -conversableness -conversably -conversance -conversancy -conversant -conversantly -conversation -conversationable -conversational -conversationalist -conversationally -conversationism -conversationist -conversationize -conversative -converse -conversely -converser -conversibility -conversible -conversion -conversional -conversionism -conversionist -conversive -convert -converted -convertend -converter -convertibility -convertible -convertibleness -convertibly -converting -convertingness -convertise -convertism -convertite -convertive -convertor -conveth -convex -convexed -convexedly -convexedness -convexity -convexly -convexness -convey -conveyable -conveyal -conveyance -conveyancer -conveyancing -conveyer -convict -convictable -conviction -convictional -convictism -convictive -convictively -convictiveness -convictment -convictor -convince -convinced -convincedly -convincedness -convincement -convincer -convincibility -convincible -convincing -convincingly -convincingness -convival -convive -convivial -convivialist -conviviality -convivialize -convivially -convocant -convocate -convocation -convocational -convocationally -convocationist -convocative -convocator -convoke -convoker -Convoluta -convolute -convoluted -convolutely -convolution -convolutional -convolutionary -convolutive -convolve -convolvement -Convolvulaceae -convolvulaceous -convolvulad -convolvuli -convolvulic -convolvulin -convolvulinic -convolvulinolic -Convolvulus -convoy -convulsant -convulse -convulsedly -convulsibility -convulsible -convulsion -convulsional -convulsionary -convulsionism -convulsionist -convulsive -convulsively -convulsiveness -cony -conycatcher -conyrine -coo -cooba -coodle -cooee -cooer -coof -Coohee -cooing -cooingly -cooja -cook -cookable -cookbook -cookdom -cookee -cookeite -cooker -cookery -cookhouse -cooking -cookish -cookishly -cookless -cookmaid -cookout -cookroom -cookshack -cookshop -cookstove -cooky -cool -coolant -coolen -cooler -coolerman -coolheaded -coolheadedly -coolheadedness -coolhouse -coolibah -coolie -cooling -coolingly -coolingness -coolish -coolly -coolness -coolth -coolung -coolweed -coolwort -cooly -coom -coomb -coomy -coon -cooncan -coonily -cooniness -coonroot -coonskin -coontail -coontie -coony -coop -cooper -cooperage -Cooperia -coopering -coopery -cooree -Coorg -coorie -cooruptibly -Coos -cooser -coost -Coosuc -coot -cooter -cootfoot -coothay -cootie -cop -copa -copable -copacetic -copaene -copaiba -copaibic -Copaifera -Copaiva -copaivic -copaiye -copal -copalche -copalcocote -copaliferous -copalite -copalm -coparallel -coparcenary -coparcener -coparceny -coparent -copart -copartaker -copartner -copartnership -copartnery -coparty -copassionate -copastor -copastorate -copatain -copatentee -copatriot -copatron -copatroness -cope -Copehan -copei -Copelata -Copelatae -copelate -copellidine -copeman -copemate -copen -copending -copenetrate -Copeognatha -copepod -Copepoda -copepodan -copepodous -coper -coperception -coperiodic -Copernican -Copernicanism -Copernicia -coperta -copesman -copesmate -copestone -copetitioner -cophasal -Cophetua -cophosis -copiability -copiable -copiapite -copied -copier -copilot -coping -copiopia -copiopsia -copiosity -copious -copiously -copiousness -copis -copist -copita -coplaintiff -coplanar -coplanarity -copleased -coplotter -coploughing -coplowing -copolar -copolymer -copolymerization -copolymerize -coppaelite -copped -copper -copperas -copperbottom -copperer -copperhead -copperheadism -coppering -copperish -copperization -copperize -copperleaf -coppernose -coppernosed -copperplate -copperproof -coppersidesman -copperskin -coppersmith -coppersmithing -copperware -copperwing -copperworks -coppery -copperytailed -coppet -coppice -coppiced -coppicing -coppin -copping -copple -copplecrown -coppled -coppy -copr -copra -coprecipitate -coprecipitation -copremia -copremic -copresbyter -copresence -copresent -Coprides -Coprinae -coprincipal -coprincipate -Coprinus -coprisoner -coprodaeum -coproduce -coproducer -coprojector -coprolagnia -coprolagnist -coprolalia -coprolaliac -coprolite -coprolith -coprolitic -coprology -copromisor -copromoter -coprophagan -coprophagia -coprophagist -coprophagous -coprophagy -coprophilia -coprophiliac -coprophilic -coprophilism -coprophilous -coprophyte -coproprietor -coproprietorship -coprose -Coprosma -coprostasis -coprosterol -coprozoic -copse -copsewood -copsewooded -copsing -copsy -Copt -copter -Coptic -Coptis -copula -copulable -copular -copularium -copulate -copulation -copulative -copulatively -copulatory -copunctal -copurchaser -copus -copy -copybook -copycat -copygraph -copygraphed -copyhold -copyholder -copyholding -copyism -copyist -copyman -copyreader -copyright -copyrightable -copyrighter -copywise -coque -coquecigrue -coquelicot -coqueluche -coquet -coquetoon -coquetry -coquette -coquettish -coquettishly -coquettishness -coquicken -coquilla -Coquille -coquille -coquimbite -coquina -coquita -Coquitlam -coquito -cor -Cora -cora -Corabeca -Corabecan -corach -Coraciae -coracial -Coracias -Coracii -Coraciidae -coraciiform -Coraciiformes -coracine -coracle -coracler -coracoacromial -coracobrachial -coracobrachialis -coracoclavicular -coracocostal -coracohumeral -coracohyoid -coracoid -coracoidal -coracomandibular -coracomorph -Coracomorphae -coracomorphic -coracopectoral -coracoprocoracoid -coracoradialis -coracoscapular -coracovertebral -coradical -coradicate -corah -coraise -coral -coralberry -coralbush -coraled -coralflower -coralist -corallet -Corallian -corallic -Corallidae -corallidomous -coralliferous -coralliform -Coralligena -coralligenous -coralligerous -corallike -Corallina -Corallinaceae -corallinaceous -coralline -corallite -Corallium -coralloid -coralloidal -Corallorhiza -corallum -Corallus -coralroot -coralwort -coram -Corambis -coranto -corban -corbeau -corbeil -corbel -corbeling -corbicula -corbiculate -corbiculum -corbie -corbiestep -corbovinum -corbula -corcass -Corchorus -corcir -corcopali -Corcyraean -cord -cordage -Cordaitaceae -cordaitaceous -cordaitalean -Cordaitales -cordaitean -Cordaites -cordant -cordate -cordately -cordax -Cordeau -corded -cordel -Cordelia -Cordelier -cordeliere -cordelle -corder -Cordery -cordewane -Cordia -cordial -cordiality -cordialize -cordially -cordialness -cordiceps -cordicole -cordierite -cordies -cordiform -cordigeri -cordillera -cordilleran -cordiner -cording -cordite -corditis -cordleaf -cordmaker -cordoba -cordon -cordonnet -Cordovan -Cordula -corduroy -corduroyed -cordwain -cordwainer -cordwainery -cordwood -cordy -Cordyceps -cordyl -Cordylanthus -Cordyline -core -corebel -coreceiver -coreciprocal -corectome -corectomy -corector -cored -coredeem -coredeemer -coredemptress -coreductase -Coree -coreflexed -coregence -coregency -coregent -coregnancy -coregnant -coregonid -Coregonidae -coregonine -coregonoid -Coregonus -coreid -Coreidae -coreign -coreigner -corejoice -coreless -coreligionist -corella -corelysis -Corema -coremaker -coremaking -coremium -coremorphosis -corenounce -coreometer -Coreopsis -coreplastic -coreplasty -corer -coresidence -coresidual -coresign -coresonant -coresort -corespect -corespondency -corespondent -coretomy -coreveler -coreveller -corevolve -Corey -corf -Corfiote -Corflambo -corge -corgi -coriaceous -corial -coriamyrtin -coriander -coriandrol -Coriandrum -Coriaria -Coriariaceae -coriariaceous -coriin -Corimelaena -Corimelaenidae -Corin -corindon -Corineus -coring -Corinna -corinne -Corinth -Corinthian -Corinthianesque -Corinthianism -Corinthianize -Coriolanus -coriparian -corium -Corixa -Corixidae -cork -corkage -corkboard -corke -corked -corker -corkiness -corking -corkish -corkite -corkmaker -corkmaking -corkscrew -corkscrewy -corkwing -corkwood -corky -corm -Cormac -cormel -cormidium -cormoid -Cormophyta -cormophyte -cormophytic -cormorant -cormous -cormus -corn -Cornaceae -cornaceous -cornage -cornbell -cornberry -cornbin -cornbinks -cornbird -cornbole -cornbottle -cornbrash -corncake -corncob -corncracker -corncrib -corncrusher -corndodger -cornea -corneagen -corneal -cornein -corneitis -cornel -Cornelia -cornelian -Cornelius -cornemuse -corneocalcareous -corneosclerotic -corneosiliceous -corneous -corner -cornerbind -cornered -cornerer -cornerpiece -cornerstone -cornerways -cornerwise -cornet -cornetcy -cornettino -cornettist -corneule -corneum -cornfield -cornfloor -cornflower -corngrower -cornhouse -cornhusk -cornhusker -cornhusking -cornic -cornice -cornicle -corniculate -corniculer -corniculum -Corniferous -cornific -cornification -cornified -corniform -cornigerous -cornin -corning -corniplume -Cornish -Cornishman -cornland -cornless -cornloft -cornmaster -cornmonger -cornopean -cornpipe -cornrick -cornroot -cornstalk -cornstarch -cornstook -cornu -cornual -cornuate -cornuated -cornubianite -cornucopia -Cornucopiae -cornucopian -cornucopiate -cornule -cornulite -Cornulites -cornupete -Cornus -cornute -cornuted -cornutine -cornuto -cornwallis -cornwallite -corny -coroa -Coroado -corocleisis -corodiary -corodiastasis -corodiastole -corody -corol -corolla -corollaceous -corollarial -corollarially -corollary -corollate -corollated -corolliferous -corolliform -corollike -corolline -corollitic -corometer -corona -coronach -coronad -coronadite -coronae -coronagraph -coronagraphic -coronal -coronale -coronaled -coronally -coronamen -coronary -coronate -coronated -coronation -coronatorial -coroner -coronership -coronet -coroneted -coronetted -coronetty -coroniform -Coronilla -coronillin -coronion -coronitis -coronium -coronize -coronobasilar -coronofacial -coronofrontal -coronoid -Coronopus -coronule -coroparelcysis -coroplast -coroplasta -coroplastic -Coropo -coroscopy -corotomy -corozo -corp -corpora -corporal -corporalism -corporality -corporally -corporalship -corporas -corporate -corporately -corporateness -corporation -corporational -corporationer -corporationism -corporative -corporator -corporature -corporeal -corporealist -corporeality -corporealization -corporealize -corporeally -corporealness -corporeals -corporeity -corporeous -corporification -corporify -corporosity -corposant -corps -corpsbruder -corpse -corpsman -corpulence -corpulency -corpulent -corpulently -corpulentness -corpus -corpuscle -corpuscular -corpuscularian -corpuscularity -corpusculated -corpuscule -corpusculous -corpusculum -corrade -corradial -corradiate -corradiation -corral -corrasion -corrasive -Correa -correal -correality -correct -correctable -correctant -corrected -correctedness -correctible -correcting -correctingly -correction -correctional -correctionalist -correctioner -correctitude -corrective -correctively -correctiveness -correctly -correctness -corrector -correctorship -correctress -correctrice -corregidor -correlatable -correlate -correlated -correlation -correlational -correlative -correlatively -correlativeness -correlativism -correlativity -correligionist -corrente -correption -corresol -correspond -correspondence -correspondency -correspondent -correspondential -correspondentially -correspondently -correspondentship -corresponder -corresponding -correspondingly -corresponsion -corresponsive -corresponsively -corridor -corridored -corrie -Corriedale -corrige -corrigenda -corrigendum -corrigent -corrigibility -corrigible -corrigibleness -corrigibly -Corrigiola -Corrigiolaceae -corrival -corrivality -corrivalry -corrivalship -corrivate -corrivation -corrobboree -corroborant -corroborate -corroboration -corroborative -corroboratively -corroborator -corroboratorily -corroboratory -corroboree -corrode -corrodent -Corrodentia -corroder -corrodiary -corrodibility -corrodible -corrodier -corroding -corrosibility -corrosible -corrosibleness -corrosion -corrosional -corrosive -corrosively -corrosiveness -corrosivity -corrugate -corrugated -corrugation -corrugator -corrupt -corrupted -corruptedly -corruptedness -corrupter -corruptful -corruptibility -corruptible -corruptibleness -corrupting -corruptingly -corruption -corruptionist -corruptive -corruptively -corruptly -corruptness -corruptor -corruptress -corsac -corsage -corsaint -corsair -corse -corselet -corsepresent -corsesque -corset -corseting -corsetless -corsetry -Corsican -corsie -corsite -corta -Cortaderia -cortege -Cortes -cortex -cortez -cortical -cortically -corticate -corticated -corticating -cortication -cortices -corticiferous -corticiform -corticifugal -corticifugally -corticipetal -corticipetally -Corticium -corticoafferent -corticoefferent -corticoline -corticopeduncular -corticose -corticospinal -corticosterone -corticostriate -corticous -cortin -cortina -cortinarious -Cortinarius -cortinate -cortisone -cortlandtite -Corton -coruco -coruler -Coruminacan -corundophilite -corundum -corupay -coruscant -coruscate -coruscation -corver -corvette -corvetto -Corvidae -corviform -corvillosum -corvina -Corvinae -corvine -corvoid -Corvus -Cory -Corybant -Corybantian -corybantiasm -Corybantic -corybantic -Corybantine -corybantish -corybulbin -corybulbine -corycavamine -corycavidin -corycavidine -corycavine -Corycia -Corycian -corydalin -corydaline -Corydalis -corydine -Corydon -coryl -Corylaceae -corylaceous -corylin -Corylopsis -Corylus -corymb -corymbed -corymbiate -corymbiated -corymbiferous -corymbiform -corymbose -corymbous -corynebacterial -Corynebacterium -Coryneum -corynine -Corynocarpaceae -corynocarpaceous -Corynocarpus -Corypha -Coryphaena -coryphaenid -Coryphaenidae -coryphaenoid -Coryphaenoididae -coryphaeus -coryphee -coryphene -Coryphodon -coryphodont -coryphylly -corytuberine -coryza -cos -cosalite -cosaque -cosavior -coscet -Coscinodiscaceae -Coscinodiscus -coscinomancy -coscoroba -coseasonal -coseat -cosec -cosecant -cosech -cosectarian -cosectional -cosegment -coseism -coseismal -coseismic -cosenator -cosentiency -cosentient -coservant -cosession -coset -cosettler -cosh -cosharer -cosheath -cosher -cosherer -coshering -coshery -cosignatory -cosigner -cosignitary -cosily -cosinage -cosine -cosiness -cosingular -cosinusoid -Cosmati -cosmecology -cosmesis -cosmetic -cosmetical -cosmetically -cosmetician -cosmetiste -cosmetological -cosmetologist -cosmetology -cosmic -cosmical -cosmicality -cosmically -cosmism -cosmist -cosmocracy -cosmocrat -cosmocratic -cosmogenesis -cosmogenetic -cosmogenic -cosmogeny -cosmogonal -cosmogoner -cosmogonic -cosmogonical -cosmogonist -cosmogonize -cosmogony -cosmographer -cosmographic -cosmographical -cosmographically -cosmographist -cosmography -cosmolabe -cosmolatry -cosmologic -cosmological -cosmologically -cosmologist -cosmology -cosmometry -cosmopathic -cosmoplastic -cosmopoietic -cosmopolicy -cosmopolis -cosmopolitan -cosmopolitanism -cosmopolitanization -cosmopolitanize -cosmopolitanly -cosmopolite -cosmopolitic -cosmopolitical -cosmopolitics -cosmopolitism -cosmorama -cosmoramic -cosmorganic -cosmos -cosmoscope -cosmosophy -cosmosphere -cosmotellurian -cosmotheism -cosmotheist -cosmotheistic -cosmothetic -cosmotron -cosmozoan -cosmozoic -cosmozoism -cosonant -cosounding -cosovereign -cosovereignty -cospecies -cospecific -cosphered -cosplendor -cosplendour -coss -Cossack -Cossaean -cossas -cosse -cosset -cossette -cossid -Cossidae -cossnent -cossyrite -cost -costa -Costaea -costal -costalgia -costally -costander -Costanoan -costar -costard -Costata -costate -costated -costean -costeaning -costectomy -costellate -coster -costerdom -costermonger -costicartilage -costicartilaginous -costicervical -costiferous -costiform -costing -costipulator -costispinal -costive -costively -costiveness -costless -costlessness -costliness -costly -costmary -costoabdominal -costoapical -costocentral -costochondral -costoclavicular -costocolic -costocoracoid -costodiaphragmatic -costogenic -costoinferior -costophrenic -costopleural -costopneumopexy -costopulmonary -costoscapular -costosternal -costosuperior -costothoracic -costotome -costotomy -costotrachelian -costotransversal -costotransverse -costovertebral -costoxiphoid -costraight -costrel -costula -costulation -costume -costumer -costumery -costumic -costumier -costumiere -costuming -costumist -costusroot -cosubject -cosubordinate -cosuffer -cosufferer -cosuggestion -cosuitor -cosurety -cosustain -coswearer -cosy -cosymmedian -cot -cotangent -cotangential -cotarius -cotarnine -cotch -cote -coteful -coteline -coteller -cotemporane -cotemporanean -cotemporaneous -cotemporaneously -cotemporary -cotenancy -cotenant -cotenure -coterell -coterie -coterminous -Cotesian -coth -cothamore -cothe -cotheorist -cothish -cothon -cothurn -cothurnal -cothurnate -cothurned -cothurnian -cothurnus -cothy -cotidal -cotillage -cotillion -Cotinga -cotingid -Cotingidae -cotingoid -Cotinus -cotise -cotitular -cotland -cotman -coto -cotoin -Cotonam -Cotoneaster -cotonier -cotorment -cotoro -cotorture -Cotoxo -cotquean -cotraitor -cotransfuse -cotranslator -cotranspire -cotransubstantiate -cotrine -cotripper -cotrustee -cotset -cotsetla -cotsetle -cotta -cottabus -cottage -cottaged -cottager -cottagers -cottagey -cotte -cotted -cotter -cotterel -cotterite -cotterway -cottid -Cottidae -cottier -cottierism -cottiform -cottoid -cotton -cottonade -cottonbush -cottonee -cottoneer -cottoner -Cottonian -cottonization -cottonize -cottonless -cottonmouth -cottonocracy -Cottonopolis -cottonseed -cottontail -cottontop -cottonweed -cottonwood -cottony -Cottus -cotty -cotuit -cotula -cotunnite -Coturnix -cotutor -cotwin -cotwinned -cotwist -cotyla -cotylar -cotyledon -cotyledonal -cotyledonar -cotyledonary -cotyledonous -cotyliform -cotyligerous -cotyliscus -cotyloid -Cotylophora -cotylophorous -cotylopubic -cotylosacral -cotylosaur -Cotylosauria -cotylosaurian -cotype -Cotys -Cotyttia -couac -coucal -couch -couchancy -couchant -couched -couchee -coucher -couching -couchmaker -couchmaking -couchmate -couchy -coude -coudee -coue -Coueism -cougar -cough -cougher -coughroot -coughweed -coughwort -cougnar -coul -could -couldron -coulee -coulisse -coulomb -coulometer -coulterneb -coulure -couma -coumalic -coumalin -coumara -coumaran -coumarate -coumaric -coumarilic -coumarin -coumarinic -coumarone -coumarou -Coumarouna -council -councilist -councilman -councilmanic -councilor -councilorship -councilwoman -counderstand -counite -couniversal -counsel -counselable -counselee -counselful -counselor -counselorship -count -countable -countableness -countably -countdom -countenance -countenancer -counter -counterabut -counteraccusation -counteracquittance -counteract -counteractant -counteracter -counteracting -counteractingly -counteraction -counteractive -counteractively -counteractivity -counteractor -counteraddress -counteradvance -counteradvantage -counteradvice -counteradvise -counteraffirm -counteraffirmation -counteragency -counteragent -counteragitate -counteragitation -counteralliance -counterambush -counterannouncement -counteranswer -counterappeal -counterappellant -counterapproach -counterapse -counterarch -counterargue -counterargument -counterartillery -counterassertion -counterassociation -counterassurance -counterattack -counterattestation -counterattired -counterattraction -counterattractive -counterattractively -counteraverment -counteravouch -counteravouchment -counterbalance -counterbarrage -counterbase -counterbattery -counterbeating -counterbend -counterbewitch -counterbid -counterblast -counterblow -counterbond -counterborder -counterbore -counterboycott -counterbrace -counterbranch -counterbrand -counterbreastwork -counterbuff -counterbuilding -countercampaign -countercarte -countercause -counterchange -counterchanged -countercharge -countercharm -countercheck -countercheer -counterclaim -counterclaimant -counterclockwise -countercolored -countercommand -countercompetition -countercomplaint -countercompony -countercondemnation -counterconquest -counterconversion -countercouchant -countercoupe -countercourant -countercraft -countercriticism -countercross -countercry -countercurrent -countercurrently -countercurrentwise -counterdance -counterdash -counterdecision -counterdeclaration -counterdecree -counterdefender -counterdemand -counterdemonstration -counterdeputation -counterdesire -counterdevelopment -counterdifficulty -counterdigged -counterdike -counterdiscipline -counterdisengage -counterdisengagement -counterdistinction -counterdistinguish -counterdoctrine -counterdogmatism -counterdraft -counterdrain -counterdrive -counterearth -counterefficiency -countereffort -counterembattled -counterembowed -counterenamel -counterend -counterenergy -counterengagement -counterengine -counterenthusiasm -counterentry -counterequivalent -counterermine -counterespionage -counterestablishment -counterevidence -counterexaggeration -counterexcitement -counterexcommunication -counterexercise -counterexplanation -counterexposition -counterexpostulation -counterextend -counterextension -counterfact -counterfallacy -counterfaller -counterfeit -counterfeiter -counterfeitly -counterfeitment -counterfeitness -counterferment -counterfessed -counterfire -counterfix -counterflange -counterflashing -counterflight -counterflory -counterflow -counterflux -counterfoil -counterforce -counterformula -counterfort -counterfugue -countergabble -countergabion -countergambit -countergarrison -countergauge -countergauger -countergift -countergirded -counterglow -counterguard -counterhaft -counterhammering -counterhypothesis -counteridea -counterideal -counterimagination -counterimitate -counterimitation -counterimpulse -counterindentation -counterindented -counterindicate -counterindication -counterinfluence -counterinsult -counterintelligence -counterinterest -counterinterpretation -counterintrigue -counterinvective -counterirritant -counterirritate -counterirritation -counterjudging -counterjumper -counterlath -counterlathing -counterlatration -counterlaw -counterleague -counterlegislation -counterlife -counterlocking -counterlode -counterlove -counterly -countermachination -counterman -countermand -countermandable -countermaneuver -countermanifesto -countermarch -countermark -countermarriage -countermeasure -countermeet -countermessage -countermigration -countermine -countermission -countermotion -countermount -countermove -countermovement -countermure -countermutiny -counternaiant -counternarrative -counternatural -counternecromancy -counternoise -counternotice -counterobjection -counterobligation -counteroffensive -counteroffer -counteropening -counteropponent -counteropposite -counterorator -counterorder -counterorganization -counterpaled -counterpaly -counterpane -counterpaned -counterparadox -counterparallel -counterparole -counterparry -counterpart -counterpassant -counterpassion -counterpenalty -counterpendent -counterpetition -counterpicture -counterpillar -counterplan -counterplay -counterplayer -counterplea -counterplead -counterpleading -counterplease -counterplot -counterpoint -counterpointe -counterpointed -counterpoise -counterpoison -counterpole -counterponderate -counterpose -counterposition -counterposting -counterpotence -counterpotency -counterpotent -counterpractice -counterpray -counterpreach -counterpreparation -counterpressure -counterprick -counterprinciple -counterprocess -counterproject -counterpronunciamento -counterproof -counterpropaganda -counterpropagandize -counterprophet -counterproposal -counterproposition -counterprotection -counterprotest -counterprove -counterpull -counterpunch -counterpuncture -counterpush -counterquartered -counterquarterly -counterquery -counterquestion -counterquip -counterradiation -counterraid -counterraising -counterrampant -counterrate -counterreaction -counterreason -counterreckoning -counterrecoil -counterreconnaissance -counterrefer -counterreflected -counterreform -counterreformation -counterreligion -counterremonstrant -counterreply -counterreprisal -counterresolution -counterrestoration -counterretreat -counterrevolution -counterrevolutionary -counterrevolutionist -counterrevolutionize -counterriposte -counterroll -counterround -counterruin -countersale -countersalient -counterscale -counterscalloped -counterscarp -counterscoff -countersconce -counterscrutiny -countersea -counterseal -countersecure -countersecurity -counterselection -countersense -counterservice -countershade -countershaft -countershafting -countershear -countershine -countershout -counterside -countersiege -countersign -countersignal -countersignature -countersink -countersleight -counterslope -countersmile -countersnarl -counterspying -counterstain -counterstamp -counterstand -counterstatant -counterstatement -counterstatute -counterstep -counterstimulate -counterstimulation -counterstimulus -counterstock -counterstratagem -counterstream -counterstrike -counterstroke -counterstruggle -countersubject -countersuggestion -countersuit -countersun -countersunk -countersurprise -counterswing -countersworn -countersympathy -countersynod -countertack -countertail -countertally -countertaste -countertechnicality -countertendency -countertenor -counterterm -counterterror -countertheme -countertheory -counterthought -counterthreat -counterthrust -counterthwarting -countertierce -countertime -countertouch -countertraction -countertrades -countertransference -countertranslation -countertraverse -countertreason -countertree -countertrench -countertrespass -countertrippant -countertripping -countertruth -countertug -counterturn -counterturned -countertype -countervail -countervair -countervairy -countervallation -countervaunt -countervene -countervengeance -countervenom -countervibration -counterview -countervindication -countervolition -countervolley -countervote -counterwager -counterwall -counterwarmth -counterwave -counterweigh -counterweight -counterweighted -counterwheel -counterwill -counterwilling -counterwind -counterwitness -counterword -counterwork -counterworker -counterwrite -countess -countfish -counting -countinghouse -countless -countor -countrified -countrifiedness -country -countryfolk -countryman -countrypeople -countryseat -countryside -countryward -countrywoman -countship -county -coup -coupage -coupe -couped -coupee -coupelet -couper -couple -coupled -couplement -coupler -coupleress -couplet -coupleteer -coupling -coupon -couponed -couponless -coupstick -coupure -courage -courageous -courageously -courageousness -courager -courant -courante -courap -couratari -courb -courbache -courbaril -courbash -courge -courida -courier -couril -courlan -Cours -course -coursed -courser -coursing -court -courtbred -courtcraft -courteous -courteously -courteousness -courtepy -courter -courtesan -courtesanry -courtesanship -courtesy -courtezanry -courtezanship -courthouse -courtier -courtierism -courtierly -courtiership -courtin -courtless -courtlet -courtlike -courtliness -courtling -courtly -courtman -Courtney -courtroom -courtship -courtyard -courtzilite -couscous -couscousou -couseranite -cousin -cousinage -cousiness -cousinhood -cousinly -cousinry -cousinship -cousiny -coussinet -coustumier -coutel -coutelle -couter -Coutet -couth -couthie -couthily -couthiness -couthless -coutil -coutumier -couvade -couxia -covado -covalence -covalent -Covarecan -Covarecas -covariable -covariance -covariant -covariation -covassal -cove -coved -covelline -covellite -covenant -covenantal -covenanted -covenantee -Covenanter -covenanter -covenanting -covenantor -covent -coventrate -coventrize -Coventry -cover -coverage -coveralls -coverchief -covercle -covered -coverer -covering -coverless -coverlet -coverlid -coversed -coverside -coversine -coverslut -covert -covertical -covertly -covertness -coverture -covet -covetable -coveter -coveting -covetingly -covetiveness -covetous -covetously -covetousness -covey -covibrate -covibration -covid -Coviello -covillager -Covillea -covin -coving -covinous -covinously -covisit -covisitor -covite -covolume -covotary -cow -cowal -Cowan -coward -cowardice -cowardliness -cowardly -cowardness -cowardy -cowbane -cowbell -cowberry -cowbind -cowbird -cowboy -cowcatcher -cowdie -coween -cower -cowfish -cowgate -cowgram -cowhage -cowheart -cowhearted -cowheel -cowherb -cowherd -cowhide -cowhiding -cowhorn -Cowichan -cowish -cowitch -cowkeeper -cowl -cowle -cowled -cowleech -cowleeching -cowlick -cowlicks -cowlike -cowling -Cowlitz -cowlstaff -cowman -cowpath -cowpea -cowpen -Cowperian -cowperitis -cowpock -cowpox -cowpuncher -cowquake -cowrie -cowroid -cowshed -cowskin -cowslip -cowslipped -cowsucker -cowtail -cowthwort -cowtongue -cowweed -cowwheat -cowy -cowyard -cox -coxa -coxal -coxalgia -coxalgic -coxankylometer -coxarthritis -coxarthrocace -coxarthropathy -coxbones -coxcomb -coxcombess -coxcombhood -coxcombic -coxcombical -coxcombicality -coxcombically -coxcombity -coxcombry -coxcomby -coxcomical -coxcomically -coxite -coxitis -coxocerite -coxoceritic -coxodynia -coxofemoral -coxopodite -coxswain -coxy -coy -coyan -coydog -coyish -coyishness -coyly -coyness -coynye -coyo -coyol -coyote -Coyotero -coyotillo -coyoting -coypu -coyure -coz -coze -cozen -cozenage -cozener -cozening -cozeningly -cozier -cozily -coziness -cozy -crab -crabbed -crabbedly -crabbedness -crabber -crabbery -crabbing -crabby -crabcatcher -crabeater -craber -crabhole -crablet -crablike -crabman -crabmill -crabsidle -crabstick -crabweed -crabwise -crabwood -Cracca -Cracidae -Cracinae -crack -crackable -crackajack -crackbrain -crackbrained -crackbrainedness -crackdown -cracked -crackedness -cracker -crackerberry -crackerjack -crackers -crackhemp -crackiness -cracking -crackjaw -crackle -crackled -crackless -crackleware -crackling -crackly -crackmans -cracknel -crackpot -crackskull -cracksman -cracky -cracovienne -craddy -cradge -cradle -cradleboard -cradlechild -cradlefellow -cradleland -cradlelike -cradlemaker -cradlemaking -cradleman -cradlemate -cradler -cradleside -cradlesong -cradletime -cradling -Cradock -craft -craftily -craftiness -craftless -craftsman -craftsmanship -craftsmaster -craftswoman -craftwork -craftworker -crafty -crag -craggan -cragged -craggedness -craggily -cragginess -craggy -craglike -cragsman -cragwork -craichy -Craig -craigmontite -crain -craisey -craizey -crajuru -crake -crakefeet -crakow -cram -cramasie -crambambulee -crambambuli -Crambe -crambe -cramberry -crambid -Crambidae -Crambinae -cramble -crambly -crambo -Crambus -crammer -cramp -cramped -crampedness -cramper -crampet -crampfish -cramping -crampingly -crampon -cramponnee -crampy -cran -cranage -cranberry -crance -crandall -crandallite -crane -cranelike -craneman -craner -cranesman -craneway -craney -Crania -crania -craniacromial -craniad -cranial -cranially -cranian -Craniata -craniate -cranic -craniectomy -craniocele -craniocerebral -cranioclasis -cranioclasm -cranioclast -cranioclasty -craniodidymus -craniofacial -craniognomic -craniognomy -craniognosy -craniograph -craniographer -craniography -craniological -craniologically -craniologist -craniology -craniomalacia -craniomaxillary -craniometer -craniometric -craniometrical -craniometrically -craniometrist -craniometry -craniopagus -craniopathic -craniopathy -craniopharyngeal -craniophore -cranioplasty -craniopuncture -craniorhachischisis -craniosacral -cranioschisis -cranioscopical -cranioscopist -cranioscopy -craniospinal -craniostenosis -craniostosis -Craniota -craniotabes -craniotome -craniotomy -craniotopography -craniotympanic -craniovertebral -cranium -crank -crankbird -crankcase -cranked -cranker -crankery -crankily -crankiness -crankle -crankless -crankly -crankman -crankous -crankpin -crankshaft -crankum -cranky -crannage -crannied -crannock -crannog -crannoger -cranny -cranreuch -crantara -crants -crap -crapaud -crapaudine -crape -crapefish -crapehanger -crapelike -crappie -crappin -crapple -crappo -craps -crapshooter -crapulate -crapulence -crapulent -crapulous -crapulously -crapulousness -crapy -craquelure -crare -crash -crasher -crasis -craspedal -craspedodromous -craspedon -Craspedota -craspedotal -craspedote -crass -crassamentum -crassier -crassilingual -Crassina -crassitude -crassly -crassness -Crassula -Crassulaceae -crassulaceous -Crataegus -Crataeva -cratch -cratchens -cratches -crate -crateful -cratemaker -cratemaking -crateman -crater -crateral -cratered -Craterellus -Craterid -crateriform -crateris -craterkin -craterless -craterlet -craterlike -craterous -craticular -Cratinean -cratometer -cratometric -cratometry -craunch -craunching -craunchingly -cravat -crave -craven -Cravenette -cravenette -cravenhearted -cravenly -cravenness -craver -craving -cravingly -cravingness -cravo -craw -crawberry -crawdad -crawfish -crawfoot -crawful -crawl -crawler -crawlerize -crawley -crawleyroot -crawling -crawlingly -crawlsome -crawly -crawm -crawtae -Crawthumper -Crax -crayer -crayfish -crayon -crayonist -crayonstone -craze -crazed -crazedly -crazedness -crazily -craziness -crazingmill -crazy -crazycat -crazyweed -crea -creagh -creaght -creak -creaker -creakily -creakiness -creakingly -creaky -cream -creambush -creamcake -creamcup -creamer -creamery -creameryman -creamfruit -creamily -creaminess -creamless -creamlike -creammaker -creammaking -creamometer -creamsacs -creamware -creamy -creance -creancer -creant -crease -creaseless -creaser -creashaks -creasing -creasy -creat -creatable -create -createdness -creatic -creatine -creatinephosphoric -creatinine -creatininemia -creatinuria -creation -creational -creationary -creationism -creationist -creationistic -creative -creatively -creativeness -creativity -creatophagous -creator -creatorhood -creatorrhea -creatorship -creatotoxism -creatress -creatrix -creatural -creature -creaturehood -creatureless -creatureliness -creatureling -creaturely -creatureship -creaturize -crebricostate -crebrisulcate -crebrity -crebrous -creche -creddock -credence -credencive -credenciveness -credenda -credensive -credensiveness -credent -credential -credently -credenza -credibility -credible -credibleness -credibly -credit -creditability -creditable -creditableness -creditably -creditive -creditless -creditor -creditorship -creditress -creditrix -crednerite -Credo -credulity -credulous -credulously -credulousness -Cree -cree -creed -creedal -creedalism -creedalist -creeded -creedist -creedite -creedless -creedlessness -creedmore -creedsman -Creek -creek -creeker -creekfish -creekside -creekstuff -creeky -creel -creeler -creem -creen -creep -creepage -creeper -creepered -creeperless -creephole -creepie -creepiness -creeping -creepingly -creepmouse -creepmousy -creepy -creese -creesh -creeshie -creeshy -creirgist -cremaster -cremasterial -cremasteric -cremate -cremation -cremationism -cremationist -cremator -crematorial -crematorium -crematory -crembalum -cremnophobia -cremocarp -cremometer -cremone -cremor -cremorne -cremule -crena -crenate -crenated -crenately -crenation -crenature -crenel -crenelate -crenelated -crenelation -crenele -creneled -crenelet -crenellate -crenellation -crenic -crenitic -crenology -crenotherapy -Crenothrix -crenula -crenulate -crenulated -crenulation -creodont -Creodonta -creole -creoleize -creolian -Creolin -creolism -creolization -creolize -creophagia -creophagism -creophagist -creophagous -creophagy -creosol -creosote -creosoter -creosotic -crepance -crepe -crepehanger -Crepidula -crepine -crepiness -Crepis -crepitaculum -crepitant -crepitate -crepitation -crepitous -crepitus -crepon -crept -crepuscle -crepuscular -crepuscule -crepusculine -crepusculum -crepy -cresamine -crescendo -crescent -crescentade -crescentader -Crescentia -crescentic -crescentiform -crescentlike -crescentoid -crescentwise -crescive -crescograph -crescographic -cresegol -cresol -cresolin -cresorcinol -cresotate -cresotic -cresotinic -cresoxide -cresoxy -cresphontes -cress -cressed -cresselle -cresset -Cressida -cresson -cressweed -cresswort -cressy -crest -crested -crestfallen -crestfallenly -crestfallenness -cresting -crestless -crestline -crestmoreite -cresyl -cresylate -cresylene -cresylic -cresylite -creta -Cretaceous -cretaceous -cretaceously -Cretacic -Cretan -Crete -cretefaction -Cretic -cretic -cretification -cretify -cretin -cretinic -cretinism -cretinization -cretinize -cretinoid -cretinous -cretion -cretionary -Cretism -cretonne -crevalle -crevasse -crevice -creviced -crew -crewel -crewelist -crewellery -crewelwork -crewer -crewless -crewman -Crex -crib -cribbage -cribber -cribbing -cribble -cribellum -cribo -cribral -cribrate -cribrately -cribration -cribriform -cribrose -cribwork -cric -Cricetidae -cricetine -Cricetus -crick -cricket -cricketer -cricketing -crickety -crickey -crickle -cricoarytenoid -cricoid -cricopharyngeal -cricothyreoid -cricothyreotomy -cricothyroid -cricothyroidean -cricotomy -cricotracheotomy -Cricotus -cried -crier -criey -crig -crile -crime -Crimean -crimeful -crimeless -crimelessness -crimeproof -criminal -criminaldom -criminalese -criminalism -criminalist -criminalistic -criminalistician -criminalistics -criminality -criminally -criminalness -criminaloid -criminate -crimination -criminative -criminator -criminatory -crimine -criminogenesis -criminogenic -criminologic -criminological -criminologist -criminology -criminosis -criminous -criminously -criminousness -crimogenic -crimp -crimpage -crimper -crimping -crimple -crimpness -crimpy -crimson -crimsonly -crimsonness -crimsony -crin -crinal -crinanite -crinated -crinatory -crine -crined -crinet -cringe -cringeling -cringer -cringing -cringingly -cringingness -cringle -crinicultural -criniculture -criniferous -Criniger -crinigerous -criniparous -crinite -crinitory -crinivorous -crink -crinkle -crinkleroot -crinkly -crinoid -crinoidal -Crinoidea -crinoidean -crinoline -crinose -crinosity -crinula -Crinum -criobolium -criocephalus -Crioceras -crioceratite -crioceratitic -Crioceris -criophore -Criophoros -criosphinx -cripes -crippingly -cripple -crippledom -crippleness -crippler -crippling -cripply -Cris -crises -crisic -crisis -crisp -crispate -crispated -crispation -crispature -crisped -crisper -crispily -Crispin -crispine -crispiness -crisping -crisply -crispness -crispy -criss -crissal -crisscross -crissum -crista -cristate -Cristatella -Cristi -cristiform -Cristina -Cristineaux -Cristino -Cristispira -Cristivomer -cristobalite -Cristopher -critch -criteria -criteriology -criterion -criterional -criterium -crith -Crithidia -crithmene -crithomancy -critic -critical -criticality -critically -criticalness -criticaster -criticasterism -criticastry -criticisable -criticism -criticist -criticizable -criticize -criticizer -criticizingly -critickin -criticship -criticule -critique -critling -crizzle -cro -croak -Croaker -croaker -croakily -croakiness -croaky -Croat -Croatan -Croatian -croc -Crocanthemum -crocard -croceic -crocein -croceine -croceous -crocetin -croche -crochet -crocheter -crocheting -croci -crocidolite -Crocidura -crocin -crock -crocker -crockery -crockeryware -crocket -crocketed -crocky -crocodile -Crocodilia -crocodilian -Crocodilidae -crocodiline -crocodilite -crocodiloid -Crocodilus -Crocodylidae -Crocodylus -crocoisite -crocoite -croconate -croconic -Crocosmia -Crocus -crocus -crocused -croft -crofter -crofterization -crofterize -crofting -croftland -croisette -croissante -Crokinole -Crom -cromaltite -crome -Cromer -Cromerian -cromfordite -cromlech -cromorna -cromorne -Cromwell -Cromwellian -Cronartium -crone -croneberry -cronet -Cronian -cronish -cronk -cronkness -cronstedtite -crony -crood -croodle -crook -crookback -crookbacked -crookbill -crookbilled -crooked -crookedly -crookedness -crooken -crookesite -crookfingered -crookheaded -crookkneed -crookle -crooklegged -crookneck -crooknecked -crooknosed -crookshouldered -crooksided -crooksterned -crooktoothed -crool -Croomia -croon -crooner -crooning -crooningly -crop -crophead -cropland -cropman -croppa -cropper -croppie -cropplecrown -croppy -cropshin -cropsick -cropsickness -cropweed -croquet -croquette -crore -crosa -Crosby -crosier -crosiered -crosnes -cross -crossability -crossable -crossarm -crossband -crossbar -crossbeak -crossbeam -crossbelt -crossbill -crossbolt -crossbolted -crossbones -crossbow -crossbowman -crossbred -crossbreed -crosscurrent -crosscurrented -crosscut -crosscutter -crosscutting -crosse -crossed -crosser -crossette -crossfall -crossfish -crossflow -crossflower -crossfoot -crosshackle -crosshand -crosshatch -crosshaul -crosshauling -crosshead -crossing -crossite -crossjack -crosslegs -crosslet -crossleted -crosslight -crosslighted -crossline -crossly -crossness -crossopodia -crossopterygian -Crossopterygii -Crossosoma -Crossosomataceae -crossosomataceous -crossover -crosspatch -crosspath -crosspiece -crosspoint -crossrail -crossroad -crossroads -crossrow -crossruff -crosstail -crosstie -crosstied -crosstoes -crosstrack -crosstree -crosswalk -crossway -crossways -crossweb -crossweed -crosswise -crossword -crosswort -crostarie -crotal -Crotalaria -crotalic -Crotalidae -crotaliform -Crotalinae -crotaline -crotalism -crotalo -crotaloid -crotalum -Crotalus -crotaphic -crotaphion -crotaphite -crotaphitic -Crotaphytus -crotch -crotched -crotchet -crotcheteer -crotchetiness -crotchety -crotchy -crotin -Croton -crotonaldehyde -crotonate -crotonic -crotonization -crotonyl -crotonylene -Crotophaga -crottels -crottle -crotyl -crouch -crouchant -crouched -croucher -crouching -crouchingly -crounotherapy -croup -croupade -croupal -croupe -crouperbush -croupier -croupily -croupiness -croupous -croupy -crouse -crousely -crout -croute -crouton -crow -crowbait -crowbar -crowberry -crowbill -crowd -crowded -crowdedly -crowdedness -crowder -crowdweed -crowdy -crower -crowflower -crowfoot -crowfooted -crowhop -crowing -crowingly -crowkeeper -crowl -crown -crownbeard -crowned -crowner -crownless -crownlet -crownling -crownmaker -crownwork -crownwort -crowshay -crowstep -crowstepped -crowstick -crowstone -crowtoe -croy -croyden -croydon -croze -crozer -crozzle -crozzly -crubeen -cruce -cruces -crucethouse -cruche -crucial -cruciality -crucially -crucian -Crucianella -cruciate -cruciately -cruciation -crucible -Crucibulum -crucifer -Cruciferae -cruciferous -crucificial -crucified -crucifier -crucifix -crucifixion -cruciform -cruciformity -cruciformly -crucify -crucigerous -crucilly -crucily -cruck -crude -crudely -crudeness -crudity -crudwort -cruel -cruelhearted -cruelize -cruelly -cruelness -cruels -cruelty -cruent -cruentation -cruet -cruety -cruise -cruiser -cruisken -cruive -cruller -crum -crumb -crumbable -crumbcloth -crumber -crumble -crumblement -crumblet -crumbliness -crumblingness -crumblings -crumbly -crumby -crumen -crumenal -crumlet -crummie -crummier -crummiest -crummock -crummy -crump -crumper -crumpet -crumple -crumpled -crumpler -crumpling -crumply -crumpy -crunch -crunchable -crunchiness -crunching -crunchingly -crunchingness -crunchweed -crunchy -crunk -crunkle -crunodal -crunode -crunt -cruor -crupper -crural -crureus -crurogenital -cruroinguinal -crurotarsal -crus -crusade -crusader -crusado -Crusca -cruse -crush -crushability -crushable -crushed -crusher -crushing -crushingly -crusie -crusily -crust -crusta -Crustacea -crustaceal -crustacean -crustaceological -crustaceologist -crustaceology -crustaceous -crustade -crustal -crustalogical -crustalogist -crustalogy -crustate -crustated -crustation -crusted -crustedly -cruster -crustific -crustification -crustily -crustiness -crustless -crustose -crustosis -crusty -crutch -crutched -crutcher -crutching -crutchlike -cruth -crutter -crux -cruzeiro -cry -cryable -cryaesthesia -cryalgesia -cryanesthesia -crybaby -cryesthesia -crying -cryingly -crymodynia -crymotherapy -cryoconite -cryogen -cryogenic -cryogenics -cryogeny -cryohydrate -cryohydric -cryolite -cryometer -cryophile -cryophilic -cryophoric -cryophorus -cryophyllite -cryophyte -cryoplankton -cryoscope -cryoscopic -cryoscopy -cryosel -cryostase -cryostat -crypt -crypta -cryptal -cryptamnesia -cryptamnesic -cryptanalysis -cryptanalyst -cryptarch -cryptarchy -crypted -Crypteronia -Crypteroniaceae -cryptesthesia -cryptesthetic -cryptic -cryptical -cryptically -cryptoagnostic -cryptobatholithic -cryptobranch -Cryptobranchia -Cryptobranchiata -cryptobranchiate -Cryptobranchidae -Cryptobranchus -cryptocarp -cryptocarpic -cryptocarpous -Cryptocarya -Cryptocephala -cryptocephalous -Cryptocerata -cryptocerous -cryptoclastic -Cryptocleidus -cryptococci -cryptococcic -Cryptococcus -cryptococcus -cryptocommercial -cryptocrystalline -cryptocrystallization -cryptodeist -Cryptodira -cryptodiran -cryptodire -cryptodirous -cryptodouble -cryptodynamic -cryptogam -Cryptogamia -cryptogamian -cryptogamic -cryptogamical -cryptogamist -cryptogamous -cryptogamy -cryptogenetic -cryptogenic -cryptogenous -Cryptoglaux -cryptoglioma -cryptogram -Cryptogramma -cryptogrammatic -cryptogrammatical -cryptogrammatist -cryptogrammic -cryptograph -cryptographal -cryptographer -cryptographic -cryptographical -cryptographically -cryptographist -cryptography -cryptoheresy -cryptoheretic -cryptoinflationist -cryptolite -cryptologist -cryptology -cryptolunatic -cryptomere -Cryptomeria -cryptomerous -cryptomnesia -cryptomnesic -cryptomonad -Cryptomonadales -Cryptomonadina -cryptonema -Cryptonemiales -cryptoneurous -cryptonym -cryptonymous -cryptopapist -cryptoperthite -Cryptophagidae -cryptophthalmos -Cryptophyceae -cryptophyte -cryptopine -cryptoporticus -Cryptoprocta -cryptoproselyte -cryptoproselytism -cryptopyic -cryptopyrrole -cryptorchid -cryptorchidism -cryptorchis -Cryptorhynchus -cryptorrhesis -cryptorrhetic -cryptoscope -cryptoscopy -cryptosplenetic -Cryptostegia -cryptostoma -Cryptostomata -cryptostomate -cryptostome -Cryptotaenia -cryptous -cryptovalence -cryptovalency -cryptozonate -Cryptozonia -cryptozygosity -cryptozygous -Crypturi -Crypturidae -crystal -crystallic -crystalliferous -crystalliform -crystalligerous -crystallin -crystalline -crystallinity -crystallite -crystallitic -crystallitis -crystallizability -crystallizable -crystallization -crystallize -crystallized -crystallizer -crystalloblastic -crystallochemical -crystallochemistry -crystallogenesis -crystallogenetic -crystallogenic -crystallogenical -crystallogeny -crystallogram -crystallographer -crystallographic -crystallographical -crystallographically -crystallography -crystalloid -crystalloidal -crystallology -crystalloluminescence -crystallomagnetic -crystallomancy -crystallometric -crystallometry -crystallophyllian -crystallose -crystallurgy -crystalwort -crystic -crystograph -crystoleum -Crystolon -crystosphene -csardas -Ctenacanthus -ctene -ctenidial -ctenidium -cteniform -Ctenocephalus -ctenocyst -ctenodactyl -Ctenodipterini -ctenodont -Ctenodontidae -Ctenodus -ctenoid -ctenoidean -Ctenoidei -ctenoidian -ctenolium -Ctenophora -ctenophoral -ctenophoran -ctenophore -ctenophoric -ctenophorous -Ctenoplana -Ctenostomata -ctenostomatous -ctenostome -ctetology -cuadra -Cuailnge -cuapinole -cuarenta -cuarta -cuarteron -cuartilla -cuartillo -cub -Cuba -cubage -Cuban -cubangle -cubanite -Cubanize -cubatory -cubature -cubbing -cubbish -cubbishly -cubbishness -cubby -cubbyhole -cubbyhouse -cubbyyew -cubdom -cube -cubeb -cubelet -Cubelium -cuber -cubhood -cubi -cubic -cubica -cubical -cubically -cubicalness -cubicity -cubicle -cubicly -cubicone -cubicontravariant -cubicovariant -cubicular -cubiculum -cubiform -cubism -cubist -cubit -cubital -cubitale -cubited -cubitiere -cubito -cubitocarpal -cubitocutaneous -cubitodigital -cubitometacarpal -cubitopalmar -cubitoplantar -cubitoradial -cubitus -cubmaster -cubocalcaneal -cuboctahedron -cubocube -cubocuneiform -cubododecahedral -cuboid -cuboidal -cuboides -cubomancy -Cubomedusae -cubomedusan -cubometatarsal -cubonavicular -Cuchan -Cuchulainn -cuck -cuckhold -cuckold -cuckoldom -cuckoldry -cuckoldy -cuckoo -cuckooflower -cuckoomaid -cuckoopint -cuckoopintle -cuckstool -cucoline -Cucujid -Cucujidae -Cucujus -Cuculi -Cuculidae -cuculiform -Cuculiformes -cuculine -cuculla -cucullaris -cucullate -cucullately -cuculliform -cucullus -cuculoid -Cuculus -Cucumaria -Cucumariidae -cucumber -cucumiform -Cucumis -cucurbit -Cucurbita -Cucurbitaceae -cucurbitaceous -cucurbite -cucurbitine -cud -cudava -cudbear -cudden -cuddle -cuddleable -cuddlesome -cuddly -Cuddy -cuddy -cuddyhole -cudgel -cudgeler -cudgerie -cudweed -cue -cueball -cueca -cueist -cueman -cuemanship -cuerda -cuesta -Cueva -cuff -cuffer -cuffin -cuffy -cuffyism -cuggermugger -cuichunchulli -cuinage -cuir -cuirass -cuirassed -cuirassier -cuisinary -cuisine -cuissard -cuissart -cuisse -cuissen -cuisten -Cuitlateco -cuittikin -Cujam -cuke -Culavamsa -culbut -Culdee -culebra -culet -culeus -Culex -culgee -culicid -Culicidae -culicidal -culicide -culiciform -culicifugal -culicifuge -Culicinae -culicine -Culicoides -culilawan -culinarily -culinary -cull -culla -cullage -Cullen -culler -cullet -culling -cullion -cullis -cully -culm -culmen -culmicolous -culmiferous -culmigenous -culminal -culminant -culminate -culmination -culmy -culotte -culottes -culottic -culottism -culpa -culpability -culpable -culpableness -culpably -culpatory -culpose -culprit -cult -cultch -cultellation -cultellus -culteranismo -cultic -cultigen -cultirostral -Cultirostres -cultish -cultism -cultismo -cultist -cultivability -cultivable -cultivably -cultivar -cultivatability -cultivatable -cultivate -cultivated -cultivation -cultivator -cultrate -cultrated -cultriform -cultrirostral -Cultrirostres -cultual -culturable -cultural -culturally -culture -cultured -culturine -culturist -culturization -culturize -culturological -culturologically -culturologist -culturology -cultus -culver -culverfoot -culverhouse -culverin -culverineer -culverkey -culvert -culvertage -culverwort -cum -Cumacea -cumacean -cumaceous -Cumaean -cumal -cumaldehyde -Cumanagoto -cumaphyte -cumaphytic -cumaphytism -Cumar -cumay -cumbent -cumber -cumberer -cumberlandite -cumberless -cumberment -cumbersome -cumbersomely -cumbersomeness -cumberworld -cumbha -cumbly -cumbraite -cumbrance -cumbre -Cumbrian -cumbrous -cumbrously -cumbrousness -cumbu -cumene -cumengite -cumenyl -cumflutter -cumhal -cumic -cumidin -cumidine -cumin -cuminal -cuminic -cuminoin -cuminol -cuminole -cuminseed -cuminyl -cummer -cummerbund -cummin -cummingtonite -cumol -cump -cumshaw -cumulant -cumular -cumulate -cumulately -cumulation -cumulatist -cumulative -cumulatively -cumulativeness -cumuli -cumuliform -cumulite -cumulophyric -cumulose -cumulous -cumulus -cumyl -Cuna -cunabular -Cunan -Cunarder -Cunas -cunctation -cunctatious -cunctative -cunctator -cunctatorship -cunctatury -cunctipotent -cundeamor -cuneal -cuneate -cuneately -cuneatic -cuneator -cuneiform -cuneiformist -cuneocuboid -cuneonavicular -cuneoscaphoid -cunette -cuneus -cungeboi -cunicular -cuniculus -cunila -cunjah -cunjer -cunjevoi -cunner -cunnilinctus -cunnilingus -cunning -Cunninghamia -cunningly -cunningness -Cunonia -Cunoniaceae -cunoniaceous -cunye -Cunza -Cuon -cuorin -cup -Cupania -cupay -cupbearer -cupboard -cupcake -cupel -cupeler -cupellation -cupflower -cupful -Cuphea -cuphead -cupholder -Cupid -cupidinous -cupidity -cupidon -cupidone -cupless -cupmaker -cupmaking -cupman -cupmate -cupola -cupolaman -cupolar -cupolated -cupped -cupper -cupping -cuppy -cuprammonia -cuprammonium -cupreine -cuprene -cupreous -Cupressaceae -cupressineous -Cupressinoxylon -Cupressus -cupric -cupride -cupriferous -cuprite -cuproammonium -cuprobismutite -cuprocyanide -cuprodescloizite -cuproid -cuproiodargyrite -cupromanganese -cupronickel -cuproplumbite -cuproscheelite -cuprose -cuprosilicon -cuprotungstite -cuprous -cuprum -cupseed -cupstone -cupula -cupulate -cupule -Cupuliferae -cupuliferous -cupuliform -cur -curability -curable -curableness -curably -curacao -curacy -curare -curarine -curarization -curarize -curassow -curatage -curate -curatel -curateship -curatess -curatial -curatic -curation -curative -curatively -curativeness -curatize -curatolatry -curator -curatorial -curatorium -curatorship -curatory -curatrix -Curavecan -curb -curbable -curber -curbing -curbless -curblike -curbstone -curbstoner -curby -curcas -curch -curcuddoch -Curculio -curculionid -Curculionidae -curculionist -Curcuma -curcumin -curd -curdiness -curdle -curdler -curdly -curdwort -curdy -cure -cureless -curelessly -curemaster -curer -curettage -curette -curettement -curfew -curial -curialism -curialist -curialistic -curiality -curiate -Curiatii -curiboca -curie -curiescopy -curietherapy -curin -curine -curing -curio -curiologic -curiologically -curiologics -curiology -curiomaniac -curiosa -curiosity -curioso -curious -curiously -curiousness -curite -Curitis -curium -curl -curled -curledly -curledness -curler -curlew -curlewberry -curlicue -curliewurly -curlike -curlily -curliness -curling -curlingly -curlpaper -curly -curlycue -curlyhead -curlylocks -curmudgeon -curmudgeonery -curmudgeonish -curmudgeonly -curmurring -curn -curney -curnock -curple -curr -currach -currack -curragh -currant -curratow -currawang -currency -current -currently -currentness -currentwise -curricle -curricula -curricular -curricularization -curricularize -curriculum -curried -currier -curriery -currish -currishly -currishness -curry -currycomb -curryfavel -Cursa -cursal -curse -cursed -cursedly -cursedness -curser -curship -cursitor -cursive -cursively -cursiveness -cursor -cursorary -Cursores -Cursoria -cursorial -Cursoriidae -cursorily -cursoriness -cursorious -Cursorius -cursory -curst -curstful -curstfully -curstly -curstness -cursus -Curt -curt -curtail -curtailed -curtailedly -curtailer -curtailment -curtain -curtaining -curtainless -curtainwise -curtal -Curtana -curtate -curtation -curtesy -curtilage -Curtis -Curtise -curtly -curtness -curtsy -curua -curuba -Curucaneca -Curucanecan -curucucu -curule -Curuminaca -Curuminacan -Curupira -cururo -curvaceous -curvaceousness -curvacious -curvant -curvate -curvation -curvature -curve -curved -curvedly -curvedness -curver -curvesome -curvesomeness -curvet -curvicaudate -curvicostate -curvidentate -curvifoliate -curviform -curvilineal -curvilinear -curvilinearity -curvilinearly -curvimeter -curvinervate -curvinerved -curvirostral -Curvirostres -curviserial -curvital -curvity -curvograph -curvometer -curvous -curvulate -curvy -curwhibble -curwillet -cuscohygrine -cusconine -Cuscus -cuscus -Cuscuta -Cuscutaceae -cuscutaceous -cusec -cuselite -cush -cushag -cushat -cushaw -cushewbird -cushion -cushioned -cushionflower -cushionless -cushionlike -cushiony -Cushite -Cushitic -cushlamochree -cushy -cusie -cusinero -cusk -cusp -cuspal -cusparidine -cusparine -cuspate -cusped -cuspid -cuspidal -cuspidate -cuspidation -cuspidine -cuspidor -cuspule -cuss -cussed -cussedly -cussedness -cusser -cusso -custard -custerite -custodee -custodes -custodial -custodiam -custodian -custodianship -custodier -custody -custom -customable -customarily -customariness -customary -customer -customhouse -customs -custumal -cut -cutaneal -cutaneous -cutaneously -cutaway -cutback -cutch -cutcher -cutcherry -cute -cutely -cuteness -Cuterebra -Cuthbert -cutheal -cuticle -cuticolor -cuticula -cuticular -cuticularization -cuticularize -cuticulate -cutidure -cutie -cutification -cutigeral -cutin -cutinization -cutinize -cutireaction -cutis -cutisector -Cutiterebra -cutitis -cutization -cutlass -cutler -cutleress -Cutleria -Cutleriaceae -cutleriaceous -Cutleriales -cutlery -cutlet -cutling -cutlips -cutocellulose -cutoff -cutout -cutover -cutpurse -cuttable -cuttage -cuttail -cuttanee -cutted -cutter -cutterhead -cutterman -cutthroat -cutting -cuttingly -cuttingness -cuttle -cuttlebone -cuttlefish -cuttler -cuttoo -cutty -cuttyhunk -cutup -cutwater -cutweed -cutwork -cutworm -cuvette -Cuvierian -cuvy -cuya -Cuzceno -cwierc -cwm -cyamelide -Cyamus -cyan -cyanacetic -cyanamide -cyananthrol -Cyanastraceae -Cyanastrum -cyanate -cyanaurate -cyanauric -cyanbenzyl -cyancarbonic -Cyanea -cyanean -cyanemia -cyaneous -cyanephidrosis -cyanformate -cyanformic -cyanhidrosis -cyanhydrate -cyanhydric -cyanhydrin -cyanic -cyanicide -cyanidation -cyanide -cyanidin -cyanidine -cyanidrosis -cyanimide -cyanin -cyanine -cyanite -cyanize -cyanmethemoglobin -cyanoacetate -cyanoacetic -cyanoaurate -cyanoauric -cyanobenzene -cyanocarbonic -cyanochlorous -cyanochroia -cyanochroic -Cyanocitta -cyanocrystallin -cyanoderma -cyanogen -cyanogenesis -cyanogenetic -cyanogenic -cyanoguanidine -cyanohermidin -cyanohydrin -cyanol -cyanole -cyanomaclurin -cyanometer -cyanomethaemoglobin -cyanomethemoglobin -cyanometric -cyanometry -cyanopathic -cyanopathy -cyanophile -cyanophilous -cyanophoric -cyanophose -Cyanophyceae -cyanophycean -cyanophyceous -cyanophycin -cyanopia -cyanoplastid -cyanoplatinite -cyanoplatinous -cyanopsia -cyanose -cyanosed -cyanosis -Cyanospiza -cyanotic -cyanotrichite -cyanotype -cyanuramide -cyanurate -cyanuret -cyanuric -cyanurine -cyanus -cyaphenine -cyath -Cyathaspis -Cyathea -Cyatheaceae -cyatheaceous -cyathiform -cyathium -cyathoid -cyatholith -Cyathophyllidae -cyathophylline -cyathophylloid -Cyathophyllum -cyathos -cyathozooid -cyathus -cybernetic -cyberneticist -cybernetics -Cybister -cycad -Cycadaceae -cycadaceous -Cycadales -cycadean -cycadeoid -Cycadeoidea -cycadeous -cycadiform -cycadlike -cycadofilicale -Cycadofilicales -Cycadofilices -cycadofilicinean -Cycadophyta -Cycas -Cycladic -cyclamen -cyclamin -cyclamine -cyclammonium -cyclane -Cyclanthaceae -cyclanthaceous -Cyclanthales -Cyclanthus -cyclar -cyclarthrodial -cyclarthrsis -cyclas -cycle -cyclecar -cycledom -cyclene -cycler -cyclesmith -Cycliae -cyclian -cyclic -cyclical -cyclically -cyclicism -cyclide -cycling -cyclism -cyclist -cyclistic -cyclitic -cyclitis -cyclization -cyclize -cycloalkane -Cyclobothra -cyclobutane -cyclocoelic -cyclocoelous -Cycloconium -cyclodiolefin -cycloganoid -Cycloganoidei -cyclogram -cyclograph -cyclographer -cycloheptane -cycloheptanone -cyclohexane -cyclohexanol -cyclohexanone -cyclohexene -cyclohexyl -cycloid -cycloidal -cycloidally -cycloidean -Cycloidei -cycloidian -cycloidotrope -cyclolith -Cycloloma -cyclomania -cyclometer -cyclometric -cyclometrical -cyclometry -Cyclomyaria -cyclomyarian -cyclonal -cyclone -cyclonic -cyclonical -cyclonically -cyclonist -cyclonite -cyclonologist -cyclonology -cyclonometer -cyclonoscope -cycloolefin -cycloparaffin -cyclope -Cyclopean -cyclopean -cyclopedia -cyclopedic -cyclopedical -cyclopedically -cyclopedist -cyclopentadiene -cyclopentane -cyclopentanone -cyclopentene -Cyclopes -cyclopes -cyclophoria -cyclophoric -Cyclophorus -cyclophrenia -cyclopia -Cyclopic -cyclopism -cyclopite -cycloplegia -cycloplegic -cyclopoid -cyclopropane -Cyclops -Cyclopteridae -cyclopteroid -cyclopterous -cyclopy -cyclorama -cycloramic -Cyclorrhapha -cyclorrhaphous -cycloscope -cyclose -cyclosis -cyclospermous -Cyclospondyli -cyclospondylic -cyclospondylous -Cyclosporales -Cyclosporeae -Cyclosporinae -cyclosporous -Cyclostoma -Cyclostomata -cyclostomate -Cyclostomatidae -cyclostomatous -cyclostome -Cyclostomes -Cyclostomi -Cyclostomidae -cyclostomous -cyclostrophic -cyclostyle -Cyclotella -cyclothem -cyclothure -cyclothurine -Cyclothurus -cyclothyme -cyclothymia -cyclothymiac -cyclothymic -cyclotome -cyclotomic -cyclotomy -Cyclotosaurus -cyclotron -cyclovertebral -cyclus -Cydippe -cydippian -cydippid -Cydippida -Cydonia -Cydonian -cydonium -cyesiology -cyesis -cygneous -cygnet -Cygnid -Cygninae -cygnine -Cygnus -cyke -cylinder -cylindered -cylinderer -cylinderlike -cylindraceous -cylindrarthrosis -Cylindrella -cylindrelloid -cylindrenchyma -cylindric -cylindrical -cylindricality -cylindrically -cylindricalness -cylindricity -cylindricule -cylindriform -cylindrite -cylindrocellular -cylindrocephalic -cylindroconical -cylindroconoidal -cylindrocylindric -cylindrodendrite -cylindrograph -cylindroid -cylindroidal -cylindroma -cylindromatous -cylindrometric -cylindroogival -Cylindrophis -Cylindrosporium -cylindruria -cylix -Cyllenian -Cyllenius -cyllosis -cyma -cymagraph -cymaphen -cymaphyte -cymaphytic -cymaphytism -cymar -cymation -cymatium -cymba -cymbaeform -cymbal -Cymbalaria -cymbaleer -cymbaler -cymbaline -cymbalist -cymballike -cymbalo -cymbalon -cymbate -Cymbella -cymbiform -Cymbium -cymbling -cymbocephalic -cymbocephalous -cymbocephaly -Cymbopogon -cyme -cymelet -cymene -cymiferous -cymling -Cymodoceaceae -cymogene -cymograph -cymographic -cymoid -Cymoidium -cymometer -cymophane -cymophanous -cymophenol -cymoscope -cymose -cymosely -cymotrichous -cymotrichy -cymous -Cymraeg -Cymric -Cymry -cymule -cymulose -cynanche -Cynanchum -cynanthropy -Cynara -cynaraceous -cynarctomachy -cynareous -cynaroid -cynebot -cynegetic -cynegetics -cynegild -cynhyena -Cynias -cyniatria -cyniatrics -cynic -cynical -cynically -cynicalness -cynicism -cynicist -cynipid -Cynipidae -cynipidous -cynipoid -Cynipoidea -Cynips -cynism -cynocephalic -cynocephalous -cynocephalus -cynoclept -Cynocrambaceae -cynocrambaceous -Cynocrambe -Cynodon -cynodont -Cynodontia -Cynogale -cynogenealogist -cynogenealogy -Cynoglossum -Cynognathus -cynography -cynoid -Cynoidea -cynology -Cynomoriaceae -cynomoriaceous -Cynomorium -Cynomorpha -cynomorphic -cynomorphous -Cynomys -cynophile -cynophilic -cynophilist -cynophobe -cynophobia -Cynopithecidae -cynopithecoid -cynopodous -cynorrhodon -Cynosarges -Cynoscion -Cynosura -cynosural -cynosure -Cynosurus -cynotherapy -Cynoxylon -Cynthia -Cynthian -Cynthiidae -Cynthius -cyp -Cyperaceae -cyperaceous -Cyperus -cyphella -cyphellate -Cyphomandra -cyphonautes -cyphonism -Cypraea -cypraeid -Cypraeidae -cypraeiform -cypraeoid -cypre -cypres -cypress -cypressed -cypressroot -Cypria -Cyprian -Cyprididae -Cypridina -Cypridinidae -cypridinoid -Cyprina -cyprine -cyprinid -Cyprinidae -cypriniform -cyprinine -cyprinodont -Cyprinodontes -Cyprinodontidae -cyprinodontoid -cyprinoid -Cyprinoidea -cyprinoidean -Cyprinus -Cypriote -Cypripedium -Cypris -cypsela -Cypseli -Cypselid -Cypselidae -cypseliform -Cypseliformes -cypseline -cypseloid -cypselomorph -Cypselomorphae -cypselomorphic -cypselous -Cypselus -cyptozoic -Cyrano -Cyrenaic -Cyrenaicism -Cyrenian -Cyril -Cyrilla -Cyrillaceae -cyrillaceous -Cyrillian -Cyrillianism -Cyrillic -cyriologic -cyriological -Cyrtandraceae -Cyrtidae -cyrtoceracone -Cyrtoceras -cyrtoceratite -cyrtoceratitic -cyrtograph -cyrtolite -cyrtometer -Cyrtomium -cyrtopia -cyrtosis -Cyrus -cyrus -cyst -cystadenoma -cystadenosarcoma -cystal -cystalgia -cystamine -cystaster -cystatrophia -cystatrophy -cystectasia -cystectasy -cystectomy -cysted -cysteine -cysteinic -cystelcosis -cystenchyma -cystenchymatous -cystencyte -cysterethism -cystic -cysticarpic -cysticarpium -cysticercoid -cysticercoidal -cysticercosis -cysticercus -cysticolous -cystid -Cystidea -cystidean -cystidicolous -cystidium -cystiferous -cystiform -cystigerous -Cystignathidae -cystignathine -cystine -cystinuria -cystirrhea -cystis -cystitis -cystitome -cystoadenoma -cystocarcinoma -cystocarp -cystocarpic -cystocele -cystocolostomy -cystocyte -cystodynia -cystoelytroplasty -cystoenterocele -cystoepiplocele -cystoepithelioma -cystofibroma -Cystoflagellata -cystoflagellate -cystogenesis -cystogenous -cystogram -cystoid -Cystoidea -cystoidean -cystolith -cystolithectomy -cystolithiasis -cystolithic -cystoma -cystomatous -cystomorphous -cystomyoma -cystomyxoma -Cystonectae -cystonectous -cystonephrosis -cystoneuralgia -cystoparalysis -Cystophora -cystophore -cystophotography -cystophthisis -cystoplasty -cystoplegia -cystoproctostomy -Cystopteris -cystoptosis -Cystopus -cystopyelitis -cystopyelography -cystopyelonephritis -cystoradiography -cystorrhagia -cystorrhaphy -cystorrhea -cystosarcoma -cystoschisis -cystoscope -cystoscopic -cystoscopy -cystose -cystospasm -cystospastic -cystospore -cystostomy -cystosyrinx -cystotome -cystotomy -cystotrachelotomy -cystoureteritis -cystourethritis -cystous -cytase -cytasic -Cytherea -Cytherean -Cytherella -Cytherellidae -Cytinaceae -cytinaceous -Cytinus -cytioderm -cytisine -Cytisus -cytitis -cytoblast -cytoblastema -cytoblastemal -cytoblastematous -cytoblastemic -cytoblastemous -cytochemistry -cytochrome -cytochylema -cytocide -cytoclasis -cytoclastic -cytococcus -cytocyst -cytode -cytodendrite -cytoderm -cytodiagnosis -cytodieresis -cytodieretic -cytogamy -cytogene -cytogenesis -cytogenetic -cytogenetical -cytogenetically -cytogeneticist -cytogenetics -cytogenic -cytogenous -cytogeny -cytoglobin -cytohyaloplasm -cytoid -cytokinesis -cytolist -cytologic -cytological -cytologically -cytologist -cytology -cytolymph -cytolysin -cytolysis -cytolytic -cytoma -cytomere -cytometer -cytomicrosome -cytomitome -cytomorphosis -cyton -cytoparaplastin -cytopathologic -cytopathological -cytopathologically -cytopathology -Cytophaga -cytophagous -cytophagy -cytopharynx -cytophil -cytophysics -cytophysiology -cytoplasm -cytoplasmic -cytoplast -cytoplastic -cytoproct -cytopyge -cytoreticulum -cytoryctes -cytosine -cytosome -Cytospora -Cytosporina -cytost -cytostomal -cytostome -cytostroma -cytostromatic -cytotactic -cytotaxis -cytotoxic -cytotoxin -cytotrophoblast -cytotrophy -cytotropic -cytotropism -cytozoic -cytozoon -cytozymase -cytozyme -cytula -Cyzicene -cyzicene -czar -czardas -czardom -czarevitch -czarevna -czarian -czaric -czarina -czarinian -czarish -czarism -czarist -czaristic -czaritza -czarowitch -czarowitz -czarship -Czech -Czechic -Czechish -Czechization -Czechoslovak -Czechoslovakian -D -d -da -daalder -dab -dabb -dabba -dabber -dabble -dabbler -dabbling -dabblingly -dabblingness -dabby -dabchick -Dabih -Dabitis -dablet -daboia -daboya -dabster -dace -Dacelo -Daceloninae -dacelonine -dachshound -dachshund -Dacian -dacite -dacitic -dacker -dacoit -dacoitage -dacoity -dacryadenalgia -dacryadenitis -dacryagogue -dacrycystalgia -Dacrydium -dacryelcosis -dacryoadenalgia -dacryoadenitis -dacryoblenorrhea -dacryocele -dacryocyst -dacryocystalgia -dacryocystitis -dacryocystoblennorrhea -dacryocystocele -dacryocystoptosis -dacryocystorhinostomy -dacryocystosyringotomy -dacryocystotome -dacryocystotomy -dacryohelcosis -dacryohemorrhea -dacryolite -dacryolith -dacryolithiasis -dacryoma -dacryon -dacryops -dacryopyorrhea -dacryopyosis -dacryosolenitis -dacryostenosis -dacryosyrinx -dacryuria -Dactyl -dactyl -dactylar -dactylate -dactylic -dactylically -dactylioglyph -dactylioglyphic -dactylioglyphist -dactylioglyphtic -dactylioglyphy -dactyliographer -dactyliographic -dactyliography -dactyliology -dactyliomancy -dactylion -dactyliotheca -Dactylis -dactylist -dactylitic -dactylitis -dactylogram -dactylograph -dactylographic -dactylography -dactyloid -dactylology -dactylomegaly -dactylonomy -dactylopatagium -Dactylopius -dactylopodite -dactylopore -Dactylopteridae -Dactylopterus -dactylorhiza -dactyloscopic -dactyloscopy -dactylose -dactylosternal -dactylosymphysis -dactylotheca -dactylous -dactylozooid -dactylus -Dacus -dacyorrhea -dad -Dada -dada -Dadaism -Dadaist -dadap -Dadayag -dadder -daddle -daddock -daddocky -daddy -daddynut -dade -dadenhudd -dado -Dadoxylon -Dadu -daduchus -Dadupanthi -dae -Daedal -daedal -Daedalea -Daedalean -Daedalian -Daedalic -Daedalidae -Daedalist -daedaloid -Daedalus -daemon -Daemonelix -daemonic -daemonurgist -daemonurgy -daemony -daer -daff -daffery -daffing -daffish -daffle -daffodil -daffodilly -daffy -daffydowndilly -Dafla -daft -daftberry -daftlike -daftly -daftness -dag -dagaba -dagame -dagassa -Dagbamba -Dagbane -dagesh -Dagestan -dagga -dagger -daggerbush -daggered -daggerlike -daggerproof -daggers -daggle -daggletail -daggletailed -daggly -daggy -daghesh -daglock -Dagmar -Dago -dagoba -Dagomba -dags -Daguerrean -daguerreotype -daguerreotyper -daguerreotypic -daguerreotypist -daguerreotypy -dah -dahabeah -Dahlia -Dahoman -Dahomeyan -dahoon -Daibutsu -daidle -daidly -Daijo -daiker -daikon -Dail -Dailamite -dailiness -daily -daimen -daimiate -daimio -daimon -daimonic -daimonion -daimonistic -daimonology -dain -daincha -dainteth -daintify -daintihood -daintily -daintiness -daintith -dainty -Daira -daira -dairi -dairy -dairying -dairymaid -dairyman -dairywoman -dais -daisied -daisy -daisybush -daitya -daiva -dak -daker -Dakhini -dakir -Dakota -daktylon -daktylos -dal -dalar -Dalarnian -Dalbergia -Dalcassian -Dale -dale -Dalea -Dalecarlian -daleman -daler -dalesfolk -dalesman -dalespeople -daleswoman -daleth -dali -Dalibarda -dalk -dallack -dalle -dalles -dalliance -dallier -dally -dallying -dallyingly -Dalmania -Dalmanites -Dalmatian -Dalmatic -dalmatic -Dalradian -dalt -dalteen -Dalton -dalton -Daltonian -Daltonic -Daltonism -Daltonist -dam -dama -damage -damageability -damageable -damageableness -damageably -damagement -damager -damages -damagingly -daman -Damara -Damascene -damascene -damascened -damascener -damascenine -Damascus -damask -damaskeen -damasse -damassin -Damayanti -dambonitol -dambose -dambrod -dame -damenization -damewort -Damgalnunna -Damia -damiana -Damianist -damie -damier -damine -damkjernite -damlike -dammar -Dammara -damme -dammer -dammish -damn -damnability -damnable -damnableness -damnably -damnation -damnatory -damned -damner -damnification -damnify -Damnii -damning -damningly -damningness -damnonians -Damnonii -damnous -damnously -Damoclean -Damocles -Damoetas -damoiseau -Damon -Damone -damonico -damourite -damp -dampang -damped -dampen -dampener -damper -damping -dampish -dampishly -dampishness -damply -dampness -dampproof -dampproofer -dampproofing -dampy -damsel -damselfish -damselhood -damson -Dan -dan -Dana -Danaan -Danagla -Danai -Danaid -danaid -Danaidae -danaide -Danaidean -Danainae -danaine -Danais -danaite -Danakil -danalite -danburite -dancalite -dance -dancer -danceress -dancery -dancette -dancing -dancingly -dand -danda -dandelion -dander -dandiacal -dandiacally -dandically -dandification -dandify -dandilly -dandily -dandiprat -dandizette -dandle -dandler -dandling -dandlingly -dandruff -dandruffy -dandy -dandydom -dandyish -dandyism -dandyize -dandyling -Dane -Daneball -Daneflower -Danegeld -Danelaw -Daneweed -Danewort -dang -danger -dangerful -dangerfully -dangerless -dangerous -dangerously -dangerousness -dangersome -dangle -dangleberry -danglement -dangler -danglin -dangling -danglingly -Dani -Danian -Danic -danicism -Daniel -Daniele -Danielic -Danielle -Daniglacial -danio -Danish -Danism -Danite -Danization -Danize -dank -Dankali -dankish -dankishness -dankly -dankness -danli -Dannebrog -dannemorite -danner -Dannie -dannock -Danny -danoranja -dansant -danseuse -danta -Dantean -Dantesque -Danthonia -Dantist -Dantology -Dantomania -danton -Dantonesque -Dantonist -Dantophilist -Dantophily -Danube -Danubian -Danuri -Danzig -Danziger -dao -daoine -dap -Dapedium -Dapedius -Daphnaceae -Daphne -Daphnean -Daphnephoria -daphnetin -Daphnia -daphnin -daphnioid -Daphnis -daphnoid -dapicho -dapico -dapifer -dapper -dapperling -dapperly -dapperness -dapple -dappled -dar -darabukka -darac -daraf -Darapti -darat -darbha -darby -Darbyism -Darbyite -Darci -Dard -Dardan -dardanarius -Dardani -dardanium -dardaol -Dardic -Dardistan -dare -dareall -daredevil -daredevilism -daredevilry -daredeviltry -dareful -Daren -darer -Dares -daresay -darg -dargah -darger -Darghin -Dargo -dargsman -dargue -dari -daribah -daric -Darien -Darii -Darin -daring -daringly -daringness -dariole -Darius -Darjeeling -dark -darken -darkener -darkening -darkful -darkhearted -darkheartedness -darkish -darkishness -darkle -darkling -darklings -darkly -darkmans -darkness -darkroom -darkskin -darksome -darksomeness -darky -darling -darlingly -darlingness -Darlingtonia -darn -darnation -darned -darnel -darner -darnex -darning -daroga -daroo -darr -darrein -Darrell -Darren -Darryl -darshana -Darsonval -Darsonvalism -darst -dart -Dartagnan -dartars -dartboard -darter -darting -dartingly -dartingness -dartle -dartlike -dartman -Dartmoor -dartoic -dartoid -dartos -dartre -dartrose -dartrous -darts -dartsman -Darwinian -Darwinical -Darwinically -Darwinism -Darwinist -Darwinistic -Darwinite -Darwinize -Daryl -darzee -das -Daschagga -dash -dashboard -dashed -dashedly -dashee -dasheen -dasher -dashing -dashingly -dashmaker -Dashnak -Dashnakist -Dashnaktzutiun -dashplate -dashpot -dashwheel -dashy -dasi -Dasiphora -dasnt -dassie -dassy -dastard -dastardize -dastardliness -dastardly -dastur -dasturi -Dasya -Dasyatidae -Dasyatis -Dasycladaceae -dasycladaceous -Dasylirion -dasymeter -dasypaedal -dasypaedes -dasypaedic -Dasypeltis -dasyphyllous -Dasypodidae -dasypodoid -Dasyprocta -Dasyproctidae -dasyproctine -Dasypus -Dasystephana -dasyure -Dasyuridae -dasyurine -dasyuroid -Dasyurus -Dasyus -data -datable -datableness -datably -dataria -datary -datch -datcha -date -dateless -datemark -dater -datil -dating -dation -Datisca -Datiscaceae -datiscaceous -datiscetin -datiscin -datiscoside -Datisi -Datism -datival -dative -datively -dativogerundial -datolite -datolitic -dattock -datum -Datura -daturic -daturism -daub -daube -Daubentonia -Daubentoniidae -dauber -daubery -daubing -daubingly -daubreeite -daubreelite -daubster -dauby -Daucus -daud -daughter -daughterhood -daughterkin -daughterless -daughterlike -daughterliness -daughterling -daughterly -daughtership -Daulias -daunch -dauncy -Daunii -daunt -daunter -daunting -dauntingly -dauntingness -dauntless -dauntlessly -dauntlessness -daunton -dauphin -dauphine -dauphiness -Daur -Dauri -daut -dautie -dauw -davach -Davallia -Dave -daven -davenport -daver -daverdy -David -Davidian -Davidic -Davidical -Davidist -davidsonite -Daviesia -daviesite -davit -davoch -Davy -davy -davyne -daw -dawdle -dawdler -dawdling -dawdlingly -dawdy -dawish -dawkin -Dawn -dawn -dawning -dawnlight -dawnlike -dawnstreak -dawnward -dawny -Dawson -Dawsonia -Dawsoniaceae -dawsoniaceous -dawsonite -dawtet -dawtit -dawut -day -dayabhaga -Dayakker -dayal -daybeam -dayberry -dayblush -daybook -daybreak -daydawn -daydream -daydreamer -daydreamy -daydrudge -dayflower -dayfly -daygoing -dayless -daylight -daylit -daylong -dayman -daymare -daymark -dayroom -days -dayshine -daysman -dayspring -daystar -daystreak -daytale -daytide -daytime -daytimes -dayward -daywork -dayworker -daywrit -Daza -daze -dazed -dazedly -dazedness -dazement -dazingly -dazy -dazzle -dazzlement -dazzler -dazzlingly -de -deacetylate -deacetylation -deacidification -deacidify -deacon -deaconal -deaconate -deaconess -deaconhood -deaconize -deaconry -deaconship -deactivate -deactivation -dead -deadbeat -deadborn -deadcenter -deaden -deadener -deadening -deader -deadeye -deadfall -deadhead -deadheadism -deadhearted -deadheartedly -deadheartedness -deadhouse -deading -deadish -deadishly -deadishness -deadlatch -deadlight -deadlily -deadline -deadliness -deadlock -deadly -deadman -deadmelt -deadness -deadpan -deadpay -deadtongue -deadwood -deadwort -deaerate -deaeration -deaerator -deaf -deafen -deafening -deafeningly -deafforest -deafforestation -deafish -deafly -deafness -deair -deal -dealable -dealate -dealated -dealation -dealbate -dealbation -dealbuminize -dealcoholist -dealcoholization -dealcoholize -dealer -dealerdom -dealership -dealfish -dealing -dealkalize -dealkylate -dealkylation -dealt -deambulation -deambulatory -deamidase -deamidate -deamidation -deamidization -deamidize -deaminase -deaminate -deamination -deaminization -deaminize -deammonation -Dean -dean -deanathematize -deaner -deanery -deaness -deanimalize -deanship -deanthropomorphic -deanthropomorphism -deanthropomorphization -deanthropomorphize -deappetizing -deaquation -dear -dearborn -dearie -dearly -dearness -dearomatize -dearsenicate -dearsenicator -dearsenicize -dearth -dearthfu -dearticulation -dearworth -dearworthily -dearworthiness -deary -deash -deasil -deaspirate -deaspiration -deassimilation -death -deathbed -deathblow -deathday -deathful -deathfully -deathfulness -deathify -deathin -deathiness -deathless -deathlessly -deathlessness -deathlike -deathliness -deathling -deathly -deathroot -deathshot -deathsman -deathtrap -deathward -deathwards -deathwatch -deathweed -deathworm -deathy -deave -deavely -Deb -deb -debacle -debadge -debamboozle -debar -debarbarization -debarbarize -debark -debarkation -debarkment -debarment -debarrance -debarrass -debarration -debase -debasedness -debasement -debaser -debasingly -debatable -debate -debateful -debatefully -debatement -debater -debating -debatingly -debauch -debauched -debauchedly -debauchedness -debauchee -debaucher -debauchery -debauchment -Debbie -Debby -debby -debeige -debellate -debellation -debellator -deben -debenture -debentured -debenzolize -Debi -debile -debilissima -debilitant -debilitate -debilitated -debilitation -debilitative -debility -debind -debit -debiteuse -debituminization -debituminize -deblaterate -deblateration -deboistly -deboistness -debonair -debonaire -debonairity -debonairly -debonairness -debonnaire -Deborah -debord -debordment -debosh -deboshed -debouch -debouchment -debride -debrief -debris -debrominate -debromination -debruise -debt -debtee -debtful -debtless -debtor -debtorship -debullition -debunk -debunker -debunkment -debus -Debussyan -Debussyanize -debut -debutant -debutante -decachord -decad -decadactylous -decadal -decadally -decadarch -decadarchy -decadary -decadation -decade -decadence -decadency -decadent -decadentism -decadently -decadescent -decadianome -decadic -decadist -decadrachm -decadrachma -decaesarize -decaffeinate -decaffeinize -decafid -decagon -decagonal -decagram -decagramme -decahedral -decahedron -decahydrate -decahydrated -decahydronaphthalene -Decaisnea -decal -decalcification -decalcifier -decalcify -decalcomania -decalcomaniac -decalescence -decalescent -Decalin -decaliter -decalitre -decalobate -Decalogist -Decalogue -decalvant -decalvation -decameral -Decameron -Decameronic -decamerous -decameter -decametre -decamp -decampment -decan -decanal -decanally -decanate -decane -decangular -decani -decanically -decannulation -decanonization -decanonize -decant -decantate -decantation -decanter -decantherous -decap -decapetalous -decaphyllous -decapitable -decapitalization -decapitalize -decapitate -decapitation -decapitator -decapod -Decapoda -decapodal -decapodan -decapodiform -decapodous -decapper -decapsulate -decapsulation -decarbonate -decarbonator -decarbonization -decarbonize -decarbonized -decarbonizer -decarboxylate -decarboxylation -decarboxylization -decarboxylize -decarburation -decarburization -decarburize -decarch -decarchy -decardinalize -decare -decarhinus -decarnate -decarnated -decart -decasemic -decasepalous -decaspermal -decaspermous -decast -decastellate -decastere -decastich -decastyle -decasualization -decasualize -decasyllabic -decasyllable -decasyllabon -decate -decathlon -decatholicize -decatize -decatizer -decatoic -decator -decatyl -decaudate -decaudation -decay -decayable -decayed -decayedness -decayer -decayless -decease -deceased -decedent -deceit -deceitful -deceitfully -deceitfulness -deceivability -deceivable -deceivableness -deceivably -deceive -deceiver -deceiving -deceivingly -decelerate -deceleration -decelerator -decelerometer -December -Decemberish -Decemberly -Decembrist -decemcostate -decemdentate -decemfid -decemflorous -decemfoliate -decemfoliolate -decemjugate -decemlocular -decempartite -decempeda -decempedal -decempedate -decempennate -decemplex -decemplicate -decempunctate -decemstriate -decemuiri -decemvir -decemviral -decemvirate -decemvirship -decenary -decence -decency -decene -decennal -decennary -decennia -decenniad -decennial -decennially -decennium -decennoval -decent -decenter -decently -decentness -decentralism -decentralist -decentralization -decentralize -decentration -decentre -decenyl -decephalization -deceptibility -deceptible -deception -deceptious -deceptiously -deceptitious -deceptive -deceptively -deceptiveness -deceptivity -decerebrate -decerebration -decerebrize -decern -decerniture -decernment -decess -decession -dechemicalization -dechemicalize -dechenite -Dechlog -dechlore -dechlorination -dechoralize -dechristianization -dechristianize -Decian -deciare -deciatine -decibel -deciceronize -decidable -decide -decided -decidedly -decidedness -decider -decidingly -decidua -decidual -deciduary -Deciduata -deciduate -deciduitis -deciduoma -deciduous -deciduously -deciduousness -decigram -decigramme -decil -decile -deciliter -decillion -decillionth -decima -decimal -decimalism -decimalist -decimalization -decimalize -decimally -decimate -decimation -decimator -decimestrial -decimeter -decimolar -decimole -decimosexto -Decimus -decinormal -decipher -decipherability -decipherable -decipherably -decipherer -decipherment -decipium -decipolar -decision -decisional -decisive -decisively -decisiveness -decistere -decitizenize -Decius -decivilization -decivilize -deck -decke -decked -deckel -decker -deckhead -deckhouse -deckie -decking -deckle -deckload -deckswabber -declaim -declaimant -declaimer -declamation -declamatoriness -declamatory -declarable -declarant -declaration -declarative -declaratively -declarator -declaratorily -declaratory -declare -declared -declaredly -declaredness -declarer -declass -declassicize -declassify -declension -declensional -declensionally -declericalize -declimatize -declinable -declinal -declinate -declination -declinational -declinatory -declinature -decline -declined -declinedness -decliner -declinograph -declinometer -declivate -declive -declivitous -declivity -declivous -declutch -decoagulate -decoagulation -decoat -decocainize -decoct -decoctible -decoction -decoctive -decoctum -decode -Decodon -decohere -decoherence -decoherer -decohesion -decoic -decoke -decollate -decollated -decollation -decollator -decolletage -decollete -decolor -decolorant -decolorate -decoloration -decolorimeter -decolorization -decolorize -decolorizer -decolour -decommission -decompensate -decompensation -decomplex -decomponible -decomposability -decomposable -decompose -decomposed -decomposer -decomposite -decomposition -decomposure -decompound -decompoundable -decompoundly -decompress -decompressing -decompression -decompressive -deconcatenate -deconcentrate -deconcentration -deconcentrator -decongestive -deconsecrate -deconsecration -deconsider -deconsideration -decontaminate -decontamination -decontrol -deconventionalize -decopperization -decopperize -decorability -decorable -decorably -decorament -decorate -decorated -decoration -decorationist -decorative -decoratively -decorativeness -decorator -decoratory -decorist -decorous -decorously -decorousness -decorrugative -decorticate -decortication -decorticator -decorticosis -decorum -decostate -decoy -decoyer -decoyman -decrassify -decream -decrease -decreaseless -decreasing -decreasingly -decreation -decreative -decree -decreeable -decreement -decreer -decreet -decrement -decrementless -decremeter -decrepit -decrepitate -decrepitation -decrepitly -decrepitness -decrepitude -decrescence -decrescendo -decrescent -decretal -decretalist -decrete -decretist -decretive -decretively -decretorial -decretorily -decretory -decretum -decrew -decrial -decried -decrier -decrown -decrudescence -decrustation -decry -decrystallization -decubital -decubitus -decultivate -deculturate -decuman -decumana -decumanus -Decumaria -decumary -decumbence -decumbency -decumbent -decumbently -decumbiture -decuple -decuplet -decuria -decurion -decurionate -decurrence -decurrency -decurrent -decurrently -decurring -decursion -decursive -decursively -decurtate -decurvation -decurvature -decurve -decury -decus -decussate -decussated -decussately -decussation -decussis -decussorium -decyl -decylene -decylenic -decylic -decyne -Dedan -Dedanim -Dedanite -dedecorate -dedecoration -dedecorous -dedendum -dedentition -dedicant -dedicate -dedicatee -dedication -dedicational -dedicative -dedicator -dedicatorial -dedicatorily -dedicatory -dedicature -dedifferentiate -dedifferentiation -dedimus -deditician -dediticiancy -dedition -dedo -dedoggerelize -dedogmatize -dedolation -deduce -deducement -deducibility -deducible -deducibleness -deducibly -deducive -deduct -deductible -deduction -deductive -deductively -deductory -deduplication -dee -deed -deedbox -deedeed -deedful -deedfully -deedily -deediness -deedless -deedy -deem -deemer -deemie -deemster -deemstership -deep -deepen -deepener -deepening -deepeningly -Deepfreeze -deeping -deepish -deeplier -deeply -deepmost -deepmouthed -deepness -deepsome -deepwater -deepwaterman -deer -deerberry -deerdog -deerdrive -deerfood -deerhair -deerherd -deerhorn -deerhound -deerlet -deermeat -deerskin -deerstalker -deerstalking -deerstand -deerstealer -deertongue -deerweed -deerwood -deeryard -deevey -deevilick -deface -defaceable -defacement -defacer -defacing -defacingly -defalcate -defalcation -defalcator -defalk -defamation -defamatory -defame -defamed -defamer -defamingly -defassa -defat -default -defaultant -defaulter -defaultless -defaulture -defeasance -defeasanced -defease -defeasibility -defeasible -defeasibleness -defeat -defeater -defeatism -defeatist -defeatment -defeature -defecant -defecate -defecation -defecator -defect -defectibility -defectible -defection -defectionist -defectious -defective -defectively -defectiveness -defectless -defectology -defector -defectoscope -defedation -defeminize -defence -defend -defendable -defendant -defender -defendress -defenestration -defensative -defense -defenseless -defenselessly -defenselessness -defensibility -defensible -defensibleness -defensibly -defension -defensive -defensively -defensiveness -defensor -defensorship -defensory -defer -deferable -deference -deferent -deferentectomy -deferential -deferentiality -deferentially -deferentitis -deferment -deferrable -deferral -deferred -deferrer -deferrization -deferrize -defervesce -defervescence -defervescent -defeudalize -defiable -defial -defiance -defiant -defiantly -defiantness -defiber -defibrinate -defibrination -defibrinize -deficience -deficiency -deficient -deficiently -deficit -defier -defiguration -defilade -defile -defiled -defiledness -defilement -defiler -defiliation -defiling -defilingly -definability -definable -definably -define -defined -definedly -definement -definer -definiendum -definiens -definite -definitely -definiteness -definition -definitional -definitiones -definitive -definitively -definitiveness -definitization -definitize -definitor -definitude -deflagrability -deflagrable -deflagrate -deflagration -deflagrator -deflate -deflation -deflationary -deflationist -deflator -deflect -deflectable -deflected -deflection -deflectionization -deflectionize -deflective -deflectometer -deflector -deflesh -deflex -deflexibility -deflexible -deflexion -deflexure -deflocculant -deflocculate -deflocculation -deflocculator -deflorate -defloration -deflorescence -deflower -deflowerer -defluent -defluous -defluvium -defluxion -defoedation -defog -defoliage -defoliate -defoliated -defoliation -defoliator -deforce -deforcement -deforceor -deforcer -deforciant -deforest -deforestation -deforester -deform -deformability -deformable -deformalize -deformation -deformational -deformative -deformed -deformedly -deformedness -deformer -deformeter -deformism -deformity -defortify -defoul -defraud -defraudation -defrauder -defraudment -defray -defrayable -defrayal -defrayer -defrayment -defreeze -defrication -defrock -defrost -defroster -deft -defterdar -deftly -deftness -defunct -defunction -defunctionalization -defunctionalize -defunctness -defuse -defusion -defy -defyingly -deg -deganglionate -degarnish -degas -degasification -degasifier -degasify -degasser -degauss -degelatinize -degelation -degeneracy -degeneralize -degenerate -degenerately -degenerateness -degeneration -degenerationist -degenerative -degenerescence -degenerescent -degentilize -degerm -degerminate -degerminator -degged -degger -deglaciation -deglaze -deglutinate -deglutination -deglutition -deglutitious -deglutitive -deglutitory -deglycerin -deglycerine -degorge -degradable -degradand -degradation -degradational -degradative -degrade -degraded -degradedly -degradedness -degradement -degrader -degrading -degradingly -degradingness -degraduate -degraduation -degrain -degrease -degreaser -degree -degreeless -degreewise -degression -degressive -degressively -degu -Deguelia -deguelin -degum -degummer -degust -degustation -dehair -dehairer -Dehaites -deheathenize -dehematize -dehepatize -Dehgan -dehisce -dehiscence -dehiscent -dehistoricize -Dehkan -dehnstufe -dehonestate -dehonestation -dehorn -dehorner -dehors -dehort -dehortation -dehortative -dehortatory -dehorter -dehull -dehumanization -dehumanize -dehumidification -dehumidifier -dehumidify -dehusk -Dehwar -dehydrant -dehydrase -dehydrate -dehydration -dehydrator -dehydroascorbic -dehydrocorydaline -dehydrofreezing -dehydrogenase -dehydrogenate -dehydrogenation -dehydrogenization -dehydrogenize -dehydromucic -dehydrosparteine -dehypnotize -deice -deicer -deicidal -deicide -deictic -deictical -deictically -deidealize -Deidesheimer -deific -deifical -deification -deificatory -deifier -deiform -deiformity -deify -deign -Deimos -deincrustant -deindividualization -deindividualize -deindividuate -deindustrialization -deindustrialize -deink -Deino -Deinocephalia -Deinoceras -Deinodon -Deinodontidae -deinos -Deinosauria -Deinotherium -deinsularize -deintellectualization -deintellectualize -deionize -Deipara -deiparous -Deiphobus -deipnodiplomatic -deipnophobia -deipnosophism -deipnosophist -deipnosophistic -deipotent -Deirdre -deiseal -deisidaimonia -deism -deist -deistic -deistical -deistically -deisticalness -deity -deityship -deject -dejecta -dejected -dejectedly -dejectedness -dejectile -dejection -dejectly -dejectory -dejecture -dejerate -dejeration -dejerator -dejeune -dejeuner -dejunkerize -Dekabrist -dekaparsec -dekapode -dekko -dekle -deknight -Del -delabialization -delabialize -delacrimation -delactation -delaine -delaminate -delamination -delapse -delapsion -delate -delater -delatinization -delatinize -delation -delator -delatorian -Delaware -Delawarean -delawn -delay -delayable -delayage -delayer -delayful -delaying -delayingly -Delbert -dele -delead -delectability -delectable -delectableness -delectably -delectate -delectation -delectus -delegable -delegacy -delegalize -delegant -delegate -delegatee -delegateship -delegation -delegative -delegator -delegatory -delenda -Delesseria -Delesseriaceae -delesseriaceous -delete -deleterious -deleteriously -deleteriousness -deletion -deletive -deletory -delf -delft -delftware -Delhi -Delia -Delian -deliberalization -deliberalize -deliberant -deliberate -deliberately -deliberateness -deliberation -deliberative -deliberatively -deliberativeness -deliberator -delible -delicacy -delicate -delicately -delicateness -delicatesse -delicatessen -delicense -Delichon -delicioso -Delicious -delicious -deliciously -deliciousness -delict -delictum -deligated -deligation -delight -delightable -delighted -delightedly -delightedness -delighter -delightful -delightfully -delightfulness -delighting -delightingly -delightless -delightsome -delightsomely -delightsomeness -delignate -delignification -Delilah -delime -delimit -delimitate -delimitation -delimitative -delimiter -delimitize -delineable -delineament -delineate -delineation -delineative -delineator -delineatory -delineature -delinquence -delinquency -delinquent -delinquently -delint -delinter -deliquesce -deliquescence -deliquescent -deliquium -deliracy -delirament -deliration -deliriant -delirifacient -delirious -deliriously -deliriousness -delirium -delitescence -delitescency -delitescent -deliver -deliverable -deliverance -deliverer -deliveress -deliveror -delivery -deliveryman -dell -Della -dellenite -Delobranchiata -delocalization -delocalize -delomorphic -delomorphous -deloul -delouse -delphacid -Delphacidae -Delphian -Delphin -Delphinapterus -delphine -delphinic -Delphinid -Delphinidae -delphinin -delphinine -delphinite -Delphinium -Delphinius -delphinoid -Delphinoidea -delphinoidine -Delphinus -delphocurarine -Delsarte -Delsartean -Delsartian -Delta -delta -deltafication -deltaic -deltal -deltarium -deltation -delthyrial -delthyrium -deltic -deltidial -deltidium -deltiology -deltohedron -deltoid -deltoidal -delubrum -deludable -delude -deluder -deludher -deluding -deludingly -deluge -deluminize -delundung -delusion -delusional -delusionist -delusive -delusively -delusiveness -delusory -deluster -deluxe -delve -delver -demagnetizable -demagnetization -demagnetize -demagnetizer -demagog -demagogic -demagogical -demagogically -demagogism -demagogue -demagoguery -demagogy -demal -demand -demandable -demandant -demander -demanding -demandingly -demanganization -demanganize -demantoid -demarcate -demarcation -demarcator -demarch -demarchy -demargarinate -demark -demarkation -demast -dematerialization -dematerialize -Dematiaceae -dematiaceous -deme -demean -demeanor -demegoric -demency -dement -dementate -dementation -demented -dementedly -dementedness -dementholize -dementia -demephitize -demerit -demeritorious -demeritoriously -Demerol -demersal -demersed -demersion -demesman -demesmerize -demesne -demesnial -demetallize -demethylate -demethylation -Demetrian -demetricize -demi -demiadult -demiangel -demiassignation -demiatheism -demiatheist -demibarrel -demibastion -demibastioned -demibath -demibeast -demibelt -demibob -demibombard -demibrassart -demibrigade -demibrute -demibuckram -demicadence -demicannon -demicanon -demicanton -demicaponier -demichamfron -demicircle -demicircular -demicivilized -demicolumn -demicoronal -demicritic -demicuirass -demiculverin -demicylinder -demicylindrical -demidandiprat -demideify -demideity -demidevil -demidigested -demidistance -demiditone -demidoctor -demidog -demidolmen -demidome -demieagle -demifarthing -demifigure -demiflouncing -demifusion -demigardebras -demigauntlet -demigentleman -demiglobe -demigod -demigoddess -demigoddessship -demigorge -demigriffin -demigroat -demihag -demihearse -demiheavenly -demihigh -demihogshead -demihorse -demihuman -demijambe -demijohn -demikindred -demiking -demilance -demilancer -demilawyer -demilegato -demilion -demilitarization -demilitarize -demiliterate -demilune -demiluster -demilustre -demiman -demimark -demimentoniere -demimetope -demimillionaire -demimondaine -demimonde -demimonk -deminatured -demineralization -demineralize -deminude -deminudity -demioctagonal -demioctangular -demiofficial -demiorbit -demiourgoi -demiowl -demiox -demipagan -demiparallel -demipauldron -demipectinate -demipesade -demipike -demipillar -demipique -demiplacate -demiplate -demipomada -demipremise -demipremiss -demipriest -demipronation -demipuppet -demiquaver -demiracle -demiram -demirelief -demirep -demirevetment -demirhumb -demirilievo -demirobe -demisability -demisable -demisacrilege -demisang -demisangue -demisavage -demise -demiseason -demisecond -demisemiquaver -demisemitone -demisheath -demishirt -demisovereign -demisphere -demiss -demission -demissionary -demissly -demissness -demissory -demisuit -demit -demitasse -demitint -demitoilet -demitone -demitrain -demitranslucence -demitube -demiturned -demiurge -demiurgeous -demiurgic -demiurgical -demiurgically -demiurgism -demivambrace -demivirgin -demivoice -demivol -demivolt -demivotary -demiwivern -demiwolf -demnition -demob -demobilization -demobilize -democracy -democrat -democratian -democratic -democratical -democratically -democratifiable -democratism -democratist -democratization -democratize -demodectic -demoded -Demodex -Demodicidae -Demodocus -demodulation -demodulator -demogenic -Demogorgon -demographer -demographic -demographical -demographically -demographist -demography -demoid -demoiselle -demolish -demolisher -demolishment -demolition -demolitionary -demolitionist -demological -demology -Demon -demon -demonastery -demoness -demonetization -demonetize -demoniac -demoniacal -demoniacally -demoniacism -demonial -demonian -demonianism -demoniast -demonic -demonical -demonifuge -demonish -demonism -demonist -demonize -demonkind -demonland -demonlike -demonocracy -demonograph -demonographer -demonography -demonolater -demonolatrous -demonolatrously -demonolatry -demonologer -demonologic -demonological -demonologically -demonologist -demonology -demonomancy -demonophobia -demonry -demonship -demonstrability -demonstrable -demonstrableness -demonstrably -demonstrant -demonstratable -demonstrate -demonstratedly -demonstrater -demonstration -demonstrational -demonstrationist -demonstrative -demonstratively -demonstrativeness -demonstrator -demonstratorship -demonstratory -demophil -demophilism -demophobe -Demophon -Demophoon -demoralization -demoralize -demoralizer -demorphinization -demorphism -demos -Demospongiae -Demosthenean -Demosthenic -demote -demotic -demotics -demotion -demotist -demount -demountability -demountable -dempster -demulce -demulcent -demulsibility -demulsify -demulsion -demure -demurely -demureness -demurity -demurrable -demurrage -demurral -demurrant -demurrer -demurring -demurringly -demutization -demy -demyship -den -denarcotization -denarcotize -denarius -denaro -denary -denat -denationalization -denationalize -denaturalization -denaturalize -denaturant -denaturate -denaturation -denature -denaturization -denaturize -denaturizer -denazify -denda -dendrachate -dendral -Dendraspis -dendraxon -dendric -dendriform -dendrite -Dendrites -dendritic -dendritical -dendritically -dendritiform -Dendrium -Dendrobates -Dendrobatinae -dendrobe -Dendrobium -Dendrocalamus -Dendroceratina -dendroceratine -Dendrochirota -dendrochronological -dendrochronologist -dendrochronology -dendroclastic -Dendrocoela -dendrocoelan -dendrocoele -dendrocoelous -Dendrocolaptidae -dendrocolaptine -Dendroctonus -Dendrocygna -dendrodont -Dendrodus -Dendroeca -Dendrogaea -Dendrogaean -dendrograph -dendrography -Dendrohyrax -Dendroica -dendroid -dendroidal -Dendroidea -Dendrolagus -dendrolatry -Dendrolene -dendrolite -dendrologic -dendrological -dendrologist -dendrologous -dendrology -Dendromecon -dendrometer -dendron -dendrophil -dendrophile -dendrophilous -Dendropogon -Dene -dene -Deneb -Denebola -denegate -denegation -denehole -denervate -denervation -deneutralization -dengue -deniable -denial -denicotinize -denier -denierage -denierer -denigrate -denigration -denigrator -denim -Denis -denitrate -denitration -denitrator -denitrificant -denitrification -denitrificator -denitrifier -denitrify -denitrize -denization -denizen -denizenation -denizenize -denizenship -Denmark -dennet -Dennis -Dennstaedtia -denominable -denominate -denomination -denominational -denominationalism -denominationalist -denominationalize -denominationally -denominative -denominatively -denominator -denotable -denotation -denotative -denotatively -denotativeness -denotatum -denote -denotement -denotive -denouement -denounce -denouncement -denouncer -dense -densely -densen -denseness -denshare -densher -denshire -densification -densifier -densify -densimeter -densimetric -densimetrically -densimetry -densitometer -density -dent -dentagra -dental -dentale -dentalgia -Dentaliidae -dentalism -dentality -Dentalium -dentalization -dentalize -dentally -dentaphone -Dentaria -dentary -dentata -dentate -dentated -dentately -dentation -dentatoangulate -dentatocillitate -dentatocostate -dentatocrenate -dentatoserrate -dentatosetaceous -dentatosinuate -dentel -dentelated -dentelle -dentelure -denter -dentex -dentical -denticate -Denticeti -denticle -denticular -denticulate -denticulately -denticulation -denticule -dentiferous -dentification -dentiform -dentifrice -dentigerous -dentil -dentilabial -dentilated -dentilation -dentile -dentilingual -dentiloquist -dentiloquy -dentimeter -dentin -dentinal -dentinalgia -dentinasal -dentine -dentinitis -dentinoblast -dentinocemental -dentinoid -dentinoma -dentiparous -dentiphone -dentiroster -dentirostral -dentirostrate -Dentirostres -dentiscalp -dentist -dentistic -dentistical -dentistry -dentition -dentoid -dentolabial -dentolingual -dentonasal -dentosurgical -dentural -denture -denty -denucleate -denudant -denudate -denudation -denudative -denude -denuder -denumerable -denumerably -denumeral -denumerant -denumerantive -denumeration -denumerative -denunciable -denunciant -denunciate -denunciation -denunciative -denunciatively -denunciator -denunciatory -denutrition -deny -denyingly -deobstruct -deobstruent -deoccidentalize -deoculate -deodand -deodara -deodorant -deodorization -deodorize -deodorizer -deontological -deontologist -deontology -deoperculate -deoppilant -deoppilate -deoppilation -deoppilative -deordination -deorganization -deorganize -deorientalize -deorsumvergence -deorsumversion -deorusumduction -deossification -deossify -deota -deoxidant -deoxidate -deoxidation -deoxidative -deoxidator -deoxidization -deoxidize -deoxidizer -deoxygenate -deoxygenation -deoxygenization -deozonization -deozonize -deozonizer -depa -depaganize -depaint -depancreatization -depancreatize -depark -deparliament -depart -departed -departer -departisanize -departition -department -departmental -departmentalism -departmentalization -departmentalize -departmentally -departmentization -departmentize -departure -depas -depascent -depass -depasturable -depasturage -depasturation -depasture -depatriate -depauperate -depauperation -depauperization -depauperize -depencil -depend -dependability -dependable -dependableness -dependably -dependence -dependency -dependent -dependently -depender -depending -dependingly -depeople -deperdite -deperditely -deperition -depersonalization -depersonalize -depersonize -depetalize -depeter -depetticoat -dephase -dephilosophize -dephlegmate -dephlegmation -dephlegmatize -dephlegmator -dephlegmatory -dephlegmedness -dephlogisticate -dephlogisticated -dephlogistication -dephosphorization -dephosphorize -dephysicalization -dephysicalize -depickle -depict -depicter -depiction -depictive -depicture -depiedmontize -depigment -depigmentate -depigmentation -depigmentize -depilate -depilation -depilator -depilatory -depilitant -depilous -deplaceable -deplane -deplasmolysis -deplaster -deplenish -deplete -deplethoric -depletion -depletive -depletory -deploitation -deplorability -deplorable -deplorableness -deplorably -deploration -deplore -deplored -deploredly -deploredness -deplorer -deploringly -deploy -deployment -deplumate -deplumated -deplumation -deplume -deplump -depoetize -depoh -depolarization -depolarize -depolarizer -depolish -depolishing -depolymerization -depolymerize -depone -deponent -depopularize -depopulate -depopulation -depopulative -depopulator -deport -deportable -deportation -deportee -deporter -deportment -deposable -deposal -depose -deposer -deposit -depositary -depositation -depositee -deposition -depositional -depositive -depositor -depository -depositum -depositure -depot -depotentiate -depotentiation -depravation -deprave -depraved -depravedly -depravedness -depraver -depravingly -depravity -deprecable -deprecate -deprecatingly -deprecation -deprecative -deprecator -deprecatorily -deprecatoriness -deprecatory -depreciable -depreciant -depreciate -depreciatingly -depreciation -depreciative -depreciatively -depreciator -depreciatoriness -depreciatory -depredate -depredation -depredationist -depredator -depredatory -depress -depressant -depressed -depressibility -depressible -depressing -depressingly -depressingness -depression -depressive -depressively -depressiveness -depressomotor -depressor -depreter -deprint -depriorize -deprivable -deprival -deprivate -deprivation -deprivative -deprive -deprivement -depriver -deprovincialize -depside -depth -depthen -depthing -depthless -depthometer -depthwise -depullulation -depurant -depurate -depuration -depurative -depurator -depuratory -depursement -deputable -deputation -deputational -deputationist -deputationize -deputative -deputatively -deputator -depute -deputize -deputy -deputyship -dequeen -derabbinize -deracialize -deracinate -deracination -deradelphus -deradenitis -deradenoncus -derah -deraign -derail -derailer -derailment -derange -derangeable -deranged -derangement -deranger -derat -derate -derater -derationalization -derationalize -deratization -deray -Derbend -Derby -derby -derbylite -dere -deregister -deregulationize -dereism -dereistic -dereistically -Derek -derelict -dereliction -derelictly -derelictness -dereligion -dereligionize -derencephalocele -derencephalus -deresinate -deresinize -deric -deride -derider -deridingly -Deringa -Deripia -derisible -derision -derisive -derisively -derisiveness -derisory -derivability -derivable -derivably -derival -derivant -derivate -derivately -derivation -derivational -derivationally -derivationist -derivatist -derivative -derivatively -derivativeness -derive -derived -derivedly -derivedness -deriver -derm -derma -Dermacentor -dermad -dermahemia -dermal -dermalgia -dermalith -dermamyiasis -dermanaplasty -dermapostasis -Dermaptera -dermapteran -dermapterous -dermaskeleton -dermasurgery -dermatagra -dermatalgia -dermataneuria -dermatatrophia -dermatauxe -dermathemia -dermatic -dermatine -dermatitis -Dermatobia -dermatocele -dermatocellulitis -dermatoconiosis -Dermatocoptes -dermatocoptic -dermatocyst -dermatodynia -dermatogen -dermatoglyphics -dermatograph -dermatographia -dermatography -dermatoheteroplasty -dermatoid -dermatological -dermatologist -dermatology -dermatolysis -dermatoma -dermatome -dermatomere -dermatomic -dermatomuscular -dermatomyces -dermatomycosis -dermatomyoma -dermatoneural -dermatoneurology -dermatoneurosis -dermatonosus -dermatopathia -dermatopathic -dermatopathology -dermatopathophobia -Dermatophagus -dermatophobia -dermatophone -dermatophony -dermatophyte -dermatophytic -dermatophytosis -dermatoplasm -dermatoplast -dermatoplastic -dermatoplasty -dermatopnagic -dermatopsy -Dermatoptera -dermatoptic -dermatorrhagia -dermatorrhea -dermatorrhoea -dermatosclerosis -dermatoscopy -dermatosis -dermatoskeleton -dermatotherapy -dermatotome -dermatotomy -dermatotropic -dermatoxerasia -dermatozoon -dermatozoonosis -dermatrophia -dermatrophy -dermenchysis -Dermestes -dermestid -Dermestidae -dermestoid -dermic -dermis -dermitis -dermoblast -Dermobranchia -dermobranchiata -dermobranchiate -Dermochelys -dermochrome -dermococcus -dermogastric -dermographia -dermographic -dermographism -dermography -dermohemal -dermohemia -dermohumeral -dermoid -dermoidal -dermoidectomy -dermol -dermolysis -dermomuscular -dermomycosis -dermoneural -dermoneurosis -dermonosology -dermoosseous -dermoossification -dermopathic -dermopathy -dermophlebitis -dermophobe -dermophyte -dermophytic -dermoplasty -Dermoptera -dermopteran -dermopterous -dermoreaction -Dermorhynchi -dermorhynchous -dermosclerite -dermoskeletal -dermoskeleton -dermostenosis -dermostosis -dermosynovitis -dermotropic -dermovaccine -dermutation -dern -dernier -derodidymus -derogate -derogately -derogation -derogative -derogatively -derogator -derogatorily -derogatoriness -derogatory -Derotrema -Derotremata -derotremate -derotrematous -derotreme -derout -Derrick -derrick -derricking -derrickman -derride -derries -derringer -Derris -derry -dertrotheca -dertrum -deruinate -deruralize -derust -dervish -dervishhood -dervishism -dervishlike -desaccharification -desacralization -desacralize -desalt -desamidization -desand -desaturate -desaturation -desaurin -descale -descant -descanter -descantist -descend -descendable -descendance -descendant -descendence -descendent -descendental -descendentalism -descendentalist -descendentalistic -descender -descendibility -descendible -descending -descendingly -descension -descensional -descensionist -descensive -descent -Deschampsia -descloizite -descort -describability -describable -describably -describe -describer -descrier -descript -description -descriptionist -descriptionless -descriptive -descriptively -descriptiveness -descriptory -descrive -descry -deseasonalize -desecrate -desecrater -desecration -desectionalize -deseed -desegmentation -desegmented -desensitization -desensitize -desensitizer -desentimentalize -deseret -desert -deserted -desertedly -desertedness -deserter -desertful -desertfully -desertic -deserticolous -desertion -desertism -desertless -desertlessly -desertlike -desertness -desertress -desertrice -desertward -deserve -deserved -deservedly -deservedness -deserveless -deserver -deserving -deservingly -deservingness -desex -desexualization -desexualize -deshabille -desi -desiccant -desiccate -desiccation -desiccative -desiccator -desiccatory -desiderant -desiderata -desiderate -desideration -desiderative -desideratum -desight -desightment -design -designable -designate -designation -designative -designator -designatory -designatum -designed -designedly -designedness -designee -designer -designful -designfully -designfulness -designing -designingly -designless -designlessly -designlessness -desilicate -desilicification -desilicify -desiliconization -desiliconize -desilver -desilverization -desilverize -desilverizer -desinence -desinent -desiodothyroxine -desipience -desipiency -desipient -desirability -desirable -desirableness -desirably -desire -desired -desiredly -desiredness -desireful -desirefulness -desireless -desirer -desiringly -desirous -desirously -desirousness -desist -desistance -desistive -desition -desize -desk -desklike -deslime -desma -desmachymatous -desmachyme -desmacyte -desman -Desmanthus -Desmarestia -Desmarestiaceae -desmarestiaceous -Desmatippus -desmectasia -desmepithelium -desmic -desmid -Desmidiaceae -desmidiaceous -Desmidiales -desmidiologist -desmidiology -desmine -desmitis -desmocyte -desmocytoma -Desmodactyli -Desmodium -desmodont -Desmodontidae -Desmodus -desmodynia -desmogen -desmogenous -Desmognathae -desmognathism -desmognathous -desmography -desmohemoblast -desmoid -desmology -desmoma -Desmomyaria -desmon -Desmoncus -desmoneoplasm -desmonosology -desmopathologist -desmopathology -desmopathy -desmopelmous -desmopexia -desmopyknosis -desmorrhexis -Desmoscolecidae -Desmoscolex -desmosis -desmosite -Desmothoraca -desmotomy -desmotrope -desmotropic -desmotropism -desocialization -desocialize -desolate -desolately -desolateness -desolater -desolating -desolatingly -desolation -desolative -desonation -desophisticate -desophistication -desorption -desoxalate -desoxyanisoin -desoxybenzoin -desoxycinchonine -desoxycorticosterone -desoxymorphine -desoxyribonucleic -despair -despairer -despairful -despairfully -despairfulness -despairing -despairingly -despairingness -despecialization -despecialize -despecificate -despecification -despect -desperacy -desperado -desperadoism -desperate -desperately -desperateness -desperation -despicability -despicable -despicableness -despicably -despiritualization -despiritualize -despisable -despisableness -despisal -despise -despisedness -despisement -despiser -despisingly -despite -despiteful -despitefully -despitefulness -despiteous -despiteously -despoil -despoiler -despoilment -despoliation -despond -despondence -despondency -despondent -despondently -desponder -desponding -despondingly -despot -despotat -Despotes -despotic -despotically -despoticalness -despoticly -despotism -despotist -despotize -despumate -despumation -desquamate -desquamation -desquamative -desquamatory -dess -dessa -dessert -dessertspoon -dessertspoonful -dessiatine -dessil -destabilize -destain -destandardize -desterilization -desterilize -destinate -destination -destine -destinezite -destinism -destinist -destiny -destitute -destitutely -destituteness -destitution -destour -destress -destrier -destroy -destroyable -destroyer -destroyingly -destructibility -destructible -destructibleness -destruction -destructional -destructionism -destructionist -destructive -destructively -destructiveness -destructivism -destructivity -destructor -destructuralize -desubstantiate -desucration -desuete -desuetude -desugar -desugarize -Desulfovibrio -desulphur -desulphurate -desulphuration -desulphurization -desulphurize -desulphurizer -desultor -desultorily -desultoriness -desultorious -desultory -desuperheater -desyatin -desyl -desynapsis -desynaptic -desynonymization -desynonymize -detach -detachability -detachable -detachableness -detachably -detached -detachedly -detachedness -detacher -detachment -detail -detailed -detailedly -detailedness -detailer -detailism -detailist -detain -detainable -detainal -detainer -detainingly -detainment -detar -detassel -detax -detect -detectability -detectable -detectably -detectaphone -detecter -detectible -detection -detective -detectivism -detector -detenant -detent -detention -detentive -deter -deterge -detergence -detergency -detergent -detergible -deteriorate -deterioration -deteriorationist -deteriorative -deteriorator -deteriorism -deteriority -determent -determinability -determinable -determinableness -determinably -determinacy -determinant -determinantal -determinate -determinately -determinateness -determination -determinative -determinatively -determinativeness -determinator -determine -determined -determinedly -determinedness -determiner -determinism -determinist -deterministic -determinoid -deterrence -deterrent -detersion -detersive -detersively -detersiveness -detest -detestability -detestable -detestableness -detestably -detestation -detester -dethronable -dethrone -dethronement -dethroner -dethyroidism -detin -detinet -detinue -detonable -detonate -detonation -detonative -detonator -detorsion -detour -detoxicant -detoxicate -detoxication -detoxicator -detoxification -detoxify -detract -detracter -detractingly -detraction -detractive -detractively -detractiveness -detractor -detractory -detractress -detrain -detrainment -detribalization -detribalize -detriment -detrimental -detrimentality -detrimentally -detrimentalness -detrital -detrited -detrition -detritus -Detroiter -detrude -detruncate -detruncation -detrusion -detrusive -detrusor -detubation -detumescence -detune -detur -deuce -deuced -deucedly -deul -deurbanize -deutencephalic -deutencephalon -deuteragonist -deuteranomal -deuteranomalous -deuteranope -deuteranopia -deuteranopic -deuteric -deuteride -deuterium -deuteroalbumose -deuterocanonical -deuterocasease -deuterocone -deuteroconid -deuterodome -deuteroelastose -deuterofibrinose -deuterogamist -deuterogamy -deuterogelatose -deuterogenic -deuteroglobulose -deuteromorphic -Deuteromycetes -deuteromyosinose -deuteron -Deuteronomic -Deuteronomical -Deuteronomist -Deuteronomistic -Deuteronomy -deuteropathic -deuteropathy -deuteroplasm -deuteroprism -deuteroproteose -deuteroscopic -deuteroscopy -deuterostoma -Deuterostomata -deuterostomatous -deuterotokous -deuterotoky -deuterotype -deuterovitellose -deuterozooid -deutobromide -deutocarbonate -deutochloride -deutomala -deutomalal -deutomalar -deutomerite -deuton -deutonephron -deutonymph -deutonymphal -deutoplasm -deutoplasmic -deutoplastic -deutoscolex -deutoxide -Deutzia -dev -deva -devachan -devadasi -devall -devaloka -devalorize -devaluate -devaluation -devalue -devance -devaporate -devaporation -devast -devastate -devastating -devastatingly -devastation -devastative -devastator -devastavit -devaster -devata -develin -develop -developability -developable -developedness -developer -developist -development -developmental -developmentalist -developmentally -developmentarian -developmentary -developmentist -developoid -devertebrated -devest -deviability -deviable -deviancy -deviant -deviate -deviation -deviationism -deviationist -deviative -deviator -deviatory -device -deviceful -devicefully -devicefulness -devil -devilbird -devildom -deviled -deviler -deviless -devilet -devilfish -devilhood -deviling -devilish -devilishly -devilishness -devilism -devilize -devilkin -devillike -devilman -devilment -devilmonger -devilry -devilship -deviltry -devilward -devilwise -devilwood -devily -devious -deviously -deviousness -devirginate -devirgination -devirginator -devirilize -devisable -devisal -deviscerate -devisceration -devise -devisee -deviser -devisor -devitalization -devitalize -devitalized -devitaminize -devitrification -devitrify -devocalization -devocalize -devoice -devoid -devoir -devolatilize -devolute -devolution -devolutionary -devolutionist -devolve -devolvement -Devon -Devonian -Devonic -devonite -devonport -devonshire -devorative -devote -devoted -devotedly -devotedness -devotee -devoteeism -devotement -devoter -devotion -devotional -devotionalism -devotionalist -devotionality -devotionally -devotionalness -devotionate -devotionist -devour -devourable -devourer -devouress -devouring -devouringly -devouringness -devourment -devout -devoutless -devoutlessly -devoutlessness -devoutly -devoutness -devow -devulcanization -devulcanize -devulgarize -devvel -dew -dewan -dewanee -dewanship -dewater -dewaterer -dewax -dewbeam -dewberry -dewclaw -dewclawed -dewcup -dewdamp -dewdrop -dewdropper -dewer -Dewey -deweylite -dewfall -dewflower -dewily -dewiness -dewlap -dewlapped -dewless -dewlight -dewlike -dewool -deworm -dewret -dewtry -dewworm -dewy -dexiocardia -dexiotrope -dexiotropic -dexiotropism -dexiotropous -Dexter -dexter -dexterical -dexterity -dexterous -dexterously -dexterousness -dextrad -dextral -dextrality -dextrally -dextran -dextraural -dextrin -dextrinase -dextrinate -dextrinize -dextrinous -dextro -dextroaural -dextrocardia -dextrocardial -dextrocerebral -dextrocular -dextrocularity -dextroduction -dextroglucose -dextrogyrate -dextrogyration -dextrogyratory -dextrogyrous -dextrolactic -dextrolimonene -dextropinene -dextrorotary -dextrorotatary -dextrorotation -dextrorsal -dextrorse -dextrorsely -dextrosazone -dextrose -dextrosinistral -dextrosinistrally -dextrosuria -dextrotartaric -dextrotropic -dextrotropous -dextrous -dextrously -dextrousness -dextroversion -dey -deyhouse -deyship -deywoman -Dezaley -dezinc -dezincation -dezincification -dezincify -dezymotize -dha -dhabb -dhai -dhak -dhamnoo -dhan -dhangar -dhanuk -dhanush -Dhanvantari -dharana -dharani -dharma -dharmakaya -dharmashastra -dharmasmriti -dharmasutra -dharmsala -dharna -dhaura -dhauri -dhava -dhaw -Dheneb -dheri -dhobi -dhole -dhoni -dhoon -dhoti -dhoul -dhow -Dhritarashtra -dhu -dhunchee -dhunchi -Dhundia -dhurra -dhyal -dhyana -di -diabase -diabasic -diabetes -diabetic -diabetogenic -diabetogenous -diabetometer -diablerie -diabolarch -diabolarchy -diabolatry -diabolepsy -diaboleptic -diabolic -diabolical -diabolically -diabolicalness -diabolification -diabolify -diabolism -diabolist -diabolization -diabolize -diabological -diabology -diabolology -diabrosis -diabrotic -Diabrotica -diacanthous -diacaustic -diacetamide -diacetate -diacetic -diacetin -diacetine -diacetonuria -diaceturia -diacetyl -diacetylene -diachoretic -diachronic -diachylon -diachylum -diacid -diacipiperazine -diaclase -diaclasis -diaclastic -diacle -diaclinal -diacodion -diacoele -diacoelia -diaconal -diaconate -diaconia -diaconicon -diaconicum -diacope -diacranterian -diacranteric -diacrisis -diacritic -diacritical -diacritically -Diacromyodi -diacromyodian -diact -diactin -diactinal -diactinic -diactinism -Diadelphia -diadelphian -diadelphic -diadelphous -diadem -Diadema -Diadematoida -diaderm -diadermic -diadoche -Diadochi -Diadochian -diadochite -diadochokinesia -diadochokinetic -diadromous -diadumenus -diaene -diaereses -diaeresis -diaeretic -diaetetae -diagenesis -diagenetic -diageotropic -diageotropism -diaglyph -diaglyphic -diagnosable -diagnose -diagnoseable -diagnoses -diagnosis -diagnostic -diagnostically -diagnosticate -diagnostication -diagnostician -diagnostics -diagometer -diagonal -diagonality -diagonalize -diagonally -diagonalwise -diagonic -diagram -diagrammatic -diagrammatical -diagrammatician -diagrammatize -diagrammeter -diagrammitically -diagraph -diagraphic -diagraphical -diagraphics -diagredium -diagrydium -Diaguitas -Diaguite -diaheliotropic -diaheliotropically -diaheliotropism -diakinesis -dial -dialcohol -dialdehyde -dialect -dialectal -dialectalize -dialectally -dialectic -dialectical -dialectically -dialectician -dialecticism -dialecticize -dialectics -dialectologer -dialectological -dialectologist -dialectology -dialector -dialer -dialin -dialing -dialist -Dialister -dialkyl -dialkylamine -diallage -diallagic -diallagite -diallagoid -diallel -diallelon -diallelus -diallyl -dialogic -dialogical -dialogically -dialogism -dialogist -dialogistic -dialogistical -dialogistically -dialogite -dialogize -dialogue -dialoguer -Dialonian -dialuric -dialycarpous -Dialypetalae -dialypetalous -dialyphyllous -dialysepalous -dialysis -dialystaminous -dialystelic -dialystely -dialytic -dialytically -dialyzability -dialyzable -dialyzate -dialyzation -dialyzator -dialyze -dialyzer -diamagnet -diamagnetic -diamagnetically -diamagnetism -diamantiferous -diamantine -diamantoid -diamb -diambic -diamesogamous -diameter -diametral -diametrally -diametric -diametrical -diametrically -diamicton -diamide -diamidogen -diamine -diaminogen -diaminogene -diammine -diamminobromide -diamminonitrate -diammonium -diamond -diamondback -diamonded -diamondiferous -diamondize -diamondlike -diamondwise -diamondwork -diamorphine -diamylose -Dian -dian -Diana -Diancecht -diander -Diandria -diandrian -diandrous -Diane -dianetics -Dianil -dianilid -dianilide -dianisidin -dianisidine -dianite -dianodal -dianoetic -dianoetical -dianoetically -Dianthaceae -Dianthera -Dianthus -diapalma -diapase -diapasm -diapason -diapasonal -diapause -diapedesis -diapedetic -Diapensia -Diapensiaceae -diapensiaceous -diapente -diaper -diapering -diaphane -diaphaneity -diaphanie -diaphanometer -diaphanometric -diaphanometry -diaphanoscope -diaphanoscopy -diaphanotype -diaphanous -diaphanously -diaphanousness -diaphany -diaphone -diaphonia -diaphonic -diaphonical -diaphony -diaphoresis -diaphoretic -diaphoretical -diaphorite -diaphote -diaphototropic -diaphototropism -diaphragm -diaphragmal -diaphragmatic -diaphragmatically -diaphtherin -diaphysial -diaphysis -diaplasma -diaplex -diaplexal -diaplexus -diapnoic -diapnotic -diapophysial -diapophysis -Diaporthe -diapositive -diapsid -Diapsida -diapsidan -diapyesis -diapyetic -diarch -diarchial -diarchic -diarchy -diarhemia -diarial -diarian -diarist -diaristic -diarize -diarrhea -diarrheal -diarrheic -diarrhetic -diarsenide -diarthric -diarthrodial -diarthrosis -diarticular -diary -diaschisis -diaschisma -diaschistic -Diascia -diascope -diascopy -diascord -diascordium -diaskeuasis -diaskeuast -Diaspidinae -diaspidine -Diaspinae -diaspine -diaspirin -Diaspora -diaspore -diastaltic -diastase -diastasic -diastasimetry -diastasis -diastataxic -diastataxy -diastatic -diastatically -diastem -diastema -diastematic -diastematomyelia -diaster -diastole -diastolic -diastomatic -diastral -diastrophe -diastrophic -diastrophism -diastrophy -diasynthesis -diasyrm -diatessaron -diathermacy -diathermal -diathermancy -diathermaneity -diathermanous -diathermic -diathermize -diathermometer -diathermotherapy -diathermous -diathermy -diathesic -diathesis -diathetic -diatom -Diatoma -Diatomaceae -diatomacean -diatomaceoid -diatomaceous -Diatomales -Diatomeae -diatomean -diatomic -diatomicity -diatomiferous -diatomin -diatomist -diatomite -diatomous -diatonic -diatonical -diatonically -diatonous -diatoric -diatreme -diatribe -diatribist -diatropic -diatropism -Diatryma -Diatrymiformes -Diau -diaulic -diaulos -diaxial -diaxon -diazenithal -diazeuctic -diazeuxis -diazide -diazine -diazoamine -diazoamino -diazoaminobenzene -diazoanhydride -diazoate -diazobenzene -diazohydroxide -diazoic -diazoimide -diazoimido -diazole -diazoma -diazomethane -diazonium -diazotate -diazotic -diazotizability -diazotizable -diazotization -diazotize -diazotype -dib -dibase -dibasic -dibasicity -dibatag -Dibatis -dibber -dibble -dibbler -dibbuk -dibenzophenazine -dibenzopyrrole -dibenzoyl -dibenzyl -dibhole -diblastula -diborate -Dibothriocephalus -dibrach -dibranch -Dibranchia -Dibranchiata -dibranchiate -dibranchious -dibrom -dibromid -dibromide -dibromoacetaldehyde -dibromobenzene -dibs -dibstone -dibutyrate -dibutyrin -dicacodyl -Dicaeidae -dicaeology -dicalcic -dicalcium -dicarbonate -dicarbonic -dicarboxylate -dicarboxylic -dicarpellary -dicaryon -dicaryophase -dicaryophyte -dicaryotic -dicast -dicastery -dicastic -dicatalectic -dicatalexis -Diccon -dice -diceboard -dicebox -dicecup -dicellate -diceman -Dicentra -dicentrine -dicephalism -dicephalous -dicephalus -diceplay -dicer -Diceras -Diceratidae -dicerion -dicerous -dicetyl -dich -Dichapetalaceae -Dichapetalum -dichas -dichasial -dichasium -dichastic -Dichelyma -dichlamydeous -dichloramine -dichlorhydrin -dichloride -dichloroacetic -dichlorohydrin -dichloromethane -dichocarpism -dichocarpous -dichogamous -dichogamy -Dichondra -Dichondraceae -dichopodial -dichoptic -dichord -dichoree -Dichorisandra -dichotic -dichotomal -dichotomic -dichotomically -dichotomist -dichotomistic -dichotomization -dichotomize -dichotomous -dichotomously -dichotomy -dichroic -dichroiscope -dichroism -dichroite -dichroitic -dichromasy -dichromat -dichromate -dichromatic -dichromatism -dichromic -dichromism -dichronous -dichrooscope -dichroous -dichroscope -dichroscopic -Dichter -dicing -Dick -dick -dickcissel -dickens -Dickensian -Dickensiana -dicker -dickey -dickeybird -dickinsonite -Dicksonia -dicky -Diclidantheraceae -diclinic -diclinism -diclinous -Diclytra -dicoccous -dicodeine -dicoelious -dicolic -dicolon -dicondylian -dicot -dicotyl -dicotyledon -dicotyledonary -Dicotyledones -dicotyledonous -Dicotyles -Dicotylidae -dicotylous -dicoumarin -Dicranaceae -dicranaceous -dicranoid -dicranterian -Dicranum -Dicrostonyx -dicrotal -dicrotic -dicrotism -dicrotous -Dicruridae -dicta -Dictaen -Dictamnus -Dictaphone -dictate -dictatingly -dictation -dictational -dictative -dictator -dictatorial -dictatorialism -dictatorially -dictatorialness -dictatorship -dictatory -dictatress -dictatrix -dictature -dictic -diction -dictionary -Dictograph -dictum -dictynid -Dictynidae -Dictyoceratina -dictyoceratine -dictyodromous -dictyogen -dictyogenous -Dictyograptus -dictyoid -Dictyonema -Dictyonina -dictyonine -Dictyophora -dictyopteran -Dictyopteris -Dictyosiphon -Dictyosiphonaceae -dictyosiphonaceous -dictyosome -dictyostele -dictyostelic -Dictyota -Dictyotaceae -dictyotaceous -Dictyotales -dictyotic -Dictyoxylon -dicyanide -dicyanine -dicyanodiamide -dicyanogen -dicycle -dicyclic -Dicyclica -dicyclist -Dicyema -Dicyemata -dicyemid -Dicyemida -Dicyemidae -Dicynodon -dicynodont -Dicynodontia -Dicynodontidae -did -Didache -Didachist -didactic -didactical -didacticality -didactically -didactician -didacticism -didacticity -didactics -didactive -didactyl -didactylism -didactylous -didapper -didascalar -didascaliae -didascalic -didascalos -didascaly -didder -diddle -diddler -diddy -didelph -Didelphia -didelphian -didelphic -didelphid -Didelphidae -didelphine -Didelphis -didelphoid -didelphous -Didelphyidae -didepsid -didepside -Dididae -didie -didine -Didinium -didle -didna -didnt -Dido -didodecahedral -didodecahedron -didrachma -didrachmal -didromy -didst -diductor -Didunculidae -Didunculinae -Didunculus -Didus -didym -didymate -didymia -didymitis -didymium -didymoid -didymolite -didymous -didymus -Didynamia -didynamian -didynamic -didynamous -didynamy -die -dieb -dieback -diectasis -diedral -diedric -Dieffenbachia -Diego -Diegueno -diehard -dielectric -dielectrically -dielike -Dielytra -diem -diemaker -diemaking -diencephalic -diencephalon -diene -dier -Dieri -Diervilla -diesel -dieselization -dieselize -diesinker -diesinking -diesis -diestock -diet -dietal -dietarian -dietary -Dieter -dieter -dietetic -dietetically -dietetics -dietetist -diethanolamine -diethyl -diethylamine -diethylenediamine -diethylstilbestrol -dietic -dietician -dietics -dietine -dietist -dietitian -dietotherapeutics -dietotherapy -dietotoxic -dietotoxicity -dietrichite -dietzeite -diewise -Dieyerie -diezeugmenon -Difda -diferrion -diffame -diffarreation -differ -difference -differencingly -different -differentia -differentiable -differential -differentialize -differentially -differentiant -differentiate -differentiation -differentiator -differently -differentness -differingly -difficile -difficileness -difficult -difficultly -difficultness -difficulty -diffidation -diffide -diffidence -diffident -diffidently -diffidentness -diffinity -diffluence -diffluent -Difflugia -difform -difformed -difformity -diffract -diffraction -diffractive -diffractively -diffractiveness -diffractometer -diffrangibility -diffrangible -diffugient -diffusate -diffuse -diffused -diffusedly -diffusely -diffuseness -diffuser -diffusibility -diffusible -diffusibleness -diffusibly -diffusimeter -diffusiometer -diffusion -diffusionism -diffusionist -diffusive -diffusively -diffusiveness -diffusivity -diffusor -diformin -dig -digallate -digallic -digametic -digamist -digamma -digammated -digammic -digamous -digamy -digastric -Digenea -digeneous -digenesis -digenetic -Digenetica -digenic -digenous -digeny -digerent -digest -digestant -digested -digestedly -digestedness -digester -digestibility -digestible -digestibleness -digestibly -digestion -digestional -digestive -digestively -digestiveness -digestment -diggable -digger -digging -diggings -dight -dighter -digit -digital -digitalein -digitalin -digitalis -digitalism -digitalization -digitalize -digitally -Digitaria -digitate -digitated -digitately -digitation -digitiform -Digitigrada -digitigrade -digitigradism -digitinervate -digitinerved -digitipinnate -digitize -digitizer -digitogenin -digitonin -digitoplantar -digitorium -digitoxin -digitoxose -digitule -digitus -digladiate -digladiation -digladiator -diglossia -diglot -diglottic -diglottism -diglottist -diglucoside -diglyceride -diglyph -diglyphic -digmeat -dignification -dignified -dignifiedly -dignifiedness -dignify -dignitarial -dignitarian -dignitary -dignity -digoneutic -digoneutism -digonoporous -digonous -Digor -digram -digraph -digraphic -digredience -digrediency -digredient -digress -digressingly -digression -digressional -digressionary -digressive -digressively -digressiveness -digressory -digs -diguanide -Digynia -digynian -digynous -dihalide -dihalo -dihalogen -dihedral -dihedron -dihexagonal -dihexahedral -dihexahedron -dihybrid -dihybridism -dihydrate -dihydrated -dihydrazone -dihydric -dihydride -dihydrite -dihydrocupreine -dihydrocuprin -dihydrogen -dihydrol -dihydronaphthalene -dihydronicotine -dihydrotachysterol -dihydroxy -dihydroxysuccinic -dihydroxytoluene -dihysteria -diiamb -diiambus -diiodide -diiodo -diiodoform -diipenates -Diipolia -diisatogen -dijudicate -dijudication -dika -dikage -dikamali -dikaryon -dikaryophase -dikaryophasic -dikaryophyte -dikaryophytic -dikaryotic -Dike -dike -dikegrave -dikelocephalid -Dikelocephalus -diker -dikereeve -dikeside -diketo -diketone -dikkop -diktyonite -dilacerate -dilaceration -dilambdodont -dilamination -Dilantin -dilapidate -dilapidated -dilapidation -dilapidator -dilatability -dilatable -dilatableness -dilatably -dilatancy -dilatant -dilatate -dilatation -dilatative -dilatator -dilatatory -dilate -dilated -dilatedly -dilatedness -dilater -dilatingly -dilation -dilative -dilatometer -dilatometric -dilatometry -dilator -dilatorily -dilatoriness -dilatory -dildo -dilection -Dilemi -Dilemite -dilemma -dilemmatic -dilemmatical -dilemmatically -dilettant -dilettante -dilettanteish -dilettanteism -dilettanteship -dilettanti -dilettantish -dilettantism -dilettantist -diligence -diligency -diligent -diligentia -diligently -diligentness -dilker -dill -Dillenia -Dilleniaceae -dilleniaceous -dilleniad -dilli -dillier -dilligrout -dilling -dillseed -dillue -dilluer -dillweed -dilly -dillydallier -dillydally -dillyman -dilo -dilogy -diluent -dilute -diluted -dilutedly -dilutedness -dilutee -dilutely -diluteness -dilutent -diluter -dilution -dilutive -dilutor -diluvia -diluvial -diluvialist -diluvian -diluvianism -diluvion -diluvium -dim -dimagnesic -dimanganion -dimanganous -Dimaris -dimastigate -Dimatis -dimber -dimberdamber -dimble -dime -dimensible -dimension -dimensional -dimensionality -dimensionally -dimensioned -dimensionless -dimensive -dimer -Dimera -dimeran -dimercuric -dimercurion -dimercury -dimeric -dimeride -dimerism -dimerization -dimerlie -dimerous -dimetallic -dimeter -dimethoxy -dimethyl -dimethylamine -dimethylamino -dimethylaniline -dimethylbenzene -dimetria -dimetric -Dimetry -dimication -dimidiate -dimidiation -diminish -diminishable -diminishableness -diminisher -diminishingly -diminishment -diminuendo -diminutal -diminute -diminution -diminutival -diminutive -diminutively -diminutiveness -diminutivize -dimiss -dimission -dimissorial -dimissory -dimit -Dimitry -Dimittis -dimity -dimly -dimmed -dimmedness -dimmer -dimmest -dimmet -dimmish -Dimna -dimness -dimolecular -dimoric -dimorph -dimorphic -dimorphism -Dimorphotheca -dimorphous -dimple -dimplement -dimply -dimps -dimpsy -Dimyaria -dimyarian -dimyaric -din -Dinah -dinamode -Dinantian -dinaphthyl -dinar -Dinaric -Dinarzade -dinder -dindle -Dindymene -Dindymus -dine -diner -dinergate -dineric -dinero -dinette -dineuric -ding -dingar -dingbat -dingdong -dinge -dingee -dinghee -dinghy -dingily -dinginess -dingle -dingleberry -dinglebird -dingledangle -dingly -dingmaul -dingo -dingus -Dingwall -dingy -dinheiro -dinic -dinical -Dinichthys -dining -dinitrate -dinitril -dinitrile -dinitro -dinitrobenzene -dinitrocellulose -dinitrophenol -dinitrotoluene -dink -Dinka -dinkey -dinkum -dinky -dinmont -dinner -dinnerless -dinnerly -dinnertime -dinnerware -dinnery -Dinobryon -Dinoceras -Dinocerata -dinoceratan -dinoceratid -Dinoceratidae -Dinoflagellata -Dinoflagellatae -dinoflagellate -Dinoflagellida -dinomic -Dinomys -Dinophilea -Dinophilus -Dinophyceae -Dinornis -Dinornithes -dinornithic -dinornithid -Dinornithidae -Dinornithiformes -dinornithine -dinornithoid -dinosaur -Dinosauria -dinosaurian -dinothere -Dinotheres -dinotherian -Dinotheriidae -Dinotherium -dinsome -dint -dintless -dinus -diobely -diobol -diocesan -diocese -Diocletian -dioctahedral -Dioctophyme -diode -Diodia -Diodon -diodont -Diodontidae -Dioecia -dioecian -dioeciodimorphous -dioeciopolygamous -dioecious -dioeciously -dioeciousness -dioecism -dioecy -dioestrous -dioestrum -dioestrus -Diogenean -Diogenic -diogenite -dioicous -diol -diolefin -diolefinic -Diomedea -Diomedeidae -Dion -Dionaea -Dionaeaceae -Dione -dionise -dionym -dionymal -Dionysia -Dionysiac -Dionysiacal -Dionysiacally -Dioon -Diophantine -Diopsidae -diopside -Diopsis -dioptase -diopter -Dioptidae -dioptograph -dioptometer -dioptometry -dioptoscopy -dioptra -dioptral -dioptrate -dioptric -dioptrical -dioptrically -dioptrics -dioptrometer -dioptrometry -dioptroscopy -dioptry -diorama -dioramic -diordinal -diorite -dioritic -diorthosis -diorthotic -Dioscorea -Dioscoreaceae -dioscoreaceous -dioscorein -dioscorine -Dioscuri -Dioscurian -diose -Diosma -diosmin -diosmose -diosmosis -diosmotic -diosphenol -Diospyraceae -diospyraceous -Diospyros -diota -diotic -Diotocardia -diovular -dioxane -dioxide -dioxime -dioxindole -dioxy -dip -Dipala -diparentum -dipartite -dipartition -dipaschal -dipentene -dipeptid -dipeptide -dipetalous -dipetto -diphase -diphaser -diphasic -diphead -diphenol -diphenyl -diphenylamine -diphenylchloroarsine -diphenylene -diphenylenimide -diphenylguanidine -diphenylmethane -diphenylquinomethane -diphenylthiourea -diphosgene -diphosphate -diphosphide -diphosphoric -diphosphothiamine -diphrelatic -diphtheria -diphtherial -diphtherian -diphtheric -diphtheritic -diphtheritically -diphtheritis -diphtheroid -diphtheroidal -diphtherotoxin -diphthong -diphthongal -diphthongalize -diphthongally -diphthongation -diphthongic -diphthongization -diphthongize -diphycercal -diphycercy -Diphyes -diphygenic -diphyletic -Diphylla -Diphylleia -Diphyllobothrium -diphyllous -diphyodont -diphyozooid -Diphysite -Diphysitism -diphyzooid -dipicrate -dipicrylamin -dipicrylamine -Diplacanthidae -Diplacanthus -diplacusis -Dipladenia -diplanar -diplanetic -diplanetism -diplantidian -diplarthrism -diplarthrous -diplasiasmus -diplasic -diplasion -diplegia -dipleidoscope -dipleura -dipleural -dipleurogenesis -dipleurogenetic -diplex -diplobacillus -diplobacterium -diploblastic -diplocardia -diplocardiac -Diplocarpon -diplocaulescent -diplocephalous -diplocephalus -diplocephaly -diplochlamydeous -diplococcal -diplococcemia -diplococcic -diplococcoid -diplococcus -diploconical -diplocoria -Diplodia -Diplodocus -Diplodus -diploe -diploetic -diplogangliate -diplogenesis -diplogenetic -diplogenic -Diploglossata -diploglossate -diplograph -diplographic -diplographical -diplography -diplohedral -diplohedron -diploic -diploid -diploidic -diploidion -diploidy -diplois -diplokaryon -diploma -diplomacy -diplomat -diplomate -diplomatic -diplomatical -diplomatically -diplomatics -diplomatism -diplomatist -diplomatize -diplomatology -diplomyelia -diplonema -diplonephridia -diploneural -diplont -diploperistomic -diplophase -diplophyte -diplopia -diplopic -diploplacula -diploplacular -diploplaculate -diplopod -Diplopoda -diplopodic -Diploptera -diplopterous -Diplopteryga -diplopy -diplosis -diplosome -diplosphenal -diplosphene -Diplospondyli -diplospondylic -diplospondylism -diplostemonous -diplostemony -diplostichous -Diplotaxis -diplotegia -diplotene -Diplozoon -diplumbic -Dipneumona -Dipneumones -dipneumonous -dipneustal -Dipneusti -dipnoan -Dipnoi -dipnoid -dipnoous -dipode -dipodic -Dipodidae -Dipodomyinae -Dipodomys -dipody -dipolar -dipolarization -dipolarize -dipole -diporpa -dipotassic -dipotassium -dipped -dipper -dipperful -dipping -diprimary -diprismatic -dipropargyl -dipropyl -Diprotodon -diprotodont -Diprotodontia -Dipsacaceae -dipsacaceous -Dipsaceae -dipsaceous -Dipsacus -Dipsadinae -dipsas -dipsetic -dipsey -dipsomania -dipsomaniac -dipsomaniacal -Dipsosaurus -dipsosis -dipter -Diptera -Dipteraceae -dipteraceous -dipterad -dipteral -dipteran -dipterist -dipterocarp -Dipterocarpaceae -dipterocarpaceous -dipterocarpous -Dipterocarpus -dipterocecidium -dipterological -dipterologist -dipterology -dipteron -dipteros -dipterous -Dipteryx -diptote -diptych -Dipus -dipware -dipygus -dipylon -dipyre -dipyrenous -dipyridyl -Dirca -Dircaean -dird -dirdum -dire -direct -directable -directed -directer -direction -directional -directionally -directionless -directitude -directive -directively -directiveness -directivity -directly -directness -Directoire -director -directoral -directorate -directorial -directorially -directorship -directory -directress -directrices -directrix -direful -direfully -direfulness -direly -dirempt -diremption -direness -direption -dirge -dirgeful -dirgelike -dirgeman -dirgler -dirhem -Dirian -Dirichletian -dirigent -dirigibility -dirigible -dirigomotor -diriment -Dirk -dirk -dirl -dirndl -dirt -dirtbird -dirtboard -dirten -dirtily -dirtiness -dirtplate -dirty -dis -Disa -disability -disable -disabled -disablement -disabusal -disabuse -disacceptance -disaccharide -disaccharose -disaccommodate -disaccommodation -disaccord -disaccordance -disaccordant -disaccustom -disaccustomed -disaccustomedness -disacidify -disacknowledge -disacknowledgement -disacquaint -disacquaintance -disadjust -disadorn -disadvance -disadvantage -disadvantageous -disadvantageously -disadvantageousness -disadventure -disadventurous -disadvise -disaffect -disaffectation -disaffected -disaffectedly -disaffectedness -disaffection -disaffectionate -disaffiliate -disaffiliation -disaffirm -disaffirmance -disaffirmation -disaffirmative -disafforest -disafforestation -disafforestment -disagglomeration -disaggregate -disaggregation -disaggregative -disagio -disagree -disagreeability -disagreeable -disagreeableness -disagreeably -disagreed -disagreement -disagreer -disalicylide -disalign -disalignment -disalike -disallow -disallowable -disallowableness -disallowance -disally -disamenity -Disamis -disanagrammatize -disanalogous -disangularize -disanimal -disanimate -disanimation -disannex -disannexation -disannul -disannuller -disannulment -disanoint -disanswerable -disapostle -disapparel -disappear -disappearance -disappearer -disappearing -disappoint -disappointed -disappointedly -disappointer -disappointing -disappointingly -disappointingness -disappointment -disappreciate -disappreciation -disapprobation -disapprobative -disapprobatory -disappropriate -disappropriation -disapprovable -disapproval -disapprove -disapprover -disapprovingly -disaproned -disarchbishop -disarm -disarmament -disarmature -disarmed -disarmer -disarming -disarmingly -disarrange -disarrangement -disarray -disarticulate -disarticulation -disarticulator -disasinate -disasinize -disassemble -disassembly -disassimilate -disassimilation -disassimilative -disassociate -disassociation -disaster -disastimeter -disastrous -disastrously -disastrousness -disattaint -disattire -disattune -disauthenticate -disauthorize -disavow -disavowable -disavowal -disavowedly -disavower -disavowment -disawa -disazo -disbalance -disbalancement -disband -disbandment -disbar -disbark -disbarment -disbelief -disbelieve -disbeliever -disbelieving -disbelievingly -disbench -disbenchment -disbloom -disbody -disbosom -disbowel -disbrain -disbranch -disbud -disbudder -disburden -disburdenment -disbursable -disburse -disbursement -disburser -disburthen -disbury -disbutton -disc -discage -discal -discalceate -discalced -discanonization -discanonize -discanter -discantus -discapacitate -discard -discardable -discarder -discardment -discarnate -discarnation -discase -discastle -discept -disceptation -disceptator -discern -discerner -discernible -discernibleness -discernibly -discerning -discerningly -discernment -discerp -discerpibility -discerpible -discerpibleness -discerptibility -discerptible -discerptibleness -discerption -discharacter -discharge -dischargeable -dischargee -discharger -discharging -discharity -discharm -dischase -Disciflorae -discifloral -disciform -discigerous -Discina -discinct -discinoid -disciple -disciplelike -discipleship -disciplinability -disciplinable -disciplinableness -disciplinal -disciplinant -disciplinarian -disciplinarianism -disciplinarily -disciplinary -disciplinative -disciplinatory -discipline -discipliner -discipular -discircumspection -discission -discitis -disclaim -disclaimant -disclaimer -disclamation -disclamatory -disclass -disclassify -disclike -disclimax -discloister -disclose -disclosed -discloser -disclosive -disclosure -discloud -discoach -discoactine -discoblastic -discoblastula -discobolus -discocarp -discocarpium -discocarpous -discocephalous -discodactyl -discodactylous -discogastrula -discoglossid -Discoglossidae -discoglossoid -discographical -discography -discohexaster -discoid -discoidal -Discoidea -Discoideae -discolichen -discolith -discolor -discolorate -discoloration -discolored -discoloredness -discolorization -discolorment -discolourization -Discomedusae -discomedusan -discomedusoid -discomfit -discomfiter -discomfiture -discomfort -discomfortable -discomfortableness -discomforting -discomfortingly -discommend -discommendable -discommendableness -discommendably -discommendation -discommender -discommode -discommodious -discommodiously -discommodiousness -discommodity -discommon -discommons -discommunity -discomorula -discompliance -discompose -discomposed -discomposedly -discomposedness -discomposing -discomposingly -discomposure -discomycete -Discomycetes -discomycetous -Disconanthae -disconanthous -disconcert -disconcerted -disconcertedly -disconcertedness -disconcerting -disconcertingly -disconcertingness -disconcertion -disconcertment -disconcord -disconduce -disconducive -Disconectae -disconform -disconformable -disconformity -discongruity -disconjure -disconnect -disconnected -disconnectedly -disconnectedness -disconnecter -disconnection -disconnective -disconnectiveness -disconnector -disconsider -disconsideration -disconsolate -disconsolately -disconsolateness -disconsolation -disconsonancy -disconsonant -discontent -discontented -discontentedly -discontentedness -discontentful -discontenting -discontentive -discontentment -discontiguity -discontiguous -discontiguousness -discontinuable -discontinuance -discontinuation -discontinue -discontinuee -discontinuer -discontinuity -discontinuor -discontinuous -discontinuously -discontinuousness -disconula -disconvenience -disconvenient -disconventicle -discophile -Discophora -discophoran -discophore -discophorous -discoplacenta -discoplacental -Discoplacentalia -discoplacentalian -discoplasm -discopodous -discord -discordance -discordancy -discordant -discordantly -discordantness -discordful -Discordia -discording -discorporate -discorrespondency -discorrespondent -discount -discountable -discountenance -discountenancer -discounter -discouple -discourage -discourageable -discouragement -discourager -discouraging -discouragingly -discouragingness -discourse -discourseless -discourser -discoursive -discoursively -discoursiveness -discourteous -discourteously -discourteousness -discourtesy -discous -discovenant -discover -discoverability -discoverable -discoverably -discovered -discoverer -discovert -discoverture -discovery -discreate -discreation -discredence -discredit -discreditability -discreditable -discreet -discreetly -discreetness -discrepance -discrepancy -discrepant -discrepantly -discrepate -discrepation -discrested -discrete -discretely -discreteness -discretion -discretional -discretionally -discretionarily -discretionary -discretive -discretively -discretiveness -discriminability -discriminable -discriminal -discriminant -discriminantal -discriminate -discriminately -discriminateness -discriminating -discriminatingly -discrimination -discriminational -discriminative -discriminatively -discriminator -discriminatory -discrown -disculpate -disculpation -disculpatory -discumber -discursative -discursativeness -discursify -discursion -discursive -discursively -discursiveness -discursory -discursus -discurtain -discus -discuss -discussable -discussant -discusser -discussible -discussion -discussional -discussionism -discussionist -discussive -discussment -discutable -discutient -disdain -disdainable -disdainer -disdainful -disdainfully -disdainfulness -disdainly -disdeceive -disdenominationalize -disdiaclast -disdiaclastic -disdiapason -disdiazo -disdiplomatize -disdodecahedroid -disdub -disease -diseased -diseasedly -diseasedness -diseaseful -diseasefulness -disecondary -disedge -disedification -disedify -diseducate -diselder -diselectrification -diselectrify -diselenide -disematism -disembargo -disembark -disembarkation -disembarkment -disembarrass -disembarrassment -disembattle -disembed -disembellish -disembitter -disembocation -disembodiment -disembody -disembogue -disemboguement -disembosom -disembowel -disembowelment -disembower -disembroil -disemburden -diseme -disemic -disemplane -disemploy -disemployment -disempower -disenable -disenablement -disenact -disenactment -disenamor -disenamour -disenchain -disenchant -disenchanter -disenchantingly -disenchantment -disenchantress -disencharm -disenclose -disencumber -disencumberment -disencumbrance -disendow -disendower -disendowment -disenfranchise -disenfranchisement -disengage -disengaged -disengagedness -disengagement -disengirdle -disenjoy -disenjoyment -disenmesh -disennoble -disennui -disenshroud -disenslave -disensoul -disensure -disentail -disentailment -disentangle -disentanglement -disentangler -disenthral -disenthrall -disenthrallment -disenthralment -disenthrone -disenthronement -disentitle -disentomb -disentombment -disentrain -disentrainment -disentrammel -disentrance -disentrancement -disentwine -disenvelop -disepalous -disequalize -disequalizer -disequilibrate -disequilibration -disequilibrium -disestablish -disestablisher -disestablishment -disestablishmentarian -disesteem -disesteemer -disestimation -disexcommunicate -disfaith -disfame -disfashion -disfavor -disfavorer -disfeature -disfeaturement -disfellowship -disfen -disfiguration -disfigurative -disfigure -disfigurement -disfigurer -disfiguringly -disflesh -disfoliage -disforest -disforestation -disfranchise -disfranchisement -disfranchiser -disfrequent -disfriar -disfrock -disfurnish -disfurnishment -disgarland -disgarnish -disgarrison -disgavel -disgeneric -disgenius -disgig -disglorify -disglut -disgood -disgorge -disgorgement -disgorger -disgospel -disgown -disgrace -disgraceful -disgracefully -disgracefulness -disgracement -disgracer -disgracious -disgradation -disgrade -disgregate -disgregation -disgruntle -disgruntlement -disguisable -disguisal -disguise -disguised -disguisedly -disguisedness -disguiseless -disguisement -disguiser -disguising -disgulf -disgust -disgusted -disgustedly -disgustedness -disguster -disgustful -disgustfully -disgustfulness -disgusting -disgustingly -disgustingness -dish -dishabilitate -dishabilitation -dishabille -dishabituate -dishallow -dishallucination -disharmonic -disharmonical -disharmonious -disharmonism -disharmonize -disharmony -dishboard -dishcloth -dishclout -disheart -dishearten -disheartener -disheartening -dishearteningly -disheartenment -disheaven -dished -dishellenize -dishelm -disher -disherent -disherison -disherit -disheritment -dishevel -disheveled -dishevelment -dishexecontahedroid -dishful -Dishley -dishlike -dishling -dishmaker -dishmaking -dishmonger -dishome -dishonest -dishonestly -dishonor -dishonorable -dishonorableness -dishonorably -dishonorary -dishonorer -dishorn -dishorner -dishorse -dishouse -dishpan -dishpanful -dishrag -dishumanize -dishwasher -dishwashing -dishwashings -dishwater -dishwatery -dishwiper -dishwiping -disidentify -disilane -disilicane -disilicate -disilicic -disilicid -disilicide -disillude -disilluminate -disillusion -disillusionist -disillusionize -disillusionizer -disillusionment -disillusive -disimagine -disimbitter -disimitate -disimitation -disimmure -disimpark -disimpassioned -disimprison -disimprisonment -disimprove -disimprovement -disincarcerate -disincarceration -disincarnate -disincarnation -disinclination -disincline -disincorporate -disincorporation -disincrust -disincrustant -disincrustion -disindividualize -disinfect -disinfectant -disinfecter -disinfection -disinfective -disinfector -disinfest -disinfestation -disinfeudation -disinflame -disinflate -disinflation -disingenuity -disingenuous -disingenuously -disingenuousness -disinherison -disinherit -disinheritable -disinheritance -disinhume -disinsulation -disinsure -disintegrable -disintegrant -disintegrate -disintegration -disintegrationist -disintegrative -disintegrator -disintegratory -disintegrity -disintegrous -disintensify -disinter -disinterest -disinterested -disinterestedly -disinterestedness -disinteresting -disinterment -disintertwine -disintrench -disintricate -disinvagination -disinvest -disinvestiture -disinvigorate -disinvite -disinvolve -disjasked -disject -disjection -disjoin -disjoinable -disjoint -disjointed -disjointedly -disjointedness -disjointly -disjointure -disjunct -disjunction -disjunctive -disjunctively -disjunctor -disjuncture -disjune -disk -diskelion -diskless -disklike -dislaurel -disleaf -dislegitimate -dislevelment -dislicense -dislikable -dislike -dislikelihood -disliker -disliking -dislimn -dislink -dislip -disload -dislocability -dislocable -dislocate -dislocated -dislocatedly -dislocatedness -dislocation -dislocator -dislocatory -dislodge -dislodgeable -dislodgement -dislove -disloyal -disloyalist -disloyally -disloyalty -disluster -dismain -dismal -dismality -dismalize -dismally -dismalness -disman -dismantle -dismantlement -dismantler -dismarble -dismark -dismarket -dismask -dismast -dismastment -dismay -dismayable -dismayed -dismayedness -dismayful -dismayfully -dismayingly -disme -dismember -dismembered -dismemberer -dismemberment -dismembrate -dismembrator -disminion -disminister -dismiss -dismissable -dismissal -dismissible -dismissingly -dismission -dismissive -dismissory -dismoded -dismount -dismountable -dismutation -disna -disnaturalization -disnaturalize -disnature -disnest -disnew -disniche -disnosed -disnumber -disobedience -disobedient -disobediently -disobey -disobeyal -disobeyer -disobligation -disoblige -disobliger -disobliging -disobligingly -disobligingness -disoccupation -disoccupy -disodic -disodium -disomatic -disomatous -disomic -disomus -disoperculate -disorb -disorchard -disordained -disorder -disordered -disorderedly -disorderedness -disorderer -disorderliness -disorderly -disordinated -disordination -disorganic -disorganization -disorganize -disorganizer -disorient -disorientate -disorientation -disown -disownable -disownment -disoxygenate -disoxygenation -disozonize -dispapalize -disparage -disparageable -disparagement -disparager -disparaging -disparagingly -disparate -disparately -disparateness -disparation -disparity -dispark -dispart -dispartment -dispassionate -dispassionately -dispassionateness -dispassioned -dispatch -dispatcher -dispatchful -dispatriated -dispauper -dispauperize -dispeace -dispeaceful -dispel -dispeller -dispend -dispender -dispendious -dispendiously -dispenditure -dispensability -dispensable -dispensableness -dispensary -dispensate -dispensation -dispensational -dispensative -dispensatively -dispensator -dispensatorily -dispensatory -dispensatress -dispensatrix -dispense -dispenser -dispensingly -dispeople -dispeoplement -dispeopler -dispergate -dispergation -dispergator -dispericraniate -disperiwig -dispermic -dispermous -dispermy -dispersal -dispersant -disperse -dispersed -dispersedly -dispersedness -dispersement -disperser -dispersibility -dispersible -dispersion -dispersity -dispersive -dispersively -dispersiveness -dispersoid -dispersoidological -dispersoidology -dispersonalize -dispersonate -dispersonification -dispersonify -dispetal -disphenoid -dispiece -dispireme -dispirit -dispirited -dispiritedly -dispiritedness -dispiritingly -dispiritment -dispiteous -dispiteously -dispiteousness -displace -displaceability -displaceable -displacement -displacency -displacer -displant -display -displayable -displayed -displayer -displease -displeased -displeasedly -displeaser -displeasing -displeasingly -displeasingness -displeasurable -displeasurably -displeasure -displeasurement -displenish -displicency -displume -displuviate -dispondaic -dispondee -dispone -disponee -disponent -disponer -dispope -dispopularize -disporous -disport -disportive -disportment -Disporum -disposability -disposable -disposableness -disposal -dispose -disposed -disposedly -disposedness -disposer -disposingly -disposition -dispositional -dispositioned -dispositive -dispositively -dispossess -dispossession -dispossessor -dispossessory -dispost -disposure -dispowder -dispractice -dispraise -dispraiser -dispraisingly -dispread -dispreader -disprejudice -disprepare -disprince -disprison -disprivacied -disprivilege -disprize -disprobabilization -disprobabilize -disprobative -dispromise -disproof -disproportion -disproportionable -disproportionableness -disproportionably -disproportional -disproportionality -disproportionally -disproportionalness -disproportionate -disproportionately -disproportionateness -disproportionation -disprovable -disproval -disprove -disprovement -disproven -disprover -dispulp -dispunct -dispunishable -dispunitive -disputability -disputable -disputableness -disputably -disputant -disputation -disputatious -disputatiously -disputatiousness -disputative -disputatively -disputativeness -disputator -dispute -disputeless -disputer -disqualification -disqualify -disquantity -disquiet -disquieted -disquietedly -disquietedness -disquieten -disquieter -disquieting -disquietingly -disquietly -disquietness -disquietude -disquiparancy -disquiparant -disquiparation -disquisite -disquisition -disquisitional -disquisitionary -disquisitive -disquisitively -disquisitor -disquisitorial -disquisitory -disquixote -disrank -disrate -disrealize -disrecommendation -disregard -disregardable -disregardance -disregardant -disregarder -disregardful -disregardfully -disregardfulness -disrelated -disrelation -disrelish -disrelishable -disremember -disrepair -disreputability -disreputable -disreputableness -disreputably -disreputation -disrepute -disrespect -disrespecter -disrespectful -disrespectfully -disrespectfulness -disrestore -disring -disrobe -disrobement -disrober -disroof -disroost -disroot -disrudder -disrump -disrupt -disruptability -disruptable -disrupter -disruption -disruptionist -disruptive -disruptively -disruptiveness -disruptment -disruptor -disrupture -diss -dissatisfaction -dissatisfactoriness -dissatisfactory -dissatisfied -dissatisfiedly -dissatisfiedness -dissatisfy -dissaturate -disscepter -disseat -dissect -dissected -dissectible -dissecting -dissection -dissectional -dissective -dissector -disseize -disseizee -disseizin -disseizor -disseizoress -disselboom -dissemblance -dissemble -dissembler -dissemblingly -dissembly -dissemilative -disseminate -dissemination -disseminative -disseminator -disseminule -dissension -dissensualize -dissent -dissentaneous -dissentaneousness -dissenter -dissenterism -dissentience -dissentiency -dissentient -dissenting -dissentingly -dissentious -dissentiously -dissentism -dissentment -dissepiment -dissepimental -dissert -dissertate -dissertation -dissertational -dissertationist -dissertative -dissertator -disserve -disservice -disserviceable -disserviceableness -disserviceably -dissettlement -dissever -disseverance -disseverment -disshadow -dissheathe -disshroud -dissidence -dissident -dissidently -dissight -dissightly -dissiliency -dissilient -dissimilar -dissimilarity -dissimilarly -dissimilars -dissimilate -dissimilation -dissimilatory -dissimile -dissimilitude -dissimulate -dissimulation -dissimulative -dissimulator -dissimule -dissimuler -dissipable -dissipate -dissipated -dissipatedly -dissipatedness -dissipater -dissipation -dissipative -dissipativity -dissipator -dissociability -dissociable -dissociableness -dissocial -dissociality -dissocialize -dissociant -dissociate -dissociation -dissociative -dissoconch -dissogeny -dissogony -dissolubility -dissoluble -dissolubleness -dissolute -dissolutely -dissoluteness -dissolution -dissolutional -dissolutionism -dissolutionist -dissolutive -dissolvable -dissolvableness -dissolve -dissolveability -dissolvent -dissolver -dissolving -dissolvingly -dissonance -dissonancy -dissonant -dissonantly -dissonous -dissoul -dissuade -dissuader -dissuasion -dissuasive -dissuasively -dissuasiveness -dissuasory -dissuit -dissuitable -dissuited -dissyllabic -dissyllabification -dissyllabify -dissyllabism -dissyllabize -dissyllable -dissymmetric -dissymmetrical -dissymmetrically -dissymmetry -dissympathize -dissympathy -distad -distaff -distain -distal -distale -distally -distalwards -distance -distanceless -distancy -distannic -distant -distantly -distantness -distaste -distasted -distasteful -distastefully -distastefulness -distater -distemonous -distemper -distemperature -distempered -distemperedly -distemperedness -distemperer -distenant -distend -distendedly -distender -distensibility -distensible -distensive -distent -distention -disthene -disthrall -disthrone -distich -Distichlis -distichous -distichously -distill -distillable -distillage -distilland -distillate -distillation -distillatory -distilled -distiller -distillery -distilling -distillmint -distinct -distinctify -distinction -distinctional -distinctionless -distinctive -distinctively -distinctiveness -distinctly -distinctness -distingue -distinguish -distinguishability -distinguishable -distinguishableness -distinguishably -distinguished -distinguishedly -distinguisher -distinguishing -distinguishingly -distinguishment -distoclusion -Distoma -Distomatidae -distomatosis -distomatous -distome -distomian -distomiasis -Distomidae -Distomum -distort -distorted -distortedly -distortedness -distorter -distortion -distortional -distortionist -distortionless -distortive -distract -distracted -distractedly -distractedness -distracter -distractibility -distractible -distractingly -distraction -distractive -distractively -distrain -distrainable -distrainee -distrainer -distrainment -distrainor -distraint -distrait -distraite -distraught -distress -distressed -distressedly -distressedness -distressful -distressfully -distressfulness -distressing -distressingly -distributable -distributary -distribute -distributed -distributedly -distributee -distributer -distribution -distributional -distributionist -distributival -distributive -distributively -distributiveness -distributor -distributress -district -distrouser -distrust -distruster -distrustful -distrustfully -distrustfulness -distrustingly -distune -disturb -disturbance -disturbative -disturbed -disturbedly -disturber -disturbing -disturbingly -disturn -disturnpike -disubstituted -disubstitution -disulfonic -disulfuric -disulphate -disulphide -disulphonate -disulphone -disulphonic -disulphoxide -disulphuret -disulphuric -disuniform -disuniformity -disunify -disunion -disunionism -disunionist -disunite -disuniter -disunity -disusage -disusance -disuse -disutility -disutilize -disvaluation -disvalue -disvertebrate -disvisage -disvoice -disvulnerability -diswarren -diswench -diswood -disworth -disyllabic -disyllable -disyoke -dit -dita -dital -ditch -ditchbank -ditchbur -ditchdigger -ditchdown -ditcher -ditchless -ditchside -ditchwater -dite -diter -diterpene -ditertiary -ditetragonal -dithalous -dithecal -ditheism -ditheist -ditheistic -ditheistical -dithematic -dither -dithery -dithiobenzoic -dithioglycol -dithioic -dithion -dithionate -dithionic -dithionite -dithionous -dithymol -dithyramb -dithyrambic -dithyrambically -Dithyrambos -Dithyrambus -ditokous -ditolyl -ditone -ditrematous -ditremid -Ditremidae -ditrichotomous -ditriglyph -ditriglyphic -ditrigonal -ditrigonally -Ditrocha -ditrochean -ditrochee -ditrochous -ditroite -dittamy -dittander -dittany -dittay -dittied -ditto -dittogram -dittograph -dittographic -dittography -dittology -ditty -diumvirate -diuranate -diureide -diuresis -diuretic -diuretically -diureticalness -Diurna -diurnal -diurnally -diurnalness -diurnation -diurne -diurnule -diuturnal -diuturnity -div -diva -divagate -divagation -divalence -divalent -divan -divariant -divaricate -divaricately -divaricating -divaricatingly -divarication -divaricator -divata -dive -divekeeper -divel -divellent -divellicate -diver -diverge -divergement -divergence -divergency -divergent -divergently -diverging -divergingly -divers -diverse -diversely -diverseness -diversicolored -diversifiability -diversifiable -diversification -diversified -diversifier -diversiflorate -diversiflorous -diversifoliate -diversifolious -diversiform -diversify -diversion -diversional -diversionary -diversipedate -diversisporous -diversity -diversly -diversory -divert -divertedly -diverter -divertibility -divertible -diverticle -diverticular -diverticulate -diverticulitis -diverticulosis -diverticulum -diverting -divertingly -divertingness -divertisement -divertive -divertor -divest -divestible -divestitive -divestiture -divestment -divesture -dividable -dividableness -divide -divided -dividedly -dividedness -dividend -divider -dividing -dividingly -dividual -dividualism -dividually -dividuity -dividuous -divinable -divinail -divination -divinator -divinatory -divine -divinely -divineness -diviner -divineress -diving -divinify -divining -diviningly -divinity -divinityship -divinization -divinize -divinyl -divisibility -divisible -divisibleness -divisibly -division -divisional -divisionally -divisionary -divisionism -divisionist -divisionistic -divisive -divisively -divisiveness -divisor -divisorial -divisory -divisural -divorce -divorceable -divorcee -divorcement -divorcer -divorcible -divorcive -divot -divoto -divulgate -divulgater -divulgation -divulgatory -divulge -divulgement -divulgence -divulger -divulse -divulsion -divulsive -divulsor -divus -Divvers -divvy -diwata -dixenite -Dixie -dixie -Dixiecrat -dixit -dixy -dizain -dizen -dizenment -dizoic -dizygotic -dizzard -dizzily -dizziness -dizzy -Djagatay -djasakid -djave -djehad -djerib -djersa -Djuka -do -doab -doable -doarium -doat -doated -doater -doating -doatish -Dob -dob -dobbed -dobber -dobbin -dobbing -dobby -dobe -dobla -doblon -dobra -dobrao -dobson -doby -doc -docent -docentship -Docetae -Docetic -Docetically -Docetism -Docetist -Docetistic -Docetize -dochmiac -dochmiacal -dochmiasis -dochmius -docibility -docible -docibleness -docile -docilely -docility -docimasia -docimastic -docimastical -docimasy -docimology -docity -dock -dockage -docken -docker -docket -dockhead -dockhouse -dockization -dockize -dockland -dockmackie -dockman -dockmaster -dockside -dockyard -dockyardman -docmac -Docoglossa -docoglossan -docoglossate -docosane -doctor -doctoral -doctorally -doctorate -doctorbird -doctordom -doctoress -doctorfish -doctorhood -doctorial -doctorially -doctorization -doctorize -doctorless -doctorlike -doctorly -doctorship -doctress -doctrinaire -doctrinairism -doctrinal -doctrinalism -doctrinalist -doctrinality -doctrinally -doctrinarian -doctrinarianism -doctrinarily -doctrinarity -doctrinary -doctrinate -doctrine -doctrinism -doctrinist -doctrinization -doctrinize -doctrix -document -documental -documentalist -documentarily -documentary -documentation -documentize -dod -dodd -doddart -dodded -dodder -doddered -dodderer -doddering -doddery -doddie -dodding -doddle -doddy -doddypoll -Dode -dodecade -dodecadrachm -dodecafid -dodecagon -dodecagonal -dodecahedral -dodecahedric -dodecahedron -dodecahydrate -dodecahydrated -dodecamerous -dodecane -Dodecanesian -dodecanoic -dodecant -dodecapartite -dodecapetalous -dodecarch -dodecarchy -dodecasemic -dodecastyle -dodecastylos -dodecasyllabic -dodecasyllable -dodecatemory -Dodecatheon -dodecatoic -dodecatyl -dodecatylic -dodecuplet -dodecyl -dodecylene -dodecylic -dodge -dodgeful -dodger -dodgery -dodgily -dodginess -dodgy -dodkin -dodlet -dodman -dodo -dodoism -Dodona -Dodonaea -Dodonaeaceae -Dodonaean -Dodonean -Dodonian -dodrans -doe -doebird -Doedicurus -Doeg -doeglic -doegling -doer -does -doeskin -doesnt -doest -doff -doffer -doftberry -dog -dogal -dogate -dogbane -Dogberry -dogberry -Dogberrydom -Dogberryism -dogbite -dogblow -dogboat -dogbolt -dogbush -dogcart -dogcatcher -dogdom -doge -dogedom -dogeless -dogeship -dogface -dogfall -dogfight -dogfish -dogfoot -dogged -doggedly -doggedness -dogger -doggerel -doggereler -doggerelism -doggerelist -doggerelize -doggerelizer -doggery -doggess -doggish -doggishly -doggishness -doggo -doggone -doggoned -doggrel -doggrelize -doggy -doghead -doghearted -doghole -doghood -doghouse -dogie -dogless -doglike -dogly -dogma -dogman -dogmata -dogmatic -dogmatical -dogmatically -dogmaticalness -dogmatician -dogmatics -dogmatism -dogmatist -dogmatization -dogmatize -dogmatizer -dogmouth -dogplate -dogproof -Dogra -Dogrib -dogs -dogship -dogshore -dogskin -dogsleep -dogstone -dogtail -dogtie -dogtooth -dogtoothing -dogtrick -dogtrot -dogvane -dogwatch -dogwood -dogy -doigt -doiled -doily -doina -doing -doings -doit -doited -doitkin -doitrified -doke -Doketic -Doketism -dokhma -dokimastic -Dokmarok -Doko -Dol -dola -dolabra -dolabrate -dolabriform -dolcan -dolcian -dolciano -dolcino -doldrum -doldrums -dole -dolefish -doleful -dolefully -dolefulness -dolefuls -dolent -dolently -dolerite -doleritic -dolerophanite -dolesman -dolesome -dolesomely -dolesomeness -doless -doli -dolia -dolichoblond -dolichocephal -dolichocephali -dolichocephalic -dolichocephalism -dolichocephalize -dolichocephalous -dolichocephaly -dolichocercic -dolichocnemic -dolichocranial -dolichofacial -Dolichoglossus -dolichohieric -Dolicholus -dolichopellic -dolichopodous -dolichoprosopic -Dolichopsyllidae -Dolichos -dolichos -dolichosaur -Dolichosauri -Dolichosauria -Dolichosaurus -Dolichosoma -dolichostylous -dolichotmema -dolichuric -dolichurus -Doliidae -dolina -doline -dolioform -Doliolidae -Doliolum -dolium -doll -dollar -dollarbird -dollardee -dollardom -dollarfish -dollarleaf -dollbeer -dolldom -dollface -dollfish -dollhood -dollhouse -dollier -dolliness -dollish -dollishly -dollishness -dollmaker -dollmaking -dollop -dollship -dolly -dollyman -dollyway -dolman -dolmen -dolmenic -Dolomedes -dolomite -dolomitic -dolomitization -dolomitize -dolomization -dolomize -dolor -Dolores -doloriferous -dolorific -dolorifuge -dolorous -dolorously -dolorousness -dolose -dolous -Dolph -dolphin -dolphinlike -Dolphus -dolt -dolthead -doltish -doltishly -doltishness -dom -domain -domainal -domal -domanial -domatium -domatophobia -domba -Dombeya -Domdaniel -dome -domelike -doment -domer -domesday -domestic -domesticable -domesticality -domestically -domesticate -domestication -domesticative -domesticator -domesticity -domesticize -domett -domeykite -domic -domical -domically -Domicella -domicile -domicilement -domiciliar -domiciliary -domiciliate -domiciliation -dominance -dominancy -dominant -dominantly -dominate -dominated -dominatingly -domination -dominative -dominator -domine -domineer -domineerer -domineering -domineeringly -domineeringness -dominial -Dominic -dominical -dominicale -Dominican -Dominick -dominie -dominion -dominionism -dominionist -Dominique -dominium -domino -dominus -domitable -domite -Domitian -domitic -domn -domnei -domoid -dompt -domy -Don -don -donable -Donacidae -donaciform -Donal -Donald -Donar -donary -donatary -donate -donated -donatee -Donatiaceae -donation -Donatism -Donatist -Donatistic -Donatistical -donative -donatively -donator -donatory -donatress -donax -doncella -Dondia -done -donee -Donet -doney -dong -donga -Dongola -Dongolese -dongon -Donia -donjon -donkey -donkeyback -donkeyish -donkeyism -donkeyman -donkeywork -Donmeh -Donn -Donna -donna -Donne -donnered -donnert -Donnie -donnish -donnishness -donnism -donnot -donor -donorship -donought -Donovan -donship -donsie -dont -donum -doob -doocot -doodab -doodad -Doodia -doodle -doodlebug -doodler -doodlesack -doohickey -doohickus -doohinkey -doohinkus -dooja -dook -dooket -dookit -dool -doolee -dooley -dooli -doolie -dooly -doom -doomage -doombook -doomer -doomful -dooms -doomsday -doomsman -doomstead -doon -door -doorba -doorbell -doorboy -doorbrand -doorcase -doorcheek -doored -doorframe -doorhead -doorjamb -doorkeeper -doorknob -doorless -doorlike -doormaid -doormaker -doormaking -doorman -doornail -doorplate -doorpost -doorsill -doorstead -doorstep -doorstone -doorstop -doorward -doorway -doorweed -doorwise -dooryard -dop -dopa -dopamelanin -dopaoxidase -dopatta -dope -dopebook -doper -dopester -dopey -doppelkummel -Dopper -dopper -doppia -Doppler -dopplerite -Dor -dor -Dora -dorab -dorad -Doradidae -dorado -doraphobia -Dorask -Doraskean -dorbeetle -Dorcas -dorcastry -Dorcatherium -Dorcopsis -doree -dorestane -dorhawk -Dori -doria -Dorian -Doric -Dorical -Doricism -Doricize -Dorididae -Dorine -Doris -Dorism -Dorize -dorje -Dorking -dorlach -dorlot -dorm -dormancy -dormant -dormer -dormered -dormie -dormient -dormilona -dormition -dormitive -dormitory -dormouse -dormy -dorn -dorneck -dornic -dornick -dornock -Dorobo -Doronicum -Dorosoma -Dorothea -Dorothy -dorp -dorsabdominal -dorsabdominally -dorsad -dorsal -dorsale -dorsalgia -dorsalis -dorsally -dorsalmost -dorsalward -dorsalwards -dorsel -dorser -dorsibranch -Dorsibranchiata -dorsibranchiate -dorsicollar -dorsicolumn -dorsicommissure -dorsicornu -dorsiduct -dorsiferous -dorsifixed -dorsiflex -dorsiflexion -dorsiflexor -dorsigrade -dorsilateral -dorsilumbar -dorsimedian -dorsimesal -dorsimeson -dorsiparous -dorsispinal -dorsiventral -dorsiventrality -dorsiventrally -dorsoabdominal -dorsoanterior -dorsoapical -Dorsobranchiata -dorsocaudad -dorsocaudal -dorsocentral -dorsocephalad -dorsocephalic -dorsocervical -dorsocervically -dorsodynia -dorsoepitrochlear -dorsointercostal -dorsointestinal -dorsolateral -dorsolumbar -dorsomedial -dorsomedian -dorsomesal -dorsonasal -dorsonuchal -dorsopleural -dorsoposteriad -dorsoposterior -dorsoradial -dorsosacral -dorsoscapular -dorsosternal -dorsothoracic -dorsoventrad -dorsoventral -dorsoventrally -Dorstenia -dorsulum -dorsum -dorsumbonal -dorter -dortiness -dortiship -dorts -dorty -doruck -Dory -dory -Doryanthes -Dorylinae -doryphorus -dos -dosa -dosadh -dosage -dose -doser -dosimeter -dosimetric -dosimetrician -dosimetrist -dosimetry -Dosinia -dosiology -dosis -Dositheans -dosology -doss -dossal -dossel -dosser -dosseret -dossier -dossil -dossman -Dot -dot -dotage -dotal -dotard -dotardism -dotardly -dotardy -dotate -dotation -dotchin -dote -doted -doter -Dothideacea -dothideaceous -Dothideales -Dothidella -dothienenteritis -Dothiorella -dotiness -doting -dotingly -dotingness -dotish -dotishness -dotkin -dotless -dotlike -Doto -Dotonidae -dotriacontane -dotted -dotter -dotterel -dottily -dottiness -dotting -dottle -dottler -Dottore -Dotty -dotty -doty -douar -double -doubled -doubledamn -doubleganger -doublegear -doublehanded -doublehandedly -doublehandedness -doublehatching -doublehearted -doubleheartedness -doublehorned -doubleleaf -doublelunged -doubleness -doubler -doublet -doubleted -doubleton -doubletone -doubletree -doublets -doubling -doubloon -doubly -doubt -doubtable -doubtably -doubtedly -doubter -doubtful -doubtfully -doubtfulness -doubting -doubtingly -doubtingness -doubtless -doubtlessly -doubtlessness -doubtmonger -doubtous -doubtsome -douc -douce -doucely -douceness -doucet -douche -doucin -doucine -doudle -Doug -dough -doughbird -doughboy -doughface -doughfaceism -doughfoot -doughhead -doughiness -doughlike -doughmaker -doughmaking -doughman -doughnut -dought -doughtily -doughtiness -doughty -doughy -Douglas -doulocracy -doum -doundake -doup -douping -dour -dourine -dourly -dourness -douse -douser -dout -douter -doutous -douzepers -douzieme -dove -dovecot -doveflower -dovefoot -dovehouse -dovekey -dovekie -dovelet -dovelike -doveling -dover -dovetail -dovetailed -dovetailer -dovetailwise -doveweed -dovewood -dovish -Dovyalis -dow -dowable -dowager -dowagerism -dowcet -dowd -dowdily -dowdiness -dowdy -dowdyish -dowdyism -dowed -dowel -dower -doweral -doweress -dowerless -dowery -dowf -dowie -Dowieism -Dowieite -dowily -dowiness -dowitch -dowitcher -dowl -dowlas -dowless -down -downbear -downbeard -downbeat -downby -downcast -downcastly -downcastness -downcome -downcomer -downcoming -downcry -downcurved -downcut -downdale -downdraft -downer -downface -downfall -downfallen -downfalling -downfeed -downflow -downfold -downfolded -downgate -downgone -downgrade -downgrowth -downhanging -downhaul -downheaded -downhearted -downheartedly -downheartedness -downhill -downily -downiness -Downing -Downingia -downland -downless -downlie -downlier -downligging -downlike -downline -downlooked -downlooker -downlying -downmost -downness -downpour -downpouring -downright -downrightly -downrightness -downrush -downrushing -downset -downshare -downshore -downside -downsinking -downsitting -downsliding -downslip -downslope -downsman -downspout -downstage -downstairs -downstate -downstater -downstream -downstreet -downstroke -downswing -downtake -downthrow -downthrown -downthrust -Downton -downtown -downtrampling -downtreading -downtrend -downtrodden -downtroddenness -downturn -downward -downwardly -downwardness -downway -downweed -downweigh -downweight -downweighted -downwind -downwith -downy -dowp -dowry -dowsabel -dowse -dowser -dowset -doxa -Doxantha -doxastic -doxasticon -doxographer -doxographical -doxography -doxological -doxologically -doxologize -doxology -doxy -Doyle -doze -dozed -dozen -dozener -dozenth -dozer -dozily -doziness -dozy -dozzled -drab -Draba -drabbet -drabbish -drabble -drabbler -drabbletail -drabbletailed -drabby -drably -drabness -Dracaena -Dracaenaceae -drachm -drachma -drachmae -drachmai -drachmal -dracma -Draco -Dracocephalum -Draconian -Draconianism -Draconic -draconic -Draconically -Draconid -Draconis -Draconism -draconites -draconitic -dracontian -dracontiasis -dracontic -dracontine -dracontites -Dracontium -dracunculus -draegerman -draff -draffman -draffy -draft -draftage -draftee -drafter -draftily -draftiness -drafting -draftman -draftmanship -draftproof -draftsman -draftsmanship -draftswoman -draftswomanship -draftwoman -drafty -drag -dragade -dragbar -dragbolt -dragged -dragger -draggily -dragginess -dragging -draggingly -draggle -draggletail -draggletailed -draggletailedly -draggletailedness -draggly -draggy -draghound -dragline -dragman -dragnet -drago -dragoman -dragomanate -dragomanic -dragomanish -dragon -dragonesque -dragoness -dragonet -dragonfish -dragonfly -dragonhead -dragonhood -dragonish -dragonism -dragonize -dragonkind -dragonlike -dragonnade -dragonroot -dragontail -dragonwort -dragoon -dragoonable -dragoonade -dragoonage -dragooner -dragrope -dragsaw -dragsawing -dragsman -dragstaff -drail -drain -drainable -drainage -drainboard -draine -drained -drainer -drainerman -drainless -drainman -drainpipe -draintile -draisine -drake -drakestone -drakonite -dram -drama -dramalogue -Dramamine -dramatic -dramatical -dramatically -dramaticism -dramatics -dramaticule -dramatism -dramatist -dramatizable -dramatization -dramatize -dramatizer -dramaturge -dramaturgic -dramaturgical -dramaturgist -dramaturgy -dramm -drammage -dramme -drammed -drammer -dramming -drammock -dramseller -dramshop -drang -drank -drant -drapable -Draparnaldia -drape -drapeable -draper -draperess -draperied -drapery -drapetomania -drapping -drassid -Drassidae -drastic -drastically -drat -dratchell -drate -dratted -dratting -draught -draughtboard -draughthouse -draughtman -draughtmanship -draughts -draughtsman -draughtsmanship -draughtswoman -draughtswomanship -Dravida -Dravidian -Dravidic -dravya -draw -drawable -drawarm -drawback -drawbar -drawbeam -drawbench -drawboard -drawbolt -drawbore -drawboy -drawbridge -Drawcansir -drawcut -drawdown -drawee -drawer -drawers -drawfile -drawfiling -drawgate -drawgear -drawglove -drawhead -drawhorse -drawing -drawk -drawknife -drawknot -drawl -drawlatch -drawler -drawling -drawlingly -drawlingness -drawlink -drawloom -drawly -drawn -drawnet -drawoff -drawout -drawplate -drawpoint -drawrod -drawshave -drawsheet -drawspan -drawspring -drawstop -drawstring -drawtongs -drawtube -dray -drayage -drayman -drazel -dread -dreadable -dreader -dreadful -dreadfully -dreadfulness -dreadingly -dreadless -dreadlessly -dreadlessness -dreadly -dreadness -dreadnought -dream -dreamage -dreamer -dreamery -dreamful -dreamfully -dreamfulness -dreamhole -dreamily -dreaminess -dreamingly -dreamish -dreamland -dreamless -dreamlessly -dreamlessness -dreamlet -dreamlike -dreamlit -dreamlore -dreamsily -dreamsiness -dreamsy -dreamt -dreamtide -dreamwhile -dreamwise -dreamworld -dreamy -drear -drearfully -drearily -dreariment -dreariness -drearisome -drearly -drearness -dreary -dredge -dredgeful -dredger -dredging -dree -dreep -dreepiness -dreepy -dreg -dreggily -dregginess -dreggish -dreggy -dregless -dregs -dreiling -Dreissensia -dreissiger -drench -drencher -drenching -drenchingly -dreng -drengage -Drepanaspis -Drepanidae -Drepanididae -drepaniform -Drepanis -drepanium -drepanoid -Dreparnaudia -dress -dressage -dressed -dresser -dressership -dressily -dressiness -dressing -dressline -dressmaker -dressmakership -dressmakery -dressmaking -dressy -drest -Drew -drew -drewite -Dreyfusism -Dreyfusist -drias -drib -dribble -dribblement -dribbler -driblet -driddle -dried -drier -drierman -driest -drift -driftage -driftbolt -drifter -drifting -driftingly -driftland -driftless -driftlessness -driftlet -driftman -driftpiece -driftpin -driftway -driftweed -driftwind -driftwood -drifty -drightin -drill -driller -drillet -drilling -drillman -drillmaster -drillstock -Drimys -dringle -drink -drinkability -drinkable -drinkableness -drinkably -drinker -drinking -drinkless -drinkproof -drinn -drip -dripper -dripping -dripple -dripproof -drippy -dripstick -dripstone -drisheen -drisk -drivable -drivage -drive -driveaway -driveboat -drivebolt -drivehead -drivel -driveler -drivelingly -driven -drivepipe -driver -driverless -drivership -drivescrew -driveway -drivewell -driving -drivingly -drizzle -drizzly -drochuil -droddum -drofland -drogh -drogher -drogherman -drogue -droit -droitsman -droitural -droiturel -Drokpa -droll -drollery -drollingly -drollish -drollishness -drollist -drollness -drolly -Dromaeognathae -dromaeognathism -dromaeognathous -Dromaeus -drome -dromedarian -dromedarist -dromedary -drometer -Dromiacea -dromic -Dromiceiidae -Dromiceius -Dromicia -dromograph -dromomania -dromometer -dromond -Dromornis -dromos -dromotropic -drona -dronage -drone -dronepipe -droner -drongo -droningly -dronish -dronishly -dronishness -dronkgrass -drony -drool -droop -drooper -drooping -droopingly -droopingness -droopt -droopy -drop -dropberry -dropcloth -dropflower -drophead -droplet -droplight -droplike -dropling -dropman -dropout -dropper -dropping -droppingly -droppy -dropseed -dropsical -dropsically -dropsicalness -dropsied -dropsy -dropsywort -dropt -dropwise -dropworm -dropwort -Droschken -Drosera -Droseraceae -droseraceous -droshky -drosky -drosograph -drosometer -Drosophila -Drosophilidae -Drosophyllum -dross -drossel -drosser -drossiness -drossless -drossy -drostdy -droud -drought -droughtiness -droughty -drouk -drove -drover -drovy -drow -drown -drowner -drowningly -drowse -drowsily -drowsiness -drowsy -drub -drubber -drubbing -drubbly -drucken -drudge -drudger -drudgery -drudgingly -drudgism -druery -drug -drugeteria -drugger -druggery -drugget -druggeting -druggist -druggister -druggy -drugless -drugman -drugshop -drugstore -druid -druidess -druidic -druidical -druidism -druidry -druith -Drukpa -drum -drumbeat -drumble -drumbledore -drumbler -drumfire -drumfish -drumhead -drumheads -drumlike -drumlin -drumline -drumlinoid -drumloid -drumloidal -drumly -drummer -drumming -drummy -drumskin -drumstick -drumwood -drung -drungar -drunk -drunkard -drunken -drunkenly -drunkenness -drunkensome -drunkenwise -drunkery -Drupa -Drupaceae -drupaceous -drupal -drupe -drupel -drupelet -drupeole -drupetum -drupiferous -Druse -druse -Drusean -Drusedom -drusy -druxiness -druxy -dry -dryad -dryadetum -dryadic -dryas -dryasdust -drybeard -drybrained -drycoal -Drydenian -Drydenism -dryfoot -drygoodsman -dryhouse -drying -dryish -dryly -Drynaria -dryness -Dryobalanops -Dryope -Dryopes -Dryophyllum -Dryopians -dryopithecid -Dryopithecinae -dryopithecine -Dryopithecus -Dryops -Dryopteris -dryopteroid -drysalter -drysaltery -dryster -dryth -dryworker -Dschubba -duad -duadic -dual -Duala -duali -dualin -dualism -dualist -dualistic -dualistically -duality -dualization -dualize -dually -Dualmutef -dualogue -Duane -duarch -duarchy -dub -dubash -dubb -dubba -dubbah -dubbeltje -dubber -dubbing -dubby -Dubhe -Dubhgall -dubiety -dubiocrystalline -dubiosity -dubious -dubiously -dubiousness -dubitable -dubitably -dubitancy -dubitant -dubitate -dubitatingly -dubitation -dubitative -dubitatively -Duboisia -duboisin -duboisine -Dubonnet -dubs -ducal -ducally -ducamara -ducape -ducat -ducato -ducatoon -ducdame -duces -Duchesnea -Duchess -duchess -duchesse -duchesslike -duchy -duck -duckbill -duckblind -duckboard -duckboat -ducker -duckery -duckfoot -duckhearted -duckhood -duckhouse -duckhunting -duckie -ducking -duckling -ducklingship -duckmeat -duckpin -duckpond -duckstone -duckweed -duckwife -duckwing -Duco -duct -ducted -ductibility -ductible -ductile -ductilely -ductileness -ductilimeter -ductility -ductilize -duction -ductless -ductor -ductule -Ducula -Duculinae -dud -dudaim -dudder -duddery -duddies -dude -dudeen -dudgeon -dudine -dudish -dudishness -dudism -dudler -dudley -Dudleya -dudleyite -dudman -due -duel -dueler -dueling -duelist -duelistic -duello -dueness -duenna -duennadom -duennaship -duer -Duessa -duet -duettist -duff -duffadar -duffel -duffer -dufferdom -duffing -dufoil -dufrenite -dufrenoysite -dufter -dufterdar -duftery -dug -dugal -dugdug -duggler -dugong -Dugongidae -dugout -dugway -duhat -Duhr -duiker -duikerbok -duim -Duit -duit -dujan -Duke -duke -dukedom -dukeling -dukely -dukery -dukeship -dukhn -dukker -dukkeripen -Dulanganes -Dulat -dulbert -dulcet -dulcetly -dulcetness -dulcian -dulciana -dulcification -dulcifluous -dulcify -dulcigenic -dulcimer -Dulcin -Dulcinea -Dulcinist -dulcitol -dulcitude -dulcose -duledge -duler -dulia -dull -dullard -dullardism -dullardness -dullbrained -duller -dullery -dullhead -dullhearted -dullification -dullify -dullish -dullity -dullness -dullpate -dullsome -dully -dulosis -dulotic -dulse -dulseman -dult -dultie -dulwilly -duly -dum -duma -dumaist -dumb -dumba -dumbbell -dumbbeller -dumbcow -dumbfounder -dumbfounderment -dumbhead -dumbledore -dumbly -dumbness -dumdum -dumetose -dumfound -dumfounder -dumfounderment -dummel -dummered -dumminess -dummy -dummyism -dummyweed -Dumontia -Dumontiaceae -dumontite -dumortierite -dumose -dumosity -dump -dumpage -dumpcart -dumper -dumpily -dumpiness -dumping -dumpish -dumpishly -dumpishness -dumple -dumpling -dumpoke -dumpy -dumsola -dun -dunair -dunal -dunbird -Duncan -dunce -duncedom -duncehood -duncery -dunch -Dunciad -duncical -duncify -duncish -duncishly -duncishness -dundasite -dunder -dunderhead -dunderheaded -dunderheadedness -dunderpate -dune -dunelike -dunfish -dung -Dungan -dungannonite -dungaree -dungbeck -dungbird -dungbred -dungeon -dungeoner -dungeonlike -dunger -dunghill -dunghilly -dungol -dungon -dungy -dungyard -dunite -dunk -dunkadoo -Dunkard -Dunker -dunker -Dunkirk -Dunkirker -Dunlap -dunlin -Dunlop -dunnage -dunne -dunner -dunness -dunnish -dunnite -dunnock -dunny -dunpickle -Duns -dunst -dunstable -dunt -duntle -duny -dunziekte -duo -duocosane -duodecahedral -duodecahedron -duodecane -duodecennial -duodecillion -duodecimal -duodecimality -duodecimally -duodecimfid -duodecimo -duodecimole -duodecuple -duodena -duodenal -duodenary -duodenate -duodenation -duodene -duodenectomy -duodenitis -duodenocholangitis -duodenocholecystostomy -duodenocholedochotomy -duodenocystostomy -duodenoenterostomy -duodenogram -duodenojejunal -duodenojejunostomy -duodenopancreatectomy -duodenoscopy -duodenostomy -duodenotomy -duodenum -duodrama -duograph -duogravure -duole -duoliteral -duologue -duomachy -duopod -duopolistic -duopoly -duopsonistic -duopsony -duosecant -duotone -duotriacontane -duotype -dup -dupability -dupable -dupe -dupedom -duper -dupery -dupion -dupla -duplation -duple -duplet -duplex -duplexity -duplicability -duplicable -duplicand -duplicate -duplication -duplicative -duplicator -duplicature -duplicia -duplicident -Duplicidentata -duplicidentate -duplicipennate -duplicitas -duplicity -duplification -duplify -duplone -dupondius -duppy -dura -durability -durable -durableness -durably -durain -dural -Duralumin -duramatral -duramen -durance -Durandarte -durangite -Durango -Durani -durant -Duranta -duraplasty -duraquara -duraspinalis -duration -durational -durationless -durative -durax -durbachite -Durban -durbar -durdenite -dure -durene -durenol -duress -duressor -durgan -Durham -durian -duridine -Durindana -during -duringly -Durio -durity -durmast -durn -duro -Duroc -durometer -duroquinone -durra -durrie -durrin -durry -durst -durukuli -durwaun -duryl -Duryodhana -Durzada -dusack -duscle -dush -dusio -dusk -dusken -duskily -duskiness -duskingtide -duskish -duskishly -duskishness -duskly -duskness -dusky -dust -dustbin -dustbox -dustcloth -dustee -duster -dusterman -dustfall -dustily -Dustin -dustiness -dusting -dustless -dustlessness -dustman -dustpan -dustproof -dustuck -dustwoman -dusty -dustyfoot -Dusun -Dutch -dutch -Dutcher -Dutchify -Dutchman -Dutchy -duteous -duteously -duteousness -dutiability -dutiable -dutied -dutiful -dutifully -dutifulness -dutra -duty -dutymonger -duumvir -duumviral -duumvirate -duvet -duvetyn -dux -duyker -dvaita -dvandva -dwale -dwalm -Dwamish -dwang -dwarf -dwarfish -dwarfishly -dwarfishness -dwarfism -dwarfling -dwarfness -dwarfy -dwayberry -Dwayne -dwell -dwelled -dweller -dwelling -dwelt -Dwight -dwindle -dwindlement -dwine -Dwyka -dyad -dyadic -Dyak -dyakisdodecahedron -Dyakish -dyarchic -dyarchical -dyarchy -Dyas -Dyassic -dyaster -Dyaus -dyce -dye -dyeable -dyehouse -dyeing -dyeleaves -dyemaker -dyemaking -dyer -dyester -dyestuff -dyeware -dyeweed -dyewood -dygogram -dying -dyingly -dyingness -dyke -dykehopper -dyker -dykereeve -Dylan -dynagraph -dynameter -dynametric -dynametrical -dynamic -dynamical -dynamically -dynamics -dynamis -dynamism -dynamist -dynamistic -dynamitard -dynamite -dynamiter -dynamitic -dynamitical -dynamitically -dynamiting -dynamitish -dynamitism -dynamitist -dynamization -dynamize -dynamo -dynamoelectric -dynamoelectrical -dynamogenesis -dynamogenic -dynamogenous -dynamogenously -dynamogeny -dynamometamorphic -dynamometamorphism -dynamometamorphosed -dynamometer -dynamometric -dynamometrical -dynamometry -dynamomorphic -dynamoneure -dynamophone -dynamostatic -dynamotor -dynast -Dynastes -dynastical -dynastically -dynasticism -dynastid -dynastidan -Dynastides -Dynastinae -dynasty -dynatron -dyne -dyophone -Dyophysite -Dyophysitic -Dyophysitical -Dyophysitism -dyotheism -Dyothelete -Dyotheletian -Dyotheletic -Dyotheletical -Dyotheletism -Dyothelism -dyphone -dysacousia -dysacousis -dysanalyte -dysaphia -dysarthria -dysarthric -dysarthrosis -dysbulia -dysbulic -dyschiria -dyschroa -dyschroia -dyschromatopsia -dyschromatoptic -dyschronous -dyscrasia -dyscrasial -dyscrasic -dyscrasite -dyscratic -dyscrystalline -dysenteric -dysenterical -dysentery -dysepulotic -dysepulotical -dyserethisia -dysergasia -dysergia -dysesthesia -dysesthetic -dysfunction -dysgenesic -dysgenesis -dysgenetic -dysgenic -dysgenical -dysgenics -dysgeogenous -dysgnosia -dysgraphia -dysidrosis -dyskeratosis -dyskinesia -dyskinetic -dyslalia -dyslexia -dyslogia -dyslogistic -dyslogistically -dyslogy -dysluite -dyslysin -dysmenorrhea -dysmenorrheal -dysmerism -dysmeristic -dysmerogenesis -dysmerogenetic -dysmeromorph -dysmeromorphic -dysmetria -dysmnesia -dysmorphism -dysmorphophobia -dysneuria -dysnomy -dysodile -dysodontiasis -dysorexia -dysorexy -dysoxidation -dysoxidizable -dysoxidize -dyspathetic -dyspathy -dyspepsia -dyspepsy -dyspeptic -dyspeptical -dyspeptically -dysphagia -dysphagic -dysphasia -dysphasic -dysphemia -dysphonia -dysphonic -dysphoria -dysphoric -dysphotic -dysphrasia -dysphrenia -dyspituitarism -dysplasia -dysplastic -dyspnea -dyspneal -dyspneic -dyspnoic -dysprosia -dysprosium -dysraphia -dyssnite -Dyssodia -dysspermatism -dyssynergia -dyssystole -dystaxia -dystectic -dysteleological -dysteleologist -dysteleology -dysthyroidism -dystocia -dystocial -dystome -dystomic -dystomous -dystrophia -dystrophic -dystrophy -dysuria -dysuric -dysyntribite -dytiscid -Dytiscidae -Dytiscus -dzeren -Dzungar -E -e -ea -each -eachwhere -eager -eagerly -eagerness -eagle -eaglelike -eagless -eaglestone -eaglet -eaglewood -eagre -ean -ear -earache -earbob -earcap -earcockle -eardrop -eardropper -eardrum -eared -earflower -earful -earhole -earing -earjewel -Earl -earl -earlap -earldom -Earle -earless -earlet -earlike -earliness -earlish -earlock -earlship -early -earmark -earn -earner -earnest -earnestly -earnestness -earnful -Earnie -earning -earnings -earphone -earpick -earpiece -earplug -earreach -earring -earringed -earscrew -earshot -earsore -earsplitting -eartab -earth -earthboard -earthborn -earthbred -earthdrake -earthed -earthen -earthenhearted -earthenware -earthfall -earthfast -earthgall -earthgrubber -earthian -earthiness -earthkin -earthless -earthlight -earthlike -earthliness -earthling -earthly -earthmaker -earthmaking -earthnut -earthpea -earthquake -earthquaked -earthquaken -earthquaking -Earthshaker -earthshine -earthshock -earthslide -earthsmoke -earthstar -earthtongue -earthwall -earthward -earthwards -earthwork -earthworm -earthy -earwax -earwig -earwigginess -earwiggy -earwitness -earworm -earwort -ease -easeful -easefully -easefulness -easel -easeless -easement -easer -easier -easiest -easily -easiness -easing -east -eastabout -eastbound -Easter -easter -easterling -easterly -Eastern -eastern -easterner -Easternism -Easternly -easternmost -Eastertide -easting -Eastlake -eastland -eastmost -Eastre -eastward -eastwardly -easy -easygoing -easygoingness -eat -eatability -eatable -eatableness -eatage -Eatanswill -eatberry -eaten -eater -eatery -eating -eats -eave -eaved -eavedrop -eaver -eaves -eavesdrop -eavesdropper -eavesdropping -ebb -ebbman -Eben -Ebenaceae -ebenaceous -Ebenales -ebeneous -Ebenezer -Eberthella -Ebionism -Ebionite -Ebionitic -Ebionitism -Ebionize -Eboe -eboe -ebon -ebonist -ebonite -ebonize -ebony -ebracteate -ebracteolate -ebriate -ebriety -ebriosity -ebrious -ebriously -ebullate -ebullience -ebulliency -ebullient -ebulliently -ebulliometer -ebullioscope -ebullioscopic -ebullioscopy -ebullition -ebullitive -ebulus -eburated -eburine -Eburna -eburnated -eburnation -eburnean -eburneoid -eburneous -eburnian -eburnification -ecad -ecalcarate -ecanda -ecardinal -Ecardines -ecarinate -ecarte -Ecaudata -ecaudate -Ecballium -ecbatic -ecblastesis -ecbole -ecbolic -Ecca -eccaleobion -eccentrate -eccentric -eccentrical -eccentrically -eccentricity -eccentring -eccentrometer -ecchondroma -ecchondrosis -ecchondrotome -ecchymoma -ecchymose -ecchymosis -ecclesia -ecclesial -ecclesiarch -ecclesiarchy -ecclesiast -Ecclesiastes -ecclesiastic -ecclesiastical -ecclesiastically -ecclesiasticism -ecclesiasticize -ecclesiastics -Ecclesiasticus -ecclesiastry -ecclesioclastic -ecclesiography -ecclesiolater -ecclesiolatry -ecclesiologic -ecclesiological -ecclesiologically -ecclesiologist -ecclesiology -ecclesiophobia -eccoprotic -eccoproticophoric -eccrinology -eccrisis -eccritic -eccyclema -eccyesis -ecdemic -ecdemite -ecderon -ecderonic -ecdysiast -ecdysis -ecesic -ecesis -ecgonine -eche -echea -echelette -echelon -echelonment -Echeloot -Echeneidae -echeneidid -Echeneididae -echeneidoid -Echeneis -Echeveria -echidna -Echidnidae -Echimys -Echinacea -echinal -echinate -echinid -Echinidea -echinital -echinite -Echinocactus -Echinocaris -Echinocereus -Echinochloa -echinochrome -echinococcus -Echinoderes -Echinoderidae -echinoderm -Echinoderma -echinodermal -Echinodermata -echinodermatous -echinodermic -Echinodorus -echinoid -Echinoidea -echinologist -echinology -Echinomys -Echinopanax -Echinops -echinopsine -Echinorhinidae -Echinorhinus -Echinorhynchus -Echinospermum -Echinosphaerites -Echinosphaeritidae -Echinostoma -Echinostomatidae -echinostome -echinostomiasis -Echinozoa -echinulate -echinulated -echinulation -echinuliform -echinus -Echis -echitamine -Echites -Echium -echiurid -Echiurida -echiuroid -Echiuroidea -Echiurus -echo -echoer -echoic -echoingly -echoism -echoist -echoize -echolalia -echolalic -echoless -echometer -echopractic -echopraxia -echowise -Echuca -eciliate -Eciton -ecize -Eckehart -ecklein -eclair -eclampsia -eclamptic -eclat -eclectic -eclectical -eclectically -eclecticism -eclecticize -Eclectics -eclectism -eclectist -eclegm -eclegma -eclipsable -eclipsareon -eclipsation -eclipse -eclipser -eclipsis -ecliptic -ecliptical -ecliptically -eclogite -eclogue -eclosion -ecmnesia -ecoid -ecole -ecologic -ecological -ecologically -ecologist -ecology -econometer -econometric -econometrician -econometrics -economic -economical -economically -economics -economism -economist -Economite -economization -economize -economizer -economy -ecophene -ecophobia -ecorticate -ecospecies -ecospecific -ecospecifically -ecostate -ecosystem -ecotonal -ecotone -ecotype -ecotypic -ecotypically -ecphonesis -ecphorable -ecphore -ecphoria -ecphorization -ecphorize -ecphrasis -ecrasite -ecru -ecrustaceous -ecstasis -ecstasize -ecstasy -ecstatic -ecstatica -ecstatical -ecstatically -ecstaticize -ecstrophy -ectad -ectadenia -ectal -ectally -ectasia -ectasis -ectatic -ectene -ectental -ectepicondylar -ectethmoid -ectethmoidal -Ecthesis -ecthetically -ecthlipsis -ecthyma -ectiris -ectobatic -ectoblast -ectoblastic -ectobronchium -ectocardia -Ectocarpaceae -ectocarpaceous -Ectocarpales -ectocarpic -ectocarpous -Ectocarpus -ectocinerea -ectocinereal -ectocoelic -ectocondylar -ectocondyle -ectocondyloid -ectocornea -ectocranial -ectocuneiform -ectocuniform -ectocyst -ectodactylism -ectoderm -ectodermal -ectodermic -ectodermoidal -ectodermosis -ectodynamomorphic -ectoentad -ectoenzyme -ectoethmoid -ectogenesis -ectogenic -ectogenous -ectoglia -Ectognatha -ectolecithal -ectoloph -ectomere -ectomeric -ectomesoblast -ectomorph -ectomorphic -ectomorphy -ectonephridium -ectoparasite -ectoparasitic -Ectoparasitica -ectopatagium -ectophloic -ectophyte -ectophytic -ectopia -ectopic -Ectopistes -ectoplacenta -ectoplasm -ectoplasmatic -ectoplasmic -ectoplastic -ectoplasy -Ectoprocta -ectoproctan -ectoproctous -ectopterygoid -ectopy -ectoretina -ectorganism -ectorhinal -ectosarc -ectosarcous -ectoskeleton -ectosomal -ectosome -ectosphenoid -ectosphenotic -ectosphere -ectosteal -ectosteally -ectostosis -ectotheca -ectotoxin -Ectotrophi -ectotrophic -ectozoa -ectozoan -ectozoic -ectozoon -ectrodactylia -ectrodactylism -ectrodactyly -ectrogenic -ectrogeny -ectromelia -ectromelian -ectromelic -ectromelus -ectropion -ectropium -ectropometer -ectrosyndactyly -ectypal -ectype -ectypography -Ecuadoran -Ecuadorian -ecuelling -ecumenic -ecumenical -ecumenicalism -ecumenicality -ecumenically -ecumenicity -ecyphellate -eczema -eczematization -eczematoid -eczematosis -eczematous -Ed -edacious -edaciously -edaciousness -edacity -Edana -edaphic -edaphology -edaphon -Edaphosauria -Edaphosaurus -Edda -Eddaic -edder -Eddic -Eddie -eddish -eddo -Eddy -eddy -eddyroot -edea -edeagra -edeitis -edelweiss -edema -edematous -edemic -Eden -Edenic -edenite -Edenization -Edenize -edental -edentalous -Edentata -edentate -edentulate -edentulous -edeodynia -edeology -edeomania -edeoscopy -edeotomy -Edessan -edestan -edestin -Edestosaurus -Edgar -edge -edgebone -edged -edgeless -edgemaker -edgemaking -edgeman -edger -edgerman -edgeshot -edgestone -edgeways -edgeweed -edgewise -edginess -edging -edgingly -edgrew -edgy -edh -edibility -edible -edibleness -edict -edictal -edictally -edicule -edificable -edification -edificator -edificatory -edifice -edificial -edifier -edify -edifying -edifyingly -edifyingness -edingtonite -edit -edital -Edith -edition -editor -editorial -editorialize -editorially -editorship -editress -Ediya -Edmond -Edmund -Edna -Edo -Edomite -Edomitish -Edoni -Edriasteroidea -Edrioasteroid -Edrioasteroidea -Edriophthalma -edriophthalmatous -edriophthalmian -edriophthalmic -edriophthalmous -Eduardo -Educabilia -educabilian -educability -educable -educand -educatable -educate -educated -educatee -education -educationable -educational -educationalism -educationalist -educationally -educationary -educationist -educative -educator -educatory -educatress -educe -educement -educible -educive -educt -eduction -eductive -eductor -edulcorate -edulcoration -edulcorative -edulcorator -Eduskunta -Edward -Edwardean -Edwardeanism -Edwardian -Edwardine -Edwardsia -Edwardsiidae -Edwin -Edwina -eegrass -eel -eelboat -eelbob -eelbobber -eelcake -eelcatcher -eeler -eelery -eelfare -eelfish -eelgrass -eellike -eelpot -eelpout -eelshop -eelskin -eelspear -eelware -eelworm -eely -eer -eerie -eerily -eeriness -eerisome -effable -efface -effaceable -effacement -effacer -effect -effecter -effectful -effectible -effective -effectively -effectiveness -effectivity -effectless -effector -effects -effectual -effectuality -effectualize -effectually -effectualness -effectuate -effectuation -effeminacy -effeminate -effeminately -effeminateness -effemination -effeminatize -effeminization -effeminize -effendi -efferent -effervesce -effervescence -effervescency -effervescent -effervescible -effervescingly -effervescive -effete -effeteness -effetman -efficacious -efficaciously -efficaciousness -efficacity -efficacy -efficience -efficiency -efficient -efficiently -Effie -effigial -effigiate -effigiation -effigurate -effiguration -effigy -efflate -efflation -effloresce -efflorescence -efflorescency -efflorescent -efflower -effluence -effluency -effluent -effluvia -effluvial -effluviate -effluviography -effluvious -effluvium -efflux -effluxion -effodient -Effodientia -efform -efformation -efformative -effort -effortful -effortless -effortlessly -effossion -effraction -effranchise -effranchisement -effrontery -effulge -effulgence -effulgent -effulgently -effund -effuse -effusiometer -effusion -effusive -effusively -effusiveness -Efik -eflagelliferous -efoliolate -efoliose -efoveolate -eft -eftest -eftsoons -egad -egalitarian -egalitarianism -egality -Egba -Egbert -Egbo -egence -egeran -Egeria -egest -egesta -egestion -egestive -egg -eggberry -eggcup -eggcupful -eggeater -egger -eggfish -eggfruit -egghead -egghot -egging -eggler -eggless -egglike -eggnog -eggplant -eggshell -eggy -egilops -egipto -Eglamore -eglandular -eglandulose -eglantine -eglatere -eglestonite -egma -ego -egocentric -egocentricity -egocentrism -Egocerus -egohood -egoism -egoist -egoistic -egoistical -egoistically -egoity -egoize -egoizer -egol -egolatrous -egomania -egomaniac -egomaniacal -egomism -egophonic -egophony -egosyntonic -egotheism -egotism -egotist -egotistic -egotistical -egotistically -egotize -egregious -egregiously -egregiousness -egress -egression -egressive -egressor -egret -Egretta -egrimony -egueiite -egurgitate -eguttulate -Egypt -Egyptian -Egyptianism -Egyptianization -Egyptianize -Egyptize -Egyptologer -Egyptologic -Egyptological -Egyptologist -Egyptology -eh -Ehatisaht -eheu -ehlite -Ehretia -Ehretiaceae -ehrwaldite -ehuawa -eichbergite -Eichhornia -eichwaldite -eicosane -eident -eidently -eider -eidetic -eidograph -eidolic -eidolism -eidology -eidolology -eidolon -eidoptometry -eidouranion -eigenfunction -eigenvalue -eight -eighteen -eighteenfold -eighteenmo -eighteenth -eighteenthly -eightfoil -eightfold -eighth -eighthly -eightieth -eightling -eightpenny -eightscore -eightsman -eightsome -eighty -eightyfold -eigne -Eikonogen -eikonology -Eileen -Eimak -eimer -Eimeria -einkorn -Einsteinian -Eireannach -Eirene -eiresione -eisegesis -eisegetical -eisodic -eisteddfod -eisteddfodic -eisteddfodism -either -ejaculate -ejaculation -ejaculative -ejaculator -ejaculatory -Ejam -eject -ejecta -ejectable -ejection -ejective -ejectively -ejectivity -ejectment -ejector -ejicient -ejoo -ekaboron -ekacaesium -ekaha -ekamanganese -ekasilicon -ekatantalum -eke -ekebergite -eker -ekerite -eking -ekka -Ekoi -ekphore -Ekron -Ekronite -ektene -ektenes -ektodynamorphic -el -elaborate -elaborately -elaborateness -elaboration -elaborative -elaborator -elaboratory -elabrate -Elachista -Elachistaceae -elachistaceous -Elaeagnaceae -elaeagnaceous -Elaeagnus -Elaeis -elaeoblast -elaeoblastic -Elaeocarpaceae -elaeocarpaceous -Elaeocarpus -Elaeococca -Elaeodendron -elaeodochon -elaeomargaric -elaeometer -elaeoptene -elaeosaccharum -elaeothesium -elaidate -elaidic -elaidin -elaidinic -elain -Elaine -elaine -elaioleucite -elaioplast -elaiosome -Elamite -Elamitic -Elamitish -elance -eland -elanet -Elanus -Elaphe -Elaphebolion -elaphine -Elaphodus -Elaphoglossum -Elaphomyces -Elaphomycetaceae -Elaphrium -elaphure -elaphurine -Elaphurus -elapid -Elapidae -Elapinae -elapine -elapoid -Elaps -elapse -Elapsoidea -elasmobranch -elasmobranchian -elasmobranchiate -Elasmobranchii -elasmosaur -Elasmosaurus -elasmothere -Elasmotherium -elastance -elastic -elastica -elastically -elastician -elasticin -elasticity -elasticize -elasticizer -elasticness -elastin -elastivity -elastomer -elastomeric -elastometer -elastometry -elastose -elatcha -elate -elated -elatedly -elatedness -elater -elaterid -Elateridae -elaterin -elaterite -elaterium -elateroid -Elatha -Elatinaceae -elatinaceous -Elatine -elation -elative -elator -elatrometer -elb -Elbert -Elberta -elbow -elbowboard -elbowbush -elbowchair -elbowed -elbower -elbowpiece -elbowroom -elbowy -elcaja -elchee -eld -elder -elderberry -elderbrotherhood -elderbrotherish -elderbrotherly -elderbush -elderhood -elderliness -elderly -elderman -eldership -eldersisterly -elderwoman -elderwood -elderwort -eldest -eldin -elding -Eldred -eldress -eldritch -Elean -Eleanor -Eleatic -Eleaticism -Eleazar -elecampane -elect -electable -electee -electicism -election -electionary -electioneer -electioneerer -elective -electively -electiveness -electivism -electivity -electly -elector -electoral -electorally -electorate -electorial -electorship -Electra -electragist -electragy -electralize -electrepeter -electress -electret -electric -electrical -electricalize -electrically -electricalness -electrician -electricity -electricize -electrics -electriferous -electrifiable -electrification -electrifier -electrify -electrion -electrionic -electrizable -electrization -electrize -electrizer -electro -electroacoustic -electroaffinity -electroamalgamation -electroanalysis -electroanalytic -electroanalytical -electroanesthesia -electroballistic -electroballistics -electrobath -electrobiological -electrobiologist -electrobiology -electrobioscopy -electroblasting -electrobrasser -electrobus -electrocapillarity -electrocapillary -electrocardiogram -electrocardiograph -electrocardiographic -electrocardiography -electrocatalysis -electrocatalytic -electrocataphoresis -electrocataphoretic -electrocauterization -electrocautery -electroceramic -electrochemical -electrochemically -electrochemist -electrochemistry -electrochronograph -electrochronographic -electrochronometer -electrochronometric -electrocoagulation -electrocoating -electrocolloidal -electrocontractility -electrocorticogram -electroculture -electrocute -electrocution -electrocutional -electrocutioner -electrocystoscope -electrode -electrodeless -electrodentistry -electrodeposit -electrodepositable -electrodeposition -electrodepositor -electrodesiccate -electrodesiccation -electrodiagnosis -electrodialysis -electrodialyze -electrodialyzer -electrodiplomatic -electrodispersive -electrodissolution -electrodynamic -electrodynamical -electrodynamics -electrodynamism -electrodynamometer -electroencephalogram -electroencephalograph -electroencephalography -electroendosmose -electroendosmosis -electroendosmotic -electroengrave -electroengraving -electroergometer -electroetching -electroethereal -electroextraction -electroform -electroforming -electrofuse -electrofused -electrofusion -electrogalvanic -electrogalvanize -electrogenesis -electrogenetic -electrogild -electrogilding -electrogilt -electrograph -electrographic -electrographite -electrography -electroharmonic -electrohemostasis -electrohomeopathy -electrohorticulture -electrohydraulic -electroimpulse -electroindustrial -electroionic -electroirrigation -electrokinematics -electrokinetic -electrokinetics -electrolier -electrolithotrity -electrologic -electrological -electrologist -electrology -electroluminescence -electroluminescent -electrolysis -electrolyte -electrolytic -electrolytical -electrolytically -electrolyzability -electrolyzable -electrolyzation -electrolyze -electrolyzer -electromagnet -electromagnetic -electromagnetical -electromagnetically -electromagnetics -electromagnetism -electromagnetist -electromassage -electromechanical -electromechanics -electromedical -electromer -electromeric -electromerism -electrometallurgical -electrometallurgist -electrometallurgy -electrometer -electrometric -electrometrical -electrometrically -electrometry -electromobile -electromobilism -electromotion -electromotive -electromotivity -electromotograph -electromotor -electromuscular -electromyographic -electron -electronarcosis -electronegative -electronervous -electronic -electronics -electronographic -electrooptic -electrooptical -electrooptically -electrooptics -electroosmosis -electroosmotic -electroosmotically -electrootiatrics -electropathic -electropathology -electropathy -electropercussive -electrophobia -electrophone -electrophore -electrophoresis -electrophoretic -electrophoric -Electrophoridae -electrophorus -electrophotometer -electrophotometry -electrophototherapy -electrophrenic -electrophysics -electrophysiological -electrophysiologist -electrophysiology -electropism -electroplate -electroplater -electroplating -electroplax -electropneumatic -electropneumatically -electropoion -electropolar -electropositive -electropotential -electropower -electropsychrometer -electropult -electropuncturation -electropuncture -electropuncturing -electropyrometer -electroreceptive -electroreduction -electrorefine -electroscission -electroscope -electroscopic -electrosherardizing -electroshock -electrosmosis -electrostatic -electrostatical -electrostatically -electrostatics -electrosteel -electrostenolysis -electrostenolytic -electrostereotype -electrostriction -electrosurgery -electrosurgical -electrosynthesis -electrosynthetic -electrosynthetically -electrotactic -electrotautomerism -electrotaxis -electrotechnic -electrotechnical -electrotechnician -electrotechnics -electrotechnology -electrotelegraphic -electrotelegraphy -electrotelethermometer -electrotellurograph -electrotest -electrothanasia -electrothanatosis -electrotherapeutic -electrotherapeutical -electrotherapeutics -electrotherapeutist -electrotherapist -electrotherapy -electrothermal -electrothermancy -electrothermic -electrothermics -electrothermometer -electrothermostat -electrothermostatic -electrothermotic -electrotitration -electrotonic -electrotonicity -electrotonize -electrotonus -electrotrephine -electrotropic -electrotropism -electrotype -electrotyper -electrotypic -electrotyping -electrotypist -electrotypy -electrovalence -electrovalency -electrovection -electroviscous -electrovital -electrowin -electrum -electuary -eleemosynarily -eleemosynariness -eleemosynary -elegance -elegancy -elegant -elegantly -elegiac -elegiacal -elegiambic -elegiambus -elegiast -elegist -elegit -elegize -elegy -eleidin -element -elemental -elementalism -elementalist -elementalistic -elementalistically -elementality -elementalize -elementally -elementarily -elementariness -elementary -elementoid -elemi -elemicin -elemin -elench -elenchi -elenchic -elenchical -elenchically -elenchize -elenchtic -elenchtical -elenctic -elenge -eleoblast -Eleocharis -eleolite -eleomargaric -eleometer -eleonorite -eleoptene -eleostearate -eleostearic -elephant -elephanta -elephantiac -elephantiasic -elephantiasis -elephantic -elephanticide -Elephantidae -elephantine -elephantlike -elephantoid -elephantoidal -Elephantopus -elephantous -elephantry -Elephas -Elettaria -Eleusine -Eleusinia -Eleusinian -Eleusinion -Eleut -eleutherarch -Eleutheri -Eleutheria -Eleutherian -Eleutherios -eleutherism -eleutherodactyl -Eleutherodactyli -Eleutherodactylus -eleutheromania -eleutheromaniac -eleutheromorph -eleutheropetalous -eleutherophyllous -eleutherosepalous -Eleutherozoa -eleutherozoan -elevate -elevated -elevatedly -elevatedness -elevating -elevatingly -elevation -elevational -elevator -elevatory -eleven -elevener -elevenfold -eleventh -eleventhly -elevon -elf -elfenfolk -elfhood -elfic -elfin -elfinwood -elfish -elfishly -elfishness -elfkin -elfland -elflike -elflock -elfship -elfwife -elfwort -Eli -Elia -Elian -Elianic -Elias -eliasite -elicit -elicitable -elicitate -elicitation -elicitor -elicitory -elide -elidible -eligibility -eligible -eligibleness -eligibly -Elihu -Elijah -eliminable -eliminand -eliminant -eliminate -elimination -eliminative -eliminator -eliminatory -Elinor -Elinvar -Eliot -Eliphalet -eliquate -eliquation -Elisabeth -Elisha -Elishah -elision -elisor -Elissa -elite -elixir -Eliza -Elizabeth -Elizabethan -Elizabethanism -Elizabethanize -elk -Elkanah -Elkdom -Elkesaite -elkhorn -elkhound -Elkoshite -elkslip -Elkuma -elkwood -ell -Ella -ellachick -ellagate -ellagic -ellagitannin -Ellasar -elle -elleck -Ellen -ellenyard -Ellerian -ellfish -Ellice -Ellick -Elliot -Elliott -ellipse -ellipses -ellipsis -ellipsograph -ellipsoid -ellipsoidal -ellipsone -ellipsonic -elliptic -elliptical -elliptically -ellipticalness -ellipticity -elliptograph -elliptoid -ellops -ellwand -elm -Elmer -elmy -Eloah -elocular -elocute -elocution -elocutionary -elocutioner -elocutionist -elocutionize -elod -Elodea -Elodeaceae -Elodes -eloge -elogium -Elohim -Elohimic -Elohism -Elohist -Elohistic -eloign -eloigner -eloignment -Eloise -Elon -elongate -elongated -elongation -elongative -Elonite -elope -elopement -eloper -Elopidae -elops -eloquence -eloquent -eloquential -eloquently -eloquentness -Elotherium -elotillo -elpasolite -elpidite -Elric -els -Elsa -else -elsehow -elsewards -elseways -elsewhen -elsewhere -elsewheres -elsewhither -elsewise -Elsholtzia -elsin -elt -eluate -elucidate -elucidation -elucidative -elucidator -elucidatory -elucubrate -elucubration -elude -eluder -elusion -elusive -elusively -elusiveness -elusoriness -elusory -elute -elution -elutor -elutriate -elutriation -elutriator -eluvial -eluviate -eluviation -eluvium -elvan -elvanite -elvanitic -elver -elves -elvet -Elvira -Elvis -elvish -elvishly -Elwood -elydoric -Elymi -Elymus -Elysee -Elysia -elysia -Elysian -Elysiidae -Elysium -elytral -elytriferous -elytriform -elytrigerous -elytrin -elytrocele -elytroclasia -elytroid -elytron -elytroplastic -elytropolypus -elytroposis -elytrorhagia -elytrorrhagia -elytrorrhaphy -elytrostenosis -elytrotomy -elytrous -elytrum -Elzevir -Elzevirian -Em -em -emaciate -emaciation -emajagua -emanant -emanate -emanation -emanational -emanationism -emanationist -emanatism -emanatist -emanatistic -emanativ -emanative -emanatively -emanator -emanatory -emancipate -emancipation -emancipationist -emancipatist -emancipative -emancipator -emancipatory -emancipatress -emancipist -emandibulate -emanium -emarcid -emarginate -emarginately -emargination -Emarginula -emasculate -emasculation -emasculative -emasculator -emasculatory -Embadomonas -emball -emballonurid -Emballonuridae -emballonurine -embalm -embalmer -embalmment -embank -embankment -embannered -embar -embargo -embargoist -embark -embarkation -embarkment -embarras -embarrass -embarrassed -embarrassedly -embarrassing -embarrassingly -embarrassment -embarrel -embassage -embassy -embastioned -embathe -embatholithic -embattle -embattled -embattlement -embay -embayment -Embden -embed -embedment -embeggar -Embelia -embelic -embellish -embellisher -embellishment -ember -embergoose -Emberiza -emberizidae -Emberizinae -emberizine -embezzle -embezzlement -embezzler -Embiidae -Embiidina -embind -Embiodea -Embioptera -embiotocid -Embiotocidae -embiotocoid -embira -embitter -embitterer -embitterment -emblaze -emblazer -emblazon -emblazoner -emblazonment -emblazonry -emblem -emblema -emblematic -emblematical -emblematically -emblematicalness -emblematicize -emblematist -emblematize -emblematology -emblement -emblemist -emblemize -emblemology -emblic -emblossom -embodier -embodiment -embody -embog -emboitement -embolden -emboldener -embole -embolectomy -embolemia -embolic -emboliform -embolism -embolismic -embolismus -embolite -embolium -embolize -embolo -embololalia -Embolomeri -embolomerism -embolomerous -embolomycotic -embolum -embolus -emboly -emborder -emboscata -embosom -emboss -embossage -embosser -embossing -embossman -embossment -embosture -embottle -embouchure -embound -embow -embowed -embowel -emboweler -embowelment -embower -embowerment -embowment -embox -embrace -embraceable -embraceably -embracement -embraceor -embracer -embracery -embracing -embracingly -embracingness -embracive -embrail -embranchment -embrangle -embranglement -embrasure -embreathe -embreathement -Embrica -embright -embrittle -embrittlement -embroaden -embrocate -embrocation -embroider -embroiderer -embroideress -embroidery -embroil -embroiler -embroilment -embronze -embrown -embryectomy -embryo -embryocardia -embryoctonic -embryoctony -embryoferous -embryogenesis -embryogenetic -embryogenic -embryogeny -embryogony -embryographer -embryographic -embryography -embryoid -embryoism -embryologic -embryological -embryologically -embryologist -embryology -embryoma -embryon -embryonal -embryonary -embryonate -embryonated -embryonic -embryonically -embryoniferous -embryoniform -embryony -embryopathology -embryophagous -embryophore -Embryophyta -embryophyte -embryoplastic -embryoscope -embryoscopic -embryotega -embryotic -embryotome -embryotomy -embryotrophic -embryotrophy -embryous -embryulcia -embryulcus -embubble -embuia -embus -embusk -embuskin -emcee -eme -emeer -emeership -Emeline -emend -emendable -emendandum -emendate -emendation -emendator -emendatory -emender -emerald -emeraldine -emeraude -emerge -emergence -emergency -emergent -emergently -emergentness -Emerita -emerited -emeritus -emerize -emerse -emersed -emersion -Emersonian -Emersonianism -Emery -emery -Emesa -Emesidae -emesis -emetatrophia -emetic -emetically -emetine -emetocathartic -emetology -emetomorphine -emgalla -emication -emiction -emictory -emigrant -emigrate -emigration -emigrational -emigrationist -emigrative -emigrator -emigratory -emigree -Emil -Emilia -Emily -Emim -eminence -eminency -eminent -eminently -emir -emirate -emirship -emissarium -emissary -emissaryship -emissile -emission -emissive -emissivity -emit -emittent -emitter -Emm -Emma -emma -Emmanuel -emmarble -emmarvel -emmenagogic -emmenagogue -emmenic -emmeniopathy -emmenology -emmensite -Emmental -emmer -emmergoose -emmet -emmetrope -emmetropia -emmetropic -emmetropism -emmetropy -Emmett -emodin -emollescence -emolliate -emollient -emoloa -emolument -emolumental -emolumentary -emote -emotion -emotionable -emotional -emotionalism -emotionalist -emotionality -emotionalization -emotionalize -emotionally -emotioned -emotionist -emotionize -emotionless -emotionlessness -emotive -emotively -emotiveness -emotivity -empacket -empaistic -empall -empanel -empanelment -empanoply -empaper -emparadise -emparchment -empark -empasm -empathic -empathically -empathize -empathy -Empedoclean -empeirema -Empeo -emperor -emperorship -empery -Empetraceae -empetraceous -Empetrum -emphases -emphasis -emphasize -emphatic -emphatical -emphatically -emphaticalness -emphlysis -emphractic -emphraxis -emphysema -emphysematous -emphyteusis -emphyteuta -emphyteutic -empicture -Empididae -Empidonax -empiecement -Empire -empire -empirema -empiric -empirical -empiricalness -empiricism -empiricist -empirics -empiriocritcism -empiriocritical -empiriological -empirism -empiristic -emplace -emplacement -emplane -emplastic -emplastration -emplastrum -emplectite -empleomania -employ -employability -employable -employed -employee -employer -employless -employment -emplume -empocket -empodium -empoison -empoisonment -emporetic -emporeutic -emporia -emporial -emporium -empower -empowerment -empress -emprise -emprosthotonic -emprosthotonos -emprosthotonus -empt -emptier -emptily -emptiness -emptings -emptins -emption -emptional -emptor -empty -emptyhearted -emptysis -empurple -Empusa -empyema -empyemic -empyesis -empyocele -empyreal -empyrean -empyreuma -empyreumatic -empyreumatical -empyreumatize -empyromancy -emu -emulable -emulant -emulate -emulation -emulative -emulatively -emulator -emulatory -emulatress -emulgence -emulgent -emulous -emulously -emulousness -emulsibility -emulsible -emulsifiability -emulsifiable -emulsification -emulsifier -emulsify -emulsin -emulsion -emulsionize -emulsive -emulsoid -emulsor -emunctory -emundation -emyd -Emydea -emydian -Emydidae -Emydinae -Emydosauria -emydosaurian -Emys -en -enable -enablement -enabler -enact -enactable -enaction -enactive -enactment -enactor -enactory -enaena -enage -Enajim -enalid -Enaliornis -enaliosaur -Enaliosauria -enaliosaurian -enallachrome -enallage -enaluron -enam -enamber -enambush -enamdar -enamel -enameler -enameling -enamelist -enamelless -enamellist -enameloma -enamelware -enamor -enamorato -enamored -enamoredness -enamorment -enamourment -enanguish -enanthem -enanthema -enanthematous -enanthesis -enantiobiosis -enantioblastic -enantioblastous -enantiomer -enantiomeride -enantiomorph -enantiomorphic -enantiomorphism -enantiomorphous -enantiomorphously -enantiomorphy -enantiopathia -enantiopathic -enantiopathy -enantiosis -enantiotropic -enantiotropy -enantobiosis -enapt -enarbor -enarbour -enarch -enarched -enargite -enarm -enarme -enarthrodia -enarthrodial -enarthrosis -enate -enatic -enation -enbrave -encaenia -encage -encake -encalendar -encallow -encamp -encampment -encanker -encanthis -encapsulate -encapsulation -encapsule -encarditis -encarnadine -encarnalize -encarpium -encarpus -encase -encasement -encash -encashable -encashment -encasserole -encastage -encatarrhaphy -encauma -encaustes -encaustic -encaustically -encave -encefalon -Encelia -encell -encenter -encephala -encephalalgia -Encephalartos -encephalasthenia -encephalic -encephalin -encephalitic -encephalitis -encephalocele -encephalocoele -encephalodialysis -encephalogram -encephalograph -encephalography -encephaloid -encephalolith -encephalology -encephaloma -encephalomalacia -encephalomalacosis -encephalomalaxis -encephalomeningitis -encephalomeningocele -encephalomere -encephalomeric -encephalometer -encephalometric -encephalomyelitis -encephalomyelopathy -encephalon -encephalonarcosis -encephalopathia -encephalopathic -encephalopathy -encephalophyma -encephalopsychesis -encephalopyosis -encephalorrhagia -encephalosclerosis -encephaloscope -encephaloscopy -encephalosepsis -encephalospinal -encephalothlipsis -encephalotome -encephalotomy -encephalous -enchain -enchainment -enchair -enchalice -enchannel -enchant -enchanter -enchanting -enchantingly -enchantingness -enchantment -enchantress -encharge -encharnel -enchase -enchaser -enchasten -Enchelycephali -enchequer -enchest -enchilada -enchiridion -Enchodontid -Enchodontidae -Enchodontoid -Enchodus -enchondroma -enchondromatous -enchondrosis -enchorial -enchurch -enchylema -enchylematous -enchymatous -enchytrae -enchytraeid -Enchytraeidae -Enchytraeus -encina -encinal -encincture -encinder -encinillo -encipher -encircle -encirclement -encircler -encist -encitadel -enclaret -enclasp -enclave -enclavement -enclisis -enclitic -enclitical -enclitically -encloak -encloister -enclose -encloser -enclosure -enclothe -encloud -encoach -encode -encoffin -encoignure -encoil -encolden -encollar -encolor -encolpion -encolumn -encomendero -encomia -encomiast -encomiastic -encomiastical -encomiastically -encomic -encomienda -encomiologic -encomium -encommon -encompass -encompasser -encompassment -encoop -encorbelment -encore -encoronal -encoronate -encoronet -encounter -encounterable -encounterer -encourage -encouragement -encourager -encouraging -encouragingly -encowl -encraal -encradle -encranial -encratic -Encratism -Encratite -encraty -encreel -encrimson -encrinal -encrinic -Encrinidae -encrinidae -encrinital -encrinite -encrinitic -encrinitical -encrinoid -Encrinoidea -Encrinus -encrisp -encroach -encroacher -encroachingly -encroachment -encrotchet -encrown -encrownment -encrust -encrustment -encrypt -encryption -encuirassed -encumber -encumberer -encumberingly -encumberment -encumbrance -encumbrancer -encup -encurl -encurtain -encushion -encyclic -encyclical -encyclopedia -encyclopediac -encyclopediacal -encyclopedial -encyclopedian -encyclopediast -encyclopedic -encyclopedically -encyclopedism -encyclopedist -encyclopedize -encyrtid -Encyrtidae -encyst -encystation -encystment -end -endable -endamage -endamageable -endamagement -endamask -endameba -endamebic -Endamoeba -endamoebiasis -endamoebic -Endamoebidae -endanger -endangerer -endangerment -endangium -endaortic -endaortitis -endarch -endarchy -endarterial -endarteritis -endarterium -endaspidean -endaze -endboard -endbrain -endear -endearance -endeared -endearedly -endearedness -endearing -endearingly -endearingness -endearment -endeavor -endeavorer -ended -endeictic -endellionite -endemial -endemic -endemically -endemicity -endemiological -endemiology -endemism -endenizen -ender -endere -endermatic -endermic -endermically -enderon -enderonic -endevil -endew -endgate -endiadem -endiaper -ending -endite -endive -endless -endlessly -endlessness -endlichite -endlong -endmatcher -endmost -endoabdominal -endoangiitis -endoaortitis -endoappendicitis -endoarteritis -endoauscultation -endobatholithic -endobiotic -endoblast -endoblastic -endobronchial -endobronchially -endobronchitis -endocannibalism -endocardiac -endocardial -endocarditic -endocarditis -endocardium -endocarp -endocarpal -endocarpic -endocarpoid -endocellular -endocentric -Endoceras -Endoceratidae -endoceratite -endoceratitic -endocervical -endocervicitis -endochondral -endochorion -endochorionic -endochrome -endochylous -endoclinal -endocline -endocoelar -endocoele -endocoeliac -endocolitis -endocolpitis -endocondensation -endocone -endoconidium -endocorpuscular -endocortex -endocranial -endocranium -endocrinal -endocrine -endocrinic -endocrinism -endocrinological -endocrinologist -endocrinology -endocrinopathic -endocrinopathy -endocrinotherapy -endocrinous -endocritic -endocycle -endocyclic -endocyemate -endocyst -endocystitis -endoderm -endodermal -endodermic -endodermis -endodontia -endodontic -endodontist -endodynamomorphic -endoenteritis -endoenzyme -endoesophagitis -endofaradism -endogalvanism -endogamic -endogamous -endogamy -endogastric -endogastrically -endogastritis -endogen -Endogenae -endogenesis -endogenetic -endogenic -endogenous -endogenously -endogeny -endoglobular -endognath -endognathal -endognathion -endogonidium -endointoxication -endokaryogamy -endolabyrinthitis -endolaryngeal -endolemma -endolumbar -endolymph -endolymphangial -endolymphatic -endolymphic -endolysin -endomastoiditis -endome -endomesoderm -endometrial -endometritis -endometrium -endometry -endomitosis -endomitotic -endomixis -endomorph -endomorphic -endomorphism -endomorphy -Endomyces -Endomycetaceae -endomysial -endomysium -endoneurial -endoneurium -endonuclear -endonucleolus -endoparasite -endoparasitic -Endoparasitica -endopathic -endopelvic -endopericarditis -endoperidial -endoperidium -endoperitonitis -endophagous -endophagy -endophasia -endophasic -endophlebitis -endophragm -endophragmal -Endophyllaceae -endophyllous -Endophyllum -endophytal -endophyte -endophytic -endophytically -endophytous -endoplasm -endoplasma -endoplasmic -endoplast -endoplastron -endoplastular -endoplastule -endopleura -endopleural -endopleurite -endopleuritic -endopod -endopodite -endopoditic -endoproct -Endoprocta -endoproctous -endopsychic -Endopterygota -endopterygote -endopterygotic -endopterygotism -endopterygotous -endorachis -endoral -endore -endorhinitis -endorsable -endorsation -endorse -endorsed -endorsee -endorsement -endorser -endorsingly -endosalpingitis -endosarc -endosarcode -endosarcous -endosclerite -endoscope -endoscopic -endoscopy -endosecretory -endosepsis -endosiphon -endosiphonal -endosiphonate -endosiphuncle -endoskeletal -endoskeleton -endosmometer -endosmometric -endosmosic -endosmosis -endosmotic -endosmotically -endosome -endosperm -endospermic -endospore -endosporium -endosporous -endoss -endosteal -endosteally -endosteitis -endosteoma -endosternite -endosternum -endosteum -endostitis -endostoma -endostome -endostosis -endostracal -endostracum -endostylar -endostyle -endostylic -endotheca -endothecal -endothecate -endothecial -endothecium -endothelia -endothelial -endothelioblastoma -endotheliocyte -endothelioid -endotheliolysin -endotheliolytic -endothelioma -endotheliomyoma -endotheliomyxoma -endotheliotoxin -endothelium -endothermal -endothermic -endothermous -endothermy -Endothia -endothoracic -endothorax -Endothrix -endothys -endotoxic -endotoxin -endotoxoid -endotracheitis -endotrachelitis -Endotrophi -endotrophic -endotys -endovaccination -endovasculitis -endovenous -endow -endower -endowment -endozoa -endpiece -Endromididae -Endromis -endue -enduement -endungeon -endura -endurability -endurable -endurableness -endurably -endurance -endurant -endure -endurer -enduring -enduringly -enduringness -endways -endwise -endyma -endymal -Endymion -endysis -Eneas -eneclann -enema -enemy -enemylike -enemyship -enepidermic -energeia -energesis -energetic -energetical -energetically -energeticalness -energeticist -energetics -energetistic -energic -energical -energid -energism -energist -energize -energizer -energumen -energumenon -energy -enervate -enervation -enervative -enervator -eneuch -eneugh -enface -enfacement -enfamous -enfasten -enfatico -enfeature -enfeeble -enfeeblement -enfeebler -enfelon -enfeoff -enfeoffment -enfester -enfetter -enfever -enfigure -enfilade -enfilading -enfile -enfiled -enflagellate -enflagellation -enflesh -enfleurage -enflower -enfoil -enfold -enfolden -enfolder -enfoldment -enfonced -enforce -enforceability -enforceable -enforced -enforcedly -enforcement -enforcer -enforcibility -enforcible -enforcingly -enfork -enfoul -enframe -enframement -enfranchisable -enfranchise -enfranchisement -enfranchiser -enfree -enfrenzy -enfuddle -enfurrow -engage -engaged -engagedly -engagedness -engagement -engager -engaging -engagingly -engagingness -engaol -engarb -engarble -engarland -engarment -engarrison -engastrimyth -engastrimythic -engaud -engaze -Engelmannia -engem -engender -engenderer -engenderment -engerminate -enghosted -engild -engine -engineer -engineering -engineership -enginehouse -engineless -enginelike -engineman -enginery -enginous -engird -engirdle -engirt -engjateigur -englacial -englacially -englad -engladden -Englander -Engler -Englerophoenix -Englifier -Englify -English -Englishable -Englisher -Englishhood -Englishism -Englishize -Englishly -Englishman -Englishness -Englishry -Englishwoman -englobe -englobement -engloom -englory -englut -englyn -engnessang -engobe -engold -engolden -engore -engorge -engorgement -engouled -engrace -engraff -engraft -engraftation -engrafter -engraftment -engrail -engrailed -engrailment -engrain -engrained -engrainedly -engrainer -engram -engramma -engrammatic -engrammic -engrandize -engrandizement -engraphia -engraphic -engraphically -engraphy -engrapple -engrasp -Engraulidae -Engraulis -engrave -engraved -engravement -engraver -engraving -engreen -engrieve -engroove -engross -engrossed -engrossedly -engrosser -engrossing -engrossingly -engrossingness -engrossment -enguard -engulf -engulfment -engyscope -engysseismology -Engystomatidae -enhallow -enhalo -enhamper -enhance -enhanced -enhancement -enhancer -enhancive -enharmonic -enharmonical -enharmonically -enhat -enhaunt -enhearse -enheart -enhearten -enhedge -enhelm -enhemospore -enherit -enheritage -enheritance -enhorror -enhunger -enhusk -Enhydra -Enhydrinae -Enhydris -enhydrite -enhydritic -enhydros -enhydrous -enhypostasia -enhypostasis -enhypostatic -enhypostatize -eniac -Enicuridae -Enid -Enif -enigma -enigmatic -enigmatical -enigmatically -enigmaticalness -enigmatist -enigmatization -enigmatize -enigmatographer -enigmatography -enigmatology -enisle -enjail -enjamb -enjambed -enjambment -enjelly -enjeopard -enjeopardy -enjewel -enjoin -enjoinder -enjoiner -enjoinment -enjoy -enjoyable -enjoyableness -enjoyably -enjoyer -enjoying -enjoyingly -enjoyment -enkerchief -enkernel -Enki -Enkidu -enkindle -enkindler -enkraal -enlace -enlacement -enlard -enlarge -enlargeable -enlargeableness -enlarged -enlargedly -enlargedness -enlargement -enlarger -enlarging -enlargingly -enlaurel -enleaf -enleague -enlevement -enlief -enlife -enlight -enlighten -enlightened -enlightenedly -enlightenedness -enlightener -enlightening -enlighteningly -enlightenment -enlink -enlinkment -enlist -enlisted -enlister -enlistment -enliven -enlivener -enlivening -enliveningly -enlivenment -enlock -enlodge -enlodgement -enmarble -enmask -enmass -enmesh -enmeshment -enmist -enmity -enmoss -enmuffle -enneacontahedral -enneacontahedron -ennead -enneadianome -enneadic -enneagon -enneagynous -enneahedral -enneahedria -enneahedron -enneapetalous -enneaphyllous -enneasemic -enneasepalous -enneaspermous -enneastyle -enneastylos -enneasyllabic -enneateric -enneatic -enneatical -ennerve -enniche -ennoble -ennoblement -ennobler -ennobling -ennoblingly -ennoic -ennomic -ennui -Enoch -Enochic -enocyte -enodal -enodally -enoil -enol -enolate -enolic -enolizable -enolization -enolize -enomania -enomaniac -enomotarch -enomoty -enophthalmos -enophthalmus -Enopla -enoplan -enoptromancy -enorganic -enorm -enormity -enormous -enormously -enormousness -Enos -enostosis -enough -enounce -enouncement -enow -enphytotic -enplane -enquicken -enquire -enquirer -enquiry -enrace -enrage -enraged -enragedly -enragement -enrange -enrank -enrapt -enrapture -enrapturer -enravish -enravishingly -enravishment -enray -enregiment -enregister -enregistration -enregistry -enrib -enrich -enricher -enriching -enrichingly -enrichment -enring -enrive -enrobe -enrobement -enrober -enrockment -enrol -enroll -enrolled -enrollee -enroller -enrollment -enrolment -enroot -enrough -enruin -enrut -ens -ensaffron -ensaint -ensample -ensand -ensandal -ensanguine -ensate -enscene -ensconce -enscroll -ensculpture -ense -enseam -enseat -enseem -ensellure -ensemble -ensepulcher -ensepulchre -enseraph -enserf -ensete -enshade -enshadow -enshawl -ensheathe -enshell -enshelter -enshield -enshrine -enshrinement -enshroud -Ensiferi -ensiform -ensign -ensigncy -ensignhood -ensignment -ensignry -ensignship -ensilage -ensilate -ensilation -ensile -ensilist -ensilver -ensisternum -ensky -enslave -enslavedness -enslavement -enslaver -ensmall -ensnare -ensnarement -ensnarer -ensnaring -ensnaringly -ensnarl -ensnow -ensorcelize -ensorcell -ensoul -enspell -ensphere -enspirit -enstamp -enstar -enstate -enstatite -enstatitic -enstatolite -ensteel -enstool -enstore -enstrengthen -ensuable -ensuance -ensuant -ensue -ensuer -ensuingly -ensulphur -ensure -ensurer -enswathe -enswathement -ensweep -entablature -entablatured -entablement -entach -entad -Entada -entail -entailable -entailer -entailment -ental -entame -Entamoeba -entamoebiasis -entamoebic -entangle -entangled -entangledly -entangledness -entanglement -entangler -entangling -entanglingly -entapophysial -entapophysis -entarthrotic -entasia -entasis -entelam -entelechy -entellus -Entelodon -entelodont -entempest -entemple -entente -Ententophil -entepicondylar -enter -enterable -enteraden -enteradenographic -enteradenography -enteradenological -enteradenology -enteral -enteralgia -enterate -enterauxe -enterclose -enterectomy -enterer -entergogenic -enteria -enteric -entericoid -entering -enteritidis -enteritis -entermete -enteroanastomosis -enterobiliary -enterocele -enterocentesis -enterochirurgia -enterochlorophyll -enterocholecystostomy -enterocinesia -enterocinetic -enterocleisis -enteroclisis -enteroclysis -Enterocoela -enterocoele -enterocoelic -enterocoelous -enterocolitis -enterocolostomy -enterocrinin -enterocyst -enterocystoma -enterodynia -enteroepiplocele -enterogastritis -enterogastrone -enterogenous -enterogram -enterograph -enterography -enterohelcosis -enterohemorrhage -enterohepatitis -enterohydrocele -enteroid -enterointestinal -enteroischiocele -enterokinase -enterokinesia -enterokinetic -enterolith -enterolithiasis -Enterolobium -enterology -enteromegalia -enteromegaly -enteromere -enteromesenteric -Enteromorpha -enteromycosis -enteromyiasis -enteron -enteroneuritis -enteroparalysis -enteroparesis -enteropathy -enteropexia -enteropexy -enterophthisis -enteroplasty -enteroplegia -enteropneust -Enteropneusta -enteropneustan -enteroptosis -enteroptotic -enterorrhagia -enterorrhaphy -enterorrhea -enteroscope -enterosepsis -enterospasm -enterostasis -enterostenosis -enterostomy -enterosyphilis -enterotome -enterotomy -enterotoxemia -enterotoxication -enterozoa -enterozoan -enterozoic -enterprise -enterpriseless -enterpriser -enterprising -enterprisingly -enterritoriality -entertain -entertainable -entertainer -entertaining -entertainingly -entertainingness -entertainment -enthalpy -entheal -enthelmintha -enthelminthes -enthelminthic -enthetic -enthral -enthraldom -enthrall -enthralldom -enthraller -enthralling -enthrallingly -enthrallment -enthralment -enthrone -enthronement -enthronization -enthronize -enthuse -enthusiasm -enthusiast -enthusiastic -enthusiastical -enthusiastically -enthusiastly -enthymematic -enthymematical -enthymeme -entia -entice -enticeable -enticeful -enticement -enticer -enticing -enticingly -enticingness -entifical -entification -entify -entincture -entire -entirely -entireness -entirety -entiris -entitative -entitatively -entitle -entitlement -entity -entoblast -entoblastic -entobranchiate -entobronchium -entocalcaneal -entocarotid -entocele -entocnemial -entocoele -entocoelic -entocondylar -entocondyle -entocondyloid -entocone -entoconid -entocornea -entocranial -entocuneiform -entocuniform -entocyemate -entocyst -entoderm -entodermal -entodermic -entogastric -entogenous -entoglossal -entohyal -entoil -entoilment -Entoloma -entomb -entombment -entomere -entomeric -entomic -entomical -entomion -entomogenous -entomoid -entomologic -entomological -entomologically -entomologist -entomologize -entomology -Entomophaga -entomophagan -entomophagous -Entomophila -entomophilous -entomophily -Entomophthora -Entomophthoraceae -entomophthoraceous -Entomophthorales -entomophthorous -entomophytous -Entomosporium -Entomostraca -entomostracan -entomostracous -entomotaxy -entomotomist -entomotomy -entone -entonement -entoolitic -entoparasite -entoparasitic -entoperipheral -entophytal -entophyte -entophytic -entophytically -entophytous -entopic -entopical -entoplasm -entoplastic -entoplastral -entoplastron -entopopliteal -Entoprocta -entoproctous -entopterygoid -entoptic -entoptical -entoptically -entoptics -entoptoscope -entoptoscopic -entoptoscopy -entoretina -entorganism -entosarc -entosclerite -entosphenal -entosphenoid -entosphere -entosternal -entosternite -entosternum -entothorax -entotic -Entotrophi -entotympanic -entourage -entozoa -entozoal -entozoan -entozoarian -entozoic -entozoological -entozoologically -entozoologist -entozoology -entozoon -entracte -entrail -entrails -entrain -entrainer -entrainment -entrammel -entrance -entrancedly -entrancement -entranceway -entrancing -entrancingly -entrant -entrap -entrapment -entrapper -entrappingly -entreasure -entreat -entreating -entreatingly -entreatment -entreaty -entree -entremets -entrench -entrenchment -entrepas -entrepot -entrepreneur -entrepreneurial -entrepreneurship -entresol -entrochite -entrochus -entropion -entropionize -entropium -entropy -entrough -entrust -entrustment -entry -entryman -entryway -enturret -entwine -entwinement -entwist -Entyloma -enucleate -enucleation -enucleator -Enukki -enumerable -enumerate -enumeration -enumerative -enumerator -enunciability -enunciable -enunciate -enunciation -enunciative -enunciatively -enunciator -enunciatory -enure -enuresis -enuretic -enurny -envapor -envapour -envassal -envassalage -envault -enveil -envelop -envelope -enveloper -envelopment -envenom -envenomation -enverdure -envermeil -enviable -enviableness -enviably -envied -envier -envineyard -envious -enviously -enviousness -environ -environage -environal -environic -environment -environmental -environmentalism -environmentalist -environmentally -environs -envisage -envisagement -envision -envolume -envoy -envoyship -envy -envying -envyingly -enwallow -enwiden -enwind -enwisen -enwoman -enwomb -enwood -enworthed -enwound -enwrap -enwrapment -enwreathe -enwrite -enwrought -enzone -enzootic -enzooty -enzym -enzymatic -enzyme -enzymic -enzymically -enzymologist -enzymology -enzymolysis -enzymolytic -enzymosis -enzymotic -eoan -Eoanthropus -Eocarboniferous -Eocene -Eodevonian -Eogaea -Eogaean -Eoghanacht -Eohippus -eolation -eolith -eolithic -Eomecon -eon -eonism -Eopalaeozoic -Eopaleozoic -eophyte -eophytic -eophyton -eorhyolite -eosate -Eosaurus -eoside -eosin -eosinate -eosinic -eosinoblast -eosinophile -eosinophilia -eosinophilic -eosinophilous -eosphorite -Eozoic -eozoon -eozoonal -epacmaic -epacme -epacrid -Epacridaceae -epacridaceous -Epacris -epact -epactal -epagoge -epagogic -epagomenae -epagomenal -epagomenic -epagomenous -epaleaceous -epalpate -epanadiplosis -Epanagoge -epanalepsis -epanaleptic -epanaphora -epanaphoral -epanastrophe -epanisognathism -epanisognathous -epanodos -epanody -Epanorthidae -epanorthosis -epanorthotic -epanthous -epapillate -epappose -eparch -eparchate -Eparchean -eparchial -eparchy -eparcuale -eparterial -epaule -epaulement -epaulet -epauleted -epauletted -epauliere -epaxial -epaxially -epedaphic -epee -epeeist -Epeira -epeiric -epeirid -Epeiridae -epeirogenesis -epeirogenetic -epeirogenic -epeirogeny -epeisodion -epembryonic -epencephal -epencephalic -epencephalon -ependyma -ependymal -ependyme -ependymitis -ependymoma -ependytes -epenthesis -epenthesize -epenthetic -epephragmal -epepophysial -epepophysis -epergne -eperotesis -Eperua -epexegesis -epexegetic -epexegetical -epexegetically -epha -ephah -epharmonic -epharmony -ephebe -ephebeion -ephebeum -ephebic -ephebos -ephebus -ephectic -Ephedra -Ephedraceae -ephedrine -ephelcystic -ephelis -Ephemera -ephemera -ephemerae -ephemeral -ephemerality -ephemerally -ephemeralness -ephemeran -ephemerid -Ephemerida -Ephemeridae -ephemerides -ephemeris -ephemerist -ephemeromorph -ephemeromorphic -ephemeron -Ephemeroptera -ephemerous -Ephesian -Ephesine -ephetae -ephete -ephetic -ephialtes -ephidrosis -ephippial -ephippium -ephod -ephor -ephoral -ephoralty -ephorate -ephoric -ephorship -ephorus -ephphatha -Ephraim -Ephraimite -Ephraimitic -Ephraimitish -Ephraitic -Ephrathite -Ephthalite -Ephthianura -ephthianure -Ephydra -ephydriad -ephydrid -Ephydridae -ephymnium -ephyra -ephyrula -epibasal -Epibaterium -epibatholithic -epibenthic -epibenthos -epiblast -epiblastema -epiblastic -epiblema -epibole -epibolic -epibolism -epiboly -epiboulangerite -epibranchial -epic -epical -epically -epicalyx -epicanthic -epicanthus -epicardia -epicardiac -epicardial -epicardium -epicarid -epicaridan -Epicaridea -Epicarides -epicarp -Epicauta -epicede -epicedial -epicedian -epicedium -epicele -epicene -epicenism -epicenity -epicenter -epicentral -epicentrum -Epiceratodus -epicerebral -epicheirema -epichil -epichile -epichilium -epichindrotic -epichirema -epichondrosis -epichordal -epichorial -epichoric -epichorion -epichoristic -Epichristian -epicism -epicist -epiclastic -epicleidian -epicleidium -epiclesis -epiclidal -epiclinal -epicly -epicnemial -Epicoela -epicoelar -epicoele -epicoelia -epicoeliac -epicoelian -epicoeloma -epicoelous -epicolic -epicondylar -epicondyle -epicondylian -epicondylic -epicontinental -epicoracohumeral -epicoracoid -epicoracoidal -epicormic -epicorolline -epicortical -epicostal -epicotyl -epicotyleal -epicotyledonary -epicranial -epicranium -epicranius -Epicrates -epicrisis -epicritic -epicrystalline -Epictetian -epicure -Epicurean -Epicureanism -epicurish -epicurishly -Epicurism -Epicurize -epicycle -epicyclic -epicyclical -epicycloid -epicycloidal -epicyemate -epicyesis -epicystotomy -epicyte -epideictic -epideictical -epideistic -epidemic -epidemical -epidemically -epidemicalness -epidemicity -epidemiographist -epidemiography -epidemiological -epidemiologist -epidemiology -epidemy -epidendral -epidendric -Epidendron -Epidendrum -epiderm -epiderma -epidermal -epidermatic -epidermatoid -epidermatous -epidermic -epidermical -epidermically -epidermidalization -epidermis -epidermization -epidermoid -epidermoidal -epidermolysis -epidermomycosis -Epidermophyton -epidermophytosis -epidermose -epidermous -epidesmine -epidialogue -epidiascope -epidiascopic -epidictic -epidictical -epididymal -epididymectomy -epididymis -epididymite -epididymitis -epididymodeferentectomy -epididymodeferential -epididymovasostomy -epidiorite -epidiorthosis -epidosite -epidote -epidotic -epidotiferous -epidotization -epidural -epidymides -epifascial -epifocal -epifolliculitis -Epigaea -epigamic -epigaster -epigastraeum -epigastral -epigastrial -epigastric -epigastrical -epigastriocele -epigastrium -epigastrocele -epigeal -epigean -epigeic -epigene -epigenesis -epigenesist -epigenetic -epigenetically -epigenic -epigenist -epigenous -epigeous -epiglottal -epiglottic -epiglottidean -epiglottiditis -epiglottis -epiglottitis -epignathous -epigonal -epigonation -epigone -Epigoni -epigonic -Epigonichthyidae -Epigonichthys -epigonium -epigonos -epigonous -Epigonus -epigram -epigrammatic -epigrammatical -epigrammatically -epigrammatism -epigrammatist -epigrammatize -epigrammatizer -epigraph -epigrapher -epigraphic -epigraphical -epigraphically -epigraphist -epigraphy -epiguanine -epigyne -epigynous -epigynum -epigyny -Epihippus -epihyal -epihydric -epihydrinic -epikeia -epiklesis -Epikouros -epilabrum -Epilachna -Epilachnides -epilamellar -epilaryngeal -epilate -epilation -epilatory -epilegomenon -epilemma -epilemmal -epilepsy -epileptic -epileptically -epileptiform -epileptogenic -epileptogenous -epileptoid -epileptologist -epileptology -epilimnion -epilobe -Epilobiaceae -Epilobium -epilogation -epilogic -epilogical -epilogist -epilogistic -epilogize -epilogue -Epimachinae -epimacus -epimandibular -epimanikia -Epimedium -Epimenidean -epimer -epimeral -epimere -epimeric -epimeride -epimerite -epimeritic -epimeron -epimerum -epimorphic -epimorphosis -epimysium -epimyth -epinaos -epinastic -epinastically -epinasty -epineolithic -Epinephelidae -Epinephelus -epinephrine -epinette -epineural -epineurial -epineurium -epinglette -epinicial -epinician -epinicion -epinine -epiopticon -epiotic -Epipactis -epipaleolithic -epiparasite -epiparodos -epipastic -epiperipheral -epipetalous -epiphanous -Epiphany -epipharyngeal -epipharynx -Epiphegus -epiphenomenal -epiphenomenalism -epiphenomenalist -epiphenomenon -epiphloedal -epiphloedic -epiphloeum -epiphonema -epiphora -epiphragm -epiphylline -epiphyllous -Epiphyllum -epiphysary -epiphyseal -epiphyseolysis -epiphysial -epiphysis -epiphysitis -epiphytal -epiphyte -epiphytic -epiphytical -epiphytically -epiphytism -epiphytology -epiphytotic -epiphytous -epipial -epiplankton -epiplanktonic -epiplasm -epiplasmic -epiplastral -epiplastron -epiplectic -epipleura -epipleural -epiplexis -epiploce -epiplocele -epiploic -epiploitis -epiploon -epiplopexy -epipodial -epipodiale -epipodite -epipoditic -epipodium -epipolic -epipolism -epipolize -epiprecoracoid -Epipsychidion -epipteric -epipterous -epipterygoid -epipubic -epipubis -epirhizous -epirogenic -epirogeny -Epirote -Epirotic -epirotulian -epirrhema -epirrhematic -epirrheme -episarcine -episcenium -episclera -episcleral -episcleritis -episcopable -episcopacy -Episcopal -episcopal -episcopalian -Episcopalianism -Episcopalianize -episcopalism -episcopality -Episcopally -episcopally -episcopate -episcopature -episcope -episcopicide -episcopization -episcopize -episcopolatry -episcotister -episematic -episepalous -episiocele -episiohematoma -episioplasty -episiorrhagia -episiorrhaphy -episiostenosis -episiotomy -episkeletal -episkotister -episodal -episode -episodial -episodic -episodical -episodically -epispadiac -epispadias -epispastic -episperm -epispermic -epispinal -episplenitis -episporangium -epispore -episporium -epistapedial -epistasis -epistatic -epistaxis -epistemic -epistemolog -epistemological -epistemologically -epistemologist -epistemology -epistemonic -epistemonical -epistemophilia -epistemophiliac -epistemophilic -episternal -episternalia -episternite -episternum -epistilbite -epistlar -epistle -epistler -epistolarian -epistolarily -epistolary -epistolatory -epistoler -epistolet -epistolic -epistolical -epistolist -epistolizable -epistolization -epistolize -epistolizer -epistolographer -epistolographic -epistolographist -epistolography -epistoma -epistomal -epistome -epistomian -epistroma -epistrophe -epistropheal -epistropheus -epistrophic -epistrophy -epistylar -epistyle -Epistylis -episyllogism -episynaloephe -episynthetic -episyntheton -epitactic -epitaph -epitapher -epitaphial -epitaphian -epitaphic -epitaphical -epitaphist -epitaphize -epitaphless -epitasis -epitela -epitendineum -epitenon -epithalamia -epithalamial -epithalamiast -epithalamic -epithalamion -epithalamium -epithalamize -epithalamus -epithalamy -epithalline -epitheca -epithecal -epithecate -epithecium -epithelia -epithelial -epithelioblastoma -epithelioceptor -epitheliogenetic -epithelioglandular -epithelioid -epitheliolysin -epitheliolysis -epitheliolytic -epithelioma -epitheliomatous -epitheliomuscular -epitheliosis -epitheliotoxin -epithelium -epithelization -epithelize -epitheloid -epithem -epithesis -epithet -epithetic -epithetical -epithetically -epithetician -epithetize -epitheton -epithumetic -epithyme -epithymetic -epithymetical -epitimesis -epitoke -epitomator -epitomatory -epitome -epitomic -epitomical -epitomically -epitomist -epitomization -epitomize -epitomizer -epitonic -Epitoniidae -epitonion -Epitonium -epitoxoid -epitrachelion -epitrichial -epitrichium -epitrite -epitritic -epitrochlea -epitrochlear -epitrochoid -epitrochoidal -epitrope -epitrophic -epitrophy -epituberculosis -epituberculous -epitympanic -epitympanum -epityphlitis -epityphlon -epiural -epivalve -epixylous -epizeuxis -Epizoa -epizoa -epizoal -epizoan -epizoarian -epizoic -epizoicide -epizoon -epizootic -epizootiology -epoch -epocha -epochal -epochally -epochism -epochist -epode -epodic -epollicate -Epomophorus -eponychium -eponym -eponymic -eponymism -eponymist -eponymize -eponymous -eponymus -eponymy -epoophoron -epopee -epopoean -epopoeia -epopoeist -epopt -epoptes -epoptic -epoptist -epornitic -epornitically -epos -Eppie -Eppy -Eproboscidea -epruinose -epsilon -Epsom -epsomite -Eptatretidae -Eptatretus -epulary -epulation -epulis -epulo -epuloid -epulosis -epulotic -epupillate -epural -epurate -epuration -epyllion -equability -equable -equableness -equably -equaeval -equal -equalable -equaling -equalist -equalitarian -equalitarianism -equality -equalization -equalize -equalizer -equalizing -equalling -equally -equalness -equangular -equanimity -equanimous -equanimously -equanimousness -equant -equatable -equate -equation -equational -equationally -equationism -equationist -equator -equatorial -equatorially -equatorward -equatorwards -equerry -equerryship -equestrial -equestrian -equestrianism -equestrianize -equestrianship -equestrienne -equianchorate -equiangle -equiangular -equiangularity -equianharmonic -equiarticulate -equiatomic -equiaxed -equiaxial -equibalance -equibiradiate -equicellular -equichangeable -equicohesive -equiconvex -equicostate -equicrural -equicurve -equid -equidense -equidensity -equidiagonal -equidifferent -equidimensional -equidistance -equidistant -equidistantial -equidistantly -equidistribution -equidiurnal -equidivision -equidominant -equidurable -equielliptical -equiexcellency -equiform -equiformal -equiformity -equiglacial -equigranular -equijacent -equilateral -equilaterally -equilibrant -equilibrate -equilibration -equilibrative -equilibrator -equilibratory -equilibria -equilibrial -equilibriate -equilibrio -equilibrious -equilibrist -equilibristat -equilibristic -equilibrity -equilibrium -equilibrize -equilobate -equilobed -equilocation -equilucent -equimodal -equimolar -equimolecular -equimomental -equimultiple -equinate -equine -equinecessary -equinely -equinia -equinity -equinoctial -equinoctially -equinovarus -equinox -equinumerally -equinus -equiomnipotent -equip -equipaga -equipage -equiparant -equiparate -equiparation -equipartile -equipartisan -equipartition -equiped -equipedal -equiperiodic -equipluve -equipment -equipoise -equipollence -equipollency -equipollent -equipollently -equipollentness -equiponderance -equiponderancy -equiponderant -equiponderate -equiponderation -equipostile -equipotent -equipotential -equipotentiality -equipper -equiprobabilism -equiprobabilist -equiprobability -equiproducing -equiproportional -equiproportionality -equiradial -equiradiate -equiradical -equirotal -equisegmented -Equisetaceae -equisetaceous -Equisetales -equisetic -Equisetum -equisided -equisignal -equisized -equison -equisonance -equisonant -equispaced -equispatial -equisufficiency -equisurface -equitable -equitableness -equitably -equitangential -equitant -equitation -equitative -equitemporal -equitemporaneous -equites -equitist -equitriangular -equity -equivalence -equivalenced -equivalency -equivalent -equivalently -equivaliant -equivalue -equivaluer -equivalve -equivalved -equivalvular -equivelocity -equivocacy -equivocal -equivocality -equivocally -equivocalness -equivocate -equivocatingly -equivocation -equivocator -equivocatory -equivoluminal -equivoque -equivorous -equivote -equoid -equoidean -equuleus -Equus -er -era -erade -eradiate -eradiation -eradicable -eradicant -eradicate -eradication -eradicative -eradicator -eradicatory -eradiculose -Eragrostis -eral -eranist -Eranthemum -Eranthis -erasable -erase -erased -erasement -eraser -erasion -Erasmian -Erasmus -Erastian -Erastianism -Erastianize -Erastus -erasure -Erava -erbia -erbium -erd -erdvark -ere -Erechtheum -Erechtheus -Erechtites -erect -erectable -erecter -erectile -erectility -erecting -erection -erective -erectly -erectness -erectopatent -erector -erelong -eremacausis -Eremian -eremic -eremital -eremite -eremiteship -eremitic -eremitical -eremitish -eremitism -Eremochaeta -eremochaetous -eremology -eremophyte -Eremopteris -Eremurus -erenach -erenow -erepsin -erept -ereptase -ereptic -ereption -erethic -erethisia -erethism -erethismic -erethistic -erethitic -Erethizon -Erethizontidae -Eretrian -erewhile -erewhiles -erg -ergal -ergamine -Ergane -ergasia -ergasterion -ergastic -ergastoplasm -ergastoplasmic -ergastulum -ergatandromorph -ergatandromorphic -ergatandrous -ergatandry -ergates -ergatocracy -ergatocrat -ergatogyne -ergatogynous -ergatogyny -ergatoid -ergatomorph -ergatomorphic -ergatomorphism -ergmeter -ergodic -ergogram -ergograph -ergographic -ergoism -ergology -ergomaniac -ergometer -ergometric -ergometrine -ergon -ergonovine -ergophile -ergophobia -ergophobiac -ergoplasm -ergostat -ergosterin -ergosterol -ergot -ergotamine -ergotaminine -ergoted -ergothioneine -ergotic -ergotin -ergotinine -ergotism -ergotist -ergotization -ergotize -ergotoxin -ergotoxine -ergusia -eria -Erian -Erianthus -Eric -eric -Erica -Ericaceae -ericaceous -ericad -erical -Ericales -ericetal -ericeticolous -ericetum -erichthus -erichtoid -ericineous -ericius -Erick -ericoid -ericolin -ericophyte -Eridanid -Erie -Erigenia -Erigeron -erigible -Eriglossa -eriglossate -Erik -erika -erikite -Erinaceidae -erinaceous -Erinaceus -erineum -erinite -Erinize -erinose -Eriobotrya -Eriocaulaceae -eriocaulaceous -Eriocaulon -Eriocomi -Eriodendron -Eriodictyon -erioglaucine -Eriogonum -eriometer -erionite -Eriophorum -Eriophyes -Eriophyidae -eriophyllous -Eriosoma -Eriphyle -Eristalis -eristic -eristical -eristically -Erithacus -Eritrean -erizo -erlking -Erma -Ermanaric -Ermani -Ermanrich -ermelin -ermine -ermined -erminee -ermines -erminites -erminois -erne -Ernest -Ernestine -Ernie -Ernst -erode -eroded -erodent -erodible -Erodium -erogeneity -erogenesis -erogenetic -erogenic -erogenous -erogeny -Eros -eros -erose -erosely -erosible -erosion -erosional -erosionist -erosive -erostrate -eroteme -erotesis -erotetic -erotic -erotica -erotical -erotically -eroticism -eroticize -eroticomania -erotism -erotogenesis -erotogenetic -erotogenic -erotogenicity -erotomania -erotomaniac -erotopath -erotopathic -erotopathy -Erotylidae -Erpetoichthys -erpetologist -err -errability -errable -errableness -errabund -errancy -errand -errant -Errantia -errantly -errantness -errantry -errata -erratic -erratical -erratically -erraticalness -erraticism -erraticness -erratum -errhine -erring -erringly -errite -erroneous -erroneously -erroneousness -error -errorful -errorist -errorless -ers -Ersar -ersatz -Erse -Ertebolle -erth -erthen -erthling -erthly -erubescence -erubescent -erubescite -eruc -Eruca -eruca -erucic -eruciform -erucin -erucivorous -eruct -eructance -eructation -eructative -eruction -erudit -erudite -eruditely -eruditeness -eruditical -erudition -eruditional -eruditionist -erugate -erugation -erugatory -erumpent -erupt -eruption -eruptional -eruptive -eruptively -eruptiveness -eruptivity -ervenholder -Ervipiame -Ervum -Erwin -Erwinia -eryhtrism -Erymanthian -Eryngium -eryngo -Eryon -Eryops -Erysibe -Erysimum -erysipelas -erysipelatoid -erysipelatous -erysipeloid -Erysipelothrix -erysipelous -Erysiphaceae -Erysiphe -Erythea -erythema -erythematic -erythematous -erythemic -Erythraea -Erythraean -Erythraeidae -erythrasma -erythrean -erythremia -erythremomelalgia -erythrene -erythrin -Erythrina -erythrine -Erythrinidae -Erythrinus -erythrismal -erythristic -erythrite -erythritic -erythritol -erythroblast -erythroblastic -erythroblastosis -erythrocarpous -erythrocatalysis -Erythrochaete -erythrochroic -erythrochroism -erythroclasis -erythroclastic -erythrocyte -erythrocytic -erythrocytoblast -erythrocytolysin -erythrocytolysis -erythrocytolytic -erythrocytometer -erythrocytorrhexis -erythrocytoschisis -erythrocytosis -erythrodegenerative -erythrodermia -erythrodextrin -erythrogenesis -erythrogenic -erythroglucin -erythrogonium -erythroid -erythrol -erythrolein -erythrolitmin -erythrolysin -erythrolysis -erythrolytic -erythromelalgia -erythron -erythroneocytosis -Erythronium -erythronium -erythropenia -erythrophage -erythrophagous -erythrophilous -erythrophleine -erythrophobia -erythrophore -erythrophyll -erythrophyllin -erythropia -erythroplastid -erythropoiesis -erythropoietic -erythropsia -erythropsin -erythrorrhexis -erythroscope -erythrose -erythrosiderite -erythrosin -erythrosinophile -erythrosis -Erythroxylaceae -erythroxylaceous -erythroxyline -Erythroxylon -Erythroxylum -erythrozincite -erythrozyme -erythrulose -Eryx -es -esca -escadrille -escalade -escalader -escalado -escalan -escalate -Escalator -escalator -escalin -Escallonia -Escalloniaceae -escalloniaceous -escalop -escaloped -escambio -escambron -escapable -escapade -escapage -escape -escapee -escapeful -escapeless -escapement -escaper -escapingly -escapism -escapist -escarbuncle -escargatoire -escarole -escarp -escarpment -eschalot -eschar -eschara -escharine -escharoid -escharotic -eschatocol -eschatological -eschatologist -eschatology -escheat -escheatable -escheatage -escheatment -escheator -escheatorship -Escherichia -eschew -eschewal -eschewance -eschewer -Eschscholtzia -eschynite -esclavage -escoba -escobadura -escobilla -escobita -escolar -esconson -escopette -Escorial -escort -escortage -escortee -escortment -escribe -escritoire -escritorial -escrol -escropulo -escrow -escruage -escudo -Esculapian -esculent -esculetin -esculin -escutcheon -escutcheoned -escutellate -esdragol -Esdras -Esebrias -esemplastic -esemplasy -eseptate -esere -eserine -esexual -eshin -esiphonal -esker -Eskimauan -Eskimo -Eskimoic -Eskimoid -Eskimoized -Eskualdun -Eskuara -Esmeralda -Esmeraldan -esmeraldite -esne -esoanhydride -esocataphoria -Esocidae -esociform -esocyclic -esodic -esoenteritis -esoethmoiditis -esogastritis -esonarthex -esoneural -esophagal -esophagalgia -esophageal -esophagean -esophagectasia -esophagectomy -esophagi -esophagism -esophagismus -esophagitis -esophago -esophagocele -esophagodynia -esophagogastroscopy -esophagogastrostomy -esophagomalacia -esophagometer -esophagomycosis -esophagopathy -esophagoplasty -esophagoplegia -esophagoplication -esophagoptosis -esophagorrhagia -esophagoscope -esophagoscopy -esophagospasm -esophagostenosis -esophagostomy -esophagotome -esophagotomy -esophagus -esophoria -esophoric -Esopus -esoteric -esoterica -esoterical -esoterically -esotericism -esotericist -esoterics -esoterism -esoterist -esoterize -esotery -esothyropexy -esotrope -esotropia -esotropic -Esox -espacement -espadon -espalier -espantoon -esparcet -esparsette -esparto -espathate -espave -especial -especially -especialness -esperance -Esperantic -Esperantidist -Esperantido -Esperantism -Esperantist -Esperanto -espial -espichellite -espier -espinal -espingole -espinillo -espino -espionage -esplanade -esplees -esponton -espousal -espouse -espousement -espouser -Espriella -espringal -espundia -espy -esquamate -esquamulose -Esquiline -esquire -esquirearchy -esquiredom -esquireship -ess -essang -essay -essayer -essayette -essayical -essayish -essayism -essayist -essayistic -essayistical -essaylet -essed -Essedones -Esselen -Esselenian -essence -essency -Essene -Essenian -Essenianism -Essenic -Essenical -Essenis -Essenism -Essenize -essentia -essential -essentialism -essentialist -essentiality -essentialize -essentially -essentialness -essenwood -Essex -essexite -Essie -essling -essoin -essoinee -essoiner -essoinment -essonite -essorant -establish -establishable -established -establisher -establishment -establishmentarian -establishmentarianism -establishmentism -estacade -estadal -estadio -estado -estafette -estafetted -estamene -estamp -estampage -estampede -estampedero -estate -estatesman -esteem -esteemable -esteemer -Estella -ester -esterase -esterellite -esteriferous -esterification -esterify -esterization -esterize -esterlin -esterling -estevin -Esth -Esthacyte -esthematology -Esther -Estheria -estherian -Estheriidae -esthesia -esthesio -esthesioblast -esthesiogen -esthesiogenic -esthesiogeny -esthesiography -esthesiology -esthesiometer -esthesiometric -esthesiometry -esthesioneurosis -esthesiophysiology -esthesis -esthetology -esthetophore -esthiomene -estimable -estimableness -estimably -estimate -estimatingly -estimation -estimative -estimator -estipulate -estivage -estival -estivate -estivation -estivator -estmark -estoc -estoile -Estonian -estop -estoppage -estoppel -Estotiland -estovers -estrade -estradiol -estradiot -estragole -estrange -estrangedness -estrangement -estranger -estrapade -estray -estre -estreat -estrepe -estrepement -estriate -estriche -estrin -estriol -estrogen -estrogenic -estrone -estrous -estrual -estruate -estruation -estuarial -estuarine -estuary -estufa -estuous -estus -esugarization -esurience -esurient -esuriently -eta -etaballi -etacism -etacist -etalon -Etamin -etamine -etch -Etchareottine -etcher -Etchimin -etching -Eteoclus -Eteocretes -Eteocreton -eternal -eternalism -eternalist -eternalization -eternalize -eternally -eternalness -eternity -eternization -eternize -etesian -ethal -ethaldehyde -Ethan -ethanal -ethanamide -ethane -ethanedial -ethanediol -ethanedithiol -ethanethial -ethanethiol -Ethanim -ethanol -ethanolamine -ethanolysis -ethanoyl -Ethel -ethel -ethene -Etheneldeli -ethenic -ethenoid -ethenoidal -ethenol -ethenyl -Etheostoma -Etheostomidae -Etheostominae -etheostomoid -ether -etherate -ethereal -etherealism -ethereality -etherealization -etherealize -ethereally -etherealness -etherean -ethered -ethereous -Etheria -etheric -etherification -etheriform -etherify -Etheriidae -etherin -etherion -etherism -etherization -etherize -etherizer -etherolate -etherous -ethic -ethical -ethicalism -ethicality -ethically -ethicalness -ethician -ethicism -ethicist -ethicize -ethicoaesthetic -ethicophysical -ethicopolitical -ethicoreligious -ethicosocial -ethics -ethid -ethide -ethidene -ethine -ethiodide -ethionic -Ethiop -Ethiopia -Ethiopian -Ethiopic -ethiops -ethmofrontal -ethmoid -ethmoidal -ethmoiditis -ethmolachrymal -ethmolith -ethmomaxillary -ethmonasal -ethmopalatal -ethmopalatine -ethmophysal -ethmopresphenoidal -ethmosphenoid -ethmosphenoidal -ethmoturbinal -ethmoturbinate -ethmovomer -ethmovomerine -ethmyphitis -ethnal -ethnarch -ethnarchy -ethnic -ethnical -ethnically -ethnicism -ethnicist -ethnicize -ethnicon -ethnize -ethnobiological -ethnobiology -ethnobotanic -ethnobotanical -ethnobotanist -ethnobotany -ethnocentric -ethnocentrism -ethnocracy -ethnodicy -ethnoflora -ethnogenic -ethnogeny -ethnogeographer -ethnogeographic -ethnogeographical -ethnogeographically -ethnogeography -ethnographer -ethnographic -ethnographical -ethnographically -ethnographist -ethnography -ethnologer -ethnologic -ethnological -ethnologically -ethnologist -ethnology -ethnomaniac -ethnopsychic -ethnopsychological -ethnopsychology -ethnos -ethnotechnics -ethnotechnography -ethnozoological -ethnozoology -ethography -etholide -ethologic -ethological -ethology -ethonomic -ethonomics -ethopoeia -ethos -ethoxide -ethoxycaffeine -ethoxyl -ethrog -ethyl -ethylamide -ethylamine -ethylate -ethylation -ethylene -ethylenediamine -ethylenic -ethylenimine -ethylenoid -ethylhydrocupreine -ethylic -ethylidene -ethylidyne -ethylin -ethylmorphine -ethylsulphuric -ethyne -ethynyl -etiogenic -etiolate -etiolation -etiolin -etiolize -etiological -etiologically -etiologist -etiologue -etiology -etiophyllin -etioporphyrin -etiotropic -etiotropically -etiquette -etiquettical -etna -Etnean -Etonian -Etrurian -Etruscan -Etruscologist -Etruscology -Etta -Ettarre -ettle -etua -etude -etui -etym -etymic -etymography -etymologer -etymologic -etymological -etymologically -etymologicon -etymologist -etymologization -etymologize -etymology -etymon -etymonic -etypic -etypical -etypically -eu -Euahlayi -euangiotic -Euascomycetes -euaster -Eubacteriales -eubacterium -Eubasidii -Euboean -Euboic -Eubranchipus -eucaine -eucairite -eucalypt -eucalypteol -eucalyptian -eucalyptic -eucalyptography -eucalyptol -eucalyptole -Eucalyptus -eucalyptus -Eucarida -eucatropine -eucephalous -Eucharis -Eucharist -eucharistial -eucharistic -eucharistical -Eucharistically -eucharistically -eucharistize -Eucharitidae -Euchite -Euchlaena -euchlorhydria -euchloric -euchlorine -Euchlorophyceae -euchological -euchologion -euchology -Euchorda -euchre -euchred -euchroic -euchroite -euchromatic -euchromatin -euchrome -euchromosome -euchrone -Eucirripedia -euclase -Euclea -Eucleidae -Euclid -Euclidean -Euclideanism -Eucnemidae -eucolite -Eucommia -Eucommiaceae -eucone -euconic -Euconjugatae -Eucopepoda -Eucosia -eucosmid -Eucosmidae -eucrasia -eucrasite -eucrasy -eucrite -Eucryphia -Eucryphiaceae -eucryphiaceous -eucryptite -eucrystalline -euctical -eucyclic -eudaemon -eudaemonia -eudaemonic -eudaemonical -eudaemonics -eudaemonism -eudaemonist -eudaemonistic -eudaemonistical -eudaemonistically -eudaemonize -eudaemony -eudaimonia -eudaimonism -eudaimonist -Eudemian -Eudendrium -Eudeve -eudiagnostic -eudialyte -eudiaphoresis -eudidymite -eudiometer -eudiometric -eudiometrical -eudiometrically -eudiometry -eudipleural -Eudist -Eudora -Eudorina -Eudoxian -Eudromias -Eudyptes -Euergetes -euge -Eugene -eugenesic -eugenesis -eugenetic -Eugenia -eugenic -eugenical -eugenically -eugenicist -eugenics -Eugenie -eugenism -eugenist -eugenol -eugenolate -eugeny -Euglandina -Euglena -Euglenaceae -Euglenales -Euglenida -Euglenidae -Euglenineae -euglenoid -Euglenoidina -euglobulin -eugranitic -Eugregarinida -Eugubine -Eugubium -euharmonic -euhedral -euhemerism -euhemerist -euhemeristic -euhemeristically -euhemerize -euhyostylic -euhyostyly -euktolite -eulachon -Eulalia -eulalia -eulamellibranch -Eulamellibranchia -Eulamellibranchiata -Eulima -Eulimidae -eulogia -eulogic -eulogical -eulogically -eulogious -eulogism -eulogist -eulogistic -eulogistical -eulogistically -eulogium -eulogization -eulogize -eulogizer -eulogy -eulysite -eulytine -eulytite -Eumenes -eumenid -Eumenidae -Eumenidean -Eumenides -eumenorrhea -eumerism -eumeristic -eumerogenesis -eumerogenetic -eumeromorph -eumeromorphic -eumitosis -eumitotic -eumoiriety -eumoirous -Eumolpides -Eumolpus -eumorphous -eumycete -Eumycetes -eumycetic -Eunectes -Eunice -eunicid -Eunicidae -Eunomia -Eunomian -Eunomianism -eunomy -eunuch -eunuchal -eunuchism -eunuchize -eunuchoid -eunuchoidism -eunuchry -euomphalid -Euomphalus -euonym -euonymin -euonymous -Euonymus -euonymy -Euornithes -euornithic -Euorthoptera -euosmite -euouae -eupad -Eupanorthidae -Eupanorthus -eupathy -eupatoriaceous -eupatorin -Eupatorium -eupatory -eupatrid -eupatridae -eupepsia -eupepsy -eupeptic -eupepticism -eupepticity -Euphausia -Euphausiacea -euphausiid -Euphausiidae -Euphemia -euphemian -euphemious -euphemiously -euphemism -euphemist -euphemistic -euphemistical -euphemistically -euphemize -euphemizer -euphemous -euphemy -euphon -euphone -euphonetic -euphonetics -euphonia -euphonic -euphonical -euphonically -euphonicalness -euphonious -euphoniously -euphoniousness -euphonism -euphonium -euphonize -euphonon -euphonous -euphony -euphonym -Euphorbia -Euphorbiaceae -euphorbiaceous -euphorbium -euphoria -euphoric -euphory -Euphrasia -euphrasy -Euphratean -euphroe -Euphrosyne -Euphues -euphuism -euphuist -euphuistic -euphuistical -euphuistically -euphuize -Euphyllopoda -eupione -eupittonic -euplastic -Euplectella -Euplexoptera -Euplocomi -Euploeinae -euploid -euploidy -eupnea -Eupolidean -Eupolyzoa -eupolyzoan -Eupomatia -Eupomatiaceae -eupractic -eupraxia -Euprepia -Euproctis -eupsychics -Euptelea -Eupterotidae -eupyrchroite -eupyrene -eupyrion -Eurafric -Eurafrican -Euraquilo -Eurasian -Eurasianism -Eurasiatic -eureka -eurhodine -eurhodol -Eurindic -Euripidean -euripus -eurite -Euroaquilo -eurobin -Euroclydon -Europa -Europasian -European -Europeanism -Europeanization -Europeanize -Europeanly -Europeward -europium -Europocentric -Eurus -Euryalae -Euryale -Euryaleae -euryalean -Euryalida -euryalidan -Euryalus -eurybathic -eurybenthic -eurycephalic -eurycephalous -Eurycerotidae -Euryclea -Eurydice -Eurygaea -Eurygaean -eurygnathic -eurygnathism -eurygnathous -euryhaline -Eurylaimi -Eurylaimidae -eurylaimoid -Eurylaimus -Eurymus -euryon -Eurypelma -Eurypharyngidae -Eurypharynx -euryprognathous -euryprosopic -eurypterid -Eurypterida -eurypteroid -Eurypteroidea -Eurypterus -Eurypyga -Eurypygae -Eurypygidae -eurypylous -euryscope -Eurystheus -eurystomatous -eurythermal -eurythermic -eurythmic -eurythmical -eurythmics -eurythmy -eurytomid -Eurytomidae -Eurytus -euryzygous -Euscaro -Eusebian -Euselachii -Euskaldun -Euskara -Euskarian -Euskaric -Euskera -eusol -Euspongia -eusporangiate -Eustace -Eustachian -eustachium -Eustathian -eustatic -Eusthenopteron -eustomatous -eustyle -Eusuchia -eusuchian -eusynchite -Eutaenia -eutannin -eutaxic -eutaxite -eutaxitic -eutaxy -eutechnic -eutechnics -eutectic -eutectoid -Euterpe -Euterpean -eutexia -Euthamia -euthanasia -euthanasy -euthenics -euthenist -Eutheria -eutherian -euthermic -Euthycomi -euthycomic -Euthyneura -euthyneural -euthyneurous -euthytatic -euthytropic -eutomous -eutony -Eutopia -Eutopian -eutrophic -eutrophy -eutropic -eutropous -Eutychian -Eutychianism -euxanthate -euxanthic -euxanthone -euxenite -Euxine -Eva -evacuant -evacuate -evacuation -evacuative -evacuator -evacue -evacuee -evadable -evade -evader -evadingly -Evadne -evagation -evaginable -evaginate -evagination -evaluable -evaluate -evaluation -evaluative -evalue -Evan -evanesce -evanescence -evanescency -evanescent -evanescently -evanescible -evangel -evangelary -evangelian -evangeliarium -evangeliary -evangelical -evangelicalism -evangelicality -evangelically -evangelicalness -evangelican -evangelicism -evangelicity -Evangeline -evangelion -evangelism -evangelist -evangelistarion -evangelistarium -evangelistary -evangelistic -evangelistically -evangelistics -evangelistship -evangelium -evangelization -evangelize -evangelizer -Evaniidae -evanish -evanishment -evanition -evansite -evaporability -evaporable -evaporate -evaporation -evaporative -evaporativity -evaporator -evaporimeter -evaporize -evaporometer -evase -evasible -evasion -evasional -evasive -evasively -evasiveness -Eve -eve -Evea -evechurr -evection -evectional -Evehood -evejar -Eveless -evelight -Evelina -Eveline -evelong -Evelyn -even -evenblush -evendown -evener -evenfall -evenforth -evenglow -evenhanded -evenhandedly -evenhandedness -evening -evenlight -evenlong -evenly -evenmete -evenminded -evenmindedness -evenness -evens -evensong -event -eventful -eventfully -eventfulness -eventide -eventime -eventless -eventlessly -eventlessness -eventognath -Eventognathi -eventognathous -eventration -eventual -eventuality -eventualize -eventually -eventuate -eventuation -evenwise -evenworthy -eveque -ever -Everard -everbearer -everbearing -everbloomer -everblooming -everduring -Everett -everglade -evergreen -evergreenery -evergreenite -everlasting -everlastingly -everlastingness -everliving -evermore -Evernia -evernioid -eversible -eversion -eversive -eversporting -evert -evertebral -Evertebrata -evertebrate -evertile -evertor -everwhich -everwho -every -everybody -everyday -everydayness -everyhow -everylike -Everyman -everyman -everyness -everyone -everything -everywhen -everywhence -everywhere -everywhereness -everywheres -everywhither -evestar -evetide -eveweed -evict -eviction -evictor -evidence -evidencive -evident -evidential -evidentially -evidentiary -evidently -evidentness -evil -evildoer -evilhearted -evilly -evilmouthed -evilness -evilproof -evilsayer -evilspeaker -evilspeaking -evilwishing -evince -evincement -evincible -evincibly -evincingly -evincive -evirate -eviration -eviscerate -evisceration -evisite -evitable -evitate -evitation -evittate -evocable -evocate -evocation -evocative -evocatively -evocator -evocatory -evocatrix -Evodia -evoe -evoke -evoker -evolute -evolution -evolutional -evolutionally -evolutionary -evolutionism -evolutionist -evolutionize -evolutive -evolutoid -evolvable -evolve -evolvement -evolvent -evolver -Evonymus -evovae -evulgate -evulgation -evulse -evulsion -evzone -ewder -Ewe -ewe -ewelease -ewer -ewerer -ewery -ewry -ex -exacerbate -exacerbation -exacerbescence -exacerbescent -exact -exactable -exacter -exacting -exactingly -exactingness -exaction -exactitude -exactive -exactiveness -exactly -exactment -exactness -exactor -exactress -exadversum -exaggerate -exaggerated -exaggeratedly -exaggerating -exaggeratingly -exaggeration -exaggerative -exaggeratively -exaggerativeness -exaggerator -exaggeratory -exagitate -exagitation -exairesis -exalate -exalbuminose -exalbuminous -exallotriote -exalt -exaltation -exaltative -exalted -exaltedly -exaltedness -exalter -exam -examen -examinability -examinable -examinant -examinate -examination -examinational -examinationism -examinationist -examinative -examinator -examinatorial -examinatory -examine -examinee -examiner -examinership -examining -examiningly -example -exampleless -exampleship -exanimate -exanimation -exanthem -exanthema -exanthematic -exanthematous -exappendiculate -exarate -exaration -exarch -exarchal -exarchate -exarchateship -Exarchic -Exarchist -exarchist -exarchy -exareolate -exarillate -exaristate -exarteritis -exarticulate -exarticulation -exasperate -exasperated -exasperatedly -exasperater -exasperating -exasperatingly -exasperation -exasperative -exaspidean -Exaudi -exaugurate -exauguration -excalate -excalation -excalcarate -excalceate -excalceation -Excalibur -excamb -excamber -excambion -excandescence -excandescency -excandescent -excantation -excarnate -excarnation -excathedral -excaudate -excavate -excavation -excavationist -excavator -excavatorial -excavatory -excave -excecate -excecation -excedent -exceed -exceeder -exceeding -exceedingly -exceedingness -excel -excelente -excellence -excellency -excellent -excellently -excelsin -Excelsior -excelsior -excelsitude -excentral -excentric -excentrical -excentricity -except -exceptant -excepting -exception -exceptionable -exceptionableness -exceptionably -exceptional -exceptionality -exceptionally -exceptionalness -exceptionary -exceptionless -exceptious -exceptiousness -exceptive -exceptively -exceptiveness -exceptor -excerebration -excerpt -excerptible -excerption -excerptive -excerptor -excess -excessive -excessively -excessiveness -excessman -exchange -exchangeability -exchangeable -exchangeably -exchanger -Exchangite -Exchequer -exchequer -excide -excipient -exciple -Excipulaceae -excipular -excipule -excipuliform -excipulum -excircle -excisable -excise -exciseman -excisemanship -excision -excisor -excitability -excitable -excitableness -excitancy -excitant -excitation -excitative -excitator -excitatory -excite -excited -excitedly -excitedness -excitement -exciter -exciting -excitingly -excitive -excitoglandular -excitometabolic -excitomotion -excitomotor -excitomotory -excitomuscular -excitonutrient -excitor -excitory -excitosecretory -excitovascular -exclaim -exclaimer -exclaiming -exclaimingly -exclamation -exclamational -exclamative -exclamatively -exclamatorily -exclamatory -exclave -exclosure -excludable -exclude -excluder -excluding -excludingly -exclusion -exclusionary -exclusioner -exclusionism -exclusionist -exclusive -exclusively -exclusiveness -exclusivism -exclusivist -exclusivity -exclusory -Excoecaria -excogitable -excogitate -excogitation -excogitative -excogitator -excommunicable -excommunicant -excommunicate -excommunication -excommunicative -excommunicator -excommunicatory -exconjugant -excoriable -excoriate -excoriation -excoriator -excorticate -excortication -excrement -excremental -excrementary -excrementitial -excrementitious -excrementitiously -excrementitiousness -excrementive -excresce -excrescence -excrescency -excrescent -excrescential -excreta -excretal -excrete -excreter -excretes -excretion -excretionary -excretitious -excretive -excretory -excriminate -excruciable -excruciate -excruciating -excruciatingly -excruciation -excruciator -excubant -excudate -exculpable -exculpate -exculpation -exculpative -exculpatorily -exculpatory -excurrent -excurse -excursion -excursional -excursionary -excursioner -excursionism -excursionist -excursionize -excursive -excursively -excursiveness -excursory -excursus -excurvate -excurvated -excurvation -excurvature -excurved -excusability -excusable -excusableness -excusably -excusal -excusative -excusator -excusatory -excuse -excuseful -excusefully -excuseless -excuser -excusing -excusingly -excusive -excuss -excyst -excystation -excysted -excystment -exdelicto -exdie -exeat -execrable -execrableness -execrably -execrate -execration -execrative -execratively -execrator -execratory -executable -executancy -executant -execute -executed -executer -execution -executional -executioneering -executioner -executioneress -executionist -executive -executively -executiveness -executiveship -executor -executorial -executorship -executory -executress -executrices -executrix -executrixship -executry -exedent -exedra -exegeses -exegesis -exegesist -exegete -exegetic -exegetical -exegetically -exegetics -exegetist -exemplar -exemplaric -exemplarily -exemplariness -exemplarism -exemplarity -exemplary -exemplifiable -exemplification -exemplificational -exemplificative -exemplificator -exemplifier -exemplify -exempt -exemptible -exemptile -exemption -exemptionist -exemptive -exencephalia -exencephalic -exencephalous -exencephalus -exendospermic -exendospermous -exenterate -exenteration -exequatur -exequial -exequy -exercisable -exercise -exerciser -exercitant -exercitation -exercitor -exercitorial -exercitorian -exeresis -exergual -exergue -exert -exertion -exertionless -exertive -exes -exeunt -exfiguration -exfigure -exfiltration -exflagellate -exflagellation -exflect -exfodiate -exfodiation -exfoliate -exfoliation -exfoliative -exfoliatory -exgorgitation -exhalable -exhalant -exhalation -exhalatory -exhale -exhaust -exhausted -exhaustedly -exhaustedness -exhauster -exhaustibility -exhaustible -exhausting -exhaustingly -exhaustion -exhaustive -exhaustively -exhaustiveness -exhaustless -exhaustlessly -exhaustlessness -exheredate -exheredation -exhibit -exhibitable -exhibitant -exhibiter -exhibition -exhibitional -exhibitioner -exhibitionism -exhibitionist -exhibitionistic -exhibitionize -exhibitive -exhibitively -exhibitor -exhibitorial -exhibitorship -exhibitory -exhilarant -exhilarate -exhilarating -exhilaratingly -exhilaration -exhilarative -exhilarator -exhilaratory -exhort -exhortation -exhortative -exhortatively -exhortator -exhortatory -exhorter -exhortingly -exhumate -exhumation -exhumator -exhumatory -exhume -exhumer -exigence -exigency -exigent -exigenter -exigently -exigible -exiguity -exiguous -exiguously -exiguousness -exilarch -exilarchate -exile -exiledom -exilement -exiler -exilian -exilic -exility -eximious -eximiously -eximiousness -exinanite -exinanition -exindusiate -exinguinal -exist -existability -existence -existent -existential -existentialism -existentialist -existentialistic -existentialize -existentially -existently -exister -existibility -existible -existlessness -exit -exite -exition -exitus -exlex -exmeridian -Exmoor -exoarteritis -Exoascaceae -exoascaceous -Exoascales -Exoascus -Exobasidiaceae -Exobasidiales -Exobasidium -exocannibalism -exocardia -exocardiac -exocardial -exocarp -exocataphoria -exoccipital -exocentric -Exochorda -exochorion -exoclinal -exocline -exocoelar -exocoele -exocoelic -exocoelom -Exocoetidae -Exocoetus -exocolitis -exocone -exocrine -exoculate -exoculation -exocyclic -Exocyclica -Exocycloida -exode -exoderm -exodermis -exodic -exodist -exodontia -exodontist -exodos -exodromic -exodromy -exodus -exody -exoenzyme -exoenzymic -exoerythrocytic -exogamic -exogamous -exogamy -exogastric -exogastrically -exogastritis -exogen -Exogenae -exogenetic -exogenic -exogenous -exogenously -exogeny -exognathion -exognathite -Exogonium -Exogyra -exolemma -exometritis -exomion -exomis -exomologesis -exomorphic -exomorphism -exomphalos -exomphalous -exomphalus -Exon -exon -exonarthex -exoner -exonerate -exoneration -exonerative -exonerator -exoneural -Exonian -exonship -exopathic -exoperidium -exophagous -exophagy -exophasia -exophasic -exophoria -exophoric -exophthalmic -exophthalmos -exoplasm -exopod -exopodite -exopoditic -Exopterygota -exopterygotic -exopterygotism -exopterygotous -exorability -exorable -exorableness -exorbital -exorbitance -exorbitancy -exorbitant -exorbitantly -exorbitate -exorbitation -exorcisation -exorcise -exorcisement -exorciser -exorcism -exorcismal -exorcisory -exorcist -exorcistic -exorcistical -exordia -exordial -exordium -exordize -exorganic -exorhason -exormia -exornation -exosepsis -exoskeletal -exoskeleton -exosmic -exosmose -exosmosis -exosmotic -exosperm -exosporal -exospore -exosporium -exosporous -Exostema -exostome -exostosed -exostosis -exostotic -exostra -exostracism -exostracize -exoteric -exoterical -exoterically -exotericism -exoterics -exotheca -exothecal -exothecate -exothecium -exothermal -exothermic -exothermous -exotic -exotically -exoticalness -exoticism -exoticist -exoticity -exoticness -exotism -exotospore -exotoxic -exotoxin -exotropia -exotropic -exotropism -expalpate -expand -expanded -expandedly -expandedness -expander -expanding -expandingly -expanse -expansibility -expansible -expansibleness -expansibly -expansile -expansion -expansional -expansionary -expansionism -expansionist -expansive -expansively -expansiveness -expansivity -expansometer -expansure -expatiate -expatiater -expatiatingly -expatiation -expatiative -expatiator -expatiatory -expatriate -expatriation -expect -expectable -expectance -expectancy -expectant -expectantly -expectation -expectative -expectedly -expecter -expectingly -expective -expectorant -expectorate -expectoration -expectorative -expectorator -expede -expediate -expedience -expediency -expedient -expediential -expedientially -expedientist -expediently -expeditate -expeditation -expedite -expedited -expeditely -expediteness -expediter -expedition -expeditionary -expeditionist -expeditious -expeditiously -expeditiousness -expel -expellable -expellant -expellee -expeller -expend -expendability -expendable -expender -expendible -expenditor -expenditrix -expenditure -expense -expenseful -expensefully -expensefulness -expenseless -expensilation -expensive -expensively -expensiveness -expenthesis -expergefacient -expergefaction -experience -experienceable -experienced -experienceless -experiencer -experiencible -experient -experiential -experientialism -experientialist -experientially -experiment -experimental -experimentalism -experimentalist -experimentalize -experimentally -experimentarian -experimentation -experimentative -experimentator -experimented -experimentee -experimenter -experimentist -experimentize -experimently -expert -expertism -expertize -expertly -expertness -expertship -expiable -expiate -expiation -expiational -expiatist -expiative -expiator -expiatoriness -expiatory -expilate -expilation -expilator -expirable -expirant -expirate -expiration -expirator -expiratory -expire -expiree -expirer -expiring -expiringly -expiry -expiscate -expiscation -expiscator -expiscatory -explain -explainable -explainer -explaining -explainingly -explanate -explanation -explanative -explanatively -explanator -explanatorily -explanatoriness -explanatory -explant -explantation -explement -explemental -expletive -expletively -expletiveness -expletory -explicable -explicableness -explicate -explication -explicative -explicatively -explicator -explicatory -explicit -explicitly -explicitness -explodable -explode -exploded -explodent -exploder -exploit -exploitable -exploitage -exploitation -exploitationist -exploitative -exploiter -exploitive -exploiture -explorable -exploration -explorational -explorative -exploratively -explorativeness -explorator -exploratory -explore -explorement -explorer -exploring -exploringly -explosibility -explosible -explosion -explosionist -explosive -explosively -explosiveness -expone -exponence -exponency -exponent -exponential -exponentially -exponentiation -exponible -export -exportability -exportable -exportation -exporter -exposal -expose -exposed -exposedness -exposer -exposit -exposition -expositional -expositionary -expositive -expositively -expositor -expositorial -expositorially -expositorily -expositoriness -expository -expositress -expostulate -expostulating -expostulatingly -expostulation -expostulative -expostulatively -expostulator -expostulatory -exposure -expound -expoundable -expounder -express -expressable -expressage -expressed -expresser -expressibility -expressible -expressibly -expression -expressionable -expressional -expressionful -expressionism -expressionist -expressionistic -expressionless -expressionlessly -expressionlessness -expressive -expressively -expressiveness -expressivism -expressivity -expressless -expressly -expressman -expressness -expressway -exprimable -exprobrate -exprobration -exprobratory -expromission -expromissor -expropriable -expropriate -expropriation -expropriator -expugn -expugnable -expuition -expulsatory -expulse -expulser -expulsion -expulsionist -expulsive -expulsory -expunction -expunge -expungeable -expungement -expunger -expurgate -expurgation -expurgative -expurgator -expurgatorial -expurgatory -expurge -exquisite -exquisitely -exquisiteness -exquisitism -exquisitively -exradio -exradius -exrupeal -exsanguinate -exsanguination -exsanguine -exsanguineous -exsanguinity -exsanguinous -exsanguious -exscind -exscissor -exscriptural -exsculptate -exscutellate -exsect -exsectile -exsection -exsector -exsequatur -exsert -exserted -exsertile -exsertion -exship -exsibilate -exsibilation -exsiccant -exsiccatae -exsiccate -exsiccation -exsiccative -exsiccator -exsiliency -exsomatic -exspuition -exsputory -exstipulate -exstrophy -exsuccous -exsuction -exsufflate -exsufflation -exsufflicate -exsurge -exsurgent -extant -extemporal -extemporally -extemporalness -extemporaneity -extemporaneous -extemporaneously -extemporaneousness -extemporarily -extemporariness -extemporary -extempore -extemporization -extemporize -extemporizer -extend -extended -extendedly -extendedness -extender -extendibility -extendible -extending -extense -extensibility -extensible -extensibleness -extensile -extensimeter -extension -extensional -extensionist -extensity -extensive -extensively -extensiveness -extensometer -extensor -extensory -extensum -extent -extenuate -extenuating -extenuatingly -extenuation -extenuative -extenuator -extenuatory -exter -exterior -exteriorate -exterioration -exteriority -exteriorization -exteriorize -exteriorly -exteriorness -exterminable -exterminate -extermination -exterminative -exterminator -exterminatory -exterminatress -exterminatrix -exterminist -extern -external -externalism -externalist -externalistic -externality -externalization -externalize -externally -externals -externate -externation -externe -externity -externization -externize -externomedian -externum -exteroceptist -exteroceptive -exteroceptor -exterraneous -exterrestrial -exterritorial -exterritoriality -exterritorialize -exterritorially -extima -extinct -extinction -extinctionist -extinctive -extinctor -extine -extinguish -extinguishable -extinguishant -extinguished -extinguisher -extinguishment -extipulate -extirpate -extirpation -extirpationist -extirpative -extirpator -extirpatory -extispex -extispicious -extispicy -extogenous -extol -extoll -extollation -extoller -extollingly -extollment -extolment -extoolitic -extorsive -extorsively -extort -extorter -extortion -extortionary -extortionate -extortionately -extortioner -extortionist -extortive -extra -extrabold -extrabranchial -extrabronchial -extrabuccal -extrabulbar -extrabureau -extraburghal -extracalendar -extracalicular -extracanonical -extracapsular -extracardial -extracarpal -extracathedral -extracellular -extracellularly -extracerebral -extracivic -extracivically -extraclassroom -extraclaustral -extracloacal -extracollegiate -extracolumella -extraconscious -extraconstellated -extraconstitutional -extracorporeal -extracorpuscular -extracosmic -extracosmical -extracostal -extracranial -extract -extractable -extractant -extracted -extractible -extractiform -extraction -extractive -extractor -extractorship -extracultural -extracurial -extracurricular -extracurriculum -extracutaneous -extracystic -extradecretal -extradialectal -extraditable -extradite -extradition -extradomestic -extrados -extradosed -extradotal -extraduction -extradural -extraembryonic -extraenteric -extraepiphyseal -extraequilibrium -extraessential -extraessentially -extrafascicular -extrafloral -extrafocal -extrafoliaceous -extraforaneous -extraformal -extragalactic -extragastric -extrait -extrajudicial -extrajudicially -extralateral -extralite -extrality -extramarginal -extramatrical -extramedullary -extramental -extrameridian -extrameridional -extrametaphysical -extrametrical -extrametropolitan -extramodal -extramolecular -extramorainal -extramorainic -extramoral -extramoralist -extramundane -extramural -extramurally -extramusical -extranational -extranatural -extranean -extraneity -extraneous -extraneously -extraneousness -extranidal -extranormal -extranuclear -extraocular -extraofficial -extraoral -extraorbital -extraorbitally -extraordinarily -extraordinariness -extraordinary -extraorganismal -extraovate -extraovular -extraparenchymal -extraparental -extraparietal -extraparliamentary -extraparochial -extraparochially -extrapatriarchal -extrapelvic -extraperineal -extraperiodic -extraperiosteal -extraperitoneal -extraphenomenal -extraphysical -extraphysiological -extrapituitary -extraplacental -extraplanetary -extrapleural -extrapoetical -extrapolar -extrapolate -extrapolation -extrapolative -extrapolator -extrapopular -extraprofessional -extraprostatic -extraprovincial -extrapulmonary -extrapyramidal -extraquiz -extrared -extraregarding -extraregular -extraregularly -extrarenal -extraretinal -extrarhythmical -extrasacerdotal -extrascholastic -extraschool -extrascientific -extrascriptural -extrascripturality -extrasensible -extrasensory -extrasensuous -extraserous -extrasocial -extrasolar -extrasomatic -extraspectral -extraspherical -extraspinal -extrastapedial -extrastate -extrasterile -extrastomachal -extrasyllabic -extrasyllogistic -extrasyphilitic -extrasystole -extrasystolic -extratabular -extratarsal -extratellurian -extratelluric -extratemporal -extratension -extratensive -extraterrene -extraterrestrial -extraterritorial -extraterritoriality -extraterritorially -extrathecal -extratheistic -extrathermodynamic -extrathoracic -extratorrid -extratracheal -extratribal -extratropical -extratubal -extratympanic -extrauterine -extravagance -extravagancy -extravagant -Extravagantes -extravagantly -extravagantness -extravaganza -extravagate -extravaginal -extravasate -extravasation -extravascular -extraventricular -extraversion -extravert -extravillar -extraviolet -extravisceral -extrazodiacal -extreme -extremeless -extremely -extremeness -extremism -extremist -extremistic -extremital -extremity -extricable -extricably -extricate -extricated -extrication -extrinsic -extrinsical -extrinsicality -extrinsically -extrinsicalness -extrinsicate -extrinsication -extroitive -extropical -extrorsal -extrorse -extrorsely -extrospect -extrospection -extrospective -extroversion -extroversive -extrovert -extrovertish -extrude -extruder -extruding -extrusile -extrusion -extrusive -extrusory -extubate -extubation -extumescence -extund -extusion -exuberance -exuberancy -exuberant -exuberantly -exuberantness -exuberate -exuberation -exudate -exudation -exudative -exude -exudence -exulcerate -exulceration -exulcerative -exulceratory -exult -exultance -exultancy -exultant -exultantly -exultation -exultet -exultingly -exululate -exumbral -exumbrella -exumbrellar -exundance -exundancy -exundate -exundation -exuviability -exuviable -exuviae -exuvial -exuviate -exuviation -exzodiacal -ey -eyah -eyalet -eyas -eye -eyeball -eyebalm -eyebar -eyebeam -eyeberry -eyeblink -eyebolt -eyebree -eyebridled -eyebright -eyebrow -eyecup -eyed -eyedness -eyedot -eyedrop -eyeflap -eyeful -eyeglance -eyeglass -eyehole -Eyeish -eyelash -eyeless -eyelessness -eyelet -eyeleteer -eyeletter -eyelid -eyelight -eyelike -eyeline -eyemark -eyen -eyepiece -eyepit -eyepoint -eyer -eyereach -eyeroot -eyesalve -eyeseed -eyeservant -eyeserver -eyeservice -eyeshade -eyeshield -eyeshot -eyesight -eyesome -eyesore -eyespot -eyestalk -eyestone -eyestrain -eyestring -eyetooth -eyewaiter -eyewash -eyewater -eyewear -eyewink -eyewinker -eyewitness -eyewort -eyey -eying -eyn -eyne -eyot -eyoty -eyra -eyre -eyrie -eyrir -ezba -Ezekiel -Ezra -F -f -fa -Faba -Fabaceae -fabaceous -fabella -fabes -Fabian -Fabianism -Fabianist -fabiform -fable -fabled -fabledom -fableist -fableland -fablemaker -fablemonger -fablemongering -fabler -fabliau -fabling -Fabraea -fabric -fabricant -fabricate -fabrication -fabricative -fabricator -fabricatress -Fabrikoid -fabrikoid -Fabronia -Fabroniaceae -fabular -fabulist -fabulosity -fabulous -fabulously -fabulousness -faburden -facadal -facade -face -faceable -facebread -facecloth -faced -faceless -facellite -facemaker -facemaking -faceman -facemark -facepiece -faceplate -facer -facet -facete -faceted -facetely -faceteness -facetiae -facetiation -facetious -facetiously -facetiousness -facewise -facework -facia -facial -facially -faciation -faciend -facient -facies -facile -facilely -facileness -facilitate -facilitation -facilitative -facilitator -facility -facing -facingly -facinorous -facinorousness -faciobrachial -faciocervical -faciolingual -facioplegia -facioscapulohumeral -fack -fackeltanz -fackings -fackins -facks -facsimile -facsimilist -facsimilize -fact -factable -factabling -factful -Factice -facticide -faction -factional -factionalism -factionary -factioneer -factionist -factionistism -factious -factiously -factiousness -factish -factitial -factitious -factitiously -factitive -factitively -factitude -factive -factor -factorability -factorable -factorage -factordom -factoress -factorial -factorially -factorist -factorization -factorize -factorship -factory -factoryship -factotum -factrix -factual -factuality -factually -factualness -factum -facture -facty -facula -facular -faculous -facultate -facultative -facultatively -facultied -facultize -faculty -facund -facy -fad -fadable -faddiness -faddish -faddishness -faddism -faddist -faddle -faddy -fade -fadeaway -faded -fadedly -fadedness -fadeless -faden -fader -fadge -fading -fadingly -fadingness -fadmonger -fadmongering -fadmongery -fadridden -fady -fae -faerie -Faeroe -faery -faeryland -faff -faffle -faffy -fag -Fagaceae -fagaceous -fagald -Fagales -Fagara -fage -Fagelia -fager -fagger -faggery -fagging -faggingly -fagine -fagopyrism -fagopyrismus -Fagopyrum -fagot -fagoter -fagoting -fagottino -fagottist -fagoty -Fagus -faham -fahlerz -fahlore -fahlunite -Fahrenheit -faience -fail -failing -failingly -failingness -faille -failure -fain -fainaigue -fainaiguer -faineance -faineancy -faineant -faineantism -fainly -fainness -fains -faint -fainter -faintful -faintheart -fainthearted -faintheartedly -faintheartedness -fainting -faintingly -faintish -faintishness -faintly -faintness -faints -fainty -faipule -fair -fairer -fairfieldite -fairgoer -fairgoing -fairgrass -fairground -fairily -fairing -fairish -fairishly -fairkeeper -fairlike -fairling -fairly -fairm -fairness -fairstead -fairtime -fairwater -fairway -fairy -fairydom -fairyfolk -fairyhood -fairyish -fairyism -fairyland -fairylike -fairyologist -fairyology -fairyship -faith -faithbreach -faithbreaker -faithful -faithfully -faithfulness -faithless -faithlessly -faithlessness -faithwise -faithworthiness -faithworthy -faitour -fake -fakement -faker -fakery -fakiness -fakir -fakirism -Fakofo -faky -falanaka -Falange -Falangism -Falangist -Falasha -falbala -falcade -Falcata -falcate -falcated -falcation -falcer -falces -falchion -falcial -Falcidian -falciform -Falcinellus -falciparum -Falco -falcon -falconbill -falconelle -falconer -Falcones -falconet -Falconidae -Falconiformes -Falconinae -falconine -falconlike -falconoid -falconry -falcopern -falcula -falcular -falculate -Falcunculus -faldage -falderal -faldfee -faldstool -Falerian -Falernian -Falerno -Faliscan -Falisci -Falkland -fall -fallace -fallacious -fallaciously -fallaciousness -fallacy -fallage -fallation -fallaway -fallback -fallectomy -fallen -fallenness -faller -fallfish -fallibility -fallible -fallibleness -fallibly -falling -Fallopian -fallostomy -fallotomy -fallow -fallowist -fallowness -falltime -fallway -fally -falsary -false -falsehearted -falseheartedly -falseheartedness -falsehood -falsely -falsen -falseness -falser -falsettist -falsetto -falsework -falsidical -falsie -falsifiable -falsificate -falsification -falsificator -falsifier -falsify -falsism -Falstaffian -faltboat -faltche -falter -falterer -faltering -falteringly -Falunian -Faluns -falutin -falx -fam -Fama -famatinite -famble -fame -fameflower -fameful -fameless -famelessly -famelessness -Fameuse -fameworthy -familia -familial -familiar -familiarism -familiarity -familiarization -familiarize -familiarizer -familiarizingly -familiarly -familiarness -familism -familist -familistery -familistic -familistical -family -familyish -famine -famish -famishment -famous -famously -famousness -famulary -famulus -Fan -fan -fana -fanal -fanam -fanatic -fanatical -fanatically -fanaticalness -fanaticism -fanaticize -fanback -fanbearer -fanciable -fancical -fancied -fancier -fanciful -fancifully -fancifulness -fancify -fanciless -fancy -fancymonger -fancysick -fancywork -fand -fandangle -fandango -fandom -fanega -fanegada -fanfarade -Fanfare -fanfare -fanfaron -fanfaronade -fanfaronading -fanflower -fanfoot -fang -fanged -fangle -fangled -fanglement -fangless -fanglet -fanglomerate -fangot -fangy -fanhouse -faniente -fanion -fanioned -fanlight -fanlike -fanmaker -fanmaking -fanman -fannel -fanner -Fannia -fannier -fanning -Fanny -fanon -fant -fantail -fantasia -fantasie -fantasied -fantasist -fantasque -fantassin -fantast -fantastic -fantastical -fantasticality -fantastically -fantasticalness -fantasticate -fantastication -fantasticism -fantasticly -fantasticness -fantastico -fantastry -fantasy -Fanti -fantigue -fantoccini -fantocine -fantod -fantoddish -Fanwe -fanweed -fanwise -fanwork -fanwort -fanwright -Fany -faon -Fapesmo -far -farad -faradaic -faraday -faradic -faradism -faradization -faradize -faradizer -faradmeter -faradocontractility -faradomuscular -faradonervous -faradopalpation -farandole -farasula -faraway -farawayness -farce -farcelike -farcer -farcetta -farcial -farcialize -farcical -farcicality -farcically -farcicalness -farcied -farcify -farcing -farcinoma -farcist -farctate -farcy -farde -fardel -fardelet -fardh -fardo -fare -farer -farewell -farfara -farfel -farfetched -farfetchedness -Farfugium -fargoing -fargood -farina -farinaceous -farinaceously -faring -farinometer -farinose -farinosely -farinulent -Farish -farish -farkleberry -farl -farleu -farm -farmable -farmage -farmer -farmeress -farmerette -farmerlike -farmership -farmery -farmhold -farmhouse -farmhousey -farming -farmost -farmplace -farmstead -farmsteading -farmtown -farmy -farmyard -farmyardy -farnesol -farness -Farnovian -faro -Faroeish -Faroese -farolito -Farouk -farraginous -farrago -farrand -farrandly -farrantly -farreate -farreation -farrier -farrierlike -farriery -farrisite -farrow -farruca -farsalah -farse -farseeing -farseeingness -farseer -farset -Farsi -farsighted -farsightedly -farsightedness -farther -farthermost -farthest -farthing -farthingale -farthingless -farweltered -fasces -fascet -fascia -fascial -fasciate -fasciated -fasciately -fasciation -fascicle -fascicled -fascicular -fascicularly -fasciculate -fasciculated -fasciculately -fasciculation -fascicule -fasciculus -fascinate -fascinated -fascinatedly -fascinating -fascinatingly -fascination -fascinative -fascinator -fascinatress -fascine -fascinery -Fascio -fasciodesis -fasciola -fasciolar -Fasciolaria -Fasciolariidae -fasciole -fasciolet -fascioliasis -Fasciolidae -fascioloid -fascioplasty -fasciotomy -fascis -fascism -fascist -Fascista -Fascisti -fascisticization -fascisticize -fascistization -fascistize -fash -fasher -fashery -fashion -fashionability -fashionable -fashionableness -fashionably -fashioned -fashioner -fashionist -fashionize -fashionless -fashionmonger -fashionmonging -fashious -fashiousness -fasibitikite -fasinite -fass -fassalite -fast -fasten -fastener -fastening -faster -fastgoing -fasthold -fastidiosity -fastidious -fastidiously -fastidiousness -fastidium -fastigate -fastigated -fastigiate -fastigium -fasting -fastingly -fastish -fastland -fastness -fastuous -fastuously -fastuousness -fastus -fat -Fatagaga -fatal -fatalism -fatalist -fatalistic -fatalistically -fatality -fatalize -fatally -fatalness -fatbird -fatbrained -fate -fated -fateful -fatefully -fatefulness -fatelike -fathead -fatheaded -fatheadedness -fathearted -father -fathercraft -fathered -fatherhood -fatherland -fatherlandish -fatherless -fatherlessness -fatherlike -fatherliness -fatherling -fatherly -fathership -fathmur -fathom -fathomable -fathomage -fathomer -Fathometer -fathomless -fathomlessly -fathomlessness -fatidic -fatidical -fatidically -fatiferous -fatigability -fatigable -fatigableness -fatigue -fatigueless -fatiguesome -fatiguing -fatiguingly -fatiha -fatil -fatiloquent -Fatima -Fatimid -fatiscence -fatiscent -fatless -fatling -fatly -fatness -fatsia -fattable -fatten -fattenable -fattener -fatter -fattily -fattiness -fattish -fattishness -fattrels -fatty -fatuism -fatuitous -fatuitousness -fatuity -fatuoid -fatuous -fatuously -fatuousness -fatwood -faucal -faucalize -fauces -faucet -fauchard -faucial -faucitis -faucre -faugh -faujasite -fauld -Faulkland -fault -faultage -faulter -faultfind -faultfinder -faultfinding -faultful -faultfully -faultily -faultiness -faulting -faultless -faultlessly -faultlessness -faultsman -faulty -faun -Fauna -faunal -faunally -faunated -faunish -faunist -faunistic -faunistical -faunistically -faunlike -faunological -faunology -faunule -fause -faussebraie -faussebrayed -faust -Faustian -fauterer -fautor -fautorship -fauve -Fauvism -Fauvist -favaginous -favella -favellidium -favelloid -Faventine -faveolate -faveolus -faviform -favilla -favillous -favism -favissa -favn -favonian -Favonius -favor -favorable -favorableness -favorably -favored -favoredly -favoredness -favorer -favoress -favoring -favoringly -favorite -favoritism -favorless -favose -favosely -favosite -Favosites -Favositidae -favositoid -favous -favus -fawn -fawner -fawnery -fawning -fawningly -fawningness -fawnlike -fawnskin -fawny -Fay -fay -Fayal -fayalite -Fayettism -fayles -Fayumic -faze -fazenda -fe -feaberry -feague -feak -feal -fealty -fear -fearable -feared -fearedly -fearedness -fearer -fearful -fearfully -fearfulness -fearingly -fearless -fearlessly -fearlessness -fearnought -fearsome -fearsomely -fearsomeness -feasance -feasibility -feasible -feasibleness -feasibly -feasor -feast -feasten -feaster -feastful -feastfully -feastless -feat -feather -featherback -featherbed -featherbedding -featherbird -featherbone -featherbrain -featherbrained -featherdom -feathered -featheredge -featheredged -featherer -featherfew -featherfoil -featherhead -featherheaded -featheriness -feathering -featherleaf -featherless -featherlessness -featherlet -featherlike -featherman -feathermonger -featherpate -featherpated -featherstitch -featherstitching -feathertop -featherway -featherweed -featherweight -featherwing -featherwise -featherwood -featherwork -featherworker -feathery -featliness -featly -featness -featous -featural -featurally -feature -featured -featureful -featureless -featureliness -featurely -featy -feaze -feazings -febricant -febricide -febricity -febricula -febrifacient -febriferous -febrific -febrifugal -febrifuge -febrile -febrility -Febronian -Febronianism -Februarius -February -februation -fecal -fecalith -fecaloid -feces -Fechnerian -feck -feckful -feckfully -feckless -fecklessly -fecklessness -feckly -fecula -feculence -feculency -feculent -fecund -fecundate -fecundation -fecundative -fecundator -fecundatory -fecundify -fecundity -fecundize -fed -feddan -federacy -Federal -federal -federalism -federalist -federalization -federalize -federally -federalness -federate -federation -federationist -federatist -federative -federatively -federator -Fedia -Fedora -fee -feeable -feeble -feeblebrained -feeblehearted -feebleheartedly -feebleheartedness -feebleness -feebling -feeblish -feebly -feed -feedable -feedback -feedbin -feedboard -feedbox -feeder -feedhead -feeding -feedman -feedsman -feedstuff -feedway -feedy -feel -feelable -feeler -feeless -feeling -feelingful -feelingless -feelinglessly -feelingly -feelingness -feer -feere -feering -feetage -feetless -feeze -fefnicute -fegary -Fegatella -Fehmic -fei -feif -feigher -feign -feigned -feignedly -feignedness -feigner -feigning -feigningly -Feijoa -feil -feint -feis -feist -feisty -Felapton -feldsher -feldspar -feldsparphyre -feldspathic -feldspathization -feldspathoid -Felichthys -felicide -felicific -felicitate -felicitation -felicitator -felicitous -felicitously -felicitousness -felicity -felid -Felidae -feliform -Felinae -feline -felinely -felineness -felinity -felinophile -felinophobe -Felis -Felix -fell -fellable -fellage -fellah -fellaheen -fellahin -Fellani -Fellata -Fellatah -fellatio -fellation -fellen -feller -fellic -felliducous -fellifluous -felling -fellingbird -fellinic -fellmonger -fellmongering -fellmongery -fellness -felloe -fellow -fellowcraft -fellowess -fellowheirship -fellowless -fellowlike -fellowship -fellside -fellsman -felly -feloid -felon -feloness -felonious -feloniously -feloniousness -felonry -felonsetter -felonsetting -felonweed -felonwood -felonwort -felony -fels -felsite -felsitic -felsobanyite -felsophyre -felsophyric -felsosphaerite -felstone -felt -felted -felter -felting -feltlike -feltmaker -feltmaking -feltmonger -feltness -feltwork -feltwort -felty -feltyfare -felucca -Felup -felwort -female -femalely -femaleness -femality -femalize -Feme -feme -femerell -femic -femicide -feminacy -feminal -feminality -feminate -femineity -feminie -feminility -feminin -feminine -femininely -feminineness -femininism -femininity -feminism -feminist -feministic -feministics -feminity -feminization -feminize -feminologist -feminology -feminophobe -femora -femoral -femorocaudal -femorocele -femorococcygeal -femorofibular -femoropopliteal -femororotulian -femorotibial -femur -fen -fenbank -fenberry -fence -fenceful -fenceless -fencelessness -fencelet -fenceplay -fencer -fenceress -fenchene -fenchone -fenchyl -fencible -fencing -fend -fendable -fender -fendering -fenderless -fendillate -fendillation -fendy -feneration -fenestella -Fenestellidae -fenestra -fenestral -fenestrate -fenestrated -fenestration -fenestrato -fenestrule -Fenian -Fenianism -fenite -fenks -fenland -fenlander -fenman -fennec -fennel -fennelflower -fennig -fennish -Fennoman -fenny -fenouillet -Fenrir -fensive -fent -fenter -fenugreek -Fenzelia -feod -feodal -feodality -feodary -feodatory -feoff -feoffee -feoffeeship -feoffment -feoffor -feower -feracious -feracity -Ferae -Ferahan -feral -feralin -Feramorz -ferash -ferberite -Ferdiad -ferdwit -feretory -feretrum -ferfathmur -ferfet -ferganite -Fergus -fergusite -Ferguson -fergusonite -feria -ferial -feridgi -ferie -ferine -ferinely -ferineness -Feringi -Ferio -Ferison -ferity -ferk -ferling -ferly -fermail -Fermatian -ferme -ferment -fermentability -fermentable -fermentarian -fermentation -fermentative -fermentatively -fermentativeness -fermentatory -fermenter -fermentescible -fermentitious -fermentive -fermentology -fermentor -fermentum -fermerer -fermery -fermila -fermorite -fern -fernandinite -Fernando -fernbird -fernbrake -ferned -fernery -ferngale -ferngrower -fernland -fernleaf -fernless -fernlike -fernshaw -fernsick -ferntickle -ferntickled -fernwort -ferny -Ferocactus -ferocious -ferociously -ferociousness -ferocity -feroher -Feronia -ferrado -ferrament -Ferrara -Ferrarese -ferrate -ferrated -ferrateen -ferratin -ferrean -ferreous -ferret -ferreter -ferreting -ferretto -ferrety -ferri -ferriage -ferric -ferrichloride -ferricyanate -ferricyanhydric -ferricyanic -ferricyanide -ferricyanogen -ferrier -ferriferous -ferrihydrocyanic -ferriprussiate -ferriprussic -ferrite -ferritization -ferritungstite -ferrivorous -ferroalloy -ferroaluminum -ferroboron -ferrocalcite -ferrocerium -ferrochrome -ferrochromium -ferroconcrete -ferroconcretor -ferrocyanate -ferrocyanhydric -ferrocyanic -ferrocyanide -ferrocyanogen -ferroglass -ferrogoslarite -ferrohydrocyanic -ferroinclave -ferromagnesian -ferromagnetic -ferromagnetism -ferromanganese -ferromolybdenum -ferronatrite -ferronickel -ferrophosphorus -ferroprint -ferroprussiate -ferroprussic -ferrosilicon -ferrotitanium -ferrotungsten -ferrotype -ferrotyper -ferrous -ferrovanadium -ferrozirconium -ferruginate -ferrugination -ferruginean -ferruginous -ferrule -ferruler -ferrum -ferruminate -ferrumination -ferry -ferryboat -ferryhouse -ferryman -ferryway -ferthumlungur -Fertil -fertile -fertilely -fertileness -fertility -fertilizable -fertilization -fertilizational -fertilize -fertilizer -feru -ferula -ferulaceous -ferule -ferulic -fervanite -fervency -fervent -fervently -ferventness -fervescence -fervescent -fervid -fervidity -fervidly -fervidness -Fervidor -fervor -fervorless -Fesapo -Fescennine -fescenninity -fescue -fess -fessely -fesswise -fest -festal -festally -Feste -fester -festerment -festilogy -festinance -festinate -festinately -festination -festine -Festino -festival -festivally -festive -festively -festiveness -festivity -festivous -festology -festoon -festoonery -festoony -festuca -festucine -fet -fetal -fetalism -fetalization -fetation -fetch -fetched -fetcher -fetching -fetchingly -feteless -feterita -fetial -fetiales -fetichmonger -feticidal -feticide -fetid -fetidity -fetidly -fetidness -fetiferous -fetiparous -fetish -fetisheer -fetishic -fetishism -fetishist -fetishistic -fetishization -fetishize -fetishmonger -fetishry -fetlock -fetlocked -fetlow -fetography -fetometry -fetoplacental -fetor -fetter -fetterbush -fetterer -fetterless -fetterlock -fetticus -fettle -fettler -fettling -fetus -feu -feuage -feuar -feucht -feud -feudal -feudalism -feudalist -feudalistic -feudality -feudalizable -feudalization -feudalize -feudally -feudatorial -feudatory -feudee -feudist -feudovassalism -feued -Feuillants -feuille -feuilletonism -feuilletonist -feuilletonistic -feulamort -fever -feverberry -feverbush -fevercup -feveret -feverfew -fevergum -feverish -feverishly -feverishness -feverless -feverlike -feverous -feverously -feverroot -fevertrap -fevertwig -fevertwitch -feverweed -feverwort -few -fewness -fewsome -fewter -fewterer -fewtrils -fey -feyness -fez -Fezzan -fezzed -Fezziwig -fezzy -fi -fiacre -fiance -fiancee -fianchetto -Fianna -fiar -fiard -fiasco -fiat -fiatconfirmatio -fib -fibber -fibbery -fibdom -Fiber -fiber -fiberboard -fibered -Fiberglas -fiberize -fiberizer -fiberless -fiberware -fibration -fibreless -fibreware -fibriform -fibril -fibrilla -fibrillar -fibrillary -fibrillate -fibrillated -fibrillation -fibrilled -fibrilliferous -fibrilliform -fibrillose -fibrillous -fibrin -fibrinate -fibrination -fibrine -fibrinemia -fibrinoalbuminous -fibrinocellular -fibrinogen -fibrinogenetic -fibrinogenic -fibrinogenous -fibrinolysin -fibrinolysis -fibrinolytic -fibrinoplastic -fibrinoplastin -fibrinopurulent -fibrinose -fibrinosis -fibrinous -fibrinuria -fibroadenia -fibroadenoma -fibroadipose -fibroangioma -fibroareolar -fibroblast -fibroblastic -fibrobronchitis -fibrocalcareous -fibrocarcinoma -fibrocartilage -fibrocartilaginous -fibrocaseose -fibrocaseous -fibrocellular -fibrochondritis -fibrochondroma -fibrochondrosteal -fibrocrystalline -fibrocyst -fibrocystic -fibrocystoma -fibrocyte -fibroelastic -fibroenchondroma -fibrofatty -fibroferrite -fibroglia -fibroglioma -fibrohemorrhagic -fibroid -fibroin -fibrointestinal -fibroligamentous -fibrolipoma -fibrolipomatous -fibrolite -fibrolitic -fibroma -fibromata -fibromatoid -fibromatosis -fibromatous -fibromembrane -fibromembranous -fibromucous -fibromuscular -fibromyectomy -fibromyitis -fibromyoma -fibromyomatous -fibromyomectomy -fibromyositis -fibromyotomy -fibromyxoma -fibromyxosarcoma -fibroneuroma -fibronuclear -fibronucleated -fibropapilloma -fibropericarditis -fibroplastic -fibropolypus -fibropsammoma -fibropurulent -fibroreticulate -fibrosarcoma -fibrose -fibroserous -fibrosis -fibrositis -Fibrospongiae -fibrotic -fibrotuberculosis -fibrous -fibrously -fibrousness -fibrovasal -fibrovascular -fibry -fibster -fibula -fibulae -fibular -fibulare -fibulocalcaneal -Ficaria -ficary -fice -ficelle -fiche -Fichtean -Fichteanism -fichtelite -fichu -ficiform -fickle -ficklehearted -fickleness -ficklety -ficklewise -fickly -fico -ficoid -Ficoidaceae -Ficoideae -ficoides -fictation -fictile -fictileness -fictility -fiction -fictional -fictionalize -fictionally -fictionary -fictioneer -fictioner -fictionist -fictionistic -fictionization -fictionize -fictionmonger -fictious -fictitious -fictitiously -fictitiousness -fictive -fictively -Ficula -Ficus -fid -Fidac -fidalgo -fidate -fidation -fiddle -fiddleback -fiddlebrained -fiddlecome -fiddledeedee -fiddlefaced -fiddlehead -fiddleheaded -fiddler -fiddlerfish -fiddlery -fiddlestick -fiddlestring -fiddlewood -fiddley -fiddling -fide -fideicommiss -fideicommissary -fideicommission -fideicommissioner -fideicommissor -fideicommissum -fideism -fideist -fidejussion -fidejussionary -fidejussor -fidejussory -Fidele -Fidelia -Fidelio -fidelity -fidepromission -fidepromissor -Fides -Fidessa -fidfad -fidge -fidget -fidgeter -fidgetily -fidgetiness -fidgeting -fidgetingly -fidgety -Fidia -fidicinal -fidicinales -fidicula -Fido -fiducia -fiducial -fiducially -fiduciarily -fiduciary -fiducinales -fie -fiedlerite -fiefdom -field -fieldball -fieldbird -fielded -fielder -fieldfare -fieldish -fieldman -fieldpiece -fieldsman -fieldward -fieldwards -fieldwork -fieldworker -fieldwort -fieldy -fiend -fiendful -fiendfully -fiendhead -fiendish -fiendishly -fiendishness -fiendism -fiendlike -fiendliness -fiendly -fiendship -fient -Fierabras -Fierasfer -fierasferid -Fierasferidae -fierasferoid -fierce -fiercehearted -fiercely -fiercen -fierceness -fierding -fierily -fieriness -fiery -fiesta -fieulamort -Fife -fife -fifer -fifie -fifish -fifo -fifteen -fifteener -fifteenfold -fifteenth -fifteenthly -fifth -fifthly -fiftieth -fifty -fiftyfold -fig -figaro -figbird -figeater -figent -figged -figgery -figging -figgle -figgy -fight -fightable -fighter -fighteress -fighting -fightingly -fightwite -Figitidae -figless -figlike -figment -figmental -figpecker -figshell -figulate -figulated -figuline -figurability -figurable -figural -figurant -figurante -figurate -figurately -figuration -figurative -figuratively -figurativeness -figure -figured -figuredly -figurehead -figureheadless -figureheadship -figureless -figurer -figuresome -figurette -figurial -figurine -figurism -figurist -figurize -figury -figworm -figwort -Fiji -Fijian -fike -fikie -filace -filaceous -filacer -Filago -filament -filamentar -filamentary -filamented -filamentiferous -filamentoid -filamentose -filamentous -filamentule -filander -filanders -filao -filar -Filaria -filaria -filarial -filarian -filariasis -filaricidal -filariform -filariid -Filariidae -filarious -filasse -filate -filator -filature -filbert -filch -filcher -filchery -filching -filchingly -file -filefish -filelike -filemaker -filemaking -filemot -filer -filesmith -filet -filial -filiality -filially -filialness -filiate -filiation -filibeg -filibranch -Filibranchia -filibranchiate -filibuster -filibusterer -filibusterism -filibusterous -filical -Filicales -filicauline -Filices -filicic -filicidal -filicide -filiciform -filicin -Filicineae -filicinean -filicite -Filicites -filicologist -filicology -Filicornia -filiety -filiferous -filiform -filiformed -Filigera -filigerous -filigree -filing -filings -filionymic -filiopietistic -filioque -Filipendula -filipendulous -Filipina -Filipiniana -Filipinization -Filipinize -Filipino -filippo -filipuncture -filite -Filix -fill -fillable -filled -fillemot -filler -fillercap -fillet -filleter -filleting -filletlike -filletster -filleul -filling -fillingly -fillingness -fillip -fillipeen -fillister -fillmass -fillock -fillowite -filly -film -filmable -filmdom -filmet -filmgoer -filmgoing -filmic -filmiform -filmily -filminess -filmish -filmist -filmize -filmland -filmlike -filmogen -filmslide -filmstrip -filmy -filo -filoplumaceous -filoplume -filopodium -Filosa -filose -filoselle -fils -filter -filterability -filterable -filterableness -filterer -filtering -filterman -filth -filthify -filthily -filthiness -filthless -filthy -filtrability -filtrable -filtratable -filtrate -filtration -fimble -fimbria -fimbrial -fimbriate -fimbriated -fimbriation -fimbriatum -fimbricate -fimbricated -fimbrilla -fimbrillate -fimbrilliferous -fimbrillose -fimbriodentate -Fimbristylis -fimetarious -fimicolous -Fin -fin -finable -finableness -finagle -finagler -final -finale -finalism -finalist -finality -finalize -finally -finance -financial -financialist -financially -financier -financiery -financist -finback -finch -finchbacked -finched -finchery -find -findability -findable -findal -finder -findfault -finding -findjan -fine -fineable -finebent -fineish -fineleaf -fineless -finely -finement -fineness -finer -finery -finespun -finesse -finesser -finestill -finestiller -finetop -finfish -finfoot -Fingal -Fingall -Fingallian -fingent -finger -fingerable -fingerberry -fingerbreadth -fingered -fingerer -fingerfish -fingerflower -fingerhold -fingerhook -fingering -fingerleaf -fingerless -fingerlet -fingerlike -fingerling -fingernail -fingerparted -fingerprint -fingerprinting -fingerroot -fingersmith -fingerspin -fingerstall -fingerstone -fingertip -fingerwise -fingerwork -fingery -fingrigo -Fingu -finial -finialed -finical -finicality -finically -finicalness -finicism -finick -finickily -finickiness -finicking -finickingly -finickingness -finific -finify -Finiglacial -finikin -finiking -fining -finis -finish -finishable -finished -finisher -finishing -finite -finitely -finiteness -finitesimal -finitive -finitude -finity -finjan -fink -finkel -finland -Finlander -finless -finlet -finlike -Finmark -Finn -finnac -finned -finner -finnesko -Finnic -Finnicize -finnip -Finnish -finny -finochio -Fionnuala -fiord -fiorded -Fioretti -fiorin -fiorite -Fiot -fip -fipenny -fipple -fique -fir -Firbolg -firca -fire -fireable -firearm -firearmed -fireback -fireball -firebird -fireblende -fireboard -fireboat -firebolt -firebolted -firebote -firebox -fireboy -firebrand -firebrat -firebreak -firebrick -firebug -fireburn -firecoat -firecracker -firecrest -fired -firedamp -firedog -firedrake -firefall -firefang -firefanged -fireflaught -fireflirt -fireflower -firefly -fireguard -firehouse -fireless -firelight -firelike -fireling -firelit -firelock -fireman -firemanship -firemaster -fireplace -fireplug -firepower -fireproof -fireproofing -fireproofness -firer -fireroom -firesafe -firesafeness -firesafety -fireshaft -fireshine -fireside -firesider -firesideship -firespout -firestone -firestopping -firetail -firetop -firetrap -firewarden -firewater -fireweed -firewood -firework -fireworkless -fireworky -fireworm -firing -firk -firker -firkin -firlot -firm -firmament -firmamental -firman -firmance -firmer -firmhearted -firmisternal -Firmisternia -firmisternial -firmisternous -firmly -firmness -firn -Firnismalerei -Firoloida -firring -firry -first -firstcomer -firsthand -firstling -firstly -firstness -firstship -firth -fisc -fiscal -fiscalify -fiscalism -fiscalization -fiscalize -fiscally -fischerite -fise -fisetin -fish -fishable -fishback -fishbed -fishberry -fishbolt -fishbone -fisheater -fished -fisher -fisherboat -fisherboy -fisheress -fisherfolk -fishergirl -fisherman -fisherpeople -fisherwoman -fishery -fishet -fisheye -fishfall -fishful -fishgarth -fishgig -fishhood -fishhook -fishhooks -fishhouse -fishify -fishily -fishiness -fishing -fishingly -fishless -fishlet -fishlike -fishline -fishling -fishman -fishmonger -fishmouth -fishplate -fishpond -fishpool -fishpot -fishpotter -fishpound -fishskin -fishtail -fishway -fishweed -fishweir -fishwife -fishwoman -fishwood -fishworker -fishworks -fishworm -fishy -fishyard -fisnoga -fissate -fissicostate -fissidactyl -Fissidens -Fissidentaceae -fissidentaceous -fissile -fissileness -fissilingual -Fissilinguia -fissility -fission -fissionable -fissipalmate -fissipalmation -fissiparation -fissiparism -fissiparity -fissiparous -fissiparously -fissiparousness -fissiped -Fissipeda -fissipedal -fissipedate -Fissipedia -fissipedial -Fissipes -fissirostral -fissirostrate -Fissirostres -fissive -fissural -fissuration -fissure -fissureless -Fissurella -Fissurellidae -fissuriform -fissury -fist -fisted -fister -fistful -fistiana -fistic -fistical -fisticuff -fisticuffer -fisticuffery -fistify -fistiness -fisting -fistlike -fistmele -fistnote -fistuca -fistula -Fistulana -fistular -Fistularia -Fistulariidae -fistularioid -fistulate -fistulated -fistulatome -fistulatous -fistule -fistuliform -Fistulina -fistulize -fistulose -fistulous -fistwise -fisty -fit -fitch -fitched -fitchee -fitcher -fitchery -fitchet -fitchew -fitful -fitfully -fitfulness -fitly -fitment -fitness -fitout -fitroot -fittable -fittage -fitted -fittedness -fitten -fitter -fitters -fittily -fittiness -fitting -fittingly -fittingness -Fittonia -fitty -fittyfied -fittyways -fittywise -fitweed -Fitzclarence -Fitzroy -Fitzroya -Fiuman -five -fivebar -fivefold -fivefoldness -fiveling -fivepence -fivepenny -fivepins -fiver -fives -fivescore -fivesome -fivestones -fix -fixable -fixage -fixate -fixatif -fixation -fixative -fixator -fixature -fixed -fixedly -fixedness -fixer -fixidity -fixing -fixity -fixture -fixtureless -fixure -fizelyite -fizgig -fizz -fizzer -fizzle -fizzy -fjarding -fjeld -fjerding -Fjorgyn -flabbergast -flabbergastation -flabbily -flabbiness -flabby -flabellarium -flabellate -flabellation -flabellifoliate -flabelliform -flabellinerved -flabellum -flabrum -flaccid -flaccidity -flaccidly -flaccidness -flacherie -Flacian -Flacianism -Flacianist -flack -flacked -flacker -flacket -Flacourtia -Flacourtiaceae -flacourtiaceous -flaff -flaffer -flag -flagboat -flagellant -flagellantism -flagellar -Flagellaria -Flagellariaceae -flagellariaceous -Flagellata -Flagellatae -flagellate -flagellated -flagellation -flagellative -flagellator -flagellatory -flagelliferous -flagelliform -flagellist -flagellosis -flagellula -flagellum -flageolet -flagfall -flagger -flaggery -flaggily -flagginess -flagging -flaggingly -flaggish -flaggy -flagitate -flagitation -flagitious -flagitiously -flagitiousness -flagleaf -flagless -flaglet -flaglike -flagmaker -flagmaking -flagman -flagon -flagonet -flagonless -flagpole -flagrance -flagrancy -flagrant -flagrantly -flagrantness -flagroot -flagship -flagstaff -flagstick -flagstone -flagworm -flail -flaillike -flair -flaith -flaithship -flajolotite -flak -flakage -flake -flakeless -flakelet -flaker -flakily -flakiness -flaky -flam -Flamandization -Flamandize -flamant -flamb -flambeau -flambeaux -flamberg -flamboyance -flamboyancy -flamboyant -flamboyantism -flamboyantize -flamboyantly -flamboyer -flame -flamed -flameflower -flameless -flamelet -flamelike -flamen -flamenco -flamenship -flameproof -flamer -flamfew -flamineous -flaming -Flamingant -flamingly -flamingo -Flaminian -flaminica -flaminical -flammability -flammable -flammeous -flammiferous -flammulated -flammulation -flammule -flamy -flan -flancard -flanch -flanched -flanconade -flandan -flandowser -flane -flange -flangeless -flanger -flangeway -flank -flankard -flanked -flanker -flanking -flankwise -flanky -flannel -flannelbush -flanneled -flannelette -flannelflower -flannelleaf -flannelly -flannelmouth -flannelmouthed -flannels -flanque -flap -flapcake -flapdock -flapdoodle -flapdragon -flapjack -flapmouthed -flapper -flapperdom -flapperhood -flapperish -flapperism -flare -flareback -flareboard -flareless -flaring -flaringly -flary -flaser -flash -flashboard -flasher -flashet -flashily -flashiness -flashing -flashingly -flashlight -flashlike -flashly -flashness -flashover -flashpan -flashproof -flashtester -flashy -flask -flasker -flasket -flasklet -flasque -flat -flatboat -flatbottom -flatcap -flatcar -flatdom -flated -flatfish -flatfoot -flathat -flathead -flatiron -flatland -flatlet -flatling -flatly -flatman -flatness -flatnose -flatten -flattener -flattening -flatter -flatterable -flattercap -flatterdock -flatterer -flattering -flatteringly -flatteringness -flattery -flattie -flatting -flattish -flattop -flatulence -flatulency -flatulent -flatulently -flatulentness -flatus -flatware -flatway -flatways -flatweed -flatwise -flatwoods -flatwork -flatworm -Flaubertian -flaught -flaughter -flaunt -flaunter -flauntily -flauntiness -flaunting -flauntingly -flaunty -flautino -flautist -flavanilin -flavaniline -flavanthrene -flavanthrone -flavedo -Flaveria -flavescence -flavescent -Flavia -Flavian -flavic -flavicant -flavid -flavin -flavine -Flavius -flavo -Flavobacterium -flavone -flavoprotein -flavopurpurin -flavor -flavored -flavorer -flavorful -flavoring -flavorless -flavorous -flavorsome -flavory -flavour -flaw -flawed -flawflower -flawful -flawless -flawlessly -flawlessness -flawn -flawy -flax -flaxboard -flaxbush -flaxdrop -flaxen -flaxlike -flaxman -flaxseed -flaxtail -flaxweed -flaxwench -flaxwife -flaxwoman -flaxwort -flaxy -flay -flayer -flayflint -flea -fleabane -fleabite -fleadock -fleam -fleaseed -fleaweed -fleawood -fleawort -fleay -flebile -fleche -flechette -fleck -flecken -flecker -fleckiness -fleckled -fleckless -flecklessly -flecky -flecnodal -flecnode -flection -flectional -flectionless -flector -fled -fledge -fledgeless -fledgling -fledgy -flee -fleece -fleeceable -fleeced -fleeceflower -fleeceless -fleecelike -fleecer -fleech -fleechment -fleecily -fleeciness -fleecy -fleer -fleerer -fleering -fleeringly -fleet -fleeter -fleetful -fleeting -fleetingly -fleetingness -fleetings -fleetly -fleetness -fleetwing -Flem -Fleming -Flemish -flemish -flench -flense -flenser -flerry -flesh -fleshbrush -fleshed -fleshen -flesher -fleshful -fleshhood -fleshhook -fleshiness -fleshing -fleshings -fleshless -fleshlike -fleshlily -fleshliness -fleshly -fleshment -fleshmonger -fleshpot -fleshy -flet -Fleta -fletch -Fletcher -fletcher -Fletcherism -Fletcherite -Fletcherize -flether -fleuret -fleurettee -fleuronnee -fleury -flew -flewed -flewit -flews -flex -flexanimous -flexed -flexibility -flexible -flexibleness -flexibly -flexile -flexility -flexion -flexionless -flexor -flexuose -flexuosity -flexuous -flexuously -flexuousness -flexural -flexure -flexured -fley -fleyedly -fleyedness -fleyland -fleysome -flibbertigibbet -flicflac -flick -flicker -flickering -flickeringly -flickerproof -flickertail -flickery -flicky -flidder -flier -fligger -flight -flighted -flighter -flightful -flightily -flightiness -flighting -flightless -flightshot -flighty -flimflam -flimflammer -flimflammery -flimmer -flimp -flimsily -flimsiness -flimsy -flinch -flincher -flinching -flinchingly -flinder -Flindersia -flindosa -flindosy -fling -flinger -flingy -flinkite -flint -flinter -flinthearted -flintify -flintily -flintiness -flintless -flintlike -flintlock -flintwood -flintwork -flintworker -flinty -flioma -flip -flipe -flipjack -flippancy -flippant -flippantly -flippantness -flipper -flipperling -flippery -flirt -flirtable -flirtation -flirtational -flirtationless -flirtatious -flirtatiously -flirtatiousness -flirter -flirtigig -flirting -flirtingly -flirtish -flirtishness -flirtling -flirty -flisk -flisky -flit -flitch -flitchen -flite -flitfold -fliting -flitter -flitterbat -flittermouse -flittern -flitting -flittingly -flitwite -flivver -flix -flixweed -Flo -float -floatability -floatable -floatage -floatation -floatative -floatboard -floater -floatiness -floating -floatingly -floative -floatless -floatmaker -floatman -floatplane -floatsman -floatstone -floaty -flob -flobby -floc -floccillation -floccipend -floccose -floccosely -flocculable -flocculant -floccular -flocculate -flocculation -flocculator -floccule -flocculence -flocculency -flocculent -flocculently -flocculose -flocculus -floccus -flock -flocker -flocking -flockless -flocklike -flockman -flockmaster -flockowner -flockwise -flocky -flocoon -flodge -floe -floeberg -Floerkea -floey -flog -floggable -flogger -flogging -floggingly -flogmaster -flogster -flokite -flong -flood -floodable -floodage -floodboard -floodcock -flooded -flooder -floodgate -flooding -floodless -floodlet -floodlight -floodlighting -floodlike -floodmark -floodometer -floodproof -floodtime -floodwater -floodway -floodwood -floody -floor -floorage -floorcloth -floorer -floorhead -flooring -floorless -floorman -floorwalker -floorward -floorway -floorwise -floozy -flop -flophouse -flopover -flopper -floppers -floppily -floppiness -floppy -flopwing -Flora -flora -floral -Floralia -floralize -florally -floramor -floran -florate -floreal -floreate -Florence -florence -florent -Florentine -Florentinism -florentium -flores -florescence -florescent -floressence -floret -floreted -floretum -Floria -Florian -floriate -floriated -floriation -florican -floricin -floricultural -floriculturally -floriculture -floriculturist -florid -Florida -Floridan -Florideae -floridean -florideous -Floridian -floridity -floridly -floridness -floriferous -floriferously -floriferousness -florification -floriform -florigen -florigenic -florigraphy -florikan -floriken -florilegium -florimania -florimanist -florin -Florinda -floriparous -floripondio -floriscope -Florissant -florist -floristic -floristically -floristics -floristry -florisugent -florivorous -floroon -floroscope -florula -florulent -flory -floscular -Floscularia -floscularian -Flosculariidae -floscule -flosculose -flosculous -flosh -floss -flosser -flossflower -Flossie -flossification -flossing -flossy -flot -flota -flotage -flotant -flotation -flotative -flotilla -flotorial -flotsam -flounce -flouncey -flouncing -flounder -floundering -flounderingly -flour -flourish -flourishable -flourisher -flourishing -flourishingly -flourishment -flourishy -flourlike -floury -flouse -flout -flouter -flouting -floutingly -flow -flowable -flowage -flower -flowerage -flowered -flowerer -floweret -flowerful -flowerily -floweriness -flowering -flowerist -flowerless -flowerlessness -flowerlet -flowerlike -flowerpecker -flowerpot -flowerwork -flowery -flowing -flowingly -flowingness -flowmanostat -flowmeter -flown -flowoff -Floyd -flu -fluate -fluavil -flub -flubdub -flubdubbery -flucan -fluctiferous -fluctigerous -fluctisonant -fluctisonous -fluctuability -fluctuable -fluctuant -fluctuate -fluctuation -fluctuosity -fluctuous -flue -flued -flueless -fluellen -fluellite -flueman -fluency -fluent -fluently -fluentness -fluer -fluework -fluey -fluff -fluffer -fluffily -fluffiness -fluffy -Flugelhorn -flugelman -fluible -fluid -fluidacetextract -fluidal -fluidally -fluidextract -fluidglycerate -fluidible -fluidic -fluidification -fluidifier -fluidify -fluidimeter -fluidism -fluidist -fluidity -fluidization -fluidize -fluidly -fluidness -fluidram -fluigram -fluitant -fluke -fluked -flukeless -flukeworm -flukewort -flukily -flukiness -fluking -fluky -flumdiddle -flume -flumerin -fluminose -flummadiddle -flummer -flummery -flummox -flummydiddle -flump -flung -flunk -flunker -flunkeydom -flunkeyhood -flunkeyish -flunkeyize -flunky -flunkydom -flunkyhood -flunkyish -flunkyism -flunkyistic -flunkyite -flunkyize -fluoaluminate -fluoaluminic -fluoarsenate -fluoborate -fluoboric -fluoborid -fluoboride -fluoborite -fluobromide -fluocarbonate -fluocerine -fluocerite -fluochloride -fluohydric -fluophosphate -fluor -fluoran -fluoranthene -fluorapatite -fluorate -fluorbenzene -fluorene -fluorenyl -fluoresage -fluoresce -fluorescein -fluorescence -fluorescent -fluorescigenic -fluorescigenous -fluorescin -fluorhydric -fluoric -fluoridate -fluoridation -fluoride -fluoridization -fluoridize -fluorimeter -fluorinate -fluorination -fluorindine -fluorine -fluorite -fluormeter -fluorobenzene -fluoroborate -fluoroform -fluoroformol -fluorogen -fluorogenic -fluorography -fluoroid -fluorometer -fluoroscope -fluoroscopic -fluoroscopy -fluorosis -fluorotype -fluorspar -fluoryl -fluosilicate -fluosilicic -fluotantalate -fluotantalic -fluotitanate -fluotitanic -fluozirconic -flurn -flurr -flurried -flurriedly -flurriment -flurry -flush -flushboard -flusher -flusherman -flushgate -flushing -flushingly -flushness -flushy -flusk -flusker -fluster -flusterate -flusteration -flusterer -flusterment -flustery -Flustra -flustrine -flustroid -flustrum -flute -flutebird -fluted -flutelike -flutemouth -fluter -flutework -Flutidae -flutina -fluting -flutist -flutter -flutterable -flutteration -flutterer -fluttering -flutteringly -flutterless -flutterment -fluttersome -fluttery -fluty -fluvial -fluvialist -fluviatic -fluviatile -fluvicoline -fluvioglacial -fluviograph -fluviolacustrine -fluviology -fluviomarine -fluviometer -fluviose -fluvioterrestrial -fluviovolcanic -flux -fluxation -fluxer -fluxibility -fluxible -fluxibleness -fluxibly -fluxile -fluxility -fluxion -fluxional -fluxionally -fluxionary -fluxionist -fluxmeter -fluxroot -fluxweed -fly -flyable -flyaway -flyback -flyball -flybane -flybelt -flyblow -flyblown -flyboat -flyboy -flycatcher -flyeater -flyer -flyflap -flyflapper -flyflower -flying -flyingly -flyleaf -flyless -flyman -flyness -flypaper -flype -flyproof -Flysch -flyspeck -flytail -flytier -flytrap -flyway -flyweight -flywheel -flywinch -flywort -Fo -foal -foalfoot -foalhood -foaly -foam -foambow -foamer -foamflower -foamily -foaminess -foaming -foamingly -foamless -foamlike -foamy -fob -focal -focalization -focalize -focally -focaloid -foci -focimeter -focimetry -focoids -focometer -focometry -focsle -focus -focusable -focuser -focusless -fod -fodda -fodder -fodderer -foddering -fodderless -foder -fodge -fodgel -fodient -Fodientia -foe -foehn -foehnlike -foeish -foeless -foelike -foeman -foemanship -Foeniculum -foenngreek -foeship -foetalization -fog -fogbound -fogbow -fogdog -fogdom -fogeater -fogey -fogfruit -foggage -fogged -fogger -foggily -fogginess -foggish -foggy -foghorn -fogle -fogless -fogman -fogo -fogon -fogou -fogproof -fogram -fogramite -fogramity -fogscoffer -fogus -fogy -fogydom -fogyish -fogyism -fohat -foible -foil -foilable -foiler -foiling -foilsman -foining -foiningly -Foism -foison -foisonless -Foist -foist -foister -foistiness -foisty -foiter -Fokker -fold -foldable -foldage -foldboat -foldcourse -folded -foldedly -folden -folder -folding -foldless -foldskirt -foldure -foldwards -foldy -fole -folgerite -folia -foliaceous -foliaceousness -foliage -foliaged -foliageous -folial -foliar -foliary -foliate -foliated -foliation -foliature -folie -foliicolous -foliiferous -foliiform -folio -foliobranch -foliobranchiate -foliocellosis -foliolate -foliole -folioliferous -foliolose -foliose -foliosity -foliot -folious -foliously -folium -folk -folkcraft -folkfree -folkland -folklore -folkloric -folklorish -folklorism -folklorist -folkloristic -folkmoot -folkmooter -folkmot -folkmote -folkmoter -folkright -folksiness -folksy -Folkvang -Folkvangr -folkway -folky -folles -folletage -follicle -follicular -folliculate -folliculated -follicule -folliculin -Folliculina -folliculitis -folliculose -folliculosis -folliculous -folliful -follis -follow -followable -follower -followership -following -followingly -folly -follyproof -Fomalhaut -foment -fomentation -fomenter -fomes -fomites -Fon -fondak -fondant -fondish -fondle -fondler -fondlesome -fondlike -fondling -fondlingly -fondly -fondness -fondu -fondue -fonduk -fonly -fonnish -fono -fons -font -Fontainea -fontal -fontally -fontanel -fontange -fonted -fontful -fonticulus -fontinal -Fontinalaceae -fontinalaceous -Fontinalis -fontlet -foo -Foochow -Foochowese -food -fooder -foodful -foodless -foodlessness -foodstuff -foody -foofaraw -fool -fooldom -foolery -fooless -foolfish -foolhardihood -foolhardily -foolhardiness -foolhardiship -foolhardy -fooling -foolish -foolishly -foolishness -foollike -foolocracy -foolproof -foolproofness -foolscap -foolship -fooner -fooster -foosterer -foot -footage -footback -football -footballer -footballist -footband -footblower -footboard -footboy -footbreadth -footbridge -footcloth -footed -footeite -footer -footfall -footfarer -footfault -footfolk -footful -footganger -footgear -footgeld -foothalt -foothill -foothold -foothook -foothot -footing -footingly -footings -footle -footler -footless -footlicker -footlight -footlights -footling -footlining -footlock -footmaker -footman -footmanhood -footmanry -footmanship -footmark -footnote -footnoted -footpace -footpad -footpaddery -footpath -footpick -footplate -footprint -footrail -footrest -footrill -footroom -footrope -foots -footscald -footslog -footslogger -footsore -footsoreness -footstalk -footstall -footstep -footstick -footstock -footstone -footstool -footwalk -footwall -footway -footwear -footwork -footworn -footy -fooyoung -foozle -foozler -fop -fopling -foppery -foppish -foppishly -foppishness -foppy -fopship -For -for -fora -forage -foragement -forager -foralite -foramen -foraminated -foramination -foraminifer -Foraminifera -foraminiferal -foraminiferan -foraminiferous -foraminose -foraminous -foraminulate -foraminule -foraminulose -foraminulous -forane -foraneen -foraneous -forasmuch -foray -forayer -forb -forbade -forbar -forbathe -forbear -forbearable -forbearance -forbearant -forbearantly -forbearer -forbearing -forbearingly -forbearingness -forbesite -forbid -forbiddable -forbiddal -forbiddance -forbidden -forbiddenly -forbiddenness -forbidder -forbidding -forbiddingly -forbiddingness -forbit -forbled -forblow -forbore -forborne -forbow -forby -force -forceable -forced -forcedly -forcedness -forceful -forcefully -forcefulness -forceless -forcemeat -forcement -forceps -forcepslike -forcer -forchase -forche -forcibility -forcible -forcibleness -forcibly -forcing -forcingly -forcipate -forcipated -forcipes -forcipiform -forcipressure -Forcipulata -forcipulate -forcleave -forconceit -ford -fordable -fordableness -fordays -Fordicidia -fording -fordless -fordo -fordone -fordwine -fordy -fore -foreaccounting -foreaccustom -foreacquaint -foreact -foreadapt -foreadmonish -foreadvertise -foreadvice -foreadvise -foreallege -foreallot -foreannounce -foreannouncement -foreanswer -foreappoint -foreappointment -forearm -foreassign -foreassurance -forebackwardly -forebay -forebear -forebemoan -forebemoaned -forebespeak -forebitt -forebitten -forebitter -forebless -foreboard -forebode -forebodement -foreboder -foreboding -forebodingly -forebodingness -forebody -foreboot -forebowels -forebowline -forebrace -forebrain -forebreast -forebridge -foreburton -forebush -forecar -forecarriage -forecast -forecaster -forecasting -forecastingly -forecastle -forecastlehead -forecastleman -forecatching -forecatharping -forechamber -forechase -forechoice -forechoose -forechurch -forecited -foreclaw -foreclosable -foreclose -foreclosure -forecome -forecomingness -forecommend -foreconceive -foreconclude -forecondemn -foreconscious -foreconsent -foreconsider -forecontrive -forecool -forecooler -forecounsel -forecount -forecourse -forecourt -forecover -forecovert -foredate -foredawn -foreday -foredeck -foredeclare -foredecree -foredeep -foredefeated -foredefine -foredenounce -foredescribe -foredeserved -foredesign -foredesignment -foredesk -foredestine -foredestiny -foredetermination -foredetermine -foredevised -foredevote -forediscern -foredispose -foredivine -foredone -foredoom -foredoomer -foredoor -foreface -forefather -forefatherly -forefault -forefeel -forefeeling -forefeelingly -forefelt -forefield -forefigure -forefin -forefinger -forefit -foreflank -foreflap -foreflipper -forefoot -forefront -foregallery -foregame -foreganger -foregate -foregift -foregirth -foreglance -foregleam -foreglimpse -foreglow -forego -foregoer -foregoing -foregone -foregoneness -foreground -foreguess -foreguidance -forehalf -forehall -forehammer -forehand -forehanded -forehandedness -forehandsel -forehard -forehatch -forehatchway -forehead -foreheaded -forehear -forehearth -foreheater -forehill -forehinting -forehold -forehood -forehoof -forehook -foreign -foreigneering -foreigner -foreignership -foreignism -foreignization -foreignize -foreignly -foreignness -foreimagination -foreimagine -foreimpressed -foreimpression -foreinclined -foreinstruct -foreintend -foreiron -forejudge -forejudgment -forekeel -foreking -foreknee -foreknow -foreknowable -foreknower -foreknowing -foreknowingly -foreknowledge -forel -forelady -foreland -forelay -foreleech -foreleg -forelimb -forelive -forellenstein -forelock -forelook -foreloop -forelooper -foreloper -foremade -foreman -foremanship -foremarch -foremark -foremartyr -foremast -foremasthand -foremastman -foremean -foremeant -foremelt -foremention -forementioned -foremessenger -foremilk -foremisgiving -foremistress -foremost -foremostly -foremother -forename -forenamed -forenews -forenight -forenoon -forenote -forenoted -forenotice -forenotion -forensal -forensic -forensical -forensicality -forensically -foreordain -foreordainment -foreorder -foreordinate -foreordination -foreorlop -forepad -forepale -foreparents -forepart -forepassed -forepast -forepaw -forepayment -forepeak -foreperiod -forepiece -foreplace -foreplan -foreplanting -forepole -foreporch -forepossessed -forepost -forepredicament -forepreparation -foreprepare -forepretended -foreproduct -foreproffer -forepromise -forepromised -foreprovided -foreprovision -forepurpose -forequarter -forequoted -foreran -forerank -forereach -forereaching -foreread -forereading -forerecited -forereckon -forerehearsed -foreremembered -forereport -forerequest -forerevelation -forerib -forerigging -foreright -foreroom -foreroyal -forerun -forerunner -forerunnership -forerunnings -foresaddle -foresaid -foresail -foresay -forescene -forescent -foreschool -foreschooling -forescript -foreseason -foreseat -foresee -foreseeability -foreseeable -foreseeingly -foreseer -foreseize -foresend -foresense -foresentence -foreset -foresettle -foresettled -foreshadow -foreshadower -foreshaft -foreshank -foreshape -foresheet -foreshift -foreship -foreshock -foreshoe -foreshop -foreshore -foreshorten -foreshortening -foreshot -foreshoulder -foreshow -foreshower -foreshroud -foreside -foresight -foresighted -foresightedness -foresightful -foresightless -foresign -foresignify -foresin -foresing -foresinger -foreskin -foreskirt -foresleeve -foresound -forespeak -forespecified -forespeed -forespencer -forest -forestaff -forestage -forestair -forestal -forestall -forestaller -forestallment -forestarling -forestate -forestation -forestay -forestaysail -forestcraft -forested -foresteep -forestem -forestep -forester -forestership -forestful -forestial -Forestian -forestick -Forestiera -forestine -forestish -forestless -forestlike -forestology -forestral -forestress -forestry -forestside -forestudy -forestwards -foresty -foresummer -foresummon -foresweat -foretack -foretackle -foretalk -foretalking -foretaste -foretaster -foretell -foretellable -foreteller -forethink -forethinker -forethought -forethoughted -forethoughtful -forethoughtfully -forethoughtfulness -forethoughtless -forethrift -foretime -foretimed -foretoken -foretold -foretop -foretopman -foretrace -foretrysail -foreturn -foretype -foretypified -foreuse -foreutter -forevalue -forever -forevermore -foreview -forevision -forevouch -forevouched -forevow -forewarm -forewarmer -forewarn -forewarner -forewarning -forewarningly -forewaters -foreween -foreweep -foreweigh -forewing -forewinning -forewisdom -forewish -forewoman -forewonted -foreword -foreworld -foreworn -forewritten -forewrought -foreyard -foreyear -forfairn -forfar -forfare -forfars -forfault -forfaulture -forfeit -forfeiter -forfeits -forfeiture -forfend -forficate -forficated -forfication -forficiform -Forficula -forficulate -Forficulidae -forfouchten -forfoughen -forfoughten -forgainst -forgather -forge -forgeability -forgeable -forged -forgedly -forgeful -forgeman -forger -forgery -forget -forgetful -forgetfully -forgetfulness -forgetive -forgetness -forgettable -forgetter -forgetting -forgettingly -forgie -forging -forgivable -forgivableness -forgivably -forgive -forgiveless -forgiveness -forgiver -forgiving -forgivingly -forgivingness -forgo -forgoer -forgot -forgotten -forgottenness -forgrow -forgrown -forhoo -forhooy -forhow -forinsec -forint -forisfamiliate -forisfamiliation -forjesket -forjudge -forjudger -fork -forkable -forkbeard -forked -forkedly -forkedness -forker -forkful -forkhead -forkiness -forkless -forklike -forkman -forksmith -forktail -forkwise -forky -forleft -forlet -forlorn -forlornity -forlornly -forlornness -form -formability -formable -formably -formagen -formagenic -formal -formalazine -formaldehyde -formaldehydesulphoxylate -formaldehydesulphoxylic -formaldoxime -formalesque -Formalin -formalism -formalist -formalistic -formalith -formality -formalization -formalize -formalizer -formally -formalness -formamide -formamidine -formamido -formamidoxime -formanilide -formant -format -formate -formation -formational -formative -formatively -formativeness -formature -formazyl -forme -formed -formedon -formee -formel -formene -formenic -former -formeret -formerly -formerness -formful -formiate -formic -Formica -formican -Formicariae -formicarian -Formicariidae -formicarioid -formicarium -formicaroid -formicary -formicate -formication -formicative -formicicide -formicid -Formicidae -formicide -Formicina -Formicinae -formicine -Formicivora -formicivorous -Formicoidea -formidability -formidable -formidableness -formidably -formin -forminate -forming -formless -formlessly -formlessness -Formol -formolite -formonitrile -Formosan -formose -formoxime -formula -formulable -formulae -formulaic -formular -formularism -formularist -formularistic -formularization -formularize -formulary -formulate -formulation -formulator -formulatory -formule -formulism -formulist -formulistic -formulization -formulize -formulizer -formwork -formy -formyl -formylal -formylate -formylation -fornacic -Fornax -fornaxid -fornenst -fornent -fornical -fornicate -fornicated -fornication -fornicator -fornicatress -fornicatrix -forniciform -forninst -fornix -forpet -forpine -forpit -forprise -forrad -forrard -forride -forrit -forritsome -forrue -forsake -forsaken -forsakenly -forsakenness -forsaker -forset -forslow -forsooth -forspeak -forspend -forspread -Forst -forsterite -forswear -forswearer -forsworn -forswornness -Forsythia -fort -fortalice -forte -fortescue -fortescure -forth -forthbring -forthbringer -forthcome -forthcomer -forthcoming -forthcomingness -forthcut -forthfare -forthfigured -forthgaze -forthgo -forthgoing -forthink -forthputting -forthright -forthrightly -forthrightness -forthrights -forthtell -forthteller -forthwith -forthy -forties -fortieth -fortifiable -fortification -fortifier -fortify -fortifying -fortifyingly -fortin -fortis -fortissimo -fortitude -fortitudinous -fortlet -fortnight -fortnightly -fortravail -fortread -fortress -fortuitism -fortuitist -fortuitous -fortuitously -fortuitousness -fortuity -fortunate -fortunately -fortunateness -fortune -fortuned -fortuneless -Fortunella -fortunetell -fortuneteller -fortunetelling -fortunite -forty -fortyfold -forum -forumize -forwander -forward -forwardal -forwardation -forwarder -forwarding -forwardly -forwardness -forwards -forwean -forweend -forwent -forwoden -forworden -fosh -fosie -Fosite -fossa -fossage -fossane -fossarian -fosse -fossed -fossette -fossick -fossicker -fossiform -fossil -fossilage -fossilated -fossilation -fossildom -fossiled -fossiliferous -fossilification -fossilify -fossilism -fossilist -fossilizable -fossilization -fossilize -fossillike -fossilogist -fossilogy -fossilological -fossilologist -fossilology -fossor -Fossores -Fossoria -fossorial -fossorious -fossula -fossulate -fossule -fossulet -fostell -Foster -foster -fosterable -fosterage -fosterer -fosterhood -fostering -fosteringly -fosterite -fosterland -fosterling -fostership -fostress -fot -fotch -fother -Fothergilla -fotmal -fotui -fou -foud -foudroyant -fouette -fougade -fougasse -fought -foughten -foughty -foujdar -foujdary -foul -foulage -foulard -fouler -fouling -foulish -foully -foulmouthed -foulmouthedly -foulmouthedness -foulness -foulsome -foumart -foun -found -foundation -foundational -foundationally -foundationary -foundationed -foundationer -foundationless -foundationlessness -founder -founderous -foundership -foundery -founding -foundling -foundress -foundry -foundryman -fount -fountain -fountained -fountaineer -fountainhead -fountainless -fountainlet -fountainous -fountainously -fountainwise -fountful -Fouquieria -Fouquieriaceae -fouquieriaceous -four -fourble -fourche -fourchee -fourcher -fourchette -fourchite -fourer -fourflusher -fourfold -Fourierian -Fourierism -Fourierist -Fourieristic -Fourierite -fourling -fourpence -fourpenny -fourpounder -fourre -fourrier -fourscore -foursome -foursquare -foursquarely -foursquareness -fourstrand -fourteen -fourteener -fourteenfold -fourteenth -fourteenthly -fourth -fourther -fourthly -foussa -foute -fouter -fouth -fovea -foveal -foveate -foveated -foveation -foveiform -foveola -foveolarious -foveolate -foveolated -foveole -foveolet -fow -fowk -fowl -fowler -fowlerite -fowlery -fowlfoot -fowling -fox -foxbane -foxberry -foxchop -foxer -foxery -foxfeet -foxfinger -foxfish -foxglove -foxhole -foxhound -foxily -foxiness -foxing -foxish -foxlike -foxproof -foxship -foxskin -foxtail -foxtailed -foxtongue -foxwood -foxy -foy -foyaite -foyaitic -foyboat -foyer -foziness -fozy -fra -frab -frabbit -frabjous -frabjously -frabous -fracas -fracedinous -frache -frack -fractable -fractabling -fracted -Fracticipita -fractile -fraction -fractional -fractionalism -fractionalize -fractionally -fractionary -fractionate -fractionating -fractionation -fractionator -fractionization -fractionize -fractionlet -fractious -fractiously -fractiousness -fractocumulus -fractonimbus -fractostratus -fractuosity -fracturable -fractural -fracture -fractureproof -frae -Fragaria -fraghan -Fragilaria -Fragilariaceae -fragile -fragilely -fragileness -fragility -fragment -fragmental -fragmentally -fragmentarily -fragmentariness -fragmentary -fragmentation -fragmented -fragmentist -fragmentitious -fragmentize -fragrance -fragrancy -fragrant -fragrantly -fragrantness -fraid -fraik -frail -frailejon -frailish -frailly -frailness -frailty -fraise -fraiser -Fram -framable -framableness -frambesia -frame -framea -frameable -frameableness -framed -frameless -framer -framesmith -framework -framing -frammit -frampler -frampold -franc -Frances -franchisal -franchise -franchisement -franchiser -Francic -Francis -francisc -francisca -Franciscan -Franciscanism -Francisco -francium -Francize -franco -Francois -francolin -francolite -Francomania -Franconian -Francophile -Francophilism -Francophobe -Francophobia -frangent -Frangi -frangibility -frangible -frangibleness -frangipane -frangipani -frangula -Frangulaceae -frangulic -frangulin -frangulinic -Frank -frank -frankability -frankable -frankalmoign -Frankenia -Frankeniaceae -frankeniaceous -Frankenstein -franker -frankfurter -frankhearted -frankheartedly -frankheartedness -Frankify -frankincense -frankincensed -franking -Frankish -Frankist -franklandite -Franklin -franklin -Franklinia -Franklinian -Frankliniana -Franklinic -Franklinism -Franklinist -franklinite -Franklinization -frankly -frankmarriage -frankness -frankpledge -frantic -frantically -franticly -franticness -franzy -frap -frappe -frapping -frasco -frase -Frasera -frasier -frass -frat -fratch -fratched -fratcheous -fratcher -fratchety -fratchy -frater -Fratercula -fraternal -fraternalism -fraternalist -fraternality -fraternally -fraternate -fraternation -fraternism -fraternity -fraternization -fraternize -fraternizer -fratery -Fraticelli -Fraticellian -fratority -Fratricelli -fratricidal -fratricide -fratry -fraud -fraudful -fraudfully -fraudless -fraudlessly -fraudlessness -fraudproof -fraudulence -fraudulency -fraudulent -fraudulently -fraudulentness -fraughan -fraught -frawn -fraxetin -fraxin -fraxinella -Fraxinus -fray -frayed -frayedly -frayedness -fraying -frayn -frayproof -fraze -frazer -frazil -frazzle -frazzling -freak -freakdom -freakery -freakful -freakily -freakiness -freakish -freakishly -freakishness -freaky -fream -freath -freck -frecken -freckened -frecket -freckle -freckled -freckledness -freckleproof -freckling -frecklish -freckly -Fred -Freddie -Freddy -Frederic -Frederica -Frederick -frederik -fredricite -free -freeboard -freeboot -freebooter -freebootery -freebooting -freeborn -Freechurchism -freed -freedman -freedom -freedwoman -freehand -freehanded -freehandedly -freehandedness -freehearted -freeheartedly -freeheartedness -freehold -freeholder -freeholdership -freeholding -freeing -freeish -Freekirker -freelage -freeloving -freelovism -freely -freeman -freemanship -freemartin -freemason -freemasonic -freemasonical -freemasonism -freemasonry -freeness -freer -Freesia -freesilverism -freesilverite -freestanding -freestone -freet -freethinker -freethinking -freetrader -freety -freeward -freeway -freewheel -freewheeler -freewheeling -freewill -freewoman -freezable -freeze -freezer -freezing -freezingly -Fregata -Fregatae -Fregatidae -freibergite -freieslebenite -freight -freightage -freighter -freightless -freightment -freir -freit -freity -fremd -fremdly -fremdness -fremescence -fremescent -fremitus -Fremontia -Fremontodendron -frenal -Frenatae -frenate -French -frenched -Frenchification -frenchification -Frenchify -frenchify -Frenchily -Frenchiness -frenching -Frenchism -Frenchize -Frenchless -Frenchly -Frenchman -Frenchness -Frenchwise -Frenchwoman -Frenchy -frenetic -frenetical -frenetically -Frenghi -frenular -frenulum -frenum -frenzelite -frenzied -frenziedly -frenzy -Freon -frequence -frequency -frequent -frequentable -frequentage -frequentation -frequentative -frequenter -frequently -frequentness -frescade -fresco -frescoer -frescoist -fresh -freshen -freshener -freshet -freshhearted -freshish -freshly -freshman -freshmanhood -freshmanic -freshmanship -freshness -freshwoman -Fresison -fresnel -fresno -fret -fretful -fretfully -fretfulness -fretless -fretsome -frett -frettage -frettation -frette -fretted -fretter -fretting -frettingly -fretty -fretum -fretways -fretwise -fretwork -fretworked -Freudian -Freudianism -Freudism -Freudist -Freya -freyalite -Freycinetia -Freyja -Freyr -friability -friable -friableness -friand -friandise -friar -friarbird -friarhood -friarling -friarly -friary -frib -fribble -fribbleism -fribbler -fribblery -fribbling -fribblish -fribby -fricandeau -fricandel -fricassee -frication -fricative -fricatrice -friction -frictionable -frictional -frictionally -frictionize -frictionless -frictionlessly -frictionproof -Friday -Fridila -fridstool -fried -Frieda -friedcake -friedelite -friedrichsdor -friend -friended -friendless -friendlessness -friendlike -friendlily -friendliness -friendliwise -friendly -friendship -frier -frieseite -Friesian -Friesic -Friesish -frieze -friezer -friezy -frig -frigate -frigatoon -friggle -fright -frightable -frighten -frightenable -frightened -frightenedly -frightenedness -frightener -frightening -frighteningly -frighter -frightful -frightfully -frightfulness -frightless -frightment -frighty -frigid -Frigidaire -frigidarium -frigidity -frigidly -frigidness -frigiferous -frigolabile -frigoric -frigorific -frigorifical -frigorify -frigorimeter -frigostable -frigotherapy -Frija -frijol -frijolillo -frijolito -frike -frill -frillback -frilled -friller -frillery -frillily -frilliness -frilling -frilly -frim -Frimaire -fringe -fringed -fringeflower -fringeless -fringelet -fringent -fringepod -Fringetail -Fringilla -fringillaceous -Fringillidae -fringilliform -Fringilliformes -fringilline -fringilloid -fringing -fringy -fripperer -frippery -frisca -Frisesomorum -frisette -Frisian -Frisii -frisk -frisker -frisket -friskful -friskily -friskiness -frisking -friskingly -frisky -frisolee -frison -frist -frisure -frit -frith -frithborh -frithbot -frithles -frithsoken -frithstool -frithwork -Fritillaria -fritillary -fritt -fritter -fritterer -Fritz -Friulian -frivol -frivoler -frivolism -frivolist -frivolity -frivolize -frivolous -frivolously -frivolousness -frixion -friz -frize -frizer -frizz -frizzer -frizzily -frizziness -frizzing -frizzle -frizzler -frizzly -frizzy -fro -frock -frocking -frockless -frocklike -frockmaker -froe -Froebelian -Froebelism -Froebelist -frog -frogbit -frogeater -frogeye -frogface -frogfish -frogflower -frogfoot -frogged -froggery -frogginess -frogging -froggish -froggy -froghood -froghopper -frogland -frogleaf -frogleg -froglet -froglike -frogling -frogman -frogmouth -frognose -frogskin -frogstool -frogtongue -frogwort -froise -frolic -frolicful -frolicker -frolicky -frolicly -frolicness -frolicsome -frolicsomely -frolicsomeness -from -fromward -fromwards -frond -frondage -fronded -frondent -frondesce -frondescence -frondescent -frondiferous -frondiform -frondigerous -frondivorous -frondlet -frondose -frondosely -frondous -front -frontad -frontage -frontager -frontal -frontalis -frontality -frontally -frontbencher -fronted -fronter -frontier -frontierlike -frontierman -frontiersman -Frontignan -fronting -frontingly -Frontirostria -frontispiece -frontless -frontlessly -frontlessness -frontlet -frontoauricular -frontoethmoid -frontogenesis -frontolysis -frontomallar -frontomaxillary -frontomental -frontonasal -frontooccipital -frontoorbital -frontoparietal -frontopontine -frontosphenoidal -frontosquamosal -frontotemporal -frontozygomatic -frontpiece -frontsman -frontstall -frontward -frontways -frontwise -froom -frore -frory -frosh -frost -frostation -frostbird -frostbite -frostbow -frosted -froster -frostfish -frostflower -frostily -frostiness -frosting -frostless -frostlike -frostproof -frostproofing -frostroot -frostweed -frostwork -frostwort -frosty -frot -froth -frother -Frothi -frothily -frothiness -frothing -frothless -frothsome -frothy -frotton -froufrou -frough -froughy -frounce -frounceless -frow -froward -frowardly -frowardness -frower -frowl -frown -frowner -frownful -frowning -frowningly -frownless -frowny -frowst -frowstily -frowstiness -frowsty -frowy -frowze -frowzily -frowziness -frowzled -frowzly -frowzy -froze -frozen -frozenhearted -frozenly -frozenness -fruchtschiefer -fructed -fructescence -fructescent -fructicultural -fructiculture -Fructidor -fructiferous -fructiferously -fructification -fructificative -fructifier -fructiform -fructify -fructiparous -fructivorous -fructose -fructoside -fructuary -fructuosity -fructuous -fructuously -fructuousness -frugal -frugalism -frugalist -frugality -frugally -frugalness -fruggan -Frugivora -frugivorous -fruit -fruitade -fruitage -fruitarian -fruitarianism -fruitcake -fruited -fruiter -fruiterer -fruiteress -fruitery -fruitful -fruitfullness -fruitfully -fruitgrower -fruitgrowing -fruitiness -fruiting -fruition -fruitist -fruitive -fruitless -fruitlessly -fruitlessness -fruitlet -fruitling -fruitstalk -fruittime -fruitwise -fruitwoman -fruitwood -fruitworm -fruity -frumentaceous -frumentarious -frumentation -frumenty -frump -frumpery -frumpily -frumpiness -frumpish -frumpishly -frumpishness -frumple -frumpy -frush -frustrate -frustrately -frustrater -frustration -frustrative -frustratory -frustule -frustulent -frustulose -frustum -frutescence -frutescent -fruticetum -fruticose -fruticous -fruticulose -frutify -fry -fryer -fu -fub -fubby -fubsy -Fucaceae -fucaceous -Fucales -fucate -fucation -fucatious -Fuchsia -Fuchsian -fuchsin -fuchsine -fuchsinophil -fuchsinophilous -fuchsite -fuchsone -fuci -fucinita -fuciphagous -fucoid -fucoidal -Fucoideae -fucosan -fucose -fucous -fucoxanthin -fucus -fud -fuddle -fuddler -fuder -fudge -fudger -fudgy -Fuegian -fuel -fueler -fuelizer -fuerte -fuff -fuffy -fugacious -fugaciously -fugaciousness -fugacity -fugal -fugally -fuggy -fugient -fugitate -fugitation -fugitive -fugitively -fugitiveness -fugitivism -fugitivity -fugle -fugleman -fuglemanship -fugler -fugu -fugue -fuguist -fuidhir -fuirdays -Fuirena -fuji -Fulah -fulciform -fulcral -fulcrate -fulcrum -fulcrumage -fulfill -fulfiller -fulfillment -Fulfulde -fulgent -fulgently -fulgentness -fulgid -fulgide -fulgidity -fulgor -Fulgora -fulgorid -Fulgoridae -Fulgoroidea -fulgorous -Fulgur -fulgural -fulgurant -fulgurantly -fulgurata -fulgurate -fulgurating -fulguration -fulgurator -fulgurite -fulgurous -fulham -Fulica -Fulicinae -fulicine -fuliginosity -fuliginous -fuliginously -fuliginousness -Fuligula -Fuligulinae -fuliguline -fulk -full -fullam -fullback -fuller -fullering -fullery -fullface -fullhearted -fulling -fullish -fullmouth -fullmouthed -fullmouthedly -fullness -fullom -Fullonian -fully -fulmar -Fulmarus -fulmicotton -fulminancy -fulminant -fulminate -fulminating -fulmination -fulminator -fulminatory -fulmine -fulmineous -fulminic -fulminous -fulminurate -fulminuric -fulsome -fulsomely -fulsomeness -fulth -Fultz -Fulup -fulvene -fulvescent -fulvid -fulvidness -fulvous -fulwa -fulyie -fulzie -fum -fumacious -fumado -fumage -fumagine -Fumago -fumarate -Fumaria -Fumariaceae -fumariaceous -fumaric -fumarine -fumarium -fumaroid -fumaroidal -fumarole -fumarolic -fumaryl -fumatorium -fumatory -fumble -fumbler -fumbling -fume -fumeless -fumer -fumeroot -fumet -fumette -fumewort -fumiduct -fumiferous -fumigant -fumigate -fumigation -fumigator -fumigatorium -fumigatory -fumily -fuminess -fuming -fumingly -fumistery -fumitory -fumose -fumosity -fumous -fumously -fumy -fun -funambulate -funambulation -funambulator -funambulatory -funambulic -funambulism -funambulist -funambulo -Funaria -Funariaceae -funariaceous -function -functional -functionalism -functionalist -functionality -functionalize -functionally -functionarism -functionary -functionate -functionation -functionize -functionless -fund -fundable -fundal -fundament -fundamental -fundamentalism -fundamentalist -fundamentality -fundamentally -fundamentalness -fundatorial -fundatrix -funded -funder -fundholder -fundi -fundic -fundiform -funditor -fundless -fundmonger -fundmongering -funds -Fundulinae -funduline -Fundulus -fundungi -fundus -funebrial -funeral -funeralize -funerary -funereal -funereally -funest -fungaceous -fungal -Fungales -fungate -fungation -fungi -Fungia -fungian -fungibility -fungible -fungic -fungicidal -fungicide -fungicolous -fungiferous -fungiform -fungilliform -fungin -fungistatic -fungivorous -fungo -fungoid -fungoidal -fungological -fungologist -fungology -fungose -fungosity -fungous -fungus -fungused -funguslike -fungusy -funicle -funicular -funiculate -funicule -funiculitis -funiculus -funiform -funipendulous -funis -Funje -funk -funker -Funkia -funkiness -funky -funmaker -funmaking -funnel -funneled -funnelform -funnellike -funnelwise -funnily -funniment -funniness -funny -funnyman -funori -funt -Funtumia -Fur -fur -furacious -furaciousness -furacity -fural -furaldehyde -furan -furanoid -furazan -furazane -furbelow -furbish -furbishable -furbisher -furbishment -furca -furcal -furcate -furcately -furcation -Furcellaria -furcellate -furciferine -furciferous -furciform -Furcraea -furcula -furcular -furculum -furdel -Furfooz -furfur -furfuraceous -furfuraceously -furfural -furfuralcohol -furfuraldehyde -furfuramide -furfuran -furfuration -furfurine -furfuroid -furfurole -furfurous -furfuryl -furfurylidene -furiant -furibund -furied -Furies -furify -furil -furilic -furiosa -furiosity -furioso -furious -furiously -furiousness -furison -furl -furlable -Furlan -furler -furless -furlong -furlough -furnace -furnacelike -furnaceman -furnacer -furnacite -furnage -Furnariidae -Furnariides -Furnarius -furner -furnish -furnishable -furnished -furnisher -furnishing -furnishment -furniture -furnitureless -furodiazole -furoic -furoid -furoin -furole -furomethyl -furomonazole -furor -furore -furphy -furred -furrier -furriered -furriery -furrily -furriness -furring -furrow -furrower -furrowless -furrowlike -furrowy -furry -furstone -further -furtherance -furtherer -furtherest -furtherly -furthermore -furthermost -furthersome -furthest -furtive -furtively -furtiveness -Furud -furuncle -furuncular -furunculoid -furunculosis -furunculous -fury -furyl -furze -furzechat -furzed -furzeling -furzery -furzetop -furzy -fusain -fusarial -fusariose -fusariosis -Fusarium -fusarole -fusate -fusc -fuscescent -fuscin -fuscohyaline -fuscous -fuse -fuseboard -fused -fusee -fuselage -fuseplug -fusht -fusibility -fusible -fusibleness -fusibly -Fusicladium -Fusicoccum -fusiform -Fusiformis -fusil -fusilier -fusillade -fusilly -fusinist -fusion -fusional -fusionism -fusionist -fusionless -fusoid -fuss -fusser -fussification -fussify -fussily -fussiness -fussock -fussy -fust -fustanella -fustee -fusteric -fustet -fustian -fustianish -fustianist -fustianize -fustic -fustigate -fustigation -fustigator -fustigatory -fustilugs -fustily -fustin -fustiness -fustle -fusty -Fusulina -fusuma -fusure -Fusus -fut -futchel -fute -futhorc -futile -futilely -futileness -futilitarian -futilitarianism -futility -futilize -futtermassel -futtock -futural -future -futureless -futureness -futuric -futurism -futurist -futuristic -futurition -futurity -futurize -futwa -fuye -fuze -fuzz -fuzzball -fuzzily -fuzziness -fuzzy -fyke -fylfot -fyrd -G -g -Ga -ga -gab -gabardine -gabbard -gabber -gabble -gabblement -gabbler -gabbro -gabbroic -gabbroid -gabbroitic -gabby -Gabe -gabelle -gabelled -gabelleman -gabeller -gaberdine -gaberlunzie -gabgab -gabi -gabion -gabionade -gabionage -gabioned -gablatores -gable -gableboard -gablelike -gablet -gablewise -gablock -Gaboon -Gabriel -Gabriella -Gabrielrache -Gabunese -gaby -Gad -gad -Gadaba -gadabout -Gadarene -Gadaria -gadbee -gadbush -Gaddang -gadded -gadder -Gaddi -gaddi -gadding -gaddingly -gaddish -gaddishness -gade -gadfly -gadge -gadger -gadget -gadid -Gadidae -gadinine -Gaditan -gadling -gadman -gadoid -Gadoidea -gadolinia -gadolinic -gadolinite -gadolinium -gadroon -gadroonage -Gadsbodikins -Gadsbud -Gadslid -gadsman -Gadswoons -gaduin -Gadus -gadwall -Gadzooks -Gael -Gaeldom -Gaelic -Gaelicism -Gaelicist -Gaelicization -Gaelicize -Gaeltacht -gaen -Gaertnerian -gaet -Gaetulan -Gaetuli -Gaetulian -gaff -gaffe -gaffer -Gaffkya -gaffle -gaffsman -gag -gagate -gage -gageable -gagee -gageite -gagelike -gager -gagership -gagger -gaggery -gaggle -gaggler -gagman -gagor -gagroot -gagtooth -gahnite -Gahrwali -Gaia -gaiassa -Gaidropsaridae -gaiety -Gail -Gaillardia -gaily -gain -gainable -gainage -gainbirth -gaincall -gaincome -gaine -gainer -gainful -gainfully -gainfulness -gaining -gainless -gainlessness -gainliness -gainly -gains -gainsay -gainsayer -gainset -gainsome -gainspeaker -gainspeaking -gainst -gainstrive -gainturn -gaintwist -gainyield -gair -gairfish -gaisling -gait -gaited -gaiter -gaiterless -gaiting -gaize -gaj -gal -gala -Galacaceae -galactagogue -galactagoguic -galactan -galactase -galactemia -galacthidrosis -Galactia -galactic -galactidrosis -galactite -galactocele -galactodendron -galactodensimeter -galactogenetic -galactohemia -galactoid -galactolipide -galactolipin -galactolysis -galactolytic -galactoma -galactometer -galactometry -galactonic -galactopathy -galactophagist -galactophagous -galactophlebitis -galactophlysis -galactophore -galactophoritis -galactophorous -galactophthysis -galactophygous -galactopoiesis -galactopoietic -galactopyra -galactorrhea -galactorrhoea -galactoscope -galactose -galactoside -galactosis -galactostasis -galactosuria -galactotherapy -galactotrophy -galacturia -galagala -Galaginae -Galago -galah -galanas -galanga -galangin -galant -Galanthus -galantine -galany -galapago -Galatae -galatea -Galatian -Galatic -galatotrophic -Galax -galaxian -Galaxias -Galaxiidae -galaxy -galban -galbanum -Galbula -Galbulae -Galbulidae -Galbulinae -galbulus -Galcha -Galchic -Gale -gale -galea -galeage -galeate -galeated -galee -galeeny -Galega -galegine -Galei -galeid -Galeidae -galeiform -galempung -Galen -galena -Galenian -Galenic -galenic -Galenical -galenical -Galenism -Galenist -galenite -galenobismutite -galenoid -Galeodes -Galeodidae -galeoid -Galeopithecus -Galeopsis -Galeorchis -Galeorhinidae -Galeorhinus -galeproof -galera -galericulate -galerum -galerus -Galesaurus -galet -Galeus -galewort -galey -Galga -galgal -Galgulidae -gali -Galibi -Galician -Galictis -Galidia -Galidictis -Galik -Galilean -galilee -galimatias -galingale -Galinsoga -galiongee -galiot -galipidine -galipine -galipoidin -galipoidine -galipoipin -galipot -Galium -gall -Galla -galla -gallacetophenone -gallah -gallanilide -gallant -gallantize -gallantly -gallantness -gallantry -gallate -gallature -gallberry -gallbush -galleass -galled -Gallegan -gallein -galleon -galler -Galleria -gallerian -galleried -Galleriidae -gallery -gallerylike -gallet -galley -galleylike -galleyman -galleyworm -gallflower -gallfly -Galli -galliambic -galliambus -Gallian -galliard -galliardise -galliardly -galliardness -Gallic -gallic -Gallican -Gallicanism -Gallicism -Gallicization -Gallicize -Gallicizer -gallicola -Gallicolae -gallicole -gallicolous -galliferous -Gallification -gallification -galliform -Galliformes -Gallify -galligaskin -gallimaufry -Gallinaceae -gallinacean -Gallinacei -gallinaceous -Gallinae -Gallinago -gallinazo -galline -galling -gallingly -gallingness -gallinipper -Gallinula -gallinule -Gallinulinae -gallinuline -gallipot -Gallirallus -gallisin -gallium -gallivant -gallivanter -gallivat -gallivorous -galliwasp -gallnut -gallocyanin -gallocyanine -galloflavine -galloglass -Galloman -Gallomania -Gallomaniac -gallon -gallonage -galloner -galloon -gallooned -gallop -gallopade -galloper -Galloperdix -Gallophile -Gallophilism -Gallophobe -Gallophobia -galloping -galloptious -gallotannate -gallotannic -gallotannin -gallous -Gallovidian -Galloway -galloway -gallowglass -gallows -gallowsmaker -gallowsness -gallowsward -gallstone -Gallus -galluses -gallweed -gallwort -gally -gallybagger -gallybeggar -gallycrow -Galoisian -galoot -galop -galore -galosh -galp -galravage -galravitch -galt -Galtonia -Galtonian -galuchat -galumph -galumptious -Galusha -galuth -galvanic -galvanical -galvanically -galvanism -galvanist -galvanization -galvanize -galvanized -galvanizer -galvanocauterization -galvanocautery -galvanocontractility -galvanofaradization -galvanoglyph -galvanoglyphy -galvanograph -galvanographic -galvanography -galvanologist -galvanology -galvanolysis -galvanomagnet -galvanomagnetic -galvanomagnetism -galvanometer -galvanometric -galvanometrical -galvanometrically -galvanometry -galvanoplastic -galvanoplastical -galvanoplastically -galvanoplastics -galvanoplasty -galvanopsychic -galvanopuncture -galvanoscope -galvanoscopic -galvanoscopy -galvanosurgery -galvanotactic -galvanotaxis -galvanotherapy -galvanothermometer -galvanothermy -galvanotonic -galvanotropic -galvanotropism -galvayne -galvayning -Galways -Galwegian -galyac -galyak -galziekte -gam -gamahe -Gamaliel -gamashes -gamasid -Gamasidae -Gamasoidea -gamb -gamba -gambade -gambado -gambang -gambeer -gambeson -gambet -gambette -gambia -gambier -gambist -gambit -gamble -gambler -gamblesome -gamblesomeness -gambling -gambodic -gamboge -gambogian -gambogic -gamboised -gambol -gambrel -gambreled -gambroon -Gambusia -gamdeboo -game -gamebag -gameball -gamecock -gamecraft -gameful -gamekeeper -gamekeeping -gamelang -gameless -gamelike -Gamelion -gamelotte -gamely -gamene -gameness -gamesome -gamesomely -gamesomeness -gamester -gamestress -gametal -gametange -gametangium -gamete -gametic -gametically -gametocyst -gametocyte -gametogenesis -gametogenic -gametogenous -gametogeny -gametogonium -gametogony -gametoid -gametophagia -gametophore -gametophyll -gametophyte -gametophytic -gamic -gamily -gamin -gaminesque -gaminess -gaming -gaminish -gamma -gammacism -gammacismus -gammadion -gammarid -Gammaridae -gammarine -gammaroid -Gammarus -gammation -gammelost -gammer -gammerel -gammerstang -Gammexane -gammick -gammock -gammon -gammoner -gammoning -gammy -gamobium -gamodesmic -gamodesmy -gamogenesis -gamogenetic -gamogenetical -gamogenetically -gamogony -Gamolepis -gamomania -gamont -Gamopetalae -gamopetalous -gamophagia -gamophagy -gamophyllous -gamori -gamosepalous -gamostele -gamostelic -gamostely -gamotropic -gamotropism -gamp -gamphrel -gamut -gamy -gan -ganam -ganancial -Ganapati -ganch -Ganda -gander -ganderess -gandergoose -gandermooner -ganderteeth -Gandhara -Gandharva -Gandhiism -Gandhism -Gandhist -gandul -gandum -gandurah -gane -ganef -gang -Ganga -ganga -Gangamopteris -gangan -gangava -gangboard -gangdom -gange -ganger -Gangetic -ganggang -ganging -gangism -gangland -ganglander -ganglia -gangliac -ganglial -gangliar -gangliasthenia -gangliate -gangliated -gangliectomy -gangliform -gangliitis -gangling -ganglioblast -gangliocyte -ganglioform -ganglioid -ganglioma -ganglion -ganglionary -ganglionate -ganglionectomy -ganglioneural -ganglioneure -ganglioneuroma -ganglioneuron -ganglionic -ganglionitis -ganglionless -ganglioplexus -gangly -gangman -gangmaster -gangplank -gangrel -gangrene -gangrenescent -gangrenous -gangsman -gangster -gangsterism -gangtide -gangue -Ganguela -gangway -gangwayman -ganister -ganja -ganner -gannet -Ganocephala -ganocephalan -ganocephalous -ganodont -Ganodonta -Ganodus -ganoid -ganoidal -ganoidean -Ganoidei -ganoidian -ganoin -ganomalite -ganophyllite -ganosis -Ganowanian -gansel -gansey -gansy -gant -ganta -gantang -gantlet -gantline -ganton -gantries -gantry -gantryman -gantsl -Ganymede -Ganymedes -ganza -ganzie -gaol -gaolbird -gaoler -Gaon -Gaonate -Gaonic -gap -Gapa -gapa -gape -gaper -gapes -gapeseed -gapeworm -gaping -gapingly -gapingstock -gapo -gappy -gapy -gar -gara -garabato -garad -garage -garageman -Garamond -garance -garancine -garapata -garava -garavance -garawi -garb -garbage -garbardine -garbel -garbell -garbill -garble -garbleable -garbler -garbless -garbling -garboard -garboil -garbure -garce -Garcinia -gardant -gardeen -garden -gardenable -gardencraft -gardened -gardener -gardenership -gardenesque -gardenful -gardenhood -Gardenia -gardenin -gardening -gardenize -gardenless -gardenlike -gardenly -gardenmaker -gardenmaking -gardenwards -gardenwise -gardeny -garderobe -gardevin -gardy -gardyloo -gare -garefowl -gareh -garetta -garewaite -garfish -garganey -Gargantua -Gargantuan -garget -gargety -gargle -gargol -gargoyle -gargoyled -gargoyley -gargoylish -gargoylishly -gargoylism -Garhwali -garial -gariba -garibaldi -Garibaldian -garish -garishly -garishness -garland -garlandage -garlandless -garlandlike -garlandry -garlandwise -garle -garlic -garlicky -garliclike -garlicmonger -garlicwort -garment -garmentless -garmentmaker -garmenture -garmentworker -garn -garnel -garner -garnerage -garnet -garnetberry -garneter -garnetiferous -garnets -garnett -garnetter -garnetwork -garnetz -garnice -garniec -garnierite -garnish -garnishable -garnished -garnishee -garnisheement -garnisher -garnishment -garnishry -garniture -Garo -garoo -garookuh -garrafa -garran -Garret -garret -garreted -garreteer -garretmaster -garrison -Garrisonian -Garrisonism -garrot -garrote -garroter -Garrulinae -garruline -garrulity -garrulous -garrulously -garrulousness -Garrulus -garrupa -Garrya -Garryaceae -garse -Garshuni -garsil -garston -garten -garter -gartered -gartering -garterless -garth -garthman -Garuda -garum -garvanzo -garvey -garvock -Gary -gas -Gasan -gasbag -gascoigny -Gascon -gasconade -gasconader -Gasconism -gascromh -gaseity -gaselier -gaseosity -gaseous -gaseousness -gasfiring -gash -gashes -gashful -gashliness -gashly -gasholder -gashouse -gashy -gasifiable -gasification -gasifier -gasiform -gasify -gasket -gaskin -gasking -gaskins -gasless -gaslight -gaslighted -gaslighting -gaslit -gaslock -gasmaker -gasman -gasogenic -gasoliery -gasoline -gasolineless -gasoliner -gasometer -gasometric -gasometrical -gasometry -gasp -Gaspar -gasparillo -gasper -gaspereau -gaspergou -gaspiness -gasping -gaspingly -gasproof -gaspy -gasser -Gasserian -gassiness -gassing -gassy -gast -gastaldite -gastaldo -gaster -gasteralgia -Gasterolichenes -gasteromycete -Gasteromycetes -gasteromycetous -Gasterophilus -gasteropod -Gasteropoda -gasterosteid -Gasterosteidae -gasterosteiform -gasterosteoid -Gasterosteus -gasterotheca -gasterothecal -Gasterotricha -gasterotrichan -gasterozooid -gastight -gastightness -Gastornis -Gastornithidae -gastradenitis -gastraea -gastraead -Gastraeadae -gastraeal -gastraeum -gastral -gastralgia -gastralgic -gastralgy -gastraneuria -gastrasthenia -gastratrophia -gastrectasia -gastrectasis -gastrectomy -gastrelcosis -gastric -gastricism -gastrilegous -gastriloquial -gastriloquism -gastriloquist -gastriloquous -gastriloquy -gastrin -gastritic -gastritis -gastroadenitis -gastroadynamic -gastroalbuminorrhea -gastroanastomosis -gastroarthritis -gastroatonia -gastroatrophia -gastroblennorrhea -gastrocatarrhal -gastrocele -gastrocentrous -Gastrochaena -Gastrochaenidae -gastrocnemial -gastrocnemian -gastrocnemius -gastrocoel -gastrocolic -gastrocoloptosis -gastrocolostomy -gastrocolotomy -gastrocolpotomy -gastrocystic -gastrocystis -gastrodialysis -gastrodiaphanoscopy -gastrodidymus -gastrodisk -gastroduodenal -gastroduodenitis -gastroduodenoscopy -gastroduodenotomy -gastrodynia -gastroelytrotomy -gastroenteralgia -gastroenteric -gastroenteritic -gastroenteritis -gastroenteroanastomosis -gastroenterocolitis -gastroenterocolostomy -gastroenterological -gastroenterologist -gastroenterology -gastroenteroptosis -gastroenterostomy -gastroenterotomy -gastroepiploic -gastroesophageal -gastroesophagostomy -gastrogastrotomy -gastrogenital -gastrograph -gastrohelcosis -gastrohepatic -gastrohepatitis -gastrohydrorrhea -gastrohyperneuria -gastrohypertonic -gastrohysterectomy -gastrohysteropexy -gastrohysterorrhaphy -gastrohysterotomy -gastroid -gastrointestinal -gastrojejunal -gastrojejunostomy -gastrolater -gastrolatrous -gastrolienal -gastrolith -Gastrolobium -gastrologer -gastrological -gastrologist -gastrology -gastrolysis -gastrolytic -gastromalacia -gastromancy -gastromelus -gastromenia -gastromyces -gastromycosis -gastromyxorrhea -gastronephritis -gastronome -gastronomer -gastronomic -gastronomical -gastronomically -gastronomist -gastronomy -gastronosus -gastropancreatic -gastropancreatitis -gastroparalysis -gastroparesis -gastroparietal -gastropathic -gastropathy -gastroperiodynia -gastropexy -gastrophile -gastrophilism -gastrophilist -gastrophilite -Gastrophilus -gastrophrenic -gastrophthisis -gastroplasty -gastroplenic -gastropleuritis -gastroplication -gastropneumatic -gastropneumonic -gastropod -Gastropoda -gastropodan -gastropodous -gastropore -gastroptosia -gastroptosis -gastropulmonary -gastropulmonic -gastropyloric -gastrorrhagia -gastrorrhaphy -gastrorrhea -gastroschisis -gastroscope -gastroscopic -gastroscopy -gastrosoph -gastrosopher -gastrosophy -gastrospasm -gastrosplenic -gastrostaxis -gastrostegal -gastrostege -gastrostenosis -gastrostomize -Gastrostomus -gastrostomy -gastrosuccorrhea -gastrotheca -gastrothecal -gastrotome -gastrotomic -gastrotomy -Gastrotricha -gastrotrichan -gastrotubotomy -gastrotympanites -gastrovascular -gastroxynsis -gastrozooid -gastrula -gastrular -gastrulate -gastrulation -gasworker -gasworks -gat -gata -gatch -gatchwork -gate -gateado -gateage -gated -gatehouse -gatekeeper -gateless -gatelike -gatemaker -gateman -gatepost -gater -gatetender -gateward -gatewards -gateway -gatewayman -gatewise -gatewoman -gateworks -gatewright -Gatha -gather -gatherable -gatherer -gathering -Gathic -gating -gator -gatter -gatteridge -gau -gaub -gauby -gauche -gauchely -gaucheness -gaucherie -Gaucho -gaud -gaudery -Gaudete -gaudful -gaudily -gaudiness -gaudless -gaudsman -gaudy -gaufer -gauffer -gauffered -gauffre -gaufre -gaufrette -gauge -gaugeable -gauger -gaugership -gauging -Gaul -gaulding -gauleiter -Gaulic -gaulin -Gaulish -Gaullism -Gaullist -Gault -gault -gaulter -gaultherase -Gaultheria -gaultherin -gaum -gaumish -gaumless -gaumlike -gaumy -gaun -gaunt -gaunted -gauntlet -gauntleted -gauntly -gauntness -gauntry -gaunty -gaup -gaupus -gaur -Gaura -Gaurian -gaus -gauss -gaussage -gaussbergite -Gaussian -gauster -gausterer -gaut -gauteite -gauze -gauzelike -gauzewing -gauzily -gauziness -gauzy -gavall -gave -gavel -gaveler -gavelkind -gavelkinder -gavelman -gavelock -Gavia -Gaviae -gavial -Gavialis -gavialoid -Gaviiformes -gavotte -gavyuti -gaw -gawby -gawcie -gawk -gawkhammer -gawkihood -gawkily -gawkiness -gawkish -gawkishly -gawkishness -gawky -gawm -gawn -gawney -gawsie -gay -gayal -gayatri -gaybine -gaycat -gaydiang -gayish -Gaylussacia -gaylussite -gayment -gayness -Gaypoo -gaysome -gaywings -gayyou -gaz -gazabo -gazangabin -Gazania -gaze -gazebo -gazee -gazehound -gazel -gazeless -Gazella -gazelle -gazelline -gazement -gazer -gazettal -gazette -gazetteer -gazetteerage -gazetteerish -gazetteership -gazi -gazing -gazingly -gazingstock -gazogene -gazon -gazophylacium -gazy -gazzetta -Ge -ge -Geadephaga -geadephagous -geal -gean -geanticlinal -geanticline -gear -gearbox -geared -gearing -gearksutite -gearless -gearman -gearset -gearshift -gearwheel -gease -geason -Geaster -Geat -geat -Geatas -gebang -gebanga -gebbie -gebur -Gecarcinidae -Gecarcinus -geck -gecko -geckoid -geckotian -geckotid -Geckotidae -geckotoid -Ged -ged -gedackt -gedanite -gedder -gedeckt -gedecktwork -Gederathite -Gederite -gedrite -Gee -gee -geebong -geebung -Geechee -geejee -geek -geelbec -geeldikkop -geelhout -geepound -geerah -geest -geet -Geez -geezer -Gegenschein -gegg -geggee -gegger -geggery -Geheimrat -Gehenna -gehlenite -Geikia -geikielite -gein -geira -Geisenheimer -geisha -geison -geisotherm -geisothermal -Geissoloma -Geissolomataceae -Geissolomataceous -Geissorhiza -geissospermin -geissospermine -geitjie -geitonogamous -geitonogamy -Gekko -Gekkones -gekkonid -Gekkonidae -gekkonoid -Gekkota -gel -gelable -gelada -gelandejump -gelandelaufer -gelandesprung -Gelasian -Gelasimus -gelastic -Gelastocoridae -gelatification -gelatigenous -gelatin -gelatinate -gelatination -gelatined -gelatiniferous -gelatiniform -gelatinify -gelatinigerous -gelatinity -gelatinizability -gelatinizable -gelatinization -gelatinize -gelatinizer -gelatinobromide -gelatinochloride -gelatinoid -gelatinotype -gelatinous -gelatinously -gelatinousness -gelation -gelatose -geld -geldability -geldable -geldant -gelder -gelding -Gelechia -gelechiid -Gelechiidae -Gelfomino -gelid -Gelidiaceae -gelidity -Gelidium -gelidly -gelidness -gelignite -gelilah -gelinotte -gell -Gellert -gelly -gelogenic -gelong -geloscopy -gelose -gelosin -gelotherapy -gelotometer -gelotoscopy -gelototherapy -gelsemic -gelsemine -gelseminic -gelseminine -Gelsemium -gelt -gem -Gemara -Gemaric -Gemarist -gematria -gematrical -gemauve -gemel -gemeled -gemellione -gemellus -geminate -geminated -geminately -gemination -geminative -Gemini -Geminid -geminiflorous -geminiform -geminous -Gemitores -gemitorial -gemless -gemlike -Gemma -gemma -gemmaceous -gemmae -gemmate -gemmation -gemmative -gemmeous -gemmer -gemmiferous -gemmiferousness -gemmification -gemmiform -gemmily -gemminess -Gemmingia -gemmipara -gemmipares -gemmiparity -gemmiparous -gemmiparously -gemmoid -gemmology -gemmula -gemmulation -gemmule -gemmuliferous -gemmy -gemot -gemsbok -gemsbuck -gemshorn -gemul -gemuti -gemwork -gen -gena -genal -genapp -genapper -genarch -genarcha -genarchaship -genarchship -gendarme -gendarmery -gender -genderer -genderless -Gene -gene -genealogic -genealogical -genealogically -genealogist -genealogize -genealogizer -genealogy -genear -geneat -genecologic -genecological -genecologically -genecologist -genecology -geneki -genep -genera -generability -generable -generableness -general -generalate -generalcy -generale -generalia -Generalidad -generalific -generalism -generalissima -generalissimo -generalist -generalistic -generality -generalizable -generalization -generalize -generalized -generalizer -generall -generally -generalness -generalship -generalty -generant -generate -generating -generation -generational -generationism -generative -generatively -generativeness -generator -generatrix -generic -generical -generically -genericalness -generification -generosity -generous -generously -generousness -Genesee -geneserine -Genesiac -Genesiacal -genesial -genesic -genesiology -genesis -Genesitic -genesiurgic -genet -genethliac -genethliacal -genethliacally -genethliacon -genethliacs -genethlialogic -genethlialogical -genethlialogy -genethlic -genetic -genetical -genetically -geneticism -geneticist -genetics -genetmoil -genetous -Genetrix -genetrix -Genetta -Geneura -Geneva -geneva -Genevan -Genevese -Genevieve -Genevois -genevoise -genial -geniality -genialize -genially -genialness -genian -genic -genicular -geniculate -geniculated -geniculately -geniculation -geniculum -genie -genii -genin -genioglossal -genioglossi -genioglossus -geniohyoglossal -geniohyoglossus -geniohyoid -geniolatry -genion -genioplasty -genip -Genipa -genipa -genipap -genipapada -genisaro -Genista -genista -genistein -genital -genitalia -genitals -genitival -genitivally -genitive -genitocrural -genitofemoral -genitor -genitorial -genitory -genitourinary -geniture -genius -genizah -genizero -Genny -Genoa -genoblast -genoblastic -genocidal -genocide -Genoese -genoese -genom -genome -genomic -genonema -genos -genotype -genotypic -genotypical -genotypically -Genoveva -genovino -genre -genro -gens -genson -gent -genteel -genteelish -genteelism -genteelize -genteelly -genteelness -gentes -genthite -gentian -Gentiana -Gentianaceae -gentianaceous -Gentianales -gentianella -gentianic -gentianin -gentianose -gentianwort -gentile -gentiledom -gentilesse -gentilic -gentilism -gentilitial -gentilitian -gentilitious -gentility -gentilization -gentilize -gentiobiose -gentiopicrin -gentisein -gentisic -gentisin -gentle -gentlefolk -gentlehearted -gentleheartedly -gentleheartedness -gentlehood -gentleman -gentlemanhood -gentlemanism -gentlemanize -gentlemanlike -gentlemanlikeness -gentlemanliness -gentlemanly -gentlemanship -gentlemens -gentlemouthed -gentleness -gentlepeople -gentleship -gentlewoman -gentlewomanhood -gentlewomanish -gentlewomanlike -gentlewomanliness -gentlewomanly -gently -gentman -Gentoo -gentrice -gentry -genty -genu -genua -genual -genuclast -genuflect -genuflection -genuflector -genuflectory -genuflex -genuflexuous -genuine -genuinely -genuineness -genus -genyantrum -Genyophrynidae -genyoplasty -genys -geo -geoaesthesia -geoagronomic -geobiologic -geobiology -geobiont -geobios -geoblast -geobotanic -geobotanical -geobotanist -geobotany -geocarpic -geocentric -geocentrical -geocentrically -geocentricism -geocerite -geochemical -geochemist -geochemistry -geochronic -geochronology -geochrony -Geococcyx -geocoronium -geocratic -geocronite -geocyclic -geodaesia -geodal -geode -geodesic -geodesical -geodesist -geodesy -geodete -geodetic -geodetical -geodetically -geodetician -geodetics -geodiatropism -geodic -geodiferous -geodist -geoduck -geodynamic -geodynamical -geodynamics -geoethnic -Geoff -Geoffrey -geoffroyin -geoffroyine -geoform -geogenesis -geogenetic -geogenic -geogenous -geogeny -Geoglossaceae -Geoglossum -geoglyphic -geognosis -geognosist -geognost -geognostic -geognostical -geognostically -geognosy -geogonic -geogonical -geogony -geographer -geographic -geographical -geographically -geographics -geographism -geographize -geography -geohydrologist -geohydrology -geoid -geoidal -geoisotherm -geolatry -geologer -geologian -geologic -geological -geologically -geologician -geologist -geologize -geology -geomagnetic -geomagnetician -geomagnetics -geomagnetist -geomalic -geomalism -geomaly -geomance -geomancer -geomancy -geomant -geomantic -geomantical -geomantically -geometer -geometric -geometrical -geometrically -geometrician -geometricize -geometrid -Geometridae -geometriform -Geometrina -geometrine -geometrize -geometroid -Geometroidea -geometry -geomoroi -geomorphic -geomorphist -geomorphogenic -geomorphogenist -geomorphogeny -geomorphological -geomorphology -geomorphy -geomyid -Geomyidae -Geomys -Geon -geonavigation -geonegative -Geonic -Geonim -Geonoma -geonoma -geonyctinastic -geonyctitropic -geoparallelotropic -geophagia -geophagism -geophagist -geophagous -geophagy -Geophila -geophilid -Geophilidae -geophilous -Geophilus -Geophone -geophone -geophysical -geophysicist -geophysics -geophyte -geophytic -geoplagiotropism -Geoplana -Geoplanidae -geopolar -geopolitic -geopolitical -geopolitically -geopolitician -geopolitics -Geopolitik -geoponic -geoponical -geoponics -geopony -geopositive -Geoprumnon -georama -Geordie -George -Georgemas -Georgette -Georgia -georgiadesite -Georgian -Georgiana -georgic -Georgie -geoscopic -geoscopy -geoselenic -geosid -geoside -geosphere -Geospiza -geostatic -geostatics -geostrategic -geostrategist -geostrategy -geostrophic -geosynclinal -geosyncline -geotactic -geotactically -geotaxis -geotaxy -geotechnic -geotechnics -geotectology -geotectonic -geotectonics -Geoteuthis -geotherm -geothermal -geothermic -geothermometer -Geothlypis -geotic -geotical -geotilla -geotonic -geotonus -geotropic -geotropically -geotropism -geotropy -geoty -Gepeoo -Gephyrea -gephyrean -gephyrocercal -gephyrocercy -Gepidae -ger -gerah -Gerald -Geraldine -Geraniaceae -geraniaceous -geranial -Geraniales -geranic -geraniol -Geranium -geranium -geranomorph -Geranomorphae -geranomorphic -geranyl -Gerard -gerardia -Gerasene -gerastian -gerate -gerated -geratic -geratologic -geratologous -geratology -geraty -gerb -gerbe -Gerbera -Gerberia -gerbil -Gerbillinae -Gerbillus -gercrow -gereagle -gerefa -gerenda -gerendum -gerent -gerenuk -gerfalcon -gerhardtite -geriatric -geriatrician -geriatrics -gerim -gerip -germ -germal -German -german -germander -germane -germanely -germaneness -Germanesque -Germanhood -Germania -Germanic -germanic -Germanical -Germanically -Germanics -Germanification -Germanify -germanious -Germanish -Germanism -Germanist -Germanistic -germanite -Germanity -germanity -germanium -Germanization -germanization -Germanize -germanize -Germanizer -Germanly -Germanness -Germanocentric -Germanomania -Germanomaniac -Germanophile -Germanophilist -Germanophobe -Germanophobia -Germanophobic -Germanophobist -germanous -Germantown -germanyl -germarium -germen -germfree -germicidal -germicide -germifuge -germigenous -germin -germina -germinability -germinable -Germinal -germinal -germinally -germinance -germinancy -germinant -germinate -germination -germinative -germinatively -germinator -germing -germinogony -germiparity -germless -germlike -germling -germon -germproof -germule -germy -gernitz -gerocomia -gerocomical -gerocomy -geromorphism -Geronomite -geront -gerontal -gerontes -gerontic -gerontine -gerontism -geronto -gerontocracy -gerontocrat -gerontocratic -gerontogeous -gerontology -gerontophilia -gerontoxon -Gerres -gerrhosaurid -Gerrhosauridae -Gerridae -gerrymander -gerrymanderer -gers -gersdorffite -Gershom -Gershon -Gershonite -gersum -Gertie -Gertrude -gerund -gerundial -gerundially -gerundival -gerundive -gerundively -gerusia -Gervais -gervao -Gervas -Gervase -Gerygone -gerygone -Geryonia -geryonid -Geryonidae -Geryoniidae -Ges -Gesan -Geshurites -gesith -gesithcund -gesithcundman -Gesnera -Gesneraceae -gesneraceous -Gesneria -gesneria -Gesneriaceae -gesneriaceous -Gesnerian -gesning -gessamine -gesso -gest -Gestalt -gestalter -gestaltist -gestant -Gestapo -gestate -gestation -gestational -gestative -gestatorial -gestatorium -gestatory -geste -gested -gesten -gestening -gestic -gestical -gesticulacious -gesticulant -gesticular -gesticularious -gesticulate -gesticulation -gesticulative -gesticulatively -gesticulator -gesticulatory -gestion -gestning -gestural -gesture -gestureless -gesturer -get -geta -Getae -getah -getaway -gether -Gethsemane -gethsemane -Gethsemanic -gethsemanic -Getic -getling -getpenny -Getsul -gettable -getter -getting -getup -Geullah -Geum -geum -gewgaw -gewgawed -gewgawish -gewgawry -gewgawy -gey -geyan -geyerite -geyser -geyseral -geyseric -geyserine -geyserish -geyserite -gez -ghafir -ghaist -ghalva -Ghan -gharial -gharnao -gharry -Ghassanid -ghastily -ghastlily -ghastliness -ghastly -ghat -ghatti -ghatwal -ghatwazi -ghazi -ghazism -Ghaznevid -Gheber -ghebeta -Ghedda -ghee -Gheg -Ghegish -gheleem -Ghent -gherkin -ghetchoo -ghetti -ghetto -ghettoization -ghettoize -Ghibelline -Ghibellinism -Ghilzai -Ghiordes -ghizite -ghoom -ghost -ghostcraft -ghostdom -ghoster -ghostess -ghostfish -ghostflower -ghosthood -ghostified -ghostily -ghostish -ghostism -ghostland -ghostless -ghostlet -ghostlify -ghostlike -ghostlily -ghostliness -ghostly -ghostmonger -ghostology -ghostship -ghostweed -ghostwrite -ghosty -ghoul -ghoulery -ghoulish -ghoulishly -ghoulishness -ghrush -ghurry -Ghuz -Gi -Giansar -giant -giantesque -giantess -gianthood -giantish -giantism -giantize -giantkind -giantlike -giantly -giantry -giantship -Giardia -giardia -giardiasis -giarra -giarre -Gib -gib -gibaro -gibbals -gibbed -gibber -Gibberella -gibbergunyah -gibberish -gibberose -gibberosity -gibbet -gibbetwise -Gibbi -gibblegabble -gibblegabbler -gibbles -gibbon -gibbose -gibbosity -gibbous -gibbously -gibbousness -gibbsite -gibbus -gibby -gibe -gibel -gibelite -Gibeonite -giber -gibing -gibingly -gibleh -giblet -giblets -Gibraltar -Gibson -gibstaff -gibus -gid -giddap -giddea -giddify -giddily -giddiness -giddy -giddyberry -giddybrain -giddyhead -giddyish -Gideon -Gideonite -gidgee -gie -gied -gien -Gienah -gieseckite -gif -giffgaff -Gifola -gift -gifted -giftedly -giftedness -giftie -giftless -giftling -giftware -gig -gigantean -gigantesque -gigantic -gigantical -gigantically -giganticidal -giganticide -giganticness -gigantism -gigantize -gigantoblast -gigantocyte -gigantolite -gigantological -gigantology -gigantomachy -Gigantopithecus -Gigantosaurus -Gigantostraca -gigantostracan -gigantostracous -Gigartina -Gigartinaceae -gigartinaceous -Gigartinales -gigback -gigelira -gigeria -gigerium -gigful -gigger -giggish -giggit -giggle -giggledom -gigglement -giggler -gigglesome -giggling -gigglingly -gigglish -giggly -Gigi -giglet -gigliato -giglot -gigman -gigmaness -gigmanhood -gigmania -gigmanic -gigmanically -gigmanism -gigmanity -gignate -gignitive -gigolo -gigot -gigsman -gigster -gigtree -gigunu -Gil -Gila -Gilaki -Gilbert -gilbert -gilbertage -Gilbertese -Gilbertian -Gilbertianism -gilbertite -gild -gildable -gilded -gilden -gilder -gilding -Gileadite -Gileno -Giles -gilguy -Gilia -gilia -Giliak -gilim -Gill -gill -gillaroo -gillbird -gilled -Gillenia -giller -Gilles -gillflirt -gillhooter -Gillian -gillie -gilliflirt -gilling -gilliver -gillotage -gillotype -gillstoup -gilly -gillyflower -gillygaupus -gilo -gilpy -gilravage -gilravager -gilse -gilsonite -gilt -giltcup -gilthead -gilttail -gim -gimbal -gimbaled -gimbaljawed -gimberjawed -gimble -gimcrack -gimcrackery -gimcrackiness -gimcracky -gimel -Gimirrai -gimlet -gimleteyed -gimlety -gimmal -gimmer -gimmerpet -gimmick -gimp -gimped -gimper -gimping -gin -ging -ginger -gingerade -gingerberry -gingerbread -gingerbready -gingerin -gingerleaf -gingerline -gingerliness -gingerly -gingerness -gingernut -gingerol -gingerous -gingerroot -gingersnap -gingerspice -gingerwork -gingerwort -gingery -gingham -ginghamed -gingili -gingiva -gingivae -gingival -gingivalgia -gingivectomy -gingivitis -gingivoglossitis -gingivolabial -ginglyform -ginglymoarthrodia -ginglymoarthrodial -Ginglymodi -ginglymodian -ginglymoid -ginglymoidal -Ginglymostoma -ginglymostomoid -ginglymus -ginglyni -ginhouse -gink -Ginkgo -ginkgo -Ginkgoaceae -ginkgoaceous -Ginkgoales -ginned -ginner -ginners -ginnery -ginney -ginning -ginnle -Ginny -ginny -ginseng -ginward -gio -giobertite -giornata -giornatate -Giottesque -Giovanni -gip -gipon -gipper -Gippy -gipser -gipsire -gipsyweed -Giraffa -giraffe -giraffesque -Giraffidae -giraffine -giraffoid -girandola -girandole -girasol -girasole -girba -gird -girder -girderage -girderless -girding -girdingly -girdle -girdlecake -girdlelike -girdler -girdlestead -girdling -girdlingly -Girella -Girellidae -Girgashite -Girgasite -girl -girleen -girlery -girlfully -girlhood -girlie -girliness -girling -girlish -girlishly -girlishness -girlism -girllike -girly -girn -girny -giro -giroflore -Girondin -Girondism -Girondist -girouette -girouettism -girr -girse -girsh -girsle -girt -girth -girtline -gisarme -gish -gisla -gisler -gismondine -gismondite -gist -git -gitaligenin -gitalin -Gitanemuck -gith -Gitksan -gitonin -gitoxigenin -gitoxin -gittern -Gittite -gittith -Giuseppe -giustina -give -giveable -giveaway -given -givenness -giver -givey -giving -gizz -gizzard -gizzen -gizzern -glabella -glabellae -glabellar -glabellous -glabellum -glabrate -glabrescent -glabrous -glace -glaceed -glaceing -glaciable -glacial -glacialism -glacialist -glacialize -glacially -glaciaria -glaciarium -glaciate -glaciation -glacier -glaciered -glacieret -glacierist -glacification -glacioaqueous -glaciolacustrine -glaciological -glaciologist -glaciology -glaciomarine -glaciometer -glacionatant -glacis -glack -glad -gladden -gladdener -gladdon -gladdy -glade -gladelike -gladeye -gladful -gladfully -gladfulness -gladhearted -gladiate -gladiator -gladiatorial -gladiatorism -gladiatorship -gladiatrix -gladify -gladii -gladiola -gladiolar -gladiole -gladioli -gladiolus -gladius -gladkaite -gladless -gladly -gladness -gladsome -gladsomely -gladsomeness -Gladstone -Gladstonian -Gladstonianism -glady -Gladys -glaga -Glagol -Glagolic -Glagolitic -Glagolitsa -glaieul -glaik -glaiket -glaiketness -glair -glaireous -glairiness -glairy -glaister -glaive -glaived -glaked -glaky -glam -glamberry -glamorize -glamorous -glamorously -glamour -glamoury -glance -glancer -glancing -glancingly -gland -glandaceous -glandarious -glandered -glanderous -glanders -glandes -glandiferous -glandiform -glandless -glandlike -glandular -glandularly -glandule -glanduliferous -glanduliform -glanduligerous -glandulose -glandulosity -glandulous -glandulousness -Glaniostomi -glans -glar -glare -glareless -Glareola -glareole -Glareolidae -glareous -glareproof -glareworm -glarily -glariness -glaring -glaringly -glaringness -glarry -glary -Glaserian -glaserite -glashan -glass -glassen -glasser -glasses -glassfish -glassful -glasshouse -glassie -glassily -glassine -glassiness -Glassite -glassless -glasslike -glassmaker -glassmaking -glassman -glassophone -glassrope -glassteel -glassware -glassweed -glasswork -glassworker -glassworking -glassworks -glasswort -glassy -Glaswegian -Glathsheim -Glathsheimr -glauberite -glaucescence -glaucescent -Glaucidium -glaucin -glaucine -Glaucionetta -Glaucium -glaucochroite -glaucodot -glaucolite -glaucoma -glaucomatous -Glaucomys -Glauconia -glauconiferous -Glauconiidae -glauconite -glauconitic -glauconitization -glaucophane -glaucophanite -glaucophanization -glaucophanize -glaucophyllous -Glaucopis -glaucosuria -glaucous -glaucously -Glauke -glaum -glaumrie -glaur -glaury -Glaux -glaver -glaze -glazed -glazen -glazer -glazework -glazier -glaziery -glazily -glaziness -glazing -glazy -gleam -gleamily -gleaminess -gleaming -gleamingly -gleamless -gleamy -glean -gleanable -gleaner -gleaning -gleary -gleba -glebal -glebe -glebeless -glebous -Glecoma -glede -Gleditsia -gledy -glee -gleed -gleeful -gleefully -gleefulness -gleeishly -gleek -gleemaiden -gleeman -gleesome -gleesomely -gleesomeness -gleet -gleety -gleewoman -gleg -glegly -glegness -Glen -glen -Glengarry -Glenn -glenohumeral -glenoid -glenoidal -glent -glessite -gleyde -glia -gliadin -glial -glib -glibbery -glibly -glibness -glidder -gliddery -glide -glideless -glideness -glider -gliderport -glidewort -gliding -glidingly -gliff -gliffing -glime -glimmer -glimmering -glimmeringly -glimmerite -glimmerous -glimmery -glimpse -glimpser -glink -glint -glioma -gliomatous -gliosa -gliosis -Glires -Gliridae -gliriform -Gliriformia -glirine -Glis -glisk -glisky -glissade -glissader -glissando -glissette -glisten -glistening -glisteningly -glister -glisteringly -Glitnir -glitter -glitterance -glittering -glitteringly -glittersome -glittery -gloam -gloaming -gloat -gloater -gloating -gloatingly -global -globally -globate -globated -globe -globed -globefish -globeflower -globeholder -globelet -Globicephala -globiferous -Globigerina -globigerine -Globigerinidae -globin -Globiocephalus -globoid -globose -globosely -globoseness -globosite -globosity -globosphaerite -globous -globously -globousness -globular -Globularia -Globulariaceae -globulariaceous -globularity -globularly -globularness -globule -globulet -globulicidal -globulicide -globuliferous -globuliform -globulimeter -globulin -globulinuria -globulite -globulitic -globuloid -globulolysis -globulose -globulous -globulousness -globulysis -globy -glochid -glochideous -glochidia -glochidial -glochidian -glochidiate -glochidium -glochis -glockenspiel -gloea -gloeal -Gloeocapsa -gloeocapsoid -gloeosporiose -Gloeosporium -Gloiopeltis -Gloiosiphonia -Gloiosiphoniaceae -glom -glome -glomerate -glomeration -Glomerella -glomeroporphyritic -glomerular -glomerulate -glomerule -glomerulitis -glomerulonephritis -glomerulose -glomerulus -glommox -glomus -glonoin -glonoine -gloom -gloomful -gloomfully -gloomily -gloominess -glooming -gloomingly -gloomless -gloomth -gloomy -glop -gloppen -glor -glore -Gloria -Gloriana -gloriation -gloriette -glorifiable -glorification -glorifier -glorify -gloriole -Gloriosa -gloriosity -glorious -gloriously -gloriousness -glory -gloryful -glorying -gloryingly -gloryless -gloss -glossa -glossagra -glossal -glossalgia -glossalgy -glossanthrax -glossarial -glossarially -glossarian -glossarist -glossarize -glossary -Glossata -glossate -glossator -glossatorial -glossectomy -glossed -glosser -glossic -glossily -Glossina -glossiness -glossing -glossingly -Glossiphonia -Glossiphonidae -glossist -glossitic -glossitis -glossless -glossmeter -glossocarcinoma -glossocele -glossocoma -glossocomon -glossodynamometer -glossodynia -glossoepiglottic -glossoepiglottidean -glossograph -glossographer -glossographical -glossography -glossohyal -glossoid -glossokinesthetic -glossolabial -glossolabiolaryngeal -glossolabiopharyngeal -glossolalia -glossolalist -glossolaly -glossolaryngeal -glossological -glossologist -glossology -glossolysis -glossoncus -glossopalatine -glossopalatinus -glossopathy -glossopetra -Glossophaga -glossophagine -glossopharyngeal -glossopharyngeus -Glossophora -glossophorous -glossophytia -glossoplasty -glossoplegia -glossopode -glossopodium -Glossopteris -glossoptosis -glossopyrosis -glossorrhaphy -glossoscopia -glossoscopy -glossospasm -glossosteresis -Glossotherium -glossotomy -glossotype -glossy -glost -glottal -glottalite -glottalize -glottic -glottid -glottidean -glottis -glottiscope -glottogonic -glottogonist -glottogony -glottologic -glottological -glottologist -glottology -Gloucester -glout -glove -gloveless -glovelike -glovemaker -glovemaking -glover -gloveress -glovey -gloving -glow -glower -glowerer -glowering -gloweringly -glowfly -glowing -glowingly -glowworm -Gloxinia -gloy -gloze -glozing -glozingly -glub -glucase -glucemia -glucid -glucide -glucidic -glucina -glucine -glucinic -glucinium -glucinum -gluck -glucofrangulin -glucokinin -glucolipid -glucolipide -glucolipin -glucolipine -glucolysis -glucosaemia -glucosamine -glucosan -glucosane -glucosazone -glucose -glucosemia -glucosic -glucosid -glucosidal -glucosidase -glucoside -glucosidic -glucosidically -glucosin -glucosine -glucosone -glucosuria -glucuronic -glue -glued -gluemaker -gluemaking -gluepot -gluer -gluey -glueyness -glug -gluish -gluishness -glum -gluma -Glumaceae -glumaceous -glumal -Glumales -glume -glumiferous -Glumiflorae -glumly -glummy -glumness -glumose -glumosity -glump -glumpily -glumpiness -glumpish -glumpy -glunch -Gluneamie -glusid -gluside -glut -glutamic -glutamine -glutaminic -glutaric -glutathione -glutch -gluteal -glutelin -gluten -glutenin -glutenous -gluteofemoral -gluteoinguinal -gluteoperineal -gluteus -glutin -glutinate -glutination -glutinative -glutinize -glutinose -glutinosity -glutinous -glutinously -glutinousness -glutition -glutoid -glutose -glutter -gluttery -glutting -gluttingly -glutton -gluttoness -gluttonish -gluttonism -gluttonize -gluttonous -gluttonously -gluttonousness -gluttony -glyceraldehyde -glycerate -Glyceria -glyceric -glyceride -glycerin -glycerinate -glycerination -glycerine -glycerinize -glycerite -glycerize -glycerizin -glycerizine -glycerogel -glycerogelatin -glycerol -glycerolate -glycerole -glycerolize -glycerophosphate -glycerophosphoric -glycerose -glyceroxide -glyceryl -glycid -glycide -glycidic -glycidol -Glycine -glycine -glycinin -glycocholate -glycocholic -glycocin -glycocoll -glycogelatin -glycogen -glycogenesis -glycogenetic -glycogenic -glycogenize -glycogenolysis -glycogenous -glycogeny -glycohaemia -glycohemia -glycol -glycolaldehyde -glycolate -glycolic -glycolide -glycolipid -glycolipide -glycolipin -glycolipine -glycoluric -glycoluril -glycolyl -glycolylurea -glycolysis -glycolytic -glycolytically -Glyconian -Glyconic -glyconic -glyconin -glycoproteid -glycoprotein -glycosaemia -glycose -glycosemia -glycosin -glycosine -glycosuria -glycosuric -glycuresis -glycuronic -glycyl -glycyphyllin -Glycyrrhiza -glycyrrhizin -Glynn -glyoxal -glyoxalase -glyoxalic -glyoxalin -glyoxaline -glyoxim -glyoxime -glyoxyl -glyoxylic -glyph -glyphic -glyphograph -glyphographer -glyphographic -glyphography -glyptic -glyptical -glyptician -Glyptodon -glyptodont -Glyptodontidae -glyptodontoid -glyptograph -glyptographer -glyptographic -glyptography -glyptolith -glyptological -glyptologist -glyptology -glyptotheca -Glyptotherium -glyster -Gmelina -gmelinite -gnabble -Gnaeus -gnaphalioid -Gnaphalium -gnar -gnarl -gnarled -gnarliness -gnarly -gnash -gnashingly -gnat -gnatcatcher -gnatflower -gnathal -gnathalgia -gnathic -gnathidium -gnathion -gnathism -gnathite -gnathitis -Gnatho -gnathobase -gnathobasic -Gnathobdellae -Gnathobdellida -gnathometer -gnathonic -gnathonical -gnathonically -gnathonism -gnathonize -gnathophorous -gnathoplasty -gnathopod -Gnathopoda -gnathopodite -gnathopodous -gnathostegite -Gnathostoma -Gnathostomata -gnathostomatous -gnathostome -Gnathostomi -gnathostomous -gnathotheca -gnatling -gnatproof -gnatsnap -gnatsnapper -gnatter -gnatty -gnatworm -gnaw -gnawable -gnawer -gnawing -gnawingly -gnawn -gneiss -gneissic -gneissitic -gneissoid -gneissose -gneissy -Gnetaceae -gnetaceous -Gnetales -Gnetum -gnocchetti -gnome -gnomed -gnomesque -gnomic -gnomical -gnomically -gnomide -gnomish -gnomist -gnomologic -gnomological -gnomologist -gnomology -gnomon -Gnomonia -Gnomoniaceae -gnomonic -gnomonical -gnomonics -gnomonological -gnomonologically -gnomonology -gnosiological -gnosiology -gnosis -Gnostic -gnostic -gnostical -gnostically -Gnosticism -gnosticity -gnosticize -gnosticizer -gnostology -gnu -go -goa -goad -goadsman -goadster -goaf -Goajiro -goal -Goala -goalage -goalee -goalie -goalkeeper -goalkeeping -goalless -goalmouth -Goan -Goanese -goanna -Goasila -goat -goatbeard -goatbrush -goatbush -goatee -goateed -goatfish -goatherd -goatherdess -goatish -goatishly -goatishness -goatland -goatlike -goatling -goatly -goatroot -goatsbane -goatsbeard -goatsfoot -goatskin -goatstone -goatsucker -goatweed -goaty -goave -gob -goback -goban -gobang -gobbe -gobber -gobbet -gobbin -gobbing -gobble -gobbledygook -gobbler -gobby -Gobelin -gobelin -gobernadora -gobi -Gobia -Gobian -gobiesocid -Gobiesocidae -gobiesociform -Gobiesox -gobiid -Gobiidae -gobiiform -Gobiiformes -Gobinism -Gobinist -Gobio -gobioid -Gobioidea -Gobioidei -goblet -gobleted -gobletful -goblin -gobline -goblinesque -goblinish -goblinism -goblinize -goblinry -gobmouthed -gobo -gobonated -gobony -gobstick -goburra -goby -gobylike -gocart -Goclenian -God -god -godchild -Goddam -Goddard -goddard -goddaughter -godded -goddess -goddesshood -goddessship -goddikin -goddize -gode -godet -Godetia -godfather -godfatherhood -godfathership -Godforsaken -Godfrey -Godful -godhead -godhood -Godiva -godkin -godless -godlessly -godlessness -godlet -godlike -godlikeness -godlily -godliness -godling -godly -godmaker -godmaking -godmamma -godmother -godmotherhood -godmothership -godown -godpapa -godparent -Godsake -godsend -godship -godson -godsonship -Godspeed -Godward -Godwin -Godwinian -godwit -goeduck -goel -goelism -Goemagot -Goemot -goer -goes -Goetae -Goethian -goetia -goetic -goetical -goety -goff -goffer -goffered -gofferer -goffering -goffle -gog -gogga -goggan -goggle -goggled -goggler -gogglers -goggly -goglet -Gogo -gogo -Gohila -goi -goiabada -Goidel -Goidelic -going -goitcho -goiter -goitered -goitral -goitrogen -goitrogenic -goitrous -Gokuraku -gol -gola -golach -goladar -golandaas -golandause -Golaseccan -Golconda -Gold -gold -goldbeater -goldbeating -Goldbird -goldbrick -goldbricker -goldbug -goldcrest -goldcup -golden -goldenback -goldeneye -goldenfleece -goldenhair -goldenknop -goldenlocks -goldenly -Goldenmouth -goldenmouthed -goldenness -goldenpert -goldenrod -goldenseal -goldentop -goldenwing -golder -goldfielder -goldfinch -goldfinny -goldfish -goldflower -goldhammer -goldhead -Goldi -Goldic -goldie -goldilocks -goldin -goldish -goldless -goldlike -Goldonian -goldseed -goldsinny -goldsmith -goldsmithery -goldsmithing -goldspink -goldstone -goldtail -goldtit -goldwater -goldweed -goldwork -goldworker -Goldy -goldy -golee -golem -golf -golfdom -golfer -Golgi -Golgotha -goli -goliard -goliardery -goliardic -Goliath -goliath -goliathize -golkakra -Goll -golland -gollar -golliwogg -golly -Golo -goloe -golpe -Goma -gomari -Gomarian -Gomarist -Gomarite -gomart -gomashta -gomavel -gombay -gombeen -gombeenism -gombroon -Gomeisa -gomer -gomeral -gomlah -gommelin -Gomontia -Gomorrhean -Gomphocarpus -gomphodont -Gompholobium -gomphosis -Gomphrena -gomuti -gon -Gona -gonad -gonadal -gonadial -gonadic -gonadotropic -gonadotropin -gonaduct -gonagra -gonakie -gonal -gonalgia -gonangial -gonangium -gonapod -gonapophysal -gonapophysial -gonapophysis -gonarthritis -Gond -gondang -Gondi -gondite -gondola -gondolet -gondolier -gone -goneness -goneoclinic -gonepoiesis -gonepoietic -goner -Goneril -gonesome -gonfalcon -gonfalonier -gonfalonierate -gonfaloniership -gonfanon -gong -gongman -Gongoresque -Gongorism -Gongorist -gongoristic -gonia -goniac -gonial -goniale -Goniaster -goniatite -Goniatites -goniatitic -goniatitid -Goniatitidae -goniatitoid -gonid -gonidangium -gonidia -gonidial -gonidic -gonidiferous -gonidiogenous -gonidioid -gonidiophore -gonidiose -gonidiospore -gonidium -gonimic -gonimium -gonimolobe -gonimous -goniocraniometry -Goniodoridae -Goniodorididae -Goniodoris -goniometer -goniometric -goniometrical -goniometrically -goniometry -gonion -Goniopholidae -Goniopholis -goniostat -goniotropous -gonitis -Gonium -gonium -gonnardite -gonne -gonoblast -gonoblastic -gonoblastidial -gonoblastidium -gonocalycine -gonocalyx -gonocheme -gonochorism -gonochorismal -gonochorismus -gonochoristic -gonococcal -gonococcic -gonococcoid -gonococcus -gonocoel -gonocyte -gonoecium -Gonolobus -gonomere -gonomery -gonophore -gonophoric -gonophorous -gonoplasm -gonopoietic -gonorrhea -gonorrheal -gonorrheic -gonosomal -gonosome -gonosphere -gonostyle -gonotheca -gonothecal -gonotokont -gonotome -gonotype -gonozooid -gony -gonyalgia -gonydeal -gonydial -gonyocele -gonyoncus -gonys -Gonystylaceae -gonystylaceous -Gonystylus -gonytheca -Gonzalo -goo -goober -good -Goodenia -Goodeniaceae -goodeniaceous -Goodenoviaceae -goodhearted -goodheartedly -goodheartedness -gooding -goodish -goodishness -goodlihead -goodlike -goodliness -goodly -goodman -goodmanship -goodness -goods -goodsome -goodwife -goodwill -goodwillit -goodwilly -goody -goodyear -Goodyera -goodyish -goodyism -goodyness -goodyship -goof -goofer -goofily -goofiness -goofy -googly -googol -googolplex -googul -gook -gool -goolah -gools -gooma -goon -goondie -goonie -Goop -goosander -goose -goosebeak -gooseberry -goosebill -goosebird -goosebone -gooseboy -goosecap -goosefish -gooseflower -goosefoot -goosegirl -goosegog -gooseherd -goosehouse -gooselike -goosemouth -gooseneck -goosenecked -gooserumped -goosery -goosetongue -gooseweed -goosewing -goosewinged -goosish -goosishly -goosishness -goosy -gopher -gopherberry -gopherroot -gopherwood -gopura -Gor -gor -gora -goracco -goral -goran -gorb -gorbal -gorbellied -gorbelly -gorbet -gorble -gorblimy -gorce -gorcock -gorcrow -Gordiacea -gordiacean -gordiaceous -Gordian -Gordiidae -Gordioidea -Gordius -gordolobo -Gordon -Gordonia -gordunite -Gordyaean -gore -gorer -gorevan -gorfly -gorge -gorgeable -gorged -gorgedly -gorgelet -gorgeous -gorgeously -gorgeousness -gorger -gorgerin -gorget -gorgeted -gorglin -Gorgon -Gorgonacea -gorgonacean -gorgonaceous -gorgonesque -gorgoneum -Gorgonia -Gorgoniacea -gorgoniacean -gorgoniaceous -Gorgonian -gorgonian -gorgonin -gorgonize -gorgonlike -Gorgonzola -Gorgosaurus -gorhen -goric -gorilla -gorillaship -gorillian -gorilline -gorilloid -gorily -goriness -goring -Gorkhali -Gorkiesque -gorlin -gorlois -gormandize -gormandizer -gormaw -gormed -gorra -gorraf -gorry -gorse -gorsebird -gorsechat -gorsedd -gorsehatch -gorsy -Gortonian -Gortonite -gory -gos -gosain -goschen -gosh -goshawk -Goshen -goshenite -goslarite -goslet -gosling -gosmore -gospel -gospeler -gospelist -gospelize -gospellike -gospelly -gospelmonger -gospelwards -Gosplan -gospodar -gosport -gossamer -gossamered -gossamery -gossampine -gossan -gossaniferous -gossard -gossip -gossipdom -gossipee -gossiper -gossiphood -gossipiness -gossiping -gossipingly -gossipmonger -gossipred -gossipry -gossipy -gossoon -gossy -gossypine -Gossypium -gossypol -gossypose -got -gotch -gote -Goth -Gotha -Gotham -Gothamite -Gothic -Gothically -Gothicism -Gothicist -Gothicity -Gothicize -Gothicizer -Gothicness -Gothish -Gothism -gothite -Gothlander -Gothonic -Gotiglacial -gotra -gotraja -gotten -Gottfried -Gottlieb -gouaree -Gouda -Goudy -gouge -gouger -goujon -goulash -goumi -goup -Goura -gourami -gourd -gourde -gourdful -gourdhead -gourdiness -gourdlike -gourdworm -gourdy -Gourinae -gourmand -gourmander -gourmanderie -gourmandism -gourmet -gourmetism -gourounut -goustrous -gousty -gout -goutify -goutily -goutiness -goutish -goutte -goutweed -goutwort -gouty -gove -govern -governability -governable -governableness -governably -governail -governance -governess -governessdom -governesshood -governessy -governing -governingly -government -governmental -governmentalism -governmentalist -governmentalize -governmentally -governmentish -governor -governorate -governorship -gowan -gowdnie -gowf -gowfer -gowiddie -gowk -gowked -gowkedly -gowkedness -gowkit -gowl -gown -gownlet -gownsman -gowpen -goy -Goyana -goyazite -Goyetian -goyim -goyin -goyle -gozell -gozzard -gra -Graafian -grab -grabbable -grabber -grabble -grabbler -grabbling -grabbots -graben -grabhook -grabouche -Grace -grace -graceful -gracefully -gracefulness -graceless -gracelessly -gracelessness -gracelike -gracer -Gracilaria -gracilariid -Gracilariidae -gracile -gracileness -gracilescent -gracilis -gracility -graciosity -gracioso -gracious -graciously -graciousness -grackle -Graculus -grad -gradable -gradal -gradate -gradation -gradational -gradationally -gradationately -gradative -gradatively -gradatory -graddan -grade -graded -gradefinder -gradely -grader -Gradgrind -gradgrind -Gradgrindian -Gradgrindish -Gradgrindism -gradient -gradienter -Gradientia -gradin -gradine -grading -gradiometer -gradiometric -gradometer -gradual -gradualism -gradualist -gradualistic -graduality -gradually -gradualness -graduand -graduate -graduated -graduateship -graduatical -graduating -graduation -graduator -gradus -Graeae -Graeculus -Graeme -graff -graffage -graffer -Graffias -graffito -grafship -graft -graftage -graftdom -grafted -grafter -grafting -graftonite -graftproof -Graham -graham -grahamite -Graian -grail -grailer -grailing -grain -grainage -grained -grainedness -grainer -grainering -grainery -grainfield -graininess -graining -grainland -grainless -grainman -grainsick -grainsickness -grainsman -grainways -grainy -graip -graisse -graith -Grallae -Grallatores -grallatorial -grallatory -grallic -Grallina -gralline -gralloch -gram -grama -gramarye -gramashes -grame -gramenite -gramicidin -Graminaceae -graminaceous -Gramineae -gramineal -gramineous -gramineousness -graminicolous -graminiferous -graminifolious -graminiform -graminin -graminivore -graminivorous -graminological -graminology -graminous -grammalogue -grammar -grammarian -grammarianism -grammarless -grammatic -grammatical -grammatically -grammaticalness -grammaticaster -grammaticism -grammaticize -grammatics -grammatist -grammatistical -grammatite -grammatolator -grammatolatry -Grammatophyllum -gramme -Grammontine -gramoches -Gramophone -gramophone -gramophonic -gramophonical -gramophonically -gramophonist -gramp -grampa -grampus -granada -granadilla -granadillo -Granadine -granage -granary -granate -granatum -granch -grand -grandam -grandame -grandaunt -grandchild -granddad -granddaddy -granddaughter -granddaughterly -grandee -grandeeism -grandeeship -grandesque -grandeur -grandeval -grandfather -grandfatherhood -grandfatherish -grandfatherless -grandfatherly -grandfathership -grandfer -grandfilial -grandiloquence -grandiloquent -grandiloquently -grandiloquous -grandiose -grandiosely -grandiosity -grandisonant -Grandisonian -Grandisonianism -grandisonous -grandly -grandma -grandmaternal -Grandmontine -grandmother -grandmotherhood -grandmotherism -grandmotherliness -grandmotherly -grandnephew -grandness -grandniece -grandpa -grandparent -grandparentage -grandparental -grandpaternal -grandsire -grandson -grandsonship -grandstand -grandstander -granduncle -grane -grange -granger -grangerism -grangerite -grangerization -grangerize -grangerizer -Grangousier -graniform -granilla -granite -granitelike -graniteware -granitic -granitical -graniticoline -granitiferous -granitification -granitiform -granitite -granitization -granitize -granitoid -granivore -granivorous -granjeno -grank -grannom -granny -grannybush -grano -granoblastic -granodiorite -granogabbro -granolite -granolith -granolithic -granomerite -granophyre -granophyric -granose -granospherite -Grant -grant -grantable -grantedly -grantee -granter -Granth -Grantha -Grantia -Grantiidae -grantor -granula -granular -granularity -granularly -granulary -granulate -granulated -granulater -granulation -granulative -granulator -granule -granulet -granuliferous -granuliform -granulite -granulitic -granulitis -granulitization -granulitize -granulize -granuloadipose -granulocyte -granuloma -granulomatous -granulometric -granulosa -granulose -granulous -Granville -granza -granzita -grape -graped -grapeflower -grapefruit -grapeful -grapeless -grapelet -grapelike -grapenuts -graperoot -grapery -grapeshot -grapeskin -grapestalk -grapestone -grapevine -grapewise -grapewort -graph -graphalloy -graphic -graphical -graphically -graphicalness -graphicly -graphicness -graphics -Graphidiaceae -Graphiola -graphiological -graphiologist -graphiology -Graphis -graphite -graphiter -graphitic -graphitization -graphitize -graphitoid -graphitoidal -Graphium -graphologic -graphological -graphologist -graphology -graphomania -graphomaniac -graphometer -graphometric -graphometrical -graphometry -graphomotor -Graphophone -graphophone -graphophonic -graphorrhea -graphoscope -graphospasm -graphostatic -graphostatical -graphostatics -graphotype -graphotypic -graphy -graping -grapnel -grappa -grapple -grappler -grappling -Grapsidae -grapsoid -Grapsus -Grapta -graptolite -Graptolitha -Graptolithida -Graptolithina -graptolitic -Graptolitoidea -Graptoloidea -graptomancy -grapy -grasp -graspable -grasper -grasping -graspingly -graspingness -graspless -grass -grassant -grassation -grassbird -grasschat -grasscut -grasscutter -grassed -grasser -grasset -grassflat -grassflower -grasshop -grasshopper -grasshopperdom -grasshopperish -grasshouse -grassiness -grassing -grassland -grassless -grasslike -grassman -grassnut -grassplot -grassquit -grasswards -grassweed -grasswidowhood -grasswork -grassworm -grassy -grat -grate -grateful -gratefully -gratefulness -grateless -grateman -grater -gratewise -grather -Gratia -Gratiano -graticulate -graticulation -graticule -gratification -gratified -gratifiedly -gratifier -gratify -gratifying -gratifyingly -gratility -gratillity -gratinate -grating -Gratiola -gratiolin -gratiosolin -gratis -gratitude -gratten -grattoir -gratuitant -gratuitous -gratuitously -gratuitousness -gratuity -gratulant -gratulate -gratulation -gratulatorily -gratulatory -graupel -gravamen -gravamina -grave -graveclod -gravecloth -graveclothes -graved -gravedigger -gravegarth -gravel -graveless -gravelike -graveling -gravelish -gravelliness -gravelly -gravelroot -gravelstone -gravelweed -gravely -gravemaker -gravemaking -graveman -gravemaster -graven -graveness -Gravenstein -graveolence -graveolency -graveolent -graver -Graves -graveship -graveside -gravestead -gravestone -graveward -gravewards -graveyard -gravic -gravicembalo -gravid -gravidity -gravidly -gravidness -Gravigrada -gravigrade -gravimeter -gravimetric -gravimetrical -gravimetrically -gravimetry -graving -gravitate -gravitater -gravitation -gravitational -gravitationally -gravitative -gravitometer -gravity -gravure -gravy -grawls -gray -grayback -graybeard -graycoat -grayfish -grayfly -grayhead -grayish -graylag -grayling -grayly -graymalkin -graymill -grayness -graypate -graywacke -grayware -graywether -grazable -graze -grazeable -grazer -grazier -grazierdom -graziery -grazing -grazingly -grease -greasebush -greasehorn -greaseless -greaselessness -greaseproof -greaseproofness -greaser -greasewood -greasily -greasiness -greasy -great -greatcoat -greatcoated -greaten -greater -greathead -greatheart -greathearted -greatheartedness -greatish -greatly -greatmouthed -greatness -greave -greaved -greaves -grebe -Grebo -grece -Grecian -Grecianize -Grecism -Grecize -Grecomania -Grecomaniac -Grecophil -gree -greed -greedily -greediness -greedless -greedsome -greedy -greedygut -greedyguts -Greek -Greekdom -Greekery -Greekess -Greekish -Greekism -Greekist -Greekize -Greekless -Greekling -green -greenable -greenage -greenalite -greenback -Greenbacker -Greenbackism -greenbark -greenbone -greenbrier -Greencloth -greencoat -greener -greenery -greeney -greenfinch -greenfish -greengage -greengill -greengrocer -greengrocery -greenhead -greenheaded -greenheart -greenhearted -greenhew -greenhide -greenhood -greenhorn -greenhornism -greenhouse -greening -greenish -greenishness -greenkeeper -greenkeeping -Greenland -Greenlander -Greenlandic -Greenlandish -greenlandite -Greenlandman -greenleek -greenless -greenlet -greenling -greenly -greenness -greenockite -greenovite -greenroom -greensand -greensauce -greenshank -greensick -greensickness -greenside -greenstone -greenstuff -greensward -greenswarded -greentail -greenth -greenuk -greenweed -Greenwich -greenwing -greenwithe -greenwood -greenwort -greeny -greenyard -greet -greeter -greeting -greetingless -greetingly -greffier -greffotome -Greg -gregal -gregale -gregaloid -gregarian -gregarianism -Gregarina -Gregarinae -Gregarinaria -gregarine -Gregarinida -gregarinidal -gregariniform -Gregarinina -Gregarinoidea -gregarinosis -gregarinous -gregarious -gregariously -gregariousness -gregaritic -grege -Gregg -Gregge -greggle -grego -Gregor -Gregorian -Gregorianist -Gregorianize -Gregorianizer -Gregory -greige -grein -greisen -gremial -gremlin -grenade -Grenadian -grenadier -grenadierial -grenadierly -grenadiership -grenadin -grenadine -Grendel -Grenelle -Gressoria -gressorial -gressorious -Greta -Gretchen -Gretel -greund -Grevillea -grew -grewhound -Grewia -grey -greyhound -Greyiaceae -greyly -greyness -gribble -grice -grid -griddle -griddlecake -griddler -gride -gridelin -gridiron -griece -grieced -grief -griefful -grieffully -griefless -grieflessness -grieshoch -grievance -grieve -grieved -grievedly -griever -grieveship -grieving -grievingly -grievous -grievously -grievousness -Griff -griff -griffade -griffado -griffaun -griffe -griffin -griffinage -griffinesque -griffinhood -griffinish -griffinism -Griffith -griffithite -Griffon -griffon -griffonage -griffonne -grift -grifter -grig -griggles -grignet -grigri -grihastha -grihyasutra -grike -grill -grillade -grillage -grille -grilled -griller -grillroom -grillwork -grilse -grim -grimace -grimacer -grimacier -grimacing -grimacingly -grimalkin -grime -grimful -grimgribber -grimily -griminess -grimliness -grimly -grimme -Grimmia -Grimmiaceae -grimmiaceous -grimmish -grimness -grimp -grimy -grin -grinagog -grinch -grind -grindable -Grindelia -grinder -grinderman -grindery -grinding -grindingly -grindle -grindstone -gringo -gringolee -gringophobia -Grinnellia -grinner -grinning -grinningly -grinny -grintern -grip -gripe -gripeful -griper -gripgrass -griphite -Griphosaurus -griping -gripingly -gripless -gripman -gripment -grippal -grippe -gripper -grippiness -gripping -grippingly -grippingness -gripple -grippleness -grippotoxin -grippy -gripsack -gripy -Griqua -griquaite -Griqualander -gris -grisaille -grisard -Griselda -griseous -grisette -grisettish -grisgris -griskin -grisliness -grisly -Grison -grison -grisounite -grisoutine -Grissel -grissens -grissons -grist -gristbite -grister -Gristhorbia -gristle -gristliness -gristly -gristmill -gristmiller -gristmilling -gristy -grit -grith -grithbreach -grithman -gritless -gritrock -grits -gritstone -gritten -gritter -grittily -grittiness -grittle -gritty -grivet -grivna -Grizel -Grizzel -grizzle -grizzled -grizzler -grizzly -grizzlyman -groan -groaner -groanful -groaning -groaningly -groat -groats -groatsworth -grobian -grobianism -grocer -grocerdom -groceress -grocerly -grocerwise -grocery -groceryman -Groenendael -groff -grog -groggery -groggily -grogginess -groggy -grogram -grogshop -groin -groined -groinery -groining -Grolier -Grolieresque -gromatic -gromatics -Gromia -grommet -gromwell -groom -groomer -groomish -groomishly -groomlet -groomling -groomsman -groomy -groop -groose -groot -grooty -groove -grooveless -groovelike -groover -grooverhead -grooviness -grooving -groovy -grope -groper -groping -gropingly -gropple -grorudite -gros -grosbeak -groschen -groser -groset -grosgrain -grosgrained -gross -grossart -grossen -grosser -grossification -grossify -grossly -grossness -grosso -grossulaceous -grossular -Grossularia -grossularia -Grossulariaceae -grossulariaceous -grossularious -grossularite -grosz -groszy -grot -grotesque -grotesquely -grotesqueness -grotesquerie -grothine -grothite -Grotian -Grotianism -grottesco -grotto -grottoed -grottolike -grottowork -grouch -grouchily -grouchiness -grouchingly -grouchy -grouf -grough -ground -groundable -groundably -groundage -groundberry -groundbird -grounded -groundedly -groundedness -groundenell -grounder -groundflower -grounding -groundless -groundlessly -groundlessness -groundliness -groundling -groundly -groundman -groundmass -groundneedle -groundnut -groundplot -grounds -groundsel -groundsill -groundsman -groundward -groundwood -groundwork -groundy -group -groupage -groupageness -grouped -grouper -grouping -groupist -grouplet -groupment -groupwise -grouse -grouseberry -grouseless -grouser -grouseward -grousewards -grousy -grout -grouter -grouthead -grouts -grouty -grouze -grove -groved -grovel -groveler -groveless -groveling -grovelingly -grovelings -grovy -grow -growable -growan -growed -grower -growing -growingly -growingupness -growl -growler -growlery -growling -growlingly -growly -grown -grownup -growse -growsome -growth -growthful -growthiness -growthless -growthy -grozart -grozet -grr -grub -grubbed -grubber -grubbery -grubbily -grubbiness -grubby -grubhood -grubless -grubroot -grubs -grubstake -grubstaker -Grubstreet -grubstreet -grubworm -grudge -grudgeful -grudgefully -grudgekin -grudgeless -grudger -grudgery -grudging -grudgingly -grudgingness -grudgment -grue -gruel -grueler -grueling -gruelly -Grues -gruesome -gruesomely -gruesomeness -gruff -gruffily -gruffiness -gruffish -gruffly -gruffness -gruffs -gruffy -grufted -grugru -Gruidae -gruiform -Gruiformes -gruine -Gruis -grum -grumble -grumbler -grumblesome -Grumbletonian -grumbling -grumblingly -grumbly -grume -Grumium -grumly -grummel -grummels -grummet -grummeter -grumness -grumose -grumous -grumousness -grump -grumph -grumphie -grumphy -grumpily -grumpiness -grumpish -grumpy -grun -Grundified -Grundlov -grundy -Grundyism -Grundyist -Grundyite -grunerite -gruneritization -grunion -grunt -grunter -Grunth -grunting -gruntingly -gruntle -gruntled -gruntling -Grus -grush -grushie -Grusian -Grusinian -gruss -grutch -grutten -gryde -grylli -gryllid -Gryllidae -gryllos -Gryllotalpa -Gryllus -gryllus -grypanian -Gryphaea -Gryphosaurus -gryposis -Grypotherium -grysbok -guaba -guacacoa -guachamaca -guacharo -guachipilin -Guacho -Guacico -guacimo -guacin -guaco -guaconize -Guadagnini -guadalcazarite -Guaharibo -Guahiban -Guahibo -Guahivo -guaiac -guaiacol -guaiacolize -guaiaconic -guaiacum -guaiaretic -guaiasanol -guaiol -guaka -Gualaca -guama -guan -Guana -guana -guanabana -guanabano -guanaco -guanajuatite -guanamine -guanase -guanay -Guanche -guaneide -guango -guanidine -guanidopropionic -guaniferous -guanine -guanize -guano -guanophore -guanosine -guanyl -guanylic -guao -guapena -guapilla -guapinol -Guaque -guar -guara -guarabu -guaracha -guaraguao -guarana -Guarani -guarani -Guaranian -guaranine -guarantee -guaranteeship -guarantor -guarantorship -guaranty -guarapucu -Guaraunan -Guarauno -guard -guardable -guardant -guarded -guardedly -guardedness -guardeen -guarder -guardfish -guardful -guardfully -guardhouse -guardian -guardiancy -guardianess -guardianless -guardianly -guardianship -guarding -guardingly -guardless -guardlike -guardo -guardrail -guardroom -guardship -guardsman -guardstone -Guarea -guariba -guarinite -guarneri -Guarnerius -Guarnieri -Guarrau -guarri -Guaruan -guasa -Guastalline -guatambu -Guatemalan -Guatemaltecan -guativere -Guato -Guatoan -Guatusan -Guatuso -Guauaenok -guava -guavaberry -guavina -guayaba -guayabi -guayabo -guayacan -Guayaqui -Guaycuru -Guaycuruan -Guaymie -guayroto -guayule -guaza -Guazuma -gubbertush -Gubbin -gubbo -gubernacula -gubernacular -gubernaculum -gubernative -gubernator -gubernatorial -gubernatrix -guberniya -gucki -gud -gudame -guddle -gude -gudebrother -gudefather -gudemother -gudesake -gudesakes -gudesire -gudewife -gudge -gudgeon -gudget -gudok -gue -guebucu -guejarite -Guelph -Guelphic -Guelphish -Guelphism -guemal -guenepe -guenon -guepard -guerdon -guerdonable -guerdoner -guerdonless -guereza -Guerickian -Guerinet -Guernsey -guernsey -guernseyed -guerrilla -guerrillaism -guerrillaship -Guesdism -Guesdist -guess -guessable -guesser -guessing -guessingly -guesswork -guessworker -guest -guestchamber -guesten -guester -guesthouse -guesting -guestive -guestless -Guestling -guestling -guestmaster -guestship -guestwise -Guetar -Guetare -gufa -guff -guffaw -guffer -guffin -guffy -gugal -guggle -gugglet -guglet -guglia -guglio -gugu -Guha -Guhayna -guhr -Guiana -Guianan -Guianese -guib -guiba -guidable -guidage -guidance -guide -guideboard -guidebook -guidebookish -guidecraft -guideless -guideline -guidepost -guider -guideress -guidership -guideship -guideway -guidman -Guido -guidon -Guidonian -guidwilly -guige -Guignardia -guignol -guijo -Guilandina -guild -guilder -guildhall -guildic -guildry -guildship -guildsman -guile -guileful -guilefully -guilefulness -guileless -guilelessly -guilelessness -guilery -guillemet -guillemot -Guillermo -guillevat -guilloche -guillochee -guillotinade -guillotine -guillotinement -guillotiner -guillotinism -guillotinist -guilt -guiltily -guiltiness -guiltless -guiltlessly -guiltlessness -guiltsick -guilty -guily -guimbard -guimpe -Guinea -guinea -Guineaman -Guinean -Guinevere -guipure -Guisard -guisard -guise -guiser -Guisian -guising -guitar -guitarfish -guitarist -guitermanite -guitguit -Guittonian -Gujar -Gujarati -Gujrati -gul -gula -gulae -gulaman -gulancha -Gulanganes -gular -gularis -gulch -gulden -guldengroschen -gule -gules -Gulf -gulf -gulflike -gulfside -gulfwards -gulfweed -gulfy -gulgul -gulinula -gulinulae -gulinular -gulix -gull -Gullah -gullery -gullet -gulleting -gullibility -gullible -gullibly -gullion -gullish -gullishly -gullishness -gully -gullyhole -Gulo -gulonic -gulose -gulosity -gulp -gulper -gulpin -gulping -gulpingly -gulpy -gulravage -gulsach -Gum -gum -gumbo -gumboil -gumbotil -gumby -gumchewer -gumdigger -gumdigging -gumdrop -gumfield -gumflower -gumihan -gumless -gumlike -gumly -gumma -gummage -gummaker -gummaking -gummata -gummatous -gummed -gummer -gummiferous -gumminess -gumming -gummite -gummose -gummosis -gummosity -gummous -gummy -gump -gumphion -gumption -gumptionless -gumptious -gumpus -gumshoe -gumweed -gumwood -gun -guna -gunate -gunation -gunbearer -gunboat -gunbright -gunbuilder -guncotton -gundi -gundy -gunebo -gunfire -gunflint -gunge -gunhouse -Gunite -gunite -gunj -gunk -gunl -gunless -gunlock -gunmaker -gunmaking -gunman -gunmanship -gunnage -Gunnar -gunne -gunnel -gunner -Gunnera -Gunneraceae -gunneress -gunnership -gunnery -gunnies -gunning -gunnung -gunny -gunocracy -gunong -gunpaper -gunplay -gunpowder -gunpowderous -gunpowdery -gunpower -gunrack -gunreach -gunrunner -gunrunning -gunsel -gunshop -gunshot -gunsman -gunsmith -gunsmithery -gunsmithing -gunster -gunstick -gunstock -gunstocker -gunstocking -gunstone -Gunter -gunter -Gunther -gunwale -gunyah -gunyang -gunyeh -Gunz -Gunzian -gup -guppy -guptavidya -gur -Guran -gurdfish -gurdle -gurdwara -gurge -gurgeon -gurgeons -gurges -gurgitation -gurgle -gurglet -gurgling -gurglingly -gurgly -gurgoyle -gurgulation -Gurian -Guric -Gurish -Gurjara -gurjun -gurk -Gurkha -gurl -gurly -Gurmukhi -gurnard -gurnet -gurnetty -Gurneyite -gurniad -gurr -gurrah -gurry -gurt -guru -guruship -Gus -gush -gusher -gushet -gushily -gushiness -gushing -gushingly -gushingness -gushy -gusla -gusle -guss -gusset -Gussie -gussie -gust -gustable -gustation -gustative -gustativeness -gustatory -Gustavus -gustful -gustfully -gustfulness -gustily -gustiness -gustless -gusto -gustoish -Gustus -gusty -gut -Guti -Gutium -gutless -gutlike -gutling -Gutnic -Gutnish -gutt -gutta -guttable -guttate -guttated -guttatim -guttation -gutte -gutter -Guttera -gutterblood -guttering -gutterlike -gutterling -gutterman -guttersnipe -guttersnipish -gutterspout -gutterwise -guttery -gutti -guttide -guttie -Guttiferae -guttiferal -Guttiferales -guttiferous -guttiform -guttiness -guttle -guttler -guttula -guttulae -guttular -guttulate -guttule -guttural -gutturalism -gutturality -gutturalization -gutturalize -gutturally -gutturalness -gutturize -gutturonasal -gutturopalatal -gutturopalatine -gutturotetany -guttus -gutty -gutweed -gutwise -gutwort -guvacine -guvacoline -Guy -guy -Guyandot -guydom -guyer -guytrash -guz -guze -Guzmania -guzmania -Guzul -guzzle -guzzledom -guzzler -gwag -gweduc -gweed -gweeon -gwely -Gwen -Gwendolen -gwine -gwyniad -Gyarung -gyascutus -Gyges -Gygis -gyle -gym -gymel -gymkhana -Gymnadenia -Gymnadeniopsis -Gymnanthes -gymnanthous -Gymnarchidae -Gymnarchus -gymnasia -gymnasial -gymnasiarch -gymnasiarchy -gymnasiast -gymnasic -gymnasium -gymnast -gymnastic -gymnastically -gymnastics -gymnemic -gymnetrous -gymnic -gymnical -gymnics -gymnite -Gymnoblastea -gymnoblastic -Gymnocalycium -gymnocarpic -gymnocarpous -Gymnocerata -gymnoceratous -gymnocidium -Gymnocladus -Gymnoconia -Gymnoderinae -Gymnodiniaceae -gymnodiniaceous -Gymnodiniidae -Gymnodinium -gymnodont -Gymnodontes -gymnogen -gymnogenous -Gymnoglossa -gymnoglossate -gymnogynous -Gymnogyps -Gymnolaema -Gymnolaemata -gymnolaematous -Gymnonoti -Gymnopaedes -gymnopaedic -gymnophiona -gymnoplast -Gymnorhina -gymnorhinal -Gymnorhininae -gymnosoph -gymnosophist -gymnosophy -gymnosperm -Gymnospermae -gymnospermal -gymnospermic -gymnospermism -Gymnospermous -gymnospermy -Gymnosporangium -gymnospore -gymnosporous -Gymnostomata -Gymnostomina -gymnostomous -Gymnothorax -gymnotid -Gymnotidae -Gymnotoka -gymnotokous -Gymnotus -Gymnura -gymnure -Gymnurinae -gymnurine -gympie -gyn -gynaecea -gynaeceum -gynaecocoenic -gynander -gynandrarchic -gynandrarchy -Gynandria -gynandria -gynandrian -gynandrism -gynandroid -gynandromorph -gynandromorphic -gynandromorphism -gynandromorphous -gynandromorphy -gynandrophore -gynandrosporous -gynandrous -gynandry -gynantherous -gynarchic -gynarchy -gyne -gynecic -gynecidal -gynecide -gynecocentric -gynecocracy -gynecocrat -gynecocratic -gynecocratical -gynecoid -gynecolatry -gynecologic -gynecological -gynecologist -gynecology -gynecomania -gynecomastia -gynecomastism -gynecomasty -gynecomazia -gynecomorphous -gyneconitis -gynecopathic -gynecopathy -gynecophore -gynecophoric -gynecophorous -gynecotelic -gynecratic -gyneocracy -gyneolater -gyneolatry -gynephobia -Gynerium -gynethusia -gyniatrics -gyniatry -gynic -gynics -gynobase -gynobaseous -gynobasic -gynocardia -gynocardic -gynocracy -gynocratic -gynodioecious -gynodioeciously -gynodioecism -gynoecia -gynoecium -gynogenesis -gynomonecious -gynomonoeciously -gynomonoecism -gynophagite -gynophore -gynophoric -gynosporangium -gynospore -gynostegia -gynostegium -gynostemium -Gynura -gyp -Gypaetus -gype -gypper -Gyppo -Gyps -gyps -gypseian -gypseous -gypsiferous -gypsine -gypsiologist -gypsite -gypsography -gypsologist -gypsology -Gypsophila -gypsophila -gypsophilous -gypsophily -gypsoplast -gypsous -gypster -gypsum -Gypsy -gypsy -gypsydom -gypsyesque -gypsyfy -gypsyhead -gypsyhood -gypsyish -gypsyism -gypsylike -gypsyry -gypsyweed -gypsywise -gypsywort -Gyracanthus -gyral -gyrally -gyrant -gyrate -gyration -gyrational -gyrator -gyratory -gyre -Gyrencephala -gyrencephalate -gyrencephalic -gyrencephalous -gyrene -gyrfalcon -gyri -gyric -gyrinid -Gyrinidae -Gyrinus -gyro -gyrocar -gyroceracone -gyroceran -Gyroceras -gyrochrome -gyrocompass -Gyrodactylidae -Gyrodactylus -gyrogonite -gyrograph -gyroidal -gyroidally -gyrolite -gyrolith -gyroma -gyromagnetic -gyromancy -gyromele -gyrometer -Gyromitra -gyron -gyronny -Gyrophora -Gyrophoraceae -Gyrophoraceous -gyrophoric -gyropigeon -gyroplane -gyroscope -gyroscopic -gyroscopically -gyroscopics -gyrose -gyrostabilizer -Gyrostachys -gyrostat -gyrostatic -gyrostatically -gyrostatics -Gyrotheca -gyrous -gyrovagi -gyrovagues -gyrowheel -gyrus -gyte -gytling -gyve -H -h -ha -haab -haaf -Habab -habanera -Habbe -habble -habdalah -Habe -habeas -habena -habenal -habenar -Habenaria -habendum -habenula -habenular -haberdash -haberdasher -haberdasheress -haberdashery -haberdine -habergeon -habilable -habilatory -habile -habiliment -habilimentation -habilimented -habilitate -habilitation -habilitator -hability -habille -Habiri -Habiru -habit -habitability -habitable -habitableness -habitably -habitacle -habitacule -habitally -habitan -habitance -habitancy -habitant -habitat -habitate -habitation -habitational -habitative -habited -habitual -habituality -habitualize -habitually -habitualness -habituate -habituation -habitude -habitudinal -habitue -habitus -habnab -haboob -Habronema -habronemiasis -habronemic -habu -habutai -habutaye -hache -Hachiman -hachure -hacienda -hack -hackamatak -hackamore -hackbarrow -hackberry -hackbolt -hackbush -hackbut -hackbuteer -hacked -hackee -hacker -hackery -hackin -hacking -hackingly -hackle -hackleback -hackler -hacklog -hackly -hackmack -hackman -hackmatack -hackney -hackneyed -hackneyer -hackneyism -hackneyman -hacksaw -hacksilber -hackster -hackthorn -hacktree -hackwood -hacky -had -Hadassah -hadbot -hadden -haddie -haddo -haddock -haddocker -hade -Hadean -Hadendoa -Hadendowa -hadentomoid -Hadentomoidea -Hades -Hadhramautian -hading -Hadith -hadj -Hadjemi -hadji -hadland -Hadramautian -hadrome -Hadromerina -hadromycosis -hadrosaur -Hadrosaurus -haec -haecceity -Haeckelian -Haeckelism -haem -Haemamoeba -Haemanthus -Haemaphysalis -haemaspectroscope -haematherm -haemathermal -haemathermous -haematinon -haematinum -haematite -Haematobranchia -haematobranchiate -Haematocrya -haematocryal -Haematophilina -haematophiline -Haematopus -haematorrhachis -haematosepsis -Haematotherma -haematothermal -haematoxylic -haematoxylin -Haematoxylon -haemoconcentration -haemodilution -Haemodoraceae -haemodoraceous -haemoglobin -haemogram -Haemogregarina -Haemogregarinidae -haemonchiasis -haemonchosis -Haemonchus -haemony -haemophile -Haemoproteus -haemorrhage -haemorrhagia -haemorrhagic -haemorrhoid -haemorrhoidal -haemosporid -Haemosporidia -haemosporidian -Haemosporidium -Haemulidae -haemuloid -haeremai -haet -haff -haffet -haffkinize -haffle -Hafgan -hafiz -hafnium -hafnyl -haft -hafter -hag -Haganah -Hagarite -hagberry -hagboat -hagborn -hagbush -hagdon -hageen -Hagenia -hagfish -haggada -haggaday -haggadic -haggadical -haggadist -haggadistic -haggard -haggardly -haggardness -hagged -hagger -haggis -haggish -haggishly -haggishness -haggister -haggle -haggler -haggly -haggy -hagi -hagia -hagiarchy -hagiocracy -Hagiographa -hagiographal -hagiographer -hagiographic -hagiographical -hagiographist -hagiography -hagiolater -hagiolatrous -hagiolatry -hagiologic -hagiological -hagiologist -hagiology -hagiophobia -hagioscope -hagioscopic -haglet -haglike -haglin -hagride -hagrope -hagseed -hagship -hagstone -hagtaper -hagweed -hagworm -hah -Hahnemannian -Hahnemannism -Haiathalah -Haida -Haidan -Haidee -haidingerite -Haiduk -haik -haikai -haikal -Haikh -haikwan -hail -hailer -hailproof -hailse -hailshot -hailstone -hailstorm -hailweed -haily -Haimavati -hain -Hainai -Hainan -Hainanese -hainberry -haine -hair -hairband -hairbeard -hairbird -hairbrain -hairbreadth -hairbrush -haircloth -haircut -haircutter -haircutting -hairdo -hairdress -hairdresser -hairdressing -haire -haired -hairen -hairhoof -hairhound -hairif -hairiness -hairlace -hairless -hairlessness -hairlet -hairline -hairlock -hairmeal -hairmonger -hairpin -hairsplitter -hairsplitting -hairspring -hairstone -hairstreak -hairtail -hairup -hairweed -hairwood -hairwork -hairworm -hairy -Haisla -Haithal -Haitian -haje -hajib -hajilij -hak -hakam -hakdar -hake -Hakea -hakeem -hakenkreuz -Hakenkreuzler -hakim -Hakka -hako -haku -Hal -hala -halakah -halakic -halakist -halakistic -halal -halalcor -halation -Halawi -halazone -halberd -halberdier -halberdman -halberdsman -halbert -halch -halcyon -halcyonian -halcyonic -Halcyonidae -Halcyoninae -halcyonine -Haldanite -hale -halebi -Halecomorphi -haleness -Halenia -haler -halerz -Halesia -halesome -half -halfback -halfbeak -halfer -halfheaded -halfhearted -halfheartedly -halfheartedness -halfling -halfman -halfness -halfpace -halfpaced -halfpenny -halfpennyworth -halfway -halfwise -Haliaeetus -halibios -halibiotic -halibiu -halibut -halibuter -Halicarnassean -Halicarnassian -Halichondriae -halichondrine -halichondroid -Halicore -Halicoridae -halide -halidom -halieutic -halieutically -halieutics -Haligonian -Halimeda -halimous -halinous -haliographer -haliography -Haliotidae -Haliotis -haliotoid -haliplankton -haliplid -Haliplidae -Haliserites -halisteresis -halisteretic -halite -Halitheriidae -Halitherium -halitosis -halituosity -halituous -halitus -hall -hallabaloo -hallage -hallah -hallan -hallanshaker -hallebardier -hallecret -halleflinta -halleflintoid -hallel -hallelujah -hallelujatic -hallex -Halleyan -halliblash -halling -hallman -hallmark -hallmarked -hallmarker -hallmoot -halloo -Hallopididae -hallopodous -Hallopus -hallow -Hallowday -hallowed -hallowedly -hallowedness -Halloween -hallower -Hallowmas -Hallowtide -halloysite -Hallstatt -Hallstattian -hallucal -hallucinate -hallucination -hallucinational -hallucinative -hallucinator -hallucinatory -hallucined -hallucinosis -hallux -hallway -halma -halmalille -halmawise -halo -Haloa -Halobates -halobios -halobiotic -halochromism -halochromy -Halocynthiidae -haloesque -halogen -halogenate -halogenation -halogenoid -halogenous -Halogeton -halohydrin -haloid -halolike -halolimnic -halomancy -halometer -halomorphic -halophile -halophilism -halophilous -halophyte -halophytic -halophytism -Halopsyche -Halopsychidae -Haloragidaceae -haloragidaceous -Halosauridae -Halosaurus -haloscope -Halosphaera -halotrichite -haloxene -hals -halse -halsen -halsfang -halt -halter -halterbreak -halteres -Halteridium -halterproof -Haltica -halting -haltingly -haltingness -haltless -halucket -halukkah -halurgist -halurgy -halutz -halvaner -halvans -halve -halved -halvelings -halver -halves -halyard -Halysites -ham -hamacratic -Hamadan -hamadryad -Hamal -hamal -hamald -Hamamelidaceae -hamamelidaceous -Hamamelidanthemum -hamamelidin -Hamamelidoxylon -hamamelin -Hamamelis -Hamamelites -hamartiologist -hamartiology -hamartite -hamate -hamated -Hamathite -hamatum -hambergite -hamble -hambroline -hamburger -hame -hameil -hamel -Hamelia -hamesucken -hamewith -hamfat -hamfatter -hami -Hamidian -Hamidieh -hamiform -Hamilton -Hamiltonian -Hamiltonianism -Hamiltonism -hamingja -hamirostrate -Hamital -Hamite -Hamites -Hamitic -Hamiticized -Hamitism -Hamitoid -hamlah -hamlet -hamleted -hamleteer -hamletization -hamletize -hamlinite -hammada -hammam -hammer -hammerable -hammerbird -hammercloth -hammerdress -hammerer -hammerfish -hammerhead -hammerheaded -hammering -hammeringly -hammerkop -hammerless -hammerlike -hammerman -hammersmith -hammerstone -hammertoe -hammerwise -hammerwork -hammerwort -hammochrysos -hammock -hammy -hamose -hamous -hamper -hamperedly -hamperedness -hamperer -hamperman -Hampshire -hamrongite -hamsa -hamshackle -hamster -hamstring -hamular -hamulate -hamule -Hamulites -hamulose -hamulus -hamus -hamza -han -Hanafi -Hanafite -hanaper -hanaster -Hanbalite -hanbury -hance -hanced -hanch -hancockite -hand -handbag -handball -handballer -handbank -handbanker -handbarrow -handbill -handblow -handbolt -handbook -handbow -handbreadth -handcar -handcart -handclap -handclasp -handcloth -handcraft -handcraftman -handcraftsman -handcuff -handed -handedness -Handelian -hander -handersome -handfast -handfasting -handfastly -handfastness -handflower -handful -handgrasp -handgravure -handgrip -handgriping -handgun -handhaving -handhold -handhole -handicap -handicapped -handicapper -handicraft -handicraftship -handicraftsman -handicraftsmanship -handicraftswoman -handicuff -handily -handiness -handistroke -handiwork -handkercher -handkerchief -handkerchiefful -handlaid -handle -handleable -handled -handleless -handler -handless -handlike -handling -handmade -handmaid -handmaiden -handmaidenly -handout -handpost -handprint -handrail -handrailing -handreader -handreading -handsale -handsaw -handsbreadth -handscrape -handsel -handseller -handset -handshake -handshaker -handshaking -handsmooth -handsome -handsomeish -handsomely -handsomeness -handspade -handspike -handspoke -handspring -handstaff -handstand -handstone -handstroke -handwear -handwheel -handwhile -handwork -handworkman -handwrist -handwrite -handwriting -handy -handyblow -handybook -handygrip -hangability -hangable -hangalai -hangar -hangbird -hangby -hangdog -hange -hangee -hanger -hangfire -hangie -hanging -hangingly -hangkang -hangle -hangman -hangmanship -hangment -hangnail -hangnest -hangout -hangul -hangwoman -hangworm -hangworthy -hanif -hanifism -hanifite -hanifiya -Hank -hank -hanker -hankerer -hankering -hankeringly -hankie -hankle -hanksite -hanky -hanna -hannayite -Hannibal -Hannibalian -Hannibalic -Hano -Hanoverian -Hanoverianize -Hanoverize -Hans -hansa -Hansard -Hansardization -Hansardize -Hanse -hanse -Hanseatic -hansel -hansgrave -hansom -hant -hantle -Hanukkah -Hanuman -hao -haole -haoma -haori -hap -Hapale -Hapalidae -hapalote -Hapalotis -hapaxanthous -haphazard -haphazardly -haphazardness -haphtarah -Hapi -hapless -haplessly -haplessness -haplite -haplocaulescent -haplochlamydeous -Haplodoci -Haplodon -haplodont -haplodonty -haplography -haploid -haploidic -haploidy -haplolaly -haplologic -haplology -haploma -Haplomi -haplomid -haplomous -haplont -haploperistomic -haploperistomous -haplopetalous -haplophase -haplophyte -haploscope -haploscopic -haplosis -haplostemonous -haplotype -haply -happen -happening -happenstance -happier -happiest -happify -happiless -happily -happiness -happing -happy -hapten -haptene -haptenic -haptere -hapteron -haptic -haptics -haptometer -haptophor -haptophoric -haptophorous -haptotropic -haptotropically -haptotropism -hapu -hapuku -haqueton -harakeke -harangue -harangueful -haranguer -Hararese -Harari -harass -harassable -harassedly -harasser -harassingly -harassment -haratch -Haratin -Haraya -Harb -harbergage -harbi -harbinge -harbinger -harbingership -harbingery -harbor -harborage -harborer -harborless -harborous -harborside -harborward -hard -hardanger -hardback -hardbake -hardbeam -hardberry -harden -hardenable -Hardenbergia -hardener -hardening -hardenite -harder -Harderian -hardfern -hardfist -hardfisted -hardfistedness -hardhack -hardhanded -hardhandedness -hardhead -hardheaded -hardheadedly -hardheadedness -hardhearted -hardheartedly -hardheartedness -hardihood -hardily -hardim -hardiment -hardiness -hardish -hardishrew -hardly -hardmouth -hardmouthed -hardness -hardock -hardpan -hardship -hardstand -hardstanding -hardtack -hardtail -hardware -hardwareman -Hardwickia -hardwood -hardy -hardystonite -hare -harebell -harebottle -harebrain -harebrained -harebrainedly -harebrainedness -harebur -harefoot -harefooted -harehearted -harehound -Harelda -harelike -harelip -harelipped -harem -haremism -haremlik -harengiform -harfang -haricot -harigalds -hariolate -hariolation -hariolize -harish -hark -harka -harl -Harleian -Harlemese -Harlemite -harlequin -harlequina -harlequinade -harlequinery -harlequinesque -harlequinic -harlequinism -harlequinize -harling -harlock -harlot -harlotry -harm -Harmachis -harmal -harmala -harmaline -harman -harmattan -harmel -harmer -harmful -harmfully -harmfulness -harmine -harminic -harmless -harmlessly -harmlessness -Harmon -harmonia -harmoniacal -harmonial -harmonic -harmonica -harmonical -harmonically -harmonicalness -harmonichord -harmonici -harmonicism -harmonicon -harmonics -harmonious -harmoniously -harmoniousness -harmoniphon -harmoniphone -harmonist -harmonistic -harmonistically -Harmonite -harmonium -harmonizable -harmonization -harmonize -harmonizer -harmonogram -harmonograph -harmonometer -harmony -harmost -harmotome -harmotomic -harmproof -harn -harness -harnesser -harnessry -harnpan -Harold -harp -Harpa -harpago -harpagon -Harpagornis -Harpalides -Harpalinae -Harpalus -harper -harperess -Harpidae -harpier -harpings -harpist -harpless -harplike -Harpocrates -harpoon -harpooner -Harporhynchus -harpress -harpsichord -harpsichordist -harpula -Harpullia -harpwaytuning -harpwise -Harpy -Harpyia -harpylike -harquebus -harquebusade -harquebusier -harr -harrateen -harridan -harrier -Harris -Harrisia -harrisite -Harrovian -harrow -harrower -harrowing -harrowingly -harrowingness -harrowment -Harry -harry -harsh -harshen -harshish -harshly -harshness -harshweed -harstigite -hart -hartal -hartberry -hartebeest -hartin -hartite -Hartleian -Hartleyan -Hartmann -Hartmannia -Hartogia -hartshorn -hartstongue -harttite -Hartungen -haruspex -haruspical -haruspicate -haruspication -haruspice -haruspices -haruspicy -Harv -Harvard -Harvardian -Harvardize -Harveian -harvest -harvestbug -harvester -harvestless -harvestman -harvestry -harvesttime -Harvey -Harveyize -harzburgite -hasan -hasenpfeffer -hash -hashab -hasher -Hashimite -hashish -Hashiya -hashy -Hasidean -Hasidic -Hasidim -Hasidism -Hasinai -hask -Haskalah -haskness -hasky -haslet -haslock -Hasmonaean -hasp -hassar -hassel -hassle -hassock -hassocky -hasta -hastate -hastately -hastati -hastatolanceolate -hastatosagittate -haste -hasteful -hastefully -hasteless -hastelessness -hasten -hastener -hasteproof -haster -hastilude -hastily -hastiness -hastings -hastingsite -hastish -hastler -hasty -hat -hatable -hatband -hatbox -hatbrim -hatbrush -hatch -hatchability -hatchable -hatchel -hatcheler -hatcher -hatchery -hatcheryman -hatchet -hatchetback -hatchetfish -hatchetlike -hatchetman -hatchettine -hatchettolite -hatchety -hatchgate -hatching -hatchling -hatchman -hatchment -hatchminder -hatchway -hatchwayman -hate -hateable -hateful -hatefully -hatefulness -hateless -hatelessness -hater -hatful -hath -hatherlite -hathi -Hathor -Hathoric -Hati -Hatikvah -hatless -hatlessness -hatlike -hatmaker -hatmaking -hatpin -hatrack -hatrail -hatred -hatress -hatstand -hatt -hatted -Hattemist -hatter -Hatteria -hattery -Hatti -Hattic -Hattie -hatting -Hattism -Hattize -hattock -Hatty -hatty -hau -hauberget -hauberk -hauchecornite -hauerite -haugh -haughland -haught -haughtily -haughtiness -haughtly -haughtness -haughtonite -haughty -haul -haulabout -haulage -haulageway -haulback -hauld -hauler -haulier -haulm -haulmy -haulster -haunch -haunched -hauncher -haunching -haunchless -haunchy -haunt -haunter -hauntingly -haunty -Hauranitic -hauriant -haurient -Hausa -hause -hausen -hausmannite -hausse -Haussmannization -Haussmannize -haustellate -haustellated -haustellous -haustellum -haustement -haustorial -haustorium -haustral -haustrum -hautboy -hautboyist -hauteur -hauynite -hauynophyre -havage -Havaiki -Havaikian -Havana -Havanese -have -haveable -haveage -havel -haveless -havelock -haven -havenage -havener -havenership -havenet -havenful -havenless -havent -havenward -haver -havercake -haverel -haverer -havergrass -havermeal -havers -haversack -Haversian -haversine -havier -havildar -havingness -havoc -havocker -haw -Hawaiian -hawaiite -hawbuck -hawcubite -hawer -hawfinch -Hawiya -hawk -hawkbill -hawkbit -hawked -hawker -hawkery -Hawkeye -hawkie -hawking -hawkish -hawklike -hawknut -hawkweed -hawkwise -hawky -hawm -hawok -Haworthia -hawse -hawsehole -hawseman -hawsepiece -hawsepipe -hawser -hawserwise -hawthorn -hawthorned -hawthorny -hay -haya -hayband -haybird -haybote -haycap -haycart -haycock -haydenite -hayey -hayfield -hayfork -haygrower -haylift -hayloft -haymaker -haymaking -haymarket -haymow -hayrack -hayrake -hayraker -hayrick -hayseed -haysel -haystack -haysuck -haytime -hayward -hayweed -haywire -hayz -Hazara -hazard -hazardable -hazarder -hazardful -hazardize -hazardless -hazardous -hazardously -hazardousness -hazardry -haze -Hazel -hazel -hazeled -hazeless -hazelly -hazelnut -hazelwood -hazelwort -hazen -hazer -hazily -haziness -hazing -hazle -haznadar -hazy -hazzan -he -head -headache -headachy -headband -headbander -headboard -headborough -headcap -headchair -headcheese -headchute -headcloth -headdress -headed -headender -header -headfirst -headforemost -headframe -headful -headgear -headily -headiness -heading -headkerchief -headland -headledge -headless -headlessness -headlight -headlighting -headlike -headline -headliner -headlock -headlong -headlongly -headlongs -headlongwise -headman -headmark -headmaster -headmasterly -headmastership -headmistress -headmistressship -headmold -headmost -headnote -headpenny -headphone -headpiece -headplate -headpost -headquarter -headquarters -headrace -headrail -headreach -headrent -headrest -headright -headring -headroom -headrope -headsail -headset -headshake -headship -headsill -headskin -headsman -headspring -headstall -headstand -headstick -headstock -headstone -headstream -headstrong -headstrongly -headstrongness -headwaiter -headwall -headward -headwark -headwater -headway -headwear -headwork -headworker -headworking -heady -heaf -heal -healable -heald -healder -healer -healful -healing -healingly -healless -healsome -healsomeness -health -healthcraft -healthful -healthfully -healthfulness -healthguard -healthily -healthiness -healthless -healthlessness -healthsome -healthsomely -healthsomeness -healthward -healthy -heap -heaper -heaps -heapstead -heapy -hear -hearable -hearer -hearing -hearingless -hearken -hearkener -hearsay -hearse -hearsecloth -hearselike -hearst -heart -heartache -heartaching -heartbeat -heartbird -heartblood -heartbreak -heartbreaker -heartbreaking -heartbreakingly -heartbroken -heartbrokenly -heartbrokenness -heartburn -heartburning -heartdeep -heartease -hearted -heartedly -heartedness -hearten -heartener -heartening -hearteningly -heartfelt -heartful -heartfully -heartfulness -heartgrief -hearth -hearthless -hearthman -hearthpenny -hearthrug -hearthstead -hearthstone -hearthward -hearthwarming -heartikin -heartily -heartiness -hearting -heartland -heartleaf -heartless -heartlessly -heartlessness -heartlet -heartling -heartly -heartnut -heartpea -heartquake -heartroot -hearts -heartscald -heartsease -heartseed -heartsette -heartsick -heartsickening -heartsickness -heartsome -heartsomely -heartsomeness -heartsore -heartstring -heartthrob -heartward -heartwater -heartweed -heartwise -heartwood -heartwort -hearty -heat -heatable -heatdrop -heatedly -heater -heaterman -heatful -heath -heathberry -heathbird -heathen -heathendom -heatheness -heathenesse -heathenhood -heathenish -heathenishly -heathenishness -heathenism -heathenize -heathenness -heathenry -heathenship -Heather -heather -heathered -heatheriness -heathery -heathless -heathlike -heathwort -heathy -heating -heatingly -heatless -heatlike -heatmaker -heatmaking -heatproof -heatronic -heatsman -heatstroke -heaume -heaumer -heautarit -heautomorphism -Heautontimorumenos -heautophany -heave -heaveless -heaven -Heavenese -heavenful -heavenhood -heavenish -heavenishly -heavenize -heavenless -heavenlike -heavenliness -heavenly -heavens -heavenward -heavenwardly -heavenwardness -heavenwards -heaver -heavies -heavily -heaviness -heaving -heavisome -heavity -heavy -heavyback -heavyhanded -heavyhandedness -heavyheaded -heavyhearted -heavyheartedness -heavyweight -hebamic -hebdomad -hebdomadal -hebdomadally -hebdomadary -hebdomader -hebdomarian -hebdomary -hebeanthous -hebecarpous -hebecladous -hebegynous -hebenon -hebeosteotomy -hebepetalous -hebephrenia -hebephrenic -hebetate -hebetation -hebetative -hebete -hebetic -hebetomy -hebetude -hebetudinous -Hebraean -Hebraic -Hebraica -Hebraical -Hebraically -Hebraicize -Hebraism -Hebraist -Hebraistic -Hebraistical -Hebraistically -Hebraization -Hebraize -Hebraizer -Hebrew -Hebrewdom -Hebrewess -Hebrewism -Hebrician -Hebridean -Hebronite -hebronite -hecastotheism -Hecate -Hecatean -Hecatic -Hecatine -hecatomb -Hecatombaeon -hecatomped -hecatompedon -hecatonstylon -hecatontarchy -hecatontome -hecatophyllous -hech -Hechtia -heck -heckelphone -Heckerism -heckimal -heckle -heckler -hectare -hecte -hectic -hectical -hectically -hecticly -hecticness -hectocotyl -hectocotyle -hectocotyliferous -hectocotylization -hectocotylize -hectocotylus -hectogram -hectograph -hectographic -hectography -hectoliter -hectometer -Hector -hector -Hectorean -Hectorian -hectoringly -hectorism -hectorly -hectorship -hectostere -hectowatt -heddle -heddlemaker -heddler -hedebo -hedenbergite -Hedeoma -heder -Hedera -hederaceous -hederaceously -hederated -hederic -hederiferous -hederiform -hederigerent -hederin -hederose -hedge -hedgeberry -hedgeborn -hedgebote -hedgebreaker -hedgehog -hedgehoggy -hedgehop -hedgehopper -hedgeless -hedgemaker -hedgemaking -hedger -hedgerow -hedgesmith -hedgeweed -hedgewise -hedgewood -hedging -hedgingly -hedgy -hedonic -hedonical -hedonically -hedonics -hedonism -hedonist -hedonistic -hedonistically -hedonology -hedriophthalmous -hedrocele -hedrumite -Hedychium -hedyphane -Hedysarum -heed -heeder -heedful -heedfully -heedfulness -heedily -heediness -heedless -heedlessly -heedlessness -heedy -heehaw -heel -heelball -heelband -heelcap -heeled -heeler -heelgrip -heelless -heelmaker -heelmaking -heelpath -heelpiece -heelplate -heelpost -heelprint -heelstrap -heeltap -heeltree -heemraad -heer -heeze -heezie -heezy -heft -hefter -heftily -heftiness -hefty -hegari -Hegelian -Hegelianism -Hegelianize -Hegelizer -hegemon -hegemonic -hegemonical -hegemonist -hegemonizer -hegemony -hegira -hegumen -hegumene -Hehe -hei -heiau -Heidi -heifer -heiferhood -heigh -heighday -height -heighten -heightener -heii -Heikum -Heiltsuk -heimin -Hein -Heinesque -Heinie -heinous -heinously -heinousness -Heinrich -heintzite -Heinz -heir -heirdom -heiress -heiressdom -heiresshood -heirless -heirloom -heirship -heirskip -heitiki -Hejazi -Hejazian -hekteus -helbeh -helcoid -helcology -helcoplasty -helcosis -helcotic -heldentenor -helder -Helderbergian -hele -Helen -Helena -helenin -helenioid -Helenium -Helenus -helepole -Helge -heliacal -heliacally -Heliaea -heliaean -Heliamphora -Heliand -helianthaceous -Helianthemum -helianthic -helianthin -Helianthium -Helianthoidea -Helianthoidean -Helianthus -heliast -heliastic -heliazophyte -helical -helically -heliced -helices -helichryse -helichrysum -Helicidae -heliciform -helicin -Helicina -helicine -Helicinidae -helicitic -helicline -helicograph -helicogyrate -helicogyre -helicoid -helicoidal -helicoidally -helicometry -helicon -Heliconia -Heliconian -Heliconiidae -Heliconiinae -heliconist -Heliconius -helicoprotein -helicopter -helicorubin -helicotrema -Helicteres -helictite -helide -Heligmus -heling -helio -heliocentric -heliocentrical -heliocentrically -heliocentricism -heliocentricity -heliochrome -heliochromic -heliochromoscope -heliochromotype -heliochromy -helioculture -heliodon -heliodor -helioelectric -helioengraving -heliofugal -Heliogabalize -Heliogabalus -heliogram -heliograph -heliographer -heliographic -heliographical -heliographically -heliography -heliogravure -helioid -heliolater -heliolatrous -heliolatry -heliolite -Heliolites -heliolithic -Heliolitidae -heliologist -heliology -heliometer -heliometric -heliometrical -heliometrically -heliometry -heliomicrometer -Helion -heliophilia -heliophiliac -heliophilous -heliophobe -heliophobia -heliophobic -heliophobous -heliophotography -heliophyllite -heliophyte -Heliopora -Helioporidae -Heliopsis -heliopticon -Heliornis -Heliornithes -Heliornithidae -Helios -helioscope -helioscopic -helioscopy -heliosis -heliostat -heliostatic -heliotactic -heliotaxis -heliotherapy -heliothermometer -Heliothis -heliotrope -heliotroper -Heliotropiaceae -heliotropian -heliotropic -heliotropical -heliotropically -heliotropine -heliotropism -Heliotropium -heliotropy -heliotype -heliotypic -heliotypically -heliotypography -heliotypy -Heliozoa -heliozoan -heliozoic -heliport -Helipterum -helispheric -helispherical -helium -helix -helizitic -hell -Helladian -Helladic -Helladotherium -hellandite -hellanodic -hellbender -hellborn -hellbox -hellbred -hellbroth -hellcat -helldog -helleboraceous -helleboraster -hellebore -helleborein -helleboric -helleborin -Helleborine -helleborism -Helleborus -Hellelt -Hellen -Hellene -Hellenian -Hellenic -Hellenically -Hellenicism -Hellenism -Hellenist -Hellenistic -Hellenistical -Hellenistically -Hellenisticism -Hellenization -Hellenize -Hellenizer -Hellenocentric -Hellenophile -heller -helleri -Hellespont -Hellespontine -hellgrammite -hellhag -hellhole -hellhound -hellicat -hellier -hellion -hellish -hellishly -hellishness -hellkite -hellness -hello -hellroot -hellship -helluo -hellward -hellweed -helly -helm -helmage -helmed -helmet -helmeted -helmetlike -helmetmaker -helmetmaking -Helmholtzian -helminth -helminthagogic -helminthagogue -Helminthes -helminthiasis -helminthic -helminthism -helminthite -Helminthocladiaceae -helminthoid -helminthologic -helminthological -helminthologist -helminthology -helminthosporiose -Helminthosporium -helminthosporoid -helminthous -helmless -helmsman -helmsmanship -helobious -heloderm -Heloderma -Helodermatidae -helodermatoid -helodermatous -helodes -heloe -heloma -Helonias -helonin -helosis -Helot -helotage -helotism -helotize -helotomy -helotry -help -helpable -helper -helpful -helpfully -helpfulness -helping -helpingly -helpless -helplessly -helplessness -helply -helpmate -helpmeet -helpsome -helpworthy -helsingkite -helve -helvell -Helvella -Helvellaceae -helvellaceous -Helvellales -helvellic -helver -Helvetia -Helvetian -Helvetic -Helvetii -Helvidian -helvite -hem -hemabarometer -hemachate -hemachrome -hemachrosis -hemacite -hemad -hemadrometer -hemadrometry -hemadromograph -hemadromometer -hemadynameter -hemadynamic -hemadynamics -hemadynamometer -hemafibrite -hemagglutinate -hemagglutination -hemagglutinative -hemagglutinin -hemagogic -hemagogue -hemal -hemalbumen -hemamoeba -hemangioma -hemangiomatosis -hemangiosarcoma -hemaphein -hemapod -hemapodous -hemapoiesis -hemapoietic -hemapophyseal -hemapophysial -hemapophysis -hemarthrosis -hemase -hemaspectroscope -hemastatics -hematachometer -hematachometry -hematal -hematein -hematemesis -hematemetic -hematencephalon -hematherapy -hematherm -hemathermal -hemathermous -hemathidrosis -hematic -hematid -hematidrosis -hematimeter -hematin -hematinic -hematinometer -hematinometric -hematinuria -hematite -hematitic -hematobic -hematobious -hematobium -hematoblast -hematobranchiate -hematocatharsis -hematocathartic -hematocele -hematochezia -hematochrome -hematochyluria -hematoclasia -hematoclasis -hematocolpus -hematocrit -hematocryal -hematocrystallin -hematocyanin -hematocyst -hematocystis -hematocyte -hematocytoblast -hematocytogenesis -hematocytometer -hematocytotripsis -hematocytozoon -hematocyturia -hematodynamics -hematodynamometer -hematodystrophy -hematogen -hematogenesis -hematogenetic -hematogenic -hematogenous -hematoglobulin -hematography -hematohidrosis -hematoid -hematoidin -hematolin -hematolite -hematological -hematologist -hematology -hematolymphangioma -hematolysis -hematolytic -hematoma -hematomancy -hematometer -hematometra -hematometry -hematomphalocele -hematomyelia -hematomyelitis -hematonephrosis -hematonic -hematopathology -hematopericardium -hematopexis -hematophobia -hematophyte -hematoplast -hematoplastic -hematopoiesis -hematopoietic -hematoporphyrin -hematoporphyrinuria -hematorrhachis -hematorrhea -hematosalpinx -hematoscope -hematoscopy -hematose -hematosepsis -hematosin -hematosis -hematospectrophotometer -hematospectroscope -hematospermatocele -hematospermia -hematostibiite -hematotherapy -hematothermal -hematothorax -hematoxic -hematozoal -hematozoan -hematozoic -hematozoon -hematozymosis -hematozymotic -hematuresis -hematuria -hematuric -hemautogram -hemautograph -hemautographic -hemautography -heme -hemellitene -hemellitic -hemelytral -hemelytron -hemen -hemera -hemeralope -hemeralopia -hemeralopic -Hemerobaptism -Hemerobaptist -Hemerobian -Hemerobiid -Hemerobiidae -Hemerobius -Hemerocallis -hemerologium -hemerology -hemerythrin -hemiablepsia -hemiacetal -hemiachromatopsia -hemiageusia -hemiageustia -hemialbumin -hemialbumose -hemialbumosuria -hemialgia -hemiamaurosis -hemiamb -hemiamblyopia -hemiamyosthenia -hemianacusia -hemianalgesia -hemianatropous -hemianesthesia -hemianopia -hemianopic -hemianopsia -hemianoptic -hemianosmia -hemiapraxia -Hemiascales -Hemiasci -Hemiascomycetes -hemiasynergia -hemiataxia -hemiataxy -hemiathetosis -hemiatrophy -hemiazygous -Hemibasidiales -Hemibasidii -Hemibasidiomycetes -hemibasidium -hemibathybian -hemibenthic -hemibenthonic -hemibranch -hemibranchiate -Hemibranchii -hemic -hemicanities -hemicardia -hemicardiac -hemicarp -hemicatalepsy -hemicataleptic -hemicellulose -hemicentrum -hemicephalous -hemicerebrum -Hemichorda -hemichordate -hemichorea -hemichromatopsia -hemicircle -hemicircular -hemiclastic -hemicollin -hemicrane -hemicrania -hemicranic -hemicrany -hemicrystalline -hemicycle -hemicyclic -hemicyclium -hemicylindrical -hemidactylous -Hemidactylus -hemidemisemiquaver -hemidiapente -hemidiaphoresis -hemiditone -hemidomatic -hemidome -hemidrachm -hemidysergia -hemidysesthesia -hemidystrophy -hemiekton -hemielliptic -hemiepilepsy -hemifacial -hemiform -Hemigale -Hemigalus -Hemiganus -hemigastrectomy -hemigeusia -hemiglossal -hemiglossitis -hemiglyph -hemignathous -hemihdry -hemihedral -hemihedrally -hemihedric -hemihedrism -hemihedron -hemiholohedral -hemihydrate -hemihydrated -hemihydrosis -hemihypalgesia -hemihyperesthesia -hemihyperidrosis -hemihypertonia -hemihypertrophy -hemihypesthesia -hemihypoesthesia -hemihypotonia -hemikaryon -hemikaryotic -hemilaminectomy -hemilaryngectomy -Hemileia -hemilethargy -hemiligulate -hemilingual -hemimellitene -hemimellitic -hemimelus -Hemimeridae -Hemimerus -Hemimetabola -hemimetabole -hemimetabolic -hemimetabolism -hemimetabolous -hemimetaboly -hemimetamorphic -hemimetamorphosis -hemimetamorphous -hemimorph -hemimorphic -hemimorphism -hemimorphite -hemimorphy -Hemimyaria -hemin -hemina -hemine -heminee -hemineurasthenia -hemiobol -hemiolia -hemiolic -hemionus -hemiope -hemiopia -hemiopic -hemiorthotype -hemiparalysis -hemiparanesthesia -hemiparaplegia -hemiparasite -hemiparasitic -hemiparasitism -hemiparesis -hemiparesthesia -hemiparetic -hemipenis -hemipeptone -hemiphrase -hemipic -hemipinnate -hemiplane -hemiplankton -hemiplegia -hemiplegic -hemiplegy -hemipodan -hemipode -Hemipodii -Hemipodius -hemiprism -hemiprismatic -hemiprotein -hemipter -Hemiptera -hemipteral -hemipteran -hemipteroid -hemipterological -hemipterology -hemipteron -hemipterous -hemipyramid -hemiquinonoid -hemiramph -Hemiramphidae -Hemiramphinae -hemiramphine -Hemiramphus -hemisaprophyte -hemisaprophytic -hemiscotosis -hemisect -hemisection -hemispasm -hemispheral -hemisphere -hemisphered -hemispherical -hemispherically -hemispheroid -hemispheroidal -hemispherule -hemistater -hemistich -hemistichal -hemistrumectomy -hemisymmetrical -hemisymmetry -hemisystole -hemiterata -hemiteratic -hemiteratics -hemiteria -hemiterpene -hemitery -hemithyroidectomy -hemitone -hemitremor -hemitrichous -hemitriglyph -hemitropal -hemitrope -hemitropic -hemitropism -hemitropous -hemitropy -hemitype -hemitypic -hemivagotony -heml -hemlock -hemmel -hemmer -hemoalkalimeter -hemoblast -hemochromatosis -hemochrome -hemochromogen -hemochromometer -hemochromometry -hemoclasia -hemoclasis -hemoclastic -hemocoel -hemocoele -hemocoelic -hemocoelom -hemoconcentration -hemoconia -hemoconiosis -hemocry -hemocrystallin -hemoculture -hemocyanin -hemocyte -hemocytoblast -hemocytogenesis -hemocytolysis -hemocytometer -hemocytotripsis -hemocytozoon -hemocyturia -hemodiagnosis -hemodilution -hemodrometer -hemodrometry -hemodromograph -hemodromometer -hemodynameter -hemodynamic -hemodynamics -hemodystrophy -hemoerythrin -hemoflagellate -hemofuscin -hemogastric -hemogenesis -hemogenetic -hemogenic -hemogenous -hemoglobic -hemoglobin -hemoglobinemia -hemoglobiniferous -hemoglobinocholia -hemoglobinometer -hemoglobinophilic -hemoglobinous -hemoglobinuria -hemoglobinuric -hemoglobulin -hemogram -hemogregarine -hemoid -hemokonia -hemokoniosis -hemol -hemoleucocyte -hemoleucocytic -hemologist -hemology -hemolymph -hemolymphatic -hemolysin -hemolysis -hemolytic -hemolyze -hemomanometer -hemometer -hemometry -hemonephrosis -hemopathology -hemopathy -hemopericardium -hemoperitoneum -hemopexis -hemophage -hemophagia -hemophagocyte -hemophagocytosis -hemophagous -hemophagy -hemophile -Hemophileae -hemophilia -hemophiliac -hemophilic -Hemophilus -hemophobia -hemophthalmia -hemophthisis -hemopiezometer -hemoplasmodium -hemoplastic -hemopneumothorax -hemopod -hemopoiesis -hemopoietic -hemoproctia -hemoptoe -hemoptysis -hemopyrrole -hemorrhage -hemorrhagic -hemorrhagin -hemorrhea -hemorrhodin -hemorrhoid -hemorrhoidal -hemorrhoidectomy -hemosalpinx -hemoscope -hemoscopy -hemosiderin -hemosiderosis -hemospasia -hemospastic -hemospermia -hemosporid -hemosporidian -hemostasia -hemostasis -hemostat -hemostatic -hemotachometer -hemotherapeutics -hemotherapy -hemothorax -hemotoxic -hemotoxin -hemotrophe -hemotropic -hemozoon -hemp -hempbush -hempen -hemplike -hempseed -hempstring -hempweed -hempwort -hempy -hemstitch -hemstitcher -hen -henad -henbane -henbill -henbit -hence -henceforth -henceforward -henceforwards -henchboy -henchman -henchmanship -hencoop -hencote -hend -hendecacolic -hendecagon -hendecagonal -hendecahedron -hendecane -hendecasemic -hendecasyllabic -hendecasyllable -hendecatoic -hendecoic -hendecyl -hendiadys -hendly -hendness -heneicosane -henequen -henfish -henhearted -henhouse -henhussy -henism -henlike -henmoldy -henna -Hennebique -hennery -hennin -hennish -henny -henogeny -henotheism -henotheist -henotheistic -henotic -henpeck -henpen -Henrician -Henrietta -henroost -Henry -henry -hent -Hentenian -henter -hentriacontane -henware -henwife -henwise -henwoodite -henyard -heortological -heortologion -heortology -hep -hepar -heparin -heparinize -hepatalgia -hepatatrophia -hepatatrophy -hepatauxe -hepatectomy -hepatic -Hepatica -hepatica -Hepaticae -hepatical -hepaticoduodenostomy -hepaticoenterostomy -hepaticogastrostomy -hepaticologist -hepaticology -hepaticopulmonary -hepaticostomy -hepaticotomy -hepatite -hepatitis -hepatization -hepatize -hepatocele -hepatocirrhosis -hepatocolic -hepatocystic -hepatoduodenal -hepatoduodenostomy -hepatodynia -hepatodysentery -hepatoenteric -hepatoflavin -hepatogastric -hepatogenic -hepatogenous -hepatography -hepatoid -hepatolenticular -hepatolith -hepatolithiasis -hepatolithic -hepatological -hepatologist -hepatology -hepatolysis -hepatolytic -hepatoma -hepatomalacia -hepatomegalia -hepatomegaly -hepatomelanosis -hepatonephric -hepatopathy -hepatoperitonitis -hepatopexia -hepatopexy -hepatophlebitis -hepatophlebotomy -hepatophyma -hepatopneumonic -hepatoportal -hepatoptosia -hepatoptosis -hepatopulmonary -hepatorenal -hepatorrhagia -hepatorrhaphy -hepatorrhea -hepatorrhexis -hepatorrhoea -hepatoscopy -hepatostomy -hepatotherapy -hepatotomy -hepatotoxemia -hepatoumbilical -hepcat -Hephaesteum -Hephaestian -Hephaestic -Hephaestus -hephthemimer -hephthemimeral -hepialid -Hepialidae -Hepialus -heppen -hepper -heptacapsular -heptace -heptachord -heptachronous -heptacolic -heptacosane -heptad -heptadecane -heptadecyl -heptaglot -heptagon -heptagonal -heptagynous -heptahedral -heptahedrical -heptahedron -heptahexahedral -heptahydrate -heptahydrated -heptahydric -heptahydroxy -heptal -heptameride -Heptameron -heptamerous -heptameter -heptamethylene -heptametrical -heptanaphthene -Heptanchus -heptandrous -heptane -Heptanesian -heptangular -heptanoic -heptanone -heptapetalous -heptaphyllous -heptaploid -heptaploidy -heptapodic -heptapody -heptarch -heptarchal -heptarchic -heptarchical -heptarchist -heptarchy -heptasemic -heptasepalous -heptaspermous -heptastich -heptastrophic -heptastylar -heptastyle -heptasulphide -heptasyllabic -Heptateuch -heptatomic -heptatonic -Heptatrema -heptavalent -heptene -hepteris -heptine -heptite -heptitol -heptoic -heptorite -heptose -heptoxide -Heptranchias -heptyl -heptylene -heptylic -heptyne -her -Heraclean -Heracleidan -Heracleonite -Heracleopolitan -Heracleopolite -Heracleum -Heraclid -Heraclidae -Heraclidan -Heraclitean -Heracliteanism -Heraclitic -Heraclitical -Heraclitism -Herakles -herald -heraldess -heraldic -heraldical -heraldically -heraldist -heraldize -heraldress -heraldry -heraldship -herapathite -Herat -Herb -herb -herbaceous -herbaceously -herbage -herbaged -herbager -herbagious -herbal -herbalism -herbalist -herbalize -herbane -herbaria -herbarial -herbarian -herbarism -herbarist -herbarium -herbarize -Herbartian -Herbartianism -herbary -Herbert -herbescent -herbicidal -herbicide -herbicolous -herbiferous -herbish -herbist -Herbivora -herbivore -herbivority -herbivorous -herbless -herblet -herblike -herbman -herborist -herborization -herborize -herborizer -herbose -herbosity -herbous -herbwife -herbwoman -herby -hercogamous -hercogamy -Herculanean -Herculanensian -Herculanian -Herculean -Hercules -Herculid -Hercynian -hercynite -herd -herdbook -herdboy -herder -herderite -herdic -herding -herdship -herdsman -herdswoman -herdwick -here -hereabout -hereadays -hereafter -hereafterward -hereamong -hereat -hereaway -hereaways -herebefore -hereby -heredipetous -heredipety -hereditability -hereditable -hereditably -hereditament -hereditarian -hereditarianism -hereditarily -hereditariness -hereditarist -hereditary -hereditation -hereditative -hereditism -hereditist -hereditivity -heredity -heredium -heredofamilial -heredolues -heredoluetic -heredosyphilis -heredosyphilitic -heredosyphilogy -heredotuberculosis -Hereford -herefrom -heregeld -herein -hereinabove -hereinafter -hereinbefore -hereinto -herem -hereness -hereniging -hereof -hereon -hereright -Herero -heresiarch -heresimach -heresiographer -heresiography -heresiologer -heresiologist -heresiology -heresy -heresyphobia -heresyproof -heretic -heretical -heretically -hereticalness -hereticate -heretication -hereticator -hereticide -hereticize -hereto -heretoch -heretofore -heretoforetime -heretoga -heretrix -hereunder -hereunto -hereupon -hereward -herewith -herewithal -herile -heriot -heriotable -herisson -heritability -heritable -heritably -heritage -heritance -Heritiera -heritor -heritress -heritrix -herl -herling -herma -hermaean -hermaic -Herman -hermaphrodite -hermaphroditic -hermaphroditical -hermaphroditically -hermaphroditish -hermaphroditism -hermaphroditize -Hermaphroditus -hermeneut -hermeneutic -hermeneutical -hermeneutically -hermeneutics -hermeneutist -Hermes -Hermesian -Hermesianism -Hermetic -hermetic -hermetical -hermetically -hermeticism -Hermetics -Hermetism -Hermetist -hermidin -Herminone -Hermione -Hermit -hermit -hermitage -hermitary -hermitess -hermitic -hermitical -hermitically -hermitish -hermitism -hermitize -hermitry -hermitship -Hermo -hermodact -hermodactyl -Hermogenian -hermoglyphic -hermoglyphist -hermokopid -hern -Hernandia -Hernandiaceae -hernandiaceous -hernanesell -hernani -hernant -herne -hernia -hernial -Herniaria -herniarin -herniary -herniate -herniated -herniation -hernioenterotomy -hernioid -herniology -herniopuncture -herniorrhaphy -herniotome -herniotomist -herniotomy -hero -heroarchy -Herodian -herodian -Herodianic -Herodii -Herodiones -herodionine -heroess -herohead -herohood -heroic -heroical -heroically -heroicalness -heroicity -heroicly -heroicness -heroicomic -heroicomical -heroid -Heroides -heroify -Heroin -heroin -heroine -heroineship -heroinism -heroinize -heroism -heroistic -heroization -heroize -herolike -heromonger -heron -heroner -heronite -heronry -heroogony -heroologist -heroology -Herophile -Herophilist -heroship -herotheism -herpes -Herpestes -Herpestinae -herpestine -herpetic -herpetiform -herpetism -herpetography -herpetoid -herpetologic -herpetological -herpetologically -herpetologist -herpetology -herpetomonad -Herpetomonas -herpetophobia -herpetotomist -herpetotomy -herpolhode -Herpotrichia -herrengrundite -Herrenvolk -herring -herringbone -herringer -Herrnhuter -hers -Herschelian -herschelite -herse -hersed -herself -hership -hersir -hertz -hertzian -Heruli -Herulian -Hervati -Herve -Herzegovinian -Hesiodic -Hesione -Hesionidae -hesitance -hesitancy -hesitant -hesitantly -hesitate -hesitater -hesitating -hesitatingly -hesitatingness -hesitation -hesitative -hesitatively -hesitatory -Hesper -Hespera -Hesperia -Hesperian -Hesperic -Hesperid -hesperid -hesperidate -hesperidene -hesperideous -Hesperides -Hesperidian -hesperidin -hesperidium -hesperiid -Hesperiidae -hesperinon -Hesperis -hesperitin -Hesperornis -Hesperornithes -hesperornithid -Hesperornithiformes -hesperornithoid -Hesperus -Hessian -hessite -hessonite -hest -Hester -hestern -hesternal -Hesther -hesthogenous -Hesychasm -Hesychast -hesychastic -het -hetaera -hetaeria -hetaeric -hetaerism -Hetaerist -hetaerist -hetaeristic -hetaerocracy -hetaerolite -hetaery -heteradenia -heteradenic -heterakid -Heterakis -Heteralocha -heterandrous -heterandry -heteratomic -heterauxesis -heteraxial -heteric -heterically -hetericism -hetericist -heterism -heterization -heterize -hetero -heteroagglutinin -heteroalbumose -heteroauxin -heteroblastic -heteroblastically -heteroblasty -heterocarpism -heterocarpous -Heterocarpus -heterocaseose -heterocellular -heterocentric -heterocephalous -Heterocera -heterocerc -heterocercal -heterocercality -heterocercy -heterocerous -heterochiral -heterochlamydeous -Heterochloridales -heterochromatic -heterochromatin -heterochromatism -heterochromatization -heterochromatized -heterochrome -heterochromia -heterochromic -heterochromosome -heterochromous -heterochromy -heterochronic -heterochronism -heterochronistic -heterochronous -heterochrony -heterochrosis -heterochthon -heterochthonous -heterocline -heteroclinous -heteroclital -heteroclite -heteroclitica -heteroclitous -Heterocoela -heterocoelous -Heterocotylea -heterocycle -heterocyclic -heterocyst -heterocystous -heterodactyl -Heterodactylae -heterodactylous -Heterodera -Heterodon -heterodont -Heterodonta -Heterodontidae -heterodontism -heterodontoid -Heterodontus -heterodox -heterodoxal -heterodoxical -heterodoxly -heterodoxness -heterodoxy -heterodromous -heterodromy -heterodyne -heteroecious -heteroeciously -heteroeciousness -heteroecism -heteroecismal -heteroecy -heteroepic -heteroepy -heteroerotic -heteroerotism -heterofermentative -heterofertilization -heterogalactic -heterogamete -heterogametic -heterogametism -heterogamety -heterogamic -heterogamous -heterogamy -heterogangliate -heterogen -heterogene -heterogeneal -heterogenean -heterogeneity -heterogeneous -heterogeneously -heterogeneousness -heterogenesis -heterogenetic -heterogenic -heterogenicity -heterogenist -heterogenous -heterogeny -heteroglobulose -heterognath -Heterognathi -heterogone -heterogonism -heterogonous -heterogonously -heterogony -heterograft -heterographic -heterographical -heterography -Heterogyna -heterogynal -heterogynous -heteroicous -heteroimmune -heteroinfection -heteroinoculable -heteroinoculation -heterointoxication -heterokaryon -heterokaryosis -heterokaryotic -heterokinesis -heterokinetic -Heterokontae -heterokontan -heterolalia -heterolateral -heterolecithal -heterolith -heterolobous -heterologic -heterological -heterologically -heterologous -heterology -heterolysin -heterolysis -heterolytic -heteromallous -heteromastigate -heteromastigote -Heteromeles -Heteromera -heteromeral -Heteromeran -Heteromeri -heteromeric -heteromerous -Heterometabola -heterometabole -heterometabolic -heterometabolism -heterometabolous -heterometaboly -heterometric -Heteromi -Heteromita -Heteromorpha -Heteromorphae -heteromorphic -heteromorphism -heteromorphite -heteromorphosis -heteromorphous -heteromorphy -Heteromya -Heteromyaria -heteromyarian -Heteromyidae -Heteromys -heteronereid -heteronereis -Heteroneura -heteronomous -heteronomously -heteronomy -heteronuclear -heteronym -heteronymic -heteronymous -heteronymously -heteronymy -heteroousia -Heteroousian -heteroousian -Heteroousiast -heteroousious -heteropathic -heteropathy -heteropelmous -heteropetalous -Heterophaga -Heterophagi -heterophagous -heterophasia -heterophemism -heterophemist -heterophemistic -heterophemize -heterophemy -heterophile -heterophoria -heterophoric -heterophylesis -heterophyletic -heterophyllous -heterophylly -heterophyly -heterophyte -heterophytic -Heteropia -Heteropidae -heteroplasia -heteroplasm -heteroplastic -heteroplasty -heteroploid -heteroploidy -heteropod -Heteropoda -heteropodal -heteropodous -heteropolar -heteropolarity -heteropoly -heteroproteide -heteroproteose -heteropter -Heteroptera -heteropterous -heteroptics -heteropycnosis -Heterorhachis -heteroscope -heteroscopy -heterosexual -heterosexuality -heteroside -Heterosiphonales -heterosis -Heterosomata -Heterosomati -heterosomatous -heterosome -Heterosomi -heterosomous -Heterosporeae -heterosporic -Heterosporium -heterosporous -heterospory -heterostatic -heterostemonous -Heterostraca -heterostracan -Heterostraci -heterostrophic -heterostrophous -heterostrophy -heterostyled -heterostylism -heterostylous -heterostyly -heterosuggestion -heterosyllabic -heterotactic -heterotactous -heterotaxia -heterotaxic -heterotaxis -heterotaxy -heterotelic -heterothallic -heterothallism -heterothermal -heterothermic -heterotic -heterotopia -heterotopic -heterotopism -heterotopous -heterotopy -heterotransplant -heterotransplantation -heterotrich -Heterotricha -Heterotrichales -Heterotrichida -heterotrichosis -heterotrichous -heterotropal -heterotroph -heterotrophic -heterotrophy -heterotropia -heterotropic -heterotropous -heterotype -heterotypic -heterotypical -heteroxanthine -heteroxenous -heterozetesis -heterozygosis -heterozygosity -heterozygote -heterozygotic -heterozygous -heterozygousness -hething -hetman -hetmanate -hetmanship -hetter -hetterly -Hettie -Hetty -heuau -Heuchera -heugh -heulandite -heumite -heuretic -heuristic -heuristically -Hevea -hevi -hew -hewable -hewel -hewer -hewettite -hewhall -hewn -hewt -hex -hexa -hexabasic -Hexabiblos -hexabiose -hexabromide -hexacanth -hexacanthous -hexacapsular -hexacarbon -hexace -hexachloride -hexachlorocyclohexane -hexachloroethane -hexachord -hexachronous -hexacid -hexacolic -Hexacoralla -hexacorallan -Hexacorallia -hexacosane -hexacosihedroid -hexact -hexactinal -hexactine -hexactinellid -Hexactinellida -hexactinellidan -hexactinelline -hexactinian -hexacyclic -hexad -hexadactyle -hexadactylic -hexadactylism -hexadactylous -hexadactyly -hexadecahedroid -hexadecane -hexadecanoic -hexadecene -hexadecyl -hexadic -hexadiene -hexadiyne -hexafoil -hexaglot -hexagon -hexagonal -hexagonally -hexagonial -hexagonical -hexagonous -hexagram -Hexagrammidae -hexagrammoid -Hexagrammos -hexagyn -Hexagynia -hexagynian -hexagynous -hexahedral -hexahedron -hexahydrate -hexahydrated -hexahydric -hexahydride -hexahydrite -hexahydrobenzene -hexahydroxy -hexakisoctahedron -hexakistetrahedron -hexameral -hexameric -hexamerism -hexameron -hexamerous -hexameter -hexamethylenamine -hexamethylene -hexamethylenetetramine -hexametral -hexametric -hexametrical -hexametrist -hexametrize -hexametrographer -Hexamita -hexamitiasis -hexammine -hexammino -hexanaphthene -Hexanchidae -Hexanchus -Hexandria -hexandric -hexandrous -hexandry -hexane -hexanedione -hexangular -hexangularly -hexanitrate -hexanitrodiphenylamine -hexapartite -hexaped -hexapetaloid -hexapetaloideous -hexapetalous -hexaphyllous -hexapla -hexaplar -hexaplarian -hexaplaric -hexaploid -hexaploidy -hexapod -Hexapoda -hexapodal -hexapodan -hexapodous -hexapody -hexapterous -hexaradial -hexarch -hexarchy -hexaseme -hexasemic -hexasepalous -hexaspermous -hexastemonous -hexaster -hexastich -hexastichic -hexastichon -hexastichous -hexastichy -hexastigm -hexastylar -hexastyle -hexastylos -hexasulphide -hexasyllabic -hexatetrahedron -Hexateuch -Hexateuchal -hexathlon -hexatomic -hexatriacontane -hexatriose -hexavalent -hexecontane -hexenbesen -hexene -hexer -hexerei -hexeris -hexestrol -hexicological -hexicology -hexine -hexiological -hexiology -hexis -hexitol -hexoctahedral -hexoctahedron -hexode -hexoestrol -hexogen -hexoic -hexokinase -hexone -hexonic -hexosamine -hexosaminic -hexosan -hexose -hexosediphosphoric -hexosemonophosphoric -hexosephosphatase -hexosephosphoric -hexoylene -hexpartite -hexyl -hexylene -hexylic -hexylresorcinol -hexyne -hey -heyday -Hezron -Hezronites -hi -hia -Hianakoto -hiant -hiatal -hiate -hiation -hiatus -Hibbertia -hibbin -hibernacle -hibernacular -hibernaculum -hibernal -hibernate -hibernation -hibernator -Hibernia -Hibernian -Hibernianism -Hibernic -Hibernical -Hibernically -Hibernicism -Hibernicize -Hibernization -Hibernize -Hibernologist -Hibernology -Hibiscus -Hibito -Hibitos -Hibunci -hic -hicatee -hiccup -hick -hickey -hickory -Hicksite -hickwall -Hicoria -hidable -hidage -hidalgism -hidalgo -hidalgoism -hidated -hidation -Hidatsa -hidden -hiddenite -hiddenly -hiddenmost -hiddenness -hide -hideaway -hidebind -hidebound -hideboundness -hided -hideland -hideless -hideling -hideosity -hideous -hideously -hideousness -hider -hidling -hidlings -hidradenitis -hidrocystoma -hidromancy -hidropoiesis -hidrosis -hidrotic -hie -hieder -hielaman -hield -hielmite -hiemal -hiemation -Hienz -Hieracian -Hieracium -hieracosphinx -hierapicra -hierarch -hierarchal -hierarchic -hierarchical -hierarchically -hierarchism -hierarchist -hierarchize -hierarchy -hieratic -hieratical -hieratically -hieraticism -hieratite -Hierochloe -hierocracy -hierocratic -hierocratical -hierodule -hierodulic -Hierofalco -hierogamy -hieroglyph -hieroglypher -hieroglyphic -hieroglyphical -hieroglyphically -hieroglyphist -hieroglyphize -hieroglyphology -hieroglyphy -hierogram -hierogrammat -hierogrammate -hierogrammateus -hierogrammatic -hierogrammatical -hierogrammatist -hierograph -hierographer -hierographic -hierographical -hierography -hierolatry -hierologic -hierological -hierologist -hierology -hieromachy -hieromancy -hieromnemon -hieromonach -hieron -Hieronymic -Hieronymite -hieropathic -hierophancy -hierophant -hierophantes -hierophantic -hierophantically -hierophanticly -hieros -hieroscopy -Hierosolymitan -Hierosolymite -hierurgical -hierurgy -hifalutin -higdon -higgaion -higginsite -higgle -higglehaggle -higgler -higglery -high -highball -highbelia -highbinder -highborn -highboy -highbred -higher -highermost -highest -highfalutin -highfaluting -highfalutinism -highflying -highhanded -highhandedly -highhandedness -highhearted -highheartedly -highheartedness -highish -highjack -highjacker -highland -highlander -highlandish -Highlandman -Highlandry -highlight -highliving -highly -highman -highmoor -highmost -highness -highroad -hight -hightoby -hightop -highway -highwayman -higuero -hijack -hike -hiker -Hilaria -hilarious -hilariously -hilariousness -hilarity -Hilary -Hilarymas -Hilarytide -hilasmic -hilch -Hilda -Hildebrand -Hildebrandian -Hildebrandic -Hildebrandine -Hildebrandism -Hildebrandist -Hildebrandslied -Hildegarde -hilding -hiliferous -hill -Hillary -hillberry -hillbilly -hillculture -hillebrandite -Hillel -hiller -hillet -Hillhousia -hilliness -hillman -hillock -hillocked -hillocky -hillsale -hillsalesman -hillside -hillsman -hilltop -hilltrot -hillward -hillwoman -hilly -hilsa -hilt -hiltless -hilum -hilus -him -Hima -Himalaya -Himalayan -Himantopus -himation -Himawan -himp -himself -himward -himwards -Himyaric -Himyarite -Himyaritic -hin -hinau -Hinayana -hinch -hind -hindberry -hindbrain -hindcast -hinddeck -hinder -hinderance -hinderer -hinderest -hinderful -hinderfully -hinderingly -hinderlands -hinderlings -hinderlins -hinderly -hinderment -hindermost -hindersome -hindhand -hindhead -Hindi -hindmost -hindquarter -hindrance -hindsaddle -hindsight -Hindu -Hinduism -Hinduize -Hindustani -hindward -hing -hinge -hingecorner -hingeflower -hingeless -hingelike -hinger -hingeways -hingle -hinney -hinnible -Hinnites -hinny -hinoid -hinoideous -hinoki -hinsdalite -hint -hintedly -hinter -hinterland -hintingly -hintproof -hintzeite -Hiodon -hiodont -Hiodontidae -hiortdahlite -hip -hipbone -hipe -hiper -hiphalt -hipless -hipmold -Hippa -hippalectryon -hipparch -Hipparion -Hippeastrum -hipped -Hippelates -hippen -Hippia -hippian -hippiater -hippiatric -hippiatrical -hippiatrics -hippiatrist -hippiatry -hippic -Hippidae -Hippidion -Hippidium -hipping -hippish -hipple -hippo -Hippobosca -hippoboscid -Hippoboscidae -hippocamp -hippocampal -hippocampi -hippocampine -hippocampus -Hippocastanaceae -hippocastanaceous -hippocaust -hippocentaur -hippocentauric -hippocerf -hippocoprosterol -hippocras -Hippocratea -Hippocrateaceae -hippocrateaceous -Hippocratian -Hippocratic -Hippocratical -Hippocratism -Hippocrene -Hippocrenian -hippocrepian -hippocrepiform -Hippodamia -hippodamous -hippodrome -hippodromic -hippodromist -hippogastronomy -Hippoglosinae -Hippoglossidae -Hippoglossus -hippogriff -hippogriffin -hippoid -hippolite -hippolith -hippological -hippologist -hippology -Hippolytan -Hippolyte -Hippolytidae -Hippolytus -hippomachy -hippomancy -hippomanes -Hippomedon -hippomelanin -Hippomenes -hippometer -hippometric -hippometry -Hipponactean -hipponosological -hipponosology -hippopathological -hippopathology -hippophagi -hippophagism -hippophagist -hippophagistical -hippophagous -hippophagy -hippophile -hippophobia -hippopod -hippopotami -hippopotamian -hippopotamic -Hippopotamidae -hippopotamine -hippopotamoid -hippopotamus -Hipposelinum -hippotigrine -Hippotigris -hippotomical -hippotomist -hippotomy -hippotragine -Hippotragus -hippurate -hippuric -hippurid -Hippuridaceae -Hippuris -hippurite -Hippurites -hippuritic -Hippuritidae -hippuritoid -hippus -hippy -hipshot -hipwort -hirable -hiragana -Hiram -Hiramite -hircarra -hircine -hircinous -hircocerf -hircocervus -hircosity -hire -hired -hireless -hireling -hireman -Hiren -hirer -hirmologion -hirmos -Hirneola -hiro -Hirofumi -hirondelle -Hirotoshi -Hiroyuki -hirple -hirrient -hirse -hirsel -hirsle -hirsute -hirsuteness -hirsuties -hirsutism -hirsutulous -Hirtella -hirtellous -Hirudin -hirudine -Hirudinea -hirudinean -hirudiniculture -Hirudinidae -hirudinize -hirudinoid -Hirudo -hirundine -Hirundinidae -hirundinous -Hirundo -his -hish -hisingerite -hisn -Hispa -Hispania -Hispanic -Hispanicism -Hispanicize -hispanidad -Hispaniolate -Hispaniolize -Hispanist -Hispanize -Hispanophile -Hispanophobe -hispid -hispidity -hispidulate -hispidulous -Hispinae -hiss -hisser -hissing -hissingly -hissproof -hist -histaminase -histamine -histaminic -histidine -histie -histiocyte -histiocytic -histioid -histiology -Histiophoridae -Histiophorus -histoblast -histochemic -histochemical -histochemistry -histoclastic -histocyte -histodiagnosis -histodialysis -histodialytic -histogen -histogenesis -histogenetic -histogenetically -histogenic -histogenous -histogeny -histogram -histographer -histographic -histographical -histography -histoid -histologic -histological -histologically -histologist -histology -histolysis -histolytic -histometabasis -histomorphological -histomorphologically -histomorphology -histon -histonal -histone -histonomy -histopathologic -histopathological -histopathologist -histopathology -histophyly -histophysiological -histophysiology -Histoplasma -histoplasmin -histoplasmosis -historial -historian -historiated -historic -historical -historically -historicalness -historician -historicism -historicity -historicize -historicocabbalistical -historicocritical -historicocultural -historicodogmatic -historicogeographical -historicophilosophica -historicophysical -historicopolitical -historicoprophetic -historicoreligious -historics -historicus -historied -historier -historiette -historify -historiograph -historiographer -historiographership -historiographic -historiographical -historiographically -historiography -historiological -historiology -historiometric -historiometry -historionomer -historious -historism -historize -history -histotherapist -histotherapy -histotome -histotomy -histotrophic -histotrophy -histotropic -histozoic -histozyme -histrio -Histriobdella -Histriomastix -histrion -histrionic -histrionical -histrionically -histrionicism -histrionism -hit -hitch -hitcher -hitchhike -hitchhiker -hitchily -hitchiness -Hitchiti -hitchproof -hitchy -hithe -hither -hithermost -hitherto -hitherward -Hitlerism -Hitlerite -hitless -Hitoshi -hittable -hitter -Hittite -Hittitics -Hittitology -Hittology -hive -hiveless -hiver -hives -hiveward -Hivite -hizz -Hler -Hlidhskjalf -Hlithskjalf -Hlorrithi -Ho -ho -hoar -hoard -hoarder -hoarding -hoardward -hoarfrost -hoarhead -hoarheaded -hoarhound -hoarily -hoariness -hoarish -hoarness -hoarse -hoarsely -hoarsen -hoarseness -hoarstone -hoarwort -hoary -hoaryheaded -hoast -hoastman -hoatzin -hoax -hoaxee -hoaxer -hoaxproof -hob -hobber -Hobbesian -hobbet -Hobbian -hobbil -Hobbism -Hobbist -Hobbistical -hobble -hobblebush -hobbledehoy -hobbledehoydom -hobbledehoyhood -hobbledehoyish -hobbledehoyishness -hobbledehoyism -hobbledygee -hobbler -hobbling -hobblingly -hobbly -hobby -hobbyhorse -hobbyhorsical -hobbyhorsically -hobbyism -hobbyist -hobbyless -hobgoblin -hoblike -hobnail -hobnailed -hobnailer -hobnob -hobo -hoboism -Hobomoco -hobthrush -hocco -Hochelaga -Hochheimer -hock -Hockday -hockelty -hocker -hocket -hockey -hockshin -Hocktide -hocky -hocus -hod -hodden -hodder -hoddle -hoddy -hodening -hodful -hodgepodge -Hodgkin -hodgkinsonite -hodiernal -hodman -hodmandod -hodograph -hodometer -hodometrical -hoe -hoecake -hoedown -hoeful -hoer -hoernesite -Hoffmannist -Hoffmannite -hog -hoga -hogan -Hogarthian -hogback -hogbush -hogfish -hogframe -hogged -hogger -hoggerel -hoggery -hogget -hoggie -hoggin -hoggish -hoggishly -hoggishness -hoggism -hoggy -hogherd -hoghide -hoghood -hoglike -hogling -hogmace -hogmanay -Hogni -hognose -hognut -hogpen -hogreeve -hogrophyte -hogshead -hogship -hogshouther -hogskin -hogsty -hogward -hogwash -hogweed -hogwort -hogyard -Hohe -Hohenzollern -Hohenzollernism -Hohn -Hohokam -hoi -hoick -hoin -hoise -hoist -hoistaway -hoister -hoisting -hoistman -hoistway -hoit -hoju -Hokan -hokey -hokeypokey -hokum -holagogue -holarctic -holard -holarthritic -holarthritis -holaspidean -holcad -holcodont -Holconoti -Holcus -hold -holdable -holdall -holdback -holden -holdenite -holder -holdership -holdfast -holdfastness -holding -holdingly -holdout -holdover -holdsman -holdup -hole -holeable -Holectypina -holectypoid -holeless -holeman -holeproof -holer -holethnic -holethnos -holewort -holey -holia -holiday -holidayer -holidayism -holidaymaker -holidaymaking -holily -holiness -holing -holinight -holism -holistic -holistically -holl -holla -hollaite -Holland -hollandaise -Hollander -Hollandish -hollandite -Hollands -Hollantide -holler -hollin -holliper -hollo -hollock -hollong -hollow -hollower -hollowfaced -hollowfoot -hollowhearted -hollowheartedness -hollowly -hollowness -holluschick -Holly -holly -hollyhock -Hollywood -Hollywooder -Hollywoodize -holm -holmberry -holmgang -holmia -holmic -holmium -holmos -holobaptist -holobenthic -holoblastic -holoblastically -holobranch -holocaine -holocarpic -holocarpous -holocaust -holocaustal -holocaustic -Holocene -holocentrid -Holocentridae -holocentroid -Holocentrus -Holocephala -holocephalan -Holocephali -holocephalian -holocephalous -Holochoanites -holochoanitic -holochoanoid -Holochoanoida -holochoanoidal -holochordate -holochroal -holoclastic -holocrine -holocryptic -holocrystalline -holodactylic -holodedron -Holodiscus -hologamous -hologamy -hologastrula -hologastrular -Holognatha -holognathous -hologonidium -holograph -holographic -holographical -holohedral -holohedric -holohedrism -holohemihedral -holohyaline -holomastigote -Holometabola -holometabole -holometabolian -holometabolic -holometabolism -holometabolous -holometaboly -holometer -holomorph -holomorphic -holomorphism -holomorphosis -holomorphy -Holomyaria -holomyarian -Holomyarii -holoparasite -holoparasitic -Holophane -holophane -holophotal -holophote -holophotometer -holophrase -holophrasis -holophrasm -holophrastic -holophyte -holophytic -holoplankton -holoplanktonic -holoplexia -holopneustic -holoproteide -holoptic -holoptychian -holoptychiid -Holoptychiidae -Holoptychius -holoquinoid -holoquinoidal -holoquinonic -holoquinonoid -holorhinal -holosaprophyte -holosaprophytic -holosericeous -holoside -holosiderite -Holosiphona -holosiphonate -Holosomata -holosomatous -holospondaic -holostean -Holostei -holosteous -holosteric -Holosteum -Holostomata -holostomate -holostomatous -holostome -holostomous -holostylic -holosymmetric -holosymmetrical -holosymmetry -holosystematic -holosystolic -holothecal -holothoracic -Holothuria -holothurian -Holothuridea -holothurioid -Holothurioidea -holotonia -holotonic -holotony -holotrich -Holotricha -holotrichal -Holotrichida -holotrichous -holotype -holour -holozoic -Holstein -holster -holstered -holt -holy -holyday -holyokeite -holystone -holytide -homage -homageable -homager -Homalocenchrus -homalogonatous -homalographic -homaloid -homaloidal -Homalonotus -Homalopsinae -Homaloptera -Homalopterous -homalosternal -Homalosternii -Homam -Homaridae -homarine -homaroid -Homarus -homatomic -homaxial -homaxonial -homaxonic -Homburg -home -homebody -homeborn -homebound -homebred -homecomer -homecraft -homecroft -homecrofter -homecrofting -homefarer -homefelt -homegoer -homekeeper -homekeeping -homeland -homelander -homeless -homelessly -homelessness -homelet -homelike -homelikeness -homelily -homeliness -homeling -homely -homelyn -homemade -homemaker -homemaking -homeoblastic -homeochromatic -homeochromatism -homeochronous -homeocrystalline -homeogenic -homeogenous -homeoid -homeoidal -homeoidality -homeokinesis -homeokinetic -homeomerous -homeomorph -homeomorphic -homeomorphism -homeomorphous -homeomorphy -homeopath -homeopathic -homeopathically -homeopathician -homeopathicity -homeopathist -homeopathy -homeophony -homeoplasia -homeoplastic -homeoplasy -homeopolar -homeosis -homeostasis -homeostatic -homeotic -homeotransplant -homeotransplantation -homeotype -homeotypic -homeotypical -homeowner -homeozoic -Homer -homer -Homerian -Homeric -Homerical -Homerically -Homerid -Homeridae -Homeridian -Homerist -Homerologist -Homerology -Homeromastix -homeseeker -homesick -homesickly -homesickness -homesite -homesome -homespun -homestall -homestead -homesteader -homester -homestretch -homeward -homewardly -homework -homeworker -homewort -homey -homeyness -homicidal -homicidally -homicide -homicidious -homiculture -homilete -homiletic -homiletical -homiletically -homiletics -homiliarium -homiliary -homilist -homilite -homilize -homily -hominal -hominess -Hominian -hominid -Hominidae -hominiform -hominify -hominine -hominisection -hominivorous -hominoid -hominy -homish -homishness -homo -homoanisaldehyde -homoanisic -homoarecoline -homobaric -homoblastic -homoblasty -homocarpous -homocategoric -homocentric -homocentrical -homocentrically -homocerc -homocercal -homocercality -homocercy -homocerebrin -homochiral -homochlamydeous -homochromatic -homochromatism -homochrome -homochromic -homochromosome -homochromous -homochromy -homochronous -homoclinal -homocline -Homocoela -homocoelous -homocreosol -homocyclic -homodermic -homodermy -homodont -homodontism -homodox -homodoxian -homodromal -homodrome -homodromous -homodromy -homodynamic -homodynamous -homodynamy -homodyne -Homoean -Homoeanism -homoecious -homoeoarchy -homoeoblastic -homoeochromatic -homoeochronous -homoeocrystalline -homoeogenic -homoeogenous -homoeography -homoeokinesis -homoeomerae -Homoeomeri -homoeomeria -homoeomerian -homoeomerianism -homoeomeric -homoeomerical -homoeomerous -homoeomery -homoeomorph -homoeomorphic -homoeomorphism -homoeomorphous -homoeomorphy -homoeopath -homoeopathic -homoeopathically -homoeopathician -homoeopathicity -homoeopathist -homoeopathy -homoeophony -homoeophyllous -homoeoplasia -homoeoplastic -homoeoplasy -homoeopolar -homoeosis -homoeotel -homoeoteleutic -homoeoteleuton -homoeotic -homoeotopy -homoeotype -homoeotypic -homoeotypical -homoeozoic -homoerotic -homoerotism -homofermentative -homogametic -homogamic -homogamous -homogamy -homogangliate -homogen -homogenate -homogene -homogeneal -homogenealness -homogeneate -homogeneity -homogeneization -homogeneize -homogeneous -homogeneously -homogeneousness -homogenesis -homogenetic -homogenetical -homogenic -homogenization -homogenize -homogenizer -homogenous -homogentisic -homogeny -homoglot -homogone -homogonous -homogonously -homogony -homograft -homograph -homographic -homography -homohedral -homoiotherm -homoiothermal -homoiothermic -homoiothermism -homoiothermous -homoiousia -Homoiousian -homoiousian -Homoiousianism -homoiousious -homolateral -homolecithal -homolegalis -homologate -homologation -homologic -homological -homologically -homologist -homologize -homologizer -homologon -homologoumena -homologous -homolographic -homolography -homologue -homology -homolosine -homolysin -homolysis -homomallous -homomeral -homomerous -homometrical -homometrically -homomorph -Homomorpha -homomorphic -homomorphism -homomorphosis -homomorphous -homomorphy -Homoneura -homonomous -homonomy -homonuclear -homonym -homonymic -homonymous -homonymously -homonymy -homoousia -Homoousian -Homoousianism -Homoousianist -Homoousiast -Homoousion -homoousious -homopathy -homoperiodic -homopetalous -homophene -homophenous -homophone -homophonic -homophonous -homophony -homophthalic -homophylic -homophyllous -homophyly -homopiperonyl -homoplasis -homoplasmic -homoplasmy -homoplast -homoplastic -homoplasy -homopolar -homopolarity -homopolic -homopter -Homoptera -homopteran -homopteron -homopterous -Homorelaps -homorganic -homoseismal -homosexual -homosexualism -homosexualist -homosexuality -homosporous -homospory -Homosteus -homostyled -homostylic -homostylism -homostylous -homostyly -homosystemic -homotactic -homotatic -homotaxeous -homotaxia -homotaxial -homotaxially -homotaxic -homotaxis -homotaxy -homothallic -homothallism -homothetic -homothety -homotonic -homotonous -homotonously -homotony -homotopic -homotransplant -homotransplantation -homotropal -homotropous -homotypal -homotype -homotypic -homotypical -homotypy -homovanillic -homovanillin -homoveratric -homoveratrole -homozygosis -homozygosity -homozygote -homozygous -homozygousness -homrai -homuncle -homuncular -homunculus -homy -Hon -honda -hondo -Honduran -Honduranean -Honduranian -Hondurean -Hondurian -hone -honest -honestly -honestness -honestone -honesty -honewort -honey -honeybee -honeyberry -honeybind -honeyblob -honeybloom -honeycomb -honeycombed -honeydew -honeydewed -honeydrop -honeyed -honeyedly -honeyedness -honeyfall -honeyflower -honeyfogle -honeyful -honeyhearted -honeyless -honeylike -honeylipped -honeymoon -honeymooner -honeymoonlight -honeymoonshine -honeymoonstruck -honeymoony -honeymouthed -honeypod -honeypot -honeystone -honeysuck -honeysucker -honeysuckle -honeysuckled -honeysweet -honeyware -Honeywood -honeywood -honeywort -hong -honied -honily -honk -honker -honor -Honora -honorability -honorable -honorableness -honorableship -honorably -honorance -honoraria -honorarily -honorarium -honorary -honoree -honorer -honoress -honorific -honorifically -honorless -honorous -honorsman -honorworthy -hontish -hontous -Honzo -hooch -hoochinoo -hood -hoodcap -hooded -hoodedness -hoodful -hoodie -hoodless -hoodlike -hoodlum -hoodlumish -hoodlumism -hoodlumize -hoodman -hoodmold -hoodoo -hoodsheaf -hoodshy -hoodshyness -hoodwink -hoodwinkable -hoodwinker -hoodwise -hoodwort -hooey -hoof -hoofbeat -hoofbound -hoofed -hoofer -hoofiness -hoofish -hoofless -hooflet -hooflike -hoofmark -hoofprint -hoofrot -hoofs -hoofworm -hoofy -hook -hookah -hookaroon -hooked -hookedness -hookedwise -hooker -Hookera -hookerman -hookers -hookheal -hookish -hookless -hooklet -hooklike -hookmaker -hookmaking -hookman -hooknose -hooksmith -hooktip -hookum -hookup -hookweed -hookwise -hookworm -hookwormer -hookwormy -hooky -hooligan -hooliganism -hooliganize -hoolock -hooly -hoon -hoonoomaun -hoop -hooped -hooper -hooping -hoopla -hoople -hoopless -hooplike -hoopmaker -hoopman -hoopoe -hoopstick -hoopwood -hoose -hoosegow -hoosh -Hoosier -Hoosierdom -Hoosierese -Hoosierize -hoot -hootay -hooter -hootingly -hoove -hooven -Hooverism -Hooverize -hoovey -hop -hopbine -hopbush -Hopcalite -hopcrease -hope -hoped -hopeful -hopefully -hopefulness -hopeite -hopeless -hopelessly -hopelessness -hoper -Hopi -hopi -hopingly -Hopkinsian -Hopkinsianism -Hopkinsonian -hoplite -hoplitic -hoplitodromos -Hoplocephalus -hoplology -hoplomachic -hoplomachist -hoplomachos -hoplomachy -Hoplonemertea -hoplonemertean -hoplonemertine -Hoplonemertini -hopoff -hopped -hopper -hopperburn -hopperdozer -hopperette -hoppergrass -hopperings -hopperman -hoppers -hoppestere -hoppet -hoppingly -hoppity -hopple -hoppy -hopscotch -hopscotcher -hoptoad -hopvine -hopyard -hora -horal -horary -Horatian -Horatio -Horatius -horbachite -hordarian -hordary -horde -hordeaceous -hordeiform -hordein -hordenine -Hordeum -horehound -Horim -horismology -horizometer -horizon -horizonless -horizontal -horizontalism -horizontality -horizontalization -horizontalize -horizontally -horizontalness -horizontic -horizontical -horizontically -horizonward -horme -hormic -hormigo -hormion -hormist -hormogon -Hormogonales -Hormogoneae -Hormogoneales -hormogonium -hormogonous -hormonal -hormone -hormonic -hormonize -hormonogenesis -hormonogenic -hormonology -hormonopoiesis -hormonopoietic -hormos -horn -hornbeam -hornbill -hornblende -hornblendic -hornblendite -hornblendophyre -hornblower -hornbook -horned -hornedness -horner -hornerah -hornet -hornety -hornfair -hornfels -hornfish -hornful -horngeld -Hornie -hornify -hornily -horniness -horning -hornish -hornist -hornito -hornless -hornlessness -hornlet -hornlike -hornotine -hornpipe -hornplant -hornsman -hornstay -hornstone -hornswoggle -horntail -hornthumb -horntip -hornwood -hornwork -hornworm -hornwort -horny -hornyhanded -hornyhead -horograph -horographer -horography -horokaka -horologe -horologer -horologic -horological -horologically -horologiography -horologist -horologium -horologue -horology -horometrical -horometry -Horonite -horopito -horopter -horopteric -horoptery -horoscopal -horoscope -horoscoper -horoscopic -horoscopical -horoscopist -horoscopy -Horouta -horrendous -horrendously -horrent -horrescent -horreum -horribility -horrible -horribleness -horribly -horrid -horridity -horridly -horridness -horrific -horrifically -horrification -horrify -horripilant -horripilate -horripilation -horrisonant -horror -horrorful -horrorish -horrorist -horrorize -horrormonger -horrormongering -horrorous -horrorsome -horse -horseback -horsebacker -horseboy -horsebreaker -horsecar -horsecloth -horsecraft -horsedom -horsefair -horsefettler -horsefight -horsefish -horseflesh -horsefly -horsefoot -horsegate -horsehair -horsehaired -horsehead -horseherd -horsehide -horsehood -horsehoof -horsejockey -horsekeeper -horselaugh -horselaugher -horselaughter -horseleech -horseless -horselike -horseload -horseman -horsemanship -horsemastership -horsemint -horsemonger -horseplay -horseplayful -horsepond -horsepower -horsepox -horser -horseshoe -horseshoer -horsetail -horsetongue -Horsetown -horsetree -horseway -horseweed -horsewhip -horsewhipper -horsewoman -horsewomanship -horsewood -horsfordite -horsify -horsily -horsiness -horsing -Horst -horst -horsy -horsyism -hortation -hortative -hortatively -hortator -hortatorily -hortatory -Hortense -Hortensia -hortensial -Hortensian -hortensian -horticultural -horticulturally -horticulture -horticulturist -hortite -hortonolite -hortulan -Horvatian -hory -Hosackia -hosanna -hose -hosed -hosel -hoseless -hoselike -hoseman -hosier -hosiery -hosiomartyr -hospice -hospitable -hospitableness -hospitably -hospitage -hospital -hospitalary -hospitaler -hospitalism -hospitality -hospitalization -hospitalize -hospitant -hospitate -hospitation -hospitator -hospitious -hospitium -hospitize -hospodar -hospodariat -hospodariate -host -Hosta -hostage -hostager -hostageship -hostel -hosteler -hostelry -hoster -hostess -hostie -hostile -hostilely -hostileness -hostility -hostilize -hosting -hostler -hostlership -hostlerwife -hostless -hostly -hostry -hostship -hot -hotbed -hotblood -hotbox -hotbrained -hotch -hotchpot -hotchpotch -hotchpotchly -hotel -hoteldom -hotelhood -hotelier -hotelization -hotelize -hotelkeeper -hotelless -hotelward -hotfoot -hothead -hotheaded -hotheadedly -hotheadedness -hothearted -hotheartedly -hotheartedness -hothouse -hoti -hotly -hotmouthed -hotness -hotspur -hotspurred -Hotta -Hottentot -Hottentotese -Hottentotic -Hottentotish -Hottentotism -hotter -hottery -hottish -Hottonia -houbara -Houdan -hough -houghband -hougher -houghite -houghmagandy -Houghton -hounce -hound -hounder -houndfish -hounding -houndish -houndlike -houndman -houndsbane -houndsberry -houndshark -houndy -houppelande -hour -hourful -hourglass -houri -hourless -hourly -housage -housal -Housatonic -house -houseball -houseboat -houseboating -housebote -housebound -houseboy -housebreak -housebreaker -housebreaking -housebroke -housebroken -housebug -housebuilder -housebuilding -housecarl -housecoat -housecraft -housefast -housefather -housefly -houseful -housefurnishings -household -householder -householdership -householding -householdry -housekeep -housekeeper -housekeeperlike -housekeeperly -housekeeping -housel -houseleek -houseless -houselessness -houselet -houseline -houseling -housemaid -housemaidenly -housemaiding -housemaidy -houseman -housemaster -housemastership -housemate -housemating -houseminder -housemistress -housemother -housemotherly -houseowner -houser -houseridden -houseroom -housesmith -housetop -houseward -housewares -housewarm -housewarmer -housewarming -housewear -housewife -housewifeliness -housewifely -housewifery -housewifeship -housewifish -housewive -housework -housewright -housing -Houstonia -housty -housy -houtou -houvari -Hova -hove -hovedance -hovel -hoveler -hoven -Hovenia -hover -hoverer -hovering -hoveringly -hoverly -how -howadji -Howard -howardite -howbeit -howdah -howder -howdie -howdy -howe -Howea -howel -however -howff -howish -howitzer -howk -howkit -howl -howler -howlet -howling -howlingly -howlite -howso -howsoever -howsomever -hox -hoy -Hoya -hoyden -hoydenhood -hoydenish -hoydenism -hoyle -hoyman -Hrimfaxi -Hrothgar -Hsi -Hsuan -Hu -huaca -huaco -huajillo -huamuchil -huantajayite -huaracho -Huari -huarizo -Huashi -Huastec -Huastecan -Huave -Huavean -hub -hubb -hubba -hubber -Hubbite -hubble -hubbly -hubbub -hubbuboo -hubby -Hubert -hubmaker -hubmaking -hubnerite -hubristic -hubshi -huccatoon -huchen -Huchnom -hucho -huck -huckaback -huckle -huckleback -hucklebacked -huckleberry -hucklebone -huckmuck -huckster -hucksterage -hucksterer -hucksteress -hucksterize -huckstery -hud -huddle -huddledom -huddlement -huddler -huddling -huddlingly -huddock -huddroun -huddup -Hudibras -Hudibrastic -Hudibrastically -Hudsonia -Hudsonian -hudsonite -hue -hued -hueful -hueless -huelessness -huer -Huey -huff -huffier -huffily -huffiness -huffingly -huffish -huffishly -huffishness -huffle -huffler -huffy -hug -huge -Hugelia -hugelite -hugely -hugeness -hugeous -hugeously -hugeousness -huggable -hugger -huggermugger -huggermuggery -Huggin -hugging -huggingly -huggle -Hugh -Hughes -Hughoc -Hugo -Hugoesque -hugsome -Huguenot -Huguenotic -Huguenotism -huh -Hui -huia -huipil -huisache -huiscoyol -huitain -Huk -Hukbalahap -huke -hula -Huldah -huldee -hulk -hulkage -hulking -hulky -hull -hullabaloo -huller -hullock -hulloo -hulotheism -Hulsean -hulsite -hulster -hulu -hulver -hulverhead -hulverheaded -hum -Huma -human -humane -humanely -humaneness -humanhood -humanics -humanification -humaniform -humaniformian -humanify -humanish -humanism -humanist -humanistic -humanistical -humanistically -humanitarian -humanitarianism -humanitarianist -humanitarianize -humanitary -humanitian -humanity -humanitymonger -humanization -humanize -humanizer -humankind -humanlike -humanly -humanness -humanoid -humate -humble -humblebee -humblehearted -humblemouthed -humbleness -humbler -humblie -humblingly -humbly -humbo -humboldtilite -humboldtine -humboldtite -humbug -humbugability -humbugable -humbugger -humbuggery -humbuggism -humbuzz -humdinger -humdrum -humdrumminess -humdrummish -humdrummishness -humdudgeon -Hume -Humean -humect -humectant -humectate -humectation -humective -humeral -humeri -humeroabdominal -humerocubital -humerodigital -humerodorsal -humerometacarpal -humeroradial -humeroscapular -humeroulnar -humerus -humet -humetty -humhum -humic -humicubation -humid -humidate -humidification -humidifier -humidify -humidistat -humidity -humidityproof -humidly -humidness -humidor -humific -humification -humifuse -humify -humiliant -humiliate -humiliating -humiliatingly -humiliation -humiliative -humiliator -humiliatory -humilific -humilitude -humility -humin -Humiria -Humiriaceae -Humiriaceous -Humism -Humist -humistratous -humite -humlie -hummel -hummeler -hummer -hummie -humming -hummingbird -hummock -hummocky -humor -humoral -humoralism -humoralist -humoralistic -humoresque -humoresquely -humorful -humorific -humorism -humorist -humoristic -humoristical -humorize -humorless -humorlessness -humorology -humorous -humorously -humorousness -humorproof -humorsome -humorsomely -humorsomeness -humourful -humous -hump -humpback -humpbacked -humped -humph -Humphrey -humpiness -humpless -humpty -humpy -humstrum -humulene -humulone -Humulus -humus -humuslike -Hun -Hunanese -hunch -Hunchakist -hunchback -hunchbacked -hunchet -hunchy -hundi -hundred -hundredal -hundredary -hundreder -hundredfold -hundredman -hundredpenny -hundredth -hundredweight -hundredwork -hung -Hungaria -Hungarian -hungarite -hunger -hungerer -hungeringly -hungerless -hungerly -hungerproof -hungerweed -hungrify -hungrily -hungriness -hungry -hunh -hunk -Hunker -hunker -Hunkerism -hunkerous -hunkerousness -hunkers -hunkies -Hunkpapa -hunks -hunky -Hunlike -Hunnian -Hunnic -Hunnican -Hunnish -Hunnishness -hunt -huntable -huntedly -Hunter -Hunterian -hunterlike -huntilite -hunting -huntress -huntsman -huntsmanship -huntswoman -Hunyak -hup -Hupa -hupaithric -Hura -hura -hurcheon -hurdies -hurdis -hurdle -hurdleman -hurdler -hurdlewise -hurds -hure -hureaulite -hureek -Hurf -hurgila -hurkle -hurl -hurlbarrow -hurled -hurler -hurley -hurleyhouse -hurling -hurlock -hurly -Huron -huron -Huronian -hurr -hurrah -Hurri -Hurrian -hurricane -hurricanize -hurricano -hurried -hurriedly -hurriedness -hurrier -hurrisome -hurrock -hurroo -hurroosh -hurry -hurryingly -hurryproof -hursinghar -hurst -hurt -hurtable -hurted -hurter -hurtful -hurtfully -hurtfulness -hurting -hurtingest -hurtle -hurtleberry -hurtless -hurtlessly -hurtlessness -hurtlingly -hurtsome -hurty -husband -husbandable -husbandage -husbander -husbandfield -husbandhood -husbandland -husbandless -husbandlike -husbandliness -husbandly -husbandman -husbandress -husbandry -husbandship -huse -hush -hushable -hushaby -hushcloth -hushedly -husheen -hushel -husher -hushful -hushfully -hushing -hushingly -hushion -husho -husk -huskanaw -husked -huskened -husker -huskershredder -huskily -huskiness -husking -huskroot -huskwort -Husky -husky -huso -huspil -huss -hussar -Hussite -Hussitism -hussy -hussydom -hussyness -husting -hustle -hustlecap -hustlement -hustler -hut -hutch -hutcher -hutchet -Hutchinsonian -Hutchinsonianism -hutchinsonite -Huterian -huthold -hutholder -hutia -hutkeeper -hutlet -hutment -Hutsulian -Hutterites -Huttonian -Huttonianism -huttoning -huttonweed -hutukhtu -huvelyk -Huxleian -Huygenian -huzoor -Huzvaresh -huzz -huzza -huzzard -Hwa -Hy -hyacinth -Hyacinthia -hyacinthian -hyacinthine -Hyacinthus -Hyades -hyaena -Hyaenanche -Hyaenarctos -Hyaenidae -Hyaenodon -hyaenodont -hyaenodontoid -Hyakume -hyalescence -hyalescent -hyaline -hyalinization -hyalinize -hyalinocrystalline -hyalinosis -hyalite -hyalitis -hyaloandesite -hyalobasalt -hyalocrystalline -hyalodacite -hyalogen -hyalograph -hyalographer -hyalography -hyaloid -hyaloiditis -hyaloliparite -hyalolith -hyalomelan -hyalomucoid -Hyalonema -hyalophagia -hyalophane -hyalophyre -hyalopilitic -hyaloplasm -hyaloplasma -hyaloplasmic -hyalopsite -hyalopterous -hyalosiderite -Hyalospongia -hyalotekite -hyalotype -hyaluronic -hyaluronidase -Hybanthus -Hybla -Hyblaea -Hyblaean -Hyblan -hybodont -Hybodus -hybosis -hybrid -hybridal -hybridation -hybridism -hybridist -hybridity -hybridizable -hybridization -hybridize -hybridizer -hybridous -hydantoate -hydantoic -hydantoin -hydathode -hydatid -hydatidiform -hydatidinous -hydatidocele -hydatiform -hydatigenous -Hydatina -hydatogenesis -hydatogenic -hydatogenous -hydatoid -hydatomorphic -hydatomorphism -hydatopneumatic -hydatopneumatolytic -hydatopyrogenic -hydatoscopy -Hydnaceae -hydnaceous -hydnocarpate -hydnocarpic -Hydnocarpus -hydnoid -Hydnora -Hydnoraceae -hydnoraceous -Hydnum -Hydra -hydracetin -Hydrachna -hydrachnid -Hydrachnidae -hydracid -hydracoral -hydracrylate -hydracrylic -Hydractinia -hydractinian -Hydradephaga -hydradephagan -hydradephagous -hydragogue -hydragogy -hydramine -hydramnion -hydramnios -Hydrangea -Hydrangeaceae -hydrangeaceous -hydrant -hydranth -hydrarch -hydrargillite -hydrargyrate -hydrargyria -hydrargyriasis -hydrargyric -hydrargyrism -hydrargyrosis -hydrargyrum -hydrarthrosis -hydrarthrus -hydrastine -Hydrastis -hydrate -hydrated -hydration -hydrator -hydratropic -hydraucone -hydraulic -hydraulically -hydraulician -hydraulicity -hydraulicked -hydraulicon -hydraulics -hydraulist -hydraulus -hydrazide -hydrazidine -hydrazimethylene -hydrazine -hydrazino -hydrazo -hydrazoate -hydrazobenzene -hydrazoic -hydrazone -hydrazyl -hydremia -hydremic -hydrencephalocele -hydrencephaloid -hydrencephalus -hydria -hydriatric -hydriatrist -hydriatry -hydric -hydrically -Hydrid -hydride -hydriform -hydrindene -hydriodate -hydriodic -hydriodide -hydriotaphia -Hydriote -hydro -hydroa -hydroadipsia -hydroaeric -hydroalcoholic -hydroaromatic -hydroatmospheric -hydroaviation -hydrobarometer -Hydrobates -Hydrobatidae -hydrobenzoin -hydrobilirubin -hydrobiological -hydrobiologist -hydrobiology -hydrobiosis -hydrobiplane -hydrobomb -hydroboracite -hydroborofluoric -hydrobranchiate -hydrobromate -hydrobromic -hydrobromide -hydrocarbide -hydrocarbon -hydrocarbonaceous -hydrocarbonate -hydrocarbonic -hydrocarbonous -hydrocarbostyril -hydrocardia -Hydrocaryaceae -hydrocaryaceous -hydrocatalysis -hydrocauline -hydrocaulus -hydrocele -hydrocellulose -hydrocephalic -hydrocephalocele -hydrocephaloid -hydrocephalous -hydrocephalus -hydrocephaly -hydroceramic -hydrocerussite -Hydrocharidaceae -hydrocharidaceous -Hydrocharis -Hydrocharitaceae -hydrocharitaceous -Hydrochelidon -hydrochemical -hydrochemistry -hydrochlorate -hydrochlorauric -hydrochloric -hydrochloride -hydrochlorplatinic -hydrochlorplatinous -Hydrochoerus -hydrocholecystis -hydrocinchonine -hydrocinnamic -hydrocirsocele -hydrocladium -hydroclastic -Hydrocleis -hydroclimate -hydrocobalticyanic -hydrocoele -hydrocollidine -hydroconion -Hydrocorallia -Hydrocorallinae -hydrocoralline -Hydrocores -Hydrocorisae -hydrocorisan -hydrocotarnine -Hydrocotyle -hydrocoumaric -hydrocupreine -hydrocyanate -hydrocyanic -hydrocyanide -hydrocycle -hydrocyclic -hydrocyclist -Hydrocyon -hydrocyst -hydrocystic -Hydrodamalidae -Hydrodamalis -Hydrodictyaceae -Hydrodictyon -hydrodrome -Hydrodromica -hydrodromican -hydrodynamic -hydrodynamical -hydrodynamics -hydrodynamometer -hydroeconomics -hydroelectric -hydroelectricity -hydroelectrization -hydroergotinine -hydroextract -hydroextractor -hydroferricyanic -hydroferrocyanate -hydroferrocyanic -hydrofluate -hydrofluoboric -hydrofluoric -hydrofluorid -hydrofluoride -hydrofluosilicate -hydrofluosilicic -hydrofluozirconic -hydrofoil -hydroforming -hydrofranklinite -hydrofuge -hydrogalvanic -hydrogel -hydrogen -hydrogenase -hydrogenate -hydrogenation -hydrogenator -hydrogenic -hydrogenide -hydrogenium -hydrogenization -hydrogenize -hydrogenolysis -Hydrogenomonas -hydrogenous -hydrogeological -hydrogeology -hydroglider -hydrognosy -hydrogode -hydrograph -hydrographer -hydrographic -hydrographical -hydrographically -hydrography -hydrogymnastics -hydrohalide -hydrohematite -hydrohemothorax -hydroid -Hydroida -Hydroidea -hydroidean -hydroiodic -hydrokinetic -hydrokinetical -hydrokinetics -hydrol -hydrolase -hydrolatry -Hydrolea -Hydroleaceae -hydrolize -hydrologic -hydrological -hydrologically -hydrologist -hydrology -hydrolysis -hydrolyst -hydrolyte -hydrolytic -hydrolyzable -hydrolyzate -hydrolyzation -hydrolyze -hydromagnesite -hydromancer -hydromancy -hydromania -hydromaniac -hydromantic -hydromantical -hydromantically -hydrome -hydromechanical -hydromechanics -hydromedusa -Hydromedusae -hydromedusan -hydromedusoid -hydromel -hydromeningitis -hydromeningocele -hydrometallurgical -hydrometallurgically -hydrometallurgy -hydrometamorphism -hydrometeor -hydrometeorological -hydrometeorology -hydrometer -hydrometra -hydrometric -hydrometrical -hydrometrid -Hydrometridae -hydrometry -hydromica -hydromicaceous -hydromonoplane -hydromorph -hydromorphic -hydromorphous -hydromorphy -hydromotor -hydromyelia -hydromyelocele -hydromyoma -Hydromys -hydrone -hydronegative -hydronephelite -hydronephrosis -hydronephrotic -hydronitric -hydronitroprussic -hydronitrous -hydronium -hydroparacoumaric -Hydroparastatae -hydropath -hydropathic -hydropathical -hydropathist -hydropathy -hydropericarditis -hydropericardium -hydroperiod -hydroperitoneum -hydroperitonitis -hydroperoxide -hydrophane -hydrophanous -hydrophid -Hydrophidae -hydrophil -hydrophile -hydrophilic -hydrophilid -Hydrophilidae -hydrophilism -hydrophilite -hydrophiloid -hydrophilous -hydrophily -Hydrophinae -Hydrophis -hydrophobe -hydrophobia -hydrophobic -hydrophobical -hydrophobist -hydrophobophobia -hydrophobous -hydrophoby -hydrophoid -hydrophone -Hydrophora -hydrophoran -hydrophore -hydrophoria -hydrophorous -hydrophthalmia -hydrophthalmos -hydrophthalmus -hydrophylacium -hydrophyll -Hydrophyllaceae -hydrophyllaceous -hydrophylliaceous -hydrophyllium -Hydrophyllum -hydrophysometra -hydrophyte -hydrophytic -hydrophytism -hydrophyton -hydrophytous -hydropic -hydropical -hydropically -hydropigenous -hydroplane -hydroplanula -hydroplatinocyanic -hydroplutonic -hydropneumatic -hydropneumatosis -hydropneumopericardium -hydropneumothorax -hydropolyp -hydroponic -hydroponicist -hydroponics -hydroponist -hydropositive -hydropot -Hydropotes -hydropropulsion -hydrops -hydropsy -Hydropterideae -hydroptic -hydropult -hydropultic -hydroquinine -hydroquinol -hydroquinoline -hydroquinone -hydrorachis -hydrorhiza -hydrorhizal -hydrorrhachis -hydrorrhachitis -hydrorrhea -hydrorrhoea -hydrorubber -hydrosalpinx -hydrosalt -hydrosarcocele -hydroscope -hydroscopic -hydroscopical -hydroscopicity -hydroscopist -hydroselenic -hydroselenide -hydroselenuret -hydroseparation -hydrosilicate -hydrosilicon -hydrosol -hydrosomal -hydrosomatous -hydrosome -hydrosorbic -hydrosphere -hydrospire -hydrospiric -hydrostat -hydrostatic -hydrostatical -hydrostatically -hydrostatician -hydrostatics -hydrostome -hydrosulphate -hydrosulphide -hydrosulphite -hydrosulphocyanic -hydrosulphurated -hydrosulphuret -hydrosulphureted -hydrosulphuric -hydrosulphurous -hydrosulphuryl -hydrotachymeter -hydrotactic -hydrotalcite -hydrotasimeter -hydrotaxis -hydrotechnic -hydrotechnical -hydrotechnologist -hydrotechny -hydroterpene -hydrotheca -hydrothecal -hydrotherapeutic -hydrotherapeutics -hydrotherapy -hydrothermal -hydrothoracic -hydrothorax -hydrotic -hydrotical -hydrotimeter -hydrotimetric -hydrotimetry -hydrotomy -hydrotropic -hydrotropism -hydroturbine -hydrotype -hydrous -hydrovane -hydroxamic -hydroxamino -hydroxide -hydroximic -hydroxy -hydroxyacetic -hydroxyanthraquinone -hydroxybutyricacid -hydroxyketone -hydroxyl -hydroxylactone -hydroxylamine -hydroxylate -hydroxylation -hydroxylic -hydroxylization -hydroxylize -hydrozincite -Hydrozoa -hydrozoal -hydrozoan -hydrozoic -hydrozoon -hydrula -Hydruntine -Hydrurus -Hydrus -hydurilate -hydurilic -hyena -hyenadog -hyenanchin -hyenic -hyeniform -hyenine -hyenoid -hyetal -hyetograph -hyetographic -hyetographical -hyetographically -hyetography -hyetological -hyetology -hyetometer -hyetometrograph -Hygeia -Hygeian -hygeiolatry -hygeist -hygeistic -hygeology -hygiantic -hygiantics -hygiastic -hygiastics -hygieist -hygienal -hygiene -hygienic -hygienical -hygienically -hygienics -hygienist -hygienization -hygienize -hygiologist -hygiology -hygric -hygrine -hygroblepharic -hygrodeik -hygroexpansivity -hygrograph -hygrology -hygroma -hygromatous -hygrometer -hygrometric -hygrometrical -hygrometrically -hygrometry -hygrophaneity -hygrophanous -hygrophilous -hygrophobia -hygrophthalmic -hygrophyte -hygrophytic -hygroplasm -hygroplasma -hygroscope -hygroscopic -hygroscopical -hygroscopically -hygroscopicity -hygroscopy -hygrostat -hygrostatics -hygrostomia -hygrothermal -hygrothermograph -hying -hyke -Hyla -hylactic -hylactism -hylarchic -hylarchical -hyle -hyleg -hylegiacal -hylic -hylicism -hylicist -Hylidae -hylism -hylist -Hyllus -Hylobates -hylobatian -hylobatic -hylobatine -Hylocereus -Hylocichla -Hylocomium -Hylodes -hylogenesis -hylogeny -hyloid -hylology -hylomorphic -hylomorphical -hylomorphism -hylomorphist -hylomorphous -Hylomys -hylopathism -hylopathist -hylopathy -hylophagous -hylotheism -hylotheist -hylotheistic -hylotheistical -hylotomous -hylozoic -hylozoism -hylozoist -hylozoistic -hylozoistically -hymen -Hymenaea -Hymenaeus -Hymenaic -hymenal -hymeneal -hymeneally -hymeneals -hymenean -hymenial -hymenic -hymenicolar -hymeniferous -hymeniophore -hymenium -Hymenocallis -Hymenochaete -Hymenogaster -Hymenogastraceae -hymenogeny -hymenoid -Hymenolepis -hymenomycetal -hymenomycete -Hymenomycetes -hymenomycetoid -hymenomycetous -hymenophore -hymenophorum -Hymenophyllaceae -hymenophyllaceous -Hymenophyllites -Hymenophyllum -hymenopter -Hymenoptera -hymenopteran -hymenopterist -hymenopterological -hymenopterologist -hymenopterology -hymenopteron -hymenopterous -hymenotomy -Hymettian -Hymettic -hymn -hymnal -hymnarium -hymnary -hymnbook -hymner -hymnic -hymnist -hymnless -hymnlike -hymnode -hymnodical -hymnodist -hymnody -hymnographer -hymnography -hymnologic -hymnological -hymnologically -hymnologist -hymnology -hymnwise -hynde -hyne -hyobranchial -hyocholalic -hyocholic -hyoepiglottic -hyoepiglottidean -hyoglossal -hyoglossus -hyoglycocholic -hyoid -hyoidal -hyoidan -hyoideal -hyoidean -hyoides -Hyolithes -hyolithid -Hyolithidae -hyolithoid -hyomandibula -hyomandibular -hyomental -hyoplastral -hyoplastron -hyoscapular -hyoscine -hyoscyamine -Hyoscyamus -hyosternal -hyosternum -hyostylic -hyostyly -hyothere -Hyotherium -hyothyreoid -hyothyroid -hyp -hypabyssal -hypaethral -hypaethron -hypaethros -hypaethrum -hypalgesia -hypalgia -hypalgic -hypallactic -hypallage -hypanthial -hypanthium -hypantrum -Hypapante -hypapophysial -hypapophysis -hyparterial -hypaspist -hypate -hypaton -hypautomorphic -hypaxial -Hypenantron -hyper -hyperabelian -hyperabsorption -hyperaccurate -hyperacid -hyperacidaminuria -hyperacidity -hyperacoustics -hyperaction -hyperactive -hyperactivity -hyperacuity -hyperacusia -hyperacusis -hyperacute -hyperacuteness -hyperadenosis -hyperadiposis -hyperadiposity -hyperadrenalemia -hyperaeolism -hyperalbuminosis -hyperalgebra -hyperalgesia -hyperalgesic -hyperalgesis -hyperalgetic -hyperalimentation -hyperalkalinity -hyperaltruism -hyperaminoacidemia -hyperanabolic -hyperanarchy -hyperangelical -hyperaphia -hyperaphic -hyperapophyseal -hyperapophysial -hyperapophysis -hyperarchaeological -hyperarchepiscopal -hyperazotemia -hyperbarbarous -hyperbatic -hyperbatically -hyperbaton -hyperbola -hyperbolaeon -hyperbole -hyperbolic -hyperbolically -hyperbolicly -hyperbolism -hyperbolize -hyperboloid -hyperboloidal -hyperboreal -Hyperborean -hyperborean -hyperbrachycephal -hyperbrachycephalic -hyperbrachycephaly -hyperbrachycranial -hyperbrachyskelic -hyperbranchia -hyperbrutal -hyperbulia -hypercalcemia -hypercarbamidemia -hypercarbureted -hypercarburetted -hypercarnal -hypercatalectic -hypercatalexis -hypercatharsis -hypercathartic -hypercathexis -hypercenosis -hyperchamaerrhine -hyperchlorhydria -hyperchloric -hypercholesterinemia -hypercholesterolemia -hypercholia -hypercivilization -hypercivilized -hyperclassical -hyperclimax -hypercoagulability -hypercoagulable -hypercomplex -hypercomposite -hyperconcentration -hypercone -hyperconfident -hyperconformist -hyperconscientious -hyperconscientiousness -hyperconscious -hyperconsciousness -hyperconservatism -hyperconstitutional -hypercoracoid -hypercorrect -hypercorrection -hypercorrectness -hypercosmic -hypercreaturely -hypercritic -hypercritical -hypercritically -hypercriticism -hypercriticize -hypercryalgesia -hypercube -hypercyanotic -hypercycle -hypercylinder -hyperdactyl -hyperdactylia -hyperdactyly -hyperdeify -hyperdelicacy -hyperdelicate -hyperdemocracy -hyperdemocratic -hyperdeterminant -hyperdiabolical -hyperdialectism -hyperdiapason -hyperdiapente -hyperdiastole -hyperdiatessaron -hyperdiazeuxis -hyperdicrotic -hyperdicrotism -hyperdicrotous -hyperdimensional -hyperdimensionality -hyperdissyllable -hyperdistention -hyperditone -hyperdivision -hyperdolichocephal -hyperdolichocephalic -hyperdolichocephaly -hyperdolichocranial -hyperdoricism -hyperdulia -hyperdulic -hyperdulical -hyperelegant -hyperelliptic -hyperemesis -hyperemetic -hyperemia -hyperemic -hyperemotivity -hyperemphasize -hyperenthusiasm -hypereosinophilia -hyperephidrosis -hyperequatorial -hypererethism -hyperessence -hyperesthesia -hyperesthetic -hyperethical -hypereuryprosopic -hypereutectic -hypereutectoid -hyperexaltation -hyperexcitability -hyperexcitable -hyperexcitement -hyperexcursive -hyperexophoria -hyperextend -hyperextension -hyperfastidious -hyperfederalist -hyperfine -hyperflexion -hyperfocal -hyperfunction -hyperfunctional -hyperfunctioning -hypergalactia -hypergamous -hypergamy -hypergenesis -hypergenetic -hypergeometric -hypergeometrical -hypergeometry -hypergeusia -hypergeustia -hyperglycemia -hyperglycemic -hyperglycorrhachia -hyperglycosuria -hypergoddess -hypergol -hypergolic -Hypergon -hypergrammatical -hyperhedonia -hyperhemoglobinemia -hyperhilarious -hyperhypocrisy -Hypericaceae -hypericaceous -Hypericales -hypericin -hypericism -Hypericum -hypericum -hyperidealistic -hyperideation -hyperimmune -hyperimmunity -hyperimmunization -hyperimmunize -hyperingenuity -hyperinosis -hyperinotic -hyperinsulinization -hyperinsulinize -hyperintellectual -hyperintelligence -hyperinvolution -hyperirritability -hyperirritable -hyperisotonic -hyperite -hyperkeratosis -hyperkinesia -hyperkinesis -hyperkinetic -hyperlactation -hyperleptoprosopic -hyperleucocytosis -hyperlipemia -hyperlipoidemia -hyperlithuria -hyperlogical -hyperlustrous -hypermagical -hypermakroskelic -hypermedication -hypermenorrhea -hypermetabolism -hypermetamorphic -hypermetamorphism -hypermetamorphosis -hypermetamorphotic -hypermetaphorical -hypermetaphysical -hypermetaplasia -hypermeter -hypermetric -hypermetrical -hypermetron -hypermetrope -hypermetropia -hypermetropic -hypermetropical -hypermetropy -hypermiraculous -hypermixolydian -hypermnesia -hypermnesic -hypermnesis -hypermnestic -hypermodest -hypermonosyllable -hypermoral -hypermorph -hypermorphism -hypermorphosis -hypermotile -hypermotility -hypermyotonia -hypermyotrophy -hypermyriorama -hypermystical -hypernatural -hypernephroma -hyperneuria -hyperneurotic -hypernic -hypernitrogenous -hypernomian -hypernomic -hypernormal -hypernote -hypernutrition -Hyperoartia -hyperoartian -hyperobtrusive -hyperodontogeny -Hyperoodon -hyperoon -hyperope -hyperopia -hyperopic -hyperorganic -hyperorthognathic -hyperorthognathous -hyperorthognathy -hyperosmia -hyperosmic -hyperostosis -hyperostotic -hyperothodox -hyperothodoxy -Hyperotreta -hyperotretan -Hyperotreti -hyperotretous -hyperoxidation -hyperoxide -hyperoxygenate -hyperoxygenation -hyperoxygenize -hyperpanegyric -hyperparasite -hyperparasitic -hyperparasitism -hyperparasitize -hyperparoxysm -hyperpathetic -hyperpatriotic -hyperpencil -hyperpepsinia -hyperper -hyperperistalsis -hyperperistaltic -hyperpersonal -hyperphalangeal -hyperphalangism -hyperpharyngeal -hyperphenomena -hyperphoria -hyperphoric -hyperphosphorescence -hyperphysical -hyperphysically -hyperphysics -hyperpiesia -hyperpiesis -hyperpietic -hyperpietist -hyperpigmentation -hyperpigmented -hyperpinealism -hyperpituitarism -hyperplagiarism -hyperplane -hyperplasia -hyperplasic -hyperplastic -hyperplatyrrhine -hyperploid -hyperploidy -hyperpnea -hyperpnoea -hyperpolysyllabic -hyperpredator -hyperprism -hyperproduction -hyperprognathous -hyperprophetical -hyperprosexia -hyperpulmonary -hyperpure -hyperpurist -hyperpyramid -hyperpyretic -hyperpyrexia -hyperpyrexial -hyperquadric -hyperrational -hyperreactive -hyperrealize -hyperresonance -hyperresonant -hyperreverential -hyperrhythmical -hyperridiculous -hyperritualism -hypersacerdotal -hypersaintly -hypersalivation -hypersceptical -hyperscholastic -hyperscrupulosity -hypersecretion -hypersensibility -hypersensitive -hypersensitiveness -hypersensitivity -hypersensitization -hypersensitize -hypersensual -hypersensualism -hypersensuous -hypersentimental -hypersolid -hypersomnia -hypersonic -hypersophisticated -hyperspace -hyperspatial -hyperspeculative -hypersphere -hyperspherical -hyperspiritualizing -hypersplenia -hypersplenism -hypersthene -hypersthenia -hypersthenic -hypersthenite -hyperstoic -hyperstrophic -hypersubtlety -hypersuggestibility -hypersuperlative -hypersurface -hypersusceptibility -hypersusceptible -hypersystole -hypersystolic -hypertechnical -hypertelic -hypertely -hypertense -hypertensin -hypertension -hypertensive -hyperterrestrial -hypertetrahedron -hyperthermal -hyperthermalgesia -hyperthermesthesia -hyperthermia -hyperthermic -hyperthermy -hyperthesis -hyperthetic -hyperthetical -hyperthyreosis -hyperthyroid -hyperthyroidism -hyperthyroidization -hyperthyroidize -hypertonia -hypertonic -hypertonicity -hypertonus -hypertorrid -hypertoxic -hypertoxicity -hypertragical -hypertragically -hypertranscendent -hypertrichosis -hypertridimensional -hypertrophic -hypertrophied -hypertrophous -hypertrophy -hypertropia -hypertropical -hypertype -hypertypic -hypertypical -hyperurbanism -hyperuresis -hypervascular -hypervascularity -hypervenosity -hyperventilate -hyperventilation -hypervigilant -hyperviscosity -hypervitalization -hypervitalize -hypervitaminosis -hypervolume -hyperwrought -hypesthesia -hypesthesic -hypethral -hypha -Hyphaene -hyphaeresis -hyphal -hyphedonia -hyphema -hyphen -hyphenate -hyphenated -hyphenation -hyphenic -hyphenism -hyphenization -hyphenize -hypho -hyphodrome -Hyphomycetales -hyphomycete -Hyphomycetes -hyphomycetic -hyphomycetous -hyphomycosis -hypidiomorphic -hypidiomorphically -hypinosis -hypinotic -Hypnaceae -hypnaceous -hypnagogic -hypnesthesis -hypnesthetic -hypnoanalysis -hypnobate -hypnocyst -hypnody -hypnoetic -hypnogenesis -hypnogenetic -hypnoid -hypnoidal -hypnoidization -hypnoidize -hypnologic -hypnological -hypnologist -hypnology -hypnone -hypnophobia -hypnophobic -hypnophoby -hypnopompic -Hypnos -hypnoses -hypnosis -hypnosperm -hypnosporangium -hypnospore -hypnosporic -hypnotherapy -hypnotic -hypnotically -hypnotism -hypnotist -hypnotistic -hypnotizability -hypnotizable -hypnotization -hypnotize -hypnotizer -hypnotoid -hypnotoxin -Hypnum -hypo -hypoacid -hypoacidity -hypoactive -hypoactivity -hypoadenia -hypoadrenia -hypoaeolian -hypoalimentation -hypoalkaline -hypoalkalinity -hypoaminoacidemia -hypoantimonate -hypoazoturia -hypobasal -hypobatholithic -hypobenthonic -hypobenthos -hypoblast -hypoblastic -hypobole -hypobranchial -hypobranchiate -hypobromite -hypobromous -hypobulia -hypobulic -hypocalcemia -hypocarp -hypocarpium -hypocarpogean -hypocatharsis -hypocathartic -hypocathexis -hypocaust -hypocentrum -hypocephalus -Hypochaeris -hypochil -hypochilium -hypochlorhydria -hypochlorhydric -hypochloric -hypochlorite -hypochlorous -hypochloruria -Hypochnaceae -hypochnose -Hypochnus -hypochondria -hypochondriac -hypochondriacal -hypochondriacally -hypochondriacism -hypochondrial -hypochondriasis -hypochondriast -hypochondrium -hypochondry -hypochordal -hypochromia -hypochrosis -hypochylia -hypocist -hypocleidian -hypocleidium -hypocoelom -hypocondylar -hypocone -hypoconid -hypoconule -hypoconulid -hypocoracoid -hypocorism -hypocoristic -hypocoristical -hypocoristically -hypocotyl -hypocotyleal -hypocotyledonary -hypocotyledonous -hypocotylous -hypocrater -hypocrateriform -hypocraterimorphous -Hypocreaceae -hypocreaceous -Hypocreales -hypocrisis -hypocrisy -hypocrital -hypocrite -hypocritic -hypocritical -hypocritically -hypocrize -hypocrystalline -hypocycloid -hypocycloidal -hypocystotomy -hypocytosis -hypodactylum -hypoderm -hypoderma -hypodermal -hypodermatic -hypodermatically -hypodermatoclysis -hypodermatomy -Hypodermella -hypodermic -hypodermically -hypodermis -hypodermoclysis -hypodermosis -hypodermous -hypodiapason -hypodiapente -hypodiastole -hypodiatessaron -hypodiazeuxis -hypodicrotic -hypodicrotous -hypoditone -hypodorian -hypodynamia -hypodynamic -hypoeliminator -hypoendocrinism -hypoeosinophilia -hypoeutectic -hypoeutectoid -hypofunction -hypogastric -hypogastrium -hypogastrocele -hypogeal -hypogean -hypogee -hypogeic -hypogeiody -hypogene -hypogenesis -hypogenetic -hypogenic -hypogenous -hypogeocarpous -hypogeous -hypogeum -hypogeusia -hypoglobulia -hypoglossal -hypoglossitis -hypoglossus -hypoglottis -hypoglycemia -hypoglycemic -hypognathism -hypognathous -hypogonation -hypogynic -hypogynium -hypogynous -hypogyny -hypohalous -hypohemia -hypohidrosis -Hypohippus -hypohyal -hypohyaline -hypoid -hypoiodite -hypoiodous -hypoionian -hypoischium -hypoisotonic -hypokeimenometry -hypokinesia -hypokinesis -hypokinetic -hypokoristikon -hypolemniscus -hypoleptically -hypoleucocytosis -hypolimnion -hypolocrian -hypolydian -hypomania -hypomanic -hypomelancholia -hypomeral -hypomere -hypomeron -hypometropia -hypomixolydian -hypomnematic -hypomnesis -hypomochlion -hypomorph -hypomotility -hypomyotonia -hyponastic -hyponastically -hyponasty -hyponeuria -hyponitric -hyponitrite -hyponitrous -hyponoetic -hyponoia -hyponome -hyponomic -hyponychial -hyponychium -hyponym -hyponymic -hyponymous -Hypoparia -hypopepsia -hypopepsinia -hypopepsy -hypopetalous -hypopetaly -hypophalangism -hypophamin -hypophamine -hypophare -hypopharyngeal -hypopharynx -hypophloeodal -hypophloeodic -hypophloeous -hypophonic -hypophonous -hypophora -hypophoria -hypophosphate -hypophosphite -hypophosphoric -hypophosphorous -hypophrenia -hypophrenic -hypophrenosis -hypophrygian -hypophyge -hypophyll -hypophyllium -hypophyllous -hypophyllum -hypophyse -hypophyseal -hypophysectomize -hypophysectomy -hypophyseoprivic -hypophyseoprivous -hypophysial -hypophysical -hypophysics -hypophysis -hypopial -hypopinealism -hypopituitarism -Hypopitys -hypoplankton -hypoplanktonic -hypoplasia -hypoplastic -hypoplastral -hypoplastron -hypoplasty -hypoplasy -hypoploid -hypoploidy -hypopodium -hypopraxia -hypoprosexia -hypopselaphesia -hypopteral -hypopteron -hypoptilar -hypoptilum -hypoptosis -hypoptyalism -hypopus -hypopygial -hypopygidium -hypopygium -hypopyon -hyporadial -hyporadiolus -hyporadius -hyporchema -hyporchematic -hyporcheme -hyporchesis -hyporhachidian -hyporhachis -hyporhined -hyporit -hyporrhythmic -hyposcenium -hyposcleral -hyposcope -hyposecretion -hyposensitization -hyposensitize -hyposkeletal -hyposmia -hypospadiac -hypospadias -hyposphene -hypospray -hypostase -hypostasis -hypostasization -hypostasize -hypostasy -hypostatic -hypostatical -hypostatically -hypostatization -hypostatize -hyposternal -hyposternum -hyposthenia -hyposthenic -hyposthenuria -hypostigma -hypostilbite -hypostoma -Hypostomata -hypostomatic -hypostomatous -hypostome -hypostomial -Hypostomides -hypostomous -hypostrophe -hypostyle -hypostypsis -hypostyptic -hyposulphite -hyposulphurous -hyposuprarenalism -hyposyllogistic -hyposynaphe -hyposynergia -hyposystole -hypotactic -hypotarsal -hypotarsus -hypotaxia -hypotaxic -hypotaxis -hypotension -hypotensive -hypotensor -hypotenusal -hypotenuse -hypothalamic -hypothalamus -hypothalline -hypothallus -hypothec -hypotheca -hypothecal -hypothecary -hypothecate -hypothecation -hypothecative -hypothecator -hypothecatory -hypothecial -hypothecium -hypothenal -hypothenar -Hypotheria -hypothermal -hypothermia -hypothermic -hypothermy -hypotheses -hypothesis -hypothesist -hypothesize -hypothesizer -hypothetic -hypothetical -hypothetically -hypothetics -hypothetist -hypothetize -hypothetizer -hypothyreosis -hypothyroid -hypothyroidism -hypotonia -hypotonic -hypotonicity -hypotonus -hypotony -hypotoxic -hypotoxicity -hypotrachelium -Hypotremata -hypotrich -Hypotricha -Hypotrichida -hypotrichosis -hypotrichous -hypotrochanteric -hypotrochoid -hypotrochoidal -hypotrophic -hypotrophy -hypotympanic -hypotypic -hypotypical -hypotyposis -hypovalve -hypovanadate -hypovanadic -hypovanadious -hypovanadous -hypovitaminosis -hypoxanthic -hypoxanthine -Hypoxis -Hypoxylon -hypozeugma -hypozeuxis -Hypozoa -hypozoan -hypozoic -hyppish -hypsibrachycephalic -hypsibrachycephalism -hypsibrachycephaly -hypsicephalic -hypsicephaly -hypsidolichocephalic -hypsidolichocephalism -hypsidolichocephaly -hypsiliform -hypsiloid -Hypsilophodon -hypsilophodont -hypsilophodontid -Hypsilophodontidae -hypsilophodontoid -Hypsiprymninae -Hypsiprymnodontinae -Hypsiprymnus -Hypsistarian -hypsistenocephalic -hypsistenocephalism -hypsistenocephaly -hypsobathymetric -hypsocephalous -hypsochrome -hypsochromic -hypsochromy -hypsodont -hypsodontism -hypsodonty -hypsographic -hypsographical -hypsography -hypsoisotherm -hypsometer -hypsometric -hypsometrical -hypsometrically -hypsometrist -hypsometry -hypsophobia -hypsophonous -hypsophyll -hypsophyllar -hypsophyllary -hypsophyllous -hypsophyllum -hypsothermometer -hypural -hyraces -hyraceum -Hyrachyus -hyracid -Hyracidae -hyraciform -Hyracina -Hyracodon -hyracodont -hyracodontid -Hyracodontidae -hyracodontoid -hyracoid -Hyracoidea -hyracoidean -hyracothere -hyracotherian -Hyracotheriinae -Hyracotherium -hyrax -Hyrcan -Hyrcanian -hyson -hyssop -Hyssopus -hystazarin -hysteralgia -hysteralgic -hysteranthous -hysterectomy -hysterelcosis -hysteresial -hysteresis -hysteretic -hysteretically -hysteria -hysteriac -Hysteriales -hysteric -hysterical -hysterically -hystericky -hysterics -hysteriform -hysterioid -Hysterocarpus -hysterocatalepsy -hysterocele -hysterocleisis -hysterocrystalline -hysterocystic -hysterodynia -hysterogen -hysterogenetic -hysterogenic -hysterogenous -hysterogeny -hysteroid -hysterolaparotomy -hysterolith -hysterolithiasis -hysterology -hysterolysis -hysteromania -hysterometer -hysterometry -hysteromorphous -hysteromyoma -hysteromyomectomy -hysteron -hysteroneurasthenia -hysteropathy -hysteropexia -hysteropexy -hysterophore -Hysterophyta -hysterophytal -hysterophyte -hysteroproterize -hysteroptosia -hysteroptosis -hysterorrhaphy -hysterorrhexis -hysteroscope -hysterosis -hysterotome -hysterotomy -hysterotraumatism -hystriciasis -hystricid -Hystricidae -Hystricinae -hystricine -hystricism -hystricismus -hystricoid -hystricomorph -Hystricomorpha -hystricomorphic -hystricomorphous -Hystrix -I -i -Iacchic -Iacchos -Iacchus -Iachimo -iamatology -iamb -Iambe -iambelegus -iambi -iambic -iambically -iambist -iambize -iambographer -iambus -Ian -Ianthina -ianthine -ianthinite -Ianus -iao -Iapetus -Iapyges -Iapygian -Iapygii -iatraliptic -iatraliptics -iatric -iatrical -iatrochemic -iatrochemical -iatrochemist -iatrochemistry -iatrological -iatrology -iatromathematical -iatromathematician -iatromathematics -iatromechanical -iatromechanist -iatrophysical -iatrophysicist -iatrophysics -iatrotechnics -iba -Ibad -Ibadite -Iban -Ibanag -Iberes -Iberi -Iberia -Iberian -Iberic -Iberis -Iberism -iberite -ibex -ibices -ibid -Ibididae -Ibidinae -ibidine -Ibidium -Ibilao -ibis -ibisbill -Ibo -ibolium -ibota -Ibsenian -Ibsenic -Ibsenish -Ibsenism -Ibsenite -Ibycter -Ibycus -Icacinaceae -icacinaceous -icaco -Icacorea -Icaria -Icarian -Icarianism -Icarus -ice -iceberg -iceblink -iceboat -icebone -icebound -icebox -icebreaker -icecap -icecraft -iced -icefall -icefish -icehouse -Iceland -iceland -Icelander -Icelandian -Icelandic -iceleaf -iceless -Icelidae -icelike -iceman -Iceni -icequake -iceroot -Icerya -icework -ich -Ichneumia -ichneumon -ichneumoned -Ichneumones -ichneumonid -Ichneumonidae -ichneumonidan -Ichneumonides -ichneumoniform -ichneumonized -ichneumonoid -Ichneumonoidea -ichneumonology -ichneumous -ichneutic -ichnite -ichnographic -ichnographical -ichnographically -ichnography -ichnolite -ichnolithology -ichnolitic -ichnological -ichnology -ichnomancy -icho -ichoglan -ichor -ichorous -ichorrhea -ichorrhemia -ichthulin -ichthulinic -ichthus -ichthyal -ichthyic -ichthyism -ichthyismus -ichthyization -ichthyized -ichthyobatrachian -Ichthyocephali -ichthyocephalous -ichthyocol -ichthyocolla -ichthyocoprolite -Ichthyodea -Ichthyodectidae -ichthyodian -ichthyodont -ichthyodorulite -ichthyofauna -ichthyoform -ichthyographer -ichthyographia -ichthyographic -ichthyography -ichthyoid -ichthyoidal -Ichthyoidea -Ichthyol -ichthyolatrous -ichthyolatry -ichthyolite -ichthyolitic -ichthyologic -ichthyological -ichthyologically -ichthyologist -ichthyology -ichthyomancy -ichthyomantic -Ichthyomorpha -ichthyomorphic -ichthyomorphous -ichthyonomy -ichthyopaleontology -ichthyophagan -ichthyophagi -ichthyophagian -ichthyophagist -ichthyophagize -ichthyophagous -ichthyophagy -ichthyophile -ichthyophobia -ichthyophthalmite -ichthyophthiriasis -ichthyopolism -ichthyopolist -ichthyopsid -Ichthyopsida -ichthyopsidan -Ichthyopterygia -ichthyopterygian -ichthyopterygium -Ichthyornis -Ichthyornithes -ichthyornithic -Ichthyornithidae -Ichthyornithiformes -ichthyornithoid -ichthyosaur -Ichthyosauria -ichthyosaurian -ichthyosaurid -Ichthyosauridae -ichthyosauroid -Ichthyosaurus -ichthyosis -ichthyosism -ichthyotic -Ichthyotomi -ichthyotomist -ichthyotomous -ichthyotomy -ichthyotoxin -ichthyotoxism -ichthytaxidermy -ichu -icica -icicle -icicled -icily -iciness -icing -icon -Iconian -iconic -iconical -iconism -iconoclasm -iconoclast -iconoclastic -iconoclastically -iconoclasticism -iconodule -iconodulic -iconodulist -iconoduly -iconograph -iconographer -iconographic -iconographical -iconographist -iconography -iconolater -iconolatrous -iconolatry -iconological -iconologist -iconology -iconomachal -iconomachist -iconomachy -iconomania -iconomatic -iconomatically -iconomaticism -iconomatography -iconometer -iconometric -iconometrical -iconometrically -iconometry -iconophile -iconophilism -iconophilist -iconophily -iconoplast -iconoscope -iconostas -iconostasion -iconostasis -iconotype -icosahedral -Icosandria -icosasemic -icosian -icositetrahedron -icosteid -Icosteidae -icosteine -Icosteus -icotype -icteric -icterical -Icteridae -icterine -icteritious -icterode -icterogenetic -icterogenic -icterogenous -icterohematuria -icteroid -icterus -ictic -Ictonyx -ictuate -ictus -icy -id -Ida -Idaean -Idaho -Idahoan -Idaic -idalia -Idalian -idant -iddat -Iddio -ide -idea -ideaed -ideaful -ideagenous -ideal -idealess -idealism -idealist -idealistic -idealistical -idealistically -ideality -idealization -idealize -idealizer -idealless -ideally -idealness -ideamonger -Idean -ideate -ideation -ideational -ideationally -ideative -ideist -idempotent -identic -identical -identicalism -identically -identicalness -identifiable -identifiableness -identification -identifier -identify -identism -identity -ideogenetic -ideogenical -ideogenous -ideogeny -ideoglyph -ideogram -ideogrammic -ideograph -ideographic -ideographical -ideographically -ideography -ideolatry -ideologic -ideological -ideologically -ideologist -ideologize -ideologue -ideology -ideomotion -ideomotor -ideophone -ideophonetics -ideophonous -ideoplastia -ideoplastic -ideoplastics -ideoplasty -ideopraxist -ides -idgah -idiasm -idic -idiobiology -idioblast -idioblastic -idiochromatic -idiochromatin -idiochromosome -idiocrasis -idiocrasy -idiocratic -idiocratical -idiocy -idiocyclophanous -idioelectric -idioelectrical -Idiogastra -idiogenesis -idiogenetic -idiogenous -idioglossia -idioglottic -idiograph -idiographic -idiographical -idiohypnotism -idiolalia -idiolatry -idiologism -idiolysin -idiom -idiomatic -idiomatical -idiomatically -idiomaticalness -idiomelon -idiometer -idiomography -idiomology -idiomorphic -idiomorphically -idiomorphism -idiomorphous -idiomuscular -idiopathetic -idiopathic -idiopathical -idiopathically -idiopathy -idiophanism -idiophanous -idiophonic -idioplasm -idioplasmatic -idioplasmic -idiopsychological -idiopsychology -idioreflex -idiorepulsive -idioretinal -idiorrhythmic -Idiosepiidae -Idiosepion -idiosome -idiospasm -idiospastic -idiostatic -idiosyncrasy -idiosyncratic -idiosyncratical -idiosyncratically -idiot -idiotcy -idiothalamous -idiothermous -idiothermy -idiotic -idiotical -idiotically -idioticalness -idioticon -idiotish -idiotism -idiotize -idiotropian -idiotry -idiotype -idiotypic -Idism -Idist -Idistic -idite -iditol -idle -idleful -idleheaded -idlehood -idleman -idlement -idleness -idler -idleset -idleship -idlety -idlish -idly -Ido -idocrase -Idoism -Idoist -Idoistic -idol -idola -idolaster -idolater -idolatress -idolatric -idolatrize -idolatrizer -idolatrous -idolatrously -idolatrousness -idolatry -idolify -idolism -idolist -idolistic -idolization -idolize -idolizer -idoloclast -idoloclastic -idolodulia -idolographical -idololatrical -idololatry -idolomancy -idolomania -idolothyte -idolothytic -idolous -idolum -Idomeneus -idoneal -idoneity -idoneous -idoneousness -idorgan -idosaccharic -idose -Idotea -Idoteidae -Idothea -Idotheidae -idrialin -idrialine -idrialite -Idrisid -Idrisite -idryl -Idumaean -idyl -idyler -idylism -idylist -idylize -idyllian -idyllic -idyllical -idyllically -idyllicism -ie -Ierne -if -ife -iffy -Ifugao -Igara -Igbira -Igdyr -igelstromite -igloo -Iglulirmiut -ignatia -Ignatian -Ignatianist -Ignatius -ignavia -igneoaqueous -igneous -ignescent -ignicolist -igniferous -igniferousness -igniform -ignifuge -ignify -ignigenous -ignipotent -ignipuncture -ignitability -ignite -igniter -ignitibility -ignitible -ignition -ignitive -ignitor -ignitron -ignivomous -ignivomousness -ignobility -ignoble -ignobleness -ignoblesse -ignobly -ignominious -ignominiously -ignominiousness -ignominy -ignorable -ignoramus -ignorance -ignorant -Ignorantine -ignorantism -ignorantist -ignorantly -ignorantness -ignoration -ignore -ignorement -ignorer -ignote -Igorot -iguana -Iguania -iguanian -iguanid -Iguanidae -iguaniform -Iguanodon -iguanodont -Iguanodontia -Iguanodontidae -iguanodontoid -Iguanodontoidea -iguanoid -Iguvine -ihi -Ihlat -ihleite -ihram -iiwi -ijma -Ijo -ijolite -Ijore -ijussite -ikat -Ike -ikey -ikeyness -Ikhwan -ikona -ikra -Ila -ileac -ileectomy -ileitis -ileocaecal -ileocaecum -ileocolic -ileocolitis -ileocolostomy -ileocolotomy -ileon -ileosigmoidostomy -ileostomy -ileotomy -ilesite -ileum -ileus -ilex -ilia -Iliac -iliac -iliacus -Iliad -Iliadic -Iliadist -Iliadize -iliahi -ilial -Ilian -iliau -Ilicaceae -ilicaceous -ilicic -ilicin -ilima -iliocaudal -iliocaudalis -iliococcygeal -iliococcygeus -iliococcygian -iliocostal -iliocostalis -iliodorsal -iliofemoral -iliohypogastric -ilioinguinal -ilioischiac -ilioischiatic -iliolumbar -iliopectineal -iliopelvic -ilioperoneal -iliopsoas -iliopsoatic -iliopubic -iliosacral -iliosciatic -ilioscrotal -iliospinal -iliotibial -iliotrochanteric -Ilissus -ilium -ilk -ilka -ilkane -ill -illaborate -illachrymable -illachrymableness -Illaenus -Illano -Illanun -illapsable -illapse -illapsive -illaqueate -illaqueation -illation -illative -illatively -illaudable -illaudably -illaudation -illaudatory -Illecebraceae -illecebrous -illeck -illegal -illegality -illegalize -illegally -illegalness -illegibility -illegible -illegibleness -illegibly -illegitimacy -illegitimate -illegitimately -illegitimateness -illegitimation -illegitimatize -illeism -illeist -illess -illfare -illguide -illiberal -illiberalism -illiberality -illiberalize -illiberally -illiberalness -illicit -illicitly -illicitness -Illicium -illimitability -illimitable -illimitableness -illimitably -illimitate -illimitation -illimited -illimitedly -illimitedness -illinition -illinium -Illinoian -Illinois -Illinoisan -Illinoisian -Illipe -illipene -illiquation -illiquid -illiquidity -illiquidly -illish -illision -illiteracy -illiteral -illiterate -illiterately -illiterateness -illiterature -illium -illness -illocal -illocality -illocally -illogic -illogical -illogicality -illogically -illogicalness -illogician -illogicity -Illoricata -illoricate -illoricated -illoyal -illoyalty -illth -illucidate -illucidation -illucidative -illude -illudedly -illuder -illume -illumer -illuminability -illuminable -illuminance -illuminant -illuminate -illuminated -illuminati -illuminating -illuminatingly -illumination -illuminational -illuminatism -illuminatist -illuminative -illuminato -illuminator -illuminatory -illuminatus -illumine -illuminee -illuminer -Illuminism -illuminist -Illuministic -Illuminize -illuminometer -illuminous -illupi -illure -illurement -illusible -illusion -illusionable -illusional -illusionary -illusioned -illusionism -illusionist -illusionistic -illusive -illusively -illusiveness -illusor -illusorily -illusoriness -illusory -illustrable -illustratable -illustrate -illustration -illustrational -illustrative -illustratively -illustrator -illustratory -illustratress -illustre -illustricity -illustrious -illustriously -illustriousness -illutate -illutation -illuvial -illuviate -illuviation -illy -Illyrian -Illyric -ilmenite -ilmenitite -ilmenorutile -Ilocano -Ilokano -Iloko -Ilongot -ilot -Ilpirra -ilvaite -Ilya -Ilysanthes -Ilysia -Ilysiidae -ilysioid -Ima -image -imageable -imageless -imager -imagerial -imagerially -imagery -imaginability -imaginable -imaginableness -imaginably -imaginal -imaginant -imaginarily -imaginariness -imaginary -imaginate -imagination -imaginational -imaginationalism -imaginative -imaginatively -imaginativeness -imaginator -imagine -imaginer -imagines -imaginist -imaginous -imagism -imagist -imagistic -imago -imam -imamah -imamate -imambarah -imamic -imamship -Imantophyllum -imaret -imbalance -imban -imband -imbannered -imbarge -imbark -imbarn -imbased -imbastardize -imbat -imbauba -imbe -imbecile -imbecilely -imbecilic -imbecilitate -imbecility -imbed -imbellious -imber -imbibe -imbiber -imbibition -imbibitional -imbibitory -imbirussu -imbitter -imbitterment -imbolish -imbondo -imbonity -imbordure -imborsation -imbosom -imbower -imbreathe -imbreviate -imbrex -imbricate -imbricated -imbricately -imbrication -imbricative -imbroglio -imbrue -imbruement -imbrute -imbrutement -imbue -imbuement -imburse -imbursement -Imer -Imerina -Imeritian -imi -imidazole -imidazolyl -imide -imidic -imidogen -iminazole -imine -imino -iminohydrin -imitability -imitable -imitableness -imitancy -imitant -imitate -imitatee -imitation -imitational -imitationist -imitative -imitatively -imitativeness -imitator -imitatorship -imitatress -imitatrix -immaculacy -immaculance -immaculate -immaculately -immaculateness -immalleable -immanacle -immanation -immane -immanely -immanence -immanency -immaneness -immanent -immanental -immanentism -immanentist -immanently -Immanes -immanifest -immanifestness -immanity -immantle -Immanuel -immarble -immarcescible -immarcescibly -immarcibleness -immarginate -immask -immatchable -immaterial -immaterialism -immaterialist -immateriality -immaterialize -immaterially -immaterialness -immaterials -immateriate -immatriculate -immatriculation -immature -immatured -immaturely -immatureness -immaturity -immeability -immeasurability -immeasurable -immeasurableness -immeasurably -immeasured -immechanical -immechanically -immediacy -immedial -immediate -immediately -immediateness -immediatism -immediatist -immedicable -immedicableness -immedicably -immelodious -immember -immemorable -immemorial -immemorially -immense -immensely -immenseness -immensity -immensive -immensurability -immensurable -immensurableness -immensurate -immerd -immerge -immergence -immergent -immerit -immerited -immeritorious -immeritoriously -immeritous -immerse -immersement -immersible -immersion -immersionism -immersionist -immersive -immethodic -immethodical -immethodically -immethodicalness -immethodize -immetrical -immetrically -immetricalness -immew -immi -immigrant -immigrate -immigration -immigrator -immigratory -imminence -imminency -imminent -imminently -imminentness -immingle -imminution -immiscibility -immiscible -immiscibly -immission -immit -immitigability -immitigable -immitigably -immix -immixable -immixture -immobile -immobility -immobilization -immobilize -immoderacy -immoderate -immoderately -immoderateness -immoderation -immodest -immodestly -immodesty -immodulated -immolate -immolation -immolator -immoment -immomentous -immonastered -immoral -immoralism -immoralist -immorality -immoralize -immorally -immorigerous -immorigerousness -immortability -immortable -immortal -immortalism -immortalist -immortality -immortalizable -immortalization -immortalize -immortalizer -immortally -immortalness -immortalship -immortelle -immortification -immortified -immotile -immotioned -immotive -immound -immovability -immovable -immovableness -immovably -immund -immundity -immune -immunist -immunity -immunization -immunize -immunochemistry -immunogen -immunogenetic -immunogenetics -immunogenic -immunogenically -immunogenicity -immunologic -immunological -immunologically -immunologist -immunology -immunoreaction -immunotoxin -immuration -immure -immurement -immusical -immusically -immutability -immutable -immutableness -immutably -immutation -immute -immutilate -immutual -Imogen -Imolinda -imonium -imp -impacability -impacable -impack -impackment -impact -impacted -impaction -impactionize -impactment -impactual -impages -impaint -impair -impairable -impairer -impairment -impala -impalace -impalatable -impale -impalement -impaler -impall -impalm -impalpability -impalpable -impalpably -impalsy -impaludism -impanate -impanation -impanator -impane -impanel -impanelment -impapase -impapyrate -impar -imparadise -imparalleled -imparasitic -impardonable -impardonably -imparidigitate -imparipinnate -imparisyllabic -imparity -impark -imparkation -imparl -imparlance -imparsonee -impart -impartable -impartance -impartation -imparter -impartial -impartialism -impartialist -impartiality -impartially -impartialness -impartibilibly -impartibility -impartible -impartibly -imparticipable -impartite -impartive -impartivity -impartment -impassability -impassable -impassableness -impassably -impasse -impassibilibly -impassibility -impassible -impassibleness -impassion -impassionable -impassionate -impassionately -impassioned -impassionedly -impassionedness -impassionment -impassive -impassively -impassiveness -impassivity -impastation -impaste -impasto -impasture -impaternate -impatible -impatience -impatiency -Impatiens -impatient -Impatientaceae -impatientaceous -impatiently -impatientness -impatronize -impave -impavid -impavidity -impavidly -impawn -impayable -impeach -impeachability -impeachable -impeacher -impeachment -impearl -impeccability -impeccable -impeccably -impeccance -impeccancy -impeccant -impectinate -impecuniary -impecuniosity -impecunious -impecuniously -impecuniousness -impedance -impede -impeder -impedibility -impedible -impedient -impediment -impedimenta -impedimental -impedimentary -impeding -impedingly -impedite -impedition -impeditive -impedometer -impeevish -impel -impellent -impeller -impen -impend -impendence -impendency -impendent -impending -impenetrability -impenetrable -impenetrableness -impenetrably -impenetrate -impenetration -impenetrative -impenitence -impenitent -impenitently -impenitentness -impenitible -impenitibleness -impennate -Impennes -impent -imperance -imperant -Imperata -imperate -imperation -imperatival -imperative -imperatively -imperativeness -imperator -imperatorial -imperatorially -imperatorian -imperatorious -imperatorship -imperatory -imperatrix -imperceivable -imperceivableness -imperceivably -imperceived -imperceiverant -imperceptibility -imperceptible -imperceptibleness -imperceptibly -imperception -imperceptive -imperceptiveness -imperceptivity -impercipience -impercipient -imperence -imperent -imperfect -imperfected -imperfectibility -imperfectible -imperfection -imperfectious -imperfective -imperfectly -imperfectness -imperforable -Imperforata -imperforate -imperforated -imperforation -imperformable -imperia -imperial -imperialin -imperialine -imperialism -imperialist -imperialistic -imperialistically -imperiality -imperialization -imperialize -imperially -imperialness -imperialty -imperil -imperilment -imperious -imperiously -imperiousness -imperish -imperishability -imperishable -imperishableness -imperishably -imperite -imperium -impermanence -impermanency -impermanent -impermanently -impermeability -impermeabilization -impermeabilize -impermeable -impermeableness -impermeably -impermeated -impermeator -impermissible -impermutable -imperscriptible -imperscrutable -impersonable -impersonal -impersonality -impersonalization -impersonalize -impersonally -impersonate -impersonation -impersonative -impersonator -impersonatress -impersonatrix -impersonification -impersonify -impersonization -impersonize -imperspicuity -imperspicuous -imperspirability -imperspirable -impersuadable -impersuadableness -impersuasibility -impersuasible -impersuasibleness -impersuasibly -impertinacy -impertinence -impertinency -impertinent -impertinently -impertinentness -impertransible -imperturbability -imperturbable -imperturbableness -imperturbably -imperturbation -imperturbed -imperverse -impervertible -impervestigable -imperviability -imperviable -imperviableness -impervial -impervious -imperviously -imperviousness -impest -impestation -impester -impeticos -impetiginous -impetigo -impetition -impetrate -impetration -impetrative -impetrator -impetratory -impetre -impetulant -impetulantly -impetuosity -impetuous -impetuously -impetuousness -impetus -Impeyan -imphee -impi -impicture -impierceable -impiety -impignorate -impignoration -impinge -impingement -impingence -impingent -impinger -impinguate -impious -impiously -impiousness -impish -impishly -impishness -impiteous -impitiably -implacability -implacable -implacableness -implacably -implacement -implacental -Implacentalia -implacentate -implant -implantation -implanter -implastic -implasticity -implate -implausibility -implausible -implausibleness -implausibly -impleach -implead -impleadable -impleader -impledge -implement -implemental -implementation -implementiferous -implete -impletion -impletive -implex -impliable -implial -implicant -implicate -implicately -implicateness -implication -implicational -implicative -implicatively -implicatory -implicit -implicitly -implicitness -impliedly -impliedness -impling -implode -implodent -implorable -imploration -implorator -imploratory -implore -implorer -imploring -imploringly -imploringness -implosion -implosive -implosively -implume -implumed -implunge -impluvium -imply -impocket -impofo -impoison -impoisoner -impolarizable -impolicy -impolished -impolite -impolitely -impoliteness -impolitic -impolitical -impolitically -impoliticalness -impoliticly -impoliticness -impollute -imponderabilia -imponderability -imponderable -imponderableness -imponderably -imponderous -impone -imponent -impoor -impopular -impopularly -imporosity -imporous -import -importability -importable -importableness -importably -importance -importancy -important -importantly -importation -importer -importless -importment -importraiture -importray -importunacy -importunance -importunate -importunately -importunateness -importunator -importune -importunely -importunement -importuner -importunity -imposable -imposableness -imposal -impose -imposement -imposer -imposing -imposingly -imposingness -imposition -impositional -impositive -impossibilification -impossibilism -impossibilist -impossibilitate -impossibility -impossible -impossibleness -impossibly -impost -imposter -imposterous -impostor -impostorism -impostorship -impostress -impostrix -impostrous -impostumate -impostumation -impostume -imposture -imposturism -imposturous -imposure -impot -impotable -impotence -impotency -impotent -impotently -impotentness -impound -impoundable -impoundage -impounder -impoundment -impoverish -impoverisher -impoverishment -impracticability -impracticable -impracticableness -impracticably -impractical -impracticality -impracticalness -imprecant -imprecate -imprecation -imprecator -imprecatorily -imprecatory -imprecise -imprecisely -imprecision -impredicability -impredicable -impreg -impregn -impregnability -impregnable -impregnableness -impregnably -impregnant -impregnate -impregnation -impregnative -impregnator -impregnatory -imprejudice -impremeditate -impreparation -impresa -impresario -imprescience -imprescribable -imprescriptibility -imprescriptible -imprescriptibly -imprese -impress -impressable -impressedly -impresser -impressibility -impressible -impressibleness -impressibly -impression -impressionability -impressionable -impressionableness -impressionably -impressional -impressionalist -impressionality -impressionally -impressionary -impressionism -impressionist -impressionistic -impressionistically -impressionless -impressive -impressively -impressiveness -impressment -impressor -impressure -imprest -imprestable -impreventability -impreventable -imprevisibility -imprevisible -imprevision -imprimatur -imprime -imprimitive -imprimitivity -imprint -imprinter -imprison -imprisonable -imprisoner -imprisonment -improbability -improbabilize -improbable -improbableness -improbably -improbation -improbative -improbatory -improbity -improcreant -improcurability -improcurable -improducible -improficience -improficiency -improgressive -improgressively -improgressiveness -improlificical -impromptitude -impromptu -impromptuary -impromptuist -improof -improper -improperation -improperly -improperness -impropriate -impropriation -impropriator -impropriatrix -impropriety -improvability -improvable -improvableness -improvably -improve -improvement -improver -improvership -improvidence -improvident -improvidentially -improvidently -improving -improvingly -improvisate -improvisation -improvisational -improvisator -improvisatorial -improvisatorially -improvisatorize -improvisatory -improvise -improvisedly -improviser -improvision -improviso -improvisor -imprudence -imprudency -imprudent -imprudential -imprudently -imprudentness -impship -impuberal -impuberate -impuberty -impubic -impudence -impudency -impudent -impudently -impudentness -impudicity -impugn -impugnability -impugnable -impugnation -impugner -impugnment -impuissance -impuissant -impulse -impulsion -impulsive -impulsively -impulsiveness -impulsivity -impulsory -impunctate -impunctual -impunctuality -impunely -impunible -impunibly -impunity -impure -impurely -impureness -impuritan -impuritanism -impurity -imputability -imputable -imputableness -imputably -imputation -imputative -imputatively -imputativeness -impute -imputedly -imputer -imputrescence -imputrescibility -imputrescible -imputrid -impy -imshi -imsonic -imu -in -inability -inabordable -inabstinence -inaccentuated -inaccentuation -inacceptable -inaccessibility -inaccessible -inaccessibleness -inaccessibly -inaccordance -inaccordancy -inaccordant -inaccordantly -inaccuracy -inaccurate -inaccurately -inaccurateness -inachid -Inachidae -inachoid -Inachus -inacquaintance -inacquiescent -inactinic -inaction -inactionist -inactivate -inactivation -inactive -inactively -inactiveness -inactivity -inactuate -inactuation -inadaptability -inadaptable -inadaptation -inadaptive -inadept -inadequacy -inadequate -inadequately -inadequateness -inadequation -inadequative -inadequatively -inadherent -inadhesion -inadhesive -inadjustability -inadjustable -inadmissibility -inadmissible -inadmissibly -inadventurous -inadvertence -inadvertency -inadvertent -inadvertently -inadvisability -inadvisable -inadvisableness -inadvisedly -inaesthetic -inaffability -inaffable -inaffectation -inagglutinability -inagglutinable -inaggressive -inagile -inaidable -inaja -inalacrity -inalienability -inalienable -inalienableness -inalienably -inalimental -inalterability -inalterable -inalterableness -inalterably -inamissibility -inamissible -inamissibleness -inamorata -inamorate -inamoration -inamorato -inamovability -inamovable -inane -inanely -inanga -inangulate -inanimadvertence -inanimate -inanimated -inanimately -inanimateness -inanimation -inanition -inanity -inantherate -inapathy -inapostate -inapparent -inappealable -inappeasable -inappellability -inappellable -inappendiculate -inapperceptible -inappertinent -inappetence -inappetency -inappetent -inappetible -inapplicability -inapplicable -inapplicableness -inapplicably -inapplication -inapposite -inappositely -inappositeness -inappreciable -inappreciably -inappreciation -inappreciative -inappreciatively -inappreciativeness -inapprehensible -inapprehension -inapprehensive -inapprehensiveness -inapproachability -inapproachable -inapproachably -inappropriable -inappropriableness -inappropriate -inappropriately -inappropriateness -inapt -inaptitude -inaptly -inaptness -inaqueous -inarable -inarch -inarculum -inarguable -inarguably -inarm -inarticulacy -Inarticulata -inarticulate -inarticulated -inarticulately -inarticulateness -inarticulation -inartificial -inartificiality -inartificially -inartificialness -inartistic -inartistical -inartisticality -inartistically -inasmuch -inassimilable -inassimilation -inassuageable -inattackable -inattention -inattentive -inattentively -inattentiveness -inaudibility -inaudible -inaudibleness -inaudibly -inaugur -inaugural -inaugurate -inauguration -inaugurative -inaugurator -inauguratory -inaugurer -inaurate -inauration -inauspicious -inauspiciously -inauspiciousness -inauthentic -inauthenticity -inauthoritative -inauthoritativeness -inaxon -inbe -inbeaming -inbearing -inbeing -inbending -inbent -inbirth -inblow -inblowing -inblown -inboard -inbond -inborn -inbound -inbread -inbreak -inbreaking -inbreathe -inbreather -inbred -inbreed -inbring -inbringer -inbuilt -inburning -inburnt -inburst -inby -Inca -Incaic -incalculability -incalculable -incalculableness -incalculably -incalescence -incalescency -incalescent -incaliculate -incalver -incalving -incameration -Incan -incandent -incandesce -incandescence -incandescency -incandescent -incandescently -incanous -incantation -incantational -incantator -incantatory -incanton -incapability -incapable -incapableness -incapably -incapacious -incapaciousness -incapacitate -incapacitation -incapacity -incapsulate -incapsulation -incaptivate -incarcerate -incarceration -incarcerator -incardinate -incardination -Incarial -incarmined -incarn -incarnadine -incarnant -incarnate -incarnation -incarnational -incarnationist -incarnative -Incarvillea -incase -incasement -incast -incatenate -incatenation -incaution -incautious -incautiously -incautiousness -incavate -incavated -incavation -incavern -incedingly -incelebrity -incendiarism -incendiary -incendivity -incensation -incense -incenseless -incensement -incensory -incensurable -incensurably -incenter -incentive -incentively -incentor -incept -inception -inceptive -inceptively -inceptor -inceration -incertitude -incessable -incessably -incessancy -incessant -incessantly -incessantness -incest -incestuous -incestuously -incestuousness -inch -inched -inchmeal -inchoacy -inchoant -inchoate -inchoately -inchoateness -inchoation -inchoative -inchpin -inchworm -incide -incidence -incident -incidental -incidentalist -incidentally -incidentalness -incidentless -incidently -incinerable -incinerate -incineration -incinerator -incipience -incipient -incipiently -incircumscription -incircumspect -incircumspection -incircumspectly -incircumspectness -incisal -incise -incisely -incisiform -incision -incisive -incisively -incisiveness -incisor -incisorial -incisory -incisure -incitability -incitable -incitant -incitation -incite -incitement -inciter -incitingly -incitive -incitress -incivic -incivility -incivilization -incivism -inclemency -inclement -inclemently -inclementness -inclinable -inclinableness -inclination -inclinational -inclinator -inclinatorily -inclinatorium -inclinatory -incline -incliner -inclinograph -inclinometer -inclip -inclose -inclosure -includable -include -included -includedness -includer -inclusa -incluse -inclusion -inclusionist -inclusive -inclusively -inclusiveness -inclusory -incoagulable -incoalescence -incoercible -incog -incogent -incogitability -incogitable -incogitancy -incogitant -incogitantly -incogitative -incognita -incognitive -incognito -incognizability -incognizable -incognizance -incognizant -incognoscent -incognoscibility -incognoscible -incoherence -incoherency -incoherent -incoherentific -incoherently -incoherentness -incohering -incohesion -incohesive -incoincidence -incoincident -incombustibility -incombustible -incombustibleness -incombustibly -incombustion -income -incomeless -incomer -incoming -incommensurability -incommensurable -incommensurableness -incommensurably -incommensurate -incommensurately -incommensurateness -incommiscibility -incommiscible -incommodate -incommodation -incommode -incommodement -incommodious -incommodiously -incommodiousness -incommodity -incommunicability -incommunicable -incommunicableness -incommunicably -incommunicado -incommunicative -incommunicatively -incommunicativeness -incommutability -incommutable -incommutableness -incommutably -incompact -incompactly -incompactness -incomparability -incomparable -incomparableness -incomparably -incompassionate -incompassionately -incompassionateness -incompatibility -incompatible -incompatibleness -incompatibly -incompendious -incompensated -incompensation -incompetence -incompetency -incompetent -incompetently -incompetentness -incompletability -incompletable -incompletableness -incomplete -incompleted -incompletely -incompleteness -incompletion -incomplex -incompliance -incompliancy -incompliant -incompliantly -incomplicate -incomplying -incomposed -incomposedly -incomposedness -incomposite -incompossibility -incompossible -incomprehended -incomprehending -incomprehendingly -incomprehensibility -incomprehensible -incomprehensibleness -incomprehensibly -incomprehension -incomprehensive -incomprehensively -incomprehensiveness -incompressibility -incompressible -incompressibleness -incompressibly -incomputable -inconcealable -inconceivability -inconceivable -inconceivableness -inconceivably -inconcinnate -inconcinnately -inconcinnity -inconcinnous -inconcludent -inconcluding -inconclusion -inconclusive -inconclusively -inconclusiveness -inconcrete -inconcurrent -inconcurring -incondensability -incondensable -incondensibility -incondensible -incondite -inconditionate -inconditioned -inconducive -inconfirm -inconformable -inconformably -inconformity -inconfused -inconfusedly -inconfusion -inconfutable -inconfutably -incongealable -incongealableness -incongenerous -incongenial -incongeniality -inconglomerate -incongruence -incongruent -incongruently -incongruity -incongruous -incongruously -incongruousness -inconjoinable -inconnected -inconnectedness -inconnu -inconscience -inconscient -inconsciently -inconscious -inconsciously -inconsecutive -inconsecutively -inconsecutiveness -inconsequence -inconsequent -inconsequential -inconsequentiality -inconsequentially -inconsequently -inconsequentness -inconsiderable -inconsiderableness -inconsiderably -inconsiderate -inconsiderately -inconsiderateness -inconsideration -inconsidered -inconsistence -inconsistency -inconsistent -inconsistently -inconsistentness -inconsolability -inconsolable -inconsolableness -inconsolably -inconsolate -inconsolately -inconsonance -inconsonant -inconsonantly -inconspicuous -inconspicuously -inconspicuousness -inconstancy -inconstant -inconstantly -inconstantness -inconstruable -inconsultable -inconsumable -inconsumably -inconsumed -incontaminable -incontaminate -incontaminateness -incontemptible -incontestability -incontestable -incontestableness -incontestably -incontinence -incontinency -incontinent -incontinently -incontinuity -incontinuous -incontracted -incontractile -incontraction -incontrollable -incontrollably -incontrolled -incontrovertibility -incontrovertible -incontrovertibleness -incontrovertibly -inconvenience -inconveniency -inconvenient -inconveniently -inconvenientness -inconversable -inconversant -inconversibility -inconvertibility -inconvertible -inconvertibleness -inconvertibly -inconvinced -inconvincedly -inconvincibility -inconvincible -inconvincibly -incopresentability -incopresentable -incoronate -incoronated -incoronation -incorporable -incorporate -incorporated -incorporatedness -incorporation -incorporative -incorporator -incorporeal -incorporealism -incorporealist -incorporeality -incorporealize -incorporeally -incorporeity -incorporeous -incorpse -incorrect -incorrection -incorrectly -incorrectness -incorrespondence -incorrespondency -incorrespondent -incorresponding -incorrigibility -incorrigible -incorrigibleness -incorrigibly -incorrodable -incorrodible -incorrosive -incorrupt -incorrupted -incorruptibility -Incorruptible -incorruptible -incorruptibleness -incorruptibly -incorruption -incorruptly -incorruptness -incourteous -incourteously -incrash -incrassate -incrassated -incrassation -incrassative -increasable -increasableness -increase -increasedly -increaseful -increasement -increaser -increasing -increasingly -increate -increately -increative -incredibility -incredible -incredibleness -incredibly -increditable -incredited -incredulity -incredulous -incredulously -incredulousness -increep -incremate -incremation -increment -incremental -incrementation -increpate -increpation -increscence -increscent -increst -incretion -incretionary -incretory -incriminate -incrimination -incriminator -incriminatory -incross -incrossbred -incrossing -incrotchet -incruent -incruental -incruentous -incrust -incrustant -Incrustata -incrustate -incrustation -incrustator -incrustive -incrustment -incrystal -incrystallizable -incubate -incubation -incubational -incubative -incubator -incubatorium -incubatory -incubi -incubous -incubus -incudal -incudate -incudectomy -incudes -incudomalleal -incudostapedial -inculcate -inculcation -inculcative -inculcator -inculcatory -inculpability -inculpable -inculpableness -inculpably -inculpate -inculpation -inculpative -inculpatory -incult -incultivation -inculture -incumbence -incumbency -incumbent -incumbentess -incumbently -incumber -incumberment -incumbrance -incumbrancer -incunable -incunabula -incunabular -incunabulist -incunabulum -incuneation -incur -incurability -incurable -incurableness -incurably -incuriosity -incurious -incuriously -incuriousness -incurrable -incurrence -incurrent -incurse -incursion -incursionist -incursive -incurvate -incurvation -incurvature -incurve -incus -incuse -incut -incutting -Ind -indaba -indaconitine -indagate -indagation -indagative -indagator -indagatory -indamine -indan -indane -Indanthrene -indanthrene -indart -indazin -indazine -indazol -indazole -inde -indebt -indebted -indebtedness -indebtment -indecence -indecency -indecent -indecently -indecentness -Indecidua -indeciduate -indeciduous -indecipherability -indecipherable -indecipherableness -indecipherably -indecision -indecisive -indecisively -indecisiveness -indeclinable -indeclinableness -indeclinably -indecomponible -indecomposable -indecomposableness -indecorous -indecorously -indecorousness -indecorum -indeed -indeedy -indefaceable -indefatigability -indefatigable -indefatigableness -indefatigably -indefeasibility -indefeasible -indefeasibleness -indefeasibly -indefeatable -indefectibility -indefectible -indefectibly -indefective -indefensibility -indefensible -indefensibleness -indefensibly -indefensive -indeficiency -indeficient -indeficiently -indefinable -indefinableness -indefinably -indefinite -indefinitely -indefiniteness -indefinitive -indefinitively -indefinitiveness -indefinitude -indefinity -indeflectible -indefluent -indeformable -indehiscence -indehiscent -indelectable -indelegability -indelegable -indeliberate -indeliberately -indeliberateness -indeliberation -indelibility -indelible -indelibleness -indelibly -indelicacy -indelicate -indelicately -indelicateness -indemnification -indemnificator -indemnificatory -indemnifier -indemnify -indemnitee -indemnitor -indemnity -indemnization -indemoniate -indemonstrability -indemonstrable -indemonstrableness -indemonstrably -indene -indent -indentation -indented -indentedly -indentee -indenter -indention -indentment -indentor -indenture -indentured -indentureship -indentwise -independable -independence -independency -independent -independentism -independently -Independista -indeposable -indeprehensible -indeprivability -indeprivable -inderivative -indescribability -indescribable -indescribableness -indescribably -indescript -indescriptive -indesert -indesignate -indesirable -indestructibility -indestructible -indestructibleness -indestructibly -indetectable -indeterminable -indeterminableness -indeterminably -indeterminacy -indeterminate -indeterminately -indeterminateness -indetermination -indeterminative -indetermined -indeterminism -indeterminist -indeterministic -indevirginate -indevoted -indevotion -indevotional -indevout -indevoutly -indevoutness -index -indexed -indexer -indexical -indexically -indexing -indexless -indexlessness -indexterity -India -indiadem -Indiaman -Indian -Indiana -indianaite -Indianan -Indianeer -Indianesque -Indianhood -Indianian -Indianism -Indianist -indianite -indianization -indianize -Indic -indic -indicable -indican -indicant -indicanuria -indicate -indication -indicative -indicatively -indicator -Indicatoridae -Indicatorinae -indicatory -indicatrix -indices -indicia -indicial -indicible -indicium -indicolite -indict -indictable -indictably -indictee -indicter -indiction -indictional -indictive -indictment -indictor -Indies -indiferous -indifference -indifferency -indifferent -indifferential -indifferentism -indifferentist -indifferentistic -indifferently -indigena -indigenal -indigenate -indigence -indigency -indigene -indigeneity -Indigenismo -indigenist -indigenity -indigenous -indigenously -indigenousness -indigent -indigently -indigested -indigestedness -indigestibility -indigestible -indigestibleness -indigestibly -indigestion -indigestive -indigitamenta -indigitate -indigitation -indign -indignance -indignancy -indignant -indignantly -indignation -indignatory -indignify -indignity -indignly -indigo -indigoberry -Indigofera -indigoferous -indigoid -indigotic -indigotin -indigotindisulphonic -indiguria -indimensible -indimensional -indiminishable -indimple -indirect -indirected -indirection -indirectly -indirectness -indirubin -indiscernibility -indiscernible -indiscernibleness -indiscernibly -indiscerptibility -indiscerptible -indiscerptibleness -indiscerptibly -indisciplinable -indiscipline -indisciplined -indiscoverable -indiscoverably -indiscovered -indiscreet -indiscreetly -indiscreetness -indiscrete -indiscretely -indiscretion -indiscretionary -indiscriminate -indiscriminated -indiscriminately -indiscriminateness -indiscriminating -indiscriminatingly -indiscrimination -indiscriminative -indiscriminatively -indiscriminatory -indiscussable -indiscussible -indispellable -indispensability -indispensable -indispensableness -indispensably -indispose -indisposed -indisposedness -indisposition -indisputability -indisputable -indisputableness -indisputably -indissipable -indissociable -indissolubility -indissoluble -indissolubleness -indissolubly -indissolute -indissolvability -indissolvable -indissolvableness -indissolvably -indissuadable -indissuadably -indistinct -indistinction -indistinctive -indistinctively -indistinctiveness -indistinctly -indistinctness -indistinguishability -indistinguishable -indistinguishableness -indistinguishably -indistinguished -indistortable -indistributable -indisturbable -indisturbance -indisturbed -indite -inditement -inditer -indium -indivertible -indivertibly -individable -individua -individual -individualism -individualist -individualistic -individualistically -individuality -individualization -individualize -individualizer -individualizingly -individually -individuate -individuation -individuative -individuator -individuity -individuum -indivinable -indivisibility -indivisible -indivisibleness -indivisibly -indivision -indocibility -indocible -indocibleness -indocile -indocility -indoctrinate -indoctrination -indoctrinator -indoctrine -indoctrinization -indoctrinize -Indogaea -Indogaean -indogen -indogenide -indole -indolence -indolent -indolently -indoles -indoline -Indologian -Indologist -Indologue -Indology -indoloid -indolyl -indomitability -indomitable -indomitableness -indomitably -Indone -Indonesian -indoor -indoors -indophenin -indophenol -Indophile -Indophilism -Indophilist -indorsation -indorse -indoxyl -indoxylic -indoxylsulphuric -Indra -indraft -indraught -indrawal -indrawing -indrawn -indri -Indris -indubious -indubiously -indubitable -indubitableness -indubitably -indubitatively -induce -induced -inducedly -inducement -inducer -induciae -inducible -inducive -induct -inductance -inductee -inducteous -inductile -inductility -induction -inductional -inductionally -inductionless -inductive -inductively -inductiveness -inductivity -inductometer -inductophone -inductor -inductorium -inductory -inductoscope -indue -induement -indulge -indulgeable -indulgement -indulgence -indulgenced -indulgency -indulgent -indulgential -indulgentially -indulgently -indulgentness -indulger -indulging -indulgingly -induline -indult -indulto -indument -indumentum -induna -induplicate -induplication -induplicative -indurable -indurate -induration -indurative -indurite -Indus -indusial -indusiate -indusiated -indusiform -indusioid -indusium -industrial -industrialism -industrialist -industrialization -industrialize -industrially -industrialness -industrious -industriously -industriousness -industrochemical -industry -induviae -induvial -induviate -indwell -indweller -indy -indyl -indylic -inearth -inebriacy -inebriant -inebriate -inebriation -inebriative -inebriety -inebrious -ineconomic -ineconomy -inedibility -inedible -inedited -Ineducabilia -ineducabilian -ineducability -ineducable -ineducation -ineffability -ineffable -ineffableness -ineffably -ineffaceability -ineffaceable -ineffaceably -ineffectible -ineffectibly -ineffective -ineffectively -ineffectiveness -ineffectual -ineffectuality -ineffectually -ineffectualness -ineffervescence -ineffervescent -ineffervescibility -ineffervescible -inefficacious -inefficaciously -inefficaciousness -inefficacity -inefficacy -inefficience -inefficiency -inefficient -inefficiently -ineffulgent -inelaborate -inelaborated -inelaborately -inelastic -inelasticate -inelasticity -inelegance -inelegancy -inelegant -inelegantly -ineligibility -ineligible -ineligibleness -ineligibly -ineliminable -ineloquence -ineloquent -ineloquently -ineluctability -ineluctable -ineluctably -ineludible -ineludibly -inembryonate -inemendable -inemotivity -inemulous -inenarrable -inenergetic -inenubilable -inenucleable -inept -ineptitude -ineptly -ineptness -inequable -inequal -inequalitarian -inequality -inequally -inequalness -inequation -inequiaxial -inequicostate -inequidistant -inequigranular -inequilateral -inequilibrium -inequilobate -inequilobed -inequipotential -inequipotentiality -inequitable -inequitableness -inequitably -inequity -inequivalent -inequivalve -inequivalvular -ineradicable -ineradicableness -ineradicably -inerasable -inerasableness -inerasably -inerasible -Ineri -inerm -Inermes -Inermi -Inermia -inermous -inerrability -inerrable -inerrableness -inerrably -inerrancy -inerrant -inerrantly -inerratic -inerring -inerringly -inerroneous -inert -inertance -inertia -inertial -inertion -inertly -inertness -inerubescent -inerudite -ineruditely -inerudition -inescapable -inescapableness -inescapably -inesculent -inescutcheon -inesite -inessential -inessentiality -inestimability -inestimable -inestimableness -inestimably -inestivation -inethical -ineunt -ineuphonious -inevadible -inevadibly -inevaporable -inevasible -inevidence -inevident -inevitability -inevitable -inevitableness -inevitably -inexact -inexacting -inexactitude -inexactly -inexactness -inexcellence -inexcitability -inexcitable -inexclusive -inexclusively -inexcommunicable -inexcusability -inexcusable -inexcusableness -inexcusably -inexecutable -inexecution -inexertion -inexhausted -inexhaustedly -inexhaustibility -inexhaustible -inexhaustibleness -inexhaustibly -inexhaustive -inexhaustively -inexigible -inexist -inexistence -inexistency -inexistent -inexorability -inexorable -inexorableness -inexorably -inexpansible -inexpansive -inexpectancy -inexpectant -inexpectation -inexpected -inexpectedly -inexpectedness -inexpedience -inexpediency -inexpedient -inexpediently -inexpensive -inexpensively -inexpensiveness -inexperience -inexperienced -inexpert -inexpertly -inexpertness -inexpiable -inexpiableness -inexpiably -inexpiate -inexplainable -inexplicability -inexplicable -inexplicableness -inexplicables -inexplicably -inexplicit -inexplicitly -inexplicitness -inexplorable -inexplosive -inexportable -inexposable -inexposure -inexpress -inexpressibility -inexpressible -inexpressibleness -inexpressibles -inexpressibly -inexpressive -inexpressively -inexpressiveness -inexpugnability -inexpugnable -inexpugnableness -inexpugnably -inexpungeable -inexpungible -inextant -inextended -inextensibility -inextensible -inextensile -inextension -inextensional -inextensive -inexterminable -inextinct -inextinguishable -inextinguishably -inextirpable -inextirpableness -inextricability -inextricable -inextricableness -inextricably -Inez -inface -infall -infallibilism -infallibilist -infallibility -infallible -infallibleness -infallibly -infalling -infalsificable -infame -infamiliar -infamiliarity -infamize -infamonize -infamous -infamously -infamousness -infamy -infancy -infand -infandous -infang -infanglement -infangthief -infant -infanta -infantado -infante -infanthood -infanticidal -infanticide -infantile -infantilism -infantility -infantine -infantlike -infantry -infantryman -infarct -infarctate -infarcted -infarction -infare -infatuate -infatuatedly -infatuation -infatuator -infaust -infeasibility -infeasible -infeasibleness -infect -infectant -infected -infectedness -infecter -infectible -infection -infectionist -infectious -infectiously -infectiousness -infective -infectiveness -infectivity -infector -infectress -infectuous -infecund -infecundity -infeed -infeft -infeftment -infelicific -infelicitous -infelicitously -infelicitousness -infelicity -infelonious -infelt -infeminine -infer -inferable -inference -inferent -inferential -inferentialism -inferentialist -inferentially -inferior -inferiorism -inferiority -inferiorize -inferiorly -infern -infernal -infernalism -infernality -infernalize -infernally -infernalry -infernalship -inferno -inferoanterior -inferobranchiate -inferofrontal -inferolateral -inferomedian -inferoposterior -inferrer -inferribility -inferrible -inferringly -infertile -infertilely -infertileness -infertility -infest -infestant -infestation -infester -infestive -infestivity -infestment -infeudation -infibulate -infibulation -inficete -infidel -infidelic -infidelical -infidelism -infidelistic -infidelity -infidelize -infidelly -infield -infielder -infieldsman -infighter -infighting -infill -infilling -infilm -infilter -infiltrate -infiltration -infiltrative -infinitant -infinitarily -infinitary -infinitate -infinitation -infinite -infinitely -infiniteness -infinitesimal -infinitesimalism -infinitesimality -infinitesimally -infinitesimalness -infiniteth -infinitieth -infinitival -infinitivally -infinitive -infinitively -infinitize -infinitude -infinituple -infinity -infirm -infirmarer -infirmaress -infirmarian -infirmary -infirmate -infirmation -infirmative -infirmity -infirmly -infirmness -infissile -infit -infitter -infix -infixion -inflame -inflamed -inflamedly -inflamedness -inflamer -inflaming -inflamingly -inflammability -inflammable -inflammableness -inflammably -inflammation -inflammative -inflammatorily -inflammatory -inflatable -inflate -inflated -inflatedly -inflatedness -inflater -inflatile -inflatingly -inflation -inflationary -inflationism -inflationist -inflative -inflatus -inflect -inflected -inflectedness -inflection -inflectional -inflectionally -inflectionless -inflective -inflector -inflex -inflexed -inflexibility -inflexible -inflexibleness -inflexibly -inflexive -inflict -inflictable -inflicter -infliction -inflictive -inflood -inflorescence -inflorescent -inflow -inflowering -influence -influenceable -influencer -influencive -influent -influential -influentiality -influentially -influenza -influenzal -influenzic -influx -influxable -influxible -influxibly -influxion -influxionism -infold -infolder -infolding -infoldment -infoliate -inform -informable -informal -informality -informalize -informally -informant -information -informational -informative -informatively -informatory -informed -informedly -informer -informidable -informingly -informity -infortiate -infortitude -infortunate -infortunately -infortunateness -infortune -infra -infrabasal -infrabestial -infrabranchial -infrabuccal -infracanthal -infracaudal -infracelestial -infracentral -infracephalic -infraclavicle -infraclavicular -infraclusion -infraconscious -infracortical -infracostal -infracostalis -infracotyloid -infract -infractible -infraction -infractor -infradentary -infradiaphragmatic -infragenual -infraglacial -infraglenoid -infraglottic -infragrant -infragular -infrahuman -infrahyoid -infralabial -infralapsarian -infralapsarianism -infralinear -infralittoral -inframammary -inframammillary -inframandibular -inframarginal -inframaxillary -inframedian -inframercurial -inframercurian -inframolecular -inframontane -inframundane -infranatural -infranaturalism -infrangibility -infrangible -infrangibleness -infrangibly -infranodal -infranuclear -infraoccipital -infraocclusion -infraocular -infraoral -infraorbital -infraordinary -infrapapillary -infrapatellar -infraperipherial -infrapose -infraposition -infraprotein -infrapubian -infraradular -infrared -infrarenal -infrarenally -infrarimal -infrascapular -infrascapularis -infrascientific -infraspinal -infraspinate -infraspinatus -infraspinous -infrastapedial -infrasternal -infrastigmatal -infrastipular -infrastructure -infrasutral -infratemporal -infraterrene -infraterritorial -infrathoracic -infratonsillar -infratracheal -infratrochanteric -infratrochlear -infratubal -infraturbinal -infravaginal -infraventral -infrequency -infrequent -infrequently -infrigidate -infrigidation -infrigidative -infringe -infringement -infringer -infringible -infructiferous -infructuose -infructuosity -infructuous -infructuously -infrugal -infrustrable -infrustrably -infula -infumate -infumated -infumation -infundibular -Infundibulata -infundibulate -infundibuliform -infundibulum -infuriate -infuriately -infuriatingly -infuriation -infuscate -infuscation -infuse -infusedly -infuser -infusibility -infusible -infusibleness -infusile -infusion -infusionism -infusionist -infusive -Infusoria -infusorial -infusorian -infusoriform -infusorioid -infusorium -infusory -Ing -ing -Inga -Ingaevones -Ingaevonic -ingallantry -ingate -ingather -ingatherer -ingathering -ingeldable -ingeminate -ingemination -ingenerability -ingenerable -ingenerably -ingenerate -ingenerately -ingeneration -ingenerative -ingeniosity -ingenious -ingeniously -ingeniousness -ingenit -ingenue -ingenuity -ingenuous -ingenuously -ingenuousness -Inger -ingerminate -ingest -ingesta -ingestible -ingestion -ingestive -Inghamite -Inghilois -ingiver -ingiving -ingle -inglenook -ingleside -inglobate -inglobe -inglorious -ingloriously -ingloriousness -inglutition -ingluvial -ingluvies -ingluviitis -ingoing -Ingomar -ingot -ingotman -ingraft -ingrain -ingrained -ingrainedly -ingrainedness -Ingram -ingrammaticism -ingrandize -ingrate -ingrateful -ingratefully -ingratefulness -ingrately -ingratiate -ingratiating -ingratiatingly -ingratiation -ingratiatory -ingratitude -ingravescent -ingravidate -ingravidation -ingredient -ingress -ingression -ingressive -ingressiveness -ingross -ingrow -ingrown -ingrownness -ingrowth -inguen -inguinal -inguinoabdominal -inguinocrural -inguinocutaneous -inguinodynia -inguinolabial -inguinoscrotal -Inguklimiut -ingulf -ingulfment -ingurgitate -ingurgitation -Ingush -inhabit -inhabitability -inhabitable -inhabitancy -inhabitant -inhabitation -inhabitative -inhabitativeness -inhabited -inhabitedness -inhabiter -inhabitiveness -inhabitress -inhalant -inhalation -inhalator -inhale -inhalement -inhalent -inhaler -inharmonic -inharmonical -inharmonious -inharmoniously -inharmoniousness -inharmony -inhaul -inhauler -inhaust -inhaustion -inhearse -inheaven -inhere -inherence -inherency -inherent -inherently -inherit -inheritability -inheritable -inheritableness -inheritably -inheritage -inheritance -inheritor -inheritress -inheritrice -inheritrix -inhesion -inhiate -inhibit -inhibitable -inhibiter -inhibition -inhibitionist -inhibitive -inhibitor -inhibitory -inhomogeneity -inhomogeneous -inhomogeneously -inhospitable -inhospitableness -inhospitably -inhospitality -inhuman -inhumane -inhumanely -inhumanism -inhumanity -inhumanize -inhumanly -inhumanness -inhumate -inhumation -inhumationist -inhume -inhumer -inhumorous -inhumorously -Inia -inial -inidoneity -inidoneous -Inigo -inimicable -inimical -inimicality -inimically -inimicalness -inimitability -inimitable -inimitableness -inimitably -iniome -Iniomi -iniomous -inion -iniquitable -iniquitably -iniquitous -iniquitously -iniquitousness -iniquity -inirritability -inirritable -inirritant -inirritative -inissuable -initial -initialer -initialist -initialize -initially -initiant -initiary -initiate -initiation -initiative -initiatively -initiator -initiatorily -initiatory -initiatress -initiatrix -initis -initive -inject -injectable -injection -injector -injelly -injudicial -injudicially -injudicious -injudiciously -injudiciousness -Injun -injunct -injunction -injunctive -injunctively -injurable -injure -injured -injuredly -injuredness -injurer -injurious -injuriously -injuriousness -injury -injustice -ink -inkberry -inkbush -inken -inker -Inkerman -inket -inkfish -inkholder -inkhorn -inkhornism -inkhornist -inkhornize -inkhornizer -inkindle -inkiness -inkish -inkle -inkless -inklike -inkling -inkmaker -inkmaking -inknot -inkosi -inkpot -Inkra -inkroot -inks -inkshed -inkslinger -inkslinging -inkstain -inkstand -inkstandish -inkstone -inkweed -inkwell -inkwood -inkwriter -inky -inlagation -inlaid -inlaik -inlake -inland -inlander -inlandish -inlaut -inlaw -inlawry -inlay -inlayer -inlaying -inleague -inleak -inleakage -inlet -inlier -inlook -inlooker -inly -inlying -inmate -inmeats -inmixture -inmost -inn -innascibility -innascible -innate -innately -innateness -innatism -innative -innatural -innaturality -innaturally -inneity -inner -innerly -innermore -innermost -innermostly -innerness -innervate -innervation -innervational -innerve -inness -innest -innet -innholder -inning -inninmorite -Innisfail -innkeeper -innless -innocence -innocency -innocent -innocently -innocentness -innocuity -innocuous -innocuously -innocuousness -innominable -innominables -innominata -innominate -innominatum -innovant -innovate -innovation -innovational -innovationist -innovative -innovator -innovatory -innoxious -innoxiously -innoxiousness -innuendo -Innuit -innumerability -innumerable -innumerableness -innumerably -innumerous -innutrient -innutrition -innutritious -innutritive -innyard -Ino -inobedience -inobedient -inobediently -inoblast -inobnoxious -inobscurable -inobservable -inobservance -inobservancy -inobservant -inobservantly -inobservantness -inobservation -inobtainable -inobtrusive -inobtrusively -inobtrusiveness -inobvious -Inocarpus -inoccupation -Inoceramus -inochondritis -inochondroma -inoculability -inoculable -inoculant -inocular -inoculate -inoculation -inoculative -inoculator -inoculum -inocystoma -inocyte -Inodes -inodorous -inodorously -inodorousness -inoepithelioma -inoffending -inoffensive -inoffensively -inoffensiveness -inofficial -inofficially -inofficiosity -inofficious -inofficiously -inofficiousness -inogen -inogenesis -inogenic -inogenous -inoglia -inohymenitic -inolith -inoma -inominous -inomyoma -inomyositis -inomyxoma -inone -inoneuroma -inoperable -inoperative -inoperativeness -inopercular -Inoperculata -inoperculate -inopinable -inopinate -inopinately -inopine -inopportune -inopportunely -inopportuneness -inopportunism -inopportunist -inopportunity -inoppressive -inoppugnable -inopulent -inorb -inorderly -inordinacy -inordinary -inordinate -inordinately -inordinateness -inorganic -inorganical -inorganically -inorganizable -inorganization -inorganized -inoriginate -inornate -inosclerosis -inoscopy -inosculate -inosculation -inosic -inosin -inosinic -inosite -inositol -inostensible -inostensibly -inotropic -inower -inoxidability -inoxidable -inoxidizable -inoxidize -inparabola -inpardonable -inpatient -inpayment -inpensioner -inphase -inpolygon -inpolyhedron -inport -inpour -inpush -input -inquaintance -inquartation -inquest -inquestual -inquiet -inquietation -inquietly -inquietness -inquietude -Inquilinae -inquiline -inquilinism -inquilinity -inquilinous -inquinate -inquination -inquirable -inquirant -inquiration -inquire -inquirendo -inquirent -inquirer -inquiring -inquiringly -inquiry -inquisite -inquisition -inquisitional -inquisitionist -inquisitive -inquisitively -inquisitiveness -inquisitor -inquisitorial -inquisitorially -inquisitorialness -inquisitorious -inquisitorship -inquisitory -inquisitress -inquisitrix -inquisiturient -inradius -inreality -inrigged -inrigger -inrighted -inring -inro -inroad -inroader -inroll -inrooted -inrub -inrun -inrunning -inruption -inrush -insack -insagacity -insalivate -insalivation -insalubrious -insalubrity -insalutary -insalvability -insalvable -insane -insanely -insaneness -insanify -insanitariness -insanitary -insanitation -insanity -insapiency -insapient -insatiability -insatiable -insatiableness -insatiably -insatiate -insatiated -insatiately -insatiateness -insatiety -insatisfaction -insatisfactorily -insaturable -inscenation -inscibile -inscience -inscient -inscribable -inscribableness -inscribe -inscriber -inscript -inscriptible -inscription -inscriptional -inscriptioned -inscriptionist -inscriptionless -inscriptive -inscriptively -inscriptured -inscroll -inscrutability -inscrutable -inscrutableness -inscrutables -inscrutably -insculp -insculpture -insea -inseam -insect -Insecta -insectan -insectarium -insectary -insectean -insected -insecticidal -insecticide -insectiferous -insectiform -insectifuge -insectile -insectine -insection -insectival -Insectivora -insectivore -insectivorous -insectlike -insectmonger -insectologer -insectologist -insectology -insectproof -insecure -insecurely -insecureness -insecurity -insee -inseer -inselberg -inseminate -insemination -insenescible -insensate -insensately -insensateness -insense -insensibility -insensibilization -insensibilize -insensibilizer -insensible -insensibleness -insensibly -insensitive -insensitiveness -insensitivity -insensuous -insentience -insentiency -insentient -inseparability -inseparable -inseparableness -inseparably -inseparate -inseparately -insequent -insert -insertable -inserted -inserter -insertion -insertional -insertive -inserviceable -insessor -Insessores -insessorial -inset -insetter -inseverable -inseverably -inshave -insheathe -inshell -inshining -inship -inshoe -inshoot -inshore -inside -insider -insidiosity -insidious -insidiously -insidiousness -insight -insightful -insigne -insignia -insignificance -insignificancy -insignificant -insignificantly -insimplicity -insincere -insincerely -insincerity -insinking -insinuant -insinuate -insinuating -insinuatingly -insinuation -insinuative -insinuatively -insinuativeness -insinuator -insinuatory -insinuendo -insipid -insipidity -insipidly -insipidness -insipience -insipient -insipiently -insist -insistence -insistency -insistent -insistently -insister -insistingly -insistive -insititious -insnare -insnarement -insnarer -insobriety -insociability -insociable -insociableness -insociably -insocial -insocially -insofar -insolate -insolation -insole -insolence -insolency -insolent -insolently -insolentness -insolid -insolidity -insolubility -insoluble -insolubleness -insolubly -insolvability -insolvable -insolvably -insolvence -insolvency -insolvent -insomnia -insomniac -insomnious -insomnolence -insomnolency -insomnolent -insomuch -insonorous -insooth -insorb -insorbent -insouciance -insouciant -insouciantly -insoul -inspan -inspeak -inspect -inspectability -inspectable -inspectingly -inspection -inspectional -inspectioneer -inspective -inspector -inspectoral -inspectorate -inspectorial -inspectorship -inspectress -inspectrix -inspheration -insphere -inspirability -inspirable -inspirant -inspiration -inspirational -inspirationalism -inspirationally -inspirationist -inspirative -inspirator -inspiratory -inspiratrix -inspire -inspired -inspiredly -inspirer -inspiring -inspiringly -inspirit -inspiriter -inspiriting -inspiritingly -inspiritment -inspirometer -inspissant -inspissate -inspissation -inspissator -inspissosis -inspoke -inspoken -inspreith -instability -instable -install -installant -installation -installer -installment -instance -instancy -instanding -instant -instantaneity -instantaneous -instantaneously -instantaneousness -instanter -instantial -instantly -instantness -instar -instate -instatement -instaurate -instauration -instaurator -instead -instealing -insteam -insteep -instellation -instep -instigant -instigate -instigatingly -instigation -instigative -instigator -instigatrix -instill -instillation -instillator -instillatory -instiller -instillment -instinct -instinctive -instinctively -instinctivist -instinctivity -instinctual -instipulate -institor -institorial -institorian -institory -institute -instituter -institution -institutional -institutionalism -institutionalist -institutionality -institutionalization -institutionalize -institutionally -institutionary -institutionize -institutive -institutively -institutor -institutress -institutrix -instonement -instratified -instreaming -instrengthen -instressed -instroke -instruct -instructed -instructedly -instructedness -instructer -instructible -instruction -instructional -instructionary -instructive -instructively -instructiveness -instructor -instructorship -instructress -instrument -instrumental -instrumentalism -instrumentalist -instrumentality -instrumentalize -instrumentally -instrumentary -instrumentate -instrumentation -instrumentative -instrumentist -instrumentman -insuavity -insubduable -insubjection -insubmergible -insubmersible -insubmission -insubmissive -insubordinate -insubordinately -insubordinateness -insubordination -insubstantial -insubstantiality -insubstantiate -insubstantiation -insubvertible -insuccess -insuccessful -insucken -insuetude -insufferable -insufferableness -insufferably -insufficience -insufficiency -insufficient -insufficiently -insufflate -insufflation -insufflator -insula -insulance -insulant -insular -insularism -insularity -insularize -insularly -insulary -insulate -insulated -insulating -insulation -insulator -insulin -insulize -insulse -insulsity -insult -insultable -insultant -insultation -insulter -insulting -insultingly -insultproof -insunk -insuperability -insuperable -insuperableness -insuperably -insupportable -insupportableness -insupportably -insupposable -insuppressible -insuppressibly -insuppressive -insurability -insurable -insurance -insurant -insure -insured -insurer -insurge -insurgence -insurgency -insurgent -insurgentism -insurgescence -insurmountability -insurmountable -insurmountableness -insurmountably -insurpassable -insurrect -insurrection -insurrectional -insurrectionally -insurrectionary -insurrectionism -insurrectionist -insurrectionize -insurrectory -insusceptibility -insusceptible -insusceptibly -insusceptive -inswamp -inswarming -insweeping -inswell -inswept -inswing -inswinger -intabulate -intact -intactile -intactly -intactness -intagliated -intagliation -intaglio -intagliotype -intake -intaker -intangibility -intangible -intangibleness -intangibly -intarissable -intarsia -intarsiate -intarsist -intastable -intaxable -intechnicality -integer -integrability -integrable -integral -integrality -integralization -integralize -integrally -integrand -integrant -integraph -integrate -integration -integrative -integrator -integrifolious -integrious -integriously -integripalliate -integrity -integrodifferential -integropallial -Integropallialia -Integropalliata -integropalliate -integument -integumental -integumentary -integumentation -inteind -intellect -intellectation -intellected -intellectible -intellection -intellective -intellectively -intellectual -intellectualism -intellectualist -intellectualistic -intellectualistically -intellectuality -intellectualization -intellectualize -intellectualizer -intellectually -intellectualness -intelligence -intelligenced -intelligencer -intelligency -intelligent -intelligential -intelligently -intelligentsia -intelligibility -intelligible -intelligibleness -intelligibly -intelligize -intemerate -intemerately -intemerateness -intemeration -intemperable -intemperably -intemperament -intemperance -intemperate -intemperately -intemperateness -intemperature -intempestive -intempestively -intempestivity -intemporal -intemporally -intenability -intenable -intenancy -intend -intendance -intendancy -intendant -intendantism -intendantship -intended -intendedly -intendedness -intendence -intender -intendible -intending -intendingly -intendit -intendment -intenerate -inteneration -intenible -intensate -intensation -intensative -intense -intensely -intenseness -intensification -intensifier -intensify -intension -intensional -intensionally -intensitive -intensity -intensive -intensively -intensiveness -intent -intention -intentional -intentionalism -intentionality -intentionally -intentioned -intentionless -intentive -intentively -intentiveness -intently -intentness -inter -interabsorption -interacademic -interaccessory -interaccuse -interacinar -interacinous -interact -interaction -interactional -interactionism -interactionist -interactive -interactivity -interadaptation -interadditive -interadventual -interaffiliation -interagency -interagent -interagglutinate -interagglutination -interagree -interagreement -interalar -interallied -interally -interalveolar -interambulacral -interambulacrum -interamnian -interangular -interanimate -interannular -interantagonism -interantennal -interantennary -interapophyseal -interapplication -interarboration -interarch -interarcualis -interarmy -interarticular -interartistic -interarytenoid -interassociation -interassure -interasteroidal -interastral -interatomic -interatrial -interattrition -interaulic -interaural -interauricular -interavailability -interavailable -interaxal -interaxial -interaxillary -interaxis -interbalance -interbanded -interbank -interbedded -interbelligerent -interblend -interbody -interbonding -interborough -interbourse -interbrachial -interbrain -interbranch -interbranchial -interbreath -interbreed -interbrigade -interbring -interbronchial -intercadence -intercadent -intercalare -intercalarily -intercalarium -intercalary -intercalate -intercalation -intercalative -intercalatory -intercale -intercalm -intercanal -intercanalicular -intercapillary -intercardinal -intercarotid -intercarpal -intercarpellary -intercarrier -intercartilaginous -intercaste -intercatenated -intercausative -intercavernous -intercede -interceder -intercellular -intercensal -intercentral -intercentrum -intercept -intercepter -intercepting -interception -interceptive -interceptor -interceptress -intercerebral -intercession -intercessional -intercessionary -intercessionment -intercessive -intercessor -intercessorial -intercessory -interchaff -interchange -interchangeability -interchangeable -interchangeableness -interchangeably -interchanger -interchapter -intercharge -interchase -intercheck -interchoke -interchondral -interchurch -Intercidona -interciliary -intercilium -intercircle -intercirculate -intercirculation -intercision -intercitizenship -intercity -intercivic -intercivilization -interclash -interclasp -interclass -interclavicle -interclavicular -interclerical -intercloud -interclub -intercoastal -intercoccygeal -intercoccygean -intercohesion -intercollege -intercollegian -intercollegiate -intercolline -intercolonial -intercolonially -intercolonization -intercolumn -intercolumnal -intercolumnar -intercolumniation -intercom -intercombat -intercombination -intercombine -intercome -intercommission -intercommon -intercommonable -intercommonage -intercommoner -intercommunal -intercommune -intercommuner -intercommunicability -intercommunicable -intercommunicate -intercommunication -intercommunicative -intercommunicator -intercommunion -intercommunity -intercompany -intercomparable -intercompare -intercomparison -intercomplexity -intercomplimentary -interconal -interconciliary -intercondenser -intercondylar -intercondylic -intercondyloid -interconfessional -interconfound -interconnect -interconnection -intercontinental -intercontorted -intercontradiction -intercontradictory -interconversion -interconvertibility -interconvertible -interconvertibly -intercooler -intercooling -intercoracoid -intercorporate -intercorpuscular -intercorrelate -intercorrelation -intercortical -intercosmic -intercosmically -intercostal -intercostally -intercostobrachial -intercostohumeral -intercotylar -intercounty -intercourse -intercoxal -intercranial -intercreate -intercrescence -intercrinal -intercrop -intercross -intercrural -intercrust -intercrystalline -intercrystallization -intercrystallize -intercultural -interculture -intercurl -intercurrence -intercurrent -intercurrently -intercursation -intercuspidal -intercutaneous -intercystic -interdash -interdebate -interdenominational -interdental -interdentally -interdentil -interdepartmental -interdepartmentally -interdepend -interdependable -interdependence -interdependency -interdependent -interdependently -interderivative -interdespise -interdestructive -interdestructiveness -interdetermination -interdetermine -interdevour -interdict -interdiction -interdictive -interdictor -interdictory -interdictum -interdifferentiation -interdiffuse -interdiffusion -interdiffusive -interdiffusiveness -interdigital -interdigitate -interdigitation -interdine -interdiscal -interdispensation -interdistinguish -interdistrict -interdivision -interdome -interdorsal -interdrink -intereat -interelectrode -interelectrodic -interempire -interenjoy -interentangle -interentanglement -interepidemic -interepimeral -interepithelial -interequinoctial -interessee -interest -interested -interestedly -interestedness -interester -interesting -interestingly -interestingness -interestless -interestuarine -interface -interfacial -interfactional -interfamily -interfascicular -interfault -interfector -interfederation -interfemoral -interfenestral -interfenestration -interferant -interfere -interference -interferent -interferential -interferer -interfering -interferingly -interferingness -interferometer -interferometry -interferric -interfertile -interfertility -interfibrillar -interfibrillary -interfibrous -interfilamentar -interfilamentary -interfilamentous -interfilar -interfiltrate -interfinger -interflange -interflashing -interflow -interfluence -interfluent -interfluminal -interfluous -interfluve -interfluvial -interflux -interfold -interfoliaceous -interfoliar -interfoliate -interfollicular -interforce -interfraternal -interfraternity -interfret -interfretted -interfriction -interfrontal -interfruitful -interfulgent -interfuse -interfusion -interganglionic -intergenerant -intergenerating -intergeneration -intergential -intergesture -intergilt -interglacial -interglandular -interglobular -interglyph -intergossip -intergovernmental -intergradation -intergrade -intergradient -intergraft -intergranular -intergrapple -intergrave -intergroupal -intergrow -intergrown -intergrowth -intergular -intergyral -interhabitation -interhemal -interhemispheric -interhostile -interhuman -interhyal -interhybridize -interim -interimist -interimistic -interimistical -interimistically -interimperial -interincorporation -interindependence -interindicate -interindividual -interinfluence -interinhibition -interinhibitive -interinsert -interinsular -interinsurance -interinsurer -interinvolve -interionic -interior -interiority -interiorize -interiorly -interiorness -interirrigation -interisland -interjacence -interjacency -interjacent -interjaculate -interjaculatory -interjangle -interjealousy -interject -interjection -interjectional -interjectionalize -interjectionally -interjectionary -interjectionize -interjectiveness -interjector -interjectorily -interjectory -interjectural -interjoin -interjoist -interjudgment -interjunction -interkinesis -interkinetic -interknit -interknot -interknow -interknowledge -interlaboratory -interlace -interlaced -interlacedly -interlacement -interlacery -interlacustrine -interlaid -interlake -interlamellar -interlamellation -interlaminar -interlaminate -interlamination -interlanguage -interlap -interlapse -interlard -interlardation -interlardment -interlatitudinal -interlaudation -interlay -interleaf -interleague -interleave -interleaver -interlibel -interlibrary -interlie -interligamentary -interligamentous -interlight -interlimitation -interline -interlineal -interlineally -interlinear -interlinearily -interlinearly -interlineary -interlineate -interlineation -interlinement -interliner -Interlingua -interlingual -interlinguist -interlinguistic -interlining -interlink -interloan -interlobar -interlobate -interlobular -interlocal -interlocally -interlocate -interlocation -interlock -interlocker -interlocular -interloculus -interlocution -interlocutive -interlocutor -interlocutorily -interlocutory -interlocutress -interlocutrice -interlocutrix -interloop -interlope -interloper -interlot -interlucation -interlucent -interlude -interluder -interludial -interlunar -interlunation -interlying -intermalleolar -intermammary -intermammillary -intermandibular -intermanorial -intermarginal -intermarine -intermarriage -intermarriageable -intermarry -intermason -intermastoid -intermat -intermatch -intermaxilla -intermaxillar -intermaxillary -intermaze -intermeasurable -intermeasure -intermeddle -intermeddlement -intermeddler -intermeddlesome -intermeddlesomeness -intermeddling -intermeddlingly -intermediacy -intermediae -intermedial -intermediary -intermediate -intermediately -intermediateness -intermediation -intermediator -intermediatory -intermedium -intermedius -intermeet -intermelt -intermembral -intermembranous -intermeningeal -intermenstrual -intermenstruum -interment -intermental -intermention -intermercurial -intermesenterial -intermesenteric -intermesh -intermessage -intermessenger -intermetacarpal -intermetallic -intermetameric -intermetatarsal -intermew -intermewed -intermewer -intermezzo -intermigration -interminability -interminable -interminableness -interminably -interminant -interminate -intermine -intermingle -intermingledom -interminglement -interminister -interministerial -interministerium -intermission -intermissive -intermit -intermitted -intermittedly -intermittence -intermittency -intermittent -intermittently -intermitter -intermitting -intermittingly -intermix -intermixedly -intermixtly -intermixture -intermobility -intermodification -intermodillion -intermodulation -intermolar -intermolecular -intermomentary -intermontane -intermorainic -intermotion -intermountain -intermundane -intermundial -intermundian -intermundium -intermunicipal -intermunicipality -intermural -intermuscular -intermutation -intermutual -intermutually -intermutule -intern -internal -internality -internalization -internalize -internally -internalness -internals -internarial -internasal -internation -international -internationalism -internationalist -internationality -internationalization -internationalize -internationally -interneciary -internecinal -internecine -internecion -internecive -internee -internetted -interneural -interneuronic -internidal -internist -internment -internobasal -internodal -internode -internodial -internodian -internodium -internodular -internship -internuclear -internuncial -internunciary -internunciatory -internuncio -internuncioship -internuncius -internuptial -interobjective -interoceanic -interoceptive -interoceptor -interocular -interoffice -interolivary -interopercle -interopercular -interoperculum -interoptic -interorbital -interorbitally -interoscillate -interosculant -interosculate -interosculation -interosseal -interosseous -interownership -interpage -interpalatine -interpalpebral -interpapillary -interparenchymal -interparental -interparenthetical -interparenthetically -interparietal -interparietale -interparliament -interparliamentary -interparoxysmal -interparty -interpause -interpave -interpeal -interpectoral -interpeduncular -interpel -interpellant -interpellate -interpellation -interpellator -interpenetrable -interpenetrant -interpenetrate -interpenetration -interpenetrative -interpenetratively -interpermeate -interpersonal -interpervade -interpetaloid -interpetiolar -interpetiolary -interphalangeal -interphase -interphone -interpiece -interpilaster -interpilastering -interplacental -interplait -interplanetary -interplant -interplanting -interplay -interplea -interplead -interpleader -interpledge -interpleural -interplical -interplicate -interplication -interplight -interpoint -interpolable -interpolar -interpolary -interpolate -interpolater -interpolation -interpolative -interpolatively -interpolator -interpole -interpolitical -interpolity -interpollinate -interpolymer -interpone -interportal -interposable -interposal -interpose -interposer -interposing -interposingly -interposition -interposure -interpour -interprater -interpressure -interpret -interpretability -interpretable -interpretableness -interpretably -interpretament -interpretation -interpretational -interpretative -interpretatively -interpreter -interpretership -interpretive -interpretively -interpretorial -interpretress -interprismatic -interproduce -interprofessional -interproglottidal -interproportional -interprotoplasmic -interprovincial -interproximal -interproximate -interpterygoid -interpubic -interpulmonary -interpunct -interpunction -interpunctuate -interpunctuation -interpupillary -interquarrel -interquarter -interrace -interracial -interracialism -interradial -interradially -interradiate -interradiation -interradium -interradius -interrailway -interramal -interramicorn -interramification -interreceive -interreflection -interregal -interregimental -interregional -interregna -interregnal -interregnum -interreign -interrelate -interrelated -interrelatedly -interrelatedness -interrelation -interrelationship -interreligious -interrenal -interrenalism -interrepellent -interrepulsion -interrer -interresponsibility -interresponsible -interreticular -interreticulation -interrex -interrhyme -interright -interriven -interroad -interrogability -interrogable -interrogant -interrogate -interrogatedness -interrogatee -interrogatingly -interrogation -interrogational -interrogative -interrogatively -interrogator -interrogatorily -interrogatory -interrogatrix -interrogee -interroom -interrule -interrun -interrupt -interrupted -interruptedly -interruptedness -interrupter -interruptible -interrupting -interruptingly -interruption -interruptive -interruptively -interruptor -interruptory -intersale -intersalute -interscapilium -interscapular -interscapulum -interscene -interscholastic -interschool -interscience -interscribe -interscription -interseaboard -interseamed -intersect -intersectant -intersection -intersectional -intersegmental -interseminal -intersentimental -interseptal -intersertal -intersesamoid -intersession -intersessional -interset -intersex -intersexual -intersexualism -intersexuality -intershade -intershifting -intershock -intershoot -intershop -intersidereal -intersituate -intersocial -intersocietal -intersociety -intersole -intersolubility -intersoluble -intersomnial -intersomnious -intersonant -intersow -interspace -interspatial -interspatially -interspeaker -interspecial -interspecific -interspersal -intersperse -interspersedly -interspersion -interspheral -intersphere -interspicular -interspinal -interspinalis -interspinous -interspiral -interspiration -intersporal -intersprinkle -intersqueeze -interstadial -interstage -interstaminal -interstapedial -interstate -interstation -interstellar -interstellary -intersterile -intersterility -intersternal -interstice -intersticed -interstimulate -interstimulation -interstitial -interstitially -interstitious -interstratification -interstratify -interstreak -interstream -interstreet -interstrial -interstriation -interstrive -intersubjective -intersubsistence -intersubstitution -intersuperciliary -intersusceptation -intersystem -intersystematical -intertalk -intertangle -intertanglement -intertarsal -interteam -intertentacular -intertergal -interterminal -interterritorial -intertessellation -intertexture -interthing -interthreaded -interthronging -intertidal -intertie -intertill -intertillage -intertinge -intertissued -intertone -intertongue -intertonic -intertouch -intertown -intertrabecular -intertrace -intertrade -intertrading -intertraffic -intertragian -intertransformability -intertransformable -intertransmissible -intertransmission -intertranspicuous -intertransversal -intertransversalis -intertransversary -intertransverse -intertrappean -intertribal -intertriginous -intertriglyph -intertrigo -intertrinitarian -intertrochanteric -intertropic -intertropical -intertropics -intertrude -intertuberal -intertubercular -intertubular -intertwin -intertwine -intertwinement -intertwining -intertwiningly -intertwist -intertwistingly -Intertype -interungular -interungulate -interunion -interuniversity -interurban -interureteric -intervaginal -interval -intervale -intervalley -intervallic -intervallum -intervalvular -intervarietal -intervary -intervascular -intervein -interveinal -intervenant -intervene -intervener -intervenience -interveniency -intervenient -intervenium -intervention -interventional -interventionism -interventionist -interventive -interventor -interventral -interventralia -interventricular -intervenular -interverbal -interversion -intervert -intervertebra -intervertebral -intervertebrally -intervesicular -interview -interviewable -interviewee -interviewer -intervillous -intervisibility -intervisible -intervisit -intervisitation -intervital -intervocal -intervocalic -intervolute -intervolution -intervolve -interwar -interweave -interweavement -interweaver -interweaving -interweavingly -interwed -interweld -interwhiff -interwhile -interwhistle -interwind -interwish -interword -interwork -interworks -interworld -interworry -interwound -interwove -interwoven -interwovenly -interwrap -interwreathe -interwrought -interxylary -interzonal -interzone -interzooecial -interzygapophysial -intestable -intestacy -intestate -intestation -intestinal -intestinally -intestine -intestineness -intestiniform -intestinovesical -intext -intextine -intexture -inthrall -inthrallment -inthrong -inthronistic -inthronization -inthronize -inthrow -inthrust -intil -intima -intimacy -intimal -intimate -intimately -intimateness -intimater -intimation -intimidate -intimidation -intimidator -intimidatory -intimidity -intimity -intinction -intine -intitule -into -intoed -intolerability -intolerable -intolerableness -intolerably -intolerance -intolerancy -intolerant -intolerantly -intolerantness -intolerated -intolerating -intoleration -intonable -intonate -intonation -intonator -intone -intonement -intoner -intoothed -intorsion -intort -intortillage -intown -intoxation -intoxicable -intoxicant -intoxicate -intoxicated -intoxicatedly -intoxicatedness -intoxicating -intoxicatingly -intoxication -intoxicative -intoxicator -intrabiontic -intrabranchial -intrabred -intrabronchial -intrabuccal -intracalicular -intracanalicular -intracanonical -intracapsular -intracardiac -intracardial -intracarpal -intracarpellary -intracartilaginous -intracellular -intracellularly -intracephalic -intracerebellar -intracerebral -intracerebrally -intracervical -intrachordal -intracistern -intracity -intraclitelline -intracloacal -intracoastal -intracoelomic -intracolic -intracollegiate -intracommunication -intracompany -intracontinental -intracorporeal -intracorpuscular -intracortical -intracosmic -intracosmical -intracosmically -intracostal -intracranial -intracranially -intractability -intractable -intractableness -intractably -intractile -intracutaneous -intracystic -intrada -intradepartmental -intradermal -intradermally -intradermic -intradermically -intradermo -intradistrict -intradivisional -intrados -intraduodenal -intradural -intraecclesiastical -intraepiphyseal -intraepithelial -intrafactory -intrafascicular -intrafissural -intrafistular -intrafoliaceous -intraformational -intrafusal -intragastric -intragemmal -intraglacial -intraglandular -intraglobular -intragroup -intragroupal -intragyral -intrahepatic -intrahyoid -intraimperial -intrait -intrajugular -intralamellar -intralaryngeal -intralaryngeally -intraleukocytic -intraligamentary -intraligamentous -intralingual -intralobar -intralobular -intralocular -intralogical -intralumbar -intramammary -intramarginal -intramastoid -intramatrical -intramatrically -intramedullary -intramembranous -intrameningeal -intramental -intrametropolitan -intramolecular -intramontane -intramorainic -intramundane -intramural -intramuralism -intramuscular -intramuscularly -intramyocardial -intranarial -intranasal -intranatal -intranational -intraneous -intraneural -intranidal -intranquil -intranquillity -intranscalency -intranscalent -intransferable -intransformable -intransfusible -intransgressible -intransient -intransigency -intransigent -intransigentism -intransigentist -intransigently -intransitable -intransitive -intransitively -intransitiveness -intransitivity -intranslatable -intransmissible -intransmutability -intransmutable -intransparency -intransparent -intrant -intranuclear -intraoctave -intraocular -intraoral -intraorbital -intraorganization -intraossal -intraosseous -intraosteal -intraovarian -intrapair -intraparenchymatous -intraparietal -intraparochial -intraparty -intrapelvic -intrapericardiac -intrapericardial -intraperineal -intraperiosteal -intraperitoneal -intraperitoneally -intrapetiolar -intraphilosophic -intrapial -intraplacental -intraplant -intrapleural -intrapolar -intrapontine -intraprostatic -intraprotoplasmic -intrapsychic -intrapsychical -intrapsychically -intrapulmonary -intrapyretic -intrarachidian -intrarectal -intrarelation -intrarenal -intraretinal -intrarhachidian -intraschool -intrascrotal -intrasegmental -intraselection -intrasellar -intraseminal -intraseptal -intraserous -intrashop -intraspecific -intraspinal -intrastate -intrastromal -intrasusception -intrasynovial -intratarsal -intratelluric -intraterritorial -intratesticular -intrathecal -intrathoracic -intrathyroid -intratomic -intratonsillar -intratrabecular -intratracheal -intratracheally -intratropical -intratubal -intratubular -intratympanic -intravaginal -intravalvular -intravasation -intravascular -intravenous -intravenously -intraventricular -intraverbal -intraversable -intravertebral -intravertebrally -intravesical -intravital -intravitelline -intravitreous -intraxylary -intreat -intrench -intrenchant -intrencher -intrenchment -intrepid -intrepidity -intrepidly -intrepidness -intricacy -intricate -intricately -intricateness -intrication -intrigant -intrigue -intrigueproof -intriguer -intriguery -intriguess -intriguing -intriguingly -intrine -intrinse -intrinsic -intrinsical -intrinsicality -intrinsically -intrinsicalness -introactive -introceptive -introconversion -introconvertibility -introconvertible -introdden -introduce -introducee -introducement -introducer -introducible -introduction -introductive -introductively -introductor -introductorily -introductoriness -introductory -introductress -introflex -introflexion -introgression -introgressive -introinflection -introit -introitus -introject -introjection -introjective -intromissibility -intromissible -intromission -intromissive -intromit -intromittence -intromittent -intromitter -intropression -intropulsive -introreception -introrsal -introrse -introrsely -introsensible -introsentient -introspect -introspectable -introspection -introspectional -introspectionism -introspectionist -introspective -introspectively -introspectiveness -introspectivism -introspectivist -introspector -introsuction -introsuscept -introsusception -introthoracic -introtraction -introvenient -introverse -introversibility -introversible -introversion -introversive -introversively -introvert -introverted -introvertive -introvision -introvolution -intrudance -intrude -intruder -intruding -intrudingly -intrudress -intruse -intrusion -intrusional -intrusionism -intrusionist -intrusive -intrusively -intrusiveness -intrust -intubate -intubation -intubationist -intubator -intube -intue -intuent -intuicity -intuit -intuitable -intuition -intuitional -intuitionalism -intuitionalist -intuitionally -intuitionism -intuitionist -intuitionistic -intuitionless -intuitive -intuitively -intuitiveness -intuitivism -intuitivist -intumesce -intumescence -intumescent -inturbidate -inturn -inturned -inturning -intussuscept -intussusception -intussusceptive -intwist -inula -inulaceous -inulase -inulin -inuloid -inumbrate -inumbration -inunct -inunction -inunctum -inunctuosity -inunctuous -inundable -inundant -inundate -inundation -inundator -inundatory -inunderstandable -inurbane -inurbanely -inurbaneness -inurbanity -inure -inured -inuredness -inurement -inurn -inusitate -inusitateness -inusitation -inustion -inutile -inutilely -inutility -inutilized -inutterable -invaccinate -invaccination -invadable -invade -invader -invaginable -invaginate -invagination -invalescence -invalid -invalidate -invalidation -invalidator -invalidcy -invalidhood -invalidish -invalidism -invalidity -invalidly -invalidness -invalidship -invalorous -invaluable -invaluableness -invaluably -invalued -Invar -invariability -invariable -invariableness -invariably -invariance -invariancy -invariant -invariantive -invariantively -invariantly -invaried -invasion -invasionist -invasive -invecked -invected -invection -invective -invectively -invectiveness -invectivist -invector -inveigh -inveigher -inveigle -inveiglement -inveigler -inveil -invein -invendibility -invendible -invendibleness -invenient -invent -inventable -inventary -inventer -inventful -inventibility -inventible -inventibleness -invention -inventional -inventionless -inventive -inventively -inventiveness -inventor -inventoriable -inventorial -inventorially -inventory -inventress -inventurous -inveracious -inveracity -inverisimilitude -inverity -inverminate -invermination -invernacular -Inverness -inversable -inversatile -inverse -inversed -inversedly -inversely -inversion -inversionist -inversive -invert -invertase -invertebracy -invertebral -Invertebrata -invertebrate -invertebrated -inverted -invertedly -invertend -inverter -invertibility -invertible -invertile -invertin -invertive -invertor -invest -investable -investible -investigable -investigatable -investigate -investigating -investigatingly -investigation -investigational -investigative -investigator -investigatorial -investigatory -investitive -investitor -investiture -investment -investor -inveteracy -inveterate -inveterately -inveterateness -inviability -invictive -invidious -invidiously -invidiousness -invigilance -invigilancy -invigilation -invigilator -invigor -invigorant -invigorate -invigorating -invigoratingly -invigoratingness -invigoration -invigorative -invigoratively -invigorator -invinate -invination -invincibility -invincible -invincibleness -invincibly -inviolability -inviolable -inviolableness -inviolably -inviolacy -inviolate -inviolated -inviolately -inviolateness -invirile -invirility -invirtuate -inviscate -inviscation -inviscid -inviscidity -invised -invisibility -invisible -invisibleness -invisibly -invitable -invital -invitant -invitation -invitational -invitatory -invite -invitee -invitement -inviter -invitiate -inviting -invitingly -invitingness -invitress -invitrifiable -invivid -invocable -invocant -invocate -invocation -invocative -invocator -invocatory -invoice -invoke -invoker -involatile -involatility -involucel -involucellate -involucellated -involucral -involucrate -involucre -involucred -involucriform -involucrum -involuntarily -involuntariness -involuntary -involute -involuted -involutedly -involutely -involution -involutional -involutionary -involutorial -involutory -involve -involved -involvedly -involvedness -involvement -involvent -involver -invulnerability -invulnerable -invulnerableness -invulnerably -invultuation -inwale -inwall -inwandering -inward -inwardly -inwardness -inwards -inweave -inwedged -inweed -inweight -inwick -inwind -inwit -inwith -inwood -inwork -inworn -inwound -inwoven -inwrap -inwrapment -inwreathe -inwrit -inwrought -inyoite -inyoke -Io -io -Iodamoeba -iodate -iodation -iodhydrate -iodhydric -iodhydrin -iodic -iodide -iodiferous -iodinate -iodination -iodine -iodinium -iodinophil -iodinophilic -iodinophilous -iodism -iodite -iodization -iodize -iodizer -iodo -iodobehenate -iodobenzene -iodobromite -iodocasein -iodochloride -iodochromate -iodocresol -iododerma -iodoethane -iodoform -iodogallicin -iodohydrate -iodohydric -iodohydrin -iodol -iodomercurate -iodomercuriate -iodomethane -iodometric -iodometrical -iodometry -iodonium -iodopsin -iodoso -iodosobenzene -iodospongin -iodotannic -iodotherapy -iodothyrin -iodous -iodoxy -iodoxybenzene -iodyrite -iolite -ion -Ione -Ioni -Ionian -Ionic -ionic -Ionicism -Ionicization -Ionicize -Ionidium -Ionism -Ionist -ionium -ionizable -Ionization -ionization -Ionize -ionize -ionizer -ionogen -ionogenic -ionone -Ionornis -ionosphere -ionospheric -Ionoxalis -iontophoresis -Ioskeha -iota -iotacism -iotacismus -iotacist -iotization -iotize -Iowa -Iowan -Ipalnemohuani -ipecac -ipecacuanha -ipecacuanhic -Iphimedia -Iphis -ipid -Ipidae -ipil -ipomea -Ipomoea -ipomoein -ipseand -ipsedixitish -ipsedixitism -ipsedixitist -ipseity -ipsilateral -Ira -iracund -iracundity -iracundulous -irade -Iran -Irani -Iranian -Iranic -Iranism -Iranist -Iranize -Iraq -Iraqi -Iraqian -irascent -irascibility -irascible -irascibleness -irascibly -irate -irately -ire -ireful -irefully -irefulness -Irelander -ireless -Irena -irenarch -Irene -irene -irenic -irenical -irenically -irenicism -irenicist -irenicon -irenics -irenicum -Iresine -Irfan -Irgun -Irgunist -irian -Iriartea -Iriarteaceae -Iricism -Iricize -irid -Iridaceae -iridaceous -iridadenosis -iridal -iridalgia -iridate -iridauxesis -iridectome -iridectomize -iridectomy -iridectropium -iridemia -iridencleisis -iridentropium -irideous -irideremia -irides -iridesce -iridescence -iridescency -iridescent -iridescently -iridial -iridian -iridiate -iridic -iridical -iridin -iridine -iridiocyte -iridiophore -iridioplatinum -iridious -iridite -iridium -iridization -iridize -iridoavulsion -iridocapsulitis -iridocele -iridoceratitic -iridochoroiditis -iridocoloboma -iridoconstrictor -iridocyclitis -iridocyte -iridodesis -iridodiagnosis -iridodialysis -iridodonesis -iridokinesia -iridomalacia -iridomotor -Iridomyrmex -iridoncus -iridoparalysis -iridophore -iridoplegia -iridoptosis -iridopupillary -iridorhexis -iridosclerotomy -iridosmine -iridosmium -iridotasis -iridotome -iridotomy -iris -irisated -irisation -iriscope -irised -Irish -Irisher -Irishian -Irishism -Irishize -Irishly -Irishman -Irishness -Irishry -Irishwoman -Irishy -irisin -irislike -irisroot -iritic -iritis -irk -irksome -irksomely -irksomeness -Irma -Iroha -irok -iroko -iron -ironback -ironbark -ironbound -ironbush -ironclad -irone -ironer -ironfisted -ironflower -ironhanded -ironhandedly -ironhandedness -ironhard -ironhead -ironheaded -ironhearted -ironheartedly -ironheartedness -ironical -ironically -ironicalness -ironice -ironish -ironism -ironist -ironize -ironless -ironlike -ironly -ironmaker -ironmaking -ironman -ironmaster -ironmonger -ironmongering -ironmongery -ironness -ironshod -ironshot -ironside -ironsided -ironsides -ironsmith -ironstone -ironware -ironweed -ironwood -ironwork -ironworked -ironworker -ironworking -ironworks -ironwort -irony -Iroquoian -Iroquois -Irpex -irradiance -irradiancy -irradiant -irradiate -irradiated -irradiatingly -irradiation -irradiative -irradiator -irradicable -irradicate -irrarefiable -irrationability -irrationable -irrationably -irrational -irrationalism -irrationalist -irrationalistic -irrationality -irrationalize -irrationally -irrationalness -irreality -irrealizable -irrebuttable -irreceptive -irreceptivity -irreciprocal -irreciprocity -irreclaimability -irreclaimable -irreclaimableness -irreclaimably -irreclaimed -irrecognition -irrecognizability -irrecognizable -irrecognizably -irrecognizant -irrecollection -irreconcilability -irreconcilable -irreconcilableness -irreconcilably -irreconcile -irreconcilement -irreconciliability -irreconciliable -irreconciliableness -irreconciliably -irreconciliation -irrecordable -irrecoverable -irrecoverableness -irrecoverably -irrecusable -irrecusably -irredeemability -irredeemable -irredeemableness -irredeemably -irredeemed -irredenta -irredential -Irredentism -Irredentist -irredressibility -irredressible -irredressibly -irreducibility -irreducible -irreducibleness -irreducibly -irreductibility -irreductible -irreduction -irreferable -irreflection -irreflective -irreflectively -irreflectiveness -irreflexive -irreformability -irreformable -irrefragability -irrefragable -irrefragableness -irrefragably -irrefrangibility -irrefrangible -irrefrangibleness -irrefrangibly -irrefusable -irrefutability -irrefutable -irrefutableness -irrefutably -irregardless -irregeneracy -irregenerate -irregeneration -irregular -irregularism -irregularist -irregularity -irregularize -irregularly -irregularness -irregulate -irregulated -irregulation -irrelate -irrelated -irrelation -irrelative -irrelatively -irrelativeness -irrelevance -irrelevancy -irrelevant -irrelevantly -irreliability -irrelievable -irreligion -irreligionism -irreligionist -irreligionize -irreligiosity -irreligious -irreligiously -irreligiousness -irreluctant -irremeable -irremeably -irremediable -irremediableness -irremediably -irrememberable -irremissibility -irremissible -irremissibleness -irremissibly -irremission -irremissive -irremovability -irremovable -irremovableness -irremovably -irremunerable -irrenderable -irrenewable -irrenunciable -irrepair -irrepairable -irreparability -irreparable -irreparableness -irreparably -irrepassable -irrepealability -irrepealable -irrepealableness -irrepealably -irrepentance -irrepentant -irrepentantly -irreplaceable -irreplaceably -irrepleviable -irreplevisable -irreportable -irreprehensible -irreprehensibleness -irreprehensibly -irrepresentable -irrepresentableness -irrepressibility -irrepressible -irrepressibleness -irrepressibly -irrepressive -irreproachability -irreproachable -irreproachableness -irreproachably -irreproducible -irreproductive -irreprovable -irreprovableness -irreprovably -irreptitious -irrepublican -irresilient -irresistance -irresistibility -irresistible -irresistibleness -irresistibly -irresoluble -irresolubleness -irresolute -irresolutely -irresoluteness -irresolution -irresolvability -irresolvable -irresolvableness -irresolved -irresolvedly -irresonance -irresonant -irrespectability -irrespectable -irrespectful -irrespective -irrespectively -irrespirable -irrespondence -irresponsibility -irresponsible -irresponsibleness -irresponsibly -irresponsive -irresponsiveness -irrestrainable -irrestrainably -irrestrictive -irresultive -irresuscitable -irresuscitably -irretention -irretentive -irretentiveness -irreticence -irreticent -irretraceable -irretraceably -irretractable -irretractile -irretrievability -irretrievable -irretrievableness -irretrievably -irrevealable -irrevealably -irreverence -irreverend -irreverendly -irreverent -irreverential -irreverentialism -irreverentially -irreverently -irreversibility -irreversible -irreversibleness -irreversibly -irrevertible -irreviewable -irrevisable -irrevocability -irrevocable -irrevocableness -irrevocably -irrevoluble -irrigable -irrigably -irrigant -irrigate -irrigation -irrigational -irrigationist -irrigative -irrigator -irrigatorial -irrigatory -irriguous -irriguousness -irrision -irrisor -Irrisoridae -irrisory -irritability -irritable -irritableness -irritably -irritament -irritancy -irritant -irritate -irritatedly -irritating -irritatingly -irritation -irritative -irritativeness -irritator -irritatory -Irritila -irritomotile -irritomotility -irrorate -irrotational -irrotationally -irrubrical -irrupt -irruptible -irruption -irruptive -irruptively -Irvin -Irving -Irvingesque -Irvingiana -Irvingism -Irvingite -Irwin -is -Isaac -Isabel -isabelina -isabelita -Isabella -Isabelle -Isabelline -isabnormal -isaconitine -isacoustic -isadelphous -Isadora -isagoge -isagogic -isagogical -isagogically -isagogics -isagon -Isaiah -Isaian -isallobar -isallotherm -isamine -Isander -isandrous -isanemone -isanomal -isanomalous -isanthous -isapostolic -Isaria -isarioid -isatate -isatic -isatide -isatin -isatinic -Isatis -isatogen -isatogenic -Isaurian -Isawa -isazoxy -isba -Iscariot -Iscariotic -Iscariotical -Iscariotism -ischemia -ischemic -ischiac -ischiadic -ischiadicus -ischial -ischialgia -ischialgic -ischiatic -ischidrosis -ischioanal -ischiobulbar -ischiocapsular -ischiocaudal -ischiocavernosus -ischiocavernous -ischiocele -ischiocerite -ischiococcygeal -ischiofemoral -ischiofibular -ischioiliac -ischioneuralgia -ischioperineal -ischiopodite -ischiopubic -ischiopubis -ischiorectal -ischiorrhogic -ischiosacral -ischiotibial -ischiovaginal -ischiovertebral -ischium -ischocholia -ischuretic -ischuria -ischury -Ischyodus -Isegrim -isenergic -isentropic -isepiptesial -isepiptesis -iserine -iserite -isethionate -isethionic -Iseum -Isfahan -Ishmael -Ishmaelite -Ishmaelitic -Ishmaelitish -Ishmaelitism -ishpingo -ishshakku -Isiac -Isiacal -Isidae -isidiiferous -isidioid -isidiophorous -isidiose -isidium -isidoid -Isidore -Isidorian -Isidoric -Isinai -isindazole -isinglass -Isis -Islam -Islamic -Islamism -Islamist -Islamistic -Islamite -Islamitic -Islamitish -Islamization -Islamize -island -islander -islandhood -islandic -islandish -islandless -islandlike -islandman -islandress -islandry -islandy -islay -isle -isleless -islesman -islet -Isleta -isleted -isleward -islot -ism -Ismaelism -Ismaelite -Ismaelitic -Ismaelitical -Ismaelitish -Ismaili -Ismailian -Ismailite -ismal -ismatic -ismatical -ismaticalness -ismdom -ismy -Isnardia -iso -isoabnormal -isoagglutination -isoagglutinative -isoagglutinin -isoagglutinogen -isoalantolactone -isoallyl -isoamarine -isoamide -isoamyl -isoamylamine -isoamylene -isoamylethyl -isoamylidene -isoantibody -isoantigen -isoapiole -isoasparagine -isoaurore -isobar -isobarbaloin -isobarbituric -isobare -isobaric -isobarism -isobarometric -isobase -isobath -isobathic -isobathytherm -isobathythermal -isobathythermic -isobenzofuran -isobilateral -isobilianic -isobiogenetic -isoborneol -isobornyl -isobront -isobronton -isobutane -isobutyl -isobutylene -isobutyraldehyde -isobutyrate -isobutyric -isobutyryl -isocamphor -isocamphoric -isocaproic -isocarbostyril -Isocardia -Isocardiidae -isocarpic -isocarpous -isocellular -isocephalic -isocephalism -isocephalous -isocephaly -isocercal -isocercy -isochasm -isochasmic -isocheim -isocheimal -isocheimenal -isocheimic -isocheimonal -isochlor -isochlorophyll -isochlorophyllin -isocholanic -isocholesterin -isocholesterol -isochor -isochoric -isochromatic -isochronal -isochronally -isochrone -isochronic -isochronical -isochronism -isochronize -isochronon -isochronous -isochronously -isochroous -isocinchomeronic -isocinchonine -isocitric -isoclasite -isoclimatic -isoclinal -isocline -isoclinic -isocodeine -isocola -isocolic -isocolon -isocoria -isocorybulbin -isocorybulbine -isocorydine -isocoumarin -isocracy -isocrat -isocratic -isocreosol -isocrotonic -isocrymal -isocryme -isocrymic -isocyanate -isocyanic -isocyanide -isocyanine -isocyano -isocyanogen -isocyanurate -isocyanuric -isocyclic -isocymene -isocytic -isodactylism -isodactylous -isodiabatic -isodialuric -isodiametric -isodiametrical -isodiazo -isodiazotate -isodimorphic -isodimorphism -isodimorphous -isodomic -isodomous -isodomum -isodont -isodontous -isodrome -isodulcite -isodurene -isodynamia -isodynamic -isodynamical -isoelectric -isoelectrically -isoelectronic -isoelemicin -isoemodin -isoenergetic -isoerucic -Isoetaceae -Isoetales -Isoetes -isoeugenol -isoflavone -isoflor -isogamete -isogametic -isogametism -isogamic -isogamous -isogamy -isogen -isogenesis -isogenetic -isogenic -isogenotype -isogenotypic -isogenous -isogeny -isogeotherm -isogeothermal -isogeothermic -isogloss -isoglossal -isognathism -isognathous -isogon -isogonal -isogonality -isogonally -isogonic -isogoniostat -isogonism -isograft -isogram -isograph -isographic -isographical -isographically -isography -isogynous -isohaline -isohalsine -isohel -isohemopyrrole -isoheptane -isohesperidin -isohexyl -isohydric -isohydrocyanic -isohydrosorbic -isohyet -isohyetal -isoimmune -isoimmunity -isoimmunization -isoimmunize -isoindazole -isoindigotin -isoindole -isoionone -isokeraunic -isokeraunographic -isokeraunophonic -Isokontae -isokontan -isokurtic -isolability -isolable -isolapachol -isolate -isolated -isolatedly -isolating -isolation -isolationism -isolationist -isolative -Isolde -isolecithal -isoleucine -isolichenin -isolinolenic -isologous -isologue -isology -Isoloma -isolysin -isolysis -isomagnetic -isomaltose -isomastigate -isomelamine -isomenthone -isomer -Isomera -isomere -isomeric -isomerical -isomerically -isomeride -isomerism -isomerization -isomerize -isomeromorphism -isomerous -isomery -isometric -isometrical -isometrically -isometrograph -isometropia -isometry -isomorph -isomorphic -isomorphism -isomorphous -Isomyaria -isomyarian -isoneph -isonephelic -isonergic -isonicotinic -isonitramine -isonitrile -isonitroso -isonomic -isonomous -isonomy -isonuclear -isonym -isonymic -isonymy -isooleic -isoosmosis -isopachous -isopag -isoparaffin -isopectic -isopelletierin -isopelletierine -isopentane -isoperimeter -isoperimetric -isoperimetrical -isoperimetry -isopetalous -isophanal -isophane -isophasal -isophene -isophenomenal -isophoria -isophorone -isophthalic -isophthalyl -isophyllous -isophylly -isopicramic -isopiestic -isopiestically -isopilocarpine -isoplere -isopleth -Isopleura -isopleural -isopleuran -isopleurous -isopod -Isopoda -isopodan -isopodiform -isopodimorphous -isopodous -isopogonous -isopolite -isopolitical -isopolity -isopoly -isoprene -isopropenyl -isopropyl -isopropylacetic -isopropylamine -isopsephic -isopsephism -Isoptera -isopterous -isoptic -isopulegone -isopurpurin -isopycnic -isopyre -isopyromucic -isopyrrole -isoquercitrin -isoquinine -isoquinoline -isorcinol -isorhamnose -isorhodeose -isorithm -isorosindone -isorrhythmic -isorropic -isosaccharic -isosaccharin -isoscele -isosceles -isoscope -isoseismal -isoseismic -isoseismical -isoseist -isoserine -isosmotic -Isospondyli -isospondylous -isospore -isosporic -isosporous -isospory -isostasist -isostasy -isostatic -isostatical -isostatically -isostemonous -isostemony -isostere -isosteric -isosterism -isostrychnine -isosuccinic -isosulphide -isosulphocyanate -isosulphocyanic -isosultam -isotac -isoteles -isotely -isotheral -isothere -isotherm -isothermal -isothermally -isothermic -isothermical -isothermobath -isothermobathic -isothermous -isotherombrose -isothiocyanates -isothiocyanic -isothiocyano -isothujone -isotimal -isotome -isotomous -isotonia -isotonic -isotonicity -isotony -isotope -isotopic -isotopism -isotopy -isotrehalose -Isotria -isotrimorphic -isotrimorphism -isotrimorphous -isotron -isotrope -isotropic -isotropism -isotropous -isotropy -isotype -isotypic -isotypical -isovalerate -isovalerianate -isovalerianic -isovaleric -isovalerone -isovaline -isovanillic -isovoluminal -isoxanthine -isoxazine -isoxazole -isoxime -isoxylene -isoyohimbine -isozooid -ispaghul -ispravnik -Israel -Israeli -Israelite -Israeliteship -Israelitic -Israelitish -Israelitism -Israelitize -issanguila -Issedoi -Issedones -issei -issite -issuable -issuably -issuance -issuant -issue -issueless -issuer -issuing -ist -isthmi -Isthmia -isthmial -isthmian -isthmiate -isthmic -isthmoid -isthmus -istiophorid -Istiophoridae -Istiophorus -istle -istoke -Istrian -Istvaeones -isuret -isuretine -Isuridae -isuroid -Isurus -Iswara -it -Ita -itabirite -itacism -itacist -itacistic -itacolumite -itaconate -itaconic -Itala -Itali -Italian -Italianate -Italianately -Italianation -Italianesque -Italianish -Italianism -Italianist -Italianity -Italianization -Italianize -Italianizer -Italianly -Italic -Italical -Italically -Italican -Italicanist -Italici -Italicism -italicization -italicize -italics -Italiote -italite -Italomania -Italon -Italophile -itamalate -itamalic -itatartaric -itatartrate -Itaves -itch -itchiness -itching -itchingly -itchless -itchproof -itchreed -itchweed -itchy -itcze -Itea -Iteaceae -Itelmes -item -iteming -itemization -itemize -itemizer -itemy -Iten -Itenean -iter -iterable -iterance -iterancy -iterant -iterate -iteration -iterative -iteratively -iterativeness -Ithaca -Ithacan -Ithacensian -ithagine -Ithaginis -ither -Ithiel -ithomiid -Ithomiidae -Ithomiinae -ithyphallic -Ithyphallus -ithyphyllous -itineracy -itinerancy -itinerant -itinerantly -itinerarian -Itinerarium -itinerary -itinerate -itineration -itmo -Ito -Itoism -Itoist -Itoland -Itonama -Itonaman -Itonia -itonidid -Itonididae -itoubou -its -itself -Ituraean -iturite -Itylus -Itys -Itza -itzebu -iva -Ivan -ivied -ivin -ivoried -ivorine -ivoriness -ivorist -ivory -ivorylike -ivorytype -ivorywood -ivy -ivybells -ivyberry -ivyflower -ivylike -ivyweed -ivywood -ivywort -iwa -iwaiwa -iwis -Ixia -Ixiaceae -Ixiama -Ixil -Ixion -Ixionian -Ixodes -ixodian -ixodic -ixodid -Ixodidae -Ixora -iyo -Izar -izar -izard -Izcateco -Izchak -Izdubar -izle -izote -iztle -Izumi -izzard -Izzy -J -j -Jaalin -jab -Jabarite -jabbed -jabber -jabberer -jabbering -jabberingly -jabberment -Jabberwock -jabberwockian -Jabberwocky -jabbing -jabbingly -jabble -jabers -jabia -jabiru -jaborandi -jaborine -jabot -jaboticaba -jabul -jacal -Jacaltec -Jacalteca -jacamar -Jacamaralcyon -jacameropine -Jacamerops -jacami -jacamin -Jacana -jacana -Jacanidae -Jacaranda -jacare -jacate -jacchus -jacent -jacinth -jacinthe -Jack -jack -jackal -jackanapes -jackanapish -jackaroo -jackass -jackassery -jackassification -jackassism -jackassness -jackbird -jackbox -jackboy -jackdaw -jackeen -jacker -jacket -jacketed -jacketing -jacketless -jacketwise -jackety -jackfish -jackhammer -jackknife -jackleg -jackman -jacko -jackpudding -jackpuddinghood -jackrod -jacksaw -jackscrew -jackshaft -jackshay -jacksnipe -Jackson -Jacksonia -Jacksonian -Jacksonite -jackstay -jackstone -jackstraw -jacktan -jackweed -jackwood -Jacky -Jackye -Jacob -jacobaea -jacobaean -Jacobean -Jacobian -Jacobic -Jacobin -Jacobinia -Jacobinic -Jacobinical -Jacobinically -Jacobinism -Jacobinization -Jacobinize -Jacobite -Jacobitely -Jacobitiana -Jacobitic -Jacobitical -Jacobitically -Jacobitish -Jacobitishly -Jacobitism -jacobsite -Jacobson -jacobus -jacoby -jaconet -Jacqueminot -Jacques -jactance -jactancy -jactant -jactation -jactitate -jactitation -jacu -jacuaru -jaculate -jaculation -jaculative -jaculator -jaculatorial -jaculatory -jaculiferous -Jacunda -jacutinga -jadder -jade -jaded -jadedly -jadedness -jadeite -jadery -jadesheen -jadeship -jadestone -jadish -jadishly -jadishness -jady -jaeger -jag -Jaga -Jagannath -Jagannatha -jagat -Jagatai -Jagataic -Jagath -jager -jagged -jaggedly -jaggedness -jagger -jaggery -jaggy -jagir -jagirdar -jagla -jagless -jagong -jagrata -jagua -jaguar -jaguarete -Jahve -Jahvist -Jahvistic -jail -jailage -jailbird -jaildom -jailer -jaileress -jailering -jailership -jailhouse -jailish -jailkeeper -jaillike -jailmate -jailward -jailyard -Jaime -Jain -Jaina -Jainism -Jainist -Jaipuri -jajman -Jake -jake -jakes -jako -Jakob -Jakun -Jalalaean -jalap -jalapa -jalapin -jalkar -jalloped -jalopy -jalouse -jalousie -jalousied -jalpaite -Jam -jam -jama -Jamaica -Jamaican -jaman -jamb -jambalaya -jambeau -jambo -jambolan -jambone -jambool -jamboree -Jambos -jambosa -jambstone -jamdani -James -Jamesian -Jamesina -jamesonite -jami -Jamie -jamlike -jammedness -jammer -jammy -Jamnia -jampan -jampani -jamrosade -jamwood -Jan -janapa -janapan -Jane -jane -Janet -jangada -Janghey -jangkar -jangle -jangler -jangly -Janice -janiceps -Janiculan -Janiculum -Janiform -janissary -janitor -janitorial -janitorship -janitress -janitrix -Janizarian -Janizary -jank -janker -jann -jannock -Janos -Jansenism -Jansenist -Jansenistic -Jansenistical -Jansenize -Janthina -Janthinidae -jantu -janua -Januarius -January -Janus -Januslike -jaob -Jap -jap -japaconine -japaconitine -Japan -japan -Japanee -Japanese -Japanesque -Japanesquely -Japanesquery -Japanesy -Japanicize -Japanism -Japanization -Japanize -japanned -Japanner -japanner -japannery -Japannish -Japanolatry -Japanologist -Japanology -Japanophile -Japanophobe -Japanophobia -jape -japer -japery -Japetus -Japheth -Japhetic -Japhetide -Japhetite -japing -japingly -japish -japishly -japishness -Japonic -japonica -Japonically -Japonicize -Japonism -Japonize -Japonizer -Japygidae -japygoid -Japyx -Jaqueline -Jaquesian -jaquima -jar -jara -jaragua -jararaca -jararacussu -jarbird -jarble -jarbot -jardiniere -Jared -jarfly -jarful -jarg -jargon -jargonal -jargoneer -jargonelle -jargoner -jargonesque -jargonic -jargonish -jargonist -jargonistic -jargonium -jargonization -jargonize -jarkman -Jarl -jarl -jarldom -jarless -jarlship -Jarmo -jarnut -jarool -jarosite -jarra -jarrah -jarring -jarringly -jarringness -jarry -jarvey -Jarvis -jasey -jaseyed -Jasione -Jasminaceae -jasmine -jasmined -jasminewood -Jasminum -jasmone -Jason -jaspachate -jaspagate -Jasper -jasper -jasperated -jaspered -jasperize -jasperoid -jaspery -jaspidean -jaspideous -jaspilite -jaspis -jaspoid -jasponyx -jaspopal -jass -jassid -Jassidae -jassoid -Jat -jatamansi -Jateorhiza -jateorhizine -jatha -jati -Jatki -Jatni -jato -Jatropha -jatrophic -jatrorrhizine -Jatulian -jaudie -jauk -jaun -jaunce -jaunder -jaundice -jaundiceroot -jaunt -jauntie -jauntily -jauntiness -jauntingly -jaunty -jaup -Java -Javahai -javali -Javan -Javanee -Javanese -javelin -javelina -javeline -javelineer -javer -Javitero -jaw -jawab -jawbation -jawbone -jawbreaker -jawbreaking -jawbreakingly -jawed -jawfall -jawfallen -jawfish -jawfoot -jawfooted -jawless -jawsmith -jawy -Jay -jay -Jayant -Jayesh -jayhawk -jayhawker -jaypie -jaywalk -jaywalker -jazerant -Jazyges -jazz -jazzer -jazzily -jazziness -jazzy -jealous -jealously -jealousness -jealousy -Jeames -Jean -jean -Jean-Christophe -Jean-Pierre -Jeanette -Jeanie -Jeanne -Jeannette -Jeannie -Jeanpaulia -jeans -Jeany -Jebus -Jebusi -Jebusite -Jebusitic -Jebusitical -Jebusitish -jecoral -jecorin -jecorize -jed -jedcock -jedding -jeddock -jeel -jeep -jeer -jeerer -jeering -jeeringly -jeerproof -jeery -jeewhillijers -jeewhillikens -Jef -Jeff -jeff -jefferisite -Jeffersonia -Jeffersonian -Jeffersonianism -jeffersonite -Jeffery -Jeffie -Jeffrey -Jehovah -Jehovic -Jehovism -Jehovist -Jehovistic -jehu -jehup -jejunal -jejunator -jejune -jejunely -jejuneness -jejunitis -jejunity -jejunoduodenal -jejunoileitis -jejunostomy -jejunotomy -jejunum -jelab -jelerang -jelick -jell -jellica -jellico -jellied -jelliedness -jellification -jellify -jellily -jelloid -jelly -jellydom -jellyfish -jellyleaf -jellylike -Jelske -jelutong -Jem -jemadar -Jemez -Jemima -jemmily -jemminess -Jemmy -jemmy -Jenine -jenkin -jenna -jennerization -jennerize -jennet -jenneting -Jennie -jennier -Jennifer -Jenny -jenny -Jenson -jentacular -jeofail -jeopard -jeoparder -jeopardize -jeopardous -jeopardously -jeopardousness -jeopardy -jequirity -Jerahmeel -Jerahmeelites -Jerald -jerboa -jereed -jeremejevite -jeremiad -Jeremiah -Jeremian -Jeremianic -Jeremias -Jeremy -jerez -jerib -jerk -jerker -jerkily -jerkin -jerkined -jerkiness -jerkingly -jerkish -jerksome -jerkwater -jerky -jerl -jerm -jermonal -Jeroboam -Jerome -Jeromian -Jeronymite -jerque -jerquer -Jerrie -Jerry -jerry -jerryism -Jersey -jersey -Jerseyan -jerseyed -Jerseyite -Jerseyman -jert -Jerusalem -jervia -jervina -jervine -Jesper -Jess -jess -jessakeed -jessamine -jessamy -jessant -Jesse -Jessean -jessed -Jessica -Jessie -jessur -jest -jestbook -jestee -jester -jestful -jesting -jestingly -jestingstock -jestmonger -jestproof -jestwise -jestword -Jesu -Jesuate -Jesuit -Jesuited -Jesuitess -Jesuitic -Jesuitical -Jesuitically -Jesuitish -Jesuitism -Jesuitist -Jesuitize -Jesuitocracy -Jesuitry -Jesus -jet -jetbead -jete -Jethro -Jethronian -jetsam -jettage -jetted -jetter -jettied -jettiness -jettingly -jettison -jetton -jetty -jettyhead -jettywise -jetware -Jew -jewbird -jewbush -Jewdom -jewel -jeweler -jewelhouse -jeweling -jewelless -jewellike -jewelry -jewelsmith -jewelweed -jewely -Jewess -jewfish -Jewhood -Jewish -Jewishly -Jewishness -Jewism -Jewless -Jewlike -Jewling -Jewry -Jewship -Jewstone -Jewy -jezail -Jezebel -Jezebelian -Jezebelish -jezekite -jeziah -Jezreelite -jharal -jheel -jhool -jhow -Jhuria -Ji -Jianyun -jib -jibbah -jibber -jibbings -jibby -jibe -jibhead -jibi -jibman -jiboa -jibstay -jicama -Jicaque -Jicaquean -jicara -Jicarilla -jiff -jiffle -jiffy -jig -jigamaree -jigger -jiggerer -jiggerman -jiggers -jigget -jiggety -jigginess -jiggish -jiggle -jiggly -jiggumbob -jiggy -jiglike -jigman -jihad -jikungu -Jill -jillet -jillflirt -jilt -jiltee -jilter -jiltish -Jim -jimbang -jimberjaw -jimberjawed -jimjam -Jimmy -jimmy -jimp -jimply -jimpness -jimpricute -jimsedge -Jin -jina -jincamas -Jincan -Jinchao -jing -jingal -Jingbai -jingbang -jingle -jingled -jinglejangle -jingler -jinglet -jingling -jinglingly -jingly -jingo -jingodom -jingoish -jingoism -jingoist -jingoistic -jinja -jinjili -jink -jinker -jinket -jinkle -jinks -jinn -jinnestan -jinni -jinniwink -jinniyeh -Jinny -jinny -jinriki -jinrikiman -jinrikisha -jinshang -jinx -jipijapa -jipper -jiqui -jirble -jirga -Jiri -jirkinet -Jisheng -Jitendra -jiti -jitneur -jitneuse -jitney -jitneyman -jitro -jitter -jitterbug -jitters -jittery -jiva -Jivaran -Jivaro -Jivaroan -jive -jixie -Jo -jo -Joachim -Joachimite -Joan -Joanna -Joanne -Joannite -joaquinite -Job -job -jobade -jobarbe -jobation -jobber -jobbernowl -jobbernowlism -jobbery -jobbet -jobbing -jobbish -jobble -jobholder -jobless -joblessness -jobman -jobmaster -jobmistress -jobmonger -jobo -jobsmith -Jocasta -Jocelin -Joceline -Jocelyn -joch -Jochen -Jock -jock -jocker -jockey -jockeydom -jockeyish -jockeyism -jockeylike -jockeyship -jocko -jockteleg -jocoque -jocose -jocosely -jocoseness -jocoseriosity -jocoserious -jocosity -jocote -jocu -jocular -jocularity -jocularly -jocularness -joculator -jocum -jocuma -jocund -jocundity -jocundly -jocundness -jodel -jodelr -jodhpurs -Jodo -Joe -joe -joebush -Joel -joewood -Joey -joey -jog -jogger -joggle -joggler -jogglety -jogglework -joggly -jogtrottism -Johan -Johann -Johanna -Johannean -Johannes -johannes -Johannine -Johannisberger -Johannist -Johannite -johannite -John -Johnadreams -Johnathan -Johnian -johnin -Johnnie -Johnny -johnnycake -johnnydom -Johnsmas -Johnsonese -Johnsonian -Johnsoniana -Johnsonianism -Johnsonianly -Johnsonism -johnstrupite -join -joinable -joinant -joinder -joiner -joinery -joining -joiningly -joint -jointage -jointed -jointedly -jointedness -jointer -jointing -jointist -jointless -jointly -jointress -jointure -jointureless -jointuress -jointweed -jointworm -jointy -joist -joisting -joistless -jojoba -joke -jokeless -jokelet -jokeproof -joker -jokesmith -jokesome -jokesomeness -jokester -jokingly -jokish -jokist -jokul -joky -joll -jolleyman -jollier -jollification -jollify -jollily -jolliness -jollity -jollop -jolloped -jolly -jollytail -Joloano -jolt -jolter -jolterhead -jolterheaded -jolterheadedness -jolthead -joltiness -jolting -joltingly -joltless -joltproof -jolty -Jon -Jonah -Jonahesque -Jonahism -Jonas -Jonathan -Jonathanization -Jones -Jonesian -Jong -jonglery -jongleur -Joni -jonque -jonquil -jonquille -Jonsonian -Jonval -jonvalization -jonvalize -jookerie -joola -joom -Joon -Jophiel -Jordan -jordan -Jordanian -jordanite -joree -Jorge -Jorist -jorum -Jos -Jose -josefite -joseite -Joseph -Josepha -Josephine -Josephinism -josephinite -Josephism -Josephite -Josh -josh -josher -joshi -Joshua -Josiah -josie -Josip -joskin -joss -jossakeed -josser -jostle -jostlement -jostler -jot -jota -jotation -jotisi -Jotnian -jotter -jotting -jotty -joubarb -Joubert -joug -jough -jouk -joukerypawkery -joule -joulean -joulemeter -jounce -journal -journalese -journalish -journalism -journalist -journalistic -journalistically -journalization -journalize -journalizer -journey -journeycake -journeyer -journeying -journeyman -journeywoman -journeywork -journeyworker -jours -joust -jouster -Jova -Jove -Jovial -jovial -jovialist -jovialistic -joviality -jovialize -jovially -jovialness -jovialty -Jovian -Jovianly -Jovicentric -Jovicentrical -Jovicentrically -jovilabe -Joviniamish -Jovinian -Jovinianist -Jovite -jow -jowar -jowari -jowel -jower -jowery -jowl -jowler -jowlish -jowlop -jowly -jowpy -jowser -jowter -joy -joyance -joyancy -joyant -Joyce -joyful -joyfully -joyfulness -joyhop -joyleaf -joyless -joylessly -joylessness -joylet -joyous -joyously -joyousness -joyproof -joysome -joyweed -Jozy -Ju -Juan -Juang -juba -jubate -jubbah -jubbe -jube -juberous -jubilance -jubilancy -jubilant -jubilantly -jubilarian -jubilate -jubilatio -jubilation -jubilatory -jubilean -jubilee -jubilist -jubilization -jubilize -jubilus -juck -juckies -Jucuna -jucundity -jud -Judaeomancy -Judaeophile -Judaeophilism -Judaeophobe -Judaeophobia -Judah -Judahite -Judaic -Judaica -Judaical -Judaically -Judaism -Judaist -Judaistic -Judaistically -Judaization -Judaize -Judaizer -Judas -Judaslike -judcock -Jude -Judean -judex -Judge -judge -judgeable -judgelike -judger -judgeship -judgingly -judgmatic -judgmatical -judgmatically -judgment -Judica -judicable -judicate -judication -judicative -judicator -judicatorial -judicatory -judicature -judices -judiciable -judicial -judiciality -judicialize -judicially -judicialness -judiciarily -judiciary -judicious -judiciously -judiciousness -Judith -judo -Judophobism -Judy -Juergen -jufti -jug -Juga -jugal -jugale -Jugatae -jugate -jugated -jugation -juger -jugerum -jugful -jugger -Juggernaut -juggernaut -Juggernautish -juggins -juggle -jugglement -juggler -jugglery -juggling -jugglingly -Juglandaceae -juglandaceous -Juglandales -juglandin -Juglans -juglone -jugular -Jugulares -jugulary -jugulate -jugulum -jugum -Jugurthine -Juha -juice -juiceful -juiceless -juicily -juiciness -juicy -jujitsu -juju -jujube -jujuism -jujuist -juke -jukebox -Jule -julep -Jules -Juletta -Julia -Julian -Juliana -Juliane -Julianist -Julianto -julid -Julidae -julidan -Julie -Julien -julienite -julienne -Juliet -Julietta -julio -Julius -juloid -Juloidea -juloidian -julole -julolidin -julolidine -julolin -juloline -Julus -July -Julyflower -Jumada -Jumana -jumart -jumba -jumble -jumblement -jumbler -jumblingly -jumbly -jumbo -jumboesque -jumboism -jumbuck -jumby -jumelle -jument -jumentous -jumfru -jumillite -jumma -jump -jumpable -jumper -jumperism -jumpiness -jumpingly -jumpness -jumprock -jumpseed -jumpsome -jumpy -Jun -Juncaceae -juncaceous -Juncaginaceae -juncaginaceous -juncagineous -junciform -juncite -Junco -Juncoides -juncous -junction -junctional -junctive -juncture -Juncus -June -june -Juneberry -Junebud -junectomy -Juneflower -Jungermannia -Jungermanniaceae -jungermanniaceous -Jungermanniales -jungle -jungled -jungleside -junglewards -junglewood -jungli -jungly -juniata -junior -juniorate -juniority -juniorship -juniper -Juniperaceae -Juniperus -Junius -junk -junkboard -Junker -junker -Junkerdom -junkerdom -junkerish -Junkerism -junkerism -junket -junketer -junketing -junking -junkman -Juno -Junoesque -Junonia -Junonian -junt -junta -junto -jupati -jupe -Jupiter -jupon -Jur -Jura -jural -jurally -jurament -juramentado -juramental -juramentally -juramentum -Jurane -jurant -jurara -Jurassic -jurat -juration -jurative -jurator -juratorial -juratory -jure -jurel -Jurevis -Juri -juridic -juridical -juridically -juring -jurisconsult -jurisdiction -jurisdictional -jurisdictionalism -jurisdictionally -jurisdictive -jurisprudence -jurisprudent -jurisprudential -jurisprudentialist -jurisprudentially -jurist -juristic -juristical -juristically -juror -jurupaite -jury -juryless -juryman -jurywoman -jusquaboutisme -jusquaboutist -jussel -Jussi -Jussiaea -Jussiaean -Jussieuan -jussion -jussive -jussory -just -justen -justice -justicehood -justiceless -justicelike -justicer -justiceship -justiceweed -Justicia -justiciability -justiciable -justicial -justiciar -justiciarship -justiciary -justiciaryship -justicies -justifiability -justifiable -justifiableness -justifiably -justification -justificative -justificator -justificatory -justifier -justify -justifying -justifyingly -Justin -Justina -Justine -Justinian -Justinianian -Justinianist -justly -justment -justness -justo -Justus -jut -Jute -jute -Jutic -Jutish -jutka -Jutlander -Jutlandish -jutting -juttingly -jutty -Juturna -Juvavian -juvenal -Juvenalian -juvenate -juvenescence -juvenescent -juvenile -juvenilely -juvenileness -juvenilify -juvenilism -juvenility -juvenilize -Juventas -juventude -Juverna -juvia -juvite -juxtalittoral -juxtamarine -juxtapose -juxtaposit -juxtaposition -juxtapositional -juxtapositive -juxtapyloric -juxtaspinal -juxtaterrestrial -juxtatropical -Juyas -Juza -Jwahar -Jynginae -jyngine -Jynx -jynx -K -k -ka -Kababish -Kabaka -kabaragoya -Kabard -Kabardian -kabaya -Kabbeljaws -kabel -kaberu -kabiet -Kabirpanthi -Kabistan -Kabonga -kabuki -Kabuli -Kabyle -Kachari -Kachin -kachin -Kadaga -Kadarite -kadaya -Kadayan -Kaddish -kadein -kadikane -kadischi -Kadmi -kados -Kadu -kaempferol -Kaf -Kafa -kaferita -Kaffir -kaffir -kaffiyeh -Kaffraria -Kaffrarian -Kafir -kafir -Kafiri -kafirin -kafiz -Kafka -Kafkaesque -kafta -kago -kagu -kaha -kahar -kahau -kahikatea -kahili -kahu -kahuna -kai -Kaibab -Kaibartha -kaid -kaik -kaikara -kaikawaka -kail -kailyard -kailyarder -kailyardism -Kaimo -Kainah -kainga -kainite -kainsi -kainyn -kairine -kairoline -kaiser -kaiserdom -kaiserism -kaisership -kaitaka -Kaithi -kaiwhiria -kaiwi -Kaj -Kajar -kajawah -kajugaru -kaka -Kakan -kakapo -kakar -kakarali -kakariki -Kakatoe -Kakatoidae -kakawahie -kaki -kakidrosis -kakistocracy -kakkak -kakke -kakortokite -kala -kaladana -kalamalo -kalamansanai -Kalamian -Kalanchoe -Kalandariyah -Kalang -Kalapooian -kalashnikov -kalasie -Kaldani -kale -kaleidophon -kaleidophone -kaleidoscope -kaleidoscopic -kaleidoscopical -kaleidoscopically -Kalekah -kalema -Kalendae -kalends -kalewife -kaleyard -kali -kalian -Kaliana -kaliborite -kalidium -kaliform -kaligenous -Kalinga -kalinite -kaliophilite -kalipaya -Kalispel -kalium -kallah -kallege -kallilite -Kallima -kallitype -Kalmarian -Kalmia -Kalmuck -kalo -kalogeros -kalokagathia -kalon -kalong -kalpis -kalsomine -kalsominer -kalumpang -kalumpit -Kalwar -kalymmaukion -kalymmocyte -kamachile -kamacite -kamahi -kamala -kamaloka -kamansi -kamao -Kamares -kamarezite -kamarupa -kamarupic -kamas -Kamasin -Kamass -kamassi -Kamba -kambal -kamboh -Kamchadal -Kamchatkan -kame -kameeldoorn -kameelthorn -Kamel -kamelaukion -kamerad -kamias -kamichi -kamik -kamikaze -Kamiya -kammalan -kammererite -kamperite -kampong -kamptomorph -kan -kana -kanae -kanagi -Kanaka -kanap -kanara -Kanarese -kanari -kanat -Kanauji -Kanawari -Kanawha -kanchil -kande -Kandelia -kandol -kaneh -kanephore -kanephoros -Kaneshite -Kanesian -kang -kanga -kangani -kangaroo -kangarooer -Kangli -Kanji -Kankanai -kankie -kannume -kanoon -Kanred -kans -Kansa -Kansan -kantele -kanteletar -kanten -Kanthan -Kantian -Kantianism -Kantism -Kantist -Kanuri -Kanwar -kaoliang -kaolin -kaolinate -kaolinic -kaolinite -kaolinization -kaolinize -kapa -kapai -kapeika -kapok -kapp -kappa -kappe -kappland -kapur -kaput -Karabagh -karagan -Karaism -Karaite -Karaitism -karaka -Karakatchan -Karakul -karakul -Karamojo -karamu -karaoke -Karatas -karate -Karaya -karaya -karbi -karch -kareao -kareeta -Karel -karela -Karelian -Karen -Karharbari -Kari -karite -Karl -Karling -Karluk -karma -Karmathian -karmic -karmouth -karo -kaross -karou -karree -karri -Karroo -karroo -karrusel -karsha -Karshuni -Karst -karst -karstenite -karstic -kartel -Karthli -kartometer -kartos -Kartvel -Kartvelian -karwar -Karwinskia -karyaster -karyenchyma -karyochrome -karyochylema -karyogamic -karyogamy -karyokinesis -karyokinetic -karyologic -karyological -karyologically -karyology -karyolymph -Karyolysidae -karyolysis -Karyolysus -karyolytic -karyomere -karyomerite -karyomicrosome -karyomitoic -karyomitome -karyomiton -karyomitosis -karyomitotic -karyon -karyoplasm -karyoplasma -karyoplasmatic -karyoplasmic -karyopyknosis -karyorrhexis -karyoschisis -karyosome -karyotin -karyotype -kasa -kasbah -kasbeke -kascamiol -Kasha -Kashan -kasher -kashga -kashi -kashima -Kashmiri -Kashmirian -Kashoubish -kashruth -Kashube -Kashubian -Kashyapa -kasida -Kasikumuk -Kaska -Kaskaskia -kasm -kasolite -kassabah -Kassak -Kassite -kassu -kastura -Kasubian -kat -Katabanian -katabasis -katabatic -katabella -katabolic -katabolically -katabolism -katabolite -katabolize -katabothron -katachromasis -katacrotic -katacrotism -katagenesis -katagenetic -katakana -katakinesis -katakinetic -katakinetomer -katakinetomeric -katakiribori -katalase -katalysis -katalyst -katalytic -katalyze -katamorphism -kataphoresis -kataphoretic -kataphoric -kataphrenia -kataplasia -kataplectic -kataplexy -katar -katastate -katastatic -katathermometer -katatonia -katatonic -katatype -katchung -katcina -Kate -kath -Katha -katha -kathal -Katharina -Katharine -katharometer -katharsis -kathartic -kathemoglobin -kathenotheism -Kathleen -kathodic -Kathopanishad -Kathryn -Kathy -Katie -Katik -Katinka -katipo -Katipunan -Katipuneros -katmon -katogle -Katrine -Katrinka -katsup -Katsuwonidae -katuka -Katukina -katun -katurai -Katy -katydid -Kauravas -kauri -kava -kavaic -kavass -Kavi -Kaw -kawaka -Kawchodinne -kawika -Kay -kay -kayak -kayaker -Kayan -Kayasth -Kayastha -kayles -kayo -Kayvan -Kazak -kazi -kazoo -Kazuhiro -kea -keach -keacorn -Keatsian -keawe -keb -kebab -kebbie -kebbuck -kechel -keck -keckle -keckling -kecksy -kecky -ked -Kedar -Kedarite -keddah -kedge -kedger -kedgeree -kedlock -Kedushshah -Kee -keech -keek -keeker -keel -keelage -keelbill -keelblock -keelboat -keelboatman -keeled -keeler -keelfat -keelhale -keelhaul -keelie -keeling -keelivine -keelless -keelman -keelrake -keelson -keen -keena -keened -keener -keenly -keenness -keep -keepable -keeper -keeperess -keepering -keeperless -keepership -keeping -keepsake -keepsaky -keepworthy -keerogue -Kees -keeshond -keest -keet -keeve -Keewatin -kef -keffel -kefir -kefiric -Kefti -Keftian -Keftiu -keg -kegler -kehaya -kehillah -kehoeite -Keid -keilhauite -keita -Keith -keitloa -Kekchi -kekotene -kekuna -kelchin -keld -Kele -kele -kelebe -kelectome -keleh -kelek -kelep -Kelima -kelk -kell -kella -kellion -kellupweed -Kelly -kelly -keloid -keloidal -kelp -kelper -kelpfish -kelpie -kelpware -kelpwort -kelpy -kelt -kelter -Keltoi -kelty -Kelvin -kelvin -kelyphite -Kemal -Kemalism -Kemalist -kemb -kemp -kemperyman -kempite -kemple -kempster -kempt -kempy -Ken -ken -kenaf -Kenai -kenareh -kench -kend -kendir -kendyr -Kenelm -Kenipsim -kenlore -kenmark -Kenn -Kennebec -kennebecker -kennebunker -Kennedya -kennel -kennelly -kennelman -kenner -Kenneth -kenning -kenningwort -kenno -keno -kenogenesis -kenogenetic -kenogenetically -kenogeny -kenosis -kenotic -kenoticism -kenoticist -kenotism -kenotist -kenotoxin -kenotron -Kenseikai -kensington -Kensitite -kenspac -kenspeck -kenspeckle -Kent -kent -kentallenite -Kentia -Kenticism -Kentish -Kentishman -kentledge -Kenton -kentrogon -kentrolite -Kentuckian -Kentucky -kenyte -kep -kepi -Keplerian -kept -Ker -keracele -keralite -kerana -keraphyllocele -keraphyllous -kerasin -kerasine -kerat -keratalgia -keratectasia -keratectomy -Keraterpeton -keratin -keratinization -keratinize -keratinoid -keratinose -keratinous -keratitis -keratoangioma -keratocele -keratocentesis -keratoconjunctivitis -keratoconus -keratocricoid -keratode -keratodermia -keratogenic -keratogenous -keratoglobus -keratoglossus -keratohelcosis -keratohyal -keratoid -Keratoidea -keratoiritis -Keratol -keratoleukoma -keratolysis -keratolytic -keratoma -keratomalacia -keratome -keratometer -keratometry -keratomycosis -keratoncus -keratonosus -keratonyxis -keratophyre -keratoplastic -keratoplasty -keratorrhexis -keratoscope -keratoscopy -keratose -keratosis -keratotome -keratotomy -keratto -keraulophon -keraulophone -Keraunia -keraunion -keraunograph -keraunographic -keraunography -keraunophone -keraunophonic -keraunoscopia -keraunoscopy -kerbstone -kerchief -kerchiefed -kerchoo -kerchug -kerchunk -kerectomy -kerel -Keres -Keresan -Kerewa -kerf -kerflap -kerflop -kerflummox -Kerite -Kermanji -Kermanshah -kermes -kermesic -kermesite -kermis -kern -kernel -kerneled -kernelless -kernelly -kerner -kernetty -kernish -kernite -kernos -kerogen -kerosene -kerplunk -Kerri -Kerria -kerrie -kerrikerri -kerril -kerrite -Kerry -kerry -kersantite -kersey -kerseymere -kerslam -kerslosh -kersmash -kerugma -kerwham -kerygma -kerygmatic -kerykeion -kerystic -kerystics -Keryx -kesslerman -kestrel -ket -keta -ketal -ketapang -ketazine -ketch -ketchcraft -ketchup -ketembilla -keten -ketene -ketimide -ketimine -ketipate -ketipic -keto -ketogen -ketogenesis -ketogenic -ketoheptose -ketohexose -ketoketene -ketol -ketole -ketolysis -ketolytic -ketone -ketonemia -ketonic -ketonimid -ketonimide -ketonimin -ketonimine -ketonization -ketonize -ketonuria -ketose -ketoside -ketosis -ketosuccinic -ketoxime -kette -ketting -kettle -kettlecase -kettledrum -kettledrummer -kettleful -kettlemaker -kettlemaking -kettler -ketty -Ketu -ketuba -ketupa -ketyl -keup -Keuper -keurboom -kevalin -Kevan -kevel -kevelhead -Kevin -kevutzah -Kevyn -Keweenawan -keweenawite -kewpie -kex -kexy -key -keyage -keyboard -keyed -keyhole -keyless -keylet -keylock -Keynesian -Keynesianism -keynote -keynoter -keyseater -keyserlick -keysmith -keystone -keystoned -Keystoner -keyway -Kha -khaddar -khadi -khagiarite -khahoon -khaiki -khair -khaja -khajur -khakanship -khaki -khakied -Khaldian -khalifa -Khalifat -Khalkha -khalsa -Khami -khamsin -Khamti -khan -khanate -khanda -khandait -khanjar -khanjee -khankah -khansamah -khanum -khar -kharaj -Kharia -Kharijite -Kharoshthi -kharouba -kharroubah -Khartoumer -kharua -Kharwar -Khasa -Khasi -khass -khat -khatib -khatri -Khatti -Khattish -Khaya -Khazar -Khazarian -khediva -khedival -khedivate -khedive -khediviah -khedivial -khediviate -khepesh -Kherwari -Kherwarian -khet -Khevzur -khidmatgar -Khila -khilat -khir -khirka -Khitan -Khivan -Khlysti -Khmer -Khoja -khoja -khoka -Khokani -Khond -Khorassan -khot -Khotan -Khotana -Khowar -khu -Khuai -khubber -khula -khuskhus -Khussak -khutbah -khutuktu -Khuzi -khvat -Khwarazmian -kiack -kiaki -kialee -kiang -Kiangan -kiaugh -kibber -kibble -kibbler -kibblerman -kibe -kibei -kibitka -kibitz -kibitzer -kiblah -kibosh -kiby -kick -kickable -Kickapoo -kickback -kickee -kicker -kicking -kickish -kickless -kickoff -kickout -kickseys -kickshaw -kickup -Kidder -kidder -Kidderminster -kiddier -kiddish -kiddush -kiddushin -kiddy -kidhood -kidlet -kidling -kidnap -kidnapee -kidnaper -kidney -kidneyroot -kidneywort -Kids -kidskin -kidsman -kiefekil -Kieffer -kiekie -kiel -kier -Kieran -kieselguhr -kieserite -kiestless -kieye -Kiho -kikar -Kikatsik -kikawaeo -kike -Kiki -kiki -Kikki -Kikongo -kiku -kikuel -kikumon -Kikuyu -kil -kiladja -kilah -kilampere -kilan -kilbrickenite -kildee -kilderkin -kileh -kilerg -kiley -Kilhamite -kilhig -kiliare -kilim -kill -killable -killadar -Killarney -killas -killcalf -killcrop -killcu -killdeer -killeekillee -killeen -killer -killick -killifish -killing -killingly -killingness -killinite -killogie -killweed -killwort -killy -Kilmarnock -kiln -kilneye -kilnhole -kilnman -kilnrib -kilo -kiloampere -kilobar -kilocalorie -kilocycle -kilodyne -kilogauss -kilogram -kilojoule -kiloliter -kilolumen -kilometer -kilometrage -kilometric -kilometrical -kiloparsec -kilostere -kiloton -kilovar -kilovolt -kilowatt -kilp -kilt -kilter -kiltie -kilting -Kiluba -Kim -kim -kimbang -kimberlin -kimberlite -Kimberly -Kimbundu -Kimeridgian -kimigayo -Kimmo -kimnel -kimono -kimonoed -kin -kina -kinaesthesia -kinaesthesis -kinah -kinase -kinbote -Kinch -kinch -kinchin -kinchinmort -kincob -kind -kindergarten -kindergartener -kindergartening -kindergartner -Kinderhook -kindheart -kindhearted -kindheartedly -kindheartedness -kindle -kindler -kindlesome -kindlily -kindliness -kindling -kindly -kindness -kindred -kindredless -kindredly -kindredness -kindredship -kinematic -kinematical -kinematically -kinematics -kinematograph -kinemometer -kineplasty -kinepox -kinesalgia -kinescope -kinesiatric -kinesiatrics -kinesic -kinesics -kinesimeter -kinesiologic -kinesiological -kinesiology -kinesiometer -kinesis -kinesitherapy -kinesodic -kinesthesia -kinesthesis -kinesthetic -kinetic -kinetical -kinetically -kinetics -kinetochore -kinetogenesis -kinetogenetic -kinetogenetically -kinetogenic -kinetogram -kinetograph -kinetographer -kinetographic -kinetography -kinetomer -kinetomeric -kinetonema -kinetonucleus -kinetophone -kinetophonograph -kinetoplast -kinetoscope -kinetoscopic -King -king -kingbird -kingbolt -kingcob -kingcraft -kingcup -kingdom -kingdomed -kingdomful -kingdomless -kingdomship -kingfish -kingfisher -kinghead -kinghood -kinghunter -kingless -kinglessness -kinglet -kinglihood -kinglike -kinglily -kingliness -kingling -kingly -kingmaker -kingmaking -kingpiece -kingpin -kingrow -kingship -kingsman -Kingu -kingweed -kingwood -Kinipetu -kink -kinkable -kinkaider -kinkajou -kinkcough -kinkhab -kinkhost -kinkily -kinkiness -kinkle -kinkled -kinkly -kinksbush -kinky -kinless -kinnikinnick -kino -kinofluous -kinology -kinoplasm -kinoplasmic -Kinorhyncha -kinospore -Kinosternidae -Kinosternon -kinotannic -kinsfolk -kinship -kinsman -kinsmanly -kinsmanship -kinspeople -kinswoman -kintar -Kintyre -kioea -Kioko -kiosk -kiotome -Kiowa -Kiowan -Kioway -kip -kipage -Kipchak -kipe -Kiplingese -Kiplingism -kippeen -kipper -kipperer -kippy -kipsey -kipskin -Kiranti -Kirghiz -Kirghizean -kiri -Kirillitsa -kirimon -Kirk -kirk -kirker -kirkify -kirking -kirkinhead -kirklike -kirkman -kirktown -kirkward -kirkyard -Kirman -kirmew -kirn -kirombo -kirsch -Kirsten -Kirsty -kirtle -kirtled -Kirundi -kirve -kirver -kischen -kish -Kishambala -kishen -kishon -kishy -kiskatom -Kislev -kismet -kismetic -kisra -kiss -kissability -kissable -kissableness -kissage -kissar -kisser -kissing -kissingly -kissproof -kisswise -kissy -kist -kistful -kiswa -Kiswahili -Kit -kit -kitab -kitabis -Kitalpha -Kitamat -Kitan -kitar -kitcat -kitchen -kitchendom -kitchener -kitchenette -kitchenful -kitchenless -kitchenmaid -kitchenman -kitchenry -kitchenward -kitchenwards -kitchenware -kitchenwife -kitcheny -kite -kiteflier -kiteflying -kith -kithe -kithless -kitish -Kitkahaxki -Kitkehahki -kitling -Kitlope -Kittatinny -kittel -kitten -kittendom -kittenhearted -kittenhood -kittenish -kittenishly -kittenishness -kittenless -kittenship -kitter -kittereen -kitthoge -kittiwake -kittle -kittlepins -kittles -kittlish -kittly -kittock -kittul -Kitty -kitty -kittysol -Kitunahan -kiva -kiver -kivikivi -kivu -Kiwai -Kiwanian -Kiwanis -kiwi -kiwikiwi -kiyas -kiyi -Kizil -Kizilbash -Kjeldahl -kjeldahlization -kjeldahlize -klafter -klaftern -klam -Klamath -Klan -Klanism -Klansman -Klanswoman -klaprotholite -Klaskino -Klaudia -Klaus -klavern -Klaxon -klaxon -Klebsiella -kleeneboc -Kleinian -Kleistian -klendusic -klendusity -klendusive -klepht -klephtic -klephtism -kleptic -kleptistic -kleptomania -kleptomaniac -kleptomanist -kleptophobia -klicket -Klikitat -Kling -Klingsor -klip -klipbok -klipdachs -klipdas -klipfish -klippe -klippen -klipspringer -klister -klockmannite -klom -Klondike -Klondiker -klootchman -klop -klops -klosh -Kluxer -klystron -kmet -knab -knabble -knack -knackebrod -knacker -knackery -knacky -knag -knagged -knaggy -knap -knapbottle -knape -knappan -Knapper -knapper -knappish -knappishly -knapsack -knapsacked -knapsacking -knapweed -knar -knark -knarred -knarry -Knautia -knave -knavery -knaveship -knavess -knavish -knavishly -knavishness -knawel -knead -kneadability -kneadable -kneader -kneading -kneadingly -knebelite -knee -kneebrush -kneecap -kneed -kneehole -kneel -kneeler -kneelet -kneeling -kneelingly -kneepad -kneepan -kneepiece -kneestone -Kneiffia -Kneippism -knell -knelt -Knesset -knet -knew -knez -knezi -kniaz -kniazi -knick -knicker -Knickerbocker -knickerbockered -knickerbockers -knickered -knickers -knickknack -knickknackatory -knickknacked -knickknackery -knickknacket -knickknackish -knickknacky -knickpoint -knife -knifeboard -knifeful -knifeless -knifelike -knifeman -knifeproof -knifer -knifesmith -knifeway -knight -knightage -knightess -knighthead -knighthood -Knightia -knightless -knightlihood -knightlike -knightliness -knightling -knightly -knightship -knightswort -Kniphofia -Knisteneaux -knit -knitback -knitch -knitted -knitter -knitting -knittle -knitwear -knitweed -knitwork -knived -knivey -knob -knobbed -knobber -knobbiness -knobble -knobbler -knobbly -knobby -knobkerrie -knoblike -knobstick -knobstone -knobular -knobweed -knobwood -knock -knockabout -knockdown -knockemdown -knocker -knocking -knockless -knockoff -knockout -knockstone -knockup -knoll -knoller -knolly -knop -knopite -knopped -knopper -knoppy -knopweed -knorhaan -Knorria -knosp -knosped -Knossian -knot -knotberry -knotgrass -knothole -knothorn -knotless -knotlike -knotroot -knotted -knotter -knottily -knottiness -knotting -knotty -knotweed -knotwork -knotwort -knout -know -knowability -knowable -knowableness -knowe -knower -knowing -knowingly -knowingness -knowledge -knowledgeable -knowledgeableness -knowledgeably -knowledged -knowledgeless -knowledgement -knowledging -known -knowperts -Knoxian -Knoxville -knoxvillite -knub -knubbly -knubby -knublet -knuckle -knucklebone -knuckled -knuckler -knuckling -knuckly -knuclesome -Knudsen -knur -knurl -knurled -knurling -knurly -Knut -knut -Knute -knutty -knyaz -knyazi -Ko -ko -koa -koae -koala -koali -Koasati -kob -koban -kobellite -kobi -kobird -kobold -kobong -kobu -Kobus -Koch -Kochab -Kochia -kochliarion -koda -Kodagu -Kodak -kodak -kodaker -kodakist -kodakry -Kodashim -kodro -kodurite -Koeberlinia -Koeberliniaceae -koeberliniaceous -koechlinite -Koeksotenok -koel -Koellia -Koelreuteria -koenenite -Koeri -koff -koft -koftgar -koftgari -koggelmannetje -Kogia -Kohathite -Koheleth -kohemp -Kohen -Kohistani -Kohl -kohl -Kohlan -kohlrabi -kohua -koi -Koiari -Koibal -koil -koila -koilanaglyphic -koilon -koimesis -Koine -koine -koinon -koinonia -Koipato -Koitapu -kojang -Kojiki -kokako -kokam -kokan -kokerboom -kokil -kokio -koklas -koklass -Koko -koko -kokoon -Kokoona -kokoromiko -kokowai -kokra -koksaghyz -koku -kokum -kokumin -kokumingun -Kol -kola -kolach -Kolarian -Koldaji -kolea -koleroga -kolhoz -Koli -kolinski -kolinsky -Kolis -kolkhos -kolkhoz -Kolkka -kollast -kollaster -koller -kollergang -kolo -kolobion -kolobus -kolokolo -kolsun -koltunna -koltunnor -Koluschan -Kolush -Komati -komatik -kombu -Kome -Komi -kominuter -kommetje -kommos -komondor -kompeni -Komsomol -kon -kona -konak -Konariot -Konde -Kongo -Kongoese -Kongolese -kongoni -kongsbergite -kongu -Konia -Koniaga -Koniga -konimeter -koninckite -konini -koniology -koniscope -konjak -Konkani -Konomihu -Konrad -konstantin -Konstantinos -kontakion -Konyak -kooka -kookaburra -kookeree -kookery -kookri -koolah -kooletah -kooliman -koolokamba -Koolooly -koombar -koomkie -Koorg -kootcha -Kootenay -kop -Kopagmiut -kopeck -koph -kopi -koppa -koppen -koppite -Koprino -kor -Kora -kora -koradji -Korah -Korahite -Korahitic -korait -korakan -Koran -Korana -Koranic -Koranist -korari -Kore -kore -Korean -korec -koreci -Koreish -Koreishite -korero -Koreshan -Koreshanity -kori -korimako -korin -Kornephorus -kornerupine -kornskeppa -kornskeppur -korntonde -korntonder -korntunna -korntunnur -Koroa -koromika -koromiko -korona -korova -korrel -korrigum -korumburra -koruna -Korwa -Kory -Koryak -korymboi -korymbos -korzec -kos -Kosalan -Koschei -kosher -Kosimo -kosin -kosmokrator -Koso -kosong -kosotoxin -Kossaean -Kossean -Kosteletzkya -koswite -Kota -kotal -Kotar -koto -Kotoko -kotschubeite -kottigite -kotuku -kotukutuku -kotwal -kotwalee -kotyle -kotylos -kou -koulan -Koungmiut -kouza -kovil -Kowagmiut -kowhai -kowtow -koyan -kozo -Kpuesi -Kra -kra -kraal -kraft -Krag -kragerite -krageroite -krait -kraken -krakowiak -kral -Krama -krama -Krameria -Krameriaceae -krameriaceous -kran -krantzite -Krapina -kras -krasis -kratogen -kratogenic -Kraunhia -kraurite -kraurosis -kraurotic -krausen -krausite -kraut -kreis -Kreistag -kreistle -kreittonite -krelos -kremersite -kremlin -krems -kreng -krennerite -Krepi -kreplech -kreutzer -kriegspiel -krieker -Krigia -krimmer -krina -Kriophoros -Kris -Krishna -Krishnaism -Krishnaist -Krishnaite -Krishnaitic -Kristen -Kristi -Kristian -Kristin -Kristinaux -krisuvigite -kritarchy -Krithia -Kriton -kritrima -krobyloi -krobylos -krocket -krohnkite -krome -kromeski -kromogram -kromskop -krona -krone -kronen -kroner -Kronion -kronor -kronur -Kroo -kroon -krosa -krouchka -kroushka -Kru -Krugerism -Krugerite -Kruman -krummhorn -kryokonite -krypsis -kryptic -krypticism -kryptocyanine -kryptol -kryptomere -krypton -Krzysztof -Kshatriya -Kshatriyahood -Kua -Kuan -kuan -Kuar -Kuba -kuba -Kubachi -Kubanka -kubba -Kubera -kubuklion -Kuchean -kuchen -kudize -kudos -Kudrun -kudu -kudzu -Kuehneola -kuei -Kufic -kuge -kugel -Kuhnia -Kui -kuichua -Kuki -kukoline -kukri -kuku -kukui -Kukulcan -kukupa -Kukuruku -kula -kulack -Kulah -kulah -kulaite -kulak -kulakism -Kulanapan -kulang -Kuldip -Kuli -kulimit -kulkarni -kullaite -Kullani -kulm -kulmet -Kulturkampf -Kulturkreis -Kuman -kumbi -kumhar -kumiss -kummel -Kumni -kumquat -kumrah -Kumyk -kunai -Kunbi -Kundry -Kuneste -kung -kunk -kunkur -Kunmiut -kunzite -Kuomintang -kupfernickel -kupfferite -kuphar -kupper -Kuranko -kurbash -kurchicine -kurchine -Kurd -Kurdish -Kurdistan -kurgan -Kuri -Kurilian -Kurku -kurmburra -Kurmi -Kuroshio -kurrajong -Kurt -kurtosis -Kuruba -Kurukh -kuruma -kurumaya -Kurumba -kurung -kurus -kurvey -kurveyor -kusa -kusam -Kusan -kusha -Kushshu -kusimansel -kuskite -kuskos -kuskus -Kuskwogmiut -Kustenau -kusti -Kusum -kusum -kutcha -Kutchin -Kutenai -kuttab -kuttar -kuttaur -kuvasz -Kuvera -kvass -kvint -kvinter -Kwakiutl -kwamme -kwan -Kwannon -Kwapa -kwarta -kwarterka -kwazoku -kyack -kyah -kyar -kyat -kyaung -Kybele -Kyklopes -Kyklops -kyl -Kyle -kyle -kylite -kylix -Kylo -kymation -kymatology -kymbalon -kymogram -kymograph -kymographic -kynurenic -kynurine -kyphoscoliosis -kyphoscoliotic -Kyphosidae -kyphosis -kyphotic -Kyrie -kyrine -kyschtymite -kyte -Kyu -Kyung -Kyurin -Kyurinish -L -l -la -laager -laang -lab -Laban -labara -labarum -labba -labber -labdacism -labdacismus -labdanum -labefact -labefactation -labefaction -labefy -label -labeler -labella -labellate -labeller -labelloid -labellum -labia -labial -labialism -labialismus -labiality -labialization -labialize -labially -Labiatae -labiate -labiated -labidophorous -Labidura -Labiduridae -labiella -labile -lability -labilization -labilize -labioalveolar -labiocervical -labiodental -labioglossal -labioglossolaryngeal -labioglossopharyngeal -labiograph -labioguttural -labiolingual -labiomancy -labiomental -labionasal -labiopalatal -labiopalatalize -labiopalatine -labiopharyngeal -labioplasty -labiose -labiotenaculum -labiovelar -labioversion -labis -labium -lablab -labor -laborability -laborable -laborage -laborant -laboratorial -laboratorian -laboratory -labordom -labored -laboredly -laboredness -laborer -laboress -laborhood -laboring -laboringly -laborious -laboriously -laboriousness -laborism -laborist -laborite -laborless -laborous -laborously -laborousness -laborsaving -laborsome -laborsomely -laborsomeness -Laboulbenia -Laboulbeniaceae -laboulbeniaceous -Laboulbeniales -labour -labra -Labrador -Labradorean -labradorite -labradoritic -labral -labret -labretifery -Labridae -labroid -Labroidea -labrosaurid -labrosauroid -Labrosaurus -labrose -labrum -Labrus -labrusca -labrys -Laburnum -labyrinth -labyrinthal -labyrinthally -labyrinthian -labyrinthibranch -labyrinthibranchiate -Labyrinthibranchii -labyrinthic -labyrinthical -labyrinthically -Labyrinthici -labyrinthiform -labyrinthine -labyrinthitis -Labyrinthodon -labyrinthodont -Labyrinthodonta -labyrinthodontian -labyrinthodontid -labyrinthodontoid -Labyrinthula -Labyrinthulidae -lac -lacca -laccaic -laccainic -laccase -laccol -laccolith -laccolithic -laccolitic -lace -lacebark -laced -Lacedaemonian -laceflower -laceleaf -laceless -lacelike -lacemaker -lacemaking -laceman -lacepiece -lacepod -lacer -lacerability -lacerable -lacerant -lacerate -lacerated -lacerately -laceration -lacerative -Lacerta -Lacertae -lacertian -Lacertid -Lacertidae -lacertiform -Lacertilia -lacertilian -lacertiloid -lacertine -lacertoid -lacertose -lacery -lacet -lacewing -lacewoman -lacewood -lacework -laceworker -laceybark -lache -Lachenalia -laches -Lachesis -Lachnanthes -Lachnosterna -lachryma -lachrymae -lachrymaeform -lachrymal -lachrymally -lachrymalness -lachrymary -lachrymation -lachrymator -lachrymatory -lachrymiform -lachrymist -lachrymogenic -lachrymonasal -lachrymosal -lachrymose -lachrymosely -lachrymosity -lachrymous -lachsa -lacily -Lacinaria -laciness -lacing -lacinia -laciniate -laciniated -laciniation -laciniform -laciniola -laciniolate -laciniose -lacinula -lacinulate -lacinulose -lacis -lack -lackadaisical -lackadaisicality -lackadaisically -lackadaisicalness -lackadaisy -lackaday -lacker -lackey -lackeydom -lackeyed -lackeyism -lackeyship -lackland -lackluster -lacklusterness -lacklustrous -lacksense -lackwit -lackwittedly -lackwittedness -lacmoid -lacmus -Laconian -Laconic -laconic -laconica -laconically -laconicalness -laconicism -laconicum -laconism -laconize -laconizer -Lacosomatidae -lacquer -lacquerer -lacquering -lacquerist -lacroixite -lacrosse -lacrosser -lacrym -lactagogue -lactalbumin -lactam -lactamide -lactant -lactarene -lactarious -lactarium -Lactarius -lactary -lactase -lactate -lactation -lactational -lacteal -lactean -lactenin -lacteous -lactesce -lactescence -lactescency -lactescent -lactic -lacticinia -lactid -lactide -lactiferous -lactiferousness -lactific -lactifical -lactification -lactiflorous -lactifluous -lactiform -lactifuge -lactify -lactigenic -lactigenous -lactigerous -lactim -lactimide -lactinate -lactivorous -lacto -lactobacilli -Lactobacillus -lactobacillus -lactobutyrometer -lactocele -lactochrome -lactocitrate -lactodensimeter -lactoflavin -lactoglobulin -lactoid -lactol -lactometer -lactone -lactonic -lactonization -lactonize -lactophosphate -lactoproteid -lactoprotein -lactoscope -lactose -lactoside -lactosuria -lactothermometer -lactotoxin -lactovegetarian -Lactuca -lactucarium -lactucerin -lactucin -lactucol -lactucon -lactyl -lacuna -lacunae -lacunal -lacunar -lacunaria -lacunary -lacune -lacunose -lacunosity -lacunule -lacunulose -lacuscular -lacustral -lacustrian -lacustrine -lacwork -lacy -lad -Ladakhi -ladakin -ladanigerous -ladanum -ladder -laddered -laddering -ladderlike -ladderway -ladderwise -laddery -laddess -laddie -laddikie -laddish -laddock -lade -lademan -laden -lader -ladhood -ladies -ladify -Ladik -Ladin -lading -Ladino -ladkin -ladle -ladleful -ladler -ladlewood -ladrone -ladronism -ladronize -lady -ladybird -ladybug -ladyclock -ladydom -ladyfinger -ladyfish -ladyfly -ladyfy -ladyhood -ladyish -ladyism -ladykin -ladykind -ladyless -ladylike -ladylikely -ladylikeness -ladyling -ladylintywhite -ladylove -ladyly -ladyship -Ladytide -Laelia -laemodipod -Laemodipoda -laemodipodan -laemodipodiform -laemodipodous -laemoparalysis -laemostenosis -laeotropic -laeotropism -Laestrygones -laet -laeti -laetic -Laevigrada -laevoduction -laevogyrate -laevogyre -laevogyrous -laevolactic -laevorotation -laevorotatory -laevotartaric -laevoversion -lafayette -Lafite -lag -lagan -lagarto -lagen -lagena -Lagenaria -lagend -lageniform -lager -Lagerstroemia -Lagetta -lagetto -laggar -laggard -laggardism -laggardly -laggardness -lagged -laggen -lagger -laggin -lagging -laglast -lagna -lagniappe -lagomorph -Lagomorpha -lagomorphic -lagomorphous -Lagomyidae -lagonite -lagoon -lagoonal -lagoonside -lagophthalmos -lagopode -lagopodous -lagopous -Lagopus -Lagorchestes -lagostoma -Lagostomus -Lagothrix -Lagrangian -Lagthing -Lagting -Laguncularia -Lagunero -Lagurus -lagwort -Lahnda -Lahontan -Lahuli -Lai -lai -Laibach -laic -laical -laicality -laically -laich -laicism -laicity -laicization -laicize -laicizer -laid -laigh -lain -laine -laiose -lair -lairage -laird -lairdess -lairdie -lairdly -lairdocracy -lairdship -lairless -lairman -lairstone -lairy -laitance -laity -Lak -lak -lakarpite -lakatoi -lake -lakeland -lakelander -lakeless -lakelet -lakelike -lakemanship -laker -lakeside -lakeward -lakeweed -lakie -laking -lakish -lakishness -lakism -lakist -Lakota -Lakshmi -laky -lalang -lall -Lallan -Lalland -lallation -lalling -lalo -laloneurosis -lalopathy -lalophobia -laloplegia -lam -lama -lamaic -Lamaism -Lamaist -Lamaistic -Lamaite -Lamanism -Lamanite -Lamano -lamantin -lamany -Lamarckia -Lamarckian -Lamarckianism -Lamarckism -lamasary -lamasery -lamastery -lamb -Lamba -lamba -Lambadi -lambale -lambaste -lambda -lambdacism -lambdoid -lambdoidal -lambeau -lambency -lambent -lambently -lamber -Lambert -lambert -lambhood -lambie -lambiness -lambish -lambkill -lambkin -Lamblia -lambliasis -lamblike -lambling -lambly -lamboys -lambrequin -lambsdown -lambskin -lambsuccory -lamby -lame -lamedh -lameduck -lamel -lamella -lamellar -Lamellaria -Lamellariidae -lamellarly -lamellary -lamellate -lamellated -lamellately -lamellation -lamellibranch -Lamellibranchia -Lamellibranchiata -lamellibranchiate -lamellicorn -lamellicornate -Lamellicornes -Lamellicornia -lamellicornous -lamelliferous -lamelliform -lamellirostral -lamellirostrate -Lamellirostres -lamelloid -lamellose -lamellosity -lamellule -lamely -lameness -lament -lamentable -lamentableness -lamentably -lamentation -lamentational -lamentatory -lamented -lamentedly -lamenter -lamentful -lamenting -lamentingly -lamentive -lamentory -lamester -lamestery -lameter -lametta -lamia -Lamiaceae -lamiaceous -lamiger -lamiid -Lamiidae -Lamiides -Lamiinae -lamin -lamina -laminability -laminable -laminae -laminar -Laminaria -Laminariaceae -laminariaceous -Laminariales -laminarian -laminarin -laminarioid -laminarite -laminary -laminate -laminated -lamination -laminboard -laminectomy -laminiferous -laminiform -laminiplantar -laminiplantation -laminitis -laminose -laminous -lamish -Lamista -lamiter -Lamium -Lammas -lammas -Lammastide -lammer -lammergeier -lammock -lammy -Lamna -lamnectomy -lamnid -Lamnidae -lamnoid -lamp -lampad -lampadary -lampadedromy -lampadephore -lampadephoria -lampadite -lampas -lampatia -lampblack -lamper -lampern -lampers -lampflower -lampfly -lampful -lamphole -lamping -lampion -lampist -lampistry -lampless -lamplet -lamplight -lamplighted -lamplighter -lamplit -lampmaker -lampmaking -lampman -Lampong -lampoon -lampooner -lampoonery -lampoonist -lamppost -lamprey -Lampridae -lamprophony -lamprophyre -lamprophyric -lamprotype -Lampsilis -Lampsilus -lampstand -lampwick -lampyrid -Lampyridae -lampyrine -Lampyris -Lamus -Lamut -lamziekte -lan -Lana -lanameter -Lanao -Lanarkia -lanarkite -lanas -lanate -lanated -lanaz -Lancaster -Lancasterian -Lancastrian -Lance -lance -lanced -lancegay -lancelet -lancelike -lancely -lanceman -lanceolar -lanceolate -lanceolated -lanceolately -lanceolation -lancepesade -lancepod -lanceproof -lancer -lances -lancet -lanceted -lanceteer -lancewood -lancha -lanciers -lanciferous -lanciform -lancinate -lancination -land -landamman -landau -landaulet -landaulette -landblink -landbook -landdrost -landed -lander -landesite -landfall -landfast -landflood -landgafol -landgravate -landgrave -landgraveship -landgravess -landgraviate -landgravine -landholder -landholdership -landholding -landimere -landing -landlady -landladydom -landladyhood -landladyish -landladyship -landless -landlessness -landlike -landline -landlock -landlocked -landlook -landlooker -landloper -landlord -landlordism -landlordly -landlordry -landlordship -landlouper -landlouping -landlubber -landlubberish -landlubberly -landlubbing -landman -landmark -Landmarker -landmil -landmonger -landocracy -landocrat -Landolphia -landolphia -landowner -landownership -landowning -landplane -landraker -landreeve -landright -landsale -landscape -landscapist -landshard -landship -landsick -landside -landskip -landslide -landslip -Landsmaal -landsman -landspout -landspringy -Landsting -landstorm -Landsturm -Landuman -landwaiter -landward -landwash -landways -Landwehr -landwhin -landwire -landwrack -lane -lanete -laneway -laney -langaha -langarai -langbanite -langbeinite -langca -Langhian -langi -langite -langlauf -langlaufer -langle -Lango -Langobard -Langobardic -langoon -langooty -langrage -langsat -Langsdorffia -langsettle -Langshan -langspiel -langsyne -language -languaged -languageless -langued -Languedocian -languescent -languet -languid -languidly -languidness -languish -languisher -languishing -languishingly -languishment -languor -languorous -languorously -langur -laniariform -laniary -laniate -laniferous -lanific -laniflorous -laniform -lanigerous -Laniidae -laniiform -Laniinae -lanioid -lanista -Lanital -Lanius -lank -lanket -lankily -lankiness -lankish -lankly -lankness -lanky -lanner -lanneret -Lanny -lanolin -lanose -lanosity -lansat -lansdowne -lanseh -lansfordite -lansknecht -lanson -lansquenet -lant -lantaca -Lantana -lanterloo -lantern -lanternflower -lanternist -lanternleaf -lanternman -lanthana -lanthanide -lanthanite -Lanthanotidae -Lanthanotus -lanthanum -lanthopine -lantum -lanuginose -lanuginous -lanuginousness -lanugo -lanum -Lanuvian -lanx -lanyard -Lao -Laodicean -Laodiceanism -Laotian -lap -lapacho -lapachol -lapactic -Lapageria -laparectomy -laparocele -laparocholecystotomy -laparocolectomy -laparocolostomy -laparocolotomy -laparocolpohysterotomy -laparocolpotomy -laparocystectomy -laparocystotomy -laparoelytrotomy -laparoenterostomy -laparoenterotomy -laparogastroscopy -laparogastrotomy -laparohepatotomy -laparohysterectomy -laparohysteropexy -laparohysterotomy -laparoileotomy -laparomyitis -laparomyomectomy -laparomyomotomy -laparonephrectomy -laparonephrotomy -laparorrhaphy -laparosalpingectomy -laparosalpingotomy -laparoscopy -laparosplenectomy -laparosplenotomy -laparostict -Laparosticti -laparothoracoscopy -laparotome -laparotomist -laparotomize -laparotomy -laparotrachelotomy -lapboard -lapcock -Lapeirousia -lapel -lapeler -lapelled -lapful -lapicide -lapidarian -lapidarist -lapidary -lapidate -lapidation -lapidator -lapideon -lapideous -lapidescent -lapidicolous -lapidific -lapidification -lapidify -lapidist -lapidity -lapidose -lapilliform -lapillo -lapillus -Lapith -Lapithae -Lapithaean -Laplacian -Lapland -Laplander -Laplandian -Laplandic -Laplandish -lapon -Laportea -Lapp -Lappa -lappaceous -lappage -lapped -lapper -lappet -lappeted -Lappic -lapping -Lappish -Lapponese -Lapponian -Lappula -lapsability -lapsable -Lapsana -lapsation -lapse -lapsed -lapser -lapsi -lapsing -lapsingly -lapstone -lapstreak -lapstreaked -lapstreaker -Laputa -Laputan -laputically -lapwing -lapwork -laquear -laquearian -laqueus -Lar -lar -Laralia -Laramide -Laramie -larboard -larbolins -larbowlines -larcener -larcenic -larcenish -larcenist -larcenous -larcenously -larceny -larch -larchen -lard -lardacein -lardaceous -larder -larderellite -larderer -larderful -larderlike -lardiform -lardite -Lardizabalaceae -lardizabalaceous -lardon -lardworm -lardy -lareabell -Larentiidae -large -largebrained -largehanded -largehearted -largeheartedness -largely -largemouth -largemouthed -largen -largeness -largess -larghetto -largifical -largish -largition -largitional -largo -Lari -lari -Laria -lariat -larick -larid -Laridae -laridine -larigo -larigot -lariid -Lariidae -larin -Larinae -larine -larithmics -Larix -larixin -lark -larker -larkiness -larking -larkingly -larkish -larkishness -larklike -larkling -larksome -larkspur -larky -larmier -larmoyant -Larnaudian -larnax -laroid -larrigan -larrikin -larrikinalian -larrikiness -larrikinism -larriman -larrup -Larry -larry -Lars -larsenite -Larunda -Larus -larva -Larvacea -larvae -larval -Larvalia -larvarium -larvate -larve -larvicidal -larvicide -larvicolous -larviform -larvigerous -larvikite -larviparous -larviposit -larviposition -larvivorous -larvule -laryngal -laryngalgia -laryngeal -laryngeally -laryngean -laryngeating -laryngectomy -laryngemphraxis -laryngendoscope -larynges -laryngic -laryngismal -laryngismus -laryngitic -laryngitis -laryngocele -laryngocentesis -laryngofission -laryngofissure -laryngograph -laryngography -laryngological -laryngologist -laryngology -laryngometry -laryngoparalysis -laryngopathy -laryngopharyngeal -laryngopharyngitis -laryngophony -laryngophthisis -laryngoplasty -laryngoplegia -laryngorrhagia -laryngorrhea -laryngoscleroma -laryngoscope -laryngoscopic -laryngoscopical -laryngoscopist -laryngoscopy -laryngospasm -laryngostasis -laryngostenosis -laryngostomy -laryngostroboscope -laryngotome -laryngotomy -laryngotracheal -laryngotracheitis -laryngotracheoscopy -laryngotracheotomy -laryngotyphoid -laryngovestibulitis -larynx -las -lasa -lasarwort -lascar -lascivious -lasciviously -lasciviousness -laser -Laserpitium -laserwort -lash -lasher -lashingly -lashless -lashlite -Lasi -lasianthous -Lasiocampa -lasiocampid -Lasiocampidae -Lasiocampoidea -lasiocarpous -Lasius -lask -lasket -Laspeyresia -laspring -lasque -lass -lasset -lassie -lassiehood -lassieish -lassitude -lasslorn -lasso -lassock -lassoer -last -lastage -laster -lasting -lastingly -lastingness -lastly -lastness -lastre -lastspring -lasty -lat -lata -latah -Latakia -Latania -Latax -latch -latcher -latchet -latching -latchkey -latchless -latchman -latchstring -late -latebra -latebricole -latecomer -latecoming -lated -lateen -lateener -lately -laten -latence -latency -lateness -latensification -latent -latentize -latently -latentness -later -latera -laterad -lateral -lateralis -laterality -lateralization -lateralize -laterally -Lateran -latericumbent -lateriflexion -laterifloral -lateriflorous -laterifolious -Laterigradae -laterigrade -laterinerved -laterite -lateritic -lateritious -lateriversion -laterization -lateroabdominal -lateroanterior -laterocaudal -laterocervical -laterodeviation -laterodorsal -lateroduction -lateroflexion -lateromarginal -lateronuchal -lateroposition -lateroposterior -lateropulsion -laterostigmatal -laterostigmatic -laterotemporal -laterotorsion -lateroventral -lateroversion -latescence -latescent -latesome -latest -latewhile -latex -latexosis -lath -lathe -lathee -latheman -lathen -lather -latherability -latherable -lathereeve -latherer -latherin -latheron -latherwort -lathery -lathesman -lathhouse -lathing -Lathraea -lathwork -lathy -lathyric -lathyrism -Lathyrus -Latian -latibulize -latices -laticiferous -laticlave -laticostate -latidentate -latifundian -latifundium -latigo -Latimeria -Latin -Latinate -Latiner -Latinesque -Latinian -Latinic -Latiniform -Latinism -latinism -Latinist -Latinistic -Latinistical -Latinitaster -Latinity -Latinization -Latinize -Latinizer -Latinless -Latinus -lation -latipennate -latiplantar -latirostral -Latirostres -latirostrous -Latirus -latisept -latiseptal -latiseptate -latish -latisternal -latitancy -latitant -latitat -latite -latitude -latitudinal -latitudinally -latitudinarian -latitudinarianisn -latitudinary -latitudinous -latomy -Latona -Latonian -Latooka -latrant -latration -latreutic -latria -Latrididae -latrine -Latris -latro -latrobe -latrobite -latrocinium -Latrodectus -latron -latten -lattener -latter -latterkin -latterly -lattermath -lattermost -latterness -lattice -latticed -latticewise -latticework -latticing -latticinio -Latuka -latus -Latvian -lauan -laubanite -laud -laudability -laudable -laudableness -laudably -laudanidine -laudanin -laudanine -laudanosine -laudanum -laudation -laudative -laudator -laudatorily -laudatory -lauder -Laudian -Laudianism -laudification -Laudism -Laudist -laudist -laugh -laughable -laughableness -laughably -laughee -laugher -laughful -laughing -laughingly -laughingstock -laughsome -laughter -laughterful -laughterless -laughworthy -laughy -lauia -laumonite -laumontite -laun -launce -launch -launcher -launchful -launchways -laund -launder -launderability -launderable -launderer -laundry -laundrymaid -laundryman -laundryowner -laundrywoman -laur -Laura -laura -Lauraceae -lauraceous -lauraldehyde -laurate -laurdalite -laureate -laureated -laureateship -laureation -Laurel -laurel -laureled -laurellike -laurelship -laurelwood -Laurence -Laurencia -Laurent -Laurentian -Laurentide -laureole -Laurianne -lauric -Laurie -laurin -laurinoxylon -laurionite -laurite -Laurocerasus -laurone -laurotetanine -Laurus -laurustine -laurustinus -laurvikite -lauryl -lautarite -lautitious -lava -lavable -lavabo -lavacre -lavage -lavaliere -lavalike -Lavandula -lavanga -lavant -lavaret -Lavatera -lavatic -lavation -lavational -lavatorial -lavatory -lave -laveer -Lavehr -lavement -lavender -lavenite -laver -Laverania -laverock -laverwort -lavialite -lavic -Lavinia -lavish -lavisher -lavishing -lavishingly -lavishly -lavishment -lavishness -lavolta -lavrovite -law -lawbook -lawbreaker -lawbreaking -lawcraft -lawful -lawfully -lawfulness -lawgiver -lawgiving -lawing -lawish -lawk -lawlants -lawless -lawlessly -lawlessness -lawlike -lawmaker -lawmaking -lawman -lawmonger -lawn -lawned -lawner -lawnlet -lawnlike -lawny -lawproof -Lawrence -lawrencite -Lawrie -lawrightman -Lawson -Lawsoneve -Lawsonia -lawsonite -lawsuit -lawsuiting -lawter -Lawton -lawyer -lawyeress -lawyerism -lawyerlike -lawyerling -lawyerly -lawyership -lawyery -lawzy -lax -laxate -laxation -laxative -laxatively -laxativeness -laxiflorous -laxifoliate -laxifolious -laxism -laxist -laxity -laxly -laxness -lay -layaway -layback -layboy -layer -layerage -layered -layery -layette -Layia -laying -layland -layman -laymanship -layne -layoff -layout -layover -layship -laystall -laystow -laywoman -Laz -lazar -lazaret -lazaretto -Lazarist -lazarlike -lazarly -lazarole -Lazarus -laze -lazily -laziness -lazule -lazuli -lazuline -lazulite -lazulitic -lazurite -lazy -lazybird -lazybones -lazyboots -lazyhood -lazyish -lazylegs -lazyship -lazzarone -lazzaroni -Lea -lea -leach -leacher -leachman -leachy -Lead -lead -leadable -leadableness -leadage -leadback -leaded -leaden -leadenhearted -leadenheartedness -leadenly -leadenness -leadenpated -leader -leaderess -leaderette -leaderless -leadership -leadhillite -leadin -leadiness -leading -leadingly -leadless -leadman -leadoff -leadout -leadproof -Leads -leadsman -leadstone -leadway -leadwood -leadwork -leadwort -leady -leaf -leafage -leafboy -leafcup -leafdom -leafed -leafen -leafer -leafery -leafgirl -leafit -leafless -leaflessness -leaflet -leafleteer -leaflike -leafstalk -leafwork -leafy -league -leaguelong -leaguer -Leah -leak -leakage -leakance -leaker -leakiness -leakless -leakproof -leaky -leal -lealand -leally -lealness -lealty -leam -leamer -lean -Leander -leaner -leaning -leanish -leanly -leanness -leant -leap -leapable -leaper -leapfrog -leapfrogger -leapfrogging -leaping -leapingly -leapt -Lear -lear -Learchus -learn -learnable -learned -learnedly -learnedness -learner -learnership -learning -learnt -Learoyd -leasable -lease -leasehold -leaseholder -leaseholding -leaseless -leasemonger -leaser -leash -leashless -leasing -leasow -least -leastways -leastwise -leat -leath -leather -leatherback -leatherbark -leatherboard -leatherbush -leathercoat -leathercraft -leatherer -Leatherette -leatherfish -leatherflower -leatherhead -leatherine -leatheriness -leathering -leatherize -leatherjacket -leatherleaf -leatherlike -leathermaker -leathermaking -leathern -leatherneck -Leatheroid -leatherroot -leatherside -Leatherstocking -leatherware -leatherwing -leatherwood -leatherwork -leatherworker -leatherworking -leathery -leathwake -leatman -leave -leaved -leaveless -leavelooker -leaven -leavening -leavenish -leavenless -leavenous -leaver -leaverwood -leaves -leaving -leavy -leawill -leban -Lebanese -lebbek -lebensraum -Lebistes -lebrancho -lecama -lecaniid -Lecaniinae -lecanine -Lecanium -lecanomancer -lecanomancy -lecanomantic -Lecanora -Lecanoraceae -lecanoraceous -lecanorine -lecanoroid -lecanoscopic -lecanoscopy -lech -Lechea -lecher -lecherous -lecherously -lecherousness -lechery -lechriodont -Lechriodonta -lechuguilla -lechwe -Lecidea -Lecideaceae -lecideaceous -lecideiform -lecideine -lecidioid -lecithal -lecithalbumin -lecithality -lecithin -lecithinase -lecithoblast -lecithoprotein -leck -lecker -lecontite -lecotropal -lectern -lection -lectionary -lectisternium -lector -lectorate -lectorial -lectorship -lectotype -lectress -lectrice -lectual -lecture -lecturee -lectureproof -lecturer -lectureship -lecturess -lecturette -lecyth -lecythid -Lecythidaceae -lecythidaceous -Lecythis -lecythoid -lecythus -led -Leda -lede -leden -lederite -ledge -ledged -ledgeless -ledger -ledgerdom -ledging -ledgment -ledgy -Ledidae -ledol -Ledum -Lee -lee -leeangle -leeboard -leech -leecheater -leecher -leechery -leeches -leechkin -leechlike -leechwort -leed -leefang -leeftail -leek -leekish -leeky -leep -leepit -leer -leerily -leeringly -leerish -leerness -leeroway -Leersia -leery -lees -leet -leetman -leewan -leeward -leewardly -leewardmost -leewardness -leeway -leewill -left -leftish -leftism -leftist -leftments -leftmost -leftness -leftover -leftward -leftwardly -leftwards -leg -legacy -legal -legalese -legalism -legalist -legalistic -legalistically -legality -legalization -legalize -legally -legalness -legantine -legatary -legate -legatee -legateship -legatine -legation -legationary -legative -legato -legator -legatorial -legend -legenda -legendarian -legendary -legendic -legendist -legendless -Legendrian -legendry -leger -legerdemain -legerdemainist -legerity -leges -legged -legger -legginess -legging -legginged -leggy -leghorn -legibility -legible -legibleness -legibly -legific -legion -legionary -legioned -legioner -legionnaire -legionry -legislate -legislation -legislational -legislativ -legislative -legislatively -legislator -legislatorial -legislatorially -legislatorship -legislatress -legislature -legist -legit -legitim -legitimacy -legitimate -legitimately -legitimateness -legitimation -legitimatist -legitimatize -legitimism -legitimist -legitimistic -legitimity -legitimization -legitimize -leglen -legless -leglessness -leglet -leglike -legman -legoa -legpiece -legpull -legpuller -legpulling -legrope -legua -leguan -Leguatia -leguleian -leguleious -legume -legumelin -legumen -legumin -leguminiform -Leguminosae -leguminose -leguminous -Lehi -lehr -lehrbachite -lehrman -lehua -lei -Leibnitzian -Leibnitzianism -Leicester -Leif -Leigh -leighton -Leila -leimtype -leiocephalous -leiocome -leiodermatous -leiodermia -leiomyofibroma -leiomyoma -leiomyomatous -leiomyosarcoma -leiophyllous -Leiophyllum -Leiothrix -Leiotrichan -Leiotriches -Leiotrichi -Leiotrichidae -Leiotrichinae -leiotrichine -leiotrichous -leiotrichy -leiotropic -Leipoa -Leishmania -leishmaniasis -Leisten -leister -leisterer -leisurable -leisurably -leisure -leisured -leisureful -leisureless -leisureliness -leisurely -leisureness -Leith -leitmotiv -Leitneria -Leitneriaceae -leitneriaceous -Leitneriales -lek -lekach -lekane -lekha -Lelia -Lemaireocereus -leman -Lemanea -Lemaneaceae -lemel -lemma -lemmata -lemming -lemmitis -lemmoblastic -lemmocyte -Lemmus -Lemna -Lemnaceae -lemnaceous -lemnad -Lemnian -lemniscate -lemniscatic -lemniscus -lemography -lemology -lemon -lemonade -Lemonias -Lemoniidae -Lemoniinae -lemonish -lemonlike -lemonweed -lemonwood -lemony -Lemosi -Lemovices -lempira -Lemuel -lemur -lemures -Lemuria -Lemurian -lemurian -lemurid -Lemuridae -lemuriform -Lemurinae -lemurine -lemuroid -Lemuroidea -Len -Lena -lenad -Lenaea -Lenaean -Lenaeum -Lenaeus -Lenape -lenard -Lenca -Lencan -lench -lend -lendable -lendee -lender -Lendu -lene -length -lengthen -lengthener -lengther -lengthful -lengthily -lengthiness -lengthsman -lengthsome -lengthsomeness -lengthways -lengthwise -lengthy -lenience -leniency -lenient -leniently -lenify -Leninism -Leninist -Leninite -lenis -lenitic -lenitive -lenitively -lenitiveness -lenitude -lenity -lennilite -Lennoaceae -lennoaceous -lennow -Lenny -leno -Lenora -lens -lensed -lensless -lenslike -Lent -lent -Lenten -Lententide -lenth -lenthways -Lentibulariaceae -lentibulariaceous -lenticel -lenticellate -lenticle -lenticonus -lenticula -lenticular -lenticulare -lenticularis -lenticularly -lenticulate -lenticulated -lenticule -lenticulostriate -lenticulothalamic -lentiform -lentigerous -lentiginous -lentigo -lentil -Lentilla -lentisc -lentiscine -lentisco -lentiscus -lentisk -lentitude -lentitudinous -lento -lentoid -lentor -lentous -lenvoi -lenvoy -Lenzites -Leo -Leon -Leonard -Leonardesque -Leonato -leoncito -Leonese -leonhardite -Leonid -Leonine -leonine -leoninely -leonines -Leonis -Leonist -leonite -Leonnoys -Leonora -Leonotis -leontiasis -Leontocebus -leontocephalous -Leontodon -Leontopodium -Leonurus -leopard -leoparde -leopardess -leopardine -leopardite -leopardwood -Leopold -Leopoldinia -leopoldite -Leora -leotard -lepa -Lepadidae -lepadoid -Lepanto -lepargylic -Lepargyraea -Lepas -Lepcha -leper -leperdom -lepered -lepidene -lepidine -Lepidium -lepidoblastic -Lepidodendraceae -lepidodendraceous -lepidodendrid -lepidodendroid -Lepidodendron -lepidoid -Lepidoidei -lepidolite -lepidomelane -Lepidophloios -lepidophyllous -Lepidophyllum -lepidophyte -lepidophytic -lepidoporphyrin -lepidopter -Lepidoptera -lepidopteral -lepidopteran -lepidopterid -lepidopterist -lepidopterological -lepidopterologist -lepidopterology -lepidopteron -lepidopterous -Lepidosauria -lepidosaurian -Lepidosiren -Lepidosirenidae -lepidosirenoid -lepidosis -Lepidosperma -Lepidospermae -Lepidosphes -Lepidostei -lepidosteoid -Lepidosteus -Lepidostrobus -lepidote -Lepidotes -lepidotic -Lepidotus -Lepidurus -Lepilemur -Lepiota -Lepisma -Lepismatidae -Lepismidae -lepismoid -Lepisosteidae -Lepisosteus -lepocyte -Lepomis -leporid -Leporidae -leporide -leporiform -leporine -Leporis -Lepospondyli -lepospondylous -Leposternidae -Leposternon -lepothrix -lepra -Lepralia -lepralian -leprechaun -lepric -leproid -leprologic -leprologist -leprology -leproma -lepromatous -leprosarium -leprose -leprosery -leprosied -leprosis -leprosity -leprosy -leprous -leprously -leprousness -Leptamnium -Leptandra -leptandrin -leptid -Leptidae -leptiform -Leptilon -leptinolite -Leptinotarsa -leptite -Leptocardia -leptocardian -Leptocardii -leptocentric -leptocephalan -leptocephali -leptocephalia -leptocephalic -leptocephalid -Leptocephalidae -leptocephaloid -leptocephalous -Leptocephalus -leptocephalus -leptocephaly -leptocercal -leptochlorite -leptochroa -leptochrous -leptoclase -leptodactyl -Leptodactylidae -leptodactylous -Leptodactylus -leptodermatous -leptodermous -Leptodora -Leptodoridae -Leptogenesis -leptokurtic -Leptolepidae -Leptolepis -Leptolinae -leptomatic -leptome -Leptomedusae -leptomedusan -leptomeningeal -leptomeninges -leptomeningitis -leptomeninx -leptometer -leptomonad -Leptomonas -Lepton -lepton -leptonecrosis -leptonema -leptopellic -Leptophis -leptophyllous -leptoprosope -leptoprosopic -leptoprosopous -leptoprosopy -Leptoptilus -Leptorchis -leptorrhin -leptorrhine -leptorrhinian -leptorrhinism -leptosome -leptosperm -Leptospermum -Leptosphaeria -Leptospira -leptospirosis -leptosporangiate -Leptostraca -leptostracan -leptostracous -Leptostromataceae -Leptosyne -leptotene -Leptothrix -Leptotrichia -Leptotyphlopidae -Leptotyphlops -leptus -leptynite -Lepus -Ler -Lernaea -Lernaeacea -Lernaean -Lernaeidae -lernaeiform -lernaeoid -Lernaeoides -lerot -lerp -lerret -Lerwa -Les -Lesath -Lesbia -Lesbian -Lesbianism -lesche -Lesgh -lesion -lesional -lesiy -Leskea -Leskeaceae -leskeaceous -Lesleya -Leslie -Lespedeza -Lesquerella -less -lessee -lesseeship -lessen -lessener -lesser -lessive -lessn -lessness -lesson -lessor -lest -Lester -lestiwarite -lestobiosis -lestobiotic -Lestodon -Lestosaurus -lestrad -Lestrigon -Lestrigonian -let -letch -letchy -letdown -lete -lethal -lethality -lethalize -lethally -lethargic -lethargical -lethargically -lethargicalness -lethargize -lethargus -lethargy -Lethe -Lethean -lethiferous -Lethocerus -lethologica -Letitia -Leto -letoff -Lett -lettable -letten -letter -lettered -letterer -letteret -lettergram -letterhead -letterin -lettering -letterleaf -letterless -letterpress -letterspace -letterweight -letterwood -Lettic -Lettice -Lettish -lettrin -lettsomite -lettuce -Letty -letup -leu -Leucadendron -Leucadian -leucaemia -leucaemic -Leucaena -leucaethiop -leucaethiopic -leucaniline -leucanthous -leucaugite -leucaurin -leucemia -leucemic -Leucetta -leuch -leuchaemia -leuchemia -leuchtenbergite -Leucichthys -Leucifer -Leuciferidae -leucine -Leucippus -leucism -leucite -leucitic -leucitis -leucitite -leucitohedron -leucitoid -Leuckartia -Leuckartiidae -leuco -leucobasalt -leucoblast -leucoblastic -Leucobryaceae -Leucobryum -leucocarpous -leucochalcite -leucocholic -leucocholy -leucochroic -leucocidic -leucocidin -leucocism -leucocrate -leucocratic -Leucocrinum -leucocyan -leucocytal -leucocyte -leucocythemia -leucocythemic -leucocytic -leucocytoblast -leucocytogenesis -leucocytoid -leucocytology -leucocytolysin -leucocytolysis -leucocytolytic -leucocytometer -leucocytopenia -leucocytopenic -leucocytoplania -leucocytopoiesis -leucocytosis -leucocytotherapy -leucocytotic -Leucocytozoon -leucoderma -leucodermatous -leucodermic -leucoencephalitis -leucogenic -leucoid -leucoindigo -leucoindigotin -Leucojaceae -Leucojum -leucolytic -leucoma -leucomaine -leucomatous -leucomelanic -leucomelanous -leucon -Leuconostoc -leucopenia -leucopenic -leucophane -leucophanite -leucophoenicite -leucophore -leucophyllous -leucophyre -leucoplakia -leucoplakial -leucoplast -leucoplastid -leucopoiesis -leucopoietic -leucopyrite -leucoquinizarin -leucorrhea -leucorrheal -leucoryx -leucosis -Leucosolenia -Leucosoleniidae -leucospermous -leucosphenite -leucosphere -leucospheric -leucostasis -Leucosticte -leucosyenite -leucotactic -Leucothea -Leucothoe -leucotic -leucotome -leucotomy -leucotoxic -leucous -leucoxene -leucyl -leud -leuk -leukemia -leukemic -leukocidic -leukocidin -leukosis -leukotic -leuma -Leung -lev -Levana -levance -Levant -levant -Levanter -levanter -Levantine -levator -levee -level -leveler -levelheaded -levelheadedly -levelheadedness -leveling -levelish -levelism -levelly -levelman -levelness -lever -leverage -leverer -leveret -leverman -levers -leverwood -Levi -leviable -leviathan -levier -levigable -levigate -levigation -levigator -levin -levining -levir -levirate -leviratical -leviration -Levis -Levisticum -levitant -levitate -levitation -levitational -levitative -levitator -Levite -Levitical -Leviticalism -Leviticality -Levitically -Leviticalness -Leviticism -Leviticus -Levitism -levity -levo -levoduction -levogyrate -levogyre -levogyrous -levolactic -levolimonene -levorotation -levorotatory -levotartaric -levoversion -levulic -levulin -levulinic -levulose -levulosuria -levy -levyist -levynite -Lew -lew -Lewanna -lewd -lewdly -lewdness -Lewie -Lewis -lewis -Lewisia -Lewisian -lewisite -lewisson -lewth -Lex -lexia -lexical -lexicalic -lexicality -lexicographer -lexicographian -lexicographic -lexicographical -lexicographically -lexicographist -lexicography -lexicologic -lexicological -lexicologist -lexicology -lexicon -lexiconist -lexiconize -lexigraphic -lexigraphical -lexigraphically -lexigraphy -lexiphanic -lexiphanicism -ley -leyland -leysing -Lezghian -lherzite -lherzolite -Lhota -li -liability -liable -liableness -liaison -liana -liang -liar -liard -Lias -Liassic -Liatris -libament -libaniferous -libanophorous -libanotophorous -libant -libate -libation -libationary -libationer -libatory -libber -libbet -libbra -Libby -libel -libelant -libelee -libeler -libelist -libellary -libellate -Libellula -libellulid -Libellulidae -libelluloid -libelous -libelously -Liber -liber -liberal -Liberalia -liberalism -liberalist -liberalistic -liberality -liberalization -liberalize -liberalizer -liberally -liberalness -liberate -liberation -liberationism -liberationist -liberative -liberator -liberatory -liberatress -Liberia -Liberian -liberomotor -libertarian -libertarianism -Libertas -liberticidal -liberticide -libertinage -libertine -libertinism -liberty -libertyless -libethenite -libidibi -libidinal -libidinally -libidinosity -libidinous -libidinously -libidinousness -libido -Libitina -libken -Libocedrus -Libra -libra -libral -librarian -librarianess -librarianship -librarious -librarius -library -libraryless -librate -libration -libratory -libretti -librettist -libretto -Librid -libriform -libroplast -Libyan -Libytheidae -Libytheinae -Licania -licareol -licca -licensable -license -licensed -licensee -licenseless -licenser -licensor -licensure -licentiate -licentiateship -licentiation -licentious -licentiously -licentiousness -lich -licham -lichanos -lichen -lichenaceous -lichened -Lichenes -licheniasis -lichenic -lichenicolous -licheniform -lichenin -lichenism -lichenist -lichenivorous -lichenization -lichenize -lichenlike -lichenographer -lichenographic -lichenographical -lichenographist -lichenography -lichenoid -lichenologic -lichenological -lichenologist -lichenology -Lichenopora -Lichenoporidae -lichenose -licheny -lichi -Lichnophora -Lichnophoridae -Licinian -licit -licitation -licitly -licitness -lick -licker -lickerish -lickerishly -lickerishness -licking -lickpenny -lickspit -lickspittle -lickspittling -licorice -licorn -licorne -lictor -lictorian -Licuala -lid -Lida -lidded -lidder -Lide -lidflower -lidgate -lidless -lie -liebenerite -Liebfraumilch -liebigite -lied -lief -liege -liegedom -liegeful -liegefully -liegeless -liegely -liegeman -lieger -lien -lienal -lienculus -lienee -lienic -lienitis -lienocele -lienogastric -lienointestinal -lienomalacia -lienomedullary -lienomyelogenous -lienopancreatic -lienor -lienorenal -lienotoxin -lienteria -lienteric -lientery -lieproof -lieprooflier -lieproofliest -lier -lierne -lierre -liesh -liespfund -lieu -lieue -lieutenancy -lieutenant -lieutenantry -lieutenantship -Lievaart -lieve -lievrite -Lif -life -lifeblood -lifeboat -lifeboatman -lifeday -lifedrop -lifeful -lifefully -lifefulness -lifeguard -lifehold -lifeholder -lifeless -lifelessly -lifelessness -lifelet -lifelike -lifelikeness -lifeline -lifelong -lifer -liferent -liferenter -liferentrix -liferoot -lifesaver -lifesaving -lifesome -lifesomely -lifesomeness -lifespring -lifetime -lifeward -lifework -lifey -lifo -lift -liftable -lifter -lifting -liftless -liftman -ligable -ligament -ligamental -ligamentary -ligamentous -ligamentously -ligamentum -ligas -ligate -ligation -ligator -ligature -ligeance -ligger -light -lightable -lightboat -lightbrained -lighten -lightener -lightening -lighter -lighterage -lighterful -lighterman -lightface -lightful -lightfulness -lighthead -lightheaded -lightheadedly -lightheadedness -lighthearted -lightheartedly -lightheartedness -lighthouse -lighthouseman -lighting -lightish -lightkeeper -lightless -lightlessness -lightly -lightman -lightmanship -lightmouthed -lightness -lightning -lightninglike -lightningproof -lightproof -lightroom -lightscot -lightship -lightsman -lightsome -lightsomely -lightsomeness -lighttight -lightwards -lightweight -lightwood -lightwort -lignaloes -lignatile -ligne -ligneous -lignescent -lignicole -lignicoline -lignicolous -ligniferous -lignification -ligniform -lignify -lignin -ligninsulphonate -ligniperdous -lignite -lignitic -lignitiferous -lignitize -lignivorous -lignocellulose -lignoceric -lignography -lignone -lignose -lignosity -lignosulphite -lignosulphonate -lignum -ligroine -ligula -ligular -Ligularia -ligulate -ligulated -ligule -Liguliflorae -liguliflorous -liguliform -ligulin -liguloid -Liguorian -ligure -Ligurian -ligurite -ligurition -Ligusticum -ligustrin -Ligustrum -Ligyda -Ligydidae -Lihyanite -liin -lija -likability -likable -likableness -like -likelihead -likelihood -likeliness -likely -liken -likeness -liker -likesome -likeways -likewise -likin -liking -liknon -Lila -lilac -lilaceous -lilacin -lilacky -lilacthroat -lilactide -Lilaeopsis -lile -Liliaceae -liliaceous -Liliales -Lilian -lilied -liliform -Liliiflorae -Lilith -Lilium -lill -lillianite -lillibullero -Lilliput -Lilliputian -Lilliputianize -lilt -liltingly -liltingness -lily -lilyfy -lilyhanded -lilylike -lilywood -lilywort -lim -Lima -Limacea -limacel -limaceous -Limacidae -limaciform -Limacina -limacine -limacinid -Limacinidae -limacoid -limacon -limaille -liman -limation -Limawood -Limax -limb -limbal -limbat -limbate -limbation -limbeck -limbed -limber -limberham -limberly -limberness -limbers -limbic -limbie -limbiferous -limbless -limbmeal -limbo -limboinfantum -limbous -Limbu -Limburger -limburgite -limbus -limby -lime -limeade -Limean -limeberry -limebush -limehouse -limekiln -limeless -limelight -limelighter -limelike -limeman -limen -limequat -limer -Limerick -limes -limestone -limetta -limettin -limewash -limewater -limewort -limey -Limicolae -limicoline -limicolous -Limidae -liminal -liminary -liminess -liming -limit -limitable -limitableness -limital -limitarian -limitary -limitate -limitation -limitative -limitatively -limited -limitedly -limitedness -limiter -limiting -limitive -limitless -limitlessly -limitlessness -limitrophe -limivorous -limma -limmer -limmock -limmu -limn -limnanth -Limnanthaceae -limnanthaceous -Limnanthemum -Limnanthes -limner -limnery -limnetic -Limnetis -limniad -limnimeter -limnimetric -limnite -limnobiologic -limnobiological -limnobiologically -limnobiology -limnobios -Limnobium -Limnocnida -limnograph -limnologic -limnological -limnologically -limnologist -limnology -limnometer -limnophile -limnophilid -Limnophilidae -limnophilous -limnoplankton -Limnorchis -Limnoria -Limnoriidae -limnorioid -Limodorum -limoid -limonene -limoniad -limonin -limonite -limonitic -limonitization -limonium -Limosa -limose -Limosella -Limosi -limous -limousine -limp -limper -limpet -limphault -limpid -limpidity -limpidly -limpidness -limpily -limpin -limpiness -limping -limpingly -limpingness -limpish -limpkin -limply -limpness -limpsy -limpwort -limpy -limsy -limu -limulid -Limulidae -limuloid -Limuloidea -Limulus -limurite -limy -Lin -lin -Lina -lina -linable -Linaceae -linaceous -linaga -linage -linaloa -linalol -linalool -linamarin -Linanthus -Linaria -linarite -linch -linchbolt -linchet -linchpin -linchpinned -lincloth -Lincoln -Lincolnian -Lincolniana -Lincolnlike -linctus -Linda -lindackerite -lindane -linden -Linder -linder -Lindera -Lindleyan -lindo -lindoite -Lindsay -Lindsey -line -linea -lineage -lineaged -lineal -lineality -lineally -lineament -lineamental -lineamentation -lineameter -linear -linearifolius -linearity -linearization -linearize -linearly -lineate -lineated -lineation -lineature -linecut -lined -lineiform -lineless -linelet -lineman -linen -Linene -linenette -linenize -linenizer -linenman -lineocircular -lineograph -lineolate -lineolated -liner -linesman -Linet -linewalker -linework -ling -linga -Lingayat -lingberry -lingbird -linge -lingel -lingenberry -linger -lingerer -lingerie -lingo -lingonberry -Lingoum -lingtow -lingtowman -lingua -linguacious -linguaciousness -linguadental -linguaeform -lingual -linguale -linguality -lingualize -lingually -linguanasal -Linguata -Linguatula -Linguatulida -Linguatulina -linguatuline -linguatuloid -linguet -linguidental -linguiform -linguipotence -linguist -linguister -linguistic -linguistical -linguistically -linguistician -linguistics -linguistry -lingula -lingulate -lingulated -Lingulella -lingulid -Lingulidae -linguliferous -linguliform -linguloid -linguodental -linguodistal -linguogingival -linguopalatal -linguopapillitis -linguoversion -lingwort -lingy -linha -linhay -linie -liniment -linin -lininess -lining -linitis -liniya -linja -linje -link -linkable -linkage -linkboy -linked -linkedness -linker -linking -linkman -links -linksmith -linkwork -linky -Linley -linn -Linnaea -Linnaean -Linnaeanism -linnaeite -Linne -linnet -lino -linolate -linoleic -linolein -linolenate -linolenic -linolenin -linoleum -linolic -linolin -linometer -linon -Linopteris -Linos -Linotype -linotype -linotyper -linotypist -linous -linoxin -linoxyn -linpin -Linsang -linseed -linsey -linstock -lint -lintel -linteled -linteling -linten -linter -lintern -lintie -lintless -lintonite -lintseed -lintwhite -linty -Linum -Linus -linwood -liny -Linyphia -Linyphiidae -liodermia -liomyofibroma -liomyoma -lion -lioncel -Lionel -lionel -lionesque -lioness -lionet -lionheart -lionhearted -lionheartedness -lionhood -lionism -lionizable -lionization -lionize -lionizer -lionlike -lionly -lionproof -lionship -Liothrix -Liotrichi -Liotrichidae -liotrichine -lip -lipa -lipacidemia -lipaciduria -Lipan -Liparian -liparian -liparid -Liparidae -Liparididae -Liparis -liparite -liparocele -liparoid -liparomphalus -liparous -lipase -lipectomy -lipemia -Lipeurus -lipide -lipin -lipless -liplet -liplike -lipoblast -lipoblastoma -Lipobranchia -lipocaic -lipocardiac -lipocele -lipoceratous -lipocere -lipochondroma -lipochrome -lipochromogen -lipoclasis -lipoclastic -lipocyte -lipodystrophia -lipodystrophy -lipoferous -lipofibroma -lipogenesis -lipogenetic -lipogenic -lipogenous -lipogram -lipogrammatic -lipogrammatism -lipogrammatist -lipography -lipohemia -lipoid -lipoidal -lipoidemia -lipoidic -lipolysis -lipolytic -lipoma -lipomata -lipomatosis -lipomatous -lipometabolic -lipometabolism -lipomorph -lipomyoma -lipomyxoma -lipopexia -lipophagic -lipophore -lipopod -Lipopoda -lipoprotein -liposarcoma -liposis -liposome -lipostomy -lipothymial -lipothymic -lipothymy -lipotrophic -lipotrophy -lipotropic -lipotropy -lipotype -Lipotyphla -lipovaccine -lipoxenous -lipoxeny -lipped -lippen -lipper -lipperings -Lippia -lippiness -lipping -lippitude -lippitudo -lippy -lipsanographer -lipsanotheca -lipstick -lipuria -lipwork -liquable -liquamen -liquate -liquation -liquefacient -liquefaction -liquefactive -liquefiable -liquefier -liquefy -liquesce -liquescence -liquescency -liquescent -liqueur -liquid -liquidable -Liquidambar -liquidamber -liquidate -liquidation -liquidator -liquidatorship -liquidity -liquidize -liquidizer -liquidless -liquidly -liquidness -liquidogenic -liquidogenous -liquidy -liquiform -liquor -liquorer -liquorish -liquorishly -liquorishness -liquorist -liquorless -lira -lirate -liration -lire -lirella -lirellate -lirelliform -lirelline -lirellous -Liriodendron -liripipe -liroconite -lis -Lisa -Lisbon -Lise -lisere -Lisette -lish -lisk -Lisle -lisle -lisp -lisper -lispingly -lispund -liss -Lissamphibia -lissamphibian -Lissencephala -lissencephalic -lissencephalous -Lissoflagellata -lissoflagellate -lissom -lissome -lissomely -lissomeness -lissotrichan -Lissotriches -lissotrichous -lissotrichy -List -list -listable -listed -listedness -listel -listen -listener -listening -lister -Listera -listerellosis -Listeria -Listerian -Listerine -Listerism -Listerize -listing -listless -listlessly -listlessness -listred -listwork -Lisuarte -lit -litaneutical -litany -litanywise -litas -litation -litch -litchi -lite -liter -literacy -literaily -literal -literalism -literalist -literalistic -literality -literalization -literalize -literalizer -literally -literalminded -literalmindedness -literalness -literarian -literariness -literary -literaryism -literate -literati -literation -literatist -literato -literator -literature -literatus -literose -literosity -lith -lithagogue -lithangiuria -lithanthrax -litharge -lithe -lithectasy -lithectomy -lithely -lithemia -lithemic -litheness -lithesome -lithesomeness -lithi -lithia -lithiasis -lithiastic -lithiate -lithic -lithifaction -lithification -lithify -lithite -lithium -litho -lithobiid -Lithobiidae -lithobioid -Lithobius -Lithocarpus -lithocenosis -lithochemistry -lithochromatic -lithochromatics -lithochromatographic -lithochromatography -lithochromography -lithochromy -lithoclase -lithoclast -lithoclastic -lithoclasty -lithoculture -lithocyst -lithocystotomy -Lithodes -lithodesma -lithodialysis -lithodid -Lithodidae -lithodomous -Lithodomus -lithofracteur -lithofractor -lithogenesis -lithogenetic -lithogenous -lithogeny -lithoglyph -lithoglypher -lithoglyphic -lithoglyptic -lithoglyptics -lithograph -lithographer -lithographic -lithographical -lithographically -lithographize -lithography -lithogravure -lithoid -lithoidite -litholabe -litholapaxy -litholatrous -litholatry -lithologic -lithological -lithologically -lithologist -lithology -litholysis -litholyte -litholytic -lithomancy -lithomarge -lithometer -lithonephria -lithonephritis -lithonephrotomy -lithontriptic -lithontriptist -lithontriptor -lithopedion -lithopedium -lithophagous -lithophane -lithophanic -lithophany -lithophilous -lithophone -lithophotography -lithophotogravure -lithophthisis -lithophyl -lithophyllous -lithophysa -lithophysal -lithophyte -lithophytic -lithophytous -lithopone -lithoprint -lithoscope -lithosian -lithosiid -Lithosiidae -Lithosiinae -lithosis -lithosol -lithosperm -lithospermon -lithospermous -Lithospermum -lithosphere -lithotint -lithotome -lithotomic -lithotomical -lithotomist -lithotomize -lithotomous -lithotomy -lithotony -lithotresis -lithotripsy -lithotriptor -lithotrite -lithotritic -lithotritist -lithotrity -lithotype -lithotypic -lithotypy -lithous -lithoxyl -lithsman -Lithuanian -Lithuanic -lithuresis -lithuria -lithy -liticontestation -litigable -litigant -litigate -litigation -litigationist -litigator -litigatory -litigiosity -litigious -litigiously -litigiousness -Litiopa -litiscontest -litiscontestation -litiscontestational -litmus -Litopterna -Litorina -Litorinidae -litorinoid -litotes -litra -Litsea -litster -litten -litter -litterateur -litterer -littermate -littery -little -littleleaf -littleneck -littleness -littlewale -littling -littlish -littoral -Littorella -littress -lituiform -lituite -Lituites -Lituitidae -Lituola -lituoline -lituoloid -liturate -liturgical -liturgically -liturgician -liturgics -liturgiological -liturgiologist -liturgiology -liturgism -liturgist -liturgistic -liturgistical -liturgize -liturgy -litus -lituus -Litvak -Lityerses -litz -Liukiu -Liv -livability -livable -livableness -live -liveborn -lived -livedo -livelihood -livelily -liveliness -livelong -lively -liven -liveness -liver -liverance -liverberry -livered -liverhearted -liverheartedness -liveried -liverish -liverishness -liverleaf -liverless -Liverpudlian -liverwort -liverwurst -livery -liverydom -liveryless -liveryman -livestock -Livian -livid -lividity -lividly -lividness -livier -living -livingless -livingly -livingness -livingstoneite -Livish -Livistona -Livonian -livor -livre -liwan -lixive -lixivial -lixiviate -lixiviation -lixiviator -lixivious -lixivium -Liyuan -Liz -Liza -lizard -lizardtail -Lizzie -llama -Llanberisslate -Llandeilo -Llandovery -llano -llautu -Lleu -Llew -Lloyd -Lludd -llyn -Lo -lo -Loa -loa -loach -load -loadage -loaded -loaden -loader -loading -loadless -loadpenny -loadsome -loadstone -loaf -loafer -loaferdom -loaferish -loafing -loafingly -loaflet -loaghtan -loam -loamily -loaminess -loaming -loamless -Loammi -loamy -loan -loanable -loaner -loanin -loanmonger -loanword -Loasa -Loasaceae -loasaceous -loath -loathe -loather -loathful -loathfully -loathfulness -loathing -loathingly -loathliness -loathly -loathness -loathsome -loathsomely -loathsomeness -Loatuko -loave -lob -Lobachevskian -lobal -Lobale -lobar -Lobaria -Lobata -Lobatae -lobate -lobated -lobately -lobation -lobber -lobbish -lobby -lobbyer -lobbyism -lobbyist -lobbyman -lobcock -lobe -lobectomy -lobed -lobefoot -lobefooted -lobeless -lobelet -Lobelia -Lobeliaceae -lobeliaceous -lobelin -lobeline -lobellated -lobfig -lobiform -lobigerous -lobing -lobiped -loblolly -lobo -lobola -lobopodium -Lobosa -lobose -lobotomy -lobscourse -lobscouse -lobscouser -lobster -lobstering -lobsterish -lobsterlike -lobsterproof -lobtail -lobular -Lobularia -lobularly -lobulate -lobulated -lobulation -lobule -lobulette -lobulose -lobulous -lobworm -loca -locable -local -locale -localism -localist -localistic -locality -localizable -localization -localize -localizer -locally -localness -locanda -Locarnist -Locarnite -Locarnize -Locarno -locate -location -locational -locative -locator -locellate -locellus -loch -lochage -lochan -lochetic -lochia -lochial -lochiocolpos -lochiocyte -lochiometra -lochiometritis -lochiopyra -lochiorrhagia -lochiorrhea -lochioschesis -Lochlin -lochometritis -lochoperitonitis -lochopyra -lochus -lochy -loci -lociation -lock -lockable -lockage -Lockatong -lockbox -locked -locker -lockerman -locket -lockful -lockhole -Lockian -Lockianism -locking -lockjaw -lockless -locklet -lockmaker -lockmaking -lockman -lockout -lockpin -Lockport -lockram -locksman -locksmith -locksmithery -locksmithing -lockspit -lockup -lockwork -locky -loco -locodescriptive -locofoco -Locofocoism -locoism -locomobile -locomobility -locomote -locomotility -locomotion -locomotive -locomotively -locomotiveman -locomotiveness -locomotivity -locomotor -locomotory -locomutation -locoweed -Locrian -Locrine -loculament -loculamentose -loculamentous -locular -loculate -loculated -loculation -locule -loculicidal -loculicidally -loculose -loculus -locum -locus -locust -locusta -locustal -locustberry -locustelle -locustid -Locustidae -locusting -locustlike -locution -locutor -locutorship -locutory -lod -Loddigesia -lode -lodemanage -lodesman -lodestar -lodestone -lodestuff -lodge -lodgeable -lodged -lodgeful -lodgeman -lodgepole -lodger -lodgerdom -lodging -lodginghouse -lodgings -lodgment -Lodha -lodicule -Lodoicea -Lodowic -Lodowick -Lodur -Loegria -loess -loessal -loessial -loessic -loessland -loessoid -lof -lofstelle -loft -lofter -loftily -loftiness -lofting -loftless -loftman -loftsman -lofty -log -loganberry -Logania -Loganiaceae -loganiaceous -loganin -logaoedic -logarithm -logarithmal -logarithmetic -logarithmetical -logarithmetically -logarithmic -logarithmical -logarithmically -logarithmomancy -logbook -logcock -loge -logeion -logeum -loggat -logged -logger -loggerhead -loggerheaded -loggia -loggin -logging -loggish -loghead -logheaded -logia -logic -logical -logicalist -logicality -logicalization -logicalize -logically -logicalness -logicaster -logician -logicism -logicist -logicity -logicize -logicless -logie -login -logion -logistic -logistical -logistician -logistics -logium -loglet -loglike -logman -logocracy -logodaedaly -logogogue -logogram -logogrammatic -logograph -logographer -logographic -logographical -logographically -logography -logogriph -logogriphic -logoi -logolatry -logology -logomach -logomacher -logomachic -logomachical -logomachist -logomachize -logomachy -logomancy -logomania -logomaniac -logometer -logometric -logometrical -logometrically -logopedia -logopedics -logorrhea -logos -logothete -logotype -logotypy -Logres -Logria -Logris -logroll -logroller -logrolling -logway -logwise -logwood -logwork -logy -lohan -Lohana -Lohar -lohoch -loimic -loimography -loimology -loin -loincloth -loined -loir -Lois -Loiseleuria -loiter -loiterer -loiteringly -loiteringness -loka -lokao -lokaose -lokapala -loke -loket -lokiec -Lokindra -Lokman -Lola -Loliginidae -Loligo -Lolium -loll -Lollard -Lollardian -Lollardism -Lollardist -Lollardize -Lollardlike -Lollardry -Lollardy -loller -lollingite -lollingly -lollipop -lollop -lollopy -lolly -Lolo -loma -lomastome -lomatine -lomatinous -Lomatium -Lombard -lombard -Lombardeer -Lombardesque -Lombardian -Lombardic -lomboy -Lombrosian -loment -lomentaceous -Lomentaria -lomentariaceous -lomentum -lomita -lommock -Lonchocarpus -Lonchopteridae -Londinensian -Londoner -Londonese -Londonesque -Londonian -Londonish -Londonism -Londonization -Londonize -Londony -Londres -lone -lonelihood -lonelily -loneliness -lonely -loneness -lonesome -lonesomely -lonesomeness -long -longa -longan -longanimity -longanimous -Longaville -longbeak -longbeard -longboat -longbow -longcloth -longe -longear -longer -longeval -longevity -longevous -longfelt -longfin -longful -longhair -longhand -longhead -longheaded -longheadedly -longheadedness -longhorn -longicaudal -longicaudate -longicone -longicorn -Longicornia -longilateral -longilingual -longiloquence -longimanous -longimetric -longimetry -longing -longingly -longingness -Longinian -longinquity -longipennate -longipennine -longirostral -longirostrate -longirostrine -Longirostrines -longisection -longish -longitude -longitudinal -longitudinally -longjaw -longleaf -longlegs -longly -longmouthed -longness -Longobard -Longobardi -Longobardian -Longobardic -longs -longshanks -longshore -longshoreman -longsome -longsomely -longsomeness -longspun -longspur -longtail -longue -longulite -longway -longways -longwise -longwool -longwork -longwort -Lonhyn -Lonicera -Lonk -lonquhard -lontar -loo -looby -lood -loof -loofah -loofie -loofness -look -looker -looking -lookout -lookum -loom -loomer -loomery -looming -loon -loonery -looney -loony -loop -looper -loopful -loophole -looping -loopist -looplet -looplike -loopy -loose -loosely -loosemouthed -loosen -loosener -looseness -looser -loosestrife -loosing -loosish -loot -lootable -looten -looter -lootie -lootiewallah -lootsman -lop -lope -loper -Lopezia -lophiid -Lophiidae -lophine -Lophiodon -lophiodont -Lophiodontidae -lophiodontoid -Lophiola -Lophiomyidae -Lophiomyinae -Lophiomys -lophiostomate -lophiostomous -lophobranch -lophobranchiate -Lophobranchii -lophocalthrops -lophocercal -Lophocome -Lophocomi -Lophodermium -lophodont -Lophophora -lophophoral -lophophore -Lophophorinae -lophophorine -Lophophorus -lophophytosis -Lophopoda -Lophornis -Lophortyx -lophosteon -lophotriaene -lophotrichic -lophotrichous -Lophura -lopolith -loppard -lopper -loppet -lopping -loppy -lopseed -lopsided -lopsidedly -lopsidedness -lopstick -loquacious -loquaciously -loquaciousness -loquacity -loquat -loquence -loquent -loquently -Lora -lora -loral -loran -lorandite -loranskite -Loranthaceae -loranthaceous -Loranthus -lorarius -lorate -lorcha -Lord -lord -lording -lordkin -lordless -lordlet -lordlike -lordlily -lordliness -lordling -lordly -lordolatry -lordosis -lordotic -lordship -lordwood -lordy -lore -loreal -lored -loreless -Loren -Lorenzan -lorenzenite -Lorenzo -Lorettine -lorettoite -lorgnette -Lori -lori -loric -lorica -loricarian -Loricariidae -loricarioid -Loricata -loricate -Loricati -lorication -loricoid -Lorien -lorikeet -lorilet -lorimer -loriot -loris -Lorius -lormery -lorn -lornness -loro -Lorraine -Lorrainer -Lorrainese -lorriker -lorry -lors -lorum -lory -losable -losableness -lose -losel -loselism -losenger -loser -losh -losing -loss -lossenite -lossless -lossproof -lost -lostling -lostness -Lot -lot -Lota -lota -lotase -lote -lotebush -Lotharingian -lotic -lotiform -lotion -lotment -Lotophagi -lotophagous -lotophagously -lotrite -lots -Lotta -Lotte -lotter -lottery -Lottie -lotto -Lotuko -lotus -lotusin -lotuslike -Lou -louch -louchettes -loud -louden -loudering -loudish -loudly -loudmouthed -loudness -louey -lough -lougheen -Louie -Louiqa -Louis -Louisa -Louise -Louisiana -Louisianian -louisine -louk -Loukas -loukoum -loulu -lounder -lounderer -lounge -lounger -lounging -loungingly -loungy -Loup -loup -loupe -lour -lourdy -louse -louseberry -lousewort -lousily -lousiness -louster -lousy -lout -louter -louther -loutish -loutishly -loutishness -loutrophoros -louty -louvar -louver -louvered -louvering -louverwork -Louvre -lovability -lovable -lovableness -lovably -lovage -love -lovebird -loveflower -loveful -lovelass -loveless -lovelessly -lovelessness -lovelihead -lovelily -loveliness -loveling -lovelock -lovelorn -lovelornness -lovely -loveman -lovemate -lovemonger -loveproof -lover -loverdom -lovered -loverhood -lovering -loverless -loverliness -loverly -lovership -loverwise -lovesick -lovesickness -lovesome -lovesomely -lovesomeness -loveworth -loveworthy -loving -lovingly -lovingness -low -lowa -lowan -lowbell -lowborn -lowboy -lowbred -lowdah -lowder -loweite -Lowell -lower -lowerable -lowerclassman -lowerer -lowering -loweringly -loweringness -lowermost -lowery -lowigite -lowish -lowishly -lowishness -lowland -lowlander -lowlily -lowliness -lowly -lowmen -lowmost -lown -lowness -lownly -lowth -Lowville -lowwood -lowy -lox -loxia -loxic -Loxiinae -loxoclase -loxocosm -loxodograph -Loxodon -loxodont -Loxodonta -loxodontous -loxodrome -loxodromic -loxodromical -loxodromically -loxodromics -loxodromism -Loxolophodon -loxolophodont -Loxomma -loxophthalmus -Loxosoma -Loxosomidae -loxotic -loxotomy -loy -loyal -loyalism -loyalist -loyalize -loyally -loyalness -loyalty -Loyd -Loyolism -Loyolite -lozenge -lozenged -lozenger -lozengeways -lozengewise -lozengy -Lu -Luba -lubber -lubbercock -Lubberland -lubberlike -lubberliness -lubberly -lube -lubra -lubric -lubricant -lubricate -lubrication -lubricational -lubricative -lubricator -lubricatory -lubricious -lubricity -lubricous -lubrifaction -lubrification -lubrify -lubritorian -lubritorium -Luc -Lucan -Lucania -lucanid -Lucanidae -Lucanus -lucarne -Lucayan -lucban -Lucchese -luce -lucence -lucency -lucent -Lucentio -lucently -Luceres -lucern -lucernal -Lucernaria -lucernarian -Lucernariidae -lucerne -lucet -Luchuan -Lucia -Lucian -Luciana -lucible -lucid -lucida -lucidity -lucidly -lucidness -lucifee -Lucifer -luciferase -Luciferian -Luciferidae -luciferin -luciferoid -luciferous -luciferously -luciferousness -lucific -luciform -lucifugal -lucifugous -lucigen -Lucile -Lucilia -lucimeter -Lucina -Lucinacea -Lucinda -Lucinidae -lucinoid -Lucite -Lucius -lucivee -luck -lucken -luckful -luckie -luckily -luckiness -luckless -lucklessly -lucklessness -Lucknow -lucky -lucration -lucrative -lucratively -lucrativeness -lucre -Lucrece -Lucretia -Lucretian -Lucretius -lucriferous -lucriferousness -lucrific -lucrify -Lucrine -luctation -luctiferous -luctiferousness -lucubrate -lucubration -lucubrator -lucubratory -lucule -luculent -luculently -Lucullan -lucullite -Lucuma -lucumia -Lucumo -lucumony -Lucy -lucy -ludden -Luddism -Luddite -Ludditism -ludefisk -Ludgate -Ludgathian -Ludgatian -Ludian -ludibrious -ludibry -ludicropathetic -ludicroserious -ludicrosity -ludicrosplenetic -ludicrous -ludicrously -ludicrousness -ludification -ludlamite -Ludlovian -Ludlow -ludo -Ludolphian -Ludwig -ludwigite -lue -Luella -lues -luetic -luetically -lufberry -lufbery -luff -Luffa -Lug -lug -Luganda -luge -luger -luggage -luggageless -luggar -lugged -lugger -luggie -Luggnagg -lugmark -Lugnas -lugsail -lugsome -lugubriosity -lugubrious -lugubriously -lugubriousness -lugworm -luhinga -Lui -Luian -Luigi -luigino -Luis -Luiseno -Luite -lujaurite -Lukas -Luke -luke -lukely -lukeness -lukewarm -lukewarmish -lukewarmly -lukewarmness -lukewarmth -Lula -lulab -lull -lullaby -luller -Lullian -lulliloo -lullingly -Lulu -lulu -Lum -lum -lumachel -lumbaginous -lumbago -lumbang -lumbar -lumbarization -lumbayao -lumber -lumberdar -lumberdom -lumberer -lumbering -lumberingly -lumberingness -lumberjack -lumberless -lumberly -lumberman -lumbersome -lumberyard -lumbocolostomy -lumbocolotomy -lumbocostal -lumbodorsal -lumbodynia -lumbosacral -lumbovertebral -lumbrical -lumbricalis -Lumbricidae -lumbriciform -lumbricine -lumbricoid -lumbricosis -Lumbricus -lumbrous -lumen -luminaire -Luminal -luminal -luminance -luminant -luminarious -luminarism -luminarist -luminary -luminate -lumination -luminative -luminator -lumine -luminesce -luminescence -luminescent -luminiferous -luminificent -luminism -luminist -luminologist -luminometer -luminosity -luminous -luminously -luminousness -lummox -lummy -lump -lumper -lumpet -lumpfish -lumpily -lumpiness -lumping -lumpingly -lumpish -lumpishly -lumpishness -lumpkin -lumpman -lumpsucker -lumpy -luna -lunacy -lunambulism -lunar -lunare -Lunaria -lunarian -lunarist -lunarium -lunary -lunate -lunatellus -lunately -lunatic -lunatically -lunation -lunatize -lunatum -lunch -luncheon -luncheoner -luncheonette -luncheonless -luncher -lunchroom -Lunda -Lundinarium -lundress -lundyfoot -lune -Lunel -lunes -lunette -lung -lunge -lunged -lungeous -lunger -lungfish -lungflower -lungful -lungi -lungie -lungis -lungless -lungmotor -lungsick -lungworm -lungwort -lungy -lunicurrent -luniform -lunisolar -lunistice -lunistitial -lunitidal -Lunka -lunkhead -lunn -lunoid -lunt -lunula -lunular -Lunularia -lunulate -lunulated -lunule -lunulet -lunulite -Lunulites -Luo -lupanarian -lupanine -lupe -lupeol -lupeose -Lupercal -Lupercalia -Lupercalian -Luperci -lupetidine -lupicide -Lupid -lupiform -lupinaster -lupine -lupinin -lupinine -lupinosis -lupinous -Lupinus -lupis -lupoid -lupous -lupulic -lupulin -lupuline -lupulinic -lupulinous -lupulinum -lupulus -lupus -lupuserythematosus -Lur -lura -lural -lurch -lurcher -lurchingfully -lurchingly -lurchline -lurdan -lurdanism -lure -lureful -lurement -lurer -luresome -lurg -lurgworm -Luri -lurid -luridity -luridly -luridness -luringly -lurk -lurker -lurkingly -lurkingness -lurky -lurrier -lurry -Lusatian -Luscinia -luscious -lusciously -lusciousness -lush -Lushai -lushburg -Lushei -lusher -lushly -lushness -lushy -Lusiad -Lusian -Lusitania -Lusitanian -lusk -lusky -lusory -lust -luster -lusterer -lusterless -lusterware -lustful -lustfully -lustfulness -lustihead -lustily -lustiness -lustless -lustra -lustral -lustrant -lustrate -lustration -lustrative -lustratory -lustreless -lustrical -lustrification -lustrify -lustrine -lustring -lustrous -lustrously -lustrousness -lustrum -lusty -lut -lutaceous -lutanist -lutany -Lutao -lutation -Lutayo -lute -luteal -lutecia -lutecium -lutein -luteinization -luteinize -lutelet -lutemaker -lutemaking -luteo -luteocobaltic -luteofulvous -luteofuscescent -luteofuscous -luteolin -luteolous -luteoma -luteorufescent -luteous -luteovirescent -luter -lutescent -lutestring -Lutetia -Lutetian -lutetium -luteway -lutfisk -Luther -Lutheran -Lutheranic -Lutheranism -Lutheranize -Lutheranizer -Lutherism -Lutherist -luthern -luthier -lutianid -Lutianidae -lutianoid -Lutianus -lutidine -lutidinic -luting -lutist -Lutjanidae -Lutjanus -lutose -Lutra -Lutraria -Lutreola -lutrin -Lutrinae -lutrine -lutulence -lutulent -Luvaridae -Luvian -Luvish -Luwian -lux -luxate -luxation -luxe -Luxemburger -Luxemburgian -luxulianite -luxuriance -luxuriancy -luxuriant -luxuriantly -luxuriantness -luxuriate -luxuriation -luxurious -luxuriously -luxuriousness -luxurist -luxury -luxus -Luzula -Lwo -ly -lyam -lyard -Lyas -Lycaena -lycaenid -Lycaenidae -lycanthrope -lycanthropia -lycanthropic -lycanthropist -lycanthropize -lycanthropous -lycanthropy -lyceal -lyceum -Lychnic -Lychnis -lychnomancy -lychnoscope -lychnoscopic -Lycian -lycid -Lycidae -Lycium -Lycodes -Lycodidae -lycodoid -lycopene -Lycoperdaceae -lycoperdaceous -Lycoperdales -lycoperdoid -Lycoperdon -lycoperdon -Lycopersicon -lycopin -lycopod -lycopode -Lycopodiaceae -lycopodiaceous -Lycopodiales -Lycopodium -Lycopsida -Lycopsis -Lycopus -lycorine -Lycosa -lycosid -Lycosidae -lyctid -Lyctidae -Lyctus -Lycus -lyddite -Lydia -Lydian -lydite -lye -Lyencephala -lyencephalous -lyery -lygaeid -Lygaeidae -Lygeum -Lygodium -Lygosoma -lying -lyingly -Lymantria -lymantriid -Lymantriidae -lymhpangiophlebitis -Lymnaea -lymnaean -lymnaeid -Lymnaeidae -lymph -lymphad -lymphadenectasia -lymphadenectasis -lymphadenia -lymphadenitis -lymphadenoid -lymphadenoma -lymphadenopathy -lymphadenosis -lymphaemia -lymphagogue -lymphangeitis -lymphangial -lymphangiectasis -lymphangiectatic -lymphangiectodes -lymphangiitis -lymphangioendothelioma -lymphangiofibroma -lymphangiology -lymphangioma -lymphangiomatous -lymphangioplasty -lymphangiosarcoma -lymphangiotomy -lymphangitic -lymphangitis -lymphatic -lymphatical -lymphation -lymphatism -lymphatitis -lymphatolysin -lymphatolysis -lymphatolytic -lymphectasia -lymphedema -lymphemia -lymphenteritis -lymphoblast -lymphoblastic -lymphoblastoma -lymphoblastosis -lymphocele -lymphocyst -lymphocystosis -lymphocyte -lymphocythemia -lymphocytic -lymphocytoma -lymphocytomatosis -lymphocytosis -lymphocytotic -lymphocytotoxin -lymphodermia -lymphoduct -lymphogenic -lymphogenous -lymphoglandula -lymphogranuloma -lymphoid -lymphoidectomy -lymphology -lymphoma -lymphomatosis -lymphomatous -lymphomonocyte -lymphomyxoma -lymphopathy -lymphopenia -lymphopenial -lymphopoiesis -lymphopoietic -lymphoprotease -lymphorrhage -lymphorrhagia -lymphorrhagic -lymphorrhea -lymphosarcoma -lymphosarcomatosis -lymphosarcomatous -lymphosporidiosis -lymphostasis -lymphotaxis -lymphotome -lymphotomy -lymphotoxemia -lymphotoxin -lymphotrophic -lymphotrophy -lymphous -lymphuria -lymphy -lyncean -Lynceus -lynch -lynchable -lyncher -Lyncid -lyncine -Lyndon -Lynette -Lyngbyaceae -Lyngbyeae -Lynn -Lynne -Lynnette -lynnhaven -lynx -Lyomeri -lyomerous -Lyon -Lyonese -Lyonetia -lyonetiid -Lyonetiidae -Lyonnais -lyonnaise -Lyonnesse -lyophile -lyophilization -lyophilize -lyophobe -Lyopoma -Lyopomata -lyopomatous -lyotrope -lypemania -Lyperosia -lypothymia -lyra -Lyraid -lyrate -lyrated -lyrately -lyraway -lyre -lyrebird -lyreflower -lyreman -lyretail -lyric -lyrical -lyrically -lyricalness -lyrichord -lyricism -lyricist -lyricize -Lyrid -lyriform -lyrism -lyrist -Lyrurus -lys -Lysander -lysate -lyse -Lysenkoism -lysidine -lysigenic -lysigenous -lysigenously -Lysiloma -Lysimachia -Lysimachus -lysimeter -lysin -lysine -lysis -Lysistrata -lysogen -lysogenesis -lysogenetic -lysogenic -lysozyme -lyssa -lyssic -lyssophobia -lyterian -Lythraceae -lythraceous -Lythrum -lytic -lytta -lyxose -M -m -Ma -ma -maam -maamselle -Maarten -Mab -Maba -Mabel -Mabellona -mabi -Mabinogion -mabolo -Mac -mac -macaasim -macabre -macabresque -Macaca -macaco -Macacus -macadam -Macadamia -macadamite -macadamization -macadamize -macadamizer -Macaglia -macan -macana -Macanese -macao -macaque -Macaranga -Macarani -Macareus -macarism -macarize -macaroni -macaronic -macaronical -macaronically -macaronicism -macaronism -macaroon -Macartney -Macassar -Macassarese -macaw -Macbeth -Maccabaeus -Maccabean -Maccabees -maccaboy -macco -maccoboy -Macduff -mace -macedoine -Macedon -Macedonian -Macedonic -macehead -maceman -macer -macerate -macerater -maceration -Macflecknoe -machairodont -Machairodontidae -Machairodontinae -Machairodus -machan -machar -machete -Machetes -machi -Machiavel -Machiavellian -Machiavellianism -Machiavellianly -Machiavellic -Machiavellism -machiavellist -Machiavellistic -machicolate -machicolation -machicoulis -Machicui -machila -Machilidae -Machilis -machin -machinability -machinable -machinal -machinate -machination -machinator -machine -machineful -machineless -machinelike -machinely -machineman -machinemonger -machiner -machinery -machinification -machinify -machinism -machinist -machinization -machinize -machinoclast -machinofacture -machinotechnique -machinule -Machogo -machopolyp -machree -macies -Macigno -macilence -macilency -macilent -mack -mackenboy -mackerel -mackereler -mackereling -Mackinaw -mackins -mackintosh -mackintoshite -mackle -macklike -macle -Macleaya -macled -Maclura -Maclurea -maclurin -Macmillanite -maco -Macon -maconite -Macracanthorhynchus -macracanthrorhynchiasis -macradenous -macrame -macrander -macrandrous -macrauchene -Macrauchenia -macraucheniid -Macraucheniidae -macraucheniiform -macrauchenioid -macrencephalic -macrencephalous -macro -macroanalysis -macroanalyst -macroanalytical -macrobacterium -macrobian -macrobiosis -macrobiote -macrobiotic -macrobiotics -Macrobiotus -macroblast -macrobrachia -macrocarpous -Macrocentrinae -Macrocentrus -macrocephalia -macrocephalic -macrocephalism -macrocephalous -macrocephalus -macrocephaly -macrochaeta -macrocheilia -Macrochelys -macrochemical -macrochemically -macrochemistry -Macrochira -macrochiran -Macrochires -macrochiria -Macrochiroptera -macrochiropteran -macrocladous -macroclimate -macroclimatic -macrococcus -macrocoly -macroconidial -macroconidium -macroconjugant -macrocornea -macrocosm -macrocosmic -macrocosmical -macrocosmology -macrocosmos -macrocrystalline -macrocyst -Macrocystis -macrocyte -macrocythemia -macrocytic -macrocytosis -macrodactyl -macrodactylia -macrodactylic -macrodactylism -macrodactylous -macrodactyly -macrodiagonal -macrodomatic -macrodome -macrodont -macrodontia -macrodontism -macroelement -macroergate -macroevolution -macrofarad -macrogamete -macrogametocyte -macrogamy -macrogastria -macroglossate -macroglossia -macrognathic -macrognathism -macrognathous -macrogonidium -macrograph -macrographic -macrography -macrolepidoptera -macrolepidopterous -macrology -macromandibular -macromania -macromastia -macromazia -macromelia -macromeral -macromere -macromeric -macromerite -macromeritic -macromesentery -macrometer -macromethod -macromolecule -macromyelon -macromyelonal -macron -macronuclear -macronucleus -macronutrient -macropetalous -macrophage -macrophagocyte -macrophagus -Macrophoma -macrophotograph -macrophotography -macrophyllous -macrophysics -macropia -macropinacoid -macropinacoidal -macroplankton -macroplasia -macroplastia -macropleural -macropodia -Macropodidae -Macropodinae -macropodine -macropodous -macroprism -macroprosopia -macropsia -macropteran -macropterous -Macropus -Macropygia -macropyramid -macroreaction -Macrorhamphosidae -Macrorhamphosus -macrorhinia -Macrorhinus -macroscelia -Macroscelides -macroscian -macroscopic -macroscopical -macroscopically -macroseism -macroseismic -macroseismograph -macrosepalous -macroseptum -macrosmatic -macrosomatia -macrosomatous -macrosomia -macrosplanchnic -macrosporange -macrosporangium -macrospore -macrosporic -Macrosporium -macrosporophore -macrosporophyl -macrosporophyll -Macrostachya -macrostomatous -macrostomia -macrostructural -macrostructure -macrostylospore -macrostylous -macrosymbiont -macrothere -Macrotheriidae -macrotherioid -Macrotherium -macrotherm -macrotia -macrotin -Macrotolagus -macrotome -macrotone -macrotous -macrourid -Macrouridae -Macrourus -Macrozamia -macrozoogonidium -macrozoospore -Macrura -macrural -macruran -macruroid -macrurous -mactation -Mactra -Mactridae -mactroid -macuca -macula -macular -maculate -maculated -maculation -macule -maculicole -maculicolous -maculiferous -maculocerebral -maculopapular -maculose -Macusi -macuta -mad -Madagascan -Madagascar -Madagascarian -Madagass -madam -madame -madapollam -madarosis -madarotic -madbrain -madbrained -madcap -madden -maddening -maddeningly -maddeningness -madder -madderish -madderwort -madding -maddingly -maddish -maddle -made -Madecase -madefaction -madefy -Madegassy -Madeira -Madeiran -Madeline -madeline -Madelon -madescent -Madge -madhouse -madhuca -Madhva -Madi -Madia -madid -madidans -Madiga -madisterium -madling -madly -madman -madnep -madness -mado -Madoc -Madonna -Madonnahood -Madonnaish -Madonnalike -madoqua -Madotheca -madrague -Madras -madrasah -Madrasi -madreperl -Madrepora -Madreporacea -madreporacean -Madreporaria -madreporarian -madrepore -madreporian -madreporic -madreporiform -madreporite -madreporitic -Madrid -madrier -madrigal -madrigaler -madrigaletto -madrigalian -madrigalist -Madrilene -Madrilenian -madrona -madship -madstone -Madurese -maduro -madweed -madwoman -madwort -mae -Maeandra -Maeandrina -maeandrine -maeandriniform -maeandrinoid -maeandroid -Maecenas -Maecenasship -maegbote -Maelstrom -Maemacterion -maenad -maenadic -maenadism -maenaite -Maenalus -Maenidae -Maeonian -Maeonides -maestri -maestro -maffia -maffick -mafficker -maffle -mafflin -mafic -mafoo -mafura -mag -Maga -Magadhi -magadis -magadize -Magahi -Magalensia -magani -magas -magazinable -magazinage -magazine -magazinelet -magaziner -magazinette -magazinish -magazinism -magazinist -magaziny -Magdalen -Magdalene -Magdalenian -mage -Magellan -Magellanian -Magellanic -magenta -magged -Maggie -maggle -maggot -maggotiness -maggotpie -maggoty -Maggy -Magh -Maghi -Maghrib -Maghribi -Magi -magi -Magian -Magianism -magic -magical -magicalize -magically -magicdom -magician -magicianship -magicked -magicking -Magindanao -magiric -magirics -magirist -magiristic -magirological -magirologist -magirology -Magism -magister -magisterial -magisteriality -magisterially -magisterialness -magistery -magistracy -magistral -magistrality -magistrally -magistrand -magistrant -magistrate -magistrateship -magistratic -magistratical -magistratically -magistrative -magistrature -Maglemose -Maglemosean -Maglemosian -magma -magmatic -magnanimity -magnanimous -magnanimously -magnanimousness -magnascope -magnascopic -magnate -magnecrystallic -magnelectric -magneoptic -magnes -magnesia -magnesial -magnesian -magnesic -magnesioferrite -magnesite -magnesium -magnet -magneta -magnetic -magnetical -magnetically -magneticalness -magnetician -magnetics -magnetiferous -magnetification -magnetify -magnetimeter -magnetism -magnetist -magnetite -magnetitic -magnetizability -magnetizable -magnetization -magnetize -magnetizer -magneto -magnetobell -magnetochemical -magnetochemistry -magnetod -magnetodynamo -magnetoelectric -magnetoelectrical -magnetoelectricity -magnetogenerator -magnetogram -magnetograph -magnetographic -magnetoid -magnetomachine -magnetometer -magnetometric -magnetometrical -magnetometrically -magnetometry -magnetomotive -magnetomotor -magneton -magnetooptic -magnetooptical -magnetooptics -magnetophone -magnetophonograph -magnetoplumbite -magnetoprinter -magnetoscope -magnetostriction -magnetotelegraph -magnetotelephone -magnetotherapy -magnetotransmitter -magnetron -magnicaudate -magnicaudatous -magnifiable -magnific -magnifical -magnifically -Magnificat -magnification -magnificative -magnifice -magnificence -magnificent -magnificently -magnificentness -magnifico -magnifier -magnify -magniloquence -magniloquent -magniloquently -magniloquy -magnipotence -magnipotent -magnirostrate -magnisonant -magnitude -magnitudinous -magnochromite -magnoferrite -Magnolia -magnolia -Magnoliaceae -magnoliaceous -magnum -Magnus -Magog -magot -magpie -magpied -magpieish -magsman -maguari -maguey -Magyar -Magyaran -Magyarism -Magyarization -Magyarize -Mah -maha -mahaleb -mahalla -mahant -mahar -maharaja -maharajrana -maharana -maharanee -maharani -maharao -Maharashtri -maharawal -maharawat -mahatma -mahatmaism -Mahayana -Mahayanism -Mahayanist -Mahayanistic -Mahdi -Mahdian -Mahdiship -Mahdism -Mahdist -Mahesh -Mahi -Mahican -mahmal -Mahmoud -mahmudi -mahoe -mahoganize -mahogany -mahoitre -maholi -maholtine -Mahomet -Mahometry -mahone -Mahonia -Mahori -Mahound -mahout -Mahra -Mahran -Mahri -mahseer -mahua -mahuang -Maia -Maiacca -Maianthemum -maid -Maida -maidan -maiden -maidenhair -maidenhead -maidenhood -maidenish -maidenism -maidenlike -maidenliness -maidenly -maidenship -maidenweed -maidhood -Maidie -maidish -maidism -maidkin -maidlike -maidling -maidservant -Maidu -maidy -maiefic -maieutic -maieutical -maieutics -maigre -maiid -Maiidae -mail -mailable -mailbag -mailbox -mailclad -mailed -mailer -mailguard -mailie -maillechort -mailless -mailman -mailplane -maim -maimed -maimedly -maimedness -maimer -maimon -Maimonidean -Maimonist -main -Mainan -Maine -mainferre -mainlander -mainly -mainmast -mainmortable -mainour -mainpast -mainpernable -mainpernor -mainpin -mainport -mainpost -mainprise -mains -mainsail -mainsheet -mainspring -mainstay -Mainstreeter -Mainstreetism -maint -maintain -maintainable -maintainableness -maintainer -maintainment -maintainor -maintenance -Maintenon -maintop -maintopman -maioid -Maioidea -maioidean -Maioli -Maiongkong -Maipure -mairatour -maire -maisonette -Maithili -maitlandite -Maitreya -Maius -maize -maizebird -maizenic -maizer -Maja -Majagga -majagua -Majesta -majestic -majestical -majestically -majesticalness -majesticness -majestious -majesty -majestyship -Majlis -majo -majolica -majolist -majoon -Major -major -majorate -majoration -Majorcan -majorette -Majorism -Majorist -Majoristic -majority -majorize -majorship -majuscular -majuscule -makable -Makah -Makaraka -Makari -Makassar -make -makebate -makedom -makefast -maker -makeress -makership -makeshift -makeshiftiness -makeshiftness -makeshifty -makeweight -makhzan -maki -makimono -making -makluk -mako -Makonde -makroskelic -Maku -Makua -makuk -mal -mala -malaanonang -Malabar -Malabarese -malabathrum -malacanthid -Malacanthidae -malacanthine -Malacanthus -Malacca -Malaccan -malaccident -Malaceae -malaceous -malachite -malacia -Malaclemys -Malaclypse -Malacobdella -Malacocotylea -malacoderm -Malacodermatidae -malacodermatous -Malacodermidae -malacodermous -malacoid -malacolite -malacological -malacologist -malacology -malacon -malacophilous -malacophonous -malacophyllous -malacopod -Malacopoda -malacopodous -malacopterygian -Malacopterygii -malacopterygious -Malacoscolices -Malacoscolicine -Malacosoma -Malacostraca -malacostracan -malacostracology -malacostracous -malactic -maladaptation -maladdress -maladive -maladjust -maladjusted -maladjustive -maladjustment -maladminister -maladministration -maladministrator -maladroit -maladroitly -maladroitness -maladventure -malady -Malaga -Malagasy -Malagigi -malagma -malaguena -malahack -malaise -malakin -malalignment -malambo -malandered -malanders -malandrous -malanga -malapaho -malapert -malapertly -malapertness -malapi -malapplication -malappointment -malappropriate -malappropriation -malaprop -malapropian -malapropish -malapropism -malapropoism -malapropos -Malapterurus -malar -malaria -malarial -malariaproof -malarin -malarioid -malariologist -malariology -malarious -malarkey -malaroma -malarrangement -malasapsap -malassimilation -malassociation -malate -malati -malattress -malax -malaxable -malaxage -malaxate -malaxation -malaxator -malaxerman -Malaxis -Malay -Malayalam -Malayalim -Malayan -Malayic -Malayize -Malayoid -Malaysian -malbehavior -malbrouck -malchite -Malchus -Malcolm -malconceived -malconduct -malconformation -malconstruction -malcontent -malcontented -malcontentedly -malcontentedness -malcontentism -malcontently -malcontentment -malconvenance -malcreated -malcultivation -maldeveloped -maldevelopment -maldigestion -maldirection -maldistribution -Maldivian -maldonite -malduck -Male -male -malease -maleate -Malebolge -Malebolgian -Malebolgic -Malebranchism -Malecite -maledicent -maledict -malediction -maledictive -maledictory -maleducation -malefaction -malefactor -malefactory -malefactress -malefical -malefically -maleficence -maleficent -maleficial -maleficiate -maleficiation -maleic -maleinoid -malella -Malemute -maleness -malengine -maleo -maleruption -Malesherbia -Malesherbiaceae -malesherbiaceous -malevolence -malevolency -malevolent -malevolently -malexecution -malfeasance -malfeasant -malfed -malformation -malformed -malfortune -malfunction -malgovernment -malgrace -malguzar -malguzari -malhonest -malhygiene -mali -malic -malice -maliceful -maliceproof -malicho -malicious -maliciously -maliciousness -malicorium -malidentification -maliferous -maliform -malign -malignance -malignancy -malignant -malignantly -malignation -maligner -malignify -malignity -malignly -malignment -malik -malikadna -malikala -malikana -Maliki -Malikite -maline -malines -malinfluence -malinger -malingerer -malingery -Malinois -malinowskite -malinstitution -malinstruction -malintent -malism -malison -malist -malistic -malkin -Malkite -mall -malladrite -mallangong -mallard -mallardite -malleability -malleabilization -malleable -malleableize -malleableized -malleableness -malleablize -malleal -mallear -malleate -malleation -mallee -Malleifera -malleiferous -malleiform -mallein -malleinization -malleinize -mallemaroking -mallemuck -malleoincudal -malleolable -malleolar -malleolus -mallet -malleus -Malling -Mallophaga -mallophagan -mallophagous -malloseismic -Mallotus -mallow -mallowwort -Malloy -mallum -mallus -malm -Malmaison -malmignatte -malmsey -malmstone -malmy -malnourished -malnourishment -malnutrite -malnutrition -malo -malobservance -malobservation -maloccluded -malocclusion -malodor -malodorant -malodorous -malodorously -malodorousness -malojilla -malonate -malonic -malonyl -malonylurea -Malope -maloperation -malorganization -malorganized -malouah -malpais -Malpighia -Malpighiaceae -malpighiaceous -Malpighian -malplaced -malpoise -malposed -malposition -malpractice -malpractioner -malpraxis -malpresentation -malproportion -malproportioned -malpropriety -malpublication -malreasoning -malrotation -malshapen -malt -maltable -maltase -malter -Maltese -maltha -Malthe -malthouse -Malthusian -Malthusianism -Malthusiast -maltiness -malting -maltman -Malto -maltobiose -maltodextrin -maltodextrine -maltolte -maltose -maltreat -maltreatment -maltreator -maltster -malturned -maltworm -malty -malunion -Malurinae -malurine -Malurus -Malus -Malva -Malvaceae -malvaceous -Malvales -malvasia -malvasian -Malvastrum -malversation -malverse -malvoisie -malvolition -Mam -mamba -mambo -mameliere -mamelonation -mameluco -Mameluke -Mamercus -Mamers -Mamertine -Mamie -Mamilius -mamlatdar -mamma -mammal -mammalgia -Mammalia -mammalian -mammaliferous -mammality -mammalogical -mammalogist -mammalogy -mammary -mammate -Mammea -mammectomy -mammee -mammer -Mammifera -mammiferous -mammiform -mammilla -mammillaplasty -mammillar -Mammillaria -mammillary -mammillate -mammillated -mammillation -mammilliform -mammilloid -mammitis -mammock -mammogen -mammogenic -mammogenically -mammon -mammondom -mammoniacal -mammonish -mammonism -mammonist -mammonistic -mammonite -mammonitish -mammonization -mammonize -mammonolatry -Mammonteus -mammoth -mammothrept -mammula -mammular -Mammut -Mammutidae -mammy -mamo -man -mana -Manabozho -manacle -Manacus -manage -manageability -manageable -manageableness -manageably -managee -manageless -management -managemental -manager -managerdom -manageress -managerial -managerially -managership -managery -manaism -manakin -manal -manas -Manasquan -manatee -Manatidae -manatine -manatoid -Manatus -manavel -manavelins -Manavendra -manbird -manbot -manche -Manchester -Manchesterdom -Manchesterism -Manchesterist -Manchestrian -manchet -manchineel -Manchu -Manchurian -mancinism -mancipable -mancipant -mancipate -mancipation -mancipative -mancipatory -mancipee -mancipium -manciple -mancipleship -mancipular -mancono -Mancunian -mancus -mand -Mandaean -Mandaeism -Mandaic -Mandaite -mandala -Mandalay -mandament -mandamus -Mandan -mandant -mandarah -mandarin -mandarinate -mandarindom -mandariness -mandarinic -mandarinism -mandarinize -mandarinship -mandatary -mandate -mandatee -mandation -mandative -mandator -mandatorily -mandatory -mandatum -Mande -mandelate -mandelic -mandible -mandibula -mandibular -mandibulary -Mandibulata -mandibulate -mandibulated -mandibuliform -mandibulohyoid -mandibulomaxillary -mandibulopharyngeal -mandibulosuspensorial -mandil -mandilion -Mandingan -Mandingo -mandola -mandolin -mandolinist -mandolute -mandom -mandora -mandore -mandra -mandragora -mandrake -mandrel -mandriarch -mandrill -mandrin -mandruka -mandua -manducable -manducate -manducation -manducatory -mandyas -mane -maned -manege -manei -maneless -manent -manerial -manes -manesheet -maness -Manetti -Manettia -maneuver -maneuverability -maneuverable -maneuverer -maneuvrability -maneuvrable -maney -Manfred -Manfreda -manful -manfully -manfulness -mang -manga -mangabeira -mangabey -mangal -manganapatite -manganate -manganblende -manganbrucite -manganeisen -manganese -manganesian -manganetic -manganhedenbergite -manganic -manganiferous -manganite -manganium -manganize -Manganja -manganocalcite -manganocolumbite -manganophyllite -manganosiderite -manganosite -manganostibiite -manganotantalite -manganous -manganpectolite -Mangar -Mangbattu -mange -mangeao -mangel -mangelin -manger -mangerite -mangi -Mangifera -mangily -manginess -mangle -mangleman -mangler -mangling -manglingly -mango -mangona -mangonel -mangonism -mangonization -mangonize -mangosteen -mangrass -mangrate -mangrove -Mangue -mangue -mangy -Mangyan -manhandle -Manhattan -Manhattanite -Manhattanize -manhead -manhole -manhood -mani -mania -maniable -maniac -maniacal -maniacally -manic -Manicaria -manicate -Manichaean -Manichaeanism -Manichaeanize -Manichaeism -Manichaeist -Manichee -manichord -manicole -manicure -manicurist -manid -Manidae -manienie -manifest -manifestable -manifestant -manifestation -manifestational -manifestationist -manifestative -manifestatively -manifested -manifestedness -manifester -manifestive -manifestly -manifestness -manifesto -manifold -manifolder -manifoldly -manifoldness -manifoldwise -maniform -manify -Manihot -manikin -manikinism -Manila -manila -manilla -manille -manioc -maniple -manipulable -manipular -manipulatable -manipulate -manipulation -manipulative -manipulatively -manipulator -manipulatory -Manipuri -Manis -manism -manist -manistic -manito -Manitoban -manitrunk -maniu -Manius -Maniva -manjak -Manjeri -mank -mankeeper -mankin -mankind -manless -manlessly -manlessness -manlet -manlihood -manlike -manlikely -manlikeness -manlily -manliness -manling -manly -Mann -manna -mannan -mannequin -manner -mannerable -mannered -mannerhood -mannering -mannerism -mannerist -manneristic -manneristical -manneristically -mannerize -mannerless -mannerlessness -mannerliness -mannerly -manners -mannersome -manness -Mannheimar -mannide -mannie -manniferous -mannify -mannikinism -manning -mannish -mannishly -mannishness -mannite -mannitic -mannitol -mannitose -mannoheptite -mannoheptitol -mannoheptose -mannoketoheptose -mannonic -mannosan -mannose -Manny -manny -mano -Manobo -manoc -manograph -Manolis -manometer -manometric -manometrical -manometry -manomin -manor -manorial -manorialism -manorialize -manorship -manoscope -manostat -manostatic -manque -manred -manrent -manroot -manrope -Mans -mansard -mansarded -manscape -manse -manservant -manship -mansion -mansional -mansionary -mansioned -mansioneer -mansionry -manslaughter -manslaughterer -manslaughtering -manslaughterous -manslayer -manslaying -manso -mansonry -manstealer -manstealing -manstopper -manstopping -mansuete -mansuetely -mansuetude -mant -manta -mantal -manteau -mantel -mantelet -manteline -mantelletta -mantellone -mantelpiece -mantelshelf -manteltree -manter -mantes -mantevil -mantic -manticism -manticore -mantid -Mantidae -mantilla -Mantinean -mantis -Mantisia -Mantispa -mantispid -Mantispidae -mantissa -mantistic -mantle -mantled -mantlet -mantling -Manto -manto -Mantodea -mantoid -Mantoidea -mantologist -mantology -mantra -mantrap -mantua -mantuamaker -mantuamaking -Mantuan -Mantzu -manual -manualii -manualism -manualist -manualiter -manually -manuao -manubrial -manubriated -manubrium -manucaption -manucaptor -manucapture -manucode -Manucodia -manucodiata -manuduce -manuduction -manuductor -manuductory -Manuel -manufactory -manufacturable -manufactural -manufacture -manufacturer -manufacturess -manuka -manul -manuma -manumea -manumisable -manumission -manumissive -manumit -manumitter -manumotive -manurable -manurage -manurance -manure -manureless -manurer -manurial -manurially -manus -manuscript -manuscriptal -manuscription -manuscriptural -manusina -manustupration -manutagi -Manvantara -manward -manwards -manway -manweed -manwise -Manx -Manxman -Manxwoman -many -manyberry -Manyema -manyfold -manyness -manyplies -manyroot -manyways -manywhere -manywise -manzana -manzanilla -manzanillo -manzanita -Manzas -manzil -mao -maomao -Maori -Maoridom -Maoriland -Maorilander -map -mapach -mapau -maphrian -mapland -maple -maplebush -mapo -mappable -mapper -Mappila -mappist -mappy -Mapuche -mapwise -maquahuitl -maquette -maqui -Maquiritare -maquis -Mar -mar -Mara -marabotin -marabou -Marabout -marabuto -maraca -Maracaibo -maracan -maracock -marae -Maragato -marajuana -marakapas -maral -maranatha -marang -Maranha -Maranham -Maranhao -Maranta -Marantaceae -marantaceous -marantic -marara -mararie -marasca -maraschino -marasmic -Marasmius -marasmoid -marasmous -marasmus -Maratha -Marathi -marathon -marathoner -Marathonian -Maratism -Maratist -Marattia -Marattiaceae -marattiaceous -Marattiales -maraud -marauder -maravedi -Maravi -marbelize -marble -marbled -marblehead -marbleheader -marblehearted -marbleization -marbleize -marbleizer -marblelike -marbleness -marbler -marbles -marblewood -marbling -marblish -marbly -marbrinus -Marc -marc -Marcan -marcantant -marcasite -marcasitic -marcasitical -Marcel -marcel -marceline -Marcella -marcella -marceller -Marcellian -Marcellianism -marcello -marcescence -marcescent -Marcgravia -Marcgraviaceae -marcgraviaceous -March -march -Marchantia -Marchantiaceae -marchantiaceous -Marchantiales -marcher -marchetto -marchioness -marchite -marchland -marchman -Marchmont -marchpane -Marci -Marcia -marcid -Marcionism -Marcionist -Marcionite -Marcionitic -Marcionitish -Marcionitism -Marcite -Marco -marco -Marcobrunner -Marcomanni -Marconi -marconi -marconigram -marconigraph -marconigraphy -marcor -Marcos -Marcosian -marcottage -mardy -mare -mareblob -Mareca -marechal -Marehan -Marek -marekanite -maremma -maremmatic -maremmese -marengo -marennin -Mareotic -Mareotid -Marfik -marfire -margarate -Margarelon -Margaret -margaric -margarin -margarine -margarita -margaritaceous -margarite -margaritiferous -margaritomancy -Margarodes -margarodid -Margarodinae -margarodite -Margaropus -margarosanite -margay -marge -margeline -margent -Margery -Margie -margin -marginal -marginalia -marginality -marginalize -marginally -marginate -marginated -margination -margined -Marginella -Marginellidae -marginelliform -marginiform -margining -marginirostral -marginoplasty -margosa -Margot -margravate -margrave -margravely -margravial -margraviate -margravine -Marguerite -marguerite -marhala -Marheshvan -Mari -Maria -maria -marialite -Mariamman -Marian -Mariana -Marianic -Marianne -Marianolatrist -Marianolatry -maricolous -marid -Marie -mariengroschen -marigenous -marigold -marigram -marigraph -marigraphic -marijuana -marikina -Marilla -Marilyn -marimba -marimonda -marina -marinade -marinate -marinated -marine -mariner -marinheiro -marinist -marinorama -Mario -mariola -Mariolater -Mariolatrous -Mariolatry -Mariology -Marion -marionette -Mariou -Mariposan -mariposite -maris -marish -marishness -Marist -maritage -marital -maritality -maritally -mariticidal -mariticide -Maritime -maritime -maritorious -mariupolite -marjoram -Marjorie -Mark -mark -marka -Markab -markdown -Markeb -marked -markedly -markedness -marker -market -marketability -marketable -marketableness -marketably -marketeer -marketer -marketing -marketman -marketstead -marketwise -markfieldite -Markgenossenschaft -markhor -marking -markka -markless -markman -markmoot -Marko -markshot -marksman -marksmanly -marksmanship -markswoman -markup -Markus -markweed -markworthy -marl -Marla -marlaceous -marlberry -marled -Marlena -marler -marli -marlin -marline -marlinespike -marlite -marlitic -marllike -marlock -Marlovian -Marlowesque -Marlowish -Marlowism -marlpit -marly -marm -marmalade -marmalady -Marmar -marmarization -marmarize -marmarosis -marmatite -marmelos -marmennill -marmit -marmite -marmolite -marmoraceous -marmorate -marmorated -marmoration -marmoreal -marmoreally -marmorean -marmoric -Marmosa -marmose -marmoset -marmot -Marmota -Marnix -maro -marocain -marok -Maronian -Maronist -Maronite -maroon -marooner -maroquin -Marpessa -marplot -marplotry -marque -marquee -Marquesan -marquess -marquetry -marquis -marquisal -marquisate -marquisdom -marquise -marquisette -marquisina -marquisotte -marquisship -marquito -marranism -marranize -marrano -marree -Marrella -marrer -marriable -marriage -marriageability -marriageable -marriageableness -marriageproof -married -marrier -marron -marrot -marrow -marrowbone -marrowed -marrowfat -marrowish -marrowless -marrowlike -marrowsky -marrowskyer -marrowy -Marrubium -Marrucinian -marry -marryer -marrying -marrymuffe -Mars -Marsala -Marsdenia -marseilles -Marsh -marsh -Marsha -marshal -marshalate -marshalcy -marshaler -marshaless -Marshall -marshalman -marshalment -Marshalsea -marshalship -marshberry -marshbuck -marshfire -marshflower -marshiness -marshite -marshland -marshlander -marshlike -marshlocks -marshman -marshwort -marshy -Marsi -Marsian -Marsilea -Marsileaceae -marsileaceous -Marsilia -Marsiliaceae -marsipobranch -Marsipobranchia -Marsipobranchiata -marsipobranchiate -Marsipobranchii -marsoon -Marspiter -Marssonia -Marssonina -marsupial -Marsupialia -marsupialian -marsupialization -marsupialize -marsupian -Marsupiata -marsupiate -marsupium -Mart -mart -martagon -martel -marteline -martellate -martellato -marten -martensite -martensitic -Martes -martext -Martha -martial -martialism -Martialist -martiality -martialization -martialize -martially -martialness -Martian -Martin -martin -martinet -martineta -martinetish -martinetishness -martinetism -martinetship -Martinez -martingale -martinico -Martinism -Martinist -Martinmas -martinoe -martite -Martius -martlet -Martu -Marty -Martyn -Martynia -Martyniaceae -martyniaceous -martyr -martyrdom -martyress -martyrium -martyrization -martyrize -martyrizer -martyrlike -martyrly -martyrolatry -martyrologic -martyrological -martyrologist -martyrologistic -martyrologium -martyrology -martyrship -martyry -maru -marvel -marvelment -marvelous -marvelously -marvelousness -marvelry -marver -Marvin -Marwari -Marxian -Marxianism -Marxism -Marxist -Mary -mary -marybud -Maryland -Marylander -Marylandian -Marymass -marysole -marzipan -mas -masa -Masai -Masanao -Masanobu -masaridid -Masarididae -Masaridinae -Masaris -mascagnine -mascagnite -mascally -mascara -mascaron -mascled -mascleless -mascot -mascotism -mascotry -Mascouten -mascularity -masculate -masculation -masculine -masculinely -masculineness -masculinism -masculinist -masculinity -masculinization -masculinize -masculist -masculofeminine -masculonucleus -masculy -masdeu -Masdevallia -mash -masha -mashal -mashallah -mashelton -masher -mashie -mashing -mashman -Mashona -Mashpee -mashru -mashy -masjid -mask -masked -Maskegon -maskelynite -masker -maskette -maskflower -Maskins -masklike -Maskoi -maskoid -maslin -masochism -masochist -masochistic -Mason -mason -masoned -masoner -masonic -Masonite -masonite -masonry -masonwork -masooka -masoola -Masora -Masorete -Masoreth -Masoretic -Maspiter -masque -masquer -masquerade -masquerader -Mass -mass -massa -massacre -massacrer -massage -massager -massageuse -massagist -Massalia -Massalian -massaranduba -massasauga -masse -massebah -massecuite -massedly -massedness -Massekhoth -massel -masser -masseter -masseteric -masseur -masseuse -massicot -massier -massiest -massif -Massilia -Massilian -massily -massiness -massive -massively -massiveness -massivity -masskanne -massless -masslike -Massmonger -massotherapy -massoy -massula -massy -mast -mastaba -mastadenitis -mastadenoma -mastage -mastalgia -mastatrophia -mastatrophy -mastauxe -mastax -mastectomy -masted -master -masterable -masterate -masterdom -masterer -masterful -masterfully -masterfulness -masterhood -masterless -masterlessness -masterlike -masterlily -masterliness -masterling -masterly -masterman -mastermind -masterous -masterpiece -masterproof -mastership -masterwork -masterwort -mastery -mastful -masthead -masthelcosis -mastic -masticability -masticable -masticate -mastication -masticator -masticatory -mastiche -masticic -Masticura -masticurous -mastiff -Mastigamoeba -mastigate -mastigium -mastigobranchia -mastigobranchial -Mastigophora -mastigophoran -mastigophoric -mastigophorous -mastigopod -Mastigopoda -mastigopodous -mastigote -mastigure -masting -mastitis -mastless -mastlike -mastman -mastocarcinoma -mastoccipital -mastochondroma -mastochondrosis -mastodon -mastodonsaurian -Mastodonsaurus -mastodont -mastodontic -Mastodontidae -mastodontine -mastodontoid -mastodynia -mastoid -mastoidal -mastoidale -mastoideal -mastoidean -mastoidectomy -mastoideocentesis -mastoideosquamous -mastoiditis -mastoidohumeral -mastoidohumeralis -mastoidotomy -mastological -mastologist -mastology -mastomenia -mastoncus -mastooccipital -mastoparietal -mastopathy -mastopexy -mastoplastia -mastorrhagia -mastoscirrhus -mastosquamose -mastotomy -mastotympanic -masturbate -masturbation -masturbational -masturbator -masturbatory -mastwood -masty -masu -Masulipatam -masurium -Mat -mat -Matabele -Matacan -matachin -matachina -mataco -matadero -matador -mataeological -mataeologue -mataeology -Matagalpa -Matagalpan -matagory -matagouri -matai -matajuelo -matalan -matamata -matamoro -matanza -matapan -matapi -Matar -matara -Matatua -Matawan -matax -matboard -match -matchable -matchableness -matchably -matchboard -matchboarding -matchbook -matchbox -matchcloth -matchcoat -matcher -matching -matchless -matchlessly -matchlessness -matchlock -matchmaker -matchmaking -matchmark -Matchotic -matchsafe -matchstick -matchwood -matchy -mate -mategriffon -matehood -mateless -matelessness -matelote -mately -mater -materfamilias -material -materialism -materialist -materialistic -materialistical -materialistically -materiality -materialization -materialize -materializee -materializer -materially -materialman -materialness -materiate -materiation -materiel -maternal -maternality -maternalize -maternally -maternalness -maternity -maternology -mateship -matey -matezite -matfelon -matgrass -math -mathematic -mathematical -mathematically -mathematicals -mathematician -mathematicize -mathematics -mathematize -mathemeg -mathes -mathesis -mathetic -Mathurin -matico -matildite -matin -matinal -matinee -mating -matins -matipo -matka -matless -matlockite -matlow -matmaker -matmaking -matra -matral -Matralia -matranee -matrass -matreed -matriarch -matriarchal -matriarchalism -matriarchate -matriarchic -matriarchist -matriarchy -matric -matrical -Matricaria -matrices -matricidal -matricide -matricula -matriculable -matriculant -matricular -matriculate -matriculation -matriculator -matriculatory -Matrigan -matriheritage -matriherital -matrilineal -matrilineally -matrilinear -matrilinearism -matriliny -matrilocal -matrimonial -matrimonially -matrimonious -matrimoniously -matrimony -matriotism -matripotestal -matris -matrix -matroclinic -matroclinous -matrocliny -matron -matronage -matronal -Matronalia -matronhood -matronism -matronize -matronlike -matronliness -matronly -matronship -matronymic -matross -Mats -matsu -matsuri -Matt -matta -mattamore -Mattapony -mattaro -mattboard -matte -matted -mattedly -mattedness -matter -matterate -matterative -matterful -matterfulness -matterless -mattery -Matteuccia -Matthaean -Matthew -Matthias -Matthieu -Matthiola -Matti -matti -matting -mattock -mattoid -mattoir -mattress -mattulla -Matty -maturable -maturate -maturation -maturative -mature -maturely -maturement -matureness -maturer -maturescence -maturescent -maturing -maturish -maturity -matutinal -matutinally -matutinary -matutine -matutinely -matweed -maty -matzo -matzoon -matzos -matzoth -mau -maucherite -Maud -maud -maudle -maudlin -maudlinism -maudlinize -maudlinly -maudlinwort -mauger -maugh -Maugis -maul -Maulawiyah -mauler -mauley -mauling -maulstick -Maumee -maumet -maumetry -Maun -maun -maund -maunder -maunderer -maundful -maundy -maunge -Maurandia -Maureen -Mauretanian -Mauri -Maurice -Maurist -Mauritia -Mauritian -Mauser -mausolea -mausoleal -mausolean -mausoleum -mauther -mauve -mauveine -mauvette -mauvine -maux -maverick -mavis -Mavortian -mavournin -mavrodaphne -maw -mawbound -mawk -mawkish -mawkishly -mawkishness -mawky -mawp -Max -maxilla -maxillar -maxillary -maxilliferous -maxilliform -maxilliped -maxillipedary -maxillodental -maxillofacial -maxillojugal -maxillolabial -maxillomandibular -maxillopalatal -maxillopalatine -maxillopharyngeal -maxillopremaxillary -maxilloturbinal -maxillozygomatic -maxim -maxima -maximal -Maximalism -Maximalist -maximally -maximate -maximation -maximed -maximist -maximistic -maximite -maximization -maximize -maximizer -Maximon -maximum -maximus -maxixe -maxwell -May -may -Maya -maya -Mayaca -Mayacaceae -mayacaceous -Mayan -Mayance -Mayathan -maybe -Maybird -Maybloom -maybush -Maycock -maycock -Mayda -mayday -Mayer -Mayey -Mayeye -Mayfair -mayfish -Mayflower -Mayfowl -mayhap -mayhappen -mayhem -Maying -Maylike -maynt -Mayo -Mayologist -mayonnaise -mayor -mayoral -mayoralty -mayoress -mayorship -Mayoruna -Maypole -Maypoling -maypop -maysin -mayten -Maytenus -Maythorn -Maytide -Maytime -mayweed -Maywings -Maywort -maza -mazalgia -Mazama -mazame -Mazanderani -mazapilite -mazard -mazarine -Mazatec -Mazateco -Mazda -Mazdaism -Mazdaist -Mazdakean -Mazdakite -Mazdean -maze -mazed -mazedly -mazedness -mazeful -mazement -mazer -Mazhabi -mazic -mazily -maziness -mazocacothesis -mazodynia -mazolysis -mazolytic -mazopathia -mazopathic -mazopexy -Mazovian -mazuca -mazuma -Mazur -Mazurian -mazurka -mazut -mazy -mazzard -Mazzinian -Mazzinianism -Mazzinist -mbalolo -Mbaya -mbori -Mbuba -Mbunda -Mcintosh -Mckay -Mdewakanton -me -meable -meaching -mead -meader -meadow -meadowbur -meadowed -meadower -meadowing -meadowink -meadowland -meadowless -meadowsweet -meadowwort -meadowy -meadsman -meager -meagerly -meagerness -meagre -meak -meal -mealable -mealberry -mealer -mealies -mealily -mealiness -mealless -mealman -mealmonger -mealmouth -mealmouthed -mealproof -mealtime -mealy -mealymouth -mealymouthed -mealymouthedly -mealymouthedness -mealywing -mean -meander -meanderingly -meandrine -meandriniform -meandrite -meandrous -meaned -meaner -meaning -meaningful -meaningfully -meaningless -meaninglessly -meaninglessness -meaningly -meaningness -meanish -meanly -meanness -meant -Meantes -meantone -meanwhile -mease -measle -measled -measledness -measles -measlesproof -measly -measondue -measurability -measurable -measurableness -measurably -measuration -measure -measured -measuredly -measuredness -measureless -measurelessly -measurelessness -measurely -measurement -measurer -measuring -meat -meatal -meatbird -meatcutter -meated -meathook -meatily -meatiness -meatless -meatman -meatometer -meatorrhaphy -meatoscope -meatoscopy -meatotome -meatotomy -meatus -meatworks -meaty -Mebsuta -Mecaptera -mecate -Mecca -Meccan -Meccano -Meccawee -Mechael -mechanal -mechanality -mechanalize -mechanic -mechanical -mechanicalism -mechanicalist -mechanicality -mechanicalization -mechanicalize -mechanically -mechanicalness -mechanician -mechanicochemical -mechanicocorpuscular -mechanicointellectual -mechanicotherapy -mechanics -mechanism -mechanist -mechanistic -mechanistically -mechanization -mechanize -mechanizer -mechanolater -mechanology -mechanomorphic -mechanomorphism -mechanotherapeutic -mechanotherapeutics -mechanotherapist -mechanotherapy -Mechir -Mechitaristican -Mechlin -mechoacan -meckelectomy -Meckelian -Mecklenburgian -mecodont -Mecodonta -mecometer -mecometry -mecon -meconic -meconidium -meconin -meconioid -meconium -meconology -meconophagism -meconophagist -Mecoptera -mecopteran -mecopteron -mecopterous -medal -medaled -medalet -medalist -medalize -medallary -medallic -medallically -medallion -medallionist -meddle -meddlecome -meddlement -meddler -meddlesome -meddlesomely -meddlesomeness -meddling -meddlingly -Mede -Medellin -Medeola -Media -media -mediacid -mediacy -mediad -mediaevalize -mediaevally -medial -medialization -medialize -medialkaline -medially -Median -median -medianic -medianimic -medianimity -medianism -medianity -medianly -mediant -mediastinal -mediastine -mediastinitis -mediastinotomy -mediastinum -mediate -mediately -mediateness -mediating -mediatingly -mediation -mediative -mediatization -mediatize -mediator -mediatorial -mediatorialism -mediatorially -mediatorship -mediatory -mediatress -mediatrice -mediatrix -Medic -medic -medicable -Medicago -medical -medically -medicament -medicamental -medicamentally -medicamentary -medicamentation -medicamentous -medicaster -medicate -medication -medicative -medicator -medicatory -Medicean -Medici -medicinable -medicinableness -medicinal -medicinally -medicinalness -medicine -medicinelike -medicinemonger -mediciner -medico -medicobotanical -medicochirurgic -medicochirurgical -medicodental -medicolegal -medicolegally -medicomania -medicomechanic -medicomechanical -medicomoral -medicophysical -medicopsychological -medicopsychology -medicostatistic -medicosurgical -medicotopographic -medicozoologic -mediety -Medieval -medieval -medievalism -medievalist -medievalistic -medievalize -medievally -medifixed -mediglacial -medimn -medimno -medimnos -medimnus -Medina -Medinilla -medino -medio -medioanterior -mediocarpal -medioccipital -mediocre -mediocrist -mediocrity -mediocubital -mediodepressed -mediodigital -mediodorsal -mediodorsally -mediofrontal -mediolateral -mediopalatal -mediopalatine -mediopassive -mediopectoral -medioperforate -mediopontine -medioposterior -mediosilicic -mediostapedial -mediotarsal -medioventral -medisance -medisect -medisection -Medish -Medism -meditant -meditate -meditating -meditatingly -meditation -meditationist -meditatist -meditative -meditatively -meditativeness -meditator -mediterranean -Mediterraneanism -Mediterraneanization -Mediterraneanize -mediterraneous -medithorax -Meditrinalia -meditullium -medium -mediumism -mediumistic -mediumization -mediumize -mediumship -medius -Medize -Medizer -medjidie -medlar -medley -Medoc -medregal -medrick -medrinaque -medulla -medullar -medullary -medullate -medullated -medullation -medullispinal -medullitis -medullization -medullose -Medusa -Medusaean -medusal -medusalike -medusan -medusiferous -medusiform -medusoid -meebos -meece -meed -meedless -Meehan -meek -meeken -meekhearted -meekheartedness -meekling -meekly -meekness -Meekoceras -Meeks -meered -meerkat -meerschaum -meese -meet -meetable -meeten -meeter -meeterly -meethelp -meethelper -meeting -meetinger -meetinghouse -meetly -meetness -Meg -megabar -megacephalia -megacephalic -megacephaly -megacerine -Megaceros -megacerotine -Megachile -megachilid -Megachilidae -Megachiroptera -megachiropteran -megachiropterous -megacolon -megacosm -megacoulomb -megacycle -megadont -Megadrili -megadynamics -megadyne -Megaera -megaerg -megafarad -megafog -megagamete -megagametophyte -megajoule -megakaryocyte -Megalactractus -Megaladapis -Megalaema -Megalaemidae -Megalania -megaleme -Megalensian -megalerg -Megalesia -Megalesian -megalesthete -megalethoscope -Megalichthyidae -Megalichthys -megalith -megalithic -Megalobatrachus -megaloblast -megaloblastic -megalocardia -megalocarpous -megalocephalia -megalocephalic -megalocephalous -megalocephaly -Megaloceros -megalochirous -megalocornea -megalocyte -megalocytosis -megalodactylia -megalodactylism -megalodactylous -Megalodon -megalodont -megalodontia -Megalodontidae -megaloenteron -megalogastria -megaloglossia -megalograph -megalography -megalohepatia -megalokaryocyte -megalomania -megalomaniac -megalomaniacal -megalomelia -Megalonychidae -Megalonyx -megalopa -megalopenis -megalophonic -megalophonous -megalophthalmus -megalopia -megalopic -Megalopidae -Megalopinae -megalopine -megaloplastocyte -megalopolis -megalopolitan -megalopolitanism -megalopore -megalops -megalopsia -Megaloptera -Megalopyge -Megalopygidae -Megalornis -Megalornithidae -megalosaur -megalosaurian -Megalosauridae -megalosauroid -Megalosaurus -megaloscope -megaloscopy -megalosphere -megalospheric -megalosplenia -megalosyndactyly -megaloureter -Megaluridae -Megamastictora -megamastictoral -megamere -megameter -megampere -Meganeura -Meganthropus -meganucleus -megaparsec -megaphone -megaphonic -megaphotographic -megaphotography -megaphyllous -Megaphyton -megapod -megapode -Megapodidae -Megapodiidae -Megapodius -megaprosopous -Megaptera -Megapterinae -megapterine -Megarensian -Megarhinus -Megarhyssa -Megarian -Megarianism -Megaric -megaron -megasclere -megascleric -megasclerous -megasclerum -megascope -megascopic -megascopical -megascopically -megaseism -megaseismic -megaseme -Megasoma -megasporange -megasporangium -megaspore -megasporic -megasporophyll -megasynthetic -megathere -megatherian -Megatheriidae -megatherine -megatherioid -Megatherium -megatherm -megathermic -megatheroid -megaton -megatype -megatypy -megavolt -megawatt -megaweber -megazooid -megazoospore -megerg -Meggy -megilp -megmho -megohm -megohmit -megohmmeter -megophthalmus -megotalc -Megrel -Megrez -megrim -megrimish -mehalla -mehari -meharist -Mehelya -mehmandar -Mehrdad -mehtar -mehtarship -Meibomia -Meibomian -meile -mein -meinie -meio -meiobar -meionite -meiophylly -meiosis -meiotaxy -meiotic -Meissa -Meistersinger -meith -Meithei -meizoseismal -meizoseismic -mejorana -Mekbuda -Mekhitarist -mekometer -mel -mela -melaconite -melada -meladiorite -melagabbro -melagra -melagranite -Melaleuca -melalgia -melam -melamed -melamine -melampodium -Melampsora -Melampsoraceae -Melampus -melampyritol -Melampyrum -melanagogal -melanagogue -melancholia -melancholiac -melancholic -melancholically -melancholily -melancholiness -melancholious -melancholiously -melancholiousness -melancholish -melancholist -melancholize -melancholomaniac -melancholy -melancholyish -Melanchthonian -Melanconiaceae -melanconiaceous -Melanconiales -Melanconium -melanemia -melanemic -Melanesian -melange -melanger -melangeur -Melania -melanian -melanic -melaniferous -Melaniidae -melanilin -melaniline -melanin -Melanippe -Melanippus -melanism -melanistic -melanite -melanitic -melanize -melano -melanoblast -melanocarcinoma -melanocerite -Melanochroi -Melanochroid -melanochroite -melanochroous -melanocomous -melanocrate -melanocratic -melanocyte -Melanodendron -melanoderma -melanodermia -melanodermic -Melanogaster -melanogen -Melanoi -melanoid -melanoidin -melanoma -melanopathia -melanopathy -melanophore -melanoplakia -Melanoplus -melanorrhagia -melanorrhea -Melanorrhoea -melanosarcoma -melanosarcomatosis -melanoscope -melanose -melanosed -melanosis -melanosity -melanospermous -melanotekite -melanotic -melanotrichous -melanous -melanterite -Melanthaceae -melanthaceous -Melanthium -melanure -melanuresis -melanuria -melanuric -melaphyre -Melas -melasma -melasmic -melassigenic -Melastoma -Melastomaceae -melastomaceous -melastomad -melatope -melaxuma -Melburnian -Melcarth -melch -Melchite -Melchora -meld -melder -meldometer -meldrop -mele -Meleager -Meleagridae -Meleagrina -Meleagrinae -meleagrine -Meleagris -melebiose -melee -melena -melene -melenic -Meles -Meletian -Meletski -melezitase -melezitose -Melia -Meliaceae -meliaceous -Meliadus -Melian -Melianthaceae -melianthaceous -Melianthus -meliatin -melibiose -melic -Melica -Melicent -melicera -meliceric -meliceris -melicerous -Melicerta -Melicertidae -melichrous -melicitose -Melicocca -melicraton -melilite -melilitite -melilot -Melilotus -Melinae -Melinda -meline -Melinis -melinite -Meliola -meliorability -meliorable -meliorant -meliorate -meliorater -melioration -meliorative -meliorator -meliorism -meliorist -melioristic -meliority -meliphagan -Meliphagidae -meliphagidan -meliphagous -meliphanite -Melipona -Meliponinae -meliponine -melisma -melismatic -melismatics -Melissa -melissyl -melissylic -Melitaea -melitemia -melithemia -melitis -melitose -melitriose -melittologist -melittology -melituria -melituric -mell -mellaginous -mellate -mellay -melleous -meller -Mellifera -melliferous -mellificate -mellification -mellifluence -mellifluent -mellifluently -mellifluous -mellifluously -mellifluousness -mellimide -mellisonant -mellisugent -mellit -mellitate -mellite -mellitic -Mellivora -Mellivorinae -mellivorous -mellon -mellonides -mellophone -mellow -mellowly -mellowness -mellowy -mellsman -Melocactus -melocoton -melodeon -melodia -melodial -melodially -melodic -melodica -melodically -melodicon -melodics -melodiograph -melodion -melodious -melodiously -melodiousness -melodism -melodist -melodize -melodizer -melodram -melodrama -melodramatic -melodramatical -melodramatically -melodramaticism -melodramatics -melodramatist -melodramatize -melodrame -melody -melodyless -meloe -melogram -Melogrammataceae -melograph -melographic -meloid -Meloidae -melologue -Melolontha -Melolonthidae -melolonthidan -Melolonthides -Melolonthinae -melolonthine -melomane -melomania -melomaniac -melomanic -melon -meloncus -Melonechinus -melongena -melongrower -melonist -melonite -Melonites -melonlike -melonmonger -melonry -melophone -melophonic -melophonist -melopiano -meloplast -meloplastic -meloplasty -melopoeia -melopoeic -melos -melosa -Melospiza -Melothria -melotragedy -melotragic -melotrope -melt -meltability -meltable -meltage -melted -meltedness -melteigite -melter -melters -melting -meltingly -meltingness -melton -Meltonian -Melungeon -Melursus -mem -member -membered -memberless -membership -membracid -Membracidae -membracine -membral -membrally -membrana -membranaceous -membranaceously -membranate -membrane -membraned -membraneless -membranelike -membranelle -membraneous -membraniferous -membraniform -membranin -Membranipora -Membraniporidae -membranocalcareous -membranocartilaginous -membranocoriaceous -membranocorneous -membranogenic -membranoid -membranology -membranonervous -membranosis -membranous -membranously -membranula -membranule -membretto -memento -meminna -Memnon -Memnonian -Memnonium -memo -memoir -memoirism -memoirist -memorabilia -memorability -memorable -memorableness -memorably -memoranda -memorandist -memorandize -memorandum -memorative -memoria -memorial -memorialist -memorialization -memorialize -memorializer -memorially -memoried -memorious -memorist -memorizable -memorization -memorize -memorizer -memory -memoryless -Memphian -Memphite -men -menaccanite -menaccanitic -menace -menaceable -menaceful -menacement -menacer -menacing -menacingly -menacme -menadione -menage -menagerie -menagerist -menald -Menangkabau -menarche -Menaspis -mend -mendable -mendacious -mendaciously -mendaciousness -mendacity -Mendaite -Mende -mendee -Mendelian -Mendelianism -Mendelianist -Mendelism -Mendelist -Mendelize -Mendelssohnian -Mendelssohnic -mendelyeevite -mender -Mendi -mendicancy -mendicant -mendicate -mendication -mendicity -mending -mendipite -mendole -mendozite -mends -meneghinite -menfolk -Menfra -meng -Mengwe -menhaden -menhir -menial -menialism -meniality -menially -Menic -menilite -meningeal -meninges -meningic -meningina -meningism -meningitic -meningitis -meningocele -meningocephalitis -meningocerebritis -meningococcal -meningococcemia -meningococcic -meningococcus -meningocortical -meningoencephalitis -meningoencephalocele -meningomalacia -meningomyclitic -meningomyelitis -meningomyelocele -meningomyelorrhaphy -meningorachidian -meningoradicular -meningorhachidian -meningorrhagia -meningorrhea -meningorrhoea -meningosis -meningospinal -meningotyphoid -meninting -meninx -meniscal -meniscate -menisciform -meniscitis -meniscoid -meniscoidal -Meniscotheriidae -Meniscotherium -meniscus -menisperm -Menispermaceae -menispermaceous -menispermine -Menispermum -Menkalinan -Menkar -Menkib -menkind -mennom -Mennonist -Mennonite -Menobranchidae -Menobranchus -menognath -menognathous -menologium -menology -menometastasis -Menominee -menopausal -menopause -menopausic -menophania -menoplania -Menopoma -Menorah -Menorhyncha -menorhynchous -menorrhagia -menorrhagic -menorrhagy -menorrhea -menorrheic -menorrhoea -menorrhoeic -menoschesis -menoschetic -menosepsis -menostasia -menostasis -menostatic -menostaxis -Menotyphla -menotyphlic -menoxenia -mensa -mensal -mensalize -mense -menseful -menseless -menses -Menshevik -Menshevism -Menshevist -mensk -menstrual -menstruant -menstruate -menstruation -menstruous -menstruousness -menstruum -mensual -mensurability -mensurable -mensurableness -mensurably -mensural -mensuralist -mensurate -mensuration -mensurational -mensurative -Ment -mentagra -mental -mentalis -mentalism -mentalist -mentalistic -mentality -mentalization -mentalize -mentally -mentary -mentation -Mentha -Menthaceae -menthaceous -menthadiene -menthane -menthene -menthenol -menthenone -menthol -mentholated -menthone -menthyl -menticide -menticultural -menticulture -mentiferous -mentiform -mentigerous -mentimeter -mentimutation -mention -mentionability -mentionable -mentionless -mentoanterior -mentobregmatic -mentocondylial -mentohyoid -mentolabial -mentomeckelian -mentonniere -mentoposterior -mentor -mentorial -mentorism -mentorship -mentum -Mentzelia -menu -Menura -Menurae -Menuridae -meny -Menyanthaceae -Menyanthaceous -Menyanthes -menyie -menzie -Menziesia -Meo -Mephisto -Mephistophelean -Mephistopheleanly -Mephistopheles -Mephistophelic -Mephistophelistic -mephitic -mephitical -Mephitinae -mephitine -mephitis -mephitism -Mer -Merak -meralgia -meraline -Merat -Meratia -merbaby -mercal -mercantile -mercantilely -mercantilism -mercantilist -mercantilistic -mercantility -mercaptal -mercaptan -mercaptides -mercaptids -mercapto -mercaptol -mercaptole -Mercator -Mercatorial -mercatorial -Mercedarian -Mercedes -Mercedinus -Mercedonius -mercenarily -mercenariness -mercenary -mercer -merceress -mercerization -mercerize -mercerizer -mercership -mercery -merch -merchandisable -merchandise -merchandiser -merchant -merchantable -merchantableness -merchanter -merchanthood -merchantish -merchantlike -merchantly -merchantman -merchantry -merchantship -merchet -Mercian -merciful -mercifully -mercifulness -merciless -mercilessly -mercilessness -merciment -mercurate -mercuration -Mercurean -mercurial -Mercurialis -mercurialism -mercuriality -mercurialization -mercurialize -mercurially -mercurialness -mercuriamines -mercuriammonium -Mercurian -mercuriate -mercuric -mercuride -mercurification -mercurify -Mercurius -mercurization -mercurize -Mercurochrome -mercurophen -mercurous -Mercury -mercy -mercyproof -merdivorous -mere -Meredithian -merel -merely -merenchyma -merenchymatous -meresman -merestone -meretricious -meretriciously -meretriciousness -meretrix -merfold -merfolk -merganser -merge -mergence -merger -mergh -Merginae -Mergulus -Mergus -meriah -mericarp -merice -Merida -meridian -Meridion -Meridionaceae -Meridional -meridional -meridionality -meridionally -meril -meringue -meringued -Merino -Meriones -meriquinoid -meriquinoidal -meriquinone -meriquinonic -meriquinonoid -merism -merismatic -merismoid -merist -meristele -meristelic -meristem -meristematic -meristematically -meristic -meristically -meristogenous -merit -meritable -merited -meritedly -meriter -meritful -meritless -meritmonger -meritmongering -meritmongery -meritorious -meritoriously -meritoriousness -merk -merkhet -merkin -merl -merle -merlette -merlin -merlon -Merlucciidae -Merluccius -mermaid -mermaiden -merman -Mermis -mermithaner -mermithergate -Mermithidae -mermithization -mermithized -mermithogyne -Mermnad -Mermnadae -mermother -mero -meroblastic -meroblastically -merocele -merocelic -merocerite -meroceritic -merocrystalline -merocyte -Merodach -merogamy -merogastrula -merogenesis -merogenetic -merogenic -merognathite -merogonic -merogony -merohedral -merohedric -merohedrism -meroistic -Meroitic -meromorphic -Meromyaria -meromyarian -merop -Merope -Meropes -meropia -Meropidae -meropidan -meroplankton -meroplanktonic -meropodite -meropoditic -Merops -merorganization -merorganize -meros -merosomal -Merosomata -merosomatous -merosome -merosthenic -Merostomata -merostomatous -merostome -merostomous -merosymmetrical -merosymmetry -merosystematic -merotomize -merotomy -merotropism -merotropy -Merovingian -meroxene -Merozoa -merozoite -merpeople -merribauks -merribush -Merril -merriless -merrily -merriment -merriness -merrow -merry -merrymake -merrymaker -merrymaking -merryman -merrymeeting -merrythought -merrytrotter -merrywing -merse -Mertensia -Merton -Merula -meruline -merulioid -Merulius -merveileux -merwinite -merwoman -Merychippus -merycism -merycismus -Merycoidodon -Merycoidodontidae -Merycopotamidae -Merycopotamus -Mes -mesa -mesabite -mesaconate -mesaconic -mesad -Mesadenia -mesadenia -mesail -mesal -mesalike -mesally -mesameboid -mesange -mesaortitis -mesaraic -mesaraical -mesarch -mesarteritic -mesarteritis -Mesartim -mesaticephal -mesaticephali -mesaticephalic -mesaticephalism -mesaticephalous -mesaticephaly -mesatipellic -mesatipelvic -mesatiskelic -mesaxonic -mescal -Mescalero -mescaline -mescalism -mesdames -mese -mesectoderm -mesem -Mesembryanthemaceae -Mesembryanthemum -mesembryo -mesembryonic -mesencephalic -mesencephalon -mesenchyma -mesenchymal -mesenchymatal -mesenchymatic -mesenchymatous -mesenchyme -mesendoderm -mesenna -mesenterial -mesenteric -mesenterical -mesenterically -mesenteriform -mesenteriolum -mesenteritic -mesenteritis -mesenteron -mesenteronic -mesentery -mesentoderm -mesepimeral -mesepimeron -mesepisternal -mesepisternum -mesepithelial -mesepithelium -mesethmoid -mesethmoidal -mesh -Meshech -meshed -meshrabiyeh -meshwork -meshy -mesiad -mesial -mesially -mesian -mesic -mesically -mesilla -mesiobuccal -mesiocervical -mesioclusion -mesiodistal -mesiodistally -mesiogingival -mesioincisal -mesiolabial -mesiolingual -mesion -mesioocclusal -mesiopulpal -mesioversion -Mesitae -Mesites -Mesitidae -mesitite -mesityl -mesitylene -mesitylenic -mesmerian -mesmeric -mesmerical -mesmerically -mesmerism -mesmerist -mesmerite -mesmerizability -mesmerizable -mesmerization -mesmerize -mesmerizee -mesmerizer -mesmeromania -mesmeromaniac -mesnality -mesnalty -mesne -meso -mesoappendicitis -mesoappendix -mesoarial -mesoarium -mesobar -mesobenthos -mesoblast -mesoblastema -mesoblastemic -mesoblastic -mesobranchial -mesobregmate -mesocaecal -mesocaecum -mesocardia -mesocardium -mesocarp -mesocentrous -mesocephal -mesocephalic -mesocephalism -mesocephalon -mesocephalous -mesocephaly -mesochilium -mesochondrium -mesochroic -mesocoele -mesocoelian -mesocoelic -mesocolic -mesocolon -mesocoracoid -mesocranial -mesocratic -mesocuneiform -mesode -mesoderm -mesodermal -mesodermic -Mesodesma -Mesodesmatidae -Mesodesmidae -Mesodevonian -Mesodevonic -mesodic -mesodisilicic -mesodont -Mesoenatides -mesofurca -mesofurcal -mesogaster -mesogastral -mesogastric -mesogastrium -mesogloea -mesogloeal -mesognathic -mesognathion -mesognathism -mesognathous -mesognathy -mesogyrate -mesohepar -Mesohippus -mesokurtic -mesolabe -mesole -mesolecithal -mesolimnion -mesolite -mesolithic -mesologic -mesological -mesology -mesomere -mesomeric -mesomerism -mesometral -mesometric -mesometrium -mesomorph -mesomorphic -mesomorphous -mesomorphy -Mesomyodi -mesomyodian -mesomyodous -meson -mesonasal -Mesonemertini -mesonephric -mesonephridium -mesonephritic -mesonephros -mesonic -mesonotal -mesonotum -Mesonychidae -Mesonyx -mesoparapteral -mesoparapteron -mesopectus -mesoperiodic -mesopetalum -mesophile -mesophilic -mesophilous -mesophragm -mesophragma -mesophragmal -mesophryon -mesophyll -mesophyllous -mesophyllum -mesophyte -mesophytic -mesophytism -mesopic -mesoplankton -mesoplanktonic -mesoplast -mesoplastic -mesoplastral -mesoplastron -mesopleural -mesopleuron -Mesoplodon -mesoplodont -mesopodial -mesopodiale -mesopodium -mesopotamia -Mesopotamian -mesopotamic -mesoprescutal -mesoprescutum -mesoprosopic -mesopterygial -mesopterygium -mesopterygoid -mesorchial -mesorchium -Mesore -mesorectal -mesorectum -Mesoreodon -mesorrhin -mesorrhinal -mesorrhinian -mesorrhinism -mesorrhinium -mesorrhiny -mesosalpinx -mesosaur -Mesosauria -Mesosaurus -mesoscapula -mesoscapular -mesoscutal -mesoscutellar -mesoscutellum -mesoscutum -mesoseismal -mesoseme -mesosiderite -mesosigmoid -mesoskelic -mesosoma -mesosomatic -mesosome -mesosperm -mesospore -mesosporic -mesosporium -mesostasis -mesosternal -mesosternebra -mesosternebral -mesosternum -mesostethium -Mesostoma -Mesostomatidae -mesostomid -mesostyle -mesostylous -Mesosuchia -mesosuchian -Mesotaeniaceae -Mesotaeniales -mesotarsal -mesotartaric -Mesothelae -mesothelial -mesothelium -mesotherm -mesothermal -mesothesis -mesothet -mesothetic -mesothetical -mesothoracic -mesothoracotheca -mesothorax -mesothorium -mesotonic -mesotroch -mesotrocha -mesotrochal -mesotrochous -mesotron -mesotropic -mesotympanic -mesotype -mesovarian -mesovarium -mesoventral -mesoventrally -mesoxalate -mesoxalic -mesoxalyl -Mesozoa -mesozoan -Mesozoic -mespil -Mespilus -Mespot -mesquite -Mesropian -mess -message -messagery -Messalian -messaline -messan -Messapian -messe -messelite -messenger -messengership -messer -messet -Messiah -Messiahship -Messianic -Messianically -messianically -Messianism -Messianist -Messianize -Messias -messieurs -messily -messin -Messines -Messinese -messiness -messing -messman -messmate -messor -messroom -messrs -messtin -messuage -messy -mestee -mester -mestiza -mestizo -mestome -Mesua -Mesvinian -mesymnion -met -meta -metabasis -metabasite -metabatic -metabiological -metabiology -metabiosis -metabiotic -metabiotically -metabismuthic -metabisulphite -metabletic -Metabola -metabola -metabole -Metabolia -metabolian -metabolic -metabolism -metabolite -metabolizable -metabolize -metabolon -metabolous -metaboly -metaborate -metaboric -metabranchial -metabrushite -metabular -metacarpal -metacarpale -metacarpophalangeal -metacarpus -metacenter -metacentral -metacentric -metacentricity -metachemic -metachemistry -Metachlamydeae -metachlamydeous -metachromasis -metachromatic -metachromatin -metachromatinic -metachromatism -metachrome -metachronism -metachrosis -metacinnabarite -metacism -metacismus -metaclase -metacneme -metacoele -metacoelia -metaconal -metacone -metaconid -metaconule -metacoracoid -metacrasis -metacresol -metacromial -metacromion -metacryst -metacyclic -metacymene -metad -metadiabase -metadiazine -metadiorite -metadiscoidal -metadromous -metafluidal -metaformaldehyde -metafulminuric -metagalactic -metagalaxy -metagaster -metagastric -metagastrula -metage -Metageitnion -metagelatin -metagenesis -metagenetic -metagenetically -metagenic -metageometer -metageometrical -metageometry -metagnath -metagnathism -metagnathous -metagnomy -metagnostic -metagnosticism -metagram -metagrammatism -metagrammatize -metagraphic -metagraphy -metahewettite -metahydroxide -metaigneous -metainfective -metakinesis -metakinetic -metal -metalammonium -metalanguage -metalbumin -metalcraft -metaldehyde -metalepsis -metaleptic -metaleptical -metaleptically -metaler -metaline -metalined -metaling -metalinguistic -metalinguistics -metalism -metalist -metalization -metalize -metallary -metalleity -metallic -metallical -metallically -metallicity -metallicize -metallicly -metallics -metallide -metallifacture -metalliferous -metallification -metalliform -metallify -metallik -metalline -metallism -metallization -metallize -metallochrome -metallochromy -metallogenetic -metallogenic -metallogeny -metallograph -metallographer -metallographic -metallographical -metallographist -metallography -metalloid -metalloidal -metallometer -metallophone -metalloplastic -metallorganic -metallotherapeutic -metallotherapy -metallurgic -metallurgical -metallurgically -metallurgist -metallurgy -metalmonger -metalogic -metalogical -metaloph -metalorganic -metaloscope -metaloscopy -metaluminate -metaluminic -metalware -metalwork -metalworker -metalworking -metalworks -metamathematical -metamathematics -metamer -metameral -metamere -metameric -metamerically -metameride -metamerism -metamerization -metamerized -metamerous -metamery -metamorphic -metamorphism -metamorphize -metamorphopsia -metamorphopsy -metamorphosable -metamorphose -metamorphoser -metamorphoses -metamorphosian -metamorphosic -metamorphosical -metamorphosis -metamorphostical -metamorphotic -metamorphous -metamorphy -Metamynodon -metanalysis -metanauplius -Metanemertini -metanephric -metanephritic -metanephron -metanephros -metanepionic -metanilic -metanitroaniline -metanomen -metanotal -metanotum -metantimonate -metantimonic -metantimonious -metantimonite -metantimonous -metanym -metaorganism -metaparapteral -metaparapteron -metapectic -metapectus -metapepsis -metapeptone -metaperiodic -metaphase -metaphenomenal -metaphenomenon -metaphenylene -metaphenylenediamin -metaphenylenediamine -metaphloem -metaphonical -metaphonize -metaphony -metaphor -metaphoric -metaphorical -metaphorically -metaphoricalness -metaphorist -metaphorize -metaphosphate -metaphosphoric -metaphosphorous -metaphragm -metaphragmal -metaphrase -metaphrasis -metaphrast -metaphrastic -metaphrastical -metaphrastically -metaphyseal -metaphysic -metaphysical -metaphysically -metaphysician -metaphysicianism -metaphysicist -metaphysicize -metaphysicous -metaphysics -metaphysis -metaphyte -metaphytic -metaphyton -metaplasia -metaplasis -metaplasm -metaplasmic -metaplast -metaplastic -metapleural -metapleure -metapleuron -metaplumbate -metaplumbic -metapneumonic -metapneustic -metapodial -metapodiale -metapodium -metapolitic -metapolitical -metapolitician -metapolitics -metapophyseal -metapophysial -metapophysis -metapore -metapostscutellar -metapostscutellum -metaprescutal -metaprescutum -metaprotein -metapsychic -metapsychical -metapsychics -metapsychism -metapsychist -metapsychological -metapsychology -metapsychosis -metapterygial -metapterygium -metapterygoid -metarabic -metarhyolite -metarossite -metarsenic -metarsenious -metarsenite -metasaccharinic -metascutal -metascutellar -metascutellum -metascutum -metasedimentary -metasilicate -metasilicic -metasoma -metasomal -metasomasis -metasomatic -metasomatism -metasomatosis -metasome -metasperm -Metaspermae -metaspermic -metaspermous -metastability -metastable -metastannate -metastannic -metastasis -metastasize -metastatic -metastatical -metastatically -metasternal -metasternum -metasthenic -metastibnite -metastigmate -metastoma -metastome -metastrophe -metastrophic -metastyle -metatantalic -metatarsal -metatarsale -metatarse -metatarsophalangeal -metatarsus -metatatic -metatatically -metataxic -metate -metathalamus -metatheology -Metatheria -metatherian -metatheses -metathesis -metathetic -metathetical -metathetically -metathoracic -metathorax -metatitanate -metatitanic -metatoluic -metatoluidine -metatracheal -metatrophic -metatungstic -metatype -metatypic -Metaurus -metavanadate -metavanadic -metavauxite -metavoltine -metaxenia -metaxite -metaxylem -metaxylene -metayer -Metazoa -metazoal -metazoan -metazoea -metazoic -metazoon -mete -metel -metempiric -metempirical -metempirically -metempiricism -metempiricist -metempirics -metempsychic -metempsychosal -metempsychose -metempsychoses -metempsychosical -metempsychosis -metempsychosize -metemptosis -metencephalic -metencephalon -metensarcosis -metensomatosis -metenteron -metenteronic -meteogram -meteograph -meteor -meteorgraph -meteoric -meteorical -meteorically -meteorism -meteorist -meteoristic -meteorital -meteorite -meteoritic -meteoritics -meteorization -meteorize -meteorlike -meteorogram -meteorograph -meteorographic -meteorography -meteoroid -meteoroidal -meteorolite -meteorolitic -meteorologic -meteorological -meteorologically -meteorologist -meteorology -meteorometer -meteoroscope -meteoroscopy -meteorous -metepencephalic -metepencephalon -metepimeral -metepimeron -metepisternal -metepisternum -meter -meterage -metergram -meterless -meterman -metership -metestick -metewand -meteyard -methacrylate -methacrylic -methadone -methanal -methanate -methane -methanoic -methanolysis -methanometer -metheglin -methemoglobin -methemoglobinemia -methemoglobinuria -methenamine -methene -methenyl -mether -methid -methide -methine -methinks -methiodide -methionic -methionine -methobromide -method -methodaster -methodeutic -methodic -methodical -methodically -methodicalness -methodics -methodism -Methodist -methodist -Methodistic -Methodistically -Methodisty -methodization -Methodize -methodize -methodizer -methodless -methodological -methodologically -methodologist -methodology -Methody -methought -methoxide -methoxychlor -methoxyl -methronic -Methuselah -methyl -methylacetanilide -methylal -methylamine -methylaniline -methylanthracene -methylate -methylation -methylator -methylcholanthrene -methylene -methylenimine -methylenitan -methylethylacetic -methylglycine -methylglycocoll -methylglyoxal -methylic -methylmalonic -methylnaphthalene -methylol -methylolurea -methylosis -methylotic -methylpentose -methylpentoses -methylpropane -methylsulfanol -metic -meticulosity -meticulous -meticulously -meticulousness -metier -Metin -metis -Metoac -metochous -metochy -metoestrous -metoestrum -Metol -metonym -metonymic -metonymical -metonymically -metonymous -metonymously -metonymy -metope -Metopias -metopic -metopion -metopism -Metopoceros -metopomancy -metopon -metoposcopic -metoposcopical -metoposcopist -metoposcopy -metosteal -metosteon -metoxazine -metoxenous -metoxeny -metra -metralgia -metranate -metranemia -metratonia -Metrazol -metrectasia -metrectatic -metrectomy -metrectopia -metrectopic -metrectopy -metreless -metreship -metreta -metrete -metretes -metria -metric -metrical -metrically -metrician -metricism -metricist -metricize -metrics -Metridium -metrification -metrifier -metrify -metriocephalic -metrist -metritis -metrocampsis -metrocarat -metrocarcinoma -metrocele -metroclyst -metrocolpocele -metrocracy -metrocratic -metrocystosis -metrodynia -metrofibroma -metrological -metrologist -metrologue -metrology -metrolymphangitis -metromalacia -metromalacoma -metromalacosis -metromania -metromaniac -metromaniacal -metrometer -metroneuria -metronome -metronomic -metronomical -metronomically -metronymic -metronymy -metroparalysis -metropathia -metropathic -metropathy -metroperitonitis -metrophlebitis -metrophotography -metropole -metropolis -metropolitan -metropolitanate -metropolitancy -metropolitanism -metropolitanize -metropolitanship -metropolite -metropolitic -metropolitical -metropolitically -metroptosia -metroptosis -metroradioscope -metrorrhagia -metrorrhagic -metrorrhea -metrorrhexis -metrorthosis -metrosalpingitis -metrosalpinx -metroscirrhus -metroscope -metroscopy -Metrosideros -metrostaxis -metrostenosis -metrosteresis -metrostyle -metrosynizesis -metrotherapist -metrotherapy -metrotome -metrotomy -Metroxylon -mettar -mettle -mettled -mettlesome -mettlesomely -mettlesomeness -metusia -metze -Meum -meuse -meute -Mev -mew -meward -mewer -mewl -mewler -Mexica -Mexican -Mexicanize -Mexitl -Mexitli -meyerhofferite -mezcal -Mezentian -Mezentism -Mezentius -mezereon -mezereum -mezuzah -mezzanine -mezzo -mezzograph -mezzotint -mezzotinter -mezzotinto -mho -mhometer -mi -Miami -miamia -mian -Miao -Miaotse -Miaotze -miaow -miaower -Miaplacidus -miargyrite -miarolitic -mias -miaskite -miasm -miasma -miasmal -miasmata -miasmatic -miasmatical -miasmatically -miasmatize -miasmatology -miasmatous -miasmic -miasmology -miasmous -Miastor -miaul -miauler -mib -mica -micaceous -micacious -micacite -Micah -micasization -micasize -micate -mication -Micawberish -Micawberism -mice -micellar -micelle -Michabo -Michabou -Michael -Michaelites -Michaelmas -Michaelmastide -miche -Micheal -Michel -Michelangelesque -Michelangelism -Michelia -Michelle -micher -Michiel -Michigamea -Michigan -michigan -Michigander -Michiganite -miching -Michoacan -Michoacano -micht -Mick -mick -Mickey -mickle -Micky -Micmac -mico -miconcave -Miconia -micramock -Micrampelis -micranatomy -micrander -micrandrous -micraner -micranthropos -Micraster -micrencephalia -micrencephalic -micrencephalous -micrencephalus -micrencephaly -micrergate -micresthete -micrify -micro -microammeter -microampere -microanalysis -microanalyst -microanalytical -microangstrom -microapparatus -microbal -microbalance -microbar -microbarograph -microbattery -microbe -microbeless -microbeproof -microbial -microbian -microbic -microbicidal -microbicide -microbiologic -microbiological -microbiologically -microbiologist -microbiology -microbion -microbiosis -microbiota -microbiotic -microbious -microbism -microbium -microblast -microblepharia -microblepharism -microblephary -microbrachia -microbrachius -microburet -microburette -microburner -microcaltrop -microcardia -microcardius -microcarpous -Microcebus -microcellular -microcentrosome -microcentrum -microcephal -microcephalia -microcephalic -microcephalism -microcephalous -microcephalus -microcephaly -microceratous -microchaeta -microcharacter -microcheilia -microcheiria -microchemic -microchemical -microchemically -microchemistry -microchiria -Microchiroptera -microchiropteran -microchiropterous -microchromosome -microchronometer -microcinema -microcinematograph -microcinematographic -microcinematography -Microcitrus -microclastic -microclimate -microclimatic -microclimatologic -microclimatological -microclimatology -microcline -microcnemia -microcoat -micrococcal -Micrococceae -Micrococcus -microcoleoptera -microcolon -microcolorimeter -microcolorimetric -microcolorimetrically -microcolorimetry -microcolumnar -microcombustion -microconidial -microconidium -microconjugant -Microconodon -microconstituent -microcopy -microcoria -microcosm -microcosmal -microcosmian -microcosmic -microcosmical -microcosmography -microcosmology -microcosmos -microcosmus -microcoulomb -microcranous -microcrith -microcryptocrystalline -microcrystal -microcrystalline -microcrystallogeny -microcrystallography -microcrystalloscopy -microcurie -Microcyprini -microcyst -microcyte -microcythemia -microcytosis -microdactylia -microdactylism -microdactylous -microdentism -microdentous -microdetection -microdetector -microdetermination -microdiactine -microdissection -microdistillation -microdont -microdontism -microdontous -microdose -microdrawing -Microdrili -microdrive -microelectrode -microelectrolysis -microelectroscope -microelement -microerg -microestimation -microeutaxitic -microevolution -microexamination -microfarad -microfauna -microfelsite -microfelsitic -microfilaria -microfilm -microflora -microfluidal -microfoliation -microfossil -microfungus -microfurnace -Microgadus -microgalvanometer -microgamete -microgametocyte -microgametophyte -microgamy -Microgaster -microgastria -Microgastrinae -microgastrine -microgeological -microgeologist -microgeology -microgilbert -microglia -microglossia -micrognathia -micrognathic -micrognathous -microgonidial -microgonidium -microgram -microgramme -microgranite -microgranitic -microgranitoid -microgranular -microgranulitic -micrograph -micrographer -micrographic -micrographical -micrographically -micrographist -micrography -micrograver -microgravimetric -microgroove -microgyne -microgyria -microhenry -microhepatia -microhistochemical -microhistology -microhm -microhmmeter -Microhymenoptera -microhymenopteron -microinjection -microjoule -microlepidopter -microlepidoptera -microlepidopteran -microlepidopterist -microlepidopteron -microlepidopterous -microleukoblast -microlevel -microlite -microliter -microlith -microlithic -microlitic -micrologic -micrological -micrologically -micrologist -micrologue -micrology -microlux -micromania -micromaniac -micromanipulation -micromanipulator -micromanometer -Micromastictora -micromazia -micromeasurement -micromechanics -micromelia -micromelic -micromelus -micromembrane -micromeral -micromere -Micromeria -micromeric -micromerism -micromeritic -micromeritics -micromesentery -micrometallographer -micrometallography -micrometallurgy -micrometer -micromethod -micrometrical -micrometrically -micrometry -micromicrofarad -micromicron -micromil -micromillimeter -micromineralogical -micromineralogy -micromorph -micromotion -micromotoscope -micromyelia -micromyeloblast -micron -Micronesian -micronization -micronize -micronometer -micronuclear -micronucleus -micronutrient -microorganic -microorganism -microorganismal -micropaleontology -micropantograph -microparasite -microparasitic -micropathological -micropathologist -micropathology -micropegmatite -micropegmatitic -micropenis -microperthite -microperthitic -micropetalous -micropetrography -micropetrologist -micropetrology -microphage -microphagocyte -microphagous -microphagy -microphakia -microphallus -microphone -microphonic -microphonics -microphonograph -microphot -microphotograph -microphotographic -microphotography -microphotometer -microphotoscope -microphthalmia -microphthalmic -microphthalmos -microphthalmus -microphyllous -microphysical -microphysics -microphysiography -microphytal -microphyte -microphytic -microphytology -micropia -micropin -micropipette -microplakite -microplankton -microplastocyte -microplastometer -micropodal -Micropodi -micropodia -Micropodidae -Micropodiformes -micropoecilitic -micropoicilitic -micropoikilitic -micropolariscope -micropolarization -micropore -microporosity -microporous -microporphyritic -microprint -microprojector -micropsia -micropsy -micropterism -micropterous -Micropterus -micropterygid -Micropterygidae -micropterygious -Micropterygoidea -Micropteryx -Micropus -micropylar -micropyle -micropyrometer -microradiometer -microreaction -microrefractometer -microrhabdus -microrheometer -microrheometric -microrheometrical -Microrhopias -Microsauria -microsaurian -microsclere -microsclerous -microsclerum -microscopal -microscope -microscopial -microscopic -microscopical -microscopically -microscopics -Microscopid -microscopist -Microscopium -microscopize -microscopy -microsecond -microsection -microseism -microseismic -microseismical -microseismograph -microseismology -microseismometer -microseismometrograph -microseismometry -microseme -microseptum -microsmatic -microsmatism -microsoma -microsomatous -microsome -microsomia -microsommite -Microsorex -microspecies -microspectroscope -microspectroscopic -microspectroscopy -Microspermae -microspermous -Microsphaera -microsphaeric -microsphere -microspheric -microspherulitic -microsplanchnic -microsplenia -microsplenic -microsporange -microsporangium -microspore -microsporiasis -microsporic -Microsporidia -microsporidian -Microsporon -microsporophore -microsporophyll -microsporosis -microsporous -Microsporum -microstat -microsthene -Microsthenes -microsthenic -microstomatous -microstome -microstomia -microstomous -microstructural -microstructure -Microstylis -microstylospore -microstylous -microsublimation -microtasimeter -microtechnic -microtechnique -microtelephone -microtelephonic -Microthelyphonida -microtheos -microtherm -microthermic -microthorax -Microthyriaceae -microtia -Microtinae -microtine -microtitration -microtome -microtomic -microtomical -microtomist -microtomy -microtone -Microtus -microtypal -microtype -microtypical -microvolt -microvolume -microvolumetric -microwatt -microwave -microweber -microzoa -microzoal -microzoan -microzoaria -microzoarian -microzoary -microzoic -microzone -microzooid -microzoology -microzoon -microzoospore -microzyma -microzyme -microzymian -micrurgic -micrurgical -micrurgist -micrurgy -Micrurus -miction -micturate -micturition -mid -midafternoon -midautumn -midaxillary -midbrain -midday -midden -middenstead -middle -middlebreaker -middlebuster -middleman -middlemanism -middlemanship -middlemost -middler -middlesplitter -middlewards -middleway -middleweight -middlewoman -middling -middlingish -middlingly -middlingness -middlings -middorsal -middy -mide -Mider -midevening -midewiwin -midfacial -midforenoon -midfrontal -midge -midget -midgety -midgy -midheaven -Midianite -Midianitish -Mididae -midiron -midland -Midlander -Midlandize -midlandward -midlatitude -midleg -midlenting -midmain -midmandibular -midmonth -midmonthly -midmorn -midmorning -midmost -midnight -midnightly -midnoon -midparent -midparentage -midparental -midpit -midrange -midrash -midrashic -midrib -midribbed -midriff -mids -midseason -midsentence -midship -midshipman -midshipmanship -midshipmite -midships -midspace -midst -midstory -midstout -midstream -midstreet -midstroke -midstyled -midsummer -midsummerish -midsummery -midtap -midvein -midverse -midward -midwatch -midway -midweek -midweekly -Midwest -Midwestern -Midwesterner -midwestward -midwife -midwifery -midwinter -midwinterly -midwintry -midwise -midyear -Miek -mien -miersite -Miescherian -miff -miffiness -miffy -mig -might -mightily -mightiness -mightless -mightnt -mighty -mightyhearted -mightyship -miglio -migmatite -migniardise -mignon -mignonette -mignonne -mignonness -Migonitis -migraine -migrainoid -migrainous -migrant -migrate -migration -migrational -migrationist -migrative -migrator -migratorial -migratory -Miguel -miharaite -mihrab -mijakite -mijl -mikado -mikadoate -mikadoism -Mikael -Mikania -Mikasuki -Mike -mike -Mikey -Miki -mikie -Mikir -Mil -mil -mila -milady -milammeter -Milan -Milanese -Milanion -milarite -milch -milcher -milchy -mild -milden -milder -mildew -mildewer -mildewy -mildhearted -mildheartedness -mildish -mildly -mildness -Mildred -mile -mileage -Miledh -milepost -miler -Miles -Milesian -milesima -Milesius -milestone -mileway -milfoil -milha -miliaceous -miliarensis -miliaria -miliarium -miliary -Milicent -milieu -Miliola -milioliform -milioline -miliolite -miliolitic -militancy -militant -militantly -militantness -militarily -militariness -militarism -militarist -militaristic -militaristically -militarization -militarize -military -militaryism -militaryment -militaster -militate -militation -militia -militiaman -militiate -milium -milk -milkbush -milken -milker -milkeress -milkfish -milkgrass -milkhouse -milkily -milkiness -milking -milkless -milklike -milkmaid -milkman -milkness -milkshed -milkshop -milksick -milksop -milksopism -milksoppery -milksopping -milksoppish -milksoppy -milkstone -milkweed -milkwood -milkwort -milky -mill -Milla -milla -millable -millage -millboard -millclapper -millcourse -milldam -mille -milled -millefiori -milleflorous -millefoliate -millenarian -millenarianism -millenarist -millenary -millennia -millennial -millennialism -millennialist -millennially -millennian -millenniarism -millenniary -millennium -millepede -Millepora -millepore -milleporiform -milleporine -milleporite -milleporous -millepunctate -miller -milleress -millering -Millerism -Millerite -millerite -millerole -millesimal -millesimally -millet -Millettia -millfeed -millful -millhouse -milliad -milliammeter -milliamp -milliampere -milliamperemeter -milliangstrom -milliard -milliardaire -milliare -milliarium -milliary -millibar -millicron -millicurie -Millie -millieme -milliequivalent -millifarad -millifold -milliform -milligal -milligrade -milligram -milligramage -millihenry -millilambert -millile -milliliter -millilux -millimeter -millimicron -millimolar -millimole -millincost -milline -milliner -millinerial -millinering -millinery -milling -Millingtonia -millinormal -millinormality -millioctave -millioersted -million -millionaire -millionairedom -millionairess -millionairish -millionairism -millionary -millioned -millioner -millionfold -millionism -millionist -millionize -millionocracy -millions -millionth -milliphot -millipoise -millisecond -millistere -Millite -millithrum -millivolt -millivoltmeter -millman -millocracy -millocrat -millocratism -millosevichite -millowner -millpond -millpool -millpost -millrace -millrynd -millsite -millstock -millstone -millstream -milltail -millward -millwork -millworker -millwright -millwrighting -Milly -Milner -milner -Milo -milo -milord -milpa -milreis -milsey -milsie -milt -milter -miltlike -Miltonia -Miltonian -Miltonic -Miltonically -Miltonism -Miltonist -Miltonize -Miltos -miltsick -miltwaste -milty -Milvago -Milvinae -milvine -milvinous -Milvus -milzbrand -mim -mima -mimbar -mimble -Mimbreno -Mime -mime -mimeo -mimeograph -mimeographic -mimeographically -mimeographist -mimer -mimesis -mimester -mimetene -mimetesite -mimetic -mimetical -mimetically -mimetism -mimetite -Mimi -mimiambi -mimiambic -mimiambics -mimic -mimical -mimically -mimicism -mimicker -mimicry -Mimidae -Miminae -mimine -miminypiminy -mimly -mimmation -mimmest -mimmock -mimmocking -mimmocky -mimmood -mimmoud -mimmouthed -mimmouthedness -mimodrama -mimographer -mimography -mimologist -Mimosa -Mimosaceae -mimosaceous -mimosis -mimosite -mimotype -mimotypic -mimp -Mimpei -mimsey -Mimulus -Mimus -Mimusops -min -Mina -mina -minable -minacious -minaciously -minaciousness -minacity -Minaean -Minahassa -Minahassan -Minahassian -minar -minaret -minareted -minargent -minasragrite -minatorial -minatorially -minatorily -minatory -minaway -mince -mincemeat -mincer -minchery -minchiate -mincing -mincingly -mincingness -Mincopi -Mincopie -mind -minded -Mindel -Mindelian -minder -Mindererus -mindful -mindfully -mindfulness -minding -mindless -mindlessly -mindlessness -mindsight -mine -mineowner -miner -mineragraphic -mineragraphy -mineraiogic -mineral -mineralizable -mineralization -mineralize -mineralizer -mineralogical -mineralogically -mineralogist -mineralogize -mineralogy -Minerva -minerval -Minervan -Minervic -minery -mines -minette -mineworker -Ming -ming -minge -mingelen -mingle -mingleable -mingledly -minglement -mingler -minglingly -Mingo -Mingrelian -minguetite -mingwort -mingy -minhag -minhah -miniaceous -miniate -miniator -miniature -miniaturist -minibus -minicam -minicamera -Miniconjou -minienize -minification -minify -minikin -minikinly -minim -minima -minimacid -minimal -minimalism -Minimalist -minimalkaline -minimally -minimetric -minimifidian -minimifidianism -minimism -minimistic -Minimite -minimitude -minimization -minimize -minimizer -minimum -minimus -minimuscular -mining -minion -minionette -minionism -minionly -minionship -minish -minisher -minishment -minister -ministeriable -ministerial -ministerialism -ministerialist -ministeriality -ministerially -ministerialness -ministerium -ministership -ministrable -ministrant -ministration -ministrative -ministrator -ministrer -ministress -ministry -ministryship -minitant -Minitari -minium -miniver -minivet -mink -minkery -minkish -Minkopi -Minnehaha -minnesinger -minnesong -Minnesotan -Minnetaree -Minnie -minnie -minniebush -minning -minnow -minny -mino -Minoan -minoize -minometer -minor -minorage -minorate -minoration -Minorca -Minorcan -Minoress -minoress -Minorist -Minorite -minority -minorship -Minos -minot -Minotaur -Minseito -minsitive -minster -minsteryard -minstrel -minstreless -minstrelship -minstrelsy -mint -mintage -Mintaka -mintbush -minter -mintmaker -mintmaking -mintman -mintmaster -minty -minuend -minuet -minuetic -minuetish -minus -minuscular -minuscule -minutary -minutation -minute -minutely -minuteman -minuteness -minuter -minuthesis -minutia -minutiae -minutial -minutiose -minutiously -minutissimic -minverite -minx -minxish -minxishly -minxishness -minxship -miny -Minyadidae -Minyae -Minyan -minyan -Minyas -miocardia -Miocene -Miocenic -Miohippus -miolithic -mioplasmia -miothermic -miqra -miquelet -mir -Mira -Mirabel -Mirabell -mirabiliary -Mirabilis -mirabilite -Mirac -Mirach -mirach -miracidial -miracidium -miracle -miraclemonger -miraclemongering -miraclist -miraculist -miraculize -miraculosity -miraculous -miraculously -miraculousness -mirador -mirage -miragy -Mirak -Miramolin -Mirana -Miranda -mirandous -Miranha -Miranhan -mirate -mirbane -mird -mirdaha -mire -mirepoix -Mirfak -Miriam -Miriamne -mirid -Miridae -mirific -miriness -mirish -mirk -mirkiness -mirksome -mirliton -Miro -miro -Mirounga -mirror -mirrored -mirrorize -mirrorlike -mirrorscope -mirrory -mirth -mirthful -mirthfully -mirthfulness -mirthless -mirthlessly -mirthlessness -mirthsome -mirthsomeness -miry -miryachit -mirza -misaccent -misaccentuation -misachievement -misacknowledge -misact -misadapt -misadaptation -misadd -misaddress -misadjust -misadmeasurement -misadministration -misadvantage -misadventure -misadventurer -misadventurous -misadventurously -misadvertence -misadvice -misadvise -misadvised -misadvisedly -misadvisedness -misaffected -misaffection -misaffirm -misagent -misaim -misalienate -misalignment -misallegation -misallege -misalliance -misallotment -misallowance -misally -misalphabetize -misalter -misanalyze -misandry -misanswer -misanthrope -misanthropia -misanthropic -misanthropical -misanthropically -misanthropism -misanthropist -misanthropize -misanthropy -misapparel -misappear -misappearance -misappellation -misapplication -misapplier -misapply -misappoint -misappointment -misappraise -misappraisement -misappreciate -misappreciation -misappreciative -misapprehend -misapprehendingly -misapprehensible -misapprehension -misapprehensive -misapprehensively -misapprehensiveness -misappropriate -misappropriately -misappropriation -misarchism -misarchist -misarrange -misarrangement -misarray -misascribe -misascription -misasperse -misassay -misassent -misassert -misassign -misassociate -misassociation -misatone -misattend -misattribute -misattribution -misaunter -misauthorization -misauthorize -misaward -misbandage -misbaptize -misbecome -misbecoming -misbecomingly -misbecomingness -misbefitting -misbeget -misbegin -misbegotten -misbehave -misbehavior -misbeholden -misbelief -misbelieve -misbeliever -misbelievingly -misbelove -misbeseem -misbestow -misbestowal -misbetide -misbias -misbill -misbind -misbirth -misbode -misborn -misbrand -misbuild -misbusy -miscalculate -miscalculation -miscalculator -miscall -miscaller -miscanonize -miscarriage -miscarriageable -miscarry -miscast -miscasualty -misceability -miscegenate -miscegenation -miscegenationist -miscegenator -miscegenetic -miscegine -miscellanarian -miscellanea -miscellaneity -miscellaneous -miscellaneously -miscellaneousness -miscellanist -miscellany -mischallenge -mischance -mischanceful -mischancy -mischaracterization -mischaracterize -mischarge -mischief -mischiefful -mischieve -mischievous -mischievously -mischievousness -mischio -mischoice -mischoose -mischristen -miscibility -miscible -miscipher -misclaim -misclaiming -misclass -misclassification -misclassify -miscognizant -miscoin -miscoinage -miscollocation -miscolor -miscoloration -miscommand -miscommit -miscommunicate -miscompare -miscomplacence -miscomplain -miscomplaint -miscompose -miscomprehend -miscomprehension -miscomputation -miscompute -misconceive -misconceiver -misconception -misconclusion -miscondition -misconduct -misconfer -misconfidence -misconfident -misconfiguration -misconjecture -misconjugate -misconjugation -misconjunction -misconsecrate -misconsequence -misconstitutional -misconstruable -misconstruct -misconstruction -misconstructive -misconstrue -misconstruer -miscontinuance -misconvenient -misconvey -miscook -miscookery -miscorrect -miscorrection -miscounsel -miscount -miscovet -miscreancy -miscreant -miscreate -miscreation -miscreative -miscreator -miscredited -miscredulity -miscreed -miscript -miscrop -miscue -miscultivated -misculture -miscurvature -miscut -misdate -misdateful -misdaub -misdeal -misdealer -misdecide -misdecision -misdeclaration -misdeclare -misdeed -misdeem -misdeemful -misdefine -misdeformed -misdeliver -misdelivery -misdemean -misdemeanant -misdemeanist -misdemeanor -misdentition -misderivation -misderive -misdescribe -misdescriber -misdescription -misdescriptive -misdesire -misdetermine -misdevise -misdevoted -misdevotion -misdiet -misdirect -misdirection -misdispose -misdisposition -misdistinguish -misdistribute -misdistribution -misdivide -misdivision -misdo -misdoer -misdoing -misdoubt -misdower -misdraw -misdread -misdrive -mise -misease -misecclesiastic -misedit -miseducate -miseducation -miseducative -miseffect -misemphasis -misemphasize -misemploy -misemployment -misencourage -misendeavor -misenforce -misengrave -misenite -misenjoy -misenroll -misentitle -misenunciation -Misenus -miser -miserabilism -miserabilist -miserabilistic -miserability -miserable -miserableness -miserably -miserdom -miserected -Miserere -miserhood -misericord -Misericordia -miserism -miserliness -miserly -misery -misesteem -misestimate -misestimation -misexample -misexecute -misexecution -misexpectation -misexpend -misexpenditure -misexplain -misexplanation -misexplication -misexposition -misexpound -misexpress -misexpression -misexpressive -misfaith -misfare -misfashion -misfather -misfault -misfeasance -misfeasor -misfeature -misfield -misfigure -misfile -misfire -misfit -misfond -misform -misformation -misfortunate -misfortunately -misfortune -misfortuned -misfortuner -misframe -misgauge -misgesture -misgive -misgiving -misgivingly -misgo -misgotten -misgovern -misgovernance -misgovernment -misgovernor -misgracious -misgraft -misgrave -misground -misgrow -misgrown -misgrowth -misguess -misguggle -misguidance -misguide -misguided -misguidedly -misguidedness -misguider -misguiding -misguidingly -mishandle -mishap -mishappen -Mishikhwutmetunne -mishmash -mishmee -Mishmi -Mishnah -Mishnaic -Mishnic -Mishnical -Mishongnovi -misidentification -misidentify -Misima -misimagination -misimagine -misimpression -misimprove -misimprovement -misimputation -misimpute -misincensed -misincite -misinclination -misincline -misinfer -misinference -misinflame -misinform -misinformant -misinformation -misinformer -misingenuity -misinspired -misinstruct -misinstruction -misinstructive -misintelligence -misintelligible -misintend -misintention -misinter -misinterment -misinterpret -misinterpretable -misinterpretation -misinterpreter -misintimation -misjoin -misjoinder -misjudge -misjudgement -misjudger -misjudgingly -misjudgment -miskeep -misken -miskenning -miskill -miskindle -misknow -misknowledge -misky -mislabel -mislabor -mislanguage -mislay -mislayer -mislead -misleadable -misleader -misleading -misleadingly -misleadingness -mislear -misleared -mislearn -misled -mislest -mislight -mislike -misliken -mislikeness -misliker -mislikingly -mislippen -mislive -mislocate -mislocation -mislodge -mismade -mismake -mismanage -mismanageable -mismanagement -mismanager -mismarriage -mismarry -mismatch -mismatchment -mismate -mismeasure -mismeasurement -mismenstruation -misminded -mismingle -mismotion -mismove -misname -misnarrate -misnatured -misnavigation -Misniac -misnomed -misnomer -misnumber -misnurture -misnutrition -misobedience -misobey -misobservance -misobserve -misocapnic -misocapnist -misocatholic -misoccupy -misogallic -misogamic -misogamist -misogamy -misogyne -misogynic -misogynical -misogynism -misogynist -misogynistic -misogynistical -misogynous -misogyny -misohellene -misologist -misology -misomath -misoneism -misoneist -misoneistic -misopaterist -misopedia -misopedism -misopedist -misopinion -misopolemical -misorder -misordination -misorganization -misorganize -misoscopist -misosophist -misosophy -misotheism -misotheist -misotheistic -misotramontanism -misotyranny -misoxene -misoxeny -mispage -mispagination -mispaint -misparse -mispart -mispassion -mispatch -mispay -misperceive -misperception -misperform -misperformance -mispersuade -misperuse -misphrase -mispick -mispickel -misplace -misplacement -misplant -misplay -misplead -mispleading -misplease -mispoint -mispoise -mispolicy -misposition -mispossessed -mispractice -mispraise -misprejudiced -misprincipled -misprint -misprisal -misprision -misprize -misprizer -misproceeding -misproduce -misprofess -misprofessor -mispronounce -mispronouncement -mispronunciation -misproportion -misproposal -mispropose -misproud -misprovide -misprovidence -misprovoke -mispunctuate -mispunctuation -mispurchase -mispursuit -misput -misqualify -misquality -misquotation -misquote -misquoter -misraise -misrate -misread -misreader -misrealize -misreason -misreceive -misrecital -misrecite -misreckon -misrecognition -misrecognize -misrecollect -misrefer -misreference -misreflect -misreform -misregulate -misrehearsal -misrehearse -misrelate -misrelation -misreliance -misremember -misremembrance -misrender -misrepeat -misreport -misreporter -misreposed -misrepresent -misrepresentation -misrepresentative -misrepresenter -misreprint -misrepute -misresemblance -misresolved -misresult -misreward -misrhyme -misrhymer -misrule -miss -missable -missal -missay -missayer -misseem -missel -missemblance -missentence -misserve -misservice -misset -misshape -misshapen -misshapenly -misshapenness -misshood -missible -missile -missileproof -missiness -missing -missingly -mission -missional -missionarize -missionary -missionaryship -missioner -missionize -missionizer -missis -Missisauga -missish -missishness -Mississippi -Mississippian -missive -missmark -missment -Missouri -Missourian -Missourianism -missourite -misspeak -misspeech -misspell -misspelling -misspend -misspender -misstate -misstatement -misstater -misstay -misstep -missuade -missuggestion -missummation -missuppose -missy -missyish -missyllabication -missyllabify -mist -mistakable -mistakableness -mistakably -mistake -mistakeful -mistaken -mistakenly -mistakenness -mistakeproof -mistaker -mistaking -mistakingly -mistassini -mistaught -mistbow -misteach -misteacher -misted -mistell -mistempered -mistend -mistendency -Mister -mister -misterm -mistetch -mistfall -mistflower -mistful -misthink -misthought -misthread -misthrift -misthrive -misthrow -mistic -mistide -mistify -mistigris -mistily -mistime -mistiness -mistitle -mistle -mistless -mistletoe -mistone -mistonusk -mistook -mistouch -mistradition -mistrain -mistral -mistranscribe -mistranscript -mistranscription -mistranslate -mistranslation -mistreat -mistreatment -mistress -mistressdom -mistresshood -mistressless -mistressly -mistrial -mistrist -mistrust -mistruster -mistrustful -mistrustfully -mistrustfulness -mistrusting -mistrustingly -mistrustless -mistry -mistryst -misturn -mistutor -misty -mistyish -misunderstand -misunderstandable -misunderstander -misunderstanding -misunderstandingly -misunderstood -misunderstoodness -misura -misusage -misuse -misuseful -misusement -misuser -misusurped -misvaluation -misvalue -misventure -misventurous -misvouch -miswed -miswisdom -miswish -misword -misworship -misworshiper -misworshipper -miswrite -misyoke -miszealous -Mitakshara -Mitanni -Mitannian -Mitannish -mitapsis -Mitch -mitchboard -Mitchell -Mitchella -mite -Mitella -miteproof -miter -mitered -miterer -miterflower -miterwort -Mithra -Mithraea -Mithraeum -Mithraic -Mithraicism -Mithraicist -Mithraicize -Mithraism -Mithraist -Mithraistic -Mithraitic -Mithraize -Mithras -Mithratic -Mithriac -mithridate -Mithridatic -mithridatic -mithridatism -mithridatize -miticidal -miticide -mitigable -mitigant -mitigate -mitigatedly -mitigation -mitigative -mitigator -mitigatory -mitis -mitochondria -mitochondrial -mitogenetic -mitome -mitosis -mitosome -mitotic -mitotically -Mitra -mitra -mitrailleuse -mitral -mitrate -mitre -mitrer -Mitridae -mitriform -Mitsukurina -Mitsukurinidae -mitsumata -mitt -mittelhand -Mittelmeer -mitten -mittened -mittimus -mitty -Mitu -Mitua -mity -miurus -mix -mixable -mixableness -mixblood -Mixe -mixed -mixedly -mixedness -mixen -mixer -mixeress -mixhill -mixible -mixite -mixobarbaric -mixochromosome -Mixodectes -Mixodectidae -mixolydian -mixoploid -mixoploidy -Mixosaurus -mixotrophic -Mixtec -Mixtecan -mixtiform -mixtilineal -mixtilion -mixtion -mixture -mixy -Mizar -mizmaze -Mizpah -Mizraim -mizzen -mizzenmast -mizzenmastman -mizzentopman -mizzle -mizzler -mizzly -mizzonite -mizzy -mlechchha -mneme -mnemic -Mnemiopsis -mnemonic -mnemonical -mnemonicalist -mnemonically -mnemonicon -mnemonics -mnemonism -mnemonist -mnemonization -mnemonize -Mnemosyne -mnemotechnic -mnemotechnical -mnemotechnics -mnemotechnist -mnemotechny -mnesic -mnestic -Mnevis -Mniaceae -mniaceous -mnioid -Mniotiltidae -Mnium -Mo -mo -Moabite -Moabitess -Moabitic -Moabitish -moan -moanful -moanfully -moanification -moaning -moaningly -moanless -Moaria -Moarian -moat -Moattalite -mob -mobable -mobbable -mobber -mobbish -mobbishly -mobbishness -mobbism -mobbist -mobby -mobcap -mobed -mobile -Mobilian -mobilianer -mobiliary -mobility -mobilizable -mobilization -mobilize -mobilometer -moble -moblike -mobocracy -mobocrat -mobocratic -mobocratical -mobolatry -mobproof -mobship -mobsman -mobster -Mobula -Mobulidae -moccasin -Mocha -mocha -Mochica -mochras -mock -mockable -mockado -mockbird -mocker -mockernut -mockery -mockful -mockfully -mockground -mockingbird -mockingstock -mocmain -Mocoa -Mocoan -mocomoco -mocuck -Mod -modal -modalism -modalist -modalistic -modality -modalize -modally -mode -model -modeler -modeless -modelessness -modeling -modelist -modeller -modelmaker -modelmaking -modena -Modenese -moderant -moderantism -moderantist -moderate -moderately -moderateness -moderation -moderationist -moderatism -moderatist -moderato -moderator -moderatorship -moderatrix -Modern -modern -moderner -modernicide -modernish -modernism -modernist -modernistic -modernity -modernizable -modernization -modernize -modernizer -modernly -modernness -modest -modestly -modestness -modesty -modiation -modicity -modicum -modifiability -modifiable -modifiableness -modifiably -modificability -modificable -modification -modificationist -modificative -modificator -modificatory -modifier -modify -modillion -modiolar -Modiolus -modiolus -modish -modishly -modishness -modist -modiste -modistry -modius -Modoc -Modred -modulability -modulant -modular -modulate -modulation -modulative -modulator -modulatory -module -Modulidae -modulo -modulus -modumite -Moe -Moed -Moehringia -moellon -moerithere -moeritherian -Moeritheriidae -Moeritherium -mofette -moff -mofussil -mofussilite -mog -mogador -mogadore -mogdad -moggan -moggy -Moghan -mogigraphia -mogigraphic -mogigraphy -mogilalia -mogilalism -mogiphonia -mogitocia -mogo -mogographia -Mogollon -Mograbi -Mogrebbin -moguey -Mogul -mogulship -Moguntine -moha -mohabat -mohair -Mohammad -Mohammedan -Mohammedanism -Mohammedanization -Mohammedanize -Mohammedism -Mohammedist -Mohammedization -Mohammedize -mohar -Mohave -Mohawk -Mohawkian -mohawkite -Mohegan -mohel -Mohican -Mohineyam -mohnseed -moho -Mohock -Mohockism -mohr -Mohrodendron -mohur -Moi -moider -moidore -moieter -moiety -moil -moiler -moiles -moiley -moiling -moilingly -moilsome -moineau -Moingwena -moio -Moira -moire -moirette -moise -Moism -moissanite -moist -moisten -moistener -moistful -moistify -moistish -moistishness -moistless -moistly -moistness -moisture -moistureless -moistureproof -moisty -moit -moity -mojarra -Mojo -mojo -mokaddam -moke -moki -mokihana -moko -moksha -mokum -moky -Mola -mola -molal -Molala -molality -molar -molariform -molarimeter -molarity -molary -Molasse -molasses -molassied -molassy -molave -mold -moldability -moldable -moldableness -Moldavian -moldavite -moldboard -molder -moldery -moldiness -molding -moldmade -moldproof -moldwarp -moldy -Mole -mole -molecast -molecula -molecular -molecularist -molecularity -molecularly -molecule -molehead -moleheap -molehill -molehillish -molehilly -moleism -molelike -molendinar -molendinary -molengraaffite -moleproof -moler -moleskin -molest -molestation -molester -molestful -molestfully -Molge -Molgula -Molidae -molimen -moliminous -molinary -moline -Molinia -Molinism -Molinist -Molinistic -molka -Moll -molland -Mollberg -molle -mollescence -mollescent -molleton -mollichop -mollicrush -mollie -mollienisia -mollient -molliently -mollifiable -mollification -mollifiedly -mollifier -mollify -mollifying -mollifyingly -mollifyingness -molligrant -molligrubs -mollipilose -Mollisiaceae -mollisiose -mollities -mollitious -mollitude -Molluginaceae -Mollugo -Mollusca -molluscan -molluscivorous -molluscoid -Molluscoida -molluscoidal -molluscoidan -Molluscoidea -molluscoidean -molluscous -molluscousness -molluscum -mollusk -Molly -molly -mollycoddle -mollycoddler -mollycoddling -mollycosset -mollycot -mollyhawk -molman -Moloch -Molochize -Molochship -moloid -moloker -molompi -molosse -Molossian -molossic -Molossidae -molossine -molossoid -molossus -Molothrus -molpe -molrooken -molt -molten -moltenly -molter -Molucca -Moluccan -Moluccella -Moluche -moly -molybdate -molybdena -molybdenic -molybdeniferous -molybdenite -molybdenous -molybdenum -molybdic -molybdite -molybdocardialgia -molybdocolic -molybdodyspepsia -molybdomancy -molybdomenite -molybdonosus -molybdoparesis -molybdophyllite -molybdosis -molybdous -molysite -mombin -momble -Mombottu -mome -moment -momenta -momental -momentally -momentaneall -momentaneity -momentaneous -momentaneously -momentaneousness -momentarily -momentariness -momentary -momently -momentous -momentously -momentousness -momentum -momiology -momism -momme -mommet -mommy -momo -Momordica -Momotidae -Momotinae -Momotus -Momus -Mon -mon -mona -Monacan -monacanthid -Monacanthidae -monacanthine -monacanthous -Monacha -monachal -monachate -Monachi -monachism -monachist -monachization -monachize -monactin -monactine -monactinellid -monactinellidan -monad -monadelph -Monadelphia -monadelphian -monadelphous -monadic -monadical -monadically -monadiform -monadigerous -Monadina -monadism -monadistic -monadnock -monadology -monaene -monal -monamniotic -Monanday -monander -Monandria -monandrian -monandric -monandrous -monandry -monanthous -monapsal -monarch -monarchal -monarchally -monarchess -monarchial -monarchian -monarchianism -monarchianist -monarchianistic -monarchic -monarchical -monarchically -monarchism -monarchist -monarchistic -monarchize -monarchizer -monarchlike -monarchomachic -monarchomachist -monarchy -Monarda -Monardella -monarthritis -monarticular -monas -Monasa -Monascidiae -monascidian -monase -monaster -monasterial -monasterially -monastery -monastic -monastical -monastically -monasticism -monasticize -monatomic -monatomicity -monatomism -monaulos -monaural -monaxial -monaxile -monaxon -monaxonial -monaxonic -Monaxonida -monazine -monazite -Monbuttu -monchiquite -Monday -Mondayish -Mondayishness -Mondayland -mone -Monegasque -Monel -monel -monembryary -monembryonic -monembryony -monepic -monepiscopacy -monepiscopal -moner -Monera -moneral -moneran -monergic -monergism -monergist -monergistic -moneric -moneron -Monerozoa -monerozoan -monerozoic -monerula -Moneses -monesia -monetarily -monetary -monetite -monetization -monetize -money -moneyage -moneybag -moneybags -moneyed -moneyer -moneyflower -moneygrub -moneygrubber -moneygrubbing -moneylender -moneylending -moneyless -moneymonger -moneymongering -moneysaving -moneywise -moneywort -mong -mongcorn -monger -mongering -mongery -Monghol -Mongholian -Mongibel -mongler -Mongo -Mongol -Mongolian -Mongolianism -Mongolic -Mongolioid -Mongolish -Mongolism -Mongolization -Mongolize -Mongoloid -mongoose -Mongoyo -mongrel -mongreldom -mongrelish -mongrelism -mongrelity -mongrelization -mongrelize -mongrelly -mongrelness -mongst -monheimite -monial -Monias -Monica -moniker -monilated -monilethrix -Monilia -Moniliaceae -moniliaceous -Moniliales -monilicorn -moniliform -moniliformly -monilioid -moniment -Monimia -Monimiaceae -monimiaceous -monimolite -monimostylic -monism -monist -monistic -monistical -monistically -monition -monitive -monitor -monitorial -monitorially -monitorish -monitorship -monitory -monitress -monitrix -monk -monkbird -monkcraft -monkdom -monkery -monkess -monkey -monkeyboard -monkeyface -monkeyfy -monkeyhood -monkeyish -monkeyishly -monkeyishness -monkeylike -monkeynut -monkeypod -monkeypot -monkeyry -monkeyshine -monkeytail -monkfish -monkflower -monkhood -monkish -monkishly -monkishness -monkism -monklike -monkliness -monkly -monkmonger -monkship -monkshood -Monmouth -monmouthite -monny -Mono -mono -monoacetate -monoacetin -monoacid -monoacidic -monoamide -monoamine -monoamino -monoammonium -monoazo -monobacillary -monobase -monobasic -monobasicity -monoblastic -monoblepsia -monoblepsis -monobloc -monobranchiate -monobromacetone -monobromated -monobromide -monobrominated -monobromination -monobromized -monobromoacetanilide -monobromoacetone -monobutyrin -monocalcium -monocarbide -monocarbonate -monocarbonic -monocarboxylic -monocardian -monocarp -monocarpal -monocarpellary -monocarpian -monocarpic -monocarpous -monocellular -monocentric -monocentrid -Monocentridae -Monocentris -monocentroid -monocephalous -monocercous -monoceros -monocerous -monochasial -monochasium -Monochlamydeae -monochlamydeous -monochlor -monochloracetic -monochloranthracene -monochlorbenzene -monochloride -monochlorinated -monochlorination -monochloro -monochloroacetic -monochlorobenzene -monochloromethane -monochoanitic -monochord -monochordist -monochordize -monochroic -monochromasy -monochromat -monochromate -monochromatic -monochromatically -monochromatism -monochromator -monochrome -monochromic -monochromical -monochromically -monochromist -monochromous -monochromy -monochronic -monochronous -monociliated -monocle -monocled -monocleid -monoclinal -monoclinally -monocline -monoclinian -monoclinic -monoclinism -monoclinometric -monoclinous -Monoclonius -Monocoelia -monocoelian -monocoelic -Monocondyla -monocondylar -monocondylian -monocondylic -monocondylous -monocormic -monocot -monocotyledon -Monocotyledones -monocotyledonous -monocracy -monocrat -monocratic -monocrotic -monocrotism -monocular -monocularity -monocularly -monoculate -monocule -monoculist -monoculous -monocultural -monoculture -monoculus -monocyanogen -monocycle -monocyclic -Monocyclica -monocystic -Monocystidae -Monocystidea -Monocystis -monocyte -monocytic -monocytopoiesis -monodactyl -monodactylate -monodactyle -monodactylism -monodactylous -monodactyly -monodelph -Monodelphia -monodelphian -monodelphic -monodelphous -monodermic -monodic -monodically -monodimetric -monodist -monodize -monodomous -Monodon -monodont -Monodonta -monodontal -monodram -monodrama -monodramatic -monodramatist -monodromic -monodromy -monody -monodynamic -monodynamism -Monoecia -monoecian -monoecious -monoeciously -monoeciousness -monoecism -monoeidic -monoestrous -monoethanolamine -monoethylamine -monofilament -monofilm -monoflagellate -monoformin -monogamian -monogamic -monogamist -monogamistic -monogamous -monogamously -monogamousness -monogamy -monoganglionic -monogastric -monogene -Monogenea -monogeneity -monogeneous -monogenesis -monogenesist -monogenesy -monogenetic -Monogenetica -monogenic -monogenism -monogenist -monogenistic -monogenous -monogeny -monoglot -monoglycerid -monoglyceride -monogoneutic -monogonoporic -monogonoporous -monogony -monogram -monogrammatic -monogrammatical -monogrammed -monogrammic -monograph -monographer -monographic -monographical -monographically -monographist -monography -monograptid -Monograptidae -Monograptus -monogynic -monogynious -monogynist -monogynoecial -monogynous -monogyny -monohybrid -monohydrate -monohydrated -monohydric -monohydrogen -monohydroxy -monoicous -monoid -monoketone -monolater -monolatrist -monolatrous -monolatry -monolayer -monoline -monolingual -monolinguist -monoliteral -monolith -monolithal -monolithic -monolobular -monolocular -monologian -monologic -monological -monologist -monologize -monologue -monologuist -monology -monomachist -monomachy -monomania -monomaniac -monomaniacal -monomastigate -monomeniscous -monomer -monomeric -monomerous -monometallic -monometallism -monometallist -monometer -monomethyl -monomethylated -monomethylic -monometric -monometrical -monomial -monomict -monomineral -monomineralic -monomolecular -monomolybdate -Monomorium -monomorphic -monomorphism -monomorphous -Monomya -Monomyaria -monomyarian -mononaphthalene -mononch -Mononchus -mononeural -Monongahela -mononitrate -mononitrated -mononitration -mononitride -mononitrobenzene -mononomial -mononomian -monont -mononuclear -mononucleated -mononucleosis -mononychous -mononym -mononymic -mononymization -mononymize -mononymy -monoousian -monoousious -monoparental -monoparesis -monoparesthesia -monopathic -monopathy -monopectinate -monopersonal -monopersulfuric -monopersulphuric -Monopetalae -monopetalous -monophagism -monophagous -monophagy -monophase -monophasia -monophasic -monophobia -monophone -monophonic -monophonous -monophony -monophotal -monophote -monophthalmic -monophthalmus -monophthong -monophthongal -monophthongization -monophthongize -monophyletic -monophyleticism -monophylite -monophyllous -monophyodont -monophyodontism -Monophysite -Monophysitic -Monophysitical -Monophysitism -monopitch -monoplacula -monoplacular -monoplaculate -monoplane -monoplanist -monoplasmatic -monoplast -monoplastic -monoplegia -monoplegic -Monopneumoa -monopneumonian -monopneumonous -monopode -monopodial -monopodially -monopodic -monopodium -monopodous -monopody -monopolar -monopolaric -monopolarity -monopole -monopolism -monopolist -monopolistic -monopolistically -monopolitical -monopolizable -monopolization -monopolize -monopolizer -monopolous -monopoly -monopolylogist -monopolylogue -monopotassium -monoprionid -monoprionidian -monopsonistic -monopsony -monopsychism -monopteral -Monopteridae -monopteroid -monopteron -monopteros -monopterous -monoptic -monoptical -monoptote -monoptotic -Monopylaea -Monopylaria -monopylean -monopyrenous -monorail -monorailroad -monorailway -monorchid -monorchidism -monorchis -monorchism -monorganic -Monorhina -monorhinal -monorhine -monorhyme -monorhymed -monorhythmic -monosaccharide -monosaccharose -monoschemic -monoscope -monose -monosemic -monosepalous -monoservice -monosilane -monosilicate -monosilicic -monosiphonic -monosiphonous -monosodium -monosomatic -monosomatous -monosome -monosomic -monosperm -monospermal -monospermic -monospermous -monospermy -monospherical -monospondylic -monosporangium -monospore -monospored -monosporiferous -monosporous -monostele -monostelic -monostelous -monostely -monostich -monostichous -Monostomata -Monostomatidae -monostomatous -monostome -Monostomidae -monostomous -Monostomum -monostromatic -monostrophe -monostrophic -monostrophics -monostylous -monosubstituted -monosubstitution -monosulfone -monosulfonic -monosulphide -monosulphone -monosulphonic -monosyllabic -monosyllabical -monosyllabically -monosyllabism -monosyllabize -monosyllable -monosymmetric -monosymmetrical -monosymmetrically -monosymmetry -monosynthetic -monotelephone -monotelephonic -monotellurite -Monothalama -monothalamian -monothalamous -monothecal -monotheism -monotheist -monotheistic -monotheistical -monotheistically -Monothelete -Monotheletian -Monotheletic -Monotheletism -monothelious -Monothelism -Monothelitic -Monothelitism -monothetic -monotic -monotint -Monotocardia -monotocardiac -monotocardian -monotocous -monotomous -monotone -monotonic -monotonical -monotonically -monotonist -monotonize -monotonous -monotonously -monotonousness -monotony -monotremal -Monotremata -monotremate -monotrematous -monotreme -monotremous -monotrichous -monotriglyph -monotriglyphic -Monotrocha -monotrochal -monotrochian -monotrochous -Monotropa -Monotropaceae -monotropaceous -monotrophic -monotropic -Monotropsis -monotropy -monotypal -monotype -monotypic -monotypical -monotypous -monoureide -monovalence -monovalency -monovalent -monovariant -monoverticillate -monovoltine -monovular -monoxenous -monoxide -monoxime -monoxyle -monoxylic -monoxylon -monoxylous -Monozoa -monozoan -monozoic -monozygotic -Monroeism -Monroeist -monrolite -monseigneur -monsieur -monsieurship -monsignor -monsignorial -Monsoni -monsoon -monsoonal -monsoonish -monsoonishly -monster -Monstera -monsterhood -monsterlike -monstership -monstrance -monstrate -monstration -monstrator -monstricide -monstriferous -monstrification -monstrify -monstrosity -monstrous -monstrously -monstrousness -Mont -montage -Montagnac -Montagnais -Montana -montana -Montanan -montane -montanic -montanin -Montanism -Montanist -Montanistic -Montanistical -montanite -Montanize -montant -Montargis -Montauk -montbretia -monte -montebrasite -monteith -montem -Montenegrin -Montepulciano -Monterey -Montes -Montesco -Montesinos -Montessorian -Montessorianism -Montezuma -montgolfier -month -monthly -monthon -Montia -monticellite -monticle -monticoline -monticulate -monticule -Monticulipora -Monticuliporidae -monticuliporidean -monticuliporoid -monticulose -monticulous -monticulus -montiform -montigeneous -montilla -montjoy -montmartrite -Montmorency -montmorilonite -monton -Montrachet -montroydite -Montu -monture -Monty -Monumbo -monument -monumental -monumentalism -monumentality -monumentalization -monumentalize -monumentally -monumentary -monumentless -monumentlike -monzodiorite -monzogabbro -monzonite -monzonitic -moo -Mooachaht -mooch -moocha -moocher -moochulka -mood -mooder -moodily -moodiness -moodish -moodishly -moodishness -moodle -moody -mooing -mool -moolet -moolings -mools -moolum -moon -moonack -moonbeam -moonbill -moonblink -mooncalf -mooncreeper -moondown -moondrop -mooned -mooner -moonery -mooneye -moonface -moonfaced -moonfall -moonfish -moonflower -moonglade -moonglow -moonhead -moonily -mooniness -mooning -moonish -moonite -moonja -moonjah -moonless -moonlet -moonlight -moonlighted -moonlighter -moonlighting -moonlighty -moonlike -moonlikeness -moonlit -moonlitten -moonman -moonpath -moonpenny -moonproof -moonraker -moonraking -moonrise -moonsail -moonscape -moonseed -moonset -moonshade -moonshine -moonshiner -moonshining -moonshiny -moonsick -moonsickness -moonstone -moontide -moonwalker -moonwalking -moonward -moonwards -moonway -moonwort -moony -moop -Moor -moor -moorage -moorball -moorband -moorberry -moorbird -moorburn -moorburner -moorburning -Moore -moorflower -moorfowl -mooring -Moorish -moorish -moorishly -moorishness -moorland -moorlander -Moorman -moorman -moorn -moorpan -moors -Moorship -moorsman -moorstone -moortetter -moorup -moorwort -moory -moosa -moose -mooseberry -moosebird -moosebush -moosecall -mooseflower -moosehood -moosemise -moosetongue -moosewob -moosewood -moosey -moost -moot -mootable -mooter -mooth -mooting -mootman -mootstead -mootworthy -mop -Mopan -mopane -mopboard -mope -moper -moph -mophead -mopheaded -moping -mopingly -mopish -mopishly -mopishness -mopla -mopper -moppet -moppy -mopstick -mopsy -mopus -Moquelumnan -moquette -Moqui -mor -mora -Moraceae -moraceous -Moraea -morainal -moraine -morainic -moral -morale -moralism -moralist -moralistic -moralistically -morality -moralization -moralize -moralizer -moralizingly -moralless -morally -moralness -morals -Moran -morass -morassic -morassweed -morassy -morat -morate -moration -moratoria -moratorium -moratory -Moravian -Moravianism -Moravianized -Moravid -moravite -moray -morbid -morbidity -morbidize -morbidly -morbidness -morbiferal -morbiferous -morbific -morbifical -morbifically -morbify -morbility -morbillary -morbilli -morbilliform -morbillous -morcellate -morcellated -morcellation -Morchella -Morcote -mordacious -mordaciously -mordacity -mordancy -mordant -mordantly -Mordella -mordellid -Mordellidae -mordelloid -mordenite -mordent -mordicate -mordication -mordicative -mordore -Mordv -Mordva -Mordvin -Mordvinian -more -moreen -morefold -moreish -morel -morella -morello -morencite -moreness -morenita -morenosite -Moreote -moreover -morepork -mores -Moresque -morfrey -morg -morga -Morgan -morgan -Morgana -morganatic -morganatical -morganatically -morganic -morganite -morganize -morgay -morgen -morgengift -morgenstern -morglay -morgue -moribund -moribundity -moribundly -moric -moriche -moriform -morigerate -morigeration -morigerous -morigerously -morigerousness -morillon -morin -Morinaceae -Morinda -morindin -morindone -morinel -Moringa -Moringaceae -moringaceous -moringad -Moringua -moringuid -Moringuidae -moringuoid -morion -Moriori -Moriscan -Morisco -Morisonian -Morisonianism -morkin -morlop -mormaor -mormaordom -mormaorship -mormo -Mormon -mormon -Mormondom -Mormoness -Mormonism -Mormonist -Mormonite -Mormonweed -Mormoops -mormyr -mormyre -mormyrian -mormyrid -Mormyridae -mormyroid -Mormyrus -morn -morne -morned -morning -morningless -morningly -mornings -morningtide -morningward -mornless -mornlike -morntime -mornward -Moro -moro -moroc -Moroccan -Morocco -morocco -morocota -morological -morologically -morologist -morology -moromancy -moron -moroncy -morong -moronic -Moronidae -moronism -moronity -moronry -Moropus -morosaurian -morosauroid -Morosaurus -morose -morosely -moroseness -morosis -morosity -moroxite -morph -morphallaxis -morphea -Morphean -morpheme -morphemic -morphemics -morphetic -Morpheus -morphew -morphia -morphiate -morphic -morphically -morphinate -morphine -morphinic -morphinism -morphinist -morphinization -morphinize -morphinomania -morphinomaniac -morphiomania -morphiomaniac -Morpho -morphogenesis -morphogenetic -morphogenic -morphogeny -morphographer -morphographic -morphographical -morphographist -morphography -morpholine -morphologic -morphological -morphologically -morphologist -morphology -morphometrical -morphometry -morphon -morphonomic -morphonomy -morphophonemic -morphophonemically -morphophonemics -morphophyly -morphoplasm -morphoplasmic -morphosis -morphotic -morphotropic -morphotropism -morphotropy -morphous -Morrenian -Morrhua -morrhuate -morrhuine -morricer -Morris -morris -Morrisean -morrow -morrowing -morrowless -morrowmass -morrowspeech -morrowtide -morsal -Morse -morse -morsel -morselization -morselize -morsing -morsure -mort -mortacious -mortal -mortalism -mortalist -mortality -mortalize -mortally -mortalness -mortalwise -mortar -mortarboard -mortarize -mortarless -mortarlike -mortarware -mortary -mortbell -mortcloth -mortersheen -mortgage -mortgageable -mortgagee -mortgagor -morth -morthwyrtha -mortician -mortier -mortiferous -mortiferously -mortiferousness -mortific -mortification -mortified -mortifiedly -mortifiedness -mortifier -mortify -mortifying -mortifyingly -Mortimer -mortise -mortiser -mortling -mortmain -mortmainer -Morton -mortuarian -mortuary -mortuous -morula -morular -morulation -morule -moruloid -Morus -morvin -morwong -Mosaic -mosaic -Mosaical -mosaical -mosaically -mosaicism -mosaicist -Mosaicity -Mosaism -Mosaist -mosaist -mosandrite -mosasaur -Mosasauri -Mosasauria -mosasaurian -mosasaurid -Mosasauridae -mosasauroid -Mosasaurus -Mosatenan -moschate -moschatel -moschatelline -Moschi -Moschidae -moschiferous -Moschinae -moschine -Moschus -Moscow -Mose -Moselle -Moses -mosesite -Mosetena -mosette -mosey -Mosgu -moskeneer -mosker -Moslem -Moslemah -Moslemic -Moslemin -Moslemism -Moslemite -Moslemize -moslings -mosque -mosquelet -mosquish -mosquital -Mosquito -mosquito -mosquitobill -mosquitocidal -mosquitocide -mosquitoey -mosquitoish -mosquitoproof -moss -mossback -mossberry -mossbunker -mossed -mosser -mossery -mossful -mosshead -Mossi -mossiness -mossless -mosslike -mosstrooper -mosstroopery -mosstrooping -mosswort -mossy -mossyback -most -moste -Mosting -mostlike -mostlings -mostly -mostness -Mosul -Mosur -mot -Motacilla -motacillid -Motacillidae -Motacillinae -motacilline -motatorious -motatory -Motazilite -mote -moted -motel -moteless -moter -motet -motettist -motey -moth -mothed -mother -motherdom -mothered -motherer -mothergate -motherhood -motheriness -mothering -motherkin -motherland -motherless -motherlessness -motherlike -motherliness -motherling -motherly -mothership -mothersome -motherward -motherwise -motherwort -mothery -mothless -mothlike -mothproof -mothworm -mothy -motif -motific -motile -motility -motion -motionable -motional -motionless -motionlessly -motionlessness -motitation -motivate -motivation -motivational -motive -motiveless -motivelessly -motivelessness -motiveness -motivity -motley -motleyness -motmot -motofacient -motograph -motographic -motomagnetic -motoneuron -motophone -motor -motorable -motorboat -motorboatman -motorbus -motorcab -motorcade -motorcar -motorcycle -motorcyclist -motordom -motordrome -motored -motorial -motoric -motoring -motorism -motorist -motorium -motorization -motorize -motorless -motorman -motorneer -motorphobe -motorphobia -motorphobiac -motorway -motory -Motozintlec -Motozintleca -motricity -Mott -mott -motte -mottle -mottled -mottledness -mottlement -mottler -mottling -motto -mottoed -mottoless -mottolike -mottramite -motyka -mou -moucharaby -mouchardism -mouche -mouchrabieh -moud -moudie -moudieman -moudy -mouflon -Mougeotia -Mougeotiaceae -mouillation -mouille -mouillure -moujik -moul -mould -moulded -moule -moulin -moulinage -moulinet -moulleen -moulrush -mouls -moulter -mouly -mound -moundiness -moundlet -moundwork -moundy -mount -mountable -mountably -mountain -mountained -mountaineer -mountainet -mountainette -mountainless -mountainlike -mountainous -mountainously -mountainousness -mountainside -mountaintop -mountainward -mountainwards -mountainy -mountant -mountebank -mountebankery -mountebankish -mountebankism -mountebankly -mounted -mounter -Mountie -mounting -mountingly -mountlet -mounture -moup -mourn -mourner -mourneress -mournful -mournfully -mournfulness -mourning -mourningly -mournival -mournsome -mouse -mousebane -mousebird -mousefish -mousehawk -mousehole -mousehound -Mouseion -mousekin -mouselet -mouselike -mouseproof -mouser -mousery -mouseship -mousetail -mousetrap -mouseweb -mousey -mousily -mousiness -mousing -mousingly -mousle -mousmee -Mousoni -mousquetaire -mousse -Mousterian -moustoc -mousy -mout -moutan -mouth -mouthable -mouthbreeder -mouthed -mouther -mouthful -mouthily -mouthiness -mouthing -mouthingly -mouthishly -mouthless -mouthlike -mouthpiece -mouthroot -mouthwash -mouthwise -mouthy -mouton -moutonnee -mouzah -mouzouna -movability -movable -movableness -movably -movant -move -moveability -moveableness -moveably -moveless -movelessly -movelessness -movement -mover -movie -moviedom -movieize -movieland -moving -movingly -movingness -mow -mowable -mowana -mowburn -mowburnt -mowch -mowcht -mower -mowha -mowie -mowing -mowland -mown -mowra -mowrah -mowse -mowstead -mowt -mowth -moxa -moxieberry -Moxo -moy -moyen -moyenless -moyenne -moyite -moyle -moyo -Mozambican -mozambique -Mozarab -Mozarabian -Mozarabic -Mozartean -mozemize -mozing -mozzetta -Mpangwe -Mpondo -mpret -Mr -Mrs -Mru -mu -muang -mubarat -mucago -mucaro -mucedin -mucedinaceous -mucedine -mucedinous -much -muchfold -muchly -muchness -mucic -mucid -mucidness -muciferous -mucific -muciform -mucigen -mucigenous -mucilage -mucilaginous -mucilaginously -mucilaginousness -mucin -mucinogen -mucinoid -mucinous -muciparous -mucivore -mucivorous -muck -muckender -Mucker -mucker -muckerish -muckerism -mucket -muckiness -muckite -muckle -muckluck -muckman -muckment -muckmidden -muckna -muckrake -muckraker -mucksweat -mucksy -muckthrift -muckweed -muckworm -mucky -mucluc -mucocele -mucocellulose -mucocellulosic -mucocutaneous -mucodermal -mucofibrous -mucoflocculent -mucoid -mucomembranous -muconic -mucoprotein -mucopurulent -mucopus -mucor -Mucoraceae -mucoraceous -Mucorales -mucorine -mucorioid -mucormycosis -mucorrhea -mucosa -mucosal -mucosanguineous -mucose -mucoserous -mucosity -mucosocalcareous -mucosogranular -mucosopurulent -mucososaccharine -mucous -mucousness -mucro -mucronate -mucronately -mucronation -mucrones -mucroniferous -mucroniform -mucronulate -mucronulatous -muculent -Mucuna -mucus -mucusin -mud -mudar -mudbank -mudcap -mudd -mudde -mudden -muddify -muddily -muddiness -mudding -muddish -muddle -muddlebrained -muddledom -muddlehead -muddleheaded -muddleheadedness -muddlement -muddleproof -muddler -muddlesome -muddlingly -muddy -muddybrained -muddybreast -muddyheaded -mudee -Mudejar -mudfish -mudflow -mudguard -mudhead -mudhole -mudhopper -mudir -mudiria -mudland -mudlark -mudlarker -mudless -mudproof -mudra -mudsill -mudskipper -mudslinger -mudslinging -mudspate -mudstain -mudstone -mudsucker -mudtrack -mudweed -mudwort -Muehlenbeckia -muermo -muezzin -muff -muffed -muffet -muffetee -muffin -muffineer -muffish -muffishness -muffle -muffled -muffleman -muffler -mufflin -muffy -mufti -mufty -mug -muga -mugearite -mugful -mugg -mugger -mugget -muggily -mugginess -muggins -muggish -muggles -Muggletonian -Muggletonianism -muggy -mughouse -mugience -mugiency -mugient -Mugil -Mugilidae -mugiliform -mugiloid -mugweed -mugwort -mugwump -mugwumpery -mugwumpian -mugwumpism -muhammadi -Muharram -Muhlenbergia -muid -Muilla -muir -muirburn -muircock -muirfowl -muishond -muist -mujtahid -Mukden -mukluk -Mukri -muktar -muktatma -mukti -mulaprakriti -mulatta -mulatto -mulattoism -mulattress -mulberry -mulch -mulcher -Mulciber -Mulcibirian -mulct -mulctable -mulctary -mulctation -mulctative -mulctatory -mulctuary -mulder -mule -muleback -mulefoot -mulefooted -muleman -muleta -muleteer -muletress -muletta -mulewort -muley -mulga -muliebral -muliebria -muliebrile -muliebrity -muliebrous -mulier -mulierine -mulierose -mulierosity -mulish -mulishly -mulishness -mulism -mulita -mulk -mull -mulla -mullah -mullar -mullein -mullenize -muller -Mullerian -mullet -mulletry -mullets -mulley -mullid -Mullidae -mulligan -mulligatawny -mulligrubs -mullion -mullite -mullock -mullocker -mullocky -mulloid -mulloway -mulmul -mulse -mulsify -mult -multangular -multangularly -multangularness -multangulous -multangulum -Multani -multanimous -multarticulate -multeity -multiangular -multiareolate -multiarticular -multiarticulate -multiarticulated -multiaxial -multiblade -multibladed -multibranched -multibranchiate -multibreak -multicamerate -multicapitate -multicapsular -multicarinate -multicarinated -multicellular -multicentral -multicentric -multicharge -multichord -multichrome -multiciliate -multiciliated -multicipital -multicircuit -multicoccous -multicoil -multicolor -multicolored -multicolorous -multicomponent -multiconductor -multiconstant -multicore -multicorneal -multicostate -multicourse -multicrystalline -multicuspid -multicuspidate -multicycle -multicylinder -multicylindered -multidentate -multidenticulate -multidenticulated -multidigitate -multidimensional -multidirectional -multidisperse -multiengine -multiengined -multiexhaust -multifaced -multifaceted -multifactorial -multifamilial -multifarious -multifariously -multifariousness -multiferous -multifetation -multifibered -multifid -multifidly -multifidous -multifidus -multifilament -multifistular -multiflagellate -multiflagellated -multiflash -multiflorous -multiflow -multiflue -multifocal -multifoil -multifoiled -multifold -multifoliate -multifoliolate -multiform -multiformed -multiformity -multifurcate -multiganglionic -multigap -multigranulate -multigranulated -Multigraph -multigraph -multigrapher -multiguttulate -multigyrate -multihead -multihearth -multihued -multijet -multijugate -multijugous -multilaciniate -multilamellar -multilamellate -multilamellous -multilaminar -multilaminate -multilaminated -multilateral -multilaterally -multilighted -multilineal -multilinear -multilingual -multilinguist -multilirate -multiliteral -multilobar -multilobate -multilobe -multilobed -multilobular -multilobulate -multilobulated -multilocation -multilocular -multiloculate -multiloculated -multiloquence -multiloquent -multiloquious -multiloquous -multiloquy -multimacular -multimammate -multimarble -multimascular -multimedial -multimetalic -multimetallism -multimetallist -multimillion -multimillionaire -multimodal -multimodality -multimolecular -multimotor -multimotored -multinational -multinervate -multinervose -multinodal -multinodate -multinodous -multinodular -multinomial -multinominal -multinominous -multinuclear -multinucleate -multinucleated -multinucleolar -multinucleolate -multinucleolated -multiovular -multiovulate -multipara -multiparient -multiparity -multiparous -multipartisan -multipartite -multiped -multiperforate -multiperforated -multipersonal -multiphase -multiphaser -multiphotography -multipinnate -multiplane -multiple -multiplepoinding -multiplet -multiplex -multipliable -multipliableness -multiplicability -multiplicable -multiplicand -multiplicate -multiplication -multiplicational -multiplicative -multiplicatively -multiplicator -multiplicity -multiplier -multiply -multiplying -multipointed -multipolar -multipole -multiported -multipotent -multipresence -multipresent -multiradial -multiradiate -multiradiated -multiradicate -multiradicular -multiramified -multiramose -multiramous -multirate -multireflex -multirooted -multirotation -multirotatory -multisaccate -multisacculate -multisacculated -multiscience -multiseated -multisect -multisector -multisegmental -multisegmentate -multisegmented -multisensual -multiseptate -multiserial -multiserially -multiseriate -multishot -multisiliquous -multisonous -multispeed -multispermous -multispicular -multispiculate -multispindle -multispinous -multispiral -multispired -multistage -multistaminate -multistoried -multistory -multistratified -multistratous -multistriate -multisulcate -multisulcated -multisyllabic -multisyllability -multisyllable -multitarian -multitentaculate -multitheism -multithreaded -multititular -multitoed -multitoned -multitube -Multituberculata -multituberculate -multituberculated -multituberculism -multituberculy -multitubular -multitude -multitudinal -multitudinary -multitudinism -multitudinist -multitudinistic -multitudinosity -multitudinous -multitudinously -multitudinousness -multiturn -multivagant -multivalence -multivalency -multivalent -multivalve -multivalved -multivalvular -multivane -multivariant -multivarious -multiversant -multiverse -multivibrator -multivincular -multivious -multivocal -multivocalness -multivoiced -multivolent -multivoltine -multivolumed -multivorous -multocular -multum -multungulate -multure -multurer -mum -mumble -mumblebee -mumblement -mumbler -mumbling -mumblingly -mummer -mummery -mummichog -mummick -mummied -mummification -mummiform -mummify -mumming -mummy -mummydom -mummyhood -mummylike -mumness -mump -mumper -mumphead -mumpish -mumpishly -mumpishness -mumps -mumpsimus -mumruffin -mun -Munandi -Muncerian -munch -Munchausenism -Munchausenize -muncheel -muncher -munchet -mund -Munda -mundane -mundanely -mundaneness -mundanism -mundanity -Mundari -mundatory -mundic -mundificant -mundification -mundifier -mundify -mundil -mundivagant -mundle -mung -munga -munge -mungey -mungo -mungofa -munguba -mungy -Munia -Munich -Munichism -municipal -municipalism -municipalist -municipality -municipalization -municipalize -municipalizer -municipally -municipium -munific -munificence -munificency -munificent -munificently -munificentness -muniment -munition -munitionary -munitioneer -munitioner -munitions -munity -munj -munjeet -munjistin -munnion -Munnopsidae -Munnopsis -Munsee -munshi -munt -Muntiacus -muntin -Muntingia -muntjac -Munychia -Munychian -Munychion -Muong -Muphrid -Mura -mura -Muradiyah -Muraena -Muraenidae -muraenoid -murage -mural -muraled -muralist -murally -Muran -Muranese -murasakite -Murat -Muratorian -murchy -murder -murderer -murderess -murdering -murderingly -murderish -murderment -murderous -murderously -murderousness -murdrum -mure -murenger -murex -murexan -murexide -murga -murgavi -murgeon -muriate -muriated -muriatic -muricate -muricid -Muricidae -muriciform -muricine -muricoid -muriculate -murid -Muridae -muridism -Muriel -muriform -muriformly -Murillo -Murinae -murine -murinus -muriti -murium -murk -murkily -murkiness -murkish -murkly -murkness -murksome -murky -murlin -murly -Murmi -murmur -murmuration -murmurator -murmurer -murmuring -murmuringly -murmurish -murmurless -murmurlessly -murmurous -murmurously -muromontite -Murph -murphy -murra -murrain -Murray -Murraya -murre -murrelet -murrey -murrhine -murrina -murrnong -murshid -Murthy -murumuru -Murut -muruxi -murva -murza -Murzim -Mus -Musa -Musaceae -musaceous -Musaeus -musal -Musales -Musalmani -musang -musar -Musca -muscade -muscadel -muscadine -Muscadinia -muscardine -Muscardinidae -Muscardinus -Muscari -muscariform -muscarine -muscat -muscatel -muscatorium -Musci -Muscicapa -Muscicapidae -muscicapine -muscicide -muscicole -muscicoline -muscicolous -muscid -Muscidae -musciform -Muscinae -muscle -muscled -muscleless -musclelike -muscling -muscly -Muscogee -muscoid -Muscoidea -muscologic -muscological -muscologist -muscology -muscone -muscose -muscoseness -muscosity -muscot -muscovadite -muscovado -Muscovi -Muscovite -muscovite -Muscovitic -muscovitization -muscovitize -muscovy -muscular -muscularity -muscularize -muscularly -musculation -musculature -muscule -musculin -musculoarterial -musculocellular -musculocutaneous -musculodermic -musculoelastic -musculofibrous -musculointestinal -musculoligamentous -musculomembranous -musculopallial -musculophrenic -musculospinal -musculospiral -musculotegumentary -musculotendinous -Muse -muse -mused -museful -musefully -museist -museless -muselike -museographist -museography -museologist -museology -muser -musery -musette -museum -museumize -Musgu -mush -musha -mushaa -Mushabbihite -mushed -musher -mushhead -mushheaded -mushheadedness -mushily -mushiness -mushla -mushmelon -mushrebiyeh -mushroom -mushroomer -mushroomic -mushroomlike -mushroomy -mushru -mushy -music -musical -musicale -musicality -musicalization -musicalize -musically -musicalness -musicate -musician -musiciana -musicianer -musicianly -musicianship -musicker -musicless -musiclike -musicmonger -musico -musicoartistic -musicodramatic -musicofanatic -musicographer -musicography -musicological -musicologist -musicologue -musicology -musicomania -musicomechanical -musicophilosophical -musicophobia -musicophysical -musicopoetic -musicotherapy -musicproof -musie -musily -musimon -musing -musingly -musk -muskat -muskeg -muskeggy -muskellunge -musket -musketade -musketeer -musketlike -musketoon -musketproof -musketry -muskflower -Muskhogean -muskie -muskiness -muskish -musklike -muskmelon -Muskogee -muskrat -muskroot -Muskwaki -muskwood -musky -muslin -muslined -muslinet -musnud -Musophaga -Musophagi -Musophagidae -musophagine -musquash -musquashroot -musquashweed -musquaspen -musquaw -musrol -muss -mussable -mussably -Mussaenda -mussal -mussalchee -mussel -musseled -musseler -mussily -mussiness -mussitate -mussitation -mussuk -Mussulman -Mussulmanic -Mussulmanish -Mussulmanism -Mussulwoman -mussurana -mussy -must -mustache -mustached -mustachial -mustachio -mustachioed -mustafina -Mustahfiz -mustang -mustanger -mustard -mustarder -mustee -Mustela -mustelid -Mustelidae -musteline -mustelinous -musteloid -Mustelus -muster -musterable -musterdevillers -musterer -mustermaster -mustify -mustily -mustiness -mustnt -musty -muta -Mutabilia -mutability -mutable -mutableness -mutably -mutafacient -mutage -mutagenic -mutant -mutarotate -mutarotation -mutase -mutate -mutation -mutational -mutationally -mutationism -mutationist -mutative -mutatory -mutawalli -Mutazala -mutch -mute -mutedly -mutely -muteness -Muter -mutesarif -mutescence -mutessarifat -muth -muthmannite -muthmassel -mutic -muticous -mutilate -mutilation -mutilative -mutilator -mutilatory -Mutilla -mutillid -Mutillidae -mutilous -mutineer -mutinous -mutinously -mutinousness -mutiny -Mutisia -Mutisiaceae -mutism -mutist -mutistic -mutive -mutivity -mutoscope -mutoscopic -mutsje -mutsuddy -mutt -mutter -mutterer -muttering -mutteringly -mutton -muttonbird -muttonchop -muttonfish -muttonhead -muttonheaded -muttonhood -muttonmonger -muttonwood -muttony -mutual -mutualism -mutualist -mutualistic -mutuality -mutualization -mutualize -mutually -mutualness -mutuary -mutuatitious -mutulary -mutule -mutuum -mux -Muysca -muyusa -muzhik -Muzo -muzz -muzzily -muzziness -muzzle -muzzler -muzzlewood -muzzy -Mwa -my -Mya -Myacea -myal -myalgia -myalgic -myalism -myall -Myaria -myarian -myasthenia -myasthenic -myatonia -myatonic -myatony -myatrophy -mycele -mycelia -mycelial -mycelian -mycelioid -mycelium -myceloid -Mycenaean -Mycetes -mycetism -mycetocyte -mycetogenesis -mycetogenetic -mycetogenic -mycetogenous -mycetoid -mycetological -mycetology -mycetoma -mycetomatous -Mycetophagidae -mycetophagous -mycetophilid -Mycetophilidae -mycetous -Mycetozoa -mycetozoan -mycetozoon -Mycobacteria -Mycobacteriaceae -Mycobacterium -mycocecidium -mycocyte -mycoderm -mycoderma -mycodermatoid -mycodermatous -mycodermic -mycodermitis -mycodesmoid -mycodomatium -mycogastritis -Mycogone -mycohaemia -mycohemia -mycoid -mycologic -mycological -mycologically -mycologist -mycologize -mycology -mycomycete -Mycomycetes -mycomycetous -mycomyringitis -mycophagist -mycophagous -mycophagy -mycophyte -Mycoplana -mycoplasm -mycoplasmic -mycoprotein -mycorhiza -mycorhizal -mycorrhizal -mycose -mycosin -mycosis -mycosozin -Mycosphaerella -Mycosphaerellaceae -mycosterol -mycosymbiosis -mycotic -mycotrophic -Mycteria -mycteric -mycterism -Myctodera -myctophid -Myctophidae -Myctophum -Mydaidae -mydaleine -mydatoxine -Mydaus -mydine -mydriasine -mydriasis -mydriatic -mydriatine -myectomize -myectomy -myectopia -myectopy -myelalgia -myelapoplexy -myelasthenia -myelatrophy -myelauxe -myelemia -myelencephalic -myelencephalon -myelencephalous -myelic -myelin -myelinate -myelinated -myelination -myelinic -myelinization -myelinogenesis -myelinogenetic -myelinogeny -myelitic -myelitis -myeloblast -myeloblastic -myelobrachium -myelocele -myelocerebellar -myelocoele -myelocyst -myelocystic -myelocystocele -myelocyte -myelocythaemia -myelocythemia -myelocytic -myelocytosis -myelodiastasis -myeloencephalitis -myeloganglitis -myelogenesis -myelogenetic -myelogenous -myelogonium -myeloic -myeloid -myelolymphangioma -myelolymphocyte -myeloma -myelomalacia -myelomatoid -myelomatosis -myelomenia -myelomeningitis -myelomeningocele -myelomere -myelon -myelonal -myeloneuritis -myelonic -myeloparalysis -myelopathic -myelopathy -myelopetal -myelophthisis -myeloplast -myeloplastic -myeloplax -myeloplegia -myelopoiesis -myelopoietic -myelorrhagia -myelorrhaphy -myelosarcoma -myelosclerosis -myelospasm -myelospongium -myelosyphilis -myelosyphilosis -myelosyringosis -myelotherapy -Myelozoa -myelozoan -myentasis -myenteric -myenteron -myesthesia -mygale -mygalid -mygaloid -Myiarchus -myiasis -myiferous -myiodesopsia -myiosis -myitis -mykiss -myliobatid -Myliobatidae -myliobatine -myliobatoid -Mylodon -mylodont -Mylodontidae -mylohyoid -mylohyoidean -mylonite -mylonitic -Mymar -mymarid -Mymaridae -myna -Mynheer -mynpacht -mynpachtbrief -myoalbumin -myoalbumose -myoatrophy -myoblast -myoblastic -myocardiac -myocardial -myocardiogram -myocardiograph -myocarditic -myocarditis -myocardium -myocele -myocellulitis -myoclonic -myoclonus -myocoele -myocoelom -myocolpitis -myocomma -myocyte -myodegeneration -Myodes -myodiastasis -myodynamia -myodynamic -myodynamics -myodynamiometer -myodynamometer -myoedema -myoelectric -myoendocarditis -myoepicardial -myoepithelial -myofibril -myofibroma -myogen -myogenesis -myogenetic -myogenic -myogenous -myoglobin -myoglobulin -myogram -myograph -myographer -myographic -myographical -myographist -myography -myohematin -myoid -myoidema -myokinesis -myolemma -myolipoma -myoliposis -myologic -myological -myologist -myology -myolysis -myoma -myomalacia -myomancy -myomantic -myomatous -myomectomy -myomelanosis -myomere -myometritis -myometrium -myomohysterectomy -myomorph -Myomorpha -myomorphic -myomotomy -myoneme -myoneural -myoneuralgia -myoneurasthenia -myoneure -myoneuroma -myoneurosis -myonosus -myopachynsis -myoparalysis -myoparesis -myopathia -myopathic -myopathy -myope -myoperitonitis -myophan -myophore -myophorous -myophysical -myophysics -myopia -myopic -myopical -myopically -myoplasm -myoplastic -myoplasty -myopolar -Myoporaceae -myoporaceous -myoporad -Myoporum -myoproteid -myoprotein -myoproteose -myops -myopy -myorrhaphy -myorrhexis -myosalpingitis -myosarcoma -myosarcomatous -myosclerosis -myoscope -myoseptum -myosin -myosinogen -myosinose -myosis -myositic -myositis -myosote -Myosotis -myospasm -myospasmia -Myosurus -myosuture -myosynizesis -myotacismus -Myotalpa -Myotalpinae -myotasis -myotenotomy -myothermic -myotic -myotome -myotomic -myotomy -myotonia -myotonic -myotonus -myotony -myotrophy -myowun -Myoxidae -myoxine -Myoxus -Myra -myrabalanus -myrabolam -myrcene -Myrcia -myrcia -myriacanthous -myriacoulomb -myriad -myriaded -myriadfold -myriadly -myriadth -myriagram -myriagramme -myrialiter -myrialitre -myriameter -myriametre -Myrianida -myriapod -Myriapoda -myriapodan -myriapodous -myriarch -myriarchy -myriare -Myrica -myrica -Myricaceae -myricaceous -Myricales -myricetin -myricin -Myrick -myricyl -myricylic -Myrientomata -myringa -myringectomy -myringitis -myringodectomy -myringodermatitis -myringomycosis -myringoplasty -myringotome -myringotomy -myriological -myriologist -myriologue -myriophyllite -myriophyllous -Myriophyllum -Myriopoda -myriopodous -myriorama -myrioscope -myriosporous -myriotheism -Myriotrichia -Myriotrichiaceae -myriotrichiaceous -myristate -myristic -Myristica -myristica -Myristicaceae -myristicaceous -Myristicivora -myristicivorous -myristin -myristone -Myrmecia -Myrmecobiinae -myrmecobine -Myrmecobius -myrmecochorous -myrmecochory -myrmecoid -myrmecoidy -myrmecological -myrmecologist -myrmecology -Myrmecophaga -Myrmecophagidae -myrmecophagine -myrmecophagoid -myrmecophagous -myrmecophile -myrmecophilism -myrmecophilous -myrmecophily -myrmecophobic -myrmecophyte -myrmecophytic -myrmekite -Myrmeleon -Myrmeleonidae -Myrmeleontidae -Myrmica -myrmicid -Myrmicidae -myrmicine -myrmicoid -Myrmidon -Myrmidonian -myrmotherine -myrobalan -Myron -myron -myronate -myronic -myrosin -myrosinase -Myrothamnaceae -myrothamnaceous -Myrothamnus -Myroxylon -myrrh -myrrhed -myrrhic -myrrhine -Myrrhis -myrrhol -myrrhophore -myrrhy -Myrsinaceae -myrsinaceous -myrsinad -Myrsiphyllum -Myrtaceae -myrtaceous -myrtal -Myrtales -myrtiform -Myrtilus -myrtle -myrtleberry -myrtlelike -myrtol -Myrtus -mysel -myself -mysell -Mysian -mysid -Mysidacea -Mysidae -mysidean -Mysis -mysogynism -mysoid -mysophobia -Mysore -mysosophist -mysost -myst -mystacial -Mystacocete -Mystacoceti -mystagogic -mystagogical -mystagogically -mystagogue -mystagogy -mystax -mysterial -mysteriarch -mysteriosophic -mysteriosophy -mysterious -mysteriously -mysteriousness -mysterize -mystery -mystes -mystic -mystical -mysticality -mystically -mysticalness -Mysticete -mysticete -Mysticeti -mysticetous -mysticism -mysticity -mysticize -mysticly -mystific -mystifically -mystification -mystificator -mystificatory -mystifiedly -mystifier -mystify -mystifyingly -mytacism -myth -mythical -mythicalism -mythicality -mythically -mythicalness -mythicism -mythicist -mythicize -mythicizer -mythification -mythify -mythism -mythist -mythize -mythland -mythmaker -mythmaking -mythoclast -mythoclastic -mythogenesis -mythogonic -mythogony -mythographer -mythographist -mythography -mythogreen -mythoheroic -mythohistoric -mythologema -mythologer -mythological -mythologically -mythologist -mythologize -mythologizer -mythologue -mythology -mythomania -mythomaniac -mythometer -mythonomy -mythopastoral -mythopoeic -mythopoeism -mythopoeist -mythopoem -mythopoesis -mythopoesy -mythopoet -mythopoetic -mythopoetize -mythopoetry -mythos -mythus -Mytilacea -mytilacean -mytilaceous -Mytiliaspis -mytilid -Mytilidae -mytiliform -mytiloid -mytilotoxine -Mytilus -myxa -myxadenitis -myxadenoma -myxaemia -myxamoeba -myxangitis -myxasthenia -myxedema -myxedematoid -myxedematous -myxedemic -myxemia -Myxine -Myxinidae -myxinoid -Myxinoidei -myxo -Myxobacteria -Myxobacteriaceae -myxobacteriaceous -Myxobacteriales -myxoblastoma -myxochondroma -myxochondrosarcoma -Myxococcus -myxocystoma -myxocyte -myxoenchondroma -myxofibroma -myxofibrosarcoma -myxoflagellate -myxogaster -Myxogasteres -Myxogastrales -Myxogastres -myxogastric -myxogastrous -myxoglioma -myxoid -myxoinoma -myxolipoma -myxoma -myxomatosis -myxomatous -Myxomycetales -myxomycete -Myxomycetes -myxomycetous -myxomyoma -myxoneuroma -myxopapilloma -Myxophyceae -myxophycean -Myxophyta -myxopod -Myxopoda -myxopodan -myxopodium -myxopodous -myxopoiesis -myxorrhea -myxosarcoma -Myxospongiae -myxospongian -Myxospongida -myxospore -Myxosporidia -myxosporidian -Myxosporidiida -Myxosporium -myxosporous -Myxothallophyta -myxotheca -Myzodendraceae -myzodendraceous -Myzodendron -Myzomyia -myzont -Myzontes -Myzostoma -Myzostomata -myzostomatous -myzostome -myzostomid -Myzostomida -Myzostomidae -myzostomidan -myzostomous -N -n -na -naa -naam -Naaman -Naassenes -nab -nabak -Nabal -Nabalism -Nabalite -Nabalitic -Nabaloi -Nabalus -Nabataean -Nabatean -Nabathaean -Nabathean -Nabathite -nabber -Nabby -nabk -nabla -nable -nabob -nabobery -nabobess -nabobical -nabobish -nabobishly -nabobism -nabobry -nabobship -Nabothian -nabs -Nabu -nacarat -nacarine -nace -nacelle -nach -nachani -Nachitoch -Nachitoches -Nachschlag -Nacionalista -nacket -nacre -nacred -nacreous -nacrine -nacrite -nacrous -nacry -nadder -Nadeem -nadir -nadiral -nadorite -nae -naebody -naegate -naegates -nael -Naemorhedinae -naemorhedine -Naemorhedus -naether -naething -nag -Naga -naga -nagaika -nagana -nagara -Nagari -nagatelite -nagger -naggin -nagging -naggingly -naggingness -naggish -naggle -naggly -naggy -naght -nagkassar -nagmaal -nagman -nagnag -nagnail -nagor -nagsman -nagster -nagual -nagualism -nagualist -nagyagite -Nahanarvali -Nahane -Nahani -Naharvali -Nahor -Nahua -Nahuan -Nahuatl -Nahuatlac -Nahuatlan -Nahuatleca -Nahuatlecan -Nahum -naiad -Naiadaceae -naiadaceous -Naiadales -Naiades -naiant -Naias -naid -naif -naifly -naig -naigie -naik -nail -nailbin -nailbrush -nailer -naileress -nailery -nailhead -nailing -nailless -naillike -nailprint -nailproof -nailrod -nailshop -nailsick -nailsmith -nailwort -naily -Naim -nain -nainsel -nainsook -naio -naipkin -Nair -nairy -nais -naish -naissance -naissant -naither -naive -naively -naiveness -naivete -naivety -Naja -nak -nake -naked -nakedish -nakedize -nakedly -nakedness -nakedweed -nakedwood -naker -nakhlite -nakhod -nakhoda -Nakir -nako -Nakomgilisala -nakong -nakoo -Nakula -Nalita -nallah -nam -Nama -namability -namable -Namaqua -namaqua -Namaquan -namaycush -namaz -namazlik -Nambe -namda -name -nameability -nameable -nameboard -nameless -namelessly -namelessness -nameling -namely -namer -namesake -naming -nammad -Nan -nan -Nana -nana -Nanaimo -nanawood -Nance -Nancy -nancy -Nanda -Nandi -nandi -Nandina -nandine -nandow -nandu -nane -nanes -nanga -nanism -nanization -nankeen -Nankin -nankin -Nanking -Nankingese -nannander -nannandrium -nannandrous -Nannette -nannoplankton -Nanny -nanny -nannyberry -nannybush -nanocephalia -nanocephalic -nanocephalism -nanocephalous -nanocephalus -nanocephaly -nanoid -nanomelia -nanomelous -nanomelus -nanosoma -nanosomia -nanosomus -nanpie -nant -Nanticoke -nantle -nantokite -Nantz -naological -naology -naometry -Naomi -Naos -naos -Naosaurus -Naoto -nap -napa -Napaea -Napaean -napal -napalm -nape -napead -napecrest -napellus -naperer -napery -naphtha -naphthacene -naphthalate -naphthalene -naphthaleneacetic -naphthalenesulphonic -naphthalenic -naphthalenoid -naphthalic -naphthalidine -naphthalin -naphthaline -naphthalization -naphthalize -naphthalol -naphthamine -naphthanthracene -naphthene -naphthenic -naphthinduline -naphthionate -naphtho -naphthoic -naphthol -naphtholate -naphtholize -naphtholsulphonate -naphtholsulphonic -naphthoquinone -naphthoresorcinol -naphthosalol -naphthous -naphthoxide -naphthyl -naphthylamine -naphthylaminesulphonic -naphthylene -naphthylic -naphtol -Napierian -napiform -napkin -napkining -napless -naplessness -Napoleon -napoleon -Napoleonana -Napoleonic -Napoleonically -Napoleonism -Napoleonist -Napoleonistic -napoleonite -Napoleonize -napoo -nappe -napped -napper -nappiness -napping -nappishness -nappy -naprapath -naprapathy -napron -napthionic -napu -nar -Narcaciontes -Narcaciontidae -narceine -narcism -Narciss -Narcissan -narcissi -Narcissine -narcissism -narcissist -narcissistic -Narcissus -narcist -narcistic -narcoanalysis -narcoanesthesia -Narcobatidae -Narcobatoidea -Narcobatus -narcohypnia -narcohypnosis -narcolepsy -narcoleptic -narcoma -narcomania -narcomaniac -narcomaniacal -narcomatous -Narcomedusae -narcomedusan -narcose -narcosis -narcostimulant -narcosynthesis -narcotherapy -narcotia -narcotic -narcotical -narcotically -narcoticalness -narcoticism -narcoticness -narcotina -narcotine -narcotinic -narcotism -narcotist -narcotization -narcotize -narcous -nard -nardine -nardoo -Nardus -Naren -Narendra -nares -Naresh -narghile -nargil -narial -naric -narica -naricorn -nariform -narine -naringenin -naringin -nark -narky -narr -narra -Narraganset -narras -narratable -narrate -narrater -narration -narrational -narrative -narratively -narrator -narratory -narratress -narratrix -narrawood -narrow -narrower -narrowhearted -narrowheartedness -narrowingness -narrowish -narrowly -narrowness -narrowy -narsarsukite -narsinga -narthecal -Narthecium -narthex -narwhal -narwhalian -nary -nasab -nasal -Nasalis -nasalis -nasalism -nasality -nasalization -nasalize -nasally -nasalward -nasalwards -nasard -Nascan -Nascapi -nascence -nascency -nascent -nasch -naseberry -nasethmoid -nash -nashgab -nashgob -Nashim -Nashira -Nashua -nasi -nasial -nasicorn -Nasicornia -nasicornous -Nasiei -nasiform -nasilabial -nasillate -nasillation -nasioalveolar -nasiobregmatic -nasioinial -nasiomental -nasion -nasitis -Naskhi -nasoalveola -nasoantral -nasobasilar -nasobronchial -nasobuccal -nasoccipital -nasociliary -nasoethmoidal -nasofrontal -nasolabial -nasolachrymal -nasological -nasologist -nasology -nasomalar -nasomaxillary -nasonite -nasoorbital -nasopalatal -nasopalatine -nasopharyngeal -nasopharyngitis -nasopharynx -nasoprognathic -nasoprognathism -nasorostral -nasoscope -nasoseptal -nasosinuitis -nasosinusitis -nasosubnasal -nasoturbinal -nasrol -Nassa -Nassau -Nassellaria -nassellarian -Nassidae -nassology -nast -nastaliq -nastic -nastika -nastily -nastiness -nasturtion -nasturtium -nasty -Nasua -nasus -nasute -nasuteness -nasutiform -nasutus -nat -natability -nataka -Natal -natal -Natalia -Natalian -Natalie -natality -nataloin -natals -natant -natantly -Nataraja -natation -natational -natator -natatorial -natatorious -natatorium -natatory -natch -natchbone -Natchez -Natchezan -Natchitoches -natchnee -Nate -nates -Nathan -Nathanael -Nathaniel -nathe -nather -nathless -Natica -Naticidae -naticiform -naticine -Natick -naticoid -natiform -natimortality -nation -national -nationalism -nationalist -nationalistic -nationalistically -nationality -nationalization -nationalize -nationalizer -nationally -nationalness -nationalty -nationhood -nationless -nationwide -native -natively -nativeness -nativism -nativist -nativistic -nativity -natr -Natraj -Natricinae -natricine -natrium -Natrix -natrochalcite -natrojarosite -natrolite -natron -Natt -natter -nattered -natteredness -natterjack -nattily -nattiness -nattle -natty -natuary -natural -naturalesque -naturalism -naturalist -naturalistic -naturalistically -naturality -naturalization -naturalize -naturalizer -naturally -naturalness -nature -naturecraft -naturelike -naturing -naturism -naturist -naturistic -naturistically -naturize -naturopath -naturopathic -naturopathist -naturopathy -naucrar -naucrary -naufragous -nauger -naught -naughtily -naughtiness -naughty -naujaite -naumachia -naumachy -naumannite -Naumburgia -naumk -naumkeag -naumkeager -naunt -nauntle -naupathia -nauplial -naupliiform -nauplioid -nauplius -nauropometer -nauscopy -nausea -nauseant -nauseaproof -nauseate -nauseatingly -nauseation -nauseous -nauseously -nauseousness -Nauset -naut -nautch -nauther -nautic -nautical -nauticality -nautically -nautics -nautiform -Nautilacea -nautilacean -nautilicone -nautiliform -nautilite -nautiloid -Nautiloidea -nautiloidean -nautilus -Navaho -Navajo -naval -navalese -navalism -navalist -navalistic -navalistically -navally -navar -navarch -navarchy -Navarrese -Navarrian -nave -navel -naveled -navellike -navelwort -navet -navette -navew -navicella -navicert -navicula -Naviculaceae -naviculaeform -navicular -naviculare -naviculoid -naviform -navigability -navigable -navigableness -navigably -navigant -navigate -navigation -navigational -navigator -navigerous -navipendular -navipendulum -navite -navvy -navy -naw -nawab -nawabship -nawt -nay -Nayar -Nayarit -Nayarita -nayaur -naysay -naysayer -nayward -nayword -Nazarate -Nazarean -Nazarene -Nazarenism -Nazarite -Nazariteship -Nazaritic -Nazaritish -Nazaritism -naze -Nazerini -Nazi -Nazify -Naziism -nazim -nazir -Nazirate -Nazirite -Naziritic -Nazism -ne -nea -Neal -neal -neallotype -Neanderthal -Neanderthaler -Neanderthaloid -neanic -neanthropic -neap -neaped -Neapolitan -nearable -nearabout -nearabouts -nearaivays -nearaway -nearby -Nearctic -Nearctica -nearest -nearish -nearly -nearmost -nearness -nearsighted -nearsightedly -nearsightedness -nearthrosis -neat -neaten -neath -neatherd -neatherdess -neathmost -neatify -neatly -neatness -neb -neback -Nebaioth -Nebalia -Nebaliacea -nebalian -Nebaliidae -nebalioid -nebbed -nebbuck -nebbuk -nebby -nebel -nebelist -nebenkern -Nebiim -Nebraskan -nebris -nebula -nebulae -nebular -nebularization -nebularize -nebulated -nebulation -nebule -nebulescent -nebuliferous -nebulite -nebulium -nebulization -nebulize -nebulizer -nebulose -nebulosity -nebulous -nebulously -nebulousness -Necator -necessar -necessarian -necessarianism -necessarily -necessariness -necessary -necessism -necessist -necessitarian -necessitarianism -necessitate -necessitatedly -necessitatingly -necessitation -necessitative -necessitous -necessitously -necessitousness -necessitude -necessity -neck -neckar -neckatee -neckband -neckcloth -necked -necker -neckercher -neckerchief -neckful -neckguard -necking -neckinger -necklace -necklaced -necklaceweed -neckless -necklet -necklike -neckline -neckmold -neckpiece -neckstock -necktie -necktieless -neckward -neckwear -neckweed -neckyoke -necrectomy -necremia -necrobacillary -necrobacillosis -necrobiosis -necrobiotic -necrogenic -necrogenous -necrographer -necrolatry -necrologic -necrological -necrologically -necrologist -necrologue -necrology -necromancer -necromancing -necromancy -necromantic -necromantically -necromorphous -necronite -necropathy -Necrophaga -necrophagan -necrophagous -necrophile -necrophilia -necrophilic -necrophilism -necrophilistic -necrophilous -necrophily -necrophobia -necrophobic -Necrophorus -necropoleis -necropoles -necropolis -necropolitan -necropsy -necroscopic -necroscopical -necroscopy -necrose -necrosis -necrotic -necrotization -necrotize -necrotomic -necrotomist -necrotomy -necrotype -necrotypic -Nectandra -nectar -nectareal -nectarean -nectared -nectareous -nectareously -nectareousness -nectarial -nectarian -nectaried -nectariferous -nectarine -Nectarinia -Nectariniidae -nectarious -nectarium -nectarivorous -nectarize -nectarlike -nectarous -nectary -nectiferous -nectocalycine -nectocalyx -Nectonema -nectophore -nectopod -Nectria -nectriaceous -Nectrioidaceae -Necturidae -Necturus -Ned -nedder -neddy -Nederlands -nee -neebor -neebour -need -needer -needfire -needful -needfully -needfulness -needgates -needham -needily -neediness -needing -needle -needlebill -needlebook -needlebush -needlecase -needled -needlefish -needleful -needlelike -needlemaker -needlemaking -needleman -needlemonger -needleproof -needler -needles -needless -needlessly -needlessness -needlestone -needlewoman -needlewood -needlework -needleworked -needleworker -needling -needly -needments -needs -needsome -needy -neeger -neeld -neele -neelghan -neem -neencephalic -neencephalon -Neengatu -neep -neepour -neer -neese -neet -neetup -neeze -nef -nefandous -nefandousness -nefarious -nefariously -nefariousness -nefast -neffy -neftgil -negate -negatedness -negation -negationalist -negationist -negative -negatively -negativeness -negativer -negativism -negativist -negativistic -negativity -negator -negatory -negatron -neger -neginoth -neglect -neglectable -neglectedly -neglectedness -neglecter -neglectful -neglectfully -neglectfulness -neglectingly -neglection -neglective -neglectively -neglector -neglectproof -negligee -negligence -negligency -negligent -negligently -negligibility -negligible -negligibleness -negligibly -negotiability -negotiable -negotiant -negotiate -negotiation -negotiator -negotiatory -negotiatress -negotiatrix -Negress -negrillo -negrine -Negritian -Negritic -Negritize -Negrito -Negritoid -Negro -negro -negrodom -Negrofy -negrohead -negrohood -Negroid -Negroidal -negroish -Negroism -Negroization -Negroize -negrolike -Negroloid -Negrophil -Negrophile -Negrophilism -Negrophilist -Negrophobe -Negrophobia -Negrophobiac -Negrophobist -Negrotic -Negundo -Negus -negus -Nehantic -Nehemiah -nehiloth -nei -neif -neigh -neighbor -neighbored -neighborer -neighboress -neighborhood -neighboring -neighborless -neighborlike -neighborliness -neighborly -neighborship -neighborstained -neighbourless -neighbourlike -neighbourship -neigher -Neil -Neillia -neiper -Neisseria -Neisserieae -neist -neither -Nejd -Nejdi -Nekkar -nekton -nektonic -Nelken -Nell -Nellie -Nelly -nelson -nelsonite -nelumbian -Nelumbium -Nelumbo -Nelumbonaceae -nema -nemaline -Nemalion -Nemalionaceae -Nemalionales -nemalite -Nemastomaceae -Nematelmia -nematelminth -Nematelminthes -nemathece -nemathecial -nemathecium -Nemathelmia -nemathelminth -Nemathelminthes -nematic -nematoblast -nematoblastic -Nematocera -nematoceran -nematocerous -nematocide -nematocyst -nematocystic -Nematoda -nematode -nematodiasis -nematogene -nematogenic -nematogenous -nematognath -Nematognathi -nematognathous -nematogone -nematogonous -nematoid -Nematoidea -nematoidean -nematologist -nematology -Nematomorpha -nematophyton -Nematospora -nematozooid -Nembutal -Nemean -Nemertea -nemertean -Nemertina -nemertine -Nemertinea -nemertinean -Nemertini -nemertoid -nemeses -Nemesia -nemesic -Nemesis -Nemichthyidae -Nemichthys -Nemocera -nemoceran -nemocerous -Nemopanthus -Nemophila -nemophilist -nemophilous -nemophily -nemoral -Nemorensian -nemoricole -Nengahiba -nenta -nenuphar -neo -neoacademic -neoanthropic -Neoarctic -neoarsphenamine -Neobalaena -Neobeckia -neoblastic -neobotanist -neobotany -Neocene -Neoceratodus -neocerotic -neoclassic -neoclassicism -neoclassicist -Neocomian -neocosmic -neocracy -neocriticism -neocyanine -neocyte -neocytosis -neodamode -neodidymium -neodymium -Neofabraea -neofetal -neofetus -Neofiber -neoformation -neoformative -Neogaea -Neogaean -neogamous -neogamy -Neogene -neogenesis -neogenetic -Neognathae -neognathic -neognathous -neogrammarian -neogrammatical -neographic -neohexane -Neohipparion -neoholmia -neoholmium -neoimpressionism -neoimpressionist -neolalia -neolater -neolatry -neolith -neolithic -neologian -neologianism -neologic -neological -neologically -neologism -neologist -neologistic -neologistical -neologization -neologize -neology -neomedievalism -neomenia -neomenian -Neomeniidae -neomiracle -neomodal -neomorph -Neomorpha -neomorphic -neomorphism -Neomylodon -neon -neonatal -neonate -neonatus -neonomian -neonomianism -neontology -neonychium -neopagan -neopaganism -neopaganize -Neopaleozoic -neopallial -neopallium -neoparaffin -neophilism -neophilological -neophilologist -neophobia -neophobic -neophrastic -Neophron -neophyte -neophytic -neophytish -neophytism -Neopieris -neoplasia -neoplasm -neoplasma -neoplasmata -neoplastic -neoplasticism -neoplasty -Neoplatonic -Neoplatonician -Neoplatonism -Neoplatonist -neoprene -neorama -neorealism -Neornithes -neornithic -Neosalvarsan -Neosorex -Neosporidia -neossin -neossology -neossoptile -neostriatum -neostyle -neoteinia -neoteinic -neotenia -neotenic -neoteny -neoteric -neoterically -neoterism -neoterist -neoteristic -neoterize -neothalamus -Neotoma -Neotragus -Neotremata -Neotropic -Neotropical -neotype -neovitalism -neovolcanic -Neowashingtonia -neoytterbium -neoza -Neozoic -Nep -nep -Nepa -Nepal -Nepalese -Nepali -Nepenthaceae -nepenthaceous -nepenthe -nepenthean -Nepenthes -nepenthes -neper -Neperian -Nepeta -nephalism -nephalist -Nephele -nephele -nepheligenous -nepheline -nephelinic -nephelinite -nephelinitic -nephelinitoid -nephelite -Nephelium -nephelognosy -nepheloid -nephelometer -nephelometric -nephelometrical -nephelometrically -nephelometry -nephelorometer -nepheloscope -nephesh -nephew -nephewship -Nephila -Nephilinae -Nephite -nephogram -nephograph -nephological -nephologist -nephology -nephoscope -nephradenoma -nephralgia -nephralgic -nephrapostasis -nephratonia -nephrauxe -nephrectasia -nephrectasis -nephrectomize -nephrectomy -nephrelcosis -nephremia -nephremphraxis -nephria -nephric -nephridia -nephridial -nephridiopore -nephridium -nephrism -nephrite -nephritic -nephritical -nephritis -nephroabdominal -nephrocardiac -nephrocele -nephrocoele -nephrocolic -nephrocolopexy -nephrocoloptosis -nephrocystitis -nephrocystosis -nephrocyte -nephrodinic -Nephrodium -nephroerysipelas -nephrogastric -nephrogenetic -nephrogenic -nephrogenous -nephrogonaduct -nephrohydrosis -nephrohypertrophy -nephroid -Nephrolepis -nephrolith -nephrolithic -nephrolithotomy -nephrologist -nephrology -nephrolysin -nephrolysis -nephrolytic -nephromalacia -nephromegaly -nephromere -nephron -nephroncus -nephroparalysis -nephropathic -nephropathy -nephropexy -nephrophthisis -nephropore -Nephrops -Nephropsidae -nephroptosia -nephroptosis -nephropyelitis -nephropyeloplasty -nephropyosis -nephrorrhagia -nephrorrhaphy -nephros -nephrosclerosis -nephrosis -nephrostoma -nephrostome -nephrostomial -nephrostomous -nephrostomy -nephrotome -nephrotomize -nephrotomy -nephrotoxic -nephrotoxicity -nephrotoxin -nephrotuberculosis -nephrotyphoid -nephrotyphus -nephrozymosis -Nepidae -nepionic -nepman -nepotal -nepote -nepotic -nepotious -nepotism -nepotist -nepotistical -nepouite -Neptune -Neptunean -Neptunian -neptunism -neptunist -neptunium -Nereid -Nereidae -nereidiform -Nereidiformia -Nereis -nereite -Nereocystis -Neri -Nerine -nerine -Nerita -neritic -Neritidae -Neritina -neritoid -Nerium -Neroic -Neronian -Neronic -Neronize -nerterology -Nerthridae -Nerthrus -nerval -nervate -nervation -nervature -nerve -nerveless -nervelessly -nervelessness -nervelet -nerveproof -nerver -nerveroot -nervid -nerviduct -Nervii -nervily -nervimotion -nervimotor -nervimuscular -nervine -nerviness -nerving -nervish -nervism -nervomuscular -nervosanguineous -nervose -nervosism -nervosity -nervous -nervously -nervousness -nervular -nervule -nervulet -nervulose -nervuration -nervure -nervy -nescience -nescient -nese -nesh -neshly -neshness -Nesiot -nesiote -Neskhi -Neslia -Nesogaea -Nesogaean -Nesokia -Nesonetta -Nesotragus -Nespelim -nesquehonite -ness -nesslerization -Nesslerize -nesslerize -nest -nestable -nestage -nester -nestful -nestiatria -nestitherapy -nestle -nestler -nestlike -nestling -Nestor -Nestorian -Nestorianism -Nestorianize -Nestorianizer -nestorine -nesty -Net -net -netball -netbraider -netbush -netcha -Netchilik -nete -neter -netful -neth -netheist -nether -Netherlander -Netherlandian -Netherlandic -Netherlandish -nethermore -nethermost -netherstock -netherstone -netherward -netherwards -Nethinim -neti -netleaf -netlike -netmaker -netmaking -netman -netmonger -netop -netsman -netsuke -nettable -Nettapus -netted -netter -Nettie -netting -Nettion -nettle -nettlebed -nettlebird -nettlefire -nettlefish -nettlefoot -nettlelike -nettlemonger -nettler -nettlesome -nettlewort -nettling -nettly -Netty -netty -netwise -network -Neudeckian -neugroschen -neuma -neumatic -neumatize -neume -neumic -neurad -neuradynamia -neural -neurale -neuralgia -neuralgiac -neuralgic -neuralgiform -neuralgy -neuralist -neurapophyseal -neurapophysial -neurapophysis -neurarthropathy -neurasthenia -neurasthenic -neurasthenical -neurasthenically -neurataxia -neurataxy -neuration -neuratrophia -neuratrophic -neuratrophy -neuraxial -neuraxis -neuraxon -neuraxone -neurectasia -neurectasis -neurectasy -neurectome -neurectomic -neurectomy -neurectopia -neurectopy -neurenteric -neurepithelium -neurergic -neurexairesis -neurhypnology -neurhypnotist -neuriatry -neuric -neurilema -neurilematic -neurilemma -neurilemmal -neurilemmatic -neurilemmatous -neurilemmitis -neurility -neurin -neurine -neurinoma -neurism -neurite -neuritic -neuritis -neuroanatomical -neuroanatomy -neurobiotactic -neurobiotaxis -neuroblast -neuroblastic -neuroblastoma -neurocanal -neurocardiac -neurocele -neurocentral -neurocentrum -neurochemistry -neurochitin -neurochondrite -neurochord -neurochorioretinitis -neurocirculatory -neurocity -neuroclonic -neurocoele -neurocoelian -neurocyte -neurocytoma -neurodegenerative -neurodendrite -neurodendron -neurodermatitis -neurodermatosis -neurodermitis -neurodiagnosis -neurodynamic -neurodynia -neuroepidermal -neuroepithelial -neuroepithelium -neurofibril -neurofibrilla -neurofibrillae -neurofibrillar -neurofibroma -neurofibromatosis -neurofil -neuroganglion -neurogastralgia -neurogastric -neurogenesis -neurogenetic -neurogenic -neurogenous -neuroglandular -neuroglia -neurogliac -neuroglial -neurogliar -neuroglic -neuroglioma -neurogliosis -neurogram -neurogrammic -neurographic -neurography -neurohistology -neurohumor -neurohumoral -neurohypnology -neurohypnotic -neurohypnotism -neurohypophysis -neuroid -neurokeratin -neurokyme -neurological -neurologist -neurologize -neurology -neurolymph -neurolysis -neurolytic -neuroma -neuromalacia -neuromalakia -neuromast -neuromastic -neuromatosis -neuromatous -neuromere -neuromerism -neuromerous -neuromimesis -neuromimetic -neuromotor -neuromuscular -neuromusculature -neuromyelitis -neuromyic -neuron -neuronal -neurone -neuronic -neuronism -neuronist -neuronophagia -neuronophagy -neuronym -neuronymy -neuroparalysis -neuroparalytic -neuropath -neuropathic -neuropathical -neuropathically -neuropathist -neuropathological -neuropathologist -neuropathology -neuropathy -Neurope -neurophagy -neurophil -neurophile -neurophilic -neurophysiological -neurophysiology -neuropile -neuroplasm -neuroplasmic -neuroplasty -neuroplexus -neuropodial -neuropodium -neuropodous -neuropore -neuropsychiatric -neuropsychiatrist -neuropsychiatry -neuropsychic -neuropsychological -neuropsychologist -neuropsychology -neuropsychopathic -neuropsychopathy -neuropsychosis -neuropter -Neuroptera -neuropteran -Neuropteris -neuropterist -neuropteroid -Neuropteroidea -neuropterological -neuropterology -neuropteron -neuropterous -neuroretinitis -neurorrhaphy -Neurorthoptera -neurorthopteran -neurorthopterous -neurosal -neurosarcoma -neurosclerosis -neuroses -neurosis -neuroskeletal -neuroskeleton -neurosome -neurospasm -neurospongium -neurosthenia -neurosurgeon -neurosurgery -neurosurgical -neurosuture -neurosynapse -neurosyphilis -neurotendinous -neurotension -neurotherapeutics -neurotherapist -neurotherapy -neurothlipsis -neurotic -neurotically -neuroticism -neuroticize -neurotization -neurotome -neurotomical -neurotomist -neurotomize -neurotomy -neurotonic -neurotoxia -neurotoxic -neurotoxin -neurotripsy -neurotrophic -neurotrophy -neurotropic -neurotropism -neurovaccination -neurovaccine -neurovascular -neurovisceral -neurula -neurypnological -neurypnologist -neurypnology -Neustrian -neuter -neuterdom -neuterlike -neuterly -neuterness -neutral -neutralism -neutralist -neutrality -neutralization -neutralize -neutralizer -neutrally -neutralness -neutrino -neutroceptive -neutroceptor -neutroclusion -Neutrodyne -neutrologistic -neutron -neutropassive -neutrophile -neutrophilia -neutrophilic -neutrophilous -Nevada -Nevadan -nevadite -neve -nevel -never -neverland -nevermore -nevertheless -Neville -nevo -nevoid -Nevome -nevoy -nevus -nevyanskite -new -Newar -Newari -newberyite -newcal -Newcastle -newcome -newcomer -newel -newelty -newfangle -newfangled -newfangledism -newfangledly -newfangledness -newfanglement -Newfoundland -Newfoundlander -Newichawanoc -newing -newings -newish -newlandite -newly -newlywed -Newmanism -Newmanite -Newmanize -newmarket -newness -Newport -news -newsbill -newsboard -newsboat -newsboy -newscast -newscaster -newscasting -newsful -newsiness -newsless -newslessness -newsletter -newsman -newsmonger -newsmongering -newsmongery -newspaper -newspaperdom -newspaperese -newspaperish -newspaperized -newspaperman -newspaperwoman -newspapery -newsprint -newsreader -newsreel -newsroom -newssheet -newsstand -newsteller -newsworthiness -newsworthy -newsy -newt -newtake -newton -Newtonian -Newtonianism -Newtonic -Newtonist -newtonite -nexal -next -nextly -nextness -nexum -nexus -neyanda -ngai -ngaio -ngapi -Ngoko -Nguyen -Nhan -Nheengatu -ni -niacin -Niagara -Niagaran -Niall -Niantic -Nias -Niasese -niata -nib -nibbana -nibbed -nibber -nibble -nibbler -nibblingly -nibby -niblick -niblike -nibong -nibs -nibsome -Nicaean -Nicaragua -Nicaraguan -Nicarao -niccolic -niccoliferous -niccolite -niccolous -Nice -nice -niceish -niceling -nicely -Nicene -niceness -Nicenian -Nicenist -nicesome -nicetish -nicety -Nichael -niche -nichelino -nicher -Nicholas -Nici -Nick -nick -nickel -nickelage -nickelic -nickeliferous -nickeline -nickeling -nickelization -nickelize -nickellike -nickelodeon -nickelous -nickeltype -nicker -nickerpecker -nickey -Nickie -Nickieben -nicking -nickle -nickname -nicknameable -nicknamee -nicknameless -nicknamer -Nickneven -nickstick -nicky -Nicobar -Nicobarese -Nicodemite -Nicodemus -Nicol -Nicolaitan -Nicolaitanism -Nicolas -nicolayite -Nicolette -Nicolo -nicolo -Nicomachean -nicotia -nicotian -Nicotiana -nicotianin -nicotic -nicotinamide -nicotine -nicotinean -nicotined -nicotineless -nicotinian -nicotinic -nicotinism -nicotinize -nicotism -nicotize -nictate -nictation -nictitant -nictitate -nictitation -nid -nidal -nidamental -nidana -nidation -nidatory -niddering -niddick -niddle -nide -nidge -nidget -nidgety -nidi -nidicolous -nidificant -nidificate -nidification -nidificational -nidifugous -nidify -niding -nidologist -nidology -nidor -nidorosity -nidorous -nidorulent -nidulant -Nidularia -Nidulariaceae -nidulariaceous -Nidulariales -nidulate -nidulation -nidulus -nidus -niece -nieceless -nieceship -niellated -nielled -niellist -niello -Niels -niepa -Nierembergia -Niersteiner -Nietzschean -Nietzscheanism -Nietzscheism -nieve -nieveta -nievling -nife -nifesima -niffer -nific -nifle -nifling -nifty -nig -Nigel -Nigella -Nigerian -niggard -niggardize -niggardliness -niggardling -niggardly -niggardness -nigger -niggerdom -niggerfish -niggergoose -niggerhead -niggerish -niggerism -niggerling -niggertoe -niggerweed -niggery -niggle -niggler -niggling -nigglingly -niggly -nigh -nighly -nighness -night -nightcap -nightcapped -nightcaps -nightchurr -nightdress -nighted -nightfall -nightfish -nightflit -nightfowl -nightgown -nighthawk -nightie -nightingale -nightingalize -nightjar -nightless -nightlessness -nightlike -nightlong -nightly -nightman -nightmare -nightmarish -nightmarishly -nightmary -nights -nightshade -nightshine -nightshirt -nightstock -nightstool -nighttide -nighttime -nightwalker -nightwalking -nightward -nightwards -nightwear -nightwork -nightworker -nignay -nignye -nigori -nigranilin -nigraniline -nigre -nigrescence -nigrescent -nigresceous -nigrescite -nigrification -nigrified -nigrify -nigrine -Nigritian -nigrities -nigritude -nigritudinous -nigrosine -nigrous -nigua -Nihal -nihilianism -nihilianistic -nihilification -nihilify -nihilism -nihilist -nihilistic -nihilitic -nihility -nikau -Nikeno -nikethamide -Nikko -niklesite -Nikolai -nil -Nile -nilgai -Nilometer -Nilometric -Niloscope -Nilot -Nilotic -Nilous -nilpotent -Nils -nim -nimb -nimbated -nimbed -nimbi -nimbiferous -nimbification -nimble -nimblebrained -nimbleness -nimbly -nimbose -nimbosity -nimbus -nimbused -nimiety -niminy -nimious -Nimkish -nimmer -Nimrod -Nimrodian -Nimrodic -Nimrodical -Nimrodize -nimshi -Nina -nincom -nincompoop -nincompoopery -nincompoophood -nincompoopish -nine -ninebark -ninefold -nineholes -ninepegs -ninepence -ninepenny -ninepin -ninepins -ninescore -nineted -nineteen -nineteenfold -nineteenth -nineteenthly -ninetieth -ninety -ninetyfold -ninetyish -ninetyknot -Ninevite -Ninevitical -Ninevitish -Ning -Ningpo -Ninja -ninny -ninnyhammer -ninnyish -ninnyism -ninnyship -ninnywatch -Ninon -ninon -Ninox -ninth -ninthly -nintu -ninut -niobate -Niobe -Niobean -niobic -Niobid -Niobite -niobite -niobium -niobous -niog -niota -Nip -nip -nipa -nipcheese -niphablepsia -niphotyphlosis -Nipissing -Nipmuc -nipper -nipperkin -nippers -nippily -nippiness -nipping -nippingly -nippitate -nipple -nippleless -nipplewort -Nipponese -Nipponism -nipponium -Nipponize -nippy -nipter -Niquiran -nirles -nirmanakaya -nirvana -nirvanic -Nisaean -Nisan -nisei -Nishada -nishiki -nisnas -nispero -Nisqualli -nisse -nisus -nit -nitch -nitchevo -Nitella -nitency -nitently -niter -niterbush -nitered -nither -nithing -nitid -nitidous -nitidulid -Nitidulidae -nito -niton -nitramine -nitramino -nitranilic -nitraniline -nitrate -nitratine -nitration -nitrator -Nitrian -nitriary -nitric -nitridation -nitride -nitriding -nitridization -nitridize -nitrifaction -nitriferous -nitrifiable -nitrification -nitrifier -nitrify -nitrile -Nitriot -nitrite -nitro -nitroalizarin -nitroamine -nitroaniline -Nitrobacter -nitrobacteria -Nitrobacteriaceae -Nitrobacterieae -nitrobarite -nitrobenzene -nitrobenzol -nitrobenzole -nitrocalcite -nitrocellulose -nitrocellulosic -nitrochloroform -nitrocotton -nitroform -nitrogelatin -nitrogen -nitrogenate -nitrogenation -nitrogenic -nitrogenization -nitrogenize -nitrogenous -nitroglycerin -nitrohydrochloric -nitrolamine -nitrolic -nitrolime -nitromagnesite -nitrometer -nitrometric -nitromuriate -nitromuriatic -nitronaphthalene -nitroparaffin -nitrophenol -nitrophilous -nitrophyte -nitrophytic -nitroprussiate -nitroprussic -nitroprusside -nitrosamine -nitrosate -nitrosification -nitrosify -nitrosite -nitrosobacteria -nitrosochloride -Nitrosococcus -Nitrosomonas -nitrososulphuric -nitrostarch -nitrosulphate -nitrosulphonic -nitrosulphuric -nitrosyl -nitrosylsulphuric -nitrotoluene -nitrous -nitroxyl -nitryl -nitter -nitty -nitwit -Nitzschia -Nitzschiaceae -Niuan -Niue -nival -nivation -nivellate -nivellation -nivellator -nivellization -nivenite -niveous -nivicolous -nivosity -nix -nixie -niyoga -Nizam -nizam -nizamate -nizamut -nizy -njave -No -no -noa -Noachian -Noachic -Noachical -Noachite -Noah -Noahic -Noam -nob -nobber -nobbily -nobble -nobbler -nobbut -nobby -nobiliary -nobilify -nobilitate -nobilitation -nobility -noble -noblehearted -nobleheartedly -nobleheartedness -nobleman -noblemanly -nobleness -noblesse -noblewoman -nobley -nobly -nobody -nobodyness -nobs -nocake -Nocardia -nocardiosis -nocent -nocerite -nociassociation -nociceptive -nociceptor -nociperception -nociperceptive -nock -nocket -nocktat -noctambulant -noctambulation -noctambule -noctambulism -noctambulist -noctambulistic -noctambulous -Nocten -noctidial -noctidiurnal -noctiferous -noctiflorous -Noctilio -Noctilionidae -Noctiluca -noctiluca -noctilucal -noctilucan -noctilucence -noctilucent -Noctilucidae -noctilucin -noctilucine -noctilucous -noctiluminous -noctipotent -noctivagant -noctivagation -noctivagous -noctograph -noctovision -Noctuae -noctuid -Noctuidae -noctuiform -noctule -nocturia -nocturn -nocturnal -nocturnally -nocturne -nocuity -nocuous -nocuously -nocuousness -nod -nodal -nodality -nodated -nodder -nodding -noddingly -noddle -noddy -node -noded -nodi -nodiak -nodical -nodicorn -nodiferous -nodiflorous -nodiform -Nodosaria -nodosarian -nodosariform -nodosarine -nodose -nodosity -nodous -nodular -nodulate -nodulated -nodulation -nodule -noduled -nodulize -nodulose -nodulous -nodulus -nodus -noegenesis -noegenetic -Noel -noel -noematachograph -noematachometer -noematachometic -Noemi -Noetic -noetic -noetics -nog -nogada -Nogai -nogal -noggen -noggin -nogging -noghead -nogheaded -nohow -Nohuntsik -noibwood -noil -noilage -noiler -noily -noint -nointment -noir -noise -noiseful -noisefully -noiseless -noiselessly -noiselessness -noisemaker -noisemaking -noiseproof -noisette -noisily -noisiness -noisome -noisomely -noisomeness -noisy -nokta -Nolascan -nolition -Noll -noll -nolle -nolleity -nollepros -nolo -noma -nomad -nomadian -nomadic -nomadical -nomadically -Nomadidae -nomadism -nomadization -nomadize -nomancy -nomarch -nomarchy -Nomarthra -nomarthral -nombril -nome -Nomeidae -nomenclate -nomenclative -nomenclator -nomenclatorial -nomenclatorship -nomenclatory -nomenclatural -nomenclature -nomenclaturist -Nomeus -nomial -nomic -nomina -nominable -nominal -nominalism -nominalist -nominalistic -nominality -nominally -nominate -nominated -nominately -nomination -nominatival -nominative -nominatively -nominator -nominatrix -nominature -nominee -nomineeism -nominy -nomism -nomisma -nomismata -nomistic -nomocanon -nomocracy -nomogenist -nomogenous -nomogeny -nomogram -nomograph -nomographer -nomographic -nomographical -nomographically -nomography -nomological -nomologist -nomology -nomopelmous -nomophylax -nomophyllous -nomos -nomotheism -nomothete -nomothetes -nomothetic -nomothetical -non -Nona -nonabandonment -nonabdication -nonabiding -nonability -nonabjuration -nonabjurer -nonabolition -nonabridgment -nonabsentation -nonabsolute -nonabsolution -nonabsorbable -nonabsorbent -nonabsorptive -nonabstainer -nonabstaining -nonabstemious -nonabstention -nonabstract -nonacademic -nonacceding -nonacceleration -nonaccent -nonacceptance -nonacceptant -nonacceptation -nonaccess -nonaccession -nonaccessory -nonaccidental -nonaccompaniment -nonaccompanying -nonaccomplishment -nonaccredited -nonaccretion -nonachievement -nonacid -nonacknowledgment -nonacosane -nonacoustic -nonacquaintance -nonacquiescence -nonacquiescent -nonacquisitive -nonacquittal -nonact -nonactinic -nonaction -nonactionable -nonactive -nonactuality -nonaculeate -nonacute -nonadditive -nonadecane -nonadherence -nonadherent -nonadhesion -nonadhesive -nonadjacent -nonadjectival -nonadjournment -nonadjustable -nonadjustive -nonadjustment -nonadministrative -nonadmiring -nonadmission -nonadmitted -nonadoption -Nonadorantes -nonadornment -nonadult -nonadvancement -nonadvantageous -nonadventitious -nonadventurous -nonadverbial -nonadvertence -nonadvertency -nonadvocate -nonaerating -nonaerobiotic -nonaesthetic -nonaffection -nonaffiliated -nonaffirmation -nonage -nonagenarian -nonagency -nonagent -nonagesimal -nonagglutinative -nonagglutinator -nonaggression -nonaggressive -nonagon -nonagrarian -nonagreement -nonagricultural -nonahydrate -nonaid -nonair -nonalarmist -nonalcohol -nonalcoholic -nonalgebraic -nonalienating -nonalienation -nonalignment -nonalkaloidal -nonallegation -nonallegorical -nonalliterated -nonalliterative -nonallotment -nonalluvial -nonalphabetic -nonaltruistic -nonaluminous -nonamalgamable -nonamendable -nonamino -nonamotion -nonamphibious -nonamputation -nonanalogy -nonanalytical -nonanalyzable -nonanalyzed -nonanaphoric -nonanaphthene -nonanatomical -nonancestral -nonane -nonanesthetized -nonangelic -nonangling -nonanimal -nonannexation -nonannouncement -nonannuitant -nonannulment -nonanoic -nonanonymity -nonanswer -nonantagonistic -nonanticipative -nonantigenic -nonapologetic -nonapostatizing -nonapostolic -nonapparent -nonappealable -nonappearance -nonappearer -nonappearing -nonappellate -nonappendicular -nonapplication -nonapply -nonappointment -nonapportionable -nonapposable -nonappraisal -nonappreciation -nonapprehension -nonappropriation -nonapproval -nonaqueous -nonarbitrable -nonarcing -nonargentiferous -nonaristocratic -nonarithmetical -nonarmament -nonarmigerous -nonaromatic -nonarraignment -nonarrival -nonarsenical -nonarterial -nonartesian -nonarticulated -nonarticulation -nonartistic -nonary -nonascendancy -nonascertainable -nonascertaining -nonascetic -nonascription -nonaseptic -nonaspersion -nonasphalt -nonaspirate -nonaspiring -nonassault -nonassent -nonassentation -nonassented -nonassenting -nonassertion -nonassertive -nonassessable -nonassessment -nonassignable -nonassignment -nonassimilable -nonassimilating -nonassimilation -nonassistance -nonassistive -nonassociable -nonassortment -nonassurance -nonasthmatic -nonastronomical -nonathletic -nonatmospheric -nonatonement -nonattached -nonattachment -nonattainment -nonattendance -nonattendant -nonattention -nonattestation -nonattribution -nonattributive -nonaugmentative -nonauricular -nonauriferous -nonauthentication -nonauthoritative -nonautomatic -nonautomotive -nonavoidance -nonaxiomatic -nonazotized -nonbachelor -nonbacterial -nonbailable -nonballoting -nonbanishment -nonbankable -nonbarbarous -nonbaronial -nonbase -nonbasement -nonbasic -nonbasing -nonbathing -nonbearded -nonbearing -nonbeing -nonbeliever -nonbelieving -nonbelligerent -nonbending -nonbenevolent -nonbetrayal -nonbeverage -nonbilabiate -nonbilious -nonbinomial -nonbiological -nonbitter -nonbituminous -nonblack -nonblameless -nonbleeding -nonblended -nonblockaded -nonblocking -nonblooded -nonblooming -nonbodily -nonbookish -nonborrower -nonbotanical -nonbourgeois -nonbranded -nonbreakable -nonbreeder -nonbreeding -nonbroodiness -nonbroody -nonbrowsing -nonbudding -nonbulbous -nonbulkhead -nonbureaucratic -nonburgage -nonburgess -nonburnable -nonburning -nonbursting -nonbusiness -nonbuying -noncabinet -noncaffeine -noncaking -Noncalcarea -noncalcareous -noncalcified -noncallability -noncallable -noncancellable -noncannibalistic -noncanonical -noncanonization -noncanvassing -noncapillarity -noncapillary -noncapital -noncapitalist -noncapitalistic -noncapitulation -noncapsizable -noncapture -noncarbonate -noncareer -noncarnivorous -noncarrier -noncartelized -noncaste -noncastigation -noncataloguer -noncatarrhal -noncatechizable -noncategorical -noncathedral -noncatholicity -noncausality -noncausation -nonce -noncelebration -noncelestial -noncellular -noncellulosic -noncensored -noncensorious -noncensus -noncentral -noncereal -noncerebral -nonceremonial -noncertain -noncertainty -noncertified -nonchafing -nonchalance -nonchalant -nonchalantly -nonchalantness -nonchalky -nonchallenger -nonchampion -nonchangeable -nonchanging -noncharacteristic -nonchargeable -nonchastisement -nonchastity -nonchemical -nonchemist -nonchivalrous -nonchokable -nonchokebore -nonchronological -nonchurch -nonchurched -nonchurchgoer -nonciliate -noncircuit -noncircuital -noncircular -noncirculation -noncitation -noncitizen -noncivilized -nonclaim -nonclaimable -nonclassable -nonclassical -nonclassifiable -nonclassification -nonclastic -nonclearance -noncleistogamic -nonclergyable -nonclerical -nonclimbable -nonclinical -nonclose -nonclosure -nonclotting -noncoagulability -noncoagulable -noncoagulation -noncoalescing -noncock -noncoercion -noncoercive -noncognate -noncognition -noncognitive -noncognizable -noncognizance -noncoherent -noncohesion -noncohesive -noncoinage -noncoincidence -noncoincident -noncoincidental -noncoking -noncollaboration -noncollaborative -noncollapsible -noncollectable -noncollection -noncollegiate -noncollinear -noncolloid -noncollusion -noncollusive -noncolonial -noncoloring -noncom -noncombat -noncombatant -noncombination -noncombining -noncombustible -noncombustion -noncome -noncoming -noncommemoration -noncommencement -noncommendable -noncommensurable -noncommercial -noncommissioned -noncommittal -noncommittalism -noncommittally -noncommittalness -noncommonable -noncommorancy -noncommunal -noncommunicable -noncommunicant -noncommunicating -noncommunication -noncommunion -noncommunist -noncommunistic -noncommutative -noncompearance -noncompensating -noncompensation -noncompetency -noncompetent -noncompeting -noncompetitive -noncompetitively -noncomplaisance -noncompletion -noncompliance -noncomplicity -noncomplying -noncomposite -noncompoundable -noncompounder -noncomprehension -noncompressible -noncompression -noncompulsion -noncomputation -noncon -nonconcealment -nonconceiving -nonconcentration -nonconception -nonconcern -nonconcession -nonconciliating -nonconcludency -nonconcludent -nonconcluding -nonconclusion -nonconcordant -nonconcur -nonconcurrence -nonconcurrency -nonconcurrent -noncondensable -noncondensation -noncondensible -noncondensing -noncondimental -nonconditioned -noncondonation -nonconducive -nonconductibility -nonconductible -nonconducting -nonconduction -nonconductive -nonconductor -nonconfederate -nonconferrable -nonconfession -nonconficient -nonconfident -nonconfidential -nonconfinement -nonconfirmation -nonconfirmative -nonconfiscable -nonconfiscation -nonconfitent -nonconflicting -nonconform -nonconformable -nonconformably -nonconformance -nonconformer -nonconforming -nonconformism -nonconformist -nonconformistical -nonconformistically -nonconformitant -nonconformity -nonconfutation -noncongealing -noncongenital -noncongestion -noncongratulatory -noncongruent -nonconjectural -nonconjugal -nonconjugate -nonconjunction -nonconnection -nonconnective -nonconnivance -nonconnotative -nonconnubial -nonconscientious -nonconscious -nonconscription -nonconsecration -nonconsecutive -nonconsent -nonconsenting -nonconsequence -nonconsequent -nonconservation -nonconservative -nonconserving -nonconsideration -nonconsignment -nonconsistorial -nonconsoling -nonconsonant -nonconsorting -nonconspirator -nonconspiring -nonconstituent -nonconstitutional -nonconstraint -nonconstruable -nonconstruction -nonconstructive -nonconsular -nonconsultative -nonconsumable -nonconsumption -noncontact -noncontagion -noncontagionist -noncontagious -noncontagiousness -noncontamination -noncontemplative -noncontending -noncontent -noncontention -noncontentious -noncontentiously -nonconterminous -noncontiguity -noncontiguous -noncontinental -noncontingent -noncontinuance -noncontinuation -noncontinuous -noncontraband -noncontraction -noncontradiction -noncontradictory -noncontributing -noncontribution -noncontributor -noncontributory -noncontrivance -noncontrolled -noncontrolling -noncontroversial -nonconvective -nonconvenable -nonconventional -nonconvergent -nonconversable -nonconversant -nonconversational -nonconversion -nonconvertible -nonconveyance -nonconviction -nonconvivial -noncoplanar -noncopying -noncoring -noncorporate -noncorporeality -noncorpuscular -noncorrection -noncorrective -noncorrelation -noncorrespondence -noncorrespondent -noncorresponding -noncorroboration -noncorroborative -noncorrodible -noncorroding -noncorrosive -noncorruption -noncortical -noncosmic -noncosmopolitism -noncostraight -noncottager -noncotyledonous -noncounty -noncranking -noncreation -noncreative -noncredence -noncredent -noncredibility -noncredible -noncreditor -noncreeping -noncrenate -noncretaceous -noncriminal -noncriminality -noncrinoid -noncritical -noncrucial -noncruciform -noncrusading -noncrushability -noncrushable -noncrustaceous -noncrystalline -noncrystallizable -noncrystallized -noncrystallizing -nonculmination -nonculpable -noncultivated -noncultivation -nonculture -noncumulative -noncurantist -noncurling -noncurrency -noncurrent -noncursive -noncurtailment -noncuspidate -noncustomary -noncutting -noncyclic -noncyclical -nonda -nondamageable -nondamnation -nondancer -nondangerous -nondatival -nondealer -nondebtor -nondecadence -nondecadent -nondecalcified -nondecane -nondecasyllabic -nondecatoic -nondecaying -nondeceivable -nondeception -nondeceptive -Nondeciduata -nondeciduate -nondeciduous -nondecision -nondeclarant -nondeclaration -nondeclarer -nondecomposition -nondecoration -nondedication -nondeduction -nondefalcation -nondefamatory -nondefaulting -nondefection -nondefendant -nondefense -nondefensive -nondeference -nondeferential -nondefiance -nondefilement -nondefining -nondefinition -nondefinitive -nondeforestation -nondegenerate -nondegeneration -nondegerming -nondegradation -nondegreased -nondehiscent -nondeist -nondelegable -nondelegate -nondelegation -nondeleterious -nondeliberate -nondeliberation -nondelineation -nondeliquescent -nondelirious -nondeliverance -nondelivery -nondemand -nondemise -nondemobilization -nondemocratic -nondemonstration -nondendroid -nondenial -nondenominational -nondenominationalism -nondense -nondenumerable -nondenunciation -nondepartmental -nondeparture -nondependence -nondependent -nondepletion -nondeportation -nondeported -nondeposition -nondepositor -nondepravity -nondepreciating -nondepressed -nondepression -nondeprivable -nonderivable -nonderivative -nonderogatory -nondescript -nondesecration -nondesignate -nondesigned -nondesire -nondesirous -nondesisting -nondespotic -nondesquamative -nondestructive -nondesulphurized -nondetachable -nondetailed -nondetention -nondetermination -nondeterminist -nondeterrent -nondetest -nondetonating -nondetrimental -nondevelopable -nondevelopment -nondeviation -nondevotional -nondexterous -nondiabetic -nondiabolic -nondiagnosis -nondiagonal -nondiagrammatic -nondialectal -nondialectical -nondialyzing -nondiametral -nondiastatic -nondiathermanous -nondiazotizable -nondichogamous -nondichogamy -nondichotomous -nondictation -nondictatorial -nondictionary -nondidactic -nondieting -nondifferentation -nondifferentiable -nondiffractive -nondiffusing -nondigestion -nondilatable -nondilution -nondiocesan -nondiphtheritic -nondiphthongal -nondiplomatic -nondipterous -nondirection -nondirectional -nondisagreement -nondisappearing -nondisarmament -nondisbursed -nondiscernment -nondischarging -nondisciplinary -nondisclaim -nondisclosure -nondiscontinuance -nondiscordant -nondiscountable -nondiscovery -nondiscretionary -nondiscrimination -nondiscriminatory -nondiscussion -nondisestablishment -nondisfigurement -nondisfranchised -nondisingenuous -nondisintegration -nondisinterested -nondisjunct -nondisjunction -nondisjunctional -nondisjunctive -nondismemberment -nondismissal -nondisparaging -nondisparate -nondispensation -nondispersal -nondispersion -nondisposal -nondisqualifying -nondissenting -nondissolution -nondistant -nondistinctive -nondistortion -nondistribution -nondistributive -nondisturbance -nondivergence -nondivergent -nondiversification -nondivinity -nondivisible -nondivisiblity -nondivision -nondivisional -nondivorce -nondo -nondoctrinal -nondocumentary -nondogmatic -nondoing -nondomestic -nondomesticated -nondominant -nondonation -nondramatic -nondrinking -nondropsical -nondrying -nonduality -nondumping -nonduplication -nondutiable -nondynastic -nondyspeptic -none -nonearning -noneastern -noneatable -nonecclesiastical -nonechoic -noneclectic -noneclipsing -nonecompense -noneconomic -nonedible -noneditor -noneditorial -noneducable -noneducation -noneducational -noneffective -noneffervescent -noneffete -nonefficacious -nonefficacy -nonefficiency -nonefficient -noneffusion -nonego -nonegoistical -nonejection -nonelastic -nonelasticity -nonelect -nonelection -nonelective -nonelector -nonelectric -nonelectrical -nonelectrification -nonelectrified -nonelectrized -nonelectrocution -nonelectrolyte -noneleemosynary -nonelemental -nonelementary -nonelimination -nonelopement -nonemanating -nonemancipation -nonembarkation -nonembellishment -nonembezzlement -nonembryonic -nonemendation -nonemergent -nonemigration -nonemission -nonemotional -nonemphatic -nonemphatical -nonempirical -nonemploying -nonemployment -nonemulative -nonenactment -nonenclosure -nonencroachment -nonencyclopedic -nonendemic -nonendorsement -nonenduring -nonene -nonenemy -nonenergic -nonenforceability -nonenforceable -nonenforcement -nonengagement -nonengineering -nonenrolled -nonent -nonentailed -nonenteric -nonentertainment -nonentitative -nonentitive -nonentitize -nonentity -nonentityism -nonentomological -nonentrant -nonentres -nonentry -nonenumerated -nonenunciation -nonenvious -nonenzymic -nonephemeral -nonepic -nonepicurean -nonepileptic -nonepiscopal -nonepiscopalian -nonepithelial -nonepochal -nonequal -nonequation -nonequatorial -nonequestrian -nonequilateral -nonequilibrium -nonequivalent -nonequivocating -nonerasure -nonerecting -nonerection -nonerotic -nonerroneous -nonerudite -noneruption -nones -nonescape -nonespionage -nonespousal -nonessential -nonesthetic -nonesuch -nonet -noneternal -noneternity -nonetheless -nonethereal -nonethical -nonethnological -nonethyl -noneugenic -noneuphonious -nonevacuation -nonevanescent -nonevangelical -nonevaporation -nonevasion -nonevasive -noneviction -nonevident -nonevidential -nonevil -nonevolutionary -nonevolutionist -nonevolving -nonexaction -nonexaggeration -nonexamination -nonexcavation -nonexcepted -nonexcerptible -nonexcessive -nonexchangeability -nonexchangeable -nonexciting -nonexclamatory -nonexclusion -nonexclusive -nonexcommunicable -nonexculpation -nonexcusable -nonexecution -nonexecutive -nonexemplary -nonexemplificatior -nonexempt -nonexercise -nonexertion -nonexhibition -nonexistence -nonexistent -nonexistential -nonexisting -nonexoneration -nonexotic -nonexpansion -nonexpansive -nonexpansively -nonexpectation -nonexpendable -nonexperience -nonexperienced -nonexperimental -nonexpert -nonexpiation -nonexpiry -nonexploitation -nonexplosive -nonexportable -nonexportation -nonexposure -nonexpulsion -nonextant -nonextempore -nonextended -nonextensile -nonextension -nonextensional -nonextensive -nonextenuatory -nonexteriority -nonextermination -nonexternal -nonexternality -nonextinction -nonextortion -nonextracted -nonextraction -nonextraditable -nonextradition -nonextraneous -nonextreme -nonextrication -nonextrinsic -nonexuding -nonexultation -nonfabulous -nonfacetious -nonfacial -nonfacility -nonfacing -nonfact -nonfactious -nonfactory -nonfactual -nonfacultative -nonfaculty -nonfaddist -nonfading -nonfailure -nonfalse -nonfamily -nonfamous -nonfanatical -nonfanciful -nonfarm -nonfastidious -nonfat -nonfatal -nonfatalistic -nonfatty -nonfavorite -nonfeasance -nonfeasor -nonfeatured -nonfebrile -nonfederal -nonfederated -nonfeldspathic -nonfelonious -nonfelony -nonfenestrated -nonfermentability -nonfermentable -nonfermentation -nonfermentative -nonferrous -nonfertile -nonfertility -nonfestive -nonfeudal -nonfibrous -nonfiction -nonfictional -nonfiduciary -nonfighter -nonfigurative -nonfilamentous -nonfimbriate -nonfinancial -nonfinding -nonfinishing -nonfinite -nonfireproof -nonfiscal -nonfisherman -nonfissile -nonfixation -nonflaky -nonflammable -nonfloatation -nonfloating -nonfloriferous -nonflowering -nonflowing -nonfluctuating -nonfluid -nonfluorescent -nonflying -nonfocal -nonfood -nonforeclosure -nonforeign -nonforeknowledge -nonforest -nonforested -nonforfeitable -nonforfeiting -nonforfeiture -nonform -nonformal -nonformation -nonformulation -nonfortification -nonfortuitous -nonfossiliferous -nonfouling -nonfrat -nonfraternity -nonfrauder -nonfraudulent -nonfreedom -nonfreeman -nonfreezable -nonfreeze -nonfreezing -nonfricative -nonfriction -nonfrosted -nonfruition -nonfrustration -nonfulfillment -nonfunctional -nonfundable -nonfundamental -nonfungible -nonfuroid -nonfusion -nonfuturition -nonfuturity -nongalactic -nongalvanized -nonganglionic -nongas -nongaseous -nongassy -nongelatinizing -nongelatinous -nongenealogical -nongenerative -nongenetic -nongentile -nongeographical -nongeological -nongeometrical -nongermination -nongerundial -nongildsman -nongipsy -nonglacial -nonglandered -nonglandular -nonglare -nonglucose -nonglucosidal -nonglucosidic -nongod -nongold -nongolfer -nongospel -nongovernmental -nongraduate -nongraduated -nongraduation -nongrain -nongranular -nongraphitic -nongrass -nongratuitous -nongravitation -nongravity -nongray -nongreasy -nongreen -nongregarious -nongremial -nongrey -nongrooming -nonguarantee -nonguard -nonguttural -nongymnast -nongypsy -nonhabitable -nonhabitual -nonhalation -nonhallucination -nonhandicap -nonhardenable -nonharmonic -nonharmonious -nonhazardous -nonheading -nonhearer -nonheathen -nonhedonistic -nonhepatic -nonhereditarily -nonhereditary -nonheritable -nonheritor -nonhero -nonhieratic -nonhistoric -nonhistorical -nonhomaloidal -nonhomogeneity -nonhomogeneous -nonhomogenous -nonhostile -nonhouseholder -nonhousekeeping -nonhuman -nonhumanist -nonhumorous -nonhumus -nonhunting -nonhydrogenous -nonhydrolyzable -nonhygrometric -nonhygroscopic -nonhypostatic -nonic -noniconoclastic -nonideal -nonidealist -nonidentical -nonidentity -nonidiomatic -nonidolatrous -nonidyllic -nonignitible -nonignominious -nonignorant -nonillion -nonillionth -nonillumination -nonillustration -nonimaginary -nonimbricating -nonimitative -nonimmateriality -nonimmersion -nonimmigrant -nonimmigration -nonimmune -nonimmunity -nonimmunized -nonimpact -nonimpairment -nonimpartment -nonimpatience -nonimpeachment -nonimperative -nonimperial -nonimplement -nonimportation -nonimporting -nonimposition -nonimpregnated -nonimpressionist -nonimprovement -nonimputation -nonincandescent -nonincarnated -nonincitement -noninclination -noninclusion -noninclusive -nonincrease -nonincreasing -nonincrusting -nonindependent -nonindictable -nonindictment -nonindividual -nonindividualistic -noninductive -noninductively -noninductivity -nonindurated -nonindustrial -noninfallibilist -noninfallible -noninfantry -noninfected -noninfection -noninfectious -noninfinite -noninfinitely -noninflammability -noninflammable -noninflammatory -noninflectional -noninfluence -noninformative -noninfraction -noninhabitant -noninheritable -noninherited -noninitial -noninjurious -noninjury -noninoculation -noninquiring -noninsect -noninsertion -noninstitution -noninstruction -noninstructional -noninstructress -noninstrumental -noninsurance -nonintegrable -nonintegrity -nonintellectual -nonintelligence -nonintelligent -nonintent -nonintention -noninterchangeability -noninterchangeable -nonintercourse -noninterference -noninterferer -noninterfering -nonintermittent -noninternational -noninterpolation -noninterposition -noninterrupted -nonintersecting -nonintersector -nonintervention -noninterventionalist -noninterventionist -nonintoxicant -nonintoxicating -nonintrospective -nonintrospectively -nonintrusion -nonintrusionism -nonintrusionist -nonintuitive -noninverted -noninvidious -noninvincibility -noniodized -nonion -nonionized -nonionizing -nonirate -nonirradiated -nonirrational -nonirreparable -nonirrevocable -nonirrigable -nonirrigated -nonirrigating -nonirrigation -nonirritable -nonirritant -nonirritating -nonisobaric -nonisotropic -nonissuable -nonius -nonjoinder -nonjudicial -nonjurable -nonjurant -nonjuress -nonjuring -nonjurist -nonjuristic -nonjuror -nonjurorism -nonjury -nonjurying -nonknowledge -nonkosher -nonlabeling -nonlactescent -nonlaminated -nonlanguage -nonlaying -nonleaded -nonleaking -nonlegal -nonlegato -nonlegume -nonlepidopterous -nonleprous -nonlevel -nonlevulose -nonliability -nonliable -nonliberation -nonlicensed -nonlicentiate -nonlicet -nonlicking -nonlife -nonlimitation -nonlimiting -nonlinear -nonlipoidal -nonliquefying -nonliquid -nonliquidating -nonliquidation -nonlister -nonlisting -nonliterary -nonlitigious -nonliturgical -nonliving -nonlixiviated -nonlocal -nonlocalized -nonlogical -nonlosable -nonloser -nonlover -nonloving -nonloxodromic -nonluminescent -nonluminosity -nonluminous -nonluster -nonlustrous -nonly -nonmagnetic -nonmagnetizable -nonmaintenance -nonmajority -nonmalarious -nonmalicious -nonmalignant -nonmalleable -nonmammalian -nonmandatory -nonmanifest -nonmanifestation -nonmanila -nonmannite -nonmanual -nonmanufacture -nonmanufactured -nonmanufacturing -nonmarine -nonmarital -nonmaritime -nonmarket -nonmarriage -nonmarriageable -nonmarrying -nonmartial -nonmastery -nonmaterial -nonmaterialistic -nonmateriality -nonmaternal -nonmathematical -nonmathematician -nonmatrimonial -nonmatter -nonmechanical -nonmechanistic -nonmedical -nonmedicinal -nonmedullated -nonmelodious -nonmember -nonmembership -nonmenial -nonmental -nonmercantile -nonmetal -nonmetallic -nonmetalliferous -nonmetallurgical -nonmetamorphic -nonmetaphysical -nonmeteoric -nonmeteorological -nonmetric -nonmetrical -nonmetropolitan -nonmicrobic -nonmicroscopical -nonmigratory -nonmilitant -nonmilitary -nonmillionaire -nonmimetic -nonmineral -nonmineralogical -nonminimal -nonministerial -nonministration -nonmiraculous -nonmischievous -nonmiscible -nonmissionary -nonmobile -nonmodal -nonmodern -nonmolar -nonmolecular -nonmomentary -nonmonarchical -nonmonarchist -nonmonastic -nonmonist -nonmonogamous -nonmonotheistic -nonmorainic -nonmoral -nonmorality -nonmortal -nonmotile -nonmotoring -nonmotorist -nonmountainous -nonmucilaginous -nonmucous -nonmulched -nonmultiple -nonmunicipal -nonmuscular -nonmusical -nonmussable -nonmutationally -nonmutative -nonmutual -nonmystical -nonmythical -nonmythological -nonnant -nonnarcotic -nonnasal -nonnat -nonnational -nonnative -nonnatural -nonnaturalism -nonnaturalistic -nonnaturality -nonnaturalness -nonnautical -nonnaval -nonnavigable -nonnavigation -nonnebular -nonnecessary -nonnecessity -nonnegligible -nonnegotiable -nonnegotiation -nonnephritic -nonnervous -nonnescience -nonnescient -nonneutral -nonneutrality -nonnitrogenized -nonnitrogenous -nonnoble -nonnomination -nonnotification -nonnotional -nonnucleated -nonnumeral -nonnutrient -nonnutritious -nonnutritive -nonobedience -nonobedient -nonobjection -nonobjective -nonobligatory -nonobservable -nonobservance -nonobservant -nonobservation -nonobstetrical -nonobstructive -nonobvious -nonoccidental -nonocculting -nonoccupant -nonoccupation -nonoccupational -nonoccurrence -nonodorous -nonoecumenic -nonoffender -nonoffensive -nonofficeholding -nonofficial -nonofficially -nonofficinal -nonoic -nonoily -nonolfactory -nonomad -nononerous -nonopacity -nonopening -nonoperating -nonoperative -nonopposition -nonoppressive -nonoptical -nonoptimistic -nonoptional -nonorchestral -nonordination -nonorganic -nonorganization -nonoriental -nonoriginal -nonornamental -nonorthodox -nonorthographical -nonoscine -nonostentation -nonoutlawry -nonoutrage -nonoverhead -nonoverlapping -nonowner -nonoxidating -nonoxidizable -nonoxidizing -nonoxygenated -nonoxygenous -nonpacific -nonpacification -nonpacifist -nonpagan -nonpaid -nonpainter -nonpalatal -nonpapal -nonpapist -nonpar -nonparallel -nonparalytic -nonparasitic -nonparasitism -nonpareil -nonparent -nonparental -nonpariello -nonparishioner -nonparliamentary -nonparlor -nonparochial -nonparous -nonpartial -nonpartiality -nonparticipant -nonparticipating -nonparticipation -nonpartisan -nonpartisanship -nonpartner -nonparty -nonpassenger -nonpasserine -nonpastoral -nonpatentable -nonpatented -nonpaternal -nonpathogenic -nonpause -nonpaying -nonpayment -nonpeak -nonpeaked -nonpearlitic -nonpecuniary -nonpedestrian -nonpedigree -nonpelagic -nonpeltast -nonpenal -nonpenalized -nonpending -nonpensionable -nonpensioner -nonperception -nonperceptual -nonperfection -nonperforated -nonperforating -nonperformance -nonperformer -nonperforming -nonperiodic -nonperiodical -nonperishable -nonperishing -nonperjury -nonpermanent -nonpermeability -nonpermeable -nonpermissible -nonpermission -nonperpendicular -nonperpetual -nonperpetuity -nonpersecution -nonperseverance -nonpersistence -nonpersistent -nonperson -nonpersonal -nonpersonification -nonpertinent -nonperversive -nonphagocytic -nonpharmaceutical -nonphenolic -nonphenomenal -nonphilanthropic -nonphilological -nonphilosophical -nonphilosophy -nonphonetic -nonphosphatic -nonphosphorized -nonphotobiotic -nonphysical -nonphysiological -nonpickable -nonpigmented -nonplacental -nonplacet -nonplanar -nonplane -nonplanetary -nonplantowning -nonplastic -nonplate -nonplausible -nonpleading -nonplus -nonplusation -nonplushed -nonplutocratic -nonpoet -nonpoetic -nonpoisonous -nonpolar -nonpolarizable -nonpolarizing -nonpolitical -nonponderosity -nonponderous -nonpopery -nonpopular -nonpopularity -nonporous -nonporphyritic -nonport -nonportability -nonportable -nonportrayal -nonpositive -nonpossession -nonposthumous -nonpostponement -nonpotential -nonpower -nonpractical -nonpractice -nonpraedial -nonpreaching -nonprecious -nonprecipitation -nonpredatory -nonpredestination -nonpredicative -nonpredictable -nonpreference -nonpreferential -nonpreformed -nonpregnant -nonprehensile -nonprejudicial -nonprelatical -nonpremium -nonpreparation -nonprepayment -nonprepositional -nonpresbyter -nonprescribed -nonprescriptive -nonpresence -nonpresentation -nonpreservation -nonpresidential -nonpress -nonpressure -nonprevalence -nonprevalent -nonpriestly -nonprimitive -nonprincipiate -nonprincipled -nonprobable -nonprocreation -nonprocurement -nonproducer -nonproducing -nonproduction -nonproductive -nonproductively -nonproductiveness -nonprofane -nonprofessed -nonprofession -nonprofessional -nonprofessionalism -nonprofessorial -nonproficience -nonproficiency -nonproficient -nonprofit -nonprofiteering -nonprognostication -nonprogressive -nonprohibitable -nonprohibition -nonprohibitive -nonprojection -nonprojective -nonprojectively -nonproletarian -nonproliferous -nonprolific -nonprolongation -nonpromiscuous -nonpromissory -nonpromotion -nonpromulgation -nonpronunciation -nonpropagandistic -nonpropagation -nonprophetic -nonpropitiation -nonproportional -nonproprietary -nonproprietor -nonprorogation -nonproscriptive -nonprosecution -nonprospect -nonprotection -nonprotective -nonproteid -nonprotein -nonprotestation -nonprotractile -nonprotractility -nonproven -nonprovided -nonprovidential -nonprovocation -nonpsychic -nonpsychological -nonpublic -nonpublication -nonpublicity -nonpueblo -nonpulmonary -nonpulsating -nonpumpable -nonpunctual -nonpunctuation -nonpuncturable -nonpunishable -nonpunishing -nonpunishment -nonpurchase -nonpurchaser -nonpurgative -nonpurification -nonpurposive -nonpursuit -nonpurulent -nonpurveyance -nonputrescent -nonputrescible -nonputting -nonpyogenic -nonpyritiferous -nonqualification -nonquality -nonquota -nonracial -nonradiable -nonradiating -nonradical -nonrailroader -nonranging -nonratability -nonratable -nonrated -nonratifying -nonrational -nonrationalist -nonrationalized -nonrayed -nonreaction -nonreactive -nonreactor -nonreader -nonreading -nonrealistic -nonreality -nonrealization -nonreasonable -nonreasoner -nonrebel -nonrebellious -nonreceipt -nonreceiving -nonrecent -nonreception -nonrecess -nonrecipient -nonreciprocal -nonreciprocating -nonreciprocity -nonrecital -nonreclamation -nonrecluse -nonrecognition -nonrecognized -nonrecoil -nonrecollection -nonrecommendation -nonreconciliation -nonrecourse -nonrecoverable -nonrecovery -nonrectangular -nonrectified -nonrecuperation -nonrecurrent -nonrecurring -nonredemption -nonredressing -nonreducing -nonreference -nonrefillable -nonreflector -nonreformation -nonrefraction -nonrefrigerant -nonrefueling -nonrefutation -nonregardance -nonregarding -nonregenerating -nonregenerative -nonregent -nonregimented -nonregistered -nonregistrability -nonregistrable -nonregistration -nonregression -nonregulation -nonrehabilitation -nonreigning -nonreimbursement -nonreinforcement -nonreinstatement -nonrejection -nonrejoinder -nonrelapsed -nonrelation -nonrelative -nonrelaxation -nonrelease -nonreliance -nonreligion -nonreligious -nonreligiousness -nonrelinquishment -nonremanie -nonremedy -nonremembrance -nonremission -nonremonstrance -nonremuneration -nonremunerative -nonrendition -nonrenewable -nonrenewal -nonrenouncing -nonrenunciation -nonrepair -nonreparation -nonrepayable -nonrepealing -nonrepeat -nonrepeater -nonrepentance -nonrepetition -nonreplacement -nonreplicate -nonreportable -nonreprehensible -nonrepresentation -nonrepresentational -nonrepresentationalism -nonrepresentative -nonrepression -nonreprisal -nonreproduction -nonreproductive -nonrepublican -nonrepudiation -nonrequirement -nonrequisition -nonrequital -nonrescue -nonresemblance -nonreservation -nonreserve -nonresidence -nonresidency -nonresident -nonresidental -nonresidenter -nonresidential -nonresidentiary -nonresidentor -nonresidual -nonresignation -nonresinifiable -nonresistance -nonresistant -nonresisting -nonresistive -nonresolvability -nonresolvable -nonresonant -nonrespectable -nonrespirable -nonresponsibility -nonrestitution -nonrestraint -nonrestricted -nonrestriction -nonrestrictive -nonresumption -nonresurrection -nonresuscitation -nonretaliation -nonretention -nonretentive -nonreticence -nonretinal -nonretirement -nonretiring -nonretraceable -nonretractation -nonretractile -nonretraction -nonretrenchment -nonretroactive -nonreturn -nonreturnable -nonrevaluation -nonrevealing -nonrevelation -nonrevenge -nonrevenue -nonreverse -nonreversed -nonreversible -nonreversing -nonreversion -nonrevertible -nonreviewable -nonrevision -nonrevival -nonrevocation -nonrevolting -nonrevolutionary -nonrevolving -nonrhetorical -nonrhymed -nonrhyming -nonrhythmic -nonriding -nonrigid -nonrioter -nonriparian -nonritualistic -nonrival -nonromantic -nonrotatable -nonrotating -nonrotative -nonround -nonroutine -nonroyal -nonroyalist -nonrubber -nonruminant -Nonruminantia -nonrun -nonrupture -nonrural -nonrustable -nonsabbatic -nonsaccharine -nonsacerdotal -nonsacramental -nonsacred -nonsacrifice -nonsacrificial -nonsailor -nonsalable -nonsalaried -nonsale -nonsaline -nonsalutary -nonsalutation -nonsalvation -nonsanctification -nonsanction -nonsanctity -nonsane -nonsanguine -nonsanity -nonsaponifiable -nonsatisfaction -nonsaturated -nonsaturation -nonsaving -nonsawing -nonscalding -nonscaling -nonscandalous -nonschematized -nonschismatic -nonscholastic -nonscience -nonscientific -nonscientist -nonscoring -nonscraping -nonscriptural -nonscripturalist -nonscrutiny -nonseasonal -nonsecession -nonseclusion -nonsecrecy -nonsecret -nonsecretarial -nonsecretion -nonsecretive -nonsecretory -nonsectarian -nonsectional -nonsectorial -nonsecular -nonsecurity -nonsedentary -nonseditious -nonsegmented -nonsegregation -nonseizure -nonselected -nonselection -nonselective -nonself -nonselfregarding -nonselling -nonsenatorial -nonsense -nonsensible -nonsensical -nonsensicality -nonsensically -nonsensicalness -nonsensification -nonsensify -nonsensitive -nonsensitiveness -nonsensitized -nonsensorial -nonsensuous -nonsentence -nonsentient -nonseparation -nonseptate -nonseptic -nonsequacious -nonsequaciousness -nonsequestration -nonserial -nonserif -nonserious -nonserous -nonserviential -nonservile -nonsetter -nonsetting -nonsettlement -nonsexual -nonsexually -nonshaft -nonsharing -nonshatter -nonshedder -nonshipper -nonshipping -nonshredding -nonshrinkable -nonshrinking -nonsiccative -nonsidereal -nonsignatory -nonsignature -nonsignificance -nonsignificant -nonsignification -nonsignificative -nonsilicated -nonsiliceous -nonsilver -nonsimplification -nonsine -nonsinging -nonsingular -nonsinkable -nonsinusoidal -nonsiphonage -nonsister -nonsitter -nonsitting -nonskeptical -nonskid -nonskidding -nonskipping -nonslaveholding -nonslip -nonslippery -nonslipping -nonsludging -nonsmoker -nonsmoking -nonsmutting -nonsocial -nonsocialist -nonsocialistic -nonsociety -nonsociological -nonsolar -nonsoldier -nonsolicitation -nonsolid -nonsolidified -nonsolution -nonsolvency -nonsolvent -nonsonant -nonsovereign -nonspalling -nonsparing -nonsparking -nonspeaker -nonspeaking -nonspecial -nonspecialist -nonspecialized -nonspecie -nonspecific -nonspecification -nonspecificity -nonspecified -nonspectacular -nonspectral -nonspeculation -nonspeculative -nonspherical -nonspill -nonspillable -nonspinning -nonspinose -nonspiny -nonspiral -nonspirit -nonspiritual -nonspirituous -nonspontaneous -nonspored -nonsporeformer -nonsporeforming -nonsporting -nonspottable -nonsprouting -nonstainable -nonstaining -nonstampable -nonstandard -nonstandardized -nonstanzaic -nonstaple -nonstarch -nonstarter -nonstarting -nonstatement -nonstatic -nonstationary -nonstatistical -nonstatutory -nonstellar -nonsticky -nonstimulant -nonstipulation -nonstock -nonstooping -nonstop -nonstrategic -nonstress -nonstretchable -nonstretchy -nonstriated -nonstriker -nonstriking -nonstriped -nonstructural -nonstudent -nonstudious -nonstylized -nonsubject -nonsubjective -nonsubmission -nonsubmissive -nonsubordination -nonsubscriber -nonsubscribing -nonsubscription -nonsubsiding -nonsubsidy -nonsubsistence -nonsubstantial -nonsubstantialism -nonsubstantialist -nonsubstantiality -nonsubstantiation -nonsubstantive -nonsubstitution -nonsubtraction -nonsuccess -nonsuccessful -nonsuccession -nonsuccessive -nonsuccour -nonsuction -nonsuctorial -nonsufferance -nonsuffrage -nonsugar -nonsuggestion -nonsuit -nonsulphurous -nonsummons -nonsupplication -nonsupport -nonsupporter -nonsupporting -nonsuppositional -nonsuppressed -nonsuppression -nonsuppurative -nonsurface -nonsurgical -nonsurrender -nonsurvival -nonsurvivor -nonsuspect -nonsustaining -nonsustenance -nonswearer -nonswearing -nonsweating -nonswimmer -nonswimming -nonsyllabic -nonsyllabicness -nonsyllogistic -nonsyllogizing -nonsymbiotic -nonsymbiotically -nonsymbolic -nonsymmetrical -nonsympathetic -nonsympathizer -nonsympathy -nonsymphonic -nonsymptomatic -nonsynchronous -nonsyndicate -nonsynodic -nonsynonymous -nonsyntactic -nonsyntactical -nonsynthesized -nonsyntonic -nonsystematic -nontabular -nontactical -nontan -nontangential -nontannic -nontannin -nontariff -nontarnishable -nontarnishing -nontautomeric -nontautomerizable -nontax -nontaxability -nontaxable -nontaxonomic -nonteachable -nonteacher -nonteaching -nontechnical -nontechnological -nonteetotaler -nontelegraphic -nonteleological -nontelephonic -nontemporal -nontemporizing -nontenant -nontenure -nontenurial -nonterm -nonterminating -nonterrestrial -nonterritorial -nonterritoriality -nontestamentary -nontextual -nontheatrical -nontheistic -nonthematic -nontheological -nontheosophical -nontherapeutic -nonthinker -nonthinking -nonthoracic -nonthoroughfare -nonthreaded -nontidal -nontillable -nontimbered -nontitaniferous -nontitular -nontolerated -nontopographical -nontourist -nontoxic -nontraction -nontrade -nontrader -nontrading -nontraditional -nontragic -nontrailing -nontransferability -nontransferable -nontransgression -nontransient -nontransitional -nontranslocation -nontransmission -nontransparency -nontransparent -nontransportation -nontransposing -nontransposition -nontraveler -nontraveling -nontreasonable -nontreated -nontreatment -nontreaty -nontrespass -nontrial -nontribal -nontribesman -nontributary -nontrier -nontrigonometrical -nontronite -nontropical -nontrunked -nontruth -nontuberculous -nontuned -nonturbinated -nontutorial -nontyphoidal -nontypical -nontypicalness -nontypographical -nontyrannical -nonubiquitous -nonulcerous -nonultrafilterable -nonumbilical -nonumbilicate -nonumbrellaed -nonunanimous -nonuncial -nonundergraduate -nonunderstandable -nonunderstanding -nonunderstandingly -nonunderstood -nonundulatory -nonuniform -nonuniformist -nonuniformitarian -nonuniformity -nonuniformly -nonunion -nonunionism -nonunionist -nonunique -nonunison -nonunited -nonuniversal -nonuniversity -nonupholstered -nonuple -nonuplet -nonupright -nonurban -nonurgent -nonusage -nonuse -nonuser -nonusing -nonusurping -nonuterine -nonutile -nonutilitarian -nonutility -nonutilized -nonutterance -nonvacant -nonvaccination -nonvacuous -nonvaginal -nonvalent -nonvalidity -nonvaluation -nonvalve -nonvanishing -nonvariable -nonvariant -nonvariation -nonvascular -nonvassal -nonvegetative -nonvenereal -nonvenomous -nonvenous -nonventilation -nonverbal -nonverdict -nonverminous -nonvernacular -nonvertebral -nonvertical -nonvertically -nonvesicular -nonvesting -nonvesture -nonveteran -nonveterinary -nonviable -nonvibratile -nonvibration -nonvibrator -nonvibratory -nonvicarious -nonvictory -nonvillager -nonvillainous -nonvindication -nonvinous -nonvintage -nonviolation -nonviolence -nonvirginal -nonvirile -nonvirtue -nonvirtuous -nonvirulent -nonviruliferous -nonvisaed -nonvisceral -nonviscid -nonviscous -nonvisional -nonvisitation -nonvisiting -nonvisual -nonvisualized -nonvital -nonvitreous -nonvitrified -nonviviparous -nonvocal -nonvocalic -nonvocational -nonvolant -nonvolatile -nonvolatilized -nonvolcanic -nonvolition -nonvoluntary -nonvortical -nonvortically -nonvoter -nonvoting -nonvulcanizable -nonvulvar -nonwalking -nonwar -nonwasting -nonwatertight -nonweakness -nonwestern -nonwetted -nonwhite -nonwinged -nonwoody -nonworker -nonworking -nonworship -nonwrinkleable -nonya -nonyielding -nonyl -nonylene -nonylenic -nonylic -nonzealous -nonzero -nonzodiacal -nonzonal -nonzonate -nonzoological -noodle -noodledom -noodleism -nook -nooked -nookery -nooking -nooklet -nooklike -nooky -noological -noologist -noology -noometry -noon -noonday -noonflower -nooning -noonlight -noonlit -noonstead -noontide -noontime -noonwards -noop -nooscopic -noose -nooser -Nootka -nopal -Nopalea -nopalry -nope -nopinene -nor -Nora -Norah -norard -norate -noration -norbergite -Norbert -Norbertine -norcamphane -nordcaper -nordenskioldine -Nordic -Nordicism -Nordicist -Nordicity -Nordicization -Nordicize -nordmarkite -noreast -noreaster -norelin -Norfolk -Norfolkian -norgine -nori -noria -Noric -norie -norimon -norite -norland -norlander -norlandism -norleucine -Norm -norm -Norma -norma -normal -normalcy -normalism -normalist -normality -normalization -normalize -normalizer -normally -normalness -Norman -Normanesque -Normanish -Normanism -Normanist -Normanization -Normanize -Normanizer -Normanly -Normannic -normated -normative -normatively -normativeness -normless -normoblast -normoblastic -normocyte -normocytic -normotensive -Norn -Norna -nornicotine -nornorwest -noropianic -norpinic -Norridgewock -Norroway -Norroy -Norse -norsel -Norseland -norseler -Norseman -Norsk -north -northbound -northeast -northeaster -northeasterly -northeastern -northeasternmost -northeastward -northeastwardly -northeastwards -norther -northerliness -northerly -northern -northerner -northernize -northernly -northernmost -northernness -northest -northfieldite -northing -northland -northlander -northlight -Northman -northmost -northness -Northumber -Northumbrian -northupite -northward -northwardly -northwards -northwest -northwester -northwesterly -northwestern -northwestward -northwestwardly -northwestwards -Norumbega -norward -norwards -Norway -Norwegian -norwest -norwester -norwestward -Nosairi -Nosairian -nosarian -nose -nosean -noseanite -noseband -nosebanded -nosebleed -nosebone -noseburn -nosed -nosegay -nosegaylike -noseherb -nosehole -noseless -noselessly -noselessness -noselike -noselite -Nosema -Nosematidae -nosepiece -nosepinch -noser -nosesmart -nosethirl -nosetiology -nosewards -nosewheel -nosewise -nosey -nosine -nosing -nosism -nosocomial -nosocomium -nosogenesis -nosogenetic -nosogenic -nosogeny -nosogeography -nosographer -nosographic -nosographical -nosographically -nosography -nosohaemia -nosohemia -nosological -nosologically -nosologist -nosology -nosomania -nosomycosis -nosonomy -nosophobia -nosophyte -nosopoetic -nosopoietic -nosotaxy -nosotrophy -nostalgia -nostalgic -nostalgically -nostalgy -nostic -Nostoc -Nostocaceae -nostocaceous -nostochine -nostologic -nostology -nostomania -Nostradamus -nostrificate -nostrification -nostril -nostriled -nostrility -nostrilsome -nostrum -nostrummonger -nostrummongership -nostrummongery -Nosu -nosy -not -notabilia -notability -notable -notableness -notably -notacanthid -Notacanthidae -notacanthoid -notacanthous -Notacanthus -notaeal -notaeum -notal -notalgia -notalgic -Notalia -notan -notandum -notanencephalia -notarial -notarially -notariate -notarikon -notarize -notary -notaryship -notate -notation -notational -notative -notator -notch -notchboard -notched -notchel -notcher -notchful -notching -notchweed -notchwing -notchy -note -notebook -notecase -noted -notedly -notedness -notehead -noteholder -notekin -Notelaea -noteless -notelessly -notelessness -notelet -notencephalocele -notencephalus -noter -notewise -noteworthily -noteworthiness -noteworthy -notharctid -Notharctidae -Notharctus -nother -nothing -nothingarian -nothingarianism -nothingism -nothingist -nothingize -nothingless -nothingly -nothingness -nothingology -Nothofagus -Notholaena -nothosaur -Nothosauri -nothosaurian -Nothosauridae -Nothosaurus -nothous -notice -noticeability -noticeable -noticeably -noticer -Notidani -notidanian -notidanid -Notidanidae -notidanidan -notidanoid -Notidanus -notifiable -notification -notified -notifier -notify -notifyee -notion -notionable -notional -notionalist -notionality -notionally -notionalness -notionary -notionate -notioned -notionist -notionless -Notiosorex -notitia -Notkerian -notocentrous -notocentrum -notochord -notochordal -notodontian -notodontid -Notodontidae -notodontoid -Notogaea -Notogaeal -Notogaean -Notogaeic -notommatid -Notommatidae -Notonecta -notonectal -notonectid -Notonectidae -notopodial -notopodium -notopterid -Notopteridae -notopteroid -Notopterus -notorhizal -Notorhynchus -notoriety -notorious -notoriously -notoriousness -Notornis -Notoryctes -Notostraca -Nototherium -Nototrema -nototribe -notour -notourly -Notropis -notself -Nottoway -notum -Notungulata -notungulate -Notus -notwithstanding -Nou -nougat -nougatine -nought -noumeaite -noumeite -noumenal -noumenalism -noumenalist -noumenality -noumenalize -noumenally -noumenism -noumenon -noun -nounal -nounally -nounize -nounless -noup -nourice -nourish -nourishable -nourisher -nourishing -nourishingly -nourishment -nouriture -nous -nouther -nova -novaculite -novalia -Novanglian -Novanglican -novantique -novarsenobenzene -novate -Novatian -Novatianism -Novatianist -novation -novative -novator -novatory -novatrix -novcic -novel -novelcraft -noveldom -novelese -novelesque -novelet -novelette -noveletter -novelettish -novelettist -noveletty -novelish -novelism -novelist -novelistic -novelistically -novelization -novelize -novella -novelless -novellike -novelly -novelmongering -novelness -novelry -novelty -novelwright -novem -novemarticulate -November -Novemberish -novemcostate -novemdigitate -novemfid -novemlobate -novemnervate -novemperfoliate -novena -novenary -novendial -novene -novennial -novercal -Novial -novice -novicehood -novicelike -noviceship -noviciate -novilunar -novitial -novitiate -novitiateship -novitiation -novity -Novo -Novocain -novodamus -Novorolsky -now -nowaday -nowadays -nowanights -noway -noways -nowed -nowel -nowhat -nowhen -nowhence -nowhere -nowhereness -nowheres -nowhit -nowhither -nowise -nowness -Nowroze -nowt -nowy -noxa -noxal -noxally -noxious -noxiously -noxiousness -noy -noyade -noyau -Nozi -nozzle -nozzler -nth -nu -nuance -nub -Nuba -nubbin -nubble -nubbling -nubbly -nubby -nubecula -nubia -Nubian -nubiferous -nubiform -nubigenous -nubilate -nubilation -nubile -nubility -nubilous -Nubilum -nucal -nucament -nucamentaceous -nucellar -nucellus -nucha -nuchal -nuchalgia -nuciculture -nuciferous -nuciform -nucin -nucivorous -nucleal -nuclear -nucleary -nuclease -nucleate -nucleation -nucleator -nuclei -nucleiferous -nucleiform -nuclein -nucleinase -nucleoalbumin -nucleoalbuminuria -nucleofugal -nucleohistone -nucleohyaloplasm -nucleohyaloplasma -nucleoid -nucleoidioplasma -nucleolar -nucleolated -nucleole -nucleoli -nucleolinus -nucleolocentrosome -nucleoloid -nucleolus -nucleolysis -nucleomicrosome -nucleon -nucleone -nucleonics -nucleopetal -nucleoplasm -nucleoplasmatic -nucleoplasmic -nucleoprotein -nucleoside -nucleotide -nucleus -nuclide -nuclidic -Nucula -Nuculacea -nuculanium -nucule -nuculid -Nuculidae -nuculiform -nuculoid -Nuda -nudate -nudation -Nudd -nuddle -nude -nudely -nudeness -Nudens -nudge -nudger -nudibranch -Nudibranchia -nudibranchian -nudibranchiate -nudicaudate -nudicaul -nudifier -nudiflorous -nudiped -nudish -nudism -nudist -nuditarian -nudity -nugacious -nugaciousness -nugacity -nugator -nugatoriness -nugatory -nuggar -nugget -nuggety -nugify -nugilogue -Nugumiut -nuisance -nuisancer -nuke -Nukuhivan -nul -null -nullable -nullah -nullibicity -nullibility -nullibiquitous -nullibist -nullification -nullificationist -nullificator -nullifidian -nullifier -nullify -nullipara -nulliparity -nulliparous -nullipennate -Nullipennes -nulliplex -nullipore -nulliporous -nullism -nullisome -nullisomic -nullity -nulliverse -nullo -Numa -Numantine -numb -number -numberable -numberer -numberful -numberless -numberous -numbersome -numbfish -numbing -numbingly -numble -numbles -numbly -numbness -numda -numdah -numen -Numenius -numerable -numerableness -numerably -numeral -numerant -numerary -numerate -numeration -numerative -numerator -numerical -numerically -numericalness -numerist -numero -numerology -numerose -numerosity -numerous -numerously -numerousness -Numida -Numidae -Numidian -Numididae -Numidinae -numinism -numinous -numinously -numismatic -numismatical -numismatically -numismatician -numismatics -numismatist -numismatography -numismatologist -numismatology -nummary -nummi -nummiform -nummular -Nummularia -nummulary -nummulated -nummulation -nummuline -Nummulinidae -nummulite -Nummulites -nummulitic -Nummulitidae -nummulitoid -nummuloidal -nummus -numskull -numskulled -numskulledness -numskullery -numskullism -numud -nun -nunatak -nunbird -nunch -nuncheon -nunciate -nunciative -nunciatory -nunciature -nuncio -nuncioship -nuncle -nuncupate -nuncupation -nuncupative -nuncupatively -nundinal -nundination -nundine -nunhood -Nunki -nunky -nunlet -nunlike -nunnari -nunnated -nunnation -nunnery -nunni -nunnify -nunnish -nunnishness -nunship -Nupe -Nuphar -nuptial -nuptiality -nuptialize -nuptially -nuptials -nuque -nuraghe -nurhag -nurly -nursable -nurse -nursedom -nursegirl -nursehound -nursekeeper -nursekin -nurselet -nurselike -nursemaid -nurser -nursery -nurserydom -nurseryful -nurserymaid -nurseryman -nursetender -nursing -nursingly -nursle -nursling -nursy -nurturable -nurtural -nurture -nurtureless -nurturer -nurtureship -Nusairis -Nusakan -nusfiah -nut -nutant -nutarian -nutate -nutation -nutational -nutbreaker -nutcake -nutcrack -nutcracker -nutcrackers -nutcrackery -nutgall -nuthatch -nuthook -nutjobber -nutlet -nutlike -nutmeg -nutmegged -nutmeggy -nutpecker -nutpick -nutramin -nutria -nutrice -nutricial -nutricism -nutrient -nutrify -nutriment -nutrimental -nutritial -nutrition -nutritional -nutritionally -nutritionist -nutritious -nutritiously -nutritiousness -nutritive -nutritively -nutritiveness -nutritory -nutseed -nutshell -Nuttallia -nuttalliasis -nuttalliosis -nutted -nutter -nuttery -nuttily -nuttiness -nutting -nuttish -nuttishness -nutty -nuzzer -nuzzerana -nuzzle -Nyamwezi -Nyanja -nyanza -Nyaya -nychthemer -nychthemeral -nychthemeron -Nyctaginaceae -nyctaginaceous -Nyctaginia -nyctalope -nyctalopia -nyctalopic -nyctalopy -Nyctanthes -Nyctea -Nyctereutes -nycteribiid -Nycteribiidae -Nycteridae -nycterine -Nycteris -Nycticorax -Nyctimene -nyctinastic -nyctinasty -nyctipelagic -Nyctipithecinae -nyctipithecine -Nyctipithecus -nyctitropic -nyctitropism -nyctophobia -nycturia -Nydia -nye -nylast -nylon -nymil -nymph -nympha -nymphae -Nymphaea -Nymphaeaceae -nymphaeaceous -nymphaeum -nymphal -nymphalid -Nymphalidae -Nymphalinae -nymphaline -nympheal -nymphean -nymphet -nymphic -nymphical -nymphid -nymphine -Nymphipara -nymphiparous -nymphish -nymphitis -nymphlike -nymphlin -nymphly -Nymphoides -nympholepsia -nympholepsy -nympholept -nympholeptic -nymphomania -nymphomaniac -nymphomaniacal -Nymphonacea -nymphosis -nymphotomy -nymphwise -Nyoro -Nyroca -Nyssa -Nyssaceae -nystagmic -nystagmus -nyxis -O -o -oadal -oaf -oafdom -oafish -oafishly -oafishness -oak -oakberry -Oakboy -oaken -oakenshaw -Oakesia -oaklet -oaklike -oakling -oaktongue -oakum -oakweb -oakwood -oaky -oam -Oannes -oar -oarage -oarcock -oared -oarfish -oarhole -oarial -oarialgia -oaric -oariocele -oariopathic -oariopathy -oariotomy -oaritic -oaritis -oarium -oarless -oarlike -oarlock -oarlop -oarman -oarsman -oarsmanship -oarswoman -oarweed -oary -oasal -oasean -oases -oasis -oasitic -oast -oasthouse -oat -oatbin -oatcake -oatear -oaten -oatenmeal -oatfowl -oath -oathay -oathed -oathful -oathlet -oathworthy -oatland -oatlike -oatmeal -oatseed -oaty -Obadiah -obambulate -obambulation -obambulatory -oban -Obbenite -obbligato -obclavate -obclude -obcompressed -obconical -obcordate -obcordiform -obcuneate -obdeltoid -obdiplostemonous -obdiplostemony -obdormition -obduction -obduracy -obdurate -obdurately -obdurateness -obduration -obe -obeah -obeahism -obeche -obedience -obediency -obedient -obediential -obedientially -obedientialness -obedientiar -obedientiary -obediently -obeisance -obeisant -obeisantly -obeism -obelia -obeliac -obelial -obelion -obeliscal -obeliscar -obelisk -obeliskoid -obelism -obelize -obelus -Oberon -obese -obesely -obeseness -obesity -obex -obey -obeyable -obeyer -obeyingly -obfuscable -obfuscate -obfuscation -obfuscator -obfuscity -obfuscous -obi -Obidicut -obispo -obit -obitual -obituarian -obituarily -obituarist -obituarize -obituary -object -objectable -objectation -objectative -objectee -objecthood -objectification -objectify -objection -objectionability -objectionable -objectionableness -objectionably -objectional -objectioner -objectionist -objectival -objectivate -objectivation -objective -objectively -objectiveness -objectivism -objectivist -objectivistic -objectivity -objectivize -objectization -objectize -objectless -objectlessly -objectlessness -objector -objicient -objuration -objure -objurgate -objurgation -objurgative -objurgatively -objurgator -objurgatorily -objurgatory -objurgatrix -oblanceolate -oblate -oblately -oblateness -oblation -oblational -oblationary -oblatory -oblectate -oblectation -obley -obligable -obligancy -obligant -obligate -obligation -obligational -obligative -obligativeness -obligator -obligatorily -obligatoriness -obligatory -obligatum -oblige -obliged -obligedly -obligedness -obligee -obligement -obliger -obliging -obligingly -obligingness -obligistic -obligor -obliquangular -obliquate -obliquation -oblique -obliquely -obliqueness -obliquitous -obliquity -obliquus -obliterable -obliterate -obliteration -obliterative -obliterator -oblivescence -oblivial -obliviality -oblivion -oblivionate -oblivionist -oblivionize -oblivious -obliviously -obliviousness -obliviscence -obliviscible -oblocutor -oblong -oblongatal -oblongated -oblongish -oblongitude -oblongitudinal -oblongly -oblongness -obloquial -obloquious -obloquy -obmutescence -obmutescent -obnebulate -obnounce -obnoxiety -obnoxious -obnoxiously -obnoxiousness -obnubilate -obnubilation -obnunciation -oboe -oboist -obol -Obolaria -obolary -obole -obolet -obolus -obomegoid -Obongo -oboval -obovate -obovoid -obpyramidal -obpyriform -Obrazil -obreption -obreptitious -obreptitiously -obrogate -obrogation -obrotund -obscene -obscenely -obsceneness -obscenity -obscurancy -obscurant -obscurantic -obscurantism -obscurantist -obscuration -obscurative -obscure -obscuredly -obscurely -obscurement -obscureness -obscurer -obscurism -obscurist -obscurity -obsecrate -obsecration -obsecrationary -obsecratory -obsede -obsequence -obsequent -obsequial -obsequience -obsequiosity -obsequious -obsequiously -obsequiousness -obsequity -obsequium -obsequy -observability -observable -observableness -observably -observance -observancy -observandum -observant -Observantine -Observantist -observantly -observantness -observation -observational -observationalism -observationally -observative -observatorial -observatory -observe -observedly -observer -observership -observing -observingly -obsess -obsessingly -obsession -obsessional -obsessionist -obsessive -obsessor -obsidian -obsidianite -obsidional -obsidionary -obsidious -obsignate -obsignation -obsignatory -obsolesce -obsolescence -obsolescent -obsolescently -obsolete -obsoletely -obsoleteness -obsoletion -obsoletism -obstacle -obstetric -obstetrical -obstetrically -obstetricate -obstetrication -obstetrician -obstetrics -obstetricy -obstetrist -obstetrix -obstinacious -obstinacy -obstinance -obstinate -obstinately -obstinateness -obstination -obstinative -obstipation -obstreperate -obstreperosity -obstreperous -obstreperously -obstreperousness -obstriction -obstringe -obstruct -obstructant -obstructedly -obstructer -obstructingly -obstruction -obstructionism -obstructionist -obstructive -obstructively -obstructiveness -obstructivism -obstructivity -obstructor -obstruent -obstupefy -obtain -obtainable -obtainal -obtainance -obtainer -obtainment -obtect -obtected -obtemper -obtemperate -obtenebrate -obtenebration -obtention -obtest -obtestation -obtriangular -obtrude -obtruder -obtruncate -obtruncation -obtruncator -obtrusion -obtrusionist -obtrusive -obtrusively -obtrusiveness -obtund -obtundent -obtunder -obtundity -obturate -obturation -obturator -obturatory -obturbinate -obtusangular -obtuse -obtusely -obtuseness -obtusifid -obtusifolious -obtusilingual -obtusilobous -obtusion -obtusipennate -obtusirostrate -obtusish -obtusity -obumbrant -obumbrate -obumbration -obvallate -obvelation -obvention -obverse -obversely -obversion -obvert -obvertend -obviable -obviate -obviation -obviative -obviator -obvious -obviously -obviousness -obvolute -obvoluted -obvolution -obvolutive -obvolve -obvolvent -ocarina -Occamism -Occamist -Occamistic -Occamite -occamy -occasion -occasionable -occasional -occasionalism -occasionalist -occasionalistic -occasionality -occasionally -occasionalness -occasionary -occasioner -occasionless -occasive -occident -occidental -Occidentalism -Occidentalist -occidentality -Occidentalization -Occidentalize -occidentally -occiduous -occipital -occipitalis -occipitally -occipitoanterior -occipitoatlantal -occipitoatloid -occipitoaxial -occipitoaxoid -occipitobasilar -occipitobregmatic -occipitocalcarine -occipitocervical -occipitofacial -occipitofrontal -occipitofrontalis -occipitohyoid -occipitoiliac -occipitomastoid -occipitomental -occipitonasal -occipitonuchal -occipitootic -occipitoparietal -occipitoposterior -occipitoscapular -occipitosphenoid -occipitosphenoidal -occipitotemporal -occipitothalamic -occiput -occitone -occlude -occludent -occlusal -occluse -occlusion -occlusive -occlusiveness -occlusocervical -occlusocervically -occlusogingival -occlusometer -occlusor -occult -occultate -occultation -occulter -occulting -occultism -occultist -occultly -occultness -occupable -occupance -occupancy -occupant -occupation -occupational -occupationalist -occupationally -occupationless -occupative -occupiable -occupier -occupy -occur -occurrence -occurrent -occursive -ocean -oceaned -oceanet -oceanful -Oceanian -oceanic -Oceanican -oceanity -oceanographer -oceanographic -oceanographical -oceanographically -oceanographist -oceanography -oceanology -oceanophyte -oceanside -oceanward -oceanwards -oceanways -oceanwise -ocellar -ocellary -ocellate -ocellated -ocellation -ocelli -ocellicyst -ocellicystic -ocelliferous -ocelliform -ocelligerous -ocellus -oceloid -ocelot -och -ochava -ochavo -ocher -ocherish -ocherous -ochery -ochidore -ochlesis -ochlesitic -ochletic -ochlocracy -ochlocrat -ochlocratic -ochlocratical -ochlocratically -ochlophobia -ochlophobist -Ochna -Ochnaceae -ochnaceous -ochone -Ochotona -Ochotonidae -Ochozoma -ochraceous -Ochrana -ochrea -ochreate -ochreous -ochro -ochrocarpous -ochroid -ochroleucous -ochrolite -Ochroma -ochronosis -ochronosus -ochronotic -ochrous -ocht -Ocimum -ock -oclock -Ocneria -ocote -Ocotea -ocotillo -ocque -ocracy -ocrea -ocreaceous -Ocreatae -ocreate -ocreated -octachloride -octachord -octachordal -octachronous -Octacnemus -octacolic -octactinal -octactine -Octactiniae -octactinian -octad -octadecahydrate -octadecane -octadecanoic -octadecyl -octadic -octadrachm -octaemeron -octaeteric -octaeterid -octagon -octagonal -octagonally -octahedral -octahedric -octahedrical -octahedrite -octahedroid -octahedron -octahedrous -octahydrate -octahydrated -octakishexahedron -octamerism -octamerous -octameter -octan -octanaphthene -Octandria -octandrian -octandrious -octane -octangle -octangular -octangularness -Octans -octant -octantal -octapla -octaploid -octaploidic -octaploidy -octapodic -octapody -octarch -octarchy -octarius -octarticulate -octary -octasemic -octastich -octastichon -octastrophic -octastyle -octastylos -octateuch -octaval -octavalent -octavarium -octave -Octavia -Octavian -octavic -octavina -Octavius -octavo -octenary -octene -octennial -octennially -octet -octic -octillion -octillionth -octine -octingentenary -octoad -octoalloy -octoate -octobass -October -octobrachiate -Octobrist -octocentenary -octocentennial -octochord -Octocoralla -octocorallan -Octocorallia -octocoralline -octocotyloid -octodactyl -octodactyle -octodactylous -octodecimal -octodecimo -octodentate -octodianome -Octodon -octodont -Octodontidae -Octodontinae -octoechos -octofid -octofoil -octofoiled -octogamy -octogenarian -octogenarianism -octogenary -octogild -octoglot -Octogynia -octogynian -octogynious -octogynous -octoic -octoid -octolateral -octolocular -octomeral -octomerous -octometer -octonal -octonare -octonarian -octonarius -octonary -octonematous -octonion -octonocular -octoon -octopartite -octopean -octoped -octopede -octopetalous -octophthalmous -octophyllous -octopi -octopine -octoploid -octoploidic -octoploidy -octopod -Octopoda -octopodan -octopodes -octopodous -octopolar -octopus -octoradial -octoradiate -octoradiated -octoreme -octoroon -octose -octosepalous -octospermous -octospore -octosporous -octostichous -octosyllabic -octosyllable -octovalent -octoyl -octroi -octroy -octuor -octuple -octuplet -octuplex -octuplicate -octuplication -octuply -octyl -octylene -octyne -ocuby -ocular -ocularist -ocularly -oculary -oculate -oculated -oculauditory -oculiferous -oculiform -oculigerous -Oculina -oculinid -Oculinidae -oculinoid -oculist -oculistic -oculocephalic -oculofacial -oculofrontal -oculomotor -oculomotory -oculonasal -oculopalpebral -oculopupillary -oculospinal -oculozygomatic -oculus -ocydrome -ocydromine -Ocydromus -Ocypete -Ocypoda -ocypodan -Ocypode -ocypodian -Ocypodidae -ocypodoid -Ocyroe -Ocyroidae -Od -od -oda -Odacidae -odacoid -odal -odalborn -odalisk -odalisque -odaller -odalman -odalwoman -Odax -odd -oddish -oddity -oddlegs -oddly -oddman -oddment -oddments -oddness -Odds -odds -Oddsbud -oddsman -ode -odel -odelet -Odelsthing -Odelsting -odeon -odeum -odic -odically -Odin -Odinian -Odinic -Odinism -Odinist -odinite -Odinitic -odiometer -odious -odiously -odiousness -odist -odium -odiumproof -Odobenidae -Odobenus -Odocoileus -odograph -odology -odometer -odometrical -odometry -Odonata -odontagra -odontalgia -odontalgic -Odontaspidae -Odontaspididae -Odontaspis -odontatrophia -odontatrophy -odontexesis -odontiasis -odontic -odontist -odontitis -odontoblast -odontoblastic -odontocele -Odontocete -odontocete -Odontoceti -odontocetous -odontochirurgic -odontoclasis -odontoclast -odontodynia -odontogen -odontogenesis -odontogenic -odontogeny -Odontoglossae -odontoglossal -odontoglossate -Odontoglossum -Odontognathae -odontognathic -odontognathous -odontograph -odontographic -odontography -odontohyperesthesia -odontoid -Odontolcae -odontolcate -odontolcous -odontolite -odontolith -odontological -odontologist -odontology -odontoloxia -odontoma -odontomous -odontonecrosis -odontoneuralgia -odontonosology -odontopathy -odontophoral -odontophore -Odontophoridae -Odontophorinae -odontophorine -odontophorous -Odontophorus -odontoplast -odontoplerosis -Odontopteris -Odontopteryx -odontorhynchous -Odontormae -Odontornithes -odontornithic -odontorrhagia -odontorthosis -odontoschism -odontoscope -odontosis -odontostomatous -odontostomous -Odontosyllis -odontotechny -odontotherapia -odontotherapy -odontotomy -Odontotormae -odontotripsis -odontotrypy -odoom -odophone -odor -odorant -odorate -odorator -odored -odorful -odoriferant -odoriferosity -odoriferous -odoriferously -odoriferousness -odorific -odorimeter -odorimetry -odoriphore -odorivector -odorize -odorless -odorometer -odorosity -odorous -odorously -odorousness -odorproof -Odostemon -Ods -odso -odum -odyl -odylic -odylism -odylist -odylization -odylize -Odynerus -Odyssean -Odyssey -Odz -Odzookers -Odzooks -oe -Oecanthus -oecist -oecodomic -oecodomical -oecoparasite -oecoparasitism -oecophobia -oecumenian -oecumenic -oecumenical -oecumenicalism -oecumenicity -oecus -oedemerid -Oedemeridae -oedicnemine -Oedicnemus -Oedipal -Oedipean -Oedipus -Oedogoniaceae -oedogoniaceous -Oedogoniales -Oedogonium -oenanthaldehyde -oenanthate -Oenanthe -oenanthic -oenanthol -oenanthole -oenanthyl -oenanthylate -oenanthylic -oenin -Oenocarpus -oenochoe -oenocyte -oenocytic -oenolin -oenological -oenologist -oenology -oenomancy -Oenomaus -oenomel -oenometer -oenophilist -oenophobist -oenopoetic -Oenothera -Oenotheraceae -oenotheraceous -Oenotrian -oer -oersted -oes -oesophageal -oesophagi -oesophagismus -oesophagostomiasis -Oesophagostomum -oesophagus -oestradiol -Oestrelata -oestrian -oestriasis -oestrid -Oestridae -oestrin -oestriol -oestroid -oestrous -oestrual -oestruate -oestruation -oestrum -oestrus -of -Ofer -off -offal -offaling -offbeat -offcast -offcome -offcut -offend -offendable -offendant -offended -offendedly -offendedness -offender -offendible -offendress -offense -offenseful -offenseless -offenselessly -offenseproof -offensible -offensive -offensively -offensiveness -offer -offerable -offeree -offerer -offering -offeror -offertorial -offertory -offgoing -offgrade -offhand -offhanded -offhandedly -offhandedness -office -officeholder -officeless -officer -officerage -officeress -officerhood -officerial -officerism -officerless -officership -official -officialdom -officialese -officialism -officiality -officialization -officialize -officially -officialty -officiant -officiary -officiate -officiation -officiator -officinal -officinally -officious -officiously -officiousness -offing -offish -offishly -offishness -offlet -offlook -offprint -offsaddle -offscape -offscour -offscourer -offscouring -offscum -offset -offshoot -offshore -offsider -offspring -offtake -offtype -offuscate -offuscation -offward -offwards -oflete -Ofo -oft -often -oftenness -oftens -oftentime -oftentimes -ofter -oftest -oftly -oftness -ofttime -ofttimes -oftwhiles -Og -ogaire -Ogallala -ogam -ogamic -Ogboni -Ogcocephalidae -Ogcocephalus -ogdoad -ogdoas -ogee -ogeed -ogganition -ogham -oghamic -Oghuz -ogival -ogive -ogived -Oglala -ogle -ogler -ogmic -Ogor -Ogpu -ogre -ogreish -ogreishly -ogreism -ogress -ogrish -ogrism -ogtiern -ogum -Ogygia -Ogygian -oh -ohelo -ohia -Ohio -Ohioan -ohm -ohmage -ohmic -ohmmeter -oho -ohoy -oidioid -oidiomycosis -oidiomycotic -Oidium -oii -oikology -oikoplast -oil -oilberry -oilbird -oilcan -oilcloth -oilcoat -oilcup -oildom -oiled -oiler -oilery -oilfish -oilhole -oilily -oiliness -oilless -oillessness -oillet -oillike -oilman -oilmonger -oilmongery -oilometer -oilpaper -oilproof -oilproofing -oilseed -oilskin -oilskinned -oilstock -oilstone -oilstove -oiltight -oiltightness -oilway -oily -oilyish -oime -oinochoe -oinology -oinomancy -oinomania -oinomel -oint -ointment -Oireachtas -oisin -oisivity -oitava -oiticica -Ojibwa -Ojibway -Ok -oka -okapi -Okapia -okee -okenite -oket -oki -okia -Okie -Okinagan -Oklafalaya -Oklahannali -Oklahoma -Oklahoman -okoniosis -okonite -okra -okrug -okshoofd -okthabah -Okuari -okupukupu -Olacaceae -olacaceous -Olaf -olam -olamic -Olax -Olcha -Olchi -Old -old -olden -Oldenburg -older -oldermost -oldfangled -oldfangledness -Oldfieldia -Oldhamia -oldhamite -oldhearted -oldish -oldland -oldness -oldster -oldwife -Ole -Olea -Oleaceae -oleaceous -Oleacina -Oleacinidae -oleaginous -oleaginousness -oleana -oleander -oleandrin -Olearia -olease -oleaster -oleate -olecranal -olecranarthritis -olecranial -olecranian -olecranoid -olecranon -olefiant -olefin -olefine -olefinic -Oleg -oleic -oleiferous -olein -olena -olenellidian -Olenellus -olenid -Olenidae -olenidian -olent -Olenus -oleo -oleocalcareous -oleocellosis -oleocyst -oleoduct -oleograph -oleographer -oleographic -oleography -oleomargaric -oleomargarine -oleometer -oleoptene -oleorefractometer -oleoresin -oleoresinous -oleosaccharum -oleose -oleosity -oleostearate -oleostearin -oleothorax -oleous -Oleraceae -oleraceous -olericultural -olericulturally -olericulture -Oleron -Olethreutes -olethreutid -Olethreutidae -olfact -olfactible -olfaction -olfactive -olfactology -olfactometer -olfactometric -olfactometry -olfactor -olfactorily -olfactory -olfacty -Olga -oliban -olibanum -olid -oligacanthous -oligaemia -oligandrous -oliganthous -oligarch -oligarchal -oligarchic -oligarchical -oligarchically -oligarchism -oligarchist -oligarchize -oligarchy -oligemia -oligidria -oligist -oligistic -oligistical -oligocarpous -Oligocene -Oligochaeta -oligochaete -oligochaetous -oligochete -oligocholia -oligochrome -oligochromemia -oligochronometer -oligochylia -oligoclase -oligoclasite -oligocystic -oligocythemia -oligocythemic -oligodactylia -oligodendroglia -oligodendroglioma -oligodipsia -oligodontous -oligodynamic -oligogalactia -oligohemia -oligohydramnios -oligolactia -oligomenorrhea -oligomerous -oligomery -oligometochia -oligometochic -Oligomyodae -oligomyodian -oligomyoid -Oligonephria -oligonephric -oligonephrous -oligonite -oligopepsia -oligopetalous -oligophagous -oligophosphaturia -oligophrenia -oligophrenic -oligophyllous -oligoplasmia -oligopnea -oligopolistic -oligopoly -oligoprothesy -oligoprothetic -oligopsonistic -oligopsony -oligopsychia -oligopyrene -oligorhizous -oligosepalous -oligosialia -oligosideric -oligosiderite -oligosite -oligospermia -oligospermous -oligostemonous -oligosyllabic -oligosyllable -oligosynthetic -oligotokous -oligotrichia -oligotrophic -oligotrophy -oligotropic -oliguresis -oliguretic -oliguria -Olinia -Oliniaceae -oliniaceous -olio -oliphant -oliprance -olitory -Oliva -oliva -olivaceous -olivary -Olive -olive -Olivean -olived -Olivella -oliveness -olivenite -Oliver -Oliverian -oliverman -oliversmith -olivescent -olivet -Olivetan -Olivette -olivewood -Olivia -Olividae -Olivier -oliviferous -oliviform -olivil -olivile -olivilin -olivine -olivinefels -olivinic -olivinite -olivinitic -olla -ollamh -ollapod -ollenite -Ollie -ollock -olm -Olneya -Olof -ological -ologist -ologistic -ology -olomao -olona -Olonets -Olonetsian -Olonetsish -Olor -oloroso -olpe -Olpidiaster -Olpidium -Olson -oltonde -oltunna -olycook -olykoek -Olympia -Olympiad -Olympiadic -Olympian -Olympianism -Olympianize -Olympianly -Olympianwise -Olympic -Olympicly -Olympicness -Olympieion -Olympionic -Olympus -Olynthiac -Olynthian -Olynthus -om -omadhaun -omagra -Omagua -Omaha -omalgia -Oman -Omani -omao -Omar -omarthritis -omasitis -omasum -omber -ombrette -ombrifuge -ombrograph -ombrological -ombrology -ombrometer -ombrophile -ombrophilic -ombrophilous -ombrophily -ombrophobe -ombrophobous -ombrophoby -ombrophyte -ombudsman -ombudsmanship -omega -omegoid -omelet -omelette -omen -omened -omenology -omental -omentectomy -omentitis -omentocele -omentofixation -omentopexy -omentoplasty -omentorrhaphy -omentosplenopexy -omentotomy -omentulum -omentum -omer -omicron -omina -ominous -ominously -ominousness -omissible -omission -omissive -omissively -omit -omitis -omittable -omitter -omlah -Ommastrephes -Ommastrephidae -ommateal -ommateum -ommatidial -ommatidium -ommatophore -ommatophorous -Ommiad -Ommiades -omneity -omniactive -omniactuality -omniana -omniarch -omnibenevolence -omnibenevolent -omnibus -omnibusman -omnicausality -omnicompetence -omnicompetent -omnicorporeal -omnicredulity -omnicredulous -omnidenominational -omnierudite -omniessence -omnifacial -omnifarious -omnifariously -omnifariousness -omniferous -omnific -omnificent -omnifidel -omniform -omniformal -omniformity -omnify -omnigenous -omnigerent -omnigraph -omnihuman -omnihumanity -omnilegent -omnilingual -omniloquent -omnilucent -omnimental -omnimeter -omnimode -omnimodous -omninescience -omninescient -omniparent -omniparient -omniparity -omniparous -omnipatient -omnipercipience -omnipercipiency -omnipercipient -omniperfect -omnipotence -omnipotency -omnipotent -omnipotentiality -omnipotently -omnipregnant -omnipresence -omnipresent -omnipresently -omniprevalence -omniprevalent -omniproduction -omniprudent -omnirange -omniregency -omnirepresentative -omnirepresentativeness -omnirevealing -omniscience -omnisciency -omniscient -omnisciently -omniscope -omniscribent -omniscriptive -omnisentience -omnisentient -omnisignificance -omnisignificant -omnispective -omnist -omnisufficiency -omnisufficient -omnitemporal -omnitenent -omnitolerant -omnitonal -omnitonality -omnitonic -omnitude -omnium -omnivagant -omnivalence -omnivalent -omnivalous -omnivarious -omnividence -omnivident -omnivision -omnivolent -Omnivora -omnivoracious -omnivoracity -omnivorant -omnivore -omnivorous -omnivorously -omnivorousness -omodynia -omohyoid -omoideum -omophagia -omophagist -omophagous -omophagy -omophorion -omoplate -omoplatoscopy -omostegite -omosternal -omosternum -omphacine -omphacite -omphalectomy -omphalic -omphalism -omphalitis -omphalocele -omphalode -omphalodium -omphalogenous -omphaloid -omphaloma -omphalomesaraic -omphalomesenteric -omphaloncus -omphalopagus -omphalophlebitis -omphalopsychic -omphalopsychite -omphalorrhagia -omphalorrhea -omphalorrhexis -omphalos -omphalosite -omphaloskepsis -omphalospinous -omphalotomy -omphalotripsy -omphalus -on -Ona -ona -onager -Onagra -onagra -Onagraceae -onagraceous -Onan -onanism -onanist -onanistic -onca -once -oncetta -Onchidiidae -Onchidium -Onchocerca -onchocerciasis -onchocercosis -oncia -Oncidium -oncin -oncograph -oncography -oncologic -oncological -oncology -oncome -oncometer -oncometric -oncometry -oncoming -Oncorhynchus -oncosimeter -oncosis -oncosphere -oncost -oncostman -oncotomy -ondagram -ondagraph -ondameter -ondascope -ondatra -ondine -ondogram -ondograph -ondometer -ondoscope -ondy -one -oneanother -oneberry -onefold -onefoldness -onegite -onehearted -onehow -Oneida -oneiric -oneirocrit -oneirocritic -oneirocritical -oneirocritically -oneirocriticism -oneirocritics -oneirodynia -oneirologist -oneirology -oneiromancer -oneiromancy -oneiroscopic -oneiroscopist -oneiroscopy -oneirotic -oneism -onement -oneness -oner -onerary -onerative -onerosity -onerous -onerously -onerousness -onery -oneself -onesigned -onetime -onewhere -oneyer -onfall -onflemed -onflow -onflowing -ongaro -ongoing -onhanger -onicolo -oniomania -oniomaniac -onion -onionet -onionized -onionlike -onionpeel -onionskin -oniony -onirotic -Oniscidae -onisciform -oniscoid -Oniscoidea -oniscoidean -Oniscus -onium -onkilonite -onkos -onlay -onlepy -onliest -onliness -onlook -onlooker -onlooking -only -onmarch -Onmun -Onobrychis -onocentaur -Onoclea -onofrite -Onohippidium -onolatry -onomancy -onomantia -onomastic -onomasticon -onomatologist -onomatology -onomatomania -onomatope -onomatoplasm -onomatopoeia -onomatopoeial -onomatopoeian -onomatopoeic -onomatopoeical -onomatopoeically -onomatopoesis -onomatopoesy -onomatopoetic -onomatopoetically -onomatopy -onomatous -onomomancy -Onondaga -Onondagan -Ononis -Onopordon -Onosmodium -onrush -onrushing -ons -onset -onsetter -onshore -onside -onsight -onslaught -onstand -onstanding -onstead -onsweep -onsweeping -ontal -Ontarian -Ontaric -onto -ontocycle -ontocyclic -ontogenal -ontogenesis -ontogenetic -ontogenetical -ontogenetically -ontogenic -ontogenically -ontogenist -ontogeny -ontography -ontologic -ontological -ontologically -ontologism -ontologist -ontologistic -ontologize -ontology -ontosophy -onus -onwaiting -onward -onwardly -onwardness -onwards -onycha -onychatrophia -onychauxis -onychia -onychin -onychitis -onychium -onychogryposis -onychoid -onycholysis -onychomalacia -onychomancy -onychomycosis -onychonosus -onychopathic -onychopathology -onychopathy -onychophagist -onychophagy -Onychophora -onychophoran -onychophorous -onychophyma -onychoptosis -onychorrhexis -onychoschizia -onychosis -onychotrophy -onym -onymal -onymancy -onymatic -onymity -onymize -onymous -onymy -onyx -onyxis -onyxitis -onza -ooangium -ooblast -ooblastic -oocyesis -oocyst -Oocystaceae -oocystaceous -oocystic -Oocystis -oocyte -oodles -ooecial -ooecium -oofbird -ooftish -oofy -oogamete -oogamous -oogamy -oogenesis -oogenetic -oogeny -ooglea -oogone -oogonial -oogoniophore -oogonium -oograph -ooid -ooidal -ookinesis -ookinete -ookinetic -oolak -oolemma -oolite -oolitic -oolly -oologic -oological -oologically -oologist -oologize -oology -oolong -oomancy -oomantia -oometer -oometric -oometry -oomycete -Oomycetes -oomycetous -oons -oont -oopak -oophoralgia -oophorauxe -oophore -oophorectomy -oophoreocele -oophorhysterectomy -oophoric -oophoridium -oophoritis -oophoroepilepsy -oophoroma -oophoromalacia -oophoromania -oophoron -oophoropexy -oophororrhaphy -oophorosalpingectomy -oophorostomy -oophorotomy -oophyte -oophytic -ooplasm -ooplasmic -ooplast -oopod -oopodal -ooporphyrin -oorali -oord -ooscope -ooscopy -oosperm -oosphere -oosporange -oosporangium -oospore -Oosporeae -oosporic -oosporiferous -oosporous -oostegite -oostegitic -ootheca -oothecal -ootid -ootocoid -Ootocoidea -ootocoidean -ootocous -ootype -ooze -oozily -ooziness -oozooid -oozy -opacate -opacification -opacifier -opacify -opacite -opacity -opacous -opacousness -opah -opal -opaled -opalesce -opalescence -opalescent -opalesque -Opalina -opaline -opalinid -Opalinidae -opalinine -opalish -opalize -opaloid -opaque -opaquely -opaqueness -Opata -opdalite -ope -Opegrapha -opeidoscope -opelet -open -openable -openband -openbeak -openbill -opencast -opener -openhanded -openhandedly -openhandedness -openhead -openhearted -openheartedly -openheartedness -opening -openly -openmouthed -openmouthedly -openmouthedness -openness -openside -openwork -opera -operability -operabily -operable -operae -operagoer -operalogue -operameter -operance -operancy -operand -operant -operatable -operate -operatee -operatic -operatical -operatically -operating -operation -operational -operationalism -operationalist -operationism -operationist -operative -operatively -operativeness -operativity -operatize -operator -operatory -operatrix -opercle -opercled -opercula -opercular -Operculata -operculate -operculated -operculiferous -operculiform -operculigenous -operculigerous -operculum -operetta -operette -operettist -operose -operosely -operoseness -operosity -Ophelia -ophelimity -Ophian -ophiasis -ophic -ophicalcite -Ophicephalidae -ophicephaloid -Ophicephalus -Ophichthyidae -ophichthyoid -ophicleide -ophicleidean -ophicleidist -Ophidia -ophidian -Ophidiidae -Ophidiobatrachia -ophidioid -Ophidion -ophidiophobia -ophidious -ophidologist -ophidology -Ophiobatrachia -Ophiobolus -Ophioglossaceae -ophioglossaceous -Ophioglossales -Ophioglossum -ophiography -ophioid -ophiolater -ophiolatrous -ophiolatry -ophiolite -ophiolitic -ophiologic -ophiological -ophiologist -ophiology -ophiomancy -ophiomorph -Ophiomorpha -ophiomorphic -ophiomorphous -Ophion -ophionid -Ophioninae -ophionine -ophiophagous -ophiophilism -ophiophilist -ophiophobe -ophiophobia -ophiophoby -ophiopluteus -Ophiosaurus -ophiostaphyle -ophiouride -Ophis -Ophisaurus -Ophism -Ophite -ophite -Ophitic -ophitic -Ophitism -Ophiuchid -Ophiuchus -ophiuran -ophiurid -Ophiurida -ophiuroid -Ophiuroidea -ophiuroidean -ophryon -Ophrys -ophthalaiater -ophthalmagra -ophthalmalgia -ophthalmalgic -ophthalmatrophia -ophthalmectomy -ophthalmencephalon -ophthalmetrical -ophthalmia -ophthalmiac -ophthalmiatrics -ophthalmic -ophthalmious -ophthalmist -ophthalmite -ophthalmitic -ophthalmitis -ophthalmoblennorrhea -ophthalmocarcinoma -ophthalmocele -ophthalmocopia -ophthalmodiagnosis -ophthalmodiastimeter -ophthalmodynamometer -ophthalmodynia -ophthalmography -ophthalmoleucoscope -ophthalmolith -ophthalmologic -ophthalmological -ophthalmologist -ophthalmology -ophthalmomalacia -ophthalmometer -ophthalmometric -ophthalmometry -ophthalmomycosis -ophthalmomyositis -ophthalmomyotomy -ophthalmoneuritis -ophthalmopathy -ophthalmophlebotomy -ophthalmophore -ophthalmophorous -ophthalmophthisis -ophthalmoplasty -ophthalmoplegia -ophthalmoplegic -ophthalmopod -ophthalmoptosis -ophthalmorrhagia -ophthalmorrhea -ophthalmorrhexis -Ophthalmosaurus -ophthalmoscope -ophthalmoscopic -ophthalmoscopical -ophthalmoscopist -ophthalmoscopy -ophthalmostasis -ophthalmostat -ophthalmostatometer -ophthalmothermometer -ophthalmotomy -ophthalmotonometer -ophthalmotonometry -ophthalmotrope -ophthalmotropometer -ophthalmy -opianic -opianyl -opiate -opiateproof -opiatic -Opiconsivia -opificer -opiism -Opilia -Opiliaceae -opiliaceous -Opiliones -Opilionina -opilionine -Opilonea -Opimian -opinability -opinable -opinably -opinant -opination -opinative -opinatively -opinator -opine -opiner -opiniaster -opiniastre -opiniastrety -opiniastrous -opiniater -opiniative -opiniatively -opiniativeness -opiniatreness -opiniatrety -opinion -opinionable -opinionaire -opinional -opinionate -opinionated -opinionatedly -opinionatedness -opinionately -opinionative -opinionatively -opinionativeness -opinioned -opinionedness -opinionist -opiomania -opiomaniac -opiophagism -opiophagy -opiparous -opisometer -opisthenar -opisthion -opisthobranch -Opisthobranchia -opisthobranchiate -Opisthocoelia -opisthocoelian -opisthocoelous -opisthocome -Opisthocomi -Opisthocomidae -opisthocomine -opisthocomous -opisthodetic -opisthodome -opisthodomos -opisthodomus -opisthodont -opisthogastric -Opisthoglossa -opisthoglossal -opisthoglossate -opisthoglyph -Opisthoglypha -opisthoglyphic -opisthoglyphous -Opisthognathidae -opisthognathism -opisthognathous -opisthograph -opisthographal -opisthographic -opisthographical -opisthography -opisthogyrate -opisthogyrous -Opisthoparia -opisthoparian -opisthophagic -opisthoporeia -opisthorchiasis -Opisthorchis -opisthosomal -Opisthothelae -opisthotic -opisthotonic -opisthotonoid -opisthotonos -opisthotonus -opium -opiumism -opobalsam -opodeldoc -opodidymus -opodymus -opopanax -Oporto -opossum -opotherapy -Oppian -oppidan -oppilate -oppilation -oppilative -opponency -opponent -opportune -opportuneless -opportunely -opportuneness -opportunism -opportunist -opportunistic -opportunistically -opportunity -opposability -opposable -oppose -opposed -opposeless -opposer -opposing -opposingly -opposit -opposite -oppositely -oppositeness -oppositiflorous -oppositifolious -opposition -oppositional -oppositionary -oppositionism -oppositionist -oppositionless -oppositious -oppositipetalous -oppositipinnate -oppositipolar -oppositisepalous -oppositive -oppositively -oppositiveness -opposure -oppress -oppressed -oppressible -oppression -oppressionist -oppressive -oppressively -oppressiveness -oppressor -opprobriate -opprobrious -opprobriously -opprobriousness -opprobrium -opprobry -oppugn -oppugnacy -oppugnance -oppugnancy -oppugnant -oppugnate -oppugnation -oppugner -opsigamy -opsimath -opsimathy -opsiometer -opsisform -opsistype -opsonic -opsoniferous -opsonification -opsonify -opsonin -opsonist -opsonium -opsonization -opsonize -opsonogen -opsonoid -opsonology -opsonometry -opsonophilia -opsonophilic -opsonophoric -opsonotherapy -opsy -opt -optable -optableness -optably -optant -optate -optation -optative -optatively -opthalmophorium -opthalmoplegy -opthalmothermometer -optic -optical -optically -optician -opticist -opticity -opticochemical -opticociliary -opticon -opticopapillary -opticopupillary -optics -optigraph -optimacy -optimal -optimate -optimates -optime -optimism -optimist -optimistic -optimistical -optimistically -optimity -optimization -optimize -optimum -option -optional -optionality -optionalize -optionally -optionary -optionee -optionor -optive -optoblast -optogram -optography -optological -optologist -optology -optomeninx -optometer -optometrical -optometrist -optometry -optophone -optotechnics -optotype -Opulaster -opulence -opulency -opulent -opulently -opulus -Opuntia -Opuntiaceae -Opuntiales -opuntioid -opus -opuscular -opuscule -opusculum -oquassa -or -ora -orabassu -orach -oracle -oracular -oracularity -oracularly -oracularness -oraculate -oraculous -oraculously -oraculousness -oraculum -orad -orage -oragious -Orakzai -oral -oraler -oralism -oralist -orality -oralization -oralize -orally -oralogist -oralogy -Orang -orang -orange -orangeade -orangebird -Orangeism -Orangeist -orangeleaf -Orangeman -orangeman -oranger -orangeroot -orangery -orangewoman -orangewood -orangey -orangism -orangist -orangite -orangize -orangutan -orant -Oraon -orarian -orarion -orarium -orary -orate -oration -orational -orationer -orator -oratorial -oratorially -Oratorian -oratorian -Oratorianism -Oratorianize -oratoric -oratorical -oratorically -oratorio -oratorize -oratorlike -oratorship -oratory -oratress -oratrix -orb -orbed -orbic -orbical -Orbicella -orbicle -orbicular -orbicularis -orbicularity -orbicularly -orbicularness -orbiculate -orbiculated -orbiculately -orbiculation -orbiculatocordate -orbiculatoelliptical -Orbiculoidea -orbific -Orbilian -Orbilius -orbit -orbital -orbitale -orbitar -orbitary -orbite -orbitelar -Orbitelariae -orbitelarian -orbitele -orbitelous -orbitofrontal -Orbitoides -Orbitolina -orbitolite -Orbitolites -orbitomalar -orbitomaxillary -orbitonasal -orbitopalpebral -orbitosphenoid -orbitosphenoidal -orbitostat -orbitotomy -orbitozygomatic -orbless -orblet -Orbulina -orby -orc -Orca -Orcadian -orcanet -orcein -orchamus -orchard -orcharding -orchardist -orchardman -orchat -orchel -orchella -orchesis -orchesography -orchester -Orchestia -orchestian -orchestic -orchestiid -Orchestiidae -orchestra -orchestral -orchestraless -orchestrally -orchestrate -orchestrater -orchestration -orchestrator -orchestre -orchestric -orchestrina -orchestrion -orchialgia -orchic -orchichorea -orchid -Orchidaceae -orchidacean -orchidaceous -Orchidales -orchidalgia -orchidectomy -orchideous -orchideously -orchidist -orchiditis -orchidocele -orchidocelioplasty -orchidologist -orchidology -orchidomania -orchidopexy -orchidoplasty -orchidoptosis -orchidorrhaphy -orchidotherapy -orchidotomy -orchiectomy -orchiencephaloma -orchiepididymitis -orchil -orchilla -orchilytic -orchiocatabasis -orchiocele -orchiodynia -orchiomyeloma -orchioncus -orchioneuralgia -orchiopexy -orchioplasty -orchiorrhaphy -orchioscheocele -orchioscirrhus -orchiotomy -Orchis -orchitic -orchitis -orchotomy -orcin -orcinol -Orcinus -ordain -ordainable -ordainer -ordainment -ordanchite -ordeal -order -orderable -ordered -orderedness -orderer -orderless -orderliness -orderly -ordinable -ordinal -ordinally -ordinance -ordinand -ordinant -ordinar -ordinarily -ordinariness -ordinarius -ordinary -ordinaryship -ordinate -ordinately -ordination -ordinative -ordinatomaculate -ordinator -ordinee -ordines -ordnance -ordonnance -ordonnant -ordosite -Ordovian -Ordovices -Ordovician -ordu -ordure -ordurous -ore -oread -Oreamnos -Oreas -orecchion -orectic -orective -oreillet -orellin -oreman -orenda -orendite -Oreocarya -Oreodon -oreodont -Oreodontidae -oreodontine -oreodontoid -Oreodoxa -Oreophasinae -oreophasine -Oreophasis -Oreortyx -oreotragine -Oreotragus -Oreotrochilus -Orestean -Oresteia -oreweed -orewood -orexis -orf -orfgild -organ -organal -organbird -organdy -organella -organelle -organer -organette -organic -organical -organically -organicalness -organicism -organicismal -organicist -organicistic -organicity -organific -organing -organism -organismal -organismic -organist -organistic -organistrum -organistship -organity -organizability -organizable -organization -organizational -organizationally -organizationist -organizatory -organize -organized -organizer -organless -organoantimony -organoarsenic -organobismuth -organoboron -organochordium -organogel -organogen -organogenesis -organogenetic -organogenic -organogenist -organogeny -organogold -organographic -organographical -organographist -organography -organoid -organoiron -organolead -organoleptic -organolithium -organologic -organological -organologist -organology -organomagnesium -organomercury -organometallic -organon -organonomic -organonomy -organonym -organonymal -organonymic -organonymy -organopathy -organophil -organophile -organophilic -organophone -organophonic -organophyly -organoplastic -organoscopy -organosilicon -organosilver -organosodium -organosol -organotherapy -organotin -organotrophic -organotropic -organotropically -organotropism -organotropy -organozinc -organry -organule -organum -organzine -orgasm -orgasmic -orgastic -orgeat -orgia -orgiac -orgiacs -orgiasm -orgiast -orgiastic -orgiastical -orgic -orgue -orguinette -orgulous -orgulously -orgy -orgyia -Orias -Oribatidae -oribi -orichalceous -orichalch -orichalcum -oriconic -oricycle -oriel -oriency -orient -Oriental -oriental -Orientalia -orientalism -orientalist -orientality -orientalization -orientalize -orientally -Orientalogy -orientate -orientation -orientative -orientator -orientite -orientization -orientize -oriently -orientness -orifacial -orifice -orificial -oriflamb -oriflamme -oriform -origan -origanized -Origanum -Origenian -Origenic -Origenical -Origenism -Origenist -Origenistic -Origenize -origin -originable -original -originalist -originality -originally -originalness -originant -originarily -originary -originate -origination -originative -originatively -originator -originatress -originist -orignal -orihon -orihyperbola -orillion -orillon -orinasal -orinasality -oriole -Oriolidae -Oriolus -Orion -Oriskanian -orismologic -orismological -orismology -orison -orisphere -oristic -Oriya -Orkhon -Orkneyan -Orlando -orle -orlean -Orleanism -Orleanist -Orleanistic -Orleans -orlet -orleways -orlewise -orlo -orlop -Ormazd -ormer -ormolu -Ormond -orna -ornament -ornamental -ornamentalism -ornamentalist -ornamentality -ornamentalize -ornamentally -ornamentary -ornamentation -ornamenter -ornamentist -ornate -ornately -ornateness -ornation -ornature -orneriness -ornery -ornis -orniscopic -orniscopist -orniscopy -ornithic -ornithichnite -ornithine -Ornithischia -ornithischian -ornithivorous -ornithobiographical -ornithobiography -ornithocephalic -Ornithocephalidae -ornithocephalous -Ornithocephalus -ornithocoprolite -ornithocopros -ornithodelph -Ornithodelphia -ornithodelphian -ornithodelphic -ornithodelphous -Ornithodoros -Ornithogaea -Ornithogaean -Ornithogalum -ornithogeographic -ornithogeographical -ornithography -ornithoid -Ornitholestes -ornitholite -ornitholitic -ornithologic -ornithological -ornithologically -ornithologist -ornithology -ornithomancy -ornithomantia -ornithomantic -ornithomantist -Ornithomimidae -Ornithomimus -ornithomorph -ornithomorphic -ornithomyzous -ornithon -Ornithopappi -ornithophile -ornithophilist -ornithophilite -ornithophilous -ornithophily -ornithopod -Ornithopoda -ornithopter -Ornithoptera -Ornithopteris -Ornithorhynchidae -ornithorhynchous -Ornithorhynchus -ornithosaur -Ornithosauria -ornithosaurian -Ornithoscelida -ornithoscelidan -ornithoscopic -ornithoscopist -ornithoscopy -ornithosis -ornithotomical -ornithotomist -ornithotomy -ornithotrophy -Ornithurae -ornithuric -ornithurous -ornoite -oroanal -Orobanchaceae -orobanchaceous -Orobanche -orobancheous -orobathymetric -Orobatoidea -Orochon -orocratic -orodiagnosis -orogen -orogenesis -orogenesy -orogenetic -orogenic -orogeny -orograph -orographic -orographical -orographically -orography -oroheliograph -Orohippus -orohydrographic -orohydrographical -orohydrography -oroide -orolingual -orological -orologist -orology -orometer -orometric -orometry -Oromo -oronasal -oronoco -Orontium -oropharyngeal -oropharynx -orotherapy -Orotinan -orotund -orotundity -orphan -orphancy -orphandom -orphange -orphanhood -orphanism -orphanize -orphanry -orphanship -orpharion -Orphean -Orpheist -orpheon -orpheonist -orpheum -Orpheus -Orphic -Orphical -Orphically -Orphicism -Orphism -Orphize -orphrey -orphreyed -orpiment -orpine -Orpington -orrery -orrhoid -orrhology -orrhotherapy -orris -orrisroot -orseille -orseilline -orsel -orselle -orseller -orsellic -orsellinate -orsellinic -Orson -ort -ortalid -Ortalidae -ortalidian -Ortalis -ortet -Orthagoriscus -orthal -orthantimonic -Ortheris -orthian -orthic -orthicon -orthid -Orthidae -Orthis -orthite -orthitic -ortho -orthoarsenite -orthoaxis -orthobenzoquinone -orthobiosis -orthoborate -orthobrachycephalic -orthocarbonic -orthocarpous -Orthocarpus -orthocenter -orthocentric -orthocephalic -orthocephalous -orthocephaly -orthoceracone -Orthoceran -Orthoceras -Orthoceratidae -orthoceratite -orthoceratitic -orthoceratoid -orthochlorite -orthochromatic -orthochromatize -orthoclase -orthoclasite -orthoclastic -orthocoumaric -orthocresol -orthocymene -orthodiaene -orthodiagonal -orthodiagram -orthodiagraph -orthodiagraphic -orthodiagraphy -orthodiazin -orthodiazine -orthodolichocephalic -orthodomatic -orthodome -orthodontia -orthodontic -orthodontics -orthodontist -orthodox -orthodoxal -orthodoxality -orthodoxally -orthodoxian -orthodoxical -orthodoxically -orthodoxism -orthodoxist -orthodoxly -orthodoxness -orthodoxy -orthodromic -orthodromics -orthodromy -orthoepic -orthoepical -orthoepically -orthoepist -orthoepistic -orthoepy -orthoformic -orthogamous -orthogamy -orthogenesis -orthogenetic -orthogenic -orthognathic -orthognathism -orthognathous -orthognathus -orthognathy -orthogneiss -orthogonal -orthogonality -orthogonally -orthogonial -orthograde -orthogranite -orthograph -orthographer -orthographic -orthographical -orthographically -orthographist -orthographize -orthography -orthohydrogen -orthologer -orthologian -orthological -orthology -orthometopic -orthometric -orthometry -Orthonectida -orthonitroaniline -orthopath -orthopathic -orthopathically -orthopathy -orthopedia -orthopedic -orthopedical -orthopedically -orthopedics -orthopedist -orthopedy -orthophenylene -orthophonic -orthophony -orthophoria -orthophoric -orthophosphate -orthophosphoric -orthophyre -orthophyric -orthopinacoid -orthopinacoidal -orthoplastic -orthoplasy -orthoplumbate -orthopnea -orthopneic -orthopod -Orthopoda -orthopraxis -orthopraxy -orthoprism -orthopsychiatric -orthopsychiatrical -orthopsychiatrist -orthopsychiatry -orthopter -Orthoptera -orthopteral -orthopteran -orthopterist -orthopteroid -Orthopteroidea -orthopterological -orthopterologist -orthopterology -orthopteron -orthopterous -orthoptic -orthopyramid -orthopyroxene -orthoquinone -orthorhombic -Orthorrhapha -orthorrhaphous -orthorrhaphy -orthoscope -orthoscopic -orthose -orthosemidin -orthosemidine -orthosilicate -orthosilicic -orthosis -orthosite -orthosomatic -orthospermous -orthostatic -orthostichous -orthostichy -orthostyle -orthosubstituted -orthosymmetric -orthosymmetrical -orthosymmetrically -orthosymmetry -orthotactic -orthotectic -orthotic -orthotolidin -orthotolidine -orthotoluic -orthotoluidin -orthotoluidine -orthotomic -orthotomous -orthotone -orthotonesis -orthotonic -orthotonus -orthotropal -orthotropic -orthotropism -orthotropous -orthotropy -orthotype -orthotypous -orthovanadate -orthovanadic -orthoveratraldehyde -orthoveratric -orthoxazin -orthoxazine -orthoxylene -orthron -ortiga -ortive -Ortol -ortolan -Ortrud -ortstein -ortygan -Ortygian -Ortyginae -ortygine -Ortyx -Orunchun -orvietan -orvietite -Orvieto -Orville -ory -Orycteropodidae -Orycteropus -oryctics -oryctognostic -oryctognostical -oryctognostically -oryctognosy -Oryctolagus -oryssid -Oryssidae -Oryssus -Oryx -Oryza -oryzenin -oryzivorous -Oryzomys -Oryzopsis -Oryzorictes -Oryzorictinae -Os -os -Osage -osamin -osamine -osazone -Osc -Oscan -Oscar -Oscarella -Oscarellidae -oscella -oscheal -oscheitis -oscheocarcinoma -oscheocele -oscheolith -oscheoma -oscheoncus -oscheoplasty -Oschophoria -oscillance -oscillancy -oscillant -Oscillaria -Oscillariaceae -oscillariaceous -oscillate -oscillating -oscillation -oscillative -oscillatively -oscillator -Oscillatoria -Oscillatoriaceae -oscillatoriaceous -oscillatorian -oscillatory -oscillogram -oscillograph -oscillographic -oscillography -oscillometer -oscillometric -oscillometry -oscilloscope -oscin -oscine -Oscines -oscinian -Oscinidae -oscinine -Oscinis -oscitance -oscitancy -oscitant -oscitantly -oscitate -oscitation -oscnode -osculable -osculant -oscular -oscularity -osculate -osculation -osculatory -osculatrix -oscule -osculiferous -osculum -oscurrantist -ose -osela -oshac -Osiandrian -oside -osier -osiered -osierlike -osiery -Osirian -Osiride -Osiridean -Osirification -Osirify -Osiris -Osirism -Oskar -Osmanie -Osmanli -Osmanthus -osmate -osmatic -osmatism -osmazomatic -osmazomatous -osmazome -Osmeridae -Osmerus -osmesis -osmeterium -osmetic -osmic -osmidrosis -osmin -osmina -osmious -osmiridium -osmium -osmodysphoria -osmogene -osmograph -osmolagnia -osmology -osmometer -osmometric -osmometry -Osmond -osmondite -osmophore -osmoregulation -Osmorhiza -osmoscope -osmose -osmosis -osmotactic -osmotaxis -osmotherapy -osmotic -osmotically -osmous -osmund -Osmunda -Osmundaceae -osmundaceous -osmundine -Osnaburg -Osnappar -osoberry -osone -osophy -osotriazine -osotriazole -osphradial -osphradium -osphresiolagnia -osphresiologic -osphresiologist -osphresiology -osphresiometer -osphresiometry -osphresiophilia -osphresis -osphretic -Osphromenidae -osphyalgia -osphyalgic -osphyarthritis -osphyitis -osphyocele -osphyomelitis -osprey -ossal -ossarium -ossature -osse -ossein -osselet -ossements -osseoalbuminoid -osseoaponeurotic -osseocartilaginous -osseofibrous -osseomucoid -osseous -osseously -Osset -Ossetian -Ossetic -Ossetine -Ossetish -Ossian -Ossianesque -Ossianic -Ossianism -Ossianize -ossicle -ossicular -ossiculate -ossicule -ossiculectomy -ossiculotomy -ossiculum -ossiferous -ossific -ossification -ossified -ossifier -ossifluence -ossifluent -ossiform -ossifrage -ossifrangent -ossify -ossivorous -ossuarium -ossuary -ossypite -ostalgia -Ostara -ostariophysan -Ostariophyseae -Ostariophysi -ostariophysial -ostariophysous -ostarthritis -osteal -ostealgia -osteanabrosis -osteanagenesis -ostearthritis -ostearthrotomy -ostectomy -osteectomy -osteectopia -osteectopy -Osteichthyes -ostein -osteitic -osteitis -ostemia -ostempyesis -ostensibility -ostensible -ostensibly -ostension -ostensive -ostensively -ostensorium -ostensory -ostent -ostentate -ostentation -ostentatious -ostentatiously -ostentatiousness -ostentive -ostentous -osteoaneurysm -osteoarthritis -osteoarthropathy -osteoarthrotomy -osteoblast -osteoblastic -osteoblastoma -osteocachetic -osteocarcinoma -osteocartilaginous -osteocele -osteocephaloma -osteochondritis -osteochondrofibroma -osteochondroma -osteochondromatous -osteochondropathy -osteochondrophyte -osteochondrosarcoma -osteochondrous -osteoclasia -osteoclasis -osteoclast -osteoclastic -osteoclasty -osteocolla -osteocomma -osteocranium -osteocystoma -osteodentin -osteodentinal -osteodentine -osteoderm -osteodermal -osteodermatous -osteodermia -osteodermis -osteodiastasis -osteodynia -osteodystrophy -osteoencephaloma -osteoenchondroma -osteoepiphysis -osteofibroma -osteofibrous -osteogangrene -osteogen -osteogenesis -osteogenetic -osteogenic -osteogenist -osteogenous -osteogeny -osteoglossid -Osteoglossidae -osteoglossoid -Osteoglossum -osteographer -osteography -osteohalisteresis -osteoid -Osteolepidae -Osteolepis -osteolite -osteologer -osteologic -osteological -osteologically -osteologist -osteology -osteolysis -osteolytic -osteoma -osteomalacia -osteomalacial -osteomalacic -osteomancy -osteomanty -osteomatoid -osteomere -osteometric -osteometrical -osteometry -osteomyelitis -osteoncus -osteonecrosis -osteoneuralgia -osteopaedion -osteopath -osteopathic -osteopathically -osteopathist -osteopathy -osteopedion -osteoperiosteal -osteoperiostitis -osteopetrosis -osteophage -osteophagia -osteophlebitis -osteophone -osteophony -osteophore -osteophyma -osteophyte -osteophytic -osteoplaque -osteoplast -osteoplastic -osteoplasty -osteoporosis -osteoporotic -osteorrhaphy -osteosarcoma -osteosarcomatous -osteosclerosis -osteoscope -osteosis -osteosteatoma -osteostixis -osteostomatous -osteostomous -osteostracan -Osteostraci -osteosuture -osteosynovitis -osteosynthesis -osteothrombosis -osteotome -osteotomist -osteotomy -osteotribe -osteotrite -osteotrophic -osteotrophy -Ostertagia -ostial -ostiary -ostiate -Ostic -ostiolar -ostiolate -ostiole -ostitis -ostium -ostleress -Ostmannic -ostmark -Ostmen -ostosis -Ostracea -ostracean -ostraceous -Ostraciidae -ostracine -ostracioid -Ostracion -ostracism -ostracizable -ostracization -ostracize -ostracizer -ostracod -Ostracoda -ostracode -ostracoderm -Ostracodermi -ostracodous -ostracoid -Ostracoidea -ostracon -ostracophore -Ostracophori -ostracophorous -ostracum -Ostraeacea -ostraite -Ostrea -ostreaceous -ostreger -ostreicultural -ostreiculture -ostreiculturist -Ostreidae -ostreiform -ostreodynamometer -ostreoid -ostreophage -ostreophagist -ostreophagous -ostrich -ostrichlike -Ostrogoth -Ostrogothian -Ostrogothic -Ostrya -Ostyak -Oswald -Oswegan -otacoustic -otacousticon -Otaheitan -otalgia -otalgic -otalgy -Otaria -otarian -Otariidae -Otariinae -otariine -otarine -otarioid -otary -otate -otectomy -otelcosis -Otello -Othake -othelcosis -Othello -othematoma -othemorrhea -otheoscope -other -otherdom -otherest -othergates -otherguess -otherhow -otherism -otherist -otherness -othersome -othertime -otherwards -otherwhence -otherwhere -otherwhereness -otherwheres -otherwhile -otherwhiles -otherwhither -otherwise -otherwiseness -otherworld -otherworldliness -otherworldly -otherworldness -Othin -Othinism -othmany -Othonna -othygroma -otiant -otiatric -otiatrics -otiatry -otic -oticodinia -Otidae -Otides -Otididae -otidiform -otidine -Otidiphaps -otidium -otiorhynchid -Otiorhynchidae -Otiorhynchinae -otiose -otiosely -otioseness -otiosity -Otis -otitic -otitis -otkon -Oto -otoantritis -otoblennorrhea -otocariasis -otocephalic -otocephaly -otocerebritis -otocleisis -otoconial -otoconite -otoconium -otocrane -otocranial -otocranic -otocranium -Otocyon -otocyst -otocystic -otodynia -otodynic -otoencephalitis -otogenic -otogenous -otographical -otography -Otogyps -otohemineurasthenia -otolaryngologic -otolaryngologist -otolaryngology -otolite -otolith -Otolithidae -Otolithus -otolitic -otological -otologist -otology -Otomaco -otomassage -Otomi -Otomian -Otomitlan -otomucormycosis -otomyces -otomycosis -otonecrectomy -otoneuralgia -otoneurasthenia -otopathic -otopathy -otopharyngeal -otophone -otopiesis -otoplastic -otoplasty -otopolypus -otopyorrhea -otopyosis -otorhinolaryngologic -otorhinolaryngologist -otorhinolaryngology -otorrhagia -otorrhea -otorrhoea -otosalpinx -otosclerosis -otoscope -otoscopic -otoscopy -otosis -otosphenal -otosteal -otosteon -ototomy -Otozoum -ottajanite -ottar -ottavarima -Ottawa -otter -otterer -otterhound -ottinger -ottingkar -Otto -otto -Ottoman -Ottomanean -Ottomanic -Ottomanism -Ottomanization -Ottomanize -Ottomanlike -Ottomite -ottrelife -Ottweilian -Otuquian -oturia -Otus -Otyak -ouabain -ouabaio -ouabe -ouachitite -ouakari -ouananiche -oubliette -ouch -Oudemian -oudenarde -Oudenodon -oudenodont -ouenite -ouf -ough -ought -oughtness -oughtnt -Ouija -ouistiti -oukia -oulap -ounce -ounds -ouphe -ouphish -our -Ouranos -ourie -ouroub -Ourouparia -ours -ourself -ourselves -oust -ouster -out -outact -outadmiral -Outagami -outage -outambush -outarde -outargue -outask -outawe -outbabble -outback -outbacker -outbake -outbalance -outban -outbanter -outbar -outbargain -outbark -outbawl -outbeam -outbear -outbearing -outbeg -outbeggar -outbelch -outbellow -outbent -outbetter -outbid -outbidder -outbirth -outblacken -outblaze -outbleat -outbleed -outbless -outbloom -outblossom -outblot -outblow -outblowing -outblown -outbluff -outblunder -outblush -outbluster -outboard -outboast -outbolting -outbond -outbook -outborn -outborough -outbound -outboundaries -outbounds -outbow -outbowed -outbowl -outbox -outbrag -outbranch -outbranching -outbrave -outbray -outbrazen -outbreak -outbreaker -outbreaking -outbreath -outbreathe -outbreather -outbred -outbreed -outbreeding -outbribe -outbridge -outbring -outbrother -outbud -outbuild -outbuilding -outbulge -outbulk -outbully -outburn -outburst -outbustle -outbuy -outbuzz -outby -outcant -outcaper -outcarol -outcarry -outcase -outcast -outcaste -outcasting -outcastness -outcavil -outchamber -outcharm -outchase -outchatter -outcheat -outchide -outcity -outclamor -outclass -outclerk -outclimb -outcome -outcomer -outcoming -outcompass -outcomplete -outcompliment -outcorner -outcountry -outcourt -outcrawl -outcricket -outcrier -outcrop -outcropper -outcross -outcrossing -outcrow -outcrowd -outcry -outcull -outcure -outcurse -outcurve -outcut -outdaciousness -outdance -outdare -outdate -outdated -outdazzle -outdevil -outdispatch -outdistance -outdistrict -outdo -outdodge -outdoer -outdoor -outdoorness -outdoors -outdoorsman -outdraft -outdragon -outdraw -outdream -outdress -outdrink -outdrive -outdure -outdwell -outdweller -outdwelling -outeat -outecho -outed -outedge -outen -outer -outerly -outermost -outerness -outerwear -outeye -outeyed -outfable -outface -outfall -outfame -outfangthief -outfast -outfawn -outfeast -outfeat -outfeeding -outfence -outferret -outfiction -outfield -outfielder -outfieldsman -outfight -outfighter -outfighting -outfigure -outfish -outfit -outfitter -outflame -outflank -outflanker -outflanking -outflare -outflash -outflatter -outfling -outfloat -outflourish -outflow -outflue -outflung -outflunky -outflush -outflux -outfly -outfold -outfool -outfoot -outform -outfort -outfreeman -outfront -outfroth -outfrown -outgabble -outgain -outgallop -outgamble -outgame -outgang -outgarment -outgarth -outgas -outgate -outgauge -outgaze -outgeneral -outgive -outgiving -outglad -outglare -outgleam -outglitter -outgloom -outglow -outgnaw -outgo -outgoer -outgoing -outgoingness -outgone -outgreen -outgrin -outground -outgrow -outgrowing -outgrowth -outguard -outguess -outgun -outgush -outhammer -outhasten -outhaul -outhauler -outhear -outheart -outhector -outheel -outher -outhire -outhiss -outhit -outhold -outhorror -outhouse -outhousing -outhowl -outhue -outhumor -outhunt -outhurl -outhut -outhymn -outhyperbolize -outimage -outing -outinvent -outish -outissue -outjazz -outjest -outjet -outjetting -outjinx -outjockey -outjourney -outjuggle -outjump -outjut -outkeeper -outkick -outkill -outking -outkiss -outkitchen -outknave -outknee -outlabor -outlaid -outlance -outland -outlander -outlandish -outlandishlike -outlandishly -outlandishness -outlash -outlast -outlaugh -outlaunch -outlaw -outlawry -outlay -outlean -outleap -outlearn -outlegend -outlength -outlengthen -outler -outlet -outlie -outlier -outlighten -outlimb -outlimn -outline -outlinear -outlined -outlineless -outliner -outlinger -outlip -outlipped -outlive -outliver -outlodging -outlook -outlooker -outlord -outlove -outlung -outluster -outly -outlying -outmagic -outmalaprop -outman -outmaneuver -outmantle -outmarch -outmarriage -outmarry -outmaster -outmatch -outmate -outmeasure -outmerchant -outmiracle -outmode -outmoded -outmost -outmount -outmouth -outmove -outname -outness -outnight -outnoise -outnook -outnumber -outoffice -outoven -outpace -outpage -outpaint -outparagon -outparamour -outparish -outpart -outpass -outpassion -outpath -outpatient -outpay -outpayment -outpeal -outpeep -outpeer -outpension -outpensioner -outpeople -outperform -outpick -outpicket -outpipe -outpitch -outpity -outplace -outplan -outplay -outplayed -outplease -outplod -outplot -outpocketing -outpoint -outpoise -outpoison -outpoll -outpomp -outpop -outpopulate -outporch -outport -outporter -outportion -outpost -outpouching -outpour -outpourer -outpouring -outpractice -outpraise -outpray -outpreach -outpreen -outprice -outprodigy -outproduce -outpromise -outpry -outpull -outpupil -outpurl -outpurse -outpush -output -outputter -outquaff -outquarters -outqueen -outquestion -outquibble -outquote -outrace -outrage -outrageous -outrageously -outrageousness -outrageproof -outrager -outraging -outrail -outrance -outrange -outrank -outrant -outrap -outrate -outraught -outrave -outray -outre -outreach -outread -outreason -outreckon -outredden -outrede -outreign -outrelief -outremer -outreness -outrhyme -outrick -outride -outrider -outriding -outrig -outrigger -outriggered -outriggerless -outrigging -outright -outrightly -outrightness -outring -outrival -outroar -outrogue -outroll -outromance -outrooper -outroot -outrove -outrow -outroyal -outrun -outrunner -outrush -outsail -outsaint -outsally -outsatisfy -outsavor -outsay -outscent -outscold -outscore -outscorn -outscour -outscouring -outscream -outsea -outseam -outsearch -outsee -outseek -outsell -outsentry -outsert -outservant -outset -outsetting -outsettlement -outsettler -outshadow -outshake -outshame -outshape -outsharp -outsharpen -outsheathe -outshift -outshine -outshiner -outshoot -outshot -outshoulder -outshout -outshove -outshow -outshower -outshriek -outshrill -outshut -outside -outsided -outsidedness -outsideness -outsider -outsift -outsigh -outsight -outsin -outsing -outsit -outsize -outsized -outskill -outskip -outskirmish -outskirmisher -outskirt -outskirter -outslander -outslang -outsleep -outslide -outslink -outsmart -outsmell -outsmile -outsnatch -outsnore -outsoar -outsole -outsoler -outsonnet -outsophisticate -outsound -outspan -outsparkle -outspeak -outspeaker -outspeech -outspeed -outspell -outspend -outspent -outspill -outspin -outspirit -outspit -outsplendor -outspoken -outspokenly -outspokenness -outsport -outspout -outspread -outspring -outsprint -outspue -outspurn -outspurt -outstagger -outstair -outstand -outstander -outstanding -outstandingly -outstandingness -outstare -outstart -outstarter -outstartle -outstate -outstation -outstatistic -outstature -outstay -outsteal -outsteam -outstep -outsting -outstink -outstood -outstorm -outstrain -outstream -outstreet -outstretch -outstretcher -outstride -outstrike -outstrip -outstrive -outstroke -outstrut -outstudent -outstudy -outstunt -outsubtle -outsuck -outsucken -outsuffer -outsuitor -outsulk -outsum -outsuperstition -outswagger -outswarm -outswear -outsweep -outsweeping -outsweeten -outswell -outswift -outswim -outswindle -outswing -outswirl -outtaken -outtalent -outtalk -outtask -outtaste -outtear -outtease -outtell -outthieve -outthink -outthreaten -outthrob -outthrough -outthrow -outthrust -outthruster -outthunder -outthwack -outtinkle -outtire -outtoil -outtongue -outtop -outtower -outtrade -outtrail -outtravel -outtrick -outtrot -outtrump -outturn -outturned -outtyrannize -outusure -outvalue -outvanish -outvaunt -outvelvet -outvenom -outvictor -outvie -outvier -outvigil -outvillage -outvillain -outvociferate -outvoice -outvote -outvoter -outvoyage -outwait -outwake -outwale -outwalk -outwall -outwallop -outwander -outwar -outwarble -outward -outwardly -outwardmost -outwardness -outwards -outwash -outwaste -outwatch -outwater -outwave -outwealth -outweapon -outwear -outweary -outweave -outweed -outweep -outweigh -outweight -outwell -outwent -outwhirl -outwick -outwile -outwill -outwind -outwindow -outwing -outwish -outwit -outwith -outwittal -outwitter -outwoe -outwoman -outwood -outword -outwore -outwork -outworker -outworld -outworn -outworth -outwrangle -outwrench -outwrest -outwrestle -outwriggle -outwring -outwrite -outwrought -outyard -outyell -outyelp -outyield -outzany -ouzel -Ova -ova -Ovaherero -oval -ovalbumin -ovalescent -ovaliform -ovalish -ovalization -ovalize -ovally -ovalness -ovaloid -ovalwise -Ovambo -Ovampo -Ovangangela -ovant -ovarial -ovarian -ovarin -ovarioabdominal -ovariocele -ovariocentesis -ovariocyesis -ovariodysneuria -ovariohysterectomy -ovariole -ovariolumbar -ovariorrhexis -ovariosalpingectomy -ovariosteresis -ovariostomy -ovariotomist -ovariotomize -ovariotomy -ovariotubal -ovarious -ovaritis -ovarium -ovary -ovate -ovateconical -ovated -ovately -ovation -ovational -ovationary -ovatoacuminate -ovatoconical -ovatocordate -ovatocylindraceous -ovatodeltoid -ovatoellipsoidal -ovatoglobose -ovatolanceolate -ovatooblong -ovatoorbicular -ovatopyriform -ovatoquadrangular -ovatorotundate -ovatoserrate -ovatotriangular -oven -ovenbird -ovenful -ovenlike -ovenly -ovenman -ovenpeel -ovenstone -ovenware -ovenwise -over -overability -overable -overabound -overabsorb -overabstain -overabstemious -overabstemiousness -overabundance -overabundant -overabundantly -overabuse -overaccentuate -overaccumulate -overaccumulation -overaccuracy -overaccurate -overaccurately -overact -overaction -overactive -overactiveness -overactivity -overacute -overaddiction -overadvance -overadvice -overaffect -overaffirmation -overafflict -overaffliction -overage -overageness -overaggravate -overaggravation -overagitate -overagonize -overall -overalled -overalls -overambitioned -overambitious -overambling -overanalyze -overangelic -overannotate -overanswer -overanxiety -overanxious -overanxiously -overappareled -overappraisal -overappraise -overapprehended -overapprehension -overapprehensive -overapt -overarch -overargue -overarm -overartificial -overartificiality -overassail -overassert -overassertion -overassertive -overassertively -overassertiveness -overassess -overassessment -overassumption -overattached -overattachment -overattention -overattentive -overattentively -overawe -overawful -overawn -overawning -overbake -overbalance -overballast -overbalm -overbanded -overbandy -overbank -overbanked -overbark -overbarren -overbarrenness -overbase -overbaseness -overbashful -overbashfully -overbashfulness -overbattle -overbear -overbearance -overbearer -overbearing -overbearingly -overbearingness -overbeat -overbeating -overbeetling -overbelief -overbend -overbepatched -overberg -overbet -overbias -overbid -overbig -overbigness -overbillow -overbit -overbite -overbitten -overbitter -overbitterly -overbitterness -overblack -overblame -overblaze -overbleach -overblessed -overblessedness -overblind -overblindly -overblithe -overbloom -overblouse -overblow -overblowing -overblown -overboard -overboast -overboastful -overbodice -overboding -overbody -overboil -overbold -overboldly -overboldness -overbook -overbookish -overbooming -overborne -overborrow -overbought -overbound -overbounteous -overbounteously -overbounteousness -overbow -overbowed -overbowl -overbrace -overbragging -overbrained -overbranch -overbrave -overbravely -overbravery -overbray -overbreak -overbreathe -overbred -overbreed -overbribe -overbridge -overbright -overbrightly -overbrightness -overbrilliancy -overbrilliant -overbrilliantly -overbrim -overbrimmingly -overbroaden -overbroil -overbrood -overbrow -overbrown -overbrowse -overbrush -overbrutal -overbrutality -overbrutalize -overbrutally -overbubbling -overbuild -overbuilt -overbulk -overbulky -overbumptious -overburden -overburdeningly -overburdensome -overburn -overburned -overburningly -overburnt -overburst -overburthen -overbusily -overbusiness -overbusy -overbuy -overby -overcall -overcanny -overcanopy -overcap -overcapable -overcapably -overcapacity -overcape -overcapitalization -overcapitalize -overcaptious -overcaptiously -overcaptiousness -overcard -overcare -overcareful -overcarefully -overcareless -overcarelessly -overcarelessness -overcaring -overcarking -overcarry -overcast -overcasting -overcasual -overcasually -overcatch -overcaution -overcautious -overcautiously -overcautiousness -overcentralization -overcentralize -overcertification -overcertify -overchafe -overchannel -overchant -overcharge -overchargement -overcharger -overcharitable -overcharitably -overcharity -overchase -overcheap -overcheaply -overcheapness -overcheck -overcherish -overchidden -overchief -overchildish -overchildishness -overchill -overchlorinate -overchoke -overchrome -overchurch -overcirculate -overcircumspect -overcircumspection -overcivil -overcivility -overcivilization -overcivilize -overclaim -overclamor -overclasp -overclean -overcleanly -overcleanness -overcleave -overclever -overcleverness -overclimb -overcloak -overclog -overclose -overclosely -overcloseness -overclothe -overclothes -overcloud -overcloy -overcluster -overcoached -overcoat -overcoated -overcoating -overcoil -overcold -overcoldly -overcollar -overcolor -overcomable -overcome -overcomer -overcomingly -overcommand -overcommend -overcommon -overcommonly -overcommonness -overcompensate -overcompensation -overcompensatory -overcompetition -overcompetitive -overcomplacency -overcomplacent -overcomplacently -overcomplete -overcomplex -overcomplexity -overcompliant -overcompound -overconcentrate -overconcentration -overconcern -overconcerned -overcondensation -overcondense -overconfidence -overconfident -overconfidently -overconfute -overconquer -overconscientious -overconscious -overconsciously -overconsciousness -overconservatism -overconservative -overconservatively -overconsiderate -overconsiderately -overconsideration -overconsume -overconsumption -overcontented -overcontentedly -overcontentment -overcontract -overcontraction -overcontribute -overcontribution -overcook -overcool -overcoolly -overcopious -overcopiously -overcopiousness -overcorned -overcorrect -overcorrection -overcorrupt -overcorruption -overcorruptly -overcostly -overcount -overcourteous -overcourtesy -overcover -overcovetous -overcovetousness -overcow -overcoy -overcoyness -overcram -overcredit -overcredulity -overcredulous -overcredulously -overcreed -overcreep -overcritical -overcritically -overcriticalness -overcriticism -overcriticize -overcrop -overcross -overcrow -overcrowd -overcrowded -overcrowdedly -overcrowdedness -overcrown -overcrust -overcry -overcull -overcultivate -overcultivation -overculture -overcultured -overcumber -overcunning -overcunningly -overcunningness -overcup -overcured -overcurious -overcuriously -overcuriousness -overcurl -overcurrency -overcurrent -overcurtain -overcustom -overcut -overcutter -overcutting -overdaintily -overdaintiness -overdainty -overdamn -overdance -overdangle -overdare -overdaringly -overdarken -overdash -overdazed -overdazzle -overdeal -overdear -overdearly -overdearness -overdeck -overdecorate -overdecoration -overdecorative -overdeeming -overdeep -overdeepen -overdeeply -overdeliberate -overdeliberation -overdelicacy -overdelicate -overdelicately -overdelicious -overdeliciously -overdelighted -overdelightedly -overdemand -overdemocracy -overdepress -overdepressive -overdescant -overdesire -overdesirous -overdesirousness -overdestructive -overdestructively -overdestructiveness -overdetermination -overdetermined -overdevelop -overdevelopment -overdevoted -overdevotedly -overdevotion -overdiffuse -overdiffusely -overdiffuseness -overdigest -overdignified -overdignifiedly -overdignifiedness -overdignify -overdignity -overdiligence -overdiligent -overdiligently -overdilute -overdilution -overdischarge -overdiscipline -overdiscount -overdiscourage -overdiscouragement -overdistance -overdistant -overdistantly -overdistantness -overdistempered -overdistention -overdiverse -overdiversely -overdiversification -overdiversify -overdiversity -overdo -overdoctrinize -overdoer -overdogmatic -overdogmatically -overdogmatism -overdome -overdominate -overdone -overdoor -overdosage -overdose -overdoubt -overdoze -overdraft -overdrain -overdrainage -overdramatic -overdramatically -overdrape -overdrapery -overdraw -overdrawer -overdream -overdrench -overdress -overdrifted -overdrink -overdrip -overdrive -overdriven -overdroop -overdrowsed -overdry -overdubbed -overdue -overdunged -overdure -overdust -overdye -overeager -overeagerly -overeagerness -overearnest -overearnestly -overearnestness -overeasily -overeasiness -overeasy -overeat -overeaten -overedge -overedit -overeducate -overeducated -overeducation -overeducative -overeffort -overegg -overelaborate -overelaborately -overelaboration -overelate -overelegance -overelegancy -overelegant -overelegantly -overelliptical -overembellish -overembellishment -overembroider -overemotional -overemotionality -overemotionalize -overemphasis -overemphasize -overemphatic -overemphatically -overemphaticness -overempired -overemptiness -overempty -overenter -overenthusiasm -overenthusiastic -overentreat -overentry -overequal -overestimate -overestimation -overexcelling -overexcitability -overexcitable -overexcitably -overexcite -overexcitement -overexercise -overexert -overexerted -overexertedly -overexertedness -overexertion -overexpand -overexpansion -overexpansive -overexpect -overexpectant -overexpectantly -overexpenditure -overexpert -overexplain -overexplanation -overexpose -overexposure -overexpress -overexquisite -overexquisitely -overextend -overextension -overextensive -overextreme -overexuberant -overeye -overeyebrowed -overface -overfacile -overfacilely -overfacility -overfactious -overfactiousness -overfag -overfagged -overfaint -overfaith -overfaithful -overfaithfully -overfall -overfamed -overfamiliar -overfamiliarity -overfamiliarly -overfamous -overfanciful -overfancy -overfar -overfast -overfastidious -overfastidiously -overfastidiousness -overfasting -overfat -overfatigue -overfatten -overfavor -overfavorable -overfavorably -overfear -overfearful -overfearfully -overfearfulness -overfeast -overfeatured -overfed -overfee -overfeed -overfeel -overfellowlike -overfellowly -overfelon -overfeminine -overfeminize -overfertile -overfertility -overfestoon -overfew -overfierce -overfierceness -overfile -overfill -overfilm -overfine -overfinished -overfish -overfit -overfix -overflatten -overfleece -overfleshed -overflexion -overfling -overfloat -overflog -overflood -overflorid -overfloridness -overflourish -overflow -overflowable -overflower -overflowing -overflowingly -overflowingness -overflown -overfluency -overfluent -overfluently -overflush -overflutter -overfly -overfold -overfond -overfondle -overfondly -overfondness -overfoolish -overfoolishly -overfoolishness -overfoot -overforce -overforged -overformed -overforward -overforwardly -overforwardness -overfought -overfoul -overfoully -overfrail -overfrailty -overfranchised -overfrank -overfrankly -overfrankness -overfraught -overfree -overfreedom -overfreely -overfreight -overfrequency -overfrequent -overfrequently -overfret -overfrieze -overfrighted -overfrighten -overfroth -overfrown -overfrozen -overfruited -overfruitful -overfull -overfullness -overfunctioning -overfurnish -overgaiter -overgalled -overgamble -overgang -overgarment -overgarrison -overgaze -overgeneral -overgeneralize -overgenerally -overgenerosity -overgenerous -overgenerously -overgenial -overgeniality -overgentle -overgently -overget -overgifted -overgild -overgilted -overgird -overgirded -overgirdle -overglad -overgladly -overglance -overglass -overglaze -overglide -overglint -overgloom -overgloominess -overgloomy -overglorious -overgloss -overglut -overgo -overgoad -overgod -overgodliness -overgodly -overgood -overgorge -overgovern -overgovernment -overgown -overgrace -overgracious -overgrade -overgrain -overgrainer -overgrasping -overgrateful -overgratefully -overgratification -overgratify -overgratitude -overgraze -overgreasiness -overgreasy -overgreat -overgreatly -overgreatness -overgreed -overgreedily -overgreediness -overgreedy -overgrieve -overgrievous -overgrind -overgross -overgrossly -overgrossness -overground -overgrow -overgrown -overgrowth -overguilty -overgun -overhair -overhalf -overhand -overhanded -overhandicap -overhandle -overhang -overhappy -overharass -overhard -overharden -overhardness -overhardy -overharsh -overharshly -overharshness -overhaste -overhasten -overhastily -overhastiness -overhasty -overhate -overhatted -overhaughty -overhaul -overhauler -overhead -overheadiness -overheadman -overheady -overheap -overhear -overhearer -overheartily -overhearty -overheat -overheatedly -overheave -overheaviness -overheavy -overheight -overheighten -overheinous -overheld -overhelp -overhelpful -overhigh -overhighly -overhill -overhit -overholiness -overhollow -overholy -overhomeliness -overhomely -overhonest -overhonestly -overhonesty -overhonor -overhorse -overhot -overhotly -overhour -overhouse -overhover -overhuge -overhuman -overhumanity -overhumanize -overhung -overhunt -overhurl -overhurriedly -overhurry -overhusk -overhysterical -overidealism -overidealistic -overidle -overidly -overillustrate -overillustration -overimaginative -overimaginativeness -overimitate -overimitation -overimitative -overimitatively -overimport -overimportation -overimpress -overimpressible -overinclinable -overinclination -overinclined -overincrust -overincurious -overindividualism -overindividualistic -overindulge -overindulgence -overindulgent -overindulgently -overindustrialization -overindustrialize -overinflate -overinflation -overinflative -overinfluence -overinfluential -overinform -overink -overinsist -overinsistence -overinsistent -overinsistently -overinsolence -overinsolent -overinsolently -overinstruct -overinstruction -overinsurance -overinsure -overintellectual -overintellectuality -overintense -overintensely -overintensification -overintensity -overinterest -overinterested -overinterestedness -overinventoried -overinvest -overinvestment -overiodize -overirrigate -overirrigation -overissue -overitching -overjacket -overjade -overjaded -overjawed -overjealous -overjealously -overjealousness -overjob -overjocular -overjoy -overjoyful -overjoyfully -overjoyous -overjudge -overjudging -overjudgment -overjudicious -overjump -overjust -overjutting -overkeen -overkeenness -overkeep -overkick -overkind -overkindly -overkindness -overking -overknavery -overknee -overknow -overknowing -overlabor -overlace -overlactation -overlade -overlaid -overlain -overland -Overlander -overlander -overlanguaged -overlap -overlard -overlarge -overlargely -overlargeness -overlascivious -overlast -overlate -overlaudation -overlaudatory -overlaugh -overlaunch -overlave -overlavish -overlavishly -overlax -overlaxative -overlaxly -overlaxness -overlay -overlayer -overlead -overleaf -overlean -overleap -overlearn -overlearned -overlearnedly -overlearnedness -overleather -overleave -overleaven -overleer -overleg -overlegislation -overleisured -overlength -overlettered -overlewd -overlewdly -overlewdness -overliberal -overliberality -overliberally -overlicentious -overlick -overlie -overlier -overlift -overlight -overlighted -overlightheaded -overlightly -overlightsome -overliking -overline -overling -overlinger -overlinked -overlip -overlipping -overlisted -overlisten -overliterary -overlittle -overlive -overliveliness -overlively -overliver -overload -overloath -overlock -overlocker -overlofty -overlogical -overlogically -overlong -overlook -overlooker -overloose -overlord -overlordship -overloud -overloup -overlove -overlover -overlow -overlowness -overloyal -overloyally -overloyalty -overlubricatio -overluscious -overlush -overlustiness -overlusty -overluxuriance -overluxuriant -overluxurious -overly -overlying -overmagnify -overmagnitude -overmajority -overmalapert -overman -overmantel -overmantle -overmany -overmarch -overmark -overmarking -overmarl -overmask -overmast -overmaster -overmasterful -overmasterfully -overmasterfulness -overmastering -overmasteringly -overmatch -overmatter -overmature -overmaturity -overmean -overmeanly -overmeanness -overmeasure -overmeddle -overmeek -overmeekly -overmeekness -overmellow -overmellowness -overmelodied -overmelt -overmerciful -overmercifulness -overmerit -overmerrily -overmerry -overmettled -overmickle -overmighty -overmild -overmill -overminute -overminutely -overminuteness -overmix -overmoccasin -overmodest -overmodestly -overmodesty -overmodulation -overmoist -overmoisten -overmoisture -overmortgage -overmoss -overmost -overmotor -overmount -overmounts -overmourn -overmournful -overmournfully -overmuch -overmuchness -overmultiplication -overmultiply -overmultitude -overname -overnarrow -overnarrowly -overnationalization -overnear -overneat -overneatness -overneglect -overnegligence -overnegligent -overnervous -overnervously -overnervousness -overnet -overnew -overnice -overnicely -overniceness -overnicety -overnigh -overnight -overnimble -overnipping -overnoise -overnotable -overnourish -overnoveled -overnumber -overnumerous -overnumerousness -overnurse -overobedience -overobedient -overobediently -overobese -overobjectify -overoblige -overobsequious -overobsequiously -overobsequiousness -overoffend -overoffensive -overofficered -overofficious -overorder -overornamented -overpained -overpainful -overpainfully -overpainfulness -overpaint -overpamper -overpart -overparted -overpartial -overpartiality -overpartially -overparticular -overparticularly -overpass -overpassionate -overpassionately -overpassionateness -overpast -overpatient -overpatriotic -overpay -overpayment -overpeer -overpending -overpensive -overpensiveness -overpeople -overpepper -overperemptory -overpersuade -overpersuasion -overpert -overpessimism -overpessimistic -overpet -overphysic -overpick -overpicture -overpinching -overpitch -overpitched -overpiteous -overplace -overplaced -overplacement -overplain -overplant -overplausible -overplay -overplease -overplenitude -overplenteous -overplenteously -overplentiful -overplenty -overplot -overplow -overplumb -overplume -overplump -overplumpness -overplus -overply -overpointed -overpoise -overpole -overpolemical -overpolish -overpolitic -overponderous -overpopular -overpopularity -overpopularly -overpopulate -overpopulation -overpopulous -overpopulousness -overpositive -overpossess -overpot -overpotent -overpotential -overpour -overpower -overpowerful -overpowering -overpoweringly -overpoweringness -overpraise -overpray -overpreach -overprecise -overpreciseness -overpreface -overpregnant -overpreoccupation -overpreoccupy -overpress -overpressure -overpresumption -overpresumptuous -overprice -overprick -overprint -overprize -overprizer -overprocrastination -overproduce -overproduction -overproductive -overproficient -overprolific -overprolix -overprominence -overprominent -overprominently -overpromise -overprompt -overpromptly -overpromptness -overprone -overproneness -overpronounced -overproof -overproportion -overproportionate -overproportionated -overproportionately -overproportioned -overprosperity -overprosperous -overprotect -overprotract -overprotraction -overproud -overproudly -overprove -overprovender -overprovide -overprovident -overprovidently -overprovision -overprovocation -overprovoke -overprune -overpublic -overpublicity -overpuff -overpuissant -overpunish -overpunishment -overpurchase -overquantity -overquarter -overquell -overquick -overquickly -overquiet -overquietly -overquietness -overrace -overrack -overrake -overrange -overrank -overrankness -overrapture -overrapturize -overrash -overrashly -overrashness -overrate -overrational -overrationalize -overravish -overreach -overreacher -overreaching -overreachingly -overreachingness -overread -overreader -overreadily -overreadiness -overready -overrealism -overrealistic -overreckon -overrecord -overrefine -overrefined -overrefinement -overreflection -overreflective -overregister -overregistration -overregular -overregularity -overregularly -overregulate -overregulation -overrelax -overreliance -overreliant -overreligion -overreligious -overremiss -overremissly -overremissness -overrennet -overrent -overreplete -overrepletion -overrepresent -overrepresentation -overrepresentative -overreserved -overresolute -overresolutely -overrestore -overrestrain -overretention -overreward -overrich -overriches -overrichness -override -overrife -overrigged -overright -overrighteous -overrighteously -overrighteousness -overrigid -overrigidity -overrigidly -overrigorous -overrigorously -overrim -overriot -overripe -overripely -overripen -overripeness -overrise -overroast -overroll -overroof -overrooted -overrough -overroughly -overroughness -overroyal -overrude -overrudely -overrudeness -overruff -overrule -overruler -overruling -overrulingly -overrun -overrunner -overrunning -overrunningly -overrush -overrusset -overrust -oversad -oversadly -oversadness -oversaid -oversail -oversale -oversaliva -oversalt -oversalty -oversand -oversanded -oversanguine -oversanguinely -oversapless -oversated -oversatisfy -oversaturate -oversaturation -oversauce -oversauciness -oversaucy -oversave -overscare -overscatter -overscented -oversceptical -overscepticism -overscore -overscour -overscratch -overscrawl -overscream -overscribble -overscrub -overscruple -overscrupulosity -overscrupulous -overscrupulously -overscrupulousness -overscurf -overscutched -oversea -overseal -overseam -overseamer -oversearch -overseas -overseason -overseasoned -overseated -oversecure -oversecurely -oversecurity -oversee -overseed -overseen -overseer -overseerism -overseership -overseethe -oversell -oversend -oversensible -oversensibly -oversensitive -oversensitively -oversensitiveness -oversententious -oversentimental -oversentimentalism -oversentimentalize -oversentimentally -overserious -overseriously -overseriousness -overservice -overservile -overservility -overset -oversetter -oversettle -oversettled -oversevere -overseverely -overseverity -oversew -overshade -overshadow -overshadower -overshadowing -overshadowingly -overshadowment -overshake -oversharp -oversharpness -overshave -oversheet -overshelving -overshepherd -overshine -overshirt -overshoe -overshoot -overshort -overshorten -overshortly -overshot -overshoulder -overshowered -overshrink -overshroud -oversick -overside -oversight -oversilence -oversilent -oversilver -oversimple -oversimplicity -oversimplification -oversimplify -oversimply -oversize -oversized -overskim -overskip -overskipper -overskirt -overslack -overslander -overslaugh -overslavish -overslavishly -oversleep -oversleeve -overslide -overslight -overslip -overslope -overslow -overslowly -overslowness -overslur -oversmall -oversman -oversmite -oversmitten -oversmoke -oversmooth -oversmoothly -oversmoothness -oversnow -oversoak -oversoar -oversock -oversoft -oversoftly -oversoftness -oversold -oversolemn -oversolemnity -oversolemnly -oversolicitous -oversolicitously -oversolicitousness -oversoon -oversoothing -oversophisticated -oversophistication -oversorrow -oversorrowed -oversot -oversoul -oversound -oversour -oversourly -oversourness -oversow -overspacious -overspaciousness -overspan -overspangled -oversparing -oversparingly -oversparingness -oversparred -overspatter -overspeak -overspecialization -overspecialize -overspeculate -overspeculation -overspeculative -overspeech -overspeed -overspeedily -overspeedy -overspend -overspill -overspin -oversplash -overspread -overspring -oversprinkle -oversprung -overspun -oversqueak -oversqueamish -oversqueamishness -overstaff -overstaid -overstain -overstale -overstalled -overstand -overstaring -overstate -overstately -overstatement -overstay -overstayal -oversteadfast -oversteadfastness -oversteady -overstep -overstiff -overstiffness -overstifle -overstimulate -overstimulation -overstimulative -overstir -overstitch -overstock -overstoop -overstoping -overstore -overstory -overstout -overstoutly -overstowage -overstowed -overstrain -overstrait -overstraiten -overstraitly -overstraitness -overstream -overstrength -overstress -overstretch -overstrew -overstrict -overstrictly -overstrictness -overstride -overstrident -overstridently -overstrike -overstring -overstriving -overstrong -overstrongly -overstrung -overstud -overstudied -overstudious -overstudiously -overstudiousness -overstudy -overstuff -oversublime -oversubscribe -oversubscriber -oversubscription -oversubtile -oversubtle -oversubtlety -oversubtly -oversufficiency -oversufficient -oversufficiently -oversuperstitious -oversupply -oversure -oversurety -oversurge -oversurviving -oversusceptibility -oversusceptible -oversuspicious -oversuspiciously -overswarm -overswarth -oversway -oversweated -oversweep -oversweet -oversweeten -oversweetly -oversweetness -overswell -overswift -overswim -overswimmer -overswing -overswinging -overswirling -oversystematic -oversystematically -oversystematize -overt -overtakable -overtake -overtaker -overtalk -overtalkative -overtalkativeness -overtalker -overtame -overtamely -overtameness -overtapped -overtare -overtariff -overtarry -overtart -overtask -overtax -overtaxation -overteach -overtechnical -overtechnicality -overtedious -overtediously -overteem -overtell -overtempt -overtenacious -overtender -overtenderly -overtenderness -overtense -overtensely -overtenseness -overtension -overterrible -overtest -overthick -overthin -overthink -overthought -overthoughtful -overthriftily -overthriftiness -overthrifty -overthrong -overthrow -overthrowable -overthrowal -overthrower -overthrust -overthwart -overthwartly -overthwartness -overthwartways -overthwartwise -overtide -overtight -overtightly -overtill -overtimbered -overtime -overtimer -overtimorous -overtimorously -overtimorousness -overtinseled -overtint -overtip -overtipple -overtire -overtiredness -overtitle -overtly -overtness -overtoe -overtoil -overtoise -overtone -overtongued -overtop -overtopple -overtorture -overtower -overtrace -overtrack -overtrade -overtrader -overtrailed -overtrain -overtrample -overtravel -overtread -overtreatment -overtrick -overtrim -overtrouble -overtrue -overtrump -overtrust -overtrustful -overtruthful -overtruthfully -overtumble -overture -overturn -overturnable -overturner -overtutor -overtwine -overtwist -overtype -overuberous -overunionized -overunsuitable -overurbanization -overurge -overuse -overusual -overusually -overvaliant -overvaluable -overvaluation -overvalue -overvariety -overvault -overvehemence -overvehement -overveil -overventilate -overventilation -overventuresome -overventurous -overview -overvoltage -overvote -overwade -overwages -overwake -overwalk -overwander -overward -overwash -overwasted -overwatch -overwatcher -overwater -overwave -overway -overwealth -overwealthy -overweaponed -overwear -overweary -overweather -overweave -overweb -overween -overweener -overweening -overweeningly -overweeningness -overweep -overweigh -overweight -overweightage -overwell -overwelt -overwet -overwetness -overwheel -overwhelm -overwhelmer -overwhelming -overwhelmingly -overwhelmingness -overwhipped -overwhirl -overwhisper -overwide -overwild -overwilily -overwilling -overwillingly -overwily -overwin -overwind -overwing -overwinter -overwiped -overwisdom -overwise -overwisely -overwithered -overwoman -overwomanize -overwomanly -overwood -overwooded -overwoody -overword -overwork -overworld -overworn -overworry -overworship -overwound -overwove -overwoven -overwrap -overwrest -overwrested -overwrestle -overwrite -overwroth -overwrought -overyear -overyoung -overyouthful -overzeal -overzealous -overzealously -overzealousness -ovest -ovey -Ovibos -Ovibovinae -ovibovine -ovicapsular -ovicapsule -ovicell -ovicellular -ovicidal -ovicide -ovicular -oviculated -oviculum -ovicyst -ovicystic -Ovidae -Ovidian -oviducal -oviduct -oviductal -oviferous -ovification -oviform -ovigenesis -ovigenetic -ovigenic -ovigenous -ovigerm -ovigerous -ovile -Ovillus -Ovinae -ovine -ovinia -ovipara -oviparal -oviparity -oviparous -oviparously -oviparousness -oviposit -oviposition -ovipositor -Ovis -ovisac -oviscapt -ovism -ovispermary -ovispermiduct -ovist -ovistic -ovivorous -ovocyte -ovoelliptic -ovoflavin -ovogenesis -ovogenetic -ovogenous -ovogonium -ovoid -ovoidal -ovolemma -ovolo -ovological -ovologist -ovology -ovolytic -ovomucoid -ovoplasm -ovoplasmic -ovopyriform -ovorhomboid -ovorhomboidal -ovotesticular -ovotestis -ovovitellin -Ovovivipara -ovoviviparism -ovoviviparity -ovoviviparous -ovoviviparously -ovoviviparousness -Ovula -ovular -ovularian -ovulary -ovulate -ovulation -ovule -ovuliferous -ovuligerous -ovulist -ovum -ow -owd -owe -owelty -Owen -Owenia -Owenian -Owenism -Owenist -Owenite -Owenize -ower -owerance -owerby -owercome -owergang -owerloup -owertaen -owerword -owght -owing -owk -owl -owldom -owler -owlery -owlet -Owlglass -owlhead -owling -owlish -owlishly -owlishness -owlism -owllight -owllike -Owlspiegle -owly -own -owner -ownerless -ownership -ownhood -ownness -ownself -ownwayish -owregane -owrehip -owrelay -owse -owsen -owser -owtchah -owyheeite -ox -oxacid -oxadiazole -oxalacetic -oxalaldehyde -oxalamid -oxalamide -oxalan -oxalate -oxaldehyde -oxalemia -oxalic -Oxalidaceae -oxalidaceous -Oxalis -oxalite -oxalodiacetic -oxalonitril -oxalonitrile -oxaluramid -oxaluramide -oxalurate -oxaluria -oxaluric -oxalyl -oxalylurea -oxamate -oxamethane -oxamic -oxamid -oxamide -oxamidine -oxammite -oxan -oxanate -oxane -oxanic -oxanilate -oxanilic -oxanilide -oxazine -oxazole -oxbane -oxberry -oxbird -oxbiter -oxblood -oxbow -oxboy -oxbrake -oxcart -oxcheek -oxdiacetic -oxdiazole -oxea -oxeate -oxen -oxeote -oxer -oxetone -oxeye -oxfly -Oxford -Oxfordian -Oxfordism -Oxfordist -oxgang -oxgoad -oxharrow -oxhead -oxheal -oxheart -oxhide -oxhoft -oxhorn -oxhouse -oxhuvud -oxidability -oxidable -oxidant -oxidase -oxidate -oxidation -oxidational -oxidative -oxidator -oxide -oxidic -oxidimetric -oxidimetry -oxidizability -oxidizable -oxidization -oxidize -oxidizement -oxidizer -oxidizing -oxidoreductase -oxidoreduction -oxidulated -oximate -oximation -oxime -oxland -oxlike -oxlip -oxman -oxmanship -oxoindoline -Oxonian -oxonic -oxonium -Oxonolatry -oxozone -oxozonide -oxpecker -oxphony -oxreim -oxshoe -oxskin -oxtail -oxter -oxtongue -oxwort -oxy -oxyacanthine -oxyacanthous -oxyacetylene -oxyacid -Oxyaena -Oxyaenidae -oxyaldehyde -oxyamine -oxyanthracene -oxyanthraquinone -oxyaphia -oxyaster -oxybaphon -Oxybaphus -oxybenzaldehyde -oxybenzene -oxybenzoic -oxybenzyl -oxyberberine -oxyblepsia -oxybromide -oxybutyria -oxybutyric -oxycalcium -oxycalorimeter -oxycamphor -oxycaproic -oxycarbonate -oxycellulose -oxycephalic -oxycephalism -oxycephalous -oxycephaly -oxychlorate -oxychloric -oxychloride -oxycholesterol -oxychromatic -oxychromatin -oxychromatinic -oxycinnamic -oxycobaltammine -Oxycoccus -oxycopaivic -oxycoumarin -oxycrate -oxycyanide -oxydactyl -Oxydendrum -oxydiact -oxyesthesia -oxyether -oxyethyl -oxyfatty -oxyfluoride -oxygas -oxygen -oxygenant -oxygenate -oxygenation -oxygenator -oxygenerator -oxygenic -oxygenicity -oxygenium -oxygenizable -oxygenize -oxygenizement -oxygenizer -oxygenous -oxygeusia -oxygnathous -oxyhalide -oxyhaloid -oxyhematin -oxyhemocyanin -oxyhemoglobin -oxyhexactine -oxyhexaster -oxyhydrate -oxyhydric -oxyhydrogen -oxyiodide -oxyketone -oxyl -Oxylabracidae -Oxylabrax -oxyluciferin -oxyluminescence -oxyluminescent -oxymandelic -oxymel -oxymethylene -oxymoron -oxymuriate -oxymuriatic -oxynaphthoic -oxynaphtoquinone -oxynarcotine -oxyneurin -oxyneurine -oxynitrate -oxyntic -oxyophitic -oxyopia -Oxyopidae -oxyosphresia -oxypetalous -oxyphenol -oxyphenyl -oxyphile -oxyphilic -oxyphilous -oxyphonia -oxyphosphate -oxyphthalic -oxyphyllous -oxyphyte -oxypicric -Oxypolis -oxyproline -oxypropionic -oxypurine -oxypycnos -oxyquinaseptol -oxyquinoline -oxyquinone -oxyrhine -oxyrhinous -oxyrhynch -oxyrhynchous -oxyrhynchus -Oxyrrhyncha -oxyrrhynchid -oxysalicylic -oxysalt -oxystearic -Oxystomata -oxystomatous -oxystome -oxysulphate -oxysulphide -oxyterpene -oxytocia -oxytocic -oxytocin -oxytocous -oxytoluene -oxytoluic -oxytone -oxytonesis -oxytonical -oxytonize -Oxytricha -Oxytropis -oxytylotate -oxytylote -oxyuriasis -oxyuricide -Oxyuridae -oxyurous -oxywelding -Oyana -oyapock -oyer -oyster -oysterage -oysterbird -oystered -oysterer -oysterfish -oystergreen -oysterhood -oysterhouse -oystering -oysterish -oysterishness -oysterlike -oysterling -oysterman -oysterous -oysterroot -oysterseed -oystershell -oysterwife -oysterwoman -Ozan -Ozark -ozarkite -ozena -Ozias -ozobrome -ozocerite -ozokerit -ozokerite -ozonate -ozonation -ozonator -ozone -ozoned -ozonic -ozonide -ozoniferous -ozonification -ozonify -Ozonium -ozonization -ozonize -ozonizer -ozonometer -ozonometry -ozonoscope -ozonoscopic -ozonous -ozophen -ozophene -ozostomia -ozotype -P -p -pa -paal -paar -paauw -Paba -pabble -Pablo -pablo -pabouch -pabular -pabulary -pabulation -pabulatory -pabulous -pabulum -pac -paca -pacable -Pacaguara -pacate -pacation -pacative -pacay -pacaya -Paccanarist -Pacchionian -Pace -pace -paceboard -paced -pacemaker -pacemaking -pacer -pachak -pachisi -pachnolite -pachometer -Pachomian -Pachons -Pacht -pachyacria -pachyaemia -pachyblepharon -pachycarpous -pachycephal -pachycephalia -pachycephalic -pachycephalous -pachycephaly -pachychilia -pachycholia -pachychymia -pachycladous -pachydactyl -pachydactylous -pachydactyly -pachyderm -pachyderma -pachydermal -Pachydermata -pachydermatocele -pachydermatoid -pachydermatosis -pachydermatous -pachydermatously -pachydermia -pachydermial -pachydermic -pachydermoid -pachydermous -pachyemia -pachyglossal -pachyglossate -pachyglossia -pachyglossous -pachyhaemia -pachyhaemic -pachyhaemous -pachyhematous -pachyhemia -pachyhymenia -pachyhymenic -Pachylophus -pachylosis -Pachyma -pachymenia -pachymenic -pachymeningitic -pachymeningitis -pachymeninx -pachymeter -pachynathous -pachynema -pachynsis -pachyntic -pachyodont -pachyotia -pachyotous -pachyperitonitis -pachyphyllous -pachypleuritic -pachypod -pachypodous -pachypterous -Pachyrhizus -pachyrhynchous -pachysalpingitis -Pachysandra -pachysaurian -pachysomia -pachysomous -pachystichous -Pachystima -pachytene -pachytrichous -Pachytylus -pachyvaginitis -pacifiable -pacific -pacifical -pacifically -pacificate -pacification -pacificator -pacificatory -pacificism -pacificist -pacificity -pacifier -pacifism -pacifist -pacifistic -pacifistically -pacify -pacifyingly -Pacinian -pack -packable -package -packbuilder -packcloth -packer -packery -packet -packhouse -packless -packly -packmaker -packmaking -packman -packmanship -packness -packsack -packsaddle -packstaff -packthread -packwall -packwaller -packware -packway -paco -Pacolet -pacouryuva -pact -paction -pactional -pactionally -Pactolian -Pactolus -pad -padcloth -Padda -padder -padding -paddle -paddlecock -paddled -paddlefish -paddlelike -paddler -paddlewood -paddling -paddock -paddockride -paddockstone -paddockstool -Paddy -paddy -paddybird -Paddyism -paddymelon -Paddywack -paddywatch -Paddywhack -paddywhack -padella -padfoot -padge -Padina -padishah -padle -padlike -padlock -padmasana -padmelon -padnag -padpiece -Padraic -Padraig -padre -padroadist -padroado -padronism -padstone -padtree -Paduan -Paduanism -paduasoy -Padus -paean -paeanism -paeanize -paedarchy -paedatrophia -paedatrophy -paediatry -paedogenesis -paedogenetic -paedometer -paedometrical -paedomorphic -paedomorphism -paedonymic -paedonymy -paedopsychologist -paedotribe -paedotrophic -paedotrophist -paedotrophy -paegel -paegle -Paelignian -paenula -paeon -Paeonia -Paeoniaceae -Paeonian -paeonic -paetrick -paga -pagan -Paganalia -Paganalian -pagandom -paganic -paganical -paganically -paganish -paganishly -paganism -paganist -paganistic -paganity -paganization -paganize -paganizer -paganly -paganry -pagatpat -Page -page -pageant -pageanted -pageanteer -pageantic -pageantry -pagedom -pageful -pagehood -pageless -pagelike -pager -pageship -pagina -paginal -paginary -paginate -pagination -pagiopod -Pagiopoda -pagoda -pagodalike -pagodite -pagoscope -pagrus -Paguma -pagurian -pagurid -Paguridae -Paguridea -pagurine -Pagurinea -paguroid -Paguroidea -Pagurus -pagus -pah -paha -Pahareen -Pahari -Paharia -pahi -Pahlavi -pahlavi -pahmi -paho -pahoehoe -Pahouin -pahutan -Paiconeca -paideutic -paideutics -paidological -paidologist -paidology -paidonosology -paigle -paik -pail -pailful -paillasse -paillette -pailletted -pailou -paimaneh -pain -pained -painful -painfully -painfulness -paining -painingly -painkiller -painless -painlessly -painlessness -painproof -painstaker -painstaking -painstakingly -painstakingness -painsworthy -paint -paintability -paintable -paintableness -paintably -paintbox -paintbrush -painted -paintedness -painter -painterish -painterlike -painterly -paintership -paintiness -painting -paintingness -paintless -paintpot -paintproof -paintress -paintrix -paintroot -painty -paip -pair -paired -pairedness -pairer -pairment -pairwise -pais -paisa -paisanite -Paisley -Paiute -paiwari -pajahuello -pajama -pajamaed -pajock -Pajonism -Pakawa -Pakawan -pakchoi -pakeha -Pakhpuluk -Pakhtun -Pakistani -paktong -pal -Pala -palace -palaced -palacelike -palaceous -palaceward -palacewards -paladin -palaeanthropic -Palaearctic -Palaeechini -palaeechinoid -Palaeechinoidea -palaeechinoidean -palaeentomology -palaeethnologic -palaeethnological -palaeethnologist -palaeethnology -Palaeeudyptes -Palaeic -palaeichthyan -Palaeichthyes -palaeichthyic -Palaemon -palaemonid -Palaemonidae -palaemonoid -palaeoalchemical -palaeoanthropic -palaeoanthropography -palaeoanthropology -Palaeoanthropus -palaeoatavism -palaeoatavistic -palaeobiogeography -palaeobiologist -palaeobiology -palaeobotanic -palaeobotanical -palaeobotanically -palaeobotanist -palaeobotany -Palaeocarida -palaeoceanography -Palaeocene -palaeochorology -palaeoclimatic -palaeoclimatology -Palaeoconcha -palaeocosmic -palaeocosmology -Palaeocrinoidea -palaeocrystal -palaeocrystallic -palaeocrystalline -palaeocrystic -palaeocyclic -palaeodendrologic -palaeodendrological -palaeodendrologically -palaeodendrologist -palaeodendrology -Palaeodictyoptera -palaeodictyopteran -palaeodictyopteron -palaeodictyopterous -palaeoencephalon -palaeoeremology -palaeoethnic -palaeoethnologic -palaeoethnological -palaeoethnologist -palaeoethnology -palaeofauna -Palaeogaea -Palaeogaean -palaeogene -palaeogenesis -palaeogenetic -palaeogeographic -palaeogeography -palaeoglaciology -palaeoglyph -Palaeognathae -palaeognathic -palaeognathous -palaeograph -palaeographer -palaeographic -palaeographical -palaeographically -palaeographist -palaeography -palaeoherpetologist -palaeoherpetology -palaeohistology -palaeohydrography -palaeolatry -palaeolimnology -palaeolith -palaeolithic -palaeolithical -palaeolithist -palaeolithoid -palaeolithy -palaeological -palaeologist -palaeology -Palaeomastodon -palaeometallic -palaeometeorological -palaeometeorology -Palaeonemertea -palaeonemertean -palaeonemertine -Palaeonemertinea -Palaeonemertini -palaeoniscid -Palaeoniscidae -palaeoniscoid -Palaeoniscum -Palaeoniscus -palaeontographic -palaeontographical -palaeontography -palaeopathology -palaeopedology -palaeophile -palaeophilist -Palaeophis -palaeophysiography -palaeophysiology -palaeophytic -palaeophytological -palaeophytologist -palaeophytology -palaeoplain -palaeopotamology -palaeopsychic -palaeopsychological -palaeopsychology -palaeoptychology -Palaeornis -Palaeornithinae -palaeornithine -palaeornithological -palaeornithology -palaeosaur -Palaeosaurus -palaeosophy -Palaeospondylus -Palaeostraca -palaeostracan -palaeostriatal -palaeostriatum -palaeostylic -palaeostyly -palaeotechnic -palaeothalamus -Palaeothentes -Palaeothentidae -palaeothere -palaeotherian -Palaeotheriidae -palaeotheriodont -palaeotherioid -Palaeotherium -palaeotheroid -Palaeotropical -palaeotype -palaeotypic -palaeotypical -palaeotypically -palaeotypographical -palaeotypographist -palaeotypography -palaeovolcanic -Palaeozoic -palaeozoological -palaeozoologist -palaeozoology -palaestra -palaestral -palaestrian -palaestric -palaestrics -palaetiological -palaetiologist -palaetiology -palafitte -palagonite -palagonitic -Palaic -Palaihnihan -palaiotype -palaite -palama -palamate -palame -Palamedea -palamedean -Palamedeidae -Palamite -Palamitism -palampore -palander -palanka -palankeen -palanquin -palapalai -Palapteryx -Palaquium -palar -palas -palatability -palatable -palatableness -palatably -palatal -palatalism -palatality -palatalization -palatalize -palate -palated -palateful -palatefulness -palateless -palatelike -palatial -palatially -palatialness -palatian -palatic -palatinal -palatinate -palatine -palatineship -Palatinian -palatinite -palation -palatist -palatitis -palative -palatization -palatize -palatoalveolar -palatodental -palatoglossal -palatoglossus -palatognathous -palatogram -palatograph -palatography -palatomaxillary -palatometer -palatonasal -palatopharyngeal -palatopharyngeus -palatoplasty -palatoplegia -palatopterygoid -palatoquadrate -palatorrhaphy -palatoschisis -Palatua -Palau -Palaung -palaver -palaverer -palaverist -palaverment -palaverous -palay -palazzi -palberry -palch -pale -palea -paleaceous -paleanthropic -Palearctic -paleate -palebelly -palebuck -palechinoid -paled -paledness -paleencephalon -paleentomology -paleethnographer -paleethnologic -paleethnological -paleethnologist -paleethnology -paleface -palehearted -paleichthyologic -paleichthyologist -paleichthyology -paleiform -palely -Paleman -paleness -Palenque -paleoalchemical -paleoandesite -paleoanthropic -paleoanthropography -paleoanthropological -paleoanthropologist -paleoanthropology -Paleoanthropus -paleoatavism -paleoatavistic -paleobiogeography -paleobiologist -paleobiology -paleobotanic -paleobotanical -paleobotanically -paleobotanist -paleobotany -paleoceanography -Paleocene -paleochorology -paleoclimatic -paleoclimatologist -paleoclimatology -Paleoconcha -paleocosmic -paleocosmology -paleocrystal -paleocrystallic -paleocrystalline -paleocrystic -paleocyclic -paleodendrologic -paleodendrological -paleodendrologically -paleodendrologist -paleodendrology -paleoecologist -paleoecology -paleoencephalon -paleoeremology -paleoethnic -paleoethnography -paleoethnologic -paleoethnological -paleoethnologist -paleoethnology -paleofauna -Paleogene -paleogenesis -paleogenetic -paleogeographic -paleogeography -paleoglaciology -paleoglyph -paleograph -paleographer -paleographic -paleographical -paleographically -paleographist -paleography -paleoherpetologist -paleoherpetology -paleohistology -paleohydrography -paleoichthyology -paleokinetic -paleola -paleolate -paleolatry -paleolimnology -paleolith -paleolithic -paleolithical -paleolithist -paleolithoid -paleolithy -paleological -paleologist -paleology -paleomammalogy -paleometallic -paleometeorological -paleometeorology -paleontographic -paleontographical -paleontography -paleontologic -paleontological -paleontologically -paleontologist -paleontology -paleopathology -paleopedology -paleophysiography -paleophysiology -paleophytic -paleophytological -paleophytologist -paleophytology -paleopicrite -paleoplain -paleopotamoloy -paleopsychic -paleopsychological -paleopsychology -paleornithological -paleornithology -paleostriatal -paleostriatum -paleostylic -paleostyly -paleotechnic -paleothalamus -paleothermal -paleothermic -Paleotropical -paleovolcanic -paleoytterbium -Paleozoic -paleozoological -paleozoologist -paleozoology -paler -Palermitan -Palermo -Pales -Palesman -Palestinian -palestra -palestral -palestrian -palestric -palet -paletiology -paletot -palette -paletz -palewise -palfrey -palfreyed -palgat -Pali -pali -Palicourea -palification -paliform -paligorskite -palikar -palikarism -palikinesia -palila -palilalia -Palilia -Palilicium -palillogia -palilogetic -palilogy -palimbacchic -palimbacchius -palimpsest -palimpsestic -palinal -palindrome -palindromic -palindromical -palindromically -palindromist -paling -palingenesia -palingenesian -palingenesis -palingenesist -palingenesy -palingenetic -palingenetically -palingenic -palingenist -palingeny -palinode -palinodial -palinodic -palinodist -palinody -palinurid -Palinuridae -palinuroid -Palinurus -paliphrasia -palirrhea -palisade -palisading -palisado -palisander -palisfy -palish -palistrophia -Paliurus -palkee -pall -palla -palladammine -Palladia -palladia -Palladian -Palladianism -palladic -palladiferous -palladinize -palladion -palladious -Palladium -palladium -palladiumize -palladize -palladodiammine -palladosammine -palladous -pallae -pallah -pallall -pallanesthesia -Pallas -pallasite -pallbearer -palled -pallescence -pallescent -pallesthesia -pallet -palleting -palletize -pallette -pallholder -palli -pallial -palliard -palliasse -Palliata -palliata -palliate -palliation -palliative -palliatively -palliator -palliatory -pallid -pallidiflorous -pallidipalpate -palliditarsate -pallidity -pallidiventrate -pallidly -pallidness -palliness -Palliobranchiata -palliobranchiate -palliocardiac -pallioessexite -pallion -palliopedal -palliostratus -pallium -Palliyan -pallograph -pallographic -pallometric -pallone -pallor -Pallu -Palluites -pallwise -pally -palm -palma -Palmaceae -palmaceous -palmad -Palmae -palmanesthesia -palmar -palmarian -palmary -palmate -palmated -palmately -palmatifid -palmatiform -palmatilobate -palmatilobed -palmation -palmatiparted -palmatipartite -palmatisect -palmatisected -palmature -palmcrist -palmed -Palmella -Palmellaceae -palmellaceous -palmelloid -palmer -palmerite -palmery -palmesthesia -palmette -palmetto -palmetum -palmful -palmicolous -palmiferous -palmification -palmiform -palmigrade -palmilobate -palmilobated -palmilobed -palminervate -palminerved -palmiped -Palmipedes -palmipes -palmist -palmister -palmistry -palmitate -palmite -palmitic -palmitin -palmitinic -palmito -palmitoleic -palmitone -palmiveined -palmivorous -palmlike -palmo -palmodic -palmoscopy -palmospasmus -palmula -palmus -palmwise -palmwood -palmy -palmyra -Palmyrene -Palmyrenian -palolo -palombino -palometa -palomino -palosapis -palouser -paloverde -palp -palpability -palpable -palpableness -palpably -palpacle -palpal -palpate -palpation -palpatory -palpebra -palpebral -palpebrate -palpebration -palpebritis -palped -palpi -palpicorn -Palpicornia -palpifer -palpiferous -palpiform -palpiger -palpigerous -palpitant -palpitate -palpitatingly -palpitation -palpless -palpocil -palpon -palpulus -palpus -palsgrave -palsgravine -palsied -palsification -palstave -palster -palsy -palsylike -palsywort -palt -Palta -palter -palterer -palterly -paltrily -paltriness -paltry -paludal -paludament -paludamentum -paludial -paludian -paludic -Paludicella -Paludicolae -paludicole -paludicoline -paludicolous -paludiferous -Paludina -paludinal -paludine -paludinous -paludism -paludose -paludous -paludrin -paludrine -palule -palulus -Palus -palus -palustral -palustrian -palustrine -paly -palynology -Pam -pam -pambanmanche -Pamela -pament -pameroon -Pamir -Pamiri -Pamirian -Pamlico -pamment -Pampanga -Pampangan -Pampango -pampas -pampean -pamper -pampered -pamperedly -pamperedness -pamperer -pamperize -pampero -pamphagous -pampharmacon -Pamphiliidae -Pamphilius -pamphlet -pamphletage -pamphletary -pamphleteer -pamphleter -pamphletful -pamphletic -pamphletical -pamphletize -pamphletwise -pamphysical -pamphysicism -pampilion -pampiniform -pampinocele -pamplegia -pampootee -pampootie -pampre -pamprodactyl -pamprodactylism -pamprodactylous -pampsychism -pampsychist -Pamunkey -Pan -pan -panace -Panacea -panacea -panacean -panaceist -panache -panached -panachure -panada -panade -Panagia -panagiarion -Panak -Panaka -panama -Panamaian -Panaman -Panamanian -Panamano -Panamic -Panamint -Panamist -panapospory -panarchic -panarchy -panaris -panaritium -panarteritis -panarthritis -panary -panatela -Panathenaea -Panathenaean -Panathenaic -panatrophy -panautomorphic -panax -Panayan -Panayano -panbabylonian -panbabylonism -Panboeotian -pancake -pancarditis -panchama -panchayat -pancheon -panchion -panchromatic -panchromatism -panchromatization -panchromatize -panchway -panclastic -panconciliatory -pancosmic -pancosmism -pancosmist -pancratian -pancratiast -pancratiastic -pancratic -pancratical -pancratically -pancration -pancratism -pancratist -pancratium -pancreas -pancreatalgia -pancreatectomize -pancreatectomy -pancreatemphraxis -pancreathelcosis -pancreatic -pancreaticoduodenal -pancreaticoduodenostomy -pancreaticogastrostomy -pancreaticosplenic -pancreatin -pancreatism -pancreatitic -pancreatitis -pancreatization -pancreatize -pancreatoduodenectomy -pancreatoenterostomy -pancreatogenic -pancreatogenous -pancreatoid -pancreatolipase -pancreatolith -pancreatomy -pancreatoncus -pancreatopathy -pancreatorrhagia -pancreatotomy -pancreectomy -pancreozymin -pancyclopedic -pand -panda -pandal -pandan -Pandanaceae -pandanaceous -Pandanales -Pandanus -pandaram -Pandarctos -pandaric -Pandarus -pandation -Pandean -pandect -Pandectist -pandemia -pandemian -pandemic -pandemicity -pandemoniac -Pandemoniacal -Pandemonian -pandemonic -pandemonism -Pandemonium -pandemonium -Pandemos -pandemy -pandenominational -pander -panderage -panderer -panderess -panderism -panderize -panderly -Panderma -pandermite -panderous -pandership -pandestruction -pandiabolism -pandiculation -Pandion -Pandionidae -pandita -pandle -pandlewhew -Pandora -pandora -Pandorea -Pandoridae -Pandorina -Pandosto -pandour -pandowdy -pandrop -pandura -pandurate -pandurated -panduriform -pandy -pane -panecclesiastical -paned -panegoism -panegoist -panegyric -panegyrical -panegyrically -panegyricize -panegyricon -panegyricum -panegyris -panegyrist -panegyrize -panegyrizer -panegyry -paneity -panel -panela -panelation -paneler -paneless -paneling -panelist -panellation -panelling -panelwise -panelwork -panentheism -panesthesia -panesthetic -paneulogism -panfil -panfish -panful -pang -Pangaea -pangamic -pangamous -pangamously -pangamy -pangane -Pangasinan -pangen -pangene -pangenesis -pangenetic -pangenetically -pangenic -pangful -pangi -Pangium -pangless -panglessly -panglima -Pangloss -Panglossian -Panglossic -pangolin -pangrammatist -Pangwe -panhandle -panhandler -panharmonic -panharmonicon -panhead -panheaded -Panhellenic -Panhellenios -Panhellenism -Panhellenist -Panhellenium -panhidrosis -panhuman -panhygrous -panhyperemia -panhysterectomy -Pani -panic -panical -panically -panicful -panichthyophagous -panicked -panicky -panicle -panicled -paniclike -panicmonger -panicmongering -paniconograph -paniconographic -paniconography -Panicularia -paniculate -paniculated -paniculately -paniculitis -Panicum -panidiomorphic -panidrosis -panification -panimmunity -Paninean -Panionia -Panionian -Panionic -Paniquita -Paniquitan -panisc -panisca -paniscus -panisic -panivorous -Panjabi -panjandrum -pank -pankin -pankration -panleucopenia -panlogical -panlogism -panlogistical -panman -panmelodicon -panmelodion -panmerism -panmeristic -panmixia -panmixy -panmnesia -panmug -panmyelophthisis -Panna -pannade -pannage -pannam -pannationalism -panne -pannel -panner -pannery -panneuritic -panneuritis -pannicle -pannicular -pannier -panniered -pannierman -pannikin -panning -Pannonian -Pannonic -pannose -pannosely -pannum -pannus -pannuscorium -Panoan -panocha -panoche -panococo -panoistic -panomphaic -panomphean -panomphic -panophobia -panophthalmia -panophthalmitis -panoplied -panoplist -panoply -panoptic -panoptical -panopticon -panoram -panorama -panoramic -panoramical -panoramically -panoramist -panornithic -Panorpa -Panorpatae -panorpian -panorpid -Panorpidae -Panos -panosteitis -panostitis -panotitis -panotype -panouchi -panpathy -panpharmacon -panphenomenalism -panphobia -Panpipe -panplegia -panpneumatism -panpolism -panpsychic -panpsychism -panpsychist -panpsychistic -panscientist -pansciolism -pansciolist -pansclerosis -pansclerotic -panse -pansexism -pansexual -pansexualism -pansexualist -pansexuality -pansexualize -panshard -panside -pansideman -pansied -pansinuitis -pansinusitis -pansmith -pansophic -pansophical -pansophically -pansophism -pansophist -pansophy -panspermatism -panspermatist -panspermia -panspermic -panspermism -panspermist -panspermy -pansphygmograph -panstereorama -pansy -pansylike -pant -pantachromatic -pantacosm -pantagamy -pantagogue -pantagraph -pantagraphic -pantagraphical -Pantagruel -Pantagruelian -Pantagruelic -Pantagruelically -Pantagrueline -pantagruelion -Pantagruelism -Pantagruelist -Pantagruelistic -Pantagruelistical -Pantagruelize -pantaleon -pantaletless -pantalets -pantaletted -pantalgia -pantalon -Pantalone -pantaloon -pantalooned -pantaloonery -pantaloons -pantameter -pantamorph -pantamorphia -pantamorphic -pantanemone -pantanencephalia -pantanencephalic -pantaphobia -pantarbe -pantarchy -pantas -pantascope -pantascopic -Pantastomatida -Pantastomina -pantatrophia -pantatrophy -pantatype -pantechnic -pantechnicon -pantelegraph -pantelegraphy -panteleologism -pantelephone -pantelephonic -Pantelis -pantellerite -panter -panterer -Pantheian -pantheic -pantheism -pantheist -pantheistic -pantheistical -pantheistically -panthelematism -panthelism -pantheologist -pantheology -pantheon -pantheonic -pantheonization -pantheonize -panther -pantheress -pantherine -pantherish -pantherlike -pantherwood -pantheum -pantie -panties -pantile -pantiled -pantiling -panting -pantingly -pantisocracy -pantisocrat -pantisocratic -pantisocratical -pantisocratist -pantle -pantler -panto -pantochrome -pantochromic -pantochromism -pantochronometer -Pantocrator -pantod -Pantodon -Pantodontidae -pantoffle -pantofle -pantoganglitis -pantogelastic -pantoglossical -pantoglot -pantoglottism -pantograph -pantographer -pantographic -pantographical -pantographically -pantography -pantoiatrical -pantologic -pantological -pantologist -pantology -pantomancer -pantometer -pantometric -pantometrical -pantometry -pantomime -pantomimic -pantomimical -pantomimically -pantomimicry -pantomimish -pantomimist -pantomimus -pantomnesia -pantomnesic -pantomorph -pantomorphia -pantomorphic -panton -pantoon -pantopelagian -pantophagic -pantophagist -pantophagous -pantophagy -pantophile -pantophobia -pantophobic -pantophobous -pantoplethora -pantopod -Pantopoda -pantopragmatic -pantopterous -pantoscope -pantoscopic -pantosophy -Pantostomata -pantostomate -pantostomatous -pantostome -pantotactic -pantothenate -pantothenic -Pantotheria -pantotherian -pantotype -pantoum -pantropic -pantropical -pantry -pantryman -pantrywoman -pants -pantun -panty -pantywaist -panung -panurgic -panurgy -panyar -Panzer -panzoism -panzootia -panzootic -panzooty -Paola -paolo -paon -pap -papa -papability -papable -papabot -papacy -papagallo -Papago -papain -papal -papalism -papalist -papalistic -papalization -papalize -papalizer -papally -papalty -papane -papaphobia -papaphobist -papaprelatical -papaprelatist -paparchical -paparchy -papaship -Papaver -Papaveraceae -papaveraceous -Papaverales -papaverine -papaverous -papaw -papaya -Papayaceae -papayaceous -papayotin -papboat -pape -papelonne -paper -paperback -paperbark -paperboard -papered -paperer -paperful -paperiness -papering -paperlike -papermaker -papermaking -papermouth -papern -papershell -paperweight -papery -papess -papeterie -papey -Paphian -Paphiopedilum -Papiamento -papicolar -papicolist -Papilio -Papilionaceae -papilionaceous -Papiliones -papilionid -Papilionidae -Papilionides -Papilioninae -papilionine -papilionoid -Papilionoidea -papilla -papillae -papillar -papillary -papillate -papillated -papillectomy -papilledema -papilliferous -papilliform -papillitis -papilloadenocystoma -papillocarcinoma -papilloedema -papilloma -papillomatosis -papillomatous -papillon -papilloretinitis -papillosarcoma -papillose -papillosity -papillote -papillous -papillulate -papillule -Papinachois -Papio -papion -papish -papisher -papism -Papist -papist -papistic -papistical -papistically -papistlike -papistly -papistry -papize -papless -papmeat -papolater -papolatrous -papolatry -papoose -papooseroot -Pappea -pappescent -pappi -pappiferous -pappiform -pappose -pappox -pappus -pappy -papreg -paprica -paprika -Papuan -papula -papular -papulate -papulated -papulation -papule -papuliferous -papuloerythematous -papulopustular -papulopustule -papulose -papulosquamous -papulous -papulovesicular -papyr -papyraceous -papyral -papyrean -papyri -papyrian -papyrin -papyrine -papyritious -papyrocracy -papyrograph -papyrographer -papyrographic -papyrography -papyrological -papyrologist -papyrology -papyrophobia -papyroplastics -papyrotamia -papyrotint -papyrotype -papyrus -Paque -paquet -par -para -paraaminobenzoic -parabanate -parabanic -parabaptism -parabaptization -parabasal -parabasic -parabasis -parabema -parabematic -parabenzoquinone -parabiosis -parabiotic -parablast -parablastic -parable -parablepsia -parablepsis -parablepsy -parableptic -parabola -parabolanus -parabolic -parabolical -parabolicalism -parabolically -parabolicness -paraboliform -parabolist -parabolization -parabolize -parabolizer -paraboloid -paraboloidal -parabomb -parabotulism -parabranchia -parabranchial -parabranchiate -parabulia -parabulic -paracanthosis -paracarmine -paracasein -paracaseinate -Paracelsian -Paracelsianism -Paracelsic -Paracelsist -Paracelsistic -Paracelsus -paracentesis -paracentral -paracentric -paracentrical -paracephalus -paracerebellar -paracetaldehyde -parachaplain -paracholia -parachor -parachordal -parachrea -parachroia -parachroma -parachromatism -parachromatophorous -parachromatopsia -parachromatosis -parachrome -parachromoparous -parachromophoric -parachromophorous -parachronism -parachronistic -parachrose -parachute -parachutic -parachutism -parachutist -paraclete -paracmasis -paracme -paracoele -paracoelian -paracolitis -paracolon -paracolpitis -paracolpium -paracondyloid -paracone -paraconic -paraconid -paraconscious -paracorolla -paracotoin -paracoumaric -paracresol -Paracress -paracusia -paracusic -paracyanogen -paracyesis -paracymene -paracystic -paracystitis -paracystium -parade -paradeful -paradeless -paradelike -paradenitis -paradental -paradentitis -paradentium -parader -paraderm -paradiastole -paradiazine -paradichlorbenzene -paradichlorbenzol -paradichlorobenzene -paradichlorobenzol -paradidymal -paradidymis -paradigm -paradigmatic -paradigmatical -paradigmatically -paradigmatize -parading -paradingly -paradiplomatic -paradisaic -paradisaically -paradisal -paradise -Paradisea -paradisean -Paradiseidae -Paradiseinae -Paradisia -paradisiac -paradisiacal -paradisiacally -paradisial -paradisian -paradisic -paradisical -parado -paradoctor -parados -paradoses -paradox -paradoxal -paradoxer -paradoxial -paradoxic -paradoxical -paradoxicalism -paradoxicality -paradoxically -paradoxicalness -paradoxician -Paradoxides -paradoxidian -paradoxism -paradoxist -paradoxographer -paradoxographical -paradoxology -paradoxure -Paradoxurinae -paradoxurine -Paradoxurus -paradoxy -paradromic -paraenesis -paraenesize -paraenetic -paraenetical -paraengineer -paraffin -paraffine -paraffiner -paraffinic -paraffinize -paraffinoid -paraffiny -paraffle -parafle -parafloccular -paraflocculus -paraform -paraformaldehyde -parafunction -paragammacism -paraganglion -paragaster -paragastral -paragastric -paragastrula -paragastrular -parage -paragenesia -paragenesis -paragenetic -paragenic -paragerontic -parageusia -parageusic -parageusis -paragglutination -paraglenal -paraglobin -paraglobulin -paraglossa -paraglossal -paraglossate -paraglossia -paraglycogen -paragnath -paragnathism -paragnathous -paragnathus -paragneiss -paragnosia -paragoge -paragogic -paragogical -paragogically -paragogize -paragon -paragonimiasis -Paragonimus -paragonite -paragonitic -paragonless -paragram -paragrammatist -paragraph -paragrapher -paragraphia -paragraphic -paragraphical -paragraphically -paragraphism -paragraphist -paragraphistical -paragraphize -Paraguay -Paraguayan -parah -paraheliotropic -paraheliotropism -parahematin -parahemoglobin -parahepatic -Parahippus -parahopeite -parahormone -parahydrogen -paraiba -Paraiyan -parakeet -parakeratosis -parakilya -parakinesia -parakinetic -paralactate -paralalia -paralambdacism -paralambdacismus -paralaurionite -paraldehyde -parale -paralectotype -paraleipsis -paralepsis -paralexia -paralexic -paralgesia -paralgesic -paralinin -paralipomena -Paralipomenon -paralipsis -paralitical -parallactic -parallactical -parallactically -parallax -parallel -parallelable -parallelepiped -parallelepipedal -parallelepipedic -parallelepipedon -parallelepipedonal -paralleler -parallelinervate -parallelinerved -parallelinervous -parallelism -parallelist -parallelistic -parallelith -parallelization -parallelize -parallelizer -parallelless -parallelly -parallelodrome -parallelodromous -parallelogram -parallelogrammatic -parallelogrammatical -parallelogrammic -parallelogrammical -parallelograph -parallelometer -parallelopiped -parallelopipedon -parallelotropic -parallelotropism -parallelwise -parallepipedous -paralogia -paralogical -paralogician -paralogism -paralogist -paralogistic -paralogize -paralogy -paraluminite -paralyses -paralysis -paralytic -paralytical -paralytically -paralyzant -paralyzation -paralyze -paralyzedly -paralyzer -paralyzingly -param -paramagnet -paramagnetic -paramagnetism -paramandelic -paramarine -paramastigate -paramastitis -paramastoid -paramatta -Paramecidae -Paramecium -paramedian -paramelaconite -paramenia -parament -paramere -parameric -parameron -paramese -paramesial -parameter -parametric -parametrical -parametritic -parametritis -parametrium -paramide -paramilitary -paramimia -paramine -paramiographer -paramitome -paramnesia -paramo -Paramoecium -paramorph -paramorphia -paramorphic -paramorphine -paramorphism -paramorphosis -paramorphous -paramount -paramountcy -paramountly -paramountness -paramountship -paramour -paramuthetic -paramyelin -paramylum -paramyoclonus -paramyosinogen -paramyotone -paramyotonia -paranasal -paranatellon -parandrus -paranema -paranematic -paranephric -paranephritic -paranephritis -paranephros -paranepionic -paranete -parang -paranitraniline -paranitrosophenol -paranoia -paranoiac -paranoid -paranoidal -paranoidism -paranomia -paranormal -paranosic -paranthelion -paranthracene -Paranthropus -paranuclear -paranucleate -paranucleic -paranuclein -paranucleinic -paranucleus -paranymph -paranymphal -parao -paraoperation -Parapaguridae -paraparesis -paraparetic -parapathia -parapathy -parapegm -parapegma -paraperiodic -parapet -parapetalous -parapeted -parapetless -paraph -paraphasia -paraphasic -paraphemia -paraphenetidine -paraphenylene -paraphenylenediamine -parapherna -paraphernal -paraphernalia -paraphernalian -paraphia -paraphilia -paraphimosis -paraphonia -paraphonic -paraphototropism -paraphrasable -paraphrase -paraphraser -paraphrasia -paraphrasian -paraphrasis -paraphrasist -paraphrast -paraphraster -paraphrastic -paraphrastical -paraphrastically -paraphrenia -paraphrenic -paraphrenitis -paraphyllium -paraphysate -paraphysical -paraphysiferous -paraphysis -paraplasis -paraplasm -paraplasmic -paraplastic -paraplastin -paraplectic -paraplegia -paraplegic -paraplegy -parapleuritis -parapleurum -parapod -parapodial -parapodium -parapophysial -parapophysis -parapraxia -parapraxis -paraproctitis -paraproctium -paraprostatitis -Parapsida -parapsidal -parapsidan -parapsis -parapsychical -parapsychism -parapsychological -parapsychology -parapsychosis -parapteral -parapteron -parapterum -paraquadrate -paraquinone -Pararctalia -Pararctalian -pararectal -pararek -parareka -pararhotacism -pararosaniline -pararosolic -pararthria -parasaboteur -parasalpingitis -parasang -parascene -parascenium -parasceve -paraschematic -parasecretion -paraselene -paraselenic -parasemidin -parasemidine -parasexuality -parashah -parasigmatism -parasigmatismus -Parasita -parasital -parasitary -parasite -parasitelike -parasitemia -parasitic -Parasitica -parasitical -parasitically -parasiticalness -parasiticidal -parasiticide -Parasitidae -parasitism -parasitize -parasitogenic -parasitoid -parasitoidism -parasitological -parasitologist -parasitology -parasitophobia -parasitosis -parasitotrope -parasitotropic -parasitotropism -parasitotropy -paraskenion -parasol -parasoled -parasolette -paraspecific -parasphenoid -parasphenoidal -paraspotter -paraspy -parastas -parastatic -parastemon -parastemonal -parasternal -parasternum -parastichy -parastyle -parasubphonate -parasubstituted -Parasuchia -parasuchian -parasympathetic -parasympathomimetic -parasynapsis -parasynaptic -parasynaptist -parasyndesis -parasynesis -parasynetic -parasynovitis -parasynthesis -parasynthetic -parasyntheton -parasyphilis -parasyphilitic -parasyphilosis -parasystole -paratactic -paratactical -paratactically -paratartaric -parataxis -parate -paraterminal -Paratheria -paratherian -parathesis -parathetic -parathion -parathormone -parathymic -parathyroid -parathyroidal -parathyroidectomize -parathyroidectomy -parathyroprival -parathyroprivia -parathyroprivic -paratitla -paratitles -paratoloid -paratoluic -paratoluidine -paratomial -paratomium -paratonic -paratonically -paratorium -paratory -paratracheal -paratragedia -paratragoedia -paratransversan -paratrichosis -paratrimma -paratriptic -paratroop -paratrooper -paratrophic -paratrophy -paratuberculin -paratuberculosis -paratuberculous -paratungstate -paratungstic -paratype -paratyphlitis -paratyphoid -paratypic -paratypical -paratypically -paravaginitis -paravail -paravane -paravauxite -paravent -paravertebral -paravesical -paraxial -paraxially -paraxon -paraxonic -paraxylene -Parazoa -parazoan -parazonium -parbake -Parbate -parboil -parbuckle -parcel -parceling -parcellary -parcellate -parcellation -parcelling -parcellization -parcellize -parcelment -parcelwise -parcenary -parcener -parcenership -parch -parchable -parchedly -parchedness -parcheesi -parchemin -parcher -parchesi -parching -parchingly -parchisi -parchment -parchmenter -parchmentize -parchmentlike -parchmenty -parchy -parcidentate -parciloquy -parclose -parcook -pard -pardalote -Pardanthus -pardao -parded -pardesi -pardine -pardner -pardnomastic -pardo -pardon -pardonable -pardonableness -pardonably -pardonee -pardoner -pardoning -pardonless -pardonmonger -pare -paregoric -Pareiasauri -Pareiasauria -pareiasaurian -Pareiasaurus -Pareioplitae -parel -parelectronomic -parelectronomy -parella -paren -parencephalic -parencephalon -parenchym -parenchyma -parenchymal -parenchymatic -parenchymatitis -parenchymatous -parenchymatously -parenchyme -parenchymous -parent -parentage -parental -Parentalia -parentalism -parentality -parentally -parentdom -parentela -parentelic -parenteral -parenterally -parentheses -parenthesis -parenthesize -parenthetic -parenthetical -parentheticality -parenthetically -parentheticalness -parenthood -parenticide -parentless -parentlike -parentship -Pareoean -parepididymal -parepididymis -parepigastric -parer -parerethesis -parergal -parergic -parergon -paresis -paresthesia -paresthesis -paresthetic -parethmoid -paretic -paretically -pareunia -parfait -parfilage -parfleche -parfocal -pargana -pargasite -parge -pargeboard -parget -pargeter -pargeting -pargo -parhelia -parheliacal -parhelic -parhelion -parhomologous -parhomology -parhypate -pari -pariah -pariahdom -pariahism -pariahship -parial -Parian -parian -Pariasauria -Pariasaurus -Paridae -paridigitate -paridrosis -paries -parietal -Parietales -Parietaria -parietary -parietes -parietofrontal -parietojugal -parietomastoid -parietoquadrate -parietosphenoid -parietosphenoidal -parietosplanchnic -parietosquamosal -parietotemporal -parietovaginal -parietovisceral -parify -parigenin -pariglin -Parilia -Parilicium -parilla -parillin -parimutuel -Parinarium -parine -paring -paripinnate -Paris -parish -parished -parishen -parishional -parishionally -parishionate -parishioner -parishionership -Parisian -Parisianism -Parisianization -Parisianize -Parisianly -Parisii -parisis -parisology -parison -parisonic -paristhmic -paristhmion -parisyllabic -parisyllabical -Pariti -Paritium -parity -parivincular -park -parka -parkee -parker -parkin -parking -Parkinsonia -Parkinsonism -parkish -parklike -parkward -parkway -parky -parlamento -parlance -parlando -Parlatoria -parlatory -parlay -parle -parley -parleyer -parliament -parliamental -parliamentarian -parliamentarianism -parliamentarily -parliamentariness -parliamentarism -parliamentarization -parliamentarize -parliamentary -parliamenteer -parliamenteering -parliamenter -parling -parlish -parlor -parlorish -parlormaid -parlous -parlously -parlousness -parly -Parma -parma -parmacety -parmak -Parmelia -Parmeliaceae -parmeliaceous -parmelioid -Parmentiera -Parmesan -Parmese -parnas -Parnassia -Parnassiaceae -parnassiaceous -Parnassian -Parnassianism -Parnassiinae -Parnassism -Parnassus -parnel -Parnellism -Parnellite -parnorpine -paroarion -paroarium -paroccipital -paroch -parochial -parochialic -parochialism -parochialist -parochiality -parochialization -parochialize -parochially -parochialness -parochin -parochine -parochiner -parode -parodiable -parodial -parodic -parodical -parodinia -parodist -parodistic -parodistically -parodize -parodontitis -parodos -parody -parodyproof -paroecious -paroeciously -paroeciousness -paroecism -paroecy -paroemia -paroemiac -paroemiographer -paroemiography -paroemiologist -paroemiology -paroicous -parol -parolable -parole -parolee -parolfactory -paroli -parolist -paromoeon -paromologetic -paromologia -paromology -paromphalocele -paromphalocelic -paronomasia -paronomasial -paronomasian -paronomasiastic -paronomastical -paronomastically -paronychia -paronychial -paronychium -paronym -paronymic -paronymization -paronymize -paronymous -paronymy -paroophoric -paroophoritis -paroophoron -paropsis -paroptesis -paroptic -parorchid -parorchis -parorexia -Parosela -parosmia -parosmic -parosteal -parosteitis -parosteosis -parostosis -parostotic -Parotia -parotic -parotid -parotidean -parotidectomy -parotiditis -parotis -parotitic -parotitis -parotoid -parous -parousia -parousiamania -parovarian -parovariotomy -parovarium -paroxazine -paroxysm -paroxysmal -paroxysmalist -paroxysmally -paroxysmic -paroxysmist -paroxytone -paroxytonic -paroxytonize -parpal -parquet -parquetage -parquetry -parr -Parra -parrel -parrhesia -parrhesiastic -parriable -parricidal -parricidally -parricide -parricided -parricidial -parricidism -Parridae -parrier -parrock -parrot -parroter -parrothood -parrotism -parrotize -parrotlet -parrotlike -parrotry -parrotwise -parroty -parry -parsable -parse -parsec -Parsee -Parseeism -parser -parsettensite -Parsi -Parsic -Parsiism -parsimonious -parsimoniously -parsimoniousness -parsimony -Parsism -parsley -parsleylike -parsleywort -parsnip -parson -parsonage -parsonarchy -parsondom -parsoned -parsonese -parsoness -parsonet -parsonhood -parsonic -parsonical -parsonically -parsoning -parsonish -parsonity -parsonize -parsonlike -parsonly -parsonolatry -parsonology -parsonry -parsonship -Parsonsia -parsonsite -parsony -Part -part -partakable -partake -partaker -partan -partanfull -partanhanded -parted -partedness -parter -parterre -parterred -partheniad -Partheniae -parthenian -parthenic -Parthenium -parthenocarpelly -parthenocarpic -parthenocarpical -parthenocarpically -parthenocarpous -parthenocarpy -Parthenocissus -parthenogenesis -parthenogenetic -parthenogenetically -parthenogenic -parthenogenitive -parthenogenous -parthenogeny -parthenogonidium -Parthenolatry -parthenology -Parthenon -Parthenopaeus -parthenoparous -Parthenope -Parthenopean -Parthenos -parthenosperm -parthenospore -Parthian -partial -partialism -partialist -partialistic -partiality -partialize -partially -partialness -partiary -partible -particate -participability -participable -participance -participancy -participant -participantly -participate -participatingly -participation -participative -participatively -participator -participatory -participatress -participial -participiality -participialize -participially -participle -particle -particled -particular -particularism -particularist -particularistic -particularistically -particularity -particularization -particularize -particularly -particularness -particulate -partigen -partile -partimembered -partimen -partinium -partisan -partisanism -partisanize -partisanship -partite -partition -partitional -partitionary -partitioned -partitioner -partitioning -partitionist -partitionment -partitive -partitively -partitura -partiversal -partivity -partless -partlet -partly -partner -partnerless -partnership -parto -partook -partridge -partridgeberry -partridgelike -partridgewood -partridging -partschinite -parture -parturiate -parturience -parturiency -parturient -parturifacient -parturition -parturitive -party -partyism -partyist -partykin -partyless -partymonger -partyship -Parukutu -parulis -parumbilical -parure -paruria -Parus -parvanimity -parvenu -parvenudom -parvenuism -parvicellular -parviflorous -parvifoliate -parvifolious -parvipotent -parvirostrate -parvis -parviscient -parvitude -parvolin -parvoline -parvule -paryphodrome -pasan -pasang -Pascal -Pasch -Pascha -paschal -paschalist -Paschaltide -paschite -pascoite -pascuage -pascual -pascuous -pasgarde -pash -pasha -pashadom -pashalik -pashaship -pashm -pashmina -Pashto -pasi -pasigraphic -pasigraphical -pasigraphy -pasilaly -Pasitelean -pasmo -Paspalum -pasqueflower -pasquil -pasquilant -pasquiler -pasquilic -Pasquin -pasquin -pasquinade -pasquinader -Pasquinian -Pasquino -pass -passable -passableness -passably -passade -passado -passage -passageable -passageway -Passagian -passalid -Passalidae -Passalus -Passamaquoddy -passant -passback -passbook -Passe -passe -passee -passegarde -passement -passementerie -passen -passenger -Passer -passer -Passeres -passeriform -Passeriformes -Passerina -passerine -passewa -passibility -passible -passibleness -Passiflora -Passifloraceae -passifloraceous -Passiflorales -passimeter -passing -passingly -passingness -passion -passional -passionary -passionate -passionately -passionateness -passionative -passioned -passionflower -passionful -passionfully -passionfulness -Passionist -passionist -passionless -passionlessly -passionlessness -passionlike -passionometer -passionproof -Passiontide -passionwise -passionwort -passir -passival -passivate -passivation -passive -passively -passiveness -passivism -passivist -passivity -passkey -passless -passman -passo -passometer -passout -passover -passoverish -passpenny -passport -passportless -passulate -passulation -passus -passway -passwoman -password -passworts -passymeasure -past -paste -pasteboard -pasteboardy -pasted -pastedness -pastedown -pastel -pastelist -paster -pasterer -pastern -pasterned -pasteur -Pasteurella -Pasteurelleae -pasteurellosis -Pasteurian -pasteurism -pasteurization -pasteurize -pasteurizer -pastiche -pasticheur -pastil -pastile -pastille -pastime -pastimer -Pastinaca -pastiness -pasting -pastness -pastophor -pastophorion -pastophorium -pastophorus -pastor -pastorage -pastoral -pastorale -pastoralism -pastoralist -pastorality -pastoralize -pastorally -pastoralness -pastorate -pastoress -pastorhood -pastorium -pastorize -pastorless -pastorlike -pastorling -pastorly -pastorship -pastose -pastosity -pastrami -pastry -pastryman -pasturability -pasturable -pasturage -pastural -pasture -pastureless -pasturer -pasturewise -pasty -pasul -Pat -pat -pata -pataca -patacao -pataco -patagial -patagiate -patagium -Patagon -patagon -Patagones -Patagonian -pataka -patamar -patao -patapat -pataque -Pataria -Patarin -Patarine -Patarinism -patas -patashte -Patavian -patavinity -patball -patballer -patch -patchable -patcher -patchery -patchily -patchiness -patchleaf -patchless -patchouli -patchwise -patchword -patchwork -patchworky -patchy -pate -patefaction -patefy -patel -patella -patellar -patellaroid -patellate -Patellidae -patellidan -patelliform -patelline -patellofemoral -patelloid -patellula -patellulate -paten -patency -patener -patent -patentability -patentable -patentably -patentee -patently -patentor -pater -patera -patercove -paterfamiliar -paterfamiliarly -paterfamilias -pateriform -paterissa -paternal -paternalism -paternalist -paternalistic -paternalistically -paternality -paternalize -paternally -paternity -paternoster -paternosterer -patesi -patesiate -path -Pathan -pathbreaker -pathed -pathema -pathematic -pathematically -pathematology -pathetic -pathetical -pathetically -patheticalness -patheticate -patheticly -patheticness -pathetism -pathetist -pathetize -pathfarer -pathfinder -pathfinding -pathic -pathicism -pathless -pathlessness -pathlet -pathoanatomical -pathoanatomy -pathobiological -pathobiologist -pathobiology -pathochemistry -pathodontia -pathogen -pathogene -pathogenesis -pathogenesy -pathogenetic -pathogenic -pathogenicity -pathogenous -pathogeny -pathogerm -pathogermic -pathognomic -pathognomical -pathognomonic -pathognomonical -pathognomy -pathognostic -pathographical -pathography -pathologic -pathological -pathologically -pathologicoanatomic -pathologicoanatomical -pathologicoclinical -pathologicohistological -pathologicopsychological -pathologist -pathology -patholysis -patholytic -pathomania -pathometabolism -pathomimesis -pathomimicry -pathoneurosis -pathonomia -pathonomy -pathophobia -pathophoresis -pathophoric -pathophorous -pathoplastic -pathoplastically -pathopoeia -pathopoiesis -pathopoietic -pathopsychology -pathopsychosis -pathoradiography -pathos -pathosocial -Pathrusim -pathway -pathwayed -pathy -patible -patibulary -patibulate -patience -patiency -patient -patientless -patiently -patientness -patina -patinate -patination -patine -patined -patinize -patinous -patio -patisserie -patly -Patmian -Patmos -patness -patnidar -pato -patois -patola -patonce -patria -patrial -patriarch -patriarchal -patriarchalism -patriarchally -patriarchate -patriarchdom -patriarched -patriarchess -patriarchic -patriarchical -patriarchically -patriarchism -patriarchist -patriarchship -patriarchy -Patrice -patrice -Patricia -Patrician -patrician -patricianhood -patricianism -patricianly -patricianship -patriciate -patricidal -patricide -Patricio -Patrick -patrico -patrilineal -patrilineally -patrilinear -patriliny -patrilocal -patrimonial -patrimonially -patrimony -patrin -Patriofelis -patriolatry -patriot -patrioteer -patriotess -patriotic -patriotical -patriotically -patriotics -patriotism -patriotly -patriotship -Patripassian -Patripassianism -Patripassianist -Patripassianly -patrist -patristic -patristical -patristically -patristicalness -patristicism -patristics -patrix -patrizate -patrization -patrocinium -patroclinic -patroclinous -patrocliny -patrogenesis -patrol -patroller -patrollotism -patrolman -patrologic -patrological -patrologist -patrology -patron -patronage -patronal -patronate -patrondom -patroness -patronessship -patronite -patronizable -patronization -patronize -patronizer -patronizing -patronizingly -patronless -patronly -patronomatology -patronship -patronym -patronymic -patronymically -patronymy -patroon -patroonry -patroonship -patruity -Patsy -patta -pattable -patte -pattee -patten -pattened -pattener -patter -patterer -patterist -pattern -patternable -patterned -patterner -patterning -patternize -patternless -patternlike -patternmaker -patternmaking -patternwise -patterny -pattu -Patty -patty -pattypan -patu -patulent -patulous -patulously -patulousness -Patuxent -patwari -Patwin -paty -pau -pauciarticulate -pauciarticulated -paucidentate -pauciflorous -paucifoliate -paucifolious -paucify -paucijugate -paucilocular -pauciloquent -pauciloquently -pauciloquy -paucinervate -paucipinnate -pauciplicate -pauciradiate -pauciradiated -paucispiral -paucispirated -paucity -paughty -paukpan -Paul -Paula -paular -pauldron -Pauliad -Paulian -Paulianist -Pauliccian -Paulicianism -paulie -paulin -Paulina -Pauline -Paulinia -Paulinian -Paulinism -Paulinist -Paulinistic -Paulinistically -Paulinity -Paulinize -Paulinus -Paulism -Paulist -Paulista -Paulite -paulopast -paulopost -paulospore -Paulownia -Paulus -Paumari -paunch -paunched -paunchful -paunchily -paunchiness -paunchy -paup -pauper -pauperage -pauperate -pauperdom -pauperess -pauperism -pauperitic -pauperization -pauperize -pauperizer -Paurometabola -paurometabolic -paurometabolism -paurometabolous -paurometaboly -pauropod -Pauropoda -pauropodous -pausably -pausal -pausation -pause -pauseful -pausefully -pauseless -pauselessly -pausement -pauser -pausingly -paussid -Paussidae -paut -pauxi -pavage -pavan -pavane -pave -pavement -pavemental -paver -pavestone -Pavetta -Pavia -pavid -pavidity -pavier -pavilion -paving -pavior -Paviotso -paviour -pavis -pavisade -pavisado -paviser -pavisor -Pavo -pavonated -pavonazzetto -pavonazzo -Pavoncella -Pavonia -pavonian -pavonine -pavonize -pavy -paw -pawdite -pawer -pawing -pawk -pawkery -pawkily -pawkiness -pawkrie -pawky -pawl -pawn -pawnable -pawnage -pawnbroker -pawnbrokerage -pawnbrokeress -pawnbrokering -pawnbrokery -pawnbroking -Pawnee -pawnee -pawner -pawnie -pawnor -pawnshop -pawpaw -Pawtucket -pax -paxilla -paxillar -paxillary -paxillate -paxilliferous -paxilliform -Paxillosa -paxillose -paxillus -paxiuba -paxwax -pay -payability -payable -payableness -payably -Payagua -Payaguan -payday -payed -payee -payeny -payer -paying -paymaster -paymastership -payment -paymistress -Payni -paynim -paynimhood -paynimry -Paynize -payoff -payong -payor -payroll -paysagist -Pazend -pea -peaberry -peace -peaceable -peaceableness -peaceably -peacebreaker -peacebreaking -peaceful -peacefully -peacefulness -peaceless -peacelessness -peacelike -peacemaker -peacemaking -peaceman -peacemonger -peacemongering -peacetime -peach -peachberry -peachblossom -peachblow -peachen -peacher -peachery -peachick -peachify -peachiness -peachlet -peachlike -peachwood -peachwort -peachy -peacoat -peacock -peacockery -peacockish -peacockishly -peacockishness -peacockism -peacocklike -peacockly -peacockwise -peacocky -peacod -peafowl -peag -peage -peahen -peai -peaiism -peak -peaked -peakedly -peakedness -peaker -peakily -peakiness -peaking -peakish -peakishly -peakishness -peakless -peaklike -peakward -peaky -peakyish -peal -pealike -pean -peanut -pear -pearceite -pearl -pearlberry -pearled -pearler -pearlet -pearlfish -pearlfruit -pearlike -pearlin -pearliness -pearling -pearlish -pearlite -pearlitic -pearlsides -pearlstone -pearlweed -pearlwort -pearly -pearmain -pearmonger -peart -pearten -peartly -peartness -pearwood -peasant -peasantess -peasanthood -peasantism -peasantize -peasantlike -peasantly -peasantry -peasantship -peasecod -peaselike -peasen -peashooter -peason -peastake -peastaking -peastick -peasticking -peastone -peasy -peat -peatery -peathouse -peatman -peatship -peatstack -peatwood -peaty -peavey -peavy -Peba -peba -Peban -pebble -pebbled -pebblehearted -pebblestone -pebbleware -pebbly -pebrine -pebrinous -pecan -peccability -peccable -peccadillo -peccancy -peccant -peccantly -peccantness -peccary -peccation -peccavi -pech -pecht -pecite -peck -pecked -pecker -peckerwood -pecket -peckful -peckhamite -peckiness -peckish -peckishly -peckishness -peckle -peckled -peckly -Pecksniffian -Pecksniffianism -Pecksniffism -pecky -Pecopteris -pecopteroid -Pecora -Pecos -pectase -pectate -pecten -pectic -pectin -Pectinacea -pectinacean -pectinaceous -pectinal -pectinase -pectinate -pectinated -pectinately -pectination -pectinatodenticulate -pectinatofimbricate -pectinatopinnate -pectineal -pectineus -pectinibranch -Pectinibranchia -pectinibranchian -Pectinibranchiata -pectinibranchiate -pectinic -pectinid -Pectinidae -pectiniferous -pectiniform -pectinirostrate -pectinite -pectinogen -pectinoid -pectinose -pectinous -pectizable -pectization -pectize -pectocellulose -pectolite -pectora -pectoral -pectoralgia -pectoralis -pectoralist -pectorally -pectoriloquial -pectoriloquism -pectoriloquous -pectoriloquy -pectosase -pectose -pectosic -pectosinase -pectous -pectunculate -Pectunculus -pectus -peculate -peculation -peculator -peculiar -peculiarism -peculiarity -peculiarize -peculiarly -peculiarness -peculiarsome -peculium -pecuniarily -pecuniary -pecuniosity -pecunious -ped -peda -pedage -pedagog -pedagogal -pedagogic -pedagogical -pedagogically -pedagogics -pedagogism -pedagogist -pedagogue -pedagoguery -pedagoguish -pedagoguism -pedagogy -pedal -pedaler -pedalfer -pedalferic -Pedaliaceae -pedaliaceous -pedalian -pedalier -Pedalion -pedalism -pedalist -pedaliter -pedality -Pedalium -pedanalysis -pedant -pedantesque -pedantess -pedanthood -pedantic -pedantical -pedantically -pedanticalness -pedanticism -pedanticly -pedanticness -pedantism -pedantize -pedantocracy -pedantocrat -pedantocratic -pedantry -pedary -Pedata -pedate -pedated -pedately -pedatifid -pedatiform -pedatilobate -pedatilobed -pedatinerved -pedatipartite -pedatisect -pedatisected -pedatrophia -pedder -peddle -peddler -peddleress -peddlerism -peddlery -peddling -peddlingly -pedee -pedelion -pederast -pederastic -pederastically -pederasty -pedes -pedesis -pedestal -pedestrial -pedestrially -pedestrian -pedestrianate -pedestrianism -pedestrianize -pedetentous -Pedetes -Pedetidae -Pedetinae -pediadontia -pediadontic -pediadontist -pedialgia -Pediastrum -pediatric -pediatrician -pediatrics -pediatrist -pediatry -pedicab -pedicel -pediceled -pedicellar -pedicellaria -pedicellate -pedicellated -pedicellation -pedicelled -pedicelliform -Pedicellina -pedicellus -pedicle -pedicular -Pedicularia -Pedicularis -pediculate -pediculated -Pediculati -pedicule -Pediculi -pediculicidal -pediculicide -pediculid -Pediculidae -Pediculina -pediculine -pediculofrontal -pediculoid -pediculoparietal -pediculophobia -pediculosis -pediculous -Pediculus -pedicure -pedicurism -pedicurist -pediferous -pediform -pedigerous -pedigraic -pedigree -pedigreeless -pediluvium -Pedimana -pedimanous -pediment -pedimental -pedimented -pedimentum -Pedioecetes -pedion -pedionomite -Pedionomus -pedipalp -pedipalpal -pedipalpate -Pedipalpi -Pedipalpida -pedipalpous -pedipalpus -pedipulate -pedipulation -pedipulator -pedlar -pedlary -pedobaptism -pedobaptist -pedocal -pedocalcic -pedodontia -pedodontic -pedodontist -pedodontology -pedograph -pedological -pedologist -pedologistical -pedologistically -pedology -pedometer -pedometric -pedometrical -pedometrically -pedometrician -pedometrist -pedomorphic -pedomorphism -pedomotive -pedomotor -pedophilia -pedophilic -pedotribe -pedotrophic -pedotrophist -pedotrophy -pedrail -pedregal -pedrero -Pedro -pedro -pedule -pedum -peduncle -peduncled -peduncular -Pedunculata -pedunculate -pedunculated -pedunculation -pedunculus -pee -peed -peek -peekaboo -peel -peelable -peele -peeled -peeledness -peeler -peelhouse -peeling -Peelism -Peelite -peelman -peen -peenge -peeoy -peep -peeper -peepeye -peephole -peepy -peer -peerage -peerdom -peeress -peerhood -peerie -peeringly -peerless -peerlessly -peerlessness -peerling -peerly -peership -peery -peesash -peesoreh -peesweep -peetweet -peeve -peeved -peevedly -peevedness -peever -peevish -peevishly -peevishness -peewee -Peg -peg -pega -pegall -peganite -Peganum -Pegasean -Pegasian -Pegasid -pegasid -Pegasidae -pegasoid -Pegasus -pegboard -pegbox -pegged -pegger -pegging -peggle -Peggy -peggy -pegless -peglet -peglike -pegman -pegmatite -pegmatitic -pegmatization -pegmatize -pegmatoid -pegmatophyre -pegology -pegomancy -Peguan -pegwood -Pehlevi -peho -Pehuenche -peignoir -peine -peirameter -peirastic -peirastically -peisage -peise -peiser -Peitho -peixere -pejorate -pejoration -pejorationist -pejorative -pejoratively -pejorism -pejorist -pejority -pekan -Pekin -pekin -Peking -Pekingese -pekoe -peladic -pelage -pelagial -Pelagian -pelagian -Pelagianism -Pelagianize -Pelagianizer -pelagic -Pelagothuria -pelamyd -pelanos -Pelargi -pelargic -Pelargikon -pelargomorph -Pelargomorphae -pelargomorphic -pelargonate -pelargonic -pelargonidin -pelargonin -pelargonium -Pelasgi -Pelasgian -Pelasgic -Pelasgikon -Pelasgoi -Pele -pelean -pelecan -Pelecani -Pelecanidae -Pelecaniformes -Pelecanoides -Pelecanoidinae -Pelecanus -pelecypod -Pelecypoda -pelecypodous -pelelith -pelerine -Peleus -Pelew -pelf -Pelias -pelican -pelicanry -pelick -pelicometer -Pelides -Pelidnota -pelike -peliom -pelioma -peliosis -pelisse -pelite -pelitic -pell -Pellaea -pellage -pellagra -pellagragenic -pellagrin -pellagrose -pellagrous -pellar -pellard -pellas -pellate -pellation -peller -pellet -pelleted -pelletierine -pelletlike -pellety -Pellian -pellicle -pellicula -pellicular -pellicularia -pelliculate -pellicule -pellile -pellitory -pellmell -pellock -pellotine -pellucent -pellucid -pellucidity -pellucidly -pellucidness -Pelmanism -Pelmanist -Pelmanize -pelmatic -pelmatogram -Pelmatozoa -pelmatozoan -pelmatozoic -pelmet -Pelobates -pelobatid -Pelobatidae -pelobatoid -Pelodytes -pelodytid -Pelodytidae -pelodytoid -Pelomedusa -pelomedusid -Pelomedusidae -pelomedusoid -Pelomyxa -pelon -Pelopaeus -Pelopid -Pelopidae -Peloponnesian -Pelops -peloria -pelorian -peloriate -peloric -pelorism -pelorization -pelorize -pelorus -pelota -pelotherapy -peloton -pelt -pelta -Peltandra -peltast -peltate -peltated -peltately -peltatifid -peltation -peltatodigitate -pelter -pelterer -peltiferous -peltifolious -peltiform -Peltigera -Peltigeraceae -peltigerine -peltigerous -peltinerved -pelting -peltingly -peltless -peltmonger -Peltogaster -peltry -pelu -peludo -Pelusios -pelveoperitonitis -pelves -Pelvetia -pelvic -pelviform -pelvigraph -pelvigraphy -pelvimeter -pelvimetry -pelviolithotomy -pelvioperitonitis -pelvioplasty -pelvioradiography -pelvioscopy -pelviotomy -pelviperitonitis -pelvirectal -pelvis -pelvisacral -pelvisternal -pelvisternum -pelycogram -pelycography -pelycology -pelycometer -pelycometry -pelycosaur -Pelycosauria -pelycosaurian -pembina -Pembroke -pemican -pemmican -pemmicanization -pemmicanize -pemphigoid -pemphigous -pemphigus -pen -penacute -Penaea -Penaeaceae -penaeaceous -penal -penalist -penality -penalizable -penalization -penalize -penally -penalty -penance -penanceless -penang -penannular -penates -penbard -pencatite -pence -pencel -penceless -penchant -penchute -pencil -penciled -penciler -penciliform -penciling -pencilled -penciller -pencillike -pencilling -pencilry -pencilwood -pencraft -pend -penda -pendant -pendanted -pendanting -pendantlike -pendecagon -pendeloque -pendency -pendent -pendentive -pendently -pendicle -pendicler -pending -pendle -pendom -pendragon -pendragonish -pendragonship -pendulant -pendular -pendulate -pendulation -pendule -penduline -pendulosity -pendulous -pendulously -pendulousness -pendulum -pendulumlike -Penelope -Penelopean -Penelophon -Penelopinae -penelopine -peneplain -peneplanation -peneplane -peneseismic -penetrability -penetrable -penetrableness -penetrably -penetral -penetralia -penetralian -penetrance -penetrancy -penetrant -penetrate -penetrating -penetratingly -penetratingness -penetration -penetrative -penetratively -penetrativeness -penetrativity -penetrator -penetrology -penetrometer -penfieldite -penfold -penful -penghulu -pengo -penguin -penguinery -penhead -penholder -penial -penicillate -penicillated -penicillately -penicillation -penicilliform -penicillin -Penicillium -penide -penile -peninsula -peninsular -peninsularism -peninsularity -peninsulate -penintime -peninvariant -penis -penistone -penitence -penitencer -penitent -Penitentes -penitential -penitentially -penitentiary -penitentiaryship -penitently -penk -penkeeper -penknife -penlike -penmaker -penmaking -penman -penmanship -penmaster -penna -pennaceous -Pennacook -pennae -pennage -Pennales -pennant -Pennaria -Pennariidae -Pennatae -pennate -pennated -pennatifid -pennatilobate -pennatipartite -pennatisect -pennatisected -Pennatula -Pennatulacea -pennatulacean -pennatulaceous -pennatularian -pennatulid -Pennatulidae -pennatuloid -penneech -penneeck -penner -pennet -penni -pennia -pennied -penniferous -penniform -pennigerous -penniless -pennilessly -pennilessness -pennill -penninervate -penninerved -penning -penninite -pennipotent -Pennisetum -penniveined -pennon -pennoned -pennopluma -pennoplume -pennorth -Pennsylvania -Pennsylvanian -Penny -penny -pennybird -pennycress -pennyearth -pennyflower -pennyhole -pennyleaf -pennyrot -pennyroyal -pennysiller -pennystone -pennyweight -pennywinkle -pennywort -pennyworth -Penobscot -penologic -penological -penologist -penology -penorcon -penrack -penroseite -Pensacola -penscript -penseful -pensefulness -penship -pensile -pensileness -pensility -pension -pensionable -pensionably -pensionary -pensioner -pensionership -pensionless -pensive -pensived -pensively -pensiveness -penster -penstick -penstock -pensum -pensy -pent -penta -pentabasic -pentabromide -pentacapsular -pentacarbon -pentacarbonyl -pentacarpellary -pentace -pentacetate -pentachenium -pentachloride -pentachord -pentachromic -pentacid -pentacle -pentacoccous -pentacontane -pentacosane -Pentacrinidae -pentacrinite -pentacrinoid -Pentacrinus -pentacron -pentacrostic -pentactinal -pentactine -pentacular -pentacyanic -pentacyclic -pentad -pentadactyl -Pentadactyla -pentadactylate -pentadactyle -pentadactylism -pentadactyloid -pentadecagon -pentadecahydrate -pentadecahydrated -pentadecane -pentadecatoic -pentadecoic -pentadecyl -pentadecylic -pentadelphous -pentadicity -pentadiene -pentadodecahedron -pentadrachm -pentadrachma -pentaerythrite -pentaerythritol -pentafid -pentafluoride -pentagamist -pentaglossal -pentaglot -pentaglottical -pentagon -pentagonal -pentagonally -pentagonohedron -pentagonoid -pentagram -pentagrammatic -pentagyn -Pentagynia -pentagynian -pentagynous -pentahalide -pentahedral -pentahedrical -pentahedroid -pentahedron -pentahedrous -pentahexahedral -pentahexahedron -pentahydrate -pentahydrated -pentahydric -pentahydroxy -pentail -pentaiodide -pentalobate -pentalogue -pentalogy -pentalpha -Pentamera -pentameral -pentameran -pentamerid -Pentameridae -pentamerism -pentameroid -pentamerous -Pentamerus -pentameter -pentamethylene -pentamethylenediamine -pentametrist -pentametrize -pentander -Pentandria -pentandrian -pentandrous -pentane -pentanedione -pentangle -pentangular -pentanitrate -pentanoic -pentanolide -pentanone -pentapetalous -Pentaphylacaceae -pentaphylacaceous -Pentaphylax -pentaphyllous -pentaploid -pentaploidic -pentaploidy -pentapody -pentapolis -pentapolitan -pentapterous -pentaptote -pentaptych -pentaquine -pentarch -pentarchical -pentarchy -pentasepalous -pentasilicate -pentaspermous -pentaspheric -pentaspherical -pentastich -pentastichous -pentastichy -pentastome -Pentastomida -pentastomoid -pentastomous -Pentastomum -pentastyle -pentastylos -pentasulphide -pentasyllabic -pentasyllabism -pentasyllable -Pentateuch -Pentateuchal -pentateuchal -pentathionate -pentathionic -pentathlete -pentathlon -pentathlos -pentatomic -pentatomid -Pentatomidae -Pentatomoidea -pentatone -pentatonic -pentatriacontane -pentavalence -pentavalency -pentavalent -penteconter -pentecontoglossal -Pentecost -Pentecostal -pentecostal -pentecostalism -pentecostalist -pentecostarion -pentecoster -pentecostys -Pentelic -Pentelican -pentene -penteteric -penthemimer -penthemimeral -penthemimeris -Penthestes -penthiophen -penthiophene -Penthoraceae -Penthorum -penthouse -penthouselike -penthrit -penthrite -pentimento -pentine -pentiodide -pentit -pentite -pentitol -pentlandite -pentobarbital -pentode -pentoic -pentol -pentosan -pentosane -pentose -pentoside -pentosuria -pentoxide -pentremital -pentremite -Pentremites -Pentremitidae -pentrit -pentrite -pentrough -Pentstemon -pentstock -penttail -pentyl -pentylene -pentylic -pentylidene -pentyne -Pentzia -penuchi -penult -penultima -penultimate -penultimatum -penumbra -penumbrae -penumbral -penumbrous -penurious -penuriously -penuriousness -penury -Penutian -penwiper -penwoman -penwomanship -penworker -penwright -peon -peonage -peonism -peony -people -peopledom -peoplehood -peopleize -peopleless -peopler -peoplet -peoplish -Peoria -Peorian -peotomy -pep -peperine -peperino -Peperomia -pepful -Pephredo -pepinella -pepino -peplos -peplosed -peplum -peplus -pepo -peponida -peponium -pepper -pepperbox -peppercorn -peppercornish -peppercorny -pepperer -peppergrass -pepperidge -pepperily -pepperiness -pepperish -pepperishly -peppermint -pepperoni -pepperproof -pepperroot -pepperweed -pepperwood -pepperwort -peppery -peppily -peppin -peppiness -peppy -pepsin -pepsinate -pepsinhydrochloric -pepsiniferous -pepsinogen -pepsinogenic -pepsinogenous -pepsis -peptic -peptical -pepticity -peptidase -peptide -peptizable -peptization -peptize -peptizer -peptogaster -peptogenic -peptogenous -peptogeny -peptohydrochloric -peptolysis -peptolytic -peptonaemia -peptonate -peptone -peptonemia -peptonic -peptonization -peptonize -peptonizer -peptonoid -peptonuria -peptotoxine -Pepysian -Pequot -Per -per -Peracarida -peracephalus -peracetate -peracetic -peracid -peracidite -peract -peracute -peradventure -peragrate -peragration -Perakim -peramble -perambulant -perambulate -perambulation -perambulator -perambulatory -Perameles -Peramelidae -perameline -perameloid -Peramium -Peratae -Perates -perbend -perborate -perborax -perbromide -Perca -percale -percaline -percarbide -percarbonate -percarbonic -perceivability -perceivable -perceivableness -perceivably -perceivance -perceivancy -perceive -perceivedly -perceivedness -perceiver -perceiving -perceivingness -percent -percentable -percentably -percentage -percentaged -percental -percentile -percentual -percept -perceptibility -perceptible -perceptibleness -perceptibly -perception -perceptional -perceptionalism -perceptionism -perceptive -perceptively -perceptiveness -perceptivity -perceptual -perceptually -Percesoces -percesocine -Perceval -perch -percha -perchable -perchance -percher -Percheron -perchlorate -perchlorethane -perchlorethylene -perchloric -perchloride -perchlorinate -perchlorination -perchloroethane -perchloroethylene -perchromate -perchromic -percid -Percidae -perciform -Perciformes -percipience -percipiency -percipient -Percival -perclose -percnosome -percoct -percoid -Percoidea -percoidean -percolable -percolate -percolation -percolative -percolator -percomorph -Percomorphi -percomorphous -percompound -percontation -percontatorial -percribrate -percribration -percrystallization -perculsion -perculsive -percur -percurration -percurrent -percursory -percuss -percussion -percussional -percussioner -percussionist -percussionize -percussive -percussively -percussiveness -percussor -percutaneous -percutaneously -percutient -Percy -percylite -Perdicinae -perdicine -perdition -perditionable -Perdix -perdricide -perdu -perduellion -perdurability -perdurable -perdurableness -perdurably -perdurance -perdurant -perdure -perduring -perduringly -Perean -peregrin -peregrina -peregrinate -peregrination -peregrinator -peregrinatory -peregrine -peregrinity -peregrinoid -pereion -pereiopod -pereira -pereirine -peremptorily -peremptoriness -peremptory -perendinant -perendinate -perendination -perendure -perennate -perennation -perennial -perenniality -perennialize -perennially -perennibranch -Perennibranchiata -perennibranchiate -perequitate -peres -Pereskia -perezone -perfect -perfectation -perfected -perfectedly -perfecter -perfecti -perfectibilian -perfectibilism -perfectibilist -perfectibilitarian -perfectibility -perfectible -perfecting -perfection -perfectionate -perfectionation -perfectionator -perfectioner -perfectionism -perfectionist -perfectionistic -perfectionize -perfectionizement -perfectionizer -perfectionment -perfectism -perfectist -perfective -perfectively -perfectiveness -perfectivity -perfectivize -perfectly -perfectness -perfecto -perfector -perfectuation -perfervent -perfervid -perfervidity -perfervidly -perfervidness -perfervor -perfervour -perfidious -perfidiously -perfidiousness -perfidy -perfilograph -perflate -perflation -perfluent -perfoliate -perfoliation -perforable -perforant -Perforata -perforate -perforated -perforation -perforationproof -perforative -perforator -perforatorium -perforatory -perforce -perforcedly -perform -performable -performance -performant -performative -performer -perfrication -perfumatory -perfume -perfumed -perfumeless -perfumer -perfumeress -perfumery -perfumy -perfunctionary -perfunctorily -perfunctoriness -perfunctorious -perfunctoriously -perfunctorize -perfunctory -perfuncturate -perfusate -perfuse -perfusion -perfusive -Pergamene -pergameneous -Pergamenian -pergamentaceous -Pergamic -pergamyn -pergola -perhalide -perhalogen -perhaps -perhazard -perhorresce -perhydroanthracene -perhydrogenate -perhydrogenation -perhydrogenize -peri -periacinal -periacinous -periactus -periadenitis -periamygdalitis -perianal -periangiocholitis -periangioma -periangitis -perianth -perianthial -perianthium -periaortic -periaortitis -periapical -periappendicitis -periappendicular -periapt -Periarctic -periareum -periarterial -periarteritis -periarthric -periarthritis -periarticular -periaster -periastral -periastron -periastrum -periatrial -periauricular -periaxial -periaxillary -periaxonal -periblast -periblastic -periblastula -periblem -peribolos -peribolus -peribranchial -peribronchial -peribronchiolar -peribronchiolitis -peribronchitis -peribulbar -peribursal -pericaecal -pericaecitis -pericanalicular -pericapsular -pericardia -pericardiac -pericardiacophrenic -pericardial -pericardicentesis -pericardiectomy -pericardiocentesis -pericardiolysis -pericardiomediastinitis -pericardiophrenic -pericardiopleural -pericardiorrhaphy -pericardiosymphysis -pericardiotomy -pericarditic -pericarditis -pericardium -pericardotomy -pericarp -pericarpial -pericarpic -pericarpium -pericarpoidal -pericecal -pericecitis -pericellular -pericemental -pericementitis -pericementoclasia -pericementum -pericenter -pericentral -pericentric -pericephalic -pericerebral -perichaete -perichaetial -perichaetium -perichete -pericholangitis -pericholecystitis -perichondral -perichondrial -perichondritis -perichondrium -perichord -perichordal -perichoresis -perichorioidal -perichoroidal -perichylous -pericladium -periclase -periclasia -periclasite -periclaustral -Periclean -Pericles -periclinal -periclinally -pericline -periclinium -periclitate -periclitation -pericolitis -pericolpitis -periconchal -periconchitis -pericopal -pericope -pericopic -pericorneal -pericowperitis -pericoxitis -pericranial -pericranitis -pericranium -pericristate -Pericu -periculant -pericycle -pericycloid -pericyclone -pericyclonic -pericystic -pericystitis -pericystium -pericytial -peridendritic -peridental -peridentium -peridentoclasia -periderm -peridermal -peridermic -Peridermium -peridesm -peridesmic -peridesmitis -peridesmium -peridial -peridiastole -peridiastolic -perididymis -perididymitis -peridiiform -Peridineae -Peridiniaceae -peridiniaceous -peridinial -Peridiniales -peridinian -peridinid -Peridinidae -Peridinieae -Peridiniidae -Peridinium -peridiole -peridiolum -peridium -peridot -peridotic -peridotite -peridotitic -periductal -periegesis -periegetic -perielesis -periencephalitis -perienteric -perienteritis -perienteron -periependymal -periesophageal -periesophagitis -perifistular -perifoliary -perifollicular -perifolliculitis -perigangliitis -periganglionic -perigastric -perigastritis -perigastrula -perigastrular -perigastrulation -perigeal -perigee -perigemmal -perigenesis -perigenital -perigeum -periglandular -perigloea -periglottic -periglottis -perignathic -perigon -perigonadial -perigonal -perigone -perigonial -perigonium -perigraph -perigraphic -perigynial -perigynium -perigynous -perigyny -perihelial -perihelian -perihelion -perihelium -perihepatic -perihepatitis -perihermenial -perihernial -perihysteric -perijejunitis -perijove -perikaryon -perikronion -peril -perilabyrinth -perilabyrinthitis -perilaryngeal -perilaryngitis -perilenticular -periligamentous -Perilla -perilless -perilobar -perilous -perilously -perilousness -perilsome -perilymph -perilymphangial -perilymphangitis -perilymphatic -perimartium -perimastitis -perimedullary -perimeningitis -perimeter -perimeterless -perimetral -perimetric -perimetrical -perimetrically -perimetritic -perimetritis -perimetrium -perimetry -perimorph -perimorphic -perimorphism -perimorphous -perimyelitis -perimysial -perimysium -perine -perineal -perineocele -perineoplastic -perineoplasty -perineorrhaphy -perineoscrotal -perineostomy -perineosynthesis -perineotomy -perineovaginal -perineovulvar -perinephral -perinephrial -perinephric -perinephritic -perinephritis -perinephrium -perineptunium -perineum -perineural -perineurial -perineuritis -perineurium -perinium -perinuclear -periocular -period -periodate -periodic -periodical -periodicalism -periodicalist -periodicalize -periodically -periodicalness -periodicity -periodide -periodize -periodogram -periodograph -periodology -periodontal -periodontia -periodontic -periodontist -periodontitis -periodontium -periodontoclasia -periodontologist -periodontology -periodontum -periodoscope -perioeci -perioecians -perioecic -perioecid -perioecus -perioesophageal -perioikoi -periomphalic -perionychia -perionychium -perionyx -perionyxis -perioophoritis -periophthalmic -periophthalmitis -periople -perioplic -perioptic -perioptometry -perioral -periorbit -periorbita -periorbital -periorchitis -periost -periostea -periosteal -periosteitis -periosteoalveolar -periosteoma -periosteomedullitis -periosteomyelitis -periosteophyte -periosteorrhaphy -periosteotome -periosteotomy -periosteous -periosteum -periostitic -periostitis -periostoma -periostosis -periostotomy -periostracal -periostracum -periotic -periovular -peripachymeningitis -peripancreatic -peripancreatitis -peripapillary -Peripatetic -peripatetic -peripatetical -peripatetically -peripateticate -Peripateticism -Peripatidae -Peripatidea -peripatize -peripatoid -Peripatopsidae -Peripatopsis -Peripatus -peripenial -peripericarditis -peripetalous -peripetasma -peripeteia -peripetia -peripety -periphacitis -peripharyngeal -peripherad -peripheral -peripherally -peripherial -peripheric -peripherical -peripherically -peripherocentral -peripheroceptor -peripheromittor -peripheroneural -peripherophose -periphery -periphlebitic -periphlebitis -periphractic -periphrase -periphrases -periphrasis -periphrastic -periphrastical -periphrastically -periphraxy -periphyllum -periphyse -periphysis -Periplaneta -periplasm -periplast -periplastic -periplegmatic -peripleural -peripleuritis -Periploca -periplus -peripneumonia -peripneumonic -peripneumony -peripneustic -peripolar -peripolygonal -periportal -periproct -periproctal -periproctitis -periproctous -periprostatic -periprostatitis -peripteral -peripterous -periptery -peripylephlebitis -peripyloric -perique -perirectal -perirectitis -perirenal -perisalpingitis -perisarc -perisarcal -perisarcous -perisaturnium -periscian -periscians -periscii -perisclerotic -periscopal -periscope -periscopic -periscopical -periscopism -perish -perishability -perishable -perishableness -perishably -perished -perishing -perishingly -perishless -perishment -perisigmoiditis -perisinuitis -perisinuous -perisinusitis -perisoma -perisomal -perisomatic -perisome -perisomial -perisperm -perispermal -perispermatitis -perispermic -perisphere -perispheric -perispherical -perisphinctean -Perisphinctes -Perisphinctidae -perisphinctoid -perisplanchnic -perisplanchnitis -perisplenetic -perisplenic -perisplenitis -perispome -perispomenon -perispondylic -perispondylitis -perispore -Perisporiaceae -perisporiaceous -Perisporiales -perissad -perissodactyl -Perissodactyla -perissodactylate -perissodactyle -perissodactylic -perissodactylism -perissodactylous -perissologic -perissological -perissology -perissosyllabic -peristalith -peristalsis -peristaltic -peristaltically -peristaphyline -peristaphylitis -peristele -peristerite -peristeromorph -Peristeromorphae -peristeromorphic -peristeromorphous -peristeronic -peristerophily -peristeropod -peristeropodan -peristeropode -Peristeropodes -peristeropodous -peristethium -peristole -peristoma -peristomal -peristomatic -peristome -peristomial -peristomium -peristrephic -peristrephical -peristrumitis -peristrumous -peristylar -peristyle -peristylium -peristylos -peristylum -perisynovial -perisystole -perisystolic -perit -perite -peritectic -peritendineum -peritenon -perithece -perithecial -perithecium -perithelial -perithelioma -perithelium -perithoracic -perithyreoiditis -perithyroiditis -peritomize -peritomous -peritomy -peritoneal -peritonealgia -peritoneally -peritoneocentesis -peritoneoclysis -peritoneomuscular -peritoneopathy -peritoneopericardial -peritoneopexy -peritoneoplasty -peritoneoscope -peritoneoscopy -peritoneotomy -peritoneum -peritonism -peritonital -peritonitic -peritonitis -peritonsillar -peritonsillitis -peritracheal -peritrema -peritrematous -peritreme -peritrich -Peritricha -peritrichan -peritrichic -peritrichous -peritrichously -peritroch -peritrochal -peritrochanteric -peritrochium -peritrochoid -peritropal -peritrophic -peritropous -perityphlic -perityphlitic -perityphlitis -periumbilical -periungual -periuranium -periureteric -periureteritis -periurethral -periurethritis -periuterine -periuvular -perivaginal -perivaginitis -perivascular -perivasculitis -perivenous -perivertebral -perivesical -perivisceral -perivisceritis -perivitellin -perivitelline -periwig -periwigpated -periwinkle -periwinkled -periwinkler -perizonium -perjink -perjinkety -perjinkities -perjinkly -perjure -perjured -perjuredly -perjuredness -perjurer -perjuress -perjurious -perjuriously -perjuriousness -perjurous -perjury -perjurymonger -perjurymongering -perk -perkily -Perkin -perkin -perkiness -perking -perkingly -perkish -perknite -perky -Perla -perlaceous -Perlaria -perle -perlection -perlid -Perlidae -perligenous -perlingual -perlingually -perlite -perlitic -perloir -perlustrate -perlustration -perlustrator -perm -permafrost -Permalloy -permalloy -permanence -permanency -permanent -permanently -permanentness -permanganate -permanganic -permansive -permeability -permeable -permeableness -permeably -permeameter -permeance -permeant -permeate -permeation -permeative -permeator -Permiak -Permian -permillage -permirific -permissibility -permissible -permissibleness -permissibly -permission -permissioned -permissive -permissively -permissiveness -permissory -permit -permittable -permitted -permittedly -permittee -permitter -permittivity -permixture -Permocarboniferous -permonosulphuric -permoralize -permutability -permutable -permutableness -permutably -permutate -permutation -permutational -permutationist -permutator -permutatorial -permutatory -permute -permuter -pern -pernancy -pernasal -pernavigate -Pernettia -pernicious -perniciously -perniciousness -pernicketiness -pernickety -pernine -Pernis -pernitrate -pernitric -pernoctation -pernor -pernyi -peroba -perobrachius -perocephalus -perochirus -perodactylus -Perodipus -Perognathinae -Perognathus -Peromedusae -Peromela -peromelous -peromelus -Peromyscus -peronate -peroneal -peroneocalcaneal -peroneotarsal -peroneotibial -peronial -peronium -Peronospora -Peronosporaceae -peronosporaceous -Peronosporales -peropod -Peropoda -peropodous -peropus -peroral -perorally -perorate -peroration -perorational -perorative -perorator -peroratorical -peroratorically -peroratory -perosis -perosmate -perosmic -perosomus -perotic -perovskite -peroxidase -peroxidate -peroxidation -peroxide -peroxidic -peroxidize -peroxidizement -peroxy -peroxyl -perozonid -perozonide -perpend -perpendicular -perpendicularity -perpendicularly -perpera -perperfect -perpetrable -perpetrate -perpetration -perpetrator -perpetratress -perpetratrix -perpetuable -perpetual -perpetualism -perpetualist -perpetuality -perpetually -perpetualness -perpetuana -perpetuance -perpetuant -perpetuate -perpetuation -perpetuator -perpetuity -perplantar -perplex -perplexable -perplexed -perplexedly -perplexedness -perplexer -perplexing -perplexingly -perplexity -perplexment -perplication -perquadrat -perquest -perquisite -perquisition -perquisitor -perradial -perradially -perradiate -perradius -perridiculous -perrier -Perrinist -perron -perruche -perrukery -perruthenate -perruthenic -Perry -perry -perryman -Persae -persalt -perscent -perscribe -perscrutate -perscrutation -perscrutator -perse -Persea -persecute -persecutee -persecuting -persecutingly -persecution -persecutional -persecutive -persecutiveness -persecutor -persecutory -persecutress -persecutrix -Perseid -perseite -perseitol -perseity -persentiscency -Persephassa -Persephone -Persepolitan -perseverance -perseverant -perseverate -perseveration -persevere -persevering -perseveringly -Persian -Persianist -Persianization -Persianize -Persic -Persicaria -persicary -Persicize -persico -persicot -persienne -persiennes -persiflage -persiflate -persilicic -persimmon -Persis -persis -Persism -persist -persistence -persistency -persistent -persistently -persister -persisting -persistingly -persistive -persistively -persistiveness -persnickety -person -persona -personable -personableness -personably -personage -personal -personalia -personalism -personalist -personalistic -personality -personalization -personalize -personally -personalness -personalty -personate -personately -personating -personation -personative -personator -personed -personeity -personifiable -personifiant -personification -personificative -personificator -personifier -personify -personization -personize -personnel -personship -perspection -perspective -perspectived -perspectiveless -perspectively -perspectivity -perspectograph -perspectometer -perspicacious -perspicaciously -perspicaciousness -perspicacity -perspicuity -perspicuous -perspicuously -perspicuousness -perspirability -perspirable -perspirant -perspirate -perspiration -perspirative -perspiratory -perspire -perspiringly -perspiry -perstringe -perstringement -persuadability -persuadable -persuadableness -persuadably -persuade -persuaded -persuadedly -persuadedness -persuader -persuadingly -persuasibility -persuasible -persuasibleness -persuasibly -persuasion -persuasive -persuasively -persuasiveness -persuasory -persulphate -persulphide -persulphocyanate -persulphocyanic -persulphuric -persymmetric -persymmetrical -pert -pertain -pertaining -pertainment -perten -perthiocyanate -perthiocyanic -perthiotophyre -perthite -perthitic -perthitically -perthosite -pertinacious -pertinaciously -pertinaciousness -pertinacity -pertinence -pertinency -pertinent -pertinently -pertinentness -pertish -pertly -pertness -perturb -perturbability -perturbable -perturbance -perturbancy -perturbant -perturbate -perturbation -perturbational -perturbatious -perturbative -perturbator -perturbatory -perturbatress -perturbatrix -perturbed -perturbedly -perturbedness -perturber -perturbing -perturbingly -perturbment -Pertusaria -Pertusariaceae -pertuse -pertused -pertusion -pertussal -pertussis -perty -Peru -Perugian -Peruginesque -peruke -perukeless -perukier -perukiership -perula -Perularia -perulate -perule -Perun -perusable -perusal -peruse -peruser -Peruvian -Peruvianize -pervade -pervadence -pervader -pervading -pervadingly -pervadingness -pervagate -pervagation -pervalvar -pervasion -pervasive -pervasively -pervasiveness -perverse -perversely -perverseness -perversion -perversity -perversive -pervert -perverted -pervertedly -pervertedness -perverter -pervertibility -pervertible -pervertibly -pervertive -perviability -perviable -pervicacious -pervicaciously -pervicaciousness -pervicacity -pervigilium -pervious -perviously -perviousness -pervulgate -pervulgation -perwitsky -pes -pesa -Pesach -pesade -pesage -Pesah -peseta -peshkar -peshkash -peshwa -peshwaship -peskily -peskiness -pesky -peso -pess -pessary -pessimal -pessimism -pessimist -pessimistic -pessimistically -pessimize -pessimum -pessomancy -pessoner -pessular -pessulus -pest -Pestalozzian -Pestalozzianism -peste -pester -pesterer -pesteringly -pesterment -pesterous -pestersome -pestful -pesthole -pesthouse -pesticidal -pesticide -pestiduct -pestiferous -pestiferously -pestiferousness -pestifugous -pestify -pestilence -pestilenceweed -pestilencewort -pestilent -pestilential -pestilentially -pestilentialness -pestilently -pestle -pestological -pestologist -pestology -pestproof -pet -petal -petalage -petaled -Petalia -petaliferous -petaliform -Petaliidae -petaline -petalism -petalite -petalled -petalless -petallike -petalocerous -petalodic -petalodont -petalodontid -Petalodontidae -petalodontoid -Petalodus -petalody -petaloid -petaloidal -petaloideous -petalomania -petalon -Petalostemon -petalous -petalwise -petaly -petard -petardeer -petardier -petary -Petasites -petasos -petasus -petaurine -petaurist -Petaurista -Petauristidae -Petauroides -Petaurus -petchary -petcock -Pete -pete -peteca -petechiae -petechial -petechiate -peteman -Peter -peter -Peterkin -Peterloo -peterman -peternet -petersham -peterwort -petful -petiolar -petiolary -Petiolata -petiolate -petiolated -petiole -petioled -Petioliventres -petiolular -petiolulate -petiolule -petiolus -petit -petite -petiteness -petitgrain -petition -petitionable -petitional -petitionarily -petitionary -petitionee -petitioner -petitionist -petitionproof -petitor -petitory -Petiveria -Petiveriaceae -petkin -petling -peto -Petr -Petrarchal -Petrarchan -Petrarchesque -Petrarchian -Petrarchianism -Petrarchism -Petrarchist -Petrarchistic -Petrarchistical -Petrarchize -petrary -petre -Petrea -petrean -petreity -petrel -petrescence -petrescent -Petricola -Petricolidae -petricolous -petrie -petrifaction -petrifactive -petrifiable -petrific -petrificant -petrificate -petrification -petrified -petrifier -petrify -Petrine -Petrinism -Petrinist -Petrinize -petrissage -Petrobium -Petrobrusian -petrochemical -petrochemistry -Petrogale -petrogenesis -petrogenic -petrogeny -petroglyph -petroglyphic -petroglyphy -petrograph -petrographer -petrographic -petrographical -petrographically -petrography -petrohyoid -petrol -petrolage -petrolatum -petrolean -petrolene -petroleous -petroleum -petrolic -petroliferous -petrolific -petrolist -petrolithic -petrolization -petrolize -petrologic -petrological -petrologically -petromastoid -Petromyzon -Petromyzonidae -petromyzont -Petromyzontes -Petromyzontidae -petromyzontoid -petronel -petronella -petropharyngeal -petrophilous -petrosa -petrosal -Petroselinum -petrosilex -petrosiliceous -petrosilicious -petrosphenoid -petrosphenoidal -petrosphere -petrosquamosal -petrosquamous -petrostearin -petrostearine -petrosum -petrotympanic -petrous -petroxolin -pettable -petted -pettedly -pettedness -petter -pettichaps -petticoat -petticoated -petticoaterie -petticoatery -petticoatism -petticoatless -petticoaty -pettifog -pettifogger -pettifoggery -pettifogging -pettifogulize -pettifogulizer -pettily -pettiness -pettingly -pettish -pettitoes -pettle -petty -pettyfog -petulance -petulancy -petulant -petulantly -petune -Petunia -petuntse -petwood -petzite -Peucedanum -Peucetii -peucites -peuhl -Peul -Peumus -Peutingerian -pew -pewage -pewdom -pewee -pewfellow -pewful -pewholder -pewing -pewit -pewless -pewmate -pewter -pewterer -pewterwort -pewtery -pewy -Peyerian -peyote -peyotl -peyton -peytrel -pezantic -Peziza -Pezizaceae -pezizaceous -pezizaeform -Pezizales -peziziform -pezizoid -pezograph -Pezophaps -Pfaffian -pfeffernuss -Pfeifferella -pfennig -pfui -pfund -Phaca -Phacelia -phacelite -phacella -Phacidiaceae -Phacidiales -phacitis -phacoanaphylaxis -phacocele -phacochere -phacocherine -phacochoere -phacochoerid -phacochoerine -phacochoeroid -Phacochoerus -phacocyst -phacocystectomy -phacocystitis -phacoglaucoma -phacoid -phacoidal -phacoidoscope -phacolite -phacolith -phacolysis -phacomalacia -phacometer -phacopid -Phacopidae -Phacops -phacosclerosis -phacoscope -phacotherapy -Phaeacian -Phaedo -phaeism -phaenantherous -phaenanthery -phaenogam -Phaenogamia -phaenogamian -phaenogamic -phaenogamous -phaenogenesis -phaenogenetic -phaenological -phaenology -phaenomenal -phaenomenism -phaenomenon -phaenozygous -phaeochrous -Phaeodaria -phaeodarian -phaeophore -Phaeophyceae -phaeophycean -phaeophyceous -phaeophyll -Phaeophyta -phaeophytin -phaeoplast -Phaeosporales -phaeospore -Phaeosporeae -phaeosporous -Phaet -Phaethon -Phaethonic -Phaethontes -Phaethontic -Phaethontidae -Phaethusa -phaeton -phage -phagedena -phagedenic -phagedenical -phagedenous -Phagineae -phagocytable -phagocytal -phagocyte -phagocyter -phagocytic -phagocytism -phagocytize -phagocytoblast -phagocytolysis -phagocytolytic -phagocytose -phagocytosis -phagodynamometer -phagolysis -phagolytic -phagomania -phainolion -Phainopepla -Phajus -Phalacrocoracidae -phalacrocoracine -Phalacrocorax -phalacrosis -Phalaecean -Phalaecian -Phalaenae -Phalaenidae -phalaenopsid -Phalaenopsis -phalangal -phalange -phalangeal -phalangean -phalanger -Phalangeridae -Phalangerinae -phalangerine -phalanges -phalangette -phalangian -phalangic -phalangid -Phalangida -phalangidan -Phalangidea -phalangidean -Phalangides -phalangiform -Phalangigrada -phalangigrade -phalangigrady -phalangiid -Phalangiidae -phalangist -Phalangista -Phalangistidae -phalangistine -phalangite -phalangitic -phalangitis -Phalangium -phalangologist -phalangology -phalansterial -phalansterian -phalansterianism -phalansteric -phalansterism -phalansterist -phalanstery -phalanx -phalanxed -phalarica -Phalaris -Phalarism -phalarope -Phalaropodidae -phalera -phalerate -phalerated -Phaleucian -Phallaceae -phallaceous -Phallales -phallalgia -phallaneurysm -phallephoric -phallic -phallical -phallicism -phallicist -phallin -phallism -phallist -phallitis -phallocrypsis -phallodynia -phalloid -phalloncus -phalloplasty -phallorrhagia -phallus -Phanar -Phanariot -Phanariote -phanatron -phaneric -phanerite -Phanerocarpae -Phanerocarpous -Phanerocephala -phanerocephalous -phanerocodonic -phanerocryst -phanerocrystalline -phanerogam -Phanerogamia -phanerogamian -phanerogamic -phanerogamous -phanerogamy -phanerogenetic -phanerogenic -Phaneroglossa -phaneroglossal -phaneroglossate -phaneromania -phaneromere -phaneromerous -phaneroscope -phanerosis -phanerozoic -phanerozonate -Phanerozonia -phanic -phano -phansigar -phantascope -phantasia -Phantasiast -Phantasiastic -phantasist -phantasize -phantasm -phantasma -phantasmagoria -phantasmagorial -phantasmagorially -phantasmagorian -phantasmagoric -phantasmagorical -phantasmagorist -phantasmagory -phantasmal -phantasmalian -phantasmality -phantasmally -phantasmascope -phantasmata -Phantasmatic -phantasmatic -phantasmatical -phantasmatically -phantasmatography -phantasmic -phantasmical -phantasmically -Phantasmist -phantasmogenesis -phantasmogenetic -phantasmograph -phantasmological -phantasmology -phantast -phantasy -phantom -phantomatic -phantomic -phantomical -phantomically -Phantomist -phantomize -phantomizer -phantomland -phantomlike -phantomnation -phantomry -phantomship -phantomy -phantoplex -phantoscope -Pharaoh -Pharaonic -Pharaonical -Pharbitis -phare -Phareodus -Pharian -Pharisaean -Pharisaic -pharisaical -pharisaically -pharisaicalness -Pharisaism -Pharisaist -Pharisean -Pharisee -pharisee -Phariseeism -pharmacal -pharmaceutic -pharmaceutical -pharmaceutically -pharmaceutics -pharmaceutist -pharmacic -pharmacist -pharmacite -pharmacodiagnosis -pharmacodynamic -pharmacodynamical -pharmacodynamics -pharmacoendocrinology -pharmacognosia -pharmacognosis -pharmacognosist -pharmacognostical -pharmacognostically -pharmacognostics -pharmacognosy -pharmacography -pharmacolite -pharmacologia -pharmacologic -pharmacological -pharmacologically -pharmacologist -pharmacology -pharmacomania -pharmacomaniac -pharmacomaniacal -pharmacometer -pharmacopedia -pharmacopedic -pharmacopedics -pharmacopeia -pharmacopeial -pharmacopeian -pharmacophobia -pharmacopoeia -pharmacopoeial -pharmacopoeian -pharmacopoeist -pharmacopolist -pharmacoposia -pharmacopsychology -pharmacosiderite -pharmacotherapy -pharmacy -pharmakos -pharmic -pharmuthi -pharology -Pharomacrus -pharos -Pharsalian -pharyngal -pharyngalgia -pharyngalgic -pharyngeal -pharyngectomy -pharyngemphraxis -pharynges -pharyngic -pharyngismus -pharyngitic -pharyngitis -pharyngoamygdalitis -pharyngobranch -pharyngobranchial -pharyngobranchiate -Pharyngobranchii -pharyngocele -pharyngoceratosis -pharyngodynia -pharyngoepiglottic -pharyngoepiglottidean -pharyngoesophageal -pharyngoglossal -pharyngoglossus -pharyngognath -Pharyngognathi -pharyngognathous -pharyngographic -pharyngography -pharyngokeratosis -pharyngolaryngeal -pharyngolaryngitis -pharyngolith -pharyngological -pharyngology -pharyngomaxillary -pharyngomycosis -pharyngonasal -pharyngopalatine -pharyngopalatinus -pharyngoparalysis -pharyngopathy -pharyngoplasty -pharyngoplegia -pharyngoplegic -pharyngoplegy -pharyngopleural -Pharyngopneusta -pharyngopneustal -pharyngorhinitis -pharyngorhinoscopy -pharyngoscleroma -pharyngoscope -pharyngoscopy -pharyngospasm -pharyngotherapy -pharyngotomy -pharyngotonsillitis -pharyngotyphoid -pharyngoxerosis -pharynogotome -pharynx -Phascaceae -phascaceous -Phascogale -Phascolarctinae -Phascolarctos -phascolome -Phascolomyidae -Phascolomys -Phascolonus -Phascum -phase -phaseal -phaseless -phaselin -phasemeter -phasemy -Phaseolaceae -phaseolin -phaseolous -phaseolunatin -Phaseolus -phaseometer -phases -Phasianella -Phasianellidae -phasianic -phasianid -Phasianidae -Phasianinae -phasianine -phasianoid -Phasianus -phasic -Phasiron -phasis -phasm -phasma -phasmatid -Phasmatida -Phasmatidae -Phasmatodea -phasmatoid -Phasmatoidea -phasmatrope -phasmid -Phasmida -Phasmidae -phasmoid -phasogeneous -phasotropy -pheal -pheasant -pheasantry -pheasantwood -Phebe -Phecda -Phegopteris -Pheidole -phellandrene -phellem -Phellodendron -phelloderm -phellodermal -phellogen -phellogenetic -phellogenic -phellonic -phelloplastic -phelloplastics -phelonion -phemic -Phemie -phenacaine -phenacetin -phenaceturic -phenacite -Phenacodontidae -Phenacodus -phenacyl -phenakism -phenakistoscope -Phenalgin -phenanthrene -phenanthridine -phenanthridone -phenanthrol -phenanthroline -phenarsine -phenate -phenazine -phenazone -phene -phenegol -phenene -phenethyl -phenetidine -phenetole -phengite -phengitical -phenic -phenicate -phenicious -phenicopter -phenin -phenmiazine -phenobarbital -phenocoll -phenocopy -phenocryst -phenocrystalline -phenogenesis -phenogenetic -phenol -phenolate -phenolic -phenolization -phenolize -phenological -phenologically -phenologist -phenology -phenoloid -phenolphthalein -phenolsulphonate -phenolsulphonephthalein -phenolsulphonic -phenomena -phenomenal -phenomenalism -phenomenalist -phenomenalistic -phenomenalistically -phenomenality -phenomenalization -phenomenalize -phenomenally -phenomenic -phenomenical -phenomenism -phenomenist -phenomenistic -phenomenize -phenomenological -phenomenologically -phenomenology -phenomenon -phenoplast -phenoplastic -phenoquinone -phenosafranine -phenosal -phenospermic -phenospermy -phenothiazine -phenotype -phenotypic -phenotypical -phenotypically -phenoxazine -phenoxid -phenoxide -phenozygous -Pheny -phenyl -phenylacetaldehyde -phenylacetamide -phenylacetic -phenylalanine -phenylamide -phenylamine -phenylate -phenylation -phenylboric -phenylcarbamic -phenylcarbimide -phenylene -phenylenediamine -phenylethylene -phenylglycine -phenylglycolic -phenylglyoxylic -phenylhydrazine -phenylhydrazone -phenylic -phenylmethane -pheon -pheophyl -pheophyll -pheophytin -Pherecratean -Pherecratian -Pherecratic -Pherephatta -pheretrer -Pherkad -Pherophatta -Phersephatta -Phersephoneia -phew -phi -phial -phiale -phialful -phialide -phialine -phiallike -phialophore -phialospore -Phidiac -Phidian -Phigalian -Phil -Philadelphian -Philadelphianism -philadelphite -Philadelphus -philadelphy -philalethist -philamot -Philander -philander -philanderer -philanthid -Philanthidae -philanthrope -philanthropian -philanthropic -philanthropical -philanthropically -philanthropinism -philanthropinist -Philanthropinum -philanthropism -philanthropist -philanthropistic -philanthropize -philanthropy -Philanthus -philantomba -philarchaist -philaristocracy -philatelic -philatelical -philatelically -philatelism -philatelist -philatelistic -philately -Philathea -philathletic -philematology -Philepitta -Philepittidae -Philesia -Philetaerus -philharmonic -philhellene -philhellenic -philhellenism -philhellenist -philhippic -philhymnic -philiater -Philip -Philippa -Philippan -Philippe -Philippian -Philippic -philippicize -Philippine -Philippines -Philippism -Philippist -Philippistic -Philippizate -philippize -philippizer -philippus -Philistia -Philistian -Philistine -Philistinely -Philistinian -Philistinic -Philistinish -Philistinism -Philistinize -Phill -philliloo -Phillip -phillipsine -phillipsite -Phillis -Phillyrea -phillyrin -philobiblian -philobiblic -philobiblical -philobiblist -philobotanic -philobotanist -philobrutish -philocalic -philocalist -philocaly -philocathartic -philocatholic -philocomal -Philoctetes -philocubist -philocynic -philocynical -philocynicism -philocyny -philodemic -Philodendron -philodespot -philodestructiveness -Philodina -Philodinidae -philodox -philodoxer -philodoxical -philodramatic -philodramatist -philofelist -philofelon -philogarlic -philogastric -philogeant -philogenitive -philogenitiveness -philograph -philographic -philogynaecic -philogynist -philogynous -philogyny -Philohela -philohellenian -philokleptic -philoleucosis -philologaster -philologastry -philologer -philologian -philologic -philological -philologically -philologist -philologistic -philologize -philologue -philology -Philomachus -philomath -philomathematic -philomathematical -philomathic -philomathical -philomathy -philomel -Philomela -philomelanist -philomuse -philomusical -philomystic -philonatural -philoneism -Philonian -Philonic -Philonism -Philonist -philonium -philonoist -philopagan -philopater -philopatrian -philopena -philophilosophos -philopig -philoplutonic -philopoet -philopogon -philopolemic -philopolemical -philopornist -philoprogeneity -philoprogenitive -philoprogenitiveness -philopterid -Philopteridae -philopublican -philoradical -philorchidaceous -philornithic -philorthodox -philosoph -philosophaster -philosophastering -philosophastry -philosophedom -philosopheme -philosopher -philosopheress -philosophership -philosophic -philosophical -philosophically -philosophicalness -philosophicide -philosophicohistorical -philosophicojuristic -philosophicolegal -philosophicoreligious -philosophicotheological -philosophism -philosophist -philosophister -philosophistic -philosophistical -philosophization -philosophize -philosophizer -philosophling -philosophobia -philosophocracy -philosophuncule -philosophunculist -philosophy -philotadpole -philotechnic -philotechnical -philotechnist -philothaumaturgic -philotheism -philotheist -philotheistic -philotheosophical -philotherian -philotherianism -Philotria -Philoxenian -philoxygenous -philozoic -philozoist -philozoonist -philter -philterer -philterproof -philtra -philtrum -Philydraceae -philydraceous -Philyra -phimosed -phimosis -phimotic -Phineas -Phiomia -Phiroze -phit -phiz -phizes -phizog -phlebalgia -phlebangioma -phlebarteriectasia -phlebarteriodialysis -phlebectasia -phlebectasis -phlebectasy -phlebectomy -phlebectopia -phlebectopy -phlebemphraxis -phlebenteric -phlebenterism -phlebitic -phlebitis -Phlebodium -phlebogram -phlebograph -phlebographical -phlebography -phleboid -phleboidal -phlebolite -phlebolith -phlebolithiasis -phlebolithic -phlebolitic -phlebological -phlebology -phlebometritis -phlebopexy -phleboplasty -phleborrhage -phleborrhagia -phleborrhaphy -phleborrhexis -phlebosclerosis -phlebosclerotic -phlebostasia -phlebostasis -phlebostenosis -phlebostrepsis -phlebothrombosis -phlebotome -phlebotomic -phlebotomical -phlebotomically -phlebotomist -phlebotomization -phlebotomize -Phlebotomus -phlebotomus -phlebotomy -Phlegethon -Phlegethontal -Phlegethontic -phlegm -phlegma -phlegmagogue -phlegmasia -phlegmatic -phlegmatical -phlegmatically -phlegmaticalness -phlegmaticly -phlegmaticness -phlegmatism -phlegmatist -phlegmatous -phlegmless -phlegmon -phlegmonic -phlegmonoid -phlegmonous -phlegmy -Phleum -phlobaphene -phlobatannin -phloem -phloeophagous -phloeoterma -phlogisma -phlogistian -phlogistic -phlogistical -phlogisticate -phlogistication -phlogiston -phlogistonism -phlogistonist -phlogogenetic -phlogogenic -phlogogenous -phlogopite -phlogosed -Phlomis -phloretic -phloroglucic -phloroglucin -phlorone -phloxin -pho -phobiac -phobic -phobism -phobist -phobophobia -Phobos -phoby -phoca -phocacean -phocaceous -Phocaean -Phocaena -Phocaenina -phocaenine -phocal -Phocean -phocenate -phocenic -phocenin -Phocian -phocid -Phocidae -phociform -Phocinae -phocine -phocodont -Phocodontia -phocodontic -Phocoena -phocoid -phocomelia -phocomelous -phocomelus -Phoebe -phoebe -Phoebean -Phoenicaceae -phoenicaceous -Phoenicales -phoenicean -Phoenician -Phoenicianism -Phoenicid -phoenicite -Phoenicize -phoenicochroite -Phoenicopteridae -Phoenicopteriformes -phoenicopteroid -Phoenicopteroideae -phoenicopterous -Phoenicopterus -Phoeniculidae -Phoeniculus -phoenicurous -phoenigm -Phoenix -phoenix -phoenixity -phoenixlike -phoh -pholad -Pholadacea -pholadian -pholadid -Pholadidae -Pholadinea -pholadoid -Pholas -pholcid -Pholcidae -pholcoid -Pholcus -pholido -pholidolite -pholidosis -Pholidota -pholidote -Pholiota -Phoma -Phomopsis -phon -phonal -phonasthenia -phonate -phonation -phonatory -phonautogram -phonautograph -phonautographic -phonautographically -phone -phoneidoscope -phoneidoscopic -Phonelescope -phoneme -phonemic -phonemics -phonendoscope -phonesis -phonestheme -phonetic -phonetical -phonetically -phonetician -phoneticism -phoneticist -phoneticization -phoneticize -phoneticogrammatical -phoneticohieroglyphic -phonetics -phonetism -phonetist -phonetization -phonetize -phoniatrics -phoniatry -phonic -phonics -phonikon -phonism -phono -phonocamptic -phonocinematograph -phonodeik -phonodynamograph -phonoglyph -phonogram -phonogramic -phonogramically -phonogrammatic -phonogrammatical -phonogrammic -phonogrammically -phonograph -phonographer -phonographic -phonographical -phonographically -phonographist -phonography -phonolite -phonolitic -phonologer -phonologic -phonological -phonologically -phonologist -phonology -phonometer -phonometric -phonometry -phonomimic -phonomotor -phonopathy -phonophile -phonophobia -phonophone -phonophore -phonophoric -phonophorous -phonophote -phonophotography -phonophotoscope -phonophotoscopic -phonoplex -phonoscope -phonotelemeter -phonotype -phonotyper -phonotypic -phonotypical -phonotypically -phonotypist -phonotypy -phony -phoo -Phora -Phoradendron -phoranthium -phoresis -phoresy -phoria -phorid -Phoridae -phorminx -Phormium -phorology -phorometer -phorometric -phorometry -phorone -phoronic -phoronid -Phoronida -Phoronidea -Phoronis -phoronomia -phoronomic -phoronomically -phoronomics -phoronomy -Phororhacidae -Phororhacos -phoroscope -phorozooid -phos -phose -phosgene -phosgenic -phosgenite -phosis -phosphagen -phospham -phosphamic -phosphamide -phosphamidic -phosphammonium -phosphatase -phosphate -phosphated -phosphatemia -phosphatese -phosphatic -phosphatide -phosphation -phosphatization -phosphatize -phosphaturia -phosphaturic -phosphene -phosphenyl -phosphide -phosphinate -phosphine -phosphinic -phosphite -phospho -phosphoaminolipide -phosphocarnic -phosphocreatine -phosphoferrite -phosphoglycerate -phosphoglyceric -phosphoglycoprotein -phospholipide -phospholipin -phosphomolybdate -phosphomolybdic -phosphonate -phosphonic -phosphonium -phosphophyllite -phosphoprotein -phosphor -phosphorate -phosphore -phosphoreal -phosphorent -phosphoreous -phosphoresce -phosphorescence -phosphorescent -phosphorescently -phosphoreted -phosphorhidrosis -phosphori -phosphoric -phosphorical -phosphoriferous -phosphorism -phosphorite -phosphoritic -phosphorize -phosphorogen -phosphorogenic -phosphorograph -phosphorographic -phosphorography -phosphoroscope -phosphorous -phosphoruria -phosphorus -phosphoryl -phosphorylase -phosphorylation -phosphosilicate -phosphotartaric -phosphotungstate -phosphotungstic -phosphowolframic -phosphuranylite -phosphuret -phosphuria -phosphyl -phossy -phot -photaesthesia -photaesthesis -photaesthetic -photal -photalgia -photechy -photelectrograph -photeolic -photerythrous -photesthesis -photic -photics -Photinia -Photinian -Photinianism -photism -photistic -photo -photoactinic -photoactivate -photoactivation -photoactive -photoactivity -photoaesthetic -photoalbum -photoalgraphy -photoanamorphosis -photoaquatint -Photobacterium -photobathic -photobiotic -photobromide -photocampsis -photocatalysis -photocatalyst -photocatalytic -photocatalyzer -photocell -photocellulose -photoceptor -photoceramic -photoceramics -photoceramist -photochemic -photochemical -photochemically -photochemigraphy -photochemist -photochemistry -photochloride -photochlorination -photochromascope -photochromatic -photochrome -photochromic -photochromography -photochromolithograph -photochromoscope -photochromotype -photochromotypy -photochromy -photochronograph -photochronographic -photochronographical -photochronographically -photochronography -photocollograph -photocollographic -photocollography -photocollotype -photocombustion -photocompose -photocomposition -photoconductivity -photocopier -photocopy -photocrayon -photocurrent -photodecomposition -photodensitometer -photodermatic -photodermatism -photodisintegration -photodissociation -photodrama -photodramatic -photodramatics -photodramatist -photodramaturgic -photodramaturgy -photodrome -photodromy -photodynamic -photodynamical -photodynamically -photodynamics -photodysphoria -photoelastic -photoelasticity -photoelectric -photoelectrical -photoelectrically -photoelectricity -photoelectron -photoelectrotype -photoemission -photoemissive -photoengrave -photoengraver -photoengraving -photoepinastic -photoepinastically -photoepinasty -photoesthesis -photoesthetic -photoetch -photoetcher -photoetching -photofilm -photofinish -photofinisher -photofinishing -photofloodlamp -photogalvanograph -photogalvanographic -photogalvanography -photogastroscope -photogelatin -photogen -photogene -photogenetic -photogenic -photogenically -photogenous -photoglyph -photoglyphic -photoglyphography -photoglyphy -photoglyptic -photoglyptography -photogram -photogrammeter -photogrammetric -photogrammetrical -photogrammetry -photograph -photographable -photographee -photographer -photographeress -photographess -photographic -photographical -photographically -photographist -photographize -photographometer -photography -photogravure -photogravurist -photogyric -photohalide -photoheliograph -photoheliographic -photoheliography -photoheliometer -photohyponastic -photohyponastically -photohyponasty -photoimpression -photoinactivation -photoinduction -photoinhibition -photointaglio -photoionization -photoisomeric -photoisomerization -photokinesis -photokinetic -photolith -photolitho -photolithograph -photolithographer -photolithographic -photolithography -photologic -photological -photologist -photology -photoluminescence -photoluminescent -photolysis -photolyte -photolytic -photoma -photomacrograph -photomagnetic -photomagnetism -photomap -photomapper -photomechanical -photomechanically -photometeor -photometer -photometric -photometrical -photometrically -photometrician -photometrist -photometrograph -photometry -photomezzotype -photomicrogram -photomicrograph -photomicrographer -photomicrographic -photomicrography -photomicroscope -photomicroscopic -photomicroscopy -photomontage -photomorphosis -photomural -photon -photonastic -photonasty -photonegative -photonephograph -photonephoscope -photoneutron -photonosus -photooxidation -photooxidative -photopathic -photopathy -photoperceptive -photoperimeter -photoperiod -photoperiodic -photoperiodism -photophane -photophile -photophilic -photophilous -photophily -photophobe -photophobia -photophobic -photophobous -photophone -photophonic -photophony -photophore -photophoresis -photophosphorescent -photophygous -photophysical -photophysicist -photopia -photopic -photopile -photopitometer -photoplay -photoplayer -photoplaywright -photopography -photopolarigraph -photopolymerization -photopositive -photoprint -photoprinter -photoprinting -photoprocess -photoptometer -photoradio -photoradiogram -photoreception -photoreceptive -photoreceptor -photoregression -photorelief -photoresistance -photosalt -photosantonic -photoscope -photoscopic -photoscopy -photosculptural -photosculpture -photosensitive -photosensitiveness -photosensitivity -photosensitization -photosensitize -photosensitizer -photosensory -photospectroheliograph -photospectroscope -photospectroscopic -photospectroscopical -photospectroscopy -photosphere -photospheric -photostability -photostable -Photostat -photostat -photostationary -photostereograph -photosurveying -photosyntax -photosynthate -photosynthesis -photosynthesize -photosynthetic -photosynthetically -photosynthometer -phototachometer -phototachometric -phototachometrical -phototachometry -phototactic -phototactically -phototactism -phototaxis -phototaxy -phototechnic -phototelegraph -phototelegraphic -phototelegraphically -phototelegraphy -phototelephone -phototelephony -phototelescope -phototelescopic -phototheodolite -phototherapeutic -phototherapeutics -phototherapic -phototherapist -phototherapy -photothermic -phototonic -phototonus -phototopographic -phototopographical -phototopography -phototrichromatic -phototrope -phototrophic -phototrophy -phototropic -phototropically -phototropism -phototropy -phototube -phototype -phototypic -phototypically -phototypist -phototypographic -phototypography -phototypy -photovisual -photovitrotype -photovoltaic -photoxylography -photozinco -photozincograph -photozincographic -photozincography -photozincotype -photozincotypy -photuria -Phractamphibia -phragma -Phragmidium -Phragmites -phragmocone -phragmoconic -Phragmocyttares -phragmocyttarous -phragmoid -phragmosis -phrasable -phrasal -phrasally -phrase -phraseable -phraseless -phrasemaker -phrasemaking -phraseman -phrasemonger -phrasemongering -phrasemongery -phraseogram -phraseograph -phraseographic -phraseography -phraseological -phraseologically -phraseologist -phraseology -phraser -phrasify -phrasiness -phrasing -phrasy -phrator -phratral -phratria -phratriac -phratrial -phratry -phreatic -phreatophyte -phrenesia -phrenesiac -phrenesis -phrenetic -phrenetically -phreneticness -phrenic -phrenicectomy -phrenicocolic -phrenicocostal -phrenicogastric -phrenicoglottic -phrenicohepatic -phrenicolienal -phrenicopericardiac -phrenicosplenic -phrenicotomy -phrenics -phrenitic -phrenitis -phrenocardia -phrenocardiac -phrenocolic -phrenocostal -phrenodynia -phrenogastric -phrenoglottic -phrenogram -phrenograph -phrenography -phrenohepatic -phrenologer -phrenologic -phrenological -phrenologically -phrenologist -phrenologize -phrenology -phrenomagnetism -phrenomesmerism -phrenopathia -phrenopathic -phrenopathy -phrenopericardiac -phrenoplegia -phrenoplegy -phrenosin -phrenosinic -phrenospasm -phrenosplenic -phronesis -Phronima -Phronimidae -phrontisterion -phrontisterium -phrontistery -Phryganea -phryganeid -Phryganeidae -phryganeoid -Phrygian -Phrygianize -phrygium -Phryma -Phrymaceae -phrymaceous -phrynid -Phrynidae -phrynin -phrynoid -Phrynosoma -phthalacene -phthalan -phthalanilic -phthalate -phthalazin -phthalazine -phthalein -phthaleinometer -phthalic -phthalid -phthalide -phthalimide -phthalin -phthalocyanine -phthalyl -phthanite -Phthartolatrae -phthinoid -phthiocol -phthiriasis -Phthirius -phthirophagous -phthisic -phthisical -phthisicky -phthisiogenesis -phthisiogenetic -phthisiogenic -phthisiologist -phthisiology -phthisiophobia -phthisiotherapeutic -phthisiotherapy -phthisipneumonia -phthisipneumony -phthisis -phthongal -phthongometer -phthor -phthoric -phu -phugoid -phulkari -phulwa -phulwara -phut -Phyciodes -phycite -Phycitidae -phycitol -phycochromaceae -phycochromaceous -phycochrome -Phycochromophyceae -phycochromophyceous -phycocyanin -phycocyanogen -Phycodromidae -phycoerythrin -phycography -phycological -phycologist -phycology -Phycomyces -phycomycete -Phycomycetes -phycomycetous -phycophaein -phycoxanthin -phycoxanthine -phygogalactic -phyla -phylacobiosis -phylacobiotic -phylacteric -phylacterical -phylacteried -phylacterize -phylactery -phylactic -phylactocarp -phylactocarpal -Phylactolaema -Phylactolaemata -phylactolaematous -Phylactolema -Phylactolemata -phylarch -phylarchic -phylarchical -phylarchy -phyle -phylephebic -phylesis -phyletic -phyletically -phyletism -phylic -Phyllachora -Phyllactinia -phyllade -Phyllanthus -phyllary -Phyllaurea -phylliform -phyllin -phylline -Phyllis -phyllite -phyllitic -Phyllitis -Phyllium -phyllobranchia -phyllobranchial -phyllobranchiate -Phyllocactus -phyllocarid -Phyllocarida -phyllocaridan -Phylloceras -phyllocerate -Phylloceratidae -phylloclad -phylloclade -phyllocladioid -phyllocladium -phyllocladous -phyllocyanic -phyllocyanin -phyllocyst -phyllocystic -phyllode -phyllodial -phyllodination -phyllodineous -phyllodiniation -phyllodinous -phyllodium -Phyllodoce -phyllody -phylloerythrin -phyllogenetic -phyllogenous -phylloid -phylloidal -phylloideous -phyllomancy -phyllomania -phyllome -phyllomic -phyllomorph -phyllomorphic -phyllomorphosis -phyllomorphy -Phyllophaga -phyllophagous -phyllophore -phyllophorous -phyllophyllin -phyllophyte -phyllopod -Phyllopoda -phyllopodan -phyllopode -phyllopodiform -phyllopodium -phyllopodous -phylloporphyrin -Phyllopteryx -phylloptosis -phyllopyrrole -phyllorhine -phyllorhinine -phylloscopine -Phylloscopus -phyllosiphonic -phyllosoma -Phyllosomata -phyllosome -Phyllospondyli -phyllospondylous -Phyllostachys -Phyllosticta -Phyllostoma -Phyllostomatidae -Phyllostomatinae -phyllostomatoid -phyllostomatous -phyllostome -Phyllostomidae -Phyllostominae -phyllostomine -phyllostomous -Phyllostomus -phyllotactic -phyllotactical -phyllotaxis -phyllotaxy -phyllous -phylloxanthin -Phylloxera -phylloxeran -phylloxeric -Phylloxeridae -phyllozooid -phylogenetic -phylogenetical -phylogenetically -phylogenic -phylogenist -phylogeny -phylogerontic -phylogerontism -phylography -phylology -phylon -phyloneanic -phylonepionic -phylum -phyma -phymata -phymatic -phymatid -Phymatidae -Phymatodes -phymatoid -phymatorhysin -phymatosis -Phymosia -Physa -physagogue -Physalia -physalian -Physaliidae -Physalis -physalite -Physalospora -Physapoda -Physaria -Physcia -Physciaceae -physcioid -Physcomitrium -Physeter -Physeteridae -Physeterinae -physeterine -physeteroid -Physeteroidea -physharmonica -physianthropy -physiatric -physiatrical -physiatrics -physic -physical -physicalism -physicalist -physicalistic -physicalistically -physicality -physically -physicalness -physician -physicianary -physiciancy -physicianed -physicianer -physicianess -physicianless -physicianly -physicianship -physicism -physicist -physicked -physicker -physicking -physicky -physicoastronomical -physicobiological -physicochemic -physicochemical -physicochemically -physicochemist -physicochemistry -physicogeographical -physicologic -physicological -physicomathematical -physicomathematics -physicomechanical -physicomedical -physicomental -physicomorph -physicomorphic -physicomorphism -physicooptics -physicophilosophical -physicophilosophy -physicophysiological -physicopsychical -physicosocial -physicotheological -physicotheologist -physicotheology -physicotherapeutic -physicotherapeutics -physicotherapy -physics -Physidae -physiform -physiochemical -physiochemically -physiocracy -physiocrat -physiocratic -physiocratism -physiocratist -physiogenesis -physiogenetic -physiogenic -physiogeny -physiognomic -physiognomical -physiognomically -physiognomics -physiognomist -physiognomize -physiognomonic -physiognomonical -physiognomy -physiogony -physiographer -physiographic -physiographical -physiographically -physiography -physiolater -physiolatrous -physiolatry -physiologer -physiologian -physiological -physiologically -physiologicoanatomic -physiologist -physiologize -physiologue -physiologus -physiology -physiopathological -physiophilist -physiophilosopher -physiophilosophical -physiophilosophy -physiopsychic -physiopsychical -physiopsychological -physiopsychology -physiosociological -physiosophic -physiosophy -physiotherapeutic -physiotherapeutical -physiotherapeutics -physiotherapist -physiotherapy -physiotype -physiotypy -physique -physiqued -physitheism -physitheistic -physitism -physiurgic -physiurgy -physocarpous -Physocarpus -physocele -physoclist -Physoclisti -physoclistic -physoclistous -Physoderma -physogastric -physogastrism -physogastry -physometra -Physonectae -physonectous -Physophorae -physophoran -physophore -physophorous -physopod -Physopoda -physopodan -Physostegia -Physostigma -physostigmine -physostomatous -physostome -Physostomi -physostomous -phytalbumose -phytase -Phytelephas -Phyteus -phytic -phytiferous -phytiform -phytin -phytivorous -phytobacteriology -phytobezoar -phytobiological -phytobiology -phytochemical -phytochemistry -phytochlorin -phytocidal -phytodynamics -phytoecological -phytoecologist -phytoecology -Phytoflagellata -phytogamy -phytogenesis -phytogenetic -phytogenetical -phytogenetically -phytogenic -phytogenous -phytogeny -phytogeographer -phytogeographic -phytogeographical -phytogeographically -phytogeography -phytoglobulin -phytograph -phytographer -phytographic -phytographical -phytographist -phytography -phytohormone -phytoid -phytol -Phytolacca -Phytolaccaceae -phytolaccaceous -phytolatrous -phytolatry -phytolithological -phytolithologist -phytolithology -phytologic -phytological -phytologically -phytologist -phytology -phytoma -Phytomastigina -Phytomastigoda -phytome -phytomer -phytometer -phytometric -phytometry -phytomonad -Phytomonadida -Phytomonadina -Phytomonas -phytomorphic -phytomorphology -phytomorphosis -phyton -phytonic -phytonomy -phytooecology -phytopaleontologic -phytopaleontological -phytopaleontologist -phytopaleontology -phytoparasite -phytopathogen -phytopathogenic -phytopathologic -phytopathological -phytopathologist -phytopathology -Phytophaga -phytophagan -phytophagic -Phytophagineae -phytophagous -phytophagy -phytopharmacologic -phytopharmacology -phytophenological -phytophenology -phytophil -phytophilous -Phytophthora -phytophylogenetic -phytophylogenic -phytophylogeny -phytophysiological -phytophysiology -phytoplankton -phytopsyche -phytoptid -Phytoptidae -phytoptose -phytoptosis -Phytoptus -phytorhodin -phytosaur -Phytosauria -phytosaurian -phytoserologic -phytoserological -phytoserologically -phytoserology -phytosis -phytosociologic -phytosociological -phytosociologically -phytosociologist -phytosociology -phytosterin -phytosterol -phytostrote -phytosynthesis -phytotaxonomy -phytotechny -phytoteratologic -phytoteratological -phytoteratologist -phytoteratology -Phytotoma -Phytotomidae -phytotomist -phytotomy -phytotopographical -phytotopography -phytotoxic -phytotoxin -phytovitellin -Phytozoa -phytozoan -Phytozoaria -phytozoon -phytyl -pi -Pia -pia -piaba -piacaba -piacle -piacular -piacularity -piacularly -piacularness -piaculum -piaffe -piaffer -pial -pialyn -pian -pianette -pianic -pianino -pianism -pianissimo -pianist -pianiste -pianistic -pianistically -Piankashaw -piannet -piano -pianoforte -pianofortist -pianograph -Pianokoto -Pianola -pianola -pianolist -pianologue -piarhemia -piarhemic -Piarist -Piaroa -Piaroan -Piaropus -Piarroan -piassava -Piast -piaster -piastre -piation -piazine -piazza -piazzaed -piazzaless -piazzalike -piazzian -pibcorn -piblokto -pibroch -pic -Pica -pica -picador -picadura -Picae -pical -picamar -picara -Picard -picarel -picaresque -Picariae -picarian -Picarii -picaro -picaroon -picary -picayune -picayunish -picayunishly -picayunishness -piccadill -piccadilly -piccalilli -piccolo -piccoloist -pice -Picea -Picene -picene -Picenian -piceoferruginous -piceotestaceous -piceous -piceworth -pichi -pichiciago -pichuric -pichurim -Pici -Picidae -piciform -Piciformes -Picinae -picine -pick -pickaback -pickable -pickableness -pickage -pickaninny -pickaroon -pickaway -pickax -picked -pickedly -pickedness -pickee -pickeer -picker -pickerel -pickerelweed -pickering -pickeringite -pickery -picket -picketboat -picketeer -picketer -pickfork -pickietar -pickings -pickle -picklelike -pickleman -pickler -pickleweed -pickleworm -picklock -pickman -pickmaw -picknick -picknicker -pickover -pickpocket -pickpocketism -pickpocketry -pickpole -pickpurse -pickshaft -picksman -picksmith -picksome -picksomeness -pickthank -pickthankly -pickthankness -pickthatch -picktooth -pickup -pickwick -Pickwickian -Pickwickianism -Pickwickianly -pickwork -picky -picnic -picnicker -picnickery -Picnickian -picnickish -picnicky -pico -picofarad -picoid -picoline -picolinic -picot -picotah -picotee -picotite -picqueter -picra -picramic -Picramnia -picrasmin -picrate -picrated -picric -Picris -picrite -picrocarmine -Picrodendraceae -Picrodendron -picroerythrin -picrol -picrolite -picromerite -picropodophyllin -picrorhiza -picrorhizin -picrotin -picrotoxic -picrotoxin -picrotoxinin -picryl -Pict -pict -pictarnie -Pictavi -Pictish -Pictland -pictogram -pictograph -pictographic -pictographically -pictography -Pictones -pictoradiogram -pictorial -pictorialism -pictorialist -pictorialization -pictorialize -pictorially -pictorialness -pictoric -pictorical -pictorically -picturability -picturable -picturableness -picturably -pictural -picture -picturecraft -pictured -picturedom -picturedrome -pictureful -pictureless -picturelike -picturely -picturemaker -picturemaking -picturer -picturesque -picturesquely -picturesqueness -picturesquish -picturization -picturize -pictury -picucule -picuda -picudilla -picudo -picul -piculet -piculule -Picumninae -Picumnus -Picunche -Picuris -Picus -pidan -piddle -piddler -piddling -piddock -pidgin -pidjajap -pie -piebald -piebaldism -piebaldly -piebaldness -piece -pieceable -pieceless -piecemaker -piecemeal -piecemealwise -piecen -piecener -piecer -piecette -piecewise -piecework -pieceworker -piecing -piecrust -pied -piedfort -piedly -piedmont -piedmontal -Piedmontese -piedmontite -piedness -Piegan -piehouse -pieless -pielet -pielum -piemag -pieman -piemarker -pien -pienanny -piend -piepan -pieplant -piepoudre -piepowder -pieprint -pier -pierage -Piercarlo -Pierce -pierce -pierceable -pierced -piercel -pierceless -piercent -piercer -piercing -piercingly -piercingness -pierdrop -Pierette -pierhead -Pierian -pierid -Pieridae -Pierides -Pieridinae -pieridine -Pierinae -pierine -Pieris -pierless -pierlike -Pierre -Pierrot -pierrot -pierrotic -pieshop -Piet -piet -pietas -Piete -Pieter -pietic -pietism -Pietist -pietist -pietistic -pietistical -pietistically -pietose -piety -piewife -piewipe -piewoman -piezo -piezochemical -piezochemistry -piezocrystallization -piezoelectric -piezoelectrically -piezoelectricity -piezometer -piezometric -piezometrical -piezometry -piff -piffle -piffler -pifine -pig -pigbelly -pigdan -pigdom -pigeon -pigeonable -pigeonberry -pigeoneer -pigeoner -pigeonfoot -pigeongram -pigeonhearted -pigeonhole -pigeonholer -pigeonman -pigeonry -pigeontail -pigeonweed -pigeonwing -pigeonwood -pigface -pigfish -pigflower -pigfoot -pigful -piggery -piggin -pigging -piggish -piggishly -piggishness -piggle -piggy -pighead -pigheaded -pigheadedly -pigheadedness -pigherd -pightle -pigless -piglet -pigling -piglinghood -pigly -pigmaker -pigmaking -pigman -pigment -pigmental -pigmentally -pigmentary -pigmentation -pigmentize -pigmentolysis -pigmentophage -pigmentose -Pigmy -pignolia -pignon -pignorate -pignoration -pignoratitious -pignorative -pignus -pignut -pigpen -pigritude -pigroot -pigsconce -pigskin -pigsney -pigstick -pigsticker -pigsty -pigtail -pigwash -pigweed -pigwidgeon -pigyard -piitis -pik -pika -pike -piked -pikel -pikelet -pikeman -pikemonger -piker -pikestaff -piketail -pikey -piki -piking -pikle -piky -pilage -pilandite -pilapil -Pilar -pilar -pilary -pilaster -pilastered -pilastering -pilastrade -pilastraded -pilastric -Pilate -Pilatian -pilau -pilaued -pilch -pilchard -pilcher -pilcorn -pilcrow -pile -Pilea -pileata -pileate -pileated -piled -pileiform -pileolated -pileolus -pileorhiza -pileorhize -pileous -piler -piles -pileus -pileweed -pilework -pileworm -pilewort -pilfer -pilferage -pilferer -pilfering -pilferingly -pilferment -pilgarlic -pilgarlicky -pilger -pilgrim -pilgrimage -pilgrimager -pilgrimatic -pilgrimatical -pilgrimdom -pilgrimer -pilgrimess -pilgrimism -pilgrimize -pilgrimlike -pilgrimwise -pili -pilidium -pilifer -piliferous -piliform -piligan -piliganine -piligerous -pilikai -pililloo -pilimiction -pilin -piline -piling -pilipilula -pilkins -pill -pillage -pillageable -pillagee -pillager -pillar -pillared -pillaret -pillaring -pillarist -pillarize -pillarlet -pillarlike -pillarwise -pillary -pillas -pillbox -pilled -pilledness -pillet -pilleus -pillion -pilliver -pilliwinks -pillmaker -pillmaking -pillmonger -pillorization -pillorize -pillory -pillow -pillowcase -pillowing -pillowless -pillowmade -pillowwork -pillowy -pillworm -pillwort -pilm -pilmy -Pilobolus -pilocarpidine -pilocarpine -Pilocarpus -Pilocereus -pilocystic -piloerection -pilomotor -pilon -pilonidal -pilori -pilose -pilosebaceous -pilosine -pilosis -pilosism -pilosity -Pilot -pilot -pilotage -pilotaxitic -pilotee -pilothouse -piloting -pilotism -pilotless -pilotman -pilotry -pilotship -pilotweed -pilous -Pilpai -Pilpay -pilpul -pilpulist -pilpulistic -piltock -pilula -pilular -Pilularia -pilule -pilulist -pilulous -pilum -Pilumnus -pilus -pilwillet -pily -Pim -Pima -Piman -pimaric -pimelate -Pimelea -pimelic -pimelite -pimelitis -Pimenta -pimento -pimenton -pimgenet -pimienta -pimiento -pimlico -pimola -pimp -pimperlimpimp -pimpernel -pimpery -Pimpinella -pimping -pimpish -Pimpla -pimple -pimpleback -pimpled -pimpleproof -Pimplinae -pimpliness -pimplo -pimploe -pimplous -pimply -pimpship -pin -pina -Pinaceae -pinaceous -pinaces -pinachrome -pinacle -Pinacoceras -Pinacoceratidae -pinacocytal -pinacocyte -pinacoid -pinacoidal -pinacol -pinacolate -pinacolic -pinacolin -pinacone -pinacoteca -pinaculum -Pinacyanol -pinafore -pinakiolite -pinakoidal -pinakotheke -Pinal -Pinaleno -Pinales -pinang -pinaster -pinatype -pinaverdol -pinax -pinball -pinbefore -pinbone -pinbush -pincase -pincement -pincer -pincerlike -pincers -pincerweed -pinch -pinchable -pinchback -pinchbeck -pinchbelly -pinchcock -pinchcommons -pinchcrust -pinche -pinched -pinchedly -pinchedness -pinchem -pincher -pinchfist -pinchfisted -pinchgut -pinching -pinchingly -pinchpenny -Pincian -Pinckneya -pincoffin -pincpinc -Pinctada -pincushion -pincushiony -pind -pinda -Pindari -Pindaric -pindarical -pindarically -Pindarism -Pindarist -Pindarize -Pindarus -pinder -pindling -pindy -pine -pineal -pinealism -pinealoma -pineapple -pined -pinedrops -pineland -pinene -piner -pinery -pinesap -pinetum -pineweed -pinewoods -piney -pinfall -pinfeather -pinfeathered -pinfeatherer -pinfeathery -pinfish -pinfold -Ping -ping -pingle -pingler -pingue -pinguecula -pinguedinous -pinguefaction -pinguefy -pinguescence -pinguescent -Pinguicula -pinguicula -Pinguiculaceae -pinguiculaceous -pinguid -pinguidity -pinguiferous -pinguin -pinguinitescent -pinguite -pinguitude -pinguitudinous -pinhead -pinheaded -pinheadedness -pinhold -pinhole -pinhook -pinic -pinicoline -pinicolous -piniferous -piniform -pining -piningly -pinion -pinioned -pinionless -pinionlike -pinipicrin -pinitannic -pinite -pinitol -pinivorous -pinjane -pinjra -pink -pinkberry -pinked -pinkeen -pinken -pinker -Pinkerton -Pinkertonism -pinkeye -pinkfish -pinkie -pinkify -pinkily -pinkiness -pinking -pinkish -pinkishness -pinkly -pinkness -pinkroot -pinksome -Pinkster -pinkweed -pinkwood -pinkwort -pinky -pinless -pinlock -pinmaker -Pinna -pinna -pinnace -pinnacle -pinnaclet -pinnae -pinnaglobin -pinnal -pinnate -pinnated -pinnatedly -pinnately -pinnatifid -pinnatifidly -pinnatilobate -pinnatilobed -pinnation -pinnatipartite -pinnatiped -pinnatisect -pinnatisected -pinnatodentate -pinnatopectinate -pinnatulate -pinned -pinnel -pinner -pinnet -Pinnidae -pinniferous -pinniform -pinnigerous -Pinnigrada -pinnigrade -pinninervate -pinninerved -pinning -pinningly -pinniped -Pinnipedia -pinnipedian -pinnisect -pinnisected -pinnitarsal -pinnitentaculate -pinniwinkis -pinnock -pinnoite -pinnotere -pinnothere -Pinnotheres -pinnotherian -Pinnotheridae -pinnula -pinnular -pinnulate -pinnulated -pinnule -pinnulet -pinny -pino -pinochle -pinocytosis -pinole -pinoleum -pinolia -pinolin -pinon -pinonic -pinpillow -pinpoint -pinprick -pinproof -pinrail -pinrowed -pinscher -pinsons -pint -pinta -pintadera -pintado -pintadoite -pintail -pintano -pinte -pintle -pinto -pintura -pinulus -Pinus -pinweed -pinwing -pinwork -pinworm -piny -pinyl -pinyon -pioneer -pioneerdom -pioneership -pionnotes -pioscope -pioted -piotine -Piotr -piotty -pioury -pious -piously -piousness -Pioxe -pip -pipa -pipage -pipal -pipe -pipeage -pipecoline -pipecolinic -piped -pipefish -pipeful -pipelayer -pipeless -pipelike -pipeline -pipeman -pipemouth -Piper -piper -Piperaceae -piperaceous -Piperales -piperate -piperazin -piperazine -piperic -piperide -piperideine -piperidge -piperidide -piperidine -piperine -piperitious -piperitone -piperly -piperno -piperoid -piperonal -piperonyl -pipery -piperylene -pipestapple -pipestem -pipestone -pipet -pipette -pipewalker -pipewood -pipework -pipewort -pipi -Pipidae -Pipil -Pipile -Pipilo -piping -pipingly -pipingness -pipiri -pipistrel -pipistrelle -Pipistrellus -pipit -pipkin -pipkinet -pipless -pipped -pipper -pippin -pippiner -pippinface -pippy -Pipra -Pipridae -Piprinae -piprine -piproid -pipsissewa -Piptadenia -Piptomeris -pipunculid -Pipunculidae -pipy -piquable -piquance -piquancy -piquant -piquantly -piquantness -pique -piquet -piquia -piqure -pir -piracy -piragua -Piranga -piranha -pirate -piratelike -piratery -piratess -piratical -piratically -piratism -piratize -piraty -Pirene -Piricularia -pirijiri -piripiri -piririgua -pirl -pirn -pirner -pirnie -pirny -Piro -pirogue -pirol -piroplasm -Piroplasma -piroplasmosis -pirouette -pirouetter -pirouettist -pirr -pirraura -pirrmaw -pirssonite -Pisaca -pisaca -pisachee -Pisan -pisang -pisanite -Pisauridae -pisay -piscary -Piscataqua -Piscataway -piscation -piscatology -piscator -piscatorial -piscatorialist -piscatorially -piscatorian -piscatorious -piscatory -Pisces -piscian -piscicapture -piscicapturist -piscicolous -piscicultural -pisciculturally -pisciculture -pisciculturist -Piscid -Piscidia -piscifauna -pisciferous -pisciform -piscina -piscinal -piscine -piscinity -Piscis -piscivorous -pisco -pise -pish -pishaug -pishogue -Pishquow -pishu -Pisidium -pisiform -Pisistratean -Pisistratidae -pisk -pisky -pismire -pismirism -piso -pisolite -pisolitic -Pisonia -piss -pissabed -pissant -pist -pistache -pistachio -Pistacia -pistacite -pistareen -Pistia -pistic -pistil -pistillaceous -pistillar -pistillary -pistillate -pistillid -pistilliferous -pistilliform -pistilligerous -pistilline -pistillode -pistillody -pistilloid -pistilogy -pistle -Pistoiese -pistol -pistole -pistoleer -pistolet -pistolgram -pistolgraph -pistollike -pistolography -pistology -pistolproof -pistolwise -piston -pistonhead -pistonlike -pistrix -Pisum -pit -pita -Pitahauerat -Pitahauirata -pitahaya -pitanga -pitangua -pitapat -pitapatation -pitarah -pitau -Pitawas -pitaya -pitayita -Pitcairnia -pitch -pitchable -pitchblende -pitcher -pitchered -pitcherful -pitcherlike -pitcherman -pitchfork -pitchhole -pitchi -pitchiness -pitching -pitchlike -pitchman -pitchometer -pitchout -pitchpike -pitchpole -pitchpoll -pitchstone -pitchwork -pitchy -piteous -piteously -piteousness -pitfall -pith -pithecan -pithecanthrope -pithecanthropic -pithecanthropid -Pithecanthropidae -pithecanthropoid -Pithecanthropus -Pithecia -pithecian -Pitheciinae -pitheciine -pithecism -pithecoid -Pithecolobium -pithecological -pithecometric -pithecomorphic -pithecomorphism -pithful -pithily -pithiness -pithless -pithlessly -Pithoegia -Pithoigia -pithole -pithos -pithsome -pithwork -pithy -pitiability -pitiable -pitiableness -pitiably -pitiedly -pitiedness -pitier -pitiful -pitifully -pitifulness -pitikins -pitiless -pitilessly -pitilessness -pitless -pitlike -pitmaker -pitmaking -pitman -pitmark -pitmirk -pitometer -pitpan -pitpit -pitside -Pitta -pittacal -pittance -pittancer -pitted -pitter -pitticite -Pittidae -pittine -pitting -Pittism -Pittite -pittite -pittoid -Pittosporaceae -pittosporaceous -pittospore -Pittosporum -Pittsburgher -pituital -pituitary -pituite -pituitous -pituitousness -Pituitrin -pituri -pitwood -pitwork -pitwright -pity -pitying -pityingly -Pitylus -pityocampa -pityproof -pityriasic -pityriasis -Pityrogramma -pityroid -piuri -piuricapsular -pivalic -pivot -pivotal -pivotally -pivoter -pix -pixie -pixilated -pixilation -pixy -pize -pizza -pizzeria -pizzicato -pizzle -placability -placable -placableness -placably -Placaean -placard -placardeer -placarder -placate -placater -placation -placative -placatively -placatory -placcate -place -placeable -Placean -placebo -placeful -placeless -placelessly -placemaker -placemaking -placeman -placemanship -placement -placemonger -placemongering -placenta -placental -Placentalia -placentalian -placentary -placentate -placentation -placentiferous -placentiform -placentigerous -placentitis -placentoid -placentoma -placer -placet -placewoman -placid -placidity -placidly -placidness -placitum -plack -placket -plackless -placochromatic -placode -placoderm -placodermal -placodermatous -Placodermi -placodermoid -placodont -Placodontia -Placodus -placoganoid -placoganoidean -Placoganoidei -placoid -placoidal -placoidean -Placoidei -Placoides -Placophora -placophoran -placoplast -placula -placuntitis -placuntoma -Placus -pladaroma -pladarosis -plaga -plagal -plagate -plage -Plagianthus -plagiaplite -plagiarical -plagiarism -plagiarist -plagiaristic -plagiaristically -plagiarization -plagiarize -plagiarizer -plagiary -plagihedral -plagiocephalic -plagiocephalism -plagiocephaly -Plagiochila -plagioclase -plagioclasite -plagioclastic -plagioclinal -plagiodont -plagiograph -plagioliparite -plagionite -plagiopatagium -plagiophyre -Plagiostomata -plagiostomatous -plagiostome -Plagiostomi -plagiostomous -plagiotropic -plagiotropically -plagiotropism -plagiotropous -plagium -plagose -plagosity -plague -plagued -plagueful -plagueless -plagueproof -plaguer -plaguesome -plaguesomeness -plaguily -plaguy -plaice -plaid -plaided -plaidie -plaiding -plaidman -plaidy -plain -plainback -plainbacks -plainer -plainful -plainhearted -plainish -plainly -plainness -plainscraft -plainsfolk -plainsman -plainsoled -plainstones -plainswoman -plaint -plaintail -plaintiff -plaintiffship -plaintile -plaintive -plaintively -plaintiveness -plaintless -plainward -plaister -plait -plaited -plaiter -plaiting -plaitless -plaitwork -plak -plakat -plan -planable -planaea -planar -Planaria -planarian -Planarida -planaridan -planariform -planarioid -planarity -planate -planation -planch -plancheite -plancher -planchet -planchette -planching -planchment -plancier -Planckian -plandok -plane -planeness -planer -Planera -planet -planeta -planetable -planetabler -planetal -planetaria -planetarian -planetarily -planetarium -planetary -planeted -planetesimal -planeticose -planeting -planetist -planetkin -planetless -planetlike -planetogeny -planetography -planetoid -planetoidal -planetologic -planetologist -planetology -planetule -planform -planful -planfully -planfulness -plang -plangency -plangent -plangently -plangor -plangorous -planicaudate -planicipital -planidorsate -planifolious -planiform -planigraph -planilla -planimetric -planimetrical -planimetry -planineter -planipennate -Planipennia -planipennine -planipetalous -planiphyllous -planirostral -planirostrate -planiscope -planiscopic -planish -planisher -planispheral -planisphere -planispheric -planispherical -planispiral -planity -plank -plankage -plankbuilt -planker -planking -plankless -planklike -planksheer -plankter -planktologist -planktology -plankton -planktonic -planktont -plankways -plankwise -planky -planless -planlessly -planlessness -planner -planoblast -planoblastic -Planococcus -planoconical -planocylindric -planoferrite -planogamete -planograph -planographic -planographist -planography -planohorizontal -planolindrical -planometer -planometry -planomiller -planoorbicular -Planorbidae -planorbiform -planorbine -Planorbis -planorboid -planorotund -Planosarcina -planosol -planosome -planospiral -planospore -planosubulate -plant -planta -plantable -plantad -Plantae -plantage -Plantaginaceae -plantaginaceous -Plantaginales -plantagineous -Plantago -plantain -plantal -plantar -plantaris -plantarium -plantation -plantationlike -plantdom -planter -planterdom -planterly -plantership -Plantigrada -plantigrade -plantigrady -planting -plantivorous -plantless -plantlet -plantlike -plantling -plantocracy -plantsman -plantula -plantular -plantule -planula -planulan -planular -planulate -planuliform -planuloid -Planuloidea -planuria -planury -planxty -plap -plappert -plaque -plaquette -plash -plasher -plashet -plashingly -plashment -plashy -plasm -plasma -plasmagene -plasmapheresis -plasmase -plasmatic -plasmatical -plasmation -plasmatoparous -plasmatorrhexis -plasmic -plasmocyte -plasmocytoma -plasmode -plasmodesm -plasmodesma -plasmodesmal -plasmodesmic -plasmodesmus -plasmodia -plasmodial -plasmodiate -plasmodic -plasmodiocarp -plasmodiocarpous -Plasmodiophora -Plasmodiophoraceae -Plasmodiophorales -plasmodium -plasmogen -plasmolysis -plasmolytic -plasmolytically -plasmolyzability -plasmolyzable -plasmolyze -plasmoma -Plasmon -Plasmopara -plasmophagous -plasmophagy -plasmoptysis -plasmosoma -plasmosome -plasmotomy -plasome -plass -plasson -plastein -plaster -plasterbill -plasterboard -plasterer -plasteriness -plastering -plasterlike -plasterwise -plasterwork -plastery -Plastic -plastic -plastically -plasticimeter -Plasticine -plasticine -plasticism -plasticity -plasticization -plasticize -plasticizer -plasticly -plastics -plastid -plastidium -plastidome -Plastidozoa -plastidular -plastidule -plastify -plastin -plastinoid -plastisol -plastochondria -plastochron -plastochrone -plastodynamia -plastodynamic -plastogamic -plastogamy -plastogene -plastomere -plastometer -plastosome -plastotype -plastral -plastron -plastrum -plat -Plataean -Platalea -Plataleidae -plataleiform -Plataleinae -plataleine -platan -Platanaceae -platanaceous -platane -platanist -Platanista -Platanistidae -platano -Platanus -platband -platch -plate -platea -plateasm -plateau -plateaux -plated -plateful -plateholder -plateiasmus -platelayer -plateless -platelet -platelike -platemaker -platemaking -plateman -platen -plater -platerer -plateresque -platery -plateway -platework -plateworker -platform -platformally -platformed -platformer -platformish -platformism -platformist -platformistic -platformless -platformy -platic -platicly -platilla -platina -platinamine -platinammine -platinate -Platine -plating -platinic -platinichloric -platinichloride -platiniferous -platiniridium -platinite -platinization -platinize -platinochloric -platinochloride -platinocyanic -platinocyanide -platinoid -platinotype -platinous -platinum -platinumsmith -platitude -platitudinal -platitudinarian -platitudinarianism -platitudinism -platitudinist -platitudinization -platitudinize -platitudinizer -platitudinous -platitudinously -platitudinousness -Platoda -platode -Platodes -platoid -Platonesque -platonesque -Platonian -Platonic -Platonical -Platonically -Platonicalness -Platonician -Platonicism -Platonism -Platonist -Platonistic -Platonization -Platonize -Platonizer -platoon -platopic -platosamine -platosammine -Platt -Plattdeutsch -platted -platten -platter -platterface -platterful -platting -plattnerite -platty -platurous -platy -platybasic -platybrachycephalic -platybrachycephalous -platybregmatic -platycarpous -Platycarpus -Platycarya -platycelian -platycelous -platycephalic -Platycephalidae -platycephalism -platycephaloid -platycephalous -Platycephalus -platycephaly -Platycercinae -platycercine -Platycercus -Platycerium -platycheiria -platycnemia -platycnemic -Platycodon -platycoria -platycrania -platycranial -Platyctenea -platycyrtean -platydactyl -platydactyle -platydactylous -platydolichocephalic -platydolichocephalous -platyfish -platyglossal -platyglossate -platyglossia -Platyhelmia -platyhelminth -Platyhelminthes -platyhelminthic -platyhieric -platykurtic -platylobate -platymeria -platymeric -platymery -platymesaticephalic -platymesocephalic -platymeter -platymyoid -platynite -platynotal -platyodont -platyope -platyopia -platyopic -platypellic -platypetalous -platyphyllous -platypod -Platypoda -platypodia -platypodous -Platyptera -platypus -platypygous -Platyrhina -Platyrhini -platyrhynchous -platyrrhin -Platyrrhina -platyrrhine -Platyrrhini -platyrrhinian -platyrrhinic -platyrrhinism -platyrrhiny -platysma -platysmamyoides -platysomid -Platysomidae -Platysomus -platystaphyline -Platystemon -platystencephalia -platystencephalic -platystencephalism -platystencephaly -platysternal -Platysternidae -Platystomidae -platystomous -platytrope -platytropy -plaud -plaudation -plaudit -plaudite -plauditor -plauditory -plauenite -plausibility -plausible -plausibleness -plausibly -plausive -plaustral -Plautine -Plautus -play -playa -playability -playable -playback -playbill -playbook -playbox -playboy -playboyism -playbroker -playcraft -playcraftsman -playday -playdown -player -playerdom -playeress -playfellow -playfellowship -playfield -playfolk -playful -playfully -playfulness -playgoer -playgoing -playground -playhouse -playingly -playless -playlet -playlike -playmaker -playmaking -playman -playmare -playmate -playmonger -playmongering -playock -playpen -playreader -playroom -playscript -playsome -playsomely -playsomeness -playstead -plaything -playtime -playward -playwoman -playwork -playwright -playwrightess -playwrighting -playwrightry -playwriter -playwriting -plaza -plazolite -plea -pleach -pleached -pleacher -plead -pleadable -pleadableness -pleader -pleading -pleadingly -pleadingness -pleaproof -pleasable -pleasableness -pleasance -pleasant -pleasantable -pleasantish -pleasantly -pleasantness -pleasantry -pleasantsome -please -pleasedly -pleasedness -pleaseman -pleaser -pleaship -pleasing -pleasingly -pleasingness -pleasurability -pleasurable -pleasurableness -pleasurably -pleasure -pleasureful -pleasurehood -pleasureless -pleasurelessly -pleasureman -pleasurement -pleasuremonger -pleasureproof -pleasurer -pleasuring -pleasurist -pleasurous -pleat -pleater -pleatless -pleb -plebe -plebeian -plebeiance -plebeianize -plebeianly -plebeianness -plebeity -plebianism -plebicolar -plebicolist -plebificate -plebification -plebify -plebiscitarian -plebiscitarism -plebiscitary -plebiscite -plebiscitic -plebiscitum -plebs -pleck -Plecoptera -plecopteran -plecopterid -plecopterous -Plecotinae -plecotine -Plecotus -plectognath -Plectognathi -plectognathic -plectognathous -plectopter -plectopteran -plectopterous -plectospondyl -Plectospondyli -plectospondylous -plectre -plectridial -plectridium -plectron -plectrum -pled -pledge -pledgeable -pledgee -pledgeless -pledgeor -pledger -pledgeshop -pledget -pledgor -Plegadis -plegaphonia -plegometer -Pleiades -pleiobar -pleiochromia -pleiochromic -pleiomastia -pleiomazia -pleiomerous -pleiomery -pleion -Pleione -pleionian -pleiophyllous -pleiophylly -pleiotaxis -pleiotropic -pleiotropically -pleiotropism -Pleistocene -Pleistocenic -pleistoseist -plemochoe -plemyrameter -plenarily -plenariness -plenarium -plenarty -plenary -plenicorn -pleniloquence -plenilunal -plenilunar -plenilunary -plenilune -plenipo -plenipotence -plenipotent -plenipotential -plenipotentiality -plenipotentiarily -plenipotentiarize -Plenipotentiary -plenipotentiary -plenipotentiaryship -plenish -plenishing -plenishment -plenism -plenist -plenitide -plenitude -plenitudinous -plenshing -plenteous -plenteously -plenteousness -plentiful -plentifully -plentifulness -plentify -plenty -plenum -pleny -pleochroic -pleochroism -pleochroitic -pleochromatic -pleochromatism -pleochroous -pleocrystalline -pleodont -pleomastia -pleomastic -pleomazia -pleometrosis -pleometrotic -pleomorph -pleomorphic -pleomorphism -pleomorphist -pleomorphous -pleomorphy -pleon -pleonal -pleonasm -pleonast -pleonaste -pleonastic -pleonastical -pleonastically -pleonectic -pleonexia -pleonic -pleophyletic -pleopod -pleopodite -Pleospora -Pleosporaceae -plerergate -plerocercoid -pleroma -pleromatic -plerome -pleromorph -plerophoric -plerophory -plerosis -plerotic -Plesianthropus -plesiobiosis -plesiobiotic -plesiomorphic -plesiomorphism -plesiomorphous -plesiosaur -Plesiosauri -Plesiosauria -plesiosaurian -plesiosauroid -Plesiosaurus -plesiotype -plessigraph -plessimeter -plessimetric -plessimetry -plessor -Plethodon -plethodontid -Plethodontidae -plethora -plethoretic -plethoretical -plethoric -plethorical -plethorically -plethorous -plethory -plethysmograph -plethysmographic -plethysmographically -plethysmography -pleura -Pleuracanthea -Pleuracanthidae -Pleuracanthini -pleuracanthoid -Pleuracanthus -pleural -pleuralgia -pleuralgic -pleurapophysial -pleurapophysis -pleurectomy -pleurenchyma -pleurenchymatous -pleuric -pleuriseptate -pleurisy -pleurite -pleuritic -pleuritical -pleuritically -pleuritis -Pleurobrachia -Pleurobrachiidae -pleurobranch -pleurobranchia -pleurobranchial -pleurobranchiate -pleurobronchitis -Pleurocapsa -Pleurocapsaceae -pleurocapsaceous -pleurocarp -Pleurocarpi -pleurocarpous -pleurocele -pleurocentesis -pleurocentral -pleurocentrum -Pleurocera -pleurocerebral -Pleuroceridae -pleuroceroid -Pleurococcaceae -pleurococcaceous -Pleurococcus -Pleurodelidae -Pleurodira -pleurodiran -pleurodire -pleurodirous -pleurodiscous -pleurodont -pleurodynia -pleurodynic -pleurogenic -pleurogenous -pleurohepatitis -pleuroid -pleurolith -pleurolysis -pleuron -Pleuronectes -pleuronectid -Pleuronectidae -pleuronectoid -Pleuronema -pleuropedal -pleuropericardial -pleuropericarditis -pleuroperitonaeal -pleuroperitoneal -pleuroperitoneum -pleuropneumonia -pleuropneumonic -pleuropodium -pleuropterygian -Pleuropterygii -pleuropulmonary -pleurorrhea -Pleurosaurus -Pleurosigma -pleurospasm -pleurosteal -Pleurosteon -pleurostict -Pleurosticti -Pleurostigma -pleurothotonic -pleurothotonus -Pleurotoma -Pleurotomaria -Pleurotomariidae -pleurotomarioid -Pleurotomidae -pleurotomine -pleurotomoid -pleurotomy -pleurotonic -pleurotonus -Pleurotremata -pleurotribal -pleurotribe -pleurotropous -Pleurotus -pleurotyphoid -pleurovisceral -pleurum -pleuston -pleustonic -plew -plex -plexal -plexicose -plexiform -pleximeter -pleximetric -pleximetry -plexodont -plexometer -plexor -plexure -plexus -pliability -pliable -pliableness -pliably -pliancy -pliant -pliantly -pliantness -plica -plicable -plical -plicate -plicated -plicately -plicateness -plicater -plicatile -plication -plicative -plicatocontorted -plicatocristate -plicatolacunose -plicatolobate -plicatopapillose -plicator -plicatoundulate -plicatulate -plicature -pliciferous -pliciform -plied -plier -plies -pliers -plight -plighted -plighter -plim -plimsoll -Plinian -plinth -plinther -plinthiform -plinthless -plinthlike -Pliny -Plinyism -Pliocene -Pliohippus -Pliopithecus -pliosaur -pliosaurian -Pliosauridae -Pliosaurus -pliothermic -Pliotron -pliskie -plisky -ploat -ploce -Ploceidae -ploceiform -Ploceinae -Ploceus -plock -plod -plodder -plodderly -plodding -ploddingly -ploddingness -plodge -Ploima -ploimate -plomb -plook -plop -ploration -ploratory -plosion -plosive -plot -plote -plotful -Plotinian -Plotinic -Plotinical -Plotinism -Plotinist -Plotinize -plotless -plotlessness -plotproof -plottage -plotted -plotter -plottery -plotting -plottingly -plotty -plough -ploughmanship -ploughtail -plouk -plouked -plouky -plounce -plousiocracy -plout -Plouteneion -plouter -plover -ploverlike -plovery -plow -plowable -plowbote -plowboy -plower -plowfish -plowfoot -plowgang -plowgate -plowgraith -plowhead -plowing -plowjogger -plowland -plowlight -plowline -plowmaker -plowman -plowmanship -plowmell -plowpoint -Plowrightia -plowshare -plowshoe -plowstaff -plowstilt -plowtail -plowwise -plowwoman -plowwright -ploy -ployment -Pluchea -pluck -pluckage -plucked -pluckedness -plucker -Pluckerian -pluckily -pluckiness -pluckless -plucklessness -plucky -plud -pluff -pluffer -pluffy -plug -plugboard -plugdrawer -pluggable -plugged -plugger -plugging -pluggingly -pluggy -plughole -plugless -pluglike -plugman -plugtray -plugtree -plum -pluma -plumaceous -plumach -plumade -plumage -plumaged -plumagery -plumasite -plumate -Plumatella -plumatellid -Plumatellidae -plumatelloid -plumb -plumbable -plumbage -Plumbaginaceae -plumbaginaceous -plumbagine -plumbaginous -plumbago -plumbate -plumbean -plumbeous -plumber -plumbership -plumbery -plumbet -plumbic -plumbiferous -plumbing -plumbism -plumbisolvent -plumbite -plumbless -plumbness -plumbog -plumbojarosite -plumboniobate -plumbosolvency -plumbosolvent -plumbous -plumbum -plumcot -plumdamas -plumdamis -plume -plumed -plumeless -plumelet -plumelike -plumemaker -plumemaking -plumeopicean -plumeous -plumer -plumery -plumet -plumette -plumicorn -plumier -Plumiera -plumieride -plumification -plumiform -plumiformly -plumify -plumigerous -pluminess -plumiped -plumipede -plumist -plumless -plumlet -plumlike -plummer -plummet -plummeted -plummetless -plummy -plumose -plumosely -plumoseness -plumosity -plumous -plump -plumpen -plumper -plumping -plumpish -plumply -plumpness -plumps -plumpy -plumula -plumulaceous -plumular -Plumularia -plumularian -Plumulariidae -plumulate -plumule -plumuliform -plumulose -plumy -plunder -plunderable -plunderage -plunderbund -plunderer -plunderess -plundering -plunderingly -plunderless -plunderous -plunderproof -plunge -plunger -plunging -plungingly -plunk -plunther -plup -plupatriotic -pluperfect -pluperfectly -pluperfectness -plural -pluralism -pluralist -pluralistic -pluralistically -plurality -pluralization -pluralize -pluralizer -plurally -plurative -plurennial -pluriaxial -pluricarinate -pluricarpellary -pluricellular -pluricentral -pluricipital -pluricuspid -pluricuspidate -pluridentate -pluries -plurifacial -plurifetation -plurification -pluriflagellate -pluriflorous -plurifoliate -plurifoliolate -plurify -pluriglandular -pluriguttulate -plurilateral -plurilingual -plurilingualism -plurilingualist -plurilocular -plurimammate -plurinominal -plurinucleate -pluripara -pluriparity -pluriparous -pluripartite -pluripetalous -pluripotence -pluripotent -pluripresence -pluriseptate -pluriserial -pluriseriate -pluriseriated -plurisetose -plurispiral -plurisporous -plurisyllabic -plurisyllable -plurivalent -plurivalve -plurivorous -plurivory -plus -plush -plushed -plushette -plushily -plushiness -plushlike -plushy -Plusia -Plusiinae -plusquamperfect -plussage -Plutarchian -Plutarchic -Plutarchical -Plutarchically -plutarchy -pluteal -plutean -pluteiform -Plutella -pluteus -Pluto -plutocracy -plutocrat -plutocratic -plutocratical -plutocratically -plutolatry -plutological -plutologist -plutology -plutomania -Plutonian -plutonian -plutonic -Plutonion -plutonism -plutonist -plutonite -Plutonium -plutonium -plutonometamorphism -plutonomic -plutonomist -plutonomy -pluvial -pluvialiform -pluvialine -Pluvialis -pluvian -pluvine -pluviograph -pluviographic -pluviographical -pluviography -pluviometer -pluviometric -pluviometrical -pluviometrically -pluviometry -pluvioscope -pluviose -pluviosity -pluvious -ply -plyer -plying -plyingly -Plymouth -Plymouthism -Plymouthist -Plymouthite -Plynlymmon -plywood -pneodynamics -pneograph -pneomanometer -pneometer -pneometry -pneophore -pneoscope -pneuma -pneumarthrosis -pneumathaemia -pneumatic -pneumatical -pneumatically -pneumaticity -pneumatics -pneumatism -pneumatist -pneumatize -pneumatized -pneumatocardia -pneumatocele -pneumatochemical -pneumatochemistry -pneumatocyst -pneumatocystic -pneumatode -pneumatogenic -pneumatogenous -pneumatogram -pneumatograph -pneumatographer -pneumatographic -pneumatography -pneumatolitic -pneumatologic -pneumatological -pneumatologist -pneumatology -pneumatolysis -pneumatolytic -Pneumatomachian -Pneumatomachist -Pneumatomachy -pneumatometer -pneumatometry -pneumatomorphic -pneumatonomy -pneumatophany -pneumatophilosophy -pneumatophobia -pneumatophonic -pneumatophony -pneumatophore -pneumatophorous -pneumatorrhachis -pneumatoscope -pneumatosic -pneumatosis -pneumatotactic -pneumatotherapeutics -pneumatotherapy -Pneumatria -pneumaturia -pneumectomy -pneumobacillus -Pneumobranchia -Pneumobranchiata -pneumocele -pneumocentesis -pneumochirurgia -pneumococcal -pneumococcemia -pneumococcic -pneumococcous -pneumococcus -pneumoconiosis -pneumoderma -pneumodynamic -pneumodynamics -pneumoencephalitis -pneumoenteritis -pneumogastric -pneumogram -pneumograph -pneumographic -pneumography -pneumohemothorax -pneumohydropericardium -pneumohydrothorax -pneumolith -pneumolithiasis -pneumological -pneumology -pneumolysis -pneumomalacia -pneumomassage -Pneumometer -pneumomycosis -pneumonalgia -pneumonectasia -pneumonectomy -pneumonedema -pneumonia -pneumonic -pneumonitic -pneumonitis -pneumonocace -pneumonocarcinoma -pneumonocele -pneumonocentesis -pneumonocirrhosis -pneumonoconiosis -pneumonodynia -pneumonoenteritis -pneumonoerysipelas -pneumonographic -pneumonography -pneumonokoniosis -pneumonolith -pneumonolithiasis -pneumonolysis -pneumonomelanosis -pneumonometer -pneumonomycosis -pneumonoparesis -pneumonopathy -pneumonopexy -pneumonophorous -pneumonophthisis -pneumonopleuritis -pneumonorrhagia -pneumonorrhaphy -pneumonosis -pneumonotherapy -pneumonotomy -pneumony -pneumopericardium -pneumoperitoneum -pneumoperitonitis -pneumopexy -pneumopleuritis -pneumopyothorax -pneumorrachis -pneumorrhachis -pneumorrhagia -pneumotactic -pneumotherapeutics -pneumotherapy -pneumothorax -pneumotomy -pneumotoxin -pneumotropic -pneumotropism -pneumotyphoid -pneumotyphus -pneumoventriculography -Po -po -Poa -Poaceae -poaceous -poach -poachable -poacher -poachiness -poachy -Poales -poalike -pob -pobby -Poblacht -poblacion -pobs -pochade -pochard -pochay -poche -pochette -pocilliform -pock -pocket -pocketable -pocketableness -pocketbook -pocketed -pocketer -pocketful -pocketing -pocketknife -pocketless -pocketlike -pockety -pockhouse -pockily -pockiness -pockmanteau -pockmantie -pockmark -pockweed -pockwood -pocky -poco -pococurante -pococuranteism -pococurantic -pococurantish -pococurantism -pococurantist -pocosin -poculary -poculation -poculent -poculiform -pod -podagra -podagral -podagric -podagrical -podagrous -podal -podalgia -podalic -Podaliriidae -Podalirius -Podarge -Podargidae -Podarginae -podargine -podargue -Podargus -podarthral -podarthritis -podarthrum -podatus -Podaxonia -podaxonial -podded -podder -poddidge -poddish -poddle -poddy -podelcoma -podeon -podesta -podesterate -podetiiform -podetium -podex -podge -podger -podgily -podginess -podgy -podial -podiatrist -podiatry -podical -Podiceps -podices -Podicipedidae -podilegous -podite -poditic -poditti -podium -podler -podley -podlike -podobranch -podobranchia -podobranchial -podobranchiate -podocarp -Podocarpaceae -Podocarpineae -podocarpous -Podocarpus -podocephalous -pododerm -pododynia -podogyn -podogyne -podogynium -Podolian -podolite -podology -podomancy -podomere -podometer -podometry -Podophrya -Podophryidae -Podophthalma -Podophthalmata -podophthalmate -podophthalmatous -Podophthalmia -podophthalmian -podophthalmic -podophthalmite -podophthalmitic -podophthalmous -Podophyllaceae -podophyllic -podophyllin -podophyllotoxin -podophyllous -Podophyllum -podophyllum -podoscaph -podoscapher -podoscopy -Podosomata -podosomatous -podosperm -Podosphaera -Podostemaceae -podostemaceous -podostemad -Podostemon -Podostemonaceae -podostemonaceous -Podostomata -podostomatous -podotheca -podothecal -Podozamites -Podsnap -Podsnappery -podsol -podsolic -podsolization -podsolize -Podunk -Podura -poduran -podurid -Poduridae -podware -podzol -podzolic -podzolization -podzolize -poe -Poecile -Poeciliidae -poecilitic -Poecilocyttares -poecilocyttarous -poecilogonous -poecilogony -poecilomere -poecilonym -poecilonymic -poecilonymy -poecilopod -Poecilopoda -poecilopodous -poem -poematic -poemet -poemlet -Poephaga -poephagous -Poephagus -poesie -poesiless -poesis -poesy -poet -poetaster -poetastering -poetasterism -poetastery -poetastress -poetastric -poetastrical -poetastry -poetcraft -poetdom -poetesque -poetess -poethood -poetic -poetical -poeticality -poetically -poeticalness -poeticism -poeticize -poeticness -poetics -poeticule -poetito -poetization -poetize -poetizer -poetless -poetlike -poetling -poetly -poetomachia -poetress -poetry -poetryless -poetship -poetwise -pogamoggan -pogge -poggy -Pogo -Pogonatum -Pogonia -pogoniasis -pogoniate -pogonion -pogonip -pogoniris -pogonite -pogonological -pogonologist -pogonology -pogonotomy -pogonotrophy -pogrom -pogromist -pogromize -pogy -poh -poha -pohickory -pohna -pohutukawa -poi -Poiana -Poictesme -poietic -poignance -poignancy -poignant -poignantly -poignet -poikilitic -poikiloblast -poikiloblastic -poikilocyte -poikilocythemia -poikilocytosis -poikilotherm -poikilothermic -poikilothermism -poil -poilu -poimenic -poimenics -Poinciana -poind -poindable -poinder -poinding -Poinsettia -point -pointable -pointage -pointed -pointedly -pointedness -pointel -pointer -pointful -pointfully -pointfulness -pointillism -pointillist -pointing -pointingly -pointless -pointlessly -pointlessness -pointlet -pointleted -pointmaker -pointman -pointment -pointrel -pointsman -pointswoman -pointways -pointwise -pointy -poisable -poise -poised -poiser -poison -poisonable -poisonful -poisonfully -poisoning -poisonless -poisonlessness -poisonmaker -poisonous -poisonously -poisonousness -poisonproof -poisonweed -poisonwood -poitrail -poitrel -poivrade -pokable -Pokan -Pokanoket -poke -pokeberry -poked -pokeful -pokeloken -pokeout -poker -pokerish -pokerishly -pokerishness -pokeroot -pokeweed -pokey -pokily -pokiness -poking -Pokom -Pokomam -Pokomo -pokomoo -Pokonchi -pokunt -poky -pol -Polab -Polabian -Polabish -polacca -Polack -polack -polacre -Polander -Polanisia -polar -polaric -Polarid -polarigraphic -polarimeter -polarimetric -polarimetry -Polaris -polariscope -polariscopic -polariscopically -polariscopist -polariscopy -polaristic -polaristrobometer -polarity -polarizability -polarizable -polarization -polarize -polarizer -polarly -polarogram -polarograph -polarographic -polarographically -polarography -Polaroid -polarward -polaxis -poldavis -poldavy -polder -polderboy -polderman -Pole -pole -polearm -poleax -poleaxe -poleaxer -poleburn -polecat -polehead -poleless -poleman -polemarch -polemic -polemical -polemically -polemician -polemicist -polemics -polemist -polemize -Polemoniaceae -polemoniaceous -Polemoniales -Polemonium -polemoscope -polenta -poler -polesetter -Polesian -polesman -polestar -poleward -polewards -poley -poliad -poliadic -Polian -polianite -Polianthes -police -policed -policedom -policeless -policeman -policemanish -policemanism -policemanlike -policemanship -policewoman -Polichinelle -policial -policize -policizer -policlinic -policy -policyholder -poliencephalitis -poliencephalomyelitis -poligar -poligarship -poligraphical -Polinices -polio -polioencephalitis -polioencephalomyelitis -poliomyelitis -poliomyelopathy -polioneuromere -poliorcetic -poliorcetics -poliosis -polis -Polish -polish -polishable -polished -polishedly -polishedness -polisher -polishment -polisman -polissoir -Polistes -politarch -politarchic -Politbureau -Politburo -polite -politeful -politely -politeness -politesse -politic -political -politicalism -politicalize -politically -politicaster -politician -politicious -politicist -politicize -politicizer -politicly -politico -politicomania -politicophobia -politics -politied -Politique -politist -politize -polity -politzerization -politzerize -polk -polka -Poll -poll -pollable -pollack -polladz -pollage -pollakiuria -pollam -pollan -pollarchy -pollard -pollbook -polled -pollen -pollened -polleniferous -pollenigerous -pollenite -pollenivorous -pollenless -pollenlike -pollenproof -pollent -poller -polleten -pollex -pollical -pollicar -pollicate -pollicitation -pollinar -pollinarium -pollinate -pollination -pollinator -pollinctor -pollincture -polling -pollinia -pollinic -pollinical -polliniferous -pollinigerous -pollinium -pollinivorous -pollinization -pollinize -pollinizer -pollinodial -pollinodium -pollinoid -pollinose -pollinosis -polliwig -polliwog -pollock -polloi -pollster -pollucite -pollutant -pollute -polluted -pollutedly -pollutedness -polluter -polluting -pollutingly -pollution -Pollux -pollux -Polly -Pollyanna -Pollyannish -pollywog -polo -poloconic -polocyte -poloist -polonaise -Polonese -Polonia -Polonial -Polonian -Polonism -polonium -Polonius -Polonization -Polonize -polony -polos -polska -polt -poltergeist -poltfoot -poltfooted -poltina -poltinnik -poltophagic -poltophagist -poltophagy -poltroon -poltroonery -poltroonish -poltroonishly -poltroonism -poluphloisboic -poluphloisboiotatotic -poluphloisboiotic -polverine -poly -polyacanthus -polyacid -polyacoustic -polyacoustics -polyact -polyactinal -polyactine -Polyactinia -polyad -polyadelph -Polyadelphia -polyadelphian -polyadelphous -polyadenia -polyadenitis -polyadenoma -polyadenous -polyadic -polyaffectioned -polyalcohol -polyamide -polyamylose -Polyandria -polyandria -polyandrian -polyandrianism -polyandric -polyandrious -polyandrism -polyandrist -polyandrium -polyandrous -polyandry -Polyangium -polyangular -polyantha -polyanthous -polyanthus -polyanthy -polyarch -polyarchal -polyarchical -polyarchist -polyarchy -polyarteritis -polyarthric -polyarthritic -polyarthritis -polyarthrous -polyarticular -polyatomic -polyatomicity -polyautographic -polyautography -polyaxial -polyaxon -polyaxone -polyaxonic -polybasic -polybasicity -polybasite -polyblast -Polyborinae -polyborine -Polyborus -polybranch -Polybranchia -polybranchian -Polybranchiata -polybranchiate -polybromid -polybromide -polybunous -polybuny -polybuttoned -polycarboxylic -Polycarp -polycarpellary -polycarpic -Polycarpon -polycarpous -polycarpy -polycellular -polycentral -polycentric -polycephalic -polycephalous -polycephaly -Polychaeta -polychaete -polychaetous -polychasial -polychasium -polychloride -polychoerany -polychord -polychotomous -polychotomy -polychrest -polychrestic -polychrestical -polychresty -polychroic -polychroism -polychromasia -polychromate -polychromatic -polychromatism -polychromatist -polychromatize -polychromatophil -polychromatophile -polychromatophilia -polychromatophilic -polychrome -polychromia -polychromic -polychromism -polychromize -polychromous -polychromy -polychronious -polyciliate -polycitral -polyclad -Polycladida -polycladine -polycladose -polycladous -polyclady -Polycletan -polyclinic -polyclona -polycoccous -Polycodium -polyconic -polycormic -polycotyl -polycotyledon -polycotyledonary -polycotyledonous -polycotyledony -polycotylous -polycotyly -polycracy -polycrase -polycratic -polycrotic -polycrotism -polycrystalline -polyctenid -Polyctenidae -polycttarian -polycyanide -polycyclic -polycycly -polycyesis -polycystic -polycythemia -polycythemic -Polycyttaria -polydactyl -polydactyle -polydactylism -polydactylous -Polydactylus -polydactyly -polydaemoniac -polydaemonism -polydaemonist -polydaemonistic -polydemic -polydenominational -polydental -polydermous -polydermy -polydigital -polydimensional -polydipsia -polydisperse -polydomous -polydymite -polydynamic -polyeidic -polyeidism -polyembryonate -polyembryonic -polyembryony -polyemia -polyemic -polyenzymatic -polyergic -Polyergus -polyester -polyesthesia -polyesthetic -polyethnic -polyethylene -polyfenestral -polyflorous -polyfoil -polyfold -Polygala -Polygalaceae -polygalaceous -polygalic -polygam -Polygamia -polygamian -polygamic -polygamical -polygamically -polygamist -polygamistic -polygamize -polygamodioecious -polygamous -polygamously -polygamy -polyganglionic -polygastric -polygene -polygenesic -polygenesis -polygenesist -polygenetic -polygenetically -polygenic -polygenism -polygenist -polygenistic -polygenous -polygeny -polyglandular -polyglobulia -polyglobulism -polyglossary -polyglot -polyglotry -polyglottal -polyglottally -polyglotted -polyglotter -polyglottery -polyglottic -polyglottically -polyglottism -polyglottist -polyglottonic -polyglottous -polyglotwise -polyglycerol -polygon -Polygonaceae -polygonaceous -polygonal -Polygonales -polygonally -Polygonatum -Polygonella -polygoneutic -polygoneutism -Polygonia -polygonic -polygonically -polygonoid -polygonous -Polygonum -polygony -Polygordius -polygram -polygrammatic -polygraph -polygrapher -polygraphic -polygraphy -polygroove -polygrooved -polygyn -polygynaiky -Polygynia -polygynian -polygynic -polygynious -polygynist -polygynoecial -polygynous -polygyny -polygyral -polygyria -polyhaemia -polyhaemic -polyhalide -polyhalite -polyhalogen -polyharmonic -polyharmony -polyhedral -polyhedric -polyhedrical -polyhedroid -polyhedron -polyhedrosis -polyhedrous -polyhemia -polyhidrosis -polyhistor -polyhistorian -polyhistoric -polyhistory -polyhybrid -polyhydric -polyhydroxy -polyideic -polyideism -polyidrosis -polyiodide -polykaryocyte -polylaminated -polylemma -polylepidous -polylinguist -polylith -polylithic -polylobular -polylogy -polyloquent -polymagnet -polymastia -polymastic -Polymastiga -polymastigate -Polymastigida -Polymastigina -polymastigous -polymastism -Polymastodon -polymastodont -polymasty -polymath -polymathic -polymathist -polymathy -polymazia -polymelia -polymelian -polymely -polymer -polymere -polymeria -polymeric -polymeride -polymerism -polymerization -polymerize -polymerous -polymetallism -polymetameric -polymeter -polymethylene -polymetochia -polymetochic -polymicrian -polymicrobial -polymicrobic -polymicroscope -polymignite -Polymixia -polymixiid -Polymixiidae -Polymnestor -Polymnia -polymnite -polymolecular -polymolybdate -polymorph -Polymorpha -polymorphean -polymorphic -polymorphism -polymorphistic -polymorphonuclear -polymorphonucleate -polymorphosis -polymorphous -polymorphy -Polymyaria -polymyarian -Polymyarii -Polymyodi -polymyodian -polymyodous -polymyoid -polymyositis -polymythic -polymythy -polynaphthene -polynemid -Polynemidae -polynemoid -Polynemus -Polynesian -polynesic -polyneural -polyneuric -polyneuritic -polyneuritis -polyneuropathy -polynodal -Polynoe -polynoid -Polynoidae -polynome -polynomial -polynomialism -polynomialist -polynomic -polynucleal -polynuclear -polynucleate -polynucleated -polynucleolar -polynucleosis -Polyodon -polyodont -polyodontal -polyodontia -Polyodontidae -polyodontoid -polyoecious -polyoeciously -polyoeciousness -polyoecism -polyoecy -polyoicous -polyommatous -polyonomous -polyonomy -polyonychia -polyonym -polyonymal -polyonymic -polyonymist -polyonymous -polyonymy -polyophthalmic -polyopia -polyopic -polyopsia -polyopsy -polyorama -polyorchidism -polyorchism -polyorganic -polyose -polyoxide -polyoxymethylene -polyp -polypage -polypaged -polypapilloma -polyparasitic -polyparasitism -polyparesis -polyparia -polyparian -polyparium -polyparous -polypary -polypean -polyped -Polypedates -polypeptide -polypetal -Polypetalae -polypetalous -Polyphaga -polyphage -polyphagia -polyphagian -polyphagic -polyphagist -polyphagous -polyphagy -polyphalangism -polypharmacal -polypharmacist -polypharmacon -polypharmacy -polypharmic -polyphasal -polyphase -polyphaser -Polypheme -polyphemian -polyphemic -polyphemous -polyphenol -polyphloesboean -polyphloisboioism -polyphloisboism -polyphobia -polyphobic -polyphone -polyphoned -polyphonia -polyphonic -polyphonical -polyphonism -polyphonist -polyphonium -polyphonous -polyphony -polyphore -polyphosphoric -polyphotal -polyphote -polyphylesis -polyphyletic -polyphyletically -polyphylety -polyphylline -polyphyllous -polyphylly -polyphylogeny -polyphyly -polyphyodont -Polypi -polypi -polypian -polypide -polypidom -Polypifera -polypiferous -polypigerous -polypinnate -polypite -Polyplacophora -polyplacophoran -polyplacophore -polyplacophorous -polyplastic -Polyplectron -polyplegia -polyplegic -polyploid -polyploidic -polyploidy -polypnoea -polypnoeic -polypod -Polypoda -polypodia -Polypodiaceae -polypodiaceous -Polypodium -polypodous -polypody -polypoid -polypoidal -Polypomorpha -polypomorphic -Polyporaceae -polyporaceous -polypore -polyporite -polyporoid -polyporous -Polyporus -polypose -polyposis -polypotome -polypous -polypragmacy -polypragmatic -polypragmatical -polypragmatically -polypragmatism -polypragmatist -polypragmaty -polypragmist -polypragmon -polypragmonic -polypragmonist -polyprene -polyprism -polyprismatic -polyprothetic -polyprotodont -Polyprotodontia -polypseudonymous -polypsychic -polypsychical -polypsychism -polypterid -Polypteridae -polypteroid -Polypterus -polyptote -polyptoton -polyptych -polypus -polyrhizal -polyrhizous -polyrhythmic -polyrhythmical -polysaccharide -polysaccharose -Polysaccum -polysalicylide -polysarcia -polysarcous -polyschematic -polyschematist -polyscope -polyscopic -polysemant -polysemantic -polysemeia -polysemia -polysemous -polysemy -polysensuous -polysensuousness -polysepalous -polyseptate -polyserositis -polysided -polysidedness -polysilicate -polysilicic -Polysiphonia -polysiphonic -polysiphonous -polysomatic -polysomatous -polysomaty -polysomia -polysomic -polysomitic -polysomous -polysomy -polyspast -polyspaston -polyspermal -polyspermatous -polyspermia -polyspermic -polyspermous -polyspermy -polyspondylic -polyspondylous -polyspondyly -Polyspora -polysporangium -polyspore -polyspored -polysporic -polysporous -polystachyous -polystaurion -polystele -polystelic -polystemonous -polystichoid -polystichous -Polystichum -Polystictus -Polystomata -Polystomatidae -polystomatous -polystome -Polystomea -Polystomella -Polystomidae -polystomium -polystylar -polystyle -polystylous -polystyrene -polysulphide -polysulphuration -polysulphurization -polysyllabic -polysyllabical -polysyllabically -polysyllabicism -polysyllabicity -polysyllabism -polysyllable -polysyllogism -polysyllogistic -polysymmetrical -polysymmetrically -polysymmetry -polysyndetic -polysyndetically -polysyndeton -polysynthesis -polysynthesism -polysynthetic -polysynthetical -polysynthetically -polysyntheticism -polysynthetism -polysynthetize -polytechnic -polytechnical -polytechnics -polytechnist -polyterpene -Polythalamia -polythalamian -polythalamic -polythalamous -polythecial -polytheism -polytheist -polytheistic -polytheistical -polytheistically -polytheize -polythelia -polythelism -polythely -polythene -polythionic -polytitanic -polytocous -polytokous -polytoky -polytomous -polytomy -polytonal -polytonalism -polytonality -polytone -polytonic -polytony -polytope -polytopic -polytopical -Polytrichaceae -polytrichaceous -polytrichia -polytrichous -Polytrichum -polytrochal -polytrochous -polytrope -polytrophic -polytropic -polytungstate -polytungstic -polytype -polytypic -polytypical -polytypy -polyuresis -polyuria -polyuric -polyvalence -polyvalent -polyvinyl -polyvinylidene -polyvirulent -polyvoltine -Polyzoa -polyzoal -polyzoan -polyzoarial -polyzoarium -polyzoary -polyzoic -polyzoism -polyzonal -polyzooid -polyzoon -polzenite -pom -pomace -Pomaceae -pomacentrid -Pomacentridae -pomacentroid -Pomacentrus -pomaceous -pomade -Pomaderris -Pomak -pomander -pomane -pomarine -pomarium -pomate -pomato -pomatomid -Pomatomidae -Pomatomus -pomatorhine -pomatum -pombe -pombo -pome -pomegranate -pomelo -Pomeranian -pomeridian -pomerium -pomewater -pomey -pomfret -pomiculture -pomiculturist -pomiferous -pomiform -pomivorous -Pommard -pomme -pommee -pommel -pommeled -pommeler -pommet -pommey -pommy -Pomo -pomological -pomologically -pomologist -pomology -Pomona -pomonal -pomonic -pomp -pompa -Pompadour -pompadour -pompal -pompano -Pompeian -Pompeii -pompelmous -Pompey -pompey -pompholix -pompholygous -pompholyx -pomphus -pompier -pompilid -Pompilidae -pompiloid -Pompilus -pompion -pompist -pompless -pompoleon -pompon -pomposity -pompous -pompously -pompousness -pompster -Pomptine -pomster -pon -Ponca -ponce -ponceau -poncelet -poncho -ponchoed -Poncirus -pond -pondage -pondbush -ponder -ponderability -ponderable -ponderableness -ponderal -ponderance -ponderancy -ponderant -ponderary -ponderate -ponderation -ponderative -ponderer -pondering -ponderingly -ponderling -ponderment -ponderomotive -ponderosapine -ponderosity -ponderous -ponderously -ponderousness -pondfish -pondful -pondgrass -pondlet -pondman -Pondo -pondok -pondokkie -Pondomisi -pondside -pondus -pondweed -pondwort -pondy -pone -ponent -Ponera -Poneramoeba -ponerid -Poneridae -Ponerinae -ponerine -poneroid -ponerology -poney -pong -ponga -pongee -Pongidae -Pongo -poniard -ponica -ponier -ponja -pont -Pontac -Pontacq -pontage -pontal -Pontederia -Pontederiaceae -pontederiaceous -pontee -pontes -pontianak -Pontic -pontic -ponticello -ponticular -ponticulus -pontifex -pontiff -pontific -pontifical -pontificalia -pontificalibus -pontificality -pontifically -pontificate -pontification -pontifices -pontificial -pontificially -pontificious -pontify -pontil -pontile -pontin -Pontine -pontine -pontist -pontlevis -ponto -Pontocaspian -pontocerebellar -ponton -pontonier -pontoon -pontooneer -pontooner -pontooning -Pontus -pontvolant -pony -ponzite -pooa -pooch -pooder -poodle -poodledom -poodleish -poodleship -poof -poogye -pooh -poohpoohist -pook -pooka -pookaun -pookoo -pool -pooler -pooli -poolroom -poolroot -poolside -poolwort -pooly -poon -poonac -poonga -poonghie -poop -pooped -poophyte -poophytic -poor -poorhouse -poorish -poorliness -poorling -poorly -poorlyish -poormaster -poorness -poorweed -poorwill -poot -Pop -pop -popadam -popal -popcorn -popdock -pope -Popean -popedom -popeholy -popehood -popeism -popeler -popeless -popelike -popeline -popely -popery -popeship -popess -popeye -popeyed -popglove -popgun -popgunner -popgunnery -Popian -popify -popinac -popinjay -Popish -popish -popishly -popishness -popjoy -poplar -poplared -Poplilia -poplin -poplinette -popliteal -popliteus -poplolly -Popocracy -Popocrat -Popolari -Popoloco -popomastic -popover -Popovets -poppa -poppability -poppable -poppean -poppel -popper -poppet -poppethead -poppied -poppin -popple -popply -poppy -poppycock -poppycockish -poppyfish -poppyhead -poppylike -poppywort -popshop -populace -popular -popularism -Popularist -popularity -popularization -popularize -popularizer -popularly -popularness -populate -population -populational -populationist -populationistic -populationless -populator -populicide -populin -Populism -Populist -Populistic -populous -populously -populousness -Populus -popweed -poral -porbeagle -porcate -porcated -porcelain -porcelainization -porcelainize -porcelainlike -porcelainous -porcelaneous -porcelanic -porcelanite -porcelanous -Porcellana -porcellanian -porcellanid -Porcellanidae -porcellanize -porch -porched -porching -porchless -porchlike -porcine -Porcula -porcupine -porcupinish -pore -pored -porelike -Porella -porencephalia -porencephalic -porencephalitis -porencephalon -porencephalous -porencephalus -porencephaly -porer -porge -porger -porgy -Poria -poricidal -Porifera -poriferal -poriferan -poriferous -poriform -porimania -poriness -poring -poringly -poriomanic -porism -porismatic -porismatical -porismatically -poristic -poristical -porite -Porites -Poritidae -poritoid -pork -porkburger -porker -porkery -porket -porkfish -porkish -porkless -porkling -porkman -Porkopolis -porkpie -porkwood -porky -pornerastic -pornocracy -pornocrat -pornograph -pornographer -pornographic -pornographically -pornographist -pornography -pornological -Porocephalus -porodine -porodite -porogam -porogamic -porogamous -porogamy -porokaiwhiria -porokeratosis -Porokoto -poroma -porometer -porophyllous -poroplastic -poroporo -pororoca -poros -poroscope -poroscopic -poroscopy -porose -poroseness -porosimeter -porosis -porosity -porotic -porotype -porous -porously -porousness -porpentine -porphine -Porphyra -Porphyraceae -porphyraceous -porphyratin -Porphyrean -porphyria -Porphyrian -porphyrian -Porphyrianist -porphyrin -porphyrine -porphyrinuria -Porphyrio -porphyrion -porphyrite -porphyritic -porphyroblast -porphyroblastic -porphyrogene -porphyrogenite -porphyrogenitic -porphyrogenitism -porphyrogeniture -porphyrogenitus -porphyroid -porphyrophore -porphyrous -porphyry -Porpita -porpitoid -porpoise -porpoiselike -porporate -porr -porraceous -porrect -porrection -porrectus -porret -porridge -porridgelike -porridgy -porriginous -porrigo -Porrima -porringer -porriwiggle -porry -port -porta -portability -portable -portableness -portably -portage -portague -portahepatis -portail -portal -portaled -portalled -portalless -portamento -portance -portass -portatile -portative -portcrayon -portcullis -porteacid -ported -porteligature -portend -portendance -portendment -Porteno -portension -portent -portention -portentosity -portentous -portentously -portentousness -porteous -porter -porterage -Porteranthus -porteress -porterhouse -porterlike -porterly -portership -portfire -portfolio -portglaive -portglave -portgrave -Porthetria -Portheus -porthole -porthook -porthors -porthouse -Portia -portia -portico -porticoed -portiere -portiered -portifory -portify -portio -portiomollis -portion -portionable -portional -portionally -portioner -portionist -portionize -portionless -portitor -Portlandian -portlast -portless -portlet -portligature -portlily -portliness -portly -portman -portmanmote -portmanteau -portmanteaux -portmantle -portmantologism -portment -portmoot -porto -portoise -portolan -portolano -Portor -portrait -portraitist -portraitlike -portraiture -portray -portrayable -portrayal -portrayer -portrayist -portrayment -portreeve -portreeveship -portress -portside -portsider -portsman -portuary -portugais -Portugal -Portugalism -Portugee -Portuguese -Portulaca -Portulacaceae -portulacaceous -Portulacaria -portulan -Portunalia -portunian -Portunidae -Portunus -portway -porty -porule -porulose -porulous -porus -porwigle -pory -Porzana -posadaship -posca -pose -Poseidon -Poseidonian -posement -poser -poseur -posey -posh -posing -posingly -posit -position -positional -positioned -positioner -positionless -positival -positive -positively -positiveness -positivism -positivist -positivistic -positivistically -positivity -positivize -positor -positron -positum -positure -Posnanian -posnet -posole -posologic -posological -posologist -posology -pospolite -poss -posse -posseman -possess -possessable -possessed -possessedly -possessedness -possessing -possessingly -possessingness -possession -possessional -possessionalism -possessionalist -possessionary -possessionate -possessioned -possessioner -possessionist -possessionless -possessionlessness -possessival -possessive -possessively -possessiveness -possessor -possessoress -possessorial -possessoriness -possessorship -possessory -posset -possibilism -possibilist -possibilitate -possibility -possible -possibleness -possibly -possum -possumwood -post -postabdomen -postabdominal -postable -postabortal -postacetabular -postadjunct -postage -postal -postallantoic -postally -postalveolar -postament -postamniotic -postanal -postanesthetic -postantennal -postaortic -postapoplectic -postappendicular -postarterial -postarthritic -postarticular -postarytenoid -postaspirate -postaspirated -postasthmatic -postatrial -postauditory -postauricular -postaxiad -postaxial -postaxially -postaxillary -postbag -postbaptismal -postbox -postboy -postbrachial -postbrachium -postbranchial -postbreakfast -postbronchial -postbuccal -postbulbar -postbursal -postcaecal -postcalcaneal -postcalcarine -postcanonical -postcardiac -postcardinal -postcarnate -postcarotid -postcart -postcartilaginous -postcatarrhal -postcava -postcaval -postcecal -postcenal -postcentral -postcentrum -postcephalic -postcerebellar -postcerebral -postcesarean -postcibal -postclassic -postclassical -postclassicism -postclavicle -postclavicula -postclavicular -postclimax -postclitellian -postclival -postcolon -postcolonial -postcolumellar -postcomitial -postcommissural -postcommissure -postcommunicant -Postcommunion -postconceptive -postcondylar -postconfinement -postconnubial -postconsonantal -postcontact -postcontract -postconvalescent -postconvulsive -postcordial -postcornu -postcosmic -postcostal -postcoxal -postcritical -postcrural -postcubital -postdate -postdental -postdepressive -postdetermined -postdevelopmental -postdiagnostic -postdiaphragmatic -postdiastolic -postdicrotic -postdigestive -postdigital -postdiluvial -postdiluvian -postdiphtheric -postdiphtheritic -postdisapproved -postdisseizin -postdisseizor -postdoctoral -postdoctorate -postdural -postdysenteric -posted -posteen -postelection -postelementary -postembryonal -postembryonic -postemporal -postencephalitic -postencephalon -postenteral -postentry -postepileptic -poster -posterette -posteriad -posterial -posterior -posterioric -posteriorically -posterioristic -posterioristically -posteriority -posteriorly -posteriormost -posteriors -posteriorums -posterish -posterishness -posterist -posterity -posterize -postern -posteroclusion -posterodorsad -posterodorsal -posterodorsally -posteroexternal -posteroinferior -posterointernal -posterolateral -posteromedial -posteromedian -posteromesial -posteroparietal -posterosuperior -posterotemporal -posteroterminal -posteroventral -posteruptive -postesophageal -posteternity -postethmoid -postexilian -postexilic -postexist -postexistence -postexistency -postexistent -postface -postfact -postfebrile -postfemoral -postfetal -postfix -postfixal -postfixation -postfixed -postfixial -postflection -postflexion -postform -postfoveal -postfrontal -postfurca -postfurcal -postganglionic -postgangrenal -postgastric -postgeminum -postgenial -postgeniture -postglacial -postglenoid -postglenoidal -postgonorrheic -postgracile -postgraduate -postgrippal -posthabit -posthaste -posthemiplegic -posthemorrhagic -posthepatic -posthetomist -posthetomy -posthexaplaric -posthippocampal -posthitis -postholder -posthole -posthouse -posthumeral -posthumous -posthumously -posthumousness -posthumus -posthyoid -posthypnotic -posthypnotically -posthypophyseal -posthypophysis -posthysterical -postic -postical -postically -posticous -posticteric -posticum -postil -postilion -postilioned -postillate -postillation -postillator -postimpressionism -postimpressionist -postimpressionistic -postinfective -postinfluenzal -posting -postingly -postintestinal -postique -postischial -postjacent -postjugular -postlabial -postlachrymal -postlaryngeal -postlegitimation -postlenticular -postless -postlike -postliminary -postliminiary -postliminious -postliminium -postliminous -postliminy -postloitic -postloral -postlude -postludium -postluetic -postmalarial -postmamillary -postmammary -postman -postmandibular -postmaniacal -postmarital -postmark -postmarriage -postmaster -postmasterlike -postmastership -postmastoid -postmaturity -postmaxillary -postmaximal -postmeatal -postmedia -postmedial -postmedian -postmediastinal -postmediastinum -postmedullary -postmeiotic -postmeningeal -postmenstrual -postmental -postmeridian -postmeridional -postmesenteric -postmillenarian -postmillenarianism -postmillennial -postmillennialism -postmillennialist -postmillennian -postmineral -postmistress -postmortal -postmortuary -postmundane -postmuscular -postmutative -postmycotic -postmyxedematous -postnarial -postnaris -postnasal -postnatal -postnate -postnati -postnecrotic -postnephritic -postneural -postneuralgic -postneuritic -postneurotic -postnodular -postnominal -postnotum -postnuptial -postnuptially -postobituary -postocular -postolivary -postomental -postoperative -postoptic -postoral -postorbital -postordination -postorgastic -postosseous -postotic -postpagan -postpaid -postpalatal -postpalatine -postpalpebral -postpaludal -postparalytic -postparietal -postparotid -postparotitic -postparoxysmal -postparturient -postpatellar -postpathological -postpericardial -postpharyngeal -postphlogistic -postphragma -postphrenic -postphthisic -postpituitary -postplace -postplegic -postpneumonic -postponable -postpone -postponement -postponence -postponer -postpontile -postpose -postposited -postposition -postpositional -postpositive -postpositively -postprandial -postprandially -postpredicament -postprophesy -postprostate -postpubertal -postpubescent -postpubic -postpubis -postpuerperal -postpulmonary -postpupillary -postpycnotic -postpyloric -postpyramidal -postpyretic -postrachitic -postramus -postrectal -postreduction -postremogeniture -postremote -postrenal -postresurrection -postresurrectional -postretinal -postrheumatic -postrhinal -postrider -postrorse -postrostral -postrubeolar -postsaccular -postsacral -postscalenus -postscapula -postscapular -postscapularis -postscarlatinal -postscenium -postscorbutic -postscribe -postscript -postscriptum -postscutellar -postscutellum -postseason -postsigmoid -postsign -postspasmodic -postsphenoid -postsphenoidal -postsphygmic -postspinous -postsplenial -postsplenic -poststernal -poststertorous -postsuppurative -postsurgical -postsynaptic -postsynsacral -postsyphilitic -postsystolic -posttabetic -posttarsal -posttetanic -postthalamic -postthoracic -postthyroidal -posttibial -posttonic -posttoxic -posttracheal -posttrapezoid -posttraumatic -posttreaty -posttubercular -posttussive -posttympanic -posttyphoid -postulancy -postulant -postulantship -postulata -postulate -postulation -postulational -postulator -postulatory -postulatum -postulnar -postumbilical -postumbonal -postural -posture -posturer -postureteric -posturist -posturize -postuterine -postvaccinal -postvaricellar -postvarioloid -postvelar -postvenereal -postvenous -postverbal -Postverta -postvertebral -postvesical -postvide -postvocalic -postwar -postward -postwise -postwoman -postxyphoid -postyard -postzygapophysial -postzygapophysis -posy -pot -potability -potable -potableness -potagerie -potagery -potamic -Potamobiidae -Potamochoerus -Potamogale -Potamogalidae -Potamogeton -Potamogetonaceae -potamogetonaceous -potamological -potamologist -potamology -potamometer -Potamonidae -potamophilous -potamoplankton -potash -potashery -potass -potassa -potassamide -potassic -potassiferous -potassium -potate -potation -potative -potato -potatoes -potator -potatory -Potawatami -Potawatomi -potbank -potbellied -potbelly -potboil -potboiler -potboy -potboydom -potch -potcher -potcherman -potcrook -potdar -pote -potecary -poteen -potence -potency -potent -potentacy -potentate -potential -potentiality -potentialization -potentialize -potentially -potentialness -potentiate -potentiation -Potentilla -potentiometer -potentiometric -potentize -potently -potentness -poter -Poterium -potestal -potestas -potestate -potestative -poteye -potful -potgirl -potgun -pothanger -pothead -pothecary -potheen -pother -potherb -potherment -pothery -pothole -pothook -pothookery -Pothos -pothouse -pothousey -pothunt -pothunter -pothunting -poticary -potichomania -potichomanist -potifer -Potiguara -potion -potlatch -potleg -potlicker -potlid -potlike -potluck -potmaker -potmaking -potman -potomania -potomato -potometer -potong -potoo -Potoroinae -potoroo -Potorous -potpie -potpourri -potrack -potsherd -potshoot -potshooter -potstick -potstone -pott -pottage -pottagy -pottah -potted -potter -potterer -potteress -potteringly -pottery -Pottiaceae -potting -pottinger -pottle -pottled -potto -potty -potwaller -potwalling -potware -potwhisky -potwork -potwort -pouce -poucer -poucey -pouch -pouched -pouchful -pouchless -pouchlike -pouchy -poudrette -pouf -poulaine -poulard -poulardize -poulp -poulpe -poult -poulter -poulterer -poulteress -poultice -poulticewise -poultry -poultrydom -poultryist -poultryless -poultrylike -poultryman -poultryproof -pounamu -pounce -pounced -pouncer -pouncet -pouncing -pouncingly -pound -poundage -poundal -poundcake -pounder -pounding -poundkeeper -poundless -poundlike -poundman -poundmaster -poundmeal -poundstone -poundworth -pour -pourer -pourie -pouring -pouringly -pourparler -pourparley -pourpiece -pourpoint -pourpointer -pouser -poussette -pout -pouter -poutful -pouting -poutingly -pouty -poverish -poverishment -poverty -povertyweed -Povindah -pow -powder -powderable -powdered -powderer -powderiness -powdering -powderization -powderize -powderizer -powderlike -powderman -powdery -powdike -powdry -powellite -power -powerboat -powered -powerful -powerfully -powerfulness -powerhouse -powerless -powerlessly -powerlessness -powermonger -Powhatan -powitch -powldoody -pownie -powsoddy -powsowdy -powwow -powwower -powwowism -pox -poxy -poy -poyou -pozzolanic -pozzuolana -pozzuolanic -praam -prabble -prabhu -practic -practicability -practicable -practicableness -practicably -practical -practicalism -practicalist -practicality -practicalization -practicalize -practicalizer -practically -practicalness -practicant -practice -practiced -practicedness -practicer -practician -practicianism -practicum -practitional -practitioner -practitionery -prad -Pradeep -pradhana -praeabdomen -praeacetabular -praeanal -praecava -praecipe -praecipuum -praecoces -praecocial -praecognitum -praecoracoid -praecordia -praecordial -praecordium -praecornu -praecox -praecuneus -praedial -praedialist -praediality -praeesophageal -praefect -praefectorial -praefectus -praefervid -praefloration -praefoliation -praehallux -praelabrum -praelection -praelector -praelectorship -praelectress -praeludium -praemaxilla -praemolar -praemunire -praenarial -Praenestine -Praenestinian -praeneural -praenomen -praenomina -praenominal -praeoperculum -praepositor -praepostor -praepostorial -praepubis -praepuce -praescutum -Praesepe -praesertim -Praesian -praesidium -praesphenoid -praesternal -praesternum -praestomium -praesystolic -praetaxation -praetexta -praetor -praetorial -Praetorian -praetorian -praetorianism -praetorium -praetorship -praezygapophysis -pragmatic -pragmatica -pragmatical -pragmaticality -pragmatically -pragmaticalness -pragmaticism -pragmatics -pragmatism -pragmatist -pragmatistic -pragmatize -pragmatizer -prairie -prairiecraft -prairied -prairiedom -prairielike -prairieweed -prairillon -praisable -praisableness -praisably -praise -praiseful -praisefully -praisefulness -praiseless -praiseproof -praiser -praiseworthy -praising -praisingly -praisworthily -praisworthiness -Prajapati -prajna -Prakash -Prakrit -prakriti -Prakritic -Prakritize -praline -pralltriller -pram -Pramnian -prana -prance -pranceful -prancer -prancing -prancingly -prancy -prandial -prandially -prank -pranked -pranker -prankful -prankfulness -pranking -prankingly -prankish -prankishly -prankishness -prankle -pranksome -pranksomeness -prankster -pranky -prase -praseocobaltic -praseodidymium -praseodymia -praseodymium -praseolite -prasine -prasinous -prasoid -prasophagous -prasophagy -prastha -prat -pratal -Pratap -Pratapwant -prate -prateful -pratement -pratensian -Prater -prater -pratey -pratfall -pratiloma -Pratincola -pratincole -pratincoline -pratincolous -prating -pratingly -pratique -pratiyasamutpada -Pratt -prattfall -prattle -prattlement -prattler -prattling -prattlingly -prattly -prau -Pravin -pravity -prawn -prawner -prawny -Praxean -Praxeanist -praxinoscope -praxiology -praxis -Praxitelean -pray -praya -prayer -prayerful -prayerfully -prayerfulness -prayerless -prayerlessly -prayerlessness -prayermaker -prayermaking -prayerwise -prayful -praying -prayingly -prayingwise -preabdomen -preabsorb -preabsorbent -preabstract -preabundance -preabundant -preabundantly -preaccept -preacceptance -preaccess -preaccessible -preaccidental -preaccidentally -preaccommodate -preaccommodating -preaccommodatingly -preaccommodation -preaccomplish -preaccomplishment -preaccord -preaccordance -preaccount -preaccounting -preaccredit -preaccumulate -preaccumulation -preaccusation -preaccuse -preaccustom -preaccustomed -preacetabular -preach -preachable -preacher -preacherdom -preacheress -preacherize -preacherless -preacherling -preachership -preachieved -preachification -preachify -preachily -preachiness -preaching -preachingly -preachman -preachment -preachy -preacid -preacidity -preacidly -preacidness -preacknowledge -preacknowledgment -preacquaint -preacquaintance -preacquire -preacquired -preacquit -preacquittal -preact -preaction -preactive -preactively -preactivity -preacute -preacutely -preacuteness -preadamic -preadamite -preadamitic -preadamitical -preadamitism -preadapt -preadaptable -preadaptation -preaddition -preadditional -preaddress -preadequacy -preadequate -preadequately -preadhere -preadherence -preadherent -preadjectival -preadjective -preadjourn -preadjournment -preadjunct -preadjust -preadjustable -preadjustment -preadministration -preadministrative -preadministrator -preadmire -preadmirer -preadmission -preadmit -preadmonish -preadmonition -preadolescent -preadopt -preadoption -preadoration -preadore -preadorn -preadornment -preadult -preadulthood -preadvance -preadvancement -preadventure -preadvertency -preadvertent -preadvertise -preadvertisement -preadvice -preadvisable -preadvise -preadviser -preadvisory -preadvocacy -preadvocate -preaestival -preaffect -preaffection -preaffidavit -preaffiliate -preaffiliation -preaffirm -preaffirmation -preaffirmative -preafflict -preaffliction -preafternoon -preaged -preaggravate -preaggravation -preaggression -preaggressive -preagitate -preagitation -preagonal -preagony -preagree -preagreement -preagricultural -preagriculture -prealarm -prealcohol -prealcoholic -prealgebra -prealgebraic -prealkalic -preallable -preallably -preallegation -preallege -prealliance -preallied -preallot -preallotment -preallow -preallowable -preallowably -preallowance -preallude -preallusion -preally -prealphabet -prealphabetical -prealtar -prealteration -prealveolar -preamalgamation -preambassadorial -preambition -preambitious -preamble -preambled -preambling -preambular -preambulary -preambulate -preambulation -preambulatory -preanal -preanaphoral -preanesthetic -preanimism -preannex -preannounce -preannouncement -preannouncer -preantepenult -preantepenultimate -preanterior -preanticipate -preantiquity -preantiseptic -preaortic -preappearance -preapperception -preapplication -preappoint -preappointment -preapprehension -preapprise -preapprobation -preapproval -preapprove -preaptitude -prearm -prearrange -prearrangement -prearrest -prearrestment -prearticulate -preartistic -preascertain -preascertainment -preascitic -preaseptic -preassigned -preassume -preassurance -preassure -preataxic -preattachment -preattune -preaudience -preauditory -preaver -preavowal -preaxiad -preaxial -preaxially -prebachelor -prebacillary -prebake -prebalance -preballot -preballoting -prebankruptcy -prebaptismal -prebaptize -prebarbaric -prebarbarous -prebargain -prebasal -prebasilar -prebeleve -prebelief -prebeliever -prebelieving -prebellum -prebeloved -prebend -prebendal -prebendary -prebendaryship -prebendate -prebenediction -prebeneficiary -prebenefit -prebeset -prebestow -prebestowal -prebetray -prebetrayal -prebetrothal -prebid -prebidding -prebill -prebless -preblessing -preblockade -preblooming -preboast -preboding -preboil -preborn -preborrowing -preboyhood -prebrachial -prebrachium -prebreathe -prebridal -prebroadcasting -prebromidic -prebronchial -prebronze -prebrute -prebuccal -prebudget -prebudgetary -prebullying -preburlesque -preburn -precalculable -precalculate -precalculation -precampaign -precancel -precancellation -precancerous -precandidacy -precandidature -precanning -precanonical -precant -precantation -precanvass -precapillary -precapitalist -precapitalistic -precaptivity -precapture -precarcinomatous -precardiac -precaria -precarious -precariously -precariousness -precarium -precarnival -precartilage -precartilaginous -precary -precast -precation -precative -precatively -precatory -precaudal -precausation -precaution -precautional -precautionary -precautious -precautiously -precautiousness -precava -precaval -precedable -precede -precedence -precedency -precedent -precedentable -precedentary -precedented -precedential -precedentless -precedently -preceder -preceding -precelebrant -precelebrate -precelebration -precensure -precensus -precent -precentor -precentorial -precentorship -precentory -precentral -precentress -precentrix -precentrum -precept -preception -preceptist -preceptive -preceptively -preceptor -preceptoral -preceptorate -preceptorial -preceptorially -preceptorship -preceptory -preceptress -preceptual -preceptually -preceramic -precerebellar -precerebral -precerebroid -preceremonial -preceremony -precertification -precertify -preces -precess -precession -precessional -prechallenge -prechampioned -prechampionship -precharge -prechart -precheck -prechemical -precherish -prechildhood -prechill -prechloric -prechloroform -prechoice -prechoose -prechordal -prechoroid -preciation -precinct -precinction -precinctive -preciosity -precious -preciously -preciousness -precipe -precipice -precipiced -precipitability -precipitable -precipitance -precipitancy -precipitant -precipitantly -precipitantness -precipitate -precipitated -precipitatedly -precipitately -precipitation -precipitative -precipitator -precipitin -precipitinogen -precipitinogenic -precipitous -precipitously -precipitousness -precirculate -precirculation -precis -precise -precisely -preciseness -precisian -precisianism -precisianist -precision -precisional -precisioner -precisionism -precisionist -precisionize -precisive -precitation -precite -precited -precivilization -preclaim -preclaimant -preclaimer -preclassic -preclassical -preclassification -preclassified -preclassify -preclean -precleaner -precleaning -preclerical -preclimax -preclinical -preclival -precloacal -preclose -preclosure -preclothe -precludable -preclude -preclusion -preclusive -preclusively -precoagulation -precoccygeal -precocial -precocious -precociously -precociousness -precocity -precogitate -precogitation -precognition -precognitive -precognizable -precognizant -precognize -precognosce -precoil -precoiler -precoincidence -precoincident -precoincidently -precollapsable -precollapse -precollect -precollectable -precollection -precollector -precollege -precollegiate -precollude -precollusion -precollusive -precolor -precolorable -precoloration -precoloring -precombat -precombatant -precombination -precombine -precombustion -precommand -precommend -precomment -precommercial -precommissural -precommissure -precommit -precommune -precommunicate -precommunication -precommunion -precompare -precomparison -precompass -precompel -precompensate -precompensation -precompilation -precompile -precompiler -precompleteness -precompletion -precompliance -precompliant -precomplicate -precomplication -precompose -precomposition -precompound -precompounding -precompoundly -precomprehend -precomprehension -precomprehensive -precompress -precompulsion -precomradeship -preconceal -preconcealment -preconcede -preconceivable -preconceive -preconceived -preconcentrate -preconcentrated -preconcentratedly -preconcentration -preconcept -preconception -preconceptional -preconceptual -preconcern -preconcernment -preconcert -preconcerted -preconcertedly -preconcertedness -preconcertion -preconcertive -preconcession -preconcessive -preconclude -preconclusion -preconcur -preconcurrence -preconcurrent -preconcurrently -precondemn -precondemnation -precondensation -precondense -precondition -preconditioned -preconduct -preconduction -preconductor -precondylar -precondyloid -preconfer -preconference -preconfess -preconfession -preconfide -preconfiguration -preconfigure -preconfine -preconfinedly -preconfinemnt -preconfirm -preconfirmation -preconflict -preconform -preconformity -preconfound -preconfuse -preconfusedly -preconfusion -precongenial -precongested -precongestion -precongestive -precongratulate -precongratulation -precongressional -preconizance -preconization -preconize -preconizer -preconjecture -preconnection -preconnective -preconnubial -preconquer -preconquest -preconquestal -preconquestual -preconscious -preconsciously -preconsciousness -preconsecrate -preconsecration -preconsent -preconsider -preconsideration -preconsign -preconsolation -preconsole -preconsolidate -preconsolidated -preconsolidation -preconsonantal -preconspiracy -preconspirator -preconspire -preconstituent -preconstitute -preconstruct -preconstruction -preconsult -preconsultation -preconsultor -preconsume -preconsumer -preconsumption -precontact -precontain -precontained -precontemn -precontemplate -precontemplation -precontemporaneous -precontemporary -precontend -precontent -precontention -precontently -precontentment -precontest -precontinental -precontract -precontractive -precontractual -precontribute -precontribution -precontributive -precontrivance -precontrive -precontrol -precontrolled -precontroversial -precontroversy -preconvention -preconversation -preconversational -preconversion -preconvert -preconvey -preconveyal -preconveyance -preconvict -preconviction -preconvince -precook -precooker -precool -precooler -precooling -precopy -precoracoid -precordia -precordial -precordiality -precordially -precordium -precorneal -precornu -precoronation -precorrect -precorrection -precorrectly -precorrectness -precorrespond -precorrespondence -precorrespondent -precorridor -precorrupt -precorruption -precorruptive -precorruptly -precoruptness -precosmic -precosmical -precostal -precounsel -precounsellor -precourse -precover -precovering -precox -precreate -precreation -precreative -precredit -precreditor -precreed -precritical -precriticism -precriticize -precrucial -precrural -precrystalline -precultivate -precultivation -precultural -preculturally -preculture -precuneal -precuneate -precuneus -precure -precurrent -precurricular -precurriculum -precursal -precurse -precursive -precursor -precursory -precurtain -precut -precyclone -precyclonic -precynical -precyst -precystic -predable -predacean -predaceous -predaceousness -predacity -predamage -predamn -predamnation -predark -predarkness -predata -predate -predation -predatism -predative -predator -predatorily -predatoriness -predatory -predawn -preday -predaylight -predaytime -predazzite -predealer -predealing -predeath -predeathly -predebate -predebater -predebit -predebtor -predecay -predecease -predeceaser -predeceive -predeceiver -predeception -predecession -predecessor -predecessorship -predecide -predecision -predecisive -predeclaration -predeclare -predeclination -predecline -predecree -prededicate -prededuct -prededuction -predefault -predefeat -predefect -predefective -predefence -predefend -predefense -predefiance -predeficiency -predeficient -predefine -predefinite -predefinition -predefray -predefrayal -predefy -predegeneracy -predegenerate -predegree -predeication -predelay -predelegate -predelegation -predeliberate -predeliberately -predeliberation -predelineate -predelineation -predelinquency -predelinquent -predelinquently -predeliver -predelivery -predella -predelude -predelusion -predemand -predemocracy -predemocratic -predemonstrate -predemonstration -predemonstrative -predenial -predental -predentary -Predentata -predentate -predeny -predepart -predepartmental -predeparture -predependable -predependence -predependent -predeplete -predepletion -predeposit -predepository -predepreciate -predepreciation -predepression -predeprivation -predeprive -prederivation -prederive -predescend -predescent -predescribe -predescription -predesert -predeserter -predesertion -predeserve -predeserving -predesign -predesignate -predesignation -predesignatory -predesirous -predesolate -predesolation -predespair -predesperate -predespicable -predespise -predespond -predespondency -predespondent -predestinable -predestinarian -predestinarianism -predestinate -predestinately -predestination -predestinational -predestinationism -predestinationist -predestinative -predestinator -predestine -predestiny -predestitute -predestitution -predestroy -predestruction -predetach -predetachment -predetail -predetain -predetainer -predetect -predetention -predeterminability -predeterminable -predeterminant -predeterminate -predeterminately -predetermination -predeterminative -predetermine -predeterminer -predeterminism -predeterministic -predetest -predetestation -predetrimental -predevelop -predevelopment -predevise -predevote -predevotion -predevour -prediagnosis -prediagnostic -predial -prediastolic -prediatory -predicability -predicable -predicableness -predicably -predicament -predicamental -predicamentally -predicant -predicate -predication -predicational -predicative -predicatively -predicator -predicatory -predicrotic -predict -predictability -predictable -predictably -predictate -predictation -prediction -predictional -predictive -predictively -predictiveness -predictor -predictory -prediet -predietary -predifferent -predifficulty -predigest -predigestion -predikant -predilect -predilected -predilection -prediligent -prediligently -prediluvial -prediluvian -prediminish -prediminishment -prediminution -predine -predinner -prediphtheritic -prediploma -prediplomacy -prediplomatic -predirect -predirection -predirector -predisability -predisable -predisadvantage -predisadvantageous -predisadvantageously -predisagree -predisagreeable -predisagreement -predisappointment -predisaster -predisastrous -prediscern -prediscernment -predischarge -prediscipline -predisclose -predisclosure -prediscontent -prediscontented -prediscontentment -prediscontinuance -prediscontinuation -prediscontinue -prediscount -prediscountable -prediscourage -prediscouragement -prediscourse -prediscover -prediscoverer -prediscovery -prediscreet -prediscretion -prediscretionary -prediscriminate -prediscrimination -prediscriminator -prediscuss -prediscussion -predisgrace -predisguise -predisgust -predislike -predismiss -predismissal -predismissory -predisorder -predisordered -predisorderly -predispatch -predispatcher -predisperse -predispersion -predisplace -predisplacement -predisplay -predisponency -predisponent -predisposable -predisposal -predispose -predisposed -predisposedly -predisposedness -predisposition -predispositional -predisputant -predisputation -predispute -predisregard -predisrupt -predisruption -predissatisfaction -predissolution -predissolve -predissuade -predistinct -predistinction -predistinguish -predistress -predistribute -predistribution -predistributor -predistrict -predistrust -predistrustful -predisturb -predisturbance -prediversion -predivert -predivide -predividend -predivider -predivinable -predivinity -predivision -predivorce -predivorcement -predoctorate -predocumentary -predomestic -predominance -predominancy -predominant -predominantly -predominate -predominately -predominatingly -predomination -predominator -predonate -predonation -predonor -predoom -predorsal -predoubt -predoubter -predoubtful -predraft -predrainage -predramatic -predraw -predrawer -predread -predreadnought -predrill -predriller -predrive -predriver -predry -preduplicate -preduplication -predusk -predwell -predynamite -predynastic -preen -preener -preeze -prefab -prefabricate -prefabrication -prefabricator -preface -prefaceable -prefacer -prefacial -prefacist -prefactor -prefactory -prefamiliar -prefamiliarity -prefamiliarly -prefamous -prefashion -prefatial -prefator -prefatorial -prefatorially -prefatorily -prefatory -prefavor -prefavorable -prefavorably -prefavorite -prefearful -prefearfully -prefeast -prefect -prefectly -prefectoral -prefectorial -prefectorially -prefectorian -prefectship -prefectual -prefectural -prefecture -prefecundation -prefecundatory -prefederal -prefelic -prefer -preferability -preferable -preferableness -preferably -preferee -preference -preferent -preferential -preferentialism -preferentialist -preferentially -preferment -prefermentation -preferred -preferredly -preferredness -preferrer -preferrous -prefertile -prefertility -prefertilization -prefertilize -prefervid -prefestival -prefeudal -prefeudalic -prefeudalism -prefiction -prefictional -prefigurate -prefiguration -prefigurative -prefiguratively -prefigurativeness -prefigure -prefigurement -prefiller -prefilter -prefinal -prefinance -prefinancial -prefine -prefinish -prefix -prefixable -prefixal -prefixally -prefixation -prefixed -prefixedly -prefixion -prefixture -preflagellate -preflatter -preflattery -preflavor -preflavoring -preflection -preflexion -preflight -preflood -prefloration -preflowering -prefoliation -prefool -preforbidden -preforceps -preforgive -preforgiveness -preforgotten -preform -preformant -preformation -preformationary -preformationism -preformationist -preformative -preformed -preformism -preformist -preformistic -preformulate -preformulation -prefortunate -prefortunately -prefortune -prefoundation -prefounder -prefragrance -prefragrant -prefrankness -prefraternal -prefraternally -prefraud -prefreeze -prefreshman -prefriendly -prefriendship -prefright -prefrighten -prefrontal -prefulfill -prefulfillment -prefulgence -prefulgency -prefulgent -prefunction -prefunctional -prefuneral -prefungoidal -prefurlough -prefurnish -pregain -pregainer -pregalvanize -preganglionic -pregather -pregathering -pregeminum -pregenerate -pregeneration -pregenerosity -pregenerous -pregenerously -pregenial -pregeniculatum -pregeniculum -pregenital -pregeological -pregirlhood -preglacial -pregladden -pregladness -preglenoid -preglenoidal -preglobulin -pregnability -pregnable -pregnance -pregnancy -pregnant -pregnantly -pregnantness -pregolden -pregolfing -pregracile -pregracious -pregrade -pregraduation -pregranite -pregranitic -pregratification -pregratify -pregreet -pregreeting -pregrievance -pregrowth -preguarantee -preguarantor -preguard -preguess -preguidance -preguide -preguilt -preguiltiness -preguilty -pregust -pregustant -pregustation -pregustator -pregustic -prehallux -prehalter -prehandicap -prehandle -prehaps -preharden -preharmonious -preharmoniousness -preharmony -preharsh -preharshness -preharvest -prehatred -prehaunt -prehaunted -prehaustorium -prehazard -prehazardous -preheal -prehearing -preheat -preheated -preheater -prehemiplegic -prehend -prehensible -prehensile -prehensility -prehension -prehensive -prehensiveness -prehensor -prehensorial -prehensory -prehepatic -prehepaticus -preheroic -prehesitancy -prehesitate -prehesitation -prehexameral -prehistorian -prehistoric -prehistorical -prehistorically -prehistorics -prehistory -prehnite -prehnitic -preholder -preholding -preholiday -prehorizon -prehorror -prehostile -prehostility -prehuman -prehumiliate -prehumiliation -prehumor -prehunger -prehydration -prehypophysis -preidea -preidentification -preidentify -preignition -preilluminate -preillumination -preillustrate -preillustration -preimage -preimaginary -preimagination -preimagine -preimbibe -preimbue -preimitate -preimitation -preimitative -preimmigration -preimpair -preimpairment -preimpart -preimperial -preimport -preimportance -preimportant -preimportantly -preimportation -preimposal -preimpose -preimposition -preimpress -preimpression -preimpressive -preimprove -preimprovement -preinaugural -preinaugurate -preincarnate -preincentive -preinclination -preincline -preinclude -preinclusion -preincorporate -preincorporation -preincrease -preindebted -preindebtedness -preindemnification -preindemnify -preindemnity -preindependence -preindependent -preindependently -preindesignate -preindicant -preindicate -preindication -preindispose -preindisposition -preinduce -preinducement -preinduction -preinductive -preindulge -preindulgence -preindulgent -preindustrial -preindustry -preinfect -preinfection -preinfer -preinference -preinflection -preinflectional -preinflict -preinfluence -preinform -preinformation -preinhabit -preinhabitant -preinhabitation -preinhere -preinherit -preinheritance -preinitial -preinitiate -preinitiation -preinjure -preinjurious -preinjury -preinquisition -preinscribe -preinscription -preinsert -preinsertion -preinsinuate -preinsinuating -preinsinuatingly -preinsinuation -preinsinuative -preinspect -preinspection -preinspector -preinspire -preinstall -preinstallation -preinstill -preinstillation -preinstruct -preinstruction -preinstructional -preinstructive -preinsula -preinsular -preinsulate -preinsulation -preinsult -preinsurance -preinsure -preintellectual -preintelligence -preintelligent -preintelligently -preintend -preintention -preintercede -preintercession -preinterchange -preintercourse -preinterest -preinterfere -preinterference -preinterpret -preinterpretation -preinterpretative -preinterview -preintone -preinvent -preinvention -preinventive -preinventory -preinvest -preinvestigate -preinvestigation -preinvestigator -preinvestment -preinvitation -preinvite -preinvocation -preinvolve -preinvolvement -preiotization -preiotize -preirrigation -preirrigational -preissuance -preissue -prejacent -prejournalistic -prejudge -prejudgement -prejudger -prejudgment -prejudication -prejudicative -prejudicator -prejudice -prejudiced -prejudicedly -prejudiceless -prejudiciable -prejudicial -prejudicially -prejudicialness -prejudicious -prejudiciously -prejunior -prejurisdiction -prejustification -prejustify -prejuvenile -Prekantian -prekindergarten -prekindle -preknit -preknow -preknowledge -prelabel -prelabial -prelabor -prelabrum -prelachrymal -prelacrimal -prelacteal -prelacy -prelanguage -prelapsarian -prelate -prelatehood -prelateship -prelatess -prelatial -prelatic -prelatical -prelatically -prelaticalness -prelation -prelatish -prelatism -prelatist -prelatize -prelatry -prelature -prelaunch -prelaunching -prelawful -prelawfully -prelawfulness -prelease -prelect -prelection -prelector -prelectorship -prelectress -prelecture -prelegacy -prelegal -prelegate -prelegatee -prelegend -prelegendary -prelegislative -preliability -preliable -prelibation -preliberal -preliberality -preliberally -preliberate -preliberation -prelicense -prelim -preliminarily -preliminary -prelimit -prelimitate -prelimitation -prelingual -prelinguistic -prelinpinpin -preliquidate -preliquidation -preliteral -preliterally -preliteralness -preliterary -preliterate -preliterature -prelithic -prelitigation -preloan -prelocalization -prelocate -prelogic -prelogical -preloral -preloreal -preloss -prelude -preluder -preludial -preludious -preludiously -preludium -preludize -prelumbar -prelusion -prelusive -prelusively -prelusorily -prelusory -preluxurious -premachine -premadness -premaintain -premaintenance -premake -premaker -premaking -premandibular -premanhood -premaniacal -premanifest -premanifestation -premankind -premanufacture -premanufacturer -premanufacturing -premarital -premarriage -premarry -premastery -prematch -premate -prematerial -prematernity -prematrimonial -prematuration -premature -prematurely -prematureness -prematurity -premaxilla -premaxillary -premeasure -premeasurement -premechanical -premedia -premedial -premedian -premedic -premedical -premedicate -premedication -premedieval -premedievalism -premeditate -premeditatedly -premeditatedness -premeditatingly -premeditation -premeditative -premeditator -premegalithic -prememorandum -premenace -premenstrual -premention -premeridian -premerit -premetallic -premethodical -premial -premiant -premiate -premidnight -premidsummer -premier -premieral -premiere -premieress -premierjus -premiership -premilitary -premillenarian -premillenarianism -premillennial -premillennialism -premillennialist -premillennialize -premillennially -premillennian -preminister -preministry -premious -premisal -premise -premisory -premisrepresent -premisrepresentation -premiss -premium -premix -premixer -premixture -premodel -premodern -premodification -premodify -premolar -premold -premolder -premolding -premonarchial -premonetary -Premongolian -premonish -premonishment -premonition -premonitive -premonitor -premonitorily -premonitory -premonopolize -premonopoly -Premonstrant -Premonstratensian -premonumental -premoral -premorality -premorally -premorbid -premorbidly -premorbidness -premorning -premorse -premortal -premortification -premortify -premortuary -premosaic -premotion -premourn -premove -premovement -premover -premuddle -premultiplication -premultiplier -premultiply -premundane -premunicipal -premunition -premunitory -premusical -premuster -premutative -premutiny -premycotic -premyelocyte -premythical -prename -Prenanthes -prenares -prenarial -prenaris -prenasal -prenatal -prenatalist -prenatally -prenational -prenative -prenatural -prenaval -prender -prendre -prenebular -prenecessitate -preneglect -preneglectful -prenegligence -prenegligent -prenegotiate -prenegotiation -preneolithic -prenephritic -preneural -preneuralgic -prenight -prenoble -prenodal -prenominal -prenominate -prenomination -prenominical -prenotation -prenotice -prenotification -prenotify -prenotion -prentice -prenticeship -prenumber -prenumbering -prenuncial -prenuptial -prenursery -preobedience -preobedient -preobject -preobjection -preobjective -preobligate -preobligation -preoblige -preobservance -preobservation -preobservational -preobserve -preobstruct -preobstruction -preobtain -preobtainable -preobtrude -preobtrusion -preobtrusive -preobviate -preobvious -preobviously -preobviousness -preoccasioned -preoccipital -preocclusion -preoccultation -preoccupancy -preoccupant -preoccupate -preoccupation -preoccupative -preoccupied -preoccupiedly -preoccupiedness -preoccupier -preoccupy -preoccur -preoccurrence -preoceanic -preocular -preodorous -preoffend -preoffense -preoffensive -preoffensively -preoffensiveness -preoffer -preoffering -preofficial -preofficially -preominate -preomission -preomit -preopen -preopening -preoperate -preoperation -preoperative -preoperatively -preoperator -preopercle -preopercular -preoperculum -preopinion -preopinionated -preoppose -preopposition -preoppress -preoppression -preoppressor -preoptic -preoptimistic -preoption -preoral -preorally -preorbital -preordain -preorder -preordination -preorganic -preorganization -preorganize -preoriginal -preoriginally -preornamental -preoutfit -preoutline -preoverthrow -prep -prepainful -prepalatal -prepalatine -prepaleolithic -prepanic -preparable -preparation -preparationist -preparative -preparatively -preparator -preparatorily -preparatory -prepardon -prepare -prepared -preparedly -preparedness -preparement -preparental -preparer -preparietal -preparingly -preparliamentary -preparoccipital -preparoxysmal -prepartake -preparticipation -prepartisan -prepartition -prepartnership -prepatellar -prepatent -prepatriotic -prepave -prepavement -prepay -prepayable -prepayment -prepeduncle -prepenetrate -prepenetration -prepenial -prepense -prepensely -prepeople -preperceive -preperception -preperceptive -preperitoneal -prepersuade -prepersuasion -prepersuasive -preperusal -preperuse -prepetition -prephragma -prephthisical -prepigmental -prepink -prepious -prepituitary -preplace -preplacement -preplacental -preplan -preplant -prepledge -preplot -prepoetic -prepoetical -prepoison -prepolice -prepolish -prepolitic -prepolitical -prepolitically -prepollence -prepollency -prepollent -prepollex -preponder -preponderance -preponderancy -preponderant -preponderantly -preponderate -preponderately -preponderating -preponderatingly -preponderation -preponderous -preponderously -prepontile -prepontine -preportray -preportrayal -prepose -preposition -prepositional -prepositionally -prepositive -prepositively -prepositor -prepositorial -prepositure -prepossess -prepossessed -prepossessing -prepossessingly -prepossessingness -prepossession -prepossessionary -prepossessor -preposterous -preposterously -preposterousness -prepostorship -prepotence -prepotency -prepotent -prepotential -prepotently -prepractical -prepractice -preprandial -prepreference -prepreparation -preprice -preprimary -preprimer -preprimitive -preprint -preprofess -preprofessional -preprohibition -prepromise -prepromote -prepromotion -prepronounce -prepronouncement -preprophetic -preprostatic -preprove -preprovide -preprovision -preprovocation -preprovoke -preprudent -preprudently -prepsychological -prepsychology -prepuberal -prepubertal -prepuberty -prepubescent -prepubic -prepubis -prepublication -prepublish -prepuce -prepunctual -prepunish -prepunishment -prepupa -prepupal -prepurchase -prepurchaser -prepurpose -preputial -preputium -prepyloric -prepyramidal -prequalification -prequalify -prequarantine -prequestion -prequotation -prequote -preracing -preradio -prerailroad -prerailroadite -prerailway -preramus -prerational -prereadiness -preready -prerealization -prerealize -prerebellion -prereceipt -prereceive -prereceiver -prerecital -prerecite -prereckon -prereckoning -prerecognition -prerecognize -prerecommend -prerecommendation -prereconcile -prereconcilement -prereconciliation -prerectal -preredeem -preredemption -prereduction -prerefer -prereference -prerefine -prerefinement -prereform -prereformation -prereformatory -prerefusal -prerefuse -preregal -preregister -preregistration -preregulate -preregulation -prereject -prerejection -prerejoice -prerelate -prerelation -prerelationship -prerelease -prereligious -prereluctation -preremit -preremittance -preremorse -preremote -preremoval -preremove -preremunerate -preremuneration -prerenal -prerent -prerental -prereport -prerepresent -prerepresentation -prereption -prerepublican -prerequest -prerequire -prerequirement -prerequisite -prerequisition -preresemblance -preresemble -preresolve -preresort -prerespectability -prerespectable -prerespiration -prerespire -preresponsibility -preresponsible -prerestoration -prerestrain -prerestraint -prerestrict -prerestriction -prereturn -prereveal -prerevelation -prerevenge -prereversal -prereverse -prereview -prerevise -prerevision -prerevival -prerevolutionary -prerheumatic -prerich -prerighteous -prerighteously -prerighteousness -prerogatival -prerogative -prerogatived -prerogatively -prerogativity -prerolandic -preromantic -preromanticism -preroute -preroutine -preroyal -preroyally -preroyalty -prerupt -preruption -presacral -presacrifice -presacrificial -presage -presageful -presagefully -presager -presagient -presaging -presagingly -presalvation -presanctification -presanctified -presanctify -presanguine -presanitary -presartorial -presatisfaction -presatisfactory -presatisfy -presavage -presavagery -presay -presbyacousia -presbyacusia -presbycousis -presbycusis -presbyope -presbyophrenia -presbyophrenic -presbyopia -presbyopic -presbyopy -presbyte -presbyter -presbyteral -presbyterate -presbyterated -presbyteress -presbyteria -presbyterial -presbyterially -Presbyterian -Presbyterianism -Presbyterianize -Presbyterianly -presbyterium -presbytership -presbytery -presbytia -presbytic -Presbytinae -Presbytis -presbytism -prescapula -prescapular -prescapularis -prescholastic -preschool -prescience -prescient -prescientific -presciently -prescind -prescindent -prescission -prescored -prescout -prescribable -prescribe -prescriber -prescript -prescriptibility -prescriptible -prescription -prescriptionist -prescriptive -prescriptively -prescriptiveness -prescriptorial -prescrive -prescutal -prescutum -preseal -presearch -preseason -preseasonal -presecular -presecure -presee -preselect -presell -preseminal -preseminary -presence -presenced -presenceless -presenile -presenility -presensation -presension -present -presentability -presentable -presentableness -presentably -presental -presentation -presentational -presentationism -presentationist -presentative -presentatively -presentee -presentence -presenter -presential -presentiality -presentially -presentialness -presentient -presentiment -presentimental -presentist -presentive -presentively -presentiveness -presently -presentment -presentness -presentor -preseparate -preseparation -preseparator -preservability -preservable -preserval -preservation -preservationist -preservative -preservatize -preservatory -preserve -preserver -preserveress -preses -presession -preset -presettle -presettlement -presexual -preshadow -preshape -preshare -presharpen -preshelter -preship -preshipment -preshortage -preshorten -preshow -preside -presidence -presidencia -presidency -president -presidente -presidentess -presidential -presidentially -presidentiary -presidentship -presider -presidial -presidially -presidiary -presidio -presidium -presift -presign -presignal -presignificance -presignificancy -presignificant -presignification -presignificative -presignificator -presignify -presimian -preslavery -Presley -presmooth -presocial -presocialism -presocialist -presolar -presolicit -presolicitation -presolution -presolve -presophomore -presound -prespecialist -prespecialize -prespecific -prespecifically -prespecification -prespecify -prespeculate -prespeculation -presphenoid -presphenoidal -presphygmic -prespinal -prespinous -prespiracular -presplendor -presplenomegalic -prespoil -prespontaneity -prespontaneous -prespontaneously -prespread -presprinkle -prespur -press -pressable -pressboard -pressdom -pressel -presser -pressfat -pressful -pressgang -pressible -pressing -pressingly -pressingness -pression -pressive -pressman -pressmanship -pressmark -pressor -presspack -pressroom -pressurage -pressural -pressure -pressureless -pressureproof -pressurize -pressurizer -presswoman -presswork -pressworker -prest -prestabilism -prestability -prestable -prestamp -prestandard -prestandardization -prestandardize -prestant -prestate -prestation -prestatistical -presteam -presteel -prester -presternal -presternum -prestidigital -prestidigitate -prestidigitation -prestidigitator -prestidigitatorial -prestige -prestigiate -prestigiation -prestigiator -prestigious -prestigiously -prestigiousness -prestimulate -prestimulation -prestimulus -prestissimo -presto -prestock -prestomial -prestomium -prestorage -prestore -prestraighten -prestrain -prestrengthen -prestress -prestretch -prestricken -prestruggle -prestubborn -prestudious -prestudiously -prestudiousness -prestudy -presubdue -presubiculum -presubject -presubjection -presubmission -presubmit -presubordinate -presubordination -presubscribe -presubscriber -presubscription -presubsist -presubsistence -presubsistent -presubstantial -presubstitute -presubstitution -presuccess -presuccessful -presuccessfully -presuffer -presuffering -presufficiency -presufficient -presufficiently -presuffrage -presuggest -presuggestion -presuggestive -presuitability -presuitable -presuitably -presumable -presumably -presume -presumedly -presumer -presuming -presumption -presumptious -presumptiously -presumptive -presumptively -presumptuous -presumptuously -presumptuousness -presuperficial -presuperficiality -presuperficially -presuperfluity -presuperfluous -presuperfluously -presuperintendence -presuperintendency -presupervise -presupervision -presupervisor -presupplemental -presupplementary -presupplicate -presupplication -presupply -presupport -presupposal -presuppose -presupposition -presuppositionless -presuppress -presuppression -presuppurative -presupremacy -presupreme -presurgery -presurgical -presurmise -presurprisal -presurprise -presurrender -presurround -presurvey -presusceptibility -presusceptible -presuspect -presuspend -presuspension -presuspicion -presuspicious -presuspiciously -presuspiciousness -presustain -presutural -preswallow -presylvian -presympathize -presympathy -presymphonic -presymphony -presymphysial -presymptom -presymptomatic -presynapsis -presynaptic -presystematic -presystematically -presystole -presystolic -pretabulate -pretabulation -pretan -pretangible -pretangibly -pretannage -pretardily -pretardiness -pretardy -pretariff -pretaste -preteach -pretechnical -pretechnically -pretelegraph -pretelegraphic -pretelephone -pretelephonic -pretell -pretemperate -pretemperately -pretemporal -pretend -pretendant -pretended -pretendedly -pretender -Pretenderism -pretendership -pretendingly -pretendingness -pretense -pretenseful -pretenseless -pretension -pretensional -pretensionless -pretensive -pretensively -pretensiveness -pretentative -pretentious -pretentiously -pretentiousness -pretercanine -preterchristian -preterconventional -preterdetermined -preterdeterminedly -preterdiplomatic -preterdiplomatically -preterequine -preteressential -pretergress -pretergression -preterhuman -preterience -preterient -preterintentional -preterist -preterit -preteriteness -preterition -preteritive -preteritness -preterlabent -preterlegal -preterlethal -preterminal -pretermission -pretermit -pretermitter -preternative -preternatural -preternaturalism -preternaturalist -preternaturality -preternaturally -preternaturalness -preternormal -preternotorious -preternuptial -preterpluperfect -preterpolitical -preterrational -preterregular -preterrestrial -preterritorial -preterroyal -preterscriptural -preterseasonable -pretersensual -pretervection -pretest -pretestify -pretestimony -pretext -pretexted -pretextuous -pretheological -prethoracic -prethoughtful -prethoughtfully -prethoughtfulness -prethreaten -prethrill -prethrust -pretibial -pretimeliness -pretimely -pretincture -pretire -pretoken -pretone -pretonic -pretorial -pretorship -pretorsional -pretorture -pretournament -pretrace -pretracheal -pretraditional -pretrain -pretraining -pretransact -pretransaction -pretranscribe -pretranscription -pretranslate -pretranslation -pretransmission -pretransmit -pretransport -pretransportation -pretravel -pretreat -pretreatment -pretreaty -pretrematic -pretribal -pretry -prettification -prettifier -prettify -prettikin -prettily -prettiness -pretty -prettyface -prettyish -prettyism -pretubercular -pretuberculous -pretympanic -pretyphoid -pretypify -pretypographical -pretyrannical -pretyranny -pretzel -preultimate -preultimately -preumbonal -preunderstand -preundertake -preunion -preunite -preutilizable -preutilization -preutilize -prevacate -prevacation -prevaccinate -prevaccination -prevail -prevailance -prevailer -prevailingly -prevailingness -prevailment -prevalence -prevalency -prevalent -prevalently -prevalentness -prevalescence -prevalescent -prevalid -prevalidity -prevalidly -prevaluation -prevalue -prevariation -prevaricate -prevarication -prevaricator -prevaricatory -prevascular -prevegetation -prevelar -prevenance -prevenancy -prevene -prevenience -prevenient -preveniently -prevent -preventability -preventable -preventative -preventer -preventible -preventingly -prevention -preventionism -preventionist -preventive -preventively -preventiveness -preventorium -preventure -preverb -preverbal -preverification -preverify -prevernal -preversion -prevertebral -prevesical -preveto -previctorious -previde -previdence -preview -previgilance -previgilant -previgilantly -previolate -previolation -previous -previously -previousness -previse -previsibility -previsible -previsibly -prevision -previsional -previsit -previsitor -previsive -previsor -prevocal -prevocalic -prevocally -prevocational -prevogue -prevoid -prevoidance -prevolitional -prevolunteer -prevomer -prevotal -prevote -prevoyance -prevoyant -prevue -prewar -prewarn -prewarrant -prewash -preweigh -prewelcome -prewhip -prewilling -prewillingly -prewillingness -prewire -prewireless -prewitness -prewonder -prewonderment -preworldliness -preworldly -preworship -preworthily -preworthiness -preworthy -prewound -prewrap -prexy -prey -preyer -preyful -preyingly -preyouthful -prezonal -prezone -prezygapophysial -prezygapophysis -prezygomatic -Pria -priacanthid -Priacanthidae -priacanthine -Priacanthus -Priapean -Priapic -priapism -Priapulacea -priapulid -Priapulida -Priapulidae -priapuloid -Priapuloidea -Priapulus -Priapus -Priapusian -Price -price -priceable -priceably -priced -priceite -priceless -pricelessness -pricer -prich -prick -prickant -pricked -pricker -pricket -prickfoot -pricking -prickingly -prickish -prickle -prickleback -prickled -pricklefish -prickless -prickliness -prickling -pricklingly -pricklouse -prickly -pricklyback -prickmadam -prickmedainty -prickproof -pricks -prickseam -prickshot -prickspur -pricktimber -prickwood -pricky -pride -prideful -pridefully -pridefulness -prideless -pridelessly -prideling -prideweed -pridian -priding -pridingly -pridy -pried -prier -priest -priestal -priestcap -priestcraft -priestdom -priesteen -priestery -priestess -priestfish -priesthood -priestianity -priestish -priestism -priestless -priestlet -priestlike -priestliness -priestling -priestly -priestship -priestshire -prig -prigdom -prigger -priggery -priggess -priggish -priggishly -priggishness -priggism -prighood -prigman -prill -prillion -prim -prima -primacy -primage -primal -primality -primar -primarian -primaried -primarily -primariness -primary -primatal -primate -Primates -primateship -primatial -primatic -primatical -primavera -primaveral -prime -primegilt -primely -primeness -primer -primero -primerole -primeval -primevalism -primevally -primeverose -primevity -primevous -primevrin -Primianist -primigene -primigenial -primigenian -primigenious -primigenous -primigravida -primine -priming -primipara -primiparity -primiparous -primipilar -primitiae -primitial -primitias -primitive -primitively -primitivism -primitivist -primitivistic -primitivity -primly -primness -primogenetrix -primogenial -primogenital -primogenitary -primogenitive -primogenitor -primogeniture -primogenitureship -primogenous -primoprime -primoprimitive -primordality -primordia -primordial -primordialism -primordially -primordiate -primordium -primosity -primost -primp -primrose -primrosed -primrosetide -primrosetime -primrosy -primsie -Primula -primula -Primulaceae -primulaceous -Primulales -primulaverin -primulaveroside -primulic -primuline -Primulinus -Primus -primus -primwort -primy -prince -princeage -princecraft -princedom -princehood -Princeite -princekin -princeless -princelet -princelike -princeliness -princeling -princely -princeps -princeship -princess -princessdom -princesse -princesslike -princessly -princewood -princified -princify -principal -principality -principally -principalness -principalship -principate -Principes -principes -principia -principiant -principiate -principiation -principium -principle -principulus -princock -princox -prine -pringle -prink -prinker -prinkle -prinky -print -printability -printable -printableness -printed -printer -printerdom -printerlike -printery -printing -printless -printline -printscript -printworks -Priodon -priodont -Priodontes -prion -prionid -Prionidae -Prioninae -prionine -Prionodesmacea -prionodesmacean -prionodesmaceous -prionodesmatic -Prionodon -prionodont -Prionopinae -prionopine -Prionops -Prionus -prior -prioracy -prioral -priorate -prioress -prioristic -prioristically -priorite -priority -priorly -priorship -priory -prisable -prisage -prisal -priscan -Priscian -Priscianist -Priscilla -Priscillian -Priscillianism -Priscillianist -prism -prismal -prismatic -prismatical -prismatically -prismatization -prismatize -prismatoid -prismatoidal -prismed -prismoid -prismoidal -prismy -prisometer -prison -prisonable -prisondom -prisoner -prisonful -prisonlike -prisonment -prisonous -priss -prissily -prissiness -prissy -pristane -pristine -Pristipomatidae -Pristipomidae -Pristis -Pristodus -pritch -Pritchardia -pritchel -prithee -prius -privacity -privacy -privant -private -privateer -privateersman -privately -privateness -privation -privative -privatively -privativeness -privet -privilege -privileged -privileger -privily -priviness -privity -privy -prizable -prize -prizeable -prizeholder -prizeman -prizer -prizery -prizetaker -prizeworthy -pro -proa -proabolitionist -proabsolutism -proabsolutist -proabstinence -proacademic -proacceptance -proacquisition -proacquittal -proaction -proactor -proaddition -proadjournment -proadministration -proadmission -proadoption -proadvertising -proaesthetic -proaggressionist -proagitation -proagrarian -proagreement -proagricultural -proagule -proairesis -proairplane -proal -proalcoholism -proalien -proalliance -proallotment -proalteration -proamateur -proambient -proamendment -proamnion -proamniotic -proamusement -proanaphora -proanaphoral -proanarchic -proangiosperm -proangiospermic -proangiospermous -proanimistic -proannexation -proannexationist -proantarctic -proanthropos -proapostolic -proappointment -proapportionment -proappreciation -proappropriation -proapproval -proaquatic -proarbitration -proarbitrationist -proarchery -proarctic -proaristocratic -proarmy -Proarthri -proassessment -proassociation -proatheist -proatheistic -proathletic -proatlas -proattack -proattendance -proauction -proaudience -proaulion -proauthor -proauthority -proautomobile -proavian -proaviation -Proavis -proaward -prob -probabiliorism -probabiliorist -probabilism -probabilist -probabilistic -probability -probabilize -probabl -probable -probableness -probably -probachelor -probal -proballoon -probang -probanishment -probankruptcy -probant -probargaining -probaseball -probasketball -probate -probathing -probatical -probation -probational -probationary -probationer -probationerhood -probationership -probationism -probationist -probationship -probative -probatively -probator -probatory -probattle -probattleship -probe -probeable -probeer -prober -probetting -probiology -probituminous -probity -problem -problematic -problematical -problematically -problematist -problematize -problemdom -problemist -problemistic -problemize -problemwise -problockade -probonding -probonus -proborrowing -proboscidal -proboscidate -Proboscidea -proboscidean -proboscideous -proboscides -proboscidial -proboscidian -proboscidiferous -proboscidiform -probosciform -probosciformed -Probosciger -proboscis -proboscislike -probouleutic -proboulevard -probowling -proboxing -proboycott -probrick -probridge -probroadcasting -probudget -probudgeting -probuilding -probusiness -probuying -procacious -procaciously -procacity -procaine -procambial -procambium -procanal -procancellation -procapital -procapitalism -procapitalist -procarnival -procarp -procarpium -procarrier -procatalectic -procatalepsis -procatarctic -procatarxis -procathedral -Procavia -Procaviidae -procedendo -procedural -procedure -proceed -proceeder -proceeding -proceeds -proceleusmatic -Procellaria -procellarian -procellarid -Procellariidae -Procellariiformes -procellariine -procellas -procello -procellose -procellous -procensorship -procensure -procentralization -procephalic -procercoid -procereal -procerebral -procerebrum -proceremonial -proceremonialism -proceremonialist -proceres -procerite -proceritic -procerity -procerus -process -processal -procession -processional -processionalist -processionally -processionary -processioner -processionist -processionize -processionwise -processive -processor -processual -procharity -prochein -prochemical -prochlorite -prochondral -prochoos -prochordal -prochorion -prochorionic -prochromosome -prochronic -prochronism -prochronize -prochurch -prochurchian -procidence -procident -procidentia -procivic -procivilian -procivism -proclaim -proclaimable -proclaimant -proclaimer -proclaiming -proclaimingly -proclamation -proclamator -proclamatory -proclassic -proclassical -proclergy -proclerical -proclericalism -procline -proclisis -proclitic -proclive -proclivitous -proclivity -proclivous -proclivousness -Procne -procnemial -Procoelia -procoelia -procoelian -procoelous -procoercive -procollectivistic -procollegiate -procombat -procombination -procomedy -procommemoration -procomment -procommercial -procommission -procommittee -procommunal -procommunism -procommunist -procommutation -procompensation -procompetition -procompromise -procompulsion -proconcentration -proconcession -proconciliation -procondemnation -proconfederationist -proconference -proconfession -proconfessionist -proconfiscation -proconformity -Proconnesian -proconquest -proconscription -proconscriptive -proconservation -proconservationist -proconsolidation -proconstitutional -proconstitutionalism -proconsul -proconsular -proconsulary -proconsulate -proconsulship -proconsultation -procontinuation -proconvention -proconventional -proconviction -procoracoid -procoracoidal -procorporation -procosmetic -procosmopolitan -procotton -procourt -procrastinate -procrastinating -procrastinatingly -procrastination -procrastinative -procrastinatively -procrastinator -procrastinatory -procreant -procreate -procreation -procreative -procreativeness -procreator -procreatory -procreatress -procreatrix -procremation -Procris -procritic -procritique -Procrustean -Procrusteanism -Procrusteanize -Procrustes -procrypsis -procryptic -procryptically -proctal -proctalgia -proctalgy -proctatresia -proctatresy -proctectasia -proctectomy -procteurynter -proctitis -proctocele -proctoclysis -proctocolitis -proctocolonoscopy -proctocystoplasty -proctocystotomy -proctodaeal -proctodaeum -proctodynia -proctoelytroplastic -proctologic -proctological -proctologist -proctology -proctoparalysis -proctoplastic -proctoplasty -proctoplegia -proctopolypus -proctoptoma -proctoptosis -proctor -proctorage -proctoral -proctorial -proctorially -proctorical -proctorization -proctorize -proctorling -proctorrhagia -proctorrhaphy -proctorrhea -proctorship -proctoscope -proctoscopic -proctoscopy -proctosigmoidectomy -proctosigmoiditis -proctospasm -proctostenosis -proctostomy -proctotome -proctotomy -proctotresia -proctotrypid -Proctotrypidae -proctotrypoid -Proctotrypoidea -proctovalvotomy -Proculian -procumbent -procurable -procuracy -procural -procurance -procurate -procuration -procurative -procurator -procuratorate -procuratorial -procuratorship -procuratory -procuratrix -procure -procurement -procurer -procuress -procurrent -procursive -procurvation -procurved -Procyon -Procyonidae -procyoniform -Procyoniformia -Procyoninae -procyonine -proczarist -prod -prodatary -prodder -proddle -prodecoration -prodefault -prodefiance -prodelay -prodelision -prodemocratic -Prodenia -prodenominational -prodentine -prodeportation -prodespotic -prodespotism -prodialogue -prodigal -prodigalish -prodigalism -prodigality -prodigalize -prodigally -prodigiosity -prodigious -prodigiously -prodigiousness -prodigus -prodigy -prodisarmament -prodisplay -prodissoconch -prodissolution -prodistribution -prodition -proditorious -proditoriously -prodivision -prodivorce -prodproof -prodramatic -prodroma -prodromal -prodromatic -prodromatically -prodrome -prodromic -prodromous -prodromus -producal -produce -produceable -produceableness -produced -producent -producer -producership -producibility -producible -producibleness -product -producted -productibility -productible -productid -Productidae -productile -production -productional -productionist -productive -productively -productiveness -productivity -productoid -productor -productory -productress -Productus -proecclesiastical -proeconomy -proeducation -proeducational -proegumenal -proelectric -proelectrical -proelectrification -proelectrocution -proelimination -proem -proembryo -proembryonic -proemial -proemium -proemployee -proemptosis -proenforcement -proenlargement -proenzym -proenzyme -proepimeron -proepiscopist -proepisternum -proequality -proethical -proethnic -proethnically -proetid -Proetidae -Proetus -proevolution -proevolutionist -proexamination -proexecutive -proexemption -proexercise -proexperiment -proexpert -proexporting -proexposure -proextension -proextravagance -prof -profaculty -profanable -profanableness -profanably -profanation -profanatory -profanchise -profane -profanely -profanement -profaneness -profaner -profanism -profanity -profanize -profarmer -profection -profectional -profectitious -profederation -profeminism -profeminist -proferment -profert -profess -professable -professed -professedly -profession -professional -professionalism -professionalist -professionality -professionalization -professionalize -professionally -professionist -professionize -professionless -professive -professively -professor -professorate -professordom -professoress -professorial -professorialism -professorially -professoriate -professorlike -professorling -professorship -professory -proffer -profferer -proficience -proficiency -proficient -proficiently -proficientness -profiction -proficuous -proficuously -profile -profiler -profilist -profilograph -profit -profitability -profitable -profitableness -profitably -profiteer -profiteering -profiter -profiting -profitless -profitlessly -profitlessness -profitmonger -profitmongering -profitproof -proflated -proflavine -profligacy -profligate -profligately -profligateness -profligation -proflogger -profluence -profluent -profluvious -profluvium -proforeign -profound -profoundly -profoundness -profraternity -profugate -profulgent -profunda -profundity -profuse -profusely -profuseness -profusion -profusive -profusively -profusiveness -prog -progambling -progamete -progamic -proganosaur -Proganosauria -progenerate -progeneration -progenerative -progenital -progenitive -progenitiveness -progenitor -progenitorial -progenitorship -progenitress -progenitrix -progeniture -progenity -progeny -progeotropic -progeotropism -progeria -progermination -progestational -progesterone -progestin -progger -proglottic -proglottid -proglottidean -proglottis -prognathi -prognathic -prognathism -prognathous -prognathy -progne -prognose -prognosis -prognostic -prognosticable -prognostically -prognosticate -prognostication -prognosticative -prognosticator -prognosticatory -progoneate -progospel -progovernment -program -programist -programistic -programma -programmar -programmatic -programmatically -programmatist -programmer -progrede -progrediency -progredient -progress -progresser -progression -progressional -progressionally -progressionary -progressionism -progressionist -progressism -progressist -progressive -progressively -progressiveness -progressivism -progressivist -progressivity -progressor -proguardian -Progymnasium -progymnosperm -progymnospermic -progymnospermous -progypsy -prohaste -prohibit -prohibiter -prohibition -prohibitionary -prohibitionism -prohibitionist -prohibitive -prohibitively -prohibitiveness -prohibitor -prohibitorily -prohibitory -proholiday -prohostility -prohuman -prohumanistic -prohydrotropic -prohydrotropism -proidealistic -proimmunity -proinclusion -proincrease -proindemnity -proindustrial -proinjunction -proinnovationist -proinquiry -proinsurance -prointervention -proinvestment -proirrigation -projacient -project -projectable -projectedly -projectile -projecting -projectingly -projection -projectional -projectionist -projective -projectively -projectivity -projector -projectress -projectrix -projecture -projicience -projicient -projiciently -projournalistic -projudicial -proke -prokeimenon -proker -prokindergarten -proklausis -prolabium -prolabor -prolacrosse -prolactin -prolamin -prolan -prolapse -prolapsus -prolarva -prolarval -prolate -prolately -prolateness -prolation -prolative -prolatively -proleague -proleaguer -prolectite -proleg -prolegate -prolegislative -prolegomena -prolegomenal -prolegomenary -prolegomenist -prolegomenon -prolegomenous -proleniency -prolepsis -proleptic -proleptical -proleptically -proleptics -proletairism -proletarian -proletarianism -proletarianization -proletarianize -proletarianly -proletarianness -proletariat -proletariatism -proletarization -proletarize -proletary -proletcult -proleucocyte -proleukocyte -prolicense -prolicidal -prolicide -proliferant -proliferate -proliferation -proliferative -proliferous -proliferously -prolific -prolificacy -prolifical -prolifically -prolificalness -prolificate -prolification -prolificity -prolificly -prolificness -prolificy -prolify -proligerous -proline -proliquor -proliterary -proliturgical -proliturgist -prolix -prolixity -prolixly -prolixness -prolocution -prolocutor -prolocutorship -prolocutress -prolocutrix -prologist -prologize -prologizer -prologos -prologue -prologuelike -prologuer -prologuist -prologuize -prologuizer -prologus -prolong -prolongable -prolongableness -prolongably -prolongate -prolongation -prolonge -prolonger -prolongment -prolusion -prolusionize -prolusory -prolyl -promachinery -promachos -promagisterial -promagistracy -promagistrate -promajority -promammal -Promammalia -promammalian -promarriage -promatrimonial -promatrimonialist -promaximum -promemorial -promenade -promenader -promenaderess -promercantile -promercy -promerger -promeristem -promerit -promeritor -Promethea -Promethean -Prometheus -promethium -promic -promilitarism -promilitarist -promilitary -prominence -prominency -prominent -prominently -prominimum -proministry -prominority -promisable -promiscuity -promiscuous -promiscuously -promiscuousness -promise -promisee -promiseful -promiseless -promisemonger -promiseproof -promiser -promising -promisingly -promisingness -promisor -promissionary -promissive -promissor -promissorily -promissory -promitosis -promittor -promnesia -promoderation -promoderationist -promodernist -promodernistic -promonarchic -promonarchical -promonarchicalness -promonarchist -promonopolist -promonopoly -promontoried -promontory -promoral -promorph -promorphological -promorphologically -promorphologist -promorphology -promotable -promote -promotement -promoter -promotion -promotional -promotive -promotiveness -promotor -promotorial -promotress -promotrix -promovable -promovent -prompt -promptbook -prompter -promptitude -promptive -promptly -promptness -promptress -promptuary -prompture -promulgate -promulgation -promulgator -promulge -promulger -promuscidate -promuscis -promycelial -promycelium -promythic -pronaos -pronate -pronation -pronational -pronationalism -pronationalist -pronationalistic -pronative -pronatoflexor -pronator -pronaval -pronavy -prone -pronegotiation -pronegro -pronegroism -pronely -proneness -pronephric -pronephridiostome -pronephron -pronephros -proneur -prong -prongbuck -pronged -pronger -pronghorn -pronglike -pronic -pronograde -pronominal -pronominalize -pronominally -pronomination -pronotal -pronotum -pronoun -pronounal -pronounce -pronounceable -pronounced -pronouncedly -pronouncement -pronounceness -pronouncer -pronpl -pronto -Pronuba -pronuba -pronubial -pronuclear -pronucleus -pronumber -pronunciability -pronunciable -pronuncial -pronunciamento -pronunciation -pronunciative -pronunciator -pronunciatory -pronymph -pronymphal -proo -prooemiac -prooemion -prooemium -proof -proofer -proofful -proofing -proofless -prooflessly -proofness -proofread -proofreader -proofreading -proofroom -proofy -prop -propadiene -propaedeutic -propaedeutical -propaedeutics -propagability -propagable -propagableness -propagand -propaganda -propagandic -propagandism -propagandist -propagandistic -propagandistically -propagandize -propagate -propagation -propagational -propagative -propagator -propagatory -propagatress -propago -propagulum -propale -propalinal -propane -propanedicarboxylic -propanol -propanone -propapist -proparasceve -propargyl -propargylic -Proparia -proparian -proparliamental -proparoxytone -proparoxytonic -proparticipation -propatagial -propatagian -propatagium -propatriotic -propatriotism -propatronage -propayment -propellable -propellant -propellent -propeller -propelment -propend -propendent -propene -propenoic -propense -propensely -propenseness -propension -propensitude -propensity -propenyl -propenylic -proper -properispome -properispomenon -properitoneal -properly -properness -propertied -property -propertyless -propertyship -propessimism -propessimist -prophase -prophasis -prophecy -prophecymonger -prophesiable -prophesier -prophesy -prophet -prophetess -prophethood -prophetic -prophetical -propheticality -prophetically -propheticalness -propheticism -propheticly -prophetism -prophetize -prophetless -prophetlike -prophetry -prophetship -prophilosophical -prophloem -prophoric -prophototropic -prophototropism -prophylactic -prophylactical -prophylactically -prophylaxis -prophylaxy -prophyll -prophyllum -propination -propine -propinoic -propinquant -propinque -propinquity -propinquous -propiolaldehyde -propiolate -propiolic -propionate -propione -Propionibacterieae -Propionibacterium -propionic -propionitril -propionitrile -propionyl -Propithecus -propitiable -propitial -propitiate -propitiatingly -propitiation -propitiative -propitiator -propitiatorily -propitiatory -propitious -propitiously -propitiousness -proplasm -proplasma -proplastic -propless -propleural -propleuron -proplex -proplexus -Propliopithecus -propodeal -propodeon -propodeum -propodial -propodiale -propodite -propoditic -propodium -propolis -propolitical -propolization -propolize -propone -proponement -proponent -proponer -propons -Propontic -propooling -propopery -proportion -proportionability -proportionable -proportionableness -proportionably -proportional -proportionalism -proportionality -proportionally -proportionate -proportionately -proportionateness -proportioned -proportioner -proportionless -proportionment -proposable -proposal -proposant -propose -proposer -proposition -propositional -propositionally -propositionize -propositus -propound -propounder -propoundment -propoxy -proppage -propper -propraetor -propraetorial -propraetorian -proprecedent -propriation -proprietage -proprietarian -proprietariat -proprietarily -proprietary -proprietor -proprietorial -proprietorially -proprietorship -proprietory -proprietous -proprietress -proprietrix -propriety -proprioception -proprioceptive -proprioceptor -propriospinal -proprium -proprivilege -proproctor -proprofit -proprovincial -proprovost -props -propterygial -propterygium -proptosed -proptosis -propublication -propublicity -propugnacled -propugnaculum -propugnation -propugnator -propugner -propulsation -propulsatory -propulsion -propulsity -propulsive -propulsor -propulsory -propunishment -propupa -propupal -propurchase -Propus -propwood -propygidium -propyl -propylacetic -propylaeum -propylamine -propylation -propylene -propylic -propylidene -propylite -propylitic -propylitization -propylon -propyne -propynoic -proquaestor -proracing -prorailroad -prorata -proratable -prorate -proration -prore -proreader -prorealism -prorealist -prorealistic -proreality -prorean -prorebate -prorebel -prorecall -proreciprocation -prorecognition -proreconciliation -prorector -prorectorate -proredemption -proreduction -proreferendum -proreform -proreformist -proregent -prorelease -Proreptilia -proreptilian -proreption -prorepublican -proresearch -proreservationist -proresignation -prorestoration -prorestriction -prorevision -prorevisionist -prorevolution -prorevolutionary -prorevolutionist -prorhinal -Prorhipidoglossomorpha -proritual -proritualistic -prorogate -prorogation -prorogator -prorogue -proroguer -proromance -proromantic -proromanticism -proroyal -proroyalty -prorrhesis -prorsad -prorsal -proruption -prosabbath -prosabbatical -prosacral -prosaic -prosaical -prosaically -prosaicalness -prosaicism -prosaicness -prosaism -prosaist -prosar -Prosarthri -prosateur -proscapula -proscapular -proscenium -proscholastic -proschool -proscientific -proscolecine -proscolex -proscribable -proscribe -proscriber -proscript -proscription -proscriptional -proscriptionist -proscriptive -proscriptively -proscriptiveness -proscutellar -proscutellum -proscynemata -prose -prosecrecy -prosecretin -prosect -prosection -prosector -prosectorial -prosectorium -prosectorship -prosecutable -prosecute -prosecution -prosecutor -prosecutrix -proselenic -proselike -proselyte -proselyter -proselytical -proselytingly -proselytism -proselytist -proselytistic -proselytization -proselytize -proselytizer -proseman -proseminar -proseminary -proseminate -prosemination -prosencephalic -prosencephalon -prosenchyma -prosenchymatous -proseneschal -proser -Proserpinaca -prosethmoid -proseucha -proseuche -prosification -prosifier -prosify -prosiliency -prosilient -prosiliently -prosilverite -prosily -Prosimiae -prosimian -prosiness -prosing -prosingly -prosiphon -prosiphonal -prosiphonate -prosish -prosist -proslambanomenos -proslave -proslaver -proslavery -proslaveryism -prosneusis -proso -prosobranch -Prosobranchia -Prosobranchiata -prosobranchiate -prosocele -prosodal -prosode -prosodemic -prosodetic -prosodiac -prosodiacal -prosodiacally -prosodial -prosodially -prosodian -prosodic -prosodical -prosodically -prosodion -prosodist -prosodus -prosody -prosogaster -prosogyrate -prosogyrous -prosoma -prosomal -prosomatic -prosonomasia -prosopalgia -prosopalgic -prosopantritis -prosopectasia -prosophist -prosopic -prosopically -Prosopis -prosopite -Prosopium -prosoplasia -prosopography -prosopon -prosoponeuralgia -prosopoplegia -prosopoplegic -prosopopoeia -prosopopoeial -prosoposchisis -prosopospasm -prosopotocia -prosopyl -prosopyle -prosorus -prospect -prospection -prospective -prospectively -prospectiveness -prospectless -prospector -prospectus -prospectusless -prospeculation -prosper -prosperation -prosperity -prosperous -prosperously -prosperousness -prospicience -prosporangium -prosport -pross -prossy -prostatauxe -prostate -prostatectomy -prostatelcosis -prostatic -prostaticovesical -prostatism -prostatitic -prostatitis -prostatocystitis -prostatocystotomy -prostatodynia -prostatolith -prostatomegaly -prostatometer -prostatomyomectomy -prostatorrhea -prostatorrhoea -prostatotomy -prostatovesical -prostatovesiculectomy -prostatovesiculitis -prostemmate -prostemmatic -prosternal -prosternate -prosternum -prostheca -prosthenic -prosthesis -prosthetic -prosthetically -prosthetics -prosthetist -prosthion -prosthionic -prosthodontia -prosthodontist -Prostigmin -prostitute -prostitutely -prostitution -prostitutor -prostomial -prostomiate -prostomium -prostrate -prostration -prostrative -prostrator -prostrike -prostyle -prostylos -prosubmission -prosubscription -prosubstantive -prosubstitution -prosuffrage -prosupervision -prosupport -prosurgical -prosurrender -prosy -prosyllogism -prosyndicalism -prosyndicalist -protactic -protactinium -protagon -protagonism -protagonist -Protagorean -Protagoreanism -protalbumose -protamine -protandric -protandrism -protandrous -protandrously -protandry -protanomal -protanomalous -protanope -protanopia -protanopic -protargentum -protargin -Protargol -protariff -protarsal -protarsus -protasis -protaspis -protatic -protatically -protax -protaxation -protaxial -protaxis -prote -Protea -protea -Proteaceae -proteaceous -protead -protean -proteanly -proteanwise -protease -protechnical -protect -protectant -protectible -protecting -protectingly -protectingness -protection -protectional -protectionate -protectionism -protectionist -protectionize -protectionship -protective -protectively -protectiveness -Protectograph -protector -protectoral -protectorate -protectorial -protectorian -protectorless -protectorship -protectory -protectress -protectrix -protege -protegee -protegulum -proteic -Proteida -Proteidae -proteide -proteidean -proteidogenous -proteiform -protein -proteinaceous -proteinase -proteinic -proteinochromogen -proteinous -proteinuria -Proteles -Protelidae -Protelytroptera -protelytropteran -protelytropteron -protelytropterous -protemperance -protempirical -protemporaneous -protend -protension -protensity -protensive -protensively -proteoclastic -proteogenous -proteolysis -proteolytic -proteopectic -proteopexic -proteopexis -proteopexy -proteosaurid -Proteosauridae -Proteosaurus -proteose -Proteosoma -proteosomal -proteosome -proteosuria -protephemeroid -Protephemeroidea -proterandrous -proterandrousness -proterandry -proteranthous -proterobase -proteroglyph -Proteroglypha -proteroglyphic -proteroglyphous -proterogynous -proterogyny -proterothesis -proterotype -Proterozoic -protervity -protest -protestable -protestancy -protestant -Protestantish -Protestantishly -protestantism -Protestantize -Protestantlike -Protestantly -protestation -protestator -protestatory -protester -protestingly -protestive -protestor -protetrarch -Proteus -protevangel -protevangelion -protevangelium -protext -prothalamia -prothalamion -prothalamium -prothallia -prothallial -prothallic -prothalline -prothallium -prothalloid -prothallus -protheatrical -protheca -prothesis -prothetic -prothetical -prothetically -prothonotarial -prothonotariat -prothonotary -prothonotaryship -prothoracic -prothorax -prothrift -prothrombin -prothrombogen -prothyl -prothysteron -protide -protiodide -protist -Protista -protistan -protistic -protistological -protistologist -protistology -protiston -Protium -protium -proto -protoactinium -protoalbumose -protoamphibian -protoanthropic -protoapostate -protoarchitect -Protoascales -Protoascomycetes -protobacco -Protobasidii -Protobasidiomycetes -protobasidiomycetous -protobasidium -protobishop -protoblast -protoblastic -protoblattoid -Protoblattoidea -Protobranchia -Protobranchiata -protobranchiate -protocalcium -protocanonical -Protocaris -protocaseose -protocatechualdehyde -protocatechuic -Protoceras -Protoceratidae -Protoceratops -protocercal -protocerebral -protocerebrum -protochemist -protochemistry -protochloride -protochlorophyll -Protochorda -Protochordata -protochordate -protochromium -protochronicler -protocitizen -protoclastic -protocneme -Protococcaceae -protococcaceous -protococcal -Protococcales -protococcoid -Protococcus -protocol -protocolar -protocolary -Protocoleoptera -protocoleopteran -protocoleopteron -protocoleopterous -protocolist -protocolization -protocolize -protoconch -protoconchal -protocone -protoconid -protoconule -protoconulid -protocopper -protocorm -protodeacon -protoderm -protodevil -Protodonata -protodonatan -protodonate -protodont -Protodonta -protodramatic -protodynastic -protoelastose -protoepiphyte -protoforaminifer -protoforester -protogaster -protogelatose -protogenal -protogenes -protogenesis -protogenetic -protogenic -protogenist -Protogeometric -protogine -protoglobulose -protogod -protogonous -protogospel -protograph -protogynous -protogyny -protohematoblast -Protohemiptera -protohemipteran -protohemipteron -protohemipterous -protoheresiarch -Protohippus -protohistorian -protohistoric -protohistory -protohomo -protohuman -Protohydra -protohydrogen -Protohymenoptera -protohymenopteran -protohymenopteron -protohymenopterous -protoiron -protoleration -protoleucocyte -protoleukocyte -protolithic -protoliturgic -protolog -protologist -protoloph -protoma -protomagister -protomagnate -protomagnesium -protomala -protomalal -protomalar -protomammal -protomammalian -protomanganese -protomartyr -Protomastigida -protome -protomeristem -protomerite -protomeritic -protometal -protometallic -protometaphrast -Protominobacter -Protomonadina -protomonostelic -protomorph -protomorphic -Protomycetales -protomyosinose -proton -protone -protonegroid -protonema -protonemal -protonematal -protonematoid -protoneme -Protonemertini -protonephridial -protonephridium -protonephros -protoneuron -protoneurone -protonic -protonickel -protonitrate -protonotater -protonym -protonymph -protonymphal -protopapas -protopappas -protoparent -protopathia -protopathic -protopathy -protopatriarchal -protopatrician -protopattern -protopectin -protopectinase -protopepsia -Protoperlaria -protoperlarian -protophilosophic -protophloem -protophyll -Protophyta -protophyte -protophytic -protopin -protopine -protoplasm -protoplasma -protoplasmal -protoplasmatic -protoplasmic -protoplast -protoplastic -protopod -protopodial -protopodite -protopoditic -protopoetic -protopope -protoporphyrin -protopragmatic -protopresbyter -protopresbytery -protoprism -protoproteose -protoprotestant -protopteran -Protopteridae -protopteridophyte -protopterous -Protopterus -protopyramid -protore -protorebel -protoreligious -protoreptilian -Protorohippus -protorosaur -Protorosauria -protorosaurian -Protorosauridae -protorosauroid -Protorosaurus -Protorthoptera -protorthopteran -protorthopteron -protorthopterous -protosalt -protosaurian -protoscientific -Protoselachii -protosilicate -protosilicon -protosinner -Protosiphon -Protosiphonaceae -protosiphonaceous -protosocial -protosolution -protospasm -Protosphargis -Protospondyli -protospore -Protostega -Protostegidae -protostele -protostelic -protostome -protostrontium -protosulphate -protosulphide -protosyntonose -prototaxites -prototheca -protothecal -prototheme -protothere -Prototheria -prototherian -prototitanium -Prototracheata -prototraitor -prototroch -prototrochal -prototrophic -prototypal -prototype -prototypic -prototypical -prototypically -prototypographer -prototyrant -protovanadium -protoveratrine -protovertebra -protovertebral -protovestiary -protovillain -protovum -protoxide -protoxylem -Protozoa -protozoacidal -protozoacide -protozoal -protozoan -protozoea -protozoean -protozoiasis -protozoic -protozoological -protozoologist -protozoology -protozoon -protozoonal -Protracheata -protracheate -protract -protracted -protractedly -protractedness -protracter -protractible -protractile -protractility -protraction -protractive -protractor -protrade -protradition -protraditional -protragedy -protragical -protragie -protransfer -protranslation -protransubstantiation -protravel -protreasurer -protreaty -Protremata -protreptic -protreptical -protriaene -protropical -protrudable -protrude -protrudent -protrusible -protrusile -protrusion -protrusive -protrusively -protrusiveness -protuberance -protuberancy -protuberant -protuberantial -protuberantly -protuberantness -protuberate -protuberosity -protuberous -Protura -proturan -protutor -protutory -protyl -protyle -Protylopus -protype -proudful -proudhearted -proudish -proudishly -proudling -proudly -proudness -prouniformity -prounion -prounionist -prouniversity -proustite -provability -provable -provableness -provably -provaccinist -provand -provant -provascular -prove -provect -provection -proved -proveditor -provedly -provedor -provedore -proven -provenance -Provencal -Provencalize -Provence -Provencial -provender -provenience -provenient -provenly -proventricular -proventricule -proventriculus -prover -proverb -proverbial -proverbialism -proverbialist -proverbialize -proverbially -proverbic -proverbiologist -proverbiology -proverbize -proverblike -provicar -provicariate -providable -providance -provide -provided -providence -provident -providential -providentialism -providentially -providently -providentness -provider -providing -providore -providoring -province -provincial -provincialate -provincialism -provincialist -provinciality -provincialization -provincialize -provincially -provincialship -provinciate -provinculum -provine -proving -provingly -provision -provisional -provisionality -provisionally -provisionalness -provisionary -provisioner -provisioneress -provisionless -provisionment -provisive -proviso -provisor -provisorily -provisorship -provisory -provitamin -provivisection -provivisectionist -provocant -provocation -provocational -provocative -provocatively -provocativeness -provocator -provocatory -provokable -provoke -provokee -provoker -provoking -provokingly -provokingness -provolunteering -provost -provostal -provostess -provostorial -provostry -provostship -prow -prowar -prowarden -prowaterpower -prowed -prowersite -prowess -prowessed -prowessful -prowl -prowler -prowling -prowlingly -proxenet -proxenete -proxenetism -proxenos -proxenus -proxeny -proxically -proximad -proximal -proximally -proximate -proximately -proximateness -proximation -proximity -proximo -proximobuccal -proximolabial -proximolingual -proxy -proxyship -proxysm -prozone -prozoning -prozygapophysis -prozymite -prude -prudelike -prudely -Prudence -prudence -prudent -prudential -prudentialism -prudentialist -prudentiality -prudentially -prudentialness -prudently -prudery -prudish -prudishly -prudishness -prudist -prudity -Prudy -Prue -pruh -pruinate -pruinescence -pruinose -pruinous -prulaurasin -prunable -prunableness -prunably -Prunaceae -prunase -prunasin -prune -prunell -Prunella -prunella -prunelle -Prunellidae -prunello -pruner -prunetin -prunetol -pruniferous -pruniform -pruning -prunitrin -prunt -prunted -Prunus -prurience -pruriency -prurient -pruriently -pruriginous -prurigo -pruriousness -pruritic -pruritus -prusiano -Prussian -Prussianism -Prussianization -Prussianize -Prussianizer -prussiate -prussic -Prussification -Prussify -prut -prutah -pry -pryer -prying -pryingly -pryingness -pryler -pryproof -pryse -prytaneum -prytanis -prytanize -prytany -psalis -psalm -psalmic -psalmist -psalmister -psalmistry -psalmless -psalmodial -psalmodic -psalmodical -psalmodist -psalmodize -psalmody -psalmograph -psalmographer -psalmography -psalmy -psaloid -psalter -psalterial -psalterian -psalterion -psalterist -psalterium -psaltery -psaltes -psaltress -psammite -psammitic -psammocarcinoma -psammocharid -Psammocharidae -psammogenous -psammolithic -psammologist -psammology -psammoma -psammophile -psammophilous -Psammophis -psammophyte -psammophytic -psammosarcoma -psammotherapy -psammous -Psaronius -pschent -Psedera -Pselaphidae -Pselaphus -psellism -psellismus -psephism -psephisma -psephite -psephitic -psephomancy -Psephurus -Psetta -pseudaconine -pseudaconitine -pseudacusis -pseudalveolar -pseudambulacral -pseudambulacrum -pseudamoeboid -pseudamphora -pseudandry -pseudangina -pseudankylosis -pseudaphia -pseudaposematic -pseudaposporous -pseudapospory -pseudapostle -pseudarachnidan -pseudarthrosis -pseudataxic -pseudatoll -pseudaxine -pseudaxis -Pseudechis -pseudelephant -pseudelminth -pseudelytron -pseudembryo -pseudembryonic -pseudencephalic -pseudencephalus -pseudepigraph -pseudepigrapha -pseudepigraphal -pseudepigraphic -pseudepigraphical -pseudepigraphous -pseudepigraphy -pseudepiploic -pseudepiploon -pseudepiscopacy -pseudepiscopy -pseudepisematic -pseudesthesia -pseudhalteres -pseudhemal -pseudimaginal -pseudimago -pseudisodomum -pseudo -pseudoacaccia -pseudoacademic -pseudoacademical -pseudoaccidental -pseudoacid -pseudoaconitine -pseudoacromegaly -pseudoadiabatic -pseudoaesthetic -pseudoaffectionate -pseudoalkaloid -pseudoalum -pseudoalveolar -pseudoamateurish -pseudoamatory -pseudoanaphylactic -pseudoanaphylaxis -pseudoanatomic -pseudoanatomical -pseudoancestral -pseudoanemia -pseudoanemic -pseudoangelic -pseudoangina -pseudoankylosis -pseudoanthorine -pseudoanthropoid -pseudoanthropological -pseudoanthropology -pseudoantique -pseudoapologetic -pseudoapoplectic -pseudoapoplexy -pseudoappendicitis -pseudoaquatic -pseudoarchaic -pseudoarchaism -pseudoarchaist -pseudoaristocratic -pseudoarthrosis -pseudoarticulation -pseudoartistic -pseudoascetic -pseudoastringent -pseudoasymmetrical -pseudoasymmetry -pseudoataxia -pseudobacterium -pseudobasidium -pseudobenevolent -pseudobenthonic -pseudobenthos -pseudobinary -pseudobiological -pseudoblepsia -pseudoblepsis -pseudobrachial -pseudobrachium -pseudobranch -pseudobranchia -pseudobranchial -pseudobranchiate -Pseudobranchus -pseudobrookite -pseudobrotherly -pseudobulb -pseudobulbar -pseudobulbil -pseudobulbous -pseudobutylene -pseudocandid -pseudocapitulum -pseudocarbamide -pseudocarcinoid -pseudocarp -pseudocarpous -pseudocartilaginous -pseudocele -pseudocelian -pseudocelic -pseudocellus -pseudocentric -pseudocentrous -pseudocentrum -Pseudoceratites -pseudoceratitic -pseudocercaria -pseudoceryl -pseudocharitable -pseudochemical -pseudochina -pseudochromesthesia -pseudochromia -pseudochromosome -pseudochronism -pseudochronologist -pseudochrysalis -pseudochrysolite -pseudochylous -pseudocirrhosis -pseudoclassic -pseudoclassical -pseudoclassicism -pseudoclerical -Pseudococcinae -Pseudococcus -pseudococtate -pseudocollegiate -pseudocolumella -pseudocolumellar -pseudocommissure -pseudocommisural -pseudocompetitive -pseudoconcha -pseudoconclude -pseudocone -pseudoconglomerate -pseudoconglomeration -pseudoconhydrine -pseudoconjugation -pseudoconservative -pseudocorneous -pseudocortex -pseudocosta -pseudocotyledon -pseudocotyledonal -pseudocritical -pseudocroup -pseudocrystalline -pseudocubic -pseudocultivated -pseudocultural -pseudocumene -pseudocumenyl -pseudocumidine -pseudocumyl -pseudocyclosis -pseudocyesis -pseudocyst -pseudodeltidium -pseudodementia -pseudodemocratic -pseudoderm -pseudodermic -pseudodiagnosis -pseudodiastolic -pseudodiphtheria -pseudodiphtheritic -pseudodipteral -pseudodipterally -pseudodipteros -pseudodont -pseudodox -pseudodoxal -pseudodoxy -pseudodramatic -pseudodysentery -pseudoedema -pseudoelectoral -pseudoembryo -pseudoembryonic -pseudoemotional -pseudoencephalitic -pseudoenthusiastic -pseudoephedrine -pseudoepiscopal -pseudoequalitarian -pseudoerotic -pseudoeroticism -pseudoerysipelas -pseudoerysipelatous -pseudoerythrin -pseudoethical -pseudoetymological -pseudoeugenics -pseudoevangelical -pseudofamous -pseudofarcy -pseudofeminine -pseudofever -pseudofeverish -pseudofilaria -pseudofilarian -pseudofinal -pseudofluctuation -pseudofluorescence -pseudofoliaceous -pseudoform -pseudofossil -pseudogalena -pseudoganglion -pseudogaseous -pseudogaster -pseudogastrula -pseudogeneral -pseudogeneric -pseudogenerous -pseudogenteel -pseudogenus -pseudogeometry -pseudogermanic -pseudogeusia -pseudogeustia -pseudoglanders -pseudoglioma -pseudoglobulin -pseudoglottis -pseudograph -pseudographeme -pseudographer -pseudographia -pseudographize -pseudography -pseudograsserie -Pseudogryphus -pseudogyne -pseudogynous -pseudogyny -pseudogyrate -pseudohallucination -pseudohallucinatory -pseudohalogen -pseudohemal -pseudohermaphrodite -pseudohermaphroditic -pseudohermaphroditism -pseudoheroic -pseudohexagonal -pseudohistoric -pseudohistorical -pseudoholoptic -pseudohuman -pseudohydrophobia -pseudohyoscyamine -pseudohypertrophic -pseudohypertrophy -pseudoidentical -pseudoimpartial -pseudoindependent -pseudoinfluenza -pseudoinsane -pseudoinsoluble -pseudoisatin -pseudoism -pseudoisomer -pseudoisomeric -pseudoisomerism -pseudoisotropy -pseudojervine -pseudolabial -pseudolabium -pseudolalia -Pseudolamellibranchia -Pseudolamellibranchiata -pseudolamellibranchiate -pseudolaminated -Pseudolarix -pseudolateral -pseudolatry -pseudolegal -pseudolegendary -pseudoleucite -pseudoleucocyte -pseudoleukemia -pseudoleukemic -pseudoliberal -pseudolichen -pseudolinguistic -pseudoliterary -pseudolobar -pseudological -pseudologically -pseudologist -pseudologue -pseudology -pseudolunule -pseudomalachite -pseudomalaria -pseudomancy -pseudomania -pseudomaniac -pseudomantic -pseudomantist -pseudomasculine -pseudomedical -pseudomedieval -pseudomelanosis -pseudomembrane -pseudomembranous -pseudomeningitis -pseudomenstruation -pseudomer -pseudomeric -pseudomerism -pseudomery -pseudometallic -pseudometameric -pseudometamerism -pseudomica -pseudomilitarist -pseudomilitaristic -pseudomilitary -pseudoministerial -pseudomiraculous -pseudomitotic -pseudomnesia -pseudomodern -pseudomodest -Pseudomonas -pseudomonastic -pseudomonoclinic -pseudomonocotyledonous -pseudomonocyclic -pseudomonotropy -pseudomoral -pseudomorph -pseudomorphia -pseudomorphic -pseudomorphine -pseudomorphism -pseudomorphose -pseudomorphosis -pseudomorphous -pseudomorula -pseudomorular -pseudomucin -pseudomucoid -pseudomultilocular -pseudomultiseptate -pseudomythical -pseudonarcotic -pseudonational -pseudonavicella -pseudonavicellar -pseudonavicula -pseudonavicular -pseudoneuropter -Pseudoneuroptera -pseudoneuropteran -pseudoneuropterous -pseudonitrole -pseudonitrosite -pseudonuclein -pseudonucleolus -pseudonychium -pseudonym -pseudonymal -pseudonymic -pseudonymity -pseudonymous -pseudonymously -pseudonymousness -pseudonymuncle -pseudonymuncule -pseudopapaverine -pseudoparalysis -pseudoparalytic -pseudoparaplegia -pseudoparasitic -pseudoparasitism -pseudoparenchyma -pseudoparenchymatous -pseudoparenchyme -pseudoparesis -pseudoparthenogenesis -pseudopatriotic -pseudopediform -pseudopelletierine -pseudopercular -pseudoperculate -pseudoperculum -pseudoperianth -pseudoperidium -pseudoperiodic -pseudoperipteral -pseudopermanent -pseudoperoxide -pseudoperspective -Pseudopeziza -pseudophallic -pseudophellandrene -pseudophenanthrene -pseudophenanthroline -pseudophenocryst -pseudophilanthropic -pseudophilosophical -Pseudophoenix -pseudopionnotes -pseudopious -pseudoplasm -pseudoplasma -pseudoplasmodium -pseudopneumonia -pseudopod -pseudopodal -pseudopodia -pseudopodial -pseudopodian -pseudopodiospore -pseudopodium -pseudopoetic -pseudopoetical -pseudopolitic -pseudopolitical -pseudopopular -pseudopore -pseudoporphyritic -pseudopregnancy -pseudopregnant -pseudopriestly -pseudoprimitive -pseudoprimitivism -pseudoprincely -pseudoproboscis -pseudoprofessional -pseudoprofessorial -pseudoprophetic -pseudoprophetical -pseudoprosperous -pseudopsia -pseudopsychological -pseudoptics -pseudoptosis -pseudopupa -pseudopupal -pseudopurpurin -pseudopyriform -pseudoquinol -pseudorabies -pseudoracemic -pseudoracemism -pseudoramose -pseudoramulus -pseudorealistic -pseudoreduction -pseudoreformed -pseudoregal -pseudoreligious -pseudoreminiscence -pseudorganic -pseudorheumatic -pseudorhombohedral -pseudoromantic -pseudorunic -pseudosacred -pseudosacrilegious -pseudosalt -pseudosatirical -pseudoscarlatina -Pseudoscarus -pseudoscholarly -pseudoscholastic -pseudoscientific -Pseudoscines -pseudoscinine -pseudosclerosis -pseudoscope -pseudoscopic -pseudoscopically -pseudoscopy -pseudoscorpion -Pseudoscorpiones -Pseudoscorpionida -pseudoscutum -pseudosematic -pseudosensational -pseudoseptate -pseudoservile -pseudosessile -pseudosiphonal -pseudosiphuncal -pseudoskeletal -pseudoskeleton -pseudoskink -pseudosmia -pseudosocial -pseudosocialistic -pseudosolution -pseudosoph -pseudosopher -pseudosophical -pseudosophist -pseudosophy -pseudospectral -pseudosperm -pseudospermic -pseudospermium -pseudospermous -pseudosphere -pseudospherical -pseudospiracle -pseudospiritual -pseudosporangium -pseudospore -pseudosquamate -pseudostalactite -pseudostalactitical -pseudostalagmite -pseudostalagmitical -pseudostereoscope -pseudostereoscopic -pseudostereoscopism -pseudostigma -pseudostigmatic -pseudostoma -pseudostomatous -pseudostomous -pseudostratum -pseudosubtle -Pseudosuchia -pseudosuchian -pseudosweating -pseudosyllogism -pseudosymmetric -pseudosymmetrical -pseudosymmetry -pseudosymptomatic -pseudosyphilis -pseudosyphilitic -pseudotabes -pseudotachylite -pseudotetanus -pseudotetragonal -Pseudotetramera -pseudotetrameral -pseudotetramerous -pseudotrachea -pseudotracheal -pseudotribal -pseudotributary -Pseudotrimera -pseudotrimeral -pseudotrimerous -pseudotropine -Pseudotsuga -pseudotubercular -pseudotuberculosis -pseudotuberculous -pseudoturbinal -pseudotyphoid -pseudoval -pseudovarian -pseudovary -pseudovelar -pseudovelum -pseudoventricle -pseudoviaduct -pseudoviperine -pseudoviscosity -pseudoviscous -pseudovolcanic -pseudovolcano -pseudovum -pseudowhorl -pseudoxanthine -pseudoyohimbine -pseudozealot -pseudozoea -pseudozoogloeal -psha -Pshav -pshaw -psi -Psidium -psilanthropic -psilanthropism -psilanthropist -psilanthropy -psiloceran -Psiloceras -psiloceratan -psiloceratid -Psiloceratidae -psiloi -psilology -psilomelane -psilomelanic -Psilophytales -psilophyte -Psilophyton -psilosis -psilosopher -psilosophy -Psilotaceae -psilotaceous -psilothrum -psilotic -Psilotum -psithurism -Psithyrus -psittaceous -psittaceously -Psittaci -Psittacidae -Psittaciformes -Psittacinae -psittacine -psittacinite -psittacism -psittacistic -Psittacomorphae -psittacomorphic -psittacosis -Psittacus -psoadic -psoas -psoatic -psocid -Psocidae -psocine -psoitis -psomophagic -psomophagist -psomophagy -psora -Psoralea -psoriasic -psoriasiform -psoriasis -psoriatic -psoriatiform -psoric -psoroid -Psorophora -psorophthalmia -psorophthalmic -Psoroptes -psoroptic -psorosis -psorosperm -psorospermial -psorospermiasis -psorospermic -psorospermiform -psorospermosis -psorous -pssimistical -pst -psych -psychagogic -psychagogos -psychagogue -psychagogy -psychal -psychalgia -psychanalysis -psychanalysist -psychanalytic -psychasthenia -psychasthenic -Psyche -psyche -Psychean -psycheometry -psychesthesia -psychesthetic -psychiasis -psychiater -psychiatria -psychiatric -psychiatrical -psychiatrically -psychiatrist -psychiatrize -psychiatry -psychic -psychical -psychically -Psychichthys -psychicism -psychicist -psychics -psychid -Psychidae -psychism -psychist -psychoanalysis -psychoanalyst -psychoanalytic -psychoanalytical -psychoanalytically -psychoanalyze -psychoanalyzer -psychoautomatic -psychobiochemistry -psychobiologic -psychobiological -psychobiology -psychobiotic -psychocatharsis -psychoclinic -psychoclinical -psychoclinicist -Psychoda -psychodiagnostics -Psychodidae -psychodispositional -psychodrama -psychodynamic -psychodynamics -psychoeducational -psychoepilepsy -psychoethical -psychofugal -psychogalvanic -psychogalvanometer -psychogenesis -psychogenetic -psychogenetical -psychogenetically -psychogenetics -psychogenic -psychogeny -psychognosis -psychognostic -psychognosy -psychogonic -psychogonical -psychogony -psychogram -psychograph -psychographer -psychographic -psychographist -psychography -psychoid -psychokinesia -psychokinesis -psychokinetic -psychokyme -psycholepsy -psycholeptic -psychologer -psychologian -psychologic -psychological -psychologically -psychologics -psychologism -psychologist -psychologize -psychologue -psychology -psychomachy -psychomancy -psychomantic -psychometer -psychometric -psychometrical -psychometrically -psychometrician -psychometrics -psychometrist -psychometrize -psychometry -psychomonism -psychomoral -psychomorphic -psychomorphism -psychomotility -psychomotor -psychon -psychoneural -psychoneurological -psychoneurosis -psychoneurotic -psychonomic -psychonomics -psychonomy -psychony -psychoorganic -psychopannychian -psychopannychism -psychopannychist -psychopannychistic -psychopannychy -psychopanychite -psychopath -psychopathia -psychopathic -psychopathist -psychopathologic -psychopathological -psychopathologist -psychopathy -psychopetal -psychophobia -psychophysic -psychophysical -psychophysically -psychophysicist -psychophysics -psychophysiologic -psychophysiological -psychophysiologically -psychophysiologist -psychophysiology -psychoplasm -psychopomp -psychopompos -psychorealism -psychorealist -psychorealistic -psychoreflex -psychorhythm -psychorhythmia -psychorhythmic -psychorhythmical -psychorhythmically -psychorrhagic -psychorrhagy -psychosarcous -psychosensorial -psychosensory -psychoses -psychosexual -psychosexuality -psychosexually -psychosis -psychosocial -psychosomatic -psychosomatics -psychosome -psychosophy -psychostasy -psychostatic -psychostatical -psychostatically -psychostatics -psychosurgeon -psychosurgery -psychosynthesis -psychosynthetic -psychotaxis -psychotechnical -psychotechnician -psychotechnics -psychotechnological -psychotechnology -psychotheism -psychotherapeutic -psychotherapeutical -psychotherapeutics -psychotherapeutist -psychotherapist -psychotherapy -psychotic -Psychotria -psychotrine -psychovital -Psychozoic -psychroesthesia -psychrograph -psychrometer -psychrometric -psychrometrical -psychrometry -psychrophile -psychrophilic -psychrophobia -psychrophore -psychrophyte -psychurgy -psykter -Psylla -psylla -psyllid -Psyllidae -psyllium -ptarmic -Ptarmica -ptarmical -ptarmigan -Ptelea -Ptenoglossa -ptenoglossate -Pteranodon -pteranodont -Pteranodontidae -pteraspid -Pteraspidae -Pteraspis -ptereal -pterergate -Pterian -pteric -Pterichthyodes -Pterichthys -pterideous -pteridium -pteridography -pteridoid -pteridological -pteridologist -pteridology -pteridophilism -pteridophilist -pteridophilistic -Pteridophyta -pteridophyte -pteridophytic -pteridophytous -pteridosperm -Pteridospermae -Pteridospermaphyta -pteridospermaphytic -pteridospermous -pterion -Pteris -Pterobranchia -pterobranchiate -pterocarpous -Pterocarpus -Pterocarya -Pterocaulon -Pterocera -Pteroceras -Pterocles -Pterocletes -Pteroclidae -Pteroclomorphae -pteroclomorphic -pterodactyl -Pterodactyli -pterodactylian -pterodactylic -pterodactylid -Pterodactylidae -pterodactyloid -pterodactylous -Pterodactylus -pterographer -pterographic -pterographical -pterography -pteroid -pteroma -pteromalid -Pteromalidae -Pteromys -pteropaedes -pteropaedic -pteropegal -pteropegous -pteropegum -pterophorid -Pterophoridae -Pterophorus -Pterophryne -pteropid -Pteropidae -pteropine -pteropod -Pteropoda -pteropodal -pteropodan -pteropodial -Pteropodidae -pteropodium -pteropodous -Pteropsida -Pteropus -pterosaur -Pterosauri -Pterosauria -pterosaurian -pterospermous -Pterospora -Pterostemon -Pterostemonaceae -pterostigma -pterostigmal -pterostigmatic -pterostigmatical -pterotheca -pterothorax -pterotic -pteroylglutamic -pterygial -pterygiophore -pterygium -pterygobranchiate -pterygode -pterygodum -Pterygogenea -pterygoid -pterygoidal -pterygoidean -pterygomalar -pterygomandibular -pterygomaxillary -pterygopalatal -pterygopalatine -pterygopharyngeal -pterygopharyngean -pterygophore -pterygopodium -pterygoquadrate -pterygosphenoid -pterygospinous -pterygostaphyline -Pterygota -pterygote -pterygotous -pterygotrabecular -Pterygotus -pteryla -pterylographic -pterylographical -pterylography -pterylological -pterylology -pterylosis -Ptilichthyidae -Ptiliidae -Ptilimnium -ptilinal -ptilinum -Ptilocercus -Ptilonorhynchidae -Ptilonorhynchinae -ptilopaedes -ptilopaedic -ptilosis -Ptilota -ptinid -Ptinidae -ptinoid -Ptinus -ptisan -ptochocracy -ptochogony -ptochology -Ptolemaean -Ptolemaian -Ptolemaic -Ptolemaical -Ptolemaism -Ptolemaist -Ptolemean -Ptolemy -ptomain -ptomaine -ptomainic -ptomatropine -ptosis -ptotic -ptyalagogic -ptyalagogue -ptyalectasis -ptyalin -ptyalism -ptyalize -ptyalocele -ptyalogenic -ptyalolith -ptyalolithiasis -ptyalorrhea -Ptychoparia -ptychoparid -ptychopariid -ptychopterygial -ptychopterygium -Ptychosperma -ptysmagogue -ptyxis -pu -pua -puan -pub -pubal -pubble -puberal -pubertal -pubertic -puberty -puberulent -puberulous -pubes -pubescence -pubescency -pubescent -pubian -pubic -pubigerous -pubiotomy -pubis -public -Publican -publican -publicanism -publication -publichearted -publicheartedness -publicism -publicist -publicity -publicize -publicly -publicness -Publilian -publish -publishable -publisher -publisheress -publishership -publishment -pubococcygeal -pubofemoral -puboiliac -puboischiac -puboischial -puboischiatic -puboprostatic -puborectalis -pubotibial -pubourethral -pubovesical -Puccinia -Pucciniaceae -pucciniaceous -puccinoid -puccoon -puce -pucelage -pucellas -pucelle -Puchanahua -pucherite -puchero -puck -pucka -puckball -pucker -puckerbush -puckerel -puckerer -puckermouth -puckery -puckfist -puckish -puckishly -puckishness -puckle -pucklike -puckling -puckneedle -puckrel -puckster -pud -puddee -puddening -pudder -pudding -puddingberry -puddinghead -puddingheaded -puddinghouse -puddinglike -puddingwife -puddingy -puddle -puddled -puddlelike -puddler -puddling -puddly -puddock -puddy -pudency -pudenda -pudendal -pudendous -pudendum -pudent -pudge -pudgily -pudginess -pudgy -pudiano -pudibund -pudibundity -pudic -pudical -pudicitia -pudicity -pudsey -pudsy -Pudu -pudu -pueblito -Pueblo -pueblo -Puebloan -puebloization -puebloize -Puelche -Puelchean -Pueraria -puerer -puericulture -puerile -puerilely -puerileness -puerilism -puerility -puerman -puerpera -puerperal -puerperalism -puerperant -puerperium -puerperous -puerpery -puff -puffback -puffball -puffbird -puffed -puffer -puffery -puffily -puffin -puffiness -puffinet -puffing -puffingly -Puffinus -pufflet -puffwig -puffy -pug -pugged -pugger -puggi -pugginess -pugging -puggish -puggle -puggree -puggy -pugh -pugil -pugilant -pugilism -pugilist -pugilistic -pugilistical -pugilistically -puglianite -pugman -pugmill -pugmiller -pugnacious -pugnaciously -pugnaciousness -pugnacity -Puinavi -Puinavian -Puinavis -puisne -puissance -puissant -puissantly -puissantness -puist -puistie -puja -Pujunan -puka -pukatea -pukateine -puke -pukeko -puker -pukeweed -Pukhtun -pukish -pukishness -pukras -puku -puky -pul -pulahan -pulahanism -pulasan -pulaskite -Pulaya -Pulayan -pulchrify -pulchritude -pulchritudinous -pule -pulegol -pulegone -puler -Pulex -pulghere -puli -Pulian -pulicarious -pulicat -pulicene -pulicid -Pulicidae -pulicidal -pulicide -pulicine -pulicoid -pulicose -pulicosity -pulicous -puling -pulingly -pulish -pulk -pulka -pull -pullable -pullback -pullboat -pulldevil -pulldoo -pulldown -pulldrive -pullen -puller -pullery -pullet -pulley -pulleyless -pulli -Pullman -Pullmanize -pullorum -pullulant -pullulate -pullulation -pullus -pulmobranchia -pulmobranchial -pulmobranchiate -pulmocardiac -pulmocutaneous -pulmogastric -pulmometer -pulmometry -pulmonal -pulmonar -Pulmonaria -pulmonarian -pulmonary -Pulmonata -pulmonate -pulmonated -pulmonectomy -pulmonic -pulmonifer -Pulmonifera -pulmoniferous -pulmonitis -Pulmotor -pulmotracheal -Pulmotrachearia -pulmotracheary -pulmotracheate -pulp -pulpaceous -pulpal -pulpalgia -pulpamenta -pulpboard -pulpectomy -pulpefaction -pulper -pulpifier -pulpify -pulpily -pulpiness -pulpit -pulpital -pulpitarian -pulpiteer -pulpiter -pulpitful -pulpitic -pulpitical -pulpitically -pulpitis -pulpitish -pulpitism -pulpitize -pulpitless -pulpitly -pulpitolatry -pulpitry -pulpless -pulplike -pulpotomy -pulpous -pulpousness -pulpstone -pulpwood -pulpy -pulque -pulsant -pulsatance -pulsate -pulsatile -pulsatility -Pulsatilla -pulsation -pulsational -pulsative -pulsatively -pulsator -pulsatory -pulse -pulseless -pulselessly -pulselessness -pulselike -pulsellum -pulsidge -pulsific -pulsimeter -pulsion -pulsive -pulsojet -pulsometer -pultaceous -pulton -pulu -pulveraceous -pulverant -pulverate -pulveration -pulvereous -pulverin -pulverizable -pulverizate -pulverization -pulverizator -pulverize -pulverizer -pulverous -pulverulence -pulverulent -pulverulently -pulvic -pulvil -pulvillar -pulvilliform -pulvillus -pulvinar -Pulvinaria -pulvinarian -pulvinate -pulvinated -pulvinately -pulvination -pulvinic -pulviniform -pulvino -pulvinule -pulvinulus -pulvinus -pulviplume -pulwar -puly -puma -Pume -pumicate -pumice -pumiced -pumiceous -pumicer -pumiciform -pumicose -pummel -pummice -pump -pumpable -pumpage -pumpellyite -pumper -pumpernickel -pumpkin -pumpkinification -pumpkinify -pumpkinish -pumpkinity -pumple -pumpless -pumplike -pumpman -pumpsman -pumpwright -pun -puna -punaise -punalua -punaluan -Punan -punatoo -punch -punchable -punchboard -puncheon -puncher -punchinello -punching -punchless -punchlike -punchproof -punchy -punct -punctal -punctate -punctated -punctation -punctator -puncticular -puncticulate -puncticulose -punctiform -punctiliar -punctilio -punctiliomonger -punctiliosity -punctilious -punctiliously -punctiliousness -punctist -punctographic -punctual -punctualist -punctuality -punctually -punctualness -punctuate -punctuation -punctuational -punctuationist -punctuative -punctuator -punctuist -punctulate -punctulated -punctulation -punctule -punctulum -punctum -puncturation -puncture -punctured -punctureless -punctureproof -puncturer -pundigrion -pundit -pundita -punditic -punditically -punditry -pundonor -pundum -puneca -pung -punga -pungapung -pungar -pungence -pungency -pungent -pungently -punger -pungey -pungi -pungle -pungled -Punic -Punica -Punicaceae -punicaceous -puniceous -punicial -punicin -punicine -punily -puniness -punish -punishability -punishable -punishableness -punishably -punisher -punishment -punishmentproof -punition -punitional -punitionally -punitive -punitively -punitiveness -punitory -Punjabi -punjum -punk -punkah -punketto -punkie -punkwood -punky -punless -punlet -punnable -punnage -punner -punnet -punnic -punnical -punnigram -punningly -punnology -Puno -punproof -punster -punstress -punt -punta -puntabout -puntal -puntel -punter -punti -puntil -puntist -Puntlatsh -punto -puntout -puntsman -punty -puny -punyish -punyism -pup -pupa -pupahood -pupal -puparial -puparium -pupate -pupation -pupelo -Pupidae -pupiferous -pupiform -pupigenous -pupigerous -pupil -pupilability -pupilage -pupilar -pupilate -pupildom -pupiled -pupilize -pupillarity -pupillary -pupilless -Pupillidae -pupillometer -pupillometry -pupilloscope -pupilloscoptic -pupilloscopy -Pupipara -pupiparous -Pupivora -pupivore -pupivorous -pupoid -puppet -puppetdom -puppeteer -puppethood -puppetish -puppetism -puppetize -puppetlike -puppetly -puppetman -puppetmaster -puppetry -puppify -puppily -Puppis -puppy -puppydom -puppyfish -puppyfoot -puppyhood -puppyish -puppyism -puppylike -puppysnatch -pupulo -Pupuluca -pupunha -Puquina -Puquinan -pur -purana -puranic -puraque -Purasati -Purbeck -Purbeckian -purblind -purblindly -purblindness -purchasability -purchasable -purchase -purchaser -purchasery -purdah -purdy -pure -pureblood -purebred -pured -puree -purehearted -purely -pureness -purer -purfle -purfled -purfler -purfling -purfly -purga -purgation -purgative -purgatively -purgatorial -purgatorian -purgatory -purge -purgeable -purger -purgery -purging -purificant -purification -purificative -purificator -purificatory -purifier -puriform -purify -purine -puriri -purism -purist -puristic -puristical -Puritan -puritandom -Puritaness -puritanic -puritanical -puritanically -puritanicalness -Puritanism -puritanism -Puritanize -Puritanizer -puritanlike -Puritanly -puritano -purity -Purkinje -Purkinjean -purl -purler -purlhouse -purlicue -purlieu -purlieuman -purlin -purlman -purloin -purloiner -purohepatitis -purolymph -puromucous -purpart -purparty -purple -purplelip -purplely -purpleness -purplescent -purplewood -purplewort -purplish -purplishness -purply -purport -purportless -purpose -purposedly -purposeful -purposefully -purposefulness -purposeless -purposelessly -purposelessness -purposelike -purposely -purposer -purposive -purposively -purposiveness -purposivism -purposivist -purposivistic -purpresture -purpura -purpuraceous -purpurate -purpure -purpureal -purpurean -purpureous -purpurescent -purpuric -purpuriferous -purpuriform -purpurigenous -purpurin -purpurine -purpuriparous -purpurite -purpurize -purpurogallin -purpurogenous -purpuroid -purpuroxanthin -purr -purre -purree -purreic -purrel -purrer -purring -purringly -purrone -purry -purse -pursed -purseful -purseless -purselike -purser -pursership -Purshia -pursily -pursiness -purslane -purslet -pursley -pursuable -pursual -pursuance -pursuant -pursuantly -pursue -pursuer -pursuit -pursuitmeter -pursuivant -pursy -purtenance -Puru -Puruha -purulence -purulency -purulent -purulently -puruloid -Purupuru -purusha -purushartha -purvey -purveyable -purveyal -purveyance -purveyancer -purveyor -purveyoress -purview -purvoe -purwannah -pus -Puschkinia -Puseyism -Puseyistical -Puseyite -push -pushball -pushcart -pusher -pushful -pushfully -pushfulness -pushing -pushingly -pushingness -pushmobile -pushover -pushpin -Pushtu -pushwainling -pusillanimity -pusillanimous -pusillanimously -pusillanimousness -puss -pusscat -pussley -pusslike -pussy -pussycat -pussyfoot -pussyfooted -pussyfooter -pussyfooting -pussyfootism -pussytoe -pustulant -pustular -pustulate -pustulated -pustulation -pustulatous -pustule -pustuled -pustulelike -pustuliform -pustulose -pustulous -put -putage -putamen -putaminous -putanism -putation -putationary -putative -putatively -putback -putchen -putcher -puteal -putelee -puther -puthery -putid -putidly -putidness -putlog -putois -Putorius -putredinal -putredinous -putrefacient -putrefactible -putrefaction -putrefactive -putrefactiveness -putrefiable -putrefier -putrefy -putresce -putrescence -putrescency -putrescent -putrescibility -putrescible -putrescine -putricide -putrid -putridity -putridly -putridness -putrifacted -putriform -putrilage -putrilaginous -putrilaginously -putschism -putschist -putt -puttee -putter -putterer -putteringly -puttier -puttock -putty -puttyblower -puttyhead -puttyhearted -puttylike -puttyroot -puttywork -puture -puxy -Puya -Puyallup -puzzle -puzzleation -puzzled -puzzledly -puzzledness -puzzledom -puzzlehead -puzzleheaded -puzzleheadedly -puzzleheadedness -puzzleman -puzzlement -puzzlepate -puzzlepated -puzzlepatedness -puzzler -puzzling -puzzlingly -puzzlingness -pya -pyal -pyarthrosis -pyche -Pycnanthemum -pycnia -pycnial -pycnid -pycnidia -pycnidial -pycnidiophore -pycnidiospore -pycnidium -pycniospore -pycnite -pycnium -Pycnocoma -pycnoconidium -pycnodont -Pycnodonti -Pycnodontidae -pycnodontoid -Pycnodus -pycnogonid -Pycnogonida -pycnogonidium -pycnogonoid -pycnometer -pycnometochia -pycnometochic -pycnomorphic -pycnomorphous -Pycnonotidae -Pycnonotinae -pycnonotine -Pycnonotus -pycnosis -pycnospore -pycnosporic -pycnostyle -pycnotic -pyelectasis -pyelic -pyelitic -pyelitis -pyelocystitis -pyelogram -pyelograph -pyelographic -pyelography -pyelolithotomy -pyelometry -pyelonephritic -pyelonephritis -pyelonephrosis -pyeloplasty -pyeloscopy -pyelotomy -pyeloureterogram -pyemesis -pyemia -pyemic -pygal -pygalgia -pygarg -pygargus -pygidial -pygidid -Pygididae -Pygidium -pygidium -pygmaean -Pygmalion -pygmoid -Pygmy -pygmy -pygmydom -pygmyhood -pygmyish -pygmyism -pygmyship -pygmyweed -Pygobranchia -Pygobranchiata -pygobranchiate -pygofer -pygopagus -pygopod -Pygopodes -Pygopodidae -pygopodine -pygopodous -Pygopus -pygostyle -pygostyled -pygostylous -pyic -pyin -pyjama -pyjamaed -pyke -pyknatom -pyknic -pyknotic -pyla -Pylades -pylagore -pylangial -pylangium -pylar -pylephlebitic -pylephlebitis -pylethrombophlebitis -pylethrombosis -pylic -pylon -pyloralgia -pylorectomy -pyloric -pyloristenosis -pyloritis -pylorocleisis -pylorodilator -pylorogastrectomy -pyloroplasty -pyloroptosis -pyloroschesis -pyloroscirrhus -pyloroscopy -pylorospasm -pylorostenosis -pylorostomy -pylorus -pyobacillosis -pyocele -pyoctanin -pyocyanase -pyocyanin -pyocyst -pyocyte -pyodermatitis -pyodermatosis -pyodermia -pyodermic -pyogenesis -pyogenetic -pyogenic -pyogenin -pyogenous -pyohemothorax -pyoid -pyolabyrinthitis -pyolymph -pyometra -pyometritis -pyonephritis -pyonephrosis -pyonephrotic -pyopericarditis -pyopericardium -pyoperitoneum -pyoperitonitis -pyophagia -pyophthalmia -pyophylactic -pyoplania -pyopneumocholecystitis -pyopneumocyst -pyopneumopericardium -pyopneumoperitoneum -pyopneumoperitonitis -pyopneumothorax -pyopoiesis -pyopoietic -pyoptysis -pyorrhea -pyorrheal -pyorrheic -pyosalpingitis -pyosalpinx -pyosepticemia -pyosepticemic -pyosis -pyospermia -pyotherapy -pyothorax -pyotoxinemia -pyoureter -pyovesiculosis -pyoxanthose -pyr -pyracanth -Pyracantha -Pyraceae -pyracene -pyral -Pyrales -pyralid -Pyralidae -pyralidan -pyralidid -Pyralididae -pyralidiform -Pyralidoidea -pyralis -pyraloid -Pyrameis -pyramid -pyramidaire -pyramidal -pyramidale -pyramidalis -Pyramidalism -Pyramidalist -pyramidally -pyramidate -Pyramidella -pyramidellid -Pyramidellidae -pyramider -pyramides -pyramidia -pyramidic -pyramidical -pyramidically -pyramidicalness -pyramidion -Pyramidist -pyramidize -pyramidlike -pyramidoattenuate -pyramidoidal -pyramidologist -pyramidoprismatic -pyramidwise -pyramoidal -pyran -pyranometer -pyranyl -pyrargyrite -Pyrausta -Pyraustinae -pyrazine -pyrazole -pyrazoline -pyrazolone -pyrazolyl -pyre -pyrectic -pyrena -pyrene -Pyrenean -pyrenematous -pyrenic -pyrenin -pyrenocarp -pyrenocarpic -pyrenocarpous -Pyrenochaeta -pyrenodean -pyrenodeine -pyrenodeous -pyrenoid -pyrenolichen -Pyrenomycetales -pyrenomycete -Pyrenomycetes -Pyrenomycetineae -pyrenomycetous -Pyrenopeziza -pyrethrin -Pyrethrum -pyrethrum -pyretic -pyreticosis -pyretogenesis -pyretogenetic -pyretogenic -pyretogenous -pyretography -pyretology -pyretolysis -pyretotherapy -pyrewinkes -Pyrex -pyrex -pyrexia -pyrexial -pyrexic -pyrexical -pyrgeometer -pyrgocephalic -pyrgocephaly -pyrgoidal -pyrgologist -pyrgom -pyrheliometer -pyrheliometric -pyrheliometry -pyrheliophor -pyribole -pyridazine -pyridic -pyridine -pyridinium -pyridinize -pyridone -pyridoxine -pyridyl -pyriform -pyriformis -pyrimidine -pyrimidyl -pyritaceous -pyrite -pyrites -pyritic -pyritical -pyritiferous -pyritization -pyritize -pyritohedral -pyritohedron -pyritoid -pyritology -pyritous -pyro -pyroacetic -pyroacid -pyroantimonate -pyroantimonic -pyroarsenate -pyroarsenic -pyroarsenious -pyroarsenite -pyrobelonite -pyrobituminous -pyroborate -pyroboric -pyrocatechin -pyrocatechinol -pyrocatechol -pyrocatechuic -pyrocellulose -pyrochemical -pyrochemically -pyrochlore -pyrochromate -pyrochromic -pyrocinchonic -pyrocitric -pyroclastic -pyrocoll -pyrocollodion -pyrocomenic -pyrocondensation -pyroconductivity -pyrocotton -pyrocrystalline -Pyrocystis -Pyrodine -pyroelectric -pyroelectricity -pyrogallate -pyrogallic -pyrogallol -pyrogen -pyrogenation -pyrogenesia -pyrogenesis -pyrogenetic -pyrogenetically -pyrogenic -pyrogenous -pyroglutamic -pyrognomic -pyrognostic -pyrognostics -pyrograph -pyrographer -pyrographic -pyrography -pyrogravure -pyroguaiacin -pyroheliometer -pyroid -Pyrola -Pyrolaceae -pyrolaceous -pyrolater -pyrolatry -pyroligneous -pyrolignic -pyrolignite -pyrolignous -pyrolite -pyrollogical -pyrologist -pyrology -pyrolusite -pyrolysis -pyrolytic -pyrolyze -pyromachy -pyromagnetic -pyromancer -pyromancy -pyromania -pyromaniac -pyromaniacal -pyromantic -pyromeconic -pyromellitic -pyrometallurgy -pyrometamorphic -pyrometamorphism -pyrometer -pyrometric -pyrometrical -pyrometrically -pyrometry -Pyromorphidae -pyromorphism -pyromorphite -pyromorphous -pyromotor -pyromucate -pyromucic -pyromucyl -pyronaphtha -pyrone -Pyronema -pyronine -pyronomics -pyronyxis -pyrope -pyropen -pyrophanite -pyrophanous -pyrophile -pyrophilous -pyrophobia -pyrophone -pyrophoric -pyrophorous -pyrophorus -pyrophosphate -pyrophosphoric -pyrophosphorous -pyrophotograph -pyrophotography -pyrophotometer -pyrophyllite -pyrophysalite -pyropuncture -pyropus -pyroracemate -pyroracemic -pyroscope -pyroscopy -pyrosis -pyrosmalite -Pyrosoma -Pyrosomatidae -pyrosome -Pyrosomidae -pyrosomoid -pyrosphere -pyrostat -pyrostereotype -pyrostilpnite -pyrosulphate -pyrosulphite -pyrosulphuric -pyrosulphuryl -pyrotantalate -pyrotartaric -pyrotartrate -pyrotechnian -pyrotechnic -pyrotechnical -pyrotechnically -pyrotechnician -pyrotechnics -pyrotechnist -pyrotechny -pyroterebic -pyrotheology -Pyrotheria -Pyrotherium -pyrotic -pyrotoxin -pyrotritaric -pyrotritartric -pyrouric -pyrovanadate -pyrovanadic -pyroxanthin -pyroxene -pyroxenic -pyroxenite -pyroxmangite -pyroxonium -pyroxyle -pyroxylene -pyroxylic -pyroxylin -Pyrrhic -pyrrhic -pyrrhichian -pyrrhichius -pyrrhicist -Pyrrhocoridae -Pyrrhonean -Pyrrhonian -Pyrrhonic -Pyrrhonism -Pyrrhonist -Pyrrhonistic -Pyrrhonize -pyrrhotine -pyrrhotism -pyrrhotist -pyrrhotite -pyrrhous -Pyrrhuloxia -Pyrrhus -pyrrodiazole -pyrrol -pyrrole -pyrrolic -pyrrolidine -pyrrolidone -pyrrolidyl -pyrroline -pyrrolylene -pyrrophyllin -pyrroporphyrin -pyrrotriazole -pyrroyl -pyrryl -pyrrylene -Pyrula -Pyrularia -pyruline -pyruloid -Pyrus -pyruvaldehyde -pyruvate -pyruvic -pyruvil -pyruvyl -pyrylium -Pythagorean -Pythagoreanism -Pythagoreanize -Pythagoreanly -Pythagoric -Pythagorical -Pythagorically -Pythagorism -Pythagorist -Pythagorize -Pythagorizer -Pythia -Pythiaceae -Pythiacystis -Pythiad -Pythiambic -Pythian -Pythic -Pythios -Pythium -Pythius -pythogenesis -pythogenetic -pythogenic -pythogenous -python -pythoness -pythonic -pythonical -pythonid -Pythonidae -pythoniform -Pythoninae -pythonine -pythonism -Pythonissa -pythonist -pythonize -pythonoid -pythonomorph -Pythonomorpha -pythonomorphic -pythonomorphous -pyuria -pyvuril -pyx -Pyxidanthera -pyxidate -pyxides -pyxidium -pyxie -Pyxis -pyxis -Q -q -qasida -qere -qeri -qintar -Qoheleth -qoph -qua -quab -quabird -quachil -quack -quackery -quackhood -quackish -quackishly -quackishness -quackism -quackle -quacksalver -quackster -quacky -quad -quadded -quaddle -Quader -Quadi -quadmeter -quadra -quadrable -quadragenarian -quadragenarious -Quadragesima -quadragesimal -quadragintesimal -quadral -quadrangle -quadrangled -quadrangular -quadrangularly -quadrangularness -quadrangulate -quadrans -quadrant -quadrantal -quadrantes -Quadrantid -quadrantile -quadrantlike -quadrantly -quadrat -quadrate -quadrated -quadrateness -quadratic -quadratical -quadratically -quadratics -Quadratifera -quadratiferous -quadratojugal -quadratomandibular -quadratosquamosal -quadratrix -quadratum -quadrature -quadratus -quadrauricular -quadrennia -quadrennial -quadrennially -quadrennium -quadriad -quadrialate -quadriannulate -quadriarticulate -quadriarticulated -quadribasic -quadric -quadricapsular -quadricapsulate -quadricarinate -quadricellular -quadricentennial -quadriceps -quadrichord -quadriciliate -quadricinium -quadricipital -quadricone -quadricorn -quadricornous -quadricostate -quadricotyledonous -quadricovariant -quadricrescentic -quadricrescentoid -quadricuspid -quadricuspidal -quadricuspidate -quadricycle -quadricycler -quadricyclist -quadridentate -quadridentated -quadriderivative -quadridigitate -quadriennial -quadriennium -quadrienniumutile -quadrifarious -quadrifariously -quadrifid -quadrifilar -quadrifocal -quadrifoil -quadrifoliate -quadrifoliolate -quadrifolious -quadrifolium -quadriform -quadrifrons -quadrifrontal -quadrifurcate -quadrifurcated -quadrifurcation -quadriga -quadrigabled -quadrigamist -quadrigate -quadrigatus -quadrigeminal -quadrigeminate -quadrigeminous -quadrigeminum -quadrigenarious -quadriglandular -quadrihybrid -quadrijugal -quadrijugate -quadrijugous -quadrilaminar -quadrilaminate -quadrilateral -quadrilaterally -quadrilateralness -quadrilingual -quadriliteral -quadrille -quadrilled -quadrillion -quadrillionth -quadrilobate -quadrilobed -quadrilocular -quadriloculate -quadrilogue -quadrilogy -quadrimembral -quadrimetallic -quadrimolecular -quadrimum -quadrinodal -quadrinomial -quadrinomical -quadrinominal -quadrinucleate -quadrioxalate -quadriparous -quadripartite -quadripartitely -quadripartition -quadripennate -quadriphosphate -quadriphyllous -quadripinnate -quadriplanar -quadriplegia -quadriplicate -quadriplicated -quadripolar -quadripole -quadriportico -quadriporticus -quadripulmonary -quadriquadric -quadriradiate -quadrireme -quadrisect -quadrisection -quadriseptate -quadriserial -quadrisetose -quadrispiral -quadristearate -quadrisulcate -quadrisulcated -quadrisulphide -quadrisyllabic -quadrisyllabical -quadrisyllable -quadrisyllabous -quadriternate -quadritubercular -quadrituberculate -quadriurate -quadrivalence -quadrivalency -quadrivalent -quadrivalently -quadrivalve -quadrivalvular -quadrivial -quadrivious -quadrivium -quadrivoltine -quadroon -quadrual -Quadrula -quadrum -Quadrumana -quadrumanal -quadrumane -quadrumanous -quadruped -quadrupedal -quadrupedan -quadrupedant -quadrupedantic -quadrupedantical -quadrupedate -quadrupedation -quadrupedism -quadrupedous -quadruplane -quadruplator -quadruple -quadrupleness -quadruplet -quadruplex -quadruplicate -quadruplication -quadruplicature -quadruplicity -quadruply -quadrupole -quaedam -Quaequae -quaesitum -quaestor -quaestorial -quaestorian -quaestorship -quaestuary -quaff -quaffer -quaffingly -quag -quagga -quagginess -quaggle -quaggy -quagmire -quagmiry -quahog -quail -quailberry -quailery -quailhead -quaillike -quaily -quaint -quaintance -quaintise -quaintish -quaintly -quaintness -Quaitso -quake -quakeful -quakeproof -Quaker -quaker -quakerbird -Quakerdom -Quakeress -Quakeric -Quakerish -Quakerishly -Quakerishness -Quakerism -Quakerization -Quakerize -Quakerlet -Quakerlike -Quakerly -Quakership -Quakery -quaketail -quakiness -quaking -quakingly -quaky -quale -qualifiable -qualification -qualificative -qualificator -qualificatory -qualified -qualifiedly -qualifiedness -qualifier -qualify -qualifyingly -qualimeter -qualitative -qualitatively -qualitied -quality -qualityless -qualityship -qualm -qualminess -qualmish -qualmishly -qualmishness -qualmproof -qualmy -qualmyish -qualtagh -Quamasia -Quamoclit -quan -quandary -quandong -quandy -quannet -quant -quanta -quantic -quantical -quantifiable -quantifiably -quantification -quantifier -quantify -quantimeter -quantitate -quantitative -quantitatively -quantitativeness -quantitied -quantitive -quantitively -quantity -quantivalence -quantivalency -quantivalent -quantization -quantize -quantometer -quantulum -quantum -Quapaw -quaquaversal -quaquaversally -quar -quarantinable -quarantine -quarantiner -quaranty -quardeel -quare -quarenden -quarender -quarentene -quark -quarl -quarle -quarred -quarrel -quarreled -quarreler -quarreling -quarrelingly -quarrelproof -quarrelsome -quarrelsomely -quarrelsomeness -quarriable -quarried -quarrier -quarry -quarryable -quarrying -quarryman -quarrystone -quart -quartan -quartane -quartation -quartenylic -quarter -quarterage -quarterback -quarterdeckish -quartered -quarterer -quartering -quarterization -quarterland -quarterly -quarterman -quartermaster -quartermasterlike -quartermastership -quartern -quarterpace -quarters -quartersaw -quartersawed -quarterspace -quarterstaff -quarterstetch -quartet -quartette -quartetto -quartful -quartic -quartile -quartine -quartiparous -quarto -Quartodeciman -quartodecimanism -quartole -quartz -quartzic -quartziferous -quartzite -quartzitic -quartzless -quartzoid -quartzose -quartzous -quartzy -quash -Quashee -quashey -quashy -quasi -quasijudicial -Quasimodo -quasky -quassation -quassative -Quassia -quassiin -quassin -quat -quata -quatch -quatercentenary -quatern -quaternal -quaternarian -quaternarius -quaternary -quaternate -quaternion -quaternionic -quaternionist -quaternitarian -quaternity -quaters -quatertenses -quatorzain -quatorze -quatrain -quatral -quatrayle -quatre -quatrefeuille -quatrefoil -quatrefoiled -quatrefoliated -quatrible -quatrin -quatrino -quatrocentism -quatrocentist -quatrocento -Quatsino -quattie -quattrini -quatuor -quatuorvirate -quauk -quave -quaver -quaverer -quavering -quaveringly -quaverous -quavery -quaverymavery -quaw -quawk -quay -quayage -quayful -quaylike -quayman -quayside -quaysider -qubba -queach -queachy -queak -queal -quean -queanish -queasily -queasiness -queasom -queasy -quebrachamine -quebrachine -quebrachitol -quebracho -quebradilla -Quechua -Quechuan -quedful -queechy -queen -queencake -queencraft -queencup -queendom -queenfish -queenhood -queening -queenite -queenless -queenlet -queenlike -queenliness -queenly -queenright -queenroot -queensberry -queenship -queenweed -queenwood -queer -queerer -queerish -queerishness -queerity -queerly -queerness -queersome -queery -queest -queesting -queet -queeve -quegh -quei -queintise -quelch -Quelea -quell -queller -quemado -queme -quemeful -quemefully -quemely -quench -quenchable -quenchableness -quencher -quenchless -quenchlessly -quenchlessness -quenelle -quenselite -quercetagetin -quercetic -quercetin -quercetum -quercic -Querciflorae -quercimeritrin -quercin -quercine -quercinic -quercitannic -quercitannin -quercite -quercitin -quercitol -quercitrin -quercitron -quercivorous -Quercus -Querecho -Querendi -Querendy -querent -Queres -querier -queriman -querimonious -querimoniously -querimoniousness -querimony -querist -querken -querl -quern -quernal -Quernales -quernstone -querulent -querulential -querulist -querulity -querulosity -querulous -querulously -querulousness -query -querying -queryingly -queryist -quesited -quesitive -quest -quester -questeur -questful -questingly -question -questionability -questionable -questionableness -questionably -questionary -questionee -questioner -questioningly -questionist -questionless -questionlessly -questionnaire -questionous -questionwise -questman -questor -questorial -questorship -quet -quetch -quetenite -quetzal -queue -quey -Quiangan -quiapo -quib -quibble -quibbleproof -quibbler -quibblingly -quiblet -quica -Quiche -quick -quickbeam -quickborn -quicken -quickenance -quickenbeam -quickener -quickfoot -quickhatch -quickhearted -quickie -quicklime -quickly -quickness -quicksand -quicksandy -quickset -quicksilver -quicksilvering -quicksilverish -quicksilverishness -quicksilvery -quickstep -quickthorn -quickwork -quid -Quidae -quiddative -quidder -Quiddist -quiddit -quidditative -quidditatively -quiddity -quiddle -quiddler -quidnunc -quiesce -quiescence -quiescency -quiescent -quiescently -quiet -quietable -quieten -quietener -quieter -quieting -quietism -quietist -quietistic -quietive -quietlike -quietly -quietness -quietsome -quietude -quietus -quiff -quiffing -Quiina -Quiinaceae -quiinaceous -quila -quiles -Quileute -quilkin -quill -Quillagua -quillai -quillaic -Quillaja -quillaja -quillback -quilled -quiller -quillet -quilleted -quillfish -quilling -quilltail -quillwork -quillwort -quilly -quilt -quilted -quilter -quilting -Quimbaya -Quimper -quin -quina -quinacrine -Quinaielt -quinaldic -quinaldine -quinaldinic -quinaldinium -quinaldyl -quinamicine -quinamidine -quinamine -quinanisole -quinaquina -quinarian -quinarius -quinary -quinate -quinatoxine -Quinault -quinazoline -quinazolyl -quince -quincentenary -quincentennial -quincewort -quinch -quincubital -quincubitalism -quincuncial -quincuncially -quincunx -quincunxial -quindecad -quindecagon -quindecangle -quindecasyllabic -quindecemvir -quindecemvirate -quindecennial -quindecim -quindecima -quindecylic -quindene -quinetum -quingentenary -quinhydrone -quinia -quinible -quinic -quinicine -quinidia -quinidine -quinin -quinina -quinine -quininiazation -quininic -quininism -quininize -quiniretin -quinisext -quinisextine -quinism -quinite -quinitol -quinizarin -quinize -quink -quinnat -quinnet -Quinnipiac -quinoa -quinocarbonium -quinoform -quinogen -quinoid -quinoidal -quinoidation -quinoidine -quinol -quinoline -quinolinic -quinolinium -quinolinyl -quinologist -quinology -quinolyl -quinometry -quinone -quinonediimine -quinonic -quinonimine -quinonization -quinonize -quinonoid -quinonyl -quinopyrin -quinotannic -quinotoxine -quinova -quinovatannic -quinovate -quinovic -quinovin -quinovose -quinoxaline -quinoxalyl -quinoyl -quinquagenarian -quinquagenary -Quinquagesima -quinquagesimal -quinquarticular -Quinquatria -Quinquatrus -quinquecapsular -quinquecostate -quinquedentate -quinquedentated -quinquefarious -quinquefid -quinquefoliate -quinquefoliated -quinquefoliolate -quinquegrade -quinquejugous -quinquelateral -quinqueliteral -quinquelobate -quinquelobated -quinquelobed -quinquelocular -quinqueloculine -quinquenary -quinquenerval -quinquenerved -quinquennalia -quinquennia -quinquenniad -quinquennial -quinquennialist -quinquennially -quinquennium -quinquepartite -quinquepedal -quinquepedalian -quinquepetaloid -quinquepunctal -quinquepunctate -quinqueradial -quinqueradiate -quinquereme -quinquertium -quinquesect -quinquesection -quinqueseptate -quinqueserial -quinqueseriate -quinquesyllabic -quinquesyllable -quinquetubercular -quinquetuberculate -quinquevalence -quinquevalency -quinquevalent -quinquevalve -quinquevalvous -quinquevalvular -quinqueverbal -quinqueverbial -quinquevir -quinquevirate -quinquiliteral -quinquina -quinquino -quinse -quinsied -quinsy -quinsyberry -quinsywort -quint -quintad -quintadena -quintadene -quintain -quintal -quintan -quintant -quintary -quintato -quinte -quintelement -quintennial -quinternion -quinteron -quinteroon -quintessence -quintessential -quintessentiality -quintessentially -quintessentiate -quintet -quintette -quintetto -quintic -quintile -Quintilis -Quintillian -quintillion -quintillionth -Quintin -quintin -quintiped -Quintius -quinto -quintocubital -quintocubitalism -quintole -quinton -quintroon -quintuple -quintuplet -quintuplicate -quintuplication -quintuplinerved -quintupliribbed -quintus -quinuclidine -quinyl -quinze -quinzieme -quip -quipful -quipo -quipper -quippish -quippishness -quippy -quipsome -quipsomeness -quipster -quipu -quira -quire -quirewise -Quirinal -Quirinalia -quirinca -quiritarian -quiritary -Quirite -Quirites -quirk -quirkiness -quirkish -quirksey -quirksome -quirky -quirl -quirquincho -quirt -quis -quisby -quiscos -quisle -quisling -Quisqualis -quisqueite -quisquilian -quisquiliary -quisquilious -quisquous -quisutsch -quit -quitch -quitclaim -quite -Quitemoca -Quiteno -quitrent -quits -quittable -quittance -quitted -quitter -quittor -Quitu -quiver -quivered -quiverer -quiverful -quivering -quiveringly -quiverish -quiverleaf -quivery -Quixote -quixotic -quixotical -quixotically -quixotism -quixotize -quixotry -quiz -quizzability -quizzable -quizzacious -quizzatorial -quizzee -quizzer -quizzery -quizzical -quizzicality -quizzically -quizzicalness -quizzification -quizzify -quizziness -quizzingly -quizzish -quizzism -quizzity -quizzy -Qung -quo -quod -quoddies -quoddity -quodlibet -quodlibetal -quodlibetarian -quodlibetary -quodlibetic -quodlibetical -quodlibetically -quoilers -quoin -quoined -quoining -quoit -quoiter -quoitlike -quoits -quondam -quondamly -quondamship -quoniam -quop -Quoratean -quorum -quot -quota -quotability -quotable -quotableness -quotably -quotation -quotational -quotationally -quotationist -quotative -quote -quotee -quoteless -quotennial -quoter -quoteworthy -quoth -quotha -quotidian -quotidianly -quotidianness -quotient -quotiety -quotingly -quotity -quotlibet -quotum -Qurti -R -r -ra -raad -Raanan -raash -Rab -rab -raband -rabanna -rabat -rabatine -rabatte -rabattement -rabbanist -rabbanite -rabbet -rabbeting -rabbi -rabbin -rabbinate -rabbindom -Rabbinic -rabbinic -Rabbinica -rabbinical -rabbinically -rabbinism -rabbinist -rabbinistic -rabbinistical -rabbinite -rabbinize -rabbinship -rabbiship -rabbit -rabbitberry -rabbiter -rabbithearted -rabbitlike -rabbitmouth -rabbitproof -rabbitroot -rabbitry -rabbitskin -rabbitweed -rabbitwise -rabbitwood -rabbity -rabble -rabblelike -rabblement -rabbleproof -rabbler -rabblesome -rabboni -rabbonim -Rabelaisian -Rabelaisianism -Rabelaism -Rabi -rabic -rabid -rabidity -rabidly -rabidness -rabies -rabietic -rabific -rabiform -rabigenic -Rabin -rabinet -rabirubia -rabitic -rabulistic -rabulous -raccoon -raccoonberry -raccroc -race -raceabout -racebrood -racecourse -racegoer -racegoing -racelike -racemate -racemation -raceme -racemed -racemic -racemiferous -racemiform -racemism -racemization -racemize -racemocarbonate -racemocarbonic -racemomethylate -racemose -racemosely -racemous -racemously -racemule -racemulose -racer -raceway -rach -rache -Rachel -rachial -rachialgia -rachialgic -rachianalgesia -Rachianectes -rachianesthesia -rachicentesis -rachides -rachidial -rachidian -rachiform -Rachiglossa -rachiglossate -rachigraph -rachilla -rachiocentesis -rachiococainize -rachiocyphosis -rachiodont -rachiodynia -rachiometer -rachiomyelitis -rachioparalysis -rachioplegia -rachioscoliosis -rachiotome -rachiotomy -rachipagus -rachis -rachischisis -rachitic -rachitis -rachitism -rachitogenic -rachitome -rachitomous -rachitomy -Rachycentridae -Rachycentron -racial -racialism -racialist -raciality -racialization -racialize -racially -racily -raciness -racing -racinglike -racism -racist -rack -rackabones -rackan -rackboard -racker -racket -racketeer -racketeering -racketer -racketing -racketlike -racketproof -racketry -rackett -rackettail -rackety -rackful -racking -rackingly -rackle -rackless -rackmaster -rackproof -rackrentable -rackway -rackwork -racloir -racon -raconteur -racoon -Racovian -racy -rad -rada -radar -radarman -radarscope -raddle -raddleman -raddlings -radectomy -Radek -radiability -radiable -radial -radiale -radialia -radiality -radialization -radialize -radially -radian -radiance -radiancy -radiant -radiantly -Radiata -radiate -radiated -radiately -radiateness -radiatics -radiatiform -radiation -radiational -radiative -radiatopatent -radiatoporose -radiatoporous -radiator -radiatory -radiatostriate -radiatosulcate -radiature -radical -radicalism -radicality -radicalization -radicalize -radically -radicalness -radicand -radicant -radicate -radicated -radicating -radication -radicel -radices -radicicola -radicicolous -radiciferous -radiciflorous -radiciform -radicivorous -radicle -radicolous -radicose -Radicula -radicular -radicule -radiculectomy -radiculitis -radiculose -radiectomy -radiescent -radiferous -radii -radio -radioacoustics -radioactinium -radioactivate -radioactive -radioactively -radioactivity -radioamplifier -radioanaphylaxis -radioautograph -radioautographic -radioautography -radiobicipital -radiobroadcast -radiobroadcaster -radiobroadcasting -radiobserver -radiocarbon -radiocarpal -radiocast -radiocaster -radiochemical -radiochemistry -radiocinematograph -radioconductor -radiode -radiodermatitis -radiodetector -radiodiagnosis -radiodigital -radiodontia -radiodontic -radiodontist -radiodynamic -radiodynamics -radioelement -radiogenic -radiogoniometer -radiogoniometric -radiogoniometry -radiogram -radiograph -radiographer -radiographic -radiographical -radiographically -radiography -radiohumeral -radioisotope -Radiolaria -radiolarian -radiolead -radiolite -Radiolites -radiolitic -Radiolitidae -radiolocation -radiolocator -radiologic -radiological -radiologist -radiology -radiolucency -radiolucent -radioluminescence -radioluminescent -radioman -radiomedial -radiometallography -radiometeorograph -radiometer -radiometric -radiometrically -radiometry -radiomicrometer -radiomovies -radiomuscular -radionecrosis -radioneuritis -radionics -radiopacity -radiopalmar -radiopaque -radiopelvimetry -radiophare -radiophone -radiophonic -radiophony -radiophosphorus -radiophotograph -radiophotography -radiopraxis -radioscope -radioscopic -radioscopical -radioscopy -radiosensibility -radiosensitive -radiosensitivity -radiosonde -radiosonic -radiostereoscopy -radiosurgery -radiosurgical -radiosymmetrical -radiotechnology -radiotelegram -radiotelegraph -radiotelegraphic -radiotelegraphy -radiotelephone -radiotelephonic -radiotelephony -radioteria -radiothallium -radiotherapeutic -radiotherapeutics -radiotherapeutist -radiotherapist -radiotherapy -radiothermy -radiothorium -radiotoxemia -radiotransparency -radiotransparent -radiotrician -Radiotron -radiotropic -radiotropism -radiovision -radish -radishlike -radium -radiumization -radiumize -radiumlike -radiumproof -radiumtherapy -radius -radix -radknight -radman -radome -radon -radsimir -radula -radulate -raduliferous -raduliform -Rafael -Rafe -raff -Raffaelesque -raffe -raffee -raffery -raffia -raffinase -raffinate -raffing -raffinose -raffish -raffishly -raffishness -raffle -raffler -Rafflesia -rafflesia -Rafflesiaceae -rafflesiaceous -Rafik -raft -raftage -rafter -raftiness -raftlike -raftman -raftsman -rafty -rag -raga -ragabash -ragabrash -ragamuffin -ragamuffinism -ragamuffinly -rage -rageful -ragefully -rageless -rageous -rageously -rageousness -rageproof -rager -ragesome -ragfish -ragged -raggedly -raggedness -raggedy -raggee -ragger -raggery -raggety -raggil -raggily -ragging -raggle -raggled -raggy -raghouse -Raghu -raging -ragingly -raglan -raglanite -raglet -raglin -ragman -Ragnar -ragout -ragpicker -ragseller -ragshag -ragsorter -ragstone -ragtag -ragtime -ragtimer -ragtimey -ragule -raguly -ragweed -ragwort -rah -Rahanwin -rahdar -rahdaree -Rahul -Raia -raia -Raiae -raid -raider -raidproof -Raif -Raiidae -raiiform -rail -railage -railbird -railer -railhead -railing -railingly -raillery -railless -raillike -railly -railman -railroad -railroadana -railroader -railroadiana -railroading -railroadish -railroadship -railway -railwaydom -railwayless -Raimannia -raiment -raimentless -rain -rainband -rainbird -rainbound -rainbow -rainbowlike -rainbowweed -rainbowy -rainburst -raincoat -raindrop -Rainer -rainer -rainfall -rainfowl -rainful -rainily -raininess -rainless -rainlessness -rainlight -rainproof -rainproofer -rainspout -rainstorm -raintight -rainwash -rainworm -rainy -raioid -Rais -rais -raisable -raise -raised -raiseman -raiser -raisin -raising -raisiny -Raj -raj -Raja -raja -Rajah -rajah -Rajarshi -rajaship -Rajasthani -rajbansi -Rajeev -Rajendra -Rajesh -Rajidae -Rajiv -Rajput -rakan -rake -rakeage -rakeful -rakehell -rakehellish -rakehelly -raker -rakery -rakesteel -rakestele -rakh -Rakhal -raki -rakily -raking -rakish -rakishly -rakishness -rakit -rakshasa -raku -Ralf -rallentando -ralliance -Rallidae -rallier -ralliform -Rallinae -ralline -Rallus -rally -Ralph -ralph -ralstonite -Ram -ram -Rama -ramada -Ramadoss -ramage -Ramaism -Ramaite -ramal -Raman -Ramanan -ramanas -ramarama -ramass -ramate -rambeh -ramberge -ramble -rambler -rambling -ramblingly -ramblingness -Rambo -rambong -rambooze -Rambouillet -rambunctious -rambutan -ramdohrite -rame -rameal -Ramean -ramed -ramekin -ramellose -rament -ramentaceous -ramental -ramentiferous -ramentum -rameous -ramequin -Rameses -Rameseum -Ramesh -Ramessid -Ramesside -ramet -ramex -ramfeezled -ramgunshoch -ramhead -ramhood -rami -ramicorn -ramie -ramiferous -ramificate -ramification -ramified -ramiflorous -ramiform -ramify -ramigerous -Ramillie -Ramillied -ramiparous -Ramiro -ramisection -ramisectomy -Ramism -Ramist -Ramistical -ramlike -ramline -rammack -rammel -rammelsbergite -rammer -rammerman -rammish -rammishly -rammishness -rammy -Ramneek -Ramnenses -Ramnes -Ramon -Ramona -Ramoosii -ramose -ramosely -ramosity -ramosopalmate -ramosopinnate -ramososubdivided -ramous -ramp -rampacious -rampaciously -rampage -rampageous -rampageously -rampageousness -rampager -rampagious -rampancy -rampant -rampantly -rampart -ramped -ramper -Ramphastidae -Ramphastides -Ramphastos -rampick -rampike -ramping -rampingly -rampion -rampire -rampler -ramplor -rampsman -ramrace -ramrod -ramroddy -ramscallion -ramsch -Ramsey -ramshackle -ramshackled -ramshackleness -ramshackly -ramson -ramstam -ramtil -ramular -ramule -ramuliferous -ramulose -ramulous -ramulus -ramus -ramuscule -Ramusi -Ran -ran -Rana -rana -ranal -Ranales -ranarian -ranarium -Ranatra -rance -rancel -rancellor -rancelman -rancer -rancescent -ranch -ranche -rancher -rancheria -ranchero -ranchless -ranchman -rancho -ranchwoman -rancid -rancidification -rancidify -rancidity -rancidly -rancidness -rancor -rancorous -rancorously -rancorousness -rancorproof -Rand -rand -Randal -Randall -Randallite -randan -randannite -Randell -randem -rander -Randia -randing -randir -Randite -randle -Randolph -random -randomish -randomization -randomize -randomly -randomness -randomwise -Randy -randy -rane -Ranella -Ranere -rang -rangatira -range -ranged -rangeless -rangeman -ranger -rangership -rangework -rangey -Rangifer -rangiferine -ranginess -ranging -rangle -rangler -rangy -rani -ranid -Ranidae -raniferous -raniform -Ranina -Raninae -ranine -raninian -ranivorous -Ranjit -rank -ranked -ranker -rankish -rankle -rankless -ranklingly -rankly -rankness -ranksman -rankwise -rann -rannel -rannigal -ranny -Ranquel -ransack -ransacker -ransackle -ransel -ranselman -ransom -ransomable -ransomer -ransomfree -ransomless -ranstead -rant -rantan -rantankerous -rantepole -ranter -Ranterism -ranting -rantingly -rantipole -rantock -ranty -ranula -ranular -Ranunculaceae -ranunculaceous -Ranunculales -ranunculi -Ranunculus -Ranzania -Raoulia -rap -Rapaces -rapaceus -rapacious -rapaciously -rapaciousness -rapacity -rapakivi -Rapallo -Rapanea -Rapateaceae -rapateaceous -rape -rapeful -raper -rapeseed -Raphael -Raphaelesque -Raphaelic -Raphaelism -Raphaelite -Raphaelitism -raphania -Raphanus -raphany -raphe -Raphia -raphide -raphides -raphidiferous -raphidiid -Raphidiidae -Raphidodea -Raphidoidea -Raphiolepis -raphis -rapic -rapid -rapidity -rapidly -rapidness -rapier -rapiered -rapillo -rapine -rapiner -raping -rapinic -rapist -raploch -rappage -rapparee -rappe -rappel -rapper -rapping -Rappist -rappist -Rappite -rapport -rapscallion -rapscallionism -rapscallionly -rapscallionry -rapt -raptatorial -raptatory -raptly -raptness -raptor -Raptores -raptorial -raptorious -raptril -rapture -raptured -raptureless -rapturist -rapturize -rapturous -rapturously -rapturousness -raptury -raptus -rare -rarebit -rarefaction -rarefactional -rarefactive -rarefiable -rarefication -rarefier -rarefy -rarely -rareness -rareripe -Rareyfy -rariconstant -rarish -rarity -Rarotongan -ras -rasa -Rasalas -Rasalhague -rasamala -rasant -rascacio -rascal -rascaldom -rascaless -rascalion -rascalism -rascality -rascalize -rascallike -rascallion -rascally -rascalry -rascalship -rasceta -rascette -rase -rasen -Rasenna -raser -rasgado -rash -rasher -rashful -rashing -rashlike -rashly -rashness -Rashti -rasion -Raskolnik -Rasores -rasorial -rasp -raspatorium -raspatory -raspberriade -raspberry -raspberrylike -rasped -rasper -rasping -raspingly -raspingness -raspings -raspish -raspite -raspy -rasse -Rasselas -rassle -Rastaban -raster -rastik -rastle -Rastus -rasure -rat -rata -ratability -ratable -ratableness -ratably -ratafee -ratafia -ratal -ratanhia -rataplan -ratbite -ratcatcher -ratcatching -ratch -ratchel -ratchelly -ratcher -ratchet -ratchetlike -ratchety -ratching -ratchment -rate -rated -ratel -rateless -ratement -ratepayer -ratepaying -rater -ratfish -rath -rathe -rathed -rathely -ratheness -rather -ratherest -ratheripe -ratherish -ratherly -rathest -rathite -Rathnakumar -rathole -rathskeller -raticidal -raticide -ratification -ratificationist -ratifier -ratify -ratihabition -ratine -rating -ratio -ratiocinant -ratiocinate -ratiocination -ratiocinative -ratiocinator -ratiocinatory -ratiometer -ration -rationable -rationably -rational -rationale -rationalism -rationalist -rationalistic -rationalistical -rationalistically -rationalisticism -rationality -rationalizable -rationalization -rationalize -rationalizer -rationally -rationalness -rationate -rationless -rationment -Ratitae -ratite -ratitous -ratlike -ratline -ratliner -ratoon -ratooner -ratproof -ratsbane -ratskeller -rattage -rattail -rattan -ratteen -ratten -rattener -ratter -rattery -ratti -rattinet -rattish -rattle -rattlebag -rattlebones -rattlebox -rattlebrain -rattlebrained -rattlebush -rattled -rattlehead -rattleheaded -rattlejack -rattlemouse -rattlenut -rattlepate -rattlepated -rattlepod -rattleproof -rattler -rattleran -rattleroot -rattlertree -rattles -rattleskull -rattleskulled -rattlesnake -rattlesome -rattletrap -rattleweed -rattlewort -rattling -rattlingly -rattlingness -rattly -ratton -rattoner -rattrap -Rattus -ratty -ratwa -ratwood -raucid -raucidity -raucity -raucous -raucously -raucousness -raught -raugrave -rauk -raukle -Raul -rauli -raun -raunge -raupo -rauque -Rauraci -Raurici -Rauwolfia -ravage -ravagement -ravager -rave -ravehook -raveinelike -ravel -raveler -ravelin -raveling -ravelly -ravelment -ravelproof -raven -Ravenala -ravendom -ravenduck -Ravenelia -ravener -ravenhood -ravening -ravenish -ravenlike -ravenous -ravenously -ravenousness -ravenry -ravens -Ravensara -ravensara -ravenstone -ravenwise -raver -Ravi -ravigote -ravin -ravinate -Ravindran -Ravindranath -ravine -ravined -ravinement -raviney -raving -ravingly -ravioli -ravish -ravishedly -ravisher -ravishing -ravishingly -ravishment -ravison -ravissant -raw -rawboned -rawbones -rawhead -rawhide -rawhider -rawish -rawishness -rawness -rax -Ray -ray -raya -rayage -Rayan -rayed -rayful -rayless -raylessness -raylet -Raymond -rayon -rayonnance -rayonnant -raze -razee -razer -razoo -razor -razorable -razorback -razorbill -razoredge -razorless -razormaker -razormaking -razorman -razorstrop -Razoumofskya -razz -razzia -razzly -re -rea -reaal -reabandon -reabolish -reabolition -reabridge -reabsence -reabsent -reabsolve -reabsorb -reabsorption -reabuse -reacceptance -reaccess -reaccession -reacclimatization -reacclimatize -reaccommodate -reaccompany -reaccomplish -reaccomplishment -reaccord -reaccost -reaccount -reaccredit -reaccrue -reaccumulate -reaccumulation -reaccusation -reaccuse -reaccustom -reacetylation -reach -reachable -reacher -reachieve -reachievement -reaching -reachless -reachy -reacidification -reacidify -reacknowledge -reacknowledgment -reacquaint -reacquaintance -reacquire -reacquisition -react -reactance -reactant -reaction -reactional -reactionally -reactionariness -reactionarism -reactionarist -reactionary -reactionaryism -reactionism -reactionist -reactivate -reactivation -reactive -reactively -reactiveness -reactivity -reactological -reactology -reactor -reactualization -reactualize -reactuate -read -readability -readable -readableness -readably -readapt -readaptability -readaptable -readaptation -readaptive -readaptiveness -readd -readdition -readdress -reader -readerdom -readership -readhere -readhesion -readily -readiness -reading -readingdom -readjourn -readjournment -readjudicate -readjust -readjustable -readjuster -readjustment -readmeasurement -readminister -readmiration -readmire -readmission -readmit -readmittance -readopt -readoption -readorn -readvance -readvancement -readvent -readventure -readvertency -readvertise -readvertisement -readvise -readvocate -ready -reaeration -reaffect -reaffection -reaffiliate -reaffiliation -reaffirm -reaffirmance -reaffirmation -reaffirmer -reafflict -reafford -reafforest -reafforestation -reaffusion -reagency -reagent -reaggravate -reaggravation -reaggregate -reaggregation -reaggressive -reagin -reagitate -reagitation -reagree -reagreement -reak -Real -real -realarm -reales -realest -realgar -realienate -realienation -realign -realignment -realism -realist -realistic -realistically -realisticize -reality -realive -realizability -realizable -realizableness -realizably -realization -realize -realizer -realizing -realizingly -reallegation -reallege -reallegorize -realliance -reallocate -reallocation -reallot -reallotment -reallow -reallowance -reallude -reallusion -really -realm -realmless -realmlet -realness -realter -realteration -realtor -realty -ream -reamage -reamalgamate -reamalgamation -reamass -reambitious -reamend -reamendment -reamer -reamerer -reaminess -reamputation -reamuse -reamy -reanalysis -reanalyze -reanchor -reanimalize -reanimate -reanimation -reanneal -reannex -reannexation -reannotate -reannounce -reannouncement -reannoy -reannoyance -reanoint -reanswer -reanvil -reanxiety -reap -reapable -reapdole -reaper -reapologize -reapology -reapparel -reapparition -reappeal -reappear -reappearance -reappease -reapplaud -reapplause -reappliance -reapplicant -reapplication -reapplier -reapply -reappoint -reappointment -reapportion -reapportionment -reapposition -reappraisal -reappraise -reappraisement -reappreciate -reappreciation -reapprehend -reapprehension -reapproach -reapprobation -reappropriate -reappropriation -reapproval -reapprove -rear -rearbitrate -rearbitration -rearer -reargue -reargument -rearhorse -rearisal -rearise -rearling -rearm -rearmament -rearmost -rearousal -rearouse -rearrange -rearrangeable -rearrangement -rearranger -rearray -rearrest -rearrival -rearrive -rearward -rearwardly -rearwardness -rearwards -reascend -reascendancy -reascendant -reascendency -reascendent -reascension -reascensional -reascent -reascertain -reascertainment -reashlar -reasiness -reask -reason -reasonability -reasonable -reasonableness -reasonably -reasoned -reasonedly -reasoner -reasoning -reasoningly -reasonless -reasonlessly -reasonlessness -reasonproof -reaspire -reassail -reassault -reassay -reassemblage -reassemble -reassembly -reassent -reassert -reassertion -reassertor -reassess -reassessment -reasseverate -reassign -reassignation -reassignment -reassimilate -reassimilation -reassist -reassistance -reassociate -reassociation -reassort -reassortment -reassume -reassumption -reassurance -reassure -reassured -reassuredly -reassurement -reassurer -reassuring -reassuringly -reastiness -reastonish -reastonishment -reastray -reasty -reasy -reattach -reattachment -reattack -reattain -reattainment -reattempt -reattend -reattendance -reattention -reattentive -reattest -reattire -reattract -reattraction -reattribute -reattribution -reatus -reaudit -reauthenticate -reauthentication -reauthorization -reauthorize -reavail -reavailable -reave -reaver -reavoid -reavoidance -reavouch -reavow -reawait -reawake -reawaken -reawakening -reawakenment -reaward -reaware -reb -rebab -reback -rebag -rebait -rebake -rebalance -rebale -reballast -reballot -reban -rebandage -rebanish -rebanishment -rebankrupt -rebankruptcy -rebaptism -rebaptismal -rebaptization -rebaptize -rebaptizer -rebar -rebarbarization -rebarbarize -rebarbative -rebargain -rebase -rebasis -rebatable -rebate -rebateable -rebatement -rebater -rebathe -rebato -rebawl -rebeamer -rebear -rebeat -rebeautify -rebec -Rebecca -Rebeccaism -Rebeccaites -rebeck -rebecome -rebed -rebeg -rebeget -rebeggar -rebegin -rebeginner -rebeginning -rebeguile -rebehold -Rebekah -rebel -rebeldom -rebelief -rebelieve -rebeller -rebellike -rebellion -rebellious -rebelliously -rebelliousness -rebellow -rebelly -rebelong -rebelove -rebelproof -rebemire -rebend -rebenediction -rebenefit -rebeset -rebesiege -rebestow -rebestowal -rebetake -rebetray -rebewail -rebia -rebias -rebid -rebill -rebillet -rebilling -rebind -rebirth -rebite -reblade -reblame -reblast -rebleach -reblend -rebless -reblock -rebloom -reblossom -reblot -reblow -reblue -rebluff -reblunder -reboant -reboantic -reboard -reboast -rebob -reboil -reboiler -reboise -reboisement -rebold -rebolt -rebone -rebook -rebop -rebore -reborn -reborrow -rebottle -Reboulia -rebounce -rebound -reboundable -rebounder -reboundingness -rebourbonize -rebox -rebrace -rebraid -rebranch -rebrand -rebrandish -rebreathe -rebreed -rebrew -rebribe -rebrick -rebridge -rebring -rebringer -rebroach -rebroadcast -rebronze -rebrown -rebrush -rebrutalize -rebubble -rebuckle -rebud -rebudget -rebuff -rebuffable -rebuffably -rebuffet -rebuffproof -rebuild -rebuilder -rebuilt -rebukable -rebuke -rebukeable -rebukeful -rebukefully -rebukefulness -rebukeproof -rebuker -rebukingly -rebulk -rebunch -rebundle -rebunker -rebuoy -rebuoyage -reburden -reburgeon -reburial -reburn -reburnish -reburst -rebury -rebus -rebush -rebusy -rebut -rebute -rebutment -rebuttable -rebuttal -rebutter -rebutton -rebuy -recable -recadency -recage -recalcination -recalcine -recalcitrance -recalcitrant -recalcitrate -recalcitration -recalculate -recalculation -recalesce -recalescence -recalescent -recalibrate -recalibration -recalk -recall -recallable -recallist -recallment -recampaign -recancel -recancellation -recandescence -recandidacy -recant -recantation -recanter -recantingly -recanvas -recap -recapacitate -recapitalization -recapitalize -recapitulate -recapitulation -recapitulationist -recapitulative -recapitulator -recapitulatory -recappable -recapper -recaption -recaptivate -recaptivation -recaptor -recapture -recapturer -recarbon -recarbonate -recarbonation -recarbonization -recarbonize -recarbonizer -recarburization -recarburize -recarburizer -recarnify -recarpet -recarriage -recarrier -recarry -recart -recarve -recase -recash -recasket -recast -recaster -recasting -recatalogue -recatch -recaulescence -recausticize -recce -recco -reccy -recede -recedence -recedent -receder -receipt -receiptable -receiptless -receiptor -receipts -receivability -receivable -receivables -receivablness -receival -receive -received -receivedness -receiver -receivership -recelebrate -recelebration -recement -recementation -recency -recense -recension -recensionist -recensor -recensure -recensus -recent -recenter -recently -recentness -recentralization -recentralize -recentre -recept -receptacle -receptacular -receptaculite -Receptaculites -receptaculitid -Receptaculitidae -receptaculitoid -receptaculum -receptant -receptibility -receptible -reception -receptionism -receptionist -receptitious -receptive -receptively -receptiveness -receptivity -receptor -receptoral -receptorial -receptual -receptually -recercelee -recertificate -recertify -recess -recesser -recession -recessional -recessionary -recessive -recessively -recessiveness -recesslike -recessor -Rechabite -Rechabitism -rechafe -rechain -rechal -rechallenge -rechamber -rechange -rechant -rechaos -rechar -recharge -recharter -rechase -rechaser -rechasten -rechaw -recheat -recheck -recheer -recherche -rechew -rechip -rechisel -rechoose -rechristen -rechuck -rechurn -recidivation -recidive -recidivism -recidivist -recidivistic -recidivity -recidivous -recipe -recipiangle -recipience -recipiency -recipiend -recipiendary -recipient -recipiomotor -reciprocable -reciprocal -reciprocality -reciprocalize -reciprocally -reciprocalness -reciprocate -reciprocation -reciprocative -reciprocator -reciprocatory -reciprocitarian -reciprocity -recircle -recirculate -recirculation -recision -recission -recissory -recitable -recital -recitalist -recitatif -recitation -recitationalism -recitationist -recitative -recitatively -recitativical -recitativo -recite -recitement -reciter -recivilization -recivilize -reck -reckla -reckless -recklessly -recklessness -reckling -reckon -reckonable -reckoner -reckoning -reclaim -reclaimable -reclaimableness -reclaimably -reclaimant -reclaimer -reclaimless -reclaimment -reclama -reclamation -reclang -reclasp -reclass -reclassification -reclassify -reclean -recleaner -recleanse -reclear -reclearance -reclimb -reclinable -reclinate -reclinated -reclination -recline -recliner -reclose -reclothe -reclothing -recluse -reclusely -recluseness -reclusery -reclusion -reclusive -reclusiveness -reclusory -recoach -recoagulation -recoal -recoast -recoat -recock -recoct -recoction -recode -recodification -recodify -recogitate -recogitation -recognition -recognitive -recognitor -recognitory -recognizability -recognizable -recognizably -recognizance -recognizant -recognize -recognizedly -recognizee -recognizer -recognizingly -recognizor -recognosce -recohabitation -recoil -recoiler -recoilingly -recoilment -recoin -recoinage -recoiner -recoke -recollapse -recollate -recollation -Recollect -recollectable -recollected -recollectedly -recollectedness -recollectible -recollection -recollective -recollectively -recollectiveness -Recollet -recolonization -recolonize -recolor -recomb -recombination -recombine -recomember -recomfort -recommand -recommence -recommencement -recommencer -recommend -recommendability -recommendable -recommendableness -recommendably -recommendation -recommendatory -recommendee -recommender -recommission -recommit -recommitment -recommittal -recommunicate -recommunion -recompact -recompare -recomparison -recompass -recompel -recompensable -recompensate -recompensation -recompense -recompenser -recompensive -recompete -recompetition -recompetitor -recompilation -recompile -recompilement -recomplain -recomplaint -recomplete -recompletion -recompliance -recomplicate -recomplication -recomply -recompose -recomposer -recomposition -recompound -recomprehend -recomprehension -recompress -recompression -recomputation -recompute -recon -reconceal -reconcealment -reconcede -reconceive -reconcentrate -reconcentration -reconception -reconcert -reconcession -reconcilability -reconcilable -reconcilableness -reconcilably -reconcile -reconcilee -reconcileless -reconcilement -reconciler -reconciliability -reconciliable -reconciliate -reconciliation -reconciliative -reconciliator -reconciliatory -reconciling -reconcilingly -reconclude -reconclusion -reconcoct -reconcrete -reconcur -recondemn -recondemnation -recondensation -recondense -recondite -reconditely -reconditeness -recondition -recondole -reconduct -reconduction -reconfer -reconfess -reconfide -reconfine -reconfinement -reconfirm -reconfirmation -reconfiscate -reconfiscation -reconform -reconfound -reconfront -reconfuse -reconfusion -recongeal -recongelation -recongest -recongestion -recongratulate -recongratulation -reconjoin -reconjunction -reconnaissance -reconnect -reconnection -reconnoissance -reconnoiter -reconnoiterer -reconnoiteringly -reconnoitre -reconnoitrer -reconnoitringly -reconquer -reconqueror -reconquest -reconsecrate -reconsecration -reconsent -reconsider -reconsideration -reconsign -reconsignment -reconsole -reconsolidate -reconsolidation -reconstituent -reconstitute -reconstitution -reconstruct -reconstructed -reconstruction -reconstructional -reconstructionary -reconstructionist -reconstructive -reconstructiveness -reconstructor -reconstrue -reconsult -reconsultation -recontact -recontemplate -recontemplation -recontend -recontest -recontinuance -recontinue -recontract -recontraction -recontrast -recontribute -recontribution -recontrivance -recontrive -recontrol -reconvalesce -reconvalescence -reconvalescent -reconvene -reconvention -reconventional -reconverge -reconverse -reconversion -reconvert -reconvertible -reconvey -reconveyance -reconvict -reconviction -reconvince -reconvoke -recook -recool -recooper -recopper -recopy -recopyright -record -recordable -recordant -recordation -recordative -recordatively -recordatory -recordedly -recorder -recordership -recording -recordist -recordless -recork -recorporification -recorporify -recorrect -recorrection -recorrupt -recorruption -recostume -recounsel -recount -recountable -recountal -recountenance -recounter -recountless -recoup -recoupable -recouper -recouple -recoupment -recourse -recover -recoverability -recoverable -recoverableness -recoverance -recoveree -recoverer -recoveringly -recoverless -recoveror -recovery -recramp -recrank -recrate -recreance -recreancy -recreant -recreantly -recreantness -recrease -recreate -recreation -recreational -recreationist -recreative -recreatively -recreativeness -recreator -recreatory -recredit -recrement -recremental -recrementitial -recrementitious -recrescence -recrew -recriminate -recrimination -recriminative -recriminator -recriminatory -recriticize -recroon -recrop -recross -recrowd -recrown -recrucify -recrudency -recrudesce -recrudescence -recrudescency -recrudescent -recruit -recruitable -recruitage -recruital -recruitee -recruiter -recruithood -recruiting -recruitment -recruity -recrush -recrusher -recrystallization -recrystallize -rect -recta -rectal -rectalgia -rectally -rectangle -rectangled -rectangular -rectangularity -rectangularly -rectangularness -rectangulate -rectangulometer -rectectomy -recti -rectifiable -rectification -rectificative -rectificator -rectificatory -rectified -rectifier -rectify -rectigrade -Rectigraph -rectilineal -rectilineally -rectilinear -rectilinearism -rectilinearity -rectilinearly -rectilinearness -rectilineation -rectinerved -rection -rectipetality -rectirostral -rectischiac -rectiserial -rectitic -rectitis -rectitude -rectitudinous -recto -rectoabdominal -rectocele -rectoclysis -rectococcygeal -rectococcygeus -rectocolitic -rectocolonic -rectocystotomy -rectogenital -rectopexy -rectoplasty -rector -rectoral -rectorate -rectoress -rectorial -rectorrhaphy -rectorship -rectory -rectoscope -rectoscopy -rectosigmoid -rectostenosis -rectostomy -rectotome -rectotomy -rectovaginal -rectovesical -rectress -rectricial -rectrix -rectum -rectus -recubant -recubate -recultivate -recultivation -recumbence -recumbency -recumbent -recumbently -recuperability -recuperance -recuperate -recuperation -recuperative -recuperativeness -recuperator -recuperatory -recur -recure -recureful -recureless -recurl -recurrence -recurrency -recurrent -recurrently -recurrer -recurring -recurringly -recurse -recursion -recursive -recurtain -recurvant -recurvate -recurvation -recurvature -recurve -Recurvirostra -recurvirostral -Recurvirostridae -recurvopatent -recurvoternate -recurvous -recusance -recusancy -recusant -recusation -recusative -recusator -recuse -recushion -recussion -recut -recycle -Red -red -redact -redaction -redactional -redactor -redactorial -redamage -redamnation -redan -redare -redargue -redargution -redargutive -redargutory -redarken -redarn -redart -redate -redaub -redawn -redback -redbait -redbeard -redbelly -redberry -redbill -redbird -redbone -redbreast -redbrush -redbuck -redbud -redcap -redcoat -redd -redden -reddendo -reddendum -reddening -redder -redding -reddingite -reddish -reddishness -reddition -reddleman -reddock -reddsman -reddy -rede -redeal -redebate -redebit -redeceive -redecide -redecimate -redecision -redeck -redeclaration -redeclare -redecline -redecorate -redecoration -redecrease -redecussate -rededicate -rededication -rededicatory -rededuct -rededuction -redeed -redeem -redeemability -redeemable -redeemableness -redeemably -redeemer -redeemeress -redeemership -redeemless -redefault -redefeat -redefecate -redefer -redefiance -redefine -redefinition -redeflect -redefy -redeify -redelay -redelegate -redelegation -redeliberate -redeliberation -redeliver -redeliverance -redeliverer -redelivery -redemand -redemandable -redemise -redemolish -redemonstrate -redemonstration -redemptible -Redemptine -redemption -redemptional -redemptioner -Redemptionist -redemptionless -redemptive -redemptively -redemptor -redemptorial -Redemptorist -redemptory -redemptress -redemptrice -redenigrate -redeny -redepend -redeploy -redeployment -redeposit -redeposition -redepreciate -redepreciation -redeprive -rederivation -redescend -redescent -redescribe -redescription -redesertion -redeserve -redesign -redesignate -redesignation -redesire -redesirous -redesman -redespise -redetect -redetention -redetermination -redetermine -redevelop -redeveloper -redevelopment -redevise -redevote -redevotion -redeye -redfin -redfinch -redfish -redfoot -redhead -redheaded -redheadedly -redheadedness -redhearted -redhibition -redhibitory -redhoop -redia -redictate -redictation -redient -redifferentiate -redifferentiation -redig -redigest -redigestion -rediminish -redingote -redintegrate -redintegration -redintegrative -redintegrator -redip -redipper -redirect -redirection -redisable -redisappear -redisburse -redisbursement -redischarge -rediscipline -rediscount -rediscourage -rediscover -rediscoverer -rediscovery -rediscuss -rediscussion -redisembark -redismiss -redispatch -redispel -redisperse -redisplay -redispose -redisposition -redispute -redissect -redissection -redisseise -redisseisin -redisseisor -redisseize -redisseizin -redisseizor -redissoluble -redissolution -redissolvable -redissolve -redistend -redistill -redistillation -redistiller -redistinguish -redistrain -redistrainer -redistribute -redistributer -redistribution -redistributive -redistributor -redistributory -redistrict -redisturb -redive -rediversion -redivert -redivertible -redivide -redivision -redivive -redivivous -redivivus -redivorce -redivorcement -redivulge -redivulgence -redjacket -redknees -redleg -redlegs -redly -redmouth -redness -redo -redock -redocket -redolence -redolency -redolent -redolently -redominate -redondilla -redoom -redouble -redoublement -redoubler -redoubling -redoubt -redoubtable -redoubtableness -redoubtably -redoubted -redound -redowa -redox -redpoll -redraft -redrag -redrape -redraw -redrawer -redream -redredge -redress -redressable -redressal -redresser -redressible -redressive -redressless -redressment -redressor -redrill -redrive -redroot -redry -redsear -redshank -redshirt -redskin -redstart -redstreak -redtab -redtail -redthroat -redtop -redub -redubber -reduce -reduceable -reduceableness -reduced -reducement -reducent -reducer -reducibility -reducible -reducibleness -reducibly -reducing -reduct -reductant -reductase -reductibility -reduction -reductional -reductionism -reductionist -reductionistic -reductive -reductively -reductor -reductorial -redue -Redunca -redundance -redundancy -redundant -redundantly -reduplicate -reduplication -reduplicative -reduplicatively -reduplicatory -reduplicature -reduviid -Reduviidae -reduvioid -Reduvius -redux -redward -redware -redweed -redwing -redwithe -redwood -redye -Ree -ree -reechy -reed -reedbird -reedbuck -reedbush -reeded -reeden -reeder -reediemadeasy -reedily -reediness -reeding -reedish -reedition -reedless -reedlike -reedling -reedmaker -reedmaking -reedman -reedplot -reedwork -reedy -reef -reefable -reefer -reefing -reefy -reek -reeker -reekingly -reeky -reel -reelable -reeled -reeler -reelingly -reelrall -reem -reeming -reemish -reen -reenge -reeper -Rees -reese -reeshle -reesk -reesle -reest -reester -reestle -reesty -reet -reetam -reetle -reeve -reeveland -reeveship -ref -reface -refacilitate -refall -refallow -refan -refascinate -refascination -refashion -refashioner -refashionment -refasten -refathered -refavor -refect -refection -refectionary -refectioner -refective -refectorarian -refectorary -refectorer -refectorial -refectorian -refectory -refederate -refeed -refeel -refeign -refel -refence -refer -referable -referee -reference -referenda -referendal -referendary -referendaryship -referendum -referent -referential -referentially -referently -referment -referral -referrer -referrible -referribleness -refertilization -refertilize -refetch -refight -refigure -refill -refillable -refilm -refilter -refinable -refinage -refinance -refind -refine -refined -refinedly -refinedness -refinement -refiner -refinery -refinger -refining -refiningly -refinish -refire -refit -refitment -refix -refixation -refixture -reflag -reflagellate -reflame -reflash -reflate -reflation -reflationism -reflect -reflectance -reflected -reflectedly -reflectedness -reflectent -reflecter -reflectibility -reflectible -reflecting -reflectingly -reflection -reflectional -reflectionist -reflectionless -reflective -reflectively -reflectiveness -reflectivity -reflectometer -reflectometry -reflector -reflectoscope -refledge -reflee -reflex -reflexed -reflexibility -reflexible -reflexism -reflexive -reflexively -reflexiveness -reflexivity -reflexly -reflexness -reflexogenous -reflexological -reflexologist -reflexology -refling -refloat -refloatation -reflog -reflood -refloor -reflorescence -reflorescent -reflourish -reflourishment -reflow -reflower -refluctuation -refluence -refluency -refluent -reflush -reflux -refluxed -refly -refocillate -refocillation -refocus -refold -refoment -refont -refool -refoot -reforbid -reforce -reford -reforecast -reforest -reforestation -reforestization -reforestize -reforestment -reforfeit -reforfeiture -reforge -reforger -reforget -reforgive -reform -reformability -reformable -reformableness -reformado -reformandum -Reformati -reformation -reformational -reformationary -reformationist -reformative -reformatively -reformatness -reformatory -reformed -reformedly -reformer -reformeress -reformingly -reformism -reformist -reformistic -reformproof -reformulate -reformulation -reforsake -refortification -refortify -reforward -refound -refoundation -refounder -refract -refractable -refracted -refractedly -refractedness -refractile -refractility -refracting -refraction -refractional -refractionate -refractionist -refractive -refractively -refractiveness -refractivity -refractometer -refractometric -refractometry -refractor -refractorily -refractoriness -refractory -refracture -refragability -refragable -refragableness -refrain -refrainer -refrainment -reframe -refrangent -refrangibility -refrangible -refrangibleness -refreeze -refrenation -refrenzy -refresh -refreshant -refreshen -refreshener -refresher -refreshful -refreshfully -refreshing -refreshingly -refreshingness -refreshment -refrigerant -refrigerate -refrigerating -refrigeration -refrigerative -refrigerator -refrigeratory -refrighten -refringence -refringency -refringent -refront -refrustrate -reft -refuel -refueling -refuge -refugee -refugeeism -refugeeship -refulge -refulgence -refulgency -refulgent -refulgently -refulgentness -refunction -refund -refunder -refundment -refurbish -refurbishment -refurl -refurnish -refurnishment -refusable -refusal -refuse -refuser -refusing -refusingly -refusion -refusive -refutability -refutable -refutably -refutal -refutation -refutative -refutatory -refute -refuter -reg -regain -regainable -regainer -regainment -regal -regale -Regalecidae -Regalecus -regalement -regaler -regalia -regalian -regalism -regalist -regality -regalize -regallop -regally -regalness -regalvanization -regalvanize -regard -regardable -regardance -regardancy -regardant -regarder -regardful -regardfully -regardfulness -regarding -regardless -regardlessly -regardlessness -regarment -regarnish -regarrison -regather -regatta -regauge -regelate -regelation -regency -regeneracy -regenerance -regenerant -regenerate -regenerateness -regeneration -regenerative -regeneratively -regenerator -regeneratory -regeneratress -regeneratrix -regenesis -regent -regental -regentess -regentship -regerminate -regermination -reges -reget -Regga -Reggie -regia -regicidal -regicide -regicidism -regift -regifuge -regild -regill -regime -regimen -regimenal -regiment -regimental -regimentaled -regimentalled -regimentally -regimentals -regimentary -regimentation -regiminal -regin -reginal -Reginald -region -regional -regionalism -regionalist -regionalistic -regionalization -regionalize -regionally -regionary -regioned -register -registered -registerer -registership -registrability -registrable -registral -registrant -registrar -registrarship -registrary -registrate -registration -registrational -registrationist -registrator -registrer -registry -regive -regladden -reglair -reglaze -regle -reglement -reglementary -reglementation -reglementist -reglet -reglorified -regloss -reglove -reglow -reglue -regma -regmacarp -regnal -regnancy -regnant -regnerable -regolith -regorge -regovern -regradation -regrade -regraduate -regraduation -regraft -regrant -regrasp -regrass -regrate -regrater -regratification -regratify -regrating -regratingly -regrator -regratress -regravel -regrede -regreen -regreet -regress -regression -regressionist -regressive -regressively -regressiveness -regressivity -regressor -regret -regretful -regretfully -regretfulness -regretless -regrettable -regrettableness -regrettably -regretter -regrettingly -regrind -regrinder -regrip -regroup -regroupment -regrow -regrowth -reguarantee -reguard -reguardant -reguide -regula -regulable -regular -Regulares -Regularia -regularity -regularization -regularize -regularizer -regularly -regularness -regulatable -regulate -regulated -regulation -regulationist -regulative -regulatively -regulator -regulatorship -regulatory -regulatress -regulatris -reguli -reguline -regulize -Regulus -regulus -regur -regurge -regurgitant -regurgitate -regurgitation -regush -reh -rehabilitate -rehabilitation -rehabilitative -rehair -rehale -rehallow -rehammer -rehandicap -rehandle -rehandler -rehandling -rehang -rehappen -reharden -reharm -reharmonize -reharness -reharrow -reharvest -rehash -rehaul -rehazard -rehead -reheal -reheap -rehear -rehearing -rehearsal -rehearse -rehearser -rehearten -reheat -reheater -Reheboth -rehedge -reheel -reheighten -Rehoboam -Rehoboth -Rehobothan -rehoe -rehoist -rehollow -rehonor -rehonour -rehood -rehook -rehoop -rehouse -rehumanize -rehumble -rehumiliate -rehumiliation -rehung -rehybridize -rehydrate -rehydration -rehypothecate -rehypothecation -rehypothecator -reichsgulden -Reichsland -Reichslander -reichsmark -reichspfennig -reichstaler -Reid -reidentification -reidentify -reif -reification -reify -reign -reignite -reignition -reignore -reillume -reilluminate -reillumination -reillumine -reillustrate -reillustration -reim -reimage -reimagination -reimagine -reimbark -reimbarkation -reimbibe -reimbody -reimbursable -reimburse -reimbursement -reimburser -reimbush -reimbushment -reimkennar -reimmerge -reimmerse -reimmersion -reimmigrant -reimmigration -reimpact -reimpark -reimpart -reimpatriate -reimpatriation -reimpel -reimplant -reimplantation -reimply -reimport -reimportation -reimportune -reimpose -reimposition -reimposure -reimpregnate -reimpress -reimpression -reimprint -reimprison -reimprisonment -reimprove -reimprovement -reimpulse -rein -reina -reinability -reinaugurate -reinauguration -reincapable -reincarnadine -reincarnate -reincarnation -reincarnationism -reincarnationist -reincense -reincentive -reincidence -reincidency -reincite -reinclination -reincline -reinclude -reinclusion -reincorporate -reincorporation -reincrease -reincrudate -reincrudation -reinculcate -reincur -reindebted -reindebtedness -reindeer -reindependence -reindicate -reindication -reindict -reindictment -reindifferent -reindorse -reinduce -reinducement -reindue -reindulge -reindulgence -Reiner -reinette -reinfect -reinfection -reinfectious -reinfer -reinfest -reinfestation -reinflame -reinflate -reinflation -reinflict -reinfliction -reinfluence -reinforce -reinforcement -reinforcer -reinform -reinfuse -reinfusion -reingraft -reingratiate -reingress -reinhabit -reinhabitation -Reinhard -reinherit -reinitiate -reinitiation -reinject -reinjure -reinless -reinoculate -reinoculation -reinquire -reinquiry -reins -reinsane -reinsanity -reinscribe -reinsert -reinsertion -reinsist -reinsman -reinspect -reinspection -reinspector -reinsphere -reinspiration -reinspire -reinspirit -reinstall -reinstallation -reinstallment -reinstalment -reinstate -reinstatement -reinstation -reinstator -reinstauration -reinstil -reinstill -reinstitute -reinstitution -reinstruct -reinstruction -reinsult -reinsurance -reinsure -reinsurer -reintegrate -reintegration -reintend -reinter -reintercede -reintercession -reinterchange -reinterest -reinterfere -reinterference -reinterment -reinterpret -reinterpretation -reinterrogate -reinterrogation -reinterrupt -reinterruption -reintervene -reintervention -reinterview -reinthrone -reintimate -reintimation -reintitule -reintrench -reintroduce -reintroduction -reintrude -reintrusion -reintuition -reintuitive -reinvade -reinvasion -reinvent -reinvention -reinventor -reinversion -reinvert -reinvest -reinvestigate -reinvestigation -reinvestiture -reinvestment -reinvigorate -reinvigoration -reinvitation -reinvite -reinvoice -reinvolve -Reinwardtia -reirrigate -reirrigation -reis -reisolation -reissuable -reissue -reissuement -reissuer -reit -reitbok -reitbuck -reitemize -reiter -reiterable -reiterance -reiterant -reiterate -reiterated -reiteratedly -reiteratedness -reiteration -reiterative -reiteratively -reiver -rejail -Rejang -reject -rejectable -rejectableness -rejectage -rejectamenta -rejecter -rejectingly -rejection -rejective -rejectment -rejector -rejerk -rejoice -rejoiceful -rejoicement -rejoicer -rejoicing -rejoicingly -rejoin -rejoinder -rejolt -rejourney -rejudge -rejumble -rejunction -rejustification -rejustify -rejuvenant -rejuvenate -rejuvenation -rejuvenative -rejuvenator -rejuvenesce -rejuvenescence -rejuvenescent -rejuvenize -Reki -rekick -rekill -rekindle -rekindlement -rekindler -reking -rekiss -reknit -reknow -rel -relabel -relace -relacquer -relade -reladen -relais -relament -relamp -reland -relap -relapper -relapsable -relapse -relapseproof -relapser -relapsing -relast -relaster -relata -relatability -relatable -relatch -relate -related -relatedness -relater -relatinization -relation -relational -relationality -relationally -relationary -relationism -relationist -relationless -relationship -relatival -relative -relatively -relativeness -relativism -relativist -relativistic -relativity -relativization -relativize -relator -relatrix -relatum -relaunch -relax -relaxable -relaxant -relaxation -relaxative -relaxatory -relaxed -relaxedly -relaxedness -relaxer -relay -relayman -relbun -relead -releap -relearn -releasable -release -releasee -releasement -releaser -releasor -releather -relection -relegable -relegate -relegation -relend -relent -relenting -relentingly -relentless -relentlessly -relentlessness -relentment -relessee -relessor -relet -reletter -relevance -relevancy -relevant -relevantly -relevate -relevation -relevator -relevel -relevy -reliability -reliable -reliableness -reliably -reliance -reliant -reliantly -reliberate -relic -relicary -relicense -relick -reliclike -relicmonger -relict -relicted -reliction -relief -reliefless -relier -relievable -relieve -relieved -relievedly -reliever -relieving -relievingly -relievo -relift -religate -religation -relight -relightable -relighten -relightener -relighter -religion -religionary -religionate -religioner -religionism -religionist -religionistic -religionize -religionless -religiose -religiosity -religious -religiously -religiousness -relime -relimit -relimitation -reline -reliner -relink -relinquent -relinquish -relinquisher -relinquishment -reliquaire -reliquary -reliquefy -reliquiae -reliquian -reliquidate -reliquidation -reliquism -relish -relishable -relisher -relishing -relishingly -relishsome -relishy -relist -relisten -relitigate -relive -Rellyan -Rellyanism -Rellyanite -reload -reloan -relocable -relocate -relocation -relocator -relock -relodge -relook -relose -relost -relot -relove -relower -relucent -reluct -reluctance -reluctancy -reluctant -reluctantly -reluctate -reluctation -reluctivity -relume -relumine -rely -remade -remagnetization -remagnetize -remagnification -remagnify -remail -remain -remainder -remainderman -remaindership -remainer -remains -remaintain -remaintenance -remake -remaker -reman -remanage -remanagement -remanation -remancipate -remancipation -remand -remandment -remanence -remanency -remanent -remanet -remanipulate -remanipulation -remantle -remanufacture -remanure -remap -remarch -remargin -remark -remarkability -remarkable -remarkableness -remarkably -remarkedly -remarker -remarket -remarque -remarriage -remarry -remarshal -remask -remass -remast -remasticate -remastication -rematch -rematerialize -remble -Rembrandt -Rembrandtesque -Rembrandtish -Rembrandtism -remeant -remeasure -remeasurement -remede -remediable -remediableness -remediably -remedial -remedially -remediation -remediless -remedilessly -remedilessness -remeditate -remeditation -remedy -remeet -remelt -remember -rememberability -rememberable -rememberably -rememberer -remembrance -remembrancer -remembrancership -rememorize -remenace -remend -remerge -remetal -remex -Remi -remica -remicate -remication -remicle -remiform -remigate -remigation -remiges -remigial -remigrant -remigrate -remigration -Remijia -remilitarization -remilitarize -remill -remimic -remind -remindal -reminder -remindful -remindingly -remineralization -remineralize -remingle -reminisce -reminiscence -reminiscenceful -reminiscencer -reminiscency -reminiscent -reminiscential -reminiscentially -reminiscently -reminiscer -reminiscitory -remint -remiped -remirror -remise -remisrepresent -remisrepresentation -remiss -remissful -remissibility -remissible -remissibleness -remission -remissive -remissively -remissiveness -remissly -remissness -remissory -remisunderstand -remit -remitment -remittable -remittal -remittance -remittancer -remittee -remittence -remittency -remittent -remittently -remitter -remittitur -remittor -remix -remixture -remnant -remnantal -remobilization -remobilize -Remoboth -remock -remodel -remodeler -remodeller -remodelment -remodification -remodify -remolade -remold -remollient -remonetization -remonetize -remonstrance -remonstrant -remonstrantly -remonstrate -remonstrating -remonstratingly -remonstration -remonstrative -remonstratively -remonstrator -remonstratory -remontado -remontant -remontoir -remop -remora -remord -remorse -remorseful -remorsefully -remorsefulness -remorseless -remorselessly -remorselessness -remorseproof -remortgage -remote -remotely -remoteness -remotion -remotive -remould -remount -removability -removable -removableness -removably -removal -remove -removed -removedly -removedness -removement -remover -removing -remultiplication -remultiply -remunerability -remunerable -remunerably -remunerate -remuneration -remunerative -remuneratively -remunerativeness -remunerator -remuneratory -remurmur -Remus -remuster -remutation -renable -renably -renail -Renaissance -renaissance -Renaissancist -Renaissant -renal -rename -Renardine -renascence -renascency -renascent -renascible -renascibleness -renature -renavigate -renavigation -rencontre -rencounter -renculus -rend -render -renderable -renderer -rendering -renderset -rendezvous -rendibility -rendible -rendition -rendlewood -rendrock -rendzina -reneague -Renealmia -renecessitate -reneg -renegade -renegadism -renegado -renegation -renege -reneger -reneglect -renegotiable -renegotiate -renegotiation -renegotiations -renegue -renerve -renes -renet -renew -renewability -renewable -renewably -renewal -renewedly -renewedness -renewer -renewment -renicardiac -renickel -renidification -renidify -reniform -Renilla -Renillidae -renin -renipericardial -reniportal -renipuncture -renish -renishly -renitence -renitency -renitent -renk -renky -renne -rennet -renneting -rennin -renniogen -renocutaneous -renogastric -renography -renointestinal -renominate -renomination -renopericardial -renopulmonary -renormalize -renotation -renotice -renotification -renotify -renounce -renounceable -renouncement -renouncer -renourish -renovate -renovater -renovatingly -renovation -renovative -renovator -renovatory -renovize -renown -renowned -renownedly -renownedness -renowner -renownful -renownless -rensselaerite -rent -rentability -rentable -rentage -rental -rentaler -rentaller -rented -rentee -renter -rentless -rentrant -rentrayeuse -Renu -renumber -renumerate -renumeration -renunciable -renunciance -renunciant -renunciate -renunciation -renunciative -renunciator -renunciatory -renunculus -renverse -renvoi -renvoy -reobject -reobjectivization -reobjectivize -reobligate -reobligation -reoblige -reobscure -reobservation -reobserve -reobtain -reobtainable -reobtainment -reoccasion -reoccupation -reoccupy -reoccur -reoccurrence -reoffend -reoffense -reoffer -reoffset -reoil -reometer -reomission -reomit -reopen -reoperate -reoperation -reoppose -reopposition -reoppress -reoppression -reorchestrate -reordain -reorder -reordinate -reordination -reorganization -reorganizationist -reorganize -reorganizer -reorient -reorientation -reornament -reoutfit -reoutline -reoutput -reoutrage -reovercharge -reoverflow -reovertake -reoverwork -reown -reoxidation -reoxidize -reoxygenate -reoxygenize -rep -repace -repacification -repacify -repack -repackage -repacker -repaganization -repaganize -repaganizer -repage -repaint -repair -repairable -repairableness -repairer -repairman -repale -repand -repandly -repandodentate -repandodenticulate -repandolobate -repandous -repandousness -repanel -repaper -reparability -reparable -reparably -reparagraph -reparate -reparation -reparative -reparatory -repark -repartable -repartake -repartee -reparticipate -reparticipation -repartition -repartitionable -repass -repassable -repassage -repasser -repast -repaste -repasture -repatch -repatency -repatent -repatriable -repatriate -repatriation -repatronize -repattern -repave -repavement -repawn -repay -repayable -repayal -repaying -repayment -repeal -repealability -repealable -repealableness -repealer -repealist -repealless -repeat -repeatability -repeatable -repeatal -repeated -repeatedly -repeater -repeg -repel -repellance -repellant -repellence -repellency -repellent -repellently -repeller -repelling -repellingly -repellingness -repen -repenetrate -repension -repent -repentable -repentance -repentant -repentantly -repenter -repentingly -repeople -reperceive -repercept -reperception -repercolation -repercuss -repercussion -repercussive -repercussively -repercussiveness -repercutient -reperform -reperformance -reperfume -reperible -repermission -repermit -reperplex -repersonalization -repersonalize -repersuade -repersuasion -repertoire -repertorial -repertorily -repertorium -repertory -reperusal -reperuse -repetend -repetition -repetitional -repetitionary -repetitious -repetitiously -repetitiousness -repetitive -repetitively -repetitiveness -repetitory -repetticoat -repew -Rephael -rephase -rephonate -rephosphorization -rephosphorize -rephotograph -rephrase -repic -repick -repicture -repiece -repile -repin -repine -repineful -repinement -repiner -repiningly -repipe -repique -repitch -repkie -replace -replaceability -replaceable -replacement -replacer -replait -replan -replane -replant -replantable -replantation -replanter -replaster -replate -replay -replead -repleader -repleat -repledge -repledger -replenish -replenisher -replenishingly -replenishment -replete -repletely -repleteness -repletion -repletive -repletively -repletory -repleviable -replevin -replevisable -replevisor -replevy -repliant -replica -replicate -replicated -replicatile -replication -replicative -replicatively -replicatory -replier -replight -replod -replot -replotment -replotter -replough -replow -replum -replume -replunder -replunge -reply -replyingly -repocket -repoint -repolish -repoll -repollute -repolon -repolymerization -repolymerize -reponder -repone -repope -repopulate -repopulation -report -reportable -reportage -reportedly -reporter -reporteress -reporterism -reportership -reportingly -reportion -reportorial -reportorially -reposal -repose -reposed -reposedly -reposedness -reposeful -reposefully -reposefulness -reposer -reposit -repositary -reposition -repositor -repository -repossess -repossession -repossessor -repost -repostpone -repot -repound -repour -repowder -repp -repped -repractice -repray -repreach -reprecipitate -reprecipitation -repredict -reprefer -reprehend -reprehendable -reprehendatory -reprehender -reprehensibility -reprehensible -reprehensibleness -reprehensibly -reprehension -reprehensive -reprehensively -reprehensory -repreparation -reprepare -represcribe -represent -representability -representable -representamen -representant -representation -representational -representationalism -representationalist -representationary -representationism -representationist -representative -representatively -representativeness -representativeship -representativity -representer -representment -represide -repress -repressed -repressedly -represser -repressible -repressibly -repression -repressionary -repressionist -repressive -repressively -repressiveness -repressment -repressor -repressory -repressure -reprice -reprieval -reprieve -repriever -reprimand -reprimander -reprimanding -reprimandingly -reprime -reprimer -reprint -reprinter -reprisal -reprisalist -reprise -repristinate -repristination -reprivatization -reprivatize -reprivilege -reproach -reproachable -reproachableness -reproachably -reproacher -reproachful -reproachfully -reproachfulness -reproachingly -reproachless -reproachlessness -reprobacy -reprobance -reprobate -reprobateness -reprobater -reprobation -reprobationary -reprobationer -reprobative -reprobatively -reprobator -reprobatory -reproceed -reprocess -reproclaim -reproclamation -reprocurable -reprocure -reproduce -reproduceable -reproducer -reproducibility -reproducible -reproduction -reproductionist -reproductive -reproductively -reproductiveness -reproductivity -reproductory -reprofane -reprofess -reprohibit -repromise -repromulgate -repromulgation -repronounce -repronunciation -reproof -reproofless -repropagate -repropitiate -repropitiation -reproportion -reproposal -repropose -reprosecute -reprosecution -reprosper -reprotect -reprotection -reprotest -reprovable -reprovableness -reprovably -reproval -reprove -reprover -reprovide -reprovingly -reprovision -reprovocation -reprovoke -reprune -reps -reptant -reptatorial -reptatory -reptile -reptiledom -reptilelike -reptilferous -Reptilia -reptilian -reptiliary -reptiliform -reptilious -reptiliousness -reptilism -reptility -reptilivorous -reptiloid -republic -republican -republicanism -republicanization -republicanize -republicanizer -republication -republish -republisher -republishment -repuddle -repudiable -repudiate -repudiation -repudiationist -repudiative -repudiator -repudiatory -repuff -repugn -repugnable -repugnance -repugnancy -repugnant -repugnantly -repugnantness -repugnate -repugnatorial -repugner -repullulate -repullulation -repullulative -repullulescent -repulpit -repulse -repulseless -repulseproof -repulser -repulsion -repulsive -repulsively -repulsiveness -repulsory -repulverize -repump -repunish -repunishment -repurchase -repurchaser -repurge -repurification -repurify -repurple -repurpose -repursue -repursuit -reputability -reputable -reputableness -reputably -reputation -reputationless -reputative -reputatively -repute -reputed -reputedly -reputeless -requalification -requalify -requarantine -requeen -requench -request -requester -requestion -requiem -Requienia -requiescence -requin -requirable -require -requirement -requirer -requisite -requisitely -requisiteness -requisition -requisitionary -requisitioner -requisitionist -requisitor -requisitorial -requisitory -requit -requitable -requital -requitative -requite -requiteful -requitement -requiter -requiz -requotation -requote -rerack -reracker -reradiation -rerail -reraise -rerake -rerank -rerate -reread -rereader -rerebrace -reredos -reree -rereel -rereeve -rerefief -reregister -reregistration -reregulate -reregulation -rereign -reremouse -rerent -rerental -reresupper -rerig -rering -rerise -rerival -rerivet -rerob -rerobe -reroll -reroof -reroot -rerope -reroute -rerow -reroyalize -rerub -rerummage -rerun -resaca -resack -resacrifice -resaddle -resail -resalable -resale -resalt -resalutation -resalute -resalvage -resample -resanctify -resanction -resatisfaction -resatisfy -resaw -resawer -resawyer -resay -resazurin -rescan -reschedule -rescind -rescindable -rescinder -rescindment -rescissible -rescission -rescissory -rescore -rescramble -rescratch -rescribe -rescript -rescription -rescriptive -rescriptively -rescrub -rescuable -rescue -rescueless -rescuer -reseal -reseam -research -researcher -researchful -researchist -reseat -resecrete -resecretion -resect -resection -resectional -Reseda -reseda -Resedaceae -resedaceous -resee -reseed -reseek -resegment -resegmentation -reseise -reseiser -reseize -reseizer -reseizure -reselect -reselection -reself -resell -reseller -resemblable -resemblance -resemblant -resemble -resembler -resemblingly -reseminate -resend -resene -resensation -resensitization -resensitize -resent -resentationally -resentence -resenter -resentful -resentfullness -resentfully -resentience -resentingly -resentless -resentment -resepulcher -resequent -resequester -resequestration -reserene -reservable -reserval -reservation -reservationist -reservatory -reserve -reserved -reservedly -reservedness -reservee -reserveful -reserveless -reserver -reservery -reservice -reservist -reservoir -reservor -reset -resettable -resetter -resettle -resettlement -resever -resew -resex -resh -reshake -reshape -reshare -resharpen -reshave -reshear -reshearer -resheathe -reshelve -reshift -reshine -reshingle -reship -reshipment -reshipper -reshoe -reshoot -reshoulder -reshovel -reshower -reshrine -reshuffle -reshun -reshunt -reshut -reshuttle -resiccate -reside -residence -residencer -residency -resident -residental -residenter -residential -residentiality -residentially -residentiary -residentiaryship -residentship -resider -residua -residual -residuary -residuation -residue -residuent -residuous -residuum -resift -resigh -resign -resignal -resignatary -resignation -resignationism -resigned -resignedly -resignedness -resignee -resigner -resignful -resignment -resile -resilement -resilial -resiliate -resilience -resiliency -resilient -resilifer -resiliometer -resilition -resilium -resilver -resin -resina -resinaceous -resinate -resinbush -resiner -resinfiable -resing -resinic -resiniferous -resinification -resinifluous -resiniform -resinify -resinize -resink -resinlike -resinoelectric -resinoextractive -resinogenous -resinoid -resinol -resinolic -resinophore -resinosis -resinous -resinously -resinousness -resinovitreous -resiny -resipiscence -resipiscent -resist -resistability -resistable -resistableness -resistance -resistant -resistantly -resister -resistful -resistibility -resistible -resistibleness -resistibly -resisting -resistingly -resistive -resistively -resistiveness -resistivity -resistless -resistlessly -resistlessness -resistor -resitting -resize -resizer -resketch -reskin -reslash -reslate -reslay -reslide -reslot -resmell -resmelt -resmile -resmooth -resnap -resnatch -resnatron -resnub -resoak -resoap -resoften -resoil -resojourn -resolder -resole -resolemnize -resolicit -resolidification -resolidify -resolubility -resoluble -resolubleness -resolute -resolutely -resoluteness -resolution -resolutioner -resolutionist -resolutory -resolvability -resolvable -resolvableness -resolvancy -resolve -resolved -resolvedly -resolvedness -resolvent -resolver -resolvible -resonance -resonancy -resonant -resonantly -resonate -resonator -resonatory -resoothe -resorb -resorbence -resorbent -resorcin -resorcine -resorcinism -resorcinol -resorcinolphthalein -resorcinum -resorcylic -resorption -resorptive -resort -resorter -resorufin -resought -resound -resounder -resounding -resoundingly -resource -resourceful -resourcefully -resourcefulness -resourceless -resourcelessness -resoutive -resow -resp -respace -respade -respan -respangle -resparkle -respeak -respect -respectability -respectabilize -respectable -respectableness -respectably -respectant -respecter -respectful -respectfully -respectfulness -respecting -respective -respectively -respectiveness -respectless -respectlessly -respectlessness -respectworthy -respell -respersive -respin -respirability -respirable -respirableness -respiration -respirational -respirative -respirator -respiratored -respiratorium -respiratory -respire -respirit -respirometer -respite -respiteless -resplend -resplendence -resplendency -resplendent -resplendently -resplice -resplit -respoke -respond -responde -respondence -respondency -respondent -respondentia -responder -responsal -responsary -response -responseless -responser -responsibility -responsible -responsibleness -responsibly -responsion -responsive -responsively -responsiveness -responsivity -responsorial -responsory -respot -respray -respread -respring -resprout -respue -resquare -resqueak -ressaidar -ressala -ressaldar -ressaut -rest -restable -restack -restaff -restain -restainable -restake -restamp -restandardization -restandardize -restant -restart -restate -restatement -restaur -restaurant -restaurate -restaurateur -restauration -restbalk -resteal -resteel -resteep -restem -restep -rester -resterilize -restes -restful -restfully -restfulness -restharrow -resthouse -Restiaceae -restiaceous -restiad -restibrachium -restiff -restiffen -restiffener -restiffness -restifle -restiform -restigmatize -restimulate -restimulation -resting -restingly -Restio -Restionaceae -restionaceous -restipulate -restipulation -restipulatory -restir -restis -restitch -restitute -restitution -restitutionism -restitutionist -restitutive -restitutor -restitutory -restive -restively -restiveness -restless -restlessly -restlessness -restock -restopper -restorable -restorableness -restoral -restoration -restorationer -restorationism -restorationist -restorative -restoratively -restorativeness -restorator -restoratory -restore -restorer -restow -restowal -restproof -restraighten -restrain -restrainability -restrained -restrainedly -restrainedness -restrainer -restraining -restrainingly -restraint -restraintful -restrap -restratification -restream -restrengthen -restress -restretch -restrict -restricted -restrictedly -restrictedness -restriction -restrictionary -restrictionist -restrictive -restrictively -restrictiveness -restrike -restring -restringe -restringency -restringent -restrip -restrive -restroke -restudy -restuff -restward -restwards -resty -restyle -resubject -resubjection -resubjugate -resublimation -resublime -resubmerge -resubmission -resubmit -resubordinate -resubscribe -resubscriber -resubscription -resubstitute -resubstitution -resucceed -resuck -resudation -resue -resuffer -resufferance -resuggest -resuggestion -resuing -resuit -result -resultance -resultancy -resultant -resultantly -resultative -resultful -resultfully -resulting -resultingly -resultive -resultless -resultlessly -resultlessness -resumability -resumable -resume -resumer -resummon -resummons -resumption -resumptive -resumptively -resun -resup -resuperheat -resupervise -resupinate -resupinated -resupination -resupine -resupply -resupport -resuppose -resupposition -resuppress -resuppression -resurface -resurge -resurgence -resurgency -resurgent -resurprise -resurrect -resurrectible -resurrection -resurrectional -resurrectionary -resurrectioner -resurrectioning -resurrectionism -resurrectionist -resurrectionize -resurrective -resurrector -resurrender -resurround -resurvey -resuscitable -resuscitant -resuscitate -resuscitation -resuscitative -resuscitator -resuspect -resuspend -resuspension -reswage -reswallow -resward -reswarm -reswear -resweat -resweep -reswell -reswill -reswim -resyllabification -resymbolization -resymbolize -resynthesis -resynthesize -ret -retable -retack -retackle -retag -retail -retailer -retailment -retailor -retain -retainability -retainable -retainableness -retainal -retainder -retainer -retainership -retaining -retake -retaker -retaliate -retaliation -retaliationist -retaliative -retaliator -retaliatory -retalk -retama -retame -retan -retanner -retape -retard -retardance -retardant -retardate -retardation -retardative -retardatory -retarded -retardence -retardent -retarder -retarding -retardingly -retardive -retardment -retardure -retare -retariff -retaste -retation -retattle -retax -retaxation -retch -reteach -retecious -retelegraph -retelephone -retell -retelling -retem -retemper -retempt -retemptation -retenant -retender -retene -retent -retention -retentionist -retentive -retentively -retentiveness -retentivity -retentor -Retepora -retepore -Reteporidae -retest -retexture -rethank -rethatch -rethaw -rethe -retheness -rethicken -rethink -rethrash -rethread -rethreaten -rethresh -rethresher -rethrill -rethrive -rethrone -rethrow -rethrust -rethunder -retia -retial -Retiariae -retiarian -retiarius -retiary -reticella -reticello -reticence -reticency -reticent -reticently -reticket -reticle -reticula -reticular -Reticularia -reticularian -reticularly -reticulary -reticulate -reticulated -reticulately -reticulation -reticulatocoalescent -reticulatogranulate -reticulatoramose -reticulatovenose -reticule -reticuled -reticulin -reticulitis -reticulocyte -reticulocytosis -reticuloramose -Reticulosa -reticulose -reticulovenose -reticulum -retie -retier -retiform -retighten -retile -retill -retimber -retime -retin -retina -retinacular -retinaculate -retinaculum -retinal -retinalite -retinasphalt -retinasphaltum -retincture -retinene -retinerved -retinian -retinispora -retinite -retinitis -retinize -retinker -retinoblastoma -retinochorioid -retinochorioidal -retinochorioiditis -retinoid -retinol -retinopapilitis -retinophoral -retinophore -retinoscope -retinoscopic -retinoscopically -retinoscopist -retinoscopy -Retinospora -retinue -retinula -retinular -retinule -retip -retiracied -retiracy -retirade -retiral -retire -retired -retiredly -retiredness -retirement -retirer -retiring -retiringly -retiringness -retistene -retoast -retold -retolerate -retoleration -retomb -retonation -retook -retool -retooth -retoother -retort -retortable -retorted -retorter -retortion -retortive -retorture -retoss -retotal -retouch -retoucher -retouching -retouchment -retour -retourable -retrace -retraceable -retracement -retrack -retract -retractability -retractable -retractation -retracted -retractibility -retractible -retractile -retractility -retraction -retractive -retractively -retractiveness -retractor -retrad -retrade -retradition -retrahent -retrain -retral -retrally -retramp -retrample -retranquilize -retranscribe -retranscription -retransfer -retransference -retransfigure -retransform -retransformation -retransfuse -retransit -retranslate -retranslation -retransmission -retransmissive -retransmit -retransmute -retransplant -retransport -retransportation -retravel -retraverse -retraxit -retread -retreat -retreatal -retreatant -retreater -retreatful -retreating -retreatingness -retreative -retreatment -retree -retrench -retrenchable -retrencher -retrenchment -retrial -retribute -retribution -retributive -retributively -retributor -retributory -retricked -retrievability -retrievable -retrievableness -retrievably -retrieval -retrieve -retrieveless -retrievement -retriever -retrieverish -retrim -retrimmer -retrip -retroact -retroaction -retroactive -retroactively -retroactivity -retroalveolar -retroauricular -retrobronchial -retrobuccal -retrobulbar -retrocaecal -retrocardiac -retrocecal -retrocede -retrocedence -retrocedent -retrocervical -retrocession -retrocessional -retrocessionist -retrocessive -retrochoir -retroclavicular -retroclusion -retrocognition -retrocognitive -retrocolic -retroconsciousness -retrocopulant -retrocopulation -retrocostal -retrocouple -retrocoupler -retrocurved -retrodate -retrodeviation -retrodisplacement -retroduction -retrodural -retroesophageal -retroflected -retroflection -retroflex -retroflexed -retroflexion -retroflux -retroform -retrofract -retrofracted -retrofrontal -retrogastric -retrogenerative -retrogradation -retrogradatory -retrograde -retrogradely -retrogradient -retrogradingly -retrogradism -retrogradist -retrogress -retrogression -retrogressionist -retrogressive -retrogressively -retrohepatic -retroinfection -retroinsular -retroiridian -retroject -retrojection -retrojugular -retrolabyrinthine -retrolaryngeal -retrolingual -retrolocation -retromammary -retromammillary -retromandibular -retromastoid -retromaxillary -retromigration -retromingent -retromingently -retromorphosed -retromorphosis -retronasal -retroperitoneal -retroperitoneally -retropharyngeal -retropharyngitis -retroplacental -retroplexed -retroposed -retroposition -retropresbyteral -retropubic -retropulmonary -retropulsion -retropulsive -retroreception -retrorectal -retroreflective -retrorenal -retrorse -retrorsely -retroserrate -retroserrulate -retrospect -retrospection -retrospective -retrospectively -retrospectiveness -retrospectivity -retrosplenic -retrostalsis -retrostaltic -retrosternal -retrosusception -retrot -retrotarsal -retrotemporal -retrothyroid -retrotracheal -retrotransfer -retrotransference -retrotympanic -retrousse -retrovaccinate -retrovaccination -retrovaccine -retroverse -retroversion -retrovert -retrovision -retroxiphoid -retrude -retrue -retrusible -retrusion -retrust -retry -retted -retter -rettery -retting -rettory -retube -retuck -retumble -retumescence -retune -returban -returf -returfer -return -returnability -returnable -returned -returner -returnless -returnlessly -retuse -retwine -retwist -retying -retype -retzian -Reub -Reuben -Reubenites -Reuchlinian -Reuchlinism -Reuel -reundercut -reundergo -reundertake -reundulate -reundulation -reune -reunfold -reunification -reunify -reunion -reunionism -reunionist -reunionistic -reunitable -reunite -reunitedly -reuniter -reunition -reunitive -reunpack -reuphold -reupholster -reuplift -reurge -reuse -reutilization -reutilize -reutter -reutterance -rev -revacate -revaccinate -revaccination -revalenta -revalescence -revalescent -revalidate -revalidation -revalorization -revalorize -revaluate -revaluation -revalue -revamp -revamper -revampment -revaporization -revaporize -revarnish -revary -reve -reveal -revealability -revealable -revealableness -revealed -revealedly -revealer -revealing -revealingly -revealingness -revealment -revegetate -revegetation -revehent -reveil -reveille -revel -revelability -revelant -revelation -revelational -revelationer -revelationist -revelationize -revelative -revelator -revelatory -reveler -revellent -revelly -revelment -revelrout -revelry -revenant -revend -revender -revendicate -revendication -reveneer -revenge -revengeable -revengeful -revengefully -revengefulness -revengeless -revengement -revenger -revengingly -revent -reventilate -reventure -revenual -revenue -revenued -revenuer -rever -reverable -reverb -reverbatory -reverberant -reverberate -reverberation -reverberative -reverberator -reverberatory -reverbrate -reverdure -revere -revered -reverence -reverencer -reverend -reverendly -reverendship -reverent -reverential -reverentiality -reverentially -reverentialness -reverently -reverentness -reverer -reverie -reverification -reverify -reverist -revers -reversability -reversable -reversal -reverse -reversed -reversedly -reverseful -reverseless -reversely -reversement -reverser -reverseways -reversewise -reversi -reversibility -reversible -reversibleness -reversibly -reversification -reversifier -reversify -reversing -reversingly -reversion -reversionable -reversional -reversionally -reversionary -reversioner -reversionist -reversis -reversist -reversive -reverso -revert -revertal -reverter -revertibility -revertible -revertive -revertively -revery -revest -revestiary -revestry -revet -revete -revetement -revetment -revibrate -revibration -revibrational -revictorious -revictory -revictual -revictualment -revie -review -reviewability -reviewable -reviewage -reviewal -reviewer -revieweress -reviewish -reviewless -revigorate -revigoration -revile -revilement -reviler -reviling -revilingly -revindicate -revindication -reviolate -reviolation -revirescence -revirescent -Revisable -revisable -revisableness -revisal -revise -Revised -revisee -reviser -revisership -revisible -revision -revisional -revisionary -revisionism -revisionist -revisit -revisitant -revisitation -revisor -revisory -revisualization -revisualize -revitalization -revitalize -revitalizer -revivability -revivable -revivably -revival -revivalism -revivalist -revivalistic -revivalize -revivatory -revive -revivement -reviver -revivification -revivifier -revivify -reviving -revivingly -reviviscence -reviviscency -reviviscent -reviviscible -revivor -revocability -revocable -revocableness -revocably -revocation -revocative -revocatory -revoice -revokable -revoke -revokement -revoker -revokingly -revolant -revolatilize -revolt -revolter -revolting -revoltingly -revoltress -revolubility -revoluble -revolubly -revolunteer -revolute -revoluted -revolution -revolutional -revolutionally -revolutionarily -revolutionariness -revolutionary -revolutioneering -revolutioner -revolutionism -revolutionist -revolutionize -revolutionizement -revolutionizer -revolvable -revolvably -revolve -revolvement -revolvency -revolver -revolving -revolvingly -revomit -revote -revue -revuette -revuist -revulsed -revulsion -revulsionary -revulsive -revulsively -rewade -rewager -rewake -rewaken -rewall -rewallow -reward -rewardable -rewardableness -rewardably -rewardedly -rewarder -rewardful -rewardfulness -rewarding -rewardingly -rewardless -rewardproof -rewarehouse -rewarm -rewarn -rewash -rewater -rewave -rewax -rewaybill -rewayle -reweaken -rewear -reweave -rewed -reweigh -reweigher -reweight -rewelcome -reweld -rewend -rewet -rewhelp -rewhirl -rewhisper -rewhiten -rewiden -rewin -rewind -rewinder -rewirable -rewire -rewish -rewithdraw -rewithdrawal -rewood -reword -rework -reworked -rewound -rewove -rewoven -rewrap -rewrite -rewriter -Rex -rex -rexen -reyield -Reynard -Reynold -reyoke -reyouth -rezbanyite -rhabdite -rhabditiform -Rhabditis -rhabdium -Rhabdocarpum -Rhabdocoela -rhabdocoelan -rhabdocoele -Rhabdocoelida -rhabdocoelidan -rhabdocoelous -rhabdoid -rhabdoidal -rhabdolith -rhabdom -rhabdomal -rhabdomancer -rhabdomancy -rhabdomantic -rhabdomantist -Rhabdomonas -rhabdomyoma -rhabdomyosarcoma -rhabdomysarcoma -rhabdophane -rhabdophanite -Rhabdophora -rhabdophoran -Rhabdopleura -rhabdopod -rhabdos -rhabdosome -rhabdosophy -rhabdosphere -rhabdus -Rhacianectes -Rhacomitrium -Rhacophorus -Rhadamanthine -Rhadamanthus -Rhadamanthys -Rhaetian -Rhaetic -rhagades -rhagadiform -rhagiocrin -rhagionid -Rhagionidae -rhagite -Rhagodia -rhagon -rhagonate -rhagose -rhamn -Rhamnaceae -rhamnaceous -rhamnal -Rhamnales -rhamnetin -rhamninase -rhamninose -rhamnite -rhamnitol -rhamnohexite -rhamnohexitol -rhamnohexose -rhamnonic -rhamnose -rhamnoside -Rhamnus -rhamphoid -Rhamphorhynchus -Rhamphosuchus -rhamphotheca -Rhapidophyllum -Rhapis -rhapontic -rhaponticin -rhapontin -rhapsode -rhapsodic -rhapsodical -rhapsodically -rhapsodie -rhapsodism -rhapsodist -rhapsodistic -rhapsodize -rhapsodomancy -rhapsody -Rhaptopetalaceae -rhason -rhasophore -rhatania -rhatany -rhe -Rhea -rhea -rheadine -Rheae -rhebok -rhebosis -rheeboc -rheebok -rheen -rhegmatype -rhegmatypy -Rhegnopteri -rheic -Rheidae -Rheiformes -rhein -rheinic -rhema -rhematic -rhematology -rheme -Rhemish -Rhemist -Rhenish -rhenium -rheobase -rheocrat -rheologist -rheology -rheometer -rheometric -rheometry -rheophile -rheophore -rheophoric -rheoplankton -rheoscope -rheoscopic -rheostat -rheostatic -rheostatics -rheotactic -rheotan -rheotaxis -rheotome -rheotrope -rheotropic -rheotropism -rhesian -rhesus -rhetor -rhetoric -rhetorical -rhetorically -rhetoricalness -rhetoricals -rhetorician -rhetorize -Rheum -rheum -rheumarthritis -rheumatalgia -rheumatic -rheumatical -rheumatically -rheumaticky -rheumatism -rheumatismal -rheumatismoid -rheumative -rheumatiz -rheumatize -rheumatoid -rheumatoidal -rheumatoidally -rheumed -rheumic -rheumily -rheuminess -rheumy -Rhexia -rhexis -rhigolene -rhigosis -rhigotic -Rhina -rhinal -rhinalgia -Rhinanthaceae -Rhinanthus -rhinarium -rhincospasm -rhine -Rhineland -Rhinelander -rhinencephalic -rhinencephalon -rhinencephalous -rhinenchysis -Rhineodon -Rhineodontidae -rhinestone -Rhineura -rhineurynter -Rhinidae -rhinion -rhinitis -rhino -Rhinobatidae -Rhinobatus -rhinobyon -rhinocaul -rhinocele -rhinocelian -rhinocerial -rhinocerian -rhinocerine -rhinoceroid -rhinoceros -rhinoceroslike -rhinocerotic -Rhinocerotidae -rhinocerotiform -rhinocerotine -rhinocerotoid -rhinochiloplasty -Rhinoderma -rhinodynia -rhinogenous -rhinolalia -rhinolaryngology -rhinolaryngoscope -rhinolite -rhinolith -rhinolithic -rhinological -rhinologist -rhinology -rhinolophid -Rhinolophidae -rhinolophine -rhinopharyngeal -rhinopharyngitis -rhinopharynx -Rhinophidae -Rhinophis -rhinophonia -rhinophore -rhinophyma -rhinoplastic -rhinoplasty -rhinopolypus -Rhinoptera -Rhinopteridae -rhinorrhagia -rhinorrhea -rhinorrheal -rhinoscleroma -rhinoscope -rhinoscopic -rhinoscopy -rhinosporidiosis -Rhinosporidium -rhinotheca -rhinothecal -Rhinthonic -Rhinthonica -rhipidate -rhipidion -Rhipidistia -rhipidistian -rhipidium -Rhipidoglossa -rhipidoglossal -rhipidoglossate -Rhipidoptera -rhipidopterous -rhipiphorid -Rhipiphoridae -Rhipiptera -rhipipteran -rhipipterous -Rhipsalis -Rhiptoglossa -rhizanthous -rhizautoicous -Rhizina -Rhizinaceae -rhizine -rhizinous -Rhizobium -rhizocarp -Rhizocarpeae -rhizocarpean -rhizocarpian -rhizocarpic -rhizocarpous -rhizocaul -rhizocaulus -Rhizocephala -rhizocephalan -rhizocephalous -rhizocorm -Rhizoctonia -rhizoctoniose -rhizodermis -Rhizodus -Rhizoflagellata -rhizoflagellate -rhizogen -rhizogenetic -rhizogenic -rhizogenous -rhizoid -rhizoidal -rhizoma -rhizomatic -rhizomatous -rhizome -rhizomelic -rhizomic -rhizomorph -rhizomorphic -rhizomorphoid -rhizomorphous -rhizoneure -rhizophagous -rhizophilous -Rhizophora -Rhizophoraceae -rhizophoraceous -rhizophore -rhizophorous -rhizophyte -rhizoplast -rhizopod -Rhizopoda -rhizopodal -rhizopodan -rhizopodist -rhizopodous -Rhizopogon -Rhizopus -rhizosphere -Rhizostomae -Rhizostomata -rhizostomatous -rhizostome -rhizostomous -Rhizota -rhizotaxis -rhizotaxy -rhizote -rhizotic -rhizotomi -rhizotomy -rho -Rhoda -rhodaline -Rhodamine -rhodamine -rhodanate -Rhodanian -rhodanic -rhodanine -rhodanthe -rhodeose -Rhodes -Rhodesian -Rhodesoid -rhodeswood -Rhodian -rhodic -rhoding -rhodinol -rhodite -rhodium -rhodizite -rhodizonic -Rhodobacteriaceae -Rhodobacterioideae -rhodochrosite -Rhodococcus -Rhodocystis -rhodocyte -rhododendron -rhodolite -Rhodomelaceae -rhodomelaceous -rhodonite -Rhodope -rhodophane -Rhodophyceae -rhodophyceous -rhodophyll -Rhodophyllidaceae -Rhodophyta -rhodoplast -rhodopsin -Rhodora -Rhodoraceae -rhodorhiza -rhodosperm -Rhodospermeae -rhodospermin -rhodospermous -Rhodospirillum -Rhodothece -Rhodotypos -Rhodymenia -Rhodymeniaceae -rhodymeniaceous -Rhodymeniales -Rhoeadales -Rhoecus -Rhoeo -rhomb -rhombencephalon -rhombenporphyr -rhombic -rhombical -rhombiform -rhomboclase -rhomboganoid -Rhomboganoidei -rhombogene -rhombogenic -rhombogenous -rhombohedra -rhombohedral -rhombohedrally -rhombohedric -rhombohedron -rhomboid -rhomboidal -rhomboidally -rhomboideus -rhomboidly -rhomboquadratic -rhomborectangular -rhombos -rhombovate -Rhombozoa -rhombus -rhonchal -rhonchial -rhonchus -Rhonda -rhopalic -rhopalism -rhopalium -Rhopalocera -rhopaloceral -rhopalocerous -Rhopalura -rhotacism -rhotacismus -rhotacistic -rhotacize -rhubarb -rhubarby -rhumb -rhumba -rhumbatron -Rhus -rhyacolite -rhyme -rhymeless -rhymelet -rhymemaker -rhymemaking -rhymeproof -rhymer -rhymery -rhymester -rhymewise -rhymic -rhymist -rhymy -Rhynchobdellae -Rhynchobdellida -Rhynchocephala -Rhynchocephali -Rhynchocephalia -rhynchocephalian -rhynchocephalic -rhynchocephalous -Rhynchocoela -rhynchocoelan -rhynchocoelic -rhynchocoelous -rhyncholite -Rhynchonella -Rhynchonellacea -Rhynchonellidae -rhynchonelloid -Rhynchophora -rhynchophoran -rhynchophore -rhynchophorous -Rhynchopinae -Rhynchops -Rhynchosia -Rhynchospora -Rhynchota -rhynchotal -rhynchote -rhynchotous -rhynconellid -Rhyncostomi -Rhynia -Rhyniaceae -Rhynocheti -Rhynsburger -rhyobasalt -rhyodacite -rhyolite -rhyolitic -rhyotaxitic -rhyparographer -rhyparographic -rhyparographist -rhyparography -rhypography -rhyptic -rhyptical -rhysimeter -Rhyssa -rhythm -rhythmal -rhythmic -rhythmical -rhythmicality -rhythmically -rhythmicity -rhythmicize -rhythmics -rhythmist -rhythmizable -rhythmization -rhythmize -rhythmless -rhythmometer -rhythmopoeia -rhythmproof -Rhytidodon -rhytidome -rhytidosis -Rhytina -Rhytisma -rhyton -ria -rial -riancy -riant -riantly -riata -rib -ribald -ribaldish -ribaldly -ribaldrous -ribaldry -riband -Ribandism -Ribandist -ribandlike -ribandmaker -ribandry -ribat -ribaudequin -ribaudred -ribband -ribbandry -ribbed -ribber -ribbet -ribbidge -ribbing -ribble -ribbon -ribbonback -ribboner -ribbonfish -Ribbonism -ribbonlike -ribbonmaker -Ribbonman -ribbonry -ribbonweed -ribbonwood -ribbony -ribby -ribe -Ribes -Ribhus -ribless -riblet -riblike -riboflavin -ribonic -ribonuclease -ribonucleic -ribose -ribroast -ribroaster -ribroasting -ribskin -ribspare -Ribston -ribwork -ribwort -Ric -Ricardian -Ricardianism -Ricardo -Riccia -Ricciaceae -ricciaceous -Ricciales -rice -ricebird -riceland -ricer -ricey -Rich -rich -Richard -Richardia -Richardsonia -richdom -Richebourg -richellite -richen -riches -richesse -richling -richly -Richmond -Richmondena -richness -richt -richterite -richweed -ricin -ricine -ricinelaidic -ricinelaidinic -ricinic -ricinine -ricininic -ricinium -ricinoleate -ricinoleic -ricinolein -ricinolic -Ricinulei -Ricinus -ricinus -Rick -rick -rickardite -ricker -ricketily -ricketiness -ricketish -rickets -Rickettsia -rickettsial -Rickettsiales -rickettsialpox -rickety -rickey -rickle -rickmatic -rickrack -ricksha -rickshaw -rickstaddle -rickstand -rickstick -Ricky -rickyard -ricochet -ricolettaite -ricrac -rictal -rictus -rid -ridable -ridableness -ridably -riddam -riddance -riddel -ridden -ridder -ridding -riddle -riddlemeree -riddler -riddling -riddlingly -riddlings -ride -rideable -rideau -riden -rident -rider -ridered -rideress -riderless -ridge -ridgeband -ridgeboard -ridgebone -ridged -ridgel -ridgelet -ridgelike -ridgeling -ridgepiece -ridgeplate -ridgepole -ridgepoled -ridger -ridgerope -ridgetree -ridgeway -ridgewise -ridgil -ridging -ridgingly -ridgling -ridgy -ridibund -ridicule -ridiculer -ridiculize -ridiculosity -ridiculous -ridiculously -ridiculousness -riding -ridingman -ridotto -rie -riebeckite -riem -Riemannean -Riemannian -riempie -rier -Riesling -rife -rifely -rifeness -Riff -riff -Riffi -Riffian -riffle -riffler -riffraff -Rifi -Rifian -rifle -riflebird -rifledom -rifleman -riflemanship -rifleproof -rifler -riflery -rifleshot -rifling -rift -rifter -riftless -rifty -rig -rigadoon -rigamajig -rigamarole -rigation -rigbane -Rigel -Rigelian -rigescence -rigescent -riggald -rigger -rigging -riggish -riggite -riggot -right -rightabout -righten -righteous -righteously -righteousness -righter -rightful -rightfully -rightfulness -rightheaded -righthearted -rightist -rightle -rightless -rightlessness -rightly -rightmost -rightness -righto -rightship -rightward -rightwardly -rightwards -righty -rigid -rigidify -rigidist -rigidity -rigidly -rigidness -rigidulous -rigling -rigmaree -rigmarole -rigmarolery -rigmarolic -rigmarolish -rigmarolishly -rignum -rigol -rigolette -rigor -rigorism -rigorist -rigoristic -rigorous -rigorously -rigorousness -rigsby -rigsdaler -Rigsmaal -Rigsmal -rigwiddie -rigwiddy -Rik -Rikari -rikisha -rikk -riksha -rikshaw -Riksmaal -Riksmal -rilawa -rile -riley -rill -rillet -rillett -rillette -rillock -rillstone -rilly -rim -rima -rimal -rimate -rimbase -rime -rimeless -rimer -rimester -rimfire -rimiform -rimland -rimless -rimmaker -rimmaking -rimmed -rimmer -rimose -rimosely -rimosity -rimous -rimpi -rimple -rimption -rimrock -rimu -rimula -rimulose -rimy -Rinaldo -rinceau -rinch -rincon -Rind -rind -Rinde -rinded -rinderpest -rindle -rindless -rindy -rine -ring -ringable -Ringatu -ringbark -ringbarker -ringbill -ringbird -ringbolt -ringbone -ringboned -ringcraft -ringdove -ringe -ringed -ringent -ringer -ringeye -ringgiver -ringgiving -ringgoer -ringhals -ringhead -ringiness -ringing -ringingly -ringingness -ringite -ringle -ringlead -ringleader -ringleaderless -ringleadership -ringless -ringlet -ringleted -ringlety -ringlike -ringmaker -ringmaking -ringman -ringmaster -ringneck -ringsail -ringside -ringsider -ringster -ringtail -ringtaw -ringtime -ringtoss -ringwalk -ringwall -ringwise -ringworm -ringy -rink -rinka -rinker -rinkite -rinncefada -rinneite -rinner -rinsable -rinse -rinser -rinsing -rinthereout -rintherout -Rio -rio -riot -rioter -rioting -riotingly -riotist -riotistic -riotocracy -riotous -riotously -riotousness -riotproof -riotry -rip -ripa -ripal -riparial -riparian -Riparii -riparious -ripcord -ripe -ripelike -ripely -ripen -ripener -ripeness -ripening -ripeningly -riper -ripgut -ripicolous -ripidolite -ripienist -ripieno -ripier -ripost -riposte -rippable -ripper -ripperman -rippet -rippier -ripping -rippingly -rippingness -rippit -ripple -rippleless -rippler -ripplet -rippling -ripplingly -ripply -rippon -riprap -riprapping -ripsack -ripsaw -ripsnorter -ripsnorting -Ripuarian -ripup -riroriro -risala -risberm -rise -risen -riser -rishi -rishtadar -risibility -risible -risibleness -risibles -risibly -rising -risk -risker -riskful -riskfulness -riskily -riskiness -riskish -riskless -riskproof -risky -risorial -risorius -risp -risper -risque -risquee -Riss -rissel -risser -Rissian -rissle -Rissoa -rissoid -Rissoidae -rist -ristori -rit -Rita -rita -Ritalynne -ritardando -Ritchey -rite -riteless -ritelessness -ritling -ritornel -ritornelle -ritornello -Ritschlian -Ritschlianism -rittingerite -ritual -ritualism -ritualist -ritualistic -ritualistically -rituality -ritualize -ritualless -ritually -ritzy -riva -rivage -rival -rivalable -rivaless -rivalism -rivality -rivalize -rivalless -rivalrous -rivalry -rivalship -rive -rivel -rivell -riven -river -riverain -riverbank -riverbush -riverdamp -rivered -riverhead -riverhood -riverine -riverish -riverless -riverlet -riverlike -riverling -riverly -riverman -riverscape -riverside -riversider -riverward -riverwards -riverwash -riverway -riverweed -riverwise -rivery -rivet -riveter -rivethead -riveting -rivetless -rivetlike -Rivina -riving -rivingly -Rivinian -rivose -Rivularia -Rivulariaceae -rivulariaceous -rivulation -rivulet -rivulose -rix -rixatrix -rixy -riyal -riziform -rizzar -rizzle -rizzom -rizzomed -rizzonite -Ro -roach -roachback -road -roadability -roadable -roadbed -roadblock -roadbook -roadcraft -roaded -roader -roadfellow -roadhead -roadhouse -roading -roadite -roadless -roadlessness -roadlike -roadman -roadmaster -roadside -roadsider -roadsman -roadstead -roadster -roadstone -roadtrack -roadway -roadweed -roadwise -roadworthiness -roadworthy -roam -roamage -roamer -roaming -roamingly -roan -roanoke -roar -roarer -roaring -roaringly -roast -roastable -roaster -roasting -roastingly -Rob -rob -robalito -robalo -roband -robber -robberproof -robbery -Robbin -robbin -robbing -robe -robeless -Robenhausian -rober -roberd -Roberdsman -Robert -Roberta -Roberto -Robigalia -Robigus -Robin -robin -robinet -robing -Robinia -robinin -robinoside -roble -robomb -roborant -roborate -roboration -roborative -roborean -roboreous -robot -robotesque -robotian -robotism -robotistic -robotization -robotize -robotlike -robotry -robur -roburite -robust -robustful -robustfully -robustfulness -robustic -robusticity -robustious -robustiously -robustiousness -robustity -robustly -robustness -roc -rocambole -Roccella -Roccellaceae -roccellic -roccellin -roccelline -Rochea -rochelime -Rochelle -rocher -rochet -rocheted -rock -rockable -rockably -rockaby -rockabye -rockallite -Rockaway -rockaway -rockbell -rockberry -rockbird -rockborn -rockbrush -rockcist -rockcraft -rockelay -rocker -rockery -rocket -rocketeer -rocketer -rocketlike -rocketor -rocketry -rockety -rockfall -rockfish -rockfoil -rockhair -rockhearted -Rockies -rockiness -rocking -rockingly -rockish -rocklay -rockless -rocklet -rocklike -rockling -rockman -rockrose -rockshaft -rockslide -rockstaff -rocktree -rockward -rockwards -rockweed -rockwood -rockwork -rocky -rococo -Rocouyenne -rocta -Rod -rod -rodd -roddikin -roddin -rodding -rode -Rodent -rodent -Rodentia -rodential -rodentially -rodentian -rodenticidal -rodenticide -rodentproof -rodeo -Roderic -Roderick -rodge -Rodger -rodham -Rodinal -Rodinesque -roding -rodingite -rodknight -rodless -rodlet -rodlike -rodmaker -rodman -Rodney -rodney -Rodolph -Rodolphus -rodomont -rodomontade -rodomontadist -rodomontador -rodsman -rodster -rodwood -roe -roeblingite -roebuck -roed -roelike -roentgen -roentgenism -roentgenization -roentgenize -roentgenogram -roentgenograph -roentgenographic -roentgenographically -roentgenography -roentgenologic -roentgenological -roentgenologically -roentgenologist -roentgenology -roentgenometer -roentgenometry -roentgenoscope -roentgenoscopic -roentgenoscopy -roentgenotherapy -roentgentherapy -roer -roestone -roey -rog -rogan -rogation -Rogationtide -rogative -rogatory -Roger -roger -Rogero -rogersite -roggle -Rogue -rogue -roguedom -rogueling -roguery -rogueship -roguing -roguish -roguishly -roguishness -rohan -Rohilla -rohob -rohun -rohuna -roi -roid -roil -roily -Roist -roister -roisterer -roistering -roisteringly -roisterly -roisterous -roisterously -roit -Rok -roka -roke -rokeage -rokee -rokelay -roker -rokey -roky -Roland -Rolandic -role -roleo -Rolf -Rolfe -roll -rollable -rollback -rolled -rollejee -roller -rollerer -rollermaker -rollermaking -rollerman -rollerskater -rollerskating -rolley -rolleyway -rolleywayman -rolliche -rollichie -rollick -rollicker -rollicking -rollickingly -rollickingness -rollicksome -rollicksomeness -rollicky -rolling -rollingly -Rollinia -rollix -rollmop -Rollo -rollock -rollway -roloway -Romaean -Romagnese -Romagnol -Romagnole -Romaic -romaika -Romain -romaine -Romaji -romal -Roman -Romance -romance -romancealist -romancean -romanceful -romanceish -romanceishness -romanceless -romancelet -romancelike -romancemonger -romanceproof -romancer -romanceress -romancical -romancing -romancist -romancy -Romandom -Romane -Romanes -Romanese -Romanesque -Romanhood -Romanian -Romanic -Romaniform -Romanish -Romanism -Romanist -Romanistic -Romanite -Romanity -romanium -Romanization -Romanize -Romanizer -Romanly -Romansch -Romansh -romantic -romantical -romanticalism -romanticality -romantically -romanticalness -romanticism -romanticist -romanticistic -romanticity -romanticize -romanticly -romanticness -romantism -romantist -Romany -romanza -romaunt -rombos -rombowline -Rome -romeite -Romeo -romerillo -romero -Romescot -Romeshot -Romeward -Romewards -Romic -Romipetal -Romish -Romishly -Romishness -rommack -Rommany -Romney -Romneya -romp -romper -romping -rompingly -rompish -rompishly -rompishness -rompu -rompy -Romulian -Romulus -Ron -Ronald -roncador -Roncaglian -roncet -ronco -rond -rondache -rondacher -rondawel -ronde -rondeau -rondel -rondelet -Rondeletia -rondelier -rondelle -rondellier -rondino -rondle -rondo -rondoletto -rondure -rone -Rong -Ronga -rongeur -Ronni -ronquil -Ronsardian -Ronsardism -Ronsardist -Ronsardize -Ronsdorfer -Ronsdorfian -rontgen -ronyon -rood -roodebok -roodle -roodstone -roof -roofage -roofer -roofing -roofless -rooflet -rooflike -roofman -rooftree -roofward -roofwise -roofy -rooibok -rooinek -rook -rooker -rookeried -rookery -rookie -rookish -rooklet -rooklike -rooky -rool -room -roomage -roomed -roomer -roomful -roomie -roomily -roominess -roomkeeper -roomless -roomlet -roommate -roomstead -roomth -roomthily -roomthiness -roomthy -roomward -roomy -roon -roorback -roosa -Roosevelt -Rooseveltian -roost -roosted -rooster -roosterfish -roosterhood -roosterless -roosters -roostership -Root -root -rootage -rootcap -rooted -rootedly -rootedness -rooter -rootery -rootfast -rootfastness -roothold -rootiness -rootle -rootless -rootlessness -rootlet -rootlike -rootling -rootstalk -rootstock -rootwalt -rootward -rootwise -rootworm -rooty -roove -ropable -rope -ropeable -ropeband -ropebark -ropedance -ropedancer -ropedancing -ropelayer -ropelaying -ropelike -ropemaker -ropemaking -ropeman -roper -roperipe -ropery -ropes -ropesmith -ropetrick -ropewalk -ropewalker -ropeway -ropework -ropily -ropiness -roping -ropish -ropishness -ropp -ropy -roque -roquelaure -roquer -roquet -roquette -roquist -roral -roratorio -Rori -roric -Roridula -Roridulaceae -roriferous -rorifluent -Roripa -Rorippa -roritorious -rorqual -rorty -rorulent -rory -Rosa -Rosabel -Rosabella -Rosaceae -rosacean -rosaceous -rosal -Rosales -Rosalia -Rosalie -Rosalind -Rosaline -Rosamond -rosanilin -rosaniline -rosarian -rosario -rosarium -rosaruby -rosary -rosated -Roschach -roscherite -roscid -roscoelite -rose -roseal -roseate -roseately -rosebay -rosebud -rosebush -rosed -rosedrop -rosefish -rosehead -rosehill -rosehiller -roseine -rosel -roseless -roselet -roselike -roselite -rosella -rosellate -roselle -Rosellinia -rosemary -Rosenbergia -rosenbuschite -roseola -roseolar -roseoliform -roseolous -roseous -roseroot -rosery -roset -rosetan -rosetangle -rosetime -Rosetta -rosette -rosetted -rosetty -rosetum -rosety -roseways -rosewise -rosewood -rosewort -Rosicrucian -Rosicrucianism -rosied -rosier -rosieresite -rosilla -rosillo -rosily -rosin -rosinate -rosinduline -Rosine -rosiness -rosinous -rosinweed -rosinwood -rosiny -rosland -rosmarine -Rosmarinus -Rosminian -Rosminianism -rosoli -rosolic -rosolio -rosolite -rosorial -Ross -ross -rosser -rossite -rostel -rostellar -Rostellaria -rostellarian -rostellate -rostelliform -rostellum -roster -rostra -rostral -rostrally -rostrate -rostrated -rostriferous -rostriform -rostroantennary -rostrobranchial -rostrocarinate -rostrocaudal -rostroid -rostrolateral -rostrular -rostrulate -rostrulum -rostrum -rosular -rosulate -rosy -rot -rota -rotacism -Rotal -rotal -Rotala -Rotalia -rotalian -rotaliform -rotaliiform -rotaman -rotameter -rotan -Rotanev -rotang -Rotarian -Rotarianism -rotarianize -Rotary -rotary -rotascope -rotatable -rotate -rotated -rotating -rotation -rotational -rotative -rotatively -rotativism -rotatodentate -rotatoplane -rotator -Rotatoria -rotatorian -rotatory -rotch -rote -rotella -rotenone -roter -rotge -rotgut -rother -rothermuck -rotifer -Rotifera -rotiferal -rotiferan -rotiferous -rotiform -rotisserie -roto -rotograph -rotogravure -rotor -rotorcraft -rotproof -Rotse -rottan -rotten -rottenish -rottenly -rottenness -rottenstone -rotter -rotting -rottle -rottlera -rottlerin -rottock -rottolo -rotula -rotulad -rotular -rotulet -rotulian -rotuliform -rotulus -rotund -rotunda -rotundate -rotundifoliate -rotundifolious -rotundiform -rotundify -rotundity -rotundly -rotundness -rotundo -rotundotetragonal -roub -roucou -roud -roue -rouelle -rouge -rougeau -rougeberry -rougelike -rougemontite -rougeot -rough -roughage -roughcast -roughcaster -roughdraft -roughdraw -roughdress -roughdry -roughen -roughener -rougher -roughet -roughhearted -roughheartedness -roughhew -roughhewer -roughhewn -roughhouse -roughhouser -roughhousing -roughhousy -roughie -roughing -roughings -roughish -roughishly -roughishness -roughleg -roughly -roughness -roughometer -roughride -roughrider -roughroot -roughscuff -roughsetter -roughshod -roughslant -roughsome -roughstring -roughstuff -roughtail -roughtailed -roughwork -roughwrought -roughy -rougy -rouille -rouky -roulade -rouleau -roulette -Rouman -Roumeliote -roun -rounce -rounceval -rouncy -round -roundabout -roundaboutly -roundaboutness -rounded -roundedly -roundedness -roundel -roundelay -roundeleer -rounder -roundfish -roundhead -roundheaded -roundheadedness -roundhouse -rounding -roundish -roundishness -roundlet -roundline -roundly -roundmouthed -roundness -roundnose -roundnosed -roundridge -roundseam -roundsman -roundtail -roundtop -roundtree -roundup -roundwise -roundwood -roundworm -roundy -roup -rouper -roupet -roupily -roupingwife -roupit -roupy -rouse -rouseabout -rousedness -rousement -rouser -rousing -rousingly -Rousseau -Rousseauan -Rousseauism -Rousseauist -Rousseauistic -Rousseauite -Roussellian -roussette -Roussillon -roust -roustabout -rouster -rousting -rout -route -router -routh -routhercock -routhie -routhiness -routhy -routinary -routine -routineer -routinely -routing -routinish -routinism -routinist -routinization -routinize -routivarite -routous -routously -rouvillite -rove -rover -rovet -rovetto -roving -rovingly -rovingness -row -rowable -rowan -rowanberry -rowboat -rowdily -rowdiness -rowdy -rowdydow -rowdydowdy -rowdyish -rowdyishly -rowdyishness -rowdyism -rowdyproof -rowed -rowel -rowelhead -rowen -Rowena -rower -rowet -rowiness -rowing -Rowland -rowlandite -Rowleian -rowlet -Rowley -Rowleyan -rowlock -rowport -rowty -rowy -rox -Roxana -Roxane -Roxanne -Roxburgh -Roxburghiaceae -Roxbury -Roxie -Roxolani -Roxy -roxy -Roy -royal -royale -royalet -royalism -royalist -royalization -royalize -royally -royalty -Royena -royet -royetness -royetous -royetously -Roystonea -royt -rozum -Rua -ruach -ruana -rub -rubasse -rubato -rubbed -rubber -rubberer -rubberize -rubberless -rubberneck -rubbernecker -rubbernose -rubbers -rubberstone -rubberwise -rubbery -rubbing -rubbingstone -rubbish -rubbishing -rubbishingly -rubbishly -rubbishry -rubbishy -rubble -rubbler -rubblestone -rubblework -rubbly -rubdown -Rube -rubedinous -rubedity -rubefacient -rubefaction -rubelet -rubella -rubelle -rubellite -rubellosis -Rubensian -rubeola -rubeolar -rubeoloid -ruberythric -ruberythrinic -rubescence -rubescent -Rubia -Rubiaceae -rubiaceous -Rubiales -rubianic -rubiate -rubiator -rubican -rubicelle -Rubicola -Rubicon -rubiconed -rubicund -rubicundity -rubidic -rubidine -rubidium -rubied -rubific -rubification -rubificative -rubify -rubiginous -rubijervine -rubine -rubineous -rubious -ruble -rublis -rubor -rubric -rubrica -rubrical -rubricality -rubrically -rubricate -rubrication -rubricator -rubrician -rubricism -rubricist -rubricity -rubricize -rubricose -rubrific -rubrification -rubrify -rubrisher -rubrospinal -rubstone -Rubus -ruby -rubylike -rubytail -rubythroat -rubywise -rucervine -Rucervus -Ruchbah -ruche -ruching -ruck -rucker -ruckle -ruckling -rucksack -rucksey -ruckus -rucky -ructation -ruction -rud -rudas -Rudbeckia -rudd -rudder -rudderhead -rudderhole -rudderless -rudderlike -rudderpost -rudderstock -ruddied -ruddily -ruddiness -ruddle -ruddleman -ruddock -ruddy -ruddyish -rude -rudely -rudeness -rudented -rudenture -ruderal -rudesby -Rudesheimer -rudge -rudiment -rudimental -rudimentarily -rudimentariness -rudimentary -rudimentation -rudish -Rudista -Rudistae -rudistan -rudistid -rudity -Rudmasday -Rudolf -Rudolph -Rudolphus -Rudy -rue -rueful -ruefully -ruefulness -ruelike -ruelle -Ruellia -ruen -ruer -ruesome -ruesomeness -ruewort -rufescence -rufescent -ruff -ruffable -ruffed -ruffer -ruffian -ruffianage -ruffiandom -ruffianhood -ruffianish -ruffianism -ruffianize -ruffianlike -ruffianly -ruffiano -ruffin -ruffle -ruffled -ruffleless -rufflement -ruffler -rufflike -ruffliness -ruffling -ruffly -ruficarpous -ruficaudate -ruficoccin -ruficornate -rufigallic -rufoferruginous -rufofulvous -rufofuscous -rufopiceous -rufotestaceous -rufous -rufter -rufulous -Rufus -rufus -rug -ruga -rugate -Rugbeian -Rugby -rugged -ruggedly -ruggedness -Rugger -rugging -ruggle -ruggy -rugheaded -ruglike -rugmaker -rugmaking -Rugosa -rugosa -rugose -rugosely -rugosity -rugous -rugulose -ruin -ruinable -ruinate -ruination -ruinatious -ruinator -ruined -ruiner -ruing -ruiniform -ruinlike -ruinous -ruinously -ruinousness -ruinproof -Rukbat -rukh -rulable -Rulander -rule -ruledom -ruleless -rulemonger -ruler -rulership -ruling -rulingly -rull -ruller -rullion -Rum -rum -rumal -Ruman -Rumanian -rumbelow -rumble -rumblegarie -rumblegumption -rumblement -rumbler -rumbling -rumblingly -rumbly -rumbo -rumbooze -rumbowline -rumbowling -rumbullion -rumbumptious -rumbustical -rumbustious -rumbustiousness -rumchunder -Rumelian -rumen -rumenitis -rumenocentesis -rumenotomy -Rumex -rumfustian -rumgumption -rumgumptious -ruminal -ruminant -Ruminantia -ruminantly -ruminate -ruminating -ruminatingly -rumination -ruminative -ruminatively -ruminator -rumkin -rumless -rumly -rummage -rummager -rummagy -rummer -rummily -rumminess -rummish -rummy -rumness -rumney -rumor -rumorer -rumormonger -rumorous -rumorproof -rumourmonger -rump -rumpad -rumpadder -rumpade -Rumper -rumple -rumpless -rumply -rumpscuttle -rumpuncheon -rumpus -rumrunner -rumrunning -rumshop -rumswizzle -rumtytoo -run -runabout -runagate -runaround -runaway -runback -runboard -runby -runch -runchweed -runcinate -rundale -Rundi -rundle -rundlet -rune -runecraft -runed -runefolk -runeless -runelike -runer -runesmith -runestaff -runeword -runfish -rung -runghead -rungless -runholder -runic -runically -runiform -runite -runkeeper -runkle -runkly -runless -runlet -runman -runnable -runnel -runner -runnet -running -runningly -runny -runoff -runologist -runology -runout -runover -runproof -runrig -runround -runt -runted -runtee -runtiness -runtish -runtishly -runtishness -runty -runway -rupa -rupee -Rupert -rupestral -rupestrian -rupestrine -rupia -rupiah -rupial -Rupicapra -Rupicaprinae -rupicaprine -Rupicola -Rupicolinae -rupicoline -rupicolous -rupie -rupitic -Ruppia -ruptile -ruption -ruptive -ruptuary -rupturable -rupture -ruptured -rupturewort -rural -ruralism -ruralist -ruralite -rurality -ruralization -ruralize -rurally -ruralness -rurban -ruridecanal -rurigenous -Ruritania -Ruritanian -ruru -Rus -Rusa -Ruscus -ruse -rush -rushbush -rushed -rushen -rusher -rushiness -rushing -rushingly -rushingness -rushland -rushlight -rushlighted -rushlike -rushlit -rushy -Rusin -rusine -rusk -ruskin -Ruskinian -rusky -rusma -rusot -ruspone -Russ -russel -Russelia -Russell -Russellite -Russene -russet -russeting -russetish -russetlike -russety -Russia -russia -Russian -Russianism -Russianist -Russianization -Russianize -Russification -Russificator -Russifier -Russify -Russine -Russism -Russniak -Russolatrous -Russolatry -Russomania -Russomaniac -Russomaniacal -Russophile -Russophilism -Russophilist -Russophobe -Russophobia -Russophobiac -Russophobism -Russophobist -russud -Russula -rust -rustable -rustful -rustic -rustical -rustically -rusticalness -rusticate -rustication -rusticator -rusticial -rusticism -rusticity -rusticize -rusticly -rusticness -rusticoat -rustily -rustiness -rustle -rustler -rustless -rustling -rustlingly -rustlingness -rustly -rustproof -rustre -rustred -Rusty -rusty -rustyback -rustyish -ruswut -rut -Ruta -rutabaga -Rutaceae -rutaceous -rutaecarpine -rutate -rutch -rutelian -Rutelinae -Ruth -ruth -ruthenate -Ruthene -Ruthenian -ruthenic -ruthenious -ruthenium -ruthenous -ruther -rutherford -rutherfordine -rutherfordite -ruthful -ruthfully -ruthfulness -ruthless -ruthlessly -ruthlessness -rutic -rutidosis -rutilant -rutilated -rutile -rutilous -rutin -rutinose -Rutiodon -ruttee -rutter -ruttiness -ruttish -ruttishly -ruttishness -rutty -Rutuli -rutyl -rutylene -ruvid -rux -rvulsant -ryal -ryania -rybat -ryder -rye -ryen -Rymandra -ryme -Rynchospora -rynchosporous -rynd -rynt -ryot -ryotwar -ryotwari -rype -rypeck -rytidosis -Rytina -Ryukyu -S -s -sa -saa -Saad -Saan -Saarbrucken -sab -Saba -sabadilla -sabadine -sabadinine -Sabaean -Sabaeanism -Sabaeism -sabaigrass -Sabaism -Sabaist -Sabal -Sabalaceae -sabalo -Saban -sabanut -Sabaoth -Sabathikos -Sabazian -Sabazianism -Sabazios -sabbat -Sabbatarian -Sabbatarianism -Sabbatary -Sabbatean -Sabbath -sabbath -Sabbathaian -Sabbathaic -Sabbathaist -Sabbathbreaker -Sabbathbreaking -Sabbathism -Sabbathize -Sabbathkeeper -Sabbathkeeping -Sabbathless -Sabbathlike -Sabbathly -Sabbatia -sabbatia -Sabbatian -Sabbatic -sabbatic -Sabbatical -sabbatical -Sabbatically -Sabbaticalness -sabbatine -sabbatism -Sabbatist -Sabbatization -Sabbatize -sabbaton -sabbitha -sabdariffa -sabe -sabeca -Sabella -sabella -sabellan -Sabellaria -sabellarian -Sabelli -Sabellian -Sabellianism -Sabellianize -sabellid -Sabellidae -sabelloid -saber -saberbill -sabered -saberleg -saberlike -saberproof -sabertooth -saberwing -Sabia -Sabiaceae -sabiaceous -Sabian -Sabianism -sabicu -Sabik -Sabina -sabina -Sabine -sabine -Sabinian -sabino -Sabir -sable -sablefish -sableness -sably -sabora -saboraim -sabot -sabotage -saboted -saboteur -sabotine -Sabra -sabra -sabretache -Sabrina -Sabromin -sabromin -Sabuja -sabuline -sabulite -sabulose -sabulosity -sabulous -sabulum -saburra -saburral -saburration -sabutan -sabzi -Sac -sac -Sacae -sacalait -sacaline -sacaton -sacatra -sacbrood -saccade -saccadic -Saccammina -saccate -saccated -Saccha -saccharamide -saccharase -saccharate -saccharated -saccharephidrosis -saccharic -saccharide -sacchariferous -saccharification -saccharifier -saccharify -saccharilla -saccharimeter -saccharimetric -saccharimetrical -saccharimetry -saccharin -saccharinate -saccharinated -saccharine -saccharineish -saccharinely -saccharinic -saccharinity -saccharization -saccharize -saccharobacillus -saccharobiose -saccharobutyric -saccharoceptive -saccharoceptor -saccharochemotropic -saccharocolloid -saccharofarinaceous -saccharogalactorrhea -saccharogenic -saccharohumic -saccharoid -saccharoidal -saccharolactonic -saccharolytic -saccharometabolic -saccharometabolism -saccharometer -saccharometric -saccharometry -saccharomucilaginous -Saccharomyces -saccharomyces -Saccharomycetaceae -saccharomycetaceous -Saccharomycetales -saccharomycete -Saccharomycetes -saccharomycetic -saccharomycosis -saccharon -saccharonate -saccharone -saccharonic -saccharophylly -saccharorrhea -saccharoscope -saccharose -saccharostarchy -saccharosuria -saccharotriose -saccharous -saccharulmic -saccharulmin -Saccharum -saccharum -saccharuria -sacciferous -sacciform -Saccobranchiata -saccobranchiate -Saccobranchus -saccoderm -Saccolabium -saccolabium -saccomyian -saccomyid -Saccomyidae -Saccomyina -saccomyine -saccomyoid -Saccomyoidea -saccomyoidean -Saccomys -Saccopharyngidae -Saccopharynx -Saccorhiza -saccos -saccular -sacculate -sacculated -sacculation -saccule -Sacculina -sacculoutricular -sacculus -saccus -sacellum -sacerdocy -sacerdotage -sacerdotal -sacerdotalism -sacerdotalist -sacerdotalize -sacerdotally -sacerdotical -sacerdotism -sachamaker -sachem -sachemdom -sachemic -sachemship -sachet -Sacheverell -Sacian -sack -sackage -sackamaker -sackbag -sackbut -sackcloth -sackclothed -sackdoudle -sacked -sacken -sacker -sackful -sacking -sackless -sacklike -sackmaker -sackmaking -sackman -sacktime -saclike -saco -sacope -sacque -sacra -sacrad -sacral -sacralgia -sacralization -sacrament -sacramental -sacramentalism -sacramentalist -sacramentality -sacramentally -sacramentalness -Sacramentarian -sacramentarian -sacramentarianism -sacramentarist -Sacramentary -sacramentary -sacramenter -sacramentism -sacramentize -Sacramento -sacramentum -sacraria -sacrarial -sacrarium -sacrectomy -sacred -sacredly -sacredness -sacrificable -sacrificant -Sacrificati -sacrification -sacrificator -sacrificatory -sacrificature -sacrifice -sacrificer -sacrificial -sacrificially -sacrificing -sacrilege -sacrileger -sacrilegious -sacrilegiously -sacrilegiousness -sacrilegist -sacrilumbal -sacrilumbalis -sacring -Sacripant -sacrist -sacristan -sacristy -sacro -sacrocaudal -sacrococcygeal -sacrococcygean -sacrococcygeus -sacrococcyx -sacrocostal -sacrocotyloid -sacrocotyloidean -sacrocoxalgia -sacrocoxitis -sacrodorsal -sacrodynia -sacrofemoral -sacroiliac -sacroinguinal -sacroischiac -sacroischiadic -sacroischiatic -sacrolumbal -sacrolumbalis -sacrolumbar -sacropectineal -sacroperineal -sacropictorial -sacroposterior -sacropubic -sacrorectal -sacrosanct -sacrosanctity -sacrosanctness -sacrosciatic -sacrosecular -sacrospinal -sacrospinalis -sacrospinous -sacrotomy -sacrotuberous -sacrovertebral -sacrum -sad -Sadachbia -Sadalmelik -Sadalsuud -sadden -saddening -saddeningly -saddik -saddirham -saddish -saddle -saddleback -saddlebag -saddlebow -saddlecloth -saddled -saddleleaf -saddleless -saddlelike -saddlenose -saddler -saddlery -saddlesick -saddlesore -saddlesoreness -saddlestead -saddletree -saddlewise -saddling -Sadducaic -Sadducean -Sadducee -Sadduceeism -Sadduceeist -Sadducism -Sadducize -sade -sadh -sadhe -sadhearted -sadhu -sadic -Sadie -sadiron -sadism -sadist -sadistic -sadistically -Sadite -sadly -sadness -sado -sadomasochism -Sadr -sadr -saecula -saeculum -Saeima -saernaite -saeter -saeume -Safar -safari -Safavi -Safawid -safe -safeblower -safeblowing -safebreaker -safebreaking -safecracking -safeguard -safeguarder -safehold -safekeeper -safekeeping -safelight -safely -safemaker -safemaking -safen -safener -safeness -safety -Saffarian -Saffarid -saffian -safflor -safflorite -safflow -safflower -saffron -saffroned -saffrontree -saffronwood -saffrony -Safi -Safine -Safini -safranin -safranine -safranophile -safrole -saft -sag -saga -sagaciate -sagacious -sagaciously -sagaciousness -sagacity -Sagai -sagaie -sagaman -sagamite -sagamore -sagapenum -sagathy -sage -sagebrush -sagebrusher -sagebush -sageleaf -sagely -sagene -sageness -sagenite -sagenitic -Sageretia -sagerose -sageship -sagewood -sagger -sagging -saggon -saggy -saghavart -Sagina -saginate -sagination -saging -Sagitarii -sagitta -sagittal -sagittally -Sagittaria -Sagittariid -Sagittarius -sagittarius -Sagittary -sagittary -sagittate -Sagittid -sagittiferous -sagittiform -sagittocyst -sagittoid -sagless -sago -sagoin -sagolike -Sagra -saguaro -Saguerus -sagum -saguran -sagvandite -sagwire -sagy -sah -Sahadeva -Sahaptin -Sahara -Saharan -Saharian -Saharic -sahh -sahib -Sahibah -Sahidic -sahme -Saho -sahoukar -sahukar -sai -saic -said -Saidi -Saify -saiga -Saiid -sail -sailable -sailage -sailboat -sailcloth -sailed -sailer -sailfish -sailflying -sailing -sailingly -sailless -sailmaker -sailmaking -sailor -sailoring -sailorizing -sailorless -sailorlike -sailorly -sailorman -sailorproof -sailplane -sailship -sailsman -saily -saim -saimiri -saimy -sain -Sainfoin -saint -saintdom -sainted -saintess -sainthood -saintish -saintism -saintless -saintlike -saintlily -saintliness -saintling -saintly -saintologist -saintology -Saintpaulia -saintship -saip -Saiph -sair -sairly -sairve -sairy -Saite -saithe -Saitic -Saiva -Saivism -saj -sajou -Sak -Saka -Sakai -Sakalava -sake -sakeber -sakeen -Sakel -Sakelarides -Sakell -Sakellaridis -saker -sakeret -Sakha -saki -sakieh -Sakkara -Saktism -sakulya -Sakyamuni -Sal -sal -salaam -salaamlike -salability -salable -salableness -salably -salaceta -salacious -salaciously -salaciousness -salacity -salacot -salad -salading -salago -salagrama -salal -salamandarin -salamander -salamanderlike -Salamandra -salamandrian -Salamandridae -salamandriform -Salamandrina -salamandrine -salamandroid -salambao -Salaminian -salamo -salampore -salangane -salangid -Salangidae -Salar -salar -salariat -salaried -salary -salaryless -salat -salay -sale -salegoer -salele -salema -salenixon -salep -saleratus -saleroom -salesclerk -Salesian -saleslady -salesman -salesmanship -salespeople -salesperson -salesroom -saleswoman -salework -saleyard -salfern -Salian -Saliaric -Salic -salic -Salicaceae -salicaceous -Salicales -Salicariaceae -salicetum -salicin -salicional -salicorn -Salicornia -salicyl -salicylal -salicylaldehyde -salicylamide -salicylanilide -salicylase -salicylate -salicylic -salicylide -salicylidene -salicylism -salicylize -salicylous -salicyluric -salicylyl -salience -salient -Salientia -salientian -saliently -saliferous -salifiable -salification -salify -saligenin -saligot -salimeter -salimetry -Salina -salina -Salinan -salination -saline -Salinella -salinelle -salineness -saliniferous -salinification -saliniform -salinity -salinize -salinometer -salinometry -salinosulphureous -salinoterreous -Salisburia -Salish -Salishan -salite -salited -Saliva -saliva -salival -Salivan -salivant -salivary -salivate -salivation -salivator -salivatory -salivous -Salix -salix -salle -sallee -salleeman -sallenders -sallet -sallier -salloo -sallow -sallowish -sallowness -sallowy -Sally -sally -Sallybloom -sallyman -sallywood -Salm -salma -salmagundi -salmiac -salmine -salmis -Salmo -Salmon -salmon -salmonberry -Salmonella -salmonella -salmonellae -salmonellosis -salmonet -salmonid -Salmonidae -salmoniform -salmonlike -salmonoid -Salmonoidea -Salmonoidei -salmonsite -salmwood -salnatron -Salol -salol -Salome -salometer -salometry -salomon -Salomonia -Salomonian -Salomonic -salon -saloon -saloonist -saloonkeeper -saloop -Salopian -salopian -salp -Salpa -salpa -salpacean -salpian -salpicon -Salpidae -salpiform -Salpiglossis -salpiglossis -salpingectomy -salpingemphraxis -salpinges -salpingian -salpingion -salpingitic -salpingitis -salpingocatheterism -salpingocele -salpingocyesis -salpingomalleus -salpingonasal -salpingopalatal -salpingopalatine -salpingoperitonitis -salpingopexy -salpingopharyngeal -salpingopharyngeus -salpingopterygoid -salpingorrhaphy -salpingoscope -salpingostaphyline -salpingostenochoria -salpingostomatomy -salpingostomy -salpingotomy -salpinx -salpoid -salse -salsifis -salsify -salsilla -Salsola -Salsolaceae -salsolaceous -salsuginous -salt -salta -saltant -saltarella -saltarello -saltary -saltate -saltation -saltativeness -Saltator -saltator -Saltatoria -saltatorial -saltatorian -saltatoric -saltatorious -saltatory -saltbush -saltcat -saltcatch -saltcellar -salted -saltee -salten -salter -saltern -saltery -saltfat -saltfoot -salthouse -saltier -saltierra -saltierwise -Saltigradae -saltigrade -saltimbanco -saltimbank -saltimbankery -saltine -saltiness -salting -saltish -saltishly -saltishness -saltless -saltlessness -saltly -saltmaker -saltmaking -saltman -saltmouth -saltness -saltometer -saltorel -saltpan -saltpeter -saltpetrous -saltpond -saltspoon -saltspoonful -saltsprinkler -saltus -saltweed -saltwife -saltworker -saltworks -saltwort -salty -salubrify -salubrious -salubriously -salubriousness -salubrity -saluki -salung -salutarily -salutariness -salutary -salutation -salutational -salutationless -salutatious -salutatorian -salutatorily -salutatorium -salutatory -salute -saluter -salutiferous -salutiferously -Salva -salvability -salvable -salvableness -salvably -Salvadora -salvadora -Salvadoraceae -salvadoraceous -Salvadoran -Salvadorian -salvage -salvageable -salvagee -salvageproof -salvager -salvaging -Salvarsan -salvarsan -salvatella -salvation -salvational -salvationism -salvationist -salvatory -salve -salveline -Salvelinus -salver -salverform -Salvia -salvianin -salvific -salvifical -salvifically -Salvinia -Salviniaceae -salviniaceous -Salviniales -salviol -salvo -salvor -salvy -Salwey -salzfelle -Sam -sam -Samadera -samadh -samadhi -samaj -Samal -saman -Samandura -Samani -Samanid -Samantha -samara -samaria -samariform -Samaritan -Samaritaness -Samaritanism -samarium -Samarkand -samaroid -samarra -samarskite -Samas -samba -Sambal -sambal -sambaqui -sambar -Sambara -Sambathe -sambhogakaya -Sambo -sambo -Sambucaceae -Sambucus -sambuk -sambuke -sambunigrin -Samburu -same -samekh -samel -sameliness -samely -samen -sameness -samesome -Samgarnebo -samh -Samhain -samhita -Samian -samiel -Samir -samiresite -samiri -samisen -Samish -samite -samkara -samlet -sammel -sammer -sammier -Sammy -sammy -Samnani -Samnite -Samoan -Samogitian -samogonka -Samolus -Samosatenian -samothere -Samotherium -Samothracian -samovar -Samoyed -Samoyedic -samp -sampaguita -sampaloc -sampan -samphire -sampi -sample -sampleman -sampler -samplery -sampling -Sampsaean -Samsam -samsara -samshu -Samsien -samskara -Samson -samson -Samsoness -Samsonian -Samsonic -Samsonistic -samsonite -Samucan -Samucu -Samuel -samurai -Samydaceae -San -san -sanability -sanable -sanableness -sanai -Sanand -sanative -sanativeness -sanatoria -sanatorium -sanatory -Sanballat -sanbenito -Sanche -sancho -sanct -sancta -sanctanimity -sanctifiable -sanctifiableness -sanctifiably -sanctificate -sanctification -sanctified -sanctifiedly -sanctifier -sanctify -sanctifyingly -sanctilogy -sanctiloquent -sanctimonial -sanctimonious -sanctimoniously -sanctimoniousness -sanctimony -sanction -sanctionable -sanctionary -sanctionative -sanctioner -sanctionist -sanctionless -sanctionment -sanctitude -sanctity -sanctologist -Sanctology -sanctorium -sanctuaried -sanctuarize -sanctuary -sanctum -Sanctus -Sancy -sancyite -sand -sandak -sandal -sandaled -sandaliform -sandaling -sandalwood -sandalwort -sandan -sandarac -sandaracin -sandastros -Sandawe -sandbag -sandbagger -sandbank -sandbin -sandblast -sandboard -sandbox -sandboy -sandbur -sandclub -sandculture -sanded -Sandeep -Sandemanian -Sandemanianism -Sandemanism -Sander -sander -sanderling -sanders -sandfish -sandflower -sandglass -sandheat -sandhi -sandiferous -sandiness -sanding -Sandip -sandiver -sandix -sandlapper -sandless -sandlike -sandling -sandman -sandnatter -sandnecker -sandpaper -sandpaperer -sandpeep -sandpiper -sandproof -Sandra -sandrock -sandspit -sandspur -sandstay -sandstone -sandstorm -sandust -sandweed -sandweld -sandwich -sandwood -sandworm -sandwort -Sandy -sandy -sandyish -sane -sanely -saneness -Sanetch -Sanford -Sanforized -sang -sanga -Sangamon -sangar -sangaree -sangei -sanger -sangerbund -sangerfest -Sanggil -sangha -Sangho -Sangir -Sangirese -sanglant -sangley -Sangraal -sangreeroot -sangrel -sangsue -sanguicolous -sanguifacient -sanguiferous -sanguification -sanguifier -sanguifluous -sanguimotor -sanguimotory -sanguinaceous -Sanguinaria -sanguinarily -sanguinariness -sanguinary -sanguine -sanguineless -sanguinely -sanguineness -sanguineobilious -sanguineophlegmatic -sanguineous -sanguineousness -sanguineovascular -sanguinicolous -sanguiniferous -sanguinification -sanguinism -sanguinity -sanguinivorous -sanguinocholeric -sanguinolency -sanguinolent -sanguinopoietic -sanguinous -Sanguisorba -Sanguisorbaceae -sanguisuge -sanguisugent -sanguisugous -sanguivorous -Sanhedrim -Sanhedrin -Sanhedrist -Sanhita -sanicle -Sanicula -sanidine -sanidinic -sanidinite -sanies -sanification -sanify -sanious -sanipractic -sanitarian -sanitarily -sanitarist -sanitarium -sanitary -sanitate -sanitation -sanitationist -sanitist -sanitize -Sanity -sanity -sanjak -sanjakate -sanjakbeg -sanjakship -Sanjay -Sanjeev -Sanjib -sank -sankha -Sankhya -sannaite -Sannoisian -sannup -sannyasi -sannyasin -sanopurulent -sanoserous -Sanpoil -sans -Sansar -sansei -Sansevieria -sanshach -sansi -Sanskrit -Sanskritic -Sanskritist -Sanskritization -Sanskritize -sant -Santa -Santal -santal -Santalaceae -santalaceous -Santalales -Santali -santalic -santalin -santalol -Santalum -santalwood -santapee -Santee -santene -Santiago -santimi -santims -santir -Santo -Santolina -santon -santonica -santonin -santoninic -santorinite -Santos -sanukite -Sanvitalia -Sanyakoan -sao -Saoshyant -sap -sapa -sapajou -sapan -sapanwood -sapbush -sapek -Saperda -sapful -Sapharensian -saphead -sapheaded -sapheadedness -saphena -saphenal -saphenous -saphie -sapid -sapidity -sapidless -sapidness -sapience -sapiency -sapient -sapiential -sapientially -sapientize -sapiently -sapin -sapinda -Sapindaceae -sapindaceous -Sapindales -sapindaship -Sapindus -Sapium -sapiutan -saple -sapless -saplessness -sapling -saplinghood -sapo -sapodilla -sapogenin -saponaceous -saponaceousness -saponacity -Saponaria -saponarin -saponary -Saponi -saponifiable -saponification -saponifier -saponify -saponin -saponite -sapophoric -sapor -saporific -saporosity -saporous -Sapota -sapota -Sapotaceae -sapotaceous -sapote -sapotilha -sapotilla -sapotoxin -sappanwood -sappare -sapper -Sapphic -sapphic -sapphire -sapphireberry -sapphired -sapphirewing -sapphiric -sapphirine -Sapphism -Sapphist -Sappho -sappiness -sapping -sapples -sappy -sapremia -sapremic -saprine -saprocoll -saprodil -saprodontia -saprogenic -saprogenous -Saprolegnia -Saprolegniaceae -saprolegniaceous -Saprolegniales -saprolegnious -saprolite -saprolitic -sapropel -sapropelic -sapropelite -saprophagan -saprophagous -saprophile -saprophilous -saprophyte -saprophytic -saprophytically -saprophytism -saprostomous -saprozoic -sapsago -sapskull -sapsuck -sapsucker -sapucaia -sapucainha -sapwood -sapwort -Saqib -sar -Sara -saraad -sarabacan -Sarabaite -saraband -Saracen -Saracenian -Saracenic -Saracenical -Saracenism -Saracenlike -Sarada -saraf -Sarah -Sarakolet -Sarakolle -Saramaccaner -Saran -sarangi -sarangousty -Saratoga -Saratogan -Saravan -Sarawakese -sarawakite -Sarawan -sarbacane -sarbican -sarcasm -sarcasmproof -sarcast -sarcastic -sarcastical -sarcastically -sarcasticalness -sarcasticness -sarcelle -sarcenet -sarcilis -Sarcina -sarcine -sarcitis -sarcle -sarcler -sarcoadenoma -Sarcobatus -sarcoblast -sarcocarcinoma -sarcocarp -sarcocele -Sarcococca -Sarcocolla -sarcocollin -sarcocyst -Sarcocystidea -sarcocystidean -sarcocystidian -Sarcocystis -sarcocystoid -sarcocyte -sarcode -sarcoderm -Sarcodes -sarcodic -sarcodictyum -Sarcodina -sarcodous -sarcoenchondroma -sarcogenic -sarcogenous -sarcoglia -Sarcogyps -sarcoid -sarcolactic -sarcolemma -sarcolemmic -sarcolemmous -sarcoline -sarcolite -sarcologic -sarcological -sarcologist -sarcology -sarcolysis -sarcolyte -sarcolytic -sarcoma -sarcomatoid -sarcomatosis -sarcomatous -sarcomere -Sarcophaga -sarcophagal -sarcophagi -sarcophagic -sarcophagid -Sarcophagidae -sarcophagine -sarcophagize -sarcophagous -sarcophagus -sarcophagy -sarcophile -sarcophilous -Sarcophilus -sarcoplasm -sarcoplasma -sarcoplasmatic -sarcoplasmic -sarcoplast -sarcoplastic -sarcopoietic -Sarcopsylla -Sarcopsyllidae -Sarcoptes -sarcoptic -sarcoptid -Sarcoptidae -Sarcorhamphus -sarcosepsis -sarcosepta -sarcoseptum -sarcosine -sarcosis -sarcosoma -sarcosperm -sarcosporid -Sarcosporida -Sarcosporidia -sarcosporidial -sarcosporidian -sarcosporidiosis -sarcostosis -sarcostyle -sarcotheca -sarcotherapeutics -sarcotherapy -sarcotic -sarcous -Sarcura -Sard -sard -sardachate -Sardanapalian -Sardanapalus -sardel -Sardian -sardine -sardinewise -Sardinian -sardius -Sardoin -sardonic -sardonical -sardonically -sardonicism -sardonyx -sare -sargasso -Sargassum -sargassum -sargo -Sargonic -Sargonid -Sargonide -sargus -sari -sarif -Sarigue -sarigue -sarinda -sarip -sark -sarkar -sarkful -sarkical -sarkine -sarking -sarkinite -sarkit -sarkless -sarlak -sarlyk -Sarmatian -Sarmatic -sarmatier -sarment -sarmenta -sarmentaceous -sarmentiferous -sarmentose -sarmentous -sarmentum -sarna -sarod -saron -sarong -saronic -saronide -saros -Sarothamnus -Sarothra -sarothrum -sarpler -sarpo -sarra -Sarracenia -sarracenia -Sarraceniaceae -sarraceniaceous -sarracenial -Sarraceniales -sarraf -sarrazin -sarrusophone -sarrusophonist -sarsa -sarsaparilla -sarsaparillin -Sarsar -Sarsechim -sarsen -sarsenet -Sarsi -Sart -sart -sartage -sartain -Sartish -sartor -sartoriad -sartorial -sartorially -sartorian -sartorite -sartorius -Saruk -sarus -Sarvarthasiddha -sarwan -Sarzan -sasa -sasan -sasani -sasanqua -sash -sashay -sashery -sashing -sashless -sasin -sasine -saskatoon -sassaby -sassafac -sassafrack -sassafras -Sassak -Sassan -Sassanian -Sassanid -Sassanidae -Sassanide -Sassenach -sassolite -sassy -sassywood -Sastean -sat -satable -Satan -satan -Satanael -Satanas -satang -satanic -satanical -satanically -satanicalness -Satanism -Satanist -satanist -Satanistic -Satanity -satanize -Satanology -Satanophany -Satanophil -Satanophobia -Satanship -satara -satchel -satcheled -sate -sateen -sateenwood -sateless -satelles -satellitarian -satellite -satellited -satellitesimal -satellitian -satellitic -satellitious -satellitium -satellitoid -satellitory -satelloid -satiability -satiable -satiableness -satiably -satiate -satiation -Satieno -satient -satiety -satin -satinbush -satine -satined -satinette -satinfin -satinflower -satinite -satinity -satinize -satinleaf -satinlike -satinpod -satinwood -satiny -satire -satireproof -satiric -satirical -satirically -satiricalness -satirist -satirizable -satirize -satirizer -satisdation -satisdiction -satisfaction -satisfactional -satisfactionist -satisfactionless -satisfactive -satisfactorily -satisfactoriness -satisfactorious -satisfactory -satisfiable -satisfice -satisfied -satisfiedly -satisfiedness -satisfier -satisfy -satisfying -satisfyingly -satisfyingness -satispassion -satlijk -Satrae -satrap -satrapal -satrapess -satrapic -satrapical -satrapy -satron -Satsuma -sattle -sattva -satura -saturability -saturable -saturant -saturate -saturated -saturater -saturation -saturator -Saturday -Satureia -Saturn -Saturnal -Saturnale -Saturnalia -saturnalia -Saturnalian -saturnalian -Saturnia -Saturnian -saturnian -Saturnicentric -saturniid -Saturniidae -Saturnine -saturnine -saturninely -saturnineness -saturninity -saturnism -saturnity -saturnize -Saturnus -satyagrahi -satyashodak -satyr -satyresque -satyress -satyriasis -satyric -Satyridae -Satyrinae -satyrine -satyrion -satyrism -satyrlike -satyromaniac -sauce -sauceboat -saucebox -saucedish -sauceless -sauceline -saucemaker -saucemaking -sauceman -saucepan -sauceplate -saucer -saucerful -saucerleaf -saucerless -saucerlike -saucily -sauciness -saucy -Sauerbraten -sauerkraut -sauf -sauger -saugh -saughen -Saul -sauld -saulie -sault -saulter -Saulteur -saum -saumon -saumont -Saumur -Saumya -sauna -saunders -saunderswood -saunter -saunterer -sauntering -saunteringly -sauqui -saur -Saura -Sauraseni -Saurauia -Saurauiaceae -saurel -Sauria -saurian -sauriasis -sauriosis -Saurischia -saurischian -Sauroctonos -saurodont -Saurodontidae -Saurognathae -saurognathism -saurognathous -Sauromatian -saurophagous -sauropod -Sauropoda -sauropodous -sauropsid -Sauropsida -sauropsidan -sauropsidian -Sauropterygia -sauropterygian -Saurornithes -saurornithic -Saururaceae -saururaceous -Saururae -saururan -saururous -Saururus -saury -sausage -sausagelike -sausinger -Saussurea -saussurite -saussuritic -saussuritization -saussuritize -saut -saute -sauterelle -sauterne -sauternes -sauteur -sauty -Sauvagesia -sauve -sauvegarde -savable -savableness -savacu -savage -savagedom -savagely -savageness -savagerous -savagery -savagess -savagism -savagize -savanilla -savanna -Savannah -savant -Savara -savarin -savation -save -saved -saveloy -saver -Savery -savin -saving -savingly -savingness -savior -savioress -saviorhood -saviorship -Saviour -Savitar -Savitri -savola -Savonarolist -Savonnerie -savor -savored -savorer -savorily -savoriness -savoringly -savorless -savorous -savorsome -savory -savour -savoy -Savoyard -savoyed -savoying -savssat -savvy -saw -sawah -Sawaiori -sawali -Sawan -sawarra -sawback -sawbelly -sawbill -sawbones -sawbuck -sawbwa -sawder -sawdust -sawdustish -sawdustlike -sawdusty -sawed -sawer -sawfish -sawfly -sawhorse -sawing -sawish -sawlike -sawmaker -sawmaking -sawman -sawmill -sawmiller -sawmilling -sawmon -sawmont -sawn -Sawney -sawney -sawsetter -sawsharper -sawsmith -sawt -sawway -sawworker -sawwort -sawyer -sax -saxatile -saxboard -saxcornet -Saxe -saxhorn -Saxicava -saxicavous -Saxicola -saxicole -Saxicolidae -Saxicolinae -saxicoline -saxicolous -Saxifraga -Saxifragaceae -saxifragaceous -saxifragant -saxifrage -saxifragous -saxifrax -saxigenous -Saxish -Saxon -Saxondom -Saxonian -Saxonic -Saxonical -Saxonically -Saxonish -Saxonism -Saxonist -saxonite -Saxonization -Saxonize -Saxonly -Saxony -saxophone -saxophonist -saxotromba -saxpence -saxten -saxtie -saxtuba -say -saya -sayability -sayable -sayableness -Sayal -sayer -sayette -sayid -saying -sazen -Sbaikian -sblood -sbodikins -scab -scabbard -scabbardless -scabbed -scabbedness -scabbery -scabbily -scabbiness -scabble -scabbler -scabbling -scabby -scabellum -scaberulous -scabid -scabies -scabietic -scabinus -Scabiosa -scabiosity -scabious -scabish -scabland -scabrate -scabrescent -scabrid -scabridity -scabridulous -scabrities -scabriusculose -scabriusculous -scabrosely -scabrous -scabrously -scabrousness -scabwort -scacchic -scacchite -scad -scaddle -scads -Scaean -scaff -scaffer -scaffery -scaffie -scaffle -scaffold -scaffoldage -scaffolder -scaffolding -scaglia -scagliola -scagliolist -scala -scalable -scalableness -scalably -scalage -scalar -scalare -Scalaria -scalarian -scalariform -Scalariidae -scalarwise -scalation -scalawag -scalawaggery -scalawaggy -scald -scaldberry -scalded -scalder -scaldfish -scaldic -scalding -scaldweed -scaldy -scale -scaleback -scalebark -scaleboard -scaled -scaledrake -scalefish -scaleful -scaleless -scalelet -scalelike -scaleman -scalena -scalene -scalenohedral -scalenohedron -scalenon -scalenous -scalenum -scalenus -scalepan -scaleproof -scaler -scales -scalesman -scalesmith -scaletail -scalewing -scalewise -scalework -scalewort -scaliger -scaliness -scaling -scall -scalled -scallion -scallola -scallom -scallop -scalloper -scalloping -scallopwise -scalma -scaloni -Scalops -Scalopus -scalp -scalpeen -scalpel -scalpellar -scalpellic -scalpellum -scalpellus -scalper -scalping -scalpless -scalpriform -scalprum -scalpture -scalt -scaly -scalytail -scam -scamander -Scamandrius -scamble -scambler -scambling -scamell -scamler -scamles -scammoniate -scammonin -scammony -scammonyroot -scamp -scampavia -scamper -scamperer -scamphood -scamping -scampingly -scampish -scampishly -scampishness -scampsman -scan -scandal -scandalization -scandalize -scandalizer -scandalmonger -scandalmongering -scandalmongery -scandalmonging -scandalous -scandalously -scandalousness -scandalproof -scandaroon -scandent -scandia -Scandian -scandic -scandicus -Scandinavia -Scandinavian -Scandinavianism -scandium -Scandix -Scania -Scanian -Scanic -scanmag -scannable -scanner -scanning -scanningly -scansion -scansionist -Scansores -scansorial -scansorious -scant -scanties -scantily -scantiness -scantity -scantle -scantling -scantlinged -scantly -scantness -scanty -scap -scape -scapegallows -scapegoat -scapegoatism -scapegrace -scapel -scapeless -scapement -scapethrift -scapha -Scaphander -Scaphandridae -scaphion -Scaphiopodidae -Scaphiopus -scaphism -scaphite -Scaphites -Scaphitidae -scaphitoid -scaphocephalic -scaphocephalism -scaphocephalous -scaphocephalus -scaphocephaly -scaphocerite -scaphoceritic -scaphognathite -scaphognathitic -scaphoid -scapholunar -scaphopod -Scaphopoda -scaphopodous -scapiform -scapigerous -scapoid -scapolite -scapolitization -scapose -scapple -scappler -scapula -scapulalgia -scapular -scapulare -scapulary -scapulated -scapulectomy -scapulet -scapulimancy -scapuloaxillary -scapulobrachial -scapuloclavicular -scapulocoracoid -scapulodynia -scapulohumeral -scapulopexy -scapuloradial -scapulospinal -scapulothoracic -scapuloulnar -scapulovertebral -scapus -scar -scarab -scarabaean -scarabaei -scarabaeid -Scarabaeidae -scarabaeidoid -scarabaeiform -Scarabaeinae -scarabaeoid -scarabaeus -scarabee -scaraboid -Scaramouch -scaramouch -scarce -scarcelins -scarcely -scarcement -scarcen -scarceness -scarcity -scare -scarebabe -scarecrow -scarecrowish -scarecrowy -scareful -scarehead -scaremonger -scaremongering -scareproof -scarer -scaresome -scarf -scarface -scarfed -scarfer -scarflike -scarfpin -scarfskin -scarfwise -scarfy -scarid -Scaridae -scarification -scarificator -scarifier -scarify -scarily -scariose -scarious -scarlatina -scarlatinal -scarlatiniform -scarlatinoid -scarlatinous -scarless -scarlet -scarletberry -scarletseed -scarlety -scarman -scarn -scaroid -scarp -scarpines -scarping -scarpment -scarproof -scarred -scarrer -scarring -scarry -scart -scarth -Scarus -scarus -scarved -scary -scase -scasely -scat -scatch -scathe -scatheful -scatheless -scathelessly -scathing -scathingly -Scaticook -scatland -scatologia -scatologic -scatological -scatology -scatomancy -scatophagid -Scatophagidae -scatophagoid -scatophagous -scatophagy -scatoscopy -scatter -scatterable -scatteration -scatteraway -scatterbrain -scatterbrained -scatterbrains -scattered -scatteredly -scatteredness -scatterer -scattergood -scattering -scatteringly -scatterling -scattermouch -scattery -scatty -scatula -scaturient -scaul -scaum -scaup -scauper -scaur -scaurie -scaut -scavage -scavel -scavenage -scavenge -scavenger -scavengerism -scavengership -scavengery -scavenging -scaw -scawd -scawl -scazon -scazontic -sceat -scelalgia -scelerat -scelidosaur -scelidosaurian -scelidosauroid -Scelidosaurus -Scelidotherium -Sceliphron -sceloncus -Sceloporus -scelotyrbe -scena -scenario -scenarioist -scenarioization -scenarioize -scenarist -scenarization -scenarize -scenary -scend -scene -scenecraft -Scenedesmus -sceneful -sceneman -scenery -sceneshifter -scenewright -scenic -scenical -scenically -scenist -scenite -scenograph -scenographer -scenographic -scenographical -scenographically -scenography -Scenopinidae -scent -scented -scenter -scentful -scenting -scentless -scentlessness -scentproof -scentwood -scepsis -scepter -scepterdom -sceptered -scepterless -sceptic -sceptral -sceptropherous -sceptrosophy -sceptry -scerne -sceuophorion -sceuophylacium -sceuophylax -schaapsteker -Schaefferia -schairerite -schalmei -schalmey -schalstein -schanz -schapbachite -schappe -schapped -schapping -scharf -Scharlachberger -schatchen -Scheat -Schedar -schediasm -schediastic -Schedius -schedular -schedulate -schedule -schedulize -scheelite -scheffel -schefferite -schelling -Schellingian -Schellingianism -Schellingism -schelly -scheltopusik -schema -schemata -schematic -schematically -schematism -schematist -schematization -schematize -schematizer -schematogram -schematograph -schematologetically -schematomancy -schematonics -scheme -schemeful -schemeless -schemer -schemery -scheming -schemingly -schemist -schemy -schene -schepel -schepen -scherm -scherzando -scherzi -scherzo -schesis -Scheuchzeria -Scheuchzeriaceae -scheuchzeriaceous -schiavone -Schiedam -schiffli -schiller -schillerfels -schillerization -schillerize -schilling -schimmel -schindylesis -schindyletic -Schinus -schipperke -Schisandra -Schisandraceae -schism -schisma -schismatic -schismatical -schismatically -schismaticalness -schismatism -schismatist -schismatize -schismic -schismless -schist -schistaceous -schistic -schistocelia -schistocephalus -Schistocerca -schistocoelia -schistocormia -schistocormus -schistocyte -schistocytosis -schistoglossia -schistoid -schistomelia -schistomelus -schistoprosopia -schistoprosopus -schistorrhachis -schistoscope -schistose -schistosity -Schistosoma -schistosome -schistosomia -schistosomiasis -schistosomus -schistosternia -schistothorax -schistous -schistus -Schizaea -Schizaeaceae -schizaeaceous -Schizanthus -schizanthus -schizaxon -schizocarp -schizocarpic -schizocarpous -schizochroal -schizocoele -schizocoelic -schizocoelous -schizocyte -schizocytosis -schizodinic -schizogamy -schizogenesis -schizogenetic -schizogenetically -schizogenic -schizogenous -schizogenously -schizognath -Schizognathae -schizognathism -schizognathous -schizogonic -schizogony -Schizogregarinae -schizogregarine -Schizogregarinida -schizoid -schizoidism -Schizolaenaceae -schizolaenaceous -schizolite -schizolysigenous -Schizomeria -schizomycete -Schizomycetes -schizomycetic -schizomycetous -schizomycosis -Schizonemertea -schizonemertean -schizonemertine -Schizoneura -Schizonotus -schizont -schizopelmous -Schizopetalon -schizophasia -Schizophragma -schizophrene -schizophrenia -schizophreniac -schizophrenic -Schizophyceae -Schizophyllum -Schizophyta -schizophyte -schizophytic -schizopod -Schizopoda -schizopodal -schizopodous -schizorhinal -schizospore -schizostele -schizostelic -schizostely -schizothecal -schizothoracic -schizothyme -schizothymia -schizothymic -schizotrichia -Schizotrypanum -schiztic -Schlauraffenland -Schleichera -schlemiel -schlemihl -schlenter -schlieren -schlieric -schloop -Schmalkaldic -schmaltz -schmelz -schmelze -schnabel -Schnabelkanne -schnapper -schnapps -schnauzer -schneider -Schneiderian -schnitzel -schnorchel -schnorkel -schnorrer -scho -schochat -schochet -schoenobatic -schoenobatist -Schoenocaulon -Schoenus -schoenus -Schoharie -schola -scholae -scholaptitude -scholar -scholarch -scholardom -scholarian -scholarism -scholarless -scholarlike -scholarliness -scholarly -scholarship -scholasm -scholastic -scholastical -scholastically -scholasticate -scholasticism -scholasticly -scholia -scholiast -scholiastic -scholion -scholium -Schomburgkia -schone -schonfelsite -Schoodic -School -school -schoolable -schoolbag -schoolbook -schoolbookish -schoolboy -schoolboydom -schoolboyhood -schoolboyish -schoolboyishly -schoolboyishness -schoolboyism -schoolbutter -schoolcraft -schooldame -schooldom -schooled -schoolery -schoolfellow -schoolfellowship -schoolful -schoolgirl -schoolgirlhood -schoolgirlish -schoolgirlishly -schoolgirlishness -schoolgirlism -schoolgirly -schoolgoing -schoolhouse -schooling -schoolingly -schoolish -schoolkeeper -schoolkeeping -schoolless -schoollike -schoolmaam -schoolmaamish -schoolmaid -schoolman -schoolmaster -schoolmasterhood -schoolmastering -schoolmasterish -schoolmasterishly -schoolmasterishness -schoolmasterism -schoolmasterly -schoolmastership -schoolmastery -schoolmate -schoolmiss -schoolmistress -schoolmistressy -schoolroom -schoolteacher -schoolteacherish -schoolteacherly -schoolteachery -schoolteaching -schooltide -schooltime -schoolward -schoolwork -schoolyard -schoon -schooner -Schopenhauereanism -Schopenhauerian -Schopenhauerism -schoppen -schorenbergite -schorl -schorlaceous -schorlomite -schorlous -schorly -schottische -schottish -schout -schraubthaler -Schrebera -schreiner -schreinerize -schriesheimite -Schrund -schtoff -schuh -schuhe -schuit -schule -schultenite -schungite -schuss -schute -schwa -schwabacher -Schwalbea -schwarz -Schwarzian -schweizer -schweizerkase -Schwendenerian -Schwenkfelder -Schwenkfeldian -Sciadopitys -Sciaena -sciaenid -Sciaenidae -sciaeniform -Sciaeniformes -sciaenoid -scialytic -sciamachy -Scian -sciapod -sciapodous -Sciara -sciarid -Sciaridae -Sciarinae -sciatheric -sciatherical -sciatherically -sciatic -sciatica -sciatical -sciatically -sciaticky -scibile -science -scienced -scient -sciential -scientician -scientific -scientifical -scientifically -scientificalness -scientificogeographical -scientificohistorical -scientificophilosophical -scientificopoetic -scientificoreligious -scientificoromantic -scientintically -scientism -Scientist -scientist -scientistic -scientistically -scientize -scientolism -scilicet -Scilla -scillain -scillipicrin -Scillitan -scillitin -scillitoxin -Scillonian -scimitar -scimitared -scimitarpod -scincid -Scincidae -scincidoid -scinciform -scincoid -scincoidian -Scincomorpha -Scincus -scind -sciniph -scintilla -scintillant -scintillantly -scintillate -scintillating -scintillatingly -scintillation -scintillator -scintillescent -scintillize -scintillometer -scintilloscope -scintillose -scintillously -scintle -scintler -scintling -sciograph -sciographic -sciography -sciolism -sciolist -sciolistic -sciolous -sciomachiology -sciomachy -sciomancy -sciomantic -scion -sciophilous -sciophyte -scioptic -sciopticon -scioptics -scioptric -sciosophist -sciosophy -Sciot -scioterical -scioterique -sciotheism -sciotheric -sciotherical -sciotherically -scious -scirenga -Scirophoria -Scirophorion -Scirpus -scirrhi -scirrhogastria -scirrhoid -scirrhoma -scirrhosis -scirrhous -scirrhus -scirrosity -scirtopod -Scirtopoda -scirtopodous -scissel -scissible -scissile -scission -scissiparity -scissor -scissorbill -scissorbird -scissorer -scissoring -scissorium -scissorlike -scissorlikeness -scissors -scissorsbird -scissorsmith -scissorstail -scissortail -scissorwise -scissura -scissure -Scissurella -scissurellid -Scissurellidae -Scitaminales -Scitamineae -sciurid -Sciuridae -sciurine -sciuroid -sciuromorph -Sciuromorpha -sciuromorphic -Sciuropterus -Sciurus -sclaff -sclate -sclater -Sclav -Sclavonian -sclaw -scler -sclera -scleral -scleranth -Scleranthaceae -Scleranthus -scleratogenous -sclere -sclerectasia -sclerectomy -scleredema -sclereid -sclerema -sclerencephalia -sclerenchyma -sclerenchymatous -sclerenchyme -sclererythrin -scleretinite -Scleria -scleriasis -sclerification -sclerify -sclerite -scleritic -scleritis -sclerized -sclerobase -sclerobasic -scleroblast -scleroblastema -scleroblastemic -scleroblastic -sclerocauly -sclerochorioiditis -sclerochoroiditis -scleroconjunctival -scleroconjunctivitis -sclerocornea -sclerocorneal -sclerodactylia -sclerodactyly -scleroderm -Scleroderma -scleroderma -Sclerodermaceae -Sclerodermata -Sclerodermatales -sclerodermatitis -sclerodermatous -Sclerodermi -sclerodermia -sclerodermic -sclerodermite -sclerodermitic -sclerodermitis -sclerodermous -sclerogen -Sclerogeni -sclerogenoid -sclerogenous -scleroid -scleroiritis -sclerokeratitis -sclerokeratoiritis -scleroma -scleromata -scleromeninx -scleromere -sclerometer -sclerometric -scleronychia -scleronyxis -Scleropages -Scleroparei -sclerophthalmia -sclerophyll -sclerophyllous -sclerophylly -scleroprotein -sclerosal -sclerosarcoma -Scleroscope -scleroscope -sclerose -sclerosed -scleroseptum -sclerosis -scleroskeletal -scleroskeleton -Sclerospora -sclerostenosis -Sclerostoma -sclerostomiasis -sclerotal -sclerote -sclerotia -sclerotial -sclerotic -sclerotica -sclerotical -scleroticectomy -scleroticochorioiditis -scleroticochoroiditis -scleroticonyxis -scleroticotomy -Sclerotinia -sclerotinial -sclerotiniose -sclerotioid -sclerotitic -sclerotitis -sclerotium -sclerotized -sclerotoid -sclerotome -sclerotomic -sclerotomy -sclerous -scleroxanthin -sclerozone -scliff -sclim -sclimb -scoad -scob -scobby -scobicular -scobiform -scobs -scoff -scoffer -scoffery -scoffing -scoffingly -scoffingstock -scofflaw -scog -scoggan -scogger -scoggin -scogginism -scogginist -scoinson -scoke -scolb -scold -scoldable -scoldenore -scolder -scolding -scoldingly -scoleces -scoleciasis -scolecid -Scolecida -scoleciform -scolecite -scolecoid -scolecology -scolecophagous -scolecospore -scoleryng -scolex -Scolia -scolia -scolices -scoliid -Scoliidae -scoliograptic -scoliokyposis -scoliometer -scolion -scoliorachitic -scoliosis -scoliotic -scoliotone -scolite -scollop -scolog -scolopaceous -Scolopacidae -scolopacine -Scolopax -Scolopendra -scolopendra -Scolopendrella -Scolopendrellidae -scolopendrelloid -scolopendrid -Scolopendridae -scolopendriform -scolopendrine -Scolopendrium -scolopendroid -scolophore -scolopophore -Scolymus -scolytid -Scolytidae -scolytoid -Scolytus -Scomber -scomberoid -Scombresocidae -Scombresox -scombrid -Scombridae -scombriform -Scombriformes -scombrine -scombroid -Scombroidea -scombroidean -scombrone -sconce -sconcer -sconcheon -sconcible -scone -scoon -scoop -scooped -scooper -scoopful -scooping -scoopingly -scoot -scooter -scopa -scoparin -scoparius -scopate -scope -scopeless -scopelid -Scopelidae -scopeliform -scopelism -scopeloid -Scopelus -scopet -scopic -Scopidae -scopiferous -scopiform -scopiformly -scopine -scopiped -scopola -scopolamine -scopoleine -scopoletin -scopoline -scopperil -scops -scoptical -scoptically -scoptophilia -scoptophiliac -scoptophilic -scoptophobia -scopula -Scopularia -scopularian -scopulate -scopuliferous -scopuliform -scopuliped -Scopulipedes -scopulite -scopulous -scopulousness -Scopus -scorbute -scorbutic -scorbutical -scorbutically -scorbutize -scorbutus -scorch -scorched -scorcher -scorching -scorchingly -scorchingness -scorchproof -score -scoreboard -scorebook -scored -scorekeeper -scorekeeping -scoreless -scorer -scoria -scoriac -scoriaceous -scoriae -scorification -scorifier -scoriform -scorify -scoring -scorious -scorn -scorned -scorner -scornful -scornfully -scornfulness -scorningly -scornproof -scorny -scorodite -Scorpaena -scorpaenid -Scorpaenidae -scorpaenoid -scorpene -scorper -Scorpidae -Scorpididae -Scorpii -Scorpiid -Scorpio -scorpioid -scorpioidal -Scorpioidea -scorpion -Scorpiones -scorpionic -scorpionid -Scorpionida -Scorpionidea -Scorpionis -scorpionweed -scorpionwort -Scorpiurus -Scorpius -scorse -scortation -scortatory -Scorzonera -Scot -scot -scotale -Scotch -scotch -scotcher -Scotchery -Scotchification -Scotchify -Scotchiness -scotching -Scotchman -scotchman -Scotchness -Scotchwoman -Scotchy -scote -scoter -scoterythrous -Scotia -scotia -Scotic -scotino -Scotism -Scotist -Scotistic -Scotistical -Scotize -Scotlandwards -scotodinia -scotogram -scotograph -scotographic -scotography -scotoma -scotomata -scotomatic -scotomatical -scotomatous -scotomia -scotomic -scotomy -scotophobia -scotopia -scotopic -scotoscope -scotosis -Scots -Scotsman -Scotswoman -Scott -Scotticism -Scotticize -Scottie -Scottification -Scottify -Scottish -Scottisher -Scottishly -Scottishman -Scottishness -Scotty -scouch -scouk -scoundrel -scoundreldom -scoundrelish -scoundrelism -scoundrelly -scoundrelship -scoup -scour -scourage -scoured -scourer -scouress -scourfish -scourge -scourger -scourging -scourgingly -scouriness -scouring -scourings -scourway -scourweed -scourwort -scoury -scouse -scout -scoutcraft -scoutdom -scouter -scouth -scouther -scouthood -scouting -scoutingly -scoutish -scoutmaster -scoutwatch -scove -scovel -scovillite -scovy -scow -scowbank -scowbanker -scowder -scowl -scowler -scowlful -scowling -scowlingly -scowlproof -scowman -scrab -scrabble -scrabbled -scrabbler -scrabe -scrae -scraffle -scrag -scragged -scraggedly -scraggedness -scragger -scraggily -scragginess -scragging -scraggled -scraggling -scraggly -scraggy -scraily -scram -scramasax -scramble -scramblement -scrambler -scrambling -scramblingly -scrambly -scrampum -scran -scranch -scrank -scranky -scrannel -scranning -scranny -scrap -scrapable -scrapbook -scrape -scrapeage -scraped -scrapepenny -scraper -scrapie -scraping -scrapingly -scrapler -scraplet -scrapling -scrapman -scrapmonger -scrappage -scrapped -scrapper -scrappet -scrappily -scrappiness -scrapping -scrappingly -scrapple -scrappler -scrappy -scrapworks -scrapy -scrat -scratch -scratchable -scratchably -scratchback -scratchboard -scratchbrush -scratchcard -scratchcarding -scratchcat -scratcher -scratches -scratchification -scratchiness -scratching -scratchingly -scratchless -scratchlike -scratchman -scratchproof -scratchweed -scratchwork -scratchy -scrath -scratter -scrattle -scrattling -scrauch -scrauchle -scraunch -scraw -scrawk -scrawl -scrawler -scrawliness -scrawly -scrawm -scrawnily -scrawniness -scrawny -scray -scraze -screak -screaking -screaky -scream -screamer -screaminess -screaming -screamingly -screamproof -screamy -scree -screech -screechbird -screecher -screechily -screechiness -screeching -screechingly -screechy -screed -screek -screel -screeman -screen -screenable -screenage -screencraft -screendom -screened -screener -screening -screenless -screenlike -screenman -screenplay -screensman -screenwise -screenwork -screenwriter -screeny -screet -screeve -screeved -screever -screich -screigh -screve -screver -screw -screwable -screwage -screwball -screwbarrel -screwdrive -screwdriver -screwed -screwer -screwhead -screwiness -screwing -screwish -screwless -screwlike -screwman -screwmatics -screwship -screwsman -screwstem -screwstock -screwwise -screwworm -screwy -scribable -scribacious -scribaciousness -scribal -scribatious -scribatiousness -scribblage -scribblative -scribblatory -scribble -scribbleable -scribbled -scribbledom -scribbleism -scribblemania -scribblement -scribbleomania -scribbler -scribbling -scribblingly -scribbly -scribe -scriber -scribeship -scribing -scribism -scribophilous -scride -scrieve -scriever -scriggle -scriggler -scriggly -scrike -scrim -scrime -scrimer -scrimmage -scrimmager -scrimp -scrimped -scrimpily -scrimpiness -scrimpingly -scrimply -scrimpness -scrimption -scrimpy -scrimshander -scrimshandy -scrimshank -scrimshanker -scrimshaw -scrimshon -scrimshorn -scrin -scrinch -scrine -scringe -scriniary -scrip -scripee -scripless -scrippage -script -scription -scriptitious -scriptitiously -scriptitory -scriptive -scriptor -scriptorial -scriptorium -scriptory -scriptural -Scripturalism -scripturalism -Scripturalist -scripturalist -Scripturality -scripturality -scripturalize -scripturally -scripturalness -Scripturarian -Scripture -scripture -Scriptured -scriptured -Scriptureless -scripturiency -scripturient -Scripturism -scripturism -Scripturist -scripula -scripulum -scritch -scritoire -scrivaille -scrive -scrivello -scriven -scrivener -scrivenership -scrivenery -scrivening -scrivenly -scriver -scrob -scrobble -scrobe -scrobicula -scrobicular -scrobiculate -scrobiculated -scrobicule -scrobiculus -scrobis -scrod -scrodgill -scroff -scrofula -scrofularoot -scrofulaweed -scrofulide -scrofulism -scrofulitic -scrofuloderm -scrofuloderma -scrofulorachitic -scrofulosis -scrofulotuberculous -scrofulous -scrofulously -scrofulousness -scrog -scroggy -scrolar -scroll -scrolled -scrollery -scrollhead -scrollwise -scrollwork -scrolly -scronach -scroo -scrooch -scrooge -scroop -Scrophularia -Scrophulariaceae -scrophulariaceous -scrota -scrotal -scrotectomy -scrotiform -scrotitis -scrotocele -scrotofemoral -scrotum -scrouge -scrouger -scrounge -scrounger -scrounging -scrout -scrow -scroyle -scrub -scrubbable -scrubbed -scrubber -scrubbery -scrubbily -scrubbiness -scrubbird -scrubbly -scrubboard -scrubby -scrubgrass -scrubland -scrubwood -scruf -scruff -scruffle -scruffman -scruffy -scruft -scrum -scrummage -scrummager -scrump -scrumple -scrumption -scrumptious -scrumptiously -scrumptiousness -scrunch -scrunchy -scrunge -scrunger -scrunt -scruple -scrupleless -scrupler -scruplesome -scruplesomeness -scrupula -scrupular -scrupuli -scrupulist -scrupulosity -scrupulous -scrupulously -scrupulousness -scrupulum -scrupulus -scrush -scrutability -scrutable -scrutate -scrutation -scrutator -scrutatory -scrutinant -scrutinate -scrutineer -scrutinization -scrutinize -scrutinizer -scrutinizingly -scrutinous -scrutinously -scrutiny -scruto -scrutoire -scruze -scry -scryer -scud -scuddaler -scuddawn -scudder -scuddick -scuddle -scuddy -scudi -scudler -scudo -scuff -scuffed -scuffer -scuffle -scuffler -scufflingly -scuffly -scuffy -scuft -scufter -scug -scuggery -sculch -sculduddery -scull -sculler -scullery -scullful -scullion -scullionish -scullionize -scullionship -scullog -sculp -sculper -sculpin -sculpt -sculptile -sculptitory -sculptograph -sculptography -Sculptor -sculptor -Sculptorid -sculptress -sculptural -sculpturally -sculpturation -sculpture -sculptured -sculpturer -sculpturesque -sculpturesquely -sculpturesqueness -sculpturing -sculsh -scum -scumber -scumble -scumbling -scumboard -scumfish -scumless -scumlike -scummed -scummer -scumming -scummy -scumproof -scun -scuncheon -scunder -scunner -scup -scupful -scuppaug -scupper -scuppernong -scuppet -scuppler -scur -scurdy -scurf -scurfer -scurfily -scurfiness -scurflike -scurfy -scurrier -scurrile -scurrilist -scurrility -scurrilize -scurrilous -scurrilously -scurrilousness -scurry -scurvied -scurvily -scurviness -scurvish -scurvy -scurvyweed -scusation -scuse -scut -scuta -scutage -scutal -scutate -scutated -scutatiform -scutation -scutch -scutcheon -scutcheoned -scutcheonless -scutcheonlike -scutcheonwise -scutcher -scutching -scute -scutel -scutella -scutellae -scutellar -Scutellaria -scutellarin -scutellate -scutellated -scutellation -scutellerid -Scutelleridae -scutelliform -scutelligerous -scutelliplantar -scutelliplantation -scutellum -scutibranch -Scutibranchia -scutibranchian -scutibranchiate -scutifer -scutiferous -scutiform -scutiger -Scutigera -scutigeral -Scutigeridae -scutigerous -scutiped -scutter -scuttle -scuttlebutt -scuttleful -scuttleman -scuttler -scuttling -scuttock -scutty -scutula -scutular -scutulate -scutulated -scutulum -Scutum -scutum -scybala -scybalous -scybalum -scye -scyelite -Scyld -Scylla -Scyllaea -Scyllaeidae -scyllarian -Scyllaridae -scyllaroid -Scyllarus -Scyllidae -Scylliidae -scyllioid -Scylliorhinidae -scylliorhinoid -Scylliorhinus -scyllite -scyllitol -Scyllium -scypha -scyphae -scyphate -scyphi -scyphiferous -scyphiform -scyphiphorous -scyphistoma -scyphistomae -scyphistomoid -scyphistomous -scyphoi -scyphomancy -Scyphomedusae -scyphomedusan -scyphomedusoid -scyphophore -Scyphophori -scyphophorous -scyphopolyp -scyphose -scyphostoma -Scyphozoa -scyphozoan -scyphula -scyphulus -scyphus -scyt -scytale -Scyth -scythe -scytheless -scythelike -scytheman -scythesmith -scythestone -scythework -Scythian -Scythic -Scythize -scytitis -scytoblastema -scytodepsic -Scytonema -Scytonemataceae -scytonemataceous -scytonematoid -scytonematous -Scytopetalaceae -scytopetalaceous -Scytopetalum -sdeath -sdrucciola -se -sea -seabeach -seabeard -Seabee -seaberry -seaboard -seaborderer -seabound -seacannie -seacatch -seacoast -seaconny -seacraft -seacrafty -seacunny -seadog -seadrome -seafardinger -seafare -seafarer -seafaring -seaflood -seaflower -seafolk -Seaforthia -seafowl -Seaghan -seagirt -seagoer -seagoing -seah -seahound -seak -seal -sealable -sealant -sealch -sealed -sealer -sealery -sealess -sealet -sealette -sealflower -sealike -sealine -sealing -sealless -seallike -sealskin -sealwort -Sealyham -seam -seaman -seamancraft -seamanite -seamanlike -seamanly -seamanship -seamark -Seamas -seambiter -seamed -seamer -seaminess -seaming -seamless -seamlessly -seamlessness -seamlet -seamlike -seamost -seamrend -seamrog -seamster -seamstress -Seamus -seamy -Sean -seance -seapiece -seaplane -seaport -seaquake -sear -searce -searcer -search -searchable -searchableness -searchant -searcher -searcheress -searcherlike -searchership -searchful -searching -searchingly -searchingness -searchless -searchlight -searchment -searcloth -seared -searedness -searer -searing -searlesite -searness -seary -Seasan -seascape -seascapist -seascout -seascouting -seashine -seashore -seasick -seasickness -seaside -seasider -season -seasonable -seasonableness -seasonably -seasonal -seasonality -seasonally -seasonalness -seasoned -seasonedly -seasoner -seasoning -seasoninglike -seasonless -seastrand -seastroke -seat -seatang -seated -seater -seathe -seating -seatless -seatrain -seatron -seatsman -seatwork -seave -seavy -seawant -seaward -seawardly -seaware -seaway -seaweed -seaweedy -seawife -seawoman -seaworn -seaworthiness -seaworthy -seax -Seba -sebacate -sebaceous -sebacic -sebait -Sebastian -sebastianite -Sebastichthys -Sebastodes -sebate -sebesten -sebiferous -sebific -sebilla -sebiparous -sebkha -sebolith -seborrhagia -seborrhea -seborrheal -seborrheic -seborrhoic -Sebright -sebum -sebundy -sec -secability -secable -Secale -secalin -secaline -secalose -Secamone -secancy -secant -secantly -secateur -secede -Seceder -seceder -secern -secernent -secernment -secesh -secesher -Secessia -Secession -secession -Secessional -secessional -secessionalist -Secessiondom -secessioner -secessionism -secessionist -sech -Sechium -Sechuana -seck -Seckel -seclude -secluded -secludedly -secludedness -secluding -secluse -seclusion -seclusionist -seclusive -seclusively -seclusiveness -secodont -secohm -secohmmeter -second -secondar -secondarily -secondariness -secondary -seconde -seconder -secondhand -secondhanded -secondhandedly -secondhandedness -secondly -secondment -secondness -secos -secpar -secque -secre -secrecy -secret -secreta -secretage -secretagogue -secretarial -secretarian -Secretariat -secretariat -secretariate -secretary -secretaryship -secrete -secretin -secretion -secretional -secretionary -secretitious -secretive -secretively -secretiveness -secretly -secretmonger -secretness -secreto -secretomotor -secretor -secretory -secretum -sect -sectarial -sectarian -sectarianism -sectarianize -sectarianly -sectarism -sectarist -sectary -sectator -sectile -sectility -section -sectional -sectionalism -sectionalist -sectionality -sectionalization -sectionalize -sectionally -sectionary -sectionist -sectionize -sectioplanography -sectism -sectist -sectiuncle -sective -sector -sectoral -sectored -sectorial -sectroid -sectwise -secular -secularism -secularist -secularistic -secularity -secularization -secularize -secularizer -secularly -secularness -secund -secundate -secundation -secundiflorous -secundigravida -secundine -secundipara -secundiparity -secundiparous -secundly -secundogeniture -secundoprimary -secundus -securable -securance -secure -securely -securement -secureness -securer -securicornate -securifer -Securifera -securiferous -securiform -Securigera -securigerous -securitan -security -Sedaceae -Sedan -sedan -Sedang -sedanier -Sedat -sedate -sedately -sedateness -sedation -sedative -sedent -Sedentaria -sedentarily -sedentariness -sedentary -sedentation -Seder -sederunt -sedge -sedged -sedgelike -sedging -sedgy -sedigitate -sedigitated -sedile -sedilia -sediment -sedimental -sedimentarily -sedimentary -sedimentate -sedimentation -sedimentous -sedimetric -sedimetrical -sedition -seditionary -seditionist -seditious -seditiously -seditiousness -sedjadeh -Sedovic -seduce -seduceable -seducee -seducement -seducer -seducible -seducing -seducingly -seducive -seduct -seduction -seductionist -seductive -seductively -seductiveness -seductress -sedulity -sedulous -sedulously -sedulousness -Sedum -sedum -see -seeable -seeableness -Seebeck -seecatch -seech -seed -seedage -seedbed -seedbird -seedbox -seedcake -seedcase -seedeater -seeded -Seeder -seeder -seedful -seedgall -seedily -seediness -seedkin -seedless -seedlessness -seedlet -seedlike -seedling -seedlip -seedman -seedness -seedsman -seedstalk -seedtime -seedy -seege -seeing -seeingly -seeingness -seek -seeker -Seekerism -seeking -seel -seelful -seely -seem -seemable -seemably -seemer -seeming -seemingly -seemingness -seemless -seemlihead -seemlily -seemliness -seemly -seen -seenie -Seenu -seep -seepage -seeped -seepweed -seepy -seer -seerband -seercraft -seeress -seerfish -seerhand -seerhood -seerlike -seerpaw -seership -seersucker -seesaw -seesawiness -seesee -seethe -seething -seethingly -seetulputty -Sefekhet -seg -seggar -seggard -segged -seggrom -Seginus -segment -segmental -segmentally -segmentary -segmentate -segmentation -segmented -sego -segol -segolate -segreant -segregable -segregant -segregate -segregateness -segregation -segregational -segregationist -segregative -segregator -Sehyo -seiche -Seid -Seidel -seidel -Seidlitz -seigneur -seigneurage -seigneuress -seigneurial -seigneury -seignior -seigniorage -seignioral -seignioralty -seigniorial -seigniority -seigniorship -seigniory -seignorage -seignoral -seignorial -seignorize -seignory -seilenoi -seilenos -seine -seiner -seirospore -seirosporic -seise -seism -seismal -seismatical -seismetic -seismic -seismically -seismicity -seismism -seismochronograph -seismogram -seismograph -seismographer -seismographic -seismographical -seismography -seismologic -seismological -seismologically -seismologist -seismologue -seismology -seismometer -seismometric -seismometrical -seismometrograph -seismometry -seismomicrophone -seismoscope -seismoscopic -seismotectonic -seismotherapy -seismotic -seit -seity -Seiurus -Seiyuhonto -Seiyukai -seizable -seize -seizer -seizin -seizing -seizor -seizure -sejant -sejoin -sejoined -sejugate -sejugous -sejunct -sejunctive -sejunctively -sejunctly -Sekane -Sekani -Sekar -Seker -Sekhwan -sekos -selachian -Selachii -selachoid -Selachoidei -Selachostome -Selachostomi -selachostomous -seladang -Selaginaceae -Selaginella -Selaginellaceae -selaginellaceous -selagite -Selago -selah -selamin -selamlik -selbergite -Selbornian -seldom -seldomcy -seldomer -seldomly -seldomness -seldor -seldseen -sele -select -selectable -selected -selectedly -selectee -selection -selectionism -selectionist -selective -selectively -selectiveness -selectivity -selectly -selectman -selectness -selector -Selena -selenate -Selene -selenian -seleniate -selenic -Selenicereus -selenide -Selenidera -seleniferous -selenigenous -selenion -selenious -Selenipedium -selenite -selenitic -selenitical -selenitiferous -selenitish -selenium -seleniuret -selenobismuthite -selenocentric -selenodont -Selenodonta -selenodonty -selenograph -selenographer -selenographic -selenographical -selenographically -selenographist -selenography -selenolatry -selenological -selenologist -selenology -selenomancy -selenoscope -selenosis -selenotropic -selenotropism -selenotropy -selensilver -selensulphur -Seleucian -Seleucid -Seleucidae -Seleucidan -Seleucidean -Seleucidian -Seleucidic -self -selfcide -selfdom -selfful -selffulness -selfheal -selfhood -selfish -selfishly -selfishness -selfism -selfist -selfless -selflessly -selflessness -selfly -selfness -selfpreservatory -selfsame -selfsameness -selfward -selfwards -selictar -seligmannite -selihoth -Selina -Selinuntine -selion -Seljuk -Seljukian -sell -sella -sellable -sellably -sellaite -sellar -sellate -sellenders -seller -Selli -sellie -selliform -selling -sellout -selly -selsoviet -selsyn -selt -Selter -Seltzer -seltzogene -Selung -selva -selvage -selvaged -selvagee -selvedge -selzogene -Semaeostomae -Semaeostomata -Semang -semanteme -semantic -semantical -semantically -semantician -semanticist -semantics -semantological -semantology -semantron -semaphore -semaphoric -semaphorical -semaphorically -semaphorist -semarum -semasiological -semasiologically -semasiologist -semasiology -semateme -sematic -sematographic -sematography -sematology -sematrope -semball -semblable -semblably -semblance -semblant -semblative -semble -seme -Semecarpus -semeed -semeia -semeiography -semeiologic -semeiological -semeiologist -semeiology -semeion -semeiotic -semeiotical -semeiotics -semelfactive -semelincident -semen -semence -Semeostoma -semese -semester -semestral -semestrial -semi -semiabstracted -semiaccomplishment -semiacid -semiacidified -semiacquaintance -semiadherent -semiadjectively -semiadnate -semiaerial -semiaffectionate -semiagricultural -Semiahmoo -semialbinism -semialcoholic -semialien -semiallegiance -semialpine -semialuminous -semiamplexicaul -semiamplitude -semianarchist -semianatomical -semianatropal -semianatropous -semiangle -semiangular -semianimal -semianimate -semianimated -semiannealed -semiannual -semiannually -semiannular -semianthracite -semiantiministerial -semiantique -semiape -semiaperiodic -semiaperture -semiappressed -semiaquatic -semiarborescent -semiarc -semiarch -semiarchitectural -semiarid -semiaridity -semiarticulate -semiasphaltic -semiatheist -semiattached -semiautomatic -semiautomatically -semiautonomous -semiaxis -semibacchanalian -semibachelor -semibald -semibalked -semiball -semiballoon -semiband -semibarbarian -semibarbarianism -semibarbaric -semibarbarism -semibarbarous -semibaronial -semibarren -semibase -semibasement -semibastion -semibay -semibeam -semibejan -semibelted -semibifid -semibituminous -semibleached -semiblind -semiblunt -semibody -semiboiled -semibolshevist -semibolshevized -semibouffant -semibourgeois -semibreve -semibull -semiburrowing -semic -semicadence -semicalcareous -semicalcined -semicallipygian -semicanal -semicanalis -semicannibalic -semicantilever -semicarbazide -semicarbazone -semicarbonate -semicarbonize -semicardinal -semicartilaginous -semicastrate -semicastration -semicatholicism -semicaudate -semicelestial -semicell -semicellulose -semicentenarian -semicentenary -semicentennial -semicentury -semichannel -semichaotic -semichemical -semicheviot -semichevron -semichiffon -semichivalrous -semichoric -semichorus -semichrome -semicircle -semicircled -semicircular -semicircularity -semicircularly -semicircularness -semicircumference -semicircumferentor -semicircumvolution -semicirque -semicitizen -semicivilization -semicivilized -semiclassic -semiclassical -semiclause -semicleric -semiclerical -semiclimber -semiclimbing -semiclose -semiclosed -semiclosure -semicoagulated -semicoke -semicollapsible -semicollar -semicollegiate -semicolloid -semicolloquial -semicolon -semicolonial -semicolumn -semicolumnar -semicoma -semicomatose -semicombined -semicombust -semicomic -semicomical -semicommercial -semicompact -semicompacted -semicomplete -semicomplicated -semiconceal -semiconcrete -semiconducting -semiconductor -semicone -semiconfident -semiconfinement -semiconfluent -semiconformist -semiconformity -semiconic -semiconical -semiconnate -semiconnection -semiconoidal -semiconscious -semiconsciously -semiconsciousness -semiconservative -semiconsonant -semiconsonantal -semiconspicuous -semicontinent -semicontinuum -semicontraction -semicontradiction -semiconvergence -semiconvergent -semiconversion -semiconvert -semicordate -semicordated -semicoriaceous -semicorneous -semicoronate -semicoronated -semicoronet -semicostal -semicostiferous -semicotton -semicotyle -semicounterarch -semicountry -semicrepe -semicrescentic -semicretin -semicretinism -semicriminal -semicroma -semicrome -semicrustaceous -semicrystallinc -semicubical -semicubit -semicup -semicupium -semicupola -semicured -semicurl -semicursive -semicurvilinear -semicyclic -semicycloid -semicylinder -semicylindric -semicylindrical -semicynical -semidaily -semidangerous -semidark -semidarkness -semidead -semideaf -semidecay -semidecussation -semidefinite -semideific -semideification -semideistical -semideity -semidelight -semidelirious -semideltaic -semidemented -semidenatured -semidependence -semidependent -semideponent -semidesert -semidestructive -semidetached -semidetachment -semideveloped -semidiagrammatic -semidiameter -semidiapason -semidiapente -semidiaphaneity -semidiaphanous -semidiatessaron -semidifference -semidigested -semidigitigrade -semidigression -semidilapidation -semidine -semidirect -semidisabled -semidisk -semiditone -semidiurnal -semidivided -semidivine -semidocumentary -semidodecagon -semidole -semidome -semidomed -semidomestic -semidomesticated -semidomestication -semidomical -semidormant -semidouble -semidrachm -semidramatic -semidress -semidressy -semidried -semidry -semidrying -semiductile -semidull -semiduplex -semiduration -semieducated -semieffigy -semiegg -semiegret -semielastic -semielision -semiellipse -semiellipsis -semiellipsoidal -semielliptic -semielliptical -semienclosed -semiengaged -semiequitant -semierect -semieremitical -semiessay -semiexecutive -semiexpanded -semiexplanation -semiexposed -semiexternal -semiextinct -semiextinction -semifable -semifabulous -semifailure -semifamine -semifascia -semifasciated -semifashion -semifast -semifatalistic -semiferal -semiferous -semifeudal -semifeudalism -semifib -semifiction -semifictional -semifigurative -semifigure -semifinal -semifinalist -semifine -semifinish -semifinished -semifiscal -semifistular -semifit -semifitting -semifixed -semiflashproof -semiflex -semiflexed -semiflexible -semiflexion -semiflexure -semiflint -semifloating -semifloret -semifloscular -semifloscule -semiflosculose -semiflosculous -semifluctuant -semifluctuating -semifluid -semifluidic -semifluidity -semifoaming -semiforbidding -semiforeign -semiform -semiformal -semiformed -semifossil -semifossilized -semifrantic -semifriable -semifrontier -semifuddle -semifunctional -semifused -semifusion -semify -semigala -semigelatinous -semigentleman -semigenuflection -semigirder -semiglaze -semiglazed -semiglobe -semiglobose -semiglobular -semiglobularly -semiglorious -semiglutin -semigod -semigovernmental -semigrainy -semigranitic -semigranulate -semigravel -semigroove -semihand -semihard -semiharden -semihardy -semihastate -semihepatization -semiherbaceous -semiheterocercal -semihexagon -semihexagonal -semihiant -semihiatus -semihibernation -semihigh -semihistorical -semihobo -semihonor -semihoral -semihorny -semihostile -semihot -semihuman -semihumanitarian -semihumanized -semihumbug -semihumorous -semihumorously -semihyaline -semihydrate -semihydrobenzoinic -semihyperbola -semihyperbolic -semihyperbolical -semijealousy -semijubilee -semijudicial -semijuridical -semilanceolate -semilatent -semilatus -semileafless -semilegendary -semilegislative -semilens -semilenticular -semilethal -semiliberal -semilichen -semiligneous -semilimber -semilined -semiliquid -semiliquidity -semiliterate -semilocular -semilogarithmic -semilogical -semilong -semilooper -semiloose -semiloyalty -semilucent -semilunar -semilunare -semilunary -semilunate -semilunation -semilune -semiluxation -semiluxury -semimachine -semimade -semimadman -semimagical -semimagnetic -semimajor -semimalignant -semimanufacture -semimanufactured -semimarine -semimarking -semimathematical -semimature -semimechanical -semimedicinal -semimember -semimembranosus -semimembranous -semimenstrual -semimercerized -semimessianic -semimetal -semimetallic -semimetamorphosis -semimicrochemical -semimild -semimilitary -semimill -semimineral -semimineralized -semiminim -semiminor -semimolecule -semimonastic -semimonitor -semimonopoly -semimonster -semimonthly -semimoron -semimucous -semimute -semimystic -semimystical -semimythical -seminaked -seminal -seminality -seminally -seminaphthalidine -seminaphthylamine -seminar -seminarcosis -seminarial -seminarian -seminarianism -seminarist -seminaristic -seminarize -seminary -seminasal -seminase -seminatant -seminate -semination -seminationalization -seminative -seminebulous -seminecessary -seminegro -seminervous -seminiferal -seminiferous -seminific -seminifical -seminification -seminist -seminium -seminivorous -seminocturnal -Seminole -seminoma -seminomad -seminomadic -seminomata -seminonconformist -seminonflammable -seminonsensical -seminormal -seminose -seminovel -seminovelty -seminude -seminudity -seminule -seminuliferous -seminuria -seminvariant -seminvariantive -semioblivion -semioblivious -semiobscurity -semioccasional -semioccasionally -semiocclusive -semioctagonal -semiofficial -semiofficially -semiography -Semionotidae -Semionotus -semiopacity -semiopacous -semiopal -semiopalescent -semiopaque -semiopened -semiorb -semiorbicular -semiorbicularis -semiorbiculate -semiordinate -semiorganized -semioriental -semioscillation -semiosseous -semiostracism -semiotic -semiotician -semioval -semiovaloid -semiovate -semioviparous -semiovoid -semiovoidal -semioxidated -semioxidized -semioxygenated -semioxygenized -semipagan -semipalmate -semipalmated -semipalmation -semipanic -semipapal -semipapist -semiparallel -semiparalysis -semiparameter -semiparasitic -semiparasitism -semipaste -semipastoral -semipasty -semipause -semipeace -semipectinate -semipectinated -semipectoral -semiped -semipedal -semipellucid -semipellucidity -semipendent -semipenniform -semiperfect -semiperimeter -semiperimetry -semiperiphery -semipermanent -semipermeability -semipermeable -semiperoid -semiperspicuous -semipertinent -semipervious -semipetaloid -semipetrified -semiphase -semiphilologist -semiphilosophic -semiphilosophical -semiphlogisticated -semiphonotypy -semiphosphorescent -semipinacolic -semipinacolin -semipinnate -semipiscine -semiplantigrade -semiplastic -semiplumaceous -semiplume -semipolar -semipolitical -semipolitician -semipoor -semipopish -semipopular -semiporcelain -semiporous -semiporphyritic -semiportable -semipostal -semipractical -semiprecious -semipreservation -semiprimigenous -semiprivacy -semiprivate -semipro -semiprofane -semiprofessional -semiprofessionalized -semipronation -semiprone -semipronominal -semiproof -semiproselyte -semiprosthetic -semiprostrate -semiprotectorate -semiproven -semipublic -semipupa -semipurulent -semiputrid -semipyramidal -semipyramidical -semipyritic -semiquadrangle -semiquadrantly -semiquadrate -semiquantitative -semiquantitatively -semiquartile -semiquaver -semiquietism -semiquietist -semiquinquefid -semiquintile -semiquote -semiradial -semiradiate -Semiramis -Semiramize -semirapacious -semirare -semirattlesnake -semiraw -semirebellion -semirecondite -semirecumbent -semirefined -semireflex -semiregular -semirelief -semireligious -semireniform -semirepublican -semiresinous -semiresolute -semirespectability -semirespectable -semireticulate -semiretirement -semiretractile -semireverberatory -semirevolute -semirevolution -semirevolutionist -semirhythm -semiriddle -semirigid -semiring -semiroll -semirotary -semirotating -semirotative -semirotatory -semirotund -semirotunda -semiround -semiroyal -semiruin -semirural -semirustic -semis -semisacerdotal -semisacred -semisagittate -semisaint -semisaline -semisaltire -semisaprophyte -semisaprophytic -semisarcodic -semisatiric -semisaturation -semisavage -semisavagedom -semisavagery -semiscenic -semischolastic -semiscientific -semiseafaring -semisecondary -semisecrecy -semisecret -semisection -semisedentary -semisegment -semisensuous -semisentient -semisentimental -semiseparatist -semiseptate -semiserf -semiserious -semiseriously -semiseriousness -semiservile -semisevere -semiseverely -semiseverity -semisextile -semishady -semishaft -semisheer -semishirker -semishrub -semishrubby -semisightseeing -semisilica -semisimious -semisimple -semisingle -semisixth -semiskilled -semislave -semismelting -semismile -semisocial -semisocialism -semisociative -semisocinian -semisoft -semisolemn -semisolemnity -semisolemnly -semisolid -semisolute -semisomnambulistic -semisomnolence -semisomnous -semisopor -semisovereignty -semispan -semispeculation -semisphere -semispheric -semispherical -semispheroidal -semispinalis -semispiral -semispiritous -semispontaneity -semispontaneous -semispontaneously -semispontaneousness -semisport -semisporting -semisquare -semistagnation -semistaminate -semistarvation -semistarved -semistate -semisteel -semistiff -semistill -semistock -semistory -semistratified -semistriate -semistriated -semistuporous -semisubterranean -semisuburban -semisuccess -semisuccessful -semisuccessfully -semisucculent -semisupernatural -semisupinated -semisupination -semisupine -semisuspension -semisymmetric -semita -semitact -semitae -semitailored -semital -semitandem -semitangent -semitaur -Semite -semitechnical -semiteetotal -semitelic -semitendinosus -semitendinous -semiterete -semiterrestrial -semitertian -semitesseral -semitessular -semitheological -semithoroughfare -Semitic -Semiticism -Semiticize -Semitics -semitime -Semitism -Semitist -Semitization -Semitize -semitonal -semitonally -semitone -semitonic -semitonically -semitontine -semitorpid -semitour -semitrailer -semitrained -semitransept -semitranslucent -semitransparency -semitransparent -semitransverse -semitreasonable -semitrimmed -semitropic -semitropical -semitropics -semitruth -semituberous -semitubular -semiuncial -semiundressed -semiuniversalist -semiupright -semiurban -semiurn -semivalvate -semivault -semivector -semivegetable -semivertebral -semiverticillate -semivibration -semivirtue -semiviscid -semivital -semivitreous -semivitrification -semivitrified -semivocal -semivocalic -semivolatile -semivolcanic -semivoluntary -semivowel -semivulcanized -semiwaking -semiwarfare -semiweekly -semiwild -semiwoody -semiyearly -semmet -semmit -Semnae -Semnones -Semnopithecinae -semnopithecine -Semnopithecus -semola -semolella -semolina -semological -semology -Semostomae -semostomeous -semostomous -semperannual -sempergreen -semperidentical -semperjuvenescent -sempervirent -sempervirid -Sempervivum -sempitern -sempiternal -sempiternally -sempiternity -sempiternize -sempiternous -sempstrywork -semsem -semuncia -semuncial -sen -Senaah -senaite -senam -senarian -senarius -senarmontite -senary -senate -senator -senatorial -senatorially -senatorian -senatorship -senatory -senatress -senatrices -senatrix -sence -Senci -sencion -send -sendable -sendal -sendee -sender -sending -Seneca -Senecan -Senecio -senecioid -senecionine -senectitude -senectude -senectuous -senega -Senegal -Senegalese -Senegambian -senegin -senesce -senescence -senescent -seneschal -seneschally -seneschalship -seneschalsy -seneschalty -sengreen -senicide -Senijextee -senile -senilely -senilism -senility -senilize -senior -seniority -seniorship -Senlac -Senna -senna -sennegrass -sennet -sennight -sennit -sennite -senocular -Senones -Senonian -sensa -sensable -sensal -sensate -sensation -sensational -sensationalism -sensationalist -sensationalistic -sensationalize -sensationally -sensationary -sensationish -sensationism -sensationist -sensationistic -sensationless -sensatorial -sensatory -sense -sensed -senseful -senseless -senselessly -senselessness -sensibilia -sensibilisin -sensibilitist -sensibilitous -sensibility -sensibilium -sensibilization -sensibilize -sensible -sensibleness -sensibly -sensical -sensifacient -sensiferous -sensific -sensificatory -sensifics -sensify -sensigenous -sensile -sensilia -sensilla -sensillum -sension -sensism -sensist -sensistic -sensitive -sensitively -sensitiveness -sensitivity -sensitization -sensitize -sensitizer -sensitometer -sensitometric -sensitometry -sensitory -sensive -sensize -senso -sensomobile -sensomobility -sensomotor -sensoparalysis -sensor -sensoria -sensorial -sensoriglandular -sensorimotor -sensorimuscular -sensorium -sensorivascular -sensorivasomotor -sensorivolitional -sensory -sensual -sensualism -sensualist -sensualistic -sensuality -sensualization -sensualize -sensually -sensualness -sensuism -sensuist -sensum -sensuosity -sensuous -sensuously -sensuousness -sensyne -sent -sentence -sentencer -sentential -sententially -sententiarian -sententiarist -sententiary -sententiosity -sententious -sententiously -sententiousness -sentience -sentiendum -sentient -sentiently -sentiment -sentimental -sentimentalism -sentimentalist -sentimentality -sentimentalization -sentimentalize -sentimentalizer -sentimentally -sentimenter -sentimentless -sentinel -sentinellike -sentinelship -sentinelwise -sentisection -sentition -sentry -Senusi -Senusian -Senusism -sepad -sepal -sepaled -sepaline -sepalled -sepalody -sepaloid -separability -separable -separableness -separably -separata -separate -separatedly -separately -separateness -separates -separatical -separating -separation -separationism -separationist -separatism -separatist -separatistic -separative -separatively -separativeness -separator -separatory -separatress -separatrix -separatum -Sepharad -Sephardi -Sephardic -Sephardim -Sepharvites -sephen -sephiric -sephirothic -sepia -sepiaceous -sepialike -sepian -sepiarian -sepiary -sepic -sepicolous -Sepiidae -sepiment -sepioid -Sepioidea -Sepiola -Sepiolidae -sepiolite -sepion -sepiost -sepiostaire -sepium -sepone -sepoy -seppuku -seps -Sepsidae -sepsine -sepsis -Sept -sept -septa -septal -septan -septane -septangle -septangled -septangular -septangularness -septarian -septariate -septarium -septate -septated -septation -septatoarticulate -septavalent -septave -septcentenary -septectomy -September -Septemberer -Septemberism -Septemberist -Septembral -Septembrian -Septembrist -Septembrize -Septembrizer -septemdecenary -septemfid -septemfluous -septemfoliate -septemfoliolate -septemia -septempartite -septemplicate -septemvious -septemvir -septemvirate -septemviri -septenar -septenarian -septenarius -septenary -septenate -septendecennial -septendecimal -septennary -septennate -septenniad -septennial -septennialist -septenniality -septennially -septennium -septenous -Septentrio -Septentrion -septentrional -septentrionality -septentrionally -septentrionate -septentrionic -septerium -septet -septfoil -Septi -Septibranchia -Septibranchiata -septic -septical -septically -septicemia -septicemic -septicidal -septicidally -septicity -septicization -septicolored -septicopyemia -septicopyemic -septier -septifarious -septiferous -septifluous -septifolious -septiform -septifragal -septifragally -septilateral -septile -septillion -septillionth -septimal -septimanal -septimanarian -septime -septimetritis -septimole -septinsular -septipartite -septisyllabic -septisyllable -septivalent -septleva -Septobasidium -septocosta -septocylindrical -Septocylindrium -septodiarrhea -septogerm -Septogloeum -septoic -septole -septomarginal -septomaxillary -septonasal -Septoria -septotomy -septship -septuagenarian -septuagenarianism -septuagenary -septuagesima -Septuagint -septuagint -Septuagintal -septulate -septulum -septum -septuncial -septuor -septuple -septuplet -septuplicate -septuplication -sepulcher -sepulchral -sepulchralize -sepulchrally -sepulchrous -sepultural -sepulture -sequa -sequacious -sequaciously -sequaciousness -sequacity -Sequan -Sequani -Sequanian -sequel -sequela -sequelae -sequelant -sequence -sequencer -sequency -sequent -sequential -sequentiality -sequentially -sequently -sequest -sequester -sequestered -sequesterment -sequestra -sequestrable -sequestral -sequestrate -sequestration -sequestrator -sequestratrices -sequestratrix -sequestrectomy -sequestrotomy -sequestrum -sequin -sequitur -Sequoia -ser -sera -serab -Serabend -seragli -seraglio -serai -serail -seral -seralbumin -seralbuminous -serang -serape -Serapea -Serapeum -seraph -seraphic -seraphical -seraphically -seraphicalness -seraphicism -seraphicness -seraphim -seraphina -seraphine -seraphism -seraphlike -seraphtide -Serapias -Serapic -Serapis -Serapist -serasker -seraskerate -seraskier -seraskierat -serau -seraw -Serb -Serbdom -Serbian -Serbize -Serbonian -Serbophile -Serbophobe -sercial -serdab -Serdar -Sere -sere -Serean -sereh -Serena -serenade -serenader -serenata -serenate -Serendib -serendibite -serendipity -serendite -serene -serenely -sereneness -serenify -serenissime -serenissimi -serenissimo -serenity -serenize -Serenoa -Serer -Seres -sereward -serf -serfage -serfdom -serfhood -serfish -serfishly -serfishness -serfism -serflike -serfship -Serge -serge -sergeancy -Sergeant -sergeant -sergeantcy -sergeantess -sergeantry -sergeantship -sergeanty -sergedesoy -Sergei -serger -sergette -serging -Sergio -Sergiu -Sergius -serglobulin -Seri -serial -serialist -seriality -serialization -serialize -serially -Serian -seriary -seriate -seriately -seriatim -seriation -Seric -Sericana -sericate -sericated -sericea -sericeotomentose -sericeous -sericicultural -sericiculture -sericiculturist -sericin -sericipary -sericite -sericitic -sericitization -Sericocarpus -sericteria -sericterium -serictery -sericultural -sericulture -sericulturist -seriema -series -serif -serific -Seriform -serigraph -serigrapher -serigraphy -serimeter -serin -serine -serinette -seringa -seringal -seringhi -Serinus -serio -seriocomedy -seriocomic -seriocomical -seriocomically -seriogrotesque -Seriola -Seriolidae -serioline -serioludicrous -seriopantomimic -serioridiculous -seriosity -serious -seriously -seriousness -seripositor -Serjania -serjeant -serment -sermo -sermocination -sermocinatrix -sermon -sermoneer -sermoner -sermonesque -sermonet -sermonettino -sermonic -sermonically -sermonics -sermonish -sermonism -sermonist -sermonize -sermonizer -sermonless -sermonoid -sermonolatry -sermonology -sermonproof -sermonwise -sermuncle -sernamby -sero -seroalbumin -seroalbuminuria -seroanaphylaxis -serobiological -serocolitis -serocyst -serocystic -serodermatosis -serodermitis -serodiagnosis -serodiagnostic -seroenteritis -seroenzyme -serofibrinous -serofibrous -serofluid -serogelatinous -serohemorrhagic -serohepatitis -seroimmunity -serolactescent -serolemma -serolin -serolipase -serologic -serological -serologically -serologist -serology -seromaniac -seromembranous -seromucous -seromuscular -seron -seronegative -seronegativity -seroon -seroot -seroperitoneum -serophthisis -serophysiology -seroplastic -seropneumothorax -seropositive -seroprevention -seroprognosis -seroprophylaxis -seroprotease -seropuriform -seropurulent -seropus -seroreaction -serosa -serosanguineous -serosanguinolent -seroscopy -serositis -serosity -serosynovial -serosynovitis -serotherapeutic -serotherapeutics -serotherapist -serotherapy -serotina -serotinal -serotine -serotinous -serotoxin -serous -serousness -serovaccine -serow -serozyme -Serpari -serpedinous -Serpens -Serpent -serpent -serpentaria -Serpentarian -Serpentarii -serpentarium -Serpentarius -serpentary -serpentcleide -serpenteau -Serpentes -serpentess -Serpentian -serpenticidal -serpenticide -Serpentid -serpentiferous -serpentiform -serpentina -serpentine -serpentinely -Serpentinian -serpentinic -serpentiningly -serpentinization -serpentinize -serpentinoid -serpentinous -Serpentis -serpentivorous -serpentize -serpentlike -serpently -serpentoid -serpentry -serpentwood -serphid -Serphidae -serphoid -Serphoidea -serpierite -serpiginous -serpiginously -serpigo -serpivolant -serpolet -Serpula -serpula -Serpulae -serpulae -serpulan -serpulid -Serpulidae -serpulidan -serpuline -serpulite -serpulitic -serpuloid -serra -serradella -serrage -serran -serrana -serranid -Serranidae -Serrano -serrano -serranoid -Serranus -Serrasalmo -serrate -serrated -serratic -serratiform -serratile -serration -serratirostral -serratocrenate -serratodentate -serratodenticulate -serratoglandulous -serratospinose -serrature -serricorn -Serricornia -Serridentines -Serridentinus -serried -serriedly -serriedness -Serrifera -serriferous -serriform -serriped -serrirostrate -serrulate -serrulated -serrulation -serry -sert -serta -Sertularia -sertularian -Sertulariidae -sertularioid -sertule -sertulum -sertum -serum -serumal -serut -servable -servage -serval -servaline -servant -servantcy -servantdom -servantess -servantless -servantlike -servantry -servantship -servation -serve -servente -serventism -server -servery -servet -Servetian -Servetianism -Servian -service -serviceability -serviceable -serviceableness -serviceably -serviceberry -serviceless -servicelessness -serviceman -Servidor -servidor -servient -serviential -serviette -servile -servilely -servileness -servilism -servility -servilize -serving -servingman -servist -Servite -servitor -servitorial -servitorship -servitress -servitrix -servitude -serviture -Servius -servo -servomechanism -servomotor -servulate -serwamby -sesame -sesamoid -sesamoidal -sesamoiditis -Sesamum -Sesban -Sesbania -sescuple -Seseli -Seshat -Sesia -Sesiidae -sesma -sesqui -sesquialter -sesquialtera -sesquialteral -sesquialteran -sesquialterous -sesquibasic -sesquicarbonate -sesquicentennial -sesquichloride -sesquiduplicate -sesquihydrate -sesquihydrated -sesquinona -sesquinonal -sesquioctava -sesquioctaval -sesquioxide -sesquipedal -sesquipedalian -sesquipedalianism -sesquipedality -sesquiplicate -sesquiquadrate -sesquiquarta -sesquiquartal -sesquiquartile -sesquiquinta -sesquiquintal -sesquiquintile -sesquisalt -sesquiseptimal -sesquisextal -sesquisilicate -sesquisquare -sesquisulphate -sesquisulphide -sesquisulphuret -sesquiterpene -sesquitertia -sesquitertial -sesquitertian -sesquitertianal -sess -sessile -sessility -Sessiliventres -session -sessional -sessionary -sessions -sesterce -sestertium -sestet -sesti -sestiad -Sestian -sestina -sestine -sestole -sestuor -Sesuto -Sesuvium -set -seta -setaceous -setaceously -setae -setal -Setaria -setarious -setback -setbolt -setdown -setfast -Seth -seth -sethead -Sethian -Sethic -Sethite -Setibo -setier -Setifera -setiferous -setiform -setigerous -setiparous -setirostral -setline -setness -setoff -seton -Setophaga -Setophaginae -setophagine -setose -setous -setout -setover -setscrew -setsman -sett -settable -settaine -settee -setter -settergrass -setterwort -setting -settle -settleable -settled -settledly -settledness -settlement -settler -settlerdom -settling -settlings -settlor -settsman -setula -setule -setuliform -setulose -setulous -setup -setwall -setwise -setwork -seugh -Sevastopol -seven -sevenbark -sevener -sevenfold -sevenfolded -sevenfoldness -sevennight -sevenpence -sevenpenny -sevenscore -seventeen -seventeenfold -seventeenth -seventeenthly -seventh -seventhly -seventieth -seventy -seventyfold -sever -severable -several -severalfold -severality -severalize -severally -severalness -severalth -severalty -severance -severation -severe -severedly -severely -severeness -severer -Severian -severingly -severish -severity -severization -severize -severy -Sevillian -sew -sewable -sewage -sewan -sewed -sewellel -sewen -sewer -sewerage -sewered -sewerless -sewerlike -sewerman -sewery -sewing -sewless -sewn -sewround -sex -sexadecimal -sexagenarian -sexagenarianism -sexagenary -Sexagesima -sexagesimal -sexagesimally -sexagesimals -sexagonal -sexangle -sexangled -sexangular -sexangularly -sexannulate -sexarticulate -sexcentenary -sexcuspidate -sexdigital -sexdigitate -sexdigitated -sexdigitism -sexed -sexenary -sexennial -sexennially -sexennium -sexern -sexfarious -sexfid -sexfoil -sexhood -sexifid -sexillion -sexiped -sexipolar -sexisyllabic -sexisyllable -sexitubercular -sexivalence -sexivalency -sexivalent -sexless -sexlessly -sexlessness -sexlike -sexlocular -sexly -sexological -sexologist -sexology -sexpartite -sexradiate -sext -sextactic -sextain -sextan -sextans -Sextant -sextant -sextantal -sextar -sextarii -sextarius -sextary -sextennial -sextern -sextet -sextic -sextile -Sextilis -sextillion -sextillionth -sextipara -sextipartite -sextipartition -sextiply -sextipolar -sexto -sextodecimo -sextole -sextolet -sexton -sextoness -sextonship -sextry -sextubercular -sextuberculate -sextula -sextulary -sextumvirate -sextuple -sextuplet -sextuplex -sextuplicate -sextuply -sexual -sexuale -sexualism -sexualist -sexuality -sexualization -sexualize -sexually -sexuous -sexupara -sexuparous -sexy -sey -seybertite -Seymeria -Seymour -sfoot -Sgad -sgraffiato -sgraffito -sh -sha -shaatnez -shab -Shaban -shabash -Shabbath -shabbed -shabbify -shabbily -shabbiness -shabble -shabby -shabbyish -shabrack -shabunder -Shabuoth -shachle -shachly -shack -shackanite -shackatory -shackbolt -shackland -shackle -shacklebone -shackledom -shackler -shacklewise -shackling -shackly -shacky -shad -shadbelly -shadberry -shadbird -shadbush -shadchan -shaddock -shade -shaded -shadeful -shadeless -shadelessness -shader -shadetail -shadflower -shadily -shadine -shadiness -shading -shadkan -shadoof -Shadow -shadow -shadowable -shadowbox -shadowboxing -shadowed -shadower -shadowfoot -shadowgram -shadowgraph -shadowgraphic -shadowgraphist -shadowgraphy -shadowily -shadowiness -shadowing -shadowishly -shadowist -shadowland -shadowless -shadowlessness -shadowlike -shadowly -shadowy -shadrach -shady -shaffle -Shafiite -shaft -shafted -shafter -shaftfoot -shafting -shaftless -shaftlike -shaftman -shaftment -shaftsman -shaftway -shafty -shag -shaganappi -shagbag -shagbark -shagged -shaggedness -shaggily -shagginess -shaggy -Shagia -shaglet -shaglike -shagpate -shagrag -shagreen -shagreened -shagroon -shagtail -shah -Shahaptian -shaharith -shahdom -shahi -Shahid -shahin -shahzada -Shai -Shaigia -shaikh -Shaikiyeh -shaitan -Shaiva -Shaivism -Shaka -shakable -shake -shakeable -shakebly -shakedown -shakefork -shaken -shakenly -shakeout -shakeproof -Shaker -shaker -shakerag -Shakerdom -Shakeress -Shakerism -Shakerlike -shakers -shakescene -Shakespearean -Shakespeareana -Shakespeareanism -Shakespeareanly -Shakespearize -Shakespearolater -Shakespearolatry -shakha -Shakil -shakily -shakiness -shaking -shakingly -shako -shaksheer -Shakta -Shakti -shakti -Shaktism -shaku -shaky -Shakyamuni -Shalako -shale -shalelike -shaleman -shall -shallal -shallon -shalloon -shallop -shallopy -shallot -shallow -shallowbrained -shallowhearted -shallowish -shallowist -shallowly -shallowness -shallowpate -shallowpated -shallows -shallowy -shallu -shalom -shalt -shalwar -shaly -Sham -sham -shama -shamable -shamableness -shamably -shamal -shamalo -shaman -shamaness -shamanic -shamanism -shamanist -shamanistic -shamanize -shamateur -shamba -Shambala -shamble -shambling -shamblingly -shambrier -Shambu -shame -shameable -shamed -shameface -shamefaced -shamefacedly -shamefacedness -shamefast -shamefastly -shamefastness -shameful -shamefully -shamefulness -shameless -shamelessly -shamelessness -shameproof -shamer -shamesick -shameworthy -shamianah -Shamim -shamir -Shammar -shammed -shammer -shammick -shamming -shammish -shammock -shammocking -shammocky -shammy -shampoo -shampooer -shamrock -shamroot -shamsheer -Shan -shan -shanachas -shanachie -Shandean -shandry -shandrydan -Shandy -shandy -shandygaff -Shandyism -Shane -Shang -Shangalla -shangan -Shanghai -shanghai -shanghaier -shank -Shankar -shanked -shanker -shankings -shankpiece -shanksman -shanna -Shannon -shanny -shansa -shant -Shantung -shanty -shantylike -shantyman -shantytown -shap -shapable -Shape -shape -shaped -shapeful -shapeless -shapelessly -shapelessness -shapeliness -shapely -shapen -shaper -shapeshifter -shapesmith -shaping -shapingly -shapometer -shaps -Shaptan -shapy -sharable -Sharada -Sharan -shard -Shardana -sharded -shardy -share -shareable -sharebone -sharebroker -sharecrop -sharecropper -shareholder -shareholdership -shareman -sharepenny -sharer -shareship -sharesman -sharewort -Sharezer -shargar -Shari -Sharia -Sharira -shark -sharkful -sharkish -sharklet -sharklike -sharkship -sharkskin -sharky -sharn -sharnbud -sharny -Sharon -sharp -sharpen -sharpener -sharper -sharpie -sharpish -sharply -sharpness -sharps -sharpsaw -sharpshin -sharpshod -sharpshooter -sharpshooting -sharptail -sharpware -sharpy -Sharra -sharrag -sharry -Shasta -shastaite -Shastan -shaster -shastra -shastraik -shastri -shastrik -shat -shatan -shathmont -Shatter -shatter -shatterbrain -shatterbrained -shatterer -shatterheaded -shattering -shatteringly -shatterment -shatterpated -shatterproof -shatterwit -shattery -shattuckite -shauchle -shaugh -shaul -Shaula -shaup -shauri -shauwe -shavable -shave -shaveable -shaved -shavee -shaveling -shaven -shaver -shavery -Shavese -shavester -shavetail -shaveweed -Shavian -Shaviana -Shavianism -shaving -shavings -Shaw -shaw -Shawanese -Shawano -shawl -shawled -shawling -shawlless -shawllike -shawlwise -shawm -Shawn -Shawnee -shawneewood -shawny -Shawwal -shawy -shay -Shaysite -she -shea -sheading -sheaf -sheafage -sheaflike -sheafripe -sheafy -sheal -shealing -Shean -shear -shearbill -sheard -shearer -sheargrass -shearhog -shearing -shearless -shearling -shearman -shearmouse -shears -shearsman -sheartail -shearwater -shearwaters -sheat -sheatfish -sheath -sheathbill -sheathe -sheathed -sheather -sheathery -sheathing -sheathless -sheathlike -sheathy -sheave -sheaved -sheaveless -sheaveman -shebang -Shebat -shebeen -shebeener -Shechem -Shechemites -shed -shedded -shedder -shedding -sheder -shedhand -shedlike -shedman -shedwise -shee -sheely -sheen -sheenful -sheenless -sheenly -sheeny -sheep -sheepback -sheepberry -sheepbine -sheepbiter -sheepbiting -sheepcote -sheepcrook -sheepfaced -sheepfacedly -sheepfacedness -sheepfold -sheepfoot -sheepgate -sheephead -sheepheaded -sheephearted -sheepherder -sheepherding -sheephook -sheephouse -sheepify -sheepish -sheepishly -sheepishness -sheepkeeper -sheepkeeping -sheepkill -sheepless -sheeplet -sheeplike -sheepling -sheepman -sheepmaster -sheepmonger -sheepnose -sheepnut -sheeppen -sheepshank -sheepshead -sheepsheadism -sheepshear -sheepshearer -sheepshearing -sheepshed -sheepskin -sheepsplit -sheepsteal -sheepstealer -sheepstealing -sheepwalk -sheepwalker -sheepweed -sheepy -sheer -sheered -sheering -sheerly -sheerness -sheet -sheetage -sheeted -sheeter -sheetflood -sheetful -sheeting -sheetless -sheetlet -sheetlike -sheetling -sheetways -sheetwise -sheetwork -sheetwriting -sheety -Sheffield -shehitah -sheik -sheikdom -sheikhlike -sheikhly -sheiklike -sheikly -Sheila -shekel -Shekinah -Shel -shela -sheld -sheldapple -shelder -sheldfowl -sheldrake -shelduck -shelf -shelfback -shelffellow -shelfful -shelflist -shelfmate -shelfpiece -shelfroom -shelfworn -shelfy -shell -shellac -shellacker -shellacking -shellapple -shellback -shellblow -shellblowing -shellbound -shellburst -shellcracker -shelleater -shelled -sheller -Shelleyan -Shelleyana -shellfire -shellfish -shellfishery -shellflower -shellful -shellhead -shelliness -shelling -shellman -shellmonger -shellproof -shellshake -shellum -shellwork -shellworker -shelly -shellycoat -shelta -shelter -shelterage -sheltered -shelterer -shelteringly -shelterless -shelterlessness -shelterwood -sheltery -sheltron -shelty -shelve -shelver -shelving -shelvingly -shelvingness -shelvy -Shelyak -Shemaka -sheminith -Shemite -Shemitic -Shemitish -Shemu -Shen -shenanigan -shend -sheng -Shenshai -Sheol -sheolic -shepherd -shepherdage -shepherddom -shepherdess -shepherdhood -Shepherdia -shepherdish -shepherdism -shepherdize -shepherdless -shepherdlike -shepherdling -shepherdly -shepherdry -sheppeck -sheppey -shepstare -sher -Sherani -Sherardia -sherardize -sherardizer -Sheratan -Sheraton -sherbacha -sherbet -sherbetlee -sherbetzide -sheriat -sherif -sherifa -sherifate -sheriff -sheriffalty -sheriffdom -sheriffess -sheriffhood -sheriffry -sheriffship -sheriffwick -sherifi -sherifian -sherify -sheristadar -Sheriyat -sherlock -Sherman -Sherpa -Sherramoor -Sherri -sherry -Sherrymoor -sherryvallies -Shesha -sheth -Shetland -Shetlander -Shetlandic -sheugh -sheva -shevel -sheveled -shevri -shewa -shewbread -shewel -sheyle -shi -Shiah -shibah -shibar -shibboleth -shibbolethic -shibuichi -shice -shicer -shicker -shickered -shide -shied -shiel -shield -shieldable -shieldboard -shielddrake -shielded -shielder -shieldflower -shielding -shieldless -shieldlessly -shieldlessness -shieldlike -shieldling -shieldmaker -shieldmay -shieldtail -shieling -shier -shies -shiest -shift -shiftable -shiftage -shifter -shiftful -shiftfulness -shiftily -shiftiness -shifting -shiftingly -shiftingness -shiftless -shiftlessly -shiftlessness -shifty -Shigella -shiggaion -shigram -shih -Shiism -Shiite -Shiitic -Shik -shikar -shikara -shikargah -shikari -shikasta -shikimi -shikimic -shikimole -shikimotoxin -shikken -shiko -shikra -shilf -shilfa -Shilh -Shilha -shill -shilla -shillaber -shillelagh -shillet -shillety -shillhouse -shillibeer -shilling -shillingless -shillingsworth -shilloo -Shilluh -Shilluk -Shiloh -shilpit -shim -shimal -Shimei -shimmer -shimmering -shimmeringly -shimmery -shimmy -Shimonoseki -shimose -shimper -shin -Shina -shinaniging -shinarump -shinbone -shindig -shindle -shindy -shine -shineless -shiner -shingle -shingled -shingler -shingles -shinglewise -shinglewood -shingling -shingly -shinily -shininess -shining -shiningly -shiningness -shinleaf -Shinnecock -shinner -shinnery -shinning -shinny -shinplaster -shintiyan -Shinto -Shintoism -Shintoist -Shintoistic -Shintoize -shinty -Shinwari -shinwood -shiny -shinza -ship -shipboard -shipbound -shipboy -shipbreaking -shipbroken -shipbuilder -shipbuilding -shipcraft -shipentine -shipful -shipkeeper -shiplap -shipless -shiplessly -shiplet -shipload -shipman -shipmanship -shipmast -shipmaster -shipmate -shipmatish -shipment -shipowner -shipowning -shippable -shippage -shipped -shipper -shipping -shipplane -shippo -shippon -shippy -shipshape -shipshapely -shipside -shipsmith -shipward -shipwards -shipway -shipwork -shipworm -shipwreck -shipwrecky -shipwright -shipwrightery -shipwrightry -shipyard -shirakashi -shirallee -Shiraz -shire -shirehouse -shireman -shirewick -shirk -shirker -shirky -shirl -shirlcock -Shirley -shirpit -shirr -shirring -shirt -shirtband -shirtiness -shirting -shirtless -shirtlessness -shirtlike -shirtmaker -shirtmaking -shirtman -shirttail -shirtwaist -shirty -Shirvan -shish -shisham -shisn -shita -shitepoke -shither -shittah -shittim -shittimwood -shiv -Shivaism -Shivaist -Shivaistic -Shivaite -shivaree -shive -shiver -shivereens -shiverer -shivering -shiveringly -shiverproof -shiversome -shiverweed -shivery -shivey -shivoo -shivy -shivzoku -Shkupetar -Shlu -Shluh -Sho -sho -Shoa -shoad -shoader -shoal -shoalbrain -shoaler -shoaliness -shoalness -shoalwise -shoaly -shoat -shock -shockability -shockable -shockedness -shocker -shockheaded -shocking -shockingly -shockingness -shocklike -shockproof -shod -shodden -shoddily -shoddiness -shoddy -shoddydom -shoddyism -shoddyite -shoddylike -shoddyward -shoddywards -shode -shoder -shoe -shoebill -shoebinder -shoebindery -shoebinding -shoebird -shoeblack -shoeboy -shoebrush -shoecraft -shoeflower -shoehorn -shoeing -shoeingsmith -shoelace -shoeless -shoemaker -shoemaking -shoeman -shoepack -shoer -shoescraper -shoeshine -shoeshop -shoesmith -shoestring -shoewoman -shoful -shog -shogaol -shoggie -shoggle -shoggly -shogi -shogun -shogunal -shogunate -shohet -shoji -Shojo -shola -shole -Shona -shone -shoneen -shonkinite -shoo -shood -shoofa -shoofly -shooi -shook -shool -shooldarry -shooler -shoop -shoopiltie -shoor -shoot -shootable -shootboard -shootee -shooter -shoother -shooting -shootist -shootman -shop -shopboard -shopbook -shopboy -shopbreaker -shopbreaking -shopfolk -shopful -shopgirl -shopgirlish -shophar -shopkeeper -shopkeeperess -shopkeeperish -shopkeeperism -shopkeepery -shopkeeping -shopland -shoplet -shoplifter -shoplifting -shoplike -shopmaid -shopman -shopmark -shopmate -shopocracy -shopocrat -shoppe -shopper -shopping -shoppish -shoppishness -shoppy -shopster -shoptalk -shopwalker -shopwear -shopwife -shopwindow -shopwoman -shopwork -shopworker -shopworn -shoq -Shor -shor -shoran -shore -Shorea -shoreberry -shorebush -shored -shoregoing -shoreland -shoreless -shoreman -shorer -shoreside -shoresman -shoreward -shorewards -shoreweed -shoreyer -shoring -shorling -shorn -short -shortage -shortbread -shortcake -shortchange -shortchanger -shortclothes -shortcoat -shortcomer -shortcoming -shorten -shortener -shortening -shorter -shortfall -shorthand -shorthanded -shorthandedness -shorthander -shorthead -shorthorn -Shortia -shortish -shortly -shortness -shorts -shortschat -shortsighted -shortsightedly -shortsightedness -shortsome -shortstaff -shortstop -shorttail -Shortzy -Shoshonean -shoshonite -shot -shotbush -shote -shotgun -shotless -shotlike -shotmaker -shotman -shotproof -shotsman -shotstar -shott -shotted -shotten -shotter -shotty -Shotweld -shou -should -shoulder -shouldered -shoulderer -shoulderette -shouldering -shouldna -shouldnt -shoupeltin -shout -shouter -shouting -shoutingly -shoval -shove -shovegroat -shovel -shovelard -shovelbill -shovelboard -shovelfish -shovelful -shovelhead -shovelmaker -shovelman -shovelnose -shovelweed -shover -show -showable -showance -showbird -showboard -showboat -showboater -showboating -showcase -showdom -showdown -shower -showerer -showerful -showeriness -showerless -showerlike -showerproof -showery -showily -showiness -showing -showish -showless -showman -showmanism -showmanry -showmanship -shown -showpiece -showroom -showup -showworthy -showy -showyard -shoya -shrab -shraddha -shradh -shraf -shrag -shram -shrank -shrap -shrapnel -shrave -shravey -shreadhead -shred -shredcock -shredder -shredding -shreddy -shredless -shredlike -Shree -shree -shreeve -shrend -shrew -shrewd -shrewdish -shrewdly -shrewdness -shrewdom -shrewdy -shrewish -shrewishly -shrewishness -shrewlike -shrewly -shrewmouse -shrewstruck -shriek -shrieker -shriekery -shriekily -shriekiness -shriekingly -shriekproof -shrieky -shrieval -shrievalty -shrift -shrike -shrill -shrilling -shrillish -shrillness -shrilly -shrimp -shrimper -shrimpfish -shrimpi -shrimpish -shrimpishness -shrimplike -shrimpy -shrinal -Shrine -shrine -shrineless -shrinelet -shrinelike -Shriner -shrink -shrinkable -shrinkage -shrinkageproof -shrinker -shrinkhead -shrinking -shrinkingly -shrinkproof -shrinky -shrip -shrite -shrive -shrivel -shriven -shriver -shriving -shroff -shrog -Shropshire -shroud -shrouded -shrouding -shroudless -shroudlike -shroudy -Shrove -shrove -shrover -Shrovetide -shrub -shrubbed -shrubbery -shrubbiness -shrubbish -shrubby -shrubland -shrubless -shrublet -shrublike -shrubwood -shruff -shrug -shruggingly -shrunk -shrunken -shrups -Shtokavski -shtreimel -Shu -shuba -shubunkin -shuck -shucker -shucking -shuckins -shuckpen -shucks -shudder -shudderful -shudderiness -shudderingly -shuddersome -shuddery -shuff -shuffle -shuffleboard -shufflecap -shuffler -shufflewing -shuffling -shufflingly -shug -Shuhali -Shukria -Shukulumbwe -shul -Shulamite -shuler -shulwaurs -shumac -shun -Shunammite -shune -shunless -shunnable -shunner -shunt -shunter -shunting -shure -shurf -shush -shusher -Shuswap -shut -shutdown -shutness -shutoff -Shutoku -shutout -shuttance -shutten -shutter -shuttering -shutterless -shutterwise -shutting -shuttle -shuttlecock -shuttleheaded -shuttlelike -shuttlewise -Shuvra -shwanpan -shy -Shyam -shydepoke -shyer -shyish -Shylock -Shylockism -shyly -shyness -shyster -si -Sia -siak -sial -sialaden -sialadenitis -sialadenoncus -sialagogic -sialagogue -sialagoguic -sialemesis -Sialia -sialic -sialid -Sialidae -sialidan -Sialis -sialoangitis -sialogenous -sialoid -sialolith -sialolithiasis -sialology -sialorrhea -sialoschesis -sialosemeiology -sialosis -sialostenosis -sialosyrinx -sialozemia -Siam -siamang -Siamese -sib -Sibbaldus -sibbed -sibbens -sibber -sibboleth -sibby -Siberian -Siberic -siberite -sibilance -sibilancy -sibilant -sibilantly -sibilate -sibilatingly -sibilator -sibilatory -sibilous -sibilus -Sibiric -sibling -sibness -sibrede -sibship -sibyl -sibylesque -sibylic -sibylism -sibylla -sibylline -sibyllist -sic -Sicambri -Sicambrian -Sicana -Sicani -Sicanian -sicarian -sicarious -sicarius -sicca -siccaneous -siccant -siccate -siccation -siccative -siccimeter -siccity -sice -Sicel -Siceliot -Sicilian -sicilian -siciliana -Sicilianism -sicilica -sicilicum -sicilienne -sicinnian -sick -sickbed -sicken -sickener -sickening -sickeningly -sicker -sickerly -sickerness -sickhearted -sickish -sickishly -sickishness -sickle -sicklebill -sickled -sicklelike -sickleman -sicklemia -sicklemic -sicklepod -sickler -sicklerite -sickless -sickleweed -sicklewise -sicklewort -sicklied -sicklily -sickliness -sickling -sickly -sickness -sicknessproof -sickroom -sicsac -sicula -sicular -Siculi -Siculian -Sicyonian -Sicyonic -Sicyos -Sid -Sida -Sidalcea -sidder -Siddha -Siddhanta -Siddhartha -Siddhi -siddur -side -sideage -sidearm -sideboard -sidebone -sidebones -sideburns -sidecar -sidecarist -sidecheck -sided -sidedness -sideflash -sidehead -sidehill -sidekicker -sidelang -sideless -sideline -sideling -sidelings -sidelingwise -sidelong -sidenote -sidepiece -sider -sideral -sideration -siderealize -sidereally -siderean -siderin -siderism -siderite -sideritic -Sideritis -siderognost -siderographic -siderographical -siderographist -siderography -siderolite -siderology -sideromagnetic -sideromancy -sideromelane -sideronatrite -sideronym -sideroscope -siderose -siderosis -siderostat -siderostatic -siderotechny -siderous -Sideroxylon -sidership -siderurgical -siderurgy -sides -sidesaddle -sideshake -sideslip -sidesman -sidesplitter -sidesplitting -sidesplittingly -sidesway -sideswipe -sideswiper -sidetrack -sidewalk -sideward -sidewards -sideway -sideways -sidewinder -sidewipe -sidewiper -sidewise -sidhe -sidi -siding -sidle -sidler -sidling -sidlingly -Sidney -Sidonian -Sidrach -sidth -sidy -sie -siege -siegeable -siegecraft -siegenite -sieger -siegework -Siegfried -Sieglingia -Siegmund -Siegurd -Siena -Sienese -sienna -sier -siering -sierozem -Sierra -sierra -sierran -siesta -siestaland -Sieva -sieve -sieveful -sievelike -siever -Sieversia -sievings -sievy -sifac -sifaka -Sifatite -sife -siffilate -siffle -sifflement -sifflet -sifflot -sift -siftage -sifted -sifter -sifting -sig -Siganidae -Siganus -sigatoka -Sigaultian -sigger -sigh -sigher -sighful -sighfully -sighing -sighingly -sighingness -sighless -sighlike -sight -sightable -sighted -sighten -sightening -sighter -sightful -sightfulness -sighthole -sighting -sightless -sightlessly -sightlessness -sightlily -sightliness -sightly -sightproof -sightworthiness -sightworthy -sighty -sigil -sigilative -Sigillaria -Sigillariaceae -sigillariaceous -sigillarian -sigillarid -sigillarioid -sigillarist -sigillaroid -sigillary -sigillate -sigillated -sigillation -sigillistic -sigillographer -sigillographical -sigillography -sigillum -sigla -siglarian -siglos -Sigma -sigma -sigmaspire -sigmate -sigmatic -sigmation -sigmatism -sigmodont -Sigmodontes -sigmoid -sigmoidal -sigmoidally -sigmoidectomy -sigmoiditis -sigmoidopexy -sigmoidoproctostomy -sigmoidorectostomy -sigmoidoscope -sigmoidoscopy -sigmoidostomy -Sigmund -sign -signable -signal -signalee -signaler -signalese -signaletic -signaletics -signalism -signalist -signality -signalize -signally -signalman -signalment -signary -signatary -signate -signation -signator -signatory -signatural -signature -signatureless -signaturist -signboard -signee -signer -signet -signetwise -signifer -signifiable -significal -significance -significancy -significant -significantly -significantness -significate -signification -significatist -significative -significatively -significativeness -significator -significatory -significatrix -significature -significavit -significian -significs -signifier -signify -signior -signiorship -signist -signless -signlike -signman -signorial -signorship -signory -signpost -signum -signwriter -Sigurd -Sihasapa -Sika -sika -sikar -sikatch -sike -sikerly -sikerness -siket -Sikh -sikhara -Sikhism -sikhra -Sikinnis -Sikkimese -Siksika -sil -silage -silaginoid -silane -Silas -silbergroschen -silcrete -sile -silen -Silenaceae -silenaceous -Silenales -silence -silenced -silencer -silency -Silene -sileni -silenic -silent -silential -silentiary -silentious -silentish -silently -silentness -silenus -silesia -Silesian -Siletz -silex -silexite -silhouette -silhouettist -silhouettograph -silica -silicam -silicane -silicate -silication -silicatization -Silicea -silicean -siliceocalcareous -siliceofelspathic -siliceofluoric -siliceous -silicic -silicicalcareous -silicicolous -silicide -silicidize -siliciferous -silicification -silicifluoric -silicifluoride -silicify -siliciophite -silicious -Silicispongiae -silicium -siliciuretted -silicize -silicle -silico -silicoacetic -silicoalkaline -silicoaluminate -silicoarsenide -silicocalcareous -silicochloroform -silicocyanide -silicoethane -silicoferruginous -Silicoflagellata -Silicoflagellatae -silicoflagellate -Silicoflagellidae -silicofluoric -silicofluoride -silicohydrocarbon -Silicoidea -silicomagnesian -silicomanganese -silicomethane -silicon -silicone -siliconize -silicononane -silicopropane -silicosis -Silicospongiae -silicotalcose -silicotic -silicotitanate -silicotungstate -silicotungstic -silicula -silicular -silicule -siliculose -siliculous -silicyl -Silipan -siliqua -siliquaceous -siliquae -Siliquaria -Siliquariidae -silique -siliquiferous -siliquiform -siliquose -siliquous -silk -silkalene -silkaline -silked -silken -silker -silkflower -silkgrower -silkie -silkily -silkiness -silklike -silkman -silkness -silksman -silktail -silkweed -silkwoman -silkwood -silkwork -silkworks -silkworm -silky -sill -sillabub -silladar -Sillaginidae -Sillago -sillandar -sillar -siller -Sillery -sillibouk -sillikin -sillily -sillimanite -silliness -sillock -sillograph -sillographer -sillographist -sillometer -sillon -silly -sillyhood -sillyhow -sillyish -sillyism -sillyton -silo -siloist -Silpha -silphid -Silphidae -silphium -silt -siltage -siltation -silting -siltlike -silty -silundum -Silures -Silurian -Siluric -silurid -Siluridae -Siluridan -siluroid -Siluroidei -Silurus -silva -silvan -silvanity -silvanry -Silvanus -silvendy -silver -silverback -silverbeater -silverbelly -silverberry -silverbill -silverboom -silverbush -silvered -silverer -silvereye -silverfin -silverfish -silverhead -silverily -silveriness -silvering -silverish -silverite -silverize -silverizer -silverleaf -silverless -silverlike -silverling -silverly -silvern -silverness -silverpoint -silverrod -silverside -silversides -silverskin -silversmith -silversmithing -silverspot -silvertail -silvertip -silvertop -silvervine -silverware -silverweed -silverwing -silverwood -silverwork -silverworker -silvery -Silvester -Silvia -silvical -silvicolous -silvics -silvicultural -silviculturally -silviculture -silviculturist -Silvius -Silybum -silyl -Sim -sima -Simaba -simal -simar -Simarouba -Simaroubaceae -simaroubaceous -simball -simbil -simblin -simblot -Simblum -sime -Simeon -Simeonism -Simeonite -Simia -simiad -simial -simian -simianity -simiesque -Simiidae -Simiinae -similar -similarity -similarize -similarly -similative -simile -similimum -similiter -similitive -similitude -similitudinize -simility -similize -similor -simioid -simious -simiousness -simity -simkin -simlin -simling -simmer -simmeringly -simmon -simnel -simnelwise -simoleon -Simon -simoniac -simoniacal -simoniacally -Simonian -Simonianism -simonious -simonism -Simonist -simonist -simony -simool -simoom -simoon -Simosaurus -simous -simp -simpai -simper -simperer -simperingly -simple -simplehearted -simpleheartedly -simpleheartedness -simpleness -simpler -simpleton -simpletonian -simpletonianism -simpletonic -simpletonish -simpletonism -simplex -simplexed -simplexity -simplicident -Simplicidentata -simplicidentate -simplicist -simplicitarian -simplicity -simplicize -simplification -simplificative -simplificator -simplified -simplifiedly -simplifier -simplify -simplism -simplist -simplistic -simply -simsim -simson -simulacra -simulacral -simulacre -simulacrize -simulacrum -simulance -simulant -simular -simulate -simulation -simulative -simulatively -simulator -simulatory -simulcast -simuler -simuliid -Simuliidae -simulioid -Simulium -simultaneity -simultaneous -simultaneously -simultaneousness -sin -sina -Sinae -Sinaean -Sinaic -sinaite -Sinaitic -sinal -sinalbin -Sinaloa -sinamay -sinamine -sinapate -sinapic -sinapine -sinapinic -Sinapis -sinapis -sinapism -sinapize -sinapoline -sinarchism -sinarchist -sinarquism -sinarquist -sinarquista -sinawa -sincaline -since -sincere -sincerely -sincereness -sincerity -sincipital -sinciput -sind -sinder -Sindhi -sindle -sindoc -sindon -sindry -sine -sinecural -sinecure -sinecureship -sinecurism -sinecurist -Sinesian -sinew -sinewed -sinewiness -sinewless -sinewous -sinewy -sinfonia -sinfonie -sinfonietta -sinful -sinfully -sinfulness -sing -singability -singable -singableness -singally -singarip -singe -singed -singeing -singeingly -singer -singey -Singfo -singh -Singhalese -singillatim -singing -singingly -singkamas -single -singlebar -singled -singlehanded -singlehandedly -singlehandedness -singlehearted -singleheartedly -singleheartedness -singlehood -singleness -singler -singles -singlestick -singlesticker -singlet -singleton -singletree -singlings -singly -Singpho -Singsing -singsong -singsongy -Singspiel -singspiel -singstress -singular -singularism -singularist -singularity -singularization -singularize -singularly -singularness -singult -singultous -singultus -sinh -Sinhalese -Sinian -Sinic -Sinicism -Sinicization -Sinicize -Sinico -Sinification -Sinify -sinigrin -sinigrinase -sinigrosid -sinigroside -Sinisian -Sinism -sinister -sinisterly -sinisterness -sinisterwise -sinistrad -sinistral -sinistrality -sinistrally -sinistration -sinistrin -sinistrocerebral -sinistrocular -sinistrodextral -sinistrogyrate -sinistrogyration -sinistrogyric -sinistromanual -sinistrorsal -sinistrorsally -sinistrorse -sinistrous -sinistrously -sinistruous -Sinite -Sinitic -sink -sinkable -sinkage -sinker -sinkerless -sinkfield -sinkhead -sinkhole -sinking -Sinkiuse -sinkless -sinklike -sinkroom -sinkstone -sinky -sinless -sinlessly -sinlessness -sinlike -sinnable -sinnableness -sinnen -sinner -sinneress -sinnership -sinnet -Sinningia -sinningly -sinningness -sinoatrial -sinoauricular -Sinogram -sinoidal -Sinolog -Sinologer -Sinological -Sinologist -Sinologue -Sinology -sinomenine -Sinonism -Sinophile -Sinophilism -sinopia -Sinopic -sinopite -sinople -sinproof -Sinsiga -sinsion -sinsring -sinsyne -sinter -Sinto -sintoc -Sintoism -Sintoist -Sintsink -Sintu -sinuate -sinuated -sinuatedentate -sinuately -sinuation -sinuatocontorted -sinuatodentate -sinuatodentated -sinuatopinnatifid -sinuatoserrated -sinuatoundulate -sinuatrial -sinuauricular -sinuitis -sinuose -sinuosely -sinuosity -sinuous -sinuously -sinuousness -Sinupallia -sinupallial -Sinupallialia -Sinupalliata -sinupalliate -sinus -sinusal -sinusitis -sinuslike -sinusoid -sinusoidal -sinusoidally -sinuventricular -sinward -siol -Sion -sion -Sionite -Siouan -Sioux -sip -sipage -sipe -siper -siphoid -siphon -siphonaceous -siphonage -siphonal -Siphonales -Siphonaptera -siphonapterous -Siphonaria -siphonariid -Siphonariidae -Siphonata -siphonate -Siphoneae -siphoneous -siphonet -siphonia -siphonial -Siphoniata -siphonic -Siphonifera -siphoniferous -siphoniform -siphonium -siphonless -siphonlike -Siphonobranchiata -siphonobranchiate -Siphonocladales -Siphonocladiales -siphonogam -Siphonogama -siphonogamic -siphonogamous -siphonogamy -siphonoglyph -siphonoglyphe -siphonognathid -Siphonognathidae -siphonognathous -Siphonognathus -Siphonophora -siphonophoran -siphonophore -siphonophorous -siphonoplax -siphonopore -siphonorhinal -siphonorhine -siphonosome -siphonostele -siphonostelic -siphonostely -Siphonostoma -Siphonostomata -siphonostomatous -siphonostome -siphonostomous -siphonozooid -siphonula -siphorhinal -siphorhinian -siphosome -siphuncle -siphuncled -siphuncular -Siphunculata -siphunculate -siphunculated -Sipibo -sipid -sipidity -Siping -siping -sipling -sipper -sippet -sippingly -sippio -Sipunculacea -sipunculacean -sipunculid -Sipunculida -sipunculoid -Sipunculoidea -Sipunculus -sipylite -Sir -sir -sircar -sirdar -sirdarship -sire -Siredon -sireless -siren -sirene -Sirenia -sirenian -sirenic -sirenical -sirenically -Sirenidae -sirening -sirenize -sirenlike -sirenoid -Sirenoidea -Sirenoidei -sireny -sireship -siress -sirgang -Sirian -sirian -Sirianian -siriasis -siricid -Siricidae -Siricoidea -sirih -siriometer -Sirione -siris -Sirius -sirkeer -sirki -sirky -sirloin -sirloiny -Sirmian -Sirmuellera -siroc -sirocco -siroccoish -siroccoishly -sirpea -sirple -sirpoon -sirrah -sirree -sirship -siruaballi -siruelas -sirup -siruped -siruper -sirupy -Siryan -Sis -sis -sisal -siscowet -sise -sisel -siserara -siserary -siserskite -sish -sisham -sisi -siskin -Sisley -sismotherapy -siss -Sisseton -sissification -sissify -sissiness -sissoo -Sissu -sissy -sissyish -sissyism -sist -Sistani -sister -sisterhood -sisterin -sistering -sisterize -sisterless -sisterlike -sisterliness -sisterly -sistern -Sistine -sistle -sistomensin -sistrum -Sistrurus -Sisymbrium -Sisyphean -Sisyphian -Sisyphides -Sisyphism -Sisyphist -Sisyphus -Sisyrinchium -sisyrinchium -sit -Sita -sitao -sitar -sitatunga -sitch -site -sitfast -sith -sithcund -sithe -sithement -sithence -sithens -sitient -sitio -sitiology -sitiomania -sitiophobia -Sitka -Sitkan -sitology -sitomania -Sitophilus -sitophobia -sitophobic -sitosterin -sitosterol -sitotoxism -Sitta -sittee -sitten -sitter -Sittidae -Sittinae -sittine -sitting -sittringy -situal -situate -situated -situation -situational -situla -situlae -situs -Sium -Siusi -Siuslaw -Siva -siva -Sivaism -Sivaist -Sivaistic -Sivaite -Sivan -Sivapithecus -sivathere -Sivatheriidae -Sivatheriinae -sivatherioid -Sivatherium -siver -sivvens -Siwan -Siwash -siwash -six -sixain -sixer -sixfoil -sixfold -sixhaend -sixhynde -sixpence -sixpenny -sixpennyworth -sixscore -sixsome -sixte -sixteen -sixteener -sixteenfold -sixteenmo -sixteenth -sixteenthly -sixth -sixthet -sixthly -sixtieth -Sixtowns -Sixtus -sixty -sixtyfold -sixtypenny -sizable -sizableness -sizably -sizal -sizar -sizarship -size -sizeable -sizeableness -sized -sizeman -sizer -sizes -siziness -sizing -sizy -sizygia -sizygium -sizz -sizzard -sizzing -sizzle -sizzling -sizzlingly -Sjaak -sjambok -Sjouke -skaddle -skaff -skaffie -skag -skaillie -skainsmate -skair -skaitbird -skal -skalawag -skaldship -skance -Skanda -skandhas -skart -skasely -Skat -skat -skate -skateable -skater -skatikas -skatiku -skating -skatist -skatole -skatosine -skatoxyl -skaw -skean -skeanockle -skedaddle -skedaddler -skedge -skedgewith -skedlock -skee -skeed -skeeg -skeel -skeeling -skeely -skeen -skeenyie -skeer -skeered -skeery -skeesicks -skeet -Skeeter -skeeter -skeezix -Skef -skeg -skegger -skeif -skeigh -skeily -skein -skeiner -skeipp -skel -skelder -skelderdrake -skeldrake -skeletal -skeletin -skeletogenous -skeletogeny -skeletomuscular -skeleton -skeletonian -skeletonic -skeletonization -skeletonize -skeletonizer -skeletonless -skeletonweed -skeletony -skelf -skelgoose -skelic -skell -skellat -skeller -skelloch -skellum -skelly -skelp -skelper -skelpin -skelping -skelter -Skeltonian -Skeltonic -Skeltonical -Skeltonics -skemmel -skemp -sken -skene -skeo -skeough -skep -skepful -skeppist -skeppund -skeptic -skeptical -skeptically -skepticalness -skepticism -skepticize -sker -skere -skerret -skerrick -skerry -sketch -sketchability -sketchable -sketchbook -sketchee -sketcher -sketchily -sketchiness -sketching -sketchingly -sketchist -sketchlike -sketchy -skete -sketiotai -skeuomorph -skeuomorphic -skevish -skew -skewback -skewbacked -skewbald -skewed -skewer -skewerer -skewerwood -skewings -skewl -skewly -skewness -skewwhiff -skewwise -skewy -skey -skeyting -ski -skiagram -skiagraph -skiagrapher -skiagraphic -skiagraphical -skiagraphically -skiagraphy -skiameter -skiametry -skiapod -skiapodous -skiascope -skiascopy -skibby -skibslast -skice -skid -skidded -skidder -skidding -skiddingly -skiddoo -skiddy -Skidi -skidpan -skidproof -skidway -skied -skieppe -skiepper -skier -skies -skiff -skiffless -skiffling -skift -skiing -skijore -skijorer -skijoring -skil -skilder -skildfel -skilfish -skill -skillagalee -skilled -skillenton -skillessness -skillet -skillful -skillfully -skillfulness -skilligalee -skilling -skillion -skilly -skilpot -skilts -skim -skimback -skime -skimmed -skimmer -skimmerton -Skimmia -skimming -skimmingly -skimmington -skimmity -skimp -skimpily -skimpiness -skimpingly -skimpy -skin -skinbound -skinch -skinflint -skinflintily -skinflintiness -skinflinty -skinful -skink -skinker -skinking -skinkle -skinless -skinlike -skinned -skinner -skinnery -skinniness -skinning -skinny -skintight -skinworm -skiogram -skiograph -skiophyte -Skip -skip -skipbrain -Skipetar -skipjack -skipjackly -skipkennel -skipman -skippable -skippel -skipper -skippered -skippership -skippery -skippet -skipping -skippingly -skipple -skippund -skippy -skiptail -skirl -skirlcock -skirling -skirmish -skirmisher -skirmishing -skirmishingly -skirp -skirr -skirreh -skirret -skirt -skirtboard -skirted -skirter -skirting -skirtingly -skirtless -skirtlike -skirty -skirwhit -skirwort -skit -skite -skiter -skither -Skitswish -Skittaget -Skittagetan -skitter -skittish -skittishly -skittishness -skittle -skittled -skittler -skittles -skitty -skittyboot -skiv -skive -skiver -skiverwood -skiving -skivvies -sklate -sklater -sklent -skleropelite -sklinter -skoal -Skodaic -skogbolite -Skoinolon -skokiaan -Skokomish -skomerite -skoo -skookum -Skopets -skoptsy -skout -skraeling -skraigh -skrike -skrimshander -skrupul -skua -skulduggery -skulk -skulker -skulking -skulkingly -skull -skullbanker -skullcap -skulled -skullery -skullfish -skullful -skully -skulp -skun -skunk -skunkbill -skunkbush -skunkdom -skunkery -skunkhead -skunkish -skunklet -skunktop -skunkweed -skunky -Skupshtina -skuse -skutterudite -sky -skybal -skycraft -Skye -skyey -skyful -skyish -skylark -skylarker -skyless -skylight -skylike -skylook -skyman -skyphoi -skyphos -skyplast -skyre -skyrgaliard -skyrocket -skyrockety -skysail -skyscape -skyscraper -skyscraping -skyshine -skyugle -skyward -skywards -skyway -skywrite -skywriter -skywriting -sla -slab -slabbed -slabber -slabberer -slabbery -slabbiness -slabbing -slabby -slabman -slabness -slabstone -slack -slackage -slacked -slacken -slackener -slacker -slackerism -slacking -slackingly -slackly -slackness -slad -sladang -slade -slae -slag -slaggability -slaggable -slagger -slagging -slaggy -slagless -slaglessness -slagman -slain -slainte -slaister -slaistery -slait -slake -slakeable -slakeless -slaker -slaking -slaky -slam -slammakin -slammerkin -slammock -slammocking -slammocky -slamp -slampamp -slampant -slander -slanderer -slanderful -slanderfully -slandering -slanderingly -slanderous -slanderously -slanderousness -slanderproof -slane -slang -slangily -slanginess -slangish -slangishly -slangism -slangkop -slangous -slangster -slanguage -slangular -slangy -slank -slant -slantindicular -slantindicularly -slanting -slantingly -slantingways -slantly -slantways -slantwise -slap -slapdash -slapdashery -slape -slaphappy -slapjack -slapper -slapping -slapstick -slapsticky -slare -slart -slarth -Slartibartfast -slash -slashed -slasher -slashing -slashingly -slashy -slat -slatch -slate -slateful -slatelike -slatemaker -slatemaking -slater -slateworks -slateyard -slath -slather -slatify -slatiness -slating -slatish -slatted -slatter -slattern -slatternish -slatternliness -slatternly -slatternness -slattery -slatting -slaty -slaughter -slaughterer -slaughterhouse -slaughteringly -slaughterman -slaughterous -slaughterously -slaughteryard -slaum -Slav -Slavdom -Slave -slave -slaveborn -slaved -slaveholder -slaveholding -slaveland -slaveless -slavelet -slavelike -slaveling -slavemonger -slaveowner -slaveownership -slavepen -slaver -slaverer -slavering -slaveringly -slavery -Slavey -slavey -Slavi -Slavian -Slavic -Slavicism -Slavicize -Slavification -Slavify -slavikite -slaving -Slavish -slavish -slavishly -slavishness -Slavism -Slavist -Slavistic -Slavization -Slavize -slavocracy -slavocrat -slavocratic -Slavonian -Slavonianize -Slavonic -Slavonically -Slavonicize -Slavonish -Slavonism -Slavonization -Slavonize -Slavophile -Slavophilism -Slavophobe -Slavophobist -slaw -slay -slayable -slayer -slaying -sleathy -sleave -sleaved -sleaziness -sleazy -Sleb -sleck -sled -sledded -sledder -sledding -sledful -sledge -sledgeless -sledgemeter -sledger -sledging -sledlike -slee -sleech -sleechy -sleek -sleeken -sleeker -sleeking -sleekit -sleekly -sleekness -sleeky -sleep -sleeper -sleepered -sleepful -sleepfulness -sleepify -sleepily -sleepiness -sleeping -sleepingly -sleepland -sleepless -sleeplessly -sleeplessness -sleeplike -sleepmarken -sleepproof -sleepry -sleepwaker -sleepwaking -sleepwalk -sleepwalker -sleepwalking -sleepward -sleepwort -sleepy -sleepyhead -sleer -sleet -sleetiness -sleeting -sleetproof -sleety -sleeve -sleeveband -sleeveboard -sleeved -sleeveen -sleevefish -sleeveful -sleeveless -sleevelessness -sleevelet -sleevelike -sleever -sleigh -sleigher -sleighing -sleight -sleightful -sleighty -slendang -slender -slenderish -slenderize -slenderly -slenderness -slent -slepez -slept -slete -sleuth -sleuthdog -sleuthful -sleuthhound -sleuthlike -slew -slewed -slewer -slewing -sley -sleyer -slice -sliceable -sliced -slicer -slich -slicht -slicing -slicingly -slick -slicken -slickens -slickenside -slicker -slickered -slickery -slicking -slickly -slickness -slid -slidable -slidableness -slidably -slidage -slidden -slidder -sliddery -slide -slideable -slideableness -slideably -slided -slidehead -slideman -slideproof -slider -slideway -sliding -slidingly -slidingness -slidometer -slifter -slight -slighted -slighter -slightily -slightiness -slighting -slightingly -slightish -slightly -slightness -slighty -slim -slime -slimeman -slimer -slimily -sliminess -slimish -slimishness -slimly -slimmish -slimness -slimpsy -slimsy -slimy -sline -sling -slingball -slinge -slinger -slinging -slingshot -slingsman -slingstone -slink -slinker -slinkily -slinkiness -slinking -slinkingly -slinkskin -slinkweed -slinky -slip -slipback -slipband -slipboard -slipbody -slipcase -slipcoach -slipcoat -slipe -slipgibbet -sliphorn -sliphouse -slipknot -slipless -slipman -slipover -slippage -slipped -slipper -slippered -slipperflower -slipperily -slipperiness -slipperlike -slipperweed -slipperwort -slippery -slipperyback -slipperyroot -slippiness -slipping -slippingly -slipproof -slippy -slipshod -slipshoddiness -slipshoddy -slipshodness -slipshoe -slipslap -slipslop -slipsloppish -slipsloppism -slipsole -slipstep -slipstring -sliptopped -slipway -slirt -slish -slit -slitch -slite -slither -slithering -slitheroo -slithers -slithery -slithy -slitless -slitlike -slitshell -slitted -slitter -slitting -slitty -slitwise -slive -sliver -sliverer -sliverlike -sliverproof -slivery -sliving -slivovitz -sloan -Sloanea -slob -slobber -slobberchops -slobberer -slobbers -slobbery -slobby -slock -slocken -slod -slodder -slodge -slodger -sloe -sloeberry -sloebush -sloetree -slog -slogan -sloganeer -sloganize -slogger -slogging -slogwood -sloka -sloke -slommock -slon -slone -slonk -sloo -sloom -sloomy -sloop -sloopman -sloosh -slop -slopdash -slope -sloped -slopely -slopeness -sloper -slopeways -slopewise -sloping -slopingly -slopingness -slopmaker -slopmaking -sloppage -slopped -sloppery -sloppily -sloppiness -slopping -sloppy -slops -slopseller -slopselling -slopshop -slopstone -slopwork -slopworker -slopy -slorp -slosh -slosher -sloshily -sloshiness -sloshy -slot -slote -sloted -sloth -slothful -slothfully -slothfulness -slothound -slotted -slotter -slottery -slotting -slotwise -slouch -sloucher -slouchily -slouchiness -slouching -slouchingly -slouchy -slough -sloughiness -sloughy -slour -sloush -Slovak -Slovakian -Slovakish -sloven -Slovene -Slovenian -Slovenish -slovenlike -slovenliness -slovenly -slovenwood -Slovintzi -slow -slowbellied -slowbelly -slowdown -slowgoing -slowheaded -slowhearted -slowheartedness -slowhound -slowish -slowly -slowmouthed -slowpoke -slowrie -slows -slowworm -sloyd -slub -slubber -slubberdegullion -slubberer -slubbering -slubberingly -slubberly -slubbery -slubbing -slubby -slud -sludder -sluddery -sludge -sludged -sludger -sludgy -slue -sluer -slug -slugabed -sluggard -sluggarding -sluggardize -sluggardliness -sluggardly -sluggardness -sluggardry -slugged -slugger -slugging -sluggingly -sluggish -sluggishly -sluggishness -sluggy -sluglike -slugwood -sluice -sluicelike -sluicer -sluiceway -sluicing -sluicy -sluig -sluit -slum -slumber -slumberer -slumberful -slumbering -slumberingly -slumberland -slumberless -slumberous -slumberously -slumberousness -slumberproof -slumbersome -slumbery -slumbrous -slumdom -slumgullion -slumgum -slumland -slummage -slummer -slumminess -slumming -slummock -slummocky -slummy -slump -slumpproof -slumproof -slumpwork -slumpy -slumward -slumwise -slung -slungbody -slunge -slunk -slunken -slur -slurbow -slurp -slurry -slush -slusher -slushily -slushiness -slushy -slut -slutch -slutchy -sluther -sluthood -slutter -sluttery -sluttikin -sluttish -sluttishly -sluttishness -slutty -sly -slyboots -slyish -slyly -slyness -slype -sma -smachrie -smack -smackee -smacker -smackful -smacking -smackingly -smacksman -smaik -Smalcaldian -Smalcaldic -small -smallage -smallclothes -smallcoal -smallen -smaller -smallhearted -smallholder -smalling -smallish -smallmouth -smallmouthed -smallness -smallpox -smalls -smallsword -smalltime -smallware -smally -smalm -smalt -smalter -smaltine -smaltite -smalts -smaragd -smaragdine -smaragdite -smaragdus -smarm -smarmy -smart -smarten -smarting -smartingly -smartish -smartism -smartless -smartly -smartness -smartweed -smarty -smash -smashable -smashage -smashboard -smasher -smashery -smashing -smashingly -smashment -smashup -smatter -smatterer -smattering -smatteringly -smattery -smaze -smear -smearcase -smeared -smearer -smeariness -smearless -smeary -smectic -smectis -smectite -Smectymnuan -Smectymnuus -smeddum -smee -smeech -smeek -smeeky -smeer -smeeth -smegma -smell -smellable -smellage -smelled -smeller -smellful -smellfungi -smellfungus -smelliness -smelling -smellproof -smellsome -smelly -smelt -smelter -smelterman -smeltery -smeltman -smeth -smethe -smeuse -smew -smich -smicker -smicket -smiddie -smiddum -smidge -smidgen -smifligate -smifligation -smiggins -Smilacaceae -smilacaceous -Smilaceae -smilaceous -smilacin -Smilacina -Smilax -smilax -smile -smileable -smileage -smileful -smilefulness -smileless -smilelessly -smilelessness -smilemaker -smilemaking -smileproof -smiler -smilet -smiling -smilingly -smilingness -Smilodon -smily -Smintheus -Sminthian -sminthurid -Sminthuridae -Sminthurus -smirch -smircher -smirchless -smirchy -smiris -smirk -smirker -smirking -smirkingly -smirkish -smirkle -smirkly -smirky -smirtle -smit -smitch -smite -smiter -smith -smitham -smithcraft -smither -smithereens -smithery -Smithian -Smithianism -smithing -smithite -Smithsonian -smithsonite -smithwork -smithy -smithydander -smiting -smitten -smitting -smock -smocker -smockface -smocking -smockless -smocklike -smog -smokables -smoke -smokeable -smokebox -smokebush -smoked -smokefarthings -smokehouse -smokejack -smokeless -smokelessly -smokelessness -smokelike -smokeproof -smoker -smokery -smokestack -smokestone -smoketight -smokewood -smokily -smokiness -smoking -smokish -smoky -smokyseeming -smolder -smolderingness -smolt -smooch -smoochy -smoodge -smoodger -smook -smoorich -Smoos -smoot -smooth -smoothable -smoothback -smoothbore -smoothbored -smoothcoat -smoothen -smoother -smoothification -smoothify -smoothing -smoothingly -smoothish -smoothly -smoothmouthed -smoothness -smoothpate -smopple -smore -smorgasbord -smote -smother -smotherable -smotheration -smothered -smotherer -smotheriness -smothering -smotheringly -smothery -smotter -smouch -smoucher -smous -smouse -smouser -smout -smriti -smudge -smudged -smudgedly -smudgeless -smudgeproof -smudger -smudgily -smudginess -smudgy -smug -smuggery -smuggish -smuggishly -smuggishness -smuggle -smuggleable -smuggler -smugglery -smuggling -smugism -smugly -smugness -smuisty -smur -smurr -smurry -smuse -smush -smut -smutch -smutchin -smutchless -smutchy -smutproof -smutted -smutter -smuttily -smuttiness -smutty -Smyrna -Smyrnaite -Smyrnean -Smyrniot -Smyrniote -smyth -smytrie -snab -snabbie -snabble -snack -snackle -snackman -snaff -snaffle -snaffles -snafu -snag -snagbush -snagged -snagger -snaggled -snaggletooth -snaggy -snagrel -snail -snaileater -snailery -snailfish -snailflower -snailish -snailishly -snaillike -snails -snaily -snaith -snake -snakebark -snakeberry -snakebird -snakebite -snakefish -snakeflower -snakehead -snakeholing -snakeleaf -snakeless -snakelet -snakelike -snakeling -snakemouth -snakeneck -snakeology -snakephobia -snakepiece -snakepipe -snakeproof -snaker -snakeroot -snakery -snakeship -snakeskin -snakestone -snakeweed -snakewise -snakewood -snakeworm -snakewort -snakily -snakiness -snaking -snakish -snaky -snap -snapback -snapbag -snapberry -snapdragon -snape -snaper -snaphead -snapholder -snapjack -snapless -snappable -snapped -snapper -snappily -snappiness -snapping -snappingly -snappish -snappishly -snappishness -snapps -snappy -snaps -snapsack -snapshot -snapshotter -snapweed -snapwood -snapwort -snapy -snare -snareless -snarer -snaringly -snark -snarl -snarler -snarleyyow -snarlingly -snarlish -snarly -snary -snaste -snatch -snatchable -snatched -snatcher -snatchily -snatching -snatchingly -snatchproof -snatchy -snath -snathe -snavel -snavvle -snaw -snead -sneak -sneaker -sneakiness -sneaking -sneakingly -sneakingness -sneakish -sneakishly -sneakishness -sneaksby -sneaksman -sneaky -sneap -sneath -sneathe -sneb -sneck -sneckdraw -sneckdrawing -sneckdrawn -snecker -snecket -sned -snee -sneer -sneerer -sneerful -sneerfulness -sneering -sneeringly -sneerless -sneery -sneesh -sneeshing -sneest -sneesty -sneeze -sneezeless -sneezeproof -sneezer -sneezeweed -sneezewood -sneezewort -sneezing -sneezy -snell -snelly -Snemovna -snerp -snew -snib -snibble -snibbled -snibbler -snibel -snicher -snick -snickdraw -snickdrawing -snicker -snickering -snickeringly -snickersnee -snicket -snickey -snickle -sniddle -snide -snideness -sniff -sniffer -sniffily -sniffiness -sniffing -sniffingly -sniffish -sniffishness -sniffle -sniffler -sniffly -sniffy -snift -snifter -snifty -snig -snigger -sniggerer -sniggering -sniggle -sniggler -sniggoringly -snip -snipe -snipebill -snipefish -snipelike -sniper -sniperscope -sniping -snipish -snipjack -snipnose -snipocracy -snipper -snippersnapper -snipperty -snippet -snippetiness -snippety -snippiness -snipping -snippish -snippy -snipsnapsnorum -sniptious -snipy -snirl -snirt -snirtle -snitch -snitcher -snite -snithe -snithy -snittle -snivel -sniveled -sniveler -sniveling -snively -snivy -snob -snobber -snobbery -snobbess -snobbing -snobbish -snobbishly -snobbishness -snobbism -snobby -snobdom -snobling -snobocracy -snobocrat -snobographer -snobography -snobologist -snobonomer -snobscat -snocher -snock -snocker -snod -snodly -snoek -snoeking -snog -snoga -Snohomish -snoke -Snonowas -snood -snooded -snooding -snook -snooker -snookered -snoop -snooper -snooperscope -snoopy -snoose -snoot -snootily -snootiness -snooty -snoove -snooze -snoozer -snooziness -snoozle -snoozy -snop -Snoqualmie -Snoquamish -snore -snoreless -snorer -snoring -snoringly -snork -snorkel -snorker -snort -snorter -snorting -snortingly -snortle -snorty -snot -snotter -snottily -snottiness -snotty -snouch -snout -snouted -snouter -snoutish -snoutless -snoutlike -snouty -Snow -snow -Snowball -snowball -snowbank -snowbell -snowberg -snowberry -snowbird -snowblink -snowbound -snowbreak -snowbush -snowcap -snowcraft -Snowdonian -snowdrift -snowdrop -snowfall -snowflake -snowflight -snowflower -snowfowl -snowhammer -snowhouse -snowie -snowily -snowiness -snowish -snowk -snowl -snowland -snowless -snowlike -snowmanship -snowmobile -snowplow -snowproof -snowscape -snowshade -snowshed -snowshine -snowshoe -snowshoed -snowshoeing -snowshoer -snowslide -snowslip -snowstorm -snowsuit -snowworm -snowy -snozzle -snub -snubbable -snubbed -snubbee -snubber -snubbiness -snubbing -snubbingly -snubbish -snubbishly -snubbishness -snubby -snubproof -snuck -snudge -snuff -snuffbox -snuffboxer -snuffcolored -snuffer -snuffers -snuffiness -snuffing -snuffingly -snuffish -snuffle -snuffler -snuffles -snuffless -snuffliness -snuffling -snufflingly -snuffly -snuffman -snuffy -snug -snugger -snuggery -snuggish -snuggle -snugify -snugly -snugness -snum -snup -snupper -snur -snurl -snurly -snurp -snurt -snuzzle -sny -snying -so -soak -soakage -soakaway -soaked -soaken -soaker -soaking -soakingly -soakman -soaky -soally -soam -soap -soapbark -soapberry -soapbox -soapboxer -soapbubbly -soapbush -soaper -soapery -soapfish -soapily -soapiness -soaplees -soapless -soaplike -soapmaker -soapmaking -soapmonger -soaprock -soaproot -soapstone -soapsud -soapsuddy -soapsuds -soapsudsy -soapweed -soapwood -soapwort -soapy -soar -soarability -soarable -soarer -soaring -soaringly -soary -sob -sobber -sobbing -sobbingly -sobby -sobeit -sober -soberer -sobering -soberingly -soberize -soberlike -soberly -soberness -sobersault -sobersided -sobersides -soberwise -sobful -soboles -soboliferous -sobproof -Sobralia -sobralite -Sobranje -sobrevest -sobriety -sobriquet -sobriquetical -soc -socage -socager -soccer -soccerist -soccerite -soce -socht -sociability -sociable -sociableness -sociably -social -Sociales -socialism -socialist -socialistic -socialite -sociality -socializable -socialization -socialize -socializer -socially -socialness -sociation -sociative -societal -societally -societarian -societarianism -societary -societified -societism -societist -societologist -societology -society -societyish -societyless -socii -Socinian -Socinianism -Socinianistic -Socinianize -sociobiological -sociocentric -sociocracy -sociocrat -sociocratic -sociocultural -sociodrama -sociodramatic -socioeconomic -socioeducational -sociogenesis -sociogenetic -sociogeny -sociography -sociolatry -sociolegal -sociologian -sociologic -sociological -sociologically -sociologism -sociologist -sociologistic -sociologize -sociologizer -sociologizing -sociology -sociomedical -sociometric -sociometry -socionomic -socionomics -socionomy -sociophagous -sociopolitical -socioreligious -socioromantic -sociostatic -sociotechnical -socius -sock -sockdolager -socker -socket -socketful -socketless -sockeye -sockless -socklessness -sockmaker -sockmaking -socky -socle -socman -socmanry -soco -Socorrito -Socotran -Socotri -Socotrine -Socratean -Socratic -Socratical -Socratically -Socraticism -Socratism -Socratist -Socratize -sod -soda -sodaclase -sodaic -sodaless -sodalist -sodalite -sodalithite -sodality -sodamide -sodbuster -sodded -sodden -soddenly -soddenness -sodding -soddite -soddy -sodic -sodio -sodioaluminic -sodioaurous -sodiocitrate -sodiohydric -sodioplatinic -sodiosalicylate -sodiotartrate -sodium -sodless -sodoku -Sodom -sodomic -Sodomist -Sodomite -sodomitess -sodomitic -sodomitical -sodomitically -Sodomitish -sodomy -sodwork -sody -soe -soekoe -soever -sofa -sofane -sofar -soffit -Sofia -Sofoklis -Sofronia -soft -softa -softball -softbrained -soften -softener -softening -softhead -softheaded -softhearted -softheartedly -softheartedness -softhorn -softish -softling -softly -softner -softness -softship -softtack -softwood -softy -sog -Soga -Sogdian -Sogdianese -Sogdianian -Sogdoite -soger -soget -soggarth -soggendalite -soggily -sogginess -sogging -soggy -soh -soho -Soiesette -soiesette -soil -soilage -soiled -soiling -soilless -soilproof -soilure -soily -soiree -soixantine -Soja -soja -sojourn -sojourner -sojourney -sojournment -sok -soka -soke -sokeman -sokemanemot -sokemanry -soken -Sokoki -Sokotri -Sokulk -Sol -sol -sola -solace -solaceful -solacement -solaceproof -solacer -solacious -solaciously -solaciousness -solan -Solanaceae -solanaceous -solanal -Solanales -solander -solaneine -solaneous -solanidine -solanine -Solanum -solanum -solar -solarism -solarist -solaristic -solaristically -solaristics -Solarium -solarium -solarization -solarize -solarometer -solate -solatia -solation -solatium -solay -sold -soldado -Soldan -soldan -soldanel -Soldanella -soldanelle -soldanrie -solder -solderer -soldering -solderless -soldi -soldier -soldierbird -soldierbush -soldierdom -soldieress -soldierfish -soldierhearted -soldierhood -soldiering -soldierize -soldierlike -soldierliness -soldierly -soldierproof -soldiership -soldierwise -soldierwood -soldiery -soldo -sole -Solea -solea -soleas -solecism -solecist -solecistic -solecistical -solecistically -solecize -solecizer -Soleidae -soleiform -soleil -soleless -solely -solemn -solemncholy -solemnify -solemnitude -solemnity -solemnization -solemnize -solemnizer -solemnly -solemnness -Solen -solen -solenacean -solenaceous -soleness -solenette -solenial -Solenidae -solenite -solenitis -solenium -solenoconch -Solenoconcha -solenocyte -Solenodon -solenodont -Solenodontidae -solenogaster -Solenogastres -solenoglyph -Solenoglypha -solenoglyphic -solenoid -solenoidal -solenoidally -Solenopsis -solenostele -solenostelic -solenostomid -Solenostomidae -solenostomoid -solenostomous -Solenostomus -solent -solentine -solepiece -soleplate -soleprint -soler -Solera -soles -soleus -soleyn -solfataric -solfeggio -solferino -soli -soliative -solicit -solicitant -solicitation -solicitationism -solicited -solicitee -soliciter -soliciting -solicitor -solicitorship -solicitous -solicitously -solicitousness -solicitress -solicitrix -solicitude -solicitudinous -solid -Solidago -solidago -solidaric -solidarily -solidarism -solidarist -solidaristic -solidarity -solidarize -solidary -solidate -solidi -solidifiability -solidifiable -solidifiableness -solidification -solidifier -solidiform -solidify -solidish -solidism -solidist -solidistic -solidity -solidly -solidness -solidum -Solidungula -solidungular -solidungulate -solidus -solifidian -solifidianism -solifluction -solifluctional -soliform -Solifugae -solifuge -solifugean -solifugid -solifugous -soliloquacious -soliloquist -soliloquium -soliloquize -soliloquizer -soliloquizing -soliloquizingly -soliloquy -solilunar -Solio -solio -soliped -solipedal -solipedous -solipsism -solipsismal -solipsist -solipsistic -solist -solitaire -solitarian -solitarily -solitariness -solitary -soliterraneous -solitidal -solitude -solitudinarian -solitudinize -solitudinous -solivagant -solivagous -sollar -solleret -Sollya -solmizate -solmization -solo -solod -solodi -solodization -solodize -soloecophanes -soloist -Solomon -Solomonian -Solomonic -Solomonical -Solomonitic -Solon -solon -solonchak -solonetz -solonetzic -solonetzicity -Solonian -Solonic -solonist -soloth -solotink -solotnik -solpugid -Solpugida -Solpugidea -Solpugides -solstice -solsticion -solstitia -solstitial -solstitially -solstitium -solubility -solubilization -solubilize -soluble -solubleness -solubly -solum -solute -solution -solutional -solutioner -solutionist -solutize -solutizer -Solutrean -solvability -solvable -solvableness -solvate -solvation -solve -solvement -solvency -solvend -solvent -solvently -solventproof -solver -solvolysis -solvolytic -solvolyze -solvsbergite -Solyma -Solymaean -soma -somacule -Somal -somal -Somali -somaplasm -Somaschian -somasthenia -somata -somatasthenia -Somateria -somatic -somatical -somatically -somaticosplanchnic -somaticovisceral -somatics -somatism -somatist -somatization -somatochrome -somatocyst -somatocystic -somatoderm -somatogenetic -somatogenic -somatognosis -somatognostic -somatologic -somatological -somatologically -somatologist -somatology -somatome -somatomic -somatophyte -somatophytic -somatoplasm -somatopleural -somatopleure -somatopleuric -somatopsychic -somatosplanchnic -somatotonia -somatotonic -somatotropic -somatotropically -somatotropism -somatotype -somatotyper -somatotypy -somatous -somber -somberish -somberly -somberness -sombre -sombrerite -sombrero -sombreroed -sombrous -sombrously -sombrousness -some -somebody -someday -somedeal -somegate -somehow -someone -somepart -someplace -somers -somersault -somerset -Somersetian -somervillite -somesthesia -somesthesis -somesthetic -something -somethingness -sometime -sometimes -someway -someways -somewhat -somewhatly -somewhatness -somewhen -somewhence -somewhere -somewheres -somewhile -somewhiles -somewhither -somewhy -somewise -somital -somite -somitic -somma -sommaite -sommelier -somnambulance -somnambulancy -somnambulant -somnambular -somnambulary -somnambulate -somnambulation -somnambulator -somnambule -somnambulency -somnambulic -somnambulically -somnambulism -somnambulist -somnambulistic -somnambulize -somnambulous -somnial -somniative -somnifacient -somniferous -somniferously -somnific -somnifuge -somnify -somniloquacious -somniloquence -somniloquent -somniloquism -somniloquist -somniloquize -somniloquous -somniloquy -Somniosus -somnipathist -somnipathy -somnivolency -somnivolent -somnolence -somnolency -somnolent -somnolently -somnolescence -somnolescent -somnolism -somnolize -somnopathy -somnorific -somnus -sompay -sompne -sompner -Son -son -sonable -sonance -sonancy -sonant -sonantal -sonantic -sonantina -sonantized -sonar -sonata -sonatina -sonation -Sonchus -sond -sondation -sondeli -Sonderbund -sonderclass -Sondergotter -Sondylomorum -soneri -song -songbird -songbook -songcraft -songfest -songful -songfully -songfulness -Songhai -Songish -songish -songland -songle -songless -songlessly -songlessness -songlet -songlike -songman -Songo -Songoi -songster -songstress -songworthy -songwright -songy -sonhood -sonic -soniferous -sonification -soniou -Sonja -sonk -sonless -sonlike -sonlikeness -sonly -Sonneratia -Sonneratiaceae -sonneratiaceous -sonnet -sonnetary -sonneteer -sonneteeress -sonnetic -sonneting -sonnetish -sonnetist -sonnetize -sonnetlike -sonnetwise -sonnikins -Sonny -sonny -sonobuoy -sonometer -Sonoran -sonorant -sonorescence -sonorescent -sonoric -sonoriferous -sonoriferously -sonorific -sonority -sonorophone -sonorosity -sonorous -sonorously -sonorousness -Sonrai -sons -sonship -sonsy -sontag -soodle -soodly -Soohong -sook -Sooke -sooky -sool -sooloos -soon -sooner -soonish -soonly -Soorah -soorawn -soord -soorkee -Soot -soot -sooter -sooterkin -sooth -soothe -soother -sootherer -soothful -soothing -soothingly -soothingness -soothless -soothsay -soothsayer -soothsayership -soothsaying -sootily -sootiness -sootless -sootlike -sootproof -sooty -sootylike -sop -sope -soph -Sopheric -Sopherim -Sophia -sophia -Sophian -sophic -sophical -sophically -sophiologic -sophiology -sophism -Sophist -sophister -sophistic -sophistical -sophistically -sophisticalness -sophisticant -sophisticate -sophisticated -sophistication -sophisticative -sophisticator -sophisticism -Sophistress -sophistress -sophistry -Sophoclean -sophomore -sophomoric -sophomorical -sophomorically -Sophora -sophoria -Sophronia -sophronize -Sophy -sophy -sopite -sopition -sopor -soporiferous -soporiferously -soporiferousness -soporific -soporifical -soporifically -soporose -sopper -soppiness -sopping -soppy -soprani -sopranino -sopranist -soprano -sora -Sorabian -sorage -soral -Sorb -sorb -Sorbaria -sorbate -sorbefacient -sorbent -Sorbian -sorbic -sorbile -sorbin -sorbinose -Sorbish -sorbite -sorbitic -sorbitize -sorbitol -Sorbonic -Sorbonical -Sorbonist -Sorbonne -sorbose -sorboside -Sorbus -sorbus -sorcer -sorcerer -sorceress -sorcering -sorcerous -sorcerously -sorcery -sorchin -sorda -Sordaria -Sordariaceae -sordawalite -sordellina -Sordello -sordes -sordid -sordidity -sordidly -sordidness -sordine -sordino -sordor -sore -soredia -soredial -sorediate -sorediferous -sorediform -soredioid -soredium -soree -sorefalcon -sorefoot -sorehawk -sorehead -soreheaded -soreheadedly -soreheadedness -sorehearted -sorehon -sorely -sorema -soreness -Sorex -sorgho -Sorghum -sorghum -sorgo -sori -soricid -Soricidae -soricident -Soricinae -soricine -soricoid -Soricoidea -soriferous -sorite -sorites -soritical -sorn -sornare -sornari -sorner -sorning -soroban -Soroptimist -sororal -sororate -sororial -sororially -sororicidal -sororicide -sorority -sororize -sorose -sorosis -sorosphere -Sorosporella -Sorosporium -sorption -sorra -Sorrel -sorrel -sorrento -sorrily -sorriness -sorroa -sorrow -sorrower -sorrowful -sorrowfully -sorrowfulness -sorrowing -sorrowingly -sorrowless -sorrowproof -sorrowy -sorry -sorryhearted -sorryish -sort -sortable -sortably -sortal -sortation -sorted -sorter -sortie -sortilege -sortileger -sortilegic -sortilegious -sortilegus -sortilegy -sortiment -sortition -sortly -sorty -sorus -sorva -sory -sosh -soshed -Sosia -soso -sosoish -Sospita -soss -sossle -sostenuto -sot -Sotadean -Sotadic -Soter -Soteres -soterial -soteriologic -soteriological -soteriology -Sothiac -Sothiacal -Sothic -Sothis -Sotho -sotie -Sotik -sotnia -sotnik -sotol -sots -sottage -sotted -sotter -sottish -sottishly -sottishness -sou -souari -soubise -soubrette -soubrettish -soucar -souchet -Souchong -souchong -souchy -soud -soudagur -souffle -souffleed -sough -sougher -soughing -sought -Souhegan -soul -soulack -soulcake -souled -Souletin -soulful -soulfully -soulfulness -soulical -soulish -soulless -soullessly -soullessness -soullike -Soulmass -soulsaving -soulward -souly -soum -soumansite -soumarque -sound -soundable -soundage -soundboard -sounder -soundful -soundheaded -soundheadedness -soundhearted -soundheartednes -sounding -soundingly -soundingness -soundless -soundlessly -soundlessness -soundly -soundness -soundproof -soundproofing -soup -soupbone -soupcon -souper -souple -soupless -souplike -soupspoon -soupy -sour -sourbelly -sourberry -sourbread -sourbush -sourcake -source -sourceful -sourcefulness -sourceless -sourcrout -sourdeline -sourdine -soured -souredness -souren -sourer -sourhearted -souring -sourish -sourishly -sourishness -sourjack -sourling -sourly -sourness -sourock -soursop -sourtop -sourweed -sourwood -soury -sousaphone -sousaphonist -souse -souser -souslik -soutane -souter -souterrain -South -south -southard -southbound -Southcottian -Southdown -southeast -southeaster -southeasterly -southeastern -southeasternmost -southeastward -southeastwardly -southeastwards -souther -southerland -southerliness -southerly -southermost -southern -Southerner -southerner -southernism -southernize -southernliness -southernly -southernmost -southernness -southernwood -southing -southland -southlander -southmost -southness -southpaw -Southron -southron -Southronie -Southumbrian -southward -southwardly -southwards -southwest -southwester -southwesterly -southwestern -Southwesterner -southwesternmost -southwestward -southwestwardly -souvenir -souverain -souwester -sov -sovereign -sovereigness -sovereignly -sovereignness -sovereignship -sovereignty -soviet -sovietdom -sovietic -sovietism -sovietist -sovietization -sovietize -sovite -sovkhose -sovkhoz -sovran -sovranty -sow -sowable -sowan -sowans -sowar -sowarry -sowback -sowbacked -sowbane -sowbelly -sowbread -sowdones -sowel -sowens -sower -sowfoot -sowing -sowins -sowl -sowle -sowlike -sowlth -sown -sowse -sowt -sowte -Soxhlet -soy -soya -soybean -Soyot -sozin -sozolic -sozzle -sozzly -spa -Space -space -spaceband -spaced -spaceful -spaceless -spacer -spacesaving -spaceship -spaciness -spacing -spaciosity -spaciotemporal -spacious -spaciously -spaciousness -spack -spacy -spad -spade -spadebone -spaded -spadefish -spadefoot -spadeful -spadelike -spademan -spader -spadesman -spadewise -spadework -spadger -spadiceous -spadices -spadicifloral -spadiciflorous -spadiciform -spadicose -spadilla -spadille -spading -spadix -spadone -spadonic -spadonism -spadrone -spadroon -spae -spaebook -spaecraft -spaedom -spaeman -spaer -spaewife -spaewoman -spaework -spaewright -spaghetti -Spagnuoli -spagyric -spagyrical -spagyrically -spagyrist -spahi -spaid -spaik -spairge -spak -Spalacidae -spalacine -Spalax -spald -spalder -spalding -spale -spall -spallation -spaller -spalling -spalpeen -spalt -span -spancel -spandle -spandrel -spandy -spane -spanemia -spanemy -spang -spanghew -spangle -spangled -spangler -spanglet -spangly -spangolite -Spaniard -Spaniardization -Spaniardize -Spaniardo -spaniel -spaniellike -spanielship -spaning -Spaniol -Spaniolate -Spanioli -Spaniolize -spanipelagic -Spanish -Spanishize -Spanishly -spank -spanker -spankily -spanking -spankingly -spanky -spanless -spann -spannel -spanner -spannerman -spanopnoea -spanpiece -spantoon -spanule -spanworm -Spar -spar -sparable -sparada -sparadrap -sparagrass -sparagus -Sparassis -sparassodont -Sparassodonta -Sparaxis -sparaxis -sparch -spare -spareable -spareless -sparely -spareness -sparer -sparerib -sparesome -Sparganiaceae -Sparganium -sparganium -sparganosis -sparganum -sparge -sparger -spargosis -sparhawk -sparid -Sparidae -sparing -sparingly -sparingness -spark -sparkback -sparked -sparker -sparkiness -sparking -sparkish -sparkishly -sparkishness -sparkle -sparkleberry -sparkler -sparkless -sparklessly -sparklet -sparklike -sparkliness -sparkling -sparklingly -sparklingness -sparkly -sparkproof -sparks -sparky -sparlike -sparling -sparm -Sparmannia -Sparnacian -sparoid -sparpiece -sparred -sparrer -sparring -sparringly -sparrow -sparrowbill -sparrowcide -sparrowdom -sparrowgrass -sparrowish -sparrowless -sparrowlike -sparrowtail -sparrowtongue -sparrowwort -sparrowy -sparry -sparse -sparsedly -sparsely -sparsile -sparsioplast -sparsity -spart -Spartacan -Spartacide -Spartacism -Spartacist -spartacist -Spartan -Spartanhood -Spartanic -Spartanically -Spartanism -Spartanize -Spartanlike -Spartanly -sparteine -sparterie -sparth -Spartiate -Spartina -Spartium -spartle -Sparus -sparver -spary -spasm -spasmatic -spasmatical -spasmatomancy -spasmed -spasmic -spasmodic -spasmodical -spasmodically -spasmodicalness -spasmodism -spasmodist -spasmolytic -spasmophilia -spasmophilic -spasmotin -spasmotoxin -spasmous -Spass -spastic -spastically -spasticity -spat -spatalamancy -Spatangida -Spatangina -spatangoid -Spatangoida -Spatangoidea -spatangoidean -Spatangus -spatchcock -spate -spatha -spathaceous -spathal -spathe -spathed -spatheful -spathic -Spathiflorae -spathilae -spathilla -spathose -spathous -spathulate -Spathyema -spatial -spatiality -spatialization -spatialize -spatially -spatiate -spatiation -spatilomancy -spatiotemporal -spatling -spatted -spatter -spatterdashed -spatterdasher -spatterdock -spattering -spatteringly -spatterproof -spatterwork -spatting -spattle -spattlehoe -Spatula -spatula -spatulamancy -spatular -spatulate -spatulation -spatule -spatuliform -spatulose -spave -spaver -spavie -spavied -spaviet -spavin -spavindy -spavined -spawn -spawneater -spawner -spawning -spawny -spay -spayad -spayard -spaying -speak -speakable -speakableness -speakably -speaker -speakeress -speakership -speakhouse -speakies -speaking -speakingly -speakingness -speakless -speaklessly -speal -spealbone -spean -spear -spearcast -spearer -spearfish -spearflower -spearhead -spearing -spearman -spearmanship -spearmint -spearproof -spearsman -spearwood -spearwort -speary -spec -specchie -spece -special -specialism -specialist -specialistic -speciality -specialization -specialize -specialized -specializer -specially -specialness -specialty -speciation -specie -species -speciestaler -specifiable -specific -specifical -specificality -specifically -specificalness -specificate -specification -specificative -specificatively -specificity -specificize -specificly -specificness -specifier -specifist -specify -specillum -specimen -specimenize -speciology -speciosity -specious -speciously -speciousness -speck -specked -speckedness -speckfall -speckiness -specking -speckle -specklebelly -specklebreast -speckled -speckledbill -speckledness -speckless -specklessly -specklessness -speckling -speckly -speckproof -specks -specksioneer -specky -specs -spectacle -spectacled -spectacleless -spectaclelike -spectaclemaker -spectaclemaking -spectacles -spectacular -spectacularism -spectacularity -spectacularly -spectator -spectatordom -spectatorial -spectatorship -spectatory -spectatress -spectatrix -specter -spectered -specterlike -spectra -spectral -spectralism -spectrality -spectrally -spectralness -spectrobolograph -spectrobolographic -spectrobolometer -spectrobolometric -spectrochemical -spectrochemistry -spectrocolorimetry -spectrocomparator -spectroelectric -spectrogram -spectrograph -spectrographic -spectrographically -spectrography -spectroheliogram -spectroheliograph -spectroheliographic -spectrohelioscope -spectrological -spectrologically -spectrology -spectrometer -spectrometric -spectrometry -spectromicroscope -spectromicroscopical -spectrophobia -spectrophone -spectrophonic -spectrophotoelectric -spectrophotograph -spectrophotography -spectrophotometer -spectrophotometric -spectrophotometry -spectropolarimeter -spectropolariscope -spectropyrheliometer -spectropyrometer -spectroradiometer -spectroradiometric -spectroradiometry -spectroscope -spectroscopic -spectroscopically -spectroscopist -spectroscopy -spectrotelescope -spectrous -spectrum -spectry -specula -specular -Specularia -specularly -speculate -speculation -speculatist -speculative -speculatively -speculativeness -speculativism -speculator -speculatory -speculatrices -speculatrix -speculist -speculum -specus -sped -speech -speechcraft -speecher -speechful -speechfulness -speechification -speechifier -speechify -speeching -speechless -speechlessly -speechlessness -speechlore -speechmaker -speechmaking -speechment -speed -speedaway -speedboat -speedboating -speedboatman -speeder -speedful -speedfully -speedfulness -speedily -speediness -speeding -speedingly -speedless -speedometer -speedster -speedway -speedwell -speedy -speel -speelken -speelless -speen -speer -speering -speerity -speiskobalt -speiss -spekboom -spelaean -spelder -spelding -speldring -speleological -speleologist -speleology -spelk -spell -spellable -spellbind -spellbinder -spellbinding -spellbound -spellcraft -spelldown -speller -spellful -spelling -spellingdown -spellingly -spellmonger -spellproof -spellword -spellwork -spelt -spelter -spelterman -speltoid -speltz -speluncar -speluncean -spelunk -spelunker -spence -Spencean -Spencer -spencer -Spencerian -Spencerianism -Spencerism -spencerite -spend -spendable -spender -spendful -spendible -spending -spendless -spendthrift -spendthrifty -Spenerism -spense -Spenserian -spent -speos -Speotyto -sperable -Speranza -sperate -Spergula -Spergularia -sperity -sperket -sperling -sperm -sperma -spermaceti -spermacetilike -spermaduct -spermalist -Spermaphyta -spermaphyte -spermaphytic -spermarium -spermary -spermashion -spermatangium -spermatheca -spermathecal -spermatic -spermatically -spermatid -spermatiferous -spermatin -spermatiogenous -spermation -spermatiophore -spermatism -spermatist -spermatitis -spermatium -spermatize -spermatoblast -spermatoblastic -spermatocele -spermatocyst -spermatocystic -spermatocystitis -spermatocytal -spermatocyte -spermatogemma -spermatogenesis -spermatogenetic -spermatogenic -spermatogenous -spermatogeny -spermatogonial -spermatogonium -spermatoid -spermatolysis -spermatolytic -spermatophoral -spermatophore -spermatophorous -Spermatophyta -spermatophyte -spermatophytic -spermatoplasm -spermatoplasmic -spermatoplast -spermatorrhea -spermatospore -spermatotheca -spermatova -spermatovum -spermatoxin -spermatozoa -spermatozoal -spermatozoan -spermatozoic -spermatozoid -spermatozoon -spermaturia -spermic -spermidine -spermiducal -spermiduct -spermigerous -spermine -spermiogenesis -spermism -spermist -spermoblast -spermoblastic -spermocarp -spermocenter -spermoderm -spermoduct -spermogenesis -spermogenous -spermogone -spermogoniferous -spermogonium -spermogonous -spermologer -spermological -spermologist -spermology -spermolysis -spermolytic -spermophile -spermophiline -Spermophilus -spermophore -spermophorium -Spermophyta -spermophyte -spermophytic -spermosphere -spermotheca -spermotoxin -spermous -spermoviduct -spermy -speronara -speronaro -sperone -sperrylite -spessartite -spet -spetch -spetrophoby -speuchan -spew -spewer -spewiness -spewing -spewy -spex -sphacel -Sphacelaria -Sphacelariaceae -sphacelariaceous -Sphacelariales -sphacelate -sphacelated -sphacelation -sphacelia -sphacelial -sphacelism -sphaceloderma -Sphaceloma -sphacelotoxin -sphacelous -sphacelus -Sphaeralcea -sphaeraphides -Sphaerella -sphaerenchyma -Sphaeriaceae -sphaeriaceous -Sphaeriales -sphaeridia -sphaeridial -sphaeridium -Sphaeriidae -Sphaerioidaceae -sphaeristerium -sphaerite -Sphaerium -sphaeroblast -Sphaerobolaceae -Sphaerobolus -Sphaerocarpaceae -Sphaerocarpales -Sphaerocarpus -sphaerocobaltite -Sphaerococcaceae -sphaerococcaceous -Sphaerococcus -sphaerolite -sphaerolitic -Sphaeroma -Sphaeromidae -Sphaerophoraceae -Sphaerophorus -Sphaeropsidaceae -Sphaeropsidales -Sphaeropsis -sphaerosiderite -sphaerosome -sphaerospore -Sphaerostilbe -Sphaerotheca -Sphaerotilus -sphagion -Sphagnaceae -sphagnaceous -Sphagnales -sphagnicolous -sphagnologist -sphagnology -sphagnous -Sphagnum -sphagnum -Sphakiot -sphalerite -Sphargis -sphecid -Sphecidae -Sphecina -Sphecoidea -spheges -sphegid -Sphegidae -Sphegoidea -sphendone -sphene -sphenethmoid -sphenethmoidal -sphenic -sphenion -Sphenisci -Spheniscidae -Sphenisciformes -spheniscine -spheniscomorph -Spheniscomorphae -spheniscomorphic -Spheniscus -sphenobasilar -sphenobasilic -sphenocephalia -sphenocephalic -sphenocephalous -sphenocephaly -Sphenodon -sphenodon -sphenodont -Sphenodontia -Sphenodontidae -sphenoethmoid -sphenoethmoidal -sphenofrontal -sphenogram -sphenographic -sphenographist -sphenography -sphenoid -sphenoidal -sphenoiditis -sphenolith -sphenomalar -sphenomandibular -sphenomaxillary -sphenopalatine -sphenoparietal -sphenopetrosal -Sphenophorus -Sphenophyllaceae -sphenophyllaceous -Sphenophyllales -Sphenophyllum -Sphenopteris -sphenosquamosal -sphenotemporal -sphenotic -sphenotribe -sphenotripsy -sphenoturbinal -sphenovomerine -sphenozygomatic -spherable -spheral -spherality -spheraster -spheration -sphere -sphereless -spheric -spherical -sphericality -spherically -sphericalness -sphericist -sphericity -sphericle -sphericocylindrical -sphericotetrahedral -sphericotriangular -spherics -spheriform -spherify -spheroconic -spherocrystal -spherograph -spheroidal -spheroidally -spheroidic -spheroidical -spheroidically -spheroidicity -spheroidism -spheroidity -spheroidize -spheromere -spherometer -spheroquartic -spherula -spherular -spherulate -spherule -spherulite -spherulitic -spherulitize -sphery -spheterize -Sphex -sphexide -sphincter -sphincteral -sphincteralgia -sphincterate -sphincterectomy -sphincterial -sphincteric -sphincterismus -sphincteroscope -sphincteroscopy -sphincterotomy -sphindid -Sphindidae -Sphindus -sphingal -sphinges -sphingid -Sphingidae -sphingiform -sphingine -sphingoid -sphingometer -sphingomyelin -sphingosine -Sphingurinae -Sphingurus -sphinx -sphinxian -sphinxianness -sphinxlike -Sphoeroides -sphragide -sphragistic -sphragistics -sphygmia -sphygmic -sphygmochronograph -sphygmodic -sphygmogram -sphygmograph -sphygmographic -sphygmography -sphygmoid -sphygmology -sphygmomanometer -sphygmomanometric -sphygmomanometry -sphygmometer -sphygmometric -sphygmophone -sphygmophonic -sphygmoscope -sphygmus -Sphyraena -sphyraenid -Sphyraenidae -sphyraenoid -Sphyrapicus -Sphyrna -Sphyrnidae -Spica -spica -spical -spicant -Spicaria -spicate -spicated -spiccato -spice -spiceable -spiceberry -spicebush -spicecake -spiced -spiceful -spicehouse -spiceland -spiceless -spicelike -spicer -spicery -spicewood -spiciferous -spiciform -spicigerous -spicilege -spicily -spiciness -spicing -spick -spicket -spickle -spicknel -spicose -spicosity -spicous -spicousness -spicula -spiculae -spicular -spiculate -spiculated -spiculation -spicule -spiculiferous -spiculiform -spiculigenous -spiculigerous -spiculofiber -spiculose -spiculous -spiculum -spiculumamoris -spicy -spider -spidered -spiderflower -spiderish -spiderless -spiderlike -spiderling -spiderly -spiderweb -spiderwork -spiderwort -spidery -spidger -spied -spiegel -spiegeleisen -spiel -spieler -spier -spiff -spiffed -spiffily -spiffiness -spiffing -spiffy -spiflicate -spiflicated -spiflication -spig -Spigelia -Spigeliaceae -Spigelian -spiggoty -spignet -spigot -Spike -spike -spikebill -spiked -spikedness -spikefish -spikehorn -spikelet -spikelike -spikenard -spiker -spiketail -spiketop -spikeweed -spikewise -spikily -spikiness -spiking -spiky -Spilanthes -spile -spilehole -spiler -spileworm -spilikin -spiling -spilite -spilitic -spill -spillage -spiller -spillet -spillproof -spillway -spilly -Spilogale -spiloma -spilosite -spilt -spilth -spilus -spin -spina -spinacene -spinaceous -spinach -spinachlike -Spinacia -spinae -spinage -spinal -spinales -spinalis -spinally -spinate -spinder -spindlage -spindle -spindleage -spindled -spindleful -spindlehead -spindlelegs -spindlelike -spindler -spindleshanks -spindletail -spindlewise -spindlewood -spindleworm -spindliness -spindling -spindly -spindrift -spine -spinebill -spinebone -spined -spinel -spineless -spinelessly -spinelessness -spinelet -spinelike -spinescence -spinescent -spinet -spinetail -spingel -spinibulbar -spinicarpous -spinicerebellar -spinidentate -spiniferous -Spinifex -spinifex -spiniform -spinifugal -spinigerous -spinigrade -spininess -spinipetal -spinitis -spinituberculate -spink -spinnable -spinnaker -spinner -spinneret -spinnerular -spinnerule -spinnery -spinney -spinning -spinningly -spinobulbar -spinocarpous -spinocerebellar -spinogalvanization -spinoglenoid -spinoid -spinomuscular -spinoneural -spinoperipheral -spinose -spinosely -spinoseness -spinosity -spinosodentate -spinosodenticulate -spinosotubercular -spinosotuberculate -spinosympathetic -spinotectal -spinothalamic -spinotuberculous -spinous -spinousness -Spinozism -Spinozist -Spinozistic -spinster -spinsterdom -spinsterhood -spinsterial -spinsterish -spinsterishly -spinsterism -spinsterlike -spinsterly -spinsterous -spinstership -spinstress -spintext -spinthariscope -spinthariscopic -spintherism -spinulate -spinulation -spinule -spinulescent -spinuliferous -spinuliform -Spinulosa -spinulose -spinulosely -spinulosociliate -spinulosodentate -spinulosodenticulate -spinulosogranulate -spinulososerrate -spinulous -spiny -spionid -Spionidae -Spioniformia -spiracle -spiracula -spiracular -spiraculate -spiraculiferous -spiraculiform -spiraculum -Spiraea -Spiraeaceae -spiral -spirale -spiraled -spiraliform -spiralism -spirality -spiralization -spiralize -spirally -spiraloid -spiraltail -spiralwise -spiran -spirant -Spiranthes -spiranthic -spiranthy -spirantic -spirantize -spiraster -spirate -spirated -spiration -spire -spirea -spired -spiregrass -spireless -spirelet -spireme -spirepole -spireward -spirewise -spiricle -Spirifer -Spirifera -Spiriferacea -spiriferid -Spiriferidae -spiriferoid -spiriferous -spiriform -spirignath -spirignathous -spirilla -Spirillaceae -spirillaceous -spirillar -spirillolysis -spirillosis -spirillotropic -spirillotropism -spirillum -spiring -spirit -spiritally -spiritdom -spirited -spiritedly -spiritedness -spiriter -spiritful -spiritfully -spiritfulness -spirithood -spiriting -spiritism -spiritist -spiritistic -spiritize -spiritland -spiritleaf -spiritless -spiritlessly -spiritlessness -spiritlike -spiritmonger -spiritous -spiritrompe -spiritsome -spiritual -spiritualism -spiritualist -spiritualistic -spiritualistically -spirituality -spiritualization -spiritualize -spiritualizer -spiritually -spiritualness -spiritualship -spiritualty -spirituosity -spirituous -spirituously -spirituousness -spiritus -spiritweed -spirity -spirivalve -spirket -spirketing -spirling -spiro -Spirobranchia -Spirobranchiata -spirobranchiate -Spirochaeta -Spirochaetaceae -spirochaetal -Spirochaetales -Spirochaete -spirochetal -spirochete -spirochetemia -spirochetic -spirocheticidal -spirocheticide -spirochetosis -spirochetotic -Spirodela -spirogram -spirograph -spirographidin -spirographin -Spirographis -Spirogyra -spiroid -spiroloculine -spirometer -spirometric -spirometrical -spirometry -Spironema -spiropentane -Spirophyton -Spirorbis -spiroscope -Spirosoma -spirous -spirt -Spirula -spirulate -spiry -spise -spissated -spissitude -Spisula -spit -spital -spitball -spitballer -spitbox -spitchcock -spite -spiteful -spitefully -spitefulness -spiteless -spiteproof -spitfire -spitful -spithamai -spithame -spitish -spitpoison -spitscocked -spitstick -spitted -spitten -spitter -spitting -spittle -spittlefork -spittlestaff -spittoon -spitz -Spitzenburg -spitzkop -spiv -spivery -Spizella -spizzerinctum -Splachnaceae -splachnaceous -splachnoid -Splachnum -splacknuck -splairge -splanchnapophysial -splanchnapophysis -splanchnectopia -splanchnemphraxis -splanchnesthesia -splanchnesthetic -splanchnic -splanchnoblast -splanchnocoele -splanchnoderm -splanchnodiastasis -splanchnodynia -splanchnographer -splanchnographical -splanchnography -splanchnolith -splanchnological -splanchnologist -splanchnology -splanchnomegalia -splanchnomegaly -splanchnopathy -splanchnopleural -splanchnopleure -splanchnopleuric -splanchnoptosia -splanchnoptosis -splanchnosclerosis -splanchnoscopy -splanchnoskeletal -splanchnoskeleton -splanchnosomatic -splanchnotomical -splanchnotomy -splanchnotribe -splash -splashboard -splashed -splasher -splashiness -splashing -splashingly -splashproof -splashy -splat -splatch -splatcher -splatchy -splathering -splatter -splatterdash -splatterdock -splatterer -splatterfaced -splatterwork -splay -splayed -splayer -splayfoot -splayfooted -splaymouth -splaymouthed -spleen -spleenful -spleenfully -spleenish -spleenishly -spleenishness -spleenless -spleenwort -spleeny -spleet -spleetnew -splenadenoma -splenalgia -splenalgic -splenalgy -splenatrophia -splenatrophy -splenauxe -splenculus -splendacious -splendaciously -splendaciousness -splendent -splendently -splender -splendescent -splendid -splendidly -splendidness -splendiferous -splendiferously -splendiferousness -splendor -splendorous -splendorproof -splendourproof -splenectama -splenectasis -splenectomist -splenectomize -splenectomy -splenectopia -splenectopy -splenelcosis -splenemia -splenemphraxis -spleneolus -splenepatitis -splenetic -splenetical -splenetically -splenetive -splenial -splenic -splenical -splenicterus -splenification -spleniform -splenitis -splenitive -splenium -splenius -splenization -splenoblast -splenocele -splenoceratosis -splenocleisis -splenocolic -splenocyte -splenodiagnosis -splenodynia -splenography -splenohemia -splenoid -splenolaparotomy -splenology -splenolymph -splenolymphatic -splenolysin -splenolysis -splenoma -splenomalacia -splenomedullary -splenomegalia -splenomegalic -splenomegaly -splenomyelogenous -splenoncus -splenonephric -splenopancreatic -splenoparectama -splenoparectasis -splenopathy -splenopexia -splenopexis -splenopexy -splenophrenic -splenopneumonia -splenoptosia -splenoptosis -splenorrhagia -splenorrhaphy -splenotomy -splenotoxin -splenotyphoid -splenulus -splenunculus -splet -spleuchan -splice -spliceable -splicer -splicing -splinder -spline -splineway -splint -splintage -splinter -splinterd -splinterless -splinternew -splinterproof -splintery -splintwood -splinty -split -splitbeak -splitfinger -splitfruit -splitmouth -splitnew -splitsaw -splittail -splitten -splitter -splitting -splitworm -splodge -splodgy -splore -splosh -splotch -splotchily -splotchiness -splotchy -splother -splunge -splurge -splurgily -splurgy -splurt -spluther -splutter -splutterer -spoach -Spock -spode -spodiosite -spodium -spodogenic -spodogenous -spodomancy -spodomantic -spodumene -spoffish -spoffle -spoffy -spogel -spoil -spoilable -spoilage -spoilation -spoiled -spoiler -spoilfive -spoilful -spoiling -spoilless -spoilment -spoilsman -spoilsmonger -spoilsport -spoilt -Spokan -spoke -spokeless -spoken -spokeshave -spokesman -spokesmanship -spokester -spokeswoman -spokeswomanship -spokewise -spoky -spole -spolia -spoliarium -spoliary -spoliate -spoliation -spoliator -spoliatory -spolium -spondaic -spondaical -spondaize -spondean -spondee -spondiac -Spondiaceae -Spondias -spondulics -spondyl -spondylalgia -spondylarthritis -spondylarthrocace -spondylexarthrosis -spondylic -spondylid -Spondylidae -spondylioid -spondylitic -spondylitis -spondylium -spondylizema -spondylocace -Spondylocladium -spondylodiagnosis -spondylodidymia -spondylodymus -spondyloid -spondylolisthesis -spondylolisthetic -spondylopathy -spondylopyosis -spondyloschisis -spondylosis -spondylosyndesis -spondylotherapeutics -spondylotherapist -spondylotherapy -spondylotomy -spondylous -Spondylus -spondylus -spong -sponge -spongecake -sponged -spongeful -spongeless -spongelet -spongelike -spongeous -spongeproof -sponger -spongewood -Spongiae -spongian -spongicolous -spongiculture -Spongida -spongiferous -spongiform -Spongiidae -Spongilla -spongillid -Spongillidae -spongilline -spongily -spongin -sponginblast -sponginblastic -sponginess -sponging -spongingly -spongioblast -spongioblastoma -spongiocyte -spongiolin -spongiopilin -spongioplasm -spongioplasmic -spongiose -spongiosity -spongiousness -Spongiozoa -spongiozoon -spongoblast -spongoblastic -spongoid -spongology -spongophore -Spongospora -spongy -sponsal -sponsalia -sponsibility -sponsible -sponsing -sponsion -sponsional -sponson -sponsor -sponsorial -sponsorship -sponspeck -spontaneity -spontaneous -spontaneously -spontaneousness -spontoon -spoof -spoofer -spoofery -spoofish -spook -spookdom -spookery -spookily -spookiness -spookish -spookism -spookist -spookological -spookologist -spookology -spooky -spool -spooler -spoolful -spoollike -spoolwood -spoom -spoon -spoonbill -spoondrift -spooner -spoonerism -spooneyism -spooneyly -spooneyness -spoonflower -spoonful -spoonhutch -spoonily -spooniness -spooning -spoonism -spoonless -spoonlike -spoonmaker -spoonmaking -spoonways -spoonwood -spoony -spoonyism -spoor -spoorer -spoot -spor -sporabola -sporaceous -sporades -sporadial -sporadic -sporadical -sporadically -sporadicalness -sporadicity -sporadism -sporadosiderite -sporal -sporange -sporangia -sporangial -sporangidium -sporangiferous -sporangiform -sporangioid -sporangiola -sporangiole -sporangiolum -sporangiophore -sporangiospore -sporangite -Sporangites -sporangium -sporation -spore -spored -sporeformer -sporeforming -sporeling -sporicide -sporid -sporidesm -sporidia -sporidial -sporidiferous -sporidiole -sporidiolum -sporidium -sporiferous -sporification -sporiparity -sporiparous -sporoblast -Sporobolus -sporocarp -sporocarpium -Sporochnaceae -Sporochnus -sporocyst -sporocystic -sporocystid -sporocyte -sporodochia -sporodochium -sporoduct -sporogenesis -sporogenic -sporogenous -sporogeny -sporogone -sporogonial -sporogonic -sporogonium -sporogony -sporoid -sporologist -sporomycosis -sporont -sporophore -sporophoric -sporophorous -sporophydium -sporophyll -sporophyllary -sporophyllum -sporophyte -sporophytic -sporoplasm -sporosac -sporostegium -sporostrote -sporotrichosis -sporotrichotic -Sporotrichum -sporous -Sporozoa -sporozoal -sporozoan -sporozoic -sporozoite -sporozoon -sporran -sport -sportability -sportable -sportance -sporter -sportful -sportfully -sportfulness -sportily -sportiness -sporting -sportingly -sportive -sportively -sportiveness -sportless -sportling -sportly -sports -sportsman -sportsmanlike -sportsmanliness -sportsmanly -sportsmanship -sportsome -sportswear -sportswoman -sportswomanly -sportswomanship -sportula -sportulae -sporty -sporular -sporulate -sporulation -sporule -sporuliferous -sporuloid -sposh -sposhy -spot -spotless -spotlessly -spotlessness -spotlight -spotlighter -spotlike -spotrump -spotsman -spottable -spotted -spottedly -spottedness -spotteldy -spotter -spottily -spottiness -spotting -spottle -spotty -spoucher -spousage -spousal -spousally -spouse -spousehood -spouseless -spousy -spout -spouter -spoutiness -spouting -spoutless -spoutlike -spoutman -spouty -sprachle -sprack -sprackish -sprackle -sprackly -sprackness -sprad -spraddle -sprag -spragger -spraggly -spraich -sprain -spraint -spraints -sprang -sprangle -sprangly -sprank -sprat -spratter -spratty -sprauchle -sprawl -sprawler -sprawling -sprawlingly -sprawly -spray -sprayboard -sprayer -sprayey -sprayful -sprayfully -sprayless -spraylike -sprayproof -spread -spreadation -spreadboard -spreaded -spreader -spreadhead -spreading -spreadingly -spreadingness -spreadover -spready -spreaghery -spreath -spreckle -spree -spreeuw -Sprekelia -spreng -sprent -spret -sprew -sprewl -spridhogue -spried -sprier -spriest -sprig -sprigged -sprigger -spriggy -sprightful -sprightfully -sprightfulness -sprightlily -sprightliness -sprightly -sprighty -spriglet -sprigtail -Spring -spring -springal -springald -springboard -springbok -springbuck -springe -springer -springerle -springfinger -springfish -springful -springhaas -springhalt -springhead -springhouse -springily -springiness -springing -springingly -springle -springless -springlet -springlike -springly -springmaker -springmaking -springtail -springtide -springtime -springtrap -springwood -springworm -springwort -springwurzel -springy -sprink -sprinkle -sprinkled -sprinkleproof -sprinkler -sprinklered -sprinkling -sprint -sprinter -sprit -sprite -spritehood -spritsail -sprittail -sprittie -spritty -sproat -sprocket -sprod -sprogue -sproil -sprong -sprose -sprottle -sprout -sproutage -sprouter -sproutful -sprouting -sproutland -sproutling -sprowsy -spruce -sprucely -spruceness -sprucery -sprucification -sprucify -sprue -spruer -sprug -spruiker -spruit -sprung -sprunny -sprunt -spruntly -spry -spryly -spryness -spud -Spudboy -spudder -spuddle -spuddy -spuffle -spug -spuilyie -spuilzie -spuke -spume -spumescence -spumescent -spumiferous -spumification -spumiform -spumone -spumose -spumous -spumy -spun -spung -spunk -spunkie -spunkily -spunkiness -spunkless -spunky -spunny -spur -spurflower -spurgall -spurge -spurgewort -spuriae -spuriosity -spurious -spuriously -spuriousness -Spurius -spurl -spurless -spurlet -spurlike -spurling -spurmaker -spurmoney -spurn -spurner -spurnpoint -spurnwater -spurproof -spurred -spurrer -spurrial -spurrier -spurrings -spurrite -spurry -spurt -spurter -spurtive -spurtively -spurtle -spurway -spurwing -spurwinged -spurwort -sput -sputa -sputative -sputter -sputterer -sputtering -sputteringly -sputtery -sputum -sputumary -sputumose -sputumous -Spy -spy -spyboat -spydom -spyer -spyfault -spyglass -spyhole -spyism -spyproof -Spyros -spyship -spytower -squab -squabash -squabasher -squabbed -squabbish -squabble -squabbler -squabbling -squabblingly -squabbly -squabby -squacco -squad -squaddy -squadrate -squadrism -squadron -squadrone -squadroned -squail -squailer -squalene -Squali -squalid -Squalida -Squalidae -squalidity -squalidly -squalidness -squaliform -squall -squaller -squallery -squallish -squally -squalm -Squalodon -squalodont -Squalodontidae -squaloid -Squaloidei -squalor -Squalus -squam -squama -squamaceous -squamae -Squamariaceae -Squamata -squamate -squamated -squamatine -squamation -squamatogranulous -squamatotuberculate -squame -squamella -squamellate -squamelliferous -squamelliform -squameous -squamiferous -squamiform -squamify -squamigerous -squamipennate -Squamipennes -squamipinnate -Squamipinnes -squamocellular -squamoepithelial -squamoid -squamomastoid -squamoparietal -squamopetrosal -squamosa -squamosal -squamose -squamosely -squamoseness -squamosis -squamosity -squamosodentated -squamosoimbricated -squamosomaxillary -squamosoparietal -squamosoradiate -squamosotemporal -squamosozygomatic -squamosphenoid -squamosphenoidal -squamotemporal -squamous -squamously -squamousness -squamozygomatic -Squamscot -squamula -squamulae -squamulate -squamulation -squamule -squamuliform -squamulose -squander -squanderer -squanderingly -squandermania -squandermaniac -squantum -squarable -square -squareage -squarecap -squared -squaredly -squareface -squareflipper -squarehead -squarelike -squarely -squareman -squaremouth -squareness -squarer -squaretail -squarewise -squaring -squarish -squarishly -squark -squarrose -squarrosely -squarrous -squarrulose -squarson -squarsonry -squary -squash -squashberry -squasher -squashily -squashiness -squashy -squat -Squatarola -squatarole -Squatina -squatina -squatinid -Squatinidae -squatinoid -Squatinoidei -squatly -squatment -squatmore -squatness -squattage -squatted -squatter -squatterarchy -squatterdom -squatterproof -squattily -squattiness -squatting -squattingly -squattish -squattocracy -squattocratic -squatty -squatwise -squaw -squawberry -squawbush -squawdom -squawfish -squawflower -squawk -squawker -squawkie -squawking -squawkingly -squawky -Squawmish -squawroot -Squawtits -squawweed -Squaxon -squdge -squdgy -squeak -squeaker -squeakery -squeakily -squeakiness -squeaking -squeakingly -squeaklet -squeakproof -squeaky -squeakyish -squeal -squeald -squealer -squealing -squeam -squeamish -squeamishly -squeamishness -squeamous -squeamy -Squedunk -squeege -squeegee -squeezability -squeezable -squeezableness -squeezably -squeeze -squeezeman -squeezer -squeezing -squeezingly -squeezy -squelch -squelcher -squelchily -squelchiness -squelching -squelchingly -squelchingness -squelchy -squench -squencher -squeteague -squib -squibber -squibbery -squibbish -squiblet -squibling -squid -squiddle -squidge -squidgereen -squidgy -squiffed -squiffer -squiffy -squiggle -squiggly -squilgee -squilgeer -Squill -Squilla -squilla -squillagee -squillery -squillian -squillid -Squillidae -squilloid -Squilloidea -squimmidge -squin -squinance -squinancy -squinch -squinny -squinsy -squint -squinted -squinter -squinting -squintingly -squintingness -squintly -squintness -squinty -squirage -squiralty -squire -squirearch -squirearchal -squirearchical -squirearchy -squiredom -squireen -squirehood -squireless -squirelet -squirelike -squireling -squirely -squireocracy -squireship -squiress -squiret -squirewise -squirish -squirism -squirk -squirm -squirminess -squirming -squirmingly -squirmy -squirr -squirrel -squirrelfish -squirrelian -squirreline -squirrelish -squirrellike -squirrelproof -squirreltail -squirt -squirter -squirtiness -squirting -squirtingly -squirtish -squirty -squish -squishy -squit -squitch -squitchy -squitter -squoze -squush -squushy -sraddha -sramana -Sri -sri -Sridhar -Sridharan -Srikanth -Srinivas -Srinivasan -Sriram -Srivatsan -sruti -Ssi -ssu -st -staab -Staatsrat -stab -stabber -stabbing -stabbingly -stabile -stabilify -stabilist -stabilitate -stability -stabilization -stabilizator -stabilize -stabilizer -stable -stableboy -stableful -stablekeeper -stablelike -stableman -stableness -stabler -stablestand -stableward -stablewards -stabling -stablishment -stably -staboy -stabproof -stabulate -stabulation -stabwort -staccato -Stacey -stacher -stachydrin -stachydrine -stachyose -Stachys -stachys -Stachytarpheta -Stachyuraceae -stachyuraceous -Stachyurus -stack -stackage -stackencloud -stacker -stackfreed -stackful -stackgarth -Stackhousia -Stackhousiaceae -stackhousiaceous -stackless -stackman -stackstand -stackyard -stacte -stactometer -Stacy -stadda -staddle -staddling -stade -stadholder -stadholderate -stadholdership -stadhouse -stadia -stadic -stadimeter -stadiometer -stadion -stadium -stafette -staff -staffed -staffelite -staffer -staffless -staffman -stag -stagbush -stage -stageability -stageable -stageableness -stageably -stagecoach -stagecoaching -stagecraft -staged -stagedom -stagehand -stagehouse -stageland -stagelike -stageman -stager -stagery -stagese -stagewise -stageworthy -stagewright -staggard -staggart -staggarth -Stagger -stagger -staggerbush -staggerer -staggering -staggeringly -staggers -staggerweed -staggerwort -staggery -staggie -staggy -staghead -staghorn -staghound -staghunt -staghunter -staghunting -stagiary -stagily -staginess -staging -Stagirite -Stagiritic -staglike -stagmometer -stagnance -stagnancy -stagnant -stagnantly -stagnantness -stagnate -stagnation -stagnatory -stagnature -stagnicolous -stagnize -stagnum -Stagonospora -stagskin -stagworm -stagy -Stahlhelm -Stahlhelmer -Stahlhelmist -Stahlian -Stahlianism -Stahlism -staia -staid -staidly -staidness -stain -stainability -stainable -stainableness -stainably -stainer -stainful -stainierite -staining -stainless -stainlessly -stainlessness -stainproof -staio -stair -stairbeak -stairbuilder -stairbuilding -staircase -staired -stairhead -stairless -stairlike -stairstep -stairway -stairwise -stairwork -stairy -staith -staithman -staiver -stake -stakehead -stakeholder -stakemaster -staker -stakerope -Stakhanovism -Stakhanovite -stalactic -stalactical -stalactiform -stalactital -stalactite -stalactited -stalactitic -stalactitical -stalactitically -stalactitiform -stalactitious -stalagma -stalagmite -stalagmitic -stalagmitical -stalagmitically -stalagmometer -stalagmometric -stalagmometry -stale -stalely -stalemate -staleness -staling -Stalinism -Stalinist -Stalinite -stalk -stalkable -stalked -stalker -stalkily -stalkiness -stalking -stalkingly -stalkless -stalklet -stalklike -stalko -stalky -stall -stallage -stallar -stallboard -stallenger -staller -stallership -stalling -stallion -stallionize -stallman -stallment -stalwart -stalwartism -stalwartize -stalwartly -stalwartness -stam -stambha -stambouline -stamen -stamened -stamin -stamina -staminal -staminate -stamineal -stamineous -staminiferous -staminigerous -staminode -staminodium -staminody -stammel -stammer -stammerer -stammering -stammeringly -stammeringness -stammerwort -stamnos -stamp -stampable -stampage -stampedable -stampede -stampeder -stampedingly -stampee -stamper -stampery -stamphead -Stampian -stamping -stample -stampless -stampman -stampsman -stampweed -Stan -stance -stanch -stanchable -stanchel -stancheled -stancher -stanchion -stanchless -stanchly -stanchness -stand -standage -standard -standardbred -standardizable -standardization -standardize -standardized -standardizer -standardwise -standee -standel -standelwelks -standelwort -stander -standergrass -standerwort -standfast -standing -standish -standoff -standoffish -standoffishness -standout -standpat -standpatism -standpatter -standpipe -standpoint -standpost -standstill -stane -stanechat -stang -Stangeria -stanhope -Stanhopea -stanine -Stanislaw -stanjen -stank -stankie -Stanley -Stanly -stannane -stannary -stannate -stannator -stannel -stanner -stannery -stannic -stannide -stanniferous -stannite -stanno -stannotype -stannous -stannoxyl -stannum -stannyl -stanza -stanzaed -stanzaic -stanzaical -stanzaically -stanze -stap -stapedectomy -stapedial -stapediform -stapediovestibular -stapedius -Stapelia -stapelia -stapes -staphisagria -staphyle -Staphylea -Staphyleaceae -staphyleaceous -staphylectomy -staphyledema -staphylematoma -staphylic -staphyline -staphylinic -staphylinid -Staphylinidae -staphylinideous -Staphylinoidea -Staphylinus -staphylion -staphylitis -staphyloangina -staphylococcal -staphylococci -staphylococcic -Staphylococcus -staphylococcus -staphylodermatitis -staphylodialysis -staphyloedema -staphylohemia -staphylolysin -staphyloma -staphylomatic -staphylomatous -staphylomycosis -staphyloncus -staphyloplastic -staphyloplasty -staphyloptosia -staphyloptosis -staphyloraphic -staphylorrhaphic -staphylorrhaphy -staphyloschisis -staphylosis -staphylotome -staphylotomy -staphylotoxin -staple -stapled -stapler -staplewise -stapling -Star -star -starblind -starbloom -starboard -starbolins -starbright -Starbuck -starch -starchboard -starched -starchedly -starchedness -starcher -starchflower -starchily -starchiness -starchless -starchlike -starchly -starchmaker -starchmaking -starchman -starchness -starchroot -starchworks -starchwort -starchy -starcraft -stardom -stare -staree -starer -starets -starfish -starflower -starfruit -starful -stargaze -stargazer -stargazing -staring -staringly -stark -starken -starkly -starkness -starky -starless -starlessly -starlessness -starlet -starlight -starlighted -starlights -starlike -starling -starlit -starlite -starlitten -starmonger -starn -starnel -starnie -starnose -Staroobriadtsi -starost -starosta -starosty -starred -starrily -starriness -starring -starringly -starry -starshake -starshine -starship -starshoot -starshot -starstone -starstroke -start -starter -startful -startfulness -starthroat -starting -startingly -startish -startle -startler -startling -startlingly -startlingness -startlish -startlishness -startly -startor -starty -starvation -starve -starveacre -starved -starvedly -starveling -starver -starvy -starward -starwise -starworm -starwort -stary -stases -stash -stashie -stasidion -stasimetric -stasimon -stasimorphy -stasiphobia -stasis -stassfurtite -statable -statal -statant -statcoulomb -State -state -statecraft -stated -statedly -stateful -statefully -statefulness -statehood -Statehouse -stateless -statelet -statelich -statelily -stateliness -stately -statement -statemonger -statequake -stater -stateroom -statesboy -stateside -statesider -statesman -statesmanese -statesmanlike -statesmanly -statesmanship -statesmonger -stateswoman -stateway -statfarad -stathmoi -stathmos -static -statical -statically -Statice -staticproof -statics -station -stational -stationarily -stationariness -stationary -stationer -stationery -stationman -stationmaster -statiscope -statism -statist -statistic -statistical -statistically -statistician -statisticize -statistics -statistology -stative -statoblast -statocracy -statocyst -statolatry -statolith -statolithic -statometer -stator -statoreceptor -statorhab -statoscope -statospore -statuarism -statuarist -statuary -statue -statuecraft -statued -statueless -statuelike -statuesque -statuesquely -statuesqueness -statuette -stature -statured -status -statutable -statutableness -statutably -statutary -statute -statutorily -statutory -statvolt -staucher -stauk -staumer -staun -staunch -staunchable -staunchly -staunchness -staup -stauracin -stauraxonia -stauraxonial -staurion -staurolatry -staurolite -staurolitic -staurology -Stauromedusae -stauromedusan -stauropegial -stauropegion -stauroscope -stauroscopic -stauroscopically -staurotide -stauter -stave -staveable -staveless -staver -stavers -staverwort -stavesacre -stavewise -stavewood -staving -stavrite -staw -stawn -staxis -stay -stayable -stayed -stayer -staylace -stayless -staylessness -staymaker -staymaking -staynil -stays -staysail -stayship -stchi -stead -steadfast -steadfastly -steadfastness -steadier -steadily -steadiment -steadiness -steading -steadman -steady -steadying -steadyingly -steadyish -steak -steal -stealability -stealable -stealage -stealed -stealer -stealing -stealingly -stealth -stealthful -stealthfully -stealthily -stealthiness -stealthless -stealthlike -stealthwise -stealthy -stealy -steam -steamboat -steamboating -steamboatman -steamcar -steamer -steamerful -steamerless -steamerload -steamily -steaminess -steaming -steamless -steamlike -steampipe -steamproof -steamship -steamtight -steamtightness -steamy -stean -steaning -steapsin -stearate -stearic -steariform -stearin -stearolactone -stearone -stearoptene -stearrhea -stearyl -steatin -steatite -steatitic -steatocele -steatogenous -steatolysis -steatolytic -steatoma -steatomatous -steatopathic -steatopyga -steatopygia -steatopygic -steatopygous -Steatornis -Steatornithes -Steatornithidae -steatorrhea -steatosis -stech -stechados -steckling -steddle -Stedman -steed -steedless -steedlike -steek -steekkan -steekkannen -steel -Steelboy -steeler -steelhead -steelhearted -steelification -steelify -steeliness -steeling -steelless -steellike -steelmaker -steelmaking -steelproof -steelware -steelwork -steelworker -steelworks -steely -steelyard -Steen -steen -steenboc -steenbock -steenbok -Steenie -steenkirk -steenstrupine -steenth -steep -steepdown -steepen -steeper -steepgrass -steepish -steeple -steeplebush -steeplechase -steeplechaser -steeplechasing -steepled -steepleless -steeplelike -steepletop -steeply -steepness -steepweed -steepwort -steepy -steer -steerability -steerable -steerage -steerageway -steerer -steering -steeringly -steerling -steerman -steermanship -steersman -steerswoman -steeve -steevely -steever -steeving -Stefan -steg -steganogram -steganographical -steganographist -steganography -Steganophthalmata -steganophthalmate -steganophthalmatous -Steganophthalmia -steganopod -steganopodan -Steganopodes -steganopodous -stegnosis -stegnotic -stegocarpous -Stegocephalia -stegocephalian -stegocephalous -Stegodon -stegodont -stegodontine -Stegomus -Stegomyia -stegosaur -Stegosauria -stegosaurian -stegosauroid -Stegosaurus -steid -steigh -Stein -stein -Steinberger -steinbok -Steinerian -steinful -steinkirk -Steironema -stekan -stela -stelae -stelai -stelar -stele -stell -Stella -stella -stellar -Stellaria -stellary -stellate -stellated -stellately -stellature -stelleridean -stellerine -stelliferous -stellification -stelliform -stellify -stelling -stellionate -stelliscript -Stellite -stellite -stellular -stellularly -stellulate -stelography -stem -stema -stemhead -stemless -stemlet -stemlike -stemma -stemmata -stemmatiform -stemmatous -stemmed -stemmer -stemmery -stemming -stemmy -Stemona -Stemonaceae -stemonaceous -stemple -stempost -stemson -stemwards -stemware -sten -stenar -stench -stenchel -stenchful -stenching -stenchion -stenchy -stencil -stenciler -stencilmaker -stencilmaking -stend -steng -stengah -stenion -steno -stenobathic -stenobenthic -stenobragmatic -stenobregma -stenocardia -stenocardiac -Stenocarpus -stenocephalia -stenocephalic -stenocephalous -stenocephaly -stenochoria -stenochrome -stenochromy -stenocoriasis -stenocranial -stenocrotaphia -Stenofiber -stenog -stenogastric -stenogastry -Stenoglossa -stenograph -stenographer -stenographic -stenographical -stenographically -stenographist -stenography -stenohaline -stenometer -stenopaic -Stenopelmatidae -stenopetalous -stenophile -Stenophragma -stenophyllous -stenorhyncous -stenosed -stenosepalous -stenosis -stenosphere -stenostomatous -stenostomia -Stenotaphrum -stenotelegraphy -stenothermal -stenothorax -stenotic -stenotype -stenotypic -stenotypist -stenotypy -stent -stenter -stenterer -stenton -Stentor -stentorian -stentorianly -stentorine -stentorious -stentoriously -stentoriousness -stentoronic -stentorophonic -stentrel -step -stepaunt -stepbairn -stepbrother -stepbrotherhood -stepchild -stepdame -stepdaughter -stepfather -stepfatherhood -stepfatherly -stepgrandchild -stepgrandfather -stepgrandmother -stepgrandson -Stephan -Stephana -stephane -stephanial -Stephanian -stephanic -Stephanie -stephanion -stephanite -Stephanoceros -Stephanokontae -stephanome -stephanos -Stephanotis -stephanotis -Stephanurus -Stephe -Stephen -stepladder -stepless -steplike -stepminnie -stepmother -stepmotherhood -stepmotherless -stepmotherliness -stepmotherly -stepnephew -stepniece -stepparent -steppe -stepped -steppeland -stepper -stepping -steppingstone -steprelation -steprelationship -stepsire -stepsister -stepson -stepstone -stept -stepuncle -stepway -stepwise -steradian -stercobilin -stercolin -stercophagic -stercophagous -stercoraceous -stercoral -Stercoranism -Stercoranist -Stercorariidae -Stercorariinae -stercorarious -Stercorarius -stercorary -stercorate -stercoration -stercorean -stercoremia -stercoreous -Stercorianism -stercoricolous -Stercorist -stercorite -stercorol -stercorous -stercovorous -Sterculia -Sterculiaceae -sterculiaceous -sterculiad -stere -stereagnosis -Sterelmintha -sterelminthic -sterelminthous -stereo -stereobate -stereobatic -stereoblastula -stereocamera -stereocampimeter -stereochemic -stereochemical -stereochemically -stereochemistry -stereochromatic -stereochromatically -stereochrome -stereochromic -stereochromically -stereochromy -stereocomparagraph -stereocomparator -stereoelectric -stereofluoroscopic -stereofluoroscopy -stereogastrula -stereognosis -stereognostic -stereogoniometer -stereogram -stereograph -stereographer -stereographic -stereographical -stereographically -stereography -stereoisomer -stereoisomeric -stereoisomerical -stereoisomeride -stereoisomerism -stereomatrix -stereome -stereomer -stereomeric -stereomerical -stereomerism -stereometer -stereometric -stereometrical -stereometrically -stereometry -stereomicrometer -stereomonoscope -stereoneural -stereophantascope -stereophonic -stereophony -stereophotogrammetry -stereophotograph -stereophotographic -stereophotography -stereophotomicrograph -stereophotomicrography -stereophysics -stereopicture -stereoplanigraph -stereoplanula -stereoplasm -stereoplasma -stereoplasmic -stereopsis -stereoptician -stereopticon -stereoradiograph -stereoradiography -Stereornithes -stereornithic -stereoroentgenogram -stereoroentgenography -stereoscope -stereoscopic -stereoscopically -stereoscopism -stereoscopist -stereoscopy -Stereospondyli -stereospondylous -stereostatic -stereostatics -stereotactic -stereotactically -stereotaxis -stereotelemeter -stereotelescope -stereotomic -stereotomical -stereotomist -stereotomy -stereotropic -stereotropism -stereotypable -stereotype -stereotyped -stereotyper -stereotypery -stereotypic -stereotypical -stereotyping -stereotypist -stereotypographer -stereotypography -stereotypy -Stereum -sterhydraulic -steri -steric -sterically -sterics -steride -sterigma -sterigmata -sterigmatic -sterile -sterilely -sterileness -sterilisable -sterility -sterilizability -sterilizable -sterilization -sterilize -sterilizer -sterin -sterk -sterlet -Sterling -sterling -sterlingly -sterlingness -Stern -stern -Sterna -sterna -sternad -sternage -sternal -sternalis -sternbergite -sterncastle -sterneber -sternebra -sternebrae -sternebral -sterned -sternforemost -Sterninae -sternite -sternitic -sternly -sternman -sternmost -sternness -Sterno -sternoclavicular -sternocleidomastoid -sternoclidomastoid -sternocoracoid -sternocostal -sternofacial -sternofacialis -sternoglossal -sternohumeral -sternohyoid -sternohyoidean -sternomancy -sternomastoid -sternomaxillary -sternonuchal -sternopericardiac -sternopericardial -sternoscapular -sternothere -Sternotherus -sternothyroid -sternotracheal -sternotribe -sternovertebral -sternoxiphoid -sternpost -sternson -sternum -sternutation -sternutative -sternutator -sternutatory -sternward -sternway -sternways -sternworks -stero -steroid -sterol -Sterope -sterrinck -stert -stertor -stertorious -stertoriously -stertoriousness -stertorous -stertorously -stertorousness -sterve -Stesichorean -stet -stetch -stetharteritis -stethogoniometer -stethograph -stethographic -stethokyrtograph -stethometer -stethometric -stethometry -stethoparalysis -stethophone -stethophonometer -stethoscope -stethoscopic -stethoscopical -stethoscopically -stethoscopist -stethoscopy -stethospasm -Stevan -Steve -stevedorage -stevedore -stevedoring -stevel -Steven -steven -Stevensonian -Stevensoniana -Stevia -stevia -stew -stewable -steward -stewardess -stewardly -stewardry -stewardship -Stewart -Stewartia -stewartry -stewarty -stewed -stewpan -stewpond -stewpot -stewy -stey -sthenia -sthenic -sthenochire -stib -stibbler -stibblerig -stibethyl -stibial -stibialism -stibiate -stibiated -stibic -stibiconite -stibine -stibious -stibium -stibnite -stibonium -sticcado -stich -sticharion -sticheron -stichic -stichically -stichid -stichidium -stichomancy -stichometric -stichometrical -stichometrically -stichometry -stichomythic -stichomythy -stick -stickability -stickable -stickadore -stickadove -stickage -stickball -sticked -sticker -stickers -stickfast -stickful -stickily -stickiness -sticking -stickit -stickle -stickleaf -stickleback -stickler -stickless -sticklike -stickling -stickly -stickpin -sticks -stickseed -sticksmanship -sticktail -sticktight -stickum -stickwater -stickweed -stickwork -sticky -Sticta -Stictaceae -Stictidaceae -stictiform -Stictis -stid -stiddy -stife -stiff -stiffen -stiffener -stiffening -stiffhearted -stiffish -stiffleg -stifflike -stiffly -stiffneck -stiffness -stiffrump -stifftail -stifle -stifledly -stifler -stifling -stiflingly -stigma -stigmai -stigmal -stigmaria -stigmarian -stigmarioid -stigmasterol -stigmata -stigmatal -stigmatic -stigmatical -stigmatically -stigmaticalness -stigmatiferous -stigmatiform -stigmatism -stigmatist -stigmatization -stigmatize -stigmatizer -stigmatoid -stigmatose -stigme -stigmeology -stigmonose -stigonomancy -Stikine -Stilbaceae -Stilbella -stilbene -stilbestrol -stilbite -stilboestrol -Stilbum -stile -stileman -stilet -stiletto -stilettolike -still -stillage -stillatitious -stillatory -stillbirth -stillborn -stiller -stillhouse -stillicide -stillicidium -stilliform -stilling -Stillingia -stillion -stillish -stillman -stillness -stillroom -stillstand -Stillwater -stilly -Stilophora -Stilophoraceae -stilpnomelane -stilpnosiderite -stilt -stiltbird -stilted -stilter -stiltify -stiltiness -stiltish -stiltlike -Stilton -stilty -stim -stime -stimpart -stimpert -stimulability -stimulable -stimulance -stimulancy -stimulant -stimulate -stimulatingly -stimulation -stimulative -stimulator -stimulatory -stimulatress -stimulatrix -stimuli -stimulogenous -stimulus -stimy -stine -sting -stingaree -stingareeing -stingbull -stinge -stinger -stingfish -stingily -stinginess -stinging -stingingly -stingingness -stingless -stingo -stingproof -stingray -stingtail -stingy -stink -stinkard -stinkardly -stinkball -stinkberry -stinkbird -stinkbug -stinkbush -stinkdamp -stinker -stinkhorn -stinking -stinkingly -stinkingness -stinkpot -stinkstone -stinkweed -stinkwood -stinkwort -stint -stinted -stintedly -stintedness -stinter -stintingly -stintless -stinty -stion -stionic -Stipa -stipe -stiped -stipel -stipellate -stipend -stipendial -stipendiarian -stipendiary -stipendiate -stipendium -stipendless -stipes -stipiform -stipitate -stipitiform -stipiture -Stipiturus -stippen -stipple -stippled -stippler -stippling -stipply -stipula -stipulable -stipulaceous -stipulae -stipular -stipulary -stipulate -stipulation -stipulator -stipulatory -stipule -stipuled -stipuliferous -stipuliform -stir -stirabout -stirk -stirless -stirlessly -stirlessness -stirp -stirpicultural -stirpiculture -stirpiculturist -stirps -stirra -stirrable -stirrage -stirrer -stirring -stirringly -stirrup -stirrupless -stirruplike -stirrupwise -stitch -stitchbird -stitchdown -stitcher -stitchery -stitching -stitchlike -stitchwhile -stitchwork -stitchwort -stite -stith -stithy -stive -stiver -stivy -Stizolobium -stoa -stoach -stoat -stoater -stob -stocah -stoccado -stoccata -stochastic -stochastical -stochastically -stock -stockade -stockannet -stockbow -stockbreeder -stockbreeding -Stockbridge -stockbroker -stockbrokerage -stockbroking -stockcar -stocker -stockfather -stockfish -stockholder -stockholding -stockhouse -stockily -stockiness -stockinet -stocking -stockinger -stockingless -stockish -stockishly -stockishness -stockjobber -stockjobbery -stockjobbing -stockjudging -stockkeeper -stockkeeping -stockless -stocklike -stockmaker -stockmaking -stockman -stockowner -stockpile -stockpot -stockproof -stockrider -stockriding -stocks -stockstone -stocktaker -stocktaking -Stockton -stockwork -stockwright -stocky -stockyard -stod -stodge -stodger -stodgery -stodgily -stodginess -stodgy -stoechas -stoep -stof -stoff -stog -stoga -stogie -stogy -Stoic -stoic -stoical -stoically -stoicalness -stoicharion -stoichiological -stoichiology -stoichiometric -stoichiometrical -stoichiometrically -stoichiometry -Stoicism -stoicism -Stokavci -Stokavian -Stokavski -stoke -stokehold -stokehole -stoker -stokerless -Stokesia -stokesite -stola -stolae -stole -stoled -stolelike -stolen -stolenly -stolenness -stolenwise -stolewise -stolid -stolidity -stolidly -stolidness -stolist -stolkjaerre -stollen -stolon -stolonate -stoloniferous -stoloniferously -stolonlike -stolzite -stoma -stomacace -stomach -stomachable -stomachal -stomacher -stomachful -stomachfully -stomachfulness -stomachic -stomachically -stomachicness -stomaching -stomachless -stomachlessness -stomachy -stomapod -Stomapoda -stomapodiform -stomapodous -stomata -stomatal -stomatalgia -stomate -stomatic -stomatiferous -stomatitic -stomatitis -stomatocace -Stomatoda -stomatodaeal -stomatodaeum -stomatode -stomatodeum -stomatodynia -stomatogastric -stomatograph -stomatography -stomatolalia -stomatologic -stomatological -stomatologist -stomatology -stomatomalacia -stomatomenia -stomatomy -stomatomycosis -stomatonecrosis -stomatopathy -Stomatophora -stomatophorous -stomatoplastic -stomatoplasty -stomatopod -Stomatopoda -stomatopodous -stomatorrhagia -stomatoscope -stomatoscopy -stomatose -stomatosepsis -stomatotomy -stomatotyphus -stomatous -stomenorrhagia -stomium -stomodaea -stomodaeal -stomodaeum -Stomoisia -stomoxys -stomp -stomper -stonable -stond -Stone -stone -stoneable -stonebird -stonebiter -stoneboat -stonebow -stonebrash -stonebreak -stonebrood -stonecast -stonechat -stonecraft -stonecrop -stonecutter -stoned -stonedamp -stonefish -stonegale -stonegall -stonehand -stonehatch -stonehead -stonehearted -Stonehenge -stonelayer -stonelaying -stoneless -stonelessness -stonelike -stoneman -stonemason -stonemasonry -stonen -stonepecker -stoner -stoneroot -stoneseed -stoneshot -stonesmatch -stonesmich -stonesmitch -stonesmith -stonewall -stonewaller -stonewally -stoneware -stoneweed -stonewise -stonewood -stonework -stoneworker -stonewort -stoneyard -stong -stonied -stonifiable -stonify -stonily -stoniness -stoning -stonish -stonishment -stonker -stony -stonyhearted -stonyheartedly -stonyheartedness -stood -stooded -stooden -stoof -stooge -stook -stooker -stookie -stool -stoolball -stoollike -stoon -stoond -stoop -stooper -stoopgallant -stooping -stoopingly -stoory -stoot -stoothing -stop -stopa -stopback -stopblock -stopboard -stopcock -stope -stoper -stopgap -stophound -stoping -stopless -stoplessness -stopover -stoppability -stoppable -stoppableness -stoppably -stoppage -stopped -stopper -stopperless -stoppeur -stopping -stoppit -stopple -stopwater -stopwork -storable -storage -storax -store -storeen -storehouse -storehouseman -storekeep -storekeeper -storekeeping -storeman -storer -storeroom -storeship -storesman -storge -storiate -storiation -storied -storier -storiette -storify -storiological -storiologist -storiology -stork -storken -storkish -storklike -storkling -storkwise -storm -stormable -Stormberg -stormbird -stormbound -stormcock -stormer -stormful -stormfully -stormfulness -stormily -storminess -storming -stormingly -stormish -stormless -stormlessness -stormlike -stormproof -stormward -stormwind -stormwise -stormy -Storting -story -storybook -storyless -storymaker -storymonger -storyteller -storytelling -storywise -storywork -stosh -stoss -stosston -stot -stotinka -stotter -stotterel -stoun -stound -stoundmeal -stoup -stoupful -stour -stouring -stourliness -stourness -stoury -stoush -stout -stouten -stouth -stouthearted -stoutheartedly -stoutheartedness -stoutish -stoutly -stoutness -stoutwood -stouty -stove -stovebrush -stoveful -stovehouse -stoveless -stovemaker -stovemaking -stoveman -stoven -stovepipe -stover -stovewood -stow -stowable -stowage -stowaway -stowbord -stowbordman -stowce -stowdown -stower -stowing -stownlins -stowwood -stra -strabism -strabismal -strabismally -strabismic -strabismical -strabismometer -strabismometry -strabismus -strabometer -strabometry -strabotome -strabotomy -strack -strackling -stract -Strad -strad -stradametrical -straddle -straddleback -straddlebug -straddler -straddleways -straddlewise -straddling -straddlingly -strade -stradine -stradiot -Stradivari -Stradivarius -stradl -stradld -stradlings -strae -strafe -strafer -Straffordian -strag -straggle -straggler -straggling -stragglingly -straggly -stragular -stragulum -straight -straightabout -straightaway -straightedge -straighten -straightener -straightforward -straightforwardly -straightforwardness -straightforwards -straighthead -straightish -straightly -straightness -straighttail -straightup -straightwards -straightway -straightways -straightwise -straik -strain -strainable -strainableness -strainably -strained -strainedly -strainedness -strainer -strainerman -straining -strainingly -strainless -strainlessly -strainproof -strainslip -straint -strait -straiten -straitlacedness -straitlacing -straitly -straitness -straitsman -straitwork -Straka -strake -straked -straky -stram -stramash -stramazon -stramineous -stramineously -strammel -strammer -stramonium -stramony -stramp -strand -strandage -strander -stranding -strandless -strandward -strang -strange -strangeling -strangely -strangeness -stranger -strangerdom -strangerhood -strangerlike -strangership -strangerwise -strangle -strangleable -stranglement -strangler -strangles -strangletare -strangleweed -strangling -stranglingly -strangulable -strangulate -strangulation -strangulative -strangulatory -strangullion -strangurious -strangury -stranner -strany -strap -straphang -straphanger -straphead -strapless -straplike -strappable -strappado -strappan -strapped -strapper -strapping -strapple -strapwork -strapwort -strass -strata -stratagem -stratagematic -stratagematical -stratagematically -stratagematist -stratagemical -stratagemically -stratal -stratameter -stratege -strategetic -strategetics -strategi -strategian -strategic -strategical -strategically -strategics -strategist -strategize -strategos -strategy -Stratfordian -strath -strathspey -strati -stratic -straticulate -straticulation -stratification -stratified -stratiform -stratify -stratigrapher -stratigraphic -stratigraphical -stratigraphically -stratigraphist -stratigraphy -Stratiomyiidae -Stratiotes -stratlin -stratochamber -stratocracy -stratocrat -stratocratic -stratographic -stratographical -stratographically -stratography -stratonic -Stratonical -stratopedarch -stratoplane -stratose -stratosphere -stratospheric -stratospherical -stratotrainer -stratous -stratum -stratus -straucht -strauchten -stravage -strave -straw -strawberry -strawberrylike -strawbill -strawboard -strawbreadth -strawen -strawer -strawflower -strawfork -strawless -strawlike -strawman -strawmote -strawsmall -strawsmear -strawstack -strawstacker -strawwalker -strawwork -strawworm -strawy -strawyard -stray -strayaway -strayer -strayling -stre -streahte -streak -streaked -streakedly -streakedness -streaker -streakily -streakiness -streaklike -streakwise -streaky -stream -streamer -streamful -streamhead -streaminess -streaming -streamingly -streamless -streamlet -streamlike -streamline -streamlined -streamliner -streamling -streamside -streamward -streamway -streamwort -streamy -streck -streckly -stree -streek -streel -streeler -streen -streep -street -streetage -streetcar -streetful -streetless -streetlet -streetlike -streets -streetside -streetwalker -streetwalking -streetward -streetway -streetwise -streite -streke -Strelitz -Strelitzi -strelitzi -Strelitzia -Streltzi -streltzi -stremma -stremmatograph -streng -strengite -strength -strengthen -strengthener -strengthening -strengtheningly -strengthful -strengthfulness -strengthily -strengthless -strengthlessly -strengthlessness -strengthy -strent -strenth -strenuity -strenuosity -strenuous -strenuously -strenuousness -strepen -strepent -strepera -streperous -strephonade -strephosymbolia -strepitant -strepitantly -strepitation -strepitous -strepor -Strepsiceros -strepsiceros -strepsinema -Strepsiptera -strepsipteral -strepsipteran -strepsipteron -strepsipterous -strepsis -strepsitene -streptaster -streptobacilli -streptobacillus -Streptocarpus -streptococcal -streptococci -streptococcic -Streptococcus -streptococcus -streptolysin -Streptomyces -streptomycin -Streptoneura -streptoneural -streptoneurous -streptosepticemia -streptothricial -streptothricin -streptothricosis -Streptothrix -streptotrichal -streptotrichosis -stress -stresser -stressful -stressfully -stressless -stresslessness -stret -stretch -stretchable -stretchberry -stretcher -stretcherman -stretchiness -stretchneck -stretchproof -stretchy -stretman -strette -stretti -stretto -strew -strewage -strewer -strewment -strewn -strey -streyne -stria -striae -strial -Striaria -Striariaceae -striatal -striate -striated -striation -striatum -striature -strich -striche -strick -stricken -strickenly -strickenness -stricker -strickle -strickler -strickless -strict -striction -strictish -strictly -strictness -stricture -strictured -strid -stridden -striddle -stride -strideleg -stridelegs -stridence -stridency -strident -stridently -strider -strideways -stridhan -stridhana -stridhanum -stridingly -stridling -stridlins -stridor -stridulant -stridulate -stridulation -stridulator -stridulatory -stridulent -stridulous -stridulously -stridulousness -strife -strifeful -strifeless -strifemaker -strifemaking -strifemonger -strifeproof -striffen -strig -Striga -striga -strigae -strigal -strigate -Striges -striggle -stright -Strigidae -Strigiformes -strigil -strigilate -strigilation -strigilator -strigiles -strigilis -strigillose -strigilous -Striginae -strigine -strigose -strigous -strigovite -Strigula -Strigulaceae -strigulose -strike -strikeboat -strikebreaker -strikebreaking -strikeless -striker -striking -strikingly -strikingness -strind -string -stringboard -stringcourse -stringed -stringency -stringene -stringent -stringently -stringentness -stringer -stringful -stringhalt -stringhalted -stringhaltedness -stringiness -stringing -stringless -stringlike -stringmaker -stringmaking -stringman -stringpiece -stringsman -stringways -stringwood -stringy -stringybark -strinkle -striola -striolae -striolate -striolated -striolet -strip -stripe -striped -stripeless -striper -striplet -stripling -strippage -stripped -stripper -stripping -strippit -strippler -stript -stripy -strit -strive -strived -striven -striver -striving -strivingly -Strix -strix -stroam -strobic -strobila -strobilaceous -strobilae -strobilate -strobilation -strobile -strobili -strobiliferous -strobiliform -strobiline -strobilization -strobiloid -Strobilomyces -Strobilophyta -strobilus -stroboscope -stroboscopic -stroboscopical -stroboscopy -strobotron -strockle -stroddle -strode -stroil -stroke -stroker -strokesman -stroking -stroky -strold -stroll -strolld -stroller -strom -stroma -stromal -stromata -Stromateidae -stromateoid -stromatic -stromatiform -stromatology -Stromatopora -Stromatoporidae -stromatoporoid -Stromatoporoidea -stromatous -stromb -Strombidae -strombiform -strombite -stromboid -strombolian -strombuliferous -strombuliform -Strombus -strome -stromeyerite -stromming -strone -strong -strongback -strongbark -strongbox -strongbrained -strongfully -stronghand -stronghead -strongheadedly -strongheadedness -stronghearted -stronghold -strongish -stronglike -strongly -strongness -strongylate -strongyle -strongyliasis -strongylid -Strongylidae -strongylidosis -strongyloid -Strongyloides -strongyloidosis -strongylon -Strongyloplasmata -Strongylosis -strongylosis -Strongylus -strontia -strontian -strontianiferous -strontianite -strontic -strontion -strontitic -strontium -strook -strooken -stroot -strop -strophaic -strophanhin -Strophanthus -Stropharia -strophe -strophic -strophical -strophically -strophiolate -strophiolated -strophiole -strophoid -Strophomena -Strophomenacea -strophomenid -Strophomenidae -strophomenoid -strophosis -strophotaxis -strophulus -stropper -stroppings -stroth -stroud -strouding -strounge -stroup -strouthiocamel -strouthiocamelian -strouthocamelian -strove -strow -strowd -strown -stroy -stroyer -stroygood -strub -strubbly -struck -strucken -structural -structuralism -structuralist -structuralization -structuralize -structurally -structuration -structure -structured -structureless -structurely -structurist -strudel -strue -struggle -struggler -struggling -strugglingly -Struldbrug -Struldbruggian -Struldbruggism -strum -struma -strumae -strumatic -strumaticness -strumectomy -Strumella -strumiferous -strumiform -strumiprivic -strumiprivous -strumitis -strummer -strumose -strumous -strumousness -strumpet -strumpetlike -strumpetry -strumstrum -strumulose -strung -strunt -strut -struth -struthian -struthiform -Struthio -struthioid -Struthiomimus -Struthiones -Struthionidae -struthioniform -Struthioniformes -Struthiopteris -struthious -struthonine -strutter -strutting -struttingly -struv -struvite -strych -strychnia -strychnic -strychnin -strychnine -strychninic -strychninism -strychninization -strychninize -strychnize -strychnol -Strychnos -Strymon -Stu -Stuart -Stuartia -stub -stubachite -stubb -stubbed -stubbedness -stubber -stubbiness -stubble -stubbleberry -stubbled -stubbleward -stubbly -stubborn -stubbornhearted -stubbornly -stubbornness -stubboy -stubby -stubchen -stuber -stuboy -stubrunner -stucco -stuccoer -stuccowork -stuccoworker -stuccoyer -stuck -stuckling -stucturelessness -stud -studbook -studder -studdie -studding -studdle -stude -student -studenthood -studentless -studentlike -studentry -studentship -studerite -studfish -studflower -studhorse -studia -studiable -studied -studiedly -studiedness -studier -studio -studious -studiously -studiousness -Studite -Studium -studium -studwork -study -stue -stuff -stuffed -stuffender -stuffer -stuffgownsman -stuffily -stuffiness -stuffing -stuffy -stug -stuggy -stuiver -stull -stuller -stulm -stultification -stultifier -stultify -stultiloquence -stultiloquently -stultiloquious -stultioquy -stultloquent -stum -stumble -stumbler -stumbling -stumblingly -stumbly -stumer -stummer -stummy -stump -stumpage -stumper -stumpily -stumpiness -stumpish -stumpless -stumplike -stumpling -stumpnose -stumpwise -stumpy -stun -Stundism -Stundist -stung -stunk -stunkard -stunner -stunning -stunningly -stunpoll -stunsail -stunsle -stunt -stunted -stuntedly -stuntedness -stunter -stuntiness -stuntness -stunty -stupa -stupe -stupefacient -stupefaction -stupefactive -stupefactiveness -stupefied -stupefiedness -stupefier -stupefy -stupend -stupendly -stupendous -stupendously -stupendousness -stupent -stupeous -stupex -stupid -stupidhead -stupidish -stupidity -stupidly -stupidness -stupor -stuporific -stuporose -stuporous -stupose -stupp -stuprate -stupration -stuprum -stupulose -sturdied -sturdily -sturdiness -sturdy -sturdyhearted -sturgeon -sturine -Sturiones -sturionine -sturk -Sturmian -Sturnella -Sturnidae -sturniform -Sturninae -sturnine -sturnoid -Sturnus -sturt -sturtan -sturtin -sturtion -sturtite -stuss -stut -stutter -stutterer -stuttering -stutteringly -sty -styan -styca -styceric -stycerin -stycerinol -stychomythia -styful -styfziekte -Stygial -Stygian -stylar -Stylaster -Stylasteridae -stylate -style -stylebook -styledom -styleless -stylelessness -stylelike -styler -stylet -stylewort -Stylidiaceae -stylidiaceous -Stylidium -styliferous -styliform -styline -styling -stylish -stylishly -stylishness -stylist -stylistic -stylistical -stylistically -stylistics -stylite -stylitic -stylitism -stylization -stylize -stylizer -stylo -styloauricularis -stylobate -Stylochus -styloglossal -styloglossus -stylogonidium -stylograph -stylographic -stylographical -stylographically -stylography -stylohyal -stylohyoid -stylohyoidean -stylohyoideus -styloid -stylolite -stylolitic -stylomandibular -stylomastoid -stylomaxillary -stylometer -Stylommatophora -stylommatophorous -stylomyloid -Stylonurus -Stylonychia -stylopharyngeal -stylopharyngeus -stylopid -Stylopidae -stylopization -stylopized -stylopod -stylopodium -Stylops -stylops -Stylosanthes -stylospore -stylosporous -stylostegium -stylotypite -stylus -stymie -Stymphalian -Stymphalid -Stymphalides -Styphelia -styphnate -styphnic -stypsis -styptic -styptical -stypticalness -stypticity -stypticness -Styracaceae -styracaceous -styracin -Styrax -styrax -styrene -Styrian -styrogallol -styrol -styrolene -styrone -styryl -styrylic -stythe -styward -Styx -Styxian -suability -suable -suably -suade -Suaeda -suaharo -Sualocin -Suanitian -suant -suantly -suasible -suasion -suasionist -suasive -suasively -suasiveness -suasory -suavastika -suave -suavely -suaveness -suaveolent -suavify -suaviloquence -suaviloquent -suavity -sub -subabbot -subabdominal -subability -subabsolute -subacademic -subaccount -subacetate -subacid -subacidity -subacidly -subacidness -subacidulous -subacrid -subacrodrome -subacromial -subact -subacuminate -subacute -subacutely -subadditive -subadjacent -subadjutor -subadministrate -subadministration -subadministrator -subadult -subaduncate -subaerate -subaeration -subaerial -subaerially -subaetheric -subaffluent -subage -subagency -subagent -subaggregate -subah -subahdar -subahdary -subahship -subaid -Subakhmimic -subalary -subalate -subalgebra -subalkaline -suballiance -subalmoner -subalpine -subaltern -subalternant -subalternate -subalternately -subalternating -subalternation -subalternity -subanal -subandean -subangled -subangular -subangulate -subangulated -subanniversary -subantarctic -subantichrist -subantique -Subanun -subapical -subaponeurotic -subapostolic -subapparent -subappearance -subappressed -subapprobation -subapterous -subaquatic -subaquean -subaqueous -subarachnoid -subarachnoidal -subarachnoidean -subarboraceous -subarboreal -subarborescent -subarch -subarchesporial -subarchitect -subarctic -subarcuate -subarcuated -subarcuation -subarea -subareolar -subareolet -Subarian -subarmor -subarouse -subarrhation -subartesian -subarticle -subarytenoid -subascending -subassemblage -subassembly -subassociation -subastragalar -subastragaloid -subastral -subastringent -subatom -subatomic -subattenuate -subattenuated -subattorney -subaud -subaudible -subaudition -subauditionist -subauditor -subauditur -subaural -subauricular -subautomatic -subaverage -subaxillar -subaxillary -subbailie -subbailiff -subbailiwick -subballast -subband -subbank -subbasal -subbasaltic -subbase -subbasement -subbass -subbeadle -subbeau -subbias -subbifid -subbing -subbituminous -subbookkeeper -subboreal -subbourdon -subbrachycephalic -subbrachycephaly -subbrachyskelic -subbranch -subbranched -subbranchial -subbreed -subbrigade -subbrigadier -subbroker -subbromid -subbromide -subbronchial -subbureau -subcaecal -subcalcareous -subcalcarine -subcaliber -subcallosal -subcampanulate -subcancellate -subcandid -subcantor -subcapsular -subcaptain -subcaption -subcarbide -subcarbonate -Subcarboniferous -subcarbureted -subcarburetted -subcardinal -subcarinate -subcartilaginous -subcase -subcash -subcashier -subcasino -subcast -subcaste -subcategory -subcaudal -subcaudate -subcaulescent -subcause -subcavate -subcavity -subcelestial -subcell -subcellar -subcenter -subcentral -subcentrally -subchairman -subchamberer -subchancel -subchanter -subchapter -subchaser -subchela -subchelate -subcheliform -subchief -subchloride -subchondral -subchordal -subchorioid -subchorioidal -subchorionic -subchoroid -subchoroidal -subcinctorium -subcineritious -subcingulum -subcircuit -subcircular -subcision -subcity -subclaim -Subclamatores -subclan -subclass -subclassify -subclause -subclavate -subclavia -subclavian -subclavicular -subclavioaxillary -subclaviojugular -subclavius -subclerk -subclimate -subclimax -subclinical -subclover -subcoastal -subcollateral -subcollector -subcollegiate -subcolumnar -subcommander -subcommendation -subcommended -subcommissary -subcommissaryship -subcommission -subcommissioner -subcommit -subcommittee -subcompany -subcompensate -subcompensation -subcompressed -subconcave -subconcession -subconcessionaire -subconchoidal -subconference -subconformable -subconical -subconjunctival -subconjunctively -subconnate -subconnect -subconnivent -subconscience -subconscious -subconsciously -subconsciousness -subconservator -subconsideration -subconstable -subconstellation -subconsul -subcontained -subcontest -subcontiguous -subcontinent -subcontinental -subcontinual -subcontinued -subcontinuous -subcontract -subcontracted -subcontractor -subcontraoctave -subcontrariety -subcontrarily -subcontrary -subcontrol -subconvex -subconvolute -subcool -subcoracoid -subcordate -subcordiform -subcoriaceous -subcorneous -subcorporation -subcortex -subcortical -subcortically -subcorymbose -subcosta -subcostal -subcostalis -subcouncil -subcranial -subcreative -subcreek -subcrenate -subcrepitant -subcrepitation -subcrescentic -subcrest -subcriminal -subcrossing -subcrureal -subcrureus -subcrust -subcrustaceous -subcrustal -subcrystalline -subcubical -subcuboidal -subcultrate -subcultural -subculture -subcurate -subcurator -subcuratorship -subcurrent -subcutaneous -subcutaneously -subcutaneousness -subcuticular -subcutis -subcyaneous -subcyanide -subcylindric -subcylindrical -subdatary -subdate -subdeacon -subdeaconate -subdeaconess -subdeaconry -subdeaconship -subdealer -subdean -subdeanery -subdeb -subdebutante -subdecanal -subdecimal -subdecuple -subdeducible -subdefinition -subdelegate -subdelegation -subdelirium -subdeltaic -subdeltoid -subdeltoidal -subdemonstrate -subdemonstration -subdenomination -subdentate -subdentated -subdented -subdenticulate -subdepartment -subdeposit -subdepository -subdepot -subdepressed -subdeputy -subderivative -subdermal -subdeterminant -subdevil -subdiaconal -subdiaconate -subdial -subdialect -subdialectal -subdialectally -subdiapason -subdiapente -subdiaphragmatic -subdichotomize -subdichotomous -subdichotomously -subdichotomy -subdie -subdilated -subdirector -subdiscoidal -subdisjunctive -subdistich -subdistichous -subdistinction -subdistinguish -subdistinguished -subdistrict -subdititious -subdititiously -subdivecious -subdiversify -subdividable -subdivide -subdivider -subdividing -subdividingly -subdivine -subdivisible -subdivision -subdivisional -subdivisive -subdoctor -subdolent -subdolichocephalic -subdolichocephaly -subdolous -subdolously -subdolousness -subdominant -subdorsal -subdorsally -subdouble -subdrain -subdrainage -subdrill -subdruid -subduable -subduableness -subduably -subdual -subduce -subduct -subduction -subdue -subdued -subduedly -subduedness -subduement -subduer -subduing -subduingly -subduple -subduplicate -subdural -subdurally -subecho -subectodermal -subedit -subeditor -subeditorial -subeditorship -subeffective -subelection -subelectron -subelement -subelementary -subelliptic -subelliptical -subelongate -subemarginate -subencephalon -subencephaltic -subendocardial -subendorse -subendorsement -subendothelial -subendymal -subenfeoff -subengineer -subentire -subentitle -subentry -subepidermal -subepiglottic -subepithelial -subepoch -subequal -subequality -subequally -subequatorial -subequilateral -subequivalve -suber -suberane -suberate -suberect -subereous -suberic -suberiferous -suberification -suberiform -suberin -suberinization -suberinize -Suberites -Suberitidae -suberization -suberize -suberone -suberose -suberous -subescheator -subesophageal -subessential -subetheric -subexaminer -subexcitation -subexcite -subexecutor -subexternal -subface -subfacies -subfactor -subfactorial -subfactory -subfalcate -subfalcial -subfalciform -subfamily -subfascial -subfastigiate -subfebrile -subferryman -subfestive -subfeu -subfeudation -subfeudatory -subfibrous -subfief -subfigure -subfissure -subfix -subflavor -subflexuose -subfloor -subflooring -subflora -subflush -subfluvial -subfocal -subfoliar -subforeman -subform -subformation -subfossil -subfossorial -subfoundation -subfraction -subframe -subfreshman -subfrontal -subfulgent -subfumigation -subfumose -subfunctional -subfusc -subfuscous -subfusiform -subfusk -subgalea -subgallate -subganger -subgape -subgelatinous -subgeneric -subgenerical -subgenerically -subgeniculate -subgenital -subgens -subgenual -subgenus -subgeometric -subget -subgit -subglabrous -subglacial -subglacially -subglenoid -subglobose -subglobosely -subglobular -subglobulose -subglossal -subglossitis -subglottic -subglumaceous -subgod -subgoverness -subgovernor -subgrade -subgranular -subgrin -subgroup -subgular -subgwely -subgyre -subgyrus -subhalid -subhalide -subhall -subharmonic -subhastation -subhatchery -subhead -subheading -subheadquarters -subheadwaiter -subhealth -subhedral -subhemispherical -subhepatic -subherd -subhero -subhexagonal -subhirsute -subhooked -subhorizontal -subhornblendic -subhouse -subhuman -subhumid -subhyaline -subhyaloid -subhymenial -subhymenium -subhyoid -subhyoidean -subhypothesis -subhysteria -subicle -subicteric -subicular -subiculum -subidar -subidea -subideal -subimaginal -subimago -subimbricate -subimbricated -subimposed -subimpressed -subincandescent -subincident -subincise -subincision -subincomplete -subindex -subindicate -subindication -subindicative -subindices -subindividual -subinduce -subinfer -subinfeud -subinfeudate -subinfeudation -subinfeudatory -subinflammation -subinflammatory -subinform -subingression -subinguinal -subinitial -subinoculate -subinoculation -subinsert -subinsertion -subinspector -subinspectorship -subintegumental -subintellection -subintelligential -subintelligitur -subintent -subintention -subintercessor -subinternal -subinterval -subintestinal -subintroduce -subintroduction -subintroductory -subinvoluted -subinvolution -subiodide -subirrigate -subirrigation -subitane -subitaneous -subitem -Subiya -subjacency -subjacent -subjacently -subjack -subject -subjectability -subjectable -subjectdom -subjected -subjectedly -subjectedness -subjecthood -subjectibility -subjectible -subjectification -subjectify -subjectile -subjection -subjectional -subjectist -subjective -subjectively -subjectiveness -subjectivism -subjectivist -subjectivistic -subjectivistically -subjectivity -subjectivize -subjectivoidealistic -subjectless -subjectlike -subjectness -subjectship -subjee -subjicible -subjoin -subjoinder -subjoint -subjudge -subjudiciary -subjugable -subjugal -subjugate -subjugation -subjugator -subjugular -subjunct -subjunction -subjunctive -subjunctively -subjunior -subking -subkingdom -sublabial -sublaciniate -sublacustrine -sublanate -sublanceolate -sublanguage -sublapsarian -sublapsarianism -sublapsary -sublaryngeal -sublate -sublateral -sublation -sublative -subleader -sublease -sublecturer -sublegislation -sublegislature -sublenticular -sublessee -sublessor -sublet -sublethal -sublettable -subletter -sublevaminous -sublevate -sublevation -sublevel -sublibrarian -sublicense -sublicensee -sublid -sublieutenancy -sublieutenant -subligation -sublighted -sublimable -sublimableness -sublimant -sublimate -sublimation -sublimational -sublimationist -sublimator -sublimatory -sublime -sublimed -sublimely -sublimeness -sublimer -subliminal -subliminally -sublimish -sublimitation -sublimity -sublimize -sublinear -sublineation -sublingua -sublinguae -sublingual -sublinguate -sublittoral -sublobular -sublong -subloral -subloreal -sublot -sublumbar -sublunar -sublunary -sublunate -sublustrous -subluxate -subluxation -submaid -submain -submakroskelic -submammary -subman -submanager -submania -submanic -submanor -submarginal -submarginally -submarginate -submargined -submarine -submariner -submarinism -submarinist -submarshal -submaster -submaxilla -submaxillary -submaximal -submeaning -submedial -submedian -submediant -submediation -submediocre -submeeting -submember -submembranaceous -submembranous -submeningeal -submental -submentum -submerge -submerged -submergement -submergence -submergibility -submergible -submerse -submersed -submersibility -submersible -submersion -submetallic -submeter -submetering -submicron -submicroscopic -submicroscopically -submiliary -submind -subminimal -subminister -submiss -submissible -submission -submissionist -submissive -submissively -submissiveness -submissly -submissness -submit -submittal -submittance -submitter -submittingly -submolecule -submonition -submontagne -submontane -submontanely -submontaneous -submorphous -submortgage -submotive -submountain -submucosa -submucosal -submucous -submucronate -submultiple -submundane -submuriate -submuscular -Submytilacea -subnarcotic -subnasal -subnascent -subnatural -subnect -subnervian -subness -subneural -subnex -subnitrate -subnitrated -subniveal -subnivean -subnormal -subnormality -subnotation -subnote -subnotochordal -subnubilar -subnucleus -subnude -subnumber -subnuvolar -suboblique -subobscure -subobscurely -subobtuse -suboccipital -subocean -suboceanic -suboctave -suboctile -suboctuple -subocular -suboesophageal -suboffice -subofficer -subofficial -subolive -subopaque -subopercle -subopercular -suboperculum -subopposite -suboptic -suboptimal -suboptimum -suboral -suborbicular -suborbiculate -suborbiculated -suborbital -suborbitar -suborbitary -subordain -suborder -subordinacy -subordinal -subordinary -subordinate -subordinately -subordinateness -subordinating -subordinatingly -subordination -subordinationism -subordinationist -subordinative -suborganic -suborn -subornation -subornative -suborner -Suboscines -suboval -subovate -subovated -suboverseer -subovoid -suboxidation -suboxide -subpackage -subpagoda -subpallial -subpalmate -subpanel -subparagraph -subparallel -subpart -subpartition -subpartitioned -subpartitionment -subparty -subpass -subpassage -subpastor -subpatron -subpattern -subpavement -subpectinate -subpectoral -subpeduncle -subpeduncular -subpedunculate -subpellucid -subpeltate -subpeltated -subpentagonal -subpentangular -subpericardial -subperiod -subperiosteal -subperiosteally -subperitoneal -subperitoneally -subpermanent -subpermanently -subperpendicular -subpetiolar -subpetiolate -subpharyngeal -subphosphate -subphratry -subphrenic -subphylar -subphylum -subpial -subpilose -subpimp -subpiston -subplacenta -subplant -subplantigrade -subplat -subpleural -subplinth -subplot -subplow -subpodophyllous -subpoena -subpoenal -subpolar -subpolygonal -subpool -subpopular -subpopulation -subporphyritic -subport -subpostmaster -subpostmastership -subpostscript -subpotency -subpotent -subpreceptor -subpreceptorial -subpredicate -subpredication -subprefect -subprefectorial -subprefecture -subprehensile -subpress -subprimary -subprincipal -subprior -subprioress -subproblem -subproctor -subproduct -subprofessional -subprofessor -subprofessoriate -subprofitable -subproportional -subprotector -subprovince -subprovincial -subpubescent -subpubic -subpulmonary -subpulverizer -subpunch -subpunctuation -subpurchaser -subpurlin -subputation -subpyramidal -subpyriform -subquadrangular -subquadrate -subquality -subquestion -subquinquefid -subquintuple -Subra -subrace -subradial -subradiance -subradiate -subradical -subradius -subradular -subrailway -subrameal -subramose -subramous -subrange -subrational -subreader -subreason -subrebellion -subrectangular -subrector -subreference -subregent -subregion -subregional -subregular -subreguli -subregulus -subrelation -subreligion -subreniform -subrent -subrepand -subrepent -subreport -subreptary -subreption -subreptitious -subreputable -subresin -subretinal -subrhombic -subrhomboid -subrhomboidal -subrictal -subrident -subridently -subrigid -subrision -subrisive -subrisory -subrogate -subrogation -subroot -subrostral -subround -subrule -subruler -subsacral -subsale -subsaline -subsalt -subsample -subsartorial -subsatiric -subsatirical -subsaturated -subsaturation -subscapular -subscapularis -subscapulary -subschedule -subscheme -subschool -subscience -subscleral -subsclerotic -subscribable -subscribe -subscriber -subscribership -subscript -subscription -subscriptionist -subscriptive -subscriptively -subscripture -subscrive -subscriver -subsea -subsecive -subsecretarial -subsecretary -subsect -subsection -subsecurity -subsecute -subsecutive -subsegment -subsemifusa -subsemitone -subsensation -subsensible -subsensual -subsensuous -subsept -subseptuple -subsequence -subsequency -subsequent -subsequential -subsequentially -subsequently -subsequentness -subseries -subserosa -subserous -subserrate -subserve -subserviate -subservience -subserviency -subservient -subserviently -subservientness -subsessile -subset -subsewer -subsextuple -subshaft -subsheriff -subshire -subshrub -subshrubby -subside -subsidence -subsidency -subsident -subsider -subsidiarie -subsidiarily -subsidiariness -subsidiary -subsiding -subsidist -subsidizable -subsidization -subsidize -subsidizer -subsidy -subsilicate -subsilicic -subsill -subsimilation -subsimious -subsimple -subsinuous -subsist -subsistence -subsistency -subsistent -subsistential -subsistingly -subsizar -subsizarship -subsmile -subsneer -subsocial -subsoil -subsoiler -subsolar -subsolid -subsonic -subsorter -subsovereign -subspace -subspatulate -subspecialist -subspecialize -subspecialty -subspecies -subspecific -subspecifically -subsphenoidal -subsphere -subspherical -subspherically -subspinous -subspiral -subspontaneous -subsquadron -substage -substalagmite -substalagmitic -substance -substanceless -substanch -substandard -substandardize -substant -substantiability -substantial -substantialia -substantialism -substantialist -substantiality -substantialize -substantially -substantialness -substantiate -substantiation -substantiative -substantiator -substantify -substantious -substantival -substantivally -substantive -substantively -substantiveness -substantivity -substantivize -substantize -substation -substernal -substituent -substitutable -substitute -substituted -substituter -substituting -substitutingly -substitution -substitutional -substitutionally -substitutionary -substitutive -substitutively -substock -substoreroom -substory -substract -substraction -substratal -substrate -substrati -substrative -substrator -substratose -substratosphere -substratospheric -substratum -substriate -substruct -substruction -substructional -substructural -substructure -substylar -substyle -subsulfid -subsulfide -subsulphate -subsulphid -subsulphide -subsult -subsultive -subsultorily -subsultorious -subsultory -subsultus -subsumable -subsume -subsumption -subsumptive -subsuperficial -subsurety -subsurface -subsyndicate -subsynod -subsynodical -subsystem -subtack -subtacksman -subtangent -subtarget -subtartarean -subtectal -subtegminal -subtegulaneous -subtemperate -subtenancy -subtenant -subtend -subtense -subtenure -subtepid -subteraqueous -subterbrutish -subtercelestial -subterconscious -subtercutaneous -subterethereal -subterfluent -subterfluous -subterfuge -subterhuman -subterjacent -subtermarine -subterminal -subternatural -subterpose -subterposition -subterrane -subterraneal -subterranean -subterraneanize -subterraneanly -subterraneous -subterraneously -subterraneousness -subterranity -subterraqueous -subterrene -subterrestrial -subterritorial -subterritory -subtersensual -subtersensuous -subtersuperlative -subtersurface -subtertian -subtext -subthalamic -subthalamus -subthoracic -subthrill -subtile -subtilely -subtileness -subtilin -subtilism -subtilist -subtility -subtilization -subtilize -subtilizer -subtill -subtillage -subtilty -subtitle -subtitular -subtle -subtleness -subtlety -subtlist -subtly -subtone -subtonic -subtorrid -subtotal -subtotem -subtower -subtract -subtracter -subtraction -subtractive -subtrahend -subtranslucent -subtransparent -subtransverse -subtrapezoidal -subtread -subtreasurer -subtreasurership -subtreasury -subtrench -subtriangular -subtriangulate -subtribal -subtribe -subtribual -subtrifid -subtrigonal -subtrihedral -subtriplicate -subtriplicated -subtriquetrous -subtrist -subtrochanteric -subtrochlear -subtropic -subtropical -subtropics -subtrousers -subtrude -subtruncate -subtrunk -subtuberant -subtunic -subtunnel -subturbary -subturriculate -subturriculated -subtutor -subtwined -subtype -subtypical -subulate -subulated -subulicorn -Subulicornia -subuliform -subultimate -subumbellate -subumbonal -subumbral -subumbrella -subumbrellar -subuncinate -subunequal -subungual -subunguial -Subungulata -subungulate -subunit -subuniverse -suburb -suburban -suburbandom -suburbanhood -suburbanism -suburbanite -suburbanity -suburbanization -suburbanize -suburbanly -suburbed -suburbia -suburbican -suburbicarian -suburbicary -suburethral -subursine -subvaginal -subvaluation -subvarietal -subvariety -subvassal -subvassalage -subvein -subvendee -subvene -subvention -subventionary -subventioned -subventionize -subventitious -subventive -subventral -subventricose -subvermiform -subversal -subverse -subversed -subversion -subversionary -subversive -subversivism -subvert -subvertebral -subverter -subvertible -subvertical -subverticillate -subvesicular -subvestment -subvicar -subvicarship -subvillain -subvirate -subvirile -subvisible -subvitalized -subvitreous -subvocal -subvola -subwarden -subwater -subway -subwealthy -subweight -subwink -subworker -subworkman -subzonal -subzone -subzygomatic -succade -succedanea -succedaneous -succedaneum -succedent -succeed -succeedable -succeeder -succeeding -succeedingly -succent -succentor -succenturiate -succenturiation -success -successful -successfully -successfulness -succession -successional -successionally -successionist -successionless -successive -successively -successiveness -successivity -successless -successlessly -successlessness -successor -successoral -successorship -successory -succi -succin -succinamate -succinamic -succinamide -succinanil -succinate -succinct -succinctly -succinctness -succinctorium -succinctory -succincture -succinic -succiniferous -succinimide -succinite -succinoresinol -succinosulphuric -succinous -succinyl -Succisa -succise -succivorous -succor -succorable -succorer -succorful -succorless -succorrhea -succory -succotash -succourful -succourless -succous -succub -succuba -succubae -succube -succubine -succubous -succubus -succula -succulence -succulency -succulent -succulently -succulentness -succulous -succumb -succumbence -succumbency -succumbent -succumber -succursal -succuss -succussation -succussatory -succussion -succussive -such -suchlike -suchness -Suchos -suchwise -sucivilized -suck -suckable -suckabob -suckage -suckauhock -sucken -suckener -sucker -suckerel -suckerfish -suckerlike -suckfish -suckhole -sucking -suckle -suckler -suckless -suckling -suckstone -suclat -sucramine -sucrate -sucre -sucroacid -sucrose -suction -suctional -Suctoria -suctorial -suctorian -suctorious -sucupira -sucuri -sucuriu -sucuruju -sud -sudadero -sudamen -sudamina -sudaminal -Sudan -Sudanese -Sudani -Sudanian -Sudanic -sudarium -sudary -sudate -sudation -sudatorium -sudatory -Sudburian -sudburite -sudd -sudden -suddenly -suddenness -suddenty -Sudder -sudder -suddle -suddy -Sudic -sudiform -sudoral -sudoresis -sudoric -sudoriferous -sudoriferousness -sudorific -sudoriparous -sudorous -Sudra -suds -sudsman -sudsy -Sue -sue -Suecism -suede -suer -Suerre -Suessiones -suet -suety -Sueve -Suevi -Suevian -Suevic -Sufeism -suff -suffect -suffection -suffer -sufferable -sufferableness -sufferably -sufferance -sufferer -suffering -sufferingly -suffete -suffice -sufficeable -sufficer -sufficiency -sufficient -sufficiently -sufficientness -sufficing -sufficingly -sufficingness -suffiction -suffix -suffixal -suffixation -suffixion -suffixment -sufflaminate -sufflamination -sufflate -sufflation -sufflue -suffocate -suffocating -suffocatingly -suffocation -suffocative -Suffolk -suffragan -suffraganal -suffraganate -suffragancy -suffraganeous -suffragatory -suffrage -suffragette -suffragettism -suffragial -suffragism -suffragist -suffragistic -suffragistically -suffragitis -suffrago -suffrutescent -suffrutex -suffruticose -suffruticous -suffruticulose -suffumigate -suffumigation -suffusable -suffuse -suffused -suffusedly -suffusion -suffusive -Sufi -Sufiism -Sufiistic -Sufism -Sufistic -sugamo -sugan -sugar -sugarberry -sugarbird -sugarbush -sugared -sugarelly -sugarer -sugarhouse -sugariness -sugarless -sugarlike -sugarplum -sugarsweet -sugarworks -sugary -sugent -sugescent -suggest -suggestable -suggestedness -suggester -suggestibility -suggestible -suggestibleness -suggestibly -suggesting -suggestingly -suggestion -suggestionability -suggestionable -suggestionism -suggestionist -suggestionize -suggestive -suggestively -suggestiveness -suggestivity -suggestment -suggestress -suggestum -suggillate -suggillation -sugh -sugi -Sugih -suguaro -suhuaro -Sui -suicidal -suicidalism -suicidally -suicidalwise -suicide -suicidical -suicidism -suicidist -suid -Suidae -suidian -suiform -suilline -suimate -Suina -suine -suing -suingly -suint -Suiogoth -Suiogothic -Suiones -suisimilar -suist -suit -suitability -suitable -suitableness -suitably -suitcase -suite -suithold -suiting -suitor -suitoress -suitorship -suity -suji -Suk -Sukey -sukiyaki -sukkenye -Suku -Sula -Sulaba -Sulafat -Sulaib -sulbasutra -sulcal -sulcalization -sulcalize -sulcar -sulcate -sulcated -sulcation -sulcatoareolate -sulcatocostate -sulcatorimose -sulciform -sulcomarginal -sulcular -sulculate -sulculus -sulcus -suld -sulea -sulfa -sulfacid -sulfadiazine -sulfaguanidine -sulfamate -sulfamerazin -sulfamerazine -sulfamethazine -sulfamethylthiazole -sulfamic -sulfamidate -sulfamide -sulfamidic -sulfamine -sulfaminic -sulfamyl -sulfanilamide -sulfanilic -sulfanilylguanidine -sulfantimonide -sulfapyrazine -sulfapyridine -sulfaquinoxaline -sulfarsenide -sulfarsenite -sulfarseniuret -sulfarsphenamine -Sulfasuxidine -sulfatase -sulfathiazole -sulfatic -sulfatize -sulfato -sulfazide -sulfhydrate -sulfhydric -sulfhydryl -sulfindigotate -sulfindigotic -sulfindylic -sulfion -sulfionide -sulfoacid -sulfoamide -sulfobenzide -sulfobenzoate -sulfobenzoic -sulfobismuthite -sulfoborite -sulfocarbamide -sulfocarbimide -sulfocarbolate -sulfocarbolic -sulfochloride -sulfocyan -sulfocyanide -sulfofication -sulfogermanate -sulfohalite -sulfohydrate -sulfoindigotate -sulfoleic -sulfolysis -sulfomethylic -sulfonamic -sulfonamide -sulfonate -sulfonation -sulfonator -sulfonephthalein -sulfonethylmethane -sulfonic -sulfonium -sulfonmethane -sulfonyl -sulfophthalein -sulfopurpurate -sulfopurpuric -sulforicinate -sulforicinic -sulforicinoleate -sulforicinoleic -sulfoselenide -sulfosilicide -sulfostannide -sulfotelluride -sulfourea -sulfovinate -sulfovinic -sulfowolframic -sulfoxide -sulfoxism -sulfoxylate -sulfoxylic -sulfurage -sulfuran -sulfurate -sulfuration -sulfurator -sulfurea -sulfureous -sulfureously -sulfureousness -sulfuret -sulfuric -sulfurization -sulfurize -sulfurosyl -sulfurous -sulfury -sulfuryl -Sulidae -Sulides -Suliote -sulk -sulka -sulker -sulkily -sulkiness -sulky -sulkylike -sull -sulla -sullage -Sullan -sullen -sullenhearted -sullenly -sullenness -sulliable -sullow -sully -sulpha -sulphacid -sulphaldehyde -sulphamate -sulphamic -sulphamidate -sulphamide -sulphamidic -sulphamine -sulphaminic -sulphamino -sulphammonium -sulphamyl -sulphanilate -sulphanilic -sulphantimonate -sulphantimonial -sulphantimonic -sulphantimonide -sulphantimonious -sulphantimonite -sulpharsenate -sulpharseniate -sulpharsenic -sulpharsenide -sulpharsenious -sulpharsenite -sulpharseniuret -sulpharsphenamine -sulphatase -sulphate -sulphated -sulphatic -sulphation -sulphatization -sulphatize -sulphato -sulphatoacetic -sulphatocarbonic -sulphazide -sulphazotize -sulphbismuthite -sulphethylate -sulphethylic -sulphhemoglobin -sulphichthyolate -sulphidation -sulphide -sulphidic -sulphidize -sulphimide -sulphinate -sulphindigotate -sulphine -sulphinic -sulphinide -sulphinyl -sulphitation -sulphite -sulphitic -sulphmethemoglobin -sulpho -sulphoacetic -sulphoamid -sulphoamide -sulphoantimonate -sulphoantimonic -sulphoantimonious -sulphoantimonite -sulphoarsenic -sulphoarsenious -sulphoarsenite -sulphoazotize -sulphobenzide -sulphobenzoate -sulphobenzoic -sulphobismuthite -sulphoborite -sulphobutyric -sulphocarbamic -sulphocarbamide -sulphocarbanilide -sulphocarbimide -sulphocarbolate -sulphocarbolic -sulphocarbonate -sulphocarbonic -sulphochloride -sulphochromic -sulphocinnamic -sulphocyan -sulphocyanate -sulphocyanic -sulphocyanide -sulphocyanogen -sulphodichloramine -sulphofication -sulphofy -sulphogallic -sulphogel -sulphogermanate -sulphogermanic -sulphohalite -sulphohaloid -sulphohydrate -sulphoichthyolate -sulphoichthyolic -sulphoindigotate -sulphoindigotic -sulpholeate -sulpholeic -sulpholipin -sulpholysis -sulphonal -sulphonalism -sulphonamic -sulphonamide -sulphonamido -sulphonamine -sulphonaphthoic -sulphonate -sulphonated -sulphonation -sulphonator -sulphoncyanine -sulphone -sulphonephthalein -sulphonethylmethane -sulphonic -sulphonium -sulphonmethane -sulphonphthalein -sulphonyl -sulphoparaldehyde -sulphophosphate -sulphophosphite -sulphophosphoric -sulphophosphorous -sulphophthalein -sulphophthalic -sulphopropionic -sulphoproteid -sulphopupuric -sulphopurpurate -sulphoricinate -sulphoricinic -sulphoricinoleate -sulphoricinoleic -sulphosalicylic -sulphoselenide -sulphoselenium -sulphosilicide -sulphosol -sulphostannate -sulphostannic -sulphostannide -sulphostannite -sulphostannous -sulphosuccinic -sulphosulphurous -sulphotannic -sulphotelluride -sulphoterephthalic -sulphothionyl -sulphotoluic -sulphotungstate -sulphotungstic -sulphourea -sulphovanadate -sulphovinate -sulphovinic -sulphowolframic -sulphoxide -sulphoxism -sulphoxylate -sulphoxylic -sulphoxyphosphate -sulphozincate -sulphur -sulphurage -sulphuran -sulphurate -sulphuration -sulphurator -sulphurea -sulphurean -sulphureity -sulphureonitrous -sulphureosaline -sulphureosuffused -sulphureous -sulphureously -sulphureousness -sulphureovirescent -sulphuret -sulphureted -sulphuric -sulphuriferous -sulphurity -sulphurization -sulphurize -sulphurless -sulphurlike -sulphurosyl -sulphurous -sulphurously -sulphurousness -sulphurproof -sulphurweed -sulphurwort -sulphury -sulphuryl -sulphydrate -sulphydric -sulphydryl -Sulpician -sultam -sultan -sultana -sultanaship -sultanate -sultane -sultanesque -sultaness -sultanian -sultanic -sultanin -sultanism -sultanist -sultanize -sultanlike -sultanry -sultanship -sultone -sultrily -sultriness -sultry -Sulu -Suluan -sulung -sulvanite -sulvasutra -sum -sumac -Sumak -Sumass -Sumatra -sumatra -Sumatran -sumbul -sumbulic -Sumdum -Sumerian -Sumerology -Sumitro -sumless -sumlessness -summability -summable -summage -summand -summar -summarily -summariness -summarist -summarization -summarize -summarizer -summary -summate -summation -summational -summative -summatory -summed -summer -summerbird -summercastle -summerer -summerhead -summeriness -summering -summerings -summerish -summerite -summerize -summerland -summerlay -summerless -summerlike -summerliness -summerling -summerly -summerproof -summertide -summertime -summertree -summerward -summerwood -summery -summist -summit -summital -summitless -summity -summon -summonable -summoner -summoningly -summons -summula -summulist -summut -sumner -Sumo -sump -sumpage -sumper -sumph -sumphish -sumphishly -sumphishness -sumphy -sumpit -sumpitan -sumple -sumpman -sumpsimus -sumpter -sumption -sumptuary -sumptuosity -sumptuous -sumptuously -sumptuousness -sun -sunbeam -sunbeamed -sunbeamy -sunberry -sunbird -sunblink -sunbonnet -sunbonneted -sunbow -sunbreak -sunburn -sunburned -sunburnedness -sunburnproof -sunburnt -sunburntness -sunburst -suncherchor -suncup -sundae -Sundanese -Sundanesian -sundang -Sundar -Sundaresan -sundari -Sunday -Sundayfied -Sundayish -Sundayism -Sundaylike -Sundayness -Sundayproof -sundek -sunder -sunderable -sunderance -sunderer -sunderment -sunderwise -sundew -sundial -sundik -sundog -sundown -sundowner -sundowning -sundra -sundri -sundries -sundriesman -sundrily -sundriness -sundrops -sundry -sundryman -sune -sunfall -sunfast -sunfish -sunfisher -sunfishery -sunflower -Sung -sung -sungha -sunglade -sunglass -sunglo -sunglow -Sunil -sunk -sunken -sunket -sunkland -sunlamp -sunland -sunless -sunlessly -sunlessness -sunlet -sunlight -sunlighted -sunlike -sunlit -sunn -Sunna -Sunni -Sunniah -sunnily -sunniness -Sunnism -Sunnite -sunnud -sunny -sunnyhearted -sunnyheartedness -sunproof -sunquake -sunray -sunrise -sunrising -sunroom -sunscald -sunset -sunsetting -sunsetty -sunshade -sunshine -sunshineless -sunshining -sunshiny -sunsmit -sunsmitten -sunspot -sunspotted -sunspottedness -sunspottery -sunspotty -sunsquall -sunstone -sunstricken -sunstroke -sunt -sunup -sunward -sunwards -sunway -sunways -sunweed -sunwise -sunyie -Suomi -Suomic -suovetaurilia -sup -supa -Supai -supari -supawn -supe -supellex -super -superabduction -superabhor -superability -superable -superableness -superably -superabnormal -superabominable -superabomination -superabound -superabstract -superabsurd -superabundance -superabundancy -superabundant -superabundantly -superaccession -superaccessory -superaccommodating -superaccomplished -superaccrue -superaccumulate -superaccumulation -superaccurate -superacetate -superachievement -superacid -superacidulated -superacknowledgment -superacquisition -superacromial -superactive -superactivity -superacute -superadaptable -superadd -superaddition -superadditional -superadequate -superadequately -superadjacent -superadministration -superadmirable -superadmiration -superadorn -superadornment -superaerial -superaesthetical -superaffiliation -superaffiuence -superagency -superaggravation -superagitation -superagrarian -superalbal -superalbuminosis -superalimentation -superalkaline -superalkalinity -superallowance -superaltar -superaltern -superambitious -superambulacral -superanal -superangelic -superangelical -superanimal -superannuate -superannuation -superannuitant -superannuity -superapology -superappreciation -superaqueous -superarbiter -superarbitrary -superarctic -superarduous -superarrogant -superarseniate -superartificial -superartificially -superaspiration -superassertion -superassociate -superassume -superastonish -superastonishment -superattachment -superattainable -superattendant -superattraction -superattractive -superauditor -superaural -superaverage -superavit -superaward -superaxillary -superazotation -superb -superbelief -superbeloved -superbenefit -superbenevolent -superbenign -superbias -superbious -superbity -superblessed -superblunder -superbly -superbness -superbold -superborrow -superbrain -superbrave -superbrute -superbuild -superbungalow -superbusy -supercabinet -supercalender -supercallosal -supercandid -supercanine -supercanonical -supercanonization -supercanopy -supercapable -supercaption -supercarbonate -supercarbonization -supercarbonize -supercarbureted -supercargo -supercargoship -supercarpal -supercatastrophe -supercatholic -supercausal -supercaution -supercelestial -supercensure -supercentral -supercentrifuge -supercerebellar -supercerebral -superceremonious -supercharge -supercharged -supercharger -superchemical -superchivalrous -superciliary -superciliosity -supercilious -superciliously -superciliousness -supercilium -supercivil -supercivilization -supercivilized -superclaim -superclass -superclassified -supercloth -supercoincidence -supercolossal -supercolumnar -supercolumniation -supercombination -supercombing -supercommendation -supercommentary -supercommentator -supercommercial -supercompetition -supercomplete -supercomplex -supercomprehension -supercompression -superconception -superconductive -superconductivity -superconductor -superconfident -superconfirmation -superconformable -superconformist -superconformity -superconfusion -supercongestion -superconscious -superconsciousness -superconsecrated -superconsequency -superconservative -superconstitutional -supercontest -supercontribution -supercontrol -supercool -supercordial -supercorporation -supercow -supercredit -supercrescence -supercrescent -supercrime -supercritic -supercritical -supercrowned -supercrust -supercube -supercultivated -supercurious -supercycle -supercynical -superdainty -superdanger -superdebt -superdeclamatory -superdecoration -superdeficit -superdeity -superdejection -superdelegate -superdelicate -superdemand -superdemocratic -superdemonic -superdemonstration -superdensity -superdeposit -superdesirous -superdevelopment -superdevilish -superdevotion -superdiabolical -superdiabolically -superdicrotic -superdifficult -superdiplomacy -superdirection -superdiscount -superdistention -superdistribution -superdividend -superdivine -superdivision -superdoctor -superdominant -superdomineering -superdonation -superdose -superdramatist -superdreadnought -superdubious -superduplication -superdural -superdying -superearthly -supereconomy -superedification -superedify -supereducation -supereffective -supereffluence -supereffluently -superego -superelaborate -superelastic -superelated -superelegance -superelementary -superelevated -superelevation -supereligible -supereloquent -supereminence -supereminency -supereminent -supereminently -superemphasis -superemphasize -superendorse -superendorsement -superendow -superenergetic -superenforcement -superengrave -superenrollment -superepic -superepoch -superequivalent -supererogant -supererogantly -supererogate -supererogation -supererogative -supererogator -supererogatorily -supererogatory -superespecial -superessential -superessentially -superestablish -superestablishment -supereternity -superether -superethical -superethmoidal -superevangelical -superevident -superexacting -superexalt -superexaltation -superexaminer -superexceed -superexceeding -superexcellence -superexcellency -superexcellent -superexcellently -superexceptional -superexcitation -superexcited -superexcitement -superexcrescence -superexert -superexertion -superexiguity -superexist -superexistent -superexpand -superexpansion -superexpectation -superexpenditure -superexplicit -superexport -superexpressive -superexquisite -superexquisitely -superexquisiteness -superextend -superextension -superextol -superextreme -superfamily -superfantastic -superfarm -superfat -superfecundation -superfecundity -superfee -superfeminine -superfervent -superfetate -superfetation -superfeudation -superfibrination -superficial -superficialism -superficialist -superficiality -superficialize -superficially -superficialness -superficiary -superficies -superfidel -superfinance -superfine -superfinical -superfinish -superfinite -superfissure -superfit -superfix -superfleet -superflexion -superfluent -superfluid -superfluitance -superfluity -superfluous -superfluously -superfluousness -superflux -superfoliaceous -superfoliation -superfolly -superformal -superformation -superformidable -superfortunate -superfriendly -superfrontal -superfructified -superfulfill -superfulfillment -superfunction -superfunctional -superfuse -superfusibility -superfusible -superfusion -supergaiety -supergallant -supergene -supergeneric -supergenerosity -supergenerous -supergenual -supergiant -superglacial -superglorious -superglottal -supergoddess -supergoodness -supergovern -supergovernment -supergraduate -supergrant -supergratification -supergratify -supergravitate -supergravitation -superguarantee -supergun -superhandsome -superhearty -superheat -superheater -superheresy -superhero -superheroic -superhet -superheterodyne -superhighway -superhirudine -superhistoric -superhistorical -superhive -superhuman -superhumanity -superhumanize -superhumanly -superhumanness -superhumeral -superhypocrite -superideal -superignorant -superillustrate -superillustration -superimpend -superimpending -superimpersonal -superimply -superimportant -superimposable -superimpose -superimposed -superimposition -superimposure -superimpregnated -superimpregnation -superimprobable -superimproved -superincentive -superinclination -superinclusive -superincomprehensible -superincrease -superincumbence -superincumbency -superincumbent -superincumbently -superindependent -superindiction -superindifference -superindifferent -superindignant -superindividual -superindividualism -superindividualist -superinduce -superinducement -superinduct -superinduction -superindulgence -superindulgent -superindustrious -superindustry -superinenarrable -superinfection -superinfer -superinference -superinfeudation -superinfinite -superinfinitely -superinfirmity -superinfluence -superinformal -superinfuse -superinfusion -superingenious -superingenuity -superinitiative -superinjustice -superinnocent -superinquisitive -superinsaniated -superinscription -superinsist -superinsistence -superinsistent -superinstitute -superinstitution -superintellectual -superintend -superintendence -superintendency -superintendent -superintendential -superintendentship -superintender -superintense -superintolerable -superinundation -superior -superioress -superiority -superiorly -superiorness -superiorship -superirritability -superius -superjacent -superjudicial -superjurisdiction -superjustification -superknowledge -superlabial -superlaborious -superlactation -superlapsarian -superlaryngeal -superlation -superlative -superlatively -superlativeness -superlenient -superlie -superlikelihood -superline -superlocal -superlogical -superloyal -superlucky -superlunary -superlunatical -superluxurious -supermagnificent -supermagnificently -supermalate -superman -supermanhood -supermanifest -supermanism -supermanliness -supermanly -supermannish -supermarginal -supermarine -supermarket -supermarvelous -supermasculine -supermaterial -supermathematical -supermaxilla -supermaxillary -supermechanical -supermedial -supermedicine -supermediocre -supermental -supermentality -supermetropolitan -supermilitary -supermishap -supermixture -supermodest -supermoisten -supermolten -supermoral -supermorose -supermunicipal -supermuscan -supermystery -supernacular -supernaculum -supernal -supernalize -supernally -supernatant -supernatation -supernation -supernational -supernationalism -supernatural -supernaturaldom -supernaturalism -supernaturalist -supernaturality -supernaturalize -supernaturally -supernaturalness -supernature -supernecessity -supernegligent -supernormal -supernormally -supernormalness -supernotable -supernova -supernumeral -supernumerariness -supernumerary -supernumeraryship -supernumerous -supernutrition -superoanterior -superobedience -superobedient -superobese -superobject -superobjection -superobjectionable -superobligation -superobstinate -superoccipital -superoctave -superocular -superodorsal -superoexternal -superoffensive -superofficious -superofficiousness -superofrontal -superointernal -superolateral -superomedial -superoposterior -superopposition -superoptimal -superoptimist -superoratorical -superorbital -superordain -superorder -superordinal -superordinary -superordinate -superordination -superorganic -superorganism -superorganization -superorganize -superornament -superornamental -superosculate -superoutput -superoxalate -superoxide -superoxygenate -superoxygenation -superparamount -superparasite -superparasitic -superparasitism -superparliamentary -superpassage -superpatient -superpatriotic -superpatriotism -superperfect -superperfection -superperson -superpersonal -superpersonalism -superpetrosal -superphlogisticate -superphlogistication -superphosphate -superphysical -superpigmentation -superpious -superplausible -superplease -superplus -superpolite -superpolitic -superponderance -superponderancy -superponderant -superpopulation -superposable -superpose -superposed -superposition -superpositive -superpower -superpowered -superpraise -superprecarious -superprecise -superprelatical -superpreparation -superprinting -superprobability -superproduce -superproduction -superproportion -superprosperous -superpublicity -superpure -superpurgation -superquadrupetal -superqualify -superquote -superradical -superrational -superrationally -superreaction -superrealism -superrealist -superrefine -superrefined -superrefinement -superreflection -superreform -superreformation -superregal -superregeneration -superregenerative -superregistration -superregulation -superreliance -superremuneration -superrenal -superrequirement -superrespectable -superresponsible -superrestriction -superreward -superrheumatized -superrighteous -superromantic -superroyal -supersacerdotal -supersacral -supersacred -supersacrifice -supersafe -supersagacious -supersaint -supersaintly -supersalesman -supersaliency -supersalient -supersalt -supersanction -supersanguine -supersanity -supersarcastic -supersatisfaction -supersatisfy -supersaturate -supersaturation -superscandal -superscholarly -superscientific -superscribe -superscript -superscription -superscrive -superseaman -supersecret -supersecretion -supersecular -supersecure -supersedable -supersede -supersedeas -supersedence -superseder -supersedure -superselect -superseminate -supersemination -superseminator -supersensible -supersensibly -supersensitive -supersensitiveness -supersensitization -supersensory -supersensual -supersensualism -supersensualist -supersensualistic -supersensuality -supersensually -supersensuous -supersensuousness -supersentimental -superseptal -superseptuaginarian -superseraphical -superserious -superservice -superserviceable -superserviceableness -superserviceably -supersesquitertial -supersession -supersessive -supersevere -supershipment -supersignificant -supersilent -supersimplicity -supersimplify -supersincerity -supersingular -supersistent -supersize -supersmart -supersocial -supersoil -supersolar -supersolemn -supersolemness -supersolemnity -supersolemnly -supersolicit -supersolicitation -supersolid -supersonant -supersonic -supersovereign -supersovereignty -superspecialize -superspecies -superspecification -supersphenoid -supersphenoidal -superspinous -superspiritual -superspirituality -supersquamosal -superstage -superstamp -superstandard -superstate -superstatesman -superstimulate -superstimulation -superstition -superstitionist -superstitionless -superstitious -superstitiously -superstitiousness -superstoical -superstrain -superstrata -superstratum -superstrenuous -superstrict -superstrong -superstruct -superstruction -superstructor -superstructory -superstructural -superstructure -superstuff -superstylish -supersublimated -supersuborder -supersubsist -supersubstantial -supersubstantiality -supersubstantiate -supersubtilized -supersubtle -supersufficiency -supersufficient -supersulcus -supersulphate -supersulphuret -supersulphureted -supersulphurize -supersuperabundance -supersuperabundant -supersuperabundantly -supersuperb -supersuperior -supersupremacy -supersupreme -supersurprise -supersuspicious -supersweet -supersympathy -supersyndicate -supersystem -supertare -supertartrate -supertax -supertaxation -supertemporal -supertempt -supertemptation -supertension -superterranean -superterraneous -superterrene -superterrestrial -superthankful -superthorough -superthyroidism -supertoleration -supertonic -supertotal -supertower -supertragic -supertragical -supertrain -supertramp -supertranscendent -supertranscendently -supertreason -supertrivial -supertuchun -supertunic -supertutelary -superugly -superultrafrostified -superunfit -superunit -superunity -superuniversal -superuniverse -superurgent -supervalue -supervast -supervene -supervenience -supervenient -supervenosity -supervention -supervestment -supervexation -supervictorious -supervigilant -supervigorous -supervirulent -supervisal -supervisance -supervise -supervision -supervisionary -supervisive -supervisor -supervisorial -supervisorship -supervisory -supervisual -supervisure -supervital -supervive -supervolition -supervoluminous -supervolute -superwager -superwealthy -superweening -superwise -superwoman -superworldly -superwrought -superyacht -superzealous -supinate -supination -supinator -supine -supinely -supineness -suppedaneum -supper -suppering -supperless -suppertime -supperwards -supping -supplace -supplant -supplantation -supplanter -supplantment -supple -supplejack -supplely -supplement -supplemental -supplementally -supplementarily -supplementary -supplementation -supplementer -suppleness -suppletion -suppletive -suppletively -suppletorily -suppletory -suppliable -supplial -suppliance -suppliancy -suppliant -suppliantly -suppliantness -supplicancy -supplicant -supplicantly -supplicat -supplicate -supplicating -supplicatingly -supplication -supplicationer -supplicative -supplicator -supplicatory -supplicavit -supplice -supplier -suppling -supply -support -supportability -supportable -supportableness -supportably -supportance -supporter -supportful -supporting -supportingly -supportive -supportless -supportlessly -supportress -supposable -supposableness -supposably -supposal -suppose -supposed -supposedly -supposer -supposing -supposition -suppositional -suppositionally -suppositionary -suppositionless -suppositious -supposititious -supposititiously -supposititiousness -suppositive -suppositively -suppository -suppositum -suppost -suppress -suppressal -suppressed -suppressedly -suppresser -suppressible -suppression -suppressionist -suppressive -suppressively -suppressor -supprise -suppurant -suppurate -suppuration -suppurative -suppuratory -suprabasidorsal -suprabranchial -suprabuccal -supracaecal -supracargo -supracaudal -supracensorious -supracentenarian -suprachorioid -suprachorioidal -suprachorioidea -suprachoroid -suprachoroidal -suprachoroidea -supraciliary -supraclavicle -supraclavicular -supraclusion -supracommissure -supraconduction -supraconductor -supracondylar -supracondyloid -supraconscious -supraconsciousness -supracoralline -supracostal -supracoxal -supracranial -supracretaceous -supradecompound -supradental -supradorsal -supradural -suprafeminine -suprafine -suprafoliaceous -suprafoliar -supraglacial -supraglenoid -supraglottic -supragovernmental -suprahepatic -suprahistorical -suprahuman -suprahumanity -suprahyoid -suprailiac -suprailium -supraintellectual -suprainterdorsal -suprajural -supralabial -supralapsarian -supralapsarianism -supralateral -supralegal -supraliminal -supraliminally -supralineal -supralinear -supralocal -supralocally -supraloral -supralunar -supralunary -supramammary -supramarginal -supramarine -supramastoid -supramaxilla -supramaxillary -supramaximal -suprameatal -supramechanical -supramedial -supramental -supramolecular -supramoral -supramortal -supramundane -supranasal -supranational -supranatural -supranaturalism -supranaturalist -supranaturalistic -supranature -supranervian -supraneural -supranormal -supranuclear -supraoccipital -supraocclusion -supraocular -supraoesophagal -supraoesophageal -supraoptimal -supraoptional -supraoral -supraorbital -supraorbitar -supraordinary -supraordinate -supraordination -suprapapillary -suprapedal -suprapharyngeal -supraposition -supraprotest -suprapubian -suprapubic -suprapygal -supraquantivalence -supraquantivalent -suprarational -suprarationalism -suprarationality -suprarenal -suprarenalectomize -suprarenalectomy -suprarenalin -suprarenine -suprarimal -suprasaturate -suprascapula -suprascapular -suprascapulary -suprascript -suprasegmental -suprasensible -suprasensitive -suprasensual -suprasensuous -supraseptal -suprasolar -suprasoriferous -suprasphanoidal -supraspinal -supraspinate -supraspinatus -supraspinous -suprasquamosal -suprastandard -suprastapedial -suprastate -suprasternal -suprastigmal -suprasubtle -supratemporal -supraterraneous -supraterrestrial -suprathoracic -supratonsillar -supratrochlear -supratropical -supratympanic -supravaginal -supraventricular -supraversion -supravital -supraworld -supremacy -suprematism -supreme -supremely -supremeness -supremity -sur -sura -suraddition -surah -surahi -sural -suralimentation -suranal -surangular -surat -surbase -surbased -surbasement -surbate -surbater -surbed -surcease -surcharge -surcharger -surcingle -surcoat -surcrue -surculi -surculigerous -surculose -surculous -surculus -surd -surdation -surdeline -surdent -surdimutism -surdity -surdomute -sure -surely -sureness -sures -Suresh -surette -surety -suretyship -surexcitation -surf -surface -surfaced -surfacedly -surfaceless -surfacely -surfaceman -surfacer -surfacing -surfactant -surfacy -surfbird -surfboard -surfboarding -surfboat -surfboatman -surfeit -surfeiter -surfer -surficial -surfle -surflike -surfman -surfmanship -surfrappe -surfuse -surfusion -surfy -surge -surgeful -surgeless -surgent -surgeon -surgeoncy -surgeoness -surgeonfish -surgeonless -surgeonship -surgeproof -surgerize -surgery -surgical -surgically -surginess -surging -surgy -Suriana -Surianaceae -Suricata -suricate -suriga -Surinam -surinamine -surlily -surliness -surly -surma -surmark -surmaster -surmisable -surmisal -surmisant -surmise -surmised -surmisedly -surmiser -surmount -surmountable -surmountableness -surmountal -surmounted -surmounter -surmullet -surname -surnamer -surnap -surnay -surnominal -surpass -surpassable -surpasser -surpassing -surpassingly -surpassingness -surpeopled -surplice -surpliced -surplicewise -surplician -surplus -surplusage -surpreciation -surprint -surprisable -surprisal -surprise -surprisedly -surprisement -surpriseproof -surpriser -surprising -surprisingly -surprisingness -surquedry -surquidry -surquidy -surra -surrealism -surrealist -surrealistic -surrealistically -surrebound -surrebut -surrebuttal -surrebutter -surrection -surrejoin -surrejoinder -surrenal -surrender -surrenderee -surrenderer -surrenderor -surreption -surreptitious -surreptitiously -surreptitiousness -surreverence -surreverently -surrey -surrogacy -surrogate -surrogateship -surrogation -surrosion -surround -surrounded -surroundedly -surrounder -surrounding -surroundings -sursaturation -sursolid -sursumduction -sursumvergence -sursumversion -surtax -surtout -surturbrand -surveillance -surveillant -survey -surveyable -surveyage -surveyal -surveyance -surveying -surveyor -surveyorship -survigrous -survivability -survivable -survival -survivalism -survivalist -survivance -survivancy -survive -surviver -surviving -survivor -survivoress -survivorship -Surya -Sus -Susan -Susanchite -Susanna -Susanne -susannite -suscept -susceptance -susceptibility -susceptible -susceptibleness -susceptibly -susception -susceptive -susceptiveness -susceptivity -susceptor -suscitate -suscitation -susi -Susian -Susianian -Susie -suslik -susotoxin -suspect -suspectable -suspected -suspectedness -suspecter -suspectful -suspectfulness -suspectible -suspectless -suspector -suspend -suspended -suspender -suspenderless -suspenders -suspendibility -suspendible -suspensation -suspense -suspenseful -suspensely -suspensibility -suspensible -suspension -suspensive -suspensively -suspensiveness -suspensoid -suspensor -suspensorial -suspensorium -suspensory -suspercollate -suspicion -suspicionable -suspicional -suspicionful -suspicionless -suspicious -suspiciously -suspiciousness -suspiration -suspiratious -suspirative -suspire -suspirious -Susquehanna -Sussex -sussexite -Sussexman -sussultatory -sussultorial -sustain -sustainable -sustained -sustainer -sustaining -sustainingly -sustainment -sustanedly -sustenance -sustenanceless -sustentacula -sustentacular -sustentaculum -sustentation -sustentational -sustentative -sustentator -sustention -sustentive -sustentor -Susu -susu -Susuhunan -Susuidae -Susumu -susurr -susurrant -susurrate -susurration -susurringly -susurrous -susurrus -Sutaio -suterbery -suther -Sutherlandia -sutile -sutler -sutlerage -sutleress -sutlership -sutlery -Suto -sutor -sutorial -sutorian -sutorious -sutra -Suttapitaka -suttee -sutteeism -sutten -suttin -suttle -Sutu -sutural -suturally -suturation -suture -Suu -suum -Suwandi -suwarro -suwe -Suyog -suz -Suzan -Suzanne -suzerain -suzeraine -suzerainship -suzerainty -Suzy -Svan -Svanetian -Svanish -Svante -Svantovit -svarabhakti -svarabhaktic -Svarloka -svelte -Svetambara -sviatonosite -swa -Swab -swab -swabber -swabberly -swabble -Swabian -swack -swacken -swacking -swad -swaddle -swaddlebill -swaddler -swaddling -swaddy -Swadeshi -Swadeshism -swag -swagbellied -swagbelly -swage -swager -swagger -swaggerer -swaggering -swaggeringly -swaggie -swaggy -swaglike -swagman -swagsman -Swahilese -Swahili -Swahilian -Swahilize -swaimous -swain -swainish -swainishness -swainship -Swainsona -swainsona -swaird -swale -swaler -swaling -swalingly -swallet -swallo -swallow -swallowable -swallower -swallowlike -swallowling -swallowpipe -swallowtail -swallowwort -swam -swami -swamp -swampable -swampberry -swamper -swampish -swampishness -swampland -swampside -swampweed -swampwood -swampy -Swamy -swan -swandown -swanflower -swang -swangy -swanherd -swanhood -swanimote -swank -swanker -swankily -swankiness -swanking -swanky -swanlike -swanmark -swanmarker -swanmarking -swanneck -swannecked -swanner -swannery -swannish -swanny -swanskin -Swantevit -swanweed -swanwort -swap -swape -swapper -swapping -swaraj -swarajism -swarajist -swarbie -sward -swardy -sware -swarf -swarfer -swarm -swarmer -swarming -swarmy -swarry -swart -swartback -swarth -swarthily -swarthiness -swarthness -swarthy -swartish -swartly -swartness -swartrutter -swartrutting -swarty -Swartzbois -Swartzia -swarve -swash -swashbuckle -swashbuckler -swashbucklerdom -swashbucklering -swashbucklery -swashbuckling -swasher -swashing -swashway -swashwork -swashy -swastika -swastikaed -Swat -swat -swatch -Swatchel -swatcher -swatchway -swath -swathable -swathband -swathe -swatheable -swather -swathy -Swati -Swatow -swatter -swattle -swaver -sway -swayable -swayed -swayer -swayful -swaying -swayingly -swayless -Swazi -Swaziland -sweal -sweamish -swear -swearer -swearingly -swearword -sweat -sweatband -sweatbox -sweated -sweater -sweatful -sweath -sweatily -sweatiness -sweating -sweatless -sweatproof -sweatshop -sweatweed -sweaty -Swede -Swedenborgian -Swedenborgianism -Swedenborgism -swedge -Swedish -sweeny -sweep -sweepable -sweepage -sweepback -sweepboard -sweepdom -sweeper -sweeperess -sweepforward -sweeping -sweepingly -sweepingness -sweepings -sweepstake -sweepwasher -sweepwashings -sweepy -sweer -sweered -sweet -sweetberry -sweetbread -sweetbrier -sweetbriery -sweeten -sweetener -sweetening -sweetfish -sweetful -sweetheart -sweetheartdom -sweethearted -sweetheartedness -sweethearting -sweetheartship -sweetie -sweeting -sweetish -sweetishly -sweetishness -sweetleaf -sweetless -sweetlike -sweetling -sweetly -sweetmaker -sweetmeat -sweetmouthed -sweetness -sweetroot -sweetshop -sweetsome -sweetsop -sweetwater -sweetweed -sweetwood -sweetwort -sweety -swego -swelchie -swell -swellage -swelldom -swelldoodle -swelled -sweller -swellfish -swelling -swellish -swellishness -swellmobsman -swellness -swelltoad -swelly -swelp -swelt -swelter -sweltering -swelteringly -swelth -sweltry -swelty -swep -swept -swerd -Swertia -swerve -swerveless -swerver -swervily -swick -swidge -Swietenia -swift -swiften -swifter -swiftfoot -swiftlet -swiftlike -swiftness -swifty -swig -swigger -swiggle -swile -swill -swillbowl -swiller -swilltub -swim -swimmable -swimmer -swimmeret -swimmily -swimminess -swimming -swimmingly -swimmingness -swimmist -swimmy -swimsuit -swimy -Swinburnesque -Swinburnian -swindle -swindleable -swindledom -swindler -swindlership -swindlery -swindling -swindlingly -swine -swinebread -swinecote -swinehead -swineherd -swineherdship -swinehood -swinehull -swinelike -swinely -swinepipe -swinery -swinestone -swinesty -swiney -swing -swingable -swingback -swingdevil -swingdingle -swinge -swingeing -swinger -swinging -swingingly -Swingism -swingle -swinglebar -swingletail -swingletree -swingstock -swingtree -swingy -swinish -swinishly -swinishness -swink -swinney -swipe -swiper -swipes -swiple -swipper -swipy -swird -swire -swirl -swirlingly -swirly -swirring -swish -swisher -swishing -swishingly -swishy -Swiss -swiss -Swissess -swissing -switch -switchback -switchbacker -switchboard -switched -switchel -switcher -switchgear -switching -switchkeeper -switchlike -switchman -switchy -switchyard -swith -swithe -swithen -swither -Swithin -Switzer -Switzeress -swivel -swiveled -swiveleye -swiveleyed -swivellike -swivet -swivetty -swiz -swizzle -swizzler -swob -swollen -swollenly -swollenness -swom -swonken -swoon -swooned -swooning -swooningly -swoony -swoop -swooper -swoosh -sword -swordbill -swordcraft -swordfish -swordfisherman -swordfishery -swordfishing -swordick -swording -swordless -swordlet -swordlike -swordmaker -swordmaking -swordman -swordmanship -swordplay -swordplayer -swordproof -swordsman -swordsmanship -swordsmith -swordster -swordstick -swordswoman -swordtail -swordweed -swore -sworn -swosh -swot -swotter -swounds -swow -swum -swung -swungen -swure -syagush -sybarism -sybarist -Sybarital -Sybaritan -Sybarite -Sybaritic -Sybaritical -Sybaritically -Sybaritish -sybaritism -Sybil -sybotic -sybotism -sycamine -sycamore -syce -sycee -sychnocarpous -sycock -sycoma -sycomancy -Sycon -Syconaria -syconarian -syconate -Sycones -syconid -Syconidae -syconium -syconoid -syconus -sycophancy -sycophant -sycophantic -sycophantical -sycophantically -sycophantish -sycophantishly -sycophantism -sycophantize -sycophantry -sycosiform -sycosis -Syd -Sydneian -Sydneyite -sye -Syed -syenite -syenitic -syenodiorite -syenogabbro -sylid -syllab -syllabarium -syllabary -syllabatim -syllabation -syllabe -syllabi -syllabic -syllabical -syllabically -syllabicate -syllabication -syllabicness -syllabification -syllabify -syllabism -syllabize -syllable -syllabled -syllabus -syllepsis -sylleptic -sylleptical -sylleptically -Syllidae -syllidian -Syllis -sylloge -syllogism -syllogist -syllogistic -syllogistical -syllogistically -syllogistics -syllogization -syllogize -syllogizer -sylph -sylphic -sylphid -sylphidine -sylphish -sylphize -sylphlike -Sylphon -sylphy -sylva -sylvae -sylvage -Sylvan -sylvan -sylvanesque -sylvanite -sylvanitic -sylvanity -sylvanize -sylvanly -sylvanry -sylvate -sylvatic -Sylvester -sylvester -sylvestral -sylvestrene -Sylvestrian -sylvestrian -Sylvestrine -Sylvia -Sylvian -sylvic -Sylvicolidae -sylvicoline -Sylviidae -Sylviinae -sylviine -sylvine -sylvinite -sylvite -symbasic -symbasical -symbasically -symbasis -symbiogenesis -symbiogenetic -symbiogenetically -symbion -symbiont -symbiontic -symbionticism -symbiosis -symbiot -symbiote -symbiotic -symbiotically -symbiotics -symbiotism -symbiotrophic -symblepharon -symbol -symbolaeography -symbolater -symbolatrous -symbolatry -symbolic -symbolical -symbolically -symbolicalness -symbolicly -symbolics -symbolism -symbolist -symbolistic -symbolistical -symbolistically -symbolization -symbolize -symbolizer -symbolofideism -symbological -symbologist -symbolography -symbology -symbololatry -symbolology -symbolry -symbouleutic -symbranch -Symbranchia -symbranchiate -symbranchoid -symbranchous -symmachy -symmedian -symmelia -symmelian -symmelus -symmetalism -symmetral -symmetric -symmetrical -symmetricality -symmetrically -symmetricalness -symmetrist -symmetrization -symmetrize -symmetroid -symmetrophobia -symmetry -symmorphic -symmorphism -sympalmograph -sympathectomize -sympathectomy -sympathetectomy -sympathetic -sympathetical -sympathetically -sympatheticism -sympatheticity -sympatheticness -sympatheticotonia -sympatheticotonic -sympathetoblast -sympathicoblast -sympathicotonia -sympathicotonic -sympathicotripsy -sympathism -sympathist -sympathize -sympathizer -sympathizing -sympathizingly -sympathoblast -sympatholysis -sympatholytic -sympathomimetic -sympathy -sympatric -sympatry -Sympetalae -sympetalous -Symphalangus -symphenomena -symphenomenal -symphile -symphilic -symphilism -symphilous -symphily -symphogenous -symphonetic -symphonia -symphonic -symphonically -symphonion -symphonious -symphoniously -symphonist -symphonize -symphonous -symphony -Symphoricarpos -symphoricarpous -symphrase -symphronistic -symphyantherous -symphycarpous -Symphyla -symphylan -symphyllous -symphylous -symphynote -symphyogenesis -symphyogenetic -symphyostemonous -symphyseal -symphyseotomy -symphysial -symphysian -symphysic -symphysion -symphysiotomy -symphysis -symphysodactylia -symphysotomy -symphysy -Symphyta -symphytic -symphytically -symphytism -symphytize -Symphytum -sympiesometer -symplasm -symplectic -Symplegades -symplesite -Symplocaceae -symplocaceous -Symplocarpus -symploce -Symplocos -sympode -sympodia -sympodial -sympodially -sympodium -sympolity -symposia -symposiac -symposiacal -symposial -symposiarch -symposiast -symposiastic -symposion -symposium -symptom -symptomatic -symptomatical -symptomatically -symptomatics -symptomatize -symptomatography -symptomatological -symptomatologically -symptomatology -symptomical -symptomize -symptomless -symptosis -symtomology -synacme -synacmic -synacmy -synactic -synadelphite -synaeresis -synagogal -synagogian -synagogical -synagogism -synagogist -synagogue -synalgia -synalgic -synallactic -synallagmatic -synaloepha -synanastomosis -synange -synangia -synangial -synangic -synangium -synanthema -synantherological -synantherologist -synantherology -synantherous -synanthesis -synanthetic -synanthic -synanthous -synanthrose -synanthy -synaphea -synaposematic -synapse -synapses -Synapsida -synapsidan -synapsis -synaptai -synaptase -synapte -synaptene -Synaptera -synapterous -synaptic -synaptical -synaptically -synapticula -synapticulae -synapticular -synapticulate -synapticulum -Synaptosauria -synaptychus -synarchical -synarchism -synarchy -synarmogoid -Synarmogoidea -synarquism -synartesis -synartete -synartetic -synarthrodia -synarthrodial -synarthrodially -synarthrosis -Synascidiae -synascidian -synastry -synaxar -synaxarion -synaxarist -synaxarium -synaxary -synaxis -sync -Syncarida -syncarp -syncarpia -syncarpium -syncarpous -syncarpy -syncategorematic -syncategorematical -syncategorematically -syncategoreme -syncephalic -syncephalus -syncerebral -syncerebrum -synch -synchitic -synchondoses -synchondrosial -synchondrosially -synchondrosis -synchondrotomy -synchoresis -synchro -synchroflash -synchromesh -synchronal -synchrone -synchronic -synchronical -synchronically -synchronism -synchronistic -synchronistical -synchronistically -synchronizable -synchronization -synchronize -synchronized -synchronizer -synchronograph -synchronological -synchronology -synchronous -synchronously -synchronousness -synchrony -synchroscope -synchrotron -synchysis -Synchytriaceae -Synchytrium -syncladous -synclastic -synclinal -synclinally -syncline -synclinical -synclinore -synclinorial -synclinorian -synclinorium -synclitic -syncliticism -synclitism -syncoelom -syncopal -syncopate -syncopated -syncopation -syncopator -syncope -syncopic -syncopism -syncopist -syncopize -syncotyledonous -syncracy -syncraniate -syncranterian -syncranteric -syncrasy -syncretic -syncretical -syncreticism -syncretion -syncretism -syncretist -syncretistic -syncretistical -syncretize -syncrisis -Syncrypta -syncryptic -syncytia -syncytial -syncytioma -syncytiomata -syncytium -syndactyl -syndactylia -syndactylic -syndactylism -syndactylous -syndactyly -syndectomy -synderesis -syndesis -syndesmectopia -syndesmitis -syndesmography -syndesmology -syndesmoma -Syndesmon -syndesmoplasty -syndesmorrhaphy -syndesmosis -syndesmotic -syndesmotomy -syndetic -syndetical -syndetically -syndic -syndical -syndicalism -syndicalist -syndicalistic -syndicalize -syndicate -syndicateer -syndication -syndicator -syndicship -syndoc -syndrome -syndromic -syndyasmian -Syndyoceras -syne -synecdoche -synecdochic -synecdochical -synecdochically -synecdochism -synechia -synechiological -synechiology -synechological -synechology -synechotomy -synechthran -synechthry -synecology -synecphonesis -synectic -synecticity -Synedra -synedral -Synedria -synedria -synedrial -synedrian -Synedrion -synedrion -Synedrium -synedrium -synedrous -syneidesis -synema -synemmenon -synenergistic -synenergistical -synenergistically -synentognath -Synentognathi -synentognathous -syneresis -synergastic -synergetic -synergia -synergic -synergically -synergid -synergidae -synergidal -synergism -synergist -synergistic -synergistical -synergistically -synergize -synergy -synerize -synesis -synesthesia -synesthetic -synethnic -syngamic -syngamous -syngamy -Syngenesia -syngenesian -syngenesious -syngenesis -syngenetic -syngenic -syngenism -syngenite -Syngnatha -Syngnathi -syngnathid -Syngnathidae -syngnathoid -syngnathous -Syngnathus -syngraph -synizesis -synkaryon -synkatathesis -synkinesia -synkinesis -synkinetic -synneurosis -synneusis -synochoid -synochus -synocreate -synod -synodal -synodalian -synodalist -synodally -synodical -synodically -synodist -synodite -synodontid -Synodontidae -synodontoid -synodsman -Synodus -synoecete -synoeciosis -synoecious -synoeciously -synoeciousness -synoecism -synoecize -synoecy -synoicous -synomosy -synonym -synonymatic -synonymic -synonymical -synonymicon -synonymics -synonymist -synonymity -synonymize -synonymous -synonymously -synonymousness -synonymy -synophthalmus -synopses -synopsis -synopsize -synopsy -synoptic -synoptical -synoptically -Synoptist -synoptist -Synoptistic -synorchidism -synorchism -synorthographic -synosteology -synosteosis -synostose -synostosis -synostotic -synostotical -synostotically -synousiacs -synovectomy -synovia -synovial -synovially -synoviparous -synovitic -synovitis -synpelmous -synrhabdosome -synsacral -synsacrum -synsepalous -synspermous -synsporous -syntactic -syntactical -syntactically -syntactician -syntactics -syntagma -syntan -syntasis -syntax -syntaxis -syntaxist -syntechnic -syntectic -syntelome -syntenosis -synteresis -syntexis -syntheme -synthermal -syntheses -synthesis -synthesism -synthesist -synthesization -synthesize -synthesizer -synthete -synthetic -synthetical -synthetically -syntheticism -synthetism -synthetist -synthetization -synthetize -synthetizer -synthol -synthroni -synthronoi -synthronos -synthronus -syntomia -syntomy -syntone -syntonic -syntonical -syntonically -syntonin -syntonization -syntonize -syntonizer -syntonolydian -syntonous -syntony -syntripsis -syntrope -syntrophic -syntropic -syntropical -syntropy -syntype -syntypic -syntypicism -Synura -synusia -synusiast -syodicon -sypher -syphilide -syphilidography -syphilidologist -syphiliphobia -syphilis -syphilitic -syphilitically -syphilization -syphilize -syphiloderm -syphilodermatous -syphilogenesis -syphilogeny -syphilographer -syphilography -syphiloid -syphilologist -syphilology -syphiloma -syphilomatous -syphilophobe -syphilophobia -syphilophobic -syphilopsychosis -syphilosis -syphilous -Syracusan -syre -Syriac -Syriacism -Syriacist -Syrian -Syrianic -Syrianism -Syrianize -Syriarch -Syriasm -syringa -syringadenous -syringe -syringeal -syringeful -syringes -syringin -syringitis -syringium -syringocoele -syringomyelia -syringomyelic -syringotome -syringotomy -syrinx -Syriologist -Syrma -syrma -Syrmian -Syrnium -Syrophoenician -syrphian -syrphid -Syrphidae -syrt -syrtic -Syrtis -syrup -syruped -syruper -syruplike -syrupy -Syryenian -syssarcosis -syssel -sysselman -syssiderite -syssitia -syssition -systaltic -systasis -systatic -system -systematic -systematical -systematicality -systematically -systematician -systematicness -systematics -systematism -systematist -systematization -systematize -systematizer -systematology -systemed -systemic -systemically -systemist -systemizable -systemization -systemize -systemizer -systemless -systemproof -systemwise -systilius -systolated -systole -systolic -systyle -systylous -Syun -syzygetic -syzygetically -syzygial -syzygium -syzygy -szaibelyite -Szekler -szlachta -szopelka -T -t -ta -taa -Taal -Taalbond -taar -Tab -tab -tabacin -tabacosis -tabacum -tabanid -Tabanidae -tabaniform -tabanuco -Tabanus -tabard -tabarded -tabaret -Tabasco -tabasheer -tabashir -tabaxir -tabbarea -tabber -tabbinet -Tabby -tabby -Tabebuia -tabefaction -tabefy -tabella -Tabellaria -Tabellariaceae -tabellion -taberdar -taberna -tabernacle -tabernacler -tabernacular -Tabernaemontana -tabernariae -tabes -tabescence -tabescent -tabet -tabetic -tabetiform -tabetless -tabic -tabid -tabidly -tabidness -tabific -tabifical -tabinet -Tabira -Tabitha -tabitude -tabla -tablature -table -tableau -tableaux -tablecloth -tableclothwise -tableclothy -tabled -tablefellow -tablefellowship -tableful -tableity -tableland -tableless -tablelike -tablemaid -tablemaker -tablemaking -tableman -tablemate -tabler -tables -tablespoon -tablespoonful -tablet -tabletary -tableware -tablewise -tabling -tablinum -Tabloid -tabloid -tabog -taboo -tabooism -tabooist -taboot -taboparalysis -taboparesis -taboparetic -tabophobia -tabor -taborer -taboret -taborin -Taborite -tabour -tabourer -tabouret -tabret -Tabriz -tabu -tabula -tabulable -tabular -tabulare -tabularium -tabularization -tabularize -tabularly -tabulary -Tabulata -tabulate -tabulated -tabulation -tabulator -tabulatory -tabule -tabuliform -tabut -tacahout -tacamahac -Tacana -Tacanan -Tacca -Taccaceae -taccaceous -taccada -tach -Tachardia -Tachardiinae -tache -tacheless -tacheography -tacheometer -tacheometric -tacheometry -tacheture -tachhydrite -tachibana -Tachina -Tachinaria -tachinarian -tachinid -Tachinidae -tachiol -tachistoscope -tachistoscopic -tachogram -tachograph -tachometer -tachometry -tachoscope -tachycardia -tachycardiac -tachygen -tachygenesis -tachygenetic -tachygenic -tachyglossal -tachyglossate -Tachyglossidae -Tachyglossus -tachygraph -tachygrapher -tachygraphic -tachygraphical -tachygraphically -tachygraphist -tachygraphometer -tachygraphometry -tachygraphy -tachyhydrite -tachyiatry -tachylalia -tachylite -tachylyte -tachylytic -tachymeter -tachymetric -tachymetry -tachyphagia -tachyphasia -tachyphemia -tachyphrasia -tachyphrenia -tachypnea -tachyscope -tachyseism -tachysterol -tachysystole -tachythanatous -tachytomy -tachytype -tacit -Tacitean -tacitly -tacitness -taciturn -taciturnist -taciturnity -taciturnly -tack -tacker -tacket -tackety -tackey -tackiness -tacking -tackingly -tackle -tackled -tackleless -tackleman -tackler -tackless -tackling -tackproof -tacksman -tacky -taclocus -tacmahack -tacnode -Taconian -Taconic -taconite -tacso -Tacsonia -tact -tactable -tactful -tactfully -tactfulness -tactic -tactical -tactically -tactician -tactics -tactile -tactilist -tactility -tactilogical -tactinvariant -taction -tactite -tactive -tactless -tactlessly -tactlessness -tactometer -tactor -tactosol -tactual -tactualist -tactuality -tactually -tactus -tacuacine -Taculli -Tad -tad -tade -Tadjik -Tadousac -tadpole -tadpoledom -tadpolehood -tadpolelike -tadpolism -tae -tael -taen -taenia -taeniacidal -taeniacide -Taeniada -taeniafuge -taenial -taenian -taeniasis -Taeniata -taeniate -taenicide -Taenidia -taenidium -taeniform -taenifuge -taeniiform -Taeniobranchia -taeniobranchiate -Taeniodonta -Taeniodontia -Taeniodontidae -Taenioglossa -taenioglossate -taenioid -taeniosome -Taeniosomi -taeniosomous -taenite -taennin -Taetsia -taffarel -tafferel -taffeta -taffety -taffle -taffrail -Taffy -taffy -taffylike -taffymaker -taffymaking -taffywise -tafia -tafinagh -taft -tafwiz -tag -Tagabilis -Tagakaolo -Tagal -Tagala -Tagalize -Tagalo -Tagalog -tagasaste -Tagassu -Tagassuidae -tagatose -Tagaur -Tagbanua -tagboard -Tagetes -tagetol -tagetone -tagged -tagger -taggle -taggy -Taghlik -tagilite -Tagish -taglet -Tagliacotian -Tagliacozzian -taglike -taglock -tagrag -tagraggery -tagsore -tagtail -tagua -taguan -Tagula -tagwerk -taha -Tahami -taheen -tahil -tahin -Tahiti -Tahitian -tahkhana -Tahltan -tahr -tahseeldar -tahsil -tahsildar -Tahsin -tahua -Tai -tai -taiaha -taich -taiga -taigle -taiglesome -taihoa -taikhana -tail -tailage -tailband -tailboard -tailed -tailender -tailer -tailet -tailfirst -tailflower -tailforemost -tailge -tailhead -tailing -tailings -taille -tailless -taillessly -taillessness -taillie -taillight -taillike -tailor -tailorage -tailorbird -tailorcraft -tailordom -tailoress -tailorhood -tailoring -tailorism -tailorization -tailorize -tailorless -tailorlike -tailorly -tailorman -tailorship -tailorwise -tailory -tailpiece -tailpin -tailpipe -tailrace -tailsman -tailstock -Tailte -tailward -tailwards -tailwise -taily -tailzee -tailzie -taimen -taimyrite -tain -Tainan -Taino -taint -taintable -taintless -taintlessly -taintlessness -taintment -taintor -taintproof -tainture -taintworm -Tainui -taipan -Taipi -Taiping -taipo -tairge -tairger -tairn -taisch -taise -Taisho -taissle -taistrel -taistril -Tait -tait -taiver -taivers -taivert -Taiwanhemp -Taiyal -taj -Tajik -takable -takamaka -Takao -takar -Takayuki -take -takedown -takedownable -takeful -Takelma -taken -taker -Takeuchi -Takhaar -Takhtadjy -Takilman -takin -taking -takingly -takingness -takings -Takitumu -takosis -takt -Taku -taky -takyr -Tal -tal -tala -talabon -talahib -Talaing -talaje -talak -talalgia -Talamanca -Talamancan -talanton -talao -talapoin -talar -talari -talaria -talaric -talayot -talbot -talbotype -talc -talcer -Talcher -talcky -talclike -talcochlorite -talcoid -talcomicaceous -talcose -talcous -talcum -tald -tale -talebearer -talebearing -talebook -talecarrier -talecarrying -taled -taleful -Talegallinae -Talegallus -talemaster -talemonger -talemongering -talent -talented -talentless -talepyet -taler -tales -talesman -taleteller -taletelling -tali -Taliacotian -taliage -taliation -taliera -taligrade -Talinum -talion -talionic -talipat -taliped -talipedic -talipes -talipomanus -talipot -talis -talisay -Talishi -talisman -talismanic -talismanical -talismanically -talismanist -talite -Talitha -talitol -talk -talkability -talkable -talkathon -talkative -talkatively -talkativeness -talker -talkfest -talkful -talkie -talkiness -talking -talkworthy -talky -tall -tallage -tallageability -tallageable -tallboy -tallegalane -taller -tallero -talles -tallet -talliable -talliage -talliar -talliate -tallier -tallis -tallish -tallit -tallith -tallness -talloel -tallote -tallow -tallowberry -tallower -tallowiness -tallowing -tallowish -tallowlike -tallowmaker -tallowmaking -tallowman -tallowroot -tallowweed -tallowwood -tallowy -tallwood -tally -tallyho -tallyman -tallymanship -tallywag -tallywalka -tallywoman -talma -talmouse -Talmud -Talmudic -Talmudical -Talmudism -Talmudist -Talmudistic -Talmudistical -Talmudization -Talmudize -talocalcaneal -talocalcanean -talocrural -talofibular -talon -talonavicular -taloned -talonic -talonid -taloscaphoid -talose -talotibial -Talpa -talpacoti -talpatate -talpetate -talpicide -talpid -Talpidae -talpiform -talpify -talpine -talpoid -talthib -Taltushtuntude -Taluche -Taluhet -taluk -taluka -talukdar -talukdari -talus -taluto -talwar -talwood -Talyshin -tam -Tama -tamability -tamable -tamableness -tamably -Tamaceae -Tamachek -tamacoare -tamale -Tamanac -Tamanaca -Tamanaco -tamandu -tamandua -tamanoas -tamanoir -tamanowus -tamanu -Tamara -tamara -tamarack -tamaraite -tamarao -Tamaricaceae -tamaricaceous -tamarin -tamarind -Tamarindus -tamarisk -Tamarix -Tamaroa -tamas -tamasha -Tamashek -Tamaulipecan -tambac -tambaroora -tamber -tambo -tamboo -Tambookie -tambookie -tambor -Tambouki -tambour -tamboura -tambourer -tambouret -tambourgi -tambourin -tambourinade -tambourine -tambourist -tambreet -Tambuki -tamburan -tamburello -Tame -tame -tamehearted -tameheartedness -tamein -tameless -tamelessly -tamelessness -tamely -tameness -tamer -Tamerlanism -Tamias -tamidine -Tamil -Tamilian -Tamilic -tamis -tamise -tamlung -Tammanial -Tammanize -Tammany -Tammanyism -Tammanyite -Tammanyize -tammie -tammock -Tammy -tammy -Tamonea -Tamoyo -tamp -tampala -tampan -tampang -tamper -tamperer -tamperproof -tampin -tamping -tampion -tampioned -tampon -tamponade -tamponage -tamponment -tampoon -Tamul -Tamulian -Tamulic -Tamus -Tamworth -Tamzine -tan -tana -tanacetin -tanacetone -Tanacetum -tanacetyl -tanach -tanager -Tanagra -Tanagraean -Tanagridae -tanagrine -tanagroid -Tanaidacea -tanaist -tanak -Tanaka -Tanala -tanan -tanbark -tanbur -tancel -Tanchelmian -tanchoir -tandan -tandem -tandemer -tandemist -tandemize -tandemwise -tandle -tandour -Tandy -tane -tanekaha -Tang -tang -tanga -Tangaloa -tangalung -tangantangan -Tangaridae -Tangaroa -Tangaroan -tanged -tangeite -tangelo -tangence -tangency -tangent -tangental -tangentally -tangential -tangentiality -tangentially -tangently -tanger -Tangerine -tangfish -tangham -tanghan -tanghin -Tanghinia -tanghinin -tangi -tangibile -tangibility -tangible -tangibleness -tangibly -tangie -Tangier -tangilin -Tangipahoa -tangka -tanglad -tangle -tangleberry -tanglefish -tanglefoot -tanglement -tangleproof -tangler -tangleroot -tanglesome -tangless -tanglewrack -tangling -tanglingly -tangly -tango -tangoreceptor -tangram -tangs -tangue -tanguile -tangum -tangun -Tangut -tangy -tanh -tanha -tanhouse -tania -tanica -tanier -tanist -tanistic -tanistry -tanistship -Tanite -Tanitic -tanjib -tanjong -tank -tanka -tankage -tankah -tankard -tanked -tanker -tankerabogus -tankert -tankette -tankful -tankle -tankless -tanklike -tankmaker -tankmaking -tankman -tankodrome -tankroom -tankwise -tanling -tannable -tannage -tannaic -tannaim -tannaitic -tannalbin -tannase -tannate -tanned -tanner -tannery -tannic -tannide -tanniferous -tannin -tannined -tanning -tanninlike -tannocaffeic -tannogallate -tannogallic -tannogelatin -tannogen -tannoid -tannometer -tannyl -Tano -tanoa -Tanoan -tanproof -tanquam -Tanquelinian -tanquen -tanrec -tanstuff -tansy -tantadlin -tantafflin -tantalate -Tantalean -Tantalian -Tantalic -tantalic -tantaliferous -tantalifluoride -tantalite -tantalization -tantalize -tantalizer -tantalizingly -tantalizingness -tantalofluoride -tantalum -Tantalus -tantamount -tantara -tantarabobus -tantarara -tanti -tantivy -tantle -Tantony -tantra -tantric -tantrik -tantrism -tantrist -tantrum -tantum -tanwood -tanworks -Tanya -tanyard -Tanyoan -Tanystomata -tanystomatous -tanystome -tanzeb -tanzib -Tanzine -tanzy -Tao -tao -Taoism -Taoist -Taoistic -Taonurus -Taos -taotai -taoyin -tap -Tapa -tapa -Tapachula -Tapachulteca -tapacolo -tapaculo -Tapacura -tapadera -tapadero -Tapajo -tapalo -tapamaker -tapamaking -tapas -tapasvi -Tape -tape -Tapeats -tapeinocephalic -tapeinocephalism -tapeinocephaly -tapeless -tapelike -tapeline -tapemaker -tapemaking -tapeman -tapen -taper -taperbearer -tapered -taperer -tapering -taperingly -taperly -tapermaker -tapermaking -taperness -taperwise -tapesium -tapestring -tapestry -tapestrylike -tapet -tapetal -tapete -tapeti -tapetless -tapetum -tapework -tapeworm -taphephobia -taphole -taphouse -Taphria -Taphrina -Taphrinaceae -tapia -Tapijulapane -tapinceophalism -tapinocephalic -tapinocephaly -Tapinoma -tapinophobia -tapinophoby -tapinosis -tapioca -tapir -Tapiridae -tapiridian -tapirine -Tapiro -tapiroid -Tapirus -tapis -tapism -tapist -taplash -taplet -Tapleyism -tapmost -tapnet -tapoa -Taposa -tapoun -tappa -tappable -tappableness -tappall -tappaul -tappen -tapper -tapperer -Tappertitian -tappet -tappietoorie -tapping -tappoon -Taprobane -taproom -taproot -taprooted -taps -tapster -tapsterlike -tapsterly -tapstress -tapu -tapul -Tapuya -Tapuyan -Tapuyo -taqua -tar -tara -tarabooka -taraf -tarafdar -tarage -Tarahumar -Tarahumara -Tarahumare -Tarahumari -Tarai -tarairi -tarakihi -Taraktogenos -taramellite -Taramembe -Taranchi -tarand -Tarandean -Tarandian -tarantara -tarantass -tarantella -tarantism -tarantist -tarantula -tarantular -tarantulary -tarantulated -tarantulid -Tarantulidae -tarantulism -tarantulite -tarantulous -tarapatch -taraph -tarapin -Tarapon -Tarasc -Tarascan -Tarasco -tarassis -tarata -taratah -taratantara -taratantarize -tarau -taraxacerin -taraxacin -Taraxacum -Tarazed -tarbadillo -tarbet -tarboard -tarbogan -tarboggin -tarboosh -tarbooshed -tarboy -tarbrush -tarbush -tarbuttite -Tardenoisian -Tardigrada -tardigrade -tardigradous -tardily -tardiness -tarditude -tardive -tardle -tardy -tare -tarea -tarefa -tarefitch -tarentala -tarente -Tarentine -tarentism -tarentola -tarepatch -Tareq -tarfa -tarflower -targe -targeman -targer -target -targeted -targeteer -targetlike -targetman -Targum -Targumic -Targumical -Targumist -Targumistic -Targumize -Tarheel -Tarheeler -tarhood -tari -Tariana -tarie -tariff -tariffable -tariffication -tariffism -tariffist -tariffite -tariffize -tariffless -tarin -Tariri -tariric -taririnic -tarish -Tarkalani -Tarkani -tarkashi -tarkeean -tarkhan -tarlatan -tarlataned -tarletan -tarlike -tarltonize -Tarmac -tarmac -tarman -Tarmi -tarmined -tarn -tarnal -tarnally -tarnation -tarnish -tarnishable -tarnisher -tarnishment -tarnishproof -tarnlike -tarnside -taro -taroc -tarocco -tarok -taropatch -tarot -tarp -tarpan -tarpaulin -tarpaulinmaker -Tarpeia -Tarpeian -tarpon -tarpot -tarpum -Tarquin -Tarquinish -tarr -tarrack -tarradiddle -tarradiddler -tarragon -tarragona -tarras -tarrass -Tarrateen -Tarratine -tarred -tarrer -tarri -tarriance -tarrie -tarrier -tarrify -tarrily -tarriness -tarrish -tarrock -tarrow -tarry -tarrying -tarryingly -tarryingness -tars -tarsadenitis -tarsal -tarsale -tarsalgia -tarse -tarsectomy -tarsectopia -tarsi -tarsia -tarsier -Tarsiidae -tarsioid -Tarsipedidae -Tarsipedinae -Tarsipes -tarsitis -Tarsius -tarsochiloplasty -tarsoclasis -tarsomalacia -tarsome -tarsometatarsal -tarsometatarsus -tarsonemid -Tarsonemidae -Tarsonemus -tarsophalangeal -tarsophyma -tarsoplasia -tarsoplasty -tarsoptosis -tarsorrhaphy -tarsotarsal -tarsotibal -tarsotomy -tarsus -tart -tartago -Tartan -tartan -tartana -tartane -Tartar -tartar -tartarated -Tartarean -Tartareous -tartareous -tartaret -Tartarian -Tartaric -tartaric -Tartarin -tartarish -Tartarism -Tartarization -tartarization -Tartarize -tartarize -Tartarized -Tartarlike -tartarly -Tartarology -tartarous -tartarproof -tartarum -Tartarus -Tartary -tartemorion -tarten -tartish -tartishly -tartle -tartlet -tartly -tartness -tartramate -tartramic -tartramide -tartrate -tartrated -tartratoferric -tartrazine -tartrazinic -tartro -tartronate -tartronic -tartronyl -tartronylurea -tartrous -tartryl -tartrylic -Tartufe -tartufery -tartufian -tartufish -tartufishly -tartufism -tartwoman -Taruma -Tarumari -tarve -Tarvia -tarweed -tarwhine -tarwood -tarworks -taryard -Taryba -Tarzan -Tarzanish -tasajo -tascal -tasco -taseometer -tash -tasheriff -tashie -tashlik -Tashnagist -Tashnakist -tashreef -tashrif -Tasian -tasimeter -tasimetric -tasimetry -task -taskage -tasker -taskit -taskless -tasklike -taskmaster -taskmastership -taskmistress -tasksetter -tasksetting -taskwork -taslet -Tasmanian -tasmanite -Tass -tass -tassago -tassah -tassal -tassard -tasse -tassel -tasseler -tasselet -tasselfish -tassellus -tasselmaker -tasselmaking -tassely -tasser -tasset -tassie -tassoo -tastable -tastableness -tastably -taste -tasteable -tasteableness -tasteably -tasted -tasteful -tastefully -tastefulness -tastekin -tasteless -tastelessly -tastelessness -tasten -taster -tastily -tastiness -tasting -tastingly -tasty -tasu -Tat -tat -Tatar -Tatarian -Tataric -Tatarization -Tatarize -Tatary -tataupa -tatbeb -tatchy -tate -tater -Tates -tath -Tatian -Tatianist -tatie -tatinek -tatler -tatou -tatouay -tatpurusha -Tatsanottine -tatsman -tatta -tatter -tatterdemalion -tatterdemalionism -tatterdemalionry -tattered -tatteredly -tatteredness -tatterly -tatterwallop -tattery -tatther -tattied -tatting -tattle -tattlement -tattler -tattlery -tattletale -tattling -tattlingly -tattoo -tattooage -tattooer -tattooing -tattooist -tattooment -tattva -tatty -Tatu -tatu -tatukira -Tatusia -Tatusiidae -tau -Taube -Tauchnitz -taught -taula -Tauli -taum -taun -Taungthu -taunt -taunter -taunting -tauntingly -tauntingness -Taunton -tauntress -taupe -taupo -taupou -taur -tauranga -taurean -Tauri -Taurian -taurian -Tauric -tauric -tauricide -tauricornous -Taurid -Tauridian -tauriferous -tauriform -taurine -Taurini -taurite -taurobolium -tauroboly -taurocephalous -taurocholate -taurocholic -taurocol -taurocolla -Tauroctonus -taurodont -tauroesque -taurokathapsia -taurolatry -tauromachian -tauromachic -tauromachy -tauromorphic -tauromorphous -taurophile -taurophobe -Tauropolos -Taurotragus -Taurus -tauryl -taut -tautaug -tauted -tautegorical -tautegory -tauten -tautirite -tautit -tautly -tautness -tautochrone -tautochronism -tautochronous -tautog -tautologic -tautological -tautologically -tautologicalness -tautologism -tautologist -tautologize -tautologizer -tautologous -tautologously -tautology -tautomer -tautomeral -tautomeric -tautomerism -tautomerizable -tautomerization -tautomerize -tautomery -tautometer -tautometric -tautometrical -tautomorphous -tautonym -tautonymic -tautonymy -tautoousian -tautoousious -tautophonic -tautophonical -tautophony -tautopodic -tautopody -tautosyllabic -tautotype -tautourea -tautousian -tautousious -tautozonal -tautozonality -tav -Tavast -Tavastian -Tave -tave -tavell -taver -tavern -taverner -tavernize -tavernless -tavernlike -tavernly -tavernous -tavernry -tavernwards -tavers -tavert -Tavghi -tavistockite -tavola -tavolatite -Tavy -taw -tawa -tawdered -tawdrily -tawdriness -tawdry -tawer -tawery -Tawgi -tawie -tawite -tawkee -tawkin -tawn -tawney -tawnily -tawniness -tawnle -tawny -tawpi -tawpie -taws -tawse -tawtie -tax -taxability -taxable -taxableness -taxably -Taxaceae -taxaceous -taxameter -taxaspidean -taxation -taxational -taxative -taxatively -taxator -taxeater -taxeating -taxed -taxeme -taxemic -taxeopod -Taxeopoda -taxeopodous -taxeopody -taxer -taxgatherer -taxgathering -taxi -taxiable -taxiarch -taxiauto -taxibus -taxicab -Taxidea -taxidermal -taxidermic -taxidermist -taxidermize -taxidermy -taximan -taximeter -taximetered -taxine -taxing -taxingly -taxinomic -taxinomist -taxinomy -taxiplane -taxis -taxite -taxitic -taxless -taxlessly -taxlessness -taxman -Taxodiaceae -Taxodium -taxodont -taxology -taxometer -taxon -taxonomer -taxonomic -taxonomical -taxonomically -taxonomist -taxonomy -taxor -taxpaid -taxpayer -taxpaying -Taxus -taxwax -taxy -tay -Tayassu -Tayassuidae -tayer -Taygeta -tayir -Taylor -Taylorism -Taylorite -taylorite -Taylorize -tayra -Tayrona -taysaam -tazia -Tcawi -tch -tchai -tcharik -tchast -tche -tcheirek -Tcheka -Tcherkess -tchervonets -tchervonetz -Tchetchentsish -Tchetnitsi -Tchi -tchick -tchu -Tchwi -tck -Td -te -tea -teaberry -teaboard -teabox -teaboy -teacake -teacart -teach -teachability -teachable -teachableness -teachably -teache -teacher -teacherage -teacherdom -teacheress -teacherhood -teacherless -teacherlike -teacherly -teachership -teachery -teaching -teachingly -teachless -teachment -teachy -teacup -teacupful -tead -teadish -teaer -teaey -teagardeny -teagle -Teague -Teagueland -Teaguelander -teahouse -teaish -teaism -teak -teakettle -teakwood -teal -tealeafy -tealery -tealess -teallite -team -teamaker -teamaking -teaman -teameo -teamer -teaming -teamland -teamless -teamman -teammate -teamsman -teamster -teamwise -teamwork -tean -teanal -teap -teapot -teapotful -teapottykin -teapoy -tear -tearable -tearableness -tearably -tearage -tearcat -teardown -teardrop -tearer -tearful -tearfully -tearfulness -tearing -tearless -tearlessly -tearlessness -tearlet -tearlike -tearoom -tearpit -tearproof -tearstain -teart -tearthroat -tearthumb -teary -teasable -teasableness -teasably -tease -teaseable -teaseableness -teaseably -teasehole -teasel -teaseler -teaseller -teasellike -teaselwort -teasement -teaser -teashop -teasiness -teasing -teasingly -teasler -teaspoon -teaspoonful -teasy -teat -teataster -teated -teatfish -teathe -teather -teatime -teatlike -teatling -teatman -teaty -teave -teaware -teaze -teazer -tebbet -Tebet -Tebeth -Tebu -tec -Teca -teca -tecali -Tech -tech -techily -techiness -technetium -technic -technica -technical -technicalism -technicalist -technicality -technicalize -technically -technicalness -technician -technicism -technicist -technicological -technicology -Technicolor -technicon -technics -techniphone -technique -techniquer -technism -technist -technocausis -technochemical -technochemistry -technocracy -technocrat -technocratic -technographer -technographic -technographical -technographically -technography -technolithic -technologic -technological -technologically -technologist -technologue -technology -technonomic -technonomy -technopsychology -techous -techy -teck -Tecla -tecnoctonia -tecnology -Teco -Tecoma -tecomin -tecon -Tecpanec -tectal -tectibranch -Tectibranchia -tectibranchian -Tectibranchiata -tectibranchiate -tectiform -tectocephalic -tectocephaly -tectological -tectology -Tectona -tectonic -tectonics -tectorial -tectorium -Tectosages -tectosphere -tectospinal -Tectospondyli -tectospondylic -tectospondylous -tectrices -tectricial -tectum -tecum -tecuma -Tecuna -Ted -ted -Teda -tedder -Teddy -tedescan -tedge -tediosity -tedious -tediously -tediousness -tediousome -tedisome -tedium -tee -teedle -teel -teem -teemer -teemful -teemfulness -teeming -teemingly -teemingness -teemless -teems -teen -teenage -teenet -teens -teensy -teenty -teeny -teer -teerer -teest -Teeswater -teet -teetaller -teetan -teeter -teeterboard -teeterer -teetertail -teeth -teethache -teethbrush -teethe -teethful -teethily -teething -teethless -teethlike -teethridge -teethy -teeting -teetotal -teetotaler -teetotalism -teetotalist -teetotally -teetotum -teetotumism -teetotumize -teetotumwise -teety -teevee -teewhaap -teff -teg -Tegean -Tegeticula -tegmen -tegmental -tegmentum -tegmina -tegminal -Tegmine -tegua -teguexin -Teguima -tegula -tegular -tegularly -tegulated -tegumen -tegument -tegumental -tegumentary -tegumentum -tegurium -Teheran -tehseel -tehseeldar -tehsil -tehsildar -Tehuantepecan -Tehueco -Tehuelche -Tehuelchean -Tehuelet -Teian -teicher -teiglech -Teiidae -teil -teind -teindable -teinder -teinland -teinoscope -teioid -Teiresias -Tejon -tejon -teju -tekiah -Tekintsi -Tekke -tekke -tekken -Tekkintzi -teknonymous -teknonymy -tektite -tekya -telacoustic -telakucha -telamon -telang -telangiectasia -telangiectasis -telangiectasy -telangiectatic -telangiosis -Telanthera -telar -telarian -telary -telautogram -telautograph -telautographic -telautographist -telautography -telautomatic -telautomatically -telautomatics -Telchines -Telchinic -tele -teleanemograph -teleangiectasia -telebarograph -telebarometer -telecast -telecaster -telechemic -telechirograph -telecinematography -telecode -telecommunication -telecryptograph -telectroscope -teledendrion -teledendrite -teledendron -teledu -telega -telegenic -Telegn -telegnosis -telegnostic -telegonic -telegonous -telegony -telegram -telegrammatic -telegrammic -telegraph -telegraphee -telegrapheme -telegrapher -telegraphese -telegraphic -telegraphical -telegraphically -telegraphist -telegraphone -telegraphophone -telegraphoscope -telegraphy -Telegu -telehydrobarometer -Telei -Teleia -teleianthous -teleiosis -telekinematography -telekinesis -telekinetic -telelectric -telelectrograph -telelectroscope -telemanometer -Telemark -telemark -Telembi -telemechanic -telemechanics -telemechanism -telemetacarpal -telemeteorograph -telemeteorographic -telemeteorography -telemeter -telemetric -telemetrical -telemetrist -telemetrograph -telemetrographic -telemetrography -telemetry -telemotor -telencephal -telencephalic -telencephalon -telenergic -telenergy -teleneurite -teleneuron -Telenget -telengiscope -Telenomus -teleobjective -Teleocephali -teleocephalous -Teleoceras -Teleodesmacea -teleodesmacean -teleodesmaceous -teleodont -teleologic -teleological -teleologically -teleologism -teleologist -teleology -teleometer -teleophobia -teleophore -teleophyte -teleoptile -teleorganic -teleoroentgenogram -teleoroentgenography -teleosaur -teleosaurian -Teleosauridae -Teleosaurus -teleost -teleostean -Teleostei -teleosteous -teleostomate -teleostome -Teleostomi -teleostomian -teleostomous -teleotemporal -teleotrocha -teleozoic -teleozoon -telepathic -telepathically -telepathist -telepathize -telepathy -telepheme -telephone -telephoner -telephonic -telephonical -telephonically -telephonist -telephonograph -telephonographic -telephony -telephote -telephoto -telephotograph -telephotographic -telephotography -Telephus -telepicture -teleplasm -teleplasmic -teleplastic -telepost -teleprinter -teleradiophone -teleran -telergic -telergical -telergically -telergy -telescope -telescopic -telescopical -telescopically -telescopiform -telescopist -Telescopium -telescopy -telescriptor -teleseism -teleseismic -teleseismology -teleseme -telesia -telesis -telesmeter -telesomatic -telespectroscope -telestereograph -telestereography -telestereoscope -telesterion -telesthesia -telesthetic -telestial -telestic -telestich -teletactile -teletactor -teletape -teletherapy -telethermogram -telethermograph -telethermometer -telethermometry -telethon -teletopometer -teletranscription -Teletype -teletype -teletyper -teletypesetter -teletypewriter -teletyping -Teleut -teleuto -teleutoform -teleutosorus -teleutospore -teleutosporic -teleutosporiferous -teleview -televiewer -televise -television -televisional -televisionary -televisor -televisual -televocal -televox -telewriter -Telfairia -telfairic -telfer -telferage -telford -telfordize -telharmonic -telharmonium -telharmony -teli -telial -telic -telical -telically -teliferous -Telinga -teliosorus -teliospore -teliosporic -teliosporiferous -teliostage -telium -tell -tellable -tellach -tellee -teller -tellership -telligraph -Tellima -Tellina -Tellinacea -tellinacean -tellinaceous -telling -tellingly -Tellinidae -tellinoid -tellsome -tellt -telltale -telltalely -telltruth -tellural -tellurate -telluret -tellureted -tellurethyl -telluretted -tellurhydric -tellurian -telluric -telluride -telluriferous -tellurion -tellurism -tellurist -tellurite -tellurium -tellurize -telluronium -tellurous -telmatological -telmatology -teloblast -teloblastic -telocentric -telodendrion -telodendron -telodynamic -telokinesis -telolecithal -telolemma -telome -telomic -telomitic -telonism -Teloogoo -Telopea -telophase -telophragma -telopsis -teloptic -telosynapsis -telosynaptic -telosynaptist -teloteropathic -teloteropathically -teloteropathy -Telotremata -telotrematous -telotroch -telotrocha -telotrochal -telotrochous -telotrophic -telotype -telpath -telpher -telpherage -telpherman -telpherway -telson -telsonic -telt -Telugu -telurgy -telyn -Tema -temacha -temalacatl -Teman -teman -Temanite -tembe -temblor -Tembu -temenos -temerarious -temerariously -temerariousness -temeritous -temerity -temerous -temerously -temerousness -temiak -temin -Temiskaming -Temne -Temnospondyli -temnospondylous -temp -Tempe -Tempean -temper -tempera -temperability -temperable -temperably -temperality -temperament -temperamental -temperamentalist -temperamentally -temperamented -temperance -temperate -temperately -temperateness -temperative -temperature -tempered -temperedly -temperedness -temperer -temperish -temperless -tempersome -tempery -tempest -tempestical -tempestive -tempestively -tempestivity -tempestuous -tempestuously -tempestuousness -tempesty -tempi -Templar -templar -templardom -templarism -templarlike -templarlikeness -templary -template -templater -temple -templed -templeful -templeless -templelike -templet -Templetonia -templeward -templize -tempo -tempora -temporal -temporale -temporalism -temporalist -temporality -temporalize -temporally -temporalness -temporalty -temporaneous -temporaneously -temporaneousness -temporarily -temporariness -temporary -temporator -temporization -temporizer -temporizing -temporizingly -temporoalar -temporoauricular -temporocentral -temporocerebellar -temporofacial -temporofrontal -temporohyoid -temporomalar -temporomandibular -temporomastoid -temporomaxillary -temporooccipital -temporoparietal -temporopontine -temporosphenoid -temporosphenoidal -temporozygomatic -tempre -temprely -tempt -temptability -temptable -temptableness -temptation -temptational -temptationless -temptatious -temptatory -tempter -tempting -temptingly -temptingness -temptress -Tempyo -temse -temser -temulence -temulency -temulent -temulentive -temulently -ten -tenability -tenable -tenableness -tenably -tenace -tenacious -tenaciously -tenaciousness -tenacity -tenaculum -tenai -tenaille -tenaillon -Tenaktak -tenancy -tenant -tenantable -tenantableness -tenanter -tenantism -tenantless -tenantlike -tenantry -tenantship -tench -tenchweed -Tencteri -tend -tendance -tendant -tendence -tendency -tendent -tendential -tendentious -tendentiously -tendentiousness -tender -tenderability -tenderable -tenderably -tenderee -tenderer -tenderfoot -tenderfootish -tenderful -tenderfully -tenderheart -tenderhearted -tenderheartedly -tenderheartedness -tenderish -tenderize -tenderling -tenderloin -tenderly -tenderness -tenderometer -tendersome -tendinal -tending -tendingly -tendinitis -tendinous -tendinousness -tendomucoid -tendon -tendonous -tendoplasty -tendosynovitis -tendotome -tendotomy -tendour -tendovaginal -tendovaginitis -tendresse -tendril -tendriled -tendriliferous -tendrillar -tendrilly -tendrilous -tendron -tenebra -Tenebrae -tenebricose -tenebrific -tenebrificate -Tenebrio -tenebrionid -Tenebrionidae -tenebrious -tenebriously -tenebrity -tenebrose -tenebrosity -tenebrous -tenebrously -tenebrousness -tenectomy -tenement -tenemental -tenementary -tenementer -tenementization -tenementize -tenendas -tenendum -tenent -teneral -Teneriffe -tenesmic -tenesmus -tenet -tenfold -tenfoldness -teng -tengere -tengerite -Tenggerese -tengu -teniacidal -teniacide -tenible -Tenino -tenio -tenline -tenmantale -tennantite -tenne -tenner -Tennessean -tennis -tennisdom -tennisy -Tennysonian -Tennysonianism -Tenochtitlan -tenodesis -tenodynia -tenography -tenology -tenomyoplasty -tenomyotomy -tenon -tenonectomy -tenoner -Tenonian -tenonitis -tenonostosis -tenontagra -tenontitis -tenontodynia -tenontography -tenontolemmitis -tenontology -tenontomyoplasty -tenontomyotomy -tenontophyma -tenontoplasty -tenontothecitis -tenontotomy -tenophony -tenophyte -tenoplastic -tenoplasty -tenor -tenorist -tenorister -tenorite -tenorless -tenoroon -tenorrhaphy -tenositis -tenostosis -tenosuture -tenotome -tenotomist -tenotomize -tenotomy -tenovaginitis -tenpence -tenpenny -tenpin -tenrec -Tenrecidae -tense -tenseless -tenselessness -tensely -tenseness -tensibility -tensible -tensibleness -tensibly -tensify -tensile -tensilely -tensileness -tensility -tensimeter -tensiometer -tension -tensional -tensionless -tensity -tensive -tenson -tensor -tent -tentability -tentable -tentacle -tentacled -tentaclelike -tentacula -tentacular -Tentaculata -tentaculate -tentaculated -Tentaculifera -tentaculite -Tentaculites -Tentaculitidae -tentaculocyst -tentaculoid -tentaculum -tentage -tentamen -tentation -tentative -tentatively -tentativeness -tented -tenter -tenterbelly -tenterer -tenterhook -tentful -tenth -tenthly -tenthmeter -tenthredinid -Tenthredinidae -tenthredinoid -Tenthredinoidea -Tenthredo -tentiform -tentigo -tentillum -tention -tentless -tentlet -tentlike -tentmaker -tentmaking -tentmate -tentorial -tentorium -tenture -tentwards -tentwise -tentwork -tentwort -tenty -tenuate -tenues -tenuicostate -tenuifasciate -tenuiflorous -tenuifolious -tenuious -tenuiroster -tenuirostral -tenuirostrate -Tenuirostres -tenuis -tenuistriate -tenuity -tenuous -tenuously -tenuousness -tenure -tenurial -tenurially -teocalli -teopan -teosinte -Teotihuacan -tepache -tepal -Tepanec -Tepecano -tepee -tepefaction -tepefy -Tepehua -Tepehuane -tepetate -Tephillah -tephillin -tephramancy -tephrite -tephritic -tephroite -tephromalacia -tephromyelitic -Tephrosia -tephrosis -tepid -tepidarium -tepidity -tepidly -tepidness -tepomporize -teponaztli -tepor -tequila -Tequistlateca -Tequistlatecan -tera -teraglin -terakihi -teramorphous -terap -teraphim -teras -teratical -teratism -teratoblastoma -teratogenesis -teratogenetic -teratogenic -teratogenous -teratogeny -teratoid -teratological -teratologist -teratology -teratoma -teratomatous -teratoscopy -teratosis -terbia -terbic -terbium -tercel -tercelet -tercentenarian -tercentenarize -tercentenary -tercentennial -tercer -terceron -tercet -terchloride -tercia -tercine -tercio -terdiurnal -terebate -terebella -terebellid -Terebellidae -terebelloid -terebellum -terebene -terebenic -terebenthene -terebic -terebilic -terebinic -terebinth -Terebinthaceae -terebinthial -terebinthian -terebinthic -terebinthina -terebinthinate -terebinthine -terebinthinous -Terebinthus -terebra -terebral -terebrant -Terebrantia -terebrate -terebration -Terebratula -terebratular -terebratulid -Terebratulidae -terebratuliform -terebratuline -terebratulite -terebratuloid -Terebridae -Teredinidae -teredo -terek -Terence -Terentian -terephthalate -terephthalic -Teresa -Teresian -Teresina -terete -teretial -tereticaudate -teretifolious -teretipronator -teretiscapular -teretiscapularis -teretish -tereu -Tereus -terfez -Terfezia -Terfeziaceae -tergal -tergant -tergeminate -tergeminous -tergiferous -tergite -tergitic -tergiversant -tergiversate -tergiversation -tergiversator -tergiversatory -tergiverse -tergolateral -tergum -Teri -Teriann -terlinguaite -term -terma -termagancy -Termagant -termagant -termagantish -termagantism -termagantly -termage -termatic -termen -termer -Termes -termillenary -termin -terminability -terminable -terminableness -terminably -terminal -Terminalia -Terminaliaceae -terminalization -terminalized -terminally -terminant -terminate -termination -terminational -terminative -terminatively -terminator -terminatory -termine -terminer -termini -terminine -terminism -terminist -terministic -terminize -termino -terminological -terminologically -terminologist -terminology -terminus -termital -termitarium -termitary -termite -termitic -termitid -Termitidae -termitophagous -termitophile -termitophilous -termless -termlessly -termlessness -termly -termolecular -termon -termor -termtime -tern -terna -ternal -ternar -ternariant -ternarious -ternary -ternate -ternately -ternatipinnate -ternatisect -ternatopinnate -terne -terneplate -ternery -ternion -ternize -ternlet -Ternstroemia -Ternstroemiaceae -teroxide -terp -terpadiene -terpane -terpene -terpeneless -terphenyl -terpilene -terpin -terpine -terpinene -terpineol -terpinol -terpinolene -terpodion -Terpsichore -terpsichoreal -terpsichoreally -Terpsichorean -terpsichorean -Terraba -terrace -terraceous -terracer -terracette -terracewards -terracewise -terracework -terraciform -terracing -terraculture -terraefilial -terraefilian -terrage -terrain -terral -terramara -terramare -Terrance -terrane -terranean -terraneous -Terrapene -terrapin -terraquean -terraqueous -terraqueousness -terrar -terrarium -terrazzo -terrella -terremotive -Terrence -terrene -terrenely -terreneness -terreplein -terrestrial -terrestrialism -terrestriality -terrestrialize -terrestrially -terrestrialness -terrestricity -terrestrious -terret -terreted -Terri -terribility -terrible -terribleness -terribly -terricole -terricoline -terricolous -terrier -terrierlike -terrific -terrifical -terrifically -terrification -terrificly -terrificness -terrifiedly -terrifier -terrify -terrifying -terrifyingly -terrigenous -terrine -Territelae -territelarian -territorial -territorialism -territorialist -territoriality -territorialization -territorialize -territorially -territorian -territoried -territory -terron -terror -terrorful -terrorific -terrorism -terrorist -terroristic -terroristical -terrorization -terrorize -terrorizer -terrorless -terrorproof -terrorsome -Terry -terry -terse -tersely -terseness -tersion -tersulphate -tersulphide -tersulphuret -tertenant -tertia -tertial -tertian -tertiana -tertianship -tertiarian -tertiary -tertiate -tertius -terton -tertrinal -Tertullianism -Tertullianist -teruncius -terutero -Teruyuki -tervalence -tervalency -tervalent -tervariant -tervee -terzetto -terzina -terzo -tesack -tesarovitch -teschenite -teschermacherite -teskere -teskeria -Tess -tessara -tessarace -tessaraconter -tessaradecad -tessaraglot -tessaraphthong -tessarescaedecahedron -tessel -tessella -tessellar -tessellate -tessellated -tessellation -tessera -tesseract -tesseradecade -tesseraic -tesseral -Tesserants -tesserarian -tesserate -tesserated -tesseratomic -tesseratomy -tessular -test -testa -testable -Testacea -testacean -testaceography -testaceology -testaceous -testaceousness -testacy -testament -testamental -testamentally -testamentalness -testamentarily -testamentary -testamentate -testamentation -testamentum -testamur -testar -testata -testate -testation -testator -testatorship -testatory -testatrices -testatrix -testatum -teste -tested -testee -tester -testes -testibrachial -testibrachium -testicardinate -testicardine -Testicardines -testicle -testicond -testicular -testiculate -testiculated -testiere -testificate -testification -testificator -testificatory -testifier -testify -testily -testimonial -testimonialist -testimonialization -testimonialize -testimonializer -testimonium -testimony -testiness -testing -testingly -testis -teston -testone -testoon -testor -testosterone -testril -testudinal -Testudinaria -testudinarious -Testudinata -testudinate -testudinated -testudineal -testudineous -Testudinidae -testudinous -testudo -testy -Tesuque -tetanic -tetanical -tetanically -tetaniform -tetanigenous -tetanilla -tetanine -tetanism -tetanization -tetanize -tetanoid -tetanolysin -tetanomotor -tetanospasmin -tetanotoxin -tetanus -tetany -tetarcone -tetarconid -tetard -tetartemorion -tetartocone -tetartoconid -tetartohedral -tetartohedrally -tetartohedrism -tetartohedron -tetartoid -tetartosymmetry -tetch -tetchy -tete -tetel -teterrimous -teth -tethelin -tether -tetherball -tethery -tethydan -Tethys -Teton -tetra -tetraamylose -tetrabasic -tetrabasicity -Tetrabelodon -tetrabelodont -tetrabiblos -tetraborate -tetraboric -tetrabrach -tetrabranch -Tetrabranchia -tetrabranchiate -tetrabromid -tetrabromide -tetrabromo -tetrabromoethane -tetracadactylity -tetracarboxylate -tetracarboxylic -tetracarpellary -tetraceratous -tetracerous -Tetracerus -tetrachical -tetrachlorid -tetrachloride -tetrachloro -tetrachloroethane -tetrachloroethylene -tetrachloromethane -tetrachord -tetrachordal -tetrachordon -tetrachoric -tetrachotomous -tetrachromatic -tetrachromic -tetrachronous -tetracid -tetracoccous -tetracoccus -tetracolic -tetracolon -tetracoral -Tetracoralla -tetracoralline -tetracosane -tetract -tetractinal -tetractine -tetractinellid -Tetractinellida -tetractinellidan -tetractinelline -tetractinose -tetracyclic -tetrad -tetradactyl -tetradactylous -tetradactyly -tetradarchy -tetradecane -tetradecanoic -tetradecapod -Tetradecapoda -tetradecapodan -tetradecapodous -tetradecyl -Tetradesmus -tetradiapason -tetradic -Tetradite -tetradrachma -tetradrachmal -tetradrachmon -tetradymite -Tetradynamia -tetradynamian -tetradynamious -tetradynamous -tetraedron -tetraedrum -tetraethylsilane -tetrafluoride -tetrafolious -tetragamy -tetragenous -tetraglot -tetraglottic -tetragon -tetragonal -tetragonally -tetragonalness -Tetragonia -Tetragoniaceae -tetragonidium -tetragonous -tetragonus -tetragram -tetragrammatic -Tetragrammaton -tetragrammatonic -tetragyn -Tetragynia -tetragynian -tetragynous -tetrahedral -tetrahedrally -tetrahedric -tetrahedrite -tetrahedroid -tetrahedron -tetrahexahedral -tetrahexahedron -tetrahydrate -tetrahydrated -tetrahydric -tetrahydride -tetrahydro -tetrahydroxy -tetraiodid -tetraiodide -tetraiodo -tetraiodophenolphthalein -tetrakaidecahedron -tetraketone -tetrakisazo -tetrakishexahedron -tetralemma -Tetralin -tetralogic -tetralogue -tetralogy -tetralophodont -tetramastia -tetramastigote -Tetramera -tetrameral -tetrameralian -tetrameric -tetramerism -tetramerous -tetrameter -tetramethyl -tetramethylammonium -tetramethylene -tetramethylium -tetramin -tetramine -tetrammine -tetramorph -tetramorphic -tetramorphism -tetramorphous -tetrander -Tetrandria -tetrandrian -tetrandrous -tetrane -tetranitrate -tetranitro -tetranitroaniline -tetranuclear -Tetranychus -Tetrao -Tetraodon -tetraodont -Tetraodontidae -tetraonid -Tetraonidae -Tetraoninae -tetraonine -Tetrapanax -tetrapartite -tetrapetalous -tetraphalangeate -tetrapharmacal -tetrapharmacon -tetraphenol -tetraphony -tetraphosphate -tetraphyllous -tetrapla -tetraplegia -tetrapleuron -tetraploid -tetraploidic -tetraploidy -tetraplous -Tetrapneumona -Tetrapneumones -tetrapneumonian -tetrapneumonous -tetrapod -Tetrapoda -tetrapodic -tetrapody -tetrapolar -tetrapolis -tetrapolitan -tetrapous -tetraprostyle -tetrapteran -tetrapteron -tetrapterous -tetraptote -Tetrapturus -tetraptych -tetrapylon -tetrapyramid -tetrapyrenous -tetraquetrous -tetrarch -tetrarchate -tetrarchic -tetrarchy -tetrasaccharide -tetrasalicylide -tetraselenodont -tetraseme -tetrasemic -tetrasepalous -tetraskelion -tetrasome -tetrasomic -tetrasomy -tetraspermal -tetraspermatous -tetraspermous -tetraspheric -tetrasporange -tetrasporangiate -tetrasporangium -tetraspore -tetrasporic -tetrasporiferous -tetrasporous -tetraster -tetrastich -tetrastichal -tetrastichic -Tetrastichidae -tetrastichous -Tetrastichus -tetrastoon -tetrastyle -tetrastylic -tetrastylos -tetrastylous -tetrasubstituted -tetrasubstitution -tetrasulphide -tetrasyllabic -tetrasyllable -tetrasymmetry -tetrathecal -tetratheism -tetratheite -tetrathionates -tetrathionic -tetratomic -tetratone -tetravalence -tetravalency -tetravalent -tetraxial -tetraxon -Tetraxonia -tetraxonian -tetraxonid -Tetraxonida -tetrazane -tetrazene -tetrazin -tetrazine -tetrazo -tetrazole -tetrazolium -tetrazolyl -tetrazone -tetrazotization -tetrazotize -tetrazyl -tetremimeral -tetrevangelium -tetric -tetrical -tetricity -tetricous -tetrigid -Tetrigidae -tetriodide -Tetrix -tetrobol -tetrobolon -tetrode -Tetrodon -tetrodont -Tetrodontidae -tetrole -tetrolic -tetronic -tetronymal -tetrose -tetroxalate -tetroxide -tetrsyllabical -tetryl -tetrylene -tetter -tetterish -tetterous -tetterwort -tettery -Tettigidae -tettigoniid -Tettigoniidae -tettix -Tetum -Teucer -Teucri -Teucrian -teucrin -Teucrium -teufit -teuk -Teutolatry -Teutomania -Teutomaniac -Teuton -Teutondom -Teutonesque -Teutonia -Teutonic -Teutonically -Teutonicism -Teutonism -Teutonist -Teutonity -Teutonization -Teutonize -Teutonomania -Teutonophobe -Teutonophobia -Teutophil -Teutophile -Teutophilism -Teutophobe -Teutophobia -Teutophobism -teviss -tew -Tewa -tewel -tewer -tewit -tewly -tewsome -Texan -Texas -Texcocan -texguino -text -textarian -textbook -textbookless -textiferous -textile -textilist -textlet -textman -textorial -textrine -textual -textualism -textualist -textuality -textually -textuarist -textuary -textural -texturally -texture -textureless -tez -Tezcatlipoca -Tezcatzoncatl -Tezcucan -tezkere -th -tha -thack -thacker -Thackerayan -Thackerayana -Thackerayesque -thackless -Thad -Thai -Thais -thakur -thakurate -thalamencephalic -thalamencephalon -thalami -thalamic -Thalamiflorae -thalamifloral -thalamiflorous -thalamite -thalamium -thalamocele -thalamocoele -thalamocortical -thalamocrural -thalamolenticular -thalamomammillary -thalamopeduncular -Thalamophora -thalamotegmental -thalamotomy -thalamus -Thalarctos -thalassal -Thalassarctos -thalassian -thalassic -thalassinid -Thalassinidea -thalassinidian -thalassinoid -thalassiophyte -thalassiophytous -thalasso -Thalassochelys -thalassocracy -thalassocrat -thalassographer -thalassographic -thalassographical -thalassography -thalassometer -thalassophilous -thalassophobia -thalassotherapy -thalattology -thalenite -thaler -Thalesia -Thalesian -Thalessa -Thalia -Thaliacea -thaliacean -Thalian -Thaliard -Thalictrum -thalli -thallic -thalliferous -thalliform -thalline -thallious -thallium -thallochlore -thallodal -thallogen -thallogenic -thallogenous -thalloid -thallome -Thallophyta -thallophyte -thallophytic -thallose -thallous -thallus -thalposis -thalpotic -thalthan -thameng -Thamesis -Thamnidium -thamnium -thamnophile -Thamnophilinae -thamnophiline -Thamnophilus -Thamnophis -Thamudean -Thamudene -Thamudic -thamuria -Thamus -Thamyras -than -thana -thanadar -thanage -thanan -thanatism -thanatist -thanatobiologic -thanatognomonic -thanatographer -thanatography -thanatoid -thanatological -thanatologist -thanatology -thanatomantic -thanatometer -thanatophidia -thanatophidian -thanatophobe -thanatophobia -thanatophobiac -thanatophoby -thanatopsis -Thanatos -thanatosis -thanatotic -thanatousia -thane -thanedom -thanehood -thaneland -thaneship -thank -thankee -thanker -thankful -thankfully -thankfulness -thankless -thanklessly -thanklessness -thanks -thanksgiver -thanksgiving -thankworthily -thankworthiness -thankworthy -thapes -Thapsia -thapsia -thar -Tharen -tharf -tharfcake -Thargelion -tharginyah -tharm -Thasian -Thaspium -that -thatch -thatcher -thatching -thatchless -thatchwood -thatchwork -thatchy -thatn -thatness -thats -thaught -Thaumantian -Thaumantias -thaumasite -thaumatogeny -thaumatography -thaumatolatry -thaumatology -thaumatrope -thaumatropical -thaumaturge -thaumaturgia -thaumaturgic -thaumaturgical -thaumaturgics -thaumaturgism -thaumaturgist -thaumaturgy -thaumoscopic -thave -thaw -thawer -thawless -thawn -thawy -The -the -Thea -Theaceae -theaceous -theah -theandric -theanthropic -theanthropical -theanthropism -theanthropist -theanthropology -theanthropophagy -theanthropos -theanthroposophy -theanthropy -thearchic -thearchy -theasum -theat -theater -theatergoer -theatergoing -theaterless -theaterlike -theaterward -theaterwards -theaterwise -Theatine -theatral -theatric -theatricable -theatrical -theatricalism -theatricality -theatricalization -theatricalize -theatrically -theatricalness -theatricals -theatrician -theatricism -theatricize -theatrics -theatrize -theatrocracy -theatrograph -theatromania -theatromaniac -theatron -theatrophile -theatrophobia -theatrophone -theatrophonic -theatropolis -theatroscope -theatry -theave -theb -Thebaic -Thebaid -thebaine -Thebais -thebaism -Theban -Thebesian -theca -thecae -thecal -Thecamoebae -thecaphore -thecasporal -thecaspore -thecaspored -thecasporous -Thecata -thecate -thecia -thecitis -thecium -Thecla -thecla -theclan -thecodont -thecoglossate -thecoid -Thecoidea -Thecophora -Thecosomata -thecosomatous -thee -theek -theeker -theelin -theelol -Theemim -theer -theet -theetsee -theezan -theft -theftbote -theftdom -theftless -theftproof -theftuous -theftuously -thegether -thegidder -thegither -thegn -thegndom -thegnhood -thegnland -thegnlike -thegnly -thegnship -thegnworthy -theiform -Theileria -theine -theinism -their -theirn -theirs -theirselves -theirsens -theism -theist -theistic -theistical -theistically -thelalgia -Thelemite -thelemite -Thelephora -Thelephoraceae -Theligonaceae -theligonaceous -Theligonum -thelitis -thelium -Thelodontidae -Thelodus -theloncus -thelorrhagia -Thelphusa -thelphusian -Thelphusidae -thelyblast -thelyblastic -thelyotokous -thelyotoky -Thelyphonidae -Thelyphonus -thelyplasty -thelytocia -thelytoky -thelytonic -them -thema -themata -thematic -thematical -thematically -thematist -theme -themeless -themelet -themer -Themis -themis -Themistian -themsel -themselves -then -thenabouts -thenadays -thenal -thenar -thenardite -thence -thenceafter -thenceforth -thenceforward -thenceforwards -thencefrom -thenceward -thenness -Theo -theoanthropomorphic -theoanthropomorphism -theoastrological -Theobald -Theobroma -theobromic -theobromine -theocentric -theocentricism -theocentrism -theochristic -theocollectivism -theocollectivist -theocracy -theocrasia -theocrasical -theocrasy -theocrat -theocratic -theocratical -theocratically -theocratist -Theocritan -Theocritean -theodemocracy -theodicaea -theodicean -theodicy -theodidact -theodolite -theodolitic -Theodora -Theodore -Theodoric -Theodosia -Theodosian -Theodotian -theodrama -theody -theogamy -theogeological -theognostic -theogonal -theogonic -theogonism -theogonist -theogony -theohuman -theokrasia -theoktonic -theoktony -theolatrous -theolatry -theolepsy -theoleptic -theologal -theologaster -theologastric -theologate -theologeion -theologer -theologi -theologian -theologic -theological -theologically -theologician -theologicoastronomical -theologicoethical -theologicohistorical -theologicometaphysical -theologicomilitary -theologicomoral -theologiconatural -theologicopolitical -theologics -theologism -theologist -theologium -theologization -theologize -theologizer -theologoumena -theologoumenon -theologue -theologus -theology -theomachia -theomachist -theomachy -theomammomist -theomancy -theomania -theomaniac -theomantic -theomastix -theomicrist -theomisanthropist -theomorphic -theomorphism -theomorphize -theomythologer -theomythology -theonomy -theopantism -Theopaschist -Theopaschitally -Theopaschite -Theopaschitic -Theopaschitism -theopathetic -theopathic -theopathy -theophagic -theophagite -theophagous -theophagy -Theophania -theophania -theophanic -theophanism -theophanous -theophany -Theophila -theophilanthrope -theophilanthropic -theophilanthropism -theophilanthropist -theophilanthropy -theophile -theophilist -theophilosophic -Theophilus -theophobia -theophoric -theophorous -Theophrastaceae -theophrastaceous -Theophrastan -Theophrastean -theophylline -theophysical -theopneust -theopneusted -theopneustia -theopneustic -theopneusty -theopolitician -theopolitics -theopolity -theopsychism -theorbist -theorbo -theorem -theorematic -theorematical -theorematically -theorematist -theoremic -theoretic -theoretical -theoreticalism -theoretically -theoretician -theoreticopractical -theoretics -theoria -theoriai -theoric -theorical -theorically -theorician -theoricon -theorics -theorism -theorist -theorization -theorize -theorizer -theorum -theory -theoryless -theorymonger -theosoph -theosopheme -theosophic -theosophical -theosophically -theosophism -theosophist -theosophistic -theosophistical -theosophize -theosophy -theotechnic -theotechnist -theotechny -theoteleological -theoteleology -theotherapy -Theotokos -theow -theowdom -theowman -Theraean -theralite -therapeusis -Therapeutae -Therapeutic -therapeutic -therapeutical -therapeutically -therapeutics -therapeutism -therapeutist -Theraphosa -theraphose -theraphosid -Theraphosidae -theraphosoid -therapist -therapsid -Therapsida -therapy -therblig -there -thereabouts -thereabove -thereacross -thereafter -thereafterward -thereagainst -thereamong -thereamongst -thereanent -thereanents -therearound -thereas -thereat -thereaway -thereaways -therebeside -therebesides -therebetween -thereby -thereckly -therefor -therefore -therefrom -therehence -therein -thereinafter -thereinbefore -thereinto -therence -thereness -thereof -thereoid -thereologist -thereology -thereon -thereout -thereover -thereright -theres -Theresa -therese -therethrough -theretill -thereto -theretofore -theretoward -thereunder -thereuntil -thereunto -thereup -thereupon -Thereva -therevid -Therevidae -therewhile -therewith -therewithal -therewithin -Theria -theriac -theriaca -theriacal -therial -therianthropic -therianthropism -theriatrics -theridiid -Theridiidae -Theridion -theriodic -theriodont -Theriodonta -Theriodontia -theriolatry -theriomancy -theriomaniac -theriomimicry -theriomorph -theriomorphic -theriomorphism -theriomorphosis -theriomorphous -theriotheism -theriotrophical -theriozoic -therm -thermacogenesis -thermae -thermal -thermalgesia -thermality -thermally -thermanalgesia -thermanesthesia -thermantic -thermantidote -thermatologic -thermatologist -thermatology -thermesthesia -thermesthesiometer -thermetograph -thermetrograph -thermic -thermically -Thermidorian -thermion -thermionic -thermionically -thermionics -thermistor -Thermit -thermit -thermite -thermo -thermoammeter -thermoanalgesia -thermoanesthesia -thermobarograph -thermobarometer -thermobattery -thermocautery -thermochemic -thermochemical -thermochemically -thermochemist -thermochemistry -thermochroic -thermochrosy -thermocline -thermocouple -thermocurrent -thermodiffusion -thermoduric -thermodynamic -thermodynamical -thermodynamically -thermodynamician -thermodynamicist -thermodynamics -thermodynamist -thermoelectric -thermoelectrical -thermoelectrically -thermoelectricity -thermoelectrometer -thermoelectromotive -thermoelement -thermoesthesia -thermoexcitory -thermogalvanometer -thermogen -thermogenerator -thermogenesis -thermogenetic -thermogenic -thermogenous -thermogeny -thermogeographical -thermogeography -thermogram -thermograph -thermography -thermohyperesthesia -thermojunction -thermokinematics -thermolabile -thermolability -thermological -thermology -thermoluminescence -thermoluminescent -thermolysis -thermolytic -thermolyze -thermomagnetic -thermomagnetism -thermometamorphic -thermometamorphism -thermometer -thermometerize -thermometric -thermometrical -thermometrically -thermometrograph -thermometry -thermomotive -thermomotor -thermomultiplier -thermonastic -thermonasty -thermonatrite -thermoneurosis -thermoneutrality -thermonous -thermonuclear -thermopair -thermopalpation -thermopenetration -thermoperiod -thermoperiodic -thermoperiodicity -thermoperiodism -thermophile -thermophilic -thermophilous -thermophobous -thermophone -thermophore -thermophosphor -thermophosphorescence -thermopile -thermoplastic -thermoplasticity -thermoplegia -thermopleion -thermopolymerization -thermopolypnea -thermopolypneic -Thermopsis -thermoradiotherapy -thermoreduction -thermoregulation -thermoregulator -thermoresistance -thermoresistant -thermos -thermoscope -thermoscopic -thermoscopical -thermoscopically -thermosetting -thermosiphon -thermostability -thermostable -thermostat -thermostatic -thermostatically -thermostatics -thermostimulation -thermosynthesis -thermosystaltic -thermosystaltism -thermotactic -thermotank -thermotaxic -thermotaxis -thermotelephone -thermotensile -thermotension -thermotherapeutics -thermotherapy -thermotic -thermotical -thermotically -thermotics -thermotropic -thermotropism -thermotropy -thermotype -thermotypic -thermotypy -thermovoltaic -therodont -theroid -therolatry -therologic -therological -therologist -therology -Theromora -Theromores -theromorph -Theromorpha -theromorphia -theromorphic -theromorphism -theromorphological -theromorphology -theromorphous -Theron -theropod -Theropoda -theropodous -thersitean -Thersites -thersitical -thesauri -thesaurus -these -Thesean -theses -Theseum -Theseus -thesial -thesicle -thesis -Thesium -Thesmophoria -Thesmophorian -Thesmophoric -thesmothetae -thesmothete -thesmothetes -thesocyte -Thespesia -Thespesius -Thespian -Thessalian -Thessalonian -thestreen -theta -thetch -thetic -thetical -thetically -thetics -thetin -thetine -Thetis -theurgic -theurgical -theurgically -theurgist -theurgy -Thevetia -thevetin -thew -thewed -thewless -thewness -thewy -they -theyll -theyre -thiacetic -thiadiazole -thialdine -thiamide -thiamin -thiamine -thianthrene -thiasi -thiasine -thiasite -thiasoi -thiasos -thiasote -thiasus -thiazine -thiazole -thiazoline -thick -thickbrained -thicken -thickener -thickening -thicket -thicketed -thicketful -thickety -thickhead -thickheaded -thickheadedly -thickheadedness -thickish -thickleaf -thicklips -thickly -thickneck -thickness -thicknessing -thickset -thickskin -thickskull -thickskulled -thickwind -thickwit -thief -thiefcraft -thiefdom -thiefland -thiefmaker -thiefmaking -thiefproof -thieftaker -thiefwise -Thielavia -Thielaviopsis -thienone -thienyl -Thierry -thievable -thieve -thieveless -thiever -thievery -thieving -thievingly -thievish -thievishly -thievishness -thig -thigger -thigging -thigh -thighbone -thighed -thight -thightness -thigmonegative -thigmopositive -thigmotactic -thigmotactically -thigmotaxis -thigmotropic -thigmotropically -thigmotropism -Thilanottine -thilk -thill -thiller -thilly -thimber -thimble -thimbleberry -thimbled -thimbleflower -thimbleful -thimblelike -thimblemaker -thimblemaking -thimbleman -thimblerig -thimblerigger -thimbleriggery -thimblerigging -thimbleweed -thin -thinbrained -thine -thing -thingal -thingamabob -thinghood -thinginess -thingish -thingless -thinglet -thinglike -thinglikeness -thingliness -thingly -thingman -thingness -thingstead -thingum -thingumajig -thingumbob -thingummy -thingy -Think -think -thinkable -thinkableness -thinkably -thinker -thinkful -thinking -thinkingly -thinkingpart -thinkling -thinly -thinner -thinness -thinning -thinnish -Thinocoridae -Thinocorus -thinolite -thio -thioacetal -thioacetic -thioalcohol -thioaldehyde -thioamide -thioantimonate -thioantimoniate -thioantimonious -thioantimonite -thioarsenate -thioarseniate -thioarsenic -thioarsenious -thioarsenite -Thiobacillus -Thiobacteria -thiobacteria -Thiobacteriales -thiobismuthite -thiocarbamic -thiocarbamide -thiocarbamyl -thiocarbanilide -thiocarbimide -thiocarbonate -thiocarbonic -thiocarbonyl -thiochloride -thiochrome -thiocresol -thiocyanate -thiocyanation -thiocyanic -thiocyanide -thiocyano -thiocyanogen -thiodiazole -thiodiphenylamine -thiofuran -thiofurane -thiofurfuran -thiofurfurane -thiogycolic -thiohydrate -thiohydrolysis -thiohydrolyze -thioindigo -thioketone -thiol -thiolacetic -thiolactic -thiolic -thionamic -thionaphthene -thionate -thionation -thioneine -thionic -thionine -thionitrite -thionium -thionobenzoic -thionthiolic -thionurate -thionyl -thionylamine -thiophen -thiophene -thiophenic -thiophenol -thiophosgene -thiophosphate -thiophosphite -thiophosphoric -thiophosphoryl -thiophthene -thiopyran -thioresorcinol -thiosinamine -Thiospira -thiostannate -thiostannic -thiostannite -thiostannous -thiosulphate -thiosulphonic -thiosulphuric -Thiothrix -thiotolene -thiotungstate -thiotungstic -thiouracil -thiourea -thiourethan -thiourethane -thioxene -thiozone -thiozonide -thir -third -thirdborough -thirdings -thirdling -thirdly -thirdness -thirdsman -thirl -thirlage -thirling -thirst -thirster -thirstful -thirstily -thirstiness -thirsting -thirstingly -thirstland -thirstle -thirstless -thirstlessness -thirstproof -thirsty -thirt -thirteen -thirteener -thirteenfold -thirteenth -thirteenthly -thirtieth -thirty -thirtyfold -thirtyish -this -thishow -thislike -thisn -thisness -thissen -thistle -thistlebird -thistled -thistledown -thistlelike -thistleproof -thistlery -thistlish -thistly -thiswise -thither -thitherto -thitherward -thitsiol -thiuram -thivel -thixle -thixolabile -thixotropic -thixotropy -Thlaspi -Thlingchadinne -Thlinget -thlipsis -Tho -tho -thob -thocht -thof -thoft -thoftfellow -thoke -thokish -thole -tholeiite -tholepin -tholi -tholoi -tholos -tholus -Thomaean -Thomas -Thomasa -Thomasine -thomasing -Thomasite -thomisid -Thomisidae -Thomism -Thomist -Thomistic -Thomistical -Thomite -Thomomys -thomsenolite -Thomsonian -Thomsonianism -thomsonite -thon -thonder -Thondracians -Thondraki -Thondrakians -thone -thong -Thonga -thonged -thongman -thongy -thoo -thooid -thoom -thoracalgia -thoracaorta -thoracectomy -thoracentesis -thoraces -thoracic -Thoracica -thoracical -thoracicoabdominal -thoracicoacromial -thoracicohumeral -thoracicolumbar -thoraciform -thoracispinal -thoracoabdominal -thoracoacromial -thoracobronchotomy -thoracoceloschisis -thoracocentesis -thoracocyllosis -thoracocyrtosis -thoracodelphus -thoracodidymus -thoracodorsal -thoracodynia -thoracogastroschisis -thoracograph -thoracohumeral -thoracolumbar -thoracolysis -thoracomelus -thoracometer -thoracometry -thoracomyodynia -thoracopagus -thoracoplasty -thoracoschisis -thoracoscope -thoracoscopy -Thoracostei -thoracostenosis -thoracostomy -Thoracostraca -thoracostracan -thoracostracous -thoracotomy -thoral -thorascope -thorax -thore -thoria -thorianite -thoriate -thoric -thoriferous -thorina -thorite -thorium -thorn -thornback -thornbill -thornbush -thorned -thornen -thornhead -thornily -thorniness -thornless -thornlessness -thornlet -thornlike -thornproof -thornstone -thorntail -thorny -thoro -thorocopagous -thorogummite -thoron -thorough -Thoroughbred -thoroughbred -thoroughbredness -thoroughfare -thoroughfarer -thoroughfaresome -thoroughfoot -thoroughgoing -thoroughgoingly -thoroughgoingness -thoroughgrowth -thoroughly -thoroughness -thoroughpaced -thoroughpin -thoroughsped -thoroughstem -thoroughstitch -thoroughstitched -thoroughwax -thoroughwort -thorp -thort -thorter -thortveitite -Thos -Those -those -thou -though -thought -thoughted -thoughten -thoughtful -thoughtfully -thoughtfulness -thoughtkin -thoughtless -thoughtlessly -thoughtlessness -thoughtlet -thoughtness -thoughtsick -thoughty -thousand -thousandfold -thousandfoldly -thousandth -thousandweight -thouse -thow -thowel -thowless -thowt -Thraces -Thracian -thrack -thraep -thrail -thrain -thrall -thrallborn -thralldom -thram -thrammle -thrang -thrangity -thranite -thranitic -thrap -thrapple -thrash -thrashel -thrasher -thrasherman -thrashing -thrasonic -thrasonical -thrasonically -thrast -Thraupidae -thrave -thraver -thraw -thrawcrook -thrawn -thrawneen -Thrax -thread -threadbare -threadbareness -threadbarity -threaded -threaden -threader -threadfin -threadfish -threadflower -threadfoot -threadiness -threadle -threadless -threadlet -threadlike -threadmaker -threadmaking -threadway -threadweed -threadworm -thready -threap -threaper -threat -threaten -threatenable -threatener -threatening -threateningly -threatful -threatfully -threatless -threatproof -three -threefold -threefolded -threefoldedness -threefoldly -threefoldness -threeling -threeness -threepence -threepenny -threepennyworth -threescore -threesome -thremmatology -threne -threnetic -threnetical -threnode -threnodial -threnodian -threnodic -threnodical -threnodist -threnody -threnos -threonin -threonine -threose -threpsology -threptic -thresh -threshel -thresher -thresherman -threshingtime -threshold -Threskiornithidae -Threskiornithinae -threw -thribble -thrice -thricecock -thridacium -thrift -thriftbox -thriftily -thriftiness -thriftless -thriftlessly -thriftlessness -thriftlike -thrifty -thrill -thriller -thrillful -thrillfully -thrilling -thrillingly -thrillingness -thrillproof -thrillsome -thrilly -thrimble -thrimp -Thrinax -thring -thrinter -thrioboly -thrip -thripel -Thripidae -thripple -thrips -thrive -thriveless -thriven -thriver -thriving -thrivingly -thrivingness -thro -throat -throatal -throatband -throated -throatful -throatily -throatiness -throating -throatlash -throatlatch -throatless -throatlet -throatroot -throatstrap -throatwort -throaty -throb -throbber -throbbingly -throbless -throck -throdden -throddy -throe -thrombase -thrombin -thromboangiitis -thromboarteritis -thrombocyst -thrombocyte -thrombocytopenia -thrombogen -thrombogenic -thromboid -thrombokinase -thrombolymphangitis -thrombopenia -thrombophlebitis -thromboplastic -thromboplastin -thrombose -thrombosis -thrombostasis -thrombotic -thrombus -thronal -throne -thronedom -throneless -thronelet -thronelike -throneward -throng -thronger -throngful -throngingly -thronize -thropple -throstle -throstlelike -throttle -throttler -throttling -throttlingly -throu -throuch -throucht -through -throughbear -throughbred -throughcome -throughgang -throughganging -throughgoing -throughgrow -throughknow -throughout -throughput -throve -throw -throwaway -throwback -throwdown -thrower -throwing -thrown -throwoff -throwout -throwster -throwwort -thrum -thrummer -thrummers -thrummy -thrumwort -thrush -thrushel -thrushlike -thrushy -thrust -thruster -thrustful -thrustfulness -thrusting -thrustings -thrutch -thrutchings -Thruthvang -thruv -thrymsa -Thryonomys -Thuan -Thuban -Thucydidean -thud -thudding -thuddingly -thug -thugdom -thuggee -thuggeeism -thuggery -thuggess -thuggish -thuggism -Thuidium -Thuja -thujene -thujin -thujone -Thujopsis -thujyl -Thule -thulia -thulir -thulite -thulium -thulr -thuluth -thumb -thumbbird -thumbed -thumber -thumbkin -thumble -thumbless -thumblike -thumbmark -thumbnail -thumbpiece -thumbprint -thumbrope -thumbscrew -thumbstall -thumbstring -thumbtack -thumby -thumlungur -thump -thumper -thumping -thumpingly -Thunar -Thunbergia -thunbergilene -thunder -thunderation -thunderball -thunderbearer -thunderbearing -thunderbird -thunderblast -thunderbolt -thunderburst -thunderclap -thundercloud -thundercrack -thunderer -thunderfish -thunderflower -thunderful -thunderhead -thunderheaded -thundering -thunderingly -thunderless -thunderlike -thunderous -thunderously -thunderousness -thunderpeal -thunderplump -thunderproof -thundershower -thundersmite -thundersquall -thunderstick -thunderstone -thunderstorm -thunderstrike -thunderstroke -thunderstruck -thunderwood -thunderworm -thunderwort -thundery -thundrous -thundrously -thung -thunge -Thunnidae -Thunnus -Thunor -thuoc -Thurberia -thurible -thuribuler -thuribulum -thurifer -thuriferous -thurificate -thurificati -thurification -thurify -Thuringian -thuringite -Thurio -thurl -thurm -thurmus -Thurnia -Thurniaceae -thurrock -Thursday -thurse -thurt -thus -thusgate -Thushi -thusly -thusness -thuswise -thutter -Thuyopsis -thwack -thwacker -thwacking -thwackingly -thwackstave -thwaite -thwart -thwartedly -thwarteous -thwarter -thwarting -thwartingly -thwartly -thwartman -thwartness -thwartover -thwartsaw -thwartship -thwartships -thwartways -thwartwise -thwite -thwittle -thy -Thyestean -Thyestes -thyine -thylacine -thylacitis -Thylacoleo -Thylacynus -thymacetin -Thymallidae -Thymallus -thymate -thyme -thymectomize -thymectomy -thymegol -Thymelaea -Thymelaeaceae -thymelaeaceous -Thymelaeales -thymelcosis -thymele -thymelic -thymelical -thymelici -thymene -thymetic -thymic -thymicolymphatic -thymine -thymiosis -thymitis -thymocyte -thymogenic -thymol -thymolate -thymolize -thymolphthalein -thymolsulphonephthalein -thymoma -thymonucleic -thymopathy -thymoprivic -thymoprivous -thymopsyche -thymoquinone -thymotactic -thymotic -Thymus -thymus -thymy -thymyl -thymylic -thynnid -Thynnidae -Thyraden -thyratron -thyreoadenitis -thyreoantitoxin -thyreoarytenoid -thyreoarytenoideus -thyreocervical -thyreocolloid -Thyreocoridae -thyreoepiglottic -thyreogenic -thyreogenous -thyreoglobulin -thyreoglossal -thyreohyal -thyreohyoid -thyreoid -thyreoidal -thyreoideal -thyreoidean -thyreoidectomy -thyreoiditis -thyreoitis -thyreolingual -thyreoprotein -thyreosis -thyreotomy -thyreotoxicosis -thyreotropic -thyridial -Thyrididae -thyridium -Thyris -thyrisiferous -thyroadenitis -thyroantitoxin -thyroarytenoid -thyroarytenoideus -thyrocardiac -thyrocele -thyrocervical -thyrocolloid -thyrocricoid -thyroepiglottic -thyroepiglottidean -thyrogenic -thyroglobulin -thyroglossal -thyrohyal -thyrohyoid -thyrohyoidean -thyroid -thyroidal -thyroidea -thyroideal -thyroidean -thyroidectomize -thyroidectomy -thyroidism -thyroiditis -thyroidization -thyroidless -thyroidotomy -thyroiodin -thyrolingual -thyronine -thyroparathyroidectomize -thyroparathyroidectomy -thyroprival -thyroprivia -thyroprivic -thyroprivous -thyroprotein -Thyrostraca -thyrostracan -thyrotherapy -thyrotomy -thyrotoxic -thyrotoxicosis -thyrotropic -thyroxine -thyrse -thyrsiflorous -thyrsiform -thyrsoid -thyrsoidal -thyrsus -Thysanocarpus -thysanopter -Thysanoptera -thysanopteran -thysanopteron -thysanopterous -Thysanoura -thysanouran -thysanourous -Thysanura -thysanuran -thysanurian -thysanuriform -thysanurous -thysel -thyself -thysen -Ti -ti -Tiahuanacan -Tiam -tiang -tiao -tiar -tiara -tiaralike -tiarella -Tiatinagua -tib -Tibbie -Tibbu -tibby -Tiberian -Tiberine -Tiberius -tibet -Tibetan -tibey -tibia -tibiad -tibiae -tibial -tibiale -tibicinist -tibiocalcanean -tibiofemoral -tibiofibula -tibiofibular -tibiometatarsal -tibionavicular -tibiopopliteal -tibioscaphoid -tibiotarsal -tibiotarsus -Tibouchina -tibourbou -tiburon -Tiburtine -tic -tical -ticca -tice -ticement -ticer -Tichodroma -tichodrome -tichorrhine -tick -tickbean -tickbird -tickeater -ticked -ticken -ticker -ticket -ticketer -ticketing -ticketless -ticketmonger -tickey -tickicide -tickie -ticking -tickle -tickleback -ticklebrain -tickled -ticklely -ticklenburg -tickleness -tickleproof -tickler -ticklesome -tickless -tickleweed -tickling -ticklingly -ticklish -ticklishly -ticklishness -tickly -tickney -tickproof -tickseed -tickseeded -ticktack -ticktacker -ticktacktoe -ticktick -ticktock -tickweed -ticky -ticul -Ticuna -Ticunan -tid -tidal -tidally -tidbit -tiddle -tiddledywinks -tiddler -tiddley -tiddling -tiddlywink -tiddlywinking -tiddy -tide -tided -tideful -tidehead -tideland -tideless -tidelessness -tidelike -tidely -tidemaker -tidemaking -tidemark -tiderace -tidesman -tidesurveyor -Tideswell -tidewaiter -tidewaitership -tideward -tidewater -tideway -tidiable -tidily -tidiness -tiding -tidingless -tidings -tidley -tidological -tidology -tidy -tidyism -tidytips -tie -tieback -tied -Tiefenthal -tiemaker -tiemaking -tiemannite -tien -tiepin -tier -tierce -tierced -tierceron -tiered -tierer -tierlike -tiersman -tietick -tiewig -tiewigged -tiff -tiffany -tiffanyite -tiffie -tiffin -tiffish -tiffle -tiffy -tifinagh -tift -tifter -tig -tige -tigella -tigellate -tigelle -tigellum -tigellus -tiger -tigerbird -tigereye -tigerflower -tigerfoot -tigerhearted -tigerhood -tigerish -tigerishly -tigerishness -tigerism -tigerkin -tigerlike -tigerling -tigerly -tigernut -tigerproof -tigerwood -tigery -Tigger -tigger -tight -tighten -tightener -tightfisted -tightish -tightly -tightness -tightrope -tights -tightwad -tightwire -tiglaldehyde -tiglic -tiglinic -tignum -Tigrai -Tigre -Tigrean -tigress -tigresslike -Tigridia -Tigrina -tigrine -Tigris -tigroid -tigrolysis -tigrolytic -tigtag -Tigua -Tigurine -Tiki -tikitiki -tikka -tikker -tiklin -tikolosh -tikor -tikur -til -tilaite -tilaka -tilasite -tilbury -Tilda -tilde -tile -tiled -tilefish -tilelike -tilemaker -tilemaking -tiler -tileroot -tilery -tileseed -tilestone -tileways -tilework -tileworks -tilewright -tileyard -Tilia -Tiliaceae -tiliaceous -tilikum -tiling -till -tillable -Tillaea -Tillaeastrum -tillage -Tillamook -Tillandsia -tiller -tillering -tillerless -tillerman -Tilletia -Tilletiaceae -tilletiaceous -tilley -tillite -tillodont -Tillodontia -Tillodontidae -tillot -tillotter -tilly -tilmus -tilpah -Tilsit -tilt -tiltable -tiltboard -tilter -tilth -tilting -tiltlike -tiltmaker -tiltmaking -tiltup -tilty -tiltyard -tilyer -Tim -timable -Timaeus -Timalia -Timaliidae -Timaliinae -timaliine -timaline -Timani -timar -timarau -timawa -timazite -timbal -timbale -timbang -timbe -timber -timbered -timberer -timberhead -timbering -timberjack -timberland -timberless -timberlike -timberling -timberman -timbermonger -timbern -timbersome -timbertuned -timberwood -timberwork -timberwright -timbery -timberyard -Timbira -timbo -timbre -timbrel -timbreled -timbreler -timbrologist -timbrology -timbromania -timbromaniac -timbromanist -timbrophilic -timbrophilism -timbrophilist -timbrophily -time -timeable -timecard -timed -timeful -timefully -timefulness -timekeep -timekeeper -timekeepership -timeless -timelessly -timelessness -Timelia -Timeliidae -timeliine -timelily -timeliness -timeling -timely -timenoguy -timeous -timeously -timepiece -timepleaser -timeproof -timer -times -timesaver -timesaving -timeserver -timeserving -timeservingness -timetable -timetaker -timetaking -timeward -timework -timeworker -timeworn -Timias -timid -timidity -timidly -timidness -timing -timish -timist -Timne -Timo -timocracy -timocratic -timocratical -Timon -timon -timoneer -Timonian -Timonism -Timonist -Timonize -timor -Timorese -timorous -timorously -timorousness -Timote -Timotean -Timothean -Timothy -timothy -timpani -timpanist -timpano -Timucua -Timucuan -Timuquan -Timuquanan -tin -Tina -Tinamidae -tinamine -tinamou -tinampipi -tincal -tinchel -tinchill -tinclad -tinct -tinction -tinctorial -tinctorially -tinctorious -tinctumutation -tincture -tind -tindal -tindalo -tinder -tinderbox -tindered -tinderish -tinderlike -tinderous -tindery -tine -tinea -tineal -tinean -tined -tinegrass -tineid -Tineidae -Tineina -tineine -tineman -tineoid -Tineoidea -tinetare -tinety -tineweed -tinful -Ting -ting -tinge -tinged -tinger -Tinggian -tingi -tingibility -tingible -tingid -Tingidae -Tingis -tingitid -Tingitidae -tinglass -tingle -tingler -tingletangle -tingling -tinglingly -tinglish -tingly -tingtang -tinguaite -tinguaitic -Tinguian -tinguy -tinhorn -tinhouse -tinily -tininess -tining -tink -tinker -tinkerbird -tinkerdom -tinkerer -tinkerlike -tinkerly -tinkershire -tinkershue -tinkerwise -tinkle -tinkler -tinklerman -tinkling -tinklingly -tinkly -tinlet -tinlike -tinman -Tinne -tinned -tinner -tinnery -tinnet -Tinni -tinnified -tinnily -tinniness -tinning -tinnitus -tinnock -tinny -Tino -Tinoceras -tinosa -tinsel -tinsellike -tinselly -tinselmaker -tinselmaking -tinselry -tinselweaver -tinselwork -tinsman -tinsmith -tinsmithing -tinsmithy -tinstone -tinstuff -tint -tinta -tintage -tintamarre -tintarron -tinted -tinter -tintie -tintiness -tinting -tintingly -tintinnabula -tintinnabulant -tintinnabular -tintinnabulary -tintinnabulate -tintinnabulation -tintinnabulatory -tintinnabulism -tintinnabulist -tintinnabulous -tintinnabulum -tintist -tintless -tintometer -tintometric -tintometry -tinty -tintype -tintyper -tinwald -tinware -tinwoman -tinwork -tinworker -tinworking -tiny -tinzenite -Tionontates -Tionontati -Tiou -tip -tipburn -tipcart -tipcat -tipe -tipful -tiphead -Tiphia -Tiphiidae -tipiti -tiple -tipless -tiplet -tipman -tipmost -tiponi -tippable -tipped -tippee -tipper -tippet -tipping -tipple -tippleman -tippler -tipply -tipproof -tippy -tipsification -tipsifier -tipsify -tipsily -tipsiness -tipstaff -tipster -tipstock -tipsy -tiptail -tipteerer -tiptilt -tiptoe -tiptoeing -tiptoeingly -tiptop -tiptopness -tiptopper -tiptoppish -tiptoppishness -tiptopsome -Tipula -Tipularia -tipulid -Tipulidae -tipuloid -Tipuloidea -tipup -Tipura -tirade -tiralee -tire -tired -tiredly -tiredness -tiredom -tirehouse -tireless -tirelessly -tirelessness -tiremaid -tiremaker -tiremaking -tireman -tirer -tireroom -tiresmith -tiresome -tiresomely -tiresomeness -tiresomeweed -tirewoman -Tirhutia -tiriba -tiring -tiringly -tirl -tirma -tirocinium -Tirolean -Tirolese -Tironian -tirr -tirralirra -tirret -Tirribi -tirrivee -tirrlie -tirrwirr -tirthankara -Tirurai -tirve -tirwit -tisane -tisar -Tishiya -Tishri -Tisiphone -tissual -tissue -tissued -tissueless -tissuelike -tissuey -tisswood -tiswin -tit -Titan -titanate -titanaugite -Titanesque -Titaness -titania -Titanian -Titanic -titanic -Titanical -Titanically -Titanichthyidae -Titanichthys -titaniferous -titanifluoride -Titanism -titanite -titanitic -titanium -Titanlike -titano -titanocolumbate -titanocyanide -titanofluoride -Titanolater -Titanolatry -Titanomachia -Titanomachy -titanomagnetite -titanoniobate -titanosaur -Titanosaurus -titanosilicate -titanothere -Titanotheridae -Titanotherium -titanous -titanyl -titar -titbit -titbitty -tite -titer -titeration -titfish -tithable -tithal -tithe -tithebook -titheless -tithemonger -tithepayer -tither -titheright -tithing -tithingman -tithingpenny -tithonic -tithonicity -tithonographic -tithonometer -Tithymalopsis -Tithymalus -titi -Titian -titian -Titianesque -Titianic -titien -Tities -titilate -titillability -titillant -titillater -titillating -titillatingly -titillation -titillative -titillator -titillatory -titivate -titivation -titivator -titlark -title -titleboard -titled -titledom -titleholder -titleless -titleproof -titler -titleship -titlike -titling -titlist -titmal -titman -Titmarsh -Titmarshian -titmouse -Titoism -Titoist -titoki -titrable -titratable -titrate -titration -titre -titrimetric -titrimetry -titter -titterel -titterer -tittering -titteringly -tittery -tittie -tittle -tittlebat -tittler -tittup -tittupy -titty -tittymouse -titubancy -titubant -titubantly -titubate -titubation -titular -titularity -titularly -titulary -titulation -titule -titulus -Titurel -Titus -tiver -Tivoli -tivoli -tivy -Tiwaz -tiza -tizeur -tizzy -tjanting -tji -tjosite -tlaco -Tlakluit -Tlapallan -Tlascalan -Tlingit -tmema -Tmesipteris -tmesis -to -toa -toad -toadback -toadeat -toadeater -toader -toadery -toadess -toadfish -toadflax -toadflower -toadhead -toadier -toadish -toadless -toadlet -toadlike -toadlikeness -toadling -toadpipe -toadroot -toadship -toadstone -toadstool -toadstoollike -toadwise -toady -toadyish -toadyism -toadyship -Toag -toast -toastable -toastee -toaster -toastiness -toastmaster -toastmastery -toastmistress -toasty -toat -toatoa -Toba -tobacco -tobaccofied -tobaccoism -tobaccoite -tobaccoless -tobaccolike -tobaccoman -tobacconalian -tobacconist -tobacconistical -tobacconize -tobaccophil -tobaccoroot -tobaccoweed -tobaccowood -tobaccoy -tobe -Tobiah -Tobias -Tobikhar -tobine -tobira -toboggan -tobogganeer -tobogganer -tobogganist -Toby -toby -tobyman -tocalote -toccata -Tocharese -Tocharian -Tocharic -Tocharish -tocher -tocherless -tock -toco -Tocobaga -tocodynamometer -tocogenetic -tocogony -tocokinin -tocological -tocologist -tocology -tocome -tocometer -tocopherol -tocororo -tocsin -tocusso -Tod -tod -Toda -today -todayish -Todd -todder -toddick -toddite -toddle -toddlekins -toddler -toddy -toddyize -toddyman -tode -Todea -Todidae -Todus -tody -toe -toeboard -toecap -toecapped -toed -toeless -toelike -toellite -toenail -toeplate -Toerless -toernebohmite -toetoe -toff -toffee -toffeeman -toffing -toffish -toffy -toffyman -Tofieldia -Toft -toft -tofter -toftman -toftstead -tofu -tog -toga -togaed -togalike -togata -togate -togated -togawise -together -togetherhood -togetheriness -togetherness -toggel -toggery -toggle -toggler -togless -togs -togt -togue -toher -toheroa -toho -Tohome -tohubohu -tohunga -toi -toil -toiled -toiler -toilet -toileted -toiletry -toilette -toiletted -toiletware -toilful -toilfully -toilinet -toiling -toilingly -toilless -toillessness -toilsome -toilsomely -toilsomeness -toilworn -toise -toit -toitish -toity -Tokay -tokay -toke -Tokelau -token -tokened -tokenless -toko -tokology -tokonoma -tokopat -tol -tolamine -tolan -tolane -tolbooth -told -toldo -tole -Toledan -Toledo -Toledoan -tolerability -tolerable -tolerableness -tolerablish -tolerably -tolerance -tolerancy -Tolerant -tolerant -tolerantism -tolerantly -tolerate -toleration -tolerationism -tolerationist -tolerative -tolerator -tolerism -Toletan -tolfraedic -tolguacha -tolidine -tolite -toll -tollable -tollage -tollbooth -Tollefsen -toller -tollery -tollgate -tollgatherer -tollhouse -tolliker -tolling -tollkeeper -tollman -tollmaster -tollpenny -tolltaker -tolly -Tolowa -tolpatch -tolpatchery -tolsester -tolsey -Tolstoyan -Tolstoyism -Tolstoyist -tolt -Toltec -Toltecan -tolter -tolu -tolualdehyde -toluate -toluene -toluic -toluide -toluidide -toluidine -toluidino -toluido -Toluifera -tolunitrile -toluol -toluquinaldine -tolusafranine -toluyl -toluylene -toluylenediamine -toluylic -tolyl -tolylene -tolylenediamine -Tolypeutes -tolypeutine -Tom -Toma -tomahawk -tomahawker -tomalley -toman -Tomas -tomatillo -tomato -tomb -tombac -tombal -tombe -tombic -tombless -tomblet -tomblike -tombola -tombolo -tomboy -tomboyful -tomboyish -tomboyishly -tomboyishness -tomboyism -tombstone -tomcat -tomcod -tome -tomeful -tomelet -toment -tomentose -tomentous -tomentulose -tomentum -tomfool -tomfoolery -tomfoolish -tomfoolishness -tomial -tomin -tomish -Tomistoma -tomium -tomjohn -Tomkin -tomkin -Tommer -Tomming -Tommy -tommy -tommybag -tommycod -tommyrot -tomnoddy -tomnoup -tomogram -tomographic -tomography -Tomopteridae -Tomopteris -tomorn -tomorrow -tomorrower -tomorrowing -tomorrowness -tomosis -Tompion -tompiper -tompon -tomtate -tomtit -Tomtitmouse -ton -tonal -tonalamatl -tonalist -tonalite -tonalitive -tonality -tonally -tonant -tonation -tondino -tone -toned -toneless -tonelessly -tonelessness -toneme -toneproof -toner -tonetic -tonetically -tonetician -tonetics -tong -Tonga -tonga -Tongan -Tongas -tonger -tongkang -tongman -Tongrian -tongs -tongsman -tongue -tonguecraft -tongued -tonguedoughty -tonguefence -tonguefencer -tongueflower -tongueful -tongueless -tonguelet -tonguelike -tongueman -tonguemanship -tongueplay -tongueproof -tonguer -tongueshot -tonguesman -tonguesore -tonguester -tonguetip -tonguey -tonguiness -tonguing -tonic -tonically -tonicity -tonicize -tonicobalsamic -tonicoclonic -tonicostimulant -tonify -tonight -Tonikan -tonish -tonishly -tonishness -tonite -tonitrocirrus -tonitruant -tonitruone -tonitruous -tonjon -tonk -Tonkawa -Tonkawan -tonkin -Tonkinese -tonlet -Tonna -tonnage -tonneau -tonneaued -tonner -tonnish -tonnishly -tonnishness -tonoclonic -tonogram -tonograph -tonological -tonology -tonometer -tonometric -tonometry -tonophant -tonoplast -tonoscope -tonotactic -tonotaxis -tonous -tonsbergite -tonsil -tonsilectomy -tonsilitic -tonsillar -tonsillary -tonsillectome -tonsillectomic -tonsillectomize -tonsillectomy -tonsillith -tonsillitic -tonsillitis -tonsillolith -tonsillotome -tonsillotomy -tonsilomycosis -tonsor -tonsorial -tonsurate -tonsure -tonsured -tontine -tontiner -Tonto -tonus -Tony -tony -tonyhoop -too -toodle -toodleloodle -took -tooken -tool -toolbox -toolbuilder -toolbuilding -tooler -toolhead -toolholder -toolholding -tooling -toolless -toolmaker -toolmaking -toolman -toolmark -toolmarking -toolplate -toolroom -toolsetter -toolslide -toolsmith -toolstock -toolstone -toom -toomly -toon -Toona -toonwood -toop -toorie -toorock -tooroo -toosh -toot -tooter -tooth -toothache -toothaching -toothachy -toothbill -toothbrush -toothbrushy -toothchiseled -toothcomb -toothcup -toothdrawer -toothdrawing -toothed -toother -toothflower -toothful -toothill -toothing -toothless -toothlessly -toothlessness -toothlet -toothleted -toothlike -toothpick -toothplate -toothproof -toothsome -toothsomely -toothsomeness -toothstick -toothwash -toothwork -toothwort -toothy -tootle -tootler -tootlish -tootsy -toozle -toozoo -top -topalgia -toparch -toparchia -toparchical -toparchy -topass -Topatopa -topaz -topazfels -topazine -topazite -topazolite -topazy -topcap -topcast -topchrome -topcoat -topcoating -tope -topectomy -topee -topeewallah -topeng -topepo -toper -toperdom -topesthesia -topflight -topfull -topgallant -toph -tophaceous -tophaike -Tophet -tophetic -tophetize -tophus -tophyperidrosis -topi -topia -topiarian -topiarist -topiarius -topiary -topic -topical -topicality -topically -topinambou -Topinish -topknot -topknotted -topless -toplighted -toplike -topline -toploftical -toploftily -toploftiness -toplofty -topmaker -topmaking -topman -topmast -topmost -topmostly -topnotch -topnotcher -topo -topoalgia -topochemical -topognosia -topognosis -topograph -topographer -topographic -topographical -topographically -topographics -topographist -topographize -topographometric -topography -topolatry -topologic -topological -topologist -topology -toponarcosis -toponym -toponymal -toponymic -toponymical -toponymics -toponymist -toponymy -topophobia -topophone -topotactic -topotaxis -topotype -topotypic -topotypical -topped -topper -toppiece -topping -toppingly -toppingness -topple -toppler -topply -toppy -toprail -toprope -tops -topsail -topsailite -topside -topsl -topsman -topsoil -topstone -topswarm -Topsy -topsyturn -toptail -topwise -toque -Tor -tor -tora -torah -Toraja -toral -toran -torbanite -torbanitic -torbernite -torc -torcel -torch -torchbearer -torchbearing -torcher -torchless -torchlight -torchlighted -torchlike -torchman -torchon -torchweed -torchwood -torchwort -torcular -torculus -tordrillite -tore -toreador -tored -Torenia -torero -toreumatography -toreumatology -toreutic -toreutics -torfaceous -torfel -torgoch -Torgot -toric -Toriest -Torified -torii -Torilis -Torinese -Toriness -torma -tormen -torment -tormenta -tormentable -tormentation -tormentative -tormented -tormentedly -tormentful -tormentil -tormentilla -tormenting -tormentingly -tormentingness -tormentive -tormentor -tormentous -tormentress -tormentry -tormentum -tormina -torminal -torminous -tormodont -torn -tornachile -tornade -tornadic -tornado -tornadoesque -tornadoproof -tornal -tornaria -tornarian -tornese -torney -tornillo -Tornit -tornote -tornus -toro -toroid -toroidal -torolillo -Toromona -Torontonian -tororokombu -Torosaurus -torose -torosity -torotoro -torous -torpedineer -Torpedinidae -torpedinous -torpedo -torpedoer -torpedoist -torpedolike -torpedoplane -torpedoproof -torpent -torpescence -torpescent -torpid -torpidity -torpidly -torpidness -torpify -torpitude -torpor -torporific -torporize -torquate -torquated -torque -torqued -torques -torrefaction -torrefication -torrefy -torrent -torrentful -torrentfulness -torrential -torrentiality -torrentially -torrentine -torrentless -torrentlike -torrentuous -torrentwise -Torreya -Torricellian -torrid -torridity -torridly -torridness -Torridonian -Torrubia -torsade -torse -torsel -torsibility -torsigraph -torsile -torsimeter -torsiogram -torsiograph -torsiometer -torsion -torsional -torsionally -torsioning -torsionless -torsive -torsk -torso -torsoclusion -torsometer -torsoocclusion -Torsten -tort -torta -torteau -torticollar -torticollis -torticone -tortile -tortility -tortilla -tortille -tortious -tortiously -tortive -tortoise -tortoiselike -Tortonian -tortrices -tortricid -Tortricidae -Tortricina -tortricine -tortricoid -Tortricoidea -Tortrix -tortula -Tortulaceae -tortulaceous -tortulous -tortuose -tortuosity -tortuous -tortuously -tortuousness -torturable -torturableness -torture -tortured -torturedly -tortureproof -torturer -torturesome -torturing -torturingly -torturous -torturously -toru -torula -torulaceous -torulaform -toruliform -torulin -toruloid -torulose -torulosis -torulous -torulus -torus -torve -torvid -torvity -torvous -Tory -tory -Torydom -Toryess -Toryfication -Toryfy -toryhillite -Toryish -Toryism -Toryistic -Toryize -Toryship -toryweed -tosaphist -tosaphoth -toscanite -Tosephta -Tosephtas -tosh -toshakhana -tosher -toshery -toshly -toshnail -toshy -tosily -Tosk -Toskish -toss -tosser -tossicated -tossily -tossing -tossingly -tossment -tosspot -tossup -tossy -tost -tosticate -tostication -toston -tosy -tot -total -totalitarian -totalitarianism -totality -totalization -totalizator -totalize -totalizer -totally -totalness -totanine -Totanus -totaquin -totaquina -totaquine -totara -totchka -tote -toteload -totem -totemic -totemically -totemism -totemist -totemistic -totemite -totemization -totemy -toter -tother -totient -Totipalmatae -totipalmate -totipalmation -totipotence -totipotency -totipotent -totipotential -totipotentiality -totitive -toto -Totonac -Totonacan -Totonaco -totora -Totoro -totquot -totter -totterer -tottergrass -tottering -totteringly -totterish -tottery -Tottie -totting -tottle -tottlish -totty -tottyhead -totuava -totum -toty -totyman -tou -toucan -toucanet -Toucanid -touch -touchable -touchableness -touchback -touchbell -touchbox -touchdown -touched -touchedness -toucher -touchhole -touchily -touchiness -touching -touchingly -touchingness -touchless -touchline -touchous -touchpan -touchpiece -touchstone -touchwood -touchy -Toufic -toug -tough -toughen -toughener -toughhead -toughhearted -toughish -toughly -toughness -tought -tould -toumnah -Tounatea -toup -toupee -toupeed -toupet -tour -touraco -tourbillion -tourer -tourette -touring -tourism -tourist -touristdom -touristic -touristproof -touristry -touristship -touristy -tourize -tourmaline -tourmalinic -tourmaliniferous -tourmalinization -tourmalinize -tourmalite -tourn -tournament -tournamental -tournant -tournasin -tournay -tournee -Tournefortia -Tournefortian -tourney -tourneyer -tourniquet -tourte -tousche -touse -touser -tousle -tously -tousy -tout -touter -Tovah -tovar -Tovaria -Tovariaceae -tovariaceous -tovarish -tow -towable -towage -towai -towan -toward -towardliness -towardly -towardness -towards -towboat -towcock -towd -towel -towelette -toweling -towelry -tower -towered -towering -toweringly -towerless -towerlet -towerlike -towerman -towerproof -towerwise -towerwork -towerwort -towery -towght -towhead -towheaded -towhee -towing -towkay -towlike -towline -towmast -town -towned -townee -towner -townet -townfaring -townfolk -townful -towngate -townhood -townify -towniness -townish -townishly -townishness -townist -townland -townless -townlet -townlike -townling -townly -townman -townsboy -townscape -Townsendia -Townsendite -townsfellow -townsfolk -township -townside -townsite -townsman -townspeople -townswoman -townward -townwards -townwear -towny -towpath -towrope -towser -towy -tox -toxa -toxalbumic -toxalbumin -toxalbumose -toxamin -toxanemia -toxaphene -toxcatl -toxemia -toxemic -toxic -toxicaemia -toxical -toxically -toxicant -toxicarol -toxication -toxicemia -toxicity -toxicodendrol -Toxicodendron -toxicoderma -toxicodermatitis -toxicodermatosis -toxicodermia -toxicodermitis -toxicogenic -toxicognath -toxicohaemia -toxicohemia -toxicoid -toxicologic -toxicological -toxicologically -toxicologist -toxicology -toxicomania -toxicopathic -toxicopathy -toxicophagous -toxicophagy -toxicophidia -toxicophobia -toxicosis -toxicotraumatic -toxicum -toxidermic -toxidermitis -toxifer -Toxifera -toxiferous -toxigenic -toxihaemia -toxihemia -toxiinfection -toxiinfectious -toxin -toxinemia -toxinfection -toxinfectious -toxinosis -toxiphobia -toxiphobiac -toxiphoric -toxitabellae -toxity -Toxodon -toxodont -Toxodontia -toxogenesis -Toxoglossa -toxoglossate -toxoid -toxology -toxolysis -toxon -toxone -toxonosis -toxophil -toxophile -toxophilism -toxophilite -toxophilitic -toxophilitism -toxophilous -toxophily -toxophoric -toxophorous -toxoplasmosis -toxosis -toxosozin -Toxostoma -toxotae -Toxotes -Toxotidae -Toxylon -toy -toydom -toyer -toyful -toyfulness -toyhouse -toying -toyingly -toyish -toyishly -toyishness -toyland -toyless -toylike -toymaker -toymaking -toyman -toyon -toyshop -toysome -toytown -toywoman -toywort -toze -tozee -tozer -tra -trabacolo -trabal -trabant -trabascolo -trabea -trabeae -trabeatae -trabeated -trabeation -trabecula -trabecular -trabecularism -trabeculate -trabeculated -trabeculation -trabecule -trabuch -trabucho -Tracaulon -trace -traceability -traceable -traceableness -traceably -traceless -tracelessly -tracer -traceried -tracery -Tracey -trachea -tracheaectasy -tracheal -trachealgia -trachealis -trachean -Trachearia -trachearian -tracheary -Tracheata -tracheate -tracheation -tracheid -tracheidal -tracheitis -trachelagra -trachelate -trachelectomopexia -trachelectomy -trachelismus -trachelitis -trachelium -tracheloacromialis -trachelobregmatic -tracheloclavicular -trachelocyllosis -trachelodynia -trachelology -trachelomastoid -trachelopexia -tracheloplasty -trachelorrhaphy -tracheloscapular -Trachelospermum -trachelotomy -trachenchyma -tracheobronchial -tracheobronchitis -tracheocele -tracheochromatic -tracheoesophageal -tracheofissure -tracheolar -tracheolaryngeal -tracheolaryngotomy -tracheole -tracheolingual -tracheopathia -tracheopathy -tracheopharyngeal -Tracheophonae -tracheophone -tracheophonesis -tracheophonine -tracheophony -tracheoplasty -tracheopyosis -tracheorrhagia -tracheoschisis -tracheoscopic -tracheoscopist -tracheoscopy -tracheostenosis -tracheostomy -tracheotome -tracheotomist -tracheotomize -tracheotomy -Trachinidae -trachinoid -Trachinus -trachitis -trachle -Trachodon -trachodont -trachodontid -Trachodontidae -Trachoma -trachomatous -Trachomedusae -trachomedusan -trachyandesite -trachybasalt -trachycarpous -Trachycarpus -trachychromatic -trachydolerite -trachyglossate -Trachylinae -trachyline -Trachymedusae -trachymedusan -trachyphonia -trachyphonous -Trachypteridae -trachypteroid -Trachypterus -trachyspermous -trachyte -trachytic -trachytoid -tracing -tracingly -track -trackable -trackage -trackbarrow -tracked -tracker -trackhound -trackingscout -tracklayer -tracklaying -trackless -tracklessly -tracklessness -trackman -trackmanship -trackmaster -trackscout -trackshifter -tracksick -trackside -trackwalker -trackway -trackwork -tract -tractability -tractable -tractableness -tractably -tractarian -Tractarianism -tractarianize -tractate -tractator -tractatule -tractellate -tractellum -tractiferous -tractile -tractility -traction -tractional -tractioneering -Tractite -tractlet -tractor -tractoration -tractorism -tractorist -tractorization -tractorize -tractory -tractrix -Tracy -tradable -tradal -trade -tradecraft -tradeful -tradeless -trademaster -trader -tradership -Tradescantia -tradesfolk -tradesman -tradesmanlike -tradesmanship -tradesmanwise -tradespeople -tradesperson -tradeswoman -tradiment -trading -tradite -tradition -traditional -traditionalism -traditionalist -traditionalistic -traditionality -traditionalize -traditionally -traditionarily -traditionary -traditionate -traditionately -traditioner -traditionism -traditionist -traditionitis -traditionize -traditionless -traditionmonger -traditious -traditive -traditor -traditores -traditorship -traduce -traducement -traducent -traducer -traducian -traducianism -traducianist -traducianistic -traducible -traducing -traducingly -traduction -traductionist -trady -traffic -trafficability -trafficable -trafficableness -trafficless -trafficway -trafflicker -trafflike -trag -tragacanth -tragacantha -tragacanthin -tragal -Tragasol -tragedial -tragedian -tragedianess -tragedical -tragedienne -tragedietta -tragedist -tragedization -tragedize -tragedy -tragelaph -tragelaphine -Tragelaphus -tragi -tragic -tragical -tragicality -tragically -tragicalness -tragicaster -tragicize -tragicly -tragicness -tragicofarcical -tragicoheroicomic -tragicolored -tragicomedian -tragicomedy -tragicomic -tragicomical -tragicomicality -tragicomically -tragicomipastoral -tragicoromantic -tragicose -tragopan -Tragopogon -Tragulidae -Tragulina -traguline -traguloid -Traguloidea -Tragulus -tragus -trah -traheen -traik -trail -trailer -trailery -trailiness -trailing -trailingly -trailless -trailmaker -trailmaking -trailman -trailside -trailsman -traily -train -trainable -trainage -trainagraph -trainband -trainbearer -trainbolt -trainboy -trained -trainee -trainer -trainful -training -trainless -trainload -trainman -trainmaster -trainsick -trainster -traintime -trainway -trainy -traipse -trait -traitless -traitor -traitorhood -traitorism -traitorize -traitorlike -traitorling -traitorous -traitorously -traitorousness -traitorship -traitorwise -traitress -traject -trajectile -trajection -trajectitious -trajectory -trajet -tralatician -tralaticiary -tralatition -tralatitious -tralatitiously -tralira -Trallian -tram -trama -tramal -tramcar -trame -Trametes -tramful -tramless -tramline -tramman -trammel -trammeled -trammeler -trammelhead -trammeling -trammelingly -trammelled -trammellingly -trammer -tramming -trammon -tramontane -tramp -trampage -trampdom -tramper -trampess -tramphood -trampish -trampishly -trampism -trample -trampler -tramplike -trampolin -trampoline -trampoose -trampot -tramroad -tramsmith -tramway -tramwayman -tramyard -Tran -trance -tranced -trancedly -tranceful -trancelike -tranchefer -tranchet -trancoidal -traneen -trank -tranka -tranker -trankum -tranky -tranquil -tranquility -tranquilization -tranquilize -tranquilizer -tranquilizing -tranquilizingly -tranquillity -tranquillization -tranquillize -tranquilly -tranquilness -transaccidentation -transact -transaction -transactional -transactionally -transactioneer -transactor -transalpine -transalpinely -transalpiner -transamination -transanimate -transanimation -transannular -transapical -transappalachian -transaquatic -transarctic -transatlantic -transatlantically -transatlantican -transatlanticism -transaudient -transbaikal -transbaikalian -transbay -transboard -transborder -transcalency -transcalent -transcalescency -transcalescent -Transcaucasian -transceiver -transcend -transcendence -transcendency -transcendent -transcendental -transcendentalism -transcendentalist -transcendentalistic -transcendentality -transcendentalize -transcendentally -transcendently -transcendentness -transcendible -transcending -transcendingly -transcendingness -transcension -transchannel -transcolor -transcoloration -transconductance -transcondylar -transcondyloid -transconscious -transcontinental -transcorporate -transcorporeal -transcortical -transcreate -transcribable -transcribble -transcribbler -transcribe -transcriber -transcript -transcription -transcriptional -transcriptionally -transcriptitious -transcriptive -transcriptively -transcriptural -transcrystalline -transcurrent -transcurrently -transcurvation -transdermic -transdesert -transdialect -transdiaphragmatic -transdiurnal -transducer -transduction -transect -transection -transelement -transelementate -transelementation -transempirical -transenna -transept -transeptal -transeptally -transequatorial -transessentiate -transeunt -transexperiential -transfashion -transfeature -transfer -transferability -transferable -transferableness -transferably -transferal -transferee -transference -transferent -transferential -transferography -transferor -transferotype -transferred -transferrer -transferribility -transferring -transferror -transferrotype -transfigurate -transfiguration -transfigurative -transfigure -transfigurement -transfiltration -transfinite -transfix -transfixation -transfixion -transfixture -transfluent -transfluvial -transflux -transforation -transform -transformability -transformable -transformance -transformation -transformationist -transformative -transformator -transformer -transforming -transformingly -transformism -transformist -transformistic -transfrontal -transfrontier -transfuge -transfugitive -transfuse -transfuser -transfusible -transfusion -transfusionist -transfusive -transfusively -transgredient -transgress -transgressible -transgressing -transgressingly -transgression -transgressional -transgressive -transgressively -transgressor -transhape -transhuman -transhumanate -transhumanation -transhumance -transhumanize -transhumant -transience -transiency -transient -transiently -transientness -transigence -transigent -transiliac -transilience -transiliency -transilient -transilluminate -transillumination -transilluminator -transimpression -transincorporation -transindividual -transinsular -transire -transischiac -transisthmian -transistor -transit -transitable -transiter -transition -transitional -transitionally -transitionalness -transitionary -transitionist -transitival -transitive -transitively -transitiveness -transitivism -transitivity -transitman -transitorily -transitoriness -transitory -transitus -Transjordanian -translade -translatable -translatableness -translate -translater -translation -translational -translationally -translative -translator -translatorese -translatorial -translatorship -translatory -translatress -translatrix -translay -transleithan -transletter -translinguate -transliterate -transliteration -transliterator -translocalization -translocate -translocation -translocatory -translucence -translucency -translucent -translucently -translucid -transmarginal -transmarine -transmaterial -transmateriation -transmedial -transmedian -transmental -transmentation -transmeridional -transmethylation -transmigrant -transmigrate -transmigration -transmigrationism -transmigrationist -transmigrative -transmigratively -transmigrator -transmigratory -transmissibility -transmissible -transmission -transmissional -transmissionist -transmissive -transmissively -transmissiveness -transmissivity -transmissometer -transmissory -transmit -transmittable -transmittal -transmittance -transmittancy -transmittant -transmitter -transmittible -transmogrification -transmogrifier -transmogrify -transmold -transmontane -transmorphism -transmundane -transmural -transmuscle -transmutability -transmutable -transmutableness -transmutably -transmutation -transmutational -transmutationist -transmutative -transmutatory -transmute -transmuter -transmuting -transmutive -transmutual -transnatation -transnational -transnatural -transnaturation -transnature -transnihilation -transnormal -transocean -transoceanic -transocular -transom -transomed -transonic -transorbital -transpacific -transpadane -transpalatine -transpalmar -transpanamic -transparence -transparency -transparent -transparentize -transparently -transparentness -transparietal -transparish -transpeciate -transpeciation -transpeer -transpenetrable -transpeninsular -transperitoneal -transperitoneally -transpersonal -transphenomenal -transphysical -transpicuity -transpicuous -transpicuously -transpierce -transpirability -transpirable -transpiration -transpirative -transpiratory -transpire -transpirometer -transplace -transplant -transplantability -transplantable -transplantar -transplantation -transplantee -transplanter -transplendency -transplendent -transplendently -transpleural -transpleurally -transpolar -transponibility -transponible -transpontine -transport -transportability -transportable -transportableness -transportal -transportance -transportation -transportational -transportationist -transportative -transported -transportedly -transportedness -transportee -transporter -transporting -transportingly -transportive -transportment -transposability -transposable -transposableness -transposal -transpose -transposer -transposition -transpositional -transpositive -transpositively -transpositor -transpository -transpour -transprint -transprocess -transprose -transproser -transpulmonary -transpyloric -transradiable -transrational -transreal -transrectification -transrhenane -transrhodanian -transriverine -transsegmental -transsensual -transseptal -transsepulchral -transshape -transshift -transship -transshipment -transsolid -transstellar -transsubjective -transtemporal -Transteverine -transthalamic -transthoracic -transubstantial -transubstantially -transubstantiate -transubstantiation -transubstantiationalist -transubstantiationite -transubstantiative -transubstantiatively -transubstantiatory -transudate -transudation -transudative -transudatory -transude -transumpt -transumption -transumptive -transuranian -transuranic -transuranium -transuterine -transvaal -Transvaaler -Transvaalian -transvaluate -transvaluation -transvalue -transvasate -transvasation -transvase -transvectant -transvection -transvenom -transverbate -transverbation -transverberate -transverberation -transversal -transversale -transversalis -transversality -transversally -transversan -transversary -transverse -transversely -transverseness -transverser -transversion -transversive -transversocubital -transversomedial -transversospinal -transversovertical -transversum -transversus -transvert -transverter -transvest -transvestism -transvestite -transvestitism -transvolation -transwritten -Transylvanian -trant -tranter -trantlum -Tranzschelia -trap -Trapa -Trapaceae -trapaceous -trapball -trapes -trapezate -trapeze -trapezia -trapezial -trapezian -trapeziform -trapezing -trapeziometacarpal -trapezist -trapezium -trapezius -trapezohedral -trapezohedron -trapezoid -trapezoidal -trapezoidiform -trapfall -traphole -trapiferous -traplight -traplike -trapmaker -trapmaking -trappean -trapped -trapper -trapperlike -trappiness -trapping -trappingly -Trappist -trappist -Trappistine -trappoid -trappose -trappous -trappy -traprock -traps -trapshoot -trapshooter -trapshooting -trapstick -trapunto -trasformism -trash -trashery -trashify -trashily -trashiness -traship -trashless -trashrack -trashy -trass -Trastevere -Trasteverine -trasy -traulism -trauma -traumasthenia -traumatic -traumatically -traumaticin -traumaticine -traumatism -traumatize -traumatology -traumatonesis -traumatopnea -traumatopyra -traumatosis -traumatotactic -traumatotaxis -traumatropic -traumatropism -Trautvetteria -travail -travale -travally -travated -trave -travel -travelability -travelable -traveldom -traveled -traveler -traveleress -travelerlike -traveling -travellability -travellable -travelled -traveller -travelogue -traveloguer -traveltime -traversable -traversal -traversary -traverse -traversed -traversely -traverser -traversewise -traversework -traversing -traversion -travertin -travertine -travestier -travestiment -travesty -Travis -travis -travois -travoy -trawl -trawlboat -trawler -trawlerman -trawlnet -tray -trayful -traylike -treacher -treacherous -treacherously -treacherousness -treachery -treacle -treaclelike -treaclewort -treacliness -treacly -tread -treadboard -treader -treading -treadle -treadler -treadmill -treadwheel -treason -treasonable -treasonableness -treasonably -treasonful -treasonish -treasonist -treasonless -treasonmonger -treasonous -treasonously -treasonproof -treasurable -treasure -treasureless -treasurer -treasurership -treasuress -treasurous -treasury -treasuryship -treat -treatable -treatableness -treatably -treatee -treater -treating -treatise -treatiser -treatment -treator -treaty -treatyist -treatyite -treatyless -Trebellian -treble -trebleness -trebletree -trebly -trebuchet -trecentist -trechmannite -treckschuyt -Treculia -treddle -tredecile -tredille -tree -treebeard -treebine -treed -treefish -treeful -treehair -treehood -treeify -treeiness -treeless -treelessness -treelet -treelike -treeling -treemaker -treemaking -treeman -treen -treenail -treescape -treeship -treespeeler -treetop -treeward -treewards -treey -tref -trefgordd -trefle -trefoil -trefoiled -trefoillike -trefoilwise -tregadyne -tregerg -tregohm -trehala -trehalase -trehalose -treillage -trek -trekker -trekometer -trekpath -trellis -trellised -trellislike -trelliswork -Trema -Tremandra -Tremandraceae -tremandraceous -Trematoda -trematode -Trematodea -Trematodes -trematoid -Trematosaurus -tremble -tremblement -trembler -trembling -tremblingly -tremblingness -tremblor -trembly -Tremella -Tremellaceae -tremellaceous -Tremellales -tremelliform -tremelline -tremellineous -tremelloid -tremellose -tremendous -tremendously -tremendousness -tremetol -tremie -tremolando -tremolant -tremolist -tremolite -tremolitic -tremolo -tremor -tremorless -tremorlessly -tremulant -tremulate -tremulation -tremulous -tremulously -tremulousness -trenail -trench -trenchancy -trenchant -trenchantly -trenchantness -trenchboard -trenched -trencher -trencherless -trencherlike -trenchermaker -trenchermaking -trencherman -trencherside -trencherwise -trencherwoman -trenchful -trenchlet -trenchlike -trenchmaster -trenchmore -trenchward -trenchwise -trenchwork -trend -trendle -Trent -trental -Trentepohlia -Trentepohliaceae -trentepohliaceous -Trentine -Trenton -trepan -trepanation -trepang -trepanize -trepanner -trepanning -trepanningly -trephination -trephine -trephiner -trephocyte -trephone -trepid -trepidancy -trepidant -trepidate -trepidation -trepidatory -trepidity -trepidly -trepidness -Treponema -treponematous -treponemiasis -treponemiatic -treponemicidal -treponemicide -Trepostomata -trepostomatous -Treron -Treronidae -Treroninae -tresaiel -trespass -trespassage -trespasser -trespassory -tress -tressed -tressful -tressilate -tressilation -tressless -tresslet -tresslike -tresson -tressour -tressure -tressured -tressy -trest -trestle -trestletree -trestlewise -trestlework -trestling -tret -trevally -trevet -Trevor -trews -trewsman -Trey -trey -tri -triable -triableness -triace -triacetamide -triacetate -triacetonamine -triachenium -triacid -triacontaeterid -triacontane -triaconter -triact -triactinal -triactine -triad -triadelphous -Triadenum -triadic -triadical -triadically -triadism -triadist -triaene -triaenose -triage -triagonal -triakisicosahedral -triakisicosahedron -triakisoctahedral -triakisoctahedrid -triakisoctahedron -triakistetrahedral -triakistetrahedron -trial -trialate -trialism -trialist -triality -trialogue -triamid -triamide -triamine -triamino -triammonium -triamylose -triander -Triandria -triandrian -triandrous -triangle -triangled -triangler -triangleways -trianglewise -trianglework -Triangula -triangular -triangularity -triangularly -triangulate -triangulately -triangulation -triangulator -Triangulid -trianguloid -triangulopyramidal -triangulotriangular -Triangulum -triannual -triannulate -Trianon -Triantaphyllos -triantelope -trianthous -triapsal -triapsidal -triarch -triarchate -triarchy -triarctic -triarcuated -triareal -triarii -Triarthrus -triarticulate -Trias -Triassic -triaster -triatic -Triatoma -triatomic -triatomicity -triaxial -triaxon -triaxonian -triazane -triazin -triazine -triazo -triazoic -triazole -triazolic -tribade -tribadism -tribady -tribal -tribalism -tribalist -tribally -tribarred -tribase -tribasic -tribasicity -tribasilar -tribble -tribe -tribeless -tribelet -tribelike -tribesfolk -tribeship -tribesman -tribesmanship -tribespeople -tribeswoman -triblastic -triblet -triboelectric -triboelectricity -tribofluorescence -tribofluorescent -Tribolium -triboluminescence -triboluminescent -tribometer -Tribonema -Tribonemaceae -tribophosphorescence -tribophosphorescent -tribophosphoroscope -triborough -tribrac -tribrach -tribrachial -tribrachic -tribracteate -tribracteolate -tribromacetic -tribromide -tribromoethanol -tribromophenol -tribromphenate -tribromphenol -tribual -tribually -tribular -tribulate -tribulation -tribuloid -Tribulus -tribuna -tribunal -tribunate -tribune -tribuneship -tribunitial -tribunitian -tribunitiary -tribunitive -tributable -tributarily -tributariness -tributary -tribute -tributer -tributist -tributorian -tributyrin -trica -tricae -tricalcic -tricalcium -tricapsular -tricar -tricarballylic -tricarbimide -tricarbon -tricarboxylic -tricarinate -tricarinated -tricarpellary -tricarpellate -tricarpous -tricaudal -tricaudate -trice -tricellular -tricenarious -tricenarium -tricenary -tricennial -tricentenarian -tricentenary -tricentennial -tricentral -tricephal -tricephalic -tricephalous -tricephalus -triceps -Triceratops -triceria -tricerion -tricerium -trichatrophia -trichauxis -Trichechidae -trichechine -trichechodont -Trichechus -trichevron -trichi -trichia -trichiasis -Trichilia -Trichina -trichina -trichinae -trichinal -Trichinella -trichiniasis -trichiniferous -trichinization -trichinize -trichinoid -trichinopoly -trichinoscope -trichinoscopy -trichinosed -trichinosis -trichinotic -trichinous -trichite -trichitic -trichitis -trichiurid -Trichiuridae -trichiuroid -Trichiurus -trichloride -trichlormethane -trichloro -trichloroacetic -trichloroethylene -trichloromethane -trichloromethyl -trichobacteria -trichobezoar -trichoblast -trichobranchia -trichobranchiate -trichocarpous -trichocephaliasis -Trichocephalus -trichoclasia -trichoclasis -trichocyst -trichocystic -trichode -Trichoderma -Trichodesmium -Trichodontidae -trichoepithelioma -trichogen -trichogenous -trichoglossia -Trichoglossidae -Trichoglossinae -trichoglossine -Trichogramma -Trichogrammatidae -trichogyne -trichogynial -trichogynic -trichoid -Tricholaena -trichological -trichologist -trichology -Tricholoma -trichoma -Trichomanes -trichomaphyte -trichomatose -trichomatosis -trichomatous -trichome -trichomic -trichomonad -Trichomonadidae -Trichomonas -trichomoniasis -trichomycosis -trichonosus -trichopathic -trichopathy -trichophore -trichophoric -trichophyllous -trichophyte -trichophytia -trichophytic -Trichophyton -trichophytosis -Trichoplax -trichopore -trichopter -Trichoptera -trichoptera -trichopteran -trichopteron -trichopterous -trichopterygid -Trichopterygidae -trichord -trichorrhea -trichorrhexic -trichorrhexis -Trichosanthes -trichoschisis -trichosis -trichosporange -trichosporangial -trichosporangium -Trichosporum -trichostasis -Trichostema -trichostrongyle -trichostrongylid -Trichostrongylus -trichothallic -trichotillomania -trichotomic -trichotomism -trichotomist -trichotomize -trichotomous -trichotomously -trichotomy -trichroic -trichroism -trichromat -trichromate -trichromatic -trichromatism -trichromatist -trichrome -trichromic -trichronous -trichuriasis -Trichuris -trichy -Tricia -tricinium -tricipital -tricircular -trick -tricker -trickery -trickful -trickily -trickiness -tricking -trickingly -trickish -trickishly -trickishness -trickle -trickless -tricklet -tricklike -trickling -tricklingly -trickly -trickment -trickproof -tricksical -tricksily -tricksiness -tricksome -trickster -trickstering -trickstress -tricksy -tricktrack -tricky -triclad -Tricladida -triclinate -triclinia -triclinial -tricliniarch -tricliniary -triclinic -triclinium -triclinohedric -tricoccose -tricoccous -tricolette -tricolic -tricolon -tricolor -tricolored -tricolumnar -tricompound -triconch -Triconodon -triconodont -Triconodonta -triconodontid -triconodontoid -triconodonty -triconsonantal -triconsonantalism -tricophorous -tricorn -tricornered -tricornute -tricorporal -tricorporate -tricoryphean -tricosane -tricosanone -tricostate -tricosyl -tricosylic -tricot -tricotine -tricotyledonous -tricresol -tricrotic -tricrotism -tricrotous -tricrural -tricurvate -tricuspal -tricuspid -tricuspidal -tricuspidate -tricuspidated -tricussate -tricyanide -tricycle -tricyclene -tricycler -tricyclic -tricyclist -Tricyrtis -Tridacna -Tridacnidae -tridactyl -tridactylous -tridaily -triddler -tridecane -tridecene -tridecilateral -tridecoic -tridecyl -tridecylene -tridecylic -trident -tridental -tridentate -tridentated -tridentiferous -Tridentine -Tridentinian -tridepside -tridermic -tridiametral -tridiapason -tridigitate -tridimensional -tridimensionality -tridimensioned -tridiurnal -tridominium -tridrachm -triduan -triduum -tridymite -tridynamous -tried -triedly -trielaidin -triene -triennial -trienniality -triennially -triennium -triens -triental -Trientalis -triequal -trier -trierarch -trierarchal -trierarchic -trierarchy -trierucin -trieteric -trieterics -triethanolamine -triethyl -triethylamine -triethylstibine -trifa -trifacial -trifarious -trifasciated -triferous -trifid -trifilar -trifistulary -triflagellate -trifle -trifledom -trifler -triflet -trifling -triflingly -triflingness -trifloral -triflorate -triflorous -trifluoride -trifocal -trifoil -trifold -trifoliate -trifoliated -trifoliolate -trifoliosis -Trifolium -trifolium -trifoly -triforial -triforium -triform -triformed -triformin -triformity -triformous -trifoveolate -trifuran -trifurcal -trifurcate -trifurcation -trig -trigamist -trigamous -trigamy -trigeminal -trigeminous -trigeneric -trigesimal -trigger -triggered -triggerfish -triggerless -trigintal -trigintennial -Trigla -triglandular -triglid -Triglidae -triglochid -Triglochin -triglochin -triglot -trigly -triglyceride -triglyceryl -triglyph -triglyphal -triglyphed -triglyphic -triglyphical -trigness -trigon -Trigona -trigonal -trigonally -trigone -Trigonella -trigonelline -trigoneutic -trigoneutism -Trigonia -Trigoniaceae -trigoniacean -trigoniaceous -trigonic -trigonid -Trigoniidae -trigonite -trigonitis -trigonocephalic -trigonocephalous -Trigonocephalus -trigonocephaly -trigonocerous -trigonododecahedron -trigonodont -trigonoid -trigonometer -trigonometric -trigonometrical -trigonometrician -trigonometry -trigonon -trigonotype -trigonous -trigonum -trigram -trigrammatic -trigrammatism -trigrammic -trigraph -trigraphic -triguttulate -trigyn -Trigynia -trigynian -trigynous -trihalide -trihedral -trihedron -trihemeral -trihemimer -trihemimeral -trihemimeris -trihemiobol -trihemiobolion -trihemitetartemorion -trihoral -trihourly -trihybrid -trihydrate -trihydrated -trihydric -trihydride -trihydrol -trihydroxy -trihypostatic -trijugate -trijugous -trijunction -trikaya -trike -triker -trikeria -trikerion -triketo -triketone -trikir -trilabe -trilabiate -trilamellar -trilamellated -trilaminar -trilaminate -trilarcenous -trilateral -trilaterality -trilaterally -trilateralness -trilaurin -trilby -trilemma -trilinear -trilineate -trilineated -trilingual -trilinguar -trilinolate -trilinoleate -trilinolenate -trilinolenin -Trilisa -trilit -trilite -triliteral -triliteralism -triliterality -triliterally -triliteralness -trilith -trilithic -trilithon -trill -trillachan -trillet -trilli -Trilliaceae -trilliaceous -trillibub -trilliin -trilling -trillion -trillionaire -trillionize -trillionth -Trillium -trillium -trillo -trilobate -trilobated -trilobation -trilobe -trilobed -Trilobita -trilobite -trilobitic -trilocular -triloculate -trilogic -trilogical -trilogist -trilogy -Trilophodon -trilophodont -triluminar -triluminous -trim -trimacer -trimacular -trimargarate -trimargarin -trimastigate -trimellitic -trimembral -trimensual -trimer -Trimera -trimercuric -Trimeresurus -trimeric -trimeride -trimerite -trimerization -trimerous -trimesic -trimesinic -trimesitic -trimesitinic -trimester -trimestral -trimestrial -trimesyl -trimetalism -trimetallic -trimeter -trimethoxy -trimethyl -trimethylacetic -trimethylamine -trimethylbenzene -trimethylene -trimethylmethane -trimethylstibine -trimetric -trimetrical -trimetrogon -trimly -trimmer -trimming -trimmingly -trimness -trimodal -trimodality -trimolecular -trimonthly -trimoric -trimorph -trimorphic -trimorphism -trimorphous -trimotor -trimotored -trimstone -trimtram -trimuscular -trimyristate -trimyristin -trin -Trinacrian -trinal -trinality -trinalize -trinary -trinational -trindle -trine -trinely -trinervate -trinerve -trinerved -trineural -Tringa -tringine -tringle -tringoid -Trinidadian -trinidado -Trinil -Trinitarian -trinitarian -Trinitarianism -trinitrate -trinitration -trinitride -trinitrin -trinitro -trinitrocarbolic -trinitrocellulose -trinitrocresol -trinitroglycerin -trinitromethane -trinitrophenol -trinitroresorcin -trinitrotoluene -trinitroxylene -trinitroxylol -Trinity -trinity -trinityhood -trink -trinkerman -trinket -trinketer -trinketry -trinkety -trinkle -trinklement -trinklet -trinkums -Trinobantes -trinoctial -trinodal -trinode -trinodine -trinol -trinomial -trinomialism -trinomialist -trinomiality -trinomially -trinopticon -Trinorantum -Trinovant -Trinovantes -trintle -trinucleate -Trinucleus -Trio -trio -triobol -triobolon -trioctile -triocular -triode -triodia -triodion -Triodon -Triodontes -Triodontidae -triodontoid -Triodontoidea -Triodontoidei -Triodontophorus -Trioecia -trioecious -trioeciously -trioecism -triolcous -triole -trioleate -triolefin -trioleic -triolein -triolet -triology -Trionychidae -trionychoid -Trionychoideachid -trionychoidean -trionym -trionymal -Trionyx -trioperculate -Triopidae -Triops -trior -triorchis -triorchism -triorthogonal -triose -Triosteum -triovulate -trioxazine -trioxide -trioxymethylene -triozonide -trip -tripal -tripaleolate -tripalmitate -tripalmitin -tripara -tripart -triparted -tripartedly -tripartible -tripartient -tripartite -tripartitely -tripartition -tripaschal -tripe -tripedal -tripel -tripelike -tripeman -tripemonger -tripennate -tripenny -tripeptide -tripersonal -tripersonalism -tripersonalist -tripersonality -tripersonally -tripery -tripeshop -tripestone -tripetaloid -tripetalous -tripewife -tripewoman -triphammer -triphane -triphase -triphaser -Triphasia -triphasic -triphenyl -triphenylamine -triphenylated -triphenylcarbinol -triphenylmethane -triphenylmethyl -triphenylphosphine -triphibian -triphibious -triphony -Triphora -triphthong -triphyletic -triphyline -triphylite -triphyllous -Triphysite -tripinnate -tripinnated -tripinnately -tripinnatifid -tripinnatisect -Tripitaka -triplane -Triplaris -triplasian -triplasic -triple -tripleback -triplefold -triplegia -tripleness -triplet -tripletail -tripletree -triplewise -triplex -triplexity -triplicate -triplication -triplicative -triplicature -Triplice -Triplicist -triplicity -triplicostate -tripliform -triplinerved -tripling -triplite -triploblastic -triplocaulescent -triplocaulous -Triplochitonaceae -triploid -triploidic -triploidite -triploidy -triplopia -triplopy -triplum -triplumbic -triply -tripmadam -tripod -tripodal -tripodial -tripodian -tripodic -tripodical -tripody -tripointed -tripolar -tripoli -Tripoline -tripoline -Tripolitan -tripolite -tripos -tripotassium -trippant -tripper -trippet -tripping -trippingly -trippingness -trippist -tripple -trippler -Tripsacum -tripsill -tripsis -tripsome -tripsomely -triptane -tripterous -triptote -triptych -triptyque -tripudial -tripudiant -tripudiary -tripudiate -tripudiation -tripudist -tripudium -tripunctal -tripunctate -tripy -Tripylaea -tripylaean -Tripylarian -tripylarian -tripyrenous -triquadrantal -triquetra -triquetral -triquetric -triquetrous -triquetrously -triquetrum -triquinate -triquinoyl -triradial -triradially -triradiate -triradiated -triradiately -triradiation -Triratna -trirectangular -triregnum -trireme -trirhombohedral -trirhomboidal -triricinolein -trisaccharide -trisaccharose -trisacramentarian -Trisagion -trisalt -trisazo -trisceptral -trisect -trisected -trisection -trisector -trisectrix -triseme -trisemic -trisensory -trisepalous -triseptate -triserial -triserially -triseriate -triseriatim -trisetose -Trisetum -trishna -trisilane -trisilicane -trisilicate -trisilicic -trisinuate -trisinuated -triskele -triskelion -trismegist -trismegistic -trismic -trismus -trisoctahedral -trisoctahedron -trisodium -trisome -trisomic -trisomy -trisonant -Trisotropis -trispast -trispaston -trispermous -trispinose -trisplanchnic -trisporic -trisporous -trisquare -trist -tristachyous -Tristam -Tristan -Tristania -tristate -tristearate -tristearin -tristeness -tristetrahedron -tristeza -tristful -tristfully -tristfulness -tristich -Tristichaceae -tristichic -tristichous -tristigmatic -tristigmatose -tristiloquy -tristisonous -Tristram -tristylous -trisubstituted -trisubstitution -trisul -trisula -trisulcate -trisulcated -trisulphate -trisulphide -trisulphone -trisulphonic -trisulphoxide -trisylabic -trisyllabical -trisyllabically -trisyllabism -trisyllabity -trisyllable -tritactic -tritagonist -tritangent -tritangential -tritanope -tritanopia -tritanopic -tritaph -trite -Triteleia -tritely -tritemorion -tritencephalon -triteness -triternate -triternately -triterpene -tritetartemorion -tritheism -tritheist -tritheistic -tritheistical -tritheite -tritheocracy -trithing -trithioaldehyde -trithiocarbonate -trithiocarbonic -trithionate -trithionic -Trithrinax -tritical -triticality -tritically -triticalness -triticeous -triticeum -triticin -triticism -triticoid -Triticum -triticum -tritish -tritium -tritocerebral -tritocerebrum -tritocone -tritoconid -Tritogeneia -tritolo -Tritoma -tritomite -Triton -triton -tritonal -tritonality -tritone -Tritoness -Tritonia -Tritonic -Tritonidae -tritonoid -tritonous -tritonymph -tritonymphal -tritopatores -tritopine -tritor -tritoral -tritorium -tritoxide -tritozooid -tritriacontane -trittichan -tritubercular -Trituberculata -trituberculism -trituberculy -triturable -tritural -triturate -trituration -triturator -triturature -triturium -Triturus -trityl -Tritylodon -Triumfetta -Triumph -triumph -triumphal -triumphance -triumphancy -triumphant -triumphantly -triumphator -triumpher -triumphing -triumphwise -triumvir -triumviral -triumvirate -triumviri -triumvirship -triunal -triune -triungulin -triunification -triunion -triunitarian -triunity -triunsaturated -triurid -Triuridaceae -Triuridales -Triuris -trivalence -trivalency -trivalent -trivalerin -trivalve -trivalvular -trivant -trivantly -trivariant -triverbal -triverbial -trivet -trivetwise -trivia -trivial -trivialism -trivialist -triviality -trivialize -trivially -trivialness -trivirga -trivirgate -trivium -trivoltine -trivvet -triweekly -Trix -Trixie -Trixy -trizoic -trizomal -trizonal -trizone -Trizonia -Troad -troat -troca -trocaical -trocar -Trochaic -trochaic -trochaicality -trochal -trochalopod -Trochalopoda -trochalopodous -trochanter -trochanteric -trochanterion -trochantin -trochantinian -trochart -trochate -troche -trocheameter -trochee -trocheeize -trochelminth -Trochelminthes -trochi -trochid -Trochidae -trochiferous -trochiform -Trochila -Trochili -trochili -trochilic -trochilics -trochilidae -trochilidine -trochilidist -trochiline -trochilopodous -Trochilus -trochilus -troching -trochiscation -trochiscus -trochite -trochitic -Trochius -trochlea -trochlear -trochleariform -trochlearis -trochleary -trochleate -trochleiform -trochocephalia -trochocephalic -trochocephalus -trochocephaly -Trochodendraceae -trochodendraceous -Trochodendron -trochoid -trochoidal -trochoidally -trochoides -trochometer -trochophore -Trochosphaera -Trochosphaerida -trochosphere -trochospherical -Trochozoa -trochozoic -trochozoon -Trochus -trochus -trock -troco -troctolite -trod -trodden -trode -troegerite -Troezenian -troft -trog -trogger -troggin -troglodytal -troglodyte -Troglodytes -troglodytic -troglodytical -Troglodytidae -Troglodytinae -troglodytish -troglodytism -trogon -Trogones -Trogonidae -Trogoniformes -trogonoid -trogs -trogue -Troiades -Troic -troika -troilite -Trojan -troke -troker -troll -trolldom -trolleite -troller -trolley -trolleyer -trolleyful -trolleyman -trollflower -trollimog -trolling -Trollius -trollman -trollol -trollop -Trollopean -Trollopeanism -trollopish -trollops -trollopy -trolly -tromba -trombe -trombiculid -trombidiasis -Trombidiidae -Trombidium -trombone -trombonist -trombony -trommel -tromometer -tromometric -tromometrical -tromometry -tromp -trompe -trompil -trompillo -tromple -tron -trona -tronador -tronage -tronc -trondhjemite -trone -troner -troolie -troop -trooper -trooperess -troopfowl -troopship -troopwise -troostite -troostitic -troot -tropacocaine -tropaeolaceae -tropaeolaceous -tropaeolin -Tropaeolum -tropaion -tropal -troparia -troparion -tropary -tropate -trope -tropeic -tropeine -troper -tropesis -trophaea -trophaeum -trophal -trophallactic -trophallaxis -trophectoderm -trophedema -trophema -trophesial -trophesy -trophi -trophic -trophical -trophically -trophicity -trophied -Trophis -trophism -trophobiont -trophobiosis -trophobiotic -trophoblast -trophoblastic -trophochromatin -trophocyte -trophoderm -trophodisc -trophodynamic -trophodynamics -trophogenesis -trophogenic -trophogeny -trophology -trophonema -trophoneurosis -trophoneurotic -Trophonian -trophonucleus -trophopathy -trophophore -trophophorous -trophophyte -trophoplasm -trophoplasmatic -trophoplasmic -trophoplast -trophosomal -trophosome -trophosperm -trophosphere -trophospongia -trophospongial -trophospongium -trophospore -trophotaxis -trophotherapy -trophothylax -trophotropic -trophotropism -trophozoite -trophozooid -trophy -trophyless -trophywort -tropic -tropical -Tropicalia -Tropicalian -tropicality -tropicalization -tropicalize -tropically -tropicopolitan -tropidine -Tropidoleptus -tropine -tropism -tropismatic -tropist -tropistic -tropocaine -tropologic -tropological -tropologically -tropologize -tropology -tropometer -tropopause -tropophil -tropophilous -tropophyte -tropophytic -troposphere -tropostereoscope -tropoyl -troptometer -tropyl -trostera -trot -trotcozy -troth -trothful -trothless -trothlike -trothplight -trotlet -trotline -trotol -trotter -trottie -trottles -trottoir -trottoired -trotty -trotyl -troubadour -troubadourish -troubadourism -troubadourist -trouble -troubledly -troubledness -troublemaker -troublemaking -troublement -troubleproof -troubler -troublesome -troublesomely -troublesomeness -troubling -troublingly -troublous -troublously -troublousness -troubly -trough -troughful -troughing -troughlike -troughster -troughway -troughwise -troughy -trounce -trouncer -troupand -troupe -trouper -troupial -trouse -trouser -trouserdom -trousered -trouserettes -trouserian -trousering -trouserless -trousers -trousseau -trousseaux -trout -troutbird -trouter -troutflower -troutful -troutiness -troutless -troutlet -troutlike -trouty -trouvere -trouveur -trove -troveless -trover -trow -trowel -trowelbeak -troweler -trowelful -trowelman -trowing -trowlesworthite -trowman -trowth -Troy -troy -Troynovant -Troytown -truancy -truandise -truant -truantcy -truantism -truantlike -truantly -truantness -truantry -truantship -trub -trubu -truce -trucebreaker -trucebreaking -truceless -trucemaker -trucemaking -trucial -trucidation -truck -truckage -trucker -truckful -trucking -truckle -truckler -trucklike -truckling -trucklingly -truckload -truckman -truckmaster -trucks -truckster -truckway -truculence -truculency -truculent -truculental -truculently -truculentness -truddo -trudellite -trudge -trudgen -trudger -Trudy -true -trueborn -truebred -truehearted -trueheartedly -trueheartedness -truelike -truelove -trueness -truepenny -truer -truff -truffle -truffled -trufflelike -truffler -trufflesque -trug -truish -truism -truismatic -truistic -truistical -trull -Trullan -truller -trullization -trullo -truly -trumbash -trummel -trump -trumper -trumperiness -trumpery -trumpet -trumpetbush -trumpeter -trumpeting -trumpetless -trumpetlike -trumpetry -trumpetweed -trumpetwood -trumpety -trumph -trumpie -trumpless -trumplike -trun -truncage -truncal -truncate -truncated -Truncatella -Truncatellidae -truncately -truncation -truncator -truncatorotund -truncatosinuate -truncature -trunch -trunched -truncheon -truncheoned -truncher -trunchman -trundle -trundlehead -trundler -trundleshot -trundletail -trundling -trunk -trunkback -trunked -trunkfish -trunkful -trunking -trunkless -trunkmaker -trunknose -trunkway -trunkwork -trunnel -trunnion -trunnioned -trunnionless -trush -trusion -truss -trussed -trussell -trusser -trussing -trussmaker -trussmaking -trusswork -trust -trustability -trustable -trustableness -trustably -trustee -trusteeism -trusteeship -trusten -truster -trustful -trustfully -trustfulness -trustification -trustify -trustihood -trustily -trustiness -trusting -trustingly -trustingness -trustle -trustless -trustlessly -trustlessness -trustman -trustmonger -trustwoman -trustworthily -trustworthiness -trustworthy -trusty -truth -truthable -truthful -truthfully -truthfulness -truthify -truthiness -truthless -truthlessly -truthlessness -truthlike -truthlikeness -truthsman -truthteller -truthtelling -truthy -Trutta -truttaceous -truvat -truxillic -truxilline -try -trygon -Trygonidae -tryhouse -Trying -trying -tryingly -tryingness -tryma -tryout -tryp -trypa -trypan -trypaneid -Trypaneidae -trypanocidal -trypanocide -trypanolysin -trypanolysis -trypanolytic -Trypanosoma -trypanosoma -trypanosomacidal -trypanosomacide -trypanosomal -trypanosomatic -Trypanosomatidae -trypanosomatosis -trypanosomatous -trypanosome -trypanosomiasis -trypanosomic -Tryparsamide -Trypeta -trypetid -Trypetidae -Tryphena -Tryphosa -trypiate -trypograph -trypographic -trypsin -trypsinize -trypsinogen -tryptase -tryptic -tryptogen -tryptone -tryptonize -tryptophan -trysail -tryst -tryster -trysting -tryt -tryworks -tsadik -tsamba -tsantsa -tsar -tsardom -tsarevitch -tsarina -tsaritza -tsarship -tsatlee -Tsattine -tscharik -tscheffkinite -Tscherkess -tsere -tsessebe -tsetse -Tshi -tsia -Tsiltaden -Tsimshian -tsine -tsingtauite -tsiology -Tsoneca -Tsonecan -tst -tsuba -tsubo -Tsuga -Tsuma -tsumebite -tsun -tsunami -tsungtu -Tsutsutsi -tu -tua -Tualati -Tuamotu -Tuamotuan -Tuan -tuan -Tuareg -tuarn -tuart -tuatara -tuatera -tuath -tub -Tuba -tuba -tubae -tubage -tubal -tubaphone -tubar -tubate -tubatoxin -Tubatulabal -tubba -tubbable -tubbal -tubbeck -tubber -tubbie -tubbiness -tubbing -tubbish -tubboe -tubby -tube -tubeflower -tubeform -tubeful -tubehead -tubehearted -tubeless -tubelet -tubelike -tubemaker -tubemaking -tubeman -tuber -Tuberaceae -tuberaceous -Tuberales -tuberation -tubercle -tubercled -tuberclelike -tubercula -tubercular -Tubercularia -Tuberculariaceae -tuberculariaceous -tubercularization -tubercularize -tubercularly -tubercularness -tuberculate -tuberculated -tuberculatedly -tuberculately -tuberculation -tuberculatogibbous -tuberculatonodose -tuberculatoradiate -tuberculatospinous -tubercule -tuberculed -tuberculid -tuberculide -tuberculiferous -tuberculiform -tuberculin -tuberculinic -tuberculinization -tuberculinize -tuberculization -tuberculize -tuberculocele -tuberculocidin -tuberculoderma -tuberculoid -tuberculoma -tuberculomania -tuberculomata -tuberculophobia -tuberculoprotein -tuberculose -tuberculosectorial -tuberculosed -tuberculosis -tuberculotherapist -tuberculotherapy -tuberculotoxin -tuberculotrophic -tuberculous -tuberculously -tuberculousness -tuberculum -tuberiferous -tuberiform -tuberin -tuberization -tuberize -tuberless -tuberoid -tuberose -tuberosity -tuberous -tuberously -tuberousness -tubesmith -tubework -tubeworks -tubfish -tubful -tubicen -tubicinate -tubicination -Tubicola -Tubicolae -tubicolar -tubicolous -tubicorn -tubicornous -tubifacient -tubifer -tubiferous -Tubifex -Tubificidae -Tubiflorales -tubiflorous -tubiform -tubig -tubik -tubilingual -Tubinares -tubinarial -tubinarine -tubing -Tubingen -tubiparous -Tubipora -tubipore -tubiporid -Tubiporidae -tubiporoid -tubiporous -tublet -tublike -tubmaker -tubmaking -tubman -tuboabdominal -tubocurarine -tubolabellate -tuboligamentous -tuboovarial -tuboovarian -tuboperitoneal -tuborrhea -tubotympanal -tubovaginal -tubular -Tubularia -tubularia -Tubulariae -tubularian -Tubularida -tubularidan -Tubulariidae -tubularity -tubularly -tubulate -tubulated -tubulation -tubulator -tubulature -tubule -tubulet -tubuli -tubulibranch -tubulibranchian -Tubulibranchiata -tubulibranchiate -Tubulidentata -tubulidentate -Tubulifera -tubuliferan -tubuliferous -tubulifloral -tubuliflorous -tubuliform -Tubulipora -tubulipore -tubuliporid -Tubuliporidae -tubuliporoid -tubulization -tubulodermoid -tubuloracemose -tubulosaccular -tubulose -tubulostriato -tubulous -tubulously -tubulousness -tubulure -tubulus -tubwoman -Tucana -Tucanae -tucandera -Tucano -tuchit -tuchun -tuchunate -tuchunism -tuchunize -tuck -Tuckahoe -tuckahoe -tucker -tuckermanity -tucket -tucking -tuckner -tuckshop -tucktoo -tucky -tucum -tucuma -tucuman -Tucuna -tudel -Tudesque -Tudor -Tudoresque -tue -tueiron -Tuesday -tufa -tufaceous -tufalike -tufan -tuff -tuffaceous -tuffet -tuffing -tuft -tuftaffeta -tufted -tufter -tufthunter -tufthunting -tuftily -tufting -tuftlet -tufty -tug -tugboat -tugboatman -tugger -tuggery -tugging -tuggingly -tughra -tugless -tuglike -tugman -tugrik -tugui -tugurium -tui -tuik -tuille -tuillette -tuilyie -tuism -tuition -tuitional -tuitionary -tuitive -tuke -tukra -Tukuler -Tukulor -tula -Tulalip -tulare -tularemia -tulasi -Tulbaghia -tulchan -tulchin -tule -tuliac -tulip -Tulipa -tulipflower -tulipiferous -tulipist -tuliplike -tulipomania -tulipomaniac -tulipwood -tulipy -tulisan -Tulkepaia -tulle -Tullian -tullibee -Tulostoma -tulsi -Tulu -tulwar -tum -tumasha -tumatakuru -tumatukuru -tumbak -tumbester -tumble -tumblebug -tumbled -tumbledung -tumbler -tumblerful -tumblerlike -tumblerwise -tumbleweed -tumblification -tumbling -tumblingly -tumbly -Tumboa -tumbrel -tume -tumefacient -tumefaction -tumefy -tumescence -tumescent -tumid -tumidity -tumidly -tumidness -Tumion -tummals -tummel -tummer -tummock -tummy -tumor -tumored -tumorlike -tumorous -tump -tumpline -tumtum -tumular -tumulary -tumulate -tumulation -tumuli -tumulose -tumulosity -tumulous -tumult -tumultuarily -tumultuariness -tumultuary -tumultuate -tumultuation -tumultuous -tumultuously -tumultuousness -tumulus -Tumupasa -tun -Tuna -tuna -tunable -tunableness -tunably -tunbellied -tunbelly -tunca -tund -tundagslatta -tunder -tundish -tundra -tundun -tune -Tunebo -tuned -tuneful -tunefully -tunefulness -tuneless -tunelessly -tunelessness -tunemaker -tunemaking -tuner -tunesome -tunester -tunful -tung -Tunga -Tungan -tungate -tungo -tungstate -tungsten -tungstenic -tungsteniferous -tungstenite -tungstic -tungstite -tungstosilicate -tungstosilicic -Tungus -Tungusian -Tungusic -tunhoof -tunic -Tunica -Tunican -tunicary -Tunicata -tunicate -tunicated -tunicin -tunicked -tunicle -tunicless -tuniness -tuning -tunish -Tunisian -tunist -tunk -Tunker -tunket -tunlike -tunmoot -tunna -tunnel -tunneled -tunneler -tunneling -tunnelist -tunnelite -tunnellike -tunnelly -tunnelmaker -tunnelmaking -tunnelman -tunnelway -tunner -tunnery -Tunnit -tunnland -tunnor -tunny -tuno -tunu -tuny -tup -Tupaia -Tupaiidae -tupakihi -tupanship -tupara -tupek -tupelo -Tupi -Tupian -tupik -Tupinamba -Tupinaqui -tupman -tuppence -tuppenny -Tupperian -Tupperish -Tupperism -Tupperize -tupuna -tuque -tur -turacin -Turacus -Turanian -Turanianism -Turanism -turanose -turb -turban -turbaned -turbanesque -turbanette -turbanless -turbanlike -turbantop -turbanwise -turbary -turbeh -Turbellaria -turbellarian -turbellariform -turbescency -turbid -turbidimeter -turbidimetric -turbidimetry -turbidity -turbidly -turbidness -turbinaceous -turbinage -turbinal -turbinate -turbinated -turbination -turbinatoconcave -turbinatocylindrical -turbinatoglobose -turbinatostipitate -turbine -turbinectomy -turbined -turbinelike -Turbinella -Turbinellidae -turbinelloid -turbiner -turbines -Turbinidae -turbiniform -turbinoid -turbinotome -turbinotomy -turbit -turbith -turbitteen -Turbo -turbo -turboalternator -turboblower -turbocompressor -turbodynamo -turboexciter -turbofan -turbogenerator -turbomachine -turbomotor -turbopump -turbosupercharge -turbosupercharger -turbot -turbotlike -turboventilator -turbulence -turbulency -turbulent -turbulently -turbulentness -Turcian -Turcic -Turcification -Turcism -Turcize -Turco -turco -Turcoman -Turcophilism -turcopole -turcopolier -turd -Turdetan -Turdidae -turdiform -Turdinae -turdine -turdoid -Turdus -tureen -tureenful -turf -turfage -turfdom -turfed -turfen -turfiness -turfing -turfite -turfless -turflike -turfman -turfwise -turfy -turgency -turgent -turgently -turgesce -turgescence -turgescency -turgescent -turgescible -turgid -turgidity -turgidly -turgidness -turgite -turgoid -turgor -turgy -Turi -turicata -turio -turion -turioniferous -turjaite -turjite -Turk -turk -Turkana -Turkdom -Turkeer -turken -Turkery -Turkess -Turkey -turkey -turkeyback -turkeyberry -turkeybush -Turkeydom -turkeyfoot -Turkeyism -turkeylike -Turki -Turkic -Turkicize -Turkification -Turkify -turkis -Turkish -Turkishly -Turkishness -Turkism -Turkize -turkle -Turklike -Turkman -Turkmen -Turkmenian -Turkologist -Turkology -Turkoman -Turkomania -Turkomanic -Turkomanize -Turkophil -Turkophile -Turkophilia -Turkophilism -Turkophobe -Turkophobist -turlough -Turlupin -turm -turma -turment -turmeric -turmit -turmoil -turmoiler -turn -turnable -turnabout -turnagain -turnaround -turnaway -turnback -turnbout -turnbuckle -turncap -turncoat -turncoatism -turncock -turndown -turndun -turned -turnel -turner -Turnera -Turneraceae -turneraceous -Turneresque -Turnerian -Turnerism -turnerite -turnery -turney -turngate -turnhall -Turnhalle -Turnices -Turnicidae -turnicine -Turnicomorphae -turnicomorphic -turning -turningness -turnip -turniplike -turnipweed -turnipwise -turnipwood -turnipy -Turnix -turnix -turnkey -turnoff -turnout -turnover -turnpike -turnpiker -turnpin -turnplate -turnplow -turnrow -turns -turnscrew -turnsheet -turnskin -turnsole -turnspit -turnstile -turnstone -turntable -turntail -turnup -turnwrest -turnwrist -Turonian -turp -turpantineweed -turpentine -turpentineweed -turpentinic -turpeth -turpethin -turpid -turpidly -turpitude -turps -turquoise -turquoiseberry -turquoiselike -turr -turret -turreted -turrethead -turretlike -turrical -turricle -turricula -turriculae -turricular -turriculate -turriferous -turriform -turrigerous -Turrilepas -turrilite -Turrilites -turriliticone -Turrilitidae -Turritella -turritella -turritellid -Turritellidae -turritelloid -turse -Tursenoi -Tursha -tursio -Tursiops -Turtan -turtle -turtleback -turtlebloom -turtledom -turtledove -turtlehead -turtleize -turtlelike -turtler -turtlet -turtling -turtosa -tururi -turus -Turveydrop -Turveydropdom -Turveydropian -turwar -Tusayan -Tuscan -Tuscanism -Tuscanize -Tuscanlike -Tuscany -Tuscarora -tusche -Tusculan -Tush -tush -tushed -Tushepaw -tusher -tushery -tusk -tuskar -tusked -Tuskegee -tusker -tuskish -tuskless -tusklike -tuskwise -tusky -tussah -tussal -tusser -tussicular -Tussilago -tussis -tussive -tussle -tussock -tussocked -tussocker -tussocky -tussore -tussur -tut -tutania -tutball -tute -tutee -tutela -tutelage -tutelar -tutelary -Tutelo -tutenag -tuth -tutin -tutiorism -tutiorist -tutly -tutman -tutor -tutorage -tutorer -tutoress -tutorhood -tutorial -tutorially -tutoriate -tutorism -tutorization -tutorize -tutorless -tutorly -tutorship -tutory -tutoyer -tutress -tutrice -tutrix -tuts -tutsan -tutster -tutti -tuttiman -tutty -tutu -tutulus -Tututni -tutwork -tutworker -tutworkman -tuwi -tux -tuxedo -tuyere -Tuyuneiri -tuza -Tuzla -tuzzle -twa -Twaddell -twaddle -twaddledom -twaddleize -twaddlement -twaddlemonger -twaddler -twaddlesome -twaddling -twaddlingly -twaddly -twaddy -twae -twaesome -twafauld -twagger -twain -twaite -twal -twale -twalpenny -twalpennyworth -twalt -Twana -twang -twanger -twanginess -twangle -twangler -twangy -twank -twanker -twanking -twankingly -twankle -twanky -twant -twarly -twas -twasome -twat -twatchel -twatterlight -twattle -twattler -twattling -tway -twayblade -twazzy -tweag -tweak -tweaker -tweaky -twee -tweed -tweeded -tweedle -tweedledee -tweedledum -tweedy -tweeg -tweel -tween -tweenlight -tweeny -tweesh -tweesht -tweest -tweet -tweeter -tweeze -tweezer -tweezers -tweil -twelfhynde -twelfhyndeman -twelfth -twelfthly -Twelfthtide -twelve -twelvefold -twelvehynde -twelvehyndeman -twelvemo -twelvemonth -twelvepence -twelvepenny -twelvescore -twentieth -twentiethly -twenty -twentyfold -twentymo -twere -twerp -Twi -twibil -twibilled -twice -twicer -twicet -twichild -twick -twiddle -twiddler -twiddling -twiddly -twifoil -twifold -twifoldly -twig -twigful -twigged -twiggen -twigger -twiggy -twigless -twiglet -twiglike -twigsome -twigwithy -twilight -twilightless -twilightlike -twilighty -twilit -twill -twilled -twiller -twilling -twilly -twilt -twin -twinable -twinberry -twinborn -twindle -twine -twineable -twinebush -twineless -twinelike -twinemaker -twinemaking -twiner -twinflower -twinfold -twinge -twingle -twinhood -twiningly -twinism -twink -twinkle -twinkledum -twinkleproof -twinkler -twinkles -twinkless -twinkling -twinklingly -twinkly -twinleaf -twinlike -twinling -twinly -twinned -twinner -twinness -twinning -twinship -twinsomeness -twinter -twiny -twire -twirk -twirl -twirler -twirligig -twirly -twiscar -twisel -twist -twistable -twisted -twistedly -twistened -twister -twisterer -twistical -twistification -twistily -twistiness -twisting -twistingly -twistiways -twistiwise -twistle -twistless -twisty -twit -twitch -twitchel -twitcheling -twitcher -twitchet -twitchety -twitchfire -twitchily -twitchiness -twitchingly -twitchy -twite -twitlark -twitten -twitter -twitteration -twitterboned -twitterer -twittering -twitteringly -twitterly -twittery -twittingly -twitty -twixt -twixtbrain -twizzened -twizzle -two -twodecker -twofold -twofoldly -twofoldness -twoling -twoness -twopence -twopenny -twosome -twyblade -twyhynde -Tybalt -Tyburn -Tyburnian -Tyche -tychism -tychite -Tychonian -Tychonic -tychoparthenogenesis -tychopotamic -tycoon -tycoonate -tyddyn -tydie -tye -tyee -tyg -Tyigh -tying -tyke -tyken -tykhana -tyking -tylarus -tyleberry -Tylenchus -Tyler -Tylerism -Tylerite -Tylerize -tylion -tyloma -tylopod -Tylopoda -tylopodous -Tylosaurus -tylose -tylosis -tylosteresis -Tylostoma -Tylostomaceae -tylostylar -tylostyle -tylostylote -tylostylus -Tylosurus -tylotate -tylote -tylotic -tylotoxea -tylotoxeate -tylotus -tylus -tymbalon -tymp -tympan -tympana -tympanal -tympanectomy -tympani -tympanic -tympanichord -tympanichordal -tympanicity -tympaniform -tympaning -tympanism -tympanist -tympanites -tympanitic -tympanitis -tympanocervical -tympanohyal -tympanomalleal -tympanomandibular -tympanomastoid -tympanomaxillary -tympanon -tympanoperiotic -tympanosis -tympanosquamosal -tympanostapedial -tympanotemporal -tympanotomy -Tympanuchus -tympanum -tympany -tynd -Tyndallization -Tyndallize -tyndallmeter -Tynwald -typal -typarchical -type -typecast -Typees -typeholder -typer -typescript -typeset -typesetter -typesetting -typewrite -typewriter -typewriting -Typha -Typhaceae -typhaceous -typhemia -typhia -typhic -typhinia -typhization -typhlatonia -typhlatony -typhlectasis -typhlectomy -typhlenteritis -typhlitic -typhlitis -typhloalbuminuria -typhlocele -typhloempyema -typhloenteritis -typhlohepatitis -typhlolexia -typhlolithiasis -typhlology -typhlomegaly -Typhlomolge -typhlon -typhlopexia -typhlopexy -typhlophile -typhlopid -Typhlopidae -Typhlops -typhloptosis -typhlosis -typhlosolar -typhlosole -typhlostenosis -typhlostomy -typhlotomy -typhobacillosis -Typhoean -typhoemia -typhogenic -typhoid -typhoidal -typhoidin -typhoidlike -typholysin -typhomalaria -typhomalarial -typhomania -typhonia -Typhonian -Typhonic -typhonic -typhoon -typhoonish -typhopneumonia -typhose -typhosepsis -typhosis -typhotoxine -typhous -Typhula -typhus -typic -typica -typical -typicality -typically -typicalness -typicon -typicum -typification -typifier -typify -typist -typo -typobar -typocosmy -typographer -typographia -typographic -typographical -typographically -typographist -typography -typolithographic -typolithography -typologic -typological -typologically -typologist -typology -typomania -typometry -typonym -typonymal -typonymic -typonymous -typophile -typorama -typoscript -typotelegraph -typotelegraphy -typothere -Typotheria -Typotheriidae -typothetae -typp -typtological -typtologist -typtology -typy -tyramine -tyranness -Tyranni -tyrannial -tyrannic -tyrannical -tyrannically -tyrannicalness -tyrannicidal -tyrannicide -tyrannicly -Tyrannidae -Tyrannides -Tyranninae -tyrannine -tyrannism -tyrannize -tyrannizer -tyrannizing -tyrannizingly -tyrannoid -tyrannophobia -tyrannosaur -Tyrannosaurus -tyrannous -tyrannously -tyrannousness -Tyrannus -tyranny -tyrant -tyrantcraft -tyrantlike -tyrantship -tyre -tyremesis -Tyrian -tyriasis -tyro -tyrocidin -tyrocidine -tyroglyphid -Tyroglyphidae -Tyroglyphus -Tyrolean -Tyrolese -Tyrolienne -tyrolite -tyrology -tyroma -tyromancy -tyromatous -tyrone -tyronic -tyronism -tyrosinase -tyrosine -tyrosinuria -tyrosyl -tyrotoxicon -tyrotoxine -Tyrr -Tyrrhene -Tyrrheni -Tyrrhenian -Tyrsenoi -Tyrtaean -tysonite -tyste -tyt -Tyto -Tytonidae -Tzaam -Tzapotec -tzaritza -Tzendal -Tzental -tzolkin -tzontle -Tzotzil -Tzutuhil -U -u -uang -Uaraycu -Uarekena -Uaupe -uayeb -Ubbenite -Ubbonite -uberant -uberous -uberously -uberousness -uberty -ubi -ubication -ubiety -Ubii -Ubiquarian -ubiquarian -ubiquious -Ubiquist -ubiquit -Ubiquitarian -ubiquitarian -Ubiquitarianism -ubiquitariness -ubiquitary -Ubiquitism -Ubiquitist -ubiquitous -ubiquitously -ubiquitousness -ubiquity -ubussu -Uca -Ucal -Ucayale -Uchean -Uchee -uckia -Ud -udal -udaler -udaller -udalman -udasi -udder -uddered -udderful -udderless -udderlike -udell -Udi -Udic -Udish -udo -Udolphoish -udometer -udometric -udometry -udomograph -Uds -Ueueteotl -ug -Ugandan -Ugarono -ugh -uglification -uglifier -uglify -uglily -ugliness -uglisome -ugly -Ugrian -Ugric -Ugroid -ugsome -ugsomely -ugsomeness -uhlan -uhllo -uhtensang -uhtsong -Uigur -Uigurian -Uiguric -uily -uinal -Uinta -uintaite -uintathere -Uintatheriidae -Uintatherium -uintjie -Uirina -Uitotan -uitspan -uji -ukase -uke -ukiyoye -Ukrainer -Ukrainian -ukulele -ula -ulatrophia -ulcer -ulcerable -ulcerate -ulceration -ulcerative -ulcered -ulceromembranous -ulcerous -ulcerously -ulcerousness -ulcery -ulcuscle -ulcuscule -ule -ulema -ulemorrhagia -ulerythema -uletic -Ulex -ulex -ulexine -ulexite -Ulidia -Ulidian -uliginose -uliginous -ulitis -ull -ulla -ullage -ullaged -ullagone -uller -ulling -ullmannite -ulluco -Ulmaceae -ulmaceous -Ulmaria -ulmic -ulmin -ulminic -ulmo -ulmous -Ulmus -ulna -ulnad -ulnae -ulnar -ulnare -ulnaria -ulnocarpal -ulnocondylar -ulnometacarpal -ulnoradial -uloborid -Uloboridae -Uloborus -ulocarcinoma -uloid -Ulonata -uloncus -Ulophocinae -ulorrhagia -ulorrhagy -ulorrhea -Ulothrix -Ulotrichaceae -ulotrichaceous -Ulotrichales -ulotrichan -Ulotriches -Ulotrichi -ulotrichous -ulotrichy -ulrichite -ulster -ulstered -ulsterette -Ulsterian -ulstering -Ulsterite -Ulsterman -ulterior -ulteriorly -ultima -ultimacy -ultimata -ultimate -ultimately -ultimateness -ultimation -ultimatum -ultimity -ultimo -ultimobranchial -ultimogenitary -ultimogeniture -ultimum -Ultonian -ultra -ultrabasic -ultrabasite -ultrabelieving -ultrabenevolent -ultrabrachycephalic -ultrabrachycephaly -ultrabrilliant -ultracentenarian -ultracentenarianism -ultracentralizer -ultracentrifuge -ultraceremonious -ultrachurchism -ultracivil -ultracomplex -ultraconcomitant -ultracondenser -ultraconfident -ultraconscientious -ultraconservatism -ultraconservative -ultracordial -ultracosmopolitan -ultracredulous -ultracrepidarian -ultracrepidarianism -ultracrepidate -ultracritical -ultradandyism -ultradeclamatory -ultrademocratic -ultradespotic -ultradignified -ultradiscipline -ultradolichocephalic -ultradolichocephaly -ultradolichocranial -ultraeducationist -ultraeligible -ultraelliptic -ultraemphasis -ultraenergetic -ultraenforcement -ultraenthusiasm -ultraenthusiastic -ultraepiscopal -ultraevangelical -ultraexcessive -ultraexclusive -ultraexpeditious -ultrafantastic -ultrafashionable -ultrafastidious -ultrafederalist -ultrafeudal -ultrafidian -ultrafidianism -ultrafilter -ultrafilterability -ultrafilterable -ultrafiltrate -ultrafiltration -ultraformal -ultrafrivolous -ultragallant -ultragaseous -ultragenteel -ultragood -ultragrave -ultraheroic -ultrahonorable -ultrahuman -ultraimperialism -ultraimperialist -ultraimpersonal -ultrainclusive -ultraindifferent -ultraindulgent -ultraingenious -ultrainsistent -ultraintimate -ultrainvolved -ultraism -ultraist -ultraistic -ultralaborious -ultralegality -ultralenient -ultraliberal -ultraliberalism -ultralogical -ultraloyal -ultraluxurious -ultramarine -ultramaternal -ultramaximal -ultramelancholy -ultramicrochemical -ultramicrochemist -ultramicrochemistry -ultramicrometer -ultramicron -ultramicroscope -ultramicroscopic -ultramicroscopical -ultramicroscopy -ultraminute -ultramoderate -ultramodern -ultramodernism -ultramodernist -ultramodernistic -ultramodest -ultramontane -ultramontanism -ultramontanist -ultramorose -ultramulish -ultramundane -ultranational -ultranationalism -ultranationalist -ultranatural -ultranegligent -ultranice -ultranonsensical -ultraobscure -ultraobstinate -ultraofficious -ultraoptimistic -ultraornate -ultraorthodox -ultraorthodoxy -ultraoutrageous -ultrapapist -ultraparallel -ultraperfect -ultrapersuasive -ultraphotomicrograph -ultrapious -ultraplanetary -ultraplausible -ultrapopish -ultraproud -ultraprudent -ultraradical -ultraradicalism -ultrarapid -ultrareactionary -ultrared -ultrarefined -ultrarefinement -ultrareligious -ultraremuneration -ultrarepublican -ultrarevolutionary -ultrarevolutionist -ultraritualism -ultraromantic -ultraroyalism -ultraroyalist -ultrasanguine -ultrascholastic -ultraselect -ultraservile -ultrasevere -ultrashrewd -ultrasimian -ultrasolemn -ultrasonic -ultrasonics -ultraspartan -ultraspecialization -ultraspiritualism -ultrasplendid -ultrastandardization -ultrastellar -ultrasterile -ultrastrenuous -ultrastrict -ultrasubtle -ultrasystematic -ultratechnical -ultratense -ultraterrene -ultraterrestrial -ultratotal -ultratrivial -ultratropical -ultraugly -ultrauncommon -ultraurgent -ultravicious -ultraviolent -ultraviolet -ultravirtuous -ultravirus -ultravisible -ultrawealthy -ultrawise -ultrayoung -ultrazealous -ultrazodiacal -ultroneous -ultroneously -ultroneousness -ulu -Ulua -ulua -uluhi -ululant -ululate -ululation -ululative -ululatory -ululu -Ulva -Ulvaceae -ulvaceous -Ulvales -Ulvan -Ulyssean -Ulysses -um -umangite -Umatilla -Umaua -umbeclad -umbel -umbeled -umbella -Umbellales -umbellar -umbellate -umbellated -umbellately -umbellet -umbellic -umbellifer -Umbelliferae -umbelliferone -umbelliferous -umbelliflorous -umbelliform -umbelloid -Umbellula -Umbellularia -umbellulate -umbellule -Umbellulidae -umbelluliferous -umbelwort -umber -umbethink -umbilectomy -umbilic -umbilical -umbilically -umbilicar -Umbilicaria -umbilicate -umbilicated -umbilication -umbilici -umbiliciform -umbilicus -umbiliform -umbilroot -umble -umbo -umbolateral -umbonal -umbonate -umbonated -umbonation -umbone -umbones -umbonial -umbonic -umbonulate -umbonule -Umbra -umbra -umbracious -umbraciousness -umbraculate -umbraculiferous -umbraculiform -umbraculum -umbrae -umbrage -umbrageous -umbrageously -umbrageousness -umbral -umbrally -umbratile -umbrel -umbrella -umbrellaed -umbrellaless -umbrellalike -umbrellawise -umbrellawort -umbrette -Umbrian -Umbriel -umbriferous -umbriferously -umbriferousness -umbril -umbrine -umbrose -umbrosity -umbrous -Umbundu -ume -umiak -umiri -umlaut -ump -umph -umpirage -umpire -umpirer -umpireship -umpiress -umpirism -Umpqua -umpteen -umpteenth -umptekite -umptieth -umpty -umquhile -umu -un -Una -unabandoned -unabased -unabasedly -unabashable -unabashed -unabashedly -unabatable -unabated -unabatedly -unabating -unabatingly -unabbreviated -unabetted -unabettedness -unabhorred -unabiding -unabidingly -unabidingness -unability -unabject -unabjured -unable -unableness -unably -unabolishable -unabolished -unabraded -unabrased -unabridgable -unabridged -unabrogated -unabrupt -unabsent -unabsolute -unabsolvable -unabsolved -unabsolvedness -unabsorb -unabsorbable -unabsorbed -unabsorbent -unabstract -unabsurd -unabundance -unabundant -unabundantly -unabused -unacademic -unacademical -unaccelerated -unaccent -unaccented -unaccentuated -unaccept -unacceptability -unacceptable -unacceptableness -unacceptably -unacceptance -unacceptant -unaccepted -unaccessibility -unaccessible -unaccessibleness -unaccessibly -unaccessional -unaccessory -unaccidental -unaccidentally -unaccidented -unacclimated -unacclimation -unacclimatization -unacclimatized -unaccommodable -unaccommodated -unaccommodatedness -unaccommodating -unaccommodatingly -unaccommodatingness -unaccompanable -unaccompanied -unaccompanying -unaccomplishable -unaccomplished -unaccomplishedness -unaccord -unaccordable -unaccordance -unaccordant -unaccorded -unaccording -unaccordingly -unaccostable -unaccosted -unaccountability -unaccountable -unaccountableness -unaccountably -unaccounted -unaccoutered -unaccoutred -unaccreditated -unaccredited -unaccrued -unaccumulable -unaccumulate -unaccumulated -unaccumulation -unaccuracy -unaccurate -unaccurately -unaccurateness -unaccursed -unaccusable -unaccusably -unaccuse -unaccusing -unaccustom -unaccustomed -unaccustomedly -unaccustomedness -unachievable -unachieved -unaching -unacidulated -unacknowledged -unacknowledgedness -unacknowledging -unacknowledgment -unacoustic -unacquaint -unacquaintable -unacquaintance -unacquainted -unacquaintedly -unacquaintedness -unacquiescent -unacquirable -unacquirableness -unacquirably -unacquired -unacquit -unacquittable -unacquitted -unacquittedness -unact -unactability -unactable -unacted -unacting -unactinic -unaction -unactivated -unactive -unactively -unactiveness -unactivity -unactorlike -unactual -unactuality -unactually -unactuated -unacute -unacutely -unadapt -unadaptability -unadaptable -unadaptableness -unadaptably -unadapted -unadaptedly -unadaptedness -unadaptive -unadd -unaddable -unadded -unaddicted -unaddictedness -unadditional -unaddress -unaddressed -unadequate -unadequately -unadequateness -unadherence -unadherent -unadherently -unadhesive -unadjacent -unadjacently -unadjectived -unadjourned -unadjournment -unadjudged -unadjust -unadjustably -unadjusted -unadjustment -unadministered -unadmirable -unadmire -unadmired -unadmiring -unadmissible -unadmissibly -unadmission -unadmittable -unadmittableness -unadmittably -unadmitted -unadmittedly -unadmitting -unadmonished -unadopt -unadoptable -unadoptably -unadopted -unadoption -unadorable -unadoration -unadored -unadoring -unadorn -unadornable -unadorned -unadornedly -unadornedness -unadornment -unadult -unadulterate -unadulterated -unadulteratedly -unadulteratedness -unadulterately -unadulterous -unadulterously -unadvanced -unadvancedly -unadvancedness -unadvancement -unadvancing -unadvantaged -unadvantageous -unadventured -unadventuring -unadventurous -unadventurously -unadverse -unadversely -unadverseness -unadvertency -unadvertised -unadvertisement -unadvertising -unadvisability -unadvisable -unadvisableness -unadvisably -unadvised -unadvisedly -unadvisedness -unadvocated -unaerated -unaesthetic -unaesthetical -unafeard -unafeared -unaffable -unaffably -unaffected -unaffectedly -unaffectedness -unaffecting -unaffectionate -unaffectionately -unaffectioned -unaffianced -unaffied -unaffiliated -unaffiliation -unaffirmation -unaffirmed -unaffixed -unafflicted -unafflictedly -unafflicting -unaffliction -unaffordable -unafforded -unaffranchised -unaffrighted -unaffrightedly -unaffronted -unafire -unafloat -unaflow -unafraid -unaged -unaggravated -unaggravating -unaggregated -unaggression -unaggressive -unaggressively -unaggressiveness -unaghast -unagile -unagility -unaging -unagitated -unagitatedly -unagitatedness -unagitation -unagonize -unagrarian -unagreeable -unagreeableness -unagreeably -unagreed -unagreeing -unagreement -unagricultural -unaidable -unaided -unaidedly -unaiding -unailing -unaimed -unaiming -unaired -unaisled -Unakhotana -unakin -unakite -unal -Unalachtigo -unalarm -unalarmed -unalarming -Unalaska -unalcoholized -unaldermanly -unalert -unalertly -unalertness -unalgebraical -unalienable -unalienableness -unalienably -unalienated -unalignable -unaligned -unalike -unalimentary -unalist -unalive -unallayable -unallayably -unallayed -unalleged -unallegorical -unalleviably -unalleviated -unalleviation -unalliable -unallied -unalliedly -unalliedness -unallotment -unallotted -unallow -unallowable -unallowed -unallowedly -unallowing -unalloyed -unallurable -unallured -unalluring -unalluringly -unalmsed -unalone -unaloud -unalphabeted -unalphabetic -unalphabetical -unalterability -unalterable -unalterableness -unalterably -unalteration -unaltered -unaltering -unalternated -unamalgamable -unamalgamated -unamalgamating -unamassed -unamazed -unamazedly -unambiguity -unambiguous -unambiguously -unambiguousness -unambition -unambitious -unambitiously -unambitiousness -unambrosial -unambush -unamenability -unamenable -unamenableness -unamenably -unamend -unamendable -unamended -unamendedly -unamending -unamendment -unamerced -Unami -unamiability -unamiable -unamiableness -unamiably -unamicable -unamicably -unamiss -unamo -unamortization -unamortized -unample -unamplifiable -unamplified -unamply -unamputated -unamusable -unamusably -unamused -unamusement -unamusing -unamusingly -unamusive -unanalogical -unanalogous -unanalogously -unanalogousness -unanalytic -unanalytical -unanalyzable -unanalyzed -unanalyzing -unanatomizable -unanatomized -unancestored -unancestried -unanchor -unanchored -unanchylosed -unancient -unaneled -unangelic -unangelical -unangrily -unangry -unangular -unanimalized -unanimate -unanimated -unanimatedly -unanimatedness -unanimately -unanimism -unanimist -unanimistic -unanimistically -unanimity -unanimous -unanimously -unanimousness -unannealed -unannex -unannexed -unannexedly -unannexedness -unannihilable -unannihilated -unannotated -unannounced -unannoyed -unannoying -unannullable -unannulled -unanointed -unanswerability -unanswerable -unanswerableness -unanswerably -unanswered -unanswering -unantagonistic -unantagonizable -unantagonized -unantagonizing -unanticipated -unanticipating -unanticipatingly -unanticipation -unanticipative -unantiquated -unantiquatedness -unantique -unantiquity -unanxiety -unanxious -unanxiously -unanxiousness -unapart -unapocryphal -unapologetic -unapologizing -unapostatized -unapostolic -unapostolical -unapostolically -unapostrophized -unappalled -unappareled -unapparent -unapparently -unapparentness -unappealable -unappealableness -unappealably -unappealed -unappealing -unappeasable -unappeasableness -unappeasably -unappeased -unappeasedly -unappeasedness -unappendaged -unapperceived -unappertaining -unappetizing -unapplauded -unapplauding -unapplausive -unappliable -unappliableness -unappliably -unapplianced -unapplicable -unapplicableness -unapplicably -unapplied -unapplying -unappoint -unappointable -unappointableness -unappointed -unapportioned -unapposite -unappositely -unappraised -unappreciable -unappreciableness -unappreciably -unappreciated -unappreciating -unappreciation -unappreciative -unappreciatively -unappreciativeness -unapprehendable -unapprehendableness -unapprehendably -unapprehended -unapprehending -unapprehensible -unapprehensibleness -unapprehension -unapprehensive -unapprehensively -unapprehensiveness -unapprenticed -unapprised -unapprisedly -unapprisedness -unapproachability -unapproachable -unapproachableness -unapproached -unapproaching -unapprobation -unappropriable -unappropriate -unappropriated -unappropriately -unappropriateness -unappropriation -unapprovable -unapprovableness -unapprovably -unapproved -unapproving -unapprovingly -unapproximate -unapproximately -unaproned -unapropos -unapt -unaptitude -unaptly -unaptness -unarbitrarily -unarbitrariness -unarbitrary -unarbitrated -unarch -unarchdeacon -unarched -unarchitectural -unarduous -unarguable -unarguableness -unarguably -unargued -unarguing -unargumentative -unargumentatively -unarisen -unarising -unaristocratic -unaristocratically -unarithmetical -unarithmetically -unark -unarm -unarmed -unarmedly -unarmedness -unarmored -unarmorial -unaromatized -unarousable -unaroused -unarousing -unarraignable -unarraigned -unarranged -unarray -unarrayed -unarrestable -unarrested -unarresting -unarrival -unarrived -unarriving -unarrogance -unarrogant -unarrogating -unarted -unartful -unartfully -unartfulness -unarticled -unarticulate -unarticulated -unartificial -unartificiality -unartificially -unartistic -unartistical -unartistically -unartistlike -unary -unascendable -unascendableness -unascended -unascertainable -unascertainableness -unascertainably -unascertained -unashamed -unashamedly -unashamedness -unasinous -unaskable -unasked -unasking -unasleep -unaspersed -unasphalted -unaspirated -unaspiring -unaspiringly -unaspiringness -unassailable -unassailableness -unassailably -unassailed -unassailing -unassassinated -unassaultable -unassaulted -unassayed -unassaying -unassembled -unassented -unassenting -unasserted -unassertive -unassertiveness -unassessable -unassessableness -unassessed -unassibilated -unassiduous -unassignable -unassignably -unassigned -unassimilable -unassimilated -unassimilating -unassimilative -unassisted -unassisting -unassociable -unassociably -unassociated -unassociative -unassociativeness -unassoiled -unassorted -unassuageable -unassuaged -unassuaging -unassuetude -unassumable -unassumed -unassuming -unassumingly -unassumingness -unassured -unassuredly -unassuredness -unassuring -unasterisk -unastonish -unastonished -unastonishment -unastray -unathirst -unathletically -unatmospheric -unatonable -unatoned -unatoning -unattach -unattachable -unattached -unattackable -unattackableness -unattackably -unattacked -unattainability -unattainable -unattainableness -unattainably -unattained -unattaining -unattainment -unattaint -unattainted -unattaintedly -unattempered -unattemptable -unattempted -unattempting -unattendance -unattendant -unattended -unattentive -unattenuated -unattested -unattestedness -unattire -unattired -unattractable -unattractableness -unattracted -unattracting -unattractive -unattractively -unattractiveness -unattributable -unattributed -unattuned -unau -unauctioned -unaudible -unaudibleness -unaudibly -unaudienced -unaudited -unaugmentable -unaugmented -unauspicious -unauspiciously -unauspiciousness -unaustere -unauthentic -unauthentical -unauthentically -unauthenticated -unauthenticity -unauthorish -unauthoritative -unauthoritatively -unauthoritativeness -unauthoritied -unauthoritiveness -unauthorizable -unauthorize -unauthorized -unauthorizedly -unauthorizedness -unautomatic -unautumnal -unavailability -unavailable -unavailableness -unavailably -unavailed -unavailful -unavailing -unavailingly -unavengeable -unavenged -unavenging -unavenued -unaveraged -unaverred -unaverted -unavertible -unavertibleness -unavertibly -unavian -unavoidable -unavoidableness -unavoidably -unavoidal -unavoided -unavoiding -unavouchable -unavouchableness -unavouchably -unavouched -unavowable -unavowableness -unavowably -unavowed -unavowedly -unawakable -unawakableness -unawake -unawaked -unawakened -unawakenedness -unawakening -unawaking -unawardable -unawardableness -unawardably -unawarded -unaware -unawared -unawaredly -unawareness -unawares -unaway -unawed -unawful -unawfully -unawkward -unawned -unaxled -unazotized -unbackboarded -unbacked -unbackward -unbadged -unbaffled -unbaffling -unbag -unbagged -unbailable -unbailableness -unbailed -unbain -unbait -unbaited -unbaized -unbaked -unbalance -unbalanceable -unbalanceably -unbalanced -unbalancement -unbalancing -unbalconied -unbale -unbalked -unballast -unballasted -unballoted -unbandage -unbandaged -unbanded -unbanished -unbank -unbankable -unbankableness -unbankably -unbanked -unbankrupt -unbannered -unbaptize -unbaptized -unbar -unbarb -unbarbarize -unbarbarous -unbarbed -unbarbered -unbare -unbargained -unbark -unbarking -unbaronet -unbarrable -unbarred -unbarrel -unbarreled -unbarren -unbarrenness -unbarricade -unbarricaded -unbarricadoed -unbase -unbased -unbasedness -unbashful -unbashfully -unbashfulness -unbasket -unbastardized -unbaste -unbasted -unbastilled -unbastinadoed -unbated -unbathed -unbating -unbatted -unbatten -unbatterable -unbattered -unbattling -unbay -unbe -unbeached -unbeaconed -unbeaded -unbear -unbearable -unbearableness -unbearably -unbeard -unbearded -unbearing -unbeast -unbeatable -unbeatableness -unbeatably -unbeaten -unbeaued -unbeauteous -unbeauteously -unbeauteousness -unbeautified -unbeautiful -unbeautifully -unbeautifulness -unbeautify -unbeavered -unbeclogged -unbeclouded -unbecome -unbecoming -unbecomingly -unbecomingness -unbed -unbedabbled -unbedaggled -unbedashed -unbedaubed -unbedded -unbedecked -unbedewed -unbedimmed -unbedinned -unbedizened -unbedraggled -unbefit -unbefitting -unbefittingly -unbefittingness -unbefool -unbefriend -unbefriended -unbefringed -unbeget -unbeggar -unbegged -unbegilt -unbeginning -unbeginningly -unbeginningness -unbegirded -unbegirt -unbegot -unbegotten -unbegottenly -unbegottenness -unbegreased -unbegrimed -unbegrudged -unbeguile -unbeguiled -unbeguileful -unbegun -unbehaving -unbeheaded -unbeheld -unbeholdable -unbeholden -unbeholdenness -unbeholding -unbehoveful -unbehoving -unbeing -unbejuggled -unbeknown -unbeknownst -unbelied -unbelief -unbeliefful -unbelieffulness -unbelievability -unbelievable -unbelievableness -unbelievably -unbelieve -unbelieved -unbeliever -unbelieving -unbelievingly -unbelievingness -unbell -unbellicose -unbelligerent -unbelonging -unbeloved -unbelt -unbemoaned -unbemourned -unbench -unbend -unbendable -unbendableness -unbendably -unbended -unbending -unbendingly -unbendingness -unbendsome -unbeneficed -unbeneficent -unbeneficial -unbenefitable -unbenefited -unbenefiting -unbenetted -unbenevolence -unbenevolent -unbenevolently -unbenight -unbenighted -unbenign -unbenignant -unbenignantly -unbenignity -unbenignly -unbent -unbenumb -unbenumbed -unbequeathable -unbequeathed -unbereaved -unbereft -unberouged -unberth -unberufen -unbeseem -unbeseeming -unbeseemingly -unbeseemingness -unbeseemly -unbeset -unbesieged -unbesmeared -unbesmirched -unbesmutted -unbesot -unbesought -unbespeak -unbespoke -unbespoken -unbesprinkled -unbestarred -unbestowed -unbet -unbeteared -unbethink -unbethought -unbetide -unbetoken -unbetray -unbetrayed -unbetraying -unbetrothed -unbetterable -unbettered -unbeveled -unbewailed -unbewailing -unbewilder -unbewildered -unbewilled -unbewitch -unbewitched -unbewitching -unbewrayed -unbewritten -unbias -unbiasable -unbiased -unbiasedly -unbiasedness -unbibulous -unbickered -unbickering -unbid -unbidable -unbiddable -unbidden -unbigged -unbigoted -unbilled -unbillet -unbilleted -unbind -unbindable -unbinding -unbiographical -unbiological -unbirdlike -unbirdlimed -unbirdly -unbirthday -unbishop -unbishoply -unbit -unbiting -unbitt -unbitted -unbitten -unbitter -unblacked -unblackened -unblade -unblamable -unblamableness -unblamably -unblamed -unblaming -unblanched -unblanketed -unblasphemed -unblasted -unblazoned -unbleached -unbleaching -unbled -unbleeding -unblemishable -unblemished -unblemishedness -unblemishing -unblenched -unblenching -unblenchingly -unblendable -unblended -unblent -unbless -unblessed -unblessedness -unblest -unblighted -unblightedly -unblightedness -unblind -unblindfold -unblinking -unblinkingly -unbliss -unblissful -unblistered -unblithe -unblithely -unblock -unblockaded -unblocked -unblooded -unbloodied -unbloodily -unbloodiness -unbloody -unbloom -unbloomed -unblooming -unblossomed -unblossoming -unblotted -unbloused -unblown -unblued -unbluestockingish -unbluffed -unbluffing -unblunder -unblundered -unblundering -unblunted -unblurred -unblush -unblushing -unblushingly -unblushingness -unboarded -unboasted -unboastful -unboastfully -unboasting -unboat -unbodied -unbodiliness -unbodily -unboding -unbodkined -unbody -unbodylike -unbog -unboggy -unbohemianize -unboiled -unboisterous -unbokel -unbold -unbolden -unboldly -unboldness -unbolled -unbolster -unbolstered -unbolt -unbolted -unbombast -unbondable -unbondableness -unbonded -unbone -unboned -unbonnet -unbonneted -unbonny -unbooked -unbookish -unbooklearned -unboot -unbooted -unboraxed -unborder -unbordered -unbored -unboring -unborn -unborne -unborough -unborrowed -unborrowing -unbosom -unbosomer -unbossed -unbotanical -unbothered -unbothering -unbottle -unbottom -unbottomed -unbought -unbound -unboundable -unboundableness -unboundably -unbounded -unboundedly -unboundedness -unboundless -unbounteous -unbountiful -unbountifully -unbountifulness -unbow -unbowable -unbowdlerized -unbowed -unbowel -unboweled -unbowered -unbowing -unbowingness -unbowled -unbowsome -unbox -unboxed -unboy -unboyish -unboylike -unbrace -unbraced -unbracedness -unbracelet -unbraceleted -unbracing -unbragged -unbragging -unbraid -unbraided -unbrailed -unbrained -unbran -unbranched -unbranching -unbrand -unbranded -unbrandied -unbrave -unbraved -unbravely -unbraze -unbreachable -unbreached -unbreaded -unbreakable -unbreakableness -unbreakably -unbreakfasted -unbreaking -unbreast -unbreath -unbreathable -unbreathableness -unbreathed -unbreathing -unbred -unbreech -unbreeched -unbreezy -unbrent -unbrewed -unbribable -unbribableness -unbribably -unbribed -unbribing -unbrick -unbridegroomlike -unbridgeable -unbridged -unbridle -unbridled -unbridledly -unbridledness -unbridling -unbrief -unbriefed -unbriefly -unbright -unbrightened -unbrilliant -unbrimming -unbrined -unbrittle -unbroached -unbroad -unbroadcasted -unbroidered -unbroiled -unbroke -unbroken -unbrokenly -unbrokenness -unbronzed -unbrooch -unbrooded -unbrookable -unbrookably -unbrothered -unbrotherlike -unbrotherliness -unbrotherly -unbrought -unbrown -unbrowned -unbruised -unbrushed -unbrutalize -unbrutalized -unbrute -unbrutelike -unbrutify -unbrutize -unbuckle -unbuckramed -unbud -unbudded -unbudgeability -unbudgeable -unbudgeableness -unbudgeably -unbudged -unbudgeted -unbudging -unbuffed -unbuffered -unbuffeted -unbuild -unbuilded -unbuilt -unbulky -unbulled -unbulletined -unbumped -unbumptious -unbunched -unbundle -unbundled -unbung -unbungling -unbuoyant -unbuoyed -unburden -unburdened -unburdenment -unburdensome -unburdensomeness -unburgessed -unburiable -unburial -unburied -unburlesqued -unburly -unburn -unburnable -unburned -unburning -unburnished -unburnt -unburrow -unburrowed -unburst -unburstable -unburstableness -unburthen -unbury -unbush -unbusied -unbusily -unbusiness -unbusinesslike -unbusk -unbuskin -unbuskined -unbustling -unbusy -unbutchered -unbutcherlike -unbuttered -unbutton -unbuttoned -unbuttonment -unbuttressed -unbuxom -unbuxomly -unbuxomness -unbuyable -unbuyableness -unbuying -unca -uncabined -uncabled -uncadenced -uncage -uncaged -uncake -uncalcareous -uncalcified -uncalcined -uncalculable -uncalculableness -uncalculably -uncalculated -uncalculating -uncalculatingly -uncalendered -uncalk -uncalked -uncall -uncalled -uncallow -uncallower -uncalm -uncalmed -uncalmly -uncalumniated -uncambered -uncamerated -uncamouflaged -uncanceled -uncancellable -uncancelled -uncandid -uncandidly -uncandidness -uncandied -uncandor -uncaned -uncankered -uncanned -uncannily -uncanniness -uncanny -uncanonic -uncanonical -uncanonically -uncanonicalness -uncanonize -uncanonized -uncanopied -uncantoned -uncantonized -uncanvassably -uncanvassed -uncap -uncapable -uncapableness -uncapably -uncapacious -uncapacitate -uncaparisoned -uncapitalized -uncapped -uncapper -uncapsizable -uncapsized -uncaptained -uncaptioned -uncaptious -uncaptiously -uncaptivate -uncaptivated -uncaptivating -uncaptived -uncapturable -uncaptured -uncarbonated -uncarboned -uncarbureted -uncarded -uncardinal -uncardinally -uncareful -uncarefully -uncarefulness -uncaressed -uncargoed -Uncaria -uncaricatured -uncaring -uncarnate -uncarnivorous -uncaroled -uncarpentered -uncarpeted -uncarriageable -uncarried -uncart -uncarted -uncartooned -uncarved -uncase -uncased -uncasemated -uncask -uncasked -uncasketed -uncasque -uncassock -uncast -uncaste -uncastigated -uncastle -uncastled -uncastrated -uncasual -uncatalogued -uncatchable -uncate -uncatechised -uncatechisedness -uncatechized -uncatechizedness -uncategorized -uncathedraled -uncatholcity -uncatholic -uncatholical -uncatholicalness -uncatholicize -uncatholicly -uncaucusable -uncaught -uncausatively -uncaused -uncauterized -uncautious -uncautiously -uncautiousness -uncavalier -uncavalierly -uncave -unceasable -unceased -unceasing -unceasingly -unceasingness -unceded -unceiled -unceilinged -uncelebrated -uncelebrating -uncelestial -uncelestialized -uncellar -uncement -uncemented -uncementing -uncensorable -uncensored -uncensorious -uncensoriously -uncensoriousness -uncensurable -uncensured -uncensuring -uncenter -uncentered -uncentral -uncentrality -uncentrally -uncentred -uncentury -uncereclothed -unceremented -unceremonial -unceremonious -unceremoniously -unceremoniousness -uncertain -uncertainly -uncertainness -uncertainty -uncertifiable -uncertifiableness -uncertificated -uncertified -uncertifying -uncertitude -uncessant -uncessantly -uncessantness -unchafed -unchain -unchainable -unchained -unchair -unchaired -unchalked -unchallengeable -unchallengeableness -unchallengeably -unchallenged -unchallenging -unchambered -unchamfered -unchampioned -unchance -unchancellor -unchancy -unchange -unchangeability -unchangeable -unchangeableness -unchangeably -unchanged -unchangedness -unchangeful -unchangefulness -unchanging -unchangingly -unchangingness -unchanneled -unchannelled -unchanted -unchaperoned -unchaplain -unchapleted -unchapter -unchaptered -uncharacter -uncharactered -uncharacteristic -uncharacteristically -uncharacterized -uncharge -unchargeable -uncharged -uncharging -uncharily -unchariness -unchariot -uncharitable -uncharitableness -uncharitably -uncharity -uncharm -uncharmable -uncharmed -uncharming -uncharnel -uncharred -uncharted -unchartered -unchary -unchased -unchaste -unchastely -unchastened -unchasteness -unchastisable -unchastised -unchastising -unchastity -unchatteled -unchauffeured -unchawed -uncheat -uncheated -uncheating -uncheck -uncheckable -unchecked -uncheckered -uncheerable -uncheered -uncheerful -uncheerfully -uncheerfulness -uncheerily -uncheeriness -uncheering -uncheery -unchemical -unchemically -uncherished -uncherishing -unchested -unchevroned -unchewable -unchewableness -unchewed -unchid -unchidden -unchided -unchiding -unchidingly -unchild -unchildish -unchildishly -unchildishness -unchildlike -unchilled -unchiming -unchinked -unchipped -unchiseled -unchiselled -unchivalric -unchivalrous -unchivalrously -unchivalrousness -unchivalry -unchloridized -unchoicely -unchokable -unchoked -uncholeric -unchoosable -unchopped -unchoral -unchorded -unchosen -unchrisom -unchristen -unchristened -unchristian -unchristianity -unchristianize -unchristianized -unchristianlike -unchristianly -unchristianness -unchronicled -unchronological -unchronologically -unchurch -unchurched -unchurchlike -unchurchly -unchurn -unci -uncia -uncial -uncialize -uncially -uncicatrized -unciferous -unciform -unciliated -uncinal -Uncinaria -uncinariasis -uncinariatic -Uncinata -uncinate -uncinated -uncinatum -uncinch -uncinct -uncinctured -uncini -Uncinula -uncinus -uncipher -uncircular -uncircularized -uncirculated -uncircumcised -uncircumcisedness -uncircumcision -uncircumlocutory -uncircumscribable -uncircumscribed -uncircumscribedness -uncircumscript -uncircumscriptible -uncircumscription -uncircumspect -uncircumspection -uncircumspectly -uncircumspectness -uncircumstanced -uncircumstantial -uncirostrate -uncite -uncited -uncitied -uncitizen -uncitizenlike -uncitizenly -uncity -uncivic -uncivil -uncivilish -uncivility -uncivilizable -uncivilization -uncivilize -uncivilized -uncivilizedly -uncivilizedness -uncivilly -uncivilness -unclad -unclaimed -unclaiming -unclamorous -unclamp -unclamped -unclarified -unclarifying -unclarity -unclashing -unclasp -unclasped -unclassable -unclassableness -unclassably -unclassed -unclassible -unclassical -unclassically -unclassifiable -unclassifiableness -unclassification -unclassified -unclassify -unclassifying -unclawed -unclay -unclayed -uncle -unclead -unclean -uncleanable -uncleaned -uncleanlily -uncleanliness -uncleanly -uncleanness -uncleansable -uncleanse -uncleansed -uncleansedness -unclear -uncleared -unclearing -uncleavable -uncleave -uncledom -uncleft -unclehood -unclement -unclemently -unclementness -unclench -unclergy -unclergyable -unclerical -unclericalize -unclerically -unclericalness -unclerklike -unclerkly -uncleship -unclever -uncleverly -uncleverness -unclew -unclick -uncliented -unclify -unclimaxed -unclimb -unclimbable -unclimbableness -unclimbably -unclimbed -unclimbing -unclinch -uncling -unclinical -unclip -unclipped -unclipper -uncloak -uncloakable -uncloaked -unclog -unclogged -uncloister -uncloistered -uncloistral -unclosable -unclose -unclosed -uncloseted -unclothe -unclothed -unclothedly -unclothedness -unclotted -uncloud -unclouded -uncloudedly -uncloudedness -uncloudy -unclout -uncloven -uncloyable -uncloyed -uncloying -unclub -unclubbable -unclubby -unclustered -unclustering -unclutch -unclutchable -unclutched -unclutter -uncluttered -unco -uncoach -uncoachable -uncoachableness -uncoached -uncoacted -uncoagulable -uncoagulated -uncoagulating -uncoat -uncoated -uncoatedness -uncoaxable -uncoaxed -uncoaxing -uncock -uncocked -uncockneyfy -uncocted -uncodded -uncoddled -uncoded -uncodified -uncoerced -uncoffer -uncoffin -uncoffined -uncoffle -uncogent -uncogged -uncogitable -uncognizable -uncognizant -uncognized -uncognoscibility -uncognoscible -uncoguidism -uncoherent -uncoherently -uncoherentness -uncohesive -uncoif -uncoifed -uncoil -uncoiled -uncoin -uncoined -uncoked -uncoking -uncollapsed -uncollapsible -uncollar -uncollared -uncollated -uncollatedness -uncollected -uncollectedly -uncollectedness -uncollectible -uncollectibleness -uncollectibly -uncolleged -uncollegian -uncollegiate -uncolloquial -uncolloquially -uncolonellike -uncolonial -uncolonize -uncolonized -uncolorable -uncolorably -uncolored -uncoloredly -uncoloredness -uncoloured -uncolouredly -uncolouredness -uncolt -uncoly -uncombable -uncombatable -uncombated -uncombed -uncombinable -uncombinableness -uncombinably -uncombine -uncombined -uncombining -uncombiningness -uncombustible -uncome -uncomelily -uncomeliness -uncomely -uncomfort -uncomfortable -uncomfortableness -uncomfortably -uncomforted -uncomforting -uncomfy -uncomic -uncommanded -uncommandedness -uncommanderlike -uncommemorated -uncommenced -uncommendable -uncommendableness -uncommendably -uncommended -uncommensurability -uncommensurable -uncommensurableness -uncommensurate -uncommented -uncommenting -uncommerciable -uncommercial -uncommercially -uncommercialness -uncommingled -uncomminuted -uncommiserated -uncommiserating -uncommissioned -uncommitted -uncommitting -uncommixed -uncommodious -uncommodiously -uncommodiousness -uncommon -uncommonable -uncommonly -uncommonness -uncommonplace -uncommunicable -uncommunicableness -uncommunicably -uncommunicated -uncommunicating -uncommunicative -uncommunicatively -uncommunicativeness -uncommutable -uncommutative -uncommuted -uncompact -uncompacted -Uncompahgre -uncompahgrite -uncompaniable -uncompanied -uncompanioned -uncomparable -uncomparably -uncompared -uncompass -uncompassable -uncompassed -uncompassion -uncompassionate -uncompassionated -uncompassionately -uncompassionateness -uncompassionating -uncompassioned -uncompatible -uncompatibly -uncompellable -uncompelled -uncompelling -uncompensable -uncompensated -uncompetent -uncompetitive -uncompiled -uncomplacent -uncomplained -uncomplaining -uncomplainingly -uncomplainingness -uncomplaint -uncomplaisance -uncomplaisant -uncomplaisantly -uncomplemental -uncompletable -uncomplete -uncompleted -uncompletely -uncompleteness -uncomplex -uncompliability -uncompliable -uncompliableness -uncompliance -uncompliant -uncomplicated -uncomplimentary -uncomplimented -uncomplimenting -uncomplying -uncomposable -uncomposeable -uncomposed -uncompoundable -uncompounded -uncompoundedly -uncompoundedness -uncompounding -uncomprehended -uncomprehending -uncomprehendingly -uncomprehendingness -uncomprehensible -uncomprehension -uncomprehensive -uncomprehensively -uncomprehensiveness -uncompressed -uncompressible -uncomprised -uncomprising -uncomprisingly -uncompromised -uncompromising -uncompromisingly -uncompromisingness -uncompulsive -uncompulsory -uncomputable -uncomputableness -uncomputably -uncomputed -uncomraded -unconcatenated -unconcatenating -unconcealable -unconcealableness -unconcealably -unconcealed -unconcealing -unconcealingly -unconcealment -unconceded -unconceited -unconceivable -unconceivableness -unconceivably -unconceived -unconceiving -unconcern -unconcerned -unconcernedly -unconcernedness -unconcerning -unconcernment -unconcertable -unconcerted -unconcertedly -unconcertedness -unconcessible -unconciliable -unconciliated -unconciliatedness -unconciliating -unconciliatory -unconcludable -unconcluded -unconcluding -unconcludingness -unconclusive -unconclusively -unconclusiveness -unconcocted -unconcordant -unconcrete -unconcreted -unconcurrent -unconcurring -uncondemnable -uncondemned -uncondensable -uncondensableness -uncondensed -uncondensing -uncondescending -uncondescension -uncondition -unconditional -unconditionality -unconditionally -unconditionalness -unconditionate -unconditionated -unconditionately -unconditioned -unconditionedly -unconditionedness -uncondoled -uncondoling -unconducing -unconducive -unconduciveness -unconducted -unconductive -unconductiveness -unconfected -unconfederated -unconferred -unconfess -unconfessed -unconfessing -unconfided -unconfidence -unconfident -unconfidential -unconfidentialness -unconfidently -unconfiding -unconfinable -unconfine -unconfined -unconfinedly -unconfinedness -unconfinement -unconfining -unconfirm -unconfirmative -unconfirmed -unconfirming -unconfiscable -unconfiscated -unconflicting -unconflictingly -unconflictingness -unconformability -unconformable -unconformableness -unconformably -unconformed -unconformedly -unconforming -unconformist -unconformity -unconfound -unconfounded -unconfoundedly -unconfrontable -unconfronted -unconfusable -unconfusably -unconfused -unconfusedly -unconfutable -unconfuted -unconfuting -uncongeal -uncongealable -uncongealed -uncongenial -uncongeniality -uncongenially -uncongested -unconglobated -unconglomerated -unconglutinated -uncongratulate -uncongratulated -uncongratulating -uncongregated -uncongregational -uncongressional -uncongruous -unconjecturable -unconjectured -unconjoined -unconjugal -unconjugated -unconjunctive -unconjured -unconnected -unconnectedly -unconnectedness -unconned -unconnived -unconniving -unconquerable -unconquerableness -unconquerably -unconquered -unconscienced -unconscient -unconscientious -unconscientiously -unconscientiousness -unconscionable -unconscionableness -unconscionably -unconscious -unconsciously -unconsciousness -unconsecrate -unconsecrated -unconsecratedly -unconsecratedness -unconsecration -unconsecutive -unconsent -unconsentaneous -unconsented -unconsenting -unconsequential -unconsequentially -unconsequentialness -unconservable -unconservative -unconserved -unconserving -unconsiderable -unconsiderate -unconsiderately -unconsiderateness -unconsidered -unconsideredly -unconsideredness -unconsidering -unconsideringly -unconsignable -unconsigned -unconsistent -unconsociable -unconsociated -unconsolable -unconsolably -unconsolatory -unconsoled -unconsolidated -unconsolidating -unconsolidation -unconsoling -unconsonancy -unconsonant -unconsonantly -unconsonous -unconspicuous -unconspicuously -unconspicuousness -unconspired -unconspiring -unconspiringly -unconspiringness -unconstancy -unconstant -unconstantly -unconstantness -unconstellated -unconstipated -unconstituted -unconstitutional -unconstitutionalism -unconstitutionality -unconstitutionally -unconstrainable -unconstrained -unconstrainedly -unconstrainedness -unconstraining -unconstraint -unconstricted -unconstruable -unconstructed -unconstructive -unconstructural -unconstrued -unconsular -unconsult -unconsultable -unconsulted -unconsulting -unconsumable -unconsumed -unconsuming -unconsummate -unconsummated -unconsumptive -uncontagious -uncontainable -uncontainableness -uncontainably -uncontained -uncontaminable -uncontaminate -uncontaminated -uncontemned -uncontemnedly -uncontemplated -uncontemporaneous -uncontemporary -uncontemptuous -uncontended -uncontending -uncontent -uncontentable -uncontented -uncontentedly -uncontentedness -uncontenting -uncontentingness -uncontentious -uncontentiously -uncontentiousness -uncontestable -uncontestableness -uncontestably -uncontested -uncontestedly -uncontestedness -uncontinence -uncontinent -uncontinental -uncontinented -uncontinently -uncontinual -uncontinued -uncontinuous -uncontorted -uncontract -uncontracted -uncontractedness -uncontractile -uncontradictable -uncontradictableness -uncontradictably -uncontradicted -uncontradictedly -uncontradictious -uncontradictory -uncontrastable -uncontrasted -uncontrasting -uncontributed -uncontributing -uncontributory -uncontrite -uncontrived -uncontriving -uncontrol -uncontrollability -uncontrollable -uncontrollableness -uncontrollably -uncontrolled -uncontrolledly -uncontrolledness -uncontrolling -uncontroversial -uncontroversially -uncontrovertable -uncontrovertableness -uncontrovertably -uncontroverted -uncontrovertedly -uncontrovertible -uncontrovertibleness -uncontrovertibly -unconvenable -unconvened -unconvenience -unconvenient -unconveniently -unconventional -unconventionalism -unconventionality -unconventionalize -unconventionally -unconventioned -unconversable -unconversableness -unconversably -unconversant -unconversational -unconversion -unconvert -unconverted -unconvertedly -unconvertedness -unconvertibility -unconvertible -unconveyable -unconveyed -unconvicted -unconvicting -unconvince -unconvinced -unconvincedly -unconvincedness -unconvincibility -unconvincible -unconvincing -unconvincingly -unconvincingness -unconvoluted -unconvoyed -unconvulsed -uncookable -uncooked -uncooled -uncoop -uncooped -uncoopered -uncooping -uncope -uncopiable -uncopied -uncopious -uncopyrighted -uncoquettish -uncoquettishly -uncord -uncorded -uncordial -uncordiality -uncordially -uncording -uncore -uncored -uncork -uncorked -uncorker -uncorking -uncorned -uncorner -uncoronated -uncoroneted -uncorporal -uncorpulent -uncorrect -uncorrectable -uncorrected -uncorrectible -uncorrectly -uncorrectness -uncorrelated -uncorrespondency -uncorrespondent -uncorresponding -uncorrigible -uncorrigibleness -uncorrigibly -uncorroborated -uncorroded -uncorrugated -uncorrupt -uncorrupted -uncorruptedly -uncorruptedness -uncorruptibility -uncorruptible -uncorruptibleness -uncorruptibly -uncorrupting -uncorruption -uncorruptive -uncorruptly -uncorruptness -uncorseted -uncosseted -uncost -uncostliness -uncostly -uncostumed -uncottoned -uncouch -uncouched -uncouching -uncounselable -uncounseled -uncounsellable -uncounselled -uncountable -uncountableness -uncountably -uncounted -uncountenanced -uncounteracted -uncounterbalanced -uncounterfeit -uncounterfeited -uncountermandable -uncountermanded -uncountervailed -uncountess -uncountrified -uncouple -uncoupled -uncoupler -uncourageous -uncoursed -uncourted -uncourteous -uncourteously -uncourteousness -uncourtierlike -uncourting -uncourtlike -uncourtliness -uncourtly -uncous -uncousinly -uncouth -uncouthie -uncouthly -uncouthness -uncouthsome -uncovenant -uncovenanted -uncover -uncoverable -uncovered -uncoveredly -uncoveted -uncoveting -uncovetingly -uncovetous -uncowed -uncowl -uncoy -uncracked -uncradled -uncraftily -uncraftiness -uncrafty -uncram -uncramp -uncramped -uncrampedness -uncranked -uncrannied -uncrated -uncravatted -uncraven -uncraving -uncravingly -uncrazed -uncream -uncreased -uncreatability -uncreatable -uncreatableness -uncreate -uncreated -uncreatedness -uncreating -uncreation -uncreative -uncreativeness -uncreaturely -uncredentialed -uncredentialled -uncredibility -uncredible -uncredibly -uncreditable -uncreditableness -uncreditably -uncredited -uncrediting -uncredulous -uncreeping -uncreosoted -uncrest -uncrested -uncrevassed -uncrib -uncried -uncrime -uncriminal -uncriminally -uncrinkle -uncrinkled -uncrinkling -uncrippled -uncrisp -uncritical -uncritically -uncriticisable -uncriticised -uncriticising -uncriticisingly -uncriticism -uncriticizable -uncriticized -uncriticizing -uncriticizingly -uncrochety -uncrook -uncrooked -uncrooking -uncropped -uncropt -uncross -uncrossable -uncrossableness -uncrossed -uncrossexaminable -uncrossexamined -uncrossly -uncrowded -uncrown -uncrowned -uncrowning -uncrucified -uncrudded -uncrude -uncruel -uncrumbled -uncrumple -uncrumpling -uncrushable -uncrushed -uncrusted -uncrying -uncrystaled -uncrystalled -uncrystalline -uncrystallizability -uncrystallizable -uncrystallized -unction -unctional -unctioneer -unctionless -unctious -unctiousness -unctorium -unctuose -unctuosity -unctuous -unctuously -unctuousness -uncubbed -uncubic -uncuckold -uncuckolded -uncudgelled -uncuffed -uncular -unculled -uncultivability -uncultivable -uncultivate -uncultivated -uncultivation -unculturable -unculture -uncultured -uncumber -uncumbered -uncumbrous -uncunning -uncunningly -uncunningness -uncupped -uncurable -uncurableness -uncurably -uncurb -uncurbable -uncurbed -uncurbedly -uncurbing -uncurd -uncurdled -uncurdling -uncured -uncurious -uncuriously -uncurl -uncurled -uncurling -uncurrent -uncurrently -uncurrentness -uncurricularized -uncurried -uncurse -uncursed -uncursing -uncurst -uncurtailed -uncurtain -uncurtained -uncus -uncushioned -uncusped -uncustomable -uncustomarily -uncustomariness -uncustomary -uncustomed -uncut -uncuth -uncuticulate -uncuttable -uncynical -uncynically -uncypress -undabbled -undaggled -undaily -undaintiness -undainty -undallying -undam -undamageable -undamaged -undamaging -undamasked -undammed -undamming -undamn -undamped -undancing -undandiacal -undandled -undangered -undangerous -undangerousness -undared -undaring -undark -undarken -undarkened -undarned -undashed -undatable -undate -undateable -undated -undatedness -undaub -undaubed -undaughter -undaughterliness -undaughterly -undauntable -undaunted -undauntedly -undauntedness -undaunting -undawned -undawning -undazed -undazing -undazzle -undazzled -undazzling -unde -undead -undeadened -undeaf -undealable -undealt -undean -undear -undebarred -undebased -undebatable -undebated -undebating -undebauched -undebilitated -undebilitating -undecagon -undecanaphthene -undecane -undecatoic -undecayable -undecayableness -undecayed -undecayedness -undecaying -undeceased -undeceitful -undeceivable -undeceivableness -undeceivably -undeceive -undeceived -undeceiver -undeceiving -undecency -undecennary -undecennial -undecent -undecently -undeception -undeceptious -undeceptitious -undeceptive -undecidable -undecide -undecided -undecidedly -undecidedness -undeciding -undecimal -undeciman -undecimole -undecipher -undecipherability -undecipherable -undecipherably -undeciphered -undecision -undecisive -undecisively -undecisiveness -undeck -undecked -undeclaimed -undeclaiming -undeclamatory -undeclarable -undeclare -undeclared -undeclinable -undeclinableness -undeclinably -undeclined -undeclining -undecocted -undecoic -undecolic -undecomposable -undecomposed -undecompounded -undecorated -undecorative -undecorous -undecorously -undecorousness -undecorticated -undecoyed -undecreased -undecreasing -undecree -undecreed -undecried -undecyl -undecylenic -undecylic -undedicate -undedicated -undeducible -undeducted -undeeded -undeemed -undeemous -undeemously -undeep -undefaceable -undefaced -undefalcated -undefamed -undefaming -undefatigable -undefaulted -undefaulting -undefeasible -undefeat -undefeatable -undefeated -undefeatedly -undefeatedness -undefecated -undefectible -undefective -undefectiveness -undefendable -undefendableness -undefendably -undefended -undefending -undefense -undefensed -undefensible -undeferential -undeferentially -undeferred -undefiant -undeficient -undefied -undefilable -undefiled -undefiledly -undefiledness -undefinable -undefinableness -undefinably -undefine -undefined -undefinedly -undefinedness -undeflected -undeflowered -undeformed -undeformedness -undefrauded -undefrayed -undeft -undegeneracy -undegenerate -undegenerated -undegenerating -undegraded -undegrading -undeification -undeified -undeify -undeistical -undejected -undelated -undelayable -undelayed -undelayedly -undelaying -undelayingly -undelectable -undelectably -undelegated -undeleted -undeliberate -undeliberated -undeliberately -undeliberateness -undeliberating -undeliberatingly -undeliberative -undeliberativeness -undelible -undelicious -undelight -undelighted -undelightful -undelightfully -undelightfulness -undelighting -undelightsome -undelimited -undelineated -undeliverable -undeliverableness -undelivered -undelivery -undeludable -undelude -undeluded -undeluding -undeluged -undelusive -undelusively -undelve -undelved -undelylene -undemagnetizable -undemanded -undemised -undemocratic -undemocratically -undemocratize -undemolishable -undemolished -undemonstrable -undemonstrably -undemonstratable -undemonstrated -undemonstrative -undemonstratively -undemonstrativeness -undemure -undemurring -unden -undeniable -undeniableness -undeniably -undenied -undeniedly -undenizened -undenominated -undenominational -undenominationalism -undenominationalist -undenominationalize -undenominationally -undenoted -undenounced -undenuded -undepartableness -undepartably -undeparted -undeparting -undependable -undependableness -undependably -undependent -undepending -undephlegmated -undepicted -undepleted -undeplored -undeported -undeposable -undeposed -undeposited -undepraved -undepravedness -undeprecated -undepreciated -undepressed -undepressible -undepressing -undeprivable -undeprived -undepurated -undeputed -under -underabyss -underaccident -underaccommodated -underact -underacted -underacting -underaction -underactor -underadjustment -underadmiral -underadventurer -underage -underagency -underagent -underagitation -underaid -underaim -underair -underalderman -underanged -underarch -underargue -underarm -underaverage -underback -underbailiff -underbake -underbalance -underballast -underbank -underbarber -underbarring -underbasal -underbeadle -underbeak -underbeam -underbear -underbearer -underbearing -underbeat -underbeaten -underbed -underbelly -underbeveling -underbid -underbidder -underbill -underbillow -underbishop -underbishopric -underbit -underbite -underbitted -underbitten -underboard -underboated -underbodice -underbody -underboil -underboom -underborn -underborne -underbottom -underbough -underbought -underbound -underbowed -underbowser -underbox -underboy -underbrace -underbraced -underbranch -underbreath -underbreathing -underbred -underbreeding -underbrew -underbridge -underbrigadier -underbright -underbrim -underbrush -underbubble -underbud -underbuild -underbuilder -underbuilding -underbuoy -underburn -underburned -underburnt -underbursar -underbury -underbush -underbutler -underbuy -undercanopy -undercanvass -undercap -undercapitaled -undercapitalization -undercapitalize -undercaptain -undercarder -undercarriage -undercarry -undercarter -undercarve -undercarved -undercase -undercasing -undercast -undercause -underceiling -undercellar -undercellarer -underchamber -underchamberlain -underchancellor -underchanter -underchap -undercharge -undercharged -underchief -underchime -underchin -underchord -underchurched -undercircle -undercitizen -underclad -underclass -underclassman -underclay -underclearer -underclerk -underclerkship -undercliff -underclift -undercloak -undercloth -underclothe -underclothed -underclothes -underclothing -underclub -underclutch -undercoachman -undercoat -undercoated -undercoater -undercoating -undercollector -undercolor -undercolored -undercoloring -undercommander -undercomment -undercompounded -underconcerned -undercondition -underconsciousness -underconstable -underconsume -underconsumption -undercook -undercool -undercooper -undercorrect -undercountenance -undercourse -undercourtier -undercover -undercovering -undercovert -undercrawl -undercreep -undercrest -undercrier -undercroft -undercrop -undercrust -undercry -undercrypt -undercup -undercurl -undercurrent -undercurve -undercut -undercutter -undercutting -underdauber -underdeacon -underdead -underdebauchee -underdeck -underdepth -underdevelop -underdevelopment -underdevil -underdialogue -underdig -underdip -underdish -underdistinction -underdistributor -underditch -underdive -underdo -underdoctor -underdoer -underdog -underdoing -underdone -underdose -underdot -underdown -underdraft -underdrag -underdrain -underdrainage -underdrainer -underdraught -underdraw -underdrawers -underdrawn -underdress -underdressed -underdrift -underdrive -underdriven -underdrudgery -underdrumming -underdry -underdunged -underearth -undereat -undereaten -underedge -undereducated -underemployment -underengraver -underenter -underer -underescheator -underestimate -underestimation -underexcited -underexercise -underexpose -underexposure -undereye -underface -underfaction -underfactor -underfaculty -underfalconer -underfall -underfarmer -underfeathering -underfeature -underfed -underfeed -underfeeder -underfeeling -underfeet -underfellow -underfiend -underfill -underfilling -underfinance -underfind -underfire -underfitting -underflame -underflannel -underfleece -underflood -underfloor -underflooring -underflow -underfold -underfolded -underfong -underfoot -underfootage -underfootman -underforebody -underform -underfortify -underframe -underframework -underframing -underfreight -underfrequency -underfringe -underfrock -underfur -underfurnish -underfurnisher -underfurrow -undergabble -undergamekeeper -undergaoler -undergarb -undergardener -undergarment -undergarnish -undergauge -undergear -undergeneral -undergentleman -undergird -undergirder -undergirding -undergirdle -undergirth -underglaze -undergloom -underglow -undergnaw -undergo -undergod -undergoer -undergoing -undergore -undergoverness -undergovernment -undergovernor -undergown -undergrad -undergrade -undergraduate -undergraduatedom -undergraduateness -undergraduateship -undergraduatish -undergraduette -undergraining -undergrass -undergreen -undergrieve -undergroan -underground -undergrounder -undergroundling -undergrove -undergrow -undergrowl -undergrown -undergrowth -undergrub -underguard -underguardian -undergunner -underhabit -underhammer -underhand -underhanded -underhandedly -underhandedness -underhang -underhanging -underhangman -underhatch -underhead -underheat -underheaven -underhelp -underhew -underhid -underhill -underhint -underhistory -underhive -underhold -underhole -underhonest -underhorse -underhorsed -underhousemaid -underhum -underhung -underided -underinstrument -underisive -underissue -underivable -underivative -underived -underivedly -underivedness -underjacket -underjailer -underjanitor -underjaw -underjawed -underjobbing -underjudge -underjungle -underkeel -underkeeper -underkind -underking -underkingdom -underlaborer -underlaid -underlain -underland -underlanguaged -underlap -underlapper -underlash -underlaundress -underlawyer -underlay -underlayer -underlaying -underleaf -underlease -underleather -underlegate -underlessee -underlet -underletter -underlevel -underlever -underlid -underlie -underlier -underlieutenant -underlife -underlift -underlight -underliking -underlimbed -underlimit -underline -underlineation -underlineman -underlinement -underlinen -underliner -underling -underlining -underlip -underlive -underload -underlock -underlodging -underloft -underlook -underlooker -underlout -underlunged -underly -underlye -underlying -undermade -undermaid -undermaker -underman -undermanager -undermanned -undermanning -undermark -undermarshal -undermarshalman -undermasted -undermaster -undermatch -undermatched -undermate -undermath -undermeal -undermeaning -undermeasure -undermediator -undermelody -undermentioned -undermiller -undermimic -underminable -undermine -underminer -undermining -underminingly -underminister -underministry -undermist -undermoated -undermoney -undermoral -undermost -undermotion -undermount -undermountain -undermusic -undermuslin -undern -undername -undernatural -underneath -underness -underniceness -undernote -undernoted -undernourish -undernourished -undernourishment -undernsong -underntide -underntime -undernurse -undernutrition -underoccupied -underofficer -underofficered -underofficial -underogating -underogatory -underopinion -underorb -underorganization -underorseman -underoverlooker -underoxidize -underpacking -underpaid -underpain -underpainting -underpan -underpants -underparticipation -underpartner -underpass -underpassion -underpay -underpayment -underpeep -underpeer -underpen -underpeopled -underpetticoat -underpetticoated -underpick -underpier -underpilaster -underpile -underpin -underpinner -underpinning -underpitch -underpitched -underplain -underplan -underplant -underplate -underplay -underplot -underplotter -underply -underpoint -underpole -underpopulate -underpopulation -underporch -underporter -underpose -underpossessor -underpot -underpower -underpraise -underprefect -underprentice -underpresence -underpresser -underpressure -underprice -underpriest -underprincipal -underprint -underprior -underprivileged -underprize -underproduce -underproduction -underproductive -underproficient -underprompt -underprompter -underproof -underprop -underproportion -underproportioned -underproposition -underpropped -underpropper -underpropping -underprospect -underpry -underpuke -underqualified -underqueen -underquote -underranger -underrate -underratement -underrating -underreach -underread -underreader -underrealize -underrealm -underream -underreamer -underreceiver -underreckon -underrecompense -underregion -underregistration -underrent -underrented -underrenting -underrepresent -underrepresentation -underrespected -underriddle -underriding -underrigged -underring -underripe -underripened -underriver -underroarer -underroast -underrobe -underrogue -underroll -underroller -underroof -underroom -underroot -underrooted -underrower -underrule -underruler -underrun -underrunning -undersacristan -undersailed -undersally -undersap -undersatisfaction -undersaturate -undersaturation -undersavior -undersaw -undersawyer -underscale -underscheme -underschool -underscoop -underscore -underscribe -underscript -underscrub -underscrupulous -undersea -underseam -underseaman -undersearch -underseas -underseated -undersecretary -undersecretaryship -undersect -undersee -underseeded -underseedman -undersell -underseller -underselling -undersense -undersequence -underservant -underserve -underservice -underset -undersetter -undersetting -undersettle -undersettler -undersettling -undersexton -undershapen -undersharp -undersheathing -undershepherd -undersheriff -undersheriffry -undersheriffship -undersheriffwick -undershield -undershine -undershining -undershire -undershirt -undershoe -undershoot -undershore -undershorten -undershot -undershrievalty -undershrieve -undershrievery -undershrub -undershrubbiness -undershrubby -undershunter -undershut -underside -undersight -undersighted -undersign -undersignalman -undersigner -undersill -undersinging -undersitter -undersize -undersized -underskin -underskirt -undersky -undersleep -undersleeve -underslip -underslope -undersluice -underslung -undersneer -undersociety -undersoil -undersole -undersomething -undersong -undersorcerer -undersort -undersoul -undersound -undersovereign -undersow -underspar -undersparred -underspecies -underspecified -underspend -undersphere -underspin -underspinner -undersplice -underspore -underspread -underspring -undersprout -underspurleather -undersquare -understaff -understage -understain -understairs -understamp -understand -understandability -understandable -understandableness -understandably -understander -understanding -understandingly -understandingness -understate -understatement -understay -understeer -understem -understep -understeward -understewardship -understimulus -understock -understocking -understood -understory -understrain -understrap -understrapper -understrapping -understratum -understream -understress -understrew -understride -understriding -understrife -understrike -understring -understroke -understrung -understudy -understuff -understuffing -undersuck -undersuggestion -undersuit -undersupply -undersupport -undersurface -underswain -underswamp -undersward -underswearer -undersweat -undersweep -underswell -undertakable -undertake -undertakement -undertaker -undertakerish -undertakerlike -undertakerly -undertakery -undertaking -undertakingly -undertalk -undertapster -undertaxed -underteacher -underteamed -underteller -undertenancy -undertenant -undertenter -undertenure -underterrestrial -undertest -underthane -underthaw -underthief -underthing -underthink -underthirst -underthought -underthroating -underthrob -underthrust -undertide -undertided -undertie -undertime -undertimed -undertint -undertitle -undertone -undertoned -undertook -undertow -undertrader -undertrained -undertread -undertreasurer -undertreat -undertribe -undertrick -undertrodden -undertruck -undertrump -undertruss -undertub -undertune -undertunic -underturf -underturn -underturnkey -undertutor -undertwig -undertype -undertyrant -underusher -undervaluation -undervalue -undervaluement -undervaluer -undervaluing -undervaluinglike -undervaluingly -undervalve -undervassal -undervaulted -undervaulting -undervegetation -underventilation -underverse -undervest -undervicar -underviewer -undervillain -undervinedresser -undervitalized -undervocabularied -undervoice -undervoltage -underwage -underwaist -underwaistcoat -underwalk -underward -underwarden -underwarmth -underwarp -underwash -underwatch -underwatcher -underwater -underwave -underway -underweapon -underwear -underweft -underweigh -underweight -underweighted -underwent -underwheel -underwhistle -underwind -underwing -underwit -underwitch -underwitted -underwood -underwooded -underwork -underworker -underworking -underworkman -underworld -underwrap -underwrite -underwriter -underwriting -underwrought -underyield -underyoke -underzeal -underzealot -undescendable -undescended -undescendible -undescribable -undescribably -undescribed -undescried -undescript -undescriptive -undescrying -undesert -undeserted -undeserting -undeserve -undeserved -undeservedly -undeservedness -undeserver -undeserving -undeservingly -undeservingness -undesign -undesignated -undesigned -undesignedly -undesignedness -undesigning -undesigningly -undesigningness -undesirability -undesirable -undesirableness -undesirably -undesire -undesired -undesiredly -undesiring -undesirous -undesirously -undesirousness -undesisting -undespaired -undespairing -undespairingly -undespatched -undespised -undespising -undespoiled -undespondent -undespondently -undesponding -undespotic -undestined -undestroyable -undestroyed -undestructible -undestructive -undetachable -undetached -undetailed -undetainable -undetained -undetectable -undetected -undetectible -undeteriorated -undeteriorating -undeterminable -undeterminate -undetermination -undetermined -undetermining -undeterred -undeterring -undetested -undetesting -undethronable -undethroned -undetracting -undetractingly -undetrimental -undevelopable -undeveloped -undeveloping -undeviated -undeviating -undeviatingly -undevil -undevious -undeviously -undevisable -undevised -undevoted -undevotion -undevotional -undevoured -undevout -undevoutly -undevoutness -undewed -undewy -undexterous -undexterously -undextrous -undextrously -undiademed -undiagnosable -undiagnosed -undialed -undialyzed -undiametric -undiamonded -undiapered -undiaphanous -undiatonic -undichotomous -undictated -undid -undidactic -undies -undieted -undifferenced -undifferent -undifferential -undifferentiated -undifficult -undiffident -undiffracted -undiffused -undiffusible -undiffusive -undig -undigenous -undigest -undigestable -undigested -undigestible -undigesting -undigestion -undigged -undight -undighted -undigitated -undignified -undignifiedly -undignifiedness -undignify -undiked -undilapidated -undilatable -undilated -undilatory -undiligent -undiligently -undilute -undiluted -undilution -undiluvial -undim -undimensioned -undimerous -undimidiate -undiminishable -undiminishableness -undiminishably -undiminished -undiminishing -undiminutive -undimmed -undimpled -Undine -undine -undined -undinted -undiocesed -undiphthongize -undiplomaed -undiplomatic -undipped -undirect -undirected -undirectional -undirectly -undirectness -undirk -undisabled -undisadvantageous -undisagreeable -undisappearing -undisappointable -undisappointed -undisappointing -undisarmed -undisastrous -undisbanded -undisbarred -undisburdened -undisbursed -undiscardable -undiscarded -undiscerned -undiscernedly -undiscernible -undiscernibleness -undiscernibly -undiscerning -undiscerningly -undischargeable -undischarged -undiscipled -undisciplinable -undiscipline -undisciplined -undisciplinedness -undisclaimed -undisclosed -undiscolored -undiscomfitable -undiscomfited -undiscomposed -undisconcerted -undisconnected -undiscontinued -undiscordant -undiscording -undiscounted -undiscourageable -undiscouraged -undiscouraging -undiscoursed -undiscoverable -undiscoverableness -undiscoverably -undiscovered -undiscreditable -undiscredited -undiscreet -undiscreetly -undiscreetness -undiscretion -undiscriminated -undiscriminating -undiscriminatingly -undiscriminatingness -undiscriminative -undiscursive -undiscussable -undiscussed -undisdained -undisdaining -undiseased -undisestablished -undisfigured -undisfranchised -undisfulfilled -undisgorged -undisgraced -undisguisable -undisguise -undisguised -undisguisedly -undisguisedness -undisgusted -undisheartened -undished -undisheveled -undishonored -undisillusioned -undisinfected -undisinheritable -undisinherited -undisintegrated -undisinterested -undisjoined -undisjointed -undisliked -undislocated -undislodgeable -undislodged -undismantled -undismay -undismayable -undismayed -undismayedly -undismembered -undismissed -undismounted -undisobedient -undisobeyed -undisobliging -undisordered -undisorderly -undisorganized -undisowned -undisowning -undisparaged -undisparity -undispassionate -undispatchable -undispatched -undispatching -undispellable -undispelled -undispensable -undispensed -undispensing -undispersed -undispersing -undisplaced -undisplanted -undisplay -undisplayable -undisplayed -undisplaying -undispleased -undispose -undisposed -undisposedness -undisprivacied -undisprovable -undisproved -undisproving -undisputable -undisputableness -undisputably -undisputatious -undisputatiously -undisputed -undisputedly -undisputedness -undisputing -undisqualifiable -undisqualified -undisquieted -undisreputable -undisrobed -undisrupted -undissected -undissembled -undissembledness -undissembling -undissemblingly -undisseminated -undissenting -undissevered -undissimulated -undissipated -undissociated -undissoluble -undissolute -undissolvable -undissolved -undissolving -undissonant -undissuadable -undissuadably -undissuade -undistanced -undistant -undistantly -undistasted -undistasteful -undistempered -undistend -undistended -undistilled -undistinct -undistinctive -undistinctly -undistinctness -undistinguish -undistinguishable -undistinguishableness -undistinguishably -undistinguished -undistinguishing -undistinguishingly -undistorted -undistorting -undistracted -undistractedly -undistractedness -undistracting -undistractingly -undistrained -undistraught -undistress -undistressed -undistributed -undistrusted -undistrustful -undisturbable -undisturbance -undisturbed -undisturbedly -undisturbedness -undisturbing -undisturbingly -unditched -undithyrambic -undittoed -undiuretic -undiurnal -undivable -undivergent -undiverging -undiverse -undiversified -undiverted -undivertible -undivertibly -undiverting -undivested -undivestedly -undividable -undividableness -undividably -undivided -undividedly -undividedness -undividing -undivinable -undivined -undivinelike -undivinely -undivining -undivisible -undivisive -undivorceable -undivorced -undivorcedness -undivorcing -undivulged -undivulging -undizened -undizzied -undo -undoable -undock -undocked -undoctor -undoctored -undoctrinal -undoctrined -undocumentary -undocumented -undocumentedness -undodged -undoer -undoffed -undog -undogmatic -undogmatical -undoing -undoingness -undolled -undolorous -undomed -undomestic -undomesticate -undomesticated -undomestication -undomicilable -undomiciled -undominated -undomineering -undominical -undominoed -undon -undonated -undonating -undone -undoneness -undonkey -undonnish -undoomed -undoped -undormant -undose -undosed -undoting -undotted -undouble -undoubled -undoubtable -undoubtableness -undoubtably -undoubted -undoubtedly -undoubtedness -undoubtful -undoubtfully -undoubtfulness -undoubting -undoubtingly -undoubtingness -undouched -undoughty -undovelike -undoweled -undowered -undowned -undowny -undrab -undraftable -undrafted -undrag -undragoned -undragooned -undrainable -undrained -undramatic -undramatical -undramatically -undramatizable -undramatized -undrape -undraped -undraperied -undraw -undrawable -undrawn -undreaded -undreadful -undreadfully -undreading -undreamed -undreaming -undreamlike -undreamt -undreamy -undredged -undreggy -undrenched -undress -undressed -undried -undrillable -undrilled -undrinkable -undrinkableness -undrinkably -undrinking -undripping -undrivable -undrivableness -undriven -undronelike -undrooping -undropped -undropsical -undrossy -undrowned -undrubbed -undrugged -undrunk -undrunken -undry -undryable -undrying -undualize -undub -undubbed -undubitable -undubitably -unducal -unduchess -undue -unduelling -undueness -undug -unduke -undulant -undular -undularly -undulatance -undulate -undulated -undulately -undulating -undulatingly -undulation -undulationist -undulative -undulatory -undull -undulled -undullness -unduloid -undulose -undulous -unduly -undumped -unduncelike -undunged -undupable -unduped -unduplicability -unduplicable -unduplicity -undurable -undurableness -undurably -undust -undusted -unduteous -undutiable -undutiful -undutifully -undutifulness -unduty -undwarfed -undwelt -undwindling -undy -undye -undyeable -undyed -undying -undyingly -undyingness -uneager -uneagerly -uneagerness -uneagled -unearly -unearned -unearnest -unearth -unearthed -unearthliness -unearthly -unease -uneaseful -uneasefulness -uneasily -uneasiness -uneastern -uneasy -uneatable -uneatableness -uneaten -uneath -uneating -unebbed -unebbing -unebriate -uneccentric -unecclesiastical -unechoed -unechoing -uneclectic -uneclipsed -uneconomic -uneconomical -uneconomically -uneconomicalness -uneconomizing -unecstatic -unedge -unedged -unedible -unedibleness -unedibly -unedified -unedifying -uneditable -unedited -uneducable -uneducableness -uneducably -uneducate -uneducated -uneducatedly -uneducatedness -uneducative -uneduced -uneffaceable -uneffaceably -uneffaced -uneffected -uneffectible -uneffective -uneffectless -uneffectual -uneffectually -uneffectualness -uneffectuated -uneffeminate -uneffeminated -uneffervescent -uneffete -unefficacious -unefficient -uneffigiated -uneffused -uneffusing -uneffusive -unegoist -unegoistical -unegoistically -unegregious -unejaculated -unejected -unelaborate -unelaborated -unelaborately -unelaborateness -unelapsed -unelastic -unelasticity -unelated -unelating -unelbowed -unelderly -unelect -unelectable -unelected -unelective -unelectric -unelectrical -unelectrified -unelectrify -unelectrifying -unelectrized -unelectronic -uneleemosynary -unelegant -unelegantly -unelegantness -unelemental -unelementary -unelevated -unelicited -unelided -unelidible -uneligibility -uneligible -uneligibly -uneliminated -unelongated -uneloped -uneloping -uneloquent -uneloquently -unelucidated -unelucidating -uneluded -unelusive -unemaciated -unemancipable -unemancipated -unemasculated -unembalmed -unembanked -unembarrassed -unembarrassedly -unembarrassedness -unembarrassing -unembarrassment -unembased -unembattled -unembayed -unembellished -unembezzled -unembittered -unemblazoned -unembodied -unembodiment -unembossed -unembowelled -unembowered -unembraceable -unembraced -unembroidered -unembroiled -unembryonic -unemendable -unemended -unemerged -unemerging -unemigrating -uneminent -uneminently -unemitted -unemolumentary -unemolumented -unemotional -unemotionalism -unemotionally -unemotionalness -unemotioned -unempaneled -unemphatic -unemphatical -unemphatically -unempirical -unempirically -unemploy -unemployability -unemployable -unemployableness -unemployably -unemployed -unemployment -unempoisoned -unempowered -unempt -unemptiable -unemptied -unempty -unemulative -unemulous -unemulsified -unenabled -unenacted -unenameled -unenamored -unencamped -unenchafed -unenchant -unenchanted -unencircled -unenclosed -unencompassed -unencored -unencounterable -unencountered -unencouraged -unencouraging -unencroached -unencroaching -unencumber -unencumbered -unencumberedly -unencumberedness -unencumbering -unencysted -unendable -unendamaged -unendangered -unendeared -unendeavored -unended -unending -unendingly -unendingness -unendorsable -unendorsed -unendowed -unendowing -unendued -unendurability -unendurable -unendurably -unendured -unenduring -unenduringly -unenergetic -unenergized -unenervated -unenfeebled -unenfiladed -unenforceable -unenforced -unenforcedly -unenforcedness -unenforcibility -unenfranchised -unengaged -unengaging -unengendered -unengineered -unenglish -unengraved -unengraven -unengrossed -unenhanced -unenjoined -unenjoyable -unenjoyed -unenjoying -unenjoyingly -unenkindled -unenlarged -unenlightened -unenlightening -unenlisted -unenlivened -unenlivening -unennobled -unennobling -unenounced -unenquired -unenquiring -unenraged -unenraptured -unenrichable -unenrichableness -unenriched -unenriching -unenrobed -unenrolled -unenshrined -unenslave -unenslaved -unensnared -unensouled -unensured -unentailed -unentangle -unentangleable -unentangled -unentanglement -unentangler -unenterable -unentered -unentering -unenterprise -unenterprised -unenterprising -unenterprisingly -unenterprisingness -unentertainable -unentertained -unentertaining -unentertainingly -unentertainingness -unenthralled -unenthralling -unenthroned -unenthusiasm -unenthusiastic -unenthusiastically -unenticed -unenticing -unentire -unentitled -unentombed -unentomological -unentrance -unentranced -unentrapped -unentreated -unentreating -unentrenched -unentwined -unenumerable -unenumerated -unenveloped -unenvenomed -unenviable -unenviably -unenvied -unenviedly -unenvious -unenviously -unenvironed -unenvying -unenwoven -unepauleted -unephemeral -unepic -unepicurean -unepigrammatic -unepilogued -unepiscopal -unepiscopally -unepistolary -unepitaphed -unepithelial -unepitomized -unequable -unequableness -unequably -unequal -unequalable -unequaled -unequality -unequalize -unequalized -unequally -unequalness -unequated -unequatorial -unequestrian -unequiangular -unequiaxed -unequilateral -unequilibrated -unequine -unequipped -unequitable -unequitableness -unequitably -unequivalent -unequivalve -unequivalved -unequivocal -unequivocally -unequivocalness -uneradicable -uneradicated -unerasable -unerased -unerasing -unerect -unerected -unermined -uneroded -unerrable -unerrableness -unerrably -unerrancy -unerrant -unerratic -unerring -unerringly -unerringness -unerroneous -unerroneously -unerudite -unerupted -uneruptive -unescaladed -unescalloped -unescapable -unescapableness -unescapably -unescaped -unescheated -uneschewable -uneschewably -uneschewed -Unesco -unescorted -unescutcheoned -unesoteric -unespied -unespousable -unespoused -unessayed -unessence -unessential -unessentially -unessentialness -unestablish -unestablishable -unestablished -unestablishment -unesteemed -unestimable -unestimableness -unestimably -unestimated -unestopped -unestranged -unetched -uneternal -uneternized -unethereal -unethic -unethical -unethically -unethicalness -unethnological -unethylated -unetymological -unetymologizable -uneucharistical -uneugenic -uneulogized -uneuphemistical -uneuphonic -uneuphonious -uneuphoniously -uneuphoniousness -unevacuated -unevadable -unevaded -unevaluated -unevanescent -unevangelic -unevangelical -unevangelized -unevaporate -unevaporated -unevasive -uneven -unevenly -unevenness -uneventful -uneventfully -uneventfulness -uneverted -unevicted -unevidenced -unevident -unevidential -unevil -unevinced -unevirated -uneviscerated -unevitable -unevitably -unevokable -unevoked -unevolutionary -unevolved -unexacerbated -unexact -unexacted -unexactedly -unexacting -unexactingly -unexactly -unexactness -unexaggerable -unexaggerated -unexaggerating -unexalted -unexaminable -unexamined -unexamining -unexampled -unexampledness -unexasperated -unexasperating -unexcavated -unexceedable -unexceeded -unexcelled -unexcellent -unexcelling -unexceptable -unexcepted -unexcepting -unexceptionability -unexceptionable -unexceptionableness -unexceptionably -unexceptional -unexceptionally -unexceptionalness -unexceptive -unexcerpted -unexcessive -unexchangeable -unexchangeableness -unexchanged -unexcised -unexcitability -unexcitable -unexcited -unexciting -unexclaiming -unexcludable -unexcluded -unexcluding -unexclusive -unexclusively -unexclusiveness -unexcogitable -unexcogitated -unexcommunicated -unexcoriated -unexcorticated -unexcrescent -unexcreted -unexcruciating -unexculpable -unexculpably -unexculpated -unexcursive -unexcusable -unexcusableness -unexcusably -unexcused -unexcusedly -unexcusedness -unexcusing -unexecrated -unexecutable -unexecuted -unexecuting -unexecutorial -unexemplary -unexemplifiable -unexemplified -unexempt -unexempted -unexemptible -unexempting -unexercisable -unexercise -unexercised -unexerted -unexhalable -unexhaled -unexhausted -unexhaustedly -unexhaustedness -unexhaustible -unexhaustibleness -unexhaustibly -unexhaustion -unexhaustive -unexhaustiveness -unexhibitable -unexhibitableness -unexhibited -unexhilarated -unexhilarating -unexhorted -unexhumed -unexigent -unexilable -unexiled -unexistence -unexistent -unexisting -unexonerable -unexonerated -unexorable -unexorableness -unexorbitant -unexorcisable -unexorcisably -unexorcised -unexotic -unexpandable -unexpanded -unexpanding -unexpansive -unexpectable -unexpectant -unexpected -unexpectedly -unexpectedness -unexpecting -unexpectingly -unexpectorated -unexpedient -unexpeditated -unexpedited -unexpeditious -unexpelled -unexpendable -unexpended -unexpensive -unexpensively -unexpensiveness -unexperience -unexperienced -unexperiencedness -unexperient -unexperiential -unexperimental -unexperimented -unexpert -unexpertly -unexpertness -unexpiable -unexpiated -unexpired -unexpiring -unexplainable -unexplainableness -unexplainably -unexplained -unexplainedly -unexplainedness -unexplaining -unexplanatory -unexplicable -unexplicableness -unexplicably -unexplicated -unexplicit -unexplicitly -unexplicitness -unexploded -unexploitation -unexploited -unexplorable -unexplorative -unexplored -unexplosive -unexportable -unexported -unexporting -unexposable -unexposed -unexpostulating -unexpoundable -unexpounded -unexpress -unexpressable -unexpressableness -unexpressably -unexpressed -unexpressedly -unexpressible -unexpressibleness -unexpressibly -unexpressive -unexpressively -unexpressiveness -unexpressly -unexpropriable -unexpropriated -unexpugnable -unexpunged -unexpurgated -unexpurgatedly -unexpurgatedness -unextended -unextendedly -unextendedness -unextendible -unextensible -unextenuable -unextenuated -unextenuating -unexterminable -unexterminated -unexternal -unexternality -unexterritoriality -unextinct -unextinctness -unextinguishable -unextinguishableness -unextinguishably -unextinguished -unextirpated -unextolled -unextortable -unextorted -unextractable -unextracted -unextradited -unextraneous -unextraordinary -unextravagance -unextravagant -unextravagating -unextravasated -unextreme -unextricable -unextricated -unextrinsic -unextruded -unexuberant -unexuded -unexultant -uneye -uneyeable -uneyed -unfabled -unfabling -unfabricated -unfabulous -unfacaded -unface -unfaceable -unfaced -unfaceted -unfacetious -unfacile -unfacilitated -unfact -unfactional -unfactious -unfactitious -unfactorable -unfactored -unfactual -unfadable -unfaded -unfading -unfadingly -unfadingness -unfagged -unfagoted -unfailable -unfailableness -unfailably -unfailed -unfailing -unfailingly -unfailingness -unfain -unfaint -unfainting -unfaintly -unfair -unfairly -unfairminded -unfairness -unfairylike -unfaith -unfaithful -unfaithfully -unfaithfulness -unfaked -unfallacious -unfallaciously -unfallen -unfallenness -unfallible -unfallibleness -unfallibly -unfalling -unfallowed -unfalse -unfalsifiable -unfalsified -unfalsifiedness -unfalsity -unfaltering -unfalteringly -unfamed -unfamiliar -unfamiliarity -unfamiliarized -unfamiliarly -unfanatical -unfanciable -unfancied -unfanciful -unfancy -unfanged -unfanned -unfantastic -unfantastical -unfantastically -unfar -unfarced -unfarcical -unfarewelled -unfarmed -unfarming -unfarrowed -unfarsighted -unfasciated -unfascinate -unfascinated -unfascinating -unfashion -unfashionable -unfashionableness -unfashionably -unfashioned -unfast -unfasten -unfastenable -unfastened -unfastener -unfastidious -unfastidiously -unfastidiousness -unfasting -unfather -unfathered -unfatherlike -unfatherliness -unfatherly -unfathomability -unfathomable -unfathomableness -unfathomably -unfathomed -unfatigue -unfatigueable -unfatigued -unfatiguing -unfattable -unfatted -unfatten -unfauceted -unfaultfinding -unfaulty -unfavorable -unfavorableness -unfavorably -unfavored -unfavoring -unfavorite -unfawning -unfealty -unfeared -unfearful -unfearfully -unfearing -unfearingly -unfeary -unfeasable -unfeasableness -unfeasably -unfeasibility -unfeasible -unfeasibleness -unfeasibly -unfeasted -unfeather -unfeathered -unfeatured -unfecund -unfecundated -unfed -unfederal -unfederated -unfeeble -unfeed -unfeedable -unfeeding -unfeeing -unfeelable -unfeeling -unfeelingly -unfeelingness -unfeignable -unfeignableness -unfeignably -unfeigned -unfeignedly -unfeignedness -unfeigning -unfeigningly -unfeigningness -unfele -unfelicitated -unfelicitating -unfelicitous -unfelicitously -unfelicitousness -unfeline -unfellable -unfelled -unfellied -unfellow -unfellowed -unfellowlike -unfellowly -unfellowshiped -unfelon -unfelonious -unfeloniously -unfelony -unfelt -unfelted -unfemale -unfeminine -unfemininely -unfeminineness -unfemininity -unfeminist -unfeminize -unfence -unfenced -unfendered -unfenestrated -unfeoffed -unfermentable -unfermentableness -unfermentably -unfermented -unfermenting -unfernlike -unferocious -unferreted -unferried -unfertile -unfertileness -unfertility -unfertilizable -unfertilized -unfervent -unfervid -unfester -unfestered -unfestival -unfestive -unfestively -unfestooned -unfetchable -unfetched -unfeted -unfetter -unfettered -unfettled -unfeudal -unfeudalize -unfeudalized -unfeued -unfevered -unfeverish -unfew -unfibbed -unfibbing -unfiber -unfibered -unfibrous -unfickle -unfictitious -unfidelity -unfidgeting -unfielded -unfiend -unfiendlike -unfierce -unfiery -unfight -unfightable -unfighting -unfigurable -unfigurative -unfigured -unfilamentous -unfilched -unfile -unfiled -unfilial -unfilially -unfilialness -unfill -unfillable -unfilled -unfilleted -unfilling -unfilm -unfilmed -unfiltered -unfiltrated -unfinable -unfinancial -unfine -unfined -unfinessed -unfingered -unfinical -unfinish -unfinishable -unfinished -unfinishedly -unfinishedness -unfinite -unfired -unfireproof -unfiring -unfirm -unfirmamented -unfirmly -unfirmness -unfiscal -unfishable -unfished -unfishing -unfishlike -unfissile -unfistulous -unfit -unfitly -unfitness -unfittable -unfitted -unfittedness -unfitten -unfitting -unfittingly -unfittingness -unfitty -unfix -unfixable -unfixated -unfixed -unfixedness -unfixing -unfixity -unflag -unflagged -unflagging -unflaggingly -unflaggingness -unflagitious -unflagrant -unflaky -unflamboyant -unflaming -unflanged -unflank -unflanked -unflapping -unflashing -unflat -unflated -unflattened -unflatterable -unflattered -unflattering -unflatteringly -unflaunted -unflavored -unflawed -unflayed -unflead -unflecked -unfledge -unfledged -unfledgedness -unfleece -unfleeced -unfleeing -unfleeting -unflesh -unfleshed -unfleshliness -unfleshly -unfleshy -unfletched -unflexed -unflexible -unflexibleness -unflexibly -unflickering -unflickeringly -unflighty -unflinching -unflinchingly -unflinchingness -unflintify -unflippant -unflirtatious -unflitched -unfloatable -unfloating -unflock -unfloggable -unflogged -unflooded -unfloor -unfloored -unflorid -unflossy -unflounced -unfloured -unflourished -unflourishing -unflouted -unflower -unflowered -unflowing -unflown -unfluctuating -unfluent -unfluid -unfluked -unflunked -unfluorescent -unflurried -unflush -unflushed -unflustered -unfluted -unflutterable -unfluttered -unfluttering -unfluvial -unfluxile -unflying -unfoaled -unfoaming -unfocused -unfoggy -unfoilable -unfoiled -unfoisted -unfold -unfoldable -unfolded -unfolder -unfolding -unfoldment -unfoldure -unfoliaged -unfoliated -unfollowable -unfollowed -unfollowing -unfomented -unfond -unfondled -unfondness -unfoodful -unfool -unfoolable -unfooled -unfooling -unfoolish -unfooted -unfootsore -unfoppish -unforaged -unforbade -unforbearance -unforbearing -unforbid -unforbidden -unforbiddenly -unforbiddenness -unforbidding -unforceable -unforced -unforcedly -unforcedness -unforceful -unforcible -unforcibleness -unforcibly -unfordable -unfordableness -unforded -unforeboded -unforeboding -unforecasted -unforegone -unforeign -unforeknowable -unforeknown -unforensic -unforeordained -unforesee -unforeseeable -unforeseeableness -unforeseeably -unforeseeing -unforeseeingly -unforeseen -unforeseenly -unforeseenness -unforeshortened -unforest -unforestallable -unforestalled -unforested -unforetellable -unforethought -unforethoughtful -unforetold -unforewarned -unforewarnedness -unforfeit -unforfeitable -unforfeited -unforgeability -unforgeable -unforged -unforget -unforgetful -unforgettable -unforgettableness -unforgettably -unforgetting -unforgettingly -unforgivable -unforgivableness -unforgivably -unforgiven -unforgiveness -unforgiver -unforgiving -unforgivingly -unforgivingness -unforgone -unforgot -unforgotten -unfork -unforked -unforkedness -unforlorn -unform -unformal -unformality -unformalized -unformally -unformalness -unformative -unformed -unformidable -unformulable -unformularizable -unformularize -unformulated -unformulistic -unforsaken -unforsaking -unforsook -unforsworn -unforthright -unfortifiable -unfortified -unfortify -unfortuitous -unfortunate -unfortunately -unfortunateness -unfortune -unforward -unforwarded -unfossiliferous -unfossilized -unfostered -unfought -unfoughten -unfoul -unfoulable -unfouled -unfound -unfounded -unfoundedly -unfoundedness -unfoundered -unfountained -unfowllike -unfoxy -unfractured -unfragrance -unfragrant -unfragrantly -unfrail -unframable -unframableness -unframably -unframe -unframed -unfranchised -unfrank -unfrankable -unfranked -unfrankly -unfrankness -unfraternal -unfraternizing -unfraudulent -unfraught -unfrayed -unfreckled -unfree -unfreed -unfreedom -unfreehold -unfreely -unfreeman -unfreeness -unfreezable -unfreeze -unfreezing -unfreighted -unfrenchified -unfrenzied -unfrequency -unfrequent -unfrequented -unfrequentedness -unfrequently -unfrequentness -unfret -unfretful -unfretting -unfriable -unfriarlike -unfricative -unfrictioned -unfried -unfriend -unfriended -unfriendedness -unfriending -unfriendlike -unfriendlily -unfriendliness -unfriendly -unfriendship -unfrighted -unfrightenable -unfrightened -unfrightenedness -unfrightful -unfrigid -unfrill -unfrilled -unfringe -unfringed -unfrisky -unfrivolous -unfrizz -unfrizzled -unfrizzy -unfrock -unfrocked -unfroglike -unfrolicsome -unfronted -unfrost -unfrosted -unfrosty -unfrounced -unfroward -unfrowardly -unfrowning -unfroze -unfrozen -unfructed -unfructified -unfructify -unfructuous -unfructuously -unfrugal -unfrugally -unfrugalness -unfruitful -unfruitfully -unfruitfulness -unfruity -unfrustrable -unfrustrably -unfrustratable -unfrustrated -unfrutuosity -unfuddled -unfueled -unfulfill -unfulfillable -unfulfilled -unfulfilling -unfulfillment -unfull -unfulled -unfully -unfulminated -unfulsome -unfumbled -unfumbling -unfumed -unfumigated -unfunctional -unfundamental -unfunded -unfunnily -unfunniness -unfunny -unfur -unfurbelowed -unfurbished -unfurcate -unfurious -unfurl -unfurlable -unfurnish -unfurnished -unfurnishedness -unfurnitured -unfurred -unfurrow -unfurrowable -unfurrowed -unfurthersome -unfused -unfusible -unfusibleness -unfusibly -unfussed -unfussing -unfussy -unfutile -unfuturistic -ungabled -ungag -ungaged -ungagged -ungain -ungainable -ungained -ungainful -ungainfully -ungainfulness -ungaining -ungainlike -ungainliness -ungainly -ungainness -ungainsaid -ungainsayable -ungainsayably -ungainsaying -ungainsome -ungainsomely -ungaite -ungallant -ungallantly -ungallantness -ungalling -ungalvanized -ungamboling -ungamelike -unganged -ungangrened -ungarbed -ungarbled -ungardened -ungargled -ungarland -ungarlanded -ungarment -ungarmented -ungarnered -ungarnish -ungarnished -ungaro -ungarrisoned -ungarter -ungartered -ungashed -ungassed -ungastric -ungathered -ungaudy -ungauged -ungauntlet -ungauntleted -ungazetted -ungazing -ungear -ungeared -ungelatinizable -ungelatinized -ungelded -ungelt -ungeminated -ungenerable -ungeneral -ungeneraled -ungeneralized -ungenerate -ungenerated -ungenerative -ungeneric -ungenerical -ungenerosity -ungenerous -ungenerously -ungenerousness -ungenial -ungeniality -ungenially -ungenialness -ungenitured -ungenius -ungenteel -ungenteelly -ungenteelness -ungentile -ungentility -ungentilize -ungentle -ungentled -ungentleman -ungentlemanize -ungentlemanlike -ungentlemanlikeness -ungentlemanliness -ungentlemanly -ungentleness -ungentlewomanlike -ungently -ungenuine -ungenuinely -ungenuineness -ungeodetical -ungeographic -ungeographical -ungeographically -ungeological -ungeometric -ungeometrical -ungeometrically -ungeometricalness -ungerminated -ungerminating -ungermlike -ungerontic -ungesting -ungesturing -unget -ungettable -unghostlike -unghostly -ungiant -ungibbet -ungiddy -ungifted -ungiftedness -ungild -ungilded -ungill -ungilt -ungingled -unginned -ungird -ungirded -ungirdle -ungirdled -ungirlish -ungirt -ungirth -ungirthed -ungive -ungiveable -ungiven -ungiving -ungka -unglaciated -unglad -ungladden -ungladdened -ungladly -ungladness -ungladsome -unglamorous -unglandular -unglassed -unglaze -unglazed -ungleaned -unglee -ungleeful -unglimpsed -unglistening -unglittering -ungloating -unglobe -unglobular -ungloom -ungloomed -ungloomy -unglorified -unglorify -unglorifying -unglorious -ungloriously -ungloriousness -unglory -unglosed -ungloss -unglossaried -unglossed -unglossily -unglossiness -unglossy -unglove -ungloved -unglowing -unglozed -unglue -unglued -unglutinate -unglutted -ungluttonous -ungnarred -ungnaw -ungnawn -ungnostic -ungoaded -ungoatlike -ungod -ungoddess -ungodlike -ungodlily -ungodliness -ungodly -ungodmothered -ungold -ungolden -ungone -ungood -ungoodliness -ungoodly -ungored -ungorge -ungorged -ungorgeous -ungospel -ungospelized -ungospelled -ungospellike -ungossiping -ungot -ungothic -ungotten -ungouged -ungouty -ungovernable -ungovernableness -ungovernably -ungoverned -ungovernedness -ungoverning -ungown -ungowned -ungrace -ungraced -ungraceful -ungracefully -ungracefulness -ungracious -ungraciously -ungraciousness -ungradated -ungraded -ungradual -ungradually -ungraduated -ungraduating -ungraft -ungrafted -ungrain -ungrainable -ungrained -ungrammar -ungrammared -ungrammatic -ungrammatical -ungrammatically -ungrammaticalness -ungrammaticism -ungrand -ungrantable -ungranted -ungranulated -ungraphic -ungraphitized -ungrapple -ungrappled -ungrappler -ungrasp -ungraspable -ungrasped -ungrasping -ungrassed -ungrassy -ungrated -ungrateful -ungratefully -ungratefulness -ungratifiable -ungratified -ungratifying -ungrating -ungrave -ungraved -ungraveled -ungravelly -ungravely -ungraven -ungrayed -ungrazed -ungreased -ungreat -ungreatly -ungreatness -ungreeable -ungreedy -ungreen -ungreenable -ungreened -ungreeted -ungregarious -ungrieve -ungrieved -ungrieving -ungrilled -ungrimed -ungrindable -ungrip -ungripe -ungrizzled -ungroaning -ungroined -ungroomed -ungrooved -ungropeable -ungross -ungrotesque -unground -ungroundable -ungroundably -ungrounded -ungroundedly -ungroundedness -ungroupable -ungrouped -ungrow -ungrowing -ungrown -ungrubbed -ungrudged -ungrudging -ungrudgingly -ungrudgingness -ungruesome -ungruff -ungrumbling -ungual -unguaranteed -unguard -unguardable -unguarded -unguardedly -unguardedness -ungueal -unguent -unguentaria -unguentarium -unguentary -unguentiferous -unguentous -unguentum -unguerdoned -ungues -unguessable -unguessableness -unguessed -unguical -unguicorn -unguicular -Unguiculata -unguiculate -unguiculated -unguidable -unguidableness -unguidably -unguided -unguidedly -unguiferous -unguiform -unguiled -unguileful -unguilefully -unguilefulness -unguillotined -unguiltily -unguiltiness -unguilty -unguinal -unguinous -unguirostral -unguis -ungula -ungulae -ungular -Ungulata -ungulate -ungulated -unguled -unguligrade -ungull -ungulous -ungulp -ungum -ungummed -ungushing -ungutted -unguttural -unguyed -unguzzled -ungymnastic -ungypsylike -ungyve -ungyved -unhabit -unhabitable -unhabitableness -unhabited -unhabitual -unhabitually -unhabituate -unhabituated -unhacked -unhackled -unhackneyed -unhackneyedness -unhad -unhaft -unhafted -unhaggled -unhaggling -unhailable -unhailed -unhair -unhaired -unhairer -unhairily -unhairiness -unhairing -unhairy -unhallooed -unhallow -unhallowed -unhallowedness -unhaloed -unhalsed -unhalted -unhalter -unhaltered -unhalting -unhalved -unhammered -unhamper -unhampered -unhand -unhandcuff -unhandcuffed -unhandicapped -unhandily -unhandiness -unhandled -unhandseled -unhandsome -unhandsomely -unhandsomeness -unhandy -unhang -unhanged -unhap -unhappen -unhappily -unhappiness -unhappy -unharangued -unharassed -unharbor -unharbored -unhard -unharden -unhardenable -unhardened -unhardihood -unhardily -unhardiness -unhardness -unhardy -unharked -unharmable -unharmed -unharmful -unharmfully -unharming -unharmonic -unharmonical -unharmonious -unharmoniously -unharmoniousness -unharmonize -unharmonized -unharmony -unharness -unharnessed -unharped -unharried -unharrowed -unharsh -unharvested -unhashed -unhasp -unhasped -unhaste -unhasted -unhastened -unhastily -unhastiness -unhasting -unhasty -unhat -unhatchability -unhatchable -unhatched -unhatcheled -unhate -unhated -unhateful -unhating -unhatingly -unhatted -unhauled -unhaunt -unhaunted -unhave -unhawked -unhayed -unhazarded -unhazarding -unhazardous -unhazardousness -unhazed -unhead -unheaded -unheader -unheady -unheal -unhealable -unhealableness -unhealably -unhealed -unhealing -unhealth -unhealthful -unhealthfully -unhealthfulness -unhealthily -unhealthiness -unhealthsome -unhealthsomeness -unhealthy -unheaped -unhearable -unheard -unhearing -unhearsed -unheart -unhearten -unheartsome -unhearty -unheatable -unheated -unheathen -unheaved -unheaven -unheavenly -unheavily -unheaviness -unheavy -unhectored -unhedge -unhedged -unheed -unheeded -unheededly -unheedful -unheedfully -unheedfulness -unheeding -unheedingly -unheedy -unheeled -unheelpieced -unhefted -unheightened -unheired -unheld -unhele -unheler -unhelm -unhelmed -unhelmet -unhelmeted -unhelpable -unhelpableness -unhelped -unhelpful -unhelpfully -unhelpfulness -unhelping -unhelved -unhemmed -unheppen -unheralded -unheraldic -unherd -unherded -unhereditary -unheretical -unheritable -unhermetic -unhero -unheroic -unheroical -unheroically -unheroism -unheroize -unherolike -unhesitant -unhesitating -unhesitatingly -unhesitatingness -unheuristic -unhewable -unhewed -unhewn -unhex -unhid -unhidable -unhidableness -unhidably -unhidated -unhidden -unhide -unhidebound -unhideous -unhieratic -unhigh -unhilarious -unhinderable -unhinderably -unhindered -unhindering -unhinge -unhingement -unhinted -unhipped -unhired -unhissed -unhistoric -unhistorical -unhistorically -unhistory -unhistrionic -unhit -unhitch -unhitched -unhittable -unhive -unhoard -unhoarded -unhoarding -unhoary -unhoaxed -unhobble -unhocked -unhoed -unhogged -unhoist -unhoisted -unhold -unholiday -unholily -unholiness -unhollow -unhollowed -unholy -unhome -unhomelike -unhomelikeness -unhomeliness -unhomely -unhomish -unhomogeneity -unhomogeneous -unhomogeneously -unhomologous -unhoned -unhonest -unhonestly -unhoneyed -unhonied -unhonorable -unhonorably -unhonored -unhonoured -unhood -unhooded -unhoodwink -unhoodwinked -unhoofed -unhook -unhooked -unhoop -unhooped -unhooper -unhooted -unhoped -unhopedly -unhopedness -unhopeful -unhopefully -unhopefulness -unhoping -unhopingly -unhopped -unhoppled -unhorizoned -unhorizontal -unhorned -unhorny -unhoroscopic -unhorse -unhose -unhosed -unhospitable -unhospitableness -unhospitably -unhostile -unhostilely -unhostileness -unhostility -unhot -unhoundlike -unhouse -unhoused -unhouseled -unhouselike -unhousewifely -unhuddle -unhugged -unhull -unhulled -unhuman -unhumanize -unhumanized -unhumanly -unhumanness -unhumble -unhumbled -unhumbledness -unhumbleness -unhumbly -unhumbugged -unhumid -unhumiliated -unhumored -unhumorous -unhumorously -unhumorousness -unhumoured -unhung -unhuntable -unhunted -unhurdled -unhurled -unhurried -unhurriedly -unhurriedness -unhurrying -unhurryingly -unhurt -unhurted -unhurtful -unhurtfully -unhurtfulness -unhurting -unhusbanded -unhusbandly -unhushable -unhushed -unhushing -unhusk -unhusked -unhustled -unhustling -unhutched -unhuzzaed -unhydraulic -unhydrolyzed -unhygienic -unhygienically -unhygrometric -unhymeneal -unhymned -unhyphenated -unhyphened -unhypnotic -unhypnotizable -unhypnotize -unhypocritical -unhypocritically -unhypothecated -unhypothetical -unhysterical -uniambic -uniambically -uniangulate -uniarticular -uniarticulate -Uniat -uniat -Uniate -uniate -uniauriculate -uniauriculated -uniaxal -uniaxally -uniaxial -uniaxially -unibasal -unibivalent -unible -unibracteate -unibracteolate -unibranchiate -unicalcarate -unicameral -unicameralism -unicameralist -unicamerate -unicapsular -unicarinate -unicarinated -unice -uniced -unicell -unicellate -unicelled -unicellular -unicellularity -unicentral -unichord -uniciliate -unicism -unicist -unicity -uniclinal -unicolor -unicolorate -unicolored -unicolorous -uniconstant -unicorn -unicorneal -unicornic -unicornlike -unicornous -unicornuted -unicostate -unicotyledonous -unicum -unicursal -unicursality -unicursally -unicuspid -unicuspidate -unicycle -unicyclist -unidactyl -unidactyle -unidactylous -unideaed -unideal -unidealism -unidealist -unidealistic -unidealized -unidentate -unidentated -unidenticulate -unidentifiable -unidentifiableness -unidentifiably -unidentified -unidentifiedly -unidentifying -unideographic -unidextral -unidextrality -unidigitate -unidimensional -unidiomatic -unidiomatically -unidirect -unidirected -unidirection -unidirectional -unidle -unidleness -unidly -unidolatrous -unidolized -unidyllic -unie -uniembryonate -uniequivalent -uniface -unifaced -unifacial -unifactorial -unifarious -unifiable -unific -unification -unificationist -unificator -unified -unifiedly -unifiedness -unifier -unifilar -uniflagellate -unifloral -uniflorate -uniflorous -uniflow -uniflowered -unifocal -unifoliar -unifoliate -unifoliolate -Unifolium -uniform -uniformal -uniformalization -uniformalize -uniformally -uniformation -uniformed -uniformist -uniformitarian -uniformitarianism -uniformity -uniformization -uniformize -uniformless -uniformly -uniformness -unify -unigenesis -unigenetic -unigenist -unigenistic -unigenital -unigeniture -unigenous -uniglandular -uniglobular -unignitable -unignited -unignitible -unignominious -unignorant -unignored -unigravida -uniguttulate -unijugate -unijugous -unilabiate -unilabiated -unilamellar -unilamellate -unilaminar -unilaminate -unilateral -unilateralism -unilateralist -unilaterality -unilateralization -unilateralize -unilaterally -unilinear -unilingual -unilingualism -uniliteral -unilludedly -unillumed -unilluminated -unilluminating -unillumination -unillumined -unillusioned -unillusory -unillustrated -unillustrative -unillustrious -unilobal -unilobar -unilobate -unilobe -unilobed -unilobular -unilocular -unilocularity -uniloculate -unimacular -unimaged -unimaginable -unimaginableness -unimaginably -unimaginary -unimaginative -unimaginatively -unimaginativeness -unimagine -unimagined -unimanual -unimbanked -unimbellished -unimbezzled -unimbibed -unimbibing -unimbittered -unimbodied -unimboldened -unimbordered -unimbosomed -unimbowed -unimbowered -unimbroiled -unimbrowned -unimbrued -unimbued -unimedial -unimitable -unimitableness -unimitably -unimitated -unimitating -unimitative -unimmaculate -unimmanent -unimmediate -unimmerged -unimmergible -unimmersed -unimmigrating -unimmolated -unimmortal -unimmortalize -unimmortalized -unimmovable -unimmured -unimodal -unimodality -unimodular -unimolecular -unimolecularity -unimpair -unimpairable -unimpaired -unimpartable -unimparted -unimpartial -unimpassionate -unimpassioned -unimpassionedly -unimpassionedness -unimpatient -unimpawned -unimpeachability -unimpeachable -unimpeachableness -unimpeachably -unimpeached -unimpearled -unimped -unimpeded -unimpededly -unimpedible -unimpedness -unimpelled -unimpenetrable -unimperative -unimperial -unimperialistic -unimperious -unimpertinent -unimpinging -unimplanted -unimplicable -unimplicate -unimplicated -unimplicit -unimplicitly -unimplied -unimplorable -unimplored -unimpoisoned -unimportance -unimportant -unimportantly -unimported -unimporting -unimportunate -unimportunately -unimportuned -unimposed -unimposedly -unimposing -unimpostrous -unimpounded -unimpoverished -unimpowered -unimprecated -unimpregnable -unimpregnate -unimpregnated -unimpressed -unimpressibility -unimpressible -unimpressibleness -unimpressibly -unimpressionability -unimpressionable -unimpressive -unimpressively -unimpressiveness -unimprinted -unimprison -unimprisonable -unimprisoned -unimpropriated -unimprovable -unimprovableness -unimprovably -unimproved -unimprovedly -unimprovedness -unimprovement -unimproving -unimprovised -unimpugnable -unimpugned -unimpulsive -unimpurpled -unimputable -unimputed -unimucronate -unimultiplex -unimuscular -uninaugurated -unincantoned -unincarcerated -unincarnate -unincarnated -unincensed -uninchoative -unincidental -unincised -unincisive -unincited -uninclinable -uninclined -uninclining -uninclosed -uninclosedness -unincludable -unincluded -uninclusive -uninclusiveness -uninconvenienced -unincorporate -unincorporated -unincorporatedly -unincorporatedness -unincreasable -unincreased -unincreasing -unincubated -uninculcated -unincumbered -unindebted -unindebtedly -unindebtedness -unindemnified -unindentable -unindented -unindentured -unindexed -unindicable -unindicated -unindicative -unindictable -unindicted -unindifference -unindifferency -unindifferent -unindifferently -unindigent -unindignant -unindividual -unindividualize -unindividualized -unindividuated -unindorsed -uninduced -uninductive -unindulged -unindulgent -unindulgently -unindurated -unindustrial -unindustrialized -unindustrious -unindustriously -unindwellable -uninebriated -uninebriating -uninervate -uninerved -uninfallibility -uninfallible -uninfatuated -uninfectable -uninfected -uninfectious -uninfectiousness -uninfeft -uninferred -uninfested -uninfiltrated -uninfinite -uninfiniteness -uninfixed -uninflamed -uninflammability -uninflammable -uninflated -uninflected -uninflectedness -uninflicted -uninfluenceable -uninfluenced -uninfluencing -uninfluencive -uninfluential -uninfluentiality -uninfolded -uninformed -uninforming -uninfracted -uninfringeable -uninfringed -uninfringible -uninfuriated -uninfused -uningenious -uningeniously -uningeniousness -uningenuity -uningenuous -uningenuously -uningenuousness -uningested -uningrafted -uningrained -uninhabitability -uninhabitable -uninhabitableness -uninhabitably -uninhabited -uninhabitedness -uninhaled -uninheritability -uninheritable -uninherited -uninhibited -uninhibitive -uninhumed -uninimical -uniniquitous -uninitialed -uninitialled -uninitiate -uninitiated -uninitiatedness -uninitiation -uninjectable -uninjected -uninjurable -uninjured -uninjuredness -uninjuring -uninjurious -uninjuriously -uninjuriousness -uninked -uninlaid -uninn -uninnate -uninnocence -uninnocent -uninnocently -uninnocuous -uninnovating -uninoculable -uninoculated -uninodal -uninominal -uninquired -uninquiring -uninquisitive -uninquisitively -uninquisitiveness -uninquisitorial -uninsane -uninsatiable -uninscribed -uninserted -uninshrined -uninsinuated -uninsistent -uninsolvent -uninspected -uninspirable -uninspired -uninspiring -uninspiringly -uninspirited -uninspissated -uninstalled -uninstanced -uninstated -uninstigated -uninstilled -uninstituted -uninstructed -uninstructedly -uninstructedness -uninstructible -uninstructing -uninstructive -uninstructively -uninstructiveness -uninstrumental -uninsular -uninsulate -uninsulated -uninsultable -uninsulted -uninsulting -uninsurability -uninsurable -uninsured -unintegrated -unintellective -unintellectual -unintellectualism -unintellectuality -unintellectually -unintelligence -unintelligent -unintelligently -unintelligentsia -unintelligibility -unintelligible -unintelligibleness -unintelligibly -unintended -unintendedly -unintensive -unintent -unintentional -unintentionality -unintentionally -unintentionalness -unintently -unintentness -unintercalated -unintercepted -uninterchangeable -uninterdicted -uninterested -uninterestedly -uninterestedness -uninteresting -uninterestingly -uninterestingness -uninterferedwith -uninterjected -uninterlaced -uninterlarded -uninterleave -uninterleaved -uninterlined -uninterlinked -uninterlocked -unintermarrying -unintermediate -unintermingled -unintermission -unintermissive -unintermitted -unintermittedly -unintermittedness -unintermittent -unintermitting -unintermittingly -unintermittingness -unintermixed -uninternational -uninterpleaded -uninterpolated -uninterposed -uninterposing -uninterpretable -uninterpreted -uninterred -uninterrogable -uninterrogated -uninterrupted -uninterruptedly -uninterruptedness -uninterruptible -uninterruptibleness -uninterrupting -uninterruption -unintersected -uninterspersed -unintervening -uninterviewed -unintervolved -uninterwoven -uninthroned -unintimate -unintimated -unintimidated -unintitled -unintombed -unintoned -unintoxicated -unintoxicatedness -unintoxicating -unintrenchable -unintrenched -unintricate -unintrigued -unintriguing -unintroduced -unintroducible -unintroitive -unintromitted -unintrospective -unintruded -unintruding -unintrusive -unintrusively -unintrusted -unintuitive -unintwined -uninuclear -uninucleate -uninucleated -uninundated -uninured -uninurned -uninvadable -uninvaded -uninvaginated -uninvalidated -uninveighing -uninveigled -uninvented -uninventful -uninventibleness -uninventive -uninventively -uninventiveness -uninverted -uninvested -uninvestigable -uninvestigated -uninvestigating -uninvestigative -uninvidious -uninvidiously -uninvigorated -uninvincible -uninvite -uninvited -uninvitedly -uninviting -uninvoiced -uninvoked -uninvolved -uninweaved -uninwoven -uninwrapped -uninwreathed -Unio -unio -uniocular -unioid -Uniola -union -unioned -unionic -unionid -Unionidae -unioniform -unionism -unionist -unionistic -unionization -unionize -unionoid -unioval -uniovular -uniovulate -unipara -uniparental -uniparient -uniparous -unipartite -uniped -unipeltate -uniperiodic -unipersonal -unipersonalist -unipersonality -unipetalous -uniphase -uniphaser -uniphonous -uniplanar -uniplicate -unipod -unipolar -unipolarity -uniporous -unipotence -unipotent -unipotential -unipulse -uniquantic -unique -uniquely -uniqueness -uniquity -uniradial -uniradiate -uniradiated -uniradical -uniramose -uniramous -unirascible -unireme -unirenic -unirhyme -uniridescent -unironed -unironical -unirradiated -unirrigated -unirritable -unirritant -unirritated -unirritatedly -unirritating -unisepalous -uniseptate -uniserial -uniserially -uniseriate -uniseriately -uniserrate -uniserrulate -unisexed -unisexual -unisexuality -unisexually -unisilicate -unisoil -unisolable -unisolate -unisolated -unisomeric -unisometrical -unisomorphic -unison -unisonal -unisonally -unisonance -unisonant -unisonous -unisotropic -unisparker -unispiculate -unispinose -unispiral -unissuable -unissued -unistylist -unisulcate -unit -unitage -unital -unitalicized -Unitarian -unitarian -Unitarianism -Unitarianize -unitarily -unitariness -unitarism -unitarist -unitary -unite -uniteability -uniteable -uniteably -united -unitedly -unitedness -unitemized -unitentacular -uniter -uniting -unitingly -unition -unitism -unitistic -unitive -unitively -unitiveness -unitize -unitooth -unitrivalent -unitrope -unituberculate -unitude -unity -uniunguiculate -uniungulate -univalence -univalency -univalent -univalvate -univalve -univalvular -univariant -univerbal -universal -universalia -Universalian -Universalism -universalism -Universalist -universalist -Universalistic -universalistic -universality -universalization -universalize -universalizer -universally -universalness -universanimous -universe -universeful -universitarian -universitarianism -universitary -universitize -university -universityless -universitylike -universityship -universological -universologist -universology -univied -univocability -univocacy -univocal -univocalized -univocally -univocity -univoltine -univorous -unjacketed -unjaded -unjagged -unjailed -unjam -unjapanned -unjarred -unjarring -unjaundiced -unjaunty -unjealous -unjealoused -unjellied -unjesting -unjesuited -unjesuitical -unjesuitically -unjewel -unjeweled -unjewelled -Unjewish -unjilted -unjocose -unjocund -unjogged -unjogging -unjoin -unjoinable -unjoint -unjointed -unjointedness -unjointured -unjoking -unjokingly -unjolly -unjolted -unjostled -unjournalized -unjovial -unjovially -unjoyed -unjoyful -unjoyfully -unjoyfulness -unjoyous -unjoyously -unjoyousness -unjudgable -unjudge -unjudged -unjudgelike -unjudging -unjudicable -unjudicial -unjudicially -unjudicious -unjudiciously -unjudiciousness -unjuggled -unjuiced -unjuicy -unjumbled -unjumpable -unjust -unjustice -unjusticiable -unjustifiable -unjustifiableness -unjustifiably -unjustified -unjustifiedly -unjustifiedness -unjustify -unjustled -unjustly -unjustness -unjuvenile -unkaiserlike -unkamed -unked -unkeeled -unkembed -unkempt -unkemptly -unkemptness -unken -unkenned -unkennedness -unkennel -unkenneled -unkenning -unkensome -unkept -unkerchiefed -unket -unkey -unkeyed -unkicked -unkid -unkill -unkillability -unkillable -unkilled -unkilling -unkilned -unkin -unkind -unkindhearted -unkindled -unkindledness -unkindlily -unkindliness -unkindling -unkindly -unkindness -unkindred -unkindredly -unking -unkingdom -unkinged -unkinger -unkinglike -unkingly -unkink -unkinlike -unkirk -unkiss -unkissed -unkist -unknave -unkneaded -unkneeling -unknelled -unknew -unknight -unknighted -unknightlike -unknit -unknittable -unknitted -unknitting -unknocked -unknocking -unknot -unknotted -unknotty -unknow -unknowability -unknowable -unknowableness -unknowably -unknowing -unknowingly -unknowingness -unknowledgeable -unknown -unknownly -unknownness -unknownst -unkodaked -unkoshered -unlabeled -unlabialize -unlabiate -unlaborable -unlabored -unlaboring -unlaborious -unlaboriously -unlaboriousness -unlace -unlaced -unlacerated -unlackeyed -unlacquered -unlade -unladen -unladled -unladyfied -unladylike -unlagging -unlaid -unlame -unlamed -unlamented -unlampooned -unlanced -unland -unlanded -unlandmarked -unlanguaged -unlanguid -unlanguishing -unlanterned -unlap -unlapped -unlapsed -unlapsing -unlarded -unlarge -unlash -unlashed -unlasher -unlassoed -unlasting -unlatch -unlath -unlathed -unlathered -unlatinized -unlatticed -unlaudable -unlaudableness -unlaudably -unlauded -unlaugh -unlaughing -unlaunched -unlaundered -unlaureled -unlaved -unlaving -unlavish -unlavished -unlaw -unlawed -unlawful -unlawfully -unlawfulness -unlawlearned -unlawlike -unlawly -unlawyered -unlawyerlike -unlay -unlayable -unleached -unlead -unleaded -unleaderly -unleaf -unleafed -unleagued -unleaguer -unleakable -unleaky -unleal -unlean -unleared -unlearn -unlearnability -unlearnable -unlearnableness -unlearned -unlearnedly -unlearnedness -unlearning -unlearnt -unleasable -unleased -unleash -unleashed -unleathered -unleave -unleaved -unleavenable -unleavened -unlectured -unled -unleft -unlegacied -unlegal -unlegalized -unlegally -unlegalness -unlegate -unlegislative -unleisured -unleisuredness -unleisurely -unlenient -unlensed -unlent -unless -unlessened -unlessoned -unlet -unlettable -unletted -unlettered -unletteredly -unletteredness -unlettering -unletterlike -unlevel -unleveled -unlevelly -unlevelness -unlevied -unlevigated -unlexicographical -unliability -unliable -unlibeled -unliberal -unliberalized -unliberated -unlibidinous -unlicensed -unlicentiated -unlicentious -unlichened -unlickable -unlicked -unlid -unlidded -unlie -unlifelike -unliftable -unlifted -unlifting -unligable -unligatured -unlight -unlighted -unlightedly -unlightedness -unlightened -unlignified -unlikable -unlikableness -unlikably -unlike -unlikeable -unlikeableness -unlikeably -unliked -unlikelihood -unlikeliness -unlikely -unliken -unlikeness -unliking -unlimb -unlimber -unlime -unlimed -unlimitable -unlimitableness -unlimitably -unlimited -unlimitedly -unlimitedness -unlimitless -unlimned -unlimp -unline -unlineal -unlined -unlingering -unlink -unlinked -unlionlike -unliquefiable -unliquefied -unliquid -unliquidatable -unliquidated -unliquidating -unliquidation -unliquored -unlisping -unlist -unlisted -unlistened -unlistening -unlisty -unlit -unliteral -unliterally -unliteralness -unliterary -unliterate -unlitigated -unlitten -unlittered -unliturgical -unliturgize -unlivable -unlivableness -unlivably -unlive -unliveable -unliveableness -unliveably -unliveliness -unlively -unliveried -unlivery -unliving -unlizardlike -unload -unloaded -unloaden -unloader -unloafing -unloanably -unloaned -unloaning -unloath -unloathed -unloathful -unloathly -unloathsome -unlobed -unlocal -unlocalizable -unlocalize -unlocalized -unlocally -unlocated -unlock -unlockable -unlocked -unlocker -unlocking -unlocomotive -unlodge -unlodged -unlofty -unlogged -unlogic -unlogical -unlogically -unlogicalness -unlonely -unlook -unlooked -unloop -unlooped -unloosable -unloosably -unloose -unloosen -unloosening -unloosing -unlooted -unlopped -unloquacious -unlord -unlorded -unlordly -unlosable -unlosableness -unlost -unlotted -unlousy -unlovable -unlovableness -unlovably -unlove -unloveable -unloveableness -unloveably -unloved -unlovelily -unloveliness -unlovely -unloverlike -unloverly -unloving -unlovingly -unlovingness -unlowered -unlowly -unloyal -unloyally -unloyalty -unlubricated -unlucent -unlucid -unluck -unluckful -unluckily -unluckiness -unlucky -unlucrative -unludicrous -unluffed -unlugged -unlugubrious -unluminous -unlumped -unlunar -unlured -unlust -unlustily -unlustiness -unlustrous -unlusty -unlute -unluted -unluxated -unluxuriant -unluxurious -unlycanthropize -unlying -unlyrical -unlyrically -unmacadamized -unmacerated -unmachinable -unmackly -unmad -unmadded -unmaddened -unmade -unmagic -unmagical -unmagisterial -unmagistratelike -unmagnanimous -unmagnetic -unmagnetical -unmagnetized -unmagnified -unmagnify -unmaid -unmaidenlike -unmaidenliness -unmaidenly -unmail -unmailable -unmailableness -unmailed -unmaimable -unmaimed -unmaintainable -unmaintained -unmajestic -unmakable -unmake -unmaker -unmalevolent -unmalicious -unmalignant -unmaligned -unmalleability -unmalleable -unmalleableness -unmalled -unmaltable -unmalted -unmammalian -unmammonized -unman -unmanacle -unmanacled -unmanageable -unmanageableness -unmanageably -unmanaged -unmancipated -unmandated -unmanducated -unmaned -unmaneged -unmanful -unmanfully -unmangled -unmaniable -unmaniac -unmaniacal -unmanicured -unmanifest -unmanifested -unmanipulatable -unmanipulated -unmanlike -unmanlily -unmanliness -unmanly -unmanned -unmanner -unmannered -unmanneredly -unmannerliness -unmannerly -unmannish -unmanored -unmantle -unmantled -unmanufacturable -unmanufactured -unmanumissible -unmanumitted -unmanurable -unmanured -unmappable -unmapped -unmarbled -unmarch -unmarching -unmarginal -unmarginated -unmarine -unmaritime -unmarkable -unmarked -unmarketable -unmarketed -unmarled -unmarred -unmarriable -unmarriageability -unmarriageable -unmarried -unmarring -unmarry -unmarrying -unmarshaled -unmartial -unmartyr -unmartyred -unmarvelous -unmasculine -unmashed -unmask -unmasked -unmasker -unmasking -unmasquerade -unmassacred -unmassed -unmast -unmaster -unmasterable -unmastered -unmasterful -unmasticable -unmasticated -unmatchable -unmatchableness -unmatchably -unmatched -unmatchedness -unmate -unmated -unmaterial -unmaterialistic -unmateriate -unmaternal -unmathematical -unmathematically -unmating -unmatriculated -unmatrimonial -unmatronlike -unmatted -unmature -unmatured -unmaturely -unmatureness -unmaturing -unmaturity -unmauled -unmaze -unmeaning -unmeaningly -unmeaningness -unmeant -unmeasurable -unmeasurableness -unmeasurably -unmeasured -unmeasuredly -unmeasuredness -unmeated -unmechanic -unmechanical -unmechanically -unmechanistic -unmechanize -unmechanized -unmedaled -unmedalled -unmeddle -unmeddled -unmeddlesome -unmeddling -unmeddlingly -unmeddlingness -unmediaeval -unmediated -unmediatized -unmedicable -unmedical -unmedicated -unmedicative -unmedicinable -unmedicinal -unmeditated -unmeditative -unmediumistic -unmedullated -unmeek -unmeekly -unmeekness -unmeet -unmeetable -unmeetly -unmeetness -unmelancholy -unmeliorated -unmellow -unmellowed -unmelodic -unmelodious -unmelodiously -unmelodiousness -unmelodized -unmelodramatic -unmeltable -unmeltableness -unmeltably -unmelted -unmeltedness -unmelting -unmember -unmemoired -unmemorable -unmemorialized -unmemoried -unmemorized -unmenaced -unmenacing -unmendable -unmendableness -unmendably -unmendacious -unmended -unmenial -unmenseful -unmenstruating -unmensurable -unmental -unmentionability -unmentionable -unmentionableness -unmentionables -unmentionably -unmentioned -unmercantile -unmercenariness -unmercenary -unmercerized -unmerchantable -unmerchantlike -unmerchantly -unmerciful -unmercifully -unmercifulness -unmercurial -unmeretricious -unmerge -unmerged -unmeridional -unmerited -unmeritedly -unmeritedness -unmeriting -unmeritorious -unmeritoriously -unmeritoriousness -unmerry -unmesh -unmesmeric -unmesmerize -unmesmerized -unmet -unmetaled -unmetalized -unmetalled -unmetallic -unmetallurgical -unmetamorphosed -unmetaphorical -unmetaphysic -unmetaphysical -unmeted -unmeteorological -unmetered -unmethodical -unmethodically -unmethodicalness -unmethodized -unmethodizing -unmethylated -unmeticulous -unmetric -unmetrical -unmetrically -unmetricalness -unmetropolitan -unmettle -unmew -unmewed -unmicaceous -unmicrobic -unmicroscopic -unmidwifed -unmighty -unmigrating -unmildewed -unmilitant -unmilitarily -unmilitariness -unmilitaristic -unmilitarized -unmilitary -unmilked -unmilled -unmillinered -unmilted -unmimicked -unminable -unminced -unmincing -unmind -unminded -unmindful -unmindfully -unmindfulness -unminding -unmined -unmineralized -unmingle -unmingleable -unmingled -unmingling -unminimized -unminished -unminister -unministered -unministerial -unministerially -unminted -unminuted -unmiracled -unmiraculous -unmiraculously -unmired -unmirrored -unmirthful -unmirthfully -unmirthfulness -unmiry -unmisanthropic -unmiscarrying -unmischievous -unmiscible -unmisconceivable -unmiserly -unmisgiving -unmisgivingly -unmisguided -unmisinterpretable -unmisled -unmissable -unmissed -unmissionary -unmissionized -unmist -unmistakable -unmistakableness -unmistakably -unmistakedly -unmistaken -unmistakingly -unmistressed -unmistrusted -unmistrustful -unmistrusting -unmisunderstandable -unmisunderstanding -unmisunderstood -unmiter -unmitigable -unmitigated -unmitigatedly -unmitigatedness -unmitigative -unmittened -unmix -unmixable -unmixableness -unmixed -unmixedly -unmixedness -unmoaned -unmoated -unmobbed -unmobilized -unmocked -unmocking -unmockingly -unmodel -unmodeled -unmodelled -unmoderate -unmoderately -unmoderateness -unmoderating -unmodern -unmodernity -unmodernize -unmodernized -unmodest -unmodifiable -unmodifiableness -unmodifiably -unmodified -unmodifiedness -unmodish -unmodulated -unmoiled -unmoist -unmoisten -unmold -unmoldable -unmolded -unmoldered -unmoldering -unmoldy -unmolested -unmolestedly -unmolesting -unmollifiable -unmollifiably -unmollified -unmollifying -unmolten -unmomentary -unmomentous -unmomentously -unmonarch -unmonarchical -unmonastic -unmonetary -unmoneyed -unmonistic -unmonitored -unmonkish -unmonkly -unmonopolize -unmonopolized -unmonopolizing -unmonotonous -unmonumented -unmoor -unmoored -unmooted -unmopped -unmoral -unmoralist -unmorality -unmoralize -unmoralized -unmoralizing -unmorally -unmoralness -unmorbid -unmordanted -unmoribund -unmorose -unmorphological -unmortal -unmortared -unmortgage -unmortgageable -unmortgaged -unmortified -unmortifiedly -unmortifiedness -unmortise -unmortised -unmossed -unmothered -unmotherly -unmotionable -unmotivated -unmotivatedly -unmotivatedness -unmotived -unmotorized -unmottled -unmounded -unmount -unmountable -unmountainous -unmounted -unmounting -unmourned -unmournful -unmourning -unmouthable -unmouthed -unmouthpieced -unmovability -unmovable -unmovableness -unmovably -unmoved -unmovedly -unmoving -unmovingly -unmovingness -unmowed -unmown -unmucilaged -unmudded -unmuddied -unmuddle -unmuddled -unmuddy -unmuffle -unmuffled -unmulcted -unmulish -unmulled -unmullioned -unmultipliable -unmultiplied -unmultipliedly -unmultiply -unmummied -unmummify -unmunched -unmundane -unmundified -unmunicipalized -unmunificent -unmunitioned -unmurmured -unmurmuring -unmurmuringly -unmurmurous -unmuscled -unmuscular -unmusical -unmusicality -unmusically -unmusicalness -unmusicianly -unmusked -unmussed -unmusted -unmusterable -unmustered -unmutated -unmutation -unmuted -unmutilated -unmutinous -unmuttered -unmutual -unmutualized -unmuzzle -unmuzzled -unmuzzling -unmyelinated -unmysterious -unmysteriously -unmystery -unmystical -unmysticize -unmystified -unmythical -unnabbed -unnagged -unnagging -unnail -unnailed -unnaked -unnamability -unnamable -unnamableness -unnamably -unname -unnameability -unnameable -unnameableness -unnameably -unnamed -unnapkined -unnapped -unnarcotic -unnarrated -unnarrow -unnation -unnational -unnationalized -unnative -unnatural -unnaturalism -unnaturalist -unnaturalistic -unnaturality -unnaturalizable -unnaturalize -unnaturalized -unnaturally -unnaturalness -unnature -unnautical -unnavigability -unnavigable -unnavigableness -unnavigably -unnavigated -unneaped -unnearable -unneared -unnearly -unnearness -unneat -unneatly -unneatness -unnebulous -unnecessarily -unnecessariness -unnecessary -unnecessitated -unnecessitating -unnecessity -unneeded -unneedful -unneedfully -unneedfulness -unneedy -unnefarious -unnegated -unneglected -unnegligent -unnegotiable -unnegotiableness -unnegotiably -unnegotiated -unnegro -unneighbored -unneighborlike -unneighborliness -unneighborly -unnephritic -unnerve -unnerved -unnervous -unnest -unnestle -unnestled -unneth -unnethe -unnethes -unnethis -unnetted -unnettled -unneurotic -unneutral -unneutralized -unneutrally -unnew -unnewly -unnewness -unnibbed -unnibbied -unnice -unnicely -unniceness -unniched -unnicked -unnickeled -unnickelled -unnicknamed -unniggard -unniggardly -unnigh -unnimbed -unnimble -unnimbleness -unnimbly -unnipped -unnitrogenized -unnobilitated -unnobility -unnoble -unnobleness -unnobly -unnoised -unnomadic -unnominated -unnonsensical -unnoosed -unnormal -unnorthern -unnose -unnosed -unnotable -unnotched -unnoted -unnoteworthy -unnoticeable -unnoticeableness -unnoticeably -unnoticed -unnoticing -unnotified -unnotify -unnoting -unnourishable -unnourished -unnourishing -unnovel -unnovercal -unnucleated -unnullified -unnumberable -unnumberableness -unnumberably -unnumbered -unnumberedness -unnumerical -unnumerous -unnurtured -unnutritious -unnutritive -unnuzzled -unnymphlike -unoared -unobdurate -unobedience -unobedient -unobediently -unobese -unobeyed -unobeying -unobjected -unobjectionable -unobjectionableness -unobjectionably -unobjectional -unobjective -unobligated -unobligatory -unobliged -unobliging -unobligingly -unobligingness -unobliterable -unobliterated -unoblivious -unobnoxious -unobscene -unobscure -unobscured -unobsequious -unobsequiously -unobsequiousness -unobservable -unobservance -unobservant -unobservantly -unobservantness -unobserved -unobservedly -unobserving -unobservingly -unobsessed -unobsolete -unobstinate -unobstruct -unobstructed -unobstructedly -unobstructedness -unobstructive -unobstruent -unobtainable -unobtainableness -unobtainably -unobtained -unobtruded -unobtruding -unobtrusive -unobtrusively -unobtrusiveness -unobtunded -unobumbrated -unobverted -unobviated -unobvious -unoccasional -unoccasioned -unoccidental -unoccluded -unoccupancy -unoccupation -unoccupied -unoccupiedly -unoccupiedness -unoccurring -unoceanic -unocular -unode -unodious -unodoriferous -unoecumenic -unoecumenical -unoffendable -unoffended -unoffendedly -unoffender -unoffending -unoffendingly -unoffensive -unoffensively -unoffensiveness -unoffered -unofficed -unofficered -unofficerlike -unofficial -unofficialdom -unofficially -unofficialness -unofficiating -unofficinal -unofficious -unofficiously -unofficiousness -unoffset -unoften -unogled -unoil -unoiled -unoiling -unoily -unold -unomened -unominous -unomitted -unomnipotent -unomniscient -Unona -unonerous -unontological -unopaque -unoped -unopen -unopenable -unopened -unopening -unopenly -unopenness -unoperably -unoperated -unoperatic -unoperating -unoperative -unoperculate -unoperculated -unopined -unopinionated -unoppignorated -unopportune -unopportunely -unopportuneness -unopposable -unopposed -unopposedly -unopposedness -unopposite -unoppressed -unoppressive -unoppressively -unoppressiveness -unopprobrious -unoppugned -unopulence -unopulent -unoratorial -unoratorical -unorbed -unorbital -unorchestrated -unordain -unordainable -unordained -unorder -unorderable -unordered -unorderly -unordinarily -unordinariness -unordinary -unordinate -unordinately -unordinateness -unordnanced -unorganic -unorganical -unorganically -unorganicalness -unorganizable -unorganized -unorganizedly -unorganizedness -unoriental -unorientalness -unoriented -unoriginal -unoriginality -unoriginally -unoriginalness -unoriginate -unoriginated -unoriginatedness -unoriginately -unoriginateness -unorigination -unoriginative -unoriginatively -unoriginativeness -unorn -unornamental -unornamentally -unornamentalness -unornamented -unornate -unornithological -unornly -unorphaned -unorthodox -unorthodoxically -unorthodoxly -unorthodoxness -unorthodoxy -unorthographical -unorthographically -unoscillating -unosculated -unossified -unostensible -unostentation -unostentatious -unostentatiously -unostentatiousness -unoutgrown -unoutlawed -unoutraged -unoutspeakable -unoutspoken -unoutworn -unoverclouded -unovercome -unoverdone -unoverdrawn -unoverflowing -unoverhauled -unoverleaped -unoverlooked -unoverpaid -unoverpowered -unoverruled -unovert -unovertaken -unoverthrown -unovervalued -unoverwhelmed -unowed -unowing -unown -unowned -unoxidable -unoxidated -unoxidizable -unoxidized -unoxygenated -unoxygenized -unpacable -unpaced -unpacifiable -unpacific -unpacified -unpacifiedly -unpacifiedness -unpacifist -unpack -unpacked -unpacker -unpadded -unpadlocked -unpagan -unpaganize -unpaged -unpaginal -unpaid -unpained -unpainful -unpaining -unpainstaking -unpaint -unpaintability -unpaintable -unpaintableness -unpaintably -unpainted -unpaintedly -unpaintedness -unpaired -unpalatability -unpalatable -unpalatableness -unpalatably -unpalatal -unpalatial -unpale -unpaled -unpalisaded -unpalisadoed -unpalled -unpalliable -unpalliated -unpalpable -unpalped -unpalpitating -unpalsied -unpampered -unpanegyrized -unpanel -unpaneled -unpanelled -unpanged -unpanniered -unpanoplied -unpantheistic -unpanting -unpapal -unpapaverous -unpaper -unpapered -unparaded -unparadise -unparadox -unparagoned -unparagonized -unparagraphed -unparallel -unparallelable -unparalleled -unparalleledly -unparalleledness -unparallelness -unparalyzed -unparaphrased -unparasitical -unparcel -unparceled -unparceling -unparcelled -unparcelling -unparch -unparched -unparching -unpardon -unpardonable -unpardonableness -unpardonably -unpardoned -unpardonedness -unpardoning -unpared -unparented -unparfit -unpargeted -unpark -unparked -unparking -unparliamentary -unparliamented -unparodied -unparrel -unparriable -unparried -unparroted -unparrying -unparsed -unparsimonious -unparsonic -unparsonical -unpartable -unpartableness -unpartably -unpartaken -unpartaking -unparted -unpartial -unpartiality -unpartially -unpartialness -unparticipant -unparticipated -unparticipating -unparticipative -unparticular -unparticularized -unparticularizing -unpartisan -unpartitioned -unpartizan -unpartnered -unpartook -unparty -unpass -unpassable -unpassableness -unpassably -unpassed -unpassing -unpassionate -unpassionately -unpassionateness -unpassioned -unpassive -unpaste -unpasted -unpasteurized -unpasting -unpastor -unpastoral -unpastured -unpatched -unpatent -unpatentable -unpatented -unpaternal -unpathed -unpathetic -unpathwayed -unpatient -unpatiently -unpatientness -unpatriarchal -unpatrician -unpatriotic -unpatriotically -unpatriotism -unpatristic -unpatrolled -unpatronizable -unpatronized -unpatronizing -unpatted -unpatterned -unpaunch -unpaunched -unpauperized -unpausing -unpausingly -unpave -unpaved -unpavilioned -unpaving -unpawed -unpawn -unpawned -unpayable -unpayableness -unpayably -unpaying -unpayment -unpeace -unpeaceable -unpeaceableness -unpeaceably -unpeaceful -unpeacefully -unpeacefulness -unpealed -unpearled -unpebbled -unpeccable -unpecked -unpecuniarily -unpedagogical -unpedantic -unpeddled -unpedestal -unpedigreed -unpeel -unpeelable -unpeelableness -unpeeled -unpeerable -unpeered -unpeg -unpejorative -unpelagic -unpelted -unpen -unpenal -unpenalized -unpenanced -unpenciled -unpencilled -unpenetrable -unpenetrated -unpenetrating -unpenitent -unpenitently -unpenitentness -unpenned -unpennied -unpennoned -unpensionable -unpensionableness -unpensioned -unpensioning -unpent -unpenurious -unpeople -unpeopled -unpeopling -unperceived -unperceivedly -unperceptible -unperceptibly -unperceptive -unperch -unperched -unpercipient -unpercolated -unpercussed -unperfect -unperfected -unperfectedly -unperfectedness -unperfectly -unperfectness -unperfidious -unperflated -unperforate -unperforated -unperformable -unperformance -unperformed -unperforming -unperfumed -unperilous -unperiodic -unperiodical -unperiphrased -unperishable -unperishableness -unperishably -unperished -unperishing -unperjured -unpermanency -unpermanent -unpermanently -unpermeable -unpermeated -unpermissible -unpermissive -unpermitted -unpermitting -unpermixed -unpernicious -unperpendicular -unperpetrated -unperpetuated -unperplex -unperplexed -unperplexing -unpersecuted -unpersecutive -unperseverance -unpersevering -unperseveringly -unperseveringness -unpersonable -unpersonableness -unpersonal -unpersonality -unpersonified -unpersonify -unperspicuous -unperspirable -unperspiring -unpersuadable -unpersuadableness -unpersuadably -unpersuaded -unpersuadedness -unpersuasibleness -unpersuasion -unpersuasive -unpersuasively -unpersuasiveness -unpertaining -unpertinent -unpertinently -unperturbed -unperturbedly -unperturbedness -unperuked -unperused -unpervaded -unperverse -unpervert -unperverted -unpervious -unpessimistic -unpestered -unpestilential -unpetal -unpetitioned -unpetrified -unpetrify -unpetticoated -unpetulant -unpharasaic -unpharasaical -unphased -unphenomenal -unphilanthropic -unphilanthropically -unphilological -unphilosophic -unphilosophically -unphilosophicalness -unphilosophize -unphilosophized -unphilosophy -unphlegmatic -unphonetic -unphoneticness -unphonographed -unphosphatized -unphotographed -unphrasable -unphrasableness -unphrased -unphrenological -unphysical -unphysically -unphysicianlike -unphysicked -unphysiological -unpicaresque -unpick -unpickable -unpicked -unpicketed -unpickled -unpictorial -unpictorially -unpicturability -unpicturable -unpictured -unpicturesque -unpicturesquely -unpicturesqueness -unpiece -unpieced -unpierceable -unpierced -unpiercing -unpiety -unpigmented -unpile -unpiled -unpilfered -unpilgrimlike -unpillaged -unpillared -unpilled -unpilloried -unpillowed -unpiloted -unpimpled -unpin -unpinched -unpining -unpinion -unpinioned -unpinked -unpinned -unpious -unpiped -unpiqued -unpirated -unpitched -unpiteous -unpiteously -unpiteousness -unpitiable -unpitiably -unpitied -unpitiedly -unpitiedness -unpitiful -unpitifully -unpitifulness -unpitted -unpitying -unpityingly -unpityingness -unplacable -unplacably -unplacated -unplace -unplaced -unplacid -unplagiarized -unplagued -unplaid -unplain -unplained -unplainly -unplainness -unplait -unplaited -unplan -unplaned -unplanished -unplank -unplanked -unplanned -unplannedly -unplannedness -unplant -unplantable -unplanted -unplantlike -unplashed -unplaster -unplastered -unplastic -unplat -unplated -unplatted -unplausible -unplausibleness -unplausibly -unplayable -unplayed -unplayful -unplaying -unpleached -unpleadable -unpleaded -unpleading -unpleasable -unpleasant -unpleasantish -unpleasantly -unpleasantness -unpleasantry -unpleased -unpleasing -unpleasingly -unpleasingness -unpleasurable -unpleasurably -unpleasure -unpleat -unpleated -unplebeian -unpledged -unplenished -unplenteous -unplentiful -unplentifulness -unpliable -unpliableness -unpliably -unpliancy -unpliant -unpliantly -unplied -unplighted -unplodding -unplotted -unplotting -unplough -unploughed -unplow -unplowed -unplucked -unplug -unplugged -unplugging -unplumb -unplumbed -unplume -unplumed -unplummeted -unplump -unplundered -unplunge -unplunged -unplutocratic -unplutocratically -unpoached -unpocket -unpocketed -unpodded -unpoetic -unpoetically -unpoeticalness -unpoeticized -unpoetize -unpoetized -unpoignard -unpointed -unpointing -unpoise -unpoised -unpoison -unpoisonable -unpoisoned -unpoisonous -unpolarizable -unpolarized -unpoled -unpolemical -unpolemically -unpoliced -unpolicied -unpolish -unpolishable -unpolished -unpolishedness -unpolite -unpolitely -unpoliteness -unpolitic -unpolitical -unpolitically -unpoliticly -unpollarded -unpolled -unpollutable -unpolluted -unpollutedly -unpolluting -unpolymerized -unpompous -unpondered -unpontifical -unpooled -unpope -unpopular -unpopularity -unpopularize -unpopularly -unpopularness -unpopulate -unpopulated -unpopulous -unpopulousness -unporous -unportable -unportended -unportentous -unportioned -unportly -unportmanteaued -unportraited -unportrayable -unportrayed -unportuous -unposed -unposing -unpositive -unpossessable -unpossessed -unpossessedness -unpossessing -unpossibility -unpossible -unpossibleness -unpossibly -unposted -unpostered -unposthumous -unpostmarked -unpostponable -unpostponed -unpostulated -unpot -unpotted -unpouched -unpoulticed -unpounced -unpounded -unpoured -unpowdered -unpower -unpowerful -unpowerfulness -unpracticability -unpracticable -unpracticableness -unpracticably -unpractical -unpracticality -unpractically -unpracticalness -unpractice -unpracticed -unpragmatical -unpraisable -unpraise -unpraised -unpraiseful -unpraiseworthy -unpranked -unpray -unprayable -unprayed -unprayerful -unpraying -unpreach -unpreached -unpreaching -unprecarious -unprecautioned -unpreceded -unprecedented -unprecedentedly -unprecedentedness -unprecedential -unprecedently -unprecious -unprecipitate -unprecipitated -unprecise -unprecisely -unpreciseness -unprecluded -unprecludible -unprecocious -unpredacious -unpredestinated -unpredestined -unpredicable -unpredicated -unpredict -unpredictable -unpredictableness -unpredictably -unpredicted -unpredictedness -unpredicting -unpredisposed -unpredisposing -unpreened -unprefaced -unpreferable -unpreferred -unprefigured -unprefined -unprefixed -unpregnant -unprejudged -unprejudicated -unprejudice -unprejudiced -unprejudicedly -unprejudicedness -unprejudiciable -unprejudicial -unprejudicially -unprejudicialness -unprelatic -unprelatical -unpreluded -unpremature -unpremeditate -unpremeditated -unpremeditatedly -unpremeditatedness -unpremeditately -unpremeditation -unpremonished -unpremonstrated -unprenominated -unprenticed -unpreoccupied -unpreordained -unpreparation -unprepare -unprepared -unpreparedly -unpreparedness -unpreparing -unpreponderated -unpreponderating -unprepossessedly -unprepossessing -unprepossessingly -unprepossessingness -unpreposterous -unpresaged -unpresageful -unpresaging -unpresbyterated -unprescient -unprescinded -unprescribed -unpresentability -unpresentable -unpresentableness -unpresentably -unpresented -unpreservable -unpreserved -unpresidential -unpresiding -unpressed -unpresumable -unpresumed -unpresuming -unpresumingness -unpresumptuous -unpresumptuously -unpresupposed -unpretended -unpretending -unpretendingly -unpretendingness -unpretentious -unpretentiously -unpretentiousness -unpretermitted -unpreternatural -unprettiness -unpretty -unprevailing -unprevalent -unprevaricating -unpreventable -unpreventableness -unpreventably -unprevented -unpreventible -unpreventive -unpriceably -unpriced -unpricked -unprickled -unprickly -unpriest -unpriestlike -unpriestly -unpriggish -unprim -unprime -unprimed -unprimitive -unprimmed -unprince -unprincelike -unprinceliness -unprincely -unprincess -unprincipal -unprinciple -unprincipled -unprincipledly -unprincipledness -unprint -unprintable -unprintableness -unprintably -unprinted -unpriority -unprismatic -unprison -unprisonable -unprisoned -unprivate -unprivileged -unprizable -unprized -unprobated -unprobationary -unprobed -unprobity -unproblematic -unproblematical -unprocessed -unproclaimed -unprocrastinated -unprocreant -unprocreated -unproctored -unprocurable -unprocurableness -unprocure -unprocured -unproded -unproduceable -unproduceableness -unproduceably -unproduced -unproducedness -unproducible -unproducibleness -unproducibly -unproductive -unproductively -unproductiveness -unproductivity -unprofanable -unprofane -unprofaned -unprofessed -unprofessing -unprofessional -unprofessionalism -unprofessionally -unprofessorial -unproffered -unproficiency -unproficient -unproficiently -unprofit -unprofitable -unprofitableness -unprofitably -unprofited -unprofiteering -unprofiting -unprofound -unprofuse -unprofusely -unprofuseness -unprognosticated -unprogressed -unprogressive -unprogressively -unprogressiveness -unprohibited -unprohibitedness -unprohibitive -unprojected -unprojecting -unproliferous -unprolific -unprolix -unprologued -unprolonged -unpromiscuous -unpromise -unpromised -unpromising -unpromisingly -unpromisingness -unpromotable -unpromoted -unprompted -unpromptly -unpromulgated -unpronounce -unpronounceable -unpronounced -unpronouncing -unproofread -unprop -unpropagated -unpropelled -unpropense -unproper -unproperly -unproperness -unpropertied -unprophesiable -unprophesied -unprophetic -unprophetical -unprophetically -unprophetlike -unpropitiable -unpropitiated -unpropitiatedness -unpropitiatory -unpropitious -unpropitiously -unpropitiousness -unproportion -unproportionable -unproportionableness -unproportionably -unproportional -unproportionality -unproportionally -unproportionate -unproportionately -unproportionateness -unproportioned -unproportionedly -unproportionedness -unproposed -unproposing -unpropounded -unpropped -unpropriety -unprorogued -unprosaic -unproscribable -unproscribed -unprosecutable -unprosecuted -unprosecuting -unproselyte -unproselyted -unprosodic -unprospected -unprospective -unprosperably -unprospered -unprosperity -unprosperous -unprosperously -unprosperousness -unprostitute -unprostituted -unprostrated -unprotectable -unprotected -unprotectedly -unprotectedness -unprotective -unprotestant -unprotestantize -unprotested -unprotesting -unprotruded -unprotruding -unprotrusive -unproud -unprovability -unprovable -unprovableness -unprovably -unproved -unprovedness -unproven -unproverbial -unprovidable -unprovide -unprovided -unprovidedly -unprovidedness -unprovidenced -unprovident -unprovidential -unprovidently -unprovincial -unproving -unprovision -unprovisioned -unprovocative -unprovokable -unprovoke -unprovoked -unprovokedly -unprovokedness -unprovoking -unproximity -unprudence -unprudent -unprudently -unpruned -unprying -unpsychic -unpsychological -unpublic -unpublicity -unpublishable -unpublishableness -unpublishably -unpublished -unpucker -unpuckered -unpuddled -unpuffed -unpuffing -unpugilistic -unpugnacious -unpulled -unpulleyed -unpulped -unpulverable -unpulverize -unpulverized -unpulvinate -unpulvinated -unpumicated -unpummeled -unpummelled -unpumpable -unpumped -unpunched -unpunctated -unpunctilious -unpunctual -unpunctuality -unpunctually -unpunctuated -unpunctuating -unpunishable -unpunishably -unpunished -unpunishedly -unpunishedness -unpunishing -unpunishingly -unpurchasable -unpurchased -unpure -unpurely -unpureness -unpurgeable -unpurged -unpurifiable -unpurified -unpurifying -unpuritan -unpurled -unpurloined -unpurpled -unpurported -unpurposed -unpurposelike -unpurposely -unpurposing -unpurse -unpursed -unpursuable -unpursued -unpursuing -unpurveyed -unpushed -unput -unputrefiable -unputrefied -unputrid -unputtied -unpuzzle -unquadded -unquaffed -unquailed -unquailing -unquailingly -unquakerlike -unquakerly -unquaking -unqualifiable -unqualification -unqualified -unqualifiedly -unqualifiedness -unqualify -unqualifying -unqualifyingly -unqualitied -unquality -unquantified -unquantitative -unquarantined -unquarreled -unquarreling -unquarrelled -unquarrelling -unquarrelsome -unquarried -unquartered -unquashed -unquayed -unqueen -unqueened -unqueening -unqueenlike -unqueenly -unquellable -unquelled -unquenchable -unquenchableness -unquenchably -unquenched -unqueried -unquested -unquestionability -unquestionable -unquestionableness -unquestionably -unquestionate -unquestioned -unquestionedly -unquestionedness -unquestioning -unquestioningly -unquestioningness -unquibbled -unquibbling -unquick -unquickened -unquickly -unquicksilvered -unquiescence -unquiescent -unquiescently -unquiet -unquietable -unquieted -unquieting -unquietly -unquietness -unquietude -unquilleted -unquilted -unquit -unquittable -unquitted -unquivered -unquivering -unquizzable -unquizzed -unquotable -unquote -unquoted -unrabbeted -unrabbinical -unraced -unrack -unracked -unracking -unradiated -unradical -unradicalize -unraffled -unraftered -unraided -unrailed -unrailroaded -unrailwayed -unrainy -unraised -unrake -unraked -unraking -unrallied -unram -unrambling -unramified -unrammed -unramped -unranched -unrancid -unrancored -unrandom -unrank -unranked -unransacked -unransomable -unransomed -unrapacious -unraped -unraptured -unrare -unrarefied -unrash -unrasped -unratable -unrated -unratified -unrational -unrattled -unravaged -unravel -unravelable -unraveled -unraveler -unraveling -unravellable -unravelled -unraveller -unravelling -unravelment -unraving -unravished -unravishing -unray -unrayed -unrazed -unrazored -unreachable -unreachably -unreached -unreactive -unread -unreadability -unreadable -unreadableness -unreadably -unreadily -unreadiness -unready -unreal -unrealism -unrealist -unrealistic -unreality -unrealizable -unrealize -unrealized -unrealizing -unreally -unrealmed -unrealness -unreaped -unreared -unreason -unreasonability -unreasonable -unreasonableness -unreasonably -unreasoned -unreasoning -unreasoningly -unreassuring -unreassuringly -unreave -unreaving -unrebated -unrebel -unrebellious -unrebuffable -unrebuffably -unrebuilt -unrebukable -unrebukably -unrebuked -unrebuttable -unrebuttableness -unrebutted -unrecallable -unrecallably -unrecalled -unrecalling -unrecantable -unrecanted -unrecaptured -unreceding -unreceipted -unreceivable -unreceived -unreceiving -unrecent -unreceptant -unreceptive -unreceptivity -unreciprocal -unreciprocated -unrecited -unrecked -unrecking -unreckingness -unreckon -unreckonable -unreckoned -unreclaimable -unreclaimably -unreclaimed -unreclaimedness -unreclaiming -unreclined -unreclining -unrecognition -unrecognizable -unrecognizableness -unrecognizably -unrecognized -unrecognizing -unrecognizingly -unrecoined -unrecollected -unrecommendable -unrecompensable -unrecompensed -unreconcilable -unreconcilableness -unreconcilably -unreconciled -unrecondite -unreconnoitered -unreconsidered -unreconstructed -unrecordable -unrecorded -unrecordedness -unrecording -unrecountable -unrecounted -unrecoverable -unrecoverableness -unrecoverably -unrecovered -unrecreant -unrecreated -unrecreating -unrecriminative -unrecruitable -unrecruited -unrectangular -unrectifiable -unrectifiably -unrectified -unrecumbent -unrecuperated -unrecurrent -unrecurring -unrecusant -unred -unredacted -unredeemable -unredeemableness -unredeemably -unredeemed -unredeemedly -unredeemedness -unredeeming -unredressable -unredressed -unreduceable -unreduced -unreducible -unreducibleness -unreducibly -unreduct -unreefed -unreel -unreelable -unreeled -unreeling -unreeve -unreeving -unreferenced -unreferred -unrefilled -unrefine -unrefined -unrefinedly -unrefinedness -unrefinement -unrefining -unrefitted -unreflected -unreflecting -unreflectingly -unreflectingness -unreflective -unreflectively -unreformable -unreformed -unreformedness -unreforming -unrefracted -unrefracting -unrefrainable -unrefrained -unrefraining -unrefreshed -unrefreshful -unrefreshing -unrefreshingly -unrefrigerated -unrefulgent -unrefunded -unrefunding -unrefusable -unrefusably -unrefused -unrefusing -unrefusingly -unrefutable -unrefuted -unrefuting -unregainable -unregained -unregal -unregaled -unregality -unregally -unregard -unregardable -unregardant -unregarded -unregardedly -unregardful -unregeneracy -unregenerate -unregenerately -unregenerateness -unregenerating -unregeneration -unregimented -unregistered -unregressive -unregretful -unregretfully -unregretfulness -unregrettable -unregretted -unregretting -unregular -unregulated -unregulative -unregurgitated -unrehabilitated -unrehearsable -unrehearsed -unrehearsing -unreigning -unreimbodied -unrein -unreined -unreinstated -unreiterable -unreiterated -unrejectable -unrejoiced -unrejoicing -unrejuvenated -unrelapsing -unrelated -unrelatedness -unrelating -unrelational -unrelative -unrelatively -unrelaxable -unrelaxed -unrelaxing -unrelaxingly -unreleasable -unreleased -unreleasing -unrelegated -unrelentance -unrelented -unrelenting -unrelentingly -unrelentingness -unrelentor -unrelevant -unreliability -unreliable -unreliableness -unreliably -unreliance -unrelievable -unrelievableness -unrelieved -unrelievedly -unreligion -unreligioned -unreligious -unreligiously -unreligiousness -unrelinquishable -unrelinquishably -unrelinquished -unrelinquishing -unrelishable -unrelished -unrelishing -unreluctant -unreluctantly -unremaining -unremanded -unremarkable -unremarked -unremarried -unremediable -unremedied -unremember -unrememberable -unremembered -unremembering -unremembrance -unreminded -unremissible -unremittable -unremitted -unremittedly -unremittent -unremittently -unremitting -unremittingly -unremittingness -unremonstrant -unremonstrated -unremonstrating -unremorseful -unremorsefully -unremote -unremotely -unremounted -unremovable -unremovableness -unremovably -unremoved -unremunerated -unremunerating -unremunerative -unremuneratively -unremunerativeness -unrenderable -unrendered -unrenewable -unrenewed -unrenounceable -unrenounced -unrenouncing -unrenovated -unrenowned -unrenownedly -unrenownedness -unrent -unrentable -unrented -unreorganized -unrepaid -unrepair -unrepairable -unrepaired -unrepartable -unreparted -unrepealability -unrepealable -unrepealableness -unrepealably -unrepealed -unrepeatable -unrepeated -unrepellable -unrepelled -unrepellent -unrepent -unrepentable -unrepentance -unrepentant -unrepentantly -unrepentantness -unrepented -unrepenting -unrepentingly -unrepentingness -unrepetitive -unrepined -unrepining -unrepiningly -unrepiqued -unreplaceable -unreplaced -unreplenished -unrepleviable -unreplevined -unrepliable -unrepliably -unreplied -unreplying -unreportable -unreported -unreportedly -unreportedness -unrepose -unreposed -unreposeful -unreposefulness -unreposing -unrepossessed -unreprehended -unrepresentable -unrepresentation -unrepresentative -unrepresented -unrepresentedness -unrepressed -unrepressible -unreprievable -unreprievably -unreprieved -unreprimanded -unreprinted -unreproachable -unreproachableness -unreproachably -unreproached -unreproachful -unreproachfully -unreproaching -unreproachingly -unreprobated -unreproducible -unreprovable -unreprovableness -unreprovably -unreproved -unreprovedly -unreprovedness -unreproving -unrepublican -unrepudiable -unrepudiated -unrepugnant -unrepulsable -unrepulsed -unrepulsing -unrepulsive -unreputable -unreputed -unrequalified -unrequested -unrequickened -unrequired -unrequisite -unrequitable -unrequital -unrequited -unrequitedly -unrequitedness -unrequitement -unrequiter -unrequiting -unrescinded -unrescued -unresemblant -unresembling -unresented -unresentful -unresenting -unreserve -unreserved -unreservedly -unreservedness -unresifted -unresigned -unresistable -unresistably -unresistance -unresistant -unresistantly -unresisted -unresistedly -unresistedness -unresistible -unresistibleness -unresistibly -unresisting -unresistingly -unresistingness -unresolute -unresolvable -unresolve -unresolved -unresolvedly -unresolvedness -unresolving -unresonant -unresounded -unresounding -unresourceful -unresourcefulness -unrespect -unrespectability -unrespectable -unrespected -unrespectful -unrespectfully -unrespectfulness -unrespective -unrespectively -unrespectiveness -unrespirable -unrespired -unrespited -unresplendent -unresponding -unresponsible -unresponsibleness -unresponsive -unresponsively -unresponsiveness -unrest -unrestable -unrested -unrestful -unrestfully -unrestfulness -unresting -unrestingly -unrestingness -unrestorable -unrestored -unrestrainable -unrestrainably -unrestrained -unrestrainedly -unrestrainedness -unrestraint -unrestrictable -unrestricted -unrestrictedly -unrestrictedness -unrestrictive -unresty -unresultive -unresumed -unresumptive -unretainable -unretained -unretaliated -unretaliating -unretardable -unretarded -unretentive -unreticent -unretinued -unretired -unretiring -unretorted -unretouched -unretractable -unretracted -unretreating -unretrenchable -unretrenched -unretrievable -unretrieved -unretrievingly -unretted -unreturnable -unreturnably -unreturned -unreturning -unreturningly -unrevealable -unrevealed -unrevealedness -unrevealing -unrevealingly -unrevelationize -unrevenged -unrevengeful -unrevengefulness -unrevenging -unrevengingly -unrevenue -unrevenued -unreverberated -unrevered -unreverence -unreverenced -unreverend -unreverendly -unreverent -unreverential -unreverently -unreverentness -unreversable -unreversed -unreversible -unreverted -unrevertible -unreverting -unrevested -unrevetted -unreviewable -unreviewed -unreviled -unrevised -unrevivable -unrevived -unrevocable -unrevocableness -unrevocably -unrevoked -unrevolted -unrevolting -unrevolutionary -unrevolutionized -unrevolved -unrevolving -unrewardable -unrewarded -unrewardedly -unrewarding -unreworded -unrhetorical -unrhetorically -unrhetoricalness -unrhyme -unrhymed -unrhythmic -unrhythmical -unrhythmically -unribbed -unribboned -unrich -unriched -unricht -unricked -unrid -unridable -unridableness -unridably -unridden -unriddle -unriddleable -unriddled -unriddler -unriddling -unride -unridely -unridered -unridged -unridiculed -unridiculous -unrife -unriffled -unrifled -unrifted -unrig -unrigged -unrigging -unright -unrightable -unrighted -unrighteous -unrighteously -unrighteousness -unrightful -unrightfully -unrightfulness -unrightly -unrightwise -unrigid -unrigorous -unrimpled -unrind -unring -unringable -unringed -unringing -unrinsed -unrioted -unrioting -unriotous -unrip -unripe -unriped -unripely -unripened -unripeness -unripening -unrippable -unripped -unripping -unrippled -unrippling -unripplingly -unrisen -unrising -unriskable -unrisked -unrisky -unritual -unritualistic -unrivalable -unrivaled -unrivaledly -unrivaledness -unrived -unriven -unrivet -unriveted -unriveting -unroaded -unroadworthy -unroaming -unroast -unroasted -unrobbed -unrobe -unrobed -unrobust -unrocked -unrococo -unrodded -unroiled -unroll -unrollable -unrolled -unroller -unrolling -unrollment -unromantic -unromantical -unromantically -unromanticalness -unromanticized -unroof -unroofed -unroofing -unroomy -unroost -unroosted -unroosting -unroot -unrooted -unrooting -unrope -unroped -unrosed -unrosined -unrostrated -unrotated -unrotating -unroted -unrotted -unrotten -unrotund -unrouged -unrough -unroughened -unround -unrounded -unrounding -unrousable -unroused -unroutable -unrouted -unrove -unroved -unroving -unrow -unrowed -unroweled -unroyal -unroyalist -unroyalized -unroyally -unroyalness -Unrra -unrubbed -unrubbish -unrubified -unrubrical -unrubricated -unruddered -unruddled -unrueful -unruffable -unruffed -unruffle -unruffled -unruffling -unrugged -unruinable -unruinated -unruined -unrulable -unrulableness -unrule -unruled -unruledly -unruledness -unruleful -unrulily -unruliness -unruly -unruminated -unruminating -unruminatingly -unrummaged -unrumored -unrumple -unrumpled -unrun -unrung -unruptured -unrural -unrushed -Unrussian -unrust -unrusted -unrustic -unrusticated -unrustling -unruth -unsabbatical -unsabered -unsabled -unsabred -unsaccharic -unsacerdotal -unsacerdotally -unsack -unsacked -unsacramental -unsacramentally -unsacramentarian -unsacred -unsacredly -unsacrificeable -unsacrificeably -unsacrificed -unsacrificial -unsacrificing -unsacrilegious -unsad -unsadden -unsaddened -unsaddle -unsaddled -unsaddling -unsafe -unsafeguarded -unsafely -unsafeness -unsafety -unsagacious -unsage -unsagging -unsaid -unsailable -unsailed -unsailorlike -unsaint -unsainted -unsaintlike -unsaintly -unsalability -unsalable -unsalableness -unsalably -unsalaried -unsalesmanlike -unsaline -unsalivated -unsallying -unsalmonlike -unsalt -unsaltable -unsaltatory -unsalted -unsalubrious -unsalutary -unsaluted -unsaluting -unsalvability -unsalvable -unsalvableness -unsalvaged -unsalved -unsampled -unsanctification -unsanctified -unsanctifiedly -unsanctifiedness -unsanctify -unsanctifying -unsanctimonious -unsanctimoniously -unsanctimoniousness -unsanction -unsanctionable -unsanctioned -unsanctioning -unsanctitude -unsanctity -unsanctuaried -unsandaled -unsanded -unsane -unsanguinary -unsanguine -unsanguinely -unsanguineness -unsanguineous -unsanguineously -unsanitariness -unsanitary -unsanitated -unsanitation -unsanity -unsaponifiable -unsaponified -unsapped -unsappy -unsarcastic -unsardonic -unsartorial -unsash -unsashed -unsatable -unsatanic -unsated -unsatedly -unsatedness -unsatiability -unsatiable -unsatiableness -unsatiably -unsatiate -unsatiated -unsatiating -unsatin -unsatire -unsatirical -unsatirically -unsatirize -unsatirized -unsatisfaction -unsatisfactorily -unsatisfactoriness -unsatisfactory -unsatisfiable -unsatisfiableness -unsatisfiably -unsatisfied -unsatisfiedly -unsatisfiedness -unsatisfying -unsatisfyingly -unsatisfyingness -unsaturable -unsaturated -unsaturatedly -unsaturatedness -unsaturation -unsatyrlike -unsauced -unsaurian -unsavable -unsaveable -unsaved -unsaving -unsavored -unsavoredly -unsavoredness -unsavorily -unsavoriness -unsavory -unsawed -unsawn -unsay -unsayability -unsayable -unscabbard -unscabbarded -unscabbed -unscaffolded -unscalable -unscalableness -unscalably -unscale -unscaled -unscaledness -unscalloped -unscaly -unscamped -unscandalize -unscandalized -unscandalous -unscannable -unscanned -unscanted -unscanty -unscarb -unscarce -unscared -unscarfed -unscarified -unscarred -unscathed -unscathedly -unscathedness -unscattered -unscavengered -unscenic -unscent -unscented -unscepter -unsceptered -unsceptical -unsceptre -unsceptred -unscheduled -unschematic -unschematized -unscholar -unscholarlike -unscholarly -unscholastic -unschool -unschooled -unschooledly -unschooledness -unscienced -unscientific -unscientifical -unscientifically -unscintillating -unscioned -unscissored -unscoffed -unscoffing -unscolded -unsconced -unscooped -unscorched -unscored -unscorified -unscoring -unscorned -unscornful -unscornfully -unscornfulness -unscotch -unscotched -unscottify -unscoured -unscourged -unscowling -unscramble -unscrambling -unscraped -unscratchable -unscratched -unscratching -unscratchingly -unscrawled -unscreen -unscreenable -unscreenably -unscreened -unscrew -unscrewable -unscrewed -unscrewing -unscribal -unscribbled -unscribed -unscrimped -unscriptural -unscripturally -unscripturalness -unscrubbed -unscrupled -unscrupulosity -unscrupulous -unscrupulously -unscrupulousness -unscrutable -unscrutinized -unscrutinizing -unscrutinizingly -unsculptural -unsculptured -unscummed -unscutcheoned -unseafaring -unseal -unsealable -unsealed -unsealer -unsealing -unseam -unseamanlike -unseamanship -unseamed -unseaming -unsearchable -unsearchableness -unsearchably -unsearched -unsearcherlike -unsearching -unseared -unseason -unseasonable -unseasonableness -unseasonably -unseasoned -unseat -unseated -unseaworthiness -unseaworthy -unseceding -unsecluded -unseclusive -unseconded -unsecrecy -unsecret -unsecretarylike -unsecreted -unsecreting -unsecretly -unsecretness -unsectarian -unsectarianism -unsectarianize -unsectional -unsecular -unsecularize -unsecularized -unsecure -unsecured -unsecuredly -unsecuredness -unsecurely -unsecureness -unsecurity -unsedate -unsedentary -unseditious -unseduce -unseduced -unseducible -unseductive -unsedulous -unsee -unseeable -unseeded -unseeing -unseeingly -unseeking -unseeming -unseemingly -unseemlily -unseemliness -unseemly -unseen -unseethed -unsegmented -unsegregable -unsegregated -unsegregatedness -unseignorial -unseismic -unseizable -unseized -unseldom -unselect -unselected -unselecting -unselective -unself -unselfish -unselfishly -unselfishness -unselflike -unselfness -unselling -unsenatorial -unsenescent -unsensational -unsense -unsensed -unsensibility -unsensible -unsensibleness -unsensibly -unsensitive -unsensitize -unsensitized -unsensory -unsensual -unsensualize -unsensualized -unsensually -unsensuous -unsensuousness -unsent -unsentenced -unsententious -unsentient -unsentimental -unsentimentalist -unsentimentality -unsentimentalize -unsentimentally -unsentineled -unsentinelled -unseparable -unseparableness -unseparably -unseparate -unseparated -unseptate -unseptated -unsepulcher -unsepulchered -unsepulchral -unsepulchre -unsepulchred -unsepultured -unsequenced -unsequential -unsequestered -unseraphical -unserenaded -unserene -unserflike -unserious -unseriousness -unserrated -unserried -unservable -unserved -unserviceability -unserviceable -unserviceableness -unserviceably -unservicelike -unservile -unsesquipedalian -unset -unsetting -unsettle -unsettleable -unsettled -unsettledness -unsettlement -unsettling -unseverable -unseverableness -unsevere -unsevered -unseveredly -unseveredness -unsew -unsewed -unsewered -unsewing -unsewn -unsex -unsexed -unsexing -unsexlike -unsexual -unshackle -unshackled -unshackling -unshade -unshaded -unshadow -unshadowable -unshadowed -unshady -unshafted -unshakable -unshakably -unshakeable -unshakeably -unshaken -unshakenly -unshakenness -unshaking -unshakingness -unshaled -unshamable -unshamableness -unshamably -unshameable -unshameableness -unshameably -unshamed -unshamefaced -unshamefacedness -unshameful -unshamefully -unshamefulness -unshammed -unshanked -unshapable -unshape -unshapeable -unshaped -unshapedness -unshapeliness -unshapely -unshapen -unshapenly -unshapenness -unsharable -unshared -unsharedness -unsharing -unsharp -unsharped -unsharpen -unsharpened -unsharpening -unsharping -unshattered -unshavable -unshaveable -unshaved -unshavedly -unshavedness -unshaven -unshavenly -unshavenness -unshawl -unsheaf -unsheared -unsheathe -unsheathed -unsheathing -unshed -unsheet -unsheeted -unsheeting -unshell -unshelled -unshelling -unshelterable -unsheltered -unsheltering -unshelve -unshepherded -unshepherding -unsheriff -unshewed -unshieldable -unshielded -unshielding -unshiftable -unshifted -unshiftiness -unshifting -unshifty -unshimmering -unshingled -unshining -unship -unshiplike -unshipment -unshipped -unshipping -unshipshape -unshipwrecked -unshirking -unshirted -unshivered -unshivering -unshockable -unshocked -unshod -unshodden -unshoe -unshoed -unshoeing -unshop -unshore -unshored -unshorn -unshort -unshortened -unshot -unshotted -unshoulder -unshouted -unshouting -unshoved -unshoveled -unshowable -unshowed -unshowmanlike -unshown -unshowy -unshredded -unshrew -unshrewd -unshrewish -unshrill -unshrine -unshrined -unshrinement -unshrink -unshrinkability -unshrinkable -unshrinking -unshrinkingly -unshrived -unshriveled -unshrivelled -unshriven -unshroud -unshrouded -unshrubbed -unshrugging -unshrunk -unshrunken -unshuddering -unshuffle -unshuffled -unshunnable -unshunned -unshunted -unshut -unshutter -unshuttered -unshy -unshyly -unshyness -unsibilant -unsiccated -unsick -unsickened -unsicker -unsickerly -unsickerness -unsickled -unsickly -unsided -unsiding -unsiege -unsifted -unsighing -unsight -unsightable -unsighted -unsighting -unsightliness -unsightly -unsigmatic -unsignable -unsignaled -unsignalized -unsignalled -unsignatured -unsigned -unsigneted -unsignificancy -unsignificant -unsignificantly -unsignificative -unsignified -unsignifying -unsilenceable -unsilenceably -unsilenced -unsilent -unsilentious -unsilently -unsilicified -unsilly -unsilvered -unsimilar -unsimilarity -unsimilarly -unsimple -unsimplicity -unsimplified -unsimplify -unsimulated -unsimultaneous -unsin -unsincere -unsincerely -unsincereness -unsincerity -unsinew -unsinewed -unsinewing -unsinewy -unsinful -unsinfully -unsinfulness -unsing -unsingability -unsingable -unsingableness -unsinged -unsingle -unsingled -unsingleness -unsingular -unsinister -unsinkability -unsinkable -unsinking -unsinnable -unsinning -unsinningness -unsiphon -unsipped -unsister -unsistered -unsisterliness -unsisterly -unsizable -unsizableness -unsizeable -unsizeableness -unsized -unskaithd -unskeptical -unsketchable -unsketched -unskewed -unskewered -unskilful -unskilfully -unskilled -unskilledly -unskilledness -unskillful -unskillfully -unskillfulness -unskimmed -unskin -unskinned -unskirted -unslack -unslacked -unslackened -unslackening -unslacking -unslagged -unslain -unslakable -unslakeable -unslaked -unslammed -unslandered -unslanderous -unslapped -unslashed -unslate -unslated -unslating -unslaughtered -unslave -unslayable -unsleaved -unsleek -unsleepably -unsleeping -unsleepingly -unsleepy -unsleeve -unsleeved -unslender -unslept -unsliced -unsliding -unslighted -unsling -unslip -unslipped -unslippery -unslipping -unslit -unslockened -unsloped -unslopped -unslot -unslothful -unslothfully -unslothfulness -unslotted -unsloughed -unsloughing -unslow -unsluggish -unsluice -unsluiced -unslumbering -unslumberous -unslumbrous -unslung -unslurred -unsly -unsmacked -unsmart -unsmartly -unsmartness -unsmeared -unsmelled -unsmelling -unsmelted -unsmiled -unsmiling -unsmilingly -unsmilingness -unsmirched -unsmirking -unsmitten -unsmokable -unsmokeable -unsmoked -unsmokified -unsmoking -unsmoky -unsmooth -unsmoothed -unsmoothly -unsmoothness -unsmote -unsmotherable -unsmothered -unsmudged -unsmuggled -unsmutched -unsmutted -unsmutty -unsnaffled -unsnagged -unsnaggled -unsnaky -unsnap -unsnapped -unsnare -unsnared -unsnarl -unsnatch -unsnatched -unsneck -unsneering -unsnib -unsnipped -unsnobbish -unsnoring -unsnouted -unsnow -unsnubbable -unsnubbed -unsnuffed -unsoaked -unsoaped -unsoarable -unsober -unsoberly -unsoberness -unsobriety -unsociability -unsociable -unsociableness -unsociably -unsocial -unsocialism -unsocialistic -unsociality -unsocializable -unsocialized -unsocially -unsocialness -unsociological -unsocket -unsodden -unsoft -unsoftened -unsoftening -unsoggy -unsoil -unsoiled -unsoiledness -unsolaced -unsolacing -unsolar -unsold -unsolder -unsoldered -unsoldering -unsoldier -unsoldiered -unsoldierlike -unsoldierly -unsole -unsoled -unsolemn -unsolemness -unsolemnize -unsolemnized -unsolemnly -unsolicitated -unsolicited -unsolicitedly -unsolicitous -unsolicitously -unsolicitousness -unsolid -unsolidarity -unsolidifiable -unsolidified -unsolidity -unsolidly -unsolidness -unsolitary -unsolubility -unsoluble -unsolvable -unsolvableness -unsolvably -unsolved -unsomatic -unsomber -unsombre -unsome -unson -unsonable -unsonant -unsonlike -unsonneted -unsonorous -unsonsy -unsoothable -unsoothed -unsoothfast -unsoothing -unsooty -unsophistical -unsophistically -unsophisticate -unsophisticated -unsophisticatedly -unsophisticatedness -unsophistication -unsophomoric -unsordid -unsore -unsorrowed -unsorrowing -unsorry -unsort -unsortable -unsorted -unsorting -unsotted -unsought -unsoul -unsoulful -unsoulfully -unsoulish -unsound -unsoundable -unsoundableness -unsounded -unsounding -unsoundly -unsoundness -unsour -unsoured -unsoused -unsovereign -unsowed -unsown -unspaced -unspacious -unspaded -unspan -unspangled -unspanked -unspanned -unspar -unsparable -unspared -unsparing -unsparingly -unsparingness -unsparkling -unsparred -unsparse -unspatial -unspatiality -unspattered -unspawned -unspayed -unspeak -unspeakability -unspeakable -unspeakableness -unspeakably -unspeaking -unspeared -unspecialized -unspecializing -unspecific -unspecified -unspecifiedly -unspecious -unspecked -unspeckled -unspectacled -unspectacular -unspectacularly -unspecterlike -unspectrelike -unspeculating -unspeculative -unspeculatively -unsped -unspeed -unspeedy -unspeered -unspell -unspellable -unspelled -unspelt -unspendable -unspending -unspent -unspewed -unsphere -unsphered -unsphering -unspiable -unspiced -unspicy -unspied -unspike -unspillable -unspin -unspinsterlike -unspinsterlikeness -unspiral -unspired -unspirit -unspirited -unspiritedly -unspiriting -unspiritual -unspirituality -unspiritualize -unspiritualized -unspiritually -unspiritualness -unspissated -unspit -unspited -unspiteful -unspitted -unsplashed -unsplattered -unsplayed -unspleened -unspleenish -unspleenishly -unsplendid -unspliced -unsplinted -unsplintered -unsplit -unspoil -unspoilable -unspoilableness -unspoilably -unspoiled -unspoken -unspokenly -unsponged -unspongy -unsponsored -unspontaneous -unspontaneously -unspookish -unsported -unsportful -unsporting -unsportive -unsportsmanlike -unsportsmanly -unspot -unspotlighted -unspottable -unspotted -unspottedly -unspottedness -unspoused -unspouselike -unspouted -unsprained -unsprayed -unspread -unsprightliness -unsprightly -unspring -unspringing -unspringlike -unsprinkled -unsprinklered -unsprouted -unsproutful -unsprouting -unspruced -unsprung -unspun -unspurned -unspurred -unspying -unsquandered -unsquarable -unsquare -unsquared -unsquashed -unsqueamish -unsqueezable -unsqueezed -unsquelched -unsquinting -unsquire -unsquired -unsquirelike -unsquirted -unstabbed -unstability -unstable -unstabled -unstableness -unstablished -unstably -unstack -unstacked -unstacker -unstaffed -unstaged -unstaggered -unstaggering -unstagnating -unstagy -unstaid -unstaidly -unstaidness -unstain -unstainable -unstainableness -unstained -unstainedly -unstainedness -unstaled -unstalked -unstalled -unstammering -unstamped -unstampeded -unstanch -unstanchable -unstandard -unstandardized -unstanzaic -unstar -unstarch -unstarched -unstarlike -unstarred -unstarted -unstarting -unstartled -unstarved -unstatable -unstate -unstateable -unstated -unstately -unstatesmanlike -unstatic -unstating -unstation -unstationary -unstationed -unstatistic -unstatistical -unstatued -unstatuesque -unstatutable -unstatutably -unstaunch -unstaunchable -unstaunched -unstavable -unstaveable -unstaved -unstayable -unstayed -unstayedness -unstaying -unsteadfast -unsteadfastly -unsteadfastness -unsteadied -unsteadily -unsteadiness -unsteady -unsteadying -unstealthy -unsteamed -unsteaming -unsteck -unstecked -unsteel -unsteeled -unsteep -unsteeped -unsteepled -unsteered -unstemmable -unstemmed -unstentorian -unstep -unstercorated -unstereotyped -unsterile -unsterilized -unstern -unstethoscoped -unstewardlike -unstewed -unstick -unsticking -unstickingness -unsticky -unstiffen -unstiffened -unstifled -unstigmatized -unstill -unstilled -unstillness -unstilted -unstimulated -unstimulating -unsting -unstinged -unstinging -unstinted -unstintedly -unstinting -unstintingly -unstippled -unstipulated -unstirrable -unstirred -unstirring -unstitch -unstitched -unstitching -unstock -unstocked -unstocking -unstockinged -unstoic -unstoical -unstoically -unstoicize -unstoked -unstoken -unstolen -unstonable -unstone -unstoned -unstoniness -unstony -unstooping -unstop -unstoppable -unstopped -unstopper -unstoppered -unstopple -unstore -unstored -unstoried -unstormed -unstormy -unstout -unstoved -unstow -unstowed -unstraddled -unstrafed -unstraight -unstraightened -unstraightforward -unstraightness -unstrain -unstrained -unstraitened -unstrand -unstranded -unstrange -unstrangered -unstrangled -unstrangulable -unstrap -unstrapped -unstrategic -unstrategically -unstratified -unstraying -unstreaked -unstrength -unstrengthen -unstrengthened -unstrenuous -unstressed -unstressedly -unstressedness -unstretch -unstretched -unstrewed -unstrewn -unstriated -unstricken -unstrictured -unstridulous -unstrike -unstriking -unstring -unstringed -unstringing -unstrip -unstriped -unstripped -unstriving -unstroked -unstrong -unstructural -unstruggling -unstrung -unstubbed -unstubborn -unstuccoed -unstuck -unstudded -unstudied -unstudious -unstuff -unstuffed -unstuffing -unstultified -unstumbling -unstung -unstunned -unstunted -unstupefied -unstupid -unstuttered -unstuttering -unsty -unstyled -unstylish -unstylishly -unstylishness -unsubdivided -unsubduable -unsubduableness -unsubduably -unsubducted -unsubdued -unsubduedly -unsubduedness -unsubject -unsubjectable -unsubjected -unsubjectedness -unsubjection -unsubjective -unsubjectlike -unsubjugate -unsubjugated -unsublimable -unsublimated -unsublimed -unsubmerged -unsubmergible -unsubmerging -unsubmission -unsubmissive -unsubmissively -unsubmissiveness -unsubmitted -unsubmitting -unsubordinate -unsubordinated -unsuborned -unsubpoenaed -unsubscribed -unsubscribing -unsubservient -unsubsided -unsubsidiary -unsubsiding -unsubsidized -unsubstanced -unsubstantial -unsubstantiality -unsubstantialize -unsubstantially -unsubstantialness -unsubstantiate -unsubstantiated -unsubstantiation -unsubstituted -unsubtle -unsubtleness -unsubtlety -unsubtly -unsubtracted -unsubventioned -unsubventionized -unsubversive -unsubvertable -unsubverted -unsubvertive -unsucceedable -unsucceeded -unsucceeding -unsuccess -unsuccessful -unsuccessfully -unsuccessfulness -unsuccessive -unsuccessively -unsuccessiveness -unsuccinct -unsuccorable -unsuccored -unsucculent -unsuccumbing -unsucked -unsuckled -unsued -unsufferable -unsufferableness -unsufferably -unsuffered -unsuffering -unsufficed -unsufficience -unsufficiency -unsufficient -unsufficiently -unsufficing -unsufficingness -unsufflated -unsuffocate -unsuffocated -unsuffocative -unsuffused -unsugared -unsugary -unsuggested -unsuggestedness -unsuggestive -unsuggestiveness -unsuit -unsuitability -unsuitable -unsuitableness -unsuitably -unsuited -unsuiting -unsulky -unsullen -unsulliable -unsullied -unsulliedly -unsulliedness -unsulphonated -unsulphureous -unsulphurized -unsultry -unsummable -unsummarized -unsummed -unsummered -unsummerlike -unsummerly -unsummonable -unsummoned -unsumptuary -unsumptuous -unsun -unsunburned -unsundered -unsung -unsunk -unsunken -unsunned -unsunny -unsuperable -unsuperannuated -unsupercilious -unsuperficial -unsuperfluous -unsuperior -unsuperlative -unsupernatural -unsupernaturalize -unsupernaturalized -unsuperscribed -unsuperseded -unsuperstitious -unsupervised -unsupervisedly -unsupped -unsupplantable -unsupplanted -unsupple -unsuppled -unsupplemented -unsuppliable -unsupplicated -unsupplied -unsupportable -unsupportableness -unsupportably -unsupported -unsupportedly -unsupportedness -unsupporting -unsupposable -unsupposed -unsuppressed -unsuppressible -unsuppressibly -unsuppurated -unsuppurative -unsupreme -unsurcharge -unsurcharged -unsure -unsurfaced -unsurfeited -unsurfeiting -unsurgical -unsurging -unsurmised -unsurmising -unsurmountable -unsurmountableness -unsurmountably -unsurmounted -unsurnamed -unsurpassable -unsurpassableness -unsurpassably -unsurpassed -unsurplice -unsurpliced -unsurprised -unsurprising -unsurrendered -unsurrendering -unsurrounded -unsurveyable -unsurveyed -unsurvived -unsurviving -unsusceptibility -unsusceptible -unsusceptibleness -unsusceptibly -unsusceptive -unsuspectable -unsuspectably -unsuspected -unsuspectedly -unsuspectedness -unsuspectful -unsuspectfulness -unsuspectible -unsuspecting -unsuspectingly -unsuspectingness -unsuspective -unsuspended -unsuspicion -unsuspicious -unsuspiciously -unsuspiciousness -unsustainable -unsustained -unsustaining -unsutured -unswabbed -unswaddle -unswaddled -unswaddling -unswallowable -unswallowed -unswanlike -unswapped -unswarming -unswathable -unswathe -unswathed -unswathing -unswayable -unswayed -unswayedness -unswaying -unswear -unswearing -unsweat -unsweated -unsweating -unsweepable -unsweet -unsweeten -unsweetened -unsweetenedness -unsweetly -unsweetness -unswell -unswelled -unswelling -unsweltered -unswept -unswervable -unswerved -unswerving -unswervingly -unswilled -unswing -unswingled -unswitched -unswivel -unswollen -unswooning -unsworn -unswung -unsyllabic -unsyllabled -unsyllogistical -unsymbolic -unsymbolical -unsymbolically -unsymbolicalness -unsymbolized -unsymmetrical -unsymmetrically -unsymmetricalness -unsymmetrized -unsymmetry -unsympathetic -unsympathetically -unsympathizability -unsympathizable -unsympathized -unsympathizing -unsympathizingly -unsympathy -unsymphonious -unsymptomatic -unsynchronized -unsynchronous -unsyncopated -unsyndicated -unsynonymous -unsyntactical -unsynthetic -unsyringed -unsystematic -unsystematical -unsystematically -unsystematized -unsystematizedly -unsystematizing -unsystemizable -untabernacled -untabled -untabulated -untack -untacked -untacking -untackle -untackled -untactful -untactfully -untactfulness -untagged -untailed -untailorlike -untailorly -untaint -untaintable -untainted -untaintedly -untaintedness -untainting -untakable -untakableness -untakeable -untakeableness -untaken -untaking -untalented -untalkative -untalked -untalking -untall -untallied -untallowed -untamable -untamableness -untame -untamed -untamedly -untamedness -untamely -untameness -untampered -untangential -untangibility -untangible -untangibleness -untangibly -untangle -untangled -untangling -untanned -untantalized -untantalizing -untap -untaped -untapered -untapering -untapestried -untappable -untapped -untar -untarnishable -untarnished -untarred -untarried -untarrying -untartarized -untasked -untasseled -untastable -untaste -untasteable -untasted -untasteful -untastefully -untastefulness -untasting -untasty -untattered -untattooed -untaught -untaughtness -untaunted -untaut -untautological -untawdry -untawed -untax -untaxable -untaxed -untaxing -unteach -unteachable -unteachableness -unteachably -unteacherlike -unteaching -unteam -unteamed -unteaming -untearable -unteased -unteasled -untechnical -untechnicalize -untechnically -untedded -untedious -unteem -unteeming -unteethed -untelegraphed -untell -untellable -untellably -untelling -untemper -untemperamental -untemperate -untemperately -untemperateness -untempered -untempering -untempested -untempestuous -untempled -untemporal -untemporary -untemporizing -untemptability -untemptable -untemptably -untempted -untemptible -untemptibly -untempting -untemptingly -untemptingness -untenability -untenable -untenableness -untenably -untenacious -untenacity -untenant -untenantable -untenantableness -untenanted -untended -untender -untendered -untenderly -untenderness -untenible -untenibleness -untenibly -untense -untent -untentaculate -untented -untentered -untenty -unterminable -unterminableness -unterminably -unterminated -unterminating -unterraced -unterrestrial -unterrible -unterribly -unterrifiable -unterrific -unterrified -unterrifying -unterrorized -untessellated -untestable -untestamentary -untested -untestifying -untether -untethered -untethering -untewed -untextual -unthank -unthanked -unthankful -unthankfully -unthankfulness -unthanking -unthatch -unthatched -unthaw -unthawed -unthawing -untheatric -untheatrical -untheatrically -untheistic -unthematic -untheological -untheologically -untheologize -untheoretic -untheoretical -untheorizable -untherapeutical -unthick -unthicken -unthickened -unthievish -unthink -unthinkability -unthinkable -unthinkableness -unthinkably -unthinker -unthinking -unthinkingly -unthinkingness -unthinned -unthinning -unthirsting -unthirsty -unthistle -untholeable -untholeably -unthorn -unthorny -unthorough -unthought -unthoughted -unthoughtedly -unthoughtful -unthoughtfully -unthoughtfulness -unthoughtlike -unthrall -unthralled -unthrashed -unthread -unthreadable -unthreaded -unthreading -unthreatened -unthreatening -unthreshed -unthrid -unthridden -unthrift -unthriftihood -unthriftily -unthriftiness -unthriftlike -unthrifty -unthrilled -unthrilling -unthriven -unthriving -unthrivingly -unthrivingness -unthrob -unthrone -unthroned -unthronged -unthroning -unthrottled -unthrowable -unthrown -unthrushlike -unthrust -unthumbed -unthumped -unthundered -unthwacked -unthwarted -untiaraed -unticketed -untickled -untidal -untidily -untidiness -untidy -untie -untied -untight -untighten -untightness -until -untile -untiled -untill -untillable -untilled -untilling -untilt -untilted -untilting -untimbered -untimed -untimedness -untimeliness -untimely -untimeous -untimeously -untimesome -untimorous -untin -untinct -untinctured -untine -untinged -untinkered -untinned -untinseled -untinted -untippable -untipped -untippled -untipt -untirability -untirable -untire -untired -untiredly -untiring -untiringly -untissued -untithability -untithable -untithed -untitled -untittering -untitular -unto -untoadying -untoasted -untogaed -untoggle -untoggler -untoiled -untoileted -untoiling -untold -untolerable -untolerableness -untolerably -untolerated -untomb -untombed -untonality -untone -untoned -untongued -untonsured -untooled -untooth -untoothed -untoothsome -untoothsomeness -untop -untopographical -untopped -untopping -untormented -untorn -untorpedoed -untorpid -untorrid -untortuous -untorture -untortured -untossed -untotaled -untotalled -untottering -untouch -untouchability -untouchable -untouchableness -untouchably -untouched -untouchedness -untouching -untough -untoured -untouristed -untoward -untowardliness -untowardly -untowardness -untowered -untown -untownlike -untrace -untraceable -untraceableness -untraceably -untraced -untraceried -untracked -untractability -untractable -untractableness -untractably -untractarian -untractible -untractibleness -untradeable -untraded -untradesmanlike -untrading -untraditional -untraduced -untraffickable -untrafficked -untragic -untragical -untrailed -untrain -untrainable -untrained -untrainedly -untrainedness -untraitored -untraitorous -untrammed -untrammeled -untrammeledness -untramped -untrampled -untrance -untranquil -untranquilized -untranquillize -untranquillized -untransacted -untranscended -untranscendental -untranscribable -untranscribed -untransferable -untransferred -untransfigured -untransfixed -untransformable -untransformed -untransforming -untransfused -untransfusible -untransgressed -untransient -untransitable -untransitive -untransitory -untranslatability -untranslatable -untranslatableness -untranslatably -untranslated -untransmigrated -untransmissible -untransmitted -untransmutable -untransmuted -untransparent -untranspassable -untranspired -untranspiring -untransplanted -untransportable -untransported -untransposed -untransubstantiated -untrappable -untrapped -untrashed -untravelable -untraveled -untraveling -untravellable -untravelling -untraversable -untraversed -untravestied -untreacherous -untread -untreadable -untreading -untreasonable -untreasure -untreasured -untreatable -untreatableness -untreatably -untreated -untreed -untrekked -untrellised -untrembling -untremblingly -untremendous -untremulous -untrenched -untrepanned -untrespassed -untrespassing -untress -untressed -untriable -untribal -untributary -untriced -untrickable -untricked -untried -untrifling -untrig -untrigonometrical -untrill -untrim -untrimmable -untrimmed -untrimmedness -untrinitarian -untripe -untrippable -untripped -untripping -untrite -untriturated -untriumphable -untriumphant -untriumphed -untrochaic -untrod -untrodden -untroddenness -untrolled -untrophied -untropical -untrotted -untroublable -untrouble -untroubled -untroubledly -untroubledness -untroublesome -untroublesomeness -untrounced -untrowed -untruant -untruck -untruckled -untruckling -untrue -untrueness -untruism -untruly -untrumped -untrumpeted -untrumping -untrundled -untrunked -untruss -untrussed -untrusser -untrussing -untrust -untrustably -untrusted -untrustful -untrustiness -untrusting -untrustworthily -untrustworthiness -untrustworthy -untrusty -untruth -untruther -untruthful -untruthfully -untruthfulness -untrying -untubbed -untuck -untucked -untuckered -untucking -untufted -untugged -untumbled -untumefied -untumid -untumultuous -untunable -untunableness -untunably -untune -untuneable -untuneableness -untuneably -untuned -untuneful -untunefully -untunefulness -untuning -untunneled -untupped -unturbaned -unturbid -unturbulent -unturf -unturfed -unturgid -unturn -unturnable -unturned -unturning -unturpentined -unturreted -untusked -untutelar -untutored -untutoredly -untutoredness -untwilled -untwinable -untwine -untwineable -untwined -untwining -untwinkling -untwinned -untwirl -untwirled -untwirling -untwist -untwisted -untwister -untwisting -untwitched -untying -untypical -untypically -untyrannic -untyrannical -untyrantlike -untz -unubiquitous -unugly -unulcerated -unultra -unumpired -ununanimity -ununanimous -ununanimously -ununderstandable -ununderstandably -ununderstanding -ununderstood -unundertaken -unundulatory -Unungun -ununifiable -ununified -ununiform -ununiformed -ununiformity -ununiformly -ununiformness -ununitable -ununitableness -ununitably -ununited -ununiting -ununiversity -ununiversitylike -unupbraiding -unupbraidingly -unupholstered -unupright -unuprightly -unuprightness -unupset -unupsettable -unurban -unurbane -unurged -unurgent -unurging -unurn -unurned -unusable -unusableness -unusably -unuse -unused -unusedness -unuseful -unusefully -unusefulness -unushered -unusual -unusuality -unusually -unusualness -unusurious -unusurped -unusurping -unutilizable -unutterability -unutterable -unutterableness -unutterably -unuttered -unuxorial -unuxorious -unvacant -unvaccinated -unvacillating -unvailable -unvain -unvaleted -unvaletudinary -unvaliant -unvalid -unvalidated -unvalidating -unvalidity -unvalidly -unvalidness -unvalorous -unvaluable -unvaluableness -unvaluably -unvalue -unvalued -unvamped -unvanishing -unvanquishable -unvanquished -unvantaged -unvaporized -unvariable -unvariableness -unvariably -unvariant -unvaried -unvariedly -unvariegated -unvarnished -unvarnishedly -unvarnishedness -unvarying -unvaryingly -unvaryingness -unvascular -unvassal -unvatted -unvaulted -unvaulting -unvaunted -unvaunting -unvauntingly -unveering -unveil -unveiled -unveiledly -unveiledness -unveiler -unveiling -unveilment -unveined -unvelvety -unvendable -unvendableness -unvended -unvendible -unvendibleness -unveneered -unvenerable -unvenerated -unvenereal -unvenged -unveniable -unvenial -unvenom -unvenomed -unvenomous -unventable -unvented -unventilated -unventured -unventurous -unvenued -unveracious -unveracity -unverbalized -unverdant -unverdured -unveridical -unverifiable -unverifiableness -unverifiably -unverified -unverifiedness -unveritable -unverity -unvermiculated -unverminous -unvernicular -unversatile -unversed -unversedly -unversedness -unversified -unvertical -unvessel -unvesseled -unvest -unvested -unvetoed -unvexed -unviable -unvibrated -unvibrating -unvicar -unvicarious -unvicariously -unvicious -unvictimized -unvictorious -unvictualed -unvictualled -unviewable -unviewed -unvigilant -unvigorous -unvigorously -unvilified -unvillaged -unvindicated -unvindictive -unvindictively -unvindictiveness -unvinous -unvintaged -unviolable -unviolated -unviolenced -unviolent -unviolined -unvirgin -unvirginal -unvirginlike -unvirile -unvirility -unvirtue -unvirtuous -unvirtuously -unvirtuousness -unvirulent -unvisible -unvisibleness -unvisibly -unvision -unvisionary -unvisioned -unvisitable -unvisited -unvisor -unvisored -unvisualized -unvital -unvitalized -unvitalness -unvitiated -unvitiatedly -unvitiatedness -unvitrescibility -unvitrescible -unvitrifiable -unvitrified -unvitriolized -unvituperated -unvivacious -unvivid -unvivified -unvizard -unvizarded -unvocal -unvocalized -unvociferous -unvoice -unvoiced -unvoiceful -unvoicing -unvoidable -unvoided -unvolatile -unvolatilize -unvolatilized -unvolcanic -unvolitioned -unvoluminous -unvoluntarily -unvoluntariness -unvoluntary -unvolunteering -unvoluptuous -unvomited -unvoracious -unvote -unvoted -unvoting -unvouched -unvouchedly -unvouchedness -unvouchsafed -unvowed -unvoweled -unvoyageable -unvoyaging -unvulcanized -unvulgar -unvulgarize -unvulgarized -unvulgarly -unvulnerable -unwadable -unwadded -unwadeable -unwaded -unwading -unwafted -unwaged -unwagered -unwaggable -unwaggably -unwagged -unwailed -unwailing -unwainscoted -unwaited -unwaiting -unwaked -unwakeful -unwakefulness -unwakened -unwakening -unwaking -unwalkable -unwalked -unwalking -unwall -unwalled -unwallet -unwallowed -unwan -unwandered -unwandering -unwaning -unwanted -unwanton -unwarbled -unware -unwarely -unwareness -unwarily -unwariness -unwarlike -unwarlikeness -unwarm -unwarmable -unwarmed -unwarming -unwarn -unwarned -unwarnedly -unwarnedness -unwarnished -unwarp -unwarpable -unwarped -unwarping -unwarrant -unwarrantability -unwarrantable -unwarrantableness -unwarrantably -unwarranted -unwarrantedly -unwarrantedness -unwary -unwashable -unwashed -unwashedness -unwassailing -unwastable -unwasted -unwasteful -unwastefully -unwasting -unwastingly -unwatchable -unwatched -unwatchful -unwatchfully -unwatchfulness -unwatching -unwater -unwatered -unwaterlike -unwatermarked -unwatery -unwattled -unwaved -unwaverable -unwavered -unwavering -unwaveringly -unwaving -unwax -unwaxed -unwayed -unwayward -unweaken -unweakened -unweal -unwealsomeness -unwealthy -unweaned -unweapon -unweaponed -unwearable -unweariability -unweariable -unweariableness -unweariably -unwearied -unweariedly -unweariedness -unwearily -unweariness -unwearing -unwearisome -unwearisomeness -unweary -unwearying -unwearyingly -unweathered -unweatherly -unweatherwise -unweave -unweaving -unweb -unwebbed -unwebbing -unwed -unwedded -unweddedly -unweddedness -unwedge -unwedgeable -unwedged -unweeded -unweel -unweelness -unweened -unweeping -unweeting -unweetingly -unweft -unweighable -unweighed -unweighing -unweight -unweighted -unweighty -unwelcome -unwelcomed -unwelcomely -unwelcomeness -unweld -unweldable -unwelded -unwell -unwellness -unwelted -unwept -unwestern -unwesternized -unwet -unwettable -unwetted -unwheedled -unwheel -unwheeled -unwhelmed -unwhelped -unwhetted -unwhig -unwhiglike -unwhimsical -unwhining -unwhip -unwhipped -unwhirled -unwhisked -unwhiskered -unwhisperable -unwhispered -unwhispering -unwhistled -unwhite -unwhited -unwhitened -unwhitewashed -unwholesome -unwholesomely -unwholesomeness -unwidened -unwidowed -unwield -unwieldable -unwieldily -unwieldiness -unwieldly -unwieldy -unwifed -unwifelike -unwifely -unwig -unwigged -unwild -unwilily -unwiliness -unwill -unwilled -unwillful -unwillfully -unwillfulness -unwilling -unwillingly -unwillingness -unwilted -unwilting -unwily -unwincing -unwincingly -unwind -unwindable -unwinding -unwindingly -unwindowed -unwindy -unwingable -unwinged -unwinking -unwinkingly -unwinnable -unwinning -unwinnowed -unwinsome -unwinter -unwintry -unwiped -unwire -unwired -unwisdom -unwise -unwisely -unwiseness -unwish -unwished -unwishful -unwishing -unwist -unwistful -unwitch -unwitched -unwithdrawable -unwithdrawing -unwithdrawn -unwitherable -unwithered -unwithering -unwithheld -unwithholden -unwithholding -unwithstanding -unwithstood -unwitless -unwitnessed -unwitted -unwittily -unwitting -unwittingly -unwittingness -unwitty -unwive -unwived -unwoeful -unwoful -unwoman -unwomanish -unwomanize -unwomanized -unwomanlike -unwomanliness -unwomanly -unwomb -unwon -unwonder -unwonderful -unwondering -unwonted -unwontedly -unwontedness -unwooded -unwooed -unwoof -unwooly -unwordable -unwordably -unwordily -unwordy -unwork -unworkability -unworkable -unworkableness -unworkably -unworked -unworkedness -unworker -unworking -unworkmanlike -unworkmanly -unworld -unworldliness -unworldly -unwormed -unwormy -unworn -unworried -unworriedly -unworriedness -unworshiped -unworshipful -unworshiping -unworshipped -unworshipping -unworth -unworthily -unworthiness -unworthy -unwotting -unwound -unwoundable -unwoundableness -unwounded -unwoven -unwrangling -unwrap -unwrapped -unwrapper -unwrapping -unwrathful -unwrathfully -unwreaked -unwreathe -unwreathed -unwreathing -unwrecked -unwrench -unwrenched -unwrested -unwrestedly -unwresting -unwrestled -unwretched -unwriggled -unwrinkle -unwrinkleable -unwrinkled -unwrit -unwritable -unwrite -unwriting -unwritten -unwronged -unwrongful -unwrought -unwrung -unyachtsmanlike -unyeaned -unyearned -unyearning -unyielded -unyielding -unyieldingly -unyieldingness -unyoke -unyoked -unyoking -unyoung -unyouthful -unyouthfully -unze -unzealous -unzealously -unzealousness -unzen -unzephyrlike -unzone -unzoned -up -upaisle -upaithric -upalley -upalong -upanishadic -upapurana -uparch -uparching -uparise -uparm -uparna -upas -upattic -upavenue -upbank -upbar -upbay -upbear -upbearer -upbeat -upbelch -upbelt -upbend -upbid -upbind -upblacken -upblast -upblaze -upblow -upboil -upbolster -upbolt -upboost -upborne -upbotch -upboulevard -upbound -upbrace -upbraid -upbraider -upbraiding -upbraidingly -upbray -upbreak -upbred -upbreed -upbreeze -upbrighten -upbrim -upbring -upbristle -upbroken -upbrook -upbrought -upbrow -upbubble -upbuild -upbuilder -upbulging -upbuoy -upbuoyance -upburn -upburst -upbuy -upcall -upcanal -upcanyon -upcarry -upcast -upcatch -upcaught -upchamber -upchannel -upchariot -upchimney -upchoke -upchuck -upcity -upclimb -upclose -upcloser -upcoast -upcock -upcoil -upcolumn -upcome -upcoming -upconjure -upcountry -upcourse -upcover -upcrane -upcrawl -upcreek -upcreep -upcrop -upcrowd -upcry -upcurl -upcurrent -upcurve -upcushion -upcut -updart -update -updeck -updelve -updive -updo -updome -updraft -updrag -updraw -updrink -updry -upeat -upend -upeygan -upfeed -upfield -upfill -upfingered -upflame -upflare -upflash -upflee -upflicker -upfling -upfloat -upflood -upflow -upflower -upflung -upfly -upfold -upfollow -upframe -upfurl -upgale -upgang -upgape -upgather -upgaze -upget -upgird -upgirt -upgive -upglean -upglide -upgo -upgorge -upgrade -upgrave -upgrow -upgrowth -upgully -upgush -uphand -uphang -upharbor -upharrow -uphasp -upheal -upheap -uphearted -upheaval -upheavalist -upheave -upheaven -upheld -uphelm -uphelya -upher -uphill -uphillward -uphoard -uphoist -uphold -upholden -upholder -upholster -upholstered -upholsterer -upholsteress -upholsterous -upholstery -upholsterydom -upholstress -uphung -uphurl -upisland -upjerk -upjet -upkeep -upkindle -upknell -upknit -upla -upladder -uplaid -uplake -upland -uplander -uplandish -uplane -uplay -uplead -upleap -upleg -uplick -uplift -upliftable -uplifted -upliftedly -upliftedness -uplifter -uplifting -upliftingly -upliftingness -upliftitis -upliftment -uplight -uplimb -uplimber -upline -uplock -uplong -uplook -uplooker -uploom -uploop -uplying -upmaking -upmast -upmix -upmost -upmount -upmountain -upmove -upness -upo -upon -uppard -uppent -upper -upperch -uppercut -upperer -upperest -upperhandism -uppermore -uppermost -uppers -uppertendom -uppile -upping -uppish -uppishly -uppishness -uppity -upplough -upplow -uppluck -uppoint -uppoise -uppop -uppour -uppowoc -upprick -upprop -uppuff -uppull -uppush -upquiver -upraisal -upraise -upraiser -upreach -uprear -uprein -uprend -uprender -uprest -uprestore -uprid -upridge -upright -uprighteous -uprighteously -uprighteousness -uprighting -uprightish -uprightly -uprightness -uprights -uprip -uprisal -uprise -uprisement -uprisen -upriser -uprising -uprist -uprive -upriver -uproad -uproar -uproariness -uproarious -uproariously -uproariousness -uproom -uproot -uprootal -uprooter -uprose -uprouse -uproute -uprun -uprush -upsaddle -upscale -upscrew -upscuddle -upseal -upseek -upseize -upsend -upset -upsetment -upsettable -upsettal -upsetted -upsetter -upsetting -upsettingly -upsey -upshaft -upshear -upsheath -upshoot -upshore -upshot -upshoulder -upshove -upshut -upside -upsides -upsighted -upsiloid -upsilon -upsilonism -upsit -upsitten -upsitting -upslant -upslip -upslope -upsmite -upsnatch -upsoak -upsoar -upsolve -upspeak -upspear -upspeed -upspew -upspin -upspire -upsplash -upspout -upspread -upspring -upsprinkle -upsprout -upspurt -upstaff -upstage -upstair -upstairs -upstamp -upstand -upstander -upstanding -upstare -upstart -upstartism -upstartle -upstartness -upstate -upstater -upstaunch -upstay -upsteal -upsteam -upstem -upstep -upstick -upstir -upstraight -upstream -upstreamward -upstreet -upstretch -upstrike -upstrive -upstroke -upstruggle -upsuck -upsun -upsup -upsurge -upsurgence -upswallow -upswarm -upsway -upsweep -upswell -upswing -uptable -uptake -uptaker -uptear -uptemper -uptend -upthrow -upthrust -upthunder -uptide -uptie -uptill -uptilt -uptorn -uptoss -uptower -uptown -uptowner -uptrace -uptrack -uptrail -uptrain -uptree -uptrend -uptrill -uptrunk -uptruss -uptube -uptuck -upturn -uptwined -uptwist -Upupa -Upupidae -upupoid -upvalley -upvomit -upwaft -upwall -upward -upwardly -upwardness -upwards -upwarp -upwax -upway -upways -upwell -upwent -upwheel -upwhelm -upwhir -upwhirl -upwind -upwith -upwork -upwound -upwrap -upwreathe -upwrench -upwring -upwrought -upyard -upyoke -ur -ura -urachal -urachovesical -urachus -uracil -uraemic -uraeus -Uragoga -Ural -ural -urali -Uralian -Uralic -uraline -uralite -uralitic -uralitization -uralitize -uralium -uramido -uramil -uramilic -uramino -Uran -uran -uranalysis -uranate -Urania -Uranian -uranic -Uranicentric -uranidine -uraniferous -uraniid -Uraniidae -uranin -uranine -uraninite -uranion -uraniscochasma -uraniscoplasty -uraniscoraphy -uraniscorrhaphy -uranism -uranist -uranite -uranitic -uranium -uranocircite -uranographer -uranographic -uranographical -uranographist -uranography -uranolatry -uranolite -uranological -uranology -uranometria -uranometrical -uranometry -uranophane -uranophotography -uranoplastic -uranoplasty -uranoplegia -uranorrhaphia -uranorrhaphy -uranoschisis -uranoschism -uranoscope -uranoscopia -uranoscopic -Uranoscopidae -Uranoscopus -uranoscopy -uranospathite -uranosphaerite -uranospinite -uranostaphyloplasty -uranostaphylorrhaphy -uranotantalite -uranothallite -uranothorite -uranotil -uranous -Uranus -uranyl -uranylic -urao -urare -urari -Urartaean -Urartic -urase -urataemia -urate -uratemia -uratic -uratoma -uratosis -uraturia -urazine -urazole -urbacity -urbainite -Urban -urban -urbane -urbanely -urbaneness -urbanism -Urbanist -urbanist -urbanite -urbanity -urbanization -urbanize -urbarial -urbian -urbic -Urbicolae -urbicolous -urbification -urbify -urbinate -urceiform -urceolar -urceolate -urceole -urceoli -Urceolina -urceolus -urceus -urchin -urchiness -urchinlike -urchinly -urd -urde -urdee -Urdu -ure -urea -ureal -ureameter -ureametry -urease -urechitin -urechitoxin -uredema -Uredinales -uredine -Uredineae -uredineal -uredineous -uredinia -uredinial -Urediniopsis -urediniospore -urediniosporic -uredinium -uredinoid -uredinologist -uredinology -uredinous -Uredo -uredo -uredosorus -uredospore -uredosporic -uredosporiferous -uredosporous -uredostage -ureic -ureid -ureide -ureido -uremia -uremic -Urena -urent -ureometer -ureometry -ureosecretory -uresis -uretal -ureter -ureteral -ureteralgia -uretercystoscope -ureterectasia -ureterectasis -ureterectomy -ureteric -ureteritis -ureterocele -ureterocervical -ureterocolostomy -ureterocystanastomosis -ureterocystoscope -ureterocystostomy -ureterodialysis -ureteroenteric -ureteroenterostomy -ureterogenital -ureterogram -ureterograph -ureterography -ureterointestinal -ureterolith -ureterolithiasis -ureterolithic -ureterolithotomy -ureterolysis -ureteronephrectomy -ureterophlegma -ureteroplasty -ureteroproctostomy -ureteropyelitis -ureteropyelogram -ureteropyelography -ureteropyelonephritis -ureteropyelostomy -ureteropyosis -ureteroradiography -ureterorectostomy -ureterorrhagia -ureterorrhaphy -ureterosalpingostomy -ureterosigmoidostomy -ureterostegnosis -ureterostenoma -ureterostenosis -ureterostoma -ureterostomy -ureterotomy -ureterouteral -ureterovaginal -ureterovesical -urethan -urethane -urethra -urethrae -urethragraph -urethral -urethralgia -urethrameter -urethrascope -urethratome -urethratresia -urethrectomy -urethremphraxis -urethreurynter -urethrism -urethritic -urethritis -urethroblennorrhea -urethrobulbar -urethrocele -urethrocystitis -urethrogenital -urethrogram -urethrograph -urethrometer -urethropenile -urethroperineal -urethrophyma -urethroplastic -urethroplasty -urethroprostatic -urethrorectal -urethrorrhagia -urethrorrhaphy -urethrorrhea -urethrorrhoea -urethroscope -urethroscopic -urethroscopical -urethroscopy -urethrosexual -urethrospasm -urethrostaxis -urethrostenosis -urethrostomy -urethrotome -urethrotomic -urethrotomy -urethrovaginal -urethrovesical -urethylan -uretic -ureylene -urf -urfirnis -urge -urgence -urgency -urgent -urgently -urgentness -urger -Urginea -urging -urgingly -Urgonian -urheen -Uri -Uria -Uriah -urial -Urian -uric -uricacidemia -uricaciduria -uricaemia -uricaemic -uricemia -uricemic -uricolysis -uricolytic -uridrosis -Uriel -urinaemia -urinal -urinalist -urinalysis -urinant -urinarium -urinary -urinate -urination -urinative -urinator -urine -urinemia -uriniferous -uriniparous -urinocryoscopy -urinogenital -urinogenitary -urinogenous -urinologist -urinology -urinomancy -urinometer -urinometric -urinometry -urinoscopic -urinoscopist -urinoscopy -urinose -urinosexual -urinous -urinousness -urite -urlar -urled -urling -urluch -urman -urn -urna -urnae -urnal -urnflower -urnful -urning -urningism -urnism -urnlike -urnmaker -Uro -uroacidimeter -uroazotometer -urobenzoic -urobilin -urobilinemia -urobilinogen -urobilinogenuria -urobilinuria -urocanic -urocele -Urocerata -urocerid -Uroceridae -urochloralic -urochord -Urochorda -urochordal -urochordate -urochrome -urochromogen -Urocoptidae -Urocoptis -urocyanogen -Urocyon -urocyst -urocystic -Urocystis -urocystitis -urodaeum -Urodela -urodelan -urodele -urodelous -urodialysis -urodynia -uroedema -uroerythrin -urofuscohematin -urogaster -urogastric -urogenic -urogenital -urogenitary -urogenous -uroglaucin -Uroglena -urogram -urography -urogravimeter -urohematin -urohyal -urolagnia -uroleucic -uroleucinic -urolith -urolithiasis -urolithic -urolithology -urologic -urological -urologist -urology -urolutein -urolytic -uromancy -uromantia -uromantist -Uromastix -uromelanin -uromelus -uromere -uromeric -urometer -Uromyces -Uromycladium -uronephrosis -uronic -uronology -uropatagium -Uropeltidae -urophanic -urophanous -urophein -Urophlyctis -urophthisis -uroplania -uropod -uropodal -uropodous -uropoetic -uropoiesis -uropoietic -uroporphyrin -uropsile -Uropsilus -uroptysis -Uropygi -uropygial -uropygium -uropyloric -urorosein -urorrhagia -urorrhea -urorubin -urosaccharometry -urosacral -uroschesis -uroscopic -uroscopist -uroscopy -urosepsis -uroseptic -urosis -urosomatic -urosome -urosomite -urosomitic -urostea -urostealith -urostegal -urostege -urostegite -urosteon -urosternite -urosthene -urosthenic -urostylar -urostyle -urotoxia -urotoxic -urotoxicity -urotoxin -urotoxy -uroxanate -uroxanic -uroxanthin -uroxin -urradhus -urrhodin -urrhodinic -Urs -Ursa -ursal -ursicidal -ursicide -Ursid -Ursidae -ursiform -ursigram -ursine -ursoid -ursolic -urson -ursone -ursuk -Ursula -Ursuline -Ursus -Urtica -urtica -Urticaceae -urticaceous -Urticales -urticant -urticaria -urticarial -urticarious -Urticastrum -urticate -urticating -urtication -urticose -urtite -Uru -urubu -urucu -urucuri -Uruguayan -uruisg -Urukuena -urunday -urus -urushi -urushic -urushinic -urushiol -urushiye -urva -us -usability -usable -usableness -usage -usager -usance -usar -usara -usaron -usation -use -used -usedly -usedness -usednt -usee -useful -usefullish -usefully -usefulness -usehold -useless -uselessly -uselessness -usent -user -ush -ushabti -ushabtiu -Ushak -Usheen -usher -usherance -usherdom -usherer -usheress -usherette -Usherian -usherian -usherism -usherless -ushership -usings -Usipetes -usitate -usitative -Uskara -Uskok -Usnea -usnea -Usneaceae -usneaceous -usneoid -usnic -usninic -Uspanteca -usque -usquebaugh -usself -ussels -usselven -ussingite -ust -Ustarana -uster -Ustilaginaceae -ustilaginaceous -Ustilaginales -ustilagineous -Ustilaginoidea -Ustilago -ustion -ustorious -ustulate -ustulation -Ustulina -usual -usualism -usually -usualness -usuary -usucapient -usucapion -usucapionary -usucapt -usucaptable -usucaption -usucaptor -usufruct -usufructuary -Usun -usure -usurer -usurerlike -usuress -usurious -usuriously -usuriousness -usurp -usurpation -usurpative -usurpatively -usurpatory -usurpature -usurpedly -usurper -usurpership -usurping -usurpingly -usurpment -usurpor -usurpress -usury -usward -uswards -ut -Uta -uta -Utah -Utahan -utahite -utai -utas -utch -utchy -Ute -utees -utensil -uteralgia -uterectomy -uteri -uterine -uteritis -uteroabdominal -uterocele -uterocervical -uterocystotomy -uterofixation -uterogestation -uterogram -uterography -uterointestinal -uterolith -uterology -uteromania -uterometer -uteroovarian -uteroparietal -uteropelvic -uteroperitoneal -uteropexia -uteropexy -uteroplacental -uteroplasty -uterosacral -uterosclerosis -uteroscope -uterotomy -uterotonic -uterotubal -uterovaginal -uteroventral -uterovesical -uterus -utfangenethef -utfangethef -utfangthef -utfangthief -utick -utile -utilitarian -utilitarianism -utilitarianist -utilitarianize -utilitarianly -utility -utilizable -utilization -utilize -utilizer -utinam -utmost -utmostness -Utopia -utopia -Utopian -utopian -utopianism -utopianist -Utopianize -Utopianizer -utopianizer -utopiast -utopism -utopist -utopistic -utopographer -Utraquism -utraquist -utraquistic -Utrecht -utricle -utricul -utricular -Utricularia -Utriculariaceae -utriculate -utriculiferous -utriculiform -utriculitis -utriculoid -utriculoplastic -utriculoplasty -utriculosaccular -utriculose -utriculus -utriform -utrubi -utrum -utsuk -utter -utterability -utterable -utterableness -utterance -utterancy -utterer -utterless -utterly -uttermost -utterness -utu -utum -uturuncu -uva -uval -uvalha -uvanite -uvarovite -uvate -uvea -uveal -uveitic -uveitis -Uvella -uveous -uvic -uvid -uviol -uvitic -uvitinic -uvito -uvitonic -uvrou -uvula -uvulae -uvular -Uvularia -uvularly -uvulitis -uvuloptosis -uvulotome -uvulotomy -uvver -uxorial -uxoriality -uxorially -uxoricidal -uxoricide -uxorious -uxoriously -uxoriousness -uzan -uzara -uzarin -uzaron -Uzbak -Uzbeg -Uzbek -V -v -vaagmer -vaalite -Vaalpens -vacabond -vacancy -vacant -vacanthearted -vacantheartedness -vacantly -vacantness -vacantry -vacatable -vacate -vacation -vacational -vacationer -vacationist -vacationless -vacatur -Vaccaria -vaccary -vaccenic -vaccicide -vaccigenous -vaccina -vaccinable -vaccinal -vaccinate -vaccination -vaccinationist -vaccinator -vaccinatory -vaccine -vaccinee -vaccinella -vaccinia -Vacciniaceae -vacciniaceous -vaccinial -vaccinifer -vacciniform -vacciniola -vaccinist -Vaccinium -vaccinium -vaccinization -vaccinogenic -vaccinogenous -vaccinoid -vaccinophobia -vaccinotherapy -vache -Vachellia -vachette -vacillancy -vacillant -vacillate -vacillating -vacillatingly -vacillation -vacillator -vacillatory -vacoa -vacona -vacoua -vacouf -vacual -vacuate -vacuation -vacuefy -vacuist -vacuity -vacuolar -vacuolary -vacuolate -vacuolated -vacuolation -vacuole -vacuolization -vacuome -vacuometer -vacuous -vacuously -vacuousness -vacuum -vacuuma -vacuumize -vade -Vadim -vadimonium -vadimony -vadium -vadose -vady -vag -vagabond -vagabondage -vagabondager -vagabondia -vagabondish -vagabondism -vagabondismus -vagabondize -vagabondizer -vagabondry -vagal -vagarian -vagarious -vagariously -vagarish -vagarisome -vagarist -vagaristic -vagarity -vagary -vagas -vage -vagiform -vagile -vagina -vaginal -vaginalectomy -vaginaless -vaginalitis -vaginant -vaginate -vaginated -vaginectomy -vaginervose -Vaginicola -vaginicoline -vaginicolous -vaginiferous -vaginipennate -vaginismus -vaginitis -vaginoabdominal -vaginocele -vaginodynia -vaginofixation -vaginolabial -vaginometer -vaginomycosis -vaginoperineal -vaginoperitoneal -vaginopexy -vaginoplasty -vaginoscope -vaginoscopy -vaginotome -vaginotomy -vaginovesical -vaginovulvar -vaginula -vaginulate -vaginule -vagitus -Vagnera -vagoaccessorius -vagodepressor -vagoglossopharyngeal -vagogram -vagolysis -vagosympathetic -vagotomize -vagotomy -vagotonia -vagotonic -vagotropic -vagotropism -vagrance -vagrancy -vagrant -vagrantism -vagrantize -vagrantlike -vagrantly -vagrantness -vagrate -vagrom -vague -vaguely -vagueness -vaguish -vaguity -vagulous -vagus -vahine -Vai -Vaidic -vail -vailable -vain -vainful -vainglorious -vaingloriously -vaingloriousness -vainglory -vainly -vainness -vair -vairagi -vaire -vairy -Vaishnava -Vaishnavism -vaivode -vajra -vajrasana -vakass -vakia -vakil -vakkaliga -Val -valance -valanced -valanche -valbellite -vale -valediction -valedictorian -valedictorily -valedictory -valence -Valencia -Valencian -valencianite -Valenciennes -valency -valent -Valentide -Valentin -Valentine -valentine -Valentinian -Valentinianism -valentinite -valeral -valeraldehyde -valeramide -valerate -Valeria -valerian -Valeriana -Valerianaceae -valerianaceous -Valerianales -valerianate -Valerianella -Valerianoides -valeric -Valerie -valerin -valerolactone -valerone -valeryl -valerylene -valet -valeta -valetage -valetdom -valethood -valetism -valetry -valetudinarian -valetudinarianism -valetudinariness -valetudinarist -valetudinarium -valetudinary -valeur -valeward -valgoid -valgus -valhall -Valhalla -Vali -vali -valiance -valiancy -valiant -valiantly -valiantness -valid -validate -validation -validatory -validification -validity -validly -validness -valine -valise -valiseful -valiship -Valkyr -Valkyria -Valkyrian -Valkyrie -vall -vallancy -vallar -vallary -vallate -vallated -vallation -vallecula -vallecular -valleculate -vallevarite -valley -valleyful -valleyite -valleylet -valleylike -valleyward -valleywise -vallicula -vallicular -vallidom -vallis -Valliscaulian -Vallisneria -Vallisneriaceae -vallisneriaceous -Vallombrosan -Vallota -vallum -Valmy -Valois -valonia -Valoniaceae -valoniaceous -valor -valorization -valorize -valorous -valorously -valorousness -Valsa -Valsaceae -Valsalvan -valse -valsoid -valuable -valuableness -valuably -valuate -valuation -valuational -valuator -value -valued -valueless -valuelessness -valuer -valuta -valva -valval -Valvata -valvate -Valvatidae -valve -valved -valveless -valvelet -valvelike -valveman -valviferous -valviform -valvotomy -valvula -valvular -valvulate -valvule -valvulitis -valvulotome -valvulotomy -valyl -valylene -vambrace -vambraced -vamfont -vammazsa -vamoose -vamp -vamped -vamper -vamphorn -vampire -vampireproof -vampiric -vampirish -vampirism -vampirize -vamplate -vampproof -Vampyrella -Vampyrellidae -Vampyrum -Van -van -vanadate -vanadiate -vanadic -vanadiferous -vanadinite -vanadium -vanadosilicate -vanadous -vanadyl -Vanaheim -vanaprastha -Vance -vancourier -Vancouveria -Vanda -Vandal -Vandalic -vandalish -vandalism -vandalistic -vandalization -vandalize -vandalroot -Vandemonian -Vandemonianism -Vandiemenian -Vandyke -vane -vaned -vaneless -vanelike -Vanellus -Vanessa -vanessian -vanfoss -vang -vangee -vangeli -vanglo -vanguard -Vanguardist -Vangueria -vanilla -vanillal -vanillaldehyde -vanillate -vanille -vanillery -vanillic -vanillin -vanillinic -vanillism -vanilloes -vanillon -vanilloyl -vanillyl -Vanir -vanish -vanisher -vanishing -vanishingly -vanishment -Vanist -vanitarianism -vanitied -vanity -vanjarrah -vanman -vanmost -Vannai -vanner -vannerman -vannet -Vannic -vanquish -vanquishable -vanquisher -vanquishment -vansire -vantage -vantageless -vantbrace -vantbrass -vanward -vapid -vapidism -vapidity -vapidly -vapidness -vapocauterization -vapographic -vapography -vapor -vaporability -vaporable -vaporarium -vaporary -vaporate -vapored -vaporer -vaporescence -vaporescent -vaporiferous -vaporiferousness -vaporific -vaporiform -vaporimeter -vaporing -vaporingly -vaporish -vaporishness -vaporium -vaporizable -vaporization -vaporize -vaporizer -vaporless -vaporlike -vaporograph -vaporographic -vaporose -vaporoseness -vaporosity -vaporous -vaporously -vaporousness -vaportight -vapory -vapulary -vapulate -vapulation -vapulatory -vara -varahan -varan -Varanger -Varangi -Varangian -varanid -Varanidae -Varanoid -Varanus -Varda -vardapet -vardy -vare -varec -vareheaded -vareuse -vargueno -vari -variability -variable -variableness -variably -Variag -variance -variancy -variant -variate -variation -variational -variationist -variatious -variative -variatively -variator -varical -varicated -varication -varicella -varicellar -varicellate -varicellation -varicelliform -varicelloid -varicellous -varices -variciform -varicoblepharon -varicocele -varicoid -varicolored -varicolorous -varicose -varicosed -varicoseness -varicosis -varicosity -varicotomy -varicula -varied -variedly -variegate -variegated -variegation -variegator -varier -varietal -varietally -varietism -varietist -variety -variform -variformed -variformity -variformly -varigradation -variocoupler -variola -variolar -Variolaria -variolate -variolation -variole -variolic -varioliform -variolite -variolitic -variolitization -variolization -varioloid -variolous -variolovaccine -variolovaccinia -variometer -variorum -variotinted -various -variously -variousness -variscite -varisse -varix -varlet -varletaille -varletess -varletry -varletto -varment -varna -varnashrama -varnish -varnished -varnisher -varnishing -varnishlike -varnishment -varnishy -varnpliktige -varnsingite -Varolian -Varronia -Varronian -varsha -varsity -Varsovian -varsoviana -Varuna -varus -varve -varved -vary -varyingly -vas -Vasa -vasa -vasal -Vascons -vascular -vascularity -vascularization -vascularize -vascularly -vasculated -vasculature -vasculiferous -vasculiform -vasculitis -vasculogenesis -vasculolymphatic -vasculomotor -vasculose -vasculum -vase -vasectomize -vasectomy -vaseful -vaselet -vaselike -Vaseline -vasemaker -vasemaking -vasewise -vasework -vashegyite -vasicentric -vasicine -vasifactive -vasiferous -vasiform -vasoconstricting -vasoconstriction -vasoconstrictive -vasoconstrictor -vasocorona -vasodentinal -vasodentine -vasodilatation -vasodilatin -vasodilating -vasodilation -vasodilator -vasoepididymostomy -vasofactive -vasoformative -vasoganglion -vasohypertonic -vasohypotonic -vasoinhibitor -vasoinhibitory -vasoligation -vasoligature -vasomotion -vasomotor -vasomotorial -vasomotoric -vasomotory -vasoneurosis -vasoparesis -vasopressor -vasopuncture -vasoreflex -vasorrhaphy -vasosection -vasospasm -vasospastic -vasostimulant -vasostomy -vasotomy -vasotonic -vasotribe -vasotripsy -vasotrophic -vasovesiculectomy -vasquine -vassal -vassalage -vassaldom -vassaless -vassalic -vassalism -vassality -vassalize -vassalless -vassalry -vassalship -Vassos -vast -vastate -vastation -vastidity -vastily -vastiness -vastitude -vastity -vastly -vastness -vasty -vasu -Vasudeva -Vasundhara -vat -Vateria -vatful -vatic -vatically -Vatican -vaticanal -vaticanic -vaticanical -Vaticanism -Vaticanist -Vaticanization -Vaticanize -vaticide -vaticinal -vaticinant -vaticinate -vaticination -vaticinator -vaticinatory -vaticinatress -vaticinatrix -vatmaker -vatmaking -vatman -Vatteluttu -vatter -vau -Vaucheria -Vaucheriaceae -vaucheriaceous -vaudeville -vaudevillian -vaudevillist -Vaudism -Vaudois -vaudy -Vaughn -vaugnerite -vault -vaulted -vaultedly -vaulter -vaulting -vaultlike -vaulty -vaunt -vauntage -vaunted -vaunter -vauntery -vauntful -vauntiness -vaunting -vauntingly -vauntmure -vaunty -vauquelinite -Vauxhall -Vauxhallian -vauxite -vavasor -vavasory -vaward -Vayu -Vazimba -Veadar -veal -vealer -vealiness -veallike -vealskin -vealy -vectigal -vection -vectis -vectograph -vectographic -vector -vectorial -vectorially -vecture -Veda -Vedaic -Vedaism -Vedalia -vedana -Vedanga -Vedanta -Vedantic -Vedantism -Vedantist -Vedda -Veddoid -vedette -Vedic -vedika -Vediovis -Vedism -Vedist -vedro -Veduis -veduis -vee -veen -veep -veer -veerable -veeringly -veery -Vega -vegasite -vegeculture -vegetability -vegetable -vegetablelike -vegetablewise -vegetablize -vegetably -vegetal -vegetalcule -vegetality -vegetant -vegetarian -vegetarianism -vegetate -vegetation -vegetational -vegetationless -vegetative -vegetatively -vegetativeness -vegete -vegeteness -vegetism -vegetive -vegetivorous -vegetoalkali -vegetoalkaline -vegetoalkaloid -vegetoanimal -vegetobituminous -vegetocarbonaceous -vegetomineral -vehemence -vehemency -vehement -vehemently -vehicle -vehicular -vehicularly -vehiculary -vehiculate -vehiculation -vehiculatory -Vehmic -vei -veigle -veil -veiled -veiledly -veiledness -veiler -veiling -veilless -veillike -veilmaker -veilmaking -Veiltail -veily -vein -veinage -veinal -veinbanding -veined -veiner -veinery -veininess -veining -veinless -veinlet -veinous -veinstone -veinstuff -veinule -veinulet -veinwise -veinwork -veiny -Vejoces -vejoces -Vejovis -Vejoz -vela -velal -velamen -velamentous -velamentum -velar -velardenite -velaric -velarium -velarize -velary -velate -velated -velation -velatura -Velchanos -veldcraft -veldman -veldschoen -veldt -veldtschoen -Velella -velellidous -velic -veliferous -veliform -veliger -veligerous -Velika -velitation -vell -vellala -velleda -velleity -vellicate -vellication -vellicative -vellinch -vellon -vellosine -Vellozia -Velloziaceae -velloziaceous -vellum -vellumy -velo -velociman -velocimeter -velocious -velociously -velocipedal -velocipede -velocipedean -velocipedic -velocitous -velocity -velodrome -velometer -velours -veloutine -velte -velum -velumen -velure -Velutina -velutinous -velveret -velvet -velvetbreast -velveted -velveteen -velveteened -velvetiness -velveting -velvetleaf -velvetlike -velvetry -velvetseed -velvetweed -velvetwork -velvety -venada -venal -venality -venalization -venalize -venally -venalness -Venantes -venanzite -venatic -venatical -venatically -venation -venational -venator -venatorial -venatorious -venatory -vencola -Vend -vend -vendace -Vendean -vendee -vender -vendetta -vendettist -vendibility -vendible -vendibleness -vendibly -vendicate -Vendidad -vending -venditate -venditation -vendition -venditor -vendor -vendue -Vened -Venedotian -veneer -veneerer -veneering -venefical -veneficious -veneficness -veneficous -venenate -venenation -venene -veneniferous -venenific -venenosalivary -venenous -venenousness -venepuncture -venerability -venerable -venerableness -venerably -Veneracea -veneracean -veneraceous -veneral -Veneralia -venerance -venerant -venerate -veneration -venerational -venerative -veneratively -venerativeness -venerator -venereal -venerealness -venereologist -venereology -venerer -Veneres -venerial -Veneridae -veneriform -venery -venesect -venesection -venesector -venesia -Venetes -Veneti -Venetian -Venetianed -Venetic -venezolano -Venezuelan -vengeable -vengeance -vengeant -vengeful -vengefully -vengefulness -vengeously -venger -venial -veniality -venially -venialness -Venice -venie -venin -veniplex -venipuncture -venireman -venison -venisonivorous -venisonlike -venisuture -Venite -Venizelist -Venkata -vennel -venner -venoatrial -venoauricular -venom -venomed -venomer -venomization -venomize -venomly -venomness -venomosalivary -venomous -venomously -venomousness -venomproof -venomsome -venomy -venosal -venosclerosis -venose -venosinal -venosity -venostasis -venous -venously -venousness -vent -ventage -ventail -venter -Ventersdorp -venthole -ventiduct -ventifact -ventil -ventilable -ventilagin -ventilate -ventilating -ventilation -ventilative -ventilator -ventilatory -ventless -ventometer -ventose -ventoseness -ventosity -ventpiece -ventrad -ventral -ventrally -ventralmost -ventralward -ventric -ventricle -ventricolumna -ventricolumnar -ventricornu -ventricornual -ventricose -ventricoseness -ventricosity -ventricous -ventricular -ventricularis -ventriculite -Ventriculites -ventriculitic -Ventriculitidae -ventriculogram -ventriculography -ventriculoscopy -ventriculose -ventriculous -ventriculus -ventricumbent -ventriduct -ventrifixation -ventrilateral -ventrilocution -ventriloqual -ventriloqually -ventriloque -ventriloquial -ventriloquially -ventriloquism -ventriloquist -ventriloquistic -ventriloquize -ventriloquous -ventriloquously -ventriloquy -ventrimesal -ventrimeson -ventrine -ventripotency -ventripotent -ventripotential -ventripyramid -ventroaxial -ventroaxillary -ventrocaudal -ventrocystorrhaphy -ventrodorsad -ventrodorsal -ventrodorsally -ventrofixation -ventrohysteropexy -ventroinguinal -ventrolateral -ventrolaterally -ventromedial -ventromedian -ventromesal -ventromesial -ventromyel -ventroposterior -ventroptosia -ventroptosis -ventroscopy -ventrose -ventrosity -ventrosuspension -ventrotomy -venture -venturer -venturesome -venturesomely -venturesomeness -Venturia -venturine -venturous -venturously -venturousness -venue -venula -venular -venule -venulose -Venus -Venusian -venust -Venutian -venville -Veps -Vepse -Vepsish -vera -veracious -veraciously -veraciousness -veracity -veranda -verandaed -verascope -veratral -veratralbine -veratraldehyde -veratrate -veratria -veratric -veratridine -veratrine -veratrinize -veratrize -veratroidine -veratrole -veratroyl -Veratrum -veratryl -veratrylidene -verb -verbal -verbalism -verbalist -verbality -verbalization -verbalize -verbalizer -verbally -verbarian -verbarium -verbasco -verbascose -Verbascum -verbate -verbatim -verbena -Verbenaceae -verbenaceous -verbenalike -verbenalin -Verbenarius -verbenate -verbene -verbenone -verberate -verberation -verberative -Verbesina -verbiage -verbicide -verbiculture -verbid -verbification -verbify -verbigerate -verbigeration -verbigerative -verbile -verbless -verbolatry -verbomania -verbomaniac -verbomotor -verbose -verbosely -verboseness -verbosity -verbous -verby -verchok -verd -verdancy -verdant -verdantly -verdantness -verdea -verdelho -verderer -verderership -verdet -verdict -verdigris -verdigrisy -verdin -verditer -verdoy -verdugoship -verdun -verdure -verdured -verdureless -verdurous -verdurousness -verecund -verecundity -verecundness -verek -veretilliform -Veretillum -veretillum -verge -vergeboard -vergence -vergency -vergent -vergentness -verger -vergeress -vergerism -vergerless -vergership -vergery -vergi -vergiform -Vergilianism -verglas -vergobret -veri -veridic -veridical -veridicality -veridically -veridicalness -veridicous -veridity -verifiability -verifiable -verifiableness -verifiably -verificate -verification -verificative -verificatory -verifier -verify -verily -verine -verisimilar -verisimilarly -verisimilitude -verisimilitudinous -verisimility -verism -verist -veristic -veritability -veritable -veritableness -veritably -verite -veritism -veritist -veritistic -verity -verjuice -vermeil -vermeologist -vermeology -Vermes -vermetid -Vermetidae -vermetidae -Vermetus -vermian -vermicelli -vermicidal -vermicide -vermicious -vermicle -vermicular -Vermicularia -vermicularly -vermiculate -vermiculated -vermiculation -vermicule -vermiculite -vermiculose -vermiculosity -vermiculous -vermiform -Vermiformia -vermiformis -vermiformity -vermiformous -vermifugal -vermifuge -vermifugous -vermigerous -vermigrade -Vermilingues -Vermilinguia -vermilinguial -vermilion -vermilionette -vermilionize -vermin -verminal -verminate -vermination -verminer -verminicidal -verminicide -verminiferous -verminlike -verminly -verminosis -verminous -verminously -verminousness -verminproof -verminy -vermiparous -vermiparousness -vermis -vermivorous -vermivorousness -vermix -Vermont -Vermonter -Vermontese -vermorel -vermouth -Vern -vernacle -vernacular -vernacularism -vernacularist -vernacularity -vernacularization -vernacularize -vernacularly -vernacularness -vernaculate -vernal -vernality -vernalization -vernalize -vernally -vernant -vernation -vernicose -vernier -vernile -vernility -vernin -vernine -vernition -Vernon -Vernonia -vernoniaceous -Vernonieae -vernonin -Verona -Veronal -veronalism -Veronese -Veronica -Veronicella -Veronicellidae -Verpa -verre -verrel -verriculate -verriculated -verricule -verruca -verrucano -Verrucaria -Verrucariaceae -verrucariaceous -verrucarioid -verrucated -verruciferous -verruciform -verrucose -verrucoseness -verrucosis -verrucosity -verrucous -verruculose -verruga -versability -versable -versableness -versal -versant -versate -versatile -versatilely -versatileness -versatility -versation -versative -verse -versecraft -versed -verseless -verselet -versemaker -versemaking -verseman -versemanship -versemonger -versemongering -versemongery -verser -versesmith -verset -versette -verseward -versewright -versicle -versicler -versicolor -versicolorate -versicolored -versicolorous -versicular -versicule -versifiable -versifiaster -versification -versificator -versificatory -versificatrix -versifier -versiform -versify -versiloquy -versine -version -versional -versioner -versionist -versionize -versipel -verso -versor -verst -versta -versual -versus -vert -vertebra -vertebrae -vertebral -vertebraless -vertebrally -Vertebraria -vertebrarium -vertebrarterial -Vertebrata -vertebrate -vertebrated -vertebration -vertebre -vertebrectomy -vertebriform -vertebroarterial -vertebrobasilar -vertebrochondral -vertebrocostal -vertebrodymus -vertebrofemoral -vertebroiliac -vertebromammary -vertebrosacral -vertebrosternal -vertex -vertibility -vertible -vertibleness -vertical -verticalism -verticality -vertically -verticalness -vertices -verticil -verticillary -verticillaster -verticillastrate -verticillate -verticillated -verticillately -verticillation -verticilliaceous -verticilliose -Verticillium -verticillus -verticity -verticomental -verticordious -vertiginate -vertigines -vertiginous -vertigo -vertilinear -vertimeter -Vertumnus -Verulamian -veruled -verumontanum -vervain -vervainlike -verve -vervecine -vervel -verveled -vervelle -vervenia -vervet -very -Vesalian -vesania -vesanic -vesbite -vesicae -vesical -vesicant -vesicate -vesication -vesicatory -vesicle -vesicoabdominal -vesicocavernous -vesicocele -vesicocervical -vesicoclysis -vesicofixation -vesicointestinal -vesicoprostatic -vesicopubic -vesicorectal -vesicosigmoid -vesicospinal -vesicotomy -vesicovaginal -vesicular -Vesicularia -vesicularly -vesiculary -vesiculase -Vesiculata -Vesiculatae -vesiculate -vesiculation -vesicule -vesiculectomy -vesiculiferous -vesiculiform -vesiculigerous -vesiculitis -vesiculobronchial -vesiculocavernous -vesiculopustular -vesiculose -vesiculotomy -vesiculotubular -vesiculotympanic -vesiculotympanitic -vesiculous -vesiculus -vesicupapular -veskit -Vespa -vespacide -vespal -vesper -vesperal -vesperian -vespering -vespers -vespertide -vespertilian -Vespertilio -vespertilio -Vespertiliones -vespertilionid -Vespertilionidae -Vespertilioninae -vespertilionine -vespertinal -vespertine -vespery -vespiary -vespid -Vespidae -vespiform -Vespina -vespine -vespoid -Vespoidea -vessel -vesseled -vesselful -vessignon -vest -Vesta -vestal -Vestalia -vestalia -vestalship -Vestas -vestee -vester -vestiarian -vestiarium -vestiary -vestibula -vestibular -vestibulary -vestibulate -vestibule -vestibuled -vestibulospinal -vestibulum -vestige -vestigial -vestigially -Vestigian -vestigiary -vestigium -vestiment -vestimental -vestimentary -vesting -Vestini -Vestinian -vestiture -vestlet -vestment -vestmental -vestmented -vestral -vestralization -vestrical -vestrification -vestrify -vestry -vestrydom -vestryhood -vestryish -vestryism -vestryize -vestryman -vestrymanly -vestrymanship -vestuary -vestural -vesture -vesturer -Vesuvian -vesuvian -vesuvianite -vesuviate -vesuvite -vesuvius -veszelyite -vet -veta -vetanda -vetch -vetchling -vetchy -veteran -veterancy -veteraness -veteranize -veterinarian -veterinarianism -veterinary -vetitive -vetivene -vetivenol -vetiver -Vetiveria -vetiveria -vetivert -vetkousie -veto -vetoer -vetoism -vetoist -vetoistic -vetoistical -vetust -vetusty -veuglaire -veuve -vex -vexable -vexation -vexatious -vexatiously -vexatiousness -vexatory -vexed -vexedly -vexedness -vexer -vexful -vexil -vexillar -vexillarious -vexillary -vexillate -vexillation -vexillum -vexingly -vexingness -vext -via -viability -viable -viaduct -viaggiatory -viagram -viagraph -viajaca -vial -vialful -vialmaker -vialmaking -vialogue -viameter -viand -viander -viatic -viatica -viatical -viaticum -viatometer -viator -viatorial -viatorially -vibetoite -vibex -vibgyor -vibix -vibracular -vibracularium -vibraculoid -vibraculum -vibrance -vibrancy -vibrant -vibrantly -vibraphone -vibrate -vibratile -vibratility -vibrating -vibratingly -vibration -vibrational -vibrationless -vibratiuncle -vibratiunculation -vibrative -vibrato -vibrator -vibratory -Vibrio -vibrioid -vibrion -vibrionic -vibrissa -vibrissae -vibrissal -vibrograph -vibromassage -vibrometer -vibromotive -vibronic -vibrophone -vibroscope -vibroscopic -vibrotherapeutics -viburnic -viburnin -Viburnum -Vic -vicar -vicarage -vicarate -vicaress -vicarial -vicarian -vicarianism -vicariate -vicariateship -vicarious -vicariously -vicariousness -vicarly -vicarship -Vice -vice -vicecomes -vicecomital -vicegeral -vicegerency -vicegerent -vicegerentship -viceless -vicelike -vicenary -vicennial -viceregal -viceregally -vicereine -viceroy -viceroyal -viceroyalty -viceroydom -viceroyship -vicety -viceversally -Vichyite -vichyssoise -Vicia -vicianin -vicianose -vicilin -vicinage -vicinal -vicine -vicinity -viciosity -vicious -viciously -viciousness -vicissitous -vicissitude -vicissitudinary -vicissitudinous -vicissitudinousness -Vick -Vicki -Vickie -Vicky -vicoite -vicontiel -victim -victimhood -victimizable -victimization -victimize -victimizer -victless -Victor -victor -victordom -victorfish -Victoria -Victorian -Victorianism -Victorianize -Victorianly -victoriate -victoriatus -victorine -victorious -victoriously -victoriousness -victorium -victory -victoryless -victress -victrix -Victrola -victrola -victual -victualage -victualer -victualing -victuallership -victualless -victualry -victuals -vicuna -Viddhal -viddui -videndum -video -videogenic -vidette -Vidhyanath -Vidian -vidonia -vidry -Vidua -viduage -vidual -vidually -viduate -viduated -viduation -Viduinae -viduine -viduity -viduous -vidya -vie -vielle -Vienna -Viennese -vier -vierling -viertel -viertelein -Vietminh -Vietnamese -view -viewable -viewably -viewer -viewiness -viewless -viewlessly -viewly -viewpoint -viewsome -viewster -viewworthy -viewy -vifda -viga -vigentennial -vigesimal -vigesimation -vigia -vigil -vigilance -vigilancy -vigilant -vigilante -vigilantism -vigilantly -vigilantness -vigilate -vigilation -vigintiangular -vigneron -vignette -vignetter -vignettist -vignin -vigonia -vigor -vigorist -vigorless -vigorous -vigorously -vigorousness -vihara -vihuela -vijao -Vijay -viking -vikingism -vikinglike -vikingship -vila -vilayet -vile -vilehearted -Vilela -vilely -vileness -Vilhelm -Vili -vilicate -vilification -vilifier -vilify -vilifyingly -vilipend -vilipender -vilipenditory -vility -vill -villa -villadom -villaette -village -villageful -villagehood -villageless -villagelet -villagelike -villageous -villager -villageress -villagery -villaget -villageward -villagey -villagism -villain -villainage -villaindom -villainess -villainist -villainous -villainously -villainousness -villainproof -villainy -villakin -villaless -villalike -villanage -villanella -villanelle -villanette -villanous -villanously -Villanova -Villanovan -villar -villate -villatic -ville -villein -villeinage -villeiness -villeinhold -villenage -villiaumite -villiferous -villiform -villiplacental -Villiplacentalia -villitis -villoid -villose -villosity -villous -villously -villus -vim -vimana -vimen -vimful -Viminal -viminal -vimineous -vina -vinaceous -vinaconic -vinage -vinagron -vinaigrette -vinaigretted -vinaigrier -vinaigrous -vinal -Vinalia -vinasse -vinata -Vince -Vincent -vincent -Vincentian -Vincenzo -Vincetoxicum -vincetoxin -vincibility -vincible -vincibleness -vincibly -vincular -vinculate -vinculation -vinculum -Vindelici -vindemial -vindemiate -vindemiation -vindemiatory -Vindemiatrix -vindex -vindhyan -vindicability -vindicable -vindicableness -vindicably -vindicate -vindication -vindicative -vindicatively -vindicativeness -vindicator -vindicatorily -vindicatorship -vindicatory -vindicatress -vindictive -vindictively -vindictiveness -vindictivolence -vindresser -vine -vinea -vineal -vineatic -vined -vinegar -vinegarer -vinegarette -vinegarish -vinegarist -vinegarroon -vinegarweed -vinegary -vinegerone -vinegrower -vineity -vineland -vineless -vinelet -vinelike -viner -vinery -vinestalk -vinewise -vineyard -Vineyarder -vineyarding -vineyardist -vingerhoed -Vingolf -vinhatico -vinic -vinicultural -viniculture -viniculturist -vinifera -viniferous -vinification -vinificator -Vinland -vinny -vino -vinoacetous -Vinod -vinolence -vinolent -vinologist -vinology -vinometer -vinomethylic -vinose -vinosity -vinosulphureous -vinous -vinously -vinousness -vinquish -vint -vinta -vintage -vintager -vintaging -vintem -vintener -vintlite -vintner -vintneress -vintnership -vintnery -vintress -vintry -viny -vinyl -vinylbenzene -vinylene -vinylic -vinylidene -viol -viola -violability -violable -violableness -violably -Violaceae -violacean -violaceous -violaceously -violal -Violales -violanin -violaquercitrin -violate -violater -violation -violational -violative -violator -violatory -violature -violence -violent -violently -violentness -violer -violescent -violet -violetish -violetlike -violette -violetwise -violety -violin -violina -violine -violinette -violinist -violinistic -violinlike -violinmaker -violinmaking -violist -violmaker -violmaking -violon -violoncellist -violoncello -violone -violotta -violuric -viosterol -Vip -viper -Vipera -viperan -viperess -viperfish -viperian -viperid -Viperidae -viperiform -Viperina -Viperinae -viperine -viperish -viperishly -viperlike -viperling -viperoid -Viperoidea -viperous -viperously -viperousness -vipery -vipolitic -vipresident -viqueen -Vira -viragin -viraginian -viraginity -viraginous -virago -viragoish -viragolike -viragoship -viral -Virales -Virbius -vire -virelay -viremia -viremic -virent -vireo -vireonine -virescence -virescent -virga -virgal -virgate -virgated -virgater -virgation -virgilia -Virgilism -virgin -virginal -Virginale -virginalist -virginality -virginally -virgineous -virginhead -Virginia -Virginian -Virginid -virginitis -virginity -virginityship -virginium -virginlike -virginly -virginship -Virgo -virgula -virgular -Virgularia -virgularian -Virgulariidae -virgulate -virgule -virgultum -virial -viricide -virid -viridene -viridescence -viridescent -viridian -viridigenous -viridine -viridite -viridity -virific -virify -virile -virilely -virileness -virilescence -virilescent -virilify -viriliously -virilism -virilist -virility -viripotent -viritrate -virl -virole -viroled -virological -virologist -virology -viron -virose -virosis -virous -virtu -virtual -virtualism -virtualist -virtuality -virtualize -virtually -virtue -virtued -virtuefy -virtuelessness -virtueproof -virtuless -virtuosa -virtuose -virtuosi -virtuosic -virtuosity -virtuoso -virtuosoship -virtuous -virtuouslike -virtuously -virtuousness -virucidal -virucide -viruela -virulence -virulency -virulent -virulented -virulently -virulentness -viruliferous -virus -viruscidal -viruscide -virusemic -vis -visa -visage -visaged -visagraph -visarga -Visaya -Visayan -viscacha -viscera -visceral -visceralgia -viscerally -viscerate -visceration -visceripericardial -visceroinhibitory -visceromotor -visceroparietal -visceroperitioneal -visceropleural -visceroptosis -visceroptotic -viscerosensory -visceroskeletal -viscerosomatic -viscerotomy -viscerotonia -viscerotonic -viscerotrophic -viscerotropic -viscerous -viscid -viscidity -viscidize -viscidly -viscidness -viscidulous -viscin -viscoidal -viscolize -viscometer -viscometrical -viscometrically -viscometry -viscontal -viscoscope -viscose -viscosimeter -viscosimetry -viscosity -viscount -viscountcy -viscountess -viscountship -viscounty -viscous -viscously -viscousness -viscus -vise -viseman -Vishal -Vishnavite -Vishnu -Vishnuism -Vishnuite -Vishnuvite -visibility -visibilize -visible -visibleness -visibly -visie -Visigoth -Visigothic -visile -vision -visional -visionally -visionarily -visionariness -visionary -visioned -visioner -visionic -visionist -visionize -visionless -visionlike -visionmonger -visionproof -visit -visita -visitable -Visitandine -visitant -visitation -visitational -visitative -visitator -visitatorial -visite -visitee -visiter -visiting -visitment -visitor -visitoress -visitorial -visitorship -visitress -visitrix -visive -visne -vison -visor -visorless -visorlike -vista -vistaed -vistal -vistaless -vistamente -Vistlik -visto -Vistulian -visual -visualist -visuality -visualization -visualize -visualizer -visually -visuoauditory -visuokinesthetic -visuometer -visuopsychic -visuosensory -vita -Vitaceae -Vitaglass -vital -vitalic -vitalism -vitalist -vitalistic -vitalistically -vitality -vitalization -vitalize -vitalizer -vitalizing -vitalizingly -Vitallium -vitally -vitalness -vitals -vitamer -vitameric -vitamin -vitaminic -vitaminize -vitaminology -vitapath -vitapathy -vitaphone -vitascope -vitascopic -vitasti -vitativeness -vitellarian -vitellarium -vitellary -vitellicle -vitelliferous -vitelligenous -vitelligerous -vitellin -vitelline -vitellogene -vitellogenous -vitellose -vitellus -viterbite -Viti -vitiable -vitiate -vitiated -vitiation -vitiator -viticetum -viticulose -viticultural -viticulture -viticulturer -viticulturist -vitiferous -vitiliginous -vitiligo -vitiligoidea -vitiosity -Vitis -vitium -vitochemic -vitochemical -vitrage -vitrail -vitrailed -vitrailist -vitrain -vitraux -vitreal -vitrean -vitrella -vitremyte -vitreodentinal -vitreodentine -vitreoelectric -vitreosity -vitreous -vitreouslike -vitreously -vitreousness -vitrescence -vitrescency -vitrescent -vitrescibility -vitrescible -vitreum -vitric -vitrics -vitrifaction -vitrifacture -vitrifiability -vitrifiable -vitrification -vitriform -vitrify -Vitrina -vitrine -vitrinoid -vitriol -vitriolate -vitriolation -vitriolic -vitrioline -vitriolizable -vitriolization -vitriolize -vitriolizer -vitrite -vitrobasalt -vitrophyre -vitrophyric -vitrotype -vitrous -Vitruvian -Vitruvianism -vitta -vittate -vitular -vituline -vituperable -vituperate -vituperation -vituperative -vituperatively -vituperator -vituperatory -vituperious -viuva -viva -vivacious -vivaciously -vivaciousness -vivacity -vivandiere -vivarium -vivary -vivax -vive -Vivek -vively -vivency -viver -Viverridae -viverriform -Viverrinae -viverrine -vivers -vives -vivianite -vivicremation -vivid -vividialysis -vividiffusion -vividissection -vividity -vividly -vividness -vivific -vivificate -vivification -vivificative -vivificator -vivifier -vivify -viviparism -viviparity -viviparous -viviparously -viviparousness -vivipary -viviperfuse -vivisect -vivisection -vivisectional -vivisectionally -vivisectionist -vivisective -vivisector -vivisectorium -vivisepulture -vixen -vixenish -vixenishly -vixenishness -vixenlike -vixenly -vizard -vizarded -vizardless -vizardlike -vizardmonger -vizier -vizierate -viziercraft -vizierial -viziership -vizircraft -Vlach -Vladimir -Vladislav -vlei -voar -vocability -vocable -vocably -vocabular -vocabularian -vocabularied -vocabulary -vocabulation -vocabulist -vocal -vocalic -vocalion -vocalise -vocalism -vocalist -vocalistic -vocality -vocalization -vocalize -vocalizer -vocaller -vocally -vocalness -vocate -vocation -vocational -vocationalism -vocationalization -vocationalize -vocationally -vocative -vocatively -Vochysiaceae -vochysiaceous -vocicultural -vociferance -vociferant -vociferate -vociferation -vociferative -vociferator -vociferize -vociferosity -vociferous -vociferously -vociferousness -vocification -vocimotor -vocular -vocule -Vod -vodka -voe -voet -voeten -Voetian -vog -vogesite -voglite -vogue -voguey -voguish -Vogul -voice -voiced -voiceful -voicefulness -voiceless -voicelessly -voicelessness -voicelet -voicelike -voicer -voicing -void -voidable -voidableness -voidance -voided -voidee -voider -voiding -voidless -voidly -voidness -voile -voiturette -voivode -voivodeship -vol -volable -volage -Volans -volant -volantly -Volapuk -Volapuker -Volapukism -Volapukist -volar -volata -volatic -volatile -volatilely -volatileness -volatility -volatilizable -volatilization -volatilize -volatilizer -volation -volational -volborthite -Volcae -volcan -Volcanalia -volcanian -volcanic -volcanically -volcanicity -volcanism -volcanist -volcanite -volcanity -volcanization -volcanize -volcano -volcanoism -volcanological -volcanologist -volcanologize -volcanology -Volcanus -vole -volemitol -volency -volent -volently -volery -volet -volhynite -volipresence -volipresent -volitant -volitate -volitation -volitational -volitiency -volitient -volition -volitional -volitionalist -volitionality -volitionally -volitionary -volitionate -volitionless -volitive -volitorial -Volkerwanderung -volley -volleyball -volleyer -volleying -volleyingly -volost -volplane -volplanist -Volsci -Volscian -volsella -volsellum -Volstead -Volsteadism -volt -Volta -voltaelectric -voltaelectricity -voltaelectrometer -voltaelectrometric -voltage -voltagraphy -voltaic -Voltairian -Voltairianize -Voltairish -Voltairism -voltaism -voltaite -voltameter -voltametric -voltammeter -voltaplast -voltatype -voltinism -voltivity -voltize -voltmeter -voltzite -volubilate -volubility -voluble -volubleness -volubly -volucrine -volume -volumed -volumenometer -volumenometry -volumescope -volumeter -volumetric -volumetrical -volumetrically -volumetry -volumette -voluminal -voluminosity -voluminous -voluminously -voluminousness -volumist -volumometer -volumometrical -volumometry -voluntariate -voluntarily -voluntariness -voluntarism -voluntarist -voluntaristic -voluntarity -voluntary -voluntaryism -voluntaryist -voluntative -volunteer -volunteerism -volunteerly -volunteership -volupt -voluptary -voluptas -voluptuarian -voluptuary -voluptuate -voluptuosity -voluptuous -voluptuously -voluptuousness -volupty -Voluspa -voluta -volutate -volutation -volute -voluted -Volutidae -volutiform -volutin -volution -volutoid -volva -volvate -volvelle -volvent -Volvocaceae -volvocaceous -volvulus -vomer -vomerine -vomerobasilar -vomeronasal -vomeropalatine -vomica -vomicine -vomit -vomitable -vomiter -vomiting -vomitingly -vomition -vomitive -vomitiveness -vomito -vomitory -vomiture -vomiturition -vomitus -vomitwort -vondsira -vonsenite -voodoo -voodooism -voodooist -voodooistic -voracious -voraciously -voraciousness -voracity -voraginous -vorago -vorant -vorhand -vorlooper -vorondreo -vorpal -vortex -vortical -vortically -vorticel -Vorticella -vorticellid -Vorticellidae -vortices -vorticial -vorticiform -vorticism -vorticist -vorticity -vorticose -vorticosely -vorticular -vorticularly -vortiginous -Vortumnus -Vosgian -vota -votable -votal -votally -votaress -votarist -votary -votation -Vote -vote -voteen -voteless -voter -voting -Votish -votive -votively -votiveness -votometer -votress -Votyak -vouch -vouchable -vouchee -voucher -voucheress -vouchment -vouchsafe -vouchsafement -vouge -Vougeot -Vouli -voussoir -vow -vowed -vowel -vowelish -vowelism -vowelist -vowelization -vowelize -vowelless -vowellessness -vowellike -vowely -vower -vowess -vowless -vowmaker -vowmaking -voyage -voyageable -voyager -voyance -voyeur -voyeurism -vraic -vraicker -vraicking -vrbaite -vriddhi -vrother -Vu -vug -vuggy -Vulcan -Vulcanalia -Vulcanalial -Vulcanalian -Vulcanian -Vulcanic -vulcanicity -vulcanism -vulcanist -vulcanite -vulcanizable -vulcanizate -vulcanization -vulcanize -vulcanizer -vulcanological -vulcanologist -vulcanology -vulgar -vulgare -vulgarian -vulgarish -vulgarism -vulgarist -vulgarity -vulgarization -vulgarize -vulgarizer -vulgarlike -vulgarly -vulgarness -vulgarwise -Vulgate -vulgate -vulgus -vuln -vulnerability -vulnerable -vulnerableness -vulnerably -vulnerary -vulnerate -vulneration -vulnerative -vulnerose -vulnific -vulnose -Vulpecula -vulpecular -Vulpeculid -Vulpes -vulpic -vulpicidal -vulpicide -vulpicidism -Vulpinae -vulpine -vulpinism -vulpinite -vulsella -vulsellum -vulsinite -Vultur -vulture -vulturelike -vulturewise -Vulturidae -Vulturinae -vulturine -vulturish -vulturism -vulturn -vulturous -vulva -vulval -vulvar -vulvate -vulviform -vulvitis -vulvocrural -vulvouterine -vulvovaginal -vulvovaginitis -vum -vying -vyingly -W -w -Wa -wa -Waac -waag -waapa -waar -Waasi -wab -wabber -wabble -wabbly -wabby -wabe -Wabena -wabeno -Wabi -wabster -Wabuma -Wabunga -Wac -wacago -wace -Wachaga -Wachenheimer -wachna -Wachuset -wack -wacke -wacken -wacker -wackiness -wacky -Waco -wad -waddent -wadder -wadding -waddler -waddlesome -waddling -waddlingly -waddly -waddy -waddywood -Wade -wade -wadeable -wader -wadi -wading -wadingly -wadlike -wadmaker -wadmaking -wadmal -wadmeal -wadna -wadset -wadsetter -wae -waeg -waer -waesome -waesuck -Waf -Wafd -Wafdist -wafer -waferer -waferish -wafermaker -wafermaking -waferwoman -waferwork -wafery -waff -waffle -wafflike -waffly -waft -waftage -wafter -wafture -wafty -wag -Waganda -waganging -wagaun -wagbeard -wage -waged -wagedom -wageless -wagelessness -wagenboom -Wagener -wager -wagerer -wagering -wages -wagesman -wagework -wageworker -wageworking -waggable -waggably -waggel -wagger -waggery -waggie -waggish -waggishly -waggishness -waggle -waggling -wagglingly -waggly -Waggumbura -waggy -waglike -wagling -Wagneresque -Wagnerian -Wagneriana -Wagnerianism -Wagnerism -Wagnerist -Wagnerite -wagnerite -Wagnerize -Wagogo -Wagoma -wagon -wagonable -wagonage -wagoner -wagoness -wagonette -wagonful -wagonload -wagonmaker -wagonmaking -wagonman -wagonry -wagonsmith -wagonway -wagonwayman -wagonwork -wagonwright -wagsome -wagtail -Waguha -wagwag -wagwants -Wagweno -wagwit -wah -Wahabi -Wahabiism -Wahabit -Wahabitism -wahahe -Wahehe -Wahima -wahine -Wahlenbergia -wahoo -wahpekute -Wahpeton -waiata -Waibling -Waicuri -Waicurian -waif -Waiguli -Waiilatpuan -waik -waikly -waikness -wail -Wailaki -wailer -wailful -wailfully -wailingly -wailsome -waily -wain -wainage -wainbote -wainer -wainful -wainman -wainrope -wainscot -wainscoting -wainwright -waipiro -wairch -waird -wairepo -wairsh -waise -waist -waistband -waistcloth -waistcoat -waistcoated -waistcoateer -waistcoathole -waistcoating -waistcoatless -waisted -waister -waisting -waistless -waistline -wait -waiter -waiterage -waiterdom -waiterhood -waitering -waiterlike -waitership -waiting -waitingly -waitress -waivatua -waive -waiver -waivery -waivod -Waiwai -waiwode -wajang -waka -Wakamba -wakan -Wakashan -wake -wakeel -wakeful -wakefully -wakefulness -wakeless -waken -wakener -wakening -waker -wakes -waketime -wakf -Wakhi -wakif -wakiki -waking -wakingly -wakiup -wakken -wakon -wakonda -Wakore -Wakwafi -waky -Walach -Walachian -walahee -Walapai -Walchia -Waldenses -Waldensian -waldflute -waldgrave -waldgravine -Waldheimia -waldhorn -waldmeister -Waldsteinia -wale -waled -walepiece -Waler -waler -walewort -wali -waling -walk -walkable -walkaway -walker -walking -walkist -walkmill -walkmiller -walkout -walkover -walkrife -walkside -walksman -walkway -walkyrie -wall -wallaba -wallaby -Wallach -wallah -wallaroo -Wallawalla -wallbird -wallboard -walled -waller -Wallerian -wallet -walletful -walleye -walleyed -wallflower -wallful -wallhick -walling -wallise -wallless -wallman -Wallon -Wallonian -Walloon -walloon -wallop -walloper -walloping -wallow -wallower -wallowish -wallowishly -wallowishness -wallpaper -wallpapering -wallpiece -Wallsend -wallwise -wallwork -wallwort -wally -walnut -Walpapi -Walpolean -Walpurgis -walpurgite -walrus -walsh -Walt -walt -Walter -walter -walth -Waltonian -waltz -waltzer -waltzlike -walycoat -wamara -wambais -wamble -wambliness -wambling -wamblingly -wambly -Wambuba -Wambugu -Wambutti -wame -wamefou -wamel -wammikin -wamp -Wampanoag -wampee -wample -wampum -wampumpeag -wampus -wamus -wan -Wanapum -wanchancy -wand -wander -wanderable -wanderer -wandering -wanderingly -wanderingness -Wanderjahr -wanderlust -wanderluster -wanderlustful -wanderoo -wandery -wanderyear -wandflower -wandle -wandlike -wandoo -Wandorobo -wandsman -wandy -wane -Waneatta -waned -waneless -wang -wanga -wangala -wangan -Wangara -wangateur -wanghee -wangle -wangler -Wangoni -wangrace -wangtooth -wanhope -wanhorn -wanigan -waning -wankapin -wankle -wankliness -wankly -wanle -wanly -wanner -wanness -wannish -wanny -wanrufe -wansonsy -want -wantage -wanter -wantful -wanthill -wanthrift -wanting -wantingly -wantingness -wantless -wantlessness -wanton -wantoner -wantonlike -wantonly -wantonness -wantwit -wanty -wanwordy -wanworth -wany -Wanyakyusa -Wanyamwezi -Wanyasa -Wanyoro -wap -wapacut -Wapato -wapatoo -wapentake -Wapisiana -wapiti -Wapogoro -Wapokomo -wapp -Wappato -wappenschaw -wappenschawing -wapper -wapping -Wappinger -Wappo -war -warabi -waratah -warble -warbled -warblelike -warbler -warblerlike -warblet -warbling -warblingly -warbly -warch -warcraft -ward -wardable -wardage -wardapet -warday -warded -Warden -warden -wardency -wardenry -wardenship -warder -warderer -wardership -wardholding -warding -wardite -wardless -wardlike -wardmaid -wardman -wardmote -wardress -wardrobe -wardrober -wardroom -wardship -wardsmaid -wardsman -wardswoman -wardwite -wardwoman -ware -Waregga -warehou -warehouse -warehouseage -warehoused -warehouseful -warehouseman -warehouser -wareless -waremaker -waremaking -wareman -wareroom -warf -warfare -warfarer -warfaring -warful -warily -wariness -Waring -waringin -warish -warison -wark -warkamoowee -warl -warless -warlessly -warlike -warlikely -warlikeness -warlock -warluck -warly -warm -warmable -warman -warmed -warmedly -warmer -warmful -warmhearted -warmheartedly -warmheartedness -warmhouse -warming -warmish -warmly -warmness -warmonger -warmongering -warmouth -warmth -warmthless -warmus -warn -warnel -warner -warning -warningly -warningproof -warnish -warnoth -warnt -Warori -warp -warpable -warpage -warped -warper -warping -warplane -warple -warplike -warproof -warpwise -warragal -warrambool -warran -warrand -warrandice -warrant -warrantable -warrantableness -warrantably -warranted -warrantee -warranter -warrantise -warrantless -warrantor -warranty -warratau -Warrau -warree -Warren -warren -warrener -warrenlike -warrer -Warri -warrin -warrior -warrioress -warriorhood -warriorism -warriorlike -warriorship -warriorwise -warrok -Warsaw -warsaw -warse -warsel -warship -warsle -warsler -warst -wart -warted -wartern -wartflower -warth -wartime -wartless -wartlet -wartlike -wartproof -wartweed -wartwort -warty -wartyback -Warua -Warundi -warve -warwards -Warwick -warwickite -warwolf -warworn -wary -was -wasabi -Wasagara -Wasandawi -Wasango -Wasat -Wasatch -Wasco -wase -Wasegua -wasel -wash -washability -washable -washableness -Washaki -washaway -washbasin -washbasket -washboard -washbowl -washbrew -washcloth -washday -washdish -washdown -washed -washen -washer -washerless -washerman -washerwife -washerwoman -washery -washeryman -washhand -washhouse -washin -washiness -washing -Washington -Washingtonia -Washingtonian -Washingtoniana -Washita -washland -washmaid -washman -Washo -Washoan -washoff -washout -washpot -washproof -washrag -washroad -washroom -washshed -washstand -washtail -washtray -washtrough -washtub -washway -washwoman -washwork -washy -Wasir -wasnt -Wasoga -Wasp -wasp -waspen -wasphood -waspily -waspish -waspishly -waspishness -wasplike -waspling -waspnesting -waspy -wassail -wassailer -wassailous -wassailry -wassie -wast -wastable -wastage -waste -wastebasket -wasteboard -wasted -wasteful -wastefully -wastefulness -wastel -wasteland -wastelbread -wasteless -wasteman -wastement -wasteness -wastepaper -wasteproof -waster -wasterful -wasterfully -wasterfulness -wastethrift -wasteword -wasteyard -wasting -wastingly -wastingness -wastland -wastrel -wastrife -wasty -Wasukuma -Waswahili -Wat -wat -Watala -watap -watch -watchable -watchboat -watchcase -watchcry -watchdog -watched -watcher -watchfree -watchful -watchfully -watchfulness -watchglassful -watchhouse -watching -watchingly -watchkeeper -watchless -watchlessness -watchmaker -watchmaking -watchman -watchmanly -watchmanship -watchmate -watchment -watchout -watchtower -watchwise -watchwoman -watchword -watchwork -water -waterage -waterbailage -waterbelly -Waterberg -waterboard -waterbok -waterbosh -waterbrain -waterchat -watercup -waterdoe -waterdrop -watered -waterer -waterfall -waterfinder -waterflood -waterfowl -waterfront -waterhead -waterhorse -waterie -waterily -wateriness -watering -wateringly -wateringman -waterish -waterishly -waterishness -Waterlander -Waterlandian -waterleave -waterless -waterlessly -waterlessness -waterlike -waterline -waterlog -waterlogged -waterloggedness -waterlogger -waterlogging -Waterloo -waterman -watermanship -watermark -watermaster -watermelon -watermonger -waterphone -waterpot -waterproof -waterproofer -waterproofing -waterproofness -waterquake -waterscape -watershed -watershoot -waterside -watersider -waterskin -watersmeet -waterspout -waterstead -watertight -watertightal -watertightness -waterward -waterwards -waterway -waterweed -waterwise -waterwoman -waterwood -waterwork -waterworker -waterworm -waterworn -waterwort -watery -wath -wathstead -Watsonia -watt -wattage -wattape -wattle -wattlebird -wattled -wattless -wattlework -wattling -wattman -wattmeter -Watusi -wauble -wauch -wauchle -waucht -wauf -waugh -waughy -wauken -waukit -waukrife -waul -waumle -wauner -wauns -waup -waur -Waura -wauregan -wauve -wavable -wavably -Wave -wave -waved -waveless -wavelessly -wavelessness -wavelet -wavelike -wavellite -wavemark -wavement -wavemeter -waveproof -waver -waverable -waverer -wavering -waveringly -waveringness -waverous -wavery -waveson -waveward -wavewise -wavey -wavicle -wavily -waviness -waving -wavingly -Wavira -wavy -waw -wawa -wawah -wawaskeesh -wax -waxberry -waxbill -waxbird -waxbush -waxchandler -waxchandlery -waxen -waxer -waxflower -Waxhaw -waxhearted -waxily -waxiness -waxing -waxingly -waxlike -waxmaker -waxmaking -waxman -waxweed -waxwing -waxwork -waxworker -waxworking -waxy -way -wayaka -wayang -Wayao -wayback -wayberry -waybill -waybird -waybook -waybread -waybung -wayfare -wayfarer -wayfaring -wayfaringly -wayfellow -waygang -waygate -waygoing -waygone -waygoose -wayhouse -waying -waylaid -waylaidlessness -waylay -waylayer -wayleave -wayless -waymaker -wayman -waymark -waymate -Wayne -waypost -ways -wayside -waysider -waysliding -waythorn -wayward -waywarden -waywardly -waywardness -waywiser -waywode -waywodeship -wayworn -waywort -wayzgoose -Wazir -we -Wea -weak -weakbrained -weaken -weakener -weakening -weakfish -weakhanded -weakhearted -weakheartedly -weakheartedness -weakish -weakishly -weakishness -weakliness -weakling -weakly -weakmouthed -weakness -weaky -weal -weald -Wealden -wealdsman -wealth -wealthily -wealthiness -wealthless -wealthmaker -wealthmaking -wealthmonger -Wealthy -wealthy -weam -wean -weanable -weanedness -weanel -weaner -weanling -Weanoc -weanyer -Weapemeoc -weapon -weaponed -weaponeer -weaponless -weaponmaker -weaponmaking -weaponproof -weaponry -weaponshaw -weaponshow -weaponshowing -weaponsmith -weaponsmithy -wear -wearability -wearable -wearer -weariable -weariableness -wearied -weariedly -weariedness -wearier -weariful -wearifully -wearifulness -weariless -wearilessly -wearily -weariness -wearing -wearingly -wearish -wearishly -wearishness -wearisome -wearisomely -wearisomeness -wearproof -weary -wearying -wearyingly -weasand -weasel -weaselfish -weasellike -weaselly -weaselship -weaselskin -weaselsnout -weaselwise -weaser -weason -weather -weatherboard -weatherboarding -weatherbreak -weathercock -weathercockish -weathercockism -weathercocky -weathered -weatherer -weatherfish -weatherglass -weathergleam -weatherhead -weatherheaded -weathering -weatherliness -weatherly -weathermaker -weathermaking -weatherman -weathermost -weatherology -weatherproof -weatherproofed -weatherproofing -weatherproofness -weatherward -weatherworn -weathery -weavable -weave -weaveable -weaved -weavement -weaver -weaverbird -weaveress -weaving -weazen -weazened -weazeny -web -webbed -webber -webbing -webby -weber -Weberian -webeye -webfoot -webfooter -webless -weblike -webmaker -webmaking -webster -Websterian -websterite -webwork -webworm -wecht -wed -wedana -wedbed -wedbedrip -wedded -weddedly -weddedness -wedder -wedding -weddinger -wede -wedge -wedgeable -wedgebill -wedged -wedgelike -wedger -wedgewise -Wedgie -wedging -Wedgwood -wedgy -wedlock -Wednesday -wedset -wee -weeble -weed -weeda -weedable -weedage -weeded -weeder -weedery -weedful -weedhook -weediness -weedingtime -weedish -weedless -weedlike -weedling -weedow -weedproof -weedy -week -weekday -weekend -weekender -weekly -weekwam -weel -weelfard -weelfaured -weemen -ween -weendigo -weeness -weening -weenong -weeny -weep -weepable -weeper -weepered -weepful -weeping -weepingly -weeps -weepy -weesh -weeshy -weet -weetbird -weetless -weever -weevil -weeviled -weevillike -weevilproof -weevily -weewow -weeze -weft -weftage -wefted -wefty -Wega -wegenerian -wegotism -wehrlite -Wei -weibyeite -weichselwood -Weierstrassian -Weigela -weigelite -weigh -weighable -weighage -weighbar -weighbauk -weighbridge -weighbridgeman -weighed -weigher -weighership -weighhouse -weighin -weighing -weighman -weighment -weighshaft -weight -weightchaser -weighted -weightedly -weightedness -weightily -weightiness -weighting -weightless -weightlessly -weightlessness -weightometer -weighty -weinbergerite -Weinmannia -weinschenkite -weir -weirangle -weird -weirdful -weirdish -weirdless -weirdlessness -weirdlike -weirdliness -weirdly -weirdness -weirdsome -weirdward -weirdwoman -weiring -weisbachite -weiselbergite -weism -Weismannian -Weismannism -weissite -Weissnichtwo -Weitspekan -wejack -weka -wekau -wekeen -weki -welcome -welcomeless -welcomely -welcomeness -welcomer -welcoming -welcomingly -weld -weldability -weldable -welder -welding -weldless -weldment -weldor -Welf -welfare -welfaring -Welfic -welk -welkin -welkinlike -well -wellat -wellaway -wellborn -wellcurb -wellhead -wellhole -welling -wellington -Wellingtonia -wellish -wellmaker -wellmaking -wellman -wellnear -wellness -wellring -Wellsian -wellside -wellsite -wellspring -wellstead -wellstrand -welly -wellyard -wels -Welsh -welsh -welsher -Welshery -Welshism -Welshland -Welshlike -Welshman -Welshness -Welshry -Welshwoman -Welshy -welsium -welt -welted -welter -welterweight -welting -Welwitschia -wem -wemless -wen -wench -wencher -wenchless -wenchlike -Wenchow -Wenchowese -Wend -wend -wende -Wendell -Wendi -Wendic -Wendish -Wendy -wene -Wenlock -Wenlockian -wennebergite -wennish -wenny -Wenonah -Wenrohronon -went -wentletrap -wenzel -wept -wer -Werchowinci -were -werebear -werecalf -werefolk -werefox -werehyena -werejaguar -wereleopard -werent -weretiger -werewolf -werewolfish -werewolfism -werf -wergil -weri -Werner -Wernerian -Wernerism -wernerite -werowance -wert -Werther -Wertherian -Wertherism -wervel -Wes -wese -weskit -Wesleyan -Wesleyanism -Wesleyism -wesselton -Wessexman -west -westaway -westbound -weste -wester -westering -westerliness -westerly -westermost -western -westerner -westernism -westernization -westernize -westernly -westernmost -westerwards -westfalite -westing -westland -Westlander -westlandways -westmost -westness -Westphalian -Westralian -Westralianism -westward -westwardly -westwardmost -westwards -westy -wet -weta -wetback -wetbird -wetched -wetchet -wether -wetherhog -wetherteg -wetly -wetness -wettability -wettable -wetted -wetter -wetting -wettish -Wetumpka -weve -wevet -Wewenoc -wey -Wezen -Wezn -wha -whabby -whack -whacker -whacking -whacky -whafabout -whale -whaleback -whalebacker -whalebird -whaleboat -whalebone -whaleboned -whaledom -whalehead -whalelike -whaleman -whaler -whaleroad -whalery -whaleship -whaling -whalish -whally -whalm -whalp -whaly -wham -whamble -whame -whammle -whamp -whampee -whample -whan -whand -whang -whangable -whangam -whangdoodle -whangee -whanghee -whank -whap -whappet -whapuka -whapukee -whapuku -whar -whare -whareer -wharf -wharfage -wharfhead -wharfholder -wharfing -wharfinger -wharfland -wharfless -wharfman -wharfmaster -wharfrae -wharfside -wharl -wharp -wharry -whart -wharve -whase -whasle -what -whata -whatabouts -whatever -whatkin -whatlike -whatna -whatness -whatnot -whatreck -whats -whatso -whatsoeer -whatsoever -whatsomever -whatten -whau -whauk -whaup -whaur -whauve -wheal -whealworm -whealy -wheam -wheat -wheatbird -wheatear -wheateared -wheaten -wheatgrower -wheatland -wheatless -wheatlike -wheatstalk -wheatworm -wheaty -whedder -whee -wheedle -wheedler -wheedlesome -wheedling -wheedlingly -wheel -wheelage -wheelband -wheelbarrow -wheelbarrowful -wheelbird -wheelbox -wheeldom -wheeled -wheeler -wheelery -wheelhouse -wheeling -wheelingly -wheelless -wheellike -wheelmaker -wheelmaking -wheelman -wheelrace -wheelroad -wheelsman -wheelsmith -wheelspin -wheelswarf -wheelway -wheelwise -wheelwork -wheelwright -wheelwrighting -wheely -wheem -wheen -wheencat -wheenge -wheep -wheeple -wheer -wheerikins -wheesht -wheetle -wheeze -wheezer -wheezily -wheeziness -wheezingly -wheezle -wheezy -wheft -whein -whekau -wheki -whelk -whelked -whelker -whelklike -whelky -whelm -whelp -whelphood -whelpish -whelpless -whelpling -whelve -whemmel -when -whenabouts -whenas -whence -whenceeer -whenceforth -whenceforward -whencesoeer -whencesoever -whencever -wheneer -whenever -whenness -whenso -whensoever -whensomever -where -whereabout -whereabouts -whereafter -whereanent -whereas -whereat -whereaway -whereby -whereer -wherefor -wherefore -wherefrom -wherein -whereinsoever -whereinto -whereness -whereof -whereon -whereout -whereover -whereso -wheresoeer -wheresoever -wheresomever -wherethrough -wheretill -whereto -wheretoever -wheretosoever -whereunder -whereuntil -whereunto -whereup -whereupon -wherever -wherewith -wherewithal -wherret -wherrit -wherry -wherryman -whet -whether -whetile -whetrock -whetstone -whetter -whew -whewellite -whewer -whewl -whewt -whey -wheybeard -wheyey -wheyeyness -wheyface -wheyfaced -wheyish -wheyishness -wheylike -wheyness -whiba -which -whichever -whichsoever -whichway -whichways -whick -whicken -whicker -whid -whidah -whidder -whiff -whiffenpoof -whiffer -whiffet -whiffle -whiffler -whifflery -whiffletree -whiffling -whifflingly -whiffy -whift -Whig -whig -Whiggamore -whiggamore -Whiggarchy -Whiggery -Whiggess -Whiggification -Whiggify -Whiggish -Whiggishly -Whiggishness -Whiggism -Whiglet -Whigling -whigmaleerie -whigship -whikerby -while -whileen -whilere -whiles -whilie -whilk -Whilkut -whill -whillaballoo -whillaloo -whillilew -whilly -whillywha -whilock -whilom -whils -whilst -whilter -whim -whimberry -whimble -whimbrel -whimling -whimmy -whimper -whimperer -whimpering -whimperingly -whimsey -whimsic -whimsical -whimsicality -whimsically -whimsicalness -whimsied -whimstone -whimwham -whin -whinberry -whinchacker -whinchat -whincheck -whincow -whindle -whine -whiner -whinestone -whing -whinge -whinger -whininess -whiningly -whinnel -whinner -whinnock -whinny -whinstone -whiny -whinyard -whip -whipbelly -whipbird -whipcat -whipcord -whipcordy -whipcrack -whipcracker -whipcraft -whipgraft -whipjack -whipking -whiplash -whiplike -whipmaker -whipmaking -whipman -whipmanship -whipmaster -whippa -whippable -whipparee -whipped -whipper -whippersnapper -whippertail -whippet -whippeter -whippiness -whipping -whippingly -whippletree -whippoorwill -whippost -whippowill -whippy -whipsaw -whipsawyer -whipship -whipsocket -whipstaff -whipstalk -whipstall -whipster -whipstick -whipstitch -whipstock -whipt -whiptail -whiptree -whipwise -whipworm -whir -whirken -whirl -whirlabout -whirlblast -whirlbone -whirlbrain -whirled -whirler -whirley -whirlgig -whirlicane -whirligig -whirlimagig -whirling -whirlingly -whirlmagee -whirlpool -whirlpuff -whirlwig -whirlwind -whirlwindish -whirlwindy -whirly -whirlygigum -whirret -whirrey -whirroo -whirry -whirtle -whish -whisk -whisker -whiskerage -whiskerando -whiskerandoed -whiskered -whiskerer -whiskerette -whiskerless -whiskerlike -whiskery -whiskey -whiskful -whiskied -whiskified -whisking -whiskingly -whisky -whiskyfied -whiskylike -whisp -whisper -whisperable -whisperation -whispered -whisperer -whisperhood -whispering -whisperingly -whisperingness -whisperless -whisperous -whisperously -whisperproof -whispery -whissle -Whisson -whist -whister -whisterpoop -whistle -whistlebelly -whistlefish -whistlelike -whistler -Whistlerian -whistlerism -whistlewing -whistlewood -whistlike -whistling -whistlingly -whistly -whistness -Whistonian -Whit -whit -white -whiteback -whitebait -whitebark -whitebeard -whitebelly -whitebill -whitebird -whiteblaze -whiteblow -whitebottle -Whiteboy -Whiteboyism -whitecap -whitecapper -Whitechapel -whitecoat -whitecomb -whitecorn -whitecup -whited -whiteface -Whitefieldian -Whitefieldism -Whitefieldite -whitefish -whitefisher -whitefishery -Whitefoot -whitefoot -whitefootism -whitehanded -whitehass -whitehawse -whitehead -whiteheart -whitehearted -whitelike -whitely -whiten -whitener -whiteness -whitening -whitenose -whitepot -whiteroot -whiterump -whites -whitesark -whiteseam -whiteshank -whiteside -whitesmith -whitestone -whitetail -whitethorn -whitethroat -whitetip -whitetop -whitevein -whitewall -whitewards -whiteware -whitewash -whitewasher -whiteweed -whitewing -whitewood -whiteworm -whitewort -whitfinch -whither -whitherso -whithersoever -whitherto -whitherward -whiting -whitish -whitishness -whitleather -Whitleyism -whitling -whitlow -whitlowwort -Whitmanese -Whitmanesque -Whitmanism -Whitmanize -Whitmonday -whitneyite -whitrack -whits -whitster -Whitsun -Whitsunday -Whitsuntide -whittaw -whitten -whittener -whitter -whitterick -whittle -whittler -whittling -whittret -whittrick -whity -whiz -whizgig -whizzer -whizzerman -whizziness -whizzing -whizzingly -whizzle -who -whoa -whodunit -whoever -whole -wholehearted -wholeheartedly -wholeheartedness -wholeness -wholesale -wholesalely -wholesaleness -wholesaler -wholesome -wholesomely -wholesomeness -wholewise -wholly -whom -whomble -whomever -whomso -whomsoever -whone -whoo -whoof -whoop -whoopee -whooper -whooping -whoopingly -whooplike -whoops -whoosh -whop -whopper -whopping -whorage -whore -whoredom -whorelike -whoremaster -whoremasterly -whoremastery -whoremonger -whoremonging -whoreship -whoreson -whorish -whorishly -whorishness -whorl -whorled -whorlflower -whorly -whorlywort -whort -whortle -whortleberry -whose -whosen -whosesoever -whosever -whosomever -whosumdever -whud -whuff -whuffle -whulk -whulter -whummle -whun -whunstane -whup -whush -whuskie -whussle -whute -whuther -whutter -whuttering -whuz -why -whyever -whyfor -whyness -whyo -wi -wice -Wichita -wicht -wichtisite -wichtje -wick -wickawee -wicked -wickedish -wickedlike -wickedly -wickedness -wicken -wicker -wickerby -wickerware -wickerwork -wickerworked -wickerworker -wicket -wicketkeep -wicketkeeper -wicketkeeping -wicketwork -wicking -wickiup -wickless -wickup -wicky -wicopy -wid -widbin -widdendream -widder -widdershins -widdifow -widdle -widdy -wide -widegab -widehearted -widely -widemouthed -widen -widener -wideness -widespread -widespreadedly -widespreadly -widespreadness -widewhere -widework -widgeon -widish -widow -widowed -widower -widowered -widowerhood -widowership -widowery -widowhood -widowish -widowlike -widowly -widowman -widowy -width -widthless -widthway -widthways -widthwise -widu -wield -wieldable -wielder -wieldiness -wieldy -wiener -wienerwurst -wienie -wierangle -wiesenboden -wife -wifecarl -wifedom -wifehood -wifeism -wifekin -wifeless -wifelessness -wifelet -wifelike -wifeling -wifelkin -wifely -wifeship -wifeward -wifie -wifiekie -wifish -wifock -wig -wigan -wigdom -wigful -wigged -wiggen -wigger -wiggery -wigging -wiggish -wiggishness -wiggism -wiggle -wiggler -wiggly -wiggy -wight -wightly -wightness -wigless -wiglet -wiglike -wigmaker -wigmaking -wigtail -wigwag -wigwagger -wigwam -wiikite -Wikeno -Wikstroemia -Wilbur -Wilburite -wild -wildbore -wildcat -wildcatter -wildcatting -wildebeest -wilded -wilder -wilderedly -wildering -wilderment -wilderness -wildfire -wildfowl -wildgrave -wilding -wildish -wildishly -wildishness -wildlife -wildlike -wildling -wildly -wildness -wildsome -wildwind -wile -wileful -wileless -wileproof -Wilfred -wilga -wilgers -Wilhelm -Wilhelmina -Wilhelmine -wilily -wiliness -wilk -wilkeite -wilkin -Wilkinson -Will -will -willable -willawa -willed -willedness -willemite -willer -willet -willey -willeyer -willful -willfully -willfulness -William -williamsite -Williamsonia -Williamsoniaceae -Willie -willie -willier -willies -willing -willinghearted -willinghood -willingly -willingness -williwaw -willmaker -willmaking -willness -willock -willow -willowbiter -willowed -willower -willowish -willowlike -willowware -willowweed -willowworm -willowwort -willowy -Willugbaeya -Willy -willy -willyard -willyart -willyer -Wilmer -wilsome -wilsomely -wilsomeness -Wilson -Wilsonian -wilt -wilter -Wilton -wiltproof -Wiltshire -wily -wim -wimberry -wimble -wimblelike -wimbrel -wime -wimick -wimple -wimpleless -wimplelike -Win -win -winberry -wince -wincer -wincey -winch -wincher -Winchester -winchman -wincing -wincingly -Wind -wind -windable -windage -windbag -windbagged -windbaggery -windball -windberry -windbibber -windbore -windbracing -windbreak -Windbreaker -windbreaker -windbroach -windclothes -windcuffer -winddog -winded -windedly -windedness -winder -windermost -Windesheimer -windfall -windfallen -windfanner -windfirm -windfish -windflaw -windflower -windgall -windgalled -windhole -windhover -windigo -windily -windiness -winding -windingly -windingness -windjammer -windjamming -windlass -windlasser -windle -windles -windless -windlessly -windlessness -windlestrae -windlestraw -windlike -windlin -windling -windmill -windmilly -windock -windore -window -windowful -windowless -windowlessness -windowlet -windowlight -windowlike -windowmaker -windowmaking -windowman -windowpane -windowpeeper -windowshut -windowward -windowwards -windowwise -windowy -windpipe -windplayer -windproof -windring -windroad -windroot -windrow -windrower -windscreen -windshield -windshock -Windsor -windsorite -windstorm -windsucker -windtight -windup -windward -windwardly -windwardmost -windwardness -windwards -windway -windwayward -windwaywardly -windy -wine -wineball -wineberry -winebibber -winebibbery -winebibbing -Winebrennerian -wineconner -wined -wineglass -wineglassful -winegrower -winegrowing -winehouse -wineless -winelike -winemay -winepot -winer -winery -Winesap -wineshop -wineskin -winesop -winetaster -winetree -winevat -Winfred -winful -wing -wingable -wingbeat -wingcut -winged -wingedly -wingedness -winger -wingfish -winghanded -wingle -wingless -winglessness -winglet -winglike -wingman -wingmanship -wingpiece -wingpost -wingseed -wingspread -wingstem -wingy -Winifred -winish -wink -winkel -winkelman -winker -winkered -winking -winkingly -winkle -winklehawk -winklehole -winklet -winly -winna -winnable -winnard -Winnebago -Winnecowet -winnel -winnelstrae -winner -Winnie -winning -winningly -winningness -winnings -winninish -Winnipesaukee -winnle -winnonish -winnow -winnower -winnowing -winnowingly -Winona -winrace -winrow -winsome -winsomely -winsomeness -Winston -wint -winter -Winteraceae -winterage -Winteranaceae -winterberry -winterbloom -winterbourne -winterdykes -wintered -winterer -winterfeed -wintergreen -winterhain -wintering -winterish -winterishly -winterishness -winterization -winterize -winterkill -winterkilling -winterless -winterlike -winterliness -winterling -winterly -winterproof -wintersome -wintertide -wintertime -winterward -winterwards -winterweed -wintle -wintrify -wintrily -wintriness -wintrish -wintrous -wintry -Wintun -winy -winze -winzeman -wipe -wiper -wippen -wips -wir -wirable -wirble -wird -wire -wirebar -wirebird -wired -wiredancer -wiredancing -wiredraw -wiredrawer -wiredrawn -wirehair -wireless -wirelessly -wirelessness -wirelike -wiremaker -wiremaking -wireman -wiremonger -Wirephoto -wirepull -wirepuller -wirepulling -wirer -wiresmith -wirespun -wiretail -wireway -wireweed -wirework -wireworker -wireworking -wireworks -wireworm -wirily -wiriness -wiring -wirl -wirling -Wiros -wirr -wirra -wirrah -wirrasthru -wiry -wis -Wisconsinite -wisdom -wisdomful -wisdomless -wisdomproof -wisdomship -wise -wiseacre -wiseacred -wiseacredness -wiseacredom -wiseacreish -wiseacreishness -wiseacreism -wisecrack -wisecracker -wisecrackery -wisehead -wisehearted -wiseheartedly -wiseheimer -wiselike -wiseling -wisely -wiseman -wisen -wiseness -wisenheimer -wisent -wiser -wiseweed -wisewoman -wish -wisha -wishable -wishbone -wished -wishedly -wisher -wishful -wishfully -wishfulness -wishing -wishingly -wishless -wishly -wishmay -wishness -Wishoskan -Wishram -wisht -wishtonwish -Wisigothic -wisket -wiskinky -wisp -wispish -wisplike -wispy -wiss -wisse -wissel -wist -Wistaria -wistaria -wiste -wistened -Wisteria -wisteria -wistful -wistfully -wistfulness -wistit -wistiti -wistless -wistlessness -wistonwish -wit -witan -Witbooi -witch -witchbells -witchcraft -witched -witchedly -witchen -witchering -witchery -witchet -witchetty -witchhood -witching -witchingly -witchleaf -witchlike -witchman -witchmonger -witchuck -witchweed -witchwife -witchwoman -witchwood -witchwork -witchy -witcraft -wite -witeless -witenagemot -witepenny -witess -witful -with -withal -withamite -Withania -withdraught -withdraw -withdrawable -withdrawal -withdrawer -withdrawing -withdrawingness -withdrawment -withdrawn -withdrawnness -withe -withen -wither -witherband -withered -witheredly -witheredness -witherer -withergloom -withering -witheringly -witherite -witherly -withernam -withers -withershins -withertip -witherwards -witherweight -withery -withewood -withheld -withhold -withholdable -withholdal -withholder -withholdment -within -withindoors -withinside -withinsides -withinward -withinwards -withness -witholden -without -withoutdoors -withouten -withoutforth -withoutside -withoutwards -withsave -withstand -withstander -withstandingness -withstay -withstood -withstrain -withvine -withwind -withy -withypot -withywind -witjar -witless -witlessly -witlessness -witlet -witling -witloof -witmonger -witness -witnessable -witnessdom -witnesser -witney -witneyer -Witoto -witship -wittal -wittawer -witteboom -witted -witter -wittering -witticaster -wittichenite -witticism -witticize -wittified -wittily -wittiness -witting -wittingly -wittol -wittolly -witty -Witumki -witwall -witzchoura -wive -wiver -wivern -Wiyat -Wiyot -wiz -wizard -wizardess -wizardism -wizardlike -wizardly -wizardry -wizardship -wizen -wizened -wizenedness -wizier -wizzen -wloka -wo -woad -woader -woadman -woadwaxen -woady -woak -woald -woan -wob -wobbegong -wobble -wobbler -wobbliness -wobbling -wobblingly -wobbly -wobster -wocheinite -Wochua -wod -woddie -wode -Wodenism -wodge -wodgy -woe -woebegone -woebegoneness -woebegonish -woeful -woefully -woefulness -woehlerite -woesome -woevine -woeworn -woffler -woft -wog -wogiet -Wogulian -woibe -wokas -woke -wokowi -wold -woldlike -woldsman -woldy -Wolf -wolf -wolfachite -wolfberry -wolfdom -wolfen -wolfer -Wolffia -Wolffian -Wolffianism -Wolfgang -wolfhood -wolfhound -Wolfian -wolfish -wolfishly -wolfishness -wolfkin -wolfless -wolflike -wolfling -wolfram -wolframate -wolframic -wolframine -wolframinium -wolframite -wolfsbane -wolfsbergite -wolfskin -wolfward -wolfwards -wollastonite -wollomai -wollop -Wolof -wolter -wolve -wolveboon -wolver -wolverine -woman -womanbody -womandom -womanfolk -womanfully -womanhead -womanhearted -womanhood -womanhouse -womanish -womanishly -womanishness -womanism -womanist -womanity -womanization -womanize -womanizer -womankind -womanless -womanlike -womanliness -womanly -womanmuckle -womanness -womanpost -womanproof -womanship -womanways -womanwise -womb -wombat -wombed -womble -wombstone -womby -womenfolk -womenfolks -womenkind -womera -wommerala -won -wonder -wonderberry -wonderbright -wondercraft -wonderer -wonderful -wonderfully -wonderfulness -wondering -wonderingly -wonderland -wonderlandish -wonderless -wonderment -wondermonger -wondermongering -wondersmith -wondersome -wonderstrong -wonderwell -wonderwork -wonderworthy -wondrous -wondrously -wondrousness -wone -wonegan -wong -wonga -Wongara -wongen -wongshy -wongsky -woning -wonky -wonna -wonned -wonner -wonning -wonnot -wont -wonted -wontedly -wontedness -wonting -woo -wooable -wood -woodagate -woodbark -woodbin -woodbind -woodbine -woodbined -woodbound -woodburytype -woodbush -woodchat -woodchuck -woodcock -woodcockize -woodcracker -woodcraft -woodcrafter -woodcraftiness -woodcraftsman -woodcrafty -woodcut -woodcutter -woodcutting -wooded -wooden -woodendite -woodenhead -woodenheaded -woodenheadedness -woodenly -woodenness -woodenware -woodenweary -woodeny -woodfish -woodgeld -woodgrub -woodhack -woodhacker -woodhole -woodhorse -woodhouse -woodhung -woodine -woodiness -wooding -woodish -woodjobber -woodkern -woodknacker -woodland -woodlander -woodless -woodlessness -woodlet -woodlike -woodlocked -woodly -woodman -woodmancraft -woodmanship -woodmonger -woodmote -woodness -woodpeck -woodpecker -woodpenny -woodpile -woodprint -woodranger -woodreeve -woodrick -woodrock -woodroof -woodrow -woodrowel -Woodruff -woodruff -woodsere -woodshed -woodshop -Woodsia -woodside -woodsilver -woodskin -woodsman -woodspite -woodstone -woodsy -woodwall -woodward -Woodwardia -woodwardship -woodware -woodwax -woodwaxen -woodwise -woodwork -woodworker -woodworking -woodworm -woodwose -woodwright -Woody -woody -woodyard -wooer -woof -woofed -woofell -woofer -woofy -woohoo -wooing -wooingly -wool -woold -woolder -woolding -wooled -woolen -woolenet -woolenization -woolenize -wooler -woolert -woolfell -woolgatherer -woolgathering -woolgrower -woolgrowing -woolhead -wooliness -woollike -woolly -woollyhead -woollyish -woolman -woolpack -woolpress -woolsack -woolsey -woolshearer -woolshearing -woolshears -woolshed -woolskin -woolsorter -woolsorting -woolsower -woolstock -woolulose -Woolwa -woolwasher -woolweed -woolwheel -woolwinder -woolwork -woolworker -woolworking -woom -woomer -woomerang -woon -woons -woorali -woorari -woosh -wootz -woozle -woozy -wop -woppish -wops -worble -worcester -word -wordable -wordably -wordage -wordbook -wordbuilding -wordcraft -wordcraftsman -worded -Worden -worder -wordily -wordiness -wording -wordish -wordishly -wordishness -wordle -wordless -wordlessly -wordlessness -wordlike -wordlorist -wordmaker -wordmaking -wordman -wordmanship -wordmonger -wordmongering -wordmongery -wordplay -wordsman -wordsmanship -wordsmith -wordspite -wordster -Wordsworthian -Wordsworthianism -wordy -wore -work -workability -workable -workableness -workaday -workaway -workbag -workbasket -workbench -workbook -workbox -workbrittle -workday -worked -worker -workfellow -workfolk -workfolks -workgirl -workhand -workhouse -workhoused -working -workingly -workingman -workingwoman -workless -worklessness -workloom -workman -workmanlike -workmanlikeness -workmanliness -workmanly -workmanship -workmaster -workmistress -workout -workpan -workpeople -workpiece -workplace -workroom -works -workship -workshop -worksome -workstand -worktable -worktime -workways -workwise -workwoman -workwomanlike -workwomanly -worky -workyard -world -worlded -worldful -worldish -worldless -worldlet -worldlike -worldlily -worldliness -worldling -worldly -worldmaker -worldmaking -worldproof -worldquake -worldward -worldwards -worldway -worldy -worm -wormed -wormer -wormhole -wormholed -wormhood -Wormian -wormil -worming -wormless -wormlike -wormling -wormproof -wormroot -wormseed -wormship -wormweed -wormwood -wormy -worn -wornil -wornness -worral -worriable -worricow -worried -worriedly -worriedness -worrier -worriless -worriment -worrisome -worrisomely -worrisomeness -worrit -worriter -worry -worrying -worryingly -worryproof -worrywart -worse -worsement -worsen -worseness -worsening -worser -worserment -worset -worship -worshipability -worshipable -worshiper -worshipful -worshipfully -worshipfulness -worshipingly -worshipless -worshipworth -worshipworthy -worst -worsted -wort -worth -worthful -worthfulness -worthiest -worthily -worthiness -worthless -worthlessly -worthlessness -worthship -worthward -worthy -wosbird -wot -wote -wots -wottest -wotteth -woubit -wouch -wouf -wough -would -wouldest -wouldnt -wouldst -wound -woundability -woundable -woundableness -wounded -woundedly -wounder -woundily -wounding -woundingly -woundless -wounds -woundwort -woundworth -woundy -wourali -wourari -wournil -wove -woven -Wovoka -wow -wowser -wowserdom -wowserian -wowserish -wowserism -wowsery -wowt -woy -Woyaway -wrack -wracker -wrackful -Wraf -wraggle -wrainbolt -wrainstaff -wrainstave -wraith -wraithe -wraithlike -wraithy -wraitly -wramp -wran -wrang -wrangle -wrangler -wranglership -wranglesome -wranglingly -wrannock -wranny -wrap -wrappage -wrapped -wrapper -wrapperer -wrappering -wrapping -wraprascal -wrasse -wrastle -wrastler -wrath -wrathful -wrathfully -wrathfulness -wrathily -wrathiness -wrathlike -wrathy -wraw -wrawl -wrawler -wraxle -wreak -wreakful -wreakless -wreat -wreath -wreathage -wreathe -wreathed -wreathen -wreather -wreathingly -wreathless -wreathlet -wreathlike -wreathmaker -wreathmaking -wreathwise -wreathwork -wreathwort -wreathy -wreck -wreckage -wrecker -wreckfish -wreckful -wrecking -wrecky -Wren -wren -wrench -wrenched -wrencher -wrenchingly -wrenlet -wrenlike -wrentail -wrest -wrestable -wrester -wresting -wrestingly -wrestle -wrestler -wrestlerlike -wrestling -wretch -wretched -wretchedly -wretchedness -wretchless -wretchlessly -wretchlessness -wretchock -wricht -wrick -wride -wried -wrier -wriest -wrig -wriggle -wriggler -wrigglesome -wrigglingly -wriggly -wright -wrightine -wring -wringbolt -wringer -wringman -wringstaff -wrinkle -wrinkleable -wrinkled -wrinkledness -wrinkledy -wrinkleful -wrinkleless -wrinkleproof -wrinklet -wrinkly -wrist -wristband -wristbone -wristed -wrister -wristfall -wristikin -wristlet -wristlock -wristwork -writ -writability -writable -writation -writative -write -writeable -writee -writer -writeress -writerling -writership -writh -writhe -writhed -writhedly -writhedness -writhen -writheneck -writher -writhing -writhingly -writhy -writing -writinger -writmaker -writmaking -writproof -written -writter -wrive -wrizzled -wro -wrocht -wroke -wroken -wrong -wrongdoer -wrongdoing -wronged -wronger -wrongful -wrongfully -wrongfulness -wronghead -wrongheaded -wrongheadedly -wrongheadedness -wronghearted -wrongheartedly -wrongheartedness -wrongish -wrongless -wronglessly -wrongly -wrongness -wrongous -wrongously -wrongousness -wrongwise -Wronskian -wrossle -wrote -wroth -wrothful -wrothfully -wrothily -wrothiness -wrothly -wrothsome -wrothy -wrought -wrox -wrung -wrungness -wry -wrybill -wryly -wrymouth -wryneck -wryness -wrytail -Wu -Wuchereria -wud -wuddie -wudge -wudu -wugg -wulfenite -wulk -wull -wullawins -wullcat -Wullie -wulliwa -wumble -wumman -wummel -wun -Wundtian -wungee -wunna -wunner -wunsome -wup -wur -wurley -wurmal -Wurmian -wurrus -wurset -wurtzilite -wurtzite -Wurzburger -wurzel -wush -wusp -wuss -wusser -wust -wut -wuther -wuzu -wuzzer -wuzzle -wuzzy -wy -Wyandot -Wyandotte -Wycliffian -Wycliffism -Wycliffist -Wycliffite -wyde -wye -Wyethia -wyke -Wykehamical -Wykehamist -wyle -wyliecoat -wymote -wyn -wynd -wyne -wynkernel -wynn -Wyomingite -wyomingite -wype -wyson -wyss -wyve -wyver -X -x -xanthaline -xanthamic -xanthamide -xanthane -xanthate -xanthation -xanthein -xanthelasma -xanthelasmic -xanthelasmoidea -xanthene -Xanthian -xanthic -xanthide -Xanthidium -xanthin -xanthine -xanthinuria -xanthione -Xanthisma -xanthite -Xanthium -xanthiuria -xanthocarpous -Xanthocephalus -Xanthoceras -Xanthochroi -xanthochroia -Xanthochroic -xanthochroid -xanthochroism -xanthochromia -xanthochromic -xanthochroous -xanthocobaltic -xanthocone -xanthoconite -xanthocreatinine -xanthocyanopsia -xanthocyanopsy -xanthocyanopy -xanthoderm -xanthoderma -xanthodont -xanthodontous -xanthogen -xanthogenamic -xanthogenamide -xanthogenate -xanthogenic -xantholeucophore -xanthoma -xanthomata -xanthomatosis -xanthomatous -Xanthomelanoi -xanthomelanous -xanthometer -Xanthomonas -xanthomyeloma -xanthone -xanthophane -xanthophore -xanthophose -Xanthophyceae -xanthophyll -xanthophyllite -xanthophyllous -Xanthopia -xanthopia -xanthopicrin -xanthopicrite -xanthoproteic -xanthoprotein -xanthoproteinic -xanthopsia -xanthopsin -xanthopsydracia -xanthopterin -xanthopurpurin -xanthorhamnin -Xanthorrhiza -Xanthorrhoea -xanthorrhoea -xanthosiderite -xanthosis -Xanthosoma -xanthospermous -xanthotic -Xanthoura -xanthous -Xanthoxalis -xanthoxenite -xanthoxylin -xanthuria -xanthydrol -xanthyl -xarque -Xaverian -xebec -Xema -xenacanthine -Xenacanthini -xenagogue -xenagogy -Xenarchi -Xenarthra -xenarthral -xenarthrous -xenelasia -xenelasy -xenia -xenial -xenian -Xenicidae -Xenicus -xenium -xenobiosis -xenoblast -Xenocratean -Xenocratic -xenocryst -xenodochium -xenogamous -xenogamy -xenogenesis -xenogenetic -xenogenic -xenogenous -xenogeny -xenolite -xenolith -xenolithic -xenomania -xenomaniac -Xenomi -Xenomorpha -xenomorphic -xenomorphosis -xenon -xenoparasite -xenoparasitism -xenopeltid -Xenopeltidae -Xenophanean -xenophile -xenophilism -xenophobe -xenophobia -xenophobian -xenophobism -xenophoby -Xenophonic -Xenophontean -Xenophontian -Xenophontic -Xenophontine -Xenophora -xenophoran -Xenophoridae -xenophthalmia -xenophya -xenopodid -Xenopodidae -xenopodoid -Xenopsylla -xenopteran -Xenopteri -xenopterygian -Xenopterygii -Xenopus -Xenorhynchus -Xenos -xenosaurid -Xenosauridae -xenosauroid -Xenosaurus -xenotime -Xenurus -xenyl -xenylamine -xerafin -xeransis -Xeranthemum -xeranthemum -xerantic -xerarch -xerasia -Xeres -xeric -xerically -xeriff -xerocline -xeroderma -xerodermatic -xerodermatous -xerodermia -xerodermic -xerogel -xerography -xeroma -xeromata -xeromenia -xeromorph -xeromorphic -xeromorphous -xeromorphy -xeromyron -xeromyrum -xeronate -xeronic -xerophagia -xerophagy -xerophil -xerophile -xerophilous -xerophily -xerophobous -xerophthalmia -xerophthalmos -xerophthalmy -Xerophyllum -xerophyte -xerophytic -xerophytically -xerophytism -xeroprinting -xerosis -xerostoma -xerostomia -xerotes -xerotherm -xerotic -xerotocia -xerotripsis -Xerus -xi -Xicak -Xicaque -Ximenia -Xina -Xinca -Xipe -Xiphias -xiphias -xiphihumeralis -xiphiid -Xiphiidae -xiphiiform -xiphioid -xiphiplastra -xiphiplastral -xiphiplastron -xiphisterna -xiphisternal -xiphisternum -Xiphisura -xiphisuran -Xiphiura -Xiphius -xiphocostal -Xiphodon -Xiphodontidae -xiphodynia -xiphoid -xiphoidal -xiphoidian -xiphopagic -xiphopagous -xiphopagus -xiphophyllous -xiphosterna -xiphosternum -Xiphosura -xiphosuran -xiphosure -Xiphosuridae -xiphosurous -Xiphosurus -xiphuous -Xiphura -Xiphydria -xiphydriid -Xiphydriidae -Xiraxara -Xmas -xoana -xoanon -Xosa -xurel -xyla -xylan -Xylaria -Xylariaceae -xylate -Xyleborus -xylem -xylene -xylenol -xylenyl -xyletic -Xylia -xylic -xylidic -xylidine -Xylina -xylindein -xylinid -xylite -xylitol -xylitone -xylobalsamum -xylocarp -xylocarpous -Xylocopa -xylocopid -Xylocopidae -xylogen -xyloglyphy -xylograph -xylographer -xylographic -xylographical -xylographically -xylography -xyloid -xyloidin -xylol -xylology -xyloma -xylomancy -xylometer -xylon -xylonic -Xylonite -xylonitrile -Xylophaga -xylophagan -xylophage -xylophagid -Xylophagidae -xylophagous -Xylophagus -xylophilous -xylophone -xylophonic -xylophonist -Xylopia -xyloplastic -xylopyrography -xyloquinone -xylorcin -xylorcinol -xylose -xyloside -Xylosma -xylostroma -xylostromata -xylostromatoid -xylotile -xylotomist -xylotomous -xylotomy -Xylotrya -xylotypographic -xylotypography -xyloyl -xylyl -xylylene -xylylic -xyphoid -Xyrichthys -xyrid -Xyridaceae -xyridaceous -Xyridales -Xyris -xyst -xyster -xysti -xystos -xystum -xystus -Y -y -ya -yaba -yabber -yabbi -yabble -yabby -yabu -yacal -yacca -yachan -yacht -yachtdom -yachter -yachting -yachtist -yachtman -yachtmanship -yachtsman -yachtsmanlike -yachtsmanship -yachtswoman -yachty -yad -Yadava -yade -yaff -yaffingale -yaffle -yagger -yaghourt -yagi -Yagnob -yagourundi -Yagua -yagua -yaguarundi -yaguaza -yah -yahan -Yahgan -Yahganan -Yahoo -yahoo -Yahoodom -Yahooish -Yahooism -Yahuna -Yahuskin -Yahweh -Yahwism -Yahwist -Yahwistic -yair -yaird -yaje -yajeine -yajenine -Yajna -Yajnavalkya -yajnopavita -yak -Yaka -Yakala -yakalo -yakamik -Yakan -yakattalo -Yakima -yakin -yakka -yakman -Yakona -Yakonan -Yakut -Yakutat -yalb -Yale -yale -Yalensian -yali -yalla -yallaer -yallow -yam -Yamacraw -Yamamadi -yamamai -yamanai -yamaskite -Yamassee -Yamato -Yamel -yamen -Yameo -yamilke -yammadji -yammer -yamp -yampa -yamph -yamshik -yamstchik -yan -Yana -Yanan -yancopin -yander -yang -yangtao -yank -Yankee -Yankeedom -Yankeefy -Yankeeism -Yankeeist -Yankeeize -Yankeeland -Yankeeness -yanking -Yankton -Yanktonai -yanky -Yannigan -Yao -yaoort -yaourti -yap -yapa -yaply -Yapman -yapness -yapok -yapp -yapped -yapper -yappiness -yapping -yappingly -yappish -yappy -yapster -Yaqui -Yaquina -yar -yarak -yaray -yarb -Yarborough -yard -yardage -yardang -yardarm -yarder -yardful -yarding -yardkeep -yardland -yardman -yardmaster -yardsman -yardstick -yardwand -yare -yareta -yark -Yarkand -yarke -yarl -yarly -yarm -yarn -yarnen -yarner -yarnwindle -yarpha -yarr -yarraman -yarran -yarringle -yarrow -yarth -yarthen -Yaru -Yarura -Yaruran -Yaruro -yarwhelp -yarwhip -yas -yashiro -yashmak -Yasht -Yasna -yat -yataghan -yatalite -yate -yati -Yatigan -yatter -Yatvyag -Yauapery -yaud -yauld -yaupon -yautia -yava -Yavapai -yaw -yawl -yawler -yawlsman -yawmeter -yawn -yawner -yawney -yawnful -yawnfully -yawnily -yawniness -yawning -yawningly -yawnproof -yawnups -yawny -yawp -yawper -yawroot -yaws -yawweed -yawy -yaxche -yaya -Yazdegerdian -Yazoo -ycie -yday -ye -yea -yeah -yealing -yean -yeanling -year -yeara -yearbird -yearbook -yeard -yearday -yearful -yearling -yearlong -yearly -yearn -yearnful -yearnfully -yearnfulness -yearning -yearnling -yearock -yearth -yeast -yeastily -yeastiness -yeasting -yeastlike -yeasty -yeat -yeather -yed -yede -yee -yeel -yeelaman -yees -yegg -yeggman -yeguita -yeld -yeldrin -yeldrock -yelk -yell -yeller -yelling -yelloch -yellow -yellowammer -yellowback -yellowbelly -yellowberry -yellowbill -yellowbird -yellowcrown -yellowcup -yellowfin -yellowfish -yellowhammer -yellowhead -yellowing -yellowish -yellowishness -Yellowknife -yellowlegs -yellowly -yellowness -yellowroot -yellowrump -yellows -yellowseed -yellowshank -yellowshanks -yellowshins -yellowtail -yellowthorn -yellowthroat -yellowtop -yellowware -yellowweed -yellowwood -yellowwort -yellowy -yelm -yelmer -yelp -yelper -yelt -Yemen -Yemeni -Yemenic -Yemenite -yen -yender -Yengee -Yengeese -yeni -Yenisei -Yeniseian -yenite -yentnite -yeo -yeoman -yeomaness -yeomanette -yeomanhood -yeomanlike -yeomanly -yeomanry -yeomanwise -yeorling -yeowoman -yep -yer -Yerava -Yeraver -yerb -yerba -yercum -yerd -yere -yerga -yerk -yern -yerth -yes -yese -Yeshibah -Yeshiva -yeso -yesso -yest -yester -yesterday -yestereve -yestereven -yesterevening -yestermorn -yestermorning -yestern -yesternight -yesternoon -yesterweek -yesteryear -yestreen -yesty -yet -yeta -yetapa -yeth -yether -yetlin -yeuk -yeukieness -yeuky -yeven -yew -yex -yez -Yezdi -Yezidi -yezzy -ygapo -Yid -Yiddish -Yiddisher -Yiddishism -Yiddishist -yield -yieldable -yieldableness -yieldance -yielden -yielder -yielding -yieldingly -yieldingness -yieldy -yigh -Yikirgaulit -Yildun -yill -yilt -Yin -yin -yince -yinst -yip -yird -yirk -yirm -yirmilik -yirn -yirr -yirth -yis -yite -ym -yn -ynambu -yo -yobi -yocco -yochel -yock -yockel -yodel -yodeler -yodelist -yodh -yoe -yoga -yogasana -yogh -yoghurt -yogi -yogin -yogism -yogist -yogoite -yohimbe -yohimbi -yohimbine -yohimbinization -yohimbinize -yoi -yoick -yoicks -yojan -yojana -Yojuane -yok -yoke -yokeable -yokeableness -yokeage -yokefellow -yokel -yokeldom -yokeless -yokelish -yokelism -yokelry -yokemate -yokemating -yoker -yokewise -yokewood -yoking -Yokuts -yoky -yolden -Yoldia -yoldring -yolk -yolked -yolkiness -yolkless -yolky -yom -yomer -Yomud -yon -yoncopin -yond -yonder -Yonkalla -yonner -yonside -yont -yook -yoop -yor -yore -yoretime -york -Yorker -yorker -Yorkish -Yorkist -Yorkshire -Yorkshireism -Yorkshireman -Yoruba -Yoruban -yot -yotacism -yotacize -yote -you -youd -youden -youdendrift -youdith -youff -youl -young -youngberry -younger -younghearted -youngish -younglet -youngling -youngly -youngness -youngster -youngun -younker -youp -your -yourn -yours -yoursel -yourself -yourselves -youse -youth -youthen -youthful -youthfullity -youthfully -youthfulness -youthhead -youthheid -youthhood -youthily -youthless -youthlessness -youthlike -youthlikeness -youthsome -youthtide -youthwort -youthy -youve -youward -youwards -youze -yoven -yow -yowie -yowl -yowler -yowley -yowlring -yowt -yox -yoy -yperite -Yponomeuta -Yponomeutid -Yponomeutidae -ypsiliform -ypsiloid -Ypurinan -Yquem -yr -ytterbia -ytterbic -ytterbium -yttria -yttrialite -yttric -yttriferous -yttrious -yttrium -yttrocerite -yttrocolumbite -yttrocrasite -yttrofluorite -yttrogummite -yttrotantalite -Yuan -yuan -Yuapin -yuca -Yucatec -Yucatecan -Yucateco -Yucca -yucca -Yuchi -yuck -yuckel -yucker -yuckle -yucky -Yuechi -yuft -Yuga -yugada -Yugoslav -Yugoslavian -Yugoslavic -yuh -Yuit -Yukaghir -Yuki -Yukian -yukkel -yulan -yule -yuleblock -yuletide -Yuma -Yuman -yummy -Yun -Yunca -Yuncan -yungan -Yunnanese -Yurak -Yurok -yurt -yurta -Yurucare -Yurucarean -Yurucari -Yurujure -Yuruk -Yuruna -Yurupary -yus -yusdrum -Yustaga -yutu -yuzlik -yuzluk -Yvonne -Z -z -za -Zabaean -zabaglione -Zabaism -Zaberma -zabeta -Zabian -Zabism -zabra -zabti -zabtie -zac -zacate -Zacatec -Zacateco -zacaton -Zach -Zachariah -zachun -zad -Zadokite -zadruga -zaffar -zaffer -zafree -zag -zagged -Zaglossus -zaibatsu -zain -Zaitha -zak -zakkeu -Zaklohpakap -zalambdodont -Zalambdodonta -Zalophus -zaman -zamang -zamarra -zamarro -Zambal -Zambezian -zambo -zamboorak -Zamenis -Zamia -Zamiaceae -Zamicrus -zamindar -zamindari -zamorin -zamouse -Zan -Zanclidae -Zanclodon -Zanclodontidae -Zande -zander -zandmole -zanella -Zaniah -Zannichellia -Zannichelliaceae -Zanonia -zant -zante -Zantedeschia -zantewood -Zanthorrhiza -Zanthoxylaceae -Zanthoxylum -zanthoxylum -Zantiot -zantiote -zany -zanyish -zanyism -zanyship -Zanzalian -zanze -Zanzibari -Zapara -Zaparan -Zaparo -Zaparoan -zapas -zapatero -zaphara -Zaphetic -zaphrentid -Zaphrentidae -Zaphrentis -zaphrentoid -Zapodidae -Zapodinae -Zaporogian -Zaporogue -zapota -Zapotec -Zapotecan -Zapoteco -zaptiah -zaptieh -Zaptoeca -zapupe -Zapus -zaqqum -Zaque -zar -zarabanda -Zaramo -Zarathustrian -Zarathustrianism -Zarathustrism -zaratite -Zardushti -zareba -Zarema -zarf -zarnich -zarp -zarzuela -zat -zati -zattare -Zaurak -Zauschneria -Zavijava -zax -zayat -zayin -Zea -zeal -Zealander -zealful -zealless -zeallessness -zealot -zealotic -zealotical -zealotism -zealotist -zealotry -zealous -zealously -zealousness -zealousy -zealproof -zebra -zebraic -zebralike -zebrass -zebrawood -Zebrina -zebrine -zebrinny -zebroid -zebrula -zebrule -zebu -zebub -Zebulunite -zeburro -zecchini -zecchino -zechin -Zechstein -zed -zedoary -zee -zeed -Zeelander -Zeguha -zehner -Zeidae -zein -zeism -zeist -Zeke -zel -Zelanian -zelator -zelatrice -zelatrix -Zelkova -Zeltinger -zemeism -zemi -zemimdari -zemindar -zemmi -zemni -zemstroist -zemstvo -Zen -Zenaga -Zenaida -Zenaidinae -Zenaidura -zenana -Zend -Zendic -zendician -zendik -zendikite -Zenelophon -zenick -zenith -zenithal -zenithward -zenithwards -Zenobia -zenocentric -zenographic -zenographical -zenography -Zenonian -Zenonic -zenu -Zeoidei -zeolite -zeolitic -zeolitization -zeolitize -zeoscope -Zep -zepharovichite -zephyr -Zephyranthes -zephyrean -zephyrless -zephyrlike -zephyrous -zephyrus -zephyry -Zeppelin -zeppelin -zequin -zer -zerda -Zerma -zermahbub -zero -zeroaxial -zeroize -zerumbet -zest -zestful -zestfully -zestfulness -zesty -zeta -zetacism -zetetic -Zeuctocoelomata -zeuctocoelomatic -zeuctocoelomic -Zeuglodon -zeuglodon -zeuglodont -Zeuglodonta -Zeuglodontia -Zeuglodontidae -zeuglodontoid -zeugma -zeugmatic -zeugmatically -Zeugobranchia -Zeugobranchiata -zeunerite -Zeus -Zeuxian -Zeuzera -zeuzerian -Zeuzeridae -Zhmud -ziamet -ziara -ziarat -zibeline -zibet -zibethone -zibetone -zibetum -ziega -zieger -zietrisikite -ziffs -zig -ziganka -ziggurat -zigzag -zigzagged -zigzaggedly -zigzaggedness -zigzagger -zigzaggery -zigzaggy -zigzagwise -zihar -zikurat -Zilla -zillah -zimarra -zimb -zimbabwe -zimbalon -zimbaloon -zimbi -zimentwater -zimme -Zimmerwaldian -Zimmerwaldist -zimmi -zimmis -zimocca -zinc -Zincalo -zincate -zincic -zincide -zinciferous -zincification -zincify -zincing -zincite -zincize -zincke -zincky -zinco -zincograph -zincographer -zincographic -zincographical -zincography -zincotype -zincous -zincum -zincuret -zinfandel -zing -zingaresca -zingel -zingerone -Zingiber -Zingiberaceae -zingiberaceous -zingiberene -zingiberol -zingiberone -zink -zinkenite -Zinnia -zinnwaldite -zinsang -zinyamunga -Zinzar -Zinziberaceae -zinziberaceous -Zion -Zionism -Zionist -Zionistic -Zionite -Zionless -Zionward -zip -Zipa -ziphian -Ziphiidae -Ziphiinae -ziphioid -Ziphius -Zipper -zipper -zipping -zippingly -zippy -Zips -zira -zirai -Zirak -Zirbanit -zircite -zircofluoride -zircon -zirconate -zirconia -zirconian -zirconic -zirconiferous -zirconifluoride -zirconium -zirconofluoride -zirconoid -zirconyl -Zirian -Zirianian -zirkelite -zither -zitherist -Zizania -Zizia -Zizyphus -zizz -zloty -Zmudz -zo -Zoa -zoa -zoacum -Zoanthacea -zoanthacean -Zoantharia -zoantharian -zoanthid -Zoanthidae -Zoanthidea -zoanthodeme -zoanthodemic -zoanthoid -zoanthropy -Zoanthus -Zoarces -zoarcidae -zoaria -zoarial -Zoarite -zoarium -zobo -zobtenite -zocco -zoccolo -zodiac -zodiacal -zodiophilous -zoea -zoeaform -zoeal -zoeform -zoehemera -zoehemerae -zoetic -zoetrope -zoetropic -zogan -zogo -Zohak -Zoharist -Zoharite -zoiatria -zoiatrics -zoic -zoid -zoidiophilous -zoidogamous -Zoilean -Zoilism -Zoilist -zoisite -zoisitization -zoism -zoist -zoistic -zokor -Zolaesque -Zolaism -Zolaist -Zolaistic -Zolaize -zoll -zolle -Zollernia -zollpfund -zolotink -zolotnik -zombi -zombie -zombiism -zomotherapeutic -zomotherapy -zonal -zonality -zonally -zonar -Zonaria -zonary -zonate -zonated -zonation -zone -zoned -zoneless -zonelet -zonelike -zonesthesia -Zongora -zonic -zoniferous -zoning -zonite -Zonites -zonitid -Zonitidae -Zonitoides -zonochlorite -zonociliate -zonoid -zonolimnetic -zonoplacental -Zonoplacentalia -zonoskeleton -Zonotrichia -Zonta -Zontian -zonular -zonule -zonulet -zonure -zonurid -Zonuridae -zonuroid -Zonurus -zoo -zoobenthos -zooblast -zoocarp -zoocecidium -zoochemical -zoochemistry -zoochemy -Zoochlorella -zoochore -zoocoenocyte -zoocultural -zooculture -zoocurrent -zoocyst -zoocystic -zoocytial -zoocytium -zoodendria -zoodendrium -zoodynamic -zoodynamics -zooecia -zooecial -zooecium -zooerastia -zooerythrin -zoofulvin -zoogamete -zoogamous -zoogamy -zoogene -zoogenesis -zoogenic -zoogenous -zoogeny -zoogeographer -zoogeographic -zoogeographical -zoogeographically -zoogeography -zoogeological -zoogeologist -zoogeology -zoogloea -zoogloeal -zoogloeic -zoogonic -zoogonidium -zoogonous -zoogony -zoograft -zoografting -zoographer -zoographic -zoographical -zoographically -zoographist -zoography -zooid -zooidal -zooidiophilous -zooks -zoolater -zoolatria -zoolatrous -zoolatry -zoolite -zoolith -zoolithic -zoolitic -zoologer -zoologic -zoological -zoologically -zoologicoarchaeologist -zoologicobotanical -zoologist -zoologize -zoology -zoom -zoomagnetic -zoomagnetism -zoomancy -zoomania -zoomantic -zoomantist -Zoomastigina -Zoomastigoda -zoomechanical -zoomechanics -zoomelanin -zoometric -zoometry -zoomimetic -zoomimic -zoomorph -zoomorphic -zoomorphism -zoomorphize -zoomorphy -zoon -zoonal -zoonerythrin -zoonic -zoonist -zoonite -zoonitic -zoonomia -zoonomic -zoonomical -zoonomist -zoonomy -zoonosis -zoonosologist -zoonosology -zoonotic -zoons -zoonule -zoopaleontology -zoopantheon -zooparasite -zooparasitic -zoopathological -zoopathologist -zoopathology -zoopathy -zooperal -zooperist -zoopery -Zoophaga -zoophagan -Zoophagineae -zoophagous -zoopharmacological -zoopharmacy -zoophile -zoophilia -zoophilic -zoophilism -zoophilist -zoophilite -zoophilitic -zoophilous -zoophily -zoophobia -zoophobous -zoophoric -zoophorus -zoophysical -zoophysics -zoophysiology -Zoophyta -zoophytal -zoophyte -zoophytic -zoophytical -zoophytish -zoophytography -zoophytoid -zoophytological -zoophytologist -zoophytology -zooplankton -zooplanktonic -zooplastic -zooplasty -zoopraxiscope -zoopsia -zoopsychological -zoopsychologist -zoopsychology -zooscopic -zooscopy -zoosis -zoosmosis -zoosperm -zoospermatic -zoospermia -zoospermium -zoosphere -zoosporange -zoosporangia -zoosporangial -zoosporangiophore -zoosporangium -zoospore -zoosporic -zoosporiferous -zoosporocyst -zoosporous -zootaxy -zootechnic -zootechnics -zootechny -zooter -zoothecia -zoothecial -zoothecium -zootheism -zootheist -zootheistic -zootherapy -zoothome -zootic -Zootoca -zootomic -zootomical -zootomically -zootomist -zootomy -zoototemism -zootoxin -zootrophic -zootrophy -zootype -zootypic -zooxanthella -zooxanthellae -zooxanthin -zoozoo -zopilote -Zoque -Zoquean -Zoraptera -zorgite -zoril -zorilla -Zorillinae -zorillo -Zoroastrian -Zoroastrianism -Zoroastrism -Zorotypus -zorrillo -zorro -Zosma -zoster -Zostera -Zosteraceae -zosteriform -Zosteropinae -Zosterops -Zouave -zounds -zowie -Zoysia -Zubeneschamali -zuccarino -zucchetto -zucchini -zudda -zugtierlast -zugtierlaster -zuisin -Zuleika -Zulhijjah -Zulinde -Zulkadah -Zulu -Zuludom -Zuluize -zumatic -zumbooruk -Zuni -Zunian -zunyite -zupanate -Zutugil -zuurveldt -zuza -zwanziger -Zwieback -zwieback -Zwinglian -Zwinglianism -Zwinglianist -zwitter -zwitterion -zwitterionic -zyga -zygadenine -Zygadenus -Zygaena -zygaenid -Zygaenidae -zygal -zygantra -zygantrum -zygapophyseal -zygapophysis -zygion -zygite -Zygnema -Zygnemaceae -Zygnemales -Zygnemataceae -zygnemataceous -Zygnematales -zygobranch -Zygobranchia -Zygobranchiata -zygobranchiate -Zygocactus -zygodactyl -Zygodactylae -Zygodactyli -zygodactylic -zygodactylism -zygodactylous -zygodont -zygolabialis -zygoma -zygomata -zygomatic -zygomaticoauricular -zygomaticoauricularis -zygomaticofacial -zygomaticofrontal -zygomaticomaxillary -zygomaticoorbital -zygomaticosphenoid -zygomaticotemporal -zygomaticum -zygomaticus -zygomaxillare -zygomaxillary -zygomorphic -zygomorphism -zygomorphous -zygomycete -Zygomycetes -zygomycetous -zygon -zygoneure -zygophore -zygophoric -Zygophyceae -zygophyceous -Zygophyllaceae -zygophyllaceous -Zygophyllum -zygophyte -zygopleural -Zygoptera -Zygopteraceae -zygopteran -zygopterid -Zygopterides -Zygopteris -zygopteron -zygopterous -Zygosaccharomyces -zygose -zygosis -zygosperm -zygosphenal -zygosphene -zygosphere -zygosporange -zygosporangium -zygospore -zygosporic -zygosporophore -zygostyle -zygotactic -zygotaxis -zygote -zygotene -zygotic -zygotoblast -zygotoid -zygotomere -zygous -zygozoospore -zymase -zyme -zymic -zymin -zymite -zymogen -zymogene -zymogenesis -zymogenic -zymogenous -zymoid -zymologic -zymological -zymologist -zymology -zymolyis -zymolysis -zymolytic -zymome -zymometer -zymomin -zymophore -zymophoric -zymophosphate -zymophyte -zymoplastic -zymoscope -zymosimeter -zymosis -zymosterol -zymosthenic -zymotechnic -zymotechnical -zymotechnics -zymotechny -zymotic -zymotically -zymotize -zymotoxic -zymurgy -Zyrenian -Zyrian -Zyryan -zythem -Zythia -zythum -Zyzomys -Zyzzogeton diff --git a/strings/z_function.py b/strings/z_function.py deleted file mode 100644 index e77ba8dab5df..000000000000 --- a/strings/z_function.py +++ /dev/null @@ -1,90 +0,0 @@ -""" -https://cp-algorithms.com/string/z-function.html - -Z-function or Z algorithm - -Efficient algorithm for pattern occurrence in a string - -Time Complexity: O(n) - where n is the length of the string - -""" - - -def z_function(input_str: str) -> list[int]: - """ - For the given string this function computes value for each index, - which represents the maximal length substring starting from the index - and is the same as the prefix of the same size - - e.x. for string 'abab' for second index value would be 2 - - For the value of the first element the algorithm always returns 0 - - >>> z_function("abracadabra") - [0, 0, 0, 1, 0, 1, 0, 4, 0, 0, 1] - >>> z_function("aaaa") - [0, 3, 2, 1] - >>> z_function("zxxzxxz") - [0, 0, 0, 4, 0, 0, 1] - """ - z_result = [0 for i in range(len(input_str))] - - # initialize interval's left pointer and right pointer - left_pointer, right_pointer = 0, 0 - - for i in range(1, len(input_str)): - # case when current index is inside the interval - if i <= right_pointer: - min_edge = min(right_pointer - i + 1, z_result[i - left_pointer]) - z_result[i] = min_edge - - while go_next(i, z_result, input_str): - z_result[i] += 1 - - # if new index's result gives us more right interval, - # we've to update left_pointer and right_pointer - if i + z_result[i] - 1 > right_pointer: - left_pointer, right_pointer = i, i + z_result[i] - 1 - - return z_result - - -def go_next(i: int, z_result: list[int], s: str) -> bool: - """ - Check if we have to move forward to the next characters or not - """ - return i + z_result[i] < len(s) and s[z_result[i]] == s[i + z_result[i]] - - -def find_pattern(pattern: str, input_str: str) -> int: - """ - Example of using z-function for pattern occurrence - Given function returns the number of times 'pattern' - appears in 'input_str' as a substring - - >>> find_pattern("abr", "abracadabra") - 2 - >>> find_pattern("a", "aaaa") - 4 - >>> find_pattern("xz", "zxxzxxz") - 2 - """ - answer = 0 - # concatenate 'pattern' and 'input_str' and call z_function - # with concatenated string - z_result = z_function(pattern + input_str) - - for val in z_result: - # if value is greater then length of the pattern string - # that means this index is starting position of substring - # which is equal to pattern string - if val >= len(pattern): - answer += 1 - - return answer - - -if __name__ == "__main__": - import doctest - - doctest.testmod() diff --git a/web_programming/__init__.py b/web_programming/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/web_programming/co2_emission.py b/web_programming/co2_emission.py deleted file mode 100644 index 19af70489d1d..000000000000 --- a/web_programming/co2_emission.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -Get CO2 emission data from the UK CarbonIntensity API -""" - -from datetime import date - -import requests - -BASE_URL = "https://api.carbonintensity.org.uk/intensity" - - -# Emission in the last half hour -def fetch_last_half_hour() -> str: - last_half_hour = requests.get(BASE_URL, timeout=10).json()["data"][0] - return last_half_hour["intensity"]["actual"] - - -# Emissions in a specific date range -def fetch_from_to(start, end) -> list: - return requests.get(f"{BASE_URL}/{start}/{end}", timeout=10).json()["data"] - - -if __name__ == "__main__": - for entry in fetch_from_to(start=date(2020, 10, 1), end=date(2020, 10, 3)): - print("from {from} to {to}: {intensity[actual]}".format(**entry)) - print(f"{fetch_last_half_hour() = }") diff --git a/web_programming/covid_stats_via_xpath.py b/web_programming/covid_stats_via_xpath.py deleted file mode 100644 index c27a5d12bb3f..000000000000 --- a/web_programming/covid_stats_via_xpath.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -This is to show simple COVID19 info fetching from worldometers site using lxml -* The main motivation to use lxml in place of bs4 is that it is faster and therefore -more convenient to use in Python web projects (e.g. Django or Flask-based) -""" - -from typing import NamedTuple - -import requests -from lxml import html - - -class CovidData(NamedTuple): - cases: int - deaths: int - recovered: int - - -def covid_stats(url: str = "https://www.worldometers.info/coronavirus/") -> CovidData: - xpath_str = '//div[@class = "maincounter-number"]/span/text()' - return CovidData( - *html.fromstring(requests.get(url, timeout=10).content).xpath(xpath_str) - ) - - -fmt = """Total COVID-19 cases in the world: {} -Total deaths due to COVID-19 in the world: {} -Total COVID-19 patients recovered in the world: {}""" -print(fmt.format(*covid_stats())) diff --git a/web_programming/crawl_google_results.py b/web_programming/crawl_google_results.py deleted file mode 100644 index cb75d450ff82..000000000000 --- a/web_programming/crawl_google_results.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys -import webbrowser - -import requests -from bs4 import BeautifulSoup -from fake_useragent import UserAgent - -if __name__ == "__main__": - print("Googling.....") - url = "https://www.google.com/search?q=" + " ".join(sys.argv[1:]) - res = requests.get(url, headers={"UserAgent": UserAgent().random}, timeout=10) - # res.raise_for_status() - with open("project1a.html", "wb") as out_file: # only for knowing the class - for data in res.iter_content(10000): - out_file.write(data) - soup = BeautifulSoup(res.text, "html.parser") - links = list(soup.select(".eZt8xd"))[:5] - - print(len(links)) - for link in links: - if link.text == "Maps": - webbrowser.open(link.get("href")) - else: - webbrowser.open(f"https://google.com{link.get('href')}") diff --git a/web_programming/crawl_google_scholar_citation.py b/web_programming/crawl_google_scholar_citation.py deleted file mode 100644 index 5f2ccad5f414..000000000000 --- a/web_programming/crawl_google_scholar_citation.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Get the citation from google scholar -using title and year of publication, and volume and pages of journal. -""" - -import requests -from bs4 import BeautifulSoup - - -def get_citation(base_url: str, params: dict) -> str: - """ - Return the citation number. - """ - soup = BeautifulSoup( - requests.get(base_url, params=params, timeout=10).content, "html.parser" - ) - div = soup.find("div", attrs={"class": "gs_ri"}) - anchors = div.find("div", attrs={"class": "gs_fl"}).find_all("a") - return anchors[2].get_text() - - -if __name__ == "__main__": - params = { - "title": ( - "Precisely geometry controlled microsupercapacitors for ultrahigh areal " - "capacitance, volumetric capacitance, and energy density" - ), - "journal": "Chem. Mater.", - "volume": 30, - "pages": "3979-3990", - "year": 2018, - "hl": "en", - } - print(get_citation("https://scholar.google.com/scholar_lookup", params=params)) diff --git a/web_programming/currency_converter.py b/web_programming/currency_converter.py deleted file mode 100644 index 9623504b89ea..000000000000 --- a/web_programming/currency_converter.py +++ /dev/null @@ -1,199 +0,0 @@ -""" -This is used to convert the currency using the Amdoren Currency API -https://www.amdoren.com -""" - -import os - -import requests - -URL_BASE = "https://www.amdoren.com/api/currency.php" - - -# Currency and their description -list_of_currencies = """ -AED United Arab Emirates Dirham -AFN Afghan Afghani -ALL Albanian Lek -AMD Armenian Dram -ANG Netherlands Antillean Guilder -AOA Angolan Kwanza -ARS Argentine Peso -AUD Australian Dollar -AWG Aruban Florin -AZN Azerbaijani Manat -BAM Bosnia & Herzegovina Convertible Mark -BBD Barbadian Dollar -BDT Bangladeshi Taka -BGN Bulgarian Lev -BHD Bahraini Dinar -BIF Burundian Franc -BMD Bermudian Dollar -BND Brunei Dollar -BOB Bolivian Boliviano -BRL Brazilian Real -BSD Bahamian Dollar -BTN Bhutanese Ngultrum -BWP Botswana Pula -BYN Belarus Ruble -BZD Belize Dollar -CAD Canadian Dollar -CDF Congolese Franc -CHF Swiss Franc -CLP Chilean Peso -CNY Chinese Yuan -COP Colombian Peso -CRC Costa Rican Colon -CUC Cuban Convertible Peso -CVE Cape Verdean Escudo -CZK Czech Republic Koruna -DJF Djiboutian Franc -DKK Danish Krone -DOP Dominican Peso -DZD Algerian Dinar -EGP Egyptian Pound -ERN Eritrean Nakfa -ETB Ethiopian Birr -EUR Euro -FJD Fiji Dollar -GBP British Pound Sterling -GEL Georgian Lari -GHS Ghanaian Cedi -GIP Gibraltar Pound -GMD Gambian Dalasi -GNF Guinea Franc -GTQ Guatemalan Quetzal -GYD Guyanaese Dollar -HKD Hong Kong Dollar -HNL Honduran Lempira -HRK Croatian Kuna -HTG Haiti Gourde -HUF Hungarian Forint -IDR Indonesian Rupiah -ILS Israeli Shekel -INR Indian Rupee -IQD Iraqi Dinar -IRR Iranian Rial -ISK Icelandic Krona -JMD Jamaican Dollar -JOD Jordanian Dinar -JPY Japanese Yen -KES Kenyan Shilling -KGS Kyrgystani Som -KHR Cambodian Riel -KMF Comorian Franc -KPW North Korean Won -KRW South Korean Won -KWD Kuwaiti Dinar -KYD Cayman Islands Dollar -KZT Kazakhstan Tenge -LAK Laotian Kip -LBP Lebanese Pound -LKR Sri Lankan Rupee -LRD Liberian Dollar -LSL Lesotho Loti -LYD Libyan Dinar -MAD Moroccan Dirham -MDL Moldovan Leu -MGA Malagasy Ariary -MKD Macedonian Denar -MMK Myanma Kyat -MNT Mongolian Tugrik -MOP Macau Pataca -MRO Mauritanian Ouguiya -MUR Mauritian Rupee -MVR Maldivian Rufiyaa -MWK Malawi Kwacha -MXN Mexican Peso -MYR Malaysian Ringgit -MZN Mozambican Metical -NAD Namibian Dollar -NGN Nigerian Naira -NIO Nicaragua Cordoba -NOK Norwegian Krone -NPR Nepalese Rupee -NZD New Zealand Dollar -OMR Omani Rial -PAB Panamanian Balboa -PEN Peruvian Nuevo Sol -PGK Papua New Guinean Kina -PHP Philippine Peso -PKR Pakistani Rupee -PLN Polish Zloty -PYG Paraguayan Guarani -QAR Qatari Riyal -RON Romanian Leu -RSD Serbian Dinar -RUB Russian Ruble -RWF Rwanda Franc -SAR Saudi Riyal -SBD Solomon Islands Dollar -SCR Seychellois Rupee -SDG Sudanese Pound -SEK Swedish Krona -SGD Singapore Dollar -SHP Saint Helena Pound -SLL Sierra Leonean Leone -SOS Somali Shilling -SRD Surinamese Dollar -SSP South Sudanese Pound -STD Sao Tome and Principe Dobra -SYP Syrian Pound -SZL Swazi Lilangeni -THB Thai Baht -TJS Tajikistan Somoni -TMT Turkmenistani Manat -TND Tunisian Dinar -TOP Tonga Paanga -TRY Turkish Lira -TTD Trinidad and Tobago Dollar -TWD New Taiwan Dollar -TZS Tanzanian Shilling -UAH Ukrainian Hryvnia -UGX Ugandan Shilling -USD United States Dollar -UYU Uruguayan Peso -UZS Uzbekistan Som -VEF Venezuelan Bolivar -VND Vietnamese Dong -VUV Vanuatu Vatu -WST Samoan Tala -XAF Central African CFA franc -XCD East Caribbean Dollar -XOF West African CFA franc -XPF CFP Franc -YER Yemeni Rial -ZAR South African Rand -ZMW Zambian Kwacha -""" - - -def convert_currency( - from_: str = "USD", to: str = "INR", amount: float = 1.0, api_key: str = "" -) -> str: - """https://www.amdoren.com/currency-api/""" - # Instead of manually generating parameters - params = locals() - # from is a reserved keyword - params["from"] = params.pop("from_") - res = requests.get(URL_BASE, params=params, timeout=10).json() - return str(res["amount"]) if res["error"] == 0 else res["error_message"] - - -if __name__ == "__main__": - TESTING = os.getenv("CI", "") - API_KEY = os.getenv("AMDOREN_API_KEY", "") - - if not API_KEY and not TESTING: - raise KeyError( - "API key must be provided in the 'AMDOREN_API_KEY' environment variable." - ) - - print( - convert_currency( - input("Enter from currency: ").strip(), - input("Enter to currency: ").strip(), - float(input("Enter the amount: ").strip()), - API_KEY, - ) - ) diff --git a/web_programming/current_stock_price.py b/web_programming/current_stock_price.py deleted file mode 100644 index 9567c05b0558..000000000000 --- a/web_programming/current_stock_price.py +++ /dev/null @@ -1,22 +0,0 @@ -import requests -from bs4 import BeautifulSoup - - -def stock_price(symbol: str = "AAPL") -> str: - url = f"https://finance.yahoo.com/quote/{symbol}?p={symbol}" - yahoo_finance_source = requests.get( - url, headers={"USER-AGENT": "Mozilla/5.0"}, timeout=10 - ).text - soup = BeautifulSoup(yahoo_finance_source, "html.parser") - specific_fin_streamer_tag = soup.find("fin-streamer", {"data-test": "qsp-price"}) - - if specific_fin_streamer_tag: - text = specific_fin_streamer_tag.get_text() - return text - return "No <fin-streamer> tag with the specified data-test attribute found." - - -# Search for the symbol at https://finance.yahoo.com/lookup -if __name__ == "__main__": - for symbol in "AAPL AMZN IBM GOOG MSFT ORCL".split(): - print(f"Current {symbol:<4} stock price is {stock_price(symbol):>8}") diff --git a/web_programming/current_weather.py b/web_programming/current_weather.py deleted file mode 100644 index 4a8fa5e3c845..000000000000 --- a/web_programming/current_weather.py +++ /dev/null @@ -1,50 +0,0 @@ -import requests - -# Put your API key(s) here -OPENWEATHERMAP_API_KEY = "" -WEATHERSTACK_API_KEY = "" - -# Define the URL for the APIs with placeholders -OPENWEATHERMAP_URL_BASE = "https://api.openweathermap.org/data/2.5/weather" -WEATHERSTACK_URL_BASE = "http://api.weatherstack.com/current" - - -def current_weather(location: str) -> list[dict]: - """ - >>> current_weather("location") - Traceback (most recent call last): - ... - ValueError: No API keys provided or no valid data returned. - """ - weather_data = [] - if OPENWEATHERMAP_API_KEY: - params_openweathermap = {"q": location, "appid": OPENWEATHERMAP_API_KEY} - response_openweathermap = requests.get( - OPENWEATHERMAP_URL_BASE, params=params_openweathermap, timeout=10 - ) - weather_data.append({"OpenWeatherMap": response_openweathermap.json()}) - if WEATHERSTACK_API_KEY: - params_weatherstack = {"query": location, "access_key": WEATHERSTACK_API_KEY} - response_weatherstack = requests.get( - WEATHERSTACK_URL_BASE, params=params_weatherstack, timeout=10 - ) - weather_data.append({"Weatherstack": response_weatherstack.json()}) - if not weather_data: - raise ValueError("No API keys provided or no valid data returned.") - return weather_data - - -if __name__ == "__main__": - from pprint import pprint - - location = "to be determined..." - while location: - location = input("Enter a location (city name or latitude,longitude): ").strip() - if location: - try: - weather_data = current_weather(location) - for forecast in weather_data: - pprint(forecast) - except ValueError as e: - print(repr(e)) - location = "" diff --git a/web_programming/daily_horoscope.py b/web_programming/daily_horoscope.py deleted file mode 100644 index 75e637d8e52c..000000000000 --- a/web_programming/daily_horoscope.py +++ /dev/null @@ -1,35 +0,0 @@ -import requests -from bs4 import BeautifulSoup - - -def horoscope(zodiac_sign: int, day: str) -> str: - url = ( - "https://www.horoscope.com/us/horoscopes/general/" - f"horoscope-general-daily-{day}.aspx?sign={zodiac_sign}" - ) - soup = BeautifulSoup(requests.get(url, timeout=10).content, "html.parser") - return soup.find("div", class_="main-horoscope").p.text - - -if __name__ == "__main__": - print("Daily Horoscope. \n") - print( - "enter your Zodiac sign number:\n", - "1. Aries\n", - "2. Taurus\n", - "3. Gemini\n", - "4. Cancer\n", - "5. Leo\n", - "6. Virgo\n", - "7. Libra\n", - "8. Scorpio\n", - "9. Sagittarius\n", - "10. Capricorn\n", - "11. Aquarius\n", - "12. Pisces\n", - ) - zodiac_sign = int(input("number> ").strip()) - print("choose some day:\n", "yesterday\n", "today\n", "tomorrow\n") - day = input("enter the day> ") - horoscope_text = horoscope(zodiac_sign, day) - print(horoscope_text) diff --git a/web_programming/download_images_from_google_query.py b/web_programming/download_images_from_google_query.py deleted file mode 100644 index 235cd35763ef..000000000000 --- a/web_programming/download_images_from_google_query.py +++ /dev/null @@ -1,103 +0,0 @@ -import json -import os -import re -import sys -import urllib.request - -import requests -from bs4 import BeautifulSoup - -headers = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" - " (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582" -} - - -def download_images_from_google_query(query: str = "dhaka", max_images: int = 5) -> int: - """ - Searches google using the provided query term and downloads the images in a folder. - - Args: - query : The image search term to be provided by the user. Defaults to - "dhaka". - image_numbers : [description]. Defaults to 5. - - Returns: - The number of images successfully downloaded. - - # Comment out slow (4.20s call) doctests - # >>> download_images_from_google_query() - 5 - # >>> download_images_from_google_query("potato") - 5 - """ - max_images = min(max_images, 50) # Prevent abuse! - params = { - "q": query, - "tbm": "isch", - "hl": "en", - "ijn": "0", - } - - html = requests.get( - "https://www.google.com/search", params=params, headers=headers, timeout=10 - ) - soup = BeautifulSoup(html.text, "html.parser") - matched_images_data = "".join( - re.findall(r"AF_initDataCallback\(([^<]+)\);", str(soup.select("script"))) - ) - - matched_images_data_fix = json.dumps(matched_images_data) - matched_images_data_json = json.loads(matched_images_data_fix) - - matched_google_image_data = re.findall( - r"\[\"GRID_STATE0\",null,\[\[1,\[0,\".*?\",(.*),\"All\",", - matched_images_data_json, - ) - if not matched_google_image_data: - return 0 - - removed_matched_google_images_thumbnails = re.sub( - r"\[\"(https\:\/\/encrypted-tbn0\.gstatic\.com\/images\?.*?)\",\d+,\d+\]", - "", - str(matched_google_image_data), - ) - - matched_google_full_resolution_images = re.findall( - r"(?:'|,),\[\"(https:|http.*?)\",\d+,\d+\]", - removed_matched_google_images_thumbnails, - ) - for index, fixed_full_res_image in enumerate(matched_google_full_resolution_images): - if index >= max_images: - return index - original_size_img_not_fixed = bytes(fixed_full_res_image, "ascii").decode( - "unicode-escape" - ) - original_size_img = bytes(original_size_img_not_fixed, "ascii").decode( - "unicode-escape" - ) - opener = urllib.request.build_opener() - opener.addheaders = [ - ( - "User-Agent", - "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" - " (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582", - ) - ] - urllib.request.install_opener(opener) - path_name = f"query_{query.replace(' ', '_')}" - if not os.path.exists(path_name): - os.makedirs(path_name) - urllib.request.urlretrieve( # noqa: S310 - original_size_img, f"{path_name}/original_size_img_{index}.jpg" - ) - return index - - -if __name__ == "__main__": - try: - image_count = download_images_from_google_query(sys.argv[1]) - print(f"{image_count} images were downloaded to disk.") - except IndexError: - print("Please provide a search term.") - raise diff --git a/web_programming/emails_from_url.py b/web_programming/emails_from_url.py deleted file mode 100644 index d41dc4893608..000000000000 --- a/web_programming/emails_from_url.py +++ /dev/null @@ -1,104 +0,0 @@ -"""Get the site emails from URL.""" - -from __future__ import annotations - -__author__ = "Muhammad Umer Farooq" -__license__ = "MIT" -__version__ = "1.0.0" -__maintainer__ = "Muhammad Umer Farooq" -__email__ = "contact@muhammadumerfarooq.me" -__status__ = "Alpha" - -import re -from html.parser import HTMLParser -from urllib import parse - -import requests - - -class Parser(HTMLParser): - def __init__(self, domain: str) -> None: - super().__init__() - self.urls: list[str] = [] - self.domain = domain - - def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: - """ - This function parse html to take takes url from tags - """ - # Only parse the 'anchor' tag. - if tag == "a": - # Check the list of defined attributes. - for name, value in attrs: - # If href is defined, not empty nor # print it and not already in urls. - if name == "href" and value not in (*self.urls, "", "#"): - url = parse.urljoin(self.domain, value) - self.urls.append(url) - - -# Get main domain name (example.com) -def get_domain_name(url: str) -> str: - """ - This function get the main domain name - - >>> get_domain_name("https://a.b.c.d/e/f?g=h,i=j#k") - 'c.d' - >>> get_domain_name("Not a URL!") - '' - """ - return ".".join(get_sub_domain_name(url).split(".")[-2:]) - - -# Get sub domain name (sub.example.com) -def get_sub_domain_name(url: str) -> str: - """ - >>> get_sub_domain_name("https://a.b.c.d/e/f?g=h,i=j#k") - 'a.b.c.d' - >>> get_sub_domain_name("Not a URL!") - '' - """ - return parse.urlparse(url).netloc - - -def emails_from_url(url: str = "https://github.com") -> list[str]: - """ - This function takes url and return all valid urls - """ - # Get the base domain from the url - domain = get_domain_name(url) - - # Initialize the parser - parser = Parser(domain) - - try: - # Open URL - r = requests.get(url, timeout=10) - - # pass the raw HTML to the parser to get links - parser.feed(r.text) - - # Get links and loop through - valid_emails = set() - for link in parser.urls: - # open URL. - # read = requests.get(link) - try: - read = requests.get(link, timeout=10) - # Get the valid email. - emails = re.findall("[a-zA-Z0-9]+@" + domain, read.text) - # If not in list then append it. - for email in emails: - valid_emails.add(email) - except ValueError: - pass - except ValueError: - raise SystemExit(1) - - # Finally return a sorted list of email addresses with no duplicates. - return sorted(valid_emails) - - -if __name__ == "__main__": - emails = emails_from_url("https://github.com") - print(f"{len(emails)} emails found:") - print("\n".join(sorted(emails))) diff --git a/web_programming/fetch_anime_and_play.py b/web_programming/fetch_anime_and_play.py deleted file mode 100644 index fd7c3a3a7381..000000000000 --- a/web_programming/fetch_anime_and_play.py +++ /dev/null @@ -1,188 +0,0 @@ -import requests -from bs4 import BeautifulSoup, NavigableString, Tag -from fake_useragent import UserAgent - -BASE_URL = "https://ww1.gogoanime2.org" - - -def search_scraper(anime_name: str) -> list: - """[summary] - - Take an url and - return list of anime after scraping the site. - - >>> type(search_scraper("demon_slayer")) - <class 'list'> - - Args: - anime_name (str): [Name of anime] - - Raises: - e: [Raises exception on failure] - - Returns: - [list]: [List of animes] - """ - - # concat the name to form the search url. - search_url = f"{BASE_URL}/search/{anime_name}" - - response = requests.get( - search_url, headers={"UserAgent": UserAgent().chrome}, timeout=10 - ) # request the url. - - # Is the response ok? - response.raise_for_status() - - # parse with soup. - soup = BeautifulSoup(response.text, "html.parser") - - # get list of anime - anime_ul = soup.find("ul", {"class": "items"}) - if anime_ul is None or isinstance(anime_ul, NavigableString): - msg = f"Could not find and anime with name {anime_name}" - raise ValueError(msg) - anime_li = anime_ul.children - - # for each anime, insert to list. the name and url. - anime_list = [] - for anime in anime_li: - if isinstance(anime, Tag): - anime_url = anime.find("a") - if anime_url is None or isinstance(anime_url, NavigableString): - continue - anime_title = anime.find("a") - if anime_title is None or isinstance(anime_title, NavigableString): - continue - - anime_list.append({"title": anime_title["title"], "url": anime_url["href"]}) - - return anime_list - - -def search_anime_episode_list(episode_endpoint: str) -> list: - """[summary] - - Take an url and - return list of episodes after scraping the site - for an url. - - >>> type(search_anime_episode_list("/anime/kimetsu-no-yaiba")) - <class 'list'> - - Args: - episode_endpoint (str): [Endpoint of episode] - - Raises: - e: [description] - - Returns: - [list]: [List of episodes] - """ - - request_url = f"{BASE_URL}{episode_endpoint}" - - response = requests.get( - url=request_url, headers={"UserAgent": UserAgent().chrome}, timeout=10 - ) - response.raise_for_status() - - soup = BeautifulSoup(response.text, "html.parser") - - # With this id. get the episode list. - episode_page_ul = soup.find("ul", {"id": "episode_related"}) - if episode_page_ul is None or isinstance(episode_page_ul, NavigableString): - msg = f"Could not find any anime eposiodes with name {anime_name}" - raise ValueError(msg) - episode_page_li = episode_page_ul.children - - episode_list = [] - for episode in episode_page_li: - if isinstance(episode, Tag): - url = episode.find("a") - if url is None or isinstance(url, NavigableString): - continue - title = episode.find("div", {"class": "name"}) - if title is None or isinstance(title, NavigableString): - continue - - episode_list.append( - {"title": title.text.replace(" ", ""), "url": url["href"]} - ) - - return episode_list - - -def get_anime_episode(episode_endpoint: str) -> list: - """[summary] - - Get click url and download url from episode url - - >>> type(get_anime_episode("/watch/kimetsu-no-yaiba/1")) - <class 'list'> - - Args: - episode_endpoint (str): [Endpoint of episode] - - Raises: - e: [description] - - Returns: - [list]: [List of download and watch url] - """ - - episode_page_url = f"{BASE_URL}{episode_endpoint}" - - response = requests.get( - url=episode_page_url, headers={"User-Agent": UserAgent().chrome}, timeout=10 - ) - response.raise_for_status() - - soup = BeautifulSoup(response.text, "html.parser") - - url = soup.find("iframe", {"id": "playerframe"}) - if url is None or isinstance(url, NavigableString): - msg = f"Could not find url and download url from {episode_endpoint}" - raise RuntimeError(msg) - - episode_url = url["src"] - if not isinstance(episode_url, str): - msg = f"Could not find url and download url from {episode_endpoint}" - raise RuntimeError(msg) - download_url = episode_url.replace("/embed/", "/playlist/") + ".m3u8" - - return [f"{BASE_URL}{episode_url}", f"{BASE_URL}{download_url}"] - - -if __name__ == "__main__": - anime_name = input("Enter anime name: ").strip() - anime_list = search_scraper(anime_name) - print("\n") - - if len(anime_list) == 0: - print("No anime found with this name") - else: - print(f"Found {len(anime_list)} results: ") - for i, anime in enumerate(anime_list): - anime_title = anime["title"] - print(f"{i+1}. {anime_title}") - - anime_choice = int(input("\nPlease choose from the following list: ").strip()) - chosen_anime = anime_list[anime_choice - 1] - print(f"You chose {chosen_anime['title']}. Searching for episodes...") - - episode_list = search_anime_episode_list(chosen_anime["url"]) - if len(episode_list) == 0: - print("No episode found for this anime") - else: - print(f"Found {len(episode_list)} results: ") - for i, episode in enumerate(episode_list): - print(f"{i+1}. {episode['title']}") - - episode_choice = int(input("\nChoose an episode by serial no: ").strip()) - chosen_episode = episode_list[episode_choice - 1] - print(f"You chose {chosen_episode['title']}. Searching...") - - episode_url, download_url = get_anime_episode(chosen_episode["url"]) - print(f"\nTo watch, ctrl+click on {episode_url}.") - print(f"To download, ctrl+click on {download_url}.") diff --git a/web_programming/fetch_bbc_news.py b/web_programming/fetch_bbc_news.py deleted file mode 100644 index e5cd864a9d83..000000000000 --- a/web_programming/fetch_bbc_news.py +++ /dev/null @@ -1,17 +0,0 @@ -# Created by sarathkaul on 12/11/19 - -import requests - -_NEWS_API = "https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=" - - -def fetch_bbc_news(bbc_news_api_key: str) -> None: - # fetching a list of articles in json format - bbc_news_page = requests.get(_NEWS_API + bbc_news_api_key, timeout=10).json() - # each article in the list is a dict - for i, article in enumerate(bbc_news_page["articles"], 1): - print(f"{i}.) {article['title']}") - - -if __name__ == "__main__": - fetch_bbc_news(bbc_news_api_key="<Your BBC News API key goes here>") diff --git a/web_programming/fetch_github_info.py b/web_programming/fetch_github_info.py deleted file mode 100644 index 25d44245bb58..000000000000 --- a/web_programming/fetch_github_info.py +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env python3 -""" -Created by sarathkaul on 14/11/19 -Updated by lawric1 on 24/11/20 - -Authentication will be made via access token. -To generate your personal access token visit https://github.com/settings/tokens. - -NOTE: -Never hardcode any credential information in the code. Always use an environment -file to store the private information and use the `os` module to get the information -during runtime. - -Create a ".env" file in the root directory and write these two lines in that file -with your token:: - -#!/usr/bin/env bash -export USER_TOKEN="" -""" - -from __future__ import annotations - -import os -from typing import Any - -import requests - -BASE_URL = "https://api.github.com" - -# https://docs.github.com/en/free-pro-team@latest/rest/reference/users#get-the-authenticated-user -AUTHENTICATED_USER_ENDPOINT = BASE_URL + "/user" - -# https://github.com/settings/tokens -USER_TOKEN = os.environ.get("USER_TOKEN", "") - - -def fetch_github_info(auth_token: str) -> dict[Any, Any]: - """ - Fetch GitHub info of a user using the requests module - """ - headers = { - "Authorization": f"token {auth_token}", - "Accept": "application/vnd.github.v3+json", - } - return requests.get(AUTHENTICATED_USER_ENDPOINT, headers=headers, timeout=10).json() - - -if __name__ == "__main__": # pragma: no cover - if USER_TOKEN: - for key, value in fetch_github_info(USER_TOKEN).items(): - print(f"{key}: {value}") - else: - raise ValueError("'USER_TOKEN' field cannot be empty.") diff --git a/web_programming/fetch_jobs.py b/web_programming/fetch_jobs.py deleted file mode 100644 index 0d89bf45de57..000000000000 --- a/web_programming/fetch_jobs.py +++ /dev/null @@ -1,28 +0,0 @@ -""" -Scraping jobs given job title and location from indeed website -""" - -from __future__ import annotations - -from collections.abc import Generator - -import requests -from bs4 import BeautifulSoup - -url = "https://www.indeed.co.in/jobs?q=mobile+app+development&l=" - - -def fetch_jobs(location: str = "mumbai") -> Generator[tuple[str, str], None, None]: - soup = BeautifulSoup( - requests.get(url + location, timeout=10).content, "html.parser" - ) - # This attribute finds out all the specifics listed in a job - for job in soup.find_all("div", attrs={"data-tn-component": "organicJob"}): - job_title = job.find("a", attrs={"data-tn-element": "jobTitle"}).text.strip() - company_name = job.find("span", {"class": "company"}).text.strip() - yield job_title, company_name - - -if __name__ == "__main__": - for i, job in enumerate(fetch_jobs("Bangalore"), 1): - print(f"Job {i:>2} is {job[0]} at {job[1]}") diff --git a/web_programming/fetch_quotes.py b/web_programming/fetch_quotes.py deleted file mode 100644 index cf0add43f002..000000000000 --- a/web_programming/fetch_quotes.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -This file fetches quotes from the " ZenQuotes API ". -It does not require any API key as it uses free tier. - -For more details and premium features visit: - https://zenquotes.io/ -""" - -import pprint - -import requests - -API_ENDPOINT_URL = "https://zenquotes.io/api" - - -def quote_of_the_day() -> list: - return requests.get(API_ENDPOINT_URL + "/today", timeout=10).json() - - -def random_quotes() -> list: - return requests.get(API_ENDPOINT_URL + "/random", timeout=10).json() - - -if __name__ == "__main__": - """ - response object has all the info with the quote - To retrieve the actual quote access the response.json() object as below - response.json() is a list of json object - response.json()[0]['q'] = actual quote. - response.json()[0]['a'] = author name. - response.json()[0]['h'] = in html format. - """ - response = random_quotes() - pprint.pprint(response) diff --git a/web_programming/fetch_well_rx_price.py b/web_programming/fetch_well_rx_price.py deleted file mode 100644 index 93be2a9235d9..000000000000 --- a/web_programming/fetch_well_rx_price.py +++ /dev/null @@ -1,96 +0,0 @@ -""" - -Scrape the price and pharmacy name for a prescription drug from rx site -after providing the drug name and zipcode. - -""" - -from urllib.error import HTTPError - -from bs4 import BeautifulSoup -from requests import exceptions, get - -BASE_URL = "https://www.wellrx.com/prescriptions/{0}/{1}/?freshSearch=true" - - -def fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None: - """[summary] - - This function will take input of drug name and zipcode, - then request to the BASE_URL site. - Get the page data and scrape it to the generate the - list of lowest prices for the prescription drug. - - Args: - drug_name (str): [Drug name] - zip_code(str): [Zip code] - - Returns: - list: [List of pharmacy name and price] - - >>> fetch_pharmacy_and_price_list(None, None) - - >>> fetch_pharmacy_and_price_list(None, 30303) - - >>> fetch_pharmacy_and_price_list("eliquis", None) - - """ - - try: - # Has user provided both inputs? - if not drug_name or not zip_code: - return None - - request_url = BASE_URL.format(drug_name, zip_code) - response = get(request_url, timeout=10) - - # Is the response ok? - response.raise_for_status() - - # Scrape the data using bs4 - soup = BeautifulSoup(response.text, "html.parser") - - # This list will store the name and price. - pharmacy_price_list = [] - - # Fetch all the grids that contains the items. - grid_list = soup.find_all("div", {"class": "grid-x pharmCard"}) - if grid_list and len(grid_list) > 0: - for grid in grid_list: - # Get the pharmacy price. - pharmacy_name = grid.find("p", {"class": "list-title"}).text - - # Get price of the drug. - price = grid.find("span", {"p", "price price-large"}).text - - pharmacy_price_list.append( - { - "pharmacy_name": pharmacy_name, - "price": price, - } - ) - - return pharmacy_price_list - - except (HTTPError, exceptions.RequestException, ValueError): - return None - - -if __name__ == "__main__": - # Enter a drug name and a zip code - drug_name = input("Enter drug name: ").strip() - zip_code = input("Enter zip code: ").strip() - - pharmacy_price_list: list | None = fetch_pharmacy_and_price_list( - drug_name, zip_code - ) - - if pharmacy_price_list: - print(f"\nSearch results for {drug_name} at location {zip_code}:") - for pharmacy_price in pharmacy_price_list: - name = pharmacy_price["pharmacy_name"] - price = pharmacy_price["price"] - - print(f"Pharmacy: {name} Price: {price}") - else: - print(f"No results found for {drug_name}") diff --git a/web_programming/get_amazon_product_data.py b/web_programming/get_amazon_product_data.py deleted file mode 100644 index b98ff2c030af..000000000000 --- a/web_programming/get_amazon_product_data.py +++ /dev/null @@ -1,103 +0,0 @@ -""" -This file provides a function which will take a product name as input from the user, -and fetch from Amazon information about products of this name or category. The product -information will include title, URL, price, ratings, and the discount available. -""" - -from itertools import zip_longest - -import requests -from bs4 import BeautifulSoup -from pandas import DataFrame - - -def get_amazon_product_data(product: str = "laptop") -> DataFrame: - """ - Take a product name or category as input and return product information from Amazon - including title, URL, price, ratings, and the discount available. - """ - url = f"https://www.amazon.in/laptop/s?k={product}" - header = { - "User-Agent": ( - "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36" - "(KHTML, like Gecko)Chrome/44.0.2403.157 Safari/537.36" - ), - "Accept-Language": "en-US, en;q=0.5", - } - soup = BeautifulSoup( - requests.get(url, headers=header, timeout=10).text, features="lxml" - ) - # Initialize a Pandas dataframe with the column titles - data_frame = DataFrame( - columns=[ - "Product Title", - "Product Link", - "Current Price of the product", - "Product Rating", - "MRP of the product", - "Discount", - ] - ) - # Loop through each entry and store them in the dataframe - for item, _ in zip_longest( - soup.find_all( - "div", - attrs={"class": "s-result-item", "data-component-type": "s-search-result"}, - ), - soup.find_all("div", attrs={"class": "a-row a-size-base a-color-base"}), - ): - try: - product_title = item.h2.text - product_link = "https://www.amazon.in/" + item.h2.a["href"] - product_price = item.find("span", attrs={"class": "a-offscreen"}).text - try: - product_rating = item.find("span", attrs={"class": "a-icon-alt"}).text - except AttributeError: - product_rating = "Not available" - try: - product_mrp = ( - "₹" - + item.find( - "span", attrs={"class": "a-price a-text-price"} - ).text.split("₹")[1] - ) - except AttributeError: - product_mrp = "" - try: - discount = float( - ( - ( - float(product_mrp.strip("₹").replace(",", "")) - - float(product_price.strip("₹").replace(",", "")) - ) - / float(product_mrp.strip("₹").replace(",", "")) - ) - * 100 - ) - except ValueError: - discount = float("nan") - except AttributeError: - continue - data_frame.loc[str(len(data_frame.index))] = [ - product_title, - product_link, - product_price, - product_rating, - product_mrp, - discount, - ] - data_frame.loc[ - data_frame["Current Price of the product"] > data_frame["MRP of the product"], - "MRP of the product", - ] = " " - data_frame.loc[ - data_frame["Current Price of the product"] > data_frame["MRP of the product"], - "Discount", - ] = " " - data_frame.index += 1 - return data_frame - - -if __name__ == "__main__": - product = "headphones" - get_amazon_product_data(product).to_csv(f"Amazon Product Data for {product}.csv") diff --git a/web_programming/get_imdb_top_250_movies_csv.py b/web_programming/get_imdb_top_250_movies_csv.py deleted file mode 100644 index c914b29cb3b3..000000000000 --- a/web_programming/get_imdb_top_250_movies_csv.py +++ /dev/null @@ -1,30 +0,0 @@ -from __future__ import annotations - -import csv - -import requests -from bs4 import BeautifulSoup - - -def get_imdb_top_250_movies(url: str = "") -> dict[str, float]: - url = url or "https://www.imdb.com/chart/top/?ref_=nv_mv_250" - soup = BeautifulSoup(requests.get(url, timeout=10).text, "html.parser") - titles = soup.find_all("td", attrs="titleColumn") - ratings = soup.find_all("td", class_="ratingColumn imdbRating") - return { - title.a.text: float(rating.strong.text) - for title, rating in zip(titles, ratings) - } - - -def write_movies(filename: str = "IMDb_Top_250_Movies.csv") -> None: - movies = get_imdb_top_250_movies() - with open(filename, "w", newline="") as out_file: - writer = csv.writer(out_file) - writer.writerow(["Movie title", "IMDb rating"]) - for title, rating in movies.items(): - writer.writerow([title, rating]) - - -if __name__ == "__main__": - write_movies() diff --git a/web_programming/get_imdbtop.py.DISABLED b/web_programming/get_imdbtop.py.DISABLED deleted file mode 100644 index 5f7105f83239..000000000000 --- a/web_programming/get_imdbtop.py.DISABLED +++ /dev/null @@ -1,53 +0,0 @@ -import bs4 -import requests - - -def get_movie_data_from_soup(soup: bs4.element.ResultSet) -> dict[str, str]: - return { - "name": soup.h3.a.text, - "genre": soup.find("span", class_="genre").text.strip(), - "rating": soup.strong.text, - "page_link": f"https://www.imdb.com{soup.a.get('href')}", - } - - -def get_imdb_top_movies(num_movies: int = 5) -> tuple: - """Get the top num_movies most highly rated movies from IMDB and - return a tuple of dicts describing each movie's name, genre, rating, and URL. - - Args: - num_movies: The number of movies to get. Defaults to 5. - - Returns: - A list of tuples containing information about the top n movies. - - >>> len(get_imdb_top_movies(5)) - 5 - >>> len(get_imdb_top_movies(-3)) - 0 - >>> len(get_imdb_top_movies(4.99999)) - 4 - """ - num_movies = int(float(num_movies)) - if num_movies < 1: - return () - base_url = ( - "https://www.imdb.com/search/title?title_type=" - f"feature&sort=num_votes,desc&count={num_movies}" - ) - source = bs4.BeautifulSoup(requests.get(base_url).content, "html.parser") - return tuple( - get_movie_data_from_soup(movie) - for movie in source.find_all("div", class_="lister-item mode-advanced") - ) - - -if __name__ == "__main__": - import json - - num_movies = int(input("How many movies would you like to see? ")) - print( - ", ".join( - json.dumps(movie, indent=4) for movie in get_imdb_top_movies(num_movies) - ) - ) diff --git a/web_programming/get_ip_geolocation.py b/web_programming/get_ip_geolocation.py deleted file mode 100644 index 574d287f0db1..000000000000 --- a/web_programming/get_ip_geolocation.py +++ /dev/null @@ -1,40 +0,0 @@ -import requests - - -# Function to get geolocation data for an IP address -def get_ip_geolocation(ip_address: str) -> str: - try: - # Construct the URL for the IP geolocation API - url = f"https://ipinfo.io/{ip_address}/json" - - # Send a GET request to the API - response = requests.get(url, timeout=10) - - # Check if the HTTP request was successful - response.raise_for_status() - - # Parse the response as JSON - data = response.json() - - # Check if city, region, and country information is available - if "city" in data and "region" in data and "country" in data: - location = f"Location: {data['city']}, {data['region']}, {data['country']}" - else: - location = "Location data not found." - - return location - except requests.exceptions.RequestException as e: - # Handle network-related exceptions - return f"Request error: {e}" - except ValueError as e: - # Handle JSON parsing errors - return f"JSON parsing error: {e}" - - -if __name__ == "__main__": - # Prompt the user to enter an IP address - ip_address = input("Enter an IP address: ") - - # Get the geolocation data and print it - location = get_ip_geolocation(ip_address) - print(location) diff --git a/web_programming/get_top_billionaires.py b/web_programming/get_top_billionaires.py deleted file mode 100644 index 99f6e0be948a..000000000000 --- a/web_programming/get_top_billionaires.py +++ /dev/null @@ -1,101 +0,0 @@ -""" -CAUTION: You may get a json.decoding error. -This works for some of us but fails for others. -""" - -from datetime import UTC, date, datetime - -import requests -from rich import box -from rich import console as rich_console -from rich import table as rich_table - -LIMIT = 10 -TODAY = datetime.now(tz=UTC) -API_URL = ( - "https://www.forbes.com/forbesapi/person/rtb/0/position/true.json" - "?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth" - f"&limit={LIMIT}" -) - - -def years_old(birth_timestamp: int, today: date | None = None) -> int: - """ - Calculate the age in years based on the given birth date. Only the year, month, - and day are used in the calculation. The time of day is ignored. - - Args: - birth_timestamp: The date of birth. - today: (useful for writing tests) or if None then datetime.date.today(). - - Returns: - int: The age in years. - - Examples: - >>> today = date(2024, 1, 12) - >>> years_old(birth_timestamp=datetime(1959, 11, 20).timestamp(), today=today) - 64 - >>> years_old(birth_timestamp=datetime(1970, 2, 13).timestamp(), today=today) - 53 - >>> all( - ... years_old(datetime(today.year - i, 1, 12).timestamp(), today=today) == i - ... for i in range(1, 111) - ... ) - True - """ - today = today or TODAY.date() - birth_date = datetime.fromtimestamp(birth_timestamp, tz=UTC).date() - return (today.year - birth_date.year) - ( - (today.month, today.day) < (birth_date.month, birth_date.day) - ) - - -def get_forbes_real_time_billionaires() -> list[dict[str, int | str]]: - """ - Get the top 10 real-time billionaires using Forbes API. - - Returns: - List of top 10 realtime billionaires data. - """ - response_json = requests.get(API_URL, timeout=10).json() - return [ - { - "Name": person["personName"], - "Source": person["source"], - "Country": person["countryOfCitizenship"], - "Gender": person["gender"], - "Worth ($)": f"{person['finalWorth'] / 1000:.1f} Billion", - "Age": str(years_old(person["birthDate"] / 1000)), - } - for person in response_json["personList"]["personsLists"] - ] - - -def display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> None: - """ - Display Forbes real-time billionaires in a rich table. - - Args: - forbes_billionaires (list): Forbes top 10 real-time billionaires - """ - - table = rich_table.Table( - title=f"Forbes Top {LIMIT} Real-Time Billionaires at {TODAY:%Y-%m-%d %H:%M}", - style="green", - highlight=True, - box=box.SQUARE, - ) - for key in forbes_billionaires[0]: - table.add_column(key) - - for billionaire in forbes_billionaires: - table.add_row(*billionaire.values()) - - rich_console.Console().print(table) - - -if __name__ == "__main__": - from doctest import testmod - - testmod() - display_billionaires(get_forbes_real_time_billionaires()) diff --git a/web_programming/get_top_hn_posts.py b/web_programming/get_top_hn_posts.py deleted file mode 100644 index f5d4f874c6c6..000000000000 --- a/web_programming/get_top_hn_posts.py +++ /dev/null @@ -1,26 +0,0 @@ -from __future__ import annotations - -import requests - - -def get_hackernews_story(story_id: str) -> dict: - url = f"https://hacker-news.firebaseio.com/v0/item/{story_id}.json?print=pretty" - return requests.get(url, timeout=10).json() - - -def hackernews_top_stories(max_stories: int = 10) -> list[dict]: - """ - Get the top max_stories posts from HackerNews - https://news.ycombinator.com/ - """ - url = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty" - story_ids = requests.get(url, timeout=10).json()[:max_stories] - return [get_hackernews_story(story_id) for story_id in story_ids] - - -def hackernews_top_stories_as_markdown(max_stories: int = 10) -> str: - stories = hackernews_top_stories(max_stories) - return "\n".join("* [{title}]({url})".format(**story) for story in stories) - - -if __name__ == "__main__": - print(hackernews_top_stories_as_markdown()) diff --git a/web_programming/get_user_tweets.py.DISABLED b/web_programming/get_user_tweets.py.DISABLED deleted file mode 100644 index 3abc69715727..000000000000 --- a/web_programming/get_user_tweets.py.DISABLED +++ /dev/null @@ -1,59 +0,0 @@ -import csv - -import tweepy - -# Twitter API credentials -consumer_key = "" -consumer_secret = "" -access_key = "" -access_secret = "" - - -def get_all_tweets(screen_name: str) -> None: - # authorize twitter, initialize tweepy - auth = tweepy.OAuthHandler(consumer_key, consumer_secret) - auth.set_access_token(access_key, access_secret) - api = tweepy.API(auth) - - # initialize a list to hold all the tweepy Tweets - alltweets = [] - - # make initial request for most recent tweets (200 is the maximum allowed count) - new_tweets = api.user_timeline(screen_name=screen_name, count=200) - - # save most recent tweets - alltweets.extend(new_tweets) - - # save the id of the oldest tweet less one - oldest = alltweets[-1].id - 1 - - # keep grabbing tweets until there are no tweets left to grab - while len(new_tweets) > 0: - print(f"getting tweets before {oldest}") - - # all subsequent requests use the max_id param to prevent duplicates - new_tweets = api.user_timeline( - screen_name=screen_name, count=200, max_id=oldest - ) - - # save most recent tweets - alltweets.extend(new_tweets) - - # update the id of the oldest tweet less one - oldest = alltweets[-1].id - 1 - - print(f"...{len(alltweets)} tweets downloaded so far") - - # transform the tweepy tweets into a 2D array that will populate the csv - outtweets = [[tweet.id_str, tweet.created_at, tweet.text] for tweet in alltweets] - - # write the csv - with open(f"new_{screen_name}_tweets.csv", "w") as f: - writer = csv.writer(f) - writer.writerow(["id", "created_at", "text"]) - writer.writerows(outtweets) - - -if __name__ == "__main__": - # pass in the username of the account you want to download - get_all_tweets("FirePing32") diff --git a/web_programming/giphy.py b/web_programming/giphy.py deleted file mode 100644 index 2bf3e3ea9c0b..000000000000 --- a/web_programming/giphy.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python3 -import requests - -giphy_api_key = "YOUR API KEY" -# Can be fetched from https://developers.giphy.com/dashboard/ - - -def get_gifs(query: str, api_key: str = giphy_api_key) -> list: - """ - Get a list of URLs of GIFs based on a given query.. - """ - formatted_query = "+".join(query.split()) - url = f"https://api.giphy.com/v1/gifs/search?q={formatted_query}&api_key={api_key}" - gifs = requests.get(url, timeout=10).json()["data"] - return [gif["url"] for gif in gifs] - - -if __name__ == "__main__": - print("\n".join(get_gifs("space ship"))) diff --git a/web_programming/instagram_crawler.py b/web_programming/instagram_crawler.py deleted file mode 100644 index df62735fb328..000000000000 --- a/web_programming/instagram_crawler.py +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env python3 -from __future__ import annotations - -import json - -import requests -from bs4 import BeautifulSoup -from fake_useragent import UserAgent - -headers = {"UserAgent": UserAgent().random} - - -def extract_user_profile(script) -> dict: - """ - May raise json.decoder.JSONDecodeError - """ - data = script.contents[0] - info = json.loads(data[data.find('{"config"') : -1]) - return info["entry_data"]["ProfilePage"][0]["graphql"]["user"] - - -class InstagramUser: - """ - Class Instagram crawl instagram user information - - Usage: (doctest failing on GitHub Actions) - # >>> instagram_user = InstagramUser("github") - # >>> instagram_user.is_verified - True - # >>> instagram_user.biography - 'Built for developers.' - """ - - def __init__(self, username): - self.url = f"https://www.instagram.com/{username}/" - self.user_data = self.get_json() - - def get_json(self) -> dict: - """ - Return a dict of user information - """ - html = requests.get(self.url, headers=headers, timeout=10).text - scripts = BeautifulSoup(html, "html.parser").find_all("script") - try: - return extract_user_profile(scripts[4]) - except (json.decoder.JSONDecodeError, KeyError): - return extract_user_profile(scripts[3]) - - def __repr__(self) -> str: - return f"{self.__class__.__name__}('{self.username}')" - - def __str__(self) -> str: - return f"{self.fullname} ({self.username}) is {self.biography}" - - @property - def username(self) -> str: - return self.user_data["username"] - - @property - def fullname(self) -> str: - return self.user_data["full_name"] - - @property - def biography(self) -> str: - return self.user_data["biography"] - - @property - def email(self) -> str: - return self.user_data["business_email"] - - @property - def website(self) -> str: - return self.user_data["external_url"] - - @property - def number_of_followers(self) -> int: - return self.user_data["edge_followed_by"]["count"] - - @property - def number_of_followings(self) -> int: - return self.user_data["edge_follow"]["count"] - - @property - def number_of_posts(self) -> int: - return self.user_data["edge_owner_to_timeline_media"]["count"] - - @property - def profile_picture_url(self) -> str: - return self.user_data["profile_pic_url_hd"] - - @property - def is_verified(self) -> bool: - return self.user_data["is_verified"] - - @property - def is_private(self) -> bool: - return self.user_data["is_private"] - - -def test_instagram_user(username: str = "github") -> None: - """ - A self running doctest - >>> test_instagram_user() - """ - import os - - if os.environ.get("CI"): - return # test failing on GitHub Actions - instagram_user = InstagramUser(username) - assert instagram_user.user_data - assert isinstance(instagram_user.user_data, dict) - assert instagram_user.username == username - if username != "github": - return - assert instagram_user.fullname == "GitHub" - assert instagram_user.biography == "Built for developers." - assert instagram_user.number_of_posts > 150 - assert instagram_user.number_of_followers > 120000 - assert instagram_user.number_of_followings > 15 - assert instagram_user.email == "support@github.com" - assert instagram_user.website == "https://github.com/readme" - assert instagram_user.profile_picture_url.startswith("https://instagram.") - assert instagram_user.is_verified is True - assert instagram_user.is_private is False - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - instagram_user = InstagramUser("github") - print(instagram_user) - print(f"{instagram_user.number_of_posts = }") - print(f"{instagram_user.number_of_followers = }") - print(f"{instagram_user.number_of_followings = }") - print(f"{instagram_user.email = }") - print(f"{instagram_user.website = }") - print(f"{instagram_user.profile_picture_url = }") - print(f"{instagram_user.is_verified = }") - print(f"{instagram_user.is_private = }") diff --git a/web_programming/instagram_pic.py b/web_programming/instagram_pic.py deleted file mode 100644 index 292cacc16c04..000000000000 --- a/web_programming/instagram_pic.py +++ /dev/null @@ -1,47 +0,0 @@ -from datetime import UTC, datetime - -import requests -from bs4 import BeautifulSoup - - -def download_image(url: str) -> str: - """ - Download an image from a given URL by scraping the 'og:image' meta tag. - - Parameters: - url: The URL to scrape. - - Returns: - A message indicating the result of the operation. - """ - try: - response = requests.get(url, timeout=10) - response.raise_for_status() - except requests.exceptions.RequestException as e: - return f"An error occurred during the HTTP request to {url}: {e!r}" - - soup = BeautifulSoup(response.text, "html.parser") - image_meta_tag = soup.find("meta", {"property": "og:image"}) - if not image_meta_tag: - return "No meta tag with property 'og:image' was found." - - image_url = image_meta_tag.get("content") - if not image_url: - return f"Image URL not found in meta tag {image_meta_tag}." - - try: - image_data = requests.get(image_url, timeout=10).content - except requests.exceptions.RequestException as e: - return f"An error occurred during the HTTP request to {image_url}: {e!r}" - if not image_data: - return f"Failed to download the image from {image_url}." - - file_name = f"{datetime.now(tz=UTC).astimezone():%Y-%m-%d_%H:%M:%S}.jpg" - with open(file_name, "wb") as out_file: - out_file.write(image_data) - return f"Image downloaded and saved in the file {file_name}" - - -if __name__ == "__main__": - url = input("Enter image URL: ").strip() or "https://www.instagram.com" - print(f"download_image({url}): {download_image(url)}") diff --git a/web_programming/instagram_video.py b/web_programming/instagram_video.py deleted file mode 100644 index a4cddce25138..000000000000 --- a/web_programming/instagram_video.py +++ /dev/null @@ -1,17 +0,0 @@ -from datetime import UTC, datetime - -import requests - - -def download_video(url: str) -> bytes: - base_url = "https://downloadgram.net/wp-json/wppress/video-downloader/video?url=" - video_url = requests.get(base_url + url, timeout=10).json()[0]["urls"][0]["src"] - return requests.get(video_url, timeout=10).content - - -if __name__ == "__main__": - url = input("Enter Video/IGTV url: ").strip() - file_name = f"{datetime.now(tz=UTC).astimezone():%Y-%m-%d_%H:%M:%S}.mp4" - with open(file_name, "wb") as fp: - fp.write(download_video(url)) - print(f"Done. Video saved to disk as {file_name}.") diff --git a/web_programming/nasa_data.py b/web_programming/nasa_data.py deleted file mode 100644 index 33a6406c52a6..000000000000 --- a/web_programming/nasa_data.py +++ /dev/null @@ -1,38 +0,0 @@ -import shutil - -import requests - - -def get_apod_data(api_key: str) -> dict: - """ - Get the APOD(Astronomical Picture of the day) data - Get your API Key from: https://api.nasa.gov/ - """ - url = "https://api.nasa.gov/planetary/apod" - return requests.get(url, params={"api_key": api_key}, timeout=10).json() - - -def save_apod(api_key: str, path: str = ".") -> dict: - apod_data = get_apod_data(api_key) - img_url = apod_data["url"] - img_name = img_url.split("/")[-1] - response = requests.get(img_url, stream=True, timeout=10) - - with open(f"{path}/{img_name}", "wb+") as img_file: - shutil.copyfileobj(response.raw, img_file) - del response - return apod_data - - -def get_archive_data(query: str) -> dict: - """ - Get the data of a particular query from NASA archives - """ - url = "https://images-api.nasa.gov/search" - return requests.get(url, params={"q": query}, timeout=10).json() - - -if __name__ == "__main__": - print(save_apod("YOUR API KEY")) - apollo_2011_items = get_archive_data("apollo 2011")["collection"]["items"] - print(apollo_2011_items[0]["data"][0]["description"]) diff --git a/web_programming/open_google_results.py b/web_programming/open_google_results.py deleted file mode 100644 index 52dd37d7b91a..000000000000 --- a/web_programming/open_google_results.py +++ /dev/null @@ -1,38 +0,0 @@ -import webbrowser -from sys import argv -from urllib.parse import parse_qs, quote - -import requests -from bs4 import BeautifulSoup -from fake_useragent import UserAgent - -if __name__ == "__main__": - query = "%20".join(argv[1:]) if len(argv) > 1 else quote(str(input("Search: "))) - - print("Googling.....") - - url = f"https://www.google.com/search?q={query}&num=100" - - res = requests.get( - url, - headers={"User-Agent": str(UserAgent().random)}, - timeout=10, - ) - - try: - link = ( - BeautifulSoup(res.text, "html.parser") - .find("div", attrs={"class": "yuRUbf"}) - .find("a") - .get("href") - ) - - except AttributeError: - link = parse_qs( - BeautifulSoup(res.text, "html.parser") - .find("div", attrs={"class": "kCrYT"}) - .find("a") - .get("href") - )["url"][0] - - webbrowser.open(link) diff --git a/web_programming/random_anime_character.py b/web_programming/random_anime_character.py deleted file mode 100644 index aed932866258..000000000000 --- a/web_programming/random_anime_character.py +++ /dev/null @@ -1,39 +0,0 @@ -import os - -import requests -from bs4 import BeautifulSoup -from fake_useragent import UserAgent - -headers = {"UserAgent": UserAgent().random} -URL = "https://www.mywaifulist.moe/random" - - -def save_image(image_url: str, image_title: str) -> None: - """ - Saves the image of anime character - """ - image = requests.get(image_url, headers=headers, timeout=10) - with open(image_title, "wb") as file: - file.write(image.content) - - -def random_anime_character() -> tuple[str, str, str]: - """ - Returns the Title, Description, and Image Title of a random anime character . - """ - soup = BeautifulSoup( - requests.get(URL, headers=headers, timeout=10).text, "html.parser" - ) - title = soup.find("meta", attrs={"property": "og:title"}).attrs["content"] - image_url = soup.find("meta", attrs={"property": "og:image"}).attrs["content"] - description = soup.find("p", id="description").get_text() - _, image_extension = os.path.splitext(os.path.basename(image_url)) - image_title = title.strip().replace(" ", "_") - image_title = f"{image_title}{image_extension}" - save_image(image_url, image_title) - return (title, description, image_title) - - -if __name__ == "__main__": - title, desc, image_title = random_anime_character() - print(f"{title}\n\n{desc}\n\nImage saved : {image_title}") diff --git a/web_programming/recaptcha_verification.py b/web_programming/recaptcha_verification.py deleted file mode 100644 index 168862204fa9..000000000000 --- a/web_programming/recaptcha_verification.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -Recaptcha is a free captcha service offered by Google in order to secure websites and -forms. At https://www.google.com/recaptcha/admin/create you can create new recaptcha -keys and see the keys that your have already created. -* Keep in mind that recaptcha doesn't work with localhost -When you create a recaptcha key, your will get two separate keys: ClientKey & SecretKey. -ClientKey should be kept in your site's front end -SecretKey should be kept in your site's back end - -# An example HTML login form with recaptcha tag is shown below - - <form action="" method="post"> - <h2 class="text-center">Log in</h2> - {% csrf_token %} - <div class="form-group"> - <input type="text" name="username" required="required"> - </div> - <div class="form-group"> - <input type="password" name="password" required="required"> - </div> - <div class="form-group"> - <button type="submit">Log in</button> - </div> - <!-- Below is the recaptcha tag of html --> - <div class="g-recaptcha" data-sitekey="ClientKey"></div> - </form> - - <!-- Below is the recaptcha script to be kept inside html tag --> - <script src="https://www.google.com/recaptcha/api.js" async defer></script> - -Below a Django function for the views.py file contains a login form for demonstrating -recaptcha verification. -""" - -import requests - -try: - from django.contrib.auth import authenticate, login - from django.shortcuts import redirect, render -except ImportError: - authenticate = login = render = redirect = print - - -def login_using_recaptcha(request): - # Enter your recaptcha secret key here - secret_key = "secretKey" # noqa: S105 - url = "https://www.google.com/recaptcha/api/siteverify" - - # when method is not POST, direct user to login page - if request.method != "POST": - return render(request, "login.html") - - # from the frontend, get username, password, and client_key - username = request.POST.get("username") - password = request.POST.get("password") - client_key = request.POST.get("g-recaptcha-response") - - # post recaptcha response to Google's recaptcha api - response = requests.post( - url, data={"secret": secret_key, "response": client_key}, timeout=10 - ) - # if the recaptcha api verified our keys - if response.json().get("success", False): - # authenticate the user - user_in_database = authenticate(request, username=username, password=password) - if user_in_database: - login(request, user_in_database) - return redirect("/your-webpage") - return render(request, "login.html") diff --git a/web_programming/reddit.py b/web_programming/reddit.py deleted file mode 100644 index 6cc1a6b62009..000000000000 --- a/web_programming/reddit.py +++ /dev/null @@ -1,53 +0,0 @@ -from __future__ import annotations - -import requests - -valid_terms = set( - """approved_at_utc approved_by author_flair_background_color -author_flair_css_class author_flair_richtext author_flair_template_id author_fullname -author_premium can_mod_post category clicked content_categories created_utc downs -edited gilded gildings hidden hide_score is_created_from_ads_ui is_meta -is_original_content is_reddit_media_domain is_video link_flair_css_class -link_flair_richtext link_flair_text link_flair_text_color media_embed mod_reason_title -name permalink pwls quarantine saved score secure_media secure_media_embed selftext -subreddit subreddit_name_prefixed subreddit_type thumbnail title top_awarded_type -total_awards_received ups upvote_ratio url user_reports""".split() -) - - -def get_subreddit_data( - subreddit: str, limit: int = 1, age: str = "new", wanted_data: list | None = None -) -> dict: - """ - subreddit : Subreddit to query - limit : Number of posts to fetch - age : ["new", "top", "hot"] - wanted_data : Get only the required data in the list - """ - wanted_data = wanted_data or [] - if invalid_search_terms := ", ".join(sorted(set(wanted_data) - valid_terms)): - msg = f"Invalid search term: {invalid_search_terms}" - raise ValueError(msg) - response = requests.get( - f"https://reddit.com/r/{subreddit}/{age}.json?limit={limit}", - headers={"User-agent": "A random string"}, - timeout=10, - ) - if response.status_code == 429: - raise requests.HTTPError(response=response) - - data = response.json() - if not wanted_data: - return {id_: data["data"]["children"][id_] for id_ in range(limit)} - - data_dict = {} - for id_ in range(limit): - data_dict[id_] = { - item: data["data"]["children"][id_]["data"][item] for item in wanted_data - } - return data_dict - - -if __name__ == "__main__": - # If you get Error 429, that means you are rate limited.Try after some time - print(get_subreddit_data("learnpython", wanted_data=["title", "url", "selftext"])) diff --git a/web_programming/search_books_by_isbn.py b/web_programming/search_books_by_isbn.py deleted file mode 100644 index 6b69018e6639..000000000000 --- a/web_programming/search_books_by_isbn.py +++ /dev/null @@ -1,75 +0,0 @@ -""" -Get book and author data from https://openlibrary.org - -ISBN: https://en.wikipedia.org/wiki/International_Standard_Book_Number -""" - -from json import JSONDecodeError # Workaround for requests.exceptions.JSONDecodeError - -import requests - - -def get_openlibrary_data(olid: str = "isbn/0140328726") -> dict: - """ - Given an 'isbn/0140328726', return book data from Open Library as a Python dict. - Given an '/authors/OL34184A', return authors data as a Python dict. - This code must work for olids with or without a leading slash ('/'). - - # Comment out doctests if they take too long or have results that may change - # >>> get_openlibrary_data(olid='isbn/0140328726') # doctest: +ELLIPSIS - {'publishers': ['Puffin'], 'number_of_pages': 96, 'isbn_10': ['0140328726'], ... - # >>> get_openlibrary_data(olid='/authors/OL7353617A') # doctest: +ELLIPSIS - {'name': 'Adrian Brisku', 'created': {'type': '/type/datetime', ... - """ - new_olid = olid.strip().strip("/") # Remove leading/trailing whitespace & slashes - if new_olid.count("/") != 1: - msg = f"{olid} is not a valid Open Library olid" - raise ValueError(msg) - return requests.get(f"https://openlibrary.org/{new_olid}.json", timeout=10).json() - - -def summarize_book(ol_book_data: dict) -> dict: - """ - Given Open Library book data, return a summary as a Python dict. - """ - desired_keys = { - "title": "Title", - "publish_date": "Publish date", - "authors": "Authors", - "number_of_pages": "Number of pages:", - "first_sentence": "First sentence", - "isbn_10": "ISBN (10)", - "isbn_13": "ISBN (13)", - } - data = {better_key: ol_book_data[key] for key, better_key in desired_keys.items()} - data["Authors"] = [ - get_openlibrary_data(author["key"])["name"] for author in data["Authors"] - ] - data["First sentence"] = data["First sentence"]["value"] - for key, value in data.items(): - if isinstance(value, list): - data[key] = ", ".join(value) - return data - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - - while True: - isbn = input("\nEnter the ISBN code to search (or 'quit' to stop): ").strip() - if isbn.lower() in ("", "q", "quit", "exit", "stop"): - break - - if len(isbn) not in (10, 13) or not isbn.isdigit(): - print(f"Sorry, {isbn} is not a valid ISBN. Please, input a valid ISBN.") - continue - - print(f"\nSearching Open Library for ISBN: {isbn}...\n") - - try: - book_summary = summarize_book(get_openlibrary_data(f"isbn/{isbn}")) - print("\n".join(f"{key}: {value}" for key, value in book_summary.items())) - except JSONDecodeError: # Workaround for requests.exceptions.RequestException: - print(f"Sorry, there are no results for ISBN: {isbn}.") diff --git a/web_programming/slack_message.py b/web_programming/slack_message.py deleted file mode 100644 index d4d5658898ac..000000000000 --- a/web_programming/slack_message.py +++ /dev/null @@ -1,22 +0,0 @@ -# Created by sarathkaul on 12/11/19 - -import requests - - -def send_slack_message(message_body: str, slack_url: str) -> None: - headers = {"Content-Type": "application/json"} - response = requests.post( - slack_url, json={"text": message_body}, headers=headers, timeout=10 - ) - if response.status_code != 200: - msg = ( - "Request to slack returned an error " - f"{response.status_code}, the response is:\n{response.text}" - ) - raise ValueError(msg) - - -if __name__ == "__main__": - # Set the slack url to the one provided by Slack when you create the webhook at - # https://my.slack.com/services/new/incoming-webhook/ - send_slack_message("<YOUR MESSAGE BODY>", "<SLACK CHANNEL URL>") diff --git a/web_programming/test_fetch_github_info.py b/web_programming/test_fetch_github_info.py deleted file mode 100644 index 2da97c782df7..000000000000 --- a/web_programming/test_fetch_github_info.py +++ /dev/null @@ -1,27 +0,0 @@ -import json - -import requests - -from .fetch_github_info import AUTHENTICATED_USER_ENDPOINT, fetch_github_info - - -def test_fetch_github_info(monkeypatch): - class FakeResponse: - def __init__(self, content) -> None: - assert isinstance(content, (bytes, str)) - self.content = content - - def json(self): - return json.loads(self.content) - - def mock_response(*args, **kwargs): - assert args[0] == AUTHENTICATED_USER_ENDPOINT - assert "Authorization" in kwargs["headers"] - assert kwargs["headers"]["Authorization"].startswith("token ") - assert "Accept" in kwargs["headers"] - return FakeResponse(b'{"login":"test","id":1}') - - monkeypatch.setattr(requests, "get", mock_response) - result = fetch_github_info("token") - assert result["login"] == "test" - assert result["id"] == 1 diff --git a/web_programming/world_covid19_stats.py b/web_programming/world_covid19_stats.py deleted file mode 100644 index 4948d8cfd43c..000000000000 --- a/web_programming/world_covid19_stats.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python3 - -""" -Provide the current worldwide COVID-19 statistics. -This data is being scrapped from 'https://www.worldometers.info/coronavirus/'. -""" - -import requests -from bs4 import BeautifulSoup - - -def world_covid19_stats(url: str = "https://www.worldometers.info/coronavirus") -> dict: - """ - Return a dict of current worldwide COVID-19 statistics - """ - soup = BeautifulSoup(requests.get(url, timeout=10).text, "html.parser") - keys = soup.findAll("h1") - values = soup.findAll("div", {"class": "maincounter-number"}) - keys += soup.findAll("span", {"class": "panel-title"}) - values += soup.findAll("div", {"class": "number-table-main"}) - return {key.text.strip(): value.text.strip() for key, value in zip(keys, values)} - - -if __name__ == "__main__": - print("\033[1m COVID-19 Status of the World \033[0m\n") - print("\n".join(f"{key}\n{value}" for key, value in world_covid19_stats().items()))